【问题标题】:Localize an ASP.NET Core MVC app本地化 ASP.NET Core MVC 应用程序
【发布时间】:2023-08-20 10:53:01
【问题描述】:

我正在努力让我的应用正确本地化字符串。感觉我已经搜索了网络的每个角落,但没有找到我期望的有用的东西。

我使用RouteDataRequestCultureProvider,我要解决的第一个问题是能够使用文化的“速记版本”,例如sv 而不是 sv-SE,并且在创建区域性时 sv 被视为 sv-SE。这不会自动发生。

其次是让应用程序显示本地化字符串。这是我配置本地化的方式

public static IServiceCollection ConfigureLocalization(this IServiceCollection services)
{
    services.AddLocalization(options =>
    {
        options.ResourcesPath = "Resources";
    });
    services.Configure<RequestLocalizationOptions>(options =>
    {
        var supportedCultures = new[]
            {
            new System.Globalization.CultureInfo("sv-SE"),
            new System.Globalization.CultureInfo("en-US")                        
            };                
        options.DefaultRequestCulture = new RequestCulture(culture: "sv-SE", uiCulture: "sv-SE");
        options.SupportedCultures = supportedCultures;
        options.SupportedUICultures = supportedCultures;                
        options.RequestCultureProviders = new[]
        {
            new RouteDataRequestCultureProvider
            {
                Options = options
            }
        };
    });
    return services;
}

然后在Configure 我做app.UseRequestLocalizationOptions(); 注入之前配置的选项。

在文件夹Resources 中,我创建了资源文件Resource.resxResource.sv.resx

在我的视图文件中,我尝试了注入IStringLocalizer(由于没有注册默认实现而失败)和IStringLocalizer&lt;My.Namespace.Resources.Resource&gt;,但没有一个选项有效。我也尝试过老式的方式@My.Namespace.Resources.Resource.StringToLocalize

不可能有共享资源文件吗?不想诉诸Resource\Views\ViewA.resxResource\Controllers\AController.resx

谢谢

【问题讨论】:

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


【解决方案1】:

所以我得到了这个工作。在我的Resource 文件夹中,我有我的Lang.resx 文件和public 访问修饰符

我找到了this并添加了一个属于项目根命名空间的类Lang(命名为文件LangDummy不与资源文件冲突)。

然后在我看来导入文件@inject Microsoft.Extensions.Localization.IStringLocalizer&lt;My.Namespace.Lang&gt; StringLocalizer 并使用它@StringLocalizer["PropertyInResxFile"]。理想情况下,我想使用生成的静态属性来实现类型安全和更轻松的重构,并且在任何地方使用 nameof 都会感觉臃肿。

这也适用于通过数据注释属性进行本地化这里我使用ResourceType = typeof(My.Namespace.Resources.Lang),即 resx 文件的类

【讨论】: