1

我應該嘗試實現的是爲每個支持的語言在net-core上設置一個資源(resx)文件。我解釋一下這個問題。DataAnnotations本地化的單個資源文件

我有我的每一個實體的DataAnnotations,我需要本地化錯誤的情況下返回的消息。看來,通過淨芯所需的默認慣例是對我們每一個實體的不同的RESX文件。

此文件據此命名與文化indentifier和RESX擴展實體的命名空間。因此,如果我在命名空間Data.Entities內有一個名爲Customers的實體,我應該添加一個名爲Data.Entities.Customers.it.resx的文件,並將意大利語的所有翻譯放入其中。所以,如果我有一個屬性

StringLength(50, ErrorMessage="The {0} should not be longer than {1} characters") 
public string Name {get;set;} 

然後我添加適當的翻譯到Data.Entities.Customers.it.resx文件。

但是,如果我再這樣下去供應商我不得不編寫一個名爲Data.Entities.Suppliers.it.resx其他資源文件和另一entitity,我當然

StringLength(50, ErrorMessage="The {0} should not be longer than {1} characters") 
public string SupplierName {get;set;} 

現在我需要在Suppliers實體的適當文件中再次寫入相同的翻譯。這也適用於其他常見屬性,如[必需]。

所以我希望能有很好地解釋了我的問題,我的queston是:沒有指定我的所有實體驗證消息的單個資源文件,然後寫一個時間的消息共同文本的方法嗎?

回答

1

docs,你可以告訴框架使用共享資源爲您的數據註解的本地化:

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddMvc() 
     .AddDataAnnotationsLocalization(options => { 
      options.DataAnnotationLocalizerProvider = (type, factory) => 
       factory.Create(typeof(SharedResource)); 
     }); 
} 

在前述代碼,SharedResource是對應於RESX類在您的驗證消息被存儲。採用這種方法,DataAnnotations將只使用SharedResource,而不是每個類的資源。

+1

哎喲,我已閱讀,文檔的開頭(當我有其他問題),現在這種完全逃脫了我。讓我試試 – Steve

+0

就是這樣。謝謝。 – Steve