From 3e541abc2fbffaa91618f44b02dddf2860e9a1ac Mon Sep 17 00:00:00 2001 From: Francesco Carmelo Capria Date: Wed, 30 Aug 2023 20:45:12 +0200 Subject: [PATCH] Added italian language --- package.json | 1 + src/App.js | 2 + src/i18n/it.js | 382 +++++++++++++++++++++++++++++++++++++++++++++++++ yarn.lock | 16 +++ 4 files changed, 401 insertions(+) create mode 100644 src/i18n/it.js diff --git a/package.json b/package.json index c6b656f..537907f 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "ra-language-chinese": "^2.0.10", "ra-language-french": "^4.9.3", "ra-language-german": "^3.13.4", + "ra-language-italian": "^3.13.1", "react": "^17.0.0", "react-admin": "^3.19.12", "react-dom": "^17.0.2", diff --git a/src/App.js b/src/App.js index 0aca651..3d6c4b1 100644 --- a/src/App.js +++ b/src/App.js @@ -28,12 +28,14 @@ import germanMessages from "./i18n/de"; import englishMessages from "./i18n/en"; import frenchMessages from "./i18n/fr"; import chineseMessages from "./i18n/zh"; +import italianMessages from "./i18n/it"; // TODO: Can we use lazy loading together with browser locale? const messages = { de: germanMessages, en: englishMessages, fr: frenchMessages, + it: italianMessages, zh: chineseMessages, }; const i18nProvider = polyglotI18nProvider( diff --git a/src/i18n/it.js b/src/i18n/it.js new file mode 100644 index 0000000..860d626 --- /dev/null +++ b/src/i18n/it.js @@ -0,0 +1,382 @@ +import italianMessages from "ra-language-italian"; + +const it = { + ...italianMessages, + synapseadmin: { + auth: { + base_url: "URL dell'homeserver", + welcome: "Benvenuto in Synapse-admin", + server_version: "Versione di Synapse", + username_error: "Per favore inserisci un ID utente completo: '@utente:dominio'", + protocol_error: "L'URL deve iniziare per 'http://' o 'https://'", + url_error: "URL del server Matrix non valido", + sso_sign_in: "Accedi con SSO", + }, + users: { + invalid_user_id: "ID utente non valido su questo homeserver.", + tabs: { sso: "SSO" }, + }, + rooms: { + tabs: { + basic: "Semplice", + members: "Membro", + detail: "Dettagli", + permission: "Permessi", + }, + }, + reports: { tabs: { basic: "Semplice", detail: "Dettagli" } }, + }, + import_users: { + error: { + at_entry: "Alla voce %{entry}: %{message}", + error: "Errore", + required_field: "Il campo '%{field}' non è presente", + invalid_value: + "Valore non valido alla riga %{row}. '%{field}' Il campo può essere solo 'true' o 'false'", + unreasonably_big: + "Impossibile caricare un file così grosso (%{size} megabyte)", + already_in_progress: "Un import è attualmente già in caricamento", + id_exits: "L'ID %{id} è già presente", + }, + title: "Importa utenti tramite file CSV", + goToPdf: "Vai al PDF", + cards: { + importstats: { + header: "Importa utenti", + users_total: + "%{smart_count} utente nel file CSV |||| %{smart_count} utenti nel file CSV", + guest_count: "%{smart_count} ospite |||| %{smart_count} ospiti", + admin_count: "%{smart_count} amministratore |||| %{smart_count} amministratori", + }, + conflicts: { + header: "Strategia di conflitto", + mode: { + stop: "Stoppa al conflitto", + skip: "Mostra l'errore e ignora il conflitto", + }, + }, + ids: { + header: "ID", + all_ids_present: "ID presenti in ogni voce", + count_ids_present: + "%{smart_count} voce con ID |||| %{smart_count} voci con ID", + mode: { + ignore: "Ignora gli ID nel file CSV e creane di nuovi", + update: "Aggiorna le voci esistenti", + }, + }, + passwords: { + header: "Passwords", + all_passwords_present: "Password presenti in ogni voce", + count_passwords_present: + "%{smart_count} voce con password |||| %{smart_count} voci con password", + use_passwords: "Usa le password dal file CSV", + }, + upload: { + header: "Input file CSV", + explanation: + "Qui puoi caricare un file con valori separati da virgole che verrà poi utilizzato per creare o aggiornare gli utenti. Il file deve includere i campi 'id' and 'displayname'. Puoi scaricare un file di esempio per adattarlo: ", + }, + startImport: { + simulate_only: "Solo simulazione", + run_import: "Importa", + }, + results: { + header: "Importa i risultati", + total: + "%{smart_count} voce in totale |||| %{smart_count} voci in totale", + successful: "%{smart_count} voci importate con successo", + skipped: "%{smart_count} voci ignorate", + download_skipped: "Scarica le voci ignorate", + with_error: + "%{smart_count} voce con errori ||| %{smart_count} voci con errori", + simulated_only: "Il processo era stato solamente simulato", + }, + }, + }, + resources: { + users: { + name: "Utente |||| Utenti", + email: "Email", + msisdn: "Telefono", + threepid: "Email / Telefono", + fields: { + avatar: "Avatar", + id: "ID utente", + name: "Nome", + is_guest: "Ospite", + admin: "Amministratore", + deactivated: "Disattivato", + guests: "Mostra gli ospiti", + show_deactivated: "Mostra gli utenti disattivati", + user_id: "Cerca utente", + displayname: "Nickname", + password: "Password", + avatar_url: "URL dell'avatar", + avatar_src: "Avatar", + medium: "Medium", + threepids: "3PID", + address: "Indirizzo", + creation_ts_ms: "Creazione del timestamp", + consent_version: "Versione minima richiesta", + auth_provider: "Provider", + user_type: "Tipo d'utente", + }, + helper: { + password: "Cambiando la password l'utente verrà disconnesso da tutte le sessioni attive.", + deactivate: "Devi fornire una password per riattivare l'account.", + erase: "Constrassegna l'utente come cancellato dal GDPR", + }, + action: { + erase: "Cancella i dati dell'utente", + }, + }, + rooms: { + name: "Stanza |||| Stanze", + fields: { + room_id: "ID della stanza", + name: "Nome", + canonical_alias: "Alias", + joined_members: "Membri", + joined_local_members: "Membri locali", + joined_local_devices: "Dispositivi locali", + state_events: "Eventi di stato / Complessità", + version: "Versione", + is_encrypted: "Criptato", + encryption: "Crittografia", + federatable: "Federabile", + public: "Visibile nella cartella della stanza", + creator: "Creatore", + join_rules: "Regole per entrare", + guest_access: "Entra come ospite", + history_visibility: "Visibilità temporale", + topic: "Topic", + avatar: "Avatar", + }, + helper: { +/* forward_extremities: + "Forward extremities are the leaf events at the end of a Directed acyclic graph (DAG) in a room, aka events that have no children. The more exist in a room, the more state resolution that Synapse needs to perform (hint: it's an expensive operation). While Synapse has code to prevent too many of these existing at one time in a room, bugs can sometimes make them crop up again. If a room has >10 forward extremities, it's worth checking which room is the culprit and potentially removing them using the SQL queries mentioned in #1760.", */ + }, + enums: { + join_rules: { + public: "Pubblica", + knock: "Bussa", + invite: "Invita", + private: "Privata", + }, + guest_access: { + can_join: "Gli utenti ospiti possono entrare", + forbidden: "Gli utenti ospiti non possono entrare", + }, + history_visibility: { + invited: "Dall'invito", + joined: "Dall'entrata", + shared: "Dalla condivisione", + world_readable: "Chiunque", + }, + unencrypted: "Non criptata", + }, + action: { + erase: { + title: "Cancella stanza", + content: + "Sei sicuro di voler eliminare questa stanza? Questa azione è definitiva. Tutti i messaggi e i media condivisi in questa stanza verranno eliminati dal server!", + }, + }, + }, + reports: { + name: "Evento segnalato |||| Eventi segnalati", + fields: { + id: "ID", + received_ts: "Orario del report", + user_id: "richiedente", + name: "nome della stanza", + score: "punteggio", + reason: "ragione", + event_id: "ID dell'evento", + event_json: { + origin: "server di origine", + origin_server_ts: "ora dell'invio", + type: "tipo di evento", + content: { + msgtype: "tipo di contenuto", + body: "contenuto", + format: "formato", + formatted_body: "contenuto formattato", + algorithm: "algoritmo", + }, + }, + }, + }, + connections: { + name: "Connessioni", + fields: { + last_seen: "Data", + ip: "Indirizzo IP", + user_agent: "agente utente", + }, + }, + devices: { + name: "Dispositivo |||| Dispositivi", + fields: { + device_id: "ID del dispositivo", + display_name: "Nome del dispositivo", + last_seen_ts: "Timestamp", + last_seen_ip: "Indirizzo IP", + }, + action: { + erase: { + title: "Rimozione del dispositivo %{id}", + content: 'Sei sicuro di voler rimuovere il dispositivo "%{name}"?', + success: "Dispositivo rimosso con successo.", + failure: "C'è stato un errore.", + }, + }, + }, + users_media: { + name: "Media", + fields: { + media_id: "ID del media", + media_length: "Peso del file (in Byte)", + media_type: "Tipo", + upload_name: "Nome del file", + quarantined_by: "In quarantena da", + safe_from_quarantine: "Protetto dalla quarantena", + created_ts: "Creato", + last_access_ts: "Ultimo accesso", + }, + }, + delete_media: { + name: "Media", + fields: { + before_ts: "ultimo accesso effettuato prima", + size_gt: "Più grande di (in byte)", + keep_profiles: "Mantieni le immagini del profilo", + }, + action: { + send: "Cancella media", + send_success: "Richiesta inviata con successo.", + send_failure: "C'è stato un errore.", + }, + helper: { + send: "Questa API cancella i media locali dal disco del tuo server. Questo include anche ogni miniatura e copia del media scaricato. Questa API non inciderà sui media che sono stati caricati nei repository esterni.", + }, + }, + protect_media: { + action: { + create: "Non protetto, proteggi", + delete: "Protetto, rimuovi protezione", + none: "In quarantena", + send_success: "Stato della protezione cambiato con successo.", + send_failure: "C'è stato un errore.", + }, + }, + quarantine_media: { + action: { + name: "Quarantina", + create: "Aggiungi alla quarantena", + delete: "In quarantena, rimuovi dalla quarantena", + none: "Protetto dalla quarantena", + send_success: "Stato della quarantena cambiato con successo.", + send_failure: "C'è stato un errore.", + }, + }, + pushers: { + name: "Pusher |||| Pusher", + fields: { + app: "App", + app_display_name: "Nome dell'app", + app_id: "ID dell'app", + device_display_name: "Nome del dispositivo", + kind: "Tipo", + lang: "Lingua", + profile_tag: "Tag del profilo", + pushkey: "Pushkey", + data: { url: "URL" }, + }, + }, + servernotices: { + name: "Avvisi del server", + send: "Invia avvisi", + fields: { + body: "Messaggio", + }, + action: { + send: "Invia nota", + send_success: "Avviso inviato con successo.", + send_failure: "C'è stato un errore.", + }, + helper: { + send: 'Invia un avviso dal server agli utenti selezionati. La feature "Avvisi del server" è stata attivata sul server.', + }, + }, + user_media_statistics: { + name: "Media degli utenti", + fields: { + media_count: "Numero media", + media_length: "Lunghezza media", + }, + }, + forward_extremities: { + name: "Invia estremità", + fields: { + id: "Event ID", + received_ts: "Timestamp", + depth: "Profondità", + state_group: "State group", + }, + }, + room_state: { + name: "Eventi di stato", + fields: { + type: "Tipo", + content: "Contenuto", + origin_server_ts: "Ora dell'invio", + sender: "Mittente", + }, + }, + room_directory: { + name: "Elenco delle stanze", + fields: { + world_readable: "gli utenti ospite possono vedere senza entrare", + guest_can_join: "gli utenti ospite possono entrare", + }, + action: { + title: + "Cancella stanza dall'elenco |||| Cancella %{smart_count} stanze dall'elenco", + content: + "Sei sicuro di voler rimuovere questa stanza dall'elenco? |||| Sei sicuro di voler rimuovere %{smart_count} stanze dall'elenco?", + erase: "Rimuovi dall'elenco", + create: "Crea", + send_success: "Stanza creata con successo.", + send_failure: "C'è stato un errore.", + }, + }, + destinations: { + name: "Federazione", + fields: { + destination: "Destinazione", + failure_ts: "Timestamp dell'errore", + retry_last_ts: "Tentativo ultimo timestamp", + retry_interval: "Intervallo dei tentativi", + last_successful_stream_ordering: "Ultimo flusso riuscito con successo", + stream_ordering: "Flusso", + }, + action: { reconnect: "Riconnetti" }, + }, + }, + registration_tokens: { + name: "Token di registrazione", + fields: { + token: "Token", + valid: "Token valido", + uses_allowed: "Usi permessi", + pending: "In attesa", + completed: "Completato", + expiry_time: "Data della scadenza", + length: "Lunghezza", + }, + helper: { length: "Lunghezza del token se non viene dato alcun token." }, + }, +}; +export default it; diff --git a/yarn.lock b/yarn.lock index d8071e2..5eda01a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2031,6 +2031,17 @@ "@emotion/utils" "^1.2.0" csstype "^3.0.2" +"@emotion/serialize@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.2.tgz#017a6e4c9b8a803bd576ff3d52a0ea6fa5a62b51" + integrity sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA== + dependencies: + "@emotion/hash" "^0.9.1" + "@emotion/memoize" "^0.8.1" + "@emotion/unitless" "^0.8.1" + "@emotion/utils" "^1.2.1" + csstype "^3.0.2" + "@emotion/sheet@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.1.0.tgz#56d99c41f0a1cda2726a05aa6a20afd4c63e58d2" @@ -9283,6 +9294,11 @@ ra-language-german@^3.13.4: resolved "https://registry.yarnpkg.com/ra-language-german/-/ra-language-german-3.13.5.tgz#553385555907713a2ae08ba8f7aabd041b922936" integrity sha512-dGWWJbIP5FUp0axoH+7sZj6011IgifEz55FLij3QSBI4ZusDdH/CL3l4oy+srUXFI+IzoXGGtQPJ7ax3p11cLQ== +ra-language-italian@^3.13.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/ra-language-italian/-/ra-language-italian-3.13.1.tgz#115f15c00f140ba319d5daf53c7bd477c73b9546" + integrity sha512-iGgdkbnpA+5GD6OcAjOuOA95/jmJegC9txE8X+AmlA7vhsHdcnHam/D6goqv3sqfeqgCkPCPmJAMO/+slHXR1w== + ra-test@^3.15.0: version "3.19.4" resolved "https://registry.yarnpkg.com/ra-test/-/ra-test-3.19.4.tgz#fa50fd8a7334ed8769da905bd26bdfac624cb9b8"