Provided by:
manpages-zh_1.5.1-1_all 
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
_________________________________________________________________
yz DESCRIPTION
msgcat 包提供用來管理多語言的使用者界悸漱@系列函數。在獨立於應用的一-
荂u消息目錄」中定義文本串,可以編輯和蚹鼣o些文本串而不用蚹奰野峈-
鴝l碼。通過向這荇灡坏媬增加一虓s檔案來提供一虓s語言或地域(locale)。
對任何應用和包使用消息目錄都是可選的,但是鼓勵你使用它,以便應用或包在多語言環境中被採用。
RO 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 是用來本地化一蚗野峈漸Dn函數。不再直接的使用-
^文字符串,一蚗野峊i以把^文字符串傳遞給 ::msgcat::mc
並使用它的結果。如果以這種方式用一種語言寫了一-
蚗野峞A通過簡單的定義新的消息目錄條目,以後增加附加的語言支持是很容易的。
::msgcat::mclocale ?newLocale?
這茖蝻潀a域設置成 newLocale。如果省略了
newLocale,返回當前的地域,否則當前的地域被設置成
newLocale。初始的地域預設為在使用者的環境變量中指定的地域。關於地域字符串的格式的詳細描-
z參見下悸 LOCALE AND SUBLOCALE SPECIFICATION
地域和子地域指定章節。
::msgcat::mcpreferences
返回一茼釦漲a域列表,它-
怓O基於使用者指定的語言,以使用者喜好程度為次序。次序是從最偏好到最不喜好的。如果使用者已經指定了LANG=en_US_funky,這-
蚢L程將返回{en_US_funky en_US en}。
::msgcat::mcload dirname
在指定的目錄中查找一蚗仵蛂A這蚗仵蚺t用 ::msgcat::mcpreferences
返回的語言指定。每-
蚗仵蛌漁睎犰W是地域字符串,擴展名是「.msg」。返回匹配的指定和裝載了消息的數目。
::msgcat::mcset locale src-string ?translate-string?
在指定的 locale 中設置從 src-string 到 translate-string
的翻譯。如果未指定 translate-string,對二者都使用 src-string
。函數返回 translate-string。
::msgcat::mcunknown locale src-string
在當前的地域中沒有給 src-string 定義的翻譯的情況下,這茖珛{被
::msgcat::mc 調用。預設的動作是返回 src-string。這-
蚢L程可以被這蚗野峆新定義,比如對每-
茈憚齒r符串記錄錯誤消息日誌。在與 ::msgcat::mc
相同的棧層次上調用 ::msgcat::mcunknown 過程。
::msgcat::mcunknown 的返回Q用做 ::msgcat::mc 的返回C
aMlaWw LOCALE AND SUBLOCALE SPECIFICATION
用地域字符串指定地域。地域字符串的組成是一蚖y言代碼,一-
茈i選的國家(地區)代碼,一茈i選的特定於系統代碼,它-
怚峞u_」分割。國家和語言代碼在標準ISO-639 和 ISO-3166
中。例如,地域「en」指定 English 而「en_US」指定 U.S. English。
區域定義預設為裝載 msgcat 包時在 env(LANG) 中的C如果未定義
env(LANG),則地域預設為「C」。
在使用者指定一茼a域的時-
唌A在字符串翻譯期間進行「最佳匹配」查找。例如,如果使用者指定了
en_UK_Funky,按「en_UK_Funky」、「en_UK」、和「en」
的次序查找地域,直到找到一茪t的字符串翻譯。如果沒有找到這-
茼r符串的翻譯,則調用 ::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
在消息目錄中存儲的字符串被存儲為相對於在其中增加它怐漕-
茼W字空間。這允釵h-
茈]使用相同的字符串而不用害怕與其他包沖突。它還允雪膠r符串被縮寫而減少(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
在查找一荇灡妒甄衝隍漁尕,消息目錄將-
漸查找當前名字空間,接著是當前名字空間的父名字空間,以次類推知道到達全局名字空間。這允酗l名字空間從它的父名字空間「繼承」消息。
例如,執行代碼
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
wM LOCATION AND FORMAT OF MESSAGE FILES
消息檔案可以位於任何目錄中,取決於下列條件:
[1] 給一茈]的所有消息檔案都在相同的目錄中。
[2] 消息檔名跟一茼a域指定符並跟隨著「.msg」。例如:
es.msg -- spanish
en_UK.msg -- UK English
[3] 這蚗仵蚰]含一系列對 mcset 的調用,它怓偃o蚖y言設置需-
n的翻譯字符串。例如:
::msgcat::mcset es "Free Beer!" "Cerveza Gracias!"
]]m RECOMMENDED MESSAGE SETUP FOR PACKAGES
如果一茈]被安裝到tcl_pkgPath 的一茪l目錄中並通過 package require
裝載,推薦下列過程。
[1] 在包安裝期間,在你的包目錄下建立一茪l目錄msgs。
[2] 複製你的 *.msg 檔案到這茈媬中。
[3] 在你的包初始化稿本中增加下列命令:
# load language files, stored in msgs subdirectory
::msgcat::mcload [file join [file dirname [info script]] msgs]
FORMATM SCAN ROwNX POSTITIONAL CODES FOR FORMAT AND SCAN
COMMANDS
用做給 format 的參數的一荇灡圻r符串中的轉換指定符可以包含一 XPG3
位置指定符。例如,它可以按句法的需n在翻譯的時圊新安排句子結構。
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 中使用定位參數來提取國際化字符串中的C
P CREDITS
消息目錄代碼由 Mark Harrison 開發。
SEE ALSO
format(n), scan(n), namespace(n), package(n)
r KEYWORDS
internationalization, i18n, localization, l10n, message, text,
translation
[]
Hhh
譯注:部分句子寫的莫名其妙,餘加以意譯。
[]
2001/10/12
m Linux manUpn:
http://cmpp.linuxforum.net