国际化,资源文件如何存储更优?
来源:互联网 发布:淘宝电费 编辑:程序博客网 时间:2024/04/30 14:08
项目的 v1.0 完成了,然后被告知,需要添加 i18n 支持。
我们用的框架是 struts2 + spring,其中 spring 只做 bean 相关的生产以及配置工作,按照最简单的,就是建立一个个的 .properties 文件。
在 1.0 版本的系统里,我把所有的 Action 都去继承自己写的一个 AbstractAction (简称 AA ) 了,并且,我在这个 AA 里重载 了 ActionSupport 的 getText(String key) 方法,去我们数据库内的一张 messages 表内取与 key 对应的文本。但是没有考虑 i18n。
当然,如果在这个基础上添加 i18n 支持的话,不外乎添加一个 locale/language 的字段,简单。
麻烦的是,页面上的 <s:text name="xxx"/> 好像用不了,只能改为 <s:property value="xxx" escape="true/false"/>。
-----已解决
<s:text name="key"/> 调用的是String getText(String key, String defaultValue, List args, ValueStack stack)方法,重载此方法就可以了。
早上,小组开了个小会讨论 i18n 的解决方案。最后确定,采用通用的 .properties 文件的做法。
但我还是觉得这个做法不是那么多好,原因如下:
1. 开发期间,修改资源文件,当前的这个 web context 不断的 reload,麻烦,若系统添加了需要登录的权限验证,那就是超级麻烦。
2. 对于 key-value-pair 的管理,按照 DRY 的原则,若 value 相同,那么就应该把 key 置为相同的,可如果是在两个 Action 里的呢?向父类 AA 里提取?那么,命名方式呢?(我们现在采取了如此多命名方式:login.invalid_username, profile.change_password_success,.前的是 Action 的名字)。
3. 对于问题 2,独立开发的话,问题不会很大。但是小组配合,若 partner 不在旁边的那个位置,这就是一场灾难。
4. <s:text/> 方法很好用,但是仅限于在 view/action 层。我们系统里有一个导出 excel 功能,表头 label 的 i18n,好吧,我功力太浅,没有找到在一个外部 utils 包内的完全脱离语境的情况下如何取得这些 resource bundles。
----关于问题1,可能有人认为统一改好后统一测试不就得了。但是作为一个 web 开发人员,我个人认为,看到页面效果后再进行下一步,是给我前面动作的肯定,信心的提升,不看页面就往下走,可能效率极高,但是更可能自找麻烦。
TDD 不是就认为我们应该多测试么?
在社区的地址,看看会不会有人讨论。
http://topic.csdn.net/u/20081223/16/2770aeee-d1b9-4bec-8053-3cbac682f018.html
*******************************
add @ 2008-12-26 15:30
--------
看来 CSDN 真是堕落的不行,只有一个人回复了我这个帖子:
ladofwind:相信我 ,用propertie文件是业界规范,另外js文件也可以做国际化,它会随browser locale不同加载不同语言的,
第二个问题,多搞几个文件就可以了,不同的propertie文件也可以有同样的key啊,只要你jsp里搞好bundle哪个文件
就好
-----------------------
今天我想到了的是,我还是觉得放DB里好一些,因为开发阶段这些痛苦实在太让人难受了。
关于速度,.properties文件用的是启动时全部加载,速度没话说,毕竟是内存操作。那么我给数据库加一个缓存的话,也同样是内存操作。脏数据?那加一个清空缓存的接口就OK了。
于是,优缺点在此列一下:
缺点:
1. 增加了一个做清缓存的接口,不过,此为一劳永逸。
2. 页面上的 <s:text name="key"/> 方法需要全改为 <s:property value="getText('key')"/>,这个比较恶心。。。
----同上,已解决。
优点:
1. 传闻 webwork/struts2 的 getText(String) 方法运用不当会导致效率问题(这个是我以讹传讹。。。)。
2. 开发小组成员统一引用一个DB,维护 key-value-pair 的难度比独自维护 properties 文件下降很多很多。
3. 脱离 web context 模块的 i18n 做起来将方便很多。
-----
4. 重载 getText 方法,可以在 key 里面自己做手脚,如: <s:text name="username +:"/>,代表后面跟一个冒号(国际化里的全角半角之分)。
----- 黑体部分 @ 2008-12-26
----- 第4点 @ 2009-01-04
- 国际化,资源文件如何存储更优?
- 如何配置国际化资源文件
- 国际化资源文件是如何加载的?
- 定义国际化资源文件
- 加载国际化资源文件
- struts2 资源文件:国际化
- 资源文件国际化
- android 资源文件国际化
- 国际化资源文件
- 国际化资源文件 转码
- Android 国际化,资源文件
- ResourceBundle国际化资源文件
- 页面,如何访问国际化资源文件的配置
- 国际化全局资源文件输出国际化信息
- 中文资源文件国际化转换
- Ext 国际化 中文资源文件
- 国际化资源文件的实现
- struts2引用国际化资源文件
- 解决href使用onclick方法时点击该链接的时候不会跳转页面.但是滚动条会往上滚的问题
- asp.net留言本(文本格式)
- 异构数据库之间的复制(SQL)
- 计算机加密
- 网络故障诊断与优化!
- 国际化,资源文件如何存储更优?
- 我国拟修刑法严惩网络犯罪:黑客犯罪最高判7年
- 电子商务相关术语
- JAVA学习提高之----Tomcat的静态和动态部署
- linux学习笔记--查看cpu、内存信息
- DataSet和Excel文件的相互导入导出
- 一个access数据库的日期提醒代码
- MIDlet中的platform函数
- Flex与JavaScript的交互:调用JavaScipt或者被JavaScript调用