2010-12-08 6 views
4

J'ai un problème très étrange, qui pourrait ressembler à un bug de Silverlight. Je l'ai reproduit dans une application simple créée à partir de VS2010, modèle par défaut du projet Silverlight Application.bug de localisation Silverlight?

Dans l'application, j'ai deux fichiers .resx, "Strings.resx" et "Strings.de.resx". Ils ont chacun une clé "SomeString", comme ceci:

Strings.resx - SomeString - "une chaîne de test"

Strings.de.resx - SomeString - "une chaîne de test de"

sur le MainPage.xaml d'application unique que je viens giflé un TextBlock, que je l'utilise dans le code comme si, dans le constructeur de classe MainPage:

Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE"); 
    txt.Text = Strings.SomeString; 

    Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US"); 
    txt.Text = Strings.SomeString; 

pas à pas à travers ce avec le débogueur montre txt.Text être « une chaîne de test dE "d'abord et ensuite" une chaîne de test ". Donc tout fonctionne comme il se doit. Cependant, j'ai installé le pack de langue allemande sur ma machine. Maintenant, si je change, dans les paramètres régionaux de la machine, la langue du système à "Deutsch" et la déconnexion/ouverture de session pour que les modifications prennent effet, le même code fonctionne différemment: la chaîne "une chaîne de test DE" est extraite des ressources DEUX FOIS. Fondamentalement, le deuxième réglage de la culture actuelle à "en-US" ne fait rien et la chaîne allemande est toujours récupérée. Donc, en effet, si je veux avoir une application où l'utilisateur peut changer la langue d'affichage indépendamment du système launguage, je ne peux pas le faire, car les ressources incorrectes sont récupérées.

Encore une fois, dans le cas où la langue du système d'exploitation Windows est définie sur l'anglais, tout fonctionne correctement, je peux changer la culture et cela fonctionne, les ressources de chaînes correctes sont chargées. Lorsque la langue du système d'exploitation Windows est définie sur Deutsch (je n'ai pas vérifié les autres), je ne parviens pas à charger les ressources de chaînes en anglais.

Le problème se manifeste sur les machines Vista et Windows 7, n'ont pas testé sur d'autres.

ps: le fichier csproj est modifié pour avoir <SupportedCultures>en,en-US,de,de-DE</SupportedCultures>

Toute idée de ce que je fais mal?

Répondre

2

Je pense que votre problème provient de la culture par défaut de votre assembly Silverlight: Avez-vous recompilé l'application après avoir changé la culture Windows de en à de?

Essayez de vérifier l'ensemble de la culture neutre et réglée manuellement:

[assembly: NeutralResourcesLanguage("en")] 

dans le fichier AssemblyInfo.cs

+0

Vous avez raison et l'ajout de cet attribut résout partiellement le problème. Par ceci je veux dire que cela fonctionne pour chaque page à l'exception de la première page de l'application (plus grande).Pour la première page, le comportement est inchangé, attribut ou non. Une idée de pourquoi cela pourrait être? En guise de note, j'ai en fait les fichiers .resx spécifiques à la culture dans un autre xap que je charge dynamiquement à la demande. Est-ce que cela pourrait avoir quelque chose à voir avec ça? –

+0

Aussi juste pour clarifier: par première page je veux dire quelle page est affichée en premier, ce n'est pas toujours la même chose. –

+0

avez-vous défini le langage de ressource neutre sur tous les assemblys? – Eilistraee

0

Je viens d'avoir le même problème. Ce qui m'a arrangé, c'est que je ne me suis pas fiée à Silverlight pour deviner la bonne langue neutre. Mon application se traduit par en, de, fr et it. Donc, je l'ai fait (dans tous les projets que j'ai cordes localisables):

GuiStrings.resx 
GuiStrings.en.resx 
GuiStrings.de.resx 
GuiStrings.fr.resx 
GuiStrings.it.resx 

Ce résout le problème bizarre, que Silverlight ne tient pas compte de la langue neutre (« en ») sur les machines allemandes.

+0

Est-ce que votre ressource par défaut est juste vide et vous avez toutes vos langues définies avec GuiStrings.X.resx? Est-ce vraiment la seule solution à ce problème? –