.Net 资源文件在单独的语言文件夹中

.Net resource files in separate language folders

是否可以将每种语言的资源文件放在单独的文件夹中,如下所示?我希望我所有的英语文件都在“en”文件夹中,而我所有的西班牙语文件都在“es”文件夹中。我尝试将资源与主资源文件夹(无子文件夹)中的两个文件一起使用,并且它工作正常。但是,当我将文件分别放在图像中的“en”和“es”文件夹中时,即使我的浏览器设置为显示西班牙语,我也总是得到英文文本。

我已经包含了每个资源文件的文件属性以及我用来检索值的代码

var value = Language.Resources.ResourceManager.GetString(resourceName.Trim());

自动生成的 Resources.Designer.cs 文件包含 ResourceManager 属性 的以下代码。第一个参数“ClientInterface.Resources.en.Resources”是它总是给我英语的原因吗?

        /// <summary>
    ///   Returns the cached ResourceManager instance used by this class.
    /// </summary>
    [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
    internal static global::System.Resources.ResourceManager ResourceManager {
        get {
            if (object.ReferenceEquals(resourceMan, null)) {
                global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ClientInterface.Resources.en.Resources", typeof(Resources).Assembly);
                resourceMan = temp;
            }
            return resourceMan;
        }
    }

我认为您需要手动编写单个资源 class,并且应该删除资源的自定义工具。
并且您需要编写自己的逻辑来接收正确的 ResourceManager。
这个没有优化的小样本,但是你可以从这个开始。

The auto-generated Resources.Designer.cs file includes the following code for the ResourceManager property. Is that first parameter "ClientInterface.Resources.en.Resources" the reason why it's always giving me English?


这主要是因为在自动生成的资源中它只加载英文资源,但你需要编写你的逻辑,如何加载你的资源。 示例 NamespaceToResources.Language.Resources 或 NamespaceToResources.Culture.Resources
在下一个示例中,我将加载当前文化的资源
    /// <summary>
    ///   Returns the cached ResourceManager instance used by this class.
    /// </summary>
    [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
    internal static global::System.Resources.ResourceManager ResourceManager {
        get {
            return new global::System.Resources.ResourceManager($"ClientInterface.Resources.{Thread.CurrentThread.CurrentUICulture.Name.Replace("-", "_")}.Resource", typeof(Resource).Assembly);
        }
    }