Changes to migrate to BCP 47 locale standard

This commit is contained in:
Iker García Calviño
2025-07-15 12:51:26 +02:00
committed by Donald Zou
parent 084bec0f07
commit 99cb546b59
30 changed files with 787 additions and 1583 deletions

View File

@@ -1110,9 +1110,9 @@ def API_Welcome_Finish():
class Locale: class Locale:
def __init__(self): def __init__(self):
self.localePath = './static/locale/' self.localePath = './static/locales/'
self.activeLanguages = {} self.activeLanguages = {}
with open(os.path.join(f"{self.localePath}active_languages.json"), "r") as f: with open(os.path.join(f"{self.localePath}supported_locales.json"), "r") as f:
self.activeLanguages = sorted(json.loads(''.join(f.readlines())), key=lambda x : x['lang_name']) self.activeLanguages = sorted(json.loads(''.join(f.readlines())), key=lambda x : x['lang_name'])
def getLanguage(self) -> dict | None: def getLanguage(self) -> dict | None:

View File

@@ -1,127 +0,0 @@
[
{
"lang_id": "id",
"lang_name": "Bahasa Indonesia",
"lang_name_localized": "Bahasa Indonesia"
},
{
"lang_id": "zh-cn",
"lang_name": "Chinese (Simplified)",
"lang_name_localized": "中文(简体)"
},
{
"lang_id": "be",
"lang_name": "Belarusian",
"lang_name_localized": "Беларуская"
},
{
"lang_id": "ca",
"lang_name": "Catalan",
"lang_name_localized": "Català"
},
{
"lang_id": "zh-hk",
"lang_name": "Chinese (Traditional)",
"lang_name_localized": "中文(繁體)"
},
{
"lang_id": "cs",
"lang_name": "Czech",
"lang_name_localized": "Česky"
},
{
"lang_id": "nl-nl",
"lang_name": "Dutch",
"lang_name_localized": "Nederlands"
},
{
"lang_id": "ar-sa",
"lang_name": "Arabic",
"lang_name_localized": "العربية"
},
{
"lang_id": "en",
"lang_name": "English",
"lang_name_localized": "English"
},
{
"lang_id": "fa",
"lang_name": "Farsi",
"lang_name_localized": "فارسی"
},
{
"lang_id": "fr-ca",
"lang_name": "French (Quebec)",
"lang_name_localized": "Français (Québec)"
},
{
"lang_id": "fr-fr",
"lang_name": "French (France)",
"lang_name_localized": "Français (France)"
},
{
"lang_id": "de-de",
"lang_name": "German",
"lang_name_localized": "Deutsch"
},
{
"lang_id": "hu-hu",
"lang_name": "Hungarian",
"lang_name_localized": "Magyar"
},
{
"lang_id": "it-it",
"lang_name": "Italian",
"lang_name_localized": "Italiano"
},
{
"lang_id": "ja-jp",
"lang_name": "Japanese",
"lang_name_localized": "日本語"
},
{
"lang_id": "ko",
"lang_name": "Korean",
"lang_name_localized": "한국어"
},
{
"lang_id": "pl",
"lang_name": "Polish",
"lang_name_localized": "Polski"
},
{
"lang_id": "pt-br",
"lang_name": "Portuguese (Brazil)",
"lang_name_localized": "Português (Brasil)"
},
{
"lang_id": "ru",
"lang_name": "Russian",
"lang_name_localized": "Русский"
},
{
"lang_id": "es-es",
"lang_name": "Spanish",
"lang_name_localized": "Español"
},
{
"lang_id": "sv-se",
"lang_name": "Swedish",
"lang_name_localized": "Svenska"
},
{
"lang_id": "th",
"lang_name": "Thai",
"lang_name_localized": "ภาษาไทย"
},
{
"lang_id": "tr-tr",
"lang_name": "Turkish",
"lang_name_localized": "Türkçe"
},
{
"lang_id": "uk",
"lang_name": "Ukrainian",
"lang_name_localized": "Українська"
}
]

View File

