Meilleure pratique pour créer une application multilingue en C # / WinForms? [fermé]

94

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?

Mihai Limbășan
la source
3
J'ai remarqué que les questions non constructives (ou autres questions de type "non valable pour SO") sont l'une des questions les plus précieuses :) Celle-ci est également une bonne question (je pense que les votes le prouvent) Voici une bonne démonstration sur la façon dont pour utiliser le complément multilingue pour le support multilingue youtube.com/watch?v=SNIyP1QQdVs
Prokurors
1
Il est parfois si difficile de rassembler tous les fragments de connaissances sur Internet, et je trouve cette question inestimable pour le moment. Il y a sûrement des moments où clore des questions douces est moins constructif que de les laisser ouvertes, et je pense que c'est l'un de ces moments. :)

Réponses:

20

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:

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

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).

ThatBloke
la source
2
Vous devez parfois vous soucier des dialectes. Par exemple, les caractères chinois sont complètement différents en chinois traditionnel (Taiwan) et en chinois simplifié (Chine continentale).
MarkJ
1
La documentation @MarkJ MSDN mentionne que le chinois traditionnel et le chinois simplifié ne sont pas des dialectes (pays / région) mais des cultures neutres. Msdn: "Une culture neutre est une culture associée à une langue mais pas à un pays / une région. Une culture spécifique est une culture associée à une langue et à un pays / région. Par exemple," fr "est un neutre et "fr-FR" est une culture spécifique. Notez que "zh-CHS" (chinois simplifié) et "zh-CHT" (chinois traditionnel) sont des cultures neutres. "
haut débit le
J'ai récemment fait cela avec l'aide du lien , 2 étapes non mentionnées ici: 1. Cliquez sur tous les fichiers .resource et définissez la propriété "Build Action" sur "Content". 2. Cliquez sur tous les fichiers .resource et définissez la propriété "Copier dans le répertoire de sortie" sur "Copier toujours".
Sourav
1
@Kiquenet Pour une réponse complète (avec code), y compris la prise en charge à l'échelle de .NET, voir: stackoverflow.com/a/35813707/2901207
CularBytes
9

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.

Rick Minerich
la source
6

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

Larry
la source
1
Cela devrait être ajouté en tant que fonction native à visualstudio! Excellent logiciel!
Caverna
Merci beaucoup (apprécié). J'aurais été d'accord avec vous avant de démarrer le produit (il y a environ 10 ans) mais si MSFT l'implémentait aujourd'hui, cela me mettrait en faillite :)
Larry