本地化期间如何处理多个项目的resx文件的多个存储桶

时间:2018-09-12 20:48:07

标签: c# .net localization .net-assembly resx

我有多个项目,每个项目都有自己的resx文件。而且我不确定使用资源管理器加载进行翻译所需的resx文件的最佳方法是什么。

代码对话:

项目A:

LocalizedText.resx
Key            Value
Hello         Hello

LocalizedText.fr_FR.resx
Key             Value
Hello           Salut!

项目B

LocalizedText.resx
Key            Value
Hello         Hello

LocalizedText.fr_FR.resx
Key             Value
Hello           Salut!

项目C:

A and B都引用了

// Singleton Class

public sealed class C
{
// code removed for brevity
    private static readonly C class1Helper = new C();

    public static CGetClass1Helper { get { return class1Helper; } }
    public string GetTranslatedMessage(string key, CultureInfo culture, string namespace)
    {
        var message = "";
        var rm = new ResourceManager(namespace, Assembly.GetCallingAssembly());
        message = rm.GetString(key, culture);
        return message;
    }
}

从项目A拨打电话:

  C instance = C.GetClass1Helper;
  var t =  instance.GetTranslatedMessage("Name", new CultureInfo("en-US"),
 "A.App_GlobalResources.LocalizedText"); 

来自项目B的电话:

  C instance = C.GetClass1Helper;
  var t =  instance.GetTranslatedMessage("Name", new CultureInfo("en-US"),
 "B.App_GlobalResources.LocalizedText"); 

注释:

  1. 当我调用资源管理器时,我必须使用GetCallingAssembly INSTEAD OF GetExecutingAssembly(),以便当调用来自Project A时,Resx文件从其文件夹中被引用
  2. 我正在传递GetTranslatedMessage中的resx文件位置的名称空间

WorkAround:我可以重复在Common Project C中在A和B中使用的代码,然后一切正常。但是然后我将重复相同的代码。

问题:我不想每次调用都传递名称空间。创建Singleton是否犯了一些错误,我是否需要拥有abstract class

0 个答案:

没有答案