跳至內容

地區設定

出自Taiwan Tongues 台語維基
這是此頁批准,以及是最近的修訂。

地區設定(locale), 嘛叫做「在地化策略集」、「 本地環境」,是表達程式使用者地區方面的軟體設定。無仝系統、平台、佮軟體有無仝的地區設定處理方式佮無仝的設定範圍,但是一般地區設定上無嘛會包括語言佮地區。作業系統的地區設定通常較複雜。地區設定的內容包括:資料的格式、貨幣金額格式、小數點符號、千分位符號、度量衡單位、通貨符號、日期寫法、曆日類型、文字排序、姓名格式、位址等等。

地區設定的主要目標是予使用者選擇上適合伊家己的設定。比如講用以上的 Windows 作比喻:佇咧控制面枋的區域佮語言選擇內底,使用者會當選擇家己的字元集排序方法;做瀏覽檔案的時陣,系統可以用「使用者選擇的排序」來排列檔案。

實際落實

電腦一套定義使用者的語言、國家佮用佇定義使用者希望佇其使用者介面上看著的各種會當改變的選擇的參數集合。通常一个地區設定識別碼上少包括一个語言識別碼佮一个區域識別碼。

佇咧 UNIX 和 Windows 中,地區設定的控制是無仝的。佇咧 UNIX 落,通常通過環境變數來控制地區設定。遮的環境變數包括:LC \ _ ALL , LC \ _ CTYPE , LC \ _ TIME , 等咧。你會當通過改變遮的環境變數來控制你的程式抑是命令所表現出來的地區設定,去提是遮的程式抑是遮的命令著愛是已經予國際化的佮在地化的。佇咧 Windows 落,你會當通過改變控制面枋的「語言 / 區域」中的區域的值來設定 Windows 的當前使用者的地區設定。

Ubuntu 作業系統

佇咧 Ubuntu 作業系統當中,使用 man locale-gen 抑是 man locale 會當得著關於 locale 實現的鋩角。實際上是由 glibc 庫實現的。

locale 相關(環境)變數生效的優先順序:

一 . LANGUAGE 指定個人對語言環境值的主次偏好,比如講 zh \ _ CN : en \ _ US : en 二 . LC \ _ ALL 這毋是一个環境變數,是一个會當予 C 咱語言庫函式 setlocale 設定的宏,其值會當崁所有的其他 locale 設定。所以預設的時陣為空三 . LC \ _ xxx 會當設定 locale 各方面(category)的值,會當崁 LANG 的值。 四 . LANG 指定預設使用的 locale 值得共上述環境變數設佇咧 / etc / profile 抑是 / etc / environment 等系統初檔案中。值得注意的是,若是 LANG 抑是 LC \ _ ALL 被設定做 " C ",遐爾 LANGUAGE 的值將予人無去。

除 C 和 POSIX 這兩个 locale 名稱外,locale 的名稱並無標準化。Linux 平台佮 Windows 系統的 locale 名稱有真大無仝款。Linux 名稱的號名規則為:

` ` ` language [_ territory [ . codeset] ] [@ modifier] ` ` `

其中 language 是 ISO 六百三十九石一標準中定義的雙字母的語言代碼,territory 是 ISO 三千一百六十六拍一標準中定義的雙字母的國家佮地區代碼,codeset 是字元集的名稱 ( 如 UTF 鋪八等 ),而且 modifier 是某一寡 locale 變體的修正符。

bash 中使用的範例:

` ` ` $ LC _ TIME=en _ US . UTF ma八 date Fri Oct 三十一十九 : 五十一 : 十六 CST 二千空一十四 $ LC _ TIME=fi _ FI . UTF ma八 date pe 三十一孵一空 . 二千空一十四十九孵五二 . 零 + 八百 $ LC _ TIME=zh _ CN . UTF ma八 date 二空一四年十月三十一日禮拜五十九 : 五十三 : 七 CST ` ` `

