歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> Linux中文化簡述

Linux中文化簡述

日期:2017/2/27 9:41:16   编辑:更多Linux

在 UNIX 的世界中,形成了「程序國際化」與「數據本土化」的標准,程序代碼只要寫過一遍,就可以適用於所有的語文與編碼系統,只要系統有支持該語文與編碼系統所需的「本土數據」即可。即采取的概念就是「程序」與「數據」分離並分開維護的方式。「程序國際化」簡稱 I18N,其意為 InternationalizatioN 一字中頭尾字母 "I" 與"N" 中間夾 18 個英文字母,故名。它是在系統底層的函式庫 (即 libc 函式庫) 中實作一組標准的函式接口,可以讓程序存取該地區語系的種種信息。有了這些信息,程序本身不僅可以不需要修改,就足以處理各國的語文,同時程序本身甚至連各地區語文的各項細節 (如編碼方式 .... 等) 都不需要知道,因為這些全部都是由系統函式庫提供的。「資料本土化」簡稱 L10N,其意為 LocalizatioN 一字中頭尾字母 "L" 與 "N" 中間夾 10 個英文字母,故名。它是將地區語文的各項細節數據分門別類,安裝在系統底層的數據庫中,以便讓系統函式庫存取,以提供給上頭的應用程序使用。這些用來描述各地區語文的數據,我們稱之為「地區環境數據庫 (locale)」,或簡稱「地區環境」它們包括以下的類別 (categories):1. LC_COLLATE: 該地區文字排序規則,以及正規化表示式 (regular eXPression)的比對依據。2. LC_CTYPE: 該地區所使用的編碼系統、字集、與文字分類、轉換等信息。3. LC_MESSAGES: 各應用程序區域化的訊息顯示。4. LC_MONETARY: 該地區所通行的貨幣格式。5. LC_NUMERIC: 該地區所通行的數字表示格式。6. LC_TIME: 該地區所通行的時間、日期表示格式。· 對於同一個地區語文而言,除了 LC_MESSAGES 之外,其它所有的類別都是固定的,故這些類別的數據就只需准備一份即可,它們是由系統底層函式庫直接提供,可以讓所有的應用程序分享。至於 LC_MESSAGES 訊息顯示的部分,由於各應用程序的訊息都不同,故這部分的數據是由應用程序自身提供,而不像其它類別一樣由系統函式庫提供。·在這些類別中,決定一個程序是否在該地區已「本土」化的最重要因素,一是 LC_CTYPE,二是 LC_MESSAGES。前者賦與程序處理該地區文字的能力,後者賦與程序用該地區的語文來顯示的能力。· 在實際中,將程序所有的訊息集中放在一個文件檔中,而該文件文件的訊息開始時只會用程序原作者慣用的語言來表示。如果希望該程序也能顯示其它語文的訊息時,我們只需要去做翻譯的工作即可,而不必真的去修改程序代碼本身。因此,訊息翻譯與程序維護可以分頭進行,翻譯的工作不需要由程序原作者、或有經驗的程式設計師來做,只需他熟悉該語文,並對該程序有一定的熟悉度即可。故基本上,任何人都可以參與翻譯的工作。當程序編譯安裝完成後,已翻譯成各國語文的訊息文件也會一並安裝入系統的區域化數據庫中。當程序啟動,需要做訊息顯示時,它會呼叫系統提供的函式介面,依目前的語系設定來正確抓取該語文的訊息並顯示出來。萬一目前的語系設定找不到相對應的訊息翻譯文件時,則程序會自動以其原始的語系來顯示。地區環境數據庫名稱和語系設定各地區所屬的地區環境數據庫名稱格式如下:_[.]其中 [.] 有時候會省略。以我們台灣地區所使用的為例:zh_CN.UTF-8其意即為「中文語系」(zh)「中國」(CN)「使用UTF-8編碼系統」。如果將後頭的 [.] 省略掉,就是這個樣子zh_CN

·如果我們不特別做語系的設定,則程序在啟動時,會以系統預設的語系來運作,一般而言其地區環境數據庫名就是 "C" 或 "POSIX",也就是原始 C 語言所采用的編碼系統 (ASCII) 與英文訊息等等。如果希望改變程序運作的語系,則我們必須在程序啟動前先做好環境語系的設定,也就是設好各類別的環境變量。例如:LC_CTYPE=zh_CN.UTF-8; export LC_CTYPELC_MESSAGES=zh_CN.UTF-8; export LC_MESSAGES·假如希望程序可以處理 EUC-TW 的文字,但仍以 Big5 中文顯示訊息時,就這樣設定:LC_CTYPE=zh_TW.euctw; export LC_CTYPELC_MESSAGES=zh_TW.Big5; export LC_MESSAGES

· 在多數情況下,通常會希望一口氣將所有的類別設定成相同的語系,也就是讓我們的整體環境全部處於同一個語系下。當然我們可以用上述的方式一個個類別分別設定,但除此之外系統還提供了另外兩個環境變量,以方便我們的作業。一是 LANG,另一個是 LC_ALL。例如我們這樣設:LC_ALL=zh_CN.UTF-8; export LC_ALL其效果就完全等價於將所有的類別全部設定了。而 LANG 的用法也是一樣,所達到的效果也類似,但意義稍有不同,這裡要留意優先級的差別。一般系統對這些環境變數的優先級是:LC_ALL > LC_* > LANG·也就是說,任何一個 LC_ 類的變量設定後,會使 LANG 的設定的相對應類別失效。如果我們完全不設任何的 LC_ 類的環境變量,只單單這麼設LANG=zh_CN.UTF-8; export LANG則所有的類別都會以 LANG 的設定來運作,除非我們特別去設了某個 LC_ 的環境變數,如此這個類別就會以新的設定來運作 (但其它的類別不變)。相似的道理,如果我們設了 LC_ALL 的環境變量,則所有的類別設定,包括 LANG 的設定全部會失效,而改以 LC_ALL 的設定來運作。






Copyright © Linux教程網 All Rights Reserved