From c456c5e7dd0f794a80620f84e71ff6bd2825f8c9 Mon Sep 17 00:00:00 2001 From: Bare7a Date: Mon, 9 Feb 2026 09:00:38 +0200 Subject: [PATCH] Add Bulgarian translation (#2466) --- src/i18n/i18n.config.ts | 2 + src/i18n/locales/bg.json | 286 +++++++++++++++++++++++++++++++++++++++ src/nuxt.config.ts | 5 + 3 files changed, 293 insertions(+) create mode 100644 src/i18n/locales/bg.json diff --git a/src/i18n/i18n.config.ts b/src/i18n/i18n.config.ts index b3d3c740..462c93aa 100644 --- a/src/i18n/i18n.config.ts +++ b/src/i18n/i18n.config.ts @@ -16,6 +16,7 @@ import bn from './locales/bn.json'; import id from './locales/id.json'; import nl from './locales/nl.json'; import nb from './locales/nb.json'; +import bg from './locales/bg.json'; export default defineI18nConfig(() => ({ legacy: false, @@ -39,5 +40,6 @@ export default defineI18nConfig(() => ({ id, nl, nb, + bg, }, })); diff --git a/src/i18n/locales/bg.json b/src/i18n/locales/bg.json new file mode 100644 index 00000000..bc1dc518 --- /dev/null +++ b/src/i18n/locales/bg.json @@ -0,0 +1,286 @@ +{ + "pages": { + "me": "Профил", + "clients": "Клиенти", + "admin": { + "panel": "Админ Панел", + "general": "Общи", + "config": "Конфигурация", + "interface": "Интерфейс", + "hooks": "Hooks" + } + }, + "user": { + "email": "Имейл" + }, + "me": { + "currentPassword": "Текуща парола", + "enable2fa": "Активирай двуфакторна автентикация", + "enable2faDesc": "Сканирай QR кода с твоето приложение за автентикатор или въведи ключа ръчно.", + "2faKey": "TOTP ключ", + "2faCodeDesc": "Въведи кода от твоето приложение за автентикатор.", + "disable2fa": "Деактивирай двуфакторна автентикация", + "disable2faDesc": "Въведи паролата си, за да деактивираш двуфакторната автентикация." + }, + "general": { + "name": "Име", + "username": "Потребителско име", + "password": "Парола", + "newPassword": "Нова парола", + "updatePassword": "Обнови парола", + "mtu": "MTU", + "allowedIps": "Разрешени IP-та", + "dns": "DNS", + "persistentKeepalive": "Постоянно поддържане на връзката", + "logout": "Изход", + "continue": "Продължи", + "host": "Хост", + "port": "Порт", + "yes": "Да", + "no": "Не", + "confirmPassword": "Потвърди парола", + "loading": "Зареждане...", + "2fa": "Двуфакторна автентикация", + "2faCode": "TOTP код" + }, + "setup": { + "welcome": "Добре дошъл в първоначалната настройка на wg-easy", + "welcomeDesc": "Откри най-лесния начин да инсталираш и управляваш WireGuard на всеки Linux сървър", + "existingSetup": "Имаш ли вече съществуваща инсталация?", + "createAdminDesc": "Моля, първо въведи администраторско потребителско име и силна сигурна парола. Тези данни ще се използват за вход в административния панел.", + "setupConfigDesc": "Моля, въведи хост и порт. Тази информация ще се използва при генериране на клиентски конфигурации за WireGuard.", + "setupMigrationDesc": "Ако желаеш да мигрираш данните от предишна версия на wg-easy, качи резервното копие.", + "upload": "Качи", + "migration": "Възстанови от резервно копие:", + "createAccount": "Създай акаунт", + "successful": "Настройката е успешна", + "hostDesc": "Публично име/адрес, към който клиентите ще се свързват", + "portDesc": "Публичен UDP порт, на който клиентите ще се свързват и на който WireGuard слуша" + }, + "update": { + "updateAvailable": "Налична е актуализация!", + "update": "Актуализирай" + }, + "theme": { + "dark": "Тъмна тема", + "light": "Светла тема", + "system": "Системна тема" + }, + "layout": { + "toggleCharts": "Покажи/скрий графики", + "donate": "Дарение" + }, + "login": { + "signIn": "Вход", + "rememberMe": "Запомни ме", + "rememberMeDesc": "Остани влязъл след затваряне на браузъра", + "insecure": "Не можеш да влезеш през несигурна връзка. Използвай HTTPS.", + "2faRequired": "Изисква се двуфакторна автентикация", + "2faWrong": "Грешен код за двуфакторна автентикация" + }, + "client": { + "empty": "Все още няма клиенти.", + "newShort": "Нов", + "sort": "Сортирай", + "create": "Създай клиент", + "created": "Клиентът е създаден", + "new": "Нов клиент", + "name": "Име", + "expireDate": "Дата на изтичане", + "expireDateDesc": "Дата, след която клиентът ще бъде деактивиран. Празно = постоянен", + "delete": "Изтрий", + "deleteClient": "Изтрий клиент", + "deleteDialog1": "Сигурен ли си, че искаш да изтриеш", + "deleteDialog2": "Това действие е необратимо.", + "enabled": "Активен", + "address": "Адрес", + "serverAllowedIps": "Разрешени IP-та от сървъра", + "otlDesc": "Генерирай кратък еднократен линк", + "permanent": "Постоянно", + "createdOn": "Създаден на ", + "lastSeen": "Последно видян на ", + "totalDownload": "Общо изтеглени: ", + "totalUpload": "Общо качени: ", + "newClient": "Нов клиент", + "disableClient": "Деактивирай клиент", + "enableClient": "Активирай клиент", + "noPrivKey": "Този клиент няма известен частен ключ. Не може да се създаде конфигурация.", + "showQR": "Покажи QR код", + "downloadConfig": "Изтегли конфигурация", + "allowedIpsDesc": "Кои IP-та ще се насочват през VPN (замества глобалната настройка)", + "serverAllowedIpsDesc": "Кои IP-та сървърът ще насочва към клиента", + "mtuDesc": "Задава максималния размер на пакета (MTU) за VPN тунела", + "persistentKeepaliveDesc": "Интервал (в секунди) за изпращане на keep-alive пакети. 0 = изключено", + "hooks": "Hooks", + "hooksDescription": "Hooks работят само с wg-quick", + "hooksLeaveEmpty": "Само за wg-quick. В противен случай остави празно", + "dnsDesc": "DNS сървър, който клиентите ще използват (замества глобалната настройка)", + "notConnected": "Клиентът не е свързан", + "endpoint": "Крайна точка", + "endpointDesc": "IP адресът на клиента, от който е установена WireGuard връзката", + "search": "Търси клиенти...", + "config": "Конфигурация", + "viewConfig": "Прегледай конфигурацията" + }, + "dialog": { + "change": "Промени", + "cancel": "Отказ", + "create": "Създай" + }, + "toast": { + "success": "Успех", + "saved": "Запазено", + "error": "Грешка" + }, + "form": { + "actions": "Действия", + "save": "Запази", + "revert": "Отмени промените", + "sectionGeneral": "Общи", + "sectionAdvanced": "Разширени", + "noItems": "Няма елементи", + "nullNoItems": "Няма елементи. Използва се глобалната конфигурация", + "add": "Добави" + }, + "admin": { + "general": { + "sessionTimeout": "Време на сесията", + "sessionTimeoutDesc": "Продължителност на сесията при „Запомни ме“ (в секунди)", + "metrics": "Метрики", + "metricsPassword": "Парола", + "metricsPasswordDesc": "Bearer парола за достъп до metrics ендпойнт (парола или argon2 хеш)", + "json": "JSON", + "jsonDesc": "Път за метрики в JSON формат", + "prometheus": "Prometheus", + "prometheusDesc": "Път за Prometheus метрики" + }, + "config": { + "connection": "Връзка", + "hostDesc": "Публично име/адрес за клиентите (инвалидира конфигурациите)", + "portDesc": "Публичен UDP порт за клиентите (инвалидира конфигурациите; вероятно искаш да смениш и порта на интерфейса)", + "allowedIpsDesc": "Разрешени IP-та за клиентите (глобална настройка)", + "dnsDesc": "DNS сървър за клиентите (глобална настройка)", + "mtuDesc": "MTU, който ще ползват клиентите (само за нови клиенти)", + "persistentKeepaliveDesc": "Интервал в секунди за keep-alive към сървъра. 0 = изключено (само за нови клиенти)", + "suggest": "Предложи", + "suggestDesc": "Избери IP адрес или хост за полето Host" + }, + "interface": { + "cidrSuccess": "CIDR променен", + "device": "Устройство", + "deviceDesc": "Мрежово устройство, през което да се препраща WireGuard трафикът", + "mtuDesc": "MTU, който ще ползва WireGuard", + "portDesc": "UDP порт, на който слуша WireGuard (вероятно искаш да смениш и порта в Config)", + "changeCidr": "Смени CIDR", + "restart": "Рестартирай интерфейс", + "restartDesc": "Рестартиране на WireGuard интерфейса", + "restartWarn": "Сигурен ли си, че искаш да рестартираш интерфейса? Всички клиенти ще бъдат изключени.", + "restartSuccess": "Интерфейсът е рестартиран" + }, + "introText": "Добре дошъл в административния панел.\n\nТук можеш да управляваш общите настройки, конфигурацията, настройките на интерфейса и hooks.\n\nЗапочни, като избереш някоя от секциите в страничното меню." + }, + "zod": { + "generic": { + "required": "{0} е задължително", + "validNumber": "{0} трябва да е валидно число", + "validString": "{0} трябва да е валиден текст", + "validBoolean": "{0} трябва да е валидна булева стойност", + "validArray": "{0} трябва да е валиден масив", + "stringMin": "{0} трябва да съдържа поне {1} символа", + "numberMin": "{0} трябва да е поне {1}" + }, + "client": { + "id": "ID на клиента", + "name": "Име", + "expiresAt": "Изтича на", + "address4": "IPv4 адрес", + "address6": "IPv6 адрес", + "serverAllowedIps": "Разрешени IP-та от сървъра" + }, + "user": { + "username": "Потребителско име", + "password": "Парола", + "remember": "Запомни", + "name": "Име", + "email": "Имейл", + "emailInvalid": "Имейлът трябва да е валиден", + "passwordMatch": "Паролите трябва да съвпадат", + "totpEnable": "Активиране на TOTP", + "totpEnableTrue": "TOTP Enable трябва да е true", + "totpCode": "TOTP код" + }, + "userConfig": { + "host": "Хост" + }, + "general": { + "sessionTimeout": "Време на сесията", + "metricsEnabled": "Метрики", + "metricsPassword": "Парола за метрики" + }, + "interface": { + "cidr": "CIDR", + "device": "Устройство", + "cidrValid": "CIDR трябва да е валиден" + }, + "otl": "Еднократен линк", + "stringMalformed": "Невалиден формат на низа", + "body": "Тялото трябва да е валиден обект", + "hook": "Hook", + "enabled": "Активиран", + "mtu": "MTU", + "port": "Порт", + "persistentKeepalive": "Постоянно поддържане на връзката", + "address": "IP адрес", + "dns": "DNS", + "allowedIps": "Разрешени IP-та", + "file": "Файл" + }, + "hooks": { + "preUp": "PreUp", + "postUp": "PostUp", + "preDown": "PreDown", + "postDown": "PostDown" + }, + "copy": { + "notSupported": "Копиране не се поддържа", + "copied": "Копирано!", + "failed": "Копирането неуспешно", + "copy": "Копирай" + }, + "awg": { + "jCLabel": "Брой junk пакети (Jc)", + "jCDescription": "Брой junk пакети за изпращане (1–128, препоръчително: 4–12)", + "jMinLabel": "Минимален размер на junk пакети (Jmin)", + "jMinDescription": "Минимален размер на junk пакетите (0–1279*, препоръчително: 8, трябва да е < Jmax)", + "jMaxLabel": "Максимален размер на junk пакети (Jmax)", + "jMaxDescription": "Максимален размер на junk пакетите (1–1280*, препоръчително: 80, трябва да е > Jmin)", + "s1Label": "Размер на junk в init пакета (S1)", + "s1Description": "Размер на junk в init пакета (0–1132 [1280*−148=1132], препоръчително: 15–150, S1+56 ≠ S2)", + "s2Label": "Размер на junk в отговорния пакет (S2)", + "s2Description": "Размер на junk в response пакета (0–1188 [1280*−92=1188], препоръчително: 15–150)", + "s3Label": "Размер на junk в cookie reply пакета (S3)", + "s3Description": "Размер на junk в cookie reply пакета", + "s4Label": "Размер на junk в транспортния пакет (S4)", + "s4Description": "Размер на junk в транспортния пакет", + "i1Label": "Специален junk пакет 1 (I1)", + "i1Description": "Пакет за имитация на протокол в hex формат: ", + "i2Label": "Специален junk пакет 2 (I2)", + "i2Description": "Пакет за имитация на протокол в hex формат: ", + "i3Label": "Специален junk пакет 3 (I3)", + "i3Description": "Пакет за имитация на протокол в hex формат: ", + "i4Label": "Специален junk пакет 4 (I4)", + "i4Description": "Пакет за имитация на протокол в hex формат: ", + "i5Label": "Специален junk пакет 5 (I5)", + "i5Description": "Пакет за имитация на протокол в hex формат: ", + "h1Label": "Init magic header (H1)", + "h1Description": "Стойност на хедера в init пакета (5–2147483647, уникална спрямо H2–H4)", + "h2Label": "Response magic header (H2)", + "h2Description": "Стойност на хедера в response пакета (5–2147483647, уникална спрямо H1, H3, H4)", + "h3Label": "Cookie reply magic header (H3)", + "h3Description": "Стойност на хедера в cookie reply пакета (5–2147483647, уникална спрямо H1, H2, H4)", + "h4Label": "Transport magic header (H4)", + "h4Description": "Стойност на хедера в транспортния пакет (5–2147483647, уникална спрямо H1–H3)", + "mtuNote": "Стойностите зависят от MTU", + "obfuscationParameters": "Параметри за обфускация на AmneziaWG" + } +} diff --git a/src/nuxt.config.ts b/src/nuxt.config.ts index eed44371..0da0c645 100644 --- a/src/nuxt.config.ts +++ b/src/nuxt.config.ts @@ -119,6 +119,11 @@ export default defineNuxtConfig({ language: 'nb-NO', name: 'Norsk bokmål', }, + { + code: 'bg', + language: 'bg-BG', + name: 'Български', + }, ], defaultLocale: 'en', vueI18n: './i18n.config.ts',