Notification parsing: - Per-app parse rules (parse_rules.packageName; getEnabledForApp, NULL = legacy global) - Transfer pairing: transfer_pair_matcher + transfer_pairing_blocklist table/dao/repo - source_apps.selfMerchant flag (Ozon inbox rework: default account picker, suppress AI category prefill + rule suggestion) - raw_messages.diagnostics dump captured under diagnostic-mode toggle - Inbox card / settings / log UI reworks Onboarding: - Two-step flow (name -> first account); UserSeeder seeds categories only, no accounts Schema bumped to v11; drop obsolete migration + mixed-merchant tests, add new coverage. Add ios/ platform folder. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2139 lines
65 KiB
Dart
2139 lines
65 KiB
Dart
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_ru.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<AppLocalizations>(context, AppLocalizations);
|
||
}
|
||
|
||
static const LocalizationsDelegate<AppLocalizations> 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<LocalizationsDelegate<dynamic>> localizationsDelegates =
|
||
<LocalizationsDelegate<dynamic>>[
|
||
delegate,
|
||
GlobalMaterialLocalizations.delegate,
|
||
GlobalCupertinoLocalizations.delegate,
|
||
GlobalWidgetsLocalizations.delegate,
|
||
];
|
||
|
||
/// A list of this localizations delegate's supported locales.
|
||
static const List<Locale> supportedLocales = <Locale>[
|
||
Locale('en'),
|
||
Locale('ru'),
|
||
];
|
||
|
||
/// No description provided for @appTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Kitty finances'**
|
||
String get appTitle;
|
||
|
||
/// No description provided for @navHome.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Главная'**
|
||
String get navHome;
|
||
|
||
/// No description provided for @navAnalytics.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Аналитика'**
|
||
String get navAnalytics;
|
||
|
||
/// No description provided for @navAccounts.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Счета'**
|
||
String get navAccounts;
|
||
|
||
/// No description provided for @navProfile.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Профиль'**
|
||
String get navProfile;
|
||
|
||
/// No description provided for @allAccounts.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Все'**
|
||
String get allAccounts;
|
||
|
||
/// No description provided for @comingSoon.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Скоро'**
|
||
String get comingSoon;
|
||
|
||
/// No description provided for @budget.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'БЮДЖЕТ'**
|
||
String get budget;
|
||
|
||
/// No description provided for @balance.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'БАЛАНС'**
|
||
String get balance;
|
||
|
||
/// No description provided for @income.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'ДОХОДЫ'**
|
||
String get income;
|
||
|
||
/// No description provided for @expenses.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'РАСХОДЫ'**
|
||
String get expenses;
|
||
|
||
/// No description provided for @transactions.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Транзакции'**
|
||
String get transactions;
|
||
|
||
/// No description provided for @transactionCount.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'{count, plural, one{{count} операция} few{{count} операции} many{{count} операций} other{{count} операций}}'**
|
||
String transactionCount(int count);
|
||
|
||
/// No description provided for @allCategoriesFilter.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Все категории · все типы'**
|
||
String get allCategoriesFilter;
|
||
|
||
/// No description provided for @filterByCategories.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Фильтр по категориям'**
|
||
String get filterByCategories;
|
||
|
||
/// No description provided for @clearFilter.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Сбросить'**
|
||
String get clearFilter;
|
||
|
||
/// No description provided for @selectAll.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Выбрать все'**
|
||
String get selectAll;
|
||
|
||
/// No description provided for @categoriesSelectedCount.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'{count, plural, one{{count} категория} few{{count} категории} many{{count} категорий} other{{count} категорий}}'**
|
||
String categoriesSelectedCount(int count);
|
||
|
||
/// No description provided for @moreCategories.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'{count, plural, one{+ ещё {count} категория →} few{+ ещё {count} категории →} many{+ ещё {count} категорий →} other{+ ещё {count} категорий →}}'**
|
||
String moreCategories(int count);
|
||
|
||
/// No description provided for @todayWithDate.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Сегодня · {date}'**
|
||
String todayWithDate(String date);
|
||
|
||
/// No description provided for @yesterdayWithDate.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Вчера · {date}'**
|
||
String yesterdayWithDate(String date);
|
||
|
||
/// No description provided for @analyticsTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Отчёты'**
|
||
String get analyticsTitle;
|
||
|
||
/// No description provided for @analyticsSubtitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Аналитика'**
|
||
String get analyticsSubtitle;
|
||
|
||
/// No description provided for @accountsSubtitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Управление'**
|
||
String get accountsSubtitle;
|
||
|
||
/// No description provided for @profileSubtitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Настройки'**
|
||
String get profileSubtitle;
|
||
|
||
/// No description provided for @darkTheme.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Тёмная тема'**
|
||
String get darkTheme;
|
||
|
||
/// No description provided for @profileLanguageTile.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Язык'**
|
||
String get profileLanguageTile;
|
||
|
||
/// No description provided for @langEnglish.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'English'**
|
||
String get langEnglish;
|
||
|
||
/// No description provided for @langRussian.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Русский'**
|
||
String get langRussian;
|
||
|
||
/// No description provided for @profileHint.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Здесь появится профиль пользователя, валюта, локаль и другие настройки.'**
|
||
String get profileHint;
|
||
|
||
/// No description provided for @onboardingTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Добро пожаловать'**
|
||
String get onboardingTitle;
|
||
|
||
/// No description provided for @onboardingSubtitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Расскажите, как к вам обращаться.'**
|
||
String get onboardingSubtitle;
|
||
|
||
/// No description provided for @onboardingNameLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Ваше имя'**
|
||
String get onboardingNameLabel;
|
||
|
||
/// No description provided for @onboardingNameHint.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Например, Алекс'**
|
||
String get onboardingNameHint;
|
||
|
||
/// No description provided for @onboardingContinue.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Продолжить'**
|
||
String get onboardingContinue;
|
||
|
||
/// No description provided for @onboardingAccountTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Ваш первый счёт'**
|
||
String get onboardingAccountTitle;
|
||
|
||
/// No description provided for @onboardingAccountSubtitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Добавьте счёт, чтобы учитывать деньги. Другие счета можно добавить позже.'**
|
||
String get onboardingAccountSubtitle;
|
||
|
||
/// No description provided for @txNewTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Новая операция'**
|
||
String get txNewTitle;
|
||
|
||
/// No description provided for @txEditTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Редактировать операцию'**
|
||
String get txEditTitle;
|
||
|
||
/// No description provided for @txTypeExpense.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Расход'**
|
||
String get txTypeExpense;
|
||
|
||
/// No description provided for @txTypeIncome.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Доход'**
|
||
String get txTypeIncome;
|
||
|
||
/// No description provided for @txTypeTransfer.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Перевод'**
|
||
String get txTypeTransfer;
|
||
|
||
/// No description provided for @txAmountHint.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'0'**
|
||
String get txAmountHint;
|
||
|
||
/// No description provided for @txCategoryLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Категория'**
|
||
String get txCategoryLabel;
|
||
|
||
/// No description provided for @txAccountLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Счёт списания'**
|
||
String get txAccountLabel;
|
||
|
||
/// No description provided for @txAccountFromLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Откуда'**
|
||
String get txAccountFromLabel;
|
||
|
||
/// No description provided for @txAccountToLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Куда'**
|
||
String get txAccountToLabel;
|
||
|
||
/// No description provided for @txDateTimeLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Дата и время'**
|
||
String get txDateTimeLabel;
|
||
|
||
/// No description provided for @txBalanceAfter.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Остаток после'**
|
||
String get txBalanceAfter;
|
||
|
||
/// No description provided for @txTransferAfter.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'После перевода'**
|
||
String get txTransferAfter;
|
||
|
||
/// No description provided for @txNoteLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Мерчант'**
|
||
String get txNoteLabel;
|
||
|
||
/// No description provided for @txNoteHint.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Например, Пятерочка…'**
|
||
String get txNoteHint;
|
||
|
||
/// No description provided for @txExtraInfoLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Доп. информация'**
|
||
String get txExtraInfoLabel;
|
||
|
||
/// No description provided for @txExtraInfoHint.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Например, продукты на неделю…'**
|
||
String get txExtraInfoHint;
|
||
|
||
/// No description provided for @txSaveButton.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Добавить транзакцию'**
|
||
String get txSaveButton;
|
||
|
||
/// No description provided for @txSaveEditButton.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Сохранить'**
|
||
String get txSaveEditButton;
|
||
|
||
/// No description provided for @txTransferButton.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Перевести {amount}'**
|
||
String txTransferButton(String amount);
|
||
|
||
/// No description provided for @txDeleteButton.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Удалить'**
|
||
String get txDeleteButton;
|
||
|
||
/// No description provided for @txDeleteConfirmTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Удалить транзакцию?'**
|
||
String get txDeleteConfirmTitle;
|
||
|
||
/// No description provided for @txDeleteConfirmMessage.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Действие нельзя отменить.'**
|
||
String get txDeleteConfirmMessage;
|
||
|
||
/// No description provided for @txDeleteConfirmYes.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Удалить'**
|
||
String get txDeleteConfirmYes;
|
||
|
||
/// No description provided for @txDeleteConfirmNo.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Отмена'**
|
||
String get txDeleteConfirmNo;
|
||
|
||
/// No description provided for @txPickCategory.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Выберите категорию'**
|
||
String get txPickCategory;
|
||
|
||
/// No description provided for @txPickAccount.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Выберите счёт'**
|
||
String get txPickAccount;
|
||
|
||
/// No description provided for @pickerAccountTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Счёт'**
|
||
String get pickerAccountTitle;
|
||
|
||
/// No description provided for @pickerAccountSubtitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'{count, plural, one{{count} счёт} few{{count} счёта} many{{count} счетов} other{{count} счетов}}'**
|
||
String pickerAccountSubtitle(int count);
|
||
|
||
/// No description provided for @pickerCategoryTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Категория'**
|
||
String get pickerCategoryTitle;
|
||
|
||
/// No description provided for @pickerCategorySubtitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'{count, plural, one{{count} категория} few{{count} категории} many{{count} категорий} other{{count} категорий}}'**
|
||
String pickerCategorySubtitle(int count);
|
||
|
||
/// No description provided for @pickerAddAccount.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Добавить счёт'**
|
||
String get pickerAddAccount;
|
||
|
||
/// No description provided for @pickerCreateCategory.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Создать категорию'**
|
||
String get pickerCreateCategory;
|
||
|
||
/// No description provided for @comingSoonShort.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Скоро'**
|
||
String get comingSoonShort;
|
||
|
||
/// No description provided for @txValidationAmountRequired.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Введите сумму'**
|
||
String get txValidationAmountRequired;
|
||
|
||
/// No description provided for @txValidationAccountRequired.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Выберите счёт'**
|
||
String get txValidationAccountRequired;
|
||
|
||
/// No description provided for @txValidationCategoryRequired.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Выберите категорию'**
|
||
String get txValidationCategoryRequired;
|
||
|
||
/// No description provided for @txValidationTransferSameAccount.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Счёт-источник и счёт-получатель должны отличаться'**
|
||
String get txValidationTransferSameAccount;
|
||
|
||
/// No description provided for @txValidationTransferDestRequired.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Выберите счёт получателя'**
|
||
String get txValidationTransferDestRequired;
|
||
|
||
/// No description provided for @categoriesScreenTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Категории'**
|
||
String get categoriesScreenTitle;
|
||
|
||
/// No description provided for @categoriesEmpty.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Пока нет категорий. Нажмите +, чтобы создать первую.'**
|
||
String get categoriesEmpty;
|
||
|
||
/// No description provided for @categoryNewTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Новая категория'**
|
||
String get categoryNewTitle;
|
||
|
||
/// No description provided for @categoryEditTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Редактировать категорию'**
|
||
String get categoryEditTitle;
|
||
|
||
/// No description provided for @categoryNameLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Название'**
|
||
String get categoryNameLabel;
|
||
|
||
/// No description provided for @categoryNameHint.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Например, Продукты'**
|
||
String get categoryNameHint;
|
||
|
||
/// No description provided for @categoryIconLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Иконка'**
|
||
String get categoryIconLabel;
|
||
|
||
/// No description provided for @categoryColorLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Цвет'**
|
||
String get categoryColorLabel;
|
||
|
||
/// No description provided for @categorySaveButton.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Создать категорию'**
|
||
String get categorySaveButton;
|
||
|
||
/// No description provided for @categoryArchiveButton.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'В архив'**
|
||
String get categoryArchiveButton;
|
||
|
||
/// No description provided for @categoryArchiveConfirmTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Архивировать категорию?'**
|
||
String get categoryArchiveConfirmTitle;
|
||
|
||
/// No description provided for @categoryArchiveConfirmMessage.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Архивные категории исчезают из пикеров и списков. Существующие транзакции сохранят ссылку на неё.'**
|
||
String get categoryArchiveConfirmMessage;
|
||
|
||
/// No description provided for @categoryValidationNameRequired.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Введите название'**
|
||
String get categoryValidationNameRequired;
|
||
|
||
/// No description provided for @categoryValidationNameTooLong.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Слишком длинное название (не больше 50 символов)'**
|
||
String get categoryValidationNameTooLong;
|
||
|
||
/// No description provided for @iconPickerTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Выберите иконку'**
|
||
String get iconPickerTitle;
|
||
|
||
/// No description provided for @colorPickerTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Выберите цвет'**
|
||
String get colorPickerTitle;
|
||
|
||
/// No description provided for @currencyPickerTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Выберите валюту'**
|
||
String get currencyPickerTitle;
|
||
|
||
/// No description provided for @currencyPickerSearchHint.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Поиск…'**
|
||
String get currencyPickerSearchHint;
|
||
|
||
/// No description provided for @colorPickerAllUsed.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Все цвета палитры уже заняты другими категориями.'**
|
||
String get colorPickerAllUsed;
|
||
|
||
/// No description provided for @iconGroupFood.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Еда'**
|
||
String get iconGroupFood;
|
||
|
||
/// No description provided for @iconGroupTransport.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Транспорт'**
|
||
String get iconGroupTransport;
|
||
|
||
/// No description provided for @iconGroupShopping.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Покупки'**
|
||
String get iconGroupShopping;
|
||
|
||
/// No description provided for @iconGroupHome.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Дом'**
|
||
String get iconGroupHome;
|
||
|
||
/// No description provided for @iconGroupHealth.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Здоровье'**
|
||
String get iconGroupHealth;
|
||
|
||
/// No description provided for @iconGroupEntertainment.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Досуг'**
|
||
String get iconGroupEntertainment;
|
||
|
||
/// No description provided for @iconGroupWork.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Работа'**
|
||
String get iconGroupWork;
|
||
|
||
/// No description provided for @iconGroupTravel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Путешествия'**
|
||
String get iconGroupTravel;
|
||
|
||
/// No description provided for @iconGroupFinance.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Финансы'**
|
||
String get iconGroupFinance;
|
||
|
||
/// No description provided for @iconGroupOther.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Прочее'**
|
||
String get iconGroupOther;
|
||
|
||
/// No description provided for @profileCategoriesTile.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Категории'**
|
||
String get profileCategoriesTile;
|
||
|
||
/// No description provided for @profileAccountsTile.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Счета'**
|
||
String get profileAccountsTile;
|
||
|
||
/// No description provided for @accountsEmpty.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Счетов нет. Нажмите +, чтобы добавить.'**
|
||
String get accountsEmpty;
|
||
|
||
/// No description provided for @accountNewTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Новый счёт'**
|
||
String get accountNewTitle;
|
||
|
||
/// No description provided for @accountEditTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Редактировать счёт'**
|
||
String get accountEditTitle;
|
||
|
||
/// No description provided for @accountNameLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Название'**
|
||
String get accountNameLabel;
|
||
|
||
/// No description provided for @accountNameHint.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'напр. Кошелёк'**
|
||
String get accountNameHint;
|
||
|
||
/// No description provided for @accountTypeLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Тип'**
|
||
String get accountTypeLabel;
|
||
|
||
/// No description provided for @accountTypeCash.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Наличные'**
|
||
String get accountTypeCash;
|
||
|
||
/// No description provided for @accountTypeCard.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Карта'**
|
||
String get accountTypeCard;
|
||
|
||
/// No description provided for @accountTypeBank.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Банк'**
|
||
String get accountTypeBank;
|
||
|
||
/// No description provided for @accountTypeSavings.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Накопления'**
|
||
String get accountTypeSavings;
|
||
|
||
/// No description provided for @accountCurrencyLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Валюта'**
|
||
String get accountCurrencyLabel;
|
||
|
||
/// No description provided for @accountInitialBalanceLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Начальный баланс'**
|
||
String get accountInitialBalanceLabel;
|
||
|
||
/// No description provided for @accountIconLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Иконка'**
|
||
String get accountIconLabel;
|
||
|
||
/// No description provided for @accountColorLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Цвет'**
|
||
String get accountColorLabel;
|
||
|
||
/// No description provided for @accountIsDefaultLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Счёт по умолчанию'**
|
||
String get accountIsDefaultLabel;
|
||
|
||
/// No description provided for @accountIsDefaultHint.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Подставляется при создании транзакций'**
|
||
String get accountIsDefaultHint;
|
||
|
||
/// No description provided for @accountSaveButton.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Создать счёт'**
|
||
String get accountSaveButton;
|
||
|
||
/// No description provided for @accountSaveEditButton.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Сохранить'**
|
||
String get accountSaveEditButton;
|
||
|
||
/// No description provided for @accountArchiveButton.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Архивировать'**
|
||
String get accountArchiveButton;
|
||
|
||
/// No description provided for @accountArchiveConfirmTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Архивировать счёт?'**
|
||
String get accountArchiveConfirmTitle;
|
||
|
||
/// No description provided for @accountArchiveConfirmMessage.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Архивные счета исчезают из списков и пикеров. Существующие транзакции сохранят ссылку.'**
|
||
String get accountArchiveConfirmMessage;
|
||
|
||
/// No description provided for @accountValidationNameRequired.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Введите название'**
|
||
String get accountValidationNameRequired;
|
||
|
||
/// No description provided for @accountValidationNameTooLong.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Слишком длинное название (макс. 50 символов)'**
|
||
String get accountValidationNameTooLong;
|
||
|
||
/// No description provided for @accountSaveError.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Не удалось сохранить счёт. Попробуйте ещё раз.'**
|
||
String get accountSaveError;
|
||
|
||
/// No description provided for @accountArchiveError.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Не удалось архивировать счёт. Попробуйте ещё раз.'**
|
||
String get accountArchiveError;
|
||
|
||
/// No description provided for @accountSetDefaultError.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Счёт сохранён, но не удалось сделать его умолчательным.'**
|
||
String get accountSetDefaultError;
|
||
|
||
/// No description provided for @profileParsingTile.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Парсинг уведомлений'**
|
||
String get profileParsingTile;
|
||
|
||
/// No description provided for @parsingSettingsTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Парсинг уведомлений'**
|
||
String get parsingSettingsTitle;
|
||
|
||
/// No description provided for @parsingSettingsSubtitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Настройки'**
|
||
String get parsingSettingsSubtitle;
|
||
|
||
/// No description provided for @parsingEnableLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Распознавать уведомления'**
|
||
String get parsingEnableLabel;
|
||
|
||
/// No description provided for @parsingAutoApplyLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Авто-добавление транзакций'**
|
||
String get parsingAutoApplyLabel;
|
||
|
||
/// No description provided for @parsingAutoApplyHint.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Добавлять без подтверждения, когда есть правило, сумма найдена в тексте сообщения и счёт определён надёжно.'**
|
||
String get parsingAutoApplyHint;
|
||
|
||
/// No description provided for @parsingTransferPairingLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Склеивать переводы между счетами'**
|
||
String get parsingTransferPairingLabel;
|
||
|
||
/// No description provided for @parsingTransferPairingHint.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Два уведомления об одном переводе (списание + зачисление) объединяются в одну транзакцию-перевод на подтверждение.'**
|
||
String get parsingTransferPairingHint;
|
||
|
||
/// No description provided for @parsingDiagnosticModeLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Режим диагностики'**
|
||
String get parsingDiagnosticModeLabel;
|
||
|
||
/// No description provided for @parsingDiagnosticModeHint.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Ловить каждое уведомление от мониторимых приложений (включая пустые/повторные) с полным дампом всех полей. Временно — для отладки, добавляет шум в журнал парсинга.'**
|
||
String get parsingDiagnosticModeHint;
|
||
|
||
/// No description provided for @inboxWhyNotAuto.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Почему не автоматически: {reasons}'**
|
||
String inboxWhyNotAuto(String reasons);
|
||
|
||
/// No description provided for @gateCheckRuleMatched.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'нет правила для мерчанта'**
|
||
String get gateCheckRuleMatched;
|
||
|
||
/// No description provided for @gateCheckAmountVerifiedInBody.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'сумма не найдена в тексте сообщения'**
|
||
String get gateCheckAmountVerifiedInBody;
|
||
|
||
/// No description provided for @gateCheckCurrencyKnown.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'валюта не распознана'**
|
||
String get gateCheckCurrencyKnown;
|
||
|
||
/// No description provided for @gateCheckTypeMatchesRule.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'тип операции отличается от правила'**
|
||
String get gateCheckTypeMatchesRule;
|
||
|
||
/// No description provided for @gateCheckAccountResolved.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'счёт не определён'**
|
||
String get gateCheckAccountResolved;
|
||
|
||
/// No description provided for @gateCheckAccountTrusted.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'счёт неоднозначен'**
|
||
String get gateCheckAccountTrusted;
|
||
|
||
/// No description provided for @gateCheckAmountUnderCap.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'слишком крупная сумма'**
|
||
String get gateCheckAmountUnderCap;
|
||
|
||
/// No description provided for @parsingRulesTile.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Правила парсинга'**
|
||
String get parsingRulesTile;
|
||
|
||
/// No description provided for @parsingRulesCreatedCount.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Правил создано: {count}'**
|
||
String parsingRulesCreatedCount(int count);
|
||
|
||
/// No description provided for @parsingAiSectionTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'AI (DeepSeek)'**
|
||
String get parsingAiSectionTitle;
|
||
|
||
/// No description provided for @parsingAiComingSoon.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'ИИ-распознавание появится в следующей версии.'**
|
||
String get parsingAiComingSoon;
|
||
|
||
/// No description provided for @parsingNotifAccessTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Доступ к уведомлениям'**
|
||
String get parsingNotifAccessTitle;
|
||
|
||
/// No description provided for @parsingNotifAccessGranted.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Выдан — уведомления читаются'**
|
||
String get parsingNotifAccessGranted;
|
||
|
||
/// No description provided for @parsingNotifAccessDenied.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Не выдан — нажмите, чтобы открыть настройки'**
|
||
String get parsingNotifAccessDenied;
|
||
|
||
/// No description provided for @parsingNotifAccessOpenSettings.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Открыть настройки'**
|
||
String get parsingNotifAccessOpenSettings;
|
||
|
||
/// No description provided for @parsingDebugSectionTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Отладка'**
|
||
String get parsingDebugSectionTitle;
|
||
|
||
/// No description provided for @parsingDebugInjectTile.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Вставить тестовое уведомление'**
|
||
String get parsingDebugInjectTile;
|
||
|
||
/// No description provided for @parsingLogTile.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Журнал парсинга'**
|
||
String get parsingLogTile;
|
||
|
||
/// No description provided for @parsingLogTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Журнал парсинга'**
|
||
String get parsingLogTitle;
|
||
|
||
/// No description provided for @parsingLogEmpty.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Сообщений пока нет. Входящие уведомления появятся здесь.'**
|
||
String get parsingLogEmpty;
|
||
|
||
/// No description provided for @parsingLogError.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Не удалось загрузить журнал.'**
|
||
String get parsingLogError;
|
||
|
||
/// No description provided for @parsingLogFilterAll.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Все'**
|
||
String get parsingLogFilterAll;
|
||
|
||
/// No description provided for @parsingLogFilterInbox.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Inbox'**
|
||
String get parsingLogFilterInbox;
|
||
|
||
/// No description provided for @parsingLogFilterApplied.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Применённые'**
|
||
String get parsingLogFilterApplied;
|
||
|
||
/// No description provided for @parsingLogFilterIgnored.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Игнорированные'**
|
||
String get parsingLogFilterIgnored;
|
||
|
||
/// No description provided for @parsingLogFilterFailed.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Ошибки'**
|
||
String get parsingLogFilterFailed;
|
||
|
||
/// No description provided for @parsingStatusPending.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'В очереди'**
|
||
String get parsingStatusPending;
|
||
|
||
/// No description provided for @parsingStatusInbox.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Inbox'**
|
||
String get parsingStatusInbox;
|
||
|
||
/// No description provided for @parsingStatusApplied.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Применено'**
|
||
String get parsingStatusApplied;
|
||
|
||
/// No description provided for @parsingStatusIgnored.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Игнорировано'**
|
||
String get parsingStatusIgnored;
|
||
|
||
/// No description provided for @parsingStatusFailed.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Ошибка'**
|
||
String get parsingStatusFailed;
|
||
|
||
/// No description provided for @parsingStatusPendingAi.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Ждёт AI'**
|
||
String get parsingStatusPendingAi;
|
||
|
||
/// No description provided for @parsingStatusParsedPartial.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Частично'**
|
||
String get parsingStatusParsedPartial;
|
||
|
||
/// No description provided for @parsingStatusWaitingPair.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Ждёт пару'**
|
||
String get parsingStatusWaitingPair;
|
||
|
||
/// No description provided for @parsingStatusPaired.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Объединено в перевод'**
|
||
String get parsingStatusPaired;
|
||
|
||
/// No description provided for @parsingUnmergeTransfer.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Расклеить перевод'**
|
||
String get parsingUnmergeTransfer;
|
||
|
||
/// No description provided for @parsingLogOnline.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Онлайн'**
|
||
String get parsingLogOnline;
|
||
|
||
/// No description provided for @parsingLogOffline.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Офлайн'**
|
||
String get parsingLogOffline;
|
||
|
||
/// No description provided for @parsingLogFilterWaiting.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Ждёт сети'**
|
||
String get parsingLogFilterWaiting;
|
||
|
||
/// No description provided for @parsingDetailConfidence.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Уверенность'**
|
||
String get parsingDetailConfidence;
|
||
|
||
/// No description provided for @parsingDetailPipeline.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Pipeline'**
|
||
String get parsingDetailPipeline;
|
||
|
||
/// No description provided for @parsingDetailMessage.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Сообщение'**
|
||
String get parsingDetailMessage;
|
||
|
||
/// No description provided for @parsingDetailDraft.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Черновик'**
|
||
String get parsingDetailDraft;
|
||
|
||
/// No description provided for @parsingDetailRule.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Предложение правила'**
|
||
String get parsingDetailRule;
|
||
|
||
/// No description provided for @parsingDetailMeta.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Мета'**
|
||
String get parsingDetailMeta;
|
||
|
||
/// No description provided for @parsingDetailDiagnostics.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Диагностика'**
|
||
String get parsingDetailDiagnostics;
|
||
|
||
/// No description provided for @parsingDetailAttempt.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Попытка {count}/{max}'**
|
||
String parsingDetailAttempt(int count, int max);
|
||
|
||
/// No description provided for @parsingDetailSource.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Источник'**
|
||
String get parsingDetailSource;
|
||
|
||
/// No description provided for @parsingDetailFailedChecks.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Почему не автоматически'**
|
||
String get parsingDetailFailedChecks;
|
||
|
||
/// No description provided for @parsingDetailAmountScore.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Сумма'**
|
||
String get parsingDetailAmountScore;
|
||
|
||
/// No description provided for @parsingDetailAccountScore.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Счёт'**
|
||
String get parsingDetailAccountScore;
|
||
|
||
/// No description provided for @parsingDetailTypeScore.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Тип'**
|
||
String get parsingDetailTypeScore;
|
||
|
||
/// No description provided for @parsingDetailMerchantScore.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Мерчант'**
|
||
String get parsingDetailMerchantScore;
|
||
|
||
/// No description provided for @parsingDetailCategoryScore.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Категория'**
|
||
String get parsingDetailCategoryScore;
|
||
|
||
/// No description provided for @parsingDetailTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Заголовок'**
|
||
String get parsingDetailTitle;
|
||
|
||
/// No description provided for @parsingDetailBody.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Текст'**
|
||
String get parsingDetailBody;
|
||
|
||
/// No description provided for @parsingDetailCard.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Карта'**
|
||
String get parsingDetailCard;
|
||
|
||
/// No description provided for @parsingDetailCurrency.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Валюта'**
|
||
String get parsingDetailCurrency;
|
||
|
||
/// No description provided for @parsingDetailKind.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Вид'**
|
||
String get parsingDetailKind;
|
||
|
||
/// No description provided for @parsingDetailDate.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Дата'**
|
||
String get parsingDetailDate;
|
||
|
||
/// No description provided for @parsingDetailMerchantRaw.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Мерчант (сырой)'**
|
||
String get parsingDetailMerchantRaw;
|
||
|
||
/// No description provided for @parsingDetailMerchantCanonical.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Мерчант (норм.)'**
|
||
String get parsingDetailMerchantCanonical;
|
||
|
||
/// No description provided for @parsingDetailCounterparty.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Контрагент'**
|
||
String get parsingDetailCounterparty;
|
||
|
||
/// No description provided for @parsingDetailCategorySuggestion.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Подсказка категории'**
|
||
String get parsingDetailCategorySuggestion;
|
||
|
||
/// No description provided for @parsingDetailAccountId.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'ID счёта'**
|
||
String get parsingDetailAccountId;
|
||
|
||
/// No description provided for @parsingDetailCategoryId.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'ID категории'**
|
||
String get parsingDetailCategoryId;
|
||
|
||
/// No description provided for @parsingDetailTransferTo.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Перевод на'**
|
||
String get parsingDetailTransferTo;
|
||
|
||
/// No description provided for @parsingDetailRuleCategory.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Категория'**
|
||
String get parsingDetailRuleCategory;
|
||
|
||
/// No description provided for @parsingDetailTransactionId.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'ID транзакции'**
|
||
String get parsingDetailTransactionId;
|
||
|
||
/// No description provided for @parsingDetailDedupHash.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Dedup-хеш'**
|
||
String get parsingDetailDedupHash;
|
||
|
||
/// No description provided for @parsingDetailReceivedAt.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Получено'**
|
||
String get parsingDetailReceivedAt;
|
||
|
||
/// No description provided for @parsingDetailCreatedAt.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Создано'**
|
||
String get parsingDetailCreatedAt;
|
||
|
||
/// No description provided for @inboxTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Из уведомлений'**
|
||
String get inboxTitle;
|
||
|
||
/// No description provided for @inboxSubtitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Правило обучится с первого раза: следующие похожие сообщения подтвердятся автоматически.'**
|
||
String get inboxSubtitle;
|
||
|
||
/// No description provided for @inboxEmpty.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Inbox пуст. Новые уведомления появятся здесь.'**
|
||
String get inboxEmpty;
|
||
|
||
/// No description provided for @inboxCreateRule.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Создать правило «{merchant} → {category}»'**
|
||
String inboxCreateRule(String merchant, String category);
|
||
|
||
/// No description provided for @inboxCreateRuleNoCategory.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Создать правило для «{merchant}»'**
|
||
String inboxCreateRuleNoCategory(String merchant);
|
||
|
||
/// No description provided for @inboxConfirm.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Подтвердить'**
|
||
String get inboxConfirm;
|
||
|
||
/// No description provided for @inboxCategoryRequiredHint.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Выберите категорию, чтобы подтвердить'**
|
||
String get inboxCategoryRequiredHint;
|
||
|
||
/// No description provided for @inboxIgnore.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Игнорировать'**
|
||
String get inboxIgnore;
|
||
|
||
/// No description provided for @inboxApplyAll.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Учесть все'**
|
||
String get inboxApplyAll;
|
||
|
||
/// No description provided for @inboxTransferPairTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Перевод между счетами'**
|
||
String get inboxTransferPairTitle;
|
||
|
||
/// No description provided for @inboxTransferFrom.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Счёт списания'**
|
||
String get inboxTransferFrom;
|
||
|
||
/// No description provided for @inboxTransferTo.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Счёт зачисления'**
|
||
String get inboxTransferTo;
|
||
|
||
/// No description provided for @inboxTransferPickAccount.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Выбрать…'**
|
||
String get inboxTransferPickAccount;
|
||
|
||
/// No description provided for @inboxUnpair.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Расклеить'**
|
||
String get inboxUnpair;
|
||
|
||
/// No description provided for @inboxUnrecognized.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Не распознано'**
|
||
String get inboxUnrecognized;
|
||
|
||
/// No description provided for @inboxParseErrorTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Ошибка распознавания'**
|
||
String get inboxParseErrorTitle;
|
||
|
||
/// No description provided for @inboxRetry.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Попробовать снова'**
|
||
String get inboxRetry;
|
||
|
||
/// No description provided for @inboxAddManually.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Добавить вручную'**
|
||
String get inboxAddManually;
|
||
|
||
/// No description provided for @inboxNoCategory.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Без категории'**
|
||
String get inboxNoCategory;
|
||
|
||
/// No description provided for @inboxAccountUnknown.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Счёт не определён'**
|
||
String get inboxAccountUnknown;
|
||
|
||
/// No description provided for @inboxEditRuleTooltip.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Изменить перед сохранением'**
|
||
String get inboxEditRuleTooltip;
|
||
|
||
/// No description provided for @rulesTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Правила парсинга'**
|
||
String get rulesTitle;
|
||
|
||
/// No description provided for @rulesSubtitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Настройки'**
|
||
String get rulesSubtitle;
|
||
|
||
/// No description provided for @rulesFilterAll.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Все'**
|
||
String get rulesFilterAll;
|
||
|
||
/// No description provided for @rulesFilterMerchants.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Мерчанты'**
|
||
String get rulesFilterMerchants;
|
||
|
||
/// No description provided for @rulesFilterAccounts.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Счета'**
|
||
String get rulesFilterAccounts;
|
||
|
||
/// No description provided for @rulesFilterIgnore.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Игнор'**
|
||
String get rulesFilterIgnore;
|
||
|
||
/// No description provided for @rulesEmpty.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Правил пока нет. Создавайте их из Inbox в один тап.'**
|
||
String get rulesEmpty;
|
||
|
||
/// No description provided for @ruleMatchesCount.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'{count, plural, one{{count} совпадение} few{{count} совпадения} many{{count} совпадений} other{{count} совпадений}}'**
|
||
String ruleMatchesCount(int count);
|
||
|
||
/// No description provided for @ruleDisabled.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Выключено'**
|
||
String get ruleDisabled;
|
||
|
||
/// No description provided for @ruleEditorNewTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Новое правило'**
|
||
String get ruleEditorNewTitle;
|
||
|
||
/// No description provided for @ruleEditorEditTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Правило'**
|
||
String get ruleEditorEditTitle;
|
||
|
||
/// No description provided for @ruleEditorIfContains.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Если уведомление содержит'**
|
||
String get ruleEditorIfContains;
|
||
|
||
/// No description provided for @ruleEditorPatternHint.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'напр. WBSPB'**
|
||
String get ruleEditorPatternHint;
|
||
|
||
/// No description provided for @ruleEditorModeContains.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Содержит'**
|
||
String get ruleEditorModeContains;
|
||
|
||
/// No description provided for @ruleEditorModeExact.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Точно'**
|
||
String get ruleEditorModeExact;
|
||
|
||
/// No description provided for @ruleEditorModeRegex.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Regex'**
|
||
String get ruleEditorModeRegex;
|
||
|
||
/// No description provided for @ruleEditorThen.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'То это:'**
|
||
String get ruleEditorThen;
|
||
|
||
/// No description provided for @ruleEditorMerchant.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Мерчант'**
|
||
String get ruleEditorMerchant;
|
||
|
||
/// No description provided for @ruleEditorMerchantHint.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Напр. Wildberries'**
|
||
String get ruleEditorMerchantHint;
|
||
|
||
/// No description provided for @ruleEditorCategory.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Категория'**
|
||
String get ruleEditorCategory;
|
||
|
||
/// No description provided for @ruleEditorAccount.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Счёт'**
|
||
String get ruleEditorAccount;
|
||
|
||
/// No description provided for @ruleEditorAccountUnchanged.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'— не менять —'**
|
||
String get ruleEditorAccountUnchanged;
|
||
|
||
/// No description provided for @ruleEditorApp.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Приложение'**
|
||
String get ruleEditorApp;
|
||
|
||
/// No description provided for @ruleEditorAppPick.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Выберите приложение'**
|
||
String get ruleEditorAppPick;
|
||
|
||
/// No description provided for @ruleEditorNoApps.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Сначала добавьте приложение-источник'**
|
||
String get ruleEditorNoApps;
|
||
|
||
/// No description provided for @rulesUnknownApp.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Неизвестное приложение'**
|
||
String get rulesUnknownApp;
|
||
|
||
/// No description provided for @ruleEditorAdvanced.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Дополнительно'**
|
||
String get ruleEditorAdvanced;
|
||
|
||
/// No description provided for @ruleEditorPriority.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Приоритет'**
|
||
String get ruleEditorPriority;
|
||
|
||
/// No description provided for @ruleEditorMatchesTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Совпадает с (последние 30 дней)'**
|
||
String get ruleEditorMatchesTitle;
|
||
|
||
/// No description provided for @ruleEditorNoMatches.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Нет совпадений за 30 дней'**
|
||
String get ruleEditorNoMatches;
|
||
|
||
/// No description provided for @ruleEditorSave.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Сохранить'**
|
||
String get ruleEditorSave;
|
||
|
||
/// No description provided for @ruleEditorDelete.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Удалить'**
|
||
String get ruleEditorDelete;
|
||
|
||
/// No description provided for @ruleEditorEnabledLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Активно'**
|
||
String get ruleEditorEnabledLabel;
|
||
|
||
/// No description provided for @debugInjectTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Тестовое уведомление'**
|
||
String get debugInjectTitle;
|
||
|
||
/// No description provided for @debugInjectSubtitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Отладка'**
|
||
String get debugInjectSubtitle;
|
||
|
||
/// No description provided for @debugInjectPackageLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Пакет приложения'**
|
||
String get debugInjectPackageLabel;
|
||
|
||
/// No description provided for @debugInjectTitleLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Заголовок (необязательно)'**
|
||
String get debugInjectTitleLabel;
|
||
|
||
/// No description provided for @debugInjectBodyLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Текст уведомления'**
|
||
String get debugInjectBodyLabel;
|
||
|
||
/// No description provided for @debugInjectSend.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Отправить в обработку'**
|
||
String get debugInjectSend;
|
||
|
||
/// No description provided for @debugInjectSent.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Отправлено'**
|
||
String get debugInjectSent;
|
||
|
||
/// No description provided for @debugInjectFillSample.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Пример: покупка'**
|
||
String get debugInjectFillSample;
|
||
|
||
/// No description provided for @aiConsentKeyMissing.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'API-ключ не указан'**
|
||
String get aiConsentKeyMissing;
|
||
|
||
/// No description provided for @aiConsentSaved.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Настройки сохранены'**
|
||
String get aiConsentSaved;
|
||
|
||
/// No description provided for @aiConsentTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Парсинг с ИИ'**
|
||
String get aiConsentTitle;
|
||
|
||
/// No description provided for @aiConsentBody.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Мы используем DeepSeek API для парсинга уведомлений с помощью ИИ. Ваши данные отправляются выбранной модели. Вам понадобится свой API-ключ. Расходуются токены.'**
|
||
String get aiConsentBody;
|
||
|
||
/// No description provided for @aiConsentKeyLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'API-ключ DeepSeek'**
|
||
String get aiConsentKeyLabel;
|
||
|
||
/// No description provided for @aiConsentKeyHint.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'sk-...'**
|
||
String get aiConsentKeyHint;
|
||
|
||
/// No description provided for @aiConsentModelLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Модель ИИ'**
|
||
String get aiConsentModelLabel;
|
||
|
||
/// No description provided for @aiConsentAllow.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Разрешить ИИ-парсинг'**
|
||
String get aiConsentAllow;
|
||
|
||
/// No description provided for @aiConsentRegexOnly.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Только Regex (Локально)'**
|
||
String get aiConsentRegexOnly;
|
||
|
||
/// No description provided for @parsingAiConfigure.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Настроить ИИ'**
|
||
String get parsingAiConfigure;
|
||
|
||
/// No description provided for @parsingAiTokensToday.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Токенов за сегодня: {tokens}'**
|
||
String parsingAiTokensToday(int tokens);
|
||
|
||
/// No description provided for @parsingAiTokensTodayLimited.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Токенов за сегодня: {tokens} / {limit}'**
|
||
String parsingAiTokensTodayLimited(int tokens, int limit);
|
||
|
||
/// No description provided for @habitTrackingTile.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Анализ привычек трат'**
|
||
String get habitTrackingTile;
|
||
|
||
/// No description provided for @habitObligationRequired.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Обязательно'**
|
||
String get habitObligationRequired;
|
||
|
||
/// No description provided for @habitObligationOptional.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Не обязательно'**
|
||
String get habitObligationOptional;
|
||
|
||
/// No description provided for @habitObligationUnnecessary.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Не нужно'**
|
||
String get habitObligationUnnecessary;
|
||
|
||
/// No description provided for @habitObligationOptionalShort.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Можно без'**
|
||
String get habitObligationOptionalShort;
|
||
|
||
/// No description provided for @habitImpulseImpulsive.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Импульсивно'**
|
||
String get habitImpulseImpulsive;
|
||
|
||
/// No description provided for @habitImpulseConsidered.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Обдуманно'**
|
||
String get habitImpulseConsidered;
|
||
|
||
/// No description provided for @habitNotMarked.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'не отмечено'**
|
||
String get habitNotMarked;
|
||
|
||
/// No description provided for @habitFilterAll.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Все'**
|
||
String get habitFilterAll;
|
||
|
||
/// No description provided for @habitScaleImpulseCaps.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'ИМПУЛЬСИВНОСТЬ'**
|
||
String get habitScaleImpulseCaps;
|
||
|
||
/// No description provided for @habitScaleObligationCaps.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'ОБЯЗАТЕЛЬНОСТЬ'**
|
||
String get habitScaleObligationCaps;
|
||
|
||
/// No description provided for @habitAnalysisTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Транзакции'**
|
||
String get habitAnalysisTitle;
|
||
|
||
/// No description provided for @habitAnalysisTile.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Анализ привычек'**
|
||
String get habitAnalysisTile;
|
||
|
||
/// No description provided for @profileSeedDemoTile.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Заполнить демо транзакциями'**
|
||
String get profileSeedDemoTile;
|
||
|
||
/// No description provided for @profileSeedDemoSuccess.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Демо транзакции добавлены'**
|
||
String get profileSeedDemoSuccess;
|
||
|
||
/// No description provided for @commonAdd.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Добавить'**
|
||
String get commonAdd;
|
||
|
||
/// No description provided for @commonCancel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Отмена'**
|
||
String get commonCancel;
|
||
|
||
/// No description provided for @commonDelete.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Удалить'**
|
||
String get commonDelete;
|
||
|
||
/// No description provided for @parsingAppsTile.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Приложения-источники'**
|
||
String get parsingAppsTile;
|
||
|
||
/// No description provided for @sourceAppsTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Приложения-источники'**
|
||
String get sourceAppsTitle;
|
||
|
||
/// No description provided for @sourceAppsAddedSection.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Отслеживаются'**
|
||
String get sourceAppsAddedSection;
|
||
|
||
/// No description provided for @sourceAppsAvailableSection.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Доступные'**
|
||
String get sourceAppsAvailableSection;
|
||
|
||
/// No description provided for @sourceAppsEmpty.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Пока нет приложений. Выберите банк ниже или добавьте вручную.'**
|
||
String get sourceAppsEmpty;
|
||
|
||
/// No description provided for @sourceAppsAddManual.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Добавить вручную'**
|
||
String get sourceAppsAddManual;
|
||
|
||
/// No description provided for @sourceAppsPackageLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Имя пакета'**
|
||
String get sourceAppsPackageLabel;
|
||
|
||
/// No description provided for @sourceAppsNameLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Отображаемое имя (необязательно)'**
|
||
String get sourceAppsNameLabel;
|
||
|
||
/// No description provided for @sourceAppsPickFromInstalled.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Выбрать из установленных'**
|
||
String get sourceAppsPickFromInstalled;
|
||
|
||
/// No description provided for @sourceAppsPickerTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Установленные приложения'**
|
||
String get sourceAppsPickerTitle;
|
||
|
||
/// No description provided for @sourceAppsSearchHint.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Поиск'**
|
||
String get sourceAppsSearchHint;
|
||
|
||
/// No description provided for @sourceAppsPickerEmpty.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Приложения не найдены'**
|
||
String get sourceAppsPickerEmpty;
|
||
|
||
/// No description provided for @sourceAppsAlreadyAdded.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Уже добавлено'**
|
||
String get sourceAppsAlreadyAdded;
|
||
|
||
/// No description provided for @sourceAppsSelfMerchantLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Мерчант — само приложение'**
|
||
String get sourceAppsSelfMerchantLabel;
|
||
|
||
/// No description provided for @sourceAppsSelfMerchantHint.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Уведомления не называют продавца: категория выбирается вручную, правила не предлагаются'**
|
||
String get sourceAppsSelfMerchantHint;
|
||
|
||
/// No description provided for @appBindingsTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Привязки счетов'**
|
||
String get appBindingsTitle;
|
||
|
||
/// No description provided for @appBindingsEmpty.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Пока нет привязок. Добавьте, чтобы связать карту со счётом.'**
|
||
String get appBindingsEmpty;
|
||
|
||
/// No description provided for @appBindingsAnyCard.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Любая карта (по умолчанию)'**
|
||
String get appBindingsAnyCard;
|
||
|
||
/// No description provided for @appBindingsSetDefault.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Сделать счётом по умолчанию для приложения'**
|
||
String get appBindingsSetDefault;
|
||
|
||
/// No description provided for @appBindingsAddTitle.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Новая привязка'**
|
||
String get appBindingsAddTitle;
|
||
|
||
/// No description provided for @appBindingsCardLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Последние 4 цифры карты'**
|
||
String get appBindingsCardLabel;
|
||
|
||
/// No description provided for @appBindingsCardHelper.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Оставьте пустым для любой карты'**
|
||
String get appBindingsCardHelper;
|
||
|
||
/// No description provided for @appBindingsDefaultLabel.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'По умолчанию для приложения'**
|
||
String get appBindingsDefaultLabel;
|
||
|
||
/// No description provided for @ruleKindMerchant.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Мерчант → категория'**
|
||
String get ruleKindMerchant;
|
||
|
||
/// No description provided for @ruleKindAccount.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Отправитель → счёт'**
|
||
String get ruleKindAccount;
|
||
|
||
/// No description provided for @ruleEditorAccountPick.
|
||
///
|
||
/// In ru, this message translates to:
|
||
/// **'Выбрать счёт'**
|
||
String get ruleEditorAccountPick;
|
||
}
|
||
|
||
class _AppLocalizationsDelegate
|
||
extends LocalizationsDelegate<AppLocalizations> {
|
||
const _AppLocalizationsDelegate();
|
||
|
||
@override
|
||
Future<AppLocalizations> load(Locale locale) {
|
||
return SynchronousFuture<AppLocalizations>(lookupAppLocalizations(locale));
|
||
}
|
||
|
||
@override
|
||
bool isSupported(Locale locale) =>
|
||
<String>['en', 'ru'].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 'ru':
|
||
return AppLocalizationsRu();
|
||
}
|
||
|
||
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.',
|
||
);
|
||
}
|