Quelles sont les meilleures pratiques pour la construction d'applications multilingues sur win32?

StackOverflow https://stackoverflow.com/questions/490297

Question

Je dois créer une application graphique sur Windows Mobile et j'aimerais que l'utilisateur puisse choisir la langue de son choix ou que l'application choisisse automatiquement la langue. Je considère l’utilisation de plusieurs DLL contenant uniquement les ressources nécessaires.

1) Quel est le moyen préféré (par défaut?) pour que l'application choisisse automatiquement la langue de la ressource appropriée, sans intervention de l'utilisateur? Des échantillons?

2) Quelles sont mes options pour autoriser le contrôle de l'utilisateur / de l'application sur la langue à afficher?

3) Si possible, comment créer une dll contenant plusieurs ressources linguistiques, puis choisir dynamiquement la langue?

Était-ce utile?

La solution

Pour # 1, vous pouvez utiliser la fonction GetSystemDefaultLangID pour récupère l'identifiant de langue de la machine.

Pour le n ° 2, vous pouvez répertorier les langues que vous prenez en charge et, lorsque l'utilisateur en sélectionne une, écrire la sélection dans un fichier texte ou un registre (existe-t-il un registre sur Windows Mobile?). Au démarrage, utilisez la fonction dans # 1 uniquement s’il n’ya pas de sélection dans le fichier ou le registre.

Pour le n ° 3, nous utilisons généralement une DLL de ressources par langue, chacune contenant les mêmes identifiants de ressources. Une fois que vous avez compris la langue, chargez la DLL pour cette langue et le reste fonctionne.

Autres conseils

Re 1: la suggestion précédente de GetSystemDefuaultLangID est bonne.

Re 2: vous pouvez poser la première étape de votre installation. Ou vous pouvez créer différents programmes d'installation pour chaque langue.

Re 3: En théorie, la méthode DLL mentionnée ci-dessus semble très bien, mais en pratique, elle ne fonctionnait pas du tout pour moi personnellement.

Une meilleure méthode consiste à entourer toutes les chaînes de votre programme avec: Localize ou NoLocalize.

MessageBox(Localize("Hello"), Localize("Title"), MB_OK);
RegOpenKey(NoLocalize("\\SOFTWARE\\RegKey"), ...);

Localiser est simplement une fonction qui convertit votre texte anglais dans la langue sélectionnée. NoLocalize ne fait rien.

Vous souhaitez toutefois entourer vos chaînes de ces valeurs, car vous pouvez créer quelques scripts utiles dans le langage de script de votre choix.

1) Un script qui recherche tous les préfixes Localize (& ") et génère un fichier .ini avec des paires nom-valeur english = otherlangauge. Si le fichier .ini en sortie contient déjà un mappage, vous ne l'ajoutez pas. Vous ne recréez jamais complètement le fichier ini, votre script ajoute simplement les fichiers manquants chaque fois que vous exécutez votre script.

2) Un script qui recherche toutes les chaînes et s'assure qu'elles sont entourées par Localize (& "ou NoLocalize (&";; sinon, il vous indique les chaînes que vous devez encore localiser).

La raison n ° 2 est importante parce que vous devez vous assurer que toutes vos chaînes sont consciemment marquées comme nécessitant une localisation ou non. Sinon, il est absolument impossible de vous assurer que la localisation est correcte.

La raison pour # 1 au lieu de charger à partir d'une DLL est parce que la maintenance de cette solution ne nécessite aucun travail et que vous pouvez ajouter de nouvelles chaînes qui doivent être traduites à la volée.

Vous expédiez les fichiers ini générés avec votre programme. Vous donnez également ces fichiers ini à vos traducteurs afin qu'ils puissent convertir les paires english = otherlanguage. Quand ils vous le renvoient, vous remplacez simplement votre fichier .ini enregistré par celui fourni par votre traducteur. L'exécution de votre script comme indiqué dans # 1 ajoutera de nouveau les traductions manquantes si celles-ci ont été effectuées pendant que le traducteur traduisait.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top