YAF 1.9.4 yükseltme - Türkçe dil dosyasında gerekli tanımlar bulunduğu halde çeviri neden web sitesinde görünmüyor?
Evet arkadaşlar sanırım bu biz Türkler'in YAF kurulumlarında ve sonrasında yaşadığı en sık sorunlardan birisi. Daha önce de,
Linkleri görebilmek için lütfen siteye üye olunuz!
bu bölümde olduğu gibi sıkça tartışmışız bu Türkçe mevzularını felan.
Neyse asıl konumuza dönelim..
Bu sorunun cevabı şu arkadaşlar, biliyorsunuz YAF farklı dillerde hizmet verebilmek için XML dosyalarını kullanıyor ve XML dosyalarındaki ilgili element değerini alarak sonucu sitede bizlere sunuyor. Şimdi YAF bunu yaparken, yani XML dosyasını tararken BÜYÜK HARF kullanıyor ve bunu da seçilen dile göre yapıyor. Yani seçilen dile göre element adını büyük harf yaparak XML dosyasında arama yapıyor. Eğer bu büyük küçük harf olayında herhangi bir hata olursa XML dosyasında sonucu bulamıyor (olsa bile?) ve çeviri siteye yansıtılamıyor. Bunu bir örnekle daha iyi açıklayalım..
Mesela YAF sitelerinin en üst sağ kısmında "Son Ziyaretiniz" şeklinde bir bilgi bölümü var. YAF bu bölümle ilgili gerekli çeviriyi yapmak için, dil dosyayı içerisinde "LAST_VISIT" adlı bir attribute arıyor. Ancak bu "LAST_VISIT" attribute ilgili metota parametre olarak verilirken KÜÇÜK harfli, yani "last_visit" olarak geliyor. Metot içerisinde KÜLTÜR bağımlı BÜYÜK harf işlemi yapılınca da,
last_visit - > LAST_VİSİT
şeklinde değişiyor. Oysa ki XML dil dosyası içerisinde bu attribute değeri LAST_VISIT...Yani I'lar İ olarak büyük harfe çevriliyor. Çeviri doğru, ancak YAF'ı yazan arkadaşlar Türkçe kelimelerin nasıl büyük-küçük harf değişimine uğradığını bilmiyorlar, bilmek zorunda da değiller. Bu noktada biz devreye giriyoruz zaten :)
Peki sorunun nedenini bulduk, nasıl çözeceğiz? Çok basit...
Attribute'larda kültür BAĞIMSIZ büyük harf dönüşümü yapmamız lazım. Nasıl?
YAF.Classes -> YAF.Classes.Core -> Localization -> Localizer.cs
dosyası içerindeki
public void GetText(string tag, out string localizedText) metodundaki,
tag = tag.ToUpper(this._currentCulture);
satırını
tag = tag.ToUpperInvariant();
şeklinde değiştiriyorsunuz. Hepsi bu kadar :)