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 @@ + 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..2f9bef4 100644 --- a/lib/app/app.dart +++ b/lib/app/app.dart @@ -1,10 +1,10 @@ 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'; 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'; 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);