C # Localized Resources.resx не позволяет использовать другие языки - PullRequest
0 голосов
/ 07 декабря 2018

Добрый вечер,

У меня возникла проблема с Winforms и Resources.resx.

Приложение, над которым я работаю, построено с помощью шаблона "Winforms App", который можно выбрать с помощью Visual Studio,У меня возникла проблема, связанная с локализацией winforms, о которой я думаю, что важно упомянуть.

Вот моя проблема: - Я создал класс HistoryManager, который имеет только один метод и одиндействие, которое нужно выполнить - добавить историю в базу данных SQL.- Я создал файл Resource.resx, ввел в него строку формата в «MsgTaskAdded», которая равна «Задача {0} была добавлена ​​в {1}».- Упомянутая строка добавляет к базе данных безупречно.

Resources.resx работает хорошо - если я изменю MsgTaskAdded строку ресурса, она изменит то, что будет добавлено в базу данных.

Теперь проблемаУ меня есть это.- Я создал файл Resources.de-DE.resx, скопировал строки из Resources.resx и перевел на немецкий.- Изменены CurrentThread.CurrentCulture и CurrentThread.CurrentUICulture на «де-де».В результате текст, добавленный в базу данных, по-прежнему на английском языке, как будто файл не найден, и он вернулся к использованию по умолчанию Resources.resx.

Ответы [ 3 ]

0 голосов
/ 07 декабря 2018

Убедитесь, что ваш файл Resources.de-DE.resx содержится в папке Properties вашего проекта, и что он имеет действие сборки Embedded Resource, чтобы он правильно связывался с вашим Resources.resx по умолчанию во время компиляции.Настройки культуры на CurrentThread также должны быть выполнены до вызова базы данных, в идеале где-то в вашей функции static void Main() до вызова Application.Run(…).

Это должно привести к созданию папки для конкретной культуры в вашем bin\<build_configuration> папка, которая содержит файл с именем <your_app>.resources.dll.При необходимости вы можете открыть его с помощью такого инструмента, как ILSpy или Reflector, чтобы убедиться, что переведенные ресурсы существуют в ожидаемом месте в сборке.

0 голосов
/ 07 декабря 2018

Я нашел решение.

Если у вас, ребята, когда-нибудь возникли проблемы с Resources.resx, убедитесь, что локализованный файл не: Resources.de-DE.resx или Resources.pl-PL.resx, вместо этого - используйте только первый бит(Resources.de.resx) и обязательно откройте файл и установите для аксессоров значение «Internal», чтобы он генерировал файл Designer с правильным кодом.

0 голосов
/ 07 декабря 2018

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

static void Main(string[] args)
{
   Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("de-DE");
   Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("de-DE");
   Console.WriteLine(Resources.Hello);
}

она печатает "Алло"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...