我正在开发一个支持Android、iOS和Web的项目。 我正在使用 https://pub.dev/packages/easy_localization 当我切换语言时,它在 Android 和 iOS 应用程序上运行良好。但是,在网络上,除非我刷新页面,否则它不会立即更改语言。
有什么解决方案可以在不重新加载页面的情况下更改网站上的语言吗?
如果您使用 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
}
这里是生成的最新且更简单的版本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,
),
);
}
}