VC++ 10 MFC: Quelle est la bonne façon de faire la localisation

je suis un gars de .NET qui doit faire un peu de travail sur une application MFC. L'application est un exécutable MFC VS2008 que j'ai converti en VS2010. Les développeurs originaux ont fait la localisation en spécifiant le nom d'un .fichier txt avec des paires de valeurs clés sur la ligne de commande applications. Les raccourcis installés pour l'exécutable spécifient un différent .fichier txt selon le pays dans lequel l'application est installée. Bien sûr, cela ne fonctionne pas si vous il suffit de lancer le .exe directement. Cela semble être une drôle de façon faire les choses pour moi.

je veux le faire à la façon propper MFC, mais j'ai de la difficulté à trouver des réponses définitives sur Google. D'après ce que j'ai compris, la table à ficelles dans le .fichier rc doit être utilisé pour cette localisation? Est-ce la meilleure pratique actuelle pour le CFM?

en ce qui concerne la table String j'ai lu que la pratique est de créer plusieurs tables string chacune pour une langue différente. Comment les applications MFC choisissent-elles la langue à utiliser? Elle est basée sur les paramètres de langue actuels des machines ou Puis-je contrôler cela (il se peut que nous voulions que la langue soit spécifiée par le Wix .programme d'installation msi nous sommes aussi en train de construire)?

j'ai aussi lu que l'intégration de toutes les ressources à l'intérieur d'une application MFC est tombée en disgrâce et que maintenant vous devez compiler séparément les ressources .dll? C'est que c'est vrai malade étudier comment le faire...

enfin, est-ce que je dois faire quelque chose de spécial pour que MFC supporte Unicode ou Is MFC Unicode par par défaut?

Merci

8
demandé sur MrLane 2012-01-05 07:40:13

2 réponses

l'idée est que tous les objets localisables doivent être stockés dans des ressources. Les objets D'interface standard tels que les menus et les dialogues sont automatiquement stockés là-bas (ressources) pour vous, mais des éléments tels que les caractères littéraux de chaîne (par exemple: messages d'erreur, messages d'erreur, messages d'erreur, etc.)...) devrait être tiré du code source à la table de chaîne. Cette courte article codeprojet de la mienne montre comment tirer facilement des cordes de la table de corde dans votre code.

Note: Vous ne devriez avoir qu'une seule chaîne de caractères table dans votre script de ressources (.rc).

A partir de là, vous pouvez traduire vos ressources et créer des ressources DLLs (alias satellite DLLs). L'idée est que vous conservez une copie différente de la .fichier(s) rc pour chaque langue. Chaque traduction est compilée dans un sans code DLL qui agit comme un conteneur pour les ressources.

This other codeprojet article de la mienne vous permet de charger facilement des ressources DLLs en fonction des paramètres du système ou des préférences de l'utilisateur: Le code regarde parmi vos DLLs de ressources quelle langue disponible correspond le mieux aux paramètres de l'utilisateur (basés sur le langage UI de l'utilisateur et les paramètres régionaux). Le code vous permet également de construire facilement un menu avec toutes les langues disponibles. De cette façon, votre utilisateur peut annuler le choix par défaut.

DISCLAIMER: My ad follows. Hésitez pas à passer :-)

en ce qui concerne la traduction des ressources, la gestion des traductions et la création de DLLs ressources, vous pouvez consulter appTranslator.

END OF AD : -)

en ce qui concerne Unicode, les navires MFC avec les versions ANSI et Unicode du code. C'est à vous de choisir si vous voulez construire une application ANSI ou Unicode: faites votre choix dans la première page des paramètres du projet. Bien sûr, si vous commencez à partir de zéro, vous devriez certainement aller Unicode. Mais si les raisons d'héritage vous forcent à rester ANSI / MBCS, ne vous inquiétez pas trop: cela ne vous empêchera pas de localiser votre application.

10
répondu Serge Wautier 2012-01-08 20:46:39

il y a des années, lorsque j'ai dû travailler avec plusieurs langues dans le CFM, nous avons utilisé des ressources distinctes DLLs. Tout ce que vous devez faire est de faire un appel pour changer qui Gérer les fonctions de ressources utiliserait et tout était automatique à partir de ce point avant.

Vous devez faire plus que simplement changer les cordes. Les dialogues en particulier auront des chaînes à l'intérieur d'eux, et vous devrez peut-être changer la disposition si ces chaînes deviennent trop longues après la traduction.

6
répondu Mark Ransom 2012-01-05 03:44:50