用于一个区域性的多个resx文件

本文关键字:resx 文件 区域性 一个 用于 | 更新日期: 2023-09-27 18:01:27

我有一个c#应用程序需要支持多种文化类型。我为每种语言制作了一个resx文件,更改文化类型会更改我正在使用的resx文件。伟大的工作。现在我有一个客户不喜欢我用的标签。他们在en-US文化中,我想保持en-US的resx不变,就像我们大多数客户一样,但是对于这个特殊的客户,有没有一种方法可以改变他的资源文件,同时仍然是en-US的一部分?例如,我可以制作一个"en-US2"resx文件或类似的东西,并指向它吗?或者是否有更好的方法为同一语言拥有多个不同的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"));