diff --git a/BUILD b/BUILD new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/BUILD @@ -0,0 +1 @@ + diff --git a/README.md b/README.md index d3be720b..2420f572 100644 --- a/README.md +++ b/README.md @@ -6,5 +6,10 @@ ## Special thanks +@forenta for German translation + +@andrigamerita for Italian translation + @hellojaccc for Korean translation + @duy@mas.to for Vietnamese translation \ No newline at end of file diff --git a/fastlane/metadata/en-US/release_notes.txt b/fastlane/metadata/en-US/release_notes.txt index ca475eeb..2859b8c8 100644 --- a/fastlane/metadata/en-US/release_notes.txt +++ b/fastlane/metadata/en-US/release_notes.txt @@ -2,3 +2,4 @@ Support editing toot Integrated into system's share menu Follow system's font weight setting (iOS) Upload gif from keyboard (Android) +Added German and Italian diff --git a/fastlane/metadata/zh-Hans/release_notes.txt b/fastlane/metadata/zh-Hans/release_notes.txt index 3f23af52..ebf42983 100644 --- a/fastlane/metadata/zh-Hans/release_notes.txt +++ b/fastlane/metadata/zh-Hans/release_notes.txt @@ -2,3 +2,4 @@ 支持系统图片分享 跟随系统字体粗细(苹果) 键盘上传gif图片(安卓) +新增德语和意大利语 diff --git a/src/i18n/i18n.ts b/src/i18n/i18n.ts index 7c9fd51b..220124af 100644 --- a/src/i18n/i18n.ts +++ b/src/i18n/i18n.ts @@ -3,6 +3,7 @@ import { initReactI18next } from 'react-i18next' import de from '@root/i18n/de/_all' import en from '@root/i18n/en/_all' +import it from '@root/i18n/it/_all' import ko from '@root/i18n/ko/_all' import vi from '@root/i18n/vi/_all' import zh_Hans from '@root/i18n/zh-Hans/_all' @@ -14,7 +15,7 @@ i18n.use(initReactI18next).init({ ns: ['common'], defaultNS: 'common', - resources: { 'zh-Hans': zh_Hans, vi, ko, en, de }, + resources: { 'zh-Hans': zh_Hans, vi, ko, it, en, de }, returnEmptyString: false, saveMissing: true, diff --git a/src/i18n/it/_all.ts b/src/i18n/it/_all.ts new file mode 100644 index 00000000..fa81be2e --- /dev/null +++ b/src/i18n/it/_all.ts @@ -0,0 +1,17 @@ +export default { + common: require('./common'), + + screens: require('./screens'), + screenActions: require('./screens/actions'), + screenAnnouncements: require('./screens/announcements'), + screenCompose: require('./screens/compose'), + screenImageViewer: require('./screens/imageViewer'), + screenTabs: require('./screens/tabs'), + + componentEmojis: require('./components/emojis'), + componentInstance: require('./components/instance'), + componentMediaSelector: require('./components/mediaSelector'), + componentParse: require('./components/parse'), + componentRelationship: require('./components/relationship'), + componentTimeline: require('./components/timeline') +} diff --git a/src/i18n/it/common.json b/src/i18n/it/common.json new file mode 100644 index 00000000..182154db --- /dev/null +++ b/src/i18n/it/common.json @@ -0,0 +1,22 @@ +{ + "buttons": { + "OK": "OK", + "apply": "Applica", + "cancel": "Annulla" + }, + "customEmoji": { + "accessibilityLabel": "Emoji personalizzata {{emoji}}" + }, + "message": { + "success": { + "message": "{{function}} eseguito con successo" + }, + "warning": { + "message": "" + }, + "error": { + "message": "{{function}} fallito, per favore riprova" + } + }, + "separator": ", " +} \ No newline at end of file diff --git a/src/i18n/it/components/emojis.json b/src/i18n/it/components/emojis.json new file mode 100644 index 00000000..dfcfdea3 --- /dev/null +++ b/src/i18n/it/components/emojis.json @@ -0,0 +1,3 @@ +{ + "frequentUsed": "Usate di frequente" +} \ No newline at end of file diff --git a/src/i18n/it/components/instance.json b/src/i18n/it/components/instance.json new file mode 100644 index 00000000..59ba3636 --- /dev/null +++ b/src/i18n/it/components/instance.json @@ -0,0 +1,28 @@ +{ + "server": { + "textInput": { + "placeholder": "Dominio dell'istanza" + }, + "button": "Accedi", + "information": { + "name": "Nome", + "accounts": "Utenti", + "statuses": "Toot", + "domains": "Universi" + }, + "disclaimer": { + "base": "Per accedere, verrà aperta una pagina del browser di sistema. I dati di accesso del tuo account sono protetti. Leggi di più:", + "privacy": "politica sulla privacy" + } + }, + "update": { + "alert": { + "title": "Accesso a questa istanza effettuato", + "message": "Puoi accedere ad ulteriori account, mantenendo l'accesso a quelli già esistenti", + "buttons": { + "cancel": "$t(common:buttons.cancel)", + "continue": "Continua" + } + } + } +} \ No newline at end of file diff --git a/src/i18n/it/components/mediaSelector.json b/src/i18n/it/components/mediaSelector.json new file mode 100644 index 00000000..5ab89dd9 --- /dev/null +++ b/src/i18n/it/components/mediaSelector.json @@ -0,0 +1,28 @@ +{ + "title": "Seleziona origine media", + "options": { + "library": "Carica da libreria locale", + "photo": "Scatta una foto", + "cancel": "$t(common:buttons.cancel)" + }, + "library": { + "alert": { + "title": "Permesso non concesso", + "message": "È richiesto l'accesso ai file del dispositivo per il caricamento dalla libreria", + "buttons": { + "settings": "Correggi impostazioni", + "cancel": "$t(common:buttons.cancel)" + } + } + }, + "photo": { + "alert": { + "title": "Permesso non concesso", + "message": "È richiesto l'accesso alla fotocamera per scattare foto", + "buttons": { + "settings": "Correggi impostazioni", + "cancel": "$t(common:buttons.cancel)" + } + } + } +} \ No newline at end of file diff --git a/src/i18n/it/components/parse.json b/src/i18n/it/components/parse.json new file mode 100644 index 00000000..8f98a863 --- /dev/null +++ b/src/i18n/it/components/parse.json @@ -0,0 +1,9 @@ +{ + "HTML": { + "expanded": { + "true": "Richiudi {{hint}}", + "false": "Espandi {{hint}}" + }, + "defaultHint": "toot" + } +} \ No newline at end of file diff --git a/src/i18n/it/components/relationship.json b/src/i18n/it/components/relationship.json new file mode 100644 index 00000000..2b1cfeda --- /dev/null +++ b/src/i18n/it/components/relationship.json @@ -0,0 +1,16 @@ +{ + "follow": { + "function": "Segui utente" + }, + "block": { + "function": "Blocca utente" + }, + "button": { + "error": "Errore di caricamento", + "blocked_by": "L'utente ti ha bloccato", + "blocking": "Sblocca", + "following": "Smetti di seguire", + "requested": "Annulla richiesta di seguire", + "default": "Segui" + } +} \ No newline at end of file diff --git a/src/i18n/it/components/timeline.json b/src/i18n/it/components/timeline.json new file mode 100644 index 00000000..271209b5 --- /dev/null +++ b/src/i18n/it/components/timeline.json @@ -0,0 +1,234 @@ +{ + "empty": { + "error": { + "message": "Errore di caricamento", + "button": "Riprova" + }, + "success": { + "message": "Timeline vuota" + } + }, + "end": { + "message": "Hai letto tutto. Vuoi una tazza di <0 />" + }, + "lookback": { + "message": "Letto alle" + }, + "refresh": { + "fetchPreviousPage": "Più recenti da qui", + "refetch": "Vai a recenti" + }, + "shared": { + "actioned": { + "pinned": "Fissato in cima", + "favourite": "{{name}} ha apprezzato il tuo toot", + "status": "{{name}} ha appena pubblicato", + "follow": "{{name}} ti sta seguendo", + "follow_request": "{{name}} ha chiesto di seguirti", + "poll": "Un sondaggio in cui hai votato è terminato", + "reblog": { + "default": "{{name}} ha ricondiviso", + "notification": "{{name}} ha ricondiviso il tuo toot" + } + }, + "actions": { + "reply": { + "accessibilityLabel": "Rispondi a questo toot" + }, + "reblogged": { + "accessibilityLabel": "Ricondividi questo toot", + "function": "Ricondividi toot" + }, + "favourited": { + "accessibilityLabel": "Apprezza questo toot", + "function": "Apprezza toot" + }, + "bookmarked": { + "accessibilityLabel": "Aggiungi questo toot ai segnalibri", + "function": "Aggiungi toot ai segnalibri" + } + }, + "actionsUsers": { + "reblogged_by": { + "accessibilityLabel": "{{count}} utenti hanno ricondiviso questo toot", + "accessibilityHint": "Premi per vedere gli utenti", + "text": "$t(screenTabs:shared.users.statuses.reblogged_by)" + }, + "favourited_by": { + "accessibilityLabel": "{{count}} utenti hanno apprezzato questo toot", + "accessibilityHint": "Premi per vedere gli utenti", + "text": "$t(screenTabs:shared.users.statuses.favourited_by)" + }, + "history": { + "accessibilityLabel": "Questo toot è stato modificato {{count}} volte", + "accessibilityHint": "Premi per vedere la cronologia di revisioni", + "text_one": "{{count}} modifica", + "text_other": "{{count}} modifiche" + } + }, + "attachment": { + "sensitive": { + "button": "Mostra media sensibile" + }, + "unsupported": { + "text": "Errore di caricamento", + "button": "Apri sul sito dell'istanza remota" + } + }, + "avatar": { + "accessibilityLabel": "Foto profilo di {{name}}", + "accessibilityHint": "Premi per aprire il profilo di {{name}}" + }, + "content": { + "expandHint": "Contenuto nascosto" + }, + "filtered": "Filtrato", + "fullConversation": "Leggi la conversazione", + "translate": { + "default": "Traduci", + "succeed": "Traduzione da {{source}} fornita da {{provider}}", + "failed": "Traduzione fallita", + "source_not_supported": "La lingua del toot non è supportata", + "target_not_supported": "La lingua di destinazione non è supportata" + }, + "header": { + "shared": { + "account": { + "name": { + "accessibilityHint": "Nome visualizzato dell'utente" + }, + "account": { + "accessibilityHint": "Profilo dell'utente" + } + }, + "application": "Pubblicato via {{application}}", + "edited": { + "accessibilityLabel": "Toot modificato" + }, + "muted": { + "accessibilityLabel": "Toot mutato" + }, + "visibility": { + "direct": { + "accessibilityLabel": "Questo toot è un messaggio diretto" + }, + "private": { + "accessibilityLabel": "Questo toot è visibile solo ai seguaci" + } + } + }, + "conversation": { + "withAccounts": "Con", + "delete": { + "function": "Cancella messaggio" + } + }, + "actions": { + "accessibilityHint": "Azioni per questo toot, per l'utente che l'ha pubblicato o per il toot stesso", + "account": { + "heading": "Riguardo quest'utente", + "mute": { + "function": "Muta utente", + "button": "Muta @{{acct}}" + }, + "block": { + "function": "Blocca utente", + "button": "Blocca @{{acct}}" + }, + "reports": { + "function": "Segnala utente", + "button": "Segnala @{{acct}}" + } + }, + "domain": { + "heading": "Riguardo questa istanza", + "block": { + "function": "Blocca istanza", + "button": "Blocca istanza {{domain}}" + }, + "alert": { + "title": "Conferma blocco di {{domain}} ?", + "message": "Sarebbe meglio mutare o bloccare singoli utenti.\n\nSe blocchi un'istanza, tutti i suoi contenuti a te relativi, inclusi tutti i tuoi seguaci da questa, saranno rimossi.", + "buttons": { + "confirm": "Conferma blocco", + "cancel": "$t(common:buttons.cancel)" + } + } + }, + "share": { + "status": { + "heading": "Condividi toot", + "button": "Condividi il link a questo toot" + }, + "account": { + "heading": "Condividi utente", + "button": "Share il link a questo utente" + } + }, + "status": { + "heading": "Riguardo questo toot", + "edit": { + "function": "Modifica toot", + "button": "Modifica questo toot" + }, + "delete": { + "function": "Cancella toot", + "button": "Cancella toot", + "alert": { + "title": "Cancellare il toot?", + "message": "Vuoi davvero cancellare questo toot? Tutti gli apprezzamenti, le ricondivisioni, e le risposte verranno persi.", + "buttons": { + "confirm": "Conferma", + "cancel": "$t(common:buttons.cancel)" + } + } + }, + "deleteEdit": { + "function": "Cancella toot", + "button": "Cancella e riscrivi toot", + "alert": { + "title": "Cancellare e riscrivere il toot?", + "message": "Vuoi davvero cancellare e riscrivere questo toot? Tutti gli apprezzamenti, le ricondivisioni, e le risposte verranno persi.", + "buttons": { + "confirm": "Conferma", + "cancel": "$t(common:buttons.cancel)" + } + } + }, + "mute": { + "function": "Muta toot", + "button": { + "positive": "Muta questo toot e le sue risposte", + "negative": "Smuta questo toot e le sue risposte" + } + }, + "pin": { + "function": "Fissa in cima", + "button": { + "positive": "Fissa questo toot in cima al profilo", + "negative": "Togli questo toot dalla cima del profilo" + } + } + } + } + }, + "poll": { + "meta": { + "button": { + "vote": "Vota", + "refresh": "Ricarica" + }, + "count": { + "voters_one": "{{count}} utente ha votato", + "voters_other": "{{count}} utenti hanno votato", + "votes_one": "{{count}} voto", + "votes_other": "{{count}} voti" + }, + "expiration": { + "expired": "Voto scaduto", + "until": "Scade in <0 />" + } + } + } + } +} \ No newline at end of file diff --git a/src/i18n/it/screens.json b/src/i18n/it/screens.json new file mode 100644 index 00000000..a06decd7 --- /dev/null +++ b/src/i18n/it/screens.json @@ -0,0 +1,18 @@ +{ + "screenshot": { + "title": "Tutela della privacy", + "message": "Per favore, non rivelare l'identità degli altri utenti (nome, foto profilo, ecc..). Grazie!", + "button": "Ho capito" + }, + "localCorrupt": { + "message": "La sessione è scaduta, devi riaccedere" + }, + "pushError": { + "message": "Errore servizio push", + "description": "Riabilita le notifiche push nelle impostazioni" + }, + "shareError": { + "imageNotSupported": "Tipo immagine {{type}} non supportato", + "videoNotSupported": "Tipo video {{type}} non supportato" + } +} \ No newline at end of file diff --git a/src/i18n/it/screens/actions.json b/src/i18n/it/screens/actions.json new file mode 100644 index 00000000..36ee63af --- /dev/null +++ b/src/i18n/it/screens/actions.json @@ -0,0 +1,19 @@ +{ + "content": { + "button": { + "apply": "$t(common:buttons.apply)", + "cancel": "$t(common:buttons.cancel)" + }, + "notificationsFilter": { + "heading": "Filtra notifiche per tipo", + "content": { + "follow": "$t(screenTabs:me.push.follow.heading)", + "favourite": "$t(screenTabs:me.push.favourite.heading)", + "reblog": "$t(screenTabs:me.push.reblog.heading)", + "mention": "$t(screenTabs:me.push.mention.heading)", + "poll": "$t(screenTabs:me.push.poll.heading)", + "follow_request": "Richieste di seguirti" + } + } + } +} \ No newline at end of file diff --git a/src/i18n/it/screens/announcements.json b/src/i18n/it/screens/announcements.json new file mode 100644 index 00000000..c41719f6 --- /dev/null +++ b/src/i18n/it/screens/announcements.json @@ -0,0 +1,10 @@ +{ + "heading": "Annunci", + "content": { + "published": "Pubblicato <0 />", + "button": { + "read": "Già letto", + "unread": "Segna come letto" + } + } +} \ No newline at end of file diff --git a/src/i18n/it/screens/compose.json b/src/i18n/it/screens/compose.json new file mode 100644 index 00000000..4abf23cd --- /dev/null +++ b/src/i18n/it/screens/compose.json @@ -0,0 +1,178 @@ +{ + "heading": { + "left": { + "button": "Scarta", + "alert": { + "title": "Scartare il toot?", + "buttons": { + "save": "Salva come bozza", + "delete": "Scarta ed esci", + "cancel": "Annulla" + } + } + }, + "right": { + "button": { + "default": "Toot", + "conversation": "Messaggio diretto", + "reply": "Toot di risposta", + "deleteEdit": "Toot", + "edit": "Toot", + "share": "Toot" + }, + "alert": { + "default": { + "title": "Invio fallito", + "button": "Riprova" + }, + "removeReply": { + "title": "Impossibile trovare il toot a cui si è risposto", + "description": "Il toot a cui si è risposto potrebbe essere stato cancellato. Vuoi rimuoverne il riferimento?", + "cancel": "$t(common:buttons.cancel)", + "confirm": "Rimuovi" + } + } + } + }, + "content": { + "root": { + "header": { + "postingAs": "Pubblicando come @{{acct}}@{{domain}}", + "spoilerInput": { + "placeholder": "Avviso di spoiler" + }, + "textInput": { + "placeholder": "A cosa stai pensando?", + "keyboardImage": { + "exceedMaximum": { + "title": "Hai raggiunto il numero massimo di allegati permessi", + "OK": "$t(common:buttons.OK)" + } + } + } + }, + "footer": { + "attachments": { + "sensitive": "Segnala allegati come sensibili", + "remove": { + "accessibilityLabel": "Rimuovi allegato numero {{attachment}}" + }, + "edit": { + "accessibilityLabel": "Modifica allegato numero {{attachment}}" + }, + "upload": { + "accessibilityLabel": "Carica altri allegati" + } + }, + "emojis": { + "accessibilityHint": "Premi per aggiungere delle emoji a questo toot" + }, + "poll": { + "option": { + "placeholder": { + "accessibilityLabel": "Scelta di sondaggio {{index}}", + "single": "Risposta singola", + "multiple": "Risposta multipla" + } + }, + "quantity": { + "reduce": { + "accessibilityLabel": "Riduci le scelte del sondaggio a {{amount}}", + "accessibilityHint": "Hai raggiunto il minimo di scelte possibili per il sondaggio ({{amount}})" + }, + "increase": { + "accessibilityLabel": "Aumenta le scelte del sondaggio a {{amount}}", + "accessibilityHint": "Hai raggiunto il massimo di scelte possibili per il sondaggio ({{amount}})" + } + }, + "multiple": { + "heading": "Tipo di risposta", + "options": { + "single": "Risposta singola", + "multiple": "Risposta multipla", + "cancel": "$t(common:buttons.cancel)" + } + }, + "expiration": { + "heading": "Durata", + "options": { + "300": "5 minuti", + "1800": "30 minuti", + "3600": "1 ora", + "21600": "6 ore", + "86400": "1 giorno", + "259200": "3 giorni", + "604800": "7 giorni", + "cancel": "$t(common:buttons.cancel)" + } + } + } + }, + "actions": { + "attachment": { + "accessibilityLabel": "Carica allegato", + "accessibilityHint": "Non potrai creare sondaggi se carichi degli allegati", + "failed": { + "alert": { + "title": "Caricamento fallito", + "button": "Riprova" + } + } + }, + "poll": { + "accessibilityLabel": "Crea sondaggio", + "accessibilityHint": "Non potrai caricare allegati se crei un sondaggio" + }, + "visibility": { + "accessibilityLabel": "La visibilità del toot è: {{visibility}}", + "title": "Visibilità toot", + "options": { + "public": "Pubblico", + "unlisted": "Non listato", + "private": "Solo seguaci", + "direct": "Messaggio diretto", + "cancel": "$t(common:buttons.cancel)" + } + }, + "spoiler": { + "accessibilityLabel": "Spoiler" + }, + "emoji": { + "accessibilityLabel": "Aggiungi emoji", + "accessibilityHint": "Apri il pannello di selezione delle emoji, scorri orizzontalmente per cambiare tra le pagine" + } + }, + "drafts_one": "Bozze ({{count}})", + "drafts_other": "Bozze ({{count}})" + }, + "editAttachment": { + "header": { + "title": "Modifica allegato", + "right": { + "accessibilityLabel": "Salva le modifiche all'allegato", + "failed": { + "title": "Modifica fallita", + "button": "Riprova" + } + } + }, + "content": { + "altText": { + "heading": "Descrizione media per ipovedenti", + "placeholder": "Puoi aggiungere una descrizione (anche chiamata alt-text) ai tuoi media, così da renderli accessibili a molte più persone, incluse quelle con disabilità visive.\n\nUna buona descrizione è concisa ma presenta il contenuto del media in modo abbastanza accurato da farne capire il contesto." + }, + "imageFocus": "Trascina il cerchio per modificare il punto focale della foto" + } + }, + "draftsList": { + "header": { + "title": "Bozza" + }, + "content": { + "accessibilityHint": "Bozza salvata, premi per modificarla", + "textEmpty": "Testo vuoto" + }, + "checkAttachment": "Controllo degli allegati sul server..." + } + } +} \ No newline at end of file diff --git a/src/i18n/it/screens/imageViewer.json b/src/i18n/it/screens/imageViewer.json new file mode 100644 index 00000000..1a640fec --- /dev/null +++ b/src/i18n/it/screens/imageViewer.json @@ -0,0 +1,17 @@ +{ + "content": { + "actions": { + "accessibilityLabel": "Altre azioni per questa immagine", + "accessibilityHint": "Puoi salvare o condividere questa immagine" + }, + "options": { + "save": "Salva immagine", + "share": "Condividi immagine", + "cancel": "$t(common:buttons.cancel)" + }, + "save": { + "succeed": "Immagine salvata", + "failed": "Salvataggio immagine fallito" + } + } +} \ No newline at end of file diff --git a/src/i18n/it/screens/tabs.json b/src/i18n/it/screens/tabs.json new file mode 100644 index 00000000..083067f6 --- /dev/null +++ b/src/i18n/it/screens/tabs.json @@ -0,0 +1,345 @@ +{ + "tabs": { + "local": { + "name": "Home" + }, + "public": { + "name": "", + "segments": { + "left": "Federazione", + "right": "Locale" + } + }, + "notifications": { + "name": "Notifiche" + }, + "me": { + "name": "Profilo" + } + }, + "common": { + "search": { + "accessibilityLabel": "Cerca", + "accessibilityHint": "Cerca hashtags, utenti, o toot" + } + }, + "notifications": { + "filter": { + "accessibilityLabel": "Filtri", + "accessibilityHint": "Filtra le notifiche mostrate per tipo" + } + }, + "me": { + "stacks": { + "bookmarks": { + "name": "Segnalibri" + }, + "conversations": { + "name": "Messaggi diretti" + }, + "favourites": { + "name": "Apprezzati" + }, + "fontSize": { + "name": "Grandezza del testo dei toot" + }, + "lists": { + "name": "Liste" + }, + "list": { + "name": "Lista: {{list}}" + }, + "push": { + "name": "Notifiche push" + }, + "profile": { + "name": "Modifica profilo" + }, + "profileName": { + "name": "Modifica nome visualizzato" + }, + "profileNote": { + "name": "Modifica descrizione" + }, + "profileFields": { + "name": "Modifica metadati profilo" + }, + "settings": { + "name": "Impostazioni app" + }, + "webSettings": { + "name": "Altre impostazioni account" + }, + "switch": { + "name": "Cambia account" + } + }, + "fontSize": { + "showcase": "Toot di esempio", + "demo": "
Questo toot è un esempio 😺️. Puoi scegliere diverse opzioni di grandezza del testo qui sotto.
Questa impostazione si applica solo al testo dei toot, non anche agli altri testi della app.