PHP setlocale, UTF-8 или нет?

#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.php

2. Какую версию 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, если китайский символ будет храниться где-то в базе данных.

Надеюсь, это поможет.