1个文化的多个resx文件

时间:2016-08-08 22:29:48

标签: c# localization globalization resx currentculture

我有一个需要支持多种文化类型的c#应用程序。我有一个为每种语言编写的resx文件,更改文化类型会更改我正在使用的resx文件。效果很好。 现在我的客户端不喜欢我用过的标签。他们属于美国文化,我想保持en-US的resx不变,以及它对大多数客户的态度,但对于这个特定的客户,有没有办法改变他的资源文件虽然仍然是en-US的一部分? 例如,我可以制作一个“en-US2”resx文件或类似的东西,并指出这一点?或者有更好的方法可以为同一种语言提供多个不同的resx文件吗?

1 个答案:

答案 0 :(得分:0)

我曾用同样的想法问过一个类似的问题(here.)基本上C#意味着与一个Resources.resx一起使用,你可以将它培养出来。根据我从所有狩猎中收集到的内容,您有两种选择:将其全部放在一个文件中(如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"));