windows — gettext в php всегда возвращает входную строку

Мне нужно, чтобы мой PHP-код многоязычный. Переводы — это экспорт POEdit.com.
Поскольку я хочу отобразить single и множественное число, я должен использовать gettext (экспорт массива php в POEditor не поддерживает множественное число).

Моя проблема:

Gettext всегда возвращает входную строку (msgid), а не переведенный текст.

Моя настройка:

  • Windows 7 64-битный немецкий язык системы
  • EasyPHP Devserver
    • Apache 2.4.18
    • PHP 5.6.17 + gettext включен

Папки и файлы:

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») — это «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, но не тот. Он всегда загружает файл mo, расположенный в папке «i18n / de_DE». (Помните, de_DE является языком по умолчанию для моей установки Windows). Даже setlocale возвращает введенную локаль (setlocales, способ сказать, что он успешно изменил локаль), всегда используется de_DE. : /

Я также попытался дополнительно установить эти переменные окружения без какой-либо удачи:

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

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]