Search code examples
c#winformslocalizationmultilingual

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?


Solution

  • 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>