2012-03-15 9 views
7

Sadece this question biraz genişletiyorum.Mvc3'te @ Html.LabelFor() 'dan gelen içerikler için yerelleştirme nasıl yapılır

MVC web uygulamasında benim App_LocalResources var (ayrı dll'de yok).

Modelim farklı montajda var. Model I'de 2 sınıfları Country ve City var:

public class Country: MyContainer 
{ 
    public City city {get;set;} 
} 

public class City 
{ 
    public CityName {get;set;} 
} 

public class MyContainer 
{ 
    public Cid {get;set;} 
} 

Yani benim eylem yönteminde oluşturup benim ViewModel olarak ülkenin bir nesne geçmektedir.

@Html.LabelFor(mdl=>mdl.City.CityName) 
@Html.LabelFor(mdl=>mdl.Cid) 

Yani bu iyi çalışıyor ve metin ile etiket İngilizce olarak oluşturulur:

Ve görünümde

Bunu kullanabilirim.

Bunu nasıl değiştiririm, böylece web dosyalarımdaki Kaynak dosyalarımdaki metni okur?

cevap

12

Özel bir ekran niteliğini yazabiliriz: o zaman

public class LocalizedDisplayNameAttribute : DisplayNameAttribute 
{ 
    public LocalizedDisplayNameAttribute(string key): base(FormatMessage(key)) 
    { 
    } 

    private static string FormatMessage(string key) 
    { 
     // TODO: fetch the corresponding string from your resource file 
     throw new NotImplementedException(); 
    } 
} 

ve:

public class City 
{ 
    [LocalizedDisplayName("cityname")] 
    public string CityName { get; set; } 
} 

Ayrıca following localization guide ödeme olabilir. Örnek niteliğinin tam olarak uygulanmasını sağlar.

+1

Cevabınız için teşekkürler Darin, bu kodu aldım. Ancak sorun şu ki, Ülkem, Şehir ve MyContainer sınıflarımın farklı projelerde (onun adı Location.Model). Kaynak dosyam da mvc3 web uygulama projemde. Location.Model bana otomasyonlu kod, cs dosyalarında coz yorumunda bulunuyor. " // Bu kod bir şablondan oluşturuldu." ve ayrıca bazı .tt dosyasına sahip. içinde. Bu yüzden lütfen değişiklikleri nerede ve nasıl yapacağımı anlamaya yardım edin. Kaynaklar projemizi ayırmam gerekiyor mu? Lütfen yardım edin .. – thinkmmk

+0

@thinkmmk, otomatik olarak oluşturulmuş modelleri kullanımınıza geçirmemelisiniz. Sanırım bu, bazı EF otomatikleştirilmiş alan modeli. Belirli bir görünüm için özel olarak tasarlanmış sınıf olan görünüm modellerini her zaman tanımlamanız gerekir. –

+0

Anladım, ama bu proje oldukça karmaşık ve geniş görünüyor. Öyleyse, yapılacak en az değişiklikle nasıl ilerlemem gerekiyor. Yeni bir sınıfın yeni bir nesnesini yaratmam ve bunu bir model olarak aktarmam gerekiyor mu? Fakat şey şu ki, bu bir çift sınıf oluşturacaktır. – thinkmmk

3

[Display(ResourceType = typeof(App_LocalResources), Name = "AgreeTandCs")]'u App_LocalResources kaynak sınıfının (.resx) adıdır ve Name, başvuru yapmak istediğiniz statik dizenin adıdır. LabelFor'unuzu görünümünüzde her zamanki gibi kullanın ve kaynağınızı otomatik olarak çeker.

Örneğimde, etiket, AgreeTandCs değişken adıyla depolanan dizeyi görüntüler ve bunu ingilizce olarak görüntülüyorsanız, sayfada "Bu Hüküm ve Koşulları kabul ediyorum" olarak gösterilir.

0

Ayrıca çeviriyi çeviri dizgisinin içinde {0}, {2} parametreleriyle de kullanabilirsiniz. O benim örneğim Localize Compare attribute

+0

Linkin içeriğini özetleyebilir misiniz? Teşekkürler. – rapvelopment

İlgili konular