Manpages

______________________________________________________________________________

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 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 手 冊 頁 翻 譯 計 劃 》 :

http://cmpp.linuxforum.net

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