2011-12-06 21 views
7

Sto provando a creare la mia prima applicazione localizzata. Ho tutte le stringhe nel codice tradotte usando NSLocalizedString (per l'uso con lo strumento genstrings). Ora sto sbattendo contro ibtool. Come funziona la localizzazione incrementale? Per quanto riguarda la pagina di manuale, dovrei scrivere qualcosa del genere:Come funziona la localizzazione incrementale?

$ ibtool --previous-file path/to/prev.xib \ 
--incremental-file path/to/inc.xib --localize-incremental \ 
--write path/to/new.xib mod.xib 

Dove posso ottenere il file incrementale? A mio avviso, se sto usando il controllo di versione (git/svn), il file "vecchio" è a pochi commit fa, il file incrementale è il diff e path/to/new.xib è il file xib di nuova produzione. mod.nib è un mistero per me. Qualcuno può spiegarmi come funziona? Inoltre, come posso avviare la localizzazione di uno xib se non sono disponibili versioni precedenti (cioè non incrementale, ma localizzazione iniziale)?

risposta

12

Penso che la loro scelta di terminologia, in particolare per --incremental-file, sta causando confusione. L'idea è che tu abbia una vecchia versione del tuo xib in due lingue (sorgente e destinazione) e che tu abbia cambiato da allora nella tua lingua di origine e desideri aggiornare la versione della lingua di destinazione in modo che corrisponda.

Facciamo un esempio. In precedenza hai avuto home.xib in inglese (lingua di partenza) e qualcuno ha potuto tradurlo in francese (lingua di destinazione). Da allora hai sviluppato una nuova funzionalità e ora hai una versione aggiornata di home.xib in inglese in cui hai aggiunto un UILabel e un UITextField e spostato le cose. Il comando che hai mostrato può aiutarti a ottenere una versione aggiornata di home.xib in francese in modo che abbia il nuovo UILabel e UITextField e che le cose vengano spostate come in inglese. Si noti che qualsiasi contenuto testuale impostato nel nuovo UILabel e UITextField sarà aggiunto in inglese e dovrà quindi essere tradotto nel xib francese (ma è possibile automatizzarlo aggiungendo --import-strings-file e fornendo le traduzioni in un altro file).

Quindi, se si mappa il comando che avete mostrato per questo esempio:

  • --previous-file path/to/prev.xib specifica il vecchio inglese xib
  • --incremental-file path/to/inc.xib specifica il vecchio xib francese
  • --write path/to/new.xib specifica il nuovo xib francese che verrà creato
  • mod.xib specifica il nuovo xib inglese

Per la tua altra domanda su come si avvia il processo, in realtà dipende da come verrà localizzato il tuo xibs. Ovviamente creerai le nuove versioni linguistiche degli xibs (in XCode, ti basterà aggiungere una lingua all'elenco di lingue dello xib e gli xib localizzati verranno creati automaticamente). E poi se li localizzi autonomamente in Interface Builder, allora dovrai semplicemente apportare le modifiche rilevanti (traduzione di testo e qualsiasi ridimensionamento necessario) negli xib localizzati. Oppure puoi estrarre il testo negli xibs nei file .strings, convertirli e inserirli nella versione linguistica pertinente di questi xib. Per questo, di nuovo si utilizzerà ibtool ma con --generate-strings-file per la fase di estrazione e con --import-strings-file per la fase di iniezione.

+0

Eventuali suggerimenti su produrre il "vecchio inglese XI ter" controllo di versione se uso? – Eimantas

+0

Supponendo che tutti i tuoi xibs siano in controllo di versione (dovrebbero essere sicuramente!), Il vecchio xib inglese è a tua disposizione nella cronologia delle versioni. Stiamo lavorando sul presupposto che l'inglese sia la tua lingua di base, quella da cui stai per tradurre. – Clafou

+0

Giusto, quindi per ottenere quel vecchio file inglese dovrei controllarlo dal controllo di versione dall'ultima traduzione aggiornata. Questo sembra un po 'noioso. Immagino non ci sia nient'altro che possa fare. Grazie per la tua risposta! – Eimantas

3

Ho scritto uno script per progetti git che automatizza i passaggi necessari (come descritto in answer sopra) per migrare una modifica in una lingua diversa.

Usage:

migrate_changes.sh <target_language> <xib file without ending> 

Esempio:

Dopo aver commesso le modifiche al file XI ter inglese, eseguire lo script alla radice della vostra cartella delle risorse.

migrate_changes.sh de MyViewController 

Fonte:

#!/bin/sh 

LANG_FROM='en' 
LANG_TO=$1 
XIB_FILE=$2 

FROM_FILE=${LANG_FROM}.lproj/${XIB_FILE}.xib 
PREV_FILE=${LANG_FROM}.lproj/${XIB_FILE}_old.xib 
TO_FILE=${LANG_TO}.lproj/${XIB_FILE}.xib 

# checkout old version of xib file 
git show `git log -2 --format="%H" $FROM_FILE | tail -n 1`:./$FROM_FILE > $PREV_FILE 

# merge changes 
ibtool --previous-file $PREV_FILE --incremental-file $TO_FILE --localize-incremental --write $TO_FILE $FROM_FILE 

# remove previous version 
rm $PREV_FILE