问题
Abp vNext框架,后台服务使用IStringLocalizer获得翻译时,与设置的“Abp.Localization.DefaultLanguage”不一致,一直是按服务器的本地语言来的。
分析
Abp中重写了IStringLocalizer,Abp源码简化如下。
public class AbpDictionaryBasedStringLocalizer:IAbpStringLocalizer
{
...
public LocalizedString this[string name] => GetLocalizedString(name,CultureInfo.CurrentUICulture.Name);
...
}
这个索引器实现是用的CultureInfo.CurrentUICulture,所以就是服务器本地语言了。
解决
使用前重新给CultureInfo.CurrentUICulture赋值就可以解决,但我们想全局性修改,就给CultureInfo.DefaultThreadCurrentUICulture赋值。
var defaultLanguage=...//get setting of 'Abp.Localization.DefaultLanguage'
CultureInfo.DefaultThreadCurrentCulture=CultureInfo.GetCultureInfo(defaultLanguage);
CultureInfo.DefaultThreadCurrentUICulture=CultureInfo.GetCultureInfo(defaultLanguage);