1、资源文件命名
国际化资源文件命名格式如下:
basename_language_country.properties basename_language.properties basename.properties
其中basename为资源文件的基本名称,language和country必须是java支持的语言和国家。获取java支持的语言和国家代码如下:
Locale[] locales = Locale.getAvailableLocales(); for(Locale locale:locales){ System.out.println("country:" + locale.getCountry() + ",language:" + locale.getLanguage()); }
2、资源文件的配置和获取
新建资源文件,在中文环境下,资源文件中的value值需要进行ascii转换,可以通过运行后输入native2ascii进行转换,另外本文中使用了eclipse的属性文件插件,因此直接显示为中文。属性文件配置如下:
info_en_US.properties
username=zhangsan info_zh_CN.properties username=张三 info_zh.properties username=李四 password=lisi info.properties username=王五 password=wangwu email=邮箱
另外,如果需要读取到属性文件中的值,需要在struts-config.xml文件中配置常量。
<!-- 使用资源文件名称 ,其中value值代表资源文件的baseName--> <constant name="struts.custom.i18n.resources" value="info"></constant>
页面获取资源文件的方式为通过struts标签<s:text/>,如下所示:
<!-- 资源文件获取key值 --> <s:text name="username"/> <s:text name="password"/> <s:text name="email"/>
另外,如果在form表单中获取key值,方式如下:
<!--其中key值为资源文件中的key值,作用是为输入框添加label名称,和label的属性值一样。但是在常量中会导致key值不能够从属性文件获取对应的value--> <s:textfield name="login.username" key="username"></s:textfield>
另请注意在常量<constant name="struts.ui.theme" value="simple"/>使用时会导致<s:textfield/>中的key值不能够从属性文件获取对应的value。
最后页面显示结果如下:
从以上的配置文件中可以看出这三个值的取值来源,由此可以看出,资源文件的搜索顺序如下:
先从basename_language_country.properties中寻找相关的key值,没有则寻找basename_language.properties中寻找相关的key值,没有则到basename.properties中寻找相关的key值,没有则显示为name的值。
3、属性文件中占位符的使用
属性文件配置内容如下:
username=张三,{0},{1}
在jsp中使用标签<s:param>值</s:param>进行参数的传递。
<s:text name="username"> <s:param>你好</s:param> <s:param>欢迎你!</s:param> </s:text>
4、action中应用资源文件
在action中使用资源文件,需要继承ActionSupport类,ActionSupport类实现了TextProvider, LocaleProvider这两个接口,其中TextProvider提供了获取资源文件值的方法getText()方法,而LocaleProvider接口只有一个getLocale()方法,用来获取Locale。
修改配置文件info_zh_CN.properties:
username=张三,{0},{1} usernameError=用户名称不能为空!请确认!
在action中,获取属性文件方法如下:
this.getText("usernameError");
在action中使用占位符进行操作,代码如下:
this.getText("username", new String[]{"你好","欢迎你"});
5、包范围的资源文件
处于该包以及子包下的action都能访问到该资源文件,放置位置为某个包下面,命名格式为:package_language_country.properties。其中package为固定格式。配置文件package_zh_CN.properties如下:
username=包范围下的username
在包下面的action中可以使用getText(“username”)的方式获取。
6、action范围的资源文件
可以为某个单独的action指定一个属性文件,放置位置为某个action同级目录下。命名格式为
ActionName_language_country.properties
。
配置action范围的属性文件:
username=action范围内的username
action中同样使用getText(“username”)方法进行获取值。
7、资源文件的加载顺序
对于action的使用getText(key)值来说,当同时存在action范围内的属性文件、包范围内的属性文件和全局属性文件时,加载顺序如下:
首先,在指定action内的属性文件是否存在key值,如果存在,则取值,如果不存在,则查找当前action上一级包中是否存在指定key值的包范围属性文件,不存在则继续上一级包中寻找,如果一直没有找到,则在全局的属性文件中寻找是否存在指定key值。如果存在指定的key值,则取出key值对应的value值,如果不存在,则默认为key值。
另外,当全局属性文件,有多个资源文件时,需要按照basename_language_country、basename_language、basename的顺序进行寻找。
8、页面获取资源文件
(1)使用<s:i18n/>访问某个资源文件。
代码如下:
<!-- 使用i18n标签获取属性文件 --> <!-- 获取包范围下的资源文件 --> <s:i18n name="com/struts/package"> <s:text name="username"></s:text> </s:i18n> <!-- 获取action范围下的资源文件 --> <s:i18n name="com/struts/service/LoginService"> <s:text name="username"></s:text> </s:i18n>
(2)<fmt/>的使用
JSTL中包含了国际化和格式化标签,使用国际化标签可以让一个jsp页面可以根据访问者所在的区域输出不同语言的页面表述。在此需要使用Maven添加依赖jar包。配置文件如下:
<!-- 引入jstl标签库 --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>
在jsp页面使用fmt标签,应用代码如下:
<!-- 使用jstl标签fmt --> <!-- 设置语言环境,会覆盖客户端传递的怨言 --> <fmt:setLocale value="zh_CN" scope="request"/> <!-- 装载一个资源集,并保存在EL变量中 ,basename为基本名称,如果为包范围下则为com.struts.package,action范围下为com.struts.service.LoginService--> <fmt:setBundle basename="info" scope="request" var="baseName"/> <fmt:message key="username" bundle="${baseName }"> <!-- 占位符的传递参数 --> <fmt:param value="您好"/> <fmt:param value="欢迎"/> </fmt:message><br/> <!--fmt:bundle 设置一个只在标签体内的访问的资源集 --> <!-- package范围下的资源文件 --> <fmt:bundle basename="com.struts.package"> <fmt:message key="username"/> </fmt:bundle> <!-- action范围下的资源文件 --> <fmt:bundle basename="com.struts.service.LoginService"> <fmt:message key="username"/> </fmt:bundle>
本文向大家介绍Java语言资源国际化步骤解析,包括了Java语言资源国际化步骤解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Java语言资源国际化步骤解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 语言资源国际化步骤: 1. 定义资源文件(如:language),需要使用命令native2ascii命令进行转码;(nativ
1)在db中存储资源密钥 优点:不需要复杂的查询来获得已翻译的实体。为您处理后退。 缺点:管理员用户很难管理翻译(每当我的更改时,必须部署资源文件)。 2)使用实体类型 null null
本文向大家介绍深入解析Java的Struts框架中的控制器DispatchAction,包括了深入解析Java的Struts框架中的控制器DispatchAction的使用技巧和注意事项,需要的朋友参考一下 Struts中的表单处理器为ActionForm,而struts中的控制器主要是Action,以及DispatchAction控制器等。 Action 在struts中,所有的用户都会经过Ac
除了可以使用资源文件来保存资源信息外,还可以将资源信息放到Java类中。保存资源信息的Java类也可以被称为资源类。资源类和普通Java类有如下两点差异: l 资源类的命名受到限制:资源类的命名和资源文件的命名类似。文件名必须是baseName_language_country、baseName_language或baseName中的一个。 2 资源类必须从java.util.ListResour
本实例演示了如何通过ResourceBundle类获得本地环境的资源信息。 例子 : 获得国际化资源信息 1. 实例说明 在这个例子中建立了两个资源文件,一个是中文环境的资源文件,一个是英文环境的资源文件。将Locale对象设为英文环境,这时ResourceBundle对象会读取英文环境中的信息。如果将英文资源文件删除。ResourceBundle对象由于未找到英文资源文件,因此,就会读取系统本地