• [Java] 国际化


    背景

    • 一个程序可以被不同国家的用户同时使用,可极大降低程序的开发及维护成本
    • Google、Youtube、Facebook、Twitter、Ins
    • 首先确定项目中核心结构,及所处的行业背景,核心业务完成后再考虑国际化
    • 语言文字不放在代码中,放在配置文件中
    • 用户根据自身情况选择相应配置文件,根据用户动态实现语言文字的切换
    • 需要将不同国家不同的文字配置信息,在程序运行时通过配置文件加载相关的数据
    • 如何动态获取当前用户所处的国家及语言

     Locale类

    • java.util.Locale:可进行国家及语切换的控制类
      • public static final Locale CHINA:中国区域
      • public static final Locale US:美国区域
      • public Locale ( String language, String country ):设置语言及城市
      • public static Locale getDefault():获取当前系统所处环境
      • 实例化Locale类对象,需要有语言及城市编码
      • IE > 工具 > Internet选项 > 外观 > 语言 > 设置语言首选项 > 添加语言(win7前) 

    获取区域和语言码

    1 public class Locale_Demo {
    2     public static void main(String[] args) {
    3         Locale loc = Locale.CHINA;
    4         System.out.println(loc);
    5     }
    6 }
    View Code

    指定区域和语言

    1 public class Locale_Demo {
    2     public static void main(String[] args) {
    3         Locale loc = new Locale("zh","CN");
    4         System.out.println(loc);
    5     }
    6 }
    View Code

    获取当前默认区域和语言

    1 public class Locale_Demo {
    2     public static void main(String[] args) {
    3         Locale loc = Locale.getDefault();
    4         System.out.println(loc);
    5     }
    6 }
    View Code

    ResourceBundle类

    • Locale 实现定位,资源文件实现文字信息的存储
    • 国际化文字保存在属性文件(或称资源文件)中
      • 属性文件(或称资源文件)必须保存在“*.properties”后缀的文件中
      • 资源文件进行保存时按照类的形式存储,放在CLASSPATH中(考虑包的问题)
      • 资源文件进行定位时,所有内容采用“key=value”的形式声明
      • 资源文件中注释用“#”开头
      • 资源文件放在CLASSPATH可识别的目录中,同时可设置包名称
      • Eclipse中资源文件显示中文,JDK 1.8 以前需进行转码处理,需要单独配置额外插件(JDK 1.9 以后默认UTF-8)
      • IDEA可使用UTF-8编码
      • 等号前后不加空格
    • 资源读取
      • java.util.ResourceBundle:实现CLASSPATH下指定资源的读取
      • public static final ResourceBundle getBundle(String baseName):获取指定的资源对象
      • public static final ResourceBundle getBundle(String baseName, Locale locale):获取指定区域下的资源对象
      • public final String getString(String key):根据key读取value
      • 所处的语言环境为中文,如果没有进行Locale的配置,则默认加载中文的文字信息(zh_CN)进行资源内容的读取,如果有需要可通过Locale进行指派
      • 如果读取数据时发现指定的key不存在,则会自动查找公共的资源文件,如果key存在则会加载具体文字语言信息的资源文件

     1 import java.util.Locale;
     2 import java.util.ResourceBundle;
     3     
     4 public class Locale_Demo {
     5     public static void main(String[] args) {
     6         Locale loc = Locale.US;
     7 
     8         ResourceBundle resouceBundle = ResourceBundle.getBundle("a.Message",loc);
     9         System.out.println(resouceBundle.getString("welcome.info"));
    10         System.out.println(resouceBundle.getString("teacher.info"));
    11     }
    12 }
    View Code

    格式化文本

    • 动态的文本处理
    • 修改资源文件
      • login.info=success,welcome {0}, Please Access {1} Web Site.
    • java.text.MessageFormat
     1 import java.text.MessageFormat;
     2 import java.util.Locale;
     3 import java.util.ResourceBundle;
     4     
     5 public class Locale_Demo {
     6     public static void main(String[] args) {
     7         Locale loc = Locale.US;
     8 
     9         ResourceBundle resourceBundle = ResourceBundle.getBundle("a.Message",loc);
    10         String value = resourceBundle.getString("login.info");
    11         System.out.println(MessageFormat.format(value, "aaa","bbb"));
    12     }
    13 }
    View Code

    数字格式化

    • 通过NumberFormat 类实现数据的国际化显示
    • java.text.NumberFormat
      • public static final NumberFormat getInstance():得到一个默认Locale的NumberFormat实例
      • public static final NumberFormat getPercentInstance(Locale inLocale):得到一个指定Locale的NumberFormat实例
      • public static final NumberFormat getPercentInstance():得到一个默认Locale计算百分比的实例
      • public static final NumberFormat getPercentInstance(Locale inLocale):得到一个指定Locale计算百分比的实例
      • public static final NumberFormat getCurrencyInstance():获取默认Locale的货币实例
      • public static final NumberFormat getCurrencyInstance(Locale inLocale):获取指定Locale的货币实例
    • java.text.DecimalFormat:默认格式,每三位加“,”
    • 直接通过子类实例化不妥,最佳方法是将之前的代码更换为NumberFormat类内部提供的静态方法完成处理
    • 若仅仅获取一个NumberFormat类的对象进行默认格式的数字的格式化,则直接依靠NumberFormat类就可以完成,但如果要想使用一些特殊方法,就必须通过DecimalFormat类的对象实例配置
    • 在DecimalFormat类中有一些重要的数字格式化标记
    • 很少开发中很少需要特殊处理,因为大家习惯NumberFormat中的getInstance()方法里所给出的格式化格式已经是国际通用的

    数字对象

     1 import java.math.RoundingMode;
     2 import java.text.DecimalFormat;
     3 import java.text.NumberFormat;
     4 
     5 public class Locale_Demo {
     6     public static void main(String[] args) {
     7         DecimalFormat numberFormat = (DecimalFormat) NumberFormat.getInstance();
     8         numberFormat.applyPattern("####,####,####.000"); // 保留三位小数
     9         numberFormat.setRoundingMode(RoundingMode.DOWN); // 不进位
    10         numberFormat.setPositivePrefix("当年的收入流水:"); // 增加前置说明
    11         numberFormat.setMinimumFractionDigits(5);  // 保留五位小数
    12         System.out.println(numberFormat.format(2826548.264785));
    13     }
    14 }
    View Code

    百分比对象

     1 import java.text.DecimalFormat;
     2 import java.text.NumberFormat;
     3 
     4 public class Locale_Demo {
     5     public static void main(String[] args) {
     6         NumberFormat numberFormat = (DecimalFormat) NumberFormat.getPercentInstance();
     7         System.out.println(numberFormat.format(0.9854623));
     8         // 自定义处理,强制向下转型
     9         DecimalFormat decimalFormat = (DecimalFormat) numberFormat;
    10         decimalFormat.setMinimumFractionDigits(5);
    11         System.out.println(decimalFormat.format(0.9878546));
    12     }
    13 }
    View Code

    货币对象

    1 import java.text.NumberFormat;
    2 import java.util.Locale;
    3 
    4 public class Locale_Demo {
    5     public static void main(String[] args) {
    6         NumberFormat numberFormat = NumberFormat.getCurrencyInstance(Locale.CHINA);
    7         System.out.println(numberFormat.format(789.46));
    8     }
    9 }
    View Code

    参考

    https://zhidao.baidu.com/question/414732825.html

  • 相关阅读:
    Oracle安装
    SSIS作业提示所请求的 OLE DB 访问接口 Microsoft.ACE.OLEDB.12.0 尚未注册
    数据库软考易混淆知识之信息化基础、项目管理
    数据库软考易混淆知识之安全性知识
    数据库软考易混淆知识之知识产权
    数据库软考易混淆知识之操作系统
    数据库软考易混淆知识之计算机网络
    数据库软考易混淆知识之软件工程
    数据库软考易混淆知识之程序语言基础
    数据库软考易混淆知识之计算机系统基础
  • 原文地址:https://www.cnblogs.com/cxc1357/p/12452666.html
Copyright © 2020-2023  润新知