first commit

This commit is contained in:
2025-03-03 20:59:42 +03:00
commit 273e68557a
1099 changed files with 17880 additions and 0 deletions

26
lib/i18n/en.i18n.json Normal file
View File

@@ -0,0 +1,26 @@
{
"app_name": "Tesmit",
"home_screen": {
"title" : "Home screen"
},
"settings_screen": {
"common": "Common",
"title" : "Settings",
"lang": "Language",
"lang_selection": "Language selection",
"theme": {
"dark_theme" : "Dark theme",
"light_theme" : "Light theme"
}
},
"auth_screen": {
"title": "Authorization"
},
"gal_screen": {
"title": "Gallery"
}
}

26
lib/i18n/ru.i18n.json Normal file
View File

@@ -0,0 +1,26 @@
{
"app_name": "Tesmit",
"home_screen": {
"title" : "Главная"
},
"settings_screen": {
"common": "Общее",
"title" : "Настройки",
"lang": "Язык",
"lang_selection": "Выбор языка",
"theme": {
"dark_theme" : "Темная тема",
"light_theme" : "Светлая тема"
}
},
"auth_screen": {
"title": "Авторизация"
},
"gal_screen": {
"title": "Галерея Краснодар"
}
}

182
lib/i18n/strings.g.dart Normal file
View File

