2017-01-04 4 views
1

Я пытаюсь создать систему локализации для обработки разных языков в нашем приложении. У меня есть общий модуль, где должно произойти все волшебство, доступное View View для получения правильного строкового значения на основе языка.Создание локализации локализации для просмотра моделей C#

Язык приложений, например. "en_US" передается классу Common Modules LocaleLanguage, который затем должен вернуть требуемый объект, содержащий все строки, относящиеся к этому языку. Например:

public object GetLangaugeClass() 
    { 
     switch (language) 
     { 
      case "en_US": 
       return new en_US(); 
      .... 
      default: 
       return new en_US(); 
     } 
    } 

Каждый en_US и т.д. класс только имеет государственные строки в них. Я попытался использовать файлы Xml, но это не сработало.

Проблема проблема заключается в том, что возвращаемый object является объектом, который мешает мне получить доступ к общедоступным строкам классов. Любые идеи о том, как решить эту проблему?

ответ

0

Вы можете использовать класс ResourceManager и satellite assemblies для локализации. Таким образом, вам не нужно создавать отдельные классы для каждого языка.

Когда вы установите DefaultThreadCurrentUICulture, ResourceManager будет просматривать ресурсы в соответствующей папке.

CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.GetCultureInfo("en-US"); 

Файл ресурса должен находиться в папке «en-US» в этом случае.

Затем вы можете вызвать метод GetStringResourceManager, чтобы получить локализованную строку.

Assembly executingAssembly = Assembly.GetExecutingAssembly(); 
ResourceManager resourceManager = new ResourceManager("Resources", executingAssembly); 
string localizedString = resourceManager.GetString("resourceKey"); 

Для создания вспомогательных сборок (.resources.dll файлов) из resx файлов, вам нужно использовать resgen и al. resgen создает файл .resources и al генерирует dll.

+0

Блестящие спасибо! Попробует, безусловно, хорошее решение. Я тоже нашел решение, разместив его. – cfl

0

Решение должно вернуть Dictionary<string, string> из класса вместо класса, содержащего строковые поля. Языковые классы, например. en_US будет иметь список, который добавляет классы. Например: en_US:

LanguageUS.Add("name", "Test US Name"); 

Тогда GetLanguageClass возвращает словарь:

case "en_US": 
    return new en_US().LanguageUS; 

Ключ затем могут быть использованы для получения значения по мере необходимости.

Смежные вопросы