当命名空间不同时,ASP.NET Core MVC 本地化不起作用

问题描述 投票:0回答:1

我现在开始使用 ASP.NET - 抱歉,如果我问了一个愚蠢的问题。

在我的公司,我们为项目使用默认命名空间,并且本地化无法正常工作。我的字符串文件资源位于我的 Resources/Strings 文件夹中。

我一直在使用调试工具来检查为什么我的项目没有找到我的字符串。我已经看到程序正在这个地址内部搜索:

Resources.Strings.{my default namespace}.Controllers.HomeController

因此,它在我的默认命名空间前面添加了

Resources.Strings

这是我的

Program.cs
的一部分:

// Add services to the container.
builder.Services.AddControllersWithViews().AddViewLocalization(Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat.Suffix);
builder.Services.AddHttpContextAccessor();

// Add services to localization
builder.Services.AddLocalization(options =>
{
    options.ResourcesPath = "Resources/Strings";
});

builder.Services.Configure<RequestLocalizationOptions>(options => 
{
    var suportedCultures = new[] 
    {
        new CultureInfo("en-US"),
        new CultureInfo("de-DE"),
        new CultureInfo("pt-BR")
    };

    options.DefaultRequestCulture = new RequestCulture("en-US");
    options.SupportedUICultures = suportedCultures;
});

var app = builder.Build();

app.UseRequestLocalization();

这是我的

HomeController
的一部分:

public class HomeController : Controller
{
    private readonly IStringLocalizer _localizer;
    private readonly IHttpContextAccessor _httpContextAccessor;
    private readonly ILogger<HomeController> _logger;

    public HomeController(ILogger<HomeController> logger, IHttpContextAccessor httpContextAccessor, IStringLocalizer<HomeController> localizer)
    {
        _logger = logger;
        _httpContextAccessor = httpContextAccessor;
        _localizer = localizer;
    }

    public IActionResult Index()
    {
        var localizedString = _localizer["WelcomeMessage"]; 
        return View();
    }

    // {...}
}

我使用在 Visual Studio 中创建新项目时自动生成的默认命名空间创建了一个新项目,它与相同的代码完美配合,仅使用标准命名空间。您知道可能出现什么问题吗?或者当我们有不同的命名空间时我该如何处理本地化问题?

谢谢!

我尝试在这里添加完整的命名空间,但也没有成功。

builder.Services.AddLocalization(options =>
{
    options.ResourcesPath = "{Default Namespace}.Resources/Strings";
});

localization namespaces asp.net-core-localization
1个回答
0
投票

我可以在这里找到问题的解决方案:https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.localization.rootnamespaceattribute.rootnamespace?view=dotnet-plat-ext-8.0

我创建了一个 AssemblyInfo.cs 文件,并添加了以下代码:

使用System.Reflection; 使用 Microsoft.Extensions.Localization;

[程序集:ResourceLocation("资源文件夹名称")] [程序集:RootNamespace("应用程序根命名空间")]

现在正在寻找正确的道路。

© www.soinside.com 2019 - 2024. All rights reserved.