Nat*_*ini 2 c# internationalization .net-core
我试图IStringLocalizer在运行时动态设置语言。似乎可以做到这一点的唯一可用方法是IStringLocalizer.WithCulture. 但是,尝试使用它会导致弃用警告。
public IStringLocalizer GetLocalizer(string locale) {
this.localizerFactory.Create(typeof(CommonResources)).WithCulture(new CultureInfo(locale));
}
Run Code Online (Sandbox Code Playgroud)
我没有使用 ASP,而是在IHostedService处理来自另一个来源(各种网络聊天 API)的用户交互中执行此操作。此服务需要符合管理员为聊天服务器或频道设置的语言(存储在数据库中)。
设置 . 语言的正确的当前方法是IStringLocalizer什么?我应该完全使用另一个类吗?
小智 10
这应该这样做。CultureInfo.CurrentUICulture在获取字符串值之前,您需要设置为您想要的文化。
private string GetStringValue(string stringName, string culture)
{
var specifiedCulture = new CultureInfo(culture);
CultureInfo.CurrentCulture = specifiedCulture;
CultureInfo.CurrentUICulture = specifiedCulture;
var options = Options.Create(new LocalizationOptions { ResourcesPath = "Resources" });
var factory = new ResourceManagerStringLocalizerFactory(options, new LoggerFactory());
var localizer = new StringLocalizer<RecipeController>(factory);
return localizer[stringName];
}
Run Code Online (Sandbox Code Playgroud)
如果您有一个实例,则IStringLocalizer可以使用它而不是创建一个新实例。
Bos*_*eek -4
您可以编写自己的文化中间件,它可以根据用户设置文化,或者可以使用 Http 标头Accept-Language
app.UseRequestLocalization(roptions =>
{
IList<CultureInfo> supportedCultures = new List<CultureInfo>
{
new CultureInfo("en-US"),
new CultureInfo("fr"),
};
roptions.DefaultRequestCulture = new RequestCulture("en-US");
roptions.SupportedCultures = supportedCultures;
roptions.SupportedUICultures = supportedCultures;
roptions.RequestCultureProviders.Add(new YourCustomCultureProvider());
});
Run Code Online (Sandbox Code Playgroud)
示例中间件
public class YourCustomCultureProvider : RequestCultureProvider
{
public override Task<ProviderCultureResult> DetermineProviderCultureResult(HttpContext httpContext)
{
if (httpContext == null)
throw new ArgumentNullException(nameof(httpContext));
var culture = //Some Logic
if (string.IsNullOrEmpty(culture))
{
// No values specified for either so no match
return Task.FromResult((ProviderCultureResult)null);
}
var requestCulture = new ProviderCultureResult(culture);
return Task.FromResult(requestCulture);
}
}
Run Code Online (Sandbox Code Playgroud)
如果可以帮助您,请参阅此链接 - https://joonasw.net/view/aspnet-core-localization-deep-dive
| 归档时间: |
|
| 查看次数: |
2401 次 |
| 最近记录: |