《Java核心技术 卷II》国际化

国际化

locale,英译为 区域设置

语言不同,还有要使两国用户都满意。

为什么需要locale

提供程序的国际化版本时,所有程序消息都需要转换为本地语言。

直接翻译是不够的,还有许多更细微的差异,英语与德语数字不同,小数点和十进制数逗号相反。

日期也是,美国月日年,德国日月年,中国年月日。

指定locale

locale由5个部分组成

1.语言由2-3个小写字母表示,英语en,德语de,中文ch等。

2.可选的脚本,由首字母4个字母表示,拉丁文Latn,西里尔文Cyrl,繁体中文Hant。

3.可选的国家或地区,由2个大写字母或3个数字表示,美国US,瑞士CH,中国CN,日本JP。

4.可选的变体,指定各种杂项特性,方言和拼写规则,很少用了,挪威语的变体尼诺斯克语。

5.可选的拓展,拓展描述了日期和数字等内容偏好,u-和两个字母开头,日历ca,数字nu。

泰语数字,拓展u-nu-thai。

语言和国家看起来有点乱是由本地语言导出的,德语从Deutsch,中文zhongwen,de和zh。

locale是用标签描述的,标签由各个元素通过字符连接起来,en-US,zh-CN。

瑞士由4中官方语言(德,法,意大利,托罗曼斯语),讲德语瑞士人希望用de-CH,货币值表示成瑞士法郎而不是欧元。

标签构建Locale对象
Locale usEnglish = Locale.forLanguageTag("en-US");
toLanguageTag方法可以用于给定locale的语言标签

Locale.US.toLanguageTag()生成的字符串是"en-US"。

为方便起见,各个国家的Locale对象和语言都已经预定义了。

getAvailableLocales方法会返回由Java虚拟机能够识别的所有locale构成的数组。

注释:Locale.getISOLanguages()获取所有语言代码,Locale.getISOCountries()获取所有国家代码。

默认locale

getDefault可以获得作为本地操作系统的一部分存储的默认locale。

setDefault来改变默认的Java locale,此改变只对程序有效,不会对操作系统产生影响。

注释:UNIX中,数字,货币,日期分别设置LC_NUMERIC,LC_MONETARY,LC_TIME环境变量来指定不同的locale。

Java不关注这些。

提示:测试一下,改变默认locale,启动程序时提供语言和地域特性,将它设为de-CH:

java -Duser.language=de -Duser.region=CH MyProgram

package 第7章国际化;

import java.util.Locale;

public class DefaultLocale {

    public static void main(String[] args) {
        Locale displayLocale = Locale.getDefault(Locale.Category.DISPLAY);
        Locale formatLocale = Locale.getDefault(Locale.Category.FORMAT);
        System.out.println(displayLocale.toString());
        System.out.println(formatLocale.toString());
    }

}

显示名字

getDisplayName返回描述locale的字符串,不是两个字母组成的代码,而是面向用户形式来表现。

German (Switzerland)

字符串显示为德语

package 第7章国际化;

import java.util.Locale;

public class DefaultLocale {

    public static void main(String[] args) {
        var loc = new Locale("zh","CN");
        System.out.println(loc.getDisplayName(Locale.GERMAN));
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿立聊全栈

有作用的,有闲钱的支持一点。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值