【问题标题】:GetString always return default language resourceGetString 总是返回默认语言资源
【发布时间】:2019-06-17 09:22:08
【问题描述】:

我在 .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 文件位于另一个名为 Localization 的项目中

我有一个通用方法,我传递了我必须本地化的 Enum 和存储本地化的文件的类型,然后我编写资源的键并调用 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 意大利文文件

【问题讨论】:

    标签: c# web-services .net-core localization resx


    【解决方案1】:

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

    此链接将帮助完成Localization and Globalization的实施

    【讨论】:

    • 是的,两个文件中都存在密钥
    【解决方案2】:

    读完后: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 项目中引用该引用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-13
      • 2020-02-28
      • 1970-01-01
      • 2014-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多