C#中的多语言支持

时间:2010-05-31 04:40:52

标签: c# winforms localization multilingual

我在c#windows Appliation中开发了一个示例软件。如何使其成为多语言支持软件。

例如:其中一个消息框显示“欢迎使用示例应用程序”

我在chinees操作系统中安装了该软件,但它只显示英文信息。

我正在使用“字符串表”(资源文件)来解决这个问题。

在字符串表中,我需要为英语和中文的每条消息创建条目。

及时的过程。还有其他办法吗?

4 个答案:

答案 0 :(得分:4)

为下面提到的每种语言创建资源文件。

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

基于用户的语言/当前文化,从相应的语言资源文件中读取值并显示在标签或MessageBox中。这是一些示例代码:

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;

        }

    }

}

在asn asp.net应用程序中,您将使用它如下:

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

你现在要把:

<span class="label"><%=Translate.Message("User") %>:</span>

答案 1 :(得分:2)

如果你打算像Ram建议那样使用资源文件,那么有一篇关于本地化的博文 here: ASP.NET MVC 2 Localization complete guide。 (我应该提到这是针对Asp.net mvc 2,它可能有用也可能没有用)你仍然需要花时间为每种语言制作表格。我之前没有使用任何其他方法,希望你找到一些有用的东西

答案 2 :(得分:0)

您可以使用资源文件来执行此操作。您需要为每种语言创建资源文件,并且可以在运行应用程序时使用适当的文件。

答案 3 :(得分:0)

Resharper 5.0可以大大缩短您在本地化上花费的时间。它具有允许轻松移动到资源的功能,并且它强调(如果选择)所有可本地化的字符串,因此很难错过它们。

鉴于它有30天的试用期(完整版)你可以简单地安装它,做你的工作并卸载如果你负担不起,但我建议保留它:-)它真的值得它的价格。 / p>

  

软件本地化和全球化一直是艰难的,有时是开发人员不需要的任务。 ReSharper 5通过在C#和VB.NET代码以及ASP.NET和XAML标记中为resx文件和资源使用提供完整的堆栈功能,极大地简化了资源的使用。
  专用功能包括将字符串移动到资源,查找资源用法和其他导航操作。结合重构支持,检查和修复,您将获得方便的本地化环境。