Provided by: manpages-zh_1.6.3.6-1_all bug

NAME

       msgcat - Tcl 訊息目錄

總覽 SYNOPSIS

       package require Tcl 8.2

       package require msgcat 1.1

       ::msgcat::mc src-string

       ::msgcat::mclocale ?newLocale?

       ::msgcat::mcpreferences

       ::msgcat::mcload dirname

       ::msgcat::mcset locale src-string ?translate-string?

       ::msgcat::mcunknown locale src-string
_________________________________________________________________

描述 DESCRIPTION

       msgcat  包提供用來管理多語言的使用者介面的一系列函式。在獨立於應用的一個“訊息目錄”中定義文
       字串,可以編輯和修改這些文字串而不用修改應用的原始碼。透過向這個訊息目錄增加一個新檔案來提
       供一個新語言或地域(locale)。

       對任何應用和包使用訊息目錄都是可選的,但是鼓勵你使用它,以便應用或包在多語言環境中被採用。

命令 COMMANDS

       ::msgcat::mc src-string ?arg arg ...?
              依照使用者的當前地區,返回 src-string   的翻譯(translation)。如果在 src-string 之後
              給出了附加的引數,使用 format  命令把  src-string  的翻譯中的轉換指定符替換成補充引
              數。

              為了翻譯  src-string ::msgcat::mc  將在當前名字空間中查詢定義的訊息;如果未找到,它
              將在當前的名字空間的父空間中查詢,以此類推直到到達全域性名字空間。如果不存在轉換字
              串,呼叫 ::msgcat::mcunknown 並返回 ::msgcat::mcunknown  的返回。

       ::msgcat::mc  是用來本地化一個應用的主要函式。不再直接的使用英文字串,一個應用可以把英文字
       串傳遞給 ::msgcat::mc 並使用它的結果。如果以這種方式用一種語言寫了一個應用,透過簡單的定義
       新的訊息目錄條目,以後增加附加的語言支援是很容易的。

       ::msgcat::mclocale ?newLocale?
              這個函式把地域設定成  newLocale。如果省略了 newLocale,返回當前的地域,否則當前的地
              域被設定成  newLocale。初始的地域預設為在使用者的環境變數中指定的地域。關於地域字串
              的格式的詳細描述參見下面的  LOCALE  AND  SUBLOCALE SPECIFICATION 地域和子地域指定章
              節。

       ::msgcat::mcpreferences
              返回一個有序的地域列表,它們是基於使用者指定的語言,以使用者喜好程度為次序。次序是
              從最偏好到最不喜好的。如果使用者已經指定了LANG=en_US_funky,這個過程將返
              回{en_US_funky en_US en}。

       ::msgcat::mcload dirname
              在指定的目錄中查詢一個檔案,這個檔案匹配用   ::msgcat::mcpreferences   返回的語言指
              定。每個檔案的根檔名是地域字串,副檔名是“.msg”。返回匹配的指定和裝載了訊息的數目。

       ::msgcat::mcset locale src-string ?translate-string?
              在指定的   locale  中設定從  src-stringtranslate-string   的翻譯。如果未指定
              translate-string,對二者都使用 src-string 。函式返回 translate-string::msgcat::mcunknown locale src-string
              在當前的地域中沒有給  src-string  定義的翻譯的情況下,這個例程被  ::msgcat::mc   呼
              叫。預設的動作是返回   src-string。這個過程可以被這個應用重新定義,比如對每個未知字
              串記錄錯誤訊息日誌。在與 ::msgcat::mc 相同的棧層次上呼叫 ::msgcat::mcunknown 過程。
              ::msgcat::mcunknown  的返回值被用做 ::msgcat::mc 的返回值。

地域和子地域規定 LOCALE AND SUBLOCALE SPECIFICATION

       用地域字串指定地域。地域字串的組成是一個語言程式碼,一個可選的國家(地區)程式碼,一個可選的
       特定於系統程式碼,它們用“_”分割。國家和語言程式碼在標準ISO-639 和 ISO-3166  中。例如,地域
       “en”指定 English 而“en_US”指定  U.S.  English。

       區域定義預設為裝載 msgcat 包時在 env(LANG) 中的值。如果未定義 env(LANG),則地域預設為“C”。

       在使用者指定一個地域的時候,在字串翻譯期間進行“最佳匹配”查詢。例如,如果使用者指定了
       en_UK_Funky,按“en_UK_Funky”、“en_UK”、和“en”     的次序查詢地域,直到找到一個匹配的字串翻
       譯。如果沒有找到這個字串的翻譯,則呼叫 ::msgcat::unknown。

       譯註:常用地域字串的一部分
              語言 國家(地區)地域 ID
              Arabic Saudi Arabiaar_SA
              Chinese (Simplified)Chinazh_CN
              Chinese (Traditional)Taiwanzh_TW
              English   United Statesen_US
              French Francefr_FR
              German Germanyde_DE
              Hebrew Israeliw_IL
              Italian   Italyit_IT
              Japanese  Japanja_JP
              Korean South Koreako_KR
              Spanish   Spaines_ES
              Swedish   Swedensv_SE

