2009-11-15 4 views
1

Мне нужно сделать форму, которая должна поддерживать два языка (на данный момент). два языка не имеют одинакового внешнего вида, а также половина формы не похожа, но у нее все еще есть некоторое сходство между ними. Каков наилучший способ справиться с этой проблемой в случае двух разных языков и выше? Кстати, язык программирования, который я использую, это C#.Проблема локализации

10x

ответ

3

Во-первых, настроить язык проекта по умолчанию, вы делаете это в свойствах проекта, в диалоговом окне Сведения Ассамблеи, есть «нейтральный язык» установка в нижней части.

Установите это, чтобы быть вашим «стандартным» языком, «основным» языком, если хотите.

Затем убедитесь, что форма, как сейчас, находится на этом языке.

Чтобы начать перевод и изменение формы в соответствии с другим языком, сначала установите для свойства «Локализованное» формы значение «Истина», а затем измените свойство «Язык» на второй (или третий, четвертый и т. Д.) Язык ,

После того, как вы изменили это, вы можете начать вносить изменения. Удостоверьтесь, что вы не удалите элементов на форме, а просто установите их невидимыми. Удаление выполняется для всех языков, но невидимый, таким образом, будет установлен только для текущего языка.

Продолжайте переключение между языками для внесения корректировок.

Чтобы проверить программу на определенном языке, выполнить это в начале вашего метода Main:

Thread.CurrentThread.CurrentCulture = new CultureInfo("code of that other language"); 
Thread.CurrentThread.CurrentUICulture = new CultureInfo("code of that other language"); 

Например, чтобы протестировать его с «норвежским, букмолом» языком, который является моим основным языком, код, который вы использовали бы, будет «nb-NO». Чтобы найти код, который вам нужно использовать, как только вы изменили язык своей формы на язык, который хотите локализовать и сохранить, новый файл будет добавлен в проводник решений с правильным именем.

Например, для Form1 следующие файлы будут присутствовать:

Form1.cs 
    Form1.designer.cs 
    Form1.nb-NO.resx  <-- here's the localized content 
    Form1.resx 

Теперь, сделав это, есть много других вещей, которые вы должны знать при создании локализованного приложения, я предлагаю вам почитайте другие вопросы по SO и в Интернете с большим количеством информации, как эти:

0

Я думаю, что один глобальный файл ресурсов для каждого языка лучше, чем файл ресурсов для каждой формы для каждого языка.
Я недавно сделал глобализацию приложения winforms с помощью следующей ссылки "Globalization of Windows Applications in 20 Minutes". Вот шаги для простоты:

  1. Создайте текстовый файл, скажем: data.en-US..txt "в растворе (. < имя_файла> < культуры строка> .txt) в следующей форме:

    Здравствуйте = Hello
    Добро пожаловать =

    Этот файл" data.en-US.txt "представляет собой текстовый файл ресурсов на английском языке. Создайте аналогичный файл на нужном языке говорят немецкий, так что его имя файла будет data.de-DE.txt

    Здравствуйте = Halo
    Добро пожаловать = Willikomen

    Первый столбец - это метки, которые будут использоваться в качестве ключей для направления текста.

  2. Создайте файл «data-en-US.resource» из текстовых файлов с помощью команды «resgen.exe data.en-US.txt», Сделайте это для всех языковых файлов. Теперь в вашем решении у вас есть 2 (или больше, в зависимости от языков, которые вы хотите поддержать)
    данные. < культура строка> .resource файлов

  3. Нажмите все файлы .resource и установите для свойства «Build Action» значение «Content».
  4. Нажмите все файлы .resource и установите для свойства «Копировать в выходной каталог» значение «Копировать всегда/копировать, если новый».
  5. Получить локализованную строку, используя приведенный ниже код в любой из форм:
string label = "Hello"; 
string cultureString = "de-DE" // [or "en-US"] 
string strResourcesPath = Application.StartupPath; 
CultureInfo ci = new CultureInfo(cultureString); ['cultureString' represents your desired language] 
ResourceManager rm = ResourceManager.CreateFileBasedResourceManager("data", strResourcesPath , null); ["data" is the first part of the filename] 
var answer = rm.GetString(label, ci); // here ans="Halo" as we selected de-DE 
Смежные вопросы