gpt4 book ai didi

database - 如何建立多语言网站?

转载 作者:太空狗 更新时间:2023-10-30 01:47:55 26 4
gpt4 key购买 nike

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

有人告诉我,支持多语言站点的最佳方法是使用一个属性文件,您可以在其中存储页面的所有字符串,例如:

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

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

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

谢谢。

最佳答案

警告:我不是 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 优点

  • 在编码时不会妨碍您
  • 非常容易添加翻译
  • 可以将 PO 文件编译下来以提高速度
  • 有适用于大多数语言/平台的库
  • 有很好的跨平台工具来处理翻译。实际上可以使用 poEdit 等工具来组建您的翻译团队。让他们很容易管理翻译项目

Gettext 缺点

  • 解决您的网站“家具”需求,但您通常仍希望为数据库驱动的内容采用基于数据库的方法

有关 gettext 的更多信息,请参阅 this wikipedia page

关于database - 如何建立多语言网站?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39562/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com