gettext () переводит только en_US - PullRequest
0 голосов
/ 24 мая 2019

Я только начал использовать gettext() и у меня возникла странная проблема.У меня есть следующий код:

// $language = ["en_US", "en_US.UTF-8", "en-US", "en-US.UTF-8"];
// $language = ["tr_TR", "tr-TR", "tr", "tr_TR.UTF-8", "tr-TR.UTF-8", "tr.UTF-8"];
$language = ["nl_NL", "nl_NL.UTF-8", "nl-NL", "nl-NL.UTF-8"];

putenv("LANG=" . $language[0]);
$locale = setlocale(LC_ALL, $language);

$domain = "messages";
bindtextdomain($domain, "locales"); 
bind_textdomain_codeset($domain, "UTF-8");
textdomain($domain);

if (!defined("LC_MESSAGES")) {
    echo "<p>LC_MESSAGES is NOT defined.</p>";
}

if (!function_exists("gettext")) {
    echo "<p>gettext() does not exist.</p>";
}

echo "<p>" . $locale . "</p>";
echo "<p>" . _("title") . "</p>";
echo "<p>" . _("content") . "</p>";

Это не работает на локальном хосте (XAMPP 7.3.5), или, скорее, он работает (переводит) только с en_US.Вывод, который я получаю:

LC_MESSAGES is NOT defined.

nl_NL

_TITLE_

_CONTENT_

В то время как он должен переводить en в nl, я получаю en -> en.Это работает нормально на удаленном сервере (DirectAdmin), и я не получаю ошибку LC_MESSAGES:

nl_NL

titel

inhoud

Эта проблема может быть связана с XAMPP, и я думаю, что это жизненно важно.Я должен иметь возможность использовать / изменять языки на локальном хосте.Что можно сделать, чтобы решить эту проблему?Единственное различие, которое я заметил между серверами, состоит в том, что LC_MESSAGES не определен на локальном хосте (XAMPP).А на странице setlocale () есть утверждение, гласящее:

LC_MESSAGES для системных ответов (доступно, если PHP был скомпилирован с libintl)

Couldэто будет причиной?Нужно ли перекомпилировать PHP?

Если нет способа это исправить, есть ли обходной путь, который я могу использовать?Я имею в виду, у меня уже есть необходимые файлы po / mo.Я знаю каталог, в котором они находятся. Я знаю запрашиваемую локаль.Все, что мне нужно, это парсер для получения перевода из файла.

Все файлы можно найти в этом хранилище .
Удаленный сервер вывод (страница / ссылка могут быть удалены в будущем).


Обновление

Я постоянно ищуспособ решить эту проблему, поэтому я проверяю другие вопросы и ответы.В одном из них предлагается установить язык, который я хочу использовать.Поэтому я скачал / установил языки (tr, nl).Это не помогло.Это все еще не переводит.

screenshot of language settings

1 Ответ

0 голосов
/ 05 июня 2019

Идентификаторы локали, такие как nl_NL, не стандартизированы, и ваша система Windows может использовать что-то другое. Попробуйте вывести возвращаемое значение setlocale(LC_ALL, 0), чтобы получить представление об используемом формате.

Вы также должны прочитать документацию: https://www.php.net/manual/en/function.setlocale.php

Вы найдете это:

В Windows setlocale (LC_ALL, '') устанавливает названия локалей из региональных / языковых настроек системы (доступны через панель управления).

Таким образом, вы должны убедиться, что выбрали голландский язык, прежде чем сделать тестовый вызов setlocale(LC_ALL, 0).

А о поддерживаемых категориях локалей вы можете найти в документации:

LC_MESSAGES для системных ответов (доступно, если PHP был скомпилирован с помощью libintl)

Итак, константа LC_MESSAGES может просто не быть определена для вашей версии PHP.

Но ... Я не программист PHP, но ваш пример кода выглядит неправильно. Как не может быть определен строковый литерал, такой как "LC_MESSAGES"? Пожалуйста, отправьте оригинальный код.

...