【问题标题】:Setting the gettext locale independent of system locale设置独立于系统语言环境的 gettext 语言环境
【发布时间】:2013-06-14 17:03:03
【问题描述】:

我们在 PHP 应用程序中使用 gettext 进行翻译。它是这样初始化的:

<?php
setlocale(LC_MESSAGES, $locale);
putenv("LANG=$locale");
putenv("LANGUAGE=$locale");

bindtextdomain($domain, $pathToLocales);
textdomain($domain);

这可以正常工作,但它也可以转换来自操作系统的错误消息。以 DNS 解析失败为例,我们在德国网站的错误日志中看到的是 Name or service not known,而不是 Der Name oder der Dienst ist nicht bekannt

我有gisted a test case。该脚本将翻译一个字符串,然后引发No such file or directory 错误。我不想翻译这个错误。

有什么方法可以在不更改操作系统错误消息的情况下配置 gettext 语言环境?我们不想将 gettext 更改为其他一些翻译机制(数组、xliff 等)。我们不关心 Windows 和 mod_php,但该解决方案必须适用于 php-fpm 5.4 和 cli。

【问题讨论】:

    标签: php linux gettext


    【解决方案1】:

    您使用的是LC_MESSAGES,这意味着“系统响应(如果 PHP 使用 libintl 编译时可用)”我会尝试忽略此选项,例如 setlocale(LC_ALL ^ LC_MESSAGES, $locale)

    http://www.php.net/manual/en/function.setlocale.php

    【讨论】:

    • LC_MESSAGES 是 gettext 所必需的。如果从位掩码中删除它,则翻译不起作用。我想要的是 gettext 和 PHP 进程的不同 LC_MESSAGES,如果这不可能,我希望有一个解决方案在 bindtextdomain() & co 之后重置系统的 LC_MESSAGES。无需将 gettext 重置为系统默认值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 2020-04-05
    相关资源
    最近更新 更多