我正在开发一个将在多个国家/地区分发的网站,但每个县都应该拥有自己的网站。我的计划是为每个国家/地区建立一个不同的数据库(具有相同的结构),但如何根据他们访问该网站所在的县选择使用哪个数据库。
我见过其他网站使用相同的原则,例如他们有.com和.co.uk地址,无论你去哪个网站,都会向你提供本地化的内容。这是怎么做到的?是否可以根据浏览器国家/地区自定义数据库连接字符串。
这是我第一次制作一个多国家网站,试图尽可能多地学习本地化
答案 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();
}
资源文件可用于存储所有连接字符串,而不是硬编码。
希望这可以帮助你!!