From 81f4040bd3db4a70518b06b3cbf5ea6bad97dbc8 Mon Sep 17 00:00:00 2001 From: matthewdauterman Date: Thu, 27 Feb 2025 11:02:20 -0500 Subject: [PATCH 1/4] disabling flutter-gen localization --- l10n.yaml | 1 + lib/app/app.dart | 9 +- lib/l10n/app_localizations.dart | 159 +++++++++++++++++++++++++++++ lib/l10n/app_localizations_en.dart | 25 +++++ lib/l10n/app_localizations_es.dart | 25 +++++ lib/l10n/localizations.dart | 2 +- 6 files changed, 218 insertions(+), 3 deletions(-) create mode 100644 lib/l10n/app_localizations.dart create mode 100644 lib/l10n/app_localizations_en.dart create mode 100644 lib/l10n/app_localizations_es.dart diff --git a/l10n.yaml b/l10n.yaml index f682cdf..f342e8f 100644 --- a/l10n.yaml +++ b/l10n.yaml @@ -3,3 +3,4 @@ template-arb-file: app_en.arb output-localization-file: app_localizations.dart nullable-getter: false untranslated-messages-file: untranslated.txt +synthetic-package: false diff --git a/lib/app/app.dart b/lib/app/app.dart index 204f0f6..cdb45ca 100644 --- a/lib/app/app.dart +++ b/lib/app/app.dart @@ -4,7 +4,6 @@ import 'package:carbon_flutter/providers.dart'; import 'package:carbon_flutter/ui/design_system/theme.dart'; import 'package:carbon_flutter/ui/navigation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; @@ -18,13 +17,19 @@ class App extends ConsumerWidget { return MaterialApp.router( debugShowCheckedModeBanner: false, localizationsDelegates: const [ - AppLocalizations.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ], supportedLocales: appConfiguration.supportedLocales, locale: appConfiguration.locale, + // localeResolutionCallback: (locale, supportedLocales) { + // if (locale != null && supportedLocales.contains(Locale(locale.languageCode))) { + // return locale; + // } else { + // return const Locale('en'); + // } + // }, theme: appConfiguration.darkMode ? darkTheme : lightTheme, onGenerateTitle: (context) => context.localizations.appTitle, scaffoldMessengerKey: snackbarKey, diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart new file mode 100644 index 0000000..66a4a85 --- /dev/null +++ b/lib/l10n/app_localizations.dart @@ -0,0 +1,159 @@ +import 'dart:async'; + +import 'package:flutter/foundation.dart'; +import 'package:flutter/widgets.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; +import 'package:intl/intl.dart' as intl; + +import 'app_localizations_en.dart'; +import 'app_localizations_es.dart'; + +// ignore_for_file: type=lint + +/// Callers can lookup localized strings with an instance of AppLocalizations +/// returned by `AppLocalizations.of(context)`. +/// +/// Applications need to include `AppLocalizations.delegate()` in their app's +/// `localizationDelegates` list, and the locales they support in the app's +/// `supportedLocales` list. For example: +/// +/// ```dart +/// import 'l10n/app_localizations.dart'; +/// +/// return MaterialApp( +/// localizationsDelegates: AppLocalizations.localizationsDelegates, +/// supportedLocales: AppLocalizations.supportedLocales, +/// home: MyApplicationHome(), +/// ); +/// ``` +/// +/// ## Update pubspec.yaml +/// +/// Please make sure to update your pubspec.yaml to include the following +/// packages: +/// +/// ```yaml +/// dependencies: +/// # Internationalization support. +/// flutter_localizations: +/// sdk: flutter +/// intl: any # Use the pinned version from flutter_localizations +/// +/// # Rest of dependencies +/// ``` +/// +/// ## iOS Applications +/// +/// iOS applications define key application metadata, including supported +/// locales, in an Info.plist file that is built into the application bundle. +/// To configure the locales supported by your app, you’ll need to edit this +/// file. +/// +/// First, open your project’s ios/Runner.xcworkspace Xcode workspace file. +/// Then, in the Project Navigator, open the Info.plist file under the Runner +/// project’s Runner folder. +/// +/// Next, select the Information Property List item, select Add Item from the +/// Editor menu, then select Localizations from the pop-up menu. +/// +/// Select and expand the newly-created Localizations item then, for each +/// locale your application supports, add a new item and select the locale +/// you wish to add from the pop-up menu in the Value field. This list should +/// be consistent with the languages listed in the AppLocalizations.supportedLocales +/// property. +abstract class AppLocalizations { + AppLocalizations(String locale) : localeName = intl.Intl.canonicalizedLocale(locale.toString()); + + final String localeName; + + static AppLocalizations of(BuildContext context) { + return Localizations.of(context, AppLocalizations)!; + } + + static const LocalizationsDelegate delegate = _AppLocalizationsDelegate(); + + /// A list of this localizations delegate along with the default localizations + /// delegates. + /// + /// Returns a list of localizations delegates containing this delegate along with + /// GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate, + /// and GlobalWidgetsLocalizations.delegate. + /// + /// Additional delegates can be added by appending to this list in + /// MaterialApp. This list does not have to be used at all if a custom list + /// of delegates is preferred or required. + static const List> localizationsDelegates = >[ + delegate, + GlobalMaterialLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + ]; + + /// A list of this localizations delegate's supported locales. + static const List supportedLocales = [ + Locale('en'), + Locale('es') + ]; + + /// No description provided for @appTitle. + /// + /// In en, this message translates to: + /// **'Carbon Flutter'** + String get appTitle; + + /// No description provided for @setting_dark_mode. + /// + /// In en, this message translates to: + /// **'Dark Mode'** + String get setting_dark_mode; + + /// No description provided for @setting_language. + /// + /// In en, this message translates to: + /// **'Language'** + String get setting_language; + + /// No description provided for @navigation_settings. + /// + /// In en, this message translates to: + /// **'Settings'** + String get navigation_settings; + + /// No description provided for @navigation_design_system. + /// + /// In en, this message translates to: + /// **'Design System'** + String get navigation_design_system; +} + +class _AppLocalizationsDelegate extends LocalizationsDelegate { + const _AppLocalizationsDelegate(); + + @override + Future load(Locale locale) { + return SynchronousFuture(lookupAppLocalizations(locale)); + } + + @override + bool isSupported(Locale locale) => ['en', 'es'].contains(locale.languageCode); + + @override + bool shouldReload(_AppLocalizationsDelegate old) => false; +} + +AppLocalizations lookupAppLocalizations(Locale locale) { + + + // Lookup logic when only language code is specified. + switch (locale.languageCode) { + case 'en': return AppLocalizationsEn(); + case 'es': return AppLocalizationsEs(); + } + + throw FlutterError( + 'AppLocalizations.delegate failed to load unsupported locale "$locale". This is likely ' + 'an issue with the localizations generation tool. Please file an issue ' + 'on GitHub with a reproducible sample app and the gen-l10n configuration ' + 'that was used.' + ); +} diff --git a/lib/l10n/app_localizations_en.dart b/lib/l10n/app_localizations_en.dart new file mode 100644 index 0000000..841eb1c --- /dev/null +++ b/lib/l10n/app_localizations_en.dart @@ -0,0 +1,25 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for English (`en`). +class AppLocalizationsEn extends AppLocalizations { + AppLocalizationsEn([String locale = 'en']) : super(locale); + + @override + String get appTitle => 'Carbon Flutter'; + + @override + String get setting_dark_mode => 'Dark Mode'; + + @override + String get setting_language => 'Language'; + + @override + String get navigation_settings => 'Settings'; + + @override + String get navigation_design_system => 'Design System'; +} diff --git a/lib/l10n/app_localizations_es.dart b/lib/l10n/app_localizations_es.dart new file mode 100644 index 0000000..9263f66 --- /dev/null +++ b/lib/l10n/app_localizations_es.dart @@ -0,0 +1,25 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Spanish Castilian (`es`). +class AppLocalizationsEs extends AppLocalizations { + AppLocalizationsEs([String locale = 'es']) : super(locale); + + @override + String get appTitle => 'Carbon Flutter'; + + @override + String get setting_dark_mode => 'Modo Oscuro'; + + @override + String get setting_language => 'Idioma'; + + @override + String get navigation_settings => 'Ajustes'; + + @override + String get navigation_design_system => 'Sistema de Diseño'; +} diff --git a/lib/l10n/localizations.dart b/lib/l10n/localizations.dart index a097f8c..fc07730 100644 --- a/lib/l10n/localizations.dart +++ b/lib/l10n/localizations.dart @@ -1,5 +1,5 @@ +import 'package:carbon_flutter/l10n/app_localizations.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; extension AppLocalizationsExtension on BuildContext { AppLocalizations get localizations => AppLocalizations.of(this); From e19cd22dab0120d76d6f811a7376e8f10caf9b6f Mon Sep 17 00:00:00 2001 From: matthewdauterman Date: Thu, 27 Feb 2025 11:02:37 -0500 Subject: [PATCH 2/4] adding languages to ios --- ios/Runner/es.lproj/LaunchScreen.strings | 1 + ios/Runner/es.lproj/Main.strings | 1 + 2 files changed, 2 insertions(+) create mode 100644 ios/Runner/es.lproj/LaunchScreen.strings create mode 100644 ios/Runner/es.lproj/Main.strings diff --git a/ios/Runner/es.lproj/LaunchScreen.strings b/ios/Runner/es.lproj/LaunchScreen.strings new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/ios/Runner/es.lproj/LaunchScreen.strings @@ -0,0 +1 @@ + diff --git a/ios/Runner/es.lproj/Main.strings b/ios/Runner/es.lproj/Main.strings new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/ios/Runner/es.lproj/Main.strings @@ -0,0 +1 @@ + From cf6659200302b1362811f9e712e5d6b6a037c228 Mon Sep 17 00:00:00 2001 From: matthewdauterman Date: Thu, 27 Feb 2025 12:41:59 -0500 Subject: [PATCH 3/4] updating localization delegates --- lib/app/app.dart | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/lib/app/app.dart b/lib/app/app.dart index cdb45ca..bffbf9b 100644 --- a/lib/app/app.dart +++ b/lib/app/app.dart @@ -1,4 +1,5 @@ import 'package:carbon_flutter/globals.dart'; +import 'package:carbon_flutter/l10n/app_localizations.dart'; import 'package:carbon_flutter/l10n/localizations.dart'; import 'package:carbon_flutter/providers.dart'; import 'package:carbon_flutter/ui/design_system/theme.dart'; @@ -16,20 +17,14 @@ class App extends ConsumerWidget { return MaterialApp.router( debugShowCheckedModeBanner: false, - localizationsDelegates: const [ + localizationsDelegates: [ + AppLocalizations.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ], supportedLocales: appConfiguration.supportedLocales, locale: appConfiguration.locale, - // localeResolutionCallback: (locale, supportedLocales) { - // if (locale != null && supportedLocales.contains(Locale(locale.languageCode))) { - // return locale; - // } else { - // return const Locale('en'); - // } - // }, theme: appConfiguration.darkMode ? darkTheme : lightTheme, onGenerateTitle: (context) => context.localizations.appTitle, scaffoldMessengerKey: snackbarKey, From 0fdd49d636bdec4f7206cd0d7012d6356fe5b4fd Mon Sep 17 00:00:00 2001 From: matthewdauterman Date: Thu, 27 Feb 2025 12:46:50 -0500 Subject: [PATCH 4/4] adding back const --- lib/app/app.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/app/app.dart b/lib/app/app.dart index bffbf9b..2f9bef4 100644 --- a/lib/app/app.dart +++ b/lib/app/app.dart @@ -17,7 +17,7 @@ class App extends ConsumerWidget { return MaterialApp.router( debugShowCheckedModeBanner: false, - localizationsDelegates: [ + localizationsDelegates: const [ AppLocalizations.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate,