在开发用于多种语言的应用程序时,我发现使用本地化而不是尝试构建一些特定于您的应用程序的特殊本地化库,这是一个真正的好处。我正在开发一个拥有16种语言的网站,每种语言在不同的地方都会有不同的图像,以及每个页面内容的全文翻译,每种语言都位于不同的网址上(www.example.com/en /等)。 Django的国际化框架看起来非常神奇,而且很棘手。我的想法是做一些基本的事情,比如:
class Language(models.Model):
name = models.CharField(max_length=50)
code = models.CharField(max_length=2) # (e.g. "FR")
class ContentSection(models.Model):
page = models.ForeignKey('mysite.Page')
name = models.CharField(max_length=50) # (e.g. ("main body text")
content = models.TextField(max_length=5000)
class Meta:
unique_together = (('name', 'page'),)
class ContentTranslation(models.Model):
content_section = models.ForeignKey(ContentSection)
language = models.ForeignKey(Language)
content = models.TextField(max_length=5000)
class Meta:
unique_together = (('content_section', 'language'),)
我会使用中间件根据第一个网段设置当前语言,在我的视图中,我会在视图中为给定页面提取内容,例如:
# In views.view_page
left_content = ContentSection.objects.filter(page=current_page, name='left column text')
if not request.language.code == 'EN':
left_content = ContentTranslation.objects.get(content_section=left_content, language=request.language)
当然,在制作中,我可能会创建一个模板标签,用于按名称获取内容(使用正确的语言),而不是在视图中显式提取每个内容区域。
这样做而不是使用i18n似乎太荒谬了吗?我是否错过了国际化的大局?
(请记住:该网站将由其他语言的用户浏览,但所有管理员资料,包括插入翻译,都将在美国完成)
答案 0 :(得分:2)
如果您需要的是能够让您的用户更改所有不同语言的内容,这是一种合理的方法。您还可以为所有内容创建一个漂亮的界面。
但是,您没有使用Django i18n框架。那么你的问题是什么? :)
我已尝试使用i18n框架进行内容并使用您的方法。在po文件中存储翻译非常适合“系统”文本,因为您可以使用所有工具,例如版本控制,错误跟踪等。但是,如果您有实际想要更改内容的用户,那将是一件很痛苦的事情。所有的时间,我相信几乎任何规模的网站都是如此。
作为旁注,包括URL中的语言使得更容易在每个人都应该使用的前端清漆代理上缓存页面,因此为该决定+1。