iOS Swift开发中如何获取对应本地化语言的字母表
基于本地化设置获取多语言字母表的实现方案
核心实现逻辑
- 第一步先获取当前系统/应用激活的Locale(本地化标识),也就是
en-US、ru-RU、fr-FR这类标准BCP 47格式的locale编码 - 第二步基于Locale对应的语言规则,拉取该语言的标准字母表即可,可根据业务需要选择是否包含变音符号、大小写变体等特殊字符
各端实现示例
Android端
Android 7.0+系统已经内置ICU4J库,不需要额外引入依赖即可直接调用:
// 获取当前应用生效的Locale Locale currentLocale = getResources().getConfiguration().getLocales().get(0); // 获取该Locale对应语言的标准字母表 UnicodeSet alphabet = LocaleData.getInstance(currentLocale).getExemplarSet(0, LocaleData.ES_STANDARD); // 转为字符集合供业务逻辑使用 Set<String> charSet = alphabet.strings();
如果需要覆盖带变音符号的字符,把ES_STANDARD替换为ES_AUXILIARY即可,拉丁语、西里尔字母等主流体系都支持
iOS端
直接用Foundation框架原生接口实现:
let currentLocale = Locale.current guard let languageCode = currentLocale.language.languageCode?.identifier else { return } // 拉取对应语言的标准字母集 if let exemplarSet = Locale(identifier: languageCode).exemplarCharacters { let alphabet = exemplarSet.compactMap { $0.isLetter ? String($0) : nil } // 后续业务逻辑调用 }
Web/JavaScript端
可以用内置IntlAPI结合标准映射表实现,轻量场景可以直接维护极简映射表:
// 获取当前浏览器的生效locale const currentLocale = navigator.language || 'en-US' // 字母表映射表示例,可按需扩展更多语言 const alphabetMap = { 'ru': ['а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я'], 'en': ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'], 'fr': ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','à','â','æ','ç','é','è','ê','ë','î','ï','ô','œ','ù','û','ü','ÿ'] } // 取语言主码匹配对应字母表 const mainLang = currentLocale.split('-')[0] const currentAlphabet = alphabetMap[mainLang] || alphabetMap['en']
后端Python实现
通过pyicu库调用ICU接口获取全量语言字母表:
from icu import Locale, LocaleData current_locale = Locale('ru_RU') # 替换为业务侧获取的当前用户locale exemplar_set = LocaleData(current_locale).getExemplarSet() alphabet = list(exemplar_set)
注意事项
- 部分语言存在多套字母表的情况(比如哈萨克语同时支持西里尔、拉丁、阿拉伯三种书写体系),需要额外加业务逻辑判断用户使用的字母变体
- 不要自行硬编码全量字母表,ICU库已经维护了全球所有主流语言的标准字符集,直接调用即可避免字符遗漏错误
- 如果应用需要支持小众语言,可以直接基于ICU的字符集规则做扩展即可
内容的提问来源于stack exchange,提问作者user14247073
相关产品推荐
相关产品推荐

