Моя проблема заключается в следующем : Использование MonoDevelop (которая является предпочтительной средой для ряда проектов, над которыми я работаю) Я пытаюсь выяснить, как использовать файлы ресурсов для локализованных сообщений и какчтобы правильно включить их в проект как встроенный ресурс.
Моя цель - получить файл ресурсов с простыми парами имя-значение для ключей сообщений и их значений, а также отдельные файлы для их локализованных строк, например
Messages.resources
Hello.World = Hello World
Goodbye.Cruel.World = Goodbye, Cruel World
Messages.de.resources
Hello.World = Hallo Welt
Goodbye.Cruel.World = Auf Wiedersehen, grausame Welt
У меня возникла пара проблем.
Сначала , в чем разница (если есть) между файлом .resources MonoDevelop и концепцией ресурсов Visual Studio.Насколько я понимаю, MonoDevelop (и SharpDevelop) позволяют создавать файлы .resources, тогда как Visual Studio использует файлы .resx и компилирует их в файлы .resources (двоичный тип файла) с помощью утилиты resgen.При использовании ресурсов в MonoDevelop нужно ли мне компилировать свои ресурсы (например, Messages.resources), используя resgen?Когда я пытаюсь использовать только прямые файлы .resources, которые MonoDevelop позволяет мне создавать с помощью их мастера, я получаю следующую ошибку:
«Поток не является допустимым файлом ресурсов».
Второй , как только у меня будет правильно сгенерированный файл ресурсов, я могу встраивать их в свой проект, который, если я правильно понимаю, делает ресурсы частью сборки.Однако, если у меня есть два файла, Messages.resources и Messages.de.resources, MonoDevelop (как минимум) назначает им одинаковое значение идентификатора при их внедрении.Нужно ли включать в проект мою локализацию по умолчанию, а затем отдельный проект для каждой поддерживаемой локали?В связи с этим, как C # различает мои файлы Messages.resources и Messages.de.resources (или какими бы они ни были файлы)?
В настоящее время я пытаюсь разрешить ресурсы сообщений с помощью следующего кода:
...
public string Translate(string messageKey, CultureInfo cultureInfo) {
ResourceManager resourceManager = new ResourceManager("My.Project.Messages", Assembly.GetExecutingAssembly());
string message = resourceManager.GetString(messageKey, cultureInfo);
return message;
}
...
Мне кажется, что мне не хватает некоторых фундаментальных моментов в усилиях по интернационализации / локализации / глобализации и т. Д. С C #.Я работал над интернационализированными проектами в Java раньше, но по какой-то причине я не могу полностью обдумать это в C #.
Кроме того, в качестве отступления - какова «предпочтительная» структура каталогов для ресурсовв интернационализированном проекте?