Я пытаюсь использовать файлы .resx для локализации строк в управляемом проекте C ++ CLR с VS2013. В папке «Файлы ресурсов» моих проектов я щелкаю правой кнопкой мыши> Добавить элемент> .resx файл и называю его AppLocalization.resx. Я делаю это снова и создаю AppLocalization.fr.resx. Затем я добавляю разные строки с одинаковыми именами к каждому. Если я запускаю свое приложение, следующий код получает правильную строку из файла AppLocalization.resx:
ResourceManager ^rm1 = gcnew ResourceManager(L"My_App.AppLocalization", Assembly::GetExecutingAssembly());
this->Text = rm1->GetString(L"My String Name");
Теперь я хочу проверить французский перевод .fr, и вот тут у меня проблемы. Оба они не могут получить строку из файла .fr.resx и вместо этого возвращают строку из файла AppLocalization.resx:
this->Text = rm1->GetString(L"My String Name", gcnew System::Globalization::CultureInfo("fr"));
System::Threading::Thread::CurrentThread->CurrentCulture = gcnew System::Globalization::CultureInfo("fr-FR");
System::Threading::Thread::CurrentThread->CurrentUICulture = gcnew System::Globalization::CultureInfo("fr-FR");
this->Text = rm1->GetString(L"My String Name");
Без сомнения, это будет что-то простое, я делаю что-то не так или не установил, но после долгих поисков я не могу найти решение. Я пробовал тестировать как в режиме отладки, так и в режиме выпуска. Я убедился, что файл \ fr \ My_App.resources.dll создается в папках Debug и Release, но все, что я пробую, не используется во время выполнения.
И проблема была в том, что в свойствах моего проекта «Common Language Runtime Support» было установлено «/ clr: safe». Однажды я изменил его на «/ clr: pure все работало отлично.