
Hola, mi nombre es Alexander y soy desarrollador de aplicaciones de Android. Una vez que llegué a un proyecto que tenía 11 idiomas de interfaz y más de 600 líneas. No había programadores en el lado del cliente, por lo que almacenaron todo en una hoja de cálculo de Excel. Cuando cambiaron algo en él, nos enviaron esta tabla con las palabras "Destacamos las celdas con cambios en amarillo, actualizamos las aplicaciones de Android e iOS, respectivamente". Después de eso, dos desarrolladores perdieron un par de horas, haciendo cambios manualmente. Y luego resultó que alguien había olvidado algo en algún lugar, cometió un error o no lo terminó, hubo discrepancias entre las plataformas, el cliente estaba nervioso, los desarrolladores estaban volviéndose locos. Esta situación no me convenía en absoluto, comencé a buscar formas de automatizar la descarga de filas desde Excel. El resultado fue un excelente código VBScript, que todavía disfrutamos usando. Ahora te presentaré este guión. Debajo del corte, una cierta cantidad de imágenes y código de script.
Entonces, primero eche un vistazo a la tabla en sí y evalúe la escala del problema:

¡Ahí está ella, belleza! Como podemos ver, hay varias columnas de servicio, nombres de líneas globales y sus traducciones. Además, algunas líneas se presentan solo en inglés y alemán, porque en la versión 2.0 de la aplicación, el cliente decidió dejar solo dos idiomas por ahora y agregar el resto más adelante. O tal vez se compadece del dinero para los traductores. Pero este es su negocio, pero tenemos que tener esto en cuenta. Es decir, el script debe omitir celdas vacías y no crear líneas vacías para dicho lenguaje. Además, se deben considerar los caracteres de formato como "% s" en la celda F5. Tendrán que trabajar, porque lo que Android es bueno en iOS debería reemplazarse con "% @". Te contaré sobre los otros matices en el camino.
Para no languidecer y no jalar al gato por la cola, publicaré todo el guión en este momento:
VBScript en todo su esplendor Ahora es el momento de pasar por los matices.
Nuestra aplicación requiere varios permisos de usuario. En iOS, las líneas para solicitar estos permisos se almacenan no como de costumbre en Localizable.strings, sino en InfoPlist.strings, por lo que al comienzo de nuestro script definimos los nombres de esas líneas que se enviarán a InfoPlist:
Const NsCameraUsageDescription = "NsCameraUsageDescription" Const NSLocationAlwaysAndWhenInUseUsageDescription = "NSLocationAlwaysAndWhenInUseUsageDescription" Const NSLocationAlwaysUsageDescription = "NSLocationAlwaysUsageDescription" Const NSLocationWhenInUseUsageDescription = "NSLocationWhenInUseUsageDescription" Const NSPhotoLibraryAddUsageDescription = "NSPhotoLibraryAddUsageDescription" Const NSPhotoLibraryUsageDescription = "NSPhotoLibraryUsageDescription"
El siguiente fragmento digno de mención son los nombres de las carpetas donde se guardarán todos los archivos. En iOS, todas las carpetas se nombran con una designación de idioma de dos letras, como "en.lproj", "de.lproj". Todo excepto ruso, aquí es "ru-RU". Y en la tabla misma, las columnas están en notación de Android. Por lo tanto, parsim:
If objFSOandroid = "values" Then objFSOios = "en" & ".lproj" ElseIf objFSOandroid = "values-ru" Then objFSOios = "ru-RU" & ".lproj" Else objFSOios = Right(objFSOandroid,2) & ".lproj" End If
Y la última tarea, reemplazar y escapar de los personajes. Para iOS, cambiaremos, como dije, % s a % @ y escaparemos de comillas y apóstrofes:
iOSString = Replace(oTranslations.Sheets(1).Cells(nCounter, LanguageColumnIndex).Value, "%s", "%@") iOSString = Replace(iOSString, "'", "\'") iOSString = Replace(iOSString, chr(34), "\" & chr(34))
Para Android, también escapamos de los apóstrofes y reemplazamos el llamado carácter de avance de línea ( Chr (10) ) con el carácter habitual de nueva línea \ n . Y hay una razón para esto. En una de las celdas tenemos un texto bastante grande, compilado por el cliente en MS Word y colocado en la celda de Excel mediante el uso técnico de copiar y pegar. Y aunque no encontramos el reemplazo correcto por prueba y error, en iOS el texto se mostraba en los párrafos necesarios, y en Android se fusionó en un párrafo.
Conclusión
Como probablemente ya haya adivinado, el script se ejecuta en la línea de comandos de Windows. Para simplificar, colocamos el script y el archivo .xlsx en una carpeta, vamos a la línea de comando y escribimos el comando:
cscript ConvertExcelToTXTandXML.vbs <filename>.xlsx
A continuación, presione Entrar y disfrute de una hermosa visualización del guión en forma de puntos que aparecen en la ventana de comandos para cada paso del programa. El resultado del trabajo titánico de nuestro script son dos carpetas, "ios" y "res", cuyo contenido queda por copiar al proyecto iOS y Android, respectivamente.
Eso es todo Espero que este script sea útil para alguien y ahorre mucho tiempo.