私はこれを実装しようとしています:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization?view = aspnetcore-2.1#dataannotations-localization
私のコード:
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
...
services.AddLocalization(options => options.ResourcesPath = "Resources");
services.AddMvc()
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
.AddDataAnnotationsLocalization(options =>
{
options.DataAnnotationLocalizerProvider = (type, factory) =>
factory.Create(typeof(SharedResource));
});
...
}
SharedResource.cs
namespace MyProj.Classes
{
/// <summary>
/// Dummy class to group shared resources
/// </summary>
public class SharedResource
{
}
}
FooViewModel.cs
public class FooViewModel
{
[Required(ErrorMessage = "EmailRequired")]
[EmailAddress(ErrorMessage = "EmailIsNotValid")]
[Display(Name = "Email")]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
}
FooPage.cshtml
...
<input asp-for="Email" class="form-control">
<div class="invalid-feedback" style="display:block;">
<span asp-validation-for="Email"></span>
</div>
...
そして、私はリソースファイルResources \ SharedResource.resxを持っています
EメールEメール
EmailIsNotValidEメールフィールドは有効なEメールアドレスではありません。
EmailRequiredEメールフィールドは必須です。
動作せず、コンパイル中または実行時にエラーは発生しません。翻訳の代わりに、「EmailIsNotValid」または「EmailRequired」と表示されます。何がうまくいかない可能性がありますか?
ASP.NET Core 2.0でのRequiredAttributeのローカリゼーションの重複しかし、マークされた回答はなく、コメントに隠されています。
ダミーのSharedResourceクラスは、Webアプリケーション(startup.cs)と同じ名前空間にある必要があります。私の場合、「。classes」を削除しました。ドキュメントは不明確でした。
更新:私のダミークラスの場合、ドキュメントと同じファイル名ルールが適用されます:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization? view = aspnetcore-2.1#resource-file- naming
リソースには、クラスの完全な型名からアセンブリ名を引いた名前が付けられます。たとえば、LocalizationWebsite.Web.StartupクラスのメインアセンブリがLocalizationWebsite.Web.dllであるプロジェクトのフランス語のリソースは、Startup.fr.resxという名前になります。クラスLocalizationWebsite.Web.Controllers.HomeControllerのリソースは、Controllers.HomeController.fr.resxという名前になります。ターゲットクラスの名前空間がアセンブリ名と同じでない場合は、完全な型名が必要になります。たとえば、サンプルプロジェクトでは、ExtraNamespace.Toolsタイプのリソースの名前はExtraNamespace.Tools.fr.resxになります。
別の回避策は、リソースファイルに「Classes.SharedResource.resx」という名前を付けるか、Resources \ Classesフォルダーに配置することです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加