用于一个区域性的多个resx文件
本文关键字:resx 文件 区域性 一个 用于 | 更新日期: 2023-09-27 18:01:27
我有一个c#应用程序需要支持多种文化类型。我为每种语言制作了一个resx文件,更改文化类型会更改我正在使用的resx文件。伟大的工作。现在我有一个客户不喜欢我用的标签。他们在en-US文化中,我想保持en-US的resx不变,就像我们大多数客户一样,但是对于这个特殊的客户,有没有一种方法可以改变他的资源文件,同时仍然是en-US的一部分?例如,我可以制作一个"en-US2"resx文件或类似的东西,并指向它吗?或者是否有更好的方法为同一语言拥有多个不同的resx文件?
我曾经问过一个类似的问题,有着同样的想法(在这里)。基本上,c#是为单个资源而设计的。你在哪里培养它。从我收集到的所有信息来看,您有两种选择:将其全部放在一个文件中(如workersWelcomeText和employeeWelcomeText),或者创建多个resx文件并构造一个模型来处理它们并返回所需的资源文件:
模型(不是必需的,但很好的做法):
namespace Bot.Models
{
public class Dialog
{
internal static string Name { get; set; }
internal static string Culture { get; set; }
//Returns the rsource file name.culture.resx
internal static string ResourceFile { get { return $"{System.AppDomain.CurrentDomain.BaseDirectory}Properties''{Name}.
{Culture}.resx"; } }
}
}
构造一个从文件中检索资源的方法:
// You can do this in-line, just remember to reset your resex if you change the file
internal static string GetStrRes(string resourceStr)
{
//Gets your resource file
System.Resources.ResXResourceSet resxSet = new System.Resources.ResXResourceSet(Models.Dialog.ResourceFile);
string response = resxSet.GetString(resourceStr);
return response;
}
设置模型参数:
Models.Dialog.Name = "Worker";
Models.Dialog.Culture = "en-US";
使用模型:
// Returns content of string resource key, same as Resources.workerText
await context.PostAsync(BotUtils.GetStrRes("RES_KEY"));