当前位置:  开发笔记 > 编程语言 > 正文

你如何建立一个多语言的网站?

如何解决《你如何建立一个多语言的网站?》经验,为你挑选了2个好方法。

我的一个朋友现在正在使用J2EE和Struts构建一个Web应用程序,它将准备以多种语言显示页面.

有人告诉我,支持多语言网站的最佳方法是使用属性文件存储页面的所有字符串,例如:

welcome.english = "Welcome!"
welcome.spanish = "¡Bienvenido!"
...

这个解决方案没问题,但如果您的网站显示新闻或类似内容(博客)会发生什么?我的意思是,非静态的内容,经常更新...保留网站的人必须在每种支持的语言中编写每个新条目,并将条目的每个版本存储在数据库中.应用程序仅加载用户所选语言的条目.

您如何设计数据库以支持这种实现?

谢谢.



1> reefnet_alex..:

警告:我不是java黑客,所以YMMV但是......

使用"属性"列表的问题是你需要很多纪律.每次添加应输出给用户的字符串时,您需要打开属性文件,查看该字符串(或大致相当于它的字符串)是否已存在于文件中,然后再添加新属性如果不是.除此之外,如果您想将属性文件提供给外部翻译团队来处理,您必须希望属性文件具有人类可读/可编辑性.

基于数据库的方法对所有基于数据库的内容都很有用.理想情况下,您希望能够轻松地将各个内容与其翻译结合在一起.对于您可能希望输出的某些不在数据库之外的地方(错误消息等),它才真正落空.

我们发现一种相当古老的技术仍然可以使用gettext.Gettext或某些变体似乎可用于大多数语言和平台.基本前提是你将输出包装在一个特殊的函数调用中,如下所示:

echo _("Please do not press this button again");

然后在源代码上运行gettext工具将所有包含的实例提取到"po"文件中.这将包含如下条目:

#: myfolder/my.source:239
msgid "Please do not press this button again"
msgstr ""

您可以将翻译添加到适当的位置:

#: myfolder/my.source:239
msgid "Please do not press this button again"
msgstr "s’il vous plaît ne pas appuyer sur le bouton ci-dessous à nouveau"

随后运行gettext工具只需更新您的po文件.您甚至不需要从源中提取po文件.如果您知道您可能想要将您的网站翻译成行,那么您可以使用上面显示的格式(下划线函数)和所有输出.如果你没有提供一个po文件,它只会返回你在引号中输入的内容.gettext旨在与区域设置一起使用,因此用户区域设置用于检索相应的po文件.这使得添加新翻译变得非常容易.

Gettext Pros

在编码时不会妨碍你

很容易添加翻译

可以向下编译PO文件以提高速度

大多数语言/平台都有可用的库

有很好的跨平台工具来处理翻译.实际上,您可以使用poEdit等工具设置您的翻译团队,以便他们轻松管理翻译项目

Gettext缺点

解决您的网站"家具"需求,但您通常仍需要基于数据库的方法来处理数据库驱动的内容

有关gettext的更多信息,请参阅此维基百科页面



2> Espo..:

我之前设计数据库的方式是让一个包含基本信息的新闻表,如NewsID(int),NewsPubDate(datetime),NewsAuthor(varchar/int),然后有一个包含这些列的链接表NewsText:NewsID(int ),NewsText(文本),NewsLanguageID(int).最后你有一个语言表,它有LanguageID(int)和LanguageName(varchar).

然后,当您想要向用户显示您所做的新闻页面时:

SELECT NewsText FROM News INNER JOIN NewsText ON News.NewsID = NewsText.NewsID
WHERE NewsText.NewsLanguageID = <>

Session-bit是一个局部变量,您可以在第一次登录或进入站点时存储用户语言.

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有