ASP.Net MVC uygulamasını geliştiriyorsunuz, değil mi? Diğer cevaplar masaüstü uygulamalarına özgü gibi görünmektedir. Yaygın şeyler yakalamama izin verin:
Yerel ayar tespiti
Uygulamanızın kullanıcının yerel ayarlarını doğru algılaması oldukça önemlidir. Masaüstü uygulamasında, CultureInfo.CurrentCulture tercih edilen biçimlendirme yerel ayarını (sayıları, tarihleri, para birimlerini vb. Biçimlendirmek için kullanılması gereken) vb.), CultureInfo.CurrentUICulture tercih edilen Kullanıcı Arayüzü yerel ayarını (yerelleştirilmiş mesajları görüntülemek için kullanılması gereken) tutar. . Web uygulamaları için, bazı süslü yerel ayar algılama iş akışını uygulamak istemediğiniz sürece (yani istek üzerine değişen dili desteklemek istemediğiniz sürece), her iki kültürü de otomatik (yerel olarak AcceptLanguage başlığından yerel olarak algılamak için) ayarlamanız gerekir.
Dizeleri dışa aktar
Tüm dizeler kaynaklardan gelmelidir, bu Resx dosyalarıdır. Winforms App formunda Localizable özelliğini true olarak ayarlayarak kolayca erişilebilir. Ayrıca, modelinizden gelen dizeleri manuel olarak (ne yazık ki) dışlamanız gerekir. Aynı zamanda nispeten basittir. Asp.Net'te her şeyi manuel olarak dışlamanız gerekir ...
düzenleri
Dize genişlemesine kesinlikle izin vermeniz gerekir. Winforms dünyasında, tablonun daha uzun metne uyum sağlamak için otomatik olarak ayarlanmasını sağlamak için kullanılması gereken TableLayoutPanel ile erişilebilir. Web dünyasında biraz şanssızsın. CSS Yerelleştirme Mekanizması uygulamanız gerekebilir - CSS tanımlarını değiştirmenin (geçersiz kılmanın) bir yolu. Bu, Yerelleştirme halkının talep üzerine stil sorunlarını değiştirmesine olanak sağlar. Oluşturulan sayfadaki her HTML öğesinin benzersiz bir kimliği olduğundan emin olun - tam olarak hedeflemesini sağlar.
Kültüre özgü konular
Batı kültürüne özgü olabilecek grafik, renk ve sesleri kullanmaktan kaçının. Gerçekten ihtiyacınız varsa, lütfen Yerelleştirme araçlarını belirtin. Yöne duyarlı grafiklerden kaçının (bu, Arapça veya İbranice söyleyerek yerelleştirmeye çalıştığınızda bu bir sorun olacaktır). Ayrıca, tüm dünyanın aynı sayıları kullandığını varsaymayın (yani Arapça için doğru değil).
ToString () ve Parse ()
Desteklenmiyorsa, ToString () işlevini çağırırken her zaman CultureInfo ilettiğinizden emin olun . Bu şekilde niyetlerini yorumluyorsun. Örneğin: eğer bir sayıyı dahili olarak kullanıyorsanız ve bir nedenden dolayı onu dize kullanımına dönüştürmeniz gerekir:
int i = 42;
var s = i.ToString(CultureInfo.InvariantCulture);
Kullanıcının kullanımına gösterilecek numaralar için:
var s = i.ToString(CultureInfo.CurrentCulture); // formatting culture used
Aynısı, Parse (), TryParse () ve hatta ParseExact () için de geçerlidir - bazı kötü hatalar, CultureInfo'nun doğru kullanımı olmadan ortaya çıkabilir. Bunun nedeni, Microsoft’taki bazı zayıf ruhların, iyi niyetlerle dolu olmalarının, CultureInfo.CurrentCulture’ı varsayılan olarak kabul etmenin iyi bir fikir olduğuna karar vermesidir (eğer bir şeyi geçemezseniz kullanılır) - sonuçta biri ToString ( ) Kullanıcıya göstermek istiyor, değil mi? Her zaman durum böyle değildir - örneğin uygulama sürüm numaranızı veritabanında depolamayı deneyin ve ardından Version sınıfının örneğine dönüştürün. İyi şanslar.
Tarihler ve zaman dilimleri
DateTime öğesini her zaman UTC’de sakladığınızdan ve başlattığınızdan emin olun (DateTime.Now yerine DateTime.UtcNow kullanın). Görüntülendikten sonra yerel formatta yerel saate dönüştürün:
DateTime now = DateTime.UtcNow;
var s = now.ToLocalTime().ToString(CultureInfo.CurrentCulture);
Vücutta zaman referansı olan e-postalar göndermeniz gerekiyorsa, zaman dilimi bilgilerini eklediğinizden emin olun - UTC ofsetini ve şehirlerin listesini ekleyin:
DateTime someDate; // i.e. from database
var formattedDate = String.Format("{0} {1}",
someDate.ToLocaleTime().ToString(CultureInfo.CurrentCulture),
TimeZoneInfo.Local.DisplayName);
Bileşik mesajlar
Dizeleri birleştirmek için uyarıldınız. Bunun yerine muhtemelen yukarıda gösterildiği gibi String.Format () yöntemini kullanırsınız. Ancak, bileşik iletilerin kullanımını en aza indirmeniz gerektiğini belirtmeliyim. Bunun nedeni, hedef dilbilgisi kurallarının oldukça farklı olması nedeniyle çevirmenlerin sadece cümleyi yeniden sıralamaya ihtiyaçları olmayabilir (bu, yer tutucuları ve String.Format () kullanarak çözülebilir), ancak tüm cümleyi farklı şekilde çevirmek zorunda kalabilir. Neyin yerini alacağı. Sana bazı örnekler vereyim:
// Multiple plural forms
English: 4 viruses found.
Polish: Znaleziono 4 wirusy. **OR** Znaleziono 5 wirusów.
// Conjugation
English: Program encountered incorrect character | Application encountered incorrect character.
Polish: Program napotkał nieznaną literę | Aplikacja napotkała nieznaną literę.
Diğer birleştirme sorunları
Birleştirme, dizelerle sınırlı değildir. Kontrolleri bir arada bırakmaktan kaçının;
[Sayı ile metin kutusu] günlerinde tekrar hatırlat.
Bu, şu şekilde yeniden tasarlanmalıdır: Bu günlerde tekrar hatırlat: [text box].
Karakter kodlaması ve yazı tipleri
Unicode'da ne olursa olsun her zaman metni kaydedin, aktarın (örn. UTF-8). Yazı tiplerini zorlamayın - Yerelleştirmenin bunları değiştirmeniz gerekebilir ve varsayılan yazı tipi geri dönüş mekanizmasını kapatır (Winform'larda). Çoğu alanda "garip" karakterlere izin vermeyi unutmayın (ör. Kullanıcı adı).
Ölçek
Büyük olasılıkla sözde çeviri uygulamanız gerekecek, yani Alman kültürü için kaynaklar yaratmanız ve İngilizce dizelerinizi önek ve sonek ekleyerek kopyalamanız gerekecek. Ayrıca, bileşik dizeleri kolayca tespit etmek için yer tutucuları da sarabilirsiniz. Sözde çevirinin amacı, kodlanmış dizeler, yerleşim sorunları ve bileşik mesajların aşırı kullanımı gibi Yerelleştirilebilirlik sorunlarını tespit etmektir.