动态字典的国际化有什么好的方案?

之前设计动态字典国际化的时候,只考虑了 中/英 两种语言,但是最近有提出计划的需求,就是需要添加一些小语种的本地化,比如说可能会有法语、西班牙语...

基本上会出现这样的情况:

  • A组管理员,维护了中文和英语;B组管理员维护了英语和法语;C组管理员维护中文、英语和法语。
  • 又有一些数据是共通的通用字典,比如说一些当地的法律条款,系统统一维护一次所有语言版本之后开放给所有的组。

所以数据隔离了但是又没有完全隔离。

同时用户组之间的成员可能会有借调,本来在A组的人调动到B组了,但是B组并没有维护中文,就会出现要么显示为空白文本,要么就是英语文本。
这个时候要么管理员去维护中文,要么就让借调的用户切换到英文环境去操作。


如果是固定字典其实很简单粗暴直接穷举一下就好了,但是因为是用户维护的动态字典,字典的 Keyvalue 和 语言类型并不是固定的。只能说先预设好一些固定的语言可选项,让他们去选择然后维护。

就很头疼,起初只是添加字段的方式来解决,比如说默认是中文(DESC),然后添加了一个 DESC_EN 的字段,让用户选择性的维护字典数据。现在肯定不能使用这样的方式了,因为有些数据表的可自定义的字段会很多,增加字段的方式就会显得很蠢。

所以想来各位佬有什么好的解决思路?


比较主要的问题

很多的字典内容,其实不受限于开发者的,项目上线之后由拥有管理权限的用户去手动维护。随时都有可能由于用户的增删改查而改变。

现在是给字典表增加了列分别对应 中文/英语/法语,但是这样的话,后续每次增加一种语言都需要再给字典表增加字段。
而且有一些的字典表用户维护的内容是有多个字段的,比如说 4个自定义文本列,那么就是说现在已经有的 三种语言,这个表光自定义维护内容的字段就是 12 个,未来增加更多的语言就要变得越来越多,就会显得比较蠢。

所以就想着把增加字段列的形式,改编成增加数据行的形式,按照 lang 字段去区分不同的语言。只不过这样的话,之前通过字典id去关联的历史数据都得调整。
比如说改用为使用自定义的 key或者其他的方式,不然切换了语言之后依旧是当时关联的字典ID对应的文本内容。就会出现英文环境下历史数据的文本是中文的(其实需要按照各种语言环境去展示对应语言的字典内容)。

阅读 4.7k
4 个回答

用 GNU gettext 方案可行么?

简单来说:

  1. 应用中使用 gettext 函数取得翻译文本,支持复数和 RTL
  2. 有专门的工具可以扫描代码中所有的 gettext,并生成翻译文件 .po
  3. 有专门的工具可以编辑 .po 文件,用来生成翻译
  4. wordpress 用的就是这个方案

如果是java的话, 那不是用 ResourceBundle 就可以解决i18n问题么?

如果不喜欢ResourceBundle的话, 应该是在数据库在一列 表示语言, 再加上一个默认语言(上级语言) 自己按文本键查库也可以的.

对于需要国际化的列,可以考虑使用 JSON 进行存储。

以前的办法比较多的应该是对于需要国际化的内容进行分表。

或者使用字典表,但是内容多了不易维护 🤔

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