Django 2.2 翻译不适用,LANGUAGE_CODE 和 i18n URL 模式正确
Django 2.2 translations not applying, LANGUAGE_CODE and i18n URL pattern correct
我正在使用 Django 2.2 和 Python 3.7。
我正在尝试设置 Django 翻译,在看到翻译之前一切似乎都正常。
我使用的是 i18n urls,所以 url 显示为
localhost/language-locale
示例:
localhost/en-us/
localhost/fr-fr/
url 模式:
urlpatterns += i18n_patterns(
path('jsi18n/', JavaScriptCatalog.as_view(), name='javascript-catalog'),
path('i18n/', include('django.conf.urls.i18n')),
...
settings_l10_i18.py:
LANGUAGE_CODE = 'en-us'
LANGUAGES = [
('en-us', _('US English')),
('en-gb', _('British English')),
('en-ca', _('Canadian English')),
('fr-fr', _('French')),
('fr-ca', _('Canadian French')),
]
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = False
USE_THOUSAND_SEPARATOR = True
LOCALE_PATH = [
os.path.join(BASE_DIR, "locale"),
]
文件结构basedir/locale
├── en_CA
│ └── LC_MESSAGES
│ ├── django.mo
│ └── django.po
├── en_GB
│ └── LC_MESSAGES
│ ├── django.mo
│ └── django.po
├── en_US
│ └── LC_MESSAGES
│ ├── django.mo
│ └── django.po
├── fr_CA
│ └── LC_MESSAGES
│ ├── django.mo
│ └── django.po
├── fr_FR
│ └── LC_MESSAGES
│ ├── django.mo
│ └── django.po
└── README.md
模板中的语言切换器:
<li>
<form action="{% url 'set_language' %}" method="post">
{% csrf_token %}
<input name="next" type="hidden" value="{{ redirect_to }}"/>
<select name="language" value="" onchange="this.form.submit()">
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% for lang in LANGUAGES %}
<option value="{{ lang.0 }}" {% if lang.0 == LANGUAGE_CODE %} selected="selected"{% endif %}>
{{ lang.1 }} ({{ lang.0 }})
</option>
{% endfor %}
</select>
</form>
</li>
中间件:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
...
]
none 个 .po
个文件有 fuzzy
我在需要翻译的所有内容上使用 ugettext_lazy
和 {% trans 'string' %}
,并且 .po
文件正在收集所有内容
在 运行 django-admin compilemessages
之后的 .mo
文件中确实显示了翻译
我也试过重新启动 django 服务器和 PC。
LANGUAGE_CODE
和 request.LANGUAGE_CODE
显示为 en-gb
或我在 select 上的 select 或者如果我查看调试器中的变量.
url 也更改为 localhost/en-gb
或其他任何我 select
真的不确定还能尝试什么,感谢任何帮助。
搞定,只用了4个小时:
LOCALE_PATH = [
os.path.join(BASE_DIR, "locale"),
]
应该是
LOCALE_PATHS = [
os.path.join(BASE_DIR, "locale"),
]
我正在使用 Django 2.2 和 Python 3.7。
我正在尝试设置 Django 翻译,在看到翻译之前一切似乎都正常。
我使用的是 i18n urls,所以 url 显示为
localhost/language-locale
示例:
localhost/en-us/
localhost/fr-fr/
url 模式:
urlpatterns += i18n_patterns(
path('jsi18n/', JavaScriptCatalog.as_view(), name='javascript-catalog'),
path('i18n/', include('django.conf.urls.i18n')),
...
settings_l10_i18.py:
LANGUAGE_CODE = 'en-us'
LANGUAGES = [
('en-us', _('US English')),
('en-gb', _('British English')),
('en-ca', _('Canadian English')),
('fr-fr', _('French')),
('fr-ca', _('Canadian French')),
]
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = False
USE_THOUSAND_SEPARATOR = True
LOCALE_PATH = [
os.path.join(BASE_DIR, "locale"),
]
文件结构basedir/locale
├── en_CA
│ └── LC_MESSAGES
│ ├── django.mo
│ └── django.po
├── en_GB
│ └── LC_MESSAGES
│ ├── django.mo
│ └── django.po
├── en_US
│ └── LC_MESSAGES
│ ├── django.mo
│ └── django.po
├── fr_CA
│ └── LC_MESSAGES
│ ├── django.mo
│ └── django.po
├── fr_FR
│ └── LC_MESSAGES
│ ├── django.mo
│ └── django.po
└── README.md
模板中的语言切换器:
<li>
<form action="{% url 'set_language' %}" method="post">
{% csrf_token %}
<input name="next" type="hidden" value="{{ redirect_to }}"/>
<select name="language" value="" onchange="this.form.submit()">
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% for lang in LANGUAGES %}
<option value="{{ lang.0 }}" {% if lang.0 == LANGUAGE_CODE %} selected="selected"{% endif %}>
{{ lang.1 }} ({{ lang.0 }})
</option>
{% endfor %}
</select>
</form>
</li>
中间件:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
...
]
none 个 .po
个文件有 fuzzy
我在需要翻译的所有内容上使用 ugettext_lazy
和 {% trans 'string' %}
,并且 .po
文件正在收集所有内容
在 运行 django-admin compilemessages
.mo
文件中确实显示了翻译
我也试过重新启动 django 服务器和 PC。
LANGUAGE_CODE
和 request.LANGUAGE_CODE
显示为 en-gb
或我在 select 上的 select 或者如果我查看调试器中的变量.
url 也更改为 localhost/en-gb
或其他任何我 select
真的不确定还能尝试什么,感谢任何帮助。
搞定,只用了4个小时:
LOCALE_PATH = [
os.path.join(BASE_DIR, "locale"),
]
应该是
LOCALE_PATHS = [
os.path.join(BASE_DIR, "locale"),
]