È possibile aggiornare le stringhe di uno storyboard localizzato?


226

Ho localizzato una parte della mia applicazione con la creazione di uno storyboard base.lproj e 3 file di stringhe per esso. È stato un mese fa e successivamente ho aggiunto un nuovo controller di visualizzazione all'app, ma i pulsanti e le etichette di questo controller non vengono visualizzati nei file di stringa

È possibile aggiornare questi 3 file di stringhe collegati allo storyboard oppure devo aggiungere nuove traduzioni di stringhe a livello di codice usando NSLocalizableString e Localizable.strings?


Risposte:


264

Esistono due opzioni:

opzione 1

Xcode può "ricaricare" il file convertendolo in un tipo di file [Interface Builder Cocoa Touch Storyboard] o in un tipo di file [Stringhe localizzabili] .

  1. Seleziona il tuo file di storyboard di base da Project Navigator
  2. Trova la sezione Localizzazione in File Inspector
  3. Se il tuo file è attualmente una [stringhe localizzabili], cambialo in [Interface Builder Cocoa Touch Storyboard] o viceversa.
  4. Xcode avrebbe dovuto convertire lo storyboard nella versione corrente, preservando al contempo i vecchi sforzi di localizzazione. Qui puoi cambiare il file al tipo di file originale se lo desideri.

opzione 2

Usa ibtool per estrarre le stringhe nello storyboard.

  1. Apri l'applicazione Terminale

  2. Individua la tua directory Base.lproj

  3. Usa questa linea per estrarre le stringhe:

    ibtool MainStoryboard.storyboard --generate-strings-file file_name.strings

  4. Dopo che ibtool estrae le stringhe in file_name.strings, puoi copiarlo e incollarlo nel tuo file .strings originale

Visita per maggiori informazioni: https://conyac.cc/business/columns/localization_guide_ios


1
Ho provato l'opzione 1, ma cambiando il tipo di file da [Localizable Strings] a [Interface Builder Cocoa Touch Storyboard] risulta sempre un arresto anomalo di Xcode 5.0.1. Il motivo potrebbe essere che, poiché non ero a conoscenza delle possibilità di cui sopra, ho modificato manualmente i file di localizzazione dello storyboard in precedenza.
Reinhard Männer,

16
L'opzione 1 funziona, ma devi passare da "Localizable .." a "interface ..." e poi di nuovo!
João Nunes,

3
L'opzione 1 non funziona per me utilizzando XCode 6.0.1. Quando provo a convertire il mio file .strings in .interfacebuilder XCode chiede se i file devono essere convertiti. I file vengono creati sul file system, tuttavia i file di stringa rimangono e contengono i vecchi valori.
Bouncing Bit

53
Per me l'opzione 1 ha sostituito tutte le stringhe già tradotte con quelle inglesi. Ho dovuto aggiungere di nuovo la traduzione.
Mihail Velikov

5
L'opzione 1 sembra molto instabile in Xcode 7. A volte funziona, a volte no. A volte sostituisce in modo casuale alcune delle mie stringhe già tradotte con versioni inglesi.
Adam Johns,

76

Dai un'occhiata a BartyCrouch , risolve perfettamente il tuo problema. Inoltre è open source , gestito attivamente e può essere facilmente installato e integrato nel progetto.


Installa BartyCrouch tramite Homebrew :

brew install bartycrouch

In alternativa, installalo tramite Mint :

mint install Flinesoft/BartyCrouch

Aggiorna in modo incrementale i tuoi file di Stringhe Storyboard / XIBs:

$ bartycrouch update

Questo farà esattamente quello che stavi cercando.


Per mantenere aggiornati i file di Stringhe Storyboard / XIB nel tempo, consiglio vivamente di aggiungere uno script di compilazione (istruzioni su come aggiungere uno script di compilazione qui ):

if which bartycrouch > /dev/null; then
    bartycrouch update -x
    bartycrouch lint -x
else
    echo "warning: BartyCrouch not installed, download it from https://github.com/Flinesoft/BartyCrouch"
fi

Oltre ad aggiornare in modo incrementale i tuoi file di Stringhe Storyboard / XIBs, questo assicurerà anche che i tuoi Localizable.stringsfile rimangano aggiornati con le chiavi appena aggiunte nel codice utilizzando NSLocalizedStringe mostrino avvisi per chiavi duplicate o valori vuoti.

Assicurati di dare un'occhiata a BartyCrouch su GitHub o in questo articolo dettagliato per ulteriori informazioni.


1
Wow! Questo strumento è semplicemente fantastico. Ciò richiede più voti!
ph1lb4,

1
strumento adorabile - non più copia / incolla manuale di nuovi testi di etichette in file * .strings (... e dimenticando la traduzione di qualsiasi nuova etichetta come prima) ... Grazie mille!
iKK,

esiste un pod simile per i progetti OBJC?
rickrvo,

2
Questa è la risposta che stiamo cercando. Questa dovrebbe essere la risposta accettata.
Juanjo,

3
Non capisco perché dopo 6 anni da quando questa domanda è stata posta e questa soluzione irregolare è ancora necessaria per farlo funzionare in Xcode. Apple avrebbe dovuto lavorare su questo.
Huggie,

57

È possibile aggiungere manualmente una chiave nel file di localizzazione. Puoi trovare l'oggetto chiave selezionandolo nell'editor dello storyboard. Diamo un'occhiata a Object-IDispettore identità. Sembra"nwc-b2-19c"

Sulla tua localizzazione aggiorna o aggiungi la traduzione. Per esempio :

"nwc-b2-19c.title" = "Translated title";

8
penso che sia l'approccio meno rischioso
Nicolas Manzini,

Ma alcuni degli ID-oggetto non sono mostrati nel file .string. Perché non sono collegati. Quindi in quel momento cosa posso fare?
Mihir Oza,

c'è un modo per selezionarlo tramite un nome e non solo l'id generato automaticamente?
Cocoseis

Per un UILabel, è: "YeB-ap-Wkw.text" = "Testo delle mie etichette";
ioopl,

30

Questo non è per tutti, ma non richiede strumenti aggiuntivi nel terminale ed è facile per piccole modifiche manuali. (Non considerare questo quando si desidera automatizzare il processo.)

Passaggio 0: impostazione della lingua dello storyboard

  • Base (con testi in inglese)
  • Inglese (il file di stringhe localizzabili non esiste perché il file di base è l'inglese)
  • altre lingue (file di stringhe localizzabili)

configurazione di base

Questo passaggio viene eseguito una sola volta.

Ora, quando aggiungo qualcosa allo storyboard, faccio quanto segue

Passaggio 1: aggiungere il file di stringhe localizzabili in inglese

Aggiungi inglese

basta contrassegnare l'elemento pubblicitario inglese.

Questo crea un file di stringhe localizzabili inglese completamente nuovo con tutte le linee

Passaggio 2: copia i nuovi elementi pubblicitari negli altri file di lingua

e tradurli

Passaggio 3: deselezionare l'inglese, rimuovere il file di stringhe localizzabili corrispondente

il file era necessario solo per ottenere i nuovi elementi pubblicitari

Questo è un processo facile e veloce, tutto è fatto nell'editor dello storyboard

Modificare:

Questo processo funziona molto bene con piccoli storyboard. Ad esempio, ho un progetto basato su schede e ho uno storyboard per ogni scheda.

Cerca "riferimento storyboard" per trovare esercitazioni.

Buon esempio: riferimento dello storyboard in Xcode, dove dovremmo usarlo?

Quindi ogni piccolo storyboard ha solo alcune stringhe da localizzare.


grande! Hai anche trovato un'idea su come rimuovere gli elementi eliminati?
Tobe,

@Tobe Se dividi lo storyboard come suggerito sopra, è davvero facile individuare le stringhe che non vengono più utilizzate.
Gerd Castan,

15

Infine, la mia soluzione era (rudimentale ma efficace) copiare le traduzioni precedenti e incollarle in un nuovo file creato deselezionando e selezionando la casella Lingua di localizzazione.

Ciò sarebbe utile in alcuni casi come il mio quando devi cambiare solo uno o due testi.


Ciò preserverebbe l'ID e tutto il tempo? Ho fatto un test e sembrava funzionare, ma potrebbe essere un disastro se l'ID è cambiato.
ullstrm,

Penso di sì, l'ho fatto molte volte senza alcun problema.
jpl850,

1
Gli ID vengono assegnati quando vengono rilasciati gli elementi dell'interfaccia utente. Sono indipendenti dalla localizzazione in quanto assegnati dallo storyboard. Quindi non ci saranno effetti sugli ID.
iBug

Grazie iBug per la spiegazione =)
jpl850

14

Penso che il modo migliore sia utilizzare le localizzazioni di esportazione / importazione integrate:

  1. In Project Navigator scegli la cartella del tuo progetto
  2. Scegli Editor> Esporta per localizzazione,
  3. Tutte le traduzioni lasciate al loro posto e XCode aggiungono automaticamente stringhe perse. Inoltre, prima dell'importazione, è possibile modificare .xliff nell'editor XLIFF (ad esempio online - http://xliff.brightec.co.uk ) e non è necessario farlo in XCode.
  4. quindi Editor> Importa localizzazioni e scegli il file .xliff salvato.

PS Se non vuoi modificare in XLIFF Editor e hai saltato il passaggio 3, XCode non può salvare nuove stringhe. In questo caso, apri .xliff nell'editor XLIFF, salva nuovamente senza modifiche e importa un nuovo file.


1
+1 Modo semplice e corretto per lavorare con la localizzazione. Inoltre è preferito essere Apple
Jurasic

1
Usando Xcode 7.3.1, in un progetto di esempio già localizzato, ho cambiato un'etichetta (da "un testo" a "un testo di base") e ho aggiunto una nuova etichetta. Ho esportato per la localizzazione, toccato il file .xliff (senza modifiche) e importato di nuovo. Nel file Main.strings, la riga di commento per l'etichetta modificata è stata aggiornata /* Class = "UILabel"; text = "a basic text"; ObjectID = "HFW-aN-MTb"; */, ma la nuova etichetta NON viene creata nel file Main.strings. Quindi ho modificato il file .xliff per aggiungere una traduzione per la nuova etichetta. L'ho importato di nuovo. La nuova etichetta è ora inserita nel file Main.strings.
Duthen,

+1 ma c'è un bug che ho scoperto. Quando si aggiungono nuovi elementi, questi non si trovano in un file esportato (come dice duthen). Ma quando eseguo un'esportazione subito dopo (senza modifiche allo storyboard), tutti gli elementi aggiunti sono, sorprendentemente, inclusi. Quindi esegui un'esportazione due volte. Il secondo includerà tutti i nuovi elementi. Grazie Apple!
Viktor Kucera,

6

Quando fai clic nello storyboard, ad esempio Main.storyboard ... Sul lato destro puoi vedere il menu di localizzazione (vedi immagine allegata). Se deselezioni e ricontrolla una lingua, il file verrà nuovamente generato. Quindi di solito copio il contenuto, generi di nuovo il file e quindi incollo il contenuto che ho copiato e già tradotto.

Questo è il modo che uso per aggiornare il dizionario.

inserisci qui la descrizione dell'immagine


Con Xcode 10 se usi git evidenzia le differenze!
Ricardo Ruiz Romero,

Sì, è possibile ... ora il mio file è più grande rispetto a questa data e lo unisco con la versione del repository dopo averlo generato di nuovo.
J. Fdez,

5

Ho avuto uno storyboard enorme con molte stringhe lì. Due lingue base inglese e un altro arabo. Il compito era quello di aggiungere alcuni campi ed etichette allo storyboard e aggiungere la localizzazione per essi senza script e NSLocalizableStrings.

Per me ha aiutato il prossimo:

Primo : assicurati di avere git per prevenire cambiamenti inaspettati.

  1. Vai alla schermata di destinazione in xcode e premi Editor-> Export For Localization.... Salvare il file ar.xliff da qualche parte.
  2. Scarica XLIFF Edtior .
  3. Apri il file ar.xliff e apporta le modifiche.
  4. Importa questo file in xcode. Fatto! Hai aggiornato il file delle stringhe dello storyboard.

Affinché funzioni, seleziona prima il progetto o la destinazione nell'editor di progetti Xcode.
Chuck Boris,

4

Esiste un'app uno strumento da riga di comando di Apple chiamato AppleGlot che supporta la localizzazione incrementale. Non l'ho ancora provato, ma sembra esattamente lo strumento che hai cercato (qualche tempo fa).


Lo appleglotstrumento funziona con i bundle dell'applicazione finali. È un approccio completamente diverso per le applicazioni di traduzione.
Flovdis,

1
Qualcosa non va in un "approccio diverso", o cosa causa il downvote?
tilo,

È necessario cercare AppleGlot in quel link ora.
NSDeveloper

4

Ecco una sceneggiatura per estrarre stringhe da storyboard e xib e unirle con traduzioni esistenti.

Per eseguire automaticamente lo script quando si crea un progetto, inserire lo script nella directory principale del progetto e aggiungere una fase Esegui script con la riga seguente a una fase di creazione di destinazione nelle impostazioni del progetto.

./mergegenstrings.py PathToSourceDir

Oppure puoi eseguire lo script sul Terminale manualmente quando vuoi.

Lo script funziona ibtoolcome Tha Leang ha risposto. Funziona anche genstringsper estrarre e unire le stringhe contrassegnate con NSLocalizedStringnel codice sorgente. Lo script si basa su uno script in questo post , che unisce le stringhe dopo l'esecuzione genstrings.


puoi fornire maggiori informazioni su come usarlo?
user023

1
Ho aggiunto un commento all'essenziale. Spero che sia d'aiuto. gist.github.com/yoichitgy/29bdd71c3556c2055cc0
Yoichi Tagaya

Grazie, funziona perfettamente per me. Se qualcuno ha problemi con le autorizzazioni questo potrebbe essere utile: stackoverflow.com/questions/9850936/...
iCode

Questo script funziona bene per i file di story.strings dello storyboard, ma sembra sovrascrivere le mie traduzioni Localizable.strings in Xcode 7.
Adam Johns,

3

L'approccio più semplice e molto meno rischioso è, basta copiare l'ID oggetto dallo storyboard e aggiungere una nuova chiave per la chiave nel file localizzato come nell'esempio seguente:

1: copia l'ID oggetto come di seguito dallo storyboard per il componente:

inserisci qui la descrizione dell'immagine

2: Aggiungi una nuova chiave nel file localizzato come di seguito:

"DjF-dn-0ay.text" = "Borrar datos y restablecer";

Nota: questo approccio è molto meno rischioso se si desidera aggiornare solo pochi componenti, altrimenti è possibile ricreare file localizzati per lo storyboard.


Grazie per la tua risposta!!!!!. Ho una domanda da porre, nei miei progetti, non ho creato uno sbocco per alcune etichette, pulsanti ... Se uso objectID per quei pulsanti ed etichette è sufficiente?
Harikarthick K,

3

Xlifftool è disponibile come app per Mac e funziona bene. Mostra tutte le stringhe e gli oggetti traducibili da info.plist, stringhe localizzabili e lo storyboard.

Scarica qui per il Mac: https://itunes.apple.com/lv/app/xlifftool/id1074282695?mt=12

Passaggio 1: in Xcode, selezionare la cartella del progetto nel navigatore del progetto. Quindi selezionare Editor / Esporta per localizzazione ...

Le stringhe traducibili verranno incluse in un file xliff nella lingua selezionata per la localizzazione in Xcode.

Passaggio 2: Apri quel file con xlifftool e traduci o aggiorna le tue traduzioni fatte in precedenza.

Passaggio 3: quindi caricare nuovamente nel progetto con Editor / Importa localizzazioni ...


Un'altra alternativa per macOS è Loca Studio . Simile a Xlifftool, l'app può aprire il risultato dell'editor di azioni Xcode -> Esporta per localizzazione. Ha alcune funzionalità di filtro e ricerca più avanzate e anche controlli automatici di controllo qualità. (informativa completa: sono lo sviluppatore principale).
guru_meditator,

0

Questo è il mio modo semplice per aggiornare il nuovo testo dallo storyboard o xib alla stringa di localizzazione

1- usa questo script http://tredje.se/dev/trouble/?x=entry:entry150917-204052

2- selezionare la stringa di localizzazione che si desidera aggiornare e cambiare la stringa della lingua da "Stringa di localizzazione" a "storyboard builder interfaccia"

3- ripristinalo :)

