Я испанец, и я делаю тесты, интернационализирующие текст шириной PHP, я только переводю его на английский.
Я получил эту структуру файлов:
locale/en_US/LC_MESSAGES/con los ficheros messages.mo y messages.po
locale/es_ES/LC_MESSAGES/con los ficheros messages.mo y messages.po
locale/fr_FR/LC_MESSAGES/con los ficheros messages.mo y messages.po
В каждом файле есть ключевое слово «Servicios», переведенное на каждый язык.
И в PHP у меня есть этот код:
<?php
putenv("LANG=en_US");
setlocale(LC_ALL, "en_US");
bindtextdomain("messages", "locale");
textdomain("messages");
?>
Когда я ставлю код «en_US», показываю хороший перевод, но когда я изменяю его на «es_ES» или «fr_FR» таким образом:
<?php
putenv("LANG=es_ES");
setlocale(LC_ALL, "es_ES");
?>
или же
<?php
putenv("LANG=fr_FR");
setlocale(LC_ALL, "fr_FR");
?>
все еще показываю перевод на английский
Я работаю над Widnows 7 и функцией
echo $_SERVER['HTTP_ACCEPT_LANGUAGE'] ;
возвращается к
«ES-ES, ES; д = 0,8» всегда,
Какая проблема это может быть?
Спасибо
Вполне вероятно, что языки не установлены на сервере, на котором вы запускаете скрипт — есть ли у вас доступ к серверу? Тогда попробуй
locale -a
чтобы увидеть, какие локали установлены. Также посмотрите здесь Можно ли полагаться на setlocale и полагаться на устанавливаемые локали?
НОТА:
будь осторожен с LC_ALL
установка, так как это может привести к нежелательным преобразованиям. Например, я использовал
setlocale (LC_ALL, "Dutch");
чтобы получить мои будни в голландском на странице. С этого момента (как я узнал много часов спустя) мои значения с плавающей запятой из MYSQL интерпретировались как целые числа, потому что голландская локаль требует запятой (,) вместо точки (.) Перед десятичными знаками. Я старался printf
, number_format
, floatval
…. все безрезультатно. 1.50
всегда был напечатан как 1.00
🙁
Когда я устанавливаю свою локаль на:
setlocale (LC_TIME, "Dutch");
мои рабочие дни хороши и мои значения с плавающей точкой тоже.
Других решений пока нет …