【问题标题】:Internationalized Django app back to English国际化 Django 应用返回英文
【发布时间】:2012-07-15 04:17:27
【问题描述】:

我的 django 应用程序是欧洲语言。现在我想恢复为英语并正确地进行国际化和本地化。我在setting.py中做了这个

LANGUAGE_CODE = 'en'
LANGUAGES = [
    ('en', 'English'),
]

但是整个应用程序仍然没有以英文显示。我在这里错过了什么吗? PS。该应用程序还使用 Django-CMS。

【问题讨论】:

    标签: python django localization internationalization django-cms


    【解决方案1】:

    你需要做很多事情:

    • 用一种语言编写所有字符串,在您的情况下为英语。

    然后您需要标记所有要翻译的字符串:

    • 在模板中的所有字符串周围添加trans 标记(来自i18n 模板标记库),请参阅文档中的internationalization。这与 gettext 有关:处理翻译的通用库。通过在字符串周围添加trans 标记,它们将包含在需要翻译的大量字符串中(请参阅下面的.po.mo)。
    • 在 Python 源代码中的所有字符串周围添加 _()(来自 django.utils.translation,另请参阅文档中的国际化)。这也与 gettext 有关,这也包括 gettext 语言文件中的那些字符串。

    然后您需要创建语言文件并将翻译添加到这些文件中:

    • 创建包含翻译字符串的gettext .po.mo 文件。在这些文件中,您可以编写翻译后的字符串。这两个文件通常放在/locale/ 目录下。对于每种语言,您需要编写翻译后的字符串并将它们放入这些文件中。有关这些语言文件的更多详细信息,请参阅localization 上的 Django 文档。

    最好阅读 Django 在internationalization and localization(通常称为 i18n)上的概述,因为上面的解释只是一般的方法。确切的技术细节在文档中。

    请注意,以上内容仅用于翻译作为 Python 代码或模板一部分的静态字符串。如果要翻译 URL 或 Django 模型,则需要安装其他库或使用其他现有的 Django 功能。例如,在 Django 1.4 中添加了一些功能来翻译 URL,但对于早期的 Django 版本,您需要为此使用库/Django 应用程序。

    【讨论】:

    • 非常感谢西蒙。嗯,是的,我知道这些步骤,并且在进入这个应用程序之前我创建了一个演示应用程序。我的问题是应用程序是使用 django 国际化/本地化步骤编写的,当我尝试恢复为英语时,它失败了。是字符串的问题吗?这个应用程序中使用的字符串是混合的,英语和非英语。
    • 你不能有混合的字符串:所有的字符串都需要在一个语言中,然后你可以使用翻译文件更改语言。然后,当您更改请求的当前语言时,Django 就会知道加载正确的语言文件。
    • 再次非常感谢。我想这是我的应用程序没有用英语呈现的原因。将修复它:)
    • 我的应用程序也在使用 Django-CMS。我想这与CMS有关。有什么想法吗?
    • Django-CMS 也是可以翻译的,但是需要额外的配置(比如不同的语言),见django-cms.readthedocs.org/en/latest/getting_started/…django-cms.readthedocs.org/en/latest/advanced/i18n.html
    【解决方案2】:

    Simeon 的回答涵盖了所有领域,但在这里,我发现了一些可以帮助任何人在开发环境中测试本地化的东西。

    如果您是欧洲人,那么您的浏览器可能会将accepted-language 请求为es,仅作为示例。

    现在,您想在本地环境中测试英语翻译,那么您需要考虑以下可能性。

    根据django-book的参考:

    您需要输入LocaleMiddleware

    1> 首先,它在当前用户的 会话。

    2> 否则,它会寻找一个 cookie。

    3> 否则,它会查看 Accept-Language HTTP 标头。这 标头由您的浏览器发送并告诉服务器哪种语言 您喜欢,按优先级排序。 Django 尝试在 标题,直到找到具有可用翻译的标题。

    4> 否则,它将使用全局 LANGUAGE_CODE 设置。

    现在,您看到它会检查LANGUAGE_CODE 设置作为最后的手段。

    因此,您可以在浏览器中使用 HTTP 请求拦截器并更改 accepted-language 值以即时测试您的语言翻译。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多