锁定老帖子 主题:一个i18n的方案请人拍砖
精华帖 (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的开发团队.再找金山词霸开发团队,他们如何解决这类问题的. |
|
返回顶楼 | |
发表时间:2008-11-01
i18n :主要是实现软件多国语言版本问题; 重点在软件界面显示上,可以显示多国语言文字. 而不是在其他.注意讨论问题的范围. |
|
返回顶楼 | |
发表时间: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在数据库查询。 |
|
返回顶楼 | |
发表时间: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显示。. |
|
返回顶楼 | |
发表时间:2008-11-01
实在是没看懂,按照不同的locale/language建立不同的索引,搜索的时候按locale定位索引不就行了?
|
|
返回顶楼 | |
发表时间:2008-11-01
ray_linn 写道 这样暴露出来的的ProductInfo就会以默认的locale显示。
你是觉得product.getInfo(locale).getName()这样的调用相比product.getName(locale)不够好? |
|
返回顶楼 | |
发表时间:2008-11-01
呃。国际化应该是界面上的Label的翻译吧。里面存的数据如果是要分多国访问的那应该是有不同记录的,汇率问题嘛。
PS:关于Lucene,可以在Doc中创建一个Field,其中存入:铅笔,pen,pencil 搜索的时候顺便搜索这个字段。 |
|
返回顶楼 | |
发表时间: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里的东西生成索引. |
|
返回顶楼 | |
发表时间:2008-11-01
对输入进行机器翻译。。。。。实际上, GOOGLE在SEARCH结果好像能做一定的输入翻译, 比如, 输入 apple, 能找到苹果。
|
|
返回顶楼 | |
发表时间:2008-11-01
个人认为i18n这种东西根本没用,从没在什么较大的网站上看到中文站和英文站用同一套系统的.中国人对网站的使用习惯和国外的人是完全不一样的.
|
|
返回顶楼 | |