@@ -1,369 +0,0 @@
{
"Welcome to": "Üdvözlünk a(z) ",
"Username": "Felhasználónév",
"Password": "Jelszó",
"OTP from your authenticator": "Egyszer használatos kód (OTP) az autentikátorodból",
"Sign In": "Bejelentkezés",
"Signing In\\.\\.\\.": "Bejelentkezés folyamatban...",
"Access Remote Server": "Távoli szerver elérése",
"Server": "Szerver",
"Click": "Kattintson",
"Pinging...": "Pingelés...",
"to add your server": "a szerver hozzáadásához",
"Server List": "Szerverlista",
"Sorry, your username or password is incorrect.": "Sajnáljuk, a felhasználónév vagy a jelszó hibás.",
"Home": "Főoldal",
"Settings": "Beállítások",
"Tools": "Eszközök",
"Sign Out": "Kijelentkezés",
"Checking for update...": "Frissítések ellenőrzése...",
"You're on the latest version": "Már a legfrissebb verziót használja",
"WireGuard Configurations": "WireGuard konfigurációk",
"You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "Még nincsenek WireGuard konfigurációi. Kérjük, ellenőrizze a konfigurációs mappát, vagy módosítsa a beállításoknál. Alapértelmezés szerint a mappa a /etc/wireguard.",
"Configuration": "Konfiguráció",
"Configurations": "Konfigurációk",
"Peers Default Settings": "Alapértelmezett társ beállítások",
"Dashboard Theme": "Vezérlőpanel téma",
"Light": "Világos",
"Dark": "Sötét",
"This will be changed globally, and will be apply to all peer's QR code and configuration file.": "Ez globálisan változik, és minden társ QR-kódjára és konfigurációs fájljára alkalmazva lesz.",
"WireGuard Configurations Settings": "WireGuard konfiguráció beállításai",
"Configurations Directory": "Konfigurációs könyvtár",
"Remember to remove / at the end of your path. e.g /etc/wireguard": "Ne felejtse el eltávolítani a '/' karaktert az útvonal végéről. (pl. /etc/wireguard)",
"WGDashboard Account Settings": "WGDashboard fiókbeállítások",
"Current Password": "Jelenlegi jelszó",
"New Password": "Új jelszó",
"Repeat New Password": "Új jelszó ismétlése",
"Update Password": "Jelszó frissítése",
"Multi-Factor Authentication \\(MFA\\)": "Többfaktoros hitelesítés (MFA)",
"Reset": "Visszaállítás",
"Setup": "Beállítás",
"API Keys": "API-kulcsok",
"API Key": "API-kulcs",
"Key": "Kulcs",
"Enabled": "Engedélyezve",
"Disabled": "Letiltva",
"No WGDashboard API Key": "Nincs WGDashboard API-kulcs",
"Expire At": "Lejár:",
"Are you sure to delete this API key\\?": "Biztosan törölni szeretné ezt az API-kulcsot?",
"Create API Key": "API-kulcs létrehozása",
"When should this API Key expire\\?": "Mikor járjon le ez az API-kulcs?",
"Never Expire": "Soha ne járjon le",
"Don't think that's a good idea": "Szerintem ez nem jó ötlet",
"Creating\\.\\.\\.": "Létrehozás...",
"Create": "Létrehozás",
"Status": "Állapot",
"On": "Bekapcsolva",
"Off": "Kikapcsolva",
"Turning On\\.\\.\\.": "Bekapcsolás...",
"Turning Off\\.\\.\\.": "Kikapcsolás...",
"Address": "Cím",
"Listen Port": "Port hallgatása",
"Table": "Táblázat",
"Public Key": "Nyilvános kulcs",
"Connected Peers": "Csatlakozott társak",
"Total Usage": "Teljes használat",
"Total Received": "Összes fogadott",
"Total Sent": "Összes elküldött",
"Peers Data Usage": "Társak adatforgalma",
"Real Time Received Data Usage": "Valós idejű fogadott forgalom",
"Real Time Sent Data Usage": "Valós idejű elküldött forgalom",
"Peer": "Társ",
"Peers": "Társak",
"Peer Settings": "Társ beállítások",
"Download All": "Összes letöltése",
"Search": "Keresés",
"Search Peers\\.\\.\\.": "Társak keresése...",
"Display": "Megjelenítés",
"Sort By": "Rendezés",
"Refresh Interval": "Frissítési időköz",
"Name": "Név",
"Allowed IPs": "Engedélyezett IP-k",
"Restricted": "Korlátozott",
"(.*) Seconds": "$1 másodperc",
"(.*) Minutes": "$1 perc",
"Configuration Settings": "Konfiguráció beállítások",
"Peer Jobs": "Társ feladatok",
"Active Jobs": "Aktív feladatok",
"All Active Jobs": "Összes aktív feladat",
"Logs": "Naplók",
"Private Key": "Privát kulcs",
"\\(Required for QR Code and Download\\)": "(Szükséges a QR-kódhoz és letöltéshez)",
"\\(Required\\)": "(Szükséges)",
"Endpoint Allowed IPs": "Végpont engedélyezett IP-k",
"DNS": "DNS",
"Optional Settings": "Opcionális beállítások",
"Pre-Shared Key": "Előre megosztott kulcs",
"MTU": "MTU",
"Persistent Keepalive": "Folyamatos keepalive",
"Reset Data Usage": "Adatforgalom visszaállítása",
"Total": "Összesen",
"Sent": "Elküldött",
"Received": "Fogadott",
"Revert": "Visszaállítás",
"Save Peer": "Társ mentése",
"QR Code": "QR-kód",
"Schedule Jobs": "Feladatok ütemezése",
"Job": "Feladat",
"Job ID": "Feladat azonosító",
"Unsaved Job": "Mentetlen feladat",
"This peer does not have any job yet\\.": "Ennek a társnak még nincs feladata.",
"if": "ha",
"is": "van",
"then": "akkor",
"larger than": "nagyobb mint",
"Date": "Dátum",
"Restrict Peer": "Társ korlátozása",
"Delete Peer": "Társ törlése",
"Edit": "Szerkesztés",
"Delete": "Törlés",
"Deleting...": "Törlés...",
"Cancel": "Mégse",
"Save": "Mentés",
"No active job at the moment\\.": "Jelenleg nincs aktív feladat.",
"Jobs Logs": "Feladatnaplók",
"Updated at": "Frissítve:",
"Refresh": "Frissítés",
"Filter": "Szűrés",
"Success": "Sikeres",
"Failed": "Sikertelen",
"Log ID": "Napló azonosító",
"Message": "Üzenet",
"Share Peer": "Társ megosztása",
"Currently the peer is not sharing": "A társ jelenleg nincs megosztva",
"Sharing\\.\\.\\.": "Megosztás...",
"Start Sharing": "Megosztás indítása",
"Stop Sharing\\.\\.\\.": "Megosztás leállítása...",
"Stop Sharing": "Megosztás leállítása",
"Access Restricted": "Hozzáférés korlátozva",
"Restrict Access": "Hozzáférés korlátozása",
"Restricting\\.\\.\\.": "Korlátozás...",
"Allow Access": "Hozzáférés engedélyezése",
"Allowing Access\\.\\.\\.": "Engedélyezés...",
"Download \\& QR Code is not available due to no private key set for this peer": "Letöltés és QR-kód nem érhető el, mert nincs beállított privát kulcs ehhez a társhoz",
"Add Peers": "Társ hozzáadása",
"Bulk Add": "Tömeges hozzáadás",
"By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "Társak tömeges hozzáadásakor minden társ neve automatikusan generálódik, és az engedélyezett IP a következő elérhető IP lesz.",
"How many peers you want to add\\?": "Hány társat szeretne hozzáadni?",
"You can add up to (.*) peers": "Legfeljebb $1 társat adhat hozzá",
"Use your own Private and Public Key": "Használja saját privát és nyilvános kulcsát",
"Enter IP Address/CIDR": "Adja meg az IP-címet/CIDR-t",
"IP Address/CIDR": "IP-cím/CIDR",
"or": "vagy",
"Pick Available IP": "Elérhető IP kiválasztása",
"No available IP containing": "Nincs elérhető IP, amely tartalmazza",
"Add": "Hozzáadás",
"Adding\\.\\.\\.": "Hozzáadás...",
"Failed to check available update": "Nem sikerült ellenőrizni a frissítéseket",
"Nice to meet you!": "Örülök, hogy megismerhetlek!",
"Please fill in the following fields to finish setup": "Töltse ki az alábbi mezőket a beállítás befejezéséhez",
"Create an account": "Fiók létrehozása",
"Enter an username you like": "Adja meg a kívánt felhasználónevet",
"Enter a password": "Adja meg a jelszót",
"\\(At least 8 characters and make sure is strong enough!\\)": "(Legalább 8 karakter, és legyen elég erős!)",
"Confirm password": "Jelszó megerősítése",
"Next": "Tovább",
"Saving\\.\\.\\.": "Mentés...",
"1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. Kérjük, olvassa be az alábbi QR-kódot, hogy TOTP-t generáljon az Ön által választott autentikátorral",
"Or you can click the link below:": "Vagy kattintson az alábbi hivatkozásra:",
"2\\. Enter the TOTP generated by your authenticator to verify": "2. Adja meg az autentikátor által generált TOTP-t a megerősítéshez",
"TOTP verified!": "TOTP sikeresen ellenőrizve!",
"I don't need MFA": "Nincs szükségem MFA-ra",
"Complete": "Befejezés",
"(v[0-9.]{1,}) is now available for update!": "$1 frissíthető!",
"Current Version:": "Jelenlegi verzió:",
"Oh no\\.\\.\\. This link is either expired or invalid\\.": "Hoppá... Ez a hivatkozás lejárt vagy érvénytelen.",
"Scan QR Code with the WireGuard App to add peer": "Olvassa be a QR-kódot a WireGuard alkalmazással a társ hozzáadásához",
"or click the button below to download the ": "vagy kattintson az alábbi gombra a letöltéshez: ",
" file": " fájl",
"FROM ": "FORRÁS: ",
"(.*) is on": "$1 be van kapcsolva",
"(.*) is off": "$1 ki van kapcsolva",
"Allowed IPs is invalid": "Az engedélyezett IP-k érvénytelenek",
"Peer created successfully": "A társ sikeresen létrejött",
"Please fill in all required box": "Töltse ki az összes kötelező mezőt",
"Please specify amount of peers you want to add": "Adja meg, hány társat szeretne hozzáadni",
"No more available IP can assign": "Nincs több elérhető IP kiosztható",
"The maximum number of peers can add is (.*)": "A hozzáadható társak maximális száma: $1",
"Generating key pairs by bulk failed": "Nem sikerült tömegesen kulcspárokat generálni",
"Failed to add peers in bulk": "Nem sikerült tömegesen hozzáadni a társakat",
"This peer already exist": "Ez a társ már létezik",
"This IP is not available: (.*)": "Ez az IP nem elérhető: $1",
"Configuration does not exist": "A konfiguráció nem létezik",
"Peer does not exist": "A társ nem létezik",
"Please provide a valid configuration name": "Adjon meg érvényes konfigurációs nevet",
"Peer saved": "A társ mentve",
"Allowed IPs already taken by another peer": "Az engedélyezett IP-ket már egy másik társ foglalta le",
"Endpoint Allowed IPs format is incorrect": "A végpont engedélyezett IP-k formátuma helytelen",
"DNS format is incorrect": "A DNS formátum helytelen",
"MTU format is not correct": "Az MTU formátuma helytelen",
"Persistent Keepalive format is not correct": "A folyamatos keepalive formátuma helytelen",
"Private key does not match with the public key": "A privát kulcs nem egyeztethető a nyilvános kulccsal",
"Update peer failed when updating Pre-Shared Key": "A társ frissítése sikertelen volt az előre megosztott kulcs frissítésekor",
"Update peer failed when updating Allowed IPs": "A társ frissítése sikertelen volt az engedélyezett IP-k frissítésekor",
"Update peer failed when saving the configuration": "A társ frissítése sikertelen volt a konfiguráció mentésekor",
"Peer data usage reset successfully": "A társ adatforgalma sikeresen visszaállítva",
"Peer download started": "A társ letöltése elindult",
"Please specify one or more peers": "Jelöljön ki egy vagy több társat",
"Share link failed to create. Reason: (.*)": "Nem sikerült létrehozni a megosztási hivatkozást. Ok: $1",
"Link expire date updated": "A hivatkozás lejárati dátuma frissítve",
"Link expire date failed to update. Reason: (.*)": "A hivatkozás lejárati dátumának frissítése sikertelen. Ok: $1",
"Peer job saved": "A társ feladata mentve",
"Please specify job": "Adja meg a feladatot",
"Please specify peer and configuration": "Jelölje ki a társat és a konfigurációt",
"Peer job deleted": "A társ feladata törölve",
"API Keys function is successfully enabled": "Az API-kulcs funkció sikeresen engedélyezve",
"API Keys function is successfully disabled": "Az API-kulcs funkció sikeresen letiltva",
"API Keys function is failed to enable": "Az API-kulcs funkció engedélyezése sikertelen",
"API Keys function is failed to disable": "Az API-kulcs funkció letiltása sikertelen",
"WGDashboard API Keys function is disabled": "A WGDashboard API-kulcs funkció letiltva",
"WireGuard configuration path saved": "A WireGuard konfigurációs útvonal mentve",
"API Key deleted": "API-kulcs törölve",
"API Key created": "API-kulcs létrehozva",
"Sign in session ended, please sign in again": "A bejelentkezés lejárt, kérjük jelentkezzen be újra",
"Please specify an IP Address (v4/v6)": "Adjon meg egy IP-címet (v4/v6)",
"Please provide ipAddress and count": "Adja meg az IP-címet és a darabszámot",
"Please provide ipAddress": "Adja meg az IP-címet",
"Dashboard Language": "Vezérlőpanel nyelv",
"Dashboard language update failed": "A vezérlőpanel nyelvének frissítése sikertelen",
"Peer Remote Endpoint": "Társ távoli végpontja",
"New Configuration": "Új konfiguráció",
"Configuration Name": "Konfiguráció neve",
"Configuration name is invalid. Possible reasons:": "A konfiguráció neve érvénytelen. Lehetséges okok:",
"Configuration name already exist\\.": "A konfiguráció neve már létezik.",
"Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "A konfiguráció neve csak 15 kis- vagy nagybetűt, számokat, alulvonást, egyenlőségjelet, pluszjelet, pontot és kötőjelet tartalmazhat.",
"Invalid Port": "Érvénytelen port",
"Save Configuration": "Konfiguráció mentése",
"IP Address/CIDR is invalid": "Az IP-cím/CIDR érvénytelen",
"IP Address": "IP-cím",
"Enter IP Address / Hostname": "Adja meg az IP-címet / hosztnevet",
"IP Address / Hostname": "IP-cím / hosztnév",
"Dashboard IP Address \\& Listen Port": "Vezérlőpanel IP-cím és hallgató port",
"Count": "Darabszám",
"Hop": "Ugrás",
"Average RTT \\(ms\\)": "Átlagos RTT (ms)",
"Min RTT \\(ms\\)": "Minimum RTT (ms)",
"Max RTT \\(ms\\)": "Maximum RTT (ms)",
"Geolocation": "Földrajzi hely",
"Is Alive": "Élő?",
"Average / Min / Max Round Trip Time": "Átlagos / min / max oda-vissza idő",
"Sent / Received / Lost Package": "Elküldött / fogadott / elveszett csomag",
"Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "A WGDashboard kézi újraindítása szükséges az IP-cím és a portváltoztatások alkalmazásához",
"Restore Configuration": "Konfiguráció visszaállítása",
"Step (.*)": "Lépés $1",
"Select a backup you want to restore": "Válasszon egy visszaállítandó biztonsági másolatot",
"Click to change a backup": "Kattintson a biztonsági mentés megváltoztatásához",
"Selected Backup": "Kiválasztott mentés",
"You don't have any configuration to restore": "Nincs visszaállítandó konfigurációja",
"Help": "Súgó",
"You can visit our: ": "Látogasson el ide:",
"Official Documentation": "Hivatalos dokumentáció",
"Discord Server": "Discord szerver",
"Backup": "Biztonsági mentés",
"([0-9].*) Backups\\?": "$1 mentés?",
"Yes": "Igen",
"No": "Nem",
"Backup not selected": "Nincs kiválasztva mentés",
"Confirm \\& edit restore information": "Visszaállítási információk megerősítése és szerkesztése",
"(.*) Available IP Address": "$1 elérhető IP-cím",
"Database File": "Adatbázis fájl",
"Contain": "Tartalmaz",
"Restricted Peers\\?": "Korlátozott társak?",
"Restore": "Visszaállítás",
"Restoring": "Visszaállítás folyamatban",
"WGDashboard Settings": "WGDashboard beállítások",
"Peers Settings": "Társ beállítások",
"WireGuard Configuration Settings": "WireGuard konfiguráció beállítások",
"Appearance": "Megjelenés",
"Theme": "Téma",
"Language": "Nyelv",
"Account Settings": "Fiókbeállítások",
"Peer Default Settings": "Társ alapértelmezett beállítások",
"Toggle When Start Up": "Indításkor törlése",
"Other Settings": "Egyéb beállítások",
"Select Peers": "Társak kiválasztása",
"Backup & Restore": "Mentés és visszaállítás",
"Delete Configuration": "Konfiguráció törlése",
"Create Backup": "Biztonsági mentés létrehozása",
"No backup yet, click the button above to create backup\\.": "Még nincs mentés, kattintson a fenti gombra a mentés létrehozásához.",
"Are you sure to delete this backup\\?": "Biztosan törölni szeretné ezt a mentést?",
"Are you sure to restore this backup\\?": "Biztosan visszaállítja ezt a mentést?",
"Backup Date": "Mentés dátuma",
"File": "Fájl",
"Are you sure to delete this configuration\\?": "Biztosan törölni szeretné ezt a konfigurációt?",
"Once you deleted this configuration\\:": "Ha törli ezt a konfigurációt:",
"All connected peers will get disconnected": "Minden kapcsolódott társ le lesz választva",
"Both configuration file \\(.conf\\) and database table related to this configuration will get deleted": "A konfigurációhoz tartozó .conf fájl és adatbázis tábla is törlődik",
"Checking backups...": "Mentések ellenőrzése...",
"This configuration have ([0-9].*) backups": "Ennél a konfigurációnál $1 mentés van",
"This configuration have no backup": "Ennél a konfigurációnál nincs mentés",
"If you're sure, please type in the configuration name below and click Delete": "Ha biztos, írja be a konfiguráció nevét alább, és kattintson a Törlésre",
"Select All": "Összes kiválasztása",
"Clear Selection": "Kiválasztás törlése",
"([0-9].*) Peers\\?": "$1 társ?",
"Download": "Letöltés",
"Downloading": "Letöltés...",
"Download Finished": "Letöltés befejezve",
"Done": "Kész",
"Are you sure to delete": "Biztosan törölni szeretné",
"Are you sure to delete this peer\\?": "Biztosan törölni szeretné ezt a társat?",
"Configuration deleted": "Konfiguráció törölve",
"Configuration saved": "Konfiguráció mentve",
"WGDashboard language update failed": "A WGDashboard nyelvének frissítése sikertelen",
"Configuration restored": "Konfiguráció visszaállítva",
"Allowed IP already taken by another peer": "Az engedélyezett IP-t már egy másik társ használja",
"Failed to allow access of peer (.*)": "Nem sikerült engedélyezni a hozzáférést a társ számára: $1",
"Failed to save configuration through WireGuard": "Nem sikerült menteni a konfigurációt WireGuardon keresztül",
"Allow access successfully": "Hozzáférés sikeresen engedélyezve",
"Deleted ([0-9]{1,}) peer\\(s\\)": "Törölve $1 társ",
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "Sikeresen törölve $1 társ. $2 társ törlése sikertelen",
"Restricted ([0-9]{1,}) peer\\(s\\)": "Korlátozva $1 társ",
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Sikeresen korlátozva $1 társ. $2 társ korlátozása sikertelen",
"Display As": "Megjelenítés",
"List": "Lista",
"Grid": "Rács",
"Protocol": "Protokoll",
"Open File": "Fájl megnyitása",
"Advanced Options": "Haladó beállítások",
"Allowed IPs Validation": "Engedélyezett IP-k érvényesítése",
"Update Name": "Név frissítése",
"To update this configuration's name, WGDashboard will execute the following operations:": "A konfiguráció nevének frissítéséhez a WGDashboard a következő műveleteket hajtja végre:",
"Duplicate current configuration's database table and \\..\\.conf file with the new name": "A jelenlegi konfiguráció adatbázis táblájának és .conf fájljának másolása az új névvel",
"Delete current configuration's database table and \\..\\.conf file": "A jelenlegi konfiguráció adatbázis táblájának és .conf fájljának törlése",
"Danger Zone": "Veszélyes zóna",
"Configuration File": "Konfigurációs fájl",
"Edit Raw Configuration File": "Nyers konfigurációs fájl szerkesztése",
"Peer Configuration File": "Társ konfigurációs fájl",
"Share with Email": "Megosztás e-mailben",
"Email Account": "E-mail fiók",
"Ready": "Kész",
"Port": "Port",
"Encryption": "Titkosítás",
"No Encryption": "Nincs titkosítás",
"Send From": "Feladó",
"Send Test Email": "Teszt e-mail küldése",
"Email Body Template": "E-mail törzs sablon",
"Live Preview": "Élő előnézet",
"Include configuration file as an attachment": "Konfigurációs fájl mellékletként csatolása",
"Send": "Küldés",
"Sending\\.\\.\\.": "Küldés...",
"Email sent successfully!": "Az e-mail sikeresen elküldve!",
"AmneziaWG Peer Setting": "AmneziaWG társ beállítás",
"System Status": "Rendszerállapot",
"CPU": "CPU",
"Memory": "Memória",
"Swap Memory": "Swap memória",
"Processes": "Folyamatok",
"CPU Usage": "CPU használat",
"Memory Usage": "Memória használat",
"Swap Memory Usage": "Swap memória használat",
"Network": "Hálózat",
"([0-9]{1,}) Interfaces": "$1 interfész",
"Storage": "Tároló",
"([0-9]{1,}) Partitions": "$1 partíció",
"(.*) Used": "$1 használva",
"Untitled Peer": "Névtelen társ",
"Who are you sending to\\?": "Kinek küldi?",
"What\\'s the subject\\?": "Mi a tárgy?",
"What\\'s the body\\?": "Mi a szövegtörzs?"
}

View File

