2016-08-08 13 views
1

У меня есть приложение C#, которое должно поддерживать несколько типов культуры. У меня есть файл resx, созданный для каждого языка, и изменение типа культуры изменяет файл resx, который я использую. Прекрасно работает. Теперь у меня есть клиент, которому не нравятся ярлыки, которые я использовал. Они находятся в американской культуре, и я хотел бы сохранить resx для en-US без изменений и так, как это делается для большинства наших клиентов, но для этого одного конкретного клиента есть способ изменить его файл ресурсов КАК ЕЩЕ ЕЩЕ ЕСТЬ США? Например, можно ли создать файл resx «en-US2» или что-то в этом роде и указать на это? Или есть лучший способ иметь несколько разных файлов resx для одного языка?несколько файлов resx для 1 культуры

+1

код [CultureAndRegionInfoBuilder] (https://msdn.microsoft.com/en-us/library/system.globalization.cultureandregioninfobuilder%28v=vs.110%29 .aspx? f = 255 & MSPPError = -2147217396) может быть тем, что вам нужно, но обратите внимание, что пользовательская культура [должна быть зарегистрирована на целевом компьютере] (http://stackoverflow.com/a/17042843/43846) – stuartd

+0

1) Вы можете использовать несколько ресурсов для специальных клиентов. Как и MainResource.resx, MainResource.en-US.resx для всех и SpecialCase.resx, SpecialCase.en-US.resx для определенного. 2) или если вы управляете развертыванием для этого конкретного клиента, вы можете просто обменять ресурс =) Если вы действительно хотите получить ответ, добавьте больше информации на свой вопрос. –

+0

Или вы можете редактировать прямо на машине клиента. –

ответ

0

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

чтобы задать модель Params:

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"));