【问题标题】:C# Class library - resource files not loadingC# 类库 - 资源文件未加载
【发布时间】:2019-02-20 05:04:30
【问题描述】:

我正在努力将本地化添加到我的类库中。目前我有两个资源文件:Strings.resx 和 Strings.es.resx。

这两个文件都在“内部”访问修饰符下,尽管我尝试在没有任何帮助的情况下将这两个文件都设置为“公共”。

我的问题是西班牙语资源文件 (Strings.es.resx) 没有被加载;我为其他语言添加的任何更多资源文件都会重复这个问题。 Strings.resx 工作正常,因为它是默认资源文件。

此代码用于抓取已加载的字符串资源文件;目前只加载默认文件。西班牙语未出现:

private static void LoadLanguages()
    {
        var cultures = CultureInfo.GetCultures(CultureTypes.AllCultures);

        foreach (var culture in cultures)
        {
            try
            {
                var rs = Properties.Lang.Strings.ResourceManager.GetResourceSet(culture, true, false);
                if (rs != null) SupportedLanguages.Add(culture.Name.ToLower(), culture.NativeName);
            }
            catch (Exception)
            {
                // ignored
            }
        }

        Log.Info("Loaded languages: " + SupportedLanguages.Count); //OUT: 1
    }

不过我发现了。在我的构建输出中,有一个文件夹“es”,该文件夹中有一个名为Project.resources.dll 的DLL。如果我将该 DLL 复制到构建输出的根文件夹,则会加载资源。

解决这个问题的方法是从文件夹中加载那些资源文件。由于某种原因,这没有发生。有一个已知的解决方案吗?谢谢。

【问题讨论】:

    标签: c# localization resources assemblies resx


    【解决方案1】:

    它解决了当前文化的线程。可以在 Microsoft https://docs.microsoft.com/en-us/dotnet/framework/resources/creating-satellite-assemblies-for-desktop-apps 的文档中看到一个示例(最后在第 13 步检查代码)

    在文档中的示例下方。本地化资源为StringLibrary

    using System;
    using System.Globalization;
    using System.Threading;
    
    public class Example
    {
       public static void Main()
       {
          string[] cultureNames = { "en-GB", "en-US", "fr-FR", "ru-RU" };
          Random rnd = new Random();
          string cultureName = cultureNames[rnd.Next(0, cultureNames.Length)]; 
          Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultureName);
          Console.WriteLine("The current UI culture is {0}", 
                            Thread.CurrentThread.CurrentUICulture.Name);
          StringLibrary strLib = new StringLibrary();
          string greeting = strLib.GetGreeting();
          Console.WriteLine(greeting);
       }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      • 2017-10-09
      • 1970-01-01
      相关资源
      最近更新 更多