From 921ac30f05604108421e1f1d045614c19b8321ae Mon Sep 17 00:00:00 2001 From: vmikhalevskii Date: Mon, 14 Sep 2026 16:48:19 +0300 Subject: [PATCH] feat: add Romanian localization --- apps/mobile/app/_layout.tsx | 12 +- i18n/mobile/app/ro.json | 98 +++++++++ i18n/mobile/auth/ro.json | 25 +++ i18n/mobile/chat/ro.json | 195 ++++++++++++++++++ i18n/mobile/folder/ro.json | 55 +++++ i18n/mobile/profile/ro.json | 15 ++ i18n/mobile/shared/ro.json | 115 +++++++++++ libs/shared/utils/config/src/constants.ts | 1 + .../utils/config/src/enums/language-code.ts | 1 + 9 files changed, 515 insertions(+), 2 deletions(-) create mode 100644 i18n/mobile/app/ro.json create mode 100644 i18n/mobile/auth/ro.json create mode 100644 i18n/mobile/chat/ro.json create mode 100644 i18n/mobile/folder/ro.json create mode 100644 i18n/mobile/profile/ro.json create mode 100644 i18n/mobile/shared/ro.json diff --git a/apps/mobile/app/_layout.tsx b/apps/mobile/app/_layout.tsx index 53bf3bbb..30a8eb5c 100644 --- a/apps/mobile/app/_layout.tsx +++ b/apps/mobile/app/_layout.tsx @@ -25,7 +25,7 @@ import Constants from 'expo-constants'; import { useFonts } from 'expo-font'; import { SplashScreen, Stack, useNavigationContainerRef } from 'expo-router'; import { useMakePlural } from 'i18n-js'; -import { de, en, es, fr, ja, pt, ru, zh } from 'make-plural'; +import { de, en, es, fr, ja, pt, ro, ru, zh } from 'make-plural'; import { ReactElement, useEffect } from 'react'; import { GestureHandlerRootView } from 'react-native-gesture-handler'; import { KeyboardProvider } from 'react-native-keyboard-controller'; @@ -113,9 +113,17 @@ const translations = { ...require('i18n/mobile/profile/ja.json'), ...require('i18n/mobile/folder/ja.json'), }, + [LanguageCode.ROMANIAN]: { + ...require('i18n/mobile/app/ro.json'), + ...require('i18n/mobile/shared/ro.json'), + ...require('i18n/mobile/auth/ro.json'), + ...require('i18n/mobile/chat/ro.json'), + ...require('i18n/mobile/profile/ro.json'), + ...require('i18n/mobile/folder/ro.json'), + }, }; -Object.entries({ en, ru, es, pt, fr, de, zh, ja }).forEach(([locale, pluralizer]) => { +Object.entries({ en, ru, es, pt, fr, de, zh, ja, ro }).forEach(([locale, pluralizer]) => { i18n.pluralization.register(locale, useMakePlural({ pluralizer })); }); diff --git a/i18n/mobile/app/ro.json b/i18n/mobile/app/ro.json new file mode 100644 index 00000000..b9be367a --- /dev/null +++ b/i18n/mobile/app/ro.json @@ -0,0 +1,98 @@ +{ + "APP": { + "CHAT_LIST_SCREEN": { + "TEXT_CHATS": "Conversații" + }, + "SETTINGS_SCREEN": { + "TEXT_SETTINGS": "Profil și setări", + "TEXT_SECTION_GENERAL": "General", + "TEXT_SECTION_PROFILE": "Profil", + "TEXT_SECTION_FEEDBACK": "Feedback", + "TEXT_SECTION_CHATS": "Conversații", + "TEXT_DEFAULT_MODEL": "Model implicit", + "TEXT_DEFAULT_SYSTEM_PROMPT": "Prompt de sistem implicit", + "TEXT_LANGUAGE": "Limbă", + "TEXT_NOT_SET": "Nesetat", + "TEXT_LOAD_ERROR": "Încărcare eșuată", + "TEXT_PROFILE_NAME": "Nume profil", + "TEXT_AVATAR": "Avatar", + "TEXT_CHANGE_PASSWORD": "Schimbă parola", + "TEXT_LOGOUT": "Deconectare", + "TEXT_REPORT_A_BUG": "Raportează o eroare", + "TEXT_RATE_APP": "Evaluează aplicația", + "TEXT_ARCHIVED_CHATS": "Conversații arhivate", + "TEXT_EXPORT_ALL_CHATS": "Exportă toate conversațiile", + "TEXT_ARCHIVE_ALL": "Arhivează tot", + "TEXT_ARCHIVE_ALL_CHATS_TITLE": "Arhivează toate conversațiile", + "TEXT_ARCHIVE_ALL_CHATS_MESSAGE": "Sigur dorești să arhivezi toate conversațiile? Această acțiune nu poate fi anulată.", + "TEXT_DELETE_ALL": "Șterge tot", + "TEXT_DELETE_ALL_CHATS_TITLE": "Șterge toate conversațiile", + "TEXT_DELETE_ALL_CHATS_MESSAGE": "Sigur dorești să ștergi toate conversațiile? Această acțiune nu poate fi anulată.", + "TEXT_ALWAYS_ON_WEB_SEARCH": "Căutare web permanentă", + "TEXT_HAPTIC_FEEDBACK": "Feedback haptic", + "TEXT_ENABLE_MESSAGE_QUEUE": "Activează coada de mesaje", + "TEXT_CHAT_BUBBLE_UI": "Mesaje sub formă de baloane", + "TEXT_TEMPORARY_CHAT_BY_DEFAULT": "Conversație temporară implicit", + "TEXT_RENDER_MARKDOWN_IN_USER_MESSAGE": "Afișează Markdown în mesajele utilizatorului", + "TEXT_MARKDOWN_RENDERER": "Motor de randare Markdown", + "TEXT_MARKDOWN_RENDERER_DEFAULT": "Implicit", + "TEXT_MARKDOWN_RENDERER_NITRO": "Experimental", + "TEXT_APP_VERSION": "Open MobileUI versiunea {{version}}", + "TEXT_APP_AUTHOR": "de Ronas IT", + "PROFILE_AVATAR_SHEET": { + "TEXT_TITLE": "Avatar profil", + "BUTTON_UPLOAD_PROFILE_IMAGE": "Încarcă imagine de profil", + "BUTTON_RESTORE_DEFAULT_AVATAR": "Restabilește avatarul implicit", + "TEXT_IMAGE_TOO_LARGE": "Această imagine este prea mare. Te rugăm să alegi una mai mică", + "TEXT_UPLOAD_FAILED": "Nu s-a putut procesa imaginea. Te rugăm să încerci alta" + }, + "PROFILE_NAME_SHEET": { + "TEXT_TITLE": "Nume profil", + "TEXT_PROFILE_NAME": "Nume profil" + }, + "CHANGE_PASSWORD_SHEET": { + "TEXT_TITLE": "Schimbă parola", + "TEXT_CURRENT_PASSWORD": "Parola actuală", + "TEXT_ENTER_CURRENT_PASSWORD": "Introdu parola actuală", + "TEXT_NEW_PASSWORD": "Parolă nouă", + "TEXT_ENTER_NEW_PASSWORD": "Introdu parola nouă", + "TEXT_CONFIRM_NEW_PASSWORD": "Confirmă parola nouă", + "TEXT_ENTER_CONFIRM_NEW_PASSWORD": "Repetă parola nouă", + "TEXT_PASSWORD_CHANGED": "Parola a fost schimbată" + }, + "DEFAULT_MODEL_SHEET": { + "TEXT_TITLE": "Model implicit", + "TEXT_SEARCH_MODEL": "Caută model", + "TEXT_NO_MODELS": "Nu există modele." + }, + "DEFAULT_SYSTEM_PROMPT_SHEET": { + "TEXT_TITLE": "Prompt de sistem implicit", + "TEXT_LABEL": "Prompt de sistem implicit" + }, + "CONTACT_SUPPORT_SHEET": { + "TEXT_REPORT_BUG": "Raportează o eroare", + "TEXT_YOUR_EMAIL": "Adresa ta de email", + "TEXT_YOUR_MESSAGE": "Mesajul tău", + "TEXT_MESSAGE_SENT": "Îți mulțumim pentru feedback! Mesajul tău a fost trimis cu succes", + "BUTTON_ATTACH_SCREENSHOTS_OR_VIDEO": "Atașează capturi de ecran sau un videoclip", + "TEXT_ATTACHMENTS_LIMIT_REACHED": "Poți atașa până la {{count}} fișiere" + }, + "LANGUAGE_SHEET": { + "TEXT_TITLE": "Limbă" + }, + "MARKDOWN_RENDERER_SHEET": { + "TEXT_TITLE": "Motor de randare Markdown" + }, + "TEXT_DELETE_ACCOUNT": "Șterge contul", + "TEXT_DELETE_ACCOUNT_TITLE": "Sigur dorești să îți ștergi contul?", + "TEXT_DELETE_ACCOUNT_MESSAGE": "Această acțiune va duce la pierderea definitivă a datelor dacă nu ne contactezi în următoarele 30 de zile.", + "BUTTON_DELETE_ACCOUNT": "Da, șterge contul meu", + "BUTTON_DONT_DELETE": "Nu șterge", + "TEXT_ACCOUNT_DELETION_REQUEST": "Cererea ta de ștergere a contului a fost trimisă.", + "TEXT_LOGOUT_TITLE": "Te deconectezi?", + "TEXT_LOGOUT_MESSAGE": "Sigur dorești să te deconectezi?", + "BUTTON_LOGOUT": "Deconectare", + "BUTTON_CANCEL": "Anulează" + } + } +} diff --git a/i18n/mobile/auth/ro.json b/i18n/mobile/auth/ro.json new file mode 100644 index 00000000..f12a5967 --- /dev/null +++ b/i18n/mobile/auth/ro.json @@ -0,0 +1,25 @@ +{ + "AUTH": { + "SIGN_IN": { + "TEXT_TITLE_EXTERNAL": "Conectare", + "TEXT_YOU_LOGGED_IN": "Ești conectat acum.", + "EMAIL_FORM": { + "TEXT_EMAIL_ADDRESS": "Adresă de email", + "TEXT_PASSWORD": "Parolă", + "TEXT_API_URL": "URL API", + "TEXT_ENTER_YOUR_PASSWORD": "Introdu parola", + "BUTTON_SIGN_IN": "Conectare" + }, + "GOOGLE_FORM": { + "BUTTON_CONTINUE_WITH_GOOGLE": "Continuă cu Google" + }, + "OIDC_FORM": { + "BUTTON_CONTINUE_WITH": "Continuă cu {{provider}}" + }, + "OAUTH_WEB_VIEW_MODAL": { + "BUTTON_CLOSE": "Închide", + "TEXT_THIS_SIGN_IN_METHOD_IS_UNAVAILABLE": "Această metodă de conectare nu este disponibilă. Te rugăm să folosești o altă opțiune pentru a continua." + } + } + } +} diff --git a/i18n/mobile/chat/ro.json b/i18n/mobile/chat/ro.json new file mode 100644 index 00000000..d339cece --- /dev/null +++ b/i18n/mobile/chat/ro.json @@ -0,0 +1,195 @@ +{ + "CHAT": { + "CHAT_SCREEN": { + "TEXT_LOADING": "Se încarcă...", + "TEXT_SELECT_A_MODEL": "Selectează un model", + "TEXT_TEMPORARY_CHAT": "Conversație temporară" + }, + "CHAT": { + "TEXT_INPUT_PLACEHOLDER": "Trimite un mesaj", + "TEXT_READ_ONLY": "Doar citire", + "TEXT_MODEL_NOT_SELECTED": "Niciun model selectat", + "TEXT_MESSAGE_QUEUED": "Mesaj adăugat în coadă" + }, + "CHAT_MENU_LIST": { + "PINNED_CHAT_LIST": { + "TEXT_PINNED": "Fixate" + }, + "TEXT_SHARED_WITH_ME": "Partajate cu mine", + "TEXT_MY_FOLDERS": "Folderele mele", + "TEXT_NEW_CHAT": "Conversație nouă", + "TEXT_SEARCH": "Căutare", + "TEXT_THERE_ARE_NO_CHATS": "Nu există conversații" + }, + "SEARCH_CHATS_LIST": { + "TEXT_THERE_ARE_NO_CHATS": "Nu există conversații" + }, + "FORM_CHAT_INPUT": { + "TEXT_MODEL_NOT_SELECTED": "Niciun model selectat", + "ATTACHMENTS_ACTIONS_POPUP": { + "TEXT_CAPTURE": "Fotografiază", + "TEXT_CHOOSE_FROM_GALLERY": "Alege din galerie", + "TEXT_UPLOAD_FILES": "Încarcă fișiere", + "TEXT_YOU_CANNOT_UPLOAD_EMPTY_FILE": "Nu poți încărca un fișier gol." + }, + "TOOL_PERMISSIONS_POPUP": { + "TEXT_FULL_ACCESS": "Acces complet", + "TEXT_ASK_FOR_APPROVAL": "Cere aprobare" + }, + "TOOLS_POPUP": { + "TEXT_TITLE": "Instrumente", + "TEXT_NO_TOOLS_AVAILABLE": "Niciun instrument disponibil", + "TEXT_SIGN_IN_REQUIRED": "{{name}} — conectează-te pe web" + } + }, + "SHARE_CHAT_MODAL": { + "TEXT_SHARE_CHAT": "Partajează conversația", + "TEXT_DESCRIPTION_NOT_SHARED": "Mesajele trimise după crearea linkului nu vor fi partajate. Utilizatorii cu acest URL vor putea vedea conversația partajată.", + "TEXT_DESCRIPTION_SHARED_1": "Ai partajat această conversație", + "TEXT_BEFORE_LINK": "acum", + "TEXT_DESCRIPTION_SHARED_2": "Apasă aici pentru a", + "TEXT_DELETE_LINK": "șterge acest link", + "TEXT_DESCRIPTION_SHARED_3": "și a crea un nou link partajat.", + "BUTTON_COPY_LINK": "Copiază linkul", + "BUTTON_UPDATE_AND_COPY_LINK": "Actualizează și copiază linkul", + "TEXT_LINK_COPIED": "Link copiat în clipboard" + }, + "CREATE_CHAT": { + "TEXT_NEW_CHAT": "Conversație nouă", + "TEXT_PLACEHOLDER": "Cu ce te pot ajuta astăzi?", + "TEXT_MODEL_NOT_SELECTED": "Niciun model selectat", + "TEXT_SELECT_A_MODEL": "Selectează un model", + "SEARCH_MODEL_VIEW": { + "TEXT_SELECT_A_MODEL": "Selectează un model", + "TEXT_SEARCH_MODEL": "Caută model" + }, + "SEARCH_FOLDER_VIEW": { + "TEXT_SEARCH_FOLDER": "Caută folder", + "TEXT_NO_FOLDER": "Fără folder", + "TEXT_CREATE_NEW_FOLDER": "Creează folder nou" + }, + "SUGGESTIONS_LIST": { + "TEXT_SUGGESTED": "Sugestii", + "TEXT_SUGGESTION_TITLE_1": "Ajută-mă să învăț", + "TEXT_SUGGESTION_SUBTITLE_1": "vocabular pentru un examen de admitere la facultate", + "TEXT_SUGGESTION_CONTENT_1": "Ajută-mă să învăț vocabular: scrie-mi o propoziție cu spațiu liber, iar eu voi încerca să aleg varianta corectă.", + "TEXT_SUGGESTION_TITLE_2": "Dă-mi idei", + "TEXT_SUGGESTION_SUBTITLE_2": "despre ce pot face cu desenele copiilor mei", + "TEXT_SUGGESTION_CONTENT_2": "Care sunt 5 idei creative pentru ce aș putea face cu desenele copiilor mei? Nu vreau să le arunc, dar ocupă mult spațiu.", + "TEXT_SUGGESTION_TITLE_3": "Spune-mi un fapt interesant", + "TEXT_SUGGESTION_SUBTITLE_3": "despre Imperiul Roman", + "TEXT_SUGGESTION_CONTENT_3": "Spune-mi un fapt interesant, ales la întâmplare, despre Imperiul Roman", + "TEXT_SUGGESTION_TITLE_4": "Arată-mi un fragment de cod", + "TEXT_SUGGESTION_SUBTITLE_4": "pentru un antet lipicios (sticky header) al unui site", + "TEXT_SUGGESTION_CONTENT_4": "Arată-mi un fragment de cod pentru un antet lipicios al unui site, în CSS și JavaScript.", + "TEXT_SUGGESTION_TITLE_5": "Explică tranzacționarea cu opțiuni", + "TEXT_SUGGESTION_SUBTITLE_5": "dacă sunt familiarizat cu cumpărarea și vânzarea de acțiuni", + "TEXT_SUGGESTION_CONTENT_5": "Explică tranzacționarea cu opțiuni în termeni simpli, presupunând că sunt familiarizat cu cumpărarea și vânzarea de acțiuni.", + "TEXT_SUGGESTION_TITLE_6": "Depășește procrastinarea", + "TEXT_SUGGESTION_SUBTITLE_6": "dă-mi câteva sfaturi", + "TEXT_SUGGESTION_CONTENT_6": "Poți să mă întrebi mai întâi în ce situații procrastinez cel mai mult și apoi să îmi dai câteva sugestii pentru a depăși asta?" + } + }, + "ATTACHED_FILE_ITEM": { + "TEXT_FILE": "Fișier", + "TEXT_DOCUMENT": "Document", + "TEXT_COLLECTION": "Colecție", + "FILE_INFO_MODAL": { + "TEXT_FORMATTING_DISCLAIMER": "Formatarea poate diferi față de sursa originală.", + "TEXT_NO_PREVIEW_AVAILABLE": "Previzualizare indisponibilă", + "TEXT_EXTRACTED_LINES": { + "one": "{{count}} linie extrasă", + "few": "{{count}} linii extrase", + "other": "{{count}} de linii extrase" + } + } + }, + "SOURCE_CITATION_MODAL": { + "TEXT_CITATION": "Citat", + "TEXT_SOURCE": "Sursă", + "TEXT_RELEVANCE": "Relevanță", + "TEXT_CONTENT": "Conținut", + "TEXT_NO_PREVIEW_AVAILABLE": "Previzualizare indisponibilă" + }, + "ARCHIVED_CHATS_LIST": { + "TEXT_ARCHIVED_CHATS": "Conversații arhivate", + "TEXT_NO_CHATS": "Nu există conversații arhivate.", + "CHAT_ITEM": { + "TEXT_DELETE_CHAT": "Ștergi conversația?", + "TEXT_THIS_WILL_DELETE": "Aceasta va șterge {{name}}", + "TEXT_RESTORE": "Restaurează", + "TEXT_EXPORT": "Exportă", + "TEXT_DELETE": "Șterge", + "TEXT_KEEP": "Păstrează" + }, + "ARCHIVED_CHATS_ACTIONS_SHEET": { + "TEXT_UNARCHIVE_CHATS": "Dezarhivezi toate conversațiile?", + "TEXT_ARE_YOU_SURE": "Sigur dorești să dezarhivezi toate conversațiile arhivate?", + "BUTTON_RESTORE_ALL_CHATS": "Restaurează toate conversațiile", + "BUTTON_EXPORT_ALL_CHATS": "Exportă toate conversațiile" + } + }, + "USER_MESSAGE_ACTIONS": { + "TEXT_EDIT": "Editează", + "TEXT_COPY": "Copiază" + }, + "AI_MESSAGE_ACTIONS": { + "TEXT_EDIT": "Editează", + "TEXT_COPY": "Copiază", + "TEXT_CONTINUE_RESPONSE": "Continuă răspunsul", + "TEXT_REGENERATE": "Regenerează", + "REGENERATE_MESSAGE_ACTION_SHEET": { + "TEXT_SUGGEST_A_CHANGE": "Sugerează o modificare", + "TEXT_TRY_AGAIN": "Încearcă din nou", + "TEXT_ADD_DETAILS": "Adaugă detalii", + "TEXT_MORE_CONCISE": "Mai concis" + } + }, + "EDIT_MESSAGE_INPUT": { + "TEXT_EDIT_MESSAGE": "Editează mesajul", + "BUTTON_SAVE": "Salvează", + "BUTTON_SAVE_AS_COPY": "Salvează ca o copie", + "BUTTON_SEND": "Trimite", + "BUTTON_CANCEL": "Anulează" + }, + "SUGGEST_CHANGE_INPUT": { + "TEXT_SUGGEST_A_CHANGE": "Sugerează o modificare", + "BUTTON_CANCEL": "Anulează" + }, + "ARCHIVED_CHATS_FILTERS_SHEET": { + "USE_SEARCH_FILTERS": { + "TEXT_MOST_RECENT": "Cele mai recente", + "TEXT_OLDEST": "Cele mai vechi", + "TEXT_A-Z": "A-Z", + "TEXT_Z-A": "Z-A" + } + }, + "VOICE_MODE_MODAL": { + "TEXT_LISTENING": "Ascult...", + "TEXT_THINKING": "Mă gândesc...", + "TEXT_TALKING": "Vorbesc..." + }, + "MESSAGE_FOLLOW_UPS": { + "TEXT_FOLLOW_UP": "Continuare" + }, + "AI_MESSAGE": { + "TOOL_OUTPUT_SHEET": { + "TEXT_VIEW_RESULT_PREFIX": "Vezi rezultatul de la", + "TEXT_INPUT": "Intrare", + "TEXT_OUTPUT": "Ieșire" + }, + "TOOL_APPROVAL_CARD": { + "TEXT_ALLOW_PREFIX": "Permite", + "BUTTON_ALLOW": "Permite", + "BUTTON_DENY": "Refuză" + }, + "ASK_USER_CARD": { + "TEXT_OTHER": "Altul", + "TEXT_OTHER_PLACEHOLDER": "Scrie răspunsul tău", + "BUTTON_NEXT": "Următorul", + "BUTTON_SUBMIT": "Trimite", + "BUTTON_DENY": "Omite" + } + } + } +} diff --git a/i18n/mobile/folder/ro.json b/i18n/mobile/folder/ro.json new file mode 100644 index 00000000..2ed96dbf --- /dev/null +++ b/i18n/mobile/folder/ro.json @@ -0,0 +1,55 @@ +{ + "FOLDER": { + "CHATS_LIST": { + "TEXT_NO_CHATS": "Nu există conversații în acest folder." + }, + "FOLDER_ACTIONS_SHEET": { + "TEXT_EDIT": "Editează", + "TEXT_SHARE": "Partajează", + "TEXT_EXPORT": "Exportă", + "TEXT_DELETE": "Șterge", + "TEXT_KEEP": "Păstrează", + "TEXT_DELETE_FOLDER": "Ștergi folderul?", + "TEXT_THIS_WILL_DELETE": "Aceasta va șterge {{name}}" + }, + "SHARE_FOLDER_SHEET": { + "TEXT_SHARE_FOLDER": "Partajează folderul", + "TEXT_PRIVATE": "Privat", + "TEXT_PRIVATE_DESCRIPTION": "Doar utilizatorii și grupurile selectate cu permisiune pot avea acces", + "TEXT_ACCESS_LIST": "Grupuri și utilizatori cu acces", + "TEXT_READ": "Citire", + "TEXT_WRITE": "Scriere", + "BUTTON_ADD": "Adaugă" + }, + "SHARE_WITH_SHEET": { + "TEXT_SHARE_WITH": "Partajează cu...", + "TEXT_SEARCH": "Căutare", + "TEXT_GROUPS": "Grupuri", + "TEXT_USERS": "Utilizatori", + "TEXT_NOBODY_TO_SHARE_WITH": "Nu mai există nimeni cu care să partajezi acest folder.", + "TEXT_SELECTED_COUNT": "{{groupsCount}} grupuri, {{usersCount}} utilizatori", + "BUTTON_ADD_SELECTED": "Adaugă selecția" + }, + "UPSERT_FOLDER_SHEET": { + "TEXT_NEW_FOLDER": "Folder nou", + "TEXT_EDIT_FOLDER": "Editează folderul", + "TEXT_FOLDER_NAME": "Nume folder", + "TEXT_DOCUMENT": "Document", + "TEXT_FILE": "Fișier", + "TEXT_COLLECTION": "Colecție", + "TEXT_FOLDER_NAME_PLACEHOLDER": "ex. Folderul meu", + "TEXT_SYSTEM_PROMPT": "Prompt de sistem", + "TEXT_KNOWLEDGE": "Bază de cunoștințe", + "BUTTON_SELECT_KNOWLEDGE": "Selectează baza de cunoștințe", + "BUTTON_UPLOAD_FILES": "Încarcă fișiere", + "TEXT_CREATE": "Creează", + "TEXT_YOU_CANNOT_UPLOAD_EMPTY_FILE": "Nu poți încărca un fișier gol.", + "TEXT_UNSUPPORTED_TYPE": "Tip neacceptat." + }, + "SELECT_KNOWLEDGE_SHEET": { + "TEXT_SEARCH_KNOWLEDGE": "Caută în baza de cunoștințe", + "TEXT_SELECT_KNOWLEDGE": "Selectează baza de cunoștințe", + "TEXT_NO_KNOWLEDGE": "Baza de cunoștințe este goală." + } + } +} diff --git a/i18n/mobile/profile/ro.json b/i18n/mobile/profile/ro.json new file mode 100644 index 00000000..d11bfb4f --- /dev/null +++ b/i18n/mobile/profile/ro.json @@ -0,0 +1,15 @@ +{ + "PROFILE": { + "PROFILE_MENU_SHEET": { + "TEXT_LOGOUT": "Deconectare", + "TEXT_ARCHIVED_CHATS": "Conversații arhivate", + "TEXT_SETTINGS": "Setări", + "TEXT_DELETE_ACCOUNT": "Șterge contul", + "TEXT_DELETE_ACCOUNT_TITLE": "Sigur dorești să îți ștergi contul?", + "TEXT_DELETE_ACCOUNT_MESSAGE": "Această acțiune va duce la pierderea definitivă a datelor dacă nu ne contactezi în următoarele 30 de zile.", + "BUTTON_DELETE_ACCOUNT": "Da, șterge contul meu", + "BUTTON_DONT_DELETE": "Nu șterge", + "TEXT_ACCOUNT_DELETION_REQUEST": "Cererea ta de ștergere a contului a fost trimisă." + } + } +} diff --git a/i18n/mobile/shared/ro.json b/i18n/mobile/shared/ro.json new file mode 100644 index 00000000..6f84af7d --- /dev/null +++ b/i18n/mobile/shared/ro.json @@ -0,0 +1,115 @@ +{ + "SHARED": { + "VALIDATION": { + "TEXT_INVALID_EMAIL": "Te rugăm să introduci o adresă de email validă", + "TEXT_REQUIRED_EMAIL": "Te rugăm să introduci adresa de email", + "TEXT_REQUIRED_PASSWORD": "Te rugăm să introduci parola", + "TEXT_INVALID_URL": "Te rugăm să introduci un URL de server valid, ex. https://your.domain sau http://192.168.1.10:3000", + "TEXT_REQUIRED_FOLDER_NAME": "Te rugăm să introduci un nume de folder", + "TEXT_REQUIRED_MESSAGE": "Te rugăm să introduci un mesaj", + "TEXT_REQUIRED_PROFILE_NAME": "Te rugăm să introduci un nume de profil", + "TEXT_REQUIRED_CURRENT_PASSWORD": "Te rugăm să introduci parola actuală", + "TEXT_REQUIRED_NEW_PASSWORD": "Te rugăm să introduci o parolă nouă", + "TEXT_REQUIRED_CONFIRM_PASSWORD": "Te rugăm să confirmi parola nouă", + "TEXT_PASSWORDS_DO_NOT_MATCH": "Parolele nu coincid", + "TEXT_PASSWORD_TOO_SHORT": "Parola trebuie să aibă cel puțin 8 caractere" + }, + "COMMON": { + "TEXT_FEATURE_NOT_IMPLEMENTED_YET": "Funcția nu este încă implementată.", + "TEXT_NEW_CHAT": "Conversație nouă", + "BUTTON_CANCEL": "Anulează", + "BUTTON_CONFIRM": "Confirmă", + "BUTTON_OPEN_SETTINGS": "Deschide setările", + "TEXT_UNABLE_TO_OPEN_SETTINGS": "Nu s-au putut deschide setările", + "TEXT_SETTINGS": "Setări", + "TEXT_DISABLED_IN_OFFLINE_MODE": "Funcțiile sunt dezactivate în modul offline", + "ACTIONS_BOTTOM_SHEET": { + "BUTTON_CANCEL": "Anulează" + }, + "TEXT_COPIED_TO_CLIPBOARD": "Copiat în clipboard" + }, + "API_ERRORS": { + "TEXT_SOMETHING_WENT_WRONG": "Ceva nu a mers bine", + "TEXT_YOUR_SESSION_HAS_EXPIRED": "Sesiunea ta a expirat. Te rugăm să te conectezi din nou", + "TEXT_FORBIDDEN_ERROR": "Nu ai acces la această acțiune", + "TEXT_INTERNAL_SERVER_ERROR": "Eroare la încărcarea datelor", + "TEXT_NOT_FOUND_ERROR": "Datele nu au fost găsite" + }, + "DATES": { + "TEXT_TODAY": "Astăzi", + "TEXT_YESTERDAY": "Ieri", + "TEXT_LAST_DAYS": "Ultimele {{days}} zile", + "TEXT_AT_TIME": "la {{time}}", + "TEXT_TODAY_TIME": "Astăzi {{time}}", + "TEXT_YESTERDAY_TIME": "Ieri {{time}}" + }, + "CODE_BLOCK": { + "TEXT_COPIED_TO_CLIPBOARD": "Copiat în clipboard", + "TEXT_COPY": "Copiază" + }, + "SOCKET_SERVICE": { + "TEXT_CONNECTION_ERROR": "Eroare de conexiune" + }, + "IMAGE_PICKER_SERVICE": { + "TEXT_ACCESS_DENIED": "Acces refuzat" + }, + "ACTION_BUTTONS_MODAL": { + "BUTTON_CONFIRM": "Confirmă", + "BUTTON_CANCEL": "Anulează", + "TEXT_TITLE_CAN_NOT_BE_EMPTY": "Titlul nu poate fi gol" + }, + "MEDIA_LIBRARY_SERVICE": { + "TEXT_SUCCESSFULLY_SAVED": "Imaginea a fost salvată cu succes", + "TEXT_ERROR_DURING_SAVING": "A apărut o eroare la salvarea imaginii", + "TEXT_SETTINGS": "Setări", + "TEXT_SETTINGS_MESSAGE": "Permite accesul la cameră din setări. Settings > Open Web UI > Photos > All Photos" + }, + "FILE_SYSTEM_SERVICE": { + "TEXT_SHARE": "Partajează {{fileName}}", + "TEXT_SHARING_IS_NOT_AVAILABLE": "Partajarea nu este disponibilă pe acest dispozitiv" + }, + "USE_AUDIO_RECORDER": { + "TEXT_NO_ACCESS": "Fără acces", + "TEXT_APP_NEEDS_ACCESS": "Aplicația are nevoie de acces la microfonul dispozitivului" + }, + "NO_CONNECTION_BANNER": { + "TEXT_YOU_ARE_OFFLINE": "Ești offline!" + }, + "PRESSABLE_SEARCH_INPUT": { + "TEXT_SEARCH_CHATS": "Caută conversații" + }, + "CHAT_ACTIONS_MENU_SHEET": { + "TEXT_PIN": "Fixează", + "TEXT_UNPIN": "Anulează fixarea", + "TEXT_RENAME": "Redenumește", + "TEXT_CLONE": "Clonează", + "TEXT_ARCHIVE": "Arhivează", + "TEXT_RESTORE": "Restaurează", + "TEXT_SHARE": "Partajează", + "TEXT_DOWNLOAD": "Descarcă", + "TEXT_DELETE": "Șterge", + "TEXT_KEEP": "Păstrează", + "TEXT_RENAME_CHAT": "Redenumește conversația", + "TEXT_DELETE_CHAT": "Ștergi conversația?", + "TEXT_THIS_WILL_DELETE": "Aceasta va șterge {{name}}", + "TEXT_CLONE_OF": "Copie a {{title}}", + "TEXT_CHAT_ACTIONS": "Acțiuni conversație", + "TEXT_MOVE_TO_FOLDER": "Mută în folder", + "DOWNLOAD_CHAT_OPTIONS_SHEET": { + "TEXT_EXPORT_CHAT_JSON": "Exportă conversația (.json)", + "TEXT_PLAIN_TEXT": "Text simplu (.txt)", + "TEXT_PDF_DOCUMENT": "Document PDF (.pdf)" + }, + "MOVE_CHAT_TO_FOLDER_MODAL": { + "TEXT_SEARCH_FOLDER": "Caută folder", + "TEXT_NO_FOLDERS": "Nu există foldere", + "TEXT_CREATE_NEW_FOLDER": "Creează folder", + "TEXT_NO_FOLDER": "Fără folder" + } + }, + "SEARCH_INPUT": { + "BUTTON_CANCEL": "Anulează", + "TEXT_SEARCH_CHATS": "Caută conversații" + } + } +} diff --git a/libs/shared/utils/config/src/constants.ts b/libs/shared/utils/config/src/constants.ts index a471d704..e6cf09ec 100644 --- a/libs/shared/utils/config/src/constants.ts +++ b/libs/shared/utils/config/src/constants.ts @@ -14,6 +14,7 @@ export const availableLanguages = [ { code: LanguageCode.GERMAN, label: 'Deutsch' }, { code: LanguageCode.CHINESE, label: '中文' }, { code: LanguageCode.JAPANESE, label: '日本語' }, + { code: LanguageCode.ROMANIAN, label: 'Română' }, ] as const; export const availableMarkdownRenderers = [ diff --git a/libs/shared/utils/config/src/enums/language-code.ts b/libs/shared/utils/config/src/enums/language-code.ts index 91a0f032..3c7fb883 100644 --- a/libs/shared/utils/config/src/enums/language-code.ts +++ b/libs/shared/utils/config/src/enums/language-code.ts @@ -7,4 +7,5 @@ export enum LanguageCode { GERMAN = 'de', CHINESE = 'zh', JAPANESE = 'ja', + ROMANIAN = 'ro', }