70 votes

Meilleure pratique pour réaliser une application multilingue en C#/WinForms ?

J'ai cherché à créer des applications adaptées à plusieurs langues en C#, car je dois travailler sur un petit projet dans lequel c'est le cas. J'ai trouvé essentiellement deux façons de le faire :

Définissez la propriété Localizable d'un formulaire à true, définissez la propriété Language, remplissez toutes les étiquettes et autres, et vous avez "fini". Le principal inconvénient que je vois dans ce système est le suivant : comment faire en sorte que d'autres éléments qui ne font pas partie d'un formulaire puissent être localisés dans plusieurs langues (par exemple, les fenêtres pop-up, les fichiers journaux ou les fenêtres, etc).

Créez un fichier de ressources, par exemple 'Lang.en-us.resx' et un autre pour chaque langue, par exemple 'Lang.nl-nl.resx' et remplissez-le de chaînes. L'IDE semble générer automatiquement une classe pour moi, de sorte que dans le code, je peux simplement utiliser Lang.SomeText. Le plus gros inconvénient que je vois dans cette méthode est que, pour chaque formulaire, je dois définir toutes 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).

Je suis cependant certain qu'il existe d'autres méthodes pour y parvenir.

Alors, quelle est la meilleure pratique ? Qu'est-ce qui est le plus simple pour les petites applications (quelques formulaires, connexion à une base de données, etc.) et qu'est-ce qui est le plus adapté aux grandes applications ?

14voto

ThatBloke Points 411

J'ai toujours utilisé des fichiers de ressources pour les applications multilingues.
Il existe de nombreux articles sur le web expliquant comment les utiliser.

J'ai utilisé deux méthodes différentes :

  • Un fichier de ressources par formulaire
  • Un fichier de ressources global

Le fichier de ressources / formulaire, est plus facile à mettre en œuvre, il suffit de saisir les valeurs dans le fichier de ressources, mais je trouve cette approche plus difficile à maintenir, puisque les étiquettes sont dispersées dans l'application.

Le fichier de ressources global vous permet de centraliser toutes les étiquettes (images, etc.) dans un seul fichier (par langue), mais cela implique de 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 dialectes de l'anglais (américain, anglais, australien etc) ont suffisamment peu de différences pour n'en utiliser qu'un seul (idem pour le français).

8voto

Rick Minerich Points 2407

J'ai récemment écrit un programme qui prend en charge les langues allemande et anglaise. J'ai été surpris de constater que si je nommais simplement mes ressources anglaises LanguageResources.resx et mes ressources allemandes LanguageResources.de.resx, il sélectionnait automatiquement la bonne langue. Le ResXFileCodeGenerator s'est occupé de tout pour moi.

Notez que les champs des deux fichiers sont les mêmes et que tous les champs allemands qui n'ont pas encore été saisis apparaissent dans l'application en tant qu'anglais, car le fichier le moins spécifique en termes de langue est le fichier par défaut. Lorsque vous recherchez une chaîne de caractères, vous allez du plus spécifique (ex. .de-DE.resx) au moins spécifique (ex. .resx).

Pour accéder à vos chaînes de caractères, utilisez les appels ResourceManager.GetString ou ResourceManager.GetObject. L'application devrait vous fournir gratuitement le ResourceManager.

1voto

Larry Points 19

À l'intention de ceux qui pourraient tomber sur cette page (plus d'un an après le dernier message), je suis l'auteur d'un produit de localisation professionnelle qui rend l'ensemble du processus de traduction extrêmement facile. Il s'agit d'un module complémentaire de Visual Studio qui extrait toutes les chaînes ".resx" de n'importe quelle solution arbitraire et les charge dans un fichier unique qui peut être traduit à l'aide d'une application autonome gratuite (les traducteurs peuvent la télécharger sur mon site). Le même module complémentaire ré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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X