我现在开始使用 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";
});
我可以在这里找到问题的解决方案: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("应用程序根命名空间")]
现在正在寻找正确的道路。