I have a WinForms
application which I want to translate into multiple languages. However, I do not have any experience with localizing a WinForms
app, and I find very contradictory information about this subject.
Basically, what I want is:
strings
and ints
, but also a CultureInfo
Most solutions I've seen either have one .resx
file per Form
and/or external satellite assemblies.
.net Framework 3.5 SP1
if that matters.
Edit:
For the most part, Visual Studio already offers support for what I want, but there are two issues. When I set Form.Localizable
to true
I have this nice Designer
support, but this generates one resx
per Form
. The idea of manually overriding it in InitializeComponent
fails because it's designer-written code that will regularly be overwritten.
Theoretically, I only want to :
ComponentResourceManager
to point it to my global resx
and ApplyResources
to the overload that takes a CultureInfo
as third parameter.It seems as if I have to add a function call to my constructor that gets called after InitializeComponent()
and overrides its behaviour. That seems terribly inefficient, but Visual Studio is right when it warns about touching InitializeComponent()
.
At the moment, I am indeed rolling my own WinForms localization Framework
...
Step 1: Open Visual Studio > File > New > Project. In the Project Types pane, choose the language of your choice (Visual C# or Visual Basic). In the Templates pane, choose Windows Application. Choose a name and location for the project and click OK.
Localization is the process of customizing your application for a given culture and locale. Cultures and Locales. The language needs to be associated with the particular region where it is spoken, and this is done by using locale (language + location).
I've just completed a C# .Net 3.5 project with a similar problem. We were writing WinForms plugin for an existing multi-lingual application with 8 languages (including English).
This is how we did it:
Create all our forms and UI in the default language, English.
Put all our internal strings in a resource file (stuff not tied directly to a form like custom error messages and dialog box titles etc)
Once we had completed most of the work and testing we localised it.
Each form already had a .resx file but this was empty. We set the property 'Localizable' to true, the .resx file was filled with things like button sizes & strings.
For each of the other languages, we changed the 'Language' property on the form. We chose the basic version of each language eg: 'Spanish' instead of 'Spanish (Chile)' etc. so that it would work for every 'Spanish' dialect, I think.
Then we went through each control, translated its text and resized, if needed. This created a .resx per language and form combination.
We were then left with, for 8 languages, 8 .resx for each form and 8 .resx for the general strings. When compiled the output folder had the .dll we were creating and then a sub folder for each language with a .resources.dll in it.
We were able to test the versions of the UI in the designer by just changing the language property to check that we had the correct strings & layout.
All in all once we got our heads around it, it was quite easy and painless.
We didn't need to write any custom tweaks to the form loading
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With