ASP.NET数据库本地化

时间:2011-08-31 20:30:15

标签: c# asp.net database localization web

我正在开发一个将在多个国家/地区分发的网站,但每个县都应该拥有自己的网站。我的计划是为每个国家/地区建立一个不同的数据库(具有相同的结构),但如何根据他们访问该网站所在的县选择使用哪个数据库。

我见过其他网站使用相同的原则,例如他们有.com和.co.uk地址,无论你去哪个网站,都会向你提供本地化的内容。这是怎么做到的?是否可以根据浏览器国家/地区自定义数据库连接字符串。

这是我第一次制作一个多国家网站,试图尽可能多地学习本地化

2 个答案:

答案 0 :(得分:2)

我强烈建议您不要为每种语言使用不同的数据库。 事实上,这将非常违反DRY原则,因为您必须重复每个数据库中不依赖于语言的所有数据,如果您想更新其中一个字段,则必须在每个数据库中执行此操作。 / p>

我建议您使用ASP.NET的常规全局和本地资源。或者,如果您想将文本保留在数据库中,我建议保留一个包含所有数据的文本。

表中有许多类型的结构可以解释多种语言,并且它们之间的决定取决于您需要多少语言和其他因素。 这里有一篇关于一些策略的好文章:What's the best database structure to keep multilingual data?

对于自动选择语言的问题,我宁愿使用基于IP的用户所在的国家/地区,与Google和其他大型网站相同。为此,我从maxmind购买了IP数据库(50欧元),它易于实现且非常精确。

我希望这有帮助!

答案 1 :(得分:1)

您可以在“Global.asax.cs”文件的“Application_Start()”方法中编写以下代码,该文件根据浏览器获取国家/地区名称,并将“ConnectionString”存储在会话变量中。

    protected void Application_Start()
    {
        string[] languages = HttpContext.Current.Request.UserLanguages;

        if (languages != null && languages.Length > 0)
        {
            string language = languages[0].ToLowerInvariant().Trim();
            CultureInfo currentCulture = CultureInfo.CreateSpecificCulture(language);

            if (currentCulture != null)
            {
                RegionInfo regionInfo = new RegionInfo(currentCulture.LCID);
            }
        }

        switch (RegionInfo.CurrentRegion.Name)
        {
            case "...":
                Session["ConnectionString"] = "...";
                break;
        }
    }

    protected void Application_End()
    {
        Session.Clear();
    }

资源文件可用于存储所有连接字符串,而不是硬编码。

希望这可以帮助你!!