diff --git a/js/components/locales/manifest.json b/js/components/locales/manifest.json
index ad8a20e3..cfc4a62a 100644
--- a/js/components/locales/manifest.json
+++ b/js/components/locales/manifest.json
@@ -5,7 +5,8 @@
"es-ES",
"zh-Hant",
"fr-FR",
- "zh-Hans"
+ "zh-Hans",
+ "ro-RO"
],
"fallbackChain": ["en-US"],
"languages": {
@@ -44,6 +45,12 @@
"name": "Chinese (Simplified)",
"nativeName": "简体中文",
"flag": "汉"
+ },
+ "ro-RO": {
+ "code": "ro-RO",
+ "name": "Romanian",
+ "nativeName": "Română",
+ "flag": "🇷🇴"
}
}
}
diff --git a/js/components/locales/ro-RO/common.ftl b/js/components/locales/ro-RO/common.ftl
new file mode 100644
index 00000000..db4e0ccb
--- /dev/null
+++ b/js/components/locales/ro-RO/common.ftl
@@ -0,0 +1,74 @@
+# Common UI Translations - English (US)
+
+## General UI
+loading = Se încarcă...
+error = Eroare
+cancel = Anulare
+confirm = Confirmare
+close = Închidere
+open = Deschidere
+ok = OK
+yes = Da
+no = Nu
+continue = Continuare
+back = Înapoi
+next = Următorul
+finish = Finalizare
+
+## Actions
+save = Salvare
+delete = Ștergere
+edit = Editare
+create = Creare
+update = Actualizare
+refresh = Reîmprospătare
+
+## Status Messages
+success = Succes
+warning = Avertisment
+info = Informație
+
+## Input Placeholders
+search-placeholder = Căutare...
+message-input = Introduceți-vă mesajul...
+
+## Authentication & Access
+please-log-in-to-access-this-page = Vă rugăm să vă conectați pentru a accesa această pagină
+go-to-settings = Mergeți la Setări
+go-back = Mergeți înapoi
+
+## Demo and Testing
+welcome-user = Bun venit, { $username }!
+notification-count = { $count ->
+ [0] Nici o notificare
+ [1] O notificare
+ *[other] { $count } (de) notificări
+}
+
+## Offline User
+user-offline = utilizatorul este offline
+user-offline-message = { $source ->
+ [streamer] Se pare că <1>@{ $handle } este offline1>, dar recomandă să vizionați:
+ *[default] Se pare că <1>@{ $handle } este offline1>, dar vă recomandăm să vizionați:
+}
+user-offline-no-recommendations =
+ Se pare că <1>@{ $handle } este offline1> acum.
+ Reveniți mai târziu.
+streaming-title = transmisie în direct { $title }
+viewer-count = { $count ->
+ [0] 0 vizionări
+ [1] 1 vizionare
+ *[other] { $count } (de) vizionări
+}
+
+## PDS Host Selector
+pds-selector-title = Nou în Atmosferă?
+pds-selector-description = Va trebui să selectați un PDS (Personal Data Server) pentru a accesa aplicațiile de pe Atmosphere, cum ar fi Bluesky, Tangled și Spark.
+pds-selector-custom-label = Alt PDS
+pds-selector-custom-description = Introduceți adresa URL a propriei gazde PDS
+pds-selector-custom-url-label = URL PDS personalizat
+pds-selector-custom-url-placeholder = https://pds.exemplu.ro
+pds-selector-learn-more = Aflați mai multe despre găzduirea proprie
+pds-selector-info = Fiecare gazdă are propriile politici și standarde de fiabilitate. Datele dvs. ATProto se află pe gazda pe care o alegeți și le puteți migra ulterior. Notă: Streamplace are propriile reguli de moderare - accesul dvs. poate fi interzis pe Streamplace indiferent de gazda pe care o alegeți.
+pds-selector-read-policies = Citiți Termenii și condițiile și Politica de confidențialitate ale { $label } înainte de a continua.
+pds-selector-handle-policy-checkbox = Am citit și sunt de acord cu politica de gestionare
diff --git a/js/components/locales/ro-RO/settings.ftl b/js/components/locales/ro-RO/settings.ftl
new file mode 100644
index 00000000..572cd560
--- /dev/null
+++ b/js/components/locales/ro-RO/settings.ftl
@@ -0,0 +1,233 @@
+# Settings Page Translations - Romanian (Romania)
+
+## App Version
+app-version = Streamplace v{ $version }
+download-new-update = Descărcați noua actualizare
+check-for-updates = Căutați actualizări
+bundled-runtype = Bundled
+ota-runtype = Over-the-Air (OTA)
+recovery-runtype = Mod de recuperare
+
+modal-latest-version = Aveți cea mai recentă versiune.
+modal-no-update-available = Aveți cea mai recentă versiune de Streamplace, ura!
+modal-update-available-title = Actualizare disponibilă
+modal-update-available-description = O nouă versiune de Streamplace este gata de descărcare
+modal-update-failed = Căutarea actualizării a eșuat. Este posibil să fie nevoie să actualizați aplicația prin { $store }.
+modal-update-failed-title = Actualizare eșuată
+modal-update-failed-description = Căutarea actualizării a eșuat. Este posibil să fie nevoie să actualizați aplicația prin { $store }.
+button-reload-app-on-update = Aplicați actualizarea (va reîncărca aplicația)
+
+## Custom Node Settings
+use-custom-node = Utilizați nodul personalizat
+default-url = Default: { $url }
+enter-custom-node-url = Introduceți adresa URL a nodului personalizat
+save-button = SALVARE
+
+## Language Settings
+language-selection = Limbă
+language-selection-description = Alegeți-vă limba preferată
+input-search-languages = Căutați limbi...
+help-translate = Ajutați-ne să traducem Streamplace
+help-translate-description = Căutăm voluntari care să ne ajute la traducerea Streamplace în mai multe limbi. Dacă sunteți interesați, vă rugăm să ne contactați pe Discord sau GitHub!
+currently-translating = Traducerile sunt pe drum
+currently-translating-description = Este posibil ca unele părți ale aplicației să pară incomplete. Vă mulțumim pentru răbdare!
+
+## Debug Recording
+debug-recording-title = Permiteți-i lui { $host } să înregistreze transmisiunea live pentru depanare și îmbunătățirea serviciului
+debug-recording-description = Opțional
+
+## Key Management
+manage-keys = Gestionare Chei
+
+## Settings Page Specific
+settings-title = Setări
+
+## Navigation Categories
+about = Despre
+account = Cont
+advanced = Complex
+danmu = Danmu
+developer = Dezvoltator
+languages = Limbi
+privacy-security = Confidențialitate și securitate
+streaming = Streaming
+
+## Common Actions
+cancel = Anulare
+create = Creare
+delete = Ștergere
+refresh = Reîmprospătare
+save-button = Salvare
+sign-in = Conectare
+update = Actualizare
+log-out = Deconectare
+optional = opțional
+
+## Account Settings
+account-greeting = Hei, @{ $handle }.
+edit-profile-bluesky = Editare profil (pe Bluesky)
+change-name-color = Schimbați culoarea numelui
+
+## Key Management
+key-management = Gestionare chei
+key-manager = Manager cheie
+manage-keys = Gestionare chei
+your-stream-pubkeys = Cheile publice ale transmisiunii dvs.
+no-keys = Nicio cheie configurată
+pubkey-description = Cheile publice sunt asociate cu cheile de transmisiune (utilizate în software-ul de streaming) pentru a semna și verifica transmisiunea.
+keys-count = { $count ->
+ [one] { $count } cheie
+ *[other] { $count } chei
+}
+
+## Recommendations
+recommendations = Recomandări
+manage-recommendations = Gestionați recomandările
+recommendations-to-others = Recomandări pentru Alții
+recommendations-description = Distribuie până la 8 streameri pe care îi recomandați spectatorilor dvs.
+no-recommendations-yet = Nu au fost configurate recomandări încă
+add-recommendation = Adăugare recomandare
+streamer-did = DID Streamer
+recommendations-count = { $count ->
+ [one] { $count } recomandare
+ *[other] { $count } (de) recomandări
+}
+
+## Webhook Management
+webhooks = Webhook-uri
+webhook-integrations = Integrari Webhook
+webhook-integrations-description = Conectați servicii externe pentru a primi actualizări în timp real despre transmisiunile dvs.
+create-webhook = Creare Webhook
+edit-webhook = Editare Webhook
+delete-webhook = Ștergere Webhook
+no-webhooks-yet = Nu sunt încă configurate webhook-uri
+failed-load-webhooks = Nu s-au putut încărca webhook-urile
+webhook-will-no-longer-receive-events = Acest webhook nu va mai primi evenimente
+create-first-webhook-description = Creați-vă primul webhook pentru a începe să primiți evenimente de transmisiune
+example-captain-hook = Captain Hook
+webhooks-count = { $count ->
+ [one] { $count } webhook
+ *[other] { $count } (de) webhook-uri
+}
+
+## Webhook Events
+activates-on = Se activează la:
+events = Evenimente
+events-livestream = Evenimente în transmisiuni
+events-chat = Evenimente de conversașie
+untitled-webhook = Webhook fără titlu
+inactive = Inactiv
+active = Activ
+
+## Multistreaming
+multistream = Multi-transmisiune
+multistream-targets = Ținte multi-transmisiune
+multistream-description = Distribuie automat transmisiunile tale live Streamplace către alte servicii de streaming precum Twitch sau YouTube.
+create-multistream-target = Creare țintă multi-transmisiune
+untitled-multistream-target = Țintă fără titlu
+failed-load-multistream-targets = Nu s-au putut încărca țintele multi-transmisiune. Vă rugăm să încercați din nou.
+failed-toggle-multistream-target = Nu s-a putut comuta ținta multi-transmisiune. Vă rugăm să încercați din nou.
+failed-delete-multistream-target = Ștergerea țintei multi-transmisiune nu a reușit. Încercați din nou.
+no-multistream-targets-yet = Nu există încă ținte!
+multistream-targets-count = { $count ->
+ [one] { $count } țintă
+ *[other] { $count } (de) ținte
+}
+multistream-delete-target-confirmation = Sunteți sigur că vreți să ștergeți „{ $target }”?
+this-action-cannot-be-undone = Această acțiune nu poate fi anulată.
+rtmp-target-name = Țintă RTMP
+rtmp-target-url = URL RTMP
+rtmp-target-name-placeholder = Ținta mea transmisiune
+multistream-create-target = Creare țintă
+multistream-edit-target = Editare țintă
+created = creată
+status = stare
+
+## Debug Recording
+debug-recording = Depanare înregistrare
+
+## Danmu Settings
+danmu = Danmu
+danmu-enabled = Activare Danmu
+danmu-enabled-description = Afișați mesajele din chatul live ca comentarii plutitoare pe ecran
+danmu-opacity = Opacitate
+danmu-speed = Viteză
+danmu-lane-count = Număr de benzi
+danmu-max-messages = Mesaje maxime
+
+## General
+app-version-description = Nu sunt disponibile actualizări în acest moment
+confirm-delete = Sigur vreți să ștergeți asta?
+action-cannot-be-undone = Această acțiune nu poate fi anulată
+name-optional = Nume (opțional)
+deleting = Se șterge...
+saving = Se salvează...
+go-to-dashboard = Mergeți la tabloul de bord
+need-setup-live-dashboard = Trebuie să configurați mai întâi transmisiunile? Vizitați tabloul de bord al transmisiunilor
+no-languages-found = Nu s-au găsit limbi
+
+## Branding Administration
+branding = Branding
+branding-admin = Administrarea brandingului
+branding-admin-description = Personalizați-vă instanța Streamplace. Rețineți că propagarea setărilor poate dura câteva ore.
+branding-login-required = Vă rugăm să vă conectați pentru a gestiona brandingul
+branding-configuration = Configurare
+branding-text-settings = Setări text
+branding-colors = Culori
+branding-legal-links = Link-uri legale
+branding-images = Imagini
+
+## Branding Fields
+branding-broadcaster-did = DID radiodifuzor
+branding-broadcaster-did-description = Lăsați gol pentru a utiliza valorile implicite ale serverului
+branding-site-title = Titlul site-ului
+branding-site-title-placeholder = Introduceți un nou titlu de site
+branding-site-description = Descrierea site-ului
+branding-site-description-placeholder = Introduceți descrierea site-ului
+branding-default-streamer = Streamer implicit
+branding-default-streamer-none = Nimic
+branding-default-streamer-placeholder = did:plc:...
+branding-clear-default-streamer = Ștergeți Streamerul implicit
+branding-primary-color = Culoare primară
+branding-primary-color-placeholder = #6366f1
+branding-accent-color = Culoare de accent
+branding-accent-color-placeholder = #8b5cf6
+branding-main-logo = Logo principal
+branding-main-logo-description = SVG, PNG, or JPEG (max 500KB)
+branding-favicon = Favicon
+branding-favicon-description = SVG, PNG, sau ICO (maxim 100KB)
+branding-sidebar-bg = Imagine de fundal din bara laterală
+branding-sidebar-bg-description = SVG, PNG sau JPEG (maxim 500kb) - apare aliniat la partea de jos a barei laterale, pe lățime completă. Încărcați o imagine cu opacitate pentru cele mai bune rezultate, deoarece în prezent nu există o opțiune separată de opacitate.
+branding-current = Current: { $value }
+branding-dimensions = { $height } x { $width }
+
+## Branding Actions
+branding-upload-logo = Încărcare logo
+branding-delete-logo = Ștergere logo
+branding-upload-favicon = Încărcare Favicon
+branding-delete-favicon = Ștergere Favicon
+branding-upload-background = Încărcare imagine de fundal
+branding-delete-background = Ștergere imagine de fundal
+branding-web-only = Încărcarea imaginilor este disponibilă doar pe web.
+
+## Branding Legal Links
+refresh-branding = Actualizați elementele de branding
+branding-add-legal-link = Adăugați link legal
+branding-edit-legal-link = Editați linkul legal
+branding-legal-link-text-placeholder = Textul linkului (de exemplu, Politica de confidențialitate)
+branding-legal-link-url-placeholder = Adresa URL (de ex., https://example.com/privacy)
+add = Adăugare
+edit = Editare
+
+## Branding Toast Messages
+branding-not-authenticated = Vă rugăm să vă conectați mai întâi
+branding-empty-value = Vă rugăm să introduceți o valoare
+branding-update-success = { $key } a fost actualizat cu succes
+branding-upload-success = { $key } a fost încărcat cu succes
+branding-delete-success = { $key } a fost șters cu succes
+branding-upload-failed = Încărcare eșuată
+branding-delete-failed = Ștergere eșuată
+branding-not-available = Încărcarea de fișiere este disponibilă doar pe web.
+
+## Navigation Categories (About Page)
+node-legal-documents = Documente specifice radiodifuzorului