Конвертировать решение на несколько языков - PullRequest
1 голос
/ 06 сентября 2010

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

Есть сотни окон, много ярлыков, комбо и т. Д.

Мы используем компоненты devxpress (не макет).

Ответы [ 3 ]

1 голос
/ 06 сентября 2010

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

Что касается статических меток форм, существует элегантное решение, позволяющее легко выполнить 75% работы.и быстро.Просто переместите ярлыки на ресурсы, не касаясь существующих английских ярлыков.Затем, в зависимости от культуры текущего потока, измените метки в форме, считывая их из локализованных ресурсов.

Например, французский ресурс для класса YourForm:

YourForm.fr-CA.resx:

"name" -> "value"
labelCaption\ --> "Légende"
labelInputLabel\ --> "Champ de saisie"

«Имя» - это имя вашего элемента управления формы, «значение» - это метка элемента управления.

1).Создайте базовый класс для всех ваших форм, например LocalizationBaseForm 2).Обработайте событие OnLoad () в этом классе и прочитайте ресурс.В зависимости от выбранной на данный момент культуры вы будете читать соответствующий локализованный ресурс.Канадский французский будет находиться в каталоге / fr-Ca /, испанский - в / es-Es / etc.

ResourceManager manager = new ResourceManager(your_ form_type);
ResourceSet set = manager.GetResourceSet(manager, ...);

3).Перебирайте список меток и меняйте метки на форме в соответствии со списком на ресурсе.

//*pseudocode:*
foreach (DictionaryEntry entry in set)
{
    SetControlLabel(entry.Key, entry.Value)
}

Метод SetControlLabel (...) ищет элемент управления с заданным именем и изменяет его заголовок с заданным новымкатион.

Вы можете делать более сложные вещи, такие как локализация столбцов в сетках, усложнение значений в ресурсе, например:

"name" -> "value" gridTable (ColumnKey1) \-> "Сolonne Une" gridTable (ColumnKey2) \ -> "Сolonne Deux"

То же самое с деревьями, панелями инструментов и т. Д. Вы даже можете автоматически генерировать ресурсы, все зависит от вас.

Этот подход не решит все ваши проблемы, но он поможет вам, если вам нужно быстро локализовать уже существующее приложение.Вам все еще нужно локализовать парсеры строк, даты и т. Д.

Удачи!

0 голосов
/ 06 сентября 2010

если вы хотите использовать БД для локализации, то можете дать совет:

Создать 4 таблицы 1.ProjectKeyWords (KW_ID, LNGID, Value);2. Страницы (PageID, PageName);3. Этикетки (LabelID, LabelName, KW_ID);4.Application_Labels (PageID, LabelID);5.Langs (ID, NAME);

пример: ProjectKeyWords 1, 1, FirstName (на английском языке) 2, 1, LastName (на английском языке) 1, 2, Имя (на русском языке) 2, 2, Фамилия(На русском языке) 1, 1, Adı (в Азербайджане) 2, 1, Soyadı (в Азербайджане) Страницы -> 1, Form1 2, Form2

Ярлыки -> 1, lblFirstName, 1 1, lblLastName, 2

Application_Labels -> 1,1 1,2 2,1 2,2

Langs -> 1, Eng 2, Rus 3, Az

Ав событии Form_Load () вы можете создать SQLQuery как "

SELECT L.LabelName, PKW.Value FROM Labels L, Pages P, Application_Labels A_L, ProjectKeyWords PKW, где P.NAME = AND PKW.LNG_ID =
AND A_L.PageID = P.ID AND A_L.LabelID = L.LabelID

"

создать итерацию и найти все элементы управления с L.LabelName с помощью метода FindControl и установить PKW.Value для этой меткиТекстовое свойство

0 голосов
/ 06 сентября 2010

Попробуйте использовать ResourceManager class

Учебник ondotnet.com

...