2

私は Play Framework 1.2.4 を使用していますが、同じコントローラー/アクション (特に SEO) を指す言語ごとに異なるルートを持つ方法があるかどうかを知りたいと思っていました。

たとえば、私は欲しい:

GET /en/how-it-works           myController.howItWorks
GET /fr/comment-ca-marche      myController.howItWorks

問題は、逆ルーティングがルート ファイルの先頭から始まることです。そのため /fr、ウェブサイトの一部にいる場合、リンク@{myController.howItWorks}は次のようになります。/en/how-it-works

私の場合を完了するために、パラメーターlangを routeArgs として使用しています。これが私のルート ファイルです。

GET /{lang}/how-it-works        myController.howItWorks

myControllerrouteArgs@Beforeを設定するメソッドがあります。langこのコードは機能してい/en/how-it-worksます。言語を fr に変更すると、/fr/how-it-works

ルートファイルでこれを試しましたが、うまくいきません

%{if (lang == 'fr') {   }%
GET /{lang}/comment-ca-marche  myController.howItWorks
%{ } else { }%
GET /{lang}/how-it-work        myController.howItWorks
%{ } }%

langパラメータはのようですnullので、正しいルートを動的に選択することはできません。同じ悩みを持っている人がいたら知りたいのですが、

ご協力ありがとうございました

(そして私の英語でごめんなさい...)

4

1 に答える 1

0

それはうまくいくはずです。

私は次のルートを持っています

GET     /{lang}/users/list                      Application.generateLink

および関連するコントローラーメソッド

public static void index(String lang) { ... }

私からしてみれば

<li class=""><a href="@{UserManager.index(lang)}">&{'navigation.users.view'}</a></li>

やや単純化された changeLanguage コードで。null の場合は、言語を設定するだけです。

public static void changeLanguage(String lang) {
    if (lang != null) {
        String property = Play.configuration.getProperty("application.langs");
        if (property.contains(lang)) {
            Lang.change(lang);
        }
    } else {
        lang = "en";
        Lang.change(lang);
    }
    String replacement = String.format("/%s/", lang);
    if (lang.equals("en")) {
        redirect(request.headers.get("referer").value().replace("/fr/", replacement));
    } else {
        redirect(request.headers.get("referer").value().replace("/en/", replacement));
    }
}

言語を変更すると、URL で機能します。

リンクを生成するカスタム Java タグを作成できます。入力はidtextであり、正しい属性を持つリンクを生成します。http://www.playframework.com/documentation/1.2.5/templates (カスタム Java タグのセクション) をご覧ください。

それが役に立てば幸い。

于 2013-06-16T01:47:43.630 に答える