我正在使用Play Framework 1.2.4,我想知道是否有办法为每种语言设置不同的路由,这些路由指向相同的控制器/操作(特别是针对SEO)。
例如,我想:
GET /en/how-it-works myController.howItWorks
GET /fr/comment-ca-marche myController.howItWorks
问题是反向路由从路由文件的顶部开始,所以如果我在网站的/fr
部分,链接@{myController.howItWorks}
将导致{{1} }
要完成我的案例,我使用参数/en/how-it-works
作为routeArgs,这是我的路径文件:
lang
GET /{lang}/how-it-works myController.howItWorks
有myController
方法设置@Before
routeArgs。这段代码正常,我得到了lang
,如果我将语言更改为fr /en/how-it-works
我在路线文件中尝试了这个,但它不起作用
/fr/how-it-works
%{if (lang == 'fr') { }%
GET /{lang}/comment-ca-marche myController.howItWorks
%{ } else { }%
GET /{lang}/how-it-work myController.howItWorks
%{ } }%
参数似乎是lang
,因此我无法动态选择正确的路线。
我想知道是否有人遇到同样的问题,
感谢您的帮助
(对不起我的英语......)
答案 0 :(得分: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标记来生成链接。输入将为id
,text
,并生成具有正确属性的链接。查看http://www.playframework.com/documentation/1.2.5/templates(自定义Java标记部分)