【问题标题】:How to force gettext to translate a specific language, independently from current language?如何强制 gettext 独立于当前语言翻译特定语言?
【发布时间】:2013-12-31 15:51:09
【问题描述】:

我如何告诉函数gettext() 将一个单词翻译成一种特定的语言,独立于当前设置的语言?

举个例子

让我们假设默认语言是英语。 让我们以这个词为例。在意大利语中,它将是 albero

如果我浏览我的网站的英文版本,页面的所有内容都会被翻译成英文。特别是,如果我的 php 代码中有 echo _('tree'); 行,tree 将被输出。

我希望在浏览英文版网站时输出 albero。我很想告诉 _() 只翻译意大利语页面特定部分中的特定单词,即使当前语言是英语。在我的脑海中,它类似于_('tree', 'it_IT'),其中it_IT 告诉gettext 忽略英语并仅在该调用中用意大利语覆盖它。

是否可以使用 gettext() 来做到这一点? 如果是,如何?如果没有,还有其他解决方案吗?

【问题讨论】:

    标签: php translation gettext


    【解决方案1】:

    很遗憾,GNU gettext 不支持这一点。

    您可以通过临时更改您的语言环境来伪造它:

    setlocale(LC_ALL, 'it_IT');
    echo _('tree');
    setlocale(LC_ALL, 'en_US');
    

    【讨论】:

    • 我真的不明白如何使用它...这是我的实现 pastebin.com/7zpT7HRq 的粘贴箱。你能帮我解决这个问题吗?在 PHP 手册中,我发现 bindtextdomain("module1", "//path/to/my/locale/folder");bindtextdomain("module2", "//path/to/my/locale/folder"); 之间没有区别...locale 文件夹对于英语和意大利语是相同的!其实english和italian是locale的子文件夹,所以每个bindtextdomain都会指向同一个文件夹...
    • @AlbertoFontana,我的错。您似乎无法使用gettext 执行此操作。您可能必须使用putenvsetlocale 临时切换到意大利语。我会更新我的答案。
    • 是的,我做到了setlocale(LC_ALL, "it_IT"); 然后echo _('tree'); 然后setlocale(LC_ALL, "en_US");
    • 可以使用环境变量LANGUAGE,而不是更改locale,这也会影响环境的其他方面,需要安装locale。
    猜你喜欢
    • 2011-06-09
    • 2013-06-14
    • 2015-09-11
    • 2012-11-08
    • 2015-06-20
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 2023-01-24
    相关资源
    最近更新 更多