资源文件的定义:
在struts2里,资源文件被分成了三个级别:类级别,包级别,全局级别。
执行时,将按照从小到大的顺序依次搜索资源文件里的key值,直至找到。
类级别的文件名定义:Action类名_语言码_国家码.properties,比如:LoginAction_en_US.properties,LoginAction_zh_CN.properties;
如果是在全局中定义资源文件,则需要在struts.xml里配置,例子:<constant name="struts.custom.i18n.resources" value="message" />,其中message为资源文件的起始名;
全局资源文件的位置在src\下。
如何写中文的资源文件:
对于用于中文显示的资源文件,以前需要使用java自带的native2ascii.exe将中文内容转换成对应的unicode,比较麻烦,而现在可以使用eclipse的插件自动转换。
eclipse插件:
propertieEdit(一款由日本人开发的开源插件,可直接输入中文,自动转换)
本地下载link:
/Files/koradji/propertieEdit.zip
下载后,将里面的目录拷贝到eclipse下对应的目录里,重新启动eclipse就可以了。(可能需要在启动命令里加上-clean)。
在jsp里读取资源文件的方法:
画面上的文字采用<s:text name="key" />写;
其他的,比如按钮的value,textfield的label等采用<%{getText('key')}>写,例子:<s:submit action="confirm" value="%{getText('confirm.button.label')}" /> ;
或者,也可以使用这样的写法:<s:textfield name="username"
key="page.index.text.username"></s:textfield>
使用<s:i18n>可以指定临时的资源文件,
例子1:
<s:i18n name="temp"> ----- baseName对应名称的资源文件名
<s:text name="info"> ----- info为资源文件中的key
<s:param>张三</s:param> ---- 指定第一个参数 {0}
<s:param>23</s:param> ---- 指定第二个参数 {1}
</s:text>
</s:i18n>
例子2:
<s:i18n name="org.scorpio.jh.struts2.i18n.web.action.LoginAction">
<s:text name="page.index.text.username"></s:text>
<s:text name="page.index.text.password"></s:text>
</s:i18n>
没有实际应用过,猜测可能是在页面上指定某个区域可以显示与default locale不同的语言文字?
在java里读取资源文件的方法:
Action类里(需要继承ActionSupport),使用getText(String key)方法就能取得资源文件里的值;
Business Services类里,使用ResourceBundle.getBundle(资源文件名).getString(key)方法取得值;
如何切换画面语言:
在jsp里,在适当的位置放入下面的代码:
<s:url id="url" action="UnsubscribeNL_language">
<s:param name="
request_locale">en_US</s:param>
</s:url>
<s:a href="%{url}">English</s:a><br>
<s:url id="url" action="UnsubscribeNL_language">
<s:param name="
request_locale">zh_CN</s:param>
</s:url>
<s:a href="%{url}">简体中文</s:a>
在发送请求时,struts会搜索拦截request_locale变量,并将该变量值设为default locale;
在Action类里加入一个方法:public String language(),运行初始化返回本画面即可;