如何使用Java Locale将显示语言名称转换为对应languageTag?
问题解答
可以实现从显示语言名称到对应语言标签的转换,JDK没有提供直接的反查方法,通过遍历匹配可用Locale即可完成需求。
实现注意点
- 显示语言名称和展示时所用的Locale强相关:比如
Locale.CHINA在中文环境下的显示语言名是「中文」,在英文环境下是「Chinese」,匹配时必须指定统一的基准Locale取显示名,否则会因为当前运行环境的默认Locale不同出现匹配失败的问题。 - 匹配时建议忽略大小写,规避大小写格式差异导致的匹配异常。
- 部分小众语言可能存在命名差异,建议额外维护自定义映射表做兜底匹配。
实现代码示例
import java.util.Locale; public class DisplayLangToTagConverter { /** * 从英文显示语言名转换为对应主语言标签 * @param displayLanguageEn 英文的显示语言名,比如"English" * @return 对应的主语言标签,比如"en",匹配失败返回null */ public static String convert(String displayLanguageEn) { Locale[] allAvailableLocales = Locale.getAvailableLocales(); for (Locale locale : allAvailableLocales) { // 统一用英文作为基准取显示语言名,消除默认Locale差异影响 String currentDisplayLang = locale.getDisplayLanguage(Locale.ENGLISH); if (currentDisplayLang.equalsIgnoreCase(displayLanguageEn)) { // 如果需要完整语言标签(比如zh-CN),就替换成 locale.toLanguageTag() return locale.getLanguage(); } } return null; } public static void main(String[] args) { System.out.println(convert("English")); // 输出 en System.out.println(convert("Chinese")); // 输出 zh System.out.println(convert("Japanese")); // 输出 ja System.out.println(convert("French")); // 输出 fr } }
扩展说明
如果你持有的显示语言名不是英文(比如中文环境下的「英语」「日语」),只需要把代码中getDisplayLanguage方法传入的基准Locale替换为Locale.CHINESE即可完成对应匹配。
如果需要返回带地区的完整BCP47语言标签(比如en-US、zh-CN),把代码中返回值的locale.getLanguage()替换为locale.toLanguageTag()即可。
内容的提问来源于stack exchange,提问作者Dewerro
相关产品推荐
相关产品推荐

