8

Je suis un gars .NET qui doit travailler sur une application MFC. L'application est un exécutable VS2008 MFC que j'ai converti en VS2010. Les développeurs d'origine ont effectué la localisation en spécifiant le nom d'un fichier .txt avec des paires de valeurs clés dans la ligne de commande des applications. Les raccourcis installés vers l'exécutable spécifient un fichier .txt différent en fonction du pays dans lequel l'application est installée. Bien entendu, cela ne fonctionne pas si vous exécutez directement le fichier .exe. Cela semble être une façon étrange de me faire des choses. Je veux faire cela de la manière MFC propper, mais j'ai de la difficulté à trouver des réponses définitives sur Google. Ma compréhension est que la table de chaînes dans le fichier .rc doit être utilisée pour cette localisation? Est-ce la meilleure pratique actuelle pour MFC?VC++ 10 MFC: Quelle est la bonne façon de faire la localisation

En ce qui concerne la table de chaînes, j'ai lu que la pratique consiste à créer plusieurs tables de chaînes chacune pour une langue différente. Comment les applications MFC choisissent-elles la langue à utiliser? Est-ce basé 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 l'installateur Wix .msi que nous construisons également)?

J'ai également lu que l'incorporation de toutes les ressources dans une application MFC est tombée en disgrâce et que maintenant vous devriez compiler des ressources séparées .dlls? Est-ce que c'est vrai est mal enquêter comment le faire ...

Enfin, dois-je faire quelque chose de spécial pour obtenir MFC pour soutenir Unicode ou MFC Unicode par défaut?

Merci

+1

MFC et Unicode sont indépendants, vous pouvez utiliser l'un sans l'autre. Si vous utilisez l'assistant pour construire votre projet, Unicode sera l'une des options (ce devrait être la valeur par défaut). Sinon, vous pouvez le trouver dans les paramètres du projet. –

+0

Un autre article de CP: http://www.codeproject.com/Articles/11040/Multiple-language-support-for-MFC-applications-wit –

Répondre

10

L'idée est que tous les éléments localisables doivent être stockés dans des ressources. Les objets d'interface utilisateur standard tels que les menus et les boîtes de dialogue sont automatiquement stockés (ressources) pour vous, mais les éléments tels que les chaînes littérales (par exemple: messages d'erreur, messages, ...) doivent être extraits du code source. Ce court codeproject article montre comment tirer facilement les chaînes de la table de chaînes dans votre code.

Remarque: Vous ne devriez avoir qu'une seule table de chaînes dans votre script de ressource (.rc). À partir de là, vous pouvez traduire vos ressources et créer des DLL de ressources (également appelées DLL satellites). L'idée est que vous conserviez une copie différente du fichier .rc pour chaque langue. Chaque traduction est compilée dans une DLL sans code qui agit comme un conteneur pour les ressources. Vous pouvez facilement charger des DLL de ressources en fonction des paramètres système ou des préférences utilisateur: Le code recherche parmi vos DLL de ressources la langue disponible qui correspond le mieux aux paramètres utilisateur (en fonction du langage utilisateur et des paramètres régionaux de l'utilisateur). Le code vous permet également de créer facilement un menu avec toutes les langues disponibles. De cette façon, votre utilisateur peut remplacer le choix par défaut.

DISCLAIMER: Mon annonce suit.Sentez-vous libre de sauter :-)

En ce qui concerne la traduction des ressources, la gestion des traductions et la création de DLL de ressources, vous pouvez vérifier appTranslator.

FIN DE AD :-)

En ce qui concerne Unicode, MFC livré 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 absolument choisir Unicode. Mais si des raisons héritées vous forcent à rester ANSI/MBCS, ne vous inquiétez pas trop: cela ne vous empêchera pas de localiser votre application.

6

Il y a quelques années quand je devais travailler avec plusieurs langues dans MFC, nous avons utilisé des DLL de ressources distinctes. Tout ce que vous avez besoin de faire est de faire un appel pour basculer qui gérer les fonctions de ressources utiliserait et tout était automatique à partir de ce point en avant.

Vous devez faire plus que simplement changer les chaînes. 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.

+0

Donc, MFC n'offre pas un moyen de séparer les chaînes de dialogues? – OneWorld

+0

@OneWorld ce n'est pas seulement MFC, l'API Windows pour créer une boîte de dialogue repose sur une ressource de dialogue avec des chaînes incorporées. –

Questions connexes