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(核心 1.0)本地化/多语言 Web 应用程序

我已经做了一个示例,演示了 ASP.NET 5(ASP.NET Core 1.0(中本地化的各个方面。您可以下载它并 https://github.com/feradz/ASPNetCoreLocalization/wiki 查看。下载并试用。

回答您的问题:

  1. 您不需要任何负责管理本地化的控制器类。
  2. 设置默认语言有不同的方法。示例项目演示如何使用 cookie
  3. 我不明白这个问题。
  4. 示例项目具有语言选择器。

该示例演示了以下功能:

  1. 使用IStringLocalizer进行本地化
  2. 使用IHtmlLocalizer进行本地化
  3. 使用IViewLocalizer进行本地化
  4. 使用共享资源文件进行本地化
  5. 使用每个类控制器资源文件进行本地化
  6. 视图模型错误消息的本地化
  7. 使用先前 ASP.NET Core 1.0 资源本地化模型属性的 Display 属性
  8. 使用EnumHelper对枚举和枚举元素进行本地化
  9. 视图的本地化,例如 View.cshtml View.es-ES.cshtml
  10. 使用 cookie 切换区域性并选择输入CookieRequestCultureProvider的示例
  1. 在 ConfigureServices(...( 中输入命令

    服务业。添加本地化(选项 => 选项。资源路径 = "资源"(;

  2. 命令

    非常重要

    .app。使用请求本地化(...(

    必须在方法 Configure(...( 中的所有其他命令之前。否则,本地化就行不通。

也许这会对你有所帮助。