2009-04-10 6 views
2

J'essaie de localiser un grand projet MFC où toutes les chaînes sont codées en dur dans le code source. (C'était la chose la plus simple à faire à ce moment-là, avant que nous n'ayons la moindre idée que nous allions nous étendre sur d'autres marchés.) J'ai regardé les outils de localisation, et invariablement ils disent de mettre toutes les chaînes dans le fichier .rc , ou supposons simplement que cela a été fait. Parmi ceux que j'ai vérifiés, appTranslator est le seul qui laisse entendre qu'il pourrait être un problème, et fournit quelques fonctions de commodité pour réduire la verbosité du code source résultant.Comment placer des chaînes dans des chaînes dans MFC?

Est-ce que quelqu'un a une meilleure idée que de parcourir manuellement des centaines de fichiers et de faire des erreurs occasionnelles en cours de route?

Existe-t-il une sorte de produit pour vous aider?

Quelqu'un a-t-il une expérience dans ce domaine?

Répondre

2

C'est un processus fastidieux pour être sûr. J'ai participé à un effort comme celui-ci il y a plusieurs années. Nous l'avons fait manuellement. Vous pouvez probablement écrire un code commun qui rend le chargement, la vérification, etc tout à fait propre avec un minimum de ballonnement.

Je ne connais pas de produits qui le feront pour vous.

CStrings peut être votre ami - en utilisant le membre LoadString(). Je dériverais de CString ou écrirais un autre code qui encapsule des valeurs par défaut (probablement leurs valeurs codées en dur probablement) et d'autres conditions d'erreur et l'utiliserais alors à la place des chaînes codées en dur.

Si vous préférez ne pas utiliser CString, dériver de std :: string et utiliser le LoadString global() fonctionne également.

que pour les outils: pas sûr qu'ils vont travailler pour votre cas: http://www.modelmakertools.com/articles/hard-coded-strings.html

apparemment cet outil peut trouver toutes les chaînes dans vos fichiers exe: http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx Ensuite, vous pouvez les rechercher et remplacer.

Je pense que l'écriture d'un outil serait assez simple - cherchez "character" et ensuite créez une entrée dans un fichier rc qui correspond au fichier .cpp ou .h d'où il provient. Vous aurez beaucoup de choix à faire , mais il s'agit d'un début.Vous pouvez faire un remplacement du texte, ou insérer des commentaires, etc .. Vous pouvez utiliser le numéro de ligne et le nom de fichier pour l'ID/nom de ressource dans un #include

+0

Merci, bien que la Les outils que vous avez mentionnés ne semblent pas faire ce dont j'ai besoin. Je pourrais probablement écrire quelque chose dans Perl dans quelques jours, mais je pensais que l'achat d'un outil serait moins cher, plus facile et plus fiable. –

+0

Si c'était moi je voudrais simplement jeter ensemble un outil pour lister toutes les chaînes dans un fichier, avec les numéros de ligne, etc., puis faire le reste manuellement. Le polir pour une utilisation unique est rendements décroissants à mon avis. Je ne t'envie pas ta tâche ... bonne chance – Tim

2

Je sais que c'est trop tard, mais juste pour le moteur de recherche.
il est une caractéristique de CString pour l'initialiser à partir d'un ID de ressource.

CString((LPCTSTR)IDS_RESOURCE_ID) 
+0

Merci, mais ça veut tout de même tout faire à la main, ce que j'essayais d'éviter. –

+0

Il existe deux approches: la méthode manuelle est de tout mettre dans des tables de chaînes. Bien que ce soit difficile pour les dialogues. Il y a un autre ensemble d'outils de traduction qui font simplement une recherche/remplacement dans l'exe fini. –

Questions connexes