Merhaba,
Aşağıdaki gibi bir class ınız var ve sitenin mevcut dil bilgisine göre hata mesajlarını veya client a gösterilecek ismini değiştirmesini istiyorsunuz.

kaynak dosyalarınızı da tr,fr,en olacak şekilde çoğalttığımızı varsayıyorum.

örneğin fr kaynak dosyamızda, datanotation içinde kullandığımız kısaltmaların bu şekilde karşılıklarını yazdığımızı varsayıyorum. Benzer şekilde tr ve en de de key value değerlerini girdiğimizi…

public class SharedViewLocalizer : ISharedViewLocalizer
{
private readonly IStringLocalizer _localizer;
public SharedViewLocalizer(IStringLocalizerFactory factory)
{
var type = typeof(SharedResource);
var assemblyName = new AssemblyName(type.GetTypeInfo().Assembly.FullName);
_localizer = factory.Create("SharedResource", assemblyName.Name);
}
public LocalizedString this[string key] => _localizer[key];
public LocalizedString GetLocalizedString(string key)
{
return _localizer[key];
}
}
public interface ISharedViewLocalizer
{
public LocalizedString this[string key]
{
get;
}
LocalizedString GetLocalizedString(string key);
}
public class SharedResource
{
}
ISharedViewLocalizer interface i üzerinden hem controller hem de razor lar üzerinde istediğimiz key leri dillere göre karşılıklarını getirtebiliriz.
razor da interface i inject edip aşağıdaki gibi,

controller’da da dependency inject ettiğimiz interface ile aşağıdaki gibi çağırabiliriz karşılıklarını.

peki yazının konusu olan datanotation üzerinden bu çıkarımları nasıl yaparız konusuna gelirsek ise;
kaynak dosyalarımızda farklı bir isimlendirme ile kaydettiğimiz key leri direkt olarak çağırıp, dile göre karşılıklarını getirmesi için paylaştığımız ilk görseldeki gibi dn.City ile display name ini, dn.Error.City ile de boş bırakıldığında gösterilmesi gereken mesajın key karşılığını verdiğimizi varsayıyorum.

core 5 te; localization ayarını aşağıdaki gibi yapıyoruz. Resources klasörü altındaki kaynak dosyalarımı okumasını ve provider olarak da datanotation da kullandığım parametrelerin karşılıkları varsa getirmesini yoksa parametre olarak ne gönderiyorsam onu okuması gerektiğini belirtiyorum.

core 6 da ise aşağıdaki gibi yapıyoruz.

yapılandırma sonrası test için view tarafını da şu şekilde değiştiriyoruz, asp-validation-for City diyerek, Class ımızın City property sine ait validation ı kontrol etmesini istemiş oluruz.

türkçe için testimizi yaptığımızda, label alanında City nin türkçe karşılığını, uyarı kısmında ise türkçe uyarıyı göstermiş oluyoruz.

fransızca için testi yaptığımızda da, label alanında ve uyarı karşılığında fransızca kaynak dosyasından paylaştığım görüntüdeki karşılıklarının geldiğini görüyoruz.

faydası olması dileğiyle…