diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d39cd30..9a817590 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # PrivateBin version history ## 1.6.3 (not yet released) +* ADDED: Translations for Romanian * ADDED: Detect and report on damaged pastes (#1218) * CHANGED: Upgrading libraries to: zlib 1.3 * FIXED: Support more types of valid URLs for shorteners, incl. IDN ones (#1224) diff --git a/CREDITS.md b/CREDITS.md index 59e7892f..e77348d4 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -65,3 +65,4 @@ * jaideejung007 - Thai * Nicolas Le Gall - Japanese * lazerns - Arabic +* Edward205 - Romanian diff --git a/i18n/ro.json b/i18n/ro.json new file mode 100644 index 00000000..169e57b3 --- /dev/null +++ b/i18n/ro.json @@ -0,0 +1,218 @@ +{ + "PrivateBin": "PrivateBin", + "%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "%s este un pastebin online, minimalist și cu sursă deschisă unde serverul are zero acces la datele introduse. Datele sunt criptate/decriptate %sîn browser%s folosind AES cu 256 de biți.", + "More information on the project page.": "Mai multe informații pe pagina proiectului.", + "Because ignorance is bliss": "Ignoranța este o binecuvântare", + "Paste does not exist, has expired or has been deleted.": "Paste-ul nu există, a expirat sau a fost șters.", + "%s requires php %s or above to work. Sorry.": "%s necesită php %s sau mai nou pentru a funcționa. Scuze.", + "%s requires configuration section [%s] to be present in configuration file.": "%s necesită ca secțiunea de configurare [%s] să fie prezentă în fișierul de configurare.", + "Please wait %d seconds between each post.": [ + "Vă rugăm să așteptați %d secundă între fiecare postare", + "Vă rugăm să așteptați %d secunde între fiecare postare", + "Vă rugăm să așteptați %d de secunde între fiecare postare", + "Please wait %d seconds between each post. (3rd plural)", + "Please wait %d seconds between each post. (4th plural)", + "Please wait %d seconds between each post. (5th plural)" + ], + "Paste is limited to %s of encrypted data.": "Paste-ul este limitat la %s de date criptate.", + "Invalid data.": "Date invalide.", + "You are unlucky. Try again.": "Ați avut ghinion. Încercați din nou.", + "Error saving comment. Sorry.": "Eroare la salvarea comentariului. Ne pare rău.", + "Error saving paste. Sorry.": "Eroare la salvarea paste-ului. Ne pare rău.", + "Invalid paste ID.": "ID paste invalid.", + "Paste is not of burn-after-reading type.": "Paste-ul nu se șterge după citire.", + "Wrong deletion token. Paste was not deleted.": "Token de ștergere incorect. Paste-ul nu a fost șters.", + "Paste was properly deleted.": "Paste-ul a fost șters cu succes.", + "JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript este necesar pentru ca %s să funcționeze. Ne cerem scuze pentru neplăceri.", + "%s requires a modern browser to work.": "%s necesită un browser modern pentru a funcționa.", + "New": "Nou", + "Send": "Trimiteți", + "Clone": "Clonați", + "Raw text": "Text brut", + "Expires": "Expiră", + "Burn after reading": "Ștergere după citire", + "Open discussion": "Deschideți discuția", + "Password (recommended)": "Parolă (recomandată)", + "Discussion": "Discuție", + "Toggle navigation": "Comutați navigarea", + "%d seconds": [ + "%d secundă", + "%d secunde", + "%d de secunde", + "%d seconds (3rd plural)", + "%d seconds (4th plural)", + "%d seconds (5th plural)" + ], + "%d minutes": [ + "%d minut", + "%d minute", + "%d de minute", + "%d minutes (3rd plural)", + "%d minutes (4th plural)", + "%d minutes (5th plural)" + ], + "%d hours": [ + "%d oră", + "%d ore", + "%d de ore", + "%d hours (3rd plural)", + "%d hours (4th plural)", + "%d hours (5th plural)" + ], + "%d days": [ + "%d zi", + "%d zile", + "%d de zile", + "%d days (3rd plural)", + "%d days (4th plural)", + "%d days (5th plural)" + ], + "%d weeks": [ + "%d week (singular)", + "%d săptămână", + "%d săptămâni", + "%d de săptămâni", + "%d weeks (4th plural)", + "%d weeks (5th plural)" + ], + "%d months": [ + "%d lună", + "%d luni", + "%d de luni", + "%d months (3rd plural)", + "%d months (4th plural)", + "%d months (5th plural)" + ], + "%d years": [ + "%d an", + "%d ani", + "%d de ani", + "%d years (3rd plural)", + "%d years (4th plural)", + "%d years (5th plural)" + ], + "Never": "Niciodată", + "Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Notă: Acesta este un serviciu de test: Datele ar putea fi șterse oricând. Vor muri niște pisicuțe dacă abuzați acest serviciu.", + "This document will expire in %d seconds.": [ + "Acest document va expira în %d secundă.", + "Acest document va expira în %d secunde.", + "Acest document va expira în %d de secunde.", + "This document will expire in %d seconds. (3rd plural)", + "This document will expire in %d seconds. (4th plural)", + "This document will expire in %d seconds. (5th plural)" + ], + "This document will expire in %d minutes.": [ + "This document will expire in %d minute. (singular)", + "This document will expire in %d minutes. (1st plural)", + "This document will expire in %d minutes. (2nd plural)", + "This document will expire in %d minutes. (3rd plural)", + "This document will expire in %d minutes. (4th plural)", + "This document will expire in %d minutes. (5th plural)" + ], + "This document will expire in %d hours.": [ + "Acest document va expira în %d oră.", + "Acest document va expira în %d ore.", + "Acest document va expira în %d de ore.", + "This document will expire in %d hours. (3rd plural)", + "This document will expire in %d hours. (4th plural)", + "This document will expire in %d hours. (5th plural)" + ], + "This document will expire in %d days.": [ + "Acest document va expira în %d zi.", + "Acest document va expira în %d zile.", + "Acest document va expira în %d de zile.", + "This document will expire in %d days. (3rd plural)", + "This document will expire in %d days. (4th plural)", + "This document will expire in %d days. (5th plural)" + ], + "This document will expire in %d months.": [ + "Acest document va expira în %d lună.", + "Acest document va expira în %d luni.", + "Acest document va expira în %d de luni.", + "This document will expire in %d months. (3rd plural)", + "This document will expire in %d months. (4th plural)", + "This document will expire in %d months. (5th plural)" + ], + "Please enter the password for this paste:": "Va rugăm să introduceți parola pentru acest paste:", + "Could not decrypt data (Wrong key?)": "Nu s-au putut decripta datele (Cheie gresită?)", + "Could not delete the paste, it was not stored in burn after reading mode.": "Nu s-a putut șterge paste-ul, nu a fost stocat în modul de ștergere după citire.", + "FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "NUMAI PENTRU OCHII DVS. Nu închideți această fereastră, acest mesaj nu poate fi afișat din nou.", + "Could not decrypt comment; Wrong key?": "Nu s-a putut decripta comentariul; Cheie greșită?", + "Reply": "Răspundeți", + "Anonymous": "Anonim", + "Avatar generated from IP address": "Avatar generat din adresa IP", + "Add comment": "Adăugați un comentariu", + "Optional nickname…": "Poreclă opțională…", + "Post comment": "Postați comentariul", + "Sending comment…": "Se trimite comentariul…", + "Comment posted.": "Comentariul a fost postat.", + "Could not refresh display: %s": "Nu s-a putut actualiza afișarea: %s", + "unknown status": "stare necunoscută", + "server error or not responding": "eroare de server sau nu răspunde", + "Could not post comment: %s": "Nu s-a putut posta comentariul: %s", + "Sending paste…": "Se trimite paste-ul…", + "Your paste is %s (Hit [Ctrl]+[c] to copy)": "Paste-ul dvs. este %s (Apăsați [Ctrl]+[c] pentru a copia)", + "Delete data": "Ștergeți datele", + "Could not create paste: %s": "Nu s-a putut crea paste-ul: %s", + "Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Nu s-a putut decripta paste-ul: Cheia de decriptare lipsește din URL (Ați folosit un redirector sau un scurtător de URL care a tăiat o parte din URL?)", + "B": "B", + "KiB": "KiB", + "MiB": "MiB", + "GiB": "GiB", + "TiB": "TiB", + "PiB": "PiB", + "EiB": "EiB", + "ZiB": "ZiB", + "YiB": "YiB", + "Format": "Formatare", + "Plain Text": "Text neformatat", + "Source Code": "Cod sursă", + "Markdown": "Markdown", + "Download attachment": "Descărcați fișierul atașat", + "Cloned: '%s'": "S-a clonat: '%s'", + "The cloned file '%s' was attached to this paste.": "Fișierul clonat '%s' a fost atașat la acest paste.", + "Attach a file": "Atașați un fișier", + "alternatively drag & drop a file or paste an image from the clipboard": "alternativ, trageți și plasați un fișier sau lipiți o imagine din clipboard", + "File too large, to display a preview. Please download the attachment.": "Fișierul este prea mare pentru a afișa o previzualizare. Vă rugăm să descărcaţi fișierul.", + "Remove attachment": "Eliminați fișierul atașat", + "Your browser does not support uploading encrypted files. Please use a newer browser.": "Browserul dvs. nu acceptă încărcarea fișierelor criptate. Vă rugăm să folosiți un browser mai nou.", + "Invalid attachment.": "Fișier invalid.", + "Options": "Opţiuni", + "Shorten URL": "Scurtați URL-ul", + "Editor": "Editor", + "Preview": "Previzualizare", + "%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s necesită ca PATH să se termine cu \"%s\". Vă rugăm să actualizați PATH în index.php.", + "Decrypt": "Decriptare", + "Enter password": "Introduceţi parola", + "Loading…": "Se încarcă…", + "Decrypting paste…": "Se decriptează paste-ul…", + "Preparing new paste…": "Se pregătește un paste nou…", + "In case this message never disappears please have a look at this FAQ for information to troubleshoot.": "În cazul în care acest mesaj nu dispare niciodată, vă rugăm să aruncaţi o privire la acest FAQ pentru informații de depanare.", + "+++ no paste text +++": "+++ fără text +++", + "Could not get paste data: %s": "Nu s-a putut obține datele paste-ului: %s", + "QR code": "Cod QR", + "This website is using an insecure HTTP connection! Please use it only for testing.": "Acest website folosește o conexiune HTTP nesigură! Vă rugăm să îl folosiți doar pentru teste.", + "For more information see this FAQ entry.": "Pentru mai multe informații a se vedea secțiunea FAQ.", + "Your browser may require an HTTPS connection to support the WebCrypto API. Try switching to HTTPS.": "Este posibil ca browserul dvs. să necesite o conexiune HTTPS pentru a suporta API-ul WebCrypto. Încercați să comutați la HTTPS.", + "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Browserul dvs. nu acceptă WebAssembly folosit pentru compresia zlib. Puteți crea documente necompresate, dar nu le puteți citi pe cele compresate.", + "waiting on user to provide a password": "se așteaptă ca utilizatorul să furnizeze o parolă", + "Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.": "Nu s-au putut decripta datele. Ați introdus parola greșită? Reîncercați folosind butonul de sus.", + "Retry": "Reîncercați", + "Showing raw text…": "Se afișează textul brut…", + "Notice:": "Observaţie:", + "This link will expire after %s.": "Acest link va expira după %s.", + "This link can only be accessed once, do not use back or refresh button in your browser.": "Acest link poate fi accesat o singură dată, nu folosiți butonul înapoi sau reîmprospătare din browserul dvs.", + "Link:": "Link:", + "Recipient may become aware of your timezone, convert time to UTC?": "Destinatarul vă poate afla fusul dvs. orar, convertiți timpul în UTC?", + "Use Current Timezone": "Se folosește fusul orar actual", + "Convert To UTC": "Convertire la UTC", + "Close": "Închideți", + "Encrypted note on %s": "Notă criptată pe %s", + "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Accesați acest link pentru a vedea nota. Nota poate fi accesată de către oricine care are acest URL.", + "URL shortener may expose your decrypt key in URL.": "Scurtătorul de URL ar putea să vă expună cheia de decriptare din URL.", + "Save paste": "Salvați paste-ul", + "Your IP is not authorized to create pastes.": "Adresa dvs. IP nu este autorizată să creeze paste-uri.", + "Trying to shorten a URL that isn't pointing at our instance.": "Încercarea de a scurta un URL care nu direcționează spre instanța noastră.", + "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Eroare la apelarea YOURLS. Probabil o problemă de configurare, cum ar fi \"apiurl\" sau \"signature\" greșite sau lipsă.", + "Error parsing YOURLS response.": "Eroare la analizarea răspunsului YOURLS." +} diff --git a/js/privatebin.js b/js/privatebin.js index 9196ca5f..518cf32a 100644 --- a/js/privatebin.js +++ b/js/privatebin.js @@ -627,7 +627,7 @@ jQuery.PrivateBin = (function($, RawDeflate) { * @prop {string[]} * @readonly */ - const supportedLanguages = ['ar', 'bg', 'ca', 'co', 'cs', 'de', 'el', 'es', 'et', 'fi', 'fr', 'he', 'hu', 'id', 'it', 'ja', 'jbo', 'lt', 'no', 'nl', 'pl', 'pt', 'oc', 'ru', 'sk', 'sl', 'th', 'tr', 'uk', 'zh']; + const supportedLanguages = ['ar', 'bg', 'ca', 'co', 'cs', 'de', 'el', 'es', 'et', 'fi', 'fr', 'he', 'hu', 'id', 'it', 'ja', 'jbo', 'lt', 'no', 'nl', 'pl', 'pt', 'oc', 'ro', 'ru', 'sk', 'sl', 'th', 'tr', 'uk', 'zh']; /** * built in language @@ -836,6 +836,8 @@ jQuery.PrivateBin = (function($, RawDeflate) { return n % 10 === 1 && n % 100 !== 11 ? 0 : ((n % 10 >= 2 && n % 100 < 10 || n % 100 >= 20) ? 1 : 2); case 'pl': return n === 1 ? 0 : (n % 10 >= 2 && n %10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2); + case 'ro': + return n === 1 ? 0 : ((n === 0 || (n % 100 > 0 && n % 100 < 20)) ? 1 : 2); case 'ru': case 'uk': return n % 10 === 1 && n % 100 !== 11 ? 0 : (n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2); diff --git a/lib/I18n.php b/lib/I18n.php index 22142c00..77500aff 100644 --- a/lib/I18n.php +++ b/lib/I18n.php @@ -356,6 +356,8 @@ class I18n return $n % 10 === 1 && $n % 100 !== 11 ? 0 : (($n % 10 >= 2 && $n % 100 < 10 || $n % 100 >= 20) ? 1 : 2); case 'pl': return $n === 1 ? 0 : ($n % 10 >= 2 && $n % 10 <= 4 && ($n % 100 < 10 || $n % 100 >= 20) ? 1 : 2); + case 'ro': + return $n === 1 ? 0 : (($n === 0 || ($n % 100 > 0 && $n % 100 < 20)) ? 1 : 2); case 'ru': case 'uk': return $n % 10 === 1 && $n % 100 != 11 ? 0 : ($n % 10 >= 2 && $n % 10 <= 4 && ($n % 100 < 10 || $n % 100 >= 20) ? 1 : 2); diff --git a/tpl/bootstrap.php b/tpl/bootstrap.php index 0cf27f5f..6b6efa05 100644 --- a/tpl/bootstrap.php +++ b/tpl/bootstrap.php @@ -73,7 +73,7 @@ endif; ?> - + diff --git a/tpl/page.php b/tpl/page.php index 7e62f37e..7acf2bb5 100644 --- a/tpl/page.php +++ b/tpl/page.php @@ -51,7 +51,7 @@ endif; ?> - +