6 votes

C# : Comment lier le texte d'un bouton winforms à une ressource

Nous disposons d'un fichier de ressources contenant de nombreuses chaînes traduites utilisées à divers endroits de notre application. Existe-t-il une meilleure façon de lier, par exemple, le texte d'un bouton à une certaine chaîne ?

Actuellement, nous faisons généralement quelque chose comme cela dans le constructeur, dans un gestionnaire d'événements de chargement ou dans une méthode appelée par l'un de ces éléments :

someButton.Text = CommonTexts.SomeString;
someMenuItem.Text = CommonTexts.SomeOtherString;

Existe-t-il une meilleure façon de procéder ? Peut-être dans le concepteur ? Ou est-ce la méthode recommandée ?


Pour vous expliquer comment nous procédons à la traduction proprement dite : Nous avons un projet de bibliothèque de classes qui ne contient que des fichiers resx. Les principaux fichiers resx sont écrits en anglais (bien sûr). Nous ouvrons ensuite ces fichiers resx de base dans une application appelée ResEx où nous (ou quelqu'un d'autre) effectuons la traduction vers d'autres langues. Lors de la compilation, Visual Studio crée automatiquement des assemblages pour chaque langue, qui sont utilisés automatiquement en fonction du jeu de cultures actuel. Cela fonctionne assez bien, donc je n'ai pas vraiment besoin d'informations sur la façon de faire la traduction et autres (bien que je sois toujours curieux de connaître les améliorations, bien sûr). Ce que je demande, c'est s'il y a une meilleure façon d'obtenir ces chaînes traduites à partir de l'assemblage de ressources et dans tous les différents Text propriétés.

4voto

Vital Points 11

Je comprends, c'est une vieille question, mais quand même, j'ai eu le même problème (VS 2010), et l'un des premiers liens dans google est ce sujet.

Afin de déplacer tous les textes dans le fichier de ressources des formulaires, vous devez attribuer la valeur True à la propriété Winform Localizable. Et c'est tout :) (c) Cap. O.

3voto

Bhaskar Points 3565

Vous pouvez le faire :

using System.Resources;
using System.Reflection;

Assembly assembly = this.GetType().Assembly;
resman = new ResourceManager("StringResources.Strings", assembly);
btnButton.Text = resman.GetString("ButtonName");

1voto

Will Marcouiller Points 11649

Il existe un bon outil appelé LingoBit Localizer qui fait le travail pour une fraction du temps qu'il faudrait pour construire tous les fichiers de ressources.

Vous n'avez pas à vous préoccuper des autres langues pendant le processus de développement, il vous suffit de coder et de définir les propriétés comme vous le feriez si vous programmiez pour un logiciel unilingue. Une fois que vous avez terminé, ou quand vous le souhaitez, vous exécutez LingoBit Localizer sur votre DLL ou votre application Windows Form. Les chaînes de caractères affichables par l'utilisateur seront alors affichées sur une grille à l'intérieur de l'interface graphique. Si vos programmeurs ne connaissent pas la langue dans laquelle l'application doit être traduite, vous pouvez faire appel à un traducteur professionnel pour traduire les mots. Ensuite, il vous suffit de sauvegarder le projet lorsque vous avez terminé. Cela créera un fichier DLL que vous ajouterez simplement à votre répertoire de déploiement binaire, puis votre application se configurera automatiquement dans la bonne langue en fonction des informations sur la culture actuelle sur laquelle l'application est installée, par exemple. Cela permet d'économiser beaucoup de temps de programmation et de maux de tête.

J'espère que cela vous aidera, même s'il ne s'agit pas d'une solution basée sur les ressources.

1voto

Cette opération permet d'extraire la valeur du mot-clé Home et de l'insérer dans le champ Text1 Boîte.

Text1.Text= Resource.Home.ToString();

0voto

MusiGenesis Points 49273

Votre méthode est la meilleure façon de procéder si vous avez des développeurs qui ne maîtrisent pas personnellement les langues dans lesquelles vous traduisez votre application. Je l'ai déjà fait avec une application anglaise qui devait être traduite en espagnol, en portugais et en chinois (je ne parle qu'une seule de ces langues à demi couramment). Les formulaires originaux ont tous été créés en anglais, et dans l'événement Load du formulaire, le code a parcouru chaque contrôle et a recherché la propriété Text de chaque contrôle dans une feuille de calcul des traductions, et l'a remplacée par la traduction appropriée.

La méthode intégrée d'internationalisation d'un formulaire (qui est essentiellement une variante de l'héritage de formulaire) suppose que le programmeur parle couramment la langue que vous devez traduire, ce qui est loin d'être évident, et vous oblige à saisir manuellement toutes les valeurs de texte traduites pour chaque formulaire et chaque langue. Elle augmente également la taille de votre fichier binaire (potentiellement beaucoup plus), puisqu'elle ajoute un fichier .resx pour chaque formulaire et chaque langue que vous prenez en charge.

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