Domanda

Sto cercando di costruire la mia prima applicazione localizzata. Ho tutte le stringhe in codice tradotte usando nslocalizedString (per l'uso con genstrings attrezzo). Adesso mi sto imbattendo ibtool. Come funziona la localizzazione incrementale? Per quanto riguarda la pagina manuale, dovrei scrivere qualcosa del genere:

$ 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 della versione (GIT/SVN), il file "vecchio" è in pochi commit fa, il file incrementale è il differenziale e il percorso/a/new.xib è un file XIB di recente prodotto. mod.nib è un mistero per me. Qualcuno può spiegarmi come funziona? Inoltre, come si avvia la localizzazione di un XIB se non sono disponibili versioni precedenti (cioè non incrementale, ma localizzazione iniziale)?

È stato utile?

Soluzione

Penso che la loro scelta di terminologia, in particolare per --incremental-file, sta causando confusione. L'idea è che hai una vecchia versione del tuo XIB in due lingue (fonte e target) e che da allora l'hai modificata nella lingua di origine e desideri aggiornare la versione per il linguaggio target da abbinare.

Facciamo un esempio. In precedenza avevi Home.xib in inglese (lingua di origine) e hai fatto tradurre qualcuno in francese (lingua target). 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 i nuovi Uilabel e Uitextfield e che le cose siano spostate come in inglese. Si noti che qualsiasi contenuto testuale impostato nel tuo nuovo Uilabel e Uitextfield verrà aggiunto in inglese e dovrai quindi essere tradotto nel XIB francese (ma puoi automatizzarlo aggiungendo --import-strings-file e fornire le traduzioni in un altro file).

Quindi, se mappiamo il comando che hai mostrato a 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, dipende davvero come localizzerai i tuoi XIB. Ovviamente creerai le nuove versioni linguistiche di XIBS (in Xcode, aggiungi solo una lingua all'elenco delle lingue di XIB e gli XIB localizzati vengono creati automaticamente). E poi se li localizzi in Interface Builder da solo, apporterai semplicemente le modifiche pertinenti (traduzione del testo e qualsiasi ridimensionamento necessario) negli XIB localizzati. Oppure potresti estrarre il testo negli XIB in .strings file, farli tradurre e iniettarli nella versione linguistica pertinente di questi XIB. Per questo, ancora una volta userai ibtool ma con --generate-strings-file per la fase di estratto e con --import-strings-file per la fase di iniezione.

Altri suggerimenti

Ho scritto una sceneggiatura per progetti GIT che automatizza i passaggi necessari (come descritto nel Rispondere sopra) per migrare una modifica in una lingua diversa.

Uso:

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

Esempio:

Dopo aver commesso le modifiche al file XIB inglese, esegui lo script nella radice della 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top