2013-03-07 12 views
10

MVVM Kalıbı'nı kullanarak bir WPF Uygulamasını nasıl yerelleştirebilirim? Bunu gerçekten "doğru" şekilde yapmak istiyorum.MVVM, WPF Uygulamalarında yerelleştirmeye uyuyor

Geçerli yaklaşımım, uygulamanızı yerelleştirmek için .resx Resource dosyalarını kullanıyorum.

Solution Explorer VS 2012

benim xaml kodu

xmlns:localization="clr-namespace:ClientLibTestTool.ViewLanguages" 

onları dahil ve bunun gibi bunlara erişmek:

 <Button x:Name="BtnGenerate" 
       Content="{x:Static localization:localization.ButtonGenerate}"/> 

Sorularım:

  1. orada mı Bunu yapmanın daha iyi yolu?
  2. Farklı dilleri nasıl test edebilirim (farklı dil ayarlarıyla yükleme uygulaması)?
  3. Çalışma zamanında dili değiştirmek mümkün mü?

Yanıtlar:

Soru 1:

Soru 2:

public MainWindow() 
{ 
    // Debug Settings 
    localization.Culture = CultureInfo.GetCultureInfo("en-US"); 
    // localization.Culture = CultureInfo.GetCultureInfo("de-DE"); 
    this.InitializeComponent(); 
} 

Soru 3 (stijn teşekkürler):

Değil (Stijn teşekkür ederim) gerçekten tüm pencereyi yeniden çizmek gereklidir.

cevap

4

Bu, ilgili olduğum sürece, bunu yapmanın uygun yolu. Görüşme tarafından belirlenen alır budur

localization.Culture = CultureInfo.GetCultureInfo("de-DE"); 

bütün dizeleri zamanında (oluşturulan Designer.cs dosyalarındaki tüm çağrılar ResourceManager.GetString("SomeString", resourceCulture); ve resourceCulture gibi bakmak en getirilen olduğundan: yerelleştirme sınıfı tarafından kullanılan kültürünü değiştirmek, dilleri arasında geçiş yapmak için yukarıda, bu, çalışma zamanında aldığınız şeyi etkiler.Ancak xaml içinden menü öğelerindeki vb. değerleri kullanacağınızdan emin olun, bu etkiyi almadan önce tüm menüyü yeniden oluşturmanız gerekir.

+1

Açıklama: bu kod satırı ÖNCE InitializeComponent(); Yöntem: Aksi halde işe yaramaz – Joel

+1

Son cümlede kastettiğim şey budur, hala çalışır ancak yalnızca compone için tekrar referans veren nts. Bunu, kaynak dizelerini xaml kullanarak değil, bunun yerine kaynak değerini içeren ve bu değişiklik olduğunda PropertyChanged olayını tetikleyen gözlenebilir özelliklere bağlayarak alabilirsiniz. – stijn