【问题标题】:Questions about Django's internationalization framework关于Django国际化框架的问题
【发布时间】:2010-11-05 18:13:42
【问题描述】:

在开发用于多种语言的应用程序时,我发现使用本地化比尝试构建一些特定于您的应用程序的临时本地化库具有真正的好处。我正在开发一个有 16 种语言的网站,每种语言在不同的地方都有不同的图像,以及每个页面内容的全文翻译,每种语言位于不同的 URL(www.example.com/en /, ETC)。 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'),)

我会使用中间件根据第一个 URL 段设置当前语言,在我看来,我会在视图中拉取给定页面的内容,如下所示:

# 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 来做这件事看起来很荒谬吗?我是否错过了国际化的大局?

(请记住:该网站将由其他语言的用户浏览,但所有管理工作,包括插入翻译,都将在美国完成)

【问题讨论】:

    标签: django localization internationalization


    【解决方案1】:

    如果您需要让您的用户更改所有不同语言的内容,这是一种不错的方法。您还可以为所有内容创建一个漂亮的界面。

    但是,您没有使用 Django i18n 框架。那么你的问题是什么? :)

    我已经尝试过使用 i18n 内容框架和使用您的方法。将翻译存储在 po-files 中非常适合“系统”文本,因为您可以使用所有工具,例如版本控制、错误跟踪等。但是,如果您的用户确实想要更改内容,那就太麻烦了一直以来,我相信几乎任何规模的网站都是如此。

    附带说明一下,在 URL 中包含语言可以更轻松地缓存每个人都应该使用的前端 varnish 代理上的页面,因此 +1 为该决定。

    【讨论】:

    • 我的问题是,我为什么要使用 i18n 而不是使用这种方法?
    • 你不应该。 i18n 框架适用于属于系统的文本,而不是内容本身。例如错误消息、节页眉、页脚、给用户的系统消息等。您还可以使用它来格式化日期、日期时间、数字、货币等。
    • 好吧,我猜从我对文档的简短阅读中我认为 l10n 是为了那个,但我猜 l10n 更多的是用于界面语言功能,例如模型字段、表单等的名称.我有一些阅读要做。
    • i10n 用于日期、数字、货币等。i18n 用于翻译应用程序中的文本。我的错。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    相关资源
    最近更新 更多