Файлы локализации и ресурсов C#
Я пытаюсь заставить локализацию работать в моем приложении. У меня есть файлы ресурсов пользовательского интерфейса с именами "ui.resx" и "ui.de.resx" в моем решении. Однако что-то в моей реализации неверно, и я в тупике.
ResourceManager res_man;
CultureInfo culture;
string exception;
private void myForm_Load(object sender, EventArgs e)
{
culture = CultureInfo.CreateSpecificCulture("de");
res_man = new ResourceManager("MyApp.ui.resx", typeof(myForm).Assembly);
doTheThing();
}
private void doTheThing()
{
try
{
BTN_save.text = ui.SAVE;
//Do code here
}
catch(Exception e)
{
exception = e.toString();
}
}
Когда я запускаю программу, она выдает ошибку и читает следующее исключение:
"Исключение: System.Resources.MissingManifestResourceException: не удалось найти ресурсы, подходящие для указанной культуры или нейтральной культуры. Убедитесь, что" ui.resx.resources "был правильно встроен или связан с сборкой" myProgram "во время компиляции, или что все необходимые спутниковые сборки являются загружаемыми и полностью подписаны ".
1 ответ
Вы должны использовать полное имя (с пространством имен) вашего класса в качестве первого параметра lik:
var resman= new ResourceManager("Sample.Resources", typeof(Resources).Assembly);
Чтобы узнать, какое имя вы должны использовать, откройте ui.cs
под ui.resx
узел и посмотреть на пространство имен класса и имя класса и использовать их, как показано выше.
Обратите внимание, что вы не должны проходить "MyApp.ui.resx"
вместо того, чтобы пройти "MyApp.ui"
Затем вы можете просто использовать менеджер, чтобы получить ресурс для конкретной культуры, например:
var str = resman.GetString("YourResourceKey", culture);
Замечания:
Еще одна вещь, которую вы должны заметить, это более простой способ чтения специфичных для культуры ресурсов. Вы можете просто установить:
var culture= ...
System.Threading.Thread.CurrentThread.CurrentUICulture = culture;
System.Threading.Thread.CurrentThread.CurrentCulture = culture;
После установки культуры, где вы используете, например MyApp.Ui.Key
значение Key
конкретные для этой культуры будут использоваться.