如何在 Google App Engine 上本地化应用程序?
Posted
技术标签:
【中文标题】如何在 Google App Engine 上本地化应用程序?【英文标题】:How to localize an app on Google App Engine? 【发布时间】:2011-02-02 10:38:27 【问题描述】:在 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 参数并将其与您为每个设置设置的语言属性匹配更好的方法实体?
【问题讨论】:
在阅读了***.com/questions/522466/what-makes-a-friendly-url 之后,我决定在文章中使用数字 ID,从而避免 URL 的翻译和重命名问题。 有关保留字符和不安全字符的列表,请参阅***.com/questions/695438/… 【参考方案1】:关于第 1 点,实际上没有必要如此冗长:只需使用 unicode 键名即可。它们将在数据存储区中为您编码为 UTF-8。
关于第 3 点,有很多方法可以处理语言检测。当然,accept_language 应该是其中的一部分,您会发现 webob's accept_language support 在这里特别有用(希望 Django 或您选择的框架有类似的东西)。但是,通常情况下,用户的浏览器的语言配置不正确,因此您需要确保用户有某种方法可以覆盖检测到的语言 - 例如,每个页面上都有一个链接来更改语言,设置偏好cookie。
【讨论】:
我不知道除 IE6 之外的所有主流浏览器都支持国际化资源标识符 (rfc3987)。然而,这就是 W3C 告诉我们的:w3.org/International/articles/idn-and-iri IRI 与数据存储键名无关。 我最初的问题不清楚......我使用键名作为 URL 的最后一部分。它们作为参数传递给 webapp 请求处理程序。我担心的是国际化字符串不会完整地传递给请求处理程序(我不知道 rfc3987)。【参考方案2】:关于第2点,几个月前我问过a similar question。我已经设法使应用程序国际化,但只是内容,而不是网址(也不打算这样做)。
我还添加了我对代码所做的修订,以便人们可以看到对这个 Google App Engine 应用程序进行了哪些更改。看看我对已接受答案的第二条评论。
祝你其他 2 分好运!
【讨论】:
以上是关于如何在 Google App Engine 上本地化应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
如何从本地 Google App-engine 数据存储中删除所有实体?
Google App Engine - 哪些工具可以在本地编辑数据存储? [关闭]
在 Google-App-Engine 中使用 HSQLDB
如何在我的 Google App Engine 项目中实现 OpenID 使用者?