Fatto.

inserisci qui la descrizione dell'immagine


Cambia il file in Interface Builder Storyboard, ma dopo 1 o 2 secondi lo ripristina nuovamente in Stringhe localizzabili e nessuna aggiunta a Stringhe localizzabili per il nuovo testo di visualizzazione
Mujahid Latif

@MujahidLatif Sto usando questo Pod in questo momento, è davvero utile per me ed è in grado di aggiornare le localizzazioni storyboard e Localization.String come volontà github.com/Flinesoft/BartyCrouch
Fadi Abuzant

0

Opzione 1
Xcode può "ricaricare" il file convertendolo in un [Interface Builder Cocoa Touch Storyboard]tipo di file o in un [Localizable Strings]tipo di file.

Seleziona il tuo file di storyboard di base dal Project Navigator Trova la sezione Localizzazione in File Inspector . Se il tuo file è attualmente un [Localizable Strings], cambiarlo in [Interface Builder Cocoa Touch Storyboard]o viceversa.
Xcode avrebbe dovuto convertire lo storyboard nella versione corrente, preservando al contempo i vecchi sforzi di localizzazione. Qui puoi cambiare il file al tipo di file originale se lo desideri.

Opzione 2
Utilizzare ibtoolper estrarre le stringhe nello storyboard.

Apri l'applicazione Terminale
Trova la tua Base.lprojdirectory
Usa questa linea per estrarre le stringhe:

ibtool MainStoryboard.storyboard --generate-strings-file file_name.strings

Dopo che ibtool ha estratto le stringhe file_name.strings, è possibile copiarlo e incollarlo nel .stringsfile originale .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.