首先对不起我的英语......
我正在搜索所有互联网,但我无法找到问题的答案。我尝试了一切,查看了文档,教程,视频等......
我在页面顶部放了两个按钮,用户可以更改语言,但我无法抓住控制器上的值,我做了所有事情,但从未处理过。我是新玩的:(请帮忙...... !!
我认为这是:
<`form method="GET" action="@{Application.language("value")}"/`>
<`input> name="language" type="submit" value="en" title="@Messages("button.en")" </`>
<`input> name="language" type="submit" value="es" title="@Messages("button.es")" </`>
<`/form`>
这在我的控制器上:
public static void language(String idiom) {
String key = null;
key = idiom;
if(key.isEmpty()){
} else {
Lang.apply(idiom);
}
}
但是当我试图抓住控制器上的值时,我总是收到这条消息:
[RuntimeException:无法识别的语言:值]
答案 0 :(得分:0)
你的HTML看起来有点怀疑,你可以清理它并重新发布你的控制器和路由吗?
与此同时,这大致是我期望看到的,以确保您的参数正确传递:
路线:
GET /language @controllers.LanguageController.index(language: String)
控制器:
LanguageController {
...
public Result index(String language) {
if(language != null && !language.isEmpty()){
Lang.apply(idiom);
}
... return
}
}
要在Play 2中进行设置,请参阅此帖子 playframework 2.2 java: how to set language (i18n) from subdomain
答案 1 :(得分:0)
我在下面的评论中做了一点修改,这就是我现在的样子。
路线:
POST / @controllers.LanguageController.changeLanguage(language: String)
查看:
<form method="POST" action="changeLanguage("value")"/>
<input name="language" type="submit" value="en" title="English" </>
<input name="language" type="submit" value="es" title="Spanish" </>
</form>
控制器:
public class LanguageController扩展Controller {
public Result changeLanguage(String language)
{
if(language != null && !language.isEmpty())
{
Lang.apply("en");
}
else
{
String idiom = language;
Lang.apply(idiom);
}
return ok(index.render(""));
}
现在我有这条消息错误:
对于请求'POST / changeLanguage(value)'
页面错误显示了LanguageController的路径:
POST/@controllers.LanguageController@.changeLanguage(language:String)
答案 2 :(得分:0)
你在conf文件夹中有消息。{lang}(如messages.es或messages.en)吗?
在application.conf中,有效的lang应该存在,如;
application.langs =&#34;恩,胚胎&#34;
如果在扩展Controller的任何类中都有这些,那么可以运行此方法;
changeLang(&#34; ES&#34);
但在你的情况下,你的函数中的成语似乎是&#34;值&#34; 因此,如果您可以将表单标题替换为;
&LT; form method="GET" action="/language"/
&GT;
(假设/语言将路由到您的方法)
并将html输入的名称替换为&#34; idiom&#34; 所以你将传递正确的输入值。
答案 3 :(得分:0)
在播放2.8中,不赞成使用Http.Context,这会导致与响应对象的交互发生更改。
要更改语言,您需要执行以下操作:
说明代码:
private final MessagesApi messagesApi;
@Inject
public LoginController(MessagesApi messagesApi) {
this.messagesApi = messagesApi;
}
// ... now in the method invoked by the router
Lang lang = Lang.apply("en"); //english language
return ok().withLang(lang.toLocale(), messagesApi);
这会在整个会话的剩余时间内更改语言,因为播放会将语言存储在Cookie PLAY_SESSION中。如果只想更改一个特定请求,则必须更改请求对象而不是结果对象。