我在.Net-Core中有一个微服务,它必须处理resx文件中的一些资源,并根据我通过调用API提供的区域性返回它们,因此我不会使用当前线程的区域性,但当我调用方法GetString(键,区域性)时,它总是返回默认语言。我现在有两个resx文件: resource.resx和resource.it-IT.resx如果我用it-IT区域性字符串调用api,我总是在resource.resx文件而不是resource.it-IT.resx文件中得到翻译结果。
resx文件位于另一个名为Localization的项目中
我有一个泛型方法,其中我传递了我必须本地化的枚举和存储本地化的文件的类型,然后我组成资源的键并调用GetString方法。我还尝试使用以下命令更改当前线程的区域性
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(cultureName);public static string GetDisplayName(this Enum e, Type resourceType, string cultureName)
{
var rm = new ResourceManager(resourceType);
var resourceDisplayName = rm.GetString(e.GetType().Name + "_" + e, CultureInfo.CreateSpecificCulture(cultureName));
return string.IsNullOrWhiteSpace(resourceDisplayName) ? string.Format("[[{0}]]", e) : resourceDisplayName;
}我已经做了更多的研究,在资源管理器中,当我检查它时,我有3个resourceSet
resource
resource.it
resource.it-IT如果我检查这3个资源集,我所有的资源都是英文的,资源管理器似乎不会加载resx意大利语文件
发布于 2019-06-17 18:48:31
读完这篇文章后:NetCore Bug我设法解决了我的问题,首先我将我的方法重构为:
public static string GetDisplayName(this Enum e, Type resourceType, string cultureName)
{
var rm = new ResourceManager(resourceType.FullName, resourceType.Assembly);
var key = $"{e.GetType().Name}_{e}";
var culture = CultureInfo.CreateSpecificCulture(cultureName);
var resourceDisplayName = rm.GetString(key, culture);
return string.IsNullOrWhiteSpace(resourceDisplayName) ? string.Format("[[{0}]]", e) : resourceDisplayName;
}然后,我从API项目中删除了对Localization项目的引用,只将该引用保留在另一个项目中,然后从API项目中引用该项目
发布于 2019-06-17 17:36:34
关于您的resource.resx和resource.it-IT.resx文件,请检查您的密钥在这两个文件中是否相同。如果您尝试访问的密钥不可用,代码将自动重定向到默认文件(resource.resx)。
此链接将帮助完成Localization and Globalization的实施
https://stackoverflow.com/questions/56628371
复制相似问题