Comment changer la Cultureactuelle à l'exécution?
je dois changer les cultures à l'exécution en fonction des fichiers de ressources pour chaque culture.
je dois changer les attributs des contrôles dans ma forme, selon deux cultures qui l'ont désigné .fichiers resx
resorces1.aspx.resx // default
resorces1.aspx.he-IL.resx // hebrew culture
je peux charger la page soit avec la ressource de repli, soit sur pageload donner le UICulture = "he-IL"
valeur et il se charge très bien avec les ressources recherchées.
le problème est que je dois faire ces changements à l'exécution.
1.. après - Je changer la valeur sur un événement clic du bouton
btn_change_Click(....)
{
UICulture = "he-IL" ;
}
Il renvoie toujours à la initialisé à la valeur "fr-fr"
Comment puis-je modifier la culture à l'exécution ?
2.. Comment puis-je référencer le fichier de ressources de secours si par exemple Je ne sais pas que c'est "en-US" ?
3 réponses
le Changement de la culture d'INTERFACE utilisateur actuelle:
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("he-IL");
ou mieux, récupérez une instance en lecture seule de la culture he-IL:
System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("he-IL");
S'il n'y a pas de correspondance avec la culture actuelle de L'IU, ASP.NET utilise les ressources de repli. il commence par chercher des ressources pour une culture spécifique. Si ceux qui ne sont pas disponibles, il recherche les ressources pour une culture neutre. Si on ne les trouve pas, ASP.NET charge le fichier ressource par défaut. Dans cet exemple, le fichier ressource par défaut est WebResource.resx.
je n'ai pas été en mesure d'obtenir le "repli" comme décrit ici pour travailler. J'utilise des fichiers de ressources globales pour la langue et quand l'étiquette est manquante du fichier de culture sélectionné par l'utilisateur, il ne revient pas par défaut à une étiquette dans la culture par défaut? J'ai fini par créer une méthode pour effectuer des secours. J'étais à la recherche de meilleurs moyens pour tempérer changer la culture (lorsque l'étiquette n'a pas trouvé) et suis tombé sur ce post donc j'ai pensé que je l'aurais et un peu de contenu.
dans une classe de service de mine: public Chaîne getLabelResource(String sLabelID, Chaîne sLangCd) {
cLogger oLogger = new cLogger();
try
{
Object sLabel;
sLabel = HttpContext.GetGlobalResourceObject("{filename}", sLabelID);
if (sLabel.ToString() == "") //label was not found in selected lang
{
//default to US language resource label
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US");
sLabel = HttpContext.GetGlobalResourceObject("{filename}", sLabelID);
//switch global lang back to selected
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(sLangCd);
}
return sLabel.ToString();
}
catch (Exception ex)
{
oLogger.LogWrite("cUtils.cs", "getLabelResource", ex.Message, false);
return String.Empty;
}
}
max m'a mis sur la bonne voie, rien que je n'ai jamais rencontré auparavant , mais il m'a aidé à faire un petit ajustement à la documentation msdn sur la question :
http://msdn.microsoft.com/en-us/library/bz9tc508.aspx
string defaultLanguage = Thread.CurrentThread.CurrentUICulture.ToString();
protected void Page_Load(object sender, EventArgs e)
{
}
protected override void InitializeCulture()
{
if (Request.Form["ListBox1"] != null)
{
String selectedLanguage = Request.Form["ListBox1"];
UICulture = selectedLanguage;
Culture = selectedLanguage;
Thread.CurrentThread.CurrentCulture = new CultureInfo(selectedLanguage);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage);
}
else
{
Thread.CurrentThread.CurrentCulture = new CultureInfo(defaultLanguage);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(defaultLanguage);
}
base.InitializeCulture();
}
la boîte de liste contient des cultures différentes la première et sélectionnée est aussi la culture par défaut, que je sauve sur le chargement de page, sur d'autres le charge comme aucun effet parce que la boîte de liste déjà comme une valeur .