【问题标题】:Gettext on Windows 7 doesn't translateWindows 7 上的 Gettext 无法翻译
【发布时间】:2012-09-10 17:53:34
【问题描述】:

我在使用 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”。

我的文件结构:

  • 根/
    • index.php
    • 语言环境/
      • cs_CZ/
        • LC_MESSAGES/
          • default.mo

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

非常感谢您的帮助...

【问题讨论】:

  • os和server,php有关系吗?
  • 在我同事的 Linux 上它可以工作,所以我猜是的。

标签: php windows gettext


【解决方案1】:

这对我有用:

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

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

echo gettext("ADMIN_LOGIN_PROFESSIONAL");

【讨论】:

  • 它仍然不起作用,仍然不起作用,尽管它是相同的代码并且 .mo 文件中有正确的翻译
  • 我现在正在测试它,似乎从 php 5.2 到 5.3 有一些变化......
【解决方案2】:

这适用于我在 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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多