@@ -1,361 +0,0 @@
{
"Welcome to": "Selamat Datang di",
"Username": "Nama Pengguna",
"Password": "Kata Sandi",
"OTP from your authenticator": "OTP dari autentikator Anda",
"Sign In": "Masuk",
"Signing In\\.\\.\\.": "Masuk...",
"Access Remote Server": "Akses Server Remot",
"Server": "server",
"Click": "Klik",
"Pinging...": "Pinging...",
"to add your server": "untuk menambahkan server Anda",
"Server List": "Daftar Server",
"Sorry, your username or password is incorrect.": "Maaf, nama pengguna atau kata sandi Anda salah",
"Home": "Beranda",
"Settings": "Pengaturan",
"Tools": "Peralatan",
"Sign Out": "Keluar",
"Checking for update...": "Memeriksa Pembaruan...",
"You're on the latest version": "Anda berada pada versi paling baru",
"WireGuard Configurations": "Konfigurasi WireGuard",
"You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "Anda belum memiliki konfigurasi WireGuard. Mohon periksa folder konfigurasi atau ubah di Pengaturan. Secara bawaan folder nya adalah /etc/wireguard.",
"Configuration": "Konfigurasi",
"Configurations": "Konfigurasi",
"Peers Default Settings": "Pengaturan Bawaan Peers",
"Dashboard Theme": "Tema Dasbor",
"Light": "Terang",
"Dark": "Gelap",
"This will be changed globally, and will be apply to all peer's QR code and configuration file.": "Perubahan ini akan di ubah secara global, dan akan berlaku ke semua kode QR peer dan file konfigurasi.",
"WireGuard Configurations Settings": "Pengaturan Konfigurasi WireGuard",
"Configurations Directory": "Direktori Konfigurasi",
"Remember to remove / at the end of your path. e.g /etc/wireguard": "Jangan lupa untuk menghapus / di akhir path Anda. Contoh /etc/wireguard",
"WGDashboard Account Settings": "Pengaturan Akun WGDashboard",
"Current Password": "Kata Sandi Saat Ini",
"New Password": "Kata Sandi Baru",
"Repeat New Password": "Ulangi Kata Sandi Baru",
"Update Password": "Perbarui Kata Sandi",
"Multi-Factor Authentication \\(MFA\\)": "Autentikasi Multi-Faktor (MFA)",
"Reset": "Atur Ulang",
"Setup": "Pengaturan",
"API Keys": "Kunci API",
"API Key": "Kunci API",
"Key": "Kunci",
"Enabled": "Diaktifkan",
"Disabled": "Dimatikan",
"No WGDashboard API Key": "Tidak Ada Kunci API WGDashboard",
"Expire At": "Kedaluwarsa pada",
"Are you sure to delete this API key\\?": "Apa Anda yakin ingin menghapus kunci API berikut?",
"Create API Key": "Buat Kunci API",
"When should this API Key expire\\?": "Kapan kunci API berikut kedaluwarsa?",
"Never Expire": "Tidak Pernah Kedaluwarsa",
"Don't think that's a good idea": "Sepertinya itu bukan ide yang bagus",
"Creating\\.\\.\\.": "Membuat...",
"Create": "Buat",
"Status": "Keadaan",
"On": "Aktif",
"Off": "Mati",
"Turning On\\.\\.\\.": "Mengaktifkan...",
"Turning Off\\.\\.\\.": "Mematikan...",
"Address": "Alamat",
"Listen Port": "Mendengarkan Port",
"Public Key": "Kunci Publik",
"Connected Peers": "Peers Terhubung",
"Total Usage": "Penggunaan Total",
"Total Received": "Total Diterima",
"Total Sent": "Total Dikirim",
"Peers Data Usage": "Penggunaan Data Peers",
"Real Time Received Data Usage": "Waktu Nyata Menerima Penggunaan Data",
"Real Time Sent Data Usage": "Waktu Nyata Mengirim Penggunaan Data",
"Peer": "Peer",
"Peers": "Peers",
"Peer Settings": "Pengaturan Peer",
"Download All": "Unduh Semua",
"Search": "Cari",
"Search Peers\\.\\.\\.": "Cari Peer...",
"Display": "Tampilan",
"Sort By": "Urutkan",
"Refresh Interval": "Memperbarui Interval",
"Name": "Nama",
"Allowed IPs": "Allowed IPs",
"Restricted": "Terbatas",
"(.*) Seconds": "$1 Detik",
"(.*) Minutes": "$1 Menit",
"Configuration Settings": "Pengaturan Konfigurasi",
"Peer Jobs": "Pekerjaan Peer",
"Active Jobs": "Pekerjaan Aktif",
"All Active Jobs": "Semua Pekerjaan Aktif",
"Logs": "Log",
"Private Key": "Kunci Pribadi",
"\\(Required for QR Code and Download\\)": "(Diperlukan untuk Kode QR dan Unduh)",
"\\(Required\\)": "Diperlukan",
"Endpoint Allowed IPs": "Endpoint IP Allowed IPs",
"DNS": "DNS",
"Optional Settings": "Pengaturan Opsional",
"Pre-Shared Key": "Kunci Pra-Berbagi",
"MTU": "MTU",
"Persistent Keepalive": "Persistent Keepalive",
"Reset Data Usage": "Atur Ulang Penggunaan Data",
"Total": "Total",
"Sent": "Dikirim",
"Received": "Diterima",
"Revert": "Kembalikan",
"Save Peer": "Simpan Peer",
"QR Code": "Kode QR",
"Schedule Jobs": "Jadwalkan Pekerjaan",
"Job": "Pekerjaan",
"Job ID": "ID Pekerjaan",
"Unsaved Job": "Pekerjaan yang belum Tersimpan",
"This peer does not have any job yet\\.": "Peer ini belum memiliki pekerjaan",
"if": "jika",
"is": "adalah",
"then": "maka",
"larger than": "lebih besar dari",
"Date": "Tanggal",
"Restrict Peer": "Batasi Peer",
"Delete Peer": "Hapus Peer",
"Edit": "Ubah",
"Delete": "Hapus",
"Deleting...": "Menghapus...",
"Cancel": "Batal",
"Save": "Simpan",
"No active job at the moment\\.": "Tidak ada pekerjaan aktif untuk saat ini.",
"Jobs Logs": "Log Pekerjaan",
"Updated at": "Diperbarui pada",
"Refresh": "Perbarui",
"Filter": "Penyaring",
"Success": "Sukses",
"Failed": "Gagal",
"Log ID": "ID Log",
"Message": "Pesan",
"Share Peer": "Membagikan Peer",
"Currently the peer is not sharing": "Saat ini peer tidak berbagi",
"Sharing\\.\\.\\.": "Membagikan...",
"Start Sharing": "Mulai Membagikan",
"Stop Sharing\\.\\.\\.": "Berhenti Membagikan...",
"Stop Sharing": "Berhenti Membagikan",
"Access Restricted": "Akses Terbatas",
"Restrict Access": "Batasi Akses",
"Restricting\\.\\.\\.": "Membatasi...",
"Allow Access": "Izinkan Akses",
"Allowing Access\\.\\.\\.": "Mengizinkan Akses...",
"Download \\& QR Code is not available due to no private key set for this peer": "Unduh & Kode QR tidak tersedia karena kunci pribadi tidak di atur untuk peer ini",
"Add Peers": "Tambah Peers",
"Bulk Add": "Tambah Massal",
"By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "Dengan menambahkan peers secara massal, setiap nama peer akan dibuat secara otomatis, dan Allowed IP akan ditetapkan ke IP berikutnya yang tersedia.",
"How many peers you want to add\\?": "Berapa banyak peers yang ingin Anda tambah?",
"You can add up to (.*) peers": "Anda dapat menambahkan sebanyak $1 peers",
"Use your own Private and Public Key": "Gunakan kunci pribadi dan kunci publik milik Anda",
"Enter IP Address/CIDR": "Masukkan Alamat IP/CIDR",
"IP Address/CIDR": "Alamat IP/CIDR",
"or": "atau",
"Pick Available IP": "Pilih IP yang Tersedia",
"No available IP containing": "Tidak ada IP yang Tersedia yang memiliki",
"Add": "Tambah",
"Adding\\.\\.\\.": "Menambahkan...",
"Failed to check available update": "Gagal untuk memeriksa pembaruan yang tersedia",
"Nice to meet you!": "Senang bertemu dengan Anda!",
"Please fill in the following fields to finish setup": "Silakan isi kolom berikut untuk menyelesaikan pengaturan",
"Create an account": "Buat akun baru",
"Enter an username you like": "Masukkan nama pengguna yang Anda sukai",
"Enter a password": "Masukkan kata sandi",
"\\(At least 8 characters and make sure is strong enough!\\)": "(Setidaknya 8 karakter dan pastikan cukup kuat!)",
"Confirm password": "Konfirmasi kata sandi",
"Next": "Lanjut",
"Saving\\.\\.\\.": "Menyimpan...",
"1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. Silakan pindai Kode QR berikut untuk menghasilkan TOTP dengan pilihan autentikator Anda",
"Or you can click the link below:": "Atau Anda bisa klik tautan di bawah",
"2\\. Enter the TOTP generated by your authenticator to verify": "2. Masukkan TOTP yang dihasilkan oleh autentikator anda untuk verifikasi",
"TOTP verified!": "TOTP terverifikasi!",
"I don't need MFA": "Saya tidak membutuhkan MFA",
"Complete": "Selesai",
"(v[0-9.]{1,}) is now available for update!": "v$1 telah tersedia untuk pembaruan!",
"Current Version:": "Versi Saat Ini:",
"Oh no\\.\\.\\. This link is either expired or invalid\\.": "Oh tidak... Tautan ini sudah kedaluwarsa atau salah.",
"Scan QR Code with the WireGuard App to add peer": "Pindai Kode QR menggunakan Aplikasi WireGuard untuk menambahkan peer",
"or click the button below to download the ": "atau klik tomboh di bawah untuk mengunduh",
" file": " file",
"FROM ": "DARI",
"(.*) is on": "$1 aktif",
"(.*) is off": "$1 mati",
"Allowed IPs is invalid": "Allowed IPs salah",
"Peer created successfully": "Peer berhasil terbuat",
"Please fill in all required box": "Silakan isi semua kolom diperlukan",
"Please specify amount of peers you want to add": "Silakan tentukan jumlah peers yang ingin Anda tambahkan",
"No more available IP can assign": "Tidak ada lagi IP yang tersedia yang dapat ditetapkan",
"The maximum number of peers can add is (.*)": "Jumlah maksimal peers yang dapat ditambahkan adalah $1",
"Generating key pairs by bulk failed": "Gagal menghasilkan pasangan kunci secara massal",
"Failed to add peers in bulk": "Gagal untuk menambahkan peers secara massal",
"This peer already exist": "Peer ini sudah ada",
"This IP is not available: (.*)": "IP ini sudah tidak tersedia: $1",
"Configuration does not exist": "Konfigurasi tidak ada",
"Peer does not exist": "Peer tidak ada",
"Please provide a valid configuration name": "Harap berikan nama konfigurasi yang benar",
"Peer saved": "Peer tersimpan",
"Allowed IPs already taken by another peer": "Allowed IPs sudah diambil oleh peer lain",
"Endpoint Allowed IPs format is incorrect": "Bentuk Endpoint Allowed IPs tidak tepat",
"DNS format is incorrect": "Bentuk DNS tidak tepat",
"MTU format is not correct": "Bentuk MTU tidak tepat",
"Persistent Keepalive format is not correct": "Bentuk Persistent Keepalive tidak tepat",
"Private key does not match with the public key": "Kunci pribadi tidak cocok dengan kunci publik",
"Update peer failed when updating Pre-Shared Key": "Pembaruan peer gagal saat memperbarui Kunci Pra-Berbagi",
"Update peer failed when updating Allowed IPs": "Pembaruan peer gagal saat memperbarui Allowed IPs",
"Update peer failed when saving the configuration": "Pembaruan peer gagal saat menyimpan konfigurasi",
"Peer data usage reset successfully": "Penggunaan data peer berhasi di atur ulang",
"Peer download started": "Unduh peer dimulai",
"Please specify one or more peers": "Silakan tentukan satu atau lebih peer",
"Share link failed to create. Reason: (.*)": "Tautan berbagi gagal dibuat. Alasan: $1",
"Link expire date updated": "Tanggal kedaluwarsa tautan diperbarui",
"Link expire date failed to update. Reason: (.*)": "Tanggal kedaluwarsa tautan gagal diperbarui. Alasan: $1",
"Peer job saved": "Pekerjaan peer tersimpan",
"Please specify job": "Silakan tentukan pekerjaan",
"Please specify peer and configuration": "Silakan tentukan peer dan konfigurasi",
"Peer job deleted": "Pekerjaan peer terhapus",
"API Keys function is successfully enabled": "Fungsi Kunci API berhasil diaktifkan",
"API Keys function is successfully disabled": "Fungsi Kunci API berhasil dimatikan",
"API Keys function is failed to enable": "Fungsi Kunci API gagal diaktifkan",
"API Keys function is failed to disable": "Fungsi Kunci API gagal dimatikan",
"WGDashboard API Keys function is disabled": "Fungsi Kunci API WGDashboard dimatikan",
"WireGuard configuration path saved": "path konfigurasi WireGuard tersimpan",
"API Key deleted": "Kunci API terhapus",
"API Key created": "Kunci API terbuat",
"Sign in session ended, please sign in again": "Sesi masuk berakhir, silakan masuk kembali",
"Please specify an IP Address (v4/v6)": "Silakan tentukan alamat IP (v4/v6)",
"Please provide ipAddress and count": "Harap berikan Alamat IP dan count",
"Please provide ipAddress": "Harap berikan Alamat IP",
"Dashboard Language": "Bahasa Dasbor",
"Dashboard language update failed": "Pembaruan bahasa dasbor gagal",
"Peer Remote Endpoint": "Endpoint Remot Peer",
"New Configuration": "Konfigurasi Baru",
"Configuration Name": "Nama Konfigurasi",
"Configuration name is invalid. Possible reasons:": "Nama konfigurasi salah. Kemungkinan alasan:",
"Configuration name already exist\\.": "Nama konfigurasi sudah ada.",
"Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "Nama konfigurasi hanya bisa memiliki 15 huruf kecil/ huruf besar alfabet, angka, underscore, simbol sama dengan, simbol tambah, titik dan tanda penghubung.",
"Invalid Port": "Port Salah",
"Save Configuration": "Simpan Konfigurasi",
"IP Address/CIDR is invalid": "Alamat IP/CIDR salah",
"IP Address": "Alamat IP",
"Enter IP Address / Hostname": "Masukkan Alamat IP / Nama Host",
"IP Address / Hostname": "Alamat IP / Nama Host",
"Dashboard IP Address \\& Listen Port": "Alamat IP & Mendengarkan Port Dasbor",
"Count": "Count",
"Geolocation": "Lokasi Geografis",
"Is Alive": "Masih Hidup",
"Average / Min / Max Round Trip Time": "Rata - rata / Min / Maks Round Trip Time",
"Sent / Received / Lost Package": "Terkirim / Diterima / Paket Hilang",
"Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "Memulai ulang WGDashboard dibutuhkan untuk menerapkan perubahan pada Alamat IP dan Mendengarkan Port",
"Restore Configuration": "Pulihkan Konfigurasi",
"Step (.*)": "Step $1",
"Select a backup you want to restore": "Pilih cadangan yang ingin dipulihkan",
"Click to change a backup": "Klik untuk mengganti cadangan",
"Selected Backup": "Cadangan yang dipilih",
"You don't have any configuration to restore": "Anda tidak memiliki konfigurasi untuk dipulihkan",
"Help": "Tolong",
"Backup": "Cadangan",
"([0-9].*) Backups?": "$1 Cadangan?",
"Yes": "Ya",
"No": "Tidak",
"Backup not selected": "Cadangan belum dipilih",
"Confirm \\& edit restore information": "Konfirmasi & ubah informasi pemulihan",
"(.*) Available IP Address": "$1 Alamat IP Tersedia",
"Database File": "File Basis Data",
"Contain": "Memiliki",
"Restricted Peers?": "Peers Terbatas?",
"Restore": "Pemulihan",
"Restoring": "Memulihkan",
"WGDashboard Settings": "Pengaturan WGDashboard",
"Peers Settings": "Pengaturan Peers",
"WireGuard Configuration Settings": "Pengaturan Konfigurasi WireGuard",
"Appearance": "Penampilan",
"Theme": "Tema",
"Language": "Bahasa",
"Account Settings": "Pengaturan Akun",
"Peer Default Settings": "Pengaturan Bawaan Peer",
"Toggle When Start Up": "Beralih Kapan Memulai",
"Other Settings": "Pengaturan Lainnya",
"Select Peers": "Pilih Peers",
"Backup & Restore": "Cadangan & Pemulihan",
"Delete Configuration": "Hapus Konfigurasi",
"Create Backup": "Buat Cadangan",
"No backup yet, click the button above to create backup\\.": "Belum ada cadangan, klik tombol di atas untuk membuat cadangan.",
"Are you sure to delete this backup\\?": "Apakah Anda yakin untuk menghaus cadangan ini?",
"Are you sure to restore this backup?\\": "Apakah Anda yakin untuk memulihkan cadangan ini?",
"Backup Date": "Tanggal Cadangan",
"File": "File",
"Are you sure to delete this configuration\\?": "Apakah Anda yakin untuk menghapus konfigurasi ini?",
"Once you deleted this configuration\\:": "Setelah Anda menghapus konfigurasi ini:",
"All connected peers will get disconnected": "Semua peers yang terhubung akan terputus",
"Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "File Konfigurasi (.conf) dan tabel basis data yang terkait dengan konfigurasi ini akan terhapus",
"Checking backups...": "Memeriksa cadangan...",
"This configuration have ([0-9].*) backups": "Konfigurasi ini memiliki $1 cadangan",
"This configuration have no backup": "Konfigurasi ini tidak memiliki cadangan",
"If you're sure, please type in the configuration name below and click Delete": "Jika Anda yakin, silakan ketik nama konfigurasi dibawah dan klik Hapus",
"Select All": "Pilih Semua",
"Clear Selection": "Hapus Pilihan",
"([0-9].*) Peers?": "$1 Peers?",
"Download": "Unduh",
"Downloading": "Mengunduh",
"Download Finished": "Unduh Selesai",
"Done": "Selesai",
"Are you sure to delete": "Apakah Anda yakin untuk menghapus",
"Are you sure to delete this peer\\?": "Apakah Anda yakin untuk menghapus peer ini?",
"Configuration deleted": "Konfigurasi terhapus",
"Configuration saved": "Konfigurasi tersimpan",
"WGDashboard language update failed": "Pembaruan bahasa WGDashboard gagal",
"Configuration restored": "Konfigurasi terpulihkan",
"Allowed IP already taken by another peer": "Allowed IP telah digunakan oleh peer lain",
"Failed to allow access of peer (.*)": "Gagal untuk mengizinkan akses ke peer $1",
"Failed to save configuration through WireGuard": "Gagal untuk menyimpan konfigurasi melalui WireGuard",
"Allow access successfully": "Berhasil mengizinkan akses",
"Deleted ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) terhapus",
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) berhasil terhapus. Gagal untuk menghapus $2 peer(s)",
"Restricted ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) terbatas",
"Display As": "Tampilkan Sebagai",
"List": "Daftar",
"Grid": "Kisi",
"Protocol": "Protokol",
"Open File": "Buka File",
"Advanced Options": "Opsi Lanjutan",
"Allowed IPs Validation": "Validasi Allowed IPs",
"Update Name": "Pembaruan Nama",
"To update this configuration's name, WGDashboard will execute the following operations:": "Untuk memperbarui konfigurasi nama berikut, WGDashboard akan mengeksekusi operasi berikut:",
"Duplicate current configuration's database table and \\.conf file with the new name": "Duplikat konfigurasi tabel basis data saat ini dan file .conf dengan nama baru",
"Delete current configuration's database table and \\.conf file": "Hapus konfigurasi tabel basis data saat ini dan file .conf",
"Danger Zone": "Zona Berbahaya",
"Configuration File": "File Konfigurasi",
"Edit Raw Configuration File": "Edit File Konfigurasi Mentah",
"Peer Configuration File": "File Konfigurasi Peer",
"Share with Email": "Berbagi dengan Email",
"Who are you sending to?": "Anda ingin kirim ke siapa?",
"What's the subject?": "Apa subjeknya?",
"What's the body?": "Apa isiannya?",
"Email Account": "Akun Email",
"Ready": "Siap",
"Port": "Port",
"Encryption": "Enkripsi",
"No Encryption": "Tidak Ada Enkripsi",
"Send From": "Kirim Dari",
"Send Test Email": "Kirim Email Tes",
"Email Body Template": "Template Isi Email",
"Live Preview": "Pratinjau Langsung",
"Include configuration file as an attachment": "Sertakan file konfigurasi sebagai lampiran",
"Send": "Kirim",
"Sending\\.\\.\\.": "Mengirim...",
"Email sent successfully!": "Email berhasil terkirim!",
"AmneziaWG Peer Setting": "Pengaturan Peer AmneziaWG",
"System Status": "Keadaan Sistem",
"CPU": "CPU",
"Memory": "Memori",
"Swap Memory": "Memori Swap",
"Processes": "Proses",
"CPU Usage": "Penggunaan CPU",
"Memory Usage": "Penggunaan Memori",
"Swap Memory Usage": "Penggunaan Memori Swap",
"Network": "Jaringan",
"([0-9]{1,}) Interfaces": "$1 Antarmuka",
"Storage": "Penyimpanan",
"([0-9]{1,}) Partitions": "$1 Partisi",
"(.*) Used": "$1 terpakai",
"Untitled Peer": "Peer Tanpa Judul",
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) berhasil terbatas. Gagal untuk membatasi $2 peer(s)"
}

