侧边栏壁纸
博主头像
coydone博主等级

记录学习,分享生活的个人站点

  • 累计撰写 306 篇文章
  • 累计创建 51 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

程序国际化

coydone
2021-01-24 / 0 评论 / 0 点赞 / 397 阅读 / 2,367 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-05-01,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

程序国际化概述

Internationalization(可以简称为i18n):国际化程序可以这样理解,同一套程序代码可以在各个语言环境下进行使用。

各个语言环境下,只是语言显示的不同,那么具体的程序操作本身都是一样的,那么国际化程序完成的就是这样的一个功能。

Locale类

Locale对象表示了特定的地理、政治和文化地区。需要Locale来执行其任务的操作称为语言环境敏感的操作,它使用Locale为用户量身定制信息。例如,显示一个数值就是语言环境敏感的操作,应该根据用户的国家、地区或文化的风俗/传统来格式化该数值。使用此类中的构造方法来创建Locale:

  • Locale(String language)

  • Locale(String language, String country)

通过静态方法创建Locale:getDefault()

ResourceBundle类

国际化的实现核心在于显示的语言上,通常的做法是将其定义成若干个属性文件(文件后缀是*.properties),属性文件中的格式采用“key=value”的格式进行操作。

ResourceBundle类表示的是一个资源文件的读取操作,所有的资源文件需要使用ResourceBundle进行读取,读取的时候不需要加上文件的后缀。

  • getBundle(String baseName)

  • getBundle(String baseName,Locale locale)

  • getString(String key)

示例

info_en_US.properties

system.name=EMP Manager System
input.username=Input UserName
input.password=Input Password
login.success=Login Success
login.error=Login Error

info_zh_CN.properties

system.name=员工管理系统
input.username=输入用户名
input.password=输入密码
login.success=登录成功
login.error=登录成败
import java.util.Locale;
import java.util.ResourceBundle;

public class Test {
    public static void main(String[] args) {
        //创建一个本地语言环境对象,该对象会根据参数设置来自动选择与之相关的语言环境
        Locale cn = new Locale("zh","CN");
        Locale en = new Locale("en","US");
        //获取当前系统默认的语言环境
        Locale locale = Locale.getDefault();

        //用于绑定属性文件.properties的工具类(参数:全类名+属性文件基本名)
        ResourceBundle r = ResourceBundle.getBundle("com.coydone.info",cn);
        System.out.println(r.getString("system.name"));
        System.out.println(r.getString("input.username"));
        System.out.println(r.getString("input.password"));
        System.out.println(r.getString("login.success"));
        System.out.println(r.getString("login.error"));
    }
}

处理动态文本

前面的示例读取的内容都是固定的,如果现在假设要想打印这样的信息”欢迎你,XXX!”,具体的名字不是固定的,那么就要使用动态文本进行程序的处理。

进行动态的文本处理,必须使用java.text.MessageFormat类完成。这个类是java.text.Format的子类。

system.name=员工管理系统
input.username=输入用户名
input.password=输入密码
login.success=登录成功
login.error=登录成败
welcome=欢迎你,{0}!
import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;

public class Test {
    public static void main(String[] args) {
        //创建一个本地语言环境对象,该对象会根据参数设置来自动选择与之相关的语言环境
        Locale cn = new Locale("zh","CN");

        //用于绑定属性文件.properties的工具类(参数:全类名+属性文件基本名)
        ResourceBundle r = ResourceBundle.getBundle("com.coydone.info",cn);
        String username = r.getString("input.username");
        String welcome = r.getString("welcome");
        //动态文本格式化
        welcome = MessageFormat.format(welcome, username);
        System.out.println(welcome);
    }
}
0

评论区