如何读取全局资源文件
如何读取全局资源文件
我有一个基于C#的窗口应用程序,在其中根据所选择的语言显示一些消息框。使用窗体级资源时一切都正常,但如果我想访问全局资源文件(项目级别),该怎么办呢?
ResourceManager res_man = new ResourceManager("Resources",typeof(Form2).Assembly); System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("ar-SA"); string s = res_man.GetString("String1"); MessageBox.Show("阿拉伯语-" + s);
我尝试了这个方法,但无论如何都不起作用。
对于更新答案:
文章标题:如何读取全局资源文件
尝试更改当前文化环境而不是UI文化环境 -
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("ar-SA");
我正在使用以下代码从全局资源中获取特定文化环境的特定值 -
ResourceManager myManager = new ResourceManager(typeof(Resources.Strings)); String currencySymbol = myManager.GetString("Currency", CultureInfo.GetCultureInfo("en-GB"));
"Resources.Strings"对我不可访问,请描述一下CurrencySymbol是什么?
"CurrencySymbol"只是一个变量,用来存储值。我正在更新答案。
但是Resources.Strings对我仍然不可访问。我添加了一个屏幕截图,请在问题面板中查看。
"Resources.Strings"是要从中获取数据的资源文件的名称。它将类似于Strings.en-GB.resx在App_GlobalResources文件夹中。
你能请澄清一件事吗,如果我有两个全局资源文件,一个用于英语,一个用于阿拉伯语,那么?
创建一个名为Strings.resx的默认文件,对于特定的语言,创建对应的语言代码文件。例如对于英国,它将是Strings.en-GB.resx。从此链接中检查语言代码 - msdn.microsoft.com/en-us/library/ms533052(v=vs.85).aspx
详细信息请参阅此链接 - msdn.microsoft.com/en-us/library/vstudio/…
你知道吗,如果我添加资源文件Strings.resx,它会显示为"Resources.Strings",但如果我将其重命名为"Strings.en-GB.resx",那么它对"Resources.Strings"不可访问。
必须有一个没有任何语言代码的文件。"Strings.resx"将是所有语言的默认文件。然后为每种语言添加一个新的资源文件,带有相应的语言代码。例如"Strings.en-GB.resx"。
让我们在聊天中继续讨论。
访问修饰符默认为internal。您是否使用了PublicResXFileCodeGenerator?
当您在Visual Studio中打开RESX文件时,可以将访问修饰符设置为public。在窗体顶部有一个下拉框,可以更改访问修饰符。
然后,您将能够访问:
var resxManager = new ResourceManager(typeof(Resource)); var currentString = resxManager.GetString("Practitioner", CultureInfo.GetCultureInfo("en-US"));
这里可能会有一个相关问题:Visual Studio - Resx文件默认为'internal'改为'public'
文章如下:
默认情况下,资源文件的访问修饰符是internal。如果您使用了PublicResXFileCodeGenerator,可能会遇到无法读取全局资源文件的问题。在Visual Studio中打开RESX文件时,您可以将访问修饰符设置为public。在窗体顶部有一个下拉框,可以更改访问修饰符。
设置访问修饰符为public后,您就可以按照以下方式访问全局资源文件:
var resxManager = new ResourceManager(typeof(Resource)); var currentString = resxManager.GetString("Practitioner", CultureInfo.GetCultureInfo("en-US"));
上述代码中,ResourceManager是一个用于管理和访问资源文件的类。通过指定资源文件的类型,您可以创建一个资源管理器的实例。然后,使用GetString方法可以获取指定资源的值。在上述代码中,我们获取了名为"Practitioner"的资源,并使用en-US文化信息获取其值。
如果您遇到类似的问题,还可以参考以下相关问题:Visual Studio - Resx文件默认为'internal'改为'public'。