J'ai cherché à rendre les applications adaptées à plusieurs langues en C # depuis que je dois travailler sur un petit projet où c'est le cas. J'ai trouvé essentiellement deux façons de procéder:
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 ceci est: comment préparer d'autres éléments qui ne font pas partie d'un formulaire 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 des chaînes. L'IDE semble générer automatiquement une classe pour moi, donc dans le code, je peux simplement utiliser Lang.SomeText. Le plus gros inconvénient que je vois est le suivant: pour chaque formulaire, je dois définir moi-même toutes les étiquettes et autres légendes dans le code (et il ne semble pas que la liaison de données fonctionne avec ces ressources).
Je suis sûr, cependant, qu'il existe d'autres méthodes pour le faire.
Alors, quelle est la meilleure pratique? Quelle est la solution la plus simple pour les petites applications (quelques formulaires, la connexion à une base de données, etc.) et quelle est la meilleure évolutivité pour les grandes applications?
la source
Réponses:
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 / formulaire de ressources est plus facile à implémenter, il 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 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 vous compliquez pas les choses, les différents dilelects de l'anglais (américain, anglais, australien etc.) ont assez peu de différences pour n'en utiliser qu'un seul (il en va de même pour le français).
la source
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 en anglais LanguageResources.resx et mes ressources en allemand LanguageResources.de.resx, il sélectionnait automatiquement la langue correcte. Le ResXFileCodeGenerator s'est occupé de tout pour moi.
Notez que les champs dans les deux fichiers étaient les mêmes 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 est le fichier par défaut. Lorsque vous recherchez une chaîne, elle passe du plus spécifique (ex .de-DE.resx) au moins spécifique (ex. .Resx).
Pour obtenir vos chaînes, utilisez les appels ResourceManager.GetString ou ResourceManager.GetObject. L'application devrait vous donner le ResourceManager gratuitement.
la source
Pour le bénéfice des autres qui pourraient rencontrer cela (1+ ans après le dernier article), je suis l'auteur d'un produit de localisation professionnel qui rend l'ensemble du processus de traduction extrêmement facile. C'est un complément Visual Studio qui extraira toutes les chaînes ".resx" de n'importe quelle solution arbitraire et les chargera dans un seul fichier qui peut être traduit à l'aide d'une application autonome gratuite (les traducteurs peuvent le 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 protections intégrées, beaucoup de cloches et de sifflets et une aide en ligne (vous n'en aurez pas beaucoup besoin). Voir http://www.hexadigm.com
la source