2011-12-06 22 views
7

Estoy intentando construir mi primera aplicación localizada. Tengo todas las cadenas de caracteres traducidas usando NSLocalizedString (para usar con la herramienta genstrings). Ahora estoy topando con ibtool. ¿Cómo funciona la localización incremental? En cuanto a la página del manual, que debería escribir algo como esto:¿Cómo funciona la localización incremental?

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

¿Dónde consigo el archivo incremental? A mi entender si estoy usando el control de versiones (GIT/SVN), el archivo "viejo" está en Hace unos confirmaciones, el archivo incremental es el diff y la ruta/a/new.xib se produce recién xib archivo. mod.nib es un misterio para mí. ¿Alguien puede explicarme cómo funciona esto? Además, ¿cómo empiezo la localización de un xib si no hay versiones previas disponibles (es decir, no haciendo incrementos, sino una localización inicial)?

Respuesta

12

Creo que su elección de la terminología, particularmente para --incremental-file, está causando confusión. La idea es que tengas una versión anterior de tu xib en dos idiomas (origen y destino) y que luego la hayas cambiado en tu idioma de origen y quieras actualizar la versión del idioma de destino para que coincida.

Tomemos un ejemplo. Anteriormente, tenía home.xib en inglés (idioma de origen) y consiguió que alguien lo tradujera al francés (idioma de destino). Desde entonces, ha desarrollado una nueva función y ahora tiene una versión actualizada de home.xib en inglés en la que agregó un UILabel y un UITextField y cambió las cosas. El comando que mostró puede ayudarlo a obtener una versión actualizada de home.xib en francés para que tenga el nuevo UILabel y UITextField y que todo se mueva como en inglés. Tenga en cuenta que cualquier contenido de texto que establezca en su nuevo UILabel y UITextField se agregará en inglés y luego tendrá que traducirse al xib francés (pero puede automatizarlo agregando --import-strings-file y proporcionando las traducciones en un archivo más).

Así que si analizamos los comandos que mostró a este ejemplo:

  • --previous-file path/to/prev.xib especifica la edad Inglés xib
  • --incremental-file path/to/inc.xib especifica la edad xib francesa
  • --write path/to/new.xib especifica el nuevo xib francesa que se creará
  • mod.xib especifica la nueva Inglés xib

Para su otra pregunta sobre cómo iniciar el proceso, realmente depende de cómo localizará sus xibs. Obviamente creará las nuevas versiones de idioma de los xibs (en XCode, simplemente agrega un idioma a la lista de idiomas del xib y los xibs localizados se crean automáticamente). Y luego, si los localizas en Interface Builder, simplemente realizarás los cambios relevantes (traducción del texto y cualquier cambio de tamaño necesario) en los xibs localizados. O puede extraer el texto en los xibs en archivos .strings, hacerlos traducir e insertarlos en la versión de idioma pertinente de estos xibs. Por esto, de nuevo va a utilizar ibtool pero con --generate-strings-file para la fase de extracto y con --import-strings-file para la fase de inyección.

+0

Algún consejo sobre la producción de la "vieja Inglés xib" control de versiones si utilizo? – Eimantas

+0

Suponiendo que todas sus xibs están en control de versiones (que sin duda debe ser!), El antiguo xib Inglés está ahí a su disposición en su historial de versiones. Estamos trabajando en la suposición de que el inglés es su idioma base, el idioma desde el que va a traducir. – Clafou

+0

Correcto, entonces solo para obtener ese viejo archivo en inglés, debería verificarlo desde el control de versión de la última traducción actualizada. Esto parece un poco tedioso. Supongo que no hay nada más que pueda hacer. ¡Gracias por tu respuesta! – Eimantas

3

Escribí un script para proyectos de git que automatiza los pasos necesarios (como se describe en el answer anterior) para migrar un cambio a un idioma diferente.

Uso:

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

Ejemplo:

Después de haber comprometido los cambios en el fichero de xib Inglés, ejecute la secuencia de comandos en la raíz de la carpeta de recursos.

migrate_changes.sh de MyViewController 

Fuente:

#!/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