zoukankan      html  css  js  c++  java
  • Java 国际化

    国际化是指应用程序运行时,可根据客户端OS的国家/地区、语言的不同而显示不同的界面,比如客户端OS的语言环境为大陆的简体中文,程序就显示为简体中文,客户端OS的语言环境为美国——英语,程序就显示美式英语。

    OS的语言环境可在控制面板中手动设置。

    国际化的英文单词是Internationalization,单词较长,通常简称I18N,I是第一个字母,18表示中间省略了18个字母,N是最后一个字母。

    实现国际化的思路:

    标签、提示等字符串信息放在资源文件中,一个语言环境对应一个资源文件(一套)。资源文件中存储键值对,每个资源文件的key都相同,value则随语言环境的改变而改变。key是程序使用的部分,value是GUI要显示的字符串。

    资源文件的命名方式:

    baseName.properties   用于单个资源文件

    baseName_language.properties   

    baseName_language_country.properties    国际化一般用这种命名方式

    语言代码是特定,常用:zh  中文,en   英文

    国家代码也是特定的,常用:CN  中国,US  美国,JP   日本

    国际化示例:

    1、在IDEA -> File -> Settings -> Editor -> file Encodings -> 设置Properties Files的编码方式为utf-8,默认为GBK。(也可使用其它方式,只要.properties文件的编码字符集是utf-8即可)

    2、对src单击右键,新建一个mess_zh_CN.properties文件,输入:

    1 hello=你好!

    以  key=value 形式输入,一行一个键值对,默认就是字符串,不用加引号。

    .properties文件中可以写注释:#注释内容

    3、对src单击右键,新建一个mess_en_US.properties文件(baseName要相同),输入:

    1 hello=hello!

    两个资源文件的key要一一对应(相同)。

    4、在.java文件中使用:

     1 package test;
     2 
     3 import java.util.Locale;
     4 import java.util.ResourceBundle;
     5 
     6 public class Test{
     7        public static void main(String[] args){
     8               //获取OS使用的语言环境
     9               Locale locale=Locale.getDefault();
    10               //根据指定的语言环境加载对应的资源文件。第一个参数是字符串,指定资源文件的baseName,第二个参数指定Locale(语言环境)。可缺省第二个参数(默认就是OS的当前/默认语言环境)
    11               ResourceBundle bundle=ResourceBundle.getBundle("mess",locale);
    12               //通过key获取已加载资源的value,参数为key
    13               System.out.println(bundle.getString("hello"));
    14        }
    15 }

    如果OS的语言环境为简体中文,则输出  你好!

    如果OS的语言环境为美式英语,则输出  hello!

    如果资源文件中要使用动态内容,比如输出当前的日期时间,则可在资源文件中使用占位符,在读取时向占位符赋值。

    示例:

    1、对src右键单击,新建一个资源文件msg.properties,输入:

    1 msg={0},你好!现在是{1}。

    2、要使用时向占位符赋值:

     1 package test;
     2 
     3 import java.text.MessageFormat;
     4 import java.util.Date;
     5 import java.util.ResourceBundle;
     6 
     7 public class Test{
     8        public static void main(String[] args){
     9               //加载指定资源文件
    10               ResourceBundle bundle=ResourceBundle.getBundle("mess");
    11               //获取指定value,返回字符串(带有占位符)
    12               String msg=bundle.getString("hello");
    13               //使用MessageFormat类的静态方法format(String str,Object... args)向占位符赋值。
    14               // 第一个参数是带占位符的字符串,后面的参数对应占位符,是Object类型即可。返回赋值后的字符串。
    15               String str=MessageFormat.format(msg,"Mike",new Date());
    16               System.out.println(str);
    17        }
    18 }
  • 相关阅读:
    List
    集合
    layui树状组件tree回显如果子节点选中,当前主节点下所有元素都会选中问题修复
    layui富文本编辑器提交时无法获取到值
    thinkphp6+layui富文本编辑器页面回显显示HTML标签
    layui获取树形菜单所有选中的值
    php7将二维数组转为树状数组
    jq处理img标签找不到图片,显示指定图片
    thinkphp6根据访问设备不同访问不同模块
    layui怎么进入页面监听select的值然后重新渲染页面
  • 原文地址:https://www.cnblogs.com/chy18883701161/p/10859978.html
Copyright © 2011-2022 走看看