Мне нужно, чтобы мой PHP-код многоязычный. Переводы — это экспорт POEdit.com.
Поскольку я хочу отобразить single и множественное число, я должен использовать gettext (экспорт массива php в POEditor не поддерживает множественное число).
Моя проблема:
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, но не тот. Он всегда загружает файл mo, расположенный в папке «i18n / de_DE». (Помните, de_DE является языком по умолчанию для моей установки Windows). Даже setlocale возвращает введенную локаль (setlocales, способ сказать, что он успешно изменил локаль), всегда используется de_DE. : /
Я также попытался дополнительно установить эти переменные окружения без какой-либо удачи:
$rv['putenv=LANG'] = putenv('LANG='.$locale);
$rv['putenv=LANGUAGE'] = putenv('LANGUAGE='.$locale);
Задача ещё не решена.
Других решений пока нет …