如何在Playframework 2.2(java)中不仅从用户浏览器设置而且从子域(应该具有更高的优先级)设置语言(i18n)?
以下应该工作:
用户应该能够在子域之间切换而不会丢失会话。
因为我有很多Java控制器,所以如果解决方案在集中的地方工作(例如Global.java,它的过滤器可能在scala中),那就太好了。
您可以为此使用超类的ie changeLang(String code)
方法play.mvc.Controller
。
然后,您需要告诉您的语言解析器,哪个域使用我们默认的语言,为此使用探查application.conf
或数据库记录。接下来,根据您要实现的目标,只需使用Global类来拦截您的所有请求,或者创建一个简单的操作即可更改语言,然后它们将返回同一页面(因此用户可以自己决定要使用哪种语言)
。
这是一种基于Cookie的机制,因此我不确定是否不需要执行强制页面重新加载(即,通过重定向到同一路径),我想您会告诉我们何时进行检查; )
编辑:
那可能就是 喜欢
public Action onRequest(final Http.Request request, final Method actionMethod) {
if (request.host().equals("de.yourdomain.tld")
&& (request.cookie("PLAY_LANG") == null || !request.cookie("PLAY_LANG").value().equals("de"))) {
return new Action.Simple() {
public Result call(Http.Context ctx) throws Throwable {
ctx.changeLang("de");
return redirect(request.path());
}
};
} else {
return super.onRequest(request, actionMethod);
}
}
只需确保已de
添加lang
application.conf
,否则您将获得漂亮的,无尽的重定向循环。这PLAY_LANG
是用于存储所选语言的典型Play曲奇名称。
内刀片-。 在。 如果我跑: 我得到正确的欢迎刀片页面与正确的翻译。 另一条路线: 如果我运行
你好,我将获得一个子域division.company.com的访问权限,我将不得不在合同中指出它的位置。我不想要求合同更新,因为每次我需要切换服务器时,子域都指向哪里。 我希望有一个顶级的DNS一样的子域控制。 a)我是否使用某种路由/代理服务器? b) 有没有办法进行动态DNS分配(顶级域端的单次最小配置)? c) 我所寻找的DDNS提供商可能是这样的吗https://www.dynu.com
在设定期间您可选择用于 M600 的语言。 您可选择以下语言之一: 广东话(香港) 丹麦语 荷兰语 英语(美国、英国) 芬兰语 法语(法国、加拿大) 德语 印度尼西亚语 意大利语 日语 韩语 中文(台湾) 挪威语(巴克摩) 波兰语 葡萄牙语(巴西) 俄语 西班牙语(美国、西班牙、拉美) 瑞典语 泰语 土耳其语 越南语 请注意,您的智能手表最终会将您的语言设定复制到手机。换句话说,即如您在 M600
问题内容: 我想设置和朋友使用的JSTL语言环境。我知道可以使用,但我需要动态地进行操作(取决于从数据库中检索到的用户数据),并且更喜欢Java代码- 确切地说是一个过滤器类。 我以为将session属性设置为所需的实例可以解决问题,但是它被忽略了:JSTL标记继续使用浏览器的语言环境。 我确认没有页面上下文或相同名称的请求属性。 那我在做什么错?还是我真的需要通过JSP做到这一点? 阅读JSTL
我在AWS ECS有以下设置: null
emailNotification是假设只更改文档的国家设置,还是也可以更改电子邮件语言?