昨日、地元のJUGで Play 2.0 のプレゼンテーションを行いましたが、(SEO 目的で) ローカライズされた URL を使用できるかどうかを判断できませんでした。
たとえば、/help、/hilfe などは同じコントローラーを指す必要がありますが、テンプレートは異なる言語コンテンツでレンダリングする必要があります。
Play 2.0 でこれを行う方法はありますか?
昨日、地元のJUGで Play 2.0 のプレゼンテーションを行いましたが、(SEO 目的で) ローカライズされた 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>
(これは前の回答とは異なるアプローチであるため、別のアプローチとして追加されます)
mapping table
さまざまなパラメータを持つレコードへのフルパスを保存できる、ある種のDBを作成することもできます。
urlpath record_id lang
/help/some-topic 12 en
/hilfe/ein-topic 12 de
ファイル内よりも、conf/routes
使用を許可するルールを使用する必要がありますDynamic parts spanning several /
(ルーティングドキュメントを参照)。
GET /:topic controller.Application.customDbRouter(topic:String)
'静的'ルールが使用できない場合は、ファイルの最後に上記のルールを配置することで、標準ルーティングメカニズムとカスタムルーティングメカニズムの両方を混在させることもconf/routes
できます。その後、マッピングテーブルでそれを見つけようとするか、notFound()
結果を返します。
私の知る限り、Play 1.2.x では可能でしたが、2.x では不可能でした。つまり、ファイル内のマッピングを複製せずに、EN 用に 1 つ、DE 用に 1 つ追加するなど、不可能です。
SEO のより簡単な代替手段は、サイトマップ ファイル内の URL を「偽造」することです。
したがって、Routes ファイルには
GET /action/:param/:seo-string Controller.methodAction(param)
処理では無視されるためseo-string
、サイトマップ ファイルにいくつかのリンクを生成します。
/action/1/english-text
/action/1/german-text
これにより、検索エンジンが設定されます。ユーザーには、適切な言語で URL が表示されるように、HTML 5 の履歴を使用して URL を変更できます。
余計な手間ですが、どうしても欲しいなら…