Provided by: manpages-zh_1.5.2-1.1_all bug

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 SCAN COMMANDS

       用做给 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