View File

@@ -1,369 +0,0 @@
{
"Welcome to": "Bem vindo ao",
"Username": "Usuário",
"Password": "Senha",
"OTP from your authenticator": "Senha de uso único do seu autenticador",
"Sign In": "Entrar",
"Signing In\\.\\.\\.": "Entrando...",
"Access Remote Server": "Acessar Servidor Remoto",
"Server": "Servidor",
"Click": "Clique",
"Pinging...": "Ping em andamento...",
"to add your server": "para adicionar seu servidor",
"Server List": "Lista de Servidores",
"Sorry, your username or password is incorrect.": "Desculpe, seu usuário ou senha está incorreto.",
"Home": "Página principal",
"Settings": "Definições",
"Tools": "Ferramentas",
"Sign Out": "Sair",
"Checking for update...": "Verificando atualizações...",
"You're on the latest version": "Você está na versão mais recente",
"WireGuard Configurations": "Cofigurações do WireGuard",
"You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "Você ainda não tem nenhuma configuração do WireGuard. Verifique a pasta de configurações ou altere-a nas Definições. Por padrão, a pasta é /etc/wireguard.",
"Configuration": "Configuração",
"Configurations": "Configurações",
"Peers Default Settings": "Definições Padrão dos Peers",
"Dashboard Theme": "Tema do Painel",
"Light": "Claro",
"Dark": "Escuro",
"This will be changed globally, and will be apply to all peer's QR code and configuration file.": "Estes itens serão alterados globalmente, e serão aplicados a todos os QR codes e arquivos de configuração dos peers.",
"WireGuard Configurations Settings": "Definições de Configurações do WireGuard",
"Configurations Directory": "Diretório de Configurações",
"Remember to remove / at the end of your path. e.g /etc/wireguard": "Certifique-se de remover / no final do caminho. Exemplo: /etc/wireguard",
"WGDashboard Account Settings": "Definições da Conta do WGDashboard",
"Current Password": "Senha Atual",
"New Password": "Nova Senha",
"Repeat New Password": "Repetir Nova Senha",
"Update Password": "Atualizar Senha",
"Multi-Factor Authentication \\(MFA\\)": "Autenticação em duas etapas (MFA)",
"Reset": "Redefinir",
"Setup": "Definir",
"API Keys": "Chaves de API",
"API Key": "Chave de API",
"Key": "Chave",
"Enabled": "Habilitado",
"Disabled": "Desabilitado",
"No WGDashboard API Key": "Nenhuma Chave de API do WGDashboard",
"Expire At": "Expira Em",
"Are you sure to delete this API key\\?": "Tem certeza que deseja remover esta chave de API?",
"Create API Key": "Criar Chave de API",
"When should this API Key expire\\?": "Quando esta Chave de API deve expirar?",
"Never Expire": "Nunca Expira",
"Don't think that's a good idea": "Não acho que seja uma boa ideia",
"Creating\\.\\.\\.": "Criando...",
"Create": "Criar",
"Status": "Status",
"On": "Ligado",
"Off": "Desligado",
"Turning On\\.\\.\\.": "Ligando...",
"Turning Off\\.\\.\\.": "Desligando...",
"Address": "Endereço",
"Listen Port": "Porta",
"Table": "Tabela",
"Public Key": "Chave Pública",
"Connected Peers": "Peers Conectados",
"Total Usage": "Uso Total",
"Total Received": "Total Recebido",
"Total Sent": "Total Enviado",
"Peers Data Usage": "Uso de Dados dos Peers",
"Real Time Received Data Usage": "Uso de Dados Recebidos em Tempo Real",
"Real Time Sent Data Usage": "Uso de Dados Enviados em Tempo Real",
"Peer": "Peer",
"Peers": "Peers",
"Peer Settings": "Definições do Peer",
"Download All": "Baixar Todos",
"Search": "Buscar",
"Search Peers\\.\\.\\.": "Buscando em Peers...",
"Display": "Mostrar",
"Sort By": "Ordenar Por",
"Refresh Interval": "Intervalo de Atualização",
"Name": "Nome",
"Allowed IPs": "IPs Permitidos",
"Restricted": "Restrito",
"(.*) Seconds": "$1 Segundos",
"(.*) Minutes": "$1 Minutos",
"Configuration Settings": "Definição de Configuração",
"Peer Jobs": "Jobs do Peer",
"Active Jobs": "Jobs Ativos",
"All Active Jobs": "Todos os Jobs Ativos",
"Logs": "Logs",
"Private Key": "Chave Privada",
"\\(Required for QR Code and Download\\)": "(Obrigatório para QR Code e Download)",
"\\(Required\\)": "(Obrigatório)",
"Endpoint Allowed IPs": "Endeços IP Permitidos do Endpoint",
"DNS": "DNS",
"Optional Settings": "Definições Opcionais",
"Pre-Shared Key": "Chave Pré-Compartilhada",
"MTU": "MTU",
"Persistent Keepalive": "Keepalive Persistente",
"Reset Data Usage": "Redefinir Uso de Dados",
"Total": "Total",
"Sent": "Enviado",
"Received": "Recebido",
"Revert": "Reverter",
"Save Peer": "Salvar Peer",
"QR Code": "QR Code",
"Schedule Jobs": "Agendar Jobs",
"Job": "Job",
"Job ID": "ID do Job",
"Unsaved Job": "Job não salvo",
"This peer does not have any job yet\\.": "Este peer ainda não tem nenhum job.",
"if": "se",
"is": "é",
"then": "então",
"larger than": "maior que",
"Date": "Data",
"Restrict Peer": "Peer Restrito",
"Delete Peer": "Remover Peer",
"Edit": "Editar",
"Delete": "Remover",
"Deleting...": "Removendo...",
"Cancel": "Cancelar",
"Save": "Salvar",
"No active job at the moment\\.": "Nenhum job ativo no momento.",
"Jobs Logs": "Logs de Jobs",
"Updated at": "Atualizado em",
"Refresh": "Atualizar",
"Filter": "Filtrar",
"Success": "Sucesso",
"Failed": "Falhou",
"Log ID": "ID do Log",
"Message": "Mensagem",
"Share Peer": "Compartilhar Peer",
"Currently the peer is not sharing": "No momento o peer não está compartilhando",
"Sharing\\.\\.\\.": "Compartilhando...",
"Start Sharing": "Iniciar Compartilhamento",
"Stop Sharing\\.\\.\\.": "Parar Compartilhamento...",
"Stop Sharing": "Parar Compartilhamento",
"Access Restricted": "Acesso Restrito",
"Restrict Access": "Restringir Acesso",
"Restricting\\.\\.\\.": "Restringindo...",
"Allow Access": "Permitir Acesso",
"Allowing Access\\.\\.\\.": "Permitindo Acesso...",
"Download \\& QR Code is not available due to no private key set for this peer": "Download & QR Code não estão disponíveis devido à ausência de chave privada definida para este peer",
"Add Peers": "Adicionar Peers",
"Bulk Add": "Adicionar Vários",
"By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "Ao gerar vários Peers, o nome de cada peer será gerado automaticamente, e o IP será atribuído ao próximo IP disponível.",
"How many peers you want to add\\?": "Quantos peers você quer adicionar?",
"You can add up to (.*) peers": "Você pode adicionar até $1 peers",
"Use your own Private and Public Key": "Use sua própria Chave Privada e Pública",
"Enter IP Address/CIDR": "Digite Endereço IP/CIDR",
"IP Address/CIDR": "Endereço IP/CIDR",
"or": "ou",
"Pick Available IP": "Selecione um IP Disponível",
"No available IP containing": "Nenhum IP disponível contendo",
"Add": "Adicionar",
"Adding\\.\\.\\.": "Adcionando...",
"Failed to check available update": "Erro ao verificar atualização disponível",
"Nice to meet you!": "Bom te conhecer!",
"Please fill in the following fields to finish setup": "Preencha os seguintes campos para finalizar a configuração",
"Create an account": "Crie uma conta",
"Enter an username you like": "Digite um nome de usuário",
"Enter a password": "Digite uma senha",
"\\(At least 8 characters and make sure is strong enough!\\)": "(Pelo menos 8 caracteres e certifique-se de que seja forte o suficiente!)",
"Confirm password": "Confirme a senha",
"Next": "Próximo",
"Saving\\.\\.\\.": "Salvando...",
"1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. Escaneie o seguinte QR Code para gerar um código de uso único com um autenticador de sua escolha",
"Or you can click the link below:": "Ou clique no link abaixo:",
"2\\. Enter the TOTP generated by your authenticator to verify": "2. Digite o código de uso único gerado pelo seu autenticador para verificar",
"TOTP verified!": "Código de uso único verificado!",
"I don't need MFA": "Não preciso de autenticação em duas etapas (MFA)",
"Complete": "Completar",
"(v[0-9.]{1,}) is now available for update!": "$1 está disponível para atualização!",
"Current Version:": "Versão Atual:",
"Oh no\\.\\.\\. This link is either expired or invalid\\.": "Ops... Este link é inválido ou expirou.",
"Scan QR Code with the WireGuard App to add peer": "Escaneie o QR Code com o App WireGuard para adicionar o peer",
"or click the button below to download the ": "ou clique no botão abaixo para baixar o ",
" file": " arquivo",
"FROM ": "DE ",
"(.*) is on": "$1 está ligado",
"(.*) is off": "$1 está desligado",
"Allowed IPs is invalid": "IPs Permitidos inválido",
"Peer created successfully": "Peer criado com sucesso",
"Please fill in all required box": "Preencha todas as caixas obrigatórias",
"Please specify amount of peers you want to add": "Especifique a quantidade de peers que você deseja adicionar",
"No more available IP can assign": "Não há mais IPs disponíveis para atribuir",
"The maximum number of peers can add is (.*)": "O número máximo de peers que podem ser adicionados é $1",
"Generating key pairs by bulk failed": "Gerar vários pares de chaves falhou",
"Failed to add peers in bulk": "Erro ao adicionar múltiplos peers",
"This peer already exist": "Este peer já existe",
"This IP is not available: (.*)": "Este IP não está disponível: $1",
"Configuration does not exist": "Configuração não existe",
"Peer does not exist": "Peer não existe",
"Please provide a valid configuration name": "Informe um nome de configuração válido",
"Peer saved": "Peer salvo",
"Allowed IPs already taken by another peer": "IPs Permitidos já estão sendo usados por outro peer",
"Endpoint Allowed IPs format is incorrect": "Formato dos IPs Permitidos do Endpoint está incorreta",
"DNS format is incorrect": "Formato do DNS está incorreto",
"MTU format is not correct": "Formato do MTU está incorreto",
"Persistent Keepalive format is not correct": "Formato do Keepalive Persistente está incorreto",
"Private key does not match with the public key": "Chave privada não corresponde com a chave pública",
"Update peer failed when updating Pre-Shared Key": "Atualização do peer falhou ao atualizar a Chave Pré-Compartilhada",
"Update peer failed when updating Allowed IPs": "Atualização do peer falhou ao atualizar os IPs Permitidos",
"Update peer failed when saving the configuration": "Atualização do peer falhou ao salvar a configuração",
"Peer data usage reset successfully": "Uso de dados do peer redefinido com sucesso",
"Peer download started": "Download do peer iniciado",
"Please specify one or more peers": "Especifique um ou mais peers",
"Share link failed to create. Reason: (.*)": "Erro ao criar link de compartilhamento. Motivo: $1",
"Link expire date updated": "Data de expiração do link atualizada",
"Link expire date failed to update. Reason: (.*)": "Erro ao atualizar a data de expiração do link. Motivo: $1",
"Peer job saved": "Job do peer salvo",
"Please specify job": "Especifique o job",
"Please specify peer and configuration": "Especifique o peer e a configuração",
"Peer job deleted": "Job do peer removido",
"API Keys function is successfully enabled": "Recurso de Chaves API está habilitado",
"API Keys function is successfully disabled": "Recurso de Chaves API está desabilitado",
"API Keys function is failed to enable": "Falha ao habilitar recurso de Chaves API",
"API Keys function is failed to disable": "Falha ao desabilitar recurso de Chaves API",
"WGDashboard API Keys function is disabled": "Recurso de Chaves de API do WGDashboard está desabilitada",
"WireGuard configuration path saved": "Caminho do arquivo de configuração WireGuard salvo",
"API Key deleted": "Chave de API removida",
"API Key created": "Chave de API criada",
"Sign in session ended, please sign in again": "Sessão encerrada. Por favor, entre novamente",
"Please specify an IP Address (v4/v6)": "Especifique um endereço IP (v4/v6)",
"Please provide ipAddress and count": "Especifique endereço IP e quantidade",
"Please provide ipAddress": "Especifique endereço IP",
"Dashboard Language": "Idioma do Painel",
"Dashboard language update failed": "Atualização do idioma do painel falhou",
"Peer Remote Endpoint": "Endpoint Remoto do Peer",
"New Configuration": "Nova Configuração",
"Configuration Name": "Nome de Configuração",
"Configuration name is invalid. Possible reasons:": "Nome de configuração é inválido. Possíveis razões:",
"Configuration name already exist\\.": "Nome de configuração já existe\\.",
"Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "Nome de configuração pode conter apenas 15 caracteres alfanuméricos, sublinhado, igual, mais, ponto e hífen.",
"Invalid Port": "Porta Inválida",
"Save Configuration": "Salvar Configuração",
"IP Address/CIDR is invalid": "Endereço IP/CIDR inválido",
"IP Address": "Endereço IP",
"Enter IP Address / Hostname": "Digite Endereço IP / Nome do Host",
"IP Address / Hostname": "Endereço IP / Nome do Host",
"Dashboard IP Address \\& Listen Port": "Endereço IP do Painel e Porta",
"Count": "Quantidade",
"Hop": "Salto",
"Average RTT \\(ms\\)": "RTT médio (ms)",
"Min RTT \\(ms\\)": "RTT mínimo (ms)",
"Max RTT \\(ms\\)": "RTT máximo (ms)",
"Geolocation": "Geolocalização",
"Is Alive": "Está Ativo",
"Average / Min / Max Round Trip Time": "Média / Mínimo / Máximo do Tempo de Ida e Volta (Round Trip)",
"Sent / Received / Lost Package": "Enviado / Recebido / Pacotes Perdidos",
"Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "É necessário reiniciar o WGDashboard para aplicar as mudanças de Endereço IP e Porta",
"Restore Configuration": "Restaurar Configuração",
"Step (.*)": "Passo (.*)",
"Select a backup you want to restore": "Selecione o backup que deseja restaurar",
"Click to change a backup": "Clique para alterar um backup",
"Selected Backup": "Backup Selecionado",
"You don't have any configuration to restore": "Você não tem configurações para restaurar",
"Help": "Ajuda",
"You can visit our: ": "Você pode visitar nosso: ",
"Official Documentation": "Documentação Oficial",
"Discord Server": "Servidor do Discord",
"Backup": "Backup",
"([0-9].*) Backups?": "([0-9].*) Backups?",
"Yes": "Sim",
"No": "Não",
"Backup not selected": "Backup não selecionado",
"Confirm \\& edit restore information": "Confirmar \\& editar informações de restauração",
"(.*) Available IP Address": "$1 endereço IP disponível",
"Database File": "Arquivo de Banco de Dados",
"Contain": "Contém",
"Restricted Peers?": "Peers Restritos?",
"Restore": "Restaurar",
"Restoring": "Restaurando",
"WGDashboard Settings": "Configurações do WGDashboard",
"Peers Settings": "Configurações dos Peers",
"WireGuard Configuration Settings": "Definições de Configuração WireGuard",
"Appearance": "Aparência",
"Theme": "Tema",
"Language": "Idioma",
"Account Settings": "Definições de Conta",
"Peer Default Settings": "Definições Padrão do Peer",
"Toggle When Start Up": "Ativar Quanto Iniciar",
"Other Settings": "Outras Definições",
"Select Peers": "Selecione Peers",
"Backup & Restore": "Backup e Restauração",
"Delete Configuration": "Remover Configuração",
"Create Backup": "Criar Backup",
"No backup yet, click the button above to create backup\\.": "Nenhum backup, clique no botão acima para criar um backup.",
"Are you sure to delete this backup\\?": "Tem certeza de que deseja remover este backup?",
"Are you sure to restore this backup\\?": "Tem certeza de que deseja restaurar este backup?",
"Backup Date": "Data do Backup",
"File": "Arquivo",
"Are you sure to delete this configuration\\?": "Tem certeza de que deseja remover esta configuração?",
"Once you deleted this configuration\\:": "Uma vez que remover esta configuração:",
"All connected peers will get disconnected": "Todos peers conectados serão desconectados",
"Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "Ambos tabela do banco de dados e arquivo de configuração (.conf) desta configuração serão removidos",
"Checking backups...": "Verificando backups...",
"This configuration have ([0-9].*) backups": "Esta configuração tem $1 backups",
"This configuration have no backup": "Esta configuração não tem backups",
"If you're sure, please type in the configuration name below and click Delete": "Se você tem certeza, confirme o nome da configuração abaixo e clique em Remover",
"Select All": "Selecionar Todos",
"Clear Selection": "Limpar Seleção",
"([0-9].*) Peers?": "$1 Peers?",
"Download": "Baixar",
"Downloading": "Baixando",
"Download Finished": "Download Concluído",
"Done": "Pronto",
"Are you sure to delete": "Tem certeza de que deseja remover",
"Are you sure to delete this peer\\?": "Tem certeza de que deseja remover este peer?",
"Configuration deleted": "Configuração removida",
"Configuration saved": "Configuração salva",
"WGDashboard language update failed": "Falha ao atualizar idioma do WGDashboard",
"Configuration restored": "Configuração restaurada",
"Allowed IP already taken by another peer": "Endereço IP já está em uso por outro peer",
"Failed to allow access of peer (.*)": "Falha ao permitir acesso ao peer $1",
"Failed to save configuration through WireGuard": "Falha ao salvar configuração pelo WGDashboard",
"Allow access successfully": "Acesso permitido com sucesso",
"Deleted ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) removido(s)",
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) removido(s) com sucesso. Falha ao remover $2 peer(s)",
"Restricted ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) restringido(s)",
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) restringido(s) com sucesso. Falha ao restringir $2 peer(s)",
"Display As": "Mostrar Como",
"List": "Lista",
"Grid": "Grid",
"Protocol": "Protocolo",
"Open File": "Abrir Arquivo",
"Advanced Options": "Opções Avançadas",
"Allowed IPs Validation": "Validação de IPs Permitidos",
"Update Name": "Atualizar Nome",
"To update this configuration's name, WGDashboard will execute the following operations:": "Para atualizar este nome de configuração, o WGDashboard vaoi executar as seguintes operações:",
"Duplicate current configuration's database table and \\.conf file with the new name": "Duplicar tabela do banco de dados e arquivo .conf da configuração atual com novo nome",
"Delete current configuration's database table and \\.conf file": "Remover tabela do banco de dados e arquivo .conf da configuração atual",
"Danger Zone": "Zona de Perigo",
"Configuration File": "Arquivo de Configuração",
"Edit Raw Configuration File": "Editar Conteúdo do Arquivo de Configuração",
"Peer Configuration File": "Arquivo de Configuração do Peer",
"Share with Email": "Compartilhar com Email",
"Email Account": "Conta de Email",
"Ready": "Pronto",
"Port": "Porta",
"Encryption": "Criptografia",
"No Encryption": "Sem Criptografia",
"Send From": "Enviar de",
"Send Test Email": "Enviar Email de Teste",
"Email Body Template": "Modelo de Corpo de Email",
"Live Preview": "Prévia ao vivo",
"Include configuration file as an attachment": "Incluir arquivo de configuração como anexo",
"Send": "Enviar",
"Sending\\.\\.\\.": "Enviando...",
"Email sent successfully!": "Email enviado com sucesso!",
"AmneziaWG Peer Setting": "Definições de Peer do AmneziaWG",
"System Status": "Status do Sistema",
"CPU": "CPU",
"Memory": "Memória",
"Swap Memory": "Memória Swap",
"Processes": "Processos",
"CPU Usage": "Uso de CPU",
"Memory Usage": "Uso de Memória",
"Swap Memory Usage": "Uso de Memória Swap",
"Network": "Rede",
"([0-9]{1,}) Interfaces": "$1 Interfaces",
"Storage": "Armazenamento",
"([0-9]{1,}) Partitions": "$1 Repartições",
"(.*) Used": "$1 Usado",
"Untitled Peer": "Peer Sem Nome",
"Who are you sending to\\?": "Para quem você está enviando?",
"What\\'s the subject\\?": "Qual o título?",
"What\\'s the body\\?": "Qual a mensagem?"
}

View File

@@ -1,62 +0,0 @@
import json
active_languages = json.loads(open("active_languages.json", "r").read())
language_template = json.loads(open("language_template.json", "r").read())
if __name__ == "__main__":
welcome = "WGDashboard Locale File Verification [by @donaldzou]"
print("="*(len(welcome) + 4))
print(f"| {welcome} |")
print("="*(len(welcome) + 4))
print()
print("Active Languages\n")
status = False
for language in active_languages:
print(f"{language['lang_name']} | {language['lang_id']}")
lang_ids = list(map(lambda x: x['lang_id'], active_languages))
print()
lang_id = ""
while not status:
lang_id = input("Please enter the language ID to verify: ")
if lang_id not in lang_ids:
print(f'{lang_id} is not a valid language ID')
elif lang_id == 'en':
print(f'{lang_id} is not a editable language')
else:
status = True
with open(f"{lang_id}.json", "r") as f:
lang_file = json.load(f)
# Identify missing and deprecated translations
missing_translation = [
key for key in language_template
if key not in lang_file or not lang_file[key].strip()
]
deprecated_translation = [
key for key in lang_file
if key not in language_template
]
with open(f"{lang_id}.json", "w") as f:
new_lang_file = dict(lang_file)
for key in missing_translation:
new_lang_file[key] = ""
for key in deprecated_translation:
new_lang_file.pop(key)
f.write(json.dumps(new_lang_file, ensure_ascii=False, indent='\t'))
print()
# Print missing translations
print(f"\t[Missing Translations] {len(missing_translation)} translation{'s' if len(missing_translation) > 1 else ''}")
# Print deprecated translations
print(f"\t[Deprecated Translations] {len(deprecated_translation)} translation{'s' if len(deprecated_translation) > 1 else ''}")
print(f"\t[Note] All missing translations are added into {lang_id}.json, all deprecated translations are removed from {lang_id}.json")

View File