相關系統檔案:

  • 咧檔案 / usr / share / i 十八 n / SUPPORTED 中,列出了當前系統支援的所有 locale 與字元集的名。
  • 佇咧 kha-tá-lok-guh / var / lib / locales / supported . d / 落,列出著當前系統已經成的所有 locale 的名。
  • 咧檔案 / var / lib / locales / supported . d / local 中,列出了所有想欲生成抑是已經成的 locale 的名
  • 佇咧 kha-tá-lok-guh / usr / lib / locale / < locale \ _ name > / LC \ _ \ *,用 locale-gen 編譯出的 locale 檔案
  • 咧檔案 / usr / lib / locale / locale-archive 中,包含著真濟本地已經成的 locale 的具體內容,所以這个檔案往往足大的。使用命令 localedef 管理這一檔案。使用 locale-gen 命令編譯出來的 locale 內容預設寫入該檔案內底。
  • 咧檔案 / etc / default / locale 中,會當手動組態 locale 環境變數,LC \ _ CTYPE 啥物貨
  • 佇咧 kha-tá-lok-guh / usr / share / i 十八 n / charmaps 落,預設的 charmap 寄囥路徑
  • 佇咧 kha-tá-lok-guh / usr / share / i 十八 n / locales 落,預設的 locale source file 寄囥路草相關系統命令:
  • locale 列出當前採用的各項本地策略,這寡由 LC \ _ \ * 環境變數定義
  • locale charmap 列出系統當前使用的字元集
  • locale-a 列出系統當中已經安裝的所有 locale
  • locale-m 列出系統當中已經安裝的所有 charmap
  • locale-gen--purge 將 / usr / lib / locale / 內底的 locale 支援檔案刪掉
  • 編輯檔案 / var / lib / locales / supported . d / local,加需要的 locale 與字元集名,如:

` ` ` en _ US . UTF ma八 UTF ma八 cs _ CZ . UTF ma八 UTF ma八 cs _ CZ . iso 八○八千五百九十二 iso 八○八千五百九十二 zh _ CN . UTF ma八 UTF ma八 zh _ CN . GBK GBK zh _ CN . GB 二千三百十二 GB 二千三百十二 zh _ CN . GB 一孵八千空三十 GB 一孵八千空三十 ` ` `

儲存閣關起來這檔案。執行 sudo dpkg-reconfigure--force locales,是重新生成字元集。

  • 抑是使用命令 sudo locale-gen en \ _ US . UTF ma八,生成制定的 locale en \ _ US . UTF ma八,並共這个 locale 名加入檔案 / var / lib / locales / supported . d / local 中
  • 抑是使用命令 sudo locale-gen,生成所有列佇檔案 / var / lib / locales / supported . d / local 中的 locale
  • 抑是講

` ` ` cd / usr / share / locales sudo . / install-language-pack zh _ CN ` ` `

嘛會當安裝 zh \ _ CN 的相關語言套件。

  • 抑是使用命令 localedef-f UTF ma八-i zh \ _ CN zh \ _ CN . UTF 八,對字元對映檔案 UTF ma八,locale 原始檔 zh \ _ CN,編譯出 locale 這號做 zh \ _ CN . UTF 八,囥入檔案 / usr / lib / locale / locale-archive 中
  • 使用命令 localedef--list-archive,列出檔案 / usr / lib / locale / locale-archive 中所有可用的 locale 的名
  • sudo apt-get install language-selector language-env language-pack-zh-hans language-pack-zh-hant 安裝中文語言套件
  • sudo nano / etc / default / locale 修改該檔 àn-nāi 容。

Windows 作業系統

Windows SDK 規定,「 語言」是佮溝通有關係的一組屬性的集合,包括所有允准的字元、通貨符號、日期時間做法等等。彼每一个「語言」有一个語言名佮語言識別碼。語言欲往猶閣需要指出國家 / 地區,如「英語(美國)」 使用的語言名是「en-US」。

每一个地區設定(locale)是一个「語言」佮一个排序規則。Windows XP 支援超過百五十个地區設定(locale); Windows Vista 支援超過兩百个地區設定(locale); Windows 七支援至少三百六十五个地區設定(locale)。 每一个地區設定(locale)有地區設定名 ( Locale Name )地區設定識別碼 ( Locale ID , LCID )。比如講:" de-DE \ _ phoneb " 是德國德語使用德式電話薄排序規則(該排序規則佮拉丁字母序細有無仝)。「區域識別碼」( Locale ID , LCID ) 為三十二位元的值,佇咧程式的設計當中定定用著。LCID 構成做:

