2012-05-04 3 views
5

昨日私たちのローカルJUGにPlay 2.0のプレゼンテーションがありましたが、(SEOの目的で)ローカライズされたURLを使用できるかどうかはわかりませんでした。Play 2.0のローカライズされたURL?

たとえば、/ help、/ hilfeなどは同じコントローラを指している必要がありますが、テンプレートは異なる言語のコンテンツでレンダリングする必要があります。

Play 2.0でこれを行う方法はありますか?

+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> 
0

は、それは私の知る限り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のいくつかの種類を作成することができますそれは余分な作業ですが、あなたが本当にそれをしたい場合は...

1

(これは、したがって、別の一人として追加、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()の結果を返します。

1

GlobalSettings.onHandlerNotFound()から使用して、URLの翻訳バージョンであることを確認してください。その後、リダイレクトを行うことができます。しかし、これはデフォルト言語のURLで終わります。

さらにクリーナーは、独自のロジックを実装してハンドラを取得できるGlobalSettings.onRouteRequestを使用することです。

また、独自のルータを作成することもできます。 google-groupsには、scala solutionというディスカッションがありました。

関連する問題