
Bonjour, je m'appelle Alexander et je suis développeur d'applications Android. Une fois, j'ai eu un projet qui avait 11 langues d'interface et plus de 600 lignes. Il n'y avait pas de programmeurs côté client, ils ont donc stocké le tout dans une feuille de calcul Excel. Quand ils ont changé quelque chose, ils nous ont envoyé ce tableau avec les mots "Nous avons mis en évidence les cellules avec des changements en jaune, mettre à jour les applications Android et iOS, respectivement." Après cela, deux développeurs ont perdu quelques heures, apportant des modifications manuellement. Et puis il s'est avéré que quelqu'un avait oublié quelque chose quelque part, avait fait une erreur ou ne l'avait pas terminé, il y avait des divergences entre les plates-formes, le client était nerveux, les développeurs paniquaient. Cette situation ne me convenait pas du tout, j'ai commencé à chercher des moyens d'automatiser le déchargement des lignes d'Excel. Le résultat a été un excellent code VBScript, que nous aimons toujours utiliser. Maintenant, je vais vous présenter ce script. Sous la coupe, un certain nombre d'images et de code script.
Alors, jetez d'abord un coup d'œil au tableau lui-même et évaluez l'ampleur du problème:

La voilà, la beauté! Comme nous pouvons le voir, il existe plusieurs colonnes de service, les noms de lignes globales et leurs traductions. De plus, certaines lignes sont présentées uniquement en anglais et en allemand, car dans la version 2.0 de l'application, le client a décidé de ne laisser que deux langues pour l'instant et d'ajouter le reste plus tard. Ou peut-être qu'il a pitié de l'argent pour les traducteurs. Mais c'est son affaire, mais nous devons en tenir compte. Autrement dit, le script doit ignorer les cellules vides et ne pas créer de lignes vides pour un tel langage. En outre, la mise en forme des caractères tels que «% s» dans la cellule F5 doit être prise en compte. Ils devront travailler avec, car ce que Android est bon dans iOS devrait être remplacé par «% @». Je vais vous parler des autres nuances en cours de route.
Afin de ne pas languir et de ne pas tirer le chat par la queue, je vais publier tout le script maintenant:
VBScript dans toute sa splendeur Il est maintenant temps de passer par les nuances.
Notre application nécessite plusieurs autorisations utilisateur. Sur iOS, les lignes pour demander ces autorisations ne sont pas stockées comme d'habitude dans Localizable.strings, mais dans InfoPlist.strings, donc au tout début de notre script, nous définissons les noms des lignes qui seront soumises à InfoPlist:
Const NsCameraUsageDescription = "NsCameraUsageDescription" Const NSLocationAlwaysAndWhenInUseUsageDescription = "NSLocationAlwaysAndWhenInUseUsageDescription" Const NSLocationAlwaysUsageDescription = "NSLocationAlwaysUsageDescription" Const NSLocationWhenInUseUsageDescription = "NSLocationWhenInUseUsageDescription" Const NSPhotoLibraryAddUsageDescription = "NSPhotoLibraryAddUsageDescription" Const NSPhotoLibraryUsageDescription = "NSPhotoLibraryUsageDescription"
Le prochain fragment notable est le nom des dossiers dans lesquels tous les fichiers seront enregistrés. Sur iOS, tous les dossiers sont nommés avec une désignation de langue à deux lettres, comme "en.lproj", "de.lproj". Tout sauf le russe, voici "ru-RU". Et dans le tableau lui-même, les colonnes sont en notation Android. Par conséquent, 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
Et la dernière tâche, remplacer et échapper des caractères. Pour iOS, nous allons changer, comme je l'ai dit, % s en % @ et échapper les guillemets et les apostrophes:
iOSString = Replace(oTranslations.Sheets(1).Cells(nCounter, LanguageColumnIndex).Value, "%s", "%@") iOSString = Replace(iOSString, "'", "\'") iOSString = Replace(iOSString, chr(34), "\" & chr(34))
Pour Android, nous échappons également aux apostrophes et remplaçons le soi-disant caractère de saut de ligne ( Chr (10) ) par le caractère de nouvelle ligne habituel \ n . Et il y a une raison à cela. Dans l'une des cellules, nous avons un texte assez volumineux, compilé par le client dans MS Word et placé dans la cellule Excel à l'aide d'un copier-coller technique. Et bien que nous n'ayons pas trouvé le bon remplacement par essais et erreurs, dans iOS, le texte était affiché dans les paragraphes nécessaires, et dans Android, il a fusionné en un paragraphe.
Conclusion
Comme vous l'avez probablement déjà deviné, le script s'exécute dans la ligne de commande Windows. Pour plus de simplicité, nous plaçons le script et le fichier .xlsx dans un dossier, nous y accédons à la ligne de commande et écrivons la commande:
cscript ConvertExcelToTXTandXML.vbs <filename>.xlsx
Ensuite, appuyez sur Entrée et profitez d'une belle visualisation du script sous la forme de points apparaissant dans la fenêtre de commande pour chaque étape du programme. Le résultat du travail titanesque de notre script sont deux dossiers, "ios" et "res", dont le contenu reste à copier respectivement dans le projet iOS et Android.
C’est tout. J'espère que ce script sera utile à quelqu'un et fera gagner beaucoup de temps.