如何从多个(多语言)资源文件中读取数据?

时间:2014-02-24 13:56:56

标签: c# resources multilingual resx

我正在尝试应用程序中的多语言功能。我创建了资源文件GlobalTexts.en-EN.resx GlobalTexts.fr-FR.resx以及一个设置文化并返回文本的类(我不会详细介绍所有细节,只显示结构):

public class Multilanguage
{
    ...
    _res_man_global = new ResourceManager("GlobalResources.Resources.GlobalTexts", System.Reflection.Assembly.GetExecutingAssembly());
    ...
    public virtual string GetText(string _key)
    {
        return = _res_man_global.GetString(_key, _culture);
    }
}
...
Multilanguage _translations = new Multilanguage();
...
someText = _translations.GetText(_someKey);
...

这很好用。 现在,我想在另一个解决方案中使用这个应用程序,它基本上扩展了它(更多的窗口等),它还有资源文件ExtendedTexts.en-En.resx ExtendedTexts.fr-FR.resx和一个新类,如:

public class ExtendedMultilanguage : Multilanguage
{
    ...
    _res_man_local = new ResourceManager("ExtendedResources.Resources.ExtendedTexts", System.Reflection.Assembly.GetExecutingAssembly());
    ...
    public override string GetText(string _key)
    {
        string _result;
        try 
        {
            _result = _res_man_local.GetString(_key, _culture);
        }
        catch (Exception ex)
        {
            _result = base.GetText(_key);
        }
}
...
ExtendedMultilanguage _translations = new Multilanguage();
...
someText = _translations.GetText(_someKey);
...

这个想法是,如果在ExtendedTexts中找不到密钥,该方法将调用正在查看GlobalTexts的基类。我这样做是为了在代码中的任何地方使用调用GetText(wantedKey),而不必关心资源的位置(我不想在GlobalTexts文件中包含扩展的翻译);它突出了与项目不同的使用过的类。

我面临的问题是,当异常提升时,try / catch 非常慢 - 我等待一个窗口填充的秒数。我通过直接调用测试并且工作得更快,但是我需要关注资源所在的所有时间......

问题是:是否有另一种方法可以做到这一点(将资源分散到各种文件中,并且只有一种方法可以提供所需的资源而不会产生错误)?

1 个答案:

答案 0 :(得分:0)

最后,我采用了一种解决方案,并在字典中加载了资源文件的所有内容。这样我可以使用ContainsKey并查看密钥是否存在。