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.hqwc.cn/news/440113.html

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

相关文章

【C深度解剖】计算机数据下载和删除原理

简介:本系列博客为C深度解剖系列内容,以某个点为中心进行相关详细拓展 适宜人群:已大体了解C语法同学 作者留言:本博客相关内容如需转载请注明出处,本人学疏才浅,难免存在些许错误,望留言指正 作…

Spring Boot + security + jwt 测试安全策略

一、测试概述 主要目的是测试security的用法。因测试搭建mysql和redis比较麻烦,所以我这里将自定义的jwt和用户信息缓存到程序的内存中。 本人测试的项目比较混乱,Spring Boot父类只标出有用的依赖。其子类用的版本为jdk11。后续会继续深入oauth2&#x…

N65总账凭证管理凭证查询(sql)

--核算账簿 select code , name , pk_setofbook from org_setofbook where ( pk_setofbook in ( select pk_setofbook from org_accountingbook where 1 1 and ( pk_group N0001A11000000000037X ) and ( accountenablestate 2 ) ) ) order by code;--核算账簿 select code …

Python(19)Excel表格操作Ⅰ

目录 导包 读取EXCEL文件 1、获取worksheet名称 2、设定当前工作表 3、输出目标单元格数据 4、工作表.rows(行) 5、工作表.columns(列) 小结 导包 要想使用 python 操作 Excel 文件,应当导入 openpyxl 包。在…

【习题】使用DevEco Studio高效开发

单选题 1. 用哪一种装饰器修饰的组件可作为页面入口组件?B A. Component B. Entry C. Preview D. Builder 回答正确 2. ArkTS Stage模型支持API Version 9,关于其工程目录结构说法正确的是?C A. oh-package.json5用于存放应用级配置信…

20240130在ubuntu20.04.6下给GTX1080安装最新的驱动和CUDA

20240130在ubuntu20.04.6下给GTX1080安装最新的驱动和CUDA 2024/1/30 12:27 缘起,为了在ubuntu20.4.6下使用whisper,以前用的是GTX1080M,装了535的驱动。 现在在PDD拼多多上了入手了一张二手的GTX1080,需要将安装最新的545的驱动程…

读书人必须知道的9个搜书引擎

各位小伙伴大家好,众所周知,现在找资源的难度要比以前高的多,各种网站封的封删的删,但大家对书籍资源的需求却越来越大。那今天我镜像哥就决定整一期电子书资源狠活儿。 这些资源都是我辛苦收集,并逐一验证筛选出来的的…

如何安装配置HFS并实现无公网ip远程访问本地电脑共享文件

文章目录 前言1.下载安装cpolar1.1 设置HFS访客1.2 虚拟文件系统 2. 使用cpolar建立一条内网穿透数据隧道2.1 保留隧道2.2 隧道名称2.3 成功使用cpolar创建二级子域名访问本地hfs 总结 前言 在大厂的云存储产品热度下降后,私人的NAS热度快速上升,其中最…

Fisher线性判别分析

Fisher线性判别分析 原理 LDA(Linear Discriminant Analysis)是一种经典的线性判别方法,又称Fisher判别分析。该方法思想比较简单:给定训练集样例,设法将样例投影到一维的直线上,使得同类样例的投影点尽可能接…

Mybatis-Plus扩展

7 MybatisX插件[扩展] 7.1 MybatisX插件介绍 MybatisX 是一款基于 IDEA 的快速开发插件,为效率而生。 安装方法:打开 IDEA,进入 File -> Settings -> Plugins -> Browse Repositories,输入 mybatisx 搜索并安装。 功…

负载均衡下Webshell连接思路及难点

君衍. 一、应用场景二、环境搭建三、思路以及难点1、查看内部结构2、查看webshell3、使用蚁剑进行连接4、难点1 shell文件上传问题5、难点2 命令执行时飘逸6、难点3 大工具上传失败7、难点4 脚本失效 四、解决方式1、关闭对方节点服务器2、基于IP地址判断是否执行3、脚本实现流…

c#窗体捕捉方向键

方法1 实现方法参考代码: private void Form1_Load(object sender, EventArgs e){this.KeyPreview true;}protected override bool ProcessDialogKey(Keys keyData){if (keyData Keys.Left || keyData Keys.Right || keyData Keys.Up || keyData Keys.Down){s…