Play 2.0中的本地化网址?

时间:2012-05-04 12:41:41

标签: url seo playframework-2.0

昨天我们在当地JUG播放了一个Play 2.0演示文稿,但我们无法确定是否可以使用本地化的URL(用于搜索引擎优化目的)。

例如/ help,/ hilfe等应指向同一个控制器,但模板应使用不同的语言内容呈现。

在Play 2.0中有没有办法做到这一点?

4 个答案:

答案 0 :(得分:3)

我喜欢你的问题,因为它至少对我来说很有创意:)检查这种方法对我有用:

<强> 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 :(得分:1)

(这与previous answer中的方法不同,因此作为单独的方法添加)

您还可以在DB中创建某种mapping table,您可以在其中存储具有不同参数的记录的完整路径:

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文件的末尾,然后它会尝试在映射表中找到它或将返回notFound()结果。

答案 2 :(得分:1)

您使用GlobalSettings.onHandlerNotFound()并检查它是否是网址的翻译版本。然后你可以进行重定向。但是,这会以默认语言的网址结束。

更干净的是使用GlobalSettings.onRouteRequest,您可以在其中实现自己的逻辑来获取处理程序。

此外,您可以创建自己的路由器。我在google-groupsscala solution进行了讨论。

答案 3 :(得分:0)

据我所知,它可以在Play 1.2.x中使用,而不是2.x.我的意思是,如果没有复制文件中的映射,为EN添加一个,为DE添加一个等,则不可能。

SEO的一个更简单的替代方案可能是&#34;假的&#34;站点地图文件中的网址。

所以你的Routes文件有

GET  /action/:param/:seo-string   Controller.methodAction(param)

因此在处理过程中会忽略seo-string,并在Sitemaps文件中生成多个链接:

/action/1/english-text
/action/1/german-text

这会设置搜索引擎。对于用户,他们会以正确的语言查看网址,您可以使用HTML 5历史记录更改网址。

这是额外的工作,但如果你真的想要它......