我创建了一个文章网站,其中文章以多种语言发布。我使用transmeta(http://code.google.com/p/django-transmeta/)在一个模型中支持多种语言。
此外,我使用通用评论框架,使文章可评论。我想知道如果同一篇文章用一种语言然后用另一种语言评论会发生什么。看起来所有评论都会显示在两个变种上....
问题实际上是: 是否有可能只显示使用当前语言提交的评论?
答案 0 :(得分:2)
我尝试了transmeta的方法来翻译动态文本,我有以下经验:
如果你采取transmeta的方式,你将需要两个解决方案:
这些主要缺点使我重新考虑这种方法并切换到另一种解决方案:django.contrib.sites。每个需要国际化的模型都继承自SiteModel:
class SiteModel(models.Model):
site = models.ForeignKey(Site)
每个需要transmeta翻译的对象都连接到一个站点。每个连接的对象都可以从父对象的站点属性确定其语言。
我基本上运行了wikipedia方法,并为子域(en。,de。,ru。)上的每种语言都有一个Site对象。对于每个站点,我启动了一个服务器实例,该实例具有自定义设置文件,该文件将设置SITE_ID和站点的语言。我使用django.contrib.sites.managers.CurrentSiteManager
仅显示当前网站语言中的项目。我还有一位经理可以为您提供各种语言的对象。我构建了一个模型,连接来自不同语言的同一模型的对象,表示它们在语义上是相同的(想想维基百科上的语言左栏)。这些网站都使用相同的数据库并共享相同的未翻译用户模型,因此用户可以毫无问题地在语言之间切换。
优点:
缺点:
您可能不需要django Site模型,并且可以在不需要多个django服务器实例的情况下实现相同的功能。
我不知道你想要构建什么,我所描述的可能不适合你的情况,但它完全适用于我的项目(基于pinax建立的国际化社区平台:http://www.bpmn-community.org/)。因此,如果您透露更多关于您的项目的信息,我可能会建议一种方法。
最后回答你的问题:不,通用评论不会与transmeta开箱即用。如您所知,您必须以两种语言显示以一种语言显示的文章的注释。或者你将不得不入侵评论并更改模型并做其他脏东西(不推荐)。我描述的方法适用于评论和任何其他可插拔应用程序。
回答你的问题:
您可以尝试使用类似threadlocals middleware的方法伪造django应用程序中的全局语言状态,但是我不知道这是否与django I18N引擎很好地配合(这也是一些线程魔法)
如果您希望使用多种语言扩展您的网站,我建议您选择网站方式。