php中的gettext总是返回输入字符串

时间:2016-07-14 14:30:18

标签: php windows gettext poedit setlocale

我需要让我的PHP代码多语言。翻译是POEdit.com出口。 因为我想显示单个和复数,我必须使用gettext(POEditor的php数组导出不支持复数)。

我的问题:

Gettext始终返回输入字符串(msgid),而不是翻译文本。

我的设置:

  • Windows 7 64位德语系统语言环境
  • EasyPHP Devserver
    • Apache 2.4.18
    • PHP 5.6.17 + gettext enabled

文件夹和文件:

web root           = C:\Users\SM\PhpstormProjects\website
locales            = C:\Users\SM\PhpstormProjects\website\src\i18n
polish translation = C:\Users\SM\PhpstormProjects\website\src\i18n\plk\LC_MESSAGES\messages.mo

PHP代码:

define('_LOCALES_DIR', 'C:\Users\SM\PhpstormProjects\website\src\i18n');

$locale = "plk";
$domain = "messages";

$rv['putenv']                  = putenv("LC_ALL=" . $locale);
$rv['setlocale']               = setlocale(LC_ALL, $locale);
$rv['bindtextdomain']          = bindtextdomain($domain, _LOCALES_DIR);
$rv['bind_textdomain_codeset'] = bind_textdomain_codeset($domain,"UTF-8");
$rv['textdomain']              = textdomain($domain);

print_r($rv);

echo "pl: " . gettext("Benutzername");

PHP输出:

Array ( 
    [putenv] => 1 
    [setlocale] => Polish_Poland.1250 
    [bindtextdomain] => C:\Users\SM\PhpstormProjects\website\src\i18n
    [bind_textdomain_codeset] => UTF-8 
    [textdomain] => messages 
) 

pl: Benutzername 

预期输出: “pl:użytkownik”

.po文件如下所示:

msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: POEditor.com\n"
"Project-Id-Version: website\n"
"Language: pl\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 &&     (n%100<10 || n%100>=20) ? 1 : 2);\n"

#: 
msgctxt "Usermanagement"
msgid "E-Mail"
msgstr "e-mail"

#: 
msgctxt "Usermanagement"
msgid "Passwort"
msgstr "hasło"

#: 
msgctxt "Usermanagement"
msgid "Benutzername"
msgstr "użytkownik"

我尝试了什么:

  • setlocale(“plk”)的返回值ist“Polish_Poland.1250”所以我试图将“i18n / plk”文件夹重命名为“i18n / Polish_Poland.1250”,但没有运气。
  • 使用Polish_Poland.1250作为输入语言
  • 波兰语只是一个例子,尝试用不同的语言
  • 将“.UTF8”和“.UTF-8”添加到语言环境
  • 试过php-gettext
  • 借助此脚本检查已安装的区域设置:https://stackoverflow.com/a/23286243

但总是一样的结果:(

你们其中一个人是否有任何想法我做错了什么或者想让它发挥作用?

更新2016-07-15 12:45:

我的一个错误是缺少上下文,我不得不像这样使用gettext() gettext(“Usermanagement \ 004Benutzername”); 。现在它从mo文件加载文本,但错误的文件。它总是加载位于“i18n / de_DE”文件夹中的mo文件。 (请记住de_DE是我的Windows安装的默认语言)。甚至setlocale返回输入的语言环境(setlocales方式告诉他成功更改了语言环境),总是使用de_DE。 :/

我还试图将这些设置为环境变量而没有任何好运:

$rv['putenv=LANG']     = putenv('LANG='.$locale);
$rv['putenv=LANGUAGE'] = putenv('LANGUAGE='.$locale);

0 个答案:

没有答案