如何在Google App Engine上本地化应用?

时间:2010-03-30 11:50:36

标签: python django google-app-engine internationalization localization

在Google App Engine上本地化应用程序有哪些选择?你是如何使用Webapp,Django,web2py或[在此处插入框架]的。

1。可读URL和实体密钥名称

可读URL有利于可用性和搜索引擎优化(Stack Overflow是如何做到这一点的一个很好的例子)。在Google App Engine上,出于性能原因,建议使用基于密钥的查询。因此,优良作法是在URL中使用实体密钥名称,以便可以尽快从数据存储区中提取实体。

某些字符在URL(&,“,”等)中具有特殊含义。为了能够将键名用作URL的一部分,它们不应包含任何这些字符。目前我使用下面的函数创建关键名称:

import re
import unicodedata

def urlify(unicode_string):

    """Translates latin1 unicode strings to url friendly ASCII.

    Converts accented latin1 characters to their non-accented ASCII
    counterparts, converts to lowercase, converts spaces to hyphens 
    and removes all characters that are not alphanumeric ASCII.

    Arguments
        unicode_string:     Unicode encoded string.

    Returns
        String consisting of alphanumeric (ASCII) characters and hyphens.
    """

    str = unicodedata.normalize('NFKD', unicode_string).encode('ASCII',
                                                               'ignore')
    str = re.sub('[^\w\s-]', '', str).strip().lower()
    return re.sub('[-\s]+', '-', str)

这基本上是已批准字符的白名单。它适用于英语和瑞典语,但是对于非西方文字并且删除一些西方文字(如挪威语和丹麦语及其œ和ø)的信件将会失败。

有人可以推荐一种适用于更多语言的方法吗?删除有问题的字符(黑名单)会更好吗?

2。翻译模板

Django国际化和本地化是否适用于Google App Engine?是否还有必须执行的额外步骤?在使用Webapp时,是否可以将Django i18n和l10n用于Django模板?

Jinja2 template language provides integration with Babel。根据您的经验,这有多好?

您选择的模板语言可以使用哪些选项?

3。翻译的数据存储内容

从数据存储区提供内容(或将其存储到数据存储区)时:有没有比从HTTP请求中获取 accept_language 参数更好的方法,并将其与您为每个请求设置的语言属性相匹配实体?

2 个答案:

答案 0 :(得分:3)

关于第1点,实际上没有必要达到这样的长度:只需使用unicode密钥名称。它们将在数据存储区中编码为UTF-8。

关于第3点,有许多方法可以处理语言检测。当然accept_language应该是它的一部分,你会发现webob's accept_language support在这里特别有用(希望Django或你的选择框架有类似的东西)。然而,通常情况下,用户的浏览器的语言配置不正确,因此您需要确保用户有某种方式来覆盖检测到的语言 - 例如,每个页面上的链接都要更改语言,设置偏好cookie。

答案 1 :(得分:2)

关于第2点,几个月前我问a similar question。我设法使应用程序国际化,但只是内容,而不是网址(也没有计划这样做)。

我还添加了对代码所做的修订,以便人们可以看到我在使用此Google App Engine应用时所做的更改。看看我对接受的答案的第二个评论。

祝你好运另外2分!