Meilleure pratique pour faire une application multilingue en C# / WinForms? [fermé]
j'ai cherché à faire des applications appropriées pour plusieurs langues en C# car j'ai besoin de travailler sur un petit projet où c'est le cas. J'ai trouvé essentiellement deux façons de le faire:
définissez la propriété localisable d'un formulaire à true, définissez la propriété de langue, remplissez toutes les étiquettes et ainsi de suite, et vous êtes 'fait'. Le principal inconvénient que je vois dans ceci est: comment faire d'autres choses qui ne font pas partie d'un formulaire prêt pour plusieurs langues (par exemple fenêtres pop-up, log fichiers ou windows, etc).
créer un fichier de ressources, par exemple 'Lang.fr-us.resx "et un pour chaque langue, par exemple" Lang.nl-nl.resx " et le remplir avec des Chaînes. L'IDE semble générer automatiquement une classe pour moi, donc dans le code je peux juste utiliser Lang.SomeText. Le plus grand inconvénient que je vois dans cela est: pour chaque forme, 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 sûr, cependant, qu'il existe d'autres méthodes pour ce faire.
Alors, quelle est la meilleure pratique? Quelle est la solution la plus simple pour les petites applications (quelques formulaires, connexion à une base de données, etc.) et quelle est la meilleure échelle pour les applications plus importantes?
3 réponses
j'ai toujours utilisé des fichiers de ressources pour des applications multilingues.
Les nombreux articles sur le web expliquant comment les utiliser.
J'ai utilisé deux façons différentes:
- un fichier de ressources par formulaire
- Un fichier de ressources global
le fichier / formulaire de ressource, est plus facile à mettre en œuvre, vous devez seulement entrer les valeurs dans le fichier de ressources, mais je trouve cette approche plus difficile à maintenir, puisque les étiquettes sont dispersées dans toute l'application.
le fichier global resource permet de centraliser toutes les étiquettes (images, etc.).) dans un fichier (par langue), mais cela signifie définir manuellement les étiquettes dans la charge de 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 Français, j'utilise "en" et "fr" et pas "en-US"et" fr-FR". Ne 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 (la même chose vaut 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 j'ai simplement nommé mes ressources en anglais LanguageResources.resx et mon allemand ressources LanguageResources.de.resx, il est automatiquement sélectionné la langue correcte. Le ResXFileCodeGenerator s'est occupé de tout pour moi.
Notez que les champs dans les deux fichiers ont le même et tout est pas encore entré en allemand champs apparaîtrait dans l'application que l'anglais comme la langue de fichier la plus non spécifique est le fichier par défaut. Lorsque l'on cherche une chaîne de caractères, elle va de la plus spécifique (p. ex. de-DE.resx) au moins spécifique(ex. .resx).
pour obtenir à vos cordes utilisez le ResourceManager.GetString ou ResourceManager.Des appels de GetObject. L'application devrait vous donner le ResourceManager gratuitement.
pour le bénéfice d'autres qui pourraient tomber sur ce (1+ ans après le dernier post), je suis l'auteur d'un produit de localisation professionnelle qui rend l'ensemble du processus de traduction extrêmement facile. C'est un add-in de Visual Studio qui extraira tout ".resx" les chaînes de n'importe quelle solution arbitraire et les charger dans un seul fichier qui peut être traduit en utilisant une application autonome libre (les traducteurs peuvent télécharger cela de mon site). Le même add-in importera alors les chaînes traduites retournez à votre solution. Extrêmement facile à utiliser avec de nombreuses protections intégrées, beaucoup de cloches et sifflets, et de l'aide en ligne (vous n'en aurez pas besoin beaucoup). Voir http://www.hexadigm.com