[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: After upgrading locale doesn't work



: Yes, the reason is that Debian woody recently upgraded to glibc 2.1.99
: (i.e. the upcoming glibc_2.2) with new and improved locale handling, but
: is incompatible with the locale files for glibc 2.1.x.  I haven't upgraded
: to woody yet, so I am not sure if Debian's glibc_2.1.99 comes with the
: new Chinese locale files.

Hello, In the end of this mail I will attach my personal opinions
on the new coming glibc-2.2. :-)) Please note that my focus is in
"glibc-2.2", so please ignore the words "RedHat-7.0" :-))

: Yes, that is indeed the reason.  I had wanted to write one myself for a
: very long time now, but I just haven't got the time to write it yet, and
: now that school has started, I have hardly any time to work on Debian
: lately.  (My apologies.)  Here is part of what I wanted to write:
: 
:         http://www.debian.org/zh/faq
:         http://www.debian.org/zh/devel/zhongwenhua
: 
: and also a quick-and-easy step-by-step procedure for installing Chinese
: support in Debian.  (Yes, apparently, after installing task-chinese-*
: packages, the user still needs to do some manual configurations before
: he/she can experience the full Chinese environment.)
: 
: Yes, if you have time, we would love to include your contributions.
: Thanks a million!

This web page might be a little useful:

	http://xcin.linux.org.tw/i18n/

T.H.Hsieh

============================================================================

作者: thhsieh (居士) 看板: Linux
标题: [doc] I18N in glibc-2.2 (used in RedHat-7.0)
时间: Mon Oct  2 13:35:36 2000                    

各位好:

先声明,我没有装过 RedHat-7.0, 也没用过或看过。但我知道 RedHat-7.0
已经改用了 glibc-2.2, 而我刚好对于 glibc-2.2 的 I18N 的改变略知一 
二,故本文的目的主要是将焦点摆在 glibc-2.2 的 I18N 改变的部分,给
各位参考。本文所提的,也许就和各位在 RedHat-7.0 上见到的一样,但也
可能不一样,因为 RedHat 可能将某些部分自行做了改变,而这就不在本文
讨论的范围了。                                                    

先定义什么是旧版的 glibc, 正确来说是目前最通行的 glibc, 版本号码是
2.1.X, 目前大部分的 GNU/Linux 如 Debian-2.2, RedHat-6.X, Slackware-7,
Mandrack, 甚至 CLE-0.8, 0.9 等等,用的都是 glibc-2.1.X。而 RedHat-7.0
可能是首度采用 glibc-2.2 的了。                                      

在 glibc-2.1.X 中,有关 locale 与 I18N 的资料全部放在 /usr/share/locale
下。以 zh_TW.Big5 locale 为例,其编译好的 locale data 就是在           

        /usr/share/locale/zh_TW.Big5

里头内含 LC_CTYPE, LC_TIME .... 等档案,以及一个 LC_MESSAGES 的目录。
而未编译前的 source 是放在 (如果您有安装的话)                        

        /usr/share/i18n/locale/zh_TW
        /usr/share/i18n/charmap/BIG5 (或 BIG5_1984)

因此,过去我们常常说,要看一个 GNU/Linux 系统的 zh_TW.Big5 locale 有
没有装,就直接去看 /usr/share/locale/zh_TW.Big5 目录在不在?有没有一个
LC_CTYPE 的档?                                                       

然而,在 glibc-2.2 已经不一样了。glibc-2.2 中,在 /usr/share/locale 目
录中已找不到 zh_TW.Big5 目录,相反的,您只会见到一个 zh_TW 的目录,而 
里头只有 LC_MESSAGES 的目录。至于其他的 LC_CTYPE, LC_TIME 等档案,全部
移到了                                                                

        /usr/lib/locale/zh_TW.big5

(请各位注意大小写) 理由是,在旧版中,所有的 LC_CTYPE, LC_MESSAGES, LC_TIME
等档案,都是与硬体平台无关的,故可以放在 /usr/share/locale 里头。但新版   
中,只有 LC_MESSAGES 与硬体平台无关,故还是放在 /usr/share/locale, 但其
他的 LC_CTYPE, LC_TIME .... 都与硬体平台有关,所以放在 /usr/lib/locale 里。