@@ -1,312 +1,369 @@
{ {
"Welcome to": "Bienvenido", " file": " archivo",
"Username": "Usuario", "(.*) Available IP Address": "$1 Dirección IP disponible",
"Password": "Contraseña",
"OTP from your authenticator": "OTP de tu autentificador",
"Sign In": "Iniciar sesión",
"Signing In\\.\\.\\.": "Iniciando sesión...",
"Access Remote Server": "Acceder a servidor remoto",
"Server": "Servidor",
"Click": "Click",
"Pinging...": "Ping...",
"to add your server": "para agregar tu servidor",
"Server List": "Lista de Servidores",
"Sorry, your username or password is incorrect.": "Lo siento, tu usuario o contraseña no son correctos.",
"Home": "Home",
"Settings": "Ajustes",
"Tools": "Herramientas",
"Sign Out": "Salir",
"Checking for update...": "Buscando actualizaciones...",
"You're on the latest version": "Estás utilizando la última versión",
"WireGuard Configurations": "Configuraciones de Wireguard",
"You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "Todavía no tienes configuraciones de WireGuard. Por favor, comprueba la carpeta de configuraciones o cámbiala en Ajustes. Por defecto, la carpeta es /etc/wireguard.",
"Configuration": "Configuración",
"Configurations": "Configuraciones",
"Peers Default Settings": "Ajustes por defecto de Peers",
"Dashboard Theme": "Tema del dashboard",
"Light": "Claro",
"Dark": "Oscuro",
"This will be changed globally, and will be apply to all peer's QR code and configuration file.": "Esto se va a cambiar de forma global, y se aplicará a todos los QRs y archivos de configuración de todos los Peers.",
"WireGuard Configurations Settings": "Ajustes de Configuración de Wireguard",
"Configurations Directory": "Carpeta de configuraciones",
"Remember to remove / at the end of your path. e.g /etc/wireguard": "Recuerda eliminar '/' al final de tu directorio. Por ejemplo, '/etc/wireguard'",
"WGDashboard Account Settings": "Ajustes de la cuenta de WGDashboard",
"Current Password": "Contraseña actual",
"New Password": "Nueva contraseña",
"Repeat New Password": "Repite la nueva contraseña",
"Update Password": "Actualizar contraseña",
"Multi-Factor Authentication \\(MFA\\)": "Autentificación de doble factor (MFA)",
"Reset": "Reset",
"Setup": "Setup",
"API Keys": "Clave API",
"API Key": "Clave API",
"Key": "Clave",
"Enabled": "Habilitado",
"Disabled": "Deshabilitado",
"No WGDashboard API Key": "Ninguna clave API WGDashboard",
"Expire At": "Expira en",
"Are you sure to delete this API key\\?": "¿Estás seguro de eliminar esta clave API?",
"Create API Key": "Crear una nueva clave API",
"When should this API Key expire\\?": "¿Cuándo debería expirar esta clave API?",
"Never Expire": "Nunca expira",
"Don't think that's a good idea": "No creo que esta sea una buena idea",
"Creating\\.\\.\\.": "Creando...",
"Create": "Crear",
"Status": "Estado",
"On": "Activo",
"Off": "Inactivo",
"Turning On\\.\\.\\.": "Activando...",
"Turning Off\\.\\.\\.": "Desactivando...",
"Address": "Dirección",
"Listen Port": "Puerto de escucha",
"Public Key": "Clave pública",
"Connected Peers": "Peer conectado",
"Total Usage": "Uso Total",
"Total Received": "Total Recibido",
"Total Sent": "Total Enviado",
"Peers Data Usage": "Uso de datos de Peers",
"Real Time Received Data Usage": "Datos recibidos en tiempo real",
"Real Time Sent Data Usage": "Datos enviados en tiempo real",
"Peer": "Peer",
"Peers": "Peers",
"Peer Settings": "Ajustes de Peers",
"Download All": "Descargar todo",
"Search Peers\\.\\.\\.": "Buscar Peers...",
"Display": "Mostrar",
"Sort By": "Ordenar por",
"Refresh Interval": "Intervalo de refresco",
"Name": "Nombre",
"Allowed IPs": "IPs permitidas",
"Restricted": "Restringido",
"(.*) Seconds": "$1 Segundos/i",
"(.*) Minutes": "$1 Minutos/i", "(.*) Minutes": "$1 Minutos/i",
"Configuration Settings": "Configuración", "(.*) Seconds": "$1 Segundos/i",
"Peer Jobs": "Jobs del Peer", "(.*) Used": "",
"Active Jobs": "Jobs Activos", "(.*) is off": "$1 está desactivado",
"All Active Jobs": "Todos los Jobs Activos", "(.*) is on": "$1 está activo",
"Logs": "Logs", "([0-9].*) Backups?": "$1 Backups?",
"Private Key": "Clave privada", "([0-9].*) Peers?": "¿$1 Peers?",
"\\(Required for QR Code and Download\\)": "(Requerido para el código QR y Descarga)", "([0-9]{1,}) Interfaces": "",
"\\(Required\\)": "(Requerido)", "([0-9]{1,}) Partitions": "",
"Endpoint Allowed IPs": "Direcciones IP del endpoint permitidas", "(v[0-9.]{1,}) is now available for update!": "$1 está disponible para actualizar!",
"DNS": "DNS", "1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. Por favor escanea el siguiente código QR para generar un código TOTP con el autentificador que prefieras",
"Optional Settings": "Ajustes opcionales", "2\\. Enter the TOTP generated by your authenticator to verify": "2. Inserta el código TOTP generado por tu autentificador para verificar",
"Pre-Shared Key": "Clave pre-compartida", "API Key": "Clave API",
"MTU": "MTU", "API Key created": "Clave API creada",
"Persistent Keepalive": "Keepalive persistente", "API Key deleted": "Clave API eliminada",
"Reset Data Usage": "Resetear los datos de uso", "API Keys": "Clave API",
"Total": "Total", "API Keys function is failed to disable": "La funcionalidad de clave API no se ha habilitado",
"Sent": "Enviado", "API Keys function is failed to enable": "La funcionalidad de clave API no se ha habilitado",
"Received": "Recibido", "API Keys function is successfully disabled": "La funcionalidad de clave API se ha deshabilitado con éxito",
"Revert": "Revertir", "API Keys function is successfully enabled": "La funcionalidad de clave API se ha habilitado con éxito",
"Save Peer": "Guardar el Peer", "Access Remote Server": "Acceder a servidor remoto",
"QR Code": "Código QR",
"Schedule Jobs": "Planificar Job",
"Job": "Job",
"Job ID": "ID del Job",
"Unsaved Job": "Job sin guardar",
"This peer does not have any job yet\\.": "Este Peer no tiene jobs todavía.",
"if": "si",
"is": "es",
"then": "entonces",
"larger than": "mayor que",
"Date": "Fecha",
"Restrict Peer": "Limitar el Peer",
"Delete Peer": "Eliminar el Peer",
"Edit": "Modificar",
"Delete": "Eliminar",
"Deleting...": "Eliminando...",
"Cancel": "Cancelar",
"Save": "Guardar",
"No active job at the moment\\.": "No hay jobs activos en este momento.",
"Jobs Logs": "Logs del Job",
"Updated at": "Actualizado el",
"Refresh": "Refrescar",
"Filter": "Filtrar",
"Success": "Éxito",
"Failed": "Fallido",
"Log ID": "ID del log",
"Message": "Mensaje",
"Share Peer": "Compartir Peer",
"Currently the peer is not sharing": "Actualmente el Peer no está compartiendo",
"Sharing\\.\\.\\.": "Compartiendo...",
"Start Sharing": "Empezar intercambio",
"Stop Sharing\\.\\.\\.": "Interrumpir intercambio...",
"Stop Sharing": "Interrumpir intercambio",
"Access Restricted": "Accesso Restringido", "Access Restricted": "Accesso Restringido",
"Restrict Access": "Restringir Acceso", "Account Settings": "Ajustes de la cuenta",
"Restricting\\.\\.\\.": "Restringiendo...", "Active Jobs": "Jobs Activos",
"Allow Access": "Habilitar Acceso", "Add": "añadir",
"Allowing Access\\.\\.\\.": "Habilitando el acceso...",
"Download \\& QR Code is not available due to no private key set for this peer": "La descarga y el código QR no están disponibles porque no se ha configurado una clave privada para este peer",
"Add Peers": "Agregar un Peer", "Add Peers": "Agregar un Peer",
"Adding\\.\\.\\.": "Añadiendo...",
"Address": "Dirección",
"Advanced Options": "",
"All Active Jobs": "Todos los Jobs Activos",
"All connected peers will get disconnected": "Todos los peers conectados se desconectarán",
"Allow Access": "Habilitar Acceso",
"Allow access successfully": "Acceso permitido con éxito",
"Allowed IP already taken by another peer": "IP Permitida ya ha sido seleccionada por otro peer",
"Allowed IPs": "IPs permitidas",
"Allowed IPs Validation": "",
"Allowed IPs already taken by another peer": "IPs disponibles ya han sido seleccionadas por otro peer",
"Allowed IPs is invalid": "Las IPs Permitidas son inválidas",
"Allowing Access\\.\\.\\.": "Habilitando el acceso...",
"AmneziaWG Peer Setting": "",
"Appearance": "apariencia",
"Are you sure to delete": "¿Estás seguro de eliminar?",
"Are you sure to delete this API key\\?": "¿Estás seguro de eliminar esta clave API?",
"Are you sure to delete this backup\\?": "¿Estás seguro de que quieres borrar este backup?",
"Are you sure to delete this configuration\\?": "¿Estás seguro de eliminar esta configuración?",
"Are you sure to delete this peer\\?": "¿Estás seguro de eliminar este peer?",
"Are you sure to restore this backup\\?": "",
"Average / Min / Max Round Trip Time": "Media / Min / Max Redondeo Viaje Tiempo",
"Average RTT \\(ms\\)": "",
"Backup": "Backup",
"Backup & Restore": "Backups y Restaurar",
"Backup Date": "Fecha del backup",
"Backup not selected": "Backup no seleccionado",
"Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "Ambos ficheros de configuración (.conf) y de la tabla de la base de datos relacionados con esta configuración serán eliminados",
"Bulk Add": "Agregar múltiple", "Bulk Add": "Agregar múltiple",
"By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "Agregando Peers de forma múltiple, los nombres de los peers se generarán de forma automática, y la IP permitida se asignará en función de la siguiente IP disponible.", "By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "Agregando Peers de forma múltiple, los nombres de los peers se generarán de forma automática, y la IP permitida se asignará en función de la siguiente IP disponible.",
"How many peers you want to add\\?": "¿Cuántos peers quieres añadir?", "CPU": "",
"You can add up to (.*) peers": "Puedes añadir hasta $1 peers", "CPU Usage": "",
"Use your own Private and Public Key": "Usa tu propia clave pública y privada", "Cancel": "Cancelar",
"Enter IP Address/CIDR": "ntroduce la dirección IP/CIDR", "Checking backups...": "Comprobando backups...",
"IP Address/CIDR": "Dirección IP/CIDR", "Checking for update...": "Buscando actualizaciones...",
"or": "o", "Clear Selection": "Deseleccionar",
"Pick Available IP": "Selecciona una IP disponible", "Click": "Click",
"No available IP containing": "Ninguna IP disponible que contenga", "Click to change a backup": "click para cambiar el backup",
"Add": "añadir",
"Adding\\.\\.\\.": "Añadiendo...",
"Failed to check available update": "Error al buscar actualizaciones disponibles",
"Nice to meet you!": "Encantado de conocerte",
"Please fill in the following fields to finish setup": "Por favor rellena los siguientes campos para finalizar el setup",
"Create an account": "Crea una cuenta",
"Enter an username you like": "Introduce un nombre de usuario",
"Enter a password": "Introduce una contraseña",
"\\(At least 8 characters and make sure is strong enough!\\)": "(Al menos 8 caracteres y asegúrate de que sea suficientemente fuerte)",
"Confirm password": "Confirma la contraseña",
"Next": "Siguiente",
"Saving\\.\\.\\.": "Guardando...",
"1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. Por favor escanea el siguiente código QR para generar un código TOTP con el autentificador que prefieras",
"Or you can click the link below:": "O puedes hacer click en el siguiente enlace:",
"2\\. Enter the TOTP generated by your authenticator to verify": "2. Inserta el código TOTP generado por tu autentificador para verificar",
"TOTP verified!": "¡TOTP Verificado!",
"I don't need MFA": "No necesito MFA",
"Complete": "Completado", "Complete": "Completado",
"(v[0-9.]{1,}) is now available for update!": "$1 está disponible para actualizar!", "Configuration": "Configuración",
"Current Version:": "Versión actual:", "Configuration File": "",
"Oh no\\.\\.\\. This link is either expired or invalid\\.": "Oh no... Este link ha expirado o es inválido.",
"Scan QR Code with the WireGuard App to add peer": "Escanea el código QR con la App Wireguard para añadir el peer",
"or click the button below to download the ": "o haz click en el botón de abajo para descargar el ",
" file": " archivo",
"FROM ": "DE ",
"(.*) is on": "$1 está activo",
"(.*) is off": "$1 está desactivado",
"Allowed IPs is invalid": "Las IPs Permitidas son inválidas",
"Peer created successfully": "Peer creado con éxito",
"Please fill in all required box": "Por favor, rellena las casillas requeridas",
"Please specify amount of peers you want to add": "Por favor, especifica la cantidad de peers que quieres añadir",
"No more available IP can assign": "No hay más IPs disponibles que asignar",
"The maximum number of peers can add is (.*)": "El número máximo de peers que se pueden añadir es $1",
"Generating key pairs by bulk failed": "Generación de key pairs por Añadir Múltiples falló",
"Failed to add peers in bulk": "Error al añadir múltiples peers",
"This peer already exist": "Este peer ya existe",
"This IP is not available: (.*)": "Esta IP no está disponible: $1",
"Configuration does not exist": "La configuración no existe",
"Peer does not exist": "El peer no existe",
"Please provide a valid configuration name": "Por favor, introduce un nombre de configuración válido",
"Peer saved": "Peer guardado",
"Allowed IPs already taken by another peer": "IPs disponibles ya han sido seleccionadas por otro peer",
"Endpoint Allowed IPs format is incorrect": "El formato de las IPs disponibles no es correcto",
"DNS format is incorrect": "El formato del DNS no es correcto",
"MTU format is not correct": "El formato del MTU no es correcto",
"Persistent Keepalive format is not correct": "El formato de Keepalive persistente no es correcto",
"Private key does not match with the public key": "La clave privada no corresponde con la clave pública",
"Update peer failed when updating Pre-Shared Key": "Actualización del peer falló cuando se actualizó la clave pre-compartida",
"Update peer failed when updating Allowed IPs": "Actualización del peer falló cuando se actualizó las IPs Permitidas",
"Update peer failed when saving the configuration": "Actualización del peer falló cuando se guardaba la configuración",
"Peer data usage reset successfully": "Los datos del uso del peer se restablecieron con éxito",
"Peer download started": "Descarga del peer comenzada",
"Please specify one or more peers": "Por favor, especifica uno o más peers",
"Share link failed to create. Reason: (.*)": "Creación del link para compartir fallida. Motivo: $1",
"Link expire date updated": "Actualizada la fecha de expiración del link",
"Link expire date failed to update. Reason: (.*)": "Actualización de la fecha de expiración fallida. Motivo: $1",
"Peer job saved": "Job del Peer guardado",
"Please specify job": "Por favor, especifica un job",
"Please specify peer and configuration": "Por favor, especifica peer y configuración",
"Peer job deleted": "Job del Peer eliminado",
"API Keys function is successfully enabled": "La funcionalidad de clave API se ha habilitado con éxito",
"API Keys function is successfully disabled": "La funcionalidad de clave API se ha deshabilitado con éxito",
"API Keys function is failed to enable": "La funcionalidad de clave API no se ha habilitado",
"API Keys function is failed to disable": "La funcionalidad de clave API no se ha habilitado",
"WGDashboard API Keys function is disabled": "La funcionalidad de clave API de WGDashboard está deshabilitada",
"WireGuard configuration path saved": "Guardado el destino de la configuración de Wireguard",
"API Key deleted": "Clave API eliminada",
"API Key created": "Clave API creada",
"Sign in session ended, please sign in again": "La sesión actual ha caducado, por favor, accede de nuevo",
"Please specify an IP Address (v4/v6)": "Por favor, especificado dirección IP (v4/v6)",
"Please provide ipAddress and count": "Por favor, especifica dirección IP y cuenta",
"Please provide ipAddress": "Por favor, especifica dirección IP",
"Dashboard Language": "Idioma del Dashboard",
"Dashboard language update failed": "Imposible actualizar el idioma del Dashboard",
"Peer Remote Endpoint": "Endpoint remoto del Peer",
"New Configuration": "Nueva configuración",
"Configuration Name": "Nombre de la configuración", "Configuration Name": "Nombre de la configuración",
"Configuration name is invalid. Possible reasons:": "El nombre de la configuración es inválido. Motivo:", "Configuration Settings": "Configuración",
"Configuration deleted": "Configuración eliminada",
"Configuration does not exist": "La configuración no existe",
"Configuration name already exist\\.": "El nombre de la configuración ya existe.", "Configuration name already exist\\.": "El nombre de la configuración ya existe.",
"Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "El nombre de la configuración solo puede contener 15 letras mayúsculas o minúsculas, números, barrabaja, símbolos de igual, suma, puntos y guiones.", "Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "El nombre de la configuración solo puede contener 15 letras mayúsculas o minúsculas, números, barrabaja, símbolos de igual, suma, puntos y guiones.",
"Invalid Port": "Puerto inválido", "Configuration name is invalid. Possible reasons:": "El nombre de la configuración es inválido. Motivo:",
"Save Configuration": "Guardar la configuración", "Configuration restored": "Configuración restaurada",
"IP Address/CIDR is invalid": "La IP/CIDR no es válida", "Configuration saved": "Configuración guardada",
"IP Address": "Dirección IP", "Configurations": "Configuraciones",
"Enter IP Address / Hostname": "Introduce una dirección IP / Hostname", "Configurations Directory": "Carpeta de configuraciones",
"IP Address / Hostname": "Dirección IP / Hostname",
"Dashboard IP Address \\& Listen Port": "Dirección IP del dashboard y puerto",
"Count": "Cuenta",
"Geolocation": "Geolocalización",
"Is Alive": "Está Activo",
"Average / Min / Max Round Trip Time": "Media / Min / Max Redondeo Viaje Tiempo",
"Sent / Received / Lost Package": "Enviado / Recibido / Paquetes perdidos",
"Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "Un reset manual de WGDashboard es necesario para aplicar los cambios en la dirección IP y el puerto",
"Restore Configuration": "Restablecer configuración",
"Step (.*)": "Paso $1",
"Select a backup you want to restore": "Selecciona el backup que quieres restaurar",
"Click to change a backup": "click para cambiar el backup",
"Selected Backup": "Backup seleccionado",
"You don't have any configuration to restore": "No tienes ninguna configuración que restaurar",
"Help": "Ayuda",
"Backup": "Backup",
"([0-9].*) Backups?": "$1 Backups?",
"Yes": "Sí",
"No": "No",
"Backup not selected": "Backup no seleccionado",
"Confirm \\& edit restore information": "Confirmar y editar la información de restauración", "Confirm \\& edit restore information": "Confirmar y editar la información de restauración",
"(.*) Available IP Address": "$1 Dirección IP disponible", "Confirm password": "Confirma la contraseña",
"Database File": "Fichero de base de datos", "Connected Peers": "Peer conectado",
"Contain": "Contiene", "Contain": "Contiene",
"Restricted Peers?": "¿Peers restringidos?", "Count": "Cuenta",
"Restore": "Restaurar", "Create": "Crear",
"Restoring": "Restaurando", "Create API Key": "Crear una nueva clave API",
"WGDashboard Settings": "Ajustes de WGDashboard",
"Peers Settings": "Ajustes de Peers",
"WireGuard Configuration Settings": "Ajustes de Configuraciones de Wireguard",
"Appearance": "apariencia",
"Theme": "Tema",
"Language": "Idioma",
"Account Settings": "Ajustes de la cuenta",
"Peer Default Settings": "Ajustes por defecto del peer",
"Toggle When Start Up": "Activar en Start Up",
"Other Settings": "Otros ajustes",
"Select Peers": "Seleccionar peers",
"Backup & Restore": "Backups y Restaurar",
"Delete Configuration": "Eliminar Configuración",
"Create Backup": "Crear Backup", "Create Backup": "Crear Backup",
"No backup yet, click the button above to create backup\\.": "No hay backups todavía, presiona el botón de arriba para crear un backup.", "Create an account": "Crea una cuenta",
"Are you sure to delete this backup\\?": "¿Estás seguro de que quieres borrar este backup?", "Creating\\.\\.\\.": "Creando...",
"Are you sure to restore this backup?\\": "¿Estás seguro de que quieres restaurar este backup?", "Current Password": "Contraseña actual",
"Backup Date": "Fecha del backup", "Current Version:": "Versión actual:",
"Currently the peer is not sharing": "Actualmente el Peer no está compartiendo",
"DNS": "DNS",
"DNS format is incorrect": "El formato del DNS no es correcto",
"Danger Zone": "",
"Dark": "Oscuro",
"Dashboard IP Address \\& Listen Port": "Dirección IP del dashboard y puerto",
"Dashboard Language": "Idioma del Dashboard",
"Dashboard Theme": "Tema del dashboard",
"Dashboard language update failed": "Imposible actualizar el idioma del Dashboard",
"Database File": "Fichero de base de datos",
"Date": "Fecha",
"Delete": "Eliminar",
"Delete Configuration": "Eliminar Configuración",
"Delete Peer": "Eliminar el Peer",
"Delete current configuration's database table and \\.conf file": "",
"Deleted ([0-9]{1,}) peer\\(s\\)": "Eliminados $1 peer(s)",
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "Eliminados $1 peer(s) con éxito. Fallo al eliminar $2 peer(s)",
"Deleting...": "Eliminando...",
"Disabled": "Deshabilitado",
"Discord Server": "",
"Display": "Mostrar",
"Display As": "",
"Don't think that's a good idea": "No creo que esta sea una buena idea",
"Done": "Hecho",
"Download": "",
"Download All": "Descargar todo",
"Download Finished": "Descarga finalizada",
"Download \\& QR Code is not available due to no private key set for this peer": "La descarga y el código QR no están disponibles porque no se ha configurado una clave privada para este peer",
"Downloading": "Descargando",
"Duplicate current configuration's database table and \\.conf file with the new name": "",
"Edit": "Modificar",
"Edit Raw Configuration File": "",
"Email Account": "",
"Email Body Template": "",
"Email sent successfully!": "",
"Enabled": "Habilitado",
"Encryption": "",
"Endpoint Allowed IPs": "Direcciones IP del endpoint permitidas",
"Endpoint Allowed IPs format is incorrect": "El formato de las IPs disponibles no es correcto",
"Enter IP Address / Hostname": "Introduce una dirección IP / Hostname",
"Enter IP Address/CIDR": "ntroduce la dirección IP/CIDR",
"Enter a password": "Introduce una contraseña",
"Enter an username you like": "Introduce un nombre de usuario",
"Expire At": "Expira en",
"FROM ": "DE ",
"Failed": "Fallido",
"Failed to add peers in bulk": "Error al añadir múltiples peers",
"Failed to allow access of peer (.*)": "Fallo de habilitar acceso del peer $1",
"Failed to check available update": "Error al buscar actualizaciones disponibles",
"Failed to save configuration through WireGuard": "Fallo de salvar configuración a través de WireGuard",
"File": "Archivo", "File": "Archivo",
"Are you sure to delete this configuration\\?": "¿Estás seguro de eliminar esta configuración?", "Filter": "Filtrar",
"Generating key pairs by bulk failed": "Generación de key pairs por Añadir Múltiples falló",
"Geolocation": "Geolocalización",
"Grid": "",
"Help": "Ayuda",
"Home": "Home",
"Hop": "",
"How many peers you want to add\\?": "¿Cuántos peers quieres añadir?",
"I don't need MFA": "No necesito MFA",
"IP Address": "Dirección IP",
"IP Address / Hostname": "Dirección IP / Hostname",
"IP Address/CIDR": "Dirección IP/CIDR",
"IP Address/CIDR is invalid": "La IP/CIDR no es válida",
"If you're sure, please type in the configuration name below and click Delete": "Si estás seguro, introduce el nombre de la configuración y presiona eliminar",
"Include configuration file as an attachment": "",
"Invalid Port": "Puerto inválido",
"Is Alive": "Está Activo",
"Job": "Job",
"Job ID": "ID del Job",
"Jobs Logs": "Logs del Job",
"Key": "Clave",
"Language": "Idioma",
"Light": "Claro",
"Link expire date failed to update. Reason: (.*)": "Actualización de la fecha de expiración fallida. Motivo: $1",
"Link expire date updated": "Actualizada la fecha de expiración del link",
"List": "",
"Listen Port": "Puerto de escucha",
"Live Preview": "",
"Log ID": "ID del log",
"Logs": "Logs",
"MTU": "MTU",
"MTU format is not correct": "El formato del MTU no es correcto",
"Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "Un reset manual de WGDashboard es necesario para aplicar los cambios en la dirección IP y el puerto",
"Max RTT \\(ms\\)": "",
"Memory": "",
"Memory Usage": "",
"Message": "Mensaje",
"Min RTT \\(ms\\)": "",
"Multi-Factor Authentication \\(MFA\\)": "Autentificación de doble factor (MFA)",
"Name": "Nombre",
"Network": "",
"Never Expire": "Nunca expira",
"New Configuration": "Nueva configuración",
"New Password": "Nueva contraseña",
"Next": "Siguiente",
"Nice to meet you!": "Encantado de conocerte",
"No": "No",
"No Encryption": "",
"No WGDashboard API Key": "Ninguna clave API WGDashboard",
"No active job at the moment\\.": "No hay jobs activos en este momento.",
"No available IP containing": "Ninguna IP disponible que contenga",
"No backup yet, click the button above to create backup\\.": "No hay backups todavía, presiona el botón de arriba para crear un backup.",
"No more available IP can assign": "No hay más IPs disponibles que asignar",
"OTP from your authenticator": "OTP de tu autentificador",
"Off": "Inactivo",
"Official Documentation": "",
"Oh no\\.\\.\\. This link is either expired or invalid\\.": "Oh no... Este link ha expirado o es inválido.",
"On": "Activo",
"Once you deleted this configuration\\:": "Una vez eliminada esta configuración:", "Once you deleted this configuration\\:": "Una vez eliminada esta configuración:",
"All connected peers will get disconnected": "Todos los peers conectados se desconectarán", "Open File": "",
"Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "Ambos ficheros de configuración (.conf) y de la tabla de la base de datos relacionados con esta configuración serán eliminados", "Optional Settings": "Ajustes opcionales",
"Checking backups...": "Comprobando backups...", "Or you can click the link below:": "O puedes hacer click en el siguiente enlace:",
"Other Settings": "Otros ajustes",
"Password": "Contraseña",
"Peer": "Peer",
"Peer Configuration File": "",
"Peer Default Settings": "Ajustes por defecto del peer",
"Peer Jobs": "Jobs del Peer",
"Peer Remote Endpoint": "Endpoint remoto del Peer",
"Peer Settings": "Ajustes de Peers",
"Peer created successfully": "Peer creado con éxito",
"Peer data usage reset successfully": "Los datos del uso del peer se restablecieron con éxito",
"Peer does not exist": "El peer no existe",
"Peer download started": "Descarga del peer comenzada",
"Peer job deleted": "Job del Peer eliminado",
"Peer job saved": "Job del Peer guardado",
"Peer saved": "Peer guardado",
"Peers": "Peers",
"Peers Data Usage": "Uso de datos de Peers",
"Peers Default Settings": "Ajustes por defecto de Peers",
"Peers Settings": "Ajustes de Peers",
"Persistent Keepalive": "Keepalive persistente",
"Persistent Keepalive format is not correct": "El formato de Keepalive persistente no es correcto",
"Pick Available IP": "Selecciona una IP disponible",
"Pinging...": "Ping...",
"Please fill in all required box": "Por favor, rellena las casillas requeridas",
"Please fill in the following fields to finish setup": "Por favor rellena los siguientes campos para finalizar el setup",
"Please provide a valid configuration name": "Por favor, introduce un nombre de configuración válido",
"Please provide ipAddress": "Por favor, especifica dirección IP",
"Please provide ipAddress and count": "Por favor, especifica dirección IP y cuenta",
"Please specify amount of peers you want to add": "Por favor, especifica la cantidad de peers que quieres añadir",
"Please specify an IP Address (v4/v6)": "Por favor, especificado dirección IP (v4/v6)",
"Please specify job": "Por favor, especifica un job",
"Please specify one or more peers": "Por favor, especifica uno o más peers",
"Please specify peer and configuration": "Por favor, especifica peer y configuración",
"Port": "",
"Pre-Shared Key": "Clave pre-compartida",
"Private Key": "Clave privada",
"Private key does not match with the public key": "La clave privada no corresponde con la clave pública",
"Processes": "",
"Protocol": "",
"Public Key": "Clave pública",
"QR Code": "Código QR",
"Ready": "",
"Real Time Received Data Usage": "Datos recibidos en tiempo real",
"Real Time Sent Data Usage": "Datos enviados en tiempo real",
"Received": "Recibido",
"Refresh": "Refrescar",
"Refresh Interval": "Intervalo de refresco",
"Remember to remove / at the end of your path. e.g /etc/wireguard": "Recuerda eliminar '/' al final de tu directorio. Por ejemplo, '/etc/wireguard'",
"Repeat New Password": "Repite la nueva contraseña",
"Reset": "Reset",
"Reset Data Usage": "Resetear los datos de uso",
"Restore": "Restaurar",
"Restore Configuration": "Restablecer configuración",
"Restoring": "Restaurando",
"Restrict Access": "Restringir Acceso",
"Restrict Peer": "Limitar el Peer",
"Restricted": "Restringido",
"Restricted ([0-9]{1,}) peer\\(s\\)": "Restringidos $1 peer(s)",
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Restringidos $1 peer(s) con éxito. Fallo al restringir $2 peer(s)",
"Restricted Peers?": "¿Peers restringidos?",
"Restricting\\.\\.\\.": "Restringiendo...",
"Revert": "Revertir",
"Save": "Guardar",
"Save Configuration": "Guardar la configuración",
"Save Peer": "Guardar el Peer",
"Saving\\.\\.\\.": "Guardando...",
"Scan QR Code with the WireGuard App to add peer": "Escanea el código QR con la App Wireguard para añadir el peer",
"Schedule Jobs": "Planificar Job",
"Search": "",
"Search Peers\\.\\.\\.": "Buscar Peers...",
"Select All": "Seleccionar todo",
"Select Peers": "Seleccionar peers",
"Select a backup you want to restore": "Selecciona el backup que quieres restaurar",
"Selected Backup": "Backup seleccionado",
"Send": "",
"Send From": "",
"Send Test Email": "",
"Sending\\.\\.\\.": "",
"Sent": "Enviado",
"Sent / Received / Lost Package": "Enviado / Recibido / Paquetes perdidos",
"Server": "Servidor",
"Server List": "Lista de Servidores",
"Settings": "Ajustes",
"Setup": "Setup",
"Share Peer": "Compartir Peer",
"Share link failed to create. Reason: (.*)": "Creación del link para compartir fallida. Motivo: $1",
"Share with Email": "",
"Sharing\\.\\.\\.": "Compartiendo...",
"Sign In": "Iniciar sesión",
"Sign Out": "Salir",
"Sign in session ended, please sign in again": "La sesión actual ha caducado, por favor, accede de nuevo",
"Signing In\\.\\.\\.": "Iniciando sesión...",
"Sorry, your username or password is incorrect.": "Lo siento, tu usuario o contraseña no son correctos.",
"Sort By": "Ordenar por",
"Start Sharing": "Empezar intercambio",
"Status": "Estado",
"Step (.*)": "Paso $1",
"Stop Sharing": "Interrumpir intercambio",
"Stop Sharing\\.\\.\\.": "Interrumpir intercambio...",
"Storage": "",
"Success": "Éxito",
"Swap Memory": "",
"Swap Memory Usage": "",
"System Status": "",
"TOTP verified!": "¡TOTP Verificado!",
"Table": "",
"The maximum number of peers can add is (.*)": "El número máximo de peers que se pueden añadir es $1",
"Theme": "Tema",
"This IP is not available: (.*)": "Esta IP no está disponible: $1",
"This configuration have ([0-9].*) backups": "Esta configuración tiene $1 backups", "This configuration have ([0-9].*) backups": "Esta configuración tiene $1 backups",
"This configuration have no backup": "Esta configuración no tiene backups", "This configuration have no backup": "Esta configuración no tiene backups",
"If you're sure, please type in the configuration name below and click Delete": "Si estás seguro, introduce el nombre de la configuración y presiona eliminar", "This peer already exist": "Este peer ya existe",
"Select All": "Seleccionar todo", "This peer does not have any job yet\\.": "Este Peer no tiene jobs todavía.",
"Clear Selection": "Deseleccionar", "This will be changed globally, and will be apply to all peer's QR code and configuration file.": "Esto se va a cambiar de forma global, y se aplicará a todos los QRs y archivos de configuración de todos los Peers.",
"([0-9].*) Peers?": "¿$1 Peers?", "To update this configuration's name, WGDashboard will execute the following operations:": "",
"Downloading": "Descargando", "Toggle When Start Up": "Activar en Start Up",
"Download Finished": "Descarga finalizada", "Tools": "Herramientas",
"Done": "Hecho", "Total": "Total",
"Are you sure to delete": "¿Estás seguro de eliminar?", "Total Received": "Total Recibido",
"Are you sure to delete this peer\\?": "¿Estás seguro de eliminar este peer?", "Total Sent": "Total Enviado",
"Configuration deleted": "Configuración eliminada", "Total Usage": "Uso Total",
"Configuration saved": "Configuración guardada", "Turning Off\\.\\.\\.": "Desactivando...",
"Turning On\\.\\.\\.": "Activando...",
"Unsaved Job": "Job sin guardar",
"Untitled Peer": "",
"Update Name": "",
"Update Password": "Actualizar contraseña",
"Update peer failed when saving the configuration": "Actualización del peer falló cuando se guardaba la configuración",
"Update peer failed when updating Allowed IPs": "Actualización del peer falló cuando se actualizó las IPs Permitidas",
"Update peer failed when updating Pre-Shared Key": "Actualización del peer falló cuando se actualizó la clave pre-compartida",
"Updated at": "Actualizado el",
"Use your own Private and Public Key": "Usa tu propia clave pública y privada",
"Username": "Usuario",
"WGDashboard API Keys function is disabled": "La funcionalidad de clave API de WGDashboard está deshabilitada",
"WGDashboard Account Settings": "Ajustes de la cuenta de WGDashboard",
"WGDashboard Settings": "Ajustes de WGDashboard",
"WGDashboard language update failed": "La actualización de idioma de WGDashboard falló", "WGDashboard language update failed": "La actualización de idioma de WGDashboard falló",
"Configuration restored": "Configuración restaurada", "Welcome to": "Bienvenido",
"Allowed IP already taken by another peer": "IP Permitida ya ha sido seleccionada por otro peer", "What\\'s the body\\?": "",
"Failed to allow access of peer (.*)": "Fallo de habilitar acceso del peer $1", "What\\'s the subject\\?": "",
"Failed to save configuration through WireGuard": "Fallo de salvar configuración a través de WireGuard", "When should this API Key expire\\?": "¿Cuándo debería expirar esta clave API?",
"Allow access successfully": "Acceso permitido con éxito", "Who are you sending to\\?": "",
"Deleted ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) eliminado(s)", "WireGuard Configuration Settings": "Ajustes de Configuraciones de Wireguard",
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) eliminado(s) con éxito. Fallo al eliminar $2 peer(s)", "WireGuard Configurations": "Configuraciones de Wireguard",
"Restricted ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) restringido(s)", "WireGuard Configurations Settings": "Ajustes de Configuración de Wireguard",
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) restringido(s) con éxito. Fallo al restringir $2 peer(s)" "WireGuard configuration path saved": "Guardado el destino de la configuración de Wireguard",
"Yes": "Sí",
"You can add up to (.*) peers": "Puedes añadir hasta $1 peers",
"You can visit our: ": "",
"You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "Todavía no tienes configuraciones de WireGuard. Por favor, comprueba la carpeta de configuraciones o cámbiala en Ajustes. Por defecto, la carpeta es /etc/wireguard.",
"You don't have any configuration to restore": "No tienes ninguna configuración que restaurar",
"You're on the latest version": "Estás utilizando la última versión",
"\\(At least 8 characters and make sure is strong enough!\\)": "(Al menos 8 caracteres y asegúrate de que sea suficientemente fuerte)",
"\\(Required for QR Code and Download\\)": "(Requerido para el código QR y Descarga)",
"\\(Required\\)": "(Requerido)",
"if": "si",
"is": "es",
"larger than": "mayor que",
"or": "o",
"or click the button below to download the ": "o haz click en el botón de abajo para descargar el ",
"then": "entonces",
"to add your server": "para agregar tu servidor"
} }

