2010-12-08 6 views
4

私は非常に奇妙な問題を抱えています。これはSilverlightのバグである可能性があります。私はこれをVS2010のSilverlightアプリケーションプロジェクトのデフォルトテンプレートから作成した単純なアプリケーションで再現しました。Silverlightローカリゼーションのバグ?

私は2つの.resxファイル "Strings.resx"と "Strings.de.resx"を持っています。 SomeString - - "いくつかのテスト文字列"

Strings.de.resx - SomeString - "いくつかのDEのテスト文字列"

Strings.resx:彼らはそれぞれそのような一つのキー "SomeString" を、持っています私はちょうど私がそうのようなコードで使用のTextBlockを、平手打ち単一のアプリケーションMainPage.xamlをは、メインページのクラスのコンストラクタに:デバッガでこのによるステッピング

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; 

txt.Textは「いくつかのDEのテスト文字列であることを示してい"最初に"そしていくつかのテスト文字列 "。だから、すべてがうまくいくはずです。

私は自分のマシンにドイツ語の言語パックをインストールしました。ここで、マシンの地域設定で、システム言語を "Deutsch"に変更し、変更を反映させるためにログオフ/ログオンすると、同じコードが異なって動作します。同じ文字列 "some DE test string"がリソースTWICE。基本的には、現在の文化/栽培の「en-US」への第2の設定は何もせず、ドイツの文字列は引き続き検索されます。

実際には、ユーザーがシステムの負荷に関係なく表示言語を変更できるアプリを作成したい場合、間違ったリソースが取得されるため、できません。

また、Windows OS言語が英語に設定されている場合、すべて正常に動作し、カルチャを変更することができ、正しい文字列リソースがロードされます。 Windows OS言語がDeutsch(他人をチェックしていない)に設定されている場合は、英語の文字列リソースを読み込めません。

この問題はVistaマシンとWindows 7マシンの両方で発生し、他のマシンではテストされていません。

PS:csprojファイルが<SupportedCultures>en,en-US,de,de-DE</SupportedCultures>

私が間違ってやっている任意のアイデアを持っているように変更されましたか?

答えて

2

あなたの問題はSilverlightアセンブリのデフォルトカルチャから来ていると思います。Windowsのcultureをenからdeに変更した後にアプリケーションを再コンパイルしましたか?

は、アセンブリニュートラルカルチャをチェックしてみてください、とのセットは手動です:assemblyInfo.csで

[assembly: NeutralResourcesLanguage("en")] 

は、私はちょうど同じ問題を抱えていた

+0

この属性を追加すると、問題は部分的に解決されます。これにより、(より大きい)アプリの最初のページを除くすべてのページで機能することを意味します。最初のページでは、振る舞いは変わらず、属性もそうでもありません。それがなぜ起こっているのでしょうか?注記として、私は実際には文化固有の.resxファイルを別のxapに入れて、必要に応じて動的にロードしています。それはそれと関係がありますか? –

+0

また、最初のページでは、最初に表示されるページが最初に表示されることを意味します。必ずしも同じではありません。 –

+0

すべてのアセンブリで中立リソース言語を設定しましたか? – Eilistraee

0

を提出します。私のために修正したのは、正しい中性言語を推測するSilverlightに依存していなかったことです。私のアプリはen、de、fr、itに翻訳されています。だから私は(私はローカライズ文字列を持っているすべてのプロジェクトで)やった:

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

これは、Silverlightは、ドイツのマシン上でニュートラル言語(「EN」)を無視すること、奇妙な問題を修正します。

+0

デフォルトのリソースは空で、GuiStrings.X.resxで定義されたすべての言語はありますか?これは本当にこの問題の唯一の解決策ですか? –