Playframework 如何为每种语言提供不同的路径

Playframework 如何为每种语言提供不同的路径,playframework,routes,playframework-1.x,lang,Playframework,Routes,Playframework 1.x,Lang,我正在使用Play Framework 1.2.4,我想知道是否有办法为每种语言提供不同的路径,这些路径指向相同的控制器/操作(特别是SEO) 例如,我想要: GET /en/how-it-works myController.howItWorks GET /fr/comment-ca-marche myController.howItWorks 问题是反向路由从路由文件的顶部开始,因此如果我在网站的/fr部分,链接@{myController.howItWork

我正在使用Play Framework 1.2.4,我想知道是否有办法为每种语言提供不同的路径,这些路径指向相同的控制器/操作(特别是SEO)

例如,我想要:

GET /en/how-it-works           myController.howItWorks
GET /fr/comment-ca-marche      myController.howItWorks
问题是反向路由从路由文件的顶部开始,因此如果我在网站的
/fr
部分,链接
@{myController.howItWorks}
将导致
/en/它如何工作

为了完成我的案例,我使用一个参数
lang
作为routeArgs,下面是我的路由文件:

GET /{lang}/how-it-works        myController.howItWorks
myController
有一个
@Before
方法来设置
lang
routeArgs。此代码正在工作,我得到了它的工作方式,如果我将语言更改为fr,我得到了它的工作方式

我在我的路由文件中尝试过这个,但不起作用

%{if (lang == 'fr') {   }%
GET /{lang}/comment-ca-marche  myController.howItWorks
%{ } else { }%
GET /{lang}/how-it-work        myController.howItWorks
%{ } }%
lang
参数似乎是
null
,因此我无法动态选择正确的路由。 我想知道是否有人也有同样的问题

谢谢你的帮助

(对不起,我的英语…)

应该有用

我有以下路线

GET     /{lang}/users/list                      Application.generateLink
以及相关的控制器方法

public static void index(String lang) { ... }
在我看来

<li class=""><a href="@{UserManager.index(lang)}">&{'navigation.users.view'}</a></li>
当您更改语言时,它在URL上工作

您可以创建一个自定义java标记来生成链接。输入将是
id
text
,并生成具有正确属性的链接。查看(自定义Java标记部分)


希望能有所帮助。

谢谢您的帮助,但我已经完成了这部分代码(我在routeArgs中设置了lang,并在route文件中得到了它)。我的问题是,我需要一个lang的路由:
{lang}/它的工作方式
{lang}/comment-ca-marche
指向同一个控制器/操作。目前我只有
fr/它是如何工作的
en/它是如何工作的
。啊,你需要插入某种id或常量,即可以是{lang}/{id}/{text}-根据id,你可以替换文本,但id需要保持不变。除非使用此解决方案,否则您将需要自己维护一个映射,该映射将进行转换(它的工作方式通常是来回移动)。这涉及更多,但应该是可行的。重要的是,您将拥有一个通用控制器,并且文本将根据语言进行更改。我怀疑你是否能有多条静态路线。也许其他人可以对此有所了解。请查看更新链接中的自定义Java文档。我认为它将提供中间层,您可以在其中生成正确的代码。
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));
    }
}