不同客户的资源文件

时间:2016-03-08 09:54:38

标签: c# resources

我遇到的问题是能够使用我的单词资源文件来定位客户端。

我有一个默认文件WordResources.resx,以及特定于语言的资源,例如WordResources.en-GB.resx,WordResources.fr.resx。

如何使用客户端特定的资源文件,例如;
WordResources.client1.resx,WordResources.client2.resx。

取决于编译,例如client1将使用WordResources.client1.resx构建,但将替换默认资源文件?

我希望我可以只为几个字差异提供不同的客户端特定资源文件,然后保留默认文件并使用任何语言。

2 个答案:

答案 0 :(得分:2)

您可以构建多个版本。我们通常在构建期间重命名resx文件,并为每个客户端构建自己的设置/发布。

您可以在项目的预构建事件中执行此操作,并可以打开环境变量。

答案 1 :(得分:0)

我设法用定制的客户端文件解决了我的问题。迁移到解析字符串以进行本地化的新方法需要一段时间,但将根据更改请求实现。

我在数据库中定义了一个指定客户端的全局应用程序设置。

然后使用客户端名称查找适当命名的.resx文件,如果失败,则无法在.resx文件中找到该字符串,它将默认为指定的文化版本或从默认资源文件/指定的默认值中读取culture resx并且所有这些都失败了,返回传递的字符串。

public static string GetLocalizedString(string text)
{
    System.Reflection.Assembly assembly = System.Reflection.Assembly.GetAssembly(typeof(LocalizationExtensions));
    cultureInfo = new CultureInfo(HttpContext.Current.Cache["Culture"].ToString());
    string clientName = HttpContext.Current.Cache["ClientName"].ToString();       
    return    (new System.Resources.ResourceManager("Resources." + clientName + "." + clientName, assembly)).GetString(text, cultureInfo) 
           ?? (new System.Resources.ResourceManager("Resources.WordResources", assembly)).GetString(text, cultureInfo) 
           ?? text;
}

客户端名称的应用程序设置将加载到缓存中。

相关问题