【问题标题】:Django Localization: How to Use a Non-English Language as 'Translate-From' LanguageDjango 本地化:如何使用非英语语言作为“翻译自”语言
【发布时间】:2012-02-22 21:38:09
【问题描述】:

问题是:如果我将英语设置为主要语言( LANGUAGE_CODE = 'en' ),那么一切正常。如果我们从具有英语语言环境的浏览器请求站点,我们会看到英语变体,类似地,对于具有俄语语言环境的浏览器。

但如果我设置 LANGUAGE_CODE = 'ru' 那么我们无论如何都会看到俄语变体。

那么为什么英语是默认语言并被 Django 用作 msgid?

请看下面我项目的设置。


在我的 settings.py 中,我尝试将非英语设置为主要语言:

LANGUAGE_CODE = 'ru'
LANGUAGES = ( ( 'en', "English", ), ( 'ru', "Russian", ), )

然后我有 en/LC_MESSAGES/django.po:

msgid "SITE_MAIN_TITLE"
msgstr "D'argent: Cosmetics, Hair Care, Parfume"

还有 ru/LC_MESSAGES/django.po:

msgid "SITE_MAIN_TITLE"
msgstr "D'argent – косметика, средства по уходу за волосами, парфюмерия"

在模板 HTML 中:

...
<title>{% block title %}{% trans "SITE_MAIN_TITLE" %}{% endblock %}</title>
...

【问题讨论】:

  • 您使用的是哪种语言的翻译器(包)?
  • msgid中的值反映了trans标签内的值,所以{% trans "SITE_MAIN_TITLE" %}总是会生成带有msgid "SITE_MAIN_TITLE"的翻译文件。设置LANGUAGE_CODE = 'ru'后到底是什么问题?
  • @Secator 问题是当我们设置 LANGUAGE_CODE = 'ru' 时,Django 仅适用于 ru/LC_MESSAGES/django.po,即使 http 客户端的当前语言是英语。

标签: django


【解决方案1】:

如果你使用这个 'django.middleware.locale.LocaleMiddleware' 中间件。

https://github.com/django/django/blob/master/django/utils/translation/trans_real.py#L366

参见 get_language_from_request 函数。了解如何选择默认语言代码。 可能永远不会使用该 settings.LANGUAGE_CODE ;)。

【讨论】:

    猜你喜欢
    • 2016-03-01
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    相关资源
    最近更新 更多