1、什么是JavaWEB国际化 简单来说就是根据不同的区域,选择所对应地区的页面风俗习惯 一般情况下所要改变的内容有语言、数字、货币、日期,这些随着用户信息而变化的数据称为本地信息敏感数据 国际化又称i18n:internationalization 所以对于这些本地信息敏感数据,还有错误提示信息、状态信息等文本信息,不是直接写在WEB程序中,而是存储在外部资源中(properties文件) 2、Locale类 Locale实例对象代表一个特定的地理,政治或文化上的区域,它本身不做验证它自己代表的语言和地区信息是否正确,只是向本地敏感的类提供本地信息 2.1 Local类的创建通常不需要new出来 只需要调用enum(点后面都是大写的地区常量,所以应该是枚举类 ,这个我随后做验证!) 来创建一个对象 3、本地敏感的类 就是在运行时需要根据Locale类对象来调整其功能的类就叫本地敏感类,比如有以下几个: 3.1DateFomat类 它是一个抽象类,可以调用工厂方法获取对象,当调用这个方法的所传的参数就会有Locale类的对象, 3.2NumberFormat 和DataFomat相似, 有个getCurrentInstance方法获取NumberFomat对象,调用对象的fotmat方法(参数为数字类型),返回的是货币格式的字符串 3.3MessageFormat 模式字符串与占位符: 模式字符串:On {1},xxxx{2}dsajjj{3} 占位符的三种方式 3.3.1{argumentindex}: 0-9之间的数字,表示表示索引 3.3.2{argumentIndex,formatType} 参数的格式化类型 3.3.3{argumentIndex,formatType,FormatStyle}: 与指定的格式化类型对应的模式,必须是一些合法模式的字符串
`public void testMessageFormat(){ String str = "Date :{0},Number:{1}"; Date date = new Date(); double num = 1234.12; String result = MessageFormat.format(str,date,num); System.out.println(result); }`4、ResourceBundle :资源包类 4.1在类加载路径下需要有对应的资源文件:baseName.properties 其中baseName是基名 4.2可以使用 基名语言代码国家代码.properties 来添加不同国家或地区资源文件 4.3可以调用ResourceBundle的getBundle(基名,Locale实例)获取ResourceBundle对象 4.4可以调用ResourceBundle的getString(key)来获取资源文件的value值
5、WEB的国际化 5.1可以使用request.getLocale()获取Locale对象 5.2可以使用JSTL的fmt标签完成的国际化,后面使用框架提供的标签完成 5.3实现中英文的切换: ①提供两个超链接,提供不同的变量值 ②根据变量值确定对应的Locale对象 ③把Locale对象放入的session中 ④绑定Locale对应的资源文件
<c:if test="${sessionScope.locale != null}"> <fmt:setBundle basename="i18n"/> </c:if>