diff --git a/src/scripts/i18n/README.md b/src/scripts/i18n/README.md index 4c8325c..dda202f 100644 --- a/src/scripts/i18n/README.md +++ b/src/scripts/i18n/README.md @@ -12,5 +12,6 @@ Currently, Fluent Reader supports the following languages. | de | Deutsch | [@NoNamePro0](https://github.com/NoNamePro0) | | sv | Svenska | [@eson57](https://github.com/eson57) | | tr | Türkçe | [@mustafagenc](https://github.com/mustafagenc) | +| ua | Ukrainian | [@thevllad](https://github.com/thevllad) | Refer to the repo of [react-intl-universal](https://github.com/alibaba/react-intl-universal) to get started on internationalization. diff --git a/src/scripts/i18n/_locales.ts b/src/scripts/i18n/_locales.ts index 58a5e8c..5190d08 100644 --- a/src/scripts/i18n/_locales.ts +++ b/src/scripts/i18n/_locales.ts @@ -9,6 +9,7 @@ import es from "./es.json" import sv from "./sv.json" import tr from "./tr.json" import it from "./it.json" +import ua from "./ua.json" const locales = { "en-US": en_US, @@ -21,7 +22,8 @@ const locales = { "es": es, "sv": sv, "tr": tr, - "it": it + "it": it, + "ua": ua } export default locales diff --git a/src/scripts/i18n/ua.json b/src/scripts/i18n/ua.json new file mode 100644 index 0000000..457e771 --- /dev/null +++ b/src/scripts/i18n/ua.json @@ -0,0 +1,235 @@ +{ + "allArticles": "Всі статті", + "add": "Додати", + "create": "Створити", + "icon": "Іконка", + "name": "Ім'я", + "openExternal": "Відкрити зовні", + "emptyName": "Це поле не може бути порожнім.", + "emptyField": "Це поле не може бути порожнім.", + "edit": "Редагувати", + "delete": "Видалити", + "followSystem": "Як у системі", + "more": "Більше", + "close": "Закрити", + "search": "Шукати", + "loadMore": "Завантажити більше", + "dangerButton": "Справді {action}?", + "confirmMarkAll": "Ви дійсно хочете позначити всі статті на цій сторінці як прочитані?", + "confirm": "Підтвердити", + "cancel": "Назад", + "time": { + "now": "щойно", + "m": "х", + "h": "г", + "d": "д", + "minute": "{m, plural, =1 {# хвилина} other {# хвилин}}", + "hour": "{h, plural, =1 {# година} other {# годин}}", + "day": "{d, plural, =1 {# день} other {# днів}}" + }, + "log": { + "empty": "Немає сповіщень", + "fetchFailure": "Не вдалося завантажити джерело \"{name}\".", + "fetchSuccess": "Успішно завантажено {count, plural, =1 {# стаття} other {# статів}}.", + "networkError": "Сталася помилка мережі.", + "parseError": "Під час аналізу стрічки XML сталася помилка.", + "syncFailure": "Не вдалося синхронізувати зі службою" + }, + "nav": { + "menu": "Меню", + "refresh": "Оновити", + "markAllRead": "Позначити всі як прочитані", + "notifications": "Сповіщення", + "view": "Вигляд", + "settings": "Налаштування", + "minimize": "Мінімізувати", + "maximize": "Максимізувати" + }, + "menu": { + "close": "Закрити меню", + "subscriptions": "Підписки" + }, + "article": { + "error": "Не вдалося завантажити статтю.", + "reload": "Перезавантажити?", + "empty": "Статей немає", + "untitled": "(Без назви)", + "hide": "Сховати статтю", + "unhide": "Показати статтю", + "markRead": "Позначити як прочитане", + "markUnread": "Позначити як непрочитане", + "markAbove": "Позначити вище як прочитане", + "markBelow": "Позначити нижче як прочитане", + "star": "Зберегти", + "unstar": "Прибрати з збереженого", + "fontSize": "Розмір шрифту", + "loadWebpage": "Завантажити веб-сторінку", + "loadFull": "Завантажте повний вміст", + "notify": "Сповісти, якщо отримано у фоновому режимі", + "dontNotify": "Не сповіщати" + }, + "context": { + "share": "Поділитися", + "read": "Читати", + "copyTitle": "Копіювати заголовок", + "copyURL": "Копіювати посилання", + "copy": "Копіювати", + "search": "Шукати \"{text}\" в {engine}", + "view": "Вигляд", + "cardView": "Карточний", + "listView": "Списком", + "magazineView": "Журнальний", + "compactView": "Компактний", + "filter": "Фільтр", + "unreadOnly": "Лише непрочитане", + "starredOnly": "Лише збережені", + "fullSearch": "Шукати в повному тексті", + "showHidden": "Показати приховані статті", + "manageSources": "Керувати джерелами", + "saveImageAs": "Зберегти зображення як …", + "copyImage": "Копіювати зображення", + "copyImageURL": "Копіювати адресу зображення", + "caseSensitive": "З урахуванням регістру", + "showCover": "Показати обкладинку", + "showSnippet": "Показати фрагмент", + "fadeRead": "Fade читати статті" + }, + "searchEngine": { + "name": "Пошукова система", + "google": "Google", + "bing": "Bing", + "baidu": "Baidu", + "duckduckgo": "DuckDuckGo" + }, + "settings": { + "writeError": "Під час запису файлу сталася помилка.", + "name": "Налаштування", + "fetching": "Оновлення джерел, зачекайте …", + "exit": "Вийти з налаштувань", + "sources": "Джерела", + "grouping": "Групи", + "rules": "Правила", + "service": "Сервіси", + "app": "Вподобання", + "about": "Відомості", + "version": "Версія", + "shortcuts": "Комбінації клавіш", + "openSource": "Відкрити джерело", + "feedback": "Зворотній зв'язок" + }, + "sources": { + "serviceWarning": "Джерела, імпортовані або додані сюди, не будуть синхронізовані з вашою службою.", + "serviceManaged": "Цим джерелом керує ваша служба.", + "untitled": "Джерело", + "errorAdd": "Під час додавання джерела сталася помилка.", + "errorParse": "Під час аналізу файлу OPML сталася помилка.", + "errorParseHint": "Переконайтеся, що файл не пошкоджений і має кодування UTF-8.", + "errorImport": "Помилка імпорту {count, plural, =1 {# джерела} other {# джерел}}.", + "exist": "Це джерело вже існує.", + "opmlFile": "OPML Файл", + "name": "Назва джерела", + "editName": "Редагувати назву", + "fetchFrequency": "Вибір обмеження частоти", + "unlimited": "Необмежений", + "openTarget": "Відкрита ціль за замовчуванням для статей", + "delete": "Видалити джерело", + "add": "Додати джерело", + "import": "Імпорт", + "export": "Експорт", + "rssText": "Повний текст RSS", + "loadWebpage": "Завантажити веб-сторінку", + "inputUrl": "Введіть URL-адресу", + "badIcon": "Недійсна іконка", + "badUrl": "Недійсна URL-адреса", + "deleteWarning": "Джерело та всі збережені статті будуть видалені.", + "selected": "Вибране джерело", + "selectedMulti": "Вибрано кілька джерел" + }, + "groups": { + "exist": "Ця група вже існує.", + "type": "Тип", + "group": "Група", + "source": "Джерело", + "capacity": "Місткість", + "exitGroup": "Повернутися до груп", + "deleteSource": "Видалити з групи", + "sourceHint": "Перетягніть джерела, щоб змінити порядок.", + "create": "Створити групу", + "selectedGroup": "Вибрана група", + "selectedSource": "Вибране джерело", + "enterName": "Введіть назву", + "editName": "Редагувати назву", + "deleteGroup": "Видалити групу", + "chooseGroup": "Вибрати групу", + "addToGroup": "Додати до ...", + "groupHint": "Двічі клацніть на групі, щоб редагувати джерела. Перетягніть, щоб змінити порядок." + }, + "rules": { + "intro": "Автоматично позначайте статті або надсилайте сповіщення регулярними виразами.", + "help": "Дізнатися більше", + "source": "Джерело", + "selectSource": "Виберіть джерело", + "new": "Нове правило", + "if": "Якщо", + "then": "Тоді", + "title": "Заголовок", + "content": "Вміст", + "fullSearch": "Заголовок та вміст", + "creator": "Автор", + "match": "якщо збігається", + "notMatch": "не збігається", + "regex": "Регулярний вираз (Regex)", + "badRegex": "Недійсний регулярний вираз. (Regex)", + "action": "Дії", + "selectAction": "Вибрати дії", + "hint": "Правила застосовуватимуться по порядку. Перетягніть, щоб змінити порядок.", + "test": "Тест правил" + }, + "service": { + "intro": "Синхронізація між пристроями за допомогою служб RSS.", + "select": "Вибрати службу", + "suggest": "Запропонуйте нову службу", + "overwriteWarning": "Локальні джерела будуть видалені, якщо вони існують в службі.", + "groupsWarning": "Групи не синхронізуються автоматично зі службою.", + "rateLimitWarning": "Щоб уникнути обмеження швидкості, вам потрібно створити власний ключ API.", + "removeAd": "Видалити рекламу", + "endpoint": "Кінцева точка", + "username": "Ім'я користувача", + "password": "Пароль", + "unchanged": "Без змін", + "fetchLimit": "Обмеження синхронізації", + "fetchLimitNum": "{count} останніх статей", + "importGroups": "Імпортувати групи", + "failure": "Не вдається підключитися до служби", + "failureHint": "Будь ласка, перевірте конфігурацію служби або стан мережі.", + "fetchUnlimited": "Необмежений (не рекомендується)", + "exportToLite": "Експорт у програму Fluent Reader Lite" + }, + "app": { + "cleanup": "Прибирати", + "cache": "Очистити кеш", + "cacheSize": "Кешовано {size} даних", + "deleteChoices": "Видалити статті з ... днів тому", + "confirmDelete": "Видалити", + "daysAgo": "{days, plural, =1 {# день} other {# днів}} ago", + "deleteAll": "Видалити всі статті", + "calculatingSize": "Розрахунок розміру ...", + "itemSize": "Близько {size} локальної пам'яті займають статті", + "confirmImport": "Ви дійсно хочете імпортувати дані з файлу резервної копії? Усі поточні дані будуть знищені.", + "data": "Дані програми", + "backup": "Резервне копіювання", + "restore": "Відновити", + "frData": "Дані Fluent Reader", + "language": "Мова", + "theme": "Тема", + "lightTheme": "Світлий режим", + "darkTheme": "Темний режим", + "enableProxy": "Увімкнути Proxy", + "badUrl": "Недійсна URL-адреса", + "pac": "Адреса PAC", + "setPac": "Встановити PAC", + "pacHint": "Для проксі Socks рекомендується, щоб PAC повертав \"SOCKS5\" для DNS на стороні проксі. Для відключення проксі потрібне перезавантаження.", + "fetchInterval": "Інтервал автоматичної вибірки", + "never": "Ніколи" + } +}