ASP.NET 5(核心 1.0)本地化/多语言 Web 应用程序
本文关键字:本地化 语言 应用程序 Web NET 核心 ASP | 更新日期: 2023-09-27 18:34:47
我开发了我的第一个具有以下特征的 ASP.NET 5 Web 应用程序:
- ASP.NET 5(核心 1.0(
- MVC 6
- EF 7
我正在尝试将其翻译成多语言,并且用户可以使用选择器更改语言,但我无法实现。
我以前开发过 ASP.NET 2.0/3.5 项目,我记得文本是资源 (.resx( 文件或 XML 文件。但是现在,由于新ASP最近发生了许多变化,我认为本地化也发生了变化。
我发现的信息很少,而且我发现的对我帮助不够。
在官方支持网站上还没有解释这个主题(docs.asp.net(。
我在这个网站上找到了一个 GitHub 代码示例和有趣的解释。
但我无法将概念联系起来。我将解释我所做的步骤。
我已经在我的 ASP.NET 项目中创建了一个"资源"文件夹。在这个文件夹中,我创建了一些(.resx(文件。此文件的名称遵循以下结构:
- Controllers.NameOfController.ca-ES.resx
- Views.NameOfView.ca-ES.resx
- Models.NameOfModel.ca-ES.resx
在我的 Startup.cs 文件中,我定义了以下代码来设置哪个文件夹是文本资源:
public void ConfigureServices(IServiceCollection services)
{
...
services
.AddMvc()
.AddViewLocalization(options => options.ResourcesPath = "Resources")
.AddDataAnnotationsLocalization();
...
}
在同一文件中的配置方法中,我定义了:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
//template: "{culture?}/{controller}/{action}/{id?}", //we define the structure of the routes
//defaults: new { culture = "ca", controller = "Home", action = "Index" }); //we define the default values
});
并且在同一功能中,支持的区域性:
//To set the localization configuration
List<CultureInfo> supportedCultures = new List<CultureInfo>();
supportedCultures.Add(new CultureInfo("ca-ES"));
supportedCultures.Add(new CultureInfo("es-ES"));
List<CultureInfo> supportedUICultures = new List<CultureInfo>();
supportedUICultures.Add(new CultureInfo("ca-ES"));
supportedUICultures.Add(new CultureInfo("es-ES"));
RequestLocalizationOptions requestLocalizationOptions = new RequestLocalizationOptions();
requestLocalizationOptions.SupportedCultures = supportedCultures;
requestLocalizationOptions.SupportedUICultures = supportedUICultures;
RequestCulture defaultRequestCulture = new RequestCulture("ca-ES");
app.UseRequestLocalization(requestLocalizationOptions, defaultRequestCulture);
现在是我迷路的地步。
- 我已经读过,我必须开发一个控制器类负责管理本地化。我说的对?
- 我已经阅读过,存在多种方法来定义我必须显示的语言:从查询字符串,从cookie,从接受语言HTTP中标头,来自类,来自线程区域性。我不知道我是否必须考虑所有这些选项,或者一个就足够了。
- .resx 是否活跃?它们是好的解决方案吗?我可以在ASP :NET 5中使用它吗?
- 我怎样才能做一个选择器来交换语言?
编辑:
我再次检查了文档,我在评论中看到里克安德森一直在写一个条目。我还没有平静地阅读它,但如果有人对这个话题感兴趣,我会与您分享。
我已经做了一个示例,演示了 ASP.NET 5(ASP.NET Core 1.0(中本地化的各个方面。您可以下载它并 https://github.com/feradz/ASPNetCoreLocalization/wiki 查看。下载并试用。
回答您的问题:
- 您不需要任何负责管理本地化的控制器类。
- 设置默认语言有不同的方法。示例项目演示如何使用 cookie
- 我不明白这个问题。
- 示例项目具有语言选择器。
该示例演示了以下功能:
- 使用
IStringLocalizer
进行本地化 - 使用
IHtmlLocalizer
进行本地化 - 使用
IViewLocalizer
进行本地化 - 使用共享资源文件进行本地化
- 使用每个类控制器资源文件进行本地化
- 视图模型错误消息的本地化
- 使用先前 ASP.NET Core 1.0 资源本地化模型属性的
Display
属性 - 使用
EnumHelper
对枚举和枚举元素进行本地化 - 视图的本地化,例如
View.cshtml
View.es-ES.cshtml
- 使用 cookie 切换区域性并选择输入
CookieRequestCultureProvider
的示例
-
在 ConfigureServices(...( 中输入命令
服务业。添加本地化(选项 => 选项。资源路径 = "资源"(;
-
命令
非常重要.app。使用请求本地化(...(
必须在方法 Configure(...( 中的所有其他命令之前。否则,本地化就行不通。
也许这会对你有所帮助。