C # / WinForms'da çok dilli bir uygulama yapmak için en iyi uygulama? [kapalı]


94

Böyle bir durumda küçük bir proje üzerinde çalışmam gerektiğinden, C # dilinde birden çok dile uygun uygulamalar yapmayı araştırıyorum. Bunu yapmanın temelde iki yolunu buldum:

Bir formun Yerelleştirilebilir özelliğini true olarak ayarlayın, Dil özelliğini ayarlayın, tüm etiketleri vb. Doldurun ve 'işiniz bitti'. Bunda gördüğüm en büyük dezavantaj şudur: bir formun parçası olmayan başka şeylerin birden çok dile hazır hale getirilmesi (örneğin, açılır pencereler, günlük dosyaları veya pencereler, vb.).

Bir kaynak dosyası, örneğin 'Lang.en-us.resx' ve her dil için bir tane, örneğin 'Lang.nl-nl.resx' oluşturun ve onu Dizeler ile doldurun. IDE benim için otomatik olarak bir sınıf oluşturuyor gibi görünüyor, bu yüzden kodda Lang.SomeText'i kullanabilirim. Bunda gördüğüm en büyük dezavantaj: Her biçim için tüm etiketleri ve diğer başlıkları kodda kendim ayarlamam gerekiyor (ve bu kaynaklarla veri bağlama çalışmıyor gibi görünüyor).

Bununla birlikte, bunu yapmak için başka yöntemler de olduğundan eminim.

Öyleyse, en iyi uygulama nedir? Küçük uygulamalar (birkaç form, veritabanı bağlantısı vb.) İçin en kolay olan nedir ve daha büyük uygulamalar için en uygun ölçek hangisidir?


3
Yapıcı olmayan (veya diğer "SO için geçerli olmayan" tipteki sorular) en değerli sorulardan biri olduğunu fark ettim :) Bu da iyi bir soru (oyların bunu kanıtladığını düşünüyorum) İşte nasıl yapılacağına dair güzel bir gösteri. çoklu dil desteği için çoklu dil eklentisini kullanmak için youtube.com/watch?v=SNIyP1QQdVs
Prokurors

1
Bazen internetteki tüm bilgi parçalarını bir araya getirmek çok zor ve şu anda bu soruyu paha biçilmez buluyorum. Elbette yumuşak soruları kapatmanın, onları açık bırakmaktan daha az yapıcı olduğu zamanlar vardır ve bence bu o zamanlardan biri. :)

Yanıtlar:


20

Çok dilli uygulamalar için her zaman kaynak dosyaları kullandım.
Web'de bunların nasıl kullanılacağını açıklayan birçok makale var.

İki farklı yol kullandım:

  • Form başına bir kaynak dosyası
  • Genel bir kaynak dosyası

Kaynak dosyası / formunun uygulanması daha kolaydır, yalnızca kaynak dosyasındaki değerleri girmeniz gerekir, ancak bu yaklaşımı sürdürmek daha zor, çünkü etiketler uygulama boyunca dağılmış durumda.

Global kaynak dosyası, tüm etiketleri (resimler, vb.) Tek bir dosyada (dil başına) merkezileştirmenize izin verir, ancak etiketleri form yükünde manuel olarak ayarlamak anlamına gelir. Bu dosya aynı zamanda hata mesajları vb. İçin de kullanılabilir.

Bir zevk meselesi ...

Son bir nokta, programları İngilizce ve Fransızca yazıyorum, "en-US" ve "fr-FR" yerine "en" ve "fr" kullanıyorum. İşleri karmaşıklaştırmayın, İngilizcenin farklı dil seçenekleri (Amerikan, İngilizce, Avustralya vb.) Yalnızca birini kullanmak için yeterince az farklılık gösterir (aynısı Fransızca için de geçerlidir).


2
Bazen lehçeler hakkında endişelenmen gerekir. Örneğin, Çince karakterler Geleneksel Çince'de (Tayvan) Basitleştirilmiş Çince'de (Çin ana karası) tamamen farklıdır.
MarkJ

1
@MarkJ MSDN belgelerinde , Geleneksel Çince ve Basitleştirilmiş Çince'nin lehçeler (ülke / bölge) değil, tarafsız kültürler olduğu belirtilmektedir. Msdn: "Tarafsız bir kültür, bir dil ile ilişkili ancak bir ülke / bölge ile ilişkili olmayan bir kültürdür. Belirli bir kültür, bir dil ve bir ülke / bölge ile ilişkili bir kültürdür. Örneğin," fr ", tarafsız kültür ve "fr-FR" belirli bir kültürdür. "zh-CHS" (Basitleştirilmiş Çince) ve "zh-CHT" (Geleneksel Çince) tarafsız kültürlerdir. "
geniş bant

Bunu yakın zamanda bağlantı yardımı ile yaptım , orada bahsedilmeyen 2 adım: 1. Tüm .resource dosyalarını tıklayın ve "Build Action" özelliğini "İçerik" olarak ayarlayın. 2. Tüm .resource dosyalarını tıklayın ve "Çıktı Dizinine Kopyala" özelliğini "Her Zaman Kopyala" olarak ayarlayın.
Sourav

1
@Kiquenet .NET geniş desteğini içeren eksiksiz (kodlu) bir yanıt için bkz: stackoverflow.com/a/35813707/2901207
CularBytes

9

Geçenlerde hem Almanca hem de İngilizce dil desteği olan bir program yazdım. İngilizce kaynaklarıma LanguageResources.resx ve Almanca kaynaklarıma LanguageResources.de.resx adını verirsem, otomatik olarak doğru dili seçtiğini öğrendiğimde şaşırdım. ResXFileCodeGenerator benim için her şeyi halletti.

İki dosyadaki alanların aynı olduğunu ve henüz girilmemiş olan Almanca alanların uygulamada İngilizce olarak görüneceğini unutmayın, çünkü en spesifik olmayan dosya dili varsayılan dosya olduğundan. Bir dizge ararken, en özelden (ör. .De-DE.resx) en az özelliğe (ör. .Resx) gider.

Dizelerinize ulaşmak için ResourceManager.GetString veya ResourceManager.GetObject çağrılarını kullanın. Uygulama size ResourceManager'ı ücretsiz olarak vermelidir.


6

Bununla karşılaşabilecek diğerlerinin yararı için (son gönderiden 1+ yıl sonra), tüm çeviri sürecini son derece kolaylaştıran profesyonel bir yerelleştirme ürününün yazarıyım. Herhangi bir rastgele çözümden tüm ".resx" dizelerini çıkaracak ve bunları ücretsiz bağımsız bir uygulama kullanılarak çevrilebilecek tek bir dosyaya yükleyecek bir Visual Studio eklentisidir (çevirmenler bunu sitemden indirebilir). Aynı eklenti, çevrilmiş dizeleri çözümünüze geri aktarır. Birçok yerleşik koruma, çok sayıda zil ve ıslık ve çevrimiçi yardımla kullanımı son derece kolaydır (çok fazla ihtiyacınız olmayacak). Bkz http://www.hexadigm.com


1
Bu, visualstudio'ya yerel işlev olarak eklenmelidir! Harika yazılım!
Caverna

Çok teşekkürler (takdir) Ürüne başlamadan önce sizinle aynı fikirdeydim (yaklaşık 10 yıl önce), ancak MSFT bunu bugün hayata geçirirse beni işten çıkarır :)
Larry,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.