整装待发-实操程序国际化 | 带你学《Java语言高级特性》之二十九

简介: 在前两节了解了程序国际化的基本内容,并能够实现对相关功能的使用后,现在让我们一起来实操一个程序,使其完成国际化。

上一篇:使用ResourceBundle实现资源的统一调配 | 带你学《Java语言高级特性》之二十八

在前两节了解了程序国际化的基本内容,并能够实现对相关功能的使用后,现在让我们一起来实操一个程序,使其完成国际化。

【本节目标】
通过阅读本节内容,你将整合之前所学,依靠预设的资源文件,使用Locale进行自动调用,或使用ResourceBundle指定一个资源文件,完整完成对一个程序的国际化改造。

实现国际化程序开发

现在国际化程序的实现前期准备已经全部完成了,也就是说依靠资源文件、Locale、ResourceBundle类就可以实现国际化的处理操作,那么下面来进行国际化的程序实现(核心关键:读取资源信息)。
1、在CLASSPATH下建立:cn.mldn.message.Messages_zh_CN.properties(中文资源);
info=欢迎您的访问!

2、在CLASSPATH下建立:cn.mldn.message.Messages_en_US.properties(英文资源);
info=Welcome !
现在加上没有默认区域的资源文件,一共定义了三个资源:

image.png
三个资源文件

3、通过程序进行指定区域的资源信息加载

import java.util.ResourceBundle;
public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
        ResourceBundle resource = ResourceBundle.getBundle("cn.mldn.message.Messages");
        String val = resource.getString("info");
        System.out.println(val);   //欢迎您的访问!
    }
}

此时在利用ResourceBundle类读取资源的时候并没有设置一个明确的Locale对象,但是发现“Messages_zh_CN”文件起作用了,因为这个方法里面默认加载的就是当前本地的Locale的资源:

public static final ResourceBundle getBundle(String baseName) {
    Class<?> caller = Reflection.getCallerClass();
return getBundleImpl(baseName, Locale.getDefault(), 
caller,getDefaultControl(caller,baseName));
}

4、如果现在有需要也可以修改当前的Locale环境,则可以使用ResourceBundle类中的如下方法:

获取ResourceBundle:

public static final ResourceBundle getBundle(String baseName, Locale locale);
import java.util.Locale;
import java.util.ResourceBundle;
public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
        Locale loc=new Locale("en","US");
        ResourceBundle resource = ResourceBundle.getBundle("cn.mldn.message.Messages",loc);
        String val = resource.getString("info");
        System.out.println(val);     //Welcome !
    }
}

如果现在有指定区域的资源文件存在的时候,那么没有设置区域的资源文件的信息将不会被读取。
资源文件读取顺序:读取指定区域的资源文件>默认的本地资源>公共的资源(没有区域设置)。

想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:教你借助占位符定制资源内容 | 带你学《Java语言高级特性》之三十
更多Java面向对象编程文章查看此处

相关文章
|
28天前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
63 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
1月前
|
Java 流计算
利用java8 的 CompletableFuture 优化 Flink 程序
本文探讨了Flink使用avatorscript脚本语言时遇到的性能瓶颈,并通过CompletableFuture优化代码,显著提升了Flink的QPS。文中详细介绍了avatorscript的使用方法,包括自定义函数、从Map中取值、使用Java工具类及AviatorScript函数等,帮助读者更好地理解和应用avatorscript。
利用java8 的 CompletableFuture 优化 Flink 程序
|
20天前
|
存储 安全 Java
Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
【10月更文挑战第17天】Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
47 2
|
3天前
|
SQL 安全 Java
安全问题已经成为软件开发中不可忽视的重要议题。对于使用Java语言开发的应用程序来说,安全性更是至关重要
在当今网络环境下,Java应用的安全性至关重要。本文深入探讨了Java安全编程的最佳实践,包括代码审查、输入验证、输出编码、访问控制和加密技术等,帮助开发者构建安全可靠的应用。通过掌握相关技术和工具,开发者可以有效防范安全威胁,确保应用的安全性。
14 4
|
18天前
|
存储 Java API
优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。
【10月更文挑战第19天】本文介绍了如何优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。内容包括Map的初始化、使用Stream API处理Map、利用merge方法、使用ComputeIfAbsent和ComputeIfPresent,以及Map的默认方法。这些技巧不仅提高了代码的可读性和维护性,还提升了开发效率。
39 3
|
18天前
|
存储 安全 Java
Java Map新玩法:深入探讨HashMap和TreeMap的高级特性
【10月更文挑战第19天】Java Map新玩法:深入探讨HashMap和TreeMap的高级特性,包括初始容量与加载因子的优化、高效的遍历方法、线程安全性处理以及TreeMap的自然排序、自定义排序、范围查询等功能,助你提升代码性能与灵活性。
23 2
|
22天前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
35 2
|
24天前
|
Java 程序员 编译器
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。本文通过示例详细解析了保留字的定义、作用及与自定义标识符的区别,帮助开发者避免因误用保留字而导致的编译错误,确保代码的正确性和可读性。
41 3
|
27天前
|
移动开发 Java 大数据
深入探索Java语言的核心优势与现代应用实践
【10月更文挑战第10天】深入探索Java语言的核心优势与现代应用实践
42 4
|
25天前
|
安全 Java Linux
java程序设置开机自启
java程序设置开机自启