From 4686b19116f56ce0319d53151f96867d51ced5c9 Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Thu, 28 Oct 2021 09:47:15 +0900 Subject: [PATCH] l10n: added russian (thanks D3ZOXY) --- .../app/src/debug/res/values-ko/strings.xml | 4 - .../app/src/main/res/values-ko/strings.xml | 2 +- .../app/src/main/res/values-ru/strings.xml | 10 + .../app/src/profile/res/values-ko/strings.xml | 4 - lib/l10n/app_en.arb | 2 + lib/l10n/app_ko.arb | 1 + lib/l10n/app_ru.arb | 478 ++++++++++++++++++ lib/widgets/about/credits.dart | 12 + lib/widgets/settings/language/locale.dart | 2 + pubspec.yaml | 2 - 10 files changed, 506 insertions(+), 11 deletions(-) delete mode 100644 android/app/src/debug/res/values-ko/strings.xml create mode 100644 android/app/src/main/res/values-ru/strings.xml delete mode 100644 android/app/src/profile/res/values-ko/strings.xml create mode 100644 lib/l10n/app_ru.arb 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`