Teşekkür ederim.
Evet düşünüyorum. Uygulama alt yapısı buna uygun şekilde çalışıyor. Özetle anlatmam gerekirse;
Uygulamanın arayüz hariç hiçbir katmanında static yazılmış mesaj, log vb... bilgi bulunmuyor. Bunun gibi tüm veriler resource dosyası içinde saklanıyor.
Örneğin; throw new BusinessException(ResponseCode.IsUniqueStockCode);
şeklinde yer alan satır işlediğinde, exception interceptor içerisine kadar taşınacaktır.
Exception interceptor typeof(BusinessException) doğrulamasını yaptıktan sonra, içerisinde yer alan ResponseCode bilgisini ResponseMessage.rsx içerisinden çekip ResponseBase içerisinde yer alan Header bilgisine set edip servisten dışarı düzgün bir şekilde handle edecektir.
Ben bu işlem için dil desteği sağladığım da RequestBase içerisinde yer alan Language bilgisini gönderiyor olacağım. Interceptor içerisinde burada gelen değeri Wcf servisin OperationContext içerisine add ettiğimde tüm katmanlardan erişebiliyor oluyorum. Tabi bunu direk OperationContext ile sağlamıyorum bir interface aracılığı ile erişiyorum. Interface implement eden sınıf OperationContext ile konuşması gerektiğini biliyor.
Daha sonra dile göre işlem yapmam gerektiğinde instance süresince yaşacak olan bu değere bakıp mesajımı buna uygun şekilde dönebileceğimi planlıyorum.
Tabi bu kadarla sınırlı olmayacak ama en azından kod içerisinde text ile yazılmış bir şeyler aramayacağım. Dil desteği ile kaydedilmesi gereken verilere dil kolonu eklenecek. Yine OperationContext içerisindeki değere göre where koşulu eklenecektir.
Arayüz içinde aklımdaki plan şu şekilde.
var UILanguage =
{
TR:[{MessageCode: '1001',
Message: 'Ürün Adı',
Description: 'Ürün adınızı bu alana girmelisiniz.'}],
EN:[{MessageCode: '1001',
Message: 'Product Name,
Description: 'You must enter your product in this area.'}]
}
<label data-language-messagecode="1001" />
global.js içeriği....
$(document).ready(function(){
$('label [data-language-messagecode]').each(function(i,item){
var messageCode = $(item).data('data-language-messagecode');
if( messageCode != null && messageCode != undifined){
if($('#ddlLanguage').val() == "TR"){
$.each(UILanguage.TR,function(i2,lang){
if(messageCode == lang.MessageCode)
{
$(item).text(UILanguage.Message);
};
});
};
};
});
});
bu şekilde bir işlemden sonra artık ekranda yer alan label vs. yerleri data-language-messagecode="1001" gibi güncelleyip bırakmak yeterli olacaktır. Sonrasında dil dosyaları eklemek tüm uygulamayı o dile adapte etmek için yeterli olacaktır diye düşünüyorum.
Teşekkürler.
Tufan.