昨天我们在当地的JUG上有一个Play 2.0演示文稿,但我们无法弄清楚是否有可能有本地化的URL(用于SEO目的)。Play 2.0中的本地化网址?
例如/ help,/ hilfe等应指向相同的控制器,但模板应使用不同的语言内容呈现。
有什么办法可以在Play 2.0中做到这一点?
昨天我们在当地的JUG上有一个Play 2.0演示文稿,但我们无法弄清楚是否有可能有本地化的URL(用于SEO目的)。Play 2.0中的本地化网址?
例如/ help,/ hilfe等应指向相同的控制器,但模板应使用不同的语言内容呈现。
有什么办法可以在Play 2.0中做到这一点?
我喜欢你的问题,因为它是创造性的,至少对我来说:)检查这种方法,为我的作品:
conf/routes
:
GET /help controllers.Application.helpIndex(lang = "en")
GET /hilfe controllers.Application.helpIndex(lang = "de")
GET /help/:id controllers.Application.helpTopic(lang = "en", id: Long)
GET /hilfe/:id controllers.Application.helpTopic(lang = "de", id: Long)
controllers/Application.java
:
public static Result helpIndex(String lang) {
return ok("Display help's index in " + lang.toUpperCase());
}
public static Result helpTopic(String lang, Long id) {
return ok("Display details of help topic no " + id + " in " + lang.toUpperCase());
}
views/someView.scala.html
:
<a href="@routes.Application.helpIndex("en")">Help index</a><br/>
<a href="@routes.Application.helpIndex("de")">Hilfe index</a><br/>
<a href="@routes.Application.helpTopic("en", 12)">Help topic no 12</a><br/>
<a href="@routes.Application.helpTopic("de", 12)">Hilfe topic no 12</a>
很可能在播放1.2.x的,而不是在2.X据我所知。我的意思是,如果没有复制文件中的映射,不可能添加一个EN,一个DE等。
SEO更简单的替代方法可能是在您的Sitemaps文件中“伪造”URL。
所以你的路由文件有
GET /action/:param/:seo-string Controller.methodAction(param)
所以seo-string
将在处理被忽略,你生成你的站点地图文件的几个环节:
/action/1/english-text
/action/1/german-text
这样可以设置搜索引擎。对于用户,所以他们使用正确的语言查看网址,您可以使用HTML 5历史记录更改网址。
这是额外的工作,但如果你真的想要它......
(这比previous answer不同的方法,因此添加单独的一个)
您还可以创建在DB某种mapping table
在这里你可以存储与不同PARAMS完整路径记录:
urlpath record_id lang
/help/some-topic 12 en
/hilfe/ein-topic 12 de
比conf/routes
文件,你需要使用规则,允许您使用Dynamic parts spanning several /
(见routing doc),即:
GET /:topic controller.Application.customDbRouter(topic:String)
你也可以混合两种 - 用你的conf/routes
文件的末尾上面的规则将自定义一个标准的路由mechanismus如果没有“静态”的规则将是可用的,那么它会尝试找到它在映射表中或将返回notFound()
结果。
您可以使用GlobalSettings.onHandlerNotFound()并检查它是否是网址的翻译版本。然后你可以重定向。然而,这以默认语言的网址结束。
更清洁的人会使用GlobalSettings.onRouteRequest您可以在其中实现自己的逻辑来获取处理程序。
此外,您可以创建自己的路由器。在google-groups与scala solution讨论。
有趣的问题。 –