diff --git a/apps/admin/.i18nrc.json b/apps/admin/.i18nrc.json index 6157119..415b614 100644 --- a/apps/admin/.i18nrc.json +++ b/apps/admin/.i18nrc.json @@ -9,7 +9,30 @@ "entryLocale": "en-US", "outputLocales": ["zh-CN"] }, - "modelName": "gpt-3.5-turbo", + "modelName": "gpt-4o", "output": "./locales", - "outputLocales": ["en-US", "zh-CN"] + "outputLocales": [ + "en-US", + "cs-CZ", + "de-DE", + "es-ES", + "es-MX", + "fi-FI", + "fr-FR", + "hi-IN", + "hu-HU", + "ja-JP", + "ko-KR", + "no-NO", + "pl-PL", + "pt-BR", + "ro-RO", + "ru-RU", + "th-TH", + "tr-TR", + "uk-UA", + "vi-VN", + "zh-CN", + "zh-TW" + ] } diff --git a/apps/admin/app/layout.tsx b/apps/admin/app/layout.tsx index 1d7dcfd..b59bccd 100644 --- a/apps/admin/app/layout.tsx +++ b/apps/admin/app/layout.tsx @@ -12,6 +12,7 @@ import { unstable_noStore as noStore } from 'next/cache'; import { cookies } from 'next/headers'; import NextTopLoader from 'nextjs-toploader'; import React from 'react'; +import rtlDetect from 'rtl-detect'; export async function generateMetadata(): Promise { noStore(); @@ -81,7 +82,7 @@ export default async function RootLayout({ children }: { children: React.ReactNo } return ( - + diff --git a/apps/admin/config/constants.ts b/apps/admin/config/constants.ts index fa3f488..69f11ad 100644 --- a/apps/admin/config/constants.ts +++ b/apps/admin/config/constants.ts @@ -1,6 +1,29 @@ import { env } from 'next-runtime-env'; -export const locales = ['en-US', 'zh-CN']; +export const locales = [ + 'en-US', + 'cs-CZ', + 'de-DE', + 'es-ES', + 'es-MX', + 'fi-FI', + 'fr-FR', + 'hi-IN', + 'hu-HU', + 'ja-JP', + 'ko-KR', + 'no-NO', + 'pl-PL', + 'pt-BR', + 'ro-RO', + 'ru-RU', + 'th-TH', + 'tr-TR', + 'uk-UA', + 'vi-VN', + 'zh-CN', + 'zh-TW', +]; export const NEXT_PUBLIC_DEFAULT_LANGUAGE = env('NEXT_PUBLIC_DEFAULT_LANGUAGE') || locales[0]; diff --git a/apps/admin/locales/cs-CZ/announcement.json b/apps/admin/locales/cs-CZ/announcement.json new file mode 100644 index 0000000..bccfc24 --- /dev/null +++ b/apps/admin/locales/cs-CZ/announcement.json @@ -0,0 +1,30 @@ +{ + "actions": "akce", + "announcementList": "Seznam oznámení", + "cancel": "Zrušit", + "confirm": "Potvrdit", + "confirmDelete": "Opravdu chcete smazat?", + "content": "Obsah", + "create": "Vytvořit", + "createAnnouncement": "Vytvořit oznámení", + "createSuccess": "Vytvoření úspěšné", + "delete": "smazat", + "deleteDescription": "Jakmile je odstraněno, data nelze obnovit. Prosím, postupujte opatrně.", + "deleteSuccess": "Úspěšně odstraněno", + "edit": "Upravit", + "editAnnouncement": "Upravit oznámení", + "enable": "Povolit", + "form": { + "cancel": "Zrušit", + "confirm": "Potvrdit", + "content": "Obsah", + "contentPlaceholder": "Zadejte obsah oznámení (podporuje Markdown)", + "title": "Název", + "titlePlaceholder": "Zadejte" + }, + "hide": "skrýt", + "show": "Zobrazit", + "title": "Titul", + "updateSuccess": "Aktualizace byla úspěšná", + "updatedAt": "Aktualizováno" +} diff --git a/apps/admin/locales/cs-CZ/auth.json b/apps/admin/locales/cs-CZ/auth.json new file mode 100644 index 0000000..39cf91e --- /dev/null +++ b/apps/admin/locales/cs-CZ/auth.json @@ -0,0 +1,39 @@ +{ + "check": { + "checking": "Ověřování...", + "continue": "Pokračovat", + "description": "Zadejte svůj e-mail pro pokračování v přihlášení nebo registraci.", + "email": "Zadejte platnou e-mailovou adresu.", + "title": "Přihlášení/Registrace", + "whitelist": "Doména e-mailu není na povoleném seznamu." + }, + "login": { + "description": "Zadejte prosím své přihlašovací údaje pro přihlášení.", + "forgotPassword": "Zapomněli jste heslo?", + "success": "Přihlášení bylo úspěšné!", + "switchAccount": "Registrace/Přepnout účet", + "title": "Přihlášení" + }, + "logout": "Odhlásit se", + "orWithEmail": "nebo pomocí e-mailu", + "register": { + "description": "Vytvořte si nový účet, vyplňte své údaje pro registraci.", + "existingAccount": "Již máte účet?", + "get": "Získat", + "invite": "Pozvánkový kód", + "message": "#### Vážený uživateli,\n\nDěkujeme za váš zájem a podporu. V důsledku úpravy provozní strategie jsme uzavřeli registraci nových uživatelů. Během této doby nebude používání stávajících účtů nijak ovlivněno.\n\nSnažíme se vám poskytnout lepší služby a zážitky, a proto během uzavření registrace provedeme komplexní optimalizaci systému a aktualizaci funkcí. V budoucnu vás přivítáme s kvalitnějším obsahem a službami.\n\nSledujte naše webové stránky a sociální média pro nejnovější aktualizace a oznámení. Děkujeme za vaše pochopení a podporu.\n\nPokud máte jakékoli dotazy nebo potřebujete pomoc, neváhejte kontaktovat náš zákaznický servis.\n\n**Ještě jednou děkujeme za vaši podporu a pochopení.**", + "passwordMismatch": "Hesla se neshodují", + "success": "Registrace úspěšná, automaticky přihlášeno!", + "switchToLogin": "Přihlásit se/Obnovit e-mail", + "title": "Registrace" + }, + "reset": { + "description": "Zadejte svou e-mailovou adresu pro obnovení hesla.", + "existingAccount": "Máte již účet?", + "get": "Získat", + "success": "Obnovení hesla bylo úspěšné, automaticky přepnuto na přihlášení!", + "switchToLogin": "Přihlášení/Registrace", + "title": "Obnovení hesla" + }, + "tos": "Podmínky služby" +} diff --git a/apps/admin/locales/cs-CZ/common.json b/apps/admin/locales/cs-CZ/common.json new file mode 100644 index 0000000..3de9c93 --- /dev/null +++ b/apps/admin/locales/cs-CZ/common.json @@ -0,0 +1,60 @@ +{ + "billing": { + "description": "Sponzorství pomáhá PPanelu pokračovat v vydávání aktualizací!", + "title": "Sponzoři" + }, + "empty": [ + "Představte si, že je to tady plné úžasného obsahu! Zatím si to musíte jen představovat…", + "Tato oblast záhadně zmizela, pracujeme na jejím návratu!", + "Ach, nic se nestalo… můžete sem něco přidat sami!", + "Je to jako na koncertě, kde na pódiu nikdo není… co kdybyste šli vystoupit?", + "Našli jste prázdnou zemi zaslíbenou! Nechcete si postavit dům?", + "Zatím je tu prázdno, ale kreativita začíná právě tady!", + "Nic tu není… ale nebojte se, je to jen začátek!", + "Tady bylo připraveno velké překvapení, ale to se vytratilo!", + "Zatím tu nic není, jako když je skříňka s občerstvením prázdná.", + "Tato prázdná plocha čeká na svého hlavního hrdinu!" + ], + "request": { + "10001": "Dotaz zatím nebyl úspěšný, zkuste to prosím později nebo zkontrolujte své podmínky.", + "10002": "Aktualizace nebyla úspěšná, zkuste to prosím později.", + "10003": "Vložení nelze momentálně dokončit, zkuste to prosím později.", + "10004": "Odstranění nebylo možné dokončit, zkuste to prosím později.", + "20001": "Tyto uživatelské informace již existují, zkuste to prosím s jinými informacemi.", + "20002": "Uživatel nebyl nalezen, zkontrolujte prosím informace a zkuste to znovu.", + "20003": "Zadané heslo je nesprávné, zadejte ho prosím znovu.", + "20004": "Tento uživatel byl deaktivován, pokud máte dotazy, kontaktujte zákaznický servis.", + "20005": "Nedostatečný zůstatek, prosím dobijte a zkuste to znovu.", + "20006": "Funkce registrace není momentálně dostupná, zkuste to prosím později.", + "30001": "Tento uzel již existuje, nepřidávejte ho znovu.", + "30002": "Příslušný uzel nebyl nalezen, zkontrolujte a zkuste to znovu.", + "30003": "Skupina již existuje, zkuste použít jiný název.", + "30004": "Skupina nebyla nalezena, zkontrolujte informace a zkuste to znovu.", + "30005": "Ve skupině jsou stále nějaké položky, vyprázdněte ji a zkuste to znovu.", + "400": "Parametry žádosti nejsou správné, zkontrolujte je a odešlete znovu.", + "40002": "Platný token nebyl nalezen, přihlaste se prosím a zkuste to znovu.", + "40003": "Aktuální token je neplatný, získejte nový a zkuste to znovu.", + "40004": "Token vypršel, přihlaste se prosím znovu.", + "40005": "Nemáte oprávnění k přístupu, pokud máte dotazy, kontaktujte správce.", + "401": "Žádáte příliš často, zkuste to prosím později.", + "500": "Server narazil na nějaké problémy, zkuste to prosím později.", + "50001": "Informace o kupónu nebyly nalezeny, zkontrolujte a zkuste to znovu.", + "50002": "Tento kupón již byl použit, nelze ho použít znovu.", + "60001": "Předplatné vypršelo, obnovte ho prosím a použijte znovu.", + "60002": "Toto předplatné nelze momentálně použít, zkuste to prosím později.", + "70001": "Ověřovací kód je nesprávný, zadejte ho prosím znovu.", + "80001": "Úkol nebyl úspěšně přidán do fronty, zkuste to prosím později.", + "90001": "Vypněte prosím režim DEBUG a zkuste to znovu.", + "undefined": "Došlo k chybě systému, zkuste to prosím později." + }, + "table": { + "actions": "Akce", + "asc": "Vzestupně", + "desc": "Sestupně", + "hide": "Skrýt", + "pageInfo": "Strana {current} z {total}", + "rowsPerPage": "Řádků na stránku", + "selectedItems": "Vybráno {total} řádků" + }, + "unlimited": "neomezený" +} diff --git a/apps/admin/locales/cs-CZ/coupon.json b/apps/admin/locales/cs-CZ/coupon.json new file mode 100644 index 0000000..f3e8e99 --- /dev/null +++ b/apps/admin/locales/cs-CZ/coupon.json @@ -0,0 +1,50 @@ +{ + "actions": "akce", + "amount": "Částka", + "cancel": "Zrušit", + "code": "kód", + "confirm": "Potvrdit", + "confirmDelete": "Opravdu chcete smazat?", + "count": "Počet", + "couponList": "Seznam kupónů", + "create": "Vytvořit", + "createCoupon": "Vytvořit kupón", + "createSuccess": "Vytvoření úspěšné", + "delete": "smazat", + "deleteSuccess": "Úspěšně odstraněno", + "deleteWarning": "Jakmile je odstraněno, data nelze obnovit. Prosím, postupujte opatrně.", + "discount": "sleva", + "edit": "Upravit", + "editCoupon": "Upravit kupón", + "enable": "Povolit", + "form": { + "amountDiscount": "Sleva na částku", + "cancel": "Zrušit", + "confirm": "Potvrdit", + "count": "Maximální počet použití", + "countPlaceholder": "Maximální počet použití (ponechte prázdné pro neomezeně)", + "customCouponCode": "Vlastní kód kupónu", + "customCouponCodePlaceholder": "Vlastní kód kupónu (ponechte prázdné pro automatické generování)", + "enterCouponName": "Zadejte název kupónu", + "enterValue": "Zadejte hodnotu", + "expireTime": "Doba platnosti", + "name": "Název", + "percentageDiscount": "Procentuální sleva", + "selectServer": "Vyberte předplatné", + "selectTime": "Vyberte čas", + "specifiedServer": "Určené předplatné", + "startTime": "Čas začátku", + "type": "Typ kupónu", + "userLimit": "Maximální počet použití na uživatele", + "userLimitPlaceholder": "Maximální počet použití na uživatele (ponechte prázdné pro neomezeně)" + }, + "name": "Název", + "percentage": "procento", + "remainingTimes": "Zbývající", + "subscribe": "Předplatit", + "type": "Typ", + "unlimited": "neomezený", + "updateSuccess": "Aktualizace byla úspěšná", + "usedTimes": "Použití", + "validityPeriod": "Doba platnosti" +} diff --git a/apps/admin/locales/cs-CZ/document.json b/apps/admin/locales/cs-CZ/document.json new file mode 100644 index 0000000..56addbc --- /dev/null +++ b/apps/admin/locales/cs-CZ/document.json @@ -0,0 +1,29 @@ +{ + "DocumentList": "Seznam dokumentů", + "actions": "Akce", + "cancel": "Zrušit", + "confirm": "Potvrdit", + "confirmDelete": "Opravdu chcete smazat?", + "create": "Vytvořit", + "createDocument": "Vytvořit dokument", + "createSuccess": "Vytvoření úspěšné", + "delete": "smazat", + "deleteDescription": "Jakmile je odstraněno, data nelze obnovit. Prosím, postupujte opatrně.", + "deleteSuccess": "Úspěšně odstraněno", + "edit": "Upravit", + "editDocument": "Upravit dokument", + "form": { + "cancel": "Zrušit", + "confirm": "Potvrdit", + "content": "Obsah", + "tags": "Kategorie", + "tagsPlaceholder": "Pro zadání více kategorií použijte klávesu Enter nebo čárku (,).", + "title": "Název", + "titlePlaceholder": "Prosím zadejte" + }, + "show": "Zobrazit", + "tags": "Kategorie", + "title": "Titul", + "updateSuccess": "Aktualizace byla úspěšná", + "updatedAt": "Aktualizováno" +} diff --git a/apps/admin/locales/cs-CZ/index.json b/apps/admin/locales/cs-CZ/index.json new file mode 100644 index 0000000..907aa6b --- /dev/null +++ b/apps/admin/locales/cs-CZ/index.json @@ -0,0 +1,29 @@ +{ + "email": "e-mail", + "month": "Tento měsíc", + "monthDownloadTraffic": "Měsíční objem stažených dat", + "monthUploadTraffic": "Tento měsíc nahraný provoz", + "newPurchase": "Nový nákup", + "nodeTraffic": "Provoz uzlu", + "nodes": "uzly", + "offlineNodeCount": "Počet offline uzlů", + "onlineIPCount": "Počet online IP", + "onlineNodeCount": "Počet online uzlů", + "pendingTickets": "Čekající lístky", + "register": "Registrovat se", + "repurchase": "opětovný nákup", + "revenueTitle": "Statistika příjmů", + "selectTypePlaceholder": "Vyberte typ", + "statisticsTitle": "Statistiky", + "today": "Dnes", + "todayDownloadTraffic": "Dnešní stahovací provoz", + "todayUploadTraffic": "Dnešní nahraný provoz", + "total": "Celkem", + "totalIncome": "Celkový příjem", + "trafficRank": "Pořadí návštěvnosti", + "type": "Typ", + "userTitle": "Statistiky uživatele", + "userTraffic": "Uživatelský provoz", + "users": "uživatelé", + "yesterday": "včera" +} diff --git a/apps/admin/locales/cs-CZ/language.json b/apps/admin/locales/cs-CZ/language.json new file mode 100644 index 0000000..584f50c --- /dev/null +++ b/apps/admin/locales/cs-CZ/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "čeština", + "de-DE": "němčina", + "en-US": "angličtina", + "es-ES": "španělština", + "es-MX": "španělština (Mexiko)", + "fi-FI": "finština", + "fr-FR": "Francouzština", + "hi-IN": "hindština", + "hu-HU": "maďarština", + "ja-JP": "Japonština", + "ko-KR": "Korejština", + "no-NO": "norština", + "pl-PL": "polština", + "pt-BR": "portugalština (Brazílie)", + "ro-RO": "rumunština", + "ru-RU": "ruština", + "th-TH": "thajština", + "tr-TR": "turečtina", + "uk-UA": "Ukrajinština", + "vi-VN": "Vietnamština", + "zh-CN": "čeština (CS)", + "zh-TW": "čínština (tradiční)" +} diff --git a/apps/admin/locales/cs-CZ/menu.json b/apps/admin/locales/cs-CZ/menu.json new file mode 100644 index 0000000..01d0b62 --- /dev/null +++ b/apps/admin/locales/cs-CZ/menu.json @@ -0,0 +1,18 @@ +{ + "Announcement Management": "Správa oznámení", + "Coupon Management": "Správa kupónů", + "Dashboard": "Přístrojová deska", + "Document Management": "Správa dokumentů", + "Finance": "Finance", + "Order Management": "Správa objednávek", + "Payment Config": "Konfigurace platby", + "Server": "Server", + "Server Management": "Správa serveru", + "Settings": "Nastavení", + "Subscribe Management": "Správa předplatného", + "System Config": "Systémová konfigurace", + "System Tool": "Systémový nástroj", + "Ticket Management": "Správa lístků", + "User": "Uživatel", + "User Management": "Správa uživatelů" +} diff --git a/apps/admin/locales/cs-CZ/order.json b/apps/admin/locales/cs-CZ/order.json new file mode 100644 index 0000000..ec0be5b --- /dev/null +++ b/apps/admin/locales/cs-CZ/order.json @@ -0,0 +1,37 @@ +{ + "amount": "Částka", + "couponDiscount": "Sleva na kupón", + "discount": "Sleva", + "failed": "selhání", + "feeAmount": "Poplatek", + "method": "Platební metoda", + "methods": { + "alipay_f2f": "Alipay (tváří v tvář)", + "balance": "Zůstatek", + "epay": "Epay", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "orderNumber": "Číslo objednávky", + "status": { + "0": "Stav", + "1": "Čeká na platbu", + "2": "Zaplaceno", + "3": "Zrušeno", + "4": "Uzavřeno", + "5": "Dokončeno" + }, + "subscribe": "Předplatit", + "subscribePrice": "Cena předplatného", + "total": "Celkem", + "tradeNo": "Číslo transakce", + "type": { + "0": "Typ", + "1": "Nový nákup", + "2": "Obnovení", + "3": "Resetování dat", + "4": "Dobití" + }, + "updateTime": "Aktualizace času", + "user": "uživatel" +} diff --git a/apps/admin/locales/cs-CZ/payment.json b/apps/admin/locales/cs-CZ/payment.json new file mode 100644 index 0000000..dd8ae1a --- /dev/null +++ b/apps/admin/locales/cs-CZ/payment.json @@ -0,0 +1,44 @@ +{ + "aliPay": "Platba Alipay", + "alipayf2f": { + "appId": "ID aplikace Alipay", + "invoiceName": "Název vlastního produktu", + "invoiceNameDescription": "Bude zobrazeno na faktuře Alipay", + "privateKey": "Soukromý klíč Alipay", + "publicKey": "Veřejný klíč Alipay", + "sandbox": "Režim sandbox", + "sandboxDescription": "Povolte režim sandbox pro testování plateb" + }, + "enable": "Povolit", + "enableDescription": "Povolit tento způsob platby", + "epay": { + "key": "KLÍČ", + "pid": "PID", + "url": "URL" + }, + "feeMode": "Způsob účtování", + "feeModeDescription": "Způsob účtování dodatečných poplatků", + "feeModeItems": ["Bez poplatku", "Procento", "Pevná částka", "Obojí výše uvedené"], + "feePercent": "Procentuální poplatek (volitelně)", + "feePercentDescription": "Přidání poplatku k částce objednávky", + "fixedFee": "Pevný poplatek (volitelný)", + "fixedFeeDescription": "Přidání pevného poplatku k částce objednávky", + "iconUrl": "URL ikony (volitelné)", + "iconUrlDescription": "Používá se pro zobrazení na frontendu", + "inputPlaceholder": "Prosím zadejte", + "key": "KLÍČ", + "notifyUrl": "Vlastní oznámení URL (volitelné)", + "notifyUrlDescription": "Oznámení brány budou odeslána na tuto doménu", + "payForRecommendations": "Zaplatit za doporučení", + "pid": "PID", + "saveSuccess": "Uložení bylo úspěšné", + "showName": "Zobrazit název", + "showNameDescription": "Používá se pro zobrazení na frontendu", + "stripe": { + "publicKey": "VEŘEJNÝ KLÍČ", + "secretKey": "TAJNÝ KLÍČ", + "webhookSecret": "PODPIS WEBHOOK KLÍČE" + }, + "url": "URL", + "wechatPay": "WeChat Pay" +} diff --git a/apps/admin/locales/cs-CZ/server.json b/apps/admin/locales/cs-CZ/server.json new file mode 100644 index 0000000..c947806 --- /dev/null +++ b/apps/admin/locales/cs-CZ/server.json @@ -0,0 +1,122 @@ +{ + "group": { + "actions": "Akce", + "cancel": "Zrušit", + "confirm": "Potvrdit", + "confirmDelete": "Opravdu chcete smazat?", + "create": "Vytvořit", + "createNodeGroup": "Vytvořit skupinu uzlů", + "createdSuccessfully": "Úspěšně vytvořeno", + "delete": "Smazat", + "deleteWarning": "Po smazání nebude možné data obnovit, prosím, buďte opatrní.", + "deletedSuccessfully": "Úspěšně smazáno", + "description": "Popis", + "edit": "Upravit", + "editNodeGroup": "Upravit skupinu uzlů", + "form": { + "cancel": "Zrušit", + "confirm": "Potvrdit", + "description": "Popis", + "name": "Název" + }, + "name": "Název", + "title": "Seznam skupin uzlů", + "updatedAt": "Aktualizováno" + }, + "node": { + "abnormal": "Abnormální", + "actions": "Akce", + "address": "Adresa", + "all": "Vše", + "cancel": "Zrušit", + "confirm": "Potvrdit", + "confirmDelete": "Opravdu chcete smazat?", + "create": "Vytvořit", + "createNode": "Vytvořit uzel", + "createSuccess": "Úspěšně vytvořeno", + "delete": "Smazat", + "deleteSuccess": "Úspěšně smazáno", + "deleteWarning": "Po smazání nebude možné data obnovit. Prosím, buďte opatrní.", + "disk": "Disk", + "edit": "Upravit", + "editNode": "Upravit uzel", + "enable": "Povolit", + "form": { + "allowInsecure": "Povolit nezabezpečené", + "cancel": "Zrušit", + "confirm": "Potvrdit", + "edit": "Upravit", + "editSecurity": "Upravit nastavení zabezpečení", + "enableRelay": "Povolit přenos", + "enableTLS": "Povolit TLS", + "encryptionMethod": "Metoda šifrování", + "flow": "Algoritmus řízení toku", + "hopInterval": "Interval skoků", + "hopPorts": "Porty skoků", + "hopPortsPlaceholder": "Více portů oddělených čárkou", + "name": "Název", + "nodeGroupId": "ID skupiny uzlů", + "obfsPassword": "Heslo pro zmatení", + "obfsPasswordPlaceholder": "Nechte prázdné, pokud nechcete zmást", + "path": "Cesta", + "pleaseSelect": "Prosím vyberte", + "port": "Port služby", + "protocol": "Protokol", + "relayHost": "Adresa přenosu", + "relayPort": "Port přenosu", + "remarks": "Poznámky", + "security": "Zabezpečení", + "securityConfig": "Nastavení zabezpečení", + "security_config": { + "fingerprint": "FingerPrint", + "privateKey": "Soukromý klíč", + "privateKeyPlaceholder": "Nechte prázdné pro automatické generování", + "publicKey": "Veřejný klíč", + "publicKeyPlaceholder": "Nechte prázdné pro automatické generování", + "serverAddress": "Adresa serveru", + "serverAddressPlaceholder": "Cílová adresa REALITY, výchozí je SNI", + "serverName": "Název serveru (SNI)", + "serverNamePlaceholder": "REALITY je povinné, musí být shodné s backendem", + "serverPort": "Port serveru", + "serverPortPlaceholder": "Cílový port REALITY, výchozí 443", + "shortId": "ShortId", + "shortIdPlaceholder": "Nechte prázdné pro automatické generování", + "sni": "Indikace názvu serveru (SNI)" + }, + "selectEncryptionMethod": "Vyberte metodu šifrování", + "selectNodeGroup": "Vyberte skupinu uzlů", + "selectProtocol": "Vyberte protokol", + "serverAddr": "Adresa serveru", + "serverName": "Název služby", + "speedLimit": "Omezení rychlosti", + "speedLimitPlaceholder": "Bez omezení", + "trafficRatio": "Poměr provozu", + "transport": "Přenosový protokol", + "transportConfig": "Nastavení přenosového protokolu", + "transportHost": "Adresa přenosové služby", + "transportPath": "Cesta přenosu", + "transportServerName": "Název přenosové služby" + }, + "lastUpdated": "Poslední aktualizace", + "memory": "Paměť", + "name": "Název", + "node": "Uzel", + "nodeGroup": "Skupina uzlů", + "normal": "Normální", + "onlineCount": "Počet online", + "onlineUsers": "Online uživatelé", + "rate": "Rychlost", + "relay": "Přenos", + "serverAddr": "Adresa serveru", + "speedLimit": "Omezení rychlosti", + "status": "Stav", + "trafficRatio": "Poměr provozu", + "type": "Typ", + "updateSuccess": "Úspěšně aktualizováno", + "updatedAt": "Čas aktualizace" + }, + "tabs": { + "node": "Uzlu", + "nodeGroup": "Skupina uzlů" + } +} diff --git a/apps/admin/locales/cs-CZ/subscribe.json b/apps/admin/locales/cs-CZ/subscribe.json new file mode 100644 index 0000000..4187649 --- /dev/null +++ b/apps/admin/locales/cs-CZ/subscribe.json @@ -0,0 +1,79 @@ +{ + "actions": "akce", + "cancel": "Zrušit", + "confirm": "Potvrdit", + "confirmDelete": "Opravdu chcete smazat?", + "create": "Vytvořit", + "createSubscribe": "Vytvořit odběr", + "createSuccess": "Vytvoření úspěšné", + "delete": "smazat", + "deleteSuccess": "Úspěšně odstraněno", + "deleteWarning": "Po odstranění nelze data obnovit, prosím, postupujte opatrně.", + "deviceLimit": "Počet zařízení/ks", + "edit": "Upravit", + "editSubscribe": "Upravit odběr", + "form": { + "cancel": "Zrušit", + "confirm": "Potvrdit", + "description": "Popis", + "deviceLimit": "Omezení zařízení", + "discount": "Sleva", + "discountDescription": "Nastavit slevu na základě jednotkové ceny", + "discountMonths": "Měsíce", + "discountPercent": "Procento slevy", + "discount_price": "Cena po slevě", + "duration": "Doba trvání (měsíce)", + "inventory": "Sklad", + "name": "Název", + "noLimit": "Bez omezení", + "quota": "Limit nákupu", + "replacement": "Cena za reset (za každý)", + "selectSubscribeGroup": "Vyberte prosím skupinu předplatného", + "server": "Server", + "serverGroup": "Skupina serverů", + "speedLimit": "Omezení rychlosti (Mbps)", + "subscribeGroup": "Skupina předplatného", + "traffic": "Přenos dat", + "unit_price": "Cena za měsíc" + }, + "group": { + "actions": "Akce", + "cancel": "Zrušit", + "confirm": "Potvrdit", + "confirmDelete": "Opravdu chcete smazat?", + "create": "Vytvořit", + "createSubscribeGroup": "Vytvořit novou skupinu odběrů", + "createSuccess": "Úspěšně vytvořeno", + "delete": "Smazat", + "deleteSuccess": "Úspěšně smazáno", + "deleteWarning": "Po smazání nelze data obnovit, prosím postupujte opatrně.", + "description": "Popis", + "edit": "Upravit", + "editSubscribeGroup": "Upravit skupinu odběrů", + "form": { + "cancel": "Zrušit", + "confirm": "Potvrdit", + "description": "Popis", + "name": "Název" + }, + "name": "Název", + "title": "Seznam skupin odběrů", + "updateSuccess": "Úspěšně aktualizováno", + "updatedAt": "Čas aktualizace" + }, + "inventory": "inventář", + "name": "název", + "quota": "Limit na nákup/čas", + "replacement": "Obnovení ceny/krát", + "sell": "Prodej", + "show": "Zobrazit na hlavní stránce", + "subscribe": "Předplatit", + "subscribeGroup": "Přihlásit se ke skupině", + "tabs": { + "subscribe": "Předplatit", + "subscribeGroup": "Skupina předplatných" + }, + "traffic": "provoz", + "unitPrice": "Cena/měsíc", + "updateSuccess": "Aktualizace byla úspěšná" +} diff --git a/apps/admin/locales/cs-CZ/system.json b/apps/admin/locales/cs-CZ/system.json new file mode 100644 index 0000000..543922d --- /dev/null +++ b/apps/admin/locales/cs-CZ/system.json @@ -0,0 +1,156 @@ +{ + "currency": { + "accessKey": "Klíč", + "accessKeyDescription": "https://exchangerate.host poskytuje zdarma klíč k API směnných kurzů", + "currencySymbol": "Symbol měny", + "currencySymbolDescription": "Pouze pro zobrazení, po změně se změní všechny měnové jednotky v systému", + "currencyUnit": "Měnová jednotka", + "currencyUnitDescription": "Pouze pro zobrazení, po změně se změní všechny měnové jednotky v systému", + "saveSuccess": "Úspěšně uloženo" + }, + "email": { + "expiration_email_template": "Šablona oznámení o vypršení platnosti", + "expiration_email_templateDescription": "Proměnné {after}.názevProměnné{before} v šabloně budou nahrazeny skutečnými daty, ujistěte se, že tyto proměnné zachováte.", + "inputPlaceholder": "Zadejte obsah...", + "maintenance_email_template": "Šablona oznámení o údržbě", + "maintenance_email_templateDescription": "Proměnné {after}.názevProměnné{before} v šabloně budou nahrazeny skutečnými daty, ujistěte se, že tyto proměnné zachováte.", + "saveSuccess": "Konfigurace byla úspěšně uložena.", + "sendFailure": "Odeslání testovacího e-mailu selhalo, zkontrolujte konfiguraci.", + "sendSuccess": "Testovací e-mail byl úspěšně odeslán.", + "sendTestEmail": "Odeslat testovací e-mail", + "sendTestEmailDescription": "Odešlete testovací e-mail pro ověření správnosti konfigurace.", + "senderAddress": "Adresa odesílatele", + "senderAddressDescription": "Výchozí e-mailová adresa použitá k odesílání e-mailů.", + "smtpAccount": "Účet SMTP", + "smtpAccountDescription": "E-mailový účet pro ověření identity.", + "smtpEncryptionMethod": "Metoda šifrování SMTP", + "smtpEncryptionMethodDescription": "Vyberte, zda povolit šifrování SSL/TLS.", + "smtpPassword": "Heslo SMTP", + "smtpPasswordDescription": "Heslo k účtu SMTP.", + "smtpServerAddress": "Adresa serveru SMTP", + "smtpServerAddressDescription": "Zadejte adresu serveru pro odesílání e-mailů.", + "smtpServerPort": "Port serveru SMTP", + "smtpServerPortDescription": "Zadejte číslo portu pro připojení k serveru SMTP.", + "verify_email_template": "Šablona ověřovacího e-mailu", + "verify_email_templateDescription": "Proměnné {after}.názevProměnné{before} v šabloně budou nahrazeny skutečnými daty, ujistěte se, že tyto proměnné zachováte." + }, + "invite": { + "commissionFirstTimeOnly": "Provize pouze při prvním nákupu", + "commissionFirstTimeOnlyDescription": "Po aktivaci se provize generuje pouze při první platbě pozvaného uživatele. Můžete konfigurovat jednotlivé uživatele ve správě uživatelů.", + "enableForcedInvite": "Povolit povinné pozvání", + "enableForcedInviteDescription": "Po aktivaci se mohou registrovat pouze pozvaní uživatelé.", + "inputPlaceholder": "Prosím zadejte", + "inviteCommissionPercentage": "Procento provize za pozvání", + "inviteCommissionPercentageDescription": "Výchozí globální procento rozdělení provize, můžete konfigurovat jednotlivé procento ve správě uživatelů.", + "saveSuccess": "Úspěšně uloženo" + }, + "node": { + "communicationKey": "Komunikační klíč", + "communicationKeyDescription": "Klíč pro komunikaci uzlu, aby se zajistilo, že data nebudou zachycena jinými osobami", + "inputPlaceholder": "Prosím zadejte", + "nodePullInterval": "Interval stahování uzlu", + "nodePullIntervalDescription": "Frekvence, s jakou uzel získává data z panelu (v sekundách)", + "nodePushInterval": "Interval odesílání uzlu", + "nodePushIntervalDescription": "Frekvence, s jakou uzel odesílá data do panelu", + "saveSuccess": "Úspěšně uloženo" + }, + "register": { + "emailSuffixWhitelist": "Seznam povolených přípon e-mailů", + "emailSuffixWhitelistDescription": "Po aktivaci se mohou registrovat pouze e-maily s příponami uvedenými v seznamu", + "emailVerification": "Ověření e-mailu", + "emailVerificationDescription": "Po aktivaci budou uživatelé muset ověřit svůj e-mail", + "ipRegistrationLimit": "Omezení registrace podle IP", + "ipRegistrationLimitDescription": "Po aktivaci budou IP adresy, které splňují pravidla, omezeny v registraci. Upozorňujeme, že kvůli CDN nebo front-end proxy může dojít k problémům s určením IP adresy", + "penaltyTime": "Doba trestu (minuty)", + "penaltyTimeDescription": "Uživatelé musí počkat, až uplyne doba trestu, než se budou moci znovu registrovat", + "registrationLimitCount": "Počet omezení registrace", + "registrationLimitCountDescription": "Po dosažení limitu registrace se aktivuje trest", + "saveSuccess": "Úspěšně uloženo", + "stopNewUserRegistration": "Zastavit registraci nových uživatelů", + "stopNewUserRegistrationDescription": "Po aktivaci se nikdo nebude moci registrovat", + "trialRegistration": "Zkušební registrace", + "trialRegistrationDescription": "Aktivujte zkušební registraci, nejprve upravte zkušební balíček a dobu trvání", + "whitelistSuffixes": "Povolené přípony", + "whitelistSuffixesDescription": "Používá se pro ověření e-mailu při registraci, jedna přípona na řádek", + "whitelistSuffixesPlaceholder": "Zadejte přípony e-mailů, jednu na řádek" + }, + "site": { + "logo": "LOGO", + "logoDescription": "Používá se k zobrazení místa, kde je potřeba zobrazit LOGO", + "logoPlaceholder": "Zadejte URL adresu LOGA, nekončete '/'", + "saveSuccess": "Uložení bylo úspěšné", + "siteDesc": "Popis webu", + "siteDescDescription": "Používá se k zobrazení místa, kde je potřeba zobrazit popis webu", + "siteDescPlaceholder": "Zadejte popis webu", + "siteDomain": "Doména webu", + "siteDomainDescription": "Aktuální adresa domény webu, například pro použití v e-mailech", + "siteDomainPlaceholder": "Zadejte adresu domény, pro více domén použijte jeden řádek pro každou", + "siteName": "Název webu", + "siteNameDescription": "Používá se k zobrazení místa, kde je potřeba zobrazit název webu", + "siteNamePlaceholder": "Zadejte název webu" + }, + "subscription": { + "add": "Přidat", + "app": "Aplikace", + "appDescription": "Nastavte adresu pro stažení aplikace a pravidla importu, nezapomeňte po úpravách uložit", + "appDownloadURL": "Adresa pro stažení aplikace", + "appIcon": "Ikona aplikace", + "appName": "Název aplikace", + "delete": "Smazat", + "reset": "Resetovat", + "save": "Uložit", + "saveSuccess": "Úspěšně uloženo", + "singleSubscriptionMode": "Režim jednorázového předplatného", + "singleSubscriptionModeDescription": "Po aktivaci se všechny uživatelské balíčky převedou na zůstatek", + "subscriptionDomain": "Doména předplatného", + "subscriptionDomainDescription": "Používá se pro předplatné, pokud je prázdné, použije se doména webu", + "subscriptionDomainPlaceholder": "Zadejte doménu předplatného, pro více domén použijte jeden řádek pro každou", + "subscriptionPath": "Cesta předplatného", + "subscriptionPathDescription": "Používá se pro předplatné, po úpravě je nutné restartovat systém pro zajištění nejlepšího výkonu", + "subscriptionPathPlaceholder": "Zadejte", + "subscriptionProtocol": "Protokol předplatného", + "wildcardResolution": "Řešení zástupných znaků", + "wildcardResolutionDescription": "Používá se pro předplatné" + }, + "tabs": { + "currency": "Měna", + "email": "E-mail", + "invite": "Pozvat", + "node": "Uzlový bod", + "register": "Registrace", + "site": "Stránka", + "subscription": "Předplatné", + "telegram": "Telegram", + "tos": "Podmínky služby", + "verify": "Ověřit" + }, + "telegram": { + "botToken": "Token robota", + "botTokenDescription": "Zadejte token poskytnutý Botfatherem", + "enableBotNotifications": "Povolit oznámení robota", + "enableBotNotificationsDescription": "Po povolení bude robot posílat základní oznámení správcům a uživatelům propojeným s Telegramem", + "groupURL": "URL skupiny", + "groupURLDescription": "Po vyplnění se zobrazí na uživatelské straně nebo tam, kde je potřeba", + "inputPlaceholderBotToken": "0000000000:xxxxxxxxx_xxxxxxxxxxxxxxx", + "inputPlaceholderGroupURL": "https://t.me/xxxxxx", + "saveSuccess": "Úspěšně uloženo" + }, + "tos": { + "saveSuccess": "Uložení bylo úspěšné", + "title": "Podmínky služby" + }, + "verify": { + "inputPlaceholder": "Prosím zadejte", + "loginVerificationCode": "Ověřovací kód pro přihlášení", + "loginVerificationCodeDescription": "Ověření člověka při přihlášení", + "registrationVerificationCode": "Ověřovací kód pro registraci", + "registrationVerificationCodeDescription": "Ověření člověka při registraci", + "resetPasswordVerificationCode": "Ověřovací kód pro resetování hesla", + "resetPasswordVerificationCodeDescription": "Ověření člověka při resetování hesla", + "saveSuccess": "Úspěšně uloženo", + "turnstileSecret": "Turnstile tajný klíč", + "turnstileSecretDescription": "Turnstile tajný klíč poskytovaný Cloudflare", + "turnstileSiteKey": "Turnstile klíč webu", + "turnstileSiteKeyDescription": "Turnstile klíč webu poskytovaný Cloudflare" + } +} diff --git a/apps/admin/locales/cs-CZ/ticket.json b/apps/admin/locales/cs-CZ/ticket.json new file mode 100644 index 0000000..ec55f11 --- /dev/null +++ b/apps/admin/locales/cs-CZ/ticket.json @@ -0,0 +1,19 @@ +{ + "actions": "akce", + "cancel": "Zrušit", + "check": "Zkontrolovat", + "close": "zavřít", + "closeSuccess": "Úspěšně zavřeno", + "closeWarning": "Jakmile je uzavřeno, nebude možné s tímto pracovním příkazem manipulovat. Prosím, postupujte opatrně.", + "confirm": "Potvrdit", + "confirmClose": "Opravdu chcete zavřít?", + "createdAt": "Datum vytvoření", + "inputPlaceholder": "Zadejte svůj dotaz, odpovíme co nejdříve.", + "open": "Otevřít", + "reply": "odpověď", + "status": ["Stav", "Čeká na sledování", "Čeká na odpověď", "Zpracováno", "Uzavřeno"], + "ticketList": "Seznam tiketů", + "title": "Titul", + "updatedAt": "Aktualizováno", + "user": "uživatel" +} diff --git a/apps/admin/locales/cs-CZ/tool.json b/apps/admin/locales/cs-CZ/tool.json new file mode 100644 index 0000000..8af8593 --- /dev/null +++ b/apps/admin/locales/cs-CZ/tool.json @@ -0,0 +1,26 @@ +{ + "caller": "Volající", + "cancel": "Zrušit", + "confirmReboot": "Potvrdit restart", + "confirmSystemReboot": "Potvrdit restart systému", + "confirmSystemUpgrade": "Potvrdit aktualizaci systému", + "confirmUpgrade": "Potvrdit aktualizaci", + "currentVersion": "Aktuální verze systému:", + "errors": "Chyby", + "ip": "IP", + "lastUpdated": "Poslední aktualizace:", + "none": "Žádný", + "query": "Dotaz", + "rebootDescription": "Opravdu chcete restartovat systém? Tato akce způsobí krátké přerušení služby.", + "rebooting": "Systém se restartuje...", + "refreshLogs": "Obnovit protokoly", + "request": "Žádost", + "status": "Stav", + "systemLogs": "Systémové protokoly", + "systemReboot": "Restart systému", + "systemServices": "Systémové služby", + "systemUpgrade": "Aktualizace systému", + "upgradeDescription": "Jste si jisti, že chcete provést aktualizaci systému? Tato operace může trvat několik minut a během ní může být systém neodpovídající.", + "userAgent": "Uživatelský agent", + "viewLogsAndManage": "Zobrazit systémové protokoly, provádět aktualizace systému a restartovat operace" +} diff --git a/apps/admin/locales/cs-CZ/user.json b/apps/admin/locales/cs-CZ/user.json new file mode 100644 index 0000000..64fdb34 --- /dev/null +++ b/apps/admin/locales/cs-CZ/user.json @@ -0,0 +1,38 @@ +{ + "actions": "akce", + "balance": "Zůstatek", + "cancel": "zrušit", + "confirm": "Potvrdit", + "confirmDelete": "Opravdu chcete smazat?", + "create": "Vytvořit", + "createSuccess": "Vytvoření úspěšné", + "createUser": "Vytvořit uživatele", + "createdAt": "Datum registrace", + "delete": "smazat", + "deleteDescription": "Po odstranění nelze data obnovit, prosím, postupujte opatrně.", + "deleteSuccess": "Úspěšně odstraněno", + "edit": "Upravit", + "editUser": "Upravit uživatele", + "email": "e-mail", + "enable": "Povolit", + "form": { + "balance": "Zůstatek", + "balancePlaceholder": "Zůstatek", + "cancel": "Zrušit", + "confirm": "Potvrdit", + "invalidEmailFormat": "Neplatný formát e-mailu", + "inviteCode": "Pozvánkový kód", + "inviteCodePlaceholder": "Zadejte pozvánkový kód (ponechte prázdné pro automatické generování)", + "manager": "Správce", + "password": "Heslo", + "passwordPlaceholder": "Zadejte nové heslo (může zůstat prázdné)", + "refererId": "ID doporučitele", + "refererIdPlaceholder": "Zadejte ID doporučitele", + "userEmail": "E-mail uživatele", + "userEmailPlaceholder": "Zadejte e-mail uživatele" + }, + "referer": "Doporučitel", + "updateSuccess": "Aktualizace byla úspěšná", + "userList": "Seznam uživatelů", + "userName": "Uživatelský e-mail" +} diff --git a/apps/admin/locales/de-DE/announcement.json b/apps/admin/locales/de-DE/announcement.json new file mode 100644 index 0000000..407ba6c --- /dev/null +++ b/apps/admin/locales/de-DE/announcement.json @@ -0,0 +1,30 @@ +{ + "actions": "Aktionen", + "announcementList": "Ankündigungsliste", + "cancel": "Abbrechen", + "confirm": "Bestätigen", + "confirmDelete": "Sind Sie sicher, dass Sie löschen möchten?", + "content": "Inhalt", + "create": "Erstellen", + "createAnnouncement": "Ankündigung erstellen", + "createSuccess": "Erstellung erfolgreich", + "delete": "Löschen", + "deleteDescription": "Sobald gelöscht, können die Daten nicht wiederhergestellt werden. Bitte gehen Sie vorsichtig vor.", + "deleteSuccess": "Erfolgreich gelöscht", + "edit": "Bearbeiten", + "editAnnouncement": "Ankündigung bearbeiten", + "enable": "Aktivieren", + "form": { + "cancel": "Abbrechen", + "confirm": "Bestätigen", + "content": "Inhalt", + "contentPlaceholder": "Bitte geben Sie den Ankündigungsinhalt ein (Markdown unterstützt)", + "title": "Titel", + "titlePlaceholder": "Bitte eingeben" + }, + "hide": "Verbergen", + "show": "Anzeigen", + "title": "Titel", + "updateSuccess": "Aktualisierung erfolgreich", + "updatedAt": "Aktualisierungszeitpunkt" +} diff --git a/apps/admin/locales/de-DE/auth.json b/apps/admin/locales/de-DE/auth.json new file mode 100644 index 0000000..1713f7a --- /dev/null +++ b/apps/admin/locales/de-DE/auth.json @@ -0,0 +1,39 @@ +{ + "check": { + "checking": "Wird überprüft...", + "continue": "Fortfahren", + "description": "Bitte geben Sie Ihre E-Mail-Adresse ein, um sich anzumelden oder zu registrieren.", + "email": "Bitte geben Sie eine gültige E-Mail-Adresse ein.", + "title": "Anmelden/Registrieren", + "whitelist": "Die E-Mail-Domain befindet sich nicht auf der zugelassenen Whitelist." + }, + "login": { + "description": "Bitte geben Sie Ihre Kontoinformationen ein, um sich anzumelden.", + "forgotPassword": "Passwort vergessen?", + "success": "Erfolgreich eingeloggt!", + "switchAccount": "Registrieren/Konto wechseln", + "title": "Anmeldung" + }, + "logout": "Abmelden", + "orWithEmail": "oder mit E-Mail", + "register": { + "description": "Erstellen Sie ein neues Konto, indem Sie Ihre Informationen ausfüllen, um sich zu registrieren.", + "existingAccount": "Bereits ein Konto?", + "get": "Erhalten", + "invite": "Einladungscode", + "message": "#### Sehr geehrter Nutzer,\n\nVielen Dank für Ihr Interesse und Ihre Unterstützung. Aufgrund einer Anpassung unserer Betriebsstrategie haben wir die Registrierung für neue Nutzer geschlossen. Während dieser Zeit wird die Nutzung für bestehende Nutzer nicht beeinträchtigt.\n\nWir sind bestrebt, Ihnen einen besseren Service und ein besseres Erlebnis zu bieten, und werden daher während der Schließung der Registrierung umfassende Systemoptimierungen und Funktionsupgrades durchführen. In Zukunft werden wir Sie mit hochwertigeren Inhalten und Dienstleistungen willkommen heißen.\n\nBitte folgen Sie unserer Website und unseren Social-Media-Plattformen, um die neuesten Updates und Benachrichtigungen zu erhalten. Vielen Dank für Ihr Verständnis und Ihre Unterstützung.\n\nBei Fragen oder wenn Sie Hilfe benötigen, kontaktieren Sie bitte jederzeit unser Kundenserviceteam.\n\n**Nochmals vielen Dank für Ihre Unterstützung und Ihr Verständnis.**", + "passwordMismatch": "Die eingegebenen Passwörter stimmen nicht überein", + "success": "Registrierung erfolgreich, Sie sind automatisch eingeloggt!", + "switchToLogin": "Anmelden/E-Mail zurücksetzen", + "title": "Registrieren" + }, + "reset": { + "description": "Bitte geben Sie Ihre E-Mail-Adresse ein, um das Passwort zurückzusetzen.", + "existingAccount": "Bereits ein Konto?", + "get": "Erhalten", + "success": "Passwort erfolgreich zurückgesetzt, automatisch zum Login gewechselt!", + "switchToLogin": "Anmelden/Registrieren", + "title": "Passwort zurücksetzen" + }, + "tos": "Nutzungsbedingungen" +} diff --git a/apps/admin/locales/de-DE/common.json b/apps/admin/locales/de-DE/common.json new file mode 100644 index 0000000..6d2b386 --- /dev/null +++ b/apps/admin/locales/de-DE/common.json @@ -0,0 +1,60 @@ +{ + "billing": { + "description": "Sponsoring hilft PPanel, weiterhin Updates zu veröffentlichen!", + "title": "Sponsoren" + }, + "empty": [ + "Stellen Sie sich vor, dieser Bereich wäre voller spannender Inhalte! Im Moment müssen Sie sich das noch vorstellen…", + "Dieser Bereich ist auf mysteriöse Weise verschwunden, wir versuchen, ihn zurückzuholen!", + "Oh je, nichts ist passiert… vielleicht möchten Sie etwas hinzufügen!", + "Das ist, als ob man auf einem Konzert feststellt, dass die Bühne leer ist… wollen Sie auftreten?", + "Sie haben ein leeres Paradies gefunden! Möchten Sie ein Haus bauen?", + "Hier ist momentan nichts, aber Kreativität beginnt genau hier!", + "Nichts ist da… aber keine Sorge, das ist nur der Anfang!", + "Hier war eine große Überraschung geplant, aber sie ist entwischt!", + "Im Moment ist hier nichts, wie ein leerer Snackschrank.", + "Dieser leere Raum wartet darauf, dass der Hauptdarsteller auftritt!" + ], + "request": { + "10001": "Die Abfrage war vorübergehend nicht erfolgreich, bitte versuchen Sie es später erneut oder überprüfen Sie Ihre Bedingungen.", + "10002": "Die Aktualisierung war nicht erfolgreich, bitte versuchen Sie es später erneut.", + "10003": "Der Einfügevorgang kann derzeit nicht abgeschlossen werden, bitte versuchen Sie es später erneut.", + "10004": "Der Löschvorgang konnte nicht abgeschlossen werden, bitte versuchen Sie es später erneut.", + "20001": "Diese Benutzerinformationen existieren bereits, bitte ändern Sie die Informationen und versuchen Sie es erneut.", + "20002": "Der Benutzer wurde nicht gefunden, bitte überprüfen Sie die Informationen und versuchen Sie es erneut.", + "20003": "Das eingegebene Passwort ist nicht korrekt, bitte erneut eingeben.", + "20004": "Dieser Benutzer wurde deaktiviert, bei Fragen wenden Sie sich bitte an den Kundenservice.", + "20005": "Unzureichendes Guthaben, bitte aufladen und erneut versuchen.", + "20006": "Die Registrierungsfunktion ist derzeit nicht verfügbar, bitte versuchen Sie es später erneut.", + "30001": "Dieser Knoten existiert bereits, bitte nicht erneut hinzufügen.", + "30002": "Kein relevanter Knoten gefunden, bitte überprüfen und erneut versuchen.", + "30003": "Die Gruppe existiert bereits, bitte versuchen Sie einen anderen Namen zu verwenden.", + "30004": "Die Gruppe wurde nicht gefunden, bitte überprüfen Sie die Informationen und versuchen Sie es erneut.", + "30005": "Die Gruppe enthält noch Inhalte, bitte leeren Sie sie und versuchen Sie es erneut.", + "400": "Die Anforderungsparameter sind nicht korrekt, bitte überprüfen und erneut einreichen.", + "40002": "Kein gültiges Token gefunden, bitte zuerst einloggen und erneut versuchen.", + "40003": "Das aktuelle Token ist ungültig, bitte erneut abrufen und versuchen.", + "40004": "Das Token ist abgelaufen, bitte erneut einloggen.", + "40005": "Sie haben derzeit keine Zugriffsberechtigung, bei Fragen wenden Sie sich bitte an den Administrator.", + "401": "Anfrage zu häufig, bitte versuchen Sie es später erneut.", + "500": "Der Server hat ein Problem festgestellt, bitte versuchen Sie es später erneut.", + "50001": "Die entsprechenden Gutscheininformationen konnten nicht gefunden werden, bitte überprüfen und erneut versuchen.", + "50002": "Dieser Gutschein wurde bereits verwendet und kann nicht erneut verwendet werden.", + "60001": "Das Abonnement ist abgelaufen, bitte erneuern und dann verwenden.", + "60002": "Das Abonnement kann derzeit nicht verwendet werden, bitte versuchen Sie es später erneut.", + "70001": "Der Bestätigungscode ist falsch, bitte erneut eingeben.", + "80001": "Die Aufgabe wurde nicht erfolgreich in die Warteschlange aufgenommen, bitte versuchen Sie es später erneut.", + "90001": "Bitte deaktivieren Sie den DEBUG-Modus und versuchen Sie es erneut.", + "undefined": "Es ist ein Systemfehler aufgetreten, bitte versuchen Sie es später erneut." + }, + "table": { + "actions": "Aktionen", + "asc": "Aufsteigend", + "desc": "Absteigend", + "hide": "Verbergen", + "pageInfo": "Seite {current} von {total}", + "rowsPerPage": "Zeilen pro Seite", + "selectedItems": "{total} Zeilen ausgewählt" + }, + "unlimited": "Unbegrenzt" +} diff --git a/apps/admin/locales/de-DE/coupon.json b/apps/admin/locales/de-DE/coupon.json new file mode 100644 index 0000000..cb90fd4 --- /dev/null +++ b/apps/admin/locales/de-DE/coupon.json @@ -0,0 +1,50 @@ +{ + "actions": "Aktionen", + "amount": "Betrag", + "cancel": "Abbrechen", + "code": "Code", + "confirm": "Bestätigen", + "confirmDelete": "Sind Sie sicher, dass Sie löschen möchten?", + "count": "Anzahl", + "couponList": "Gutscheinliste", + "create": "Erstellen", + "createCoupon": "Gutschein erstellen", + "createSuccess": "Erstellung erfolgreich", + "delete": "Löschen", + "deleteSuccess": "Erfolgreich gelöscht", + "deleteWarning": "Sobald gelöscht, können die Daten nicht wiederhergestellt werden. Bitte vorsichtig vorgehen.", + "discount": "Rabatt", + "edit": "Bearbeiten", + "editCoupon": "Gutschein bearbeiten", + "enable": "Aktivieren", + "form": { + "amountDiscount": "Betragsrabatt", + "cancel": "Abbrechen", + "confirm": "Bestätigen", + "count": "Maximale Nutzungsanzahl", + "countPlaceholder": "Maximale Nutzungsanzahl (leer lassen für unbegrenzt)", + "customCouponCode": "Benutzerdefinierter Gutscheincode", + "customCouponCodePlaceholder": "Benutzerdefinierter Gutscheincode (leer lassen für automatische Generierung)", + "enterCouponName": "Bitte geben Sie den Gutscheinnamen ein", + "enterValue": "Bitte geben Sie den Wert ein", + "expireTime": "Ablaufzeit", + "name": "Name", + "percentageDiscount": "Prozentrabatt", + "selectServer": "Bitte wählen Sie ein Abonnement", + "selectTime": "Zeit auswählen", + "specifiedServer": "Spezifisches Abonnement", + "startTime": "Startzeit", + "type": "Gutscheintyp", + "userLimit": "Maximale Nutzungsanzahl pro Benutzer", + "userLimitPlaceholder": "Maximale Nutzungsanzahl pro Benutzer (leer lassen für unbegrenzt)" + }, + "name": "Name", + "percentage": "Prozentsatz", + "remainingTimes": "Verbleibend", + "subscribe": "Abonnieren", + "type": "Typ", + "unlimited": "unbegrenzt", + "updateSuccess": "Aktualisierung erfolgreich", + "usedTimes": "Verwendungsanzahl", + "validityPeriod": "Gültigkeitsdauer" +} diff --git a/apps/admin/locales/de-DE/document.json b/apps/admin/locales/de-DE/document.json new file mode 100644 index 0000000..7add364 --- /dev/null +++ b/apps/admin/locales/de-DE/document.json @@ -0,0 +1,29 @@ +{ + "DocumentList": "Dokumentenliste", + "actions": "Aktionen", + "cancel": "Abbrechen", + "confirm": "Bestätigen", + "confirmDelete": "Sind Sie sicher, dass Sie löschen möchten?", + "create": "Erstellen", + "createDocument": "Dokument erstellen", + "createSuccess": "Erstellung erfolgreich", + "delete": "Löschen", + "deleteDescription": "Sobald gelöscht, können die Daten nicht wiederhergestellt werden. Bitte gehen Sie vorsichtig vor.", + "deleteSuccess": "Erfolgreich gelöscht", + "edit": "Bearbeiten", + "editDocument": "Dokument bearbeiten", + "form": { + "cancel": "Abbrechen", + "confirm": "Bestätigen", + "content": "Inhalt", + "tags": "Kategorien", + "tagsPlaceholder": "Bitte mit der Eingabetaste oder Komma (,) trennen, um mehrere Kategorien einzugeben", + "title": "Titel", + "titlePlaceholder": "Bitte eingeben" + }, + "show": "Anzeigen", + "tags": "Kategorien", + "title": "Titel", + "updateSuccess": "Aktualisierung erfolgreich", + "updatedAt": "Aktualisierungszeit" +} diff --git a/apps/admin/locales/de-DE/index.json b/apps/admin/locales/de-DE/index.json new file mode 100644 index 0000000..ee603e0 --- /dev/null +++ b/apps/admin/locales/de-DE/index.json @@ -0,0 +1,29 @@ +{ + "email": "E-Mail", + "month": "Diesen Monat", + "monthDownloadTraffic": "Monatlicher Download-Traffic", + "monthUploadTraffic": "Diesen Monat hochgeladener Datenverkehr", + "newPurchase": "Neukauf", + "nodeTraffic": "Knotenverkehr", + "nodes": "Knoten", + "offlineNodeCount": "Anzahl der Offline-Knoten", + "onlineIPCount": "Online-IP-Anzahl", + "onlineNodeCount": "Anzahl der Online-Knoten", + "pendingTickets": "Ausstehende Tickets", + "register": "Registrieren", + "repurchase": "Wiederkauf", + "revenueTitle": "Einnahmenstatistik", + "selectTypePlaceholder": "Typ auswählen", + "statisticsTitle": "Statistik", + "today": "Heute", + "todayDownloadTraffic": "Heutiger Download-Traffic", + "todayUploadTraffic": "Heutiger Upload-Verkehr", + "total": "Gesamt", + "totalIncome": "Gesamteinkommen", + "trafficRank": "Verkehrsrangliste", + "type": "Typ", + "userTitle": "Nutzerstatistik", + "userTraffic": "Benutzerverkehr", + "users": "Benutzer", + "yesterday": "Gestern" +} diff --git a/apps/admin/locales/de-DE/language.json b/apps/admin/locales/de-DE/language.json new file mode 100644 index 0000000..a6325d7 --- /dev/null +++ b/apps/admin/locales/de-DE/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "Tschechisch", + "de-DE": "Deutsch", + "en-US": "Englisch", + "es-ES": "Spanisch", + "es-MX": "Spanisch (Mexiko)", + "fi-FI": "Finnisch", + "fr-FR": "Französisch", + "hi-IN": "Hindi", + "hu-HU": "Ungarisch", + "ja-JP": "Japanisch", + "ko-KR": "Koreanisch", + "no-NO": "Norwegisch", + "pl-PL": "Polnisch", + "pt-BR": "Portugiesisch (Brasilien)", + "ro-RO": "Rumänisch", + "ru-RU": "Russisch", + "th-TH": "Thailändisch", + "tr-TR": "Türkisch", + "uk-UA": "Ukrainisch", + "vi-VN": "Vietnamesisch", + "zh-CN": "Chinesisch (vereinfacht)", + "zh-TW": "Chinesisch (Traditionell)" +} diff --git a/apps/admin/locales/de-DE/menu.json b/apps/admin/locales/de-DE/menu.json new file mode 100644 index 0000000..3e66b3d --- /dev/null +++ b/apps/admin/locales/de-DE/menu.json @@ -0,0 +1,18 @@ +{ + "Announcement Management": "Ankündigungsverwaltung", + "Coupon Management": "Gutscheinverwaltung", + "Dashboard": "Armaturenbrett", + "Document Management": "Dokumentenverwaltung", + "Finance": "Finanzen", + "Order Management": "Bestellverwaltung", + "Payment Config": "Zahlungskonfiguration", + "Server": "Dienst", + "Server Management": "Serververwaltung", + "Settings": "Einstellungen", + "Subscribe Management": "Abonnementverwaltung", + "System Config": "Systemkonfiguration", + "System Tool": "Systemwerkzeug", + "Ticket Management": "Ticketverwaltung", + "User": "Benutzer", + "User Management": "Benutzerverwaltung" +} diff --git a/apps/admin/locales/de-DE/order.json b/apps/admin/locales/de-DE/order.json new file mode 100644 index 0000000..d100945 --- /dev/null +++ b/apps/admin/locales/de-DE/order.json @@ -0,0 +1,37 @@ +{ + "amount": "Betrag", + "couponDiscount": "Gutscheinrabatt", + "discount": "Rabattbetrag", + "failed": "Fehlgeschlagen", + "feeAmount": "Gebühr", + "method": "Zahlungsmethode", + "methods": { + "alipay_f2f": "Alipay (Face-to-Face)", + "balance": "Guthaben", + "epay": "E-Pay", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "orderNumber": "Bestellnummer", + "status": { + "0": "Status", + "1": "Ausstehende Zahlung", + "2": "Bezahlt", + "3": "Storniert", + "4": "Geschlossen", + "5": "Abgeschlossen" + }, + "subscribe": "Abonnieren", + "subscribePrice": "Abonnementspreis", + "total": "Gesamt", + "tradeNo": "Handelsnummer", + "type": { + "0": "Typ", + "1": "Neukauf", + "2": "Verlängerung", + "3": "Datenvolumen zurücksetzen", + "4": "Aufladen" + }, + "updateTime": "Aktualisierungszeit", + "user": "Benutzer" +} diff --git a/apps/admin/locales/de-DE/payment.json b/apps/admin/locales/de-DE/payment.json new file mode 100644 index 0000000..db630b2 --- /dev/null +++ b/apps/admin/locales/de-DE/payment.json @@ -0,0 +1,44 @@ +{ + "aliPay": "Alipay-Zahlung", + "alipayf2f": { + "appId": "Alipay Anwendungs-ID", + "invoiceName": "Benutzerdefinierter Produktname", + "invoiceNameDescription": "Wird in der Alipay-Rechnung angezeigt", + "privateKey": "Alipay Privatschlüssel", + "publicKey": "Alipay Öffentlicher Schlüssel", + "sandbox": "Sandbox-Modus", + "sandboxDescription": "Aktivieren Sie den Sandbox-Modus, um Zahlungen zu testen" + }, + "enable": "Aktivieren", + "enableDescription": "Diese Zahlungsmethode aktivieren", + "epay": { + "key": "SCHLÜSSEL", + "pid": "PID", + "url": "URL" + }, + "feeMode": "Gebührenmodus", + "feeModeDescription": "Gebührenmodus für zusätzliche Gebühren", + "feeModeItems": ["Keine Gebühr", "Prozentsatz", "Fester Betrag", "Beides"], + "feePercent": "Prozentgebühr (optional)", + "feePercentDescription": "Gebühren werden zusätzlich zum Bestellbetrag hinzugefügt", + "fixedFee": "Feste Gebühr (optional)", + "fixedFeeDescription": "Feste Gebühr zusätzlich zum Bestellbetrag hinzufügen", + "iconUrl": "Symbol-URL (optional)", + "iconUrlDescription": "Zur Anzeige im Frontend verwendet", + "inputPlaceholder": "Bitte eingeben", + "key": "SCHLÜSSEL", + "notifyUrl": "Benutzerdefinierte Benachrichtigungs-URL (optional)", + "notifyUrlDescription": "Gateway-Benachrichtigungen werden an diese Domain gesendet", + "payForRecommendations": "Für Empfehlungen bezahlen", + "pid": "PID", + "saveSuccess": "Erfolgreich gespeichert", + "showName": "Anzeigename", + "showNameDescription": "Zur Anzeige im Frontend verwendet", + "stripe": { + "publicKey": "ÖFFENTLICHER SCHLÜSSEL", + "secretKey": "GEHEIMER SCHLÜSSEL", + "webhookSecret": "WEBHOOK-SCHLÜSSEL-SIGNATUR" + }, + "url": "URL", + "wechatPay": "WeChat Pay" +} diff --git a/apps/admin/locales/de-DE/server.json b/apps/admin/locales/de-DE/server.json new file mode 100644 index 0000000..7badd72 --- /dev/null +++ b/apps/admin/locales/de-DE/server.json @@ -0,0 +1,122 @@ +{ + "group": { + "actions": "Aktionen", + "cancel": "Abbrechen", + "confirm": "Bestätigen", + "confirmDelete": "Möchten Sie wirklich löschen?", + "create": "Erstellen", + "createNodeGroup": "Knoten-Gruppe erstellen", + "createdSuccessfully": "Erfolgreich erstellt", + "delete": "Löschen", + "deleteWarning": "Nach dem Löschen können die Daten nicht wiederhergestellt werden, bitte vorsichtig vorgehen.", + "deletedSuccessfully": "Erfolgreich gelöscht", + "description": "Beschreibung", + "edit": "Bearbeiten", + "editNodeGroup": "Knoten-Gruppe bearbeiten", + "form": { + "cancel": "Abbrechen", + "confirm": "Bestätigen", + "description": "Beschreibung", + "name": "Name" + }, + "name": "Name", + "title": "Liste der Knoten-Gruppen", + "updatedAt": "Aktualisierungszeit" + }, + "node": { + "abnormal": "Abnormalität", + "actions": "Aktionen", + "address": "Adresse", + "all": "Alle", + "cancel": "Abbrechen", + "confirm": "Bestätigen", + "confirmDelete": "Möchten Sie wirklich löschen?", + "create": "Erstellen", + "createNode": "Knoten erstellen", + "createSuccess": "Erfolgreich erstellt", + "delete": "Löschen", + "deleteSuccess": "Erfolgreich gelöscht", + "deleteWarning": "Nach dem Löschen können die Daten nicht wiederhergestellt werden. Bitte vorsichtig vorgehen.", + "disk": "Festplatte", + "edit": "Bearbeiten", + "editNode": "Knoten bearbeiten", + "enable": "Aktivieren", + "form": { + "allowInsecure": "Unsicher zulassen", + "cancel": "Abbrechen", + "confirm": "Bestätigen", + "edit": "Bearbeiten", + "editSecurity": "Sicherheitskonfiguration bearbeiten", + "enableRelay": "Relay aktivieren", + "enableTLS": "TLS aktivieren", + "encryptionMethod": "Verschlüsselungsmethode", + "flow": "Flusskontrollalgorithmus", + "hopInterval": "Sprungintervall", + "hopPorts": "Sprungports", + "hopPortsPlaceholder": "Mehrere Ports durch Kommas trennen", + "name": "Name", + "nodeGroupId": "Knotengruppen-ID", + "obfsPassword": "Verschleierungspasswort", + "obfsPasswordPlaceholder": "Leer lassen für keine Verschleierung", + "path": "Pfad", + "pleaseSelect": "Bitte auswählen", + "port": "Serverport", + "protocol": "Protokoll", + "relayHost": "Relay-Adresse", + "relayPort": "Relay-Port", + "remarks": "Bemerkungen", + "security": "Sicherheit", + "securityConfig": "Sicherheitskonfiguration", + "security_config": { + "fingerprint": "Fingerabdruck", + "privateKey": "Privater Schlüssel", + "privateKeyPlaceholder": "Leer lassen für automatische Generierung", + "publicKey": "Öffentlicher Schlüssel", + "publicKeyPlaceholder": "Leer lassen für automatische Generierung", + "serverAddress": "Serveradresse", + "serverAddressPlaceholder": "REALITY-Zieladresse, standardmäßig SNI verwenden", + "serverName": "Servername (SNI)", + "serverNamePlaceholder": "REALITY erforderlich, mit Backend übereinstimmen", + "serverPort": "Serverport", + "serverPortPlaceholder": "REALITY-Zielport, standardmäßig 443", + "shortId": "Kurz-ID", + "shortIdPlaceholder": "Leer lassen für automatische Generierung", + "sni": "Server Name Indication (SNI)" + }, + "selectEncryptionMethod": "Verschlüsselungsmethode auswählen", + "selectNodeGroup": "Knotengruppe auswählen", + "selectProtocol": "Protokoll auswählen", + "serverAddr": "Serveradresse", + "serverName": "Dienstname", + "speedLimit": "Geschwindigkeitsbegrenzung", + "speedLimitPlaceholder": "Keine Begrenzung", + "trafficRatio": "Verkehrsrate", + "transport": "Transportprotokoll", + "transportConfig": "Transportprotokollkonfiguration", + "transportHost": "Transportdienstadresse", + "transportPath": "Transportpfad", + "transportServerName": "Transportdienstname" + }, + "lastUpdated": "Zuletzt aktualisiert", + "memory": "Speicher", + "name": "Name", + "node": "Knoten", + "nodeGroup": "Knotengruppe", + "normal": "Normal", + "onlineCount": "Online-Anzahl", + "onlineUsers": "Online-Benutzer", + "rate": "Rate", + "relay": "Relais", + "serverAddr": "Serveradresse", + "speedLimit": "Geschwindigkeitsbegrenzung", + "status": "Status", + "trafficRatio": "Verkehrsrate", + "type": "Typ", + "updateSuccess": "Erfolgreich aktualisiert", + "updatedAt": "Aktualisierungszeit" + }, + "tabs": { + "node": "Knoten", + "nodeGroup": "Knotengruppe" + } +} diff --git a/apps/admin/locales/de-DE/subscribe.json b/apps/admin/locales/de-DE/subscribe.json new file mode 100644 index 0000000..a64b5f3 --- /dev/null +++ b/apps/admin/locales/de-DE/subscribe.json @@ -0,0 +1,79 @@ +{ + "actions": "Aktionen", + "cancel": "Abbrechen", + "confirm": "Bestätigen", + "confirmDelete": "Möchten Sie wirklich löschen?", + "create": "Erstellen", + "createSubscribe": "Neues Abonnement erstellen", + "createSuccess": "Erstellung erfolgreich", + "delete": "Löschen", + "deleteSuccess": "Erfolgreich gelöscht", + "deleteWarning": "Nach dem Löschen können die Daten nicht wiederhergestellt werden. Bitte gehen Sie vorsichtig vor.", + "deviceLimit": "Geräteanzahl/Stück", + "edit": "Bearbeiten", + "editSubscribe": "Abonnement bearbeiten", + "form": { + "cancel": "Abbrechen", + "confirm": "Bestätigen", + "description": "Beschreibung", + "deviceLimit": "Gerätebeschränkung", + "discount": "Rabatt", + "discountDescription": "Rabatt basierend auf Einzelpreis", + "discountMonths": "Monate", + "discountPercent": "Rabattprozentsatz", + "discount_price": "Rabattpreis", + "duration": "Dauer (Monate)", + "inventory": "Bestand", + "name": "Name", + "noLimit": "Keine Begrenzung", + "quota": "Kaufbeschränkung", + "replacement": "Ersatzpreis (pro Mal)", + "selectSubscribeGroup": "Bitte Abonnementgruppe auswählen", + "server": "Dienst", + "serverGroup": "Dienstgruppe", + "speedLimit": "Geschwindigkeitsbegrenzung (Mbps)", + "subscribeGroup": "Abonnementgruppe", + "traffic": "Datenvolumen", + "unit_price": "Monatspreis" + }, + "group": { + "actions": "Aktionen", + "cancel": "Abbrechen", + "confirm": "Bestätigen", + "confirmDelete": "Löschen bestätigen?", + "create": "Erstellen", + "createSubscribeGroup": "Neue Abonnementgruppe erstellen", + "createSuccess": "Erstellung erfolgreich", + "delete": "Löschen", + "deleteSuccess": "Erfolgreich gelöscht", + "deleteWarning": "Nach dem Löschen können die Daten nicht wiederhergestellt werden, bitte vorsichtig vorgehen.", + "description": "Beschreibung", + "edit": "Bearbeiten", + "editSubscribeGroup": "Abonnementgruppe bearbeiten", + "form": { + "cancel": "Abbrechen", + "confirm": "Bestätigen", + "description": "Beschreibung", + "name": "Name" + }, + "name": "Name", + "title": "Liste der Abonnementgruppen", + "updateSuccess": "Erfolgreich aktualisiert", + "updatedAt": "Aktualisierungszeit" + }, + "inventory": "Inventar", + "name": "Name", + "quota": "Kaufbeschränkung/pro Einkauf", + "replacement": "Preis pro Zurücksetzung", + "sell": "Verkauf", + "show": "Startseite anzeigen", + "subscribe": "Abonnieren", + "subscribeGroup": "Gruppe abonnieren", + "tabs": { + "subscribe": "Abonnieren", + "subscribeGroup": "Abonnieren Gruppe" + }, + "traffic": "Verkehr", + "unitPrice": "Preis/Monat", + "updateSuccess": "Aktualisierung erfolgreich" +} diff --git a/apps/admin/locales/de-DE/system.json b/apps/admin/locales/de-DE/system.json new file mode 100644 index 0000000..14523fa --- /dev/null +++ b/apps/admin/locales/de-DE/system.json @@ -0,0 +1,156 @@ +{ + "currency": { + "accessKey": "Zugangsschlüssel", + "accessKeyDescription": "https://exchangerate.host bietet kostenlos bereitgestellte API-Schlüssel für Wechselkurse an", + "currencySymbol": "Währungssymbol", + "currencySymbolDescription": "Nur zur Anzeige verwendet, nach der Änderung werden alle Währungseinheiten im System geändert", + "currencyUnit": "Währungseinheit", + "currencyUnitDescription": "Nur zur Anzeige verwendet, nach der Änderung werden alle Währungseinheiten im System geändert", + "saveSuccess": "Erfolgreich gespeichert" + }, + "email": { + "expiration_email_template": "Ablaufbenachrichtigungsvorlage", + "expiration_email_templateDescription": "Die Variablennamen {after}.Variable{before} im Template werden durch tatsächliche Daten ersetzt. Bitte stellen Sie sicher, dass diese Variablen erhalten bleiben.", + "inputPlaceholder": "Bitte Inhalt eingeben...", + "maintenance_email_template": "Wartungsbenachrichtigungsvorlage", + "maintenance_email_templateDescription": "Die Variablennamen {after}.Variable{before} im Template werden durch tatsächliche Daten ersetzt. Bitte stellen Sie sicher, dass diese Variablen erhalten bleiben.", + "saveSuccess": "Die Konfiguration wurde erfolgreich gespeichert.", + "sendFailure": "Der Versand der Test-E-Mail ist fehlgeschlagen. Bitte überprüfen Sie die Konfiguration.", + "sendSuccess": "Die Test-E-Mail wurde erfolgreich gesendet.", + "sendTestEmail": "Test-E-Mail senden", + "sendTestEmailDescription": "Senden Sie eine Test-E-Mail, um zu überprüfen, ob die Konfiguration korrekt ist.", + "senderAddress": "Absenderadresse", + "senderAddressDescription": "Standard-E-Mail-Adresse, die zum Senden von E-Mails verwendet wird.", + "smtpAccount": "SMTP-Konto", + "smtpAccountDescription": "E-Mail-Konto zur Authentifizierung.", + "smtpEncryptionMethod": "SMTP-Verschlüsselungsmethode", + "smtpEncryptionMethodDescription": "Wählen Sie, ob SSL/TLS-Verschlüsselung aktiviert werden soll.", + "smtpPassword": "SMTP-Passwort", + "smtpPasswordDescription": "Das Passwort für das SMTP-Konto.", + "smtpServerAddress": "SMTP-Serveradresse", + "smtpServerAddressDescription": "Geben Sie die Serveradresse zum Senden von E-Mails an.", + "smtpServerPort": "SMTP-Serverport", + "smtpServerPortDescription": "Geben Sie die Portnummer für die Verbindung zum SMTP-Server an.", + "verify_email_template": "Verifizierungsmailvorlage", + "verify_email_templateDescription": "Die Variablennamen {after}.Variable{before} im Template werden durch tatsächliche Daten ersetzt. Bitte stellen Sie sicher, dass diese Variablen erhalten bleiben." + }, + "invite": { + "commissionFirstTimeOnly": "Nur Provision beim ersten Kauf", + "commissionFirstTimeOnlyDescription": "Nach Aktivierung wird die Provision nur bei der ersten Zahlung des Eingeladenen generiert. Sie können in der Benutzerverwaltung einen individuellen Benutzer konfigurieren.", + "enableForcedInvite": "Erzwungene Einladung aktivieren", + "enableForcedInviteDescription": "Nach Aktivierung können sich nur eingeladene Benutzer registrieren.", + "inputPlaceholder": "Bitte eingeben", + "inviteCommissionPercentage": "Einladungsprovisionsprozentsatz", + "inviteCommissionPercentageDescription": "Standardmäßiger globaler Provisionsverteilungssatz. Sie können in der Benutzerverwaltung einen individuellen Satz konfigurieren.", + "saveSuccess": "Erfolgreich gespeichert" + }, + "node": { + "communicationKey": "Kommunikationsschlüssel", + "communicationKeyDescription": "Schlüssel für die Kommunikation des Knotens, um sicherzustellen, dass Daten nicht von anderen abgefangen werden", + "inputPlaceholder": "Bitte eingeben", + "nodePullInterval": "Knotenabfrageintervall", + "nodePullIntervalDescription": "Häufigkeit, mit der der Knoten Daten vom Panel abruft (Sekunden)", + "nodePushInterval": "Knotenübertragungsintervall", + "nodePushIntervalDescription": "Häufigkeit, mit der der Knoten Daten an das Panel überträgt", + "saveSuccess": "Erfolgreich gespeichert" + }, + "register": { + "emailSuffixWhitelist": "E-Mail-Suffix-Whitelist", + "emailSuffixWhitelistDescription": "Wenn aktiviert, können sich nur E-Mails mit den in der Liste enthaltenen Suffixen registrieren", + "emailVerification": "E-Mail-Verifizierung", + "emailVerificationDescription": "Wenn aktiviert, müssen Benutzer ihre E-Mail verifizieren", + "ipRegistrationLimit": "IP-Registrierungsbeschränkung", + "ipRegistrationLimitDescription": "Wenn aktiviert, werden IPs, die den Regelanforderungen entsprechen, in der Registrierung eingeschränkt. Bitte beachten Sie, dass die Bestimmung der IP aufgrund von CDN oder Frontend-Proxy zu Problemen führen kann", + "penaltyTime": "Strafzeit (Minuten)", + "penaltyTimeDescription": "Benutzer müssen die Strafzeit abwarten, bevor sie sich erneut registrieren können", + "registrationLimitCount": "Registrierungsbeschränkungsanzahl", + "registrationLimitCountDescription": "Nach Erreichen der Registrierungsbeschränkung wird die Strafe aktiviert", + "saveSuccess": "Erfolgreich gespeichert", + "stopNewUserRegistration": "Registrierung neuer Benutzer stoppen", + "stopNewUserRegistrationDescription": "Wenn aktiviert, kann sich niemand registrieren", + "trialRegistration": "Testregistrierung", + "trialRegistrationDescription": "Testregistrierung aktivieren, bitte zuerst Testpaket und -dauer ändern", + "whitelistSuffixes": "Whitelist-Suffixe", + "whitelistSuffixesDescription": "Für die E-Mail-Verifizierung bei der Registrierung, ein Suffix pro Zeile", + "whitelistSuffixesPlaceholder": "Bitte geben Sie E-Mail-Suffixe ein, eines pro Zeile" + }, + "site": { + "logo": "LOGO", + "logoDescription": "Position zur Anzeige des LOGOs", + "logoPlaceholder": "Bitte geben Sie die URL-Adresse des LOGOs ein, ohne '/' am Ende", + "saveSuccess": "Erfolgreich gespeichert", + "siteDesc": "Seitenbeschreibung", + "siteDescDescription": "Position zur Anzeige der Seitenbeschreibung", + "siteDescPlaceholder": "Bitte geben Sie die Seitenbeschreibung ein", + "siteDomain": "Seitendomäne", + "siteDomainDescription": "Die aktuelle Domain-Adresse der Website, z.B. für E-Mails", + "siteDomainPlaceholder": "Bitte geben Sie die Domain-Adresse ein, bei mehreren Domains bitte eine pro Zeile", + "siteName": "Seitenname", + "siteNameDescription": "Position zur Anzeige des Seitennamens", + "siteNamePlaceholder": "Bitte geben Sie den Seitennamen ein" + }, + "subscription": { + "add": "Hinzufügen", + "app": "Anwendung", + "appDescription": "Konfigurieren Sie die Download-Adresse und Importregeln der App. Vergessen Sie nicht, nach Änderungen zu speichern.", + "appDownloadURL": "App-Download-Adresse", + "appIcon": "App-Symbol", + "appName": "App-Name", + "delete": "Löschen", + "reset": "Zurücksetzen", + "save": "Speichern", + "saveSuccess": "Erfolgreich gespeichert", + "singleSubscriptionMode": "Einzelabonnement-Modus", + "singleSubscriptionModeDescription": "Wenn aktiviert, werden alle Benutzerpakete in Guthaben umgewandelt.", + "subscriptionDomain": "Abonnement-Domain", + "subscriptionDomainDescription": "Für Abonnements, leer lassen, um die Site-Domain zu verwenden", + "subscriptionDomainPlaceholder": "Bitte geben Sie die Abonnement-Domain ein, bei mehreren Domains bitte eine pro Zeile", + "subscriptionPath": "Abonnement-Pfad", + "subscriptionPathDescription": "Für Abonnements, bitte starten Sie das System nach Änderungen neu, um die beste Leistung zu gewährleisten", + "subscriptionPathPlaceholder": "Bitte eingeben", + "subscriptionProtocol": "Abonnement-Protokoll", + "wildcardResolution": "Wildcard-Auflösung", + "wildcardResolutionDescription": "Für Abonnements" + }, + "tabs": { + "currency": "Währung", + "email": "E-Mail", + "invite": "Einladen", + "node": "Knoten", + "register": "Registrieren", + "site": "Seite", + "subscription": "Abonnement", + "telegram": "Telegram", + "tos": "Nutzungsbedingungen", + "verify": "Verifizieren" + }, + "telegram": { + "botToken": "Bot-Token", + "botTokenDescription": "Bitte geben Sie das von Botfather bereitgestellte Token ein", + "enableBotNotifications": "Bot-Benachrichtigungen aktivieren", + "enableBotNotificationsDescription": "Nach Aktivierung sendet der Bot grundlegende Benachrichtigungen an Administratoren und Benutzer, die mit Telegram verbunden sind", + "groupURL": "Gruppen-URL", + "groupURLDescription": "Nach Eingabe wird sie auf der Benutzerseite angezeigt oder dort verwendet, wo sie benötigt wird", + "inputPlaceholderBotToken": "0000000000:xxxxxxxxx_xxxxxxxxxxxxxxx", + "inputPlaceholderGroupURL": "https://t.me/xxxxxx", + "saveSuccess": "Erfolgreich gespeichert" + }, + "tos": { + "saveSuccess": "Erfolgreich gespeichert", + "title": "Nutzungsbedingungen" + }, + "verify": { + "inputPlaceholder": "Bitte eingeben", + "loginVerificationCode": "Anmeldebestätigungscode", + "loginVerificationCodeDescription": "Mensch-Maschine-Verifizierung bei der Anmeldung", + "registrationVerificationCode": "Registrierungsbestätigungscode", + "registrationVerificationCodeDescription": "Mensch-Maschine-Verifizierung bei der Registrierung", + "resetPasswordVerificationCode": "Passwort-zurücksetzen-Bestätigungscode", + "resetPasswordVerificationCodeDescription": "Mensch-Maschine-Verifizierung beim Zurücksetzen des Passworts", + "saveSuccess": "Erfolgreich gespeichert", + "turnstileSecret": "Turnstile-Schlüssel", + "turnstileSecretDescription": "Von Cloudflare bereitgestellter Turnstile-Schlüssel", + "turnstileSiteKey": "Turnstile-Standortschlüssel", + "turnstileSiteKeyDescription": "Von Cloudflare bereitgestellter Turnstile-Standortschlüssel" + } +} diff --git a/apps/admin/locales/de-DE/ticket.json b/apps/admin/locales/de-DE/ticket.json new file mode 100644 index 0000000..4840fce --- /dev/null +++ b/apps/admin/locales/de-DE/ticket.json @@ -0,0 +1,19 @@ +{ + "actions": "Aktionen", + "cancel": "Abbrechen", + "check": "Prüfen", + "close": "Schließen", + "closeSuccess": "Erfolgreich geschlossen", + "closeWarning": "Sobald Sie schließen, kann dieses Ticket nicht mehr bearbeitet werden. Bitte gehen Sie vorsichtig vor.", + "confirm": "Bestätigen", + "confirmClose": "Möchten Sie wirklich schließen?", + "createdAt": "Erstellungszeitpunkt", + "inputPlaceholder": "Bitte geben Sie Ihre Frage ein, wir werden so schnell wie möglich antworten.", + "open": "Öffnen", + "reply": "Antwort", + "status": ["Status", "Zu folgen", "Zu beantworten", "Bearbeitet", "Geschlossen"], + "ticketList": "Ticketliste", + "title": "Titel", + "updatedAt": "Aktualisierungszeit", + "user": "Benutzer" +} diff --git a/apps/admin/locales/de-DE/tool.json b/apps/admin/locales/de-DE/tool.json new file mode 100644 index 0000000..5ad13fa --- /dev/null +++ b/apps/admin/locales/de-DE/tool.json @@ -0,0 +1,26 @@ +{ + "caller": "Anrufer", + "cancel": "Abbrechen", + "confirmReboot": "Neustart bestätigen", + "confirmSystemReboot": "Systemneustart bestätigen", + "confirmSystemUpgrade": "Systemaktualisierung bestätigen", + "confirmUpgrade": "Upgrade bestätigen", + "currentVersion": "Aktuelle Systemversion:", + "errors": "Fehler", + "ip": "IP", + "lastUpdated": "Zuletzt aktualisiert:", + "none": "Keine", + "query": "Abfrage", + "rebootDescription": "Möchten Sie das System wirklich neu starten? Dieser Vorgang führt zu einer kurzen Unterbrechung des Dienstes.", + "rebooting": "System wird neu gestartet...", + "refreshLogs": "Protokolle aktualisieren", + "request": "Anfrage", + "status": "Status", + "systemLogs": "Systemprotokolle", + "systemReboot": "Systemneustart", + "systemServices": "Systemdienste", + "systemUpgrade": "Systemaktualisierung", + "upgradeDescription": "Möchten Sie das System-Upgrade wirklich durchführen? Dieser Vorgang kann einige Minuten dauern, währenddessen das System möglicherweise nicht reagiert.", + "userAgent": "Benutzeragent", + "viewLogsAndManage": "Systemprotokolle anzeigen, Systemaktualisierungen durchführen und Neustartvorgänge ausführen" +} diff --git a/apps/admin/locales/de-DE/user.json b/apps/admin/locales/de-DE/user.json new file mode 100644 index 0000000..584be3e --- /dev/null +++ b/apps/admin/locales/de-DE/user.json @@ -0,0 +1,38 @@ +{ + "actions": "Aktionen", + "balance": "Kontostand", + "cancel": "Abbrechen", + "confirm": "Bestätigen", + "confirmDelete": "Sind Sie sicher, dass Sie löschen möchten?", + "create": "Erstellen", + "createSuccess": "Erstellung erfolgreich", + "createUser": "Benutzer erstellen", + "createdAt": "Registrierungsdatum", + "delete": "Löschen", + "deleteDescription": "Nach dem Löschen können die Daten nicht wiederhergestellt werden. Bitte gehen Sie vorsichtig vor.", + "deleteSuccess": "Erfolgreich gelöscht", + "edit": "Bearbeiten", + "editUser": "Benutzer bearbeiten", + "email": "E-Mail", + "enable": "Aktivieren", + "form": { + "balance": "Kontostand", + "balancePlaceholder": "Kontostand", + "cancel": "Abbrechen", + "confirm": "Bestätigen", + "invalidEmailFormat": "Ungültiges E-Mail-Format", + "inviteCode": "Einladungscode", + "inviteCodePlaceholder": "Bitte Einladungscode eingeben (leer lassen für automatische Generierung)", + "manager": "Administrator", + "password": "Passwort", + "passwordPlaceholder": "Bitte neues Passwort eingeben (kann leer bleiben)", + "refererId": "Empfehler-ID", + "refererIdPlaceholder": "Bitte Empfehler-ID eingeben", + "userEmail": "Benutzer-E-Mail", + "userEmailPlaceholder": "Bitte Benutzer-E-Mail eingeben" + }, + "referer": "Empfehler", + "updateSuccess": "Aktualisierung erfolgreich", + "userList": "Benutzerliste", + "userName": "Benutzer-E-Mail" +} diff --git a/apps/admin/locales/es-ES/announcement.json b/apps/admin/locales/es-ES/announcement.json new file mode 100644 index 0000000..0bb79f6 --- /dev/null +++ b/apps/admin/locales/es-ES/announcement.json @@ -0,0 +1,30 @@ +{ + "actions": "acciones", + "announcementList": "Lista de anuncios", + "cancel": "Cancelar", + "confirm": "Confirmar", + "confirmDelete": "¿Está seguro de que desea eliminar?", + "content": "contenido", + "create": "crear", + "createAnnouncement": "Crear anuncio", + "createSuccess": "Creación exitosa", + "delete": "eliminar", + "deleteDescription": "Una vez eliminado, los datos no se podrán recuperar. Proceda con precaución.", + "deleteSuccess": "Eliminación exitosa", + "edit": "editar", + "editAnnouncement": "Editar anuncio", + "enable": "Habilitar", + "form": { + "cancel": "Cancelar", + "confirm": "Confirmar", + "content": "Contenido", + "contentPlaceholder": "Por favor, introduce el contenido del anuncio (se admite Markdown)", + "title": "Título", + "titlePlaceholder": "Por favor, introduce" + }, + "hide": "Ocultar", + "show": "mostrar", + "title": "Título", + "updateSuccess": "Actualización exitosa", + "updatedAt": "Actualizado en" +} diff --git a/apps/admin/locales/es-ES/auth.json b/apps/admin/locales/es-ES/auth.json new file mode 100644 index 0000000..b51e462 --- /dev/null +++ b/apps/admin/locales/es-ES/auth.json @@ -0,0 +1,39 @@ +{ + "check": { + "checking": "Verificando...", + "continue": "Continuar", + "description": "Por favor, introduce tu correo electrónico para continuar con el inicio de sesión o registro.", + "email": "Por favor, introduce una dirección de correo electrónico válida.", + "title": "Iniciar sesión/Registrarse", + "whitelist": "El dominio del correo electrónico no está en la lista blanca permitida." + }, + "login": { + "description": "Por favor, introduzca su información de cuenta para iniciar sesión.", + "forgotPassword": "¿Olvidó su contraseña?", + "success": "¡Inicio de sesión exitoso!", + "switchAccount": "Registrar/Cambiar cuenta", + "title": "Iniciar sesión" + }, + "logout": "Cerrar sesión", + "orWithEmail": "o con correo electrónico", + "register": { + "description": "Crea una nueva cuenta, completa tu información para registrarte.", + "existingAccount": "¿Ya tienes una cuenta?", + "get": "Obtener", + "invite": "Código de invitación", + "message": "#### ¡Estimado usuario!\n\nGracias por su interés y apoyo. Debido a un ajuste en la estrategia de operación del sitio, hemos cerrado la función de registro para nuevos usuarios. Durante este período, el uso por parte de los usuarios existentes no se verá afectado.\n\nNos comprometemos a brindarle un mejor servicio y experiencia, por lo que realizaremos una optimización completa del sistema y una actualización de funciones durante el cierre del registro. En el futuro, le daremos la bienvenida con contenido y servicios de mayor calidad.\n\nPor favor, siga nuestro sitio web y plataformas de redes sociales para obtener las últimas actualizaciones y notificaciones. Agradecemos su comprensión y apoyo.\n\nSi tiene alguna pregunta o necesita ayuda, no dude en ponerse en contacto con nuestro equipo de atención al cliente.\n\n**Nuevamente, gracias por su apoyo y comprensión.**", + "passwordMismatch": "Las contraseñas no coinciden", + "success": "¡Registro exitoso, sesión iniciada automáticamente!", + "switchToLogin": "Iniciar sesión/restablecer correo electrónico", + "title": "Registro" + }, + "reset": { + "description": "Por favor, introduzca su dirección de correo electrónico para restablecer la contraseña.", + "existingAccount": "¿Ya tienes una cuenta?", + "get": "Obtener", + "success": "¡Contraseña restablecida con éxito, se ha cambiado automáticamente a iniciar sesión!", + "switchToLogin": "Iniciar sesión/Registrarse", + "title": "Restablecer contraseña" + }, + "tos": "Términos del servicio" +} diff --git a/apps/admin/locales/es-ES/common.json b/apps/admin/locales/es-ES/common.json new file mode 100644 index 0000000..4984b03 --- /dev/null +++ b/apps/admin/locales/es-ES/common.json @@ -0,0 +1,60 @@ +{ + "billing": { + "description": "¡Patrocinar ayuda a que PPanel continúe lanzando actualizaciones!", + "title": "Patrocinadores" + }, + "empty": [ + "¡Imagina que aquí está lleno de contenido emocionante! Por ahora, solo podemos imaginarlo…", + "Esta área ha desaparecido misteriosamente, ¡estamos invocándola de vuelta!", + "Vaya, no ha pasado nada… ¡puedes añadir algo tú mismo!", + "Es como descubrir que no hay nadie en el escenario de un concierto… ¿por qué no subes a actuar?", + "¡Has encontrado un paraíso en blanco! ¿Te gustaría construir una casa?", + "Aquí no hay nada por ahora, ¡pero la creatividad comienza aquí!", + "No hay nada… pero no te preocupes, ¡esto es solo el comienzo!", + "Aquí había una gran sorpresa preparada, ¡pero se ha escapado!", + "Por ahora no hay nada, como si la despensa de snacks estuviera vacía.", + "¡Este espacio vacío está esperando a que su protagonista aparezca!" + ], + "request": { + "10001": "La consulta no fue exitosa, por favor intente de nuevo más tarde o verifique sus condiciones.", + "10002": "La operación de actualización no fue exitosa, por favor intente más tarde.", + "10003": "No se puede completar la operación de inserción por el momento, por favor intente más tarde.", + "10004": "La operación de eliminación no se pudo completar, por favor intente más tarde.", + "20001": "La información del usuario ya existe, por favor cambie la información e intente de nuevo.", + "20002": "No se encontró al usuario, por favor verifique la información e intente de nuevo.", + "20003": "La contraseña que ingresó es incorrecta, por favor ingrésela nuevamente.", + "20004": "El usuario ha sido deshabilitado, si tiene alguna duda, por favor contacte al servicio al cliente.", + "20005": "Saldo insuficiente, por favor recargue e intente nuevamente.", + "20006": "La función de registro no está disponible temporalmente, por favor intente más tarde.", + "30001": "El nodo ya existe, por favor no lo agregue nuevamente.", + "30002": "No se encontró el nodo relacionado, por favor verifique e intente de nuevo.", + "30003": "El grupo ya existe, por favor intente usar otro nombre.", + "30004": "No se encontró el grupo, por favor confirme la información e intente de nuevo.", + "30005": "El grupo aún contiene contenido, por favor vacíelo e intente de nuevo.", + "400": "Los parámetros de la solicitud no son correctos, por favor verifique y envíe nuevamente.", + "40002": "No se encontró un Token válido, por favor inicie sesión e intente de nuevo.", + "40003": "El Token actual no es válido, por favor obtenga uno nuevo e intente nuevamente.", + "40004": "El Token ha expirado, por favor inicie sesión nuevamente.", + "40005": "No tiene permiso de acceso, si tiene alguna duda, por favor contacte al administrador.", + "401": "Las solicitudes son demasiado frecuentes, por favor intente más tarde.", + "500": "El servidor encontró algunos problemas, por favor intente más tarde.", + "50001": "No se puede encontrar la información del cupón correspondiente, por favor verifique e intente de nuevo.", + "50002": "El cupón ya ha sido utilizado, no se puede usar nuevamente.", + "60001": "La suscripción ha expirado, por favor renueve para continuar usándola.", + "60002": "No se puede usar la suscripción por el momento, por favor intente más tarde.", + "70001": "El código de verificación es incorrecto, por favor ingréselo nuevamente.", + "80001": "La tarea no se agregó exitosamente a la cola, por favor intente de nuevo más tarde.", + "90001": "Por favor desactive el modo DEBUG e intente nuevamente.", + "undefined": "Ocurrió un error en el sistema, por favor intente más tarde." + }, + "table": { + "actions": "Acciones", + "asc": "Ascendente", + "desc": "Descendente", + "hide": "Ocultar", + "pageInfo": "Página {current} de {total}", + "rowsPerPage": "Filas por página", + "selectedItems": "{total} filas seleccionadas" + }, + "unlimited": "ilimitado" +} diff --git a/apps/admin/locales/es-ES/coupon.json b/apps/admin/locales/es-ES/coupon.json new file mode 100644 index 0000000..b1604f0 --- /dev/null +++ b/apps/admin/locales/es-ES/coupon.json @@ -0,0 +1,50 @@ +{ + "actions": "acciones", + "amount": "Cantidad", + "cancel": "Cancelar", + "code": "código", + "confirm": "Confirmar", + "confirmDelete": "¿Está seguro de que desea eliminarlo?", + "count": "cantidad", + "couponList": "Lista de cupones", + "create": "Crear", + "createCoupon": "Crear cupón", + "createSuccess": "Creación exitosa", + "delete": "Eliminar", + "deleteSuccess": "Eliminación exitosa", + "deleteWarning": "Una vez eliminado, los datos no se podrán recuperar. Proceda con precaución.", + "discount": "descuento", + "edit": "editar", + "editCoupon": "Editar cupón", + "enable": "Habilitar", + "form": { + "amountDiscount": "Descuento de cantidad", + "cancel": "Cancelar", + "confirm": "Confirmar", + "count": "Número máximo de usos", + "countPlaceholder": "Número máximo de usos (dejar en blanco para ilimitado)", + "customCouponCode": "Código de cupón personalizado", + "customCouponCodePlaceholder": "Código de cupón personalizado (dejar en blanco para generar automáticamente)", + "enterCouponName": "Por favor, ingrese el nombre del cupón", + "enterValue": "Por favor, ingrese el valor", + "expireTime": "Fecha de vencimiento", + "name": "Nombre", + "percentageDiscount": "Descuento porcentual", + "selectServer": "Por favor, seleccione la suscripción", + "selectTime": "Seleccionar tiempo", + "specifiedServer": "Suscripción especificada", + "startTime": "Hora de inicio", + "type": "Tipo de cupón", + "userLimit": "Número máximo de usos por usuario", + "userLimitPlaceholder": "Número máximo de usos por usuario (dejar en blanco para ilimitado)" + }, + "name": "Nombre", + "percentage": "porcentaje", + "remainingTimes": "Restante", + "subscribe": "Suscribirse", + "type": "tipo", + "unlimited": "Ilimitado", + "updateSuccess": "Actualización exitosa", + "usedTimes": "Veces utilizadas", + "validityPeriod": "Periodo de validez" +} diff --git a/apps/admin/locales/es-ES/document.json b/apps/admin/locales/es-ES/document.json new file mode 100644 index 0000000..a38f584 --- /dev/null +++ b/apps/admin/locales/es-ES/document.json @@ -0,0 +1,29 @@ +{ + "DocumentList": "Lista de Documentos", + "actions": "acciones", + "cancel": "Cancelar", + "confirm": "Confirmar", + "confirmDelete": "¿Está seguro de que desea eliminar?", + "create": "Crear", + "createDocument": "Crear documento", + "createSuccess": "Creación exitosa", + "delete": "Eliminar", + "deleteDescription": "Una vez eliminado, los datos no se podrán recuperar. Proceda con precaución.", + "deleteSuccess": "Eliminación exitosa", + "edit": "editar", + "editDocument": "Editar documento", + "form": { + "cancel": "Cancelar", + "confirm": "Confirmar", + "content": "Contenido", + "tags": "Categorías", + "tagsPlaceholder": "Por favor, use la tecla Enter o una coma (,) para separar e ingresar múltiples categorías", + "title": "Título", + "titlePlaceholder": "Por favor, ingrese" + }, + "show": "mostrar", + "tags": "Categorías", + "title": "Título", + "updateSuccess": "Actualización exitosa", + "updatedAt": "Actualizado en" +} diff --git a/apps/admin/locales/es-ES/index.json b/apps/admin/locales/es-ES/index.json new file mode 100644 index 0000000..9217470 --- /dev/null +++ b/apps/admin/locales/es-ES/index.json @@ -0,0 +1,29 @@ +{ + "email": "correo electrónico", + "month": "Este mes", + "monthDownloadTraffic": "Tráfico de descarga del mes", + "monthUploadTraffic": "Tráfico de subida del mes", + "newPurchase": "Nueva compra", + "nodeTraffic": "Tráfico de nodo", + "nodes": "nodos", + "offlineNodeCount": "Número de nodos fuera de línea", + "onlineIPCount": "Número de IPs en línea", + "onlineNodeCount": "Número de nodos en línea", + "pendingTickets": "Tickets pendientes", + "register": "registrar", + "repurchase": "recompra", + "revenueTitle": "Estadísticas de Ingresos", + "selectTypePlaceholder": "Seleccionar tipo", + "statisticsTitle": "Estadísticas", + "today": "hoy", + "todayDownloadTraffic": "Tráfico de descarga de hoy", + "todayUploadTraffic": "Tráfico de subida de hoy", + "total": "Total", + "totalIncome": "Ingresos totales", + "trafficRank": "Clasificación de tráfico", + "type": "tipo", + "userTitle": "Estadísticas de usuario", + "userTraffic": "Tráfico de usuarios", + "users": "usuarios", + "yesterday": "ayer" +} diff --git a/apps/admin/locales/es-ES/language.json b/apps/admin/locales/es-ES/language.json new file mode 100644 index 0000000..e0444ad --- /dev/null +++ b/apps/admin/locales/es-ES/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "Checo", + "de-DE": "Alemán", + "en-US": "inglés", + "es-ES": "español", + "es-MX": "Español (México)", + "fi-FI": "Finlandés", + "fr-FR": "Francés", + "hi-IN": "hindi", + "hu-HU": "húngaro", + "ja-JP": "Japonés", + "ko-KR": "Coreano", + "no-NO": "Noruego", + "pl-PL": "Polaco", + "pt-BR": "portugués (Brasil)", + "ro-RO": "Rumano", + "ru-RU": "Ruso", + "th-TH": "Tailandés", + "tr-TR": "turco", + "uk-UA": "Ucraniano", + "vi-VN": "Vietnamita", + "zh-CN": "Español (España)", + "zh-TW": "chino (tradicional)" +} diff --git a/apps/admin/locales/es-ES/menu.json b/apps/admin/locales/es-ES/menu.json new file mode 100644 index 0000000..31992c8 --- /dev/null +++ b/apps/admin/locales/es-ES/menu.json @@ -0,0 +1,18 @@ +{ + "Announcement Management": "Gestión de Anuncios", + "Coupon Management": "Gestión de Cupones", + "Dashboard": "Tablero", + "Document Management": "Gestión de Documentos", + "Finance": "Finanzas", + "Order Management": "Gestión de Pedidos", + "Payment Config": "Configuración de Pago", + "Server": "Servidor", + "Server Management": "Gestión de Servidores", + "Settings": "Configuración", + "Subscribe Management": "Gestión de Suscripciones", + "System Config": "Configuración del sistema", + "System Tool": "Herramienta del sistema", + "Ticket Management": "Gestión de Tickets", + "User": "Usuario", + "User Management": "Gestión de Usuarios" +} diff --git a/apps/admin/locales/es-ES/order.json b/apps/admin/locales/es-ES/order.json new file mode 100644 index 0000000..dbc1d2d --- /dev/null +++ b/apps/admin/locales/es-ES/order.json @@ -0,0 +1,37 @@ +{ + "amount": "Cantidad", + "couponDiscount": "Descuento de cupón", + "discount": "Monto de descuento", + "failed": "fallido", + "feeAmount": "Tarifa", + "method": "Método de pago", + "methods": { + "alipay_f2f": "Alipay (cara a cara)", + "balance": "Saldo", + "epay": "Epay", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "orderNumber": "Número de pedido", + "status": { + "0": "Estado", + "1": "Pendiente de pago", + "2": "Pagado", + "3": "Cancelado", + "4": "Cerrado", + "5": "Completado" + }, + "subscribe": "Suscribirse", + "subscribePrice": "Precio de suscripción", + "total": "Total", + "tradeNo": "Número de transacción", + "type": { + "0": "tipo", + "1": "nueva compra", + "2": "renovación", + "3": "restablecer datos", + "4": "recarga" + }, + "updateTime": "Hora de actualización", + "user": "usuario" +} diff --git a/apps/admin/locales/es-ES/payment.json b/apps/admin/locales/es-ES/payment.json new file mode 100644 index 0000000..b3c3cf9 --- /dev/null +++ b/apps/admin/locales/es-ES/payment.json @@ -0,0 +1,44 @@ +{ + "aliPay": "Pago con Alipay", + "alipayf2f": { + "appId": "ID de la aplicación de Alipay", + "invoiceName": "Nombre personalizado del producto", + "invoiceNameDescription": "Se mostrará en la factura de Alipay", + "privateKey": "Clave privada de Alipay", + "publicKey": "Clave pública de Alipay", + "sandbox": "Modo sandbox", + "sandboxDescription": "Habilitar el modo sandbox para probar el pago" + }, + "enable": "Habilitar", + "enableDescription": "Habilitar este método de pago", + "epay": { + "key": "CLAVE", + "pid": "PID", + "url": "URL" + }, + "feeMode": "Modo de cobro", + "feeModeDescription": "Modo de cobro de tarifas adicionales", + "feeModeItems": ["Sin tarifa", "Porcentaje", "Cantidad fija", "Ambos anteriores"], + "feePercent": "Porcentaje de tarifa (opcional)", + "feePercentDescription": "Se añade una tarifa sobre el monto del pedido", + "fixedFee": "Tarifa fija (opcional)", + "fixedFeeDescription": "Se añade una tarifa fija sobre el monto del pedido", + "iconUrl": "URL del icono (opcional)", + "iconUrlDescription": "Usado para mostrar en el frontend", + "inputPlaceholder": "Por favor, introduzca", + "key": "CLAVE", + "notifyUrl": "Dominio de notificación personalizado (opcional)", + "notifyUrlDescription": "La notificación del gateway se enviará a este dominio", + "payForRecommendations": "Pagar por recomendaciones", + "pid": "PID", + "saveSuccess": "Guardado exitosamente", + "showName": "Mostrar nombre", + "showNameDescription": "Usado para mostrar en el frontend", + "stripe": { + "publicKey": "CLAVE PÚBLICA", + "secretKey": "CLAVE SECRETA", + "webhookSecret": "FIRMA DE CLAVE WEBHOOK" + }, + "url": "URL", + "wechatPay": "Pago con WeChat" +} diff --git a/apps/admin/locales/es-ES/server.json b/apps/admin/locales/es-ES/server.json new file mode 100644 index 0000000..d3188d9 --- /dev/null +++ b/apps/admin/locales/es-ES/server.json @@ -0,0 +1,122 @@ +{ + "group": { + "actions": "Acciones", + "cancel": "Cancelar", + "confirm": "Confirmar", + "confirmDelete": "¿Está seguro de que desea eliminar?", + "create": "Crear", + "createNodeGroup": "Crear grupo de nodos", + "createdSuccessfully": "Creado con éxito", + "delete": "Eliminar", + "deleteWarning": "Los datos no se podrán recuperar después de la eliminación, por favor opere con precaución.", + "deletedSuccessfully": "Eliminado con éxito", + "description": "Descripción", + "edit": "Editar", + "editNodeGroup": "Editar grupo de nodos", + "form": { + "cancel": "Cancelar", + "confirm": "Confirmar", + "description": "Descripción", + "name": "Nombre" + }, + "name": "Nombre", + "title": "Lista de grupos de nodos", + "updatedAt": "Fecha de actualización" + }, + "node": { + "abnormal": "Anormal", + "actions": "Acciones", + "address": "Dirección", + "all": "Todo", + "cancel": "Cancelar", + "confirm": "Confirmar", + "confirmDelete": "¿Está seguro de que desea eliminar?", + "create": "Crear", + "createNode": "Crear nodo", + "createSuccess": "Creación exitosa", + "delete": "Eliminar", + "deleteSuccess": "Eliminación exitosa", + "deleteWarning": "Después de eliminar, los datos no se podrán recuperar. Proceda con precaución.", + "disk": "Disco", + "edit": "Editar", + "editNode": "Editar nodo", + "enable": "Habilitar", + "form": { + "allowInsecure": "Permitir inseguro", + "cancel": "Cancelar", + "confirm": "Confirmar", + "edit": "Editar", + "editSecurity": "Editar configuración de seguridad", + "enableRelay": "Habilitar retransmisión", + "enableTLS": "Habilitar TLS", + "encryptionMethod": "Método de encriptación", + "flow": "Algoritmo de control de flujo", + "hopInterval": "Intervalo de salto", + "hopPorts": "Puertos de salto", + "hopPortsPlaceholder": "Varios puertos separados por comas", + "name": "Nombre", + "nodeGroupId": "ID del grupo de nodos", + "obfsPassword": "Contraseña de ofuscación", + "obfsPasswordPlaceholder": "Dejar en blanco para no ofuscar", + "path": "Ruta", + "pleaseSelect": "Por favor seleccione", + "port": "Puerto del servidor", + "protocol": "Protocolo", + "relayHost": "Dirección de retransmisión", + "relayPort": "Puerto de retransmisión", + "remarks": "Observaciones", + "security": "Seguridad", + "securityConfig": "Configuración de seguridad", + "security_config": { + "fingerprint": "Huella digital", + "privateKey": "Clave privada", + "privateKeyPlaceholder": "Dejar en blanco para generar automáticamente", + "publicKey": "Clave pública", + "publicKeyPlaceholder": "Dejar en blanco para generar automáticamente", + "serverAddress": "Dirección del servidor", + "serverAddressPlaceholder": "Dirección objetivo de REALITY, por defecto usa SNI", + "serverName": "Nombre del servidor (SNI)", + "serverNamePlaceholder": "Obligatorio para REALITY, debe coincidir con el backend", + "serverPort": "Puerto del servidor", + "serverPortPlaceholder": "Puerto objetivo de REALITY, por defecto 443", + "shortId": "ID corto", + "shortIdPlaceholder": "Dejar en blanco para generar automáticamente", + "sni": "Indicación de nombre del servidor (SNI)" + }, + "selectEncryptionMethod": "Seleccionar método de encriptación", + "selectNodeGroup": "Seleccionar grupo de nodos", + "selectProtocol": "Seleccionar protocolo", + "serverAddr": "Dirección del servidor", + "serverName": "Nombre del servicio", + "speedLimit": "Límite de velocidad", + "speedLimitPlaceholder": "Sin límite", + "trafficRatio": "Tasa de tráfico", + "transport": "Protocolo de transporte", + "transportConfig": "Configuración del protocolo de transporte", + "transportHost": "Dirección del servicio de transporte", + "transportPath": "Ruta de transporte", + "transportServerName": "Nombre del servicio de transporte" + }, + "lastUpdated": "Última actualización", + "memory": "Memoria", + "name": "Nombre", + "node": "Nodo", + "nodeGroup": "Grupo de nodos", + "normal": "Normal", + "onlineCount": "Número de usuarios en línea", + "onlineUsers": "Usuarios en línea", + "rate": "Tasa", + "relay": "Retransmisión", + "serverAddr": "Dirección del servidor", + "speedLimit": "Límite de velocidad", + "status": "Estado", + "trafficRatio": "Tasa de tráfico", + "type": "Tipo", + "updateSuccess": "Actualización exitosa", + "updatedAt": "Fecha de actualización" + }, + "tabs": { + "node": "Nodo", + "nodeGroup": "Grupo de nodos" + } +} diff --git a/apps/admin/locales/es-ES/subscribe.json b/apps/admin/locales/es-ES/subscribe.json new file mode 100644 index 0000000..fbf98e1 --- /dev/null +++ b/apps/admin/locales/es-ES/subscribe.json @@ -0,0 +1,79 @@ +{ + "actions": "acciones", + "cancel": "Cancelar", + "confirm": "Confirmar", + "confirmDelete": "¿Estás seguro de que deseas eliminar?", + "create": "Crear", + "createSubscribe": "Crear suscripción", + "createSuccess": "Creación exitosa", + "delete": "eliminar", + "deleteSuccess": "Eliminación exitosa", + "deleteWarning": "Después de eliminar, los datos no se podrán recuperar. Proceda con precaución.", + "deviceLimit": "Número de dispositivos/unidad", + "edit": "editar", + "editSubscribe": "Editar suscripción", + "form": { + "cancel": "Cancelar", + "confirm": "Confirmar", + "description": "Descripción", + "deviceLimit": "Límite de dispositivos", + "discount": "Descuento", + "discountDescription": "Descuento basado en el precio unitario", + "discountMonths": "Meses", + "discountPercent": "Porcentaje de descuento", + "discount_price": "Precio con descuento", + "duration": "Duración (meses)", + "inventory": "Inventario", + "name": "Nombre", + "noLimit": "Sin límite", + "quota": "Cantidad de compra limitada", + "replacement": "Precio de reposición (cada vez)", + "selectSubscribeGroup": "Por favor, seleccione un grupo de suscripción", + "server": "Servidor", + "serverGroup": "Grupo de servidores", + "speedLimit": "Límite de velocidad (Mbps)", + "subscribeGroup": "Grupo de suscripción", + "traffic": "Tráfico", + "unit_price": "Precio mensual" + }, + "group": { + "actions": "Acciones", + "cancel": "Cancelar", + "confirm": "Confirmar", + "confirmDelete": "¿Confirmar eliminación?", + "create": "Crear", + "createSubscribeGroup": "Crear nuevo grupo de suscripción", + "createSuccess": "Creación exitosa", + "delete": "Eliminar", + "deleteSuccess": "Eliminación exitosa", + "deleteWarning": "Los datos no se pueden recuperar después de la eliminación, por favor opere con precaución.", + "description": "Descripción", + "edit": "Editar", + "editSubscribeGroup": "Editar grupo de suscripción", + "form": { + "cancel": "Cancelar", + "confirm": "Confirmar", + "description": "Descripción", + "name": "Nombre" + }, + "name": "Nombre", + "title": "Lista de grupos de suscripción", + "updateSuccess": "Actualización exitosa", + "updatedAt": "Fecha de actualización" + }, + "inventory": "inventario", + "name": "Nombre", + "quota": "Límite de compra/vez", + "replacement": "Restablecer precio/vez", + "sell": "Venta", + "show": "Mostrar en la página de inicio", + "subscribe": "Suscribirse", + "subscribeGroup": "Suscribirse al grupo", + "tabs": { + "subscribe": "Suscribirse", + "subscribeGroup": "Grupo de suscripción" + }, + "traffic": "tráfico", + "unitPrice": "Precio/mes", + "updateSuccess": "Actualización exitosa" +} diff --git a/apps/admin/locales/es-ES/system.json b/apps/admin/locales/es-ES/system.json new file mode 100644 index 0000000..8e0a370 --- /dev/null +++ b/apps/admin/locales/es-ES/system.json @@ -0,0 +1,156 @@ +{ + "currency": { + "accessKey": "Clave de acceso", + "accessKeyDescription": "Clave API de tasas de cambio proporcionada gratuitamente por https://exchangerate.host", + "currencySymbol": "Símbolo de moneda", + "currencySymbolDescription": "Solo para uso de visualización, al cambiarlo se modificarán todas las unidades monetarias en el sistema", + "currencyUnit": "Unidad monetaria", + "currencyUnitDescription": "Solo para uso de visualización, al cambiarlo se modificarán todas las unidades monetarias en el sistema", + "saveSuccess": "Guardado exitosamente" + }, + "email": { + "expiration_email_template": "Plantilla de notificación de expiración", + "expiration_email_templateDescription": "Las variables {after}.nombreVariable{before} en la plantilla serán reemplazadas por datos reales, asegúrese de conservar estas variables.", + "inputPlaceholder": "Por favor, introduzca el contenido...", + "maintenance_email_template": "Plantilla de notificación de mantenimiento", + "maintenance_email_templateDescription": "Las variables {after}.nombreVariable{before} en la plantilla serán reemplazadas por datos reales, asegúrese de conservar estas variables.", + "saveSuccess": "La configuración se ha guardado con éxito.", + "sendFailure": "El envío del correo de prueba ha fallado, por favor verifique la configuración.", + "sendSuccess": "El correo de prueba se ha enviado con éxito.", + "sendTestEmail": "Enviar correo de prueba", + "sendTestEmailDescription": "Envíe un correo de prueba para verificar si la configuración es correcta.", + "senderAddress": "Dirección del remitente", + "senderAddressDescription": "Dirección de correo electrónico predeterminada utilizada para enviar correos.", + "smtpAccount": "Cuenta SMTP", + "smtpAccountDescription": "Cuenta de correo utilizada para la autenticación.", + "smtpEncryptionMethod": "Método de encriptación SMTP", + "smtpEncryptionMethodDescription": "Seleccione si desea habilitar la encriptación SSL/TLS.", + "smtpPassword": "Contraseña SMTP", + "smtpPasswordDescription": "Contraseña de la cuenta SMTP.", + "smtpServerAddress": "Dirección del servidor SMTP", + "smtpServerAddressDescription": "Especifique la dirección del servidor utilizada para enviar correos.", + "smtpServerPort": "Puerto del servidor SMTP", + "smtpServerPortDescription": "Especifique el número de puerto para conectar al servidor SMTP.", + "verify_email_template": "Plantilla de verificación de correo", + "verify_email_templateDescription": "Las variables {after}.nombreVariable{before} en la plantilla serán reemplazadas por datos reales, asegúrese de conservar estas variables." + }, + "invite": { + "commissionFirstTimeOnly": "Comisión solo en la primera compra", + "commissionFirstTimeOnlyDescription": "Al habilitar, la comisión se genera solo en el primer pago del invitado. Puede configurar usuarios individuales en la gestión de usuarios.", + "enableForcedInvite": "Habilitar invitación forzada", + "enableForcedInviteDescription": "Al habilitar, solo los usuarios invitados pueden registrarse.", + "inputPlaceholder": "Por favor, ingrese", + "inviteCommissionPercentage": "Porcentaje de comisión por invitación", + "inviteCommissionPercentageDescription": "Proporción de comisión global predeterminada. Puede configurar proporciones individuales en la gestión de usuarios.", + "saveSuccess": "Guardado exitosamente" + }, + "node": { + "communicationKey": "Clave de comunicación", + "communicationKeyDescription": "Clave para la comunicación del nodo, para asegurar que los datos no sean interceptados por otros", + "inputPlaceholder": "Por favor, ingrese", + "nodePullInterval": "Intervalo de extracción del nodo", + "nodePullIntervalDescription": "Frecuencia con la que el nodo obtiene datos del panel (segundos)", + "nodePushInterval": "Intervalo de envío del nodo", + "nodePushIntervalDescription": "Frecuencia con la que el nodo envía datos al panel", + "saveSuccess": "Guardado exitosamente" + }, + "register": { + "emailSuffixWhitelist": "Lista blanca de sufijos de correo electrónico", + "emailSuffixWhitelistDescription": "Al habilitar, solo se podrán registrar correos electrónicos con los sufijos de la lista", + "emailVerification": "Verificación de correo electrónico", + "emailVerificationDescription": "Al habilitar, los usuarios necesitarán verificar su correo electrónico", + "ipRegistrationLimit": "Límite de registro por IP", + "ipRegistrationLimitDescription": "Al habilitar, las IP que cumplan con los requisitos de las reglas serán restringidas para registrarse. Tenga en cuenta que la determinación de IP puede causar problemas debido a CDN o proxies frontales", + "penaltyTime": "Tiempo de penalización (minutos)", + "penaltyTimeDescription": "El usuario debe esperar a que pase el tiempo de penalización para registrarse nuevamente", + "registrationLimitCount": "Conteo de límite de registro", + "registrationLimitCountDescription": "Habilitar penalización después de alcanzar el límite de registro", + "saveSuccess": "Guardado exitosamente", + "stopNewUserRegistration": "Detener registro de nuevos usuarios", + "stopNewUserRegistrationDescription": "Al habilitar, nadie podrá registrarse", + "trialRegistration": "Registro de prueba", + "trialRegistrationDescription": "Habilitar registro de prueba, por favor modifique primero el paquete de prueba y la duración", + "whitelistSuffixes": "Sufijos de lista blanca", + "whitelistSuffixesDescription": "Para la verificación de correo electrónico de registro, uno por línea", + "whitelistSuffixesPlaceholder": "Por favor, introduzca el sufijo de correo electrónico, uno por línea" + }, + "site": { + "logo": "LOGO", + "logoDescription": "Se utiliza para mostrar la ubicación donde se debe mostrar el LOGO", + "logoPlaceholder": "Por favor, introduce la URL del LOGO, no termines con '/'", + "saveSuccess": "Guardado exitosamente", + "siteDesc": "Descripción del sitio", + "siteDescDescription": "Se utiliza para mostrar la ubicación donde se debe mostrar la descripción del sitio", + "siteDescPlaceholder": "Por favor, introduce la descripción del sitio", + "siteDomain": "Dominio del sitio", + "siteDomainDescription": "La dirección de dominio actual del sitio web, por ejemplo, para usar en correos electrónicos", + "siteDomainPlaceholder": "Por favor, introduce la dirección del dominio, varios dominios deben estar en líneas separadas", + "siteName": "Nombre del sitio", + "siteNameDescription": "Se utiliza para mostrar la ubicación donde se debe mostrar el nombre del sitio", + "siteNamePlaceholder": "Por favor, introduce el nombre del sitio" + }, + "subscription": { + "add": "Agregar", + "app": "Aplicación", + "appDescription": "Configura la dirección de descarga de la APP y las reglas de importación, recuerda guardar después de modificar", + "appDownloadURL": "Dirección de descarga de la aplicación", + "appIcon": "Ícono de la aplicación", + "appName": "Nombre de la aplicación", + "delete": "Eliminar", + "reset": "Restablecer", + "save": "Guardar", + "saveSuccess": "Guardado exitoso", + "singleSubscriptionMode": "Modo de suscripción única", + "singleSubscriptionModeDescription": "Al activarlo, todos los planes de los usuarios se convertirán en saldo", + "subscriptionDomain": "Dominio de suscripción", + "subscriptionDomainDescription": "Usado para suscripción, si se deja en blanco se usará el dominio del sitio", + "subscriptionDomainPlaceholder": "Por favor, introduce el dominio de suscripción, varios dominios deben estar en líneas separadas", + "subscriptionPath": "Ruta de suscripción", + "subscriptionPathDescription": "Usado para suscripción, después de modificar asegúrate de reiniciar el sistema para garantizar el mejor rendimiento", + "subscriptionPathPlaceholder": "Por favor, introduce", + "subscriptionProtocol": "Protocolo de suscripción", + "wildcardResolution": "Resolución de comodines", + "wildcardResolutionDescription": "Usado para suscripción" + }, + "tabs": { + "currency": "Moneda", + "email": "Correo electrónico", + "invite": "Invitar", + "node": "Nodo", + "register": "Registrar", + "site": "Sitio", + "subscription": "Suscripción", + "telegram": "Telegram", + "tos": "Términos de servicio", + "verify": "Verificar" + }, + "telegram": { + "botToken": "Token del Bot", + "botTokenDescription": "Por favor, introduce el token proporcionado por Botfather", + "enableBotNotifications": "Habilitar notificaciones del bot", + "enableBotNotificationsDescription": "Una vez habilitado, el bot enviará notificaciones básicas a los administradores y usuarios vinculados a Telegram", + "groupURL": "URL del grupo", + "groupURLDescription": "Al completar, se mostrará en el lado del usuario o se usará donde sea necesario", + "inputPlaceholderBotToken": "0000000000:xxxxxxxxx_xxxxxxxxxxxxxxx", + "inputPlaceholderGroupURL": "https://t.me/xxxxxx", + "saveSuccess": "Guardado exitosamente" + }, + "tos": { + "saveSuccess": "Guardado exitosamente", + "title": "Términos del servicio" + }, + "verify": { + "inputPlaceholder": "Por favor ingrese", + "loginVerificationCode": "Código de verificación de inicio de sesión", + "loginVerificationCodeDescription": "Verificación humana al iniciar sesión", + "registrationVerificationCode": "Código de verificación de registro", + "registrationVerificationCodeDescription": "Verificación humana al registrarse", + "resetPasswordVerificationCode": "Código de verificación para restablecer contraseña", + "resetPasswordVerificationCodeDescription": "Verificación humana al restablecer la contraseña", + "saveSuccess": "Guardado exitosamente", + "turnstileSecret": "Clave secreta de Turnstile", + "turnstileSecretDescription": "Clave secreta de Turnstile proporcionada por Cloudflare", + "turnstileSiteKey": "Clave del sitio de Turnstile", + "turnstileSiteKeyDescription": "Clave del sitio de Turnstile proporcionada por Cloudflare" + } +} diff --git a/apps/admin/locales/es-ES/ticket.json b/apps/admin/locales/es-ES/ticket.json new file mode 100644 index 0000000..254c708 --- /dev/null +++ b/apps/admin/locales/es-ES/ticket.json @@ -0,0 +1,25 @@ +{ + "actions": "acciones", + "cancel": "Cancelar", + "check": "Verificar", + "close": "cerrar", + "closeSuccess": "Cierre exitoso", + "closeWarning": "Una vez cerrado, no se podrá operar en este ticket. Por favor, proceda con precaución.", + "confirm": "Confirmar", + "confirmClose": "¿Estás seguro de que deseas cerrar?", + "createdAt": "Fecha de creación", + "inputPlaceholder": "Por favor, introduzca su pregunta y le responderemos lo antes posible.", + "open": "abrir", + "reply": "respuesta", + "status": [ + "Estado", + "Pendiente de seguimiento", + "Pendiente de respuesta", + "Procesado", + "Cerrado" + ], + "ticketList": "Lista de tickets", + "title": "Título", + "updatedAt": "Actualizado en", + "user": "usuario" +} diff --git a/apps/admin/locales/es-ES/tool.json b/apps/admin/locales/es-ES/tool.json new file mode 100644 index 0000000..ae01a48 --- /dev/null +++ b/apps/admin/locales/es-ES/tool.json @@ -0,0 +1,26 @@ +{ + "caller": "Llamante", + "cancel": "Cancelar", + "confirmReboot": "Confirmar reinicio", + "confirmSystemReboot": "Confirmar reinicio del sistema", + "confirmSystemUpgrade": "Confirmar actualización del sistema", + "confirmUpgrade": "Confirmar actualización", + "currentVersion": "Versión actual del sistema:", + "errors": "Errores", + "ip": "IP", + "lastUpdated": "Última actualización:", + "none": "Ninguno", + "query": "Consulta", + "rebootDescription": "¿Está seguro de que desea reiniciar el sistema? Esta acción provocará una breve interrupción del servicio.", + "rebooting": "Reiniciando el sistema...", + "refreshLogs": "Actualizar registros", + "request": "Solicitud", + "status": "Estado", + "systemLogs": "Registros del sistema", + "systemReboot": "Reinicio del sistema", + "systemServices": "Servicios del sistema", + "systemUpgrade": "Actualización del sistema", + "upgradeDescription": "¿Está seguro de que desea realizar la actualización del sistema? Esta operación puede tardar unos minutos, durante los cuales el sistema podría no responder.", + "userAgent": "Agente de Usuario", + "viewLogsAndManage": "Ver los registros del sistema, realizar actualizaciones del sistema y reiniciar operaciones" +} diff --git a/apps/admin/locales/es-ES/user.json b/apps/admin/locales/es-ES/user.json new file mode 100644 index 0000000..2a7d6a8 --- /dev/null +++ b/apps/admin/locales/es-ES/user.json @@ -0,0 +1,38 @@ +{ + "actions": "acciones", + "balance": "Saldo", + "cancel": "Cancelar", + "confirm": "Confirmar", + "confirmDelete": "¿Está seguro de que desea eliminar?", + "create": "Crear", + "createSuccess": "Creación exitosa", + "createUser": "Crear usuario", + "createdAt": "Fecha de registro", + "delete": "eliminar", + "deleteDescription": "Después de eliminar, los datos no se podrán recuperar. Proceda con precaución.", + "deleteSuccess": "Eliminación exitosa", + "edit": "editar", + "editUser": "Editar usuario", + "email": "correo electrónico", + "enable": "Habilitar", + "form": { + "balance": "Saldo", + "balancePlaceholder": "Saldo", + "cancel": "Cancelar", + "confirm": "Confirmar", + "invalidEmailFormat": "Formato de correo electrónico no válido", + "inviteCode": "Código de invitación", + "inviteCodePlaceholder": "Por favor, introduzca el código de invitación (déjelo en blanco para generar automáticamente)", + "manager": "Administrador", + "password": "Contraseña", + "passwordPlaceholder": "Por favor, introduzca una nueva contraseña (puede dejarlo en blanco)", + "refererId": "ID del referente", + "refererIdPlaceholder": "Por favor, introduzca el ID del referente", + "userEmail": "Correo electrónico del usuario", + "userEmailPlaceholder": "Por favor, introduzca el correo electrónico del usuario" + }, + "referer": "Recomendador", + "updateSuccess": "Actualización exitosa", + "userList": "Lista de usuarios", + "userName": "Correo electrónico del usuario" +} diff --git a/apps/admin/locales/es-MX/announcement.json b/apps/admin/locales/es-MX/announcement.json new file mode 100644 index 0000000..adf114a --- /dev/null +++ b/apps/admin/locales/es-MX/announcement.json @@ -0,0 +1,30 @@ +{ + "actions": "acciones", + "announcementList": "Lista de anuncios", + "cancel": "Cancelar", + "confirm": "Confirmar", + "confirmDelete": "¿Está seguro de que desea eliminar?", + "content": "contenido", + "create": "Crear", + "createAnnouncement": "Crear anuncio", + "createSuccess": "Creación exitosa", + "delete": "eliminar", + "deleteDescription": "Una vez eliminado, los datos no se podrán recuperar. Proceda con precaución.", + "deleteSuccess": "Eliminación exitosa", + "edit": "editar", + "editAnnouncement": "Editar anuncio", + "enable": "Habilitar", + "form": { + "cancel": "Cancelar", + "confirm": "Confirmar", + "content": "Contenido", + "contentPlaceholder": "Por favor, ingresa el contenido del anuncio (se admite Markdown)", + "title": "Título", + "titlePlaceholder": "Por favor, ingresa" + }, + "hide": "Ocultar", + "show": "Mostrar", + "title": "Título", + "updateSuccess": "Actualización exitosa", + "updatedAt": "Actualizado en" +} diff --git a/apps/admin/locales/es-MX/auth.json b/apps/admin/locales/es-MX/auth.json new file mode 100644 index 0000000..28a7889 --- /dev/null +++ b/apps/admin/locales/es-MX/auth.json @@ -0,0 +1,39 @@ +{ + "check": { + "checking": "Verificando...", + "continue": "Continuar", + "description": "Por favor, ingresa tu correo electrónico para continuar con el inicio de sesión o registro.", + "email": "Por favor, ingresa una dirección de correo electrónico válida.", + "title": "Iniciar sesión/Registrarse", + "whitelist": "El dominio del correo electrónico no está en la lista blanca permitida." + }, + "login": { + "description": "Por favor, ingrese su información de cuenta para iniciar sesión.", + "forgotPassword": "¿Olvidó su contraseña?", + "success": "¡Inicio de sesión exitoso!", + "switchAccount": "Registrar/Cambiar cuenta", + "title": "Iniciar sesión" + }, + "logout": "Cerrar sesión", + "orWithEmail": "o usa correo electrónico", + "register": { + "description": "Crea una nueva cuenta, completa tu información para registrarte.", + "existingAccount": "¿Ya tienes una cuenta?", + "get": "Obtener", + "invite": "Código de invitación", + "message": "#### Estimado usuario,\n\nGracias por su interés y apoyo. Debido a un ajuste en la estrategia de operación del sitio, hemos cerrado la función de registro para nuevos usuarios. Durante este período, el uso por parte de los usuarios existentes no se verá afectado.\n\nNos comprometemos a ofrecerle un mejor servicio y experiencia, por lo que realizaremos una optimización completa del sistema y una actualización de funciones durante el cierre del registro. En el futuro, le daremos la bienvenida con contenido y servicios de mayor calidad.\n\nPor favor, siga nuestro sitio web y plataformas de redes sociales para obtener las últimas actualizaciones y notificaciones. Agradecemos su comprensión y apoyo.\n\nSi tiene alguna pregunta o necesita ayuda, no dude en ponerse en contacto con nuestro equipo de atención al cliente.\n\n**Nuevamente, gracias por su apoyo y comprensión.**", + "passwordMismatch": "Las contraseñas no coinciden", + "success": "¡Registro exitoso, has iniciado sesión automáticamente!", + "switchToLogin": "Iniciar sesión/restablecer correo electrónico", + "title": "Registro" + }, + "reset": { + "description": "Ingrese su dirección de correo electrónico para restablecer la contraseña.", + "existingAccount": "¿Ya tienes una cuenta?", + "get": "Obtener", + "success": "¡Contraseña restablecida con éxito, se ha cambiado automáticamente a iniciar sesión!", + "switchToLogin": "Iniciar sesión/Registrarse", + "title": "Restablecer contraseña" + }, + "tos": "Términos del servicio" +} diff --git a/apps/admin/locales/es-MX/common.json b/apps/admin/locales/es-MX/common.json new file mode 100644 index 0000000..8ea6ad5 --- /dev/null +++ b/apps/admin/locales/es-MX/common.json @@ -0,0 +1,60 @@ +{ + "billing": { + "description": "¡Patrocinar ayuda a que PPanel continúe publicando actualizaciones!", + "title": "Patrocinador" + }, + "empty": [ + "¡Imagina que este lugar está lleno de contenido increíble! Por ahora, solo puedes imaginarlo…", + "¡Esta área ha desaparecido misteriosamente, estamos invocándola de regreso!", + "Vaya, no ha pasado nada… ¡puedes agregar algo tú mismo!", + "Es como descubrir que no hay nadie en el escenario de un concierto… ¿por qué no subes a actuar?", + "¡Has encontrado un paraíso en blanco! ¿Quieres construir una casa?", + "Aquí no hay nada por ahora, ¡pero la creatividad comienza aquí!", + "No hay nada… pero no te preocupes, ¡esto es solo el comienzo!", + "Aquí había una gran sorpresa preparada, ¡pero se ha escapado!", + "Por ahora no hay nada, como si la despensa de bocadillos estuviera vacía.", + "¡Este espacio vacío está esperando a que su protagonista aparezca!" + ], + "request": { + "10001": "La consulta no fue exitosa, por favor intenta de nuevo más tarde o verifica tus condiciones.", + "10002": "La operación de actualización no fue exitosa, por favor intenta más tarde.", + "10003": "No se puede completar la operación de inserción por el momento, por favor intenta más tarde.", + "10004": "La operación de eliminación no se pudo completar, por favor intenta más tarde.", + "20001": "La información del usuario ya existe, por favor cambia la información e intenta de nuevo.", + "20002": "No se encontró al usuario, por favor verifica la información e intenta de nuevo.", + "20003": "La contraseña que ingresaste es incorrecta, por favor ingrésala de nuevo.", + "20004": "El usuario ha sido deshabilitado, si tienes dudas por favor contacta al servicio al cliente.", + "20005": "Saldo insuficiente, por favor recarga e intenta de nuevo.", + "20006": "La función de registro no está disponible por el momento, por favor intenta más tarde.", + "30001": "El nodo ya existe, por favor no lo agregues de nuevo.", + "30002": "No se encontró el nodo relacionado, por favor verifica e intenta de nuevo.", + "30003": "El grupo ya existe, por favor intenta usar otro nombre.", + "30004": "No se encontró el grupo, por favor confirma la información e intenta de nuevo.", + "30005": "El grupo aún contiene contenido, por favor vacíalo e intenta de nuevo.", + "400": "Los parámetros de la solicitud no son correctos, por favor verifica y vuelve a enviar.", + "40002": "No se encontró un Token válido, por favor inicia sesión e intenta de nuevo.", + "40003": "El Token actual no es válido, por favor obtén uno nuevo e intenta de nuevo.", + "40004": "El Token ha expirado, por favor inicia sesión de nuevo.", + "40005": "No tienes permiso de acceso, si tienes dudas por favor contacta al administrador.", + "401": "Las solicitudes son demasiado frecuentes, por favor intenta más tarde.", + "500": "El servidor encontró algunos problemas, por favor intenta más tarde.", + "50001": "No se puede encontrar la información del cupón correspondiente, por favor verifica e intenta de nuevo.", + "50002": "El cupón ya ha sido utilizado, no se puede usar de nuevo.", + "60001": "La suscripción ha expirado, por favor renueva para continuar usando.", + "60002": "No se puede usar la suscripción por el momento, por favor intenta más tarde.", + "70001": "El código de verificación es incorrecto, por favor ingrésalo de nuevo.", + "80001": "La tarea no se agregó exitosamente a la cola, por favor intenta de nuevo más tarde.", + "90001": "Por favor desactiva el modo DEBUG e intenta de nuevo.", + "undefined": "Ocurrió un error en el sistema, por favor intenta de nuevo más tarde." + }, + "table": { + "actions": "Acciones", + "asc": "Ascendente", + "desc": "Descendente", + "hide": "Ocultar", + "pageInfo": "Página {current} de {total}", + "rowsPerPage": "Filas por página", + "selectedItems": "{total} filas seleccionadas" + }, + "unlimited": "Ilimitado" +} diff --git a/apps/admin/locales/es-MX/coupon.json b/apps/admin/locales/es-MX/coupon.json new file mode 100644 index 0000000..d006d2f --- /dev/null +++ b/apps/admin/locales/es-MX/coupon.json @@ -0,0 +1,50 @@ +{ + "actions": "acciones", + "amount": "Monto", + "cancel": "Cancelar", + "code": "código", + "confirm": "Confirmar", + "confirmDelete": "¿Está seguro de que desea eliminarlo?", + "count": "cantidad", + "couponList": "Lista de cupones", + "create": "Crear", + "createCoupon": "Crear cupón", + "createSuccess": "Creación exitosa", + "delete": "Eliminar", + "deleteSuccess": "Eliminación exitosa", + "deleteWarning": "Una vez eliminado, los datos no se podrán recuperar. Proceda con precaución.", + "discount": "descuento", + "edit": "editar", + "editCoupon": "Editar cupón", + "enable": "Habilitar", + "form": { + "amountDiscount": "Descuento de cantidad", + "cancel": "Cancelar", + "confirm": "Confirmar", + "count": "Número máximo de usos", + "countPlaceholder": "Número máximo de usos (dejar en blanco para ilimitado)", + "customCouponCode": "Código de cupón personalizado", + "customCouponCodePlaceholder": "Código de cupón personalizado (dejar en blanco para generar automáticamente)", + "enterCouponName": "Por favor ingrese el nombre del cupón", + "enterValue": "Por favor ingrese el valor", + "expireTime": "Fecha de vencimiento", + "name": "Nombre", + "percentageDiscount": "Descuento porcentual", + "selectServer": "Por favor seleccione la suscripción", + "selectTime": "Seleccionar tiempo", + "specifiedServer": "Suscripción especificada", + "startTime": "Hora de inicio", + "type": "Tipo de cupón", + "userLimit": "Número máximo de usos por usuario", + "userLimitPlaceholder": "Número máximo de usos por usuario (dejar en blanco para ilimitado)" + }, + "name": "Nombre", + "percentage": "porcentaje", + "remainingTimes": "Restante", + "subscribe": "Suscribirse", + "type": "tipo", + "unlimited": "Ilimitado", + "updateSuccess": "Actualización exitosa", + "usedTimes": "Veces usadas", + "validityPeriod": "Periodo de validez" +} diff --git a/apps/admin/locales/es-MX/document.json b/apps/admin/locales/es-MX/document.json new file mode 100644 index 0000000..7271c50 --- /dev/null +++ b/apps/admin/locales/es-MX/document.json @@ -0,0 +1,29 @@ +{ + "DocumentList": "Lista de Documentos", + "actions": "acciones", + "cancel": "Cancelar", + "confirm": "Confirmar", + "confirmDelete": "¿Está seguro de que desea eliminar?", + "create": "Crear", + "createDocument": "Crear documento", + "createSuccess": "Creación exitosa", + "delete": "Eliminar", + "deleteDescription": "Una vez eliminado, los datos no se podrán recuperar. Proceda con precaución.", + "deleteSuccess": "Eliminación exitosa", + "edit": "editar", + "editDocument": "Editar documento", + "form": { + "cancel": "Cancelar", + "confirm": "Confirmar", + "content": "Contenido", + "tags": "Categorías", + "tagsPlaceholder": "Por favor, usa la tecla Enter o una coma (,) para separar e ingresar múltiples categorías", + "title": "Título", + "titlePlaceholder": "Por favor, ingresa" + }, + "show": "Mostrar", + "tags": "Categorías", + "title": "Título", + "updateSuccess": "Actualización exitosa", + "updatedAt": "Actualizado en" +} diff --git a/apps/admin/locales/es-MX/index.json b/apps/admin/locales/es-MX/index.json new file mode 100644 index 0000000..ee232ed --- /dev/null +++ b/apps/admin/locales/es-MX/index.json @@ -0,0 +1,29 @@ +{ + "email": "correo electrónico", + "month": "Este mes", + "monthDownloadTraffic": "Tráfico de descarga del mes", + "monthUploadTraffic": "Tráfico de carga de este mes", + "newPurchase": "Nueva compra", + "nodeTraffic": "Tráfico de nodo", + "nodes": "nodos", + "offlineNodeCount": "Número de nodos fuera de línea", + "onlineIPCount": "Número de IPs en línea", + "onlineNodeCount": "Número de nodos en línea", + "pendingTickets": "Tickets pendientes", + "register": "Registrarse", + "repurchase": "recompra", + "revenueTitle": "Estadísticas de Ingresos", + "selectTypePlaceholder": "Seleccionar tipo", + "statisticsTitle": "Estadísticas", + "today": "hoy", + "todayDownloadTraffic": "Tráfico de descarga de hoy", + "todayUploadTraffic": "Tráfico de carga de hoy", + "total": "Total", + "totalIncome": "Ingreso total", + "trafficRank": "Clasificación de tráfico", + "type": "tipo", + "userTitle": "Estadísticas del Usuario", + "userTraffic": "Tráfico de usuarios", + "users": "usuarios", + "yesterday": "Ayer" +} diff --git a/apps/admin/locales/es-MX/language.json b/apps/admin/locales/es-MX/language.json new file mode 100644 index 0000000..ac0372b --- /dev/null +++ b/apps/admin/locales/es-MX/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "Checo", + "de-DE": "Alemán", + "en-US": "inglés", + "es-ES": "español", + "es-MX": "Español (México)", + "fi-FI": "Finlandés", + "fr-FR": "Francés", + "hi-IN": "Hindi", + "hu-HU": "Húngaro", + "ja-JP": "Japonés", + "ko-KR": "Coreano", + "no-NO": "Noruego", + "pl-PL": "Polaco", + "pt-BR": "portugués (Brasil)", + "ro-RO": "Rumano", + "ru-RU": "Ruso", + "th-TH": "Tailandés", + "tr-TR": "turco", + "uk-UA": "Ucraniano", + "vi-VN": "Vietnamita", + "zh-CN": "español (México)", + "zh-TW": "Chino (Tradicional)" +} diff --git a/apps/admin/locales/es-MX/menu.json b/apps/admin/locales/es-MX/menu.json new file mode 100644 index 0000000..5c8390f --- /dev/null +++ b/apps/admin/locales/es-MX/menu.json @@ -0,0 +1,18 @@ +{ + "Announcement Management": "Gestión de Anuncios", + "Coupon Management": "Gestión de Cupones", + "Dashboard": "Tablero", + "Document Management": "Gestión de Documentos", + "Finance": "Finanzas", + "Order Management": "Gestión de Pedidos", + "Payment Config": "Configuración de Pago", + "Server": "Servidor", + "Server Management": "Gestión de Servidores", + "Settings": "Configuración", + "Subscribe Management": "Gestión de Suscripciones", + "System Config": "Configuración del Sistema", + "System Tool": "Herramienta del sistema", + "Ticket Management": "Gestión de Tickets", + "User": "Usuario", + "User Management": "Gestión de Usuarios" +} diff --git a/apps/admin/locales/es-MX/order.json b/apps/admin/locales/es-MX/order.json new file mode 100644 index 0000000..7028177 --- /dev/null +++ b/apps/admin/locales/es-MX/order.json @@ -0,0 +1,37 @@ +{ + "amount": "Monto", + "couponDiscount": "Descuento de cupón", + "discount": "Monto de descuento", + "failed": "fallido", + "feeAmount": "Cuota", + "method": "Método de pago", + "methods": { + "alipay_f2f": "Alipay (cara a cara)", + "balance": "Saldo", + "epay": "Epay", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "orderNumber": "Número de pedido", + "status": { + "0": "Estado", + "1": "Pendiente de pago", + "2": "Pagado", + "3": "Cancelado", + "4": "Cerrado", + "5": "Completado" + }, + "subscribe": "Suscribirse", + "subscribePrice": "Precio de suscripción", + "total": "Total", + "tradeNo": "Número de transacción", + "type": { + "0": "Tipo", + "1": "Nueva compra", + "2": "Renovación", + "3": "Restablecer datos", + "4": "Recarga" + }, + "updateTime": "Hora de actualización", + "user": "usuario" +} diff --git a/apps/admin/locales/es-MX/payment.json b/apps/admin/locales/es-MX/payment.json new file mode 100644 index 0000000..dfb6cf6 --- /dev/null +++ b/apps/admin/locales/es-MX/payment.json @@ -0,0 +1,44 @@ +{ + "aliPay": "Pago con Alipay", + "alipayf2f": { + "appId": "ID de la aplicación de Alipay", + "invoiceName": "Nombre personalizado del producto", + "invoiceNameDescription": "Se mostrará en la factura de Alipay", + "privateKey": "Clave privada de Alipay", + "publicKey": "Clave pública de Alipay", + "sandbox": "Modo sandbox", + "sandboxDescription": "Habilitar el modo sandbox para probar el pago" + }, + "enable": "Habilitar", + "enableDescription": "Habilitar este método de pago", + "epay": { + "key": "CLAVE", + "pid": "PID", + "url": "URL" + }, + "feeMode": "Modo de cobro", + "feeModeDescription": "Modo de cobro de tarifas adicionales", + "feeModeItems": ["Sin tarifa", "Porcentaje", "Cantidad fija", "Ambos"], + "feePercent": "Porcentaje de tarifa (opcional)", + "feePercentDescription": "Se añade una tarifa sobre el monto del pedido", + "fixedFee": "Cuota fija (opcional)", + "fixedFeeDescription": "Agregar una tarifa fija sobre el monto del pedido", + "iconUrl": "URL del ícono (opcional)", + "iconUrlDescription": "Usado para mostrar en el frontend", + "inputPlaceholder": "Por favor ingrese", + "key": "LLAVE", + "notifyUrl": "Dominio de notificación personalizado (opcional)", + "notifyUrlDescription": "La notificación del gateway se enviará a este dominio", + "payForRecommendations": "Pagar por recomendaciones", + "pid": "PID", + "saveSuccess": "Guardado exitoso", + "showName": "Mostrar nombre", + "showNameDescription": "Usado para mostrar en el frontend", + "stripe": { + "publicKey": "CLAVE PÚBLICA", + "secretKey": "CLAVE SECRETA", + "webhookSecret": "FIRMA DE SECRETO DE WEBHOOK" + }, + "url": "URL", + "wechatPay": "WeChat Pay" +} diff --git a/apps/admin/locales/es-MX/server.json b/apps/admin/locales/es-MX/server.json new file mode 100644 index 0000000..5f52cbb --- /dev/null +++ b/apps/admin/locales/es-MX/server.json @@ -0,0 +1,122 @@ +{ + "group": { + "actions": "Acciones", + "cancel": "Cancelar", + "confirm": "Confirmar", + "confirmDelete": "¿Está seguro de que desea eliminar?", + "create": "Crear", + "createNodeGroup": "Crear grupo de nodos", + "createdSuccessfully": "Creación exitosa", + "delete": "Eliminar", + "deleteWarning": "Los datos no se podrán recuperar después de la eliminación, proceda con precaución.", + "deletedSuccessfully": "Eliminación exitosa", + "description": "Descripción", + "edit": "Editar", + "editNodeGroup": "Editar grupo de nodos", + "form": { + "cancel": "Cancelar", + "confirm": "Confirmar", + "description": "Descripción", + "name": "Nombre" + }, + "name": "Nombre", + "title": "Lista de grupos de nodos", + "updatedAt": "Fecha de actualización" + }, + "node": { + "abnormal": "Anormal", + "actions": "Acciones", + "address": "Dirección", + "all": "Todo", + "cancel": "Cancelar", + "confirm": "Confirmar", + "confirmDelete": "¿Estás seguro de que deseas eliminar?", + "create": "Crear", + "createNode": "Crear nodo", + "createSuccess": "Creación exitosa", + "delete": "Eliminar", + "deleteSuccess": "Eliminación exitosa", + "deleteWarning": "Después de eliminar, los datos no se podrán recuperar. Proceda con precaución.", + "disk": "Disco", + "edit": "Editar", + "editNode": "Editar nodo", + "enable": "Habilitar", + "form": { + "allowInsecure": "Permitir inseguro", + "cancel": "Cancelar", + "confirm": "Confirmar", + "edit": "Editar", + "editSecurity": "Editar configuración de seguridad", + "enableRelay": "Habilitar retransmisión", + "enableTLS": "Habilitar TLS", + "encryptionMethod": "Método de encriptación", + "flow": "Algoritmo de control de flujo", + "hopInterval": "Intervalo de salto", + "hopPorts": "Puertos de salto", + "hopPortsPlaceholder": "Varios puertos separados por comas", + "name": "Nombre", + "nodeGroupId": "ID del grupo de nodos", + "obfsPassword": "Contraseña de ofuscación", + "obfsPasswordPlaceholder": "Dejar en blanco para no ofuscar", + "path": "Ruta", + "pleaseSelect": "Por favor seleccione", + "port": "Puerto del servidor", + "protocol": "Protocolo", + "relayHost": "Dirección de retransmisión", + "relayPort": "Puerto de retransmisión", + "remarks": "Comentarios", + "security": "Seguridad", + "securityConfig": "Configuración de seguridad", + "security_config": { + "fingerprint": "Huella digital", + "privateKey": "Clave privada", + "privateKeyPlaceholder": "Dejar en blanco para generar automáticamente", + "publicKey": "Clave pública", + "publicKeyPlaceholder": "Dejar en blanco para generar automáticamente", + "serverAddress": "Dirección del servidor", + "serverAddressPlaceholder": "Dirección objetivo de REALITY, por defecto usa SNI", + "serverName": "Nombre del servidor (SNI)", + "serverNamePlaceholder": "Obligatorio para REALITY, debe coincidir con el backend", + "serverPort": "Puerto del servidor", + "serverPortPlaceholder": "Puerto objetivo de REALITY, por defecto 443", + "shortId": "ID corto", + "shortIdPlaceholder": "Dejar en blanco para generar automáticamente", + "sni": "Indicación de nombre del servidor (SNI)" + }, + "selectEncryptionMethod": "Seleccionar método de encriptación", + "selectNodeGroup": "Seleccionar grupo de nodos", + "selectProtocol": "Seleccionar protocolo", + "serverAddr": "Dirección del servidor", + "serverName": "Nombre del servicio", + "speedLimit": "Límite de velocidad", + "speedLimitPlaceholder": "Sin límite", + "trafficRatio": "Tasa de tráfico", + "transport": "Protocolo de transporte", + "transportConfig": "Configuración del protocolo de transporte", + "transportHost": "Dirección del servicio de transporte", + "transportPath": "Ruta de transporte", + "transportServerName": "Nombre del servicio de transporte" + }, + "lastUpdated": "Última actualización", + "memory": "Memoria", + "name": "Nombre", + "node": "Nodo", + "nodeGroup": "Grupo de nodos", + "normal": "Normal", + "onlineCount": "Número de personas en línea", + "onlineUsers": "Usuarios en línea", + "rate": "Tasa", + "relay": "Retransmisión", + "serverAddr": "Dirección del servidor", + "speedLimit": "Límite de velocidad", + "status": "Estado", + "trafficRatio": "Tasa de tráfico", + "type": "Tipo", + "updateSuccess": "Actualización exitosa", + "updatedAt": "Fecha de actualización" + }, + "tabs": { + "node": "Nodo", + "nodeGroup": "Grupo de nodos" + } +} diff --git a/apps/admin/locales/es-MX/subscribe.json b/apps/admin/locales/es-MX/subscribe.json new file mode 100644 index 0000000..42a03ba --- /dev/null +++ b/apps/admin/locales/es-MX/subscribe.json @@ -0,0 +1,79 @@ +{ + "actions": "acciones", + "cancel": "Cancelar", + "confirm": "Confirmar", + "confirmDelete": "¿Estás seguro de que deseas eliminar?", + "create": "Crear", + "createSubscribe": "Crear suscripción", + "createSuccess": "Creación exitosa", + "delete": "Eliminar", + "deleteSuccess": "Eliminación exitosa", + "deleteWarning": "Después de eliminar, los datos no se podrán recuperar. Proceda con precaución.", + "deviceLimit": "Número de dispositivos/unidad", + "edit": "editar", + "editSubscribe": "Editar suscripción", + "form": { + "cancel": "Cancelar", + "confirm": "Confirmar", + "description": "Descripción", + "deviceLimit": "Límite de dispositivos", + "discount": "Descuento", + "discountDescription": "Descuento basado en el precio unitario", + "discountMonths": "Meses", + "discountPercent": "Porcentaje de descuento", + "discount_price": "Precio con descuento", + "duration": "Duración (meses)", + "inventory": "Inventario", + "name": "Nombre", + "noLimit": "Sin límite", + "quota": "Cantidad máxima de compra", + "replacement": "Precio de reposición (cada vez)", + "selectSubscribeGroup": "Por favor seleccione un grupo de suscripción", + "server": "Servidor", + "serverGroup": "Grupo de servidores", + "speedLimit": "Límite de velocidad (Mbps)", + "subscribeGroup": "Grupo de suscripción", + "traffic": "Tráfico", + "unit_price": "Precio mensual" + }, + "group": { + "actions": "Acciones", + "cancel": "Cancelar", + "confirm": "Confirmar", + "confirmDelete": "¿Confirmar eliminación?", + "create": "Crear", + "createSubscribeGroup": "Crear nuevo grupo de suscripción", + "createSuccess": "Creación exitosa", + "delete": "Eliminar", + "deleteSuccess": "Eliminación exitosa", + "deleteWarning": "Los datos no se pueden recuperar después de la eliminación, por favor opere con precaución.", + "description": "Descripción", + "edit": "Editar", + "editSubscribeGroup": "Editar grupo de suscripción", + "form": { + "cancel": "Cancelar", + "confirm": "Confirmar", + "description": "Descripción", + "name": "Nombre" + }, + "name": "Nombre", + "title": "Lista de grupos de suscripción", + "updateSuccess": "Actualización exitosa", + "updatedAt": "Fecha de actualización" + }, + "inventory": "inventario", + "name": "Nombre", + "quota": "Límite de compra/vez", + "replacement": "Restablecer precio/vez", + "sell": "venta", + "show": "Mostrar en la página de inicio", + "subscribe": "Suscribirse", + "subscribeGroup": "Suscribirse al grupo", + "tabs": { + "subscribe": "Suscribirse", + "subscribeGroup": "Grupo de suscripción" + }, + "traffic": "tráfico", + "unitPrice": "Precio/mes", + "updateSuccess": "Actualización exitosa" +} diff --git a/apps/admin/locales/es-MX/system.json b/apps/admin/locales/es-MX/system.json new file mode 100644 index 0000000..3c089bb --- /dev/null +++ b/apps/admin/locales/es-MX/system.json @@ -0,0 +1,156 @@ +{ + "currency": { + "accessKey": "Clave de acceso", + "accessKeyDescription": "https://exchangerate.host proporciona una clave API gratuita para tasas de cambio", + "currencySymbol": "Símbolo de moneda", + "currencySymbolDescription": "Solo para fines de visualización, cambiarlo alterará todas las unidades monetarias en el sistema", + "currencyUnit": "Unidad monetaria", + "currencyUnitDescription": "Solo para fines de visualización, cambiarlo alterará todas las unidades monetarias en el sistema", + "saveSuccess": "Guardado exitosamente" + }, + "email": { + "expiration_email_template": "Plantilla de notificación de expiración", + "expiration_email_templateDescription": "Las variables {after}.nombreVariable{before} en la plantilla serán reemplazadas por datos reales, asegúrese de conservar estas variables.", + "inputPlaceholder": "Por favor, ingrese contenido...", + "maintenance_email_template": "Plantilla de notificación de mantenimiento", + "maintenance_email_templateDescription": "Las variables {after}.nombreVariable{before} en la plantilla serán reemplazadas por datos reales, asegúrese de conservar estas variables.", + "saveSuccess": "La configuración se ha guardado exitosamente.", + "sendFailure": "El envío del correo de prueba falló, por favor verifique la configuración.", + "sendSuccess": "El correo de prueba se ha enviado exitosamente.", + "sendTestEmail": "Enviar correo de prueba", + "sendTestEmailDescription": "Envía un correo de prueba para verificar si la configuración es correcta.", + "senderAddress": "Dirección del remitente", + "senderAddressDescription": "La dirección de correo predeterminada utilizada para enviar correos.", + "smtpAccount": "Cuenta SMTP", + "smtpAccountDescription": "Cuenta de correo utilizada para la autenticación.", + "smtpEncryptionMethod": "Método de encriptación SMTP", + "smtpEncryptionMethodDescription": "Seleccione si desea habilitar la encriptación SSL/TLS.", + "smtpPassword": "Contraseña SMTP", + "smtpPasswordDescription": "La contraseña de la cuenta SMTP.", + "smtpServerAddress": "Dirección del servidor SMTP", + "smtpServerAddressDescription": "Especifique la dirección del servidor utilizada para enviar correos.", + "smtpServerPort": "Puerto del servidor SMTP", + "smtpServerPortDescription": "Especifique el número de puerto para conectar al servidor SMTP.", + "verify_email_template": "Plantilla de verificación de correo", + "verify_email_templateDescription": "Las variables {after}.nombreVariable{before} en la plantilla serán reemplazadas por datos reales, asegúrese de conservar estas variables." + }, + "invite": { + "commissionFirstTimeOnly": "Comisión solo en la primera compra", + "commissionFirstTimeOnlyDescription": "Al habilitar, la comisión se genera solo en el primer pago del invitado. Puede configurar usuarios individuales en la gestión de usuarios.", + "enableForcedInvite": "Habilitar invitación forzada", + "enableForcedInviteDescription": "Al habilitar, solo los usuarios invitados pueden registrarse.", + "inputPlaceholder": "Por favor ingrese", + "inviteCommissionPercentage": "Porcentaje de comisión por invitación", + "inviteCommissionPercentageDescription": "Proporción de comisión global predeterminada. Puede configurar proporciones individuales en la gestión de usuarios.", + "saveSuccess": "Guardado exitosamente" + }, + "node": { + "communicationKey": "Clave de comunicación", + "communicationKeyDescription": "Clave para la comunicación del nodo, para asegurar que los datos no sean interceptados por otros", + "inputPlaceholder": "Por favor ingrese", + "nodePullInterval": "Intervalo de extracción del nodo", + "nodePullIntervalDescription": "Frecuencia con la que el nodo obtiene datos del panel (segundos)", + "nodePushInterval": "Intervalo de envío del nodo", + "nodePushIntervalDescription": "Frecuencia con la que el nodo envía datos al panel", + "saveSuccess": "Guardado exitosamente" + }, + "register": { + "emailSuffixWhitelist": "Lista blanca de sufijos de correo electrónico", + "emailSuffixWhitelistDescription": "Al habilitar, solo se podrán registrar correos electrónicos con los sufijos de la lista", + "emailVerification": "Verificación de correo electrónico", + "emailVerificationDescription": "Al habilitar, los usuarios deberán verificar su correo electrónico", + "ipRegistrationLimit": "Límite de registro por IP", + "ipRegistrationLimitDescription": "Al habilitar, las IP que cumplan con los requisitos de las reglas serán restringidas para registrarse. Tenga en cuenta que la determinación de IP puede causar problemas debido a CDN o proxies frontales", + "penaltyTime": "Tiempo de penalización (minutos)", + "penaltyTimeDescription": "El usuario debe esperar a que pase el tiempo de penalización para registrarse nuevamente", + "registrationLimitCount": "Conteo de límite de registro", + "registrationLimitCountDescription": "Habilitar penalización después de alcanzar el límite de registro", + "saveSuccess": "Guardado exitosamente", + "stopNewUserRegistration": "Detener registro de nuevos usuarios", + "stopNewUserRegistrationDescription": "Al habilitar, nadie podrá registrarse", + "trialRegistration": "Registro de prueba", + "trialRegistrationDescription": "Habilitar registro de prueba, por favor modifique primero el paquete y la duración de la prueba", + "whitelistSuffixes": "Sufijos de lista blanca", + "whitelistSuffixesDescription": "Para la verificación de correo electrónico de registro, uno por línea", + "whitelistSuffixesPlaceholder": "Por favor ingrese los sufijos de correo electrónico, uno por línea" + }, + "site": { + "logo": "LOGO", + "logoDescription": "Usado para mostrar la ubicación donde se debe exhibir el LOGO", + "logoPlaceholder": "Por favor, ingresa la URL del LOGO, no termines con '/'", + "saveSuccess": "Guardado exitosamente", + "siteDesc": "Descripción del sitio", + "siteDescDescription": "Usado para mostrar la ubicación donde se debe exhibir la descripción del sitio", + "siteDescPlaceholder": "Por favor, ingresa la descripción del sitio", + "siteDomain": "Dominio del sitio", + "siteDomainDescription": "La dirección de dominio del sitio web actual, por ejemplo, para usar en correos electrónicos", + "siteDomainPlaceholder": "Por favor, ingresa la dirección del dominio, múltiples dominios deben estar en líneas separadas", + "siteName": "Nombre del sitio", + "siteNameDescription": "Usado para mostrar la ubicación donde se debe exhibir el nombre del sitio", + "siteNamePlaceholder": "Por favor, ingresa el nombre del sitio" + }, + "subscription": { + "add": "Agregar", + "app": "Aplicación", + "appDescription": "Configura la dirección de descarga de la APP y las reglas de importación, recuerda guardar después de modificar", + "appDownloadURL": "Dirección de descarga de la aplicación", + "appIcon": "Ícono de la aplicación", + "appName": "Nombre de la aplicación", + "delete": "Eliminar", + "reset": "Restablecer", + "save": "Guardar", + "saveSuccess": "Guardado exitosamente", + "singleSubscriptionMode": "Modo de suscripción única", + "singleSubscriptionModeDescription": "Al activarlo, todos los planes de los usuarios se convertirán en saldo", + "subscriptionDomain": "Dominio de suscripción", + "subscriptionDomainDescription": "Usado para suscripción, si se deja en blanco se usará el dominio del sitio", + "subscriptionDomainPlaceholder": "Por favor ingresa el dominio de suscripción, múltiples dominios deben estar en líneas separadas", + "subscriptionPath": "Ruta de suscripción", + "subscriptionPathDescription": "Usado para suscripción, después de modificar asegúrate de reiniciar el sistema para garantizar el mejor rendimiento", + "subscriptionPathPlaceholder": "Por favor ingresa", + "subscriptionProtocol": "Protocolo de suscripción", + "wildcardResolution": "Resolución de comodines", + "wildcardResolutionDescription": "Usado para suscripción" + }, + "tabs": { + "currency": "Moneda", + "email": "Correo electrónico", + "invite": "Invitar", + "node": "Nodo", + "register": "Registrar", + "site": "Sitio", + "subscription": "Suscripción", + "telegram": "Telegram", + "tos": "Términos del servicio", + "verify": "Verificar" + }, + "telegram": { + "botToken": "Token del Bot", + "botTokenDescription": "Por favor, ingresa el token proporcionado por Botfather", + "enableBotNotifications": "Habilitar notificaciones del bot", + "enableBotNotificationsDescription": "Al habilitar, el bot enviará notificaciones básicas a los administradores y usuarios vinculados a Telegram", + "groupURL": "URL del grupo", + "groupURLDescription": "Al completar, se mostrará en el lado del usuario o se usará donde sea necesario", + "inputPlaceholderBotToken": "0000000000:xxxxxxxxx_xxxxxxxxxxxxxxx", + "inputPlaceholderGroupURL": "https://t.me/xxxxxx", + "saveSuccess": "Guardado exitosamente" + }, + "tos": { + "saveSuccess": "Guardado exitoso", + "title": "Términos del servicio" + }, + "verify": { + "inputPlaceholder": "Por favor ingrese", + "loginVerificationCode": "Código de verificación de inicio de sesión", + "loginVerificationCodeDescription": "Verificación humana al iniciar sesión", + "registrationVerificationCode": "Código de verificación de registro", + "registrationVerificationCodeDescription": "Verificación humana al registrarse", + "resetPasswordVerificationCode": "Código de verificación para restablecer contraseña", + "resetPasswordVerificationCodeDescription": "Verificación humana al restablecer la contraseña", + "saveSuccess": "Guardado exitosamente", + "turnstileSecret": "Clave secreta de Turnstile", + "turnstileSecretDescription": "Clave secreta de Turnstile proporcionada por Cloudflare", + "turnstileSiteKey": "Clave del sitio de Turnstile", + "turnstileSiteKeyDescription": "Clave del sitio de Turnstile proporcionada por Cloudflare" + } +} diff --git a/apps/admin/locales/es-MX/ticket.json b/apps/admin/locales/es-MX/ticket.json new file mode 100644 index 0000000..c244617 --- /dev/null +++ b/apps/admin/locales/es-MX/ticket.json @@ -0,0 +1,25 @@ +{ + "actions": "acciones", + "cancel": "Cancelar", + "check": "Revisar", + "close": "cerrar", + "closeSuccess": "Cierre exitoso", + "closeWarning": "Una vez cerrado, no se podrá operar esta orden de trabajo. Por favor, proceda con precaución.", + "confirm": "Confirmar", + "confirmClose": "¿Estás seguro de que deseas cerrar?", + "createdAt": "Fecha de creación", + "inputPlaceholder": "Por favor, ingrese su pregunta y le responderemos lo antes posible.", + "open": "abrir", + "reply": "respuesta", + "status": [ + "Estado", + "Pendiente de seguimiento", + "Pendiente de respuesta", + "Procesado", + "Cerrado" + ], + "ticketList": "Lista de tickets", + "title": "Título", + "updatedAt": "Actualizado en", + "user": "usuario" +} diff --git a/apps/admin/locales/es-MX/tool.json b/apps/admin/locales/es-MX/tool.json new file mode 100644 index 0000000..0651910 --- /dev/null +++ b/apps/admin/locales/es-MX/tool.json @@ -0,0 +1,26 @@ +{ + "caller": "Llamador", + "cancel": "Cancelar", + "confirmReboot": "Confirmar reinicio", + "confirmSystemReboot": "Confirmar reinicio del sistema", + "confirmSystemUpgrade": "Confirmar actualización del sistema", + "confirmUpgrade": "Confirmar actualización", + "currentVersion": "Versión actual del sistema:", + "errors": "Errores", + "ip": "IP", + "lastUpdated": "Última actualización:", + "none": "Ninguno", + "query": "Consulta", + "rebootDescription": "¿Está seguro de que desea reiniciar el sistema? Esta acción provocará una breve interrupción del servicio.", + "rebooting": "Reiniciando el sistema...", + "refreshLogs": "Actualizar registros", + "request": "Solicitud", + "status": "Estado", + "systemLogs": "Registros del sistema", + "systemReboot": "Reinicio del sistema", + "systemServices": "Servicios del sistema", + "systemUpgrade": "Actualización del sistema", + "upgradeDescription": "¿Está seguro de que desea realizar la actualización del sistema? Esta operación puede tardar unos minutos, durante los cuales el sistema podría no responder.", + "userAgent": "Agente de Usuario", + "viewLogsAndManage": "Ver los registros del sistema, realizar actualizaciones del sistema y reiniciar operaciones" +} diff --git a/apps/admin/locales/es-MX/user.json b/apps/admin/locales/es-MX/user.json new file mode 100644 index 0000000..bcabeab --- /dev/null +++ b/apps/admin/locales/es-MX/user.json @@ -0,0 +1,38 @@ +{ + "actions": "acciones", + "balance": "Saldo", + "cancel": "Cancelar", + "confirm": "Confirmar", + "confirmDelete": "¿Está seguro de que desea eliminar?", + "create": "Crear", + "createSuccess": "Creación exitosa", + "createUser": "Crear usuario", + "createdAt": "Fecha de registro", + "delete": "Eliminar", + "deleteDescription": "Después de eliminar, los datos no se pueden recuperar. Proceda con precaución.", + "deleteSuccess": "Eliminación exitosa", + "edit": "editar", + "editUser": "Editar usuario", + "email": "correo electrónico", + "enable": "Habilitar", + "form": { + "balance": "Saldo", + "balancePlaceholder": "Saldo", + "cancel": "Cancelar", + "confirm": "Confirmar", + "invalidEmailFormat": "Formato de correo electrónico no válido", + "inviteCode": "Código de invitación", + "inviteCodePlaceholder": "Ingrese el código de invitación (déjelo en blanco para generar automáticamente)", + "manager": "Administrador", + "password": "Contraseña", + "passwordPlaceholder": "Ingrese nueva contraseña (opcional)", + "refererId": "ID del referente", + "refererIdPlaceholder": "Ingrese ID del referente", + "userEmail": "Correo electrónico del usuario", + "userEmailPlaceholder": "Ingrese el correo electrónico del usuario" + }, + "referer": "Recomendador", + "updateSuccess": "Actualización exitosa", + "userList": "Lista de usuarios", + "userName": "Correo electrónico del usuario" +} diff --git a/apps/admin/locales/fi-FI/announcement.json b/apps/admin/locales/fi-FI/announcement.json new file mode 100644 index 0000000..55710c1 --- /dev/null +++ b/apps/admin/locales/fi-FI/announcement.json @@ -0,0 +1,30 @@ +{ + "actions": "toiminnot", + "announcementList": "Ilmoituslista", + "cancel": "Peruuta", + "confirm": "Vahvista", + "confirmDelete": "Oletko varma, että haluat poistaa?", + "content": "Sisältö", + "create": "Luo", + "createAnnouncement": "Luo ilmoitus", + "createSuccess": "Luonti onnistui", + "delete": "poista", + "deleteDescription": "Kun tiedot on poistettu, niitä ei voi palauttaa. Ole varovainen.", + "deleteSuccess": "Poisto onnistui", + "edit": "muokkaa", + "editAnnouncement": "Muokkaa ilmoitusta", + "enable": "Ota käyttöön", + "form": { + "cancel": "Peruuta", + "confirm": "Vahvista", + "content": "Sisältö", + "contentPlaceholder": "Syötä ilmoituksen sisältö (tukee Markdownia)", + "title": "Otsikko", + "titlePlaceholder": "Syötä" + }, + "hide": "piilota", + "show": "Näytä", + "title": "Otsikko", + "updateSuccess": "Päivitys onnistui", + "updatedAt": "Päivitetty" +} diff --git a/apps/admin/locales/fi-FI/auth.json b/apps/admin/locales/fi-FI/auth.json new file mode 100644 index 0000000..a554d0e --- /dev/null +++ b/apps/admin/locales/fi-FI/auth.json @@ -0,0 +1,39 @@ +{ + "check": { + "checking": "Tarkistetaan...", + "continue": "Jatka", + "description": "Syötä sähköpostiosoitteesi jatkaaksesi kirjautumista tai rekisteröitymistä.", + "email": "Anna kelvollinen sähköpostiosoite.", + "title": "Kirjaudu/Rekisteröidy", + "whitelist": "Sähköpostin verkkotunnus ei ole sallitussa luettelossa." + }, + "login": { + "description": "Ole hyvä ja syötä tilitietosi kirjautuaksesi sisään.", + "forgotPassword": "Unohditko salasanasi?", + "success": "Kirjautuminen onnistui!", + "switchAccount": "Rekisteröidy/Vaihda tiliä", + "title": "Kirjaudu sisään" + }, + "logout": "Kirjaudu ulos", + "orWithEmail": "tai käytä sähköpostia", + "register": { + "description": "Luo uusi tili täyttämällä tietosi rekisteröityäksesi.", + "existingAccount": "Onko sinulla jo tili?", + "get": "Hanki", + "invite": "Kutsukoodi", + "message": "#### Arvoisa käyttäjä,\n\nKiitos mielenkiinnostasi ja tuestasi. Sivuston toimintastrategian muutosten vuoksi olemme sulkeneet uusien käyttäjien rekisteröinnin. Tänä aikana nykyisten käyttäjien käyttö ei vaikutu millään tavalla.\n\nOlemme sitoutuneet tarjoamaan sinulle parempaa palvelua ja kokemusta, joten rekisteröinnin sulkemisen aikana suoritamme kattavan järjestelmän optimoinnin ja toiminnallisuuden päivityksen. Tulevaisuudessa toivotamme sinut tervetulleeksi entistä laadukkaamman sisällön ja palvelun kera.\n\nSeuraa verkkosivustoamme ja sosiaalisen median alustoja saadaksesi uusimmat päivitykset ja ilmoitukset. Kiitos ymmärryksestäsi ja tuestasi.\n\nJos sinulla on kysyttävää tai tarvitset apua, ota yhteyttä asiakaspalvelutiimiimme.\n\n**Kiitos vielä kerran tuestasi ja ymmärryksestäsi.**", + "passwordMismatch": "Salasanat eivät täsmää", + "success": "Rekisteröinti onnistui, olet kirjautunut automaattisesti!", + "switchToLogin": "Kirjaudu/sähköpostin nollaus", + "title": "Rekisteröidy" + }, + "reset": { + "description": "Anna sähköpostiosoitteesi salasanan palauttamiseksi.", + "existingAccount": "Onko sinulla jo tili?", + "get": "Hae", + "success": "Salasanan palautus onnistui, siirryttiin automaattisesti kirjautumiseen!", + "switchToLogin": "Kirjaudu/Rekisteröidy", + "title": "Palauta salasana" + }, + "tos": "Käyttöehdot" +} diff --git a/apps/admin/locales/fi-FI/common.json b/apps/admin/locales/fi-FI/common.json new file mode 100644 index 0000000..94c1f04 --- /dev/null +++ b/apps/admin/locales/fi-FI/common.json @@ -0,0 +1,60 @@ +{ + "billing": { + "description": "Sponsorointi auttaa PPanelia jatkamaan päivitysten julkaisua!", + "title": "Sponsori" + }, + "empty": [ + "Kuvittele, että täällä on täynnä upeaa sisältöä! Toistaiseksi joudut vain kuvittelemaan…", + "Tämä alue on mystisesti kadonnut, kutsumme sitä takaisin!", + "Voi ei, mitään ei tapahtunut… voit lisätä jotain itse!", + "Se on kuin konsertti, jossa lavalla ei ole ketään… haluaisitko esiintyä?", + "Olet löytänyt tyhjän paratiisin! Haluatko rakentaa talon?", + "Täällä ei ole vielä mitään, mutta luovuus alkaa tästä!", + "Ei mitään… mutta älä huoli, tämä on vasta alku!", + "Täällä oli alun perin suuri yllätys, mutta se karkasi!", + "Tällä hetkellä ei ole mitään, aivan kuin välipala-kaappi olisi tyhjennetty.", + "Tämä tyhjä tila odottaa päähenkilöään!" + ], + "request": { + "10001": "Kysely ei ole vielä onnistunut, yritä myöhemmin uudelleen tai tarkista ehtosi.", + "10002": "Päivitys ei onnistunut, yritä myöhemmin uudelleen.", + "10003": "Lisäystä ei voida suorittaa tällä hetkellä, yritä myöhemmin uudelleen.", + "10004": "Poisto ei onnistunut, yritä myöhemmin uudelleen.", + "20001": "Käyttäjätiedot ovat jo olemassa, vaihda tiedot ja yritä uudelleen.", + "20002": "Käyttäjää ei löytynyt, tarkista tiedot ja yritä uudelleen.", + "20003": "Syöttämäsi salasana on virheellinen, syötä se uudelleen.", + "20004": "Käyttäjä on estetty, ota yhteyttä asiakaspalveluun, jos sinulla on kysyttävää.", + "20005": "Saldo ei riitä, lataa lisää ja yritä uudelleen.", + "20006": "Rekisteröinti ei ole tällä hetkellä käytettävissä, yritä myöhemmin uudelleen.", + "30001": "Solmu on jo olemassa, älä lisää sitä uudelleen.", + "30002": "Solmua ei löytynyt, tarkista ja yritä uudelleen.", + "30003": "Ryhmä on jo olemassa, yritä käyttää toista nimeä.", + "30004": "Ryhmä ei löytynyt, tarkista tiedot ja yritä uudelleen.", + "30005": "Ryhmässä on vielä sisältöä, tyhjennä se ja yritä uudelleen.", + "400": "Pyynnön parametrit ovat virheellisiä, tarkista ja lähetä uudelleen.", + "40002": "Voimassa olevaa tunnusta ei löytynyt, kirjaudu sisään ja yritä uudelleen.", + "40003": "Nykyinen tunnus on virheellinen, hanki uusi ja yritä uudelleen.", + "40004": "Tunnus on vanhentunut, kirjaudu uudelleen sisään.", + "40005": "Sinulla ei ole käyttöoikeutta, ota yhteyttä ylläpitäjään, jos sinulla on kysyttävää.", + "401": "Pyyntöjä on tehty liian usein, yritä myöhemmin uudelleen.", + "500": "Palvelimella on ongelmia, yritä myöhemmin uudelleen.", + "50001": "Vastaavaa kuponkitietoa ei löytynyt, tarkista ja yritä uudelleen.", + "50002": "Kuponki on jo käytetty, sitä ei voi käyttää uudelleen.", + "60001": "Tilauksesi on vanhentunut, uusi tilaus ja käytä uudelleen.", + "60002": "Tilausta ei voi käyttää tällä hetkellä, yritä myöhemmin uudelleen.", + "70001": "Vahvistuskoodi on virheellinen, syötä se uudelleen.", + "80001": "Tehtävää ei lisätty jonoon, yritä myöhemmin uudelleen.", + "90001": "Sulje DEBUG-tila ja yritä uudelleen.", + "undefined": "Järjestelmässä tapahtui virhe, yritä myöhemmin uudelleen." + }, + "table": { + "actions": "Toiminnot", + "asc": "Nouseva", + "desc": "Laskeva", + "hide": "Piilota", + "pageInfo": "Sivu {current} / {total}", + "rowsPerPage": "Rivejä per sivu", + "selectedItems": "Valittu {total} riviä" + }, + "unlimited": "rajoittamaton" +} diff --git a/apps/admin/locales/fi-FI/coupon.json b/apps/admin/locales/fi-FI/coupon.json new file mode 100644 index 0000000..2ba135f --- /dev/null +++ b/apps/admin/locales/fi-FI/coupon.json @@ -0,0 +1,50 @@ +{ + "actions": "toiminnot", + "amount": "Määrä", + "cancel": "Peruuta", + "code": "koodi", + "confirm": "Vahvista", + "confirmDelete": "Oletko varma, että haluat poistaa tämän?", + "count": "määrä", + "couponList": "Kuponkilista", + "create": "Luo", + "createCoupon": "Luo kuponki", + "createSuccess": "Luonti onnistui", + "delete": "poista", + "deleteSuccess": "Poisto onnistui", + "deleteWarning": "Kun tiedot on poistettu, niitä ei voi palauttaa. Ole varovainen.", + "discount": "alennus", + "edit": "muokkaa", + "editCoupon": "Muokkaa kuponkia", + "enable": "Ota käyttöön", + "form": { + "amountDiscount": "Summa-alennus", + "cancel": "Peruuta", + "confirm": "Vahvista", + "count": "Maksimikäyttökerrat", + "countPlaceholder": "Maksimikäyttökerrat (jätä tyhjäksi, jos ei rajoitusta)", + "customCouponCode": "Mukautettu alennuskoodi", + "customCouponCodePlaceholder": "Mukautettu alennuskoodi (jätä tyhjäksi, jos haluat automaattisen luomisen)", + "enterCouponName": "Anna alennuskupongin nimi", + "enterValue": "Anna arvo", + "expireTime": "Vanhentumisaika", + "name": "Nimi", + "percentageDiscount": "Prosenttialennus", + "selectServer": "Valitse tilaus", + "selectTime": "Valitse aika", + "specifiedServer": "Määritetty tilaus", + "startTime": "Voimaantuloaika", + "type": "Alennuskupongin tyyppi", + "userLimit": "Käyttäjän maksimikäyttökerrat", + "userLimitPlaceholder": "Käyttäjän maksimikäyttökerrat (jätä tyhjäksi, jos ei rajoitusta)" + }, + "name": "Nimi", + "percentage": "prosenttiosuus", + "remainingTimes": "Jäljellä", + "subscribe": "Tilaa", + "type": "tyyppi", + "unlimited": "rajoittamaton", + "updateSuccess": "Päivitys onnistui", + "usedTimes": "Käyttökerrat", + "validityPeriod": "Voimassaoloaika" +} diff --git a/apps/admin/locales/fi-FI/document.json b/apps/admin/locales/fi-FI/document.json new file mode 100644 index 0000000..e6b69c9 --- /dev/null +++ b/apps/admin/locales/fi-FI/document.json @@ -0,0 +1,29 @@ +{ + "DocumentList": "Asiakirjaluettelo", + "actions": "toiminnot", + "cancel": "Peruuta", + "confirm": "Vahvista", + "confirmDelete": "Oletko varma, että haluat poistaa?", + "create": "luo", + "createDocument": "Luo asiakirja", + "createSuccess": "Luonti onnistui", + "delete": "poista", + "deleteDescription": "Kun tiedot on poistettu, niitä ei voi palauttaa. Ole varovainen.", + "deleteSuccess": "Poisto onnistui", + "edit": "muokkaa", + "editDocument": "Muokkaa asiakirjaa", + "form": { + "cancel": "Peruuta", + "confirm": "Vahvista", + "content": "Sisältö", + "tags": "Kategoriat", + "tagsPlaceholder": "Syötä useita kategorioita erottamalla ne Enterillä tai pilkulla (,)", + "title": "Otsikko", + "titlePlaceholder": "Ole hyvä ja syötä" + }, + "show": "Näytä", + "tags": "Kategoriat", + "title": "Otsikko", + "updateSuccess": "Päivitys onnistui", + "updatedAt": "Päivitetty" +} diff --git a/apps/admin/locales/fi-FI/index.json b/apps/admin/locales/fi-FI/index.json new file mode 100644 index 0000000..62f66db --- /dev/null +++ b/apps/admin/locales/fi-FI/index.json @@ -0,0 +1,29 @@ +{ + "email": "sähköposti", + "month": "Tämä kuukausi", + "monthDownloadTraffic": "Tämän kuukauden latausliikenne", + "monthUploadTraffic": "Tämän kuukauden lähetysliikenne", + "newPurchase": "Uusi osto", + "nodeTraffic": "Solmun liikenne", + "nodes": "solmut", + "offlineNodeCount": "Offline-solmujen määrä", + "onlineIPCount": "Verkossa olevien IP-osoitteiden määrä", + "onlineNodeCount": "Verkossa olevien solmujen määrä", + "pendingTickets": "Odottavat liput", + "register": "Rekisteröidy", + "repurchase": "uudelleenosto", + "revenueTitle": "Tulotilastot", + "selectTypePlaceholder": "Valitse tyyppi", + "statisticsTitle": "Tilastot", + "today": "tänään", + "todayDownloadTraffic": "Tämän päivän latausliikenne", + "todayUploadTraffic": "Tämän päivän lähetysliikenne", + "total": "Yhteensä", + "totalIncome": "Kokonaistulot", + "trafficRank": "Liikenteen sijoitus", + "type": "tyyppi", + "userTitle": "Käyttäjätilastot", + "userTraffic": "Käyttäjäliikenne", + "users": "käyttäjät", + "yesterday": "eilen" +} diff --git a/apps/admin/locales/fi-FI/language.json b/apps/admin/locales/fi-FI/language.json new file mode 100644 index 0000000..b530b23 --- /dev/null +++ b/apps/admin/locales/fi-FI/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "tšekki", + "de-DE": "Saksa", + "en-US": "englanti", + "es-ES": "espanja", + "es-MX": "espanja (Meksiko)", + "fi-FI": "suomi", + "fr-FR": "ranska", + "hi-IN": "hindi", + "hu-HU": "unkarinkieli", + "ja-JP": "japani", + "ko-KR": "Korea", + "no-NO": "norja", + "pl-PL": "puola", + "pt-BR": "portugali (Brasilia)", + "ro-RO": "romania", + "ru-RU": "Venäjä", + "th-TH": "thaikieli", + "tr-TR": "turkki", + "uk-UA": "ukrainaksi", + "vi-VN": "vietnamiksi", + "zh-CN": "kiina (yksinkertaistettu)", + "zh-TW": "kiina (perinteinen)" +} diff --git a/apps/admin/locales/fi-FI/menu.json b/apps/admin/locales/fi-FI/menu.json new file mode 100644 index 0000000..19c2430 --- /dev/null +++ b/apps/admin/locales/fi-FI/menu.json @@ -0,0 +1,18 @@ +{ + "Announcement Management": "Ilmoitusten hallinta", + "Coupon Management": "Kuponkien hallinta", + "Dashboard": "Kojelauta", + "Document Management": "Asiakirjojen hallinta", + "Finance": "Rahoitus", + "Order Management": "Tilausten hallinta", + "Payment Config": "Maksukonfiguraatio", + "Server": "Palvelu", + "Server Management": "Palvelimen hallinta", + "Settings": "Asetukset", + "Subscribe Management": "Tilauksen hallinta", + "System Config": "Järjestelmän asetukset", + "System Tool": "Järjestelmätyökalu", + "Ticket Management": "Lipputoiminta", + "User": "Käyttäjä", + "User Management": "Käyttäjien hallinta" +} diff --git a/apps/admin/locales/fi-FI/order.json b/apps/admin/locales/fi-FI/order.json new file mode 100644 index 0000000..681118d --- /dev/null +++ b/apps/admin/locales/fi-FI/order.json @@ -0,0 +1,37 @@ +{ + "amount": "Määrä", + "couponDiscount": "Kuponkialennus", + "discount": "Alennusmäärä", + "failed": "epäonnistui", + "feeAmount": "Käsittelymaksu", + "method": "Maksutapa", + "methods": { + "alipay_f2f": "Alipay (kasvokkain)", + "balance": "Saldo", + "epay": "Helppo maksaminen", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "orderNumber": "Tilausnumero", + "status": { + "0": "Tila", + "1": "Odottaa maksua", + "2": "Maksettu", + "3": "Peruutettu", + "4": "Suljettu", + "5": "Valmis" + }, + "subscribe": "Tilaa", + "subscribePrice": "Tilauksen hinta", + "total": "Yhteensä", + "tradeNo": "Kaupan numero", + "type": { + "0": "Tyyppi", + "1": "Uusi osto", + "2": "Uusiminen", + "3": "Liikenteen nollaus", + "4": "Lataus" + }, + "updateTime": "Päivitysaika", + "user": "käyttäjä" +} diff --git a/apps/admin/locales/fi-FI/payment.json b/apps/admin/locales/fi-FI/payment.json new file mode 100644 index 0000000..07837c9 --- /dev/null +++ b/apps/admin/locales/fi-FI/payment.json @@ -0,0 +1,44 @@ +{ + "aliPay": "Alipay-maksu", + "alipayf2f": { + "appId": "Alipay-sovelluksen ID", + "invoiceName": "Mukautettu tuotteen nimi", + "invoiceNameDescription": "Näkyy Alipay-laskussa", + "privateKey": "Alipay-yksityinen avain", + "publicKey": "Alipay-julkinen avain", + "sandbox": "Hiekkalaatikkotila", + "sandboxDescription": "Ota hiekkalaatikkotila käyttöön maksujen testaamiseksi" + }, + "enable": "Ota käyttöön", + "enableDescription": "Ota tämä maksutapa käyttöön", + "epay": { + "key": "AVAIN", + "pid": "PID", + "url": "URL" + }, + "feeMode": "Maksutapa", + "feeModeDescription": "Lisämaksun veloitustapa", + "feeModeItems": ["Ei käsittelymaksua", "Prosenttiosuus", "Kiinteä summa", "Molemmat yllä olevat"], + "feePercent": "Prosenttiosuusmaksu (valinnainen)", + "feePercentDescription": "Lisätään maksu tilauksen summan päälle", + "fixedFee": "Kiinteä maksu (valinnainen)", + "fixedFeeDescription": "Lisää kiinteä maksu tilauksen summan päälle", + "iconUrl": "Kuvakkeen URL (valinnainen)", + "iconUrlDescription": "Käytetään etunäytössä", + "inputPlaceholder": "Kirjoita tähän", + "key": "AVAIN", + "notifyUrl": "Mukautettu ilmoitusalue (valinnainen)", + "notifyUrlDescription": "Yhdyskäytävän ilmoitus lähetetään tähän verkkotunnukseen", + "payForRecommendations": "Maksa suosituksista", + "pid": "PID", + "saveSuccess": "Tallennus onnistui", + "showName": "Näytä nimi", + "showNameDescription": "Näytetään käyttöliittymässä", + "stripe": { + "publicKey": "JULKINEN AVAIN", + "secretKey": "SALAINEN AVAIN", + "webhookSecret": "WEBHOOK-SALAINEN ALLEKIRJOITUS" + }, + "url": "URL", + "wechatPay": "WeChat-maksu" +} diff --git a/apps/admin/locales/fi-FI/server.json b/apps/admin/locales/fi-FI/server.json new file mode 100644 index 0000000..d19f303 --- /dev/null +++ b/apps/admin/locales/fi-FI/server.json @@ -0,0 +1,122 @@ +{ + "group": { + "actions": "Toiminnot", + "cancel": "Peruuta", + "confirm": "Vahvista", + "confirmDelete": "Haluatko varmasti poistaa?", + "create": "Luo", + "createNodeGroup": "Luo solmuryhmä", + "createdSuccessfully": "Luotu onnistuneesti", + "delete": "Poista", + "deleteWarning": "Poiston jälkeen tietoja ei voi palauttaa, ole varovainen.", + "deletedSuccessfully": "Poistettu onnistuneesti", + "description": "Kuvaus", + "edit": "Muokkaa", + "editNodeGroup": "Muokkaa solmuryhmää", + "form": { + "cancel": "Peruuta", + "confirm": "Vahvista", + "description": "Kuvaus", + "name": "Nimi" + }, + "name": "Nimi", + "title": "Solmuryhmien lista", + "updatedAt": "Päivitetty" + }, + "node": { + "abnormal": "Poikkeava", + "actions": "Toiminnot", + "address": "Osoite", + "all": "Kaikki", + "cancel": "Peruuta", + "confirm": "Vahvista", + "confirmDelete": "Haluatko varmasti poistaa?", + "create": "Luo", + "createNode": "Luo solmu", + "createSuccess": "Luonti onnistui", + "delete": "Poista", + "deleteSuccess": "Poisto onnistui", + "deleteWarning": "Poiston jälkeen tietoja ei voi palauttaa. Ole varovainen.", + "disk": "Levy", + "edit": "Muokkaa", + "editNode": "Muokkaa solmua", + "enable": "Ota käyttöön", + "form": { + "allowInsecure": "Salli epävarma", + "cancel": "Peruuta", + "confirm": "Vahvista", + "edit": "Muokkaa", + "editSecurity": "Muokkaa suojausasetuksia", + "enableRelay": "Ota välitys käyttöön", + "enableTLS": "Ota TLS käyttöön", + "encryptionMethod": "Salausmenetelmä", + "flow": "Virtausalgoritmi", + "hopInterval": "Hyppyväli", + "hopPorts": "Hyppyportit", + "hopPortsPlaceholder": "Erota useat portit pilkulla", + "name": "Nimi", + "nodeGroupId": "Solmuryhmän ID", + "obfsPassword": "Hämäyssalasana", + "obfsPasswordPlaceholder": "Jätä tyhjäksi, jos ei hämäystä", + "path": "Polku", + "pleaseSelect": "Valitse", + "port": "Palvelinportti", + "protocol": "Protokolla", + "relayHost": "Välityksen osoite", + "relayPort": "Välityksen portti", + "remarks": "Huomautukset", + "security": "Turvallisuus", + "securityConfig": "Turvallisuusasetukset", + "security_config": { + "fingerprint": "Sormenjälki", + "privateKey": "Yksityinen avain", + "privateKeyPlaceholder": "Jätä tyhjäksi, jos haluat luoda automaattisesti", + "publicKey": "Julkinen avain", + "publicKeyPlaceholder": "Jätä tyhjäksi, jos haluat luoda automaattisesti", + "serverAddress": "Palvelimen osoite", + "serverAddressPlaceholder": "REALITY-kohdeosoite, oletuksena käytetään SNI:tä", + "serverName": "Palvelimen nimi (SNI)", + "serverNamePlaceholder": "REALITY vaaditaan, vastaa taustaa", + "serverPort": "Palvelimen portti", + "serverPortPlaceholder": "REALITY-kohdeportti, oletus 443", + "shortId": "Lyhyt ID", + "shortIdPlaceholder": "Jätä tyhjäksi, jos haluat luoda automaattisesti", + "sni": "Palvelimen nimen osoitus (SNI)" + }, + "selectEncryptionMethod": "Valitse salausmenetelmä", + "selectNodeGroup": "Valitse solmuryhmä", + "selectProtocol": "Valitse protokolla", + "serverAddr": "Palvelimen osoite", + "serverName": "Palvelimen nimi", + "speedLimit": "Nopeusrajoitus", + "speedLimitPlaceholder": "Ei rajoitusta", + "trafficRatio": "Liikenteen nopeus", + "transport": "Siirtoprotokolla", + "transportConfig": "Siirtoprotokollan asetukset", + "transportHost": "Siirtopalvelimen osoite", + "transportPath": "Siirtopolku", + "transportServerName": "Siirtopalvelimen nimi" + }, + "lastUpdated": "Viimeksi päivitetty", + "memory": "Muisti", + "name": "Nimi", + "node": "Solmu", + "nodeGroup": "Solmuryhmä", + "normal": "Normaali", + "onlineCount": "Online-käyttäjien määrä", + "onlineUsers": "Online-käyttäjät", + "rate": "Nopeus", + "relay": "Välitys", + "serverAddr": "Palvelimen osoite", + "speedLimit": "Nopeusrajoitus", + "status": "Tila", + "trafficRatio": "Liikenteen nopeus", + "type": "Tyyppi", + "updateSuccess": "Päivitys onnistui", + "updatedAt": "Päivitetty" + }, + "tabs": { + "node": "Solmu", + "nodeGroup": "Solmuryhmä" + } +} diff --git a/apps/admin/locales/fi-FI/subscribe.json b/apps/admin/locales/fi-FI/subscribe.json new file mode 100644 index 0000000..06cfd2c --- /dev/null +++ b/apps/admin/locales/fi-FI/subscribe.json @@ -0,0 +1,79 @@ +{ + "actions": "toiminnot", + "cancel": "Peruuta", + "confirm": "Vahvista", + "confirmDelete": "Haluatko varmasti poistaa?", + "create": "Luo", + "createSubscribe": "Luo uusi tilaus", + "createSuccess": "Luonti onnistui", + "delete": "poista", + "deleteSuccess": "Poisto onnistui", + "deleteWarning": "Poiston jälkeen tietoja ei voi palauttaa, ole varovainen.", + "deviceLimit": "Laitemäärä/kpl", + "edit": "muokkaa", + "editSubscribe": "Muokkaa tilausta", + "form": { + "cancel": "Peruuta", + "confirm": "Vahvista", + "description": "Kuvaus", + "deviceLimit": "Laiterajoitus", + "discount": "Alennus", + "discountDescription": "Aseta alennus yksikköhinnan perusteella", + "discountMonths": "Kuukautta", + "discountPercent": "Alennusprosentti", + "discount_price": "Alennettu hinta", + "duration": "Kesto (kuukautta)", + "inventory": "Varasto", + "name": "Nimi", + "noLimit": "Ei rajoitusta", + "quota": "Ostorajoitus", + "replacement": "Uudelleenhinnan asetus (kerta)", + "selectSubscribeGroup": "Valitse tilausryhmä", + "server": "Palvelin", + "serverGroup": "Palvelinryhmä", + "speedLimit": "Nopeusrajoitus (Mbps)", + "subscribeGroup": "Tilausryhmä", + "traffic": "Liikenne", + "unit_price": "Kuukausihinta" + }, + "group": { + "actions": "Toiminnot", + "cancel": "Peruuta", + "confirm": "Vahvista", + "confirmDelete": "Haluatko varmasti poistaa?", + "create": "Luo", + "createSubscribeGroup": "Luo uusi tilausryhmä", + "createSuccess": "Luonti onnistui", + "delete": "Poista", + "deleteSuccess": "Poisto onnistui", + "deleteWarning": "Poiston jälkeen tietoja ei voi palauttaa, ole varovainen.", + "description": "Kuvaus", + "edit": "Muokkaa", + "editSubscribeGroup": "Muokkaa tilausryhmää", + "form": { + "cancel": "Peruuta", + "confirm": "Vahvista", + "description": "Kuvaus", + "name": "Nimi" + }, + "name": "Nimi", + "title": "Tilausryhmien lista", + "updateSuccess": "Päivitys onnistui", + "updatedAt": "Päivitetty" + }, + "inventory": "varasto", + "name": "Nimi", + "quota": "Ostorajoitus/kerta", + "replacement": "Nollaa hinta/kerta", + "sell": "myydä", + "show": "Etusivun näyttö", + "subscribe": "Tilaa", + "subscribeGroup": "Tilaa ryhmä", + "tabs": { + "subscribe": "Tilaa", + "subscribeGroup": "Tilaa ryhmä" + }, + "traffic": "liikenne", + "unitPrice": "Hinta/kk", + "updateSuccess": "Päivitys onnistui" +} diff --git a/apps/admin/locales/fi-FI/system.json b/apps/admin/locales/fi-FI/system.json new file mode 100644 index 0000000..74d6cb4 --- /dev/null +++ b/apps/admin/locales/fi-FI/system.json @@ -0,0 +1,156 @@ +{ + "currency": { + "accessKey": "Avain", + "accessKeyDescription": "https://exchangerate.host tarjoaa ilmaisen valuuttakurssi-API-avaimen", + "currencySymbol": "Valuuttasymboli", + "currencySymbolDescription": "Käytetään vain näyttötarkoituksiin, muutoksen jälkeen kaikki järjestelmän valuuttayksiköt muuttuvat", + "currencyUnit": "Valuuttayksikkö", + "currencyUnitDescription": "Käytetään vain näyttötarkoituksiin, muutoksen jälkeen kaikki järjestelmän valuuttayksiköt muuttuvat", + "saveSuccess": "Tallennus onnistui" + }, + "email": { + "expiration_email_template": "Vanhentumisilmoitusmalli", + "expiration_email_templateDescription": "Mallin {after}.muuttujanimi{before} korvataan todellisilla tiedoilla, varmista, että säilytät nämä muuttujat.", + "inputPlaceholder": "Syötä sisältö...", + "maintenance_email_template": "Huoltoilmoitusmalli", + "maintenance_email_templateDescription": "Mallin {after}.muuttujanimi{before} korvataan todellisilla tiedoilla, varmista, että säilytät nämä muuttujat.", + "saveSuccess": "Asetukset on tallennettu onnistuneesti.", + "sendFailure": "Testisähköpostin lähetys epäonnistui, tarkista asetukset.", + "sendSuccess": "Testisähköposti on lähetetty onnistuneesti.", + "sendTestEmail": "Lähetä testisähköposti", + "sendTestEmailDescription": "Lähetä testisähköposti varmistaaksesi, että asetukset ovat oikein.", + "senderAddress": "Lähettäjän osoite", + "senderAddressDescription": "Oletussähköpostiosoite, jota käytetään sähköpostien lähettämiseen.", + "smtpAccount": "SMTP-tili", + "smtpAccountDescription": "Sähköpostitili todennusta varten.", + "smtpEncryptionMethod": "SMTP-salausmenetelmä", + "smtpEncryptionMethodDescription": "Valitse, otetaanko SSL/TLS-salaus käyttöön.", + "smtpPassword": "SMTP-salasana", + "smtpPasswordDescription": "Tämän SMTP-tilin salasana.", + "smtpServerAddress": "SMTP-palvelimen osoite", + "smtpServerAddressDescription": "Määritä palvelimen osoite, jota käytetään sähköpostien lähettämiseen.", + "smtpServerPort": "SMTP-palvelimen portti", + "smtpServerPortDescription": "Määritä porttinumero, jota käytetään SMTP-palvelimeen yhdistämiseen.", + "verify_email_template": "Vahvistussähköpostimalli", + "verify_email_templateDescription": "Mallin {after}.muuttujanimi{before} korvataan todellisilla tiedoilla, varmista, että säilytät nämä muuttujat." + }, + "invite": { + "commissionFirstTimeOnly": "Vain ensimmäisestä ostosta provisio", + "commissionFirstTimeOnlyDescription": "Kun tämä on käytössä, provisio syntyy vain, kun kutsuttu henkilö maksaa ensimmäisen kerran. Voit määrittää yksittäisen käyttäjän käyttäjähallinnassa.", + "enableForcedInvite": "Ota pakotettu kutsu käyttöön", + "enableForcedInviteDescription": "Kun tämä on käytössä, vain kutsutut käyttäjät voivat rekisteröityä.", + "inputPlaceholder": "Ole hyvä ja syötä", + "inviteCommissionPercentage": "Kutsupalkkion prosenttiosuus", + "inviteCommissionPercentageDescription": "Oletusarvoinen globaali provisiojakosuhde, voit määrittää yksittäisen suhteen käyttäjähallinnassa.", + "saveSuccess": "Tallennus onnistui" + }, + "node": { + "communicationKey": "Viestintäavain", + "communicationKeyDescription": "Solmun viestinnän avain, joka varmistaa, että tiedot eivät joudu muiden sieppaamiksi", + "inputPlaceholder": "Ole hyvä ja syötä", + "nodePullInterval": "Solmun noutoväli", + "nodePullIntervalDescription": "Kuinka usein solmu hakee tietoja paneelista (sekunteina)", + "nodePushInterval": "Solmun lähetysväli", + "nodePushIntervalDescription": "Kuinka usein solmu lähettää tietoja paneeliin", + "saveSuccess": "Tallennus onnistui" + }, + "register": { + "emailSuffixWhitelist": "Sähköpostin jälkiliitteen sallittu luettelo", + "emailSuffixWhitelistDescription": "Kun tämä on käytössä, vain luettelossa olevilla jälkiliitteillä varustetut sähköpostit voivat rekisteröityä", + "emailVerification": "Sähköpostivarmennus", + "emailVerificationDescription": "Kun tämä on käytössä, käyttäjien on vahvistettava sähköpostinsa", + "ipRegistrationLimit": "IP-rekisteröintirajoitus", + "ipRegistrationLimitDescription": "Kun tämä on käytössä, sääntöjen mukaisia IP-osoitteita rajoitetaan rekisteröitymästä. Huomaa, että CDN tai etuvälimuistin käyttö voi aiheuttaa ongelmia IP-määrityksessä", + "penaltyTime": "Rangaistusaika (minuuttia)", + "penaltyTimeDescription": "Käyttäjän on odotettava rangaistusajan umpeutumista ennen kuin voi rekisteröityä uudelleen", + "registrationLimitCount": "Rekisteröintirajoituksen määrä", + "registrationLimitCountDescription": "Kun rekisteröintirajoitus saavutetaan, rangaistus otetaan käyttöön", + "saveSuccess": "Tallennus onnistui", + "stopNewUserRegistration": "Lopeta uusien käyttäjien rekisteröinti", + "stopNewUserRegistrationDescription": "Kun tämä on käytössä, kukaan ei voi rekisteröityä", + "trialRegistration": "Kokeilurekisteröinti", + "trialRegistrationDescription": "Ota kokeilurekisteröinti käyttöön, muokkaa ensin kokeilupakettia ja kestoa", + "whitelistSuffixes": "Sallitut jälkiliitteet", + "whitelistSuffixesDescription": "Käytetään sähköpostin rekisteröintivarmennukseen, yksi per rivi", + "whitelistSuffixesPlaceholder": "Anna sähköpostin jälkiliite, yksi per rivi" + }, + "site": { + "logo": "LOGO", + "logoDescription": "Näyttääksesi paikan, jossa LOGO tulee näkyä", + "logoPlaceholder": "Syötä LOGO:n URL-osoite, älä lopeta '/'-merkillä", + "saveSuccess": "Tallennus onnistui", + "siteDesc": "Sivuston kuvaus", + "siteDescDescription": "Näyttääksesi paikan, jossa sivuston kuvaus tulee näkyä", + "siteDescPlaceholder": "Syötä sivuston kuvaus", + "siteDomain": "Sivuston verkkotunnus", + "siteDomainDescription": "Nykyisen verkkosivuston verkkotunnuksen osoite, esimerkiksi sähköpostissa käytettäväksi", + "siteDomainPlaceholder": "Syötä verkkotunnuksen osoite, useita verkkotunnuksia varten yksi per rivi", + "siteName": "Sivuston nimi", + "siteNameDescription": "Näyttääksesi paikan, jossa sivuston nimi tulee näkyä", + "siteNamePlaceholder": "Syötä sivuston nimi" + }, + "subscription": { + "add": "Lisää", + "app": "Sovellus", + "appDescription": "Määritä sovelluksen latausosoite ja tuontisäännöt, muista tallentaa muutosten jälkeen", + "appDownloadURL": "Sovelluksen latausosoite", + "appIcon": "Sovelluksen kuvake", + "appName": "Sovelluksen nimi", + "delete": "Poista", + "reset": "Nollaa", + "save": "Tallenna", + "saveSuccess": "Tallennus onnistui", + "singleSubscriptionMode": "Yksittäinen tilausmalli", + "singleSubscriptionModeDescription": "Kun tämä on käytössä, kaikkien käyttäjien paketit muunnetaan saldoksi", + "subscriptionDomain": "Tilausverkkotunnus", + "subscriptionDomainDescription": "Käytetään tilaukseen, jätä tyhjäksi käyttääksesi sivuston verkkotunnusta", + "subscriptionDomainPlaceholder": "Anna tilausverkkotunnus, useita verkkotunnuksia varten yksi per rivi", + "subscriptionPath": "Tilauspolku", + "subscriptionPathDescription": "Käytetään tilaukseen, muista käynnistää järjestelmä uudelleen muutosten jälkeen parhaan suorituskyvyn varmistamiseksi", + "subscriptionPathPlaceholder": "Anna", + "subscriptionProtocol": "Tilausprotokolla", + "wildcardResolution": "Yleismerkkien ratkaisu", + "wildcardResolutionDescription": "Käytetään tilaukseen" + }, + "tabs": { + "currency": "Valuutta", + "email": "Sähköposti", + "invite": "Kutsu", + "node": "Solmu", + "register": "Rekisteröidy", + "site": "Sivusto", + "subscription": "Tilaus", + "telegram": "Telegram", + "tos": "Käyttöehdot", + "verify": "Vahvista" + }, + "telegram": { + "botToken": "Botti Token", + "botTokenDescription": "Anna Botfatherin antama token", + "enableBotNotifications": "Ota käyttöön botti-ilmoitukset", + "enableBotNotificationsDescription": "Kun tämä on käytössä, botti lähettää perusilmoituksia Telegramiin liitetyille ylläpitäjille ja käyttäjille", + "groupURL": "Ryhmä URL", + "groupURLDescription": "Kun tämä on täytetty, se näytetään käyttäjäpuolella tai käytetään tarvittaessa", + "inputPlaceholderBotToken": "0000000000:xxxxxxxxx_xxxxxxxxxxxxxxx", + "inputPlaceholderGroupURL": "https://t.me/xxxxxx", + "saveSuccess": "Tallennus onnistui" + }, + "tos": { + "saveSuccess": "Tallennus onnistui", + "title": "Palveluehdot" + }, + "verify": { + "inputPlaceholder": "Syötä", + "loginVerificationCode": "Kirjautumiskoodi", + "loginVerificationCodeDescription": "Ihmisen ja koneen välinen tarkistus kirjautumisen yhteydessä", + "registrationVerificationCode": "Rekisteröintikoodi", + "registrationVerificationCodeDescription": "Ihmisen ja koneen välinen tarkistus rekisteröitymisen yhteydessä", + "resetPasswordVerificationCode": "Salasanan palautuskoodi", + "resetPasswordVerificationCodeDescription": "Ihmisen ja koneen välinen tarkistus salasanan palautuksen yhteydessä", + "saveSuccess": "Tallennus onnistui", + "turnstileSecret": "Turnstile-salaisuus", + "turnstileSecretDescription": "Cloudflaren tarjoama Turnstile-salaisuus", + "turnstileSiteKey": "Turnstile-sivustoavain", + "turnstileSiteKeyDescription": "Cloudflaren tarjoama Turnstile-sivustoavain" + } +} diff --git a/apps/admin/locales/fi-FI/ticket.json b/apps/admin/locales/fi-FI/ticket.json new file mode 100644 index 0000000..7db78e4 --- /dev/null +++ b/apps/admin/locales/fi-FI/ticket.json @@ -0,0 +1,19 @@ +{ + "actions": "toiminnot", + "cancel": "Peruuta", + "check": "Tarkista", + "close": "sulje", + "closeSuccess": "Sulkeminen onnistui", + "closeWarning": "Kun suljet tämän työtilauksen, et voi enää käsitellä sitä. Olethan varovainen.", + "confirm": "Vahvista", + "confirmClose": "Haluatko varmasti sulkea?", + "createdAt": "Luontiaika", + "inputPlaceholder": "Kirjoita kysymyksesi tähän, vastaamme mahdollisimman pian.", + "open": "Avaa", + "reply": "vastaa", + "status": ["Tila", "Seurattava", "Vastattava", "Käsitelty", "Suljettu"], + "ticketList": "Tukipyyntölista", + "title": "Otsikko", + "updatedAt": "Päivitetty", + "user": "käyttäjä" +} diff --git a/apps/admin/locales/fi-FI/tool.json b/apps/admin/locales/fi-FI/tool.json new file mode 100644 index 0000000..81eddd7 --- /dev/null +++ b/apps/admin/locales/fi-FI/tool.json @@ -0,0 +1,26 @@ +{ + "caller": "Soittaja", + "cancel": "Peruuta", + "confirmReboot": "Vahvista uudelleenkäynnistys", + "confirmSystemReboot": "Vahvista järjestelmän uudelleenkäynnistys", + "confirmSystemUpgrade": "Vahvista järjestelmän päivitys", + "confirmUpgrade": "Vahvista päivitys", + "currentVersion": "Nykyinen järjestelmäversio:", + "errors": "Virheet", + "ip": "IP", + "lastUpdated": "Viimeksi päivitetty:", + "none": "Ei mitään", + "query": "Kysely", + "rebootDescription": "Oletko varma, että haluat käynnistää järjestelmän uudelleen? Tämä toimenpide aiheuttaa lyhyen palvelukatkon.", + "rebooting": "Järjestelmä käynnistyy uudelleen...", + "refreshLogs": "Päivitä lokit", + "request": "Pyyntö", + "status": "Tila", + "systemLogs": "Järjestelmän lokit", + "systemReboot": "Järjestelmän uudelleenkäynnistys", + "systemServices": "Järjestelmäpalvelut", + "systemUpgrade": "Järjestelmän päivitys", + "upgradeDescription": "Haluatko varmasti suorittaa järjestelmäpäivityksen? Tämä toimenpide voi kestää muutaman minuutin, ja sen aikana järjestelmä ei välttämättä vastaa.", + "userAgent": "Käyttäjäagentti", + "viewLogsAndManage": "Tarkastele järjestelmän lokitietoja, suorita järjestelmäpäivityksiä ja uudelleenkäynnistyksiä" +} diff --git a/apps/admin/locales/fi-FI/user.json b/apps/admin/locales/fi-FI/user.json new file mode 100644 index 0000000..f303aae --- /dev/null +++ b/apps/admin/locales/fi-FI/user.json @@ -0,0 +1,38 @@ +{ + "actions": "toiminnot", + "balance": "Saldo", + "cancel": "Peruuta", + "confirm": "Vahvista", + "confirmDelete": "Oletko varma, että haluat poistaa?", + "create": "Luo", + "createSuccess": "Luonti onnistui", + "createUser": "Luo käyttäjä", + "createdAt": "Rekisteröitymisaika", + "delete": "poista", + "deleteDescription": "Poistamisen jälkeen tietoja ei voi palauttaa, ole varovainen.", + "deleteSuccess": "Poisto onnistui", + "edit": "muokkaa", + "editUser": "Muokkaa käyttäjää", + "email": "sähköposti", + "enable": "Ota käyttöön", + "form": { + "balance": "Saldo", + "balancePlaceholder": "Saldo", + "cancel": "Peruuta", + "confirm": "Vahvista", + "invalidEmailFormat": "Virheellinen sähköpostimuoto", + "inviteCode": "Kutsukoodi", + "inviteCodePlaceholder": "Syötä kutsukoodi (jätä tyhjäksi, jos haluat luoda automaattisesti)", + "manager": "Ylläpitäjä", + "password": "Salasana", + "passwordPlaceholder": "Syötä uusi salasana (voi jättää tyhjäksi)", + "refererId": "Suosittelijan ID", + "refererIdPlaceholder": "Syötä suosittelijan ID", + "userEmail": "Käyttäjän sähköposti", + "userEmailPlaceholder": "Syötä käyttäjän sähköposti" + }, + "referer": "Suosittelija", + "updateSuccess": "Päivitys onnistui", + "userList": "Käyttäjälista", + "userName": "Käyttäjän sähköposti" +} diff --git a/apps/admin/locales/fr-FR/announcement.json b/apps/admin/locales/fr-FR/announcement.json new file mode 100644 index 0000000..e42b4b8 --- /dev/null +++ b/apps/admin/locales/fr-FR/announcement.json @@ -0,0 +1,30 @@ +{ + "actions": "actions", + "announcementList": "Liste des annonces", + "cancel": "Annuler", + "confirm": "Confirmer", + "confirmDelete": "Êtes-vous sûr de vouloir supprimer ?", + "content": "Contenu", + "create": "Créer", + "createAnnouncement": "Créer une annonce", + "createSuccess": "Création réussie", + "delete": "Supprimer", + "deleteDescription": "Une fois supprimées, les données ne pourront pas être récupérées. Veuillez procéder avec prudence.", + "deleteSuccess": "Suppression réussie", + "edit": "Éditer", + "editAnnouncement": "Modifier l'annonce", + "enable": "Activer", + "form": { + "cancel": "Annuler", + "confirm": "Confirmer", + "content": "Contenu", + "contentPlaceholder": "Veuillez entrer le contenu de l'annonce (Markdown pris en charge)", + "title": "Titre", + "titlePlaceholder": "Veuillez entrer" + }, + "hide": "Masquer", + "show": "afficher", + "title": "Titre", + "updateSuccess": "Mise à jour réussie", + "updatedAt": "Mis à jour à" +} diff --git a/apps/admin/locales/fr-FR/auth.json b/apps/admin/locales/fr-FR/auth.json new file mode 100644 index 0000000..634ab16 --- /dev/null +++ b/apps/admin/locales/fr-FR/auth.json @@ -0,0 +1,39 @@ +{ + "check": { + "checking": "Vérification en cours...", + "continue": "Continuer", + "description": "Veuillez entrer votre adresse e-mail pour continuer à vous connecter ou à vous inscrire.", + "email": "Veuillez entrer une adresse e-mail valide.", + "title": "Connexion/Inscription", + "whitelist": "Le domaine de l'e-mail n'est pas sur la liste blanche autorisée." + }, + "login": { + "description": "Veuillez entrer vos informations de compte pour vous connecter.", + "forgotPassword": "Mot de passe oublié ?", + "success": "Connexion réussie !", + "switchAccount": "S'inscrire/Changer de compte", + "title": "Connexion" + }, + "logout": "Se déconnecter", + "orWithEmail": "ou utiliser l'e-mail", + "register": { + "description": "Créez un nouveau compte, remplissez vos informations pour vous inscrire.", + "existingAccount": "Vous avez déjà un compte ?", + "get": "Obtenir", + "invite": "Code d'invitation", + "message": "#### Cher utilisateur,\n\nMerci pour votre intérêt et votre soutien. En raison d'un ajustement de notre stratégie opérationnelle, nous avons fermé la fonction d'inscription pour les nouveaux utilisateurs. Pendant cette période, l'utilisation par les utilisateurs existants ne sera pas affectée.\n\nNous nous engageons à vous offrir un meilleur service et une meilleure expérience, c'est pourquoi nous procéderons à une optimisation complète du système et à une mise à niveau des fonctionnalités pendant la fermeture des inscriptions. À l'avenir, nous vous accueillerons avec un contenu et des services de meilleure qualité.\n\nVeuillez suivre notre site web et nos plateformes de médias sociaux pour obtenir les dernières nouvelles et notifications. Merci pour votre compréhension et votre soutien.\n\nSi vous avez des questions ou avez besoin d'aide, n'hésitez pas à contacter notre équipe de service client.\n\n**Merci encore pour votre soutien et votre compréhension.**", + "passwordMismatch": "Les mots de passe saisis ne correspondent pas", + "success": "Inscription réussie, vous êtes maintenant connecté automatiquement !", + "switchToLogin": "Connexion/Réinitialiser l'email", + "title": "Inscription" + }, + "reset": { + "description": "Veuillez entrer votre adresse e-mail pour réinitialiser votre mot de passe.", + "existingAccount": "Vous avez déjà un compte ?", + "get": "Obtenir", + "success": "Réinitialisation du mot de passe réussie, vous êtes automatiquement connecté !", + "switchToLogin": "Connexion/Inscription", + "title": "Réinitialiser le mot de passe" + }, + "tos": "Conditions de service" +} diff --git a/apps/admin/locales/fr-FR/common.json b/apps/admin/locales/fr-FR/common.json new file mode 100644 index 0000000..f63cf4e --- /dev/null +++ b/apps/admin/locales/fr-FR/common.json @@ -0,0 +1,60 @@ +{ + "billing": { + "description": "Soutenir aide PPanel à continuer de publier des mises à jour !", + "title": "Sponsors" + }, + "empty": [ + "Imaginez ici un contenu plein de merveilles ! Pour l'instant, il faut se contenter de l'imaginer…", + "Cette zone a mystérieusement disparu, nous essayons de la faire revenir !", + "Oups, rien ne s'est passé… vous pouvez y ajouter quelque chose vous-même !", + "C'est comme découvrir une scène vide lors d'un concert… pourquoi ne pas monter et performer ?", + "Vous avez trouvé une terre vierge ! Pourquoi ne pas y construire une maison ?", + "Rien ici pour l'instant, mais la créativité commence ici !", + "Il n'y a rien… mais ne vous inquiétez pas, ce n'est que le début !", + "Un grand surprise était prévue ici, mais elle s'est échappée !", + "Rien pour l'instant, comme un placard à snacks vidé.", + "Cet espace vide attend son protagoniste pour entrer en scène !" + ], + "request": { + "10001": "La requête n'a pas encore abouti, veuillez réessayer plus tard ou vérifier vos critères.", + "10002": "L'opération de mise à jour a échoué, veuillez réessayer plus tard.", + "10003": "Impossible de compléter l'opération d'insertion pour le moment, veuillez réessayer plus tard.", + "10004": "L'opération de suppression n'a pas pu être complétée, veuillez réessayer plus tard.", + "20001": "Les informations de cet utilisateur existent déjà, veuillez modifier les informations et réessayer.", + "20002": "Utilisateur non trouvé, veuillez vérifier les informations et réessayer.", + "20003": "Le mot de passe que vous avez saisi est incorrect, veuillez le ressaisir.", + "20004": "Cet utilisateur a été désactivé, si vous avez des questions, veuillez contacter le service client.", + "20005": "Solde insuffisant, veuillez recharger et réessayer.", + "20006": "La fonction d'inscription est temporairement indisponible, veuillez réessayer plus tard.", + "30001": "Ce nœud existe déjà, veuillez ne pas l'ajouter à nouveau.", + "30002": "Nœud non trouvé, veuillez vérifier et réessayer.", + "30003": "Le groupe existe déjà, veuillez essayer un autre nom.", + "30004": "Groupe non trouvé, veuillez vérifier les informations et réessayer.", + "30005": "Le groupe contient encore des éléments, veuillez le vider et réessayer.", + "400": "Les paramètres de la requête sont incorrects, veuillez vérifier et soumettre à nouveau.", + "40002": "Aucun jeton valide trouvé, veuillez vous connecter et réessayer.", + "40003": "Le jeton actuel est invalide, veuillez en obtenir un nouveau et réessayer.", + "40004": "Le jeton a expiré, veuillez vous reconnecter.", + "40005": "Vous n'avez pas la permission d'accéder, si vous avez des questions, veuillez contacter l'administrateur.", + "401": "Les requêtes sont trop fréquentes, veuillez réessayer plus tard.", + "500": "Le serveur a rencontré un problème, veuillez réessayer plus tard.", + "50001": "Informations sur le coupon introuvables, veuillez vérifier et réessayer.", + "50002": "Ce coupon a déjà été utilisé, il ne peut pas être réutilisé.", + "60001": "L'abonnement a expiré, veuillez le renouveler avant de l'utiliser.", + "60002": "Impossible d'utiliser cet abonnement pour le moment, veuillez réessayer plus tard.", + "70001": "Le code de vérification est incorrect, veuillez le ressaisir.", + "80001": "La tâche n'a pas été ajoutée avec succès à la file d'attente, veuillez réessayer plus tard.", + "90001": "Veuillez désactiver le mode DEBUG et réessayer.", + "undefined": "Une erreur système est survenue, veuillez réessayer plus tard." + }, + "table": { + "actions": "Actions", + "asc": "Ascendant", + "desc": "Descendant", + "hide": "Cacher", + "pageInfo": "Page {current} sur {total}", + "rowsPerPage": "Lignes par page", + "selectedItems": "{total} lignes sélectionnées" + }, + "unlimited": "illimité" +} diff --git a/apps/admin/locales/fr-FR/coupon.json b/apps/admin/locales/fr-FR/coupon.json new file mode 100644 index 0000000..b70eb06 --- /dev/null +++ b/apps/admin/locales/fr-FR/coupon.json @@ -0,0 +1,50 @@ +{ + "actions": "actions", + "amount": "Montant", + "cancel": "Annuler", + "code": "code", + "confirm": "Confirmer", + "confirmDelete": "Êtes-vous sûr de vouloir supprimer ?", + "count": "quantité", + "couponList": "Liste des coupons", + "create": "Créer", + "createCoupon": "Créer un coupon", + "createSuccess": "Création réussie", + "delete": "Supprimer", + "deleteSuccess": "Suppression réussie", + "deleteWarning": "Une fois supprimées, les données ne pourront pas être récupérées. Veuillez procéder avec prudence.", + "discount": "remise", + "edit": "Éditer", + "editCoupon": "Modifier le coupon", + "enable": "Activer", + "form": { + "amountDiscount": "Remise en montant", + "cancel": "Annuler", + "confirm": "Confirmer", + "count": "Nombre maximal d'utilisations", + "countPlaceholder": "Nombre maximal d'utilisations (laisser vide pour illimité)", + "customCouponCode": "Code promo personnalisé", + "customCouponCodePlaceholder": "Code promo personnalisé (laisser vide pour générer automatiquement)", + "enterCouponName": "Veuillez entrer le nom du coupon", + "enterValue": "Veuillez entrer la valeur", + "expireTime": "Date d'expiration", + "name": "Nom", + "percentageDiscount": "Remise en pourcentage", + "selectServer": "Veuillez sélectionner un abonnement", + "selectTime": "Sélectionner l'heure", + "specifiedServer": "Abonnement spécifié", + "startTime": "Date de début", + "type": "Type de coupon", + "userLimit": "Nombre maximal d'utilisations par utilisateur", + "userLimitPlaceholder": "Nombre maximal d'utilisations par utilisateur (laisser vide pour illimité)" + }, + "name": "Nom", + "percentage": "pourcentage", + "remainingTimes": "Restant", + "subscribe": "S'abonner", + "type": "Type", + "unlimited": "illimité", + "updateSuccess": "Mise à jour réussie", + "usedTimes": "Nombre d'utilisations", + "validityPeriod": "Période de validité" +} diff --git a/apps/admin/locales/fr-FR/document.json b/apps/admin/locales/fr-FR/document.json new file mode 100644 index 0000000..949b346 --- /dev/null +++ b/apps/admin/locales/fr-FR/document.json @@ -0,0 +1,29 @@ +{ + "DocumentList": "Liste des documents", + "actions": "Actions", + "cancel": "Annuler", + "confirm": "Confirmer", + "confirmDelete": "Êtes-vous sûr de vouloir supprimer ?", + "create": "Créer", + "createDocument": "Créer un document", + "createSuccess": "Création réussie", + "delete": "Supprimer", + "deleteDescription": "Une fois supprimées, les données ne pourront pas être récupérées. Veuillez procéder avec prudence.", + "deleteSuccess": "Suppression réussie", + "edit": "Éditer", + "editDocument": "Modifier le document", + "form": { + "cancel": "Annuler", + "confirm": "Confirmer", + "content": "Contenu", + "tags": "Catégories", + "tagsPlaceholder": "Veuillez utiliser la touche Entrée ou une virgule (,) pour séparer et entrer plusieurs catégories", + "title": "Titre", + "titlePlaceholder": "Veuillez entrer" + }, + "show": "Afficher", + "tags": "Catégories", + "title": "Titre", + "updateSuccess": "Mise à jour réussie", + "updatedAt": "Mis à jour à" +} diff --git a/apps/admin/locales/fr-FR/index.json b/apps/admin/locales/fr-FR/index.json new file mode 100644 index 0000000..acd5621 --- /dev/null +++ b/apps/admin/locales/fr-FR/index.json @@ -0,0 +1,29 @@ +{ + "email": "e-mail", + "month": "Ce mois-ci", + "monthDownloadTraffic": "Trafic de téléchargement ce mois-ci", + "monthUploadTraffic": "Trafic de téléchargement ce mois-ci", + "newPurchase": "Nouvel achat", + "nodeTraffic": "Trafic du nœud", + "nodes": "nœuds", + "offlineNodeCount": "Nombre de nœuds hors ligne", + "onlineIPCount": "Nombre d'IP en ligne", + "onlineNodeCount": "Nombre de nœuds en ligne", + "pendingTickets": "Tickets en attente", + "register": "S'inscrire", + "repurchase": "Rachat", + "revenueTitle": "Statistiques des revenus", + "selectTypePlaceholder": "Sélectionner le type", + "statisticsTitle": "Statistiques", + "today": "aujourd'hui", + "todayDownloadTraffic": "Trafic de téléchargement d'aujourd'hui", + "todayUploadTraffic": "Trafic de téléchargement d'aujourd'hui", + "total": "Total", + "totalIncome": "Revenu total", + "trafficRank": "Classement du trafic", + "type": "Type", + "userTitle": "Statistiques de l'utilisateur", + "userTraffic": "Trafic utilisateur", + "users": "utilisateurs", + "yesterday": "hier" +} diff --git a/apps/admin/locales/fr-FR/language.json b/apps/admin/locales/fr-FR/language.json new file mode 100644 index 0000000..26463ae --- /dev/null +++ b/apps/admin/locales/fr-FR/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "Tchèque", + "de-DE": "Allemand", + "en-US": "anglais", + "es-ES": "Espagnol", + "es-MX": "Espagnol (Mexique)", + "fi-FI": "finnois", + "fr-FR": "français", + "hi-IN": "hindi", + "hu-HU": "Hongrois", + "ja-JP": "Japonais", + "ko-KR": "coréen", + "no-NO": "Norvégien", + "pl-PL": "Polonais", + "pt-BR": "portugais (Brésil)", + "ro-RO": "Roumain", + "ru-RU": "Russe", + "th-TH": "thaïlandais", + "tr-TR": "turc", + "uk-UA": "Ukrainien", + "vi-VN": "Vietnamien", + "zh-CN": "français (France)", + "zh-TW": "chinois (traditionnel)" +} diff --git a/apps/admin/locales/fr-FR/menu.json b/apps/admin/locales/fr-FR/menu.json new file mode 100644 index 0000000..013050b --- /dev/null +++ b/apps/admin/locales/fr-FR/menu.json @@ -0,0 +1,18 @@ +{ + "Announcement Management": "Gestion des annonces", + "Coupon Management": "Gestion des coupons", + "Dashboard": "Tableau de bord", + "Document Management": "Gestion des documents", + "Finance": "Finance", + "Order Management": "Gestion des commandes", + "Payment Config": "Configuration de paiement", + "Server": "Serveur", + "Server Management": "Gestion des services", + "Settings": "Paramètres", + "Subscribe Management": "Gestion des abonnements", + "System Config": "Configuration du système", + "System Tool": "Outil Système", + "Ticket Management": "Gestion des billets", + "User": "Utilisateur", + "User Management": "Gestion des utilisateurs" +} diff --git a/apps/admin/locales/fr-FR/order.json b/apps/admin/locales/fr-FR/order.json new file mode 100644 index 0000000..135993f --- /dev/null +++ b/apps/admin/locales/fr-FR/order.json @@ -0,0 +1,37 @@ +{ + "amount": "Montant", + "couponDiscount": "Remise de coupon", + "discount": "Montant de la remise", + "failed": "Échec", + "feeAmount": "Frais", + "method": "Méthode de paiement", + "methods": { + "alipay_f2f": "Alipay (face à face)", + "balance": "Solde", + "epay": "Epay", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "orderNumber": "Numéro de commande", + "status": { + "0": "Statut", + "1": "En attente de paiement", + "2": "Payé", + "3": "Annulé", + "4": "Fermé", + "5": "Terminé" + }, + "subscribe": "S'abonner", + "subscribePrice": "Prix d'abonnement", + "total": "Total", + "tradeNo": "Numéro de transaction", + "type": { + "0": "Type", + "1": "Nouvel achat", + "2": "Renouvellement", + "3": "Réinitialiser le trafic", + "4": "Recharger" + }, + "updateTime": "Heure de mise à jour", + "user": "utilisateur" +} diff --git a/apps/admin/locales/fr-FR/payment.json b/apps/admin/locales/fr-FR/payment.json new file mode 100644 index 0000000..e69f2a5 --- /dev/null +++ b/apps/admin/locales/fr-FR/payment.json @@ -0,0 +1,44 @@ +{ + "aliPay": "Paiement par Alipay", + "alipayf2f": { + "appId": "ID de l'application Alipay", + "invoiceName": "Nom personnalisé du produit", + "invoiceNameDescription": "S'affichera sur la facture Alipay", + "privateKey": "Clé privée Alipay", + "publicKey": "Clé publique Alipay", + "sandbox": "Mode bac à sable", + "sandboxDescription": "Activez le mode bac à sable pour tester le paiement" + }, + "enable": "Activer", + "enableDescription": "Activer ce mode de paiement", + "epay": { + "key": "CLÉ", + "pid": "PID", + "url": "URL" + }, + "feeMode": "Mode de facturation", + "feeModeDescription": "Mode de facturation des frais supplémentaires", + "feeModeItems": ["Pas de frais", "Pourcentage", "Montant fixe", "Les deux ci-dessus"], + "feePercent": "Pourcentage de frais (optionnel)", + "feePercentDescription": "Ajouter des frais au montant de la commande", + "fixedFee": "Frais fixes (optionnel)", + "fixedFeeDescription": "Ajouter des frais fixes au montant de la commande", + "iconUrl": "URL de l'icône (facultatif)", + "iconUrlDescription": "Utilisé pour l'affichage frontal", + "inputPlaceholder": "Veuillez entrer", + "key": "CLÉ", + "notifyUrl": "Domaine de notification personnalisé (facultatif)", + "notifyUrlDescription": "Les notifications de la passerelle seront envoyées à ce domaine", + "payForRecommendations": "Payer pour les recommandations", + "pid": "PID", + "saveSuccess": "Enregistrement réussi", + "showName": "Afficher le nom", + "showNameDescription": "Utilisé pour l'affichage frontal", + "stripe": { + "publicKey": "CLÉ PUBLIQUE", + "secretKey": "CLÉ SECRÈTE", + "webhookSecret": "SIGNATURE DE CLÉ WEBHOOK" + }, + "url": "URL", + "wechatPay": "Paiement WeChat" +} diff --git a/apps/admin/locales/fr-FR/server.json b/apps/admin/locales/fr-FR/server.json new file mode 100644 index 0000000..a723590 --- /dev/null +++ b/apps/admin/locales/fr-FR/server.json @@ -0,0 +1,122 @@ +{ + "group": { + "actions": "Actions", + "cancel": "Annuler", + "confirm": "Confirmer", + "confirmDelete": "Êtes-vous sûr de vouloir supprimer ?", + "create": "Créer", + "createNodeGroup": "Créer un groupe de nœuds", + "createdSuccessfully": "Création réussie", + "delete": "Supprimer", + "deleteWarning": "Les données ne pourront pas être récupérées après suppression, veuillez procéder avec prudence.", + "deletedSuccessfully": "Suppression réussie", + "description": "Description", + "edit": "Éditer", + "editNodeGroup": "Éditer le groupe de nœuds", + "form": { + "cancel": "Annuler", + "confirm": "Confirmer", + "description": "Description", + "name": "Nom" + }, + "name": "Nom", + "title": "Liste des groupes de nœuds", + "updatedAt": "Mis à jour à" + }, + "node": { + "abnormal": "Anormal", + "actions": "Actions", + "address": "Adresse", + "all": "Tout", + "cancel": "Annuler", + "confirm": "Confirmer", + "confirmDelete": "Êtes-vous sûr de vouloir supprimer ?", + "create": "Créer", + "createNode": "Créer un nœud", + "createSuccess": "Création réussie", + "delete": "Supprimer", + "deleteSuccess": "Suppression réussie", + "deleteWarning": "Après suppression, les données ne pourront pas être récupérées. Veuillez procéder avec prudence.", + "disk": "Disque", + "edit": "Éditer", + "editNode": "Éditer le nœud", + "enable": "Activer", + "form": { + "allowInsecure": "Autoriser l'insécurité", + "cancel": "Annuler", + "confirm": "Confirmer", + "edit": "Éditer", + "editSecurity": "Éditer la configuration de sécurité", + "enableRelay": "Activer le relais", + "enableTLS": "Activer TLS", + "encryptionMethod": "Méthode de cryptage", + "flow": "Algorithme de contrôle de flux", + "hopInterval": "Intervalle de saut", + "hopPorts": "Ports de saut", + "hopPortsPlaceholder": "Séparer plusieurs ports par des virgules", + "name": "Nom", + "nodeGroupId": "ID du groupe de nœuds", + "obfsPassword": "Mot de passe d'obfuscation", + "obfsPasswordPlaceholder": "Laisser vide pour ne pas obfusquer", + "path": "Chemin", + "pleaseSelect": "Veuillez sélectionner", + "port": "Port de service", + "protocol": "Protocole", + "relayHost": "Adresse de relais", + "relayPort": "Port de relais", + "remarks": "Remarques", + "security": "Sécurité", + "securityConfig": "Configuration de sécurité", + "security_config": { + "fingerprint": "Empreinte digitale", + "privateKey": "Clé privée", + "privateKeyPlaceholder": "Laisser vide pour générer automatiquement", + "publicKey": "Clé publique", + "publicKeyPlaceholder": "Laisser vide pour générer automatiquement", + "serverAddress": "Adresse du serveur", + "serverAddressPlaceholder": "Adresse cible REALITY, par défaut utilise SNI", + "serverName": "Nom du serveur (SNI)", + "serverNamePlaceholder": "Obligatoire pour REALITY, doit correspondre à l'arrière-plan", + "serverPort": "Port du serveur", + "serverPortPlaceholder": "Port cible REALITY, par défaut 443", + "shortId": "Identifiant court", + "shortIdPlaceholder": "Laisser vide pour générer automatiquement", + "sni": "Indication de nom de serveur (SNI)" + }, + "selectEncryptionMethod": "Sélectionner la méthode de cryptage", + "selectNodeGroup": "Sélectionner le groupe de nœuds", + "selectProtocol": "Sélectionner le protocole", + "serverAddr": "Adresse du serveur", + "serverName": "Nom du service", + "speedLimit": "Limite de vitesse", + "speedLimitPlaceholder": "Illimité", + "trafficRatio": "Taux de trafic", + "transport": "Protocole de transport", + "transportConfig": "Configuration du protocole de transport", + "transportHost": "Adresse du service de transport", + "transportPath": "Chemin de transport", + "transportServerName": "Nom du service de transport" + }, + "lastUpdated": "Dernière mise à jour", + "memory": "Mémoire", + "name": "Nom", + "node": "Nœud", + "nodeGroup": "Groupe de nœuds", + "normal": "Normal", + "onlineCount": "Nombre d'utilisateurs en ligne", + "onlineUsers": "Utilisateurs en ligne", + "rate": "Taux", + "relay": "Relais", + "serverAddr": "Adresse du serveur", + "speedLimit": "Limite de vitesse", + "status": "Statut", + "trafficRatio": "Taux de trafic", + "type": "Type", + "updateSuccess": "Mise à jour réussie", + "updatedAt": "Date de mise à jour" + }, + "tabs": { + "node": "Nœud", + "nodeGroup": "Groupe de nœuds" + } +} diff --git a/apps/admin/locales/fr-FR/subscribe.json b/apps/admin/locales/fr-FR/subscribe.json new file mode 100644 index 0000000..48adf43 --- /dev/null +++ b/apps/admin/locales/fr-FR/subscribe.json @@ -0,0 +1,79 @@ +{ + "actions": "actions", + "cancel": "Annuler", + "confirm": "Confirmer", + "confirmDelete": "Êtes-vous sûr de vouloir supprimer ?", + "create": "Créer", + "createSubscribe": "Créer un abonnement", + "createSuccess": "Création réussie", + "delete": "Supprimer", + "deleteSuccess": "Suppression réussie", + "deleteWarning": "Une fois supprimées, les données ne peuvent pas être récupérées. Veuillez procéder avec prudence.", + "deviceLimit": "Nombre d'appareils", + "edit": "Éditer", + "editSubscribe": "Modifier l'abonnement", + "form": { + "cancel": "Annuler", + "confirm": "Confirmer", + "description": "Description", + "deviceLimit": "Limite d'appareils", + "discount": "Remise", + "discountDescription": "Remise basée sur le prix unitaire", + "discountMonths": "mois", + "discountPercent": "Pourcentage de remise", + "discount_price": "Prix remisé", + "duration": "Durée (mois)", + "inventory": "Stock", + "name": "Nom", + "noLimit": "Illimité", + "quota": "Quantité d'achat limitée", + "replacement": "Prix de réinitialisation (par fois)", + "selectSubscribeGroup": "Veuillez sélectionner un groupe d'abonnement", + "server": "Serveur", + "serverGroup": "Groupe de serveurs", + "speedLimit": "Limite de vitesse (Mbps)", + "subscribeGroup": "Groupe d'abonnement", + "traffic": "Trafic", + "unit_price": "Prix mensuel unitaire" + }, + "group": { + "actions": "Actions", + "cancel": "Annuler", + "confirm": "Confirmer", + "confirmDelete": "Êtes-vous sûr de vouloir supprimer ?", + "create": "Créer", + "createSubscribeGroup": "Créer un groupe d'abonnement", + "createSuccess": "Création réussie", + "delete": "Supprimer", + "deleteSuccess": "Suppression réussie", + "deleteWarning": "Les données ne peuvent pas être récupérées après suppression, veuillez procéder avec prudence.", + "description": "Description", + "edit": "Éditer", + "editSubscribeGroup": "Éditer le groupe d'abonnement", + "form": { + "cancel": "Annuler", + "confirm": "Confirmer", + "description": "Description", + "name": "Nom" + }, + "name": "Nom", + "title": "Liste des groupes d'abonnement", + "updateSuccess": "Mise à jour réussie", + "updatedAt": "Date de mise à jour" + }, + "inventory": "inventaire", + "name": "Nom", + "quota": "Limite d'achat/par fois", + "replacement": "Réinitialiser le prix/par fois", + "sell": "Vente", + "show": "Afficher sur la page d'accueil", + "subscribe": "S'abonner", + "subscribeGroup": "S'abonner au groupe", + "tabs": { + "subscribe": "S'abonner", + "subscribeGroup": "Groupe d'abonnement" + }, + "traffic": "trafic", + "unitPrice": "Prix/mois", + "updateSuccess": "Mise à jour réussie" +} diff --git a/apps/admin/locales/fr-FR/system.json b/apps/admin/locales/fr-FR/system.json new file mode 100644 index 0000000..1e82d9e --- /dev/null +++ b/apps/admin/locales/fr-FR/system.json @@ -0,0 +1,156 @@ +{ + "currency": { + "accessKey": "Clé d'accès", + "accessKeyDescription": "Clé API de taux de change fournie gratuitement par https://exchangerate.host", + "currencySymbol": "Symbole monétaire", + "currencySymbolDescription": "Utilisé uniquement pour l'affichage, toute modification entraînera un changement de toutes les unités monétaires dans le système", + "currencyUnit": "Unité monétaire", + "currencyUnitDescription": "Utilisé uniquement pour l'affichage, toute modification entraînera un changement de toutes les unités monétaires dans le système", + "saveSuccess": "Enregistrement réussi" + }, + "email": { + "expiration_email_template": "Modèle de notification d'expiration", + "expiration_email_templateDescription": "Les variables {after}.nomDeVariable{before} dans le modèle seront remplacées par des données réelles, veuillez vous assurer de conserver ces variables.", + "inputPlaceholder": "Veuillez entrer le contenu...", + "maintenance_email_template": "Modèle de notification de maintenance", + "maintenance_email_templateDescription": "Les variables {after}.nomDeVariable{before} dans le modèle seront remplacées par des données réelles, veuillez vous assurer de conserver ces variables.", + "saveSuccess": "La configuration a été enregistrée avec succès.", + "sendFailure": "L'envoi de l'e-mail de test a échoué, veuillez vérifier la configuration.", + "sendSuccess": "L'e-mail de test a été envoyé avec succès.", + "sendTestEmail": "Envoyer un e-mail de test", + "sendTestEmailDescription": "Envoyez un e-mail de test pour vérifier si la configuration est correcte.", + "senderAddress": "Adresse de l'expéditeur", + "senderAddressDescription": "Adresse e-mail par défaut utilisée pour envoyer des e-mails.", + "smtpAccount": "Compte SMTP", + "smtpAccountDescription": "Compte e-mail utilisé pour l'authentification.", + "smtpEncryptionMethod": "Méthode de chiffrement SMTP", + "smtpEncryptionMethodDescription": "Choisissez si vous souhaitez activer le chiffrement SSL/TLS.", + "smtpPassword": "Mot de passe SMTP", + "smtpPasswordDescription": "Mot de passe pour ce compte SMTP.", + "smtpServerAddress": "Adresse du serveur SMTP", + "smtpServerAddressDescription": "Spécifiez l'adresse du serveur utilisée pour envoyer des e-mails.", + "smtpServerPort": "Port du serveur SMTP", + "smtpServerPortDescription": "Spécifiez le numéro de port pour se connecter au serveur SMTP.", + "verify_email_template": "Modèle d'e-mail de vérification", + "verify_email_templateDescription": "Les variables {after}.nomDeVariable{before} dans le modèle seront remplacées par des données réelles, veuillez vous assurer de conserver ces variables." + }, + "invite": { + "commissionFirstTimeOnly": "Commission uniquement sur le premier achat", + "commissionFirstTimeOnlyDescription": "Une fois activé, la commission est générée uniquement lors du premier paiement de l'invité. Vous pouvez configurer chaque utilisateur individuellement dans la gestion des utilisateurs.", + "enableForcedInvite": "Activer l'invitation forcée", + "enableForcedInviteDescription": "Une fois activé, seuls les utilisateurs invités peuvent s'inscrire.", + "inputPlaceholder": "Veuillez entrer", + "inviteCommissionPercentage": "Pourcentage de commission d'invitation", + "inviteCommissionPercentageDescription": "Pourcentage de commission global par défaut, vous pouvez configurer un pourcentage individuel dans la gestion des utilisateurs.", + "saveSuccess": "Enregistrement réussi" + }, + "node": { + "communicationKey": "Clé de communication", + "communicationKeyDescription": "Clé pour la communication du nœud, afin de garantir que les données ne soient pas interceptées par d'autres", + "inputPlaceholder": "Veuillez entrer", + "nodePullInterval": "Intervalle de récupération du nœud", + "nodePullIntervalDescription": "Fréquence à laquelle le nœud récupère les données du panneau (en secondes)", + "nodePushInterval": "Intervalle de poussée du nœud", + "nodePushIntervalDescription": "Fréquence à laquelle le nœud pousse les données vers le panneau", + "saveSuccess": "Enregistrement réussi" + }, + "register": { + "emailSuffixWhitelist": "Liste blanche des suffixes d'email", + "emailSuffixWhitelistDescription": "Une fois activé, seuls les emails avec les suffixes de la liste pourront s'inscrire", + "emailVerification": "Vérification de l'email", + "emailVerificationDescription": "Une fois activé, les utilisateurs devront vérifier leur email", + "ipRegistrationLimit": "Limite d'inscription par IP", + "ipRegistrationLimitDescription": "Une fois activé, les IP répondant aux critères seront limitées pour l'inscription. Veuillez noter que la détermination de l'IP peut poser problème en raison du CDN ou du proxy frontal", + "penaltyTime": "Temps de pénalité (minutes)", + "penaltyTimeDescription": "L'utilisateur doit attendre que le temps de pénalité soit écoulé pour s'inscrire à nouveau", + "registrationLimitCount": "Compteur de limite d'inscription", + "registrationLimitCountDescription": "Active la pénalité après avoir atteint la limite d'inscription", + "saveSuccess": "Enregistrement réussi", + "stopNewUserRegistration": "Arrêter l'inscription de nouveaux utilisateurs", + "stopNewUserRegistrationDescription": "Une fois activé, personne ne pourra s'inscrire", + "trialRegistration": "Inscription d'essai", + "trialRegistrationDescription": "Activez l'inscription d'essai, veuillez d'abord modifier le forfait et la durée d'essai", + "whitelistSuffixes": "Suffixes de la liste blanche", + "whitelistSuffixesDescription": "Utilisé pour la vérification des emails d'inscription, un par ligne", + "whitelistSuffixesPlaceholder": "Veuillez entrer les suffixes d'email, un par ligne" + }, + "site": { + "logo": "LOGO", + "logoDescription": "Utilisé pour afficher l'emplacement où le LOGO doit être montré", + "logoPlaceholder": "Veuillez entrer l'URL du LOGO, ne pas terminer par '/'", + "saveSuccess": "Enregistrement réussi", + "siteDesc": "Description du site", + "siteDescDescription": "Utilisé pour afficher l'emplacement où la description du site doit être montrée", + "siteDescPlaceholder": "Veuillez entrer la description du site", + "siteDomain": "Domaine du site", + "siteDomainDescription": "L'adresse de domaine actuelle du site, par exemple pour les e-mails", + "siteDomainPlaceholder": "Veuillez entrer l'adresse du domaine, un domaine par ligne", + "siteName": "Nom du site", + "siteNameDescription": "Utilisé pour afficher l'emplacement où le nom du site doit être montré", + "siteNamePlaceholder": "Veuillez entrer le nom du site" + }, + "subscription": { + "add": "Ajouter", + "app": "Application", + "appDescription": "Configurez l'adresse de téléchargement de l'application et les règles d'importation, n'oubliez pas de sauvegarder après modification", + "appDownloadURL": "Adresse de téléchargement de l'application", + "appIcon": "Icône de l'application", + "appName": "Nom de l'application", + "delete": "Supprimer", + "reset": "Réinitialiser", + "save": "Enregistrer", + "saveSuccess": "Enregistrement réussi", + "singleSubscriptionMode": "Mode d'abonnement unique", + "singleSubscriptionModeDescription": "Une fois activé, tous les forfaits des utilisateurs seront convertis en solde", + "subscriptionDomain": "Domaine d'abonnement", + "subscriptionDomainDescription": "Utilisé pour l'abonnement, laissez vide pour utiliser le domaine du site", + "subscriptionDomainPlaceholder": "Veuillez entrer le domaine d'abonnement, un domaine par ligne", + "subscriptionPath": "Chemin d'abonnement", + "subscriptionPathDescription": "Utilisé pour l'abonnement, veuillez redémarrer le système après modification pour garantir une performance optimale", + "subscriptionPathPlaceholder": "Veuillez entrer", + "subscriptionProtocol": "Protocole d'abonnement", + "wildcardResolution": "Résolution de joker", + "wildcardResolutionDescription": "Utilisé pour l'abonnement" + }, + "tabs": { + "currency": "Devise", + "email": "E-mail", + "invite": "Inviter", + "node": "Nœud", + "register": "S'inscrire", + "site": "Site", + "subscription": "Abonnement", + "telegram": "Telegram", + "tos": "Conditions de service", + "verify": "Vérifier" + }, + "telegram": { + "botToken": "Jeton du robot", + "botTokenDescription": "Veuillez entrer le jeton fourni par Botfather", + "enableBotNotifications": "Activer les notifications du robot", + "enableBotNotificationsDescription": "Une fois activé, le robot enverra des notifications de base aux administrateurs et utilisateurs liés à Telegram", + "groupURL": "URL du groupe", + "groupURLDescription": "Une fois rempli, il sera affiché ou utilisé là où nécessaire sur le côté utilisateur", + "inputPlaceholderBotToken": "0000000000:xxxxxxxxx_xxxxxxxxxxxxxxx", + "inputPlaceholderGroupURL": "https://t.me/xxxxxx", + "saveSuccess": "Enregistrement réussi" + }, + "tos": { + "saveSuccess": "Enregistrement réussi", + "title": "Conditions de service" + }, + "verify": { + "inputPlaceholder": "Veuillez entrer", + "loginVerificationCode": "Code de vérification de connexion", + "loginVerificationCodeDescription": "Vérification humaine lors de la connexion", + "registrationVerificationCode": "Code de vérification d'inscription", + "registrationVerificationCodeDescription": "Vérification humaine lors de l'inscription", + "resetPasswordVerificationCode": "Code de vérification de réinitialisation du mot de passe", + "resetPasswordVerificationCodeDescription": "Vérification humaine lors de la réinitialisation du mot de passe", + "saveSuccess": "Enregistrement réussi", + "turnstileSecret": "Clé secrète Turnstile", + "turnstileSecretDescription": "Clé secrète Turnstile fournie par Cloudflare", + "turnstileSiteKey": "Clé de site Turnstile", + "turnstileSiteKeyDescription": "Clé de site Turnstile fournie par Cloudflare" + } +} diff --git a/apps/admin/locales/fr-FR/ticket.json b/apps/admin/locales/fr-FR/ticket.json new file mode 100644 index 0000000..ab2581d --- /dev/null +++ b/apps/admin/locales/fr-FR/ticket.json @@ -0,0 +1,19 @@ +{ + "actions": "Actions", + "cancel": "Annuler", + "check": "Vérifier", + "close": "fermer", + "closeSuccess": "Fermeture réussie", + "closeWarning": "Une fois fermé, ce ticket ne pourra plus être modifié. Veuillez procéder avec prudence.", + "confirm": "Confirmer", + "confirmClose": "Êtes-vous sûr de vouloir fermer ?", + "createdAt": "Date de création", + "inputPlaceholder": "Veuillez entrer votre question, nous vous répondrons dès que possible.", + "open": "ouvrir", + "reply": "réponse", + "status": ["Statut", "À suivre", "En attente de réponse", "Traité", "Fermé"], + "ticketList": "Liste des tickets", + "title": "Titre", + "updatedAt": "Mis à jour à", + "user": "utilisateur" +} diff --git a/apps/admin/locales/fr-FR/tool.json b/apps/admin/locales/fr-FR/tool.json new file mode 100644 index 0000000..4e56cc6 --- /dev/null +++ b/apps/admin/locales/fr-FR/tool.json @@ -0,0 +1,26 @@ +{ + "caller": "Appelant", + "cancel": "Annuler", + "confirmReboot": "Confirmer le redémarrage", + "confirmSystemReboot": "Confirmer le redémarrage du système", + "confirmSystemUpgrade": "Confirmer la mise à niveau du système", + "confirmUpgrade": "Confirmer la mise à niveau", + "currentVersion": "Version actuelle du système :", + "errors": "Erreurs", + "ip": "IP", + "lastUpdated": "Dernière mise à jour :", + "none": "Aucun", + "query": "Requête", + "rebootDescription": "Êtes-vous sûr de vouloir redémarrer le système ? Cette opération entraînera une interruption temporaire du service.", + "rebooting": "Redémarrage du système...", + "refreshLogs": "Rafraîchir les journaux", + "request": "Demande", + "status": "Statut", + "systemLogs": "Journaux système", + "systemReboot": "Redémarrage du système", + "systemServices": "Services système", + "systemUpgrade": "Mise à niveau du système", + "upgradeDescription": "Êtes-vous sûr de vouloir effectuer la mise à niveau du système ? Cette opération peut prendre quelques minutes, pendant lesquelles le système peut ne pas répondre.", + "userAgent": "Agent utilisateur", + "viewLogsAndManage": "Afficher les journaux système, effectuer des mises à niveau et redémarrer le système" +} diff --git a/apps/admin/locales/fr-FR/user.json b/apps/admin/locales/fr-FR/user.json new file mode 100644 index 0000000..147351a --- /dev/null +++ b/apps/admin/locales/fr-FR/user.json @@ -0,0 +1,38 @@ +{ + "actions": "actions", + "balance": "Solde", + "cancel": "Annuler", + "confirm": "Confirmer", + "confirmDelete": "Êtes-vous sûr de vouloir supprimer ?", + "create": "Créer", + "createSuccess": "Création réussie", + "createUser": "Créer un utilisateur", + "createdAt": "Date d'inscription", + "delete": "Supprimer", + "deleteDescription": "Une fois supprimées, les données ne peuvent pas être récupérées. Veuillez procéder avec prudence.", + "deleteSuccess": "Suppression réussie", + "edit": "Éditer", + "editUser": "Modifier l'utilisateur", + "email": "e-mail", + "enable": "Activer", + "form": { + "balance": "Solde", + "balancePlaceholder": "Solde", + "cancel": "Annuler", + "confirm": "Confirmer", + "invalidEmailFormat": "Format d'e-mail invalide", + "inviteCode": "Code d'invitation", + "inviteCodePlaceholder": "Veuillez entrer le code d'invitation (laissez vide pour générer automatiquement)", + "manager": "Administrateur", + "password": "Mot de passe", + "passwordPlaceholder": "Veuillez entrer un nouveau mot de passe (peut être laissé vide)", + "refererId": "ID du parrain", + "refererIdPlaceholder": "Veuillez entrer l'ID du parrain", + "userEmail": "E-mail de l'utilisateur", + "userEmailPlaceholder": "Veuillez entrer l'e-mail de l'utilisateur" + }, + "referer": "Référent", + "updateSuccess": "Mise à jour réussie", + "userList": "Liste des utilisateurs", + "userName": "Adresse e-mail de l'utilisateur" +} diff --git a/apps/admin/locales/hi-IN/announcement.json b/apps/admin/locales/hi-IN/announcement.json new file mode 100644 index 0000000..9cffbc9 --- /dev/null +++ b/apps/admin/locales/hi-IN/announcement.json @@ -0,0 +1,30 @@ +{ + "actions": "क्रियाएँ", + "announcementList": "घोषणाओं की सूची", + "cancel": "रद्द करें", + "confirm": "पुष्टि करें", + "confirmDelete": "क्या आप वाकई हटाना चाहते हैं?", + "content": "सामग्री", + "create": "सृजन करें", + "createAnnouncement": "घोषणा बनाएं", + "createSuccess": "सृजन सफल", + "delete": "हटाएं", + "deleteDescription": "एक बार हटाने के बाद, डेटा को पुनः प्राप्त नहीं किया जा सकता है। कृपया सावधानीपूर्वक कार्य करें।", + "deleteSuccess": "हटाने में सफलता", + "edit": "संपादित करें", + "editAnnouncement": "घोषणा संपादित करें", + "enable": "सक्षम करें", + "form": { + "cancel": "रद्द करें", + "confirm": "पुष्टि करें", + "content": "सामग्री", + "contentPlaceholder": "कृपया घोषणा सामग्री दर्ज करें (Markdown समर्थित)", + "title": "शीर्षक", + "titlePlaceholder": "कृपया दर्ज करें" + }, + "hide": "छिपाएं", + "show": "प्रदर्शित करें", + "title": "शीर्षक", + "updateSuccess": "अपडेट सफल", + "updatedAt": "अद्यतन समय" +} diff --git a/apps/admin/locales/hi-IN/auth.json b/apps/admin/locales/hi-IN/auth.json new file mode 100644 index 0000000..01f4af3 --- /dev/null +++ b/apps/admin/locales/hi-IN/auth.json @@ -0,0 +1,39 @@ +{ + "check": { + "checking": "सत्यापन हो रहा है...", + "continue": "जारी रखें", + "description": "लॉगिन या पंजीकरण जारी रखने के लिए कृपया अपना ईमेल दर्ज करें।", + "email": "कृपया एक मान्य ईमेल पता दर्ज करें।", + "title": "लॉगिन/पंजीकरण", + "whitelist": "ईमेल डोमेन अनुमत श्वेतसूची में नहीं है।" + }, + "login": { + "description": "कृपया लॉगिन करने के लिए अपनी खाता जानकारी दर्ज करें।", + "forgotPassword": "पासवर्ड भूल गए?", + "success": "लॉगिन सफल!", + "switchAccount": "पंजीकरण/खाता बदलें", + "title": "लॉगिन" + }, + "logout": "लॉगआउट", + "orWithEmail": "या ईमेल का उपयोग करें", + "register": { + "description": "नया खाता बनाने के लिए, अपनी जानकारी भरें।", + "existingAccount": "पहले से खाता है?", + "get": "प्राप्त करें", + "invite": "आमंत्रण कोड", + "message": "#### प्रिय उपयोगकर्ता, नमस्ते!\n\nहमारे प्रति आपकी रुचि और समर्थन के लिए धन्यवाद। साइट संचालन रणनीति में बदलाव के कारण, हमने नए उपयोगकर्ता पंजीकरण को बंद कर दिया है। इस दौरान, मौजूदा उपयोगकर्ताओं के उपयोग पर कोई प्रभाव नहीं पड़ेगा।\n\nहम आपको बेहतर सेवा और अनुभव प्रदान करने के लिए प्रतिबद्ध हैं, इसलिए पंजीकरण बंद होने के दौरान हम व्यापक प्रणाली अनुकूलन और कार्यक्षमता उन्नयन करेंगे। भविष्य में, हम आपको बेहतर सामग्री और सेवाओं के साथ स्वागत करेंगे।\n\nहमारी वेबसाइट और सोशल मीडिया प्लेटफॉर्म पर नवीनतम अपडेट और सूचनाएं प्राप्त करने के लिए ध्यान दें। आपकी समझ और समर्थन के लिए धन्यवाद।\n\nयदि आपके कोई प्रश्न हैं या सहायता की आवश्यकता है, तो कृपया हमारी ग्राहक सेवा टीम से संपर्क करें।\n\n**आपके समर्थन और समझ के लिए एक बार फिर धन्यवाद।**", + "passwordMismatch": "दोनों बार दर्ज किया गया पासवर्ड मेल नहीं खा रहा है", + "success": "पंजीकरण सफल, स्वचालित रूप से लॉग इन हो गया!", + "switchToLogin": "लॉगिन/ईमेल रीसेट करें", + "title": "पंजीकरण" + }, + "reset": { + "description": "कृपया अपना ईमेल पता दर्ज करें ताकि पासवर्ड रीसेट किया जा सके।", + "existingAccount": "पहले से खाता है?", + "get": "प्राप्त करें", + "success": "पासवर्ड रीसेट सफल, स्वचालित रूप से लॉगिन पर स्विच किया गया!", + "switchToLogin": "लॉगिन/रजिस्टर", + "title": "पासवर्ड रीसेट" + }, + "tos": "सेवा की शर्तें" +} diff --git a/apps/admin/locales/hi-IN/common.json b/apps/admin/locales/hi-IN/common.json new file mode 100644 index 0000000..60ec870 --- /dev/null +++ b/apps/admin/locales/hi-IN/common.json @@ -0,0 +1,60 @@ +{ + "billing": { + "description": "प्रायोजन PPanel को अपडेट जारी रखने में मदद करता है!", + "title": "प्रायोजक" + }, + "empty": [ + "कल्पना कीजिए कि यहाँ अद्भुत सामग्री से भरा हुआ है! फिलहाल केवल कल्पना पर निर्भर करें...", + "यह क्षेत्र रहस्यमय तरीके से गायब हो गया है, हम इसे वापस बुला रहे हैं!", + "अरे, कुछ भी नहीं हुआ... आप खुद कुछ जोड़ सकते हैं!", + "यह ऐसा है जैसे किसी संगीत कार्यक्रम में मंच पर कोई नहीं है... क्यों न आप खुद प्रदर्शन करें?", + "आपने एक खाली स्वर्ग ढूंढ लिया है! क्या आप यहाँ एक घर बनाना चाहेंगे?", + "यहाँ फिलहाल कुछ भी नहीं है, लेकिन रचनात्मकता यहीं से शुरू होती है!", + "कुछ भी नहीं है... लेकिन चिंता न करें, यह सिर्फ शुरुआत है!", + "यहाँ एक बड़ा आश्चर्य तैयार था, लेकिन आश्चर्य भाग गया!", + "फिलहाल कुछ भी नहीं है, जैसे स्नैक कैबिनेट खाली हो गया हो।", + "यह खाली जगह अपने नायक के आने का इंतजार कर रही है!" + ], + "request": { + "10001": "प्रश्न सफल नहीं हुआ है, कृपया थोड़ी देर बाद पुनः प्रयास करें या अपनी शर्तें जांचें।", + "10002": "अपडेट ऑपरेशन सफल नहीं हुआ, कृपया थोड़ी देर बाद पुनः प्रयास करें।", + "10003": "अस्थायी रूप से सम्मिलन ऑपरेशन पूरा नहीं हो सका, कृपया थोड़ी देर बाद पुनः प्रयास करें।", + "10004": "हटाने का ऑपरेशन पूरा नहीं हो सका, कृपया थोड़ी देर बाद पुनः प्रयास करें।", + "20001": "यह उपयोगकर्ता जानकारी पहले से मौजूद है, कृपया जानकारी बदलकर पुनः प्रयास करें।", + "20002": "यह उपयोगकर्ता नहीं मिला, कृपया जानकारी की जांच कर पुनः प्रयास करें।", + "20003": "आपके द्वारा दर्ज किया गया पासवर्ड गलत है, कृपया पुनः दर्ज करें।", + "20004": "यह उपयोगकर्ता निष्क्रिय कर दिया गया है, यदि कोई प्रश्न हो तो कृपया ग्राहक सेवा से संपर्क करें।", + "20005": "शेष राशि अपर्याप्त है, कृपया पुनः प्रयास करने से पहले रिचार्ज करें।", + "20006": "पंजीकरण सुविधा अस्थायी रूप से उपलब्ध नहीं है, कृपया थोड़ी देर बाद पुनः प्रयास करें।", + "30001": "यह नोड पहले से मौजूद है, कृपया पुनः जोड़ने का प्रयास न करें।", + "30002": "संबंधित नोड नहीं मिला, कृपया जांच कर पुनः प्रयास करें।", + "30003": "समूह पहले से मौजूद है, कृपया अन्य नाम का उपयोग करने का प्रयास करें।", + "30004": "यह समूह नहीं मिला, कृपया जानकारी की पुष्टि कर पुनः प्रयास करें।", + "30005": "इस समूह में अभी भी सामग्री है, कृपया खाली करने के बाद पुनः प्रयास करें।", + "400": "अनुरोध पैरामीटर सही नहीं हैं, कृपया जाँचें और पुनः सबमिट करें।", + "40002": "मान्य टोकन नहीं मिला, कृपया पहले लॉगिन करें और फिर पुनः प्रयास करें।", + "40003": "वर्तमान टोकन अमान्य है, कृपया पुनः प्राप्त कर पुनः प्रयास करें।", + "40004": "टोकन की समय सीमा समाप्त हो गई है, कृपया पुनः लॉगिन करें।", + "40005": "आपके पास पहुंच की अनुमति नहीं है, यदि कोई प्रश्न हो तो कृपया व्यवस्थापक से संपर्क करें।", + "401": "अनुरोध बहुत बार किया गया है, कृपया थोड़ी देर बाद पुनः प्रयास करें।", + "500": "सर्वर में कुछ समस्या है, कृपया थोड़ी देर बाद पुनः प्रयास करें।", + "50001": "संबंधित कूपन जानकारी नहीं मिली, कृपया जांच कर पुनः प्रयास करें।", + "50002": "यह कूपन पहले ही उपयोग किया जा चुका है, इसे पुनः उपयोग नहीं किया जा सकता।", + "60001": "सदस्यता की समय सीमा समाप्त हो गई है, कृपया नवीनीकरण के बाद उपयोग करें।", + "60002": "अस्थायी रूप से इस सदस्यता का उपयोग नहीं किया जा सकता, कृपया थोड़ी देर बाद पुनः प्रयास करें।", + "70001": "सत्यापन कोड गलत है, कृपया पुनः दर्ज करें।", + "80001": "कार्य सफलतापूर्वक कतार में नहीं जोड़ा गया, कृपया थोड़ी देर बाद पुनः प्रयास करें।", + "90001": "कृपया DEBUG मोड बंद करें और फिर पुनः प्रयास करें।", + "undefined": "सिस्टम में त्रुटि हुई है, कृपया थोड़ी देर बाद पुनः प्रयास करें।" + }, + "table": { + "actions": "क्रियाएँ", + "asc": "आरोही", + "desc": "अवरोही", + "hide": "छिपाएँ", + "pageInfo": "पृष्ठ {current}, कुल {total} पृष्ठ", + "rowsPerPage": "प्रति पृष्ठ पंक्तियाँ", + "selectedItems": "{total} पंक्तियाँ चयनित" + }, + "unlimited": "असीमित" +} diff --git a/apps/admin/locales/hi-IN/coupon.json b/apps/admin/locales/hi-IN/coupon.json new file mode 100644 index 0000000..b24bdf6 --- /dev/null +++ b/apps/admin/locales/hi-IN/coupon.json @@ -0,0 +1,50 @@ +{ + "actions": "क्रियाएँ", + "amount": "राशि", + "cancel": "रद्द करें", + "code": "कोड", + "confirm": "पुष्टि करें", + "confirmDelete": "क्या आप वाकई हटाना चाहते हैं?", + "count": "संख्या", + "couponList": "कूपन सूची", + "create": "सृजन करें", + "createCoupon": "कूपन बनाएं", + "createSuccess": "सृजन सफल", + "delete": "हटाएं", + "deleteSuccess": "हटाने में सफलता", + "deleteWarning": "एक बार हटाने के बाद, डेटा को पुनः प्राप्त नहीं किया जा सकता। कृपया सावधानीपूर्वक कार्य करें।", + "discount": "छूट", + "edit": "संपादित करें", + "editCoupon": "कूपन संपादित करें", + "enable": "सक्षम करें", + "form": { + "amountDiscount": "राशि छूट", + "cancel": "रद्द करें", + "confirm": "पुष्टि करें", + "count": "अधिकतम उपयोग संख्या", + "countPlaceholder": "अधिकतम उपयोग संख्या (खाली छोड़ें तो असीमित)", + "customCouponCode": "कस्टम कूपन कोड", + "customCouponCodePlaceholder": "कस्टम कूपन कोड (खाली छोड़ें तो स्वचालित रूप से उत्पन्न होगा)", + "enterCouponName": "कृपया कूपन का नाम दर्ज करें", + "enterValue": "कृपया मूल्य दर्ज करें", + "expireTime": "समाप्ति समय", + "name": "नाम", + "percentageDiscount": "प्रतिशत छूट", + "selectServer": "कृपया सदस्यता चुनें", + "selectTime": "समय चुनें", + "specifiedServer": "निर्दिष्ट सदस्यता", + "startTime": "प्रभावी समय", + "type": "कूपन प्रकार", + "userLimit": "प्रति उपयोगकर्ता अधिकतम उपयोग संख्या", + "userLimitPlaceholder": "प्रति उपयोगकर्ता अधिकतम उपयोग संख्या (खाली छोड़ें तो असीमित)" + }, + "name": "नाम", + "percentage": "प्रतिशत", + "remainingTimes": "शेष", + "subscribe": "सदस्यता लें", + "type": "प्रकार", + "unlimited": "असीमित", + "updateSuccess": "अपडेट सफल", + "usedTimes": "उपयोग की गई बार", + "validityPeriod": "वैधता अवधि" +} diff --git a/apps/admin/locales/hi-IN/document.json b/apps/admin/locales/hi-IN/document.json new file mode 100644 index 0000000..cb7aa9c --- /dev/null +++ b/apps/admin/locales/hi-IN/document.json @@ -0,0 +1,29 @@ +{ + "DocumentList": "दस्तावेज़ सूची", + "actions": "क्रियाएँ", + "cancel": "रद्द करें", + "confirm": "पुष्टि करें", + "confirmDelete": "क्या आप वाकई हटाना चाहते हैं?", + "create": "सृजन", + "createDocument": "दस्तावेज़ बनाएं", + "createSuccess": "सृजन सफल", + "delete": "हटाएं", + "deleteDescription": "एक बार हटाने के बाद, डेटा को पुनः प्राप्त नहीं किया जा सकता। कृपया सावधानीपूर्वक कार्य करें।", + "deleteSuccess": "हटाने में सफलता", + "edit": "संपादित करें", + "editDocument": "दस्तावेज़ संपादित करें", + "form": { + "cancel": "रद्द करें", + "confirm": "पुष्टि करें", + "content": "सामग्री", + "tags": "श्रेणियाँ", + "tagsPlaceholder": "कृपया कई श्रेणियाँ दर्ज करने के लिए एंटर कुंजी या अल्पविराम (,) का उपयोग करें", + "title": "शीर्षक", + "titlePlaceholder": "कृपया दर्ज करें" + }, + "show": "प्रदर्शित करें", + "tags": "श्रेणियाँ", + "title": "शीर्षक", + "updateSuccess": "अपडेट सफल", + "updatedAt": "अद्यतन समय" +} diff --git a/apps/admin/locales/hi-IN/index.json b/apps/admin/locales/hi-IN/index.json new file mode 100644 index 0000000..c21162f --- /dev/null +++ b/apps/admin/locales/hi-IN/index.json @@ -0,0 +1,29 @@ +{ + "email": "ईमेल", + "month": "इस माह", + "monthDownloadTraffic": "इस महीने की डाउनलोड ट्रैफिक", + "monthUploadTraffic": "इस महीने का अपलोड ट्रैफिक", + "newPurchase": "नई खरीद", + "nodeTraffic": "नोड ट्रैफिक", + "nodes": "नोड्स", + "offlineNodeCount": "ऑफ़लाइन नोड की संख्या", + "onlineIPCount": "ऑनलाइन IP संख्या", + "onlineNodeCount": "ऑनलाइन नोड की संख्या", + "pendingTickets": "लंबित टिकट", + "register": "पंजीकरण", + "repurchase": "पुनः खरीद", + "revenueTitle": "राजस्व सांख्यिकी", + "selectTypePlaceholder": "प्रकार चुनें", + "statisticsTitle": "सांख्यिकी", + "today": "आज", + "todayDownloadTraffic": "आज का डाउनलोड ट्रैफिक", + "todayUploadTraffic": "आज का अपलोड ट्रैफिक", + "total": "कुल", + "totalIncome": "कुल आय", + "trafficRank": "ट्रैफिक रैंक", + "type": "प्रकार", + "userTitle": "उपयोगकर्ता सांख्यिकी", + "userTraffic": "उपयोगकर्ता ट्रैफ़िक", + "users": "उपयोगकर्ता", + "yesterday": "कल" +} diff --git a/apps/admin/locales/hi-IN/language.json b/apps/admin/locales/hi-IN/language.json new file mode 100644 index 0000000..f0cb5f9 --- /dev/null +++ b/apps/admin/locales/hi-IN/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "चेक", + "de-DE": "जर्मन", + "en-US": "अंग्रेज़ी", + "es-ES": "स्पेनिश", + "es-MX": "स्पेनिश (मेक्सिको)", + "fi-FI": "फिनिश", + "fr-FR": "फ्रेंच", + "hi-IN": "हिंदी", + "hu-HU": "हंगेरियन", + "ja-JP": "जापानी", + "ko-KR": "कोरियाई", + "no-NO": "नॉर्वेजियन", + "pl-PL": "पोलिश", + "pt-BR": "पुर्तगाली (ब्राज़ील)", + "ro-RO": "रोमानियाई", + "ru-RU": "रूसी", + "th-TH": "थाई", + "tr-TR": "तुर्की", + "uk-UA": "यूक्रेनी", + "vi-VN": "वियतनामी", + "zh-CN": "चीनी (सरल)", + "zh-TW": "चीनी (पारंपरिक)" +} diff --git a/apps/admin/locales/hi-IN/menu.json b/apps/admin/locales/hi-IN/menu.json new file mode 100644 index 0000000..a965f7a --- /dev/null +++ b/apps/admin/locales/hi-IN/menu.json @@ -0,0 +1,18 @@ +{ + "Announcement Management": "घोषणा प्रबंधन", + "Coupon Management": "कूपन प्रबंधन", + "Dashboard": "डैशबोर्ड", + "Document Management": "दस्तावेज़ प्रबंधन", + "Finance": "वित्त", + "Order Management": "ऑर्डर प्रबंधन", + "Payment Config": "भुगतान कॉन्फ़िगरेशन", + "Server": "सर्वर", + "Server Management": "सर्वर प्रबंधन", + "Settings": "सेटिंग्स", + "Subscribe Management": "सदस्यता प्रबंधन", + "System Config": "सिस्टम कॉन्फ़िगरेशन", + "System Tool": "सिस्टम उपकरण", + "Ticket Management": "टिकट प्रबंधन", + "User": "उपयोगकर्ता", + "User Management": "उपयोगकर्ता प्रबंधन" +} diff --git a/apps/admin/locales/hi-IN/order.json b/apps/admin/locales/hi-IN/order.json new file mode 100644 index 0000000..918994d --- /dev/null +++ b/apps/admin/locales/hi-IN/order.json @@ -0,0 +1,37 @@ +{ + "amount": "राशि", + "couponDiscount": "कूपन छूट", + "discount": "छूट राशि", + "failed": "असफल", + "feeAmount": "शुल्क राशि", + "method": "भुगतान विधि", + "methods": { + "alipay_f2f": "अलीपे (सामना-सामना)", + "balance": "शेष राशि", + "epay": "ई-पे", + "stripe_alipay": "स्ट्राइप (अलीपे)", + "stripe_wechat_pay": "स्ट्राइप (वीचैट)" + }, + "orderNumber": "ऑर्डर नंबर", + "status": { + "0": "स्थिति", + "1": "भुगतान लंबित", + "2": "भुगतान हो चुका है", + "3": "रद्द कर दिया गया", + "4": "बंद कर दिया गया", + "5": "पूरा हो चुका है" + }, + "subscribe": "सदस्यता लें", + "subscribePrice": "सदस्यता मूल्य", + "total": "कुल", + "tradeNo": "व्यापार संख्या", + "type": { + "0": "प्रकार", + "1": "नई खरीद", + "2": "नवीनीकरण", + "3": "डेटा रीसेट", + "4": "रिचार्ज" + }, + "updateTime": "अपडेट समय", + "user": "उपयोगकर्ता" +} diff --git a/apps/admin/locales/hi-IN/payment.json b/apps/admin/locales/hi-IN/payment.json new file mode 100644 index 0000000..16f9bfe --- /dev/null +++ b/apps/admin/locales/hi-IN/payment.json @@ -0,0 +1,44 @@ +{ + "aliPay": "अलीपे भुगतान", + "alipayf2f": { + "appId": "अलीपे एप्लिकेशन आईडी", + "invoiceName": "कस्टम उत्पाद नाम", + "invoiceNameDescription": "अलीपे बिल में प्रदर्शित होगा", + "privateKey": "अलीपे निजी कुंजी", + "publicKey": "अलीपे सार्वजनिक कुंजी", + "sandbox": "सैंडबॉक्स मोड", + "sandboxDescription": "भुगतान का परीक्षण करने के लिए सैंडबॉक्स मोड सक्षम करें" + }, + "enable": "सक्षम करें", + "enableDescription": "इस भुगतान विधि को सक्षम करें", + "epay": { + "key": "कुंजी", + "pid": "पीआईडी", + "url": "यूआरएल" + }, + "feeMode": "शुल्क मोड", + "feeModeDescription": "अतिरिक्त शुल्क की वसूली का तरीका", + "feeModeItems": ["कोई शुल्क नहीं", "प्रतिशत", "निश्चित राशि", "उपरोक्त दोनों"], + "feePercent": "प्रतिशत शुल्क (वैकल्पिक)", + "feePercentDescription": "ऑर्डर राशि के ऊपर शुल्क जोड़ा जाएगा", + "fixedFee": "निश्चित शुल्क (वैकल्पिक)", + "fixedFeeDescription": "ऑर्डर राशि के ऊपर एक निश्चित शुल्क जोड़ा जाता है", + "iconUrl": "आइकन URL (वैकल्पिक)", + "iconUrlDescription": "फ्रंटएंड प्रदर्शन के लिए उपयोग किया जाता है", + "inputPlaceholder": "कृपया दर्ज करें", + "key": "कुंजी", + "notifyUrl": "कस्टम अधिसूचना डोमेन (वैकल्पिक)", + "notifyUrlDescription": "गेटवे सूचना इस डोमेन पर भेजी जाएगी", + "payForRecommendations": "सिफारिशों के लिए भुगतान करें", + "pid": "पीआईडी", + "saveSuccess": "सहेजा गया", + "showName": "नाम दिखाएं", + "showNameDescription": "फ्रंटएंड प्रदर्शन के लिए उपयोग किया जाता है", + "stripe": { + "publicKey": "सार्वजनिक कुंजी", + "secretKey": "गुप्त कुंजी", + "webhookSecret": "वेबहुक कुंजी हस्ताक्षर" + }, + "url": "यूआरएल", + "wechatPay": "वीचैट पे" +} diff --git a/apps/admin/locales/hi-IN/server.json b/apps/admin/locales/hi-IN/server.json new file mode 100644 index 0000000..166d3d6 --- /dev/null +++ b/apps/admin/locales/hi-IN/server.json @@ -0,0 +1,122 @@ +{ + "group": { + "actions": "क्रियाएँ", + "cancel": "रद्द करें", + "confirm": "पुष्टि करें", + "confirmDelete": "क्या आप वाकई हटाना चाहते हैं?", + "create": "बनाएँ", + "createNodeGroup": "नोड समूह बनाएं", + "createdSuccessfully": "सफलतापूर्वक बनाया गया", + "delete": "हटाएं", + "deleteWarning": "हटाने के बाद डेटा पुनर्प्राप्त नहीं किया जा सकेगा, कृपया सावधानीपूर्वक कार्य करें।", + "deletedSuccessfully": "सफलतापूर्वक हटाया गया", + "description": "विवरण", + "edit": "संपादित करें", + "editNodeGroup": "नोड समूह संपादित करें", + "form": { + "cancel": "रद्द करें", + "confirm": "पुष्टि करें", + "description": "विवरण", + "name": "नाम" + }, + "name": "नाम", + "title": "नोड समूह सूची", + "updatedAt": "अद्यतन समय" + }, + "node": { + "abnormal": "असामान्य", + "actions": "क्रियाएँ", + "address": "पता", + "all": "सभी", + "cancel": "रद्द करें", + "confirm": "पुष्टि करें", + "confirmDelete": "क्या आप वाकई हटाना चाहते हैं?", + "create": "बनाएँ", + "createNode": "नोड बनाएं", + "createSuccess": "सफलतापूर्वक बनाया गया", + "delete": "हटाएं", + "deleteSuccess": "सफलतापूर्वक हटाया गया", + "deleteWarning": "हटाने के बाद, डेटा पुनर्प्राप्त नहीं किया जा सकेगा। कृपया सावधानी से कार्य करें।", + "disk": "डिस्क", + "edit": "संपादित करें", + "editNode": "नोड संपादित करें", + "enable": "सक्रिय करें", + "form": { + "allowInsecure": "असुरक्षित की अनुमति दें", + "cancel": "रद्द करें", + "confirm": "पुष्टि करें", + "edit": "संपादित करें", + "editSecurity": "सुरक्षा कॉन्फ़िगरेशन संपादित करें", + "enableRelay": "रिले सक्षम करें", + "enableTLS": "TLS सक्षम करें", + "encryptionMethod": "एन्क्रिप्शन विधि", + "flow": "फ्लो कंट्रोल एल्गोरिदम", + "hopInterval": "हॉप अंतराल", + "hopPorts": "हॉप पोर्ट्स", + "hopPortsPlaceholder": "कई पोर्ट्स को कॉमा से अलग करें", + "name": "नाम", + "nodeGroupId": "नोड समूह ID", + "obfsPassword": "ऑबफ्स पासवर्ड", + "obfsPasswordPlaceholder": "खाली छोड़ें तो ऑबफ्स नहीं होगा", + "path": "पथ", + "pleaseSelect": "कृपया चुनें", + "port": "सर्वर पोर्ट", + "protocol": "प्रोटोकॉल", + "relayHost": "रिले पता", + "relayPort": "रिले पोर्ट", + "remarks": "टिप्पणियाँ", + "security": "सुरक्षा", + "securityConfig": "सुरक्षा कॉन्फ़िगरेशन", + "security_config": { + "fingerprint": "फिंगरप्रिंट", + "privateKey": "प्राइवेट की", + "privateKeyPlaceholder": "खाली छोड़ें तो स्वचालित रूप से उत्पन्न होगा", + "publicKey": "पब्लिक की", + "publicKeyPlaceholder": "खाली छोड़ें तो स्वचालित रूप से उत्पन्न होगा", + "serverAddress": "सर्वर पता", + "serverAddressPlaceholder": "REALITY लक्ष्य पता, डिफ़ॉल्ट रूप से SNI का उपयोग करें", + "serverName": "सर्वर नाम (SNI)", + "serverNamePlaceholder": "REALITY के लिए आवश्यक, बैकएंड के साथ संगत", + "serverPort": "सर्वर पोर्ट", + "serverPortPlaceholder": "REALITY लक्ष्य पोर्ट, डिफ़ॉल्ट 443", + "shortId": "शॉर्ट आईडी", + "shortIdPlaceholder": "खाली छोड़ें तो स्वचालित रूप से उत्पन्न होगा", + "sni": "सर्वर नाम संकेत (SNI)" + }, + "selectEncryptionMethod": "एन्क्रिप्शन विधि चुनें", + "selectNodeGroup": "नोड समूह चुनें", + "selectProtocol": "प्रोटोकॉल चुनें", + "serverAddr": "सर्वर पता", + "serverName": "सेवा नाम", + "speedLimit": "गति सीमा", + "speedLimitPlaceholder": "कोई सीमा नहीं", + "trafficRatio": "ट्रैफिक दर", + "transport": "ट्रांसपोर्ट प्रोटोकॉल", + "transportConfig": "ट्रांसपोर्ट प्रोटोकॉल कॉन्फ़िगरेशन", + "transportHost": "ट्रांसपोर्ट सेवा पता", + "transportPath": "ट्रांसपोर्ट पथ", + "transportServerName": "ट्रांसपोर्ट सेवा नाम" + }, + "lastUpdated": "अंतिम अपडेट", + "memory": "मेमोरी", + "name": "नाम", + "node": "नोड", + "nodeGroup": "नोड समूह", + "normal": "सामान्य", + "onlineCount": "ऑनलाइन संख्या", + "onlineUsers": "ऑनलाइन उपयोगकर्ता", + "rate": "दर", + "relay": "रिले", + "serverAddr": "सर्वर पता", + "speedLimit": "गति सीमा", + "status": "स्थिति", + "trafficRatio": "ट्रैफिक दर", + "type": "प्रकार", + "updateSuccess": "सफलतापूर्वक अपडेट किया गया", + "updatedAt": "अपडेट समय" + }, + "tabs": { + "node": "नोड", + "nodeGroup": "नोड समूह" + } +} diff --git a/apps/admin/locales/hi-IN/subscribe.json b/apps/admin/locales/hi-IN/subscribe.json new file mode 100644 index 0000000..077ddf6 --- /dev/null +++ b/apps/admin/locales/hi-IN/subscribe.json @@ -0,0 +1,79 @@ +{ + "actions": "क्रियाएँ", + "cancel": "रद्द करें", + "confirm": "पुष्टि करें", + "confirmDelete": "क्या आप वाकई हटाना चाहते हैं?", + "create": "सृजन", + "createSubscribe": "नई सदस्यता बनाएं", + "createSuccess": "सृजन सफल", + "delete": "हटाएं", + "deleteSuccess": "हटाने में सफलता", + "deleteWarning": "हटाने के बाद डेटा पुनः प्राप्त नहीं किया जा सकता है, कृपया सावधानीपूर्वक कार्य करें।", + "deviceLimit": "उपकरण संख्या/यूनिट", + "edit": "संपादित करें", + "editSubscribe": "संपादन सदस्यता", + "form": { + "cancel": "रद्द करें", + "confirm": "पुष्टि करें", + "description": "विवरण", + "deviceLimit": "उपकरण सीमा", + "discount": "छूट", + "discountDescription": "इकाई मूल्य के आधार पर छूट सेट करें", + "discountMonths": "महीने", + "discountPercent": "छूट प्रतिशत", + "discount_price": "छूट मूल्य", + "duration": "अवधि (महीने)", + "inventory": "भंडार", + "name": "नाम", + "noLimit": "कोई सीमा नहीं", + "quota": "खरीद सीमा", + "replacement": "पुनःस्थापना मूल्य (प्रति बार)", + "selectSubscribeGroup": "कृपया सदस्यता समूह चुनें", + "server": "सर्वर", + "serverGroup": "सर्वर समूह", + "speedLimit": "गति सीमा (Mbps)", + "subscribeGroup": "सदस्यता समूह", + "traffic": "ट्रैफिक", + "unit_price": "प्रति माह मूल्य" + }, + "group": { + "actions": "क्रियाएँ", + "cancel": "रद्द करें", + "confirm": "पुष्टि करें", + "confirmDelete": "क्या आप वाकई हटाना चाहते हैं?", + "create": "बनाएँ", + "createSubscribeGroup": "नई सदस्यता समूह बनाएं", + "createSuccess": "सफलतापूर्वक बनाया गया", + "delete": "हटाएँ", + "deleteSuccess": "सफलतापूर्वक हटाया गया", + "deleteWarning": "हटाने के बाद डेटा पुनः प्राप्त नहीं किया जा सकता, कृपया सावधानीपूर्वक कार्य करें।", + "description": "विवरण", + "edit": "संपादित करें", + "editSubscribeGroup": "सदस्यता समूह संपादित करें", + "form": { + "cancel": "रद्द करें", + "confirm": "पुष्टि करें", + "description": "विवरण", + "name": "नाम" + }, + "name": "नाम", + "title": "सदस्यता समूह सूची", + "updateSuccess": "सफलतापूर्वक अपडेट किया गया", + "updatedAt": "अपडेट का समय" + }, + "inventory": "इन्वेंटरी", + "name": "नाम", + "quota": "प्रति खरीद सीमा", + "replacement": "मूल्य/प्रति बार रीसेट करें", + "sell": "बिक्री", + "show": "मुखपृष्ठ पर दिखाएं", + "subscribe": "सदस्यता लें", + "subscribeGroup": "सदस्यता समूह", + "tabs": { + "subscribe": "सदस्यता लें", + "subscribeGroup": "समूह सदस्यता" + }, + "traffic": "ट्रैफिक", + "unitPrice": "मूल्य/माह", + "updateSuccess": "अपडेट सफल" +} diff --git a/apps/admin/locales/hi-IN/system.json b/apps/admin/locales/hi-IN/system.json new file mode 100644 index 0000000..6c08411 --- /dev/null +++ b/apps/admin/locales/hi-IN/system.json @@ -0,0 +1,156 @@ +{ + "currency": { + "accessKey": "कुंजी", + "accessKeyDescription": "https://exchangerate.host द्वारा मुफ्त में प्रदान की गई विनिमय दर API कुंजी", + "currencySymbol": "मुद्रा प्रतीक", + "currencySymbolDescription": "केवल प्रदर्शन के लिए उपयोग किया जाता है, परिवर्तन के बाद सिस्टम में सभी मुद्रा इकाइयाँ बदल जाएँगी", + "currencyUnit": "मुद्रा इकाई", + "currencyUnitDescription": "केवल प्रदर्शन के लिए उपयोग किया जाता है, परिवर्तन के बाद सिस्टम में सभी मुद्रा इकाइयाँ बदल जाएँगी", + "saveSuccess": "सफलतापूर्वक सहेजा गया" + }, + "email": { + "expiration_email_template": "समाप्ति सूचना टेम्पलेट", + "expiration_email_templateDescription": "टेम्पलेट में {after}.वेरिएबल नाम{before} को वास्तविक डेटा से बदल दिया जाएगा, कृपया सुनिश्चित करें कि इन वेरिएबल्स को बनाए रखें।", + "inputPlaceholder": "कृपया सामग्री दर्ज करें...", + "maintenance_email_template": "रखरखाव सूचना टेम्पलेट", + "maintenance_email_templateDescription": "टेम्पलेट में {after}.वेरिएबल नाम{before} को वास्तविक डेटा से बदल दिया जाएगा, कृपया सुनिश्चित करें कि इन वेरिएबल्स को बनाए रखें।", + "saveSuccess": "कॉन्फ़िगरेशन सफलतापूर्वक सहेजा गया है।", + "sendFailure": "परीक्षण ईमेल भेजने में विफल, कृपया कॉन्फ़िगरेशन की जाँच करें।", + "sendSuccess": "परीक्षण ईमेल सफलतापूर्वक भेजा गया है।", + "sendTestEmail": "परीक्षण ईमेल भेजें", + "sendTestEmailDescription": "कॉन्फ़िगरेशन सही है या नहीं, यह सत्यापित करने के लिए एक परीक्षण ईमेल भेजें।", + "senderAddress": "प्रेषक का पता", + "senderAddressDescription": "ईमेल भेजने के लिए डिफ़ॉल्ट रूप से उपयोग किया जाने वाला ईमेल पता।", + "smtpAccount": "SMTP खाता", + "smtpAccountDescription": "प्रमाणीकरण के लिए उपयोग किया जाने वाला ईमेल खाता।", + "smtpEncryptionMethod": "SMTP एन्क्रिप्शन विधि", + "smtpEncryptionMethodDescription": "SSL/TLS एन्क्रिप्शन को सक्षम करने के लिए चुनें।", + "smtpPassword": "SMTP पासवर्ड", + "smtpPasswordDescription": "इस SMTP खाते का पासवर्ड।", + "smtpServerAddress": "SMTP सर्वर पता", + "smtpServerAddressDescription": "ईमेल भेजने के लिए उपयोग किए जाने वाले सर्वर पते को निर्दिष्ट करें।", + "smtpServerPort": "SMTP सर्वर पोर्ट", + "smtpServerPortDescription": "SMTP सर्वर से कनेक्ट करने के लिए उपयोग किए जाने वाले पोर्ट नंबर को निर्दिष्ट करें।", + "verify_email_template": "सत्यापन ईमेल टेम्पलेट", + "verify_email_templateDescription": "टेम्पलेट में {after}.वेरिएबल नाम{before} को वास्तविक डेटा से बदल दिया जाएगा, कृपया सुनिश्चित करें कि इन वेरिएबल्स को बनाए रखें।" + }, + "invite": { + "commissionFirstTimeOnly": "केवल पहली खरीद पर कमीशन", + "commissionFirstTimeOnlyDescription": "सक्रिय करने पर, कमीशन केवल तब उत्पन्न होगा जब आमंत्रित व्यक्ति पहली बार भुगतान करेगा। आप उपयोगकर्ता प्रबंधन में व्यक्तिगत उपयोगकर्ता को कॉन्फ़िगर कर सकते हैं।", + "enableForcedInvite": "अनिवार्य आमंत्रण सक्षम करें", + "enableForcedInviteDescription": "सक्रिय करने पर, केवल आमंत्रित उपयोगकर्ता ही पंजीकरण कर सकते हैं।", + "inputPlaceholder": "कृपया दर्ज करें", + "inviteCommissionPercentage": "आमंत्रण कमीशन प्रतिशत", + "inviteCommissionPercentageDescription": "डिफ़ॉल्ट वैश्विक कमीशन वितरण अनुपात, आप उपयोगकर्ता प्रबंधन में व्यक्तिगत अनुपात को कॉन्फ़िगर कर सकते हैं।", + "saveSuccess": "सफलतापूर्वक सहेजा गया" + }, + "node": { + "communicationKey": "संचार कुंजी", + "communicationKeyDescription": "डेटा को अन्य लोगों द्वारा अवरोधित होने से बचाने के लिए नोड संचार की कुंजी", + "inputPlaceholder": "कृपया दर्ज करें", + "nodePullInterval": "नोड पुल अंतराल", + "nodePullIntervalDescription": "पैनल से डेटा प्राप्त करने के लिए नोड की आवृत्ति (सेकंड में)", + "nodePushInterval": "नोड पुश अंतराल", + "nodePushIntervalDescription": "नोड द्वारा डेटा को पैनल पर भेजने की आवृत्ति", + "saveSuccess": "सफलतापूर्वक सहेजा गया" + }, + "register": { + "emailSuffixWhitelist": "ईमेल प्रत्यय श्वेतसूची", + "emailSuffixWhitelistDescription": "सक्रिय करने पर, केवल सूची में शामिल प्रत्ययों वाले ईमेल ही पंजीकरण कर सकते हैं", + "emailVerification": "ईमेल सत्यापन", + "emailVerificationDescription": "सक्रिय करने पर, उपयोगकर्ताओं को अपने ईमेल को सत्यापित करना होगा", + "ipRegistrationLimit": "आईपी पंजीकरण सीमा", + "ipRegistrationLimitDescription": "सक्रिय करने पर, नियमों के अनुरूप आईपी पंजीकरण सीमित होगा। कृपया ध्यान दें कि सीडीएन या फ्रंट-एंड प्रॉक्सी के कारण आईपी निर्धारण में समस्या हो सकती है", + "penaltyTime": "दंड समय (मिनटों में)", + "penaltyTimeDescription": "उपयोगकर्ताओं को पुनः पंजीकरण करने से पहले दंड समय समाप्त होने की प्रतीक्षा करनी होगी", + "registrationLimitCount": "पंजीकरण सीमा गणना", + "registrationLimitCountDescription": "पंजीकरण सीमा तक पहुँचने पर दंड सक्रिय होगा", + "saveSuccess": "सफलतापूर्वक सहेजा गया", + "stopNewUserRegistration": "नए उपयोगकर्ता पंजीकरण को रोकें", + "stopNewUserRegistrationDescription": "सक्रिय करने पर, कोई भी पंजीकरण नहीं कर सकता", + "trialRegistration": "परीक्षण पंजीकरण", + "trialRegistrationDescription": "परीक्षण पंजीकरण को सक्रिय करें, कृपया पहले परीक्षण योजना और अवधि को संशोधित करें", + "whitelistSuffixes": "श्वेतसूची प्रत्यय", + "whitelistSuffixesDescription": "पंजीकरण ईमेल सत्यापन के लिए, प्रत्येक पंक्ति में एक", + "whitelistSuffixesPlaceholder": "कृपया ईमेल प्रत्यय दर्ज करें, प्रत्येक पंक्ति में एक" + }, + "site": { + "logo": "लोगो", + "logoDescription": "लोगो प्रदर्शित करने के लिए आवश्यक स्थान", + "logoPlaceholder": "कृपया लोगो का URL पता दर्ज करें, '/' के साथ समाप्त न करें", + "saveSuccess": "सफलतापूर्वक सहेजा गया", + "siteDesc": "साइट विवरण", + "siteDescDescription": "साइट विवरण प्रदर्शित करने के लिए आवश्यक स्थान", + "siteDescPlaceholder": "कृपया साइट विवरण दर्ज करें", + "siteDomain": "साइट डोमेन", + "siteDomainDescription": "वर्तमान वेबसाइट का डोमेन पता, जैसे कि ईमेल में उपयोग के लिए", + "siteDomainPlaceholder": "कृपया डोमेन पता दर्ज करें, एक से अधिक डोमेन के लिए प्रत्येक पंक्ति में एक दर्ज करें", + "siteName": "साइट का नाम", + "siteNameDescription": "साइट का नाम प्रदर्शित करने के लिए आवश्यक स्थान", + "siteNamePlaceholder": "कृपया साइट का नाम दर्ज करें" + }, + "subscription": { + "add": "जोड़ें", + "app": "एप्लिकेशन", + "appDescription": "एप्लिकेशन के डाउनलोड पते और आयात नियमों को कॉन्फ़िगर करें, संशोधन के बाद सहेजना न भूलें", + "appDownloadURL": "एप्लिकेशन डाउनलोड पता", + "appIcon": "एप्लिकेशन आइकन", + "appName": "एप्लिकेशन नाम", + "delete": "हटाएं", + "reset": "रीसेट", + "save": "सहेजें", + "saveSuccess": "सहेजा गया", + "singleSubscriptionMode": "एकल सदस्यता मोड", + "singleSubscriptionModeDescription": "सक्रिय करने पर, सभी उपयोगकर्ताओं की योजनाएं शेष राशि में परिवर्तित हो जाएंगी", + "subscriptionDomain": "सदस्यता डोमेन", + "subscriptionDomainDescription": "सदस्यता के लिए, खाली छोड़ने पर साइट डोमेन का उपयोग किया जाएगा", + "subscriptionDomainPlaceholder": "कृपया सदस्यता डोमेन दर्ज करें, कई डोमेन के लिए प्रत्येक पंक्ति में एक दर्ज करें", + "subscriptionPath": "सदस्यता पथ", + "subscriptionPathDescription": "सदस्यता के लिए, संशोधन के बाद सर्वोत्तम प्रदर्शन अनुभव सुनिश्चित करने के लिए सिस्टम को पुनरारंभ करना न भूलें", + "subscriptionPathPlaceholder": "कृपया दर्ज करें", + "subscriptionProtocol": "सदस्यता प्रोटोकॉल", + "wildcardResolution": "वाइल्डकार्ड समाधान", + "wildcardResolutionDescription": "सदस्यता के लिए" + }, + "tabs": { + "currency": "मुद्रा", + "email": "ईमेल", + "invite": "आमंत्रण", + "node": "नोड", + "register": "पंजीकरण", + "site": "साइट", + "subscription": "सदस्यता", + "telegram": "टेलीग्राम", + "tos": "सेवा की शर्तें", + "verify": "सत्यापन" + }, + "telegram": { + "botToken": "बॉट टोकन", + "botTokenDescription": "कृपया Botfather द्वारा प्रदान किया गया टोकन दर्ज करें", + "enableBotNotifications": "बॉट सूचनाएं सक्षम करें", + "enableBotNotificationsDescription": "सक्षम करने पर, बॉट लिंक किए गए Telegram के व्यवस्थापकों और उपयोगकर्ताओं को बुनियादी सूचनाएं भेजेगा", + "groupURL": "समूह URL", + "groupURLDescription": "भरने पर, यह उपयोगकर्ता पक्ष पर प्रदर्शित होगा या आवश्यक स्थानों पर उपयोग किया जाएगा", + "inputPlaceholderBotToken": "0000000000:xxxxxxxxx_xxxxxxxxxxxxxxx", + "inputPlaceholderGroupURL": "https://t.me/xxxxxx", + "saveSuccess": "सफलतापूर्वक सहेजा गया" + }, + "tos": { + "saveSuccess": "सहेजा गया", + "title": "सेवा की शर्तें" + }, + "verify": { + "inputPlaceholder": "कृपया दर्ज करें", + "loginVerificationCode": "लॉगिन सत्यापन कोड", + "loginVerificationCodeDescription": "लॉगिन के समय मानव-मशीन सत्यापन", + "registrationVerificationCode": "पंजीकरण सत्यापन कोड", + "registrationVerificationCodeDescription": "पंजीकरण के समय मानव-मशीन सत्यापन", + "resetPasswordVerificationCode": "पासवर्ड रीसेट सत्यापन कोड", + "resetPasswordVerificationCodeDescription": "पासवर्ड रीसेट के समय मानव-मशीन सत्यापन", + "saveSuccess": "सफलतापूर्वक सहेजा गया", + "turnstileSecret": "टर्नस्टाइल सीक्रेट", + "turnstileSecretDescription": "Cloudflare द्वारा प्रदत्त टर्नस्टाइल सीक्रेट", + "turnstileSiteKey": "टर्नस्टाइल साइट कुंजी", + "turnstileSiteKeyDescription": "Cloudflare द्वारा प्रदत्त टर्नस्टाइल साइट कुंजी" + } +} diff --git a/apps/admin/locales/hi-IN/ticket.json b/apps/admin/locales/hi-IN/ticket.json new file mode 100644 index 0000000..e12b0ea --- /dev/null +++ b/apps/admin/locales/hi-IN/ticket.json @@ -0,0 +1,19 @@ +{ + "actions": "क्रियाएँ", + "cancel": "रद्द करें", + "check": "जांचें", + "close": "बंद करें", + "closeSuccess": "बंद करना सफल", + "closeWarning": "एक बार बंद करने के बाद, इस कार्य आदेश को संचालित नहीं किया जा सकेगा। कृपया सावधानीपूर्वक कार्य करें।", + "confirm": "पुष्टि करें", + "confirmClose": "क्या आप बंद करना चाहते हैं?", + "createdAt": "निर्माण समय", + "inputPlaceholder": "कृपया अपना प्रश्न दर्ज करें, हम जल्द से जल्द उत्तर देंगे।", + "open": "खोलें", + "reply": "जवाब", + "status": ["स्थिति", "अनुसरण के लिए प्रतीक्षारत", "उत्तर के लिए प्रतीक्षारत", "संपन्न", "बंद"], + "ticketList": "टिकट सूची", + "title": "शीर्षक", + "updatedAt": "अद्यतन समय", + "user": "उपयोगकर्ता" +} diff --git a/apps/admin/locales/hi-IN/tool.json b/apps/admin/locales/hi-IN/tool.json new file mode 100644 index 0000000..85e55be --- /dev/null +++ b/apps/admin/locales/hi-IN/tool.json @@ -0,0 +1,26 @@ +{ + "caller": "कॉलर", + "cancel": "रद्द करें", + "confirmReboot": "पुनः आरंभ की पुष्टि करें", + "confirmSystemReboot": "सिस्टम पुनः आरंभ की पुष्टि करें", + "confirmSystemUpgrade": "सिस्टम उन्नयन की पुष्टि करें", + "confirmUpgrade": "उन्नयन की पुष्टि करें", + "currentVersion": "वर्तमान सिस्टम संस्करण:", + "errors": "त्रुटियाँ", + "ip": "आईपी", + "lastUpdated": "अंतिम अपडेट:", + "none": "कोई नहीं", + "query": "प्रश्न", + "rebootDescription": "क्या आप वाकई सिस्टम को पुनः आरंभ करना चाहते हैं? इस क्रिया से थोड़े समय के लिए सेवा में बाधा आ सकती है।", + "rebooting": "सिस्टम को पुनः आरंभ किया जा रहा है...", + "refreshLogs": "लॉग्स को ताज़ा करें", + "request": "अनुरोध", + "status": "स्थिति", + "systemLogs": "सिस्टम लॉग्स", + "systemReboot": "सिस्टम पुनरारंभ", + "systemServices": "सिस्टम सेवाएँ", + "systemUpgrade": "सिस्टम उन्नयन", + "upgradeDescription": "क्या आप वाकई सिस्टम अपग्रेड करना चाहते हैं? इस प्रक्रिया में कुछ मिनट लग सकते हैं और इस दौरान सिस्टम प्रतिक्रिया नहीं दे सकता है।", + "userAgent": "उपयोगकर्ता एजेंट", + "viewLogsAndManage": "सिस्टम लॉग देखें, सिस्टम अपग्रेड और पुनरारंभ संचालन करें" +} diff --git a/apps/admin/locales/hi-IN/user.json b/apps/admin/locales/hi-IN/user.json new file mode 100644 index 0000000..8428a63 --- /dev/null +++ b/apps/admin/locales/hi-IN/user.json @@ -0,0 +1,38 @@ +{ + "actions": "क्रियाएँ", + "balance": "शेष", + "cancel": "रद्द करें", + "confirm": "पुष्टि करें", + "confirmDelete": "क्या आप वाकई हटाना चाहते हैं?", + "create": "सृजन", + "createSuccess": "सृजन सफल", + "createUser": "उपयोगकर्ता बनाएं", + "createdAt": "पंजीकरण समय", + "delete": "हटाएं", + "deleteDescription": "हटाने के बाद डेटा पुनर्प्राप्त नहीं किया जा सकता है, कृपया सावधानीपूर्वक कार्य करें।", + "deleteSuccess": "हटाने में सफलता", + "edit": "संपादित करें", + "editUser": "उपयोगकर्ता संपादित करें", + "email": "ईमेल", + "enable": "सक्षम करें", + "form": { + "balance": "शेष राशि", + "balancePlaceholder": "शेष राशि", + "cancel": "रद्द करें", + "confirm": "पुष्टि करें", + "invalidEmailFormat": "अमान्य ईमेल प्रारूप", + "inviteCode": "आमंत्रण कोड", + "inviteCodePlaceholder": "कृपया आमंत्रण कोड दर्ज करें (खाली छोड़ने पर स्वचालित रूप से उत्पन्न होगा)", + "manager": "प्रबंधक", + "password": "पासवर्ड", + "passwordPlaceholder": "कृपया नया पासवर्ड दर्ज करें (खाली छोड़ सकते हैं)", + "refererId": "रेफरर आईडी", + "refererIdPlaceholder": "कृपया रेफरर आईडी दर्ज करें", + "userEmail": "उपयोगकर्ता ईमेल", + "userEmailPlaceholder": "कृपया उपयोगकर्ता ईमेल दर्ज करें" + }, + "referer": "सिफारिशकर्ता", + "updateSuccess": "अपडेट सफल", + "userList": "उपयोगकर्ता सूची", + "userName": "उपयोगकर्ता ईमेल" +} diff --git a/apps/admin/locales/hu-HU/announcement.json b/apps/admin/locales/hu-HU/announcement.json new file mode 100644 index 0000000..b4cb26c --- /dev/null +++ b/apps/admin/locales/hu-HU/announcement.json @@ -0,0 +1,30 @@ +{ + "actions": "műveletek", + "announcementList": "Hirdetmények listája", + "cancel": "Mégse", + "confirm": "Megerősítés", + "confirmDelete": "Biztosan törölni szeretné?", + "content": "tartalom", + "create": "Létrehozás", + "createAnnouncement": "Hirdetmény létrehozása", + "createSuccess": "Sikeres létrehozás", + "delete": "törlés", + "deleteDescription": "Ha törli, az adatok nem állíthatók vissza. Kérjük, járjon el körültekintően.", + "deleteSuccess": "Sikeres törlés", + "edit": "szerkesztés", + "editAnnouncement": "Hirdetmény szerkesztése", + "enable": "Engedélyezés", + "form": { + "cancel": "Mégse", + "confirm": "Megerősít", + "content": "Tartalom", + "contentPlaceholder": "Kérjük, adja meg a közlemény tartalmát (támogatja a Markdown-t)", + "title": "Cím", + "titlePlaceholder": "Kérjük, adja meg" + }, + "hide": "elrejt", + "show": "Megjelenítés", + "title": "Cím", + "updateSuccess": "Sikeres frissítés", + "updatedAt": "Frissítve" +} diff --git a/apps/admin/locales/hu-HU/auth.json b/apps/admin/locales/hu-HU/auth.json new file mode 100644 index 0000000..668633d --- /dev/null +++ b/apps/admin/locales/hu-HU/auth.json @@ -0,0 +1,39 @@ +{ + "check": { + "checking": "Ellenőrzés folyamatban...", + "continue": "Folytatás", + "description": "Kérjük, adja meg e-mail címét a bejelentkezés vagy regisztráció folytatásához.", + "email": "Kérjük, adjon meg egy érvényes e-mail címet.", + "title": "Bejelentkezés/Regisztráció", + "whitelist": "Az e-mail domain nem szerepel az engedélyezett listán." + }, + "login": { + "description": "Kérjük, adja meg fiókadatait a bejelentkezéshez.", + "forgotPassword": "Elfelejtette a jelszavát?", + "success": "Sikeres bejelentkezés!", + "switchAccount": "Regisztráció/Fiók váltása", + "title": "Bejelentkezés" + }, + "logout": "Kijelentkezés", + "orWithEmail": "vagy használja az e-mailt", + "register": { + "description": "Hozzon létre új fiókot, töltse ki adatait a regisztrációhoz.", + "existingAccount": "Már van fiókja?", + "get": "Megkap", + "invite": "Meghívókód", + "message": "#### Tisztelt Felhasználó!\n\nKöszönjük érdeklődését és támogatását. Az oldal működési stratégiájának módosítása miatt lezártuk az új felhasználók regisztrációját. Ez idő alatt a meglévő felhasználók használata nem lesz érintett.\n\nElkötelezettek vagyunk abban, hogy jobb szolgáltatást és élményt nyújtsunk Önnek, ezért a regisztráció lezárása alatt átfogó rendszeroptimalizálást és funkciófrissítést hajtunk végre. A jövőben még jobb tartalommal és szolgáltatásokkal várjuk Önt.\n\nKérjük, kövesse weboldalunkat és közösségi média platformjainkat, hogy megkapja a legfrissebb híreket és értesítéseket. Köszönjük megértését és támogatását.\n\nHa bármilyen kérdése van, vagy segítségre van szüksége, kérjük, forduljon ügyfélszolgálati csapatunkhoz.\n\n**Még egyszer köszönjük támogatását és megértését.**", + "passwordMismatch": "A két jelszó nem egyezik meg", + "success": "Sikeres regisztráció, automatikusan bejelentkezett!", + "switchToLogin": "Bejelentkezés/Jelszó visszaállítása", + "title": "Regisztráció" + }, + "reset": { + "description": "Kérjük, adja meg e-mail címét a jelszó visszaállításához.", + "existingAccount": "Már van fiókja?", + "get": "Megkap", + "success": "A jelszó visszaállítása sikeres, automatikusan átváltott a bejelentkezésre!", + "switchToLogin": "Bejelentkezés/Regisztráció", + "title": "Jelszó visszaállítása" + }, + "tos": "Szolgáltatási feltételek" +} diff --git a/apps/admin/locales/hu-HU/common.json b/apps/admin/locales/hu-HU/common.json new file mode 100644 index 0000000..14a2c45 --- /dev/null +++ b/apps/admin/locales/hu-HU/common.json @@ -0,0 +1,60 @@ +{ + "billing": { + "description": "A támogatás segíti a PPanelt abban, hogy továbbra is frissítéseket adjon ki!", + "title": "Támogatók" + }, + "empty": [ + "Képzeld el, hogy itt tele van izgalmas tartalommal! Egyelőre csak a képzeletedre hagyatkozhatsz…", + "Ez a terület rejtélyesen eltűnt, éppen visszahívjuk!", + "Hoppá, semmi sem történt… talán te is hozzáadhatsz valamit!", + "Ez olyan, mintha egy koncerten a színpadon senki sem lenne… mi lenne, ha te lépnél fel?", + "Felfedeztél egy üres paradicsomot! Építenél egy házat?", + "Itt egyelőre semmi sincs, de innen indul a kreativitás!", + "Semmi sincs itt… de ne aggódj, ez csak a kezdet!", + "Itt eredetileg nagy meglepetés várt, de a meglepetés elszökött!", + "Egyelőre semmi sincs, mintha a nasiszekrényt teljesen kiürítették volna.", + "Ez az üres terület a főszereplőjére vár!" + ], + "request": { + "10001": "A lekérdezés nem sikerült, kérjük, próbálja meg később újra, vagy ellenőrizze a feltételeit.", + "10002": "A frissítési művelet nem sikerült, kérjük, próbálja meg később újra.", + "10003": "Az adatbevitel jelenleg nem lehetséges, kérjük, próbálja meg később újra.", + "10004": "A törlési művelet nem sikerült, kérjük, próbálja meg később újra.", + "20001": "A felhasználói információ már létezik, kérjük, módosítsa az adatokat, majd próbálja újra.", + "20002": "A felhasználó nem található, kérjük, ellenőrizze az adatokat, majd próbálja újra.", + "20003": "A megadott jelszó helytelen, kérjük, írja be újra.", + "20004": "A felhasználó le van tiltva, kérjük, vegye fel a kapcsolatot az ügyfélszolgálattal, ha kérdése van.", + "20005": "Nincs elegendő egyenleg, kérjük, töltse fel, majd próbálja újra.", + "20006": "A regisztrációs funkció jelenleg nem elérhető, kérjük, próbálja meg később újra.", + "30001": "Ez a csomópont már létezik, kérjük, ne adja hozzá újra.", + "30002": "A csomópont nem található, kérjük, ellenőrizze, majd próbálja újra.", + "30003": "A csoport már létezik, kérjük, próbáljon meg másik nevet használni.", + "30004": "A csoport nem található, kérjük, ellenőrizze az adatokat, majd próbálja újra.", + "30005": "A csoportban még van tartalom, kérjük, ürítse ki, majd próbálja újra.", + "400": "A kérés paraméterei helytelenek, kérjük, ellenőrizze és küldje be újra.", + "40002": "Érvényes token nem található, kérjük, jelentkezzen be, majd próbálja újra.", + "40003": "A jelenlegi token érvénytelen, kérjük, szerezzen be újat, majd próbálja újra.", + "40004": "A token lejárt, kérjük, jelentkezzen be újra.", + "40005": "Nincs hozzáférési jogosultsága, kérjük, vegye fel a kapcsolatot az adminisztrátorral, ha kérdése van.", + "401": "Túl gyakori kérések, kérjük, próbálja meg később.", + "500": "A szerver néhány problémába ütközött, kérjük, próbálja meg később.", + "50001": "A megfelelő kuponinformáció nem található, kérjük, ellenőrizze, majd próbálja újra.", + "50002": "A kupon már felhasználásra került, nem használható újra.", + "60001": "Az előfizetés lejárt, kérjük, újítsa meg, majd használja.", + "60002": "Az előfizetés jelenleg nem használható, kérjük, próbálja meg később újra.", + "70001": "A megerősítő kód hibás, kérjük, írja be újra.", + "80001": "A feladat nem került sikeresen a sorba, kérjük, próbálja meg később újra.", + "90001": "Kérjük, kapcsolja ki a DEBUG módot, majd próbálja újra.", + "undefined": "Rendszerhiba történt, kérjük, próbálja meg később újra." + }, + "table": { + "actions": "Műveletek", + "asc": "Növekvő", + "desc": "Csökkenő", + "hide": "Elrejtés", + "pageInfo": "{current}. oldal, összesen {total} oldal", + "rowsPerPage": "Sorok száma oldalanként", + "selectedItems": "Kiválasztott {total} sor" + }, + "unlimited": "korlátlan" +} diff --git a/apps/admin/locales/hu-HU/coupon.json b/apps/admin/locales/hu-HU/coupon.json new file mode 100644 index 0000000..ed5e186 --- /dev/null +++ b/apps/admin/locales/hu-HU/coupon.json @@ -0,0 +1,50 @@ +{ + "actions": "műveletek", + "amount": "Összeg", + "cancel": "Mégse", + "code": "kód", + "confirm": "Megerősítés", + "confirmDelete": "Biztosan törölni szeretné?", + "count": "mennyiség", + "couponList": "Kuponlista", + "create": "létrehozás", + "createCoupon": "Kupon létrehozása", + "createSuccess": "Sikeres létrehozás", + "delete": "törlés", + "deleteSuccess": "Sikeres törlés", + "deleteWarning": "Ha törli, az adatok nem állíthatók vissza. Kérjük, járjon el körültekintően.", + "discount": "kedvezmény", + "edit": "szerkesztés", + "editCoupon": "Kupon szerkesztése", + "enable": "Engedélyezés", + "form": { + "amountDiscount": "Összeg kedvezmény", + "cancel": "Mégse", + "confirm": "Megerősít", + "count": "Maximális felhasználási szám", + "countPlaceholder": "Maximális felhasználási szám (hagyja üresen, ha nincs korlátozás)", + "customCouponCode": "Egyedi kuponkód", + "customCouponCodePlaceholder": "Egyedi kuponkód (hagyja üresen az automatikus generáláshoz)", + "enterCouponName": "Kérjük, adja meg a kupon nevét", + "enterValue": "Kérjük, adja meg az értéket", + "expireTime": "Lejárati idő", + "name": "Név", + "percentageDiscount": "Százalékos kedvezmény", + "selectServer": "Kérjük, válassza ki az előfizetést", + "selectTime": "Válassza ki az időt", + "specifiedServer": "Meghatározott előfizetés", + "startTime": "Érvényességi idő", + "type": "Kupon típusa", + "userLimit": "Felhasználónkénti maximális felhasználási szám", + "userLimitPlaceholder": "Felhasználónkénti maximális felhasználási szám (hagyja üresen, ha nincs korlátozás)" + }, + "name": "Név", + "percentage": "százalék", + "remainingTimes": "Hátralévő", + "subscribe": "Feliratkozás", + "type": "típus", + "unlimited": "korlátlan", + "updateSuccess": "Sikeres frissítés", + "usedTimes": "Használati idők", + "validityPeriod": "Érvényességi idő" +} diff --git a/apps/admin/locales/hu-HU/document.json b/apps/admin/locales/hu-HU/document.json new file mode 100644 index 0000000..dfb9f54 --- /dev/null +++ b/apps/admin/locales/hu-HU/document.json @@ -0,0 +1,29 @@ +{ + "DocumentList": "Dokumentumlista", + "actions": "műveletek", + "cancel": "Mégse", + "confirm": "Megerősítés", + "confirmDelete": "Biztosan törölni szeretné?", + "create": "létrehozás", + "createDocument": "Dokumentum létrehozása", + "createSuccess": "Sikeres létrehozás", + "delete": "törlés", + "deleteDescription": "Ha törli, az adatok nem állíthatók vissza. Kérjük, járjon el körültekintően.", + "deleteSuccess": "Sikeres törlés", + "edit": "szerkesztés", + "editDocument": "Dokumentum szerkesztése", + "form": { + "cancel": "Mégse", + "confirm": "Megerősít", + "content": "Tartalom", + "tags": "Kategóriák", + "tagsPlaceholder": "Kérjük, használja az Enter billentyűt vagy vesszőt (,) több kategória megadásához", + "title": "Cím", + "titlePlaceholder": "Kérjük, írja be" + }, + "show": "Megjelenítés", + "tags": "Kategóriák", + "title": "Cím", + "updateSuccess": "Sikeres frissítés", + "updatedAt": "Frissítve" +} diff --git a/apps/admin/locales/hu-HU/index.json b/apps/admin/locales/hu-HU/index.json new file mode 100644 index 0000000..3eee33a --- /dev/null +++ b/apps/admin/locales/hu-HU/index.json @@ -0,0 +1,29 @@ +{ + "email": "e-mail", + "month": "Ez a hónap", + "monthDownloadTraffic": "Havi letöltési forgalom", + "monthUploadTraffic": "Havi feltöltési forgalom", + "newPurchase": "Új vásárlás", + "nodeTraffic": "Csomópont forgalom", + "nodes": "csomópontok", + "offlineNodeCount": "Offline csomópontok száma", + "onlineIPCount": "Online IP-szám", + "onlineNodeCount": "Online csomópontok száma", + "pendingTickets": "Függőben lévő jegyek", + "register": "Regisztráció", + "repurchase": "újravásárlás", + "revenueTitle": "Bevételstatisztika", + "selectTypePlaceholder": "Válasszon típust", + "statisticsTitle": "Statisztika", + "today": "ma", + "todayDownloadTraffic": "Mai letöltési forgalom", + "todayUploadTraffic": "Mai feltöltési forgalom", + "total": "Összesen", + "totalIncome": "Összes bevétel", + "trafficRank": "Forgalmi rangsor", + "type": "típus", + "userTitle": "Felhasználói statisztikák", + "userTraffic": "Felhasználói forgalom", + "users": "felhasználók", + "yesterday": "tegnap" +} diff --git a/apps/admin/locales/hu-HU/language.json b/apps/admin/locales/hu-HU/language.json new file mode 100644 index 0000000..11e28e7 --- /dev/null +++ b/apps/admin/locales/hu-HU/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "cseh", + "de-DE": "német", + "en-US": "angol", + "es-ES": "spanyol", + "es-MX": "spanyol (Mexikó)", + "fi-FI": "finn", + "fr-FR": "francia", + "hi-IN": "hindi", + "hu-HU": "magyar", + "ja-JP": "japán", + "ko-KR": "Koreai", + "no-NO": "norvég", + "pl-PL": "lengyel", + "pt-BR": "portugál (Brazília)", + "ro-RO": "román nyelv", + "ru-RU": "Orosz", + "th-TH": "thai nyelv", + "tr-TR": "török", + "uk-UA": "ukrán", + "vi-VN": "vietnámi", + "zh-CN": "kínai (egyszerűsített)", + "zh-TW": "Kínai (hagyományos)" +} diff --git a/apps/admin/locales/hu-HU/menu.json b/apps/admin/locales/hu-HU/menu.json new file mode 100644 index 0000000..c8fb182 --- /dev/null +++ b/apps/admin/locales/hu-HU/menu.json @@ -0,0 +1,18 @@ +{ + "Announcement Management": "Hirdetménykezelés", + "Coupon Management": "Kuponkezelés", + "Dashboard": "Irányítópult", + "Document Management": "Dokumentumkezelés", + "Finance": "Pénzügy", + "Order Management": "Rendeléskezelés", + "Payment Config": "Fizetési beállítások", + "Server": "Szolgáltatás", + "Server Management": "Szerverkezelés", + "Settings": "Beállítások", + "Subscribe Management": "Előfizetés kezelése", + "System Config": "Rendszerkonfiguráció", + "System Tool": "Rendszereszköz", + "Ticket Management": "Jegykezelés", + "User": "Felhasználó", + "User Management": "Felhasználókezelés" +} diff --git a/apps/admin/locales/hu-HU/order.json b/apps/admin/locales/hu-HU/order.json new file mode 100644 index 0000000..0ebfab4 --- /dev/null +++ b/apps/admin/locales/hu-HU/order.json @@ -0,0 +1,37 @@ +{ + "amount": "Összeg", + "couponDiscount": "Kuponkedvezmény", + "discount": "Kedvezmény összege", + "failed": "sikertelen", + "feeAmount": "Díj összege", + "method": "Fizetési mód", + "methods": { + "alipay_f2f": "Alipay (szemtől szemben)", + "balance": "Egyenleg", + "epay": "Epay", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "orderNumber": "Rendelési szám", + "status": { + "0": "Állapot", + "1": "Fizetésre vár", + "2": "Fizetve", + "3": "Törölve", + "4": "Lezárva", + "5": "Befejezve" + }, + "subscribe": "Feliratkozás", + "subscribePrice": "Előfizetési ár", + "total": "Összesen", + "tradeNo": "Tranzakciószám", + "type": { + "0": "Típus", + "1": "Új vásárlás", + "2": "Megújítás", + "3": "Forgalom visszaállítása", + "4": "Feltöltés" + }, + "updateTime": "Frissítési idő", + "user": "felhasználó" +} diff --git a/apps/admin/locales/hu-HU/payment.json b/apps/admin/locales/hu-HU/payment.json new file mode 100644 index 0000000..c6310b1 --- /dev/null +++ b/apps/admin/locales/hu-HU/payment.json @@ -0,0 +1,44 @@ +{ + "aliPay": "Alipay fizetés", + "alipayf2f": { + "appId": "Alipay alkalmazásazonosító", + "invoiceName": "Egyedi terméknév", + "invoiceNameDescription": "A számlán az Alipay-ben fog megjelenni", + "privateKey": "Alipay privát kulcs", + "publicKey": "Alipay nyilvános kulcs", + "sandbox": "Tesztkörnyezet", + "sandboxDescription": "Tesztkörnyezet engedélyezése a fizetések teszteléséhez" + }, + "enable": "Engedélyezés", + "enableDescription": "Engedélyezze ezt a fizetési módot", + "epay": { + "key": "KULCS", + "pid": "PID", + "url": "URL" + }, + "feeMode": "Díjfizetési mód", + "feeModeDescription": "További díjak felszámításának módja", + "feeModeItems": ["Nincs díj", "Százalékos", "Fix összeg", "Mindkettő"], + "feePercent": "Díjszázalék (opcionális)", + "feePercentDescription": "Díj hozzáadása a rendelés összegéhez", + "fixedFee": "Fix díj (opcionális)", + "fixedFeeDescription": "Rögzített díj hozzáadása a rendelés összegéhez", + "iconUrl": "Ikon URL (opcionális)", + "iconUrlDescription": "Előnézeti kép megjelenítéséhez", + "inputPlaceholder": "Kérjük, írja be", + "key": "KULCS", + "notifyUrl": "Egyéni értesítési domain (opcionális)", + "notifyUrlDescription": "A kapu értesítéseket erre a tartományra küldi", + "payForRecommendations": "Fizetés ajánlásokért", + "pid": "PID", + "saveSuccess": "Sikeres mentés", + "showName": "Megjelenítési név", + "showNameDescription": "Előnézet megjelenítésére használatos", + "stripe": { + "publicKey": "NYILVÁNOS KULCS", + "secretKey": "TITKOS KULCS", + "webhookSecret": "WEBHOOK TITKOS ALÁÍRÁS" + }, + "url": "URL", + "wechatPay": "WeChat fizetés" +} diff --git a/apps/admin/locales/hu-HU/server.json b/apps/admin/locales/hu-HU/server.json new file mode 100644 index 0000000..11b1154 --- /dev/null +++ b/apps/admin/locales/hu-HU/server.json @@ -0,0 +1,122 @@ +{ + "group": { + "actions": "Műveletek", + "cancel": "Mégse", + "confirm": "Megerősít", + "confirmDelete": "Biztosan törölni szeretné?", + "create": "Létrehozás", + "createNodeGroup": "Csomópontcsoport létrehozása", + "createdSuccessfully": "Sikeres létrehozás", + "delete": "Törlés", + "deleteWarning": "A törlés után az adatok nem állíthatók vissza, kérjük, járjon el körültekintően.", + "deletedSuccessfully": "Sikeres törlés", + "description": "Leírás", + "edit": "Szerkesztés", + "editNodeGroup": "Csomópontcsoport szerkesztése", + "form": { + "cancel": "Mégse", + "confirm": "Megerősít", + "description": "Leírás", + "name": "Név" + }, + "name": "Név", + "title": "Csomópontcsoportok listája", + "updatedAt": "Frissítés ideje" + }, + "node": { + "abnormal": "Rendellenes", + "actions": "Műveletek", + "address": "Cím", + "all": "Összes", + "cancel": "Mégse", + "confirm": "Megerősít", + "confirmDelete": "Biztosan törölni szeretné?", + "create": "Létrehozás", + "createNode": "Csomópont létrehozása", + "createSuccess": "Sikeres létrehozás", + "delete": "Törlés", + "deleteSuccess": "Sikeres törlés", + "deleteWarning": "Törlés után az adatok nem állíthatók vissza. Kérjük, járjon el körültekintően.", + "disk": "Lemez", + "edit": "Szerkesztés", + "editNode": "Csomópont szerkesztése", + "enable": "Engedélyezés", + "form": { + "allowInsecure": "Nem biztonságos engedélyezése", + "cancel": "Mégse", + "confirm": "Megerősít", + "edit": "Szerkesztés", + "editSecurity": "Biztonsági beállítások szerkesztése", + "enableRelay": "Átjátszás engedélyezése", + "enableTLS": "TLS engedélyezése", + "encryptionMethod": "Titkosítási módszer", + "flow": "Áramlásszabályozási algoritmus", + "hopInterval": "Ugrási intervallum", + "hopPorts": "Ugrási portok", + "hopPortsPlaceholder": "Több portot vesszővel elválasztva", + "name": "Név", + "nodeGroupId": "Csomópont csoport ID", + "obfsPassword": "Zavaró jelszó", + "obfsPasswordPlaceholder": "Hagyja üresen, ha nem zavarosít", + "path": "Útvonal", + "pleaseSelect": "Kérjük, válasszon", + "port": "Szolgáltatási port", + "protocol": "Protokoll", + "relayHost": "Átjátszó cím", + "relayPort": "Átjátszó port", + "remarks": "Megjegyzések", + "security": "Biztonság", + "securityConfig": "Biztonsági beállítások", + "security_config": { + "fingerprint": "Ujjlenyomat", + "privateKey": "Privát kulcs", + "privateKeyPlaceholder": "Hagyja üresen az automatikus generáláshoz", + "publicKey": "Nyilvános kulcs", + "publicKeyPlaceholder": "Hagyja üresen az automatikus generáláshoz", + "serverAddress": "Szerver cím", + "serverAddressPlaceholder": "REALITY célcím, alapértelmezett SNI", + "serverName": "Szerver név (SNI)", + "serverNamePlaceholder": "REALITY kötelező, egyezzen a háttérrel", + "serverPort": "Szerver port", + "serverPortPlaceholder": "REALITY célport, alapértelmezett 443", + "shortId": "Rövid azonosító", + "shortIdPlaceholder": "Hagyja üresen az automatikus generáláshoz", + "sni": "Szervernév jelzés (SNI)" + }, + "selectEncryptionMethod": "Válasszon titkosítási módszert", + "selectNodeGroup": "Válasszon csomópont csoportot", + "selectProtocol": "Válasszon protokollt", + "serverAddr": "Szerver cím", + "serverName": "Szolgáltatás neve", + "speedLimit": "Sebességkorlátozás", + "speedLimitPlaceholder": "Korlátlan", + "trafficRatio": "Forgalmi arány", + "transport": "Szállítási protokoll", + "transportConfig": "Szállítási protokoll beállítások", + "transportHost": "Szállítási szolgáltatás címe", + "transportPath": "Szállítási útvonal", + "transportServerName": "Szállítási szolgáltatás neve" + }, + "lastUpdated": "Utoljára frissítve", + "memory": "Memória", + "name": "Név", + "node": "Csomópont", + "nodeGroup": "Csomópont csoport", + "normal": "Normál", + "onlineCount": "Online felhasználók száma", + "onlineUsers": "Online felhasználók", + "rate": "Sebesség", + "relay": "Átjátszás", + "serverAddr": "Szerver cím", + "speedLimit": "Sebességkorlátozás", + "status": "Állapot", + "trafficRatio": "Forgalmi arány", + "type": "Típus", + "updateSuccess": "Sikeres frissítés", + "updatedAt": "Frissítés ideje" + }, + "tabs": { + "node": "csomópont", + "nodeGroup": "csomópontcsoport" + } +} diff --git a/apps/admin/locales/hu-HU/subscribe.json b/apps/admin/locales/hu-HU/subscribe.json new file mode 100644 index 0000000..08e4f78 --- /dev/null +++ b/apps/admin/locales/hu-HU/subscribe.json @@ -0,0 +1,79 @@ +{ + "actions": "műveletek", + "cancel": "Mégse", + "confirm": "Megerősítés", + "confirmDelete": "Biztosan törölni szeretné?", + "create": "Létrehozás", + "createSubscribe": "Új előfizetés létrehozása", + "createSuccess": "Sikeres létrehozás", + "delete": "törlés", + "deleteSuccess": "Sikeres törlés", + "deleteWarning": "A törlés után az adatok nem állíthatók vissza, kérjük, járjon el körültekintően.", + "deviceLimit": "Eszközök száma/db", + "edit": "szerkesztés", + "editSubscribe": "Előfizetés szerkesztése", + "form": { + "cancel": "Mégse", + "confirm": "Megerősít", + "description": "Leírás", + "deviceLimit": "Eszközkorlát", + "discount": "Kedvezmény", + "discountDescription": "Kedvezmény az egységár alapján", + "discountMonths": "Hónap", + "discountPercent": "Kedvezmény százalék", + "discount_price": "Kedvezményes ár", + "duration": "Időtartam (hónap)", + "inventory": "Készlet", + "name": "Név", + "noLimit": "Korlátlan", + "quota": "Vásárlási korlát", + "replacement": "Csere ára (alkalmanként)", + "selectSubscribeGroup": "Kérjük, válassza ki az előfizetési csoportot", + "server": "Szolgáltatás", + "serverGroup": "Szolgáltatáscsoport", + "speedLimit": "Sebességkorlát (Mbps)", + "subscribeGroup": "Előfizetési csoport", + "traffic": "Forgalom", + "unit_price": "Havi ár" + }, + "group": { + "actions": "Műveletek", + "cancel": "Mégse", + "confirm": "Megerősít", + "confirmDelete": "Biztosan törölni szeretné?", + "create": "Létrehozás", + "createSubscribeGroup": "Új előfizetési csoport létrehozása", + "createSuccess": "Sikeres létrehozás", + "delete": "Törlés", + "deleteSuccess": "Sikeres törlés", + "deleteWarning": "A törlés után az adatok nem állíthatók vissza, kérjük, legyen óvatos.", + "description": "Leírás", + "edit": "Szerkesztés", + "editSubscribeGroup": "Előfizetési csoport szerkesztése", + "form": { + "cancel": "Mégse", + "confirm": "Megerősít", + "description": "Leírás", + "name": "Név" + }, + "name": "Név", + "title": "Előfizetési csoportok listája", + "updateSuccess": "Sikeres frissítés", + "updatedAt": "Frissítés ideje" + }, + "inventory": "készlet", + "name": "Név", + "quota": "Vásárlási korlát/alkalom", + "replacement": "Ár visszaállítása/alkalom", + "sell": "eladás", + "show": "Kezdőlap megjelenítése", + "subscribe": "Feliratkozás", + "subscribeGroup": "Feliratkozási csoport", + "tabs": { + "subscribe": "Feliratkozás", + "subscribeGroup": "Feliratkozási csoport" + }, + "traffic": "forgalom", + "unitPrice": "Ár/hó", + "updateSuccess": "Sikeres frissítés" +} diff --git a/apps/admin/locales/hu-HU/system.json b/apps/admin/locales/hu-HU/system.json new file mode 100644 index 0000000..62d78fd --- /dev/null +++ b/apps/admin/locales/hu-HU/system.json @@ -0,0 +1,156 @@ +{ + "currency": { + "accessKey": "Hozzáférési kulcs", + "accessKeyDescription": "A https://exchangerate.host által ingyenesen biztosított árfolyam API kulcs", + "currencySymbol": "Pénznem szimbólum", + "currencySymbolDescription": "Csak megjelenítésre használatos, a módosítás után a rendszer összes pénznem egysége megváltozik", + "currencyUnit": "Pénznem egység", + "currencyUnitDescription": "Csak megjelenítésre használatos, a módosítás után a rendszer összes pénznem egysége megváltozik", + "saveSuccess": "Sikeres mentés" + }, + "email": { + "expiration_email_template": "Lejárati értesítő sablon", + "expiration_email_templateDescription": "A sablonban található {after}.változónév{before} helyére a tényleges adatok kerülnek, kérjük, győződjön meg róla, hogy ezek a változók megmaradnak.", + "inputPlaceholder": "Kérjük, írja be a tartalmat...", + "maintenance_email_template": "Karbantartási értesítő sablon", + "maintenance_email_templateDescription": "A sablonban található {after}.változónév{before} helyére a tényleges adatok kerülnek, kérjük, győződjön meg róla, hogy ezek a változók megmaradnak.", + "saveSuccess": "A konfiguráció sikeresen elmentve.", + "sendFailure": "A teszt e-mail küldése sikertelen, kérjük, ellenőrizze a konfigurációt.", + "sendSuccess": "A teszt e-mail sikeresen elküldve.", + "sendTestEmail": "Teszt e-mail küldése", + "sendTestEmailDescription": "Küldjön egy teszt e-mailt a konfiguráció helyességének ellenőrzéséhez.", + "senderAddress": "Feladó címe", + "senderAddressDescription": "Az alapértelmezett e-mail cím, amelyről az e-mailek küldése történik.", + "smtpAccount": "SMTP fiók", + "smtpAccountDescription": "Az az e-mail fiók, amelyet azonosításra használnak.", + "smtpEncryptionMethod": "SMTP titkosítási mód", + "smtpEncryptionMethodDescription": "Válassza ki, hogy engedélyezi-e az SSL/TLS titkosítást.", + "smtpPassword": "SMTP jelszó", + "smtpPasswordDescription": "Az SMTP fiók jelszava.", + "smtpServerAddress": "SMTP szerver címe", + "smtpServerAddressDescription": "Adja meg a szerver címét, amelyet az e-mailek küldésére használnak.", + "smtpServerPort": "SMTP szerver portja", + "smtpServerPortDescription": "Adja meg az SMTP szerverhez való csatlakozás portszámát.", + "verify_email_template": "Ellenőrző e-mail sablon", + "verify_email_templateDescription": "A sablonban található {after}.változónév{before} helyére a tényleges adatok kerülnek, kérjük, győződjön meg róla, hogy ezek a változók megmaradnak." + }, + "invite": { + "commissionFirstTimeOnly": "Csak az első vásárláskor járó jutalék", + "commissionFirstTimeOnlyDescription": "Bekapcsolás után a jutalék csak az első fizetéskor keletkezik. Az egyes felhasználók beállításait a felhasználókezelésben konfigurálhatja.", + "enableForcedInvite": "Kényszerített meghívás engedélyezése", + "enableForcedInviteDescription": "Bekapcsolás után csak meghívott felhasználók regisztrálhatnak.", + "inputPlaceholder": "Kérem, írja be", + "inviteCommissionPercentage": "Meghívási jutalék százalék", + "inviteCommissionPercentageDescription": "Alapértelmezett globális jutalék elosztási arány, az egyes arányokat a felhasználókezelésben konfigurálhatja.", + "saveSuccess": "Sikeres mentés" + }, + "node": { + "communicationKey": "Kommunikációs kulcs", + "communicationKeyDescription": "A csomópontok közötti kommunikáció kulcsa, amely biztosítja, hogy az adatokat ne lehessen elfogni mások által", + "inputPlaceholder": "Kérjük, írja be", + "nodePullInterval": "Csomópont lehívási intervallum", + "nodePullIntervalDescription": "A csomópont milyen gyakran kér le adatokat a panelről (másodpercben)", + "nodePushInterval": "Csomópont küldési intervallum", + "nodePushIntervalDescription": "A csomópont milyen gyakran küld adatokat a panelre", + "saveSuccess": "Sikeres mentés" + }, + "register": { + "emailSuffixWhitelist": "E-mail végződés fehérlista", + "emailSuffixWhitelistDescription": "Bekapcsolás után csak a listában szereplő végződésű e-mailekkel lehet regisztrálni", + "emailVerification": "E-mail ellenőrzés", + "emailVerificationDescription": "Bekapcsolás után a felhasználóknak ellenőrizniük kell az e-mailjüket", + "ipRegistrationLimit": "IP regisztrációs korlátozás", + "ipRegistrationLimitDescription": "Bekapcsolás után a szabályoknak megfelelő IP-k regisztrációja korlátozva lesz. Kérjük, vegye figyelembe, hogy a CDN vagy front-end proxy miatt az IP meghatározása problémákat okozhat", + "penaltyTime": "Büntetési idő (perc)", + "penaltyTimeDescription": "A felhasználóknak meg kell várniuk a büntetési idő leteltét, hogy újra regisztrálhassanak", + "registrationLimitCount": "Regisztrációs korlát száma", + "registrationLimitCountDescription": "A regisztrációs korlát elérése után a büntetés aktiválódik", + "saveSuccess": "Sikeres mentés", + "stopNewUserRegistration": "Új felhasználók regisztrációjának leállítása", + "stopNewUserRegistrationDescription": "Bekapcsolás után senki sem regisztrálhat", + "trialRegistration": "Próbaregisztráció", + "trialRegistrationDescription": "Próbaregisztráció engedélyezése, kérjük, először módosítsa a próba csomagot és időtartamot", + "whitelistSuffixes": "Fehérlista végződések", + "whitelistSuffixesDescription": "E-mail ellenőrzéshez regisztrációkor, soronként egy", + "whitelistSuffixesPlaceholder": "Kérjük, adja meg az e-mail végződéseket, soronként egyet" + }, + "site": { + "logo": "LOGÓ", + "logoDescription": "A LOGÓ megjelenítésére szolgáló hely", + "logoPlaceholder": "Kérjük, adja meg a LOGÓ URL-címét, ne végződjön '/' jellel", + "saveSuccess": "Sikeres mentés", + "siteDesc": "Webhely leírása", + "siteDescDescription": "A webhely leírásának megjelenítésére szolgáló hely", + "siteDescPlaceholder": "Kérjük, adja meg a webhely leírását", + "siteDomain": "Webhely domain", + "siteDomainDescription": "A jelenlegi weboldal domain címe, például e-mailekben használva", + "siteDomainPlaceholder": "Kérjük, adja meg a domain címet, több domain esetén soronként egyet", + "siteName": "Webhely neve", + "siteNameDescription": "A webhely nevének megjelenítésére szolgáló hely", + "siteNamePlaceholder": "Kérjük, adja meg a webhely nevét" + }, + "subscription": { + "add": "Hozzáadás", + "app": "Alkalmazás", + "appDescription": "Konfigurálja az alkalmazás letöltési címét és importálási szabályait, ne felejtse el menteni a módosítások után", + "appDownloadURL": "Alkalmazás letöltési címe", + "appIcon": "Alkalmazás ikonja", + "appName": "Alkalmazás neve", + "delete": "Törlés", + "reset": "Visszaállítás", + "save": "Mentés", + "saveSuccess": "Sikeres mentés", + "singleSubscriptionMode": "Egyszeri előfizetési mód", + "singleSubscriptionModeDescription": "Bekapcsolás után minden felhasználó csomagja egyenlegre vált", + "subscriptionDomain": "Előfizetési domain", + "subscriptionDomainDescription": "Előfizetéshez, hagyja üresen a webhely domainjének használatához", + "subscriptionDomainPlaceholder": "Kérjük, adja meg az előfizetési domaint, több domain esetén soronként egyet", + "subscriptionPath": "Előfizetési útvonal", + "subscriptionPathDescription": "Előfizetéshez, módosítás után feltétlenül indítsa újra a rendszert a legjobb teljesítmény érdekében", + "subscriptionPathPlaceholder": "Kérjük, adja meg", + "subscriptionProtocol": "Előfizetési protokoll", + "wildcardResolution": "Joker karakter feloldása", + "wildcardResolutionDescription": "Előfizetéshez" + }, + "tabs": { + "currency": "Pénznem", + "email": "E-mail", + "invite": "Meghívás", + "node": "Csomópont", + "register": "Regisztráció", + "site": "Webhely", + "subscription": "Előfizetés", + "telegram": "Telegram", + "tos": "Szolgáltatási feltételek", + "verify": "Ellenőrzés" + }, + "telegram": { + "botToken": "Bot Token", + "botTokenDescription": "Kérjük, adja meg a Botfather által biztosított tokent", + "enableBotNotifications": "Bot értesítések engedélyezése", + "enableBotNotificationsDescription": "Engedélyezés után a bot alapértesítéseket küld a Telegramhoz kapcsolt adminisztrátoroknak és felhasználóknak", + "groupURL": "Csoport URL", + "groupURLDescription": "Kitöltés után megjelenik a felhasználói oldalon vagy ahol szükséges", + "inputPlaceholderBotToken": "0000000000:xxxxxxxxx_xxxxxxxxxxxxxxx", + "inputPlaceholderGroupURL": "https://t.me/xxxxxx", + "saveSuccess": "Sikeres mentés" + }, + "tos": { + "saveSuccess": "Sikeres mentés", + "title": "Szolgáltatási feltételek" + }, + "verify": { + "inputPlaceholder": "Kérjük, írja be", + "loginVerificationCode": "Bejelentkezési ellenőrző kód", + "loginVerificationCodeDescription": "Emberi gép ellenőrzés bejelentkezéskor", + "registrationVerificationCode": "Regisztrációs ellenőrző kód", + "registrationVerificationCodeDescription": "Emberi gép ellenőrzés regisztrációkor", + "resetPasswordVerificationCode": "Jelszó visszaállító ellenőrző kód", + "resetPasswordVerificationCodeDescription": "Emberi gép ellenőrzés jelszó visszaállításakor", + "saveSuccess": "Sikeres mentés", + "turnstileSecret": "Turnstile titkos kulcs", + "turnstileSecretDescription": "A Cloudflare által biztosított Turnstile titkos kulcs", + "turnstileSiteKey": "Turnstile webhely kulcs", + "turnstileSiteKeyDescription": "A Cloudflare által biztosított Turnstile webhely kulcs" + } +} diff --git a/apps/admin/locales/hu-HU/ticket.json b/apps/admin/locales/hu-HU/ticket.json new file mode 100644 index 0000000..53c0a86 --- /dev/null +++ b/apps/admin/locales/hu-HU/ticket.json @@ -0,0 +1,19 @@ +{ + "actions": "műveletek", + "cancel": "Mégse", + "check": "ellenőriz", + "close": "bezárás", + "closeSuccess": "Sikeres bezárás", + "closeWarning": "Ha bezárja, nem tudja kezelni ezt a munkalapot. Kérjük, járjon el körültekintően.", + "confirm": "Megerősítés", + "confirmClose": "Biztosan be akarja zárni?", + "createdAt": "Létrehozás ideje", + "inputPlaceholder": "Kérjük, írja be kérdését, amire a lehető leghamarabb válaszolunk.", + "open": "megnyit", + "reply": "válasz", + "status": ["Állapot", "Követésre vár", "Válaszra vár", "Feldolgozva", "Lezárva"], + "ticketList": "Jegyzéklista", + "title": "Cím", + "updatedAt": "Frissítve", + "user": "felhasználó" +} diff --git a/apps/admin/locales/hu-HU/tool.json b/apps/admin/locales/hu-HU/tool.json new file mode 100644 index 0000000..804c03e --- /dev/null +++ b/apps/admin/locales/hu-HU/tool.json @@ -0,0 +1,26 @@ +{ + "caller": "Hívó", + "cancel": "Mégse", + "confirmReboot": "Újraindítás megerősítése", + "confirmSystemReboot": "Rendszer újraindításának megerősítése", + "confirmSystemUpgrade": "Rendszerfrissítés megerősítése", + "confirmUpgrade": "Megerősítés frissítése", + "currentVersion": "Jelenlegi rendszerverzió:", + "errors": "Hibák", + "ip": "IP", + "lastUpdated": "Utoljára frissítve:", + "none": "Nincs", + "query": "Lekérdezés", + "rebootDescription": "Biztosan újra akarja indítani a rendszert? Ez a művelet rövid idejű szolgáltatáskimaradást okoz.", + "rebooting": "A rendszer újraindítása folyamatban...", + "refreshLogs": "Naplók frissítése", + "request": "Kérés", + "status": "Állapot", + "systemLogs": "Rendszernaplók", + "systemReboot": "Rendszer újraindítása", + "systemServices": "Rendszerszolgáltatások", + "systemUpgrade": "Rendszerfrissítés", + "upgradeDescription": "Biztosan végre akarja hajtani a rendszerfrissítést? Ez a művelet néhány percet vehet igénybe, és ezalatt a rendszer esetleg nem fog válaszolni.", + "userAgent": "Felhasználói ügynök", + "viewLogsAndManage": "Tekintse meg a rendszer naplóit, hajtsa végre a rendszerfrissítéseket és az újraindítási műveleteket" +} diff --git a/apps/admin/locales/hu-HU/user.json b/apps/admin/locales/hu-HU/user.json new file mode 100644 index 0000000..e946c80 --- /dev/null +++ b/apps/admin/locales/hu-HU/user.json @@ -0,0 +1,38 @@ +{ + "actions": "műveletek", + "balance": "Egyenleg", + "cancel": "Mégse", + "confirm": "Megerősítés", + "confirmDelete": "Biztosan törölni szeretné?", + "create": "Létrehozás", + "createSuccess": "Sikeres létrehozás", + "createUser": "Felhasználó létrehozása", + "createdAt": "Regisztráció ideje", + "delete": "törlés", + "deleteDescription": "A törlés után az adatok nem állíthatók vissza, kérjük, járjon el körültekintően.", + "deleteSuccess": "Sikeres törlés", + "edit": "szerkesztés", + "editUser": "Felhasználó szerkesztése", + "email": "e-mail", + "enable": "Engedélyezés", + "form": { + "balance": "Egyenleg", + "balancePlaceholder": "Egyenleg", + "cancel": "Mégse", + "confirm": "Megerősít", + "invalidEmailFormat": "Érvénytelen e-mail formátum", + "inviteCode": "Meghívókód", + "inviteCodePlaceholder": "Kérjük, adja meg a meghívókódot (ha üres, automatikusan generálódik)", + "manager": "Adminisztrátor", + "password": "Jelszó", + "passwordPlaceholder": "Kérjük, adjon meg egy új jelszót (hagyja üresen, ha nem kívánja megváltoztatni)", + "refererId": "Ajánló ID", + "refererIdPlaceholder": "Kérjük, adja meg az ajánló ID-t", + "userEmail": "Felhasználói e-mail", + "userEmailPlaceholder": "Kérjük, adja meg a felhasználói e-mail címet" + }, + "referer": "Ajánló", + "updateSuccess": "Sikeres frissítés", + "userList": "Felhasználói lista", + "userName": "Felhasználó e-mail címe" +} diff --git a/apps/admin/locales/ja-JP/announcement.json b/apps/admin/locales/ja-JP/announcement.json new file mode 100644 index 0000000..0ebe27c --- /dev/null +++ b/apps/admin/locales/ja-JP/announcement.json @@ -0,0 +1,30 @@ +{ + "actions": "アクション", + "announcementList": "お知らせ一覧", + "cancel": "キャンセル", + "confirm": "確認", + "confirmDelete": "削除してもよろしいですか?", + "content": "内容", + "create": "作成", + "createAnnouncement": "お知らせを作成", + "createSuccess": "作成に成功しました", + "delete": "削除", + "deleteDescription": "一度削除すると、データは復元できません。慎重に操作してください。", + "deleteSuccess": "削除に成功しました", + "edit": "編集", + "editAnnouncement": "お知らせを編集", + "enable": "有効", + "form": { + "cancel": "キャンセル", + "confirm": "確認", + "content": "内容", + "contentPlaceholder": "お知らせの内容を入力してください(Markdown対応)", + "title": "タイトル", + "titlePlaceholder": "入力してください" + }, + "hide": "隠す", + "show": "表示", + "title": "タイトル", + "updateSuccess": "更新が成功しました", + "updatedAt": "更新日時" +} diff --git a/apps/admin/locales/ja-JP/auth.json b/apps/admin/locales/ja-JP/auth.json new file mode 100644 index 0000000..1fe22c2 --- /dev/null +++ b/apps/admin/locales/ja-JP/auth.json @@ -0,0 +1,39 @@ +{ + "check": { + "checking": "確認中...", + "continue": "続ける", + "description": "ログインまたは登録を続行するには、メールアドレスを入力してください。", + "email": "有効なメールアドレスを入力してください。", + "title": "ログイン/登録", + "whitelist": "メールドメインが許可されたホワイトリストにありません。" + }, + "login": { + "description": "ログインするにはアカウント情報を入力してください。", + "forgotPassword": "パスワードをお忘れですか?", + "success": "ログイン成功!", + "switchAccount": "登録/アカウント切り替え", + "title": "ログイン" + }, + "logout": "ログアウト", + "orWithEmail": "またはメールを使用", + "register": { + "description": "新しいアカウントを作成し、情報を入力して登録してください。", + "existingAccount": "すでにアカウントをお持ちですか?", + "get": "取得", + "invite": "招待コード", + "message": "#### 親愛なるユーザーの皆様へ\n\n私たちのサイトにご関心とご支援をいただき、誠にありがとうございます。運営方針の調整に伴い、新規ユーザー登録機能を停止いたしました。この期間中、既存ユーザーのご利用には影響はございません。\n\nより良いサービスと体験を提供するため、登録停止期間中にシステムの全面的な最適化と機能のアップグレードを行います。今後、より質の高いコンテンツとサービスで皆様をお迎えいたします。\n\n最新の情報や通知を得るために、当社のウェブサイトやソーシャルメディアプラットフォームをご覧ください。ご理解とご支援に感謝いたします。\n\nご不明な点やご質問がございましたら、いつでもカスタマーサポートチームにお問い合わせください。\n\n**改めてご支援とご理解に感謝いたします。**", + "passwordMismatch": "パスワードが一致しません", + "success": "登録が成功しました。自動的にログインしました!", + "switchToLogin": "ログイン/メールリセット", + "title": "登録" + }, + "reset": { + "description": "パスワードをリセットするには、メールアドレスを入力してください。", + "existingAccount": "すでにアカウントをお持ちですか?", + "get": "取得", + "success": "パスワードのリセットに成功しました。自動的にログインに切り替わりました!", + "switchToLogin": "ログイン/登録", + "title": "パスワードリセット" + }, + "tos": "利用規約" +} diff --git a/apps/admin/locales/ja-JP/common.json b/apps/admin/locales/ja-JP/common.json new file mode 100644 index 0000000..d82c0c7 --- /dev/null +++ b/apps/admin/locales/ja-JP/common.json @@ -0,0 +1,60 @@ +{ + "billing": { + "description": "スポンサーシップは、PPanelが更新を続けるのを助けます!", + "title": "スポンサー" + }, + "empty": [ + "ここには素晴らしいコンテンツが満載されるはずです!今は想像力に頼るしかありません…", + "このエリアは神秘的に消えましたが、私たちはそれを呼び戻しています!", + "あら、何も起こりませんでした…自分で何かを埋めてみてください!", + "まるでコンサートでステージに誰もいないのを発見したような感じ…あなたが上がってパフォーマンスしてみますか?", + "空白の楽園を見つけました!家を建ててみませんか?", + "ここは一時的に何もありませんが、創造はここから始まります!", + "何もありません…でも心配しないで、これは始まりに過ぎません!", + "ここには大きなサプライズが用意されていましたが、サプライズが逃げてしまいました!", + "一時的に何もありません、まるでお菓子の棚が空っぽになったようです。", + "この空き地は主役の登場を待っています!" + ], + "request": { + "10001": "クエリがまだ成功していません。しばらくしてから再試行するか、条件を確認してください。", + "10002": "更新操作が成功しませんでした。しばらくしてから再試行してください。", + "10003": "挿入操作を完了できません。しばらくしてから再試行してください。", + "10004": "削除操作が完了しませんでした。しばらくしてから再試行してください。", + "20001": "このユーザー情報は既に存在します。情報を変更して再試行してください。", + "20002": "ユーザーが見つかりません。情報を確認して再試行してください。", + "20003": "入力したパスワードが正しくありません。再入力してください。", + "20004": "このユーザーは無効になっています。ご不明な点がある場合はカスタマーサービスにお問い合わせください。", + "20005": "残高が不足しています。チャージしてから再試行してください。", + "20006": "登録機能は現在利用できません。しばらくしてから再試行してください。", + "30001": "このノードは既に存在します。重複して追加しないでください。", + "30002": "関連するノードが見つかりません。確認して再試行してください。", + "30003": "グループは既に存在します。他の名前を使用してみてください。", + "30004": "グループが見つかりません。情報を確認して再試行してください。", + "30005": "このグループにはまだ内容があります。空にしてから再試行してください。", + "400": "リクエストパラメータが正しくありません。確認して再送信してください。", + "40002": "有効なトークンが見つかりません。ログインしてから再試行してください。", + "40003": "現在のトークンは無効です。再取得してから再試行してください。", + "40004": "トークンの有効期限が切れています。再ログインしてください。", + "40005": "アクセス権がありません。ご不明な点がある場合は管理者にお問い合わせください。", + "401": "リクエストが多すぎます。しばらくしてから再試行してください。", + "500": "サーバーに問題が発生しました。しばらくしてから再試行してください。", + "50001": "対応するクーポン情報が見つかりません。確認して再試行してください。", + "50002": "このクーポンは既に使用されています。再利用できません。", + "60001": "サブスクリプションの有効期限が切れています。更新してからご利用ください。", + "60002": "このサブスクリプションは現在使用できません。しばらくしてから再試行してください。", + "70001": "認証コードが間違っています。再入力してください。", + "80001": "タスクがキューに正常に追加されませんでした。しばらくしてから再試行してください。", + "90001": "DEBUGモードをオフにしてから再試行してください。", + "undefined": "システムエラーが発生しました。しばらくしてから再試行してください。" + }, + "table": { + "actions": "操作", + "asc": "昇順", + "desc": "降順", + "hide": "非表示", + "pageInfo": "{total} ページ中 {current} ページ目", + "rowsPerPage": "ページごとの行数", + "selectedItems": "{total} 行選択済み" + }, + "unlimited": "無制限" +} diff --git a/apps/admin/locales/ja-JP/coupon.json b/apps/admin/locales/ja-JP/coupon.json new file mode 100644 index 0000000..c697623 --- /dev/null +++ b/apps/admin/locales/ja-JP/coupon.json @@ -0,0 +1,50 @@ +{ + "actions": "アクション", + "amount": "金額", + "cancel": "キャンセル", + "code": "コード", + "confirm": "確認", + "confirmDelete": "削除してもよろしいですか?", + "count": "数量", + "couponList": "クーポンリスト", + "create": "作成", + "createCoupon": "クーポンを作成する", + "createSuccess": "作成に成功しました", + "delete": "削除", + "deleteSuccess": "削除に成功しました", + "deleteWarning": "一度削除すると、データは復元できません。慎重に操作してください。", + "discount": "割引", + "edit": "編集", + "editCoupon": "クーポンを編集", + "enable": "有効", + "form": { + "amountDiscount": "金額割引", + "cancel": "キャンセル", + "confirm": "確認", + "count": "最大使用回数", + "countPlaceholder": "最大使用回数(空欄の場合は無制限)", + "customCouponCode": "カスタムクーポンコード", + "customCouponCodePlaceholder": "カスタムクーポンコード(空欄の場合は自動生成)", + "enterCouponName": "クーポン名を入力してください", + "enterValue": "数値を入力してください", + "expireTime": "有効期限", + "name": "名称", + "percentageDiscount": "パーセンテージ割引", + "selectServer": "サブスクリプションを選択してください", + "selectTime": "時間を選択", + "specifiedServer": "指定サブスクリプション", + "startTime": "開始時間", + "type": "クーポンタイプ", + "userLimit": "ユーザーごとの最大使用回数", + "userLimitPlaceholder": "ユーザーごとの最大使用回数(空欄の場合は無制限)" + }, + "name": "名前", + "percentage": "パーセンテージ", + "remainingTimes": "残り", + "subscribe": "購読", + "type": "タイプ", + "unlimited": "無制限", + "updateSuccess": "更新が成功しました", + "usedTimes": "使用回数", + "validityPeriod": "有効期間" +} diff --git a/apps/admin/locales/ja-JP/document.json b/apps/admin/locales/ja-JP/document.json new file mode 100644 index 0000000..5ab38a7 --- /dev/null +++ b/apps/admin/locales/ja-JP/document.json @@ -0,0 +1,29 @@ +{ + "DocumentList": "ドキュメントリスト", + "actions": "アクション", + "cancel": "キャンセル", + "confirm": "確認", + "confirmDelete": "削除してもよろしいですか?", + "create": "作成", + "createDocument": "ドキュメントを作成", + "createSuccess": "作成成功", + "delete": "削除", + "deleteDescription": "一度削除すると、データは復元できません。慎重に操作してください。", + "deleteSuccess": "削除に成功しました", + "edit": "編集", + "editDocument": "ドキュメントを編集", + "form": { + "cancel": "キャンセル", + "confirm": "確認", + "content": "内容", + "tags": "カテゴリー", + "tagsPlaceholder": "複数のカテゴリーを入力するには、Enterキーまたはカンマ(,)で区切ってください", + "title": "タイトル", + "titlePlaceholder": "入力してください" + }, + "show": "表示", + "tags": "カテゴリー", + "title": "タイトル", + "updateSuccess": "更新が成功しました", + "updatedAt": "更新日時" +} diff --git a/apps/admin/locales/ja-JP/index.json b/apps/admin/locales/ja-JP/index.json new file mode 100644 index 0000000..f2ab9d3 --- /dev/null +++ b/apps/admin/locales/ja-JP/index.json @@ -0,0 +1,29 @@ +{ + "email": "メールアドレス", + "month": "今月", + "monthDownloadTraffic": "今月のダウンロードトラフィック", + "monthUploadTraffic": "今月のアップロードトラフィック", + "newPurchase": "新規購入", + "nodeTraffic": "ノードトラフィック", + "nodes": "ノード", + "offlineNodeCount": "オフラインノード数", + "onlineIPCount": "オンラインIP数", + "onlineNodeCount": "オンラインノード数", + "pendingTickets": "保留中のチケット", + "register": "登録", + "repurchase": "再購入", + "revenueTitle": "収入統計", + "selectTypePlaceholder": "タイプを選択", + "statisticsTitle": "統計", + "today": "今日", + "todayDownloadTraffic": "本日のダウンロードトラフィック", + "todayUploadTraffic": "本日のアップロードトラフィック", + "total": "合計", + "totalIncome": "総収入", + "trafficRank": "トラフィックランキング", + "type": "タイプ", + "userTitle": "ユーザー統計", + "userTraffic": "ユーザーのトラフィック", + "users": "ユーザー", + "yesterday": "昨日" +} diff --git a/apps/admin/locales/ja-JP/language.json b/apps/admin/locales/ja-JP/language.json new file mode 100644 index 0000000..13a6366 --- /dev/null +++ b/apps/admin/locales/ja-JP/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "チェコ語", + "de-DE": "ドイツ語", + "en-US": "英語", + "es-ES": "スペイン語", + "es-MX": "スペイン語(メキシコ)", + "fi-FI": "フィンランド語", + "fr-FR": "フランス語", + "hi-IN": "ヒンディー語", + "hu-HU": "ハンガリー語", + "ja-JP": "日本語", + "ko-KR": "韓国語", + "no-NO": "ノルウェー語", + "pl-PL": "ポーランド語", + "pt-BR": "ポルトガル語(ブラジル)", + "ro-RO": "ルーマニア語", + "ru-RU": "ロシア語", + "th-TH": "タイ語", + "tr-TR": "トルコ語", + "uk-UA": "ウクライナ語", + "vi-VN": "ベトナム語", + "zh-CN": "日本語", + "zh-TW": "中国語(繁体字)" +} diff --git a/apps/admin/locales/ja-JP/menu.json b/apps/admin/locales/ja-JP/menu.json new file mode 100644 index 0000000..6358eb3 --- /dev/null +++ b/apps/admin/locales/ja-JP/menu.json @@ -0,0 +1,18 @@ +{ + "Announcement Management": "お知らせ管理", + "Coupon Management": "クーポン管理", + "Dashboard": "ダッシュボード", + "Document Management": "ドキュメント管理", + "Finance": "財務", + "Order Management": "注文管理", + "Payment Config": "支払い設定", + "Server": "サーバー", + "Server Management": "サーバー管理", + "Settings": "設定", + "Subscribe Management": "サブスクリプション管理", + "System Config": "システム構成", + "System Tool": "システムツール", + "Ticket Management": "チケット管理", + "User": "ユーザー", + "User Management": "ユーザー管理" +} diff --git a/apps/admin/locales/ja-JP/order.json b/apps/admin/locales/ja-JP/order.json new file mode 100644 index 0000000..772ce74 --- /dev/null +++ b/apps/admin/locales/ja-JP/order.json @@ -0,0 +1,37 @@ +{ + "amount": "金額", + "couponDiscount": "クーポン割引", + "discount": "割引額", + "failed": "失敗", + "feeAmount": "手数料", + "method": "支払い方法", + "methods": { + "alipay_f2f": "支付宝(対面)", + "balance": "残高", + "epay": "イージーペイ", + "stripe_alipay": "Stripe(支付宝)", + "stripe_wechat_pay": "Stripe(微信)" + }, + "orderNumber": "注文番号", + "status": { + "0": "ステータス", + "1": "未払い", + "2": "支払い済み", + "3": "キャンセル済み", + "4": "クローズ済み", + "5": "完了" + }, + "subscribe": "購読", + "subscribePrice": "購読価格", + "total": "合計", + "tradeNo": "取引番号", + "type": { + "0": "タイプ", + "1": "新規購入", + "2": "更新", + "3": "データリセット", + "4": "チャージ" + }, + "updateTime": "更新時間", + "user": "ユーザー" +} diff --git a/apps/admin/locales/ja-JP/payment.json b/apps/admin/locales/ja-JP/payment.json new file mode 100644 index 0000000..877236a --- /dev/null +++ b/apps/admin/locales/ja-JP/payment.json @@ -0,0 +1,44 @@ +{ + "aliPay": "アリペイ決済", + "alipayf2f": { + "appId": "支付宝アプリID", + "invoiceName": "カスタム製品名", + "invoiceNameDescription": "支付宝の請求書に表示されます", + "privateKey": "支付宝プライベートキー", + "publicKey": "支付宝パブリックキー", + "sandbox": "サンドボックスモード", + "sandboxDescription": "支払いをテストするためにサンドボックスモードを有効にします" + }, + "enable": "有効", + "enableDescription": "この支払い方法を有効にする", + "epay": { + "key": "キー", + "pid": "PID", + "url": "URL" + }, + "feeMode": "料金方式", + "feeModeDescription": "追加手数料の課金方式", + "feeModeItems": ["手数料なし", "パーセンテージ", "固定金額", "上記の2つ"], + "feePercent": "パーセンテージ手数料(オプション)", + "feePercentDescription": "注文金額に追加される手数料", + "fixedFee": "固定料金(オプション)", + "fixedFeeDescription": "注文金額に固定料金を追加する", + "iconUrl": "アイコンURL(任意)", + "iconUrlDescription": "フロントエンド表示用", + "inputPlaceholder": "入力してください", + "key": "キー", + "notifyUrl": "カスタム通知ドメイン(オプション)", + "notifyUrlDescription": "ゲートウェイ通知はこのドメインに送信されます", + "payForRecommendations": "おすすめの支払い", + "pid": "PID", + "saveSuccess": "保存が成功しました", + "showName": "表示名", + "showNameDescription": "フロントエンド表示用", + "stripe": { + "publicKey": "パブリックキー", + "secretKey": "シークレットキー", + "webhookSecret": "WEBHOOK シークレットサイン" + }, + "url": "URL", + "wechatPay": "WeChatペイ" +} diff --git a/apps/admin/locales/ja-JP/server.json b/apps/admin/locales/ja-JP/server.json new file mode 100644 index 0000000..e934ffd --- /dev/null +++ b/apps/admin/locales/ja-JP/server.json @@ -0,0 +1,122 @@ +{ + "group": { + "actions": "操作", + "cancel": "キャンセル", + "confirm": "確認", + "confirmDelete": "削除してもよろしいですか?", + "create": "作成", + "createNodeGroup": "ノードグループを作成", + "createdSuccessfully": "作成に成功しました", + "delete": "削除", + "deleteWarning": "削除後、データは復元できませんので、慎重に操作してください。", + "deletedSuccessfully": "削除に成功しました", + "description": "説明", + "edit": "編集", + "editNodeGroup": "ノードグループを編集", + "form": { + "cancel": "キャンセル", + "confirm": "確認", + "description": "説明", + "name": "名前" + }, + "name": "名前", + "title": "ノードグループ一覧", + "updatedAt": "更新日時" + }, + "node": { + "abnormal": "異常", + "actions": "操作", + "address": "住所", + "all": "すべて", + "cancel": "キャンセル", + "confirm": "確認", + "confirmDelete": "削除してもよろしいですか?", + "create": "作成", + "createNode": "ノードを作成", + "createSuccess": "作成成功", + "delete": "削除", + "deleteSuccess": "削除成功", + "deleteWarning": "削除後、データは復元できません。慎重に操作してください。", + "disk": "ディスク", + "edit": "編集", + "editNode": "ノードを編集", + "enable": "有効化", + "form": { + "allowInsecure": "安全でないことを許可", + "cancel": "キャンセル", + "confirm": "確認", + "edit": "編集", + "editSecurity": "セキュリティ設定を編集", + "enableRelay": "リレーを有効化", + "enableTLS": "TLSを有効化", + "encryptionMethod": "暗号化方式", + "flow": "フロー制御アルゴリズム", + "hopInterval": "ホップ間隔", + "hopPorts": "ホップポート", + "hopPortsPlaceholder": "複数のポートはカンマで区切る", + "name": "名前", + "nodeGroupId": "ノードグループID", + "obfsPassword": "オブフスケーションパスワード", + "obfsPasswordPlaceholder": "空白の場合はオブフスケーションなし", + "path": "パス", + "pleaseSelect": "選択してください", + "port": "サーバーポート", + "protocol": "プロトコル", + "relayHost": "リレーアドレス", + "relayPort": "リレーポート", + "remarks": "備考", + "security": "セキュリティ", + "securityConfig": "セキュリティ設定", + "security_config": { + "fingerprint": "フィンガープリント", + "privateKey": "プライベートキー", + "privateKeyPlaceholder": "空白の場合は自動生成", + "publicKey": "パブリックキー", + "publicKeyPlaceholder": "空白の場合は自動生成", + "serverAddress": "サーバーアドレス", + "serverAddressPlaceholder": "REALITYのターゲットアドレス、デフォルトはSNIを使用", + "serverName": "サーバー名(SNI)", + "serverNamePlaceholder": "REALITY必須、バックエンドと一致させる", + "serverPort": "サーバーポート", + "serverPortPlaceholder": "REALITYのターゲットポート、デフォルトは443", + "shortId": "ショートID", + "shortIdPlaceholder": "空白の場合は自動生成", + "sni": "サーバー名表示(sni)" + }, + "selectEncryptionMethod": "暗号化方式を選択", + "selectNodeGroup": "ノードグループを選択", + "selectProtocol": "プロトコルを選択", + "serverAddr": "サーバーアドレス", + "serverName": "サービス名", + "speedLimit": "速度制限", + "speedLimitPlaceholder": "無制限", + "trafficRatio": "トラフィックレート", + "transport": "トランスポートプロトコル", + "transportConfig": "トランスポートプロトコル設定", + "transportHost": "トランスポートサービスアドレス", + "transportPath": "トランスポートパス", + "transportServerName": "トランスポートサービス名" + }, + "lastUpdated": "最終更新", + "memory": "メモリ", + "name": "名前", + "node": "ノード", + "nodeGroup": "ノードグループ", + "normal": "正常", + "onlineCount": "オンライン人数", + "onlineUsers": "オンラインユーザー", + "rate": "レート", + "relay": "リレー", + "serverAddr": "サーバーアドレス", + "speedLimit": "速度制限", + "status": "ステータス", + "trafficRatio": "トラフィックレート", + "type": "タイプ", + "updateSuccess": "更新成功", + "updatedAt": "更新時間" + }, + "tabs": { + "node": "ノード", + "nodeGroup": "ノードグループ" + } +} diff --git a/apps/admin/locales/ja-JP/subscribe.json b/apps/admin/locales/ja-JP/subscribe.json new file mode 100644 index 0000000..76e56c9 --- /dev/null +++ b/apps/admin/locales/ja-JP/subscribe.json @@ -0,0 +1,79 @@ +{ + "actions": "アクション", + "cancel": "キャンセル", + "confirm": "確認", + "confirmDelete": "削除してもよろしいですか?", + "create": "作成", + "createSubscribe": "新規購読", + "createSuccess": "作成に成功しました", + "delete": "削除", + "deleteSuccess": "削除に成功しました", + "deleteWarning": "削除後、データは復元できませんので、慎重に操作してください。", + "deviceLimit": "デバイス数/台", + "edit": "編集", + "editSubscribe": "サブスクリプションを編集", + "form": { + "cancel": "キャンセル", + "confirm": "確認", + "description": "説明", + "deviceLimit": "デバイス制限", + "discount": "割引", + "discountDescription": "単価に基づく割引設定", + "discountMonths": "月", + "discountPercent": "割引率", + "discount_price": "割引価格", + "duration": "期間(月)", + "inventory": "在庫", + "name": "名称", + "noLimit": "無制限", + "quota": "購入制限数", + "replacement": "リセット価格(毎回)", + "selectSubscribeGroup": "サブスクリプショングループを選択してください", + "server": "サーバー", + "serverGroup": "サーバーグループ", + "speedLimit": "速度制限(Mbps)", + "subscribeGroup": "サブスクリプショングループ", + "traffic": "トラフィック", + "unit_price": "月額価格" + }, + "group": { + "actions": "操作", + "cancel": "キャンセル", + "confirm": "確認", + "confirmDelete": "削除してもよろしいですか?", + "create": "作成", + "createSubscribeGroup": "新しい購読グループを作成", + "createSuccess": "作成成功", + "delete": "削除", + "deleteSuccess": "削除成功", + "deleteWarning": "削除後はデータを復元できませんので、慎重に操作してください。", + "description": "説明", + "edit": "編集", + "editSubscribeGroup": "購読グループを編集", + "form": { + "cancel": "キャンセル", + "confirm": "確認", + "description": "説明", + "name": "名前" + }, + "name": "名前", + "title": "購読グループ一覧", + "updateSuccess": "更新成功", + "updatedAt": "更新日時" + }, + "inventory": "在庫", + "name": "名前", + "quota": "購入制限/回", + "replacement": "リセット価格/回", + "sell": "販売", + "show": "ホームページ表示", + "subscribe": "購読", + "subscribeGroup": "グループを購読する", + "tabs": { + "subscribe": "購読", + "subscribeGroup": "購読グループ" + }, + "traffic": "トラフィック", + "unitPrice": "価格/月", + "updateSuccess": "更新が成功しました" +} diff --git a/apps/admin/locales/ja-JP/system.json b/apps/admin/locales/ja-JP/system.json new file mode 100644 index 0000000..65ae1cb --- /dev/null +++ b/apps/admin/locales/ja-JP/system.json @@ -0,0 +1,156 @@ +{ + "currency": { + "accessKey": "アクセスキー", + "accessKeyDescription": "https://exchangerate.host が無料で提供する為替レートAPIキー", + "currencySymbol": "通貨記号", + "currencySymbolDescription": "表示のみに使用され、変更するとシステム内のすべての通貨単位が変更されます", + "currencyUnit": "通貨単位", + "currencyUnitDescription": "表示のみに使用され、変更するとシステム内のすべての通貨単位が変更されます", + "saveSuccess": "保存に成功しました" + }, + "email": { + "expiration_email_template": "期限切れ通知テンプレート", + "expiration_email_templateDescription": "テンプレート内の {after}.変数名{before} は実際のデータに置き換えられます。これらの変数を必ず保持してください。", + "inputPlaceholder": "内容を入力してください...", + "maintenance_email_template": "メンテナンス通知テンプレート", + "maintenance_email_templateDescription": "テンプレート内の {after}.変数名{before} は実際のデータに置き換えられます。これらの変数を必ず保持してください。", + "saveSuccess": "設定が正常に保存されました。", + "sendFailure": "テストメールの送信に失敗しました。設定を確認してください。", + "sendSuccess": "テストメールが正常に送信されました。", + "sendTestEmail": "テストメールを送信", + "sendTestEmailDescription": "設定が正しいかどうかを確認するためにテストメールを送信します。", + "senderAddress": "送信者アドレス", + "senderAddressDescription": "メール送信に使用されるデフォルトのメールアドレス。", + "smtpAccount": "SMTP アカウント", + "smtpAccountDescription": "認証に使用されるメールアカウント。", + "smtpEncryptionMethod": "SMTP 暗号化方式", + "smtpEncryptionMethodDescription": "SSL/TLS 暗号化を有効にするかどうかを選択します。", + "smtpPassword": "SMTP パスワード", + "smtpPasswordDescription": "この SMTP アカウントのパスワード。", + "smtpServerAddress": "SMTP サーバーアドレス", + "smtpServerAddressDescription": "メール送信に使用されるサーバーアドレスを指定します。", + "smtpServerPort": "SMTP サーバーポート", + "smtpServerPortDescription": "SMTP サーバーに接続するためのポート番号を指定します。", + "verify_email_template": "確認メールテンプレート", + "verify_email_templateDescription": "テンプレート内の {after}.変数名{before} は実際のデータに置き換えられます。これらの変数を必ず保持してください。" + }, + "invite": { + "commissionFirstTimeOnly": "初回購入のみのコミッション", + "commissionFirstTimeOnlyDescription": "有効にすると、コミッションは招待者が初めて支払ったときにのみ生成されます。ユーザー管理で個別のユーザーを設定できます。", + "enableForcedInvite": "強制招待を有効にする", + "enableForcedInviteDescription": "有効にすると、招待されたユーザーのみが登録できます。", + "inputPlaceholder": "入力してください", + "inviteCommissionPercentage": "招待コミッションの割合", + "inviteCommissionPercentageDescription": "デフォルトのグローバルコミッション配分率です。ユーザー管理で個別の割合を設定できます。", + "saveSuccess": "保存に成功しました" + }, + "node": { + "communicationKey": "通信キー", + "communicationKeyDescription": "ノード通信のためのキーで、データが他人に傍受されないようにします", + "inputPlaceholder": "入力してください", + "nodePullInterval": "ノード取得間隔", + "nodePullIntervalDescription": "ノードがパネルからデータを取得する頻度(秒)", + "nodePushInterval": "ノード送信間隔", + "nodePushIntervalDescription": "ノードがデータをパネルに送信する頻度", + "saveSuccess": "保存成功" + }, + "register": { + "emailSuffixWhitelist": "メールサフィックスホワイトリスト", + "emailSuffixWhitelistDescription": "有効にすると、リスト内のサフィックスを持つメールのみが登録可能になります", + "emailVerification": "メール認証", + "emailVerificationDescription": "有効にすると、ユーザーはメールを認証する必要があります", + "ipRegistrationLimit": "IP登録制限", + "ipRegistrationLimitDescription": "有効にすると、ルールに従ったIPは登録が制限されます。CDNやフロントエンドプロキシの影響でIPの判定に問題が生じる可能性があります", + "penaltyTime": "ペナルティ時間(分)", + "penaltyTimeDescription": "ユーザーはペナルティ時間が経過するまで再登録できません", + "registrationLimitCount": "登録制限カウント", + "registrationLimitCountDescription": "登録制限に達するとペナルティが有効になります", + "saveSuccess": "保存に成功しました", + "stopNewUserRegistration": "新規ユーザー登録の停止", + "stopNewUserRegistrationDescription": "有効にすると、誰も登録できません", + "trialRegistration": "トライアル登録", + "trialRegistrationDescription": "トライアル登録を有効にするには、まずトライアルプランと期間を変更してください", + "whitelistSuffixes": "ホワイトリストサフィックス", + "whitelistSuffixesDescription": "登録メール認証用、1行に1つずつ", + "whitelistSuffixesPlaceholder": "メールサフィックスを入力してください、1行に1つずつ" + }, + "site": { + "logo": "LOGO", + "logoDescription": "LOGOを表示する必要がある場所に使用されます", + "logoPlaceholder": "LOGOのURLアドレスを入力してください。末尾に'/'を付けないでください", + "saveSuccess": "保存に成功しました", + "siteDesc": "サイトの説明", + "siteDescDescription": "サイトの説明を表示する必要がある場所に使用されます", + "siteDescPlaceholder": "サイトの説明を入力してください", + "siteDomain": "サイトのドメイン", + "siteDomainDescription": "現在のウェブサイトのドメインアドレス。例えば、電子メールで使用されます", + "siteDomainPlaceholder": "ドメインアドレスを入力してください。複数のドメインは1行に1つずつ入力してください", + "siteName": "サイト名", + "siteNameDescription": "サイト名を表示する必要がある場所に使用されます", + "siteNamePlaceholder": "サイト名を入力してください" + }, + "subscription": { + "add": "追加", + "app": "アプリ", + "appDescription": "アプリのダウンロードURLとインポートルールを設定し、変更後は保存を忘れずに", + "appDownloadURL": "アプリダウンロードURL", + "appIcon": "アプリアイコン", + "appName": "アプリ名", + "delete": "削除", + "reset": "リセット", + "save": "保存", + "saveSuccess": "保存成功", + "singleSubscriptionMode": "単一サブスクリプションモード", + "singleSubscriptionModeDescription": "有効にすると、すべてのユーザーのプランが残高に変換されます", + "subscriptionDomain": "サブスクリプションドメイン", + "subscriptionDomainDescription": "サブスクリプション用、空白の場合はサイトドメインを使用", + "subscriptionDomainPlaceholder": "サブスクリプションドメインを入力してください。複数のドメインは1行に1つずつ入力してください", + "subscriptionPath": "サブスクリプションパス", + "subscriptionPathDescription": "サブスクリプション用、変更後はシステムを再起動して、最適なパフォーマンスを確保してください", + "subscriptionPathPlaceholder": "入力してください", + "subscriptionProtocol": "サブスクリプションプロトコル", + "wildcardResolution": "ワイルドカード解決", + "wildcardResolutionDescription": "サブスクリプション用" + }, + "tabs": { + "currency": "通貨", + "email": "メール", + "invite": "招待", + "node": "ノード", + "register": "登録", + "site": "サイト", + "subscription": "購読", + "telegram": "Telegram", + "tos": "利用規約", + "verify": "確認" + }, + "telegram": { + "botToken": "ボットトークン", + "botTokenDescription": "Botfatherから提供されたトークンを入力してください", + "enableBotNotifications": "ボット通知を有効にする", + "enableBotNotificationsDescription": "有効にすると、ボットはTelegramにリンクされた管理者とユーザーに基本的な通知を送信します", + "groupURL": "グループURL", + "groupURLDescription": "入力すると、ユーザー側に表示されるか必要な場所で使用されます", + "inputPlaceholderBotToken": "0000000000:xxxxxxxxx_xxxxxxxxxxxxxxx", + "inputPlaceholderGroupURL": "https://t.me/xxxxxx", + "saveSuccess": "保存に成功しました" + }, + "tos": { + "saveSuccess": "保存成功", + "title": "利用規約" + }, + "verify": { + "inputPlaceholder": "入力してください", + "loginVerificationCode": "ログイン認証コード", + "loginVerificationCodeDescription": "ログイン時の人間認証", + "registrationVerificationCode": "登録認証コード", + "registrationVerificationCodeDescription": "登録時の人間認証", + "resetPasswordVerificationCode": "パスワードリセット認証コード", + "resetPasswordVerificationCodeDescription": "パスワードリセット時の人間認証", + "saveSuccess": "保存成功", + "turnstileSecret": "Turnstile シークレット", + "turnstileSecretDescription": "Cloudflare 提供の Turnstile シークレット", + "turnstileSiteKey": "Turnstile サイトキー", + "turnstileSiteKeyDescription": "Cloudflare 提供の Turnstile サイトキー" + } +} diff --git a/apps/admin/locales/ja-JP/ticket.json b/apps/admin/locales/ja-JP/ticket.json new file mode 100644 index 0000000..58c1923 --- /dev/null +++ b/apps/admin/locales/ja-JP/ticket.json @@ -0,0 +1,19 @@ +{ + "actions": "アクション", + "cancel": "キャンセル", + "check": "確認", + "close": "閉じる", + "closeSuccess": "閉じることに成功しました", + "closeWarning": "一度閉じると、この作業指示を操作することはできません。慎重に操作してください。", + "confirm": "確認", + "confirmClose": "閉じてもよろしいですか?", + "createdAt": "作成日時", + "inputPlaceholder": "ご質問を入力してください。できるだけ早くお答えします。", + "open": "開く", + "reply": "返信", + "status": ["状態", "フォロー待ち", "返信待ち", "処理済み", "クローズ"], + "ticketList": "チケットリスト", + "title": "タイトル", + "updatedAt": "更新日時", + "user": "ユーザー" +} diff --git a/apps/admin/locales/ja-JP/tool.json b/apps/admin/locales/ja-JP/tool.json new file mode 100644 index 0000000..70730d8 --- /dev/null +++ b/apps/admin/locales/ja-JP/tool.json @@ -0,0 +1,26 @@ +{ + "caller": "発信者", + "cancel": "キャンセル", + "confirmReboot": "再起動を確認", + "confirmSystemReboot": "システム再起動を確認", + "confirmSystemUpgrade": "システムアップグレードを確認", + "confirmUpgrade": "アップグレードを確認", + "currentVersion": "現在のシステムバージョン:", + "errors": "エラー", + "ip": "IP", + "lastUpdated": "最終更新:", + "none": "なし", + "query": "クエリ", + "rebootDescription": "システムを再起動してもよろしいですか?この操作は一時的なサービス中断を引き起こします。", + "rebooting": "システムを再起動しています...", + "refreshLogs": "ログを更新", + "request": "リクエスト", + "status": "ステータス", + "systemLogs": "システムログ", + "systemReboot": "システム再起動", + "systemServices": "システムサービス", + "systemUpgrade": "システムアップグレード", + "upgradeDescription": "システムのアップグレードを実行してもよろしいですか?この操作には数分かかる場合があり、その間システムが応答しない可能性があります。", + "userAgent": "ユーザーエージェント", + "viewLogsAndManage": "システムログを表示し、システムのアップグレードと再起動を実行する" +} diff --git a/apps/admin/locales/ja-JP/user.json b/apps/admin/locales/ja-JP/user.json new file mode 100644 index 0000000..3d07294 --- /dev/null +++ b/apps/admin/locales/ja-JP/user.json @@ -0,0 +1,38 @@ +{ + "actions": "アクション", + "balance": "残高", + "cancel": "キャンセル", + "confirm": "確認", + "confirmDelete": "削除してもよろしいですか?", + "create": "作成", + "createSuccess": "作成成功", + "createUser": "ユーザーを作成", + "createdAt": "登録日時", + "delete": "削除", + "deleteDescription": "削除後はデータを復元できませんので、慎重に操作してください。", + "deleteSuccess": "削除に成功しました", + "edit": "編集", + "editUser": "ユーザー編集", + "email": "メールアドレス", + "enable": "有効", + "form": { + "balance": "残高", + "balancePlaceholder": "残高", + "cancel": "キャンセル", + "confirm": "確認", + "invalidEmailFormat": "無効なメール形式", + "inviteCode": "招待コード", + "inviteCodePlaceholder": "招待コードを入力してください(空白の場合は自動生成されます)", + "manager": "管理者", + "password": "パスワード", + "passwordPlaceholder": "新しいパスワードを入力してください(空白可)", + "refererId": "紹介者ID", + "refererIdPlaceholder": "紹介者IDを入力してください", + "userEmail": "ユーザーのメール", + "userEmailPlaceholder": "ユーザーのメールを入力してください" + }, + "referer": "推薦者", + "updateSuccess": "更新が成功しました", + "userList": "ユーザーリスト", + "userName": "ユーザーのメールアドレス" +} diff --git a/apps/admin/locales/ko-KR/announcement.json b/apps/admin/locales/ko-KR/announcement.json new file mode 100644 index 0000000..3017bad --- /dev/null +++ b/apps/admin/locales/ko-KR/announcement.json @@ -0,0 +1,30 @@ +{ + "actions": "작업", + "announcementList": "공지 목록", + "cancel": "취소", + "confirm": "확인", + "confirmDelete": "삭제하시겠습니까?", + "content": "내용", + "create": "생성", + "createAnnouncement": "공지 생성", + "createSuccess": "생성 성공", + "delete": "삭제", + "deleteDescription": "삭제하면 데이터는 복구할 수 없습니다. 신중하게 진행하세요.", + "deleteSuccess": "삭제 성공", + "edit": "편집", + "editAnnouncement": "공지 편집", + "enable": "사용", + "form": { + "cancel": "취소", + "confirm": "확인", + "content": "내용", + "contentPlaceholder": "공지 내용을 입력하세요 (Markdown 지원)", + "title": "제목", + "titlePlaceholder": "입력하세요" + }, + "hide": "숨기기", + "show": "표시", + "title": "제목", + "updateSuccess": "업데이트 성공", + "updatedAt": "업데이트 시간" +} diff --git a/apps/admin/locales/ko-KR/auth.json b/apps/admin/locales/ko-KR/auth.json new file mode 100644 index 0000000..61f4999 --- /dev/null +++ b/apps/admin/locales/ko-KR/auth.json @@ -0,0 +1,39 @@ +{ + "check": { + "checking": "확인 중...", + "continue": "계속", + "description": "로그인 또는 등록을 계속하려면 이메일을 입력하세요.", + "email": "유효한 이메일 주소를 입력하세요.", + "title": "로그인/등록", + "whitelist": "이메일 도메인이 허용된 화이트리스트에 없습니다." + }, + "login": { + "description": "계정 정보를 입력하여 로그인하세요.", + "forgotPassword": "비밀번호를 잊으셨나요?", + "success": "로그인 성공!", + "switchAccount": "가입/계정 전환", + "title": "로그인" + }, + "logout": "로그아웃", + "orWithEmail": "또는 이메일 사용", + "register": { + "description": "새 계정을 생성하고 정보를 입력하여 등록하세요.", + "existingAccount": "이미 계정이 있으신가요?", + "get": "받기", + "invite": "초대 코드", + "message": "#### 존경하는 사용자님, 안녕하세요!\n\n저희에 대한 관심과 지원에 감사드립니다. 사이트 운영 전략의 조정으로 인해 신규 사용자 등록 기능을 닫았습니다. 이 기간 동안 기존 사용자의 사용에는 아무런 영향이 없습니다.\n\n저희는 더 나은 서비스와 경험을 제공하기 위해 등록이 닫힌 동안 시스템 최적화와 기능 업그레이드를 전면적으로 진행할 것입니다. 앞으로 더 나은 콘텐츠와 서비스로 여러분을 맞이하겠습니다.\n\n저희 웹사이트와 소셜 미디어 플랫폼을 주시하여 최신 동향과 공지를 받아보세요. 이해와 지원에 감사드립니다.\n\n궁금한 점이나 도움이 필요하시면 언제든지 고객 서비스 팀에 문의해 주세요.\n\n**다시 한번 지원과 이해에 감사드립니다.**", + "passwordMismatch": "비밀번호가 일치하지 않습니다.", + "success": "등록 성공, 자동으로 로그인되었습니다!", + "switchToLogin": "로그인/이메일 재설정", + "title": "등록" + }, + "reset": { + "description": "비밀번호를 재설정하려면 이메일 주소를 입력하세요.", + "existingAccount": "이미 계정이 있으신가요?", + "get": "받기", + "success": "비밀번호 재설정 성공, 자동으로 로그인으로 전환되었습니다!", + "switchToLogin": "로그인/회원가입", + "title": "비밀번호 재설정" + }, + "tos": "서비스 약관" +} diff --git a/apps/admin/locales/ko-KR/common.json b/apps/admin/locales/ko-KR/common.json new file mode 100644 index 0000000..2fadb95 --- /dev/null +++ b/apps/admin/locales/ko-KR/common.json @@ -0,0 +1,60 @@ +{ + "billing": { + "description": "후원은 PPanel이 계속해서 업데이트를 제공하는 데 도움이 됩니다!", + "title": "후원자" + }, + "empty": [ + "여기에 멋진 내용이 가득할 거라고 상상해 보세요! 지금은 상상에 맡겨야겠네요…", + "이 영역이 신비롭게 사라졌습니다. 우리는 그것을 다시 불러오고 있습니다!", + "아무 일도 일어나지 않았네요… 직접 무언가를 채워보세요!", + "마치 콘서트에서 무대에 아무도 없는 것을 발견한 것 같네요… 무대에 올라가서 공연해 보시겠어요?", + "빈 땅을 발견하셨군요! 집을 지어보시겠어요?", + "여기는 잠시 비어 있지만, 창의력은 여기서 시작됩니다!", + "아무것도 없네요… 하지만 걱정 마세요, 이건 시작일 뿐입니다!", + "여기에 큰 놀라움을 준비했는데, 놀라움이 도망갔네요!", + "지금은 아무것도 없지만, 마치 간식장이 비어 있는 것 같네요.", + "이 빈 공간은 주인공의 등장을 기다리고 있습니다!" + ], + "request": { + "10001": "조회가 아직 성공하지 않았습니다. 잠시 후 다시 시도하거나 조건을 확인해 주세요.", + "10002": "업데이트 작업이 성공하지 않았습니다. 잠시 후 다시 시도해 주세요.", + "10003": "삽입 작업을 완료할 수 없습니다. 잠시 후 다시 시도해 주세요.", + "10004": "삭제 작업이 완료되지 않았습니다. 잠시 후 다시 시도해 주세요.", + "20001": "해당 사용자 정보가 이미 존재합니다. 정보를 변경한 후 다시 시도해 주세요.", + "20002": "해당 사용자를 찾을 수 없습니다. 정보를 확인한 후 다시 시도해 주세요.", + "20003": "입력하신 비밀번호가 올바르지 않습니다. 다시 입력해 주세요.", + "20004": "해당 사용자가 비활성화되었습니다. 문의 사항이 있으면 고객 서비스에 문의해 주세요.", + "20005": "잔액이 부족합니다. 충전 후 다시 시도해 주세요.", + "20006": "등록 기능을 현재 사용할 수 없습니다. 잠시 후 다시 시도해 주세요.", + "30001": "해당 노드가 이미 존재합니다. 중복 추가하지 마세요.", + "30002": "관련 노드를 찾을 수 없습니다. 확인 후 다시 시도해 주세요.", + "30003": "그룹이 이미 존재합니다. 다른 이름을 사용해 보세요.", + "30004": "해당 그룹을 찾을 수 없습니다. 정보를 확인한 후 다시 시도해 주세요.", + "30005": "해당 그룹 내에 여전히 내용이 있습니다. 비운 후 다시 시도해 주세요.", + "400": "요청 매개변수가 올바르지 않습니다. 확인 후 다시 제출해 주세요.", + "40002": "유효한 토큰을 찾을 수 없습니다. 먼저 로그인한 후 다시 시도해 주세요.", + "40003": "현재 토큰이 유효하지 않습니다. 다시 획득한 후 시도해 주세요.", + "40004": "토큰이 만료되었습니다. 다시 로그인해 주세요.", + "40005": "접근 권한이 없습니다. 문의 사항이 있으면 관리자에게 문의해 주세요.", + "401": "요청이 너무 빈번합니다. 잠시 후 다시 시도해 주세요.", + "500": "서버에 문제가 발생했습니다. 잠시 후 다시 시도해 주세요.", + "50001": "해당 쿠폰 정보를 찾을 수 없습니다. 확인 후 다시 시도해 주세요.", + "50002": "해당 쿠폰이 이미 사용되었습니다. 반복 사용할 수 없습니다.", + "60001": "구독이 만료되었습니다. 갱신 후 사용해 주세요.", + "60002": "현재 구독을 사용할 수 없습니다. 잠시 후 다시 시도해 주세요.", + "70001": "인증 코드가 잘못되었습니다. 다시 입력해 주세요.", + "80001": "작업이 큐에 성공적으로 추가되지 않았습니다. 잠시 후 다시 시도해 주세요.", + "90001": "DEBUG 모드를 끈 후 다시 시도해 주세요.", + "undefined": "시스템에 오류가 발생했습니다. 잠시 후 다시 시도해 주세요." + }, + "table": { + "actions": "작업", + "asc": "오름차순", + "desc": "내림차순", + "hide": "숨기기", + "pageInfo": "{current} 페이지, 총 {total} 페이지", + "rowsPerPage": "페이지당 행 수", + "selectedItems": "{total}개 행 선택됨" + }, + "unlimited": "무제한" +} diff --git a/apps/admin/locales/ko-KR/coupon.json b/apps/admin/locales/ko-KR/coupon.json new file mode 100644 index 0000000..1bb7078 --- /dev/null +++ b/apps/admin/locales/ko-KR/coupon.json @@ -0,0 +1,50 @@ +{ + "actions": "작업", + "amount": "금액", + "cancel": "취소", + "code": "코드", + "confirm": "확인", + "confirmDelete": "삭제하시겠습니까?", + "count": "수량", + "couponList": "쿠폰 목록", + "create": "생성", + "createCoupon": "쿠폰 생성", + "createSuccess": "생성 성공", + "delete": "삭제", + "deleteSuccess": "삭제 성공", + "deleteWarning": "삭제하면 데이터는 복구할 수 없습니다. 신중하게 진행하세요.", + "discount": "할인", + "edit": "편집", + "editCoupon": "쿠폰 편집", + "enable": "사용", + "form": { + "amountDiscount": "금액 할인", + "cancel": "취소", + "confirm": "확인", + "count": "최대 사용 횟수", + "countPlaceholder": "최대 사용 횟수(비워두면 무제한)", + "customCouponCode": "사용자 정의 쿠폰 코드", + "customCouponCodePlaceholder": "사용자 정의 쿠폰 코드(비워두면 자동 생성)", + "enterCouponName": "쿠폰 이름을 입력하세요", + "enterValue": "값을 입력하세요", + "expireTime": "만료 시간", + "name": "이름", + "percentageDiscount": "백분율 할인", + "selectServer": "구독을 선택하세요", + "selectTime": "시간 선택", + "specifiedServer": "지정된 구독", + "startTime": "시작 시간", + "type": "쿠폰 유형", + "userLimit": "사용자당 최대 사용 횟수", + "userLimitPlaceholder": "사용자당 최대 사용 횟수(비워두면 무제한)" + }, + "name": "이름", + "percentage": "백분율", + "remainingTimes": "남은 시간", + "subscribe": "구독", + "type": "유형", + "unlimited": "무제한", + "updateSuccess": "업데이트 성공", + "usedTimes": "사용 횟수", + "validityPeriod": "유효 기간" +} diff --git a/apps/admin/locales/ko-KR/document.json b/apps/admin/locales/ko-KR/document.json new file mode 100644 index 0000000..02d2a45 --- /dev/null +++ b/apps/admin/locales/ko-KR/document.json @@ -0,0 +1,29 @@ +{ + "DocumentList": "문서 목록", + "actions": "작업", + "cancel": "취소", + "confirm": "확인", + "confirmDelete": "삭제하시겠습니까?", + "create": "생성", + "createDocument": "문서 생성", + "createSuccess": "생성 성공", + "delete": "삭제", + "deleteDescription": "삭제하면 데이터는 복구할 수 없습니다. 신중하게 진행하세요.", + "deleteSuccess": "삭제 성공", + "edit": "편집", + "editDocument": "문서 편집", + "form": { + "cancel": "취소", + "confirm": "확인", + "content": "내용", + "tags": "카테고리", + "tagsPlaceholder": "여러 카테고리를 입력하려면 Enter 키 또는 쉼표(,)로 구분하세요", + "title": "제목", + "titlePlaceholder": "입력하세요" + }, + "show": "표시", + "tags": "카테고리", + "title": "제목", + "updateSuccess": "업데이트 성공", + "updatedAt": "업데이트 시간" +} diff --git a/apps/admin/locales/ko-KR/index.json b/apps/admin/locales/ko-KR/index.json new file mode 100644 index 0000000..8d6c42c --- /dev/null +++ b/apps/admin/locales/ko-KR/index.json @@ -0,0 +1,29 @@ +{ + "email": "이메일", + "month": "이번 달", + "monthDownloadTraffic": "이번 달 다운로드 트래픽", + "monthUploadTraffic": "이번 달 업로드 트래픽", + "newPurchase": "신규 구매", + "nodeTraffic": "노드 트래픽", + "nodes": "노드", + "offlineNodeCount": "오프라인 노드 수", + "onlineIPCount": "온라인 IP 수", + "onlineNodeCount": "온라인 노드 수", + "pendingTickets": "처리 대기 중인 티켓", + "register": "등록", + "repurchase": "재구매", + "revenueTitle": "수입 통계", + "selectTypePlaceholder": "유형 선택", + "statisticsTitle": "통계", + "today": "오늘", + "todayDownloadTraffic": "오늘 다운로드 트래픽", + "todayUploadTraffic": "오늘 업로드 트래픽", + "total": "총계", + "totalIncome": "총수입", + "trafficRank": "트래픽 순위", + "type": "유형", + "userTitle": "사용자 통계", + "userTraffic": "사용자 트래픽", + "users": "사용자", + "yesterday": "어제" +} diff --git a/apps/admin/locales/ko-KR/language.json b/apps/admin/locales/ko-KR/language.json new file mode 100644 index 0000000..4fd4b2f --- /dev/null +++ b/apps/admin/locales/ko-KR/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "체코어", + "de-DE": "독일어", + "en-US": "영어", + "es-ES": "스페인어", + "es-MX": "스페인어(멕시코)", + "fi-FI": "핀란드어", + "fr-FR": "프랑스어", + "hi-IN": "힌디어", + "hu-HU": "헝가리어", + "ja-JP": "일본어", + "ko-KR": "한국어", + "no-NO": "노르웨이어", + "pl-PL": "폴란드어", + "pt-BR": "포르투갈어(브라질)", + "ro-RO": "루마니아어", + "ru-RU": "러시아어", + "th-TH": "태국어", + "tr-TR": "터키어", + "uk-UA": "우크라이나어", + "vi-VN": "베트남어", + "zh-CN": "중국어(간체)", + "zh-TW": "중국어(번체)" +} diff --git a/apps/admin/locales/ko-KR/menu.json b/apps/admin/locales/ko-KR/menu.json new file mode 100644 index 0000000..9221a43 --- /dev/null +++ b/apps/admin/locales/ko-KR/menu.json @@ -0,0 +1,18 @@ +{ + "Announcement Management": "공지 관리", + "Coupon Management": "쿠폰 관리", + "Dashboard": "대시보드", + "Document Management": "문서 관리", + "Finance": "재무", + "Order Management": "주문 관리", + "Payment Config": "결제 구성", + "Server": "서버", + "Server Management": "서버 관리", + "Settings": "설정", + "Subscribe Management": "구독 관리", + "System Config": "시스템 구성", + "System Tool": "시스템 도구", + "Ticket Management": "티켓 관리", + "User": "사용자", + "User Management": "사용자 관리" +} diff --git a/apps/admin/locales/ko-KR/order.json b/apps/admin/locales/ko-KR/order.json new file mode 100644 index 0000000..70e0c99 --- /dev/null +++ b/apps/admin/locales/ko-KR/order.json @@ -0,0 +1,37 @@ +{ + "amount": "금액", + "couponDiscount": "쿠폰 할인", + "discount": "할인 금액", + "failed": "실패", + "feeAmount": "수수료", + "method": "지불 방법", + "methods": { + "alipay_f2f": "알리페이(대면)", + "balance": "잔액", + "epay": "이페이", + "stripe_alipay": "Stripe(알리페이)", + "stripe_wechat_pay": "Stripe(위챗)" + }, + "orderNumber": "주문 번호", + "status": { + "0": "상태", + "1": "결제 대기 중", + "2": "결제 완료", + "3": "취소됨", + "4": "닫힘", + "5": "완료됨" + }, + "subscribe": "구독", + "subscribePrice": "구독 가격", + "total": "총계", + "tradeNo": "거래 번호", + "type": { + "0": "유형", + "1": "신규 구매", + "2": "갱신", + "3": "데이터 초기화", + "4": "충전" + }, + "updateTime": "업데이트 시간", + "user": "사용자" +} diff --git a/apps/admin/locales/ko-KR/payment.json b/apps/admin/locales/ko-KR/payment.json new file mode 100644 index 0000000..619f891 --- /dev/null +++ b/apps/admin/locales/ko-KR/payment.json @@ -0,0 +1,44 @@ +{ + "aliPay": "알리페이 결제", + "alipayf2f": { + "appId": "알리페이 애플리케이션 ID", + "invoiceName": "사용자 정의 제품 이름", + "invoiceNameDescription": "알리페이 청구서에 표시됩니다", + "privateKey": "알리페이 개인 키", + "publicKey": "알리페이 공개 키", + "sandbox": "샌드박스 모드", + "sandboxDescription": "결제를 테스트하기 위해 샌드박스 모드를 활성화합니다" + }, + "enable": "사용", + "enableDescription": "이 결제 수단을 활성화합니다", + "epay": { + "key": "키", + "pid": "PID", + "url": "URL" + }, + "feeMode": "요금 방식", + "feeModeDescription": "추가 수수료의 부과 방식", + "feeModeItems": ["수수료 없음", "백분율", "고정 금액", "이상 두 가지"], + "feePercent": "수수료 비율(선택 사항)", + "feePercentDescription": "주문 금액에 추가 요금 부과", + "fixedFee": "고정 수수료(선택 사항)", + "fixedFeeDescription": "주문 금액에 고정 요금 추가", + "iconUrl": "아이콘 URL(선택 사항)", + "iconUrlDescription": "프론트엔드 표시용", + "inputPlaceholder": "입력하세요", + "key": "키", + "notifyUrl": "사용자 정의 알림 도메인 (선택 사항)", + "notifyUrlDescription": "게이트웨이 알림이 이 도메인으로 전송됩니다", + "payForRecommendations": "추천에 대한 지불", + "pid": "PID", + "saveSuccess": "저장 성공", + "showName": "이름 표시", + "showNameDescription": "프론트엔드 표시용", + "stripe": { + "publicKey": "공개 키", + "secretKey": "비밀 키", + "webhookSecret": "웹훅 비밀 서명" + }, + "url": "URL", + "wechatPay": "위챗페이" +} diff --git a/apps/admin/locales/ko-KR/server.json b/apps/admin/locales/ko-KR/server.json new file mode 100644 index 0000000..408703a --- /dev/null +++ b/apps/admin/locales/ko-KR/server.json @@ -0,0 +1,122 @@ +{ + "group": { + "actions": "작업", + "cancel": "취소", + "confirm": "확인", + "confirmDelete": "삭제하시겠습니까?", + "create": "생성", + "createNodeGroup": "노드 그룹 생성", + "createdSuccessfully": "성공적으로 생성되었습니다", + "delete": "삭제", + "deleteWarning": "삭제 후 데이터는 복구할 수 없으니 신중히 진행하세요.", + "deletedSuccessfully": "성공적으로 삭제되었습니다", + "description": "설명", + "edit": "편집", + "editNodeGroup": "노드 그룹 편집", + "form": { + "cancel": "취소", + "confirm": "확인", + "description": "설명", + "name": "이름" + }, + "name": "이름", + "title": "노드 그룹 목록", + "updatedAt": "업데이트 시간" + }, + "node": { + "abnormal": "비정상", + "actions": "작업", + "address": "주소", + "all": "전체", + "cancel": "취소", + "confirm": "확인", + "confirmDelete": "삭제하시겠습니까?", + "create": "생성", + "createNode": "노드 생성", + "createSuccess": "생성 성공", + "delete": "삭제", + "deleteSuccess": "삭제 성공", + "deleteWarning": "삭제 후 데이터는 복구할 수 없습니다. 신중히 진행하세요.", + "disk": "디스크", + "edit": "편집", + "editNode": "노드 편집", + "enable": "활성화", + "form": { + "allowInsecure": "비보안 허용", + "cancel": "취소", + "confirm": "확인", + "edit": "편집", + "editSecurity": "보안 설정 편집", + "enableRelay": "중계 활성화", + "enableTLS": "TLS 활성화", + "encryptionMethod": "암호화 방법", + "flow": "흐름 제어 알고리즘", + "hopInterval": "홉 간격", + "hopPorts": "홉 포트", + "hopPortsPlaceholder": "여러 포트는 쉼표로 구분", + "name": "이름", + "nodeGroupId": "노드 그룹 ID", + "obfsPassword": "난독화 비밀번호", + "obfsPasswordPlaceholder": "비워두면 난독화 안 함", + "path": "경로", + "pleaseSelect": "선택하세요", + "port": "서비스 포트", + "protocol": "프로토콜", + "relayHost": "중계 주소", + "relayPort": "중계 포트", + "remarks": "비고", + "security": "보안", + "securityConfig": "보안 설정", + "security_config": { + "fingerprint": "지문", + "privateKey": "개인 키", + "privateKeyPlaceholder": "비워두면 자동 생성", + "publicKey": "공개 키", + "publicKeyPlaceholder": "비워두면 자동 생성", + "serverAddress": "서버 주소", + "serverAddressPlaceholder": "REALITY 대상 주소, 기본 SNI 사용", + "serverName": "서버 이름(SNI)", + "serverNamePlaceholder": "REALITY 필수, 백엔드와 일치", + "serverPort": "서버 포트", + "serverPortPlaceholder": "REALITY 대상 포트, 기본 443", + "shortId": "짧은 ID", + "shortIdPlaceholder": "비워두면 자동 생성", + "sni": "서버 이름 표시(SNI)" + }, + "selectEncryptionMethod": "암호화 방법 선택", + "selectNodeGroup": "노드 그룹 선택", + "selectProtocol": "프로토콜 선택", + "serverAddr": "서버 주소", + "serverName": "서비스 이름", + "speedLimit": "속도 제한", + "speedLimitPlaceholder": "제한 없음", + "trafficRatio": "트래픽 비율", + "transport": "전송 프로토콜", + "transportConfig": "전송 프로토콜 설정", + "transportHost": "전송 서비스 주소", + "transportPath": "전송 경로", + "transportServerName": "전송 서비스 이름" + }, + "lastUpdated": "마지막 업데이트", + "memory": "메모리", + "name": "이름", + "node": "노드", + "nodeGroup": "노드 그룹", + "normal": "정상", + "onlineCount": "온라인 인원", + "onlineUsers": "온라인 사용자", + "rate": "비율", + "relay": "중계", + "serverAddr": "서버 주소", + "speedLimit": "속도 제한", + "status": "상태", + "trafficRatio": "트래픽 비율", + "type": "유형", + "updateSuccess": "업데이트 성공", + "updatedAt": "업데이트 시간" + }, + "tabs": { + "node": "노드", + "nodeGroup": "노드 그룹" + } +} diff --git a/apps/admin/locales/ko-KR/subscribe.json b/apps/admin/locales/ko-KR/subscribe.json new file mode 100644 index 0000000..ef57ba9 --- /dev/null +++ b/apps/admin/locales/ko-KR/subscribe.json @@ -0,0 +1,79 @@ +{ + "actions": "작업", + "cancel": "취소", + "confirm": "확인", + "confirmDelete": "삭제하시겠습니까?", + "create": "생성", + "createSubscribe": "새 구독 생성", + "createSuccess": "생성 성공", + "delete": "삭제", + "deleteSuccess": "삭제 성공", + "deleteWarning": "삭제 후 데이터는 복구할 수 없으니 신중하게 진행하세요.", + "deviceLimit": "장치 수/대", + "edit": "편집", + "editSubscribe": "구독 편집", + "form": { + "cancel": "취소", + "confirm": "확인", + "description": "설명", + "deviceLimit": "기기 제한", + "discount": "할인", + "discountDescription": "단가 기준으로 할인 설정", + "discountMonths": "개월", + "discountPercent": "할인율", + "discount_price": "할인가", + "duration": "기간 (개월)", + "inventory": "재고", + "name": "이름", + "noLimit": "무제한", + "quota": "구매 한도", + "replacement": "재설정 가격 (매회)", + "selectSubscribeGroup": "구독 그룹을 선택하세요", + "server": "서버", + "serverGroup": "서버 그룹", + "speedLimit": "속도 제한 (Mbps)", + "subscribeGroup": "구독 그룹", + "traffic": "트래픽", + "unit_price": "월 단위 가격" + }, + "group": { + "actions": "작업", + "cancel": "취소", + "confirm": "확인", + "confirmDelete": "삭제하시겠습니까?", + "create": "생성", + "createSubscribeGroup": "새 구독 그룹 생성", + "createSuccess": "생성 성공", + "delete": "삭제", + "deleteSuccess": "삭제 성공", + "deleteWarning": "삭제 후 데이터는 복구할 수 없습니다. 신중하게 진행하세요.", + "description": "설명", + "edit": "편집", + "editSubscribeGroup": "구독 그룹 편집", + "form": { + "cancel": "취소", + "confirm": "확인", + "description": "설명", + "name": "이름" + }, + "name": "이름", + "title": "구독 그룹 목록", + "updateSuccess": "업데이트 성공", + "updatedAt": "업데이트 시간" + }, + "inventory": "재고", + "name": "이름", + "quota": "구매 제한/회", + "replacement": "가격 재설정/회", + "sell": "판매", + "show": "홈 화면 표시", + "subscribe": "구독", + "subscribeGroup": "구독 그룹", + "tabs": { + "subscribe": "구독", + "subscribeGroup": "구독 그룹" + }, + "traffic": "트래픽", + "unitPrice": "가격/월", + "updateSuccess": "업데이트 성공" +} diff --git a/apps/admin/locales/ko-KR/system.json b/apps/admin/locales/ko-KR/system.json new file mode 100644 index 0000000..a811525 --- /dev/null +++ b/apps/admin/locales/ko-KR/system.json @@ -0,0 +1,156 @@ +{ + "currency": { + "accessKey": "액세스 키", + "accessKeyDescription": "https://exchangerate.host에서 무료로 제공하는 환율 API 키", + "currencySymbol": "통화 기호", + "currencySymbolDescription": "표시용으로만 사용되며, 변경 시 시스템 내 모든 통화 단위가 변경됩니다", + "currencyUnit": "통화 단위", + "currencyUnitDescription": "표시용으로만 사용되며, 변경 시 시스템 내 모든 통화 단위가 변경됩니다", + "saveSuccess": "저장 성공" + }, + "email": { + "expiration_email_template": "만료 알림 템플릿", + "expiration_email_templateDescription": "템플릿의 {after}.변수명{before}은 실제 데이터로 대체됩니다. 이 변수를 반드시 유지하세요.", + "inputPlaceholder": "내용을 입력하세요...", + "maintenance_email_template": "유지보수 알림 템플릿", + "maintenance_email_templateDescription": "템플릿의 {after}.변수명{before}은 실제 데이터로 대체됩니다. 이 변수를 반드시 유지하세요.", + "saveSuccess": "구성이 성공적으로 저장되었습니다.", + "sendFailure": "테스트 이메일 전송에 실패했습니다. 구성을 확인하세요.", + "sendSuccess": "테스트 이메일이 성공적으로 전송되었습니다.", + "sendTestEmail": "테스트 이메일 전송", + "sendTestEmailDescription": "구성이 올바른지 확인하기 위해 테스트 이메일을 전송합니다.", + "senderAddress": "발신자 주소", + "senderAddressDescription": "기본적으로 이메일을 보내는 데 사용되는 이메일 주소입니다.", + "smtpAccount": "SMTP 계정", + "smtpAccountDescription": "인증에 사용되는 이메일 계정입니다.", + "smtpEncryptionMethod": "SMTP 암호화 방식", + "smtpEncryptionMethodDescription": "SSL/TLS 암호화 사용 여부를 선택하세요.", + "smtpPassword": "SMTP 비밀번호", + "smtpPasswordDescription": "이 SMTP 계정의 비밀번호입니다.", + "smtpServerAddress": "SMTP 서버 주소", + "smtpServerAddressDescription": "이메일 전송에 사용되는 서버 주소를 지정합니다.", + "smtpServerPort": "SMTP 서버 포트", + "smtpServerPortDescription": "SMTP 서버에 연결하는 데 사용되는 포트 번호를 지정합니다.", + "verify_email_template": "인증 이메일 템플릿", + "verify_email_templateDescription": "템플릿의 {after}.변수명{before}은 실제 데이터로 대체됩니다. 이 변수를 반드시 유지하세요." + }, + "invite": { + "commissionFirstTimeOnly": "최초 구매 시에만 커미션", + "commissionFirstTimeOnlyDescription": "활성화하면, 초대받은 사람이 최초 결제 시에만 커미션이 생성됩니다. 사용자 관리에서 개별 사용자를 구성할 수 있습니다.", + "enableForcedInvite": "강제 초대 활성화", + "enableForcedInviteDescription": "활성화하면, 초대받은 사용자만 등록할 수 있습니다.", + "inputPlaceholder": "입력하세요", + "inviteCommissionPercentage": "초대 커미션 비율", + "inviteCommissionPercentageDescription": "기본 전역 커미션 배분 비율입니다. 사용자 관리에서 개별 비율을 구성할 수 있습니다.", + "saveSuccess": "저장 성공" + }, + "node": { + "communicationKey": "통신 키", + "communicationKeyDescription": "데이터가 다른 사람에게 가로채이지 않도록 보장하는 노드 통신 키", + "inputPlaceholder": "입력하세요", + "nodePullInterval": "노드 가져오기 간격", + "nodePullIntervalDescription": "노드가 패널에서 데이터를 가져오는 빈도(초)", + "nodePushInterval": "노드 푸시 간격", + "nodePushIntervalDescription": "노드가 데이터를 패널로 푸시하는 빈도", + "saveSuccess": "저장 성공" + }, + "register": { + "emailSuffixWhitelist": "이메일 접미사 화이트리스트", + "emailSuffixWhitelistDescription": "활성화하면, 목록에 있는 접미사의 이메일만 등록할 수 있습니다.", + "emailVerification": "이메일 인증", + "emailVerificationDescription": "활성화하면, 사용자는 이메일을 인증해야 합니다.", + "ipRegistrationLimit": "IP 등록 제한", + "ipRegistrationLimitDescription": "활성화하면, 규칙에 맞는 IP는 등록이 제한됩니다. CDN 또는 프론트엔드 프록시로 인해 IP 확인에 문제가 발생할 수 있습니다.", + "penaltyTime": "처벌 시간 (분)", + "penaltyTimeDescription": "사용자는 처벌 시간이 지나야 다시 등록할 수 있습니다.", + "registrationLimitCount": "등록 제한 횟수", + "registrationLimitCountDescription": "등록 제한에 도달하면 처벌이 활성화됩니다.", + "saveSuccess": "저장 성공", + "stopNewUserRegistration": "신규 사용자 등록 중지", + "stopNewUserRegistrationDescription": "활성화하면, 아무도 등록할 수 없습니다.", + "trialRegistration": "체험 등록", + "trialRegistrationDescription": "체험 등록을 활성화하려면, 먼저 체험 패키지와 기간을 수정하세요.", + "whitelistSuffixes": "화이트리스트 접미사", + "whitelistSuffixesDescription": "이메일 인증 등록에 사용됩니다. 한 줄에 하나씩 입력하세요.", + "whitelistSuffixesPlaceholder": "이메일 접미사를 입력하세요. 한 줄에 하나씩" + }, + "site": { + "logo": "LOGO", + "logoDescription": "LOGO를 표시해야 하는 위치에 사용됩니다", + "logoPlaceholder": "LOGO의 URL 주소를 입력하세요. '/'로 끝나지 않도록 하세요", + "saveSuccess": "저장 성공", + "siteDesc": "사이트 설명", + "siteDescDescription": "사이트 설명을 표시해야 하는 위치에 사용됩니다", + "siteDescPlaceholder": "사이트 설명을 입력하세요", + "siteDomain": "사이트 도메인", + "siteDomainDescription": "현재 웹사이트의 도메인 주소로, 예를 들어 이메일에 사용됩니다", + "siteDomainPlaceholder": "도메인 주소를 입력하세요. 여러 도메인은 각 줄에 하나씩 입력하세요", + "siteName": "사이트 이름", + "siteNameDescription": "사이트 이름을 표시해야 하는 위치에 사용됩니다", + "siteNamePlaceholder": "사이트 이름을 입력하세요" + }, + "subscription": { + "add": "추가", + "app": "앱", + "appDescription": "앱의 다운로드 주소와 가져오기 규칙을 구성합니다. 수정 후 저장하는 것을 잊지 마세요.", + "appDownloadURL": "앱 다운로드 주소", + "appIcon": "앱 아이콘", + "appName": "앱 이름", + "delete": "삭제", + "reset": "재설정", + "save": "저장", + "saveSuccess": "저장 성공", + "singleSubscriptionMode": "단일 구독 모드", + "singleSubscriptionModeDescription": "활성화하면 모든 사용자의 패키지가 잔액으로 전환됩니다.", + "subscriptionDomain": "구독 도메인", + "subscriptionDomainDescription": "구독에 사용됩니다. 비워두면 사이트 도메인을 사용합니다.", + "subscriptionDomainPlaceholder": "구독 도메인을 입력하세요. 여러 도메인은 각 줄에 하나씩 입력하세요.", + "subscriptionPath": "구독 경로", + "subscriptionPathDescription": "구독에 사용됩니다. 수정 후 최상의 성능을 위해 시스템을 반드시 재시작하세요.", + "subscriptionPathPlaceholder": "입력하세요", + "subscriptionProtocol": "구독 프로토콜", + "wildcardResolution": "와일드카드 해석", + "wildcardResolutionDescription": "구독에 사용됩니다." + }, + "tabs": { + "currency": "통화", + "email": "이메일", + "invite": "초대", + "node": "노드", + "register": "등록", + "site": "사이트", + "subscription": "구독", + "telegram": "텔레그램", + "tos": "서비스 약관", + "verify": "검증" + }, + "telegram": { + "botToken": "봇 토큰", + "botTokenDescription": "Botfather가 제공한 토큰을 입력하세요", + "enableBotNotifications": "봇 알림 활성화", + "enableBotNotificationsDescription": "활성화하면, 봇이 Telegram에 연결된 관리자와 사용자에게 기본 알림을 보냅니다", + "groupURL": "그룹 URL", + "groupURLDescription": "입력하면 사용자 인터페이스에 표시되거나 필요한 위치에 사용됩니다", + "inputPlaceholderBotToken": "0000000000:xxxxxxxxx_xxxxxxxxxxxxxxx", + "inputPlaceholderGroupURL": "https://t.me/xxxxxx", + "saveSuccess": "저장 성공" + }, + "tos": { + "saveSuccess": "저장 성공", + "title": "서비스 약관" + }, + "verify": { + "inputPlaceholder": "입력하세요", + "loginVerificationCode": "로그인 인증 코드", + "loginVerificationCodeDescription": "로그인 시의 인간 확인", + "registrationVerificationCode": "등록 인증 코드", + "registrationVerificationCodeDescription": "등록 시의 인간 확인", + "resetPasswordVerificationCode": "비밀번호 재설정 인증 코드", + "resetPasswordVerificationCodeDescription": "비밀번호 재설정 시의 인간 확인", + "saveSuccess": "저장 성공", + "turnstileSecret": "Turnstile 비밀키", + "turnstileSecretDescription": "Cloudflare에서 제공하는 Turnstile 비밀키", + "turnstileSiteKey": "Turnstile 사이트 키", + "turnstileSiteKeyDescription": "Cloudflare에서 제공하는 Turnstile 사이트 키" + } +} diff --git a/apps/admin/locales/ko-KR/ticket.json b/apps/admin/locales/ko-KR/ticket.json new file mode 100644 index 0000000..39a0e48 --- /dev/null +++ b/apps/admin/locales/ko-KR/ticket.json @@ -0,0 +1,19 @@ +{ + "actions": "작업", + "cancel": "취소", + "check": "확인", + "close": "닫기", + "closeSuccess": "닫기 성공", + "closeWarning": "일단 닫으면 이 작업 티켓을 조작할 수 없습니다. 신중하게 처리하세요.", + "confirm": "확인", + "confirmClose": "닫으시겠습니까?", + "createdAt": "생성 시간", + "inputPlaceholder": "질문을 입력해 주시면 최대한 빨리 답변드리겠습니다.", + "open": "열기", + "reply": "답장", + "status": ["상태", "추적 대기", "답변 대기", "처리 완료", "닫힘"], + "ticketList": "티켓 목록", + "title": "제목", + "updatedAt": "업데이트 시간", + "user": "사용자" +} diff --git a/apps/admin/locales/ko-KR/tool.json b/apps/admin/locales/ko-KR/tool.json new file mode 100644 index 0000000..2d18e3b --- /dev/null +++ b/apps/admin/locales/ko-KR/tool.json @@ -0,0 +1,26 @@ +{ + "caller": "발신자", + "cancel": "취소", + "confirmReboot": "재부팅 확인", + "confirmSystemReboot": "시스템 재부팅 확인", + "confirmSystemUpgrade": "시스템 업그레이드를 확인", + "confirmUpgrade": "업그레이드 확인", + "currentVersion": "현재 시스템 버전:", + "errors": "오류", + "ip": "IP", + "lastUpdated": "마지막 업데이트:", + "none": "없음", + "query": "쿼리", + "rebootDescription": "시스템을 재부팅하시겠습니까? 이 작업은 일시적인 서비스 중단을 초래할 수 있습니다.", + "rebooting": "시스템을 재부팅 중입니다...", + "refreshLogs": "로그 새로고침", + "request": "요청", + "status": "상태", + "systemLogs": "시스템 로그", + "systemReboot": "시스템 재부팅", + "systemServices": "시스템 서비스", + "systemUpgrade": "시스템 업그레이드", + "upgradeDescription": "시스템 업그레이드를 수행하시겠습니까? 이 작업은 몇 분이 소요될 수 있으며, 그 동안 시스템이 응답하지 않을 수 있습니다.", + "userAgent": "사용자 에이전트", + "viewLogsAndManage": "시스템 로그를 보고 시스템 업그레이드 및 재시작 작업을 수행합니다" +} diff --git a/apps/admin/locales/ko-KR/user.json b/apps/admin/locales/ko-KR/user.json new file mode 100644 index 0000000..d1370c2 --- /dev/null +++ b/apps/admin/locales/ko-KR/user.json @@ -0,0 +1,38 @@ +{ + "actions": "작업", + "balance": "잔액", + "cancel": "취소", + "confirm": "확인", + "confirmDelete": "삭제하시겠습니까?", + "create": "생성", + "createSuccess": "생성 성공", + "createUser": "사용자 생성", + "createdAt": "가입 시간", + "delete": "삭제", + "deleteDescription": "삭제 후 데이터는 복구할 수 없으니 신중하게 진행하세요.", + "deleteSuccess": "삭제 성공", + "edit": "편집", + "editUser": "사용자 편집", + "email": "이메일", + "enable": "사용", + "form": { + "balance": "잔액", + "balancePlaceholder": "잔액", + "cancel": "취소", + "confirm": "확인", + "invalidEmailFormat": "유효하지 않은 이메일 형식", + "inviteCode": "초대 코드", + "inviteCodePlaceholder": "초대 코드를 입력하세요 (비워두면 자동 생성)", + "manager": "관리자", + "password": "비밀번호", + "passwordPlaceholder": "새 비밀번호를 입력하세요 (비워둘 수 있음)", + "refererId": "추천인 ID", + "refererIdPlaceholder": "추천인 ID를 입력하세요", + "userEmail": "사용자 이메일", + "userEmailPlaceholder": "사용자 이메일을 입력하세요" + }, + "referer": "추천인", + "updateSuccess": "업데이트 성공", + "userList": "사용자 목록", + "userName": "사용자 이메일" +} diff --git a/apps/admin/locales/no-NO/announcement.json b/apps/admin/locales/no-NO/announcement.json new file mode 100644 index 0000000..a776353 --- /dev/null +++ b/apps/admin/locales/no-NO/announcement.json @@ -0,0 +1,30 @@ +{ + "actions": "handlinger", + "announcementList": "Kunngjøringsliste", + "cancel": "Avbryt", + "confirm": "Bekreft", + "confirmDelete": "Er du sikker på at du vil slette?", + "content": "Innhold", + "create": "Opprett", + "createAnnouncement": "Opprett kunngjøring", + "createSuccess": "Opprettelse vellykket", + "delete": "slett", + "deleteDescription": "Når du sletter, kan dataene ikke gjenopprettes. Vennligst vær forsiktig.", + "deleteSuccess": "Sletting vellykket", + "edit": "rediger", + "editAnnouncement": "Rediger kunngjøring", + "enable": "Aktiver", + "form": { + "cancel": "Avbryt", + "confirm": "Bekreft", + "content": "Innhold", + "contentPlaceholder": "Vennligst skriv inn kunngjøringsinnhold (støtter Markdown)", + "title": "Tittel", + "titlePlaceholder": "Vennligst skriv inn" + }, + "hide": "skjul", + "show": "Vis", + "title": "Tittel", + "updateSuccess": "Oppdatering vellykket", + "updatedAt": "Oppdatert" +} diff --git a/apps/admin/locales/no-NO/auth.json b/apps/admin/locales/no-NO/auth.json new file mode 100644 index 0000000..beae024 --- /dev/null +++ b/apps/admin/locales/no-NO/auth.json @@ -0,0 +1,39 @@ +{ + "check": { + "checking": "Verifiserer...", + "continue": "Fortsett", + "description": "Vennligst skriv inn din e-post for å fortsette med innlogging eller registrering.", + "email": "Vennligst skriv inn en gyldig e-postadresse.", + "title": "Logg inn/Registrer", + "whitelist": "E-postdomenet er ikke på den tillatte hvitelisten." + }, + "login": { + "description": "Vennligst skriv inn kontoinformasjonen din for å logge inn.", + "forgotPassword": "Glemt passord?", + "success": "Innlogging vellykket!", + "switchAccount": "Registrer/bytt konto", + "title": "Logg inn" + }, + "logout": "Logg ut", + "orWithEmail": "eller bruk e-post", + "register": { + "description": "Opprett en ny konto, fyll inn informasjonen din for å registrere deg.", + "existingAccount": "Har du allerede en konto?", + "get": "Få", + "invite": "Invitasjonskode", + "message": "#### Kjære bruker,\n\nTakk for din interesse og støtte. På grunn av justeringer i vår driftsstrategi har vi stengt for registrering av nye brukere. I denne perioden vil eksisterende brukere ikke bli påvirket.\n\nVi er forpliktet til å gi deg bedre service og opplevelse, og vil derfor gjennomføre en omfattende systemoptimalisering og funksjonsoppgradering mens registreringen er stengt. I fremtiden vil vi ønske deg velkommen med bedre innhold og tjenester.\n\nFølg med på vår nettside og sosiale medieplattformer for å få de siste oppdateringene og kunngjøringene. Takk for din forståelse og støtte.\n\nHvis du har spørsmål eller trenger hjelp, vennligst kontakt vårt kundeserviceteam.\n\n**Takk igjen for din støtte og forståelse.**", + "passwordMismatch": "Passordene stemmer ikke overens", + "success": "Registrering vellykket, du er nå automatisk logget inn!", + "switchToLogin": "Logg inn/tilbakestill e-post", + "title": "Registrer deg" + }, + "reset": { + "description": "Vennligst skriv inn din e-postadresse for å tilbakestille passordet ditt.", + "existingAccount": "Har du allerede en konto?", + "get": "Hent", + "success": "Passordet er tilbakestilt, du er automatisk logget inn!", + "switchToLogin": "Logg inn/Registrer", + "title": "Tilbakestill passord" + }, + "tos": "Tjenestevilkår" +} diff --git a/apps/admin/locales/no-NO/common.json b/apps/admin/locales/no-NO/common.json new file mode 100644 index 0000000..ecb26e7 --- /dev/null +++ b/apps/admin/locales/no-NO/common.json @@ -0,0 +1,60 @@ +{ + "billing": { + "description": "Sponsing bidrar til at PPanel kan fortsette å gi ut oppdateringer!", + "title": "Sponsorer" + }, + "empty": [ + "Tenk deg at dette stedet er fylt med fantastisk innhold! Foreløpig må du bare forestille deg det…", + "Dette området har mystisk forsvunnet, vi prøver å få det tilbake!", + "Oi, ingenting skjedde… kanskje du kan fylle inn noe selv!", + "Det er som å oppdage at scenen på en konsert er tom… vil du gå opp og opptre?", + "Du har funnet et tomt paradis! Vil du bygge et hus?", + "Det er ingenting her for øyeblikket, men kreativiteten starter her!", + "Ingenting her… men ikke bekymre deg, dette er bare begynnelsen!", + "Det var en stor overraskelse her, men den har stukket av!", + "Foreløpig er det ingenting her, som en tom godteriskål.", + "Dette tomme området venter på at hovedpersonen skal tre inn!" + ], + "request": { + "10001": "Forespørselen var ikke vellykket, vennligst prøv igjen senere eller sjekk dine kriterier.", + "10002": "Oppdateringen var ikke vellykket, vennligst prøv igjen senere.", + "10003": "Kan for øyeblikket ikke fullføre innsettingsoperasjonen, vennligst prøv igjen senere.", + "10004": "Slettingen kunne ikke fullføres, vennligst prøv igjen senere.", + "20001": "Brukerinformasjonen eksisterer allerede, vennligst endre informasjonen og prøv igjen.", + "20002": "Brukeren ble ikke funnet, vennligst sjekk informasjonen og prøv igjen.", + "20003": "Passordet du skrev inn er ikke korrekt, vennligst skriv det inn på nytt.", + "20004": "Brukeren er deaktivert, vennligst kontakt kundeservice hvis du har spørsmål.", + "20005": "Saldoen er utilstrekkelig, vennligst fyll på og prøv igjen.", + "20006": "Registreringsfunksjonen er midlertidig utilgjengelig, vennligst prøv igjen senere.", + "30001": "Noden eksisterer allerede, vennligst ikke legg den til igjen.", + "30002": "Ingen relaterte noder funnet, vennligst sjekk og prøv igjen.", + "30003": "Gruppen eksisterer allerede, vennligst prøv et annet navn.", + "30004": "Gruppen ble ikke funnet, vennligst bekreft informasjonen og prøv igjen.", + "30005": "Gruppen inneholder fortsatt innhold, vennligst tøm den og prøv igjen.", + "400": "Forespørselens parametere er ikke korrekte, vennligst sjekk og send inn på nytt.", + "40002": "Ingen gyldig token funnet, vennligst logg inn og prøv igjen.", + "40003": "Den nåværende token er ugyldig, vennligst hent en ny og prøv igjen.", + "40004": "Token er utløpt, vennligst logg inn på nytt.", + "40005": "Du har ikke tilgang, vennligst kontakt administratoren hvis du har spørsmål.", + "401": "For mange forespørsler, vennligst prøv igjen senere.", + "500": "Serveren har støtt på noen problemer, vennligst prøv igjen senere.", + "50001": "Kan ikke finne tilsvarende kuponginformasjon, vennligst sjekk og prøv igjen.", + "50002": "Kupongen er allerede brukt og kan ikke brukes igjen.", + "60001": "Abonnementet er utløpt, vennligst forny det før bruk.", + "60002": "Kan for øyeblikket ikke bruke abonnementet, vennligst prøv igjen senere.", + "70001": "Verifikasjonskoden er feil, vennligst skriv den inn på nytt.", + "80001": "Oppgaven ble ikke vellykket lagt til i køen, vennligst prøv igjen senere.", + "90001": "Vennligst deaktiver DEBUG-modus og prøv igjen.", + "undefined": "Det oppstod en systemfeil, vennligst prøv igjen senere." + }, + "table": { + "actions": "Handlinger", + "asc": "Stigende", + "desc": "Synkende", + "hide": "Skjul", + "pageInfo": "Side {current} av {total}", + "rowsPerPage": "Rader per side", + "selectedItems": "{total} rader valgt" + }, + "unlimited": "ubegrenset" +} diff --git a/apps/admin/locales/no-NO/coupon.json b/apps/admin/locales/no-NO/coupon.json new file mode 100644 index 0000000..eb451d5 --- /dev/null +++ b/apps/admin/locales/no-NO/coupon.json @@ -0,0 +1,50 @@ +{ + "actions": "handlinger", + "amount": "Beløp", + "cancel": "Avbryt", + "code": "kode", + "confirm": "Bekreft", + "confirmDelete": "Er du sikker på at du vil slette?", + "count": "Antall", + "couponList": "Kupongliste", + "create": "Opprett", + "createCoupon": "Opprett kupong", + "createSuccess": "Opprettelse vellykket", + "delete": "slett", + "deleteSuccess": "Sletting vellykket", + "deleteWarning": "Når du sletter, kan dataene ikke gjenopprettes. Vennligst vær forsiktig.", + "discount": "rabatt", + "edit": "rediger", + "editCoupon": "Rediger kupong", + "enable": "Aktiver", + "form": { + "amountDiscount": "Beløpsrabatt", + "cancel": "Avbryt", + "confirm": "Bekreft", + "count": "Maksimalt antall bruk", + "countPlaceholder": "Maksimalt antall bruk (la stå tomt for ubegrenset)", + "customCouponCode": "Egendefinert kupongkode", + "customCouponCodePlaceholder": "Egendefinert kupongkode (la stå tomt for automatisk generering)", + "enterCouponName": "Vennligst skriv inn kupongnavn", + "enterValue": "Vennligst skriv inn verdi", + "expireTime": "Utløpstid", + "name": "Navn", + "percentageDiscount": "Prosentvis rabatt", + "selectServer": "Vennligst velg abonnement", + "selectTime": "Velg tid", + "specifiedServer": "Spesifisert abonnement", + "startTime": "Starttid", + "type": "Kupongtype", + "userLimit": "Maksimalt antall bruk per bruker", + "userLimitPlaceholder": "Maksimalt antall bruk per bruker (la stå tomt for ubegrenset)" + }, + "name": "Navn", + "percentage": "prosent", + "remainingTimes": "Gjenstående", + "subscribe": "Abonner", + "type": "Type", + "unlimited": "ubegrenset", + "updateSuccess": "Oppdatering vellykket", + "usedTimes": "Brukte ganger", + "validityPeriod": "Gyldighetsperiode" +} diff --git a/apps/admin/locales/no-NO/document.json b/apps/admin/locales/no-NO/document.json new file mode 100644 index 0000000..f7d3dda --- /dev/null +++ b/apps/admin/locales/no-NO/document.json @@ -0,0 +1,29 @@ +{ + "DocumentList": "Dokumentliste", + "actions": "handlinger", + "cancel": "Avbryt", + "confirm": "bekreft", + "confirmDelete": "Er du sikker på at du vil slette?", + "create": "Opprett", + "createDocument": "Opprett dokument", + "createSuccess": "Opprettelse vellykket", + "delete": "slett", + "deleteDescription": "Når du sletter, kan dataene ikke gjenopprettes. Vennligst vær forsiktig.", + "deleteSuccess": "Sletting vellykket", + "edit": "rediger", + "editDocument": "Rediger dokument", + "form": { + "cancel": "Avbryt", + "confirm": "Bekreft", + "content": "Innhold", + "tags": "Kategorier", + "tagsPlaceholder": "Vennligst bruk Enter-tasten eller komma (,) for å skille flere kategorier", + "title": "Tittel", + "titlePlaceholder": "Vennligst skriv inn" + }, + "show": "Vis", + "tags": "Kategorier", + "title": "Tittel", + "updateSuccess": "Oppdatering vellykket", + "updatedAt": "Oppdatert" +} diff --git a/apps/admin/locales/no-NO/index.json b/apps/admin/locales/no-NO/index.json new file mode 100644 index 0000000..2c58b0c --- /dev/null +++ b/apps/admin/locales/no-NO/index.json @@ -0,0 +1,29 @@ +{ + "email": "e-post", + "month": "Denne måneden", + "monthDownloadTraffic": "Nedlastingstrafikk denne måneden", + "monthUploadTraffic": "Månedens opplastningstrafikk", + "newPurchase": "Nytt kjøp", + "nodeTraffic": "Nodetrafikk", + "nodes": "noder", + "offlineNodeCount": "Antall frakoblede noder", + "onlineIPCount": "Antall IP-er på nett", + "onlineNodeCount": "Antall noder på nett", + "pendingTickets": "Ventende billetter", + "register": "Registrer", + "repurchase": "gjenkjøp", + "revenueTitle": "Inntektsstatistikk", + "selectTypePlaceholder": "Velg type", + "statisticsTitle": "Statistikk", + "today": "i dag", + "todayDownloadTraffic": "Dagens nedlastningstrafikk", + "todayUploadTraffic": "Dagens opplastningstrafikk", + "total": "Totalt", + "totalIncome": "Totalinntekt", + "trafficRank": "Trafikkrangering", + "type": "Type", + "userTitle": "Brukerstatistikk", + "userTraffic": "Brukertrafikk", + "users": "brukere", + "yesterday": "i går" +} diff --git a/apps/admin/locales/no-NO/language.json b/apps/admin/locales/no-NO/language.json new file mode 100644 index 0000000..d17fb3c --- /dev/null +++ b/apps/admin/locales/no-NO/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "Tsjekkisk", + "de-DE": "Tysk", + "en-US": "engelsk", + "es-ES": "Spansk", + "es-MX": "Spansk (Mexico)", + "fi-FI": "Finsk", + "fr-FR": "Fransk", + "hi-IN": "Hindi", + "hu-HU": "Ungarsk", + "ja-JP": "Japansk", + "ko-KR": "Koreansk", + "no-NO": "Norsk", + "pl-PL": "Polsk", + "pt-BR": "Portugisisk (Brasil)", + "ro-RO": "Rumensk", + "ru-RU": "Russisk", + "th-TH": "Thai", + "tr-TR": "Tyrkisk", + "uk-UA": "Ukrainsk", + "vi-VN": "Vietnamesisk", + "zh-CN": "Kinesisk (forenklet)", + "zh-TW": "Kinesisk (tradisjonell)" +} diff --git a/apps/admin/locales/no-NO/menu.json b/apps/admin/locales/no-NO/menu.json new file mode 100644 index 0000000..e1d9fb9 --- /dev/null +++ b/apps/admin/locales/no-NO/menu.json @@ -0,0 +1,18 @@ +{ + "Announcement Management": "Kunngjøringsadministrasjon", + "Coupon Management": "Kupongadministrasjon", + "Dashboard": "Dashbord", + "Document Management": "Dokumenthåndtering", + "Finance": "Finans", + "Order Management": "Bestillingsadministrasjon", + "Payment Config": "Betalingskonfigurasjon", + "Server": "Tjeneste", + "Server Management": "Serveradministrasjon", + "Settings": "Innstillinger", + "Subscribe Management": "Abonnementsadministrasjon", + "System Config": "Systemkonfigurasjon", + "System Tool": "Systemverktøy", + "Ticket Management": "Billettadministrasjon", + "User": "Bruker", + "User Management": "Brukeradministrasjon" +} diff --git a/apps/admin/locales/no-NO/order.json b/apps/admin/locales/no-NO/order.json new file mode 100644 index 0000000..5a284b0 --- /dev/null +++ b/apps/admin/locales/no-NO/order.json @@ -0,0 +1,37 @@ +{ + "amount": "Beløp", + "couponDiscount": "Kupongrabatt", + "discount": "Rabattbeløp", + "failed": "mislykket", + "feeAmount": "Gebyrbeløp", + "method": "Betalingsmetode", + "methods": { + "alipay_f2f": "Alipay (ansikt til ansikt)", + "balance": "Balanse", + "epay": "Enkel betaling", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "orderNumber": "Bestillingsnummer", + "status": { + "0": "Status", + "1": "Venter på betaling", + "2": "Betalt", + "3": "Kansellert", + "4": "Lukket", + "5": "Fullført" + }, + "subscribe": "Abonner", + "subscribePrice": "Abonnementspris", + "total": "Totalt", + "tradeNo": "Transaksjonsnummer", + "type": { + "0": "Type", + "1": "Ny kjøp", + "2": "Fornyelse", + "3": "Tilbakestill data", + "4": "Påfylling" + }, + "updateTime": "Oppdateringstid", + "user": "bruker" +} diff --git a/apps/admin/locales/no-NO/payment.json b/apps/admin/locales/no-NO/payment.json new file mode 100644 index 0000000..6cd813f --- /dev/null +++ b/apps/admin/locales/no-NO/payment.json @@ -0,0 +1,44 @@ +{ + "aliPay": "Betaling med Alipay", + "alipayf2f": { + "appId": "Alipay-applikasjons-ID", + "invoiceName": "Tilpasset produktnavn", + "invoiceNameDescription": "Vil vises på Alipay-fakturaen", + "privateKey": "Alipay privat nøkkel", + "publicKey": "Alipay offentlig nøkkel", + "sandbox": "Sandkassemodus", + "sandboxDescription": "Aktiver sandkassemodus for å teste betaling" + }, + "enable": "Aktiver", + "enableDescription": "Aktiver denne betalingsmetoden", + "epay": { + "key": "NØKKEL", + "pid": "PID", + "url": "URL" + }, + "feeMode": "Avgiftsmåte", + "feeModeDescription": "Gebyrmodus for ekstra avgifter", + "feeModeItems": ["Ingen gebyr", "Prosentandel", "Fast beløp", "Begge ovennevnte"], + "feePercent": "Prosentavgift (valgfritt)", + "feePercentDescription": "Legg til et gebyr på toppen av ordrebeløpet", + "fixedFee": "Fast gebyr (valgfritt)", + "fixedFeeDescription": "Legg til et fast gebyr i tillegg til ordrebeløpet", + "iconUrl": "Ikon URL (valgfritt)", + "iconUrlDescription": "Brukes for visning på frontend", + "inputPlaceholder": "Vennligst skriv inn", + "key": "NØKKEL", + "notifyUrl": "Tilpasset varslingsdomene (valgfritt)", + "notifyUrlDescription": "Gateway-varsler vil bli sendt til dette domenet", + "payForRecommendations": "Betal for anbefalinger", + "pid": "PID", + "saveSuccess": "Lagring vellykket", + "showName": "Vis navn", + "showNameDescription": "Brukes for visning på frontend", + "stripe": { + "publicKey": "OFFENTLIG NØKKEL", + "secretKey": "HEMMELIG NØKKEL", + "webhookSecret": "WEBHOOK SIGNATUR" + }, + "url": "URL", + "wechatPay": "WeChat-betaling" +} diff --git a/apps/admin/locales/no-NO/server.json b/apps/admin/locales/no-NO/server.json new file mode 100644 index 0000000..f66ae59 --- /dev/null +++ b/apps/admin/locales/no-NO/server.json @@ -0,0 +1,122 @@ +{ + "group": { + "actions": "Handlinger", + "cancel": "Avbryt", + "confirm": "Bekreft", + "confirmDelete": "Er du sikker på at du vil slette?", + "create": "Opprett", + "createNodeGroup": "Opprett nodegruppe", + "createdSuccessfully": "Opprettet vellykket", + "delete": "Slett", + "deleteWarning": "Data kan ikke gjenopprettes etter sletting, vær forsiktig.", + "deletedSuccessfully": "Slettet vellykket", + "description": "Beskrivelse", + "edit": "Rediger", + "editNodeGroup": "Rediger nodegruppe", + "form": { + "cancel": "Avbryt", + "confirm": "Bekreft", + "description": "Beskrivelse", + "name": "Navn" + }, + "name": "Navn", + "title": "Nodegruppeliste", + "updatedAt": "Oppdatert" + }, + "node": { + "abnormal": "Unormal", + "actions": "Handlinger", + "address": "Adresse", + "all": "Alle", + "cancel": "Avbryt", + "confirm": "Bekreft", + "confirmDelete": "Er du sikker på at du vil slette?", + "create": "Opprett", + "createNode": "Opprett node", + "createSuccess": "Opprettelse vellykket", + "delete": "Slett", + "deleteSuccess": "Sletting vellykket", + "deleteWarning": "Etter sletting kan data ikke gjenopprettes. Vennligst vær forsiktig.", + "disk": "Disk", + "edit": "Rediger", + "editNode": "Rediger node", + "enable": "Aktiver", + "form": { + "allowInsecure": "Tillat usikker", + "cancel": "Avbryt", + "confirm": "Bekreft", + "edit": "Rediger", + "editSecurity": "Rediger sikkerhetskonfigurasjon", + "enableRelay": "Aktiver relé", + "enableTLS": "Aktiver TLS", + "encryptionMethod": "Krypteringsmetode", + "flow": "Flytkontrollalgoritme", + "hopInterval": "Hoppintervall", + "hopPorts": "Hoppporter", + "hopPortsPlaceholder": "Flere porter separeres med komma", + "name": "Navn", + "nodeGroupId": "Nodegruppe-ID", + "obfsPassword": "Forvirringspassord", + "obfsPasswordPlaceholder": "La stå tomt for ingen forvirring", + "path": "Sti", + "pleaseSelect": "Vennligst velg", + "port": "Tjenesteport", + "protocol": "Protokoll", + "relayHost": "Reléadresse", + "relayPort": "Reléport", + "remarks": "Merknader", + "security": "Sikkerhet", + "securityConfig": "Sikkerhetskonfigurasjon", + "security_config": { + "fingerprint": "Fingeravtrykk", + "privateKey": "Privat nøkkel", + "privateKeyPlaceholder": "La stå tomt for automatisk generering", + "publicKey": "Offentlig nøkkel", + "publicKeyPlaceholder": "La stå tomt for automatisk generering", + "serverAddress": "Serveradresse", + "serverAddressPlaceholder": "REALITY-måladresse, bruker SNI som standard", + "serverName": "Servernavn (SNI)", + "serverNamePlaceholder": "REALITY kreves, må være konsistent med backend", + "serverPort": "Serverport", + "serverPortPlaceholder": "REALITY-målport, standard 443", + "shortId": "Kort ID", + "shortIdPlaceholder": "La stå tomt for automatisk generering", + "sni": "Servernavnindikasjon (SNI)" + }, + "selectEncryptionMethod": "Velg krypteringsmetode", + "selectNodeGroup": "Velg nodegruppe", + "selectProtocol": "Velg protokoll", + "serverAddr": "Serveradresse", + "serverName": "Tjenestenavn", + "speedLimit": "Hastighetsbegrensning", + "speedLimitPlaceholder": "Ingen begrensning", + "trafficRatio": "Trafikkhastighet", + "transport": "Transportprotokoll", + "transportConfig": "Transportprotokollkonfigurasjon", + "transportHost": "Transporttjenesteadresse", + "transportPath": "Transportsti", + "transportServerName": "Transporttjenestenavn" + }, + "lastUpdated": "Sist oppdatert", + "memory": "Minne", + "name": "Navn", + "node": "Node", + "nodeGroup": "Nodegruppe", + "normal": "Normal", + "onlineCount": "Antall online", + "onlineUsers": "Online brukere", + "rate": "Hastighet", + "relay": "Relé", + "serverAddr": "Serveradresse", + "speedLimit": "Hastighetsbegrensning", + "status": "Status", + "trafficRatio": "Trafikkhastighet", + "type": "Type", + "updateSuccess": "Oppdatering vellykket", + "updatedAt": "Oppdatert kl" + }, + "tabs": { + "node": "Node", + "nodeGroup": "Nodegruppe" + } +} diff --git a/apps/admin/locales/no-NO/subscribe.json b/apps/admin/locales/no-NO/subscribe.json new file mode 100644 index 0000000..db87949 --- /dev/null +++ b/apps/admin/locales/no-NO/subscribe.json @@ -0,0 +1,79 @@ +{ + "actions": "handlinger", + "cancel": "Avbryt", + "confirm": "Bekreft", + "confirmDelete": "Er du sikker på at du vil slette?", + "create": "Opprett", + "createSubscribe": "Opprett abonnement", + "createSuccess": "Opprettelse vellykket", + "delete": "slett", + "deleteSuccess": "Sletting vellykket", + "deleteWarning": "Data kan ikke gjenopprettes etter sletting, vennligst vær forsiktig.", + "deviceLimit": "Enheter/antall", + "edit": "rediger", + "editSubscribe": "Rediger abonnement", + "form": { + "cancel": "Avbryt", + "confirm": "Bekreft", + "description": "Beskrivelse", + "deviceLimit": "Enhetsbegrensning", + "discount": "Rabatt", + "discountDescription": "Sett rabatt basert på enhetspris", + "discountMonths": "Måneder", + "discountPercent": "Rabattprosent", + "discount_price": "Rabattert pris", + "duration": "Varighet (måneder)", + "inventory": "Lager", + "name": "Navn", + "noLimit": "Ubegrenset", + "quota": "Kjøpskvote", + "replacement": "Erstatningspris (per gang)", + "selectSubscribeGroup": "Vennligst velg abonnementsgruppe", + "server": "Tjeneste", + "serverGroup": "Tjenestegruppe", + "speedLimit": "Hastighetsbegrensning (Mbps)", + "subscribeGroup": "Abonnementsgruppe", + "traffic": "Trafikk", + "unit_price": "Pris per måned" + }, + "group": { + "actions": "Handlinger", + "cancel": "Avbryt", + "confirm": "Bekreft", + "confirmDelete": "Er du sikker på at du vil slette?", + "create": "Opprett", + "createSubscribeGroup": "Opprett ny abonnementsgruppe", + "createSuccess": "Opprettelse vellykket", + "delete": "Slett", + "deleteSuccess": "Sletting vellykket", + "deleteWarning": "Data kan ikke gjenopprettes etter sletting, vær forsiktig.", + "description": "Beskrivelse", + "edit": "Rediger", + "editSubscribeGroup": "Rediger abonnementsgruppe", + "form": { + "cancel": "Avbryt", + "confirm": "Bekreft", + "description": "Beskrivelse", + "name": "Navn" + }, + "name": "Navn", + "title": "Liste over abonnementsgrupper", + "updateSuccess": "Oppdatering vellykket", + "updatedAt": "Oppdatert" + }, + "inventory": "lager", + "name": "Navn", + "quota": "Kjøpsgrense/gang", + "replacement": "Tilbakestill pris/gang", + "sell": "Salg", + "show": "Vis på forsiden", + "subscribe": "Abonner", + "subscribeGroup": "Abonner på gruppe", + "tabs": { + "subscribe": "Abonner", + "subscribeGroup": "Abonner gruppe" + }, + "traffic": "trafikk", + "unitPrice": "Pris/måned", + "updateSuccess": "Oppdatering vellykket" +} diff --git a/apps/admin/locales/no-NO/system.json b/apps/admin/locales/no-NO/system.json new file mode 100644 index 0000000..d7c3d7f --- /dev/null +++ b/apps/admin/locales/no-NO/system.json @@ -0,0 +1,156 @@ +{ + "currency": { + "accessKey": "Nøkkel", + "accessKeyDescription": "https://exchangerate.host tilbyr gratis valutakurs-API-nøkkel", + "currencySymbol": "Valutasymbol", + "currencySymbolDescription": "Kun for visningsformål, endring vil påvirke alle valutaenheter i systemet", + "currencyUnit": "Valutaenhet", + "currencyUnitDescription": "Kun for visningsformål, endring vil påvirke alle valutaenheter i systemet", + "saveSuccess": "Lagring vellykket" + }, + "email": { + "expiration_email_template": "Utløpsvarselmal", + "expiration_email_templateDescription": "Variabelnavnene {after}.variabelnavn{before} i malen vil bli erstattet med faktiske data, sørg for å beholde disse variablene.", + "inputPlaceholder": "Vennligst skriv inn innhold...", + "maintenance_email_template": "Vedlikeholdsvarselmal", + "maintenance_email_templateDescription": "Variabelnavnene {after}.variabelnavn{before} i malen vil bli erstattet med faktiske data, sørg for å beholde disse variablene.", + "saveSuccess": "Konfigurasjonen er lagret.", + "sendFailure": "Test-e-posten ble ikke sendt, vennligst sjekk konfigurasjonen.", + "sendSuccess": "Test-e-posten ble sendt.", + "sendTestEmail": "Send test-e-post", + "sendTestEmailDescription": "Send en test-e-post for å verifisere om konfigurasjonen er korrekt.", + "senderAddress": "Avsenderadresse", + "senderAddressDescription": "Standard e-postadresse som brukes til å sende e-poster.", + "smtpAccount": "SMTP-konto", + "smtpAccountDescription": "E-postkontoen som brukes for autentisering.", + "smtpEncryptionMethod": "SMTP-krypteringsmetode", + "smtpEncryptionMethodDescription": "Velg om du vil aktivere SSL/TLS-kryptering.", + "smtpPassword": "SMTP-passord", + "smtpPasswordDescription": "Passordet for denne SMTP-kontoen.", + "smtpServerAddress": "SMTP-serveradresse", + "smtpServerAddressDescription": "Spesifiser serveradressen som brukes til å sende e-poster.", + "smtpServerPort": "SMTP-serverport", + "smtpServerPortDescription": "Spesifiser portnummeret som brukes til å koble til SMTP-serveren.", + "verify_email_template": "Verifiseringsmal for e-post", + "verify_email_templateDescription": "Variabelnavnene {after}.variabelnavn{before} i malen vil bli erstattet med faktiske data, sørg for å beholde disse variablene." + }, + "invite": { + "commissionFirstTimeOnly": "Kun kommisjon ved første kjøp", + "commissionFirstTimeOnlyDescription": "Når aktivert, genereres kommisjon kun ved den første betalingen fra den inviterte. Du kan konfigurere individuelle brukere i brukerstyring", + "enableForcedInvite": "Aktiver tvungen invitasjon", + "enableForcedInviteDescription": "Når aktivert, kan kun inviterte brukere registrere seg", + "inputPlaceholder": "Vennligst skriv inn", + "inviteCommissionPercentage": "Invitasjonskommisjon i prosent", + "inviteCommissionPercentageDescription": "Standard global kommisjonsfordelingsprosent, du kan konfigurere individuelle prosenter i brukerstyring", + "saveSuccess": "Lagret vellykket" + }, + "node": { + "communicationKey": "Kommunikasjonsnøkkel", + "communicationKeyDescription": "Nøkkelen for kommunikasjon mellom noder, for å sikre at data ikke blir avlyttet av andre", + "inputPlaceholder": "Vennligst skriv inn", + "nodePullInterval": "Node hentingsintervall", + "nodePullIntervalDescription": "Frekvensen (i sekunder) som noden henter data fra panelet", + "nodePushInterval": "Node push-intervall", + "nodePushIntervalDescription": "Frekvensen som noden sender data til panelet", + "saveSuccess": "Lagring vellykket" + }, + "register": { + "emailSuffixWhitelist": "E-post suffiks hviteliste", + "emailSuffixWhitelistDescription": "Når aktivert, kan kun e-poster med suffikser fra listen registrere seg", + "emailVerification": "E-postverifisering", + "emailVerificationDescription": "Når aktivert, må brukere verifisere e-posten sin", + "ipRegistrationLimit": "IP-registreringsbegrensning", + "ipRegistrationLimitDescription": "Når aktivert, vil IP-er som oppfyller regelkravene bli begrenset fra registrering. Vær oppmerksom på at IP-bestemmelse kan forårsake problemer på grunn av CDN eller frontend-proxy", + "penaltyTime": "Straffetid (minutter)", + "penaltyTimeDescription": "Brukere må vente til straffetiden er over før de kan registrere seg igjen", + "registrationLimitCount": "Registreringsbegrensning antall", + "registrationLimitCountDescription": "Aktiver straff når registreringsbegrensningen er nådd", + "saveSuccess": "Lagret vellykket", + "stopNewUserRegistration": "Stopp ny brukerregistrering", + "stopNewUserRegistrationDescription": "Når aktivert, kan ingen registrere seg", + "trialRegistration": "Prøveperiode registrering", + "trialRegistrationDescription": "Aktiver prøveperiode registrering, vennligst endre prøvepakke og varighet først", + "whitelistSuffixes": "Hviteliste suffikser", + "whitelistSuffixesDescription": "Brukes for e-postverifisering ved registrering, ett per linje", + "whitelistSuffixesPlaceholder": "Vennligst skriv inn e-post suffiks, ett per linje" + }, + "site": { + "logo": "LOGO", + "logoDescription": "Brukes til å vise hvor LOGO skal vises", + "logoPlaceholder": "Vennligst skriv inn URL-adressen til LOGO, ikke avslutt med '/'", + "saveSuccess": "Lagring vellykket", + "siteDesc": "Nettstedbeskrivelse", + "siteDescDescription": "Brukes til å vise hvor nettstedbeskrivelsen skal vises", + "siteDescPlaceholder": "Vennligst skriv inn nettstedbeskrivelsen", + "siteDomain": "Nettsteddomene", + "siteDomainDescription": "Domenenavnet til det nåværende nettstedet, for eksempel brukt i e-post", + "siteDomainPlaceholder": "Vennligst skriv inn domenenavnet, flere domener skal være på hver sin linje", + "siteName": "Nettstednavn", + "siteNameDescription": "Brukes til å vise hvor nettstednavnet skal vises", + "siteNamePlaceholder": "Vennligst skriv inn nettstednavnet" + }, + "subscription": { + "add": "Legg til", + "app": "App", + "appDescription": "Konfigurer nedlastingsadressen og importreglene for appen. Husk å lagre etter endringer", + "appDownloadURL": "App-nedlastingsadresse", + "appIcon": "App-ikon", + "appName": "App-navn", + "delete": "Slett", + "reset": "Tilbakestill", + "save": "Lagre", + "saveSuccess": "Lagret vellykket", + "singleSubscriptionMode": "Enkeltabonnementsmodus", + "singleSubscriptionModeDescription": "Når aktivert, vil alle brukeres pakker bli konvertert til saldo", + "subscriptionDomain": "Abonnementsdomene", + "subscriptionDomainDescription": "Brukes for abonnement. Hvis tom, brukes nettstedets domene", + "subscriptionDomainPlaceholder": "Vennligst skriv inn abonnementsdomenet, flere domener skal være ett per linje", + "subscriptionPath": "Abonnementssti", + "subscriptionPathDescription": "Brukes for abonnement. Husk å starte systemet på nytt etter endringer for å sikre optimal ytelse", + "subscriptionPathPlaceholder": "Vennligst skriv inn", + "subscriptionProtocol": "Abonnementsprotokoll", + "wildcardResolution": "Jokertegnoppløsning", + "wildcardResolutionDescription": "Brukes for abonnement" + }, + "tabs": { + "currency": "Valuta", + "email": "E-post", + "invite": "Invitasjon", + "node": "Node", + "register": "Registrer", + "site": "Nettsted", + "subscription": "Abonnement", + "telegram": "Telegram", + "tos": "Vilkår for bruk", + "verify": "Verifiser" + }, + "telegram": { + "botToken": "Bot-token", + "botTokenDescription": "Vennligst skriv inn token gitt av Botfather", + "enableBotNotifications": "Aktiver bot-varsler", + "enableBotNotificationsDescription": "Når aktivert, vil boten sende grunnleggende varsler til administratorer og brukere som har koblet til Telegram", + "groupURL": "Gruppe-URL", + "groupURLDescription": "Når fylt ut, vil den vises på brukersiden eller brukes der det er nødvendig", + "inputPlaceholderBotToken": "0000000000:xxxxxxxxx_xxxxxxxxxxxxxxx", + "inputPlaceholderGroupURL": "https://t.me/xxxxxx", + "saveSuccess": "Lagret vellykket" + }, + "tos": { + "saveSuccess": "Lagring vellykket", + "title": "Tjenestevilkår" + }, + "verify": { + "inputPlaceholder": "Vennligst skriv inn", + "loginVerificationCode": "Innloggingsverifiseringskode", + "loginVerificationCodeDescription": "Menneskelig verifisering ved innlogging", + "registrationVerificationCode": "Registreringsverifiseringskode", + "registrationVerificationCodeDescription": "Menneskelig verifisering ved registrering", + "resetPasswordVerificationCode": "Tilbakestill passord verifiseringskode", + "resetPasswordVerificationCodeDescription": "Menneskelig verifisering ved tilbakestilling av passord", + "saveSuccess": "Lagring vellykket", + "turnstileSecret": "Turnstile hemmelighet", + "turnstileSecretDescription": "Turnstile hemmelighet levert av Cloudflare", + "turnstileSiteKey": "Turnstile nettstednøkkel", + "turnstileSiteKeyDescription": "Turnstile nettstednøkkel levert av Cloudflare" + } +} diff --git a/apps/admin/locales/no-NO/ticket.json b/apps/admin/locales/no-NO/ticket.json new file mode 100644 index 0000000..fe5d01a --- /dev/null +++ b/apps/admin/locales/no-NO/ticket.json @@ -0,0 +1,19 @@ +{ + "actions": "handlinger", + "cancel": "Avbryt", + "check": "Sjekk", + "close": "Lukk", + "closeSuccess": "Lukking vellykket", + "closeWarning": "Når du lukker, vil det ikke være mulig å behandle denne arbeidsordren. Vennligst vær forsiktig.", + "confirm": "Bekreft", + "confirmClose": "Er du sikker på at du vil lukke?", + "createdAt": "OpprettetTidspunkt", + "inputPlaceholder": "Vennligst skriv inn spørsmålet ditt, så svarer vi så snart som mulig.", + "open": "åpne", + "reply": "svar", + "status": ["Status", "Å følge opp", "Å svare", "Behandlet", "Lukket"], + "ticketList": "Billettliste", + "title": "Tittel", + "updatedAt": "Oppdatert", + "user": "bruker" +} diff --git a/apps/admin/locales/no-NO/tool.json b/apps/admin/locales/no-NO/tool.json new file mode 100644 index 0000000..ee992bb --- /dev/null +++ b/apps/admin/locales/no-NO/tool.json @@ -0,0 +1,26 @@ +{ + "caller": "Innringer", + "cancel": "Avbryt", + "confirmReboot": "Bekreft omstart", + "confirmSystemReboot": "Bekreft systemomstart", + "confirmSystemUpgrade": "Bekreft systemoppgradering", + "confirmUpgrade": "Bekreft oppgradering", + "currentVersion": "Nåværende systemversjon:", + "errors": "Feil", + "ip": "IP", + "lastUpdated": "Sist oppdatert:", + "none": "Ingen", + "query": "Forespørsel", + "rebootDescription": "Er du sikker på at du vil starte systemet på nytt? Denne handlingen vil føre til et kort avbrudd i tjenesten.", + "rebooting": "Starter systemet på nytt...", + "refreshLogs": "Oppdater logger", + "request": "Forespørsel", + "status": "Status", + "systemLogs": "Systemlogger", + "systemReboot": "System omstart", + "systemServices": "Systemtjenester", + "systemUpgrade": "Systemoppgradering", + "upgradeDescription": "Er du sikker på at du vil utføre en systemoppgradering? Denne handlingen kan ta noen minutter, og systemet kan være utilgjengelig i løpet av denne tiden.", + "userAgent": "Brukeragent", + "viewLogsAndManage": "Se systemlogger, utfør systemoppgraderinger og omstart" +} diff --git a/apps/admin/locales/no-NO/user.json b/apps/admin/locales/no-NO/user.json new file mode 100644 index 0000000..00e6129 --- /dev/null +++ b/apps/admin/locales/no-NO/user.json @@ -0,0 +1,38 @@ +{ + "actions": "handlinger", + "balance": "Balanse", + "cancel": "Avbryt", + "confirm": "bekreft", + "confirmDelete": "Er du sikker på at du vil slette?", + "create": "opprett", + "createSuccess": "Opprettelse vellykket", + "createUser": "Opprett bruker", + "createdAt": "Registreringstidspunkt", + "delete": "slett", + "deleteDescription": "Data kan ikke gjenopprettes etter sletting, vær forsiktig.", + "deleteSuccess": "Sletting vellykket", + "edit": "rediger", + "editUser": "Rediger bruker", + "email": "e-post", + "enable": "Aktiver", + "form": { + "balance": "Balanse", + "balancePlaceholder": "Balanse", + "cancel": "Avbryt", + "confirm": "Bekreft", + "invalidEmailFormat": "Ugyldig e-postformat", + "inviteCode": "Invitasjonskode", + "inviteCodePlaceholder": "Vennligst skriv inn invitasjonskode (la stå tom for automatisk generering)", + "manager": "Administrator", + "password": "Passord", + "passwordPlaceholder": "Vennligst skriv inn nytt passord (kan stå tomt)", + "refererId": "Henvisnings-ID", + "refererIdPlaceholder": "Vennligst skriv inn henvisnings-ID", + "userEmail": "Brukerens e-post", + "userEmailPlaceholder": "Vennligst skriv inn brukerens e-post" + }, + "referer": "Henviser", + "updateSuccess": "Oppdatering vellykket", + "userList": "Brukerliste", + "userName": "Brukerens e-post" +} diff --git a/apps/admin/locales/pl-PL/announcement.json b/apps/admin/locales/pl-PL/announcement.json new file mode 100644 index 0000000..e8e1cd6 --- /dev/null +++ b/apps/admin/locales/pl-PL/announcement.json @@ -0,0 +1,30 @@ +{ + "actions": "działania", + "announcementList": "Lista ogłoszeń", + "cancel": "Anuluj", + "confirm": "Potwierdź", + "confirmDelete": "Czy na pewno chcesz usunąć?", + "content": "zawartość", + "create": "Utwórz", + "createAnnouncement": "Utwórz ogłoszenie", + "createSuccess": "Utworzono pomyślnie", + "delete": "usuń", + "deleteDescription": "Po usunięciu dane nie będą mogły zostać odzyskane. Proszę postępować ostrożnie.", + "deleteSuccess": "Usunięto pomyślnie", + "edit": "edytuj", + "editAnnouncement": "Edytuj ogłoszenie", + "enable": "Włącz", + "form": { + "cancel": "Anuluj", + "confirm": "Potwierdź", + "content": "Treść", + "contentPlaceholder": "Wprowadź treść ogłoszenia (obsługa Markdown)", + "title": "Tytuł", + "titlePlaceholder": "Wprowadź" + }, + "hide": "ukryj", + "show": "Pokaż", + "title": "Tytuł", + "updateSuccess": "Aktualizacja zakończona pomyślnie", + "updatedAt": "Zaktualizowano" +} diff --git a/apps/admin/locales/pl-PL/auth.json b/apps/admin/locales/pl-PL/auth.json new file mode 100644 index 0000000..b9cc4a8 --- /dev/null +++ b/apps/admin/locales/pl-PL/auth.json @@ -0,0 +1,39 @@ +{ + "check": { + "checking": "Sprawdzanie...", + "continue": "Kontynuuj", + "description": "Wprowadź swój adres e-mail, aby kontynuować logowanie lub rejestrację.", + "email": "Proszę wprowadzić prawidłowy adres e-mail.", + "title": "Zaloguj się/Zarejestruj się", + "whitelist": "Domena e-mail nie znajduje się na dozwolonej białej liście." + }, + "login": { + "description": "Proszę wprowadzić dane konta, aby się zalogować.", + "forgotPassword": "Zapomniałeś hasła?", + "success": "Zalogowano pomyślnie!", + "switchAccount": "Zarejestruj się/Zmień konto", + "title": "Logowanie" + }, + "logout": "Wyloguj się", + "orWithEmail": "lub użyj e-maila", + "register": { + "description": "Utwórz nowe konto, wypełnij swoje dane, aby się zarejestrować.", + "existingAccount": "Masz już konto?", + "get": "Pobierz", + "invite": "Kod zaproszenia", + "message": "#### Szanowny Użytkowniku,\n\nDziękujemy za Twoje zainteresowanie i wsparcie. Ze względu na zmianę strategii operacyjnej serwisu, zamknęliśmy funkcję rejestracji nowych użytkowników. W tym czasie korzystanie z serwisu przez obecnych użytkowników nie będzie w żaden sposób ograniczone.\n\nDążymy do zapewnienia lepszej obsługi i doświadczeń, dlatego w okresie zamknięcia rejestracji przeprowadzimy kompleksową optymalizację systemu i aktualizację funkcji. W przyszłości powitamy Cię z lepszą jakością treści i usług.\n\nŚledź naszą stronę internetową i platformy społecznościowe, aby uzyskać najnowsze informacje i powiadomienia. Dziękujemy za zrozumienie i wsparcie.\n\nW razie jakichkolwiek pytań lub potrzeby pomocy, skontaktuj się z naszym zespołem obsługi klienta.\n\n**Jeszcze raz dziękujemy za Twoje wsparcie i zrozumienie.**", + "passwordMismatch": "Wprowadzone hasła nie są zgodne", + "success": "Rejestracja zakończona sukcesem, automatycznie zalogowano!", + "switchToLogin": "Zaloguj się/Zresetuj e-mail", + "title": "Rejestracja" + }, + "reset": { + "description": "Wprowadź swój adres e-mail, aby zresetować hasło.", + "existingAccount": "Masz już konto?", + "get": "Uzyskaj", + "success": "Hasło zostało pomyślnie zresetowane, automatycznie przełączono na logowanie!", + "switchToLogin": "Zaloguj się/Zarejestruj się", + "title": "Zresetuj hasło" + }, + "tos": "Warunki usługi" +} diff --git a/apps/admin/locales/pl-PL/common.json b/apps/admin/locales/pl-PL/common.json new file mode 100644 index 0000000..299e642 --- /dev/null +++ b/apps/admin/locales/pl-PL/common.json @@ -0,0 +1,60 @@ +{ + "billing": { + "description": "Wsparcie finansowe pomaga PPanel w dalszym publikowaniu aktualizacji!", + "title": "Sponsorzy" + }, + "empty": [ + "Wyobraź sobie, że to miejsce jest pełne wspaniałych treści! Na razie musisz polegać na wyobraźni…", + "Ten obszar tajemniczo zniknął, przywołujemy go z powrotem!", + "Ups, nic się nie wydarzyło… możesz sam coś dodać!", + "To jak odkrycie, że na koncercie nie ma nikogo na scenie… może chcesz wystąpić?", + "Znalazłeś pustą krainę! Może zbudujesz tu dom?", + "Na razie nic tu nie ma, ale kreatywność zaczyna się właśnie tutaj!", + "Nic tu nie ma… ale nie martw się, to dopiero początek!", + "Tutaj miała być wielka niespodzianka, ale uciekła!", + "Na razie nic tu nie ma, jakby szafka ze smakołykami była pusta.", + "To miejsce czeka na swojego bohatera!" + ], + "request": { + "10001": "Zapytanie nie powiodło się, spróbuj ponownie później lub sprawdź swoje warunki.", + "10002": "Aktualizacja nie powiodła się, spróbuj ponownie później.", + "10003": "Nie można tymczasowo wykonać operacji wstawiania, spróbuj ponownie później.", + "10004": "Operacja usuwania nie powiodła się, spróbuj ponownie później.", + "20001": "Informacje o użytkowniku już istnieją, zmień informacje i spróbuj ponownie.", + "20002": "Nie znaleziono użytkownika, sprawdź informacje i spróbuj ponownie.", + "20003": "Wprowadzone hasło jest nieprawidłowe, wprowadź ponownie.", + "20004": "Użytkownik został zablokowany, w razie wątpliwości skontaktuj się z obsługą klienta.", + "20005": "Niewystarczające środki, doładuj konto i spróbuj ponownie.", + "20006": "Funkcja rejestracji jest tymczasowo niedostępna, spróbuj ponownie później.", + "30001": "Węzeł już istnieje, nie dodawaj go ponownie.", + "30002": "Nie znaleziono odpowiedniego węzła, sprawdź i spróbuj ponownie.", + "30003": "Grupa już istnieje, spróbuj użyć innej nazwy.", + "30004": "Nie znaleziono grupy, sprawdź informacje i spróbuj ponownie.", + "30005": "Grupa zawiera jeszcze treści, opróżnij ją i spróbuj ponownie.", + "400": "Parametry żądania są nieprawidłowe, sprawdź i prześlij ponownie.", + "40002": "Nie znaleziono ważnego tokena, zaloguj się i spróbuj ponownie.", + "40003": "Obecny token jest nieważny, uzyskaj nowy i spróbuj ponownie.", + "40004": "Token wygasł, zaloguj się ponownie.", + "40005": "Nie masz uprawnień dostępu, w razie wątpliwości skontaktuj się z administratorem.", + "401": "Żądanie jest zbyt częste, spróbuj ponownie później.", + "500": "Serwer napotkał pewne problemy, spróbuj ponownie później.", + "50001": "Nie znaleziono informacji o kuponie, sprawdź i spróbuj ponownie.", + "50002": "Kupon został już użyty, nie można go użyć ponownie.", + "60001": "Subskrypcja wygasła, odnow ją i użyj ponownie.", + "60002": "Nie można tymczasowo użyć tej subskrypcji, spróbuj ponownie później.", + "70001": "Kod weryfikacyjny jest nieprawidłowy, wprowadź ponownie.", + "80001": "Zadanie nie zostało pomyślnie dodane do kolejki, spróbuj ponownie później.", + "90001": "Wyłącz tryb DEBUG i spróbuj ponownie.", + "undefined": "Wystąpił błąd systemu, spróbuj ponownie później." + }, + "table": { + "actions": "Działania", + "asc": "Rosnąco", + "desc": "Malejąco", + "hide": "Ukryj", + "pageInfo": "Strona {current} z {total}", + "rowsPerPage": "Wiersze na stronę", + "selectedItems": "Wybrano {total} wierszy" + }, + "unlimited": "nieograniczony" +} diff --git a/apps/admin/locales/pl-PL/coupon.json b/apps/admin/locales/pl-PL/coupon.json new file mode 100644 index 0000000..3f022e4 --- /dev/null +++ b/apps/admin/locales/pl-PL/coupon.json @@ -0,0 +1,50 @@ +{ + "actions": "działania", + "amount": "Kwota", + "cancel": "Anuluj", + "code": "kod", + "confirm": "Potwierdź", + "confirmDelete": "Czy na pewno chcesz usunąć?", + "count": "ilość", + "couponList": "Lista kuponów", + "create": "Utwórz", + "createCoupon": "Utwórz kupon", + "createSuccess": "Utworzono pomyślnie", + "delete": "usuń", + "deleteSuccess": "Usunięto pomyślnie", + "deleteWarning": "Po usunięciu danych nie można ich odzyskać. Proszę postępować ostrożnie.", + "discount": "rabat", + "edit": "edytuj", + "editCoupon": "Edytuj kupon", + "enable": "Włącz", + "form": { + "amountDiscount": "Kwota rabatu", + "cancel": "Anuluj", + "confirm": "Potwierdź", + "count": "Maksymalna liczba użyć", + "countPlaceholder": "Maksymalna liczba użyć (pozostaw puste dla braku ograniczeń)", + "customCouponCode": "Niestandardowy kod kuponu", + "customCouponCodePlaceholder": "Niestandardowy kod kuponu (pozostaw puste, aby wygenerować automatycznie)", + "enterCouponName": "Wprowadź nazwę kuponu", + "enterValue": "Wprowadź wartość", + "expireTime": "Czas wygaśnięcia", + "name": "Nazwa", + "percentageDiscount": "Rabat procentowy", + "selectServer": "Wybierz subskrypcję", + "selectTime": "Wybierz czas", + "specifiedServer": "Określona subskrypcja", + "startTime": "Czas rozpoczęcia", + "type": "Typ kuponu", + "userLimit": "Maksymalna liczba użyć na użytkownika", + "userLimitPlaceholder": "Maksymalna liczba użyć na użytkownika (pozostaw puste dla braku ograniczeń)" + }, + "name": "nazwa", + "percentage": "procent", + "remainingTimes": "Pozostało", + "subscribe": "Subskrybuj", + "type": "typ", + "unlimited": "nieograniczony", + "updateSuccess": "Aktualizacja zakończona pomyślnie", + "usedTimes": "Liczba użyć", + "validityPeriod": "Okres ważności" +} diff --git a/apps/admin/locales/pl-PL/document.json b/apps/admin/locales/pl-PL/document.json new file mode 100644 index 0000000..740586b --- /dev/null +++ b/apps/admin/locales/pl-PL/document.json @@ -0,0 +1,29 @@ +{ + "DocumentList": "Lista dokumentów", + "actions": "działania", + "cancel": "Anuluj", + "confirm": "Potwierdź", + "confirmDelete": "Czy na pewno chcesz usunąć?", + "create": "Utwórz", + "createDocument": "Utwórz dokument", + "createSuccess": "Utworzono pomyślnie", + "delete": "usuń", + "deleteDescription": "Po usunięciu danych nie można ich odzyskać. Proszę postępować ostrożnie.", + "deleteSuccess": "Usunięto pomyślnie", + "edit": "edytuj", + "editDocument": "Edytuj dokument", + "form": { + "cancel": "Anuluj", + "confirm": "Potwierdź", + "content": "Treść", + "tags": "Kategorie", + "tagsPlaceholder": "Proszę użyć klawisza Enter lub przecinka (,) do oddzielenia wielu kategorii", + "title": "Tytuł", + "titlePlaceholder": "Proszę wprowadzić" + }, + "show": "pokaż", + "tags": "Kategorie", + "title": "Tytuł", + "updateSuccess": "Aktualizacja zakończona pomyślnie", + "updatedAt": "Zaktualizowano" +} diff --git a/apps/admin/locales/pl-PL/index.json b/apps/admin/locales/pl-PL/index.json new file mode 100644 index 0000000..7acfd54 --- /dev/null +++ b/apps/admin/locales/pl-PL/index.json @@ -0,0 +1,29 @@ +{ + "email": "e-mail", + "month": "Ten miesiąc", + "monthDownloadTraffic": "Miesięczny ruch pobierania", + "monthUploadTraffic": "Miesięczny przesył danych", + "newPurchase": "Nowy zakup", + "nodeTraffic": "Ruch węzła", + "nodes": "węzły", + "offlineNodeCount": "Liczba węzłów offline", + "onlineIPCount": "Liczba IP online", + "onlineNodeCount": "Liczba węzłów online", + "pendingTickets": "Oczekujące zgłoszenia", + "register": "Rejestracja", + "repurchase": "ponowny zakup", + "revenueTitle": "Statystyki dochodów", + "selectTypePlaceholder": "Wybierz typ", + "statisticsTitle": "Statystyki", + "today": "Dziś", + "todayDownloadTraffic": "Dzisiejszy ruch pobierania", + "todayUploadTraffic": "Dzisiejszy przesył danych", + "total": "Razem", + "totalIncome": "Całkowity dochód", + "trafficRank": "Ranking ruchu", + "type": "typ", + "userTitle": "Statystyki użytkownika", + "userTraffic": "Ruch użytkowników", + "users": "użytkownicy", + "yesterday": "wczoraj" +} diff --git a/apps/admin/locales/pl-PL/language.json b/apps/admin/locales/pl-PL/language.json new file mode 100644 index 0000000..e6498e3 --- /dev/null +++ b/apps/admin/locales/pl-PL/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "język czeski", + "de-DE": "niemiecki", + "en-US": "angielski", + "es-ES": "hiszpański", + "es-MX": "hiszpański (Meksyk)", + "fi-FI": "fiński", + "fr-FR": "francuski", + "hi-IN": "hindi", + "hu-HU": "język węgierski", + "ja-JP": "język japoński", + "ko-KR": "Koreański", + "no-NO": "norweski", + "pl-PL": "Polski", + "pt-BR": "portugalski (Brazylia)", + "ro-RO": "rumuński", + "ru-RU": "Rosyjski", + "th-TH": "tajski", + "tr-TR": "turecki", + "uk-UA": "ukraiński", + "vi-VN": "język wietnamski", + "zh-CN": "chiński (uproszczony)", + "zh-TW": "chiński (tradycyjny)" +} diff --git a/apps/admin/locales/pl-PL/menu.json b/apps/admin/locales/pl-PL/menu.json new file mode 100644 index 0000000..48b0a4c --- /dev/null +++ b/apps/admin/locales/pl-PL/menu.json @@ -0,0 +1,18 @@ +{ + "Announcement Management": "Zarządzanie ogłoszeniami", + "Coupon Management": "Zarządzanie kuponami", + "Dashboard": "Pulpit", + "Document Management": "Zarządzanie dokumentami", + "Finance": "Finanse", + "Order Management": "Zarządzanie zamówieniami", + "Payment Config": "Konfiguracja płatności", + "Server": "Serwer", + "Server Management": "Zarządzanie serwerem", + "Settings": "Ustawienia", + "Subscribe Management": "Zarządzanie subskrypcjami", + "System Config": "Konfiguracja systemu", + "System Tool": "Narzędzie systemowe", + "Ticket Management": "Zarządzanie zgłoszeniami", + "User": "Użytkownik", + "User Management": "Zarządzanie użytkownikami" +} diff --git a/apps/admin/locales/pl-PL/order.json b/apps/admin/locales/pl-PL/order.json new file mode 100644 index 0000000..2433047 --- /dev/null +++ b/apps/admin/locales/pl-PL/order.json @@ -0,0 +1,37 @@ +{ + "amount": "Kwota", + "couponDiscount": "Zniżka kuponowa", + "discount": "Kwota rabatu", + "failed": "niepowodzenie", + "feeAmount": "Opłata", + "method": "Metoda płatności", + "methods": { + "alipay_f2f": "Alipay (twarzą w twarz)", + "balance": "Saldo", + "epay": "Epay", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "orderNumber": "Numer zamówienia", + "status": { + "0": "status", + "1": "Oczekuje na płatność", + "2": "Opłacone", + "3": "Anulowane", + "4": "Zamknięte", + "5": "Zakończone" + }, + "subscribe": "Subskrybuj", + "subscribePrice": "Cena subskrypcji", + "total": "Razem", + "tradeNo": "Numer transakcji", + "type": { + "0": "Typ", + "1": "Nowy zakup", + "2": "Przedłużenie", + "3": "Resetowanie danych", + "4": "Doładowanie" + }, + "updateTime": "Czas aktualizacji", + "user": "użytkownik" +} diff --git a/apps/admin/locales/pl-PL/payment.json b/apps/admin/locales/pl-PL/payment.json new file mode 100644 index 0000000..de8808c --- /dev/null +++ b/apps/admin/locales/pl-PL/payment.json @@ -0,0 +1,44 @@ +{ + "aliPay": "Płatność Alipay", + "alipayf2f": { + "appId": "ID aplikacji Alipay", + "invoiceName": "Niestandardowa nazwa produktu", + "invoiceNameDescription": "Będzie wyświetlana na rachunku Alipay", + "privateKey": "Klucz prywatny Alipay", + "publicKey": "Klucz publiczny Alipay", + "sandbox": "Tryb piaskownicy", + "sandboxDescription": "Włącz tryb piaskownicy, aby przetestować płatności" + }, + "enable": "Włącz", + "enableDescription": "Włącz tę metodę płatności", + "epay": { + "key": "KLUCZ", + "pid": "PID", + "url": "URL" + }, + "feeMode": "Sposób naliczania opłat", + "feeModeDescription": "Sposób naliczania dodatkowej opłaty", + "feeModeItems": ["Bez opłaty", "Procent", "Stała kwota", "Oba powyższe"], + "feePercent": "Procentowa opłata (opcjonalnie)", + "feePercentDescription": "Dodaj opłatę do kwoty zamówienia", + "fixedFee": "Stała opłata (opcjonalnie)", + "fixedFeeDescription": "Dodaj stałą opłatę do kwoty zamówienia", + "iconUrl": "URL ikony (opcjonalnie)", + "iconUrlDescription": "Używane do wyświetlania na froncie", + "inputPlaceholder": "Wprowadź tekst", + "key": "KLUCZ", + "notifyUrl": "Niestandardowa domena powiadomień (opcjonalnie)", + "notifyUrlDescription": "Powiadomienie bramki zostanie wysłane na tę domenę", + "payForRecommendations": "Zapłać za rekomendacje", + "pid": "PID", + "saveSuccess": "Zapisano pomyślnie", + "showName": "Pokaż nazwę", + "showNameDescription": "Używane do wyświetlania na froncie", + "stripe": { + "publicKey": "KLUCZ PUBLICZNY", + "secretKey": "KLUCZ TAJNY", + "webhookSecret": "PODPIS KLUCZA WEBHOOK" + }, + "url": "URL", + "wechatPay": "WeChat Pay" +} diff --git a/apps/admin/locales/pl-PL/server.json b/apps/admin/locales/pl-PL/server.json new file mode 100644 index 0000000..617fe1d --- /dev/null +++ b/apps/admin/locales/pl-PL/server.json @@ -0,0 +1,122 @@ +{ + "group": { + "actions": "Operacje", + "cancel": "Anuluj", + "confirm": "Potwierdź", + "confirmDelete": "Czy na pewno chcesz usunąć?", + "create": "Utwórz", + "createNodeGroup": "Utwórz grupę węzłów", + "createdSuccessfully": "Utworzono pomyślnie", + "delete": "Usuń", + "deleteWarning": "Po usunięciu dane nie będą mogły zostać odzyskane, proszę postępować ostrożnie.", + "deletedSuccessfully": "Usunięto pomyślnie", + "description": "Opis", + "edit": "Edytuj", + "editNodeGroup": "Edytuj grupę węzłów", + "form": { + "cancel": "Anuluj", + "confirm": "Potwierdź", + "description": "Opis", + "name": "Nazwa" + }, + "name": "Nazwa", + "title": "Lista grup węzłów", + "updatedAt": "Czas aktualizacji" + }, + "node": { + "abnormal": "Nieprawidłowy", + "actions": "Działania", + "address": "Adres", + "all": "Wszystko", + "cancel": "Anuluj", + "confirm": "Potwierdź", + "confirmDelete": "Czy na pewno chcesz usunąć?", + "create": "Utwórz", + "createNode": "Utwórz węzeł", + "createSuccess": "Utworzono pomyślnie", + "delete": "Usuń", + "deleteSuccess": "Usunięto pomyślnie", + "deleteWarning": "Po usunięciu dane nie będą mogły zostać odzyskane. Proszę postępować ostrożnie.", + "disk": "Dysk", + "edit": "Edytuj", + "editNode": "Edytuj węzeł", + "enable": "Włącz", + "form": { + "allowInsecure": "Zezwól na niebezpieczne", + "cancel": "Anuluj", + "confirm": "Potwierdź", + "edit": "Edytuj", + "editSecurity": "Edytuj konfigurację bezpieczeństwa", + "enableRelay": "Włącz przekaźnik", + "enableTLS": "Włącz TLS", + "encryptionMethod": "Metoda szyfrowania", + "flow": "Algorytm kontroli przepływu", + "hopInterval": "Interwał skoku", + "hopPorts": "Porty skoku", + "hopPortsPlaceholder": "Wiele portów oddziel przecinkami", + "name": "Nazwa", + "nodeGroupId": "ID grupy węzłów", + "obfsPassword": "Hasło zaciemnienia", + "obfsPasswordPlaceholder": "Pozostaw puste, aby nie zaciemniać", + "path": "Ścieżka", + "pleaseSelect": "Proszę wybrać", + "port": "Port serwera", + "protocol": "Protokół", + "relayHost": "Adres przekaźnika", + "relayPort": "Port przekaźnika", + "remarks": "Uwagi", + "security": "Bezpieczeństwo", + "securityConfig": "Konfiguracja bezpieczeństwa", + "security_config": { + "fingerprint": "Odcisk palca", + "privateKey": "Klucz prywatny", + "privateKeyPlaceholder": "Pozostaw puste, aby wygenerować automatycznie", + "publicKey": "Klucz publiczny", + "publicKeyPlaceholder": "Pozostaw puste, aby wygenerować automatycznie", + "serverAddress": "Adres serwera", + "serverAddressPlaceholder": "Adres docelowy REALITY, domyślnie używa SNI", + "serverName": "Nazwa serwera (SNI)", + "serverNamePlaceholder": "Wymagane dla REALITY, zgodne z backendem", + "serverPort": "Port serwera", + "serverPortPlaceholder": "Port docelowy REALITY, domyślnie 443", + "shortId": "Krótki Id", + "shortIdPlaceholder": "Pozostaw puste, aby wygenerować automatycznie", + "sni": "Wskazanie nazwy serwera (SNI)" + }, + "selectEncryptionMethod": "Wybierz metodę szyfrowania", + "selectNodeGroup": "Wybierz grupę węzłów", + "selectProtocol": "Wybierz protokół", + "serverAddr": "Adres serwera", + "serverName": "Nazwa usługi", + "speedLimit": "Ograniczenie prędkości", + "speedLimitPlaceholder": "Bez ograniczeń", + "trafficRatio": "Wskaźnik ruchu", + "transport": "Protokół transportowy", + "transportConfig": "Konfiguracja protokołu transportowego", + "transportHost": "Adres usługi transportowej", + "transportPath": "Ścieżka transportu", + "transportServerName": "Nazwa usługi transportowej" + }, + "lastUpdated": "Ostatnia aktualizacja", + "memory": "Pamięć", + "name": "Nazwa", + "node": "Węzeł", + "nodeGroup": "Grupa węzłów", + "normal": "Normalny", + "onlineCount": "Liczba osób online", + "onlineUsers": "Użytkownicy online", + "rate": "Stawka", + "relay": "Przekaźnik", + "serverAddr": "Adres serwera", + "speedLimit": "Ograniczenie prędkości", + "status": "Status", + "trafficRatio": "Wskaźnik ruchu", + "type": "Typ", + "updateSuccess": "Aktualizacja zakończona pomyślnie", + "updatedAt": "Czas aktualizacji" + }, + "tabs": { + "node": "Węzeł", + "nodeGroup": "Grupa węzłów" + } +} diff --git a/apps/admin/locales/pl-PL/subscribe.json b/apps/admin/locales/pl-PL/subscribe.json new file mode 100644 index 0000000..8c4233a --- /dev/null +++ b/apps/admin/locales/pl-PL/subscribe.json @@ -0,0 +1,79 @@ +{ + "actions": "działania", + "cancel": "Anuluj", + "confirm": "Potwierdź", + "confirmDelete": "Czy na pewno chcesz usunąć?", + "create": "Utwórz", + "createSubscribe": "Utwórz subskrypcję", + "createSuccess": "Utworzono pomyślnie", + "delete": "usuń", + "deleteSuccess": "Usunięto pomyślnie", + "deleteWarning": "Po usunięciu danych nie można ich odzyskać, proszę postępować ostrożnie.", + "deviceLimit": "Liczba urządzeń/szt.", + "edit": "edytuj", + "editSubscribe": "Edytuj subskrypcję", + "form": { + "cancel": "Anuluj", + "confirm": "Potwierdź", + "description": "Opis", + "deviceLimit": "Limit urządzeń", + "discount": "Zniżka", + "discountDescription": "Ustaw zniżkę na podstawie ceny jednostkowej", + "discountMonths": "miesiące", + "discountPercent": "Procent zniżki", + "discount_price": "Cena po zniżce", + "duration": "Czas trwania (miesiące)", + "inventory": "Zapas", + "name": "Nazwa", + "noLimit": "Bez ograniczeń", + "quota": "Limit zakupu", + "replacement": "Cena wymiany (za każdym razem)", + "selectSubscribeGroup": "Wybierz grupę subskrypcji", + "server": "Serwer", + "serverGroup": "Grupa serwerów", + "speedLimit": "Limit prędkości (Mbps)", + "subscribeGroup": "Grupa subskrypcji", + "traffic": "Ruch", + "unit_price": "Cena za miesiąc" + }, + "group": { + "actions": "Działania", + "cancel": "Anuluj", + "confirm": "Potwierdź", + "confirmDelete": "Czy na pewno chcesz usunąć?", + "create": "Utwórz", + "createSubscribeGroup": "Utwórz nową grupę subskrypcji", + "createSuccess": "Utworzono pomyślnie", + "delete": "Usuń", + "deleteSuccess": "Usunięto pomyślnie", + "deleteWarning": "Po usunięciu danych nie można ich odzyskać, proszę postępować ostrożnie.", + "description": "Opis", + "edit": "Edytuj", + "editSubscribeGroup": "Edytuj grupę subskrypcji", + "form": { + "cancel": "Anuluj", + "confirm": "Potwierdź", + "description": "Opis", + "name": "Nazwa" + }, + "name": "Nazwa", + "title": "Lista grup subskrypcji", + "updateSuccess": "Zaktualizowano pomyślnie", + "updatedAt": "Czas aktualizacji" + }, + "inventory": "inwentarz", + "name": "Nazwa", + "quota": "Limit zakupu/raz", + "replacement": "Zresetuj cenę/raz", + "sell": "Sprzedaż", + "show": "Pokaż na stronie głównej", + "subscribe": "Subskrybuj", + "subscribeGroup": "Subskrybuj grupę", + "tabs": { + "subscribe": "Subskrybuj", + "subscribeGroup": "Grupa subskrypcji" + }, + "traffic": "ruch", + "unitPrice": "Cena/miesiąc", + "updateSuccess": "Aktualizacja zakończona pomyślnie" +} diff --git a/apps/admin/locales/pl-PL/system.json b/apps/admin/locales/pl-PL/system.json new file mode 100644 index 0000000..87f2ce4 --- /dev/null +++ b/apps/admin/locales/pl-PL/system.json @@ -0,0 +1,156 @@ +{ + "currency": { + "accessKey": "Klucz dostępu", + "accessKeyDescription": "Klucz API dostarczany bezpłatnie przez https://exchangerate.host do uzyskiwania kursów walut", + "currencySymbol": "Symbol waluty", + "currencySymbolDescription": "Używane wyłącznie do celów wyświetlania, po zmianie wszystkie jednostki walutowe w systemie zostaną zmienione", + "currencyUnit": "Jednostka waluty", + "currencyUnitDescription": "Używane wyłącznie do celów wyświetlania, po zmianie wszystkie jednostki walutowe w systemie zostaną zmienione", + "saveSuccess": "Zapisano pomyślnie" + }, + "email": { + "expiration_email_template": "Szablon powiadomienia o wygaśnięciu", + "expiration_email_templateDescription": "Zmienne {after}.nazwa_zmiennej{before} w szablonie zostaną zastąpione rzeczywistymi danymi, upewnij się, że zachowasz te zmienne.", + "inputPlaceholder": "Wprowadź treść...", + "maintenance_email_template": "Szablon powiadomienia o konserwacji", + "maintenance_email_templateDescription": "Zmienne {after}.nazwa_zmiennej{before} w szablonie zostaną zastąpione rzeczywistymi danymi, upewnij się, że zachowasz te zmienne.", + "saveSuccess": "Konfiguracja została pomyślnie zapisana.", + "sendFailure": "Wysłanie testowego e-maila nie powiodło się, sprawdź konfigurację.", + "sendSuccess": "Testowy e-mail został pomyślnie wysłany.", + "sendTestEmail": "Wyślij testowy e-mail", + "sendTestEmailDescription": "Wyślij testowy e-mail, aby sprawdzić, czy konfiguracja jest poprawna.", + "senderAddress": "Adres nadawcy", + "senderAddressDescription": "Domyślny adres e-mail używany do wysyłania wiadomości.", + "smtpAccount": "Konto SMTP", + "smtpAccountDescription": "Konto e-mail używane do uwierzytelniania.", + "smtpEncryptionMethod": "Metoda szyfrowania SMTP", + "smtpEncryptionMethodDescription": "Wybierz, czy włączyć szyfrowanie SSL/TLS.", + "smtpPassword": "Hasło SMTP", + "smtpPasswordDescription": "Hasło do tego konta SMTP.", + "smtpServerAddress": "Adres serwera SMTP", + "smtpServerAddressDescription": "Określ adres serwera używanego do wysyłania wiadomości e-mail.", + "smtpServerPort": "Port serwera SMTP", + "smtpServerPortDescription": "Określ numer portu używanego do łączenia się z serwerem SMTP.", + "verify_email_template": "Szablon weryfikacji e-mail", + "verify_email_templateDescription": "Zmienne {after}.nazwa_zmiennej{before} w szablonie zostaną zastąpione rzeczywistymi danymi, upewnij się, że zachowasz te zmienne." + }, + "invite": { + "commissionFirstTimeOnly": "Prowizja tylko przy pierwszym zakupie", + "commissionFirstTimeOnlyDescription": "Po włączeniu, prowizja jest generowana tylko przy pierwszej płatności zaproszonego użytkownika. Możesz skonfigurować indywidualnych użytkowników w zarządzaniu użytkownikami.", + "enableForcedInvite": "Włącz wymuszone zaproszenie", + "enableForcedInviteDescription": "Po włączeniu, tylko zaproszeni użytkownicy mogą się zarejestrować.", + "inputPlaceholder": "Proszę wprowadzić", + "inviteCommissionPercentage": "Procent prowizji za zaproszenie", + "inviteCommissionPercentageDescription": "Domyślny globalny procent podziału prowizji, możesz skonfigurować indywidualny procent w zarządzaniu użytkownikami.", + "saveSuccess": "Zapisano pomyślnie" + }, + "node": { + "communicationKey": "Klucz komunikacyjny", + "communicationKeyDescription": "Klucz do komunikacji węzła, aby zapewnić, że dane nie zostaną przechwycone przez inne osoby", + "inputPlaceholder": "Proszę wprowadzić", + "nodePullInterval": "Interwał pobierania węzła", + "nodePullIntervalDescription": "Częstotliwość, z jaką węzeł pobiera dane z panelu (w sekundach)", + "nodePushInterval": "Interwał wysyłania węzła", + "nodePushIntervalDescription": "Częstotliwość, z jaką węzeł wysyła dane do panelu", + "saveSuccess": "Zapisano pomyślnie" + }, + "register": { + "emailSuffixWhitelist": "Biała lista sufiksów e-mail", + "emailSuffixWhitelistDescription": "Po włączeniu, tylko e-maile z sufiksami z listy będą mogły się zarejestrować", + "emailVerification": "Weryfikacja e-mail", + "emailVerificationDescription": "Po włączeniu, użytkownicy będą musieli zweryfikować swoje e-maile", + "ipRegistrationLimit": "Limit rejestracji IP", + "ipRegistrationLimitDescription": "Po włączeniu, IP spełniające wymagania reguł będą miały ograniczoną możliwość rejestracji. Proszę pamiętać, że z powodu CDN lub proxy front-end, określenie IP może powodować problemy", + "penaltyTime": "Czas kary (minuty)", + "penaltyTimeDescription": "Użytkownik musi poczekać, aż czas kary minie, aby móc zarejestrować się ponownie", + "registrationLimitCount": "Licznik limitu rejestracji", + "registrationLimitCountDescription": "Po osiągnięciu limitu rejestracji włącza się kara", + "saveSuccess": "Zapisano pomyślnie", + "stopNewUserRegistration": "Zatrzymaj rejestrację nowych użytkowników", + "stopNewUserRegistrationDescription": "Po włączeniu, nikt nie będzie mógł się zarejestrować", + "trialRegistration": "Rejestracja próbna", + "trialRegistrationDescription": "Włącz rejestrację próbną, najpierw zmodyfikuj pakiet próbny i czas trwania", + "whitelistSuffixes": "Sufiksy białej listy", + "whitelistSuffixesDescription": "Używane do weryfikacji e-mail przy rejestracji, jeden na linię", + "whitelistSuffixesPlaceholder": "Proszę wprowadzić sufiksy e-mail, jeden na linię" + }, + "site": { + "logo": "LOGO", + "logoDescription": "Miejsce do wyświetlania LOGO", + "logoPlaceholder": "Wprowadź adres URL LOGO, nie kończ na '/'", + "saveSuccess": "Zapisano pomyślnie", + "siteDesc": "Opis strony", + "siteDescDescription": "Miejsce do wyświetlania opisu strony", + "siteDescPlaceholder": "Wprowadź opis strony", + "siteDomain": "Domena strony", + "siteDomainDescription": "Adres domeny bieżącej strony, na przykład używany w e-mailach", + "siteDomainPlaceholder": "Wprowadź adres domeny, wiele domen wprowadź w osobnych wierszach", + "siteName": "Nazwa strony", + "siteNameDescription": "Miejsce do wyświetlania nazwy strony", + "siteNamePlaceholder": "Wprowadź nazwę strony" + }, + "subscription": { + "add": "Dodaj", + "app": "Aplikacja", + "appDescription": "Skonfiguruj adres pobierania aplikacji i zasady importu, pamiętaj o zapisaniu zmian", + "appDownloadURL": "Adres pobierania aplikacji", + "appIcon": "Ikona aplikacji", + "appName": "Nazwa aplikacji", + "delete": "Usuń", + "reset": "Resetuj", + "save": "Zapisz", + "saveSuccess": "Zapisano pomyślnie", + "singleSubscriptionMode": "Tryb pojedynczej subskrypcji", + "singleSubscriptionModeDescription": "Po włączeniu, wszystkie pakiety użytkowników zostaną przekształcone w saldo", + "subscriptionDomain": "Domena subskrypcji", + "subscriptionDomainDescription": "Używane do subskrypcji, pozostaw puste, aby użyć domeny witryny", + "subscriptionDomainPlaceholder": "Wprowadź domenę subskrypcji, wiele domen wpisz w osobnych wierszach", + "subscriptionPath": "Ścieżka subskrypcji", + "subscriptionPathDescription": "Używane do subskrypcji, po zmianie koniecznie zrestartuj system, aby zapewnić najlepszą wydajność", + "subscriptionPathPlaceholder": "Wprowadź", + "subscriptionProtocol": "Protokół subskrypcji", + "wildcardResolution": "Rozwiązanie z użyciem symboli wieloznacznych", + "wildcardResolutionDescription": "Używane do subskrypcji" + }, + "tabs": { + "currency": "Waluta", + "email": "E-mail", + "invite": "Zaproszenie", + "node": "Węzeł", + "register": "Rejestracja", + "site": "Strona", + "subscription": "Subskrypcja", + "telegram": "Telegram", + "tos": "Warunki usługi", + "verify": "Weryfikacja" + }, + "telegram": { + "botToken": "Token bota", + "botTokenDescription": "Wprowadź token dostarczony przez Botfather", + "enableBotNotifications": "Włącz powiadomienia bota", + "enableBotNotificationsDescription": "Po włączeniu bot będzie wysyłał podstawowe powiadomienia do administratorów i użytkowników połączonych z Telegramem", + "groupURL": "URL grupy", + "groupURLDescription": "Po wypełnieniu będzie wyświetlany na interfejsie użytkownika lub używany tam, gdzie jest to potrzebne", + "inputPlaceholderBotToken": "0000000000:xxxxxxxxx_xxxxxxxxxxxxxxx", + "inputPlaceholderGroupURL": "https://t.me/xxxxxx", + "saveSuccess": "Zapisano pomyślnie" + }, + "tos": { + "saveSuccess": "Zapisano pomyślnie", + "title": "Warunki usługi" + }, + "verify": { + "inputPlaceholder": "Wprowadź", + "loginVerificationCode": "Kod weryfikacyjny logowania", + "loginVerificationCodeDescription": "Weryfikacja człowieka przy logowaniu", + "registrationVerificationCode": "Kod weryfikacyjny rejestracji", + "registrationVerificationCodeDescription": "Weryfikacja człowieka przy rejestracji", + "resetPasswordVerificationCode": "Kod weryfikacyjny resetowania hasła", + "resetPasswordVerificationCodeDescription": "Weryfikacja człowieka przy resetowaniu hasła", + "saveSuccess": "Zapisano pomyślnie", + "turnstileSecret": "Sekret Turnstile", + "turnstileSecretDescription": "Sekret Turnstile dostarczony przez Cloudflare", + "turnstileSiteKey": "Klucz witryny Turnstile", + "turnstileSiteKeyDescription": "Klucz witryny Turnstile dostarczony przez Cloudflare" + } +} diff --git a/apps/admin/locales/pl-PL/ticket.json b/apps/admin/locales/pl-PL/ticket.json new file mode 100644 index 0000000..7bc5243 --- /dev/null +++ b/apps/admin/locales/pl-PL/ticket.json @@ -0,0 +1,19 @@ +{ + "actions": "działania", + "cancel": "Anuluj", + "check": "Sprawdź", + "close": "zamknij", + "closeSuccess": "Zamknięcie zakończone sukcesem", + "closeWarning": "Po zamknięciu nie będzie można obsługiwać tego zgłoszenia. Proszę postępować ostrożnie.", + "confirm": "Potwierdź", + "confirmClose": "Czy na pewno chcesz zamknąć?", + "createdAt": "Utworzono", + "inputPlaceholder": "Wpisz swoje pytanie, a my odpowiemy najszybciej jak to możliwe.", + "open": "otwórz", + "reply": "odpowiedź", + "status": ["Status", "Do śledzenia", "Oczekuje na odpowiedź", "Przetworzono", "Zamknięte"], + "ticketList": "Lista zgłoszeń", + "title": "Tytuł", + "updatedAt": "Zaktualizowano", + "user": "użytkownik" +} diff --git a/apps/admin/locales/pl-PL/tool.json b/apps/admin/locales/pl-PL/tool.json new file mode 100644 index 0000000..2989464 --- /dev/null +++ b/apps/admin/locales/pl-PL/tool.json @@ -0,0 +1,26 @@ +{ + "caller": "Dzwoniący", + "cancel": "Anuluj", + "confirmReboot": "Potwierdź ponowne uruchomienie", + "confirmSystemReboot": "Potwierdź ponowne uruchomienie systemu", + "confirmSystemUpgrade": "Potwierdź aktualizację systemu", + "confirmUpgrade": "Potwierdź aktualizację", + "currentVersion": "Obecna wersja systemu:", + "errors": "Błędy", + "ip": "IP", + "lastUpdated": "Ostatnia aktualizacja:", + "none": "Brak", + "query": "Zapytanie", + "rebootDescription": "Czy na pewno chcesz zrestartować system? Ta operacja spowoduje krótką przerwę w działaniu usług.", + "rebooting": "Trwa ponowne uruchamianie systemu...", + "refreshLogs": "Odśwież dzienniki", + "request": "Prośba", + "status": "Status", + "systemLogs": "Dzienniki systemowe", + "systemReboot": "Restart systemu", + "systemServices": "Usługi systemowe", + "systemUpgrade": "Aktualizacja systemu", + "upgradeDescription": "Czy na pewno chcesz przeprowadzić aktualizację systemu? Ta operacja może zająć kilka minut, podczas których system może nie odpowiadać.", + "userAgent": "Agent użytkownika", + "viewLogsAndManage": "Przeglądaj dzienniki systemowe, wykonuj aktualizacje systemu i operacje ponownego uruchamiania" +} diff --git a/apps/admin/locales/pl-PL/user.json b/apps/admin/locales/pl-PL/user.json new file mode 100644 index 0000000..23a851c --- /dev/null +++ b/apps/admin/locales/pl-PL/user.json @@ -0,0 +1,38 @@ +{ + "actions": "działania", + "balance": "saldo", + "cancel": "Anuluj", + "confirm": "Potwierdź", + "confirmDelete": "Czy na pewno chcesz usunąć?", + "create": "Utwórz", + "createSuccess": "Utworzono pomyślnie", + "createUser": "Utwórz użytkownika", + "createdAt": "Czas rejestracji", + "delete": "usuń", + "deleteDescription": "Po usunięciu danych nie można ich odzyskać, prosimy o ostrożność.", + "deleteSuccess": "Usunięto pomyślnie", + "edit": "edytuj", + "editUser": "Edytuj użytkownika", + "email": "e-mail", + "enable": "Włącz", + "form": { + "balance": "Saldo", + "balancePlaceholder": "Saldo", + "cancel": "Anuluj", + "confirm": "Potwierdź", + "invalidEmailFormat": "Nieprawidłowy format e-maila", + "inviteCode": "Kod zaproszenia", + "inviteCodePlaceholder": "Wprowadź kod zaproszenia (pozostaw puste, aby wygenerować automatycznie)", + "manager": "Administrator", + "password": "Hasło", + "passwordPlaceholder": "Wprowadź nowe hasło (można pozostawić puste)", + "refererId": "ID polecającego", + "refererIdPlaceholder": "Wprowadź ID polecającego", + "userEmail": "E-mail użytkownika", + "userEmailPlaceholder": "Wprowadź e-mail użytkownika" + }, + "referer": "Polecający", + "updateSuccess": "Aktualizacja zakończona pomyślnie", + "userList": "Lista użytkowników", + "userName": "Adres e-mail użytkownika" +} diff --git a/apps/admin/locales/pt-BR/announcement.json b/apps/admin/locales/pt-BR/announcement.json new file mode 100644 index 0000000..31eb0ed --- /dev/null +++ b/apps/admin/locales/pt-BR/announcement.json @@ -0,0 +1,30 @@ +{ + "actions": "ações", + "announcementList": "Lista de Anúncios", + "cancel": "Cancelar", + "confirm": "Confirmar", + "confirmDelete": "Você tem certeza de que deseja excluir?", + "content": "conteúdo", + "create": "Criar", + "createAnnouncement": "Criar Anúncio", + "createSuccess": "Criação bem-sucedida", + "delete": "excluir", + "deleteDescription": "Uma vez excluído, os dados não poderão ser recuperados. Proceda com cautela.", + "deleteSuccess": "Exclusão bem-sucedida", + "edit": "editar", + "editAnnouncement": "Editar Anúncio", + "enable": "Habilitar", + "form": { + "cancel": "Cancelar", + "confirm": "Confirmar", + "content": "Conteúdo", + "contentPlaceholder": "Por favor, insira o conteúdo do anúncio (suporta Markdown)", + "title": "Título", + "titlePlaceholder": "Por favor, insira" + }, + "hide": "ocultar", + "show": "mostrar", + "title": "Título", + "updateSuccess": "Atualização bem-sucedida", + "updatedAt": "Atualizado em" +} diff --git a/apps/admin/locales/pt-BR/auth.json b/apps/admin/locales/pt-BR/auth.json new file mode 100644 index 0000000..b5b81e1 --- /dev/null +++ b/apps/admin/locales/pt-BR/auth.json @@ -0,0 +1,39 @@ +{ + "check": { + "checking": "Verificando...", + "continue": "Continuar", + "description": "Por favor, insira seu e-mail para continuar com o login ou registro.", + "email": "Por favor, insira um endereço de e-mail válido.", + "title": "Login/Registro", + "whitelist": "O domínio do e-mail não está na lista de permissões." + }, + "login": { + "description": "Por favor, insira suas informações de conta para fazer login.", + "forgotPassword": "Esqueceu a senha?", + "success": "Login bem-sucedido!", + "switchAccount": "Registrar/Trocar de conta", + "title": "Login" + }, + "logout": "Sair", + "orWithEmail": "ou use o e-mail", + "register": { + "description": "Crie uma nova conta, preencha suas informações para se registrar.", + "existingAccount": "Já tem uma conta?", + "get": "Obter", + "invite": "Código de convite", + "message": "#### Prezado usuário,\n\nAgradecemos seu interesse e apoio. Devido a ajustes na estratégia de operação do site, fechamos o registro de novos usuários. Durante este período, o uso por usuários existentes não será afetado.\n\nEstamos comprometidos em oferecer um serviço e experiência melhores, por isso realizaremos uma otimização completa do sistema e atualizações de funcionalidades durante o fechamento do registro. No futuro, receberemos você com conteúdo e serviços de maior qualidade.\n\nAcompanhe nosso site e plataformas de mídia social para obter as últimas atualizações e notificações. Agradecemos sua compreensão e apoio.\n\nSe tiver dúvidas ou precisar de ajuda, entre em contato com nossa equipe de atendimento ao cliente.\n\n**Mais uma vez, obrigado por seu apoio e compreensão.**", + "passwordMismatch": "As senhas digitadas não coincidem", + "success": "Registro bem-sucedido, login automático realizado!", + "switchToLogin": "Entrar/Redefinir e-mail", + "title": "Registrar" + }, + "reset": { + "description": "Por favor, insira seu endereço de e-mail para redefinir a senha.", + "existingAccount": "Já tem uma conta?", + "get": "Obter", + "success": "Senha redefinida com sucesso, você foi automaticamente redirecionado para o login!", + "switchToLogin": "Entrar/Registrar", + "title": "Redefinir Senha" + }, + "tos": "Termos de Serviço" +} diff --git a/apps/admin/locales/pt-BR/common.json b/apps/admin/locales/pt-BR/common.json new file mode 100644 index 0000000..29a6691 --- /dev/null +++ b/apps/admin/locales/pt-BR/common.json @@ -0,0 +1,60 @@ +{ + "billing": { + "description": "Patrocinar ajuda o PPanel a continuar lançando atualizações!", + "title": "Patrocinador" + }, + "empty": [ + "Imagine que aqui está cheio de conteúdo incrível! Por enquanto, só podemos imaginar...", + "Esta área desapareceu misteriosamente, estamos tentando trazê-la de volta!", + "Ops, nada aconteceu... você pode preencher com algo!", + "É como descobrir que o palco de um show está vazio... que tal você se apresentar?", + "Você encontrou uma terra de oportunidades vazia! Que tal construir uma casa?", + "Aqui está vazio por enquanto, mas a criatividade começa aqui!", + "Nada por enquanto... mas não se preocupe, isso é só o começo!", + "Aqui estava preparado uma grande surpresa, mas ela escapou!", + "Por enquanto, nada, como se o armário de lanches estivesse vazio.", + "Este espaço está esperando seu protagonista entrar em cena!" + ], + "request": { + "10001": "A consulta não foi bem-sucedida, por favor, tente novamente mais tarde ou verifique suas condições.", + "10002": "A operação de atualização não foi bem-sucedida, por favor, tente novamente mais tarde.", + "10003": "Não é possível concluir a operação de inserção no momento, por favor, tente novamente mais tarde.", + "10004": "A operação de exclusão não pôde ser concluída, por favor, tente novamente mais tarde.", + "20001": "As informações do usuário já existem, por favor, altere as informações e tente novamente.", + "20002": "Usuário não encontrado, por favor, verifique as informações e tente novamente.", + "20003": "A senha que você digitou está incorreta, por favor, digite novamente.", + "20004": "O usuário foi desativado, se tiver dúvidas, entre em contato com o suporte ao cliente.", + "20005": "Saldo insuficiente, por favor, recarregue e tente novamente.", + "20006": "A função de registro está temporariamente indisponível, por favor, tente novamente mais tarde.", + "30001": "O nó já existe, por favor, não adicione novamente.", + "30002": "Nenhum nó relacionado encontrado, por favor, verifique e tente novamente.", + "30003": "O grupo já existe, por favor, tente usar outro nome.", + "30004": "Grupo não encontrado, por favor, confirme as informações e tente novamente.", + "30005": "Ainda há conteúdo neste grupo, por favor, esvazie-o e tente novamente.", + "400": "Os parâmetros da solicitação estão incorretos, por favor, verifique e envie novamente.", + "40002": "Token válido não encontrado, por favor, faça login e tente novamente.", + "40003": "O token atual é inválido, por favor, obtenha um novo e tente novamente.", + "40004": "O token expirou, por favor, faça login novamente.", + "40005": "Você não tem permissão de acesso, se tiver dúvidas, entre em contato com o administrador.", + "401": "Solicitações muito frequentes, por favor, tente novamente mais tarde.", + "500": "O servidor encontrou alguns problemas, por favor, tente novamente mais tarde.", + "50001": "Informações do cupom não encontradas, por favor, verifique e tente novamente.", + "50002": "O cupom já foi usado, não pode ser reutilizado.", + "60001": "A assinatura expirou, por favor, renove para continuar usando.", + "60002": "Não é possível usar a assinatura no momento, por favor, tente novamente mais tarde.", + "70001": "Código de verificação incorreto, por favor, digite novamente.", + "80001": "A tarefa não foi adicionada à fila com sucesso, por favor, tente novamente mais tarde.", + "90001": "Por favor, desative o modo DEBUG e tente novamente.", + "undefined": "Ocorreu um erro no sistema, por favor, tente novamente mais tarde." + }, + "table": { + "actions": "Ações", + "asc": "Ascendente", + "desc": "Descendente", + "hide": "Ocultar", + "pageInfo": "Página {current} de {total}", + "rowsPerPage": "Linhas por página", + "selectedItems": "{total} linhas selecionadas" + }, + "unlimited": "ilimitado" +} diff --git a/apps/admin/locales/pt-BR/coupon.json b/apps/admin/locales/pt-BR/coupon.json new file mode 100644 index 0000000..0a7d6b5 --- /dev/null +++ b/apps/admin/locales/pt-BR/coupon.json @@ -0,0 +1,50 @@ +{ + "actions": "ações", + "amount": "quantia", + "cancel": "Cancelar", + "code": "código", + "confirm": "Confirmar", + "confirmDelete": "Você tem certeza de que deseja excluir?", + "count": "quantidade", + "couponList": "Lista de Cupons", + "create": "Criar", + "createCoupon": "Criar Cupom", + "createSuccess": "Criação bem-sucedida", + "delete": "excluir", + "deleteSuccess": "Exclusão bem-sucedida", + "deleteWarning": "Uma vez excluído, os dados não poderão ser recuperados. Proceda com cautela.", + "discount": "desconto", + "edit": "editar", + "editCoupon": "Editar cupom", + "enable": "Habilitar", + "form": { + "amountDiscount": "Desconto em valor", + "cancel": "Cancelar", + "confirm": "Confirmar", + "count": "Número máximo de usos", + "countPlaceholder": "Número máximo de usos (deixe em branco para ilimitado)", + "customCouponCode": "Código de cupom personalizado", + "customCouponCodePlaceholder": "Código de cupom personalizado (deixe em branco para gerar automaticamente)", + "enterCouponName": "Por favor, insira o nome do cupom", + "enterValue": "Por favor, insira o valor", + "expireTime": "Data de expiração", + "name": "Nome", + "percentageDiscount": "Desconto percentual", + "selectServer": "Por favor, selecione a assinatura", + "selectTime": "Selecione o tempo", + "specifiedServer": "Assinatura especificada", + "startTime": "Data de início", + "type": "Tipo de cupom", + "userLimit": "Número máximo de usos por usuário", + "userLimitPlaceholder": "Número máximo de usos por usuário (deixe em branco para ilimitado)" + }, + "name": "nome", + "percentage": "percentual", + "remainingTimes": "Restante", + "subscribe": "Inscrever-se", + "type": "tipo", + "unlimited": "ilimitado", + "updateSuccess": "Atualização bem-sucedida", + "usedTimes": "Número de vezes usado", + "validityPeriod": "Período de validade" +} diff --git a/apps/admin/locales/pt-BR/document.json b/apps/admin/locales/pt-BR/document.json new file mode 100644 index 0000000..a7294cf --- /dev/null +++ b/apps/admin/locales/pt-BR/document.json @@ -0,0 +1,29 @@ +{ + "DocumentList": "Lista de Documentos", + "actions": "ações", + "cancel": "Cancelar", + "confirm": "confirmar", + "confirmDelete": "Você tem certeza de que deseja excluir?", + "create": "Criar", + "createDocument": "Criar Documento", + "createSuccess": "Criação bem-sucedida", + "delete": "excluir", + "deleteDescription": "Uma vez excluído, os dados não poderão ser recuperados. Proceda com cautela.", + "deleteSuccess": "Exclusão bem-sucedida", + "edit": "editar", + "editDocument": "Editar Documento", + "form": { + "cancel": "Cancelar", + "confirm": "Confirmar", + "content": "Conteúdo", + "tags": "Categorias", + "tagsPlaceholder": "Por favor, use a tecla Enter ou vírgula (,) para separar e inserir várias categorias", + "title": "Título", + "titlePlaceholder": "Por favor, insira" + }, + "show": "mostrar", + "tags": "Categorias", + "title": "Título", + "updateSuccess": "Atualização bem-sucedida", + "updatedAt": "Atualizado em" +} diff --git a/apps/admin/locales/pt-BR/index.json b/apps/admin/locales/pt-BR/index.json new file mode 100644 index 0000000..c14b251 --- /dev/null +++ b/apps/admin/locales/pt-BR/index.json @@ -0,0 +1,29 @@ +{ + "email": "e-mail", + "month": "Este mês", + "monthDownloadTraffic": "Tráfego de download do mês", + "monthUploadTraffic": "Tráfego de upload deste mês", + "newPurchase": "Nova Compra", + "nodeTraffic": "Tráfego do Nó", + "nodes": "nós", + "offlineNodeCount": "Contagem de nós offline", + "onlineIPCount": "Contagem de IPs Online", + "onlineNodeCount": "Contagem de nós online", + "pendingTickets": "Tickets pendentes", + "register": "Registrar", + "repurchase": "recompra", + "revenueTitle": "Estatísticas de Receita", + "selectTypePlaceholder": "Selecione o tipo", + "statisticsTitle": "Estatísticas", + "today": "hoje", + "todayDownloadTraffic": "Tráfego de download de hoje", + "todayUploadTraffic": "Tráfego de upload de hoje", + "total": "Total", + "totalIncome": "Renda Total", + "trafficRank": "Classificação de Tráfego", + "type": "tipo", + "userTitle": "Estatísticas do Usuário", + "userTraffic": "Tráfego do usuário", + "users": "usuários", + "yesterday": "ontem" +} diff --git a/apps/admin/locales/pt-BR/language.json b/apps/admin/locales/pt-BR/language.json new file mode 100644 index 0000000..54a4c64 --- /dev/null +++ b/apps/admin/locales/pt-BR/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "Tcheco", + "de-DE": "Alemão", + "en-US": "inglês", + "es-ES": "Espanhol", + "es-MX": "Espanhol (México)", + "fi-FI": "Finlandês", + "fr-FR": "Francês", + "hi-IN": "hindi", + "hu-HU": "Húngaro", + "ja-JP": "Japonês", + "ko-KR": "Coreano", + "no-NO": "Norueguês", + "pl-PL": "Polonês", + "pt-BR": "Português (Brasil)", + "ro-RO": "Romeno", + "ru-RU": "Russo", + "th-TH": "Tailandês", + "tr-TR": "turco", + "uk-UA": "Ucraniano", + "vi-VN": "Vietnamita", + "zh-CN": "Chinês (Simplificado)", + "zh-TW": "Chinês (Tradicional)" +} diff --git a/apps/admin/locales/pt-BR/menu.json b/apps/admin/locales/pt-BR/menu.json new file mode 100644 index 0000000..fad817a --- /dev/null +++ b/apps/admin/locales/pt-BR/menu.json @@ -0,0 +1,18 @@ +{ + "Announcement Management": "Gerenciamento de Anúncios", + "Coupon Management": "Gerenciamento de Cupons", + "Dashboard": "Painel de Controle", + "Document Management": "Gerenciamento de Documentos", + "Finance": "Finanças", + "Order Management": "Gerenciamento de Pedidos", + "Payment Config": "Configuração de Pagamento", + "Server": "Servidor", + "Server Management": "Gerenciamento de Servidor", + "Settings": "Configurações", + "Subscribe Management": "Gerenciamento de Assinaturas", + "System Config": "Configuração do Sistema", + "System Tool": "Ferramenta do Sistema", + "Ticket Management": "Gerenciamento de Chamados", + "User": "Usuário", + "User Management": "Gerenciamento de Usuários" +} diff --git a/apps/admin/locales/pt-BR/order.json b/apps/admin/locales/pt-BR/order.json new file mode 100644 index 0000000..d324a48 --- /dev/null +++ b/apps/admin/locales/pt-BR/order.json @@ -0,0 +1,37 @@ +{ + "amount": "Quantia", + "couponDiscount": "Desconto do cupom", + "discount": "Valor do desconto", + "failed": "falha", + "feeAmount": "Taxa de Serviço", + "method": "Método de pagamento", + "methods": { + "alipay_f2f": "Alipay (cara a cara)", + "balance": "Saldo", + "epay": "Epay", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "orderNumber": "Número do Pedido", + "status": { + "0": "status", + "1": "Aguardando pagamento", + "2": "Pago", + "3": "Cancelado", + "4": "Fechado", + "5": "Concluído" + }, + "subscribe": "Inscrever-se", + "subscribePrice": "Preço de assinatura", + "total": "Total", + "tradeNo": "Número de transação", + "type": { + "0": "tipo", + "1": "nova compra", + "2": "renovação", + "3": "redefinir dados", + "4": "recarregar" + }, + "updateTime": "Hora de atualização", + "user": "usuário" +} diff --git a/apps/admin/locales/pt-BR/payment.json b/apps/admin/locales/pt-BR/payment.json new file mode 100644 index 0000000..61a406c --- /dev/null +++ b/apps/admin/locales/pt-BR/payment.json @@ -0,0 +1,44 @@ +{ + "aliPay": "Pagamento com Alipay", + "alipayf2f": { + "appId": "ID do aplicativo Alipay", + "invoiceName": "Nome personalizado do produto", + "invoiceNameDescription": "Será exibido na fatura do Alipay", + "privateKey": "Chave privada do Alipay", + "publicKey": "Chave pública do Alipay", + "sandbox": "Modo sandbox", + "sandboxDescription": "Ative o modo sandbox para testar pagamentos" + }, + "enable": "Habilitar", + "enableDescription": "Ativar este método de pagamento", + "epay": { + "key": "CHAVE", + "pid": "PID", + "url": "URL" + }, + "feeMode": "Modo de Cobrança", + "feeModeDescription": "Modo de cobrança de taxas adicionais", + "feeModeItems": ["Sem taxa", "Porcentagem", "Valor fixo", "Ambos os anteriores"], + "feePercent": "Percentual de taxa (opcional)", + "feePercentDescription": "Adicionar taxa sobre o valor do pedido", + "fixedFee": "Taxa fixa (opcional)", + "fixedFeeDescription": "Adicionar uma taxa fixa sobre o valor do pedido", + "iconUrl": "URL do ícone (opcional)", + "iconUrlDescription": "Usado para exibição no front-end", + "inputPlaceholder": "Por favor, insira", + "key": "CHAVE", + "notifyUrl": "Domínio de notificação personalizado (opcional)", + "notifyUrlDescription": "A notificação do gateway será enviada para este domínio", + "payForRecommendations": "Pagar por recomendações", + "pid": "PID", + "saveSuccess": "Salvo com sucesso", + "showName": "Mostrar Nome", + "showNameDescription": "Usado para exibição no front-end", + "stripe": { + "publicKey": "CHAVE PÚBLICA", + "secretKey": "CHAVE SECRETA", + "webhookSecret": "ASSINATURA DA CHAVE DO WEBHOOK" + }, + "url": "URL", + "wechatPay": "WeChat Pay" +} diff --git a/apps/admin/locales/pt-BR/server.json b/apps/admin/locales/pt-BR/server.json new file mode 100644 index 0000000..cb23c13 --- /dev/null +++ b/apps/admin/locales/pt-BR/server.json @@ -0,0 +1,122 @@ +{ + "group": { + "actions": "Ações", + "cancel": "Cancelar", + "confirm": "Confirmar", + "confirmDelete": "Tem certeza de que deseja excluir?", + "create": "Criar", + "createNodeGroup": "Criar Grupo de Nós", + "createdSuccessfully": "Criado com sucesso", + "delete": "Excluir", + "deleteWarning": "Após a exclusão, os dados não poderão ser recuperados. Proceda com cautela.", + "deletedSuccessfully": "Excluído com sucesso", + "description": "Descrição", + "edit": "Editar", + "editNodeGroup": "Editar Grupo de Nós", + "form": { + "cancel": "Cancelar", + "confirm": "Confirmar", + "description": "Descrição", + "name": "Nome" + }, + "name": "Nome", + "title": "Lista de Grupos de Nós", + "updatedAt": "Atualizado em" + }, + "node": { + "abnormal": "Anormal", + "actions": "Ações", + "address": "Endereço", + "all": "Todos", + "cancel": "Cancelar", + "confirm": "Confirmar", + "confirmDelete": "Tem certeza de que deseja excluir?", + "create": "Criar", + "createNode": "Criar Nó", + "createSuccess": "Criado com sucesso", + "delete": "Excluir", + "deleteSuccess": "Excluído com sucesso", + "deleteWarning": "Após a exclusão, os dados não poderão ser recuperados. Por favor, proceda com cautela.", + "disk": "Disco", + "edit": "Editar", + "editNode": "Editar Nó", + "enable": "Habilitar", + "form": { + "allowInsecure": "Permitir Inseguro", + "cancel": "Cancelar", + "confirm": "Confirmar", + "edit": "Editar", + "editSecurity": "Editar Configuração de Segurança", + "enableRelay": "Habilitar Relay", + "enableTLS": "Habilitar TLS", + "encryptionMethod": "Método de Criptografia", + "flow": "Algoritmo de Controle de Fluxo", + "hopInterval": "Intervalo de Salto", + "hopPorts": "Portas de Salto", + "hopPortsPlaceholder": "Várias portas separadas por vírgula", + "name": "Nome", + "nodeGroupId": "ID do Grupo de Nós", + "obfsPassword": "Senha de Ofuscação", + "obfsPasswordPlaceholder": "Deixe em branco para não ofuscar", + "path": "Caminho", + "pleaseSelect": "Por favor, selecione", + "port": "Porta do Servidor", + "protocol": "Protocolo", + "relayHost": "Endereço de Relay", + "relayPort": "Porta de Relay", + "remarks": "Observações", + "security": "Segurança", + "securityConfig": "Configuração de Segurança", + "security_config": { + "fingerprint": "Impressão Digital", + "privateKey": "Chave Privada", + "privateKeyPlaceholder": "Deixe em branco para gerar automaticamente", + "publicKey": "Chave Pública", + "publicKeyPlaceholder": "Deixe em branco para gerar automaticamente", + "serverAddress": "Endereço do Servidor", + "serverAddressPlaceholder": "Endereço de destino REALITY, padrão usa SNI", + "serverName": "Nome do Servidor (SNI)", + "serverNamePlaceholder": "Obrigatório para REALITY, deve coincidir com o backend", + "serverPort": "Porta do Servidor", + "serverPortPlaceholder": "Porta de destino REALITY, padrão 443", + "shortId": "ID Curto", + "shortIdPlaceholder": "Deixe em branco para gerar automaticamente", + "sni": "Indicação de Nome do Servidor (SNI)" + }, + "selectEncryptionMethod": "Selecione o Método de Criptografia", + "selectNodeGroup": "Selecione o Grupo de Nós", + "selectProtocol": "Selecione o Protocolo", + "serverAddr": "Endereço do Servidor", + "serverName": "Nome do Serviço", + "speedLimit": "Limite de Velocidade", + "speedLimitPlaceholder": "Sem Limite", + "trafficRatio": "Taxa de Tráfego", + "transport": "Protocolo de Transporte", + "transportConfig": "Configuração do Protocolo de Transporte", + "transportHost": "Endereço do Serviço de Transporte", + "transportPath": "Caminho de Transporte", + "transportServerName": "Nome do Serviço de Transporte" + }, + "lastUpdated": "Última Atualização", + "memory": "Memória", + "name": "Nome", + "node": "Nó", + "nodeGroup": "Grupo de Nós", + "normal": "Normal", + "onlineCount": "Contagem de Usuários Online", + "onlineUsers": "Usuários Online", + "rate": "Taxa", + "relay": "Relay", + "serverAddr": "Endereço do Servidor", + "speedLimit": "Limite de Velocidade", + "status": "Status", + "trafficRatio": "Taxa de Tráfego", + "type": "Tipo", + "updateSuccess": "Atualizado com sucesso", + "updatedAt": "Atualizado em" + }, + "tabs": { + "node": "Nó", + "nodeGroup": "Grupo de Nós" + } +} diff --git a/apps/admin/locales/pt-BR/subscribe.json b/apps/admin/locales/pt-BR/subscribe.json new file mode 100644 index 0000000..3b2b4fa --- /dev/null +++ b/apps/admin/locales/pt-BR/subscribe.json @@ -0,0 +1,79 @@ +{ + "actions": "ações", + "cancel": "Cancelar", + "confirm": "confirmar", + "confirmDelete": "Tem certeza de que deseja excluir?", + "create": "criar", + "createSubscribe": "Criar Assinatura", + "createSuccess": "Criação bem-sucedida", + "delete": "Excluir", + "deleteSuccess": "Exclusão bem-sucedida", + "deleteWarning": "Após a exclusão, os dados não poderão ser recuperados. Proceda com cautela.", + "deviceLimit": "Número de dispositivos/unidade", + "edit": "editar", + "editSubscribe": "Editar Assinatura", + "form": { + "cancel": "Cancelar", + "confirm": "Confirmar", + "description": "Descrição", + "deviceLimit": "Limite de dispositivos", + "discount": "Desconto", + "discountDescription": "Definir desconto com base no preço unitário", + "discountMonths": "Meses", + "discountPercent": "Percentual de desconto", + "discount_price": "Preço com desconto", + "duration": "Duração (meses)", + "inventory": "Estoque", + "name": "Nome", + "noLimit": "Sem limite", + "quota": "Quantidade limitada", + "replacement": "Preço de reposição (cada vez)", + "selectSubscribeGroup": "Por favor, selecione o grupo de assinatura", + "server": "Servidor", + "serverGroup": "Grupo de servidores", + "speedLimit": "Limite de velocidade (Mbps)", + "subscribeGroup": "Grupo de assinatura", + "traffic": "Tráfego", + "unit_price": "Preço mensal" + }, + "group": { + "actions": "Ações", + "cancel": "Cancelar", + "confirm": "Confirmar", + "confirmDelete": "Tem certeza de que deseja excluir?", + "create": "Criar", + "createSubscribeGroup": "Criar Novo Grupo de Assinatura", + "createSuccess": "Criado com sucesso", + "delete": "Excluir", + "deleteSuccess": "Excluído com sucesso", + "deleteWarning": "Os dados não poderão ser recuperados após a exclusão, por favor, proceda com cautela.", + "description": "Descrição", + "edit": "Editar", + "editSubscribeGroup": "Editar Grupo de Assinatura", + "form": { + "cancel": "Cancelar", + "confirm": "Confirmar", + "description": "Descrição", + "name": "Nome" + }, + "name": "Nome", + "title": "Lista de Grupos de Assinatura", + "updateSuccess": "Atualizado com sucesso", + "updatedAt": "Atualizado em" + }, + "inventory": "estoque", + "name": "nome", + "quota": "Limite de compra/vez", + "replacement": "Redefinir preço/vez", + "sell": "venda", + "show": "Exibição na página inicial", + "subscribe": "Inscrever-se", + "subscribeGroup": "Inscrever-se no grupo", + "tabs": { + "subscribe": "Inscrever-se", + "subscribeGroup": "Grupo de Inscrição" + }, + "traffic": "tráfego", + "unitPrice": "Preço/mês", + "updateSuccess": "Atualização bem-sucedida" +} diff --git a/apps/admin/locales/pt-BR/system.json b/apps/admin/locales/pt-BR/system.json new file mode 100644 index 0000000..2bc6c43 --- /dev/null +++ b/apps/admin/locales/pt-BR/system.json @@ -0,0 +1,156 @@ +{ + "currency": { + "accessKey": "Chave de Acesso", + "accessKeyDescription": "Chave de API de taxa de câmbio fornecida gratuitamente por https://exchangerate.host", + "currencySymbol": "Símbolo da Moeda", + "currencySymbolDescription": "Usado apenas para exibição, após a alteração todas as unidades monetárias no sistema serão alteradas", + "currencyUnit": "Unidade Monetária", + "currencyUnitDescription": "Usado apenas para exibição, após a alteração todas as unidades monetárias no sistema serão alteradas", + "saveSuccess": "Salvo com sucesso" + }, + "email": { + "expiration_email_template": "Modelo de Notificação de Expiração", + "expiration_email_templateDescription": "Os nomes das variáveis {after}.variável{before} no modelo serão substituídos por dados reais, certifique-se de manter essas variáveis.", + "inputPlaceholder": "Por favor, insira o conteúdo...", + "maintenance_email_template": "Modelo de Notificação de Manutenção", + "maintenance_email_templateDescription": "Os nomes das variáveis {after}.variável{before} no modelo serão substituídos por dados reais, certifique-se de manter essas variáveis.", + "saveSuccess": "Configuração salva com sucesso.", + "sendFailure": "Falha ao enviar e-mail de teste, verifique a configuração.", + "sendSuccess": "E-mail de teste enviado com sucesso.", + "sendTestEmail": "Enviar e-mail de teste", + "sendTestEmailDescription": "Envie um e-mail de teste para verificar se a configuração está correta.", + "senderAddress": "Endereço do Remetente", + "senderAddressDescription": "Endereço de e-mail padrão usado para enviar e-mails.", + "smtpAccount": "Conta SMTP", + "smtpAccountDescription": "Conta de e-mail usada para autenticação.", + "smtpEncryptionMethod": "Método de Criptografia SMTP", + "smtpEncryptionMethodDescription": "Escolha se deseja habilitar a criptografia SSL/TLS.", + "smtpPassword": "Senha SMTP", + "smtpPasswordDescription": "Senha da conta SMTP.", + "smtpServerAddress": "Endereço do Servidor SMTP", + "smtpServerAddressDescription": "Especifique o endereço do servidor usado para enviar e-mails.", + "smtpServerPort": "Porta do Servidor SMTP", + "smtpServerPortDescription": "Especifique o número da porta para conectar ao servidor SMTP.", + "verify_email_template": "Modelo de E-mail de Verificação", + "verify_email_templateDescription": "Os nomes das variáveis {after}.variável{before} no modelo serão substituídos por dados reais, certifique-se de manter essas variáveis." + }, + "invite": { + "commissionFirstTimeOnly": "Comissão apenas na primeira compra", + "commissionFirstTimeOnlyDescription": "Ao ativar, a comissão será gerada apenas no primeiro pagamento do convidado. Você pode configurar individualmente no gerenciamento de usuários.", + "enableForcedInvite": "Ativar convite obrigatório", + "enableForcedInviteDescription": "Ao ativar, apenas usuários convidados poderão se registrar.", + "inputPlaceholder": "Por favor, insira", + "inviteCommissionPercentage": "Porcentagem de comissão por convite", + "inviteCommissionPercentageDescription": "Proporção padrão de comissão global. Você pode configurar individualmente no gerenciamento de usuários.", + "saveSuccess": "Salvo com sucesso" + }, + "node": { + "communicationKey": "Chave de Comunicação", + "communicationKeyDescription": "Chave para comunicação do nó, garantindo que os dados não sejam interceptados por terceiros", + "inputPlaceholder": "Por favor, insira", + "nodePullInterval": "Intervalo de Extração do Nó", + "nodePullIntervalDescription": "Frequência com que o nó obtém dados do painel (segundos)", + "nodePushInterval": "Intervalo de Envio do Nó", + "nodePushIntervalDescription": "Frequência com que o nó envia dados para o painel", + "saveSuccess": "Salvo com sucesso" + }, + "register": { + "emailSuffixWhitelist": "Lista branca de sufixos de e-mail", + "emailSuffixWhitelistDescription": "Ao ativar, apenas e-mails com sufixos na lista poderão se registrar", + "emailVerification": "Verificação de e-mail", + "emailVerificationDescription": "Ao ativar, os usuários precisarão verificar seus e-mails", + "ipRegistrationLimit": "Limite de registro por IP", + "ipRegistrationLimitDescription": "Ao ativar, IPs que atendem aos requisitos das regras serão limitados no registro. Observe que a determinação de IP pode causar problemas devido a CDN ou proxy frontal", + "penaltyTime": "Tempo de penalidade (minutos)", + "penaltyTimeDescription": "Os usuários devem esperar o tempo de penalidade passar para se registrar novamente", + "registrationLimitCount": "Contagem de limite de registro", + "registrationLimitCountDescription": "Ativa a penalidade após atingir o limite de registro", + "saveSuccess": "Salvo com sucesso", + "stopNewUserRegistration": "Parar registro de novos usuários", + "stopNewUserRegistrationDescription": "Ao ativar, ninguém poderá se registrar", + "trialRegistration": "Registro de teste", + "trialRegistrationDescription": "Ativar registro de teste, por favor, modifique primeiro o pacote de teste e a duração", + "whitelistSuffixes": "Sufixos da lista branca", + "whitelistSuffixesDescription": "Usado para verificação de e-mail de registro, um por linha", + "whitelistSuffixesPlaceholder": "Por favor, insira o sufixo de e-mail, um por linha" + }, + "site": { + "logo": "LOGO", + "logoDescription": "Usado para exibir a posição onde o LOGO precisa ser mostrado", + "logoPlaceholder": "Por favor, insira o URL do LOGO, não termine com '/'", + "saveSuccess": "Salvo com sucesso", + "siteDesc": "Descrição do site", + "siteDescDescription": "Usado para exibir a posição onde a descrição do site precisa ser mostrada", + "siteDescPlaceholder": "Por favor, insira a descrição do site", + "siteDomain": "Domínio do site", + "siteDomainDescription": "Endereço de domínio do site atual, por exemplo, usado em e-mails", + "siteDomainPlaceholder": "Por favor, insira o endereço do domínio, múltiplos domínios devem ser inseridos um por linha", + "siteName": "Nome do site", + "siteNameDescription": "Usado para exibir a posição onde o nome do site precisa ser mostrado", + "siteNamePlaceholder": "Por favor, insira o nome do site" + }, + "subscription": { + "add": "Adicionar", + "app": "Aplicativo", + "appDescription": "Configure o endereço de download e as regras de importação do aplicativo, lembre-se de salvar após modificar", + "appDownloadURL": "URL de Download do Aplicativo", + "appIcon": "Ícone do Aplicativo", + "appName": "Nome do Aplicativo", + "delete": "Excluir", + "reset": "Redefinir", + "save": "Salvar", + "saveSuccess": "Salvo com sucesso", + "singleSubscriptionMode": "Modo de Assinatura Única", + "singleSubscriptionModeDescription": "Ao ativar, todos os pacotes de usuários serão convertidos em saldo", + "subscriptionDomain": "Domínio de Assinatura", + "subscriptionDomainDescription": "Usado para assinatura, deixe em branco para usar o domínio do site", + "subscriptionDomainPlaceholder": "Por favor, insira o domínio de assinatura, múltiplos domínios devem ser separados por linha", + "subscriptionPath": "Caminho de Assinatura", + "subscriptionPathDescription": "Usado para assinatura, após modificar, reinicie o sistema para garantir a melhor experiência de desempenho", + "subscriptionPathPlaceholder": "Por favor, insira", + "subscriptionProtocol": "Protocolo de Assinatura", + "wildcardResolution": "Resolução de Curinga", + "wildcardResolutionDescription": "Usado para assinatura" + }, + "tabs": { + "currency": "Moeda", + "email": "E-mail", + "invite": "Convite", + "node": "Nó", + "register": "Registrar", + "site": "Site", + "subscription": "Assinatura", + "telegram": "Telegram", + "tos": "Termos de Serviço", + "verify": "Verificar" + }, + "telegram": { + "botToken": "Token do Bot", + "botTokenDescription": "Por favor, insira o token fornecido pelo Botfather", + "enableBotNotifications": "Ativar Notificações do Bot", + "enableBotNotificationsDescription": "Ao ativar, o bot enviará notificações básicas para administradores e usuários vinculados ao Telegram", + "groupURL": "URL do Grupo", + "groupURLDescription": "Após preenchido, será exibido no lado do usuário ou usado onde necessário", + "inputPlaceholderBotToken": "0000000000:xxxxxxxxx_xxxxxxxxxxxxxxx", + "inputPlaceholderGroupURL": "https://t.me/xxxxxx", + "saveSuccess": "Salvo com sucesso" + }, + "tos": { + "saveSuccess": "Salvo com sucesso", + "title": "Termos de Serviço" + }, + "verify": { + "inputPlaceholder": "Por favor, insira", + "loginVerificationCode": "Código de verificação de login", + "loginVerificationCodeDescription": "Verificação humana ao fazer login", + "registrationVerificationCode": "Código de verificação de registro", + "registrationVerificationCodeDescription": "Verificação humana ao se registrar", + "resetPasswordVerificationCode": "Código de verificação de redefinição de senha", + "resetPasswordVerificationCodeDescription": "Verificação humana ao redefinir a senha", + "saveSuccess": "Salvo com sucesso", + "turnstileSecret": "Chave secreta do Turnstile", + "turnstileSecretDescription": "Chave secreta do Turnstile fornecida pela Cloudflare", + "turnstileSiteKey": "Chave do site do Turnstile", + "turnstileSiteKeyDescription": "Chave do site do Turnstile fornecida pela Cloudflare" + } +} diff --git a/apps/admin/locales/pt-BR/ticket.json b/apps/admin/locales/pt-BR/ticket.json new file mode 100644 index 0000000..f32d95e --- /dev/null +++ b/apps/admin/locales/pt-BR/ticket.json @@ -0,0 +1,19 @@ +{ + "actions": "ações", + "cancel": "Cancelar", + "check": "Verificar", + "close": "fechar", + "closeSuccess": "Fechado com sucesso", + "closeWarning": "Uma vez fechado, não será possível operar este ticket. Por favor, proceda com cautela.", + "confirm": "Confirmar", + "confirmClose": "Tem certeza de que deseja fechar?", + "createdAt": "Data de Criação", + "inputPlaceholder": "Digite sua pergunta e responderemos o mais rápido possível.", + "open": "abrir", + "reply": "resposta", + "status": ["status", "Aguardando acompanhamento", "Aguardando resposta", "Processado", "Fechado"], + "ticketList": "Lista de Chamados", + "title": "Título", + "updatedAt": "Atualizado em", + "user": "usuário" +} diff --git a/apps/admin/locales/pt-BR/tool.json b/apps/admin/locales/pt-BR/tool.json new file mode 100644 index 0000000..03ce01e --- /dev/null +++ b/apps/admin/locales/pt-BR/tool.json @@ -0,0 +1,26 @@ +{ + "caller": "Chamador", + "cancel": "Cancelar", + "confirmReboot": "Confirmar reinicialização", + "confirmSystemReboot": "Confirmar reinicialização do sistema", + "confirmSystemUpgrade": "Confirmar atualização do sistema", + "confirmUpgrade": "Confirmar atualização", + "currentVersion": "Versão atual do sistema:", + "errors": "Erros", + "ip": "IP", + "lastUpdated": "Última atualização:", + "none": "Nenhum", + "query": "Consulta", + "rebootDescription": "Você tem certeza de que deseja reiniciar o sistema? Esta ação causará uma breve interrupção no serviço.", + "rebooting": "Reiniciando o sistema...", + "refreshLogs": "Atualizar Logs", + "request": "Solicitação", + "status": "Status", + "systemLogs": "Logs do sistema", + "systemReboot": "Reinicialização do sistema", + "systemServices": "Serviços do sistema", + "systemUpgrade": "Atualização do sistema", + "upgradeDescription": "Você tem certeza de que deseja realizar a atualização do sistema? Esta operação pode levar alguns minutos e, durante esse tempo, o sistema pode não responder.", + "userAgent": "Agente do Usuário", + "viewLogsAndManage": "Visualizar logs do sistema, executar atualizações e reiniciar o sistema" +} diff --git a/apps/admin/locales/pt-BR/user.json b/apps/admin/locales/pt-BR/user.json new file mode 100644 index 0000000..fd66704 --- /dev/null +++ b/apps/admin/locales/pt-BR/user.json @@ -0,0 +1,38 @@ +{ + "actions": "ações", + "balance": "Saldo", + "cancel": "Cancelar", + "confirm": "confirmar", + "confirmDelete": "Você tem certeza de que deseja excluir?", + "create": "Criar", + "createSuccess": "Criação bem-sucedida", + "createUser": "Criar Usuário", + "createdAt": "Data de Registro", + "delete": "Excluir", + "deleteDescription": "Após a exclusão, os dados não poderão ser recuperados. Proceda com cautela.", + "deleteSuccess": "Exclusão bem-sucedida", + "edit": "editar", + "editUser": "Editar Usuário", + "email": "e-mail", + "enable": "Habilitar", + "form": { + "balance": "Saldo", + "balancePlaceholder": "Saldo", + "cancel": "Cancelar", + "confirm": "Confirmar", + "invalidEmailFormat": "Formato de e-mail inválido", + "inviteCode": "Código de Convite", + "inviteCodePlaceholder": "Insira o código de convite (deixe em branco para gerar automaticamente)", + "manager": "Administrador", + "password": "Senha", + "passwordPlaceholder": "Insira a nova senha (pode deixar em branco)", + "refererId": "ID do Referente", + "refererIdPlaceholder": "Insira o ID do referente", + "userEmail": "E-mail do Usuário", + "userEmailPlaceholder": "Insira o e-mail do usuário" + }, + "referer": "Referente", + "updateSuccess": "Atualização bem-sucedida", + "userList": "Lista de Usuários", + "userName": "E-mail do usuário" +} diff --git a/apps/admin/locales/ro-RO/announcement.json b/apps/admin/locales/ro-RO/announcement.json new file mode 100644 index 0000000..c8b42c3 --- /dev/null +++ b/apps/admin/locales/ro-RO/announcement.json @@ -0,0 +1,30 @@ +{ + "actions": "acțiuni", + "announcementList": "Listă de anunțuri", + "cancel": "Anulează", + "confirm": "Confirmare", + "confirmDelete": "Sunteți sigur că doriți să ștergeți?", + "content": "Conținut", + "create": "crea", + "createAnnouncement": "Creează anunț", + "createSuccess": "Creat cu succes", + "delete": "șterge", + "deleteDescription": "Odată șters, datele nu vor putea fi recuperate. Vă rugăm să acționați cu prudență.", + "deleteSuccess": "Ștergere reușită", + "edit": "editează", + "editAnnouncement": "Editează anunțul", + "enable": "Activare", + "form": { + "cancel": "Anulează", + "confirm": "Confirmă", + "content": "Conținut", + "contentPlaceholder": "Introduceți conținutul anunțului (suportă Markdown)", + "title": "Titlu", + "titlePlaceholder": "Introduceți" + }, + "hide": "ascunde", + "show": "afișare", + "title": "Titlu", + "updateSuccess": "Actualizare reușită", + "updatedAt": "Actualizat la" +} diff --git a/apps/admin/locales/ro-RO/auth.json b/apps/admin/locales/ro-RO/auth.json new file mode 100644 index 0000000..a02b3d0 --- /dev/null +++ b/apps/admin/locales/ro-RO/auth.json @@ -0,0 +1,39 @@ +{ + "check": { + "checking": "Se verifică...", + "continue": "Continuă", + "description": "Vă rugăm să introduceți adresa de e-mail pentru a continua autentificarea sau înregistrarea.", + "email": "Vă rugăm să introduceți o adresă de e-mail validă.", + "title": "Autentificare/Înregistrare", + "whitelist": "Domeniul adresei de e-mail nu se află pe lista albă permisă." + }, + "login": { + "description": "Vă rugăm să introduceți informațiile contului pentru a vă conecta.", + "forgotPassword": "Ați uitat parola?", + "success": "Autentificare reușită!", + "switchAccount": "Înregistrare/Schimbare cont", + "title": "Autentificare" + }, + "logout": "Deconectare", + "orWithEmail": "sau folosește e-mailul", + "register": { + "description": "Creați un cont nou, completați informațiile dvs. pentru a vă înregistra.", + "existingAccount": "Aveți deja un cont?", + "get": "Obțineți", + "invite": "Cod de invitație", + "message": "#### Stimate utilizator,\n\nVă mulțumim pentru interesul și sprijinul acordat. Datorită ajustării strategiei de operare a site-ului, am închis funcția de înregistrare a utilizatorilor noi. În această perioadă, utilizatorii existenți nu vor fi afectați în niciun fel.\n\nNe angajăm să vă oferim servicii și experiențe mai bune, așa că vom efectua optimizări complete ale sistemului și actualizări ale funcționalităților în perioada în care înregistrarea este închisă. În viitor, vă vom întâmpina cu conținut și servicii de calitate superioară.\n\nVă rugăm să urmăriți site-ul nostru și platformele de social media pentru a obține cele mai recente actualizări și notificări. Vă mulțumim pentru înțelegerea și sprijinul dvs.\n\nDacă aveți întrebări sau aveți nevoie de ajutor, nu ezitați să contactați echipa noastră de asistență clienți.\n\n**Vă mulțumim din nou pentru sprijinul și înțelegerea dvs.**", + "passwordMismatch": "Parolele introduse nu se potrivesc", + "success": "Înregistrare reușită, ați fost conectat automat!", + "switchToLogin": "Conectare/Resetare email", + "title": "Înregistrare" + }, + "reset": { + "description": "Introduceți adresa dvs. de e-mail pentru a reseta parola.", + "existingAccount": "Aveți deja un cont?", + "get": "Obțineți", + "success": "Parola a fost resetată cu succes, ați fost redirecționat automat la autentificare!", + "switchToLogin": "Autentificare/Înregistrare", + "title": "Resetați parola" + }, + "tos": "Termeni și condiții" +} diff --git a/apps/admin/locales/ro-RO/common.json b/apps/admin/locales/ro-RO/common.json new file mode 100644 index 0000000..f7357cc --- /dev/null +++ b/apps/admin/locales/ro-RO/common.json @@ -0,0 +1,60 @@ +{ + "billing": { + "description": "Sponsorizarea ajută PPanel să continue să lanseze actualizări!", + "title": "Sponsori" + }, + "empty": [ + "Imaginează-ți că aici este plin de conținut captivant! Deocamdată, trebuie să ne bazăm pe imaginație...", + "Această zonă a dispărut misterios, dar lucrăm să o aducem înapoi!", + "Ups, nu s-a întâmplat nimic... Poți adăuga tu ceva!", + "E ca și cum ai descoperi că scena unui concert este goală... Vrei să urci și să performezi?", + "Ai găsit un tărâm gol! Vrei să construiești o casă?", + "Deocamdată aici nu este nimic, dar creativitatea începe de aici!", + "Nu este nimic... dar nu-ți face griji, acesta este doar începutul!", + "Aici era pregătită o mare surpriză, dar surpriza a dispărut!", + "Deocamdată nu este nimic, ca și cum dulapul cu gustări ar fi fost golit.", + "Această zonă așteaptă ca protagonistul să-și facă apariția!" + ], + "request": { + "10001": "Interogarea nu a reușit momentan, vă rugăm să încercați din nou mai târziu sau să verificați condițiile dumneavoastră.", + "10002": "Operațiunea de actualizare nu a reușit, vă rugăm să încercați din nou mai târziu.", + "10003": "Nu se poate finaliza momentan operațiunea de inserare, vă rugăm să încercați din nou mai târziu.", + "10004": "Operațiunea de ștergere nu a putut fi finalizată, vă rugăm să încercați din nou mai târziu.", + "20001": "Informațiile despre acest utilizator există deja, vă rugăm să schimbați informațiile și să încercați din nou.", + "20002": "Utilizatorul nu a fost găsit, vă rugăm să verificați informațiile și să încercați din nou.", + "20003": "Parola introdusă este incorectă, vă rugăm să o introduceți din nou.", + "20004": "Acest utilizator a fost dezactivat, dacă aveți întrebări, vă rugăm să contactați serviciul clienți.", + "20005": "Sold insuficient, vă rugăm să reîncărcați și să încercați din nou.", + "20006": "Funcția de înregistrare nu este disponibilă momentan, vă rugăm să încercați din nou mai târziu.", + "30001": "Acest nod există deja, vă rugăm să nu adăugați din nou.", + "30002": "Nodul relevant nu a fost găsit, vă rugăm să verificați și să încercați din nou.", + "30003": "Grupul există deja, vă rugăm să încercați să utilizați un alt nume.", + "30004": "Grupul nu a fost găsit, vă rugăm să verificați informațiile și să încercați din nou.", + "30005": "Grupul conține încă conținut, vă rugăm să goliți și să încercați din nou.", + "400": "Parametrii cererii nu sunt corecți, vă rugăm să verificați și să trimiteți din nou.", + "40002": "Token valid nu a fost găsit, vă rugăm să vă autentificați și să încercați din nou.", + "40003": "Tokenul curent nu este valid, vă rugăm să obțineți unul nou și să încercați din nou.", + "40004": "Tokenul a expirat, vă rugăm să vă autentificați din nou.", + "40005": "Nu aveți permisiunea de acces, dacă aveți întrebări, vă rugăm să contactați administratorul.", + "401": "Solicitările sunt prea frecvente, vă rugăm să încercați din nou mai târziu.", + "500": "Serverul a întâmpinat unele probleme, vă rugăm să încercați din nou mai târziu.", + "50001": "Informațiile despre cupon nu au fost găsite, vă rugăm să verificați și să încercați din nou.", + "50002": "Acest cupon a fost deja utilizat, nu poate fi folosit din nou.", + "60001": "Abonamentul a expirat, vă rugăm să reînnoiți pentru a continua utilizarea.", + "60002": "Nu se poate utiliza momentan acest abonament, vă rugăm să încercați din nou mai târziu.", + "70001": "Codul de verificare este incorect, vă rugăm să îl introduceți din nou.", + "80001": "Sarcina nu a fost adăugată cu succes în coadă, vă rugăm să încercați din nou mai târziu.", + "90001": "Vă rugăm să dezactivați modul DEBUG și să încercați din nou.", + "undefined": "A apărut o eroare în sistem, vă rugăm să încercați din nou mai târziu." + }, + "table": { + "actions": "Acțiuni", + "asc": "Ascendent", + "desc": "Descendent", + "hide": "Ascunde", + "pageInfo": "Pagina {current} din {total}", + "rowsPerPage": "Rânduri pe pagină", + "selectedItems": "{total} rânduri selectate" + }, + "unlimited": "nelimitat" +} diff --git a/apps/admin/locales/ro-RO/coupon.json b/apps/admin/locales/ro-RO/coupon.json new file mode 100644 index 0000000..93df330 --- /dev/null +++ b/apps/admin/locales/ro-RO/coupon.json @@ -0,0 +1,50 @@ +{ + "actions": "acțiuni", + "amount": "Sumă", + "cancel": "Anulare", + "code": "cod", + "confirm": "Confirmare", + "confirmDelete": "Sunteți sigur că doriți să ștergeți?", + "count": "cantitate", + "couponList": "Listă de cupoane", + "create": "crea", + "createCoupon": "Creează cupon", + "createSuccess": "Creat cu succes", + "delete": "șterge", + "deleteSuccess": "Ștergere reușită", + "deleteWarning": "Odată șters, datele nu vor putea fi recuperate. Vă rugăm să acționați cu prudență.", + "discount": "reducere", + "edit": "Editare", + "editCoupon": "Editează cuponul", + "enable": "Activare", + "form": { + "amountDiscount": "Reducere sumă", + "cancel": "Anulează", + "confirm": "Confirmă", + "count": "Număr maxim de utilizări", + "countPlaceholder": "Număr maxim de utilizări (lăsați gol pentru nelimitat)", + "customCouponCode": "Cod promoțional personalizat", + "customCouponCodePlaceholder": "Cod promoțional personalizat (lăsați gol pentru generare automată)", + "enterCouponName": "Introduceți numele cuponului", + "enterValue": "Introduceți valoarea", + "expireTime": "Timp de expirare", + "name": "Nume", + "percentageDiscount": "Reducere procentuală", + "selectServer": "Vă rugăm să selectați abonamentul", + "selectTime": "Selectați timpul", + "specifiedServer": "Abonament specificat", + "startTime": "Timp de începere", + "type": "Tip de cupon", + "userLimit": "Număr maxim de utilizări per utilizator", + "userLimitPlaceholder": "Număr maxim de utilizări per utilizator (lăsați gol pentru nelimitat)" + }, + "name": "Nume", + "percentage": "procentaj", + "remainingTimes": "Rămase", + "subscribe": "Abonare", + "type": "Tip", + "unlimited": "nelimitat", + "updateSuccess": "Actualizare reușită", + "usedTimes": "Număr de utilizări", + "validityPeriod": "Perioada de valabilitate" +} diff --git a/apps/admin/locales/ro-RO/document.json b/apps/admin/locales/ro-RO/document.json new file mode 100644 index 0000000..8315bb7 --- /dev/null +++ b/apps/admin/locales/ro-RO/document.json @@ -0,0 +1,29 @@ +{ + "DocumentList": "Listă de documente", + "actions": "acțiuni", + "cancel": "Anulează", + "confirm": "Confirmare", + "confirmDelete": "Sunteți sigur că doriți să ștergeți?", + "create": "crea", + "createDocument": "Creează document", + "createSuccess": "Creat cu succes", + "delete": "șterge", + "deleteDescription": "Odată șters, datele nu vor putea fi recuperate. Vă rugăm să acționați cu prudență.", + "deleteSuccess": "Ștergere reușită", + "edit": "editează", + "editDocument": "Editare document", + "form": { + "cancel": "Anulează", + "confirm": "Confirmă", + "content": "Conținut", + "tags": "Categorii", + "tagsPlaceholder": "Vă rugăm să folosiți tasta Enter sau virgula (,) pentru a separa și introduce mai multe categorii", + "title": "Titlu", + "titlePlaceholder": "Vă rugăm să introduceți" + }, + "show": "afișare", + "tags": "Categorii", + "title": "Titlu", + "updateSuccess": "Actualizare reușită", + "updatedAt": "Actualizat la" +} diff --git a/apps/admin/locales/ro-RO/index.json b/apps/admin/locales/ro-RO/index.json new file mode 100644 index 0000000..8f836d0 --- /dev/null +++ b/apps/admin/locales/ro-RO/index.json @@ -0,0 +1,29 @@ +{ + "email": "e-mail", + "month": "Luna aceasta", + "monthDownloadTraffic": "Traficul de descărcare din această lună", + "monthUploadTraffic": "Traficul de încărcare din această lună", + "newPurchase": "Achiziție nouă", + "nodeTraffic": "Traficul nodului", + "nodes": "noduri", + "offlineNodeCount": "Număr de noduri offline", + "onlineIPCount": "Număr de IP-uri online", + "onlineNodeCount": "Număr de noduri online", + "pendingTickets": "Tichete în așteptare", + "register": "Înregistrare", + "repurchase": "recomandare", + "revenueTitle": "Statistica Veniturilor", + "selectTypePlaceholder": "Selectați tipul", + "statisticsTitle": "Statistici", + "today": "astăzi", + "todayDownloadTraffic": "Traficul de descărcare de astăzi", + "todayUploadTraffic": "Traficul de încărcare de astăzi", + "total": "Total", + "totalIncome": "Venit total", + "trafficRank": "Clasament trafic", + "type": "tip", + "userTitle": "Statistici utilizator", + "userTraffic": "Trafic utilizator", + "users": "utilizatori", + "yesterday": "ieri" +} diff --git a/apps/admin/locales/ro-RO/language.json b/apps/admin/locales/ro-RO/language.json new file mode 100644 index 0000000..3c26391 --- /dev/null +++ b/apps/admin/locales/ro-RO/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "cehă", + "de-DE": "Germană", + "en-US": "engleză", + "es-ES": "Spaniolă", + "es-MX": "Spaniolă (Mexic)", + "fi-FI": "Finlandeză", + "fr-FR": "franceză", + "hi-IN": "hindi", + "hu-HU": "Maghiară", + "ja-JP": "Japoneză", + "ko-KR": "Coreeană", + "no-NO": "norvegiană", + "pl-PL": "Poloneză", + "pt-BR": "Portugheză (Brazilia)", + "ro-RO": "Română", + "ru-RU": "Rusă", + "th-TH": "Thailandeză", + "tr-TR": "turcă", + "uk-UA": "Ucraineană", + "vi-VN": "Vietnameză", + "zh-CN": "Chineză (Simplificată)", + "zh-TW": "Chineză (tradițională)" +} diff --git a/apps/admin/locales/ro-RO/menu.json b/apps/admin/locales/ro-RO/menu.json new file mode 100644 index 0000000..a7dc26f --- /dev/null +++ b/apps/admin/locales/ro-RO/menu.json @@ -0,0 +1,18 @@ +{ + "Announcement Management": "Managementul Anunțurilor", + "Coupon Management": "Managementul Cuponului", + "Dashboard": "Tablou de bord", + "Document Management": "Managementul documentelor", + "Finance": "Finanțe", + "Order Management": "Gestionarea comenzilor", + "Payment Config": "Configurație Plată", + "Server": "Serviciu", + "Server Management": "Managementul serverului", + "Settings": "Setări", + "Subscribe Management": "Gestionarea abonamentelor", + "System Config": "Configurația sistemului", + "System Tool": "Instrumente de sistem", + "Ticket Management": "Gestionarea Biletelor", + "User": "Utilizator", + "User Management": "Gestionarea Utilizatorilor" +} diff --git a/apps/admin/locales/ro-RO/order.json b/apps/admin/locales/ro-RO/order.json new file mode 100644 index 0000000..dcf0827 --- /dev/null +++ b/apps/admin/locales/ro-RO/order.json @@ -0,0 +1,37 @@ +{ + "amount": "Sumă", + "couponDiscount": "Reducere cupon", + "discount": "Valoare reducere", + "failed": "eșuat", + "feeAmount": "Taxă", + "method": "Metodă de plată", + "methods": { + "alipay_f2f": "Alipay (față în față)", + "balance": "Sold", + "epay": "Epay", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "orderNumber": "Număr comandă", + "status": { + "0": "stare", + "1": "în așteptare pentru plată", + "2": "plătit", + "3": "anulat", + "4": "închis", + "5": "finalizat" + }, + "subscribe": "Abonare", + "subscribePrice": "Preț abonament", + "total": "Total", + "tradeNo": "Număr tranzacție", + "type": { + "0": "Tip", + "1": "Achiziție nouă", + "2": "Reînnoire", + "3": "Resetare trafic", + "4": "Reîncărcare" + }, + "updateTime": "Timp de actualizare", + "user": "utilizator" +} diff --git a/apps/admin/locales/ro-RO/payment.json b/apps/admin/locales/ro-RO/payment.json new file mode 100644 index 0000000..1c1f2c3 --- /dev/null +++ b/apps/admin/locales/ro-RO/payment.json @@ -0,0 +1,44 @@ +{ + "aliPay": "Plată cu Alipay", + "alipayf2f": { + "appId": "ID aplicație Alipay", + "invoiceName": "Nume personalizat produs", + "invoiceNameDescription": "Va apărea în factura Alipay", + "privateKey": "Cheie privată Alipay", + "publicKey": "Cheie publică Alipay", + "sandbox": "Modul sandbox", + "sandboxDescription": "Activează modul sandbox pentru a testa plățile" + }, + "enable": "Activare", + "enableDescription": "Activează această metodă de plată", + "epay": { + "key": "CHEIE", + "pid": "PID", + "url": "URL" + }, + "feeMode": "Mod de taxare", + "feeModeDescription": "Modul de taxare a comisioanelor suplimentare", + "feeModeItems": ["Fără comision", "Procentaj", "Sumă fixă", "Ambele"], + "feePercent": "Taxă procentuală (opțional)", + "feePercentDescription": "Se adaugă o taxă peste suma comenzii", + "fixedFee": "Taxă fixă (opțional)", + "fixedFeeDescription": "Adăugarea unei taxe fixe peste suma comenzii", + "iconUrl": "URL pictogramă (opțional)", + "iconUrlDescription": "Utilizat pentru afișarea în front-end", + "inputPlaceholder": "Introduceți", + "key": "CHEIE", + "notifyUrl": "Domeniu de notificare personalizat (opțional)", + "notifyUrlDescription": "Notificările de la gateway vor fi trimise la acest domeniu", + "payForRecommendations": "Plătește pentru recomandări", + "pid": "PID", + "saveSuccess": "Salvare reușită", + "showName": "Afișează Numele", + "showNameDescription": "Utilizat pentru afișarea în interfața utilizatorului", + "stripe": { + "publicKey": "CHEIE PUBLICĂ", + "secretKey": "CHEIE SECRETĂ", + "webhookSecret": "SEMNĂTURA CHEII WEBHOOK" + }, + "url": "URL", + "wechatPay": "Plată WeChat" +} diff --git a/apps/admin/locales/ro-RO/server.json b/apps/admin/locales/ro-RO/server.json new file mode 100644 index 0000000..ca79254 --- /dev/null +++ b/apps/admin/locales/ro-RO/server.json @@ -0,0 +1,122 @@ +{ + "group": { + "actions": "Acțiuni", + "cancel": "Anulează", + "confirm": "Confirmă", + "confirmDelete": "Sigur doriți să ștergeți?", + "create": "Creează", + "createNodeGroup": "Creează grup de noduri", + "createdSuccessfully": "Creat cu succes", + "delete": "Șterge", + "deleteWarning": "După ștergere, datele nu vor putea fi recuperate, vă rugăm să acționați cu prudență.", + "deletedSuccessfully": "Șters cu succes", + "description": "Descriere", + "edit": "Editează", + "editNodeGroup": "Editează grupul de noduri", + "form": { + "cancel": "Anulează", + "confirm": "Confirmă", + "description": "Descriere", + "name": "Nume" + }, + "name": "Nume", + "title": "Lista grupurilor de noduri", + "updatedAt": "Actualizat la" + }, + "node": { + "abnormal": "Anormal", + "actions": "Acțiuni", + "address": "Adresă", + "all": "Toate", + "cancel": "Anulează", + "confirm": "Confirmă", + "confirmDelete": "Sigur doriți să ștergeți?", + "create": "Creează", + "createNode": "Creează nod", + "createSuccess": "Creat cu succes", + "delete": "Șterge", + "deleteSuccess": "Șters cu succes", + "deleteWarning": "După ștergere, datele nu vor putea fi recuperate. Vă rugăm să acționați cu prudență.", + "disk": "Disc", + "edit": "Editează", + "editNode": "Editează nod", + "enable": "Activează", + "form": { + "allowInsecure": "Permite nesigur", + "cancel": "Anulează", + "confirm": "Confirmă", + "edit": "Editează", + "editSecurity": "Editează configurația de securitate", + "enableRelay": "Activează retransmisia", + "enableTLS": "Activează TLS", + "encryptionMethod": "Metodă de criptare", + "flow": "Algoritm de control al fluxului", + "hopInterval": "Interval de salt", + "hopPorts": "Porturi de salt", + "hopPortsPlaceholder": "Mai multe porturi separate prin virgulă", + "name": "Nume", + "nodeGroupId": "ID grup nod", + "obfsPassword": "Parolă de obfuscare", + "obfsPasswordPlaceholder": "Lasă gol pentru a nu obfusca", + "path": "Cale", + "pleaseSelect": "Vă rugăm să selectați", + "port": "Port server", + "protocol": "Protocol", + "relayHost": "Adresă retransmisie", + "relayPort": "Port retransmisie", + "remarks": "Observații", + "security": "Securitate", + "securityConfig": "Configurație de securitate", + "security_config": { + "fingerprint": "Amprentă", + "privateKey": "Cheie privată", + "privateKeyPlaceholder": "Lasă gol pentru generare automată", + "publicKey": "Cheie publică", + "publicKeyPlaceholder": "Lasă gol pentru generare automată", + "serverAddress": "Adresă server", + "serverAddressPlaceholder": "Adresă țintă REALITY, implicit SNI", + "serverName": "Nume server (SNI)", + "serverNamePlaceholder": "Obligatoriu pentru REALITY, trebuie să corespundă cu backend-ul", + "serverPort": "Port server", + "serverPortPlaceholder": "Port țintă REALITY, implicit 443", + "shortId": "ID scurt", + "shortIdPlaceholder": "Lasă gol pentru generare automată", + "sni": "Indicație nume server (SNI)" + }, + "selectEncryptionMethod": "Selectați metoda de criptare", + "selectNodeGroup": "Selectați grupul de noduri", + "selectProtocol": "Selectați protocolul", + "serverAddr": "Adresă server", + "serverName": "Nume serviciu", + "speedLimit": "Limită de viteză", + "speedLimitPlaceholder": "Nelimitat", + "trafficRatio": "Rata de trafic", + "transport": "Protocol de transport", + "transportConfig": "Configurație protocol de transport", + "transportHost": "Adresă serviciu de transport", + "transportPath": "Cale de transport", + "transportServerName": "Nume serviciu de transport" + }, + "lastUpdated": "Ultima actualizare", + "memory": "Memorie", + "name": "Nume", + "node": "Nod", + "nodeGroup": "Grup de noduri", + "normal": "Normal", + "onlineCount": "Număr de utilizatori online", + "onlineUsers": "Utilizatori online", + "rate": "Rată", + "relay": "Retransmisie", + "serverAddr": "Adresă server", + "speedLimit": "Limită de viteză", + "status": "Stare", + "trafficRatio": "Rata de trafic", + "type": "Tip", + "updateSuccess": "Actualizat cu succes", + "updatedAt": "Data actualizării" + }, + "tabs": { + "node": "Nod", + "nodeGroup": "Grup de noduri" + } +} diff --git a/apps/admin/locales/ro-RO/subscribe.json b/apps/admin/locales/ro-RO/subscribe.json new file mode 100644 index 0000000..5ef7236 --- /dev/null +++ b/apps/admin/locales/ro-RO/subscribe.json @@ -0,0 +1,79 @@ +{ + "actions": "acțiuni", + "cancel": "Anulează", + "confirm": "Confirmare", + "confirmDelete": "Sigur doriți să ștergeți?", + "create": "crea", + "createSubscribe": "Creează abonament", + "createSuccess": "Creare reușită", + "delete": "șterge", + "deleteSuccess": "Ștergere reușită", + "deleteWarning": "După ștergere, datele nu pot fi recuperate, vă rugăm să acționați cu prudență.", + "deviceLimit": "Număr de dispozitive", + "edit": "editează", + "editSubscribe": "Editează abonamentul", + "form": { + "cancel": "Anulează", + "confirm": "Confirmă", + "description": "Descriere", + "deviceLimit": "Limită dispozitive", + "discount": "Reducere", + "discountDescription": "Reducere bazată pe preț unitar", + "discountMonths": "luni", + "discountPercent": "Procent reducere", + "discount_price": "Preț redus", + "duration": "Durată (luni)", + "inventory": "Stoc", + "name": "Nume", + "noLimit": "Fără limită", + "quota": "Limită de achiziție", + "replacement": "Preț de înlocuire (per dată)", + "selectSubscribeGroup": "Vă rugăm să selectați grupul de abonament", + "server": "Server", + "serverGroup": "Grup server", + "speedLimit": "Limită de viteză (Mbps)", + "subscribeGroup": "Grup de abonament", + "traffic": "Trafic", + "unit_price": "Preț lunar unitar" + }, + "group": { + "actions": "Acțiuni", + "cancel": "Anulează", + "confirm": "Confirmă", + "confirmDelete": "Sigur doriți să ștergeți?", + "create": "Creează", + "createSubscribeGroup": "Creează un grup de abonamente", + "createSuccess": "Creat cu succes", + "delete": "Șterge", + "deleteSuccess": "Șters cu succes", + "deleteWarning": "După ștergere, datele nu pot fi recuperate, vă rugăm să acționați cu prudență.", + "description": "Descriere", + "edit": "Editează", + "editSubscribeGroup": "Editează grupul de abonamente", + "form": { + "cancel": "Anulează", + "confirm": "Confirmă", + "description": "Descriere", + "name": "Nume" + }, + "name": "Nume", + "title": "Lista grupurilor de abonamente", + "updateSuccess": "Actualizat cu succes", + "updatedAt": "Data actualizării" + }, + "inventory": "inventar", + "name": "Nume", + "quota": "Limită de achiziție/pe tranzacție", + "replacement": "Resetare preț/pe utilizare", + "sell": "Vânzare", + "show": "Afișare pe pagina principală", + "subscribe": "Abonare", + "subscribeGroup": "Abonare grup", + "tabs": { + "subscribe": "Abonare", + "subscribeGroup": "Grup de abonare" + }, + "traffic": "trafic", + "unitPrice": "Preț/lună", + "updateSuccess": "Actualizare reușită" +} diff --git a/apps/admin/locales/ro-RO/system.json b/apps/admin/locales/ro-RO/system.json new file mode 100644 index 0000000..e057dd1 --- /dev/null +++ b/apps/admin/locales/ro-RO/system.json @@ -0,0 +1,156 @@ +{ + "currency": { + "accessKey": "Cheie de acces", + "accessKeyDescription": "https://exchangerate.host oferă gratuit o cheie API pentru ratele de schimb", + "currencySymbol": "Simbolul monedei", + "currencySymbolDescription": "Utilizat doar pentru afișare, după modificare toate unitățile monetare din sistem vor fi schimbate", + "currencyUnit": "Unitatea monetară", + "currencyUnitDescription": "Utilizat doar pentru afișare, după modificare toate unitățile monetare din sistem vor fi schimbate", + "saveSuccess": "Salvare reușită" + }, + "email": { + "expiration_email_template": "Șablon notificare expirare", + "expiration_email_templateDescription": "Variabilele {after}.numeVariabilă{before} din șablon vor fi înlocuite cu datele reale, asigurați-vă că păstrați aceste variabile.", + "inputPlaceholder": "Vă rugăm să introduceți conținutul...", + "maintenance_email_template": "Șablon notificare întreținere", + "maintenance_email_templateDescription": "Variabilele {after}.numeVariabilă{before} din șablon vor fi înlocuite cu datele reale, asigurați-vă că păstrați aceste variabile.", + "saveSuccess": "Configurația a fost salvată cu succes.", + "sendFailure": "Trimiterea e-mailului de test a eșuat, vă rugăm să verificați configurația.", + "sendSuccess": "E-mailul de test a fost trimis cu succes.", + "sendTestEmail": "Trimite e-mail de test", + "sendTestEmailDescription": "Trimiteți un e-mail de test pentru a verifica dacă configurația este corectă.", + "senderAddress": "Adresa expeditorului", + "senderAddressDescription": "Adresa de e-mail implicită utilizată pentru trimiterea e-mailurilor.", + "smtpAccount": "Cont SMTP", + "smtpAccountDescription": "Contul de e-mail utilizat pentru autentificare.", + "smtpEncryptionMethod": "Metoda de criptare SMTP", + "smtpEncryptionMethodDescription": "Selectați dacă doriți să activați criptarea SSL/TLS.", + "smtpPassword": "Parola SMTP", + "smtpPasswordDescription": "Parola pentru acest cont SMTP.", + "smtpServerAddress": "Adresa serverului SMTP", + "smtpServerAddressDescription": "Specificați adresa serverului utilizat pentru trimiterea e-mailurilor.", + "smtpServerPort": "Portul serverului SMTP", + "smtpServerPortDescription": "Specificați numărul portului utilizat pentru conectarea la serverul SMTP.", + "verify_email_template": "Șablon e-mail de verificare", + "verify_email_templateDescription": "Variabilele {after}.numeVariabilă{before} din șablon vor fi înlocuite cu datele reale, asigurați-vă că păstrați aceste variabile." + }, + "invite": { + "commissionFirstTimeOnly": "Comision doar la prima achiziție", + "commissionFirstTimeOnlyDescription": "După activare, comisionul este generat doar la prima plată a persoanei invitate. Puteți configura utilizatori individuali în gestionarea utilizatorilor.", + "enableForcedInvite": "Activează invitația obligatorie", + "enableForcedInviteDescription": "După activare, doar utilizatorii invitați se pot înregistra.", + "inputPlaceholder": "Vă rugăm să introduceți", + "inviteCommissionPercentage": "Procentul comisionului de invitație", + "inviteCommissionPercentageDescription": "Procentul implicit de distribuire a comisionului la nivel global. Puteți configura un procent individual în gestionarea utilizatorilor.", + "saveSuccess": "Salvare reușită" + }, + "node": { + "communicationKey": "Cheie de comunicare", + "communicationKeyDescription": "Cheia de comunicare a nodului, pentru a asigura că datele nu sunt interceptate de alții", + "inputPlaceholder": "Vă rugăm să introduceți", + "nodePullInterval": "Interval de extragere a nodului", + "nodePullIntervalDescription": "Frecvența cu care nodul obține date de la panou (secunde)", + "nodePushInterval": "Interval de împingere a nodului", + "nodePushIntervalDescription": "Frecvența cu care nodul trimite date către panou", + "saveSuccess": "Salvare reușită" + }, + "register": { + "emailSuffixWhitelist": "Lista albă a sufixelor de e-mail", + "emailSuffixWhitelistDescription": "După activare, doar e-mailurile cu sufixele din listă vor putea să se înregistreze", + "emailVerification": "Verificare e-mail", + "emailVerificationDescription": "După activare, utilizatorii vor trebui să-și verifice e-mailul", + "ipRegistrationLimit": "Limită de înregistrare IP", + "ipRegistrationLimitDescription": "După activare, IP-urile care îndeplinesc cerințele regulilor vor fi restricționate de la înregistrare. Vă rugăm să rețineți că, din cauza CDN-ului sau a proxy-ului frontal, determinarea IP-ului poate cauza probleme", + "penaltyTime": "Timp de penalizare (minute)", + "penaltyTimeDescription": "Utilizatorii trebuie să aștepte să treacă timpul de penalizare pentru a se putea înregistra din nou", + "registrationLimitCount": "Număr limită de înregistrări", + "registrationLimitCountDescription": "După atingerea limitei de înregistrare, se activează penalizarea", + "saveSuccess": "Salvare reușită", + "stopNewUserRegistration": "Oprire înregistrare utilizatori noi", + "stopNewUserRegistrationDescription": "După activare, nimeni nu se poate înregistra", + "trialRegistration": "Înregistrare de probă", + "trialRegistrationDescription": "Activați înregistrarea de probă, vă rugăm să modificați mai întâi pachetul și durata de probă", + "whitelistSuffixes": "Sufixe listă albă", + "whitelistSuffixesDescription": "Pentru verificarea e-mailului la înregistrare, câte unul pe linie", + "whitelistSuffixesPlaceholder": "Vă rugăm să introduceți sufixele de e-mail, câte unul pe linie" + }, + "site": { + "logo": "LOGO", + "logoDescription": "Utilizat pentru a afișa locația unde trebuie să fie prezentat LOGO-ul", + "logoPlaceholder": "Vă rugăm să introduceți adresa URL a LOGO-ului, fără să se termine cu '/'", + "saveSuccess": "Salvare reușită", + "siteDesc": "Descrierea site-ului", + "siteDescDescription": "Utilizat pentru a afișa locația unde trebuie să fie prezentată descrierea site-ului", + "siteDescPlaceholder": "Vă rugăm să introduceți descrierea site-ului", + "siteDomain": "Domeniul site-ului", + "siteDomainDescription": "Adresa domeniului actual al site-ului, de exemplu pentru utilizare în e-mailuri", + "siteDomainPlaceholder": "Vă rugăm să introduceți adresa domeniului, câte un domeniu pe linie", + "siteName": "Numele site-ului", + "siteNameDescription": "Utilizat pentru a afișa locația unde trebuie să fie prezentat numele site-ului", + "siteNamePlaceholder": "Vă rugăm să introduceți numele site-ului" + }, + "subscription": { + "add": "Adaugă", + "app": "Aplicație", + "appDescription": "Configurează adresa de descărcare și regulile de import ale aplicației, nu uita să salvezi după modificare", + "appDownloadURL": "Adresa de descărcare a aplicației", + "appIcon": "Iconița aplicației", + "appName": "Numele aplicației", + "delete": "Șterge", + "reset": "Resetează", + "save": "Salvează", + "saveSuccess": "Salvare reușită", + "singleSubscriptionMode": "Mod abonament unic", + "singleSubscriptionModeDescription": "Odată activat, toate pachetele utilizatorilor vor fi convertite în sold", + "subscriptionDomain": "Domeniu abonament", + "subscriptionDomainDescription": "Folosit pentru abonament, lăsați gol pentru a folosi domeniul site-ului", + "subscriptionDomainPlaceholder": "Introduceți domeniul abonamentului, pentru mai multe domenii introduceți câte unul pe linie", + "subscriptionPath": "Calea abonamentului", + "subscriptionPathDescription": "Folosit pentru abonament, după modificare, asigurați-vă că reporniți sistemul pentru a asigura o experiență optimă", + "subscriptionPathPlaceholder": "Introduceți", + "subscriptionProtocol": "Protocol abonament", + "wildcardResolution": "Rezoluție wildcard", + "wildcardResolutionDescription": "Folosit pentru abonament" + }, + "tabs": { + "currency": "Monedă", + "email": "E-mail", + "invite": "Invitație", + "node": "Nod", + "register": "Înregistrare", + "site": "Site", + "subscription": "Abonament", + "telegram": "Telegram", + "tos": "Termeni de serviciu", + "verify": "Verificare" + }, + "telegram": { + "botToken": "Token Bot", + "botTokenDescription": "Vă rugăm să introduceți token-ul furnizat de Botfather", + "enableBotNotifications": "Activează notificările Bot", + "enableBotNotificationsDescription": "După activare, botul va trimite notificări de bază administratorilor și utilizatorilor care au legat Telegram", + "groupURL": "URL Grup", + "groupURLDescription": "După completare, va fi afișat pe partea utilizatorului sau utilizat acolo unde este necesar", + "inputPlaceholderBotToken": "0000000000:xxxxxxxxx_xxxxxxxxxxxxxxx", + "inputPlaceholderGroupURL": "https://t.me/xxxxxx", + "saveSuccess": "Salvare reușită" + }, + "tos": { + "saveSuccess": "Salvare reușită", + "title": "Termeni de serviciu" + }, + "verify": { + "inputPlaceholder": "Introduceți", + "loginVerificationCode": "Cod de verificare pentru autentificare", + "loginVerificationCodeDescription": "Verificare umană la autentificare", + "registrationVerificationCode": "Cod de verificare pentru înregistrare", + "registrationVerificationCodeDescription": "Verificare umană la înregistrare", + "resetPasswordVerificationCode": "Cod de verificare pentru resetarea parolei", + "resetPasswordVerificationCodeDescription": "Verificare umană la resetarea parolei", + "saveSuccess": "Salvare reușită", + "turnstileSecret": "Cheie secretă Turnstile", + "turnstileSecretDescription": "Cheia secretă Turnstile furnizată de Cloudflare", + "turnstileSiteKey": "Cheie de site Turnstile", + "turnstileSiteKeyDescription": "Cheia de site Turnstile furnizată de Cloudflare" + } +} diff --git a/apps/admin/locales/ro-RO/ticket.json b/apps/admin/locales/ro-RO/ticket.json new file mode 100644 index 0000000..e4bedf7 --- /dev/null +++ b/apps/admin/locales/ro-RO/ticket.json @@ -0,0 +1,19 @@ +{ + "actions": "acțiuni", + "cancel": "Anulează", + "check": "Verificare", + "close": "Închide", + "closeSuccess": "Închidere reușită", + "closeWarning": "Odată închis, nu veți mai putea opera acest tichet. Vă rugăm să acționați cu prudență.", + "confirm": "Confirmare", + "confirmClose": "Sigur doriți să închideți?", + "createdAt": "Data creării", + "inputPlaceholder": "Introduceți întrebarea dumneavoastră și vă vom răspunde cât mai curând posibil.", + "open": "Deschide", + "reply": "răspuns", + "status": ["stare", "de urmat", "de răspuns", "procesat", "închis"], + "ticketList": "Listă de tichete", + "title": "Titlu", + "updatedAt": "Actualizat la", + "user": "utilizator" +} diff --git a/apps/admin/locales/ro-RO/tool.json b/apps/admin/locales/ro-RO/tool.json new file mode 100644 index 0000000..7d665b0 --- /dev/null +++ b/apps/admin/locales/ro-RO/tool.json @@ -0,0 +1,26 @@ +{ + "caller": "Apelant", + "cancel": "Anulare", + "confirmReboot": "Confirmare repornire", + "confirmSystemReboot": "Confirmați repornirea sistemului", + "confirmSystemUpgrade": "Confirmați actualizarea sistemului", + "confirmUpgrade": "Confirmă actualizarea", + "currentVersion": "Versiunea curentă a sistemului:", + "errors": "Erori", + "ip": "IP", + "lastUpdated": "Ultima actualizare:", + "none": "Niciunul", + "query": "Interogare", + "rebootDescription": "Sunteți sigur că doriți să reporniți sistemul? Această acțiune va provoca o întrerupere temporară a serviciului.", + "rebooting": "Se repornește sistemul...", + "refreshLogs": "Reîmprospătează jurnalele", + "request": "Cerere", + "status": "Stare", + "systemLogs": "Jurnale de sistem", + "systemReboot": "Repornire sistem", + "systemServices": "Servicii de sistem", + "systemUpgrade": "Actualizare sistem", + "upgradeDescription": "Sunteți sigur că doriți să efectuați o actualizare a sistemului? Această operațiune poate dura câteva minute, timp în care sistemul poate să nu răspundă.", + "userAgent": "Agent Utilizator", + "viewLogsAndManage": "Vizualizați jurnalele de sistem, efectuați actualizări de sistem și operațiuni de repornire" +} diff --git a/apps/admin/locales/ro-RO/user.json b/apps/admin/locales/ro-RO/user.json new file mode 100644 index 0000000..58293b2 --- /dev/null +++ b/apps/admin/locales/ro-RO/user.json @@ -0,0 +1,38 @@ +{ + "actions": "acțiuni", + "balance": "Sold", + "cancel": "Anulare", + "confirm": "Confirmare", + "confirmDelete": "Sunteți sigur că doriți să ștergeți?", + "create": "crea", + "createSuccess": "Creat cu succes", + "createUser": "Creează utilizator", + "createdAt": "Data înregistrării", + "delete": "șterge", + "deleteDescription": "După ștergere, datele nu pot fi recuperate, vă rugăm să acționați cu prudență.", + "deleteSuccess": "Ștergere reușită", + "edit": "editează", + "editUser": "Editare utilizator", + "email": "e-mail", + "enable": "Activare", + "form": { + "balance": "Sold", + "balancePlaceholder": "Sold", + "cancel": "Anulează", + "confirm": "Confirmă", + "invalidEmailFormat": "Format de e-mail invalid", + "inviteCode": "Cod de invitație", + "inviteCodePlaceholder": "Introduceți codul de invitație (lăsați gol pentru generare automată)", + "manager": "Administrator", + "password": "Parolă", + "passwordPlaceholder": "Introduceți o parolă nouă (poate fi lăsată goală)", + "refererId": "ID recomandant", + "refererIdPlaceholder": "Introduceți ID-ul recomandantului", + "userEmail": "E-mail utilizator", + "userEmailPlaceholder": "Introduceți e-mailul utilizatorului" + }, + "referer": "Referent", + "updateSuccess": "Actualizare reușită", + "userList": "Lista utilizatorilor", + "userName": "Email utilizator" +} diff --git a/apps/admin/locales/ru-RU/announcement.json b/apps/admin/locales/ru-RU/announcement.json new file mode 100644 index 0000000..5567049 --- /dev/null +++ b/apps/admin/locales/ru-RU/announcement.json @@ -0,0 +1,30 @@ +{ + "actions": "Действия", + "announcementList": "Список объявлений", + "cancel": "Отмена", + "confirm": "Подтвердить", + "confirmDelete": "Вы уверены, что хотите удалить?", + "content": "содержание", + "create": "Создать", + "createAnnouncement": "Создать объявление", + "createSuccess": "Создание успешно", + "delete": "Удалить", + "deleteDescription": "После удаления данные не могут быть восстановлены. Пожалуйста, действуйте осторожно.", + "deleteSuccess": "Удаление успешно", + "edit": "редактировать", + "editAnnouncement": "Редактировать объявление", + "enable": "Включить", + "form": { + "cancel": "Отмена", + "confirm": "Подтвердить", + "content": "Содержание", + "contentPlaceholder": "Пожалуйста, введите содержание объявления (поддерживается Markdown)", + "title": "Заголовок", + "titlePlaceholder": "Пожалуйста, введите" + }, + "hide": "скрыть", + "show": "Показать", + "title": "Заголовок", + "updateSuccess": "Обновление успешно", + "updatedAt": "Обновлено" +} diff --git a/apps/admin/locales/ru-RU/auth.json b/apps/admin/locales/ru-RU/auth.json new file mode 100644 index 0000000..0902587 --- /dev/null +++ b/apps/admin/locales/ru-RU/auth.json @@ -0,0 +1,39 @@ +{ + "check": { + "checking": "Проверка...", + "continue": "Продолжить", + "description": "Пожалуйста, введите ваш адрес электронной почты для продолжения входа или регистрации.", + "email": "Пожалуйста, введите действительный адрес электронной почты.", + "title": "Вход/Регистрация", + "whitelist": "Домен электронной почты не входит в разрешенный белый список." + }, + "login": { + "description": "Пожалуйста, введите данные вашей учетной записи для входа.", + "forgotPassword": "Забыли пароль?", + "success": "Вход выполнен успешно!", + "switchAccount": "Регистрация/Сменить аккаунт", + "title": "Вход" + }, + "logout": "Выйти из системы", + "orWithEmail": "или с помощью электронной почты", + "register": { + "description": "Создайте новый аккаунт, заполните свои данные для регистрации.", + "existingAccount": "Уже есть аккаунт?", + "get": "Получить", + "invite": "Код приглашения", + "message": "#### Уважаемый пользователь!\n\nБлагодарим вас за интерес и поддержку. В связи с изменением стратегии работы сайта, мы закрыли функцию регистрации новых пользователей. В этот период использование существующими пользователями не будет затронуто.\n\nМы стремимся предоставить вам лучший сервис и опыт, поэтому в период закрытия регистрации будет проведена полная оптимизация системы и обновление функций. В будущем мы встретим вас с более качественным контентом и услугами.\n\nПожалуйста, следите за нашим сайтом и социальными сетями, чтобы получать последние новости и уведомления. Благодарим за ваше понимание и поддержку.\n\nЕсли у вас есть вопросы или нужна помощь, пожалуйста, свяжитесь с нашей службой поддержки.\n\n**Еще раз благодарим за вашу поддержку и понимание.**", + "passwordMismatch": "Введенные пароли не совпадают", + "success": "Регистрация успешна, вы автоматически вошли в систему!", + "switchToLogin": "Войти/Сбросить почту", + "title": "Регистрация" + }, + "reset": { + "description": "Пожалуйста, введите ваш адрес электронной почты, чтобы сбросить пароль.", + "existingAccount": "Уже есть аккаунт?", + "get": "Получить", + "success": "Пароль успешно сброшен, автоматически переключено на вход!", + "switchToLogin": "Вход/Регистрация", + "title": "Сброс пароля" + }, + "tos": "Условия обслуживания" +} diff --git a/apps/admin/locales/ru-RU/common.json b/apps/admin/locales/ru-RU/common.json new file mode 100644 index 0000000..2830fd5 --- /dev/null +++ b/apps/admin/locales/ru-RU/common.json @@ -0,0 +1,60 @@ +{ + "billing": { + "description": "Спонсорство помогает PPanel продолжать выпускать обновления!", + "title": "Спонсоры" + }, + "empty": [ + "Представьте, что здесь полно удивительного контента! Пока что только воображение…", + "Эта область таинственно исчезла, мы пытаемся вернуть её обратно!", + "Ой, ничего не произошло… может, вы что-то добавите сами!", + "Это как на концерте обнаружить, что на сцене никого нет… может, вы хотите выступить?", + "Вы нашли пустую землю! Хотите построить дом?", + "Здесь пока ничего нет, но именно здесь начинается творчество!", + "Ничего нет… но не волнуйтесь, это только начало!", + "Здесь был приготовлен большой сюрприз, но он ускользнул!", + "Пока ничего нет, как будто шкаф со сладостями опустел.", + "Эта пустая площадка ждёт своего главного героя!" + ], + "request": { + "10001": "Запрос пока не удался, пожалуйста, повторите попытку позже или проверьте ваши условия.", + "10002": "Операция обновления не удалась, пожалуйста, попробуйте позже.", + "10003": "Вставка временно невозможна, пожалуйста, попробуйте позже.", + "10004": "Удаление не удалось, пожалуйста, попробуйте позже.", + "20001": "Информация о пользователе уже существует, пожалуйста, измените данные и попробуйте снова.", + "20002": "Пользователь не найден, пожалуйста, проверьте информацию и попробуйте снова.", + "20003": "Введённый вами пароль неверен, пожалуйста, введите его снова.", + "20004": "Пользователь заблокирован, если у вас есть вопросы, пожалуйста, свяжитесь с поддержкой.", + "20005": "Недостаточно средств, пожалуйста, пополните баланс и попробуйте снова.", + "20006": "Регистрация временно недоступна, пожалуйста, попробуйте позже.", + "30001": "Узел уже существует, пожалуйста, не добавляйте его повторно.", + "30002": "Связанный узел не найден, пожалуйста, проверьте и попробуйте снова.", + "30003": "Группа уже существует, пожалуйста, попробуйте использовать другое название.", + "30004": "Группа не найдена, пожалуйста, проверьте информацию и попробуйте снова.", + "30005": "В группе всё ещё есть содержимое, пожалуйста, очистите её и попробуйте снова.", + "400": "Параметры запроса некорректны, пожалуйста, проверьте и отправьте снова.", + "40002": "Действительный токен не найден, пожалуйста, войдите в систему и попробуйте снова.", + "40003": "Текущий токен недействителен, пожалуйста, получите новый и попробуйте снова.", + "40004": "Срок действия токена истёк, пожалуйста, войдите в систему снова.", + "40005": "У вас нет доступа, если у вас есть вопросы, пожалуйста, свяжитесь с администратором.", + "401": "Слишком частые запросы, пожалуйста, попробуйте позже.", + "500": "Сервер столкнулся с проблемами, пожалуйста, попробуйте позже.", + "50001": "Информация о купоне не найдена, пожалуйста, проверьте и попробуйте снова.", + "50002": "Купон уже использован, повторное использование невозможно.", + "60001": "Подписка истекла, пожалуйста, продлите её и используйте снова.", + "60002": "Подписка временно недоступна, пожалуйста, попробуйте позже.", + "70001": "Код подтверждения неверен, пожалуйста, введите его снова.", + "80001": "Задача не была успешно добавлена в очередь, пожалуйста, попробуйте позже.", + "90001": "Пожалуйста, отключите режим DEBUG и попробуйте снова.", + "undefined": "Произошла ошибка в системе, пожалуйста, попробуйте позже." + }, + "table": { + "actions": "Действия", + "asc": "По возрастанию", + "desc": "По убыванию", + "hide": "Скрыть", + "pageInfo": "Страница {current} из {total}", + "rowsPerPage": "Строк на странице", + "selectedItems": "Выбрано {total} строк" + }, + "unlimited": "неограниченный" +} diff --git a/apps/admin/locales/ru-RU/coupon.json b/apps/admin/locales/ru-RU/coupon.json new file mode 100644 index 0000000..6b20833 --- /dev/null +++ b/apps/admin/locales/ru-RU/coupon.json @@ -0,0 +1,50 @@ +{ + "actions": "действия", + "amount": "сумма", + "cancel": "Отмена", + "code": "код", + "confirm": "Подтвердить", + "confirmDelete": "Вы уверены, что хотите удалить?", + "count": "количество", + "couponList": "Список купонов", + "create": "Создать", + "createCoupon": "Создать купон", + "createSuccess": "Создание успешно", + "delete": "Удалить", + "deleteSuccess": "Удаление успешно", + "deleteWarning": "После удаления данные не могут быть восстановлены. Пожалуйста, действуйте осторожно.", + "discount": "скидка", + "edit": "редактировать", + "editCoupon": "Редактировать купон", + "enable": "Включить", + "form": { + "amountDiscount": "Скидка на сумму", + "cancel": "Отмена", + "confirm": "Подтвердить", + "count": "Максимальное количество использований", + "countPlaceholder": "Максимальное количество использований (оставьте пустым для неограниченного)", + "customCouponCode": "Пользовательский код купона", + "customCouponCodePlaceholder": "Пользовательский код купона (оставьте пустым для автоматической генерации)", + "enterCouponName": "Введите название купона", + "enterValue": "Введите значение", + "expireTime": "Время истечения", + "name": "Название", + "percentageDiscount": "Скидка в процентах", + "selectServer": "Пожалуйста, выберите подписку", + "selectTime": "Выберите время", + "specifiedServer": "Указанная подписка", + "startTime": "Время начала действия", + "type": "Тип купона", + "userLimit": "Максимальное количество использований на пользователя", + "userLimitPlaceholder": "Максимальное количество использований на пользователя (оставьте пустым для неограниченного)" + }, + "name": "название", + "percentage": "процент", + "remainingTimes": "Осталось", + "subscribe": "Подписаться", + "type": "Тип", + "unlimited": "неограниченный", + "updateSuccess": "Обновление успешно", + "usedTimes": "Количество использований", + "validityPeriod": "Срок действия" +} diff --git a/apps/admin/locales/ru-RU/document.json b/apps/admin/locales/ru-RU/document.json new file mode 100644 index 0000000..0c39001 --- /dev/null +++ b/apps/admin/locales/ru-RU/document.json @@ -0,0 +1,29 @@ +{ + "DocumentList": "Список документов", + "actions": "Действия", + "cancel": "Отмена", + "confirm": "Подтвердить", + "confirmDelete": "Вы уверены, что хотите удалить?", + "create": "Создать", + "createDocument": "Создать документ", + "createSuccess": "Создание успешно", + "delete": "Удалить", + "deleteDescription": "После удаления данные не могут быть восстановлены. Пожалуйста, действуйте осторожно.", + "deleteSuccess": "Удаление успешно", + "edit": "редактировать", + "editDocument": "Редактировать документ", + "form": { + "cancel": "Отмена", + "confirm": "Подтвердить", + "content": "Содержание", + "tags": "Категории", + "tagsPlaceholder": "Пожалуйста, используйте клавишу Enter или запятую (,) для разделения и ввода нескольких категорий", + "title": "Заголовок", + "titlePlaceholder": "Пожалуйста, введите" + }, + "show": "Показать", + "tags": "Категории", + "title": "Заголовок", + "updateSuccess": "Обновление успешно", + "updatedAt": "Обновлено в" +} diff --git a/apps/admin/locales/ru-RU/index.json b/apps/admin/locales/ru-RU/index.json new file mode 100644 index 0000000..68b56df --- /dev/null +++ b/apps/admin/locales/ru-RU/index.json @@ -0,0 +1,29 @@ +{ + "email": "Электронная почта", + "month": "Этот месяц", + "monthDownloadTraffic": "Трафик загрузки за месяц", + "monthUploadTraffic": "Трафик загрузки за этот месяц", + "newPurchase": "Новая покупка", + "nodeTraffic": "Трафик узла", + "nodes": "узлы", + "offlineNodeCount": "Количество офлайн-узлов", + "onlineIPCount": "Количество онлайн IP", + "onlineNodeCount": "Количество онлайн-узлов", + "pendingTickets": "Ожидающие заявки", + "register": "Регистрация", + "repurchase": "повторная покупка", + "revenueTitle": "Статистика доходов", + "selectTypePlaceholder": "Выберите тип", + "statisticsTitle": "Статистика", + "today": "Сегодня", + "todayDownloadTraffic": "Сегодняшний трафик загрузки", + "todayUploadTraffic": "Сегодняшний объем загруженного трафика", + "total": "Итого", + "totalIncome": "Общий доход", + "trafficRank": "Рейтинг трафика", + "type": "Тип", + "userTitle": "Статистика пользователей", + "userTraffic": "Пользовательский трафик", + "users": "пользователи", + "yesterday": "вчера" +} diff --git a/apps/admin/locales/ru-RU/language.json b/apps/admin/locales/ru-RU/language.json new file mode 100644 index 0000000..c782156 --- /dev/null +++ b/apps/admin/locales/ru-RU/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "Чешский", + "de-DE": "Немецкий", + "en-US": "английский", + "es-ES": "испанский", + "es-MX": "испанский (Мексика)", + "fi-FI": "финский", + "fr-FR": "Французский", + "hi-IN": "хинди", + "hu-HU": "Венгерский", + "ja-JP": "японский", + "ko-KR": "Корейский", + "no-NO": "Норвежский", + "pl-PL": "польский", + "pt-BR": "португальский (Бразилия)", + "ro-RO": "румынский", + "ru-RU": "Русский", + "th-TH": "тайский", + "tr-TR": "Турецкий", + "uk-UA": "Украинский", + "vi-VN": "вьетнамский", + "zh-CN": "Китайский (упрощенный)", + "zh-TW": "китайский (традиционный)" +} diff --git a/apps/admin/locales/ru-RU/menu.json b/apps/admin/locales/ru-RU/menu.json new file mode 100644 index 0000000..e751740 --- /dev/null +++ b/apps/admin/locales/ru-RU/menu.json @@ -0,0 +1,18 @@ +{ + "Announcement Management": "Управление объявлениями", + "Coupon Management": "Управление купонами", + "Dashboard": "Панель управления", + "Document Management": "Управление документами", + "Finance": "Финансы", + "Order Management": "Управление заказами", + "Payment Config": "Настройки оплаты", + "Server": "Сервер", + "Server Management": "Управление сервером", + "Settings": "Настройки", + "Subscribe Management": "Управление подписками", + "System Config": "Системная конфигурация", + "System Tool": "Системные инструменты", + "Ticket Management": "Управление заявками", + "User": "Пользователь", + "User Management": "Управление пользователями" +} diff --git a/apps/admin/locales/ru-RU/order.json b/apps/admin/locales/ru-RU/order.json new file mode 100644 index 0000000..6464947 --- /dev/null +++ b/apps/admin/locales/ru-RU/order.json @@ -0,0 +1,37 @@ +{ + "amount": "Сумма", + "couponDiscount": "Скидка по купону", + "discount": "Сумма скидки", + "failed": "Неудача", + "feeAmount": "Комиссия", + "method": "Способ оплаты", + "methods": { + "alipay_f2f": "Alipay(лицом к лицу)", + "balance": "Баланс", + "epay": "Epay", + "stripe_alipay": "Stripe(Alipay)", + "stripe_wechat_pay": "Stripe(WeChat)" + }, + "orderNumber": "Номер заказа", + "status": { + "0": "Статус", + "1": "Ожидает оплаты", + "2": "Оплачено", + "3": "Отменено", + "4": "Закрыто", + "5": "Завершено" + }, + "subscribe": "Подписаться", + "subscribePrice": "Цена подписки", + "total": "Итого", + "tradeNo": "Номер транзакции", + "type": { + "0": "Тип", + "1": "Новая покупка", + "2": "Продление", + "3": "Сброс трафика", + "4": "Пополнение" + }, + "updateTime": "Время обновления", + "user": "пользователь" +} diff --git a/apps/admin/locales/ru-RU/payment.json b/apps/admin/locales/ru-RU/payment.json new file mode 100644 index 0000000..49c9dde --- /dev/null +++ b/apps/admin/locales/ru-RU/payment.json @@ -0,0 +1,44 @@ +{ + "aliPay": "Оплата через Alipay", + "alipayf2f": { + "appId": "ID приложения Alipay", + "invoiceName": "Пользовательское название продукта", + "invoiceNameDescription": "Будет отображаться в счете Alipay", + "privateKey": "Приватный ключ Alipay", + "publicKey": "Публичный ключ Alipay", + "sandbox": "Режим песочницы", + "sandboxDescription": "Включите режим песочницы для тестирования платежей" + }, + "enable": "Включить", + "enableDescription": "Включить этот способ оплаты", + "epay": { + "key": "КЛЮЧ", + "pid": "PID", + "url": "URL" + }, + "feeMode": "Способ оплаты", + "feeModeDescription": "Способ взимания дополнительной комиссии", + "feeModeItems": ["Без комиссии", "Процент", "Фиксированная сумма", "Оба вышеуказанных"], + "feePercent": "Процентная комиссия (необязательно)", + "feePercentDescription": "Добавление комиссии к сумме заказа", + "fixedFee": "Фиксированная плата (по желанию)", + "fixedFeeDescription": "Добавление фиксированной платы к сумме заказа", + "iconUrl": "URL значка (необязательно)", + "iconUrlDescription": "Используется для отображения на фронтенде", + "inputPlaceholder": "Пожалуйста, введите", + "key": "КЛЮЧ", + "notifyUrl": "Пользовательский домен уведомлений (необязательно)", + "notifyUrlDescription": "Уведомление шлюза будет отправлено на этот домен", + "payForRecommendations": "Оплатить рекомендации", + "pid": "PID", + "saveSuccess": "Сохранение успешно", + "showName": "Показать имя", + "showNameDescription": "Используется для отображения на фронтенде", + "stripe": { + "publicKey": "ОТКРЫТЫЙ КЛЮЧ", + "secretKey": "СЕКРЕТНЫЙ КЛЮЧ", + "webhookSecret": "СЕКРЕТ ПОДПИСИ ВЕБХУКА" + }, + "url": "URL", + "wechatPay": "WeChat Pay" +} diff --git a/apps/admin/locales/ru-RU/server.json b/apps/admin/locales/ru-RU/server.json new file mode 100644 index 0000000..dfe9b00 --- /dev/null +++ b/apps/admin/locales/ru-RU/server.json @@ -0,0 +1,122 @@ +{ + "group": { + "actions": "Действия", + "cancel": "Отмена", + "confirm": "Подтвердить", + "confirmDelete": "Вы уверены, что хотите удалить?", + "create": "Создать", + "createNodeGroup": "Создать группу узлов", + "createdSuccessfully": "Успешно создано", + "delete": "Удалить", + "deleteWarning": "После удаления данные не могут быть восстановлены, пожалуйста, будьте осторожны.", + "deletedSuccessfully": "Успешно удалено", + "description": "Описание", + "edit": "Редактировать", + "editNodeGroup": "Редактировать группу узлов", + "form": { + "cancel": "Отмена", + "confirm": "Подтвердить", + "description": "Описание", + "name": "Название" + }, + "name": "Название", + "title": "Список групп узлов", + "updatedAt": "Время обновления" + }, + "node": { + "abnormal": "Аномалия", + "actions": "Действия", + "address": "Адрес", + "all": "Все", + "cancel": "Отмена", + "confirm": "Подтвердить", + "confirmDelete": "Вы уверены, что хотите удалить?", + "create": "Создать", + "createNode": "Создать узел", + "createSuccess": "Успешно создано", + "delete": "Удалить", + "deleteSuccess": "Успешно удалено", + "deleteWarning": "После удаления данные не могут быть восстановлены. Пожалуйста, будьте осторожны.", + "disk": "Диск", + "edit": "Редактировать", + "editNode": "Редактировать узел", + "enable": "Включить", + "form": { + "allowInsecure": "Разрешить небезопасное", + "cancel": "Отмена", + "confirm": "Подтвердить", + "edit": "Редактировать", + "editSecurity": "Редактировать настройки безопасности", + "enableRelay": "Включить реле", + "enableTLS": "Включить TLS", + "encryptionMethod": "Метод шифрования", + "flow": "Алгоритм управления потоком", + "hopInterval": "Интервал прыжка", + "hopPorts": "Порты прыжка", + "hopPortsPlaceholder": "Несколько портов разделяются запятыми", + "name": "Имя", + "nodeGroupId": "ID группы узлов", + "obfsPassword": "Пароль обфускации", + "obfsPasswordPlaceholder": "Оставьте пустым для отсутствия обфускации", + "path": "Путь", + "pleaseSelect": "Пожалуйста, выберите", + "port": "Порт сервера", + "protocol": "Протокол", + "relayHost": "Адрес реле", + "relayPort": "Порт реле", + "remarks": "Примечания", + "security": "Безопасность", + "securityConfig": "Настройки безопасности", + "security_config": { + "fingerprint": "Отпечаток пальца", + "privateKey": "Закрытый ключ", + "privateKeyPlaceholder": "Оставьте пустым для автоматической генерации", + "publicKey": "Открытый ключ", + "publicKeyPlaceholder": "Оставьте пустым для автоматической генерации", + "serverAddress": "Адрес сервера", + "serverAddressPlaceholder": "Адрес цели REALITY, по умолчанию используется SNI", + "serverName": "Имя сервера (SNI)", + "serverNamePlaceholder": "Обязательно для REALITY, должно совпадать с бэкендом", + "serverPort": "Порт сервера", + "serverPortPlaceholder": "Порт цели REALITY, по умолчанию 443", + "shortId": "Короткий ID", + "shortIdPlaceholder": "Оставьте пустым для автоматической генерации", + "sni": "Индикатор имени сервера (SNI)" + }, + "selectEncryptionMethod": "Выберите метод шифрования", + "selectNodeGroup": "Выберите группу узлов", + "selectProtocol": "Выберите протокол", + "serverAddr": "Адрес сервера", + "serverName": "Имя сервера", + "speedLimit": "Ограничение скорости", + "speedLimitPlaceholder": "Без ограничений", + "trafficRatio": "Коэффициент трафика", + "transport": "Транспортный протокол", + "transportConfig": "Настройки транспортного протокола", + "transportHost": "Адрес транспортного сервиса", + "transportPath": "Транспортный путь", + "transportServerName": "Имя транспортного сервиса" + }, + "lastUpdated": "Последнее обновление", + "memory": "Память", + "name": "Имя", + "node": "Узел", + "nodeGroup": "Группа узлов", + "normal": "Нормально", + "onlineCount": "Количество онлайн", + "onlineUsers": "Онлайн пользователи", + "rate": "Скорость", + "relay": "Реле", + "serverAddr": "Адрес сервера", + "speedLimit": "Ограничение скорости", + "status": "Статус", + "trafficRatio": "Коэффициент трафика", + "type": "Тип", + "updateSuccess": "Успешно обновлено", + "updatedAt": "Время обновления" + }, + "tabs": { + "node": "Узел", + "nodeGroup": "Группа узлов" + } +} diff --git a/apps/admin/locales/ru-RU/subscribe.json b/apps/admin/locales/ru-RU/subscribe.json new file mode 100644 index 0000000..aae1941 --- /dev/null +++ b/apps/admin/locales/ru-RU/subscribe.json @@ -0,0 +1,79 @@ +{ + "actions": "действия", + "cancel": "Отмена", + "confirm": "Подтвердить", + "confirmDelete": "Вы уверены, что хотите удалить?", + "create": "Создать", + "createSubscribe": "Создать подписку", + "createSuccess": "Создание успешно", + "delete": "Удалить", + "deleteSuccess": "Удаление успешно", + "deleteWarning": "После удаления данные не могут быть восстановлены, пожалуйста, действуйте осторожно.", + "deviceLimit": "Количество устройств/шт", + "edit": "редактировать", + "editSubscribe": "Редактировать подписку", + "form": { + "cancel": "Отмена", + "confirm": "Подтвердить", + "description": "Описание", + "deviceLimit": "Ограничение устройств", + "discount": "Скидка", + "discountDescription": "Установить скидку на основе цены за единицу", + "discountMonths": "месяцев", + "discountPercent": "Процент скидки", + "discount_price": "Цена со скидкой", + "duration": "Продолжительность (месяцы)", + "inventory": "Инвентарь", + "name": "Название", + "noLimit": "Без ограничений", + "quota": "Лимит покупки", + "replacement": "Цена замены (за раз)", + "selectSubscribeGroup": "Пожалуйста, выберите группу подписки", + "server": "Сервер", + "serverGroup": "Группа серверов", + "speedLimit": "Ограничение скорости (Мбит/с)", + "subscribeGroup": "Группа подписки", + "traffic": "Трафик", + "unit_price": "Цена за месяц" + }, + "group": { + "actions": "Действия", + "cancel": "Отмена", + "confirm": "Подтвердить", + "confirmDelete": "Вы уверены, что хотите удалить?", + "create": "Создать", + "createSubscribeGroup": "Создать новую группу подписок", + "createSuccess": "Успешно создано", + "delete": "Удалить", + "deleteSuccess": "Успешно удалено", + "deleteWarning": "После удаления данные не могут быть восстановлены, пожалуйста, будьте осторожны.", + "description": "Описание", + "edit": "Редактировать", + "editSubscribeGroup": "Редактировать группу подписок", + "form": { + "cancel": "Отмена", + "confirm": "Подтвердить", + "description": "Описание", + "name": "Название" + }, + "name": "Название", + "title": "Список групп подписок", + "updateSuccess": "Успешно обновлено", + "updatedAt": "Время обновления" + }, + "inventory": "инвентарь", + "name": "название", + "quota": "Лимит/раз", + "replacement": "Сбросить цену/раз", + "sell": "Продажа", + "show": "Показать на главной странице", + "subscribe": "Подписаться", + "subscribeGroup": "Подписаться на группу", + "tabs": { + "subscribe": "Подписаться", + "subscribeGroup": "Группа подписок" + }, + "traffic": "трафик", + "unitPrice": "Цена/месяц", + "updateSuccess": "Обновление успешно" +} diff --git a/apps/admin/locales/ru-RU/system.json b/apps/admin/locales/ru-RU/system.json new file mode 100644 index 0000000..6806eca --- /dev/null +++ b/apps/admin/locales/ru-RU/system.json @@ -0,0 +1,156 @@ +{ + "currency": { + "accessKey": "Ключ доступа", + "accessKeyDescription": "https://exchangerate.host предоставляет бесплатный API-ключ для обменных курсов", + "currencySymbol": "Символ валюты", + "currencySymbolDescription": "Используется только для отображения, после изменения все валютные единицы в системе будут изменены", + "currencyUnit": "Валютная единица", + "currencyUnitDescription": "Используется только для отображения, после изменения все валютные единицы в системе будут изменены", + "saveSuccess": "Успешно сохранено" + }, + "email": { + "expiration_email_template": "Шаблон уведомления об истечении срока", + "expiration_email_templateDescription": "Переменные {after}.имя_переменной{before} в шаблоне будут заменены фактическими данными, пожалуйста, убедитесь, что эти переменные сохранены.", + "inputPlaceholder": "Пожалуйста, введите содержимое...", + "maintenance_email_template": "Шаблон уведомления о техническом обслуживании", + "maintenance_email_templateDescription": "Переменные {after}.имя_переменной{before} в шаблоне будут заменены фактическими данными, пожалуйста, убедитесь, что эти переменные сохранены.", + "saveSuccess": "Конфигурация успешно сохранена.", + "sendFailure": "Не удалось отправить тестовое письмо, пожалуйста, проверьте конфигурацию.", + "sendSuccess": "Тестовое письмо успешно отправлено.", + "sendTestEmail": "Отправить тестовое письмо", + "sendTestEmailDescription": "Отправьте тестовое письмо, чтобы проверить правильность конфигурации.", + "senderAddress": "Адрес отправителя", + "senderAddressDescription": "Адрес электронной почты, используемый по умолчанию для отправки писем.", + "smtpAccount": "Учетная запись SMTP", + "smtpAccountDescription": "Учетная запись электронной почты для аутентификации.", + "smtpEncryptionMethod": "Метод шифрования SMTP", + "smtpEncryptionMethodDescription": "Выберите, включать ли шифрование SSL/TLS.", + "smtpPassword": "Пароль SMTP", + "smtpPasswordDescription": "Пароль для этой учетной записи SMTP.", + "smtpServerAddress": "Адрес SMTP-сервера", + "smtpServerAddressDescription": "Укажите адрес сервера для отправки писем.", + "smtpServerPort": "Порт SMTP-сервера", + "smtpServerPortDescription": "Укажите номер порта для подключения к SMTP-серверу.", + "verify_email_template": "Шаблон письма для верификации", + "verify_email_templateDescription": "Переменные {after}.имя_переменной{before} в шаблоне будут заменены фактическими данными, пожалуйста, убедитесь, что эти переменные сохранены." + }, + "invite": { + "commissionFirstTimeOnly": "Комиссия только за первую покупку", + "commissionFirstTimeOnlyDescription": "После активации комиссия начисляется только при первой оплате приглашённого. Вы можете настроить для каждого пользователя в управлении пользователями.", + "enableForcedInvite": "Включить обязательное приглашение", + "enableForcedInviteDescription": "После активации только приглашённые пользователи смогут зарегистрироваться", + "inputPlaceholder": "Пожалуйста, введите", + "inviteCommissionPercentage": "Процент комиссии за приглашение", + "inviteCommissionPercentageDescription": "Глобальный процент распределения комиссии по умолчанию. Вы можете настроить индивидуальный процент в управлении пользователями.", + "saveSuccess": "Успешно сохранено" + }, + "node": { + "communicationKey": "Ключ связи", + "communicationKeyDescription": "Ключ для связи узла, чтобы гарантировать, что данные не будут перехвачены другими", + "inputPlaceholder": "Пожалуйста, введите", + "nodePullInterval": "Интервал извлечения узла", + "nodePullIntervalDescription": "Частота, с которой узел получает данные с панели (в секундах)", + "nodePushInterval": "Интервал отправки узла", + "nodePushIntervalDescription": "Частота, с которой узел отправляет данные на панель", + "saveSuccess": "Успешно сохранено" + }, + "register": { + "emailSuffixWhitelist": "Белый список суффиксов электронной почты", + "emailSuffixWhitelistDescription": "После включения только электронные письма с суффиксами из списка смогут зарегистрироваться", + "emailVerification": "Подтверждение электронной почты", + "emailVerificationDescription": "После включения пользователям потребуется подтвердить свою электронную почту", + "ipRegistrationLimit": "Ограничение регистрации по IP", + "ipRegistrationLimitDescription": "После включения IP, соответствующие правилам, будут ограничены в регистрации. Обратите внимание, что из-за CDN или прокси-сервера определение IP может вызвать проблемы", + "penaltyTime": "Время наказания (в минутах)", + "penaltyTimeDescription": "Пользователь должен подождать, пока не истечет время наказания, чтобы зарегистрироваться снова", + "registrationLimitCount": "Лимит регистраций", + "registrationLimitCountDescription": "После достижения лимита регистраций включается наказание", + "saveSuccess": "Успешно сохранено", + "stopNewUserRegistration": "Остановить регистрацию новых пользователей", + "stopNewUserRegistrationDescription": "После включения никто не сможет зарегистрироваться", + "trialRegistration": "Пробная регистрация", + "trialRegistrationDescription": "Включите пробную регистрацию, сначала измените пробный пакет и продолжительность", + "whitelistSuffixes": "Суффиксы белого списка", + "whitelistSuffixesDescription": "Для проверки электронной почты при регистрации, по одному на строку", + "whitelistSuffixesPlaceholder": "Введите суффиксы электронной почты, по одному на строку" + }, + "site": { + "logo": "ЛОГОТИП", + "logoDescription": "Используется для отображения места, где необходимо показать ЛОГОТИП", + "logoPlaceholder": "Введите URL-адрес ЛОГОТИПА, не заканчивайте на '/'", + "saveSuccess": "Успешно сохранено", + "siteDesc": "Описание сайта", + "siteDescDescription": "Используется для отображения места, где необходимо показать описание сайта", + "siteDescPlaceholder": "Введите описание сайта", + "siteDomain": "Домен сайта", + "siteDomainDescription": "Доменный адрес текущего сайта, например, для использования в электронной почте", + "siteDomainPlaceholder": "Введите доменный адрес, по одному домену на строку", + "siteName": "Название сайта", + "siteNameDescription": "Используется для отображения места, где необходимо показать название сайта", + "siteNamePlaceholder": "Введите название сайта" + }, + "subscription": { + "add": "Добавить", + "app": "Приложение", + "appDescription": "Настройте адрес загрузки приложения и правила импорта, не забудьте сохранить изменения", + "appDownloadURL": "URL загрузки приложения", + "appIcon": "Иконка приложения", + "appName": "Название приложения", + "delete": "Удалить", + "reset": "Сбросить", + "save": "Сохранить", + "saveSuccess": "Успешно сохранено", + "singleSubscriptionMode": "Режим единой подписки", + "singleSubscriptionModeDescription": "При включении все пакеты пользователей будут преобразованы в баланс", + "subscriptionDomain": "Домен подписки", + "subscriptionDomainDescription": "Используется для подписки, если оставить пустым, будет использоваться домен сайта", + "subscriptionDomainPlaceholder": "Введите домен подписки, для нескольких доменов используйте новую строку для каждого", + "subscriptionPath": "Путь подписки", + "subscriptionPathDescription": "Используется для подписки, после изменения обязательно перезапустите систему для обеспечения наилучшей производительности", + "subscriptionPathPlaceholder": "Введите", + "subscriptionProtocol": "Протокол подписки", + "wildcardResolution": "Разрешение подстановочных знаков", + "wildcardResolutionDescription": "Используется для подписки" + }, + "tabs": { + "currency": "Валюта", + "email": "Электронная почта", + "invite": "Пригласить", + "node": "Узел", + "register": "Регистрация", + "site": "Сайт", + "subscription": "Подписка", + "telegram": "Telegram", + "tos": "Условия обслуживания", + "verify": "Проверка" + }, + "telegram": { + "botToken": "Токен бота", + "botTokenDescription": "Пожалуйста, введите токен, предоставленный Botfather", + "enableBotNotifications": "Включить уведомления бота", + "enableBotNotificationsDescription": "После включения бот будет отправлять основные уведомления администраторам и пользователям, связанным с Telegram", + "groupURL": "URL группы", + "groupURLDescription": "После заполнения будет отображаться на стороне пользователя или использоваться там, где это необходимо", + "inputPlaceholderBotToken": "0000000000:xxxxxxxxx_xxxxxxxxxxxxxxx", + "inputPlaceholderGroupURL": "https://t.me/xxxxxx", + "saveSuccess": "Успешно сохранено" + }, + "tos": { + "saveSuccess": "Сохранение успешно", + "title": "Условия обслуживания" + }, + "verify": { + "inputPlaceholder": "Пожалуйста, введите", + "loginVerificationCode": "Код верификации для входа", + "loginVerificationCodeDescription": "Проверка человека при входе", + "registrationVerificationCode": "Код верификации для регистрации", + "registrationVerificationCodeDescription": "Проверка человека при регистрации", + "resetPasswordVerificationCode": "Код верификации для сброса пароля", + "resetPasswordVerificationCodeDescription": "Проверка человека при сбросе пароля", + "saveSuccess": "Успешно сохранено", + "turnstileSecret": "Секретный ключ Turnstile", + "turnstileSecretDescription": "Секретный ключ Turnstile, предоставленный Cloudflare", + "turnstileSiteKey": "Ключ сайта Turnstile", + "turnstileSiteKeyDescription": "Ключ сайта Turnstile, предоставленный Cloudflare" + } +} diff --git a/apps/admin/locales/ru-RU/ticket.json b/apps/admin/locales/ru-RU/ticket.json new file mode 100644 index 0000000..d0dddea --- /dev/null +++ b/apps/admin/locales/ru-RU/ticket.json @@ -0,0 +1,19 @@ +{ + "actions": "действия", + "cancel": "Отмена", + "check": "Проверить", + "close": "Закрыть", + "closeSuccess": "Закрытие успешно", + "closeWarning": "После закрытия дальнейшие действия с этим заказом будут невозможны. Пожалуйста, будьте осторожны.", + "confirm": "Подтвердить", + "confirmClose": "Вы уверены, что хотите закрыть?", + "createdAt": "Время создания", + "inputPlaceholder": "Пожалуйста, введите ваш вопрос, и мы ответим вам как можно скорее.", + "open": "открыть", + "reply": "ответ", + "status": ["Статус", "Ожидает внимания", "Ожидает ответа", "Обработано", "Закрыто"], + "ticketList": "Список заявок", + "title": "Заголовок", + "updatedAt": "Обновлено в", + "user": "пользователь" +} diff --git a/apps/admin/locales/ru-RU/tool.json b/apps/admin/locales/ru-RU/tool.json new file mode 100644 index 0000000..c00c734 --- /dev/null +++ b/apps/admin/locales/ru-RU/tool.json @@ -0,0 +1,26 @@ +{ + "caller": "Звонящий", + "cancel": "Отмена", + "confirmReboot": "Подтвердите перезагрузку", + "confirmSystemReboot": "Подтвердите перезагрузку системы", + "confirmSystemUpgrade": "Подтвердить обновление системы", + "confirmUpgrade": "Подтвердить обновление", + "currentVersion": "Текущая версия системы:", + "errors": "Ошибки", + "ip": "IP", + "lastUpdated": "Последнее обновление:", + "none": "Нет", + "query": "Запрос", + "rebootDescription": "Вы уверены, что хотите перезагрузить систему? Это действие приведет к кратковременному прерыванию обслуживания.", + "rebooting": "Перезагрузка системы...", + "refreshLogs": "Обновить журналы", + "request": "Запрос", + "status": "Статус", + "systemLogs": "Системные журналы", + "systemReboot": "Перезагрузка системы", + "systemServices": "Системные службы", + "systemUpgrade": "Обновление системы", + "upgradeDescription": "Вы уверены, что хотите выполнить обновление системы? Эта операция может занять несколько минут, в течение которых система может не отвечать.", + "userAgent": "Пользовательский агент", + "viewLogsAndManage": "Просмотр системных журналов, выполнение обновлений и перезагрузка системы" +} diff --git a/apps/admin/locales/ru-RU/user.json b/apps/admin/locales/ru-RU/user.json new file mode 100644 index 0000000..9de9b01 --- /dev/null +++ b/apps/admin/locales/ru-RU/user.json @@ -0,0 +1,38 @@ +{ + "actions": "действия", + "balance": "Баланс", + "cancel": "Отмена", + "confirm": "Подтвердить", + "confirmDelete": "Вы уверены, что хотите удалить?", + "create": "Создать", + "createSuccess": "Создание успешно", + "createUser": "Создать пользователя", + "createdAt": "Время регистрации", + "delete": "Удалить", + "deleteDescription": "После удаления данные не могут быть восстановлены, пожалуйста, действуйте осторожно.", + "deleteSuccess": "Удаление успешно", + "edit": "редактировать", + "editUser": "Редактировать пользователя", + "email": "Электронная почта", + "enable": "Включить", + "form": { + "balance": "Баланс", + "balancePlaceholder": "Баланс", + "cancel": "Отмена", + "confirm": "Подтвердить", + "invalidEmailFormat": "Недопустимый формат электронной почты", + "inviteCode": "Код приглашения", + "inviteCodePlaceholder": "Введите код приглашения (оставьте пустым для автоматической генерации)", + "manager": "Администратор", + "password": "Пароль", + "passwordPlaceholder": "Введите новый пароль (можно оставить пустым)", + "refererId": "ID рекомендателя", + "refererIdPlaceholder": "Введите ID рекомендателя", + "userEmail": "Электронная почта пользователя", + "userEmailPlaceholder": "Введите электронную почту пользователя" + }, + "referer": "Реферер", + "updateSuccess": "Обновление успешно", + "userList": "Список пользователей", + "userName": "Электронная почта пользователя" +} diff --git a/apps/admin/locales/th-TH/announcement.json b/apps/admin/locales/th-TH/announcement.json new file mode 100644 index 0000000..ab0f135 --- /dev/null +++ b/apps/admin/locales/th-TH/announcement.json @@ -0,0 +1,30 @@ +{ + "actions": "การดำเนินการ", + "announcementList": "รายการประกาศ", + "cancel": "ยกเลิก", + "confirm": "ยืนยัน", + "confirmDelete": "คุณแน่ใจหรือว่าต้องการลบ?", + "content": "เนื้อหา", + "create": "สร้าง", + "createAnnouncement": "สร้างประกาศ", + "createSuccess": "สร้างสำเร็จ", + "delete": "ลบ", + "deleteDescription": "เมื่อทำการลบแล้ว ข้อมูลจะไม่สามารถกู้คืนได้ โปรดดำเนินการด้วยความระมัดระวัง", + "deleteSuccess": "ลบสำเร็จ", + "edit": "แก้ไข", + "editAnnouncement": "แก้ไขประกาศ", + "enable": "เปิดใช้งาน", + "form": { + "cancel": "ยกเลิก", + "confirm": "ยืนยัน", + "content": "เนื้อหา", + "contentPlaceholder": "กรุณาใส่เนื้อหาประกาศ (รองรับ Markdown)", + "title": "หัวข้อ", + "titlePlaceholder": "กรุณาใส่" + }, + "hide": "ซ่อน", + "show": "แสดง", + "title": "หัวข้อ", + "updateSuccess": "อัปเดตสำเร็จ", + "updatedAt": "อัปเดตเมื่อ" +} diff --git a/apps/admin/locales/th-TH/auth.json b/apps/admin/locales/th-TH/auth.json new file mode 100644 index 0000000..daac99e --- /dev/null +++ b/apps/admin/locales/th-TH/auth.json @@ -0,0 +1,39 @@ +{ + "check": { + "checking": "กำลังตรวจสอบ...", + "continue": "ดำเนินการต่อ", + "description": "กรุณาใส่อีเมลของคุณเพื่อดำเนินการเข้าสู่ระบบหรือสมัครสมาชิกต่อไป", + "email": "กรุณาใส่ที่อยู่อีเมลที่ถูกต้อง", + "title": "เข้าสู่ระบบ/สมัครสมาชิก", + "whitelist": "โดเมนอีเมลไม่อยู่ในรายชื่อที่อนุญาต" + }, + "login": { + "description": "กรุณาใส่ข้อมูลบัญชีของคุณเพื่อเข้าสู่ระบบ", + "forgotPassword": "ลืมรหัสผ่าน?", + "success": "เข้าสู่ระบบสำเร็จ!", + "switchAccount": "สมัคร/เปลี่ยนบัญชี", + "title": "เข้าสู่ระบบ" + }, + "logout": "ออกจากระบบ", + "orWithEmail": "หรือใช้ที่อยู่อีเมล", + "register": { + "description": "สร้างบัญชีใหม่ กรอกข้อมูลของคุณเพื่อสมัครสมาชิก", + "existingAccount": "มีบัญชีอยู่แล้ว?", + "get": "รับ", + "invite": "รหัสเชิญ", + "message": "#### เรียนผู้ใช้ที่เคารพ\n\nขอขอบคุณที่ให้ความสนใจและสนับสนุนเรา เนื่องจากการปรับเปลี่ยนนโยบายการดำเนินงานของเว็บไซต์ เราได้ปิดการลงทะเบียนผู้ใช้ใหม่ ในช่วงเวลานี้ การใช้งานของผู้ใช้ปัจจุบันจะไม่ได้รับผลกระทบใดๆ\n\nเรามุ่งมั่นที่จะให้บริการและประสบการณ์ที่ดียิ่งขึ้นแก่คุณ ดังนั้นเราจะทำการปรับปรุงระบบและอัปเกรดฟังก์ชันอย่างเต็มรูปแบบในช่วงที่ปิดการลงทะเบียน ในอนาคต เราจะต้อนรับคุณด้วยเนื้อหาและบริการที่มีคุณภาพยิ่งขึ้น\n\nโปรดติดตามเว็บไซต์และแพลตฟอร์มโซเชียลมีเดียของเรา เพื่อรับข้อมูลและการแจ้งเตือนล่าสุด ขอบคุณสำหรับความเข้าใจและการสนับสนุนของคุณ\n\nหากมีคำถามหรือความต้องการความช่วยเหลือใดๆ โปรดติดต่อทีมบริการลูกค้าของเราได้ตลอดเวลา\n\n**ขอขอบคุณอีกครั้งสำหรับการสนับสนุนและความเข้าใจของคุณ**", + "passwordMismatch": "รหัสผ่านที่กรอกไม่ตรงกัน", + "success": "สมัครสมาชิกสำเร็จ เข้าสู่ระบบอัตโนมัติแล้ว!", + "switchToLogin": "เข้าสู่ระบบ/รีเซ็ตอีเมล", + "title": "สมัครสมาชิก" + }, + "reset": { + "description": "กรุณาใส่ที่อยู่อีเมลของคุณเพื่อรีเซ็ตรหัสผ่าน", + "existingAccount": "มีบัญชีอยู่แล้ว?", + "get": "รับ", + "success": "รีเซ็ตรหัสผ่านสำเร็จ, เปลี่ยนไปที่เข้าสู่ระบบอัตโนมัติ!", + "switchToLogin": "เข้าสู่ระบบ/สมัครสมาชิก", + "title": "รีเซ็ตรหัสผ่าน" + }, + "tos": "ข้อกำหนดในการให้บริการ" +} diff --git a/apps/admin/locales/th-TH/common.json b/apps/admin/locales/th-TH/common.json new file mode 100644 index 0000000..8b26a99 --- /dev/null +++ b/apps/admin/locales/th-TH/common.json @@ -0,0 +1,60 @@ +{ + "billing": { + "description": "การสนับสนุนช่วยให้ PPanel สามารถอัปเดตต่อไปได้!", + "title": "ผู้สนับสนุน" + }, + "empty": [ + "ลองจินตนาการว่าที่นี่เต็มไปด้วยเนื้อหาที่น่าตื่นเต้น! ตอนนี้ต้องพึ่งจินตนาการไปก่อน...", + "พื้นที่นี้หายไปอย่างลึกลับ เรากำลังเรียกมันกลับมา!", + "โอ๊ะ ไม่มีอะไรเกิดขึ้น...คุณสามารถเติมอะไรลงไปเองได้!", + "เหมือนกับการไปคอนเสิร์ตแล้วพบว่าเวทีว่างเปล่า...คุณอยากขึ้นไปแสดงไหม?", + "คุณพบดินแดนว่างเปล่า! อยากสร้างบ้านไหม?", + "ที่นี่ว่างเปล่าในตอนนี้ แต่ความคิดสร้างสรรค์เริ่มต้นจากที่นี่!", + "ไม่มีอะไรเลย...แต่ไม่ต้องกังวล นี่เป็นเพียงจุดเริ่มต้น!", + "ที่นี่เคยเตรียมเซอร์ไพรส์ใหญ่ไว้ แต่เซอร์ไพรส์หนีไปแล้ว!", + "ตอนนี้ไม่มีอะไรเลย เหมือนตู้ขนมที่ถูกกินจนหมด", + "พื้นที่ว่างนี้กำลังรอคอยตัวเอกของมัน!" + ], + "request": { + "10001": "การค้นหายังไม่สำเร็จ กรุณาลองใหม่อีกครั้งในภายหลังหรือตรวจสอบเงื่อนไขของคุณ", + "10002": "การอัปเดตไม่สำเร็จ กรุณาลองใหม่อีกครั้งในภายหลัง", + "10003": "ไม่สามารถดำเนินการแทรกได้ในขณะนี้ กรุณาลองใหม่อีกครั้งในภายหลัง", + "10004": "การลบไม่สำเร็จ กรุณาลองใหม่อีกครั้งในภายหลัง", + "20001": "ข้อมูลผู้ใช้นี้มีอยู่แล้ว กรุณาเปลี่ยนข้อมูลและลองใหม่อีกครั้ง", + "20002": "ไม่พบผู้ใช้นี้ กรุณาตรวจสอบข้อมูลและลองใหม่อีกครั้ง", + "20003": "รหัสผ่านที่คุณป้อนไม่ถูกต้อง กรุณาป้อนใหม่อีกครั้ง", + "20004": "ผู้ใช้นี้ถูกระงับ หากมีข้อสงสัยกรุณาติดต่อฝ่ายบริการลูกค้า", + "20005": "ยอดเงินคงเหลือไม่เพียงพอ กรุณาเติมเงินและลองใหม่อีกครั้ง", + "20006": "ฟังก์ชันการลงทะเบียนยังไม่พร้อมใช้งาน กรุณาลองใหม่อีกครั้งในภายหลัง", + "30001": "โหนดนี้มีอยู่แล้ว กรุณาอย่าเพิ่มซ้ำ", + "30002": "ไม่พบโหนดที่เกี่ยวข้อง กรุณาตรวจสอบและลองใหม่อีกครั้ง", + "30003": "กลุ่มนี้มีอยู่แล้ว กรุณาลองใช้ชื่ออื่น", + "30004": "ไม่พบกลุ่มนี้ กรุณายืนยันข้อมูลและลองใหม่อีกครั้ง", + "30005": "ยังมีเนื้อหาในกลุ่มนี้ กรุณาล้างข้อมูลก่อนลองใหม่อีกครั้ง", + "400": "พารามิเตอร์คำขอไม่ถูกต้อง กรุณาตรวจสอบและส่งใหม่อีกครั้ง", + "40002": "ไม่พบ Token ที่ถูกต้อง กรุณาเข้าสู่ระบบก่อนลองใหม่อีกครั้ง", + "40003": "Token ปัจจุบันไม่ถูกต้อง กรุณารับใหม่และลองอีกครั้ง", + "40004": "Token หมดอายุ กรุณาเข้าสู่ระบบใหม่", + "40005": "คุณไม่มีสิทธิ์เข้าถึง หากมีข้อสงสัยกรุณาติดต่อผู้ดูแลระบบ", + "401": "คำขอถี่เกินไป กรุณาลองใหม่อีกครั้งในภายหลัง", + "500": "เซิร์ฟเวอร์พบปัญหา กรุณาลองใหม่อีกครั้งในภายหลัง", + "50001": "ไม่พบข้อมูลคูปองที่สอดคล้องกัน กรุณาตรวจสอบและลองใหม่อีกครั้ง", + "50002": "คูปองนี้ถูกใช้ไปแล้ว ไม่สามารถใช้ซ้ำได้", + "60001": "การสมัครสมาชิกหมดอายุ กรุณาต่ออายุและใช้งานใหม่", + "60002": "ไม่สามารถใช้การสมัครสมาชิกนี้ได้ในขณะนี้ กรุณาลองใหม่อีกครั้งในภายหลัง", + "70001": "รหัสยืนยันไม่ถูกต้อง กรุณาป้อนใหม่อีกครั้ง", + "80001": "งานไม่สำเร็จในการเข้าคิว กรุณาลองใหม่อีกครั้งในภายหลัง", + "90001": "กรุณาปิดโหมด DEBUG ก่อนลองใหม่อีกครั้ง", + "undefined": "ระบบเกิดข้อผิดพลาด กรุณาลองใหม่อีกครั้งในภายหลัง" + }, + "table": { + "actions": "การดำเนินการ", + "asc": "เรียงจากน้อยไปมาก", + "desc": "เรียงจากมากไปน้อย", + "hide": "ซ่อน", + "pageInfo": "หน้า {current} จากทั้งหมด {total} หน้า", + "rowsPerPage": "จำนวนแถวต่อหน้า", + "selectedItems": "เลือกแล้ว {total} แถว" + }, + "unlimited": "ไม่จำกัด" +} diff --git a/apps/admin/locales/th-TH/coupon.json b/apps/admin/locales/th-TH/coupon.json new file mode 100644 index 0000000..443c135 --- /dev/null +++ b/apps/admin/locales/th-TH/coupon.json @@ -0,0 +1,50 @@ +{ + "actions": "การดำเนินการ", + "amount": "จำนวนเงิน", + "cancel": "ยกเลิก", + "code": "รหัส", + "confirm": "ยืนยัน", + "confirmDelete": "คุณแน่ใจหรือว่าต้องการลบ?", + "count": "จำนวน", + "couponList": "รายการคูปอง", + "create": "สร้าง", + "createCoupon": "สร้างคูปอง", + "createSuccess": "สร้างสำเร็จ", + "delete": "ลบ", + "deleteSuccess": "ลบสำเร็จ", + "deleteWarning": "เมื่อทำการลบแล้ว ข้อมูลจะไม่สามารถกู้คืนได้ โปรดดำเนินการด้วยความระมัดระวัง", + "discount": "ส่วนลด", + "edit": "แก้ไข", + "editCoupon": "แก้ไขคูปอง", + "enable": "เปิดใช้งาน", + "form": { + "amountDiscount": "ส่วนลดจำนวนเงิน", + "cancel": "ยกเลิก", + "confirm": "ยืนยัน", + "count": "จำนวนการใช้งานสูงสุด", + "countPlaceholder": "จำนวนการใช้งานสูงสุด (เว้นว่างไว้หากไม่จำกัด)", + "customCouponCode": "รหัสคูปองที่กำหนดเอง", + "customCouponCodePlaceholder": "รหัสคูปองที่กำหนดเอง (เว้นว่างไว้เพื่อสร้างอัตโนมัติ)", + "enterCouponName": "กรุณาใส่ชื่อคูปอง", + "enterValue": "กรุณาใส่ค่า", + "expireTime": "เวลาหมดอายุ", + "name": "ชื่อ", + "percentageDiscount": "ส่วนลดเปอร์เซ็นต์", + "selectServer": "กรุณาเลือกการสมัครสมาชิก", + "selectTime": "เลือกเวลา", + "specifiedServer": "การสมัครสมาชิกที่ระบุ", + "startTime": "เวลาเริ่มต้น", + "type": "ประเภทคูปอง", + "userLimit": "จำนวนการใช้งานสูงสุดต่อผู้ใช้", + "userLimitPlaceholder": "จำนวนการใช้งานสูงสุดต่อผู้ใช้ (เว้นว่างไว้หากไม่จำกัด)" + }, + "name": "ชื่อ", + "percentage": "เปอร์เซ็นต์", + "remainingTimes": "เหลือ", + "subscribe": "สมัครสมาชิก", + "type": "ประเภท", + "unlimited": "ไม่จำกัด", + "updateSuccess": "อัปเดตสำเร็จ", + "usedTimes": "จำนวนครั้งที่ใช้", + "validityPeriod": "ระยะเวลาที่ใช้ได้" +} diff --git a/apps/admin/locales/th-TH/document.json b/apps/admin/locales/th-TH/document.json new file mode 100644 index 0000000..7c03dfb --- /dev/null +++ b/apps/admin/locales/th-TH/document.json @@ -0,0 +1,29 @@ +{ + "DocumentList": "รายการเอกสาร", + "actions": "การดำเนินการ", + "cancel": "ยกเลิก", + "confirm": "ยืนยัน", + "confirmDelete": "คุณแน่ใจหรือว่าต้องการลบ?", + "create": "สร้าง", + "createDocument": "สร้างเอกสาร", + "createSuccess": "สร้างสำเร็จ", + "delete": "ลบ", + "deleteDescription": "เมื่อทำการลบแล้ว ข้อมูลจะไม่สามารถกู้คืนได้ โปรดดำเนินการด้วยความระมัดระวัง", + "deleteSuccess": "ลบสำเร็จ", + "edit": "แก้ไข", + "editDocument": "แก้ไขเอกสาร", + "form": { + "cancel": "ยกเลิก", + "confirm": "ยืนยัน", + "content": "เนื้อหา", + "tags": "หมวดหมู่", + "tagsPlaceholder": "กรุณาใช้ปุ่ม Enter หรือเครื่องหมายจุลภาค (,) เพื่อแยกหมวดหมู่หลายรายการ", + "title": "หัวข้อ", + "titlePlaceholder": "กรุณาใส่" + }, + "show": "แสดง", + "tags": "หมวดหมู่", + "title": "หัวข้อ", + "updateSuccess": "อัปเดตสำเร็จ", + "updatedAt": "อัปเดตเมื่อ" +} diff --git a/apps/admin/locales/th-TH/index.json b/apps/admin/locales/th-TH/index.json new file mode 100644 index 0000000..6d09364 --- /dev/null +++ b/apps/admin/locales/th-TH/index.json @@ -0,0 +1,29 @@ +{ + "email": "อีเมล", + "month": "เดือนนี้", + "monthDownloadTraffic": "ปริมาณการดาวน์โหลดในเดือนนี้", + "monthUploadTraffic": "ปริมาณการอัปโหลดในเดือนนี้", + "newPurchase": "ซื้อใหม่", + "nodeTraffic": "ปริมาณการใช้งานของโหนด", + "nodes": "โหนด", + "offlineNodeCount": "จำนวนโหนดออฟไลน์", + "onlineIPCount": "จำนวน IP ออนไลน์", + "onlineNodeCount": "จำนวนโหนดออนไลน์", + "pendingTickets": "บัตรงานที่รอดำเนินการ", + "register": "ลงทะเบียน", + "repurchase": "ซื้อซ้ำ", + "revenueTitle": "สถิติรายได้", + "selectTypePlaceholder": "เลือกประเภท", + "statisticsTitle": "สถิติ", + "today": "วันนี้", + "todayDownloadTraffic": "ปริมาณการดาวน์โหลดวันนี้", + "todayUploadTraffic": "ปริมาณการอัปโหลดวันนี้", + "total": "รวมทั้งหมด", + "totalIncome": "รายได้รวม", + "trafficRank": "อันดับการเข้าชม", + "type": "ประเภท", + "userTitle": "สถิติผู้ใช้", + "userTraffic": "ปริมาณการใช้งานของผู้ใช้", + "users": "ผู้ใช้", + "yesterday": "เมื่อวาน" +} diff --git a/apps/admin/locales/th-TH/language.json b/apps/admin/locales/th-TH/language.json new file mode 100644 index 0000000..a42089e --- /dev/null +++ b/apps/admin/locales/th-TH/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "ภาษาเช็ก", + "de-DE": "ภาษาเยอรมัน", + "en-US": "ภาษาอังกฤษ", + "es-ES": "ภาษาสเปน", + "es-MX": "สเปน (เม็กซิโก)", + "fi-FI": "ภาษาฟินแลนด์", + "fr-FR": "ภาษาฝรั่งเศส", + "hi-IN": "ภาษาฮินดี", + "hu-HU": "ภาษาฮังการี", + "ja-JP": "ภาษาญี่ปุ่น", + "ko-KR": "เกาหลี", + "no-NO": "ภาษานอร์เวย์", + "pl-PL": "ภาษาโปแลนด์", + "pt-BR": "โปรตุเกส (บราซิล)", + "ro-RO": "โรมาเนีย", + "ru-RU": "ภาษารัสเซีย", + "th-TH": "ภาษาไทย", + "tr-TR": "ตุรกี", + "uk-UA": "ยูเครน", + "vi-VN": "ภาษาเวียดนาม", + "zh-CN": "ภาษาไทย", + "zh-TW": "ภาษาจีน (ตัวเต็ม)" +} diff --git a/apps/admin/locales/th-TH/menu.json b/apps/admin/locales/th-TH/menu.json new file mode 100644 index 0000000..85ae183 --- /dev/null +++ b/apps/admin/locales/th-TH/menu.json @@ -0,0 +1,18 @@ +{ + "Announcement Management": "การจัดการประกาศ", + "Coupon Management": "การจัดการคูปอง", + "Dashboard": "แดชบอร์ด", + "Document Management": "การจัดการเอกสาร", + "Finance": "การเงิน", + "Order Management": "การจัดการคำสั่งซื้อ", + "Payment Config": "การตั้งค่าการชำระเงิน", + "Server": "เซิร์ฟเวอร์", + "Server Management": "การจัดการเซิร์ฟเวอร์", + "Settings": "การตั้งค่า", + "Subscribe Management": "การจัดการการสมัครสมาชิก", + "System Config": "การกำหนดค่าระบบ", + "System Tool": "เครื่องมือระบบ", + "Ticket Management": "การจัดการตั๋ว", + "User": "ผู้ใช้", + "User Management": "การจัดการผู้ใช้" +} diff --git a/apps/admin/locales/th-TH/order.json b/apps/admin/locales/th-TH/order.json new file mode 100644 index 0000000..2e90dc1 --- /dev/null +++ b/apps/admin/locales/th-TH/order.json @@ -0,0 +1,37 @@ +{ + "amount": "จำนวนเงิน", + "couponDiscount": "ส่วนลดคูปอง", + "discount": "จำนวนเงินส่วนลด", + "failed": "ล้มเหลว", + "feeAmount": "ค่าธรรมเนียม", + "method": "วิธีการชำระเงิน", + "methods": { + "alipay_f2f": "อาลีเพย์ (เผชิญหน้า)", + "balance": "ยอดคงเหลือ", + "epay": "อีเพย์", + "stripe_alipay": "Stripe (อาลีเพย์)", + "stripe_wechat_pay": "Stripe (วีแชท)" + }, + "orderNumber": "หมายเลขคำสั่งซื้อ", + "status": { + "0": "สถานะ", + "1": "รอการชำระเงิน", + "2": "ชำระเงินแล้ว", + "3": "ยกเลิกแล้ว", + "4": "ปิดแล้ว", + "5": "เสร็จสิ้นแล้ว" + }, + "subscribe": "สมัครสมาชิก", + "subscribePrice": "ราคาสมัครสมาชิก", + "total": "รวมทั้งหมด", + "tradeNo": "หมายเลขการซื้อขาย", + "type": { + "0": "ประเภท", + "1": "ซื้อใหม่", + "2": "ต่ออายุ", + "3": "รีเซ็ตข้อมูล", + "4": "เติมเงิน" + }, + "updateTime": "เวลาอัปเดต", + "user": "ผู้ใช้" +} diff --git a/apps/admin/locales/th-TH/payment.json b/apps/admin/locales/th-TH/payment.json new file mode 100644 index 0000000..03a3ffe --- /dev/null +++ b/apps/admin/locales/th-TH/payment.json @@ -0,0 +1,44 @@ +{ + "aliPay": "ชำระเงินผ่านอาลีเพย์", + "alipayf2f": { + "appId": "รหัสแอปพลิเคชัน Alipay", + "invoiceName": "ชื่อผลิตภัณฑ์ที่กำหนดเอง", + "invoiceNameDescription": "จะแสดงในใบแจ้งหนี้ของ Alipay", + "privateKey": "กุญแจส่วนตัวของ Alipay", + "publicKey": "กุญแจสาธารณะของ Alipay", + "sandbox": "โหมดแซนด์บ็อกซ์", + "sandboxDescription": "เปิดใช้งานโหมดแซนด์บ็อกซ์เพื่อทดสอบการชำระเงิน" + }, + "enable": "เปิดใช้งาน", + "enableDescription": "เปิดใช้งานวิธีการชำระเงินนี้", + "epay": { + "key": "คีย์", + "pid": "พีไอดี", + "url": "ยูอาร์แอล" + }, + "feeMode": "วิธีการคิดค่าบริการ", + "feeModeDescription": "วิธีการคิดค่าธรรมเนียมเพิ่มเติม", + "feeModeItems": ["ไม่มีค่าธรรมเนียม", "เปอร์เซ็นต์", "จำนวนเงินคงที่", "ทั้งสองอย่าง"], + "feePercent": "เปอร์เซ็นต์ค่าธรรมเนียม (ไม่บังคับ)", + "feePercentDescription": "เพิ่มค่าธรรมเนียมจากยอดสั่งซื้อ", + "fixedFee": "ค่าธรรมเนียมคงที่ (ไม่บังคับ)", + "fixedFeeDescription": "เพิ่มค่าธรรมเนียมคงที่เหนือจำนวนเงินในคำสั่งซื้อ", + "iconUrl": "URL ไอคอน (ไม่บังคับ)", + "iconUrlDescription": "ใช้สำหรับแสดงผลด้านหน้า", + "inputPlaceholder": "กรุณาใส่ข้อมูล", + "key": "กุญแจ", + "notifyUrl": "โดเมนการแจ้งเตือนที่กำหนดเอง (ไม่บังคับ)", + "notifyUrlDescription": "การแจ้งเตือนเกตเวย์จะถูกส่งไปยังโดเมนนี้", + "payForRecommendations": "ชำระเงินสำหรับคำแนะนำ", + "pid": "PID", + "saveSuccess": "บันทึกสำเร็จ", + "showName": "แสดงชื่อ", + "showNameDescription": "ใช้สำหรับแสดงผลด้านหน้า", + "stripe": { + "publicKey": "PUBLIC KEY", + "secretKey": "SECRET KEY", + "webhookSecret": "WEBHOOK คีย์ลับ" + }, + "url": "URL", + "wechatPay": "วีแชทเพย์" +} diff --git a/apps/admin/locales/th-TH/server.json b/apps/admin/locales/th-TH/server.json new file mode 100644 index 0000000..b10e849 --- /dev/null +++ b/apps/admin/locales/th-TH/server.json @@ -0,0 +1,122 @@ +{ + "group": { + "actions": "การดำเนินการ", + "cancel": "ยกเลิก", + "confirm": "ยืนยัน", + "confirmDelete": "คุณแน่ใจหรือว่าต้องการลบ?", + "create": "สร้าง", + "createNodeGroup": "สร้างกลุ่มโหนด", + "createdSuccessfully": "สร้างสำเร็จ", + "delete": "ลบ", + "deleteWarning": "ข้อมูลจะไม่สามารถกู้คืนได้หลังจากลบ โปรดดำเนินการด้วยความระมัดระวัง", + "deletedSuccessfully": "ลบสำเร็จ", + "description": "คำอธิบาย", + "edit": "แก้ไข", + "editNodeGroup": "แก้ไขกลุ่มโหนด", + "form": { + "cancel": "ยกเลิก", + "confirm": "ยืนยัน", + "description": "คำอธิบาย", + "name": "ชื่อ" + }, + "name": "ชื่อ", + "title": "รายการกลุ่มโหนด", + "updatedAt": "อัปเดตเมื่อ" + }, + "node": { + "abnormal": "ผิดปกติ", + "actions": "การดำเนินการ", + "address": "ที่อยู่", + "all": "ทั้งหมด", + "cancel": "ยกเลิก", + "confirm": "ยืนยัน", + "confirmDelete": "คุณแน่ใจหรือไม่ว่าต้องการลบ?", + "create": "สร้าง", + "createNode": "สร้างโหนด", + "createSuccess": "สร้างสำเร็จ", + "delete": "ลบ", + "deleteSuccess": "ลบสำเร็จ", + "deleteWarning": "หลังจากลบแล้ว ข้อมูลจะไม่สามารถกู้คืนได้ โปรดดำเนินการด้วยความระมัดระวัง", + "disk": "ดิสก์", + "edit": "แก้ไข", + "editNode": "แก้ไขโหนด", + "enable": "เปิดใช้งาน", + "form": { + "allowInsecure": "อนุญาตไม่ปลอดภัย", + "cancel": "ยกเลิก", + "confirm": "ยืนยัน", + "edit": "แก้ไข", + "editSecurity": "แก้ไขการตั้งค่าความปลอดภัย", + "enableRelay": "เปิดใช้งานรีเลย์", + "enableTLS": "เปิดใช้งานTLS", + "encryptionMethod": "วิธีการเข้ารหัส", + "flow": "อัลกอริทึมควบคุมการไหล", + "hopInterval": "ช่วงเวลาการกระโดด", + "hopPorts": "พอร์ตการกระโดด", + "hopPortsPlaceholder": "หลายพอร์ตใช้เครื่องหมายจุลภาคคั่น", + "name": "ชื่อ", + "nodeGroupId": "รหัสกลุ่มโหนด", + "obfsPassword": "รหัสผ่านการปกปิด", + "obfsPasswordPlaceholder": "เว้นว่างเพื่อไม่ปกปิด", + "path": "เส้นทาง", + "pleaseSelect": "โปรดเลือก", + "port": "พอร์ตบริการ", + "protocol": "โปรโตคอล", + "relayHost": "ที่อยู่รีเลย์", + "relayPort": "พอร์ตรรีเลย์", + "remarks": "หมายเหตุ", + "security": "ความปลอดภัย", + "securityConfig": "การตั้งค่าความปลอดภัย", + "security_config": { + "fingerprint": "ลายนิ้วมือ", + "privateKey": "กุญแจส่วนตัว", + "privateKeyPlaceholder": "เว้นว่างเพื่อสร้างอัตโนมัติ", + "publicKey": "กุญแจสาธารณะ", + "publicKeyPlaceholder": "เว้นว่างเพื่อสร้างอัตโนมัติ", + "serverAddress": "ที่อยู่เซิร์ฟเวอร์", + "serverAddressPlaceholder": "ที่อยู่เป้าหมายREALITY, ใช้SNIโดยค่าเริ่มต้น", + "serverName": "ชื่อเซิร์ฟเวอร์(SNI)", + "serverNamePlaceholder": "จำเป็นต้องกรอกREALITY, ตรงกับด้านหลัง", + "serverPort": "พอร์ตเซิร์ฟเวอร์", + "serverPortPlaceholder": "พอร์ตเป้าหมายREALITY, ค่าเริ่มต้น443", + "shortId": "รหัสสั้น", + "shortIdPlaceholder": "เว้นว่างเพื่อสร้างอัตโนมัติ", + "sni": "การระบุชื่อเซิร์ฟเวอร์(sni)" + }, + "selectEncryptionMethod": "เลือกวิธีการเข้ารหัส", + "selectNodeGroup": "เลือกกลุ่มโหนด", + "selectProtocol": "เลือกโปรโตคอล", + "serverAddr": "ที่อยู่เซิร์ฟเวอร์", + "serverName": "ชื่อบริการ", + "speedLimit": "จำกัดความเร็ว", + "speedLimitPlaceholder": "ไม่จำกัด", + "trafficRatio": "อัตราการจราจร", + "transport": "โปรโตคอลการส่ง", + "transportConfig": "การตั้งค่าโปรโตคอลการส่ง", + "transportHost": "ที่อยู่บริการการส่ง", + "transportPath": "เส้นทางการส่ง", + "transportServerName": "ชื่อบริการการส่ง" + }, + "lastUpdated": "อัปเดตล่าสุด", + "memory": "หน่วยความจำ", + "name": "ชื่อ", + "node": "โหนด", + "nodeGroup": "กลุ่มโหนด", + "normal": "ปกติ", + "onlineCount": "จำนวนผู้ใช้ออนไลน์", + "onlineUsers": "ผู้ใช้ออนไลน์", + "rate": "อัตรา", + "relay": "รีเลย์", + "serverAddr": "ที่อยู่เซิร์ฟเวอร์", + "speedLimit": "จำกัดความเร็ว", + "status": "สถานะ", + "trafficRatio": "อัตราการจราจร", + "type": "ประเภท", + "updateSuccess": "อัปเดตสำเร็จ", + "updatedAt": "เวลาอัปเดต" + }, + "tabs": { + "node": "โหนด", + "nodeGroup": "กลุ่มโหนด" + } +} diff --git a/apps/admin/locales/th-TH/subscribe.json b/apps/admin/locales/th-TH/subscribe.json new file mode 100644 index 0000000..225787d --- /dev/null +++ b/apps/admin/locales/th-TH/subscribe.json @@ -0,0 +1,79 @@ +{ + "actions": "การดำเนินการ", + "cancel": "ยกเลิก", + "confirm": "ยืนยัน", + "confirmDelete": "คุณแน่ใจหรือว่าต้องการลบ?", + "create": "สร้าง", + "createSubscribe": "สร้างการสมัครสมาชิกใหม่", + "createSuccess": "สร้างสำเร็จ", + "delete": "ลบ", + "deleteSuccess": "ลบสำเร็จ", + "deleteWarning": "หลังจากลบแล้วข้อมูลจะไม่สามารถกู้คืนได้ โปรดดำเนินการด้วยความระมัดระวัง", + "deviceLimit": "จำนวนอุปกรณ์/เครื่อง", + "edit": "แก้ไข", + "editSubscribe": "แก้ไขการสมัครสมาชิก", + "form": { + "cancel": "ยกเลิก", + "confirm": "ยืนยัน", + "description": "คำอธิบาย", + "deviceLimit": "จำกัดอุปกรณ์", + "discount": "ส่วนลด", + "discountDescription": "ตั้งค่าส่วนลดตามราคาต่อหน่วย", + "discountMonths": "เดือน", + "discountPercent": "เปอร์เซ็นต์ส่วนลด", + "discount_price": "ราคาหลังหักส่วนลด", + "duration": "ระยะเวลา (เดือน)", + "inventory": "สต็อก", + "name": "ชื่อ", + "noLimit": "ไม่จำกัด", + "quota": "จำนวนจำกัดการซื้อ", + "replacement": "ราคารีเซ็ต (ต่อครั้ง)", + "selectSubscribeGroup": "กรุณาเลือกกลุ่มการสมัครสมาชิก", + "server": "เซิร์ฟเวอร์", + "serverGroup": "กลุ่มเซิร์ฟเวอร์", + "speedLimit": "จำกัดความเร็ว (Mbps)", + "subscribeGroup": "กลุ่มการสมัครสมาชิก", + "traffic": "ปริมาณข้อมูล", + "unit_price": "ราคาต่อเดือน" + }, + "group": { + "actions": "การดำเนินการ", + "cancel": "ยกเลิก", + "confirm": "ยืนยัน", + "confirmDelete": "ยืนยันการลบหรือไม่?", + "create": "สร้าง", + "createSubscribeGroup": "สร้างกลุ่มการสมัครใหม่", + "createSuccess": "สร้างสำเร็จ", + "delete": "ลบ", + "deleteSuccess": "ลบสำเร็จ", + "deleteWarning": "ข้อมูลจะไม่สามารถกู้คืนได้หลังจากลบ โปรดดำเนินการด้วยความระมัดระวัง", + "description": "คำอธิบาย", + "edit": "แก้ไข", + "editSubscribeGroup": "แก้ไขกลุ่มการสมัคร", + "form": { + "cancel": "ยกเลิก", + "confirm": "ยืนยัน", + "description": "คำอธิบาย", + "name": "ชื่อ" + }, + "name": "ชื่อ", + "title": "รายการกลุ่มการสมัคร", + "updateSuccess": "อัปเดตสำเร็จ", + "updatedAt": "เวลาอัปเดต" + }, + "inventory": "สินค้าคงคลัง", + "name": "ชื่อ", + "quota": "จำกัดการซื้อ/ครั้ง", + "replacement": "รีเซ็ตราคา/ครั้ง", + "sell": "ขาย", + "show": "แสดงหน้าแรก", + "subscribe": "สมัครสมาชิก", + "subscribeGroup": "สมัครกลุ่ม", + "tabs": { + "subscribe": "สมัครสมาชิก", + "subscribeGroup": "กลุ่มสมัครสมาชิก" + }, + "traffic": "การจราจร", + "unitPrice": "ราคา/เดือน", + "updateSuccess": "อัปเดตสำเร็จ" +} diff --git a/apps/admin/locales/th-TH/system.json b/apps/admin/locales/th-TH/system.json new file mode 100644 index 0000000..2668016 --- /dev/null +++ b/apps/admin/locales/th-TH/system.json @@ -0,0 +1,156 @@ +{ + "currency": { + "accessKey": "คีย์การเข้าถึง", + "accessKeyDescription": "https://exchangerate.host ให้บริการ API อัตราแลกเปลี่ยนฟรี", + "currencySymbol": "สัญลักษณ์สกุลเงิน", + "currencySymbolDescription": "ใช้สำหรับการแสดงผลเท่านั้น การเปลี่ยนแปลงจะส่งผลต่อหน่วยสกุลเงินทั้งหมดในระบบ", + "currencyUnit": "หน่วยสกุลเงิน", + "currencyUnitDescription": "ใช้สำหรับการแสดงผลเท่านั้น การเปลี่ยนแปลงจะส่งผลต่อหน่วยสกุลเงินทั้งหมดในระบบ", + "saveSuccess": "บันทึกสำเร็จ" + }, + "email": { + "expiration_email_template": "เทมเพลตการแจ้งเตือนหมดอายุ", + "expiration_email_templateDescription": "ตัวแปร {after}.ชื่อ{before} ในเทมเพลตจะถูกแทนที่ด้วยข้อมูลจริง โปรดตรวจสอบให้แน่ใจว่าคุณเก็บตัวแปรเหล่านี้ไว้", + "inputPlaceholder": "กรุณาใส่เนื้อหา...", + "maintenance_email_template": "เทมเพลตการแจ้งเตือนการบำรุงรักษา", + "maintenance_email_templateDescription": "ตัวแปร {after}.ชื่อ{before} ในเทมเพลตจะถูกแทนที่ด้วยข้อมูลจริง โปรดตรวจสอบให้แน่ใจว่าคุณเก็บตัวแปรเหล่านี้ไว้", + "saveSuccess": "การตั้งค่าได้รับการบันทึกเรียบร้อยแล้ว", + "sendFailure": "การส่งอีเมลทดสอบล้มเหลว โปรดตรวจสอบการตั้งค่า", + "sendSuccess": "การส่งอีเมลทดสอบสำเร็จ", + "sendTestEmail": "ส่งอีเมลทดสอบ", + "sendTestEmailDescription": "ส่งอีเมลทดสอบเพื่อยืนยันว่าการตั้งค่าถูกต้อง", + "senderAddress": "ที่อยู่อีเมลผู้ส่ง", + "senderAddressDescription": "ที่อยู่อีเมลเริ่มต้นที่ใช้ในการส่งอีเมล", + "smtpAccount": "บัญชี SMTP", + "smtpAccountDescription": "บัญชีอีเมลที่ใช้สำหรับการยืนยันตัวตน", + "smtpEncryptionMethod": "วิธีการเข้ารหัส SMTP", + "smtpEncryptionMethodDescription": "เลือกว่าจะเปิดใช้งานการเข้ารหัส SSL/TLS หรือไม่", + "smtpPassword": "รหัสผ่าน SMTP", + "smtpPasswordDescription": "รหัสผ่านของบัญชี SMTP นี้", + "smtpServerAddress": "ที่อยู่เซิร์ฟเวอร์ SMTP", + "smtpServerAddressDescription": "ระบุที่อยู่เซิร์ฟเวอร์ที่ใช้ในการส่งอีเมล", + "smtpServerPort": "พอร์ตเซิร์ฟเวอร์ SMTP", + "smtpServerPortDescription": "ระบุหมายเลขพอร์ตที่ใช้ในการเชื่อมต่อกับเซิร์ฟเวอร์ SMTP", + "verify_email_template": "เทมเพลตการยืนยันอีเมล", + "verify_email_templateDescription": "ตัวแปร {after}.ชื่อ{before} ในเทมเพลตจะถูกแทนที่ด้วยข้อมูลจริง โปรดตรวจสอบให้แน่ใจว่าคุณเก็บตัวแปรเหล่านี้ไว้" + }, + "invite": { + "commissionFirstTimeOnly": "ค่าคอมมิชชั่นเฉพาะการซื้อครั้งแรก", + "commissionFirstTimeOnlyDescription": "เมื่อเปิดใช้งาน ค่าคอมมิชชั่นจะเกิดขึ้นเฉพาะเมื่อผู้ถูกเชิญชำระเงินครั้งแรกเท่านั้น คุณสามารถกำหนดค่าผู้ใช้แต่ละรายในระบบจัดการผู้ใช้", + "enableForcedInvite": "เปิดใช้งานการเชิญบังคับ", + "enableForcedInviteDescription": "เมื่อเปิดใช้งาน เฉพาะผู้ใช้ที่ได้รับเชิญเท่านั้นที่สามารถลงทะเบียนได้", + "inputPlaceholder": "กรุณาใส่ข้อมูล", + "inviteCommissionPercentage": "เปอร์เซ็นต์ค่าคอมมิชชั่นการเชิญ", + "inviteCommissionPercentageDescription": "อัตราการแบ่งปันค่าคอมมิชชั่นทั่วโลกเริ่มต้น คุณสามารถกำหนดค่าอัตราเฉพาะในระบบจัดการผู้ใช้", + "saveSuccess": "บันทึกสำเร็จ" + }, + "node": { + "communicationKey": "คีย์การสื่อสาร", + "communicationKeyDescription": "คีย์สำหรับการสื่อสารของโหนด เพื่อให้มั่นใจว่าข้อมูลจะไม่ถูกดักจับโดยผู้อื่น", + "inputPlaceholder": "กรุณาใส่ข้อมูล", + "nodePullInterval": "ช่วงเวลาการดึงข้อมูลของโหนด", + "nodePullIntervalDescription": "ความถี่ที่โหนดดึงข้อมูลจากแผงควบคุม (วินาที)", + "nodePushInterval": "ช่วงเวลาการส่งข้อมูลของโหนด", + "nodePushIntervalDescription": "ความถี่ที่โหนดส่งข้อมูลไปยังแผงควบคุม", + "saveSuccess": "บันทึกสำเร็จ" + }, + "register": { + "emailSuffixWhitelist": "รายการอนุญาตโดเมนอีเมล", + "emailSuffixWhitelistDescription": "เมื่อเปิดใช้งาน จะสามารถลงทะเบียนได้เฉพาะอีเมลที่มีโดเมนในรายการเท่านั้น", + "emailVerification": "การยืนยันอีเมล", + "emailVerificationDescription": "เมื่อเปิดใช้งาน ผู้ใช้จะต้องยืนยันอีเมลของตน", + "ipRegistrationLimit": "จำกัดการลงทะเบียนตาม IP", + "ipRegistrationLimitDescription": "เมื่อเปิดใช้งาน IP ที่ตรงตามข้อกำหนดจะถูกจำกัดการลงทะเบียน โปรดทราบว่าการระบุ IP อาจมีปัญหาเนื่องจาก CDN หรือพร็อกซีหน้า", + "penaltyTime": "เวลาลงโทษ (นาที)", + "penaltyTimeDescription": "ผู้ใช้ต้องรอให้เวลาลงโทษผ่านไปก่อนจึงจะลงทะเบียนใหม่ได้", + "registrationLimitCount": "จำนวนจำกัดการลงทะเบียน", + "registrationLimitCountDescription": "เปิดใช้งานการลงโทษเมื่อถึงจำนวนจำกัดการลงทะเบียน", + "saveSuccess": "บันทึกสำเร็จ", + "stopNewUserRegistration": "หยุดการลงทะเบียนผู้ใช้ใหม่", + "stopNewUserRegistrationDescription": "เมื่อเปิดใช้งาน จะไม่มีใครสามารถลงทะเบียนได้", + "trialRegistration": "การลงทะเบียนทดลองใช้", + "trialRegistrationDescription": "เปิดใช้งานการลงทะเบียนทดลองใช้ โปรดแก้ไขแพ็คเกจและระยะเวลาทดลองใช้ก่อน", + "whitelistSuffixes": "โดเมนที่อนุญาต", + "whitelistSuffixesDescription": "ใช้สำหรับการยืนยันอีเมลในการลงทะเบียน หนึ่งรายการต่อบรรทัด", + "whitelistSuffixesPlaceholder": "กรุณาใส่โดเมนอีเมล หนึ่งรายการต่อบรรทัด" + }, + "site": { + "logo": "LOGO", + "logoDescription": "ใช้สำหรับแสดงตำแหน่งที่ต้องการแสดง LOGO", + "logoPlaceholder": "กรุณาใส่ URL ของ LOGO โดยไม่ต้องลงท้ายด้วย '/'", + "saveSuccess": "บันทึกสำเร็จ", + "siteDesc": "คำอธิบายเว็บไซต์", + "siteDescDescription": "ใช้สำหรับแสดงตำแหน่งที่ต้องการแสดงคำอธิบายเว็บไซต์", + "siteDescPlaceholder": "กรุณาใส่คำอธิบายเว็บไซต์", + "siteDomain": "โดเมนเว็บไซต์", + "siteDomainDescription": "ที่อยู่โดเมนของเว็บไซต์ปัจจุบัน เช่น ใช้ในอีเมล", + "siteDomainPlaceholder": "กรุณาใส่ที่อยู่โดเมน ใส่หลายโดเมนได้โดยใส่ทีละบรรทัด", + "siteName": "ชื่อเว็บไซต์", + "siteNameDescription": "ใช้สำหรับแสดงตำแหน่งที่ต้องการแสดงชื่อเว็บไซต์", + "siteNamePlaceholder": "กรุณาใส่ชื่อเว็บไซต์" + }, + "subscription": { + "add": "เพิ่ม", + "app": "แอปพลิเคชัน", + "appDescription": "กำหนดที่อยู่ดาวน์โหลดและกฎการนำเข้าแอปพลิเคชัน อย่าลืมบันทึกหลังจากแก้ไข", + "appDownloadURL": "ที่อยู่ดาวน์โหลดแอปพลิเคชัน", + "appIcon": "ไอคอนแอปพลิเคชัน", + "appName": "ชื่อแอปพลิเคชัน", + "delete": "ลบ", + "reset": "รีเซ็ต", + "save": "บันทึก", + "saveSuccess": "บันทึกสำเร็จ", + "singleSubscriptionMode": "โหมดการสมัครสมาชิกแบบเดี่ยว", + "singleSubscriptionModeDescription": "เมื่อเปิดใช้งาน แพ็คเกจของผู้ใช้ทั้งหมดจะถูกแปลงเป็นยอดคงเหลือ", + "subscriptionDomain": "โดเมนการสมัครสมาชิก", + "subscriptionDomainDescription": "ใช้สำหรับการสมัครสมาชิก หากเว้นว่างจะใช้โดเมนของเว็บไซต์", + "subscriptionDomainPlaceholder": "กรุณาใส่โดเมนการสมัครสมาชิก โดเมนหลายรายการให้ใส่ทีละบรรทัด", + "subscriptionPath": "เส้นทางการสมัครสมาชิก", + "subscriptionPathDescription": "ใช้สำหรับการสมัครสมาชิก หลังจากแก้ไขกรุณารีสตาร์ทระบบเพื่อให้ได้ประสบการณ์การใช้งานที่ดีที่สุด", + "subscriptionPathPlaceholder": "กรุณาใส่", + "subscriptionProtocol": "โปรโตคอลการสมัครสมาชิก", + "wildcardResolution": "การแก้ไขไวลด์การ์ด", + "wildcardResolutionDescription": "ใช้สำหรับการสมัครสมาชิก" + }, + "tabs": { + "currency": "สกุลเงิน", + "email": "อีเมล", + "invite": "เชิญ", + "node": "โหนด", + "register": "ลงทะเบียน", + "site": "เว็บไซต์", + "subscription": "การสมัครสมาชิก", + "telegram": "Telegram", + "tos": "ข้อกำหนดการให้บริการ", + "verify": "ยืนยัน" + }, + "telegram": { + "botToken": "โทเค็นบอท", + "botTokenDescription": "กรุณาใส่โทเค็นที่ได้รับจาก Botfather", + "enableBotNotifications": "เปิดการแจ้งเตือนบอท", + "enableBotNotificationsDescription": "เมื่อเปิดใช้งาน บอทจะส่งการแจ้งเตือนพื้นฐานไปยังผู้ดูแลและผู้ใช้ที่เชื่อมต่อกับ Telegram", + "groupURL": "URL ของกลุ่ม", + "groupURLDescription": "เมื่อกรอกแล้ว จะแสดงในฝั่งผู้ใช้หรือใช้ในตำแหน่งที่ต้องการ", + "inputPlaceholderBotToken": "0000000000:xxxxxxxxx_xxxxxxxxxxxxxxx", + "inputPlaceholderGroupURL": "https://t.me/xxxxxx", + "saveSuccess": "บันทึกสำเร็จ" + }, + "tos": { + "saveSuccess": "บันทึกสำเร็จ", + "title": "ข้อกำหนดการให้บริการ" + }, + "verify": { + "inputPlaceholder": "กรุณาใส่", + "loginVerificationCode": "รหัสยืนยันการเข้าสู่ระบบ", + "loginVerificationCodeDescription": "การยืนยันตัวตนเมื่อเข้าสู่ระบบ", + "registrationVerificationCode": "รหัสยืนยันการลงทะเบียน", + "registrationVerificationCodeDescription": "การยืนยันตัวตนเมื่อลงทะเบียน", + "resetPasswordVerificationCode": "รหัสยืนยันการรีเซ็ตรหัสผ่าน", + "resetPasswordVerificationCodeDescription": "การยืนยันตัวตนเมื่อรีเซ็ตรหัสผ่าน", + "saveSuccess": "บันทึกสำเร็จ", + "turnstileSecret": "รหัสลับ Turnstile", + "turnstileSecretDescription": "รหัสลับ Turnstile ที่ Cloudflare ให้มา", + "turnstileSiteKey": "รหัสไซต์ Turnstile", + "turnstileSiteKeyDescription": "รหัสไซต์ Turnstile ที่ Cloudflare ให้มา" + } +} diff --git a/apps/admin/locales/th-TH/ticket.json b/apps/admin/locales/th-TH/ticket.json new file mode 100644 index 0000000..7fa1843 --- /dev/null +++ b/apps/admin/locales/th-TH/ticket.json @@ -0,0 +1,19 @@ +{ + "actions": "การดำเนินการ", + "cancel": "ยกเลิก", + "check": "ตรวจสอบ", + "close": "ปิด", + "closeSuccess": "ปิดสำเร็จ", + "closeWarning": "เมื่อปิดแล้ว จะไม่สามารถดำเนินการกับใบสั่งงานนี้ได้ โปรดดำเนินการด้วยความระมัดระวัง", + "confirm": "ยืนยัน", + "confirmClose": "คุณแน่ใจหรือไม่ว่าต้องการปิด?", + "createdAt": "วันที่สร้าง", + "inputPlaceholder": "กรุณาใส่คำถามของคุณ เราจะตอบกลับโดยเร็วที่สุด", + "open": "เปิด", + "reply": "ตอบกลับ", + "status": ["สถานะ", "รอติดตาม", "รอตอบกลับ", "ดำเนินการแล้ว", "ปิด"], + "ticketList": "รายการตั๋ว", + "title": "หัวข้อ", + "updatedAt": "อัปเดตเมื่อ", + "user": "ผู้ใช้" +} diff --git a/apps/admin/locales/th-TH/tool.json b/apps/admin/locales/th-TH/tool.json new file mode 100644 index 0000000..a15c6c4 --- /dev/null +++ b/apps/admin/locales/th-TH/tool.json @@ -0,0 +1,26 @@ +{ + "caller": "ผู้โทร", + "cancel": "ยกเลิก", + "confirmReboot": "ยืนยันการรีบูต", + "confirmSystemReboot": "ยืนยันการรีบูตระบบ", + "confirmSystemUpgrade": "ยืนยันการอัปเกรดระบบ", + "confirmUpgrade": "ยืนยันการอัปเกรด", + "currentVersion": "เวอร์ชันปัจจุบันของระบบ:", + "errors": "ข้อผิดพลาด", + "ip": "IP", + "lastUpdated": "อัปเดตล่าสุด:", + "none": "ไม่มี", + "query": "ค้นหา", + "rebootDescription": "คุณแน่ใจหรือไม่ว่าต้องการรีบูตระบบ? การดำเนินการนี้จะทำให้บริการหยุดชะงักชั่วคราว.", + "rebooting": "กำลังรีบูตระบบ...", + "refreshLogs": "รีเฟรชบันทึก", + "request": "คำขอ", + "status": "สถานะ", + "systemLogs": "บันทึกระบบ", + "systemReboot": "ระบบรีบูต", + "systemServices": "บริการระบบ", + "systemUpgrade": "ระบบอัปเกรด", + "upgradeDescription": "คุณแน่ใจหรือไม่ว่าต้องการดำเนินการอัปเกรดระบบ? การดำเนินการนี้อาจใช้เวลาสักครู่ และในระหว่างนี้ระบบอาจไม่ตอบสนอง", + "userAgent": "ตัวแทนผู้ใช้", + "viewLogsAndManage": "ดูบันทึกของระบบ ดำเนินการอัปเกรดระบบและรีสตาร์ท" +} diff --git a/apps/admin/locales/th-TH/user.json b/apps/admin/locales/th-TH/user.json new file mode 100644 index 0000000..912fbc7 --- /dev/null +++ b/apps/admin/locales/th-TH/user.json @@ -0,0 +1,38 @@ +{ + "actions": "การดำเนินการ", + "balance": "ยอดคงเหลือ", + "cancel": "ยกเลิก", + "confirm": "ยืนยัน", + "confirmDelete": "คุณแน่ใจหรือว่าต้องการลบ?", + "create": "สร้าง", + "createSuccess": "สร้างสำเร็จ", + "createUser": "สร้างผู้ใช้", + "createdAt": "เวลาที่ลงทะเบียน", + "delete": "ลบ", + "deleteDescription": "หลังจากลบแล้วจะไม่สามารถกู้คืนข้อมูลได้ โปรดดำเนินการด้วยความระมัดระวัง", + "deleteSuccess": "ลบสำเร็จ", + "edit": "แก้ไข", + "editUser": "แก้ไขผู้ใช้", + "email": "อีเมล", + "enable": "เปิดใช้งาน", + "form": { + "balance": "ยอดคงเหลือ", + "balancePlaceholder": "ยอดคงเหลือ", + "cancel": "ยกเลิก", + "confirm": "ยืนยัน", + "invalidEmailFormat": "รูปแบบอีเมลไม่ถูกต้อง", + "inviteCode": "รหัสเชิญ", + "inviteCodePlaceholder": "กรุณาใส่รหัสเชิญ (เว้นว่างเพื่อสร้างอัตโนมัติ)", + "manager": "ผู้ดูแลระบบ", + "password": "รหัสผ่าน", + "passwordPlaceholder": "กรุณาใส่รหัสผ่านใหม่ (สามารถเว้นว่างได้)", + "refererId": "รหัสผู้แนะนำ", + "refererIdPlaceholder": "กรุณาใส่รหัสผู้แนะนำ", + "userEmail": "อีเมลผู้ใช้", + "userEmailPlaceholder": "กรุณาใส่อีเมลผู้ใช้" + }, + "referer": "ผู้แนะนำ", + "updateSuccess": "อัปเดตสำเร็จ", + "userList": "รายชื่อผู้ใช้", + "userName": "อีเมลผู้ใช้" +} diff --git a/apps/admin/locales/tr-TR/announcement.json b/apps/admin/locales/tr-TR/announcement.json new file mode 100644 index 0000000..97752d5 --- /dev/null +++ b/apps/admin/locales/tr-TR/announcement.json @@ -0,0 +1,30 @@ +{ + "actions": "eylemler", + "announcementList": "Duyuru Listesi", + "cancel": "İptal", + "confirm": "onayla", + "confirmDelete": "Silmek istediğinizden emin misiniz?", + "content": "içerik", + "create": "oluştur", + "createAnnouncement": "Duyuru Oluştur", + "createSuccess": "Başarıyla oluşturuldu", + "delete": "sil", + "deleteDescription": "Silindikten sonra, veriler geri alınamaz. Lütfen dikkatli olun.", + "deleteSuccess": "Başarıyla silindi", + "edit": "düzenle", + "editAnnouncement": "Duyuruyu Düzenle", + "enable": "Etkinleştir", + "form": { + "cancel": "İptal", + "confirm": "Onayla", + "content": "İçerik", + "contentPlaceholder": "Duyuru içeriğini giriniz (Markdown desteklenir)", + "title": "Başlık", + "titlePlaceholder": "Lütfen giriniz" + }, + "hide": "gizle", + "show": "göster", + "title": "Başlık", + "updateSuccess": "Güncelleme başarılı", + "updatedAt": "Güncellenme Zamanı" +} diff --git a/apps/admin/locales/tr-TR/auth.json b/apps/admin/locales/tr-TR/auth.json new file mode 100644 index 0000000..a0259f8 --- /dev/null +++ b/apps/admin/locales/tr-TR/auth.json @@ -0,0 +1,39 @@ +{ + "check": { + "checking": "Doğrulanıyor...", + "continue": "Devam et", + "description": "Giriş yapmak veya kaydolmak için lütfen e-posta adresinizi girin.", + "email": "Lütfen geçerli bir e-posta adresi girin.", + "title": "Giriş/Kayıt", + "whitelist": "E-posta alan adı izin verilen beyaz listede değil." + }, + "login": { + "description": "Lütfen giriş yapmak için hesap bilgilerinizi girin.", + "forgotPassword": "Şifrenizi mi unuttunuz?", + "success": "Başarıyla giriş yapıldı!", + "switchAccount": "Kayıt Ol/Hesap Değiştir", + "title": "Giriş Yap" + }, + "logout": "Çıkış Yap", + "orWithEmail": "veya e-posta kullan", + "register": { + "description": "Yeni bir hesap oluşturun, kaydolmak için bilgilerinizi doldurun.", + "existingAccount": "Zaten bir hesabınız var mı?", + "get": "Al", + "invite": "Davet Kodu", + "message": "#### Sayın Kullanıcı,\n\nİlginiz ve desteğiniz için teşekkür ederiz. Site işletme stratejimizin değişikliği nedeniyle, yeni kullanıcı kaydı işlevini kapattık. Bu süre zarfında, mevcut kullanıcıların kullanımı hiçbir şekilde etkilenmeyecektir.\n\nSize daha iyi hizmet ve deneyim sunmak için, kayıt kapalıyken kapsamlı bir sistem optimizasyonu ve işlev yükseltmesi gerçekleştireceğiz. Gelecekte, daha kaliteli içerik ve hizmetlerle sizi karşılamayı dört gözle bekliyoruz.\n\nEn son gelişmeler ve bildirimler için web sitemizi ve sosyal medya platformlarımızı takip edin. Anlayışınız ve desteğiniz için teşekkür ederiz.\n\nHerhangi bir sorunuz veya yardıma ihtiyacınız olursa, lütfen müşteri hizmetleri ekibimizle iletişime geçmekten çekinmeyin.\n\n**Desteğiniz ve anlayışınız için tekrar teşekkür ederiz.**", + "passwordMismatch": "Girilen şifreler uyuşmuyor", + "success": "Kayıt başarılı, otomatik olarak giriş yapıldı!", + "switchToLogin": "Giriş/Yeni E-posta Ayarla", + "title": "Kayıt Ol" + }, + "reset": { + "description": "Şifrenizi sıfırlamak için lütfen e-posta adresinizi girin.", + "existingAccount": "Zaten bir hesabınız var mı?", + "get": "Al", + "success": "Şifre sıfırlama başarılı, otomatik olarak girişe geçildi!", + "switchToLogin": "Giriş/Kayıt", + "title": "Şifre Sıfırla" + }, + "tos": "Hizmet Şartları" +} diff --git a/apps/admin/locales/tr-TR/common.json b/apps/admin/locales/tr-TR/common.json new file mode 100644 index 0000000..40657a8 --- /dev/null +++ b/apps/admin/locales/tr-TR/common.json @@ -0,0 +1,60 @@ +{ + "billing": { + "description": "Sponsor olmak, PPanel'in güncellemeler yayınlamaya devam etmesine yardımcı olur!", + "title": "Sponsorlar" + }, + "empty": [ + "Burada harika içeriklerle dolu olduğunu hayal edin! Şimdilik sadece hayal gücünüze güvenin…", + "Bu alan gizemli bir şekilde kayboldu, geri getirmeye çalışıyoruz!", + "Ah, hiçbir şey olmadı… Belki de kendiniz bir şeyler ekleyebilirsiniz!", + "Bu, bir konserde sahnede kimse olmadığını fark etmek gibi… Neden siz çıkıp performans sergilemiyorsunuz?", + "Boş bir cennet buldunuz! Bir ev inşa etmek ister misiniz?", + "Burası şimdilik boş, ama yaratıcılık buradan başlıyor!", + "Hiçbir şey yok… Ama endişelenmeyin, bu sadece bir başlangıç!", + "Burada büyük bir sürpriz hazırlanmıştı, ama sürpriz kaçtı!", + "Şimdilik hiçbir şey yok, tıpkı atıştırmalık dolabının boşalması gibi.", + "Bu boş alan, başrol oyuncusunu bekliyor!" + ], + "request": { + "10001": "Sorgu henüz başarılı olmadı, lütfen daha sonra tekrar deneyin veya koşullarınızı kontrol edin.", + "10002": "Güncelleme işlemi başarısız oldu, lütfen daha sonra tekrar deneyin.", + "10003": "Ekleme işlemi şu anda gerçekleştirilemiyor, lütfen daha sonra tekrar deneyin.", + "10004": "Silme işlemi tamamlanamadı, lütfen daha sonra tekrar deneyin.", + "20001": "Bu kullanıcı bilgileri zaten mevcut, lütfen bilgileri değiştirip tekrar deneyin.", + "20002": "Kullanıcı bulunamadı, lütfen bilgileri kontrol edip tekrar deneyin.", + "20003": "Girdiğiniz şifre yanlış, lütfen tekrar girin.", + "20004": "Bu kullanıcı devre dışı bırakıldı, sorularınız için lütfen müşteri hizmetleri ile iletişime geçin.", + "20005": "Bakiye yetersiz, lütfen yükleme yapıp tekrar deneyin.", + "20006": "Kayıt özelliği şu anda kullanılamıyor, lütfen daha sonra tekrar deneyin.", + "30001": "Bu düğüm zaten mevcut, lütfen tekrar eklemeyin.", + "30002": "İlgili düğüm bulunamadı, lütfen kontrol edip tekrar deneyin.", + "30003": "Grup zaten mevcut, lütfen başka bir ad kullanmayı deneyin.", + "30004": "Bu grup bulunamadı, lütfen bilgileri kontrol edip tekrar deneyin.", + "30005": "Bu grubun içinde hala içerik var, lütfen boşaltıp tekrar deneyin.", + "400": "İstek parametreleri yanlış, lütfen kontrol edip tekrar gönderin.", + "40002": "Geçerli bir Token bulunamadı, lütfen giriş yapıp tekrar deneyin.", + "40003": "Mevcut Token geçersiz, lütfen yeniden alıp tekrar deneyin.", + "40004": "Token süresi doldu, lütfen tekrar giriş yapın.", + "40005": "Erişim izniniz yok, sorularınız için lütfen yönetici ile iletişime geçin.", + "401": "Çok sık istek gönderildi, lütfen daha sonra tekrar deneyin.", + "500": "Sunucuda bazı sorunlar oluştu, lütfen daha sonra tekrar deneyin.", + "50001": "İlgili kupon bilgisi bulunamadı, lütfen kontrol edip tekrar deneyin.", + "50002": "Bu kupon zaten kullanıldı, tekrar kullanılamaz.", + "60001": "Abonelik süresi doldu, lütfen yenileyip tekrar kullanın.", + "60002": "Bu abonelik şu anda kullanılamıyor, lütfen daha sonra tekrar deneyin.", + "70001": "Doğrulama kodu hatalı, lütfen tekrar girin.", + "80001": "Görev kuyruğa başarıyla eklenemedi, lütfen daha sonra tekrar deneyin.", + "90001": "Lütfen DEBUG modunu kapatıp tekrar deneyin.", + "undefined": "Sistem hatası oluştu, lütfen daha sonra tekrar deneyin." + }, + "table": { + "actions": "Eylemler", + "asc": "Artan", + "desc": "Azalan", + "hide": "Gizle", + "pageInfo": "{total} sayfadan {current}. sayfa", + "rowsPerPage": "Sayfa başına satır", + "selectedItems": "{total} satır seçildi" + }, + "unlimited": "sınırsız" +} diff --git a/apps/admin/locales/tr-TR/coupon.json b/apps/admin/locales/tr-TR/coupon.json new file mode 100644 index 0000000..baf2d51 --- /dev/null +++ b/apps/admin/locales/tr-TR/coupon.json @@ -0,0 +1,50 @@ +{ + "actions": "eylemler", + "amount": "Tutar", + "cancel": "İptal", + "code": "kod", + "confirm": "Onayla", + "confirmDelete": "Silmek istediğinizden emin misiniz?", + "count": "miktar", + "couponList": "Kupon Listesi", + "create": "oluştur", + "createCoupon": "Kupon Oluştur", + "createSuccess": "Başarıyla oluşturuldu", + "delete": "sil", + "deleteSuccess": "Başarıyla silindi", + "deleteWarning": "Silindikten sonra veriler geri alınamaz. Lütfen dikkatli olun.", + "discount": "indirim", + "edit": "düzenle", + "editCoupon": "Kuponu Düzenle", + "enable": "Etkinleştir", + "form": { + "amountDiscount": "Tutar İndirimi", + "cancel": "İptal", + "confirm": "Onayla", + "count": "Maksimum Kullanım Sayısı", + "countPlaceholder": "Maksimum Kullanım Sayısı (Sınırsız için boş bırakın)", + "customCouponCode": "Özel Kupon Kodu", + "customCouponCodePlaceholder": "Özel Kupon Kodu (Otomatik oluşturmak için boş bırakın)", + "enterCouponName": "Lütfen kupon adını girin", + "enterValue": "Lütfen değeri girin", + "expireTime": "Son Kullanma Tarihi", + "name": "Ad", + "percentageDiscount": "Yüzde İndirimi", + "selectServer": "Lütfen Aboneliği Seçin", + "selectTime": "Zaman Seçin", + "specifiedServer": "Belirtilen Abonelik", + "startTime": "Başlangıç Zamanı", + "type": "Kupon Türü", + "userLimit": "Kullanıcı Başına Maksimum Kullanım Sayısı", + "userLimitPlaceholder": "Kullanıcı Başına Maksimum Kullanım Sayısı (Sınırsız için boş bırakın)" + }, + "name": "Adı", + "percentage": "yüzde", + "remainingTimes": "Kalan Süre", + "subscribe": "Abone Ol", + "type": "Tür", + "unlimited": "sınırsız", + "updateSuccess": "Güncelleme başarılı", + "usedTimes": "Kullanım Sayısı", + "validityPeriod": "Geçerlilik Süresi" +} diff --git a/apps/admin/locales/tr-TR/document.json b/apps/admin/locales/tr-TR/document.json new file mode 100644 index 0000000..d679ee4 --- /dev/null +++ b/apps/admin/locales/tr-TR/document.json @@ -0,0 +1,29 @@ +{ + "DocumentList": "Belge Listesi", + "actions": "eylemler", + "cancel": "İptal", + "confirm": "Onayla", + "confirmDelete": "Silmek istediğinizden emin misiniz?", + "create": "oluştur", + "createDocument": "Belge Oluştur", + "createSuccess": "Başarıyla oluşturuldu", + "delete": "sil", + "deleteDescription": "Silindikten sonra, veriler geri alınamaz. Lütfen dikkatli olun.", + "deleteSuccess": "Başarıyla silindi", + "edit": "düzenle", + "editDocument": "Belgeyi Düzenle", + "form": { + "cancel": "İptal", + "confirm": "Onayla", + "content": "İçerik", + "tags": "Kategoriler", + "tagsPlaceholder": "Birden fazla kategori girmek için Enter tuşunu veya virgül (,) kullanın", + "title": "Başlık", + "titlePlaceholder": "Lütfen girin" + }, + "show": "göster", + "tags": "Kategoriler", + "title": "Başlık", + "updateSuccess": "Güncelleme başarılı", + "updatedAt": "Güncellenme Zamanı" +} diff --git a/apps/admin/locales/tr-TR/index.json b/apps/admin/locales/tr-TR/index.json new file mode 100644 index 0000000..e918ce5 --- /dev/null +++ b/apps/admin/locales/tr-TR/index.json @@ -0,0 +1,29 @@ +{ + "email": "e-posta", + "month": "Bu Ay", + "monthDownloadTraffic": "Bu ayki indirme trafiği", + "monthUploadTraffic": "Bu ayki yükleme trafiği", + "newPurchase": "Yeni Satın Alma", + "nodeTraffic": "Düğüm Trafiği", + "nodes": "düğümler", + "offlineNodeCount": "Çevrimdışı Düğüm Sayısı", + "onlineIPCount": "Çevrimiçi IP Sayısı", + "onlineNodeCount": "Çevrimiçi Düğüm Sayısı", + "pendingTickets": "Bekleyen Biletler", + "register": "Kayıt Ol", + "repurchase": "yeniden satın alma", + "revenueTitle": "Gelir İstatistikleri", + "selectTypePlaceholder": "Tür seçin", + "statisticsTitle": "İstatistikler", + "today": "bugün", + "todayDownloadTraffic": "Bugünkü indirme trafiği", + "todayUploadTraffic": "Bugün Yükleme Trafiği", + "total": "Toplam", + "totalIncome": "Toplam Gelir", + "trafficRank": "Trafik Sıralaması", + "type": "Tür", + "userTitle": "Kullanıcı İstatistikleri", + "userTraffic": "Kullanıcı Trafiği", + "users": "kullanıcılar", + "yesterday": "dün" +} diff --git a/apps/admin/locales/tr-TR/language.json b/apps/admin/locales/tr-TR/language.json new file mode 100644 index 0000000..412c5f1 --- /dev/null +++ b/apps/admin/locales/tr-TR/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "Çekçe", + "de-DE": "Almanca", + "en-US": "İngilizce", + "es-ES": "İspanyolca", + "es-MX": "İspanyolca (Meksika)", + "fi-FI": "Fince", + "fr-FR": "Fransızca", + "hi-IN": "Hintçe", + "hu-HU": "Macarca", + "ja-JP": "Japonca", + "ko-KR": "Korece", + "no-NO": "Norveççe", + "pl-PL": "Lehçe", + "pt-BR": "Portekizce (Brezilya)", + "ro-RO": "Romence", + "ru-RU": "Rusça", + "th-TH": "Tayca", + "tr-TR": "Türkçe", + "uk-UA": "Ukraynaca", + "vi-VN": "Vietnamca", + "zh-CN": "Çince (Basitleştirilmiş)", + "zh-TW": "Çince (Geleneksel)" +} diff --git a/apps/admin/locales/tr-TR/menu.json b/apps/admin/locales/tr-TR/menu.json new file mode 100644 index 0000000..de89a1f --- /dev/null +++ b/apps/admin/locales/tr-TR/menu.json @@ -0,0 +1,18 @@ +{ + "Announcement Management": "Duyuru Yönetimi", + "Coupon Management": "Kupon Yönetimi", + "Dashboard": "Gösterge Paneli", + "Document Management": "Belge Yönetimi", + "Finance": "Finans", + "Order Management": "Sipariş Yönetimi", + "Payment Config": "Ödeme Yapılandırması", + "Server": "Sunucu", + "Server Management": "Sunucu Yönetimi", + "Settings": "Ayarlar", + "Subscribe Management": "Abonelik Yönetimi", + "System Config": "Sistem Yapılandırması", + "System Tool": "Sistem Aracı", + "Ticket Management": "Bilet Yönetimi", + "User": "Kullanıcı", + "User Management": "Kullanıcı Yönetimi" +} diff --git a/apps/admin/locales/tr-TR/order.json b/apps/admin/locales/tr-TR/order.json new file mode 100644 index 0000000..9bd763b --- /dev/null +++ b/apps/admin/locales/tr-TR/order.json @@ -0,0 +1,37 @@ +{ + "amount": "Tutar", + "couponDiscount": "Kupon İndirimi", + "discount": "İndirim Tutarı", + "failed": "başarısız", + "feeAmount": "Ücret Tutarı", + "method": "Ödeme Yöntemi", + "methods": { + "alipay_f2f": "Alipay(Yüz Yüze)", + "balance": "Bakiye", + "epay": "Kolay Ödeme", + "stripe_alipay": "Stripe(Alipay)", + "stripe_wechat_pay": "Stripe(WeChat)" + }, + "orderNumber": "Sipariş Numarası", + "status": { + "0": "Durum", + "1": "Ödeme Bekleniyor", + "2": "Ödendi", + "3": "İptal Edildi", + "4": "Kapandı", + "5": "Tamamlandı" + }, + "subscribe": "Abone Ol", + "subscribePrice": "Abonelik Fiyatı", + "total": "Toplam", + "tradeNo": "Ticaret Numarası", + "type": { + "0": "Tür", + "1": "Yeni Satın Alma", + "2": "Yenileme", + "3": "Veri Sıfırlama", + "4": "Yeniden Yükleme" + }, + "updateTime": "Güncelleme Zamanı", + "user": "kullanıcı" +} diff --git a/apps/admin/locales/tr-TR/payment.json b/apps/admin/locales/tr-TR/payment.json new file mode 100644 index 0000000..668f823 --- /dev/null +++ b/apps/admin/locales/tr-TR/payment.json @@ -0,0 +1,44 @@ +{ + "aliPay": "Alipay ile ödeme", + "alipayf2f": { + "appId": "Alipay Uygulama Kimliği", + "invoiceName": "Özel Ürün Adı", + "invoiceNameDescription": "Alipay faturasına gösterilecektir", + "privateKey": "Alipay Özel Anahtarı", + "publicKey": "Alipay Genel Anahtarı", + "sandbox": "Sandbox Modu", + "sandboxDescription": "Ödemeyi test etmek için sandbox modunu etkinleştirin" + }, + "enable": "Etkinleştir", + "enableDescription": "Bu ödeme yöntemini etkinleştir", + "epay": { + "key": "ANAHTAR", + "pid": "PID", + "url": "URL" + }, + "feeMode": "Ücretlendirme Modu", + "feeModeDescription": "Ekstra ücretin tahsilat yöntemi", + "feeModeItems": ["Ücretsiz", "Yüzde", "Sabit Tutar", "Her İkisi"], + "feePercent": "Yüzde Ücreti (isteğe bağlı)", + "feePercentDescription": "Sipariş tutarının üzerine eklenen ücret", + "fixedFee": "Sabit Ücret (isteğe bağlı)", + "fixedFeeDescription": "Sipariş tutarına ek olarak sabit ücret eklenir", + "iconUrl": "Simge URL'si (isteğe bağlı)", + "iconUrlDescription": "Ön uçta görüntüleme için kullanılır", + "inputPlaceholder": "Lütfen girin", + "key": "ANAHTAR", + "notifyUrl": "Özel bildirim alanı (isteğe bağlı)", + "notifyUrlDescription": "Ağ geçidi bildirimi bu alana gönderilecektir", + "payForRecommendations": "Öneriler için ödeme yap", + "pid": "PID", + "saveSuccess": "Başarıyla kaydedildi", + "showName": "Görünen Ad", + "showNameDescription": "Ön uçta görüntüleme için kullanılır", + "stripe": { + "publicKey": "GENEL ANAHTAR", + "secretKey": "GİZLİ ANAHTAR", + "webhookSecret": "WEBHOOK GİZLİ İMZA" + }, + "url": "URL", + "wechatPay": "WeChat Pay" +} diff --git a/apps/admin/locales/tr-TR/server.json b/apps/admin/locales/tr-TR/server.json new file mode 100644 index 0000000..c1e1863 --- /dev/null +++ b/apps/admin/locales/tr-TR/server.json @@ -0,0 +1,122 @@ +{ + "group": { + "actions": "İşlemler", + "cancel": "İptal", + "confirm": "Onayla", + "confirmDelete": "Silmek istediğinizden emin misiniz?", + "create": "Oluştur", + "createNodeGroup": "Düğüm Grubu Oluştur", + "createdSuccessfully": "Başarıyla oluşturuldu", + "delete": "Sil", + "deleteWarning": "Sildikten sonra veriler geri alınamaz, lütfen dikkatli olun.", + "deletedSuccessfully": "Başarıyla silindi", + "description": "Açıklama", + "edit": "Düzenle", + "editNodeGroup": "Düğüm Grubunu Düzenle", + "form": { + "cancel": "İptal", + "confirm": "Onayla", + "description": "Açıklama", + "name": "Ad" + }, + "name": "Ad", + "title": "Düğüm Grubu Listesi", + "updatedAt": "Güncellenme Zamanı" + }, + "node": { + "abnormal": "Anormal", + "actions": "İşlemler", + "address": "Adres", + "all": "Tümü", + "cancel": "İptal", + "confirm": "Onayla", + "confirmDelete": "Silmek istediğinizden emin misiniz?", + "create": "Oluştur", + "createNode": "Düğüm Oluştur", + "createSuccess": "Başarıyla oluşturuldu", + "delete": "Sil", + "deleteSuccess": "Başarıyla silindi", + "deleteWarning": "Sildikten sonra, veriler geri alınamaz. Lütfen dikkatli olun.", + "disk": "Disk", + "edit": "Düzenle", + "editNode": "Düğümü Düzenle", + "enable": "Etkinleştir", + "form": { + "allowInsecure": "Güvensizliğe izin ver", + "cancel": "İptal", + "confirm": "Onayla", + "edit": "Düzenle", + "editSecurity": "Güvenlik Ayarlarını Düzenle", + "enableRelay": "Röleyi Etkinleştir", + "enableTLS": "TLS'i Etkinleştir", + "encryptionMethod": "Şifreleme Yöntemi", + "flow": "Akış Kontrol Algoritması", + "hopInterval": "Atlama Aralığı", + "hopPorts": "Atlama Portları", + "hopPortsPlaceholder": "Birden fazla portu virgülle ayırın", + "name": "Ad", + "nodeGroupId": "Düğüm Grubu ID", + "obfsPassword": "Karmaşık Şifre", + "obfsPasswordPlaceholder": "Boş bırakılırsa karmaşıklaştırılmaz", + "path": "Yol", + "pleaseSelect": "Lütfen seçin", + "port": "Sunucu Portu", + "protocol": "Protokol", + "relayHost": "Röle Adresi", + "relayPort": "Röle Portu", + "remarks": "Açıklamalar", + "security": "Güvenlik", + "securityConfig": "Güvenlik Ayarları", + "security_config": { + "fingerprint": "Parmak İzi", + "privateKey": "Özel Anahtar", + "privateKeyPlaceholder": "Boş bırakılırsa otomatik oluşturulur", + "publicKey": "Genel Anahtar", + "publicKeyPlaceholder": "Boş bırakılırsa otomatik oluşturulur", + "serverAddress": "Sunucu Adresi", + "serverAddressPlaceholder": "REALITY hedef adresi, varsayılan olarak SNI kullanılır", + "serverName": "Sunucu Adı (SNI)", + "serverNamePlaceholder": "REALITY için zorunlu, arka uç ile uyumlu olmalı", + "serverPort": "Sunucu Portu", + "serverPortPlaceholder": "REALITY hedef portu, varsayılan 443", + "shortId": "Kısa ID", + "shortIdPlaceholder": "Boş bırakılırsa otomatik oluşturulur", + "sni": "Sunucu Adı Belirtimi (SNI)" + }, + "selectEncryptionMethod": "Şifreleme Yöntemi Seç", + "selectNodeGroup": "Düğüm Grubu Seç", + "selectProtocol": "Protokol Seç", + "serverAddr": "Sunucu Adresi", + "serverName": "Sunucu Adı", + "speedLimit": "Hız Sınırı", + "speedLimitPlaceholder": "Sınırsız", + "trafficRatio": "Trafik Oranı", + "transport": "Taşıma Protokolü", + "transportConfig": "Taşıma Protokolü Ayarları", + "transportHost": "Taşıma Sunucu Adresi", + "transportPath": "Taşıma Yolu", + "transportServerName": "Taşıma Sunucu Adı" + }, + "lastUpdated": "Son Güncelleme", + "memory": "Bellek", + "name": "Ad", + "node": "Düğüm", + "nodeGroup": "Düğüm Grubu", + "normal": "Normal", + "onlineCount": "Çevrimiçi Kişi Sayısı", + "onlineUsers": "Çevrimiçi Kullanıcılar", + "rate": "Oran", + "relay": "Röle", + "serverAddr": "Sunucu Adresi", + "speedLimit": "Hız Sınırı", + "status": "Durum", + "trafficRatio": "Trafik Oranı", + "type": "Tür", + "updateSuccess": "Başarıyla güncellendi", + "updatedAt": "Güncellenme Zamanı" + }, + "tabs": { + "node": "Düğüm", + "nodeGroup": "Düğüm Grubu" + } +} diff --git a/apps/admin/locales/tr-TR/subscribe.json b/apps/admin/locales/tr-TR/subscribe.json new file mode 100644 index 0000000..322375a --- /dev/null +++ b/apps/admin/locales/tr-TR/subscribe.json @@ -0,0 +1,79 @@ +{ + "actions": "eylemler", + "cancel": "İptal", + "confirm": "Onayla", + "confirmDelete": "Silmek istediğinizden emin misiniz?", + "create": "oluştur", + "createSubscribe": "Yeni Abonelik Oluştur", + "createSuccess": "Başarıyla oluşturuldu", + "delete": "sil", + "deleteSuccess": "Başarıyla silindi", + "deleteWarning": "Sildikten sonra veriler kurtarılamaz, lütfen dikkatli olun.", + "deviceLimit": "Cihaz sayısı/adet", + "edit": "düzenle", + "editSubscribe": "Aboneliği Düzenle", + "form": { + "cancel": "İptal", + "confirm": "Onayla", + "description": "Açıklama", + "deviceLimit": "Cihaz Sınırı", + "discount": "İndirim", + "discountDescription": "Birim fiyatına göre indirim ayarla", + "discountMonths": "Ay", + "discountPercent": "İndirim Yüzdesi", + "discount_price": "İndirimli Fiyat", + "duration": "Süre (ay)", + "inventory": "Stok", + "name": "Ad", + "noLimit": "Sınırsız", + "quota": "Satın Alma Limiti", + "replacement": "Yenileme Ücreti (her seferinde)", + "selectSubscribeGroup": "Abonelik Grubunu Seçiniz", + "server": "Sunucu", + "serverGroup": "Sunucu Grubu", + "speedLimit": "Hız Sınırı (Mbps)", + "subscribeGroup": "Abonelik Grubu", + "traffic": "Trafik", + "unit_price": "Aylık Fiyat" + }, + "group": { + "actions": "Eylemler", + "cancel": "İptal", + "confirm": "Onayla", + "confirmDelete": "Silmek istediğinizden emin misiniz?", + "create": "Oluştur", + "createSubscribeGroup": "Yeni Abonelik Grubu Oluştur", + "createSuccess": "Başarıyla oluşturuldu", + "delete": "Sil", + "deleteSuccess": "Başarıyla silindi", + "deleteWarning": "Sildikten sonra veriler geri alınamaz, lütfen dikkatli olun.", + "description": "Açıklama", + "edit": "Düzenle", + "editSubscribeGroup": "Abonelik Grubunu Düzenle", + "form": { + "cancel": "İptal", + "confirm": "Onayla", + "description": "Açıklama", + "name": "Ad" + }, + "name": "Ad", + "title": "Abonelik Grubu Listesi", + "updateSuccess": "Başarıyla güncellendi", + "updatedAt": "Güncellenme Zamanı" + }, + "inventory": "envanter", + "name": "isim", + "quota": "Kota/satın alma", + "replacement": "Fiyatı sıfırla/kez", + "sell": "satış", + "show": "Ana sayfada göster", + "subscribe": "Abone Ol", + "subscribeGroup": "Gruba Abone Ol", + "tabs": { + "subscribe": "Abone Ol", + "subscribeGroup": "Abone Grubu" + }, + "traffic": "trafik", + "unitPrice": "Fiyat/ay", + "updateSuccess": "Güncelleme başarılı" +} diff --git a/apps/admin/locales/tr-TR/system.json b/apps/admin/locales/tr-TR/system.json new file mode 100644 index 0000000..2b8d2f1 --- /dev/null +++ b/apps/admin/locales/tr-TR/system.json @@ -0,0 +1,156 @@ +{ + "currency": { + "accessKey": "Anahtar", + "accessKeyDescription": "https://exchangerate.host tarafından ücretsiz sağlanan döviz kuru API anahtarı", + "currencySymbol": "Para Birimi Simgesi", + "currencySymbolDescription": "Sadece gösterim amaçlı kullanılır, değiştirildiğinde sistemdeki tüm para birimi birimleri değişecektir", + "currencyUnit": "Para Birimi Birimi", + "currencyUnitDescription": "Sadece gösterim amaçlı kullanılır, değiştirildiğinde sistemdeki tüm para birimi birimleri değişecektir", + "saveSuccess": "Başarıyla kaydedildi" + }, + "email": { + "expiration_email_template": "Son Kullanım Tarihi Bildirim Şablonu", + "expiration_email_templateDescription": "Şablondaki {after}.değişkenAdı{before} gerçek verilerle değiştirilecektir, lütfen bu değişkenleri koruduğunuzdan emin olun.", + "inputPlaceholder": "Lütfen içerik girin...", + "maintenance_email_template": "Bakım Bildirim Şablonu", + "maintenance_email_templateDescription": "Şablondaki {after}.değişkenAdı{before} gerçek verilerle değiştirilecektir, lütfen bu değişkenleri koruduğunuzdan emin olun.", + "saveSuccess": "Yapılandırma başarıyla kaydedildi.", + "sendFailure": "Test e-postası gönderilemedi, lütfen yapılandırmayı kontrol edin.", + "sendSuccess": "Test e-postası başarıyla gönderildi.", + "sendTestEmail": "Test E-postası Gönder", + "sendTestEmailDescription": "Yapılandırmanın doğru olup olmadığını doğrulamak için bir test e-postası gönderin.", + "senderAddress": "Gönderen Adresi", + "senderAddressDescription": "E-posta göndermek için varsayılan olarak kullanılan e-posta adresi.", + "smtpAccount": "SMTP Hesabı", + "smtpAccountDescription": "Kimlik doğrulama için kullanılan e-posta hesabı.", + "smtpEncryptionMethod": "SMTP Şifreleme Yöntemi", + "smtpEncryptionMethodDescription": "SSL/TLS şifrelemesini etkinleştirip etkinleştirmeyeceğinizi seçin.", + "smtpPassword": "SMTP Şifresi", + "smtpPasswordDescription": "Bu SMTP hesabının şifresi.", + "smtpServerAddress": "SMTP Sunucu Adresi", + "smtpServerAddressDescription": "E-posta göndermek için kullanılan sunucu adresini belirtin.", + "smtpServerPort": "SMTP Sunucu Portu", + "smtpServerPortDescription": "SMTP sunucusuna bağlanmak için kullanılan port numarasını belirtin.", + "verify_email_template": "Doğrulama E-postası Şablonu", + "verify_email_templateDescription": "Şablondaki {after}.değişkenAdı{before} gerçek verilerle değiştirilecektir, lütfen bu değişkenleri koruduğunuzdan emin olun." + }, + "invite": { + "commissionFirstTimeOnly": "Yalnızca İlk Satın Alma Komisyonu", + "commissionFirstTimeOnlyDescription": "Etkinleştirildiğinde, komisyon yalnızca davet edenin ilk ödemesi sırasında oluşturulur. Kullanıcı yönetiminde tek bir kullanıcıyı yapılandırabilirsiniz.", + "enableForcedInvite": "Zorunlu Daveti Etkinleştir", + "enableForcedInviteDescription": "Etkinleştirildiğinde, yalnızca davet edilen kullanıcılar kayıt olabilir.", + "inputPlaceholder": "Lütfen giriniz", + "inviteCommissionPercentage": "Davet Komisyon Yüzdesi", + "inviteCommissionPercentageDescription": "Varsayılan küresel komisyon dağıtım oranı, kullanıcı yönetiminde tek bir oran yapılandırabilirsiniz.", + "saveSuccess": "Başarıyla kaydedildi" + }, + "node": { + "communicationKey": "İletişim Anahtarı", + "communicationKeyDescription": "Verilerin başkaları tarafından ele geçirilmemesini sağlamak için düğüm iletişim anahtarı", + "inputPlaceholder": "Lütfen giriniz", + "nodePullInterval": "Düğüm Çekme Aralığı", + "nodePullIntervalDescription": "Düğümün panelden veri alma sıklığı (saniye)", + "nodePushInterval": "Düğüm Gönderme Aralığı", + "nodePushIntervalDescription": "Düğümün verileri panele gönderme sıklığı", + "saveSuccess": "Başarıyla kaydedildi" + }, + "register": { + "emailSuffixWhitelist": "E-posta Soneki Beyaz Listesi", + "emailSuffixWhitelistDescription": "Etkinleştirildiğinde, yalnızca listedeki soneklerle biten e-postalar kaydolabilir", + "emailVerification": "E-posta Doğrulama", + "emailVerificationDescription": "Etkinleştirildiğinde, kullanıcıların e-postalarını doğrulamaları gerekecek", + "ipRegistrationLimit": "IP Kayıt Sınırı", + "ipRegistrationLimitDescription": "Etkinleştirildiğinde, kurallara uyan IP'ler kayıtla sınırlandırılacaktır. CDN veya ön uç proxy nedeniyle IP belirlemede sorunlar yaşanabilir", + "penaltyTime": "Ceza Süresi (dakika)", + "penaltyTimeDescription": "Kullanıcılar tekrar kayıt olabilmek için ceza süresinin dolmasını beklemelidir", + "registrationLimitCount": "Kayıt Sınır Sayısı", + "registrationLimitCountDescription": "Kayıt sınırına ulaşıldığında ceza etkinleştirilir", + "saveSuccess": "Başarıyla Kaydedildi", + "stopNewUserRegistration": "Yeni Kullanıcı Kaydını Durdur", + "stopNewUserRegistrationDescription": "Etkinleştirildiğinde, kimse kayıt olamaz", + "trialRegistration": "Deneme Kaydı", + "trialRegistrationDescription": "Deneme kaydını etkinleştirin, lütfen önce deneme paketi ve süresini değiştirin", + "whitelistSuffixes": "Beyaz Liste Sonekleri", + "whitelistSuffixesDescription": "E-posta doğrulaması için kullanılır, her satıra bir tane", + "whitelistSuffixesPlaceholder": "Lütfen e-posta soneki girin, her satıra bir tane" + }, + "site": { + "logo": "LOGO", + "logoDescription": "LOGO'nun gösterilmesi gereken yeri belirtir", + "logoPlaceholder": "Lütfen LOGO'nun URL adresini girin, '/' ile bitmemelidir", + "saveSuccess": "Başarıyla kaydedildi", + "siteDesc": "Site Açıklaması", + "siteDescDescription": "Site açıklamasının gösterilmesi gereken yeri belirtir", + "siteDescPlaceholder": "Lütfen site açıklamasını girin", + "siteDomain": "Site Alan Adı", + "siteDomainDescription": "Mevcut web sitesinin alan adı adresi, örneğin e-postalarda kullanılmak üzere", + "siteDomainPlaceholder": "Lütfen alan adı adresini girin, birden fazla alan adı için her satıra bir tane yazın", + "siteName": "Site Adı", + "siteNameDescription": "Site adının gösterilmesi gereken yeri belirtir", + "siteNamePlaceholder": "Lütfen site adını girin" + }, + "subscription": { + "add": "Ekle", + "app": "Uygulama", + "appDescription": "Uygulamanın indirme adresini ve içe aktarma kurallarını yapılandırın, değişiklikleri kaydetmeyi unutmayın", + "appDownloadURL": "Uygulama İndirme Adresi", + "appIcon": "Uygulama Simgesi", + "appName": "Uygulama Adı", + "delete": "Sil", + "reset": "Sıfırla", + "save": "Kaydet", + "saveSuccess": "Başarıyla kaydedildi", + "singleSubscriptionMode": "Tekli Abonelik Modu", + "singleSubscriptionModeDescription": "Açıldığında, tüm kullanıcıların paketleri bakiyeye dönüştürülecektir", + "subscriptionDomain": "Abonelik Alan Adı", + "subscriptionDomainDescription": "Abonelik için kullanılır, boş bırakılırsa site alan adı kullanılır", + "subscriptionDomainPlaceholder": "Lütfen abonelik alan adını girin, birden fazla alan adı için her satıra bir tane yazın", + "subscriptionPath": "Abonelik Yolu", + "subscriptionPathDescription": "Abonelik için kullanılır, değiştirdikten sonra en iyi performans deneyimini sağlamak için sistemi yeniden başlatmayı unutmayın", + "subscriptionPathPlaceholder": "Lütfen girin", + "subscriptionProtocol": "Abonelik Protokolü", + "wildcardResolution": "Joker Karakter Çözünürlüğü", + "wildcardResolutionDescription": "Abonelik için kullanılır" + }, + "tabs": { + "currency": "Para Birimi", + "email": "E-posta", + "invite": "Davet Et", + "node": "Düğüm", + "register": "Kayıt Ol", + "site": "Site", + "subscription": "Abonelik", + "telegram": "Telegram", + "tos": "Hizmet Şartları", + "verify": "Doğrula" + }, + "telegram": { + "botToken": "Bot Token", + "botTokenDescription": "Lütfen Botfather tarafından sağlanan tokeni girin", + "enableBotNotifications": "Bot Bildirimlerini Etkinleştir", + "enableBotNotificationsDescription": "Etkinleştirildiğinde, bot Telegram'a bağlı yöneticilere ve kullanıcılara temel bildirimler gönderecektir", + "groupURL": "Grup URL'si", + "groupURLDescription": "Doldurulduğunda, kullanıcı arayüzünde gösterilecek veya gerektiği yerlerde kullanılacaktır", + "inputPlaceholderBotToken": "0000000000:xxxxxxxxx_xxxxxxxxxxxxxxx", + "inputPlaceholderGroupURL": "https://t.me/xxxxxx", + "saveSuccess": "Başarıyla kaydedildi" + }, + "tos": { + "saveSuccess": "Kaydetme Başarılı", + "title": "Hizmet Şartları" + }, + "verify": { + "inputPlaceholder": "Lütfen giriniz", + "loginVerificationCode": "Giriş Doğrulama Kodu", + "loginVerificationCodeDescription": "Giriş sırasında insan-makine doğrulaması", + "registrationVerificationCode": "Kayıt Doğrulama Kodu", + "registrationVerificationCodeDescription": "Kayıt sırasında insan-makine doğrulaması", + "resetPasswordVerificationCode": "Şifre Sıfırlama Doğrulama Kodu", + "resetPasswordVerificationCodeDescription": "Şifre sıfırlama sırasında insan-makine doğrulaması", + "saveSuccess": "Başarıyla kaydedildi", + "turnstileSecret": "Turnstile Gizli Anahtarı", + "turnstileSecretDescription": "Cloudflare tarafından sağlanan Turnstile gizli anahtarı", + "turnstileSiteKey": "Turnstile Site Anahtarı", + "turnstileSiteKeyDescription": "Cloudflare tarafından sağlanan Turnstile site anahtarı" + } +} diff --git a/apps/admin/locales/tr-TR/ticket.json b/apps/admin/locales/tr-TR/ticket.json new file mode 100644 index 0000000..4896045 --- /dev/null +++ b/apps/admin/locales/tr-TR/ticket.json @@ -0,0 +1,19 @@ +{ + "actions": "eylemler", + "cancel": "İptal", + "check": "Kontrol et", + "close": "Kapat", + "closeSuccess": "Başarıyla kapatıldı", + "closeWarning": "Bir kez kapatıldığında, bu iş emri üzerinde işlem yapılamaz. Lütfen dikkatli olun.", + "confirm": "Onayla", + "confirmClose": "Kapatmak istediğinizden emin misiniz?", + "createdAt": "Oluşturulma Zamanı", + "inputPlaceholder": "Sorunuzu girin, en kısa sürede yanıtlayacağız.", + "open": "aç", + "reply": "cevap", + "status": ["Durum", "Takip Edilecek", "Yanıt Bekleniyor", "İşlem Tamamlandı", "Kapalı"], + "ticketList": "Bilet Listesi", + "title": "Başlık", + "updatedAt": "Güncelleme Zamanı", + "user": "kullanıcı" +} diff --git a/apps/admin/locales/tr-TR/tool.json b/apps/admin/locales/tr-TR/tool.json new file mode 100644 index 0000000..1a2d6e7 --- /dev/null +++ b/apps/admin/locales/tr-TR/tool.json @@ -0,0 +1,26 @@ +{ + "caller": "Arayan", + "cancel": "İptal", + "confirmReboot": "Yeniden başlatmayı onayla", + "confirmSystemReboot": "Sistemin yeniden başlatılmasını onayla", + "confirmSystemUpgrade": "Sistem yükseltmesini onayla", + "confirmUpgrade": "Yükseltmeyi Onayla", + "currentVersion": "Mevcut Sistem Sürümü:", + "errors": "Hatalar", + "ip": "IP", + "lastUpdated": "Son Güncelleme:", + "none": "Hiçbiri", + "query": "Sorgu", + "rebootDescription": "Sistemi yeniden başlatmak istediğinizden emin misiniz? Bu işlem kısa süreli hizmet kesintisine neden olacaktır.", + "rebooting": "Sistem yeniden başlatılıyor...", + "refreshLogs": "Günlükleri Yenile", + "request": "İstek", + "status": "Durum", + "systemLogs": "Sistem Günlükleri", + "systemReboot": "Sistem Yeniden Başlatma", + "systemServices": "Sistem Hizmetleri", + "systemUpgrade": "Sistem Yükseltmesi", + "upgradeDescription": "Sistem yükseltmesi yapmak istediğinizden emin misiniz? Bu işlem birkaç dakika sürebilir ve bu süre zarfında sistem yanıt vermeyebilir.", + "userAgent": "Kullanıcı Aracısı", + "viewLogsAndManage": "Sistem günlüklerini görüntüleyin, sistem yükseltmelerini gerçekleştirin ve yeniden başlatma işlemlerini yönetin" +} diff --git a/apps/admin/locales/tr-TR/user.json b/apps/admin/locales/tr-TR/user.json new file mode 100644 index 0000000..78c5a93 --- /dev/null +++ b/apps/admin/locales/tr-TR/user.json @@ -0,0 +1,38 @@ +{ + "actions": "eylemler", + "balance": "Bakiye", + "cancel": "İptal", + "confirm": "Onayla", + "confirmDelete": "Silmek istediğinizden emin misiniz?", + "create": "oluştur", + "createSuccess": "Başarıyla oluşturuldu", + "createUser": "Kullanıcı Oluştur", + "createdAt": "Kayıt Tarihi", + "delete": "sil", + "deleteDescription": "Silindikten sonra veriler kurtarılamaz, lütfen dikkatli olun.", + "deleteSuccess": "Başarıyla silindi", + "edit": "düzenle", + "editUser": "Kullanıcıyı Düzenle", + "email": "e-posta", + "enable": "etkinleştir", + "form": { + "balance": "Bakiye", + "balancePlaceholder": "Bakiye", + "cancel": "İptal", + "confirm": "Onayla", + "invalidEmailFormat": "Geçersiz e-posta formatı", + "inviteCode": "Davet Kodu", + "inviteCodePlaceholder": "Lütfen davet kodunu girin (boş bırakılırsa otomatik oluşturulur)", + "manager": "Yönetici", + "password": "Şifre", + "passwordPlaceholder": "Lütfen yeni şifreyi girin (boş bırakılabilir)", + "refererId": "Referans ID", + "refererIdPlaceholder": "Lütfen referans ID'yi girin", + "userEmail": "Kullanıcı E-postası", + "userEmailPlaceholder": "Lütfen kullanıcı e-postasını girin" + }, + "referer": "Referans", + "updateSuccess": "Güncelleme başarılı", + "userList": "Kullanıcı Listesi", + "userName": "Kullanıcı E-postası" +} diff --git a/apps/admin/locales/uk-UA/announcement.json b/apps/admin/locales/uk-UA/announcement.json new file mode 100644 index 0000000..1650484 --- /dev/null +++ b/apps/admin/locales/uk-UA/announcement.json @@ -0,0 +1,30 @@ +{ + "actions": "Дії", + "announcementList": "Список оголошень", + "cancel": "Скасувати", + "confirm": "Підтвердити", + "confirmDelete": "Ви впевнені, що хочете видалити?", + "content": "вміст", + "create": "Створити", + "createAnnouncement": "Створити оголошення", + "createSuccess": "Створено успішно", + "delete": "видалити", + "deleteDescription": "Після видалення дані не можна буде відновити. Будь ласка, дійте обережно.", + "deleteSuccess": "Видалення успішне", + "edit": "редагувати", + "editAnnouncement": "Редагувати оголошення", + "enable": "Увімкнути", + "form": { + "cancel": "Скасувати", + "confirm": "Підтвердити", + "content": "Зміст", + "contentPlaceholder": "Будь ласка, введіть зміст оголошення (підтримується Markdown)", + "title": "Заголовок", + "titlePlaceholder": "Будь ласка, введіть" + }, + "hide": "приховати", + "show": "Показати", + "title": "Заголовок", + "updateSuccess": "Оновлення успішне", + "updatedAt": "Оновлено" +} diff --git a/apps/admin/locales/uk-UA/auth.json b/apps/admin/locales/uk-UA/auth.json new file mode 100644 index 0000000..f0f1d54 --- /dev/null +++ b/apps/admin/locales/uk-UA/auth.json @@ -0,0 +1,39 @@ +{ + "check": { + "checking": "Перевірка...", + "continue": "Продовжити", + "description": "Будь ласка, введіть свою електронну пошту, щоб продовжити вхід або реєстрацію.", + "email": "Будь ласка, введіть дійсну електронну адресу.", + "title": "Вхід/Реєстрація", + "whitelist": "Домен електронної пошти не входить до дозволеного білого списку." + }, + "login": { + "description": "Будь ласка, введіть ваші облікові дані для входу.", + "forgotPassword": "Забули пароль?", + "success": "Вхід успішний!", + "switchAccount": "Зареєструватися/Змінити акаунт", + "title": "Вхід" + }, + "logout": "Вийти з системи", + "orWithEmail": "або використовуйте електронну пошту", + "register": { + "description": "Створіть новий обліковий запис, заповніть ваші дані для реєстрації.", + "existingAccount": "Вже маєте обліковий запис?", + "get": "Отримати", + "invite": "Код запрошення", + "message": "#### Шановний користувач!\n\nДякуємо за вашу увагу та підтримку. У зв'язку зі зміною стратегії роботи сайту, ми закрили функцію реєстрації нових користувачів. Протягом цього періоду використання існуючими користувачами не буде зазнавати жодних змін.\n\nМи прагнемо надавати вам кращий сервіс та досвід, тому під час закриття реєстрації ми проведемо повну оптимізацію системи та оновлення функцій. У майбутньому ми зустрінемо вас з якіснішим контентом та послугами.\n\nБудь ласка, слідкуйте за нашим сайтом та соціальними мережами, щоб отримувати останні новини та повідомлення. Дякуємо за ваше розуміння та підтримку.\n\nЯкщо у вас є будь-які питання або потрібна допомога, будь ласка, зв'яжіться з нашою службою підтримки.\n\n**Ще раз дякуємо за вашу підтримку та розуміння.**", + "passwordMismatch": "Паролі не співпадають", + "success": "Реєстрація успішна, автоматично увійшли!", + "switchToLogin": "Увійти/Скинути пошту", + "title": "Реєстрація" + }, + "reset": { + "description": "Будь ласка, введіть свою електронну адресу, щоб скинути пароль.", + "existingAccount": "Вже маєте обліковий запис?", + "get": "Отримати", + "success": "Пароль успішно скинуто, автоматично переключено на вхід!", + "switchToLogin": "Вхід/Реєстрація", + "title": "Скидання пароля" + }, + "tos": "Умови надання послуг" +} diff --git a/apps/admin/locales/uk-UA/common.json b/apps/admin/locales/uk-UA/common.json new file mode 100644 index 0000000..755134b --- /dev/null +++ b/apps/admin/locales/uk-UA/common.json @@ -0,0 +1,60 @@ +{ + "billing": { + "description": "Спонсорство допомагає PPanel продовжувати випускати оновлення!", + "title": "Спонсори" + }, + "empty": [ + "Уявіть, що тут повно захоплюючого контенту! Поки що доведеться уявляти…", + "Ця область загадково зникла, ми намагаємося її повернути!", + "Ой, нічого не сталося… можеш сам щось додати!", + "Це як на концерті виявити, що на сцені нікого немає… може, ти хочеш виступити?", + "Ви знайшли порожню землю! Може, побудуємо тут будинок?", + "Тут тимчасово нічого немає, але творчість починається звідси!", + "Нічого немає… але не хвилюйся, це лише початок!", + "Тут планувався великий сюрприз, але він втік!", + "Поки що нічого немає, як ніби шафа зі смаколиками спорожніла.", + "Ця порожня ділянка чекає на свого головного героя!" + ], + "request": { + "10001": "Запит поки не вдався, спробуйте пізніше або перевірте ваші умови.", + "10002": "Операція оновлення не вдалася, спробуйте пізніше.", + "10003": "Тимчасово неможливо виконати операцію вставки, спробуйте пізніше.", + "10004": "Операція видалення не вдалася, спробуйте пізніше.", + "20001": "Інформація про цього користувача вже існує, будь ласка, змініть інформацію та спробуйте знову.", + "20002": "Користувача не знайдено, перевірте інформацію та спробуйте знову.", + "20003": "Введений вами пароль неправильний, введіть його знову.", + "20004": "Цей користувач був заблокований, якщо у вас є питання, зверніться до служби підтримки.", + "20005": "Недостатньо коштів, поповніть рахунок і спробуйте знову.", + "20006": "Функція реєстрації тимчасово недоступна, спробуйте пізніше.", + "30001": "Цей вузол вже існує, не додавайте повторно.", + "30002": "Відповідний вузол не знайдено, перевірте та спробуйте знову.", + "30003": "Група вже існує, спробуйте використати іншу назву.", + "30004": "Групу не знайдено, перевірте інформацію та спробуйте знову.", + "30005": "У цій групі ще є вміст, очистіть її та спробуйте знову.", + "400": "Параметри запиту некоректні, будь ласка, перевірте та надішліть знову.", + "40002": "Дійсний токен не знайдено, увійдіть у систему та спробуйте знову.", + "40003": "Поточний токен недійсний, отримайте новий та спробуйте знову.", + "40004": "Токен закінчився, увійдіть у систему знову.", + "40005": "У вас немає доступу, якщо у вас є питання, зверніться до адміністратора.", + "401": "Запити надто часті, спробуйте пізніше.", + "500": "Сервер зіткнувся з деякими проблемами, спробуйте пізніше.", + "50001": "Інформацію про відповідний купон не знайдено, перевірте та спробуйте знову.", + "50002": "Цей купон вже використано, повторне використання неможливе.", + "60001": "Підписка закінчилася, поновіть її, щоб продовжити використання.", + "60002": "Тимчасово неможливо використовувати цю підписку, спробуйте пізніше.", + "70001": "Код перевірки неправильний, введіть його знову.", + "80001": "Завдання не вдалося додати до черги, спробуйте пізніше.", + "90001": "Вимкніть режим DEBUG і спробуйте знову.", + "undefined": "Сталася системна помилка, спробуйте пізніше." + }, + "table": { + "actions": "Дії", + "asc": "За зростанням", + "desc": "За спаданням", + "hide": "Приховати", + "pageInfo": "Сторінка {current} з {total}", + "rowsPerPage": "Рядків на сторінку", + "selectedItems": "Вибрано {total} рядків" + }, + "unlimited": "необмежений" +} diff --git a/apps/admin/locales/uk-UA/coupon.json b/apps/admin/locales/uk-UA/coupon.json new file mode 100644 index 0000000..d8cd238 --- /dev/null +++ b/apps/admin/locales/uk-UA/coupon.json @@ -0,0 +1,50 @@ +{ + "actions": "Дії", + "amount": "Сума", + "cancel": "Скасувати", + "code": "код", + "confirm": "Підтвердити", + "confirmDelete": "Ви впевнені, що хочете видалити?", + "count": "кількість", + "couponList": "Список купонів", + "create": "Створити", + "createCoupon": "Створити купон", + "createSuccess": "Створено успішно", + "delete": "видалити", + "deleteSuccess": "Видалення успішне", + "deleteWarning": "Після видалення дані не можна буде відновити. Будь ласка, дійте обережно.", + "discount": "знижка", + "edit": "редагувати", + "editCoupon": "Редагувати купон", + "enable": "Увімкнути", + "form": { + "amountDiscount": "Сума знижки", + "cancel": "Скасувати", + "confirm": "Підтвердити", + "count": "Максимальна кількість використань", + "countPlaceholder": "Максимальна кількість використань (залиште порожнім для необмеженого)", + "customCouponCode": "Індивідуальний код купона", + "customCouponCodePlaceholder": "Індивідуальний код купона (залиште порожнім для автоматичної генерації)", + "enterCouponName": "Введіть назву купона", + "enterValue": "Введіть значення", + "expireTime": "Час закінчення", + "name": "Назва", + "percentageDiscount": "Відсоткова знижка", + "selectServer": "Оберіть підписку", + "selectTime": "Оберіть час", + "specifiedServer": "Вказана підписка", + "startTime": "Час початку дії", + "type": "Тип купона", + "userLimit": "Максимальна кількість використань на користувача", + "userLimitPlaceholder": "Максимальна кількість використань на користувача (залиште порожнім для необмеженого)" + }, + "name": "Назва", + "percentage": "відсоток", + "remainingTimes": "Залишилося", + "subscribe": "Підписатися", + "type": "Тип", + "unlimited": "необмежений", + "updateSuccess": "Оновлення успішне", + "usedTimes": "Кількість використань", + "validityPeriod": "Термін дії" +} diff --git a/apps/admin/locales/uk-UA/document.json b/apps/admin/locales/uk-UA/document.json new file mode 100644 index 0000000..cd6152c --- /dev/null +++ b/apps/admin/locales/uk-UA/document.json @@ -0,0 +1,29 @@ +{ + "DocumentList": "Список документів", + "actions": "дії", + "cancel": "Скасувати", + "confirm": "Підтвердити", + "confirmDelete": "Ви впевнені, що хочете видалити?", + "create": "Створити", + "createDocument": "Створити документ", + "createSuccess": "Створення успішне", + "delete": "видалити", + "deleteDescription": "Після видалення дані не можуть бути відновлені. Будь ласка, дійте обережно.", + "deleteSuccess": "Видалення успішне", + "edit": "редагувати", + "editDocument": "Редагувати документ", + "form": { + "cancel": "Скасувати", + "confirm": "Підтвердити", + "content": "Зміст", + "tags": "Категорії", + "tagsPlaceholder": "Будь ласка, використовуйте клавішу Enter або кому (,) для введення кількох категорій", + "title": "Заголовок", + "titlePlaceholder": "Будь ласка, введіть" + }, + "show": "Показати", + "tags": "Категорії", + "title": "Заголовок", + "updateSuccess": "Оновлення успішне", + "updatedAt": "Оновлено" +} diff --git a/apps/admin/locales/uk-UA/index.json b/apps/admin/locales/uk-UA/index.json new file mode 100644 index 0000000..90f7d33 --- /dev/null +++ b/apps/admin/locales/uk-UA/index.json @@ -0,0 +1,29 @@ +{ + "email": "електронна пошта", + "month": "Цього місяця", + "monthDownloadTraffic": "Трафік завантажень за цей місяць", + "monthUploadTraffic": "Цього місяця завантажено трафіку", + "newPurchase": "Нова покупка", + "nodeTraffic": "Трафік вузла", + "nodes": "вузли", + "offlineNodeCount": "Кількість офлайн-вузлів", + "onlineIPCount": "Кількість онлайн IP", + "onlineNodeCount": "Кількість онлайн-вузлів", + "pendingTickets": "Невирішені заявки", + "register": "Реєстрація", + "repurchase": "повторна покупка", + "revenueTitle": "Статистика доходів", + "selectTypePlaceholder": "Виберіть тип", + "statisticsTitle": "Статистика", + "today": "сьогодні", + "todayDownloadTraffic": "Сьогоднішній трафік завантажень", + "todayUploadTraffic": "Сьогоднішній обсяг завантаження", + "total": "Загалом", + "totalIncome": "Загальний дохід", + "trafficRank": "Рейтинг трафіку", + "type": "Тип", + "userTitle": "Статистика користувача", + "userTraffic": "Трафік користувача", + "users": "користувачі", + "yesterday": "вчора" +} diff --git a/apps/admin/locales/uk-UA/language.json b/apps/admin/locales/uk-UA/language.json new file mode 100644 index 0000000..d96813a --- /dev/null +++ b/apps/admin/locales/uk-UA/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "чеська", + "de-DE": "Німецька", + "en-US": "англійська", + "es-ES": "іспанська", + "es-MX": "іспанська (Мексика)", + "fi-FI": "Фінська", + "fr-FR": "Французька", + "hi-IN": "гінді", + "hu-HU": "угорська", + "ja-JP": "японська", + "ko-KR": "Корейська", + "no-NO": "Норвезька", + "pl-PL": "Польська", + "pt-BR": "португальська (Бразилія)", + "ro-RO": "румунська", + "ru-RU": "Російська", + "th-TH": "тайська", + "tr-TR": "турецька", + "uk-UA": "українська мова", + "vi-VN": "В'єтнамська", + "zh-CN": "українська (Україна)", + "zh-TW": "китайська (традиційна)" +} diff --git a/apps/admin/locales/uk-UA/menu.json b/apps/admin/locales/uk-UA/menu.json new file mode 100644 index 0000000..e484a33 --- /dev/null +++ b/apps/admin/locales/uk-UA/menu.json @@ -0,0 +1,18 @@ +{ + "Announcement Management": "Управління оголошеннями", + "Coupon Management": "Управління купонами", + "Dashboard": "Панель приладів", + "Document Management": "Управління документами", + "Finance": "Фінанси", + "Order Management": "Управління замовленнями", + "Payment Config": "Налаштування оплати", + "Server": "Сервер", + "Server Management": "Управління сервером", + "Settings": "Налаштування", + "Subscribe Management": "Управління підписками", + "System Config": "Системна конфігурація", + "System Tool": "Системний інструмент", + "Ticket Management": "Управління заявками", + "User": "Користувач", + "User Management": "Управління користувачами" +} diff --git a/apps/admin/locales/uk-UA/order.json b/apps/admin/locales/uk-UA/order.json new file mode 100644 index 0000000..2341fe2 --- /dev/null +++ b/apps/admin/locales/uk-UA/order.json @@ -0,0 +1,37 @@ +{ + "amount": "Сума", + "couponDiscount": "Знижка за купоном", + "discount": "Сума знижки", + "failed": "невдача", + "feeAmount": "Комісія", + "method": "Спосіб оплати", + "methods": { + "alipay_f2f": "Alipay(обличчям до обличчя)", + "balance": "Баланс", + "epay": "Epay", + "stripe_alipay": "Stripe(Alipay)", + "stripe_wechat_pay": "Stripe(WeChat)" + }, + "orderNumber": "Номер замовлення", + "status": { + "0": "Статус", + "1": "Очікує оплату", + "2": "Оплачено", + "3": "Скасовано", + "4": "Закрито", + "5": "Завершено" + }, + "subscribe": "Підписатися", + "subscribePrice": "Ціна підписки", + "total": "Загалом", + "tradeNo": "Номер угоди", + "type": { + "0": "Тип", + "1": "Нова покупка", + "2": "Продовження", + "3": "Скидання трафіку", + "4": "Поповнення" + }, + "updateTime": "Час оновлення", + "user": "користувач" +} diff --git a/apps/admin/locales/uk-UA/payment.json b/apps/admin/locales/uk-UA/payment.json new file mode 100644 index 0000000..9bf668d --- /dev/null +++ b/apps/admin/locales/uk-UA/payment.json @@ -0,0 +1,44 @@ +{ + "aliPay": "Оплата через Alipay", + "alipayf2f": { + "appId": "Ідентифікатор додатку Alipay", + "invoiceName": "Назва продукту на замовлення", + "invoiceNameDescription": "Буде відображено у рахунку Alipay", + "privateKey": "Приватний ключ Alipay", + "publicKey": "Публічний ключ Alipay", + "sandbox": "Режим пісочниці", + "sandboxDescription": "Увімкніть режим пісочниці для тестування платежів" + }, + "enable": "Увімкнути", + "enableDescription": "Увімкнути цей спосіб оплати", + "epay": { + "key": "КЛЮЧ", + "pid": "PID", + "url": "URL" + }, + "feeMode": "Спосіб оплати", + "feeModeDescription": "Спосіб стягнення додаткової комісії", + "feeModeItems": ["Без комісії", "Відсоток", "Фіксована сума", "Обидва варіанти"], + "feePercent": "Відсоткова комісія (необов'язково)", + "feePercentDescription": "Додати комісію до суми замовлення", + "fixedFee": "Фіксована плата (необов'язково)", + "fixedFeeDescription": "Додати фіксовану плату до суми замовлення", + "iconUrl": "URL значка (необов'язково)", + "iconUrlDescription": "Використовується для відображення на фронтенді", + "inputPlaceholder": "Введіть, будь ласка", + "key": "КЛЮЧ", + "notifyUrl": "Користувацька область сповіщень (необов'язково)", + "notifyUrlDescription": "Сповіщення шлюзу буде надіслано на цей домен", + "payForRecommendations": "Оплатити рекомендації", + "pid": "PID", + "saveSuccess": "Збережено успішно", + "showName": "Показати ім'я", + "showNameDescription": "Використовується для відображення на фронтенді", + "stripe": { + "publicKey": "ПУБЛІЧНИЙ КЛЮЧ", + "secretKey": "СЕКРЕТНИЙ КЛЮЧ", + "webhookSecret": "ПІДПИС ВЕБХУКА" + }, + "url": "URL", + "wechatPay": "WeChat Pay" +} diff --git a/apps/admin/locales/uk-UA/server.json b/apps/admin/locales/uk-UA/server.json new file mode 100644 index 0000000..7f3c3d1 --- /dev/null +++ b/apps/admin/locales/uk-UA/server.json @@ -0,0 +1,122 @@ +{ + "group": { + "actions": "Дії", + "cancel": "Скасувати", + "confirm": "Підтвердити", + "confirmDelete": "Ви впевнені, що хочете видалити?", + "create": "Створити", + "createNodeGroup": "Створити групу вузлів", + "createdSuccessfully": "Успішно створено", + "delete": "Видалити", + "deleteWarning": "Після видалення дані не можуть бути відновлені, будь ласка, будьте обережні.", + "deletedSuccessfully": "Успішно видалено", + "description": "Опис", + "edit": "Редагувати", + "editNodeGroup": "Редагувати групу вузлів", + "form": { + "cancel": "Скасувати", + "confirm": "Підтвердити", + "description": "Опис", + "name": "Назва" + }, + "name": "Назва", + "title": "Список груп вузлів", + "updatedAt": "Час оновлення" + }, + "node": { + "abnormal": "Аномалія", + "actions": "Дії", + "address": "Адреса", + "all": "Всі", + "cancel": "Скасувати", + "confirm": "Підтвердити", + "confirmDelete": "Ви впевнені, що хочете видалити?", + "create": "Створити", + "createNode": "Створити вузол", + "createSuccess": "Успішно створено", + "delete": "Видалити", + "deleteSuccess": "Успішно видалено", + "deleteWarning": "Після видалення дані не можуть бути відновлені. Будь ласка, будьте обережні.", + "disk": "Диск", + "edit": "Редагувати", + "editNode": "Редагувати вузол", + "enable": "Увімкнути", + "form": { + "allowInsecure": "Дозволити небезпечні з'єднання", + "cancel": "Скасувати", + "confirm": "Підтвердити", + "edit": "Редагувати", + "editSecurity": "Редагувати налаштування безпеки", + "enableRelay": "Увімкнути реле", + "enableTLS": "Увімкнути TLS", + "encryptionMethod": "Метод шифрування", + "flow": "Алгоритм контролю потоку", + "hopInterval": "Інтервал стрибка", + "hopPorts": "Порти стрибка", + "hopPortsPlaceholder": "Кілька портів розділяйте комами", + "name": "Назва", + "nodeGroupId": "ID групи вузлів", + "obfsPassword": "Пароль обфускації", + "obfsPasswordPlaceholder": "Залиште порожнім для відсутності обфускації", + "path": "Шлях", + "pleaseSelect": "Будь ласка, виберіть", + "port": "Порт сервера", + "protocol": "Протокол", + "relayHost": "Адреса реле", + "relayPort": "Порт реле", + "remarks": "Примітки", + "security": "Безпека", + "securityConfig": "Налаштування безпеки", + "security_config": { + "fingerprint": "Відбиток пальця", + "privateKey": "Приватний ключ", + "privateKeyPlaceholder": "Залиште порожнім для автоматичного створення", + "publicKey": "Публічний ключ", + "publicKeyPlaceholder": "Залиште порожнім для автоматичного створення", + "serverAddress": "Адреса сервера", + "serverAddressPlaceholder": "Адреса цілі REALITY, за замовчуванням використовується SNI", + "serverName": "Ім'я сервера (SNI)", + "serverNamePlaceholder": "Обов'язково для REALITY, має відповідати бекенду", + "serverPort": "Порт сервера", + "serverPortPlaceholder": "Порт цілі REALITY, за замовчуванням 443", + "shortId": "Короткий ID", + "shortIdPlaceholder": "Залиште порожнім для автоматичного створення", + "sni": "Індикація імені сервера (SNI)" + }, + "selectEncryptionMethod": "Виберіть метод шифрування", + "selectNodeGroup": "Виберіть групу вузлів", + "selectProtocol": "Виберіть протокол", + "serverAddr": "Адреса сервера", + "serverName": "Назва сервісу", + "speedLimit": "Обмеження швидкості", + "speedLimitPlaceholder": "Без обмежень", + "trafficRatio": "Швидкість трафіку", + "transport": "Транспортний протокол", + "transportConfig": "Налаштування транспортного протоколу", + "transportHost": "Адреса транспортного сервісу", + "transportPath": "Транспортний шлях", + "transportServerName": "Назва транспортного сервісу" + }, + "lastUpdated": "Останнє оновлення", + "memory": "Пам'ять", + "name": "Назва", + "node": "Вузол", + "nodeGroup": "Група вузлів", + "normal": "Нормальний", + "onlineCount": "Кількість онлайн", + "onlineUsers": "Онлайн користувачі", + "rate": "Швидкість", + "relay": "Реле", + "serverAddr": "Адреса сервера", + "speedLimit": "Обмеження швидкості", + "status": "Статус", + "trafficRatio": "Швидкість трафіку", + "type": "Тип", + "updateSuccess": "Успішно оновлено", + "updatedAt": "Час оновлення" + }, + "tabs": { + "node": "Вузол", + "nodeGroup": "Група вузлів" + } +} diff --git a/apps/admin/locales/uk-UA/subscribe.json b/apps/admin/locales/uk-UA/subscribe.json new file mode 100644 index 0000000..b34ba06 --- /dev/null +++ b/apps/admin/locales/uk-UA/subscribe.json @@ -0,0 +1,79 @@ +{ + "actions": "дії", + "cancel": "Скасувати", + "confirm": "Підтвердити", + "confirmDelete": "Ви впевнені, що хочете видалити?", + "create": "створити", + "createSubscribe": "Створити підписку", + "createSuccess": "Створено успішно", + "delete": "видалити", + "deleteSuccess": "Видалення успішне", + "deleteWarning": "Після видалення дані не можуть бути відновлені, будь ласка, дійте обережно.", + "deviceLimit": "Кількість пристроїв/одиниць", + "edit": "редагувати", + "editSubscribe": "Редагувати підписку", + "form": { + "cancel": "Скасувати", + "confirm": "Підтвердити", + "description": "Опис", + "deviceLimit": "Обмеження пристроїв", + "discount": "Знижка", + "discountDescription": "Встановити знижку на основі одиничної ціни", + "discountMonths": "місяці", + "discountPercent": "Відсоток знижки", + "discount_price": "Ціна зі знижкою", + "duration": "Тривалість (місяці)", + "inventory": "Запаси", + "name": "Назва", + "noLimit": "Без обмежень", + "quota": "Ліміт покупки", + "replacement": "Ціна заміни (за раз)", + "selectSubscribeGroup": "Будь ласка, виберіть групу підписки", + "server": "Сервер", + "serverGroup": "Група серверів", + "speedLimit": "Обмеження швидкості (Мбіт/с)", + "subscribeGroup": "Група підписки", + "traffic": "Трафік", + "unit_price": "Ціна за місяць" + }, + "group": { + "actions": "Дії", + "cancel": "Скасувати", + "confirm": "Підтвердити", + "confirmDelete": "Ви впевнені, що хочете видалити?", + "create": "Створити", + "createSubscribeGroup": "Створити нову групу підписки", + "createSuccess": "Успішно створено", + "delete": "Видалити", + "deleteSuccess": "Успішно видалено", + "deleteWarning": "Після видалення дані не можуть бути відновлені, будь ласка, будьте обережні.", + "description": "Опис", + "edit": "Редагувати", + "editSubscribeGroup": "Редагувати групу підписки", + "form": { + "cancel": "Скасувати", + "confirm": "Підтвердити", + "description": "Опис", + "name": "Назва" + }, + "name": "Назва", + "title": "Список груп підписки", + "updateSuccess": "Успішно оновлено", + "updatedAt": "Час оновлення" + }, + "inventory": "інвентар", + "name": "Назва", + "quota": "Обмеження на покупку/раз", + "replacement": "Скидання ціни/раз", + "sell": "продаж", + "show": "Показати на головній сторінці", + "subscribe": "Підписатися", + "subscribeGroup": "Підписатися на групу", + "tabs": { + "subscribe": "Підписатися", + "subscribeGroup": "Група підписок" + }, + "traffic": "Трафік", + "unitPrice": "Ціна/місяць", + "updateSuccess": "Оновлення успішне" +} diff --git a/apps/admin/locales/uk-UA/system.json b/apps/admin/locales/uk-UA/system.json new file mode 100644 index 0000000..6583d53 --- /dev/null +++ b/apps/admin/locales/uk-UA/system.json @@ -0,0 +1,156 @@ +{ + "currency": { + "accessKey": "Ключ доступу", + "accessKeyDescription": "https://exchangerate.host надає безкоштовний API-ключ для обміну валют", + "currencySymbol": "Символ валюти", + "currencySymbolDescription": "Використовується лише для відображення, після зміни всі валютні одиниці в системі будуть змінені", + "currencyUnit": "Валютна одиниця", + "currencyUnitDescription": "Використовується лише для відображення, після зміни всі валютні одиниці в системі будуть змінені", + "saveSuccess": "Успішно збережено" + }, + "email": { + "expiration_email_template": "Шаблон повідомлення про закінчення терміну", + "expiration_email_templateDescription": "Змінні {after}.ім'я_змінної{before} у шаблоні будуть замінені на фактичні дані, будь ласка, переконайтеся, що ці змінні збережені.", + "inputPlaceholder": "Будь ласка, введіть вміст...", + "maintenance_email_template": "Шаблон повідомлення про обслуговування", + "maintenance_email_templateDescription": "Змінні {after}.ім'я_змінної{before} у шаблоні будуть замінені на фактичні дані, будь ласка, переконайтеся, що ці змінні збережені.", + "saveSuccess": "Конфігурація успішно збережена.", + "sendFailure": "Не вдалося надіслати тестовий лист, будь ласка, перевірте конфігурацію.", + "sendSuccess": "Тестовий лист успішно надіслано.", + "sendTestEmail": "Надіслати тестовий лист", + "sendTestEmailDescription": "Надішліть тестовий лист, щоб перевірити правильність конфігурації.", + "senderAddress": "Адреса відправника", + "senderAddressDescription": "Адреса електронної пошти, що використовується за замовчуванням для відправки листів.", + "smtpAccount": "Обліковий запис SMTP", + "smtpAccountDescription": "Обліковий запис електронної пошти для автентифікації.", + "smtpEncryptionMethod": "Метод шифрування SMTP", + "smtpEncryptionMethodDescription": "Виберіть, чи увімкнути шифрування SSL/TLS.", + "smtpPassword": "Пароль SMTP", + "smtpPasswordDescription": "Пароль для цього облікового запису SMTP.", + "smtpServerAddress": "Адреса сервера SMTP", + "smtpServerAddressDescription": "Вкажіть адресу сервера для відправки листів.", + "smtpServerPort": "Порт сервера SMTP", + "smtpServerPortDescription": "Вкажіть номер порту для підключення до сервера SMTP.", + "verify_email_template": "Шаблон верифікаційного листа", + "verify_email_templateDescription": "Змінні {after}.ім'я_змінної{before} у шаблоні будуть замінені на фактичні дані, будь ласка, переконайтеся, що ці змінні збережені." + }, + "invite": { + "commissionFirstTimeOnly": "Лише комісія за першу покупку", + "commissionFirstTimeOnlyDescription": "Після увімкнення комісія нараховується лише при першій оплаті запрошеної особи. Ви можете налаштувати окремого користувача в управлінні користувачами.", + "enableForcedInvite": "Увімкнути примусове запрошення", + "enableForcedInviteDescription": "Після увімкнення лише запрошені користувачі можуть реєструватися", + "inputPlaceholder": "Будь ласка, введіть", + "inviteCommissionPercentage": "Відсоток комісії за запрошення", + "inviteCommissionPercentageDescription": "Загальний відсоток розподілу комісії за замовчуванням, ви можете налаштувати окремий відсоток в управлінні користувачами", + "saveSuccess": "Успішно збережено" + }, + "node": { + "communicationKey": "Ключ зв'язку", + "communicationKeyDescription": "Ключ для зв'язку вузла, щоб забезпечити захист даних від перехоплення", + "inputPlaceholder": "Будь ласка, введіть", + "nodePullInterval": "Інтервал отримання вузла", + "nodePullIntervalDescription": "Частота отримання даних вузлом з панелі (в секундах)", + "nodePushInterval": "Інтервал відправки вузла", + "nodePushIntervalDescription": "Частота відправки даних вузлом на панель", + "saveSuccess": "Збережено успішно" + }, + "register": { + "emailSuffixWhitelist": "Білий список суфіксів електронної пошти", + "emailSuffixWhitelistDescription": "Після увімкнення, лише електронні адреси з суфіксами з цього списку можуть реєструватися", + "emailVerification": "Перевірка електронної пошти", + "emailVerificationDescription": "Після увімкнення, користувачі повинні будуть підтвердити свою електронну пошту", + "ipRegistrationLimit": "Обмеження реєстрації за IP", + "ipRegistrationLimitDescription": "Після увімкнення, IP-адреси, що відповідають правилам, будуть обмежені в реєстрації. Зверніть увагу, що через CDN або проксі-сервери визначення IP може викликати проблеми", + "penaltyTime": "Час покарання (хвилини)", + "penaltyTimeDescription": "Користувач повинен чекати, поки час покарання не мине, щоб знову зареєструватися", + "registrationLimitCount": "Ліміт кількості реєстрацій", + "registrationLimitCountDescription": "Після досягнення ліміту реєстрацій активується покарання", + "saveSuccess": "Збережено успішно", + "stopNewUserRegistration": "Зупинити реєстрацію нових користувачів", + "stopNewUserRegistrationDescription": "Після увімкнення, ніхто не зможе зареєструватися", + "trialRegistration": "Пробна реєстрація", + "trialRegistrationDescription": "Увімкніть пробну реєстрацію, спочатку змініть пробний пакет і тривалість", + "whitelistSuffixes": "Суфікси білого списку", + "whitelistSuffixesDescription": "Для перевірки електронної пошти при реєстрації, один на рядок", + "whitelistSuffixesPlaceholder": "Введіть суфікси електронної пошти, один на рядок" + }, + "site": { + "logo": "ЛОГО", + "logoDescription": "Використовується для відображення місця, де потрібно показати ЛОГО", + "logoPlaceholder": "Будь ласка, введіть URL-адресу ЛОГО, не закінчуйте на '/'", + "saveSuccess": "Збережено успішно", + "siteDesc": "Опис сайту", + "siteDescDescription": "Використовується для відображення місця, де потрібно показати опис сайту", + "siteDescPlaceholder": "Будь ласка, введіть опис сайту", + "siteDomain": "Домен сайту", + "siteDomainDescription": "Доменна адреса поточного сайту, наприклад, для використання в електронній пошті", + "siteDomainPlaceholder": "Будь ласка, введіть доменну адресу, кілька доменів вводьте по одному на рядок", + "siteName": "Назва сайту", + "siteNameDescription": "Використовується для відображення місця, де потрібно показати назву сайту", + "siteNamePlaceholder": "Будь ласка, введіть назву сайту" + }, + "subscription": { + "add": "Додати", + "app": "Додаток", + "appDescription": "Налаштуйте адресу завантаження додатка та правила імпорту, не забудьте зберегти після змін", + "appDownloadURL": "Адреса завантаження додатка", + "appIcon": "Іконка додатка", + "appName": "Назва додатка", + "delete": "Видалити", + "reset": "Скинути", + "save": "Зберегти", + "saveSuccess": "Успішно збережено", + "singleSubscriptionMode": "Режим єдиної підписки", + "singleSubscriptionModeDescription": "Після увімкнення всі пакети користувачів будуть перетворені на баланс", + "subscriptionDomain": "Домен підписки", + "subscriptionDomainDescription": "Використовується для підписки, якщо залишити порожнім, буде використовуватися домен сайту", + "subscriptionDomainPlaceholder": "Введіть домен підписки, кілька доменів вводьте по одному на рядок", + "subscriptionPath": "Шлях підписки", + "subscriptionPathDescription": "Використовується для підписки, після зміни обов'язково перезапустіть систему для забезпечення найкращої продуктивності", + "subscriptionPathPlaceholder": "Введіть", + "subscriptionProtocol": "Протокол підписки", + "wildcardResolution": "Розв'язання підстановочних знаків", + "wildcardResolutionDescription": "Використовується для підписки" + }, + "tabs": { + "currency": "Валюта", + "email": "Електронна пошта", + "invite": "Запрошення", + "node": "Вузол", + "register": "Реєстрація", + "site": "Сайт", + "subscription": "Підписка", + "telegram": "Telegram", + "tos": "Умови обслуговування", + "verify": "Перевірка" + }, + "telegram": { + "botToken": "Токен бота", + "botTokenDescription": "Будь ласка, введіть токен, наданий Botfather", + "enableBotNotifications": "Увімкнути сповіщення бота", + "enableBotNotificationsDescription": "Після увімкнення бот надсилатиме основні сповіщення адміністраторам та користувачам, які підключені до Telegram", + "groupURL": "URL групи", + "groupURLDescription": "Після заповнення буде відображатися на стороні користувача або використовуватися там, де це потрібно", + "inputPlaceholderBotToken": "0000000000:xxxxxxxxx_xxxxxxxxxxxxxxx", + "inputPlaceholderGroupURL": "https://t.me/xxxxxx", + "saveSuccess": "Успішно збережено" + }, + "tos": { + "saveSuccess": "Збережено успішно", + "title": "Умови обслуговування" + }, + "verify": { + "inputPlaceholder": "Будь ласка, введіть", + "loginVerificationCode": "Код перевірки для входу", + "loginVerificationCodeDescription": "Перевірка людина-машина при вході", + "registrationVerificationCode": "Код перевірки для реєстрації", + "registrationVerificationCodeDescription": "Перевірка людина-машина при реєстрації", + "resetPasswordVerificationCode": "Код перевірки для скидання пароля", + "resetPasswordVerificationCodeDescription": "Перевірка людина-машина при скиданні пароля", + "saveSuccess": "Збережено успішно", + "turnstileSecret": "Секрет Turnstile", + "turnstileSecretDescription": "Секрет Turnstile, наданий Cloudflare", + "turnstileSiteKey": "Ключ сайту Turnstile", + "turnstileSiteKeyDescription": "Ключ сайту Turnstile, наданий Cloudflare" + } +} diff --git a/apps/admin/locales/uk-UA/ticket.json b/apps/admin/locales/uk-UA/ticket.json new file mode 100644 index 0000000..545799d --- /dev/null +++ b/apps/admin/locales/uk-UA/ticket.json @@ -0,0 +1,19 @@ +{ + "actions": "Дії", + "cancel": "Скасувати", + "check": "Перевірити", + "close": "закрити", + "closeSuccess": "Закрито успішно", + "closeWarning": "Після закриття цей робочий запит не можна буде обробити. Будь ласка, дійте обережно.", + "confirm": "Підтвердити", + "confirmClose": "Ви впевнені, що хочете закрити?", + "createdAt": "Час створення", + "inputPlaceholder": "Введіть ваше запитання, ми відповімо якомога швидше.", + "open": "відкрити", + "reply": "відповідь", + "status": ["Статус", "Очікує на подальші дії", "Очікує на відповідь", "Оброблено", "Закрито"], + "ticketList": "Список заявок", + "title": "Заголовок", + "updatedAt": "Оновлено", + "user": "користувач" +} diff --git a/apps/admin/locales/uk-UA/tool.json b/apps/admin/locales/uk-UA/tool.json new file mode 100644 index 0000000..db9db0e --- /dev/null +++ b/apps/admin/locales/uk-UA/tool.json @@ -0,0 +1,26 @@ +{ + "caller": "Дзвінок", + "cancel": "Скасувати", + "confirmReboot": "Підтвердити перезавантаження", + "confirmSystemReboot": "Підтвердити перезавантаження системи", + "confirmSystemUpgrade": "Підтвердити оновлення системи", + "confirmUpgrade": "Підтвердити оновлення", + "currentVersion": "Поточна версія системи:", + "errors": "Помилки", + "ip": "IP", + "lastUpdated": "Останнє оновлення:", + "none": "Жоден", + "query": "Запит", + "rebootDescription": "Ви впевнені, що хочете перезавантажити систему? Ця дія призведе до короткочасного переривання обслуговування.", + "rebooting": "Перезавантаження системи...", + "refreshLogs": "Оновити журнали", + "request": "Запит", + "status": "Статус", + "systemLogs": "Системні журнали", + "systemReboot": "Перезавантаження системи", + "systemServices": "Системні послуги", + "systemUpgrade": "Оновлення системи", + "upgradeDescription": "Ви впевнені, що хочете виконати оновлення системи? Ця операція може зайняти кілька хвилин, протягом яких система може не відповідати.", + "userAgent": "Агент користувача", + "viewLogsAndManage": "Перегляд системних журналів, виконання оновлень системи та операцій перезавантаження" +} diff --git a/apps/admin/locales/uk-UA/user.json b/apps/admin/locales/uk-UA/user.json new file mode 100644 index 0000000..5f51bdd --- /dev/null +++ b/apps/admin/locales/uk-UA/user.json @@ -0,0 +1,38 @@ +{ + "actions": "дії", + "balance": "Баланс", + "cancel": "Скасувати", + "confirm": "Підтвердити", + "confirmDelete": "Ви впевнені, що хочете видалити?", + "create": "створити", + "createSuccess": "Створено успішно", + "createUser": "Створити користувача", + "createdAt": "Час реєстрації", + "delete": "Видалити", + "deleteDescription": "Після видалення дані не можна буде відновити, будь ласка, дійте обережно.", + "deleteSuccess": "Видалення успішне", + "edit": "редагувати", + "editUser": "Редагувати користувача", + "email": "електронна пошта", + "enable": "Увімкнути", + "form": { + "balance": "Баланс", + "balancePlaceholder": "Баланс", + "cancel": "Скасувати", + "confirm": "Підтвердити", + "invalidEmailFormat": "Недійсний формат електронної пошти", + "inviteCode": "Код запрошення", + "inviteCodePlaceholder": "Введіть код запрошення (залиште порожнім для автоматичної генерації)", + "manager": "Адміністратор", + "password": "Пароль", + "passwordPlaceholder": "Введіть новий пароль (можна залишити порожнім)", + "refererId": "ID реферера", + "refererIdPlaceholder": "Введіть ID реферера", + "userEmail": "Електронна пошта користувача", + "userEmailPlaceholder": "Введіть електронну пошту користувача" + }, + "referer": "Реферер", + "updateSuccess": "Оновлення успішне", + "userList": "Список користувачів", + "userName": "Електронна пошта користувача" +} diff --git a/apps/admin/locales/vi-VN/announcement.json b/apps/admin/locales/vi-VN/announcement.json new file mode 100644 index 0000000..0e29a7c --- /dev/null +++ b/apps/admin/locales/vi-VN/announcement.json @@ -0,0 +1,30 @@ +{ + "actions": "Hành động", + "announcementList": "Danh sách thông báo", + "cancel": "Hủy", + "confirm": "Xác nhận", + "confirmDelete": "Bạn có chắc chắn muốn xóa không?", + "content": "Nội dung", + "create": "Tạo", + "createAnnouncement": "Tạo thông báo", + "createSuccess": "Tạo thành công", + "delete": "Xóa", + "deleteDescription": "Một khi đã xóa, dữ liệu sẽ không thể khôi phục. Hãy cẩn thận khi thực hiện.", + "deleteSuccess": "Xóa thành công", + "edit": "Chỉnh sửa", + "editAnnouncement": "Chỉnh sửa thông báo", + "enable": "Kích hoạt", + "form": { + "cancel": "Hủy", + "confirm": "Xác nhận", + "content": "Nội dung", + "contentPlaceholder": "Vui lòng nhập nội dung thông báo (hỗ trợ Markdown)", + "title": "Tiêu đề", + "titlePlaceholder": "Vui lòng nhập" + }, + "hide": "Ẩn", + "show": "Hiển thị", + "title": "Tiêu đề", + "updateSuccess": "Cập nhật thành công", + "updatedAt": "Cập nhật lúc" +} diff --git a/apps/admin/locales/vi-VN/auth.json b/apps/admin/locales/vi-VN/auth.json new file mode 100644 index 0000000..c36c520 --- /dev/null +++ b/apps/admin/locales/vi-VN/auth.json @@ -0,0 +1,39 @@ +{ + "check": { + "checking": "Đang kiểm tra...", + "continue": "Tiếp tục", + "description": "Vui lòng nhập email của bạn để tiếp tục đăng nhập hoặc đăng ký.", + "email": "Vui lòng nhập địa chỉ email hợp lệ.", + "title": "Đăng nhập/Đăng ký", + "whitelist": "Tên miền email không có trong danh sách trắng được phép." + }, + "login": { + "description": "Vui lòng nhập thông tin tài khoản của bạn để đăng nhập.", + "forgotPassword": "Quên mật khẩu?", + "success": "Đăng nhập thành công!", + "switchAccount": "Đăng ký/Chuyển đổi tài khoản", + "title": "Đăng nhập" + }, + "logout": "Đăng xuất", + "orWithEmail": "hoặc sử dụng email", + "register": { + "description": "Tạo tài khoản mới, điền thông tin của bạn để đăng ký.", + "existingAccount": "Đã có tài khoản?", + "get": "Lấy", + "invite": "Mã mời", + "message": "#### Kính gửi người dùng,\n\nCảm ơn bạn đã quan tâm và ủng hộ chúng tôi. Do điều chỉnh chiến lược vận hành trang web, chúng tôi đã đóng chức năng đăng ký người dùng mới. Trong thời gian này, việc sử dụng của người dùng hiện tại sẽ không bị ảnh hưởng.\n\nChúng tôi cam kết mang đến cho bạn dịch vụ và trải nghiệm tốt hơn, do đó sẽ tiến hành tối ưu hóa hệ thống và nâng cấp chức năng toàn diện trong thời gian đóng đăng ký. Trong tương lai, chúng tôi sẽ chào đón bạn với nội dung và dịch vụ chất lượng hơn.\n\nHãy theo dõi trang web và các nền tảng truyền thông xã hội của chúng tôi để nhận thông tin và thông báo mới nhất. Cảm ơn bạn đã hiểu và ủng hộ.\n\nNếu có bất kỳ thắc mắc hoặc cần hỗ trợ, vui lòng liên hệ với đội ngũ chăm sóc khách hàng của chúng tôi.\n\n**Một lần nữa cảm ơn sự ủng hộ và hiểu biết của bạn.**", + "passwordMismatch": "Mật khẩu nhập hai lần không khớp", + "success": "Đăng ký thành công, đã tự động đăng nhập!", + "switchToLogin": "Đăng nhập/Đặt lại email", + "title": "Đăng ký" + }, + "reset": { + "description": "Vui lòng nhập địa chỉ email của bạn để đặt lại mật khẩu.", + "existingAccount": "Đã có tài khoản?", + "get": "Lấy", + "success": "Đặt lại mật khẩu thành công, đã tự động chuyển sang đăng nhập!", + "switchToLogin": "Đăng nhập/Đăng ký", + "title": "Đặt lại mật khẩu" + }, + "tos": "Điều khoản dịch vụ" +} diff --git a/apps/admin/locales/vi-VN/common.json b/apps/admin/locales/vi-VN/common.json new file mode 100644 index 0000000..ff74a77 --- /dev/null +++ b/apps/admin/locales/vi-VN/common.json @@ -0,0 +1,60 @@ +{ + "billing": { + "description": "Tài trợ giúp PPanel tiếp tục phát hành các bản cập nhật!", + "title": "Nhà tài trợ" + }, + "empty": [ + "Hãy tưởng tượng nơi này đầy ắp nội dung thú vị! Tạm thời chỉ có thể tưởng tượng thôi…", + "Khu vực này đã biến mất một cách bí ẩn, chúng tôi đang triệu hồi nó trở lại!", + "Ôi chao, chẳng có gì xảy ra… bạn có thể tự điền gì đó vào!", + "Giống như phát hiện sân khấu không có ai trong buổi hòa nhạc… bạn có muốn lên biểu diễn không?", + "Bạn đã tìm thấy một vùng đất trống! Có muốn xây một ngôi nhà không?", + "Nơi này tạm thời trống rỗng, nhưng sự sáng tạo bắt đầu từ đây!", + "Chẳng có gì cả… nhưng đừng lo, đây chỉ là khởi đầu thôi!", + "Nơi này đã chuẩn bị một bất ngờ lớn, nhưng bất ngờ đã chạy mất rồi!", + "Tạm thời không có gì, giống như tủ đồ ăn vặt đã bị ăn sạch vậy.", + "Khu đất trống này đang chờ nhân vật chính xuất hiện!" + ], + "request": { + "10001": "Truy vấn chưa thành công, vui lòng thử lại sau hoặc kiểm tra điều kiện của bạn.", + "10002": "Thao tác cập nhật không thành công, vui lòng thử lại sau.", + "10003": "Tạm thời không thể hoàn thành thao tác chèn, vui lòng thử lại sau.", + "10004": "Thao tác xóa không thể hoàn thành, vui lòng thử lại sau.", + "20001": "Thông tin người dùng này đã tồn tại, vui lòng thay đổi thông tin và thử lại.", + "20002": "Không tìm thấy người dùng này, vui lòng kiểm tra thông tin và thử lại.", + "20003": "Mật khẩu bạn nhập không chính xác, vui lòng nhập lại.", + "20004": "Người dùng này đã bị vô hiệu hóa, nếu có thắc mắc vui lòng liên hệ dịch vụ khách hàng.", + "20005": "Số dư không đủ, vui lòng nạp tiền và thử lại.", + "20006": "Chức năng đăng ký tạm thời không khả dụng, vui lòng thử lại sau.", + "30001": "Nút này đã tồn tại, vui lòng không thêm lại.", + "30002": "Không tìm thấy nút liên quan, vui lòng kiểm tra và thử lại.", + "30003": "Nhóm đã tồn tại, vui lòng thử sử dụng tên khác.", + "30004": "Không tìm thấy nhóm này, vui lòng xác nhận thông tin và thử lại.", + "30005": "Nhóm này vẫn còn nội dung, vui lòng làm trống trước khi thử lại.", + "400": "Tham số yêu cầu không chính xác, vui lòng kiểm tra và gửi lại.", + "40002": "Không tìm thấy Token hợp lệ, vui lòng đăng nhập trước khi thử lại.", + "40003": "Token hiện tại không hợp lệ, vui lòng lấy lại và thử lại.", + "40004": "Token đã hết hạn, vui lòng đăng nhập lại.", + "40005": "Bạn không có quyền truy cập, nếu có thắc mắc vui lòng liên hệ quản trị viên.", + "401": "Yêu cầu quá thường xuyên, vui lòng thử lại sau.", + "500": "Máy chủ gặp một số vấn đề, vui lòng thử lại sau.", + "50001": "Không tìm thấy thông tin phiếu giảm giá tương ứng, vui lòng kiểm tra và thử lại.", + "50002": "Phiếu giảm giá này đã được sử dụng, không thể sử dụng lại.", + "60001": "Đăng ký đã hết hạn, vui lòng gia hạn trước khi sử dụng.", + "60002": "Tạm thời không thể sử dụng đăng ký này, vui lòng thử lại sau.", + "70001": "Mã xác nhận không chính xác, vui lòng nhập lại.", + "80001": "Nhiệm vụ không được thêm vào hàng đợi thành công, vui lòng thử lại sau.", + "90001": "Vui lòng tắt chế độ DEBUG trước khi thử lại.", + "undefined": "Hệ thống xảy ra lỗi, vui lòng thử lại sau." + }, + "table": { + "actions": "Hành động", + "asc": "Tăng dần", + "desc": "Giảm dần", + "hide": "Ẩn", + "pageInfo": "Trang {current} trên tổng số {total} trang", + "rowsPerPage": "Số hàng mỗi trang", + "selectedItems": "Đã chọn {total} hàng" + }, + "unlimited": "không giới hạn" +} diff --git a/apps/admin/locales/vi-VN/coupon.json b/apps/admin/locales/vi-VN/coupon.json new file mode 100644 index 0000000..01dd2e8 --- /dev/null +++ b/apps/admin/locales/vi-VN/coupon.json @@ -0,0 +1,50 @@ +{ + "actions": "Hành động", + "amount": "Số tiền", + "cancel": "Hủy", + "code": "mã", + "confirm": "Xác nhận", + "confirmDelete": "Bạn có chắc chắn muốn xóa không?", + "count": "số lượng", + "couponList": "Danh sách phiếu giảm giá", + "create": "Tạo", + "createCoupon": "Tạo phiếu giảm giá", + "createSuccess": "Tạo thành công", + "delete": "xóa", + "deleteSuccess": "Xóa thành công", + "deleteWarning": "Khi đã xóa, dữ liệu sẽ không thể khôi phục. Vui lòng thao tác cẩn thận.", + "discount": "giảm giá", + "edit": "Chỉnh sửa", + "editCoupon": "Chỉnh sửa phiếu giảm giá", + "enable": "Kích hoạt", + "form": { + "amountDiscount": "Giảm giá theo số tiền", + "cancel": "Hủy bỏ", + "confirm": "Xác nhận", + "count": "Số lần sử dụng tối đa", + "countPlaceholder": "Số lần sử dụng tối đa (để trống nếu không giới hạn)", + "customCouponCode": "Mã giảm giá tùy chỉnh", + "customCouponCodePlaceholder": "Mã giảm giá tùy chỉnh (để trống để tự động tạo)", + "enterCouponName": "Vui lòng nhập tên phiếu giảm giá", + "enterValue": "Vui lòng nhập giá trị", + "expireTime": "Thời gian hết hạn", + "name": "Tên", + "percentageDiscount": "Giảm giá theo phần trăm", + "selectServer": "Vui lòng chọn gói đăng ký", + "selectTime": "Chọn thời gian", + "specifiedServer": "Gói đăng ký chỉ định", + "startTime": "Thời gian bắt đầu", + "type": "Loại phiếu giảm giá", + "userLimit": "Số lần sử dụng tối đa mỗi người dùng", + "userLimitPlaceholder": "Số lần sử dụng tối đa mỗi người dùng (để trống nếu không giới hạn)" + }, + "name": "Tên", + "percentage": "phần trăm", + "remainingTimes": "Còn lại", + "subscribe": "Đăng ký", + "type": "Loại", + "unlimited": "không giới hạn", + "updateSuccess": "Cập nhật thành công", + "usedTimes": "Số lần sử dụng", + "validityPeriod": "Thời hạn hiệu lực" +} diff --git a/apps/admin/locales/vi-VN/document.json b/apps/admin/locales/vi-VN/document.json new file mode 100644 index 0000000..4a0603b --- /dev/null +++ b/apps/admin/locales/vi-VN/document.json @@ -0,0 +1,29 @@ +{ + "DocumentList": "Danh sách tài liệu", + "actions": "Hành động", + "cancel": "Hủy", + "confirm": "Xác nhận", + "confirmDelete": "Bạn có chắc chắn muốn xóa không?", + "create": "Tạo", + "createDocument": "Tạo tài liệu", + "createSuccess": "Tạo thành công", + "delete": "Xóa", + "deleteDescription": "Một khi đã xóa, dữ liệu sẽ không thể khôi phục. Vui lòng thao tác cẩn thận.", + "deleteSuccess": "Xóa thành công", + "edit": "Chỉnh sửa", + "editDocument": "Chỉnh sửa tài liệu", + "form": { + "cancel": "Hủy bỏ", + "confirm": "Xác nhận", + "content": "Nội dung", + "tags": "Thể loại", + "tagsPlaceholder": "Vui lòng sử dụng phím Enter hoặc dấu phẩy (,) để nhập nhiều thể loại", + "title": "Tiêu đề", + "titlePlaceholder": "Vui lòng nhập" + }, + "show": "Hiển thị", + "tags": "Thể loại", + "title": "Tiêu đề", + "updateSuccess": "Cập nhật thành công", + "updatedAt": "Cập nhật lúc" +} diff --git a/apps/admin/locales/vi-VN/index.json b/apps/admin/locales/vi-VN/index.json new file mode 100644 index 0000000..bb7b255 --- /dev/null +++ b/apps/admin/locales/vi-VN/index.json @@ -0,0 +1,29 @@ +{ + "email": "Email", + "month": "Tháng này", + "monthDownloadTraffic": "Lưu lượng tải xuống tháng này", + "monthUploadTraffic": "Lưu lượng tải lên trong tháng này", + "newPurchase": "Mua mới", + "nodeTraffic": "Lưu lượng nút", + "nodes": "nút", + "offlineNodeCount": "Số lượng nút ngoại tuyến", + "onlineIPCount": "Số lượng IP trực tuyến", + "onlineNodeCount": "Số lượng nút trực tuyến", + "pendingTickets": "Phiếu hỗ trợ đang chờ xử lý", + "register": "Đăng ký", + "repurchase": "mua lại", + "revenueTitle": "Thống kê doanh thu", + "selectTypePlaceholder": "Chọn loại", + "statisticsTitle": "Thống kê", + "today": "Hôm nay", + "todayDownloadTraffic": "Lưu lượng tải xuống hôm nay", + "todayUploadTraffic": "Lưu lượng tải lên hôm nay", + "total": "Tổng cộng", + "totalIncome": "Tổng thu nhập", + "trafficRank": "Xếp hạng lưu lượng", + "type": "Loại", + "userTitle": "Thống kê người dùng", + "userTraffic": "Lưu lượng người dùng", + "users": "người dùng", + "yesterday": "Hôm qua" +} diff --git a/apps/admin/locales/vi-VN/language.json b/apps/admin/locales/vi-VN/language.json new file mode 100644 index 0000000..cfb9c10 --- /dev/null +++ b/apps/admin/locales/vi-VN/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "Tiếng Séc", + "de-DE": "Tiếng Đức", + "en-US": "tiếng Anh", + "es-ES": "Tiếng Tây Ban Nha", + "es-MX": "Tiếng Tây Ban Nha (Mexico)", + "fi-FI": "Tiếng Phần Lan", + "fr-FR": "Tiếng Pháp", + "hi-IN": "Tiếng Hindi", + "hu-HU": "Tiếng Hungary", + "ja-JP": "Tiếng Nhật", + "ko-KR": "Tiếng Hàn", + "no-NO": "Tiếng Na Uy", + "pl-PL": "Tiếng Ba Lan", + "pt-BR": "Tiếng Bồ Đào Nha (Brazil)", + "ro-RO": "Tiếng Romania", + "ru-RU": "Tiếng Nga", + "th-TH": "Tiếng Thái", + "tr-TR": "Tiếng Thổ Nhĩ Kỳ", + "uk-UA": "Tiếng Ukraina", + "vi-VN": "Tiếng Việt", + "zh-CN": "Tiếng Trung (Giản thể)", + "zh-TW": "Tiếng Trung (Phồn thể)" +} diff --git a/apps/admin/locales/vi-VN/menu.json b/apps/admin/locales/vi-VN/menu.json new file mode 100644 index 0000000..73ca545 --- /dev/null +++ b/apps/admin/locales/vi-VN/menu.json @@ -0,0 +1,18 @@ +{ + "Announcement Management": "Quản lý Thông báo", + "Coupon Management": "Quản lý phiếu giảm giá", + "Dashboard": "Bảng điều khiển", + "Document Management": "Quản lý tài liệu", + "Finance": "Tài chính", + "Order Management": "Quản lý đơn hàng", + "Payment Config": "Cấu hình thanh toán", + "Server": "Dịch vụ", + "Server Management": "Quản lý máy chủ", + "Settings": "Cài đặt", + "Subscribe Management": "Quản lý đăng ký", + "System Config": "Cấu hình hệ thống", + "System Tool": "Công Cụ Hệ Thống", + "Ticket Management": "Quản lý phiếu hỗ trợ", + "User": "Người dùng", + "User Management": "Quản lý người dùng" +} diff --git a/apps/admin/locales/vi-VN/order.json b/apps/admin/locales/vi-VN/order.json new file mode 100644 index 0000000..6039461 --- /dev/null +++ b/apps/admin/locales/vi-VN/order.json @@ -0,0 +1,37 @@ +{ + "amount": "Số tiền", + "couponDiscount": "Giảm giá phiếu giảm giá", + "discount": "Số tiền chiết khấu", + "failed": "Thất bại", + "feeAmount": "Phí dịch vụ", + "method": "Phương thức thanh toán", + "methods": { + "alipay_f2f": "Alipay (mặt đối mặt)", + "balance": "Số dư", + "epay": "Thanh toán dễ dàng", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "orderNumber": "Số đơn hàng", + "status": { + "0": "Trạng thái", + "1": "Chờ thanh toán", + "2": "Đã thanh toán", + "3": "Đã hủy", + "4": "Đã đóng", + "5": "Đã hoàn thành" + }, + "subscribe": "Đăng ký", + "subscribePrice": "Giá đăng ký", + "total": "Tổng cộng", + "tradeNo": "Số giao dịch", + "type": { + "0": "Loại", + "1": "Mua mới", + "2": "Gia hạn", + "3": "Đặt lại lưu lượng", + "4": "Nạp tiền" + }, + "updateTime": "Thời gian cập nhật", + "user": "người dùng" +} diff --git a/apps/admin/locales/vi-VN/payment.json b/apps/admin/locales/vi-VN/payment.json new file mode 100644 index 0000000..4ad42f3 --- /dev/null +++ b/apps/admin/locales/vi-VN/payment.json @@ -0,0 +1,44 @@ +{ + "aliPay": "Thanh toán qua Alipay", + "alipayf2f": { + "appId": "ID ứng dụng Alipay", + "invoiceName": "Tên sản phẩm tùy chỉnh", + "invoiceNameDescription": "Sẽ hiển thị trên hóa đơn Alipay", + "privateKey": "Khóa riêng Alipay", + "publicKey": "Khóa công khai Alipay", + "sandbox": "Chế độ sandbox", + "sandboxDescription": "Kích hoạt chế độ sandbox để kiểm tra thanh toán" + }, + "enable": "Kích hoạt", + "enableDescription": "Kích hoạt phương thức thanh toán này", + "epay": { + "key": "KHÓA", + "pid": "PID", + "url": "URL" + }, + "feeMode": "Phương thức tính phí", + "feeModeDescription": "Cách tính phí bổ sung", + "feeModeItems": ["Không phí dịch vụ", "Phần trăm", "Số tiền cố định", "Hai loại trên"], + "feePercent": "Phí phần trăm (tùy chọn)", + "feePercentDescription": "Thêm phí trên số tiền đơn hàng", + "fixedFee": "Phí cố định (tùy chọn)", + "fixedFeeDescription": "Thêm phí cố định vào trên số tiền đơn hàng", + "iconUrl": "URL biểu tượng (tùy chọn)", + "iconUrlDescription": "Dùng để hiển thị phía trước", + "inputPlaceholder": "Vui lòng nhập", + "key": "KEY", + "notifyUrl": "Miền thông báo tùy chỉnh (tùy chọn)", + "notifyUrlDescription": "Thông báo cổng sẽ được gửi đến miền này", + "payForRecommendations": "Thanh toán cho đề xuất", + "pid": "PID", + "saveSuccess": "Lưu thành công", + "showName": "Hiển thị tên", + "showNameDescription": "Dùng để hiển thị phía trước", + "stripe": { + "publicKey": "KHÓA CÔNG KHAI", + "secretKey": "KHÓA BÍ MẬT", + "webhookSecret": "CHỮ KÝ KHÓA WEBHOOK" + }, + "url": "URL", + "wechatPay": "Thanh toán WeChat" +} diff --git a/apps/admin/locales/vi-VN/server.json b/apps/admin/locales/vi-VN/server.json new file mode 100644 index 0000000..65a05b0 --- /dev/null +++ b/apps/admin/locales/vi-VN/server.json @@ -0,0 +1,122 @@ +{ + "group": { + "actions": "Hành động", + "cancel": "Hủy bỏ", + "confirm": "Xác nhận", + "confirmDelete": "Bạn có chắc chắn muốn xóa không?", + "create": "Tạo", + "createNodeGroup": "Tạo nhóm nút", + "createdSuccessfully": "Tạo thành công", + "delete": "Xóa", + "deleteWarning": "Dữ liệu sẽ không thể khôi phục sau khi xóa, hãy cẩn thận.", + "deletedSuccessfully": "Xóa thành công", + "description": "Mô tả", + "edit": "Chỉnh sửa", + "editNodeGroup": "Chỉnh sửa nhóm nút", + "form": { + "cancel": "Hủy bỏ", + "confirm": "Xác nhận", + "description": "Mô tả", + "name": "Tên" + }, + "name": "Tên", + "title": "Danh sách nhóm nút", + "updatedAt": "Thời gian cập nhật" + }, + "node": { + "abnormal": "Bất thường", + "actions": "Hành động", + "address": "Địa chỉ", + "all": "Tất cả", + "cancel": "Hủy", + "confirm": "Xác nhận", + "confirmDelete": "Bạn có chắc chắn muốn xóa không?", + "create": "Tạo", + "createNode": "Tạo nút", + "createSuccess": "Tạo thành công", + "delete": "Xóa", + "deleteSuccess": "Xóa thành công", + "deleteWarning": "Sau khi xóa, dữ liệu sẽ không thể khôi phục. Vui lòng cẩn thận.", + "disk": "Đĩa", + "edit": "Chỉnh sửa", + "editNode": "Chỉnh sửa nút", + "enable": "Kích hoạt", + "form": { + "allowInsecure": "Cho phép không an toàn", + "cancel": "Hủy", + "confirm": "Xác nhận", + "edit": "Chỉnh sửa", + "editSecurity": "Chỉnh sửa cấu hình bảo mật", + "enableRelay": "Kích hoạt chuyển tiếp", + "enableTLS": "Kích hoạt TLS", + "encryptionMethod": "Phương pháp mã hóa", + "flow": "Thuật toán điều khiển luồng", + "hopInterval": "Khoảng cách nhảy", + "hopPorts": "Cổng nhảy", + "hopPortsPlaceholder": "Nhiều cổng cách nhau bằng dấu phẩy", + "name": "Tên", + "nodeGroupId": "ID nhóm nút", + "obfsPassword": "Mật khẩu làm mờ", + "obfsPasswordPlaceholder": "Để trống nếu không làm mờ", + "path": "Đường dẫn", + "pleaseSelect": "Vui lòng chọn", + "port": "Cổng dịch vụ", + "protocol": "Giao thức", + "relayHost": "Địa chỉ chuyển tiếp", + "relayPort": "Cổng chuyển tiếp", + "remarks": "Ghi chú", + "security": "Bảo mật", + "securityConfig": "Cấu hình bảo mật", + "security_config": { + "fingerprint": "Dấu vân tay", + "privateKey": "Khóa riêng", + "privateKeyPlaceholder": "Để trống để tự động tạo", + "publicKey": "Khóa công khai", + "publicKeyPlaceholder": "Để trống để tự động tạo", + "serverAddress": "Địa chỉ máy chủ", + "serverAddressPlaceholder": "Địa chỉ mục tiêu REALITY, mặc định sử dụng SNI", + "serverName": "Tên máy chủ (SNI)", + "serverNamePlaceholder": "REALITY bắt buộc, phải khớp với phía sau", + "serverPort": "Cổng máy chủ", + "serverPortPlaceholder": "Cổng mục tiêu REALITY, mặc định 443", + "shortId": "ID ngắn", + "shortIdPlaceholder": "Để trống để tự động tạo", + "sni": "Chỉ thị tên máy chủ (SNI)" + }, + "selectEncryptionMethod": "Chọn phương pháp mã hóa", + "selectNodeGroup": "Chọn nhóm nút", + "selectProtocol": "Chọn giao thức", + "serverAddr": "Địa chỉ máy chủ", + "serverName": "Tên dịch vụ", + "speedLimit": "Giới hạn tốc độ", + "speedLimitPlaceholder": "Không giới hạn", + "trafficRatio": "Tỷ lệ lưu lượng", + "transport": "Giao thức truyền tải", + "transportConfig": "Cấu hình giao thức truyền tải", + "transportHost": "Địa chỉ dịch vụ truyền tải", + "transportPath": "Đường dẫn truyền tải", + "transportServerName": "Tên dịch vụ truyền tải" + }, + "lastUpdated": "Cập nhật lần cuối", + "memory": "Bộ nhớ", + "name": "Tên", + "node": "Nút", + "nodeGroup": "Nhóm nút", + "normal": "Bình thường", + "onlineCount": "Số người trực tuyến", + "onlineUsers": "Người dùng trực tuyến", + "rate": "Tốc độ", + "relay": "Chuyển tiếp", + "serverAddr": "Địa chỉ máy chủ", + "speedLimit": "Giới hạn tốc độ", + "status": "Trạng thái", + "trafficRatio": "Tỷ lệ lưu lượng", + "type": "Loại", + "updateSuccess": "Cập nhật thành công", + "updatedAt": "Thời gian cập nhật" + }, + "tabs": { + "node": "Nút", + "nodeGroup": "Nhóm nút" + } +} diff --git a/apps/admin/locales/vi-VN/subscribe.json b/apps/admin/locales/vi-VN/subscribe.json new file mode 100644 index 0000000..6a253cc --- /dev/null +++ b/apps/admin/locales/vi-VN/subscribe.json @@ -0,0 +1,79 @@ +{ + "actions": "Hành động", + "cancel": "Hủy", + "confirm": "Xác nhận", + "confirmDelete": "Bạn có chắc chắn muốn xóa không?", + "create": "Tạo", + "createSubscribe": "Tạo đăng ký mới", + "createSuccess": "Tạo thành công", + "delete": "xóa", + "deleteSuccess": "Xóa thành công", + "deleteWarning": "Sau khi xóa, dữ liệu không thể khôi phục, vui lòng thao tác cẩn thận.", + "deviceLimit": "Số lượng thiết bị", + "edit": "Chỉnh sửa", + "editSubscribe": "Chỉnh sửa đăng ký", + "form": { + "cancel": "Hủy", + "confirm": "Xác nhận", + "description": "Mô tả", + "deviceLimit": "Giới hạn thiết bị", + "discount": "Giảm giá", + "discountDescription": "Thiết lập giảm giá dựa trên đơn giá", + "discountMonths": "tháng", + "discountPercent": "Phần trăm giảm giá", + "discount_price": "Giá sau giảm", + "duration": "Thời gian (tháng)", + "inventory": "Tồn kho", + "name": "Tên", + "noLimit": "Không giới hạn", + "quota": "Số lượng mua giới hạn", + "replacement": "Giá thay thế (mỗi lần)", + "selectSubscribeGroup": "Vui lòng chọn nhóm đăng ký", + "server": "Dịch vụ", + "serverGroup": "Nhóm dịch vụ", + "speedLimit": "Giới hạn tốc độ (Mbps)", + "subscribeGroup": "Nhóm đăng ký", + "traffic": "Lưu lượng", + "unit_price": "Giá mỗi tháng" + }, + "group": { + "actions": "Hành động", + "cancel": "Hủy bỏ", + "confirm": "Xác nhận", + "confirmDelete": "Bạn có chắc chắn muốn xóa không?", + "create": "Tạo mới", + "createSubscribeGroup": "Tạo nhóm đăng ký mới", + "createSuccess": "Tạo thành công", + "delete": "Xóa", + "deleteSuccess": "Xóa thành công", + "deleteWarning": "Dữ liệu không thể khôi phục sau khi xóa, hãy cẩn thận.", + "description": "Mô tả", + "edit": "Chỉnh sửa", + "editSubscribeGroup": "Chỉnh sửa nhóm đăng ký", + "form": { + "cancel": "Hủy bỏ", + "confirm": "Xác nhận", + "description": "Mô tả", + "name": "Tên" + }, + "name": "Tên", + "title": "Danh sách nhóm đăng ký", + "updateSuccess": "Cập nhật thành công", + "updatedAt": "Thời gian cập nhật" + }, + "inventory": "Hàng tồn kho", + "name": "Tên", + "quota": "Giới hạn mua/lần", + "replacement": "Đặt lại giá/lần", + "sell": "Bán hàng", + "show": "Hiển thị trang chủ", + "subscribe": "Đăng ký", + "subscribeGroup": "Nhóm đăng ký", + "tabs": { + "subscribe": "Đăng ký", + "subscribeGroup": "Nhóm đăng ký" + }, + "traffic": "lưu lượng", + "unitPrice": "Giá/tháng", + "updateSuccess": "Cập nhật thành công" +} diff --git a/apps/admin/locales/vi-VN/system.json b/apps/admin/locales/vi-VN/system.json new file mode 100644 index 0000000..7f71eb6 --- /dev/null +++ b/apps/admin/locales/vi-VN/system.json @@ -0,0 +1,156 @@ +{ + "currency": { + "accessKey": "Khóa truy cập", + "accessKeyDescription": "https://exchangerate.host cung cấp miễn phí khóa API tỷ giá hối đoái", + "currencySymbol": "Ký hiệu tiền tệ", + "currencySymbolDescription": "Chỉ sử dụng để hiển thị, sau khi thay đổi tất cả các đơn vị tiền tệ trong hệ thống sẽ thay đổi", + "currencyUnit": "Đơn vị tiền tệ", + "currencyUnitDescription": "Chỉ sử dụng để hiển thị, sau khi thay đổi tất cả các đơn vị tiền tệ trong hệ thống sẽ thay đổi", + "saveSuccess": "Lưu thành công" + }, + "email": { + "expiration_email_template": "Mẫu thông báo hết hạn", + "expiration_email_templateDescription": "Các biến {after}.tên biến{before} trong mẫu sẽ được thay thế bằng dữ liệu thực tế, vui lòng đảm bảo giữ lại các biến này.", + "inputPlaceholder": "Vui lòng nhập nội dung...", + "maintenance_email_template": "Mẫu thông báo bảo trì", + "maintenance_email_templateDescription": "Các biến {after}.tên biến{before} trong mẫu sẽ được thay thế bằng dữ liệu thực tế, vui lòng đảm bảo giữ lại các biến này.", + "saveSuccess": "Cấu hình đã được lưu thành công.", + "sendFailure": "Gửi email thử nghiệm thất bại, vui lòng kiểm tra cấu hình.", + "sendSuccess": "Email thử nghiệm đã được gửi thành công.", + "sendTestEmail": "Gửi email thử nghiệm", + "sendTestEmailDescription": "Gửi một email thử nghiệm để xác minh cấu hình có chính xác không.", + "senderAddress": "Địa chỉ người gửi", + "senderAddressDescription": "Địa chỉ email mặc định được sử dụng để gửi thư.", + "smtpAccount": "Tài khoản SMTP", + "smtpAccountDescription": "Tài khoản email được sử dụng để xác thực.", + "smtpEncryptionMethod": "Phương thức mã hóa SMTP", + "smtpEncryptionMethodDescription": "Chọn có bật mã hóa SSL/TLS hay không.", + "smtpPassword": "Mật khẩu SMTP", + "smtpPasswordDescription": "Mật khẩu của tài khoản SMTP này.", + "smtpServerAddress": "Địa chỉ máy chủ SMTP", + "smtpServerAddressDescription": "Chỉ định địa chỉ máy chủ được sử dụng để gửi thư.", + "smtpServerPort": "Cổng máy chủ SMTP", + "smtpServerPortDescription": "Chỉ định số cổng được sử dụng để kết nối với máy chủ SMTP.", + "verify_email_template": "Mẫu email xác minh", + "verify_email_templateDescription": "Các biến {after}.tên biến{before} trong mẫu sẽ được thay thế bằng dữ liệu thực tế, vui lòng đảm bảo giữ lại các biến này." + }, + "invite": { + "commissionFirstTimeOnly": "Chỉ hoa hồng lần đầu tiên mua", + "commissionFirstTimeOnlyDescription": "Khi kích hoạt, hoa hồng chỉ được tạo khi người được mời thanh toán lần đầu tiên. Bạn có thể cấu hình từng người dùng trong quản lý người dùng", + "enableForcedInvite": "Kích hoạt mời bắt buộc", + "enableForcedInviteDescription": "Khi kích hoạt, chỉ người dùng được mời mới có thể đăng ký", + "inputPlaceholder": "Vui lòng nhập", + "inviteCommissionPercentage": "Phần trăm hoa hồng mời", + "inviteCommissionPercentageDescription": "Tỷ lệ phân chia hoa hồng toàn cầu mặc định, bạn có thể cấu hình tỷ lệ riêng cho từng người dùng trong quản lý người dùng", + "saveSuccess": "Lưu thành công" + }, + "node": { + "communicationKey": "Khóa giao tiếp", + "communicationKeyDescription": "Khóa giao tiếp của nút để đảm bảo dữ liệu không bị chặn bởi người khác", + "inputPlaceholder": "Vui lòng nhập", + "nodePullInterval": "Khoảng thời gian kéo nút", + "nodePullIntervalDescription": "Tần suất nút lấy dữ liệu từ bảng điều khiển (giây)", + "nodePushInterval": "Khoảng thời gian đẩy nút", + "nodePushIntervalDescription": "Tần suất nút đẩy dữ liệu lên bảng điều khiển", + "saveSuccess": "Lưu thành công" + }, + "register": { + "emailSuffixWhitelist": "Danh sách trắng hậu tố email", + "emailSuffixWhitelistDescription": "Khi bật, chỉ những email có hậu tố trong danh sách mới có thể đăng ký", + "emailVerification": "Xác minh email", + "emailVerificationDescription": "Khi bật, người dùng sẽ cần xác minh email của họ", + "ipRegistrationLimit": "Giới hạn đăng ký IP", + "ipRegistrationLimitDescription": "Khi bật, IP đáp ứng yêu cầu quy tắc sẽ bị giới hạn đăng ký. Lưu ý rằng việc xác định IP có thể gây ra vấn đề do CDN hoặc proxy phía trước", + "penaltyTime": "Thời gian phạt (phút)", + "penaltyTimeDescription": "Người dùng phải chờ hết thời gian phạt để đăng ký lại", + "registrationLimitCount": "Số lần giới hạn đăng ký", + "registrationLimitCountDescription": "Kích hoạt phạt khi đạt đến giới hạn đăng ký", + "saveSuccess": "Lưu thành công", + "stopNewUserRegistration": "Dừng đăng ký người dùng mới", + "stopNewUserRegistrationDescription": "Khi bật, không ai có thể đăng ký", + "trialRegistration": "Đăng ký dùng thử", + "trialRegistrationDescription": "Kích hoạt đăng ký dùng thử, vui lòng chỉnh sửa gói và thời gian dùng thử trước", + "whitelistSuffixes": "Hậu tố danh sách trắng", + "whitelistSuffixesDescription": "Dùng cho xác minh email đăng ký, mỗi dòng một hậu tố", + "whitelistSuffixesPlaceholder": "Vui lòng nhập hậu tố email, mỗi dòng một" + }, + "site": { + "logo": "LOGO", + "logoDescription": "Dùng để hiển thị vị trí cần hiển thị LOGO", + "logoPlaceholder": "Vui lòng nhập địa chỉ URL của LOGO, không kết thúc bằng '/'", + "saveSuccess": "Lưu thành công", + "siteDesc": "Mô tả trang web", + "siteDescDescription": "Dùng để hiển thị vị trí cần hiển thị mô tả trang web", + "siteDescPlaceholder": "Vui lòng nhập mô tả trang web", + "siteDomain": "Tên miền trang web", + "siteDomainDescription": "Địa chỉ tên miền của trang web hiện tại, ví dụ như dùng trong email", + "siteDomainPlaceholder": "Vui lòng nhập địa chỉ tên miền, mỗi dòng một tên miền", + "siteName": "Tên trang web", + "siteNameDescription": "Dùng để hiển thị vị trí cần hiển thị tên trang web", + "siteNamePlaceholder": "Vui lòng nhập tên trang web" + }, + "subscription": { + "add": "Thêm", + "app": "Ứng dụng", + "appDescription": "Cấu hình địa chỉ tải xuống và quy tắc nhập của ứng dụng, nhớ lưu sau khi chỉnh sửa", + "appDownloadURL": "Địa chỉ tải xuống ứng dụng", + "appIcon": "Biểu tượng ứng dụng", + "appName": "Tên ứng dụng", + "delete": "Xóa", + "reset": "Đặt lại", + "save": "Lưu", + "saveSuccess": "Lưu thành công", + "singleSubscriptionMode": "Chế độ đăng ký đơn lẻ", + "singleSubscriptionModeDescription": "Khi bật, tất cả gói của người dùng sẽ chuyển thành số dư", + "subscriptionDomain": "Tên miền đăng ký", + "subscriptionDomainDescription": "Dùng cho đăng ký, để trống sẽ sử dụng tên miền của trang", + "subscriptionDomainPlaceholder": "Vui lòng nhập tên miền đăng ký, nhiều tên miền vui lòng nhập mỗi dòng một", + "subscriptionPath": "Đường dẫn đăng ký", + "subscriptionPathDescription": "Dùng cho đăng ký, sau khi chỉnh sửa vui lòng khởi động lại hệ thống để đảm bảo trải nghiệm hiệu suất tốt nhất", + "subscriptionPathPlaceholder": "Vui lòng nhập", + "subscriptionProtocol": "Giao thức đăng ký", + "wildcardResolution": "Giải quyết ký tự đại diện", + "wildcardResolutionDescription": "Dùng cho đăng ký" + }, + "tabs": { + "currency": "Tiền tệ", + "email": "Email", + "invite": "Mời", + "node": "Nút", + "register": "Đăng ký", + "site": "Trang web", + "subscription": "Đăng ký", + "telegram": "Telegram", + "tos": "Điều khoản dịch vụ", + "verify": "Xác minh" + }, + "telegram": { + "botToken": "Token của bot", + "botTokenDescription": "Vui lòng nhập token do Botfather cung cấp", + "enableBotNotifications": "Kích hoạt thông báo bot", + "enableBotNotificationsDescription": "Sau khi kích hoạt, bot sẽ gửi thông báo cơ bản đến quản trị viên và người dùng đã liên kết Telegram", + "groupURL": "URL nhóm", + "groupURLDescription": "Sau khi điền, sẽ hiển thị ở phía người dùng hoặc sử dụng ở vị trí cần thiết", + "inputPlaceholderBotToken": "0000000000:xxxxxxxxx_xxxxxxxxxxxxxxx", + "inputPlaceholderGroupURL": "https://t.me/xxxxxx", + "saveSuccess": "Lưu thành công" + }, + "tos": { + "saveSuccess": "Lưu thành công", + "title": "Điều khoản dịch vụ" + }, + "verify": { + "inputPlaceholder": "Vui lòng nhập", + "loginVerificationCode": "Mã xác minh đăng nhập", + "loginVerificationCodeDescription": "Xác minh con người khi đăng nhập", + "registrationVerificationCode": "Mã xác minh đăng ký", + "registrationVerificationCodeDescription": "Xác minh con người khi đăng ký", + "resetPasswordVerificationCode": "Mã xác minh đặt lại mật khẩu", + "resetPasswordVerificationCodeDescription": "Xác minh con người khi đặt lại mật khẩu", + "saveSuccess": "Lưu thành công", + "turnstileSecret": "Khóa bí mật Turnstile", + "turnstileSecretDescription": "Khóa bí mật Turnstile do Cloudflare cung cấp", + "turnstileSiteKey": "Khóa trang Turnstile", + "turnstileSiteKeyDescription": "Khóa trang Turnstile do Cloudflare cung cấp" + } +} diff --git a/apps/admin/locales/vi-VN/ticket.json b/apps/admin/locales/vi-VN/ticket.json new file mode 100644 index 0000000..14e3c26 --- /dev/null +++ b/apps/admin/locales/vi-VN/ticket.json @@ -0,0 +1,19 @@ +{ + "actions": "Hành động", + "cancel": "Hủy", + "check": "Kiểm tra", + "close": "Đóng", + "closeSuccess": "Đóng thành công", + "closeWarning": "Một khi đóng, bạn sẽ không thể thao tác với phiếu công việc này. Vui lòng cẩn thận.", + "confirm": "Xác nhận", + "confirmClose": "Bạn có chắc chắn muốn đóng không?", + "createdAt": "Thời gian tạo", + "inputPlaceholder": "Vui lòng nhập câu hỏi của bạn, chúng tôi sẽ trả lời sớm nhất có thể.", + "open": "Mở", + "reply": "Phản hồi", + "status": ["Trạng thái", "Chờ theo dõi", "Chờ phản hồi", "Đã xử lý", "Đóng"], + "ticketList": "Danh sách phiếu hỗ trợ", + "title": "Tiêu đề", + "updatedAt": "Cập nhật lúc", + "user": "người dùng" +} diff --git a/apps/admin/locales/vi-VN/tool.json b/apps/admin/locales/vi-VN/tool.json new file mode 100644 index 0000000..f6de7f7 --- /dev/null +++ b/apps/admin/locales/vi-VN/tool.json @@ -0,0 +1,26 @@ +{ + "caller": "Người gọi", + "cancel": "Hủy", + "confirmReboot": "Xác nhận khởi động lại", + "confirmSystemReboot": "Xác nhận khởi động lại hệ thống", + "confirmSystemUpgrade": "Xác nhận nâng cấp hệ thống", + "confirmUpgrade": "Xác nhận nâng cấp", + "currentVersion": "Phiên bản hệ thống hiện tại:", + "errors": "Lỗi", + "ip": "IP", + "lastUpdated": "Cập nhật lần cuối:", + "none": "Không có", + "query": "Truy vấn", + "rebootDescription": "Bạn có chắc chắn muốn khởi động lại hệ thống không? Thao tác này sẽ gây gián đoạn dịch vụ trong thời gian ngắn.", + "rebooting": "Đang khởi động lại hệ thống...", + "refreshLogs": "Làm mới nhật ký", + "request": "Yêu cầu", + "status": "Trạng thái", + "systemLogs": "Nhật ký hệ thống", + "systemReboot": "Khởi động lại hệ thống", + "systemServices": "Dịch vụ hệ thống", + "systemUpgrade": "Nâng cấp hệ thống", + "upgradeDescription": "Bạn có chắc chắn muốn thực hiện nâng cấp hệ thống không? Thao tác này có thể mất vài phút và trong thời gian đó hệ thống có thể không phản hồi.", + "userAgent": "Tác nhân người dùng", + "viewLogsAndManage": "Xem nhật ký hệ thống, thực hiện nâng cấp và khởi động lại hệ thống" +} diff --git a/apps/admin/locales/vi-VN/user.json b/apps/admin/locales/vi-VN/user.json new file mode 100644 index 0000000..80446c3 --- /dev/null +++ b/apps/admin/locales/vi-VN/user.json @@ -0,0 +1,38 @@ +{ + "actions": "Hành động", + "balance": "Số dư", + "cancel": "Hủy", + "confirm": "Xác nhận", + "confirmDelete": "Bạn có chắc chắn muốn xóa không?", + "create": "Tạo", + "createSuccess": "Tạo thành công", + "createUser": "Tạo người dùng", + "createdAt": "Thời gian đăng ký", + "delete": "Xóa", + "deleteDescription": "Sau khi xóa, dữ liệu không thể khôi phục, hãy thao tác cẩn thận.", + "deleteSuccess": "Xóa thành công", + "edit": "Chỉnh sửa", + "editUser": "Chỉnh sửa người dùng", + "email": "Email", + "enable": "Kích hoạt", + "form": { + "balance": "Số dư", + "balancePlaceholder": "Số dư", + "cancel": "Hủy", + "confirm": "Xác nhận", + "invalidEmailFormat": "Định dạng email không hợp lệ", + "inviteCode": "Mã mời", + "inviteCodePlaceholder": "Vui lòng nhập mã mời (để trống sẽ tự động tạo)", + "manager": "Quản trị viên", + "password": "Mật khẩu", + "passwordPlaceholder": "Vui lòng nhập mật khẩu mới (có thể để trống)", + "refererId": "ID người giới thiệu", + "refererIdPlaceholder": "Vui lòng nhập ID người giới thiệu", + "userEmail": "Email người dùng", + "userEmailPlaceholder": "Vui lòng nhập email người dùng" + }, + "referer": "Người giới thiệu", + "updateSuccess": "Cập nhật thành công", + "userList": "Danh sách người dùng", + "userName": "Email người dùng" +} diff --git a/apps/admin/locales/zh-TW/announcement.json b/apps/admin/locales/zh-TW/announcement.json new file mode 100644 index 0000000..3c62a63 --- /dev/null +++ b/apps/admin/locales/zh-TW/announcement.json @@ -0,0 +1,30 @@ +{ + "actions": "操作", + "announcementList": "公告列表", + "cancel": "取消", + "confirm": "確認", + "confirmDelete": "您確定要刪除嗎?", + "content": "內容", + "create": "建立", + "createAnnouncement": "建立公告", + "createSuccess": "建立成功", + "delete": "刪除", + "deleteDescription": "一旦刪除,資料將無法恢復。請謹慎操作。", + "deleteSuccess": "刪除成功", + "edit": "編輯", + "editAnnouncement": "編輯公告", + "enable": "啟用", + "form": { + "cancel": "取消", + "confirm": "確認", + "content": "內容", + "contentPlaceholder": "請輸入公告內容(支援Markdown)", + "title": "標題", + "titlePlaceholder": "請輸入" + }, + "hide": "隱藏", + "show": "顯示", + "title": "標題", + "updateSuccess": "更新成功", + "updatedAt": "更新時間" +} diff --git a/apps/admin/locales/zh-TW/auth.json b/apps/admin/locales/zh-TW/auth.json new file mode 100644 index 0000000..2eb9c0b --- /dev/null +++ b/apps/admin/locales/zh-TW/auth.json @@ -0,0 +1,39 @@ +{ + "check": { + "checking": "正在驗證...", + "continue": "繼續", + "description": "請輸入您的電子郵件以繼續登入或註冊。", + "email": "請輸入有效的電子郵件地址。", + "title": "登入/註冊", + "whitelist": "電子郵件域名不在允許的白名單中。" + }, + "login": { + "description": "請輸入您的帳戶資訊以登入。", + "forgotPassword": "忘記密碼?", + "success": "登入成功!", + "switchAccount": "註冊/切換帳號", + "title": "登入" + }, + "logout": "登出", + "orWithEmail": "或使用電子郵件", + "register": { + "description": "創建新帳戶,填寫您的資訊以註冊。", + "existingAccount": "已有帳戶?", + "get": "獲取", + "invite": "邀請碼", + "message": "#### 尊敬的用戶,您好!\n\n感謝您對我們的關注和支持。由於站點營運策略的調整,我們已關閉新用戶註冊功能。在此期間,現有用戶的使用不會受到任何影響。\n\n我們致力於為您提供更好的服務和體驗,因此將在關閉註冊期間進行全面的系統優化和功能升級。未來,我們將以更優質的內容和服務迎接您的到來。\n\n請關注我們的網站和社交媒體平台,獲取最新的動態和通知。感謝您的理解與支持。\n\n如有任何疑問或需要幫助,請隨時聯繫我們的客服團隊。\n\n**再次感謝您的支持與理解。**", + "passwordMismatch": "兩次密碼輸入不一致", + "success": "註冊成功,已自動登入!", + "switchToLogin": "登入/重置信箱", + "title": "註冊" + }, + "reset": { + "description": "請輸入您的電子郵件地址以重設密碼。", + "existingAccount": "已有帳戶?", + "get": "獲取", + "success": "重設密碼成功,已自動切換到登入!", + "switchToLogin": "登入/註冊", + "title": "重設密碼" + }, + "tos": "服務條款" +} diff --git a/apps/admin/locales/zh-TW/common.json b/apps/admin/locales/zh-TW/common.json new file mode 100644 index 0000000..518c0b6 --- /dev/null +++ b/apps/admin/locales/zh-TW/common.json @@ -0,0 +1,60 @@ +{ + "billing": { + "description": "贊助有助於 PPanel 繼續發布更新!", + "title": "贊助商" + }, + "empty": [ + "想像一下這裡充滿了精彩的內容!暫時只能靠想像了…", + "這片區域神秘消失了,我們正在召喚它回來!", + "哎呀,什麼都沒發生…你可以自己填點什麼!", + "這就像在演唱會上發現舞台上沒人…要不你上去表演?", + "你找到了一片空白樂土!要不要建個房子?", + "這裡暫時空無一物,但創意從這裡開始!", + "什麼也沒有…但別擔心,這只是個開始!", + "這裡原本準備了大驚喜,結果驚喜溜走了!", + "暫時什麼都沒有,就像零食櫃被吃空了一樣。", + "這片空地在等它的主角登場!" + ], + "request": { + "10001": "查詢暫未成功,請稍後重試或檢查您的條件。", + "10002": "更新操作未成功,請稍後再試。", + "10003": "暫時無法完成插入操作,請稍後再試。", + "10004": "刪除操作未能完成,請稍後再試。", + "20001": "該用戶資訊已存在,請更換資訊後重試。", + "20002": "未找到該用戶,請核對資訊後再試。", + "20003": "您輸入的密碼不正確,請重新輸入。", + "20004": "該用戶已被禁用,如有疑問請聯繫客服。", + "20005": "餘額不足,請充值後再次嘗試。", + "20006": "註冊功能暫不可用,請稍後再試。", + "30001": "該節點已存在,請勿重複添加。", + "30002": "未找到相關節點,請檢查後重試。", + "30003": "分組已存在,請嘗試使用其他名稱。", + "30004": "未找到該分組,請確認資訊後重試。", + "30005": "該分組內仍有內容,請清空後再試。", + "400": "請求參數不正確,請檢查並重新提交。", + "40002": "未找到有效的Token,請先登入再重試。", + "40003": "當前Token無效,請重新獲取後再嘗試。", + "40004": "Token已過期,請重新登入。", + "40005": "您暫無訪問權限,如有疑問請聯繫管理員。", + "401": "請求過於頻繁,請稍後再嘗試。", + "500": "伺服器遇到一些問題,請稍後再試。", + "50001": "找不到對應的優惠券資訊,請檢查後再試。", + "50002": "該優惠券已被使用,無法重複使用。", + "60001": "訂閱已過期,請續訂後再使用。", + "60002": "暫時無法使用該訂閱,請稍後再試。", + "70001": "驗證碼有誤,請重新輸入。", + "80001": "任務未成功加入隊列,請稍後重試。", + "90001": "請關閉 DEBUG 模式後再試。", + "undefined": "系統發生錯誤,請稍後重試" + }, + "table": { + "actions": "操作", + "asc": "升序", + "desc": "降序", + "hide": "隱藏", + "pageInfo": "第 {current} 頁,共 {total} 頁", + "rowsPerPage": "每頁行數", + "selectedItems": "已選擇 {total} 行" + }, + "unlimited": "無限制" +} diff --git a/apps/admin/locales/zh-TW/coupon.json b/apps/admin/locales/zh-TW/coupon.json new file mode 100644 index 0000000..5103614 --- /dev/null +++ b/apps/admin/locales/zh-TW/coupon.json @@ -0,0 +1,50 @@ +{ + "actions": "操作", + "amount": "金額", + "cancel": "取消", + "code": "程式碼", + "confirm": "確認", + "confirmDelete": "您確定要刪除嗎?", + "count": "數量", + "couponList": "優惠券列表", + "create": "建立", + "createCoupon": "建立優惠券", + "createSuccess": "建立成功", + "delete": "刪除", + "deleteSuccess": "刪除成功", + "deleteWarning": "一旦刪除,資料將無法恢復。請謹慎操作。", + "discount": "折扣", + "edit": "編輯", + "editCoupon": "編輯優惠券", + "enable": "啟用", + "form": { + "amountDiscount": "金額折扣", + "cancel": "取消", + "confirm": "確認", + "count": "最大使用次數", + "countPlaceholder": "最大使用次數(留空表示無限制)", + "customCouponCode": "自訂優惠碼", + "customCouponCodePlaceholder": "自訂優惠碼(留空自動生成)", + "enterCouponName": "請輸入優惠券名稱", + "enterValue": "請輸入數值", + "expireTime": "過期時間", + "name": "名稱", + "percentageDiscount": "百分比折扣", + "selectServer": "請選擇訂閱", + "selectTime": "選擇時間", + "specifiedServer": "指定訂閱", + "startTime": "生效時間", + "type": "優惠券類型", + "userLimit": "每用戶最大使用次數", + "userLimitPlaceholder": "每用戶最大使用次數(留空表示無限制)" + }, + "name": "名稱", + "percentage": "百分比", + "remainingTimes": "剩餘", + "subscribe": "訂閱", + "type": "類型", + "unlimited": "無限制", + "updateSuccess": "更新成功", + "usedTimes": "使用次數", + "validityPeriod": "有效期限" +} diff --git a/apps/admin/locales/zh-TW/document.json b/apps/admin/locales/zh-TW/document.json new file mode 100644 index 0000000..aa5bf92 --- /dev/null +++ b/apps/admin/locales/zh-TW/document.json @@ -0,0 +1,29 @@ +{ + "DocumentList": "文件列表", + "actions": "操作", + "cancel": "取消", + "confirm": "確認", + "confirmDelete": "您確定要刪除嗎?", + "create": "建立", + "createDocument": "建立文件", + "createSuccess": "建立成功", + "delete": "刪除", + "deleteDescription": "一旦刪除,資料將無法恢復。請謹慎操作。", + "deleteSuccess": "刪除成功", + "edit": "編輯", + "editDocument": "編輯文件", + "form": { + "cancel": "取消", + "confirm": "確認", + "content": "內容", + "tags": "類別", + "tagsPlaceholder": "請用回車鍵或逗號(,)分隔以輸入多個類別", + "title": "標題", + "titlePlaceholder": "請輸入" + }, + "show": "顯示", + "tags": "類別", + "title": "標題", + "updateSuccess": "更新成功", + "updatedAt": "更新時間" +} diff --git a/apps/admin/locales/zh-TW/index.json b/apps/admin/locales/zh-TW/index.json new file mode 100644 index 0000000..846a861 --- /dev/null +++ b/apps/admin/locales/zh-TW/index.json @@ -0,0 +1,29 @@ +{ + "email": "電子郵件", + "month": "本月", + "monthDownloadTraffic": "本月下載流量", + "monthUploadTraffic": "本月上傳流量", + "newPurchase": "新購", + "nodeTraffic": "節點流量", + "nodes": "節點", + "offlineNodeCount": "離線節點數", + "onlineIPCount": "線上IP數", + "onlineNodeCount": "線上節點數", + "pendingTickets": "待處理工單", + "register": "註冊", + "repurchase": "回購", + "revenueTitle": "收入統計", + "selectTypePlaceholder": "選擇類型", + "statisticsTitle": "統計", + "today": "今天", + "todayDownloadTraffic": "今日下載流量", + "todayUploadTraffic": "今日上傳流量", + "total": "總計", + "totalIncome": "總收入", + "trafficRank": "流量排行", + "type": "類型", + "userTitle": "使用者統計", + "userTraffic": "使用者流量", + "users": "使用者", + "yesterday": "昨天" +} diff --git a/apps/admin/locales/zh-TW/language.json b/apps/admin/locales/zh-TW/language.json new file mode 100644 index 0000000..a47053c --- /dev/null +++ b/apps/admin/locales/zh-TW/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "捷克語", + "de-DE": "德語", + "en-US": "英語", + "es-ES": "西班牙語", + "es-MX": "西班牙語(墨西哥)", + "fi-FI": "芬蘭語", + "fr-FR": "法語", + "hi-IN": "印地語", + "hu-HU": "匈牙利語", + "ja-JP": "日語", + "ko-KR": "韓語", + "no-NO": "挪威語", + "pl-PL": "波蘭語", + "pt-BR": "葡萄牙語(巴西)", + "ro-RO": "羅馬尼亞語", + "ru-RU": "俄語", + "th-TH": "泰語", + "tr-TR": "土耳其語", + "uk-UA": "烏克蘭語", + "vi-VN": "越南語", + "zh-CN": "中文(繁體)", + "zh-TW": "中文(繁體)" +} diff --git a/apps/admin/locales/zh-TW/menu.json b/apps/admin/locales/zh-TW/menu.json new file mode 100644 index 0000000..5db270e --- /dev/null +++ b/apps/admin/locales/zh-TW/menu.json @@ -0,0 +1,18 @@ +{ + "Announcement Management": "公告管理", + "Coupon Management": "優惠券管理", + "Dashboard": "儀表板", + "Document Management": "文件管理", + "Finance": "財務", + "Order Management": "訂單管理", + "Payment Config": "支付配置", + "Server": "服務", + "Server Management": "服務管理", + "Settings": "設定", + "Subscribe Management": "訂閱管理", + "System Config": "系統配置", + "System Tool": "系統工具", + "Ticket Management": "工單管理", + "User": "使用者", + "User Management": "使用者管理" +} diff --git a/apps/admin/locales/zh-TW/order.json b/apps/admin/locales/zh-TW/order.json new file mode 100644 index 0000000..507bc33 --- /dev/null +++ b/apps/admin/locales/zh-TW/order.json @@ -0,0 +1,37 @@ +{ + "amount": "金額", + "couponDiscount": "優惠券折扣", + "discount": "折扣金額", + "failed": "失敗", + "feeAmount": "手續費", + "method": "付款方式", + "methods": { + "alipay_f2f": "支付寶(面對面)", + "balance": "餘額", + "epay": "易支付", + "stripe_alipay": "Stripe(支付寶)", + "stripe_wechat_pay": "Stripe(微信)" + }, + "orderNumber": "訂單編號", + "status": { + "0": "狀態", + "1": "待支付", + "2": "已支付", + "3": "已取消", + "4": "已關閉", + "5": "已完成" + }, + "subscribe": "訂閱", + "subscribePrice": "訂閱價格", + "total": "總計", + "tradeNo": "交易號", + "type": { + "0": "類型", + "1": "新購", + "2": "續費", + "3": "重置流量", + "4": "充值" + }, + "updateTime": "更新時間", + "user": "使用者" +} diff --git a/apps/admin/locales/zh-TW/payment.json b/apps/admin/locales/zh-TW/payment.json new file mode 100644 index 0000000..0fe0f67 --- /dev/null +++ b/apps/admin/locales/zh-TW/payment.json @@ -0,0 +1,44 @@ +{ + "aliPay": "支付寶支付", + "alipayf2f": { + "appId": "支付寶應用ID", + "invoiceName": "自訂產品名稱", + "invoiceNameDescription": "將顯示在支付寶賬單中", + "privateKey": "支付寶私鑰", + "publicKey": "支付寶公鑰", + "sandbox": "沙箱模式", + "sandboxDescription": "啟用沙箱模式以測試支付" + }, + "enable": "啟用", + "enableDescription": "啟用此支付方式", + "epay": { + "key": "KEY", + "pid": "PID", + "url": "URL" + }, + "feeMode": "收費方式", + "feeModeDescription": "額外手續費的收費方式", + "feeModeItems": ["無手續費", "百分比", "固定金額", "以上兩種"], + "feePercent": "百分比費用(可選)", + "feePercentDescription": "在訂單金額之上添加費用", + "fixedFee": "固定費用(可選)", + "fixedFeeDescription": "在訂單金額之上添加固定費用", + "iconUrl": "圖示 URL(可選)", + "iconUrlDescription": "用於前端顯示", + "inputPlaceholder": "請輸入", + "key": "KEY", + "notifyUrl": "自訂通知域(可選)", + "notifyUrlDescription": "閘道通知將發送到此網域", + "payForRecommendations": "支付推薦", + "pid": "PID", + "saveSuccess": "儲存成功", + "showName": "顯示名稱", + "showNameDescription": "用於前端顯示", + "stripe": { + "publicKey": "PUBLIC KEY", + "secretKey": "SECRET KEY", + "webhookSecret": "WEBHOOK 密鑰簽名" + }, + "url": "URL", + "wechatPay": "微信支付" +} diff --git a/apps/admin/locales/zh-TW/server.json b/apps/admin/locales/zh-TW/server.json new file mode 100644 index 0000000..4cfa810 --- /dev/null +++ b/apps/admin/locales/zh-TW/server.json @@ -0,0 +1,122 @@ +{ + "group": { + "actions": "操作", + "cancel": "取消", + "confirm": "確認", + "confirmDelete": "確定要刪除嗎?", + "create": "建立", + "createNodeGroup": "建立節點組", + "createdSuccessfully": "建立成功", + "delete": "刪除", + "deleteWarning": "刪除後資料將無法恢復,請謹慎操作。", + "deletedSuccessfully": "刪除成功", + "description": "描述", + "edit": "編輯", + "editNodeGroup": "編輯節點組", + "form": { + "cancel": "取消", + "confirm": "確認", + "description": "描述", + "name": "名稱" + }, + "name": "名稱", + "title": "節點組列表", + "updatedAt": "更新時間" + }, + "node": { + "abnormal": "異常", + "actions": "操作", + "address": "地址", + "all": "全部", + "cancel": "取消", + "confirm": "確認", + "confirmDelete": "確定要刪除嗎?", + "create": "創建", + "createNode": "創建節點", + "createSuccess": "創建成功", + "delete": "刪除", + "deleteSuccess": "刪除成功", + "deleteWarning": "刪除後,數據將無法恢復。請謹慎操作。", + "disk": "磁碟", + "edit": "編輯", + "editNode": "編輯節點", + "enable": "啟用", + "form": { + "allowInsecure": "允許不安全", + "cancel": "取消", + "confirm": "確認", + "edit": "編輯", + "editSecurity": "編輯安全性配置", + "enableRelay": "啟用中繼", + "enableTLS": "啟用TLS", + "encryptionMethod": "加密方法", + "flow": "流控算法", + "hopInterval": "跳躍間隔", + "hopPorts": "跳躍端口", + "hopPortsPlaceholder": "多個端口用逗號分隔", + "name": "名稱", + "nodeGroupId": "節點組ID", + "obfsPassword": "混淆密碼", + "obfsPasswordPlaceholder": "留空則不混淆", + "path": "路徑", + "pleaseSelect": "請選擇", + "port": "服務端口", + "protocol": "協議", + "relayHost": "中繼地址", + "relayPort": "中繼端口", + "remarks": "備註", + "security": "安全性", + "securityConfig": "安全性配置", + "security_config": { + "fingerprint": "FingerPrint", + "privateKey": "Private Key", + "privateKeyPlaceholder": "留空自動生成", + "publicKey": "Public Key", + "publicKeyPlaceholder": "留空自動生成", + "serverAddress": "Server Address", + "serverAddressPlaceholder": "REALITY目標地址,默認使用SNI", + "serverName": "Server Name(SNI)", + "serverNamePlaceholder": "REALITY必填,與後端保持一致", + "serverPort": "Server Port", + "serverPortPlaceholder": "REALITY目標端口,默認443", + "shortId": "ShortId", + "shortIdPlaceholder": "留空自動生成", + "sni": "伺服器名稱指示(sni)" + }, + "selectEncryptionMethod": "選擇加密方法", + "selectNodeGroup": "選擇節點組", + "selectProtocol": "選擇協議", + "serverAddr": "伺服器地址", + "serverName": "服務名稱", + "speedLimit": "速度限制", + "speedLimitPlaceholder": "無限制", + "trafficRatio": "流量速率", + "transport": "傳輸協議", + "transportConfig": "傳輸協議配置", + "transportHost": "傳輸服務地址", + "transportPath": "傳輸路徑", + "transportServerName": "傳輸服務名稱" + }, + "lastUpdated": "最後更新", + "memory": "記憶體", + "name": "名稱", + "node": "節點", + "nodeGroup": "節點組", + "normal": "正常", + "onlineCount": "在線人數", + "onlineUsers": "在線用戶", + "rate": "速率", + "relay": "中繼", + "serverAddr": "伺服器地址", + "speedLimit": "速度限制", + "status": "狀態", + "trafficRatio": "流量速率", + "type": "類型", + "updateSuccess": "更新成功", + "updatedAt": "更新時間" + }, + "tabs": { + "node": "節點", + "nodeGroup": "節點組" + } +} diff --git a/apps/admin/locales/zh-TW/subscribe.json b/apps/admin/locales/zh-TW/subscribe.json new file mode 100644 index 0000000..7adb325 --- /dev/null +++ b/apps/admin/locales/zh-TW/subscribe.json @@ -0,0 +1,79 @@ +{ + "actions": "操作", + "cancel": "取消", + "confirm": "確認", + "confirmDelete": "確定刪除嗎?", + "create": "建立", + "createSubscribe": "新增訂閱", + "createSuccess": "建立成功", + "delete": "刪除", + "deleteSuccess": "刪除成功", + "deleteWarning": "刪除後資料無法恢復,請謹慎操作。", + "deviceLimit": "設備數/台", + "edit": "編輯", + "editSubscribe": "編輯訂閱", + "form": { + "cancel": "取消", + "confirm": "確認", + "description": "描述", + "deviceLimit": "設備限制", + "discount": "折扣", + "discountDescription": "基於單價設定折扣", + "discountMonths": "月", + "discountPercent": "折扣比", + "discount_price": "折扣價格", + "duration": "時長(月)", + "inventory": "庫存", + "name": "名稱", + "noLimit": "無限制", + "quota": "限購數量", + "replacement": "重置價格(每次)", + "selectSubscribeGroup": "請選擇訂閱組", + "server": "服務", + "serverGroup": "服務組", + "speedLimit": "速度限制(Mbps)", + "subscribeGroup": "訂閱組", + "traffic": "流量", + "unit_price": "單月價格" + }, + "group": { + "actions": "操作", + "cancel": "取消", + "confirm": "確認", + "confirmDelete": "確定刪除嗎?", + "create": "建立", + "createSubscribeGroup": "新建訂閱組", + "createSuccess": "建立成功", + "delete": "刪除", + "deleteSuccess": "刪除成功", + "deleteWarning": "刪除後資料無法恢復,請謹慎操作。", + "description": "描述", + "edit": "編輯", + "editSubscribeGroup": "編輯訂閱組", + "form": { + "cancel": "取消", + "confirm": "確認", + "description": "描述", + "name": "名稱" + }, + "name": "名稱", + "title": "訂閱組列表", + "updateSuccess": "更新成功", + "updatedAt": "更新時間" + }, + "inventory": "庫存", + "name": "名稱", + "quota": "限購/次", + "replacement": "重置價格/次", + "sell": "銷售", + "show": "首頁顯示", + "subscribe": "訂閱", + "subscribeGroup": "訂閱組", + "tabs": { + "subscribe": "訂閱", + "subscribeGroup": "訂閱組" + }, + "traffic": "流量", + "unitPrice": "價格/月", + "updateSuccess": "更新成功" +} diff --git a/apps/admin/locales/zh-TW/system.json b/apps/admin/locales/zh-TW/system.json new file mode 100644 index 0000000..9cef8e5 --- /dev/null +++ b/apps/admin/locales/zh-TW/system.json @@ -0,0 +1,156 @@ +{ + "currency": { + "accessKey": "密鑰", + "accessKeyDescription": "https://exchangerate.host 提供免費提供的匯率API密鑰", + "currencySymbol": "貨幣符號", + "currencySymbolDescription": "僅用於展示使用,更改後系統中所有的貨幣單位都將發生變更", + "currencyUnit": "貨幣單位", + "currencyUnitDescription": "僅用於展示使用,更改後系統中所有的貨幣單位都將發生變更", + "saveSuccess": "保存成功" + }, + "email": { + "expiration_email_template": "過期通知模板", + "expiration_email_templateDescription": "模板中的 {after}.變量名{before} 會被替換為實際數據,請確保保留這些變量。", + "inputPlaceholder": "請輸入內容...", + "maintenance_email_template": "維護通知模板", + "maintenance_email_templateDescription": "模板中的 {after}.變量名{before} 會被替換為實際數據,請確保保留這些變量。", + "saveSuccess": "配置已成功保存。", + "sendFailure": "測試郵件發送失敗,請檢查配置。", + "sendSuccess": "測試郵件已成功發送。", + "sendTestEmail": "發送測試郵件", + "sendTestEmailDescription": "發送一封測試郵件以驗證配置是否正確。", + "senderAddress": "發件人地址", + "senderAddressDescription": "默認用於發送郵件的郵箱地址。", + "smtpAccount": "SMTP 帳號", + "smtpAccountDescription": "用於身份驗證的郵件帳號。", + "smtpEncryptionMethod": "SMTP 加密方式", + "smtpEncryptionMethodDescription": "選擇是否啟用 SSL/TLS 加密。", + "smtpPassword": "SMTP 密碼", + "smtpPasswordDescription": "該 SMTP 帳號的密碼。", + "smtpServerAddress": "SMTP 伺服器地址", + "smtpServerAddressDescription": "指定用於發送郵件的伺服器地址。", + "smtpServerPort": "SMTP 伺服器端口", + "smtpServerPortDescription": "指定用於連接 SMTP 伺服器的端口號。", + "verify_email_template": "驗證郵件模板", + "verify_email_templateDescription": "模板中的 {after}.變量名{before} 會被替換為實際數據,請確保保留這些變量。" + }, + "invite": { + "commissionFirstTimeOnly": "僅首次購買佣金", + "commissionFirstTimeOnlyDescription": "啟用後,佣金僅在邀請人首次付款時生成您可以在用戶管理中配置單個用戶", + "enableForcedInvite": "啟用強制邀請", + "enableForcedInviteDescription": "啟用後,只有受邀用戶才能註冊", + "inputPlaceholder": "請輸入", + "inviteCommissionPercentage": "邀請佣金百分比", + "inviteCommissionPercentageDescription": "默認全局佣金分配比例,您可以在用戶管理中配置單個比例", + "saveSuccess": "保存成功" + }, + "node": { + "communicationKey": "通訊密鑰", + "communicationKeyDescription": "節點通訊的密鑰,以確保數據不被他人攔截", + "inputPlaceholder": "請輸入", + "nodePullInterval": "節點拉取間隔", + "nodePullIntervalDescription": "節點從面板獲取數據的頻率(秒)", + "nodePushInterval": "節點推送間隔", + "nodePushIntervalDescription": "節點將數據推送到面板的頻率", + "saveSuccess": "保存成功" + }, + "register": { + "emailSuffixWhitelist": "電子郵件後綴白名單", + "emailSuffixWhitelistDescription": "啟用後,只有列表中的後綴的電子郵件才能註冊", + "emailVerification": "電子郵件驗證", + "emailVerificationDescription": "啟用後,使用者將需要驗證他們的電子郵件", + "ipRegistrationLimit": "IP 註冊限制", + "ipRegistrationLimitDescription": "啟用後,符合規則要求的 IP 將被限制註冊。請注意,由於 CDN 或前端代理,IP 確定可能會導致問題", + "penaltyTime": "處罰時間(分鐘)", + "penaltyTimeDescription": "使用者必須等待處罰時間過去才能再次註冊", + "registrationLimitCount": "註冊限制計數", + "registrationLimitCountDescription": "達到註冊限制後啟用處罰", + "saveSuccess": "儲存成功", + "stopNewUserRegistration": "停止新使用者註冊", + "stopNewUserRegistrationDescription": "啟用後,沒有人可以註冊", + "trialRegistration": "試用註冊", + "trialRegistrationDescription": "啟用試用註冊,請先修改試用方案和時長", + "whitelistSuffixes": "白名單後綴", + "whitelistSuffixesDescription": "用於註冊電子郵件驗證,每行一個", + "whitelistSuffixesPlaceholder": "請輸入電子郵件後綴,每行一個" + }, + "site": { + "logo": "LOGO", + "logoDescription": "用於顯示需要展示 LOGO 的位置", + "logoPlaceholder": "請輸入 LOGO 的 URL 地址,不要以 '/' 結尾", + "saveSuccess": "儲存成功", + "siteDesc": "站點描述", + "siteDescDescription": "用於顯示需要展示站點描述的位置", + "siteDescPlaceholder": "請輸入站點描述", + "siteDomain": "站點域名", + "siteDomainDescription": "當前網站的域名地址,例如用於電子郵件中", + "siteDomainPlaceholder": "請輸入域名地址,多个域名請每行一個", + "siteName": "站點名稱", + "siteNameDescription": "用於顯示需要展示站點名稱的位置", + "siteNamePlaceholder": "請輸入站點名稱" + }, + "subscription": { + "add": "新增", + "app": "應用", + "appDescription": "配置 APP 的下載地址和匯入規則,記得修改後儲存", + "appDownloadURL": "應用下載地址", + "appIcon": "應用圖示", + "appName": "應用名稱", + "delete": "刪除", + "reset": "重設", + "save": "儲存", + "saveSuccess": "儲存成功", + "singleSubscriptionMode": "單一訂閱模式", + "singleSubscriptionModeDescription": "開啟後,所有用戶的套餐將轉換為餘額", + "subscriptionDomain": "訂閱網域", + "subscriptionDomainDescription": "用於訂閱,留空則使用站點網域", + "subscriptionDomainPlaceholder": "請輸入訂閱網域,若有多個網域請每行一個", + "subscriptionPath": "訂閱路徑", + "subscriptionPathDescription": "用於訂閱,修改後請務必重新啟動系統,以確保最佳效能體驗", + "subscriptionPathPlaceholder": "請輸入", + "subscriptionProtocol": "訂閱協議", + "wildcardResolution": "萬用字元解析", + "wildcardResolutionDescription": "用於訂閱" + }, + "tabs": { + "currency": "貨幣", + "email": "電子郵件", + "invite": "邀請", + "node": "節點", + "register": "註冊", + "site": "網站", + "subscription": "訂閱", + "telegram": "Telegram", + "tos": "服務條款", + "verify": "驗證" + }, + "telegram": { + "botToken": "機器人 Token", + "botTokenDescription": "請輸入 Botfather 提供的 token", + "enableBotNotifications": "啟用機器人通知", + "enableBotNotificationsDescription": "啟用後,機器人將向已連結 Telegram 的管理員和用戶發送基本通知", + "groupURL": "群組 URL", + "groupURLDescription": "填寫後,將在用戶端顯示或用於需要的位置", + "inputPlaceholderBotToken": "0000000000:xxxxxxxxx_xxxxxxxxxxxxxxx", + "inputPlaceholderGroupURL": "https://t.me/xxxxxx", + "saveSuccess": "儲存成功" + }, + "tos": { + "saveSuccess": "儲存成功", + "title": "服務條款" + }, + "verify": { + "inputPlaceholder": "請輸入", + "loginVerificationCode": "登入驗證碼", + "loginVerificationCodeDescription": "登入時的人機驗證", + "registrationVerificationCode": "註冊驗證碼", + "registrationVerificationCodeDescription": "註冊時的人機驗證", + "resetPasswordVerificationCode": "重設密碼驗證碼", + "resetPasswordVerificationCodeDescription": "重設密碼時的人機驗證", + "saveSuccess": "儲存成功", + "turnstileSecret": "Turnstile 密鑰", + "turnstileSecretDescription": "Cloudflare 提供的 Turnstile 密鑰", + "turnstileSiteKey": "Turnstile 站點密鑰", + "turnstileSiteKeyDescription": "Cloudflare 提供的 Turnstile 站點密鑰" + } +} diff --git a/apps/admin/locales/zh-TW/ticket.json b/apps/admin/locales/zh-TW/ticket.json new file mode 100644 index 0000000..8f11a0a --- /dev/null +++ b/apps/admin/locales/zh-TW/ticket.json @@ -0,0 +1,19 @@ +{ + "actions": "操作", + "cancel": "取消", + "check": "檢視", + "close": "關閉", + "closeSuccess": "關閉成功", + "closeWarning": "一旦關閉,將無法操作該工單。請謹慎操作。", + "confirm": "確認", + "confirmClose": "確定要關閉嗎?", + "createdAt": "建立時間", + "inputPlaceholder": "請輸入您的問題,我們會盡快回覆。", + "open": "開啟", + "reply": "回覆", + "status": ["狀態", "待跟進", "待回覆", "已處理", "關閉"], + "ticketList": "工單列表", + "title": "標題", + "updatedAt": "更新時間", + "user": "使用者" +} diff --git a/apps/admin/locales/zh-TW/tool.json b/apps/admin/locales/zh-TW/tool.json new file mode 100644 index 0000000..17d4c0b --- /dev/null +++ b/apps/admin/locales/zh-TW/tool.json @@ -0,0 +1,26 @@ +{ + "caller": "來電者", + "cancel": "取消", + "confirmReboot": "確認重新啟動", + "confirmSystemReboot": "確認系統重新啟動", + "confirmSystemUpgrade": "確認系統升級", + "confirmUpgrade": "確認升級", + "currentVersion": "目前系統版本:", + "errors": "錯誤", + "ip": "IP", + "lastUpdated": "最後更新:", + "none": "無", + "query": "查詢", + "rebootDescription": "您確定要重新啟動系統嗎?此操作將導致短暫的服務中斷。", + "rebooting": "正在重新啟動系統...", + "refreshLogs": "重新整理日誌", + "request": "請求", + "status": "狀態", + "systemLogs": "系統日誌", + "systemReboot": "系統重啟", + "systemServices": "系統服務", + "systemUpgrade": "系統升級", + "upgradeDescription": "您確定要執行系統升級嗎?此操作可能需要幾分鐘時間,期間系統可能無法回應。", + "userAgent": "使用者代理", + "viewLogsAndManage": "查看系統日誌,執行系統升級和重新啟動操作" +} diff --git a/apps/admin/locales/zh-TW/user.json b/apps/admin/locales/zh-TW/user.json new file mode 100644 index 0000000..a142a91 --- /dev/null +++ b/apps/admin/locales/zh-TW/user.json @@ -0,0 +1,38 @@ +{ + "actions": "操作", + "balance": "餘額", + "cancel": "取消", + "confirm": "確認", + "confirmDelete": "您確定要刪除嗎?", + "create": "建立", + "createSuccess": "建立成功", + "createUser": "建立使用者", + "createdAt": "註冊時間", + "delete": "刪除", + "deleteDescription": "刪除後無法恢復資料,請謹慎操作。", + "deleteSuccess": "刪除成功", + "edit": "編輯", + "editUser": "編輯使用者", + "email": "電子郵件", + "enable": "啟用", + "form": { + "balance": "餘額", + "balancePlaceholder": "餘額", + "cancel": "取消", + "confirm": "確認", + "invalidEmailFormat": "無效的電子郵件格式", + "inviteCode": "邀請碼", + "inviteCodePlaceholder": "請輸入邀請碼(留空則自動生成)", + "manager": "管理員", + "password": "密碼", + "passwordPlaceholder": "請輸入新密碼(可留空)", + "refererId": "推薦人 ID", + "refererIdPlaceholder": "請輸入推薦人 ID", + "userEmail": "用戶信箱", + "userEmailPlaceholder": "請輸入用戶信箱" + }, + "referer": "推薦人", + "updateSuccess": "更新成功", + "userList": "使用者列表", + "userName": "使用者信箱" +} diff --git a/apps/admin/package.json b/apps/admin/package.json index e9e218a..7a14286 100644 --- a/apps/admin/package.json +++ b/apps/admin/package.json @@ -29,6 +29,7 @@ "react": "^19.0.0", "react-dom": "^19.0.0", "react-turnstile": "^1.1.4", + "rtl-detect": "^1.1.2", "universal-cookie": "^7.2.2", "zustand": "^5.0.2" }, @@ -38,6 +39,7 @@ "@types/node": "^22.10.2", "@types/react": "^19.0.1", "@types/react-dom": "^19.0.2", + "@types/rtl-detect": "^1.0.3", "typescript": "^5.7.2" } } diff --git a/apps/admin/services/admin/index.ts b/apps/admin/services/admin/index.ts index 944988e..32cbdf0 100644 --- a/apps/admin/services/admin/index.ts +++ b/apps/admin/services/admin/index.ts @@ -1,5 +1,5 @@ // @ts-ignore - + // API 更新时间: // API 唯一标识: import * as announcement from './announcement'; diff --git a/apps/user/.i18nrc.json b/apps/user/.i18nrc.json index 6157119..415b614 100644 --- a/apps/user/.i18nrc.json +++ b/apps/user/.i18nrc.json @@ -9,7 +9,30 @@ "entryLocale": "en-US", "outputLocales": ["zh-CN"] }, - "modelName": "gpt-3.5-turbo", + "modelName": "gpt-4o", "output": "./locales", - "outputLocales": ["en-US", "zh-CN"] + "outputLocales": [ + "en-US", + "cs-CZ", + "de-DE", + "es-ES", + "es-MX", + "fi-FI", + "fr-FR", + "hi-IN", + "hu-HU", + "ja-JP", + "ko-KR", + "no-NO", + "pl-PL", + "pt-BR", + "ro-RO", + "ru-RU", + "th-TH", + "tr-TR", + "uk-UA", + "vi-VN", + "zh-CN", + "zh-TW" + ] } diff --git a/apps/user/app/layout.tsx b/apps/user/app/layout.tsx index 57992a2..b299cc3 100644 --- a/apps/user/app/layout.tsx +++ b/apps/user/app/layout.tsx @@ -12,6 +12,7 @@ import { cookies } from 'next/headers'; import { Metadata, Viewport } from 'next/types'; import NextTopLoader from 'nextjs-toploader'; import React from 'react'; +import rtlDetect from 'rtl-detect'; export async function generateMetadata(): Promise { noStore(); @@ -80,7 +81,7 @@ export default async function RootLayout({ children }: { children: React.ReactNo } return ( - + diff --git a/apps/user/config/constants.ts b/apps/user/config/constants.ts index 9b1d224..e229548 100644 --- a/apps/user/config/constants.ts +++ b/apps/user/config/constants.ts @@ -1,6 +1,29 @@ import { env } from 'next-runtime-env'; -export const locales = ['en-US', 'zh-CN']; +export const locales = [ + 'en-US', + 'cs-CZ', + 'de-DE', + 'es-ES', + 'es-MX', + 'fi-FI', + 'fr-FR', + 'hi-IN', + 'hu-HU', + 'ja-JP', + 'ko-KR', + 'no-NO', + 'pl-PL', + 'pt-BR', + 'ro-RO', + 'ru-RU', + 'th-TH', + 'tr-TR', + 'uk-UA', + 'vi-VN', + 'zh-CN', + 'zh-TW', +]; export const NEXT_PUBLIC_DEFAULT_LANGUAGE = env('NEXT_PUBLIC_DEFAULT_LANGUAGE') || locales[0]; diff --git a/apps/user/locales/cs-CZ/affiliate.json b/apps/user/locales/cs-CZ/affiliate.json new file mode 100644 index 0000000..52eb2f0 --- /dev/null +++ b/apps/user/locales/cs-CZ/affiliate.json @@ -0,0 +1,11 @@ +{ + "commissionInfo": "Statistická částka, provize za pozvání je automaticky převedena na zůstatek", + "commissionRate": "Provize", + "copyInviteLink": "Zkopírovat odkaz na pozvánku", + "copySuccess": "Kopírování úspěšné", + "inviteCode": "pozvánkový kód", + "inviteRecords": "Záznamy o pozvání", + "registrationTime": "Čas registrace", + "totalCommission": "Celková provize", + "userEmail": "Uživatelský e-mail" +} diff --git a/apps/user/locales/cs-CZ/auth.json b/apps/user/locales/cs-CZ/auth.json new file mode 100644 index 0000000..a5c3683 --- /dev/null +++ b/apps/user/locales/cs-CZ/auth.json @@ -0,0 +1,38 @@ +{ + "check": { + "checking": "Ověřování...", + "continue": "Pokračovat", + "description": "Zadejte svůj e-mail pro pokračování v přihlášení nebo registraci.", + "email": "Zadejte platnou e-mailovou adresu.", + "title": "Přihlášení/Registrace", + "whitelist": "Doména e-mailu není na povoleném seznamu." + }, + "login": { + "description": "Zadejte prosím své přihlašovací údaje pro přihlášení.", + "forgotPassword": "Zapomněli jste heslo?", + "success": "Přihlášení bylo úspěšné!", + "switchAccount": "Registrace/Přepnout účet", + "title": "Přihlášení" + }, + "orWithEmail": "nebo pomocí e-mailu", + "register": { + "description": "Vytvořte si nový účet, vyplňte své údaje pro registraci.", + "existingAccount": "Již máte účet?", + "get": "Získat", + "invite": "Pozvánkový kód", + "message": "#### Vážený uživateli,\n\nDěkujeme za váš zájem a podporu. V důsledku úpravy provozní strategie jsme uzavřeli registraci nových uživatelů. Během této doby nebude používání stávajících uživatelů nijak ovlivněno.\n\nSnažíme se vám poskytnout lepší služby a zážitky, a proto během uzavření registrace provedeme komplexní optimalizaci systému a aktualizaci funkcí. V budoucnu vás přivítáme s kvalitnějším obsahem a službami.\n\nSledujte naše webové stránky a sociální média pro nejnovější aktualizace a oznámení. Děkujeme za vaše pochopení a podporu.\n\nPokud máte jakékoli dotazy nebo potřebujete pomoc, neváhejte kontaktovat náš zákaznický servis.\n\n**Ještě jednou děkujeme za vaši podporu a pochopení.**", + "passwordMismatch": "Hesla se neshodují", + "success": "Registrace úspěšná, automaticky přihlášeni!", + "switchToLogin": "Přihlásit se/Obnovit e-mail", + "title": "Registrace" + }, + "reset": { + "description": "Zadejte svou e-mailovou adresu pro obnovení hesla.", + "existingAccount": "Již máte účet?", + "get": "Získat", + "success": "Obnovení hesla bylo úspěšné, automaticky přepnuto na přihlášení!", + "switchToLogin": "Přihlášení/Registrace", + "title": "Obnovení hesla" + }, + "tos": "Podmínky služby" +} diff --git a/apps/user/locales/cs-CZ/common.json b/apps/user/locales/cs-CZ/common.json new file mode 100644 index 0000000..32b203f --- /dev/null +++ b/apps/user/locales/cs-CZ/common.json @@ -0,0 +1,52 @@ +{ + "empty": [ + "Představte si, že je to tady plné úžasného obsahu! Zatím si to musíte jen představovat…", + "Tato oblast záhadně zmizela, pracujeme na jejím návratu!", + "Ach, nic se nestalo… můžete sem něco přidat sami!", + "Je to jako na koncertě, kde na pódiu nikdo není… co kdybyste šli vystoupit?", + "Našli jste prázdnou zemi zaslíbenou! Nechcete si postavit dům?", + "Zatím je tu prázdno, ale kreativita začíná právě tady!", + "Nic tu není… ale nebojte se, je to jen začátek!", + "Tady byl připraven velký překvapení, ale to se vytratilo!", + "Zatím tu nic není, jako když je skříňka s občerstvením prázdná.", + "Tato prázdná plocha čeká na svého hlavního hrdinu!" + ], + "list": { + "pageInfo": "Stránka {current} z {total}", + "rowsPerPage": "Řádků na stránku", + "selectedItems": "Vybráno {total} řádků" + }, + "login": "Přihlásit se/Registrovat", + "request": { + "10001": "Dotaz nebyl úspěšný, zkuste to prosím později znovu nebo zkontrolujte své podmínky.", + "10002": "Aktualizace nebyla úspěšná, zkuste to prosím později.", + "10003": "Vložení nelze momentálně dokončit, zkuste to prosím později.", + "10004": "Odstranění nebylo možné dokončit, zkuste to prosím později.", + "20001": "Informace o uživateli již existují, zkuste to prosím s jinými informacemi.", + "20002": "Uživatel nebyl nalezen, zkontrolujte prosím informace a zkuste to znovu.", + "20003": "Zadané heslo je nesprávné, zadejte ho prosím znovu.", + "20004": "Uživatel byl deaktivován, pokud máte dotazy, kontaktujte zákaznický servis.", + "20005": "Nedostatečný zůstatek, dobijte prosím a zkuste to znovu.", + "20006": "Funkce registrace není momentálně dostupná, zkuste to prosím později.", + "30001": "Tento uzel již existuje, nepřidávejte ho znovu.", + "30002": "Příslušný uzel nebyl nalezen, zkontrolujte prosím a zkuste to znovu.", + "30003": "Skupina již existuje, zkuste použít jiný název.", + "30004": "Skupina nebyla nalezena, zkontrolujte prosím informace a zkuste to znovu.", + "30005": "Ve skupině jsou stále nějaké položky, vyprázdněte ji prosím a zkuste to znovu.", + "400": "Parametry žádosti nejsou správné, zkontrolujte je a odešlete znovu.", + "40002": "Platný token nebyl nalezen, přihlaste se prosím a zkuste to znovu.", + "40003": "Aktuální token je neplatný, získejte nový a zkuste to znovu.", + "40004": "Token vypršel, přihlaste se prosím znovu.", + "40005": "Nemáte oprávnění k přístupu, pokud máte dotazy, kontaktujte správce.", + "401": "Žádáte příliš často, zkuste to prosím později.", + "500": "Server narazil na nějaké problémy, zkuste to prosím později.", + "50001": "Informace o kupónu nebyly nalezeny, zkontrolujte prosím a zkuste to znovu.", + "50002": "Tento kupón byl již použit, nelze ho použít znovu.", + "60001": "Předplatné vypršelo, obnovte ho prosím a použijte znovu.", + "60002": "Toto předplatné nelze momentálně použít, zkuste to prosím později.", + "70001": "Ověřovací kód je nesprávný, zadejte ho prosím znovu.", + "80001": "Úkol nebyl úspěšně přidán do fronty, zkuste to prosím později.", + "undefined": "Došlo k chybě systému, zkuste to prosím později." + }, + "unlimited": "neomezený" +} diff --git a/apps/user/locales/cs-CZ/dashboard.json b/apps/user/locales/cs-CZ/dashboard.json new file mode 100644 index 0000000..5d6af01 --- /dev/null +++ b/apps/user/locales/cs-CZ/dashboard.json @@ -0,0 +1,25 @@ +{ + "cancel": "zrušit", + "confirm": "Potvrdit", + "confirmResetSubscription": "Opravdu chcete obnovit adresu předplatného?", + "copy": "kopírovat", + "copyFailure": "Kopírování selhalo, prosím zkopírujte ručně", + "copySuccess": "Kopírování úspěšné", + "download": "stáhnout", + "expirationDays": "Doba platnosti/dny", + "import": "Importovat", + "latestAnnouncement": "Nejnovější oznámení", + "manualImportMessage": "Tato aplikace momentálně nepodporuje spuštění, prosím importujte ručně, adresa předplatného byla automaticky zkopírována", + "mySubscriptions": "Moje předplatné", + "nextResetDays": "Příští reset/den", + "prompt": "Výzva", + "purchaseSubscription": "Zakoupit předplatné", + "qrCode": "QR kód", + "resetSubscription": "Obnovit adresu předplatného", + "resetSuccess": "Obnovení bylo úspěšné", + "scanToSubscribe": "Naskenujte pro odběr", + "subscriptionUrl": "Odběrná adresa", + "totalTraffic": "Celkový provoz", + "unknown": "neznámý", + "used": "Použito" +} diff --git a/apps/user/locales/cs-CZ/document.json b/apps/user/locales/cs-CZ/document.json new file mode 100644 index 0000000..aabee6c --- /dev/null +++ b/apps/user/locales/cs-CZ/document.json @@ -0,0 +1,6 @@ +{ + "all": "Vše", + "document": "dokument", + "read": "číst", + "tutorial": "výuka" +} diff --git a/apps/user/locales/cs-CZ/index.json b/apps/user/locales/cs-CZ/index.json new file mode 100644 index 0000000..5da85d2 --- /dev/null +++ b/apps/user/locales/cs-CZ/index.json @@ -0,0 +1,14 @@ +{ + "global_map_description": "Prozkoumejte bezproblémové globální připojení. Vyberte si síťové služby, které vyhovují vašim potřebám, a zůstaňte připojeni kdykoli a kdekoli.", + "global_map_itle": "Globální propojení, snadno a bez starostí", + "locations": "Oblasti", + "per_month": "měsíčně", + "product_showcase_description": "Nechte nás vybrat ten nejvhodnější balíček pro vás a s radostí ho prozkoumejte.", + "product_showcase_title": "Vyberte si svůj balíček", + "servers": "servery", + "started": "Začít používat", + "subscribe": "Předplatit", + "tos": "Smlouva o poskytování služeb", + "users": "uživatelé", + "welcome": "Vítejte v" +} diff --git a/apps/user/locales/cs-CZ/language.json b/apps/user/locales/cs-CZ/language.json new file mode 100644 index 0000000..182108b --- /dev/null +++ b/apps/user/locales/cs-CZ/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "čeština", + "de-DE": "němčina", + "en-US": "angličtina", + "es-ES": "španělština", + "es-MX": "španělština (Mexiko)", + "fi-FI": "finština", + "fr-FR": "Francouzština", + "hi-IN": "hindština", + "hu-HU": "maďarština", + "ja-JP": "Japonština", + "ko-KR": "Korejština", + "no-NO": "norština", + "pl-PL": "polština", + "pt-BR": "portugalština (Brazílie)", + "ro-RO": "Rumunština", + "ru-RU": "ruština", + "th-TH": "thajština", + "tr-TR": "turečtina", + "uk-UA": "Ukrajinština", + "vi-VN": "Vietnamština", + "zh-CN": "čeština (CS)", + "zh-TW": "čínština (tradiční)" +} diff --git a/apps/user/locales/cs-CZ/layout.json b/apps/user/locales/cs-CZ/layout.json new file mode 100644 index 0000000..423c922 --- /dev/null +++ b/apps/user/locales/cs-CZ/layout.json @@ -0,0 +1,7 @@ +{ + "accountBalance": "Zůstatek na účtu", + "copyInviteLink": "Zkopírovat odkaz na pozvánku", + "copySuccess": "Odkaz na pozvánku byl úspěšně zkopírován", + "inviteCode": "pozvánkový kód", + "recharge": "Dobít" +} diff --git a/apps/user/locales/cs-CZ/menu.json b/apps/user/locales/cs-CZ/menu.json new file mode 100644 index 0000000..da6cb21 --- /dev/null +++ b/apps/user/locales/cs-CZ/menu.json @@ -0,0 +1,17 @@ +{ + "affiliate": "Moje pozvání", + "announcement": "Seznam oznámení", + "dashboard": "Dashboard", + "document": "Použití dokumentu", + "finance": "Finance", + "help": "Pomoc", + "logout": "Odhlásit se", + "order": "Seznam objednávek", + "payment": "Podrobnosti objednávky", + "personal": "Osobní", + "profile": "Profil", + "server": "server", + "subscribe": "Zakoupit předplatné", + "ticket": "Můj tiket", + "wallet": "Finanční centrum" +} diff --git a/apps/user/locales/cs-CZ/order.json b/apps/user/locales/cs-CZ/order.json new file mode 100644 index 0000000..fe61449 --- /dev/null +++ b/apps/user/locales/cs-CZ/order.json @@ -0,0 +1,61 @@ +{ + "balanceRecharge": "Doplnění zůstatku", + "buyNow": "Koupit nyní", + "buySubscription": "Koupit předplatné", + "cancel": "Zrušit", + "createdAt": "Datum vytvoření", + "description": "Jedním kliknutím dobijete, snadno a rychle", + "detail": "Detail", + "enterAmount": "Zadejte částku k dobití", + "enterCoupon": "Zadejte slevový kód", + "goToPayment": "Přejít k platbě", + "methods": { + "alipay_f2f": "Alipay (tváří v tvář)", + "balance": "Zůstatek", + "epay": "Epay", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "month": "měsíc", + "months": "měsíce", + "name": "Název", + "orderClosed": "Objednávka byla uzavřena", + "orderList": "Seznam objednávek", + "orderNo": "Číslo objednávky", + "orderNumber": "Číslo objednávky", + "payment": "Přejít k platbě", + "paymentAmount": "Částka platby", + "paymentMethod": "Platební metoda", + "paymentSuccess": "Platba úspěšná", + "productList": "Seznam produktů", + "purchaseDuration": "Doba nákupu", + "recharge": "dobít", + "rechargeAmount": "Částka dobití", + "rechargeNow": "Dobít nyní", + "renew": "Obnovit", + "renewSubscription": "Obnovit předplatné", + "resetPrice": "Obnovit cenu", + "resetTraffic": "Obnovit přenos dat", + "resetTrafficDescription": "Obnoví se pouze měsíční přenos dat", + "resetTrafficTitle": "Obnovit přenos dat", + "scanToPay": "Prosím, naskenujte kód pro platbu", + "status": { + "0": "Stav", + "1": "Čeká na platbu", + "2": "Zaplaceno", + "3": "Zrušeno", + "4": "Uzavřeno", + "5": "Dokončeno" + }, + "subscribeNow": "Předplatit nyní", + "timeExpired": "Čas pro platbu vypršel", + "type": { + "0": "Typ", + "1": "Nový nákup", + "2": "Obnovení", + "3": "Obnovení dat", + "4": "Dobití" + }, + "viewDocument": "Zobrazit dokument", + "waitingForPayment": "Čekání na platbu" +} diff --git a/apps/user/locales/cs-CZ/profile.json b/apps/user/locales/cs-CZ/profile.json new file mode 100644 index 0000000..07bd965 --- /dev/null +++ b/apps/user/locales/cs-CZ/profile.json @@ -0,0 +1,28 @@ +{ + "accountSettings": { + "accountSettings": "Nastavení účtu", + "loginPassword": "Přihlašovací heslo", + "newPassword": "Nové heslo", + "passwordMismatch": "Hesla se neshodují", + "repeatNewPassword": "Zopakujte nové heslo", + "updatePassword": "Aktualizovat heslo", + "updateSuccess": "Aktualizace úspěšná" + }, + "notify": { + "bind": "Připojit", + "emailNotification": "E-mailové oznámení", + "notificationSettings": "Nastavení oznámení", + "telegramId": "Telegram ID", + "telegramIdPlaceholder": "Zadejte Telegram ID", + "telegramNotification": "Telegram oznámení", + "updateSuccess": "Aktualizace byla úspěšná" + }, + "notifyEvent": { + "balanceChange": "Změna zůstatku", + "finance": "Finance", + "login": "Přihlášení", + "notificationEvents": "Upozornění na události", + "subscribe": "Předplatit", + "updateSuccess": "Aktualizace úspěšná" + } +} diff --git a/apps/user/locales/cs-CZ/subscribe.json b/apps/user/locales/cs-CZ/subscribe.json new file mode 100644 index 0000000..6d43d63 --- /dev/null +++ b/apps/user/locales/cs-CZ/subscribe.json @@ -0,0 +1,31 @@ +{ + "all": "Vše", + "billing": { + "billingTitle": "Faktura za zboží", + "couponDiscount": "Sleva z kupónu", + "duration": "Doba trvání balíčku", + "fee": "Poplatek", + "months": "měsíce", + "price": "Cena", + "productDiscount": "Sleva na zboží", + "total": "Celková cena" + }, + "buy": "Koupit", + "category": "Kategorie", + "detail": { + "availableTraffic": "Dostupný provoz", + "connectedDevices": "Počet současně připojených IP", + "connectionSpeed": "Rychlost připojení", + "productDetail": "Detaily produktu" + }, + "methods": { + "alipay_f2f": "Alipay (tváří v tvář)", + "balance": "Zůstatek", + "epay": "Epay", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "perMonth": "měsíc", + "productDescription": "Popis produktu", + "products": "Produkty" +} diff --git a/apps/user/locales/cs-CZ/ticket.json b/apps/user/locales/cs-CZ/ticket.json new file mode 100644 index 0000000..6644c75 --- /dev/null +++ b/apps/user/locales/cs-CZ/ticket.json @@ -0,0 +1,26 @@ +{ + "cancel": "Zrušit", + "check": "Zkontrolovat", + "close": "Zavřít", + "closeSuccess": "Úspěšně uzavřeno", + "closeWarning": "Po uzavření tiketu nebude možné dále odpovídat.", + "confirm": "Potvrdit", + "confirmClose": "Opravdu chcete uzavřít tiket?", + "createSuccess": "Vytvoření úspěšné", + "createTicket": "Vytvořit tiket", + "createTicketDescription": "Na váš tiket odpovíme do 24 hodin.", + "description": "Popis", + "inputPlaceholder": "Zadejte svou zprávu", + "reply": "odpověď", + "status": { + "0": "Stav", + "1": "Čeká na zpracování", + "2": "Zpracovává se", + "3": "Vyřešeno", + "4": "Uzavřeno" + }, + "submit": "Odeslat", + "ticketList": "Seznam tiketů", + "title": "Titul", + "updatedAt": "Aktualizováno" +} diff --git a/apps/user/locales/cs-CZ/wallet.json b/apps/user/locales/cs-CZ/wallet.json new file mode 100644 index 0000000..b06fb88 --- /dev/null +++ b/apps/user/locales/cs-CZ/wallet.json @@ -0,0 +1,15 @@ +{ + "amount": "Částka", + "balance": "zůstatek", + "createdAt": "čas", + "title": "Zůstatek na účtu", + "type": { + "0": "Typ", + "1": "Dobití", + "2": "Výběr", + "3": "Koupit", + "4": "Vrácení peněz", + "5": "Odměna", + "6": "Provize" + } +} diff --git a/apps/user/locales/de-DE/affiliate.json b/apps/user/locales/de-DE/affiliate.json new file mode 100644 index 0000000..8255489 --- /dev/null +++ b/apps/user/locales/de-DE/affiliate.json @@ -0,0 +1,11 @@ +{ + "commissionInfo": "Betrag berechnen, Einladungsprovision wird automatisch dem Guthaben gutgeschrieben", + "commissionRate": "Provisionssatz", + "copyInviteLink": "Einladungslink kopieren", + "copySuccess": "Kopieren erfolgreich", + "inviteCode": "Einladungscode", + "inviteRecords": "Einladungsprotokolle", + "registrationTime": "Registrierungszeit", + "totalCommission": "Gesamtprovision", + "userEmail": "Benutzer-E-Mail" +} diff --git a/apps/user/locales/de-DE/auth.json b/apps/user/locales/de-DE/auth.json new file mode 100644 index 0000000..f49aa1c --- /dev/null +++ b/apps/user/locales/de-DE/auth.json @@ -0,0 +1,38 @@ +{ + "check": { + "checking": "Überprüfung läuft...", + "continue": "Fortfahren", + "description": "Bitte geben Sie Ihre E-Mail-Adresse ein, um sich anzumelden oder zu registrieren.", + "email": "Bitte geben Sie eine gültige E-Mail-Adresse ein.", + "title": "Anmelden/Registrieren", + "whitelist": "Die E-Mail-Domain befindet sich nicht auf der zugelassenen Whitelist." + }, + "login": { + "description": "Bitte geben Sie Ihre Kontoinformationen ein, um sich anzumelden.", + "forgotPassword": "Passwort vergessen?", + "success": "Erfolgreich eingeloggt!", + "switchAccount": "Registrieren/Konto wechseln", + "title": "Anmeldung" + }, + "orWithEmail": "oder mit E-Mail", + "register": { + "description": "Erstellen Sie ein neues Konto, indem Sie Ihre Informationen ausfüllen, um sich zu registrieren.", + "existingAccount": "Bereits ein Konto?", + "get": "Erhalten", + "invite": "Einladungscode", + "message": "#### Sehr geehrter Nutzer,\n\nVielen Dank für Ihr Interesse und Ihre Unterstützung. Aufgrund einer Anpassung unserer Betriebsstrategie haben wir die Registrierung für neue Nutzer vorübergehend geschlossen. Während dieser Zeit wird die Nutzung für bestehende Nutzer nicht beeinträchtigt.\n\nWir sind bestrebt, Ihnen einen besseren Service und ein besseres Erlebnis zu bieten, und werden daher während der Schließung der Registrierung umfassende Systemoptimierungen und Funktionsupgrades durchführen. In Zukunft werden wir Sie mit noch hochwertigeren Inhalten und Dienstleistungen willkommen heißen.\n\nBitte folgen Sie unserer Website und unseren Social-Media-Plattformen, um die neuesten Updates und Benachrichtigungen zu erhalten. Vielen Dank für Ihr Verständnis und Ihre Unterstützung.\n\nBei Fragen oder wenn Sie Hilfe benötigen, wenden Sie sich bitte jederzeit an unser Kundenserviceteam.\n\n**Nochmals vielen Dank für Ihre Unterstützung und Ihr Verständnis.**", + "passwordMismatch": "Die eingegebenen Passwörter stimmen nicht überein", + "success": "Registrierung erfolgreich, Sie sind automatisch eingeloggt!", + "switchToLogin": "Anmelden/E-Mail zurücksetzen", + "title": "Registrieren" + }, + "reset": { + "description": "Bitte geben Sie Ihre E-Mail-Adresse ein, um das Passwort zurückzusetzen.", + "existingAccount": "Bereits ein Konto?", + "get": "Erhalten", + "success": "Passwort erfolgreich zurückgesetzt, automatisch zum Login gewechselt!", + "switchToLogin": "Anmelden/Registrieren", + "title": "Passwort zurücksetzen" + }, + "tos": "Nutzungsbedingungen" +} diff --git a/apps/user/locales/de-DE/common.json b/apps/user/locales/de-DE/common.json new file mode 100644 index 0000000..bf4647a --- /dev/null +++ b/apps/user/locales/de-DE/common.json @@ -0,0 +1,52 @@ +{ + "empty": [ + "Stellen Sie sich vor, dieser Bereich wäre voller spannender Inhalte! Im Moment müssen Sie sich das noch vorstellen…", + "Dieser Bereich ist auf mysteriöse Weise verschwunden, wir versuchen ihn zurückzuholen!", + "Oh je, nichts ist passiert… vielleicht möchten Sie etwas hinzufügen!", + "Es ist, als ob Sie auf einem Konzert sind und die Bühne leer ist… wollen Sie auftreten?", + "Sie haben ein leeres Paradies gefunden! Möchten Sie ein Haus bauen?", + "Hier ist momentan nichts, aber Kreativität beginnt genau hier!", + "Nichts ist da… aber keine Sorge, das ist nur der Anfang!", + "Hier war eine große Überraschung geplant, aber sie ist entwischt!", + "Im Moment ist nichts da, wie ein leerer Snackschrank.", + "Diese leere Fläche wartet darauf, dass der Hauptdarsteller auftritt!" + ], + "list": { + "pageInfo": "Seite {current} von {total}", + "rowsPerPage": "Zeilen pro Seite", + "selectedItems": "{total} Zeilen ausgewählt" + }, + "login": "Anmelden/Registrieren", + "request": { + "10001": "Die Abfrage war vorübergehend nicht erfolgreich, bitte versuchen Sie es später erneut oder überprüfen Sie Ihre Bedingungen.", + "10002": "Die Aktualisierung war nicht erfolgreich, bitte versuchen Sie es später erneut.", + "10003": "Der Einfügevorgang kann derzeit nicht abgeschlossen werden, bitte versuchen Sie es später erneut.", + "10004": "Der Löschvorgang konnte nicht abgeschlossen werden, bitte versuchen Sie es später erneut.", + "20001": "Diese Benutzerinformationen existieren bereits, bitte ändern Sie die Informationen und versuchen Sie es erneut.", + "20002": "Der Benutzer wurde nicht gefunden, bitte überprüfen Sie die Informationen und versuchen Sie es erneut.", + "20003": "Das eingegebene Passwort ist nicht korrekt, bitte erneut eingeben.", + "20004": "Dieser Benutzer wurde deaktiviert, bei Fragen wenden Sie sich bitte an den Kundenservice.", + "20005": "Unzureichendes Guthaben, bitte aufladen und erneut versuchen.", + "20006": "Die Registrierungsfunktion ist derzeit nicht verfügbar, bitte versuchen Sie es später erneut.", + "30001": "Dieser Knoten existiert bereits, bitte nicht erneut hinzufügen.", + "30002": "Kein relevanter Knoten gefunden, bitte überprüfen und erneut versuchen.", + "30003": "Die Gruppe existiert bereits, bitte versuchen Sie einen anderen Namen zu verwenden.", + "30004": "Die Gruppe wurde nicht gefunden, bitte überprüfen Sie die Informationen und versuchen Sie es erneut.", + "30005": "Die Gruppe enthält noch Inhalte, bitte leeren Sie sie und versuchen Sie es erneut.", + "400": "Die Anforderungsparameter sind nicht korrekt, bitte überprüfen und erneut einreichen.", + "40002": "Kein gültiges Token gefunden, bitte zuerst einloggen und erneut versuchen.", + "40003": "Das aktuelle Token ist ungültig, bitte erneut abrufen und versuchen.", + "40004": "Das Token ist abgelaufen, bitte erneut einloggen.", + "40005": "Sie haben derzeit keine Zugriffsberechtigung, bei Fragen wenden Sie sich bitte an den Administrator.", + "401": "Anfrage zu häufig, bitte versuchen Sie es später erneut.", + "500": "Der Server hat ein Problem festgestellt, bitte versuchen Sie es später erneut.", + "50001": "Die entsprechenden Gutscheininformationen konnten nicht gefunden werden, bitte überprüfen und erneut versuchen.", + "50002": "Dieser Gutschein wurde bereits verwendet und kann nicht erneut verwendet werden.", + "60001": "Das Abonnement ist abgelaufen, bitte erneuern und dann verwenden.", + "60002": "Das Abonnement kann derzeit nicht verwendet werden, bitte versuchen Sie es später erneut.", + "70001": "Der Bestätigungscode ist falsch, bitte erneut eingeben.", + "80001": "Die Aufgabe konnte nicht erfolgreich in die Warteschlange aufgenommen werden, bitte versuchen Sie es später erneut.", + "undefined": "Es ist ein Systemfehler aufgetreten, bitte versuchen Sie es später erneut." + }, + "unlimited": "Unbegrenzt" +} diff --git a/apps/user/locales/de-DE/dashboard.json b/apps/user/locales/de-DE/dashboard.json new file mode 100644 index 0000000..84f87c3 --- /dev/null +++ b/apps/user/locales/de-DE/dashboard.json @@ -0,0 +1,25 @@ +{ + "cancel": "Abbrechen", + "confirm": "Bestätigen", + "confirmResetSubscription": "Möchten Sie die Abonnementadresse wirklich zurücksetzen?", + "copy": "Kopieren", + "copyFailure": "Kopieren fehlgeschlagen, bitte manuell kopieren", + "copySuccess": "Kopieren erfolgreich", + "download": "Herunterladen", + "expirationDays": "Ablaufzeit/Tage", + "import": "Importieren", + "latestAnnouncement": "Neueste Ankündigung", + "manualImportMessage": "Diese App unterstützt derzeit keine Aktivierung. Bitte manuell importieren, die Abonnementadresse wurde automatisch kopiert.", + "mySubscriptions": "Meine Abonnements", + "nextResetDays": "Nächster Reset/Tage", + "prompt": "Aufforderung", + "purchaseSubscription": "Abonnement kaufen", + "qrCode": "QR-Code", + "resetSubscription": "Abonnement-Adresse zurücksetzen", + "resetSuccess": "Zurücksetzen erfolgreich", + "scanToSubscribe": "Scannen zum Abonnieren", + "subscriptionUrl": "Abonnement-Adresse", + "totalTraffic": "Gesamtverkehr", + "unknown": "Unbekannt", + "used": "Verwendet" +} diff --git a/apps/user/locales/de-DE/document.json b/apps/user/locales/de-DE/document.json new file mode 100644 index 0000000..2e866d4 --- /dev/null +++ b/apps/user/locales/de-DE/document.json @@ -0,0 +1,6 @@ +{ + "all": "Alle", + "document": "Dokument", + "read": "Lesen", + "tutorial": "Anleitung" +} diff --git a/apps/user/locales/de-DE/index.json b/apps/user/locales/de-DE/index.json new file mode 100644 index 0000000..0e3953f --- /dev/null +++ b/apps/user/locales/de-DE/index.json @@ -0,0 +1,14 @@ +{ + "global_map_description": "Entdecken Sie nahtlose globale Verbindungen. Wählen Sie den Netzwerkdienst, der Ihren Bedürfnissen entspricht, und bleiben Sie jederzeit und überall verbunden.", + "global_map_itle": "Weltweit verbunden, sorgenfrei", + "locations": "Standorte", + "per_month": "Pro Monat", + "product_showcase_description": "Lassen Sie uns das für Sie am besten geeignete Paket auswählen und es mit Freude erkunden.", + "product_showcase_title": "Wählen Sie Ihr Paket", + "servers": "Server", + "started": "Loslegen", + "subscribe": "Abonnieren", + "tos": "Nutzungsbedingungen", + "users": "Benutzer", + "welcome": "Willkommen bei" +} diff --git a/apps/user/locales/de-DE/language.json b/apps/user/locales/de-DE/language.json new file mode 100644 index 0000000..a6325d7 --- /dev/null +++ b/apps/user/locales/de-DE/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "Tschechisch", + "de-DE": "Deutsch", + "en-US": "Englisch", + "es-ES": "Spanisch", + "es-MX": "Spanisch (Mexiko)", + "fi-FI": "Finnisch", + "fr-FR": "Französisch", + "hi-IN": "Hindi", + "hu-HU": "Ungarisch", + "ja-JP": "Japanisch", + "ko-KR": "Koreanisch", + "no-NO": "Norwegisch", + "pl-PL": "Polnisch", + "pt-BR": "Portugiesisch (Brasilien)", + "ro-RO": "Rumänisch", + "ru-RU": "Russisch", + "th-TH": "Thailändisch", + "tr-TR": "Türkisch", + "uk-UA": "Ukrainisch", + "vi-VN": "Vietnamesisch", + "zh-CN": "Chinesisch (vereinfacht)", + "zh-TW": "Chinesisch (Traditionell)" +} diff --git a/apps/user/locales/de-DE/layout.json b/apps/user/locales/de-DE/layout.json new file mode 100644 index 0000000..ab62fb1 --- /dev/null +++ b/apps/user/locales/de-DE/layout.json @@ -0,0 +1,7 @@ +{ + "accountBalance": "Kontostand", + "copyInviteLink": "Einladungslink kopieren", + "copySuccess": "Einladungslink erfolgreich kopiert", + "inviteCode": "Einladungscode", + "recharge": "Aufladen" +} diff --git a/apps/user/locales/de-DE/menu.json b/apps/user/locales/de-DE/menu.json new file mode 100644 index 0000000..e31873d --- /dev/null +++ b/apps/user/locales/de-DE/menu.json @@ -0,0 +1,17 @@ +{ + "affiliate": "Meine Einladung", + "announcement": "Ankündigungsliste", + "dashboard": "Startseite", + "document": "Dokumentation verwenden", + "finance": "Finanzen", + "help": "Hilfe", + "logout": "Abmelden", + "order": "Bestellliste", + "payment": "Bestelldetails", + "personal": "Persönlich", + "profile": "Profil", + "server": "Server", + "subscribe": "Abonnement kaufen", + "ticket": "Mein Ticket", + "wallet": "Finanzzentrum" +} diff --git a/apps/user/locales/de-DE/order.json b/apps/user/locales/de-DE/order.json new file mode 100644 index 0000000..937ad46 --- /dev/null +++ b/apps/user/locales/de-DE/order.json @@ -0,0 +1,61 @@ +{ + "balanceRecharge": "Guthaben aufladen", + "buyNow": "Jetzt kaufen", + "buySubscription": "Abonnement kaufen", + "cancel": "Abbrechen", + "createdAt": "Erstellungszeitpunkt", + "description": "Mit einem Klick aufladen, ganz einfach erledigt", + "detail": "Einzelheiten", + "enterAmount": "Bitte geben Sie den Aufladebetrag ein", + "enterCoupon": "Bitte geben Sie den Rabattcode ein", + "goToPayment": "Zur Zahlung gehen", + "methods": { + "alipay_f2f": "Alipay (Face-to-Face)", + "balance": "Guthaben", + "epay": "E-Pay", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "month": "Monat", + "months": "Monate", + "name": "Name", + "orderClosed": "Bestellung wurde geschlossen", + "orderList": "Bestellliste", + "orderNo": "Bestellnummer", + "orderNumber": "Bestellnummer", + "payment": "Zur Kasse", + "paymentAmount": "Zahlungsbetrag", + "paymentMethod": "Zahlungsmethode", + "paymentSuccess": "Zahlung erfolgreich", + "productList": "Produktliste", + "purchaseDuration": "Kaufdauer", + "recharge": "Aufladen", + "rechargeAmount": "Aufladebetrag", + "rechargeNow": "Jetzt aufladen", + "renew": "Erneuern", + "renewSubscription": "Abonnement verlängern", + "resetPrice": "Preis zurücksetzen", + "resetTraffic": "Datenverkehr zurücksetzen", + "resetTrafficDescription": "Setzt nur den Datenverkehr des aktuellen Monats zurück", + "resetTrafficTitle": "Datenverkehr zurücksetzen", + "scanToPay": "Bitte scannen Sie zum Bezahlen", + "status": { + "0": "Status", + "1": "Ausstehende Zahlung", + "2": "Bezahlt", + "3": "Storniert", + "4": "Geschlossen", + "5": "Abgeschlossen" + }, + "subscribeNow": "Jetzt abonnieren", + "timeExpired": "Die Zahlungsfrist ist abgelaufen", + "type": { + "0": "Typ", + "1": "Neukauf", + "2": "Verlängerung", + "3": "Datenvolumen zurücksetzen", + "4": "Aufladen" + }, + "viewDocument": "Dokument anzeigen", + "waitingForPayment": "Warten auf Zahlung" +} diff --git a/apps/user/locales/de-DE/profile.json b/apps/user/locales/de-DE/profile.json new file mode 100644 index 0000000..64d9c2c --- /dev/null +++ b/apps/user/locales/de-DE/profile.json @@ -0,0 +1,28 @@ +{ + "accountSettings": { + "accountSettings": "Kontoeinstellungen", + "loginPassword": "Anmeldepasswort", + "newPassword": "Neues Passwort", + "passwordMismatch": "Die Passwörter stimmen nicht überein", + "repeatNewPassword": "Neues Passwort wiederholen", + "updatePassword": "Passwort aktualisieren", + "updateSuccess": "Erfolgreich aktualisiert" + }, + "notify": { + "bind": "Binden", + "emailNotification": "E-Mail-Benachrichtigung", + "notificationSettings": "Benachrichtigungseinstellungen", + "telegramId": "Telegram-ID", + "telegramIdPlaceholder": "Telegram-ID eingeben", + "telegramNotification": "Telegram-Benachrichtigung", + "updateSuccess": "Erfolgreich aktualisiert" + }, + "notifyEvent": { + "balanceChange": "Kontostandsänderung", + "finance": "Finanzen", + "login": "Anmeldung", + "notificationEvents": "Benachrichtigungsereignisse", + "subscribe": "Abonnieren", + "updateSuccess": "Erfolgreich aktualisiert" + } +} diff --git a/apps/user/locales/de-DE/subscribe.json b/apps/user/locales/de-DE/subscribe.json new file mode 100644 index 0000000..f11776e --- /dev/null +++ b/apps/user/locales/de-DE/subscribe.json @@ -0,0 +1,31 @@ +{ + "all": "Alle", + "billing": { + "billingTitle": "Produktrechnung", + "couponDiscount": "Rabattcode-Rabatt", + "duration": "Paketdauer", + "fee": "Bearbeitungsgebühr", + "months": "Monate", + "price": "Preis", + "productDiscount": "Produktrabatt", + "total": "Gesamtpreis" + }, + "buy": "Kaufen", + "category": "Kategorie", + "detail": { + "availableTraffic": "Verfügbares Datenvolumen", + "connectedDevices": "Gleichzeitig verbundene IP-Anzahl", + "connectionSpeed": "Verbindungsgeschwindigkeit", + "productDetail": "Produktdetails" + }, + "methods": { + "alipay_f2f": "Alipay (Face-to-Face)", + "balance": "Guthaben", + "epay": "E-Pay", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "perMonth": "Monat", + "productDescription": "Produktbeschreibung", + "products": "Produkte" +} diff --git a/apps/user/locales/de-DE/ticket.json b/apps/user/locales/de-DE/ticket.json new file mode 100644 index 0000000..7316500 --- /dev/null +++ b/apps/user/locales/de-DE/ticket.json @@ -0,0 +1,26 @@ +{ + "cancel": "Abbrechen", + "check": "Prüfen", + "close": "Schließen", + "closeSuccess": "Ticket erfolgreich geschlossen", + "closeWarning": "Nach dem Schließen des Tickets können Sie nicht mehr antworten.", + "confirm": "Bestätigen", + "confirmClose": "Möchten Sie das Ticket wirklich schließen?", + "createSuccess": "Erstellung erfolgreich", + "createTicket": "Ticket erstellen", + "createTicketDescription": "Tickets werden innerhalb von 24 Stunden beantwortet.", + "description": "Beschreibung", + "inputPlaceholder": "Geben Sie Ihre Nachricht ein", + "reply": "Antwort", + "status": { + "0": "Status", + "1": "Ausstehend", + "2": "In Bearbeitung", + "3": "Gelöst", + "4": "Geschlossen" + }, + "submit": "Einreichen", + "ticketList": "Ticketliste", + "title": "Titel", + "updatedAt": "Aktualisierungszeitpunkt" +} diff --git a/apps/user/locales/de-DE/wallet.json b/apps/user/locales/de-DE/wallet.json new file mode 100644 index 0000000..f88c0a6 --- /dev/null +++ b/apps/user/locales/de-DE/wallet.json @@ -0,0 +1,15 @@ +{ + "amount": "Betrag", + "balance": "Kontostand", + "createdAt": "Zeit", + "title": "Kontostand", + "type": { + "0": "Typ", + "1": "Aufladen", + "2": "Abheben", + "3": "Kaufen", + "4": "Rückerstattung", + "5": "Belohnung", + "6": "Provision" + } +} diff --git a/apps/user/locales/es-ES/affiliate.json b/apps/user/locales/es-ES/affiliate.json new file mode 100644 index 0000000..e3bc236 --- /dev/null +++ b/apps/user/locales/es-ES/affiliate.json @@ -0,0 +1,11 @@ +{ + "commissionInfo": "Cantidad total, la comisión por invitación se transfiere automáticamente al saldo", + "commissionRate": "Tasa de comisión", + "copyInviteLink": "Copiar enlace de invitación", + "copySuccess": "Copia exitosa", + "inviteCode": "Código de invitación", + "inviteRecords": "Registros de invitación", + "registrationTime": "Hora de registro", + "totalCommission": "Comisión total", + "userEmail": "Correo electrónico del usuario" +} diff --git a/apps/user/locales/es-ES/auth.json b/apps/user/locales/es-ES/auth.json new file mode 100644 index 0000000..f2f2706 --- /dev/null +++ b/apps/user/locales/es-ES/auth.json @@ -0,0 +1,38 @@ +{ + "check": { + "checking": "Verificando...", + "continue": "Continuar", + "description": "Por favor, introduzca su correo electrónico para continuar con el inicio de sesión o el registro.", + "email": "Por favor, introduzca una dirección de correo electrónico válida.", + "title": "Iniciar sesión/Registrarse", + "whitelist": "El dominio del correo electrónico no está en la lista blanca permitida." + }, + "login": { + "description": "Por favor, introduzca su información de cuenta para iniciar sesión.", + "forgotPassword": "¿Olvidó su contraseña?", + "success": "¡Inicio de sesión exitoso!", + "switchAccount": "Registrar/Cambiar cuenta", + "title": "Iniciar sesión" + }, + "orWithEmail": "o usar correo electrónico", + "register": { + "description": "Crea una nueva cuenta, completa tu información para registrarte.", + "existingAccount": "¿Ya tienes una cuenta?", + "get": "Obtener", + "invite": "Código de invitación", + "message": "#### ¡Estimado usuario!\n\nGracias por su interés y apoyo. Debido a un ajuste en la estrategia de operación del sitio, hemos cerrado la función de registro para nuevos usuarios. Durante este período, el uso por parte de los usuarios existentes no se verá afectado.\n\nNos comprometemos a ofrecerle un mejor servicio y experiencia, por lo que realizaremos una optimización completa del sistema y una actualización de funciones durante el cierre del registro. En el futuro, le daremos la bienvenida con contenido y servicios de mayor calidad.\n\nPor favor, siga nuestro sitio web y plataformas de redes sociales para obtener las últimas actualizaciones y notificaciones. Gracias por su comprensión y apoyo.\n\nSi tiene alguna pregunta o necesita ayuda, no dude en ponerse en contacto con nuestro equipo de atención al cliente.\n\n**Nuevamente, gracias por su apoyo y comprensión.**", + "passwordMismatch": "Las contraseñas no coinciden", + "success": "¡Registro exitoso, has iniciado sesión automáticamente!", + "switchToLogin": "Iniciar sesión/restablecer correo electrónico", + "title": "Registro" + }, + "reset": { + "description": "Por favor, introduzca su dirección de correo electrónico para restablecer la contraseña.", + "existingAccount": "¿Ya tienes una cuenta?", + "get": "Obtener", + "success": "¡Contraseña restablecida con éxito, se ha cambiado automáticamente a iniciar sesión!", + "switchToLogin": "Iniciar sesión/Registrarse", + "title": "Restablecer contraseña" + }, + "tos": "Términos del servicio" +} diff --git a/apps/user/locales/es-ES/common.json b/apps/user/locales/es-ES/common.json new file mode 100644 index 0000000..d1c8dc4 --- /dev/null +++ b/apps/user/locales/es-ES/common.json @@ -0,0 +1,52 @@ +{ + "empty": [ + "¡Imagina que aquí está lleno de contenido emocionante! Por ahora, solo puedes imaginarlo…", + "Esta área ha desaparecido misteriosamente, ¡estamos invocándola de vuelta!", + "Vaya, no ha pasado nada… ¡puedes añadir algo tú mismo!", + "Es como descubrir que en el concierto no hay nadie en el escenario… ¿por qué no subes a actuar?", + "¡Has encontrado una tierra de oportunidades vacía! ¿Te gustaría construir una casa?", + "Aquí no hay nada por ahora, pero la creatividad comienza aquí.", + "No hay nada… pero no te preocupes, ¡esto es solo el comienzo!", + "Aquí había una gran sorpresa preparada, ¡pero se ha escapado!", + "Por ahora no hay nada, como si la despensa de snacks estuviera vacía.", + "¡Este espacio vacío está esperando a su protagonista!" + ], + "list": { + "pageInfo": "Página {current} de {total}", + "rowsPerPage": "Filas por página", + "selectedItems": "{total} filas seleccionadas" + }, + "login": "Iniciar sesión/Registrarse", + "request": { + "10001": "La consulta no fue exitosa, por favor intente de nuevo más tarde o revise sus condiciones.", + "10002": "La operación de actualización no fue exitosa, por favor intente de nuevo más tarde.", + "10003": "No se puede completar la operación de inserción por el momento, por favor intente de nuevo más tarde.", + "10004": "La operación de eliminación no se pudo completar, por favor intente de nuevo más tarde.", + "20001": "La información del usuario ya existe, por favor cambie la información e intente de nuevo.", + "20002": "No se encontró al usuario, por favor verifique la información e intente de nuevo.", + "20003": "La contraseña que ingresó es incorrecta, por favor ingrésela de nuevo.", + "20004": "El usuario ha sido deshabilitado, si tiene alguna pregunta, por favor contacte al servicio al cliente.", + "20005": "Saldo insuficiente, por favor recargue e intente de nuevo.", + "20006": "La función de registro no está disponible por el momento, por favor intente de nuevo más tarde.", + "30001": "El nodo ya existe, por favor no lo agregue de nuevo.", + "30002": "No se encontró el nodo relacionado, por favor verifique e intente de nuevo.", + "30003": "El grupo ya existe, por favor intente usar otro nombre.", + "30004": "No se encontró el grupo, por favor confirme la información e intente de nuevo.", + "30005": "El grupo aún contiene contenido, por favor vacíelo e intente de nuevo.", + "400": "Los parámetros de la solicitud no son correctos, por favor verifique y envíe de nuevo.", + "40002": "No se encontró un Token válido, por favor inicie sesión e intente de nuevo.", + "40003": "El Token actual no es válido, por favor obtenga uno nuevo e intente de nuevo.", + "40004": "El Token ha expirado, por favor inicie sesión de nuevo.", + "40005": "No tiene permiso de acceso, si tiene alguna pregunta, por favor contacte al administrador.", + "401": "Las solicitudes son demasiado frecuentes, por favor intente más tarde.", + "500": "El servidor encontró algunos problemas, por favor intente más tarde.", + "50001": "No se puede encontrar la información del cupón correspondiente, por favor verifique e intente de nuevo.", + "50002": "El cupón ya ha sido utilizado, no se puede usar de nuevo.", + "60001": "La suscripción ha expirado, por favor renueve para continuar usando.", + "60002": "No se puede usar la suscripción por el momento, por favor intente de nuevo más tarde.", + "70001": "El código de verificación es incorrecto, por favor ingréselo de nuevo.", + "80001": "La tarea no se agregó exitosamente a la cola, por favor intente de nuevo más tarde.", + "undefined": "Ocurrió un error en el sistema, por favor intente de nuevo más tarde." + }, + "unlimited": "Ilimitado" +} diff --git a/apps/user/locales/es-ES/dashboard.json b/apps/user/locales/es-ES/dashboard.json new file mode 100644 index 0000000..36ce51b --- /dev/null +++ b/apps/user/locales/es-ES/dashboard.json @@ -0,0 +1,25 @@ +{ + "cancel": "Cancelar", + "confirm": "Confirmar", + "confirmResetSubscription": "¿Confirmar el restablecimiento de la dirección de suscripción?", + "copy": "Copiar", + "copyFailure": "Error al copiar, por favor copia manualmente", + "copySuccess": "Copia exitosa", + "download": "descargar", + "expirationDays": "Días de vencimiento", + "import": "importar", + "latestAnnouncement": "Último anuncio", + "manualImportMessage": "Esta aplicación no admite la activación por el momento. Por favor, importe manualmente. La dirección de suscripción ha sido copiada automáticamente.", + "mySubscriptions": "Mis suscripciones", + "nextResetDays": "Próximo reinicio/días", + "prompt": "sugerencia", + "purchaseSubscription": "Comprar suscripción", + "qrCode": "Código QR", + "resetSubscription": "Restablecer dirección de suscripción", + "resetSuccess": "Restablecimiento exitoso", + "scanToSubscribe": "Escanear para suscribirse", + "subscriptionUrl": "Dirección de suscripción", + "totalTraffic": "Tráfico total", + "unknown": "desconocido", + "used": "Usado" +} diff --git a/apps/user/locales/es-ES/document.json b/apps/user/locales/es-ES/document.json new file mode 100644 index 0000000..5f68f33 --- /dev/null +++ b/apps/user/locales/es-ES/document.json @@ -0,0 +1,6 @@ +{ + "all": "Todo", + "document": "documento", + "read": "leer", + "tutorial": "tutorial" +} diff --git a/apps/user/locales/es-ES/index.json b/apps/user/locales/es-ES/index.json new file mode 100644 index 0000000..218082a --- /dev/null +++ b/apps/user/locales/es-ES/index.json @@ -0,0 +1,14 @@ +{ + "global_map_description": "Explora una conexión global sin interrupciones. Elige el servicio de red que se adapte a tus necesidades y mantente conectado en cualquier momento y lugar.", + "global_map_itle": "Conexión global, fácil y sin preocupaciones", + "locations": "Ubicaciones", + "per_month": "Por mes", + "product_showcase_description": "Permítanos elegir el paquete que mejor se adapte a usted y disfrútelo explorando con alegría.", + "product_showcase_title": "Elija su paquete", + "servers": "servidores", + "started": "Comenzar", + "subscribe": "Suscribirse", + "tos": "Términos de servicio", + "users": "usuarios", + "welcome": "Bienvenido a" +} diff --git a/apps/user/locales/es-ES/language.json b/apps/user/locales/es-ES/language.json new file mode 100644 index 0000000..01991d6 --- /dev/null +++ b/apps/user/locales/es-ES/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "Checo", + "de-DE": "Alemán", + "en-US": "inglés", + "es-ES": "Español", + "es-MX": "Español (México)", + "fi-FI": "Finlandés", + "fr-FR": "Francés", + "hi-IN": "Hindi", + "hu-HU": "Húngaro", + "ja-JP": "Japonés", + "ko-KR": "Coreano", + "no-NO": "Noruego", + "pl-PL": "Polaco", + "pt-BR": "portugués (Brasil)", + "ro-RO": "Rumano", + "ru-RU": "Ruso", + "th-TH": "Tailandés", + "tr-TR": "turco", + "uk-UA": "Ucraniano", + "vi-VN": "Vietnamita", + "zh-CN": "chino (simplificado)", + "zh-TW": "chino (tradicional)" +} diff --git a/apps/user/locales/es-ES/layout.json b/apps/user/locales/es-ES/layout.json new file mode 100644 index 0000000..fa96914 --- /dev/null +++ b/apps/user/locales/es-ES/layout.json @@ -0,0 +1,7 @@ +{ + "accountBalance": "Saldo de la cuenta", + "copyInviteLink": "Copiar enlace de invitación", + "copySuccess": "Enlace de invitación copiado con éxito", + "inviteCode": "Código de invitación", + "recharge": "recargar" +} diff --git a/apps/user/locales/es-ES/menu.json b/apps/user/locales/es-ES/menu.json new file mode 100644 index 0000000..6bc8b79 --- /dev/null +++ b/apps/user/locales/es-ES/menu.json @@ -0,0 +1,17 @@ +{ + "affiliate": "Mi invitación", + "announcement": "Lista de anuncios", + "dashboard": "Tablero", + "document": "Documentación de uso", + "finance": "Finanzas", + "help": "ayuda", + "logout": "Cerrar sesión", + "order": "Lista de pedidos", + "payment": "Detalles del pedido", + "personal": "Personal", + "profile": "Perfil", + "server": "servicio", + "subscribe": "Comprar suscripción", + "ticket": "Mi ticket", + "wallet": "Centro de Finanzas" +} diff --git a/apps/user/locales/es-ES/order.json b/apps/user/locales/es-ES/order.json new file mode 100644 index 0000000..957e5c3 --- /dev/null +++ b/apps/user/locales/es-ES/order.json @@ -0,0 +1,61 @@ +{ + "balanceRecharge": "Recarga de saldo", + "buyNow": "Comprar ahora", + "buySubscription": "Comprar suscripción", + "cancel": "Cancelar", + "createdAt": "Fecha de creación", + "description": "Recarga con un clic, fácil y rápido", + "detail": "Detalles", + "enterAmount": "Por favor, introduzca el importe de recarga", + "enterCoupon": "Introduce el código de descuento", + "goToPayment": "Ir a pagar", + "methods": { + "alipay_f2f": "Alipay (cara a cara)", + "balance": "Saldo", + "epay": "Epay", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "month": "mes", + "months": "meses", + "name": "nombre", + "orderClosed": "Pedido cerrado", + "orderList": "Lista de pedidos", + "orderNo": "Número de pedido", + "orderNumber": "Número de pedido", + "payment": "Ir a pagar", + "paymentAmount": "Monto de pago", + "paymentMethod": "Método de pago", + "paymentSuccess": "Pago exitoso", + "productList": "Lista de productos", + "purchaseDuration": "Duración de la compra", + "recharge": "recargar", + "rechargeAmount": "Monto de recarga", + "rechargeNow": "Recargar ahora", + "renew": "renovar", + "renewSubscription": "Renovar suscripción", + "resetPrice": "Restablecer precio", + "resetTraffic": "Restablecer tráfico", + "resetTrafficDescription": "Solo se restablece el tráfico del mes actual", + "resetTrafficTitle": "Restablecer tráfico", + "scanToPay": "Por favor, escanee para pagar", + "status": { + "0": "estado", + "1": "pendiente de pago", + "2": "pagado", + "3": "cancelado", + "4": "cerrado", + "5": "completado" + }, + "subscribeNow": "Suscríbete ahora", + "timeExpired": "El tiempo de pago ha expirado", + "type": { + "0": "Tipo", + "1": "Nueva compra", + "2": "Renovación", + "3": "Restablecer datos", + "4": "Recarga" + }, + "viewDocument": "Ver documento", + "waitingForPayment": "Esperando pago" +} diff --git a/apps/user/locales/es-ES/profile.json b/apps/user/locales/es-ES/profile.json new file mode 100644 index 0000000..3ac1b59 --- /dev/null +++ b/apps/user/locales/es-ES/profile.json @@ -0,0 +1,28 @@ +{ + "accountSettings": { + "accountSettings": "Configuración de la cuenta", + "loginPassword": "Contraseña de inicio de sesión", + "newPassword": "Nueva contraseña", + "passwordMismatch": "Las contraseñas no coinciden", + "repeatNewPassword": "Repetir nueva contraseña", + "updatePassword": "Actualizar contraseña", + "updateSuccess": "Actualización exitosa" + }, + "notify": { + "bind": "Vincular", + "emailNotification": "Notificación por correo electrónico", + "notificationSettings": "Configuración de notificaciones", + "telegramId": "ID de Telegram", + "telegramIdPlaceholder": "Ingrese ID de Telegram", + "telegramNotification": "Notificación de Telegram", + "updateSuccess": "Actualización exitosa" + }, + "notifyEvent": { + "balanceChange": "Cambio de saldo", + "finance": "Finanzas", + "login": "Iniciar sesión", + "notificationEvents": "Eventos de notificación", + "subscribe": "Suscribirse", + "updateSuccess": "Actualización exitosa" + } +} diff --git a/apps/user/locales/es-ES/subscribe.json b/apps/user/locales/es-ES/subscribe.json new file mode 100644 index 0000000..0e2faf4 --- /dev/null +++ b/apps/user/locales/es-ES/subscribe.json @@ -0,0 +1,31 @@ +{ + "all": "todo", + "billing": { + "billingTitle": "Factura de productos", + "couponDiscount": "Descuento por cupón", + "duration": "Duración del paquete", + "fee": "Tarifa de servicio", + "months": "meses", + "price": "Precio", + "productDiscount": "Descuento de producto", + "total": "Precio total" + }, + "buy": "Comprar", + "category": "categoría", + "detail": { + "availableTraffic": "Tráfico disponible", + "connectedDevices": "Número de IPs conectadas simultáneamente", + "connectionSpeed": "Velocidad de conexión", + "productDetail": "Detalles del producto" + }, + "methods": { + "alipay_f2f": "Alipay (cara a cara)", + "balance": "Saldo", + "epay": "Epay", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "perMonth": "mes", + "productDescription": "Descripción del producto", + "products": "productos" +} diff --git a/apps/user/locales/es-ES/ticket.json b/apps/user/locales/es-ES/ticket.json new file mode 100644 index 0000000..1861d61 --- /dev/null +++ b/apps/user/locales/es-ES/ticket.json @@ -0,0 +1,26 @@ +{ + "cancel": "Cancelar", + "check": "Verificar", + "close": "cerrar", + "closeSuccess": "Cierre del ticket exitoso", + "closeWarning": "Después de cerrar el ticket, no podrá continuar respondiendo.", + "confirm": "Confirmar", + "confirmClose": "¿Confirmar el cierre del ticket?", + "createSuccess": "Creación exitosa", + "createTicket": "Crear ticket", + "createTicketDescription": "El ticket será respondido en 24 horas.", + "description": "descripción", + "inputPlaceholder": "Introduce tu mensaje", + "reply": "respuesta", + "status": { + "0": "Estado", + "1": "Pendiente", + "2": "En proceso", + "3": "Resuelto", + "4": "Cerrado" + }, + "submit": "Enviar", + "ticketList": "Lista de tickets", + "title": "Título", + "updatedAt": "Actualizado en" +} diff --git a/apps/user/locales/es-ES/wallet.json b/apps/user/locales/es-ES/wallet.json new file mode 100644 index 0000000..38c69c5 --- /dev/null +++ b/apps/user/locales/es-ES/wallet.json @@ -0,0 +1,15 @@ +{ + "amount": "Cantidad", + "balance": "saldo", + "createdAt": "hora", + "title": "Saldo de la cuenta", + "type": { + "0": "tipo", + "1": "recarga", + "2": "retiro", + "3": "compra", + "4": "reembolso", + "5": "recompensa", + "6": "comisión" + } +} diff --git a/apps/user/locales/es-MX/affiliate.json b/apps/user/locales/es-MX/affiliate.json new file mode 100644 index 0000000..704bac2 --- /dev/null +++ b/apps/user/locales/es-MX/affiliate.json @@ -0,0 +1,11 @@ +{ + "commissionInfo": "Monto total, la comisión por invitación se transfiere automáticamente al saldo", + "commissionRate": "Tasa de comisión", + "copyInviteLink": "Copiar enlace de invitación", + "copySuccess": "Copia exitosa", + "inviteCode": "Código de invitación", + "inviteRecords": "Registros de invitación", + "registrationTime": "Hora de registro", + "totalCommission": "Comisión total", + "userEmail": "Correo electrónico del usuario" +} diff --git a/apps/user/locales/es-MX/auth.json b/apps/user/locales/es-MX/auth.json new file mode 100644 index 0000000..199789f --- /dev/null +++ b/apps/user/locales/es-MX/auth.json @@ -0,0 +1,38 @@ +{ + "check": { + "checking": "Verificando...", + "continue": "Continuar", + "description": "Por favor, ingresa tu correo electrónico para continuar con el inicio de sesión o registro.", + "email": "Por favor, ingresa una dirección de correo electrónico válida.", + "title": "Iniciar sesión/Registrarse", + "whitelist": "El dominio del correo electrónico no está en la lista blanca permitida." + }, + "login": { + "description": "Por favor, ingrese su información de cuenta para iniciar sesión.", + "forgotPassword": "¿Olvidó su contraseña?", + "success": "¡Inicio de sesión exitoso!", + "switchAccount": "Registrar/Cambiar cuenta", + "title": "Iniciar sesión" + }, + "orWithEmail": "o usar correo electrónico", + "register": { + "description": "Crea una nueva cuenta, completa tu información para registrarte.", + "existingAccount": "¿Ya tienes una cuenta?", + "get": "Obtener", + "invite": "Código de invitación", + "message": "#### Estimado usuario,\n\nGracias por su interés y apoyo. Debido a un ajuste en la estrategia de operación del sitio, hemos cerrado la función de registro para nuevos usuarios. Durante este período, el uso por parte de los usuarios existentes no se verá afectado.\n\nNos comprometemos a brindarle un mejor servicio y experiencia, por lo que realizaremos una optimización completa del sistema y una actualización de funciones durante el cierre del registro. En el futuro, le daremos la bienvenida con contenido y servicios de mayor calidad.\n\nPor favor, siga nuestro sitio web y plataformas de redes sociales para obtener las últimas actualizaciones y notificaciones. Agradecemos su comprensión y apoyo.\n\nSi tiene alguna pregunta o necesita ayuda, no dude en ponerse en contacto con nuestro equipo de atención al cliente.\n\n**Nuevamente, gracias por su apoyo y comprensión.**", + "passwordMismatch": "Las contraseñas no coinciden", + "success": "¡Registro exitoso, has iniciado sesión automáticamente!", + "switchToLogin": "Iniciar sesión/restablecer correo electrónico", + "title": "Registro" + }, + "reset": { + "description": "Por favor, ingrese su dirección de correo electrónico para restablecer la contraseña.", + "existingAccount": "¿Ya tienes una cuenta?", + "get": "Obtener", + "success": "¡Contraseña restablecida con éxito, se ha cambiado automáticamente a iniciar sesión!", + "switchToLogin": "Iniciar sesión/Registrarse", + "title": "Restablecer contraseña" + }, + "tos": "Términos del servicio" +} diff --git a/apps/user/locales/es-MX/common.json b/apps/user/locales/es-MX/common.json new file mode 100644 index 0000000..1cab1a0 --- /dev/null +++ b/apps/user/locales/es-MX/common.json @@ -0,0 +1,52 @@ +{ + "empty": [ + "¡Imagina que este lugar está lleno de contenido increíble! Por ahora, solo puedes imaginarlo…", + "Esta área ha desaparecido misteriosamente, ¡estamos invocándola de vuelta!", + "Vaya, no ha pasado nada… ¡puedes agregar algo tú mismo!", + "Es como descubrir que no hay nadie en el escenario de un concierto… ¿te animas a subir y actuar?", + "¡Has encontrado un paraíso en blanco! ¿Te gustaría construir una casa?", + "Aquí no hay nada por ahora, ¡pero la creatividad comienza aquí!", + "No hay nada… pero no te preocupes, ¡esto es solo el comienzo!", + "Aquí había una gran sorpresa preparada, ¡pero se ha escapado!", + "Por ahora no hay nada, como si la despensa de bocadillos estuviera vacía.", + "¡Este espacio vacío está esperando a que su protagonista aparezca!" + ], + "list": { + "pageInfo": "Página {current} de {total}", + "rowsPerPage": "Filas por página", + "selectedItems": "{total} filas seleccionadas" + }, + "login": "Iniciar sesión/Registrarse", + "request": { + "10001": "La consulta no fue exitosa, por favor intenta de nuevo más tarde o verifica tus condiciones.", + "10002": "La operación de actualización no fue exitosa, por favor intenta más tarde.", + "10003": "No se puede completar la operación de inserción por el momento, por favor intenta más tarde.", + "10004": "La operación de eliminación no se pudo completar, por favor intenta más tarde.", + "20001": "La información del usuario ya existe, por favor cambia la información e intenta de nuevo.", + "20002": "No se encontró al usuario, por favor verifica la información e intenta de nuevo.", + "20003": "La contraseña que ingresaste es incorrecta, por favor ingrésala de nuevo.", + "20004": "El usuario ha sido deshabilitado, si tienes dudas por favor contacta al servicio al cliente.", + "20005": "Saldo insuficiente, por favor recarga e intenta de nuevo.", + "20006": "La función de registro no está disponible por el momento, por favor intenta más tarde.", + "30001": "El nodo ya existe, por favor no lo agregues de nuevo.", + "30002": "No se encontró el nodo relacionado, por favor verifica e intenta de nuevo.", + "30003": "El grupo ya existe, por favor intenta usar otro nombre.", + "30004": "No se encontró el grupo, por favor verifica la información e intenta de nuevo.", + "30005": "El grupo aún contiene contenido, por favor vacíalo e intenta de nuevo.", + "400": "Los parámetros de la solicitud no son correctos, por favor verifica y vuelve a enviar.", + "40002": "No se encontró un Token válido, por favor inicia sesión e intenta de nuevo.", + "40003": "El Token actual no es válido, por favor obtén uno nuevo e intenta de nuevo.", + "40004": "El Token ha expirado, por favor inicia sesión de nuevo.", + "40005": "No tienes permiso de acceso, si tienes dudas por favor contacta al administrador.", + "401": "Las solicitudes son demasiado frecuentes, por favor intenta más tarde.", + "500": "El servidor encontró algunos problemas, por favor intenta más tarde.", + "50001": "No se puede encontrar la información del cupón correspondiente, por favor verifica e intenta de nuevo.", + "50002": "El cupón ya ha sido utilizado, no se puede usar de nuevo.", + "60001": "La suscripción ha expirado, por favor renueva para continuar usando.", + "60002": "No se puede usar la suscripción por el momento, por favor intenta más tarde.", + "70001": "El código de verificación es incorrecto, por favor ingrésalo de nuevo.", + "80001": "La tarea no se agregó exitosamente a la cola, por favor intenta de nuevo más tarde.", + "undefined": "Ocurrió un error en el sistema, por favor intenta de nuevo más tarde." + }, + "unlimited": "Ilimitado" +} diff --git a/apps/user/locales/es-MX/dashboard.json b/apps/user/locales/es-MX/dashboard.json new file mode 100644 index 0000000..c40838e --- /dev/null +++ b/apps/user/locales/es-MX/dashboard.json @@ -0,0 +1,25 @@ +{ + "cancel": "Cancelar", + "confirm": "Confirmar", + "confirmResetSubscription": "¿Confirma que desea restablecer la dirección de suscripción?", + "copy": "copiar", + "copyFailure": "Error al copiar, por favor copia manualmente", + "copySuccess": "Copia exitosa", + "download": "descargar", + "expirationDays": "Días de vencimiento", + "import": "Importar", + "latestAnnouncement": "Último anuncio", + "manualImportMessage": "Esta aplicación no admite la activación por el momento, por favor importe manualmente, la dirección de suscripción se ha copiado automáticamente", + "mySubscriptions": "Mis suscripciones", + "nextResetDays": "Próximo reinicio/días", + "prompt": "Sugerencia", + "purchaseSubscription": "Comprar suscripción", + "qrCode": "Código QR", + "resetSubscription": "Restablecer dirección de suscripción", + "resetSuccess": "Restablecimiento exitoso", + "scanToSubscribe": "Escanear para suscribirse", + "subscriptionUrl": "URL de suscripción", + "totalTraffic": "Tráfico total", + "unknown": "Desconocido", + "used": "Usado" +} diff --git a/apps/user/locales/es-MX/document.json b/apps/user/locales/es-MX/document.json new file mode 100644 index 0000000..5f68f33 --- /dev/null +++ b/apps/user/locales/es-MX/document.json @@ -0,0 +1,6 @@ +{ + "all": "Todo", + "document": "documento", + "read": "leer", + "tutorial": "tutorial" +} diff --git a/apps/user/locales/es-MX/index.json b/apps/user/locales/es-MX/index.json new file mode 100644 index 0000000..12a0cea --- /dev/null +++ b/apps/user/locales/es-MX/index.json @@ -0,0 +1,14 @@ +{ + "global_map_description": "Explora una conexión global sin interrupciones. Elige el servicio de red que se adapte a tus necesidades y mantente conectado en cualquier momento y lugar.", + "global_map_itle": "Conexión global, fácil y sin preocupaciones", + "locations": "Ubicaciones", + "per_month": "Por mes", + "product_showcase_description": "Permítanos elegir el paquete que mejor se adapte a usted y explorelo con alegría.", + "product_showcase_title": "Elija su paquete", + "servers": "servidores", + "started": "Comenzar", + "subscribe": "Suscribirse", + "tos": "Acuerdo de Servicio", + "users": "usuarios", + "welcome": "Bienvenido a" +} diff --git a/apps/user/locales/es-MX/language.json b/apps/user/locales/es-MX/language.json new file mode 100644 index 0000000..822893c --- /dev/null +++ b/apps/user/locales/es-MX/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "Checo", + "de-DE": "Alemán", + "en-US": "inglés", + "es-ES": "Español", + "es-MX": "Español (México)", + "fi-FI": "Finlandés", + "fr-FR": "Francés", + "hi-IN": "Hindi", + "hu-HU": "Húngaro", + "ja-JP": "Japonés", + "ko-KR": "Coreano", + "no-NO": "Noruego", + "pl-PL": "Polaco", + "pt-BR": "Portugués (Brasil)", + "ro-RO": "Rumano", + "ru-RU": "Ruso", + "th-TH": "Tailandés", + "tr-TR": "Turco", + "uk-UA": "Ucraniano", + "vi-VN": "Vietnamita", + "zh-CN": "español (México)", + "zh-TW": "Chino (Tradicional)" +} diff --git a/apps/user/locales/es-MX/layout.json b/apps/user/locales/es-MX/layout.json new file mode 100644 index 0000000..fa96914 --- /dev/null +++ b/apps/user/locales/es-MX/layout.json @@ -0,0 +1,7 @@ +{ + "accountBalance": "Saldo de la cuenta", + "copyInviteLink": "Copiar enlace de invitación", + "copySuccess": "Enlace de invitación copiado con éxito", + "inviteCode": "Código de invitación", + "recharge": "recargar" +} diff --git a/apps/user/locales/es-MX/menu.json b/apps/user/locales/es-MX/menu.json new file mode 100644 index 0000000..7c1c334 --- /dev/null +++ b/apps/user/locales/es-MX/menu.json @@ -0,0 +1,17 @@ +{ + "affiliate": "Mi invitación", + "announcement": "Lista de anuncios", + "dashboard": "Tablero", + "document": "Documento de uso", + "finance": "Finanzas", + "help": "ayuda", + "logout": "Cerrar sesión", + "order": "Lista de pedidos", + "payment": "Detalles del pedido", + "personal": "Personal", + "profile": "Perfil", + "server": "servidor", + "subscribe": "Comprar suscripción", + "ticket": "Mi boleto", + "wallet": "Centro de Finanzas" +} diff --git a/apps/user/locales/es-MX/order.json b/apps/user/locales/es-MX/order.json new file mode 100644 index 0000000..d1515c7 --- /dev/null +++ b/apps/user/locales/es-MX/order.json @@ -0,0 +1,61 @@ +{ + "balanceRecharge": "Recarga de saldo", + "buyNow": "Compra ahora", + "buySubscription": "Comprar suscripción", + "cancel": "Cancelar", + "createdAt": "Fecha de creación", + "description": "Recarga con un clic, fácil y rápido", + "detail": "Detalles", + "enterAmount": "Por favor, ingrese el monto a recargar", + "enterCoupon": "Ingrese el código de descuento", + "goToPayment": "Ir a pagar", + "methods": { + "alipay_f2f": "Alipay (cara a cara)", + "balance": "Saldo", + "epay": "Epay", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "month": "mes", + "months": "meses", + "name": "Nombre", + "orderClosed": "Pedido cerrado", + "orderList": "Lista de pedidos", + "orderNo": "Número de pedido", + "orderNumber": "Número de pedido", + "payment": "Ir a pagar", + "paymentAmount": "Monto de pago", + "paymentMethod": "Método de pago", + "paymentSuccess": "Pago exitoso", + "productList": "Lista de productos", + "purchaseDuration": "Duración de compra", + "recharge": "Recargar", + "rechargeAmount": "Monto de recarga", + "rechargeNow": "Recargar ahora", + "renew": "Renovar", + "renewSubscription": "Renovar suscripción", + "resetPrice": "Restablecer precio", + "resetTraffic": "Restablecer tráfico", + "resetTrafficDescription": "Solo se restablece el tráfico del mes actual", + "resetTrafficTitle": "Restablecer tráfico", + "scanToPay": "Por favor, escanee para pagar", + "status": { + "0": "Estado", + "1": "Pendiente de pago", + "2": "Pagado", + "3": "Cancelado", + "4": "Cerrado", + "5": "Completado" + }, + "subscribeNow": "Suscríbete ahora", + "timeExpired": "El tiempo de pago ha expirado", + "type": { + "0": "Tipo", + "1": "Nueva compra", + "2": "Renovación", + "3": "Restablecer datos", + "4": "Recarga" + }, + "viewDocument": "Ver documento", + "waitingForPayment": "Esperando pago" +} diff --git a/apps/user/locales/es-MX/profile.json b/apps/user/locales/es-MX/profile.json new file mode 100644 index 0000000..3ac1b59 --- /dev/null +++ b/apps/user/locales/es-MX/profile.json @@ -0,0 +1,28 @@ +{ + "accountSettings": { + "accountSettings": "Configuración de la cuenta", + "loginPassword": "Contraseña de inicio de sesión", + "newPassword": "Nueva contraseña", + "passwordMismatch": "Las contraseñas no coinciden", + "repeatNewPassword": "Repetir nueva contraseña", + "updatePassword": "Actualizar contraseña", + "updateSuccess": "Actualización exitosa" + }, + "notify": { + "bind": "Vincular", + "emailNotification": "Notificación por correo electrónico", + "notificationSettings": "Configuración de notificaciones", + "telegramId": "ID de Telegram", + "telegramIdPlaceholder": "Ingrese ID de Telegram", + "telegramNotification": "Notificación de Telegram", + "updateSuccess": "Actualización exitosa" + }, + "notifyEvent": { + "balanceChange": "Cambio de saldo", + "finance": "Finanzas", + "login": "Iniciar sesión", + "notificationEvents": "Eventos de notificación", + "subscribe": "Suscribirse", + "updateSuccess": "Actualización exitosa" + } +} diff --git a/apps/user/locales/es-MX/subscribe.json b/apps/user/locales/es-MX/subscribe.json new file mode 100644 index 0000000..0a70228 --- /dev/null +++ b/apps/user/locales/es-MX/subscribe.json @@ -0,0 +1,31 @@ +{ + "all": "Todo", + "billing": { + "billingTitle": "Factura de Producto", + "couponDiscount": "Descuento de Cupón", + "duration": "Duración del Paquete", + "fee": "Tarifa", + "months": "meses", + "price": "Precio", + "productDiscount": "Descuento de Producto", + "total": "Total" + }, + "buy": "Comprar", + "category": "Categoría", + "detail": { + "availableTraffic": "Tráfico disponible", + "connectedDevices": "Número de IPs conectadas simultáneamente", + "connectionSpeed": "Velocidad de conexión", + "productDetail": "Detalles del producto" + }, + "methods": { + "alipay_f2f": "Alipay (cara a cara)", + "balance": "Saldo", + "epay": "Epay", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "perMonth": "mes", + "productDescription": "Descripción del producto", + "products": "productos" +} diff --git a/apps/user/locales/es-MX/ticket.json b/apps/user/locales/es-MX/ticket.json new file mode 100644 index 0000000..eec456b --- /dev/null +++ b/apps/user/locales/es-MX/ticket.json @@ -0,0 +1,26 @@ +{ + "cancel": "Cancelar", + "check": "Revisar", + "close": "cerrar", + "closeSuccess": "Orden de trabajo cerrada con éxito", + "closeWarning": "Después de cerrar el ticket, no podrás seguir respondiendo.", + "confirm": "Confirmar", + "confirmClose": "¿Confirmar el cierre del ticket?", + "createSuccess": "Creación exitosa", + "createTicket": "Crear Ticket", + "createTicketDescription": "El ticket será respondido en 24 horas.", + "description": "descripción", + "inputPlaceholder": "Ingresa tu mensaje", + "reply": "Responder", + "status": { + "0": "Estado", + "1": "Pendiente", + "2": "En proceso", + "3": "Resuelto", + "4": "Cerrado" + }, + "submit": "Enviar", + "ticketList": "Lista de tickets", + "title": "Título", + "updatedAt": "Actualizado en" +} diff --git a/apps/user/locales/es-MX/wallet.json b/apps/user/locales/es-MX/wallet.json new file mode 100644 index 0000000..7d2e815 --- /dev/null +++ b/apps/user/locales/es-MX/wallet.json @@ -0,0 +1,15 @@ +{ + "amount": "Monto", + "balance": "saldo", + "createdAt": "Hora", + "title": "Saldo de la cuenta", + "type": { + "0": "Tipo", + "1": "Recarga", + "2": "Retiro", + "3": "Compra", + "4": "Reembolso", + "5": "Recompensa", + "6": "Comisión" + } +} diff --git a/apps/user/locales/fi-FI/affiliate.json b/apps/user/locales/fi-FI/affiliate.json new file mode 100644 index 0000000..e0bd537 --- /dev/null +++ b/apps/user/locales/fi-FI/affiliate.json @@ -0,0 +1,11 @@ +{ + "commissionInfo": "Tilastollinen summa, kutsupalkkio siirretään automaattisesti saldoon", + "commissionRate": "Komissioaste", + "copyInviteLink": "Kopioi kutsulinkki", + "copySuccess": "Kopiointi onnistui", + "inviteCode": "kutsukoodi", + "inviteRecords": "Kutsuhistoria", + "registrationTime": "Rekisteröintiaika", + "totalCommission": "Kokonaisprovisio", + "userEmail": "Käyttäjän sähköposti" +} diff --git a/apps/user/locales/fi-FI/auth.json b/apps/user/locales/fi-FI/auth.json new file mode 100644 index 0000000..e8f9d43 --- /dev/null +++ b/apps/user/locales/fi-FI/auth.json @@ -0,0 +1,38 @@ +{ + "check": { + "checking": "Tarkistetaan...", + "continue": "Jatka", + "description": "Syötä sähköpostiosoitteesi jatkaaksesi kirjautumista tai rekisteröitymistä.", + "email": "Anna kelvollinen sähköpostiosoite.", + "title": "Kirjaudu/Rekisteröidy", + "whitelist": "Sähköpostin verkkotunnus ei ole sallitussa luettelossa." + }, + "login": { + "description": "Ole hyvä ja syötä tilitietosi kirjautuaksesi sisään.", + "forgotPassword": "Unohditko salasanasi?", + "success": "Kirjautuminen onnistui!", + "switchAccount": "Rekisteröidy/Vaihda tiliä", + "title": "Kirjaudu sisään" + }, + "orWithEmail": "tai käytä sähköpostia", + "register": { + "description": "Luo uusi tili täyttämällä tietosi rekisteröityäksesi.", + "existingAccount": "Onko sinulla jo tili?", + "get": "Hanki", + "invite": "Kutsukoodi", + "message": "#### Arvoisa käyttäjä,\n\nKiitos mielenkiinnostasi ja tuestasi. Sivuston toimintastrategian muutosten vuoksi olemme sulkeneet uusien käyttäjien rekisteröinnin. Tänä aikana nykyisten käyttäjien käyttö ei vaikutu millään tavalla.\n\nPyrimme tarjoamaan sinulle parempaa palvelua ja kokemusta, joten suoritamme kattavan järjestelmän optimoinnin ja toiminnallisuuden päivityksen rekisteröinnin sulkemisen aikana. Tulevaisuudessa tarjoamme sinulle laadukkaampaa sisältöä ja palvelua.\n\nSeuraa verkkosivustoamme ja sosiaalisen median alustoja saadaksesi uusimmat päivitykset ja ilmoitukset. Kiitos ymmärryksestäsi ja tuestasi.\n\nJos sinulla on kysyttävää tai tarvitset apua, ota rohkeasti yhteyttä asiakaspalvelutiimiimme.\n\n**Kiitos vielä kerran tuestasi ja ymmärryksestäsi.**", + "passwordMismatch": "Salasanat eivät täsmää", + "success": "Rekisteröinti onnistui, olet kirjautunut automaattisesti!", + "switchToLogin": "Kirjaudu/sähköpostin nollaus", + "title": "Rekisteröidy" + }, + "reset": { + "description": "Anna sähköpostiosoitteesi salasanan nollaamiseksi.", + "existingAccount": "Onko sinulla jo tili?", + "get": "Hanki", + "success": "Salasanan nollaus onnistui, siirryttiin automaattisesti kirjautumiseen!", + "switchToLogin": "Kirjaudu/Rekisteröidy", + "title": "Nollaa salasana" + }, + "tos": "Palveluehdot" +} diff --git a/apps/user/locales/fi-FI/common.json b/apps/user/locales/fi-FI/common.json new file mode 100644 index 0000000..f108f66 --- /dev/null +++ b/apps/user/locales/fi-FI/common.json @@ -0,0 +1,52 @@ +{ + "empty": [ + "Kuvittele, että täällä on täynnä upeaa sisältöä! Toistaiseksi voit vain kuvitella…", + "Tämä alue on mystisesti kadonnut, kutsumme sitä takaisin!", + "Voi ei, mitään ei tapahtunut… voit lisätä jotain itse!", + "Tämä on kuin konsertti, jossa lavalla ei ole ketään… haluaisitko esiintyä?", + "Olet löytänyt tyhjän paratiisin! Haluatko rakentaa talon?", + "Täällä ei ole vielä mitään, mutta luovuus alkaa tästä!", + "Ei mitään… mutta älä huoli, tämä on vasta alkua!", + "Täällä oli alun perin suuri yllätys, mutta se karkasi!", + "Toistaiseksi ei mitään, aivan kuin välipala-kaappi olisi tyhjennetty.", + "Tämä tyhjä tila odottaa päähenkilöään!" + ], + "list": { + "pageInfo": "Sivu {current} / {total}", + "rowsPerPage": "Rivejä per sivu", + "selectedItems": "Valittu {total} riviä" + }, + "login": "Kirjaudu sisään/Rekisteröidy", + "request": { + "10001": "Kysely ei onnistunut, yritä myöhemmin uudelleen tai tarkista ehtosi.", + "10002": "Päivitys ei onnistunut, yritä myöhemmin uudelleen.", + "10003": "Lisäystä ei voitu suorittaa, yritä myöhemmin uudelleen.", + "10004": "Poisto ei onnistunut, yritä myöhemmin uudelleen.", + "20001": "Käyttäjätiedot ovat jo olemassa, vaihda tiedot ja yritä uudelleen.", + "20002": "Käyttäjää ei löytynyt, tarkista tiedot ja yritä uudelleen.", + "20003": "Syöttämäsi salasana on virheellinen, syötä se uudelleen.", + "20004": "Käyttäjä on estetty, ota yhteyttä asiakaspalveluun, jos sinulla on kysyttävää.", + "20005": "Saldo ei riitä, lataa lisää ja yritä uudelleen.", + "20006": "Rekisteröinti ei ole tällä hetkellä käytettävissä, yritä myöhemmin uudelleen.", + "30001": "Solmu on jo olemassa, älä lisää sitä uudelleen.", + "30002": "Solmua ei löytynyt, tarkista ja yritä uudelleen.", + "30003": "Ryhmä on jo olemassa, yritä käyttää toista nimeä.", + "30004": "Ryhmä ei löytynyt, tarkista tiedot ja yritä uudelleen.", + "30005": "Ryhmässä on vielä sisältöä, tyhjennä se ja yritä uudelleen.", + "400": "Pyynnön parametrit ovat virheellisiä, tarkista ja lähetä uudelleen.", + "40002": "Voimassa olevaa tokenia ei löytynyt, kirjaudu sisään ja yritä uudelleen.", + "40003": "Nykyinen token on virheellinen, hanki uusi ja yritä uudelleen.", + "40004": "Token on vanhentunut, kirjaudu sisään uudelleen.", + "40005": "Sinulla ei ole käyttöoikeutta, ota yhteyttä ylläpitäjään, jos sinulla on kysyttävää.", + "401": "Pyyntöjä on tehty liian usein, yritä myöhemmin uudelleen.", + "500": "Palvelimella on ongelmia, yritä myöhemmin uudelleen.", + "50001": "Kuponkitietoja ei löytynyt, tarkista ja yritä uudelleen.", + "50002": "Kuponki on jo käytetty, sitä ei voi käyttää uudelleen.", + "60001": "Tilauksesi on vanhentunut, uusi tilaus ja käytä uudelleen.", + "60002": "Tilausta ei voi käyttää tällä hetkellä, yritä myöhemmin uudelleen.", + "70001": "Vahvistuskoodi on virheellinen, syötä se uudelleen.", + "80001": "Tehtävää ei lisätty jonoon, yritä myöhemmin uudelleen.", + "undefined": "Järjestelmässä tapahtui virhe, yritä myöhemmin uudelleen." + }, + "unlimited": "rajoittamaton" +} diff --git a/apps/user/locales/fi-FI/dashboard.json b/apps/user/locales/fi-FI/dashboard.json new file mode 100644 index 0000000..050f12b --- /dev/null +++ b/apps/user/locales/fi-FI/dashboard.json @@ -0,0 +1,25 @@ +{ + "cancel": "Peruuta", + "confirm": "Vahvista", + "confirmResetSubscription": "Haluatko varmasti nollata tilausosoitteen?", + "copy": "kopioi", + "copyFailure": "Kopiointi epäonnistui, kopioi manuaalisesti", + "copySuccess": "Kopiointi onnistui", + "download": "lataa", + "expirationDays": "Vanhentumispäivät", + "import": "Tuo", + "latestAnnouncement": "Viimeisin ilmoitus", + "manualImportMessage": "Tämä sovellus ei tue herätystä tällä hetkellä, tuo manuaalisesti, tilausosoite on kopioitu automaattisesti", + "mySubscriptions": "Omat tilaukset", + "nextResetDays": "Seuraava nollaus/päivää", + "prompt": "kehotus", + "purchaseSubscription": "Osta tilaus", + "qrCode": "QR-koodi", + "resetSubscription": "Nollaa tilausosoite", + "resetSuccess": "Nollaus onnistui", + "scanToSubscribe": "Skannaa tilataksesi", + "subscriptionUrl": "Tilausosoite", + "totalTraffic": "Kokonaisliikenne", + "unknown": "tuntematon", + "used": "käytetty" +} diff --git a/apps/user/locales/fi-FI/document.json b/apps/user/locales/fi-FI/document.json new file mode 100644 index 0000000..aad4aab --- /dev/null +++ b/apps/user/locales/fi-FI/document.json @@ -0,0 +1,6 @@ +{ + "all": "kaikki", + "document": "Asiakirja", + "read": "lukea", + "tutorial": "Opetusohjelma" +} diff --git a/apps/user/locales/fi-FI/index.json b/apps/user/locales/fi-FI/index.json new file mode 100644 index 0000000..5e6abc7 --- /dev/null +++ b/apps/user/locales/fi-FI/index.json @@ -0,0 +1,14 @@ +{ + "global_map_description": "Tutustu saumattomaan maailmanlaajuiseen yhteyteen. Valitse tarpeitasi vastaava verkkopalvelu ja pysy yhteydessä missä ja milloin tahansa.", + "global_map_itle": "Maailmanlaajuinen yhteys, vaivaton ja huoleton", + "locations": "Alueet", + "per_month": "kuukaudessa", + "product_showcase_description": "Anna meidän valita sinulle sopivin paketti ja tutustu siihen iloisesti.", + "product_showcase_title": "Valitse pakettisi", + "servers": "palvelimet", + "started": "Aloita käyttö", + "subscribe": "Tilaa", + "tos": "Palvelusopimus", + "users": "käyttäjät", + "welcome": "Tervetuloa" +} diff --git a/apps/user/locales/fi-FI/language.json b/apps/user/locales/fi-FI/language.json new file mode 100644 index 0000000..48da950 --- /dev/null +++ b/apps/user/locales/fi-FI/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "tšekki", + "de-DE": "Saksa", + "en-US": "englanti", + "es-ES": "espanja", + "es-MX": "espanja (Meksiko)", + "fi-FI": "suomi", + "fr-FR": "ranska", + "hi-IN": "hindi", + "hu-HU": "unkarilainen", + "ja-JP": "japani", + "ko-KR": "Korea", + "no-NO": "norja", + "pl-PL": "puola", + "pt-BR": "portugali (Brasilia)", + "ro-RO": "romania", + "ru-RU": "Venäjä", + "th-TH": "thaikieli", + "tr-TR": "turkki", + "uk-UA": "ukrainaksi", + "vi-VN": "Vietnamin kieli", + "zh-CN": "kiina (yksinkertaistettu)", + "zh-TW": "kiina (perinteinen)" +} diff --git a/apps/user/locales/fi-FI/layout.json b/apps/user/locales/fi-FI/layout.json new file mode 100644 index 0000000..36ac1ce --- /dev/null +++ b/apps/user/locales/fi-FI/layout.json @@ -0,0 +1,7 @@ +{ + "accountBalance": "Tilin saldo", + "copyInviteLink": "Kopioi kutsulinkki", + "copySuccess": "Kutsulinkki kopioitu onnistuneesti", + "inviteCode": "kutsukoodi", + "recharge": "lataa saldoa" +} diff --git a/apps/user/locales/fi-FI/menu.json b/apps/user/locales/fi-FI/menu.json new file mode 100644 index 0000000..436fe2f --- /dev/null +++ b/apps/user/locales/fi-FI/menu.json @@ -0,0 +1,17 @@ +{ + "affiliate": "Kutsuni", + "announcement": "Ilmoituslista", + "dashboard": "Kojelauta", + "document": "Käyttöohjeet", + "finance": "rahoitus", + "help": "apua", + "logout": "Kirjaudu ulos", + "order": "Tilauslista", + "payment": "Tilaustiedot", + "personal": "henkilökohtainen", + "profile": "Profiili", + "server": "palvelu", + "subscribe": "Osta tilaus", + "ticket": "Minun tukipyyntöni", + "wallet": "Lompakkokeskus" +} diff --git a/apps/user/locales/fi-FI/order.json b/apps/user/locales/fi-FI/order.json new file mode 100644 index 0000000..7f1f20b --- /dev/null +++ b/apps/user/locales/fi-FI/order.json @@ -0,0 +1,61 @@ +{ + "balanceRecharge": "Saldon lataus", + "buyNow": "Osta nyt", + "buySubscription": "Osta tilaus", + "cancel": "Peruuta", + "createdAt": "Luontiaika", + "description": "Yhdellä painalluksella lataus, helppoa ja vaivatonta", + "detail": "Yksityiskohdat", + "enterAmount": "Syötä ladattava summa", + "enterCoupon": "Syötä alennuskoodi", + "goToPayment": "Siirry maksamaan", + "methods": { + "alipay_f2f": "Alipay (kasvokkain)", + "balance": "Saldo", + "epay": "Helppo maksaminen", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "month": "kuukausi", + "months": "kuukautta", + "name": "Nimi", + "orderClosed": "Tilaus on suljettu", + "orderList": "Tilauslista", + "orderNo": "Tilausnumero", + "orderNumber": "Tilausnumero", + "payment": "Maksamaan", + "paymentAmount": "Maksun määrä", + "paymentMethod": "Maksutapa", + "paymentSuccess": "Maksu onnistui", + "productList": "Tuotelista", + "purchaseDuration": "Ostoajan kesto", + "recharge": "Lataa saldoa", + "rechargeAmount": "Lataussumma", + "rechargeNow": "Lataa nyt", + "renew": "uudista", + "renewSubscription": "Uudista tilaus", + "resetPrice": "Nollaa hinta", + "resetTraffic": "Nollaa liikenne", + "resetTrafficDescription": "Vain kuluvan kuukauden liikenne nollataan", + "resetTrafficTitle": "Nollaa liikenne", + "scanToPay": "Ole hyvä ja skannaa maksaaksesi", + "status": { + "0": "Tila", + "1": "Odottaa maksua", + "2": "Maksettu", + "3": "Peruutettu", + "4": "Suljettu", + "5": "Valmis" + }, + "subscribeNow": "Tilaa nyt", + "timeExpired": "Maksuaika on umpeutunut", + "type": { + "0": "Tyyppi", + "1": "Uusi osto", + "2": "Uusiminen", + "3": "Liikenteen nollaus", + "4": "Lataus" + }, + "viewDocument": "Näytä asiakirja", + "waitingForPayment": "Odotetaan maksua" +} diff --git a/apps/user/locales/fi-FI/profile.json b/apps/user/locales/fi-FI/profile.json new file mode 100644 index 0000000..120d5cf --- /dev/null +++ b/apps/user/locales/fi-FI/profile.json @@ -0,0 +1,28 @@ +{ + "accountSettings": { + "accountSettings": "Tiliasetukset", + "loginPassword": "Kirjautumissalasana", + "newPassword": "Uusi salasana", + "passwordMismatch": "Salasanat eivät täsmää", + "repeatNewPassword": "Toista uusi salasana", + "updatePassword": "Päivitä salasana", + "updateSuccess": "Päivitys onnistui" + }, + "notify": { + "bind": "Yhdistä", + "emailNotification": "Sähköposti-ilmoitus", + "notificationSettings": "Ilmoitusasetukset", + "telegramId": "Telegram ID", + "telegramIdPlaceholder": "Syötä Telegram ID", + "telegramNotification": "Telegram-ilmoitus", + "updateSuccess": "Päivitys onnistui" + }, + "notifyEvent": { + "balanceChange": "Saldon muutos", + "finance": "Talous", + "login": "Kirjautuminen", + "notificationEvents": "Ilmoitustapahtumat", + "subscribe": "Tilaa", + "updateSuccess": "Päivitys onnistui" + } +} diff --git a/apps/user/locales/fi-FI/subscribe.json b/apps/user/locales/fi-FI/subscribe.json new file mode 100644 index 0000000..327913d --- /dev/null +++ b/apps/user/locales/fi-FI/subscribe.json @@ -0,0 +1,31 @@ +{ + "all": "kaikki", + "billing": { + "billingTitle": "Tuotelasku", + "couponDiscount": "Alennuskoodin alennus", + "duration": "Paketin kesto", + "fee": "Käsittelymaksu", + "months": "kuukautta", + "price": "Hinta", + "productDiscount": "Tuotealennus", + "total": "Kokonaishinta" + }, + "buy": "Osta", + "category": "Kategoria", + "detail": { + "availableTraffic": "Käytettävissä oleva liikenne", + "connectedDevices": "Samanaikaisesti yhdistetyt IP-osoitteet", + "connectionSpeed": "Yhteysnopeus", + "productDetail": "Tuotteen tiedot" + }, + "methods": { + "alipay_f2f": "Alipay (kasvokkain)", + "balance": "Saldo", + "epay": "Helppo maksaminen", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "perMonth": "kuukausi", + "productDescription": "Tuotteen kuvaus", + "products": "tuotteet" +} diff --git a/apps/user/locales/fi-FI/ticket.json b/apps/user/locales/fi-FI/ticket.json new file mode 100644 index 0000000..f013ead --- /dev/null +++ b/apps/user/locales/fi-FI/ticket.json @@ -0,0 +1,26 @@ +{ + "cancel": "Peruuta", + "check": "Tarkista", + "close": "sulje", + "closeSuccess": "Työtilauksen sulkeminen onnistui", + "closeWarning": "Kun suljet työtilauksen, et voi enää vastata siihen.", + "confirm": "Vahvista", + "confirmClose": "Haluatko varmasti sulkea työtilauksen?", + "createSuccess": "Luonti onnistui", + "createTicket": "Luo tiketti", + "createTicketDescription": "Tukipyyntöön vastataan 24 tunnin kuluessa", + "description": "kuvaus", + "inputPlaceholder": "Kirjoita viestisi", + "reply": "vastaus", + "status": { + "0": "Tila", + "1": "Odottaa käsittelyä", + "2": "Käsittelyssä", + "3": "Ratkaistu", + "4": "Suljettu" + }, + "submit": "Lähetä", + "ticketList": "Tukipyyntölista", + "title": "Otsikko", + "updatedAt": "Päivitetty" +} diff --git a/apps/user/locales/fi-FI/wallet.json b/apps/user/locales/fi-FI/wallet.json new file mode 100644 index 0000000..48a0d84 --- /dev/null +++ b/apps/user/locales/fi-FI/wallet.json @@ -0,0 +1,15 @@ +{ + "amount": "Määrä", + "balance": "Saldo", + "createdAt": "Aika", + "title": "Tilin saldo", + "type": { + "0": "Tyyppi", + "1": "Lataus", + "2": "Nosto", + "3": "Osto", + "4": "Hyvitys", + "5": "Palkinto", + "6": "Komissio" + } +} diff --git a/apps/user/locales/fr-FR/affiliate.json b/apps/user/locales/fr-FR/affiliate.json new file mode 100644 index 0000000..b58030f --- /dev/null +++ b/apps/user/locales/fr-FR/affiliate.json @@ -0,0 +1,11 @@ +{ + "commissionInfo": "Montant total, la commission d'invitation est automatiquement transférée dans le solde", + "commissionRate": "Taux de commission", + "copyInviteLink": "Copier le lien d'invitation", + "copySuccess": "Copie réussie", + "inviteCode": "code d'invitation", + "inviteRecords": "Historique des invitations", + "registrationTime": "Heure d'inscription", + "totalCommission": "Commission totale", + "userEmail": "Adresse e-mail de l'utilisateur" +} diff --git a/apps/user/locales/fr-FR/auth.json b/apps/user/locales/fr-FR/auth.json new file mode 100644 index 0000000..d5171d7 --- /dev/null +++ b/apps/user/locales/fr-FR/auth.json @@ -0,0 +1,38 @@ +{ + "check": { + "checking": "Vérification en cours...", + "continue": "Continuer", + "description": "Veuillez entrer votre adresse e-mail pour continuer à vous connecter ou à vous inscrire.", + "email": "Veuillez entrer une adresse e-mail valide.", + "title": "Connexion/Inscription", + "whitelist": "Le domaine de l'e-mail n'est pas sur la liste blanche autorisée." + }, + "login": { + "description": "Veuillez entrer vos informations de compte pour vous connecter.", + "forgotPassword": "Mot de passe oublié ?", + "success": "Connexion réussie !", + "switchAccount": "S'inscrire/Changer de compte", + "title": "Connexion" + }, + "orWithEmail": "ou utiliser l'e-mail", + "register": { + "description": "Créez un nouveau compte, remplissez vos informations pour vous inscrire.", + "existingAccount": "Vous avez déjà un compte ?", + "get": "Obtenir", + "invite": "Code d'invitation", + "message": "#### Cher utilisateur,\n\nMerci pour votre intérêt et votre soutien. En raison d'un ajustement de notre stratégie opérationnelle, nous avons fermé la fonction d'inscription pour les nouveaux utilisateurs. Pendant cette période, l'utilisation par les utilisateurs existants ne sera pas affectée.\n\nNous nous engageons à vous offrir un meilleur service et une meilleure expérience, c'est pourquoi nous procéderons à une optimisation complète du système et à une mise à niveau des fonctionnalités pendant la fermeture des inscriptions. À l'avenir, nous vous accueillerons avec un contenu et des services de meilleure qualité.\n\nVeuillez suivre notre site web et nos plateformes de médias sociaux pour obtenir les dernières nouvelles et notifications. Merci pour votre compréhension et votre soutien.\n\nSi vous avez des questions ou avez besoin d'aide, n'hésitez pas à contacter notre équipe de service client.\n\n**Merci encore pour votre soutien et votre compréhension.**", + "passwordMismatch": "Les mots de passe saisis ne correspondent pas", + "success": "Inscription réussie, vous êtes connecté automatiquement !", + "switchToLogin": "Connexion/Réinitialiser l'email", + "title": "Inscription" + }, + "reset": { + "description": "Veuillez entrer votre adresse e-mail pour réinitialiser votre mot de passe.", + "existingAccount": "Vous avez déjà un compte ?", + "get": "Obtenir", + "success": "Réinitialisation du mot de passe réussie, vous êtes automatiquement connecté !", + "switchToLogin": "Connexion/Inscription", + "title": "Réinitialiser le mot de passe" + }, + "tos": "Conditions de service" +} diff --git a/apps/user/locales/fr-FR/common.json b/apps/user/locales/fr-FR/common.json new file mode 100644 index 0000000..4f39b0f --- /dev/null +++ b/apps/user/locales/fr-FR/common.json @@ -0,0 +1,52 @@ +{ + "empty": [ + "Imaginez ici un contenu plein de merveilles ! Pour l'instant, il faut se contenter de l'imaginer…", + "Cette zone a mystérieusement disparu, nous sommes en train de la rappeler !", + "Oups, rien ne s'est passé… vous pouvez y ajouter quelque chose vous-même !", + "C'est comme découvrir qu'il n'y a personne sur scène lors d'un concert… pourquoi ne pas monter et performer ?", + "Vous avez trouvé une terre vierge ! Pourquoi ne pas y construire une maison ?", + "Il n'y a rien ici pour l'instant, mais la créativité commence ici !", + "Il n'y a rien… mais ne vous inquiétez pas, ce n'est que le début !", + "Un grand surprise était prévue ici, mais elle s'est échappée !", + "Pour l'instant, il n'y a rien, comme un placard à snacks vidé.", + "Cet espace vide attend l'arrivée de son protagoniste !" + ], + "list": { + "pageInfo": "Page {current} sur {total}", + "rowsPerPage": "Lignes par page", + "selectedItems": "{total} lignes sélectionnées" + }, + "login": "Connexion/Inscription", + "request": { + "10001": "La requête n'a pas encore abouti, veuillez réessayer plus tard ou vérifier vos critères.", + "10002": "L'opération de mise à jour a échoué, veuillez réessayer plus tard.", + "10003": "Impossible de compléter l'opération d'insertion pour le moment, veuillez réessayer plus tard.", + "10004": "L'opération de suppression n'a pas pu être complétée, veuillez réessayer plus tard.", + "20001": "Les informations de cet utilisateur existent déjà, veuillez modifier les informations et réessayer.", + "20002": "Utilisateur non trouvé, veuillez vérifier les informations et réessayer.", + "20003": "Le mot de passe que vous avez saisi est incorrect, veuillez le ressaisir.", + "20004": "Cet utilisateur a été désactivé, si vous avez des questions, veuillez contacter le service client.", + "20005": "Solde insuffisant, veuillez recharger et réessayer.", + "20006": "La fonction d'inscription est temporairement indisponible, veuillez réessayer plus tard.", + "30001": "Ce nœud existe déjà, veuillez ne pas l'ajouter à nouveau.", + "30002": "Nœud non trouvé, veuillez vérifier et réessayer.", + "30003": "Le groupe existe déjà, veuillez essayer un autre nom.", + "30004": "Groupe non trouvé, veuillez vérifier les informations et réessayer.", + "30005": "Le groupe contient encore des éléments, veuillez le vider et réessayer.", + "400": "Les paramètres de la requête sont incorrects, veuillez vérifier et soumettre à nouveau.", + "40002": "Aucun jeton valide trouvé, veuillez vous connecter et réessayer.", + "40003": "Le jeton actuel est invalide, veuillez en obtenir un nouveau et réessayer.", + "40004": "Le jeton a expiré, veuillez vous reconnecter.", + "40005": "Vous n'avez pas l'autorisation d'accéder, si vous avez des questions, veuillez contacter l'administrateur.", + "401": "Les requêtes sont trop fréquentes, veuillez réessayer plus tard.", + "500": "Le serveur a rencontré un problème, veuillez réessayer plus tard.", + "50001": "Informations sur le coupon introuvables, veuillez vérifier et réessayer.", + "50002": "Ce coupon a déjà été utilisé, il ne peut pas être réutilisé.", + "60001": "L'abonnement a expiré, veuillez le renouveler avant de l'utiliser.", + "60002": "Impossible d'utiliser cet abonnement pour le moment, veuillez réessayer plus tard.", + "70001": "Le code de vérification est incorrect, veuillez le ressaisir.", + "80001": "La tâche n'a pas été ajoutée avec succès à la file d'attente, veuillez réessayer plus tard.", + "undefined": "Une erreur système s'est produite, veuillez réessayer plus tard." + }, + "unlimited": "illimité" +} diff --git a/apps/user/locales/fr-FR/dashboard.json b/apps/user/locales/fr-FR/dashboard.json new file mode 100644 index 0000000..b65aaa7 --- /dev/null +++ b/apps/user/locales/fr-FR/dashboard.json @@ -0,0 +1,25 @@ +{ + "cancel": "Annuler", + "confirm": "Confirmer", + "confirmResetSubscription": "Confirmez-vous la réinitialisation de l'adresse d'abonnement ?", + "copy": "Copier", + "copyFailure": "Échec de la copie, veuillez copier manuellement", + "copySuccess": "Copie réussie", + "download": "télécharger", + "expirationDays": "Date d'expiration/jours", + "import": "Importer", + "latestAnnouncement": "Dernière annonce", + "manualImportMessage": "Cette application ne prend pas encore en charge l'activation, veuillez importer manuellement, l'adresse d'abonnement a été copiée automatiquement", + "mySubscriptions": "Mes abonnements", + "nextResetDays": "Prochain réinitialisation/jours", + "prompt": "invite", + "purchaseSubscription": "Acheter un abonnement", + "qrCode": "Code QR", + "resetSubscription": "Réinitialiser l'adresse d'abonnement", + "resetSuccess": "Réinitialisation réussie", + "scanToSubscribe": "Scannez pour vous abonner", + "subscriptionUrl": "URL d'abonnement", + "totalTraffic": "Trafic total", + "unknown": "Inconnu", + "used": "Utilisé" +} diff --git a/apps/user/locales/fr-FR/document.json b/apps/user/locales/fr-FR/document.json new file mode 100644 index 0000000..c905c28 --- /dev/null +++ b/apps/user/locales/fr-FR/document.json @@ -0,0 +1,6 @@ +{ + "all": "Tout", + "document": "Document", + "read": "lire", + "tutorial": "Tutoriel" +} diff --git a/apps/user/locales/fr-FR/index.json b/apps/user/locales/fr-FR/index.json new file mode 100644 index 0000000..31261ed --- /dev/null +++ b/apps/user/locales/fr-FR/index.json @@ -0,0 +1,14 @@ +{ + "global_map_description": "Explorez une connexion mondiale sans couture. Choisissez le service réseau qui répond à vos besoins et restez connecté à tout moment et en tout lieu.", + "global_map_itle": "Connexion mondiale, simplicité assurée", + "locations": "Régions", + "per_month": "Par mois", + "product_showcase_description": "Laissez-nous choisir le forfait qui vous convient le mieux et explorez-le avec joie.", + "product_showcase_title": "Choisissez votre forfait", + "servers": "serveurs", + "started": "Commencer", + "subscribe": "S'abonner", + "tos": "Conditions de service", + "users": "utilisateurs", + "welcome": "Bienvenue à" +} diff --git a/apps/user/locales/fr-FR/language.json b/apps/user/locales/fr-FR/language.json new file mode 100644 index 0000000..779a848 --- /dev/null +++ b/apps/user/locales/fr-FR/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "tchèque", + "de-DE": "allemand", + "en-US": "anglais", + "es-ES": "Espagnol", + "es-MX": "Espagnol (Mexique)", + "fi-FI": "finnois", + "fr-FR": "français", + "hi-IN": "hindi", + "hu-HU": "Hongrois", + "ja-JP": "Japonais", + "ko-KR": "coréen", + "no-NO": "Norvégien", + "pl-PL": "Polonais", + "pt-BR": "Portugais (Brésil)", + "ro-RO": "Roumain", + "ru-RU": "Russe", + "th-TH": "thaïlandais", + "tr-TR": "turc", + "uk-UA": "Ukrainien", + "vi-VN": "Vietnamien", + "zh-CN": "français (France)", + "zh-TW": "Chinois (traditionnel)" +} diff --git a/apps/user/locales/fr-FR/layout.json b/apps/user/locales/fr-FR/layout.json new file mode 100644 index 0000000..b9c0b20 --- /dev/null +++ b/apps/user/locales/fr-FR/layout.json @@ -0,0 +1,7 @@ +{ + "accountBalance": "Solde du compte", + "copyInviteLink": "Copier le lien d'invitation", + "copySuccess": "Lien d'invitation copié avec succès", + "inviteCode": "codeInvitation", + "recharge": "Recharger" +} diff --git a/apps/user/locales/fr-FR/menu.json b/apps/user/locales/fr-FR/menu.json new file mode 100644 index 0000000..a63667c --- /dev/null +++ b/apps/user/locales/fr-FR/menu.json @@ -0,0 +1,17 @@ +{ + "affiliate": "Mon invitation", + "announcement": "Liste des annonces", + "dashboard": "Tableau de bord", + "document": "Documentation d'utilisation", + "finance": "Finance", + "help": "Aide", + "logout": "Se déconnecter", + "order": "Liste des commandes", + "payment": "Détails de la commande", + "personal": "Personnel", + "profile": "Profil", + "server": "serveur", + "subscribe": "Acheter un abonnement", + "ticket": "Mon ticket", + "wallet": "Centre financier" +} diff --git a/apps/user/locales/fr-FR/order.json b/apps/user/locales/fr-FR/order.json new file mode 100644 index 0000000..dd0b1f3 --- /dev/null +++ b/apps/user/locales/fr-FR/order.json @@ -0,0 +1,61 @@ +{ + "balanceRecharge": "Recharge de solde", + "buyNow": "Acheter maintenant", + "buySubscription": "Acheter un abonnement", + "cancel": "Annuler", + "createdAt": "Date de création", + "description": "Recharge en un clic, facile et rapide", + "detail": "Détails", + "enterAmount": "Veuillez entrer le montant à recharger", + "enterCoupon": "Veuillez entrer le code de réduction", + "goToPayment": "Aller au paiement", + "methods": { + "alipay_f2f": "Alipay (face à face)", + "balance": "Solde", + "epay": "Epay", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "month": "mois", + "months": "mois", + "name": "Nom", + "orderClosed": "Commande fermée", + "orderList": "Liste des commandes", + "orderNo": "Numéro de commande", + "orderNumber": "Numéro de commande", + "payment": "Payer", + "paymentAmount": "Montant du paiement", + "paymentMethod": "Moyen de paiement", + "paymentSuccess": "Paiement réussi", + "productList": "Liste des produits", + "purchaseDuration": "Durée d'achat", + "recharge": "Recharger", + "rechargeAmount": "Montant de la recharge", + "rechargeNow": "Rechargez maintenant", + "renew": "Renouveler", + "renewSubscription": "Renouveler l'abonnement", + "resetPrice": "Réinitialiser le prix", + "resetTraffic": "Réinitialiser le trafic", + "resetTrafficDescription": "Réinitialiser uniquement le trafic du mois en cours", + "resetTrafficTitle": "Réinitialiser le trafic", + "scanToPay": "Veuillez scanner pour payer", + "status": { + "0": "Statut", + "1": "En attente de paiement", + "2": "Payé", + "3": "Annulé", + "4": "Fermé", + "5": "Terminé" + }, + "subscribeNow": "Abonnez-vous maintenant", + "timeExpired": "Le délai de paiement est écoulé", + "type": { + "0": "Type", + "1": "Nouvel achat", + "2": "Renouvellement", + "3": "Réinitialiser le trafic", + "4": "Recharger" + }, + "viewDocument": "Voir le document", + "waitingForPayment": "En attente de paiement" +} diff --git a/apps/user/locales/fr-FR/profile.json b/apps/user/locales/fr-FR/profile.json new file mode 100644 index 0000000..c06a004 --- /dev/null +++ b/apps/user/locales/fr-FR/profile.json @@ -0,0 +1,28 @@ +{ + "accountSettings": { + "accountSettings": "Paramètres du compte", + "loginPassword": "Mot de passe de connexion", + "newPassword": "Nouveau mot de passe", + "passwordMismatch": "Les deux mots de passe ne correspondent pas", + "repeatNewPassword": "Répéter le nouveau mot de passe", + "updatePassword": "Mettre à jour le mot de passe", + "updateSuccess": "Mise à jour réussie" + }, + "notify": { + "bind": "Lier", + "emailNotification": "Notification par e-mail", + "notificationSettings": "Paramètres de notification", + "telegramId": "ID Telegram", + "telegramIdPlaceholder": "Entrez l'ID Telegram", + "telegramNotification": "Notification Telegram", + "updateSuccess": "Mise à jour réussie" + }, + "notifyEvent": { + "balanceChange": "Changement de solde", + "finance": "Finance", + "login": "Connexion", + "notificationEvents": "Événements de notification", + "subscribe": "S'abonner", + "updateSuccess": "Mise à jour réussie" + } +} diff --git a/apps/user/locales/fr-FR/subscribe.json b/apps/user/locales/fr-FR/subscribe.json new file mode 100644 index 0000000..a65dc63 --- /dev/null +++ b/apps/user/locales/fr-FR/subscribe.json @@ -0,0 +1,31 @@ +{ + "all": "Tout", + "billing": { + "billingTitle": "Facture des produits", + "couponDiscount": "Réduction du code promo", + "duration": "Durée du forfait", + "fee": "Frais de service", + "months": "mois", + "price": "Prix", + "productDiscount": "Réduction sur le produit", + "total": "Prix total" + }, + "buy": "Acheter", + "category": "Catégorie", + "detail": { + "availableTraffic": "Trafic disponible", + "connectedDevices": "Nombre d'IP connectées simultanément", + "connectionSpeed": "Vitesse de connexion", + "productDetail": "Détails du produit" + }, + "methods": { + "alipay_f2f": "Alipay (face à face)", + "balance": "Solde", + "epay": "Epay", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "perMonth": "mois", + "productDescription": "Description du produit", + "products": "produits" +} diff --git a/apps/user/locales/fr-FR/ticket.json b/apps/user/locales/fr-FR/ticket.json new file mode 100644 index 0000000..a281dd4 --- /dev/null +++ b/apps/user/locales/fr-FR/ticket.json @@ -0,0 +1,26 @@ +{ + "cancel": "Annuler", + "check": "Vérifier", + "close": "Fermer", + "closeSuccess": "Fermeture du ticket réussie", + "closeWarning": "Une fois le ticket fermé, vous ne pourrez plus répondre.", + "confirm": "Confirmer", + "confirmClose": "Confirmer la fermeture du ticket ?", + "createSuccess": "Création réussie", + "createTicket": "Créer un ticket", + "createTicketDescription": "Réponse au ticket sous 24 heures", + "description": "description", + "inputPlaceholder": "Entrez votre message", + "reply": "réponse", + "status": { + "0": "Statut", + "1": "En attente", + "2": "En cours", + "3": "Résolu", + "4": "Fermé" + }, + "submit": "Soumettre", + "ticketList": "Liste des tickets", + "title": "Titre", + "updatedAt": "Mis à jour à" +} diff --git a/apps/user/locales/fr-FR/wallet.json b/apps/user/locales/fr-FR/wallet.json new file mode 100644 index 0000000..d24ed0f --- /dev/null +++ b/apps/user/locales/fr-FR/wallet.json @@ -0,0 +1,15 @@ +{ + "amount": "Montant", + "balance": "Solde", + "createdAt": "temps", + "title": "Solde du compte", + "type": { + "0": "Type", + "1": "Recharge", + "2": "Retrait", + "3": "Achat", + "4": "Remboursement", + "5": "Récompense", + "6": "Commission" + } +} diff --git a/apps/user/locales/hi-IN/affiliate.json b/apps/user/locales/hi-IN/affiliate.json new file mode 100644 index 0000000..549ae42 --- /dev/null +++ b/apps/user/locales/hi-IN/affiliate.json @@ -0,0 +1,11 @@ +{ + "commissionInfo": "राशि की गणना, आमंत्रण कमीशन स्वचालित रूप से शेष राशि में स्थानांतरित", + "commissionRate": "कमीशन दर", + "copyInviteLink": "आमंत्रण लिंक की प्रतिलिपि बनाएँ", + "copySuccess": "प्रतिलिपि सफल", + "inviteCode": "आमंत्रण कोड", + "inviteRecords": "आमंत्रण रिकॉर्ड", + "registrationTime": "पंजीकरण समय", + "totalCommission": "कुल कमीशन", + "userEmail": "उपयोगकर्ता ईमेल" +} diff --git a/apps/user/locales/hi-IN/auth.json b/apps/user/locales/hi-IN/auth.json new file mode 100644 index 0000000..b2b042b --- /dev/null +++ b/apps/user/locales/hi-IN/auth.json @@ -0,0 +1,38 @@ +{ + "check": { + "checking": "सत्यापन हो रहा है...", + "continue": "जारी रखें", + "description": "लॉगिन या पंजीकरण जारी रखने के लिए कृपया अपना ईमेल दर्ज करें।", + "email": "कृपया एक मान्य ईमेल पता दर्ज करें।", + "title": "लॉगिन/पंजीकरण", + "whitelist": "ईमेल डोमेन अनुमत श्वेतसूची में नहीं है।" + }, + "login": { + "description": "कृपया लॉगिन करने के लिए अपनी खाता जानकारी दर्ज करें।", + "forgotPassword": "पासवर्ड भूल गए?", + "success": "लॉगिन सफल!", + "switchAccount": "पंजीकरण/खाता बदलें", + "title": "लॉगिन" + }, + "orWithEmail": "या ईमेल का उपयोग करें", + "register": { + "description": "नया खाता बनाएं, पंजीकरण के लिए अपनी जानकारी भरें।", + "existingAccount": "पहले से खाता है?", + "get": "प्राप्त करें", + "invite": "आमंत्रण कोड", + "message": "#### प्रिय उपयोगकर्ता, नमस्ते!\n\nहमारे प्रति आपकी रुचि और समर्थन के लिए धन्यवाद। साइट संचालन रणनीति में बदलाव के कारण, हमने नए उपयोगकर्ता पंजीकरण को बंद कर दिया है। इस अवधि के दौरान, मौजूदा उपयोगकर्ताओं के उपयोग पर कोई प्रभाव नहीं पड़ेगा।\n\nहम आपको बेहतर सेवा और अनुभव प्रदान करने के लिए प्रतिबद्ध हैं, इसलिए पंजीकरण बंद रहने के दौरान हम व्यापक प्रणाली अनुकूलन और कार्यक्षमता उन्नयन करेंगे। भविष्य में, हम आपको बेहतर सामग्री और सेवाओं के साथ स्वागत करेंगे।\n\nहमारी वेबसाइट और सोशल मीडिया प्लेटफॉर्म पर नवीनतम अपडेट और सूचनाएं प्राप्त करने के लिए ध्यान दें। आपके समझ और समर्थन के लिए धन्यवाद।\n\nयदि आपके कोई प्रश्न हैं या सहायता की आवश्यकता है, तो कृपया हमारी ग्राहक सेवा टीम से संपर्क करें।\n\n**आपके समर्थन और समझ के लिए एक बार फिर धन्यवाद।**", + "passwordMismatch": "दोनों पासवर्ड मेल नहीं खा रहे हैं", + "success": "पंजीकरण सफल, स्वचालित रूप से लॉग इन हो गया!", + "switchToLogin": "लॉगिन/ईमेल रीसेट करें", + "title": "पंजीकरण" + }, + "reset": { + "description": "कृपया अपना ईमेल पता दर्ज करें ताकि पासवर्ड रीसेट किया जा सके।", + "existingAccount": "पहले से खाता है?", + "get": "प्राप्त करें", + "success": "पासवर्ड रीसेट सफल, स्वचालित रूप से लॉगिन पर स्विच हो गया है!", + "switchToLogin": "लॉगिन/रजिस्टर", + "title": "पासवर्ड रीसेट" + }, + "tos": "सेवा की शर्तें" +} diff --git a/apps/user/locales/hi-IN/common.json b/apps/user/locales/hi-IN/common.json new file mode 100644 index 0000000..c459dfa --- /dev/null +++ b/apps/user/locales/hi-IN/common.json @@ -0,0 +1,52 @@ +{ + "empty": [ + "कल्पना कीजिए कि यहाँ अद्भुत सामग्री से भरा हुआ है! फिलहाल, केवल कल्पना पर निर्भर करें...", + "यह क्षेत्र रहस्यमय तरीके से गायब हो गया है, हम इसे वापस बुला रहे हैं!", + "अरे, कुछ भी नहीं हुआ... आप खुद कुछ जोड़ सकते हैं!", + "यह ऐसा है जैसे संगीत कार्यक्रम में मंच पर कोई नहीं है... क्यों न आप जाकर प्रदर्शन करें?", + "आपने एक खाली स्वर्ग ढूंढ लिया है! क्या आप यहाँ एक घर बनाना चाहेंगे?", + "यहाँ फिलहाल कुछ भी नहीं है, लेकिन रचनात्मकता यहीं से शुरू होती है!", + "कुछ भी नहीं है... लेकिन चिंता न करें, यह सिर्फ शुरुआत है!", + "यहाँ एक बड़ा आश्चर्य तैयार था, लेकिन आश्चर्य भाग गया!", + "फिलहाल कुछ भी नहीं है, जैसे स्नैक कैबिनेट खाली हो गया हो।", + "यह खाली जगह अपने नायक के आने का इंतजार कर रही है!" + ], + "list": { + "pageInfo": "पृष्ठ {current} का {total} पृष्ठों में", + "rowsPerPage": "प्रति पृष्ठ पंक्तियाँ", + "selectedItems": "{total} पंक्तियाँ चुनी गईं" + }, + "login": "लॉगिन/रजिस्टर", + "request": { + "10001": "प्रश्न सफल नहीं हुआ है, कृपया थोड़ी देर बाद पुनः प्रयास करें या अपनी शर्तें जांचें।", + "10002": "अद्यतन क्रिया सफल नहीं हुई, कृपया थोड़ी देर बाद पुनः प्रयास करें।", + "10003": "अभी के लिए सम्मिलन क्रिया पूरी नहीं हो सकी, कृपया थोड़ी देर बाद पुनः प्रयास करें।", + "10004": "हटाने की क्रिया पूरी नहीं हो सकी, कृपया थोड़ी देर बाद पुनः प्रयास करें।", + "20001": "यह उपयोगकर्ता जानकारी पहले से मौजूद है, कृपया जानकारी बदलकर पुनः प्रयास करें।", + "20002": "यह उपयोगकर्ता नहीं मिला, कृपया जानकारी की पुष्टि करके पुनः प्रयास करें।", + "20003": "आपके द्वारा दर्ज किया गया पासवर्ड गलत है, कृपया पुनः दर्ज करें।", + "20004": "यह उपयोगकर्ता निष्क्रिय कर दिया गया है, यदि कोई प्रश्न हो तो कृपया ग्राहक सेवा से संपर्क करें।", + "20005": "शेष राशि अपर्याप्त है, कृपया पुनः प्रयास करने से पहले रिचार्ज करें।", + "20006": "पंजीकरण सुविधा अस्थायी रूप से उपलब्ध नहीं है, कृपया थोड़ी देर बाद पुनः प्रयास करें।", + "30001": "यह नोड पहले से मौजूद है, कृपया पुनः जोड़ने का प्रयास न करें।", + "30002": "संबंधित नोड नहीं मिला, कृपया जाँचें और पुनः प्रयास करें।", + "30003": "समूह पहले से मौजूद है, कृपया अन्य नाम का उपयोग करने का प्रयास करें।", + "30004": "यह समूह नहीं मिला, कृपया जानकारी की पुष्टि करके पुनः प्रयास करें।", + "30005": "इस समूह में अभी भी सामग्री है, कृपया इसे खाली करके पुनः प्रयास करें।", + "400": "अनुरोध पैरामीटर सही नहीं हैं, कृपया जाँचें और पुनः सबमिट करें।", + "40002": "मान्य टोकन नहीं मिला, कृपया पहले लॉगिन करें और फिर पुनः प्रयास करें।", + "40003": "वर्तमान टोकन अमान्य है, कृपया पुनः प्राप्त करके पुनः प्रयास करें।", + "40004": "टोकन की समय सीमा समाप्त हो गई है, कृपया पुनः लॉगिन करें।", + "40005": "आपके पास पहुंच की अनुमति नहीं है, यदि कोई प्रश्न हो तो कृपया व्यवस्थापक से संपर्क करें।", + "401": "अनुरोध बहुत बार किया गया है, कृपया थोड़ी देर बाद पुनः प्रयास करें।", + "500": "सर्वर में कुछ समस्या है, कृपया थोड़ी देर बाद पुनः प्रयास करें।", + "50001": "संबंधित कूपन जानकारी नहीं मिली, कृपया जाँचें और पुनः प्रयास करें।", + "50002": "यह कूपन पहले ही उपयोग किया जा चुका है, इसे पुनः उपयोग नहीं किया जा सकता।", + "60001": "सदस्यता की समय सीमा समाप्त हो गई है, कृपया नवीनीकरण के बाद उपयोग करें।", + "60002": "अभी के लिए इस सदस्यता का उपयोग नहीं किया जा सकता, कृपया थोड़ी देर बाद पुनः प्रयास करें।", + "70001": "सत्यापन कोड गलत है, कृपया पुनः दर्ज करें।", + "80001": "कार्य सफलतापूर्वक कतार में नहीं जोड़ा गया, कृपया थोड़ी देर बाद पुनः प्रयास करें।", + "undefined": "सिस्टम में त्रुटि हुई है, कृपया थोड़ी देर बाद पुनः प्रयास करें।" + }, + "unlimited": "असीमित" +} diff --git a/apps/user/locales/hi-IN/dashboard.json b/apps/user/locales/hi-IN/dashboard.json new file mode 100644 index 0000000..f88db93 --- /dev/null +++ b/apps/user/locales/hi-IN/dashboard.json @@ -0,0 +1,25 @@ +{ + "cancel": "रद्द करें", + "confirm": "पुष्टि करें", + "confirmResetSubscription": "क्या आप सदस्यता पता रीसेट करने की पुष्टि करते हैं?", + "copy": "प्रतिलिपि", + "copyFailure": "प्रतिलिपि बनाने में विफल, कृपया मैन्युअल रूप से प्रतिलिपि बनाएँ", + "copySuccess": "प्रतिलिपि सफल", + "download": "डाउनलोड", + "expirationDays": "समाप्ति समय/दिन", + "import": "आयात", + "latestAnnouncement": "नवीनतम घोषणा", + "manualImportMessage": "यह ऐप फिलहाल जागृत करने का समर्थन नहीं करता है, कृपया मैन्युअल रूप से आयात करें, सदस्यता पता स्वचालित रूप से कॉपी कर लिया गया है।", + "mySubscriptions": "मेरी सदस्यताएँ", + "nextResetDays": "अगली रीसेट/दिन", + "prompt": "प्रॉम्प्ट", + "purchaseSubscription": "सदस्यता खरीदें", + "qrCode": "क्यूआर कोड", + "resetSubscription": "सदस्यता पता रीसेट करें", + "resetSuccess": "रीसेट सफल", + "scanToSubscribe": "स्कैन करके सदस्यता लें", + "subscriptionUrl": "सदस्यता पता", + "totalTraffic": "कुल ट्रैफिक", + "unknown": "अज्ञात", + "used": "उपयोग किया गया" +} diff --git a/apps/user/locales/hi-IN/document.json b/apps/user/locales/hi-IN/document.json new file mode 100644 index 0000000..5b0d33a --- /dev/null +++ b/apps/user/locales/hi-IN/document.json @@ -0,0 +1,6 @@ +{ + "all": "सभी", + "document": "दस्तावेज़", + "read": "पढ़ें", + "tutorial": "ट्यूटोरियल" +} diff --git a/apps/user/locales/hi-IN/index.json b/apps/user/locales/hi-IN/index.json new file mode 100644 index 0000000..c64adf9 --- /dev/null +++ b/apps/user/locales/hi-IN/index.json @@ -0,0 +1,14 @@ +{ + "global_map_description": "निर्बाध वैश्विक कनेक्शन का अन्वेषण करें। अपनी आवश्यकताओं के अनुसार नेटवर्क सेवा का चयन करें और कहीं भी, कभी भी जुड़े रहें।", + "global_map_itle": "वैश्विक कनेक्टिविटी, सरल और निश्चिंत", + "locations": "क्षेत्र", + "per_month": "प्रति माह", + "product_showcase_description": "आइए हम आपके लिए सबसे उपयुक्त पैकेज का चयन करें और इसे खुशी से अन्वेषण करें।", + "product_showcase_title": "अपना पैकेज चुनें", + "servers": "सर्वर", + "started": "शुरू करें", + "subscribe": "सदस्यता लें", + "tos": "सेवा अनुबंध", + "users": "उपयोगकर्ता", + "welcome": "स्वागत है" +} diff --git a/apps/user/locales/hi-IN/language.json b/apps/user/locales/hi-IN/language.json new file mode 100644 index 0000000..026b270 --- /dev/null +++ b/apps/user/locales/hi-IN/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "चेक", + "de-DE": "जर्मन", + "en-US": "अंग्रेज़ी", + "es-ES": "स्पेनिश", + "es-MX": "स्पेनिश (मेक्सिको)", + "fi-FI": "फिनिश", + "fr-FR": "फ्रेंच", + "hi-IN": "हिंदी", + "hu-HU": "हंगेरियन", + "ja-JP": "जापानी", + "ko-KR": "कोरियाई", + "no-NO": "नॉर्वेजियन", + "pl-PL": "पोलिश", + "pt-BR": "पुर्तगाली (ब्राज़ील)", + "ro-RO": "रोमानियाई", + "ru-RU": "रूसी", + "th-TH": "थाई", + "tr-TR": "तुर्की", + "uk-UA": "यूक्रेनी", + "vi-VN": "वियतनामी", + "zh-CN": "हिन्दी (भारत)", + "zh-TW": "चीनी (पारंपरिक)" +} diff --git a/apps/user/locales/hi-IN/layout.json b/apps/user/locales/hi-IN/layout.json new file mode 100644 index 0000000..3ba6fd1 --- /dev/null +++ b/apps/user/locales/hi-IN/layout.json @@ -0,0 +1,7 @@ +{ + "accountBalance": "खाता शेष", + "copyInviteLink": "आमंत्रण लिंक कॉपी करें", + "copySuccess": "आमंत्रण लिंक सफलतापूर्वक कॉपी हो गई", + "inviteCode": "आमंत्रण कोड", + "recharge": "रिचार्ज" +} diff --git a/apps/user/locales/hi-IN/menu.json b/apps/user/locales/hi-IN/menu.json new file mode 100644 index 0000000..9ee7739 --- /dev/null +++ b/apps/user/locales/hi-IN/menu.json @@ -0,0 +1,17 @@ +{ + "affiliate": "मेरे निमंत्रण", + "announcement": "घोषणाओं की सूची", + "dashboard": "डैशबोर्ड", + "document": "उपयोग दस्तावेज़", + "finance": "वित्त", + "help": "सहायता", + "logout": "लॉगआउट", + "order": "आदेश सूची", + "payment": "ऑर्डर विवरण", + "personal": "व्यक्तिगत", + "profile": "प्रोफ़ाइल", + "server": "सर्वर", + "subscribe": "सदस्यता खरीदें", + "ticket": "मेरा टिकट", + "wallet": "वित्त केंद्र" +} diff --git a/apps/user/locales/hi-IN/order.json b/apps/user/locales/hi-IN/order.json new file mode 100644 index 0000000..f88042d --- /dev/null +++ b/apps/user/locales/hi-IN/order.json @@ -0,0 +1,61 @@ +{ + "balanceRecharge": "शेष राशि रिचार्ज", + "buyNow": "अभी खरीदें", + "buySubscription": "सदस्यता खरीदें", + "cancel": "रद्द करें", + "createdAt": "निर्माण समय", + "description": "एक क्लिक में रिचार्ज, आसानी से पूरा करें", + "detail": "विवरण", + "enterAmount": "कृपया रिचार्ज राशि दर्ज करें", + "enterCoupon": "कृपया कूपन कोड दर्ज करें", + "goToPayment": "भुगतान के लिए जाएं", + "methods": { + "alipay_f2f": "अलीपे (सामना-सामना)", + "balance": "शेष राशि", + "epay": "ई-पे", + "stripe_alipay": "स्ट्राइप (अलीपे)", + "stripe_wechat_pay": "स्ट्राइप (वीचैट)" + }, + "month": "महीना", + "months": "महीने", + "name": "नाम", + "orderClosed": "आदेश बंद कर दिया गया है", + "orderList": "आदेश सूची", + "orderNo": "आदेश संख्या", + "orderNumber": "आदेश संख्या", + "payment": "भुगतान करें", + "paymentAmount": "भुगतान राशि", + "paymentMethod": "भुगतान विधि", + "paymentSuccess": "भुगतान सफल", + "productList": "उत्पाद सूची", + "purchaseDuration": "खरीद की अवधि", + "recharge": "रिचार्ज", + "rechargeAmount": "रिचार्ज राशि", + "rechargeNow": "अभी रिचार्ज करें", + "renew": "नवीनीकरण", + "renewSubscription": "सदस्यता नवीनीकरण", + "resetPrice": "मूल्य रीसेट करें", + "resetTraffic": "ट्रैफ़िक रीसेट करें", + "resetTrafficDescription": "केवल इस महीने की ट्रैफिक को रीसेट करें", + "resetTrafficTitle": "ट्रैफ़िक रीसेट करें", + "scanToPay": "कृपया स्कैन करके भुगतान करें", + "status": { + "0": "स्थिति", + "1": "भुगतान लंबित", + "2": "भुगतान हो चुका है", + "3": "रद्द कर दिया गया", + "4": "बंद कर दिया गया", + "5": "पूरा हो चुका है" + }, + "subscribeNow": "अभी सदस्यता लें", + "timeExpired": "भुगतान का समय समाप्त हो गया है", + "type": { + "0": "प्रकार", + "1": "नई खरीद", + "2": "नवीनीकरण", + "3": "डेटा रीसेट", + "4": "रिचार्ज" + }, + "viewDocument": "दस्तावेज़ देखें", + "waitingForPayment": "भुगतान की प्रतीक्षा" +} diff --git a/apps/user/locales/hi-IN/profile.json b/apps/user/locales/hi-IN/profile.json new file mode 100644 index 0000000..db2f3df --- /dev/null +++ b/apps/user/locales/hi-IN/profile.json @@ -0,0 +1,28 @@ +{ + "accountSettings": { + "accountSettings": "खाता सेटिंग्स", + "loginPassword": "लॉगिन पासवर्ड", + "newPassword": "नया पासवर्ड", + "passwordMismatch": "दोनों पासवर्ड मेल नहीं खाते", + "repeatNewPassword": "नया पासवर्ड दोहराएं", + "updatePassword": "पासवर्ड अपडेट करें", + "updateSuccess": "सफलतापूर्वक अपडेट किया गया" + }, + "notify": { + "bind": "बाइंड", + "emailNotification": "ईमेल सूचना", + "notificationSettings": "सूचना सेटिंग्स", + "telegramId": "टेलीग्राम आईडी", + "telegramIdPlaceholder": "टेलीग्राम आईडी दर्ज करें", + "telegramNotification": "टेलीग्राम सूचना", + "updateSuccess": "सफलतापूर्वक अपडेट किया गया" + }, + "notifyEvent": { + "balanceChange": "बैलेंस परिवर्तन", + "finance": "वित्त", + "login": "लॉगिन", + "notificationEvents": "सूचना घटनाएँ", + "subscribe": "सदस्यता लें", + "updateSuccess": "सफलतापूर्वक अपडेट किया गया" + } +} diff --git a/apps/user/locales/hi-IN/subscribe.json b/apps/user/locales/hi-IN/subscribe.json new file mode 100644 index 0000000..4ac8a7b --- /dev/null +++ b/apps/user/locales/hi-IN/subscribe.json @@ -0,0 +1,31 @@ +{ + "all": "सभी", + "billing": { + "billingTitle": "उत्पाद बिल", + "couponDiscount": "कूपन छूट", + "duration": "पैकेज अवधि", + "fee": "शुल्क", + "months": "महीने", + "price": "मूल्य", + "productDiscount": "उत्पाद छूट", + "total": "कुल मूल्य" + }, + "buy": "खरीदें", + "category": "श्रेणी", + "detail": { + "availableTraffic": "उपलब्ध ट्रैफ़िक", + "connectedDevices": "समानांतर कनेक्टेड IP संख्या", + "connectionSpeed": "कनेक्शन गति", + "productDetail": "उत्पाद विवरण" + }, + "methods": { + "alipay_f2f": "अलीपे (सामना-सामना)", + "balance": "शेष राशि", + "epay": "ई-पे", + "stripe_alipay": "स्ट्राइप (अलीपे)", + "stripe_wechat_pay": "स्ट्राइप (वीचैट)" + }, + "perMonth": "महीना", + "productDescription": "उत्पाद विवरण", + "products": "उत्पाद" +} diff --git a/apps/user/locales/hi-IN/ticket.json b/apps/user/locales/hi-IN/ticket.json new file mode 100644 index 0000000..c6bf738 --- /dev/null +++ b/apps/user/locales/hi-IN/ticket.json @@ -0,0 +1,26 @@ +{ + "cancel": "रद्द करें", + "check": "जांचें", + "close": "बंद करें", + "closeSuccess": "कार्य आदेश सफलतापूर्वक बंद हुआ", + "closeWarning": "कार्य आदेश बंद करने के बाद आप आगे उत्तर नहीं दे पाएंगे।", + "confirm": "पुष्टि करें", + "confirmClose": "क्या आप वर्क ऑर्डर बंद करने की पुष्टि करते हैं?", + "createSuccess": "सृजन सफल", + "createTicket": "टिकट बनाएं", + "createTicketDescription": "टिकट का 24 घंटे के भीतर जवाब दिया जाएगा", + "description": "विवरण", + "inputPlaceholder": "अपना संदेश दर्ज करें", + "reply": "उत्तर", + "status": { + "0": "स्थिति", + "1": "लंबित", + "2": "प्रक्रिया में", + "3": "सुलझा लिया गया", + "4": "बंद कर दिया गया" + }, + "submit": "प्रस्तुत करें", + "ticketList": "टिकट सूची", + "title": "शीर्षक", + "updatedAt": "अद्यतन समय" +} diff --git a/apps/user/locales/hi-IN/wallet.json b/apps/user/locales/hi-IN/wallet.json new file mode 100644 index 0000000..00a591c --- /dev/null +++ b/apps/user/locales/hi-IN/wallet.json @@ -0,0 +1,15 @@ +{ + "amount": "राशि", + "balance": "शेष", + "createdAt": "समय", + "title": "खाते का शेष", + "type": { + "0": "प्रकार", + "1": "रिचार्ज", + "2": "निकासी", + "3": "खरीद", + "4": "वापसी", + "5": "इनाम", + "6": "कमीशन" + } +} diff --git a/apps/user/locales/hu-HU/affiliate.json b/apps/user/locales/hu-HU/affiliate.json new file mode 100644 index 0000000..619e329 --- /dev/null +++ b/apps/user/locales/hu-HU/affiliate.json @@ -0,0 +1,11 @@ +{ + "commissionInfo": "Összeg statisztika, a meghívási jutalék automatikusan átkerül az egyenlegbe", + "commissionRate": "Jutalék aránya", + "copyInviteLink": "Meghívó link másolása", + "copySuccess": "Sikeres másolás", + "inviteCode": "meghívókód", + "inviteRecords": "Meghívási rekordok", + "registrationTime": "Regisztráció ideje", + "totalCommission": "Teljes jutalék", + "userEmail": "Felhasználó e-mail" +} diff --git a/apps/user/locales/hu-HU/auth.json b/apps/user/locales/hu-HU/auth.json new file mode 100644 index 0000000..2d86a9a --- /dev/null +++ b/apps/user/locales/hu-HU/auth.json @@ -0,0 +1,38 @@ +{ + "check": { + "checking": "Ellenőrzés folyamatban...", + "continue": "Folytatás", + "description": "Kérjük, adja meg e-mail címét a bejelentkezés vagy regisztráció folytatásához.", + "email": "Kérjük, adjon meg egy érvényes e-mail címet.", + "title": "Bejelentkezés/Regisztráció", + "whitelist": "Az e-mail domain nem szerepel az engedélyezett listán." + }, + "login": { + "description": "Kérjük, adja meg fiókadatait a bejelentkezéshez.", + "forgotPassword": "Elfelejtette a jelszavát?", + "success": "Sikeres bejelentkezés!", + "switchAccount": "Regisztráció/Fiók váltása", + "title": "Bejelentkezés" + }, + "orWithEmail": "vagy használja az e-mailt", + "register": { + "description": "Hozzon létre új fiókot, töltse ki adatait a regisztrációhoz.", + "existingAccount": "Már van fiókja?", + "get": "Megszerez", + "invite": "Meghívókód", + "message": "#### Tisztelt Felhasználó!\n\nKöszönjük érdeklődését és támogatását. Az oldal működési stratégiájának módosítása miatt lezártuk az új felhasználók regisztrációját. Ez idő alatt a meglévő felhasználók használatát semmi sem befolyásolja.\n\nElkötelezettek vagyunk abban, hogy jobb szolgáltatást és élményt nyújtsunk Önnek, ezért a regisztráció lezárása alatt átfogó rendszeroptimalizálást és funkciófrissítést végzünk. A jövőben még jobb tartalommal és szolgáltatásokkal várjuk Önt.\n\nKérjük, kövesse weboldalunkat és közösségi média platformjainkat, hogy megkapja a legfrissebb híreket és értesítéseket. Köszönjük megértését és támogatását.\n\nHa bármilyen kérdése van, vagy segítségre van szüksége, kérjük, forduljon ügyfélszolgálati csapatunkhoz.\n\n**Még egyszer köszönjük támogatását és megértését.**", + "passwordMismatch": "A két jelszó nem egyezik", + "success": "Sikeres regisztráció, automatikusan bejelentkezett!", + "switchToLogin": "Bejelentkezés/E-mail visszaállítása", + "title": "Regisztráció" + }, + "reset": { + "description": "Kérjük, adja meg e-mail címét a jelszó visszaállításához.", + "existingAccount": "Már van fiókja?", + "get": "Megkap", + "success": "A jelszó visszaállítása sikeres, automatikusan átváltott a bejelentkezésre!", + "switchToLogin": "Bejelentkezés/Regisztráció", + "title": "Jelszó visszaállítása" + }, + "tos": "Szolgáltatási feltételek" +} diff --git a/apps/user/locales/hu-HU/common.json b/apps/user/locales/hu-HU/common.json new file mode 100644 index 0000000..832429d --- /dev/null +++ b/apps/user/locales/hu-HU/common.json @@ -0,0 +1,52 @@ +{ + "empty": [ + "Képzeld el, hogy itt tele van izgalmas tartalommal! Egyelőre csak a képzeletedre hagyatkozhatsz…", + "Ez a terület titokzatosan eltűnt, éppen visszahívjuk!", + "Hoppá, semmi sem történt… talán te is hozzáadhatsz valamit!", + "Ez olyan, mintha egy koncerten a színpadon senki sem lenne… mi lenne, ha te lépnél fel?", + "Felfedeztél egy üres paradicsomot! Építenél egy házat?", + "Itt egyelőre semmi sincs, de innen indul a kreativitás!", + "Semmi sincs itt… de ne aggódj, ez csak a kezdet!", + "Itt eredetileg nagy meglepetés várt, de a meglepetés elszökött!", + "Egyelőre semmi sincs, mintha a nasiszekrényt teljesen kiürítették volna.", + "Ez az üres tér a főszereplőjére vár!" + ], + "list": { + "pageInfo": "{current}. oldal, összesen {total} oldal", + "rowsPerPage": "Sorok száma oldalanként", + "selectedItems": "Kiválasztott {total} sor" + }, + "login": "Bejelentkezés/Regisztráció", + "request": { + "10001": "A lekérdezés egyelőre nem sikerült, kérjük, próbálja meg később újra, vagy ellenőrizze a feltételeit.", + "10002": "A frissítési művelet nem sikerült, kérjük, próbálja meg később újra.", + "10003": "Az adatbevitel jelenleg nem lehetséges, kérjük, próbálja meg később újra.", + "10004": "A törlési művelet nem sikerült, kérjük, próbálja meg később újra.", + "20001": "A felhasználói információ már létezik, kérjük, módosítsa az információt, majd próbálja újra.", + "20002": "A felhasználó nem található, kérjük, ellenőrizze az információt, majd próbálja újra.", + "20003": "A megadott jelszó helytelen, kérjük, írja be újra.", + "20004": "A felhasználó le van tiltva, kérjük, vegye fel a kapcsolatot az ügyfélszolgálattal, ha kérdése van.", + "20005": "Nincs elegendő egyenleg, kérjük, töltse fel, majd próbálja újra.", + "20006": "A regisztrációs funkció jelenleg nem elérhető, kérjük, próbálja meg később újra.", + "30001": "Ez a csomópont már létezik, kérjük, ne adja hozzá újra.", + "30002": "A kapcsolódó csomópont nem található, kérjük, ellenőrizze, majd próbálja újra.", + "30003": "A csoport már létezik, kérjük, próbáljon meg másik nevet használni.", + "30004": "A csoport nem található, kérjük, ellenőrizze az információt, majd próbálja újra.", + "30005": "A csoportban még vannak tartalmak, kérjük, ürítse ki, majd próbálja újra.", + "400": "A kérés paraméterei helytelenek, kérjük, ellenőrizze és küldje be újra.", + "40002": "Érvényes token nem található, kérjük, jelentkezzen be, majd próbálja újra.", + "40003": "A jelenlegi token érvénytelen, kérjük, szerezzen be újat, majd próbálja újra.", + "40004": "A token lejárt, kérjük, jelentkezzen be újra.", + "40005": "Nincs hozzáférési jogosultsága, kérjük, vegye fel a kapcsolatot az adminisztrátorral, ha kérdése van.", + "401": "A kérések túl gyakoriak, kérjük, próbálja meg később.", + "500": "A szerver néhány problémába ütközött, kérjük, próbálja meg később.", + "50001": "A megfelelő kuponinformáció nem található, kérjük, ellenőrizze, majd próbálja újra.", + "50002": "A kupon már felhasználásra került, nem használható újra.", + "60001": "Az előfizetés lejárt, kérjük, újítsa meg, majd használja újra.", + "60002": "Az előfizetés jelenleg nem használható, kérjük, próbálja meg később újra.", + "70001": "A megerősítő kód hibás, kérjük, írja be újra.", + "80001": "A feladat nem került sikeresen a sorba, kérjük, próbálja meg később újra.", + "undefined": "Rendszerhiba történt, kérjük, próbálja meg később újra." + }, + "unlimited": "korlátlan" +} diff --git a/apps/user/locales/hu-HU/dashboard.json b/apps/user/locales/hu-HU/dashboard.json new file mode 100644 index 0000000..116c2dc --- /dev/null +++ b/apps/user/locales/hu-HU/dashboard.json @@ -0,0 +1,25 @@ +{ + "cancel": "Mégse", + "confirm": "Megerősítés", + "confirmResetSubscription": "Biztosan visszaállítja az előfizetési címet?", + "copy": "Másolás", + "copyFailure": "Másolás sikertelen, kérjük, másolja kézzel", + "copySuccess": "Sikeres másolás", + "download": "letöltés", + "expirationDays": "Lejárati idő/nap", + "import": "importálás", + "latestAnnouncement": "Legújabb bejelentés", + "manualImportMessage": "Ez az alkalmazás jelenleg nem támogatja az ébresztést, kérjük, importálja manuálisan, az előfizetési cím automatikusan másolva lett", + "mySubscriptions": "Előfizetéseim", + "nextResetDays": "Következő visszaállítás/nap", + "prompt": "figyelmeztetés", + "purchaseSubscription": "Előfizetés vásárlása", + "qrCode": "QR-kód", + "resetSubscription": "Előfizetési cím visszaállítása", + "resetSuccess": "Sikeres visszaállítás", + "scanToSubscribe": "Szkennelés előfizetéshez", + "subscriptionUrl": "Előfizetési cím", + "totalTraffic": "Összes forgalom", + "unknown": "ismeretlen", + "used": "Felhasznált" +} diff --git a/apps/user/locales/hu-HU/document.json b/apps/user/locales/hu-HU/document.json new file mode 100644 index 0000000..ca98b83 --- /dev/null +++ b/apps/user/locales/hu-HU/document.json @@ -0,0 +1,6 @@ +{ + "all": "Összes", + "document": "dokumentum", + "read": "olvasás", + "tutorial": "bemutató" +} diff --git a/apps/user/locales/hu-HU/index.json b/apps/user/locales/hu-HU/index.json new file mode 100644 index 0000000..78bfff0 --- /dev/null +++ b/apps/user/locales/hu-HU/index.json @@ -0,0 +1,14 @@ +{ + "global_map_description": "Fedezze fel a zökkenőmentes globális kapcsolatot. Válassza ki az igényeinek megfelelő hálózati szolgáltatást, és maradjon kapcsolatban bárhol, bármikor.", + "global_map_itle": "Globális összeköttetés, könnyedén és gondtalanul", + "locations": "Helyszínek", + "per_month": "Havonta", + "product_showcase_description": "Válasszuk ki az Ön számára legmegfelelőbb csomagot, és fedezze fel örömmel.", + "product_showcase_title": "Válassza ki a csomagját", + "servers": "szerverek", + "started": "Kezdés", + "subscribe": "Feliratkozás", + "tos": "Szolgáltatási feltételek", + "users": "felhasználók", + "welcome": "Üdvözöljük" +} diff --git a/apps/user/locales/hu-HU/language.json b/apps/user/locales/hu-HU/language.json new file mode 100644 index 0000000..99d8801 --- /dev/null +++ b/apps/user/locales/hu-HU/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "cseh", + "de-DE": "német", + "en-US": "angol", + "es-ES": "spanyol", + "es-MX": "spanyol (Mexikó)", + "fi-FI": "finn", + "fr-FR": "Francia", + "hi-IN": "hindi", + "hu-HU": "magyar", + "ja-JP": "Japán", + "ko-KR": "Koreai", + "no-NO": "norvég", + "pl-PL": "lengyel", + "pt-BR": "portugál (Brazília)", + "ro-RO": "román nyelv", + "ru-RU": "Orosz", + "th-TH": "thai", + "tr-TR": "török", + "uk-UA": "ukrán", + "vi-VN": "vietnámi", + "zh-CN": "kínai (egyszerűsített)", + "zh-TW": "Kínai (hagyományos)" +} diff --git a/apps/user/locales/hu-HU/layout.json b/apps/user/locales/hu-HU/layout.json new file mode 100644 index 0000000..d471a5f --- /dev/null +++ b/apps/user/locales/hu-HU/layout.json @@ -0,0 +1,7 @@ +{ + "accountBalance": "Számlaegyenleg", + "copyInviteLink": "Meghívó link másolása", + "copySuccess": "A meghívó link másolása sikerült", + "inviteCode": "meghívókód", + "recharge": "feltöltés" +} diff --git a/apps/user/locales/hu-HU/menu.json b/apps/user/locales/hu-HU/menu.json new file mode 100644 index 0000000..8c327b8 --- /dev/null +++ b/apps/user/locales/hu-HU/menu.json @@ -0,0 +1,17 @@ +{ + "affiliate": "Meghívásaim", + "announcement": "Hirdetmények listája", + "dashboard": "Irányítópult", + "document": "Használati útmutató", + "finance": "Pénzügy", + "help": "Segítség", + "logout": "Kijelentkezés", + "order": "Rendelési lista", + "payment": "Rendelési részletek", + "personal": "Személyes", + "profile": "Profil", + "server": "szolgáltatás", + "subscribe": "Előfizetés vásárlása", + "ticket": "A jegyem", + "wallet": "Pénzügyi központ" +} diff --git a/apps/user/locales/hu-HU/order.json b/apps/user/locales/hu-HU/order.json new file mode 100644 index 0000000..7a88378 --- /dev/null +++ b/apps/user/locales/hu-HU/order.json @@ -0,0 +1,61 @@ +{ + "balanceRecharge": "Egyenleg feltöltése", + "buyNow": "Vásároljon most", + "buySubscription": "Előfizetés vásárlása", + "cancel": "Mégse", + "createdAt": "Létrehozás ideje", + "description": "Egy kattintásos feltöltés, könnyedén megoldva", + "detail": "Részletek", + "enterAmount": "Kérjük, adja meg a feltöltendő összeget", + "enterCoupon": "Kérjük, adja meg a kuponkódot", + "goToPayment": "Tovább a fizetéshez", + "methods": { + "alipay_f2f": "Alipay (szemtől szemben)", + "balance": "Egyenleg", + "epay": "Epay", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "month": "hónap", + "months": "hónapok", + "name": "Név", + "orderClosed": "A rendelés lezárva", + "orderList": "Rendelési lista", + "orderNo": "Rendelésszám", + "orderNumber": "Rendelési szám", + "payment": "Fizetés", + "paymentAmount": "Fizetési összeg", + "paymentMethod": "Fizetési mód", + "paymentSuccess": "Fizetés sikeres", + "productList": "Terméklista", + "purchaseDuration": "Vásárlási időtartam", + "recharge": "feltöltés", + "rechargeAmount": "Feltöltési összeg", + "rechargeNow": "Tölts fel most", + "renew": "megújítás", + "renewSubscription": "Előfizetés megújítása", + "resetPrice": "Ár visszaállítása", + "resetTraffic": "Forgalom visszaállítása", + "resetTrafficDescription": "Csak a havi forgalom lesz visszaállítva", + "resetTrafficTitle": "Forgalom visszaállítása", + "scanToPay": "Kérjük, olvassa be a kódot a fizetéshez", + "status": { + "0": "Állapot", + "1": "Fizetésre vár", + "2": "Fizetve", + "3": "Törölve", + "4": "Lezárva", + "5": "Befejezve" + }, + "subscribeNow": "Iratkozzon fel most", + "timeExpired": "A fizetési idő lejárt", + "type": { + "0": "Típus", + "1": "Új vásárlás", + "2": "Megújítás", + "3": "Forgalom visszaállítása", + "4": "Feltöltés" + }, + "viewDocument": "Dokumentum megtekintése", + "waitingForPayment": "Fizetésre vár" +} diff --git a/apps/user/locales/hu-HU/profile.json b/apps/user/locales/hu-HU/profile.json new file mode 100644 index 0000000..f567be8 --- /dev/null +++ b/apps/user/locales/hu-HU/profile.json @@ -0,0 +1,28 @@ +{ + "accountSettings": { + "accountSettings": "Fiókbeállítások", + "loginPassword": "Bejelentkezési jelszó", + "newPassword": "Új jelszó", + "passwordMismatch": "A két jelszó nem egyezik", + "repeatNewPassword": "Új jelszó ismétlése", + "updatePassword": "Jelszó frissítése", + "updateSuccess": "Sikeres frissítés" + }, + "notify": { + "bind": "Összekapcsolás", + "emailNotification": "E-mail értesítés", + "notificationSettings": "Értesítési beállítások", + "telegramId": "Telegram azonosító", + "telegramIdPlaceholder": "Adja meg a Telegram azonosítót", + "telegramNotification": "Telegram értesítés", + "updateSuccess": "Sikeres frissítés" + }, + "notifyEvent": { + "balanceChange": "Egyenlegváltozás", + "finance": "Pénzügy", + "login": "Bejelentkezés", + "notificationEvents": "Értesítési események", + "subscribe": "Feliratkozás", + "updateSuccess": "Sikeres frissítés" + } +} diff --git a/apps/user/locales/hu-HU/subscribe.json b/apps/user/locales/hu-HU/subscribe.json new file mode 100644 index 0000000..a237f64 --- /dev/null +++ b/apps/user/locales/hu-HU/subscribe.json @@ -0,0 +1,31 @@ +{ + "all": "Összes", + "billing": { + "billingTitle": "Termékszámla", + "couponDiscount": "Kuponkedvezmény", + "duration": "Csomag időtartama", + "fee": "Kezelési díj", + "months": "hónapok", + "price": "Ár", + "productDiscount": "Termékkedvezmény", + "total": "Teljes ár" + }, + "buy": "vásárlás", + "category": "kategória", + "detail": { + "availableTraffic": "Elérhető forgalom", + "connectedDevices": "Egyidejűleg csatlakoztatott IP-k száma", + "connectionSpeed": "Kapcsolati sebesség", + "productDetail": "Termék részletei" + }, + "methods": { + "alipay_f2f": "Alipay (szemtől szemben)", + "balance": "Egyenleg", + "epay": "Epay", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "perMonth": "hónap", + "productDescription": "Termékleírás", + "products": "termékek" +} diff --git a/apps/user/locales/hu-HU/ticket.json b/apps/user/locales/hu-HU/ticket.json new file mode 100644 index 0000000..2efb08a --- /dev/null +++ b/apps/user/locales/hu-HU/ticket.json @@ -0,0 +1,26 @@ +{ + "cancel": "Mégse", + "check": "Ellenőrzés", + "close": "Bezárás", + "closeSuccess": "A munkalap sikeresen lezárva", + "closeWarning": "A munkalap lezárása után nem lehet tovább válaszolni.", + "confirm": "Megerősítés", + "confirmClose": "Biztosan bezárja a munkalapot?", + "createSuccess": "Sikeres létrehozás", + "createTicket": "Jegy létrehozása", + "createTicketDescription": "A jegyekre 24 órán belül válaszolunk", + "description": "leírás", + "inputPlaceholder": "Írja be az üzenetét", + "reply": "válasz", + "status": { + "0": "Állapot", + "1": "Feldolgozásra vár", + "2": "Feldolgozás alatt", + "3": "Megoldva", + "4": "Lezárva" + }, + "submit": "Beküldés", + "ticketList": "Jegyzéklista", + "title": "Cím", + "updatedAt": "Frissítve" +} diff --git a/apps/user/locales/hu-HU/wallet.json b/apps/user/locales/hu-HU/wallet.json new file mode 100644 index 0000000..c4f20f8 --- /dev/null +++ b/apps/user/locales/hu-HU/wallet.json @@ -0,0 +1,15 @@ +{ + "amount": "Összeg", + "balance": "Egyenleg", + "createdAt": "idő", + "title": "Számlaegyenleg", + "type": { + "0": "Típus", + "1": "Feltöltés", + "2": "Kivétel", + "3": "Vásárlás", + "4": "Visszatérítés", + "5": "Jutalom", + "6": "Jutalék" + } +} diff --git a/apps/user/locales/ja-JP/affiliate.json b/apps/user/locales/ja-JP/affiliate.json new file mode 100644 index 0000000..6003736 --- /dev/null +++ b/apps/user/locales/ja-JP/affiliate.json @@ -0,0 +1,11 @@ +{ + "commissionInfo": "統計金額、招待手数料は自動的に残高に転送されます", + "commissionRate": "手数料率", + "copyInviteLink": "招待リンクをコピー", + "copySuccess": "コピー成功", + "inviteCode": "招待コード", + "inviteRecords": "招待記録", + "registrationTime": "登録時間", + "totalCommission": "総手数料", + "userEmail": "ユーザーのメールアドレス" +} diff --git a/apps/user/locales/ja-JP/auth.json b/apps/user/locales/ja-JP/auth.json new file mode 100644 index 0000000..3b7b5a0 --- /dev/null +++ b/apps/user/locales/ja-JP/auth.json @@ -0,0 +1,38 @@ +{ + "check": { + "checking": "検証中...", + "continue": "続ける", + "description": "ログインまたは登録を続行するには、メールアドレスを入力してください。", + "email": "有効なメールアドレスを入力してください。", + "title": "ログイン/登録", + "whitelist": "メールドメインが許可されたホワイトリストにありません。" + }, + "login": { + "description": "アカウント情報を入力してログインしてください。", + "forgotPassword": "パスワードをお忘れですか?", + "success": "ログイン成功!", + "switchAccount": "登録/アカウント切り替え", + "title": "ログイン" + }, + "orWithEmail": "またはメールを使用", + "register": { + "description": "新しいアカウントを作成し、情報を入力して登録してください。", + "existingAccount": "すでにアカウントをお持ちですか?", + "get": "取得", + "invite": "招待コード", + "message": "#### 親愛なるユーザーの皆様へ\n\n私たちのサイトにご関心とご支持をいただき、誠にありがとうございます。運営方針の調整に伴い、新規ユーザー登録機能を停止いたしました。この期間中、既存ユーザーのご利用には影響はございません。\n\nより良いサービスと体験を提供するため、登録停止期間中にシステムの全面的な最適化と機能のアップグレードを行います。今後、より質の高いコンテンツとサービスで皆様をお迎えいたします。\n\n最新の情報や通知を得るために、当社のウェブサイトやソーシャルメディアプラットフォームをご覧ください。ご理解とご支持に感謝いたします。\n\nご質問やサポートが必要な場合は、いつでもカスタマーサポートチームにご連絡ください。\n\n**改めてご支持とご理解に感謝いたします。**", + "passwordMismatch": "パスワードが一致しません", + "success": "登録成功、自動的にログインしました!", + "switchToLogin": "ログイン/メールリセット", + "title": "登録" + }, + "reset": { + "description": "パスワードをリセットするには、メールアドレスを入力してください。", + "existingAccount": "すでにアカウントをお持ちですか?", + "get": "取得", + "success": "パスワードのリセットに成功しました。自動的にログインに切り替わりました!", + "switchToLogin": "ログイン/登録", + "title": "パスワードリセット" + }, + "tos": "利用規約" +} diff --git a/apps/user/locales/ja-JP/common.json b/apps/user/locales/ja-JP/common.json new file mode 100644 index 0000000..b217342 --- /dev/null +++ b/apps/user/locales/ja-JP/common.json @@ -0,0 +1,52 @@ +{ + "empty": [ + "ここには素晴らしいコンテンツが満載されるはずです!今は想像力に頼るしかありません…", + "このエリアは神秘的に消えましたが、私たちはそれを呼び戻しています!", + "あら、何も起こりませんでした…自分で何かを埋めてみてください!", + "まるでコンサートでステージに誰もいないのを発見したようなものです…あなたが上がってパフォーマンスしてみませんか?", + "空白の楽園を見つけました!家を建ててみませんか?", + "ここは一時的に何もありませんが、創造はここから始まります!", + "何もありません…でも心配しないで、これは始まりに過ぎません!", + "ここには大きなサプライズが用意されていましたが、サプライズが逃げてしまいました!", + "一時的に何もありません、お菓子の棚が空っぽになったように。", + "この空き地は主役の登場を待っています!" + ], + "list": { + "pageInfo": "第 {current} ページ、全 {total} ページ", + "rowsPerPage": "ページあたりの行数", + "selectedItems": "{total} 行が選択されました" + }, + "login": "ログイン/登録", + "request": { + "10001": "クエリがまだ成功していません。しばらくしてから再試行するか、条件を確認してください。", + "10002": "更新操作が成功しませんでした。しばらくしてから再試行してください。", + "10003": "挿入操作を完了できません。しばらくしてから再試行してください。", + "10004": "削除操作が完了しませんでした。しばらくしてから再試行してください。", + "20001": "このユーザー情報は既に存在します。情報を変更して再試行してください。", + "20002": "ユーザーが見つかりません。情報を確認して再試行してください。", + "20003": "入力したパスワードが正しくありません。再入力してください。", + "20004": "このユーザーは無効になっています。疑問がある場合はカスタマーサービスにお問い合わせください。", + "20005": "残高が不足しています。チャージしてから再試行してください。", + "20006": "登録機能は一時的に利用できません。しばらくしてから再試行してください。", + "30001": "このノードは既に存在します。重複して追加しないでください。", + "30002": "関連するノードが見つかりません。確認して再試行してください。", + "30003": "グループは既に存在します。他の名前を使用してみてください。", + "30004": "グループが見つかりません。情報を確認して再試行してください。", + "30005": "このグループにはまだ内容があります。空にしてから再試行してください。", + "400": "リクエストパラメータが正しくありません。確認して再送信してください。", + "40002": "有効なトークンが見つかりません。ログインしてから再試行してください。", + "40003": "現在のトークンは無効です。再取得してから再試行してください。", + "40004": "トークンの有効期限が切れています。再度ログインしてください。", + "40005": "アクセス権がありません。疑問がある場合は管理者にお問い合わせください。", + "401": "リクエストが多すぎます。しばらくしてから再試行してください。", + "500": "サーバーに問題が発生しました。しばらくしてから再試行してください。", + "50001": "対応するクーポン情報が見つかりません。確認して再試行してください。", + "50002": "このクーポンは既に使用されています。再利用できません。", + "60001": "サブスクリプションの有効期限が切れています。更新してからご利用ください。", + "60002": "このサブスクリプションは一時的に使用できません。しばらくしてから再試行してください。", + "70001": "認証コードが間違っています。再入力してください。", + "80001": "タスクがキューに正常に追加されませんでした。しばらくしてから再試行してください。", + "undefined": "システムエラーが発生しました。しばらくしてから再試行してください。" + }, + "unlimited": "無制限" +} diff --git a/apps/user/locales/ja-JP/dashboard.json b/apps/user/locales/ja-JP/dashboard.json new file mode 100644 index 0000000..e0fe539 --- /dev/null +++ b/apps/user/locales/ja-JP/dashboard.json @@ -0,0 +1,25 @@ +{ + "cancel": "キャンセル", + "confirm": "確認", + "confirmResetSubscription": "サブスクリプションアドレスをリセットしてもよろしいですか?", + "copy": "コピー", + "copyFailure": "コピーに失敗しました。手動でコピーしてください", + "copySuccess": "コピー成功", + "download": "ダウンロード", + "expirationDays": "有効期限/日", + "import": "インポート", + "latestAnnouncement": "最新のお知らせ", + "manualImportMessage": "このアプリは現在起動をサポートしていません。手動でインポートしてください。サブスクリプションアドレスは自動的にコピーされました。", + "mySubscriptions": "私の購読", + "nextResetDays": "次のリセット/日", + "prompt": "プロンプト", + "purchaseSubscription": "サブスクリプションを購入", + "qrCode": "QRコード", + "resetSubscription": "サブスクリプションアドレスをリセットする", + "resetSuccess": "リセット成功", + "scanToSubscribe": "スキャンして購読", + "subscriptionUrl": "購読URL", + "totalTraffic": "総トラフィック", + "unknown": "未知", + "used": "使用済み" +} diff --git a/apps/user/locales/ja-JP/document.json b/apps/user/locales/ja-JP/document.json new file mode 100644 index 0000000..bc9588c --- /dev/null +++ b/apps/user/locales/ja-JP/document.json @@ -0,0 +1,6 @@ +{ + "all": "すべて", + "document": "ドキュメント", + "read": "読む", + "tutorial": "チュートリアル" +} diff --git a/apps/user/locales/ja-JP/index.json b/apps/user/locales/ja-JP/index.json new file mode 100644 index 0000000..959b03d --- /dev/null +++ b/apps/user/locales/ja-JP/index.json @@ -0,0 +1,14 @@ +{ + "global_map_description": "シームレスなグローバル接続を探索しましょう。あなたのニーズに合ったネットワークサービスを選び、いつでもどこでも接続を維持しましょう。", + "global_map_itle": "世界をつなぎ、安心を提供", + "locations": "地域", + "per_month": "毎月", + "product_showcase_description": "あなたに最適なプランを選び、楽しく探求しましょう。", + "product_showcase_title": "プランを選択", + "servers": "サーバー", + "started": "開始する", + "subscribe": "購読", + "tos": "サービス利用規約", + "users": "ユーザー", + "welcome": "ようこそ" +} diff --git a/apps/user/locales/ja-JP/language.json b/apps/user/locales/ja-JP/language.json new file mode 100644 index 0000000..6bb13ee --- /dev/null +++ b/apps/user/locales/ja-JP/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "チェコ語", + "de-DE": "ドイツ語", + "en-US": "英語", + "es-ES": "スペイン語", + "es-MX": "スペイン語(メキシコ)", + "fi-FI": "フィンランド語", + "fr-FR": "フランス語", + "hi-IN": "ヒンディー語", + "hu-HU": "ハンガリー語", + "ja-JP": "日本語", + "ko-KR": "韓国語", + "no-NO": "ノルウェー語", + "pl-PL": "ポーランド語", + "pt-BR": "ポルトガル語(ブラジル)", + "ro-RO": "ルーマニア語", + "ru-RU": "ロシア語", + "th-TH": "タイ語", + "tr-TR": "トルコ語", + "uk-UA": "ウクライナ語", + "vi-VN": "ベトナム語", + "zh-CN": "日本語", + "zh-TW": "中国語(繁体)" +} diff --git a/apps/user/locales/ja-JP/layout.json b/apps/user/locales/ja-JP/layout.json new file mode 100644 index 0000000..041a7a0 --- /dev/null +++ b/apps/user/locales/ja-JP/layout.json @@ -0,0 +1,7 @@ +{ + "accountBalance": "口座残高", + "copyInviteLink": "招待リンクをコピー", + "copySuccess": "招待リンクのコピーに成功しました", + "inviteCode": "招待コード", + "recharge": "チャージ" +} diff --git a/apps/user/locales/ja-JP/menu.json b/apps/user/locales/ja-JP/menu.json new file mode 100644 index 0000000..ab4d0fe --- /dev/null +++ b/apps/user/locales/ja-JP/menu.json @@ -0,0 +1,17 @@ +{ + "affiliate": "私の招待", + "announcement": "お知らせ一覧", + "dashboard": "ダッシュボード", + "document": "使用ドキュメント", + "finance": "財務", + "help": "ヘルプ", + "logout": "ログアウト", + "order": "注文リスト", + "payment": "注文の詳細", + "personal": "個人", + "profile": "プロフィール", + "server": "サーバー", + "subscribe": "サブスクリプションを購入", + "ticket": "私のチケット", + "wallet": "ウォレット" +} diff --git a/apps/user/locales/ja-JP/order.json b/apps/user/locales/ja-JP/order.json new file mode 100644 index 0000000..c549fb1 --- /dev/null +++ b/apps/user/locales/ja-JP/order.json @@ -0,0 +1,61 @@ +{ + "balanceRecharge": "残高チャージ", + "buyNow": "今すぐ購入", + "buySubscription": "サブスクリプションを購入", + "cancel": "キャンセル", + "createdAt": "作成日時", + "description": "ワンクリックでチャージ、簡単に完了", + "detail": "詳細", + "enterAmount": "チャージ金額を入力してください", + "enterCoupon": "クーポンコードを入力してください", + "goToPayment": "支払いに進む", + "methods": { + "alipay_f2f": "支付宝(対面)", + "balance": "残高", + "epay": "イージーペイ", + "stripe_alipay": "Stripe(支付宝)", + "stripe_wechat_pay": "Stripe(微信)" + }, + "month": "ヶ月", + "months": "ヶ月", + "name": "名前", + "orderClosed": "注文は締め切られました", + "orderList": "注文リスト", + "orderNo": "注文番号", + "orderNumber": "注文番号", + "payment": "支払いに進む", + "paymentAmount": "支払金額", + "paymentMethod": "支払い方法", + "paymentSuccess": "支払い成功", + "productList": "製品リスト", + "purchaseDuration": "購入期間", + "recharge": "チャージ", + "rechargeAmount": "チャージ金額", + "rechargeNow": "今すぐチャージ", + "renew": "更新", + "renewSubscription": "サブスクリプションを更新する", + "resetPrice": "リセット価格", + "resetTraffic": "トラフィックをリセット", + "resetTrafficDescription": "今月のトラフィックのみリセットされます", + "resetTrafficTitle": "トラフィックのリセット", + "scanToPay": "スキャンしてお支払いください", + "status": { + "0": "状態", + "1": "支払い待ち", + "2": "支払い済み", + "3": "キャンセル済み", + "4": "クローズ済み", + "5": "完了済み" + }, + "subscribeNow": "今すぐ購読", + "timeExpired": "支払い時間が過ぎました", + "type": { + "0": "タイプ", + "1": "新規購入", + "2": "更新", + "3": "データリセット", + "4": "チャージ" + }, + "viewDocument": "ドキュメントを表示", + "waitingForPayment": "支払い待ち" +} diff --git a/apps/user/locales/ja-JP/profile.json b/apps/user/locales/ja-JP/profile.json new file mode 100644 index 0000000..84fe98d --- /dev/null +++ b/apps/user/locales/ja-JP/profile.json @@ -0,0 +1,28 @@ +{ + "accountSettings": { + "accountSettings": "アカウント設定", + "loginPassword": "ログインパスワード", + "newPassword": "新しいパスワード", + "passwordMismatch": "パスワードが一致しません", + "repeatNewPassword": "新しいパスワードを再入力", + "updatePassword": "パスワードを更新", + "updateSuccess": "更新成功" + }, + "notify": { + "bind": "バインド", + "emailNotification": "メール通知", + "notificationSettings": "通知設定", + "telegramId": "Telegram ID", + "telegramIdPlaceholder": "Telegram IDを入力", + "telegramNotification": "Telegram通知", + "updateSuccess": "更新成功" + }, + "notifyEvent": { + "balanceChange": "残高の変動", + "finance": "財務", + "login": "ログイン", + "notificationEvents": "通知イベント", + "subscribe": "購読", + "updateSuccess": "更新成功" + } +} diff --git a/apps/user/locales/ja-JP/subscribe.json b/apps/user/locales/ja-JP/subscribe.json new file mode 100644 index 0000000..843d2e3 --- /dev/null +++ b/apps/user/locales/ja-JP/subscribe.json @@ -0,0 +1,31 @@ +{ + "all": "すべて", + "billing": { + "billingTitle": "商品請求書", + "couponDiscount": "クーポン割引", + "duration": "プラン期間", + "fee": "手数料", + "months": "ヶ月", + "price": "価格", + "productDiscount": "商品割引", + "total": "合計" + }, + "buy": "購入", + "category": "カテゴリー", + "detail": { + "availableTraffic": "利用可能なトラフィック", + "connectedDevices": "同時接続 IP 数", + "connectionSpeed": "接続速度", + "productDetail": "商品詳細" + }, + "methods": { + "alipay_f2f": "支付宝(対面)", + "balance": "残高", + "epay": "イージーペイ", + "stripe_alipay": "Stripe(支付宝)", + "stripe_wechat_pay": "Stripe(微信)" + }, + "perMonth": "月", + "productDescription": "商品説明", + "products": "商品" +} diff --git a/apps/user/locales/ja-JP/ticket.json b/apps/user/locales/ja-JP/ticket.json new file mode 100644 index 0000000..eef89ce --- /dev/null +++ b/apps/user/locales/ja-JP/ticket.json @@ -0,0 +1,26 @@ +{ + "cancel": "キャンセル", + "check": "確認", + "close": "閉じる", + "closeSuccess": "チケットが正常にクローズされました", + "closeWarning": "工単を閉じると、返信を続けることができなくなります。", + "confirm": "確認", + "confirmClose": "工単を閉じることを確認しますか?", + "createSuccess": "作成成功", + "createTicket": "チケットを作成する", + "createTicketDescription": "チケットは24時間以内に返信されます", + "description": "説明", + "inputPlaceholder": "メッセージを入力してください", + "reply": "返信", + "status": { + "0": "ステータス", + "1": "未処理", + "2": "処理中", + "3": "解決済み", + "4": "クローズ済み" + }, + "submit": "送信", + "ticketList": "チケットリスト", + "title": "タイトル", + "updatedAt": "更新日時" +} diff --git a/apps/user/locales/ja-JP/wallet.json b/apps/user/locales/ja-JP/wallet.json new file mode 100644 index 0000000..22a4570 --- /dev/null +++ b/apps/user/locales/ja-JP/wallet.json @@ -0,0 +1,15 @@ +{ + "amount": "金額", + "balance": "残高", + "createdAt": "時間", + "title": "アカウント残高", + "type": { + "0": "タイプ", + "1": "チャージ", + "2": "引き出し", + "3": "購入", + "4": "返金", + "5": "報酬", + "6": "手数料" + } +} diff --git a/apps/user/locales/ko-KR/affiliate.json b/apps/user/locales/ko-KR/affiliate.json new file mode 100644 index 0000000..4e1bdc3 --- /dev/null +++ b/apps/user/locales/ko-KR/affiliate.json @@ -0,0 +1,11 @@ +{ + "commissionInfo": "금액 통계, 초대 커미션이 자동으로 잔액에 전환됩니다.", + "commissionRate": "커미션 비율", + "copyInviteLink": "초대 링크 복사", + "copySuccess": "복사 성공", + "inviteCode": "초대 코드", + "inviteRecords": "초대 기록", + "registrationTime": "등록 시간", + "totalCommission": "총 수수료", + "userEmail": "사용자 이메일" +} diff --git a/apps/user/locales/ko-KR/auth.json b/apps/user/locales/ko-KR/auth.json new file mode 100644 index 0000000..fedae9c --- /dev/null +++ b/apps/user/locales/ko-KR/auth.json @@ -0,0 +1,38 @@ +{ + "check": { + "checking": "확인 중...", + "continue": "계속", + "description": "로그인 또는 등록을 계속하려면 이메일을 입력하세요.", + "email": "유효한 이메일 주소를 입력하세요.", + "title": "로그인/등록", + "whitelist": "이메일 도메인이 허용된 화이트리스트에 없습니다." + }, + "login": { + "description": "로그인하려면 계정 정보를 입력하세요.", + "forgotPassword": "비밀번호를 잊으셨나요?", + "success": "로그인 성공!", + "switchAccount": "회원가입/계정 전환", + "title": "로그인" + }, + "orWithEmail": "또는 이메일 사용", + "register": { + "description": "새 계정을 생성하고 정보를 입력하여 등록하세요.", + "existingAccount": "이미 계정이 있으신가요?", + "get": "받기", + "invite": "초대 코드", + "message": "#### 존경하는 사용자님, 안녕하세요!\n\n저희에 대한 관심과 지원에 감사드립니다. 사이트 운영 전략의 조정으로 인해 신규 사용자 등록 기능을 닫았습니다. 이 기간 동안 기존 사용자의 사용에는 아무런 영향이 없습니다.\n\n저희는 더 나은 서비스와 경험을 제공하기 위해 등록이 닫힌 동안 시스템 최적화와 기능 업그레이드를 전면적으로 진행할 것입니다. 앞으로 더 나은 콘텐츠와 서비스로 여러분을 맞이하겠습니다.\n\n저희 웹사이트와 소셜 미디어 플랫폼을 주시하여 최신 동향과 공지를 받아보세요. 이해와 지원에 감사드립니다.\n\n궁금한 점이나 도움이 필요하시면 언제든지 고객 서비스 팀에 문의해 주세요.\n\n**다시 한번 지원과 이해에 감사드립니다.**", + "passwordMismatch": "비밀번호가 일치하지 않습니다.", + "success": "등록 성공, 자동으로 로그인되었습니다!", + "switchToLogin": "로그인/이메일 재설정", + "title": "등록" + }, + "reset": { + "description": "비밀번호를 재설정하려면 이메일 주소를 입력하세요.", + "existingAccount": "이미 계정이 있으신가요?", + "get": "받기", + "success": "비밀번호 재설정 성공, 자동으로 로그인으로 전환되었습니다!", + "switchToLogin": "로그인/회원가입", + "title": "비밀번호 재설정" + }, + "tos": "서비스 약관" +} diff --git a/apps/user/locales/ko-KR/common.json b/apps/user/locales/ko-KR/common.json new file mode 100644 index 0000000..4f9b33d --- /dev/null +++ b/apps/user/locales/ko-KR/common.json @@ -0,0 +1,52 @@ +{ + "empty": [ + "여기에 멋진 내용이 가득할 거라고 상상해보세요! 지금은 상상에 맡겨야 해요…", + "이 영역이 신비롭게 사라졌습니다. 우리는 그것을 다시 불러오고 있어요!", + "아무 일도 일어나지 않았네요… 직접 무언가를 채워보세요!", + "마치 콘서트에서 무대에 아무도 없는 걸 발견한 것 같아요… 무대에 올라가서 공연해보세요?", + "빈 땅을 발견했어요! 집을 지어볼까요?", + "여기는 잠시 비어있지만, 창의력은 여기서 시작됩니다!", + "아무것도 없어요… 하지만 걱정 마세요, 이건 시작일 뿐이에요!", + "여기에 큰 놀라움을 준비했는데, 놀라움이 도망갔어요!", + "지금은 아무것도 없어요, 마치 간식장이 비어있는 것처럼요.", + "이 빈 공간은 주인공의 등장을 기다리고 있어요!" + ], + "list": { + "pageInfo": "{current} 페이지, 총 {total} 페이지", + "rowsPerPage": "페이지당 행 수", + "selectedItems": "{total}개 행 선택됨" + }, + "login": "로그인/회원가입", + "request": { + "10001": "조회가 아직 성공하지 않았습니다. 잠시 후 다시 시도하거나 조건을 확인해 주세요.", + "10002": "업데이트 작업이 성공하지 않았습니다. 잠시 후 다시 시도해 주세요.", + "10003": "삽입 작업을 완료할 수 없습니다. 잠시 후 다시 시도해 주세요.", + "10004": "삭제 작업을 완료할 수 없습니다. 잠시 후 다시 시도해 주세요.", + "20001": "해당 사용자 정보가 이미 존재합니다. 정보를 변경한 후 다시 시도해 주세요.", + "20002": "해당 사용자를 찾을 수 없습니다. 정보를 확인한 후 다시 시도해 주세요.", + "20003": "입력하신 비밀번호가 올바르지 않습니다. 다시 입력해 주세요.", + "20004": "해당 사용자가 비활성화되었습니다. 문의 사항이 있으면 고객 서비스에 문의해 주세요.", + "20005": "잔액이 부족합니다. 충전 후 다시 시도해 주세요.", + "20006": "등록 기능을 현재 사용할 수 없습니다. 잠시 후 다시 시도해 주세요.", + "30001": "해당 노드가 이미 존재합니다. 중복 추가하지 마세요.", + "30002": "관련 노드를 찾을 수 없습니다. 확인 후 다시 시도해 주세요.", + "30003": "그룹이 이미 존재합니다. 다른 이름을 사용해 보세요.", + "30004": "해당 그룹을 찾을 수 없습니다. 정보를 확인한 후 다시 시도해 주세요.", + "30005": "해당 그룹 내에 여전히 내용이 있습니다. 비운 후 다시 시도해 주세요.", + "400": "요청 매개변수가 올바르지 않습니다. 확인 후 다시 제출해 주세요.", + "40002": "유효한 토큰을 찾을 수 없습니다. 먼저 로그인한 후 다시 시도해 주세요.", + "40003": "현재 토큰이 유효하지 않습니다. 다시 획득한 후 시도해 주세요.", + "40004": "토큰이 만료되었습니다. 다시 로그인해 주세요.", + "40005": "접근 권한이 없습니다. 문의 사항이 있으면 관리자에게 문의해 주세요.", + "401": "요청이 너무 빈번합니다. 잠시 후 다시 시도해 주세요.", + "500": "서버에 문제가 발생했습니다. 잠시 후 다시 시도해 주세요.", + "50001": "해당 쿠폰 정보를 찾을 수 없습니다. 확인 후 다시 시도해 주세요.", + "50002": "해당 쿠폰이 이미 사용되었습니다. 중복 사용이 불가능합니다.", + "60001": "구독이 만료되었습니다. 갱신 후 사용해 주세요.", + "60002": "현재 구독을 사용할 수 없습니다. 잠시 후 다시 시도해 주세요.", + "70001": "인증 코드가 잘못되었습니다. 다시 입력해 주세요.", + "80001": "작업이 큐에 성공적으로 추가되지 않았습니다. 잠시 후 다시 시도해 주세요.", + "undefined": "시스템에 오류가 발생했습니다. 잠시 후 다시 시도해 주세요." + }, + "unlimited": "무제한" +} diff --git a/apps/user/locales/ko-KR/dashboard.json b/apps/user/locales/ko-KR/dashboard.json new file mode 100644 index 0000000..154de71 --- /dev/null +++ b/apps/user/locales/ko-KR/dashboard.json @@ -0,0 +1,25 @@ +{ + "cancel": "취소", + "confirm": "확인", + "confirmResetSubscription": "구독 주소를 재설정하시겠습니까?", + "copy": "복사", + "copyFailure": "복사 실패, 수동으로 복사하세요", + "copySuccess": "복사 성공", + "download": "다운로드", + "expirationDays": "만료일/일", + "import": "가져오기", + "latestAnnouncement": "최신 공지", + "manualImportMessage": "이 앱은 현재 호출을 지원하지 않습니다. 수동으로 가져오세요. 구독 주소가 자동으로 복사되었습니다.", + "mySubscriptions": "내 구독", + "nextResetDays": "다음 초기화/일", + "prompt": "프롬프트", + "purchaseSubscription": "구독 구매", + "qrCode": "QR코드", + "resetSubscription": "구독 주소 재설정", + "resetSuccess": "재설정 성공", + "scanToSubscribe": "스캔하여 구독", + "subscriptionUrl": "구독 주소", + "totalTraffic": "총 트래픽", + "unknown": "알 수 없음", + "used": "사용됨" +} diff --git a/apps/user/locales/ko-KR/document.json b/apps/user/locales/ko-KR/document.json new file mode 100644 index 0000000..b720741 --- /dev/null +++ b/apps/user/locales/ko-KR/document.json @@ -0,0 +1,6 @@ +{ + "all": "전체", + "document": "문서", + "read": "읽기", + "tutorial": "튜토리얼" +} diff --git a/apps/user/locales/ko-KR/index.json b/apps/user/locales/ko-KR/index.json new file mode 100644 index 0000000..114e5b1 --- /dev/null +++ b/apps/user/locales/ko-KR/index.json @@ -0,0 +1,14 @@ +{ + "global_map_description": "원활한 글로벌 연결을 탐색하세요. 필요에 맞는 네트워크 서비스를 선택하여 언제 어디서나 연결을 유지하세요.", + "global_map_itle": "글로벌 연결, 편안하고 걱정 없는", + "locations": "지역", + "per_month": "매월", + "product_showcase_description": "가장 적합한 패키지를 선택하여 기쁘게 탐험해 보세요.", + "product_showcase_title": "패키지를 선택하세요", + "servers": "서버", + "started": "시작하기", + "subscribe": "구독", + "tos": "서비스 약관", + "users": "사용자", + "welcome": "환영합니다" +} diff --git a/apps/user/locales/ko-KR/language.json b/apps/user/locales/ko-KR/language.json new file mode 100644 index 0000000..386602e --- /dev/null +++ b/apps/user/locales/ko-KR/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "체코어", + "de-DE": "독일어", + "en-US": "영어", + "es-ES": "스페인어", + "es-MX": "스페인어(멕시코)", + "fi-FI": "핀란드어", + "fr-FR": "프랑스어", + "hi-IN": "힌디어", + "hu-HU": "헝가리어", + "ja-JP": "일본어", + "ko-KR": "한국어", + "no-NO": "노르웨이어", + "pl-PL": "폴란드어", + "pt-BR": "포르투갈어(브라질)", + "ro-RO": "루마니아어", + "ru-RU": "러시아어", + "th-TH": "태국어", + "tr-TR": "터키어", + "uk-UA": "우크라이나어", + "vi-VN": "베트남어", + "zh-CN": "한국어", + "zh-TW": "중국어(번체)" +} diff --git a/apps/user/locales/ko-KR/layout.json b/apps/user/locales/ko-KR/layout.json new file mode 100644 index 0000000..2a18ec4 --- /dev/null +++ b/apps/user/locales/ko-KR/layout.json @@ -0,0 +1,7 @@ +{ + "accountBalance": "계좌 잔액", + "copyInviteLink": "초대 링크 복사", + "copySuccess": "초대 링크가 성공적으로 복사되었습니다", + "inviteCode": "초대 코드", + "recharge": "충전" +} diff --git a/apps/user/locales/ko-KR/menu.json b/apps/user/locales/ko-KR/menu.json new file mode 100644 index 0000000..4fcace2 --- /dev/null +++ b/apps/user/locales/ko-KR/menu.json @@ -0,0 +1,17 @@ +{ + "affiliate": "내 초대", + "announcement": "공지 목록", + "dashboard": "대시보드", + "document": "사용 설명서", + "finance": "재무", + "help": "도움말", + "logout": "로그아웃", + "order": "주문 목록", + "payment": "주문 세부사항", + "personal": "개인", + "profile": "개인 센터", + "server": "서버", + "subscribe": "구독 구매", + "ticket": "내 티켓", + "wallet": "재무 센터" +} diff --git a/apps/user/locales/ko-KR/order.json b/apps/user/locales/ko-KR/order.json new file mode 100644 index 0000000..5f2d7f7 --- /dev/null +++ b/apps/user/locales/ko-KR/order.json @@ -0,0 +1,61 @@ +{ + "balanceRecharge": "잔액 충전", + "buyNow": "지금 구매", + "buySubscription": "구독 구매", + "cancel": "취소", + "createdAt": "생성 시간", + "description": "원클릭 충전, 간편하게 해결", + "detail": "세부사항", + "enterAmount": "충전 금액을 입력하세요", + "enterCoupon": "할인 코드를 입력하세요", + "goToPayment": "결제하기", + "methods": { + "alipay_f2f": "알리페이(대면)", + "balance": "잔액", + "epay": "이페이", + "stripe_alipay": "Stripe(알리페이)", + "stripe_wechat_pay": "Stripe(위챗)" + }, + "month": "개월", + "months": "개월", + "name": "이름", + "orderClosed": "주문이 종료되었습니다", + "orderList": "주문 목록", + "orderNo": "주문번호", + "orderNumber": "주문 번호", + "payment": "결제하기", + "paymentAmount": "지불 금액", + "paymentMethod": "결제 수단", + "paymentSuccess": "결제 성공", + "productList": "제품 목록", + "purchaseDuration": "구매 기간", + "recharge": "충전", + "rechargeAmount": "충전 금액", + "rechargeNow": "지금 충전하기", + "renew": "갱신", + "renewSubscription": "구독 갱신", + "resetPrice": "가격 재설정", + "resetTraffic": "트래픽 재설정", + "resetTrafficDescription": "이번 달의 트래픽만 초기화됩니다.", + "resetTrafficTitle": "트래픽 재설정", + "scanToPay": "스캔하여 결제하세요", + "status": { + "0": "상태", + "1": "결제 대기 중", + "2": "결제 완료", + "3": "취소됨", + "4": "닫힘", + "5": "완료됨" + }, + "subscribeNow": "지금 구독하기", + "timeExpired": "결제 시간이 만료되었습니다", + "type": { + "0": "유형", + "1": "신규 구매", + "2": "갱신", + "3": "트래픽 재설정", + "4": "충전" + }, + "viewDocument": "문서 보기", + "waitingForPayment": "결제 대기 중" +} diff --git a/apps/user/locales/ko-KR/profile.json b/apps/user/locales/ko-KR/profile.json new file mode 100644 index 0000000..4e1b72c --- /dev/null +++ b/apps/user/locales/ko-KR/profile.json @@ -0,0 +1,28 @@ +{ + "accountSettings": { + "accountSettings": "계정 설정", + "loginPassword": "로그인 비밀번호", + "newPassword": "새 비밀번호", + "passwordMismatch": "비밀번호가 일치하지 않습니다", + "repeatNewPassword": "새 비밀번호 반복", + "updatePassword": "비밀번호 업데이트", + "updateSuccess": "업데이트 성공" + }, + "notify": { + "bind": "연결", + "emailNotification": "이메일 알림", + "notificationSettings": "알림 설정", + "telegramId": "텔레그램 ID", + "telegramIdPlaceholder": "텔레그램 ID 입력", + "telegramNotification": "텔레그램 알림", + "updateSuccess": "업데이트 성공" + }, + "notifyEvent": { + "balanceChange": "잔액 변경", + "finance": "재무", + "login": "로그인", + "notificationEvents": "알림 이벤트", + "subscribe": "구독", + "updateSuccess": "업데이트 성공" + } +} diff --git a/apps/user/locales/ko-KR/subscribe.json b/apps/user/locales/ko-KR/subscribe.json new file mode 100644 index 0000000..cc93874 --- /dev/null +++ b/apps/user/locales/ko-KR/subscribe.json @@ -0,0 +1,31 @@ +{ + "all": "전체", + "billing": { + "billingTitle": "상품 청구서", + "couponDiscount": "할인 코드 혜택", + "duration": "패키지 기간", + "fee": "수수료", + "months": "개월", + "price": "가격", + "productDiscount": "상품 할인", + "total": "총액" + }, + "buy": "구매", + "category": "카테고리", + "detail": { + "availableTraffic": "사용 가능한 트래픽", + "connectedDevices": "동시 연결 IP 수", + "connectionSpeed": "연결 속도", + "productDetail": "제품 세부 정보" + }, + "methods": { + "alipay_f2f": "알리페이(대면)", + "balance": "잔액", + "epay": "이페이", + "stripe_alipay": "Stripe(알리페이)", + "stripe_wechat_pay": "Stripe(위챗)" + }, + "perMonth": "월", + "productDescription": "제품 설명", + "products": "상품" +} diff --git a/apps/user/locales/ko-KR/ticket.json b/apps/user/locales/ko-KR/ticket.json new file mode 100644 index 0000000..f671784 --- /dev/null +++ b/apps/user/locales/ko-KR/ticket.json @@ -0,0 +1,26 @@ +{ + "cancel": "취소", + "check": "확인", + "close": "닫기", + "closeSuccess": "작업 티켓이 성공적으로 닫혔습니다", + "closeWarning": "작업을 닫으면 더 이상 답장할 수 없습니다.", + "confirm": "확인", + "confirmClose": "작업 주문을 닫으시겠습니까?", + "createSuccess": "생성 성공", + "createTicket": "티켓 생성", + "createTicketDescription": "티켓은 24시간 이내에 응답됩니다.", + "description": "설명", + "inputPlaceholder": "메시지를 입력하세요", + "reply": "답장", + "status": { + "0": "상태", + "1": "대기 중", + "2": "처리 중", + "3": "해결됨", + "4": "닫힘" + }, + "submit": "제출", + "ticketList": "티켓 목록", + "title": "제목", + "updatedAt": "업데이트 시간" +} diff --git a/apps/user/locales/ko-KR/wallet.json b/apps/user/locales/ko-KR/wallet.json new file mode 100644 index 0000000..1ce663b --- /dev/null +++ b/apps/user/locales/ko-KR/wallet.json @@ -0,0 +1,15 @@ +{ + "amount": "금액", + "balance": "잔액", + "createdAt": "시간", + "title": "계정 잔액", + "type": { + "0": "유형", + "1": "충전", + "2": "출금", + "3": "구매", + "4": "환불", + "5": "보상", + "6": "커미션" + } +} diff --git a/apps/user/locales/no-NO/affiliate.json b/apps/user/locales/no-NO/affiliate.json new file mode 100644 index 0000000..fd2639b --- /dev/null +++ b/apps/user/locales/no-NO/affiliate.json @@ -0,0 +1,11 @@ +{ + "commissionInfo": "Statistikk over beløp, inviteringsprovisjon overføres automatisk til saldoen", + "commissionRate": "Provisjonssats", + "copyInviteLink": "Kopier invitasjonslenke", + "copySuccess": "Kopiering vellykket", + "inviteCode": "invitasjonskode", + "inviteRecords": "Invitasjonsoppføringer", + "registrationTime": "Registreringstid", + "totalCommission": "Totalprovisjon", + "userEmail": "Brukerens e-post" +} diff --git a/apps/user/locales/no-NO/auth.json b/apps/user/locales/no-NO/auth.json new file mode 100644 index 0000000..87160b7 --- /dev/null +++ b/apps/user/locales/no-NO/auth.json @@ -0,0 +1,38 @@ +{ + "check": { + "checking": "Verifiserer...", + "continue": "Fortsett", + "description": "Vennligst skriv inn din e-post for å fortsette med innlogging eller registrering.", + "email": "Vennligst skriv inn en gyldig e-postadresse.", + "title": "Logg inn/Registrer", + "whitelist": "E-postdomenet er ikke på den tillatte hvitelisten." + }, + "login": { + "description": "Vennligst skriv inn kontoinformasjonen din for å logge inn.", + "forgotPassword": "Glemt passord?", + "success": "Innlogging vellykket!", + "switchAccount": "Registrer/bytt konto", + "title": "Logg inn" + }, + "orWithEmail": "eller bruk e-post", + "register": { + "description": "Opprett en ny konto, fyll inn informasjonen din for å registrere deg.", + "existingAccount": "Har du allerede en konto?", + "get": "Få", + "invite": "Invitasjonskode", + "message": "#### Kjære bruker,\n\nTakk for din interesse og støtte. På grunn av justeringer i vår driftsstrategi har vi stengt for registrering av nye brukere. I denne perioden vil eksisterende brukere ikke bli påvirket.\n\nVi er forpliktet til å gi deg bedre service og opplevelse, og vil derfor gjennomføre en omfattende systemoptimalisering og funksjonsoppgradering mens registreringen er stengt. I fremtiden vil vi ønske deg velkommen med enda bedre innhold og tjenester.\n\nFølg med på vår nettside og sosiale medieplattformer for å få de siste oppdateringene og kunngjøringene. Takk for din forståelse og støtte.\n\nHvis du har spørsmål eller trenger hjelp, vennligst kontakt vårt kundeserviceteam.\n\n**Takk igjen for din støtte og forståelse.**", + "passwordMismatch": "Passordene stemmer ikke overens", + "success": "Registrering vellykket, du er automatisk logget inn!", + "switchToLogin": "Logg inn/tilbakestill e-post", + "title": "Registrer deg" + }, + "reset": { + "description": "Vennligst skriv inn din e-postadresse for å tilbakestille passordet.", + "existingAccount": "Har du allerede en konto?", + "get": "Hent", + "success": "Passordet er tilbakestilt, og du er automatisk logget inn!", + "switchToLogin": "Logg inn/Registrer", + "title": "Tilbakestill passord" + }, + "tos": "Tjenestevilkår" +} diff --git a/apps/user/locales/no-NO/common.json b/apps/user/locales/no-NO/common.json new file mode 100644 index 0000000..d95b994 --- /dev/null +++ b/apps/user/locales/no-NO/common.json @@ -0,0 +1,52 @@ +{ + "empty": [ + "Tenk deg at dette stedet er fylt med fantastisk innhold! Foreløpig må du bare forestille deg det...", + "Dette området har mystisk forsvunnet, vi prøver å få det tilbake!", + "Oi, ingenting skjedde... kanskje du kan fylle inn noe selv!", + "Det er som å være på en konsert og oppdage at scenen er tom... vil du gå opp og opptre?", + "Du har funnet et tomt paradis! Vil du bygge et hus?", + "Det er ingenting her for øyeblikket, men kreativiteten starter her!", + "Ingenting her... men ikke bekymre deg, dette er bare begynnelsen!", + "Det var en stor overraskelse her, men den har stukket av!", + "Foreløpig er det ingenting her, som et tomt snackskap.", + "Dette tomme området venter på at hovedpersonen skal tre inn!" + ], + "list": { + "pageInfo": "Side {current} av {total}", + "rowsPerPage": "Rader per side", + "selectedItems": "{total} rader valgt" + }, + "login": "Logg inn/Registrer deg", + "request": { + "10001": "Forespørselen var ikke vellykket, vennligst prøv igjen senere eller sjekk betingelsene dine.", + "10002": "Oppdateringen var ikke vellykket, vennligst prøv igjen senere.", + "10003": "Kan for øyeblikket ikke fullføre innsettingsoperasjonen, vennligst prøv igjen senere.", + "10004": "Slettingen kunne ikke fullføres, vennligst prøv igjen senere.", + "20001": "Brukerinformasjonen eksisterer allerede, vennligst endre informasjonen og prøv igjen.", + "20002": "Fant ikke brukeren, vennligst sjekk informasjonen og prøv igjen.", + "20003": "Passordet du skrev inn er feil, vennligst skriv inn på nytt.", + "20004": "Denne brukeren er deaktivert, vennligst kontakt kundeservice hvis du har spørsmål.", + "20005": "Saldoen er utilstrekkelig, vennligst fyll på og prøv igjen.", + "20006": "Registreringsfunksjonen er midlertidig utilgjengelig, vennligst prøv igjen senere.", + "30001": "Denne noden eksisterer allerede, vennligst ikke legg den til igjen.", + "30002": "Fant ikke den relaterte noden, vennligst sjekk og prøv igjen.", + "30003": "Gruppen eksisterer allerede, vennligst prøv et annet navn.", + "30004": "Fant ikke gruppen, vennligst bekreft informasjonen og prøv igjen.", + "30005": "Det er fortsatt innhold i gruppen, vennligst tøm den og prøv igjen.", + "400": "Forespørselens parametere er ikke korrekte, vennligst sjekk og send inn på nytt.", + "40002": "Fant ikke en gyldig token, vennligst logg inn og prøv igjen.", + "40003": "Den nåværende tokenen er ugyldig, vennligst hent en ny og prøv igjen.", + "40004": "Tokenen har utløpt, vennligst logg inn på nytt.", + "40005": "Du har ikke tilgangsrettigheter, vennligst kontakt administratoren hvis du har spørsmål.", + "401": "For mange forespørsler, vennligst prøv igjen senere.", + "500": "Serveren har støtt på noen problemer, vennligst prøv igjen senere.", + "50001": "Fant ikke den tilsvarende kuponginformasjonen, vennligst sjekk og prøv igjen.", + "50002": "Denne kupongen er allerede brukt, kan ikke brukes igjen.", + "60001": "Abonnementet har utløpt, vennligst forny det og bruk det igjen.", + "60002": "Kan for øyeblikket ikke bruke abonnementet, vennligst prøv igjen senere.", + "70001": "Verifikasjonskoden er feil, vennligst skriv inn på nytt.", + "80001": "Oppgaven ble ikke vellykket lagt til i køen, vennligst prøv igjen senere.", + "undefined": "Det oppstod en systemfeil, vennligst prøv igjen senere." + }, + "unlimited": "ubegrenset" +} diff --git a/apps/user/locales/no-NO/dashboard.json b/apps/user/locales/no-NO/dashboard.json new file mode 100644 index 0000000..373a177 --- /dev/null +++ b/apps/user/locales/no-NO/dashboard.json @@ -0,0 +1,25 @@ +{ + "cancel": "Avbryt", + "confirm": "bekreft", + "confirmResetSubscription": "Er du sikker på at du vil tilbakestille abonnementsadressen?", + "copy": "kopier", + "copyFailure": "Kopiering mislyktes, vennligst kopier manuelt", + "copySuccess": "Kopiering vellykket", + "download": "last ned", + "expirationDays": "Utløpsdato/dager", + "import": "Importer", + "latestAnnouncement": "Siste kunngjøring", + "manualImportMessage": "Denne appen støtter foreløpig ikke oppstart, vennligst importer manuelt, abonnementsadressen er automatisk kopiert", + "mySubscriptions": "Mine abonnementer", + "nextResetDays": "Neste tilbakestilling/dager", + "prompt": "Hint", + "purchaseSubscription": "Kjøp abonnement", + "qrCode": "QR-kode", + "resetSubscription": "Tilbakestill abonnementadresse", + "resetSuccess": "Tilbakestilling vellykket", + "scanToSubscribe": "Skann for å abonnere", + "subscriptionUrl": "Abonnementsadresse", + "totalTraffic": "Total trafikk", + "unknown": "ukjent", + "used": "Brukt" +} diff --git a/apps/user/locales/no-NO/document.json b/apps/user/locales/no-NO/document.json new file mode 100644 index 0000000..39ea902 --- /dev/null +++ b/apps/user/locales/no-NO/document.json @@ -0,0 +1,6 @@ +{ + "all": "Alle", + "document": "dokument", + "read": "lese", + "tutorial": "veiledning" +} diff --git a/apps/user/locales/no-NO/index.json b/apps/user/locales/no-NO/index.json new file mode 100644 index 0000000..3a277d7 --- /dev/null +++ b/apps/user/locales/no-NO/index.json @@ -0,0 +1,14 @@ +{ + "global_map_description": "Utforsk sømløs global tilkobling. Velg nettverkstjenester som passer dine behov, og hold deg tilkoblet uansett hvor du er.", + "global_map_itle": "Global tilkobling, enkelt og bekymringsløst", + "locations": "områder", + "per_month": "per måned", + "product_showcase_description": "La oss velge den pakken som passer best for deg, og utforsk den med glede.", + "product_showcase_title": "Velg din pakke", + "servers": "servere", + "started": "Kom i gang", + "subscribe": "Abonner", + "tos": "Tjenesteavtale", + "users": "brukere", + "welcome": "Velkommen til" +} diff --git a/apps/user/locales/no-NO/language.json b/apps/user/locales/no-NO/language.json new file mode 100644 index 0000000..84b1d56 --- /dev/null +++ b/apps/user/locales/no-NO/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "tsjekkisk", + "de-DE": "Tysk", + "en-US": "Engelsk", + "es-ES": "Spansk", + "es-MX": "Spansk (Mexico)", + "fi-FI": "Finsk", + "fr-FR": "Fransk", + "hi-IN": "Hindi", + "hu-HU": "Ungarsk", + "ja-JP": "Japansk", + "ko-KR": "Koreansk", + "no-NO": "Norsk", + "pl-PL": "Polsk", + "pt-BR": "portugisisk (Brasil)", + "ro-RO": "Rumensk", + "ru-RU": "Russisk", + "th-TH": "Thai", + "tr-TR": "Tyrkisk", + "uk-UA": "Ukrainsk", + "vi-VN": "Vietnamesisk", + "zh-CN": "Kinesisk (forenklet)", + "zh-TW": "Kinesisk (tradisjonell)" +} diff --git a/apps/user/locales/no-NO/layout.json b/apps/user/locales/no-NO/layout.json new file mode 100644 index 0000000..f2f4735 --- /dev/null +++ b/apps/user/locales/no-NO/layout.json @@ -0,0 +1,7 @@ +{ + "accountBalance": "Kontosaldo", + "copyInviteLink": "Kopier invitasjonslenke", + "copySuccess": "Invitasjonslenke kopiert", + "inviteCode": "invitasjonskode", + "recharge": "Lad opp" +} diff --git a/apps/user/locales/no-NO/menu.json b/apps/user/locales/no-NO/menu.json new file mode 100644 index 0000000..97a7a65 --- /dev/null +++ b/apps/user/locales/no-NO/menu.json @@ -0,0 +1,17 @@ +{ + "affiliate": "Min invitasjon", + "announcement": "Kunngjøringsliste", + "dashboard": "Hjem", + "document": "Brukerdokumentasjon", + "finance": "Finans", + "help": "Hjelp", + "logout": "Logg ut", + "order": "Bestillingsliste", + "payment": "Bestillingsdetaljer", + "personal": "Personlig", + "profile": "Profil", + "server": "tjeneste", + "subscribe": "Kjøp abonnement", + "ticket": "Min billett", + "wallet": "Økonomisenter" +} diff --git a/apps/user/locales/no-NO/order.json b/apps/user/locales/no-NO/order.json new file mode 100644 index 0000000..8cb6d6b --- /dev/null +++ b/apps/user/locales/no-NO/order.json @@ -0,0 +1,61 @@ +{ + "balanceRecharge": "Saldoopplading", + "buyNow": "Kjøp nå", + "buySubscription": "Kjøp abonnement", + "cancel": "Avbryt", + "createdAt": "Opprettet", + "description": "Énkel påfylling med ett klikk", + "detail": "Detaljer", + "enterAmount": "Vennligst skriv inn beløpet for påfylling", + "enterCoupon": "Vennligst skriv inn rabattkoden", + "goToPayment": "Gå til betaling", + "methods": { + "alipay_f2f": "Alipay (ansikt til ansikt)", + "balance": "Balanse", + "epay": "Enkel betaling", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "month": "måned", + "months": "måneder", + "name": "Navn", + "orderClosed": "Bestillingen er stengt", + "orderList": "Bestillingsliste", + "orderNo": "Bestillingsnummer", + "orderNumber": "Bestillingsnummer", + "payment": "Gå til betaling", + "paymentAmount": "Betalingsbeløp", + "paymentMethod": "Betalingsmetode", + "paymentSuccess": "Betaling vellykket", + "productList": "Produktliste", + "purchaseDuration": "Kjøpsvarighet", + "recharge": "lade opp", + "rechargeAmount": "Ladebeløp", + "rechargeNow": "Lad opp nå", + "renew": "fornye", + "renewSubscription": "Forny abonnement", + "resetPrice": "Tilbakestill pris", + "resetTraffic": "Tilbakestill trafikk", + "resetTrafficDescription": "Tilbakestiller kun trafikken for inneværende måned", + "resetTrafficTitle": "Tilbakestill trafikk", + "scanToPay": "Vennligst skann for å betale", + "status": { + "0": "Status", + "1": "Venter på betaling", + "2": "Betalt", + "3": "Kansellert", + "4": "Lukket", + "5": "Fullført" + }, + "subscribeNow": "Abonner nå", + "timeExpired": "Betalingstiden er utløpt", + "type": { + "0": "Type", + "1": "Ny kjøp", + "2": "Fornyelse", + "3": "Tilbakestill data", + "4": "Påfylling" + }, + "viewDocument": "Vis dokument", + "waitingForPayment": "Venter på betaling" +} diff --git a/apps/user/locales/no-NO/profile.json b/apps/user/locales/no-NO/profile.json new file mode 100644 index 0000000..2b985d5 --- /dev/null +++ b/apps/user/locales/no-NO/profile.json @@ -0,0 +1,28 @@ +{ + "accountSettings": { + "accountSettings": "Kontoinnstillinger", + "loginPassword": "Innloggingspassord", + "newPassword": "Nytt passord", + "passwordMismatch": "Passordene stemmer ikke overens", + "repeatNewPassword": "Gjenta nytt passord", + "updatePassword": "Oppdater passord", + "updateSuccess": "Oppdatering vellykket" + }, + "notify": { + "bind": "Knytt til", + "emailNotification": "E-postvarsling", + "notificationSettings": "Varslingsinnstillinger", + "telegramId": "Telegram-ID", + "telegramIdPlaceholder": "Skriv inn Telegram-ID", + "telegramNotification": "Telegram-varsling", + "updateSuccess": "Oppdatering vellykket" + }, + "notifyEvent": { + "balanceChange": "Saldoendring", + "finance": "Finans", + "login": "Logg inn", + "notificationEvents": "Varslingshendelser", + "subscribe": "Abonner", + "updateSuccess": "Oppdatering vellykket" + } +} diff --git a/apps/user/locales/no-NO/subscribe.json b/apps/user/locales/no-NO/subscribe.json new file mode 100644 index 0000000..590bcdf --- /dev/null +++ b/apps/user/locales/no-NO/subscribe.json @@ -0,0 +1,31 @@ +{ + "all": "Alle", + "billing": { + "billingTitle": "Varefaktura", + "couponDiscount": "Rabattkode rabatt", + "duration": "Pakketid", + "fee": "Gebyr", + "months": "Måneder", + "price": "Pris", + "productDiscount": "Produkt rabatt", + "total": "Totalpris" + }, + "buy": "Kjøp", + "category": "Kategori", + "detail": { + "availableTraffic": "Tilgjengelig trafikk", + "connectedDevices": "Samtidig tilkoblede IP-er", + "connectionSpeed": "Tilkoblingshastighet", + "productDetail": "Produktdetaljer" + }, + "methods": { + "alipay_f2f": "Alipay (ansikt til ansikt)", + "balance": "Balanse", + "epay": "Epay", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "perMonth": "måned", + "productDescription": "Produktbeskrivelse", + "products": "Produkter" +} diff --git a/apps/user/locales/no-NO/ticket.json b/apps/user/locales/no-NO/ticket.json new file mode 100644 index 0000000..7a46f7f --- /dev/null +++ b/apps/user/locales/no-NO/ticket.json @@ -0,0 +1,26 @@ +{ + "cancel": "Avbryt", + "check": "Sjekk", + "close": "lukk", + "closeSuccess": "Arbeidsordre lukket vellykket", + "closeWarning": "Når du lukker saken, vil du ikke kunne svare videre.", + "confirm": "Bekreft", + "confirmClose": "Bekreft lukking av arbeidsordre?", + "createSuccess": "Opprettelse vellykket", + "createTicket": "Opprett billett", + "createTicketDescription": "Vi svarer på henvendelser innen 24 timer", + "description": "beskrivelse", + "inputPlaceholder": "Skriv inn meldingen din", + "reply": "svar", + "status": { + "0": "Status", + "1": "Venter på behandling", + "2": "Under behandling", + "3": "Løst", + "4": "Lukket" + }, + "submit": "Send inn", + "ticketList": "Billettliste", + "title": "Tittel", + "updatedAt": "Oppdatert" +} diff --git a/apps/user/locales/no-NO/wallet.json b/apps/user/locales/no-NO/wallet.json new file mode 100644 index 0000000..87aa319 --- /dev/null +++ b/apps/user/locales/no-NO/wallet.json @@ -0,0 +1,15 @@ +{ + "amount": "Beløp", + "balance": "Balanse", + "createdAt": "Tid", + "title": "Kontosaldo", + "type": { + "0": "Type", + "1": "Innskudd", + "2": "Uttak", + "3": "Kjøp", + "4": "Refusjon", + "5": "Belønning", + "6": "Kommisjon" + } +} diff --git a/apps/user/locales/pl-PL/affiliate.json b/apps/user/locales/pl-PL/affiliate.json new file mode 100644 index 0000000..d2982a3 --- /dev/null +++ b/apps/user/locales/pl-PL/affiliate.json @@ -0,0 +1,11 @@ +{ + "commissionInfo": "Kwota statystyczna, prowizja za zaproszenie automatycznie przenoszona do salda", + "commissionRate": "Stawka prowizji", + "copyInviteLink": "Skopiuj link zaproszenia", + "copySuccess": "Skopiowano pomyślnie", + "inviteCode": "kodZaproszenia", + "inviteRecords": "Rekordy zaproszeń", + "registrationTime": "Czas rejestracji", + "totalCommission": "Łączna prowizja", + "userEmail": "Adres e-mail użytkownika" +} diff --git a/apps/user/locales/pl-PL/auth.json b/apps/user/locales/pl-PL/auth.json new file mode 100644 index 0000000..8633ecc --- /dev/null +++ b/apps/user/locales/pl-PL/auth.json @@ -0,0 +1,38 @@ +{ + "check": { + "checking": "Sprawdzanie...", + "continue": "Kontynuuj", + "description": "Wprowadź swój adres e-mail, aby kontynuować logowanie lub rejestrację.", + "email": "Proszę wprowadzić prawidłowy adres e-mail.", + "title": "Zaloguj się/Zarejestruj się", + "whitelist": "Domena e-mail nie znajduje się na dozwolonej białej liście." + }, + "login": { + "description": "Proszę wprowadzić dane konta, aby się zalogować.", + "forgotPassword": "Zapomniałeś hasła?", + "success": "Zalogowano pomyślnie!", + "switchAccount": "Zarejestruj się/Zmień konto", + "title": "Logowanie" + }, + "orWithEmail": "lub użyj e-maila", + "register": { + "description": "Utwórz nowe konto, wypełnij swoje dane, aby się zarejestrować.", + "existingAccount": "Masz już konto?", + "get": "Pobierz", + "invite": "Kod zaproszenia", + "message": "#### Szanowny Użytkowniku,\n\nDziękujemy za Twoje zainteresowanie i wsparcie. Ze względu na zmianę strategii operacyjnej serwisu, zamknęliśmy funkcję rejestracji nowych użytkowników. W tym czasie korzystanie z serwisu przez obecnych użytkowników nie będzie w żaden sposób ograniczone.\n\nDążymy do zapewnienia lepszej obsługi i doświadczeń, dlatego w okresie zamknięcia rejestracji przeprowadzimy kompleksową optymalizację systemu i aktualizację funkcji. W przyszłości powitamy Cię z lepszą zawartością i usługami.\n\nŚledź naszą stronę internetową i platformy społecznościowe, aby uzyskać najnowsze informacje i powiadomienia. Dziękujemy za zrozumienie i wsparcie.\n\nW razie jakichkolwiek pytań lub potrzeby pomocy, skontaktuj się z naszym zespołem obsługi klienta.\n\n**Jeszcze raz dziękujemy za Twoje wsparcie i zrozumienie.**", + "passwordMismatch": "Wprowadzone hasła nie są zgodne", + "success": "Rejestracja zakończona sukcesem, automatycznie zalogowano!", + "switchToLogin": "Zaloguj się/Zresetuj e-mail", + "title": "Rejestracja" + }, + "reset": { + "description": "Wprowadź swój adres e-mail, aby zresetować hasło.", + "existingAccount": "Masz już konto?", + "get": "Uzyskaj", + "success": "Hasło zostało pomyślnie zresetowane, automatycznie przełączono na logowanie!", + "switchToLogin": "Zaloguj się/Zarejestruj się", + "title": "Zresetuj hasło" + }, + "tos": "Warunki usługi" +} diff --git a/apps/user/locales/pl-PL/common.json b/apps/user/locales/pl-PL/common.json new file mode 100644 index 0000000..221a03c --- /dev/null +++ b/apps/user/locales/pl-PL/common.json @@ -0,0 +1,52 @@ +{ + "empty": [ + "Wyobraź sobie, że tutaj jest pełno wspaniałych treści! Na razie musisz to sobie wyobrazić…", + "Ten obszar tajemniczo zniknął, przywołujemy go z powrotem!", + "Ups, nic się nie wydarzyło… możesz coś samemu dodać!", + "To jak na koncercie, gdy odkrywasz, że na scenie nikogo nie ma… Może chcesz wystąpić?", + "Znalazłeś pustą krainę! Może zbudujesz tu dom?", + "Na razie nic tu nie ma, ale kreatywność zaczyna się właśnie tutaj!", + "Nic tu nie ma… ale nie martw się, to dopiero początek!", + "Tutaj miała być wielka niespodzianka, ale uciekła!", + "Na razie nic tu nie ma, jakby szafka ze smakołykami była pusta.", + "To miejsce czeka na swojego bohatera!" + ], + "list": { + "pageInfo": "Strona {current} z {total}", + "rowsPerPage": "Liczba wierszy na stronę", + "selectedItems": "Wybrano {total} wierszy" + }, + "login": "Zaloguj się/Zarejestruj się", + "request": { + "10001": "Zapytanie nie powiodło się, spróbuj ponownie później lub sprawdź swoje warunki.", + "10002": "Aktualizacja nie powiodła się, spróbuj ponownie później.", + "10003": "Nie można tymczasowo wykonać operacji wstawiania, spróbuj ponownie później.", + "10004": "Operacja usuwania nie powiodła się, spróbuj ponownie później.", + "20001": "Informacje o użytkowniku już istnieją, zmień informacje i spróbuj ponownie.", + "20002": "Nie znaleziono użytkownika, sprawdź informacje i spróbuj ponownie.", + "20003": "Wprowadzone hasło jest nieprawidłowe, wprowadź je ponownie.", + "20004": "Użytkownik został zablokowany, w razie wątpliwości skontaktuj się z obsługą klienta.", + "20005": "Niewystarczające środki, doładuj konto i spróbuj ponownie.", + "20006": "Funkcja rejestracji jest tymczasowo niedostępna, spróbuj ponownie później.", + "30001": "Węzeł już istnieje, nie dodawaj go ponownie.", + "30002": "Nie znaleziono odpowiedniego węzła, sprawdź i spróbuj ponownie.", + "30003": "Grupa już istnieje, spróbuj użyć innej nazwy.", + "30004": "Nie znaleziono grupy, sprawdź informacje i spróbuj ponownie.", + "30005": "Grupa zawiera jeszcze treści, opróżnij ją i spróbuj ponownie.", + "400": "Parametry żądania są nieprawidłowe, sprawdź i spróbuj ponownie.", + "40002": "Nie znaleziono ważnego tokena, zaloguj się i spróbuj ponownie.", + "40003": "Obecny token jest nieważny, uzyskaj nowy i spróbuj ponownie.", + "40004": "Token wygasł, zaloguj się ponownie.", + "40005": "Nie masz uprawnień dostępu, w razie wątpliwości skontaktuj się z administratorem.", + "401": "Żądania są zbyt częste, spróbuj ponownie później.", + "500": "Serwer napotkał pewne problemy, spróbuj ponownie później.", + "50001": "Nie znaleziono informacji o kuponie, sprawdź i spróbuj ponownie.", + "50002": "Kupon został już użyty, nie można go użyć ponownie.", + "60001": "Subskrypcja wygasła, odnow ją i spróbuj ponownie.", + "60002": "Nie można tymczasowo użyć tej subskrypcji, spróbuj ponownie później.", + "70001": "Kod weryfikacyjny jest nieprawidłowy, wprowadź go ponownie.", + "80001": "Zadanie nie zostało pomyślnie dodane do kolejki, spróbuj ponownie później.", + "undefined": "Wystąpił błąd systemu, spróbuj ponownie później." + }, + "unlimited": "nieograniczony" +} diff --git a/apps/user/locales/pl-PL/dashboard.json b/apps/user/locales/pl-PL/dashboard.json new file mode 100644 index 0000000..59bd117 --- /dev/null +++ b/apps/user/locales/pl-PL/dashboard.json @@ -0,0 +1,25 @@ +{ + "cancel": "Anuluj", + "confirm": "Potwierdź", + "confirmResetSubscription": "Czy na pewno chcesz zresetować adres subskrypcji?", + "copy": "kopiuj", + "copyFailure": "Kopiowanie nie powiodło się, proszę skopiować ręcznie", + "copySuccess": "Skopiowano pomyślnie", + "download": "pobierz", + "expirationDays": "Czas wygaśnięcia/dni", + "import": "Importuj", + "latestAnnouncement": "Najnowsze ogłoszenie", + "manualImportMessage": "Ta aplikacja tymczasowo nie obsługuje wywoływania, proszę zaimportować ręcznie, adres subskrypcji został automatycznie skopiowany", + "mySubscriptions": "Moje subskrypcje", + "nextResetDays": "Następny reset/dni", + "prompt": "Podpowiedź", + "purchaseSubscription": "Zakup subskrypcji", + "qrCode": "Kod QR", + "resetSubscription": "Zresetuj adres subskrypcji", + "resetSuccess": "Resetowanie zakończone pomyślnie", + "scanToSubscribe": "Zeskanuj, aby zasubskrybować", + "subscriptionUrl": "Adres subskrypcji", + "totalTraffic": "Całkowity ruch", + "unknown": "nieznany", + "used": "Użyto" +} diff --git a/apps/user/locales/pl-PL/document.json b/apps/user/locales/pl-PL/document.json new file mode 100644 index 0000000..eb32a15 --- /dev/null +++ b/apps/user/locales/pl-PL/document.json @@ -0,0 +1,6 @@ +{ + "all": "Wszystko", + "document": "dokument", + "read": "czytaj", + "tutorial": "samouczek" +} diff --git a/apps/user/locales/pl-PL/index.json b/apps/user/locales/pl-PL/index.json new file mode 100644 index 0000000..925eea6 --- /dev/null +++ b/apps/user/locales/pl-PL/index.json @@ -0,0 +1,14 @@ +{ + "global_map_description": "Odkryj bezproblemowe globalne połączenia. Wybierz usługi sieciowe, które spełniają Twoje potrzeby i pozostań w kontakcie zawsze i wszędzie.", + "global_map_itle": "Globalne połączenie, bezproblemowe i łatwe", + "locations": "Regiony", + "per_month": "Miesięcznie", + "product_showcase_description": "Pozwól nam wybrać dla Ciebie najlepszy pakiet i ciesz się jego odkrywaniem.", + "product_showcase_title": "Wybierz swój pakiet", + "servers": "serwery", + "started": "Rozpocznij", + "subscribe": "Subskrybuj", + "tos": "Regulamin usługi", + "users": "użytkownicy", + "welcome": "Witamy w" +} diff --git a/apps/user/locales/pl-PL/language.json b/apps/user/locales/pl-PL/language.json new file mode 100644 index 0000000..b0d790c --- /dev/null +++ b/apps/user/locales/pl-PL/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "język czeski", + "de-DE": "niemiecki", + "en-US": "angielski", + "es-ES": "hiszpański", + "es-MX": "hiszpański (Meksyk)", + "fi-FI": "fiński", + "fr-FR": "francuski", + "hi-IN": "hindi", + "hu-HU": "język węgierski", + "ja-JP": "język japoński", + "ko-KR": "Koreański", + "no-NO": "norweski", + "pl-PL": "Polski", + "pt-BR": "portugalski (Brazylia)", + "ro-RO": "rumuński", + "ru-RU": "Rosyjski", + "th-TH": "tajski", + "tr-TR": "turecki", + "uk-UA": "ukraiński", + "vi-VN": "język wietnamski", + "zh-CN": "polski", + "zh-TW": "chiński (tradycyjny)" +} diff --git a/apps/user/locales/pl-PL/layout.json b/apps/user/locales/pl-PL/layout.json new file mode 100644 index 0000000..1d07240 --- /dev/null +++ b/apps/user/locales/pl-PL/layout.json @@ -0,0 +1,7 @@ +{ + "accountBalance": "Saldo konta", + "copyInviteLink": "Skopiuj link zaproszenia", + "copySuccess": "Pomyślnie skopiowano link zaproszenia", + "inviteCode": "kod zaproszenia", + "recharge": "doładowanie" +} diff --git a/apps/user/locales/pl-PL/menu.json b/apps/user/locales/pl-PL/menu.json new file mode 100644 index 0000000..237648d --- /dev/null +++ b/apps/user/locales/pl-PL/menu.json @@ -0,0 +1,17 @@ +{ + "affiliate": "Moje zaproszenie", + "announcement": "Lista ogłoszeń", + "dashboard": "Pulpit", + "document": "Dokumentacja użytkownika", + "finance": "Finanse", + "help": "Pomoc", + "logout": "Wyloguj się", + "order": "Lista zamówień", + "payment": "Szczegóły zamówienia", + "personal": "osobisty", + "profile": "Profil", + "server": "serwer", + "subscribe": "Kup subskrypcję", + "ticket": "Moje zgłoszenie", + "wallet": "Centrum finansowe" +} diff --git a/apps/user/locales/pl-PL/order.json b/apps/user/locales/pl-PL/order.json new file mode 100644 index 0000000..7508e9a --- /dev/null +++ b/apps/user/locales/pl-PL/order.json @@ -0,0 +1,61 @@ +{ + "balanceRecharge": "Doładowanie salda", + "buyNow": "Kup teraz", + "buySubscription": "Kup subskrypcję", + "cancel": "Anuluj", + "createdAt": "Czas utworzenia", + "description": "Jedno kliknięcie doładowania, łatwe do załatwienia", + "detail": "Szczegóły", + "enterAmount": "Wprowadź kwotę doładowania", + "enterCoupon": "Wprowadź kod rabatowy", + "goToPayment": "Przejdź do płatności", + "methods": { + "alipay_f2f": "Alipay (twarzą w twarz)", + "balance": "Saldo", + "epay": "Epay", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "month": "miesiąc", + "months": "miesięcy", + "name": "Nazwa", + "orderClosed": "Zamówienie zostało zamknięte", + "orderList": "Lista zamówień", + "orderNo": "Numer zamówienia", + "orderNumber": "Numer zamówienia", + "payment": "Przejdź do płatności", + "paymentAmount": "Kwota płatności", + "paymentMethod": "Metoda płatności", + "paymentSuccess": "Płatność zakończona sukcesem", + "productList": "Lista produktów", + "purchaseDuration": "Czas zakupu", + "recharge": "doładowanie", + "rechargeAmount": "Kwota doładowania", + "rechargeNow": "Doładuj teraz", + "renew": "odnów", + "renewSubscription": "Odnów subskrypcję", + "resetPrice": "Zresetuj cenę", + "resetTraffic": "Zresetuj ruch", + "resetTrafficDescription": "Resetuj tylko miesięczny transfer danych", + "resetTrafficTitle": "Zresetuj ruch", + "scanToPay": "Zeskanuj kod, aby zapłacić", + "status": { + "0": "Status", + "1": "Oczekuje na płatność", + "2": "Opłacone", + "3": "Anulowane", + "4": "Zamknięte", + "5": "Zakończone" + }, + "subscribeNow": "Subskrybuj teraz", + "timeExpired": "Czas na dokonanie płatności minął", + "type": { + "0": "Typ", + "1": "Nowy zakup", + "2": "Przedłużenie", + "3": "Resetowanie danych", + "4": "Doładowanie" + }, + "viewDocument": "Wyświetl dokument", + "waitingForPayment": "Oczekiwanie na płatność" +} diff --git a/apps/user/locales/pl-PL/profile.json b/apps/user/locales/pl-PL/profile.json new file mode 100644 index 0000000..50c667d --- /dev/null +++ b/apps/user/locales/pl-PL/profile.json @@ -0,0 +1,28 @@ +{ + "accountSettings": { + "accountSettings": "Ustawienia konta", + "loginPassword": "Hasło do logowania", + "newPassword": "Nowe hasło", + "passwordMismatch": "Wprowadzone hasła nie są zgodne", + "repeatNewPassword": "Powtórz nowe hasło", + "updatePassword": "Zaktualizuj hasło", + "updateSuccess": "Aktualizacja zakończona sukcesem" + }, + "notify": { + "bind": "Połącz", + "emailNotification": "Powiadomienie e-mail", + "notificationSettings": "Ustawienia powiadomień", + "telegramId": "Telegram ID", + "telegramIdPlaceholder": "Wprowadź Telegram ID", + "telegramNotification": "Powiadomienie Telegram", + "updateSuccess": "Aktualizacja zakończona sukcesem" + }, + "notifyEvent": { + "balanceChange": "Zmiana salda", + "finance": "Finanse", + "login": "Logowanie", + "notificationEvents": "Wydarzenia powiadomień", + "subscribe": "Subskrybuj", + "updateSuccess": "Aktualizacja zakończona sukcesem" + } +} diff --git a/apps/user/locales/pl-PL/subscribe.json b/apps/user/locales/pl-PL/subscribe.json new file mode 100644 index 0000000..85adeb2 --- /dev/null +++ b/apps/user/locales/pl-PL/subscribe.json @@ -0,0 +1,31 @@ +{ + "all": "Wszystko", + "billing": { + "billingTitle": "Rachunek za produkt", + "couponDiscount": "Zniżka z kodu rabatowego", + "duration": "Czas trwania pakietu", + "fee": "Opłata manipulacyjna", + "months": "miesiące", + "price": "Cena", + "productDiscount": "Zniżka na produkt", + "total": "Suma" + }, + "buy": "Kup", + "category": "kategoria", + "detail": { + "availableTraffic": "Dostępny ruch", + "connectedDevices": "Liczba jednocześnie podłączonych IP", + "connectionSpeed": "Prędkość połączenia", + "productDetail": "Szczegóły produktu" + }, + "methods": { + "alipay_f2f": "Alipay (twarzą w twarz)", + "balance": "Saldo", + "epay": "Łatwe płatności", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "perMonth": "miesiąc", + "productDescription": "Opis produktu", + "products": "Produkty" +} diff --git a/apps/user/locales/pl-PL/ticket.json b/apps/user/locales/pl-PL/ticket.json new file mode 100644 index 0000000..353c83f --- /dev/null +++ b/apps/user/locales/pl-PL/ticket.json @@ -0,0 +1,26 @@ +{ + "cancel": "Anuluj", + "check": "Sprawdź", + "close": "zamknij", + "closeSuccess": "Zamknięcie zgłoszenia zakończone sukcesem", + "closeWarning": "Po zamknięciu zgłoszenia nie będzie można kontynuować odpowiadania.", + "confirm": "potwierdź", + "confirmClose": "Czy na pewno chcesz zamknąć zgłoszenie?", + "createSuccess": "Utworzono pomyślnie", + "createTicket": "Utwórz zgłoszenie", + "createTicketDescription": "Odpowiedź na zgłoszenie w ciągu 24 godzin", + "description": "opis", + "inputPlaceholder": "Wpisz swoją wiadomość", + "reply": "odpowiedź", + "status": { + "0": "Status", + "1": "Oczekujące", + "2": "W trakcie", + "3": "Rozwiązane", + "4": "Zamknięte" + }, + "submit": "Zatwierdź", + "ticketList": "Lista zgłoszeń", + "title": "Tytuł", + "updatedAt": "Zaktualizowano" +} diff --git a/apps/user/locales/pl-PL/wallet.json b/apps/user/locales/pl-PL/wallet.json new file mode 100644 index 0000000..04d5705 --- /dev/null +++ b/apps/user/locales/pl-PL/wallet.json @@ -0,0 +1,15 @@ +{ + "amount": "kwota", + "balance": "saldo", + "createdAt": "czas", + "title": "Saldo konta", + "type": { + "0": "Typ", + "1": "Doładowanie", + "2": "Wypłata", + "3": "Zakup", + "4": "Zwrot", + "5": "Nagroda", + "6": "Prowizja" + } +} diff --git a/apps/user/locales/pt-BR/affiliate.json b/apps/user/locales/pt-BR/affiliate.json new file mode 100644 index 0000000..8cce85c --- /dev/null +++ b/apps/user/locales/pt-BR/affiliate.json @@ -0,0 +1,11 @@ +{ + "commissionInfo": "Valor total, comissão por convite transferida automaticamente para o saldo", + "commissionRate": "Taxa de Comissão", + "copyInviteLink": "Copiar link de convite", + "copySuccess": "Cópia bem-sucedida", + "inviteCode": "Código de Convite", + "inviteRecords": "Registros de Convite", + "registrationTime": "Hora de Registro", + "totalCommission": "Comissão Total", + "userEmail": "Email do usuário" +} diff --git a/apps/user/locales/pt-BR/auth.json b/apps/user/locales/pt-BR/auth.json new file mode 100644 index 0000000..2ee4018 --- /dev/null +++ b/apps/user/locales/pt-BR/auth.json @@ -0,0 +1,38 @@ +{ + "check": { + "checking": "Verificando...", + "continue": "Continuar", + "description": "Por favor, insira seu e-mail para continuar com o login ou registro.", + "email": "Por favor, insira um endereço de e-mail válido.", + "title": "Login/Registro", + "whitelist": "O domínio do e-mail não está na lista de permissões." + }, + "login": { + "description": "Por favor, insira suas informações de conta para fazer login.", + "forgotPassword": "Esqueceu a senha?", + "success": "Login bem-sucedido!", + "switchAccount": "Registrar/Trocar de conta", + "title": "Login" + }, + "orWithEmail": "ou use o e-mail", + "register": { + "description": "Crie uma nova conta, preencha suas informações para se registrar.", + "existingAccount": "Já tem uma conta?", + "get": "Obter", + "invite": "Código de convite", + "message": "#### Prezado usuário,\n\nAgradecemos seu interesse e apoio. Devido a ajustes na estratégia de operação do site, fechamos o registro de novos usuários. Durante este período, o uso por usuários existentes não será afetado.\n\nEstamos comprometidos em oferecer um serviço e experiência melhores, por isso realizaremos uma otimização completa do sistema e atualizações de funcionalidades durante o fechamento do registro. No futuro, receberemos você com conteúdo e serviços de maior qualidade.\n\nAcompanhe nosso site e plataformas de mídia social para obter as últimas atualizações e notificações. Agradecemos sua compreensão e apoio.\n\nSe tiver dúvidas ou precisar de ajuda, entre em contato com nossa equipe de atendimento ao cliente.\n\n**Mais uma vez, obrigado por seu apoio e compreensão.**", + "passwordMismatch": "As senhas inseridas não coincidem", + "success": "Registro bem-sucedido, login automático realizado!", + "switchToLogin": "Login/Redefinir e-mail", + "title": "Registrar" + }, + "reset": { + "description": "Por favor, insira seu endereço de e-mail para redefinir a senha.", + "existingAccount": "Já tem uma conta?", + "get": "Obter", + "success": "Senha redefinida com sucesso, você foi automaticamente redirecionado para o login!", + "switchToLogin": "Entrar/Registrar", + "title": "Redefinir Senha" + }, + "tos": "Termos de Serviço" +} diff --git a/apps/user/locales/pt-BR/common.json b/apps/user/locales/pt-BR/common.json new file mode 100644 index 0000000..2e58923 --- /dev/null +++ b/apps/user/locales/pt-BR/common.json @@ -0,0 +1,52 @@ +{ + "empty": [ + "Imagine que aqui está cheio de conteúdo incrível! Por enquanto, só podemos imaginar...", + "Esta área desapareceu misteriosamente, estamos tentando trazê-la de volta!", + "Ops, nada aconteceu... você pode preencher com algo!", + "É como descobrir que não há ninguém no palco de um show... que tal você se apresentar?", + "Você encontrou uma terra de oportunidades vazia! Que tal construir uma casa?", + "Aqui está vazio por enquanto, mas a criatividade começa aqui!", + "Nada por enquanto... mas não se preocupe, isso é só o começo!", + "Havia uma grande surpresa preparada aqui, mas ela escapou!", + "Nada por enquanto, como se o armário de lanches estivesse vazio.", + "Este espaço está esperando seu protagonista aparecer!" + ], + "list": { + "pageInfo": "Página {current} de {total}", + "rowsPerPage": "Linhas por página", + "selectedItems": "{total} linhas selecionadas" + }, + "login": "Entrar/Cadastrar", + "request": { + "10001": "A consulta não foi bem-sucedida, por favor, tente novamente mais tarde ou verifique suas condições.", + "10002": "A operação de atualização não foi bem-sucedida, por favor, tente novamente mais tarde.", + "10003": "Não é possível concluir a operação de inserção no momento, por favor, tente novamente mais tarde.", + "10004": "A operação de exclusão não pôde ser concluída, por favor, tente novamente mais tarde.", + "20001": "As informações do usuário já existem, por favor, altere as informações e tente novamente.", + "20002": "Usuário não encontrado, por favor, verifique as informações e tente novamente.", + "20003": "A senha que você digitou está incorreta, por favor, digite novamente.", + "20004": "O usuário foi desativado, se tiver dúvidas, entre em contato com o suporte ao cliente.", + "20005": "Saldo insuficiente, por favor, recarregue e tente novamente.", + "20006": "A função de registro não está disponível no momento, por favor, tente novamente mais tarde.", + "30001": "O nó já existe, por favor, não adicione novamente.", + "30002": "Nenhum nó relacionado encontrado, por favor, verifique e tente novamente.", + "30003": "O grupo já existe, por favor, tente usar outro nome.", + "30004": "Grupo não encontrado, por favor, confirme as informações e tente novamente.", + "30005": "Ainda há conteúdo neste grupo, por favor, esvazie-o e tente novamente.", + "400": "Os parâmetros da solicitação estão incorretos, por favor, verifique e envie novamente.", + "40002": "Token válido não encontrado, por favor, faça login e tente novamente.", + "40003": "O Token atual é inválido, por favor, obtenha um novo e tente novamente.", + "40004": "O Token expirou, por favor, faça login novamente.", + "40005": "Você não tem permissão de acesso, se tiver dúvidas, entre em contato com o administrador.", + "401": "Solicitações muito frequentes, por favor, tente novamente mais tarde.", + "500": "O servidor encontrou alguns problemas, por favor, tente novamente mais tarde.", + "50001": "Informações do cupom não encontradas, por favor, verifique e tente novamente.", + "50002": "O cupom já foi usado, não pode ser reutilizado.", + "60001": "A assinatura expirou, por favor, renove para continuar usando.", + "60002": "Não é possível usar a assinatura no momento, por favor, tente novamente mais tarde.", + "70001": "O código de verificação está incorreto, por favor, digite novamente.", + "80001": "A tarefa não foi adicionada à fila com sucesso, por favor, tente novamente mais tarde.", + "undefined": "Ocorreu um erro no sistema, por favor, tente novamente mais tarde." + }, + "unlimited": "ilimitado" +} diff --git a/apps/user/locales/pt-BR/dashboard.json b/apps/user/locales/pt-BR/dashboard.json new file mode 100644 index 0000000..77a09f5 --- /dev/null +++ b/apps/user/locales/pt-BR/dashboard.json @@ -0,0 +1,25 @@ +{ + "cancel": "Cancelar", + "confirm": "Confirmar", + "confirmResetSubscription": "Você confirma a redefinição do endereço de assinatura?", + "copy": "Copiar", + "copyFailure": "Falha ao copiar, por favor copie manualmente", + "copySuccess": "Cópia bem-sucedida", + "download": "baixar", + "expirationDays": "Data de expiração/dias", + "import": "Importar", + "latestAnnouncement": "Último Anúncio", + "manualImportMessage": "Este aplicativo não suporta ativação no momento, por favor, importe manualmente. O endereço de assinatura foi copiado automaticamente.", + "mySubscriptions": "Minhas assinaturas", + "nextResetDays": "Próxima redefinição/dias", + "prompt": "Sugestão", + "purchaseSubscription": "Comprar Assinatura", + "qrCode": "Código QR", + "resetSubscription": "Redefinir endereço de assinatura", + "resetSuccess": "Redefinição bem-sucedida", + "scanToSubscribe": "Escanear para assinar", + "subscriptionUrl": "URL de assinatura", + "totalTraffic": "Tráfego Total", + "unknown": "desconhecido", + "used": "Usado" +} diff --git a/apps/user/locales/pt-BR/document.json b/apps/user/locales/pt-BR/document.json new file mode 100644 index 0000000..104c46e --- /dev/null +++ b/apps/user/locales/pt-BR/document.json @@ -0,0 +1,6 @@ +{ + "all": "Tudo", + "document": "Documento", + "read": "ler", + "tutorial": "tutorial" +} diff --git a/apps/user/locales/pt-BR/index.json b/apps/user/locales/pt-BR/index.json new file mode 100644 index 0000000..61669f7 --- /dev/null +++ b/apps/user/locales/pt-BR/index.json @@ -0,0 +1,14 @@ +{ + "global_map_description": "Explore uma conexão global sem interrupções. Escolha o serviço de rede que atenda às suas necessidades e mantenha-se conectado a qualquer hora e em qualquer lugar.", + "global_map_itle": "Conexão Global, Fácil e Sem Preocupações", + "locations": "localizações", + "per_month": "por mês", + "product_showcase_description": "Vamos escolher o pacote que mais se adequa a você e explorá-lo com alegria.", + "product_showcase_title": "Escolha seu plano", + "servers": "servidores", + "started": "Começar a usar", + "subscribe": "Inscrever-se", + "tos": "Termos de Serviço", + "users": "usuários", + "welcome": "Bem-vindo ao" +} diff --git a/apps/user/locales/pt-BR/language.json b/apps/user/locales/pt-BR/language.json new file mode 100644 index 0000000..54a4c64 --- /dev/null +++ b/apps/user/locales/pt-BR/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "Tcheco", + "de-DE": "Alemão", + "en-US": "inglês", + "es-ES": "Espanhol", + "es-MX": "Espanhol (México)", + "fi-FI": "Finlandês", + "fr-FR": "Francês", + "hi-IN": "hindi", + "hu-HU": "Húngaro", + "ja-JP": "Japonês", + "ko-KR": "Coreano", + "no-NO": "Norueguês", + "pl-PL": "Polonês", + "pt-BR": "Português (Brasil)", + "ro-RO": "Romeno", + "ru-RU": "Russo", + "th-TH": "Tailandês", + "tr-TR": "turco", + "uk-UA": "Ucraniano", + "vi-VN": "Vietnamita", + "zh-CN": "Chinês (Simplificado)", + "zh-TW": "Chinês (Tradicional)" +} diff --git a/apps/user/locales/pt-BR/layout.json b/apps/user/locales/pt-BR/layout.json new file mode 100644 index 0000000..bd07c97 --- /dev/null +++ b/apps/user/locales/pt-BR/layout.json @@ -0,0 +1,7 @@ +{ + "accountBalance": "Saldo da Conta", + "copyInviteLink": "Copiar link de convite", + "copySuccess": "Link de convite copiado com sucesso", + "inviteCode": "Código de Convite", + "recharge": "recarregar" +} diff --git a/apps/user/locales/pt-BR/menu.json b/apps/user/locales/pt-BR/menu.json new file mode 100644 index 0000000..78af982 --- /dev/null +++ b/apps/user/locales/pt-BR/menu.json @@ -0,0 +1,17 @@ +{ + "affiliate": "Meu Convite", + "announcement": "Lista de Anúncios", + "dashboard": "Painel", + "document": "Documentação de uso", + "finance": "Finanças", + "help": "ajuda", + "logout": "Sair", + "order": "Lista de Pedidos", + "payment": "Detalhes do Pedido", + "personal": "Pessoal", + "profile": "Perfil", + "server": "servidor", + "subscribe": "Comprar assinatura", + "ticket": "Meu Chamado", + "wallet": "Centro Financeiro" +} diff --git a/apps/user/locales/pt-BR/order.json b/apps/user/locales/pt-BR/order.json new file mode 100644 index 0000000..0e7b29d --- /dev/null +++ b/apps/user/locales/pt-BR/order.json @@ -0,0 +1,61 @@ +{ + "balanceRecharge": "Recarga de Saldo", + "buyNow": "Compre Agora", + "buySubscription": "Comprar Assinatura", + "cancel": "Cancelar", + "createdAt": "Data de Criação", + "description": "Recarga com um clique, fácil e rápido", + "detail": "Detalhes", + "enterAmount": "Por favor, insira o valor de recarga", + "enterCoupon": "Insira o código de desconto", + "goToPayment": "Ir para o pagamento", + "methods": { + "alipay_f2f": "Alipay (face a face)", + "balance": "Saldo", + "epay": "Epay", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "month": "mês", + "months": "meses", + "name": "nome", + "orderClosed": "Pedido encerrado", + "orderList": "Lista de Pedidos", + "orderNo": "Número do Pedido", + "orderNumber": "Número do Pedido", + "payment": "Fazer pagamento", + "paymentAmount": "Valor do Pagamento", + "paymentMethod": "Método de Pagamento", + "paymentSuccess": "Pagamento bem-sucedido", + "productList": "Lista de Produtos", + "purchaseDuration": "Duração da compra", + "recharge": "recarregar", + "rechargeAmount": "Valor de recarga", + "rechargeNow": "Recarregar agora", + "renew": "renovar", + "renewSubscription": "Renovar Assinatura", + "resetPrice": "Redefinir Preço", + "resetTraffic": "Redefinir Tráfego", + "resetTrafficDescription": "Apenas redefine o tráfego do mês atual, ok?", + "resetTrafficTitle": "Redefinir Tráfego", + "scanToPay": "Por favor, escaneie para pagar", + "status": { + "0": "status", + "1": "Aguardando Pagamento", + "2": "Pago", + "3": "Cancelado", + "4": "Fechado", + "5": "Concluído" + }, + "subscribeNow": "Assine agora", + "timeExpired": "O tempo de pagamento expirou", + "type": { + "0": "tipo", + "1": "nova compra", + "2": "renovação", + "3": "redefinir dados", + "4": "recarregar" + }, + "viewDocument": "Ver Documento", + "waitingForPayment": "Aguardando pagamento" +} diff --git a/apps/user/locales/pt-BR/profile.json b/apps/user/locales/pt-BR/profile.json new file mode 100644 index 0000000..bfdd0a0 --- /dev/null +++ b/apps/user/locales/pt-BR/profile.json @@ -0,0 +1,28 @@ +{ + "accountSettings": { + "accountSettings": "Configurações da Conta", + "loginPassword": "Senha de Login", + "newPassword": "Nova Senha", + "passwordMismatch": "As senhas digitadas não coincidem", + "repeatNewPassword": "Repita a Nova Senha", + "updatePassword": "Atualizar Senha", + "updateSuccess": "Atualização bem-sucedida" + }, + "notify": { + "bind": "Vincular", + "emailNotification": "Notificação por e-mail", + "notificationSettings": "Configurações de notificação", + "telegramId": "ID do Telegram", + "telegramIdPlaceholder": "Insira o ID do Telegram", + "telegramNotification": "Notificação do Telegram", + "updateSuccess": "Atualização bem-sucedida" + }, + "notifyEvent": { + "balanceChange": "Mudança de saldo", + "finance": "Finanças", + "login": "Login", + "notificationEvents": "Eventos de notificação", + "subscribe": "Inscrever-se", + "updateSuccess": "Atualização bem-sucedida" + } +} diff --git a/apps/user/locales/pt-BR/subscribe.json b/apps/user/locales/pt-BR/subscribe.json new file mode 100644 index 0000000..022ac43 --- /dev/null +++ b/apps/user/locales/pt-BR/subscribe.json @@ -0,0 +1,31 @@ +{ + "all": "todos", + "billing": { + "billingTitle": "Fatura do Produto", + "couponDiscount": "Desconto do Cupom", + "duration": "Duração do Pacote", + "fee": "Taxa de Serviço", + "months": "meses", + "price": "Preço", + "productDiscount": "Desconto do Produto", + "total": "Preço Total" + }, + "buy": "Comprar", + "category": "categoria", + "detail": { + "availableTraffic": "Tráfego disponível", + "connectedDevices": "Dispositivos conectados simultaneamente", + "connectionSpeed": "Velocidade de conexão", + "productDetail": "Detalhes do produto" + }, + "methods": { + "alipay_f2f": "Alipay (cara a cara)", + "balance": "Saldo", + "epay": "Epay", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "perMonth": "mês", + "productDescription": "Descrição do produto", + "products": "produtos" +} diff --git a/apps/user/locales/pt-BR/ticket.json b/apps/user/locales/pt-BR/ticket.json new file mode 100644 index 0000000..f9120ae --- /dev/null +++ b/apps/user/locales/pt-BR/ticket.json @@ -0,0 +1,26 @@ +{ + "cancel": "Cancelar", + "check": "Verificar", + "close": "fechar", + "closeSuccess": "Ordem de serviço fechada com sucesso", + "closeWarning": "Após fechar o chamado, não será possível continuar respondendo.", + "confirm": "Confirmar", + "confirmClose": "Confirmar fechamento do chamado?", + "createSuccess": "Criação bem-sucedida", + "createTicket": "Criar Chamado", + "createTicketDescription": "O chamado será respondido em até 24 horas", + "description": "descrição", + "inputPlaceholder": "Digite sua mensagem", + "reply": "resposta", + "status": { + "0": "status", + "1": "Aguardando", + "2": "Em processamento", + "3": "Resolvido", + "4": "Fechado" + }, + "submit": "Enviar", + "ticketList": "Lista de Chamados", + "title": "Título", + "updatedAt": "Atualizado em" +} diff --git a/apps/user/locales/pt-BR/wallet.json b/apps/user/locales/pt-BR/wallet.json new file mode 100644 index 0000000..4821b55 --- /dev/null +++ b/apps/user/locales/pt-BR/wallet.json @@ -0,0 +1,15 @@ +{ + "amount": "quantia", + "balance": "saldo", + "createdAt": "hora", + "title": "Saldo da Conta", + "type": { + "0": "tipo", + "1": "recarga", + "2": "retirada", + "3": "compra", + "4": "reembolso", + "5": "recompensa", + "6": "comissão" + } +} diff --git a/apps/user/locales/ro-RO/affiliate.json b/apps/user/locales/ro-RO/affiliate.json new file mode 100644 index 0000000..559bf3c --- /dev/null +++ b/apps/user/locales/ro-RO/affiliate.json @@ -0,0 +1,11 @@ +{ + "commissionInfo": "Suma totală, comisionul de invitație este transferat automat în sold", + "commissionRate": "Rata comisionului", + "copyInviteLink": "Copiază linkul de invitație", + "copySuccess": "Copiere reușită", + "inviteCode": "codInvitație", + "inviteRecords": "Înregistrări de invitații", + "registrationTime": "Timp de înregistrare", + "totalCommission": "Comision total", + "userEmail": "Email utilizator" +} diff --git a/apps/user/locales/ro-RO/auth.json b/apps/user/locales/ro-RO/auth.json new file mode 100644 index 0000000..fc15126 --- /dev/null +++ b/apps/user/locales/ro-RO/auth.json @@ -0,0 +1,38 @@ +{ + "check": { + "checking": "Se verifică...", + "continue": "Continuă", + "description": "Vă rugăm să introduceți adresa de e-mail pentru a continua autentificarea sau înregistrarea.", + "email": "Vă rugăm să introduceți o adresă de e-mail validă.", + "title": "Autentificare/Înregistrare", + "whitelist": "Domeniul adresei de e-mail nu se află pe lista albă permisă." + }, + "login": { + "description": "Vă rugăm să introduceți informațiile contului pentru a vă conecta.", + "forgotPassword": "Ați uitat parola?", + "success": "Autentificare reușită!", + "switchAccount": "Înregistrare/Schimbare cont", + "title": "Autentificare" + }, + "orWithEmail": "sau folosește e-mailul", + "register": { + "description": "Creați un cont nou, completați informațiile dvs. pentru a vă înregistra.", + "existingAccount": "Aveți deja un cont?", + "get": "Obțineți", + "invite": "Cod de invitație", + "message": "#### Stimate utilizator,\n\nVă mulțumim pentru interesul și sprijinul acordat. Datorită ajustării strategiei de operare a site-ului, am închis funcția de înregistrare a utilizatorilor noi. În această perioadă, utilizatorii existenți nu vor fi afectați în niciun fel.\n\nNe angajăm să vă oferim servicii și experiențe mai bune, așa că vom efectua optimizări complete ale sistemului și actualizări ale funcționalităților în perioada în care înregistrarea este închisă. În viitor, vă vom întâmpina cu conținut și servicii de calitate superioară.\n\nVă rugăm să urmăriți site-ul nostru și platformele de social media pentru a obține cele mai recente actualizări și notificări. Vă mulțumim pentru înțelegere și sprijin.\n\nDacă aveți întrebări sau aveți nevoie de ajutor, nu ezitați să contactați echipa noastră de asistență clienți.\n\n**Vă mulțumim din nou pentru sprijinul și înțelegerea dvs.**", + "passwordMismatch": "Parolele introduse nu se potrivesc", + "success": "Înregistrare reușită, ați fost conectat automat!", + "switchToLogin": "Conectare/Resetare email", + "title": "Înregistrare" + }, + "reset": { + "description": "Introduceți adresa dvs. de e-mail pentru a reseta parola.", + "existingAccount": "Aveți deja un cont?", + "get": "Obțineți", + "success": "Parola a fost resetată cu succes, ați fost redirecționat automat la autentificare!", + "switchToLogin": "Autentificare/Înregistrare", + "title": "Resetați parola" + }, + "tos": "Termeni și condiții" +} diff --git a/apps/user/locales/ro-RO/common.json b/apps/user/locales/ro-RO/common.json new file mode 100644 index 0000000..40b42ac --- /dev/null +++ b/apps/user/locales/ro-RO/common.json @@ -0,0 +1,52 @@ +{ + "empty": [ + "Imaginează-ți că aici este plin de conținut captivant! Deocamdată, doar imaginația ne ajută...", + "Această zonă a dispărut misterios, lucrăm să o aducem înapoi!", + "Ups, nu s-a întâmplat nimic... poți adăuga tu ceva!", + "E ca și cum ai descoperi că scena unui concert este goală... vrei să urci și să performezi?", + "Ai găsit un tărâm gol! Vrei să construiești o casă?", + "Aici momentan nu este nimic, dar creativitatea începe de aici!", + "Nu este nimic... dar nu-ți face griji, acesta este doar începutul!", + "Aici era pregătită o mare surpriză, dar surpriza a fugit!", + "Deocamdată nu este nimic, ca și cum dulapul cu gustări ar fi fost golit.", + "Această zonă așteaptă ca protagonistul să-și facă apariția!" + ], + "list": { + "pageInfo": "Pagina {current} din {total}", + "rowsPerPage": "Rânduri pe pagină", + "selectedItems": "{total} rânduri selectate" + }, + "login": "Autentificare/Înregistrare", + "request": { + "10001": "Interogarea nu a reușit momentan, vă rugăm să încercați din nou mai târziu sau să verificați condițiile dumneavoastră.", + "10002": "Operațiunea de actualizare nu a reușit, vă rugăm să încercați din nou mai târziu.", + "10003": "Nu se poate finaliza momentan operațiunea de inserare, vă rugăm să încercați din nou mai târziu.", + "10004": "Operațiunea de ștergere nu a putut fi finalizată, vă rugăm să încercați din nou mai târziu.", + "20001": "Informațiile despre acest utilizator există deja, vă rugăm să schimbați informațiile și să încercați din nou.", + "20002": "Utilizatorul nu a fost găsit, vă rugăm să verificați informațiile și să încercați din nou.", + "20003": "Parola introdusă este incorectă, vă rugăm să o introduceți din nou.", + "20004": "Acest utilizator a fost dezactivat, dacă aveți întrebări, vă rugăm să contactați serviciul clienți.", + "20005": "Fonduri insuficiente, vă rugăm să reîncărcați și să încercați din nou.", + "20006": "Funcția de înregistrare nu este disponibilă momentan, vă rugăm să încercați din nou mai târziu.", + "30001": "Acest nod există deja, vă rugăm să nu adăugați din nou.", + "30002": "Nodul relevant nu a fost găsit, vă rugăm să verificați și să încercați din nou.", + "30003": "Grupul există deja, vă rugăm să încercați să folosiți un alt nume.", + "30004": "Grupul nu a fost găsit, vă rugăm să confirmați informațiile și să încercați din nou.", + "30005": "Grupul conține încă elemente, vă rugăm să goliți și să încercați din nou.", + "400": "Parametrii cererii nu sunt corecți, vă rugăm să verificați și să trimiteți din nou.", + "40002": "Token valid nu a fost găsit, vă rugăm să vă autentificați și să încercați din nou.", + "40003": "Tokenul curent nu este valid, vă rugăm să obțineți unul nou și să încercați din nou.", + "40004": "Tokenul a expirat, vă rugăm să vă autentificați din nou.", + "40005": "Nu aveți permisiunea de acces, dacă aveți întrebări, vă rugăm să contactați administratorul.", + "401": "Prea multe cereri într-un timp scurt, vă rugăm să încercați mai târziu.", + "500": "Serverul a întâmpinat unele probleme, vă rugăm să încercați din nou mai târziu.", + "50001": "Informațiile despre cupon nu au fost găsite, vă rugăm să verificați și să încercați din nou.", + "50002": "Acest cupon a fost deja utilizat, nu poate fi folosit din nou.", + "60001": "Abonamentul a expirat, vă rugăm să reînnoiți pentru a continua utilizarea.", + "60002": "Nu se poate utiliza momentan acest abonament, vă rugăm să încercați din nou mai târziu.", + "70001": "Codul de verificare este incorect, vă rugăm să îl introduceți din nou.", + "80001": "Sarcina nu a fost adăugată cu succes în coadă, vă rugăm să încercați din nou mai târziu.", + "undefined": "A apărut o eroare în sistem, vă rugăm să încercați din nou mai târziu." + }, + "unlimited": "nelimitat" +} diff --git a/apps/user/locales/ro-RO/dashboard.json b/apps/user/locales/ro-RO/dashboard.json new file mode 100644 index 0000000..23edad6 --- /dev/null +++ b/apps/user/locales/ro-RO/dashboard.json @@ -0,0 +1,25 @@ +{ + "cancel": "Anulare", + "confirm": "Confirmare", + "confirmResetSubscription": "Confirmați resetarea adresei de abonament?", + "copy": "Copiază", + "copyFailure": "Copierea a eșuat, vă rugăm să copiați manual", + "copySuccess": "Copiere reușită", + "download": "descărcare", + "expirationDays": "Zile până la expirare", + "import": "Import", + "latestAnnouncement": "Ultimul anunț", + "manualImportMessage": "Această aplicație nu suportă momentan activarea, vă rugăm să importați manual, adresa de abonament a fost copiată automat", + "mySubscriptions": "Abonamentele mele", + "nextResetDays": "Următoarea resetare/zile", + "prompt": "Sfat", + "purchaseSubscription": "Achiziționează abonament", + "qrCode": "cod QR", + "resetSubscription": "Resetează adresa de abonament", + "resetSuccess": "Resetare reușită", + "scanToSubscribe": "Scanează pentru a te abona", + "subscriptionUrl": "Adresă de abonament", + "totalTraffic": "Trafic total", + "unknown": "necunoscut", + "used": "utilizat" +} diff --git a/apps/user/locales/ro-RO/document.json b/apps/user/locales/ro-RO/document.json new file mode 100644 index 0000000..faca3b9 --- /dev/null +++ b/apps/user/locales/ro-RO/document.json @@ -0,0 +1,6 @@ +{ + "all": "Toate", + "document": "Document", + "read": "citiți", + "tutorial": "tutorial" +} diff --git a/apps/user/locales/ro-RO/index.json b/apps/user/locales/ro-RO/index.json new file mode 100644 index 0000000..30b43cd --- /dev/null +++ b/apps/user/locales/ro-RO/index.json @@ -0,0 +1,14 @@ +{ + "global_map_description": "Explorați o conexiune globală fără cusur. Alegeți serviciul de rețea care se potrivește nevoilor dumneavoastră și rămâneți conectat oriunde și oricând.", + "global_map_itle": "Conectare globală, fără griji", + "locations": "Regiuni", + "per_month": "pe lună", + "product_showcase_description": "Permiteți-ne să alegem pachetul care vi se potrivește cel mai bine și să-l explorați cu bucurie.", + "product_showcase_title": "Alegeți-vă pachetul", + "servers": "servere", + "started": "Începeți utilizarea", + "subscribe": "Abonare", + "tos": "Acord de servicii", + "users": "utilizatori", + "welcome": "Bine ați venit la" +} diff --git a/apps/user/locales/ro-RO/language.json b/apps/user/locales/ro-RO/language.json new file mode 100644 index 0000000..336c35d --- /dev/null +++ b/apps/user/locales/ro-RO/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "cehă", + "de-DE": "germană", + "en-US": "engleză", + "es-ES": "Spaniolă", + "es-MX": "Spaniolă (Mexic)", + "fi-FI": "Finlandeză", + "fr-FR": "franceză", + "hi-IN": "hindi", + "hu-HU": "Maghiară", + "ja-JP": "Japoneză", + "ko-KR": "Coreeană", + "no-NO": "norvegiană", + "pl-PL": "Poloneză", + "pt-BR": "Portugheză (Brazilia)", + "ro-RO": "Română", + "ru-RU": "Rusă", + "th-TH": "Thailandeză", + "tr-TR": "turcă", + "uk-UA": "Ucraineană", + "vi-VN": "Vietnameză", + "zh-CN": "Chineză (Simplificată)", + "zh-TW": "Chineză (tradițională)" +} diff --git a/apps/user/locales/ro-RO/layout.json b/apps/user/locales/ro-RO/layout.json new file mode 100644 index 0000000..17c62a5 --- /dev/null +++ b/apps/user/locales/ro-RO/layout.json @@ -0,0 +1,7 @@ +{ + "accountBalance": "Soldul contului", + "copyInviteLink": "Copiază linkul de invitație", + "copySuccess": "Linkul de invitație a fost copiat cu succes", + "inviteCode": "Cod de invitație", + "recharge": "Reîncărcare" +} diff --git a/apps/user/locales/ro-RO/menu.json b/apps/user/locales/ro-RO/menu.json new file mode 100644 index 0000000..2716279 --- /dev/null +++ b/apps/user/locales/ro-RO/menu.json @@ -0,0 +1,17 @@ +{ + "affiliate": "Invitațiile mele", + "announcement": "Lista de anunțuri", + "dashboard": "Tablou de bord", + "document": "Documentație de utilizare", + "finance": "Finanțe", + "help": "Ajutor", + "logout": "Deconectare", + "order": "Listă de comenzi", + "payment": "Detalii comandă", + "personal": "personal", + "profile": "Profil personal", + "server": "serviciu", + "subscribe": "Abonare", + "ticket": "Tichetul meu", + "wallet": "Centru Financiar" +} diff --git a/apps/user/locales/ro-RO/order.json b/apps/user/locales/ro-RO/order.json new file mode 100644 index 0000000..4d82d95 --- /dev/null +++ b/apps/user/locales/ro-RO/order.json @@ -0,0 +1,61 @@ +{ + "balanceRecharge": "Reîncărcare sold", + "buyNow": "Cumpără acum", + "buySubscription": "Cumpără abonament", + "cancel": "Anulare", + "createdAt": "Data creării", + "description": "Reîncărcare cu un singur clic, ușor de realizat", + "detail": "Detalii", + "enterAmount": "Introduceți suma de reîncărcare", + "enterCoupon": "Introduceți codul de reducere", + "goToPayment": "Mergi la plată", + "methods": { + "alipay_f2f": "Alipay (față în față)", + "balance": "Sold", + "epay": "Epay", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "month": "lună", + "months": "luni", + "name": "Nume", + "orderClosed": "Comanda a fost închisă", + "orderList": "Listă de comenzi", + "orderNo": "Număr comandă", + "orderNumber": "Număr comandă", + "payment": "Plătește", + "paymentAmount": "Suma de plată", + "paymentMethod": "Metodă de plată", + "paymentSuccess": "Plata a fost efectuată cu succes", + "productList": "Listă de produse", + "purchaseDuration": "Durata achiziției", + "recharge": "reîncărcare", + "rechargeAmount": "Suma de reîncărcare", + "rechargeNow": "Reîncarcă acum", + "renew": "reînnoire", + "renewSubscription": "Reînnoiește abonamentul", + "resetPrice": "Resetează prețul", + "resetTraffic": "Resetează traficul", + "resetTrafficDescription": "Resetează doar traficul din această lună", + "resetTrafficTitle": "Resetează traficul", + "scanToPay": "Vă rugăm să scanați pentru a plăti", + "status": { + "0": "stare", + "1": "în așteptare pentru plată", + "2": "plătit", + "3": "anulat", + "4": "închis", + "5": "finalizat" + }, + "subscribeNow": "Abonează-te acum", + "timeExpired": "Timpul de plată a expirat", + "type": { + "0": "Tip", + "1": "Achiziție nouă", + "2": "Reînnoire", + "3": "Resetare trafic", + "4": "Reîncărcare" + }, + "viewDocument": "Vizualizați documentul", + "waitingForPayment": "Așteptare pentru plată" +} diff --git a/apps/user/locales/ro-RO/profile.json b/apps/user/locales/ro-RO/profile.json new file mode 100644 index 0000000..8a52dfc --- /dev/null +++ b/apps/user/locales/ro-RO/profile.json @@ -0,0 +1,28 @@ +{ + "accountSettings": { + "accountSettings": "Setări cont", + "loginPassword": "Parolă de autentificare", + "newPassword": "Parolă nouă", + "passwordMismatch": "Parolele introduse nu se potrivesc", + "repeatNewPassword": "Repetă parola nouă", + "updatePassword": "Actualizează parola", + "updateSuccess": "Actualizare reușită" + }, + "notify": { + "bind": "Conectare", + "emailNotification": "Notificare prin email", + "notificationSettings": "Setări notificări", + "telegramId": "ID Telegram", + "telegramIdPlaceholder": "Introduceți ID-ul Telegram", + "telegramNotification": "Notificare Telegram", + "updateSuccess": "Actualizare reușită" + }, + "notifyEvent": { + "balanceChange": "Schimbare de sold", + "finance": "Finanțe", + "login": "Autentificare", + "notificationEvents": "Evenimente de notificare", + "subscribe": "Abonare", + "updateSuccess": "Actualizare reușită" + } +} diff --git a/apps/user/locales/ro-RO/subscribe.json b/apps/user/locales/ro-RO/subscribe.json new file mode 100644 index 0000000..6594d61 --- /dev/null +++ b/apps/user/locales/ro-RO/subscribe.json @@ -0,0 +1,31 @@ +{ + "all": "Toate", + "billing": { + "billingTitle": "Factură produs", + "couponDiscount": "Reducere cupon", + "duration": "Durata pachetului", + "fee": "Taxă de procesare", + "months": "luni", + "price": "Preț", + "productDiscount": "Reducere produs", + "total": "Total" + }, + "buy": "Cumpără", + "category": "categorie", + "detail": { + "availableTraffic": "Trafic disponibil", + "connectedDevices": "Număr de IP-uri conectate simultan", + "connectionSpeed": "Viteza de conectare", + "productDetail": "Detalii produs" + }, + "methods": { + "alipay_f2f": "Alipay (față în față)", + "balance": "Sold", + "epay": "Epay", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "perMonth": "lună", + "productDescription": "Descrierea produsului", + "products": "produse" +} diff --git a/apps/user/locales/ro-RO/ticket.json b/apps/user/locales/ro-RO/ticket.json new file mode 100644 index 0000000..55a15c3 --- /dev/null +++ b/apps/user/locales/ro-RO/ticket.json @@ -0,0 +1,26 @@ +{ + "cancel": "Anulează", + "check": "Verificare", + "close": "închide", + "closeSuccess": "Închiderea tichetului a fost realizată cu succes", + "closeWarning": "După închiderea tichetului, nu veți mai putea răspunde.", + "confirm": "Confirmare", + "confirmClose": "Confirmați închiderea tichetului?", + "createSuccess": "Creat cu succes", + "createTicket": "Creează un tichet", + "createTicketDescription": "Vom răspunde la cererea dumneavoastră în termen de 24 de ore", + "description": "descriere", + "inputPlaceholder": "Introduceți mesajul dvs.", + "reply": "răspuns", + "status": { + "0": "Stare", + "1": "În așteptare", + "2": "În procesare", + "3": "Rezolvat", + "4": "Închis" + }, + "submit": "Trimite", + "ticketList": "Listă de tichete", + "title": "Titlu", + "updatedAt": "Actualizat la" +} diff --git a/apps/user/locales/ro-RO/wallet.json b/apps/user/locales/ro-RO/wallet.json new file mode 100644 index 0000000..d702ec4 --- /dev/null +++ b/apps/user/locales/ro-RO/wallet.json @@ -0,0 +1,15 @@ +{ + "amount": "Sumă", + "balance": "Sold", + "createdAt": "Timp", + "title": "Soldul contului", + "type": { + "0": "Tip", + "1": "Reîncărcare", + "2": "Retragere", + "3": "Cumpărare", + "4": "Rambursare", + "5": "Recompensă", + "6": "Comision" + } +} diff --git a/apps/user/locales/ru-RU/affiliate.json b/apps/user/locales/ru-RU/affiliate.json new file mode 100644 index 0000000..9f36d91 --- /dev/null +++ b/apps/user/locales/ru-RU/affiliate.json @@ -0,0 +1,11 @@ +{ + "commissionInfo": "Сумма статистики, комиссия за приглашение автоматически зачисляется на баланс", + "commissionRate": "Комиссионная ставка", + "copyInviteLink": "Скопировать ссылку приглашения", + "copySuccess": "Копирование успешно", + "inviteCode": "Код приглашения", + "inviteRecords": "Записи приглашений", + "registrationTime": "Время регистрации", + "totalCommission": "Общая сумма комиссии", + "userEmail": "Электронная почта пользователя" +} diff --git a/apps/user/locales/ru-RU/auth.json b/apps/user/locales/ru-RU/auth.json new file mode 100644 index 0000000..a9d6e49 --- /dev/null +++ b/apps/user/locales/ru-RU/auth.json @@ -0,0 +1,38 @@ +{ + "check": { + "checking": "Проверка...", + "continue": "Продолжить", + "description": "Пожалуйста, введите ваш адрес электронной почты для продолжения входа или регистрации.", + "email": "Пожалуйста, введите действительный адрес электронной почты.", + "title": "Вход/Регистрация", + "whitelist": "Домен электронной почты не входит в разрешенный белый список." + }, + "login": { + "description": "Пожалуйста, введите данные вашей учетной записи для входа.", + "forgotPassword": "Забыли пароль?", + "success": "Вход выполнен успешно!", + "switchAccount": "Регистрация/Смена аккаунта", + "title": "Вход" + }, + "orWithEmail": "или с помощью электронной почты", + "register": { + "description": "Создайте новый аккаунт, заполните свои данные для регистрации.", + "existingAccount": "Уже есть аккаунт?", + "get": "Получить", + "invite": "Код приглашения", + "message": "#### Уважаемый пользователь,\n\nБлагодарим вас за интерес и поддержку. В связи с изменением стратегии работы сайта, мы закрыли функцию регистрации новых пользователей. В этот период использование сайта существующими пользователями не будет затронуто.\n\nМы стремимся предоставить вам лучший сервис и опыт, поэтому в период закрытия регистрации будет проведена полная оптимизация системы и обновление функций. В будущем мы встретим вас с более качественным контентом и услугами.\n\nПожалуйста, следите за нашим сайтом и социальными сетями, чтобы получать последние новости и уведомления. Благодарим за ваше понимание и поддержку.\n\nЕсли у вас есть вопросы или вам нужна помощь, пожалуйста, свяжитесь с нашей службой поддержки.\n\n**Еще раз благодарим за вашу поддержку и понимание.**", + "passwordMismatch": "Введенные пароли не совпадают", + "success": "Регистрация прошла успешно, вы автоматически вошли в систему!", + "switchToLogin": "Войти/Сбросить почту", + "title": "Регистрация" + }, + "reset": { + "description": "Пожалуйста, введите ваш адрес электронной почты, чтобы сбросить пароль.", + "existingAccount": "Уже есть аккаунт?", + "get": "Получить", + "success": "Пароль успешно сброшен, автоматически переключено на вход!", + "switchToLogin": "Вход/Регистрация", + "title": "Сброс пароля" + }, + "tos": "Условия обслуживания" +} diff --git a/apps/user/locales/ru-RU/common.json b/apps/user/locales/ru-RU/common.json new file mode 100644 index 0000000..af0339c --- /dev/null +++ b/apps/user/locales/ru-RU/common.json @@ -0,0 +1,52 @@ +{ + "empty": [ + "Представьте, что здесь полно удивительного контента! Пока что только воображение…", + "Эта область таинственно исчезла, мы пытаемся вернуть её обратно!", + "Ой, ничего не произошло… может, вы что-то добавите сами!", + "Это как на концерте обнаружить, что на сцене никого нет… может, вы хотите выступить?", + "Вы нашли пустую землю! Хотите построить дом?", + "Здесь пока ничего нет, но именно здесь начинается творчество!", + "Ничего нет… но не волнуйтесь, это только начало!", + "Здесь был приготовлен большой сюрприз, но он ускользнул!", + "Пока ничего нет, как будто шкаф со сладостями опустел.", + "Эта пустая площадка ждет своего главного героя!" + ], + "list": { + "pageInfo": "Страница {current} из {total}", + "rowsPerPage": "Строк на странице", + "selectedItems": "Выбрано {total} строк" + }, + "login": "Войти/Зарегистрироваться", + "request": { + "10001": "Запрос пока не удался, пожалуйста, повторите попытку позже или проверьте ваши условия.", + "10002": "Операция обновления не удалась, пожалуйста, попробуйте позже.", + "10003": "Вставка временно невозможна, пожалуйста, попробуйте позже.", + "10004": "Удаление не удалось, пожалуйста, попробуйте позже.", + "20001": "Информация о пользователе уже существует, пожалуйста, измените данные и попробуйте снова.", + "20002": "Пользователь не найден, пожалуйста, проверьте информацию и попробуйте снова.", + "20003": "Введённый вами пароль неверен, пожалуйста, введите его снова.", + "20004": "Пользователь заблокирован, если у вас есть вопросы, пожалуйста, свяжитесь с поддержкой.", + "20005": "Недостаточно средств, пожалуйста, пополните баланс и попробуйте снова.", + "20006": "Регистрация временно недоступна, пожалуйста, попробуйте позже.", + "30001": "Узел уже существует, пожалуйста, не добавляйте его повторно.", + "30002": "Связанный узел не найден, пожалуйста, проверьте и попробуйте снова.", + "30003": "Группа уже существует, пожалуйста, попробуйте использовать другое название.", + "30004": "Группа не найдена, пожалуйста, проверьте информацию и попробуйте снова.", + "30005": "В группе всё ещё есть содержимое, пожалуйста, очистите её и попробуйте снова.", + "400": "Параметры запроса некорректны, пожалуйста, проверьте и отправьте снова.", + "40002": "Действительный токен не найден, пожалуйста, войдите в систему и попробуйте снова.", + "40003": "Текущий токен недействителен, пожалуйста, получите новый и попробуйте снова.", + "40004": "Срок действия токена истёк, пожалуйста, войдите в систему снова.", + "40005": "У вас нет доступа, если у вас есть вопросы, пожалуйста, свяжитесь с администратором.", + "401": "Слишком частые запросы, пожалуйста, попробуйте позже.", + "500": "Сервер столкнулся с некоторыми проблемами, пожалуйста, попробуйте позже.", + "50001": "Информация о купоне не найдена, пожалуйста, проверьте и попробуйте снова.", + "50002": "Купон уже использован, повторное использование невозможно.", + "60001": "Подписка истекла, пожалуйста, продлите её и используйте снова.", + "60002": "Подписка временно недоступна, пожалуйста, попробуйте позже.", + "70001": "Код подтверждения неверен, пожалуйста, введите его снова.", + "80001": "Задача не была успешно добавлена в очередь, пожалуйста, попробуйте позже.", + "undefined": "Произошла ошибка в системе, пожалуйста, попробуйте позже." + }, + "unlimited": "неограниченный" +} diff --git a/apps/user/locales/ru-RU/dashboard.json b/apps/user/locales/ru-RU/dashboard.json new file mode 100644 index 0000000..f9401cb --- /dev/null +++ b/apps/user/locales/ru-RU/dashboard.json @@ -0,0 +1,25 @@ +{ + "cancel": "Отмена", + "confirm": "Подтвердить", + "confirmResetSubscription": "Вы уверены, что хотите сбросить адрес подписки?", + "copy": "Копировать", + "copyFailure": "Не удалось скопировать, пожалуйста, скопируйте вручную", + "copySuccess": "Копирование успешно", + "download": "скачать", + "expirationDays": "Срок действия/дни", + "import": "Импорт", + "latestAnnouncement": "Последнее объявление", + "manualImportMessage": "Это приложение временно не поддерживает вызов, пожалуйста, импортируйте вручную, адрес подписки уже скопирован", + "mySubscriptions": "Мои подписки", + "nextResetDays": "Следующее сброс/дней", + "prompt": "Подсказка", + "purchaseSubscription": "Купить подписку", + "qrCode": "QR-код", + "resetSubscription": "Сбросить адрес подписки", + "resetSuccess": "Сброс выполнен успешно", + "scanToSubscribe": "Сканируйте для подписки", + "subscriptionUrl": "Адрес подписки", + "totalTraffic": "Общий трафик", + "unknown": "неизвестно", + "used": "Использовано" +} diff --git a/apps/user/locales/ru-RU/document.json b/apps/user/locales/ru-RU/document.json new file mode 100644 index 0000000..60da236 --- /dev/null +++ b/apps/user/locales/ru-RU/document.json @@ -0,0 +1,6 @@ +{ + "all": "все", + "document": "Документ", + "read": "Читать", + "tutorial": "учебник" +} diff --git a/apps/user/locales/ru-RU/index.json b/apps/user/locales/ru-RU/index.json new file mode 100644 index 0000000..a984554 --- /dev/null +++ b/apps/user/locales/ru-RU/index.json @@ -0,0 +1,14 @@ +{ + "global_map_description": "Исследуйте бесшовные глобальные соединения. Выбирайте сетевые услуги, соответствующие вашим потребностям, и оставайтесь на связи в любое время и в любом месте.", + "global_map_itle": "Глобальная связь, легко и без забот", + "locations": "регионы", + "per_month": "Ежемесячно", + "product_showcase_description": "Позвольте нам выбрать наиболее подходящий для вас пакет и с удовольствием его исследовать.", + "product_showcase_title": "Выберите ваш пакет", + "servers": "Серверы", + "started": "Начать использование", + "subscribe": "Подписаться", + "tos": "Условия обслуживания", + "users": "пользователи", + "welcome": "Добро пожаловать в" +} diff --git a/apps/user/locales/ru-RU/language.json b/apps/user/locales/ru-RU/language.json new file mode 100644 index 0000000..9264727 --- /dev/null +++ b/apps/user/locales/ru-RU/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "Чешский", + "de-DE": "Немецкий", + "en-US": "английский", + "es-ES": "испанский", + "es-MX": "испанский (Мексика)", + "fi-FI": "финский", + "fr-FR": "Французский", + "hi-IN": "хинди", + "hu-HU": "Венгерский", + "ja-JP": "японский", + "ko-KR": "Корейский", + "no-NO": "норвежский", + "pl-PL": "польский", + "pt-BR": "португальский (Бразилия)", + "ro-RO": "румынский", + "ru-RU": "Русский", + "th-TH": "Тайский", + "tr-TR": "турецкий", + "uk-UA": "Украинский", + "vi-VN": "Вьетнамский", + "zh-CN": "русский", + "zh-TW": "Китайский (традиционный)" +} diff --git a/apps/user/locales/ru-RU/layout.json b/apps/user/locales/ru-RU/layout.json new file mode 100644 index 0000000..a285b84 --- /dev/null +++ b/apps/user/locales/ru-RU/layout.json @@ -0,0 +1,7 @@ +{ + "accountBalance": "Баланс счета", + "copyInviteLink": "Скопировать ссылку приглашения", + "copySuccess": "Ссылка для приглашения успешно скопирована", + "inviteCode": "Код приглашения", + "recharge": "Пополнение" +} diff --git a/apps/user/locales/ru-RU/menu.json b/apps/user/locales/ru-RU/menu.json new file mode 100644 index 0000000..99ebb28 --- /dev/null +++ b/apps/user/locales/ru-RU/menu.json @@ -0,0 +1,17 @@ +{ + "affiliate": "Мои приглашения", + "announcement": "Список объявлений", + "dashboard": "Главная", + "document": "Документация по использованию", + "finance": "финансы", + "help": "Помощь", + "logout": "Выйти из системы", + "order": "Список заказов", + "payment": "Детали заказа", + "personal": "Личный", + "profile": "Личный кабинет", + "server": "Сервер", + "subscribe": "Купить подписку", + "ticket": "Мой запрос", + "wallet": "Финансовый центр" +} diff --git a/apps/user/locales/ru-RU/order.json b/apps/user/locales/ru-RU/order.json new file mode 100644 index 0000000..bde742d --- /dev/null +++ b/apps/user/locales/ru-RU/order.json @@ -0,0 +1,61 @@ +{ + "balanceRecharge": "Пополнение баланса", + "buyNow": "Купить сейчас", + "buySubscription": "Купить подписку", + "cancel": "Отмена", + "createdAt": "Время создания", + "description": "Одним нажатием пополните баланс, легко и просто", + "detail": "Подробности", + "enterAmount": "Введите сумму пополнения", + "enterCoupon": "Введите промокод", + "goToPayment": "Перейти к оплате", + "methods": { + "alipay_f2f": "Alipay (лицом к лицу)", + "balance": "Баланс", + "epay": "Epay", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "month": "месяц", + "months": "месяцы", + "name": "название", + "orderClosed": "Заказ закрыт", + "orderList": "Список заказов", + "orderNo": "Номер заказа", + "orderNumber": "Номер заказа", + "payment": "Перейти к оплате", + "paymentAmount": "Сумма платежа", + "paymentMethod": "Способ оплаты", + "paymentSuccess": "Оплата успешно завершена", + "productList": "Список продуктов", + "purchaseDuration": "Продолжительность покупки", + "recharge": "Пополнение", + "rechargeAmount": "Сумма пополнения", + "rechargeNow": "Пополнить сейчас", + "renew": "обновить", + "renewSubscription": "Продлить подписку", + "resetPrice": "Сбросить цену", + "resetTraffic": "Сбросить трафик", + "resetTrafficDescription": "Сбросить только месячный трафик", + "resetTrafficTitle": "Сброс трафика", + "scanToPay": "Пожалуйста, отсканируйте для оплаты", + "status": { + "0": "Статус", + "1": "Ожидает оплаты", + "2": "Оплачено", + "3": "Отменено", + "4": "Закрыто", + "5": "Завершено" + }, + "subscribeNow": "Подписаться сейчас", + "timeExpired": "Время оплаты истекло", + "type": { + "0": "Тип", + "1": "Новая покупка", + "2": "Продление", + "3": "Сброс трафика", + "4": "Пополнение" + }, + "viewDocument": "Просмотр документа", + "waitingForPayment": "Ожидание оплаты" +} diff --git a/apps/user/locales/ru-RU/profile.json b/apps/user/locales/ru-RU/profile.json new file mode 100644 index 0000000..f2c51f1 --- /dev/null +++ b/apps/user/locales/ru-RU/profile.json @@ -0,0 +1,28 @@ +{ + "accountSettings": { + "accountSettings": "Настройки аккаунта", + "loginPassword": "Пароль для входа", + "newPassword": "Новый пароль", + "passwordMismatch": "Пароли не совпадают", + "repeatNewPassword": "Повторите новый пароль", + "updatePassword": "Обновить пароль", + "updateSuccess": "Успешно обновлено" + }, + "notify": { + "bind": "Привязать", + "emailNotification": "Уведомление по электронной почте", + "notificationSettings": "Настройки уведомлений", + "telegramId": "Telegram ID", + "telegramIdPlaceholder": "Введите Telegram ID", + "telegramNotification": "Уведомление в Telegram", + "updateSuccess": "Успешно обновлено" + }, + "notifyEvent": { + "balanceChange": "Изменение баланса", + "finance": "Финансы", + "login": "Вход", + "notificationEvents": "События уведомлений", + "subscribe": "Подписка", + "updateSuccess": "Успешное обновление" + } +} diff --git a/apps/user/locales/ru-RU/subscribe.json b/apps/user/locales/ru-RU/subscribe.json new file mode 100644 index 0000000..eaf1897 --- /dev/null +++ b/apps/user/locales/ru-RU/subscribe.json @@ -0,0 +1,31 @@ +{ + "all": "все", + "billing": { + "billingTitle": "Счет за товар", + "couponDiscount": "Скидка по промокоду", + "duration": "Продолжительность пакета", + "fee": "Комиссия", + "months": "месяцев", + "price": "Цена", + "productDiscount": "Скидка на товар", + "total": "Итоговая цена" + }, + "buy": "Купить", + "category": "категория", + "detail": { + "availableTraffic": "Доступный трафик", + "connectedDevices": "Количество одновременно подключенных IP", + "connectionSpeed": "Скорость соединения", + "productDetail": "Детали продукта" + }, + "methods": { + "alipay_f2f": "Alipay(лицом к лицу)", + "balance": "Баланс", + "epay": "Epay", + "stripe_alipay": "Stripe(Alipay)", + "stripe_wechat_pay": "Stripe(WeChat)" + }, + "perMonth": "месяц", + "productDescription": "Описание товара", + "products": "товары" +} diff --git a/apps/user/locales/ru-RU/ticket.json b/apps/user/locales/ru-RU/ticket.json new file mode 100644 index 0000000..4827fa2 --- /dev/null +++ b/apps/user/locales/ru-RU/ticket.json @@ -0,0 +1,26 @@ +{ + "cancel": "Отмена", + "check": "Проверить", + "close": "Закрыть", + "closeSuccess": "Заявка успешно закрыта", + "closeWarning": "После закрытия заявки вы не сможете продолжать отвечать.", + "confirm": "Подтвердить", + "confirmClose": "Вы уверены, что хотите закрыть заявку?", + "createSuccess": "Создание успешно", + "createTicket": "Создать заявку", + "createTicketDescription": "Ответ на заявку в течение 24 часов", + "description": "описание", + "inputPlaceholder": "Введите ваше сообщение", + "reply": "ответ", + "status": { + "0": "Статус", + "1": "В ожидании", + "2": "В процессе", + "3": "Решено", + "4": "Закрыто" + }, + "submit": "Отправить", + "ticketList": "Список заявок", + "title": "Заголовок", + "updatedAt": "Обновлено" +} diff --git a/apps/user/locales/ru-RU/wallet.json b/apps/user/locales/ru-RU/wallet.json new file mode 100644 index 0000000..f5a82e1 --- /dev/null +++ b/apps/user/locales/ru-RU/wallet.json @@ -0,0 +1,15 @@ +{ + "amount": "сумма", + "balance": "Баланс", + "createdAt": "время", + "title": "Баланс счета", + "type": { + "0": "Тип", + "1": "Пополнение", + "2": "Вывод", + "3": "Покупка", + "4": "Возврат", + "5": "Награда", + "6": "Комиссия" + } +} diff --git a/apps/user/locales/th-TH/affiliate.json b/apps/user/locales/th-TH/affiliate.json new file mode 100644 index 0000000..3dcc460 --- /dev/null +++ b/apps/user/locales/th-TH/affiliate.json @@ -0,0 +1,11 @@ +{ + "commissionInfo": "จำนวนเงินที่คำนวณ ค่าคอมมิชชั่นจากการเชิญจะถูกโอนเข้ายอดคงเหลือโดยอัตโนมัติ", + "commissionRate": "อัตราค่าคอมมิชชั่น", + "copyInviteLink": "คัดลอกลิงก์เชิญ", + "copySuccess": "คัดลอกสำเร็จ", + "inviteCode": "รหัสเชิญ", + "inviteRecords": "บันทึกการเชิญ", + "registrationTime": "เวลาลงทะเบียน", + "totalCommission": "ค่าคอมมิชชั่นทั้งหมด", + "userEmail": "อีเมลผู้ใช้" +} diff --git a/apps/user/locales/th-TH/auth.json b/apps/user/locales/th-TH/auth.json new file mode 100644 index 0000000..5d26338 --- /dev/null +++ b/apps/user/locales/th-TH/auth.json @@ -0,0 +1,38 @@ +{ + "check": { + "checking": "กำลังตรวจสอบ...", + "continue": "ดำเนินการต่อ", + "description": "กรุณาใส่อีเมลของคุณเพื่อเข้าสู่ระบบหรือสมัครสมาชิกต่อไป", + "email": "กรุณาใส่ที่อยู่อีเมลที่ถูกต้อง", + "title": "เข้าสู่ระบบ/สมัครสมาชิก", + "whitelist": "โดเมนอีเมลไม่อยู่ในรายชื่อที่อนุญาต" + }, + "login": { + "description": "กรุณาใส่ข้อมูลบัญชีของคุณเพื่อเข้าสู่ระบบ", + "forgotPassword": "ลืมรหัสผ่าน?", + "success": "เข้าสู่ระบบสำเร็จ!", + "switchAccount": "ลงทะเบียน/เปลี่ยนบัญชี", + "title": "เข้าสู่ระบบ" + }, + "orWithEmail": "หรือใช้ที่อยู่อีเมล", + "register": { + "description": "สร้างบัญชีใหม่ กรอกข้อมูลของคุณเพื่อสมัครสมาชิก", + "existingAccount": "มีบัญชีอยู่แล้วหรือไม่?", + "get": "รับ", + "invite": "รหัสเชิญ", + "message": "#### เรียนผู้ใช้ที่เคารพ\n\nขอขอบคุณที่ให้ความสนใจและสนับสนุนเรา เนื่องจากการปรับเปลี่ยนนโยบายการดำเนินงานของเว็บไซต์ เราได้ปิดการลงทะเบียนผู้ใช้ใหม่ ในช่วงเวลานี้ การใช้งานของผู้ใช้ปัจจุบันจะไม่ได้รับผลกระทบใดๆ\n\nเรามุ่งมั่นที่จะให้บริการและประสบการณ์ที่ดียิ่งขึ้นแก่คุณ ดังนั้นเราจะทำการปรับปรุงระบบและอัปเกรดฟังก์ชันอย่างเต็มรูปแบบในช่วงที่ปิดการลงทะเบียน ในอนาคต เราจะต้อนรับคุณด้วยเนื้อหาและบริการที่มีคุณภาพยิ่งขึ้น\n\nโปรดติดตามเว็บไซต์และแพลตฟอร์มโซเชียลมีเดียของเรา เพื่อรับข้อมูลและการแจ้งเตือนล่าสุด ขอบคุณสำหรับความเข้าใจและการสนับสนุนของคุณ\n\nหากมีคำถามหรือความต้องการความช่วยเหลือใดๆ โปรดติดต่อทีมบริการลูกค้าของเราได้ตลอดเวลา\n\n**ขอขอบคุณอีกครั้งสำหรับการสนับสนุนและความเข้าใจของคุณ**", + "passwordMismatch": "รหัสผ่านที่กรอกไม่ตรงกัน", + "success": "สมัครสมาชิกสำเร็จ เข้าสู่ระบบอัตโนมัติแล้ว!", + "switchToLogin": "เข้าสู่ระบบ/รีเซ็ตอีเมล", + "title": "สมัครสมาชิก" + }, + "reset": { + "description": "กรุณาใส่ที่อยู่อีเมลของคุณเพื่อรีเซ็ตรหัสผ่าน", + "existingAccount": "มีบัญชีอยู่แล้ว?", + "get": "รับ", + "success": "รีเซ็ตรหัสผ่านสำเร็จ, เปลี่ยนไปที่เข้าสู่ระบบโดยอัตโนมัติ!", + "switchToLogin": "เข้าสู่ระบบ/สมัครสมาชิก", + "title": "รีเซ็ตรหัสผ่าน" + }, + "tos": "ข้อกำหนดในการให้บริการ" +} diff --git a/apps/user/locales/th-TH/common.json b/apps/user/locales/th-TH/common.json new file mode 100644 index 0000000..f6da725 --- /dev/null +++ b/apps/user/locales/th-TH/common.json @@ -0,0 +1,52 @@ +{ + "empty": [ + "ลองจินตนาการว่าที่นี่เต็มไปด้วยเนื้อหาที่น่าตื่นเต้น! ตอนนี้ต้องพึ่งจินตนาการไปก่อน...", + "พื้นที่นี้หายไปอย่างลึกลับ เรากำลังเรียกมันกลับมา!", + "โอ๊ะ ไม่มีอะไรเกิดขึ้น...คุณสามารถเติมอะไรลงไปเองได้!", + "เหมือนกับการพบว่าเวทีคอนเสิร์ตไม่มีใครอยู่...คุณอยากขึ้นไปแสดงไหม?", + "คุณพบดินแดนว่างเปล่า! อยากสร้างบ้านไหม?", + "ที่นี่ว่างเปล่าในตอนนี้ แต่ความคิดสร้างสรรค์เริ่มต้นจากที่นี่!", + "ไม่มีอะไรเลย...แต่ไม่ต้องกังวล นี่เป็นเพียงจุดเริ่มต้น!", + "ที่นี่เคยเตรียมเซอร์ไพรส์ใหญ่ไว้ แต่เซอร์ไพรส์หนีไปแล้ว!", + "ตอนนี้ไม่มีอะไร เหมือนตู้ขนมที่ถูกกินจนหมด", + "พื้นที่ว่างนี้กำลังรอคอยตัวเอกของมัน!" + ], + "list": { + "pageInfo": "หน้า {current} จากทั้งหมด {total} หน้า", + "rowsPerPage": "จำนวนแถวต่อหน้า", + "selectedItems": "เลือกแล้ว {total} แถว" + }, + "login": "เข้าสู่ระบบ/ลงทะเบียน", + "request": { + "10001": "การค้นหายังไม่สำเร็จ กรุณาลองใหม่อีกครั้งในภายหลังหรือตรวจสอบเงื่อนไขของคุณ", + "10002": "การอัปเดตไม่สำเร็จ กรุณาลองใหม่อีกครั้งในภายหลัง", + "10003": "ไม่สามารถดำเนินการแทรกได้ในขณะนี้ กรุณาลองใหม่อีกครั้งในภายหลัง", + "10004": "การลบไม่สำเร็จ กรุณาลองใหม่อีกครั้งในภายหลัง", + "20001": "ข้อมูลผู้ใช้นี้มีอยู่แล้ว กรุณาเปลี่ยนข้อมูลและลองใหม่อีกครั้ง", + "20002": "ไม่พบผู้ใช้ กรุณาตรวจสอบข้อมูลและลองใหม่อีกครั้ง", + "20003": "รหัสผ่านที่คุณป้อนไม่ถูกต้อง กรุณาใส่ใหม่อีกครั้ง", + "20004": "ผู้ใช้นี้ถูกระงับ หากมีข้อสงสัยกรุณาติดต่อฝ่ายบริการลูกค้า", + "20005": "ยอดเงินคงเหลือไม่เพียงพอ กรุณาเติมเงินและลองใหม่อีกครั้ง", + "20006": "ฟังก์ชันการลงทะเบียนไม่สามารถใช้งานได้ในขณะนี้ กรุณาลองใหม่อีกครั้งในภายหลัง", + "30001": "โหนดนี้มีอยู่แล้ว กรุณาอย่าเพิ่มซ้ำ", + "30002": "ไม่พบโหนดที่เกี่ยวข้อง กรุณาตรวจสอบและลองใหม่อีกครั้ง", + "30003": "กลุ่มนี้มีอยู่แล้ว กรุณาลองใช้ชื่ออื่น", + "30004": "ไม่พบกลุ่มนี้ กรุณายืนยันข้อมูลและลองใหม่อีกครั้ง", + "30005": "ยังมีเนื้อหาในกลุ่มนี้ กรุณาล้างข้อมูลก่อนลองใหม่อีกครั้ง", + "400": "พารามิเตอร์คำขอไม่ถูกต้อง กรุณาตรวจสอบและส่งใหม่อีกครั้ง", + "40002": "ไม่พบ Token ที่ถูกต้อง กรุณาเข้าสู่ระบบก่อนลองใหม่อีกครั้ง", + "40003": "Token ปัจจุบันไม่ถูกต้อง กรุณารับใหม่และลองอีกครั้ง", + "40004": "Token หมดอายุ กรุณาเข้าสู่ระบบใหม่", + "40005": "คุณไม่มีสิทธิ์เข้าถึง หากมีข้อสงสัยกรุณาติดต่อผู้ดูแลระบบ", + "401": "คำขอบ่อยเกินไป กรุณาลองใหม่อีกครั้งในภายหลัง", + "500": "เซิร์ฟเวอร์พบปัญหา กรุณาลองใหม่อีกครั้งในภายหลัง", + "50001": "ไม่พบข้อมูลคูปองที่สอดคล้องกัน กรุณาตรวจสอบและลองใหม่อีกครั้ง", + "50002": "คูปองนี้ถูกใช้ไปแล้ว ไม่สามารถใช้ซ้ำได้", + "60001": "การสมัครสมาชิกหมดอายุ กรุณาต่ออายุและใช้งานใหม่", + "60002": "ไม่สามารถใช้การสมัครสมาชิกนี้ได้ในขณะนี้ กรุณาลองใหม่อีกครั้งในภายหลัง", + "70001": "รหัสยืนยันไม่ถูกต้อง กรุณาใส่ใหม่อีกครั้ง", + "80001": "งานไม่สำเร็จในการเข้าคิว กรุณาลองใหม่อีกครั้งในภายหลัง", + "undefined": "ระบบเกิดข้อผิดพลาด กรุณาลองใหม่อีกครั้งในภายหลัง" + }, + "unlimited": "ไม่จำกัด" +} diff --git a/apps/user/locales/th-TH/dashboard.json b/apps/user/locales/th-TH/dashboard.json new file mode 100644 index 0000000..51916c5 --- /dev/null +++ b/apps/user/locales/th-TH/dashboard.json @@ -0,0 +1,25 @@ +{ + "cancel": "ยกเลิก", + "confirm": "ยืนยัน", + "confirmResetSubscription": "คุณต้องการรีเซ็ตที่อยู่การสมัครสมาชิกหรือไม่?", + "copy": "คัดลอก", + "copyFailure": "คัดลอกไม่สำเร็จ กรุณาคัดลอกด้วยตนเอง", + "copySuccess": "คัดลอกสำเร็จ", + "download": "ดาวน์โหลด", + "expirationDays": "วันหมดอายุ/วัน", + "import": "นำเข้า", + "latestAnnouncement": "ประกาศล่าสุด", + "manualImportMessage": "แอปนี้ยังไม่รองรับการเปิดใช้งาน กรุณานำเข้าด้วยตนเอง ที่อยู่การสมัครสมาชิกได้ถูกคัดลอกอัตโนมัติแล้ว", + "mySubscriptions": "การสมัครสมาชิกของฉัน", + "nextResetDays": "รีเซ็ตครั้งถัดไป/วัน", + "prompt": "คำแนะนำ", + "purchaseSubscription": "ซื้อการสมัครสมาชิก", + "qrCode": "คิวอาร์โค้ด", + "resetSubscription": "รีเซ็ตที่อยู่การสมัครสมาชิก", + "resetSuccess": "รีเซ็ตสำเร็จ", + "scanToSubscribe": "สแกนเพื่อสมัครสมาชิก", + "subscriptionUrl": "ที่อยู่การสมัครสมาชิก", + "totalTraffic": "ปริมาณการใช้งานทั้งหมด", + "unknown": "ไม่ทราบ", + "used": "ใช้แล้ว" +} diff --git a/apps/user/locales/th-TH/document.json b/apps/user/locales/th-TH/document.json new file mode 100644 index 0000000..d4730eb --- /dev/null +++ b/apps/user/locales/th-TH/document.json @@ -0,0 +1,6 @@ +{ + "all": "ทั้งหมด", + "document": "เอกสาร", + "read": "อ่าน", + "tutorial": "บทแนะนำ" +} diff --git a/apps/user/locales/th-TH/index.json b/apps/user/locales/th-TH/index.json new file mode 100644 index 0000000..86bb66a --- /dev/null +++ b/apps/user/locales/th-TH/index.json @@ -0,0 +1,14 @@ +{ + "global_map_description": "สำรวจการเชื่อมต่อทั่วโลกที่ไร้รอยต่อ เลือกบริการเครือข่ายที่ตรงกับความต้องการของคุณ เพื่อให้คุณเชื่อมต่อได้ทุกที่ทุกเวลา", + "global_map_itle": "เชื่อมต่อทั่วโลกได้อย่างง่ายดายและไร้กังวล", + "locations": "ภูมิภาค", + "per_month": "ต่อเดือน", + "product_showcase_description": "ให้เราช่วยคุณเลือกแพ็คเกจที่เหมาะสมที่สุด แล้วสนุกไปกับการสำรวจมันอย่างมีความสุข", + "product_showcase_title": "เลือกแพ็กเกจของคุณ", + "servers": "เซิร์ฟเวอร์", + "started": "เริ่มต้นใช้งาน", + "subscribe": "สมัครสมาชิก", + "tos": "ข้อตกลงการให้บริการ", + "users": "ผู้ใช้", + "welcome": "ยินดีต้อนรับสู่" +} diff --git a/apps/user/locales/th-TH/language.json b/apps/user/locales/th-TH/language.json new file mode 100644 index 0000000..a42089e --- /dev/null +++ b/apps/user/locales/th-TH/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "ภาษาเช็ก", + "de-DE": "ภาษาเยอรมัน", + "en-US": "ภาษาอังกฤษ", + "es-ES": "ภาษาสเปน", + "es-MX": "สเปน (เม็กซิโก)", + "fi-FI": "ภาษาฟินแลนด์", + "fr-FR": "ภาษาฝรั่งเศส", + "hi-IN": "ภาษาฮินดี", + "hu-HU": "ภาษาฮังการี", + "ja-JP": "ภาษาญี่ปุ่น", + "ko-KR": "เกาหลี", + "no-NO": "ภาษานอร์เวย์", + "pl-PL": "ภาษาโปแลนด์", + "pt-BR": "โปรตุเกส (บราซิล)", + "ro-RO": "โรมาเนีย", + "ru-RU": "ภาษารัสเซีย", + "th-TH": "ภาษาไทย", + "tr-TR": "ตุรกี", + "uk-UA": "ยูเครน", + "vi-VN": "ภาษาเวียดนาม", + "zh-CN": "ภาษาไทย", + "zh-TW": "ภาษาจีน (ตัวเต็ม)" +} diff --git a/apps/user/locales/th-TH/layout.json b/apps/user/locales/th-TH/layout.json new file mode 100644 index 0000000..724d3b2 --- /dev/null +++ b/apps/user/locales/th-TH/layout.json @@ -0,0 +1,7 @@ +{ + "accountBalance": "ยอดเงินในบัญชี", + "copyInviteLink": "คัดลอกลิงก์เชิญ", + "copySuccess": "คัดลอกลิงก์เชิญสำเร็จ", + "inviteCode": "รหัสเชิญ", + "recharge": "เติมเงิน" +} diff --git a/apps/user/locales/th-TH/menu.json b/apps/user/locales/th-TH/menu.json new file mode 100644 index 0000000..1f4a05a --- /dev/null +++ b/apps/user/locales/th-TH/menu.json @@ -0,0 +1,17 @@ +{ + "affiliate": "คำเชิญของฉัน", + "announcement": "รายการประกาศ", + "dashboard": "แดชบอร์ด", + "document": "เอกสารการใช้งาน", + "finance": "การเงิน", + "help": "ช่วยเหลือ", + "logout": "ออกจากระบบ", + "order": "รายการสั่งซื้อ", + "payment": "รายละเอียดคำสั่งซื้อ", + "personal": "ส่วนตัว", + "profile": "โปรไฟล์ส่วนตัว", + "server": "เซิร์ฟเวอร์", + "subscribe": "ซื้อการสมัครสมาชิก", + "ticket": "ตั๋วของฉัน", + "wallet": "ศูนย์การเงิน" +} diff --git a/apps/user/locales/th-TH/order.json b/apps/user/locales/th-TH/order.json new file mode 100644 index 0000000..68e5f01 --- /dev/null +++ b/apps/user/locales/th-TH/order.json @@ -0,0 +1,61 @@ +{ + "balanceRecharge": "เติมเงินยอดคงเหลือ", + "buyNow": "ซื้อทันที", + "buySubscription": "ซื้อการสมัครสมาชิก", + "cancel": "ยกเลิก", + "createdAt": "เวลาที่สร้าง", + "description": "เติมเงินง่าย ๆ เพียงคลิกเดียว", + "detail": "รายละเอียด", + "enterAmount": "กรุณาใส่จำนวนเงินที่ต้องการเติม", + "enterCoupon": "กรุณาใส่รหัสส่วนลด", + "goToPayment": "ไปที่การชำระเงิน", + "methods": { + "alipay_f2f": "อาลีเพย์ (เผชิญหน้า)", + "balance": "ยอดคงเหลือ", + "epay": "อีเพย์", + "stripe_alipay": "Stripe (อาลีเพย์)", + "stripe_wechat_pay": "Stripe (วีแชท)" + }, + "month": "เดือน", + "months": "เดือน", + "name": "ชื่อ", + "orderClosed": "คำสั่งซื้อถูกปิดแล้ว", + "orderList": "รายการสั่งซื้อ", + "orderNo": "หมายเลขคำสั่งซื้อ", + "orderNumber": "หมายเลขคำสั่งซื้อ", + "payment": "ไปชำระเงิน", + "paymentAmount": "จำนวนเงินที่ชำระ", + "paymentMethod": "วิธีการชำระเงิน", + "paymentSuccess": "ชำระเงินสำเร็จ", + "productList": "รายการสินค้า", + "purchaseDuration": "ระยะเวลาการซื้อ", + "recharge": "เติมเงิน", + "rechargeAmount": "จำนวนเงินที่เติม", + "rechargeNow": "เติมเงินทันที", + "renew": "ต่ออายุ", + "renewSubscription": "ต่ออายุการสมัครสมาชิก", + "resetPrice": "รีเซ็ตราคา", + "resetTraffic": "รีเซ็ตการใช้งานข้อมูล", + "resetTrafficDescription": "รีเซ็ตเฉพาะปริมาณข้อมูลของเดือนนี้เท่านั้น", + "resetTrafficTitle": "รีเซ็ตการใช้งานข้อมูล", + "scanToPay": "กรุณาสแกนเพื่อชำระเงิน", + "status": { + "0": "สถานะ", + "1": "รอการชำระเงิน", + "2": "ชำระเงินแล้ว", + "3": "ยกเลิกแล้ว", + "4": "ปิดแล้ว", + "5": "เสร็จสิ้นแล้ว" + }, + "subscribeNow": "สมัครสมาชิกทันที", + "timeExpired": "หมดเวลาชำระเงินแล้ว", + "type": { + "0": "ประเภท", + "1": "ซื้อใหม่", + "2": "ต่ออายุ", + "3": "รีเซ็ตข้อมูล", + "4": "เติมเงิน" + }, + "viewDocument": "ดูเอกสาร", + "waitingForPayment": "รอการชำระเงิน" +} diff --git a/apps/user/locales/th-TH/profile.json b/apps/user/locales/th-TH/profile.json new file mode 100644 index 0000000..c464104 --- /dev/null +++ b/apps/user/locales/th-TH/profile.json @@ -0,0 +1,28 @@ +{ + "accountSettings": { + "accountSettings": "การตั้งค่าบัญชี", + "loginPassword": "รหัสผ่านเข้าสู่ระบบ", + "newPassword": "รหัสผ่านใหม่", + "passwordMismatch": "รหัสผ่านที่ป้อนไม่ตรงกัน", + "repeatNewPassword": "กรอกรหัสผ่านใหม่อีกครั้ง", + "updatePassword": "อัปเดตรหัสผ่าน", + "updateSuccess": "อัปเดตสำเร็จ" + }, + "notify": { + "bind": "ผูก", + "emailNotification": "การแจ้งเตือนทางอีเมล", + "notificationSettings": "การตั้งค่าการแจ้งเตือน", + "telegramId": "Telegram ID", + "telegramIdPlaceholder": "กรอก Telegram ID", + "telegramNotification": "การแจ้งเตือนทาง Telegram", + "updateSuccess": "อัปเดตสำเร็จ" + }, + "notifyEvent": { + "balanceChange": "การเปลี่ยนแปลงยอดเงิน", + "finance": "การเงิน", + "login": "เข้าสู่ระบบ", + "notificationEvents": "เหตุการณ์แจ้งเตือน", + "subscribe": "สมัครสมาชิก", + "updateSuccess": "อัปเดตสำเร็จ" + } +} diff --git a/apps/user/locales/th-TH/subscribe.json b/apps/user/locales/th-TH/subscribe.json new file mode 100644 index 0000000..0d4a8b7 --- /dev/null +++ b/apps/user/locales/th-TH/subscribe.json @@ -0,0 +1,31 @@ +{ + "all": "ทั้งหมด", + "billing": { + "billingTitle": "ใบแจ้งหนี้สินค้า", + "couponDiscount": "ส่วนลดคูปอง", + "duration": "ระยะเวลาแพ็กเกจ", + "fee": "ค่าธรรมเนียม", + "months": "เดือน", + "price": "ราคา", + "productDiscount": "ส่วนลดสินค้า", + "total": "ราคารวม" + }, + "buy": "ซื้อ", + "category": "หมวดหมู่", + "detail": { + "availableTraffic": "ปริมาณข้อมูลที่ใช้ได้", + "connectedDevices": "จำนวนอุปกรณ์ที่เชื่อมต่อพร้อมกัน", + "connectionSpeed": "ความเร็วในการเชื่อมต่อ", + "productDetail": "รายละเอียดสินค้า" + }, + "methods": { + "alipay_f2f": "อาลีเพย์ (เผชิญหน้า)", + "balance": "ยอดคงเหลือ", + "epay": "อีเพย์", + "stripe_alipay": "Stripe (อาลีเพย์)", + "stripe_wechat_pay": "Stripe (วีแชท)" + }, + "perMonth": "เดือน", + "productDescription": "รายละเอียดสินค้า", + "products": "สินค้า" +} diff --git a/apps/user/locales/th-TH/ticket.json b/apps/user/locales/th-TH/ticket.json new file mode 100644 index 0000000..3969f11 --- /dev/null +++ b/apps/user/locales/th-TH/ticket.json @@ -0,0 +1,26 @@ +{ + "cancel": "ยกเลิก", + "check": "ตรวจสอบ", + "close": "ปิด", + "closeSuccess": "ปิดใบงานสำเร็จ", + "closeWarning": "ปิดใบสั่งงานแล้วจะไม่สามารถตอบกลับได้อีกต่อไป", + "confirm": "ยืนยัน", + "confirmClose": "ยืนยันการปิดใบสั่งงานหรือไม่?", + "createSuccess": "สร้างสำเร็จ", + "createTicket": "สร้างตั๋วงาน", + "createTicketDescription": "ตั๋วจะได้รับการตอบกลับภายใน 24 ชั่วโมง", + "description": "คำอธิบาย", + "inputPlaceholder": "กรอกข้อความของคุณ", + "reply": "ตอบกลับ", + "status": { + "0": "สถานะ", + "1": "รอดำเนินการ", + "2": "กำลังดำเนินการ", + "3": "แก้ไขแล้ว", + "4": "ปิดแล้ว" + }, + "submit": "ส่ง", + "ticketList": "รายการตั๋ว", + "title": "หัวข้อ", + "updatedAt": "อัปเดตเมื่อ" +} diff --git a/apps/user/locales/th-TH/wallet.json b/apps/user/locales/th-TH/wallet.json new file mode 100644 index 0000000..5e26bd4 --- /dev/null +++ b/apps/user/locales/th-TH/wallet.json @@ -0,0 +1,15 @@ +{ + "amount": "จำนวนเงิน", + "balance": "ยอดคงเหลือ", + "createdAt": "เวลา", + "title": "ยอดคงเหลือในบัญชี", + "type": { + "0": "ประเภท", + "1": "เติมเงิน", + "2": "ถอนเงิน", + "3": "ซื้อ", + "4": "คืนเงิน", + "5": "รางวัล", + "6": "ค่าคอมมิชชั่น" + } +} diff --git a/apps/user/locales/tr-TR/affiliate.json b/apps/user/locales/tr-TR/affiliate.json new file mode 100644 index 0000000..b0516af --- /dev/null +++ b/apps/user/locales/tr-TR/affiliate.json @@ -0,0 +1,11 @@ +{ + "commissionInfo": "İstatistiksel tutar, davet komisyonu otomatik olarak bakiyeye aktarılır", + "commissionRate": "Komisyon Oranı", + "copyInviteLink": "Davet Bağlantısını Kopyala", + "copySuccess": "Kopyalama Başarılı", + "inviteCode": "davetKodu", + "inviteRecords": "Davet Kayıtları", + "registrationTime": "Kayıt Zamanı", + "totalCommission": "Toplam Komisyon", + "userEmail": "Kullanıcı E-postası" +} diff --git a/apps/user/locales/tr-TR/auth.json b/apps/user/locales/tr-TR/auth.json new file mode 100644 index 0000000..e2a20ce --- /dev/null +++ b/apps/user/locales/tr-TR/auth.json @@ -0,0 +1,38 @@ +{ + "check": { + "checking": "Doğrulanıyor...", + "continue": "Devam et", + "description": "Giriş yapmak veya kaydolmak için lütfen e-posta adresinizi girin.", + "email": "Lütfen geçerli bir e-posta adresi girin.", + "title": "Giriş/Kayıt", + "whitelist": "E-posta alan adı izin verilen beyaz listede değil." + }, + "login": { + "description": "Lütfen giriş yapmak için hesap bilgilerinizi girin.", + "forgotPassword": "Şifrenizi mi unuttunuz?", + "success": "Başarıyla giriş yapıldı!", + "switchAccount": "Kayıt Ol/Hesap Değiştir", + "title": "Giriş Yap" + }, + "orWithEmail": "veya e-posta ile", + "register": { + "description": "Yeni bir hesap oluşturun, kaydolmak için bilgilerinizi doldurun.", + "existingAccount": "Zaten bir hesabınız var mı?", + "get": "Al", + "invite": "Davet Kodu", + "message": "#### Sayın Kullanıcı,\n\nİlginiz ve desteğiniz için teşekkür ederiz. Site işletme stratejimizin değişikliği nedeniyle, yeni kullanıcı kaydı işlevini kapattık. Bu süre zarfında mevcut kullanıcıların kullanımı hiçbir şekilde etkilenmeyecektir.\n\nSize daha iyi hizmet ve deneyim sunmak için, kayıt kapalıyken kapsamlı bir sistem optimizasyonu ve işlev yükseltmesi gerçekleştireceğiz. Gelecekte, daha kaliteli içerik ve hizmetlerle sizi karşılamayı dört gözle bekliyoruz.\n\nEn son gelişmeler ve bildirimler için web sitemizi ve sosyal medya platformlarımızı takip edin. Anlayışınız ve desteğiniz için teşekkür ederiz.\n\nHerhangi bir sorunuz veya yardıma ihtiyacınız olursa, lütfen müşteri hizmetleri ekibimizle iletişime geçmekten çekinmeyin.\n\n**Desteğiniz ve anlayışınız için tekrar teşekkür ederiz.**", + "passwordMismatch": "Girilen şifreler uyuşmuyor", + "success": "Kayıt başarılı, otomatik olarak giriş yapıldı!", + "switchToLogin": "Giriş/Yeni e-posta ayarla", + "title": "Kayıt Ol" + }, + "reset": { + "description": "Şifrenizi sıfırlamak için lütfen e-posta adresinizi girin.", + "existingAccount": "Zaten bir hesabınız var mı?", + "get": "Al", + "success": "Şifre sıfırlama başarılı, otomatik olarak girişe geçildi!", + "switchToLogin": "Giriş/Kayıt", + "title": "Şifre Sıfırla" + }, + "tos": "Hizmet Şartları" +} diff --git a/apps/user/locales/tr-TR/common.json b/apps/user/locales/tr-TR/common.json new file mode 100644 index 0000000..a626e75 --- /dev/null +++ b/apps/user/locales/tr-TR/common.json @@ -0,0 +1,52 @@ +{ + "empty": [ + "Burada harika içeriklerle dolu olduğunu hayal edin! Şimdilik sadece hayal gücünüze güvenin…", + "Bu alan gizemli bir şekilde kayboldu, geri getirmeye çalışıyoruz!", + "Ah, hiçbir şey olmadı… Belki de kendiniz bir şeyler ekleyebilirsiniz!", + "Bu, bir konserde sahnede kimse olmadığını fark etmek gibi… Neden siz çıkıp performans sergilemiyorsunuz?", + "Boş bir cennet buldunuz! Bir ev inşa etmek ister misiniz?", + "Burası şimdilik boş, ama yaratıcılık buradan başlıyor!", + "Hiçbir şey yok… Ama endişelenmeyin, bu sadece bir başlangıç!", + "Burada büyük bir sürpriz hazırlanmıştı, ama sürpriz kaçtı!", + "Şimdilik hiçbir şey yok, tıpkı atıştırmalık dolabının boşalması gibi.", + "Bu boş alan, başrol oyuncusunu bekliyor!" + ], + "list": { + "pageInfo": "{current}. sayfa, toplam {total} sayfa", + "rowsPerPage": "Sayfa başına satır sayısı", + "selectedItems": "{total} satır seçildi" + }, + "login": "Giriş/Kayıt Ol", + "request": { + "10001": "Sorgu henüz başarılı olmadı, lütfen daha sonra tekrar deneyin veya koşullarınızı kontrol edin.", + "10002": "Güncelleme işlemi başarısız oldu, lütfen daha sonra tekrar deneyin.", + "10003": "Ekleme işlemi şu anda tamamlanamıyor, lütfen daha sonra tekrar deneyin.", + "10004": "Silme işlemi tamamlanamadı, lütfen daha sonra tekrar deneyin.", + "20001": "Bu kullanıcı bilgileri zaten mevcut, lütfen bilgileri değiştirip tekrar deneyin.", + "20002": "Kullanıcı bulunamadı, lütfen bilgileri kontrol edip tekrar deneyin.", + "20003": "Girdiğiniz şifre yanlış, lütfen tekrar girin.", + "20004": "Bu kullanıcı devre dışı bırakıldı, sorularınız için lütfen müşteri hizmetleri ile iletişime geçin.", + "20005": "Bakiye yetersiz, lütfen yükleme yapıp tekrar deneyin.", + "20006": "Kayıt özelliği şu anda kullanılamıyor, lütfen daha sonra tekrar deneyin.", + "30001": "Bu düğüm zaten mevcut, lütfen tekrar eklemeyin.", + "30002": "İlgili düğüm bulunamadı, lütfen kontrol edip tekrar deneyin.", + "30003": "Grup zaten mevcut, lütfen başka bir ad kullanmayı deneyin.", + "30004": "Bu grup bulunamadı, lütfen bilgileri kontrol edip tekrar deneyin.", + "30005": "Bu grupta hala içerik var, lütfen boşaltıp tekrar deneyin.", + "400": "İstek parametreleri doğru değil, lütfen kontrol edip yeniden gönderin.", + "40002": "Geçerli bir Token bulunamadı, lütfen önce giriş yapıp tekrar deneyin.", + "40003": "Mevcut Token geçersiz, lütfen yeniden alıp tekrar deneyin.", + "40004": "Token süresi doldu, lütfen yeniden giriş yapın.", + "40005": "Erişim izniniz yok, sorularınız için lütfen yönetici ile iletişime geçin.", + "401": "Çok sık istek gönderildi, lütfen daha sonra tekrar deneyin.", + "500": "Sunucuda bazı sorunlar oluştu, lütfen daha sonra tekrar deneyin.", + "50001": "İlgili kupon bilgisi bulunamadı, lütfen kontrol edip tekrar deneyin.", + "50002": "Bu kupon zaten kullanıldı, tekrar kullanılamaz.", + "60001": "Abonelik süresi doldu, lütfen yenileyip tekrar kullanın.", + "60002": "Bu abonelik şu anda kullanılamıyor, lütfen daha sonra tekrar deneyin.", + "70001": "Doğrulama kodu hatalı, lütfen tekrar girin.", + "80001": "Görev sıraya başarıyla eklenemedi, lütfen daha sonra tekrar deneyin.", + "undefined": "Sistem hatası oluştu, lütfen daha sonra tekrar deneyin." + }, + "unlimited": "sınırsız" +} diff --git a/apps/user/locales/tr-TR/dashboard.json b/apps/user/locales/tr-TR/dashboard.json new file mode 100644 index 0000000..9517c87 --- /dev/null +++ b/apps/user/locales/tr-TR/dashboard.json @@ -0,0 +1,25 @@ +{ + "cancel": "İptal", + "confirm": "Onayla", + "confirmResetSubscription": "Abonelik adresini sıfırlamak istediğinizden emin misiniz?", + "copy": "kopyala", + "copyFailure": "Kopyalama başarısız oldu, lütfen elle kopyalayın", + "copySuccess": "Kopyalama başarılı", + "download": "indir", + "expirationDays": "Son Kullanma Süresi/Gün", + "import": "İçe Aktar", + "latestAnnouncement": "Son Duyuru", + "manualImportMessage": "Bu uygulama şu anda uyandırmayı desteklemiyor, lütfen elle içe aktarın, abone adresi otomatik olarak kopyalandı", + "mySubscriptions": "Aboneliklerim", + "nextResetDays": "Sonraki Sıfırlama/Gün", + "prompt": "istem", + "purchaseSubscription": "Abonelik Satın Al", + "qrCode": "QR kodu", + "resetSubscription": "Abonelik Adresini Sıfırla", + "resetSuccess": "Sıfırlama Başarılı", + "scanToSubscribe": "Abone olmak için tarayın", + "subscriptionUrl": "abonelikAdresi", + "totalTraffic": "Toplam Trafik", + "unknown": "bilinmeyen", + "used": "Kullanıldı" +} diff --git a/apps/user/locales/tr-TR/document.json b/apps/user/locales/tr-TR/document.json new file mode 100644 index 0000000..1916978 --- /dev/null +++ b/apps/user/locales/tr-TR/document.json @@ -0,0 +1,6 @@ +{ + "all": "Tümü", + "document": "belge", + "read": "okuma", + "tutorial": "eğitim" +} diff --git a/apps/user/locales/tr-TR/index.json b/apps/user/locales/tr-TR/index.json new file mode 100644 index 0000000..a027a4d --- /dev/null +++ b/apps/user/locales/tr-TR/index.json @@ -0,0 +1,14 @@ +{ + "global_map_description": "Kesintisiz küresel bağlantıyı keşfedin. İhtiyaçlarınıza uygun ağ hizmetini seçin ve her zaman, her yerde bağlantıda kalın.", + "global_map_itle": "Küresel Bağlantı, Kolay ve Huzurlu", + "locations": "Bölgeler", + "per_month": "ayda", + "product_showcase_description": "Sizin için en uygun paketi seçelim ve keyifle keşfedin.", + "product_showcase_title": "Paketinizi Seçin", + "servers": "sunucular", + "started": "Başlarken", + "subscribe": "Abone Ol", + "tos": "Hizmet Sözleşmesi", + "users": "kullanıcılar", + "welcome": "Hoş geldiniz" +} diff --git a/apps/user/locales/tr-TR/language.json b/apps/user/locales/tr-TR/language.json new file mode 100644 index 0000000..412c5f1 --- /dev/null +++ b/apps/user/locales/tr-TR/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "Çekçe", + "de-DE": "Almanca", + "en-US": "İngilizce", + "es-ES": "İspanyolca", + "es-MX": "İspanyolca (Meksika)", + "fi-FI": "Fince", + "fr-FR": "Fransızca", + "hi-IN": "Hintçe", + "hu-HU": "Macarca", + "ja-JP": "Japonca", + "ko-KR": "Korece", + "no-NO": "Norveççe", + "pl-PL": "Lehçe", + "pt-BR": "Portekizce (Brezilya)", + "ro-RO": "Romence", + "ru-RU": "Rusça", + "th-TH": "Tayca", + "tr-TR": "Türkçe", + "uk-UA": "Ukraynaca", + "vi-VN": "Vietnamca", + "zh-CN": "Çince (Basitleştirilmiş)", + "zh-TW": "Çince (Geleneksel)" +} diff --git a/apps/user/locales/tr-TR/layout.json b/apps/user/locales/tr-TR/layout.json new file mode 100644 index 0000000..80a2f1e --- /dev/null +++ b/apps/user/locales/tr-TR/layout.json @@ -0,0 +1,7 @@ +{ + "accountBalance": "Hesap Bakiyesi", + "copyInviteLink": "Davet Bağlantısını Kopyala", + "copySuccess": "Davet bağlantısı başarıyla kopyalandı", + "inviteCode": "davetKodu", + "recharge": "şarj et" +} diff --git a/apps/user/locales/tr-TR/menu.json b/apps/user/locales/tr-TR/menu.json new file mode 100644 index 0000000..f3100e8 --- /dev/null +++ b/apps/user/locales/tr-TR/menu.json @@ -0,0 +1,17 @@ +{ + "affiliate": "Davetim", + "announcement": "Duyuru Listesi", + "dashboard": "Gösterge Paneli", + "document": "Kullanım Kılavuzu", + "finance": "finans", + "help": "yardım", + "logout": "Çıkış Yap", + "order": "Sipariş Listesi", + "payment": "Sipariş Detayları", + "personal": "kişisel", + "profile": "Profil", + "server": "sunucu", + "subscribe": "Abonelik Satın Al", + "ticket": "Biletim", + "wallet": "Cüzdan Merkezi" +} diff --git a/apps/user/locales/tr-TR/order.json b/apps/user/locales/tr-TR/order.json new file mode 100644 index 0000000..e3ce330 --- /dev/null +++ b/apps/user/locales/tr-TR/order.json @@ -0,0 +1,61 @@ +{ + "balanceRecharge": "Bakiye Yükleme", + "buyNow": "Şimdi Satın Al", + "buySubscription": "Abonelik Satın Al", + "cancel": "İptal", + "createdAt": "Oluşturulma Zamanı", + "description": "Tek tıkla yükleme, kolayca halledin", + "detail": "Detaylar", + "enterAmount": "Lütfen yükleme miktarını girin", + "enterCoupon": "Lütfen indirim kodunu girin", + "goToPayment": "Ödemeye Git", + "methods": { + "alipay_f2f": "Alipay(Yüz Yüze)", + "balance": "Bakiye", + "epay": "Kolay Ödeme", + "stripe_alipay": "Stripe(Alipay)", + "stripe_wechat_pay": "Stripe(WeChat)" + }, + "month": "ay", + "months": "aylar", + "name": "Adı", + "orderClosed": "Sipariş kapatıldı", + "orderList": "Sipariş Listesi", + "orderNo": "Sipariş No", + "orderNumber": "Sipariş Numarası", + "payment": "Ödemeye Git", + "paymentAmount": "Ödeme Tutarı", + "paymentMethod": "Ödeme Yöntemi", + "paymentSuccess": "Ödeme Başarılı", + "productList": "Ürün Listesi", + "purchaseDuration": "Satın Alma Süresi", + "recharge": "şarj et", + "rechargeAmount": "Yükleme Tutarı", + "rechargeNow": "Şimdi Yükle", + "renew": "yenile", + "renewSubscription": "Aboneliği Yenile", + "resetPrice": "Fiyatı Sıfırla", + "resetTraffic": "Trafiği Sıfırla", + "resetTrafficDescription": "Sadece bu ayın trafiğini sıfırlayın", + "resetTrafficTitle": "Trafiği Sıfırla", + "scanToPay": "Lütfen tarayıcı ile ödeme yapın", + "status": { + "0": "Durum", + "1": "Ödeme Bekleniyor", + "2": "Ödendi", + "3": "İptal Edildi", + "4": "Kapandı", + "5": "Tamamlandı" + }, + "subscribeNow": "Hemen Abone Ol", + "timeExpired": "Ödeme süresi doldu", + "type": { + "0": "Tür", + "1": "Yeni Satın Alma", + "2": "Yenileme", + "3": "Veri Sıfırlama", + "4": "Yeniden Yükleme" + }, + "viewDocument": "Belgeyi Görüntüle", + "waitingForPayment": "Ödeme Bekleniyor" +} diff --git a/apps/user/locales/tr-TR/profile.json b/apps/user/locales/tr-TR/profile.json new file mode 100644 index 0000000..dae6f72 --- /dev/null +++ b/apps/user/locales/tr-TR/profile.json @@ -0,0 +1,28 @@ +{ + "accountSettings": { + "accountSettings": "Hesap Ayarları", + "loginPassword": "Giriş Şifresi", + "newPassword": "Yeni Şifre", + "passwordMismatch": "Şifreler uyuşmuyor", + "repeatNewPassword": "Yeni Şifreyi Tekrarla", + "updatePassword": "Şifreyi Güncelle", + "updateSuccess": "Güncelleme Başarılı" + }, + "notify": { + "bind": "Bağla", + "emailNotification": "E-posta Bildirimi", + "notificationSettings": "Bildirim Ayarları", + "telegramId": "Telegram Kimliği", + "telegramIdPlaceholder": "Telegram Kimliği girin", + "telegramNotification": "Telegram Bildirimi", + "updateSuccess": "Güncelleme Başarılı" + }, + "notifyEvent": { + "balanceChange": "Bakiye Değişikliği", + "finance": "Finans", + "login": "Giriş", + "notificationEvents": "Bildirim Olayları", + "subscribe": "Abone Ol", + "updateSuccess": "Güncelleme Başarılı" + } +} diff --git a/apps/user/locales/tr-TR/subscribe.json b/apps/user/locales/tr-TR/subscribe.json new file mode 100644 index 0000000..731229c --- /dev/null +++ b/apps/user/locales/tr-TR/subscribe.json @@ -0,0 +1,31 @@ +{ + "all": "Tümü", + "billing": { + "billingTitle": "Ürün Faturası", + "couponDiscount": "Kupon İndirimi", + "duration": "Paket Süresi", + "fee": "İşlem Ücreti", + "months": "Ay", + "price": "Fiyat", + "productDiscount": "Ürün İndirimi", + "total": "Toplam Fiyat" + }, + "buy": "satın al", + "category": "kategori", + "detail": { + "availableTraffic": "Kullanılabilir Trafik", + "connectedDevices": "Eşzamanlı Bağlı IP Sayısı", + "connectionSpeed": "Bağlantı Hızı", + "productDetail": "Ürün Detayları" + }, + "methods": { + "alipay_f2f": "Alipay(Yüz Yüze)", + "balance": "Bakiye", + "epay": "Kolay Ödeme", + "stripe_alipay": "Stripe(Alipay)", + "stripe_wechat_pay": "Stripe(WeChat)" + }, + "perMonth": "ay", + "productDescription": "Ürün Açıklaması", + "products": "ürünler" +} diff --git a/apps/user/locales/tr-TR/ticket.json b/apps/user/locales/tr-TR/ticket.json new file mode 100644 index 0000000..eef3920 --- /dev/null +++ b/apps/user/locales/tr-TR/ticket.json @@ -0,0 +1,26 @@ +{ + "cancel": "İptal", + "check": "Kontrol et", + "close": "Kapat", + "closeSuccess": "Talep başarıyla kapatıldı", + "closeWarning": "Talep kapatıldıktan sonra yanıt verilemeyecektir.", + "confirm": "Onayla", + "confirmClose": "İş emrini kapatmak istediğinizden emin misiniz?", + "createSuccess": "Başarıyla oluşturuldu", + "createTicket": "Bilet Oluştur", + "createTicketDescription": "Destek talebiniz 24 saat içinde yanıtlanacaktır.", + "description": "tanım", + "inputPlaceholder": "Mesajınızı girin", + "reply": "cevap", + "status": { + "0": "Durum", + "1": "Beklemede", + "2": "İşlemde", + "3": "Çözüldü", + "4": "Kapandı" + }, + "submit": "Gönder", + "ticketList": "Bilet Listesi", + "title": "Başlık", + "updatedAt": "Güncellenme Zamanı" +} diff --git a/apps/user/locales/tr-TR/wallet.json b/apps/user/locales/tr-TR/wallet.json new file mode 100644 index 0000000..f86e1cf --- /dev/null +++ b/apps/user/locales/tr-TR/wallet.json @@ -0,0 +1,15 @@ +{ + "amount": "Tutar", + "balance": "Bakiye", + "createdAt": "zaman", + "title": "Hesap Bakiyesi", + "type": { + "0": "Tür", + "1": "Yükleme", + "2": "Çekme", + "3": "Satın Alma", + "4": "İade", + "5": "Ödül", + "6": "Komisyon" + } +} diff --git a/apps/user/locales/uk-UA/affiliate.json b/apps/user/locales/uk-UA/affiliate.json new file mode 100644 index 0000000..89fab64 --- /dev/null +++ b/apps/user/locales/uk-UA/affiliate.json @@ -0,0 +1,11 @@ +{ + "commissionInfo": "Статистика суми, комісія за запрошення автоматично зараховується на баланс", + "commissionRate": "Комісійна ставка", + "copyInviteLink": "Скопіювати посилання запрошення", + "copySuccess": "Скопійовано успішно", + "inviteCode": "Код запрошення", + "inviteRecords": "Записи запрошень", + "registrationTime": "Час реєстрації", + "totalCommission": "Загальна сума комісії", + "userEmail": "Електронна пошта користувача" +} diff --git a/apps/user/locales/uk-UA/auth.json b/apps/user/locales/uk-UA/auth.json new file mode 100644 index 0000000..805bb57 --- /dev/null +++ b/apps/user/locales/uk-UA/auth.json @@ -0,0 +1,38 @@ +{ + "check": { + "checking": "Перевірка...", + "continue": "Продовжити", + "description": "Будь ласка, введіть свою електронну пошту, щоб продовжити вхід або реєстрацію.", + "email": "Будь ласка, введіть дійсну електронну адресу.", + "title": "Вхід/Реєстрація", + "whitelist": "Домен електронної пошти не входить до дозволеного білого списку." + }, + "login": { + "description": "Будь ласка, введіть інформацію свого облікового запису для входу.", + "forgotPassword": "Забули пароль?", + "success": "Вхід успішний!", + "switchAccount": "Зареєструватися/Змінити обліковий запис", + "title": "Вхід" + }, + "orWithEmail": "або використовуйте електронну пошту", + "register": { + "description": "Створіть новий обліковий запис, заповніть ваші дані для реєстрації.", + "existingAccount": "Вже маєте обліковий запис?", + "get": "Отримати", + "invite": "Код запрошення", + "message": "#### Шановний користувачу,\n\nДякуємо за вашу увагу та підтримку. У зв'язку зі зміною стратегії роботи сайту, ми закрили функцію реєстрації нових користувачів. Протягом цього періоду існуючі користувачі не зазнають жодних змін у використанні.\n\nМи прагнемо надавати вам кращий сервіс та досвід, тому під час закриття реєстрації ми проведемо повну оптимізацію системи та оновлення функцій. У майбутньому ми зустрінемо вас з якіснішим контентом та послугами.\n\nБудь ласка, слідкуйте за нашим сайтом та соціальними мережами, щоб отримувати останні новини та повідомлення. Дякуємо за ваше розуміння та підтримку.\n\nЯкщо у вас є будь-які питання або потрібна допомога, будь ласка, зв'яжіться з нашою службою підтримки.\n\n**Ще раз дякуємо за вашу підтримку та розуміння.**", + "passwordMismatch": "Паролі не співпадають", + "success": "Реєстрація успішна, автоматично увійшли в систему!", + "switchToLogin": "Увійти/Скинути пошту", + "title": "Реєстрація" + }, + "reset": { + "description": "Будь ласка, введіть свою електронну адресу для скидання пароля.", + "existingAccount": "Вже маєте обліковий запис?", + "get": "Отримати", + "success": "Пароль успішно скинуто, автоматично переключено на вхід!", + "switchToLogin": "Вхід/Реєстрація", + "title": "Скидання пароля" + }, + "tos": "Умови надання послуг" +} diff --git a/apps/user/locales/uk-UA/common.json b/apps/user/locales/uk-UA/common.json new file mode 100644 index 0000000..105ea77 --- /dev/null +++ b/apps/user/locales/uk-UA/common.json @@ -0,0 +1,52 @@ +{ + "empty": [ + "Уявіть собі, що тут повно захоплюючого контенту! Поки що доведеться уявляти…", + "Ця область загадково зникла, ми намагаємося її повернути!", + "Ой, нічого не сталося… можеш сам щось додати!", + "Це як на концерті виявити, що на сцені нікого немає… може, ти хочеш виступити?", + "Ви знайшли порожній рай! Може, побудуємо тут будинок?", + "Тут тимчасово нічого немає, але творчість починається звідси!", + "Нічого немає… але не хвилюйся, це лише початок!", + "Тут планувався великий сюрприз, але він втік!", + "Тимчасово нічого немає, як ніби шафа зі смаколиками спорожніла.", + "Ця порожня ділянка чекає на свого головного героя!" + ], + "list": { + "pageInfo": "Сторінка {current} з {total}", + "rowsPerPage": "Кількість рядків на сторінці", + "selectedItems": "Вибрано {total} рядків" + }, + "login": "Увійти/Зареєструватися", + "request": { + "10001": "Запит не був успішним, будь ласка, спробуйте пізніше або перевірте ваші умови.", + "10002": "Операція оновлення не вдалася, будь ласка, спробуйте пізніше.", + "10003": "Тимчасово неможливо виконати операцію вставки, будь ласка, спробуйте пізніше.", + "10004": "Операція видалення не вдалася, будь ласка, спробуйте пізніше.", + "20001": "Інформація про цього користувача вже існує, будь ласка, змініть інформацію та спробуйте знову.", + "20002": "Користувача не знайдено, будь ласка, перевірте інформацію та спробуйте знову.", + "20003": "Введений вами пароль неправильний, будь ласка, введіть знову.", + "20004": "Цей користувач був заблокований, якщо у вас є питання, будь ласка, зверніться до служби підтримки.", + "20005": "Недостатньо коштів, будь ласка, поповніть рахунок і спробуйте знову.", + "20006": "Функція реєстрації тимчасово недоступна, будь ласка, спробуйте пізніше.", + "30001": "Цей вузол вже існує, будь ласка, не додавайте повторно.", + "30002": "Відповідний вузол не знайдено, будь ласка, перевірте та спробуйте знову.", + "30003": "Група вже існує, будь ласка, спробуйте використати іншу назву.", + "30004": "Групу не знайдено, будь ласка, перевірте інформацію та спробуйте знову.", + "30005": "У цій групі ще є вміст, будь ласка, очистіть її та спробуйте знову.", + "400": "Параметри запиту некоректні, будь ласка, перевірте та надішліть знову.", + "40002": "Дійсний токен не знайдено, будь ласка, увійдіть і спробуйте знову.", + "40003": "Поточний токен недійсний, будь ласка, отримайте новий і спробуйте знову.", + "40004": "Токен закінчився, будь ласка, увійдіть знову.", + "40005": "У вас немає доступу, якщо у вас є питання, будь ласка, зверніться до адміністратора.", + "401": "Запити надто часті, будь ласка, спробуйте пізніше.", + "500": "Сервер зіткнувся з деякими проблемами, будь ласка, спробуйте пізніше.", + "50001": "Інформацію про відповідний купон не знайдено, будь ласка, перевірте та спробуйте знову.", + "50002": "Цей купон вже використано, повторне використання неможливе.", + "60001": "Підписка закінчилася, будь ласка, поновіть її, щоб продовжити використання.", + "60002": "Тимчасово неможливо використовувати цю підписку, будь ласка, спробуйте пізніше.", + "70001": "Код перевірки неправильний, будь ласка, введіть знову.", + "80001": "Завдання не вдалося додати до черги, будь ласка, спробуйте пізніше.", + "undefined": "Сталася системна помилка, будь ласка, спробуйте пізніше." + }, + "unlimited": "необмежено" +} diff --git a/apps/user/locales/uk-UA/dashboard.json b/apps/user/locales/uk-UA/dashboard.json new file mode 100644 index 0000000..90689d3 --- /dev/null +++ b/apps/user/locales/uk-UA/dashboard.json @@ -0,0 +1,25 @@ +{ + "cancel": "Скасувати", + "confirm": "Підтвердити", + "confirmResetSubscription": "Ви впевнені, що хочете скинути адресу підписки?", + "copy": "Копіювати", + "copyFailure": "Не вдалося скопіювати, будь ласка, скопіюйте вручну", + "copySuccess": "Скопійовано успішно", + "download": "завантажити", + "expirationDays": "Термін дії/дні", + "import": "Імпорт", + "latestAnnouncement": "Останнє оголошення", + "manualImportMessage": "Цей додаток тимчасово не підтримує виклик, будь ласка, імпортуйте вручну, адресу підписки вже скопійовано", + "mySubscriptions": "Мої підписки", + "nextResetDays": "Наступне скидання/днів", + "prompt": "підказка", + "purchaseSubscription": "Придбати підписку", + "qrCode": "QR-код", + "resetSubscription": "Скинути адресу підписки", + "resetSuccess": "Скидання успішне", + "scanToSubscribe": "Скануйте для підписки", + "subscriptionUrl": "Адреса підписки", + "totalTraffic": "Загальний трафік", + "unknown": "невідомо", + "used": "Використано" +} diff --git a/apps/user/locales/uk-UA/document.json b/apps/user/locales/uk-UA/document.json new file mode 100644 index 0000000..6ad6b49 --- /dev/null +++ b/apps/user/locales/uk-UA/document.json @@ -0,0 +1,6 @@ +{ + "all": "Всі", + "document": "документ", + "read": "читати", + "tutorial": "підручник" +} diff --git a/apps/user/locales/uk-UA/index.json b/apps/user/locales/uk-UA/index.json new file mode 100644 index 0000000..2ede399 --- /dev/null +++ b/apps/user/locales/uk-UA/index.json @@ -0,0 +1,14 @@ +{ + "global_map_description": "Досліджуйте безшовне глобальне з'єднання. Оберіть мережеві послуги, що відповідають вашим потребам, та залишайтеся на зв'язку будь-де і будь-коли.", + "global_map_itle": "Глобальне з'єднання, легко та без турбот", + "locations": "Регіони", + "per_month": "щомісяця", + "product_showcase_description": "Давайте оберемо найкращий пакет для вас і з радістю дослідимо його.", + "product_showcase_title": "Виберіть свій пакет", + "servers": "сервери", + "started": "Почати використання", + "subscribe": "Підписатися", + "tos": "Угода про надання послуг", + "users": "користувачі", + "welcome": "Ласкаво просимо до" +} diff --git a/apps/user/locales/uk-UA/language.json b/apps/user/locales/uk-UA/language.json new file mode 100644 index 0000000..fdefebf --- /dev/null +++ b/apps/user/locales/uk-UA/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "чеська", + "de-DE": "Німецька", + "en-US": "англійська", + "es-ES": "іспанська", + "es-MX": "іспанська (Мексика)", + "fi-FI": "Фінська", + "fr-FR": "Французька", + "hi-IN": "гінді", + "hu-HU": "угорська", + "ja-JP": "японська", + "ko-KR": "Корейська", + "no-NO": "норвезька", + "pl-PL": "Польська", + "pt-BR": "португальська (Бразилія)", + "ro-RO": "румунська", + "ru-RU": "Російська", + "th-TH": "тайська", + "tr-TR": "турецька", + "uk-UA": "Українська", + "vi-VN": "В'єтнамська", + "zh-CN": "українська (Україна)", + "zh-TW": "китайська (традиційна)" +} diff --git a/apps/user/locales/uk-UA/layout.json b/apps/user/locales/uk-UA/layout.json new file mode 100644 index 0000000..0e278d1 --- /dev/null +++ b/apps/user/locales/uk-UA/layout.json @@ -0,0 +1,7 @@ +{ + "accountBalance": "Баланс рахунку", + "copyInviteLink": "Скопіювати посилання запрошення", + "copySuccess": "Посилання для запрошення успішно скопійовано", + "inviteCode": "Код запрошення", + "recharge": "Поповнення" +} diff --git a/apps/user/locales/uk-UA/menu.json b/apps/user/locales/uk-UA/menu.json new file mode 100644 index 0000000..f6d1594 --- /dev/null +++ b/apps/user/locales/uk-UA/menu.json @@ -0,0 +1,17 @@ +{ + "affiliate": "Моє запрошення", + "announcement": "Список оголошень", + "dashboard": "Головна", + "document": "Документація з використання", + "finance": "Фінанси", + "help": "Допомога", + "logout": "Вийти з системи", + "order": "Список замовлень", + "payment": "Деталі замовлення", + "personal": "Особистий", + "profile": "Особистий кабінет", + "server": "сервер", + "subscribe": "Придбати підписку", + "ticket": "Мій запит", + "wallet": "Фінансовий центр" +} diff --git a/apps/user/locales/uk-UA/order.json b/apps/user/locales/uk-UA/order.json new file mode 100644 index 0000000..b02aeac --- /dev/null +++ b/apps/user/locales/uk-UA/order.json @@ -0,0 +1,61 @@ +{ + "balanceRecharge": "Поповнення балансу", + "buyNow": "Купити зараз", + "buySubscription": "Придбати підписку", + "cancel": "Скасувати", + "createdAt": "Час створення", + "description": "Одним натисканням поповнити рахунок, легко та швидко", + "detail": "Деталі", + "enterAmount": "Введіть суму поповнення", + "enterCoupon": "Введіть код знижки", + "goToPayment": "Перейти до оплати", + "methods": { + "alipay_f2f": "Alipay(обличчям до обличчя)", + "balance": "Баланс", + "epay": "Epay", + "stripe_alipay": "Stripe(Alipay)", + "stripe_wechat_pay": "Stripe(WeChat)" + }, + "month": "місяць", + "months": "місяців", + "name": "Назва", + "orderClosed": "Замовлення закрито", + "orderList": "Список замовлень", + "orderNo": "Номер замовлення", + "orderNumber": "Номер замовлення", + "payment": "Перейти до оплати", + "paymentAmount": "Сума платежу", + "paymentMethod": "Спосіб оплати", + "paymentSuccess": "Оплата успішна", + "productList": "Список продуктів", + "purchaseDuration": "Тривалість покупки", + "recharge": "Поповнення", + "rechargeAmount": "Сума поповнення", + "rechargeNow": "Поповнити зараз", + "renew": "продовжити", + "renewSubscription": "Поновити підписку", + "resetPrice": "Скинути ціну", + "resetTraffic": "Скинути трафік", + "resetTrafficDescription": "Скидання лише місячного трафіку", + "resetTrafficTitle": "Скинути трафік", + "scanToPay": "Будь ласка, відскануйте для оплати", + "status": { + "0": "Статус", + "1": "Очікує оплату", + "2": "Оплачено", + "3": "Скасовано", + "4": "Закрито", + "5": "Завершено" + }, + "subscribeNow": "Підписатися зараз", + "timeExpired": "Час оплати минув", + "type": { + "0": "Тип", + "1": "Нова покупка", + "2": "Продовження", + "3": "Скидання трафіку", + "4": "Поповнення" + }, + "viewDocument": "Переглянути документ", + "waitingForPayment": "Очікування оплати" +} diff --git a/apps/user/locales/uk-UA/profile.json b/apps/user/locales/uk-UA/profile.json new file mode 100644 index 0000000..081949d --- /dev/null +++ b/apps/user/locales/uk-UA/profile.json @@ -0,0 +1,28 @@ +{ + "accountSettings": { + "accountSettings": "Налаштування облікового запису", + "loginPassword": "Пароль для входу", + "newPassword": "Новий пароль", + "passwordMismatch": "Паролі не співпадають", + "repeatNewPassword": "Повторіть новий пароль", + "updatePassword": "Оновити пароль", + "updateSuccess": "Оновлення успішне" + }, + "notify": { + "bind": "Прив'язати", + "emailNotification": "Сповіщення електронною поштою", + "notificationSettings": "Налаштування сповіщень", + "telegramId": "Telegram ID", + "telegramIdPlaceholder": "Введіть Telegram ID", + "telegramNotification": "Сповіщення Telegram", + "updateSuccess": "Оновлення успішне" + }, + "notifyEvent": { + "balanceChange": "Зміна балансу", + "finance": "Фінанси", + "login": "Вхід", + "notificationEvents": "Події сповіщень", + "subscribe": "Підписка", + "updateSuccess": "Оновлення успішне" + } +} diff --git a/apps/user/locales/uk-UA/subscribe.json b/apps/user/locales/uk-UA/subscribe.json new file mode 100644 index 0000000..48f3275 --- /dev/null +++ b/apps/user/locales/uk-UA/subscribe.json @@ -0,0 +1,31 @@ +{ + "all": "всі", + "billing": { + "billingTitle": "Рахунок за товар", + "couponDiscount": "Знижка за промокодом", + "duration": "Тривалість пакету", + "fee": "Комісія", + "months": "місяців", + "price": "Ціна", + "productDiscount": "Знижка на товар", + "total": "Загальна сума" + }, + "buy": "Купити", + "category": "категорія", + "detail": { + "availableTraffic": "Доступний трафік", + "connectedDevices": "Кількість одночасно підключених IP", + "connectionSpeed": "Швидкість з'єднання", + "productDetail": "Деталі товару" + }, + "methods": { + "alipay_f2f": "Alipay (обличчям до обличчя)", + "balance": "Баланс", + "epay": "Epay", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "perMonth": "місяць", + "productDescription": "Опис товару", + "products": "товари" +} diff --git a/apps/user/locales/uk-UA/ticket.json b/apps/user/locales/uk-UA/ticket.json new file mode 100644 index 0000000..6658a1c --- /dev/null +++ b/apps/user/locales/uk-UA/ticket.json @@ -0,0 +1,26 @@ +{ + "cancel": "Скасувати", + "check": "Перевірити", + "close": "закрити", + "closeSuccess": "Успішне закриття заявки", + "closeWarning": "Після закриття заявки ви не зможете продовжити відповідати.", + "confirm": "Підтвердити", + "confirmClose": "Підтвердити закриття заявки?", + "createSuccess": "Створено успішно", + "createTicket": "Створити заявку", + "createTicketDescription": "Заявка буде оброблена протягом 24 годин", + "description": "опис", + "inputPlaceholder": "Введіть ваше повідомлення", + "reply": "відповідь", + "status": { + "0": "Статус", + "1": "Очікує обробки", + "2": "В обробці", + "3": "Вирішено", + "4": "Закрито" + }, + "submit": "Надіслати", + "ticketList": "Список заявок", + "title": "Заголовок", + "updatedAt": "Оновлено" +} diff --git a/apps/user/locales/uk-UA/wallet.json b/apps/user/locales/uk-UA/wallet.json new file mode 100644 index 0000000..4353c77 --- /dev/null +++ b/apps/user/locales/uk-UA/wallet.json @@ -0,0 +1,15 @@ +{ + "amount": "Сума", + "balance": "Баланс", + "createdAt": "Час", + "title": "Баланс рахунку", + "type": { + "0": "Тип", + "1": "Поповнення", + "2": "Виведення", + "3": "Покупка", + "4": "Повернення коштів", + "5": "Нагорода", + "6": "Комісія" + } +} diff --git a/apps/user/locales/vi-VN/affiliate.json b/apps/user/locales/vi-VN/affiliate.json new file mode 100644 index 0000000..2fcac95 --- /dev/null +++ b/apps/user/locales/vi-VN/affiliate.json @@ -0,0 +1,11 @@ +{ + "commissionInfo": "Số tiền thống kê, hoa hồng mời tự động chuyển vào số dư", + "commissionRate": "Tỷ lệ hoa hồng", + "copyInviteLink": "Sao chép liên kết mời", + "copySuccess": "Sao chép thành công", + "inviteCode": "Mã mời", + "inviteRecords": "Hồ sơ mời", + "registrationTime": "Thời gian đăng ký", + "totalCommission": "Tổng hoa hồng", + "userEmail": "Email người dùng" +} diff --git a/apps/user/locales/vi-VN/auth.json b/apps/user/locales/vi-VN/auth.json new file mode 100644 index 0000000..f89386c --- /dev/null +++ b/apps/user/locales/vi-VN/auth.json @@ -0,0 +1,38 @@ +{ + "check": { + "checking": "Đang kiểm tra...", + "continue": "Tiếp tục", + "description": "Vui lòng nhập email của bạn để tiếp tục đăng nhập hoặc đăng ký.", + "email": "Vui lòng nhập địa chỉ email hợp lệ.", + "title": "Đăng nhập/Đăng ký", + "whitelist": "Tên miền email không có trong danh sách trắng được phép." + }, + "login": { + "description": "Vui lòng nhập thông tin tài khoản của bạn để đăng nhập.", + "forgotPassword": "Quên mật khẩu?", + "success": "Đăng nhập thành công!", + "switchAccount": "Đăng ký/Chuyển đổi tài khoản", + "title": "Đăng nhập" + }, + "orWithEmail": "hoặc sử dụng email", + "register": { + "description": "Tạo tài khoản mới, điền thông tin của bạn để đăng ký.", + "existingAccount": "Đã có tài khoản?", + "get": "Lấy", + "invite": "Mã mời", + "message": "#### Kính gửi Quý khách hàng,\n\nCảm ơn bạn đã quan tâm và ủng hộ chúng tôi. Do điều chỉnh chiến lược vận hành, chúng tôi đã đóng chức năng đăng ký người dùng mới. Trong thời gian này, việc sử dụng của người dùng hiện tại sẽ không bị ảnh hưởng.\n\nChúng tôi cam kết mang đến cho bạn dịch vụ và trải nghiệm tốt hơn, do đó sẽ tiến hành tối ưu hóa hệ thống và nâng cấp chức năng toàn diện trong thời gian đóng đăng ký. Trong tương lai, chúng tôi sẽ chào đón bạn với nội dung và dịch vụ chất lượng hơn.\n\nHãy theo dõi trang web và các nền tảng mạng xã hội của chúng tôi để nhận thông tin và thông báo mới nhất. Cảm ơn bạn đã hiểu và ủng hộ.\n\nNếu có bất kỳ thắc mắc hoặc cần hỗ trợ, vui lòng liên hệ với đội ngũ chăm sóc khách hàng của chúng tôi.\n\n**Một lần nữa cảm ơn sự ủng hộ và hiểu biết của bạn.**", + "passwordMismatch": "Mật khẩu nhập hai lần không khớp", + "success": "Đăng ký thành công, đã tự động đăng nhập!", + "switchToLogin": "Đăng nhập/Đặt lại email", + "title": "Đăng ký" + }, + "reset": { + "description": "Vui lòng nhập địa chỉ email của bạn để đặt lại mật khẩu.", + "existingAccount": "Đã có tài khoản?", + "get": "Lấy", + "success": "Đặt lại mật khẩu thành công, đã tự động chuyển sang đăng nhập!", + "switchToLogin": "Đăng nhập/Đăng ký", + "title": "Đặt lại mật khẩu" + }, + "tos": "Điều khoản dịch vụ" +} diff --git a/apps/user/locales/vi-VN/common.json b/apps/user/locales/vi-VN/common.json new file mode 100644 index 0000000..604df6f --- /dev/null +++ b/apps/user/locales/vi-VN/common.json @@ -0,0 +1,52 @@ +{ + "empty": [ + "Hãy tưởng tượng nơi này đầy ắp nội dung thú vị! Tạm thời chỉ có thể tưởng tượng thôi…", + "Khu vực này đã biến mất một cách bí ẩn, chúng tôi đang triệu hồi nó trở lại!", + "Ôi chao, chẳng có gì xảy ra… bạn có thể tự điền gì đó vào!", + "Giống như phát hiện sân khấu không có ai trong buổi hòa nhạc… sao bạn không lên biểu diễn?", + "Bạn đã tìm thấy một vùng đất trống! Có muốn xây một ngôi nhà không?", + "Nơi này tạm thời trống rỗng, nhưng sự sáng tạo bắt đầu từ đây!", + "Chẳng có gì cả… nhưng đừng lo, đây chỉ là khởi đầu thôi!", + "Nơi này đã chuẩn bị một bất ngờ lớn, nhưng bất ngờ đã trốn mất rồi!", + "Tạm thời không có gì, giống như tủ đồ ăn vặt đã bị ăn sạch vậy.", + "Khu đất trống này đang chờ nhân vật chính xuất hiện!" + ], + "list": { + "pageInfo": "Trang {current} trong tổng số {total} trang", + "rowsPerPage": "Số hàng mỗi trang", + "selectedItems": "Đã chọn {total} hàng" + }, + "login": "Đăng nhập/Đăng ký", + "request": { + "10001": "Truy vấn chưa thành công, vui lòng thử lại sau hoặc kiểm tra điều kiện của bạn.", + "10002": "Cập nhật không thành công, vui lòng thử lại sau.", + "10003": "Tạm thời không thể hoàn thành thao tác chèn, vui lòng thử lại sau.", + "10004": "Xóa không thành công, vui lòng thử lại sau.", + "20001": "Thông tin người dùng này đã tồn tại, vui lòng thay đổi thông tin và thử lại.", + "20002": "Không tìm thấy người dùng này, vui lòng kiểm tra thông tin và thử lại.", + "20003": "Mật khẩu bạn nhập không chính xác, vui lòng nhập lại.", + "20004": "Người dùng này đã bị vô hiệu hóa, nếu có thắc mắc vui lòng liên hệ dịch vụ khách hàng.", + "20005": "Số dư không đủ, vui lòng nạp tiền và thử lại.", + "20006": "Chức năng đăng ký tạm thời không khả dụng, vui lòng thử lại sau.", + "30001": "Nút này đã tồn tại, vui lòng không thêm lại.", + "30002": "Không tìm thấy nút liên quan, vui lòng kiểm tra và thử lại.", + "30003": "Nhóm đã tồn tại, vui lòng thử sử dụng tên khác.", + "30004": "Không tìm thấy nhóm này, vui lòng xác nhận thông tin và thử lại.", + "30005": "Nhóm này vẫn còn nội dung, vui lòng làm trống trước khi thử lại.", + "400": "Tham số yêu cầu không chính xác, vui lòng kiểm tra và gửi lại.", + "40002": "Không tìm thấy Token hợp lệ, vui lòng đăng nhập trước khi thử lại.", + "40003": "Token hiện tại không hợp lệ, vui lòng lấy lại và thử lại.", + "40004": "Token đã hết hạn, vui lòng đăng nhập lại.", + "40005": "Bạn không có quyền truy cập, nếu có thắc mắc vui lòng liên hệ quản trị viên.", + "401": "Yêu cầu quá thường xuyên, vui lòng thử lại sau.", + "500": "Máy chủ gặp một số vấn đề, vui lòng thử lại sau.", + "50001": "Không tìm thấy thông tin phiếu giảm giá tương ứng, vui lòng kiểm tra và thử lại.", + "50002": "Phiếu giảm giá này đã được sử dụng, không thể sử dụng lại.", + "60001": "Đăng ký đã hết hạn, vui lòng gia hạn trước khi sử dụng.", + "60002": "Tạm thời không thể sử dụng đăng ký này, vui lòng thử lại sau.", + "70001": "Mã xác nhận không chính xác, vui lòng nhập lại.", + "80001": "Nhiệm vụ không được thêm vào hàng đợi thành công, vui lòng thử lại sau.", + "undefined": "Hệ thống xảy ra lỗi, vui lòng thử lại sau." + }, + "unlimited": "không giới hạn" +} diff --git a/apps/user/locales/vi-VN/dashboard.json b/apps/user/locales/vi-VN/dashboard.json new file mode 100644 index 0000000..71224db --- /dev/null +++ b/apps/user/locales/vi-VN/dashboard.json @@ -0,0 +1,25 @@ +{ + "cancel": "Hủy", + "confirm": "Xác nhận", + "confirmResetSubscription": "Bạn có chắc chắn muốn đặt lại địa chỉ đăng ký không?", + "copy": "Sao chép", + "copyFailure": "Sao chép thất bại, vui lòng sao chép thủ công", + "copySuccess": "Sao chép thành công", + "download": "tải xuống", + "expirationDays": "Thời gian hết hạn/ngày", + "import": "Nhập khẩu", + "latestAnnouncement": "Thông báo mới nhất", + "manualImportMessage": "Ứng dụng này hiện không hỗ trợ kích hoạt, vui lòng nhập thủ công, địa chỉ đăng ký đã được sao chép tự động", + "mySubscriptions": "Đăng ký của tôi", + "nextResetDays": "Lần đặt lại tiếp theo/ngày", + "prompt": "gợi ý", + "purchaseSubscription": "Mua đăng ký", + "qrCode": "Mã QR", + "resetSubscription": "Đặt lại địa chỉ đăng ký", + "resetSuccess": "Đặt lại thành công", + "scanToSubscribe": "Quét để đăng ký", + "subscriptionUrl": "Địa chỉ đăng ký", + "totalTraffic": "Tổng lưu lượng", + "unknown": "Không xác định", + "used": "Đã sử dụng" +} diff --git a/apps/user/locales/vi-VN/document.json b/apps/user/locales/vi-VN/document.json new file mode 100644 index 0000000..d6d7acb --- /dev/null +++ b/apps/user/locales/vi-VN/document.json @@ -0,0 +1,6 @@ +{ + "all": "Tất cả", + "document": "Tài liệu", + "read": "Đọc", + "tutorial": "Hướng dẫn" +} diff --git a/apps/user/locales/vi-VN/index.json b/apps/user/locales/vi-VN/index.json new file mode 100644 index 0000000..3a794b9 --- /dev/null +++ b/apps/user/locales/vi-VN/index.json @@ -0,0 +1,14 @@ +{ + "global_map_description": "Khám phá kết nối toàn cầu liền mạch. Chọn dịch vụ mạng phù hợp với nhu cầu của bạn, duy trì kết nối mọi lúc mọi nơi.", + "global_map_itle": "Kết nối toàn cầu, dễ dàng và không lo lắng", + "locations": "Khu vực", + "per_month": "Hàng tháng", + "product_showcase_description": "Hãy để chúng tôi chọn gói phù hợp nhất cho bạn và khám phá nó một cách vui vẻ.", + "product_showcase_title": "Chọn gói của bạn", + "servers": "máy chủ", + "started": "Bắt đầu sử dụng", + "subscribe": "Đăng ký", + "tos": "Thỏa thuận dịch vụ", + "users": "người dùng", + "welcome": "Chào mừng đến với" +} diff --git a/apps/user/locales/vi-VN/language.json b/apps/user/locales/vi-VN/language.json new file mode 100644 index 0000000..1d1d092 --- /dev/null +++ b/apps/user/locales/vi-VN/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "Tiếng Séc", + "de-DE": "Tiếng Đức", + "en-US": "Tiếng Anh", + "es-ES": "Tiếng Tây Ban Nha", + "es-MX": "Tiếng Tây Ban Nha (Mexico)", + "fi-FI": "Tiếng Phần Lan", + "fr-FR": "Tiếng Pháp", + "hi-IN": "Tiếng Hindi", + "hu-HU": "Tiếng Hungary", + "ja-JP": "Tiếng Nhật", + "ko-KR": "Tiếng Hàn", + "no-NO": "Tiếng Na Uy", + "pl-PL": "Tiếng Ba Lan", + "pt-BR": "Tiếng Bồ Đào Nha (Brazil)", + "ro-RO": "Tiếng Romania", + "ru-RU": "Tiếng Nga", + "th-TH": "Tiếng Thái", + "tr-TR": "Tiếng Thổ Nhĩ Kỳ", + "uk-UA": "Tiếng Ukraina", + "vi-VN": "Tiếng Việt", + "zh-CN": "Tiếng Trung (Giản thể)", + "zh-TW": "Tiếng Trung (Phồn thể)" +} diff --git a/apps/user/locales/vi-VN/layout.json b/apps/user/locales/vi-VN/layout.json new file mode 100644 index 0000000..78da57c --- /dev/null +++ b/apps/user/locales/vi-VN/layout.json @@ -0,0 +1,7 @@ +{ + "accountBalance": "Số dư tài khoản", + "copyInviteLink": "Sao chép liên kết mời", + "copySuccess": "Sao chép liên kết mời thành công", + "inviteCode": "Mã mời", + "recharge": "Nạp tiền" +} diff --git a/apps/user/locales/vi-VN/menu.json b/apps/user/locales/vi-VN/menu.json new file mode 100644 index 0000000..73841f3 --- /dev/null +++ b/apps/user/locales/vi-VN/menu.json @@ -0,0 +1,17 @@ +{ + "affiliate": "Lời mời của tôi", + "announcement": "Danh sách thông báo", + "dashboard": "Bảng điều khiển", + "document": "Tài liệu hướng dẫn", + "finance": "Tài chính", + "help": "Trợ giúp", + "logout": "Đăng xuất", + "order": "Danh sách đơn hàng", + "payment": "Chi tiết đơn hàng", + "personal": "Cá nhân", + "profile": "Trung tâm cá nhân", + "server": "dịch vụ", + "subscribe": "Mua đăng ký", + "ticket": "Phiếu hỗ trợ của tôi", + "wallet": "Trung tâm tài chính" +} diff --git a/apps/user/locales/vi-VN/order.json b/apps/user/locales/vi-VN/order.json new file mode 100644 index 0000000..c886b59 --- /dev/null +++ b/apps/user/locales/vi-VN/order.json @@ -0,0 +1,61 @@ +{ + "balanceRecharge": "Nạp tiền số dư", + "buyNow": "Mua ngay", + "buySubscription": "Mua đăng ký", + "cancel": "Hủy", + "createdAt": "Thời gian tạo", + "description": "Nạp tiền chỉ với một cú nhấp, dễ dàng hoàn tất", + "detail": "Chi tiết", + "enterAmount": "Vui lòng nhập số tiền nạp", + "enterCoupon": "Vui lòng nhập mã giảm giá", + "goToPayment": "Đi đến thanh toán", + "methods": { + "alipay_f2f": "Alipay (mặt đối mặt)", + "balance": "Số dư", + "epay": "Thanh toán dễ dàng", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "month": "tháng", + "months": "tháng", + "name": "Tên", + "orderClosed": "Đơn hàng đã đóng", + "orderList": "Danh sách đơn hàng", + "orderNo": "Số đơn hàng", + "orderNumber": "Số đơn hàng", + "payment": "Thanh toán", + "paymentAmount": "Số tiền thanh toán", + "paymentMethod": "Phương thức thanh toán", + "paymentSuccess": "Thanh toán thành công", + "productList": "Danh sách sản phẩm", + "purchaseDuration": "Thời gian mua", + "recharge": "Nạp tiền", + "rechargeAmount": "Số tiền nạp", + "rechargeNow": "Nạp tiền ngay", + "renew": "Gia hạn", + "renewSubscription": "Gia hạn đăng ký", + "resetPrice": "Đặt lại giá", + "resetTraffic": "Đặt lại lưu lượng", + "resetTrafficDescription": "Chỉ đặt lại lưu lượng tháng này thôi nhé", + "resetTrafficTitle": "Đặt lại lưu lượng", + "scanToPay": "Vui lòng quét mã để thanh toán", + "status": { + "0": "Trạng thái", + "1": "Chờ thanh toán", + "2": "Đã thanh toán", + "3": "Đã hủy", + "4": "Đã đóng", + "5": "Đã hoàn thành" + }, + "subscribeNow": "Đăng ký ngay", + "timeExpired": "Thời gian thanh toán đã hết", + "type": { + "0": "Loại", + "1": "Mua mới", + "2": "Gia hạn", + "3": "Đặt lại lưu lượng", + "4": "Nạp tiền" + }, + "viewDocument": "Xem tài liệu", + "waitingForPayment": "Đang chờ thanh toán" +} diff --git a/apps/user/locales/vi-VN/profile.json b/apps/user/locales/vi-VN/profile.json new file mode 100644 index 0000000..a10be26 --- /dev/null +++ b/apps/user/locales/vi-VN/profile.json @@ -0,0 +1,28 @@ +{ + "accountSettings": { + "accountSettings": "Cài đặt tài khoản", + "loginPassword": "Mật khẩu đăng nhập", + "newPassword": "Mật khẩu mới", + "passwordMismatch": "Hai lần nhập mật khẩu không khớp", + "repeatNewPassword": "Nhập lại mật khẩu mới", + "updatePassword": "Cập nhật mật khẩu", + "updateSuccess": "Cập nhật thành công" + }, + "notify": { + "bind": "Liên kết", + "emailNotification": "Thông báo Email", + "notificationSettings": "Cài đặt Thông báo", + "telegramId": "Telegram ID", + "telegramIdPlaceholder": "Nhập Telegram ID", + "telegramNotification": "Thông báo Telegram", + "updateSuccess": "Cập nhật thành công" + }, + "notifyEvent": { + "balanceChange": "Thay đổi số dư", + "finance": "Tài chính", + "login": "Đăng nhập", + "notificationEvents": "Sự kiện thông báo", + "subscribe": "Đăng ký", + "updateSuccess": "Cập nhật thành công" + } +} diff --git a/apps/user/locales/vi-VN/subscribe.json b/apps/user/locales/vi-VN/subscribe.json new file mode 100644 index 0000000..9eda086 --- /dev/null +++ b/apps/user/locales/vi-VN/subscribe.json @@ -0,0 +1,31 @@ +{ + "all": "Tất cả", + "billing": { + "billingTitle": "Hóa đơn sản phẩm", + "couponDiscount": "Ưu đãi mã giảm giá", + "duration": "Thời gian gói", + "fee": "Phí dịch vụ", + "months": "tháng", + "price": "Giá", + "productDiscount": "Giảm giá sản phẩm", + "total": "Tổng giá" + }, + "buy": "Mua", + "category": "thể loại", + "detail": { + "availableTraffic": "Lưu lượng khả dụng", + "connectedDevices": "Số IP kết nối đồng thời", + "connectionSpeed": "Tốc độ kết nối", + "productDetail": "Chi tiết sản phẩm" + }, + "methods": { + "alipay_f2f": "Alipay (mặt đối mặt)", + "balance": "Số dư", + "epay": "Thanh toán dễ dàng", + "stripe_alipay": "Stripe (Alipay)", + "stripe_wechat_pay": "Stripe (WeChat)" + }, + "perMonth": "tháng", + "productDescription": "Mô tả sản phẩm", + "products": "Sản phẩm" +} diff --git a/apps/user/locales/vi-VN/ticket.json b/apps/user/locales/vi-VN/ticket.json new file mode 100644 index 0000000..8a7685b --- /dev/null +++ b/apps/user/locales/vi-VN/ticket.json @@ -0,0 +1,26 @@ +{ + "cancel": "Hủy", + "check": "Kiểm tra", + "close": "Đóng", + "closeSuccess": "Đóng phiếu thành công", + "closeWarning": "Sau khi đóng phiếu yêu cầu, bạn sẽ không thể tiếp tục trả lời.", + "confirm": "Xác nhận", + "confirmClose": "Xác nhận đóng phiếu công việc không?", + "createSuccess": "Tạo thành công", + "createTicket": "Tạo phiếu hỗ trợ", + "createTicketDescription": "Yêu cầu sẽ được phản hồi trong vòng 24 giờ", + "description": "Mô tả", + "inputPlaceholder": "Nhập tin nhắn của bạn", + "reply": "phản hồi", + "status": { + "0": "Trạng thái", + "1": "Chờ xử lý", + "2": "Đang xử lý", + "3": "Đã giải quyết", + "4": "Đã đóng" + }, + "submit": "Gửi", + "ticketList": "Danh sách phiếu hỗ trợ", + "title": "Tiêu đề", + "updatedAt": "Cập nhật lúc" +} diff --git a/apps/user/locales/vi-VN/wallet.json b/apps/user/locales/vi-VN/wallet.json new file mode 100644 index 0000000..0bd9b00 --- /dev/null +++ b/apps/user/locales/vi-VN/wallet.json @@ -0,0 +1,15 @@ +{ + "amount": "Số tiền", + "balance": "Số dư", + "createdAt": "Thời gian", + "title": "Số dư tài khoản", + "type": { + "0": "Loại", + "1": "Nạp tiền", + "2": "Rút tiền", + "3": "Mua", + "4": "Hoàn tiền", + "5": "Thưởng", + "6": "Hoa hồng" + } +} diff --git a/apps/user/locales/zh-TW/affiliate.json b/apps/user/locales/zh-TW/affiliate.json new file mode 100644 index 0000000..d28ba1b --- /dev/null +++ b/apps/user/locales/zh-TW/affiliate.json @@ -0,0 +1,11 @@ +{ + "commissionInfo": "統計金額,邀請佣金自動轉入餘額", + "commissionRate": "佣金比例", + "copyInviteLink": "複製邀請連結", + "copySuccess": "複製成功", + "inviteCode": "邀請碼", + "inviteRecords": "邀請記錄", + "registrationTime": "註冊時間", + "totalCommission": "佣金總額", + "userEmail": "使用者信箱" +} diff --git a/apps/user/locales/zh-TW/auth.json b/apps/user/locales/zh-TW/auth.json new file mode 100644 index 0000000..eadbfef --- /dev/null +++ b/apps/user/locales/zh-TW/auth.json @@ -0,0 +1,38 @@ +{ + "check": { + "checking": "正在驗證...", + "continue": "繼續", + "description": "請輸入您的電子郵件以繼續登入或註冊。", + "email": "請輸入有效的郵箱地址。", + "title": "登入/註冊", + "whitelist": "郵箱域名不在允許的白名單中。" + }, + "login": { + "description": "請輸入您的帳戶資訊以登入。", + "forgotPassword": "忘記密碼?", + "success": "登入成功!", + "switchAccount": "註冊/切換帳號", + "title": "登入" + }, + "orWithEmail": "或使用電子郵件", + "register": { + "description": "建立新帳戶,填寫您的資訊以註冊。", + "existingAccount": "已有帳戶?", + "get": "獲取", + "invite": "邀請碼", + "message": "#### 尊敬的用戶,您好!\n\n感謝您對我們的關注和支持。由於站點營運策略的調整,我們已關閉新用戶註冊功能。在此期間,現有用戶的使用不會受到任何影響。\n\n我們致力於為您提供更好的服務和體驗,因此將在關閉註冊期間進行全面的系統優化和功能升級。未來,我們將以更優質的內容和服務迎接您的到來。\n\n請關注我們的網站和社交媒體平台,獲取最新的動態和通知。感謝您的理解與支持。\n\n如有任何疑問或需要幫助,請隨時聯繫我們的客服團隊。\n\n**再次感謝您的支持與理解。**", + "passwordMismatch": "兩次密碼輸入不一致", + "success": "註冊成功,已自動登入!", + "switchToLogin": "登入/重置信箱", + "title": "註冊" + }, + "reset": { + "description": "請輸入您的電子郵件地址以重設密碼。", + "existingAccount": "已有帳戶?", + "get": "獲取", + "success": "重設密碼成功,已自動切換到登入!", + "switchToLogin": "登入/註冊", + "title": "重設密碼" + }, + "tos": "服務條款" +} diff --git a/apps/user/locales/zh-TW/common.json b/apps/user/locales/zh-TW/common.json new file mode 100644 index 0000000..63146fc --- /dev/null +++ b/apps/user/locales/zh-TW/common.json @@ -0,0 +1,52 @@ +{ + "empty": [ + "想像一下這裡充滿了精彩的內容!暫時只能靠想像了…", + "這片區域神秘消失了,我們正在召喚它回來!", + "哎呀,什麼都沒發生…你可以自己填點什麼!", + "這就像在演唱會上發現舞台上沒人…要不你上去表演?", + "你找到了一片空白樂土!要不要建個房子?", + "這裡暫時空無一物,但創意從這裡開始!", + "什麼也沒有…但別擔心,這只是個開始!", + "這裡原本準備了大驚喜,結果驚喜溜走了!", + "暫時什麼都沒有,就像零食櫃被吃空了一樣。", + "這片空地在等它的主角登場!" + ], + "list": { + "pageInfo": "第 {current} 頁,共 {total} 頁", + "rowsPerPage": "每頁行數", + "selectedItems": "已選擇 {total} 行" + }, + "login": "登入/註冊", + "request": { + "10001": "查詢暫未成功,請稍後重試或檢查您的條件。", + "10002": "更新操作未成功,請稍後再試。", + "10003": "暫時無法完成插入操作,請稍後再試。", + "10004": "刪除操作未能完成,請稍後再試。", + "20001": "該用戶資訊已存在,請更換資訊後重試。", + "20002": "未找到該用戶,請核對資訊後再試。", + "20003": "您輸入的密碼不正確,請重新輸入。", + "20004": "該用戶已被禁用,如有疑問請聯繫客服。", + "20005": "餘額不足,請充值後再次嘗試。", + "20006": "註冊功能暫不可用,請稍後再試。", + "30001": "該節點已存在,請勿重複添加。", + "30002": "未找到相關節點,請檢查後重試。", + "30003": "分組已存在,請嘗試使用其他名稱。", + "30004": "未找到該分組,請確認資訊後重試。", + "30005": "該分組內仍有內容,請清空後再試。", + "400": "請求參數不正確,請檢查並重新提交。", + "40002": "未找到有效的Token,請先登入再重試。", + "40003": "當前Token無效,請重新獲取後再嘗試。", + "40004": "Token已過期,請重新登入。", + "40005": "您暫無訪問權限,如有疑問請聯繫管理員。", + "401": "請求過於頻繁,請稍後再嘗試。", + "500": "伺服器遇到一些問題,請稍後再試。", + "50001": "找不到對應的優惠券資訊,請檢查後再試。", + "50002": "該優惠券已被使用,無法重複使用。", + "60001": "訂閱已過期,請續訂後再使用。", + "60002": "暫時無法使用該訂閱,請稍後再試。", + "70001": "驗證碼有誤,請重新輸入。", + "80001": "任務未成功加入隊列,請稍後重試。", + "undefined": "系統發生錯誤,請稍後重試" + }, + "unlimited": "無限制" +} diff --git a/apps/user/locales/zh-TW/dashboard.json b/apps/user/locales/zh-TW/dashboard.json new file mode 100644 index 0000000..190d3d3 --- /dev/null +++ b/apps/user/locales/zh-TW/dashboard.json @@ -0,0 +1,25 @@ +{ + "cancel": "取消", + "confirm": "確認", + "confirmResetSubscription": "是否確認重置訂閱地址?", + "copy": "複製", + "copyFailure": "複製失敗,請手動複製", + "copySuccess": "複製成功", + "download": "下載", + "expirationDays": "到期時間/天", + "import": "匯入", + "latestAnnouncement": "最新公告", + "manualImportMessage": "該應用暫不支援喚起,請手動導入,已自動複製訂閱地址", + "mySubscriptions": "我的訂閱", + "nextResetDays": "下次重置/天", + "prompt": "提示", + "purchaseSubscription": "購買訂閱", + "qrCode": "QR碼", + "resetSubscription": "重設訂閱地址", + "resetSuccess": "重設成功", + "scanToSubscribe": "掃描訂閱", + "subscriptionUrl": "訂閱地址", + "totalTraffic": "總流量", + "unknown": "未知", + "used": "已用" +} diff --git a/apps/user/locales/zh-TW/document.json b/apps/user/locales/zh-TW/document.json new file mode 100644 index 0000000..67ad877 --- /dev/null +++ b/apps/user/locales/zh-TW/document.json @@ -0,0 +1,6 @@ +{ + "all": "全部", + "document": "文件", + "read": "閱讀", + "tutorial": "教學" +} diff --git a/apps/user/locales/zh-TW/index.json b/apps/user/locales/zh-TW/index.json new file mode 100644 index 0000000..564ab45 --- /dev/null +++ b/apps/user/locales/zh-TW/index.json @@ -0,0 +1,14 @@ +{ + "global_map_description": "探索無縫的全球連接。選擇符合您需求的網路服務,隨時隨地保持連接。", + "global_map_itle": "全球互聯,輕鬆無憂", + "locations": "地區", + "per_month": "每月", + "product_showcase_description": "讓我們選擇最適合您的套餐,快樂地探索它。", + "product_showcase_title": "選擇您的方案", + "servers": "伺服器", + "started": "開始使用", + "subscribe": "訂閱", + "tos": "服務協議", + "users": "使用者", + "welcome": "歡迎來到" +} diff --git a/apps/user/locales/zh-TW/language.json b/apps/user/locales/zh-TW/language.json new file mode 100644 index 0000000..a47053c --- /dev/null +++ b/apps/user/locales/zh-TW/language.json @@ -0,0 +1,24 @@ +{ + "cs-CZ": "捷克語", + "de-DE": "德語", + "en-US": "英語", + "es-ES": "西班牙語", + "es-MX": "西班牙語(墨西哥)", + "fi-FI": "芬蘭語", + "fr-FR": "法語", + "hi-IN": "印地語", + "hu-HU": "匈牙利語", + "ja-JP": "日語", + "ko-KR": "韓語", + "no-NO": "挪威語", + "pl-PL": "波蘭語", + "pt-BR": "葡萄牙語(巴西)", + "ro-RO": "羅馬尼亞語", + "ru-RU": "俄語", + "th-TH": "泰語", + "tr-TR": "土耳其語", + "uk-UA": "烏克蘭語", + "vi-VN": "越南語", + "zh-CN": "中文(繁體)", + "zh-TW": "中文(繁體)" +} diff --git a/apps/user/locales/zh-TW/layout.json b/apps/user/locales/zh-TW/layout.json new file mode 100644 index 0000000..e185bea --- /dev/null +++ b/apps/user/locales/zh-TW/layout.json @@ -0,0 +1,7 @@ +{ + "accountBalance": "帳戶餘額", + "copyInviteLink": "複製邀請連結", + "copySuccess": "邀請連結複製成功", + "inviteCode": "邀請碼", + "recharge": "儲值" +} diff --git a/apps/user/locales/zh-TW/menu.json b/apps/user/locales/zh-TW/menu.json new file mode 100644 index 0000000..12f77a7 --- /dev/null +++ b/apps/user/locales/zh-TW/menu.json @@ -0,0 +1,17 @@ +{ + "affiliate": "我的邀請", + "announcement": "公告列表", + "dashboard": "主頁", + "document": "使用文件", + "finance": "財務", + "help": "幫助", + "logout": "登出", + "order": "訂單列表", + "payment": "訂單詳情", + "personal": "個人", + "profile": "個人中心", + "server": "服務", + "subscribe": "購買訂閱", + "ticket": "我的工單", + "wallet": "財務中心" +} diff --git a/apps/user/locales/zh-TW/order.json b/apps/user/locales/zh-TW/order.json new file mode 100644 index 0000000..1fc7882 --- /dev/null +++ b/apps/user/locales/zh-TW/order.json @@ -0,0 +1,61 @@ +{ + "balanceRecharge": "餘額儲值", + "buyNow": "立即購買", + "buySubscription": "購買訂閱", + "cancel": "取消", + "createdAt": "建立時間", + "description": "一鍵充值,輕鬆搞定", + "detail": "詳情", + "enterAmount": "請輸入充值金額", + "enterCoupon": "請輸入折扣碼", + "goToPayment": "前往付款", + "methods": { + "alipay_f2f": "支付寶(面對面)", + "balance": "餘額", + "epay": "易支付", + "stripe_alipay": "Stripe(支付寶)", + "stripe_wechat_pay": "Stripe(微信)" + }, + "month": "個月", + "months": "個月", + "name": "名稱", + "orderClosed": "訂單已關閉", + "orderList": "訂單列表", + "orderNo": "訂單號", + "orderNumber": "訂單編號", + "payment": "去付款", + "paymentAmount": "支付金額", + "paymentMethod": "付款方式", + "paymentSuccess": "付款成功", + "productList": "產品列表", + "purchaseDuration": "購買時長", + "recharge": "儲值", + "rechargeAmount": "儲值金額", + "rechargeNow": "立即儲值", + "renew": "續費", + "renewSubscription": "續費訂閱", + "resetPrice": "重設價格", + "resetTraffic": "重設流量", + "resetTrafficDescription": "僅重置當月流量哦", + "resetTrafficTitle": "重設流量", + "scanToPay": "請掃碼支付", + "status": { + "0": "狀態", + "1": "待支付", + "2": "已支付", + "3": "已取消", + "4": "已關閉", + "5": "已完成" + }, + "subscribeNow": "立即訂閱", + "timeExpired": "支付時間已過", + "type": { + "0": "類型", + "1": "新購", + "2": "續費", + "3": "重置流量", + "4": "充值" + }, + "viewDocument": "檢視文件", + "waitingForPayment": "等待付款" +} diff --git a/apps/user/locales/zh-TW/profile.json b/apps/user/locales/zh-TW/profile.json new file mode 100644 index 0000000..8253e8f --- /dev/null +++ b/apps/user/locales/zh-TW/profile.json @@ -0,0 +1,28 @@ +{ + "accountSettings": { + "accountSettings": "帳戶設定", + "loginPassword": "登入密碼", + "newPassword": "新密碼", + "passwordMismatch": "兩次密碼輸入不一致", + "repeatNewPassword": "重複新密碼", + "updatePassword": "更新密碼", + "updateSuccess": "更新成功" + }, + "notify": { + "bind": "綁定", + "emailNotification": "郵件通知", + "notificationSettings": "通知設定", + "telegramId": "Telegram ID", + "telegramIdPlaceholder": "輸入 Telegram ID", + "telegramNotification": "Telegram 通知", + "updateSuccess": "更新成功" + }, + "notifyEvent": { + "balanceChange": "餘額變動", + "finance": "財務", + "login": "登入", + "notificationEvents": "通知事件", + "subscribe": "訂閱", + "updateSuccess": "更新成功" + } +} diff --git a/apps/user/locales/zh-TW/subscribe.json b/apps/user/locales/zh-TW/subscribe.json new file mode 100644 index 0000000..8cfc3a1 --- /dev/null +++ b/apps/user/locales/zh-TW/subscribe.json @@ -0,0 +1,31 @@ +{ + "all": "全部", + "billing": { + "billingTitle": "商品帳單", + "couponDiscount": "折扣碼優惠", + "duration": "方案時長", + "fee": "手續費", + "months": "個月", + "price": "價格", + "productDiscount": "商品折扣", + "total": "總價" + }, + "buy": "購買", + "category": "類別", + "detail": { + "availableTraffic": "可用流量", + "connectedDevices": "同時連接 IP 數", + "connectionSpeed": "連接速度", + "productDetail": "商品詳情" + }, + "methods": { + "alipay_f2f": "支付寶(面對面)", + "balance": "餘額", + "epay": "易支付", + "stripe_alipay": "Stripe(支付寶)", + "stripe_wechat_pay": "Stripe(微信)" + }, + "perMonth": "每月", + "productDescription": "商品描述", + "products": "產品" +} diff --git a/apps/user/locales/zh-TW/ticket.json b/apps/user/locales/zh-TW/ticket.json new file mode 100644 index 0000000..d0c0fa3 --- /dev/null +++ b/apps/user/locales/zh-TW/ticket.json @@ -0,0 +1,26 @@ +{ + "cancel": "取消", + "check": "檢視", + "close": "關閉", + "closeSuccess": "工單關閉成功", + "closeWarning": "關閉工單後將無法繼續回覆。", + "confirm": "確認", + "confirmClose": "確認關閉工單嗎?", + "createSuccess": "建立成功", + "createTicket": "建立工單", + "createTicketDescription": "工單24小時內回覆哦", + "description": "描述", + "inputPlaceholder": "輸入您的訊息", + "reply": "回覆", + "status": { + "0": "狀態", + "1": "待處理", + "2": "處理中", + "3": "已解決", + "4": "已關閉" + }, + "submit": "提交", + "ticketList": "工單列表", + "title": "標題", + "updatedAt": "更新時間" +} diff --git a/apps/user/locales/zh-TW/wallet.json b/apps/user/locales/zh-TW/wallet.json new file mode 100644 index 0000000..85c3443 --- /dev/null +++ b/apps/user/locales/zh-TW/wallet.json @@ -0,0 +1,15 @@ +{ + "amount": "金額", + "balance": "餘額", + "createdAt": "時間", + "title": "帳戶餘額", + "type": { + "0": "類型", + "1": "充值", + "2": "提取", + "3": "購買", + "4": "退款", + "5": "獎勵", + "6": "佣金" + } +} diff --git a/apps/user/package.json b/apps/user/package.json index 0d14a44..986f7fe 100644 --- a/apps/user/package.json +++ b/apps/user/package.json @@ -34,6 +34,7 @@ "react-copy-to-clipboard": "^5.1.0", "react-dom": "^19.0.0", "react-turnstile": "^1.1.4", + "rtl-detect": "^1.1.2", "universal-cookie": "^7.2.2", "zustand": "^5.0.2" }, @@ -44,6 +45,7 @@ "@types/react": "^19.0.1", "@types/react-copy-to-clipboard": "^5.0.7", "@types/react-dom": "^19.0.2", + "@types/rtl-detect": "^1.0.3", "typescript": "^5.7.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7924353..b7b5c09 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -100,6 +100,9 @@ importers: react-turnstile: specifier: ^1.1.4 version: 1.1.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + rtl-detect: + specifier: ^1.1.2 + version: 1.1.2 universal-cookie: specifier: ^7.2.2 version: 7.2.2 @@ -122,6 +125,9 @@ importers: '@types/react-dom': specifier: ^19.0.2 version: 19.0.2(@types/react@19.0.1) + '@types/rtl-detect': + specifier: ^1.0.3 + version: 1.0.3 typescript: specifier: ^5.7.2 version: 5.7.2 @@ -200,6 +206,9 @@ importers: react-turnstile: specifier: ^1.1.4 version: 1.1.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + rtl-detect: + specifier: ^1.1.2 + version: 1.1.2 universal-cookie: specifier: ^7.2.2 version: 7.2.2 @@ -225,6 +234,9 @@ importers: '@types/react-dom': specifier: ^19.0.2 version: 19.0.2(@types/react@19.0.1) + '@types/rtl-detect': + specifier: ^1.0.3 + version: 1.0.3 typescript: specifier: ^5.7.2 version: 5.7.2 @@ -4743,6 +4755,12 @@ packages: integrity: sha512-YW6614BDhqbpR5KtUYzTA+zlA7nayzJRA9ljz9CQoxthR0sDisYZLuvSMsil36t4EH/uAt8T52Xb4sVw17G+SQ==, } + '@types/rtl-detect@1.0.3': + resolution: + { + integrity: sha512-qpstuHivwg/HoXxRrBo5/r/OVx5M2SkqJpVu2haasdLctt+jMGHWjqdbI0LL7Rk2wRmN/UHdHK4JZg9RUMcvKA==, + } + '@types/semantic-release@17.2.11': resolution: { @@ -11788,6 +11806,12 @@ packages: integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==, } + rtl-detect@1.1.2: + resolution: + { + integrity: sha512-PGMBq03+TTG/p/cRB7HCLKJ1MgDIi07+QU1faSjiYRfmY5UsAttV9Hs08jDAHVwcOwmVLcSJkpwyfXszVjWfIQ==, + } + run-async@2.4.1: resolution: { @@ -17171,6 +17195,8 @@ snapshots: dependencies: csstype: 3.1.3 + '@types/rtl-detect@1.0.3': {} + '@types/semantic-release@17.2.11': dependencies: '@types/node': 22.10.2 @@ -22048,6 +22074,8 @@ snapshots: robust-predicates@3.0.2: {} + rtl-detect@1.1.2: {} + run-async@2.4.1: {} run-parallel@1.2.0: