第六章 Localization
引文
假如我们开发了一个在中文环境下运行的页面,代码如下:
<html>
<head>
<title>欢迎</title>
</head>
<body>
<h1>
欢迎到来!
</h1>
</body>
</html>
之后又假如,有一天我们公司的业务扩展到了日本,和美国,那么我们必须要订制另外的两张不同的页面,代码为:
<html>
<head>
<title>Welcome</title>
</head>
<body>
<h1>
Welcome Here!
</h1>
</body>
</html>
和
<html>
<head>
<title>ようこそ</title>
</head>
<body>
<h1>
ようこそ!
</h1>
</body>
</html>
也许你已经看到了,上述代码只有文字内容不相同,除此之外完全相同。也许你已经猜到了,现实的代码绝对不是这样的。那么是怎么处理的呢?
基本概念
引用
Internationalization and localization are means of adapting products such as publications, hardware or software for non-native environments, especially other nations and cultures.
国际化(internationalization i18n)和本地化(localization l10n)指让产品(出版物,软件,硬件等)能够适应非本地环境,特别是其他的语言和文化。
针对计算机来说就是让一个既可以在中文环境下运行也可以在英语,甚至是日语的环境下运行。
Java中如何实现国际化(仅限语言层面)
Java中国际化通过两步来完成,
第一, 通过将文字内容以特定的方式存放在特定的文件中,
特定的文件:方便管理,另外可以将文件明和特定的语言管理起来
特定的方式:有些时候有些环境不支持某些语言,例如通常英文环境不支持中文,所以要将中文改变为英文可以识别的形式,在使用的时候在转变回来。
第二,在运行时根据当前的语言环境决定从哪个文件中读取文字内容。
第一步,特定的文件,特定的格式
特殊的文件明通过语言和国家来定义,例如:
中文中国 zh_CN
日文日本 ja_JP
英语美国 en_US
Java中国际化的概念是将不同国家的语言描述的相同的东西放在各自对应的属性文件中,
如果这个文件的名字叫做Message,那么对应语言的文件分别为:
中文中国 Message_zh_CN.properties
日文日本 Message_ja_JP.properties
英文美国 Message_en_US.properties
特殊的方式使用替换ascii的方式,java中提供了一个native2ascii.exe的工具(在JAVA_HOME\bin目录下),这个工具专门用来把某种特定的文字内容转变为特殊的格式。
例如Message_zh_CN.properties中的内容为:
Msg1 = 欢迎
Msg2 = 欢迎到这里!
经过命令native2ascii Message_zh_CN.properties之后输出:
Msg1 = \u6b22\u8fce
Msg2 = \u6b22\u8fce\u5230\u8fd9\u91cc\uff01
这里\u6b22等的数字是对应汉字(或者其他非英语字符)的unicode表示
第二步,通过当前的运行环境确定使用的文件的名字
例如存在上述的三个文件:
中文中国 Message_zh_CN.properties
日文日本 Message_ja_JP.properties
英文美国 Message_en_US.properties
可以使用java.util.ResouceBundle 类来取得当前的资源文件,代码为:
ResourceBundle rb = ResourceBundle.getBundle("Message");
也可以指语言与国家特征来获得想要的文件的内容,例如:
ResourceBundle rb = ResourceBundle.getBundle("Message", Locale.JAPAN);
Struts2中如何实现国际化(仅限语言层面)
Struts2中使用国际化的几个方法:
1)UI标签
例如:
<s:i18n name="struts.action.test.i18n.Shop">
<s:text name="main.title"/>
</s:i18n>
从指定资源文件struts.action.test.i18n.Shop中找到main.title对应的消息内容。
<!-- Second Example -->
<s:text name="main.title" />
从对应的文件中找到main.title对应的消息内容。
<!-- Third Examlpe -->
<s:text name="i18n.label.greetings">
<s:param >Mr Smith</s:param>
</s:text>
从对应的文件中找到i18n.label.greetings对应的消息内容,其中的{0}参数将会被Mr Smith替换。
2)ActionSupport的getText方法
例如:<s:text name="%{getText("i18n.label.greetings")}">
或者在Action中直接使用。
在没有指定资源文件的情况下,资源文件的查找按如下的顺序:
1)ActionClass.properties
2)BaseClass.properties
3)Interface.properties
4)ModelDriven’s Model
5)package.properties
6)search up the i18n message key hierarchy itself
7)global resource properties
例如有如下结构:
com/
acme/
package.properties
actions/
package.properties
FooAction.java
FooAction.properties
如果FooAction.properties文件不存在,将使用com/acme/action/package.properties,如果com/acme/action/package.properties文件不存在,将使用com/acme/ package.properties,如果还不存在,将使用com/ package.properties等等。
可以通过getText方法,text标签或者i18n标签来访问资源文件。
可以在struts.properties中通过struts.custom.i18n.resources来指定global的资源绑定。
相关参考I18n Intercepter
关于类型转换的国际化支持参看【第七章 Type Convertion】部分
分享到:
相关推荐
《激光SLAM理论与实践》第六章主要探讨了基于激光雷达的Simultaneous Localization And Mapping(SLAM)技术,这是机器人领域中的一个核心问题。SLAM允许机器人在未知环境中自主定位并构建地图,而C++作为编程语言在...
- **第六章至第八章**:聚焦于局域化现象,讨论其物理机制及在不同领域中的应用。 - **第九章至第十二章**:深入探讨介观现象,包括量子干涉、局域化效应等,并介绍相关的实验技术和理论模型。 #### 七、应用案例 ...
《激光SLAM理论与实践》第二章主要探讨了激光SLAM(Simultaneous Localization And Mapping,同时定位与建图)的基础概念和技术流程。这一章在深入理解SLAM的核心原理上,为后续章节的实践应用奠定了基础。以下是本...
《激光SLAM理论与实践第四章》主要涵盖了激光SLAM(Simultaneous Localization and Mapping,同时定位与建图)技术中的关键概念、算法及其在C++编程中的实现。本章节着重讲解了基于IMLS(Iterative Closest Point ...
《激光SLAM理论与实践第三章》主要涵盖了激光SLAM(Simultaneous Localization and Mapping,同时定位与建图)技术的基础知识,特别是基于C++实现的相关算法和实践应用。SLAM是机器人领域的一个核心问题,它允许无人...
第六章《移动及控制》:这一章主要关注移动机器人的行走控制和导航技术,如轮式机器人或足式机器人的运动控制策略。内容可能涵盖路径规划、避障算法、全局和局部定位,以及SLAM(Simultaneous Localization and ...
本章内容包括底盘的运动学模型、性能指标以及典型搭建方法。 首先,我们来看【底盘运动学模型】。在机器人领域,运动学模型描述了机器人的运动方式。对于两轮差速模型,它是最常见的底盘设计之一。这种模型通过控制...
第六章 roscpp Client Library与roscpp 节点初始、关闭与NodeHandle Topic in roscpp Service in roscpp Param in roscpp 时钟 日志与异常 第七章 rospy Rospy与主要接口 Topic in rospy Service in rospy Param与...
9. **国际化和本地化(Internationalization and Localization)**:对于多语言应用,这两章可能涵盖了如何在PowerBuilder中实现资源文件的管理和语言切换功能。 10. **应用程序框架(Application Frameworks)**:...
《机器视觉》郑东强的课程中,第六章主要探讨了经典的目标检测网络,特别是针对目标检测的关键技术。目标检测不仅需要识别出图像中的物体,还需要确定它们的位置、大小和长宽比,这通常涉及五个参数。传统的全连接...
6. **第六章:多传感器融合**:介绍如何将IMU、激光雷达等传感器数据与视觉信息结合,提升定位精度。 7. **第七章至第十四章**:可能进一步深入SLAM的高级主题,如循环闭合检测、重定位、全局优化、多机器人协作...
在"第五章"中,我们很可能会探讨Eclipse RCP开发过程中的核心概念和技术。 第五章可能涵盖了以下几个关键知识点: 1. **插件体系结构**:Eclipse RCP的基础是其强大的插件系统。每个功能模块作为一个独立的插件...
第六章 roscpp Client Library与roscpp 节点初始、关闭与NodeHandle Topic in roscpp Service in roscpp Param in roscpp 时钟 日志与异常 第七章 rospy Rospy与主要接口 Topic in rospy Service in rospy Param与...
《VC++程序开发范例宝典》第11章涵盖了VC++编程中的多个关键知识点,这些知识点对于理解和掌握C++编程以及MFC(Microsoft Foundation Classes)框架至关重要。本章的源码实例旨在帮助读者深入实践,提升编程技能。...
第6章至第10章,重点在于MFC的高级特性,如动态链接库(DLL)支持、ActiveX控件、数据库访问以及网络编程。这些章节不仅介绍了如何使用MFC进行扩展,还涵盖了与其他应用程序交互的方法,如OLE和COM技术。 第11章至第...
6. ** slam 算法实现**:早期的SLAM方法,如EKF-SLAM和DF-SLAM,会在第六章中被详细介绍。这些算法如何通过滤波器来估计机器人位姿和环境地图,以及如何解决数据关联问题。 7. **闭环检测与后端优化**:在构建地图...
"第12章 典型自主导航系统" 本章节主要介绍了典型自主导航系统的知识点,涵盖了ros-navigation导航系统、riskrrt导航系统、autoware导航系统等多种导航系统的架构、原理和实现细节。 一、ros-navigation导航系统 ...
《激光SLAM理论与实践第一章》是关于机器人定位与建图技术的重要篇章,主要探讨了在现实环境中如何利用激光传感器进行自主导航和环境理解。在这个章节中,我们首先会接触到一个核心概念——“变换”,它是SLAM算法中...
- **第6章:机器人感知**(Robot Perception)讲解了如何处理来自传感器的数据以及如何从中提取有用信息。 2. **定位篇**(Localization): - **第7章:移动机器人定位:马尔科夫与高斯方法**(Mobile Robot ...