一、思路
多语言结构无非就是语言包的配置,配置语言包,前台根据选择的不同语言查询后展示。
多语言系统有两种方案:
- 本地化多语言配置,通过配置文件,key-value的形式,每一个语言配置一个文件,通过语言选择文件,再通过key匹配value,最后将value返回。
这里可以选择设计模式中的策略模式实现,也可以通过拦截器实现。具体实现不多说,网上有资料。
优点:简单易实现,可以通过一次性写入文件的形式快速导入语言包;
缺点:集群部署下,每个机器都要保存一份语言包,造成资源浪费。
- 分布式多语言配置,这也是我项目中使用到的方案,同样也是key-value形式,将语言包存储到数据库中,通过sql查出对应的语言,返回给前台。
优点:分布式系统下不会造成资源浪费,可通过后台动态配置;
缺点:设计复杂,需要设计对应的表结构、字段等;
二、结构设计
多语言涉及到四张表:字典表,语言配置表,语言字段表和语言字段值表。
其中字段表和字段值表,乍一看似乎就是我们需要的key-value结构的表,其实不然,字典表才是key。
先说明每张表的作用:
字典表:顾名思义,就是用于查找的字典,这里存放了你需要做多语言的字段。假如我现在有一个字段“word”需要做多语言,那么word就存到字典表中,主键id为1(表结构可以自己根据业务设计)。
id | dict_name |
1 | word |
语言配置表:这个比较简单,就是说明你现在支持什么语言,表结构也比较固定,id、code、name。比如现在支持中文、英文,表中就有两条数据:
id | code | name |
1 | ch | 中文 |
2 | en | 英文 |
语言字段表:这个表主要作用是说明多语言字段的来源,用途,以及其他相关数据。比如字典id为1(对应word),来源table表等等,这张表可有可无,不影响多语言系统,根据自己的业务去设计相应的字段。
语言字段值表:这个表就是存储字典对应语言的值了,固定字段:主键id、字典id、语言id、语言值。比如现在字典中有word这个字段,id为1,那么在语言字段值表中的数据就有两条。
id | dictId | languageId | value |
1 | 1 | 1 | 单词 |
2 | 1 | 2 | word |
如果有其他语言,就往这个表中继续插入字典id对应的语言id对应的value,当然语言配置表也别忘了添加数据。