#php #localization #internationalization #locale #setlocale
#php #локализация #интернационализация #setlocale
Вопрос:
Я установил zh_TW
locale через
sudo locale-gen --purge en_US.UTF-8 zh_TW
И это набор кодов BIG5
locale: zh_TW directory: /usr/lib/locale/zh_TW
-------------------------------------------------------------------------------
title | Chinese locale for Taiwan R.O.C.
email | bug-glibc-locales@gnu.org
language | Chinese
territory | Taiwan R.O.C.
revision | 0.2
date | 2000-08-02
codeset | BIG5
И у меня есть простой PHP-скрипт
<?php
putenv('LC_ALL=zh_TW');
setlocale(LC_ALL, 'zh_TW');
bindtextdomain("myPHPApp", "./locale");
textdomain("myPHPApp");
echo gettext("hello");
Я подготовил файл mo (который находится в UTF8) и поместил под
./locale/zh_TW/LC_MESSAGES/myPHPApp.mo
И echo
это сработало, так в чем смысл установки локали, такой как zh_TW.UTF-8
Комментарии:
1. Нет никаких причин
setlocale
, если вы уже установили его в своей среде, ну, вроде того. Есть некоторые категории, которые все еще нуждаются в этом, если вы их используете: us2.php.net//manual/en/function.setlocale.php2. Какую версию PHP вы используете?
Ответ №1:
Какой смысл устанавливать локаль, такую как zh_TW.UTF-8?
Целью .[codeset]
суффикса в спецификации локали является указание набора кодов. Если для определенного языка UTF-8
задан код по умолчанию, вам не нужно указывать его явно — вы можете указать только zh_TW
(но вы также можете указать zh_TW.UTF-8
). Если у вас есть доступная консоль, вы можете указать доступный язык с помощью locale -a
.
Но, пожалуйста, обратите внимание, что это может зависеть от системы!В то время как в Linux zh_TW по умолчанию является UTF-8, в IBM это будет BIG5, а в Windows CP950!
Комментарии:
1. На самом деле я использую Ubuntu, где
locale -a
я вижу, что zh_TW — это BIG5, и причина, по которой я спрашиваю, заключается в том, почему я использую UTF8 в файле mo, и это также работает с приведенным выше примером кода.2. @Howard это странная несогласованность, которая
locale -a
говорит о BIG5, а вы говорите, что файлы предназначены для UTF-8. В любом случае, вы можете использовать оба варианта, как в this installation: ответы . launchpad.net/ubuntu/ source/localeconf/ question /. …3. нет,
locale -a
скажем, установленная локаль BIG5, но я говорю, что мой mo-файл UTF8, потому что он подготовлен мной. Я понимаю, что мой установленныйzh_TW
находится в BIG5, поэтому, когда я использую файл mo в формате UTF8, он НЕ должен работать, но дело в том, что теперь он работает, это сбивает с толку.
Ответ №2:
Согласно моему пониманию китайского языка, для каждого из них существует две разные версии, которые являются упрощенным и традиционным китайским языком. Указание zh_TW, вероятно, означает отображение традиционных китайских символов на вашей веб-странице. Поскольку UTF-8 определен в вашем заголовке и по умолчанию поддерживает оба китайских языка, следовательно, их больше не нужно устанавливать.
* Дополнительная информация — если я не ошибаюсь, вы должны установить локаль zh_TW, если китайский символ будет храниться где-то в базе данных.
Надеюсь, это поможет.