Flutter中如何基于Locale.fromSubtags实现俄乌多变体应用翻译
解决方案
1. 按地区拆分ARB文件
Flutter国际化遵循app_{languageCode}_{countryCode}.arb的命名规范,你需要创建三个对应文件:
app_ru.arb:作为通用俄语的 fallback 文件,当系统语言为俄语但未指定地区时使用(可复制原俄罗斯俄语内容)app_ru_RU.arb:存放俄罗斯俄语内容(即你原app_ru.arb里的内容)app_ru_UA.arb:存放你提供的乌克兰语内容
三个文件的具体内容如下:
app_ru.arb
{ "language": "ru", "currentTrends": "Современные тенденции", "currentlyAtTheCinema": "В настоящее время в кинотеатрах", "availableSoon": "Скоро будет", "animations": "Анимации", "adventure": "Приключение", "videoNotAvailable": "Видео недоступно", "types": "Категории:", "recommendedTo": "Рекомендовано", "play": "Чтение", "downloadVideo": "Скачать видео", "synopsisNotAvailable": "Синопсис недоступен", "casting": "Актеры", "gallery": "Галерея" }
app_ru_RU.arb
{ "language": "ru-RU", "currentTrends": "Современные тенденции", "currentlyAtTheCinema": "В настоящее время в кинотеатрах", "availableSoon": "Скоро будет", "animations": "Анимации", "adventure": "Приключение", "videoNotAvailable": "Видео недоступно", "types": "Категории:", "recommendedTo": "Рекомендовано", "play": "Чтение", "downloadVideo": "Скачать видео", "synopsisNotAvailable": "Синопсис недоступен", "casting": "Актеры", "gallery": "Галерея" }
app_ru_UA.arb
{ "language": "ru-UA", "currentTrends": "Поточні тенденції", "currentlyAtTheCinema": "Наразі в прокаті", "availableSoon": "Доступно найближчим часом", "animations": "Анімації", "adventure": "Пригодницька", "videoNotAvailable": "Відео недоступне", "types": "Категорії:", "recommendedTo": "Рекомендовано на", "play": "Читання", "downloadVideo": "Завантажити відео", "synopsisNotAvailable": "Синопсис недоступне", "casting": "Актори", "gallery": "Галерея" }
2. 保留现有Locale配置
你的L10n类配置无需大幅修改,现有列表已经覆盖了通用俄语、俄罗斯俄语、乌克兰地区俄语三种场景:
class L10n { static final all = [ const Locale("bg"), const Locale("fi", "FI"), const Locale("hu", "HU"), const Locale("ja", "JP"), const Locale("pl", "PL"), const Locale.fromSubtags(languageCode: "ru"), const Locale.fromSubtags(languageCode: "ru", countryCode: "RU"), const Locale.fromSubtags(languageCode: "ru", countryCode: "UA"), ]; }
3. 自动切换逻辑说明
Flutter的Localizations组件会根据设备系统Locale自动匹配最精确的翻译文件:
- 系统Locale为
ru-RU时,优先加载app_ru_RU.arb - 系统Locale为
ru-UA时,优先加载app_ru_UA.arb - 系统Locale为通用俄语(无地区)时,加载
app_ru.arb - 若对应地区文件不存在,会自动降级到通用语言文件,再降级到默认语言
注意事项
如果你实际需要的是**乌克兰语(独立语言,语言代码为uk)**而非乌克兰地区的俄语,应创建app_uk.arb并在L10n列表中添加const Locale.fromSubtags(languageCode: "uk"),避免语言代码混淆。
内容的提问来源于stack exchange,提问作者Seth
相关产品推荐
相关产品推荐

