ASP.NET 5(Core 1.0)本地化/多语言Web应用程序

时间:2016-02-15 10:46:36

标签: c# asp.net asp.net-mvc localization asp.net-core-mvc

我开发了我的第一个具有以下特征的ASP.NET 5 Web应用程序:

  • ASP.NET 5(Core 1.0)
  • MVC 6
  • EF 7

我试图将其翻译为多语言,并且用户可以使用选择器更改语言,但我无法实现。

之前我开发过ASP.NET 2.0 / 3.5项目,我记得文本是资源(.resx)文件或XML文件。但是现在,由于最近在新ASP中发生了很多变化,我认为本地化也发生了变化。

我发现很少有关于它的信息,而且我发现,并没有给我足够的帮助。

在官方支持网站上还没有解释这个主题(docs.asp.net)。

我在GitHub code sample找到了一个this website和有趣的解释。

但我无法将概念联系起来。我将解释我已经完成的步骤。

我创建了一个"资源"文件夹,进入我的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();
       ...
   }

在同一个文件中,在Configure方法中,我定义了:

            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,来自Accept-Language HTTP header,来自DefaultRequestCulture属性 RequestLocalizationOptions类,来自线程文化。我不知道我是否必须考虑所有这些选项,或者一个就足够了。
  • .resx有效吗?它们是好的解决方案吗?我可以在ASP:NET 5中使用它吗?
  • 如何使用选择器来转换语言?

修改

我再次检查了documentation,我在评论中看到Rick Anderson一直在写entry。我还没有平静地阅读它,但如果有人对此话题感兴趣,我会与你分享。

1 个答案:

答案 0 :(得分:1)

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

回答你的问题:

  1. 您不需要任何负责管理本地化的控制器类。
  2. 有多种方法可以设置默认语言。示例项目演示了如何使用cookie
  3. 我不明白这个问题。
  4. 示例项目有一个语言选择器。
  5. 该示例演示了以下功能:

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