Devexpress Локализация - PullRequest
       14

Devexpress Локализация

0 голосов
/ 24 октября 2019

У меня есть приложение WindowsForm, в котором весь текст (на ярлыках / кнопках / других элементах управления) написан на норвежском языке. Я хочу конвертировать весь текст на английском языке, используя локализацию. Есть ли способ в Devexpress, где мы можем конвертировать весь текст на английский, не записывая значение каждого текста в файле ресурсов вручную? Например: - В приложении «Брукернавн» жестко закодировано на этикетке. Я хочу автоматически преобразовать его в английский, не назначая его значение в английском ResourceFile. Каким должен быть подход в локализации Devexpress?

enter image description here

1 Ответ

0 голосов
/ 24 октября 2019

Я не знаю ни одного метода Devexpress, чтобы сделать это. Хорошим решением было бы фактически сделать работу по созданию файла локализации для английского языка, который работал бы следующим образом.

  • Добавьте InternationlisationLayer в ваше приложение.
  • Этот слой ищет приложение, чтобы найти все элементы управления, которые вы бы хотели перевести.
  • После нахождения всех элементов управления вы должны сопоставить их текстовые значения с переведенным текстом.
  • После нахождения соответствующего текста на английском языке вам придется заменить свойство Text в этих элементах управления.

Если вы хотите избежать создания правильной системы локализации, гораздо более простое решение объясняется ниже. ,

  • Создайте список типа и заполните его всеми контрольными текстами, которые вы хотите перевести.
  • Переведите строки и добавьте их формат так, чтобы у вас был словарь типа (где Keyбудет исходный текст, а значение будет переведенным текстом).
  • При запуске приложения получите список всех элементов управления, которые вы хотите перевести, и сделайте что-то вроде следующего:

        public static IEnumerable<System.Windows.Forms.Control> GetAllControlsOfType(this      System.Windows.Forms.Control control, Type type)
        {
            var controls = control.Controls.Cast<System.Windows.Forms.Control>();
    
            return controls.SelectMany(ctrl => GetAllControlsOfType(ctrl, type))
             .Concat(controls)
             .Where(c => c.GetType() == type);
        }
    
        public void DoTranslation()
        {
            var ctrls = this.GetAllControlsOfTypes(new List<Type>() { typeof(Label), typeof(Button) });
            foreach (var ctr in ctrls)
            {
                var element = dict.FirstOrDefault(i => i.Key == ctr.Text);
                ctr.Text = element.Value;
            }
        }
    
...