C # Создание настройки для нескольких языков - PullRequest
7 голосов
/ 28 апреля 2009

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

Когда вы добавите, например, немецкий язык, у вас будут следующие файлы: formMain.resx formMain.de-DE.resx formMain.Designer.cs formMain.cs

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

Так что теперь вам нужно добавить также ресурсы для строк, используемых в коде. Добавьте новый файл ресурсов и назовите его formMain.Strings.resx Затем я введу имя, пару значений для каждой строки, которая должна быть переведена. Когда вы добавляете файл ресурсов, он автоматически набирается, потому что другой файл с именем formMain.Strings.Designer.cs автоматически регенерируется при каждом закрытии конструктора resx.

Добавить еще один ресурс с именем formMain.Strings.de-DE.resx. Добавьте тот же ключ Name из предыдущего ресурса и просто измените значение с соответствующими немецкими словами. Теперь получить доступ к созданному ресурсу из источника будет так:

MessageBox.Show (formMain_Strings.SameStringName);

Однако я перешел на тайский язык. Все отлично работает, когда я запускаю свое приложение в VS.

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

Итак, я добавил файлы ресурсов и файлы th-TH в настройки проекта. И у меня все та же проблема.

Packaging file 'Lang.Strings.resx'...
Packaging file 'MultiLanguage.resources.dll'...
Packaging file 'MultiLanguage.exe'...
Packaging file 'Lang.Strings.th-TH.resx'...

Поскольку все работает нормально при работе в visual studio. Есть ли что-то, что мне нужно сделать, чтобы запустить его после его установки. Все свойства каждого файла, который у меня есть, остаются по умолчанию.

Большое спасибо,

=========

static void Main()
    {
        System.Threading.Thread.CurrentThread.CurrentUICulture = 
new System.Globalization.CultureInfo("th-TH");

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }

Ответы [ 2 ]

13 голосов
/ 29 апреля 2009

Я нашел ответ

Щелкните «Проект установки» в обозревателе решений, а затем нажмите «Добавить \ Вывод проекта \». В диалоговом окне выберите проект, для которого вы хотите включить локализационные (спутниковые) сборки, а затем выберите Локализованные ресурсы.

После установки в папку, в которую я устанавливаю, у меня есть папка th-TH, которая включает спутниковую сборку.

Спасибо

1 голос
/ 28 апреля 2009

Попробуйте добавить это при запуске приложения (если его там нет):

Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentCulture;

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


Редактировать после комментариев:

Убедитесь, что ваша спутниковая сборка находится в надлежащем месте и собрана правильно. Из той статьи, на которую я ссылался:

"Когда .NET runtime запускает приложение, оно ищет возможный файл сборки спутника. Файл сборки спутника - это файл сборки только для ресурсов, который имеет расширение .resources.dll вместо .exe ir .dll (если основная сборка библиотека). Файлы сателлитных сборок всегда находятся в определенном языке подкаталога основного каталога приложения. Если файл приложения - Converter.exe, то файл сателлитной сборки в Японии - ja \ Converter.resources.dll. "

Есть несколько вещей, которые вы должны проверить здесь. Проверьте название сборки. Кроме того, убедитесь, что он находится в правильном месте. В вашем случае это должно быть в подкаталоге th-TH с соответствующим именем в вашем исполняемом файле. Если оно есть, его нужно найти и правильно использовать.

Вот еще один хороший источник информации по этой теме.

...