Pregunta

Estoy tratando de construir mi primera aplicación localizada. Tengo todas las cadenas en código traducidas usando NSLocalizedString (para usar con genstrings herramienta). Ahora me estoy topando con ibtool. ¿Cómo funciona la localización incremental? Con respecto a la página manual, debería escribir algo como esto:

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

¿Dónde obtengo el archivo incremental? En serio, si estoy usando el control de versiones (git/svn), el archivo "antiguo" es hace pocos compromisos, el archivo incremental es la diff y la ruta/to/new.xib es el archivo XIB recientemente producido. Mod.nib es un misterio para mí. ¿Alguien puede explicarme cómo funciona esto? Además, ¿cómo comienzo la localización de un XIB si no hay versiones anteriores disponibles (es decir, no es incremental, sino localización inicial)?

¿Fue útil?

Solución

Creo que su elección de terminología, particularmente para --incremental-file, está causando confusión. La idea es que tiene una versión anterior de su XIB en dos idiomas (fuente y destino) y que desde entonces la ha cambiado en su idioma de origen y desea actualizar la versión en idioma objetivo para que coincida.

Tomemos un ejemplo. Anteriormente tenía home.xib en inglés (idioma fuente) y consiguió que alguien lo traduzca 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 movió 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 Uiteextfield y que las cosas se muevan como en inglés. Tenga en cuenta que cualquier contenido textual que establezca en su nuevo uilabel y uitextfield se agregará en inglés y luego deberá traducirse en el xib francés (pero puede automatizar esto agregando. --import-strings-file y proporcionar las traducciones en un archivo más).

Entonces, si asignamos el comando que mostró a este ejemplo:

  • --previous-file path/to/prev.xib Especifica el antiguo inglés xib
  • --incremental-file path/to/inc.xib Especifica el viejo francés xib
  • --write path/to/new.xib Especifica el nuevo xib francés que se creará
  • mod.xib Especifica el nuevo inglés xib

Para su otra pregunta sobre cómo comenzar el proceso, realmente depende de cómo localizará sus XIB. Obviamente, creará las nuevas versiones de idiomas del XIBS (en Xcode, simplemente agregará un idioma a la lista de idiomas del XIB y los XIB localizados se crean automáticamente). Y luego, si los localiza en interfaz Builder usted mismo, simplemente realizará los cambios relevantes (traducción del texto y cualquier cambio de tamaño necesario) en los XIB localizados. O puede extraer el texto en el XIBS en .strings archivos, traducirlos y inyectarlos en la versión de idioma relevante de estos XIB. Para esto, de nuevo usarás IBTOOL pero con --generate-strings-file para la fase de extracto y con --import-strings-file para la fase de inyección.

Otros consejos

Escribí un script para proyectos git que automatizan los pasos necesarios (como se describe en el responder arriba) para migrar un cambio a un idioma diferente.

Uso:

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

Ejemplo:

Después de que haya cometido sus cambios en el archivo XIB en inglés, ejecute el script en la raíz de su 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top