не могу перевести на любой другой язык с помощью функции gettext php

Я использую сервер 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.

1

Решение

У 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.

1

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

Я сделал это работает на окнах с помощью следующего кода:

$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");
0

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