JavaWeb开发——软件国际化(文本元素国际化)

前几天围绕着JDBC编程进行了系统的学习。现在我们对Java程序数据库操作已经是轻车熟路了。也学会了使用各种框架来帮助我们简化编程。
今天是学习计划的第七天,虽然学习热情没有前几天高涨了。但是,写博客总结的习惯应该要坚持下去。废话不多说了。
今天的学习内容是JavaWeb开发——软件国际化。

软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的、符合来访者阅读习惯的页面或数据。
国际化又称为 i18n:internationalization。
通俗一点就是说,一套软件提供多套不同的界面,根据来访者的国家和语言的不同,从而显示对应的界面。

其实JDK就实现了软件国际化,在dos窗口输入javac命令,dos窗口就会弹出中文信息。而当你改变你电脑的语言为英文,再次到dos窗口输入javac命令,dos窗口弹出的就是英文信息了。

软件实现国际化,需具备哪些特征:

  • 对于程序中固定使用的文本元素,例如菜单栏、导航条等中使用的文本元素、或错误提示信息,状态信息等,需要根据来访者的地区和国家,选择不同语言的文本为之服务。
  • 对于程序动态产生的数据,例如(日期,货币等),软件应能根据当前所在的国家或地区的文化习惯进行显示。

我们先看第一个特征

固定文本元素的国际化

  • 对于软件中的菜单栏、导航条、错误提示信息,状态信息等这些固定不变的文本信息,可以把它们写在一个properties文件中,并根据不同的国家编写不同的properties文件。这一组properties文件称之为一个资源包。
  • 在JavaAPI中提供了一个ResourceBundle 类用于描述一个资源包,并且 ResourceBundle类提供了相应的方法getBundle,这个方法可以根据来访者的国家地区自动获取与之对应的资源文件予以显示。
创建资源包和资源文件的一些注意事项
  • 一个资源包中的每个资源文件都必须拥有共同的基名。除了基名,每个资源文件的名称中还必须有标识其本地信息的附加部分。例如:一个资源包的基名是“myproperties”,则与中文、英文环境相对应的资源文件名则为:"myproperites_zh.properties" "myproperites_en.properties"。
  • 每个资源包都应有一个默认资源文件,这个文件不带有标识本地信息的附加部分。若ResourceBundle对象在资源包中找不到与用户匹配的资源文件,它将选择该资源包中与用户最相近的资源文件,如果再找不到,则使用默认资源文件。例如myproperites.properties。

贴上一张语言和国家代码

语言代码 说明 | 国家代码 说明
De German | CN China
es Spanish | CA Canada
En English DE Germany
Fr French FR France
Ja Japanese 线 IN India
Jw Javanese | US United State
ko Korean |
Zh Chinese |

有了这张表以后,就可以通过对照该表来编写适合各个国家语言的资源文件。
资源文件的命名规则为:基名_语言_国家.properties,这里的国家是可以省略的。
例如:myproperties_zh_CN.properties 代表中国,一般国家代码大写,语言代码小写。
myproperties_en_US.properties 代表美国 。

资源包的文件一般建立在src目录下。
演示一下。
新建web项目,名为day07。
在src目录下新建三个配置文件,分别为myproperties.properties、myproperties_zh_CN.properties、myproperties_en_US.properties。
在myproperties.properties文件下编写name = default
在myproperties_zh_CN.properties文件下编写name = 张三
在myproperties_en_US.properties文件下编写name = mary
有些同学会发现编写 name = 张三 的配置文件无法保存,因为配置文件是不能保存中文的。顺便科普一下资源文件的书写格式。

  • 资源文件的内容通常采用“关键字=值”的形式,软件根据关键字检索值显示在页面上。一个资源包中的所有资源文件的关键字必须相同,值则为相应国家的文字。
  • 并且资源文件中采用的是properties格式文件,所以文件中的所有字符都必须是ASCII字码,对于像中文这样的非ACSII字符,须先进行编码。(java提供了一个native2ascII命令用于编码)。

所以如果想在配置文件中保存中文,就得先把中文转成Unicode,那如何转换呢?
我们可以先打开一个dos窗口,然后在窗口中输入native2ascii,回车后dos窗口会等待用户输入,此时你可以输入要转换的中文信息,比如输入张三,窗口就会显示出对应的Unicode编码。

现在将几个中文汉字进行Unicode编码我们已经能够实现了,但是如果有大量的中文数据需要批量转换应该怎么办呢?
在桌面上创建一个a.properties文件,然后输入
name = 张三
city = 北京
我们的目的是将该文件的所有内容转成Unicode编码。
打开dos窗口,将路径切换到你的文件目录,也就是切换到桌面目录,然后输入

native2ascii a.properties b.properties

第一个文件为要转码的文件,第二个文件为生成的Unicode编码文件。

回到桌面,发现多了一个b.properties文件,打开一看,两个中文信息已经被转换成了Unicode编码了。
用这个小工具就能够轻松实现中文转Unicode编码问题。
好像有点偏离主题了。哈哈,请原谅我这颗爱分享的心。

