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

文章目录

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


前言

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


应用场景

国际化(Internationalization)

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

IDEA新建语言资源文件
JDK Locale的妙用:探索多语言和地区设置的强大功能_第1张图片
命名自己的资源文件名称,并选择自己要添加的语言
JDK Locale的妙用:探索多语言和地区设置的强大功能_第2张图片

public class InternationalizationExample {
    public static void main(String[] args) {
        // 获取用户的默认Locale
        Locale userLocale = Locale.ENGLISH;

        // 使用ResourceBundle加载本地化资源文件
        ResourceBundle messages = ResourceBundle.getBundle("Message", userLocale);

        // 获取本地化字符串
        String greeting = messages.getString("help");
        System.out.println(greeting);
    }
}

控制台输出:
JDK Locale的妙用:探索多语言和地区设置的强大功能_第3张图片

格式化(Formatting)

日期格式化

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

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

public class DateFormatExample {
    public static void main(String[] args) {
        // 获取用户的默认Locale
        Locale 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);
    }
}

控制台输出
JDK Locale的妙用:探索多语言和地区设置的强大功能_第4张图片

数字格式化

public class NumberFormatExample {
    public static void main(String[] args) {
        // 获取用户的默认Locale
        Locale 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);
    }
   
}

控制台打印效果
JDK Locale的妙用:探索多语言和地区设置的强大功能_第5张图片

⚠️ 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);

    }
}

JDK Locale的妙用:探索多语言和地区设置的强大功能_第6张图片

金额格式化

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);
    }
}

JDK Locale的妙用:探索多语言和地区设置的强大功能_第7张图片

百分比形式格式化

public class NumberFormatExample {
    public static void main(String[] args) {
        // 获取用户的默认Locale
        Locale 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);

    }

JDK Locale的妙用:探索多语言和地区设置的强大功能_第8张图片

获取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 Locale的妙用:探索多语言和地区设置的强大功能_第9张图片

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

你可能感兴趣的:(java,开发语言)