在Google App Engine上本地化应用程序有哪些选择?你是如何使用Webapp,Django,web2py或[在此处插入框架]的。
可读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)
这基本上是已批准字符的白名单。它适用于英语和瑞典语,但是对于非西方文字并且删除一些西方文字(如挪威语和丹麦语及其œ和ø)的信件将会失败。
有人可以推荐一种适用于更多语言的方法吗?删除有问题的字符(黑名单)会更好吗?
Django国际化和本地化是否适用于Google App Engine?是否还有必须执行的额外步骤?在使用Webapp时,是否可以将Django i18n和l10n用于Django模板?
Jinja2 template language provides integration with Babel。根据您的经验,这有多好?
您选择的模板语言可以使用哪些选项?
从数据存储区提供内容(或将其存储到数据存储区)时:有没有比从HTTP请求中获取 accept_language 参数更好的方法,并将其与您为每个请求设置的语言属性相匹配实体?
答案 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分!