Vim 从环境变量中获取当前 locale 信息。多数情形下,这意味着 Vim 会使用用户首选
的语言,除非该语言不可用。
要了解当前系统支持的 locale 列表,可在以下路径之一 (用于 Unix) 下查看:
/usr/lib/locale
/usr/share/locale
不幸的是,locale 区分大小写。还要注意 "-" 和 "_" 不要用混了。
(译者注: Windows 上,简体/繁体中文对应语言是 chinese_china 和 chinese_taiwan,
它们在内部被翻译为 zh_CN 和 zh_TW。换而言之,可以用
:language chinese_china " 不能直接用 zh_CN
但
:echo v:lang
zh_CN
这一翻译机制目前来自硬编码,因而看来没有 UTF-8 对应形式的支持。)
:lan :lang :language E197
:lan[guage]
:lan[guage] mes[sages]
:lan[guage] cty[pe]
:lan[guage] tim[e]
:lan[guage] col[late]
显示当前语言 (即 locale)。
使用 "messages" 参数时,会显示用于显示消息的语言。
术语: LC_MESSAGES。
使用 "ctype" 参数时,会显示用于字符编码的语言。
术语: LC_CTYPE。
使用 "time" 参数时,会显示用于 strftime() 的语言。
术语: LC_TIME。
使用 "collate" 参数,会显示用于排序规则的语言。
术语: LC_COLLATE。
参数省略时,显示当前语言的全部组成部分 (返回格式因系统
而异)。
也可通过变量 v:lang 、 v:ctype 、 v:collate 和
v:lc_time 来获得用于各种用途的当前语言。
:lan[guage] {name}
:lan[guage] mes[sages] {name}
:lan[guage] cty[pe] {name}
:lan[guage] tim[e] {name}
:lan[guage] col[late] {name}
设置当前语言 (即 locale) 为 {name}。
{name} 的 POSIX 格式是:
language[_territory][.encoding]
此处的 {name} 必须是系统上的合法语言。一些系统接受像
"en" 或 "en_US" 这样的别名,但有一些系统只接受像
"en_US.ISO_8859-1" 这样的完整名称。在 Unix 系统上,可
用以下命令查看当前系统支持的 locale:
:!locale -a
通过 "messages" 参数,可以设置用于显示消息的语言。该语
言可以不同于当前语言,如在编辑日文文本时使用英文消息。
此值会更新 $LC_MESSAGES。
通过 "ctype" 参数,可以设置用作字符编码的语言。这会影
响 Vim 所链接的库。通常该值应设为当前 'encoding' 值或
"C"。此值会更新 $LC_CTYPE。
通过 "time" 参数,可以设置用于时间和日期消息的语言。这
会影响到 strftime()。此值会更新 $LC_TIME。
通过 "collate" 参数,可以设置用于排序规则的语言。从而
影响字符的排序方式。此值会更新 $LC_COLLATE。
参数省略时,将同时设置以上所有语言类别,另外还会更新
$LANG。
如果可用,LC_NUMERIC 总会被设为 "C",以确保浮点数使用
'.' 作为十进制小数点。
本命令会影响所有依赖语言的功能 (部分消息,时间和日期的
格式)。并非所有系统都完全支持这些设置。
如果设置失败,会返回出错信息。设置成功时,将不会有任何
信息。例如:
:language
当前的 语言: C
:language de_DE.ISO_8859-1
:language mes
当前的 messages 语言: de_DE.ISO_8859-1
:lang mes en
MS-WINDOWS 消 息 翻 译 win32-gettext
如果使用自安装的 .exe 文件,消息翻译通常会直接生效。如果有问题,可能由于系统找
不到 libintl.dll 文件。该文件可从以下网站获取:
http://sourceforge.net/projects/gettext
或:
https://mlocati.github.io/gettext-iconv-windows/
这里也包含了 xgettext,msgformat 以及其它工具。
libintl.dll 应该放在 (g)vim.exe 所在的目录,或者环境变量 PATH 所指定的目录之
一。如果找不到,Vim 也会尝试寻找备用名 "libintl-8.dll" 和 "intl.dll"。
消息数据文件 (vim.mo) 应放在 "$VIMRUNTIME/lang/xx/LC_MESSAGES",这里 "xx" 是所
用语言的缩写 (通常是两个字母,但有例外,如简体或繁体中文会是 zh_CN 或 zh_TW)。
如果希望自行翻译消息,需要生成 .po 文件,并将其转化为 .mo 文件。具体操作请获取
Vim 的源代码并阅读 "src/po/README.txt" 文件。
如果不想使用自动选择的语言,可将 $LANG 变量设为用户首选语言。要关闭语言翻译,
可将其设为 "en"。
:let $LANG = 'ja'
(Windows 相关的帮助文本由 Muraoka Taro 完成)
基本用法请参看 45.2 ,尤其是 'langmenu' 的设置部分。
注意 即使菜单项的翻译已经完成,新改动的菜单项可能仍显示为英文。请联系翻译维护
者,并请求更新菜单项翻译。可在 "$VIMRUNTIME/lang/menu_<lang>.vim" 中找到翻译者
的姓名和电邮地址。
要设置用于菜单的字体 (或字体集),可用 :highlight 命令。例如:
:highlight Menu font=k12,r12
LOCALE 的 别 名
不幸的是,即使使用相同的语言和编码,在不同系统上对应的 locale 名也可能不同。如
果菜单翻译使用的语言不符合预期,请检查以下命令的输出:
echo v:lang
现在,请检查 "$VIMRUNTIME/lang" 目录,确认是否存在使用相近语言的菜单翻译文件。
注意 符号 "-" 和 "_" 的区别也可能导致文件无法找到!此外,"iso8859-1" 和
"iso_8859-1" 的差异常常也会引发问题。所幸的是,Vim 会将所有名称统一转换为小
写。因此无需担心大小写差异。为避免对空格进行转义,空格会被替换为下划线。
如果发现所需的菜单翻译文件使用不同语言名,可在用户运行时目录下创建新脚本文件,
以载入正确的菜单翻译文件。该脚本的文件名应该是:
~/.vim/lang/menu_<v:lang>.vim
'runtimepath' 选项给出会被搜索的运行时目录。在该脚本文件中,添加一条命令以载入
使用其他名称的菜单文件:
runtime lang/menu_<其他语言>.vim
翻 译 菜 单
如果希望自行翻译菜单,可用 :menutrans 命令,说明见下。推荐将同一语言的所有翻
译命令集中放进一个 Vim 脚本文件。对于尚未完成翻译的语言,欢迎考虑成为其维护
者,以便让翻译成果惠及所有 Vim 用户。为此,请发电邮给 Vim 的维护者:
<[email protected]>。
:menut :menutrans :menutranslate
:menut[ranslate] clear
清除所有的菜单翻译。
:menut[ranslate] {english} {mylang}
将菜单名称 {english} 翻译成 {mylang}。"&" 和 "<Tab>"
这样的特殊字符也必须都包括进去。和其它 :menu 命令一
样,空格和句点都需要用反斜杠转义。
忽略 {english} 中的大小写。
要查看示例,可参阅 $VIMRUNTIME/lang 目录。
要检验翻译结果,首先需要清除所有菜单。如果不想重新启动 Vim,可用:
:source $VIMRUNTIME/delmenu.vim
:source <新-菜单-文件>
:source $VIMRUNTIME/menu.vim
菜单路径的每个部分会单独进行翻译。例如: 假定 "Help" 被翻译为 "帮助",
"Overview" 被翻译为 "总览",那么 "Help.Overview" 会被翻译为 "帮助.总览"。
在 Vim 脚本中,可通过 v:lang 变量获取当前语言 (locale)。缺省值是 "C",或取自
环境变量 $LANG。
下例展示了如何以简单方式使用该变量,使消息能够根据用户的语言偏好进行调整:
:if v:lang =~ "zh_CN"
: echo "早上好"
:else
: echo "Good morning"
:endif
vim:tw=78:sw=4:ts=8:noet:ft=help:norl: