Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 800
  • Last Modified:

Multi-Language C#

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
juliodiz
Asked:
juliodiz
  • 8
  • 4
1 Solution
 
juliodizAuthor Commented:
So i try this one, but inside the groupbox the label doesnt change
0
 
hosneylkCommented:

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
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
juliodizAuthor Commented:
Thanks, but the CurrentLocale does not exist in the current context.

How i get the current locale?
0
 
hosneylkCommented:
try using this instead

CultureInfo.CurrentCulture
0
 
juliodizAuthor Commented:
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
 
juliodizAuthor Commented:
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
 
juliodizAuthor Commented:
I click and anthing happens, dont change to us-EH,

any idea?
0
 
hosneylkCommented:
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
 
juliodizAuthor Commented:
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
 
juliodizAuthor Commented:
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
 
juliodizAuthor Commented:
But, how i can pass this language to the next form?
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 8
  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now