6
votes

Transformer automatiquement nstring en nslocalizedstring?

Je paie toujours chèrement pour apprendre le développement iOS, alors s'il vous plaît soyez gentil.
J'ai une application iOS contenant environ 400 nstring littérals. Je n'avais jamais pensé que je voudrais localiser cette application plus tard, donc tout en étant conscient de nslocalistring j'ai décidé de ne pas les utiliser pour mon projet.
Maintenant, le monde a changé et j'ai besoin de localiser cette application. Y a-t-il un outil / script que je peux utiliser qui fonctionnera via mes fichiers .m et "Rechercher / remplacer" mon nstrings avec nslocalizedStrings avant i extraire-les avec des colines?

merci Roger


0 commentaires

5 Réponses :


2
votes

Vous ne voulez généralement pas remplacer tous les Nstrings avec Nslocalistring Comme tous les cordes ne sont pas nécessairement "utilisateur". Vous pourriez avoir des constantes de chaîne qui sont utilisées à l'intérieur que l'utilisateur ne voit jamais et ceux-ci ne doivent pas être traduits. Par conséquent, remplaçant aveuglément toutes les nstrings avec nslocalizedstring n'est probablement pas une bonne idée.

Il y a un peu de travail impliqué à travers et le faire manuellement, mais c'est un effort ponctuel - une fois que vous l'avez fait une fois que vous saurez la bonne façon de gérer toutes les nouvelles chaînes à l'utilisateur et faire ça comme tu vas. Cela dit - il peut très bien y avoir un outil là-bas quelque part qui gère cela élégamment, mais rien n'évite la cueillette manuelle que les chaînes doivent être traduites et qui ne le font pas.


1 commentaires

Bon point, Rob! Mais hors de mes 400 chaînes, probablement autour de 380 sont confrontés à l'utilisateur. Il serait donc très possible de les convertir de toutes les chaînes de localisation, puis de convertir ces 20 chaînes non utilisées à des nstrings normales.



2
votes

De j'ai appris et vérifié, il n'y a pas de méthode automatisée pour transformer vos chaînes à la localisation que vous souhaitez. Mais il y a un plugin pour Xcode appelé Lin, qui rend votre processus facile.

Lorsque vous vous concentrez sur NslocalizedString ou d'autres fonctions pour obtenir une version localisée d'une chaîne, Lin affiche la liste des localisations contenant la chaîne de clé entrée.


0 commentaires

6
votes

Vous avez commis une erreur ne pas écrire votre code correctement la première fois et vous devez maintenant payer le prix.

Vous devez passer par votre programme manuellement et modifier les littéraux de chaînes visibles par l'utilisateur vers des appels à Nslocalistring.

Notez que vous ne voulez pas changer globalement tous les littéraux à chaîne. Des choses comme les clés de dictionnaire ne doivent pas être localisées.

Toujours, toujours, utilisez NslocalizedSling pour créer des chaînes localisées. Ce n'est que quelques plus de caractères de type, et il fait internationaliser votre code de manière dramatique plus facile.

La bonne nouvelle est que la douleur de faire cela servira de cours amère et que vous ne ferez probablement pas la même erreur.


2 commentaires

Parfois, la vérité fait mal ;-)


J'ai une fessée :( prie pour mes poignets



1
votes

de la question et de vos commentaires, il semble que vous n'ayez pas environ 400 chaînes seulement, dont 20 ne devraient pas être localisées. Avec ce ratio, comme vous le dites vous-même, changez-les, puis défaillant le changement pour 20 peut avoir un sens.

Pour ce faire, obtenez TextWrangler ou Becbedit et effectuez une recherche de correspondance de modèle multi-fichier et remplacez-la. Vous pouvez confiner la recherche à des fichiers se terminant dans .m ou .h . La tâche sera rapide et facile, à part ces 20 ...

htth


4 commentaires

Merci crd. J'avoue à ne pas avoir pensé «hors de la boîte» (avec Xcode étant la boîte, pour ainsi dire). Devinez qu'il est temps de se brosser sur mes compétences de regex et de le faire essayer ...


Cela a fonctionné parfaitement et m'a sauvé des heures de frappe. Tu es mon héros de la journée, CRD!


Pour des raisons d'exhaustivité. C'est la regex que j'utilise (la plupart de mes chaînes étaient dans des tableaux). J'ai cherché / @ "[^,;] +" / g et remplacé par Nslocalisdizsstring ($ &, nil)


@ Theremin j'ai le même problème. Pouvez-vous suggérer un exemple?



3
votes

Oui! Une trouvaille et remplacez REGEX accélérera cette opération.

dans la barre de recherche: xxx

dans la barre de remplacement: xxx

Ceci changera "NORMALSRING" à NslocalizedString ("NormalString", commentaire: "")

Parcourez votre code et sur ceux que vous souhaitez remplacer, appuyez simplement sur Remplacer, il s'agit d'une gamme massive!


1 commentaires

N'oubliez pas de définir les options de recherche sur REGEX