gettext的替代品?

时间:2010-02-02 16:12:46

标签: localization internationalization gettext

gettext是否有任何通用的本地化/翻译替代方案?

开源或专有无关紧要。

当我说替代gettext时,我的意思是一个国际化的图书馆,有一个本地化的后端。

我问的原因是因为(除其他外)我发现gettext的做法有点麻烦和静态,主要是在后端位。

4 个答案:

答案 0 :(得分:43)

首先,我认为gettext是目前最好的之一。

您可以查看可能提供更好API的Boost.Locale并使用gettext的词典模型:http://cppcms.sourceforge.net/boost_locale/docs/(不是Boost的官方部分,仍为测试版)。


修改

如果您不喜欢gettext ...

这些是翻译技术:

  • OASIS XLIFF
  • GNU gettext po / mo files
  • POSIX目录
  • Qt ts / tm files
  • Java属性,
  • Windows资源。

现在:

  • 最后两个完全废话......很难使用翻译和维护,不支持复数形式。
  • Qt ts / tm - 需要使用Qt框架。与gettext具有非常相似的模型。不错的解决方案,但仅限于Qt。在通用程序中没那么有用。
  • POSIX目录 - 没有人使用它们,没有复数形式的支持。垃圾。
  • OASIX XLIFF - “标准”解决方案,取决于XML,甚至ICU也需要编译到特定的ICU资源以供使用。有限的翻译工具,我不知道任何支持XLIFF的库。多种形式不太容易使用(ICU仅在4.x版本中包含一些支持)。

现在我们有什么?

GNU gettext,广泛使用,有很棒的工具,有很多复数形式支持,在翻译社区很受欢迎......

所以决定,你真的认为gettext不是那么好的解决方案吗?

我不这么认为。您根本没有使用过其他解决方案,因此请先尝试了解它的工作原理。

答案 1 :(得分:2)

有关gettext()和所有pro-gettext()的有趣评论。

我并不是说它在大多数情况下不能正常工作,但我试图用它来管理一个项目,并且很快就被使用它的硬度所压倒。也许今天有一些翻译用户界面,但我甚至没有看。字符串的提取和合并对我来说不是这样。

现在,我感谢Artyom谈论XLIFF,因为一切都是XML,这对我的环境来说是一个更好的解决方案。哦!那里有优秀的编辑。但如果你喜欢gettext(),你就找不到它们了。 8 - )

我建议以这个为例:

https://sourceforge.net/projects/wordforge2/

现在,这可能会给程序员一个噩梦,使其全部工作,但我们想要的是翻译人员的梦想成真(程序员在翻译时也没有工作,因为我可以用gettext告诉你()我必须做所有的工作!)

答案 2 :(得分:2)

Zend还有一个替代方案,支持gettext * .po / * .mo文件和更多格式。 许多Apache服务器缓存转换文件,因为gettext是作为模块实现的,必须重新启动服务器才能刷新转换数据。

Zend实现避免了这种情况并支持更多格式:

http://framework.zend.com/manual/1.12/en/zend.translate.html

答案 3 :(得分:0)

Fluent是一个新系统,提供了gettext缺少的许多改编。在gettext支持复数的情况下,fluent具有用于文本变体的通用框架。在gettext使用“未翻译的”字符串作为其翻译键的地方,fluent支持一个抽象键(允许对源语言中刚好同义的内容进行多次翻译。Here is a more extensive comparison

来自firefox's preferences codebase的流利.ftl文件示例如下:

# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

blocklist-window =
    .title = Block Lists
    .style = width: 55em

blocklist-description = Choose the list { -brand-short-name } uses to block online trackers. Lists provided by <a data-l10n-name="disconnect-link" title="Disconnect">Disconnect</a>.
blocklist-close-key =
    .key = w

blocklist-treehead-list =
    .label = List

blocklist-button-cancel =
    .label = Cancel
    .accesskey = C

blocklist-button-ok =
    .label = Save Changes
    .accesskey = S

# This template constructs the name of the block list in the block lists dialog.
# It combines the list name and description.
# e.g. "Standard (Recommended). This list does a pretty good job."
#
# Variables:
#   $listName {string, "Standard (Recommended)."} - List name.
#   $description {string, "This list does a pretty good job."} - Description of the list.
blocklist-item-list-template = { $listName } { $description }

blocklist-item-moz-std-listName = Level 1 block list (Recommended).
blocklist-item-moz-std-description = Allows some trackers so fewer websites break.
blocklist-item-moz-full-listName = Level 2 block list.
blocklist-item-moz-full-description = Blocks all detected trackers. Some websites or content may not load properly.