@@ -0,0 +1,182 @@
/// Generated file. Do not edit.
///
/// Source: lib/i18n
/// To regenerate, run: `dart run slang`
///
/// Locales: 2
/// Strings: 20 (10 per locale)
///
/// Built on 2025-02-15 at 13:48 UTC
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'package:slang_flutter/slang_flutter.dart';
export 'package:slang_flutter/slang_flutter.dart';
import 'strings_en.g.dart' deferred as l_en;
part 'strings_ru.g.dart';
/// Supported locales.
///
/// Usage:
/// - LocaleSettings.setLocale(AppLocale.ru) // set locale
/// - Locale locale = AppLocale.ru.flutterLocale // get flutter locale from enum
/// - if (LocaleSettings.currentLocale == AppLocale.ru) // locale check
enum AppLocale with BaseAppLocale<AppLocale, Translations> {
ru(languageCode: 'ru'),
en(languageCode: 'en');
const AppLocale({
required this.languageCode,
this.scriptCode, // ignore: unused_element
this.countryCode, // ignore: unused_element
});
@override final String languageCode;
@override final String? scriptCode;
@override final String? countryCode;
@override
Future<Translations> build({
Map<String, Node>? overrides,
PluralResolver? cardinalResolver,
PluralResolver? ordinalResolver,
}) async {
switch (this) {
case AppLocale.ru:
return TranslationsRu(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.en:
await l_en.loadLibrary();
return l_en.TranslationsEn(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
}
}
@override
Translations buildSync({
Map<String, Node>? overrides,
PluralResolver? cardinalResolver,
PluralResolver? ordinalResolver,
}) {
switch (this) {
case AppLocale.ru:
return TranslationsRu(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.en:
return l_en.TranslationsEn(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
}
}
/// Gets current instance managed by [LocaleSettings].
Translations get translations => LocaleSettings.instance.getTranslations(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!
Translations 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 TranslationProvider extends BaseTranslationProvider<AppLocale, Translations> {
TranslationProvider({required super.child}) : super(settings: LocaleSettings.instance);
static InheritedLocaleData<AppLocale, Translations> of(BuildContext context) => InheritedLocaleData.of<AppLocale, Translations>(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 {
Translations get t => TranslationProvider.of(this).translations;
}
/// Manages all translation instances and the current locale
class LocaleSettings extends BaseFlutterLocaleSettings<AppLocale, Translations> {
LocaleSettings._() : super(
utils: AppLocaleUtils.instance,
lazy: true,
);
static final instance = LocaleSettings._();
// static aliases (checkout base methods for documentation)
static AppLocale get currentLocale => instance.currentLocale;
static Stream<AppLocale> getLocaleStream() => instance.getLocaleStream();
static Future<AppLocale> setLocale(AppLocale locale, {bool? listenToDeviceLocale = false}) => instance.setLocale(locale, listenToDeviceLocale: listenToDeviceLocale);
static Future<AppLocale> setLocaleRaw(String rawLocale, {bool? listenToDeviceLocale = false}) => instance.setLocaleRaw(rawLocale, listenToDeviceLocale: listenToDeviceLocale);
static Future<AppLocale> useDeviceLocale() => instance.useDeviceLocale();
static Future<void> setPluralResolver({String? language, AppLocale? locale, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) => instance.setPluralResolver(
language: language,
locale: locale,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
// synchronous versions
static AppLocale setLocaleSync(AppLocale locale, {bool? listenToDeviceLocale = false}) => instance.setLocaleSync(locale, listenToDeviceLocale: listenToDeviceLocale);
static AppLocale setLocaleRawSync(String rawLocale, {bool? listenToDeviceLocale = false}) => instance.setLocaleRawSync(rawLocale, listenToDeviceLocale: listenToDeviceLocale);
static AppLocale useDeviceLocaleSync() => instance.useDeviceLocaleSync();
static void setPluralResolverSync({String? language, AppLocale? locale, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) => instance.setPluralResolverSync(
language: language,
locale: locale,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
}
/// Provides utility functions without any side effects.
class AppLocaleUtils extends BaseAppLocaleUtils<AppLocale, Translations> {
AppLocaleUtils._() : super(
baseLocale: AppLocale.ru,
locales: AppLocale.values,
);
static final instance = AppLocaleUtils._();
// static aliases (checkout base methods for documentation)
static AppLocale parse(String rawLocale) => instance.parse(rawLocale);
static AppLocale parseLocaleParts({required String languageCode, String? scriptCode, String? countryCode}) => instance.parseLocaleParts(languageCode: languageCode, scriptCode: scriptCode, countryCode: countryCode);
static AppLocale findDeviceLocale() => instance.findDeviceLocale();
static List<Locale> get supportedLocales => instance.supportedLocales;
static List<String> get supportedLocalesRaw => instance.supportedLocalesRaw;
}

119
lib/i18n/strings_en.g.dart Normal file
View File

@@ -0,0 +1,119 @@
///
/// Generated file. Do not edit.
///
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsEn extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsEn({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,
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
/// Metadata for the translations of <en>.
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsEn _root = this; // ignore: unused_field
// Translations
@override String get app_name => 'Tesmit';
@override late final _TranslationsHomeScreenEn home_screen = _TranslationsHomeScreenEn._(_root);
@override late final _TranslationsSettingsScreenEn settings_screen = _TranslationsSettingsScreenEn._(_root);
@override late final _TranslationsAuthScreenEn auth_screen = _TranslationsAuthScreenEn._(_root);
@override late final _TranslationsGalScreenEn gal_screen = _TranslationsGalScreenEn._(_root);
}
// Path: home_screen
class _TranslationsHomeScreenEn extends TranslationsHomeScreenRu {
_TranslationsHomeScreenEn._(TranslationsEn root) : this._root = root, super.internal(root);
final TranslationsEn _root; // ignore: unused_field
// Translations
@override String get title => 'Home screen';
}
// Path: settings_screen
class _TranslationsSettingsScreenEn extends TranslationsSettingsScreenRu {
_TranslationsSettingsScreenEn._(TranslationsEn root) : this._root = root, super.internal(root);
final TranslationsEn _root; // ignore: unused_field
// Translations
@override String get common => 'Common';
@override String get title => 'Settings';
@override String get lang => 'Language';
@override String get lang_selection => 'Language selection';
@override late final _TranslationsSettingsScreenThemeEn theme = _TranslationsSettingsScreenThemeEn._(_root);
}
// Path: auth_screen
class _TranslationsAuthScreenEn extends TranslationsAuthScreenRu {
_TranslationsAuthScreenEn._(TranslationsEn root) : this._root = root, super.internal(root);
final TranslationsEn _root; // ignore: unused_field
// Translations
@override String get title => 'Authorization';
}
// Path: gal_screen
class _TranslationsGalScreenEn extends TranslationsGalScreenRu {
_TranslationsGalScreenEn._(TranslationsEn root) : this._root = root, super.internal(root);
final TranslationsEn _root; // ignore: unused_field
// Translations
@override String get title => 'Gallery';
}
// Path: settings_screen.theme
class _TranslationsSettingsScreenThemeEn extends TranslationsSettingsScreenThemeRu {
_TranslationsSettingsScreenThemeEn._(TranslationsEn root) : this._root = root, super.internal(root);
final TranslationsEn _root; // ignore: unused_field
// Translations
@override String get dark_theme => 'Dark theme';
@override String get light_theme => 'Light theme';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsEn {
dynamic _flatMapFunction(String path) {
switch (path) {
case 'app_name': return 'Tesmit';
case 'home_screen.title': return 'Home screen';
case 'settings_screen.common': return 'Common';
case 'settings_screen.title': return 'Settings';
case 'settings_screen.lang': return 'Language';
case 'settings_screen.lang_selection': return 'Language selection';
case 'settings_screen.theme.dark_theme': return 'Dark theme';
case 'settings_screen.theme.light_theme': return 'Light theme';
case 'auth_screen.title': return 'Authorization';
case 'gal_screen.title': return 'Gallery';
default: return null;
}
}
}

121
lib/i18n/strings_ru.g.dart Normal file
View File

@@ -0,0 +1,121 @@
///
/// Generated file. Do not edit.
///
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
part of 'strings.g.dart';
// Path: <root>
typedef TranslationsRu = Translations; // ignore: unused_element
class Translations implements BaseTranslations<AppLocale, Translations> {
/// Returns the current translations of the given [context].
///
/// Usage:
/// final t = Translations.of(context);
static Translations of(BuildContext context) => InheritedLocaleData.of<AppLocale, Translations>(context).translations;
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
Translations({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.ru,
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
) {
$meta.setFlatMapFunction(_flatMapFunction);
}
/// Metadata for the translations of <ru>.
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
dynamic operator[](String key) => $meta.getTranslation(key);
late final Translations _root = this; // ignore: unused_field
// Translations
String get app_name => 'Tesmit';
late final TranslationsHomeScreenRu home_screen = TranslationsHomeScreenRu.internal(_root);
late final TranslationsSettingsScreenRu settings_screen = TranslationsSettingsScreenRu.internal(_root);
late final TranslationsAuthScreenRu auth_screen = TranslationsAuthScreenRu.internal(_root);
late final TranslationsGalScreenRu gal_screen = TranslationsGalScreenRu.internal(_root);
}
// Path: home_screen
class TranslationsHomeScreenRu {
TranslationsHomeScreenRu.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String get title => 'Главная';
}
// Path: settings_screen
class TranslationsSettingsScreenRu {
TranslationsSettingsScreenRu.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String get common => 'Общее';
String get title => 'Настройки';
String get lang => 'Язык';
String get lang_selection => 'Выбор языка';
late final TranslationsSettingsScreenThemeRu theme = TranslationsSettingsScreenThemeRu.internal(_root);
}
// Path: auth_screen
class TranslationsAuthScreenRu {
TranslationsAuthScreenRu.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String get title => 'Авторизация';
}
// Path: gal_screen
class TranslationsGalScreenRu {
TranslationsGalScreenRu.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String get title => 'Галерея Краснодар';
}
// Path: settings_screen.theme
class TranslationsSettingsScreenThemeRu {
TranslationsSettingsScreenThemeRu.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String get dark_theme => 'Темная тема';
String get light_theme => 'Светлая тема';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on Translations {
dynamic _flatMapFunction(String path) {
switch (path) {
case 'app_name': return 'Tesmit';
case 'home_screen.title': return 'Главная';
case 'settings_screen.common': return 'Общее';
case 'settings_screen.title': return 'Настройки';
case 'settings_screen.lang': return 'Язык';
case 'settings_screen.lang_selection': return 'Выбор языка';
case 'settings_screen.theme.dark_theme': return 'Темная тема';
case 'settings_screen.theme.light_theme': return 'Светлая тема';
case 'auth_screen.title': return 'Авторизация';
case 'gal_screen.title': return 'Галерея Краснодар';
default: return null;
}
}
}