View File

@@ -0,0 +1,301 @@
#!/usr/bin/env python3
import json
import sys
from pathlib import Path
from typing import Dict, List, Tuple
from dataclasses import dataclass
@dataclass
class Language:
"""Represents a language configuration."""
lang_id: str
lang_name: str
@classmethod
def from_dict(cls, data: Dict) -> 'Language':
"""Create Language instance from dictionary."""
return cls(
lang_id=data.get('lang_id', ''),
lang_name=data.get('lang_name', '')
)
@dataclass
class TranslationStats:
"""Statistics about translation verification."""
missing_count: int
deprecated_count: int
total_keys: int
@property
def completion_percentage(self) -> float:
"""Calculate completion percentage."""
if self.total_keys == 0:
return 0.0
completed = self.total_keys - self.missing_count
return (completed / self.total_keys) * 100
class LocaleManager:
"""Manages locale files and translation verification."""
SUPPORTED_LOCALES_FILE = "supported_locales.json"
LOCALE_TEMPLATE_FILE = "locale_template.json"
def __init__(self):
self.supported_locales: List[Language] = []
self.locale_template: Dict[str, str] = {}
self._load_configuration()
def _load_configuration(self) -> None:
"""Load active languages and template configuration."""
try:
self.supported_locales = self._load_supported_locales()
self.locale_template = self._load_locale_template()
except FileNotFoundError as e:
print(f"[✗] Configuration file not found: {e}")
sys.exit(1)
except json.JSONDecodeError as e:
print(f"[✗] Invalid JSON in configuration file: {e}")
sys.exit(1)
def _load_supported_locales(self) -> List[Language]:
"""Load active languages from JSON file."""
config_path = Path(self.SUPPORTED_LOCALES_FILE)
if not config_path.exists():
raise FileNotFoundError(
f"Active languages file not found: {config_path}"
)
with open(config_path, 'r', encoding='utf-8') as file:
data = json.load(file)
return [Language.from_dict(lang_data) for lang_data in data]
def _load_locale_template(self) -> Dict[str, str]:
"""Load language template from JSON file."""
template_path = Path(self.LOCALE_TEMPLATE_FILE)
if not template_path.exists():
raise FileNotFoundError(
f"Language template file not found: {template_path}"
)
with open(template_path, 'r', encoding='utf-8') as file:
return json.load(file)
def _load_language_file(self, lang_id: str) -> Dict[str, str]:
"""Load specific language file."""
lang_path = Path(f"{lang_id}.json")
if not lang_path.exists():
raise FileNotFoundError(f"Language file not found: {lang_path}")
with open(lang_path, 'r', encoding='utf-8') as file:
return json.load(file)
def _save_language_file(self, lang_id: str, lang_data: Dict[str, str]) -> None:
"""Save language file with proper formatting."""
lang_path = Path(f"{lang_id}.json")
with open(lang_path, 'w', encoding='utf-8') as file:
json.dump(
lang_data,
file,
ensure_ascii=False,
indent='\t',
sort_keys=True
)
def get_language_ids(self) -> List[str]:
"""Get list of all available language IDs."""
return [lang.lang_id for lang in self.supported_locales]
def validate_language_id(self, lang_id: str) -> Tuple[bool, str]:
"""
Validate language ID.
Returns:
Tuple of (is_valid, error_message)
"""
available_ids = self.get_language_ids()
if lang_id not in available_ids:
return False, f"'{lang_id}' is not a valid language ID"
return True, ""
def analyze_translations(self, lang_id: str) -> Tuple[List[str], List[str], TranslationStats]:
"""
Analyze translation file for missing and deprecated keys.
Returns:
Tuple of (missing_keys, deprecated_keys, stats)
"""
try:
lang_file = self._load_language_file(lang_id)
except FileNotFoundError:
print(
f"[!] Language file {lang_id}.json not found. Creating new file..."
)
lang_file = {}
# Find missing translations
missing_translations = [
key for key in self.locale_template
if key not in lang_file or not lang_file[key].strip()
]
# Find deprecated translations
deprecated_translations = [
key for key in lang_file
if key not in self.locale_template
]
# Calculate statistics
stats = TranslationStats(
missing_count=len(missing_translations),
deprecated_count=len(deprecated_translations),
total_keys=len(self.locale_template)
)
return missing_translations, deprecated_translations, stats
def fix_translation_file(self, lang_id: str) -> TranslationStats:
"""
Fix translation file by adding missing keys and removing deprecated ones.
Returns:
TranslationStats with the changes made
"""
try:
lang_file = self._load_language_file(lang_id)
except FileNotFoundError:
lang_file = {}
missing_translations, deprecated_translations, stats = self.analyze_translations(
lang_id
)
# Create new language file
new_lang_file = dict(lang_file)
# Add missing translations with empty values
for key in missing_translations:
new_lang_file[key] = ""
# Remove deprecated translations
for key in deprecated_translations:
new_lang_file.pop(key, None)
# Save updated file
self._save_language_file(lang_id, new_lang_file)
return stats
def display_header(self) -> None:
"""Display application header."""
title = "WGDashboard Locale File Manager [by @donaldzou]"
border = "=" * (len(title) + 4)
print(border)
print(f"| {title} |")
print(border)
print()
def display_available_languages(self) -> None:
"""Display available languages in a formatted table."""
print("[i] Available languages")
print("-" * 50)
for lang in self.supported_locales:
print(f"{lang.lang_name:<25} | {lang.lang_id}")
print()
def display_translation_results(self, lang_id: str, stats: TranslationStats) -> None:
"""Display translation verification results."""
print(f"[#] Translation analysis for '{lang_id}'")
print("-" * 50)
print(f" [-] Total keys: {stats.total_keys}")
print(f" [✗] Missing translations: {stats.missing_count}")
print(f" [*] Deprecated translations: {stats.deprecated_count}")
print(f" [✓] Completion: {stats.completion_percentage:.1f}%")
if stats.missing_count > 0 or stats.deprecated_count > 0:
print(f"\n [i] File {lang_id}.json has been updated:")
print(f" • Missing translations added (empty values)")
print(f" • Deprecated translations removed")
else:
print(f"\n Perfect! No issues found in {lang_id}.json")
print()
def get_user_language_choice(self) -> str:
"""Get language choice from user with validation."""
while True:
try:
lang_id = input("[ENTER] Language ID to verify: ").strip()
if not lang_id:
print(" [!] Please enter a valid language ID")
continue
is_valid, error_msg = self.validate_language_id(lang_id)
if not is_valid:
print(f" [✗] {error_msg}")
continue
return lang_id
except KeyboardInterrupt:
print("\n\n[EXIT] Operation cancelled by user")
sys.exit(0)
except EOFError:
print("\n\n[EXIT] Goodbye!")
sys.exit(0)
def run(self) -> None:
"""Main application loop."""
try:
self.display_header()
self.display_available_languages()
while True:
lang_id = self.get_user_language_choice()
print(f"\n[>] Verifying language file: {lang_id}.json")
print("=" * 50)
stats = self.fix_translation_file(lang_id)
self.display_translation_results(lang_id, stats)
except KeyboardInterrupt:
print("\n\n[EXIT] Operation cancelled by user")
sys.exit(0)
except Exception as e:
print(f"\n[✗] Unexpected error: {e}")
sys.exit(1)
def main() -> None:
"""Entry point of the application."""
locale_manager = LocaleManager()
locale_manager.run()
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,134 @@
[
{
"flag": "🇺🇸",
"lang_id": "en-US",
"lang_name": "English (United States)",
"lang_name_localized": "English (United States)"
},
{
"flag": "🇸🇦",
"lang_id": "ar-SA",
"lang_name": "Arabic (Saudi Arabia)",
"lang_name_localized": "العربية (السعودية)"
},
{
"flag": "🇧🇾",
"lang_id": "be-BY",
"lang_name": "Belarusian (Belarus)",
"lang_name_localized": "Беларуская (Беларусь)"
},
{
"flag": "🏴󠁥󠁳󠁣󠁴󠁿",
"lang_id": "ca-ES",
"lang_name": "Catalan (Spain)",
"lang_name_localized": "Català (Espanya)"
},
{
"flag": "🇨🇿",
"lang_id": "cs-CZ",
"lang_name": "Czech (Czech Republic)",
"lang_name_localized": "Česky (Česká republika)"
},
{
"flag": "🇩🇪",
"lang_id": "de-DE",
"lang_name": "German (Germany)",
"lang_name_localized": "Deutsch (Deutschland)"
},
{
"flag": "🇪🇸",
"lang_id": "es-ES",
"lang_name": "Spanish (Spain)",
"lang_name_localized": "Español (España)"
},
{
"flag": "🇮🇷",
"lang_id": "fa-IR",
"lang_name": "Persian (Iran)",
"lang_name_localized": "فارسی (ایران)"
},
{
"flag": "🇨🇦",
"lang_id": "fr-CA",
"lang_name": "French (Canada)",
"lang_name_localized": "Français (Canada)"
},
{
"flag": "🇫🇷",
"lang_id": "fr-FR",
"lang_name": "French (France)",
"lang_name_localized": "Français (France)"
},
{
"flag": "🇮🇹",
"lang_id": "it-IT",
"lang_name": "Italian (Italy)",
"lang_name_localized": "Italiano (Italia)"
},
{
"flag": "🇯🇵",
"lang_id": "ja-JP",
"lang_name": "Japanese (Japan)",
"lang_name_localized": "日本語 (日本)"
},
{
"flag": "🇰🇷",
"lang_id": "ko-KR",
"lang_name": "Korean (South Korea)",
"lang_name_localized": "한국어 (대한민국)"
},
{
"flag": "🇳🇱",
"lang_id": "nl-NL",
"lang_name": "Dutch (Netherlands)",
"lang_name_localized": "Nederlands (Nederland)"
},
{
"flag": "🇵🇱",
"lang_id": "pl-PL",
"lang_name": "Polish (Poland)",
"lang_name_localized": "Polski (Polska)"
},
{
"flag": "🇷🇺",
"lang_id": "ru-RU",
"lang_name": "Russian (Russia)",
"lang_name_localized": "Русский (Россия)"
},
{
"flag": "🇸🇪",
"lang_id": "sv-SE",
"lang_name": "Swedish (Sweden)",
"lang_name_localized": "Svenska (Sverige)"
},
{
"flag": "🇹🇭",
"lang_id": "th-TH",
"lang_name": "Thai (Thailand)",
"lang_name_localized": "ภาษาไทย (ประเทศไทย)"
},
{
"flag": "🇹🇷",
"lang_id": "tr-TR",
"lang_name": "Turkish (Turkey)",
"lang_name_localized": "Türkçe (Türkiye)"
},
{
"flag": "🇺🇦",
"lang_id": "uk-UA",
"lang_name": "Ukrainian (Ukraine)",
"lang_name_localized": "Українська (Україна)"
},
{
"flag": "🇨🇳",
"lang_id": "zh-CN",
"lang_name": "Chinese (Simplified, China)",
"lang_name_localized": "中文(简体,中国)"
},
{
"flag": "🇭🇰",
"lang_id": "zh-HK",
"lang_name": "Chinese (Traditional, Hong Kong)",
"lang_name_localized": "中文(繁體,香港)"
}
]