diff --git a/android/app/src/debug/res/values-ko/strings.xml b/android/app/src/debug/res/values-ko/strings.xml
deleted file mode 100644
index 07e7e9a8f..000000000
--- a/android/app/src/debug/res/values-ko/strings.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
- 아베스 [Debug]
-
\ No newline at end of file
diff --git a/android/app/src/main/res/values-ko/strings.xml b/android/app/src/main/res/values-ko/strings.xml
index 2f2fe17ec..29988cddf 100644
--- a/android/app/src/main/res/values-ko/strings.xml
+++ b/android/app/src/main/res/values-ko/strings.xml
@@ -1,4 +1,4 @@
-
+
아베스
검색
diff --git a/android/app/src/main/res/values-ru/strings.xml b/android/app/src/main/res/values-ru/strings.xml
new file mode 100644
index 000000000..3ccabcd2a
--- /dev/null
+++ b/android/app/src/main/res/values-ru/strings.xml
@@ -0,0 +1,10 @@
+
+
+ Aves
+ Поиск
+ Видео
+ Сканировать медия
+ Сканировать изображения и видео
+ Сканирование медиа
+ Стоп
+
\ No newline at end of file
diff --git a/android/app/src/profile/res/values-ko/strings.xml b/android/app/src/profile/res/values-ko/strings.xml
deleted file mode 100644
index 37f84623f..000000000
--- a/android/app/src/profile/res/values-ko/strings.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
- 아베스 [Profile]
-
\ No newline at end of file
diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb
index a89aaabb3..74ac7cfd9 100644
--- a/lib/l10n/app_en.arb
+++ b/lib/l10n/app_en.arb
@@ -454,6 +454,8 @@
"@aboutCreditsWorldAtlas1": {},
"aboutCreditsWorldAtlas2": "under ISC License.",
"@aboutCreditsWorldAtlas2": {},
+ "aboutCreditsTranslators": "Translators:",
+ "@aboutCreditsTranslators": {},
"aboutLicenses": "Open-Source Licenses",
"@aboutLicenses": {},
diff --git a/lib/l10n/app_ko.arb b/lib/l10n/app_ko.arb
index 472bb957c..3233a6aec 100644
--- a/lib/l10n/app_ko.arb
+++ b/lib/l10n/app_ko.arb
@@ -217,6 +217,7 @@
"aboutCredits": "크레딧",
"aboutCreditsWorldAtlas1": "이 앱은",
"aboutCreditsWorldAtlas2": "의 TopoJSON 파일(ISC 라이선스)을 이용합니다.",
+ "aboutCreditsTranslators": "번역가:",
"aboutLicenses": "오픈 소스 라이선스",
"aboutLicensesBanner": "이 앱은 다음의 오픈 소스 패키지와 라이브러리를 이용합니다.",
diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb
new file mode 100644
index 000000000..9e2c4bcfa
--- /dev/null
+++ b/lib/l10n/app_ru.arb
@@ -0,0 +1,478 @@
+{
+ "appName": "Aves",
+ "welcomeMessage": "Добро пожаловать в Aves",
+ "welcomeCrashReportToggle": "Разрешить анонимную отправку ошибок (опционально)",
+ "welcomeTermsToggle": "Я согласен с условиями и положениями",
+ "itemCount": "{count, plural, =1{1 объект} few{{count} объекта} other{{count} объектов}}",
+
+ "timeSeconds": "{seconds, plural, =1{1 секунда} few{{count} секунды} other{{seconds} секунд}}",
+ "timeMinutes": "{minutes, plural, =1{1 минута} few{{count} минуты}other{{minutes} минут}}",
+
+ "applyButtonLabel": "ПРИМЕНИТЬ",
+ "deleteButtonLabel": "УДАЛИТЬ",
+ "nextButtonLabel": "ДАЛЕЕ",
+ "showButtonLabel": "ПОКАЗАТЬ",
+ "hideButtonLabel": "СКРЫТЬ",
+ "continueButtonLabel": "ПРОДОЛЖИТЬ",
+
+ "changeTooltip": "Изменить",
+ "clearTooltip": "Очистить",
+ "previousTooltip": "Предыдущий",
+ "nextTooltip": "Следующий",
+ "showTooltip": "Показать",
+ "hideTooltip": "Скрыть",
+ "removeTooltip": "Удалить",
+
+ "doubleBackExitMessage": "Нажмите «назад» еще раз, чтобы выйти.",
+
+ "sourceStateLoading": "Загрузка",
+ "sourceStateCataloguing": "Каталогизация",
+ "sourceStateLocatingCountries": "Расположение стран",
+ "sourceStateLocatingPlaces": "Расположение локаций",
+
+ "chipActionDelete": "Удалить",
+ "chipActionGoToAlbumPage": "Показывать в Альбомах",
+ "chipActionGoToCountryPage": "Показывать в Странах",
+ "chipActionGoToTagPage": "Показывать в тегах",
+ "chipActionHide": "Скрыть",
+ "chipActionPin": "Закрепить",
+ "chipActionUnpin": "Открепить",
+ "chipActionRename": "Переименовать",
+ "chipActionSetCover": "Установить обложку",
+ "chipActionCreateAlbum": "Создать альбом",
+
+ "entryActionCopyToClipboard": "Скопировать в буфер обмена",
+ "entryActionDelete": "Удалить",
+ "entryActionExport": "Экспорт",
+ "entryActionInfo": "Информация",
+ "entryActionRename": "Переименовать",
+ "entryActionRotateCCW": "Повернуть против часовой стрелки",
+ "entryActionRotateCW": "Повернуть по часовой стрелки",
+ "entryActionFlip": "Отразить по горизонтали",
+ "entryActionPrint": "Печать",
+ "entryActionShare": "Поделиться",
+ "entryActionViewSource": "Посмотреть источник",
+ "entryActionViewMotionPhotoVideo": "Открыть «Живые фото»",
+ "entryActionEdit": "Изменить с помощью…",
+ "entryActionOpen": "Открыть с помощью…",
+ "entryActionSetAs": "Установить как…",
+ "entryActionOpenMap": "Показать на карте…",
+ "entryActionRotateScreen": "Повернуть экран",
+ "entryActionAddFavourite": "Добавить в избранное",
+ "entryActionRemoveFavourite": "Удалить из избранного",
+
+ "videoActionCaptureFrame": "Сохранить кадр",
+ "videoActionPause": "Стоп",
+ "videoActionPlay": "Играть",
+ "videoActionReplay10": "Перемотка на 10 секунд назад",
+ "videoActionSkip10": "Перемотка на 10 секунд вперёд",
+ "videoActionSelectStreams": "Выбрать дорожку",
+ "videoActionSetSpeed": "Скорость вопспроизведения",
+ "videoActionSettings": "Настройки",
+
+ "entryInfoActionEditDate": "Изменить дату и время",
+ "entryInfoActionRemoveMetadata": "Удалить метаданные",
+
+ "filterFavouriteLabel": "Избранное",
+ "filterLocationEmptyLabel": "Без местоположения",
+ "filterTagEmptyLabel": "Без тегов",
+ "filterTypeAnimatedLabel": "GIF",
+ "filterTypeMotionPhotoLabel": "Живое фото",
+ "filterTypePanoramaLabel": "Панорама",
+ "filterTypeRawLabel": "RAW",
+ "filterTypeSphericalVideoLabel": "360° видео",
+ "filterTypeGeotiffLabel": "GeoTIFF",
+ "filterMimeImageLabel": "Изображение",
+ "filterMimeVideoLabel": "Видео",
+
+ "coordinateFormatDms": "Градусы, минуты и секунды",
+ "coordinateFormatDecimal": "Десятичные градусы",
+
+ "unitSystemMetric": "Метрические",
+ "unitSystemImperial": "Имперские",
+
+ "videoLoopModeNever": "Никогда",
+ "videoLoopModeShortOnly": "Только для коротких видео",
+ "videoLoopModeAlways": "Всегда",
+
+ "mapStyleGoogleNormal": "Google Карты",
+ "mapStyleGoogleHybrid": "Google Карты (Гибридный)",
+ "mapStyleGoogleTerrain": "Google Карты (Местность)",
+ "mapStyleOsmHot": "Команда гуманитарной картопомощи",
+ "mapStyleStamenToner": "Stamen Toner",
+ "mapStyleStamenWatercolor": "Stamen Watercolor",
+
+ "nameConflictStrategyRename": "Переименовать",
+ "nameConflictStrategyReplace": "Заменить",
+ "nameConflictStrategySkip": "Пропустить",
+
+ "keepScreenOnNever": "Никогда",
+ "keepScreenOnViewerOnly": "Только в просмотрщике",
+ "keepScreenOnAlways": "Всегда",
+
+ "accessibilityAnimationsRemove": "Предотвратить экранные эффекты",
+ "accessibilityAnimationsKeep": "Сохранить экранные эффекты",
+
+ "albumTierNew": "Новые",
+ "albumTierPinned": "Закрепленные",
+ "albumTierSpecial": "Стандартные",
+ "albumTierApps": "Приложения",
+ "albumTierRegular": "Другие",
+
+ "storageVolumeDescriptionFallbackPrimary": "Внутренняя память",
+ "storageVolumeDescriptionFallbackNonPrimary": "SD-карта",
+ "rootDirectoryDescription": "корень",
+ "otherDirectoryDescription": "“{name}” каталог",
+ "storageAccessDialogTitle": "Доступ к хранилищу",
+ "storageAccessDialogMessage": "Пожалуйста, выберите каталог {directory} на накопителе «{volume}» на следующем экране, чтобы предоставить этому приложению доступ к нему.",
+ "restrictedAccessDialogTitle": "Ограниченный доступ",
+ "restrictedAccessDialogMessage": "Этому приложению не разрешается изменять файлы в каталоге {directory} накопителя «{volume}».\n\nПожалуйста, используйте предустановленный файловый менеджер или галерею, чтобы переместить элементы в другой каталог.",
+ "notEnoughSpaceDialogTitle": "Недостаточно свободного места.",
+ "notEnoughSpaceDialogMessage": "Для завершения этой операции требуется {neededSize} свободного места на «{volume}», но осталось только {freeSize}.",
+
+ "nameConflictDialogSingleSourceMessage": "Некоторые файлы в папке назначения имеют одно и то же имя.",
+ "nameConflictDialogMultipleSourceMessage": "Некоторые файлы имеют одно и то же имя.",
+
+ "addShortcutDialogLabel": "Название ярлыка",
+ "addShortcutButtonLabel": "СОЗДАТЬ",
+
+ "noMatchingAppDialogTitle": "Нет подходящего приложения",
+ "noMatchingAppDialogMessage": "Нет приложений, которые могли бы с этим справиться.",
+
+ "deleteEntriesConfirmationDialogMessage": "{count, plural, =1{Вы уверены, что хотите удалить этот объект?} few{Вы уверены, что хотите удалить эти {count} объекта?} other{Вы уверены, что хотите удалить эти {count} объектов)?}}",
+
+ "setCoverDialogTitle": "Установить обложку",
+ "setCoverDialogLatest": "Последний объект",
+ "setCoverDialogCustom": "Собственная",
+
+ "hideFilterConfirmationDialogMessage": "Соответствующие фотографии и видео будут скрыты из вашей коллекции. Вы можете показать их снова в настройках в разделе «Конфиденциальность».\n\nВы уверены, что хотите их скрыть?",
+
+ "newAlbumDialogTitle": "Новый альбом",
+ "newAlbumDialogNameLabel": "Название альбома",
+ "newAlbumDialogNameLabelAlreadyExistsHelper": "Каталог уже существует",
+ "newAlbumDialogStorageLabel": "Накопитель:",
+
+ "renameAlbumDialogLabel": "Новое название",
+ "renameAlbumDialogLabelAlreadyExistsHelper": "Каталог уже существует",
+
+ "deleteSingleAlbumConfirmationDialogMessage": "{count, plural, =1{Вы уверены, что хотите удалить этот альбом и его объект?} few{Вы уверены, что хотите удалить этот альбом и его {count} объекта?} other{Вы уверены, что хотите удалить этот альбом и его {count} объектов?}}",
+ "deleteMultiAlbumConfirmationDialogMessage": "{count, plural, =1{Вы уверены, что хотите удалить эти альбомы и их объекты?} few{Вы уверены, что хотите удалить эти альбомы и их {count} объекта?} other{Вы уверены, что хотите удалить эти альбомы и их {count} объектов?}}",
+
+ "exportEntryDialogFormat": "Формат:",
+
+ "renameEntryDialogLabel": "Новое название",
+
+ "editEntryDateDialogTitle": "Дата и время",
+ "editEntryDateDialogSet": "Задать",
+ "editEntryDateDialogShift": "Сдвиг",
+ "editEntryDateDialogClear": "Очистить",
+ "editEntryDateDialogFieldSelection": "Выбор поля",
+ "editEntryDateDialogHours": "Часов",
+ "editEntryDateDialogMinutes": "Минут",
+
+ "removeEntryMetadataDialogTitle": "Удаление метаданных",
+ "removeEntryMetadataDialogMore": "Дополнительно",
+
+ "removeEntryMetadataMotionPhotoXmpWarningDialogMessage": "Для воспроизведения видео внутри этой живой фотографии требуется XMP профиль. Вы уверены, что хотите удалить его?",
+
+ "videoSpeedDialogLabel": "Скорость воспроизведения",
+
+ "videoStreamSelectionDialogVideo": "Видео",
+ "videoStreamSelectionDialogAudio": "Аудио",
+ "videoStreamSelectionDialogText": "Субтитры",
+ "videoStreamSelectionDialogOff": "Отключено",
+ "videoStreamSelectionDialogTrack": "Дорожка",
+ "videoStreamSelectionDialogNoSelection": "Других дорожек нет.",
+
+ "genericSuccessFeedback": "Выполнено!",
+ "genericFailureFeedback": "Не удалось",
+
+ "menuActionSort": "Сортировка",
+ "menuActionGroup": "Группировка",
+ "menuActionSelect": "Выбрать",
+ "menuActionSelectAll": "Выбрать все",
+ "menuActionSelectNone": "Снять выделение",
+ "menuActionMap": "Карта",
+ "menuActionStats": "Статистика",
+
+ "aboutPageTitle": "О нас",
+ "aboutLinkSources": "Источники",
+ "aboutLinkLicense": "Лицензия",
+
+ "aboutUpdate": "Доступна новая версия",
+ "aboutUpdateLinks1": "Новая версия Aves доступна на",
+ "aboutUpdateLinks2": "и",
+ "aboutUpdateLinks3": ".",
+ "aboutUpdateGitHub": "GitHub",
+ "aboutUpdateGooglePlay": "Play Маркет",
+
+ "aboutBug": "Отчет об ошибке",
+ "aboutBugSaveLogInstruction": "Сохраните логи приложения в файл",
+ "aboutBugSaveLogButton": "Сохранить",
+ "aboutBugCopyInfoInstruction": "Скопируйте системную информацию",
+ "aboutBugCopyInfoButton": "Скопировать",
+ "aboutBugReportInstruction": "Отправьте отчёт об ошибке на GitHub вместе с логами и системной информацией",
+ "aboutBugReportButton": "Отправить",
+
+ "aboutCredits": "Благодарности",
+ "aboutCreditsWorldAtlas1": "Это приложение использует файл TopoJSON из",
+ "aboutCreditsWorldAtlas2": "под лицензией ISC.",
+ "aboutCreditsTranslators": "Translators:",
+
+ "aboutLicenses": "Лицензии с открытым исходным кодом",
+ "aboutLicensesBanner": "Это приложение использует следующие пакеты и библиотеки с открытым исходным кодом.",
+ "aboutLicensesAndroidLibraries": "Библиотеки Android",
+ "aboutLicensesFlutterPlugins": "Плагины Flutter",
+ "aboutLicensesFlutterPackages": "Пакеты Flutter",
+ "aboutLicensesDartPackages": "Пакеты Dart",
+ "aboutLicensesShowAllButtonLabel": "Показать все лицензии",
+
+ "collectionPageTitle": "Коллекция",
+ "collectionPickPageTitle": "Выбрать",
+ "collectionSelectionPageTitle": "{count, plural, =0{Выберите объекты} =1{1 объект} few{{count} объекта} other{{count} объектов)}}",
+
+ "collectionActionAddShortcut": "Добавить ярлык",
+ "collectionActionCopy": "Скопировать в альбом",
+ "collectionActionMove": "Переместить в альбом",
+ "collectionActionRescan": "Пересканировать",
+
+ "collectionSortTitle": "Сортировка",
+ "collectionSortDate": "По дате",
+ "collectionSortSize": "По размеру",
+ "collectionSortName": "По имени альбома и файла",
+
+ "collectionGroupTitle": "Группировка",
+ "collectionGroupAlbum": "По альбому",
+ "collectionGroupMonth": "По месяцу",
+ "collectionGroupDay": "По дню",
+ "collectionGroupNone": "Не группировать",
+
+ "sectionUnknown": "Неизвестно",
+ "dateToday": "Сегодня",
+ "dateYesterday": "Вчера",
+ "dateThisMonth": "В этом месяце",
+ "collectionDeleteFailureFeedback": "{count, plural, =1{Не удалось удалить 1 объект} few{Не удалось удалить {count} объекта} other{Не удалось удалить {count} объектов}}",
+ "collectionCopyFailureFeedback": "{count, plural, =1{Не удалось скопировать 1 объект} few{Не удалось скопировать {count} объекта}} other{Не удалось скопировать {count} объектов}}",
+ "collectionMoveFailureFeedback": "{count, plural, =1{Не удалось переместить 1 объект} few{Не удалось переместить {count} объекта} other{Не удалось переместить {count} объектов}}",
+ "collectionExportFailureFeedback": "{count, plural, =1{Не удалось экспортировать 1 страницу} few{Не удалось экспортировать {count} страницы} other{Не удалось экспортировать {count} страниц}}",
+ "collectionCopySuccessFeedback": "{count, plural, =1{Скопирован 1 объект} few{Скопировано {count} объекта} other{Скопировано {count} объектов}}",
+ "collectionMoveSuccessFeedback": "{count, plural, =1{Перемещен 1 объект} few{Перемещено {count} объекта} other{Перемещено {count} объектов}}",
+
+ "collectionEmptyFavourites": "Нет избранных",
+ "collectionEmptyVideos": "Нет видео",
+ "collectionEmptyImages": "Нет изображений",
+
+ "collectionSelectSectionTooltip": "Выбрать раздел",
+ "collectionDeselectSectionTooltip": "Снять выбор с раздела",
+
+ "drawerCollectionAll": "Вся коллекция",
+ "drawerCollectionFavourites": "Избранное",
+ "drawerCollectionImages": "Изображения",
+ "drawerCollectionVideos": "Видео",
+ "drawerCollectionMotionPhotos": "Живые фото",
+ "drawerCollectionPanoramas": "Панорамы",
+ "drawerCollectionRaws": "RAW",
+ "drawerCollectionSphericalVideos": "360° видео",
+
+ "chipSortTitle": "Сортировка",
+ "chipSortDate": "По дате",
+ "chipSortName": "По названию",
+ "chipSortCount": "По количеству объектов",
+
+ "albumGroupTitle": "Группировка",
+ "albumGroupTier": "По уровню",
+ "albumGroupVolume": "По накопителю",
+ "albumGroupNone": "Не группировать",
+
+ "albumPickPageTitleCopy": "Копировать в альбом",
+ "albumPickPageTitleExport": "Экспорт в альбом",
+ "albumPickPageTitleMove": "Переместить в альбом",
+ "albumPickPageTitlePick": "Выберите альбом",
+
+ "albumCamera": "Камера",
+ "albumDownload": "Загрузки",
+ "albumScreenshots": "Скриншоты",
+ "albumScreenRecordings": "Записи экрана",
+ "albumVideoCaptures": "Видеозаписи",
+
+ "albumPageTitle": "Альбомы",
+ "albumEmpty": "Нет альбомов",
+ "createAlbumTooltip": "Создать альбом",
+ "createAlbumButtonLabel": "СОЗДАТЬ",
+ "newFilterBanner": "новый",
+
+ "countryPageTitle": "Страны",
+ "countryEmpty": "Нет стран",
+
+ "tagPageTitle": "Теги",
+ "tagEmpty": "Нет тегов",
+
+ "searchCollectionFieldHint": "Поиск по коллекции",
+ "searchSectionRecent": "Недавние",
+ "searchSectionAlbums": "Альбомы",
+ "searchSectionCountries": "Страны",
+ "searchSectionPlaces": "Локации",
+ "searchSectionTags": "Теги",
+
+ "settingsPageTitle": "Настройки",
+ "settingsSystemDefault": "Система",
+ "settingsDefault": "По умолчанию",
+
+ "settingsActionExport": "Экспорт",
+ "settingsActionImport": "Импорт",
+
+ "settingsSectionNavigation": "Навигация",
+ "settingsHome": "Домашний каталог",
+ "settingsKeepScreenOnTile": "Держать экран включенным",
+ "settingsKeepScreenOnTitle": "Держать экран включенным",
+ "settingsDoubleBackExit": "Дважды нажмите «назад», чтобы выйти",
+
+ "settingsNavigationDrawerTile": "Навигационное меню",
+ "settingsNavigationDrawerEditorTitle": "Навигационное меню",
+ "settingsNavigationDrawerBanner": "Нажмите и удерживайте, чтобы переместить и изменить порядок пунктов меню.",
+ "settingsNavigationDrawerTabTypes": "Типы",
+ "settingsNavigationDrawerTabAlbums": "Альбомы",
+ "settingsNavigationDrawerTabPages": "Страницы",
+ "settingsNavigationDrawerAddAlbum": "Добавить альбом",
+
+ "settingsSectionThumbnails": "Эскизы",
+ "settingsThumbnailShowLocationIcon": "Показать значок местоположения",
+ "settingsThumbnailShowMotionPhotoIcon": "Показать значок живого фото",
+ "settingsThumbnailShowRawIcon": "Показать значок RAW-файла",
+ "settingsThumbnailShowVideoDuration": "Показывать продолжительность видео",
+
+ "settingsCollectionSelectionQuickActionsTile": "Быстрые действия с объектами",
+ "settingsCollectionSelectionQuickActionEditorTitle": "Быстрые действия",
+ "settingsCollectionSelectionQuickActionEditorBanner": "Нажмите и удерживайте, чтобы переместить кнопки и выбрать, какие действия будут отображаться при выборе элементов.",
+
+ "settingsSectionViewer": "Просмотрщик",
+ "settingsViewerShowOverlayOnOpening": "Показывать наложение при открытии",
+ "settingsViewerShowMinimap": "Показать миникарту",
+ "settingsViewerShowInformation": "Показывать информацию",
+ "settingsViewerShowInformationSubtitle": "Показать название, дату, местоположение и т.д.",
+ "settingsViewerShowShootingDetails": "Показать детали съёмки",
+ "settingsViewerEnableOverlayBlurEffect": "Наложение эффекта размытия",
+ "settingsViewerUseCutout": "Использовать область выреза",
+ "settingsImageBackground": "Фон изображения",
+
+ "settingsViewerQuickActionsTile": "Быстрые действия",
+ "settingsViewerQuickActionEditorTitle": "Быстрые действия",
+ "settingsViewerQuickActionEditorBanner": "Нажмите и удерживайте для перемещения кнопок и выбора действий, отображаемых в просмотрщике.",
+ "settingsViewerQuickActionEditorDisplayedButtons": "Отображаемые кнопки",
+ "settingsViewerQuickActionEditorAvailableButtons": "Доступные кнопки",
+ "settingsViewerQuickActionEmpty": "Нет кнопок",
+
+ "settingsVideoPageTitle": "Настройки видео",
+ "settingsSectionVideo": "Видео",
+ "settingsVideoShowVideos": "Показывать видео",
+ "settingsVideoEnableHardwareAcceleration": "Аппаратное ускорение",
+ "settingsVideoEnableAutoPlay": "Автозапуск воспроизведения",
+ "settingsVideoLoopModeTile": "Цикличный режим",
+ "settingsVideoLoopModeTitle": "Цикличный режим",
+ "settingsVideoQuickActionsTile": "Быстрые действия для видео",
+ "settingsVideoQuickActionEditorTitle": "Быстрые действия",
+
+ "settingsSubtitleThemeTile": "Субтитры",
+ "settingsSubtitleThemeTitle": "Субтитры",
+ "settingsSubtitleThemeSample": "Это образец.",
+ "settingsSubtitleThemeTextAlignmentTile": "Выравнивание текста",
+ "settingsSubtitleThemeTextAlignmentTitle": "Выравнивание текста",
+ "settingsSubtitleThemeTextSize": "Размер текста",
+ "settingsSubtitleThemeShowOutline": "Показать контур и тень",
+ "settingsSubtitleThemeTextColor": "Цвет текста",
+ "settingsSubtitleThemeTextOpacity": "Непрозрачность текста",
+ "settingsSubtitleThemeBackgroundColor": "Цвет фона",
+ "settingsSubtitleThemeBackgroundOpacity": "Непрозрачность фона",
+ "settingsSubtitleThemeTextAlignmentLeft": "По левой стороне",
+ "settingsSubtitleThemeTextAlignmentCenter": "По центру",
+ "settingsSubtitleThemeTextAlignmentRight": "По правой стороне",
+
+ "settingsSectionPrivacy": "Конфиденциальность",
+ "settingsEnableErrorReporting": "Разрешить анонимную отправку логов",
+ "settingsSaveSearchHistory": "Сохранять историю поиска",
+
+ "settingsHiddenFiltersTile": "Скрытые фильтры",
+ "settingsHiddenFiltersTitle": "Скрытые фильтры",
+ "settingsHiddenFiltersBanner": "Фотографии и видео, соответствующие скрытым фильтрам, не появятся в вашей коллекции.",
+ "settingsHiddenFiltersEmpty": "Нет скрытых фильтров",
+
+ "settingsHiddenPathsTile": "Скрытые каталоги",
+ "settingsHiddenPathsTitle": "Скрытые каталоги",
+ "settingsHiddenPathsBanner": "Фотографии и видео в этих каталогах или любых их вложенных каталогах не будут отображаться в вашей коллекции.",
+ "settingsHiddenPathsEmpty": "Нет скрытых каталогов",
+ "addPathTooltip": "Добавить каталог",
+
+ "settingsStorageAccessTile": "Доступ к хранилищу",
+ "settingsStorageAccessTitle": "Доступ к хранилищу",
+ "settingsStorageAccessBanner": "Некоторые каталоги требуют обязательного предоставления доступа для изменения файлов в них. Вы можете просмотреть здесь каталоги, к которым вы ранее предоставили доступ.",
+ "settingsStorageAccessEmpty": "Нет прав доступа",
+ "settingsStorageAccessRevokeTooltip": "Отменить",
+
+ "settingsSectionAccessibility": "Специальные возможности",
+ "settingsRemoveAnimationsTile": "Удалить анимацию",
+ "settingsRemoveAnimationsTitle": "Удалить анимацию",
+ "settingsTimeToTakeActionTile": "Время на выполнение действия",
+ "settingsTimeToTakeActionTitle": "Время на выполнение действия",
+
+ "settingsSectionLanguage": "Язык и форматы",
+ "settingsLanguage": "Язык",
+ "settingsCoordinateFormatTile": "Формат координат",
+ "settingsCoordinateFormatTitle": "Формат координат",
+ "settingsUnitSystemTile": "Единицы измерения",
+ "settingsUnitSystemTitle": "Единицы измерения",
+
+ "statsPageTitle": "Статистика",
+ "statsImage": "{count, plural, =1{изображение} few{изображения} other{изображений)}}",
+ "statsVideo": "{count, plural, =1{видео} few{видео} other{видео}}",
+ "statsWithGps": "{count, plural, =1{1 объект с местоположением} few{{count} объекта с местоположением} other{{count} объектов с местоположением}}",
+ "statsTopCountries": "Топ стран",
+ "statsTopPlaces": "Топ локаций",
+ "statsTopTags": "Топ тегов",
+
+ "viewerOpenPanoramaButtonLabel": "ОТКРЫТЬ ПАНОРАМУ",
+ "viewerOpenTooltip": "Открыть",
+ "viewerErrorUnknown": "Упс!",
+ "viewerErrorDoesNotExist": "Файл больше не существует.",
+
+ "viewerInfoPageTitle": "Информация",
+ "viewerInfoBackToViewerTooltip": "Вернуться к просмотрщику",
+
+ "viewerInfoUnknown": "неизвестный",
+ "viewerInfoLabelTitle": "Название",
+ "viewerInfoLabelDate": "Дата",
+ "viewerInfoLabelResolution": "Разрешение",
+ "viewerInfoLabelSize": "Размер",
+ "viewerInfoLabelUri": "Идентификатор",
+ "viewerInfoLabelPath": "Расположение",
+ "viewerInfoLabelDuration": "Продолжительность",
+ "viewerInfoLabelOwner": "Владелец",
+ "viewerInfoLabelCoordinates": "Координаты",
+ "viewerInfoLabelAddress": "Адрес",
+
+ "mapStyleTitle": "Стиль карты",
+ "mapStyleTooltip": "Выберите стиль карты",
+ "mapZoomInTooltip": "Увеличить",
+ "mapZoomOutTooltip": "Уменьшить",
+ "mapPointNorthUpTooltip": "Повернуть на север",
+ "mapAttributionOsmHot": "Данные карты © [OpenStreetMap](https://www.openstreetmap.org/copyright) помощники • Плитки [HOT](https://www.hotosm.org/) • Размещена на [OSM France](https://openstreetmap.fr/)",
+ "mapAttributionStamen": "Данные карты © [OpenStreetMap](https://www.openstreetmap.org/copyright) помощники • Плитки [Stamen Design](http://stamen.com), [CC BY 3.0](http://creativecommons.org/licenses/by/3.0)",
+ "openMapPageTooltip": "Просмотреть на странице карты",
+ "mapEmptyRegion": "Нет изображений в этом регионе",
+
+ "viewerInfoOpenEmbeddedFailureFeedback": "Не удалось извлечь встроенные данные",
+ "viewerInfoOpenLinkText": "Открыть",
+ "viewerInfoViewXmlLinkText": "Просмотр XML",
+
+ "viewerInfoSearchFieldLabel": "Поиск метаданных",
+ "viewerInfoSearchEmpty": "Нет подходящих ключей",
+ "viewerInfoSearchSuggestionDate": "Дата и время",
+ "viewerInfoSearchSuggestionDescription": "Описание",
+ "viewerInfoSearchSuggestionDimensions": "Измерения",
+ "viewerInfoSearchSuggestionResolution": "Разрешение",
+ "viewerInfoSearchSuggestionRights": "Права",
+
+ "panoramaEnableSensorControl": "Включить сенсорное управление",
+ "panoramaDisableSensorControl": "Отключить сенсорное управление",
+
+ "sourceViewerPageTitle": "Источник"
+}
diff --git a/lib/widgets/about/credits.dart b/lib/widgets/about/credits.dart
index ab8b366e7..3bc167ca4 100644
--- a/lib/widgets/about/credits.dart
+++ b/lib/widgets/about/credits.dart
@@ -8,6 +8,10 @@ import 'package:flutter/material.dart';
class AboutCredits extends StatelessWidget {
const AboutCredits({Key? key}) : super(key: key);
+ static const translations = [
+ 'Русский: D3ZOXY',
+ ];
+
@override
Widget build(BuildContext context) {
return Padding(
@@ -39,6 +43,14 @@ class AboutCredits extends StatelessWidget {
),
),
const SizedBox(height: 16),
+ Text(context.l10n.aboutCreditsTranslators),
+ ...translations.map(
+ (line) => Padding(
+ padding: const EdgeInsetsDirectional.only(start: 8, top: 8),
+ child: Text(line),
+ ),
+ ),
+ const SizedBox(height: 16),
],
),
);
diff --git a/lib/widgets/settings/language/locale.dart b/lib/widgets/settings/language/locale.dart
index 2ae5e4e0f..18526966e 100644
--- a/lib/widgets/settings/language/locale.dart
+++ b/lib/widgets/settings/language/locale.dart
@@ -46,6 +46,8 @@ class LocaleTile extends StatelessWidget {
return 'English';
case 'ko':
return '한국어';
+ case 'ru':
+ return 'Русский';
}
return locale.toString();
}
diff --git a/pubspec.yaml b/pubspec.yaml
index 86aee014d..2787ee6db 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -108,8 +108,6 @@ flutter:
# language files:
# - /lib/l10n/app_{language}.arb
# - /android/app/src/main/res/values-{language}/strings.xml
-# - /android/app/src/debug/res/values-{language}/strings.xml (optional)
-# - /android/app/src/profile/res/values-{language}/strings.xml (optional)
# - edit locale name resolution for language setting
# generate `AppLocalizations`