From cbd2620c46c90bf6c8401fb91e74fdeeddab7ee3 Mon Sep 17 00:00:00 2001 From: MYMDO <90605529+MYMDO@users.noreply.github.com> Date: Tue, 19 May 2026 09:45:39 +0300 Subject: [PATCH] feat(i18n): add Ukrainian (uk) locale support (#28061) --- packages/app/src/context/language.tsx | 6 + packages/app/src/i18n/en.ts | 1 + packages/app/src/i18n/parity.test.ts | 3 +- packages/app/src/i18n/uk.ts | 963 ++++++++++++++++++++ packages/console/app/src/i18n/index.ts | 2 + packages/console/app/src/i18n/uk.ts | 785 ++++++++++++++++ packages/console/app/src/lib/language.ts | 7 + packages/desktop/src/renderer/i18n/index.ts | 6 + packages/desktop/src/renderer/i18n/uk.ts | 28 + packages/ui/src/i18n/uk.ts | 167 ++++ packages/web/src/i18n/locales.ts | 3 + screenshot-uk.png | Bin 0 -> 83462 bytes 12 files changed, 1970 insertions(+), 1 deletion(-) create mode 100644 packages/app/src/i18n/uk.ts create mode 100644 packages/console/app/src/i18n/uk.ts create mode 100644 packages/desktop/src/renderer/i18n/uk.ts create mode 100644 packages/ui/src/i18n/uk.ts create mode 100644 screenshot-uk.png diff --git a/packages/app/src/context/language.tsx b/packages/app/src/context/language.tsx index 51dc09cd7d..533b805053 100644 --- a/packages/app/src/context/language.tsx +++ b/packages/app/src/context/language.tsx @@ -18,6 +18,7 @@ export type Locale = | "ja" | "pl" | "ru" + | "uk" | "ar" | "no" | "br" @@ -45,6 +46,7 @@ const LOCALES: readonly Locale[] = [ "ja", "pl", "ru", + "uk", "bs", "ar", "no", @@ -65,6 +67,7 @@ const INTL: Record = { ja: "ja", pl: "pl", ru: "ru", + uk: "uk", ar: "ar", no: "nb-NO", br: "pt-BR", @@ -85,6 +88,7 @@ const LABEL_KEY: Record = { ja: "language.ja", pl: "language.pl", ru: "language.ru", + uk: "language.uk", ar: "language.ar", no: "language.no", br: "language.br", @@ -110,6 +114,7 @@ const loaders: Record, () => Promise> = { ja: () => merge(import("@/i18n/ja"), import("@opencode-ai/ui/i18n/ja")), pl: () => merge(import("@/i18n/pl"), import("@opencode-ai/ui/i18n/pl")), ru: () => merge(import("@/i18n/ru"), import("@opencode-ai/ui/i18n/ru")), + uk: () => merge(import("@/i18n/uk"), import("@opencode-ai/ui/i18n/uk")), ar: () => merge(import("@/i18n/ar"), import("@opencode-ai/ui/i18n/ar")), no: () => merge(import("@/i18n/no"), import("@opencode-ai/ui/i18n/no")), br: () => merge(import("@/i18n/br"), import("@opencode-ai/ui/i18n/br")), @@ -145,6 +150,7 @@ const localeMatchers: Array<{ locale: Locale; match: (language: string) => boole { locale: "ja", match: (language) => language.startsWith("ja") }, { locale: "pl", match: (language) => language.startsWith("pl") }, { locale: "ru", match: (language) => language.startsWith("ru") }, + { locale: "uk", match: (language) => language.startsWith("uk") }, { locale: "ar", match: (language) => language.startsWith("ar") }, { locale: "no", diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts index 6bb9d3fc44..2f82d0a78d 100644 --- a/packages/app/src/i18n/en.ts +++ b/packages/app/src/i18n/en.ts @@ -416,6 +416,7 @@ export const dict = { "language.no": "Norsk", "language.br": "Português (Brasil)", "language.bs": "Bosanski", + "language.uk": "Українська", "language.th": "ไทย", "language.tr": "Türkçe", diff --git a/packages/app/src/i18n/parity.test.ts b/packages/app/src/i18n/parity.test.ts index c06a55ab17..8ad1beb56b 100644 --- a/packages/app/src/i18n/parity.test.ts +++ b/packages/app/src/i18n/parity.test.ts @@ -12,12 +12,13 @@ import { dict as ko } from "./ko" import { dict as no } from "./no" import { dict as pl } from "./pl" import { dict as ru } from "./ru" +import { dict as uk } from "./uk" import { dict as th } from "./th" import { dict as zh } from "./zh" import { dict as zht } from "./zht" import { dict as tr } from "./tr" -const locales = [ar, br, bs, da, de, es, fr, ja, ko, no, pl, ru, th, tr, zh, zht] +const locales = [ar, br, bs, da, de, es, fr, ja, ko, no, pl, ru, uk, th, tr, zh, zht] const keys = ["command.session.previous.unseen", "command.session.next.unseen"] as const describe("i18n parity", () => { diff --git a/packages/app/src/i18n/uk.ts b/packages/app/src/i18n/uk.ts new file mode 100644 index 0000000000..4ee6374892 --- /dev/null +++ b/packages/app/src/i18n/uk.ts @@ -0,0 +1,963 @@ +export const dict = { + "command.category.suggested": "Рекомендовані", + "command.category.view": "Вигляд", + "command.category.project": "Проєкт", + "command.category.provider": "Провайдер", + "command.category.server": "Сервер", + "command.category.session": "Сесія", + "command.category.theme": "Тема", + "command.category.language": "Мова", + "command.category.file": "Файл", + "command.category.context": "Контекст", + "command.category.terminal": "Термінал", + "command.category.model": "Модель", + "command.category.mcp": "MCP", + "command.category.agent": "Агент", + "command.category.permissions": "Дозволи", + "command.category.workspace": "Робоча область", + "command.category.settings": "Налаштування", + + "theme.scheme.system": "Системна", + "theme.scheme.light": "Світла", + "theme.scheme.dark": "Темна", + + "command.sidebar.toggle": "Перемкнути бічну панель", + "command.project.open": "Відкрити проєкт", + "command.project.previous": "Попередній проєкт", + "command.project.next": "Наступний проєкт", + "command.project.index": "Перемкнути на проєкт {{index}}", + "command.provider.connect": "Підключити провайдера", + "command.server.switch": "Перемкнути сервер", + "command.settings.open": "Відкрити налаштування", + "command.session.previous": "Попередня сесія", + "command.session.next": "Наступна сесія", + "command.session.previous.unseen": "Попередня непрочитана сесія", + "command.session.next.unseen": "Наступна непрочитана сесія", + "command.session.archive": "Архівувати сесію", + + "command.palette": "Палітра команд", + + "command.theme.cycle": "Перемкнути тему", + "command.theme.set": "Використати тему: {{theme}}", + "command.theme.scheme.cycle": "Перемкнути кольорову схему", + "command.theme.scheme.set": "Використати кольорову схему: {{scheme}}", + + "command.language.cycle": "Перемкнути мову", + "command.language.set": "Використати мову: {{language}}", + + "command.session.new": "Нова сесія", + "command.file.open": "Відкрити файл", + "command.tab.close": "Закрити вкладку", + "command.context.addSelection": "Додати виділення до контексту", + "command.context.addSelection.description": "Додати вибрані рядки з поточного файлу", + "command.input.focus": "Фокус на полі введення", + "command.terminal.toggle": "Перемкнути термінал", + "command.fileTree.toggle": "Перемкнути дерево файлів", + "command.review.toggle": "Перемкнути огляд", + "command.terminal.new": "Новий термінал", + "command.terminal.new.description": "Створити нову вкладку термінала", + "command.steps.toggle": "Перемкнути кроки", + "command.steps.toggle.description": "Показати або приховати кроки для поточного повідомлення", + "command.message.previous": "Попереднє повідомлення", + "command.message.previous.description": "Перейти до попереднього повідомлення користувача", + "command.message.next": "Наступне повідомлення", + "command.message.next.description": "Перейти до наступного повідомлення користувача", + "command.model.choose": "Вибрати модель", + "command.model.choose.description": "Вибрати іншу модель", + "command.mcp.toggle": "Перемкнути MCP", + "command.mcp.toggle.description": "Перемкнути MCP", + "command.agent.cycle": "Перемкнути агента", + "command.agent.cycle.description": "Перемкнути на наступного агента", + "command.agent.cycle.reverse": "Перемкнути агента в зворотному напрямку", + "command.agent.cycle.reverse.description": "Перемкнути на попереднього агента", + "command.model.variant.cycle": "Перемкнути рівень мислення", + "command.model.variant.cycle.description": "Перемкнути на наступний рівень зусилля", + "command.prompt.mode.shell": "Команда", + "command.prompt.mode.normal": "Запит", + "command.permissions.autoaccept.enable": "Автоматично приймати дозволи", + "command.permissions.autoaccept.disable": "Зупинити автоматичне прийняття дозволів", + "command.workspace.toggle": "Перемкнути робочі області", + "command.workspace.toggle.description": "Увімкнути або вимкнути декілька робочих областей на бічній панелі", + "command.session.undo": "Скасувати", + "command.session.undo.description": "Скасувати останнє повідомлення", + "command.session.redo": "Повторити", + "command.session.redo.description": "Повторити останнє скасоване повідомлення", + "command.session.compact": "Стиснути сесію", + "command.session.compact.description": "Підсумувати сесію, щоб зменшити розмір контексту", + "command.session.fork": "Відгалузити від повідомлення", + "command.session.fork.description": "Створити нову сесію з попереднього повідомлення", + "command.session.share": "Поділитися сесією", + "command.session.share.description": "Поділитися цією сесією та скопіювати URL у буфер обміну", + "command.session.unshare": "Припинити поширення сесії", + "command.session.unshare.description": "Припинити поширення цієї сесії", + + "palette.search.placeholder": "Пошук файлів, команд і сесій", + "palette.empty": "Результатів не знайдено", + "palette.group.commands": "Команди", + "palette.group.files": "Файли", + + "dialog.provider.search.placeholder": "Пошук провайдерів", + "dialog.provider.empty": "Провайдерів не знайдено", + "dialog.provider.group.popular": "Популярні", + "dialog.provider.group.other": "Інші", + "dialog.provider.tag.recommended": "Рекомендовані", + "dialog.provider.opencode.note": "Відібрані моделі, включаючи Claude, GPT, Gemini та інші", + "dialog.provider.opencode.tagline": "Надійні оптимізовані моделі", + "dialog.provider.opencodeGo.tagline": "Недорога підписка для всіх", + "dialog.provider.anthropic.note": "Прямий доступ до моделей Claude, включаючи Pro та Max", + "dialog.provider.copilot.note": "Моделі AI для допомоги в кодуванні через GitHub Copilot", + "dialog.provider.openai.note": "Моделі GPT для швидких і універсальних завдань AI", + "dialog.provider.google.note": "Моделі Gemini для швидких структурованих відповідей", + "dialog.provider.openrouter.note": "Доступ до всіх підтримуваних моделей від одного провайдера", + "dialog.provider.vercel.note": "Уніфікований доступ до моделей AI з інтелектуальною маршрутизацією", + + "dialog.model.select.title": "Вибрати модель", + "dialog.model.search.placeholder": "Пошук моделей", + "dialog.model.empty": "Немає результатів моделей", + "dialog.model.manage": "Керувати моделями", + "dialog.model.manage.description": "Налаштуйте, які моделі відображатимуться у виборі моделей.", + "dialog.model.manage.provider.toggle": "Перемкнути всі моделі {{provider}}", + + "dialog.model.unpaid.freeModels.title": "Безкоштовні моделі від OpenCode", + "dialog.model.unpaid.addMore.title": "Додати більше моделей від популярних провайдерів", + + "dialog.provider.viewAll": "Показати більше провайдерів", + + "provider.connect.title": "Підключити {{provider}}", + "provider.connect.title.anthropicProMax": "Увійти з Claude Pro/Max", + "provider.connect.selectMethod": "Виберіть спосіб входу для {{provider}}.", + "provider.connect.method.apiKey": "Ключ API", + "provider.connect.status.inProgress": "Авторизація виконується...", + "provider.connect.status.waiting": "Очікування авторизації...", + "provider.connect.status.failed": "Авторизація не вдалася: {{error}}", + "provider.connect.apiKey.description": + "Введіть ключ API {{provider}}, щоб підключити обліковий запис і використовувати моделі {{provider}} у OpenCode.", + "provider.connect.apiKey.label": "Ключ API {{provider}}", + "provider.connect.apiKey.placeholder": "Ключ API", + "provider.connect.apiKey.required": "Ключ API обов'язковий", + "provider.connect.opencodeZen.line1": + "OpenCode Zen надає доступ до відібраного набору надійних оптимізованих моделей для агентів кодування.", + "provider.connect.opencodeZen.line2": + "З одним ключем API ви отримаєте доступ до таких моделей, як Claude, GPT, Gemini, GLM та інших.", + "provider.connect.opencodeZen.visit.prefix": "Відвідайте ", + "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", + "provider.connect.opencodeZen.visit.suffix": ", щоб отримати ключ API.", + "provider.connect.oauth.code.visit.prefix": "Відвідайте ", + "provider.connect.oauth.code.visit.link": "це посилання", + "provider.connect.oauth.code.visit.suffix": + ", щоб отримати код авторизації, підключити обліковий запис і використовувати моделі {{provider}} у OpenCode.", + "provider.connect.oauth.code.label": "Код авторизації {{method}}", + "provider.connect.oauth.code.placeholder": "Код авторизації", + "provider.connect.oauth.code.required": "Код авторизації обов'язковий", + "provider.connect.oauth.code.invalid": "Недійсний код авторизації", + "provider.connect.oauth.auto.visit.prefix": "Відвідайте ", + "provider.connect.oauth.auto.visit.link": "це посилання", + "provider.connect.oauth.auto.visit.suffix": + " і введіть код нижче, щоб підключити обліковий запис і використовувати моделі {{provider}} у OpenCode.", + "provider.connect.oauth.auto.confirmationCode": "Код підтвердження", + "provider.connect.toast.connected.title": "{{provider}} підключено", + "provider.connect.toast.connected.description": "Моделі {{provider}} тепер доступні для використання.", + + "provider.custom.title": "Користувацький провайдер", + "provider.custom.description.prefix": "Налаштуйте провайдера, сумісного з OpenAI. Перегляньте ", + "provider.custom.description.link": "документацію з налаштування провайдера", + "provider.custom.description.suffix": ".", + "provider.custom.field.providerID.label": "ID провайдера", + "provider.custom.field.providerID.placeholder": "myprovider", + "provider.custom.field.providerID.description": "Малі літери, цифри, дефіси або підкреслення", + "provider.custom.field.name.label": "Відображувана назва", + "provider.custom.field.name.placeholder": "Мій AI Провайдер", + "provider.custom.field.baseURL.label": "Базовий URL", + "provider.custom.field.baseURL.placeholder": "https://api.myprovider.com/v1", + "provider.custom.field.apiKey.label": "Ключ API", + "provider.custom.field.apiKey.placeholder": "Ключ API", + "provider.custom.field.apiKey.description": "Необов'язково. Залиште порожнім, якщо ви керуєте авторизацією через заголовки.", + "provider.custom.models.label": "Моделі", + "provider.custom.models.id.label": "ID", + "provider.custom.models.id.placeholder": "model-id", + "provider.custom.models.name.label": "Назва", + "provider.custom.models.name.placeholder": "Відображувана назва", + "provider.custom.models.remove": "Видалити модель", + "provider.custom.models.add": "Додати модель", + "provider.custom.headers.label": "Заголовки (необов'язково)", + "provider.custom.headers.key.label": "Заголовок", + "provider.custom.headers.key.placeholder": "Назва-Заголовка", + "provider.custom.headers.value.label": "Значення", + "provider.custom.headers.value.placeholder": "значення", + "provider.custom.headers.remove": "Видалити заголовок", + "provider.custom.headers.add": "Додати заголовок", + "provider.custom.error.providerID.required": "ID провайдера обов'язкове", + "provider.custom.error.providerID.format": "Використовуйте малі літери, цифри, дефіси або підкреслення", + "provider.custom.error.providerID.exists": "ID провайдера вже існує", + "provider.custom.error.name.required": "Відображувана назва обов'язкова", + "provider.custom.error.baseURL.required": "Базовий URL обов'язковий", + "provider.custom.error.baseURL.format": "Має починатися з http:// або https://", + "provider.custom.error.required": "Обов'язково", + "provider.custom.error.duplicate": "Дублікат", + + "provider.disconnect.toast.disconnected.title": "{{provider}} відключено", + "provider.disconnect.toast.disconnected.description": "Моделі {{provider}} більше недоступні.", + + "model.tag.free": "Безкоштовно", + "model.tag.latest": "Остання", + "model.provider.anthropic": "Anthropic", + "model.provider.openai": "OpenAI", + "model.provider.google": "Google", + "model.provider.xai": "xAI", + "model.provider.meta": "Meta", + "model.input.text": "текст", + "model.input.image": "зображення", + "model.input.audio": "аудіо", + "model.input.video": "відео", + "model.input.pdf": "pdf", + "model.tooltip.allows": "Дозволяє: {{inputs}}", + "model.tooltip.reasoning.allowed": "Підтримує мислення", + "model.tooltip.reasoning.none": "Без мислення", + "model.tooltip.context": "Ліміт контексту {{limit}}", + + "common.search.placeholder": "Пошук", + "common.goBack": "Назад", + "common.goForward": "Вперед", + "common.loading": "Завантаження", + "common.loading.ellipsis": "...", + "common.cancel": "Скасувати", + "common.open": "Відкрити", + "common.connect": "Підключити", + "common.disconnect": "Відключити", + "common.continue": "Продовжити", + "common.submit": "Надіслати", + "common.save": "Зберегти", + "common.saving": "Збереження...", + "common.default": "За замовчуванням", + "common.attachment": "вкладення", + + "prompt.placeholder.shell": "Введіть команду термінала... {{example}}", + "prompt.placeholder.normal": "Запитайте що завгодно... \"{{example}}\"", + "prompt.placeholder.simple": "Запитайте що завгодно...", + "prompt.placeholder.summarizeComments": "Підсумувати коментарі…", + "prompt.placeholder.summarizeComment": "Підсумувати коментар…", + "prompt.mode.shell": "Команда", + "prompt.mode.normal": "Запит", + "prompt.mode.shell.exit": "esc для виходу", + "session.child.promptDisabled": "Сесії підагентів не можна надсилати запити.", + "session.child.backToParent": "Назад до основної сесії.", + + "prompt.example.1": "Виправити TODO у коді", + "prompt.example.2": "Який технологічний стек цього проєкту?", + "prompt.example.3": "Виправити зламані тести", + "prompt.example.4": "Пояснити, як працює автентифікація", + "prompt.example.5": "Знайти та виправити вразливості безпеки", + "prompt.example.6": "Додати модульні тести для сервісу користувача", + "prompt.example.7": "Рефакторити цю функцію, щоб зробити її більш читабельною", + "prompt.example.8": "Що означає ця помилка?", + "prompt.example.9": "Допоможіть мені налагодити цю проблему", + "prompt.example.10": "Згенерувати документацію API", + "prompt.example.11": "Оптимізувати запити до бази даних", + "prompt.example.12": "Додати валідацію введення", + "prompt.example.13": "Створити новий компонент для...", + "prompt.example.14": "Як розгорнути цей проєкт?", + "prompt.example.15": "Перевірити мій код на відповідність найкращим практикам", + "prompt.example.16": "Додати обробку помилок до цієї функції", + "prompt.example.17": "Пояснити цей регулярний вираз", + "prompt.example.18": "Конвертувати це в TypeScript", + "prompt.example.19": "Додати логування по всьому коду", + "prompt.example.20": "Які залежності застарілі?", + "prompt.example.21": "Допоможіть написати скрипт міграції", + "prompt.example.22": "Реалізувати кешування для цього ендпоінта", + "prompt.example.23": "Додати посторінкову навігацію до цього списку", + "prompt.example.24": "Створити команду CLI для...", + "prompt.example.25": "Як тут працюють змінні середовища?", + + "prompt.popover.emptyResults": "Немає відповідних результатів", + "prompt.popover.emptyCommands": "Немає відповідних команд", + "prompt.dropzone.label": "Перетягніть сюди зображення, PDF або текстові файли", + "prompt.dropzone.file.label": "Перетягніть, щоб @згадати файл", + "prompt.slash.badge.custom": "користувацький", + "prompt.slash.badge.skill": "навичка", + "prompt.slash.badge.mcp": "mcp", + "prompt.context.active": "активний", + "prompt.context.includeActiveFile": "Включити активний файл", + "prompt.context.removeActiveFile": "Видалити активний файл з контексту", + "prompt.context.removeFile": "Видалити файл з контексту", + "prompt.action.attachFile": "Додати файли", + "prompt.attachment.remove": "Видалити вкладення", + "prompt.action.send": "Надіслати", + "prompt.action.stop": "Зупинити", + + "prompt.toast.pasteUnsupported.title": "Непідтримуване вкладення", + "prompt.toast.pasteUnsupported.description": "Сюди можна прикріплювати лише зображення, PDF або текстові файли.", + "prompt.toast.modelAgentRequired.title": "Виберіть агента та модель", + "prompt.toast.modelAgentRequired.description": "Виберіть агента та модель перед надсиланням запиту.", + "prompt.toast.worktreeCreateFailed.title": "Не вдалося створити робоче дерево", + "prompt.toast.sessionCreateFailed.title": "Не вдалося створити сесію", + "prompt.toast.shellSendFailed.title": "Не вдалося надіслати команду термінала", + "prompt.toast.commandSendFailed.title": "Не вдалося надіслати команду", + "prompt.toast.promptSendFailed.title": "Не вдалося надіслати запит", + "prompt.toast.promptSendFailed.description": "Не вдалося отримати сесію", + + "dialog.mcp.title": "MCP", + "dialog.mcp.description": "{{enabled}} з {{total}} увімкнено", + "dialog.mcp.empty": "MCP не налаштовано", + + "dialog.lsp.empty": "LSP автоматично виявлені за типами файлів", + "dialog.plugins.empty": "Плагіни налаштовані в opencode.json", + + "mcp.status.connected": "підключено", + "mcp.status.failed": "помилка", + "mcp.status.needs_auth": "потрібна авторизація", + "mcp.status.disabled": "вимкнено", + "mcp.auth.clickToAuthenticate": "Натисніть для автентифікації", + + "dialog.fork.empty": "Немає повідомлень для відгалуження", + + "dialog.directory.search.placeholder": "Пошук папок", + "dialog.directory.empty": "Папок не знайдено", + + "app.server.unreachable": "Не вдалося досягти {{server}}", + "app.server.retrying": "Автоматичне повторення...", + "app.server.otherServers": "Інші сервери", + + "dialog.server.title": "Сервери", + "dialog.server.description": "Перемкніть сервер OpenCode, до якого підключається ця програма.", + "dialog.server.search.placeholder": "Пошук серверів", + "dialog.server.empty": "Ще немає серверів", + "dialog.server.add.title": "Додати сервер", + "dialog.server.add.url": "Адреса сервера", + "dialog.server.add.placeholder": "http://localhost:4096", + "dialog.server.add.error": "Не вдалося підключитися до сервера", + "dialog.server.add.checking": "Перевірка...", + "dialog.server.add.button": "Додати сервер", + "dialog.server.add.name": "Назва сервера (необов'язково)", + "dialog.server.add.namePlaceholder": "Localhost", + "dialog.server.add.username": "Ім'я користувача (необов'язково)", + "dialog.server.add.usernamePlaceholder": "ім'я користувача", + "dialog.server.add.password": "Пароль (необов'язково)", + "dialog.server.add.passwordPlaceholder": "пароль", + "dialog.server.edit.title": "Редагувати сервер", + "dialog.server.default.title": "Сервер за замовчуванням", + "dialog.server.default.description": + "Підключатися до цього сервера під час запуску програми замість запуску локального сервера. Потребує перезапуску.", + "dialog.server.default.none": "Сервер не вибрано", + "dialog.server.default.set": "Встановити поточний сервер як сервер за замовчуванням", + "dialog.server.default.clear": "Очистити", + "dialog.server.action.remove": "Видалити сервер", + + "dialog.server.menu.edit": "Редагувати", + "dialog.server.menu.default": "Встановити за замовчуванням", + "dialog.server.menu.defaultRemove": "Видалити за замовчуванням", + "dialog.server.menu.delete": "Видалити", + "dialog.server.current": "Поточний сервер", + "dialog.server.status.default": "За замовчуванням", + "server.row.noUsername": "без імені користувача", + + "dialog.project.edit.title": "Редагувати проєкт", + "dialog.project.edit.name": "Назва", + "dialog.project.edit.icon": "Іконка", + "dialog.project.edit.icon.alt": "Іконка проєкту", + "dialog.project.edit.icon.hint": "Натисніть або перетягніть зображення", + "dialog.project.edit.icon.recommended": "Рекомендовано: 128x128px", + "dialog.project.edit.color": "Колір", + "dialog.project.edit.color.select": "Вибрати колір {{color}}", + "dialog.project.edit.worktree.startup": "Скрипт запуску робочої області", + "dialog.project.edit.worktree.startup.description": "Виконується після створення нової робочої області (worktree).", + "dialog.project.edit.worktree.startup.placeholder": "напр. bun install", + + "dialog.releaseNotes.action.getStarted": "Розпочати", + "dialog.releaseNotes.action.next": "Далі", + "dialog.releaseNotes.action.hideFuture": "Не показувати це в майбутньому", + "dialog.releaseNotes.media.alt": "Попередній перегляд релізу", + + "context.breakdown.title": "Розподіл контексту", + "context.breakdown.note": "Приблизний розподіл вхідних токенів. \"Інше\" включає визначення інструментів і накладні витрати.", + "context.breakdown.system": "Система", + "context.breakdown.user": "Користувач", + "context.breakdown.assistant": "Асистент", + "context.breakdown.tool": "Виклики інструментів", + "context.breakdown.other": "Інше", + + "context.systemPrompt.title": "Системний запит", + "context.rawMessages.title": "Сировинні повідомлення", + + "context.stats.session": "Сесія", + "context.stats.messages": "Повідомлення", + "context.stats.provider": "Провайдер", + "context.stats.model": "Модель", + "context.stats.limit": "Ліміт контексту", + "context.stats.totalTokens": "Всього токенів", + "context.stats.usage": "Використання", + "context.stats.inputTokens": "Вхідні токени", + "context.stats.outputTokens": "Вихідні токени", + "context.stats.reasoningTokens": "Токени мислення", + "context.stats.cacheTokens": "Токени кешу (читання/запис)", + "context.stats.userMessages": "Повідомлення користувача", + "context.stats.assistantMessages": "Повідомлення асистента", + "context.stats.totalCost": "Загальна вартість", + "context.stats.sessionCreated": "Сесію створено", + "context.stats.lastActivity": "Остання активність", + + "context.usage.tokens": "Токени", + "context.usage.usage": "Використання", + "context.usage.cost": "Вартість", + "context.usage.clickToView": "Натисніть, щоб переглянути контекст", + "context.usage.view": "Переглянути використання контексту", + + "language.en": "English", + "language.zh": "简体中文", + "language.zht": "繁體中文", + "language.ko": "한국어", + "language.de": "Deutsch", + "language.es": "Español", + "language.fr": "Français", + "language.da": "Dansk", + "language.ja": "日本語", + "language.pl": "Polski", + "language.ru": "Русский", + "language.ar": "العربية", + "language.no": "Norsk", + "language.br": "Português (Brasil)", + "language.bs": "Bosanski", + "language.uk": "Українська", + "language.th": "ไทย", + "language.tr": "Türkçe", + + "toast.language.title": "Мова", + "toast.language.description": "Перемкнено на {{language}}", + + "toast.theme.title": "Тему змінено", + "toast.scheme.title": "Кольорова схема", + + "toast.workspace.enabled.title": "Робочі області увімкнено", + "toast.workspace.enabled.description": "Кілька робочих дерев тепер відображаються на бічній панелі", + "toast.workspace.disabled.title": "Робочі області вимкнено", + "toast.workspace.disabled.description": "Тільки головне робоче дерево відображається на бічній панелі", + + "toast.permissions.autoaccept.on.title": "Автоматичне прийняття дозволів", + "toast.permissions.autoaccept.on.description": "Запити дозволів будуть автоматично схвалюватися", + "toast.permissions.autoaccept.off.title": "Автоматичне прийняття дозволів зупинено", + "toast.permissions.autoaccept.off.description": "Запити дозволів вимагатимуть схвалення", + + "toast.model.none.title": "Модель не вибрано", + "toast.model.none.description": "Підключіть провайдера, щоб підсумувати цю сесію", + + "toast.file.loadFailed.title": "Не вдалося завантажити файл", + "toast.file.listFailed.title": "Не вдалося отримати список файлів", + + "toast.context.noLineSelection.title": "Не вибрано рядків", + "toast.context.noLineSelection.description": "Спочатку виберіть діапазон рядків у вкладці файлу.", + + "toast.session.share.copyFailed.title": "Не вдалося скопіювати URL у буфер обміну", + "toast.session.share.success.title": "Сесію опубліковано", + "toast.session.share.success.description": "Посилання скопійовано в буфер обміну!", + "toast.session.share.failed.title": "Не вдалося опублікувати сесію", + "toast.session.share.failed.description": "Під час публікації сесії сталася помилка", + + "toast.session.unshare.success.title": "Поширення сесії припинено", + "toast.session.unshare.success.description": "Поширення сесії успішно припинено!", + "toast.session.unshare.failed.title": "Не вдалося припинити поширення сесії", + "toast.session.unshare.failed.description": "Під час припинення поширення сесії сталася помилка", + + "toast.session.listFailed.title": "Не вдалося завантажити сесії для {{project}}", + "toast.project.reloadFailed.title": "Не вдалося перезавантажити {{project}}", + + "toast.update.title": "Доступне оновлення", + "toast.update.description": "Нова версія OpenCode ({{version}}) тепер доступна для встановлення.", + "toast.update.action.installRestart": "Встановити та перезапустити", + "toast.update.action.notYet": "Не зараз", + + "error.page.title": "Щось пішло не так", + "error.page.description": "Під час завантаження програми сталася помилка.", + "error.page.details.label": "Деталі помилки", + "error.page.action.restart": "Перезапустити", + "error.page.action.report": "Повідомити про помилку", + "error.page.action.reported": "Помилку повідомлено", + "error.page.action.checking": "Перевірка...", + "error.page.action.checkUpdates": "Перевірити оновлення", + "error.page.action.updateTo": "Оновити до {{version}}", + "error.page.circular": "[Циклічне]", + "error.page.report.prefix": "Будь ласка, повідомте про цю помилку команді OpenCode", + "error.page.report.discord": "на Discord", + "error.page.version": "Версія: {{version}}", + + "error.dev.rootNotFound": + "Кореневий елемент не знайдено. Ви забули додати його до index.html? Або, можливо, атрибут id було написано з помилкою?", + + "error.globalSync.connectFailed": "Не вдалося підключитися до сервера. Чи працює сервер за адресою `{{url}}`?", + "error.globalSDK.noServerAvailable": "Сервер недоступний", + "error.globalSDK.serverNotAvailable": "Сервер недоступний", + "error.childStore.persistedCacheCreateFailed": "Не вдалося створити постійний кеш", + "error.childStore.persistedProjectMetadataCreateFailed": "Не вдалося створити постійні метадані проєкту", + "error.childStore.persistedProjectIconCreateFailed": "Не вдалося створити постійну іконку проєкту", + "error.childStore.storeCreateFailed": "Не вдалося створити сховище", + "directory.error.invalidUrl": "Недійсний каталог у URL.", + + "error.chain.unknown": "Невідома помилка", + "error.server.invalidConfiguration": "Недійсна конфігурація", + "error.chain.causedBy": "Причина:", + "error.chain.apiError": "Помилка API", + "error.chain.status": "Статус: {{status}}", + "error.chain.retryable": "Повторювано: {{retryable}}", + "error.chain.responseBody": "Тіло відповіді:\n{{body}}", + "error.chain.didYouMean": "Можливо, ви мали на увазі: {{suggestions}}", + "error.chain.modelNotFound": "Модель не знайдено: {{provider}}/{{model}}", + "error.chain.checkConfig": "Перевірте назви провайдерів/моделей у конфігурації (opencode.json)", + "error.chain.mcpFailed": "Сервер MCP \"{{name}}\" не працює. Зверніть увагу, OpenCode ще не підтримує автентифікацію MCP.", + "error.chain.providerAuthFailed": "Автентифікація провайдера не вдалася ({{provider}}): {{message}}", + "error.chain.providerInitFailed": + "Не вдалося ініціалізувати провайдера \"{{provider}}\". Перевірте облікові дані та конфігурацію.", + "error.chain.configJsonInvalid": "Файл конфігурації {{path}} не є дійсним JSON(C)", + "error.chain.configJsonInvalidWithMessage": "Файл конфігурації {{path}} не є дійсним JSON(C): {{message}}", + "error.chain.configDirectoryTypo": + "Каталог \"{{dir}}\" у {{path}} недійсний. Перейменуйте каталог на \"{{suggestion}}\" або видаліть його. Це поширена помилка.", + "error.chain.configFrontmatterError": "Не вдалося розібрати frontmatter у {{path}}:\n{{message}}", + "error.chain.configInvalid": "Файл конфігурації {{path}} недійсний", + "error.chain.configInvalidWithMessage": "Файл конфігурації {{path}} недійсний: {{message}}", + + "notification.permission.title": "Потрібен дозвіл", + "notification.permission.description": "{{sessionTitle}} у {{projectName}} потребує дозволу", + "notification.question.title": "Запитання", + "notification.question.description": "{{sessionTitle}} у {{projectName}} має запитання", + "notification.action.goToSession": "Перейти до сесії", + + "notification.session.responseReady.title": "Відповідь готова", + "notification.session.error.title": "Помилка сесії", + "notification.session.error.fallbackDescription": "Сталася помилка", + + "home.recentProjects": "Нещодавні проєкти", + "home.empty.title": "Немає нещодавніх проєктів", + "home.empty.description": "Почніть, відкривши локальний проєкт", + + "session.tab.session": "Сесія", + "session.tab.review": "Огляд", + "session.tab.context": "Контекст", + "session.panel.reviewAndFiles": "Огляд і файли", + "session.review.filesChanged": "Змінено файлів: {{count}}", + "session.review.change.one": "Зміна", + "session.review.change.other": "Зміни", + "session.review.loadingChanges": "Завантаження змін...", + "session.review.empty": "У цій сесії ще немає змін", + "session.review.noVcs": "Систему контролю версій Git не виявлено, зміни не відображаються", + "session.review.noVcs.createGit.title": "Створити Git-репозиторій", + "session.review.noVcs.createGit.description": "Відстежуйте, переглядайте та скасовуйте зміни в цьому проєкті", + "session.review.noVcs.createGit.actionLoading": "Створення Git-репозиторію...", + "session.review.noVcs.createGit.action": "Створити Git-репозиторій", + "session.review.noSnapshot": "Відстеження знімків вимкнено в конфігурації, тому зміни сесії недоступні", + "session.review.noChanges": "Немає змін", + "session.review.noUncommittedChanges": "Ще немає незафіксованих змін", + "session.review.noBranchChanges": "Ще немає змін у гілці", + + "session.files.selectToOpen": "Виберіть файл для відкриття", + "session.files.all": "Усі файли", + "session.files.empty": "Немає файлів", + "session.files.binaryContent": "Бінарний файл (вміст не може бути відображено)", + + "session.messages.renderEarlier": "Відобразити раніші повідомлення", + "session.messages.loadingEarlier": "Завантаження раніших повідомлень...", + "session.messages.loadEarlier": "Завантажити раніші повідомлення", + "session.messages.loading": "Завантаження повідомлень...", + "session.messages.jumpToLatest": "Перейти до останніх", + + "session.context.addToContext": "Додати {{selection}} до контексту", + "session.todo.title": "Завдання", + "session.todo.collapse": "Згорнути", + "session.todo.expand": "Розгорнути", + "session.todo.progress": "Виконано {{done}} з {{total}} завдань", + "session.question.progress": "{{current}} з {{total}} запитань", + "session.followupDock.summary.one": "{{count}} повідомлення в черзі", + "session.followupDock.summary.other": "{{count}} повідомлень у черзі", + "session.followupDock.sendNow": "Надіслати зараз", + "session.followupDock.edit": "Редагувати", + "session.followupDock.collapse": "Згорнути повідомлення в черзі", + "session.followupDock.expand": "Розгорнути повідомлення в черзі", + "session.revertDock.summary.one": "{{count}} скасоване повідомлення", + "session.revertDock.summary.other": "{{count}} скасованих повідомлень", + "session.revertDock.collapse": "Згорнути скасовані повідомлення", + "session.revertDock.expand": "Розгорнути скасовані повідомлення", + "session.revertDock.restore": "Відновити повідомлення", + + "session.new.title": "Створити що завгодно", + "session.new.worktree.main": "Основна гілка", + "session.new.worktree.mainWithBranch": "Основна гілка ({{branch}})", + "session.new.worktree.create": "Створити нове робоче дерево", + "session.new.lastModified": "Востаннє змінено", + + "session.header.search.placeholder": "Пошук {{project}}", + "session.header.searchFiles": "Пошук файлів", + "session.header.openIn": "Відкрити в", + "session.header.open.action": "Відкрити {{app}}", + "session.header.open.ariaLabel": "Відкрити в {{app}}", + "session.header.open.menu": "Параметри відкриття", + "session.header.open.copyPath": "Копіювати шлях", + "session.header.open.finder": "Finder", + "session.header.open.fileExplorer": "Провідник файлів", + "session.header.open.fileManager": "Файловий менеджер", + "session.header.open.app.vscode": "VS Code", + "session.header.open.app.cursor": "Cursor", + "session.header.open.app.zed": "Zed", + "session.header.open.app.textmate": "TextMate", + "session.header.open.app.antigravity": "Antigravity", + "session.header.open.app.terminal": "Термінал", + "session.header.open.app.iterm2": "iTerm2", + "session.header.open.app.ghostty": "Ghostty", + "session.header.open.app.warp": "Warp", + "session.header.open.app.xcode": "Xcode", + "session.header.open.app.androidStudio": "Android Studio", + "session.header.open.app.powershell": "PowerShell", + "session.header.open.app.sublimeText": "Sublime Text", + + "status.popover.trigger": "Статус", + "status.popover.ariaLabel": "Конфігурації серверів", + "status.popover.tab.servers": "Сервери", + "status.popover.tab.mcp": "MCP", + "status.popover.tab.lsp": "LSP", + "status.popover.tab.plugins": "Плагіни", + "status.popover.action.manageServers": "Керувати серверами", + + "session.share.popover.title": "Опублікувати в інтернеті", + "session.share.popover.description.shared": + "Ця сесія є публічною в інтернеті. Вона доступна будь-кому за посиланням.", + "session.share.popover.description.unshared": + "Опублікуйте сесію публічно в інтернеті. Вона буде доступна будь-кому за посиланням.", + "session.share.action.share": "Поділитися", + "session.share.action.publish": "Опублікувати", + "session.share.action.publishing": "Публікація...", + "session.share.action.unpublish": "Скасувати публікацію", + "session.share.action.unpublishing": "Скасування публікації...", + "session.share.action.view": "Переглянути", + "session.share.copy.copied": "Скопійовано", + "session.share.copy.copyLink": "Копіювати посилання", + + "lsp.tooltip.none": "Немає серверів LSP", + "lsp.label.connected": "{{count}} LSP", + + "prompt.loading": "Завантаження запиту...", + "terminal.loading": "Завантаження термінала...", + "terminal.title": "Термінал", + "terminal.title.numbered": "Термінал {{number}}", + "terminal.close": "Закрити термінал", + "terminal.connectionLost.title": "З'єднання втрачено", + "terminal.connectionLost.abnormalClose": "WebSocket закрито аномально: {{code}}", + "terminal.connectionLost.description": + "З'єднання з терміналом було перервано. Це може статися під час перезапуску сервера.", + + "common.closeTab": "Закрити вкладку", + "common.dismiss": "Відхилити", + "common.moreCountSuffix": " (ще {{count}})", + "common.requestFailed": "Запит не виконано", + "common.moreOptions": "Більше опцій", + "common.learnMore": "Дізнатися більше", + "common.rename": "Перейменувати", + "common.reset": "Скинути", + "common.archive": "Архівувати", + "common.delete": "Видалити", + "common.close": "Закрити", + "common.edit": "Редагувати", + "common.loadMore": "Завантажити більше", + "common.key.esc": "ESC", + "common.key.ctrl": "Ctrl", + "common.key.alt": "Alt", + "common.key.shift": "Shift", + "common.key.meta": "Meta", + "common.key.space": "Пробіл", + "common.key.backspace": "Backspace", + "common.key.enter": "Enter", + "common.key.tab": "Tab", + "common.key.delete": "Delete", + "common.key.home": "Home", + "common.key.end": "End", + "common.key.pageUp": "Page Up", + "common.key.pageDown": "Page Down", + "common.key.insert": "Insert", + "common.unknown": "невідомо", + + "common.time.justNow": "Щойно", + "common.time.minutesAgo.short": "{{count}} хв тому", + "common.time.hoursAgo.short": "{{count}} год тому", + "common.time.daysAgo.short": "{{count}} дн тому", + + "sidebar.menu.toggle": "Перемкнути меню", + "sidebar.nav.projectsAndSessions": "Проєкти та сесії", + "sidebar.settings": "Налаштування", + "sidebar.help": "Довідка", + "sidebar.workspaces.enable": "Увімкнути робочі області", + "sidebar.workspaces.disable": "Вимкнути робочі області", + "sidebar.gettingStarted.title": "Початок роботи", + "sidebar.gettingStarted.line1": "OpenCode містить безкоштовні моделі, тому ви можете почати негайно.", + "sidebar.gettingStarted.line2": "Підключіть будь-якого провайдера, щоб використовувати моделі, включаючи Claude, GPT, Gemini тощо.", + "sidebar.project.recentSessions": "Нещодавні сесії", + "sidebar.project.viewAllSessions": "Переглянути всі сесії", + "sidebar.project.clearNotifications": "Очистити сповіщення", + "sidebar.empty.title": "Немає відкритих проєктів", + "sidebar.empty.description": "Відкрийте проєкт, щоб почати", + + "debugBar.ariaLabel": "Діагностика продуктивності розробки", + "debugBar.na": "н/д", + "debugBar.nav.label": "NAV", + "debugBar.nav.tip": + "Останній завершений перехід маршруту, що торкається сторінки сесії, виміряний від запуску маршрутизатора до першого відображення після стабілізації.", + "debugBar.fps.label": "FPS", + "debugBar.fps.tip": "Поточна кількість кадрів за секунду за останні 5 секунд.", + "debugBar.frame.label": "FRAME", + "debugBar.frame.tip": "Найгірший час кадру за останні 5 секунд.", + "debugBar.jank.label": "JANK", + "debugBar.jank.tip": "Кадри понад 32 мс за останні 5 секунд.", + "debugBar.long.label": "LONG", + "debugBar.long.tip": "Заблокований час і кількість довгих завдань за останні 5 секунд. Макс. завдання: {{max}}.", + "debugBar.delay.label": "DELAY", + "debugBar.delay.tip": "Найгірша спостережувана затримка введення за останні 5 секунд.", + "debugBar.inp.label": "INP", + "debugBar.inp.tip": + "Приблизна тривалість взаємодії за останні 5 секунд. Це схоже на INP, а не на офіційний Web Vitals INP.", + "debugBar.cls.label": "CLS", + "debugBar.cls.tip": "Сукупний зсув макета за весь час роботи програми.", + "debugBar.mem.label": "MEM", + "debugBar.mem.tipUnavailable": "Використана купа JS проти ліміту купи. Тільки Chromium.", + "debugBar.mem.tip": "Використана купа JS проти ліміту купи. {{used}} з {{limit}}.", + + "app.name.desktop": "OpenCode Desktop", + + "settings.section.desktop": "Робочий стіл", + "settings.section.server": "Сервер", + "settings.tab.general": "Загальні", + "settings.tab.shortcuts": "Скорочення", + "settings.desktop.section.wsl": "WSL", + "settings.desktop.wsl.title": "Інтеграція WSL", + "settings.desktop.wsl.description": "Запускати сервер OpenCode всередині WSL на Windows.", + + "settings.general.section.appearance": "Зовнішній вигляд", + "settings.general.section.advanced": "Додатково", + "settings.general.section.notifications": "Системні сповіщення", + "settings.general.section.updates": "Оновлення", + "settings.general.section.sounds": "Звукові ефекти", + "settings.general.section.feed": "Стрічка", + "settings.general.section.display": "Дисплей", + + "settings.general.row.language.title": "Мова", + "settings.general.row.language.description": "Змінити мову інтерфейсу OpenCode", + "settings.general.row.shell.title": "Командна оболонка термінала", + "settings.general.row.shell.description": + "Виберіть оболонку для термінала. Сумісні оболонки також використовуються для викликів інструментів агента.", + "settings.general.row.shell.autoDefault": "Авто (за замовчуванням)", + "settings.general.row.shell.terminalOnly": "тільки термінал", + "settings.general.row.appearance.title": "Зовнішній вигляд", + "settings.general.row.appearance.description": "Налаштуйте вигляд OpenCode на вашому пристрої", + "settings.general.row.colorScheme.title": "Кольорова схема", + "settings.general.row.colorScheme.description": "Виберіть, чи OpenCode використовує системну, світлу або темну тему", + "settings.general.row.theme.title": "Тема", + "settings.general.row.theme.description": "Налаштуйте тему OpenCode.", + "settings.general.row.font.title": "Шрифт коду", + "settings.general.row.font.description": "Налаштуйте шрифт, який використовується в блоках коду", + "settings.general.row.terminalFont.title": "Шрифт термінала", + "settings.general.row.terminalFont.description": "Налаштуйте шрифт, який використовується в терміналі", + "settings.general.row.uiFont.title": "Шрифт інтерфейсу", + "settings.general.row.uiFont.description": "Налаштуйте шрифт, який використовується в інтерфейсі", + "settings.general.row.followup.title": "Поведінка продовження", + "settings.general.row.followup.description": "Виберіть, чи продовження виконується негайно, чи чекає в черзі", + "settings.general.row.followup.option.queue": "Черга", + "settings.general.row.followup.option.steer": "Керування", + "settings.general.row.showFileTree.title": "Дерево файлів", + "settings.general.row.showFileTree.description": "Показувати перемикач і панель дерева файлів у сесіях на робочому столі", + "settings.general.row.showNavigation.title": "Елементи навігації", + "settings.general.row.showNavigation.description": "Показувати кнопки назад і вперед у заголовку робочого столу", + "settings.general.row.showSearch.title": "Палітра команд", + "settings.general.row.showSearch.description": "Показувати кнопку пошуку та палітри команд у заголовку робочого столу", + "settings.general.row.showTerminal.title": "Термінал", + "settings.general.row.showTerminal.description": "Показувати кнопку термінала в заголовку робочого столу", + "settings.general.row.showStatus.title": "Статус сервера", + "settings.general.row.showStatus.description": "Показувати кнопку статусу сервера в заголовку робочого столу", + "settings.general.row.reasoningSummaries.title": "Показувати підсумки мислення", + "settings.general.row.reasoningSummaries.description": "Відображати підсумки мислення моделі на часовій шкалі", + "settings.general.row.shellToolPartsExpanded.title": "Розгортати частини інструменту оболонки", + "settings.general.row.shellToolPartsExpanded.description": + "Показувати частини інструменту оболонки розгорнутими за замовчуванням на часовій шкалі", + "settings.general.row.editToolPartsExpanded.title": "Розгортати частини інструменту редагування", + "settings.general.row.editToolPartsExpanded.description": + "Показувати частини інструментів редагування, запису та патчів розгорнутими за замовчуванням на часовій шкалі", + "settings.general.row.showSessionProgressBar.title": "Показувати індикатор прогресу сесії", + "settings.general.row.showSessionProgressBar.description": + "Відображати анімований індикатор прогресу вгорі сесії, коли агент працює", + + "settings.general.row.wayland.title": "Використовувати нативний Wayland", + "settings.general.row.wayland.description": "Вимкнути резервний X11 на Wayland. Потребує перезапуску.", + "settings.general.row.wayland.tooltip": + "На Linux з моніторами з різною частотою оновлення нативний Wayland може бути більш стабільним.", + + "settings.general.row.releaseNotes.title": "Нотатки до релізу", + "settings.general.row.releaseNotes.description": "Показувати спливаючі вікна \"Що нового\" після оновлень", + + "settings.updates.row.startup.title": "Перевіряти оновлення під час запуску", + "settings.updates.row.startup.description": "Автоматично перевіряти наявність оновлень під час запуску OpenCode", + "settings.updates.row.check.title": "Перевірити оновлення", + "settings.updates.row.check.description": "Вручну перевірити наявність оновлень і встановити, якщо доступні", + "settings.updates.action.checkNow": "Перевірити зараз", + "settings.updates.action.checking": "Перевірка...", + "settings.updates.toast.latest.title": "У вас актуальна версія", + "settings.updates.toast.latest.description": "Ви використовуєте останню версію OpenCode.", + "sound.option.none": "Немає", + "sound.option.alert01": "Alert 01", + "sound.option.alert02": "Alert 02", + "sound.option.alert03": "Alert 03", + "sound.option.alert04": "Alert 04", + "sound.option.alert05": "Alert 05", + "sound.option.alert06": "Alert 06", + "sound.option.alert07": "Alert 07", + "sound.option.alert08": "Alert 08", + "sound.option.alert09": "Alert 09", + "sound.option.alert10": "Alert 10", + "sound.option.bipbop01": "Bip-bop 01", + "sound.option.bipbop02": "Bip-bop 02", + "sound.option.bipbop03": "Bip-bop 03", + "sound.option.bipbop04": "Bip-bop 04", + "sound.option.bipbop05": "Bip-bop 05", + "sound.option.bipbop06": "Bip-bop 06", + "sound.option.bipbop07": "Bip-bop 07", + "sound.option.bipbop08": "Bip-bop 08", + "sound.option.bipbop09": "Bip-bop 09", + "sound.option.bipbop10": "Bip-bop 10", + "sound.option.staplebops01": "Staplebops 01", + "sound.option.staplebops02": "Staplebops 02", + "sound.option.staplebops03": "Staplebops 03", + "sound.option.staplebops04": "Staplebops 04", + "sound.option.staplebops05": "Staplebops 05", + "sound.option.staplebops06": "Staplebops 06", + "sound.option.staplebops07": "Staplebops 07", + "sound.option.nope01": "Nope 01", + "sound.option.nope02": "Nope 02", + "sound.option.nope03": "Nope 03", + "sound.option.nope04": "Nope 04", + "sound.option.nope05": "Nope 05", + "sound.option.nope06": "Nope 06", + "sound.option.nope07": "Nope 07", + "sound.option.nope08": "Nope 08", + "sound.option.nope09": "Nope 09", + "sound.option.nope10": "Nope 10", + "sound.option.nope11": "Nope 11", + "sound.option.nope12": "Nope 12", + "sound.option.yup01": "Yup 01", + "sound.option.yup02": "Yup 02", + "sound.option.yup03": "Yup 03", + "sound.option.yup04": "Yup 04", + "sound.option.yup05": "Yup 05", + "sound.option.yup06": "Yup 06", + + "settings.general.notifications.agent.title": "Агент", + "settings.general.notifications.agent.description": + "Показувати системне сповіщення, коли агент завершує роботу або потребує уваги", + "settings.general.notifications.permissions.title": "Дозволи", + "settings.general.notifications.permissions.description": "Показувати системне сповіщення, коли потрібен дозвіл", + "settings.general.notifications.errors.title": "Помилки", + "settings.general.notifications.errors.description": "Показувати системне сповіщення, коли виникає помилка", + + "settings.general.sounds.agent.title": "Агент", + "settings.general.sounds.agent.description": "Відтворювати звук, коли агент завершує роботу або потребує уваги", + "settings.general.sounds.permissions.title": "Дозволи", + "settings.general.sounds.permissions.description": "Відтворювати звук, коли потрібен дозвіл", + "settings.general.sounds.errors.title": "Помилки", + "settings.general.sounds.errors.description": "Відтворювати звук, коли виникає помилка", + + "settings.shortcuts.title": "Скорочення клавіш", + "settings.shortcuts.reset.button": "Скинути до стандартних", + "settings.shortcuts.reset.toast.title": "Скорочення скинуто", + "settings.shortcuts.reset.toast.description": "Скорочення клавіш були скинуті до стандартних.", + "settings.shortcuts.conflict.title": "Скорочення вже використовується", + "settings.shortcuts.conflict.description": "{{keybind}} вже призначено для {{titles}}.", + "settings.shortcuts.unassigned": "Не призначено", + "settings.shortcuts.pressKeys": "Натисніть клавіші", + "settings.shortcuts.search.placeholder": "Пошук скорочень", + "settings.shortcuts.search.empty": "Скорочень не знайдено", + + "settings.shortcuts.group.general": "Загальні", + "settings.shortcuts.group.session": "Сесія", + "settings.shortcuts.group.navigation": "Навігація", + "settings.shortcuts.group.modelAndAgent": "Модель та агент", + "settings.shortcuts.group.terminal": "Термінал", + "settings.shortcuts.group.prompt": "Запит", + + "settings.providers.title": "Провайдери", + "settings.providers.description": "Налаштування провайдерів будуть доступні тут.", + "settings.providers.section.connected": "Підключені провайдери", + "settings.providers.connected.empty": "Немає підключених провайдерів", + "settings.providers.connected.environmentDescription": "Підключено зі змінних середовища", + "settings.providers.section.popular": "Популярні провайдери", + "settings.providers.custom.description": "Додайте провайдера, сумісного з OpenAI, за базовим URL.", + "settings.providers.tag.environment": "Середовище", + "settings.providers.tag.config": "Конфігурація", + "settings.providers.tag.custom": "Користувацький", + "settings.providers.tag.other": "Інше", + "settings.models.title": "Моделі", + "settings.models.description": "Налаштування моделей будуть доступні тут.", + "settings.agents.title": "Агенти", + "settings.agents.description": "Налаштування агентів будуть доступні тут.", + "settings.commands.title": "Команди", + "settings.commands.description": "Налаштування команд будуть доступні тут.", + "settings.mcp.title": "MCP", + "settings.mcp.description": "Налаштування MCP будуть доступні тут.", + + "settings.permissions.title": "Дозволи", + "settings.permissions.description": "Керуйте тим, які інструменти сервер може використовувати за замовчуванням.", + "settings.permissions.section.tools": "Інструменти", + "settings.permissions.toast.updateFailed.title": "Не вдалося оновити дозволи", + + "settings.permissions.action.allow": "Дозволити", + "settings.permissions.action.ask": "Запитувати", + "settings.permissions.action.deny": "Заборонити", + + "settings.permissions.tool.read.title": "Читання", + "settings.permissions.tool.read.description": "Читання файлу (відповідає шляху файлу)", + "settings.permissions.tool.edit.title": "Редагування", + "settings.permissions.tool.edit.description": "Зміна файлів, включаючи редагування, запис і патчі", + "settings.permissions.tool.glob.title": "Glob", + "settings.permissions.tool.glob.description": "Зіставлення файлів за допомогою glob-шаблонів", + "settings.permissions.tool.grep.title": "Grep", + "settings.permissions.tool.grep.description": "Пошук вмісту файлів за допомогою регулярних виразів", + "settings.permissions.tool.list.title": "Список", + "settings.permissions.tool.list.description": "Список файлів у каталозі", + "settings.permissions.tool.bash.title": "Bash", + "settings.permissions.tool.bash.description": "Запуск команд оболонки", + "settings.permissions.tool.task.title": "Завдання", + "settings.permissions.tool.task.description": "Запуск підагентів", + "settings.permissions.tool.skill.title": "Навичка", + "settings.permissions.tool.skill.description": "Завантаження навички за назвою", + "settings.permissions.tool.lsp.title": "LSP", + "settings.permissions.tool.lsp.description": "Виконання запитів мовного сервера", + "settings.permissions.tool.todowrite.title": "Todo Write", + "settings.permissions.tool.todowrite.description": "Оновлення списку завдань", + "settings.permissions.tool.webfetch.title": "Web Fetch", + "settings.permissions.tool.webfetch.description": "Отримання вмісту з URL", + "settings.permissions.tool.websearch.title": "Web Search", + "settings.permissions.tool.websearch.description": "Пошук в інтернеті", + "settings.permissions.tool.external_directory.title": "Зовнішній каталог", + "settings.permissions.tool.external_directory.description": "Доступ до файлів за межами каталогу проєкту", + "settings.permissions.tool.doom_loop.title": "Цикл приреченості", + "settings.permissions.tool.doom_loop.description": "Виявлення повторюваних викликів інструментів з однаковими вхідними даними", + + "session.delete.failed.title": "Не вдалося видалити сесію", + "session.delete.title": "Видалити сесію", + "session.delete.confirm": 'Видалити сесію "{{name}}"?', + "session.delete.button": "Видалити сесію", + + "workspace.new": "Нова робоча область", + "workspace.type.local": "локальна", + "workspace.type.sandbox": "пісочниця", + "workspace.create.failed.title": "Не вдалося створити робочу область", + "workspace.delete.failed.title": "Не вдалося видалити робочу область", + "workspace.resetting.title": "Скидання робочої області", + "workspace.resetting.description": "Це може зайняти хвилину.", + "workspace.reset.failed.title": "Не вдалося скинути робочу область", + "workspace.reset.success.title": "Робочу область скинуто", + "workspace.reset.success.description": "Робоча область тепер відповідає гілці за замовчуванням.", + "workspace.error.stillPreparing": "Робоча область все ще готується", + "workspace.status.checking": "Перевірка незлитих змін...", + "workspace.status.error": "Не вдалося перевірити статус git.", + "workspace.status.clean": "Незлитих змін не виявлено.", + "workspace.status.dirty": "Виявлено незлиті зміни в цій робочій області.", + "workspace.delete.title": "Видалити робочу область", + "workspace.delete.confirm": 'Видалити робочу область "{{name}}"?', + "workspace.delete.button": "Видалити робочу область", + "workspace.reset.title": "Скинути робочу область", + "workspace.reset.confirm": 'Скинути робочу область "{{name}}"?', + "workspace.reset.button": "Скинути робочу область", + "workspace.reset.archived.none": "Жодна активна сесія не буде заархівована.", + "workspace.reset.archived.one": "1 сесію буде заархівовано.", + "workspace.reset.archived.many": "{{count}} сесій буде заархівовано.", + "workspace.reset.note": "Це скине робочу область, щоб вона відповідала гілці за замовчуванням.", +} diff --git a/packages/console/app/src/i18n/index.ts b/packages/console/app/src/i18n/index.ts index a49fbe3758..a855ccfa3e 100644 --- a/packages/console/app/src/i18n/index.ts +++ b/packages/console/app/src/i18n/index.ts @@ -11,6 +11,7 @@ import { dict as da } from "~/i18n/da" import { dict as ja } from "~/i18n/ja" import { dict as pl } from "~/i18n/pl" import { dict as ru } from "~/i18n/ru" +import { dict as uk } from "~/i18n/uk" import { dict as ar } from "~/i18n/ar" import { dict as no } from "~/i18n/no" import { dict as br } from "~/i18n/br" @@ -35,6 +36,7 @@ export function i18n(locale: Locale): Dict { if (locale === "ja") return { ...base, ...ja } if (locale === "pl") return { ...base, ...pl } if (locale === "ru") return { ...base, ...ru } + if (locale === "uk") return { ...base, ...uk } if (locale === "ar") return { ...base, ...ar } if (locale === "no") return { ...base, ...no } if (locale === "br") return { ...base, ...br } diff --git a/packages/console/app/src/i18n/uk.ts b/packages/console/app/src/i18n/uk.ts new file mode 100644 index 0000000000..442acb9a6b --- /dev/null +++ b/packages/console/app/src/i18n/uk.ts @@ -0,0 +1,785 @@ +import { dict as en } from "./en" + +export const dict = { + ...en, + "nav.github": "GitHub", + "nav.docs": "Документація", + "nav.changelog": "Журнал змін", + "nav.discord": "Discord", + "nav.x": "X", + "nav.enterprise": "Enterprise", + "nav.zen": "Zen", + "nav.login": "Увійти", + "nav.free": "Завантажити", + "nav.home": "Головна", + "nav.openMenu": "Відкрити меню", + "nav.getStartedFree": "Почати безкоштовно", + "nav.logoAlt": "OpenCode", + + "nav.context.copyLogo": "Копіювати логотип як SVG", + "nav.context.copyWordmark": "Копіювати знак як SVG", + "nav.context.brandAssets": "Бренд-матеріали", + + "footer.github": "GitHub", + "footer.docs": "Документація", + "footer.changelog": "Журнал змін", + "footer.discord": "Discord", + "footer.x": "X", + + "legal.brand": "Бренд", + "legal.privacy": "Конфіденційність", + "legal.terms": "Умови", + + "email.title": "Дізнайтеся першими про нові продукти", + "email.subtitle": "Приєднуйтесь до списку очікування для раннього доступу.", + "email.placeholder": "Електронна адреса", + "email.subscribe": "Підписатися", + "email.success": "Майже готово! Перевірте пошту та підтвердьте адресу", + + "notFound.title": "Не знайдено | opencode", + "notFound.heading": "404 — Сторінку не знайдено", + "notFound.home": "Головна", + "notFound.docs": "Документація", + "notFound.github": "GitHub", + "notFound.discord": "Discord", + "notFound.logoLightAlt": "світлий логотип opencode", + "notFound.logoDarkAlt": "темний логотип opencode", + + "user.logout": "Вийти", + + "auth.callback.error.codeMissing": "Не знайдено код авторизації.", + + "workspace.select": "Виберіть робочий простір", + "workspace.createNew": "+ Створити новий робочий простір", + "workspace.modal.title": "Створити новий робочий простір", + "workspace.modal.placeholder": "Введіть назву робочого простору", + + "common.cancel": "Скасувати", + "common.creating": "Створення...", + "common.create": "Створити", + "common.contactUs": "Зв'яжіться з нами", + + "common.videoUnsupported": "Ваш браузер не підтримує відео.", + "common.figure": "Рис. {{n}}.", + "common.faq": "FAQ", + "common.learnMore": "Дізнатися більше", + + "error.invalidPlan": "Недійсний план", + "error.workspaceRequired": "ID робочого простору обов'язкове", + "error.alreadySubscribed": "Цей робочий простір уже має підписку", + "error.limitRequired": "Ліміт обов'язковий.", + "error.monthlyLimitInvalid": "Встановіть дійсний місячний ліміт.", + "error.workspaceNameRequired": "Назва робочого простору обов'язкова.", + "error.nameTooLong": "Назва має містити не більше 255 символів.", + "error.emailRequired": "Електронна адреса обов'язкова", + "error.roleRequired": "Роль обов'язкова", + "error.idRequired": "ID обов'язкове", + "error.nameRequired": "Назва обов'язкова", + "error.providerRequired": "Провайдер обов'язковий", + "error.apiKeyRequired": "Ключ API обов'язковий", + "error.modelRequired": "Модель обов'язкова", + "error.reloadAmountMin": "Сума поповнення має бути щонайменше ${{amount}}", + "error.reloadTriggerMin": "Поріг балансу має бути щонайменше ${{amount}}", + + "app.meta.description": "OpenCode — відкритий агент для програмування.", + + "home.title": "OpenCode | Відкритий AI-агент для кодування", + + "temp.title": "opencode | AI-агент для кодування, створений для термінала", + "temp.hero.title": "AI-агент для кодування, створений для термінала", + "temp.zen": "opencode zen", + "temp.getStarted": "Почати", + "temp.feature.native.title": "Рідний TUI", + "temp.feature.native.body": "Чуйний, рідний інтерфейс термінала з темами", + "temp.feature.zen.beforeLink": "A", + "temp.feature.zen.link": "добірка моделей", + "temp.feature.zen.afterLink": "від opencode", + "temp.feature.models.beforeLink": "Підтримує 75+ LLM-провайдерів через", + "temp.feature.models.afterLink": ", включаючи локальні моделі", + "temp.screenshot.caption": "OpenCode TUI з темою tokyonight", + "temp.screenshot.alt": "OpenCode TUI з темою tokyonight", + "temp.logoLightAlt": "світлий логотип opencode", + "temp.logoDarkAlt": "темний логотип opencode", + + "home.banner.badge": "Нове", + "home.banner.text": "Десктопний застосунок доступний у бета-версії", + "home.banner.platforms": "на macOS, Windows та Linux", + "home.banner.downloadNow": "Завантажити зараз", + "home.banner.downloadBetaNow": "Завантажити бета-версію десктопного застосунку", + + "home.hero.title": "Відкритий AI-агент для кодування", + "home.hero.subtitle.a": "Безкоштовні моделі включено або підключіть будь-яку модель від будь-якого провайдера,", + "home.hero.subtitle.b": "включно з Claude, GPT, Gemini та іншими.", + + "home.install.ariaLabel": "Параметри встановлення", + + "home.what.title": "Що таке OpenCode?", + "home.what.body": "OpenCode — це відкритий агент, який допомагає писати код у терміналі, IDE або на десктопі.", + "home.what.lsp.title": "LSP увімкнено", + "home.what.lsp.body": "Автоматично завантажує потрібні LSP для LLM", + "home.what.multiSession.title": "Багатосесійність", + "home.what.multiSession.body": "Запускайте кількох агентів паралельно в одному проекті", + "home.what.shareLinks.title": "Посилання для обміну", + "home.what.shareLinks.body": "Діліться посиланням на будь-яку сесію для обговорення або налагодження", + "home.what.copilot.title": "GitHub Copilot", + "home.what.copilot.body": "Увійдіть через GitHub, щоб використовувати свій обліковий запис Copilot", + "home.what.chatgptPlus.title": "ChatGPT Plus/Pro", + "home.what.chatgptPlus.body": "Увійдіть через OpenAI, щоб використовувати ChatGPT Plus або Pro", + "home.what.anyModel.title": "Будь-яка модель", + "home.what.anyModel.body": "75+ LLM-провайдерів через Models.dev, включаючи локальні моделі", + "home.what.anyEditor.title": "Будь-який редактор", + "home.what.anyEditor.body": "Доступний як термінальний інтерфейс, десктопний застосунок та розширення IDE", + "home.what.readDocs": "Читати документацію", + + "home.growth.title": "Відкритий AI-агент для кодування", + "home.growth.body": + "З понад {{stars}} зірками на GitHub, {{contributors}} учасниками та понад {{commits}} комітами, OpenCode використовують понад {{monthlyUsers}} розробників щомісяця.", + "home.growth.githubStars": "Зірки GitHub", + "home.growth.contributors": "Учасники", + "home.growth.monthlyDevs": "Розробників на місяць", + + "home.privacy.title": "Створено для конфіденційності", + "home.privacy.body": + "OpenCode не зберігає ваш код або контекстні дані, тому може працювати в середовищах з чутливими даними.", + "home.privacy.learnMore": "Дізнатися більше про", + "home.privacy.link": "конфіденційність", + + "home.faq.q1": "Що таке OpenCode?", + "home.faq.a1": + "OpenCode — це відкритий агент, який допомагає писати та запускати код з будь-якою AI-моделлю. Доступний як термінальний інтерфейс, десктопний застосунок або розширення IDE.", + "home.faq.q2": "Як почати користуватися OpenCode?", + "home.faq.a2.before": "Найпростіший спосіб почати — прочитати", + "home.faq.a2.link": "вступ", + "home.faq.q3": "Чи потрібні додаткові AI-підписки для використання OpenCode?", + "home.faq.a3.p1": + "Не обов'язково, OpenCode має набір безкоштовних моделей, які можна використовувати без реєстрації.", + "home.faq.a3.p2.beforeZen": "Крім цього, ви можете використовувати будь-які популярні моделі, створивши обліковий запис", + "home.faq.a3.p2.afterZen": ".", + "home.faq.a3.p3": + "Хоча ми рекомендуємо Zen, OpenCode також працює з усіма популярними провайдерами, такими як OpenAI, Anthropic, xAI тощо.", + "home.faq.a3.p4.beforeLocal": "Ви навіть можете підключити свої", + "home.faq.a3.p4.localLink": "локальні моделі", + "home.faq.q4": "Чи можу я використовувати свої наявні AI-підписки з OpenCode?", + "home.faq.a4.p1": + "Так, OpenCode підтримує підписки всіх основних провайдерів. Ви можете використовувати Claude Pro/Max, ChatGPT Plus/Pro або GitHub Copilot.", + "home.faq.q5": "Чи можна використовувати OpenCode лише в терміналі?", + "home.faq.a5.beforeDesktop": "Вже ні! OpenCode тепер доступний як застосунок для", + "home.faq.a5.desktop": "десктопа", + "home.faq.a5.and": "та", + "home.faq.a5.web": "вебу", + "home.faq.q6": "Скільки коштує OpenCode?", + "home.faq.a6": + "OpenCode є 100% безкоштовним. Він також має набір безкоштовних моделей. Додаткові витрати можливі, якщо ви підключите іншого провайдера.", + "home.faq.q7": "А як щодо даних та конфіденційності?", + "home.faq.a7.p1": "Ваші дані зберігаються лише тоді, коли ви використовуєте безкоштовні моделі або створюєте посилання для обміну.", + "home.faq.a7.p2.beforeModels": "Дізнайтеся більше про", + "home.faq.a7.p2.modelsLink": "наші моделі", + "home.faq.a7.p2.and": "та", + "home.faq.a7.p2.shareLink": "сторінки обміну", + "home.faq.q8": "Чи є OpenCode відкритим?", + "home.faq.a8.p1": "Так, OpenCode повністю відкритий. Вихідний код доступний публічно на", + "home.faq.a8.p2": "під ліцензією", + "home.faq.a8.mitLicense": "MIT License", + "home.faq.a8.p3": + ", тобто кожен може використовувати, змінювати або сприяти його розвитку. Будь-хто зі спільноти може створювати issues, надсилати pull request'и та розширювати функціональність.", + + "home.zenCta.title": "Отримайте доступ до надійних оптимізованих моделей для агентів кодування", + "home.zenCta.body": + "Zen дає доступ до добірки AI-моделей, які OpenCode протестував спеціально для агентів кодування. Не турбуйтеся про нестабільну якість — використовуйте перевірені моделі.", + "home.zenCta.link": "Дізнатися про Zen", + + "zen.title": "OpenCode Zen | Добірка надійних оптимізованих моделей для агентів кодування", + "zen.hero.title": "Надійні оптимізовані моделі для агентів кодування", + "zen.hero.body": + "Zen дає доступ до добірки AI-моделей, які OpenCode протестував спеціально для агентів кодування. Не турбуйтеся про нестабільну якість — використовуйте перевірені моделі.", + + "zen.faq.q1": "Що таке OpenCode Zen?", + "zen.faq.a1": + "Zen — це добірка AI-моделей, протестованих для агентів кодування, створена командою OpenCode.", + "zen.faq.q2": "Чому Zen точніший?", + "zen.faq.a2": + "Zen надає лише моделі, спеціально протестовані для агентів кодування. Ви ж не використовуєте масло ніж для стейка — не використовуйте погані моделі для кодування.", + "zen.faq.q3": "Чи Zen дешевший?", + "zen.faq.a3": + "Zen не є прибутковим. Zen передає вам вартість від провайдерів моделей. Чим вище використання Zen, тим кращі ціни OpenCode може узгодити та передати вам.", + "zen.faq.q4": "Скільки коштує Zen?", + "zen.faq.a4.p1.beforePricing": "Zen", + "zen.faq.a4.p1.pricingLink": "стягує плату за запит", + "zen.faq.a4.p1.afterPricing": "без націнок — ви платите рівно стільки, скільки стягує провайдер моделі.", + "zen.faq.a4.p2.beforeAccount": "Загальна вартість залежить від використання. Ви можете встановити місячні ліміти в", + "zen.faq.a4.p2.accountLink": "обліковому записі", + "zen.faq.a4.p3": + "Щоб покрити витрати, OpenCode додає лише невелику комісію за обробку платежу в розмірі $1.23 за кожне поповнення балансу $20.", + "zen.faq.q5": "А як щодо даних та конфіденційності?", + "zen.faq.a5.beforeExceptions": + "Усі моделі Zen розміщені в США. Провайдери дотримуються політики нульового зберігання та не використовують ваші дані для навчання моделей, за", + "zen.faq.a5.exceptionsLink": "такими винятками", + "zen.faq.q6": "Чи можна встановити ліміти витрат?", + "zen.faq.a6": "Так, ви можете встановити місячні ліміти витрат в обліковому записі.", + "zen.faq.q7": "Чи можна скасувати?", + "zen.faq.a7": "Так, ви можете вимкнути оплату в будь-який час і використовувати залишок.", + "zen.faq.q8": "Чи можна використовувати Zen з іншими агентами кодування?", + "zen.faq.a8": + "Хоча Zen чудово працює з OpenCode, ви можете використовувати Zen з будь-яким агентом. Дотримуйтесь інструкцій з налаштування у вашому агенті.", + + "zen.cta.start": "Почати з Zen", + "zen.pricing.title": "Додати $20 балансу Pay as you go", + "zen.pricing.fee": "(+$1.23 комісія за обробку карти)", + "zen.pricing.body": "Використовуйте з будь-яким агентом. Встановлюйте місячні ліміти. Скасуйте в будь-який час.", + "zen.problem.title": "Яку проблему вирішує Zen?", + "zen.problem.body": + "Доступно багато моделей, але лише деякі добре працюють з агентами кодування. Більшість провайдерів налаштовують їх по-різному з різними результатами.", + "zen.problem.subtitle": "Ми вирішуємо це для всіх, а не лише для користувачів OpenCode.", + "zen.problem.item1": "Тестування вибраних моделей та консультації з їхніми командами", + "zen.problem.item2": "Співпраця з провайдерами для забезпечення правильної доставки", + "zen.problem.item3": "Бенчмаркінг усіх комбінацій моделей та провайдерів, які ми рекомендуємо", + "zen.how.title": "Як працює Zen", + "zen.how.body": "Хоча ми пропонуємо використовувати Zen з OpenCode, ви можете використовувати Zen з будь-яким агентом.", + "zen.how.step1.title": "Зареєструйтеся та додайте $20 балансу", + "zen.how.step1.beforeLink": "дотримуйтесь", + "zen.how.step1.link": "інструкцій з налаштування", + "zen.how.step2.title": "Використовуйте Zen із прозорими цінами", + "zen.how.step2.link": "платіть за запит", + "zen.how.step2.afterLink": "без націнок", + "zen.how.step3.title": "Автоматичне поповнення", + "zen.how.step3.body": "коли баланс досягає $5, ми автоматично додаємо $20", + "zen.privacy.title": "Ваша конфіденційність важлива для нас", + "zen.privacy.beforeExceptions": + "Усі моделі Zen розміщені в США. Провайдери дотримуються політики нульового зберігання та не використовують ваші дані для навчання моделей, за", + "zen.privacy.exceptionsLink": "такими винятками", + + "go.title": "OpenCode Go | Недорогі моделі кодування для всіх", + "go.meta.description": + "Go починається від $5 за перший місяць, потім $10/місяць, з generous 5-годинними лімітами запитів для GLM-5.1, GLM-5, Kimi K2.5, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.5 Plus, Qwen3.6 Plus, MiniMax M2.5, MiniMax M2.7, DeepSeek V4 Pro та DeepSeek V4 Flash.", + "go.hero.title": "Недорогі моделі кодування для всіх", + "go.hero.body": + "Go надає агентне програмування програмістам у всьому світі, пропонуючи щедрі ліміти та надійний доступ до найкращих моделей з відкритим кодом.", + + "go.cta.start": "Підписатися на Go", + "go.cta.template": "{{text}} {{price}}", + "go.cta.text": "Підписатися на Go", + "go.cta.price": "$10/місяць", + "go.cta.promo": "$5 перший місяць", + "go.pricing.body": "Використовуйте з будь-яким агентом. $5 перший місяць, потім $10/місяць. Поповнюйте за потреби. Скасуйте в будь-який час.", + "go.graph.free": "Безкоштовно", + "go.graph.freePill": "Big Pickle та безкоштовні моделі", + "go.graph.go": "Go", + "go.graph.label": "Запитів за 5 годин", + "go.graph.usageLimits": "Ліміти використання", + "go.graph.tick": "{{n}}x", + "go.graph.aria": "Запитів за 5 год: {{free}} vs {{go}}", + + "go.testimonials.brand.zen": "Zen", + "go.testimonials.brand.go": "Go", + "go.testimonials.handle": "@OpenCode", + "go.testimonials.dax.name": "Dax Raad", + "go.testimonials.dax.title": "ex-CEO, Terminal Products", + "go.testimonials.dax.quoteAfter": "змінило моє життя, це справді очевидний вибір.", + "go.testimonials.jay.name": "Jay V", + "go.testimonials.jay.title": "ex-Founder, SEED, PM, Melt, Pop, Dapt, Cadmus, and ViewPoint", + "go.testimonials.jay.quoteBefore": "4 з 5 людей у нашій команді люблять використовувати", + "go.testimonials.jay.quoteAfter": ".", + "go.testimonials.adam.name": "Adam Elmore", + "go.testimonials.adam.title": "ex-Hero, AWS", + "go.testimonials.adam.quoteBefore": "Я не можу достатньо рекомендувати", + "go.testimonials.adam.quoteAfter": ". Серйозно, це дійсно добре.", + "go.testimonials.david.name": "David Hill", + "go.testimonials.david.title": "ex-Head of Design, Laravel", + "go.testimonials.david.quoteBefore": "Завдяки", + "go.testimonials.david.quoteAfter": "я знаю, що всі моделі протестовані та ідеальні для агентів кодування.", + "go.testimonials.frank.name": "Frank Wang", + "go.testimonials.frank.title": "ex-Intern, Nvidia (4 times)", + "go.testimonials.frank.quote": "Хотів би я досі бути в Nvidia.", + "go.problem.title": "Яку проблему вирішує Go?", + "go.problem.body": + "Ми зосереджені на тому, щоб зробити досвід OpenCode доступним для якомога більшої кількості людей. OpenCode Go — це недорога підписка: $5 за перший місяць, потім $10/місяць. Вона надає щедрі ліміти та надійний доступ до найкращих моделей з відкритим кодом.", + "go.problem.subtitle": " ", + "go.problem.item1": "Недорога підписка", + "go.problem.item2": "Щедрі ліміти та надійний доступ", + "go.problem.item3": "Створено для якомога більшої кількості програмістів", + "go.problem.item4": + "Включає GLM-5.1, GLM-5, Kimi K2.5, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.5 Plus, Qwen3.6 Plus, MiniMax M2.5, MiniMax M2.7, DeepSeek V4 Pro та DeepSeek V4 Flash", + "go.how.title": "Як працює Go", + "go.how.body": "Go починається від $5 за перший місяць, потім $10/місяць. Використовуйте з OpenCode або будь-яким агентом.", + "go.how.step1.title": "Створіть обліковий запис", + "go.how.step1.beforeLink": "дотримуйтесь", + "go.how.step1.link": "інструкцій з налаштування", + "go.how.step2.title": "Підпишіться на Go", + "go.how.step2.link": "$5 перший місяць", + "go.how.step2.afterLink": "потім $10/місяць із щедрими лімітами", + "go.how.step3.title": "Почніть кодувати", + "go.how.step3.body": "з надійним доступом до моделей з відкритим кодом", + "go.privacy.title": "Ваша конфіденційність важлива для нас", + "go.privacy.body": + "План розроблений переважно для міжнародних користувачів, з моделями, розміщеними в США, ЄС та Сінгапурі для стабільного глобального доступу.", + "go.privacy.contactAfter": "якщо у вас є запитання.", + "go.privacy.beforeExceptions": + "Моделі Go розміщені в США. Провайдери дотримуються політики нульового зберігання та не використовують ваші дані для навчання моделей, за", + "go.privacy.exceptionsLink": "такими винятками", + "go.faq.q1": "Що таке OpenCode Go?", + "go.faq.a1": + "Go — це недорога підписка, яка надає надійний доступ до найкращих моделей з відкритим кодом для агентного кодування.", + "go.faq.q2": "Які моделі включає Go?", + "go.faq.a2": "Go включає моделі, перелічені нижче, із щедрими лімітами та надійним доступом.", + "go.faq.q3": "Чи Go те саме, що Zen?", + "go.faq.a3": + "Ні. Zen — це плата за використання, тоді як Go починається від $5 за перший місяць, потім $10/місяць, із щедрими лімітами та надійним доступом до моделей з відкритим кодом.", + "go.faq.q4": "Скільки коштує Go?", + "go.faq.a4.p1.beforePricing": "Go коштує", + "go.faq.a4.p1.pricingLink": "$5 за перший місяць", + "go.faq.a4.p1.afterPricing": "потім $10/місяць із щедрими лімітами.", + "go.faq.a4.p2.beforeAccount": "Ви можете керувати підпискою в", + "go.faq.a4.p2.accountLink": "обліковому записі", + "go.faq.a4.p3": "Скасуйте в будь-який час.", + "go.faq.q5": "А як щодо даних та конфіденційності?", + "go.faq.a5.body": + "План розроблений переважно для міжнародних користувачів, з моделями в США, ЄС та Сінгапурі. Провайдери дотримуються політики нульового зберігання.", + "go.faq.a5.beforeExceptions": + "Моделі Go розміщені в США. Провайдери дотримуються політики нульового зберігання та не використовують ваші дані для навчання моделей, за", + "go.faq.a5.exceptionsLink": "такими винятками", + "go.faq.q6": "Чи можна поповнити баланс?", + "go.faq.a6": "Якщо вам потрібно більше використання, ви можете поповнити баланс в обліковому записі.", + "go.faq.q7": "Чи можна скасувати?", + "go.faq.a7": "Так, ви можете скасувати в будь-який час.", + "go.faq.q8": "Чи можна використовувати Go з іншими агентами кодування?", + "go.faq.a8": "Так, ви можете використовувати Go з будь-яким агентом.", + + "go.faq.q9": "Яка різниця між безкоштовними моделями та Go?", + "go.faq.a9": + "Безкоштовні моделі включають Big Pickle та акційні моделі з лімітом 200 запитів/день. Go включає GLM-5.1, GLM-5, Kimi K2.5, Kimi K2.6, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.5 Plus, Qwen3.6 Plus, MiniMax M2.5, MiniMax M2.7, DeepSeek V4 Pro та DeepSeek V4 Flash із вищими лімітами.", + + "zen.api.error.rateLimitExceeded": "Перевищено ліміт запитів. Спробуйте пізніше.", + "zen.api.error.modelNotSupported": "Модель {{model}} не підтримується", + "zen.api.error.modelFormatNotSupported": "Модель {{model}} не підтримується для формату {{format}}", + "zen.api.error.noProviderAvailable": "Немає доступного провайдера", + "zen.api.error.providerNotSupported": "Провайдер {{provider}} не підтримується", + "zen.api.error.missingApiKey": "Відсутній ключ API.", + "zen.api.error.invalidApiKey": "Недійсний ключ API.", + "zen.api.error.subscriptionQuotaExceeded": "Перевищено квоту підписки. Повторіть через {{retryIn}}.", + "zen.api.error.goSubscriptionRollingLimitExceeded": + "Досягнуто 5-годинного ліміту використання. Скидається через {{retryIn}}. Щоб продовжити, увімкніть використання з доступного балансу: {{consoleGoUrl}}", + "zen.api.error.goSubscriptionWeeklyLimitExceeded": + "Досягнуто тижневого ліміту використання. Скидається через {{retryIn}}. Щоб продовжити, увімкніть використання з доступного балансу: {{consoleGoUrl}}", + "zen.api.error.goSubscriptionMonthlyLimitExceeded": + "Досягнуто місячного ліміту використання. Скидається через {{retryIn}}. Щоб продовжити, увімкніть використання з доступного балансу: {{consoleGoUrl}}", + "zen.api.error.noPaymentMethod": "Немає способу оплати. Додайте метод оплати: {{billingUrl}}", + "zen.api.error.insufficientBalance": "Недостатньо коштів. Керуйте оплатою: {{billingUrl}}", + "zen.api.error.workspaceMonthlyLimitReached": + "Ваш робочий простір досяг місячного ліміту витрат ${{amount}}. Керуйте лімітами: {{billingUrl}}", + "zen.api.error.userMonthlyLimitReached": + "Ви досягли місячного ліміту витрат ${{amount}}. Керуйте лімітами: {{membersUrl}}", + "zen.api.error.modelDisabled": "Модель вимкнено", + "zen.api.error.trialEnded": + "Безкоштовна акція для {{model}} закінчилася. Ви можете продовжити використання, підписавшись на OpenCode Go — {{link}}", + + "black.meta.title": "OpenCode Black | Доступ до найкращих моделей кодування", + "black.meta.description": "Отримайте доступ до Claude, GPT, Gemini та інших із планами підписки OpenCode Black.", + "black.hero.title": "Доступ до найкращих моделей кодування", + "black.hero.subtitle": "Включаючи Claude, GPT, Gemini та інші", + "black.title": "OpenCode Black | Ціни", + "black.paused": "Реєстрація в план Black тимчасово призупинена.", + "black.plan.icon20": "План Black 20", + "black.plan.icon100": "План Black 100", + "black.plan.icon200": "План Black 200", + "black.plan.multiplier100": "5x більше використання ніж Black 20", + "black.plan.multiplier200": "20x більше використання ніж Black 20", + "black.price.perMonth": "на місяць", + "black.price.perPersonBilledMonthly": "за особу з щомісячною оплатою", + "black.terms.1": "Ваша підписка не розпочнеться негайно", + "black.terms.2": "Вас додадуть до списку очікування та активують незабаром", + "black.terms.3": "Картку буде списано лише після активації підписки", + "black.terms.4": "Діють ліміти використання, інтенсивне автоматичне використання може швидше вичерпати ліміти", + "black.terms.5": "Підписки призначені для фізичних осіб, зверніться в Enterprise для команд", + "black.terms.6": "Ліміти можуть бути змінені, а плани можуть бути припинені в майбутньому", + "black.terms.7": "Скасуйте підписку в будь-який час", + "black.action.continue": "Продовжити", + "black.finePrint.beforeTerms": "Зазначені ціни не включають податки", + "black.finePrint.terms": "Умови надання послуг", + "black.workspace.title": "OpenCode Black | Виберіть робочий простір", + "black.workspace.selectPlan": "Виберіть робочий простір для цього плану", + "black.workspace.name": "Робочий простір {{n}}", + "black.subscribe.title": "Підписатися на OpenCode Black", + "black.subscribe.paymentMethod": "Спосіб оплати", + "black.subscribe.loadingPaymentForm": "Завантаження форми оплати...", + "black.subscribe.selectWorkspaceToContinue": "Виберіть робочий простір для продовження", + "black.subscribe.failurePrefix": "Ой!", + "black.subscribe.error.generic": "Сталася помилка", + "black.subscribe.error.invalidPlan": "Недійсний план", + "black.subscribe.error.workspaceRequired": "ID робочого простору обов'язкове", + "black.subscribe.error.alreadySubscribed": "Цей робочий простір уже має підписку", + "black.subscribe.processing": "Обробка...", + "black.subscribe.submit": "Підписатися ${{plan}}", + "black.subscribe.form.chargeNotice": "Платіж буде списано лише після активації підписки", + "black.subscribe.success.title": "Ви в списку очікування OpenCode Black", + "black.subscribe.success.subscriptionPlan": "План підписки", + "black.subscribe.success.planName": "OpenCode Black {{plan}}", + "black.subscribe.success.amount": "Сума", + "black.subscribe.success.amountValue": "${{plan}} на місяць", + "black.subscribe.success.paymentMethod": "Спосіб оплати", + "black.subscribe.success.dateJoined": "Дата приєднання", + "black.subscribe.success.chargeNotice": "Вашу картку буде списано після активації підписки", + + "workspace.nav.zen": "Zen", + "workspace.nav.go": "Go", + "workspace.nav.usage": "Використання", + "workspace.nav.apiKeys": "Ключі API", + "workspace.nav.members": "Учасники", + "workspace.nav.billing": "Оплата", + "workspace.nav.settings": "Налаштування", + + "workspace.home.banner.beforeLink": "Надійні оптимізовані моделі для агентів кодування.", + "workspace.lite.banner.beforeLink": "Недорогі моделі кодування для всіх.", + "workspace.home.billing.loading": "Завантаження...", + "workspace.home.billing.enable": "Увімкнути оплату", + "workspace.home.billing.currentBalance": "Поточний баланс", + + "workspace.newUser.feature.tested.title": "Протестовані та перевірені моделі", + "workspace.newUser.feature.tested.body": + "Ми протестували моделі спеціально для агентів кодування, щоб забезпечити найкращу продуктивність.", + "workspace.newUser.feature.quality.title": "Найвища якість", + "workspace.newUser.feature.quality.body": + "Доступ до моделей, налаштованих для оптимальної продуктивності — без зниження якості.", + "workspace.newUser.feature.lockin.title": "Без блокування (Lock-in)", + "workspace.newUser.feature.lockin.body": + "Використовуйте Zen з будь-яким агентом і продовжуйте користуватися іншими провайдерами.", + "workspace.newUser.copyApiKey": "Копіювати ключ API", + "workspace.newUser.copyKey": "Копіювати ключ", + "workspace.newUser.copied": "Скопійовано!", + "workspace.newUser.step.enableBilling": "Увімкнути оплату", + "workspace.newUser.step.login.before": "Запустіть", + "workspace.newUser.step.login.after": "і виберіть opencode", + "workspace.newUser.step.pasteKey": "Вставте ключ API", + "workspace.newUser.step.models.before": "Запустіть opencode і виконайте", + "workspace.newUser.step.models.after": "щоб вибрати модель", + + "workspace.models.title": "Моделі", + "workspace.models.subtitle.beforeLink": "Керуйте доступом учасників до моделей.", + "workspace.models.table.model": "Модель", + "workspace.models.table.enabled": "Увімкнено", + + "workspace.providers.title": "Принесіть власний ключ (BYOK)", + "workspace.providers.subtitle": "Налаштуйте власні ключі API від AI-провайдерів.", + "workspace.providers.placeholder": "Введіть ключ API {{provider}} ({{prefix}}...)", + "workspace.providers.configure": "Налаштувати", + "workspace.providers.edit": "Редагувати", + "workspace.providers.delete": "Видалити", + "workspace.providers.saving": "Збереження...", + "workspace.providers.save": "Зберегти", + "workspace.providers.table.provider": "Провайдер", + "workspace.providers.table.apiKey": "Ключ API", + + "workspace.usage.title": "Історія використання", + "workspace.usage.subtitle": "Останнє використання API та витрати.", + "workspace.usage.empty": "Зробіть перший API-запит, щоб почати.", + "workspace.usage.table.date": "Дата", + "workspace.usage.table.model": "Модель", + "workspace.usage.table.input": "Вхід", + "workspace.usage.table.output": "Вихід", + "workspace.usage.table.cost": "Вартість", + "workspace.usage.table.session": "Сесія", + "workspace.usage.breakdown.input": "Вхід", + "workspace.usage.breakdown.cacheRead": "Читання кешу", + "workspace.usage.breakdown.cacheWrite": "Запис кешу", + "workspace.usage.breakdown.output": "Вихід", + "workspace.usage.breakdown.reasoning": "Міркування", + "workspace.usage.subscription": "Black (${{amount}})", + "workspace.usage.lite": "Go (${{amount}})", + "workspace.usage.byok": "BYOK (${{amount}})", + + "workspace.cost.title": "Вартість", + "workspace.cost.subtitle": "Витрати в розрізі моделей.", + "workspace.cost.allModels": "Усі моделі", + "workspace.cost.allKeys": "Усі ключі", + "workspace.cost.deletedSuffix": "(видалено)", + "workspace.cost.empty": "Немає даних про використання за вибраний період.", + "workspace.cost.subscriptionShort": "підп", + + "workspace.keys.title": "Ключі API", + "workspace.keys.subtitle": "Керуйте ключами API для доступу до сервісів opencode.", + "workspace.keys.create": "Створити ключ API", + "workspace.keys.placeholder": "Введіть назву ключа", + "workspace.keys.empty": "Створіть ключ API шлюзу opencode", + "workspace.keys.table.name": "Назва", + "workspace.keys.table.key": "Ключ", + "workspace.keys.table.createdBy": "Створено", + "workspace.keys.table.lastUsed": "Останнє використання", + "workspace.keys.copyApiKey": "Копіювати ключ API", + "workspace.keys.delete": "Видалити", + + "workspace.members.title": "Учасники", + "workspace.members.subtitle": "Керуйте учасниками робочого простору та їхніми дозволами.", + "workspace.members.invite": "Запросити учасника", + "workspace.members.inviting": "Запрошення...", + "workspace.members.beta.beforeLink": "Робочі простори безкоштовні для команд під час бета-версії.", + "workspace.members.form.invitee": "Запрошений", + "workspace.members.form.emailPlaceholder": "Введіть email", + "workspace.members.form.role": "Роль", + "workspace.members.form.monthlyLimit": "Місячний ліміт витрат", + "workspace.members.noLimit": "Без ліміту", + "workspace.members.noLimitLowercase": "без ліміту", + "workspace.members.invited": "запрошено", + "workspace.members.edit": "Редагувати", + "workspace.members.delete": "Видалити", + "workspace.members.saving": "Збереження...", + "workspace.members.save": "Зберегти", + "workspace.members.table.email": "Email", + "workspace.members.table.role": "Роль", + "workspace.members.table.monthLimit": "Ліміт на місяць", + "workspace.members.role.admin": "Адміністратор", + "workspace.members.role.adminDescription": "Може керувати моделями, учасниками та оплатою", + "workspace.members.role.member": "Учасник", + "workspace.members.role.memberDescription": "Може створювати ключі API лише для себе", + + "workspace.settings.title": "Налаштування", + "workspace.settings.subtitle": "Оновіть назву робочого простору та налаштування.", + "workspace.settings.workspaceName": "Назва робочого простору", + "workspace.settings.defaultName": "Стандартна", + "workspace.settings.updating": "Оновлення...", + "workspace.settings.save": "Зберегти", + "workspace.settings.edit": "Редагувати", + + "workspace.billing.title": "Оплата", + "workspace.billing.subtitle.beforeLink": "Керуйте способами оплати.", + "workspace.billing.contactUs": "Зв'яжіться з нами", + "workspace.billing.subtitle.afterLink": "якщо у вас є запитання.", + "workspace.billing.currentBalance": "Поточний баланс", + "workspace.billing.add": "Додати $", + "workspace.billing.enterAmount": "Введіть суму", + "workspace.billing.loading": "Завантаження...", + "workspace.billing.addAction": "Додати", + "workspace.billing.addBalance": "Поповнити баланс", + "workspace.billing.alipay": "Alipay", + "workspace.billing.wechat": "WeChat Pay", + "workspace.billing.linkedToStripe": "Підключено до Stripe", + "workspace.billing.manage": "Керувати", + "workspace.billing.enable": "Увімкнути оплату", + + "workspace.monthlyLimit.title": "Місячний ліміт", + "workspace.monthlyLimit.subtitle": "Встановіть місячний ліміт використання для облікового запису.", + "workspace.monthlyLimit.placeholder": "50", + "workspace.monthlyLimit.setting": "Встановлення...", + "workspace.monthlyLimit.set": "Встановити", + "workspace.monthlyLimit.edit": "Редагувати ліміт", + "workspace.monthlyLimit.noLimit": "Ліміт використання не встановлено.", + "workspace.monthlyLimit.currentUsage.beforeMonth": "Поточне використання за", + "workspace.monthlyLimit.currentUsage.beforeAmount": "становить $", + + "workspace.redeem.title": "Активувати купон", + "workspace.redeem.subtitle": "Активуйте код купона для отримання коштів або бонусів.", + "workspace.redeem.placeholder": "Введіть код купона", + "workspace.redeem.redeem": "Активувати", + "workspace.redeem.redeeming": "Активація...", + "workspace.redeem.success": "Купон успішно активовано.", + + "workspace.reload.title": "Автоматичне поповнення", + "workspace.reload.disabled.before": "Автоматичне поповнення", + "workspace.reload.disabled.state": "вимкнено", + "workspace.reload.disabled.after": "Увімкніть для автоматичного поповнення при низькому балансі.", + "workspace.reload.enabled.before": "Автоматичне поповнення", + "workspace.reload.enabled.state": "увімкнено", + "workspace.reload.enabled.middle": "Ми поповнимо", + "workspace.reload.processingFee": "комісія за обробку", + "workspace.reload.enabled.after": "коли баланс досягне", + "workspace.reload.edit": "Редагувати", + "workspace.reload.enable": "Увімкнути", + "workspace.reload.enableAutoReload": "Увімкнути автоматичне поповнення", + "workspace.reload.reloadAmount": "Поповнити на $", + "workspace.reload.whenBalanceReaches": "Коли баланс досягне $", + "workspace.reload.saving": "Збереження...", + "workspace.reload.save": "Зберегти", + "workspace.reload.failedAt": "Поповнення не вдалося о", + "workspace.reload.reason": "Причина:", + "workspace.reload.updatePaymentMethod": "Оновіть спосіб оплати та спробуйте ще раз.", + "workspace.reload.retrying": "Повтор...", + "workspace.reload.retry": "Повторити", + "workspace.reload.error.paymentFailed": "Платіж не вдався.", + + "workspace.payments.title": "Історія платежів", + "workspace.payments.subtitle": "Останні платіжні транзакції.", + "workspace.payments.table.date": "Дата", + "workspace.payments.table.paymentId": "ID платежу", + "workspace.payments.table.amount": "Сума", + "workspace.payments.table.receipt": "Квитанція", + "workspace.payments.type.credit": "кредит", + "workspace.payments.type.subscription": "підписка", + "workspace.payments.view": "Переглянути", + + "workspace.black.loading": "Завантаження...", + "workspace.black.time.day": "день", + "workspace.black.time.days": "дні", + "workspace.black.time.hour": "година", + "workspace.black.time.hours": "годин(и)", + "workspace.black.time.minute": "хвилина", + "workspace.black.time.minutes": "хвилин(и)", + "workspace.black.time.fewSeconds": "кілька секунд", + "workspace.black.subscription.title": "Підписка", + "workspace.black.subscription.message": "Ви підписані на OpenCode Black за ${{plan}} на місяць.", + "workspace.black.subscription.manage": "Керувати підпискою", + "workspace.black.subscription.rollingUsage": "Використання (5 год)", + "workspace.black.subscription.weeklyUsage": "Тижневе використання", + "workspace.black.subscription.resetsIn": "Скидається через", + "workspace.black.subscription.useBalance": "Використовуйте доступний баланс після досягнення лімітів", + "workspace.black.waitlist.title": "Список очікування", + "workspace.black.waitlist.joined": "Ви в списку очікування на план OpenCode Black за ${{plan}} на місяць.", + "workspace.black.waitlist.ready": "Ми готові зареєструвати вас на план OpenCode Black за ${{plan}} на місяць.", + "workspace.black.waitlist.leave": "Залишити список очікування", + "workspace.black.waitlist.leaving": "Вихід...", + "workspace.black.waitlist.left": "Вишли", + "workspace.black.waitlist.enroll": "Зареєструватися", + "workspace.black.waitlist.enrolling": "Реєстрація...", + "workspace.black.waitlist.enrolled": "Зареєстровано", + "workspace.black.waitlist.enrollNote": + "Після натискання «Зареєструватися» підписка почнеться негайно, а картку буде списано.", + + "workspace.lite.loading": "Завантаження...", + "workspace.lite.time.day": "день", + "workspace.lite.time.days": "дні", + "workspace.lite.time.hour": "година", + "workspace.lite.time.hours": "годин(и)", + "workspace.lite.time.minute": "хвилина", + "workspace.lite.time.minutes": "хвилин(и)", + "workspace.lite.time.fewSeconds": "кілька секунд", + "workspace.lite.subscription.message": "Ви підписані на OpenCode Go.", + "workspace.lite.subscription.manage": "Керувати підпискою", + "workspace.lite.subscription.rollingUsage": "Ковзне використання", + "workspace.lite.subscription.weeklyUsage": "Тижневе використання", + "workspace.lite.subscription.monthlyUsage": "Місячне використання", + "workspace.lite.subscription.resetsIn": "Скидається через", + "workspace.lite.subscription.useBalance": "Використовуйте доступний баланс після досягнення лімітів", + "workspace.lite.subscription.selectProvider": + 'Виберіть "OpenCode Go" як провайдера в конфігурації opencode.', + "workspace.lite.black.message": + "Ви вже підписані на OpenCode Black або в списку очікування. Спочатку скасуйте підписку, якщо хочете перейти на Go.", + "workspace.lite.other.message": + "Інший учасник цього робочого простору вже підписаний на OpenCode Go.", + "workspace.lite.promo.description": + "OpenCode Go починається від {{price}}, потім $10/місяць, із щедрими лімітами.", + "workspace.lite.promo.price": "$5 за перший місяць", + "workspace.lite.promo.modelsTitle": "Що включено", + "workspace.lite.promo.footer": + "План призначений для міжнародних користувачів. Ціни можуть змінюватися.", + "workspace.lite.promo.subscribe": "Підписатися на Go", + "workspace.lite.promo.subscribing": "Перенаправлення...", + "workspace.lite.promo.otherMethods": "Інші способи оплати", + "workspace.lite.promo.selectMethod": "Виберіть спосіб оплати", + + "download.title": "OpenCode | Завантажити", + "download.meta.description": "Завантажте OpenCode для macOS, Windows та Linux", + "download.hero.title": "Завантажити OpenCode", + "download.hero.subtitle": "Доступно в бета-версії для macOS, Windows та Linux", + "download.hero.button": "Завантажити для {{os}}", + "download.section.terminal": "Термінал OpenCode", + "download.section.desktop": "Десктоп OpenCode (Бета)", + "download.section.extensions": "Розширення OpenCode", + "download.section.integrations": "Інтеграції OpenCode", + "download.action.download": "Завантажити", + "download.action.install": "Встановити", + + "download.platform.macosAppleSilicon": "macOS (Apple Silicon)", + "download.platform.macosIntel": "macOS (Intel)", + "download.platform.windowsX64": "Windows (x64)", + "download.platform.linuxDeb": "Linux (.deb)", + "download.platform.linuxRpm": "Linux (.rpm)", + + "download.faq.a3.beforeLocal": + "Не обов'язково, але ймовірно. Вам знадобиться AI-підписка, якщо ви хочете підключити платного провайдера, хоча ви можете працювати з", + "download.faq.a3.localLink": "локальними моделями", + "download.faq.a3.afterLocal.beforeZen": "безкоштовно. Хоча ми рекомендуємо", + "download.faq.a3.afterZen": + ", OpenCode працює з усіма популярними провайдерами, такими як OpenAI, Anthropic, xAI тощо.", + + "download.faq.a5.p1": "OpenCode є 100% безкоштовним.", + "download.faq.a5.p2.beforeZen": + "Будь-які додаткові витрати будуть з вашої підписки у провайдера моделі. Ми рекомендуємо", + "download.faq.a5.p2.afterZen": ".", + + "download.faq.a6.p1": "Ваші дані зберігаються лише при створенні посилань для обміну в OpenCode.", + "download.faq.a6.p2.beforeShare": "Дізнайтеся більше про", + "download.faq.a6.shareLink": "сторінки обміну", + + "enterprise.title": "OpenCode | Enterprise-рішення для вашої організації", + "enterprise.meta.description": "Зв'яжіться з OpenCode для Enterprise-рішень", + "enterprise.hero.title": "Ваш код належить вам", + "enterprise.hero.body1": + "OpenCode працює безпечно всередині вашої організації без зберігання даних, ліцензійних обмежень. Почніть пробний період із командою, потім розгорніть через SSO та внутрішній AI-шлюз.", + "enterprise.hero.body2": "Дайте знати, чим ми можемо допомогти.", + "enterprise.form.name.label": "Повне ім'я", + "enterprise.form.name.placeholder": "Джеф Безос", + "enterprise.form.role.label": "Посада", + "enterprise.form.role.placeholder": "Голова правління", + "enterprise.form.company.label": "Компанія", + "enterprise.form.company.placeholder": "Acme Inc", + "enterprise.form.email.label": "Робоча електронна адреса", + "enterprise.form.email.placeholder": "jeff@amazon.com", + "enterprise.form.phone.label": "Номер телефону", + "enterprise.form.phone.placeholder": "+1 234 567 8900", + "enterprise.form.message.label": "Яку проблему ви намагаєтеся вирішити?", + "enterprise.form.message.placeholder": "Нам потрібна допомога з...", + "enterprise.form.send": "Надіслати", + "enterprise.form.sending": "Надсилання...", + "enterprise.form.success": "Повідомлення надіслано, ми зв'яжемося найближчим часом.", + "enterprise.form.success.submitted": "Форму успішно надіслано.", + "enterprise.form.error.allFieldsRequired": "Усі поля обов'язкові.", + "enterprise.form.error.invalidEmailFormat": "Недійсний формат email.", + "enterprise.form.error.internalServer": "Внутрішня помилка сервера.", + "enterprise.faq.title": "FAQ", + "enterprise.faq.q1": "Що таке OpenCode Enterprise?", + "enterprise.faq.a1": + "OpenCode Enterprise для організацій, які хочуть гарантувати, що код і дані ніколи не залишають їхню інфраструктуру.", + "enterprise.faq.q2": "Як почати з OpenCode Enterprise?", + "enterprise.faq.a2": + "Почніть із внутрішнього тестування з командою. OpenCode за замовчуванням не зберігає код. Потім зв'яжіться з нами для обговорення цін.", + "enterprise.faq.q3": "Як працює ціноутворення enterprise?", + "enterprise.faq.a3": + "Ми пропонуємо ціну за робоче місце. Якщо у вас власний LLM-шлюз, ми не стягуємо плату за токени.", + "enterprise.faq.q4": "Чи безпечні мої дані з OpenCode Enterprise?", + "enterprise.faq.a4": + "Так. OpenCode не зберігає ваш код або контекст. Вся обробка відбувається локально або через прямі API-виклики.", + + "brand.title": "OpenCode | Бренд", + "brand.meta.description": "Рекомендації щодо бренду OpenCode", + "brand.heading": "Рекомендації щодо бренду", + "brand.subtitle": "Ресурси та матеріали для роботи з брендом OpenCode.", + "brand.downloadAll": "Завантажити всі матеріали", + + "changelog.title": "OpenCode | Журнал змін", + "changelog.meta.description": "Нотатки про випуски та журнал змін OpenCode", + "changelog.hero.title": "Журнал змін", + "changelog.hero.subtitle": "Нові оновлення та покращення OpenCode", + "changelog.empty": "Записів у журналі змін не знайдено.", + "changelog.viewJson": "Переглянути JSON", + + "bench.list.title": "Бенчмарк", + "bench.list.heading": "Бенчмарки", + "bench.list.table.agent": "Агент", + "bench.list.table.model": "Модель", + "bench.list.table.score": "Результат", + "bench.submission.error.allFieldsRequired": "Усі поля обов'язкові.", + + "bench.detail.title": "Бенчмарк — {{task}}", + "bench.detail.notFound": "Завдання не знайдено", + "bench.detail.na": "Н/Д", + "bench.detail.labels.agent": "Агент", + "bench.detail.labels.model": "Модель", + "bench.detail.labels.task": "Завдання", + "bench.detail.labels.repo": "Репозиторій", + "bench.detail.labels.from": "Від", + "bench.detail.labels.to": "До", + "bench.detail.labels.prompt": "Prompt", + "bench.detail.labels.commit": "Коміт", + "bench.detail.labels.averageDuration": "Середня тривалість", + "bench.detail.labels.averageScore": "Середній результат", + "bench.detail.labels.averageCost": "Середня вартість", + "bench.detail.labels.summary": "Підсумок", + "bench.detail.labels.runs": "Запуски", + "bench.detail.labels.score": "Результат", + "bench.detail.labels.base": "База", + "bench.detail.labels.penalty": "Штраф", + "bench.detail.labels.weight": "вага", + "bench.detail.table.run": "Запуск", + "bench.detail.table.score": "Результат (База — Штраф)", + "bench.detail.table.cost": "Вартість", + "bench.detail.table.duration": "Тривалість", + "bench.detail.run.title": "Запуск {{n}}", + "bench.detail.rawJson": "Сирий JSON", +} diff --git a/packages/console/app/src/lib/language.ts b/packages/console/app/src/lib/language.ts index 5e80179e47..a196f663db 100644 --- a/packages/console/app/src/lib/language.ts +++ b/packages/console/app/src/lib/language.ts @@ -11,6 +11,7 @@ export const LOCALES = [ "ja", "pl", "ru", + "uk", "ar", "no", "br", @@ -41,6 +42,7 @@ const LABEL = { ja: "日本語", pl: "Polski", ru: "Русский", + uk: "Українська", ar: "العربية", no: "Norsk", br: "Português (Brasil)", @@ -61,6 +63,7 @@ const TAG = { ja: "ja", pl: "pl", ru: "ru", + uk: "uk", ar: "ar", no: "no", br: "pt-BR", @@ -81,6 +84,7 @@ const DOCS = { ja: "ja", pl: "pl", ru: "ru", + uk: "uk", ar: "ar", no: "nb", br: "pt-br", @@ -104,6 +108,7 @@ const DOCS_SEGMENT = new Set([ "ru", "th", "tr", + "uk", "zh-cn", "zh-tw", ]) @@ -124,6 +129,7 @@ const DOCS_LOCALE = { ru: "ru", th: "th", tr: "tr", + uk: "uk", "zh-cn": "zh", "zh-tw": "zht", } as const satisfies Record @@ -239,6 +245,7 @@ function match(input: string): Locale | null { if (value.startsWith("ja")) return "ja" if (value.startsWith("pl")) return "pl" if (value.startsWith("ru")) return "ru" + if (value.startsWith("uk")) return "uk" if (value.startsWith("ar")) return "ar" if (value.startsWith("tr")) return "tr" if (value.startsWith("th")) return "th" diff --git a/packages/desktop/src/renderer/i18n/index.ts b/packages/desktop/src/renderer/i18n/index.ts index be87f94f91..a88fed7080 100644 --- a/packages/desktop/src/renderer/i18n/index.ts +++ b/packages/desktop/src/renderer/i18n/index.ts @@ -11,6 +11,7 @@ import { dict as desktopDa } from "./da" import { dict as desktopJa } from "./ja" import { dict as desktopPl } from "./pl" import { dict as desktopRu } from "./ru" +import { dict as desktopUk } from "./uk" import { dict as desktopAr } from "./ar" import { dict as desktopNo } from "./no" import { dict as desktopBr } from "./br" @@ -27,6 +28,7 @@ import { dict as appDa } from "../../../../app/src/i18n/da" import { dict as appJa } from "../../../../app/src/i18n/ja" import { dict as appPl } from "../../../../app/src/i18n/pl" import { dict as appRu } from "../../../../app/src/i18n/ru" +import { dict as appUk } from "../../../../app/src/i18n/uk" import { dict as appAr } from "../../../../app/src/i18n/ar" import { dict as appNo } from "../../../../app/src/i18n/no" import { dict as appBr } from "../../../../app/src/i18n/br" @@ -44,6 +46,7 @@ export type Locale = | "ja" | "pl" | "ru" + | "uk" | "ar" | "no" | "br" @@ -64,6 +67,7 @@ const LOCALES: readonly Locale[] = [ "ja", "pl", "ru", + "uk", "bs", "ar", "no", @@ -89,6 +93,7 @@ function detectLocale(): Locale { if (language.toLowerCase().startsWith("ja")) return "ja" if (language.toLowerCase().startsWith("pl")) return "pl" if (language.toLowerCase().startsWith("ru")) return "ru" + if (language.toLowerCase().startsWith("uk")) return "uk" if (language.toLowerCase().startsWith("ar")) return "ar" if ( language.toLowerCase().startsWith("no") || @@ -148,6 +153,7 @@ function build(locale: Locale): Dictionary { if (locale === "ja") return { ...base, ...i18n.flatten(appJa), ...i18n.flatten(desktopJa) } if (locale === "pl") return { ...base, ...i18n.flatten(appPl), ...i18n.flatten(desktopPl) } if (locale === "ru") return { ...base, ...i18n.flatten(appRu), ...i18n.flatten(desktopRu) } + if (locale === "uk") return { ...base, ...i18n.flatten(appUk), ...i18n.flatten(desktopUk) } if (locale === "ar") return { ...base, ...i18n.flatten(appAr), ...i18n.flatten(desktopAr) } if (locale === "no") return { ...base, ...i18n.flatten(appNo), ...i18n.flatten(desktopNo) } if (locale === "br") return { ...base, ...i18n.flatten(appBr), ...i18n.flatten(desktopBr) } diff --git a/packages/desktop/src/renderer/i18n/uk.ts b/packages/desktop/src/renderer/i18n/uk.ts new file mode 100644 index 0000000000..f9a6212b22 --- /dev/null +++ b/packages/desktop/src/renderer/i18n/uk.ts @@ -0,0 +1,28 @@ +export const dict = { + "desktop.menu.checkForUpdates": "Перевірити оновлення...", + "desktop.menu.installCli": "Встановити CLI...", + "desktop.menu.reloadWebview": "Перезавантажити Webview", + "desktop.menu.restart": "Перезапустити", + + "desktop.dialog.chooseFolder": "Виберіть теку", + "desktop.dialog.chooseFile": "Виберіть файл", + "desktop.dialog.saveFile": "Зберегти файл", + + "desktop.updater.checkFailed.title": "Не вдалося перевірити оновлення", + "desktop.updater.checkFailed.message": "Не вдалося перевірити наявність оновлень", + "desktop.updater.none.title": "Немає доступних оновлень", + "desktop.updater.none.message": "Ви вже використовуєте найновішу версію OpenCode", + "desktop.updater.downloadFailed.title": "Помилка оновлення", + "desktop.updater.downloadFailed.message": "Не вдалося завантажити оновлення", + "desktop.updater.downloaded.title": "Оновлення завантажено", + "desktop.updater.downloaded.prompt": + "Версію {{version}} OpenCode завантажено. Бажаєте встановити її та перезапустити?", + "desktop.updater.installFailed.title": "Помилка оновлення", + "desktop.updater.installFailed.message": "Не вдалося встановити оновлення", + + "desktop.cli.installed.title": "CLI встановлено", + "desktop.cli.installed.message": + "CLI встановлено до {{path}}\n\nПерезапустіть термінал, щоб використовувати команду 'opencode'.", + "desktop.cli.failed.title": "Не вдалося встановити", + "desktop.cli.failed.message": "Не вдалося встановити CLI: {{error}}", +} diff --git a/packages/ui/src/i18n/uk.ts b/packages/ui/src/i18n/uk.ts new file mode 100644 index 0000000000..8bfb3e4404 --- /dev/null +++ b/packages/ui/src/i18n/uk.ts @@ -0,0 +1,167 @@ +export const dict: Record = { + "ui.sessionReview.title": "Зміни сесії", + "ui.sessionReview.title.git": "Зміни Git", + "ui.sessionReview.title.branch": "Зміни гілки", + "ui.sessionReview.title.lastTurn": "Зміни останнього кроку", + "ui.sessionReview.diffStyle.unified": "Об'єднаний", + "ui.sessionReview.diffStyle.split": "Розділений", + "ui.sessionReview.expandAll": "Розгорнути все", + "ui.sessionReview.collapseAll": "Згорнути все", + "ui.sessionReview.change.added": "Додано", + "ui.sessionReview.change.removed": "Видалено", + "ui.sessionReview.change.modified": "Змінено", + "ui.sessionReview.image.loading": "Завантаження...", + "ui.sessionReview.image.placeholder": "Зображення", + "ui.sessionReview.largeDiff.title": "Завеликий diff для відображення", + "ui.sessionReview.largeDiff.meta": "Ліміт: {{limit}} змінених рядків. Поточно: {{current}} змінених рядків.", + "ui.sessionReview.largeDiff.renderAnyway": "Все одно відобразити", + "ui.sessionReview.openFile": "Відкрити файл", + "ui.sessionReview.selection.line": "рядок {{line}}", + "ui.sessionReview.selection.lines": "рядки {{start}}-{{end}}", + + "ui.fileMedia.kind.image": "зображення", + "ui.fileMedia.kind.audio": "аудіо", + "ui.fileMedia.state.removed": "{{kind}} видалено", + "ui.fileMedia.state.loading": "Завантаження {{kind}}...", + "ui.fileMedia.state.error": "Не вдалося завантажити {{kind}}", + "ui.fileMedia.state.unavailable": "{{kind}} недоступне", + "ui.fileMedia.binary.title": "Бінарний файл", + "ui.fileMedia.binary.description.path": "Неможливо відобразити {{path}}, оскільки це бінарний файл.", + "ui.fileMedia.binary.description.default": "Неможливо відобразити цей файл, оскільки він бінарний.", + + "ui.lineComment.label.prefix": "Коментар до ", + "ui.lineComment.label.suffix": "", + "ui.lineComment.editorLabel.prefix": "Коментування: ", + "ui.lineComment.editorLabel.suffix": "", + "ui.lineComment.placeholder": "Додати коментар", + "ui.lineComment.submit": "Коментувати", + + "ui.sessionTurn.steps.show": "Показати кроки", + "ui.sessionTurn.steps.hide": "Приховати кроки", + "ui.sessionTurn.summary.response": "Відповідь", + "ui.sessionTurn.diff.showMore": "Показати більше змін ({{count}})", + "ui.sessionTurn.diffs.changed": "Змінено", + "ui.sessionTurn.diffs.showAll": "Показати всі", + "ui.sessionTurn.diffs.showLess": "Показати менше", + "ui.sessionTurn.diffs.more": "+{{count}} інших файлів", + + "ui.sessionTurn.retry.retrying": "повтор", + "ui.sessionTurn.retry.inSeconds": "за {{seconds}}с", + "ui.sessionTurn.retry.attempt": "спроба №{{attempt}}", + "ui.sessionTurn.retry.attemptLine": "{{line}} — спроба №{{attempt}}", + "ui.sessionTurn.retry.geminiHot": "gemini зараз перевантажений", + "ui.sessionTurn.error.freeUsageExceeded": "Перевищено ліміт безкоштовного використання", + "ui.sessionTurn.error.addCredits": "Додати кредити", + + "ui.sessionTurn.status.delegating": "Делегування роботи", + "ui.sessionTurn.status.planning": "Планування наступних кроків", + "ui.sessionTurn.status.gatheringContext": "Дослідження", + "ui.sessionTurn.status.gatheredContext": "Досліджено", + "ui.sessionTurn.status.searchingCodebase": "Пошук у кодовій базі", + "ui.sessionTurn.status.searchingWeb": "Пошук в інтернеті", + "ui.sessionTurn.status.makingEdits": "Внесення змін", + "ui.sessionTurn.status.runningCommands": "Виконання команд", + "ui.sessionTurn.status.thinking": "Міркування", + "ui.sessionTurn.status.thinkingWithTopic": "Міркування — {{topic}}", + "ui.sessionTurn.status.gatheringThoughts": "Збирання думок", + "ui.sessionTurn.status.consideringNextSteps": "Розгляд наступних кроків", + + "ui.messagePart.diagnostic.error": "Помилка", + "ui.messagePart.title.edit": "Редагувати", + "ui.messagePart.title.write": "Написати", + "ui.messagePart.option.typeOwnAnswer": "Введіть власну відповідь", + "ui.messagePart.review.title": "Перевірте свої відповіді", + "ui.messagePart.questions.dismissed": "Питання відхилено", + "ui.messagePart.compaction": "Сесію стиснуто", + "ui.messagePart.context.read.one": "{{count}} читання", + "ui.messagePart.context.read.other": "{{count}} читань", + "ui.messagePart.context.search.one": "{{count}} пошук", + "ui.messagePart.context.search.other": "{{count}} пошуків", + "ui.messagePart.context.list.one": "{{count}} список", + "ui.messagePart.context.list.other": "{{count}} списків", + + "ui.list.loading": "Завантаження", + "ui.list.empty": "Немає результатів", + "ui.list.clearFilter": "Очистити фільтр", + "ui.list.emptyWithFilter.prefix": "Немає результатів для", + "ui.list.emptyWithFilter.suffix": "", + + "ui.fileSearch.placeholder": "Знайти", + "ui.fileSearch.previousMatch": "Попередній збіг", + "ui.fileSearch.nextMatch": "Наступний збіг", + "ui.fileSearch.close": "Закрити пошук", + + "ui.messageNav.newMessage": "Нове повідомлення", + + "ui.textField.copyToClipboard": "Копіювати в буфер обміну", + "ui.textField.copyLink": "Копіювати посилання", + "ui.textField.copied": "Скопійовано", + + "ui.imagePreview.alt": "Попередній перегляд зображення", + "ui.scrollView.ariaLabel": "контент для прокручування", + + "ui.tool.read": "Читання", + "ui.tool.loaded": "Завантажено", + "ui.tool.list": "Список", + "ui.tool.glob": "Glob", + "ui.tool.grep": "Grep", + "ui.tool.task": "Завдання", + "ui.tool.webfetch": "Веб-отримання", + "ui.tool.websearch": "Веб-пошук", + "ui.tool.shell": "Оболонка", + "ui.tool.patch": "Патч", + "ui.tool.todos": "Завдання", + "ui.tool.todos.read": "Читати завдання", + "ui.tool.questions": "Питання", + "ui.tool.agent": "Агент {{type}}", + "ui.tool.agent.default": "Агент", + "ui.tool.skill": "Навичка", + + "ui.basicTool.called": "Викликано `{{tool}}`", + "ui.toolErrorCard.failed": "Помилка", + "ui.toolErrorCard.copyError": "Копіювати помилку", + + "ui.common.file.one": "файл", + "ui.common.file.other": "файлів", + "ui.common.question.one": "питання", + "ui.common.question.other": "питань", + + "ui.common.add": "Додати", + "ui.common.back": "Назад", + "ui.common.cancel": "Скасувати", + "ui.common.confirm": "Підтвердити", + "ui.common.dismiss": "Відхилити", + "ui.common.close": "Закрити", + "ui.common.next": "Далі", + "ui.common.submit": "Надіслати", + + "ui.permission.deny": "Заборонити", + "ui.permission.allowAlways": "Дозволяти завжди", + "ui.permission.allowOnce": "Дозволити один раз", + + "ui.message.expand": "Розгорнути повідомлення", + "ui.message.collapse": "Згорнути повідомлення", + "ui.message.copy": "Копіювати", + "ui.message.copyMessage": "Копіювати повідомлення", + "ui.message.forkMessage": "Відгалузити в нову сесію", + "ui.message.revertMessage": "Скинути до цього моменту", + "ui.message.copyResponse": "Копіювати відповідь", + "ui.message.copied": "Скопійовано", + "ui.message.duration.seconds": "{{count}}с", + "ui.message.duration.minutesSeconds": "{{minutes}}хв {{seconds}}с", + "ui.message.interrupted": "Перервано", + "ui.message.queued": "У черзі", + "ui.message.attachment.alt": "вкладення", + + "ui.patch.action.deleted": "Видалено", + "ui.patch.action.created": "Створено", + "ui.patch.action.moved": "Переміщено", + "ui.patch.action.patched": "Пропатчено", + + "ui.question.subtitle.answered": "{{count}} відповідей", + "ui.question.answer.none": "(немає відповіді)", + "ui.question.review.notAnswered": "(не відповіли)", + "ui.question.multiHint": "Виберіть усі відповідні варіанти", + "ui.question.singleHint": "Виберіть одну відповідь", + "ui.question.custom.placeholder": "Введіть свою відповідь...", +} diff --git a/packages/web/src/i18n/locales.ts b/packages/web/src/i18n/locales.ts index 67e36dfe14..d1b3e74d1f 100644 --- a/packages/web/src/i18n/locales.ts +++ b/packages/web/src/i18n/locales.ts @@ -14,6 +14,7 @@ export const docsLocale = [ "ru", "th", "tr", + "uk", "zh-cn", "zh-tw", ] as const @@ -46,6 +47,7 @@ export const localeAlias = { ru: "ru", th: "th", tr: "tr", + uk: "uk", zh: "zh-cn", "zh-cn": "zh-cn", zht: "zh-tw", @@ -63,6 +65,7 @@ const starts = [ ["ja", "ja"], ["pl", "pl"], ["ru", "ru"], + ["uk", "uk"], ["ar", "ar"], ["th", "th"], ["tr", "tr"], diff --git a/screenshot-uk.png b/screenshot-uk.png new file mode 100644 index 0000000000000000000000000000000000000000..b7c7b4573e4959414fc89ddb628294a564528319 GIT binary patch literal 83462 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�)@cgt51 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