ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Kibana 汉化配置全指南:从 i18n 机制到多版本实操与排查

Kibana 汉化配置全指南:从 i18n 机制到多版本实操与排查

1. 为什么 Kibana 汉化这件事值得单独拿出来聊

Kibana 这个工具,做过日志分析和数据可视化的人都不陌生。它跟 Elasticsearch 搭配使用,负责把后端索引里的数据以图表、表格、地图等形式呈现出来。默认情况下,Kibana 的界面是全英文的,对于团队里非英语背景的成员来说,上手门槛不低。所以很多团队在部署完 ELK 技术栈之后,都会考虑把 Kibana 界面做中文化处理。

但 Kibana 的汉化并不是装个语言包那么简单。它内置了一套基于 i18n 的国际化框架,语言切换依赖配置文件中的i18n.locale参数,而不同大版本之间这个参数的取值方式、支持的语言范围、甚至配置项所在的位置都有差异。更麻烦的是,社区里流传的很多汉化教程是针对老版本的,直接照搬到新版本上要么不生效,要么导致 Kibana 启动异常。

我自己在多个项目里做过 Kibana 的汉化配置,从 6.x 到 7.x 再到 8.x 都踩过坑。这篇文章就把整个流程拆开来讲清楚:i18n 机制到底怎么工作的、不同版本怎么配置、汉化不生效时怎么排查、以及哪些版本压根就不建议折腾汉化。如果你正在负责搭建或维护日志平台,团队里又有人对英文界面犯怵,这篇内容应该能帮你省下不少试错时间。

2. Kibana 的 i18n 机制到底是怎么回事

2.1 i18n 在国际化体系中的角色

i18n 是 internationalization 的缩写,取首字母 i 和尾字母 n,中间刚好 18 个字母。这个概念在前端和后端框架里都很常见,核心思路是把界面上的文案从代码里抽出来,放到独立的资源文件中,运行时根据用户的语言设置加载对应的翻译文件。

Kibana 的 i18n 实现经历了几个阶段的演进。早期版本用的是自己封装的一套轻量方案,翻译文件以 JSON 格式存放在源码的src/core/server/i18n或x-pack相关目录下。到了 7.x 之后,Kibana 逐步迁移到了更规范的国际化方案,翻译资源的组织方式也发生了变化。8.x 版本则进一步整合,部分翻译内容直接内置在构建产物中。

理解这个演进过程很重要,因为它直接决定了你用什么方式去配置汉化。如果你拿 6.x 时代的教程去操作 8.x 的 Kibana,大概率会在文件路径那一步就卡住。

2.2 Kibana 支持哪些语言

Kibana 官方内置支持的语言数量是有限的。在 7.x 版本中,官方明确支持的语言包括英语、中文(简体)、中文(繁体)、日语、法语、德语等。但要注意,“支持”和“翻译完整度”是两回事。中文的翻译覆盖率在不同版本中差异很大,有些版本的翻译只覆盖了核心界面,一些插件页面和高级功能仍然是英文。

你可以通过查看 Kibana 源码中的x-pack/plugins/translations/translations目录来确认当前版本支持的语言列表。每个语言对应一个 JSON 文件,文件名就是语言代码,比如zh-CN.json、ja-JP.json等。文件越大,说明翻译内容越多。

2.3 语言配置的加载优先级

Kibana 确定界面语言的逻辑大致是这样的:首先看kibana.yml中是否配置了i18n.locale,如果有就用这个值;如果没有配置,则回退到浏览器请求头中的Accept-Language;如果两者都没有匹配到支持的语言,最终回退到英语。

这里有一个容易忽略的点:i18n.locale的值必须严格匹配 Kibana 支持的语言代码。你写zh-cn和zh-CN在某些版本里结果可能不同,因为语言代码的解析逻辑在不同版本间有过调整。我建议统一使用zh-CN这种标准格式,避免大小写问题导致的加载失败。

3. 不同版本的汉化配置实操

3.1 Kibana 6.x 版本的汉化方法

6.x 时代的汉化相对“原始”一些。这个版本的 Kibana 并没有把中文翻译作为官方内置功能来对待,很多情况下需要手动引入社区维护的翻译文件。

具体操作步骤大致如下:先找到 Kibana 安装目录下的src/core_plugins/kibana/translations或者src/core_plugins/translations目录,确认是否存在zh-CN.json文件。如果没有,需要从社区仓库获取对应版本的翻译文件放进去。然后在kibana.yml中添加一行i18n.locale: "zh-CN",重启 Kibana 服务。

