使用Babel和webapp2

时间:2017-01-21 23:50:32

标签: google-app-engine localization locale webapp2 babel

我最近在我的GAE / webapp2网站上添加了Babel,但它确实有效,但我对获取该地区的正确方法感到困惑。

在这个answer中,他获得了self.request.get('locale', 'es_ES')的区域设置,但只有在?locale=fr_FR中有类似self.request.headers.get('Accept-Language').split(",") 的内容时,这似乎才有效。我从未见过有人在网址中设置了区域设置。有没有理由从URL获取语言环境?

从标题中获取区域设置似乎更有意义:

locale = self.request.headers.get('Accept-Language').split(",")[0]
i18n.get_i18n().set_locale(locale)

一个怪癖是浏览器为区域设置提供连字符和小写字母(" fr-fr")但是Babel期望一个下划线和混合大小写(fr_FR)。如果浏览器仅提供" fr-fr"的区域设置标题,则以下内容:

n

最终会使用默认语言而不是法语,因为Babel正在寻找" fr_FR"。我应该从标题中获取区域设置并将连字符转换为下划线和小写字母转换为混合大小写?似乎巴贝尔应该为我做这件事。

(我知道标题可能有多个区域设置,我应该检查它们,但我仍然需要为每个区域设置进行转换。)

2 个答案:

答案 0 :(得分:1)

我会根据自从我提出问题以来所做的研究提供答案。

如果您要提供允许用户更改区域设置的链接(例如,语言下拉列表),那么将区域设置放在URL中似乎是一个很好的解决方案。对于我的情况,我只对自动检测语言环境感兴趣,所以我不会从URL中实现获取语言环境。

关于不同的语言环境格式(浏览器与Babel),您似乎只需转换自己。 answer有很好的建议。

对于我的用例,我不太可能很快在不同国家/地区为同一种语言实现多个语言环境(例如,我将实现fr_FR但不实现任何其他fr_ *)。我将采用该语言环境的前两个字母并删除其余部分,这使选项更加简单。

答案 1 :(得分:0)

我以这种方式在我的代码中设置了语言环境。


def get_move():
    advice  = 'Please enter your move in two integers, vertical, then horizontal.  Use positive numbers for up and right, negative for down and left.'
    example = 'For example, an input of \'22\' would be 2 moves vertically, and 2 moves horizontally.'
    move = input(advice + example)
    move = move.split()
    x_move,y_move=move
    x_move = int(x_move)
    y_move = int(y_move)
    return x_move, y_move, move