2011-10-03 3 views
4

Est-il possible d'obtenir la valeur d'un fichier de ressources qui n'est pas défini sur la culture de l'utilisateur actuel? Notre application est basée sur des données et non sur la culture.Récupérer manuellement une valeur de ressource d'un resx?

par exemple. un document est un document en français et des étiquettes et des champs spécifiques doivent être mis à jour et remplacés par de nouvelles données.

Le gestionnaire de ressources peut-il être invité à utiliser un .resx français au lieu du .resx par défaut?

Répondre

1

Vous pouvez le faire via la localisation, où les fichiers de ressources sont adaptés aux différentes langues que vous souhaitez prendre en charge. Les liens suivants, tirés de here devraient vous apporter ce que vous voulez.

".NET Localization, Part 1: Resource Managers - Vérifiez sous "" pour un bon départ

.NET Localization, Part 2: Creating Satellite Assemblies

.NET Localization, Part 3: Localizing Text

.NET Localization, Part 4: Localizing Units" Création de ressources pour plusieurs langues

2

vous pouvez définir la langue Typologie de texte de l'étiquette dans l'une des formes et ensuite vous choisissez la langue que vous voulez montrer à l'utilisateur final de comparer avec la langue avec ce texte de l'étiquette IE, si le texte de l'étiquette est le français alors vous pouvez afficher tous vos noms de contrôle en français

Note: ses travaux uniquement après la création du fichier resx en français et réécrire manuellement tous les noms de contrôle étiquette et le bouton en français comme valeur de nom quelque chose comme ce ..

Name    value 
-----------  ------------- 
lblname.text  frenchtype name 


using System; 
using System.IO; 
using System.Linq; 
using System.Data; 
using System.Text; 
using System.Diagnostics; 
using System.Windows.Forms; 
using System.Collections.Generic; 
using System.ComponentModel; 

public partial class Form1 : Form 
{ 
    public form1() 
    { 
    System.Threading.Thread.CurrentThread.CurrentUICulture = new 
System.Globalization.CultureInfo("fr-FR"); 
    getlanguagaefile(); 
    InitializeComponent(); 
    } 

// blah 
// blah 

private void getlanguagaefile() 
{ 
    if (label1.Text == "French") 
    { 
     System.Threading.Thread.CurrentThread.CurrentUICulture = new 
    System.Globalization.CultureInfo("fr-FR"); 
     ComponentResourceManager resources = new ComponentResourceManager(typeof(Wait)); 
     resources.ApplyResources(this, "$this"); 
     applyResources(resources, this.Controls); 

    } 
    } 

vous pouvez afficher la langue française à tous les textes de l'étiquette et des textes de bouton lorsque le formulaire est chargé

private void applyResources(ComponentResourceManager resources, Control.ControlCollection controlCollection) 
    { 
    foreach (Control ctl in controlCollection) 
    { 
     resources.ApplyResources(ctl, ctl.Name); 
     applyResources(resources, ctl.Controls); 
    } 
    } 
} 
3

vous pouvez utiliser la méthode ResourceManager.GetString() et provi de la culture désirée en tant que paramètre:

var culture = CultureInfo.CreateSpecificCulture("fr-FR"); 
var localizedString = ResourceManager.GetString("labelName", culture); 
+0

Pour les futurs lecteurs, pour que cela fonctionne, vous devez créer une nouvelle instance de 'ResourceManager' basée sur vos ressources. Quelque chose dans les goûts de 'ResourceManager rm = nouveau ResourceManager (typeof (YourProject.Properties.Resources))', puis appel 'GetString' sur la nouvelle instance. – TheWanderingMind

Questions connexes