这里有个坑:6.x 不同小版本之间的翻译文件格式可能不兼容。比如 6.4 的翻译文件直接放到 6.8 上,可能导致部分界面显示为空白或报错。原因是翻译 key 的命名规则在版本迭代中发生了变化。所以一定要找与当前版本号匹配的翻译文件,不要随便混用。

另外,6.x 的汉化覆盖率普遍不高,大概在 60% 到 70% 左右。管理页面、监控页面等核心区域基本能翻译到,但一些新引入的功能模块往往还是英文。如果你的团队对汉化完整度要求很高,6.x 可能不是理想的选择。

3.2 Kibana 7.x 版本的汉化配置

7.x 是 Kibana 国际化做得比较好的一个阶段。从 7.0 开始,官方正式将多语言支持纳入内置功能,中文翻译的覆盖率也有了明显提升。

配置方式很直接,在kibana.yml中加入:

i18n.locale: "zh-CN"

然后重启 Kibana。不需要额外下载翻译文件,因为翻译资源已经打包在发行版里了。

但 7.x 有一个细节需要注意:部分 7.x 的小版本中,i18n.locale这个配置项在默认的kibana.yml里是被注释掉的。你需要手动取消注释并修改值。如果你只是在文件末尾追加了一行,而文件中已经有一个被注释的# i18n.locale: "en",某些版本的 Kibana 会以第一个出现的配置为准,导致你的设置不生效。所以最好是找到原有的配置行,直接修改它,而不是新增一行。

7.x 的中文翻译覆盖率大概在 80% 到 90% 之间。剩下的未翻译部分主要集中在一些高级功能、错误提示信息和插件相关的界面上。日常使用基本够用。

3.3 Kibana 8.x 版本的汉化现状

8.x 版本在架构上做了比较大的调整,引入了新的构建体系和插件机制。对于汉化来说,好消息是官方依然支持i18n.locale配置,坏消息是部分翻译资源的位置发生了变化,社区里一些老教程提到的文件路径在 8.x 中已经不存在了。

在 8.x 中配置汉化的方式:

i18n.locale: "zh-CN"

跟 7.x 一样,改完重启即可。但如果你是通过 Docker 部署的 Kibana,需要注意环境变量的传递方式。Docker 镜像中可以通过I18N_LOCALE=zh-CN这个环境变量来设置,或者在挂载的kibana.yml中写入配置。两种方式都行,但不要同时用,否则可能出现配置冲突。

8.x 的中文翻译覆盖率跟 7.x 后期版本差不多,但有一个变化值得注意:8.x 的部分界面采用了新的组件库,这些新组件的翻译可能没有及时跟上。所以你会看到一些页面里中英文混排的情况,这是正常现象,不是配置出了问题。

3.4 版本选择建议

如果你正在选型,并且汉化是一个重要考量因素,我的建议是:优先选择 7.x 的较新小版本(比如 7.17),它的汉化成熟度最高,社区资料也最丰富。8.x 虽然功能更强,但汉化方面并没有比 7.x 后期版本有质的提升,反而因为架构变化增加了一些配置上的不确定性。6.x 除非有历史包袱必须用,否则不建议在新项目中考虑。

4. 汉化配置中的常见问题与排查思路

4.1 配置了 i18n.locale 但界面还是英文

这是最常见的问题。排查顺序建议如下:

第一步,确认配置文件是否被正确加载。Kibana 启动时会打印当前使用的配置文件路径,你可以在启动日志里搜索Config file或kibana.yml来确认。如果你用的是 Docker,要确认配置文件是否真的挂载到了容器内的正确位置。

第二步,检查配置项是否被覆盖。Kibana 支持通过命令行参数、环境变量、配置文件多种方式设置配置。如果同时存在多个来源,优先级高的会覆盖低的。比如你通过--i18n.locale=en命令行参数启动,那配置文件里的zh-CN就不会生效。

第三步,确认语言代码是否正确。前面提到过,zh-CN和zh-cn在某些版本里行为不同。建议统一用zh-CN。

第四步,清除浏览器缓存。Kibana 的前端资源会被浏览器缓存,有时候配置已经生效了,但浏览器还在用旧的缓存文件。强制刷新(Ctrl+Shift+R)或者开无痕窗口试试。

