Skip to content

Commit

Permalink
Make public StringsEn
Browse files Browse the repository at this point in the history
  • Loading branch information
natsuk4ze committed Sep 24, 2023
1 parent dcb9e78 commit 6b7d247
Show file tree
Hide file tree
Showing 6 changed files with 59 additions and 126 deletions.
2 changes: 1 addition & 1 deletion lib/features/settings/language.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'language.g.dart';

@riverpod
translation(TranslationRef ref) {
StringsEn translation(TranslationRef ref) {
final lan = ref.watch(languageProvider);
switch (lan) {
case LanguageType.ja:
Expand Down
6 changes: 3 additions & 3 deletions lib/features/settings/language.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion lib/features/settings/theme.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

169 changes: 48 additions & 121 deletions lib/i18n/strings.g.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
/// Locales: 2
/// Strings: 22 (11 per locale)
///
/// Built on 2023-09-24 at 11:14 UTC
/// Built on 2023-09-24 at 15:30 UTC
// coverage:ignore-file
// ignore_for_file: type=lint
Expand All @@ -24,93 +24,20 @@ const AppLocale _baseLocale = AppLocale.en;
/// - LocaleSettings.setLocale(AppLocale.en) // set locale
/// - Locale locale = AppLocale.en.flutterLocale // get flutter locale from enum
/// - if (LocaleSettings.currentLocale == AppLocale.en) // locale check
enum AppLocale with BaseAppLocale<AppLocale, _StringsEn> {
en(languageCode: 'en', build: _StringsEn.build),
ja(languageCode: 'ja', build: _StringsJa.build);
enum AppLocale with BaseAppLocale<AppLocale, StringsEn> {
en(languageCode: 'en', build: StringsEn.build),
ja(languageCode: 'ja', build: StringsJa.build);

const AppLocale({required this.languageCode, this.scriptCode, this.countryCode, required this.build}); // ignore: unused_element

@override final String languageCode;
@override final String? scriptCode;
@override final String? countryCode;
@override final TranslationBuilder<AppLocale, _StringsEn> build;

/// Gets current instance managed by [LocaleSettings].
_StringsEn get translations => LocaleSettings.instance.translationMap[this]!;
}

/// Method A: Simple
///
/// No rebuild after locale change.
/// Translation happens during initialization of the widget (call of t).
/// Configurable via 'translate_var'.
///
/// Usage:
/// String a = t.someKey.anotherKey;
/// String b = t['someKey.anotherKey']; // Only for edge cases!
_StringsEn get t => LocaleSettings.instance.currentTranslations;

/// Method B: Advanced
///
/// All widgets using this method will trigger a rebuild when locale changes.
/// Use this if you have e.g. a settings page where the user can select the locale during runtime.
///
/// Step 1:
/// wrap your App with
/// TranslationProvider(
/// child: MyApp()
/// );
///
/// Step 2:
/// final t = Translations.of(context); // Get t variable.
/// String a = t.someKey.anotherKey; // Use t variable.
/// String b = t['someKey.anotherKey']; // Only for edge cases!
class Translations {
Translations._(); // no constructor

static _StringsEn of(BuildContext context) => InheritedLocaleData.of<AppLocale, _StringsEn>(context).translations;
}

/// The provider for method B
class TranslationProvider extends BaseTranslationProvider<AppLocale, _StringsEn> {
TranslationProvider({required super.child}) : super(settings: LocaleSettings.instance);

static InheritedLocaleData<AppLocale, _StringsEn> of(BuildContext context) => InheritedLocaleData.of<AppLocale, _StringsEn>(context);
}

/// Method B shorthand via [BuildContext] extension method.
/// Configurable via 'translate_var'.
///
/// Usage (e.g. in a widget's build method):
/// context.t.someKey.anotherKey
extension BuildContextTranslationsExtension on BuildContext {
_StringsEn get t => TranslationProvider.of(this).translations;
}

/// Manages all translation instances and the current locale
class LocaleSettings extends BaseFlutterLocaleSettings<AppLocale, _StringsEn> {
LocaleSettings._() : super(utils: AppLocaleUtils.instance);

static final instance = LocaleSettings._();

// static aliases (checkout base methods for documentation)
static AppLocale get currentLocale => instance.currentLocale;
static Stream<AppLocale> getLocaleStream() => instance.getLocaleStream();
static AppLocale setLocale(AppLocale locale, {bool? listenToDeviceLocale = false}) => instance.setLocale(locale, listenToDeviceLocale: listenToDeviceLocale);
static AppLocale setLocaleRaw(String rawLocale, {bool? listenToDeviceLocale = false}) => instance.setLocaleRaw(rawLocale, listenToDeviceLocale: listenToDeviceLocale);
static AppLocale useDeviceLocale() => instance.useDeviceLocale();
@Deprecated('Use [AppLocaleUtils.supportedLocales]') static List<Locale> get supportedLocales => instance.supportedLocales;
@Deprecated('Use [AppLocaleUtils.supportedLocalesRaw]') static List<String> get supportedLocalesRaw => instance.supportedLocalesRaw;
static void setPluralResolver({String? language, AppLocale? locale, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) => instance.setPluralResolver(
language: language,
locale: locale,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
@override final TranslationBuilder<AppLocale, StringsEn> build;
}

/// Provides utility functions without any side effects.
class AppLocaleUtils extends BaseAppLocaleUtils<AppLocale, _StringsEn> {
class AppLocaleUtils extends BaseAppLocaleUtils<AppLocale, StringsEn> {
AppLocaleUtils._() : super(baseLocale: _baseLocale, locales: AppLocale.values);

static final instance = AppLocaleUtils._();
Expand All @@ -126,11 +53,11 @@ class AppLocaleUtils extends BaseAppLocaleUtils<AppLocale, _StringsEn> {
// translations

// Path: <root>
class _StringsEn implements BaseTranslations<AppLocale, _StringsEn> {
class StringsEn implements BaseTranslations<AppLocale, StringsEn> {

/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
_StringsEn.build({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver})
StringsEn.build({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver})
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
$meta = TranslationMetadata(
locale: AppLocale.en,
Expand All @@ -142,36 +69,36 @@ class _StringsEn implements BaseTranslations<AppLocale, _StringsEn> {
}

/// Metadata for the translations of <en>.
@override final TranslationMetadata<AppLocale, _StringsEn> $meta;
@override final TranslationMetadata<AppLocale, StringsEn> $meta;

/// Access flat map
dynamic operator[](String key) => $meta.getTranslation(key);

late final _StringsEn _root = this; // ignore: unused_field
late final StringsEn _root = this; // ignore: unused_field

// Translations
late final _StringsPackagesPageEn packagesPage = _StringsPackagesPageEn._(_root);
late final _StringsPackageDetailsPageEn packageDetailsPage = _StringsPackageDetailsPageEn._(_root);
late final _StringsSettingsPageEn settingsPage = _StringsSettingsPageEn._(_root);
late final _StringsBottomNaviBarEn bottomNaviBar = _StringsBottomNaviBarEn._(_root);
late final StringsPackagesPageEn packagesPage = StringsPackagesPageEn._(_root);
late final StringsPackageDetailsPageEn packageDetailsPage = StringsPackageDetailsPageEn._(_root);
late final StringsSettingsPageEn settingsPage = StringsSettingsPageEn._(_root);
late final StringsBottomNaviBarEn bottomNaviBar = StringsBottomNaviBarEn._(_root);
}

// Path: packagesPage
class _StringsPackagesPageEn {
_StringsPackagesPageEn._(this._root);
class StringsPackagesPageEn {
StringsPackagesPageEn._(this._root);

final _StringsEn _root; // ignore: unused_field
final StringsEn _root; // ignore: unused_field

// Translations
String get searchPackages => 'Search Packages';
String get packageNotFound => 'Package not found.';
}

// Path: packageDetailsPage
class _StringsPackageDetailsPageEn {
_StringsPackageDetailsPageEn._(this._root);
class StringsPackageDetailsPageEn {
StringsPackageDetailsPageEn._(this._root);

final _StringsEn _root; // ignore: unused_field
final StringsEn _root; // ignore: unused_field

// Translations
String get title => 'Details';
Expand All @@ -180,10 +107,10 @@ class _StringsPackageDetailsPageEn {
}

// Path: settingsPage
class _StringsSettingsPageEn {
_StringsSettingsPageEn._(this._root);
class StringsSettingsPageEn {
StringsSettingsPageEn._(this._root);

final _StringsEn _root; // ignore: unused_field
final StringsEn _root; // ignore: unused_field

// Translations
String get title => 'Settings';
Expand All @@ -193,22 +120,22 @@ class _StringsSettingsPageEn {
}

// Path: bottomNaviBar
class _StringsBottomNaviBarEn {
_StringsBottomNaviBarEn._(this._root);
class StringsBottomNaviBarEn {
StringsBottomNaviBarEn._(this._root);

final _StringsEn _root; // ignore: unused_field
final StringsEn _root; // ignore: unused_field

// Translations
String get search => 'Search';
String get settings => 'Settings';
}

// Path: <root>
class _StringsJa implements _StringsEn {
class StringsJa implements StringsEn {

/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
_StringsJa.build({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver})
StringsJa.build({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver})
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
$meta = TranslationMetadata(
locale: AppLocale.ja,
Expand All @@ -220,36 +147,36 @@ class _StringsJa implements _StringsEn {
}

/// Metadata for the translations of <ja>.
@override final TranslationMetadata<AppLocale, _StringsEn> $meta;
@override final TranslationMetadata<AppLocale, StringsEn> $meta;

/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key);

@override late final _StringsJa _root = this; // ignore: unused_field
@override late final StringsJa _root = this; // ignore: unused_field

// Translations
@override late final _StringsPackagesPageJa packagesPage = _StringsPackagesPageJa._(_root);
@override late final _StringsPackageDetailsPageJa packageDetailsPage = _StringsPackageDetailsPageJa._(_root);
@override late final _StringsSettingsPageJa settingsPage = _StringsSettingsPageJa._(_root);
@override late final _StringsBottomNaviBarJa bottomNaviBar = _StringsBottomNaviBarJa._(_root);
@override late final StringsPackagesPageJa packagesPage = StringsPackagesPageJa._(_root);
@override late final StringsPackageDetailsPageJa packageDetailsPage = StringsPackageDetailsPageJa._(_root);
@override late final StringsSettingsPageJa settingsPage = StringsSettingsPageJa._(_root);
@override late final StringsBottomNaviBarJa bottomNaviBar = StringsBottomNaviBarJa._(_root);
}

// Path: packagesPage
class _StringsPackagesPageJa implements _StringsPackagesPageEn {
_StringsPackagesPageJa._(this._root);
class StringsPackagesPageJa implements StringsPackagesPageEn {
StringsPackagesPageJa._(this._root);

@override final _StringsJa _root; // ignore: unused_field
@override final StringsJa _root; // ignore: unused_field

// Translations
@override String get searchPackages => 'パッケージを検索';
@override String get packageNotFound => 'パッケージが見つかりません。';
}

// Path: packageDetailsPage
class _StringsPackageDetailsPageJa implements _StringsPackageDetailsPageEn {
_StringsPackageDetailsPageJa._(this._root);
class StringsPackageDetailsPageJa implements StringsPackageDetailsPageEn {
StringsPackageDetailsPageJa._(this._root);

@override final _StringsJa _root; // ignore: unused_field
@override final StringsJa _root; // ignore: unused_field

// Translations
@override String get title => '詳細';
Expand All @@ -258,10 +185,10 @@ class _StringsPackageDetailsPageJa implements _StringsPackageDetailsPageEn {
}

// Path: settingsPage
class _StringsSettingsPageJa implements _StringsSettingsPageEn {
_StringsSettingsPageJa._(this._root);
class StringsSettingsPageJa implements StringsSettingsPageEn {
StringsSettingsPageJa._(this._root);

@override final _StringsJa _root; // ignore: unused_field
@override final StringsJa _root; // ignore: unused_field

// Translations
@override String get title => '設定';
Expand All @@ -271,10 +198,10 @@ class _StringsSettingsPageJa implements _StringsSettingsPageEn {
}

// Path: bottomNaviBar
class _StringsBottomNaviBarJa implements _StringsBottomNaviBarEn {
_StringsBottomNaviBarJa._(this._root);
class StringsBottomNaviBarJa implements StringsBottomNaviBarEn {
StringsBottomNaviBarJa._(this._root);

@override final _StringsJa _root; // ignore: unused_field
@override final StringsJa _root; // ignore: unused_field

// Translations
@override String get search => '探す';
Expand All @@ -284,7 +211,7 @@ class _StringsBottomNaviBarJa implements _StringsBottomNaviBarEn {
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on _StringsEn {
extension on StringsEn {
dynamic _flatMapFunction(String path) {
switch (path) {
case 'packagesPage.searchPackages': return 'Search Packages';
Expand All @@ -303,7 +230,7 @@ extension on _StringsEn {
}
}

extension on _StringsJa {
extension on StringsJa {
dynamic _flatMapFunction(String path) {
switch (path) {
case 'packagesPage.searchPackages': return 'パッケージを検索';
Expand Down
4 changes: 4 additions & 0 deletions lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:npm/features/settings/language.dart';
import 'package:npm/features/settings/theme.dart';
import 'package:npm/router.dart';
import 'package:slang_flutter/slang_flutter.dart';

void main() => runApp(const ProviderScope(child: App()));

Expand All @@ -12,8 +14,10 @@ class App extends ConsumerWidget {
Widget build(BuildContext context, WidgetRef ref) {
final router = ref.watch(routerProvider);
final theme = ref.watch(themeProvider);
final locale = ref.watch(translationProvider).$meta.locale.flutterLocale;

return MaterialApp.router(
locale: locale,
debugShowCheckedModeBanner: false,
routerConfig: router,
theme: theme,
Expand Down
2 changes: 2 additions & 0 deletions slang.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
locale_handling: false
translation_class_visibility: public

0 comments on commit 6b7d247

Please sign in to comment.