我正在建立一个网络商店,我正在实现语言选择以及CMS。我还必须向网站管理员提供能够通过CMS编辑页面的方法。
这并不是问题所在。
问题是我应该如何为这些页面建立我的表格。我已经做了我的数据库设计,但没有考虑到网页的一部分。
对于页面(称为网页)和特定于语言或文化的信息(称为Webpages_local),我已经有了下表结构,这些信息在所有语言中都是相等的。

属性是,可以添加或删除,这样我就可以轻松、动态地执行CRUD操作了?
我使用具有以下url结构的MVC4和剃刀语法:
url: "{language}/{controller}/{action}/{id}"我现在主要担心的是,当访问者按下(例如,指向About页面的链接)时,我不确定如何显示页面的特定语言内容。
也许可以使用url的控制器部分,并将其作为键保存在我的网页表和筛选器以及所选的语言上?
因此,当访问者访问http://example.com/nl/About时,我在AboutController中检索" nl“和”约“,当然先过滤它们,然后通过查询数据库选择正确的nl内容?
从技术上讲,我该怎么做?
发布于 2012-12-27 00:31:26
我将使用OnActionExecuting来处理检索lang进程,如下所示:
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
#region set Language
var lang = string.Empty;
if (filterContext.RouteData.Values["lang"] != null && !string.IsNullOrWhiteSpace(filterContext.RouteData.Values["lang"].ToString()))
{
// set the culture from the route data (url {lang})
lang = filterContext.RouteData.Values["lang"].ToString();
switch (lang)
{
case "es":
break;
case "en":
break;
default:
lang = "es";//default language
filterContext.RouteData.Values["lang"] = lang;
filterContext.HttpContext.Response.Redirect("/");
break;
}
}
else
{
//set default language
lang = "es";
filterContext.RouteData.Values["lang"] = lang;
}
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(lang);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(lang);
#endregion
base.OnActionExecuting(filterContext);
}然后,在代码中的任何地方,您只需阅读Thread.CurrentThread.CurrentCulture (这将是您的全局lang指示器),以显示正确的语言。
更新--知道我理解你的观点=)
如果页面将动态创建,那么每个页面就不会有一个ActionResult,只需要一个ActionResult,如下所示:
public ActionResult ShowPage(int id,string slug)
{
//Use the slug to check for url attacks and ensure 301 redirections to the correct url
var page = db.Webpages_local.First(p=> p.id == id
&& p.culture.name == Thread.CurrentThread.CurrentCulture);
return View(page);
}出于SEO的原因,我建议您定义一条路线,如:
routes.MapRoute(
name: "LocalizedPages",
url: "{lang}/p/{slug}/{id}",
defaults: new { controller = "Page", action = "Show", id = UrlParameter.Optional },
constraints: new { lang = @"(es|en|fr|nl)" }
);给你的网址是:
/nl/p/about/1 //the p is just an identifier for 'page', to differentiate this routes from others发布于 2012-12-26 22:23:22
我将添加一个名为language或类似于您的表的列,而不是有多个表。
然后,您的控制器可以在您的菜单表中找到所请求的语言键后获取正确的页面,然后它可以读取您的网页表中的内容。
https://stackoverflow.com/questions/14046890
复制相似问题