Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Multilanguage Support In C#

I've developed a sample software in c# windows Appliation. How to make it a multilingual supporting software.

For Example: One of the message boxes display " Welcome to sample application"

i installed the software in a chinees os , but it displays the message in english only.

i'm using "string table" (Resource File) for this problem.

In string table i need to create entry for each messages in english and Chinees.

its a timely process. is there any other way to do this?

like image 480
Thorin Oakenshield Avatar asked May 31 '10 04:05

Thorin Oakenshield


2 Answers

Create Resources files for each language you want to give support for mentioned below.

alt text http://geekswithblogs.net/images/geekswithblogs_net/dotNETPlayground/resx.gif

Based on the language/currentculture of the user, read values from respective Language Resource file and display in label or MessageBox. Here's some sample code:

public static class Translate

{

    public static string GetLanguage()

    {

        return HttpContext.Current.Request.UserLanguages[0];

    }



    public static string Message(string key)

    {

        ResourceManager resMan = null;

        if (HttpContext.Current.Cache["resMan" + Global.GetLanguage()] == null)

        {

            resMan = Language.GetResourceManager(Global.GetLanguage());

            if (resMan != null) HttpContext.Current.Cache["resMan" + Global.GetLanguage()] = resMan;

        }

        else

            resMan = (ResourceManager)HttpContext.Current.Cache["resMan" + Global.GetLanguage()];



        if (resMan == null) return key;



        string originalKey = key;

        key = Regex.Replace(key, "[ ./]", "_");



        try

        {

            string value = resMan.GetString(key);

            if (value != null) return value;

            return originalKey;

        }

        catch (MissingManifestResourceException)

        {

            try

            {

                return HttpContext.GetGlobalResourceObject("en_au", key).ToString();

            }

            catch (MissingManifestResourceException mmre)

            {

                throw new System.IO.FileNotFoundException("Could not locate the en_au.resx resource file. This is the default language pack, and needs to exist within the Resources project.", mmre);

            }

            catch (NullReferenceException)

            {

                return originalKey;

            }

        }

        catch (NullReferenceException)

        {

            return originalKey;

        }

    }

}

In asn asp.net application, you'd use it as following:

<span class="label">User:</span>

You now would put:

<span class="label"><%=Translate.Message("User") %>:</span>
like image 184
this. __curious_geek Avatar answered Oct 14 '22 04:10

this. __curious_geek


If you were going to use resource files as Ram suggested, there is a good blog post about localisation here: ASP.NET MVC 2 Localization complete guide. (I should have mentioned that this is for Asp.net mvc 2, it may or may not be useful) You still have to spend time making tables for each language. I have not used any other approach for this before, hope you find something useful

like image 33
Kai Avatar answered Oct 14 '22 04:10

Kai