4.2 Kibana 启动报错提示语言文件缺失

这种情况通常出现在手动替换翻译文件的场景中。如果你从社区下载了一个翻译文件,但它的格式跟当前 Kibana 版本不兼容,启动时就会报错。

错误信息一般会提示某个 JSON 文件解析失败,或者某个翻译 key 找不到对应的值。解决办法是恢复原始的翻译文件,然后确认你下载的翻译文件版本号与 Kibana 版本号完全一致。如果找不到完全匹配的,宁可不用,也不要冒险混用。

4.3 部分界面汉化不完整

这个问题在前面也提到了,属于正常现象。Kibana 的翻译工作是由社区和官方共同维护的,不同模块的翻译进度不一样。核心的导航栏、仪表盘、发现页面通常翻译得比较完整,但一些管理功能、高级设置、错误提示可能还是英文。

如果你确实需要把某一块界面也汉化,可以考虑自己补充翻译文件。Kibana 的翻译文件是 JSON 格式,结构是 key-value 对。你可以找到对应的英文 key,然后在中文翻译文件中添加对应的翻译。但要注意,自定义的翻译文件在 Kibana 升级时可能会被覆盖,需要做好备份。

4.4 Docker 环境下的特殊注意事项

Docker 部署 Kibana 时,汉化配置有几个容易出问题的地方。一是环境变量的名称,不同镜像版本可能不一样,有的是I18N_LOCALE,有的是KIBANA_I18N_LOCALE,建议查看对应镜像的文档确认。二是配置文件挂载,如果你挂载了整个config目录,要确保挂载后的文件权限正确,否则 Kibana 可能读不到配置。三是容器重启策略,改完配置后一定要重启容器,而不是只重启 Kibana 进程。

5. 汉化之外的替代方案与经验总结

5.1 浏览器翻译插件的利与弊

如果只是个人使用,不想折腾 Kibana 配置,用浏览器的翻译功能其实也能凑合。但这种方式有几个明显的问题:翻译质量不稳定,专业术语经常翻错;页面动态加载的内容可能翻译不到;团队协作时每个人的浏览器设置不一样,体验不统一。所以只适合临时应急,不适合作为团队方案。

5.2 自定义翻译文件的维护策略

对于有长期维护需求的团队,我建议把自定义的翻译文件纳入版本管理。具体做法是:在 Kibana 的翻译文件基础上,把团队常用的、但官方没有翻译的界面文案补充进去,然后把这份文件单独存放到一个 Git 仓库里。每次 Kibana 升级时,对比新旧版本的翻译文件差异,把自定义部分合并进去。这样既能保证汉化完整度,又不会在升级时丢失工作成果。

5.3 我踩过的几个坑

第一个坑是版本号看错。有一次我把 7.10 的翻译文件放到了 7.11 的环境里,结果 Kibana 启动时报了一堆 JSON 解析错误。后来才发现,7.11 的翻译文件格式做了一些调整,key 的命名规则变了。从那以后,我每次都会先确认版本号,精确到小版本。

第二个坑是配置文件优先级。有一次我在kibana.yml里配了zh-CN,但怎么都不生效。排查了半天才发现,启动脚本里有一个环境变量把配置覆盖了。所以现在我会养成习惯,改完配置后先看启动日志,确认最终生效的配置值是什么。

第三个坑是浏览器缓存。这个坑最隐蔽,因为服务端配置明明是对的,但浏览器就是显示英文。后来强制刷新就好了。所以现在遇到汉化不生效的情况,我会先开无痕窗口验证一下,排除缓存干扰。

5.4 关于汉化的几点个人建议

如果你的团队英语水平普遍不错,其实没必要折腾汉化。Kibana 的英文界面用词并不复杂,用一段时间就熟悉了。而且英文界面在搜索文档、对照社区教程时反而更方便,因为大部分资料都是英文的。

如果确实需要汉化,建议在项目初期就确定好 Kibana 版本,然后按照这个版本的最佳实践来配置。不要等到用了一段时间再回头折腾,那时候数据量和用户习惯都已经形成了,改动的成本会更高。

最后一点,汉化配置本身并不复杂,复杂的是版本差异和细节处理。把这篇文章里提到的排查思路过一遍,大部分问题都能自己解决。如果遇到实在搞不定的情况,去 Kibana 的官方论坛或者社区仓库搜一下错误信息,通常能找到对应的讨论帖。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进