- 浏览: 182604 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (99)
- 备忘录 (48)
- linux (19)
- oracle (10)
- shell (8)
- awk (1)
- java (48)
- just do it (29)
- more and more (46)
- common (29)
- 设计模式 (8)
- Java Web (9)
- Spring (0)
- Structs 2 (2)
- Java 高级 (4)
- 存储 (3)
- Virtual Box (1)
- ant (1)
- maven (0)
- 数据结构 (5)
- 算法 (5)
- javascript (1)
- ajax (1)
- jquery (1)
- xml (1)
- IBM (3)
- 转载 (3)
- English (2)
- html&css (0)
- hibernate (2)
- mysql (1)
- memcached (1)
最新评论
-
飞出四季做的茧:
kris_zhang 写道int temp = 0 ; ...
Java IO流 Zip文件的压缩和解压缩 -
kris_zhang:
int temp = 0 ; while(( ...
Java IO流 Zip文件的压缩和解压缩 -
welcomezhang:
学习了,这块自己还得深挖下
为什么HashMap不是线程安全的 -
fomeiherz:
这个写的最详细了,赞一个
Java的泛型类和泛型方法 -
beijishiqidu:
hanmiao 写道http://yangguangfu.it ...
Java设计模式之策略模式
最近在做项目的时候,由于用到Java基础的东西比较少,都是一些框架的封装的应用,考虑到以后如果接触到其他框架了,会不会对这些底层的东西遗忘啊,所以下定决心,决定每天复习一点之前的知识,作为自己的一个备忘录吧。
随心翻到的一篇,Java对国际化的支持,做过web开发的同学都应该知道I18N这个东西,我就不去讲他的概念了,来张图片说说他的好处吧。
好处有那么多,我就不针对各个点进行详解了,我们直接来看Java语言的国际化的实现机制吧,当然下图是针对B/S框架而言的。
服务器根据客户端的传过来的语言进行解析,这些语言的值一般都保存在浏览器中,举例:
在IE浏览器中的语言选择如下图:
点击工具:
点击语言:
到时候浏览器向服务器发送请求的时候,就会把这个选项带着,然后交给web容器,web容器经过映射,拿到你想要的语言项。
所以:Web容器中的Locale对象来源于Request对象。
好了,现在我们来说说如何开发吧。
你想实现多语言,首先你得告诉服务器你支持哪几种语言啊,就是你有哪些语言的资源文件。
资源文件位置:在类路径下,以.properties为后缀。
资源文件命名:基本的命名_场所标志.properties。
场所标志:Locale对象中保存的一个属性值,例如:中国:zh_CN,美国en_US
那么上述资源文件的命名举例:myres_zh_CN.properties。
资源文件内容:Key=Value,例如:jsp.index.user=User Login,由于多个模块都可能用到Key值,因此为了区分,它支持"."来命名,接触过资源文件的同学应该都知道这些。
举例:
英文的资源文件:
中文的资源文件:
上述保存的中文就是这样的么?当然不是的,Java中保存汉字的时候是以Unicode编码保存的,因此需要把这些汉字进行转码。
JDK考虑到了这一点,它提供了一个转码的工具,供我们使用,当然了,现在IDE的集成开发工具都集成了很多插件,这样的转码工作,完全交给集成开发工具就可以搞定的,在这里我也就提下我们最原始的转码办法吧,当然我相信,这些转码插件底层应该也是调用了这个工具吧。
转码工具:native2ascii。JDK自带的。
用法:native2ascii 原始文件的全路径 目标文件的全路径(保证你的JAVA_HOME配置的是对的,否则这样执行会提示找不到)。
那么在我的本地D盘下会生成一个文件,打开如下:
好了,预备知识差不多了,我们就开始项目吧。
项目部署到Tomcat中,跑起来,按照之前浏览器的截图,把IE的浏览器语言设置为如下
访问http://localhost:8080/i18n/index.jsp,查看到的是英文的界面。
再找一个非IE内核的浏览器(我这里用的谷歌),直接访问,看到的应该是中文的界面了。
好了,页面弄好了,但是后台Java代码呢,如何访问资源文件呢?
上述有两种写法,一种是在后台把消息值根据本地语言环境拿到,然后再放进去,还有一种,是直接把key给放进去,让JSP自己去获取。
那么代码如下:
好了,上述就是Java对国际化的支持,写的比较浅,大家觉得有什么不对的地方,可以指出来。
随心翻到的一篇,Java对国际化的支持,做过web开发的同学都应该知道I18N这个东西,我就不去讲他的概念了,来张图片说说他的好处吧。
好处有那么多,我就不针对各个点进行详解了,我们直接来看Java语言的国际化的实现机制吧,当然下图是针对B/S框架而言的。
服务器根据客户端的传过来的语言进行解析,这些语言的值一般都保存在浏览器中,举例:
在IE浏览器中的语言选择如下图:
点击工具:
点击语言:
到时候浏览器向服务器发送请求的时候,就会把这个选项带着,然后交给web容器,web容器经过映射,拿到你想要的语言项。
所以:Web容器中的Locale对象来源于Request对象。
好了,现在我们来说说如何开发吧。
你想实现多语言,首先你得告诉服务器你支持哪几种语言啊,就是你有哪些语言的资源文件。
资源文件位置:在类路径下,以.properties为后缀。
资源文件命名:基本的命名_场所标志.properties。
场所标志:Locale对象中保存的一个属性值,例如:中国:zh_CN,美国en_US
那么上述资源文件的命名举例:myres_zh_CN.properties。
资源文件内容:Key=Value,例如:jsp.index.user=User Login,由于多个模块都可能用到Key值,因此为了区分,它支持"."来命名,接触过资源文件的同学应该都知道这些。
举例:
英文的资源文件:
jsp.index.userId=UserId: jsp.index.userPwd=Password:
中文的资源文件:
jsp.index.userId=用户名: jsp.index.userPwd=密码:
上述保存的中文就是这样的么?当然不是的,Java中保存汉字的时候是以Unicode编码保存的,因此需要把这些汉字进行转码。
JDK考虑到了这一点,它提供了一个转码的工具,供我们使用,当然了,现在IDE的集成开发工具都集成了很多插件,这样的转码工作,完全交给集成开发工具就可以搞定的,在这里我也就提下我们最原始的转码办法吧,当然我相信,这些转码插件底层应该也是调用了这个工具吧。
转码工具:native2ascii。JDK自带的。
用法:native2ascii 原始文件的全路径 目标文件的全路径(保证你的JAVA_HOME配置的是对的,否则这样执行会提示找不到)。
那么在我的本地D盘下会生成一个文件,打开如下:
jsp.index.title=\u7528\u6237\u767b\u5f55 jsp.index.userId=\u7528\u6237\u540d\uff1a jsp.index.userPwd=\u5bc6\u7801\uff1a jsp.index.submit=\u767b\u5f55 err.login.failure=\u767b\u5f55\u5931\u8d25\uff01
好了,预备知识差不多了,我们就开始项目吧。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="f" uri="http://java.sun.com/jsp/jstl/fmt"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <f:setBundle basename="res.myres" /> <c:if test="${errKey!=null}"> <f:message key="${errKey }" /> </c:if> <f:message key="jsp.index.title" /> <form action="login.do" method="post"> <p> <f:message key="jsp.index.userId" /> <input type="text" name="userId" /> </p> <p> <f:message key="jsp.index.userPwd" /> <input type="text" name="userPwd" /> </p> <p> <input type="submit" value="<f:message key="jsp.index.submit"/>" /> </p> </form> </body> </html>
项目部署到Tomcat中,跑起来,按照之前浏览器的截图,把IE的浏览器语言设置为如下
访问http://localhost:8080/i18n/index.jsp,查看到的是英文的界面。
再找一个非IE内核的浏览器(我这里用的谷歌),直接访问,看到的应该是中文的界面了。
好了,页面弄好了,但是后台Java代码呢,如何访问资源文件呢?
package i18n; 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; /** * Servlet implementation class LoginServlet */ public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("userId===" + request.getParameter("userId")); Locale loc = request.getLocale(); ResourceBundle bundle = ResourceBundle.getBundle("res.myres", loc); String errInfo = bundle.getString("err.login.failure"); request.setAttribute("errInfo", errInfo); //request.setAttribute("errKey", "err.login.failure"); request.getRequestDispatcher("/index.jsp").forward(request, response); } }
上述有两种写法,一种是在后台把消息值根据本地语言环境拿到,然后再放进去,还有一种,是直接把key给放进去,让JSP自己去获取。
那么代码如下:
package i18n; 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; /** * Servlet implementation class LoginServlet */ public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("userId===" + request.getParameter("userId")); // Locale loc = request.getLocale(); // ResourceBundle bundle = ResourceBundle.getBundle("res.myres", loc); // String errInfo = bundle.getString("err.login.failure"); // request.setAttribute("errInfo", errInfo); request.setAttribute("errKey", "err.login.failure"); request.getRequestDispatcher("/index.jsp").forward(request, response); } }
好了,上述就是Java对国际化的支持,写的比较浅,大家觉得有什么不对的地方,可以指出来。
发表评论
-
cgroups控制cpu,memory,io使用率
2016-08-09 22:55 2661Cgroups是control groups的缩写,最初由Go ... -
为什么HashMap不是线程安全的
2016-06-15 22:27 2291序 最近因为项目的需求,经常会面试一些新人,也就会问他们 ... -
JAVA读取文件夹大小的几种方法实例
2016-04-24 15:39 776总是发现自己的C盘快满了,清理程序也不会帮我自己清理,然后 ... -
Java Regex - Matcher (java.util.regex.Matcher)
2015-03-01 13:59 884The Java Matcher class (java. ... -
Java Regex - Pattern (java.util.regex.Pattern)
2015-03-01 11:22 1577Java中的Pattern类是Java正则表达式API ... -
eclipse中查看jdk的源码
2014-11-23 11:43 1070最近一段时间跟jdk源码打交道的比较多,但是有的时候却是看 ... -
Oracle常见死锁发生的原因以及解决办法
2014-08-31 13:25 7563一,删除和更新之间引起的死锁 造成死锁的原因就是多个线程 ... -
Struts2学习初设系列(一)之环境搭建
2014-07-20 22:47 1107已经毕业很长时间了,回过头来想想都不知道自己做了什么,由于 ... -
算法的时间复杂度分析
2014-07-20 11:14 16812.9.1 算法时间复杂度定义 在进 ... -
解析 Java 类和对象的初始化过程
2014-07-06 18:14 683问题引入 近日我在调试一个枚举类型的解析器程序,该 ... -
Java 中正确使用 hashCode 和 equals 方法
2014-07-05 18:17 688在这篇文章中,我将告诉大家我对hashCode和equals ... -
通过分析 JDK 源代码研究 Hash 存储机制
2014-07-05 17:22 649集合和引用 就像引 ... -
NIO 入门
2014-07-05 17:15 675在开始之前 关于本教程 新的输入/输出 (NIO) 库 ... -
利用AJax方式提交和Webservice完成页面输入汉字简体字回显繁体字
2014-06-29 18:05 1186最近一直在学习新的 ... -
How To Parse XML File Using XPath In Java
2014-06-29 11:59 1341最近一直在学习XML的Xpath解析方式,据说是一个很简单 ... -
Java排序算法之快速排序
2014-06-22 11:27 856快速排序使用分治法(Divide and conquer)策略 ... -
Java排序算法之简单选择排序
2014-06-21 22:31 802在网上搜索了很多的算法,貌似大家说的简单选择排序算法和直接选择 ... -
Java排序算法之冒泡排序
2014-06-21 20:22 1036冒泡排序算法的基本思想是:首先将第n-1个记录的关键字和第n个 ... -
Java排序算法之直接插入排序
2014-06-21 19:33 1238直接插入排序算法的基本思想是:把n个待排序的元素看成为 ... -
JAVA之桥接模式
2014-05-26 20:11 0桥模式:将某个问题抽象的不同形式分别与该问题的具体实现 ...
相关推荐
如果你的应用使用Struts框架,Struts提供了内置的国际化支持。在 Struts 配置文件(struts-config.xml)中,你可以定义全局的 `message-resources` 元素,指定资源包的位置。在ActionForm或Action类中,可以使用 `...
首先,Java中的国际化主要依赖于`java.util.Locale`类,它代表了特定的语言环境,包括语言、国家和地区。例如,`Locale.CHINA`表示简体中文环境,`Locale.US`则代表美国英语环境。开发者可以通过`ResourceBundle`类...
NULL 博文链接:https://hanz188.iteye.com/blog/768691
Java作为一种广泛使用的编程语言,提供了强大的国际化支持。本篇将深入探讨Java中实现国际化的必备工具以及相关的编码转换问题。 一、Java中的国际化 1. **资源绑定文件(Properties文件)** 在Java中,我们通常...
此外,还可以考虑使用Spring框架的国际化支持,它可以更方便地集成到大型项目中,提供基于注解的国际化解决方案。Spring的`MessageSource`接口和`@MessageSource`注解可以帮助我们在控制器或服务层直接注入本地化...
Java作为广泛使用的编程语言之一,提供了强大的国际化支持。国际化,通常指软件能够支持多种语言和地区的不同习惯,例如货币、日期时间格式等。Java的国际化官方指南提供了详细的资源和API,帮助开发者为应用程序...
编程语言+JAVAspring+国际化+多语言支持**:这是一个关于JAVAspring编程语言的国际化的多语言支持的资源,适合有一定JAVAspring基础的开发者。它介绍了JAVAspring的国际化的概念、原理和作用,以及如何使用JAVA...
Java国际化(i18n)是Java平台为支持全球不同地区的用户和语言而设计的一种机制。i18n这个名字来源于“internationalization”这个单词,其中'i'是第9个字母,'n'是第14个字母,所以18代表了两者之间的字母数。Java的...
为了更好地支持国际化,Java还提供了`java.text`包,其中包含了`NumberFormat`、`DateFormat`和`ChoiceFormat`等类,用于格式化数字、日期和选择性文本。例如,我们可以使用`SimpleDateFormat`来格式化日期以符合...
总的来说,这个工具包可能提供了一套完整的解决方案,包括Java和本地代码层面的国际化支持,以及使用`gettext`工具进行资源文件管理和翻译的工作流程。对于开发跨语言应用的Java开发者来说,这是一份非常实用的资源...
Java程序的国际化(Internationalization,通常简写为i18n)是使软件能够适应不同语言和文化背景的重要过程。这个教程源码旨在帮助开发者理解并掌握如何在Java应用程序中实现这一功能。以下是对Java程序国际化关键...
在大型项目中,国际化框架如Spring Framework提供了更高级的国际化支持,如MessageSource接口,它可以方便地集成到MVC应用中,处理视图层的国际化问题。 7. **测试与调试** 国际化功能的测试通常需要模拟不同的...
Java 国际化(i18n)是开发支持多种语言和文化环境的应用程序的关键技术。这个过程涉及创建可适应不同地区和语言的资源,如文本、日期、时间和数字格式,以便用户能根据他们的本地设置体验到定制化的界面。下面我们...
接下来,我们要在Struts配置中启用国际化支持。在`struts-config.xml`文件中,添加一个`message-resources`节点,指定我们的资源bundle: ```xml ``` 这里的`parameter`属性值应匹配资源bundle的完全限定类名,...
在Java应用程序中,为了支持不同地区的用户,我们需要提供多语言支持,这就涉及到了国际化和本地化。propedit正是帮助开发者管理和编辑这些资源的一个工具,它使得创建和维护.properties文件变得更为便捷。 ....
Java I18N(国际化)是Java平台提供的一项重要功能,它使得开发的软件能够适应全球不同地区的语言和文化环境。I18N这个术语来源于“Internationalization”,其中“I”和“N”之间有18个字母,因此简称为I18N。Java...
### Java国际化转换详解 #### 一、Java国际化概念与意义 在软件开发过程中,随着产品的全球化,越来越多的应用程序需要支持多种语言环境。这就引出了一个重要的概念——国际化(Internationalization)。通常简称...
Java程序的国际化(i18n)是为了使软件能够适应不同地区的语言和文化习惯,它涉及到日期、时间、数字格式、货币符号、排序规则、文本方向等多方面的处理。本教程将详细介绍Java如何实现这一功能,并提供源码供学习者...
Java 国际化(i18n)是开发支持多语言的应用程序的关键步骤,使得软件能够适应不同国家和地区用户的需求。以下将详细讲解Java中实现国际化涉及的主要知识点: 1. **软件国际化的意义**: - 提高软件的全球适用性,...