ASP.NET MVC 数据库本地化

6
我正在开发一个多语言企业网站,希望将本地化信息存储在数据库中。
我已经阅读了以下文章,觉得很好,但我个人认为这是一种负担,我可以更轻松地实现相同的效果: 扩展ASP.NET 2.0资源提供程序模型 我已经建立了一些基础,但不确定我的方法是否正确。基本上,我创建了一个服务并注册到DI中。
public interface ILocalizedStringProvider
{
    string GetLocalizedString(string key);

    string GetLocalizedString(string key, string deafultValue);
}

我也创建了一个类似这样的Html助手

public static MvcHtmlString LocalizedString(this HtmlHelper helper, string key, string defaultValue)
    {            
        if (string.IsNullOrEmpty(defaultValue)) return new MvcHtmlString("");
        if (string.IsNullOrEmpty(key)) return new MvcHtmlString(defaultValue);

        ILocalizedStringProvider localizedStringProvider = DependencyResolver.Current.GetService<ILocalizedStringProvider>();

        if (localizedStringProvider == null)
        {
            return MvcHtmlString.Create(defaultValue);
        }

        string val = localizedStringProvider.GetLocalizedString(key, defaultValue);

        if (string.IsNullOrEmpty(val))
        {
            return MvcHtmlString.Create(defaultValue);
        }

        return MvcHtmlString.Create(val);
    }

然后,视图中只需简单调用该助手。

首先,我想知道这种方法是否好,并且是否不是反模式。

其次,我的担忧在于这一行:

ILocalizedStringProvider localizedStringProvider = DependencyResolver.Current.GetService<ILocalizedStringProvider>();

也许最好使用构造函数注入来解决控制器中的ILocalizedStringProvider服务,并让控制器使用本地化信息填充ViewBag?

谢谢!


你为什么要将本地化存储在数据库中? - Matija Grcic
这是一个要求,翻译团队有单独的应用程序。 - The Tech Geek
@weirdo - 他们为什么需要一个应用程序?他们为什么不能编辑HTML并提供本地化视图呢?毕竟,您通常必须更改字段的大小以适应不同大小的单词。 - Erik Funkenbusch
首先,这个应用程序在版本上是动态增长的,很难在每个新版本中提供视图进行翻译;其次,翻译人员不具备技术背景,因此项目经理决定让双方工作更轻松、减少错误。 - The Tech Geek
为什么不直接使用资源文件呢?它们非常擅长这个,非技术人员也可以轻松编辑。你难道要为了获取本地化字符串而进行数据库往返吗? - Dominic St-Pierre
2个回答

2
您可以使用我的Griffin.MvcContrib项目。它包含一个用于将本地化存储在数据库中的MS SqlServer实现,可供直接使用。
介绍:http://www.codeproject.com/Articles/352583/Localization-in-ASP-NET-MVC-with-Griffin-MvcContri 管理 此外,还有一个管理区域,您可以使用它来管理本地化内容:

enter image description here

SQL Server安装设置

https://github.com/jgauffin/griffin.mvccontrib/wiki/SqlServer

源代码

该项目可在Github上找到:https://github.com/jgauffin/griffin.mvccontrib


谢谢您的回复,但我之前已经找到了您的项目,并决定不使用它,因为核心实现需要我的控制器继承自您的基础控制器。由于MVC有一个非常好的功能——操作过滤器,我真的不想使用基础控制器的概念。 - The Tech Geek
你搞错了,我不需要你继承一个基础控制器。 - jgauffin

-1
这里有一个非常好的资源: http://west-wind.com/westwind.globalization/ 它提供了以下功能:
  • 数据库存储
  • Resx导入/导出
  • 强类型类生成
通过Nuget可以快速将其添加到您的项目中,并且您可以获得完整的源代码。真是太棒了!

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