2017-04-06 10 views
2

DynamicResourceとMergedDictionaryに問題があります。 私は異なる言語(英語、スペイン語、ドイツ語)で表示することができ、多くのResourceDictionariesを持っているソフトウェアを持っています。 私はあなたに「Documentation.xaml」と呼ばれている辞書の一例を与える: DynamicResourceが正しい値を表示しない

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:system="clr-namespace:System;assembly=mscorlib"> 

    <system:String x:Key="ProductNumber">Product Number</system:String> 
    <system:String x:Key="Notes">Notes</system:String> 
    <system:String x:Key="Logo">Logo</system:String> 
    <system:String x:Key="InspectionTask">Inspection task</system:String> 
    <system:String x:Key="ProductDescription">Product Description</system:String> 
</ResourceDictionary> 

この私の「デフォルト」のResourceDictionary

。 ドイツ語と英語のための "Documentation.de-DE.xaml"とDocumentation-es-ES.xaml "という2つの辞書があります。 これらはデフォルトの辞書とほぼ同じです。 。

"DynamicResource"経由でリソースにアクセスすると、アクティブ辞書から結果が得られます(例:スペイン語の "ProductDescription"については "Descripcion de producto"となります)。 私はスペイン語でソフトウェアを実行していますが、それをドイツ語に変更したいのですが、辞書の1つのエントリは、英語ではありません。 a vailableの場合、ソフトウェアはデフォルトのエントリを使用していません。私はまだスペイン語の辞書の価値があります。

私の意見では、DynamicResourceはこのケースではクラッシュしており、変更されません。私はそれが本当にクラッシュしているという証拠はありません。私が持っている唯一の事実は、エントリが存在しなければ、テキストボックスは変更されないということです! このクラッシュを処理する方法はありますか? (もしあれば)

私はあなたが必要とするすべての情報を持っていることを願っています。そうでない場合はお知らせください

+0

実際に「クラッシュする」か、TextBlockだけが変更されませんか? – mm8

+0

@ mm8私はそれは私の意見だと言ったように。私はそれがクラッシュするかわからない。 私が知っている唯一のことは、変化しないことです。エントリが利用可能な場合、正常に動作し、テキストボックスを変更します。私はそれを明確にするために質問を編集した。 – Evosoul

答えて

2

次のような状況を想定すると:私はスペイン語でソフトウェアを実行し、ドイツにそれを変更したいのですが、辞書内の1つのエントリが利用できない場合、ソフトウェアは、デフォルトのエントリを使用していないのです。私はまだスペイン語の辞書の価値があります。

これは予期された動作です。 DynamicResourceマークアップ拡張を使用して設定されたターゲットプロパティは、リソースが変更された場合にのみ変更されます。リソースがが削除された場合は、ターゲットプロパティはリセットされません。

ResourceDictionaryに完全に同じ翻訳キーが含まれていることを確認してください。

その他のオプションは、独自のカスタムマークアップ拡張を実装することです。詳細については、次のリンクを参照してください。

https://wpftutorial.net/LocalizeMarkupExtension.html http://10rem.net/blog/2011/03/09/creating-a-custom-markup-extension-in-wpf-and-soon-silverlight https://github.com/SeriousM/WPFLocalizationExtension https://www.codeproject.com/articles/35159/wpf-localization-using-resx-files

+0

ああ。私は思っていましたが、既に実装されている方法がいくつかありました。私はこれを調べます!ありがとう! – Evosoul

+1

私は答えをupvoted – Evosoul

0

言語を変更すると、これらのカルチャの設定がすべて変更されますか?

CultureInfo.DefaultThreadCurrentCulture = newCultureInfo; 
CultureInfo.DefaultThreadCurrentUICulture = newCultureInfo; 
Thread.CurrentThread.CurrentCulture = newCultureInfo; 
Thread.CurrentThread.CurrentUICulture = newCultureInfo; 
0

次のような状況を想定し:私はスペイン語でソフトウェアを実行し、ドイツにそれを変更したいのですが、辞書内の1つのエントリが利用できない場合、ソフトウェアがありますデフォルトのエントリを使用していません。私はまだスペイン語の辞書の価値があります。

これは意味があります。何もエントリーがなければ、なぜ価値が変わるのですか?

空の文字列値を持つ各 '言語'リソース辞書に不足しているエントリを追加することをお勧めします。

関連する問題