虽然 LC_MESSAGES 仍然放在 /usr/share/locale 里,但它也与过去不一样了。正
确一点来说,过去 CLE 没有严格按照标准来做,其原因之一是过去 glibc-2.1.X 
的功能尚未完全齐全,故不是很适合按照标准来做。按照标准,LC_MESSAGES 只是
程式的讯息翻译部分,它只和地区的用语、文化有关,而与文字的编码方式 (encoding)
无关,故在台湾地区的用语 (讯息翻译),我们叫它 zh_TW 即可 (同样的,在大陆     
的用语,就叫 zh_CN 即可)。然而,这个台湾地区的用语,最后是由什么内码呈现
出来,则无关紧要。因为在不同 locale 下 (或不同的 LC_MESSAGES 的设定下),
系统内部会自动转换。习惯上我们多半是以 Big5 来显示台湾地区用语,但如果有
人希望用 GB 码显示台湾地区用语也可以,只要设 LC_MESSAGES=zh_TW.GB2312 即
可。因此,这里的重点是在「地区用语」,与内码无关,故它是放在            

        /usr/share/lib/zh_TW/LC_MESSAGES

里头。

以上是理想的情况,在实际情况,就我所知目前 glibc-2.2 的内码转换系统 Big5
与 GB2312 间仍有问题需要解决,也许未来的版本可以完全克服此困难。        

至于其他的 LC_TIME, LC_CTYPE 等等,就与使用的内码有密切的关系了,故它们
都是放在                                                               

        /usr/lib/locale/zh_TW.big5/

的目录下。理论上,由于我们的 zh_TW.big5 locale 已经被 glibc-2.2 接受了,
故只要是安装 glibc-2.2 的系统,预设就会有这个 locale, 故我们不需要像过去
的 CLE 那样,要额外再安装了。然而,在实际上我们不清楚 RedHat-7.0 有没有在
这点做了改变,或者他们的安装套件有疏漏了?有兴趣的朋友可以回去看看。     

但为什么这里是 zh_TW.big5, 而不是过去 CLE 的 zh_TW.Big5 呢?原因是按照
glibc-2.2 的标准,任何内码名称必须一律用小写,这一点我们并没有按照这样
的标准,但实际上并没有太大的关系。对于已经习惯于 CLE 标准的朋友 (事实上
我们大部分都是如此),可以自行将此目录改名:                             

        mv /usr/lib/locale/zh_TW.big5 /usr/lib/locale/zh_TW.Big5

结果仍然是可以用。

但要如何知道我们系统中有安装好 zh_TW.Big5 (或 zh_TW.big5) locale 呢?
理论上,在 glibc-2.2 中预设就应该装好了,但还是请使用者自行检查一下。
您除了可以看看                                                       

        /usr/lib/locale/zh_TW.big5 (或 zh_TW.Big5)
        /usr/share/locale/zh_TW                   

是否存在以外,另一个较可靠的方式是执行

        locale -a

的指令,看看其中是否有 zh_TW.big5 (或 zh_TW.Big5) 这个 locale。我建议,未
来我们若要检查 GNU/Linux 系统中 locale 有没有安装?正不正常?可以采用这个
指令 (这个指令在 glibc-2.1.X 中也找得到)。                               

万一真的没安装呢?这时您就要自行安装了。如果您有将 glibc-2.2 所有的套件都
安装完整的话,应该会有                                                   

        /usr/share/i18n

的目录,里头是所有 locale 的 source, 这一点是与旧版一样的。里头的 locales
子目录应该会有一个 zh_TW 档,而 charmaps 子目录应该会有一个 BIG5 档,请将
这两个档都拿出来,然后执行这个指令:                                      

        localedef -i zh_TW -f BIG5 zh_TW.Big5

如此就会在 /usr/lib/locale 中产生一个 zh_TW.big5 的子目录,然后您再将它改
名为 zh_TW.Big5 即可。                                                   

还有一点要注意的,就是 glibc-2.2 的 zh_TW 与 BIG5 这两个源始档,其格式已
和旧版的不一样了,故您不能直接拿旧版 CLE 的 rpm 过来装,也不能拿 srpm 过
来 build, 而在                                                          

        ftp://xcin.linux.org.tw/pub/xcin/i18n/i18n_tool.tar.gz

里头的东东也都不能用,总之您必须使用 glibc-2.2 内附的才行。另外,当您在用
localedef 编译时,还要注意                                               

        /usr/share/i18n/locales/zh_CN

这个档也要存在,原因是现在 zh_TW 内部分资料必须参考到 zh_CN 。

大至上是如此,希望对大家有帮助 :-))

-- 
| This message was re-posted from debian-chinese-big5@lists.debian.org
| and converted from big5 to gb2312 by an automatic gateway.



Reply to: