JDK(Java Development Kit)的Locale类用于表示特定的地理、文化和语言的环境信息。Locale对象包含了对应于特定地区或语言的信息,这对于国际化和本地化的应用程序是非常重要的。
国际化的应用程序中,Locale类用于支持不同地区和语言的用户界面。通过使用Locale对象,程序可以根据用户的首选语言和地区来加载相应的本地化资源文件,例如文本、图像和声音等。
IDEA新建语言资源文件
命名自己的资源文件名称,并选择自己要添加的语言
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);
}
}
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);
}
}
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);
}
}
⚠️ 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) {
// 获取用户的默认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);
}
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