Поэтому я начал возиться с gettext
но я все еще озадачен некоторыми вещами, было бы здорово, если бы кто-нибудь мог помочь мне и заполнить пробелы для меня.
Обычно большинство реализаций просто вызывают setlocale
на основе параметра языка. Есть ли какой-нибудь случай, когда мне нужно использовать putenv
, возможно, для краевых случаев в настройках Windows?
Язык по умолчанию для моей инфраструктуры php – английский, UTF-8 – поэтому я установил LC_ALL
в en_US.utf-8
, поскольку en_US
– ISO-8859-1 / Latin1, и, очевидно, это не так удобно, как UTF-8?
Есть ли какие-либо ошибки, о которых я должен знать после вызова setlocale(LC_ALL, 'en_US.utf-8')
? Поскольку он изменяет все из них: LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC, LC_TIME, and LC_MESSAGES
– мне придется обновлять любые скрипты, например, генерирующие время или что-то в этом роде?
Скажем, например, у недавно настроенного сервера не было es_ES.utf-8
, я знаю, как создать локаль, но если он не был доступен, я должен предоставить резервные копии в массиве? Было бы здорово, если бы кто-то мог представить практический пример, например:
setlocale( LC_ALL, array('es_ES.UTF-8', 'es_ES', 'es') )
Есть ли какой-то веб-сайт, который предлагает такие примеры, или люди обычно придумывают порядок приоритетов?
Я где-то читал, что обычная структура locale
или папки i18n
– это что-то вроде ниже.
Действительно ли структура имеет значение? Кажется, что все это происходит, когда вы выполняете bindtextdomain('messages', 'locale')
он рекурсивно ищет этот каталог для messages.mo
, я, возможно, не замечаю, но это может привести к учету каталогов.
Насколько строго я должен быть со структурой?
locale en_US LC_MESSAGES messages.po es_ES LC_MESSAGES messages.po
действияlocale en_US LC_MESSAGES messages.po es_ES LC_MESSAGES messages.po
6. Должен ли я даже пытаться проверить, действительно ли система поддерживает локаль или нет? Например, если на сервере не было языкового стандарта, и я попытался установить его с помощью setlocale
он не выходил бы из строя или что-то еще, он просто молчал бы пропустить его.
Это не квалифицированный ответ на ваш вопрос, и я не говорю, что использование gettext плохое – я никогда не работал с ним, чтобы иметь по-настоящему глубокое мнение об этом, но я решил оставить gettext в одиночку из-за его сложности и массивной непредсказуемости на разных платформах с разными локалями. Я разместил вопрос, ищущий альтернативы здесь, и, хотя вокруг не так много, пакет Zend_translate, похоже, стоит посмотреть. Я еще не добрался до него.
Если вы работаете с gettext, обязательно ознакомьтесь с примечаниями, внесенными пользователем вручную вручную в Gettext .