Solved

Multi-Language C#

Posted on 2010-11-11
12
747 Views
Last Modified: 2013-12-17
Hello,

How can i create a button to multi-laguage?

I create a form in pt-BR, en-US and es-ES.
I need to when i click the button language change the form.

Thanks!
0
Comment
Question by:juliodiz
  • 8
  • 4
12 Comments
 
LVL 10

Expert Comment

by:hosneylk
ID: 34118039
0
 

Author Comment

by:juliodiz
ID: 34118050
So i try this one, but inside the groupbox the label doesnt change
0
 
LVL 10

Expert Comment

by:hosneylk
ID: 34119149

private void RefreshResources(Control ctrl, ComponentResourceManager res)
        {
            ctrl.SuspendLayout();
            res.ApplyResources(ctrl, ctrl.Name, CurrentLocale);
            foreach (Control control in ctrl.Controls)
                RefreshResources(control, res); // recursion
            ctrl.ResumeLayout(false);
        }

// calling
            ComponentResourceManager resources = new ComponentResourceManager(typeof(Form1));
            resources.ApplyResources(this, "$this");
            RefreshResources(this,resources);

Open in new window

0
Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

 

Author Comment

by:juliodiz
ID: 34120556
Thanks, but the CurrentLocale does not exist in the current context.

How i get the current locale?
0
 
LVL 10

Expert Comment

by:hosneylk
ID: 34125152
try using this instead

CultureInfo.CurrentCulture
0
 

Author Comment

by:juliodiz
ID: 34125194
No, nothing change. I click and nothing happens


private void ChangeLanguage(string lang)
        {
            foreach (Control c in this.Controls)
            {
                ComponentResourceManager resources = new ComponentResourceManager(typeof(Login));
                resources.ApplyResources(c, c.Name, new CultureInfo(lang));
            }
        }
        private void RefreshResources(Control ctrl, ComponentResourceManager res)
        {
            ctrl.SuspendLayout();
            res.ApplyResources(ctrl, ctrl.Name, CultureInfo.CurrentCulture);
            foreach (Control control in ctrl.Controls)
                RefreshResources(control, res); // recursion
            ctrl.ResumeLayout(false);
        }
        private void button5_Click(object sender, EventArgs e)
        {
            ComponentResourceManager resources = new ComponentResourceManager(typeof(Login));
            resources.ApplyResources(this, "en-US");
            RefreshResources(this, resources);
        }

Open in new window

0
 

Author Comment

by:juliodiz
ID: 34125244
This is the correct, sorry
private void RefreshResources(Control ctrl, ComponentResourceManager res)
        {
            ctrl.SuspendLayout();
            res.ApplyResources(ctrl, ctrl.Name, CultureInfo.CurrentCulture);
            foreach (Control control in ctrl.Controls)
                RefreshResources(control, res); // recursion
            ctrl.ResumeLayout(false);
        }
        private void button5_Click(object sender, EventArgs e)
        {
            ComponentResourceManager resources = new ComponentResourceManager(typeof(Login));
            resources.ApplyResources(this, "en-US");
            RefreshResources(this, resources);
        }

        private void button4_Click(object sender, EventArgs e)
        {
            ComponentResourceManager resources = new ComponentResourceManager(typeof(Login));
            resources.ApplyResources(this, "pt-BR");
            RefreshResources(this, resources);
        }

Open in new window

0
 

Author Comment

by:juliodiz
ID: 34125252
I click and anthing happens, dont change to us-EH,

any idea?
0
 
LVL 10

Accepted Solution

by:
hosneylk earned 500 total points
ID: 34125633
this?
private void ChangeLanguage(string lang)
        {
            ComponentResourceManager resources = new ComponentResourceManager(typeof(Form1));
            resources.ApplyResources(this, "$this");
            RefreshResources(this, resources, lang);
        }

        private void RefreshResources(Control ctrl, ComponentResourceManager res, string lang)
        {
            ctrl.SuspendLayout();
            res.ApplyResources(ctrl, ctrl.Name, new CultureInfo(lang));
            foreach (Control control in ctrl.Controls)
                RefreshResources(control, res); // recursion
            ctrl.ResumeLayout(false);
        }

        private void button5_Click(object sender, EventArgs e)
        {
            ChangeLanguage(this, "en-US");
        }

        private void button4_Click(object sender, EventArgs e)
        {
            ChangeLanguage(this, "pt-BR");
        }

Open in new window

0
 

Author Comment

by:juliodiz
ID: 34125726
Ok! Thanks again

But now error in the:

RefreshResources(control, res); = No overload for method RefreshResource
and
ChangeLanguage(this, "en-US"); = No overload for method ChangeLanguage

0
 

Author Comment

by:juliodiz
ID: 34125742
OK!

Now works!

Thank a lot! realy, thanks.

private void ChangeLanguage(string lang)
        {
            ComponentResourceManager resources = new ComponentResourceManager(typeof(Login));
            resources.ApplyResources(this, "$this");
            RefreshResources(this, resources, lang);
        }

        private void RefreshResources(Control ctrl, ComponentResourceManager res, string lang)
        {
            ctrl.SuspendLayout();
            res.ApplyResources(ctrl, ctrl.Name, new CultureInfo(lang));
            foreach (Control control in ctrl.Controls)
                RefreshResources(control, res, lang); // recursion
            ctrl.ResumeLayout(false);
        }

        private void button5_Click(object sender, EventArgs e)
        {
            ChangeLanguage("en-US");
        }

Open in new window

0
 

Author Comment

by:juliodiz
ID: 34125745
But, how i can pass this language to the next form?
0

Featured Post

Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Keyboard 2 33
Graphics 2 28
Regular expression help 2 25
Can I command line build a C# application? 6 32
In my previous two articles we discussed Binary Serialization (http://www.experts-exchange.com/A_4362.html) and XML Serialization (http://www.experts-exchange.com/A_4425.html). In this article we will try to know more about SOAP (Simple Object Acces…
Wouldn’t it be nice if you could test whether an element is contained in an array by using a Contains method just like the one available on List objects? Wouldn’t it be good if you could write code like this? (CODE) In .NET 3.5, this is possible…
In a recent question (https://www.experts-exchange.com/questions/28997919/Pagination-in-Adobe-Acrobat.html) here at Experts Exchange, a member asked how to add page numbers to a PDF file using Adobe Acrobat XI Pro. This short video Micro Tutorial sh…
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question