Java中如何将Locale对象转换为ISO 3166标准的en-US格式字符串
实现步骤
首先需要先修正Locale实例的初始化参数:ISO 3166规范规定的美国国家代码为两位字符US,你使用的USA是不符合规范的入参,会导致后续输出结果异常。
方案1:Java 7及以上版本(推荐)
Java 7开始Locale类内置了toLanguageTag()方法,专门用于输出符合IETF BCP 47(兼容ISO 3166规范)的横杠分隔格式语言标签,示例代码如下:
// 第二个参数传入符合ISO 3166规范的两位国家代码 Locale l = new Locale("en", "US"); String targetStr = l.toLanguageTag(); // 输出结果为 en-US System.out.println(targetStr);
方案2:兼容Java 6及更早版本
如果你的项目依赖版本低于Java 7,没有内置的toLanguageTag()方法,可以手动拼接语言代码和国家代码实现需求:
Locale l = new Locale("en", "US"); String targetStr = l.getLanguage(); if (!l.getCountry().isBlank()) { targetStr += "-" + l.getCountry(); } // 输出结果为 en-US System.out.println(targetStr);
补充说明
Locale类的toString()方法返回的下划线分隔格式是Java早期设计的内部表示格式,仅用于Java内部逻辑识别,不适用于输出符合通用ISO规范的语言标签场景。
内容的提问来源于stack exchange,提问作者Deepesh kumar Gupta
相关产品推荐
相关产品推荐

