如何处理多个资源文件进行本地化?

时间:2012-09-10 23:32:13

标签: c# localization resource-files satellite-assembly

我有一个项目,其中使用了很多资源字符串。因此,我将它们基于模块组织为文件夹结构。

如果模块A是文件夹,那么在模块A下我有以下文件。

Module A

       ResourceFileA1.resx 
       ResourceFileA2.resx
       ResourceFileA1.de-DE.resx
       ResourceFileA2.de-DE.resx

和类似的是模块B的结构。

但我只想拥有一个单独的类文件或者如果没有可能的单个包装类(用于与每个资源文件相关的多个类)来获取资源字符串。我正在尝试像GetString(moduleA.ResourceFileA1.String)

这样的东西

我尝试了一些解释here的内容,但无法做到正确。有人可以帮忙吗?

提前致谢,

4 个答案:

答案 0 :(得分:2)

您没有提到限制使用哪个版本的.NET框架,但假设您至少使用.NET 2.0,那么您真的不必担心手动管理资源文件。通过Visual Studio添加新资源文件,您应该看到自动生成的

ResourceFileA1.resx

ResourceFileA1.Designer.cs

设计器文件应该自动为您创建对文件中放置的任何资源项的编译时引用,例如:

moduleA.ResourceFileA1.YourStringKey

当您添加新的语言环境(.de-DE.resx等)时,moduleA.ResourceFileA1.YourStringKey应该基于Thread.CurrentCulture自动引用正确的资源文件,但是如果您希望可以通过调用显式地传递它GetString的

答案 1 :(得分:0)

您展示的文件都是本地资源,只能由应用的某些部分访问。但您也可以创建可供所有应用程序代码使用的全局资源。假设您的应用是ASP.NET应用,这些资源位于App_GlobalResources。请参阅this MSDN页面,特别是“全局资源文件”和“本地资源文件”子部分。

答案 2 :(得分:0)

以下是代码。

 [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
    public static global::System.Resources.ResourceManager ResourceManager
    {

        get
        {
            resourceMan = new global::System.Resources.ResourceManager("Ral." + Ral.ResourceFolderPath.GetClientKey + ".Asset.Resource", typeof(Resource).Assembly);
            return resourceMan;
        }
    }

答案 3 :(得分:0)

MSDN链接适用于我,因为我没有遵循resx文件的命名约定。 http://msdn.microsoft.com/en-us/library/ms227427%28v=vs.100%29.aspx

它说“当你创建资源文件时,首先要创建一个基本的.resx文件。对于你想要支持的每种语言,创建一个具有相同文件名的新文件。但是在名称中,包括语言或者语言和文化(文化名称)。有关文化名称的列表,请参阅CultureInfo类。例如,您可以创建以下文件:

WebResources.resx
基本资源文件。这是默认(回退)资源文件 WebResources.es.resx
西班牙语的资源文件 WebResources.es-mx.resx
特别是西班牙语(墨西哥)的资源文件 WebResources.de.resx
德语的资源文件。“