无需重新加载页面即可在 Web 上实现 Flutter 本地化

问题描述 投票:0回答:2

我正在开发一个支持Android、iOS和Web的项目。 我正在使用 https://pub.dev/packages/easy_localization 当我切换语言时,它在 Android 和 iOS 应用程序上运行良好。但是,在网络上,除非我刷新页面,否则它不会立即更改语言。

有什么解决方案可以在不重新加载页面的情况下更改网站上的语言吗?

flutter localization
2个回答
0
投票

如果您使用 easy_localization 生成功能,您就不会再遇到此问题,因为您的 lang 文件是在 Dart 代码中生成的

生成 lang 文件:

flutter pub run easy_localization:generate --source-dir ./assets/languages -O lib/languages

生成密钥文件:

flutter pub run easy_localization:generate --source-dir ./assets/languages -O lib/languages -o locale_keys.g.dart -f keys

assetLoader
添加到您的
EasyLocalization
配置

void main() {
  runApp(EasyLocalization(
      child: MyApp(),
      supportedLocales: [Locale('en', 'US'), Locale('ar', 'DZ')],
      path: 'resources/langs',
      assetLoader: CodegenLoader())); //adding assetLoader
}

0
投票

这里是生成的最新且更简单的版本easy_localization 3.0.3

这里是用于实现 lang 类和键的终端命令

首先运行这个命令

dart run easy_localization:generate -h

此命令用于生成 lang 文件并提及您的路径

dart run easy_localization:generate -S “assets/translations” -O “lib/translations”

此命令用于生成密钥

dart run easy_localization:generate --source-dir ./assets/translations -O lib/translations -o locale_keys.g.dart -f keys

主文件将是

 Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await EasyLocalization.ensureInitialized();
  // Initialize Shared preferance
  await SharedPref().init();
  //initialise dependancy injection//
  await getInit();
//initialise Hive local storage//
  await HiveConfig.initConfig();

  runApp(
    EasyLocalization(
      supportedLocales: const [Locale('en'), Locale('ar')],
      path: 'assets/translations',
      fallbackLocale: const Locale('en'),
      assetLoader: const CodegenLoader(),
      child: MyApp(),
    ),
  );
}

///Route widget
class MyApp extends StatelessWidget {
  ///Constructor
  MyApp({super.key});
  final _appRoutes = AppRouter();
  @override
  Widget build(BuildContext context) {
    return BlocProvider(
      create: (context) => servicelocator<AuthenticationBloc>(),
      child: MaterialApp.router(
        localizationsDelegates: context.localizationDelegates,
        supportedLocales: context.supportedLocales,
        locale: context.locale,
        routerConfig: _appRoutes.config(),
        debugShowCheckedModeBanner: false,
        scaffoldMessengerKey: snackbarKey,
        theme: lightTheme,
        // darkTheme: darkTheme,
        // themeMode: ThemeMode.system,
      ),
    );
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.