Проблема локализации - PullRequest
1 голос
/ 15 ноября 2009

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

10x

Ответы [ 2 ]

3 голосов
/ 15 ноября 2009

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

Установите для этого язык по умолчанию, основной язык, если хотите.

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

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

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

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

Чтобы протестировать вашу программу на определенном языке, выполните это в начале вашего 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 голосов
/ 26 июня 2015

Я думаю, что один глобальный файл ресурсов для каждого языка лучше, чем иметь файл ресурсов для каждой формы для каждого языка.
Недавно я провел глобализацию приложения winforms с помощью следующей ссылки «Глобализация приложений Windows за 20 минут» . Вот шаги для простоты:

  1. Создайте текстовый файл с именем «data.en-US.txt» в решении (. <Строка культуры> .txt ) в следующем формате:

    Hello = Hello
    Добро пожаловать =

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

    Hello = Halo
    Добро пожаловать = Willikomen

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

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

  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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...