NAME

       在訊息目錄中儲存的字串被儲存為相對於在其中增加它們的那個名字空間。這允許多個包使用相同的字
       串而不用害怕與其他包衝突。它還允許源字串被縮寫而減少(less prone to)排字錯誤。

       例如,執行程式碼
              mcset en hello "hello from ::"
              namespace eval foo {mcset en hello "hello from ::foo"}
              puts [mc hello]
              namespace eval foo {puts [mc hello]}
       將輸出
              hello from ::
              hello from ::foo

       在查詢一個訊息的翻譯的時候,訊息目錄將首先查詢當前名字空間,接著是當前名字空間的父名字空
       間,以次類推知道到達全域性名字空間。這允許子名字空間從它的父名字空間“繼承”訊息。

       例如,執行程式碼
              mcset en m1 ":: message1"
              mcset en m2 ":: message2"
              mcset en m3 ":: message3"
              namespace eval ::foo {
                  mcset en m2 "::foo message2"
                  mcset en m3 "::foo message3"
              }
              namespace eval ::foo::bar {
                  mcset en m3 "::foo::bar message3"
              }
              puts "[mc m1]; [mc m2]; [mc m3]"
              namespace eval ::foo {puts "[mc m1]; [mc m2]; [mc m3]"}
              namespace eval ::foo::bar {puts "[mc m1]; [mc m2]; [mc m3]"}
       將輸出
              :: message1; :: message2; :: message3
              :: message1; ::foo message2; ::foo message3
              :: message1; ::foo message2; ::foo::bar message3

訊息檔案的定位和格式 LOCATION AND FORMAT OF MESSAGE FILES

       訊息檔案可以位於任何目錄中,取決於下列條件:

       [1]    給一個包的所有訊息檔案都在相同的目錄中。

       [2]    訊息檔名跟一個地域指定符並跟隨著“.msg”。例如:
              es.msg    -- spanish
              en_UK.msg -- UK English

       [3]    這個檔案包含一系列對 mcset 的呼叫,它們為這個語言設定需要的翻譯字串。例如:
              ::msgcat::mcset es "Free Beer!" "Cerveza Gracias!"

推薦的對包的訊息設定 RECOMMENDED MESSAGE SETUP FOR PACKAGES

       如果一個包被安裝到tcl_pkgPath  的一個子目錄中並透過 package require 裝載,推薦下列過程。

       [1]    在包安裝期間,在你的包目錄下建立一個子目錄msgs。

       [2]    複製你的 *.msg 檔案到這個目錄中。

       [3]    在你的包初始化指令碼中增加下列命令:
              # load language files, stored in msgs subdirectory
              ::msgcat::mcload [file join [file dirname [info script]] msgs]

FORMAT SCAN 命令的定位程式碼 POSTITIONAL CODES FOR FORMAT AND SCAN COMMANDS

       用做給 format 的引數的一個訊息字串中的轉換指定符可以包含一個 XPG3 位置指定符。例如,它可以
       按句法的需要在翻譯的時候重新安排句子結構。
              format "We produced %d units in location %s" $num $city
              format "In location %s we produced %d units" $city $num

       可使用定位引數來處理:
              format "We produced %1\$d units in location %2\$s" $num $city
              format "In location %2\$s we produced %1\$d units" $num $city

       類似的,可以在 scan 中使用定位引數來提取國際化字串中的值。

感謝 CREDITS

       訊息目錄程式碼由 Mark Harrison 開發。

參見 SEE ALSO

       format(n), scan(n), namespace(n), package(n)

關鍵字 KEYWORDS

       internationalization, i18n, localization, l10n, message, text, translation

[中文版維護人]

       寒蟬退士
              譯註:部分句子寫的莫名其妙,餘加以意譯。

[中文版最新更新]

       2001/10/12

《中國 Linux 論壇 man 手冊頁翻譯計劃》:

       http://cmpp.linuxforum.net

       本頁面中文版由中文 man 手冊頁計劃提供。
       中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh