views:

577

answers:

5

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?

A: 

You can do it using resource files. You need to create resource file for each language and you can use the appropriate one while running the application.

Ram
Thank you Ram, Now i'm using this method only.... any other simple method?
Pramodh
A: 

Please see Introduction to International Applications in Visual Basic and Visual C#:

In Visual Studio .NET, there are two parts to creating a world-ready application: globalization, the process of designing applications that can adapt to different cultures, and localization, the process of translating resources for a specific culture.

Andrew Hare
+1  A: 

Creare Reources files for each language you want to give support for mentioned below.

alt text

Based on the language/currentculture of the user, read values from respective Language Resource file and display in label or MessageBog. 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>
this. __curious_geek
Thank you: now i'm using like this only.... no other way?
Pramodh
A: 

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

Kai
A: 

Resharper 5.0 can greatly improve the time you spend on localization. It has features that allows easy move to resource and it underlines (if chosen so) all strings that are localizable so it's harder to miss them.

Given that it has 30 days trial (full version) you can simply install it, do your job and uninstall if you can't afford it, but i would suggest to keep it :-) It's really worth it's price.

Software localization and globalization have always been tough and at times unwanted tasks for developers. ReSharper 5 greatly simplifies working with resources by providing a full stack of features for resx files and resource usages in C# and VB.NET code, as well as in ASP.NET and XAML markup.
Dedicated features include Move string to resource, Find usages of resource and other navigation actions. Combined with refactoring support, inspections and fixes, you get a convenient localization environment.

MadBoy