昨日私たちのローカルJUGにPlay 2.0のプレゼンテーションがありましたが、(SEOの目的で)ローカライズされたURLを使用できるかどうかはわかりませんでした。Play 2.0のローカライズされたURL?
たとえば、/ help、/ hilfeなどは同じコントローラを指している必要がありますが、テンプレートは異なる言語のコンテンツでレンダリングする必要があります。
Play 2.0でこれを行う方法はありますか?
昨日私たちのローカルJUGにPlay 2.0のプレゼンテーションがありましたが、(SEOの目的で)ローカライズされたURLを使用できるかどうかはわかりませんでした。Play 2.0のローカライズされたURL?
たとえば、/ 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>
は、それは私の知る限り2.xでは、プレイ1.2.xのでは不可能でした。あなたのファイルのマッピングを複製しないで、ENに1つ、DEに1つを追加することはできません。
より簡単なSEOの選択肢は、あなたのサイトマップファイルのURLを "偽造"することです。
だからあなたのルートファイルが
GET /action/:param/:seo-string Controller.methodAction(param)
を持っているので、seo-string
は、処理中に無視されます、そして、あなたはあなたのサイトマップファイルにいくつかのリンクを生成します。
/action/1/english-text
/action/1/german-text
これは、検索エンジンを設定します。ユーザーは、適切な言語でURLを参照できるように、HTML 5の履歴を使用してURLを変更できます。
ます。また、DB内mapping table
のいくつかの種類を作成することができますそれは余分な作業ですが、あなたが本当にそれをしたい場合は...
(これは、したがって、別の一人として追加、previous answerとは異なるアプローチである)
あなたは異なるのparamsを持つレコードへの完全なパスを格納することができますここで、あなたはDynamic parts spanning several /
(参照を使用できるように、ルールを使用する必要がconf/routes
ファイルよりも
urlpath record_id lang
/help/some-topic 12 en
/hilfe/ein-topic 12 de
をrouting doc)すなわち:
GET /:topic controller.Application.customDbRouter(topic:String)
あなたはまた、両方の混在させることができる
- NO「静的な」ルールは使用できなくなります場合は、あなたのconf/routes
ファイルの最後にルールの上に置くことによって、カスタム1と標準のルーティングmechanismusを、それを見つけようとしますそれはマッピングテーブルにあるか、notFound()
の結果を返します。
GlobalSettings.onHandlerNotFound()から使用して、URLの翻訳バージョンであることを確認してください。その後、リダイレクトを行うことができます。しかし、これはデフォルト言語のURLで終わります。
さらにクリーナーは、独自のロジックを実装してハンドラを取得できるGlobalSettings.onRouteRequestを使用することです。
また、独自のルータを作成することもできます。 google-groupsには、scala solutionというディスカッションがありました。
興味深い質問です。 –