Несколько файлов resx для 1 культуры

У меня есть приложение aC#, которое должно поддерживать несколько типов культур. У меня есть файл resx, созданный для каждого языка, и изменение типа культуры изменяет файл resx, который я использую. Работает отлично. Теперь у меня есть клиент, которому не нравятся используемые мной ярлыки. Они относятся к культуре en-US, и я хотел бы оставить рекс для en-US неизменным, как и для большинства наших клиентов, но для этого конкретного клиента есть ли способ изменить его файл ресурсов Пока все еще является частью en-US? Например, могу ли я создать файл resx "en-US2" или что-то в этом роде, и указать на это? Или есть лучший способ иметь несколько разных файлов resx для одного и того же языка?

1 ответ

Я задал похожий вопрос с той же самой идеей (здесь). По сути, C# предназначался для использования с одним Resources.resx, где вы его разобрали. Из того, что я извлек из всей моей охоты, у вас есть два варианта: поместить все это в один файл (например, worksWelcomeText и 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"));
Другие вопросы по тегам