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