【Java 基础】23 国际化

文章目录

    • 1.概念
    • 2.原理
      • 1)Locale
      • 2)ResourceBundle
      • 3)MessageFormat
    • 3.例子
      • 1)准备资源文件
      • 2)加载资源文件
      • 3)格式化消息(非必须)
    • 总结

在全球化的今天,开发支持多语言的应用变得越来越重要,也变得较为常见。

1.概念

国际化是一种使应用程序能够适应不同语言的技术

国际化就是指一个程序可以同时去适应各个国家的语言。例如,如果使用程序的是中国人,那么就会显示中文。如果使用程序的是英国人,那么就显示英语

2.原理

例如:

现在需要一个程序,去同时适应中文和英文的显示

这个时候我们就需要一个国际化支持了,那该如何去实现呢?

在这里插入图片描述

其实挺简单的,我们事先准备一组资源文件,然后里面都是通过 key-value 的形式保存信息,再根据 key一组资源文件 中寻找对应的资源文件中的 value 然后返回

在 Java 中,如果要实现这个国际化需求,那么就离不开下面的 3 个主要类:

1)Locale

用于表示一个国家语言类, java.util.Locale 类表示一个特定的区域,用于确定程序应该使用哪种语言规则。可以通过 Locale 类来创建一个特定的区域设置。

2)ResourceBundle

用于访问资源文件 , java.util.ResourceBundle 类用于加载特定于语言环境的资源文件。资源文件通常是 key-value 的集合,其中 key 是字符串,value 可以是字符串、数字等。

3)MessageFormat

用于格式化资源文件的占位符, java.text.MessageFormat 类用于格式化消息,支持将占位符替换为特定的值,这在处理动态文本时非常有用。

3.例子

上面说了下国际化的概念及原理,接下来就让我们来试一试吧

1)准备资源文件

首先,我们为每种语言创建一个资源文件,其中包含了程序中显示的所有文本消息。资源文件通常以 .properties 后缀结尾

  • message_zh_CN.properties

    msg = 你好世界
    dynamic_msg = {0} 说:你好世界
    
  • message_en_US.properties

    msg = Hello world
    dynamic_msg =  {0} say:Hello world
    

2)加载资源文件

使用 ResourceBundle 来加载特定于语言环境的资源文件

示例代码:

public class Demo {public static void main(String[] args) {// 设置区域Locale cn = new Locale("zh", "CN");// 获取资源ResourceBundle cnBundle = ResourceBundle.getBundle("message", cn);// 获取消息System.out.println(cnBundle.getString("msg"));// 设置区域Locale en = new Locale("en", "US");// 获取资源ResourceBundle enBundle = ResourceBundle.getBundle("message", en);// 获取消息System.out.println(enBundle.getString("msg"));}
}

输出结果:

你好世界
Hello world

在不同的语言和地区切换时,只需更改 Locale 对象即可。

3)格式化消息(非必须)

如果需要在消息中插入动态值,可以使用 MessageFormat,若没有占位符的话,就不用使用这个

示例代码:

public class Demo {public static void main(String[] args) {Locale cn = new Locale("zh", "CN");ResourceBundle cnBundle = ResourceBundle.getBundle("message", cn);String cnMsg = cnBundle.getString("dynamic_msg");System.out.println(MessageFormat.format(cnMsg, "程序员"));Locale en = new Locale("en", "US");ResourceBundle enBundle = ResourceBundle.getBundle("message", en);String enMsg = enBundle.getString("dynamic_msg");System.out.println(MessageFormat.format(enMsg, "Cheney"));}
}

输出结果:

程序员 说:你好世界

Cheney say:Hello world

这个可以应用于 非固定的消息上,可以更灵活的处理动态消息

总结

国际化为开发者提供了一种强大的工具,使他们能够轻松地创建多语言的应用程序。通过合理使用 LocaleResourceBundleMessageFormat 便可以实现灵活、可维护的国际化应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/257660.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web前端开发HTML/css用户登录界面

代码&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"> <head> <meta http-equi…

Vue3组件使用问题

Vue3组件学习 文章目录 Vue3组件学习一、Message 全局提示组件返回数据换行问题二、DatePicker 日期选择框组件限制选定年份问题 一、Message 全局提示组件返回数据换行问题 问题&#xff1a;使用中发现仅仅通过写入\n或<br/>&#xff0c;无法实现回车显示的结果。 解决…

【android开发-18】android中运行时申请权限详解

1&#xff0c;android权限机制 在Android中&#xff0c;权限机制是一种保护用户隐私和数据安全的重要机制。它允许应用程序在访问敏感或危险的数据或资源时获取特定的权限。以下是Android中权限机制的详细解释&#xff1a; 1&#xff0c;权限类别&#xff1a;Android将权限分…

VSCODE 运行C程序缓慢解决方法之一

最近更换了mingw的版本&#xff0c;安装路径与之前的mingw路径不大一样。结果发现代码运行的时候很慢&#xff0c;弹出窗口后&#xff0c;迟迟没有打印任何东西&#xff0c;就像卡死了一样。试过网上说的一堆方法&#xff0c;没有什么用。 我按照以下流程进行检查: 1.检查min…

使用hexo搭建博客

使用Hexo博客框架搭建博客 一&#xff0c;前言二&#xff0c;安装配置1&#xff0c;安装node.js下载安装配置全局环境 2&#xff0c;安装git环境3&#xff0c;注册github4&#xff0c;安装git5&#xff0c;将 git 与 GitHub 账号绑定配置ssh 6&#xff0c;安装Hexo&#xff08;…

基于OpenCV+CNN+IOT+微信小程序智能果实采摘指导系统——深度学习算法应用(含pytho、JS工程源码)+数据集+模型(五)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境TensorFlow 环境Jupyter Notebook环境Pycharm 环境微信开发者工具OneNET云平台 模块实现1. 数据预处理2. 创建模型并编译3. 模型训练及保存4. 上传结果5. 小程序开发1&#xff09;查询图片2&#xff09;查询识别结…

webpack该如何打包

1.我们先创建一个空的大文件夹 2.打开该文件夹的终端 输入npm init -y 2.1.打开该文件夹的终端 2.2在该终端运行 npm init -y 3.安装webpack 3.1打开webpack网址 点击“中文文档” 3.2点击“指南”在点击“起步” 3.3复制基本安装图片画线的代码 4.在一开始的文件夹下在创建一…

Nacos未授权访问

漏洞描述 Nacos 是阿里巴巴推出来的一个新开源项目&#xff0c;是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。致力于帮助发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集&#xff0c;可以快速实现动态服务发现、服务配置、服务元数据及流量管…

教你如何打造自己的知识付费平台!

一、确定目标群体 首先&#xff0c;你需要明确你的知识付费平台的目标用户是谁。这将帮助你确定所需的内容和功能&#xff0c;以及如何吸引和留住这些用户。例如&#xff0c;如果你的目标群体是职场新人&#xff0c;你的平台可能需要提供职场技能、职业规划、面试技巧等方面的…

如何快速构建知识服务平台,打造个人或企业私域流量

随着互联网的快速发展&#xff0c;传统的知识付费平台已经不能满足用户的需求。而SaaS知识付费小程序平台则是一种新型的知识付费方式&#xff0c;具有灵活、便捷、高效等特点&#xff0c;为用户提供了更加优质的付费知识服务。本文将介绍如何搭建自己的SaaS知识付费小程序平台…

系统设计-微服务架构

典型的微服务架构图 下图展示了一个典型的微服务架构。 负载均衡器&#xff1a;它将传入流量分配到多个后端服务。CDN&#xff08;内容交付网络&#xff09;&#xff1a;CDN 是一组地理上分布的服务器&#xff0c;用于保存静态内容以实现更快的交付。客户端首先在 CDN 中查找内…

鸿蒙OS应用开发之最简单的程序

鸿蒙OS应用开发之最简单的程序 前面介绍怎么样安装鸿蒙应用开发的环境&#xff0c;然后试着运行起来&#xff0c;并安装运行的虚拟机&#xff0c;以及对应9.0版本的API和SDK等软件。这样就具备了基本的开发基础&#xff0c;就可以进入创建应用程序开发了。 在我们起飞之前&…