C#中的多语言支持

6
我已经开发了一个C# Windows应用程序的示例软件。如何将其变成支持多语言的软件。
例如:其中一个消息框显示“欢迎使用示例应用程序”。
我在中文操作系统上安装了该软件,但仅显示英文消息。
为了解决这个问题,我正在使用“字符串表”(资源文件)。
在字符串表中,我需要为每条信息创建英文和中文的条目。
这是一个耗时的过程。是否有其他方法来解决这个问题?

2
这里有一个不错的讨论帖子:https://dev59.com/TXVD5IYBdhLWcg3wAWoO - Inisheer
也可以在这里查看:http://msdn.microsoft.com/zh-cn/library/1021kkz0(v=VS.100).aspx - Inisheer
4个回答

4
为您想要支持的每种语言创建资源文件,如下所示。
根据用户的语言/当前文化,从相应的语言资源文件中读取值,并在标签或消息框中显示。以下是一些示例代码:
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;

        }

    }

}

在一个asp.net应用程序中,您可以按照以下方式使用它:
<span class="label">User:</span>

现在您需要放置:

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

2
如果您像Ram建议的那样使用资源文件,这里有一篇关于本地化的好博客文章:ASP.NET MVC 2本地化完全指南。(我应该提到这是针对Asp.net mvc 2的,可能有用,也可能无用)您仍然需要花时间为每种语言制作表格。我以前没有使用过其他方法,请希望您能找到有用的东西。

0

您可以使用资源文件来实现。您需要为每种语言创建一个资源文件,并在运行应用程序时使用适当的资源文件。


0

Resharper 5.0可以大大提高您在本地化方面花费的时间。它具有使移动资源更容易的功能,并且如果选择了,它会强调所有可本地化的字符串,因此很难错过。

考虑到它有30天试用(完整版),您可以简单地安装它,完成工作并卸载,如果您付不起它的费用,但我建议保留它:-) 它真的物有所值。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接