iphone - localizable - multi language ios app swift
LocalizaciĆ³n de iOS-Actualizando Localizable.strings con solo nuevas cadenas (4)
Checkout BartyCrouch , resuelve perfectamente tu problema. También es de código abierto , mantenido activamente y puede instalarse e integrarse fácilmente dentro de su proyecto.
Instale BartyCrouch a través de Homebrew :
$ brew install bartycrouch
Actualiza incrementalmente tus archivos Localizable.strings
:
$ bartycrouch code -p "/path/to/code/directory" -l "/directory/containing/Localizables" -a
Esto hará exactamente lo que estabas buscando.
Para mantener sus archivos Localizable.strings
actualizados a lo largo del tiempo, le recomiendo que agregue un script de compilación (instrucciones sobre cómo agregar un script de compilación here ):
if which bartycrouch > /dev/null; then
# Incrementally update all Storyboards/XIBs strings files
bartycrouch interfaces -p "$PROJECT_DIR"
# Add new keys to Localizable.strings files from NSLocalizedString in code
bartycrouch code -p "$PROJECT_DIR" -l "$PROJECT_DIR" -a -s
else
echo "warning: BartyCrouch not installed, download it from https://github.com/Flinesoft/BartyCrouch"
fi
Además de actualizar incrementalmente los archivos Localizable.strings
, esto también asegurará que los archivos Storyboards / XIBs Strings se actualicen con las claves recién agregadas.
Asegúrate de pagar BartyCrouch en BartyCrouch para obtener información adicional.
He buscado en Google y StackOverflow y todavía no tengo una respuesta clara en una forma fácil y automática de hacerlo, pero aquí está el escenario:
- Tengo una aplicación con 1000 cadenas localizadas en en, fr, de, es, it.
- Construyo una nueva característica que hace 10 claves
NSLocalizedString()
claramente nuevas. - Solo quiero que esas 10 nuevas cadenas se añadan al final de los archivos:
- en.lproj / Localizable.strings
- fr.lproj / Localizable.strings
- es.lproj / Localizable.strings
- de.lproj / Localizable.strings
- it.lproj / Localizable.strings
genstrings
recuperará las 1010 cadenas distintas. Esto es un dolor ya que tendré que "pinchar en un pajar" para encontrar esas 10 cuerdas cada vez que hago una actualización.
ACTUALIZACIÓN 19-SEP-2014 - XCode 6 - Apple finalmente ha lanzado soporte para la exportación XLIFF y la importación de sus archivos .strings ¿ Qué hay de nuevo en XCode 6? Localización
Linguan (v1.1.3) aunque es una herramienta encantadora la mayor parte del tiempo, está comenzando a ser una herramienta en el otro sentido. Combina los cambios, pero algunas cadenas no coinciden correctamente cuando se fusiona, por lo que cada vez que hace un escaneo de fuentes crea 100 nuevas claves duplicadas, así como las 10 cadenas que estoy buscando, por lo que está haciendo más trabajo.
FileMerge Como se sugiere a continuación, intenta hacer una diferencia entre versiones antiguas y nuevas de los archivos de salida de genstrings
. La salida de genstrings
tiene las cadenas ordenadas alfabéticamente, por lo que 10 cadenas dispersas en 1000 significa que hay 200 diferencias para revisar. sigue haciendo coincidir el /*...*/
y el "..." = "..."
y diciendo que el ...
se ha actualizado. No se ha actualizado, simplemente se cambió a una nueva ubicación en el archivo. Cada vez más, parece que voy a tener que escribir una herramienta personalizada.
MacHG + FileMerge en una nota lateral, por alguna extraña razón, no le gusta hacer diffs fuera del repositorio con la copia de trabajo de Localizable.strings. Tanto los paneles izquierdo como derecho aparecen vacíos. ACTUALIZACIÓN: Resulta variaciones en algunos conjuntos de cambios que se guardan como UTF-16 y algunos como UTF-8 están jodiendo con la posibilidad de hacer una diferencia adecuada.
Bash Script + FileMerge He escrito la siguiente secuencia de comandos para ayudar a mantener mi archivo de referencia en inglés cada vez que agrego nuevas entradas NSLocalizedString
:
#LOCALISATION UPDATE SCRIPT
#
#This will create a temporary copy of the current ''en'' reference file then generate the
#latest reference file using the ''genstrings'' tool. Finally forcing FileMerge to launch
#and diff the changes.
#
#Last Updated: 2014-JAN-06
#Author(s): Josh Wilson
clear
#assuming this script is run from $SRCROOT
#Backup Existing ''en'' reference
cp "en.lproj/Localizable.strings" "en.lproj/Localizable-src.strings"
#Scan source files for ''NSLocalizableString'' macros
genstrings -q -u -o en.lproj Classes/*.{m,mm}
genstrings -q -u -a -o en.lproj Classes/iPad/*.{m,mm}
genstrings -q -u -a -o en.lproj Classes/iPhone/*.{m,mm}
#Force FileMerge to launch and diff the update (NOTE: piping to cat forces GUI to open)
opendiff "en.lproj/Localizable-src.strings" "en.lproj/Localizable.strings" | cat
#Cleanup up temporary file
rm "en.lproj/Localizable-src.strings"
Pero esto solo actualiza el archivo EN y me falta una forma de tener los otros archivos de idioma actualizados con las nuevas claves. Este ha sido bueno para casos en los que no tengo una palabra en inglés como clave y genstrings bombs my "welcome_message" = "Welcome!"
con "welcome_message" = "welcome_message"
POEditor http://poeditor.com/ . Esta es una herramienta en línea y suscripción basada en 1000 cadenas. Parece funcionar bien, pero sería bueno si hubiera una herramienta que no esté basada en suscripción.
Traducto Pro parece hacer un buen trabajo al integrarse con XCode y extraer las cadenas y unir las cosas. Pero es imposible recuperar nada hasta que esté completamente traducido, por lo que se le obliga a usar sus servicios de traducción.
Sin duda, esta funcionalidad se ha implementado antes. ¿Cómo mantiene Apple sus aplicaciones localizadas?
¡Aficionados a la escritura, te invoco! El desarrollo de iOS ha estado sucediendo desde hace un tiempo y la localización es algo común, ¿hay una solución madura para esto?
Script de Python update_strings.py : update_strings.py finalmente recomendó una pregunta relacionada y el script de python en esta respuesta. Las mejores prácticas con NSLocalizedString parecen prometedoras ...
Probado y en su forma actual (31-MAYO-2013) no maneja los comentarios de líneas múltiples si tiene entradas de comentarios duplicados (espera comentarios de una sola línea).
Tal vez solo necesite ajustar un poco las expresiones regulares.
Es posible que desee verificar mi solución aquí: SwiftyLocalization
Con unos pocos pasos para la configuración, tendrá una localización muy flexible en la hoja de cálculo de Google (comentario, color personalizado, resaltado, fuente, varias hojas y más).
En resumen, los pasos son: Google Spreadsheet -> CSV files -> Localizable.strings
Además, también genera Localizables.swift , una estructura que actúa como interfaces para la recuperación y decodificación de claves para usted (sin embargo, debe especificar manualmente una forma de decodificar Cadena desde la clave).
¿Por qué es esto genial?
- Ya no necesita tener una clave como cadena simple en todos los lugares.
- Las claves incorrectas se detectan en tiempo de compilación.
- Xcode puede autocompletarse, por lo que puede hacer algo como esto:
// It''s defined as computed static var, so it''s up-to-date every time you call.
// You can also have your custom retrieval method there.
button.setTitle(Localizables.login.button_title_login, forState: .Normal)
El proyecto utiliza Google App Script para convertir hojas -> CSV Python script para convertir archivos CSV -> Localizable.strings Puede echar un vistazo rápido a esta hoja de ejemplo para saber qué es posible.
Puede consultar este complemento de Xcode que he creado para OneSky , y tiene como objetivo mejorar el flujo de trabajo de localización para desarrolladores iOS / Mac OSX.
La característica de generación de cadenas del complemento ejecuta genstrings
y ibtool --export-strings-file
a los archivos fuente / IB seleccionados, los nuevos archivos se agregarán al proyecto y al destino automáticamente, las nuevas cadenas se fusionarán en los archivos existentes con comentarios.
Solo generará / actualizará cadenas para el lenguaje base, pero puede utilizar otras funciones del complemento para automatizar la exportación e importación de traducciones con la plataforma OneSky, que es gratuita para proyectos de crowdsourcing.
si tienes las genstrings para la versión anterior, solo una "diferencia" entre lo nuevo y lo viejo podría hacer los trucos
EDITAR: mejor uso vimdiff para tratar con archivos utf-16