C语言自学完备手册(33篇)
Android多分辨率适配框架
JavaWeb核心技术系列教程
HTML5前端开发实战系列教程
MySQL数据库实操教程(35篇图文版)
推翻自己和过往——自定义View系列教程(10篇)
走出思维困境,踏上精进之路——Android开发进阶精华录
讲给Android程序员看的前端系列教程(40集免费视频教程+源码)
所谓的国际化就是指软件应具备支持多种语言和地区的功能,也就是说软件能针对不同国家和地区的来访用户,提供符合来访者阅读习惯的页面和数据。由于国际化internationalization的首字母i和尾字母n之间有18个字符,因此国际化被简称为il8n。
对于软件中的菜单栏、导航栏、错误提示信息,状态信息等这些固定不变的文本信息,可根据语言的不同将其写入不同的properties文件中从而实现国际化。不同的properties文件组合形成资源包。
资源包中使用基包作为默认的资源文件,基包的文件名常被称为基名。在资源包中,除了基包还存在其它资源文件;这些资源文件拥有共同的基名。除了基名,每个资源文件的名称中必须含有标识其本地信息的附加部分。例如:资源包i18n.properties,基名是i18n,则与中文、英文环境相对应的资源文件名则为: i18n_zh.properties和i18n_en.properties。
实现固定文本国际化常用方式如下:
利用ResourceBundle在页面中实现固定文本国际化
利用JSTL在页面中实现固定文本国际化
利用Java语言在编程中实现固定文本的国际化
数值,货币,时间,日期等数据由于可能在程序运行时动态产生,所以无法像文字一样简单地将它们从应用程序中分离出来,而是需要特殊处理。Java 中提供了解决这些问题的 API 类,例如:Local、DateFormat、NumberFormat等等。
在此,以示例形式介绍JavaWeb应用与国际化相关的技术及其使用。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ page import="java.util.ResourceBundle" %>
<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>i18n</title>
</head>
<h2 style="color: red;">本文作者:谷哥的小弟</h2>
<h2 style="color: red;">博客地址:http://blog.csdn.net/lfdfhl</h2>
<h2>在页面中实现固定文本的国际化</h2>
<body>
<h4>利用ResourceBundle在页面中实现固定文本国际化</h4>
<%
//加载与当前环境对应的资源包
ResourceBundle resourceBundle = ResourceBundle.getBundle("cn.com.properties.i18n",request.getLocale());
%>
<form action="" method="post">
<%=resourceBundle.getString("username")%>:<input type="text" name="username" /><br /><br />
<%=resourceBundle.getString("password")%>:<input type="password" name="password" /><br /><br />
<input type="submit" value="<%=resourceBundle.getString("submit")%>"/>
</form>
<br />
<h4>利用JSTL在页面中实现固定文本国际化</h4>
<fmt:setBundle var="bundle" basename="cn.com.properties.i18n" scope="page" />
<form action="" method="post">
<fmt:message key="username" bundle="${bundle}" />:<input type="text" name="username"><br /><br />
<fmt:message key="password" bundle="${bundle}" />:<input type="password" name="password"><br /><br />
<input type="submit" value="" bundle=" ${bundle}" />">
</form>
<br />
<a href="${pageContext.request.contextPath }/I18NServlet">利用Java语言在编程中实现固定文本的国际化</a>
<br />
<br />
<a href="${pageContext.request.contextPath }/DataServlet">利用Java语言在编程中实现动态数据的国际化</a>
</body>
</html>
package cn.com.servlet;
import java.io.IOException;
import java.text.DateFormat;
import java.text.NumberFormat;
import java.util.Date;
import java.util.Locale;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 动态数据的国际化
*/
public class DataServlet extends HttpServlet{
private static final long serialVersionUID = 686061395465320776L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
try {
//测试Local
Locale locale = new Locale("en", "US");
System.out.println("美国地区的ISO语言代码:" + locale.getLanguage());
System.out.println("美国地区的ISO国家代码:" + locale.getCountry());
System.out.println();
//测试DateFormat
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL, Locale.GERMAN);
String result = dateFormat.format(date);
System.out.println(result);
dateFormat = DateFormat.getTimeInstance(DateFormat.FULL, Locale.CHINA);
result = dateFormat.format(date);
System.out.println(result);
dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG, Locale.CHINA);
result = dateFormat.format(date);
System.out.println(result);
System.out.println();
//测试NumberFormat
int price = 99;
NumberFormat numberFormat = NumberFormat.getCurrencyInstance(Locale.CHINA);
String numberResult = numberFormat.format(price);
System.out.println(numberResult);
String s = "¥99.00";
numberFormat = NumberFormat.getCurrencyInstance(Locale.CHINA);
Number n = numberFormat.parse(s);
System.out.println(n.doubleValue() + 1);
double num = 0.5;
numberFormat = NumberFormat.getPercentInstance();
System.out.println(numberFormat.format(num));
} catch (Exception e) {
// TODO: handle exception
}
}
}
package cn.com.servlet;
import java.io.IOException;
import java.util.Locale;
import java.util.ResourceBundle;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 编程实现固定文本的国际化
*/
public class I18NServlet extends HttpServlet{
private static final long serialVersionUID = 3764684993748167681L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
//资源基包全路径
String baseName = "cn.com.properties.i18n";
//语言环境
Locale cn = Locale.CHINA;
Locale en = Locale.ENGLISH;
//根据基包名和语言环境加载对应的语言资源包
ResourceBundle cnResources = ResourceBundle.getBundle(baseName,cn);
ResourceBundle usResources = ResourceBundle.getBundle(baseName,en);
//从资源包中获取配置信息
String usernameCN = cnResources.getString("username");
String passwordCN = cnResources.getString("password");
String submitCN = cnResources.getString("submit");
String usernameEN = usResources.getString("username");
String passwordEN = usResources.getString("password");
String submitEN = usResources.getString("submit");
//将配置信息打印至控制台
System.out.println(usernameCN+" "+passwordCN+" "+submitCN);
System.out.println(usernameEN+" "+passwordEN+" "+submitEN);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>I18N01</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>I18NServlet</servlet-name>
<servlet-class>cn.com.servlet.I18NServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>I18NServlet</servlet-name>
<url-pattern>/I18NServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>DataServlet</servlet-name>
<servlet-class>cn.com.servlet.DataServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DataServlet</servlet-name>
<url-pattern>/DataServlet</url-pattern>
</servlet-mapping>
</web-app>