PHP设置本地化,使用UTF-8还是其他编码?

4

我已经通过以下方式安装了zh_TW语言环境:

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的本地化语言环境有什么意义呢?


如果您已经在环境中设置了setlocale,那么就没有必要再次进行设置,嗯,有点道理。然而,如果您使用了一些需要它的类别,那么仍然需要进行设置。请参考:http://us2.php.net/manual/en/function.setlocale.php - l'L'l
你使用的 PHP 版本是什么? - Capitaine
2个回答

2
安装类似于zh_TW.UTF-8的本地化语言环境有什么意义?
在区域设置中,.[codeset]后缀的作用是指定代码集。如果对于某种特定语言,UTF-8是默认代码集,则不必显式地指定它 - 只需指定zh_TW即可(但也可以指定zh_TW.UTF-8)。如果您有控制台可用,则可以通过locale -a命令列出可用的区域设置。
但请注意,这可能因系统而异!虽然在Linux上zh_TW默认为UTF-8,但在IBM上是BIG5,在Windows上是CP950。

实际上我正在使用Ubuntu,通过locale -a命令我看到zh_TW是BIG5编码,我提出这个问题的原因是我在mo文件中使用UTF8编码,并且它也可以与上面的代码示例一起正常工作。 - Howard
1
@Howard,很奇怪的是“locale -a”显示为BIG5,而您说文件是UTF-8的不一致现象。无论如何,您可能会像这个安装程序一样同时使用两种:https://answers.launchpad.net/ubuntu/+source/localeconf/+question/130696。 - Tomas
不,locale -a 显示已安装的语言环境是 BIG5,但我知道我的 mo 文件是 UTF8,因为是我准备的。我的理解是,由于我安装的 zh_TW 是 BIG5,所以当我使用一个 UTF8 的 mo 文件时,它应该无法工作,但事实上它现在可以工作,这就是令人困惑的地方。 - Howard

2
根据我的理解,中文语言有两个不同的版本,即简体和繁体中文。通过指定zh_TW,可能是为了在您的网页上显示繁体中文字符。由于UTF-8已在您的标头中定义,并且默认支持中文语言的两种版本,因此无需再安装它们。
*额外信息 - 如果我没有错,如果中文字符要存储在数据库中,则必须设置zh_TW的区域设置。
希望这可以帮到您。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接