Tereami
Tereami

Reputation: 5

Windows Forms Localize resx without changing Culture

I know it's easy to localize Windows Forms App: set Localizable=True, change Language and set text in Controls for every Language. This information saves in resx-files and application will automatically select the required file. Great! I know about disadvantages of this solution (you need to rebuild the app if there a typo, it's impossible to change language in runtime, etc), but it's not a problem for me and "resources" is the simpliest, built-in solution.

But this mechanism uses the property Culture of app's thread. My app is the part ("plugin") of the bigger application and works in the same Thread. The main application is multilingual too, but it doesn't use Culture to change interface's language. I can change the thread's culture globally, but it crushes the main app's interface.

So my question: is it possible to manually set the resx-localizable resurce file that will be used? Not based on Culture, but, for example, on some variable in my app:

if (this.Language == "fr")
    this.Resources.Add("Form1.fr.resx");
else
    this.Resources.Add("Form1.en.resx");

Or something else.

Thank you!

My sandbox: https://github.com/Tereami/WindowsFormsTestLanguage

Upvotes: 0

Views: 677

Answers (1)

Oliver
Oliver

Reputation: 45119

The built resources file has a property ResourceManager that's used to return the desired content. This has an overload with a CultureInfo parameter. You can use it to request resources in individual languages:

var desiredCulture = new CultureInfo("en-us");
var text = MyStrings.ResourceManager.GetString(nameof(Resources.ExitMessage), desiredCulture);

If you want to set the culture globally for your resource file, you could also set it through the corresponding property:

var desiredCulture = new CultureInfo("en-us");
MyStrings.Culture = desiredCulture;

var text = MyStrings.ExitMessage;

Upvotes: 2

Related Questions