[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 。


大至上是如此,希望對大家有幫助 :-))




Reply to: