JDK Locale的妙用:探索多语言和地区设置的强大功能

文章目录

  • 前言
  • 应用场景
    • 国际化(Internationalization)
    • 格式化(Formatting)
      • 日期格式化
      • 数字格式化
      • 金额格式化
      • 百分比形式格式化
    • 获取Locale信息


前言

JDK(Java Development Kit)的Locale类用于表示特定的地理、文化和语言的环境信息。Locale对象包含了对应于特定地区或语言的信息,这对于国际化和本地化的应用程序是非常重要的。


应用场景

国际化(Internationalization)

国际化的应用程序中,Locale类用于支持不同地区和语言的用户界面。通过使用Locale对象,程序可以根据用户的首选语言和地区来加载相应的本地化资源文件,例如文本、图像和声音等。

IDEA新建语言资源文件
在这里插入图片描述
命名自己的资源文件名称,并选择自己要添加的语言
在这里插入图片描述

public class InternationalizationExample {public static void main(String[] args) {// 获取用户的默认LocaleLocale userLocale = Locale.ENGLISH;// 使用ResourceBundle加载本地化资源文件ResourceBundle messages = ResourceBundle.getBundle("Message", userLocale);// 获取本地化字符串String greeting = messages.getString("help");System.out.println(greeting);}
}

控制台输出:
在这里插入图片描述

格式化(Formatting)

日期格式化

Locale类用于格式化和解析日期、时间、数字和货币等信息。不同地区和语言对于这些格式的要求可能会有所不同,Locale对象允许应用程序适应用户的偏好。

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;public class DateFormatExample {public static void main(String[] args) {// 获取用户的默认LocaleLocale userLocale = Locale.getDefault();// 获取日期格式化对象DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL, userLocale);// 格式化当前日期Date currentDate = new Date();String formattedDate = dateFormat.format(currentDate);System.out.println("Formatted Date: " + formattedDate);}
}

控制台输出
在这里插入图片描述

数字格式化

public class NumberFormatExample {public static void main(String[] args) {// 获取用户的默认LocaleLocale userLocale = Locale.getDefault();// 获取数字格式化对象NumberFormat numberFormat = NumberFormat.getInstance(userLocale);// 格式化数字double number = 1234567.8455;String formattedNumber = numberFormat.format(number);System.out.println("Formatted Number: " + formattedNumber);// 带货币符号的格式化String currencyFormattedNumber = NumberFormat.getCurrencyInstance(Locale.CHINA).format(number);System.out.println("Formatted Number with Currency Symbol: " + currencyFormattedNumber);}}

控制台打印效果
在这里插入图片描述

⚠️ number进行format的时候只会保留3位小数,并且进行四舍五入操作

如果想原样输出,但有带有货币符号的,我们可以这样做:

public class FormatNumber {public static void main(String[] args) {// 使用BigDecimal表示金额BigDecimal amount = new BigDecimal("1234.5678");// 获取中文环境的货币格式Locale chineseLocale = Locale.CHINA;Currency currency = Currency.getInstance(chineseLocale);String currencySymbol = currency.getSymbol();// 格式化BigDecimal为带有货币符号的字符串(不进行四舍五入)String formattedAmount = currencySymbol +amount;System.out.println("Original BigDecimal: " + amount);System.out.println("Formatted Amount (Currency, No Rounding): " + formattedAmount);}
}

在这里插入图片描述

金额格式化

public class DecimalFormatExample {public static void main(String[] args) {BigDecimal bigDecimal = new BigDecimal("1234567890.1234567890");DecimalFormat decimalFormat = new DecimalFormat("###,###,###,###.00");// 保留两位小数String format = decimalFormat.format(bigDecimal);System.out.println("格式化后的金额:"+format);}
}

在这里插入图片描述

百分比形式格式化

public class NumberFormatExample {public static void main(String[] args) {// 获取用户的默认LocaleLocale userLocale = Locale.getDefault();// 获取数字格式化对象NumberFormat numberFormat = NumberFormat.getInstance(userLocale);// 格式化数字double number = 1234567.8455;String formattedNumber = numberFormat.format(number);System.out.println("Formatted Number: " + formattedNumber);// 带货币符号的格式化String currencyFormattedNumber = NumberFormat.getCurrencyInstance(Locale.CHINA).format(number);System.out.println("Formatted Number with Currency Symbol: " + currencyFormattedNumber);// 百分比形式格式化String formattedNumberWithPercentSymbol = NumberFormat.getPercentInstance().format(0.43);System.out.println("Formatted Number with Percent Symbol: " + formattedNumberWithPercentSymbol);}

在这里插入图片描述

获取Locale信息

Locale类提供了一些方法,可以获取Locale的信息,例如语言代码、国家代码、显示名等。

public class LocalInfoExample {public static void main(String[] args) {Locale locale = Locale.getDefault();System.out.println("国家名称简写:"+locale.getCountry());System.out.println("国家名称全称:"+locale.getDisplayCountry());System.out.println("语言简写:"+locale.getLanguage());System.out.println("语言全称:"+locale.getDisplayLanguage());System.out.println("语言标记:"+locale.toLanguageTag());System.out.println("国家语言信息:"+locale.getDisplayName());}
}

在这里插入图片描述

更多用法可以参考JDK官方文档,或者参考这篇文章https://www.wenjiangs.com/doc/pn3sp3eu

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

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

相关文章

openGauss学习笔记-210 openGauss 数据库运维-常见故障定位案例-谓词下推引起的查询报错

文章目录 openGauss学习笔记-210 openGauss 数据库运维-常见故障定位案例-谓词下推引起的查询报错210.1 谓词下推引起的查询报错210.1.1 问题现象210.1.2 原因分析210.1.3 处理办法 openGauss学习笔记-210 openGauss 数据库运维-常见故障定位案例-谓词下推引起的查询报错 210.…

8-小程序数据promise化、共享、分包、自定义tabbar

小程序API Promise化 wx.requet 官网入口 默认情况下,小程序官方异步API都是基于回调函数实现的 wx.request({method: , url: , data: {},header: {content-type: application/json // 默认值},success (res) {console.log(res.data)},fail () {},complete () { }…

[M思维] lc2808. 使循环数组所有元素相等的最少秒数(思维+哈希表+代码实现)

文章目录 1. 题目来源2. 题目解析 1. 题目来源 链接:2808. 使循环数组所有元素相等的最少秒数 2. 题目解析 一道比较简单的思维题吧,将一维数组首尾连接变成环,会发现相同元素中间的距离 / 2,就是需要感染的秒数。包括首尾连接…

linux 脚本 正则表达式

正则表达式 分类 基础正则表达式:BRE 扩展正则表达式:ERE 编程语言支持的高级正则表达式 BRE 和 ERE的语法基本一致,只有部分元字符(预定义好的带有特殊含义的一些符号)需要特殊对待 grep sed 默认使用的基本正则表达式,grep -E,sed -r,egrep,awk使…

zookeeper源码(07)leader、follower和observer

Leader 构造方法 public Leader(QuorumPeer self, LeaderZooKeeperServer zk) throws IOException {this.self self;this.proposalStats new BufferStats();// 获取节点间通信地址Set<InetSocketAddress> addresses;if (self.getQuorumListenOnAllIPs()) {addresses …

ANAPF有源电力滤波器选型计算——安科瑞赵嘉敏

配电系统中谐波电流的计算涉及很多因素。对于改造项目&#xff0c;可使用专业电能质量分析仪测得所需谐波数据&#xff1b;对于新建项目&#xff0c;设计人员并不能直接获得供电系统的的谐波数据&#xff0c;因此&#xff0c;我司研发人员通过众多不同行业、不同类型的项目&…

MySQL原理(二)存储引擎(2)MyISAM

一、MyISAM介绍 1、介绍&#xff1a; MyISAM引擎是MySQL5.5版本之前的数据库所默认的数据表引擎。每一个采用MyISAM引擎的数据表在实际存储中都是由三个文件组成&#xff0c;分别是frm文件保存表的结构&#xff0c;MYD文件保存表的数据、MYI文件保存表的索引&#xff0c;文件…

Android C++生成complier_command.json

Android C 程序开发现状 在 Android 下开发 C 程序&#xff0c;我见过绝大多数人都是不使用任何语法插件&#xff0c;就靠硬写&#xff0c;写完之后再根据编译报错来修改语法错误。这也怪不得程序员&#xff0c;一方面&#xff0c;Android 使用 Arm 平台的 clang 编译器&#x…

JSP仓储管理系统myeclipse定制开发SQLServer数据库网页模式java编程jdbc

一、源码特点 JSP仓储管理系统系统是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库 &#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为SQLServer2008&#x…

扩展学习|一文明晰推荐系统应用开发核心技术发展

文献来源&#xff1a;Lu J, Wu D, Mao M, et al. Recommender system application developments: a survey[J]. Decision support systems, 2015, 74: 12-32. 主题&#xff1a;关于推荐系统应用开发的调查研究 关键词:推荐系统、电子服务个性化、电子商务、电子学习、电子政务 …

除了Adobe之外,还有什么方法可以将Excel转为PDF?

前言 Java是一种广泛使用的编程语言&#xff0c;它在企业级应用开发中发挥着重要作用。而在实际的开发过程中&#xff0c;我们常常需要处理各种数据格式转换的需求。今天小编为大家介绍下如何使用葡萄城公司的的Java API 组件GrapeCity Documents for Excel&#xff08;以下简…

Java递归结构

1.递归是一种常见的算法思路&#xff0c;在很多算法中都会用到。比如&#xff1a;深度优先搜索&#xff08;DFS&#xff09;等。 2.递归的基本思想就是“自己调用自己”。 递归结构包括两个部分&#xff1a; 递归头&#xff1a;什么时候不调用自身方法。如果没有递归头&#…

人机协同的效果并不总能达到预期效果

当前的人工智能技术仍然存在一定的局限性&#xff0c;尤其是在处理复杂的任务或灵活适应环境变化时&#xff0c;往往难以达到人类的水平&#xff0c;还有&#xff0c;人类参与人机协同时可能存在主观意识、情绪波动或偏见等因素&#xff0c;这些因素都可能会影响到人机协同的结…

BL808学习日志-3-DPI-RGB屏幕使用-LVGL D0

一、DPI-RGB驱动 BL808的手册上显示是支持RGB565屏幕显示输出的&#xff0c;但是一直没找到网上的使用例程。且官方的SDK显示也是能够使用的&#xff0c;只是缺少了驱动。这一部分驱动在SIPEED的SDK中已经内置了&#xff0c;今天就是简单的点亮一个800*480 RGB565的屏幕。 二、…

Java基础数据结构之Lambda表达式

一.语法 基本语法&#xff1a;(parameters)->expression或者(parameters)->{statements;} parameters&#xff1a;类似方法中的形参列表&#xff0c;这里的参数是函数式接口里面的参数。这里的参数可以明确说明&#xff0c;也可以不声明而由JVM隐含的推断。当只有一个推…

C++实习报告(集合交,并,差运算的实现)

一、问题描述 1、问题描述 集合元素类型可以是整数、字符串和小数&#xff0c;实现集合的交、并、差运算。 2、功能要求 &#xff08;1&#xff09;用户能够输入两个集合元素&#xff1b; &#xff08;2&#xff09;能够完成集合的交、并、差运算&#xff1b; &#xff08;3&a…

07. STP的基本配置

文章目录 一. 初识STP1.1. STP概述1.2. STP的出现1.3. STP的作用1.4. STP的专业术语1.5. BPDU的报文格式1.6. STP的选择原则&#xff08;1&#xff09;选择根桥网桥原则&#xff08;2&#xff09;选择根端口原则 1.7. 端口状态1.8. STP报文类型1.9. STP的收敛时间 二. 实验专题…

【MySQL 流浪之旅】 第六讲 浅谈 MySQL 锁

系列文章目录 【MySQL 流浪之旅】 第一讲 MySQL 安装【MySQL 流浪之旅】 第二讲 MySQL 基础操作【MySQL 流浪之旅】 第三讲 MySQL 基本工具【MySQL 流浪之旅】 第四讲 MySQL 逻辑备份【MySQL 流浪之旅】 第五讲 数据库设计的三个范式 目录 系列文章目录 一、什么是锁&#x…

07-Nacos-接入Mysql实现持久化

1、默认内嵌的数据库 Derby 存于/data目录 2、扩展仅支持Mysql 5.6.5 执行Nacos中的SQL脚本&#xff0c;该脚本是Nacos-server文件夹中的nacos-mysql.sql 详见 01-Nacos源码打包、部署-CSDN博客 3、修改配置文件 Nacos-server中的conf目录下&#xff0c;application.proper…

【协程报错】TypeError: An asyncio.Future, a coroutine or an awaitable is required

报错语句&#xff1a; loop.run_until_complete(tasks) 改成&#xff1a; loop.run_until_complete(asyncio.wait(tasks))说明&#xff1a; 解决方法&#xff1a;将任务对象封装到asyncio.wait中。这里wait函数的作用是给tasks列表中每一个任务对象赋予一个可被挂起的权限。 …