JavaWeb开发——软件国际化(动态元素国际化)

软件国际化的第二个部分,就是动态元素国际化。

  • 数值,货币,时间,日期等数据由于可能在程序运行时动态产生,所以无法像文字一样简单地将它们从应用程序中分离出来,而是需要特殊处理。Java 中提供了解决这些问题的 API 类(位于 java.util 包和 java.text 包中)。
  • Locale 类
    Locale 实例对象代表一个特定的地理,政治、文化区域。
    一个 Locale 对象本身不会验证它代表的语言和国家地区信息是否正确,只是向本地敏感的类提供国家地区信息,与国际化相关的格式化和解析任务由本地敏感的类去完成。(若JDK中的某个类在运行时需要根据 Locale 对象来调整其功能,这个类就称为本地敏感类)。

接下来介绍几个比较常用的API。

DateFormat类(国际化日期)

DateFormat 类可以将一个日期/时间对象格式化为表示某个国家地区的日期/时间字符串。

DateFormat 类除了可按国家地区格式化输出日期外,它还定义了一些用于描述日期/时间的显示模式的 int 型的常量,包括FULL, LONG, MEDIUM, DEFAULT, SHORT,实例化DateFormat对象时,可以使用这些常量,控制日期/时间的显示长度。

实例化DateFormat类有九种方式,以下三种为带参形式,下面列出的三种方式也可以分别不带参,或只带显示样式的参数。

  • getDateInstance(int style, Locale aLocale):以指定的日期显示模式和本地信息来获得DateFormat实例对象,该实例对象不处理时间值部分。
  • getTimeInstance(int style, Locale aLocale):以指定的时间显示模式和本地信息来获得DateFormat实例对象,该实例对象不处理日期值部分。
  • getDateTimeInstance(int dateStyle, int timeStyle, Locale aLocale):以单独指定的日期显示模式、时间显示模式和本地信息来获得DateFormat实例对象。

编写测试代码

