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

Flutter集成Easy Localization后无法加载设备本地语言

解决Easy Localization无法自动适配设备系统语言的问题

我在Flutter应用中集成了Easy Localization包,应用内通过单选按钮切换语言可以正常工作,但现在需要让应用自动加载并适配设备的本地语言,无需用户手动切换。但修改设备系统语言后重启应用,语言并没有发生变化。

当前代码

main.dart

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await EasyLocalization.ensureInitialized();

  runApp(
    EasyLocalization(
      supportedLocales: [
        Locale('en', 'US'),
        Locale('it', 'IT'),
        Locale('fr', 'FR')
      ],
      path: 'assets/translations',
      // <-- change the path of the translation files
      fallbackLocale: Locale('en', 'US'),
      //assetLoader: CodegenLoader(),
      child: MyLangApp(),
    ),
  );
}

MyLangApp代码

class MyLangApp extends StatefulWidget {
  const MyLangApp({Key? key}) : super(key: key);

  @override
  State<MyLangApp> createState() => _MyLangAppState();
}

class _MyLangAppState extends State<MyLangApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      localizationsDelegates: context.localizationDelegates,
      supportedLocales: context.supportedLocales,
      locale: context.locale,
      home: MainPage(),
    );
  }
}

问题原因

当前代码未配置Easy Localization自动检测设备系统语言的逻辑,且该包默认会保存用户上次手动切换的语言设置,导致重启应用时优先读取保存的语言,而非设备当前系统语言。

解决方案

1. 修改main.dart,添加系统语言检测逻辑

在EasyLocalization组件中配置startLocale参数指定设备系统语言,并根据需求设置saveLocale:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await EasyLocalization.ensureInitialized();

  // 获取设备当前系统语言
  final deviceLocale = WidgetsBinding.instance.platformDispatcher.locale;

  runApp(
    EasyLocalization(
      supportedLocales: [
        Locale('en', 'US'),
        Locale('it', 'IT'),
        Locale('fr', 'FR')
      ],
      path: 'assets/translations',
      fallbackLocale: Locale('en', 'US'),
      // 启动时优先使用设备系统语言
      startLocale: deviceLocale,
      // 若需每次启动强制使用系统语言,设为false;若要保留用户手动切换的记忆,设为true
      saveLocale: false,
      child: MyLangApp(),
    ),
  );
}

2. 适配规则说明

  • 若设备系统语言在supportedLocales列表内,应用启动将自动加载对应语言
  • 若设备系统语言不在支持列表内,会 fallback 到fallbackLocale指定的语言
  • 当saveLocale: true时,用户手动切换语言后,下次启动会加载用户选择的语言;仅在首次启动或无保存记录时,才会使用设备系统语言

内容的提问来源于stack exchange,提问作者Giovanni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 14:36:53