Файлы локализации и ресурсов 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 конкретные для этой культуры будут использоваться.

Другие вопросы по тегам