@Test public void demo1(){ // 使用自带的样式格式化日期 // 只要日期 Date date = new Date(); // 有四种显示模式 FULL、LONG、MEDIUM、SHORT // DateFormat df1 = DateFormat.getDateInstance(DateFormat.FULL); // DateFormat df1 = DateFormat.getDateInstance(DateFormat.LONG); // DateFormat df1 = DateFormat.getDateInstance(DateFormat.MEDIUM); DateFormat df1 = DateFormat.getDateInstance(DateFormat.SHORT); System.out.println(df1.format(date)); // 只要时间 DateFormat df2 = DateFormat.getTimeInstance(DateFormat.FULL); // DateFormat df2 = DateFormat.getTimeInstance(DateFormat.LONG); // DateFormat df2 = DateFormat.getTimeInstance(DateFormat.MEDIUM); // DateFormat df2 = DateFormat.getTimeInstance(DateFormat.SHORT); System.out.println(df2.format(date)); //日期和时间都要 DateFormat df3 = DateFormat.getDateTimeInstance(); System.out.println(df3.format(date)); }

运行结果我就不贴图了,大家自己运行感受。
都是一些对API的应用,没什么好说的,直接贴一些测试代码了解API的使用即可。

@Test public void demo2(){ //设置Locale Date date = new Date(); DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL,Locale.CANADA); System.out.println(dateFormat.format(date)); }NumberFormat类(国际化数据)

  • 实例化NumberFormat类时,可以使用locale对象作为参数,也可以不使用,下面列出的是使用参数的。
  • getNumberInstance(Locale locale):以参数locale对象所标识的本地信息来获得具有多种用途的NumberFormat实例对象。
  • getIntegerInstance(Locale locale):以参数locale对象所标识的本地信息来获得处理整数的NumberFormat实例对象。
  • getCurrencyInstance(Locale locale):以参数locale对象所标识的本地信息来获得处理货币的NumberFormat实例对象。
  • getPercentInstance(Locale locale):以参数locale对象所标识的本地信息来获得处理百分比数值的NumberFormat实例对象。

编写测试代码

@Test public void demo3() { // 保留小数有效位数 double d = 1.23456789456789; // 保留两位小数 NumberFormat format = NumberFormat.getNumberInstance(); // 最大两位小数 format.setMaximumFractionDigits(2); // 最小两位小数 format.setMinimumFractionDigits(2); System.out.println(format.format(d)); // 货币格式化 int i = 100; // 显示美元 NumberFormat format2 = NumberFormat.getCurrencyInstance(Locale.US); System.out.println(format2.format(i)); // 百分比格式化 double d2 = 0.78123; NumberFormat format3 = NumberFormat.getPercentInstance(); System.out.println(format3.format(d2)); // 想显示两位小数 format3.setMaximumFractionDigits(2); format3.setMinimumFractionDigits(2); System.out.println(format3.format(d2)); }

到这里,动态元素的国际化就介绍完了,都是一些需要记忆的知识点呐,其实没什么好说的,接下来就是软件国际化的最后一部分,动态文本国际化。

更多免费技术资料可关注:annalin1203

Original: https://www.cnblogs.com/zhuxiaopijingjing/p/12985816.html
Author: 幽暗森林之猪大屁
Title: JavaWeb开发——软件国际化(动态元素国际化)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/537897/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java第三方支付接入案例(支付宝)

    开源项目链接 Kitty 开源权限管理系统 项目地址:https://gitee.com/liuge1988/kitty 演示地址:http://139.196.87.48:900…

    Java 2023年5月29日
    085
  • 删除链表结点类问题

    删除链表结点 NO1. 删除链表倒数第 k个结点 给定一个链表,删除链表的倒数第 n 个节点并返回链表的头指针。要求:空间复杂度 (O(1)),时间复杂度 (O(n)) 如果倒数第…

    Java 2023年6月15日
    097
  • 2020年10月23日笔记

    Java8特性待更新 在公司项目里面有很多这类代码,熟练使用后能够加快开发速度。1、快速便利map的方法map进行快速遍历的方法map.forEach((key,value)-&g…

    Java 2023年6月13日
    066
  • Spring Cloud Alibaba 之 Sentinel 限流规则和控制台实例

    这一节我们通过一个简单的实例,学习Sentinel的基本应用。 一、Sentinel 限流核心概念 在学习Sentinel的具体应用之前,我们先来了解一下Sentinel中两个核心…

    Java 2023年5月30日
    089
  • MySQL 索引

    索引 概述 索引(Index) 是帮助 MySQL 高效获取数据的数据结构. 索引的本质:索引是数据结构,可以理解为 “排好&#…

    Java 2023年6月8日
    084
  • 【Java】使用Validated做参数校验时遇到的坑

    1、问题描述 在写接口时,需要对一个参数type进行校验是否为空,考虑在参数上面直接添加 @NotNull 来完成该参数的校验,在尝试添加Validated校验后,是可行的,但是在…

    Java 2023年6月8日
    078
  • day40-网络编程02

    Java网络编程02 4.TCP网络通信编程 基本介绍 基于客户端–服务端的网络通信 底层使用的是TCP/IP协议 应用场景举例:客户端发送数据,服务端接收并显示控制台…

    Java 2023年6月15日
    084
  • session 和 cookie (转)

    会话(Session)跟踪是Web程序中常用的技术,用来 跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。 Cookie通过在客户端记录信息确定用户身份, S…

    Java 2023年5月30日
    084
  • JAVA进阶篇 内存模型

    引入 什么时候我们会谈到java内存结构,有几个情况 1、当程序运行出现堆溢出或者栈溢出的时候,程序炸了,需要通过了解内存结构知道怎么调整内存参数 2、性能调优,如果程序出现性能不…

    Java 2023年5月29日
    0103
  • JVM中的堆

    堆 内存结构 堆的核心概念 《java虚拟机规范》中对java堆的描述是:所有的对象实例以及数组都应当在运行时分配在堆上。 一个JVM实例只存在一个堆内存(就是new 出来一个对象…

    Java 2023年6月13日
    071
  • java序列化导致的问题

    问题描述 最近在做一个需求的迭代过程中,遇到了一个tair(公司的一款缓存中间件,类似Redis)反序列化失败的问题,也就是把tair里缓存的值转换成对象的时候报错了。看了一下代码…

    Java 2023年6月13日
    084
  • Spring Ioc源码分析系列–Ioc的基础知识准备

    Spring Ioc源码分析系列–Ioc的基础知识准备 本系列文章代码基于Spring Framework 5.2.x Ioc的概念 在Spring里,Ioc的定义为T…

    Java 2023年6月8日
    088
  • 头歌计组实践

    头歌计组实践 一.关于用什么写Verilog Verilog是个硬件描述语言,不像高级语言用户群体那么大,所以好像没有像什么IDE那样的东西,个人目前了解有以下这么几个形式: 文本…

    Java 2023年6月7日
    084
  • 从零开始实现lmax-Disruptor队列(四)多线程生产者MultiProducerSequencer原理解析

    在v3版本的MyDisruptor实现多线程消费者后。按照计划,v4版本的MyDisruptor需要支持线程安全的多线程生产者功能。 由于该文属于系列博客的一部分,需要先对之前的博…

    Java 2023年6月8日
    080
  • 30.多线程,分组服务端,接收数据性能瓶颈与优化

    客户端只发,服务端只收。 服务端代码进行了优化: 1.fd_set进行了备份,如果客户端没有发生接入,离开。则,每次select的时候,使用备份的fd_set。 2.使用std::…

    Java 2023年5月29日
    089
  • Vue项目环境搭建

    1、安装node https://nodejs.org/en/选择最新版本安装 2、安装成功后,命令窗口查看node是否安装成功 node 查看版本 node -v 3、安装淘宝镜…

    Java 2023年6月9日
    081
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球