国际化

1、什么是国际化?

   国际化就是可以把页面中的中文变成英文,例如页面中的登录表单:

2、理解国际化

   想把页面中的文字修改,那么就不能使用硬编码,例如下面的页面都是硬编码:

   上图中的中文想转换成英文,那么就需要把他们编程或编码:

3、Local类

   创建Local类对象:

  • new  Local(" zh "," CN ");
  • new Local(" en "," US ");

   一个Local对象表示的就是语言和国家。

4、ResourceBundle类

   ResourceBundle类用来获取配置文件中的内容。

   下面是两个配置文件的内容:

  • res_zh_CN.properties

           

  • res_en_US.properties

           

   ResourceBundle的getBundle()方法需要两个参数:

  • 第一个参数:配置文件的基本名称;
  • 第二个参数:Locale;

5、页面国际化

  

   其实页面国际化也是同一个道理,只需要通过切换Locale类来切换配置文件。我们配置一个MessageUtils类,内部需要ResourceBundle的实力。

public class MessageUtils {
	private static String baseName = "res";
	private static Locale locale;
	public static String getText(String key) {
		return ResourceBundle.getBundle(baseName, locale).getString(key);
	}
	public static Locale getLocale() {
		return locale;
	}
	public static void setLocale(Locale locale) {
		MessageUtils.locale = locale;
	}
}

   我们再写一个过滤器MessageFilter,他通过参数来创建Locale对象,传递给MessageUtils,然后再页面中使用MessageUtils来获取文本信息。

public class MessageFilter implements Filter {
	public void destroy() {
	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest) request;
		String l = req.getParameter("request_locale");
		Locale locale = null;
		if(l != null && !l.isEmpty()) {
			String[] strs = l.split("_");
			locale = new Locale(strs[0], strs[1]);
			req.getSession().setAttribute("WW_TRANS_I18N_LOCALE", locale);
		} else {
			locale = (Locale)req.getSession().getAttribute("WW_TRANS_I18N_LOCALE");
		}
		if(locale == null) {
			locale = req.getLocale();
		}
		MessageUtils.setLocale(locale);
		chain.doFilter(request, response);
	}

	public void init(FilterConfig fConfig) throws ServletException {
	}
}

<p><span style="color:#08080;"><</span><span style="color:#3f7f7f;">body</span><span style="color:#08080;">></span></p><p><span style="color:#000000;">    </span><span style="color:#08080;"><</span><span style="color:#3f7f7f;">p</span><span style="color:#08080;">></span><span style="color:#bf5f3f;"><%=</span><span style="color:#000000;">MessageUtils.getText(</span><span style="color:#2a0ff;">"hello"</span><span style="color:#000000;">) + </span><span style="color:#2a0ff;">":"</span><span style="color:#000000;"> +request.getParameter(</span><span style="color:#2a0ff;">"username"</span><span style="color:#000000;">) </span><span style="color:#bf5f3f;">%></span><span style="color:#000000;">:</span><span style="color:#08080;"></</span><span style="color:#3f7f7f;">p</span><span style="color:#08080;">></span></p><p><span style="color:#000000;">  </span><span style="color:#08080;"></</span><span style="color:#3f7f7f;">body</span><span style="color:#08080;">></span></p>

6、NumberFormat

   NumberFormat类用于对数字进行格式化,我们只需要使用String  format( double  d )一个方法即可。下面是获取NumberFormat实例的方法:

  • NumberFormat.getNumberFormat()
  • NumberFormat.getNumberFormat(Locale  l)
  • NumberFormat.getCurrentcyFormat()
  • NumberFormat.getCurrentcyFormat(Locale  l)
  • NumberFormat.getParentFormat()
  • NumberFormat.getParentFormat(Locale  l)

7、DateFormat

   DateFormat类用来对日期进行格式化,我们只需要使用String  format(Date  d)一个方法即可。下面是获取DateFormat的实例:

  • DateFormat.getDateFormat()
  • DateFormat.getTimeFormat()
  • DateFormat.getDateTimeFormat()
  • DateFormat.getDateFormat(int  style,Locale  locale)
  • DateFormat.getTimeFormat(int  style,Locale  locale)
  • DateFormat.getDateTimeFormate(int  style,Locale  locale)

   其中style是对日期的长、中、短,以及完整样式。

  • SHORT
  • MEDIUM
  • LONG
  • FULL

8、MessageFormat

   MessageFormat可以把模式中的{N}使用参数来替换。我们把{N}称之为点位符,其中点位符中的N是从0开始的整数。

   MessageFormat.format(String  pattern,Object...  params),其中pattern是包含0~n个点位符,而params表示对点位符的替换文本。注意:点位符是从0开始的。

      String  p = " {0}或{1}错误 ";

      String  text = MessageFormat.format(p," 用户名 "," 密码 ");

      System.out.println(text);//用户名或密码错误

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值