咳咳,继续今天的内容哈。
有了配置文件之后,我们就应该读取文件了。
新建测试类,编写测试代码

    @Test
    public void demo1(){
        //使用ResourceBundle读取配置文件,不设置国家
        ResourceBundle bundle = ResourceBundle.getBundle("myproperties");

        //默认根据系统语言选择配置文件
        System.out.println(bundle.getString("name"));
    }

运行代码

说明运行的是中文信息的配置文件。

在Java中存在这样一个类,Locale类,它代表了国家和语言。它有什么作用呢?
通过案例感受一下。
编写测试代码

    @Test
    public void demo2(){
        //读取文件时,设置国家
        Locale locale = new Locale("en","US");//指定国家为美国
        ResourceBundle bundle = ResourceBundle.getBundle("myproperties",locale);

        System.out.println(bundle.getString("name"));
    }

运行代码

说明运行的是英文信息的配置文件。Locale类的作用应该一目了然吧。
这里有一个优先级的问题,就是设置Locale类的优先级是最高的,你设置的是哪个国家和语言,运行的就是哪个语言的配置文件,其次是系统国家设置,最后是默认的。

基础知识就介绍完毕了,接下来我们来编写一个登录案例加深一下理解。
新建login.jsp文件

<%@page import="java.util.ResourceBundle"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
    <%
        ResourceBundle bundle = ResourceBundle.getBundle("myproperties");
    %>
    <h1><%=bundle.getString("forminfo") %></h1>
    <form>
        <%=bundle.getString("username") %><input type="text" name="username" /><br />
        <%=bundle.getString("password") %><input type="password" name="password" /><br />
        <input type="submit" value="<%=bundle.getString("submit") %>" />
    </form>
</body>
</html>

现在,对jsp的文本元素进行国际化。
分别修改配置文件,首先修改myproperties.properties文件

forminfo = default Login Form
username = default Username
password = default Password
submit = default Submit

然后修改myproperties_en_US.properties文件

forminfo = Login Form
username = Username
password = Password
submit = Submit

最后修改myproperties_zh_CN.properties文件

forminfo = \u767B\u5F55\u8868\u5355
username = \u7528\u6237\u540D
password = \u5BC6\u7801
submit = \u63D0\u4EA4

将项目部署运行

因为我们没有指定国家,所以应该以系统默认为准,显示的是中文信息。
现在我们手动指定一下国家。
将login.jsp文件修改一下

ResourceBundle bundle = ResourceBundle.getBundle("myproperties",Locale.US);

只需要将创建ResourceBundle对象的代码作如上修改即可,在Locale类中定义了各种与国家对应的常量,所以我们直接可以在构建ResourceBundle对象时将Locale类的字段传入即可。
现在重新运行一下程序。

上面已经说过了,Locale类设置的国家优先级是最高的,所以显示了英文信息。
上面的代码大量使用使用了<%=%>,不仅麻烦,而且不美观,我们可以使用JSTL去显示数据。
修改login.jsp文件

<%@page import="java.util.Locale"%>
<%@page import="java.util.ResourceBundle"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%--引入国际化标签库--%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

<html>
<head>
<title>Insert title here</title>
</head>
<body>
    <%
        ResourceBundle bundle = ResourceBundle.getBundle("myproperties",Locale.US);
    %>
    <h1><%=bundle.getString("forminfo") %></h1>
    <form>
        <%=bundle.getString("username") %><input type="text" name="username" /><br />
        <%=bundle.getString("password") %><input type="password" name="password" /><br />
        <input type="submit" value="<%=bundle.getString("submit") %>" />
    </form>

    <hr/>

    <fmt:setLocale value="zh_CN"/>
    <fmt:setBundle basename="myproperties" var="bundle" scope="page"/>
    <h1><fmt:message key="forminfo" bundle="${bundle }"/></h1>
    <form>
        <fmt:message key="username" bundle="${bundle }"/><input type="text" name="username" /><br />
        <fmt:message key="password" bundle="${bundle }"/><input type="password" name="password" /><br />
        <input type="submit" value="<fmt:message key="submit" bundle="${bundle }"/>" />
    </form>
</body>
</html>

运行项目

同样成功实现了效果,但是代码看起来就会比第一种实现方式简洁、舒服。

因为篇幅有限,软件国际化的内容在一篇博客中讲完是不太现实的,这一部分的内容我就大概分三个部分去讲解,所以这是一个系列,就分为

  • 文本元素国际化
  • 动态数据国际化
  • 动态文本国际化

这三个部分吧。大家阅读的时候可以按从上往下的顺序阅读。

原文地址:https://www.cnblogs.com/blizzawang/p/11411797.html

时间: 2024-10-11 03:42:56

JavaWeb开发——软件国际化(文本元素国际化)的相关文章

JavaWeb开发——软件国际化(动态元素国际化)

软件国际化的第二个部分,就是动态元素国际化. 数值,货币,时间,日期等数据由于可能在程序运行时动态产生,所以无法像文字一样简单地将它们从应用程序中分离出来,而是需要特殊处理.Java 中提供了解决这些问题的 API 类(位于 java.util 包和 java.text 包中). Locale 类 Locale 实例对象代表一个特定的地理,政治.文化区域. 一个 Locale 对象本身不会验证它代表的语言和国家地区信息是否正确,只是向本地敏感的类提供国家地区信息,与国际化相关的格式化和解析任务由

