JavaWeb之多语言国际化
这周打算把国际化、JDBC和XML学习一下,从下周就开始学习三大框架,再坚持一个半月吧就能入门JavaWeb了,上周周末两天过的真是生不如死,两天坐在家里,醒来就写博客,原本在公司也自己操作了一遍,其实不用写也可以,不过想着为了加深印象,还是自己写出来这样印象更深,基础更扎实,学习编程就和当兵一样,平时多流汗,战时少流血,平时解决的bug多了,那以后遇到类似的就会学会避免出错。还是接着上面的博客留下的坑来说。上一博客jsp标签库中留了几个标签,其中就有今天要学的多语言国际化的。
一、资源国际化、资源本地化
I18N:Internationalization,资源国际化,I10N,Localization,资源本地化,个人的感觉两者没什么区别,可能是主体不一样,国际化是对于开发运营者来说,本地化对于用户来说。
二、资源文件编码
资源文件属性名为properties,保存的是key-value形式的属性对,必须为ASCII字符,由于中文、日文等是采用Unicode字符,所以要对其进行转码。转码可以使用JDK自带的native2ascii.exe工具,位于JDK安装目录的bin文件下,可以使用命令行native2ascii -[options] [inputfile] [outputfile],其中options包括-encoding encoding_name 或reverse.-encoding encoding_name是将文件按照encoding_name指定的格式转化,reverse将编码后的文件还原,encoding可省略,如果指定,一定要与原文件编码方式一致,否则会出现乱码。
先在E:\java文件夹下新建了一个messages.txt的文件,然后写入prompt.hello=您好!。打开命令行输入native2ascii命令,如上图可能会报错,如果报错可能是因为JDK没写入环境变量path中,也可以直接打开jdk的bin文件夹,在其文件夹下使用native2ascii命令,然后会自动输出对应的资源文件。这里我输出的是与源文件文件名一样的,也可以直接输出messages_zh_CN.properties.
prompt.hello=\u60a8\u597d!
三、资源文件的使用
1.不带参数的资源文件
在WebContent/WEB-INF下创建classes文件夹,然后在文件夹下创建resources文件夹,之后把编码过的资源文件引入,由于我没在转码时直接转成带有locale的,所以改名为messages_zh_CN.properties.最后创建一个messages.properties资源文件用于做为默认的资源文件,如果找不到就显示这里面的。
在使用中就要用到上一博客的fmt标签库的标签:<fmt:bundle/><fmt:message/><fmt:setBundle/>
<fmt:bundle basename="resources/messages" prefix="prompt.">
<fmt:message key="hello">
</fmt:message>
</fmt:bundle>
<fmt:bundle/><使用basename指定资源文件,如果资源文件有相同的前缀,可以使用prefix,这里messages资源文件用的prompt.hello,所以prefix="prompt.".
<fmt:message/>:显示资源文件,通过key显示找到对应的value。其实<fmt:message/>还有另外3个属性:var、scope、bundle.
var:声明var属性,message返回的资源就会存储到var变量中而不写到JSP中。
scope:这个不说了,用的地方好多。
bundle:声明被绑定的资源,与setbundle一起使用。
默认的是中文,如果想验证英文,可以在:<fmt:bundle>上增加设置locale.
<fmt:setLocale value="en"/>
2.带参数的资源文件
在上面的是不带参数的资源文件,但在开发过程中往往有一些变量,这样的话就需要带参数的资源文件。
<fmt:bundle basename="resources/messages" prefix="prompt.">
<fmt:message key="hello">
</fmt:message>
<br>
<fmt:message key="info">
<fmt:param value="${pageContext.request.remoteAddr}"></fmt:param>
<fmt:param value="${pageContext.request.locale}"></fmt:param>
<fmt:param value="${pageContext.request.locale.displayLanguage}"></fmt:param>
</fmt:message>
</fmt:bundle>
3.<fmt:setBundle/>标签
<fmt:setBundle/><fmt:bundle/>两者的关系和<fmt:setTimeZone/><fmt:TimeZone/>两个的关系类似。><fmt:bundle/>只作用的标签范围内,<fmt:setBundle/>标签作用在scope范围内。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!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> <fmt:bundle basename="resources/messages" prefix="prompt.">
<fmt:message key="hello">
</fmt:message>
<br>
<fmt:message key="info">
<fmt:param value="${pageContext.request.remoteAddr}"></fmt:param>
<fmt:param value="${pageContext.request.locale}"></fmt:param>
<fmt:param value="${pageContext.request.locale.displayLanguage}"></fmt:param>
</fmt:message>
</fmt:bundle>
<br>
<fmt:setBundle basename="resources/messages" var="resource" scope="request"/>
<fmt:message bundle="${ resource}" key="prompt.hello"></fmt:message>
<fmt:message bundle="${ resource}" key="prompt.info">
<fmt:param>${pageContext.request.remoteAddr}</fmt:param>
<fmt:param value="${pageContext.request.locale}"></fmt:param>
<fmt:param value="${pageContext.request.locale.displayLanguage}"></fmt:param>
</fmt:message>
</body>
</html>
setBundle把资源映射到var="resource"变量中,message利用bundle绑定资源显示。
JavaWeb之多语言国际化的更多相关文章
- Zend_Frameowrk中进行多语言国际化的相关的配置和使用
在使用Zend_Framework建立网站,若网站在以后的使用中面向国际,这时就需要实现网站的多语言国际化问题.使用Zend_Framework开发的网站需要进行多语言的开发时,就需要用到了Zend_ ...
- (三)Qt语言国际化
Vs 2010+ Qt5 实现语言国际化 创建一个工程,cpp代码如下: 1.创建工程 #include "languageinternationalized.h" #includ ...
- i18next-页面层语言国际化js框架介绍
因为工作需要,最近研究了下网站语言国际化的问题,根据当前项目架构,寻求一种较好的解决方案.首先总结下项目中语言切换实现方式大概有以下几种: 1,一种语言一套页面,如:index_CN.html,ind ...
- iOS语言国际化
参考网站:http://blog.sina.com.cn/s/blog_7b9d64af0101jncz.html 语言国际化:根据系统不同的语言自动切换 Xcode6.2 一.在不同语言下工 ...
- 自定义JSP标签实现语言国际化(类似struts text标签),并同时支持图片、JS文件国际化
源代码及样例下载地址: http://download.csdn.net/detail/u014569459/7169385 一.功能说明: 1. 支持语言国际化 2. 支持图片文件.JS文件国际化 ...
- Spring Boot + Freemarker多语言国际化的实现
最近在写一些Web的东西,技术上采用了Spring Boot + Bootstrap + jQuery + Freemarker.过程中查了大量的资料,也感受到了前端技术的分裂,每种东西都有N种实现, ...
- 使用 PySide2 开发 Maya 插件系列三:qt语言国际化(internationalization)
使用 PySide2 开发 Maya 插件系列三:qt语言国际化(internationalization) 前言: 这是 qt for python 的语言国际化,基于 UI 的,python 也有 ...
- Winform下的语言国际化,几行代码轻松实现
最近做了一些关于winform的项目,需要用到winform的语言国际化,在初使化的时候用起来非常方便.可以参考一下: 核心逻辑: 预览效果演示: OK,以下是核心代码和操作流程 一,添加Langua ...
- .NET Core AvaloniaUI实现多语言国际化
AvaloniaUI是一个基于.Net Core的跨平台桌面程序UI框架,如果使用AvaloniaUI有多语言国际化的朋友可以参考我这篇文章: 这篇文章可以帮助你: 根据用户系统设置的语言改变UI显示 ...
随机推荐
- SQL Server-索引故事的遥远由来,原来是这样的?
前言 前段时间工作比较忙,每天回来也时不时去写有关ASP.NET Core的文章,无论是项目当中遇到的也好还是自学的也好都比较严谨的去叙述,喜欢分享,乐于分享这是我一直以来的态度,当然从中也会有些许错 ...
- MATLAB绘制等高线和梯度场
clear;clc;close all [X,Y] = meshgrid(-:.:); % 产生网格数据X和Y Z = X.*exp(-X.^ - Y.^); % 计算网格点处曲面上的Z值 [DX,D ...
- display的none与block(判断登录界面的账号密码是否为空)
判断登录界面的账号密码是否为空的时候又不想用alert显示就需要用display来隐藏alert啦(在设置时切忌要将隐藏的内容写在账号和密码的div中,否则会根据屏幕的分辨率不同而有所变化,这是本人教 ...
- UIApplication 和 Appdelegate-----iOS
正文 一 UIApplication 1.一个UIApplication代表是一个应用程序,而且是单例的.一个程序也只能有一个UIApplication对象 2.获取UIApplication对象: ...
- HTTP状态码理解
100-199 用于指定客户端应相应的某些动作. 200-299 用于表示请求成功. 300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息. 400-499 用于指出客户端的错 ...
- JavaScript中国象棋程序(1) - 界面设计
"JavaScript中国象棋程序" 这一系列教程将带你从头使用JavaScript编写一个中国象棋程序.这是教程的第1节. 这一系列共有9个部分: 0.JavaScript中国象 ...
- mysql数据库封装和 分页查询
1 之前我们学到了php连接mysql数据库的增删改查,中间要多次调用数据库, 而且以后用到的表比较多,上传中如果需要改数据的话会非常麻烦,但是如果 我们把数据库封装,到时就可以很轻松的把改掉一些数据 ...
- 微信内置浏览器私有接口WinXinJsBridge介绍
关于微信内置浏览器私有接口WeiXinJsBridge,只是之前接触过的一个微信公众号项目中遇到过,不过并没有深入研究过,可以说并没有了解过... 刚好今天无意中看到了这方面的知识,就补习一下,弥补一 ...
- hibernate切换数据源
起因: 公司的当前产品,主要是两个项目集成的,一个是java项目,还有一个是php项目,两个项目用的是不同的数据源,但都是mysql数据库,因为java这边的开发工作已经基本完成了,而php那边任务还 ...
- 谈JavaScript的继承
最近在忙前端的工作,因为之前做.net和php的开发比较多,前端开发喜欢把库拿来就用,几次事实证明,不懂原理,连改代码也改不好,所以还是下定决心研究下JavaScript的几个技术难点. 0x1.Ja ...