Skip to content

Commit

Permalink
✨ feat(locales): Add multiple languages
Browse files Browse the repository at this point in the history
  • Loading branch information
web-ppanel committed Dec 18, 2024
1 parent a20834a commit b243ab9
Show file tree
Hide file tree
Showing 610 changed files with 23,247 additions and 9 deletions.
27 changes: 25 additions & 2 deletions apps/admin/.i18nrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
]
}
3 changes: 2 additions & 1 deletion apps/admin/app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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<Metadata> {
noStore();
Expand Down Expand Up @@ -81,7 +82,7 @@ export default async function RootLayout({ children }: { children: React.ReactNo
}

return (
<html suppressHydrationWarning lang={locale}>
<html suppressHydrationWarning lang={locale} dir={rtlDetect.getLangDir(locale)}>
<head>
<PublicEnvScript />
</head>
Expand Down
25 changes: 24 additions & 1 deletion apps/admin/config/constants.ts
Original file line number Diff line number Diff line change
@@ -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];

Expand Down
30 changes: 30 additions & 0 deletions apps/admin/locales/cs-CZ/announcement.json
Original file line number Diff line number Diff line change
@@ -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"
}
39 changes: 39 additions & 0 deletions apps/admin/locales/cs-CZ/auth.json
Original file line number Diff line number Diff line change
@@ -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"
}
60 changes: 60 additions & 0 deletions apps/admin/locales/cs-CZ/common.json
Original file line number Diff line number Diff line change
@@ -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ý"
}
50 changes: 50 additions & 0 deletions apps/admin/locales/cs-CZ/coupon.json
Original file line number Diff line number Diff line change
@@ -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"
}
29 changes: 29 additions & 0 deletions apps/admin/locales/cs-CZ/document.json
Original file line number Diff line number Diff line change
@@ -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"
}
29 changes: 29 additions & 0 deletions apps/admin/locales/cs-CZ/index.json
Original file line number Diff line number Diff line change
@@ -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"
}
24 changes: 24 additions & 0 deletions apps/admin/locales/cs-CZ/language.json
Original file line number Diff line number Diff line change
@@ -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í)"
}
18 changes: 18 additions & 0 deletions apps/admin/locales/cs-CZ/menu.json
Original file line number Diff line number Diff line change
@@ -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ů"
}
Loading

0 comments on commit b243ab9

Please sign in to comment.