Несколько файлов 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"));