strings multi localizable language app xcode localization

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.



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.