xcode - multi - ¿Cómo usar genstrings en múltiples directorios?
multi language ios app swift (12)
Tengo un directorio, que tiene muchos subdirectorios. esos subdires a veces incluso tienen subdirectorios. hay archivos fuente adentro.
¿Cómo podría usar genstrings para ver todos estos directorios y subdirectorios?
Digamos que cd a mi directorio raíz en Terminal, y luego escribo esto:
genstrings -o en.lproj *.m
¿Cómo podría decirle ahora que investigue todos estos directorios? ¿O tendría que agregar una gran cantidad de caminos relativos separados por comas? ¿cómo?
Acabo de agregar otra ruta al comando genstrings, así:
genstrings -o en.lproj *.m Classes/*.m
..y funcionó bien!
Por cierto. algo útil sobre genstrings. Cuando continúa desarrollando su aplicación, genstrings tiene un modificador -a que agrega nuevas cadenas al archivo de cadena localizado.
Prueba esto
genstrings -o English.lproj ./Classes/*.m ./Classes/*.h ./Classes/subclass/*.m
Si las subcarpetas no son demasiado, esto funcionará perfectamente.
Esto funciona para mí:
find ./ -name /*.m -print0 | xargs -0 genstrings -o en.lproj
Gracias a Brian y Uberhamster.
Tuve problemas para generar el archivo de cadenas para una estructura de carpetas donde algunas de las carpetas tenían espacios en sus nombres.
Encontré una buena solución en este sitio: http://riveroften.com/generate-localizable-strings-file-with-genstrings/
find . -name "*.m" -print0 | xargs -0 genstrings -o "en.lproj"
Lo siguiente mejora las respuestas anteriores, esto encontrará archivos .h y .m:
find ./ -name *.h -print0 -o -name *.m -print0 | xargs -0 genstrings -o en.lproj
Tengo un montón de código en archivos .mm, así que tengo que usar:
find . -name /*.m -or -name /*.mm | xargs genstrings
u otras variantes, como
find . -name /*.m -or -name /*.mm | xargs -0 genstrings -o en.lproj
Un método sería:
find ./ -name "*.m" -print0 | xargs -0 genstrings -o en.lproj
xargs es un buen pedazo de shell-foo. Tomará cadenas en entrada estándar y las convertirá en argumentos para la siguiente función. Esto rellenará el comando genstrings con cada archivo .m debajo del directorio actual.
Esta respuesta maneja espacios en la ruta utilizada para que sea más robusta. Debe usarlo para evitar omitir archivos al procesar sus archivos fuente.
Editar: como se dijo en los comentarios y en otras respuestas, se debe citar * .m.
No sé exactamente por qué, pero la orden de Brian no funcionó para mí. Esto hizo:
find . -name /*.m | xargs genstrings -o en.lproj
EDITAR: Bueno, cuando originalmente escribí esto, tenía prisa y solo necesitaba algo que funcionara. El problema que me estaba ocurriendo al usar la respuesta aceptada anteriormente era que "* .m" tiene que ser citado (y los curiosos pueden encontrar una explicación de por qué este es el caso en los comentarios sobre la respuesta de Brian King). Creo que la mejor solución es usar esa respuesta original con el bit apropiado, que luego leería:
find ./ -name "*.m" -print0 | xargs -0 genstrings -o en.lproj
Sin embargo, dejo mi respuesta original intacta por encima, en caso de que todavía ayude a cualquiera por el motivo que sea.
No estoy seguro si alguien lo notó o la opción vino más tarde, pero ahora hay una opción -a
es genstrings. Ninguna de las opciones anteriores funcionó para mí. A continuación está mi solución.
find ./ -name "*.m" -exec echo {} /; -exec genstrings -a -o en.lproj {} /;
Esto también imprimirá el nombre de los archivos leídos.
Aunque el comando anterior funciona bien, no fue exactamente para mí, porque en mi carpeta de proyecto hay muchos archivos que están en la carpeta pero no están incluidos en el proyecto xcode. Entonces, lo que hice fue crear una lista de archivos usados en mi proyecto al analizar el archivo pbxproj. Se agregó la lista en filelist.txt y se activó debajo del comando
while read f; do find ./ -name "$f" -exec echo {} /; -exec genstrings -a -o en.lproj {} /; ; done < filelist.txt
buscar ./ -name "* .m" -print0 | xargs -0 genstrings -o en.lproj
Esto rellenará el comando genstrings con cada archivo .m en el directorio actual. Luego crea la clave / contexto NSLocalizedString () en el archivo Localizable.string, que se puede usar en cualquier lugar del proyecto.
Rápido
find ./ -name /*.swift -print0 | xargs -0 genstrings -o .en.lproj
Si necesitas el archivo en la misma carpeta
find ./ -name /*.swift -print0 | xargs -0 genstrings -o .
Dado que nadie ha publicado una solución con Objective-C y Swift, creo que compartiría cómo lo hago.
find ./ -name "*.swift" -print0 -or -name "*.m" -print0 | xargs -0 genstrings -o en.lproj
Al usar esto, su archivo de cadenas localizables será reemplazado con cadenas de los archivos swift y object-c.
Editar: debe cd
al directorio con todos sus subdirectorios.