在我的.net核心Web应用程序中,我想创建一个返回给定.resx文件中所有翻译的Endpoint。
我使用StringLocalizer服务从.resx文件中获取字符串。当我尝试使用_localizer[HelloString];
获取单个字符串时,将返回正确的翻译,以便进行注入/翻译。
当我尝试使用
_localizer.GetAllStrings();
时,我总是会收到一条消息“当前文化中没有任何清单。”
资源文件名为 Controllers.TranslationController.resx,Controllers.TranslationController.de.resx,...
public class TranslationsController : Controller
{
private readonly IStringLocalizer<TranslationsController> _localizer;
public TranslationsController(IStringLocalizer<TranslationsController> localizer)
{
_localizer = localizer;
}
[HttpGet]
public String Get(string lang = "")
{
var resourceSet = _localizer.GetAllStrings();
return String.Empty;
}
}
该方法尚未完成,请忽略return String.Empty;
我在Startup.cs中注入并配置StringLocalizer,如下所示:
public void ConfigureServices(IServiceCollection services)
{
services.AddLocalization(opts => { opts.ResourcesPath = "Resources"; });
// Add framework services.
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
var supportedCultures = new[]
{
new CultureInfo("en-US"),
new CultureInfo("de-DE"),
new CultureInfo("de"),
new CultureInfo("en-GB"),
new CultureInfo("en"),
new CultureInfo("fr-FR"),
new CultureInfo("fr"),
};
app.UseRequestLocalization(new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("de-DE"),
SupportedCultures = supportedCultures,
SupportedUICultures = supportedCultures
});
我尝试使用_localizer.WithCulture(new CultureInfo(lang)).GetAllStrings()
重命名文件或选择特定的文化,但似乎没有任何效果。