互联网解决方案咨询

梦想有多大路就会有多远:作一颗IT量子
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

基于JSON缓存的多国语言的实现

Posted on 2010-07-12 11:13  互联网粒子  阅读(1232)  评论(1编辑  收藏  举报

   最近有些网友问我现在的项目怎么实现的多国语言的处理,我现在社交平台支持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大小一个包,还是很小的。