Files
OnBudget/lib/l10n/app_localizations.dart
T
SandersandClaude Opus 4.8 4f99b80169 Replace account_bindings with per-app default account; build analytics charts
Notification parsing:
- Drop the account_bindings table/DAO/repo/entity/controller/screen; account
  resolution now goes senderToAccount rule -> source_apps.defaultAccountId
  (trusted) -> global default (untrusted -> Inbox), via v1->v2 migration.
- Add defaultAccountId to source_apps; per-app settings consolidated into
  source_app_detail_screen (/settings/parsing/apps/:pkg).
- Inbox auto-learns an app default on first Confirm/CreateRule; account picker
  on the card instead of a disabled button; parse_error_labels extracted.

Analytics:
- Replace placeholder screen with fl_chart cards (chart_card, chart_theme,
  month_stepper, month_math domain helper); slim down habit_analysis_screen.

Android: add launcher icon (adaptive foreground + colors.xml) and app_name.

Tests: migration_v2, analytics (screen/month_math), AI retry, inbox
visibility; update resolver/gate/inbox suites for the new resolution path.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-18 00:09:12 +03:00

2181 lines
67 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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, youll need to edit this
/// file.
///
/// First, open your projects ios/Runner.xcworkspace Xcode workspace file.
/// Then, in the Project Navigator, open the Info.plist file under the Runner
/// projects 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 @analyticsNoData.
///
/// In ru, this message translates to:
/// **'Нет данных за этот месяц'**
String get analyticsNoData;
/// 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 @inboxWaitingNetworkTitle.
///
/// In ru, this message translates to:
/// **'Ждёт сети'**
String get inboxWaitingNetworkTitle;
/// No description provided for @inboxStuckOffline.
///
/// In ru, this message translates to:
/// **'Нет подключения к интернету. Разбор продолжится, когда появится сеть.'**
String get inboxStuckOffline;
/// No description provided for @inboxStuckNetwork.
///
/// In ru, this message translates to:
/// **'Сеть есть, но запрос к AI не прошёл. Повторим автоматически.'**
String get inboxStuckNetwork;
/// No description provided for @parseErrorOffline.
///
/// In ru, this message translates to:
/// **'Не было соединения с интернетом'**
String get parseErrorOffline;
/// No description provided for @parseErrorNetwork.
///
/// In ru, this message translates to:
/// **'Запрос к AI не прошёл (ошибка сети)'**
String get parseErrorNetwork;
/// No description provided for @parseErrorRetryLimit.
///
/// In ru, this message translates to:
/// **'Лимит AI-попыток исчерпан'**
String get parseErrorRetryLimit;
/// 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 @appDetailEnabled.
///
/// In ru, this message translates to:
/// **'Отслеживать уведомления'**
String get appDetailEnabled;
/// No description provided for @appDetailDefaultAccount.
///
/// In ru, this message translates to:
/// **'Счёт по умолчанию'**
String get appDetailDefaultAccount;
/// No description provided for @appDetailDefaultAccountNone.
///
/// In ru, this message translates to:
/// **'Не задан'**
String get appDetailDefaultAccountNone;
/// No description provided for @appDetailDefaultAccountHint.
///
/// In ru, this message translates to:
/// **'Новые операции из этого приложения записываются на этот счёт. Запоминается автоматически при первом «Подтвердить» во Входящих.'**
String get appDetailDefaultAccountHint;
/// No description provided for @appDetailRoutingRules.
///
/// In ru, this message translates to:
/// **'Правила выбора счёта'**
String get appDetailRoutingRules;
/// No description provided for @appDetailRoutingRulesEmpty.
///
/// In ru, this message translates to:
/// **'Если приложение пишет о нескольких счетах (карта, вклад), добавьте правило: паттерн в тексте → счёт. Правила важнее счёта по умолчанию.'**
String get appDetailRoutingRulesEmpty;
/// No description provided for @appDetailAddRule.
///
/// In ru, this message translates to:
/// **'Добавить'**
String get appDetailAddRule;
/// No description provided for @inboxAppDefaultSet.
///
/// In ru, this message translates to:
/// **'Счёт сохранён как основной для приложения'**
String get inboxAppDefaultSet;
/// 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.',
);
}