【问题标题】:php gettext blank onlyphp gettext 仅空白
【发布时间】:2013-07-25 19:23:14
【问题描述】:

我已经确认我的服务器上安装了 gettext。我使用 this 教程开始并按照它的指示进行操作。

我还在 PHP 手册的 gettext 页面gettext() 上读到,如果在翻译表中找不到翻译,它将只使用未翻译的文本。

对于本地化,我有

$language = "en";
putenv("LANG=$language"); 
setlocale(LC_ALL, $language);

// Set the text domain as 'messages'
$domain = 'messages';
bindtextdomain($domain, 'home/www/translations'); 
textdomain($domain);

我设置了两个目录,一个用于 en (translations/en/LC_MESSAGES/message.po),另一个用于 zh(结构相同)。我使用

生成了 .po 文件
xgettext -n *.php

我的问题:“en”根本没有显示任何文字。原始字符串是英文的,我最初试图完全省略“en”目录,但这没有帮助。

【问题讨论】:

  • 您应该找到不同的 PO 阅读器。几乎所有框架都有一个,只需从那里获取一个。公元前来自 PHP 的内置 gettext 阅读器是有史以来最糟糕的软件之一......当开发人员决定依赖系统区域设置时,他的想法是什么......
  • Gettext 没问题。我经常使用它,而且很简单。

标签: php gettext


【解决方案1】:

如果源文件中有英文文本,则不需要 en 版本的目录。尝试查看日志,文本应该出现,会有问题。也尝试重新启动服务器,目录被缓存。

这就是我使用 gettext 的方式,在 windows/linux 服务器上测试过:

function setLocaleByLang($lang)
{
    bindtextdomain('app', APPDIR . "/locale"); // APPDIR is definded constant including root of application
    bind_textdomain_codeset('app', "UTF-8");
    textdomain('app');

    $map = array(
        'cs' => array('cs_CZ.UTF-8', 'cs_CZ', 'cs', 'czech'),
        'en' => array('en_US.UTF-8', 'en_US', 'en', 'english'),
        'de' => array('de_DE.UTF-8', 'de_DE', 'de', 'german'),
        'pl' => array('pl_PL.UTF-8', 'pl_PL', 'pl', 'polish'),
        'sk' => array('sk_SK.UTF-8', 'sk_SK', 'sk', 'slovak')
    );

    $locale = key_exists($lang, $map) ? $map[$lang] : $map['en'];
    setlocale(LC_ALL, $locale);
    putenv('LC_ALL=' . $lang); // for windows and gettext
}

用法:

setLocaleByLang('en'); // received from user preferences or browser accept header

我使用Poedit 来更新.po 文件并进行翻译。

【讨论】:

    猜你喜欢
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-29
    相关资源
    最近更新 更多