论坛首页 Java企业应用论坛

一个i18n的方案请人拍砖

浏览 13078 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-11-01  


地区决定了是用 ProgramResources_ch_ZH,还是用 ProgramResources_en_US

不管你的Fruit.id ,还是Fruit.name,还是Fruit.price ,还是Fuit.description;  都被捆绑在相应的key上了.

从中看出

当地区确定后,Fruit属性与 具体的ProgramResources类型对象的 list一一对应.
如:在中国,是苹果 ,决定了用的是 ProgramResources_ch_ZH对象;
苹果是存在Fruit.name中,而Fruit.name 与ProgramResources_ch_ZH中对应的
key (如"Fruit.name")相对应, 从而能从Fruit.name存储的内容找到
它在ListResourceBundle中的存储位置.

如果你要想从Fruit的name找到其他属性.
由于ListResourceBundle的存储单位,实质上是一个Map,
因此,你要在Map的key命名上,与你的Fruit要一一对应,这样在程序中你就能通过编吗实现.
如:fruit ,在map的key命名上,可这样:fruit_id;fruit_name;fruit_price,
fruit_description.

当用户输入苹果,想要price,程序根据确定的地区,找到ListResourceBundle的对象,寻找fruit_price内容.


对于你 "又及,Descritpion可能为TEXT类型的i18n文档, 要Search出description中带有某些字眼的POJO出来"

这可是其他方面的事了.不是用一个什么注释,用几个关系表,能解决的.

举个例子:

如果有人输个中文字,就找中国价格,如果输人英文字找英国的价格,

而有个中国人,输了英文,想找到英国的价格,而他看不懂啊,需要是汉字显示英国
地区的价格.

想是这个中国人想看全世界的价格信息,而返回的全是中文,这可怎么办?


狂汗! 你可找找qq2009的开发团队.再找金山词霸开发团队,他们如何解决这类问题的.




0 请登录后投票
   发表时间:2008-11-01  


i18n :主要是实现软件多国语言版本问题;

重点在软件界面显示上,可以显示多国语言文字.

而不是在其他.注意讨论问题的范围.
0 请登录后投票
   发表时间:2008-11-01  
我们是这样干的,其实就是one-to-many的关系
Product{
    List<ProductInfo> infos;  
    ProductInfo getInfo(Locale locale);
}
ProductInfo{
   private String locale;
   private Stirng name;
   private String ....
}
但其实ResouceBundle也可以查询,先从那些Properties找出key来,然后再用key在数据库查询。
0 请登录后投票
   发表时间:2008-11-01  
nihongye 写道
我们是这样干的,其实就是one-to-many的关系
Product{
    List<ProductInfo> infos;  
    ProductInfo getInfo(Locale locale);
}
ProductInfo{
   private String locale;
   private Stirng name;
   private String ....
}
但其实ResouceBundle也可以查询,先从那些Properties找出key来,然后再用key在数据库查询。



我要改进的其实就是你的一对多关系,改为一对一关系, 这样暴露出来的的ProductInfo就会以默认的locale显示。.
0 请登录后投票
   发表时间:2008-11-01  
实在是没看懂,按照不同的locale/language建立不同的索引,搜索的时候按locale定位索引不就行了?
0 请登录后投票
   发表时间:2008-11-01  
ray_linn 写道
这样暴露出来的的ProductInfo就会以默认的locale显示。

你是觉得product.getInfo(locale).getName()这样的调用相比product.getName(locale)不够好?
0 请登录后投票
   发表时间:2008-11-01  
呃。国际化应该是界面上的Label的翻译吧。里面存的数据如果是要分多国访问的那应该是有不同记录的,汇率问题嘛。

PS:关于Lucene,可以在Doc中创建一个Field,其中存入:铅笔,pen,pencil
搜索的时候顺便搜索这个字段。
0 请登录后投票
   发表时间:2008-11-01  
nihongye 写道
ray_linn 写道
这样暴露出来的的ProductInfo就会以默认的locale显示。

你是觉得product.getInfo(locale).getName()这样的调用相比product.getName(locale)不够好?


我是觉得多用了一个字段存储locale,似乎浪费了,所以改进点就是把locale变成了field上的annotation,关系也从1对多,变成1对1 --这似乎更符合实际情况.

这个方案主要是配合Hibernate Search, 让多语言的字段生成索引并对应到同一个document ID, 我一直在思考前面的先进提出的list resouce bundle的方案,还没弄明白如何让resource bundle里的东西生成索引.
0 请登录后投票
   发表时间:2008-11-01  
对输入进行机器翻译。。。。。实际上, GOOGLE在SEARCH结果好像能做一定的输入翻译, 比如, 输入 apple, 能找到苹果。
0 请登录后投票
   发表时间:2008-11-01  
个人认为i18n这种东西根本没用,从没在什么较大的网站上看到中文站和英文站用同一套系统的.中国人对网站的使用习惯和国外的人是完全不一样的.
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics