我遇到的问题是能够使用我的单词资源文件来定位客户端。
我有一个默认文件WordResources.resx,以及特定于语言的资源,例如WordResources.en-GB.resx,WordResources.fr.resx。
如何使用客户端特定的资源文件,例如;
WordResources.client1.resx,WordResources.client2.resx。
取决于编译,例如client1将使用WordResources.client1.resx构建,但将替换默认资源文件?
我希望我可以只为几个字差异提供不同的客户端特定资源文件,然后保留默认文件并使用任何语言。
答案 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;
}
客户端名称的应用程序设置将加载到缓存中。