admin管理员组文章数量:1130349
.NetCore MVC全球化,实现中英文翻译
参照:[@ASP.NET Core 全球化和本地化](https://docs.microsoft/zh-cn/aspnet/core/fundamentals/localization?view=aspnetcore-2.1)
**1、Startup.cs中注册服务并制定Resources文件的位置**
```
```csharp
// 在Startup.cs的ConfigureServices方法下添加一下内容
services.AddLocalization(options => options.ResourcesPath = "Resources");//资源文件路径
services.AddMvc()
.AddDataAnnotationsLocalization(options =>
{
options.DataAnnotationLocalizerProvider = (type, factory) =>
factory.Create(typeof(SharedResource));
}).AddMvcLocalization()
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix);
services.AddSingleton<IStringLocalizer>((sp) =>
{
var sharedLocalizer = sp.GetRequiredService<IStringLocalizer<SharedResource>>();
return sharedLocalizer;
});
```
//在Configure方法下加入以下
var supportedCultures = new[] { "zh-Hans", "en-US" };
app.UseRequestLocalization(cultureOptions =>
{
cultureOptions.AddSupportedCultures(supportedCultures)
.AddSupportedUICultures(supportedCultures)
.SetDefaultCulture(supportedCultures[0]);
cultureOptions.FallBackToParentCultures = true;
});
```
在程序中添加一个文件夹并命名Resources 并在Resources文件夹下新建一个冗余的SharedResource.cs类,该类用于公共资源文件,不再使用各自的资源文件。
然后注意坑来了,坑来了,坑来了
错误示例:直接在Resources文件夹下新建资源文件并命名SharedResource.zh-Hans.resx和SharedResource.en-US.resx ,结果三个文件自动整合成一个文件夹了在这里插入代码片 如下图:
调用:在_viewimports页面添加
@using Microsoft.AspNetCore.Mvc.Localization
@inject Microsoft.Extensions.Localization.IStringLocalizer Localizer
在.cshtml调用:@Localizer["projectName"]/// projectName是资源文件中的名称
结果运行后直接显示出来的是projectName,而不是资源文件中的值
正确解决方法:
在Resources文件夹下新建资源文件并命名Resources.SharedResource.zh-Hans.resx和Resources.SharedResource.en-US.resx ,这时候这三个文件就在Resources文件夹下同一级了
调用:在_viewimports页面添加
@using Microsoft.AspNetCore.Mvc.Localization
@inject Microsoft.Extensions.Localization.IStringLocalizer Localizer
在.cshtml调用:@Localizer["projectName"]/// projectName是资源文件中的名称
在control调用
public class CommonController : Controller
{
private readonly IStringLocalizer<CommonController> _localizer;
public CommonController(IStringLocalizer<CommonController> localizer)
{
_localizer = localizer;
}
[HttpGet]
public string Get()
{
return _localizer["CommonTitle"];
}
}
.NetCore MVC全球化,实现中英文翻译
参照:[@ASP.NET Core 全球化和本地化](https://docs.microsoft/zh-cn/aspnet/core/fundamentals/localization?view=aspnetcore-2.1)
**1、Startup.cs中注册服务并制定Resources文件的位置**
```
```csharp
// 在Startup.cs的ConfigureServices方法下添加一下内容
services.AddLocalization(options => options.ResourcesPath = "Resources");//资源文件路径
services.AddMvc()
.AddDataAnnotationsLocalization(options =>
{
options.DataAnnotationLocalizerProvider = (type, factory) =>
factory.Create(typeof(SharedResource));
}).AddMvcLocalization()
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix);
services.AddSingleton<IStringLocalizer>((sp) =>
{
var sharedLocalizer = sp.GetRequiredService<IStringLocalizer<SharedResource>>();
return sharedLocalizer;
});
```
//在Configure方法下加入以下
var supportedCultures = new[] { "zh-Hans", "en-US" };
app.UseRequestLocalization(cultureOptions =>
{
cultureOptions.AddSupportedCultures(supportedCultures)
.AddSupportedUICultures(supportedCultures)
.SetDefaultCulture(supportedCultures[0]);
cultureOptions.FallBackToParentCultures = true;
});
```
在程序中添加一个文件夹并命名Resources 并在Resources文件夹下新建一个冗余的SharedResource.cs类,该类用于公共资源文件,不再使用各自的资源文件。
然后注意坑来了,坑来了,坑来了
错误示例:直接在Resources文件夹下新建资源文件并命名SharedResource.zh-Hans.resx和SharedResource.en-US.resx ,结果三个文件自动整合成一个文件夹了在这里插入代码片 如下图:
调用:在_viewimports页面添加
@using Microsoft.AspNetCore.Mvc.Localization
@inject Microsoft.Extensions.Localization.IStringLocalizer Localizer
在.cshtml调用:@Localizer["projectName"]/// projectName是资源文件中的名称
结果运行后直接显示出来的是projectName,而不是资源文件中的值
正确解决方法:
在Resources文件夹下新建资源文件并命名Resources.SharedResource.zh-Hans.resx和Resources.SharedResource.en-US.resx ,这时候这三个文件就在Resources文件夹下同一级了
调用:在_viewimports页面添加
@using Microsoft.AspNetCore.Mvc.Localization
@inject Microsoft.Extensions.Localization.IStringLocalizer Localizer
在.cshtml调用:@Localizer["projectName"]/// projectName是资源文件中的名称
在control调用
public class CommonController : Controller
{
private readonly IStringLocalizer<CommonController> _localizer;
public CommonController(IStringLocalizer<CommonController> localizer)
{
_localizer = localizer;
}
[HttpGet]
public string Get()
{
return _localizer["CommonTitle"];
}
}
版权声明:本文标题:.NetCore MVC国球化多语言,实现中英文翻译 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://it.en369.cn/jiaocheng/1764014801a2979525.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论