我需要让我的PHP代码多语言。翻译是POEdit.com出口。 因为我想显示单个和复数,我必须使用gettext(POEditor的php数组导出不支持复数)。
我的问题:
Gettext始终返回输入字符串(msgid),而不是翻译文本。
我的设置:
文件夹和文件:
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"
我尝试了什么:
但总是一样的结果:(
你们其中一个人是否有任何想法我做错了什么或者想让它发挥作用?
更新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);