Как я могу отлаживать php gettext?
Некоторые ключи gettext не работают для меня - они отображают ключ вместо перевода, хотя есть один. Я делаю .mo файл с PHP File_Gettext
Pear library, и кажется, что он работает нормально, поэтому я сделал следующее script, чтобы проверить, какие ключи не работают нормально:
$locale = 'en_GB';
$domain = 'messages';
setlocale(LC_ALL, $locale);
putenv("LC_ALL=".$locale);
bindtextdomain($domain, "D:/_gt");
bind_textdomain_codeset($domain, 'UTF-8');
textdomain($domain);
$mocreator = new File_Gettext_MO();
$mocreator->load('D:/_gt/en_GB/LC_MESSAGES/messages.mo');
foreach ($mocreator->strings as $key => $value) {
if ($value == gettext($key)) {
var_dump("ok");
} else {
var_dump($key, $value, gettext($key));
}
}
Из вывода вышеизложенного я вижу, что некоторые клавиши работают - я вижу много ok
, а некоторые нет, что дает следующее:
string 'Cancelled' (length=9)
string 'Storniert' (length=9)
string 'Cancelled' (length=9)
Таким образом, в файле есть перевод, но gettext не может использовать их по какой-либо причине.
Ответы
Ответ 1
Теперь это довольно старый вопрос, и я должен указать, что я не так хорошо разбираюсь в конкретных вопросах, связанных с текстом. Но у меня были некоторые проблемы с массивами-ключами в виде строк и кодировок.
D:/_gt
создает впечатление, что вы используете какую-то Windows, и если я не ошибаюсь, все версии Windows по умолчанию используют латинский-1- "со специальным языком". Я считаю, что проблема может быть связана с кодировкой, поскольку вы указываете файл как utf8, но я не могу вам помочь без файла .mo. Но попробуйте переключить места операторов putenv
и setlocale
.
Или пробелы отсутствуют? Может ли правильный ключ быть " Cancelled"
?
Но, как кто-то сказал в комментариях, это просто догадки без файла .mo.
Если вы уже нашли свой собственный ответ, добавьте его, чтобы помочь остальным интернетом!: D