______________________________________________________________________________
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