From 37b219bd902e40ce4da1389a71a0bb92b32aa7eb Mon Sep 17 00:00:00 2001 From: Dmitro Date: Wed, 20 Aug 2025 00:49:12 +0300 Subject: [PATCH] feat: Add i18n Ukrainian (#1307) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add lang * Update uk-UA.json * fix: locale uk-UA * add uk-UA to readme --------- Co-authored-by: Maxi Quoß --- README.md | 1 + frontend/project.inlang/settings.json | 1 + frontend/src/lib/stores/locale.ts | 6 +- frontend/src/routes/account/+page.svelte | 1 + frontend/translations/uk-UA.json | 195 +++++++++++++++++++++++ 5 files changed, 203 insertions(+), 1 deletion(-) create mode 100644 frontend/translations/uk-UA.json diff --git a/README.md b/README.md index b32dcfa4..a9817c55 100644 --- a/README.md +++ b/README.md @@ -140,6 +140,7 @@ UpSnap is available in the following languages so far: - 🇳🇴 **Norwegian** (nb-NO) - 🇵🇱 **Polish** (pl-PL) - 🇵🇹 **Portuguese** (pt-PT) +- 🇺🇦 **Ukrainian** (uk-UA) - 🇹🇼 **Chinese (Taiwan)** (zh-TW) - 🇨🇳 **Chinese** (zh-CN) diff --git a/frontend/project.inlang/settings.json b/frontend/project.inlang/settings.json index 9c19830c..75c37b49 100644 --- a/frontend/project.inlang/settings.json +++ b/frontend/project.inlang/settings.json @@ -14,6 +14,7 @@ "nb-NO", "pl-PL", "pt-PT", + "uk-UA", "zh-TW", "zh-CN" ], diff --git a/frontend/src/lib/stores/locale.ts b/frontend/src/lib/stores/locale.ts index e9296ca4..43ccaf67 100644 --- a/frontend/src/lib/stores/locale.ts +++ b/frontend/src/lib/stores/locale.ts @@ -8,10 +8,11 @@ import { fr } from 'date-fns/locale/fr'; import { it } from 'date-fns/locale/it'; import { ja } from 'date-fns/locale/ja'; import { ko } from 'date-fns/locale/ko'; -import { nl } from 'date-fns/locale/nl'; import { nb } from 'date-fns/locale/nb'; +import { nl } from 'date-fns/locale/nl'; import { pl } from 'date-fns/locale/pl'; import { pt } from 'date-fns/locale/pt'; +import { uk } from 'date-fns/locale/uk'; import { zhCN } from 'date-fns/locale/zh-CN'; import { zhTW } from 'date-fns/locale/zh-TW'; @@ -58,6 +59,9 @@ localeStore.subscribe((l: string) => { case 'pt': dateFnsLocale.set(pt); break; + case 'uk-UA': + dateFnsLocale.set(uk); + break; case 'zh-CN': dateFnsLocale.set(zhCN); break; diff --git a/frontend/src/routes/account/+page.svelte b/frontend/src/routes/account/+page.svelte index 44395487..c915e75c 100644 --- a/frontend/src/routes/account/+page.svelte +++ b/frontend/src/routes/account/+page.svelte @@ -28,6 +28,7 @@ 'nb-NO': '🇳🇴', 'pl-PL': '🇵🇱', 'pt-PT': '🇵🇹', + 'uk-UA': '🇺🇦', 'zh-TW': '🇹🇼', 'zh-CN': '🇨🇳' }; diff --git a/frontend/translations/uk-UA.json b/frontend/translations/uk-UA.json new file mode 100644 index 00000000..c856136d --- /dev/null +++ b/frontend/translations/uk-UA.json @@ -0,0 +1,195 @@ +{ + "$schema": "https://inlang.com/schema/inlang-message-format", + "account_account_type_admin": "Адміністратор", + "account_account_type_user": "Користувач", + "account_avatar_title": "Аватар", + "account_change_password_body": "Після зміни пароля необхідно буде увійти повторно.", + "account_change_password_confirm": "Підтвердіть пароль", + "account_change_password_label": "Старий пароль", + "account_change_password_new": "Новий пароль", + "account_change_password_title": "Змінити пароль", + "account_language_title": "Мова", + "account_page_title": "Обліковий запис", + "buttons_add": "Додати", + "buttons_cancel": "Скасувати", + "buttons_change": "Змінити", + "buttons_confirm": "Підтвердити", + "buttons_delete": "Видалити", + "buttons_reset": "Скинути", + "buttons_save": "Зберегти", + "device_card_btn_more_edit": "Редагувати", + "device_card_btn_more_reboot": "Перезавантаження", + "device_card_btn_more_sleep": "Сон", + "device_card_btn_more": "Більше", + "device_card_nic_tooltip_pending": "В очікуванні", + "device_card_nic_tooltip_power_no_permission": "Немає дозволу увімкнути цей пристрій", + "device_card_nic_tooltip_power": "Увімкнути", + "device_card_nic_tooltip_shutdown_no_cmd": "Не встановлено команду вимкнення", + "device_card_nic_tooltip_shutdown_no_permission": "Немає дозволу вимкнути цей пристрій", + "device_card_nic_tooltip_shutdown": "Вимкнути", + "device_card_password": "Пароль", + "device_card_tooltip_last_status_change": "Остання зміна статусу", + "device_card_tooltip_shutdown_cron": "Вимкнути cron", + "device_card_tooltip_wake_cron": "Розбудити cron", + "device_card_tooltip_wake_password": "Пароль пробудження", + "device_general_description_placeholder": "Опису пристрою", + "device_general_description": "Опис", + "device_general_ip": "IP", + "device_general_mac": "MAC адреса", + "device_general_name": "Ім'я", + "device_general_netmask": "Маска мережі", + "device_general_required_field": "Обов'язкове поле", + "device_general": "Основні", + "device_groups_desc": "Ви можете додати пристрої до групи, щоб вони були відсортовані за групами на інформаційній панелі.", + "device_groups_placeholder": "Наприклад «Підвал» або «Офіс»", + "device_groups": "Групи", + "device_link_desc": "Дає змогу використовувати назву вашого пристрою як посилання на яке можна натиснути, це чудово підходить наприклад для відкриття дашборд панелей.", + "device_link_open_new_tab": "Відкрити в новому вікні браузера", + "device_link_open_no": "Не обрано", + "device_link_open_same_tab": "Відкрити в поточному вікні браузера", + "device_link_open": "Автоматично відкрити посилання", + "device_link": "Посилання", + "device_modal_confirm_shutdown_desc": "Підтвердьте, щоб вимкнути {device}.", + "device_modal_confirm_shutdown_title": "Вимкнути {device}?", + "device_modal_confirm_wake_desc": "Будь ласка, підтвердьте, щоб розбудити {device}.", + "device_modal_confirm_wake_title": "Розбудити {device}?", + "device_network_scan_add_all": "Додайте всі пристрої", + "device_network_scan_desc": "Автоматично скануйте свою мережу на наявність пристроїв. Щоб це працювало, вам потрібно запустити UpSnap від імені root/admin і мати встановлений і доступний nmap у вашому $PATH (в Docker версії це вже виконано, нічого додатково робити не потрібно). Сканування може тривати кілька секунд.", + "device_network_scan_include_unknown": "Включати пристрої з назвою \"Невідомо\"", + "device_network_scan_ip_range": "Діапазон IP", + "device_network_scan_ip": "IP:", + "device_network_scan_mac_vendor": "Постачальник MAC:", + "device_network_scan_mac": "MAC:", + "device_network_scan_netmask": "Маска мережі:", + "device_network_scan_new_netmask": "Нова маска мережі", + "device_network_scan_no_range": "Немає діапазону сканування", + "device_network_scan_range_saved": "Діапазон сканування збережено", + "device_network_scan_replace_netmask": "Замінити маску мережі для всіх пристроїв?", + "device_network_scan_running": "Сканування запущено", + "device_network_scan_unsaved_changes": "Незбережені зміни", + "device_network_scan": "Сканувати", + "device_page_title": "Новий пристрій", + "device_password_desc": "Деякі мережеві карти мають можливість установити пароль для Magic пакетів, який також називається SecureON. Пароль може складатися лише з 0, 4 або 6 символів.", + "device_password": "Пароль", + "device_ping_cmd": "Спеціальна команда ping", + "device_ping_desc": "Ви можете використовувати спеціальну команду оболонки, щоб перевірити, чи ввімкнено пристрій. Команда має повертати код виходу 0, щоб вказати, що пристрій увімкнено, будь-який інший код виходу позначатиме пристрій як вимкнений.", + "device_ping": "Пінг", + "device_ports_add_new": "Додати новий порт", + "device_ports_desc": "UpSnap також може перевірити, чи відкриті дані порти.", + "device_ports_name": "Ім'я", + "device_ports_number": "Номер", + "device_ports": "Порти", + "device_require_confirmation": "Вимагати підтвердження", + "device_shutdown_cmd": "Команда вимкнення", + "device_shutdown_cron_desc": "Подібно до налаштування cron для пробудження пристрою, ви також можете запланувати завдання cron для вимкнення цього пристрою.", + "device_shutdown_cron_enable": "Увімкнути cron для завершення роботи", + "device_shutdown_cron": "Вимкнути cron", + "device_shutdown_desc": "Ця команда оболонки виконуватиметься у вашому контейнері (якщо ви використовуєте Docker) або на вашому хості (якщо ви використовуєте двійковий файл). Щоб переконатися, що це працює, ви можете спочатку запустити команду всередині контейнера або в оболонці хоста. Типовими командами є net rpc для Windows, sshpass для Linux або curl загалом для виконання веб-запитів.", + "device_shutdown_examples_linux": "Вимкнути віддалену машину Linux:", + "device_shutdown_examples_windows": "Вимкнути віддалену машину Windows:", + "device_shutdown_examples": "Приклади:", + "device_shutdown_timeout": "Час очікування вимкнення (секунди)", + "device_shutdown": "Вимкнення", + "device_sol_authorization": "Авторизація", + "device_sol_desc1": "Ви можете перевести комп’ютери в режим сну за допомогою інструмента Sleep-On-LAN. Sleep-On-LAN (SOL) — це зовнішній інструмент/демон, який працює на ПК, які потрібно перевести в режим сну, надаючи кінцеву точку REST. Щоб отримати вказівки щодо налаштування Sleep-On-LAN, перегляньте розділ Використання.", + "device_sol_desc2": "SOL налаштовано на надсилання запитів через HTTP замість UDP, щоб увімкнути авторизацію та зробити запити більш надійними.", + "device_sol_desc3": "Тому переконайтеся, що ви включили HTTP:<YOURPORT> у розділ Слухачі конфігурації SOL.", + "device_sol_enable": "Увімкніть Sleep-On-LAN", + "device_sol_password": "Пароль SOL", + "device_sol_port": "Порт SOL", + "device_sol_user": "Користувач SOL", + "device_sol": "Sleep-On-LAN", + "device_tabs.0": "Параметри", + "device_tabs.1": "Сканування мережі", + "device_wake_cmd": "Спеціальна команда пробудження", + "device_wake_cron_enable": "Увімкнути wake cron", + "device_wake_cron": "Пробудження cron", + "device_wake_desc": "Ви можете пробудити цей пристрій за допомогою запланованого завдання cron.", + "device_wake_timeout": "Час очікування пробудження (секунди)", + "device_wake": "Пробудження", + "home_add_first_device": "Додайте свій перший пристрій", + "home_grant_permissions": "Попросіть адміністратора надати вам дозволи на наявні пристрої або створити нові.", + "home_no_devices": "Тут немає пристроїв.", + "home_order_groups": "Групи", + "home_order_ip": "IP", + "home_order_name": "Ім'я", + "home_order_tooltip": "Порядок", + "home_page_title": "Головна", + "home_search_placeholder": "Пошук пристроїв", + "home_wake_group": "Пробудження групи", + "login_btn_login": "Увійти", + "login_btn_more": "Додатково", + "login_email_label": "Електронна пошта або ім'я користувача:", + "login_menu_title_auth_providers": "Інші методи авторизації", + "login_password_label": "Пароль:", + "login_welcome": "Ласкаво просимо", + "navbar_edit_account": "Редагувати обліковий запис", + "navbar_logout": "Вийти", + "navbar_new": "Додати", + "navbar_theme": "Тема", + "settings_icon_desc": "Встановіть спеціальну піктограму. Підтримувані типи файлів:", + "settings_icon_title": "Значок", + "settings_invalid_cron": "❌ Недійсний синтаксис cron", + "settings_lazy_ping_desc": "Коли ввімкнено відкладений пінг, UpSnap перевірятиме лише пристрої, якщо є активний користувач, який відвідує веб-сайт. Якщо його вимкнено, UpSnap завжди перевіряє пристрої.", + "settings_lazy_ping_enable": "Увімкнути", + "settings_lazy_ping_title": "Відкладений пінг", + "settings_page_title": "Налаштування", + "settings_ping_interval_desc1": "Встановлює інтервал, протягом якого пристрої перевіряються. Залиште поле порожнім, щоб використовувати значення за умовчанням */3 * * * * *.", + "settings_ping_interval_desc2": "Дізнайтеся більше про правильний синтаксис для cron у Вікіпедії або зверніться до документації пакета.", + "settings_ping_interval_title": "Інтервал ping", + "settings_upsnap_version": "Версія UpSnap", + "settings_website_title_desc": "Встановлює назву для веб-сайту та вкладки браузера.", + "settings_website_title_title": "Назва сайту", + "toasts_admin_saved": "Адміністратора збережено", + "toasts_device_created": "Створено {device}", + "toasts_device_deleted": "Видалено {device}", + "toasts_device_updated": "Оновлено {device}", + "toasts_devices_created_multiple": "Створено {count} пристроїв", + "toasts_group_created": "Створено групу {group}", + "toasts_group_deleted": "Видалено групу {group}", + "toasts_no_permission": "Ви не маєте дозволу відвідувати {url}", + "toasts_password_changed": "Пароль змінено. Увійдіть ще раз.", + "toasts_passwords_missmatch": "Паролі не збігаються", + "toasts_permissions_created": "Дозволи для {username} створено", + "toasts_permissions_deleted": "Дозволи для {username} видалено", + "toasts_permissions_updated_personal": "Ваші дозволи оновлено", + "toasts_permissions_updated": "Дозволи для {username} оновлено", + "toasts_settings_saved": "Збережені налаштування", + "toasts_user_created": "Користувача {username} створено", + "toasts_user_deleted": "Користувача {username} видалено", + "toasts_user_saved": "Користувача збережено", + "users_allow_create_devices": "Дозвольте {username} створювати нові пристрої та редагувати групи пристроїв", + "users_confirm_delete_desc": "Ви впевнені, що хочете видалити {username}?", + "users_confirm_delete_title": "Підтвердити видалення", + "users_create_new_device": "Створіть новий пристрій", + "users_create_new_user": "Створити нового користувача", + "users_delete": "Видалити", + "users_device_permissions": "Дозволи пристрою", + "users_page_title": "Користувачі", + "users_password_confirm": "Підтвердження пароля", + "users_password": "Пароль", + "users_power": "Керування живленням", + "users_read": "Читання", + "users_required_field": "Обов'язкове поле", + "users_toggle": "Перемикач", + "users_update": "Оновити", + "users_username": "Ім'я користувача", + "welcome_not_expected_back": "Відвези мене назад", + "welcome_not_expected_desc": "Ви вже закінчили налаштування! Нічого робити.", + "welcome_not_expected_title": "Я вас тут не чекав! 🧐", + "welcome_progress_step1": "Ласкаво просимо", + "welcome_progress_step2": "Створити акаунт", + "welcome_progress_step3": "Готово", + "welcome_step1_page_title": "Ласкаво просимо до UpSnap 🥳", + "welcome_step1_setup_btn_next": "Далі", + "welcome_step1_setup_desc": "Щоб завершити налаштування, виконайте наведені нижче дії.", + "welcome_step2_btn_create": "Створити", + "welcome_step2_label_email": "Електронна пошта:", + "welcome_step2_label_min_chars": "мінімум 10 символів", + "welcome_step2_label_password_confirm": "Підтвердження пароля:", + "welcome_step2_label_password": "Пароль:", + "welcome_step2_page_title": "Створіть обліковий запис адміністратора", + "welcome_step3_btn_done": "Приступити!", + "welcome_step3_page_desc": "Тепер можете додати кілька пристроїв на інформаційну панель.", + "welcome_step3_page_title": "Все готово! 🎉" +} \ No newline at end of file