2011-02-15 14 views
13

Uygulamamı, varsayılan İngilizce'nin yanı sıra Japonca olarak yerelleştirmek için kullanmanın son derece basit bir yolunu arıyorum. Tek gereksinim, belirtilen bir dilde başlatabileceğimizdir. Tıknaz, karmaşık, hataya eğilimli olan LocBaml ürünlerini kullanıyorduk ve inşa sürecimizi son derece zorlaştırıyor. Ben kaynak dosyaları (Strings.resx, Strings.ja.resx) geri herşeyi hareketli ve bunun gibi, bağlayıcı statik yapıyor düşünüyorumWPF'yi yerelleştirmek için standart resx + statik bağlamayı KULLANMADAN herhangi bir neden var mı?

:

Sonra
<TextBlock Text="{x:Static resx:MyWindow.MessageText}" /> 

fırlatma zamanında hangi dili bulmak onlar istiyoruz ve ondan iplerin kaynak anahtarlama:

public static void Main(string[] args) 
{ 
    if (args[0] == "-lang") 
    { 
    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(args[i + 1]); 
    } 

    App app = new App(); 
    app.InitializeComponent(); 
    app.Run(); 
} 

Bu basit olduğunu ve tek gerçek dezavantajı görünüyor yapmamız hiç isteyeceksiniz şey değil çalışma zamanı en geçemezsiniz olmasıdır.

http://wpflocalization.codeplex.com/

http://www.wpftutorial.net/LocalizeMarkupExtension.html

Onlar temizleyici Xaml sağlamak ve tasarım sırasında biraz daha güzel görünmek, ama seni izin dışında herhangi işlevsel bir fark göremiyorum: Bunları gibi birkaç yerelleştirme uzantıları gördüm çalışma zamanında dilleri değiştirmek. Burada bir şeyi özlüyorum mu, yoksa kolay ve yerleşik bir rotaya mı gitmeliyiz? Toplamı toplam, yalnızca yerelleştirilmesi gereken ~ 100 dizgiye sahibiz. Özellikle en basit yolun, özellikle de uygulamamızın göreceli sadeliği göz önüne alındığında, buradaki en iyi yol olduğunu düşünüyorum.

cevap

6

Resx yolunu kesinlikle tavsiye ederim. Çeşitli dillerle (şu anda sadece tr_GB ve it_IT ancak daha fazla yerel alanı kısa sürede zorlayacaktır) yerelleştirilecek büyük bir wpf uygulaması oluşturmayı bitirdim ve mükemmel bir şekilde çalıştı.

Bazı sakıncaları

dikkate almak:

  • Bahsettiğiniz gibi, bu hala iş biraz biçimlendirmesi kullanarak ile elde edilebilir olsa da (dinamik anahtar dilleri istiyorsa gerçekten harika bir çözüm değil extensions). Eğer Hemen hemen locBaml, olarak i' kadarıyla lokalize dizeleri (sınırlıdır havai
  • küçük biraz ekler sizin resx ayarlıyoruz kaynaklarını yerleştirmek gerekir locBaml yaklaşımın tersine
  • m farkında, hemen hemen ) bizim bakımdan locBaml uzak uydurma sakıncaları tarafından resx yaklaşımın minör kura destek olarak

tüm eleman özelliklerini yerelleştirebilirsiniz. Bir uyarı, tam bir yapı projesinde locBaml yaklaşımını kullanmamışımdır. Sizinle aynı durumdaydım ve her iki yaklaşımı da araştırmak zorunda kaldım. Arka görüşte kesinlikle bizim için doğru karardı.

+0

Teşekkürler! İnan bana, tam bir proje üzerinde LocBaml'ı kullanmak zorunda kalmadığına çok sevinmelisin. Resimlerin resx ile lokalize edilip edilmediğini biliyor musunuz? Onları asla yerelleştirmemiz gerektiğini sanmıyorum, ama sadece ... – Stevoman

+1

@Baconcheese - url'yi resx'e eklerim, sonra Uri nesnesini bu URL'yi kullanır, Uri'yi bir özellik olarak gösterir Bir ViewModel ve bir Görüntü ona bağla. –

+0

Mükemmel, teşekkürler! – Stevoman

5

WPF localization extension kullanıyoruz. Yerelleştirilmiş dizelerin çalışma zamanı geçişi ve tasarım zamanı görüntülemesini sağlar.

Resx kullanımıyla ilgili güzel bölüm, iyi bir geri dönüşüme sahip olmasıdır (ör.de-DE, de, varsayılan kaynak). Ayrıca locBaml, bir CSV dosyası kullanmasına neden olabilecek tüm sorunların (virgül içeren dizelerden kurtulmaya gereksinim duyulması gibi) bir dezavantajına sahiptir. Ayrıca, güçlü isim imzalı meclisler, araç çalıştırıldıktan sonra istifa edilmelidir.

İlgili konular