` ` ` +-------------+---------+-------------------------+-------------------------+ | Reserved | Sort ID | SubLanguage ID | Primary Language ID | +-------------+---------+-------------------------+-------------------------+ 三十一二十十九十六十五十九零 bit ` ` `

LCID 的低十位是主語言(primary language)的 ID;高六位指定次語言(sublanguage)。 LCID 的低十六位元叫做語言識別碼(language identifier), 資料的號名做 LANGID。比如講,中文作為主語言,編號是零 x 四。做次語言的台灣中文的編號是零 x 一;簡體中文的編號是零 x 二,香港中文是空 x 三,新加坡中文是零 x 四,澳門中文是零 x 五。所以,「 中國大陸簡體中文」的區域識別碼等於次語言的標識零 x 二倒徙十位,閣加上主語言的標識零 x 四,即 ( 零 x 二 < < 十 ) + 零 x 四=兩千空五十二,所以簡體中文的 LCID 是兩千空五十二。類似的,會當算出繁體中文的 LCID 是一千空二十八。美國英語的 LCID 是一千空三十三。使用 Windows 預定義宏,MAKELANGID ( LANG \ _ CHINESE , SUBLANG \ _ CHINESE \ _ SIMPLIFIED ) 的結果嘛是兩千空五十二。所有的語言-國家地區列表見:MSDN : Language Identifier Constants and Strings

排序識別碼(Sort Order Identifier)占四位元,用佇咧表示排序的方法。如簡體中文有 SORT \ _ CHINESE \ _ PRC(字劃序)、 SORT \ _ CHINESE \ _ PRCP(拼音序)。 比如講,使用筆劃序的簡體中文的 locale 名做 " zh-CN \ _ stroke "。所有的排序規則列表見:Sort Order Identifiers。

地區設定名 ( Locale Name )的號名格式為:

` ` ` locale  : : primaryLanguage [-Script ] [-SubLanguage [_ sortorder] ] | " locale-name " | " language [_ countryORregion [ . CodePage] ] " | " . CodePage " | " C " | " " | NULL ` ` `

會當理解講:

  • primaryLanguage 是 ISO 六百三十九石一抑是 ISO 六百三十九石頭 / T 中定義的語言縮寫的小寫形式;
  • Script 是 ISO 一爿五千九百二十四定義的書寫系統的首字母大寫的四字母是表示講。比如講,拉丁字母拼寫的烏茲別克語為「uz-Latn-UZ」。
  • SubLanguage 是 ISO 三千一百六十六刣一中定義的國家 / 地區兩位字母代碼的大寫形式;比如講:zh-CN \ _ stroke 的值為 MAKELCID ( MAKELANGID ( LANG \ _ CHINESE , SUBLANG \ _ CHINESE \ _ SIMPLIFIED ) , SORT \ _ CHINESE \ _ PRC ),拜十三石三千一百二十四。
  • locale-name 形式是短短的標準化字串,見表的 Language tag 欄目。a short , IETF-standardized string ; for example , en-US for English ( United States ) or bs-Cyrl-BA for Bosnian ( Cyrillic , Bosnia and Herzegovina ) . These forms are preferred . For a list of supported locale names by Windows operating system version , see the Language tag column of the table in Appendix A : Product Behavior in [MS-LCID] : Windows Language Code Identifier ( LCID ) Reference . This resource lists the supported language , script , and region parts of the locale names . For information about the supported locale names that have non-default sort orders , see the Locale name column in Sort Order Identifiers . Under Windows 十 or later , locale names that correspond to valid BCP 鋪四十七 language tags are allowed . For example , jp-US is a valid BCP 鋪四十七 tag , but it is effectively only US for locale functionality .
  • 仝一个地區設定(locale), 會當有多種字元集編碼表示。比如講,Windows 作業系統的簡體中文的預設編碼字元集(即頁碼)是 GBK,即「九百三十六 ( ANSI / OEM-Simplified Chinese GBK )」。 而且 Linux 作業系統一使用 UTF 八字元集,所以乎 Linux 簡體中文的預設編碼字元集是 UTF 八。所有的頁碼列表見:Code Page Identifiers。若需要指出使用的頁碼,咱欲前述字捾最後用「.」區隔,後佮 Windows 頁碼數字抑是「ACP」、「 OCP」。 比如講:" French \ _ Canada . 千二百五十二 "。指定頁碼干焦適用 LC \ _ ALL 抑是 LC \ _ CTYPE。
  • 會使對當時預設的 locale 干焦指明頁碼,形如講 " . code \ _ page "。使用使用者預設語言佮國家地區設定,即來自 GetUserDefaultLocaleName ( ) 的結果。無建議採用這款方式,因為可能會產生無一致結果。

