最近有些网友问我现在的项目怎么实现的多国语言的处理,我现在社交平台支持5种不同国家的语言,在平台上每一个用户都可以自己选择自己喜欢的语言
而平台下面的社区是可以由社区的管理者来决定使用哪一种语言,对于多国语言的处理有很多种方案,微软也有自己的一套解决办法。我考虑的是用JSON+缓存的方案。
原因是网站的功能在不断的升级和变化,为了能快速实现和部署。基本的实现步骤如下:
注意,我只是对网站的标识,操作部份进行了多国语言,没有对内容做任何的多语言处理。
先把网站页面上需要进行多国语言的条词进行翻译成不同的5种语言,用EXCEL表格先译好。
比如:
序号 EN CN JP
1 HOME 首页 XXXX
其中序号是不能重复的,后面要加的话直接加到进兵中面来。EN就是项文的译法,CN就是对应的中文的意思
写一个小程序把这个表格读出来生成5份不同的语言包,以JSON数组存放。生成后的样子
[
{Key:1,Value:"帐号无法使用,请联系管理员。"},
{Key:2,Value:"关于"},
{Key:3,Value:"关于活动"},
{Key:4,Value:"关于圈子"},
。。。。。
KEY是唯一的,后面对应的就是语言了,所有的语言是以KEY为准。
这样就完成了第一步,第二步就是根据EN的翻译生成一个枚举类:
public const int Account_Inactive = 1;
public const int About = 2;
public const int About_Event = 3;
public const int About_Group = 4;
public const int About_Jujuya = 5;
public const int About_Me = 6;
生成的这个类是为了方面在页面上调用
第三步,把生成的所有的语言包文件cache起来,当用户去请求页面时,根据不同的语言Key去语言包中查找对应的翻译显示出来。
如果当前的社区是使用的中文包的话
<%=base.LanguageKey.Account_Inactive%>就是要据这个枚举类的Account_Inactive值为1从中包的CACHE包中取出它对应的语言包的翻译是
"帐号无法使用,请联系管理员"就是显示出来了。
关于性能问题,原来一天的PV10W上下是看不出什么问题的,这个查询还是很快的,语言包的条目不多,现在没有过2千个。
占用的内存来看,曾经做过实验是5千个条目包是2M大小一个包,还是很小的。