pio*_*lut 6 c# asp.net-core .net-core-3.1 asp.net-core-3.1
我正在使用 .NET core 3.1 开发后端应用程序。我从旧项目(.NET core 2.1)中移出了CommonResource ,该项目运行良好。我想获取指定文化中密钥的值。公共资源的实现:
public class CommonResource : ICommonResource
{
private readonly IStringLocalizer<SharedResource> _localizer;
public CommonResource(
IStringLocalizer<SharedResource> localizer)
{
_localizer = localizer;
}
#region ICommonResource Members
#region General
public string AppName(
string language)
=> GetString(language, nameof(AppName));
#endregion
#endregion
/// <summary>
/// Dispose of class and parent classes
/// </summary>
public void Dispose()
=> GC.SuppressFinalize(this);
private string GetString(
string language,
string name)
{
var currentCulture = CultureInfo.CurrentCulture;
CultureInfo.CurrentCulture = new CultureInfo(language);
var value = _localizer[name];
CultureInfo.CurrentCulture = currentCulture;
// TEST - check all string
//var result = _localizer.GetAllStrings();
return value;
}
}
Run Code Online (Sandbox Code Playgroud)
LocalizationExtensions 与AddDefaultLocalization方法:
public static class LocalizationExtensions
{
private const bool AcceptLanguageHeaderRequestCultureProvider = false;
private static readonly CultureInfo CultureInfoEnUs = new CultureInfo("en-US");
private static readonly CultureInfo CultureInfoPlPl = new CultureInfo("pl-PL");
private static readonly CultureInfo DefaultRequestCulture = CultureInfoEnUs;
private static readonly CultureInfo[] SupportedCultures =
{
CultureInfoEnUs,
CultureInfoPlPl
};
public static void AddDefaultLocalization(
this IServiceCollection serviceCollection)
{
serviceCollection.AddLocalization();
serviceCollection.Configure<RequestLocalizationOptions>(
options =>
{
options.DefaultRequestCulture = new RequestCulture(DefaultRequestCulture, DefaultRequestCulture);
options.SupportedCultures = SupportedCultures;
if (!AcceptLanguageHeaderRequestCultureProvider)
{
///sf/ask/3113653161/
options.RequestCultureProviders = new List<IRequestCultureProvider>
{
new QueryStringRequestCultureProvider(),
new CookieRequestCultureProvider()
};
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
我的 SharedResources 位于资源路径中(构建操作:嵌入式资源和访问修饰符:无代码生成)。

不幸的是调用_localizer.GetAllStrings(); 生成异常“当前文化不存在清单”。
我尝试了很多解决方案,例如将 SharedResources 移动到根路径或安装额外的 nuget 包,但没有任何帮助。
您知道为什么在新版本.net core 中存在此问题吗?感谢帮助!
| 归档时间: |
|
| 查看次数: |
624 次 |
| 最近记录: |