You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 14:55:14