Localization gettext的替代方案?

Localization gettext的替代方案?,localization,internationalization,gettext,Localization,Internationalization,Gettext,gettext是否有通用的本地化/翻译替代方案 开源或专有并不重要 当我说gettext的替代品时,我指的是一个国际化库,带有各种本地化后端 我问这个问题的原因是(除其他外)我发现gettext做事情的方式有点繁琐和静态,主要是在后端。首先,我认为gettext是目前最好的方式之一 您可以查看一下Boost.Locale,它可以提供更好的API并使用gettext的字典模型:(不是Boost的官方部分,仍然是beta版) 编辑: 如果您不喜欢gettext 这些是翻译技术: 绿洲森林 GNU

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

开源或专有并不重要

当我说gettext的替代品时,我指的是一个国际化库,带有各种本地化后端


我问这个问题的原因是(除其他外)我发现gettext做事情的方式有点繁琐和静态,主要是在后端。

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

您可以查看一下
Boost.Locale
,它可以提供更好的API并使用
gettext
的字典模型:(不是Boost的官方部分,仍然是beta版)


编辑:

如果您不喜欢
gettext

这些是翻译技术:

  • 绿洲森林
  • GNU gettext po/mo文件
  • POSIX目录
  • Qt-ts/tm文件
  • Java属性
  • Windows资源
现在:

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

GNU
gettext
,应用广泛,工具强大,支持复数形式,在翻译人员社区非常流行

那么,你真的认为gettext不是很好的解决方案吗


我不这么认为。您根本没有使用过其他的解决方案,所以首先请尝试了解它是如何工作的。

关于gettext()和所有那些pro-gettext()的有趣评论

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

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

我建议大家看看这个例子:


现在,这可能会给程序员带来一场噩梦,让所有的工作都能正常进行,但我们想要的是让翻译人员的梦想成真(而且随着翻译的涌入,程序员的工作也会减少,因为我可以告诉你,使用gettext()我必须完成所有的工作!)

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

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

是一个新系统,它提供了gettext所缺乏的许多适应性。在gettext支持复数化的地方,fluent为文本变体提供了一个通用框架。当gettext使用“未翻译”字符串作为其翻译键时,fluent支持一个抽象键(允许对源语言中恰好同名的内容进行多个翻译)

fluent.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.
#此源代码表单受Mozilla Public的条款约束
#许可证,版本2.0。如果MPL的副本未随此文件一起分发
#文件,您可以在http://mozilla.org/MPL/2.0/.
区块列表窗口=
.title=阻止列表
.style=宽度:55em
blocklist description=选择{brand short name}用于阻止在线跟踪器的列表。Disconnect提供的列表。
块列表关闭键=
.key=w
块列表树头列表=
.label=列表
阻止列表按钮取消=
.label=取消
.accesskey=C
区块列表按钮ok=
.label=保存更改
.accesskey=S
#此模板在“块列表”对话框中构造块列表的名称。
#它结合了列表名称和描述。
#例如,“标准(推荐)。这个列表做得很好。”
#
#变量:
#$listName{string,“标准(推荐)。”}-列表名称。
#$description{string,“这个列表做得很好。”}-列表的描述。
块列表项列表模板={$listName}{$description}
块列表项目moz std listName=1级块列表(推荐)。
blocklist item moz std description=允许一些跟踪器,从而减少网站中断。
块列表项moz full listName=第2级块列表。
blocklist item moz full description=阻止所有检测到的跟踪器。某些网站或内容可能无法正确加载。

你觉得gettext的哪些方面比较麻烦?很难指出具体的东西,但感觉效率低下的是它的工作流程。我不认为你会找到更好的东西。它有一系列很好的工具可用于翻译和消息提取等。它是最受欢迎的工具你只需要好好学习。你能确切地解释一下你不喜欢什么吗?我是在问关于gettext的替代方案,而不是抨击gettext。看,这是我一直在寻找的答案。一些实际的替代方案。不管它们是好是坏,只是我可以看到不同的做事方式。显然没有那么多,但这不是答案翻译现在不是用记事本完成的,有所见即所得的工具用于本地化和开发。Java或Windows资源在任何方面都不难翻译和维护