【问题标题】:ZF2 - override gettext translationsZF2 - 覆盖 gettext 翻译
【发布时间】:2015-04-27 08:48:31
【问题描述】:

我正在开发一个 Zend Framework 2 项目,该项目使用 gettext (mo/po) 文件进行翻译。对于每种语言,我都有一个翻译文件。

是否可以仅针对某些客户端覆盖一些现有的默认翻译?例如:所有客户端都将translate('Cancel') 翻译成Cancel,除了一个客户端将加载默认翻译和一个额外的.mo 文件,以便translate('Cancel') 翻译成Give up。如何做到这一点?

只有一些标签应该有不同的翻译。我不想为每个客户加载不同的文件,而只想为某些客户加载额外的覆盖翻译。

谢谢

【问题讨论】:

    标签: php zend-framework2 gettext


    【解决方案1】:

    如果客户只使用一种语言,这很简单:创建一种新语言来为客户服务。该语言与基本语言的区别仅在客户指定的范围内。如果基础语言是关键语言,则变得更容易,因为您只需要在您的语言中包含那些特定的翻译。困难的部分是进行客户特定的语言检测。

    【讨论】:

    • 客户端可以有多种语言。例如,有 en.mo、fr.mo、es.mo 文件,每个文件都包含所有站点标签的完整翻译。我想要做的是添加额外的文件 en_myclient.mo 例如,其中将仅包含已在 en.mo 中定义的几个标签,但客户希望在他的网站上对它们进行不同的标记。
    • 没错!该客户端仅使用英语,因此将 en.po 复制到 custom.po,进行请求的更改并编译。然后在初始化 gettext 的代码中,检查此客户端并将您的语言设置为自定义。您可能需要找到一个不习惯使用的两个字母代码来代替自定义。只要您在未检测到此客户端时不中断语言检测,您的其他客户端使用多种语言这一事实​​就不是问题。
    • 这是否意味着我必须为每种语言创建和维护两个或多个翻译?是否可以将 custom.mo 作为 en.mo 的覆盖,以便 en.mo 包含所有翻译并始终加载,而 custom.mo 仅包含重新定义的几个标签并且仅为某些客户端加载。我认为在这种情况下我会遇到冲突。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 2014-12-07
    • 1970-01-01
    相关资源
    最近更新 更多