i18n(其来源是英文单词internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称。对程序来说,在不修改内部代码的情况下,能根据不同语言及地区显示相应的界面。

这就要求,仅仅是页面语言的翻译是不够的,即便在一个国家在不同地区都可能会存在不同习惯方言操作习惯等等(例如我们国家搜索结果习惯左对齐,但是有的国家就习惯右对齐),这就导致了“本地化”(L10n)机制的出现。

国际化和本地化的出现,在语言、文化、书写习惯、阅读习惯、符合当地主题的全面配置,使得一个Web应用程序在运行时能够根据客户端请求所来自的国家和语言显示不同的用户界面。

【示例】

根据以上简介和查看的具体软件的配置,理解一下i18n吧,所以小编查看了一下QQ的i18n配置文件,如下:

<?xml version="1.0" encoding="utf-8" ?>
<i18n><!-- 默认的语言,以主程序的优?--><locale id="2052" /><!-- 语言文字列表 --><StringBundle><configfile name="GFStringBundle.xml"/>       <configfile name="StringBundle.xml"/><configfile name="UrlBundle.xml"/></StringBundle><!-- 地区信息,目前只需要一?--><Location2><configfile name="LocList.xml"/></Location2><LangList><configfile name="LangList.xml"/></LangList>
</i18n>

又查看了一下要读取的LangList.xml文件,很壮观,如下:

<?xml version="1.0" encoding="utf-8"?>
<Languages><Language LCID="1078" Name="南非荷兰语" Code="af"/><Language LCID="1052" Name="阿尔巴尼亚语" Code="sq"/><Language LCID="1025" Name="阿拉伯语" Code="ar"/><Language LCID="1067" Name="亚美尼亚语" Code="hy"/><Language LCID="2092" Name="阿塞拜疆语" Code="az"/><Language LCID="1059" Name="白俄罗斯语" Code="be"/><Language LCID="5146" Name="波斯尼亚语" Code="bs-ba"/><Language LCID="1026" Name="保加利亚语" Code="bg"/><Language LCID="1109" Name="缅甸语" Code="my"/><Language LCID="3076" Name="中文(繁体)" Code="zh-hk"/><Language LCID="1027" Name="加泰罗尼亚语" Code="ca"/><Language LCID="1050" Name="克罗地亚语" Code="hr"/><Language LCID="1029" Name="捷克语" Code="cs"/><Language LCID="1030" Name="丹麦语" Code="da"/><Language LCID="1043" Name="荷兰语" Code="nl"/><Language LCID="1033" Name="英语" Code="en-us"/><Language LCID="1061" Name="爱沙尼亚语" Code="et"/><Language LCID="1065" Name="波斯语" Code="fa"/><Language LCID="1035" Name="芬兰语" Code="fi"/><Language LCID="1036" Name="法语" Code="fr"/><Language LCID="2108" Name="盖尔语" Code="gd"/><Language LCID="1031" Name="德语" Code="de"/><Language LCID="1032" Name="希腊语" Code="el"/><Language LCID="1095" Name="古吉拉特语" Code="gu"/><Language LCID="1037" Name="希伯来语" Code="he"/><Language LCID="1081" Name="印地语" Code="hi"/><Language LCID="1038" Name="匈牙利语" Code="hu"/><Language LCID="1039" Name="冰岛语" Code="is"/><Language LCID="1057" Name="印度尼西亚语" Code="id"/><Language LCID="1040" Name="意大利语" Code="it"/><Language LCID="1041" Name="日语" Code="ja"/><Language LCID="1107" Name="高棉语" Code="km"/><Language LCID="1042" Name="朝鲜语" Code="ko"/><Language LCID="1108" Name="老挝语" Code="lo"/><Language LCID="1062" Name="拉脱维亚语" Code="lv"/><Language LCID="1063" Name="立陶宛语" Code="lt"/><Language LCID="1071" Name="马其顿语" Code="mk"/><Language LCID="1086" Name="马来西亚语" Code="ms"/><Language LCID="2052" Name="中文(简体)" Code="zh-cn"/><Language LCID="1104" Name="蒙古语" Code="mn"/><Language LCID="1044" Name="挪威语" Code="no"/><Language LCID="1045" Name="波兰语" Code="pl"/><Language LCID="2070" Name="葡萄牙语" Code="pt"/><Language LCID="1094" Name="旁遮普语" Code="pa"/><Language LCID="1048" Name="罗马尼亚语" Code="ro"/><Language LCID="1049" Name="俄语" Code="ru"/><Language LCID="3098" Name="塞尔维亚语" Code="sr"/><Language LCID="1113" Name="信德语" Code="sd"/><Language LCID="1051" Name="斯洛伐克语" Code="sk"/><Language LCID="1060" Name="斯洛文尼亚语" Code="sl"/><Language LCID="1143" Name="索马里语" Code="so"/><Language LCID="1034" Name="西班牙语" Code="es"/><Language LCID="1089" Name="斯瓦西里语" Code="sw"/><Language LCID="1053" Name="瑞典语" Code="sv"/><Language LCID="1097" Name="泰米尔语" Code="ta"/><Language LCID="1092" Name="鞑靼语" Code="tt"/><Language LCID="1054" Name="泰语" Code="th"/><Language LCID="1055" Name="土耳其语" Code="tr"/><Language LCID="1058" Name="乌克兰语" Code="uk"/><Language LCID="1056" Name="乌尔都语" Code="ur"/><Language LCID="1066" Name="越南语" Code="vi"/><Language LCID="1106" Name="威尔士语" Code="cy-gb"/><Language LCID="1085" Name="意第绪语" Code="yi"/><Language LCID="1130" Name="约鲁巴语" Code="yo"/>
</Languages>

【实践】

1.locale方法

Java.Util中有一个locale方法,该方法的其中一个构造方法为:

Locale(Stringlanguage,String country):根据语言和国家构造一个语言环境。每个国家都有一个locale信息,通过对象可以取得locale信息,locale信息来源于操作系统。如下:

package com.bjpowernode.i18n;import java.util.Locale;public class I18nSample {public static void main(String[] args) {Locale defaultLocale = Locale.getDefault();System.out.println("country=" + defaultLocale.getCountry());System.out.println("language=" + defaultLocale.getLanguage());}
}

运行结果为:

country=CN

language=zh

但是在我们下面的实践中,为了方便我们就直接进行设置了。

2.ResourceBundle资源包

我们需要将硬编码文本转移到外部的资源文件,对资源文件的命名必须使用一定的规则,一般是以“统一字符+locale信息”命名,如MessagesBundle_zh_CN.properties,MessagesBundle_en_US.properties。准备资源包的过程,就是把对应不同语言的用户所涉及的文本和图片保存在多个文本文件中,客户端根据不同的环境需要进行更换。这些文件被称为“属性文件”,所有属性文件合在一起被称为资源包(ResourceBundle)。

因为资源文件必须是Latin-1后者Unicode编码的字符,所以实践过程中,准备英文好说,准备中文的话,需要使用相应的Unicode编码,使用jdk自带的native2ascii.exe,将中文资源文件进行转换,如下:

也可以直接在资源文件中添加,会自动转换成Unicode编码,如下:

结果如下:

Demo中我们中文和英文准备的都是:k1=你好/hello,k2=再见/goodbye。

【实践代码】

package com.bjpowernode.i18n;import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;public class I18nSample {public static void main(String[] args) {// 为了实验,就不每次都修改操作系统的语言了,直接设置locale信息// Locale currentLocale = new Locale("zh", "CN");Locale currentLocale = new Locale("en", "US");System.out.println("country=" + currentLocale.getCountry());System.out.println("language=" + currentLocale.getLanguage());// 根据locale信息寻找相应的资源包中的配置ResourceBundle rb = ResourceBundle.getBundle("com.bjpowernode.resources.MessagesBundle", currentLocale);System.out.println(rb.getString("k1"));System.out.println(rb.getString("k2"));// 在配置文件中用占位符来加入自定义设置,如登陆时显示:你好,***MessageFormat mf = new MessageFormat(rb.getString("k1"));System.out.println(mf.format(new Object[] { "张三" }));}
}

运行结果为:

country=US

language=en

hello,{0}

good bye

hello,张三

【Java】I18N国际化相关推荐

  1. java i18n 国际化_springboot-i18n国际化

    简介 术语 i18n internationalization 英 [ˌɪntəˌnæʃnəlaɪ'zeɪʃn] ,国际化. 由于首字母"i"和末尾字母"n"间 ...

  2. Java i18n - Java中的国际化

    Java i18n - Java中的国际化 Java或Java i18n的国际化是一个非常重要的特性.Java通过资源包提供国际化(i18n)支持. Java的国际化 为了使您的应用程序支持不同的语言 ...

  3. java i18n_Java i18n – Java的国际化

    java i18n Internationalization in Java or Java i18n is a very important feature. Java provides inter ...

  4. Java 对国际化 (i18n) 的支持资源包的调用

    Java 国际化 i18n 国际化信息也成为本地化信息,一般需要2个条件才能确定一个特定的国际化信息,分别是:"语言类型" 和 "国家/地区信息",Java 为 ...

  5. Web---JSTL(Java标准标签库)-Core核心标签库、I18N国际化、函数库

    前面为JSTL中的常用EL函数,后面的为具体演示实例! JSTL简介: JSTL(Java Standard Tag Library) –Java标准标签库. SUN公司制定的一套标准标签库的规范. ...

  6. java国际化程序创建属性文件,Java程序国际化学习代码一

    Java程序国际化初识 1.基本思路 Java程序的国际化的思路是将程序中的标签.提示等信息放在资源文件中,程序需要支持哪些国家.语言环境,就对应提供相应的资源文件.资源文件是key-value对,每 ...

  7. Spring进行 i18n国际化配置

    (本项目是基于Dubbo的,所以会有后端服务和前端Controller两次国际化的配置) 对后端服务的异常代码进行国际化版本的配置 1.在provider的resources中新建一个properti ...

  8. Java的国际化与本地化

    Java 的 i18n 问题,即 Java 的 Internationalization 问题,指的是如何使应用程序能够同时支持多种语言的问题.对我国这样的非英语国家而汉字又有多种编码方式的情况下具有 ...

  9. springboot配置i18n国际化

    springboot实现i18n国际化,无需引入其他jar包,springboot已经内置了,只需要配置即可. 国际化主要是根据不同的国际语言来决定返回数据的语言. 添加properties文件,作为 ...

  10. Springboot + i18n国际化

    在网上找了很多后端国际化的资料,总是不适合自己.因为脑袋本能的就会取拒绝吸收知识,其实认真看理解思路i18n国际化其实很简单. 那么先简单上手一下 1.首先在resources创建i18n的文件夹,文 ...

最新文章

  1. 广东电大计算机绘图试题,电大计算机绘图期末复习试题及答案参考小抄.doc
  2. Java SSH 资料总结
  3. 在Ext JS 6中添加本地化包
  4. C语言的10大基础算法
  5. 我的log4net使用手册(转自 http://blog.csdn.net/lyjcn/archive/2009/08/11/4432833.aspx)
  6. Gamma 分布与 Beta 分布及共轭的含义
  7. python画散点图-python画时间序列散点图
  8. 算法7:求用小矩形覆盖大矩形有多少种方式
  9. Java集合分页公式
  10. 华为手机备份的通讯录是什么文件_华为手机的联系人在哪个文件夹里?
  11. 橡胶软接头的安装及使用说明
  12. 为什么计算机无法访问u盘,打开U盘后为什么提示拒绝访问 打开U盘后提示拒绝访问原因...
  13. 蓝湖(切图工具)插件的安装和使用
  14. 巴拿赫空间的基本性质
  15. WebStorm快捷键及配置
  16. Redis——Redis持久化
  17. 高端游戏计算机外形规格,【戴尔G5游戏笔记本电脑外观展示】接口|尺寸|键盘|触摸板_摘要频道_什么值得买...
  18. 粉丝经济大爆发居然真的来了
  19. 作为一名视觉工程师该怎么学习?
  20. 新绝代双骄3终极全攻略5

热门文章

  1. 新诛仙手游服务器维护,【正式服】3月29日例行更新维护公告
  2. 冲出软件Bug的泥潭
  3. 网址格式化:截取域名
  4. 乔布斯计算机科学,科学网-“计算机科学是一门‘文科’” - 乔布斯-柳渝的博文...
  5. 关于黑马手机卫士的学习总结
  6. 关于计算机经历兼职的英文作文,关于兼职的英语作文 The Part Time Job
  7. PBR-Diffuse-Lighting-for-GGX
  8. Cognex.VisionPro.QuickBuild命名空间下的一些委托方法
  9. 2020年美容师(中级)模拟考试及美容师(中级)考试软件
  10. 2008七款免费杀毒软件权威推荐