Я использую сервер WAMP в Windows и делаю тестовый проект.
У меня есть эти файлы в папке сайта:
C: \ WAMP \ WWW \ Проект \ локаль \ ar_EG \ LC_MESSAGES \ messages.po
C: \ WAMP \ WWW \ Проект \ локаль \ en_US \ LC_MESSAGES \ messages.po
Ниже приведен код PHP:
$language="en_US";
$encoding = "UTF-8";
putenv("LANG=".$language);
setlocale(LC_ALL,$language);
$domain="messages"; // name of PO file
bindtextdomain($domain,"Locale");
bind_textdomain_codeset($domain, $encoding);
textdomain($domain);
echo gettext("name");
Выше код работает нормально.
Когда я пытаюсь заменить en_US
с ar_EG
он также отображает перевод для en_US
и когда я пытаюсь удалить en_US
папку и попробуйте снова, он отображает msgid
не msgstr
,
Я искал и обнаружил, что есть проблема с setlocale
на платформе Windows, но мне нужно решение для его запуска на Windows.
У setlocale () в Windows есть проблемы.
От setLocale () в руководстве по PHP:
Пользователи Windows найдут полезную информацию о строках локали на
Веб-сайт Microsoft MSDN. Поддерживаемые языковые строки можно найти в
» документация по языковым строкам и поддерживаемая страна / регион
струны в » документация по странам / регионам.
Вы можете попробовать использовать $language = 'english-us';
вместо $language = 'en_US';
,
Я не уверен в коде языка для ar_eg
, может быть Arabic_Egypt
или же Arabic_Egypt.1256
,
Если это не сработает, у вас все еще есть возможность использовать библиотеку PHP, которая реализует gettext,
лайк https://github.com/oscarotero/Gettext или же https://launchpad.net/php-gettext.
Я сделал это работает на окнах с помощью следующего кода:
$locale = 'en_US';
if(!defined('LC_MESSAGES') || !setlocale(LC_ALL, $locale)) {
putenv("LC_ALL=$locale");
}
$domain = 'messages';
$path = "C:\wamp\www\project\locale";
$codeset = 'UTF-8';
bindtextdomain($domain, $path);
textdomain($domain);
bind_textdomain_codeset($domain, $codeset);
echo gettext("name");