diff --git a/assets/localization/nb.json b/assets/localization/nb.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/assets/localization/nb.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/assets/localization/zh.json b/assets/localization/zh.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/assets/localization/zh.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index 8f60fcc9..f247662c 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -108,7 +108,7 @@ class _State extends State { } Future _boot(Duration duration) async { - _initLocale(); + LunaLanguage.current.use(); _initNotifications(); if (LunaQuickActions.isSupported) LunaQuickActions().initialize(); @@ -128,12 +128,6 @@ class _State extends State { } } - void _initLocale() { - final lan = LunaLanguage.fromLocale(context.locale) ?? LunaLanguage.ENGLISH; - context.setLocale(lan.locale); - Intl.defaultLocale = lan.languageTag; - } - Future _healthCheck() async { if (LunaFlavor.isStable) { LunaBuild().isLatestBuildVersion().then((isLatest) { diff --git a/lib/modules/settings/routes/configuration_localization/route.dart b/lib/modules/settings/routes/configuration_localization/route.dart index 9f8faa70..6d67e166 100644 --- a/lib/modules/settings/routes/configuration_localization/route.dart +++ b/lib/modules/settings/routes/configuration_localization/route.dart @@ -58,11 +58,7 @@ class _State extends State<_Widget> with LunaScrollControllerMixin { trailing: const LunaIconButton(icon: Icons.language_rounded), onTap: () async { final result = await SettingsDialogs().changeLanguage(context); - if (result.item1) { - result.item2!.use(context); - context.setLocale(result.item2!.locale); - // Intl.defaultLocale = result.item2!.languageTag; - } + if (result.item1) result.item2!.use(); }, ); } diff --git a/lib/system/localization.dart b/lib/system/localization.dart index a23c67a6..3f47f3ce 100644 --- a/lib/system/localization.dart +++ b/lib/system/localization.dart @@ -76,6 +76,11 @@ enum LunaLanguage { } extension LunaLanguageExtension on LunaLanguage { + Future use() async { + await LunaState.navigatorKey.currentContext!.setLocale(locale); + Intl.defaultLocale = languageTag; + } + bool get enabled { switch (this) { case LunaLanguage.ENGLISH: @@ -195,6 +200,4 @@ extension LunaLanguageExtension on LunaLanguage { return const Locale('vi'); } } - - Future use(BuildContext context) => context.setLocale(this.locale); } diff --git a/scripts/generate_localization.dart b/scripts/generate_localization.dart index 5a50e71d..0544e556 100644 --- a/scripts/generate_localization.dart +++ b/scripts/generate_localization.dart @@ -3,7 +3,7 @@ import 'dart:convert'; import 'dart:io'; -/// Simple dart script to concat all module's localization files into a single file for loading into LunaSea. +/// Simple dart script to concatenate all module's localization files into a single file for loading into LunaSea. /// /// This script is designed to be run from the root of the project. void main() { @@ -38,6 +38,8 @@ void main() { _createFile(path); File file = File(language.path); _writeFile(path, jsonDecode(file.readAsStringSync())); + // If required, create a stub primary language to prevent asset load failures + if (name.contains('-')) _writeStubPrimaryLanguage(_assets.path, name); } }); print(''); @@ -45,6 +47,12 @@ void main() { }); } +void _writeStubPrimaryLanguage(String assets, String language) { + final primary = language.split('-').first; + final path = '$assets/$primary.json'; + _createFile(path); +} + void _writeFile(String path, Map? data) { // Read the current data in the file File file = File(path);