Je cherche à concevoir des applications adaptées à plusieurs langues en C #, car je dois travailler sur un petit projet où c'est le cas. J'ai trouvé fondamentalement deux manières de faire ceci:
Définissez la propriété Localizable d'un formulaire sur true, définissez la propriété Language, remplissez toutes les étiquettes et autres, et vous avez terminé. L’inconvénient majeur que je vois dans cette question est la suivante: comment préparer d’autres éléments ne faisant pas partie d’un formulaire prêts pour plusieurs langues (par exemple, des fenêtres contextuelles, des fichiers journaux ou des fenêtres, etc.).
Créez un fichier de ressources, par exemple 'Lang.en-us.resx' et un pour chaque langue, par exemple 'Lang.nl-nl.resx' et remplissez-le avec Strings. Le IDE semble générer automatiquement une classe pour moi, donc dans le code, je ne peux utiliser que Lang.SomeText. Le plus gros inconvénient que je vois ici est que pour chaque formulaire, les étiquettes et autres légendes moi-même dans le code (et il ne semble pas que la liaison de données fonctionne avec ces ressources).
Cependant, je suis sûr qu'il existe d'autres méthodes pour le faire.
Alors, quelle est la meilleure pratique? Qu'est-ce qui est le plus facile pour les petites applications (quelques formulaires, connexion à une base de données, etc.) et quelle est la meilleure échelle pour les grandes applications?
J'ai toujours utilisé des fichiers de ressources pour des applications multilingues.
Il existe de nombreux articles sur le Web expliquant comment les utiliser.
J'ai utilisé deux méthodes différentes:
Le fichier de ressources/formulaire est plus facile à implémenter, il vous suffit de saisir les valeurs dans le fichier de ressources, mais je trouve cette approche plus difficile à maintenir, car les étiquettes sont dispersées dans toute l'application.
Le fichier de ressources global vous permet de centraliser toutes les étiquettes (images, etc.) dans un fichier (par langue), mais cela signifie que vous devez définir manuellement les étiquettes dans le chargement du formulaire. Ce fichier peut également être utilisé pour les messages d'erreur, etc.
Une question de goût ...
Un dernier point, j’écris des programmes en anglais et en français, j’utilise "en" et "fr" et non "en-US" et "fr-FR". Ne compliquez pas les choses, les différents dilelètes de l'anglais (américain, anglais, australien, etc.) ont peu de différences pour en utiliser une seule (il en va de même pour le français).
J'ai récemment écrit un programme avec un support en allemand et en anglais. J'ai été surpris de découvrir que si je nommais simplement mes ressources anglais LanguageResources.resx et mes ressources allemandes LanguageResources.de.resx, il sélectionnait automatiquement la bonne langue. Le ResXFileCodeGenerator s’occupe de tout pour moi.
Notez que les champs des deux fichiers étaient identiques et que tous les champs allemands non encore entrés apparaissaient dans l'application en anglais, car la langue de fichier la plus non spécifique était le fichier par défaut. Lorsque vous recherchez une chaîne, elle va du plus spécifique (ex .de-DE.resx) au moins spécifique (ex. .Resx).
Pour accéder à vos chaînes, utilisez les appels ResourceManager.GetString ou ResourceManager.GetObject. L'application devrait vous donner le ResourceManager gratuitement.
Pour le bénéfice des autres personnes qui pourraient en être victimes (plus d'un an après le dernier message), je suis l'auteur d'un produit de localisation professionnelle qui simplifie au maximum le processus de traduction. C'est un complément de Visual Studio qui extraira toutes les chaînes ".resx" de toute solution arbitraire et les chargera dans un seul fichier pouvant être traduit à l'aide d'une application autonome gratuite (les traducteurs peuvent la télécharger à partir de mon site). Le même complément importera ensuite les chaînes traduites dans votre solution. Extrêmement facile à utiliser avec de nombreuses sauvegardes intégrées, beaucoup de cloches et de sifflets et une aide en ligne (vous n'en aurez pas besoin beaucoup). Voir http://www.hexadigm.com