Mlang
Nvim 的 :help
页面,生成 自 源代码 使用 tree-sitter-vimdoc 解析器。
这涉及在各种语言中使用消息和菜单。有关编辑多字节文本,请参阅
多字节。
Vim 从环境中获取区域设置。在大多数情况下,这意味着 Vim 将使用您喜欢的语言,除非它不可用。
要查看系统上支持的区域设置名称列表,请查看以下目录之一(适用于 Unix)
/usr/lib/locale
/usr/share/locale
不幸的是,大小写差异很重要。还要注意 "-" 和 "_" 的使用。
:lan :lang :language E197 :lan[guage] :lan[guage] mes[sages] :lan[guage] cty[pe] :lan[guage] tim[e] :lan[guage] col[late] 打印当前语言(也称为区域设置)。使用 "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}
将当前语言(也称为区域设置)设置为
{name}
。区域设置
{name}
必须是系统上有效的区域设置。一些系统接受别名,例如 "en" 或 "en_US",但有些系统只接受完整规范,例如 "en_US.ISO_8859-1"。在 Unix 系统上,您可以使用此命令查看支持的区域设置
:!locale -a
使用 "messages" 参数设置用于消息的语言。例如,当您想在编辑日语文本时使用英语消息时,这可能会有所不同。这将设置 $LC_MESSAGES。使用 "ctype" 参数设置用于字符编码的语言。这会影响 Vim 链接到的库。将其设置为与
'encoding' 或 "C" 不同的值是不寻常的。这将设置 $LC_CTYPE。使用 "time" 参数设置用于时间和日期消息的语言。这会影响 strftime()。这将设置 $LC_TIME。使用 "collate" 参数设置用于排序顺序的语言。这会影响字符的排序。这将设置 $LC_COLLATE。不带参数将设置所有参数,并另外设置 $LANG。LC_NUMERIC 值将始终设置为 "C",以便浮点数使用 '.' 作为小数点。这将对依赖语言的项目产生影响(某些消息、时间和日期格式)。并非所有系统都完全支持。如果失败,将显示错误消息。如果成功,则不会显示消息。示例
:language
Current language: C
:language de_DE.ISO_8859-1
:language mes
Current messages language: de_DE.ISO_8859-1
:lang mes en
消息文件 (vim.mo) 必须放在 "$VIMRUNTIME/lang/xx/LC_MESSAGES" 中,其中 "xx" 是语言的缩写(大多数情况下是两个字母)。如果您编写自己的翻译,您需要生成 .po 文件并将其转换为 .mo 文件。
要覆盖语言的自动选择,请将 $LANG 变量设置为您选择的语言。使用 "en" 禁用翻译。
:let $LANG = 'ja'
(Windows 文本由 Muraoka Taro 提供)
请注意,如果在完成翻译后对菜单进行了更改,则某些菜单可能会以英语显示。请尝试联系翻译的维护者并要求他更新它。您可以在 "$VIMRUNTIME/lang/menu_<lang>.vim" 中找到翻译者的姓名和电子邮件地址。
要设置用于菜单的字体,请使用
:highlight 命令。示例
:highlight Menu font=k12,r12
别名区域设置名称
不幸的是,即使是针对相同的语言和编码,区域设置名称在不同的系统上也是不同的。如果您没有获得预期的菜单翻译,请检查此命令的输出
echo v:lang
现在检查 "$VIMRUNTIME/lang" 目录,看看是否有使用类似语言的菜单翻译文件。一个 "-" 变成 "_" 的差异会导致文件无法找到!另一个需要注意的常见差异是 "iso8859-1" 与 "iso_8859-1"。幸运的是,Vim 会将所有名称都转换为小写,因此您不必担心大小写差异。空格将更改为下划线,以避免必须对其进行转义。
如果您为您的语言找到了一个具有不同名称的菜单翻译文件,请在您自己的运行时目录中创建一个文件以加载它。该文件的名称可能是
~/.config/nvim/lang/menu_<v:lang>.vim
检查
'runtimepath' 选项以了解搜索的目录。在该文件中,放置一个命令,使用其他名称加载菜单文件
runtime lang/menu_<other_lang>.vim
如果您想做自己的翻译,您可以使用
:menutrans 命令,如下所述。建议将一种语言的翻译放在一个 Vim 脚本中。对于还没有翻译的语言,请考虑成为维护者,并使您的翻译可供所有 Vim 用户使用。发送电子邮件给 Vim 维护者 <
[email protected]>。
:menut[ranslate] clear 清除所有菜单翻译。
:menut[ranslate]
{english}
{mylang}
将菜单名称
{english}
翻译为
{mylang}
。所有特殊字符(例如 "&" 和 "<Tab>")都需要包含在内。空格和点需要用反斜杠进行转义,就像在其他
:menu 命令中一样。
{english}
中的大小写将被忽略。
请参阅 $VIMRUNTIME/lang 目录以了解示例。
要试用您的翻译,您首先必须删除所有菜单。以下是如何在不重新启动 Vim 的情况下执行此操作
:source $VIMRUNTIME/delmenu.vim
:source <your-new-menu-file>
:source $VIMRUNTIME/menu.vim
菜单路径的每个部分都分别进行翻译。结果是,当 "Help" 被翻译为 "Hilfe" 并且 "Overview" 被翻译为 "Überblick" 时,"Help.Overview" 将被翻译为 "Hilfe.Überblick"。
在 Vim 脚本中,您可以使用
v:lang 变量来获取当前语言(区域设置)。默认值为 "C" 或来自 $LANG 环境变量。
以下示例展示了如何在简单的情况下使用此变量,以使消息适应用户的语言偏好,
:if v:lang =~ "de_DE"
: echo "Guten Morgen"
:else
: echo "Good morning"
:endif