Solved

Multi-Language C#

Posted on 2010-11-11
12
724 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
 

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
IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 

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

What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

Join & Write a Comment

Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
Sending a Secure fax is easy with eFax Corporate (http://www.enterprise.efax.com). First, Just open a new email message.  In the To field, type your recipient's fax number @efaxsend.com. You can even send a secure international fax — just include t…
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.

759 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

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now