GetString 始终返回默认语言资源



我在 中有一个微服务。Net-Core必须处理resx文件中的一些资源,并根据我通过调用API提供的区域性返回它们,因此我不会使用当前线程的区域性,但是当我调用方法GetString(key,culture)时,它总是返回默认语言。 我目前有 2 个 resx 文件:resource.resx 和 resource.it-IT.resx 如果我使用 it-IT 文化字符串调用 api,我总是在 resource.resx 文件中而不是在 resource.it-IT.resx 文件中获取翻译

resx文件在另一个名为本地化的项目

我有一个通用方法,我在其中传递我必须本地化的枚举和存储本地化的文件类型,然后我编写资源的键并调用 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 个资源集

resource
resource.it
resource.it-IT

如果我检查这 3 个资源集中,我的所有资源总是英文的,似乎资源管理器没有加载 resx 意大利语文件

关于您的resource.resxresource.it-IT.resx文件,请检查您的密钥在两个文件中是否相同。如果您尝试访问的密钥不可用,代码会自动重定向到默认文件 (resource.resx)。

此链接将有助于完成本地化和全球化的实施

阅读本文后: 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 项目中删除了对本地化项目的引用,只将该引用保留在另一个项目中,然后从 API 项目引用

相关内容

  • 没有找到相关文章