当前位置: 首页 > 面试题库 >

playframework 2.2 java:如何从子域设置语言(i18n)

丁鸿信
2023-03-14
问题内容

如何在Playframework 2.2(java)中不仅从用户浏览器设置而且从子域(应该具有更高的优先级)设置语言(i18n)?

以下应该工作:

  • example.com->英语或德语,具体取决于浏览器设置
  • en.example.com->强制使用英语
  • de.example.com->强制德语

用户应该能够在子域之间切换而不会丢失会话。

因为我有很多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是假设只更改文档的国家设置,还是也可以更改电子邮件语言?