2009-11-19 3 views
7

Avait une question de base WinForm: Par défaut, un fichier resx est créé pour chaque formulaire ou contrôle utilisateur (avec le designer.cs). Cette resx fonctionne bien pour tous les contrôles et le texte ajouté aux contrôles via l'interface utilisateur. Je me demandais si je pouvais utiliser le même resx pour ajouter des chaînes qui doivent être utilisées par programme et en fonction des conditions, attachées aux contrôles? Le resx sera-t-il remplacé dans tous les cas et ces chaînes personnalisées seront supprimées? Quelle est la meilleure pratique à suivre dans ce cas?Utilisation des ressources de formulaire pour les chaînes programmatiques?

+2

Pour ne pas vous décourager, mais vous pourriez être intéressé par ce "hate-rave" (basé sur VS 2003) sur les fichiers ResX: http://www.windojitsu.com/blog/resxsucks.html Espérons que la situation est meilleure maintenant, mais je suis toujours timide de les utiliser directement. – BillW

+1

Pour la "tasse est à moitié plein" vue (?) Peut-être envisager: http://stackoverflow.com/questions/676312/modifying-resx-file-in-c – BillW

+0

Liens intéressants .. Merci de souligner ces BillW – bschandramohan

Répondre

2

Les fichiers auto-générés sont remplacés (j'utilise 2005), donc non je n'utiliserais pas le même fichier. Je suggère de créer une zone séparée dans votre projet pour les fichiers .resx comme celui-ci. Habituellement, je crée un .resx par formulaire, correspondant au nom, bien sûr.

Modifier: Here est une réponse plus détaillée que j'ai donnée récemment pour organiser la structure de fichier/dossier lors de la localisation de votre application avec des fichiers .resx.

2

Il existe un problème étrange avec les ressources de chaîne dans le fichier Resources.resx. Il n'y a aucune manière évidente que j'ai jamais découvert comment créer une nouvelle table de ressource pour un autre langage avec l'IDE. Cela peut être fait à la main si. Procédez comme suit:

  1. projet + Propriétés, onglet ressources, ajouter les chaînes que vous souhaitez utiliser dans votre programme
  2. Démarrez l'Explorateur Windows et naviguez dans le dossier de votre Propriétés de projet
  3. Copiez et collez le Resources.resx fichier
  4. Renommez-le à la culture que vous voulez utiliser. Par exemple: Resources.fr-FR.resx
  5. Retour à VS, cliquez sur Afficher tous les fichiers icône dans la fenêtre Explorateur de solutions
  6. Développez le nœud Propriétés, le nouveau fichier de ressources doit être visible
  7. droit -cliquez et sélectionnez « Inclure dans le projet »
  8. sélectionner, dans la fenêtre Propriétés PREF outil = « ResXFileCodeGenerator »
  9. Vérifiez que Build action est réglé sur « ressource incorporée »

Construisez votre programme. Vous devriez obtenir un nouveau dossier dans le répertoire bin \ Debug de votre projet avec l'assembly satellite, nommé projectname.resources.dll. Cet ensemble de satellites contient à la fois les chaînes localisées et toute ressource localisée des formulaires. Vérifiez que cela fonctionne avec le code comme ceci:

public Form1() { 
    System.Threading.Thread.CurrentThread.CurrentUICulture = 
    System.Globalization.CultureInfo.GetCultureInfo("fr-FR"); 
    InitializeComponent(); 
    textBox1.Text = Properties.Resources.String1; 
} 
+2

Dans votre formulaire, définissez 'Localizable' sur' true', puis modifiez la propriété 'Language'. –

+0

En effet, je n'ai pas trouvé aussi. Le projet ASP.NET a un menu Outils -> Générer un fichier de ressources, mais pas WinForms. Ai-je raison? – abatishchev

+0

btw, est-ce que 'ResXFileCodeGenerator' est vraiment requis? Default .resx a BuildAction = EmbeddedResource, mais a CustomTool vide. – abatishchev

1

Ou vous pouvez essayer ceci:

Ajouter ce code dans main();

en utilisant System.Resources;

ResXResourceWriter rw = new ResXResourceWriter("Resources.de-DE.resx"); 
rw.AddResource("String1", "de"); 
rw.Close(); 
... 

répétition pour plusieurs fichiers

Allez dans le répertoire bin et déplacer le fichier XML (resx) (s) à peut-être le dossier de la propriété.

Passez à l'étape 5-9 ci-dessus dans le post nobugz.

+1

Pete, quel est le poste nobugz dont vous parlez? – bschandramohan

Questions connexes