______________________________________________________________________________
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-string 到 translate-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
Chinese (Simplified)Chinazh_CN
Chinese (Traditional)Taiwanzh_TW
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 SCANCOMMANDS
用 做 給 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 手 冊 頁 翻 譯 計 劃 》 :
跋
本 頁 面 中 文 版 由 中 文 man 手 冊 頁 計 劃 提 供 。 中 文 man 手 冊 頁 計 劃 : https://github.com/man-pages-zh/manpages-zh