對於 C 標準庫函式 setlocale ( ),指定參數 locale 的基本做法:

` ` ` Locale Name | language [_ country _ region [ . code _ page] ] ` ` `

寫真濟 language 佮 country \ _ region 一般毋免勼寫,詳細列表見 National Language Support ( NLS ) API Reference。比如講,著佮中文簡體,使用字攕 " chinese "、" chinese-simplified "、" chinese \ _ CHN "、" chs ",攏通好著 " Chinese ( Simplified ) \ _ People's Republic of China . 九百三十六 " 效果。

做業系統有一个當前地區設定。使用者會當佇控制面枋的地區設定中改變伊。每一个地區設定有真濟相關的資訊,編程的時會當用 Locale information types 取得遮的值的資訊。作業系統予逐个執行緒一个地區設定,初初值為 LOCALE \ _ SYSTEM \ _ DEFAULT

相關系統 API 函式:

  • GetUserDefaultLCID 取得當前使用者的預設 LCID。對簡體中文作業系統倒轉值做兩千空五十二
  • GetUserDefaultLocaleName 取得當前使用者的預設 locale 的名。對簡體中文作業系統彼个名號做 zh-CN
  • GetSystemDefaultLCID 取得系統的預設 LCID。對簡體中文作業系統倒轉值做兩千空五十二
  • GetSystemDefaultLocaleName 欲取得系統預設 locale 的名
  • GetThreadLocale ( ) 取得彼陣仔執行緒的 LCID
  • SetThreadLocale 設定當前執行緒的 LCID。
  • IsValidLocaleName 去判斷一个字串敢是當前做業系統支援的 locale 的名
  • LocaleNameToLCID 對 locale 的名號著伊的 LCID
  • GetLocaleInfoEx 取得指定 locale 彼號各方面的資訊
  • EnumSystemLocalesEx 列舉當前作業系統支援的所有的 locale 的名
  • EnumCalendarInfoExEx 列舉指定 locale 的日曆資料。比如講 zh-TW 有兩个曆日,分別為「格里曆(在地)」 佮「格里曆(英文)」。
  • EnumDateInfoExEx 列舉指定 locale 的各種 calendar 的日期格式。
  • GetCalendarInfoEx 查詢指定 locale 指定講日曆型的指定方面的資料。
  • GetDateFormatEx 共時間資料轉換做指定格式的日期字串。
  • GetTimeFormatEx 共時間資料轉換做指定格式的時間字串。
  • GetDurationFormatEx 共一段繼續時間的資料轉換做指定格式的字串。
  • EnumSystemLanguageGroups 仝一个語言組可能共享鍵盤配置、輸入法、TT 字型、頁碼翻譯表等等。
  • GetSystemDefaultLangID 系統預設的非 Unicode 語言
  • GetKeyboardLayout 彼當陣行程的輸入法
  • GetSystemDefaultUILanguage 選單、對話方塊、Windows 訊息、INF 檔案、幫助檔案等等的預設語言
  • GetSystemPreferredUILanguages 作業系統使用的選單、對話方塊、Windows 訊息、INF 檔案、幫助檔案等等的語言
  • GetUserDefaultUILanguage 使用者使用的選單、對話方塊、Windows 訊息、幫助檔案等等的語言
  • GetUserPreferredUILanguages 使用者使用的選單、對話方塊、Windows 訊息、幫助檔案等等的語言集合
  • GetThreadPreferredUILanguages 進前執行緒使用的 UI 語言集合

列表

參見

  • 國際化佮在地化
  • iconv
  • gettext

外部連結

  • 微軟 MSDN 中的區域識別碼列表(英文)http : / / msdn . microsoft . com / en-us / library / 零 h 八十八 fahh . aspx
  • https : / / web . archive . org / web / 二十五空一千一百空九九九二千五百空八學四千一百三十一 / http : / / www . chinaue . com / tool / vbs / html / vsmsclcid . htm

參考文獻