IOS开发之国际化篇第二章:文本信息国际化

本文是以XCode7.2.1为开发平台 在第一章中,我们基本了解了国际化是怎么一会事,介绍到有3种国际化,接下来的几章就会分别介绍这3种国际化,第一个是文本信息国际化 文本信息国际化包含一下几点 系统按钮和信息国际化 应用名称国际化 程序代码中输出的静态文本国际化 -系统按钮和信息国际化 系统本身会自带一些系统的信息,系统按钮等,这一些系统自带的信息提示,按钮文本都是由Cocoa本身自带的,他们都是统一又系统管理,例如Done在英文环境中是Done,还有系统提示信息,如下图,在不同语言环境系统会

Android国际化-图片国际化和文本字符国际化

注意: 1.是在res目录下面,新建文件夹 2.需要国际化的文本资源和图片资源名称是一样的 图片国际化 默认:drawable-xhdpi 中文简体:drawable-zh-rCN-xhdpi(或者不写) 韩文:drawable-ko-rKR-xhdpi 越南语:drawable-vi-rVN-xhdpi 繁体:drawable-zh-rTW-xhdpi 文本资源国际化 中文(中国):values-zh-rCN中文(台湾):values-zh-rTW中文(香港):values-zh-rHK英语(

[开发总结]富文本前端框架对比分析

[排序不分先后,只是标记数量] 1. 如果你想直接引入,完全不定制,扔进项目就直接用 CKEditor TinyMCE Froala Quill Summernote(框架不太友善) Trix 2. 想有非常高度的定制 可以看看 Slate.js,它基于 React.js. 用了 Slate.js 的知名产品有 Taskade,Taskade 的编辑器非常漂亮而且格式很多. 如果想开发和 Taskade 一样的编辑器,我觉得用如上里任何一个现成编辑器都是很难开发出来的(甚至不可能,因为要改动那么

办公管理支撑流程能力PaaS平台运维开发软件需求设计方案

1.概述 办公管理支撑流程能力PaaS平台(以下文中简称"能力平台")运维开发是指基于Cordys BOP 4 PaaS平台,通过二次开发,为运维开发人员提供快速支撑办公管理流程开发.实施.再造的能力,也为管理流程全生命周期管理提供数据支撑能力.管理目标及软件需求如下: (1)开发/运维人员 开发/运维人员是指系统平台管理人员.运维人员,例如:省公司与地市公司信息化系统管理员.开发/运维人员为专业信息化管理员,都是受过专业计算机教育,懂计算机软件维护.开发,但是,不是专业程序员,也就是

李兴华JavaWeb开发笔记

李兴华JavaWeb开发笔记 1.Java语法-基础 环境变量-JAVA_HOME, PATH, ClassPath 变量名 作用 举例 JAVA_HOME 指向JDK目录 C:\Program Files\Java\jdk1.7.0_21 PATH 指向java.exe目录. %JAVA_HOME%\bin; %JAVA_HOME%\jre\bin CLASSPATH 执行.jar文件.zip文件..class文件所在目录. (程序要用到哪些.class文件,) %JAVA_HOME%\lib

基于IDEA的JavaWeb开发环境搭建

基于IDEA的JavaWeb开发环境搭建 基于IDEA的JavaWeb开发环境搭建 jdk下载安装配置环境变量 下载 安装 配置环境变量 下载安装激活使用IntelliJ IDEA 下载 安装 激活 1文本编辑器首先打开hosts文件在最下面一行添加如下地址 2从lan yu获取最新激活码 3在激活页面输入激活码 使用 1创建普通Java工程 2创建Web工程 下载安装配置Tomcat 下载 安装 配置 配置Tomcat环境变量 IDEA工程配置Tomcat 常见问题 Tomcat端口被占用 I

使用Eclipse搭建JavaWeb开发环境的几个基本问题

Eclipse搭建JavaWeb开发环境 eclipse是一个用于java程序开发的ide软件,tomcat是一个运行javaweb应用的服务器软件,使用eclipse开发javaweb应用的时,首要要把tomcat集成到eclipse中,并且对eclipse做一点简单的设置. 1.安装jdk.安装eclipse.安装tomcat等 ================================ 省略了. 2.eclipse基本设置 ================ 2.1 设置eclipse

JavaWeb学习总结(一)JavaWeb开发入门

静态网页和动态网页 静态网页:在服务器上没有经过服务器解释执行的网页. 动态网页:在服务器上经过服务器解释执行的网页. 无论是静态网页还是动态网页,客户端看到的网页都是由HTML所构成的,所以JavaWeb开发需要懂HTML. Servlet和Servlet容器 Servlet:是一些实现了特定接口的Java类的集合. Servlet容器是JSP/Servlet代码运行的地方,是管理JSP/Servlet的地方. 其实Servlet容器就是一个服务器软件,比如Tomcat. HTTP协议 浏览器