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

myController有一个@Before设置langrouteArgs 的方法。此代码有效,我得到了/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 代码中。如果它为空,您只需设置语言。

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 标签来生成链接。输入将为id, text, 并生成具有正确属性的链接。看看http://www.playframework.com/documentation/1.2.5/templates(自定义 Java 标签部分)

希望能帮助到你。

于 2013-06-16T01:47:43.630 回答