3

我在使用 gettext 翻译我的应用程序时遇到问题。

我的代码是:

<?php
$language = 'cs_CZ';
$translatefile = 'default';
setlocale(LC_ALL, $language);
putenv("LANG=".$language);
bindtextdomain($translatefile, __DIR__.'/locale');
textdomain($translatefile);

echo gettext("ADMIN_LOGIN_PROFESSIONAL");

当我运行脚本时,它仍然显示“ADMIN_LOGIN_PROFESSIONAL”。

我的文件结构:

  • 根/
    • 索引.php
    • 语言环境/
      • cs_CZ/
        • LC_MESSAGES/
          • 默认.mo

我正在运行 Windows 7、Apache 2.2.22 和 PHP 5.3.13。

非常感谢您的帮助...

4

2 回答 2

0

这对我有用:

$language = 'cs_CZ';
$translatefile = 'default';
putenv("LC_ALL=".$language);
setlocale(LC_ALL, $language);

bindtextdomain($translatefile, '/locale');
textdomain($translatefile);

echo gettext("ADMIN_LOGIN_PROFESSIONAL");
于 2012-09-10T18:13:33.740 回答
0

这适用于我在 win 7、php 5.3 和 5.4、iis 上。没有在linux上测试。代码已准备好格式化日期strftime('%c')等:

/**
 * Setup locale (strings and formats)
 * @param string $lang Lang code in ISO format ('cs')
 * @see locales:   http://www.roseindia.net/tutorials/I18N/locales-list.shtml
 * @see languages: http://msdn.microsoft.com/en-us/library/39cwe7zf%28vs.71%29.aspx
 * @see regions:   http://msdn.microsoft.com/en-us/library/cdax410z%28vs.71%29.aspx
 */
function setAppLocale($lang)
{
    $domain = 'Tis';

    switch ($lang)
    {
        case 'cs':
            $locale = 'czech';
            $strings = 'cs_CZ';
            break;

        case 'en':
            $locale = 'english';
            $strings = 'en_US';
            break;

        case 'de':
            $locale = 'german';
            $strings = 'de_DE';
            break;

        case 'hu':
            $locale = 'hungarian';
            $strings = 'hu_HU';
            break;

        case 'ru':
            $locale = 'russian';
            $strings = 'ru_RU';
            break;
    }

    putenv("LANGUAGE=$strings");
    putenv("LC_ALL=$locale");
    setlocale(LC_ALL, $locale);

    bindtextdomain($domain, APPDIR . "/locale");
    bind_textdomain_codeset($domain, "UTF-8");
    textdomain($domain);
}
于 2013-01-15T07:14:03.717 回答