多语言

NocoBase 3 的应用默认就支持多语言,内置中文和英文。

如果内置的两种语言够用,这一页你只需要看前两节。需要增加一种语言,或者想让应用默认显示中文,再往下看——这些都可以让 Coding Agent 完成。

切换语言

点开右上角的头像,选择「语言」,即可切换语言。

switch language

切换立即生效,页面不会刷新,插件提供的界面也会跟着变。

语言切换是用户级别的。 它保存在当前浏览器里,刷新后还在,但不会跟着账号同步到其他设备。你切换成中文,不会影响别人看到的语言,也不会改变应用的默认语言。

加一种新语言

应用支持哪些语言,由应用自己的翻译文件决定——加一个语言文件,就是加一种语言。

翻译文件分前后端两处:client/locales/ 决定切换菜单里出现哪些语言,server/locales/ 决定服务端能用哪种语言回应。建议两边支持的语言保持一致。只添加前端语言也能正常切换:界面使用所选语言,服务端回落到英文,并通过普通提示告知用户。

可以把需求交给 Coding Agent,说语言的名字就行:

给我的应用增加西班牙语,前后端都要加上。

完成后运行 pnpm nocobase locales check 和 pnpm typecheck 确认。

它会创建语言文件、登记到加载列表,并检查两边是否一致。完成后刷新页面,切换菜单里就会多出这一项。

add language

如果前端或者后端的翻译文件只加了一边,可以用这个命令查出来:

pnpm nocobase locales check

设置默认语言

默认语言指的是没有选过语言偏好的用户第一次打开应用时看到的语言。在 config.yml 里配置:

i18n:
  defaultLocale: zh-CN

不配置时默认为 en-US。修改后的配置生效后,刷新页面即可。

开发和生产环境都会在服务端返回 HTML 时,将 lang 属性设置为默认语言。客户端初始化后,再按照最终选中的语言(包括之前保存的偏好)同步 lang 和文字方向,后续切换语言时也会同步。部署后修改默认语言不需要重新构建客户端。

已经选过语言的用户不受影响

默认语言只对没做过选择的浏览器起作用。如果你改了这个配置却发现自己看到的语言没变,多半是因为你之前手动切换过——换一个浏览器,或者清掉站点数据就能看到效果。

默认语言还有第二个作用:某段文字在当前语言里没有翻译时,会回落到默认语言。

插件的语言

你的应用支持的语言,插件不一定都翻译了。这时候没翻译的部分会按这个顺序回落:

当前语言  →  应用的默认语言  →  英文

举个例子:应用默认中文,你加了西班牙语,而某个插件只翻译了中文和英文。一个西班牙语用户看到的界面里,你的应用写的部分是西班牙语,这个插件的部分是英文。

如果你希望插件的某段文案也用你的措辞,在应用自己的翻译文件里覆盖它就行,做法见应用开发 / 多语言。

常见问题

切换了语言,但有一部分还是英文

这部分文案属于某个插件,而它没有翻译这种语言。回落到英文是预期行为,不是故障。需要中文的话,在应用自己的翻译文件里覆盖对应的 key。

加了语言文件,切换菜单里却没有

先确认加的是 client/locales/——切换菜单读的是这一侧。然后运行 pnpm nocobase locales check 看看两边是否一致。另外,新增语言文件后需要重启开发服务。

界面切过去了,但服务端返回的内容还是旧语言

通常是只在 client/locales/ 加了语言,server/locales/ 没加。服务端不认这种语言,就会继续用原来的语言回应。

同一个账号开了两个标签页,语言互相影响

服务端记录的语言存在会话里,同一个账号的多个标签页共用一个会话,所以后切换的会覆盖先切换的。界面本身不受影响,各个标签页显示各自的语言;受影响的是服务端产生的内容,比如报错信息。这是当前的已知限制。

相关链接