31

编辑:我真的很想看到一些关于格式、优缺点的一般性讨论!

EDIT2:'赏金并没有真正帮助创建所需的讨论,有一些有趣的答案,但仍然缺少对该主题的全面报道。六个人将该问题标记为最喜欢的问题,这表明我对此讨论很感兴趣。

在决定国际化时,IMO 最困难的部分是存储格式的选择。

例如,Zend PHP 框架提供了以下适配器,几乎涵盖了我的所有选项:

  • 数组:不,难以维护
  • CSV:不知道,编码可能有问题
  • Gettext : 经常使用,poEdit 适用于所有可用但复杂的平台
  • INI : 不知道,编码可能有问题
  • TBX:不知道
  • TMX:太大了?没有免费的编辑器。
  • QT:不是很普遍,没有免费工具
  • XLIFF:即将到来的标准?但没有可用的免费工具。
  • XMLTM:不,不是我需要的

基本上我坚持使用 4 个“大胆”的选择。我想使用 INI 文件,但我正在阅读有关编码问题的信息……如果我使用严格的 UTF-8(文件、连接、数据库等),这真的有问题吗?

我在 Windows 上,我试图弄清楚 poEdit 的功能,但没有管理。网络上也没有教程,gettext仍然是一种选择还是濒临灭绝的物种?

XLIFF怎么样,有人用过吗?关于使用什么工具的任何提示?

任何关于Eclipse集成这些技术的想法?

4

10 回答 10

16

POEdit 并不难掌握。只需创建一个新的 .po 文件,然后告诉它从源文件中导入字符串。该程序会扫描您的 PHP 文件以查找任何匹配的函数调用_("Text"), gettext("Text")等。您甚至可以指定自己的函数来查找。

然后在相应的框中输入翻译。当您保存 .po 文件时,会自动生成一个 .mo 文件。这只是 gettext 可以轻松解析的翻译的二进制版本。

在您的 PHP 脚本中调用以bindtextdomain()告诉它您的 .mo 文件所在的位置。现在任何传递给gettext(或下划线函数)的字符串都将被翻译。

它使您的翻译文件保持最新变得非常容易。POEdit 还具有一些简洁的功能,例如允许注释、显示更改和删除的字符串以及允许模糊匹配,这意味着您不必重新翻译稍微修改过的字符串。

于 2008-11-11T07:58:21.270 回答
12

总有翻译工具包允许在我认为所有提到的格式和首选 gettext (po) 和 XLIFF 之间进行翻译。

于 2009-01-27T22:22:19.443 回答
1

如果你愿意,你可以使用 INI,只是 INI 没有办法告诉任何人它是 UTF8 格式,所以如果有人用编辑器打开你的 INI,它可能会损坏你的文件。

所以这个想法是,如果您可以信任用户使用 UTF8 编码对其进行编辑。

您可以在文件开头添加 BOM,一些编辑器知道这一点。

你要它存储什么?用户生成的内容或您的应用程序资源?

于 2008-11-11T07:48:33.083 回答
1

我在 l18n 端使用了其中两种格式:TMX 和 XLIFF。它们非常相似。TMX 现在更受欢迎,但 XLIFF 正在迅速获得支持。我上次查看时至少有一个免费的 XLIFF 编辑器:Transolution,但现在还没有开发。

于 2008-11-17T00:10:12.687 回答
1

我使用自定义设计自己进行数据存储 - 所有显示的文本都存储在数据库中。

我有两张桌子。第一个表有一个标识值、一个 32 个字符的 varchar 字段(在该字段上索引)和一个 200 个字符的短语英文描述。

我的第二个表具有来自第一个表的标识值、语言代码(EN_UK、EN_US 等)和文本的 NVARCHAR 列。

我对文本使用 nvarchar,因为它支持我尚未使用的其他字符集。

第一个表中的 32 个字符 varchar 存储类似“pleaselogin”的内容,而第二个表实际上存储了完整的“请在下面输入您的登录名和密码”。

我创建了一个巨大的动态值列表,我在运行时替换了这些值。例如,“您有 {[dynamic:passworddaysremain]} 天的时间来更改您的密码。” - 这让我可以处理不同语言的词序。

到目前为止,我只需要处理阿拉伯数字,但必须为第一个需要非阿拉伯数字的用户解决一些问题。

实际上,我每隔 2 小时将这些信息从数据库中提取一次,并将其缓存到磁盘中的每个 XML 语言的文件中。广泛使用 CDATA。

有许多可用选项,为了提高性能,您可以为每种语言使用 html 模板 - 我的方法效果很好,但在运行时确实使用 XML DOM 来创建页面。

于 2009-01-28T18:15:08.413 回答
0

一种相当简单的方法是只使用资源文件和资源脚本。像 MSVC 这样的程序在编辑它们时没有问题。它们对其他系统(以及文本编辑器)也相当友好。您可以为每种语言创建单独的字符串表(和位图表),并用它所在的语言标记每个这样的表。

于 2009-01-27T18:59:25.000 回答
0

这些选择对我来说都不是很开胃。

如果您要发送文件以进行多种语言的翻译,那么您希望能够相信编码是正确的,特别是如果您的团队中没有人会说这些语言。有时很难发现外语的编码问题,如果让操作系统“猜测”,很容易无意中破坏文件编码。

您确实需要一种声明其编码的格式。否则,翻译人员或其翻译工具可能会选择 UTF-8 以外的内容。对我来说,任何一种简单的 XML 格式都是最好的,但看起来您需要在 Zend 中自行开发。XLIFF 和 TMX 肯定是矫枉过正。

像 Java 的 XML 资源这样的格式将是理想的。

于 2009-01-27T19:15:20.040 回答
0

这可能与迄今为止发布的内容略有不同,并且可能不是您正在寻找的内容,但我想我会添加它,如果没有别的,只是一种不同的方法。我采用了面向对象的方法。我所做的是创建一个系统,通过将语言文件存储在字符串=>翻译对的数组中,将它们封装到一个类中。访问翻译是通过一个名为 translate 的方法来访问的,该方法将键字符串作为参数。扩展类继承父类的语言数组,可以添加或覆盖它。因为类是可扩展的,所以您可以更改基类并让更改通过子类传播,从而比数组本身更易于维护。另外,你只调用你需要的类。

于 2009-02-01T18:59:52.760 回答
0

我们只是将字符串存储在数据库中,并在应用程序中内置了一个翻译模式来处理实际添加不同语言的字符串。

在应用程序中,我们使用各种技巧来创建文本 ID,例如

£("btn_save")
£(Order.class,"amt")

当系统启动或手动触发重新加载时,从数据库加载翻译。£ 方法负责根据用户会话中指定的语言查找翻译后的字符串。

于 2009-02-01T22:26:57.337 回答
0

您可以在http://www.myl10n.net上查看我的名为 iL10Nz 的 l10n 工具

您可以上传 po/pot 文件、xliff、ini 文件、翻译、下载。

您也可以在 youtube 上观看此视频 http://www.youtube.com/watch?v=LJLmxMFxaxA

谢谢奥利维尔

于 2009-07-03T19:58:48.093 回答