diff --git a/mobile/lib/extensions/build_context_extensions.dart b/mobile/lib/extensions/build_context_extensions.dart index 69a9c3b347..54826cee7c 100644 --- a/mobile/lib/extensions/build_context_extensions.dart +++ b/mobile/lib/extensions/build_context_extensions.dart @@ -1,4 +1,7 @@ +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; +import 'package:immich_mobile/utils/translation.dart'; +import 'package:intl/message_format.dart'; extension ContextHelper on BuildContext { // Returns the current padding from MediaQuery @@ -58,4 +61,17 @@ extension ContextHelper on BuildContext { // Show SnackBars from the current context void showSnackBar(SnackBar snackBar) => ScaffoldMessenger.of(this).showSnackBar(snackBar); + + String t(String key, [Map? args]) { + try { + String message = this.tr(key); + if (args != null) { + return MessageFormat(message, locale: Intl.defaultLocale ?? 'en') + .format(args); + } + return message; + } catch (e) { + return key; + } + } } diff --git a/mobile/lib/main.dart b/mobile/lib/main.dart index 32bb025916..ab6ea71310 100644 --- a/mobile/lib/main.dart +++ b/mobile/lib/main.dart @@ -205,27 +205,24 @@ class ImmichAppState extends ConsumerState overrides: [ localeProvider.overrideWithValue(context.locale), ], - child: MaterialApp( + child: MaterialApp.router( + title: 'Immich', + debugShowCheckedModeBanner: true, localizationsDelegates: context.localizationDelegates, supportedLocales: context.supportedLocales, locale: context.locale, - debugShowCheckedModeBanner: true, - home: MaterialApp.router( - title: 'Immich', - debugShowCheckedModeBanner: false, - themeMode: ref.watch(immichThemeModeProvider), - darkTheme: getThemeData( - colorScheme: immichTheme.dark, - locale: context.locale, - ), - theme: getThemeData( - colorScheme: immichTheme.light, - locale: context.locale, - ), - routeInformationParser: router.defaultRouteParser(), - routerDelegate: router.delegate( - navigatorObservers: () => [AppNavigationObserver(ref: ref)], - ), + themeMode: ref.watch(immichThemeModeProvider), + darkTheme: getThemeData( + colorScheme: immichTheme.dark, + locale: context.locale, + ), + theme: getThemeData( + colorScheme: immichTheme.light, + locale: context.locale, + ), + routeInformationParser: router.defaultRouteParser(), + routerDelegate: router.delegate( + navigatorObservers: () => [AppNavigationObserver(ref: ref)], ), ), ); diff --git a/mobile/lib/widgets/settings/language_settings.dart b/mobile/lib/widgets/settings/language_settings.dart index 7dc7f89ea1..08b0ce0046 100644 --- a/mobile/lib/widgets/settings/language_settings.dart +++ b/mobile/lib/widgets/settings/language_settings.dart @@ -162,7 +162,7 @@ class _LanguageSearchBar extends StatelessWidget { child: SearchField( autofocus: false, contentPadding: const EdgeInsets.all(12), - hintText: 'language_search_hint'.tr(), + hintText: context.t('language_search_hint'), prefixIcon: const Icon(Icons.search_rounded), suffixIcon: controller.text.isNotEmpty ? IconButton( @@ -196,14 +196,14 @@ class _LanguageNotFound extends StatelessWidget { ), const SizedBox(height: 8), Text( - 'language_no_results_title'.tr(), + context.t('language_no_results_title'), style: context.textTheme.titleMedium?.copyWith( color: context.colorScheme.onSurface, ), ), const SizedBox(height: 4), Text( - 'language_no_results_subtitle'.tr(), + context.t('language_no_results_subtitle'), style: context.textTheme.bodyMedium?.copyWith( color: context.colorScheme.onSurface.withValues(alpha: 0.8), ), @@ -246,7 +246,7 @@ class _LanguageApplyButton extends StatelessWidget { ), ) : Text( - 'setting_languages_apply'.tr(), + context.t('setting_languages_apply'), style: const TextStyle( fontWeight: FontWeight.w600, fontSize: 16.0,