语言文件不会在Django中自动加载 [英] language file doesn't load automatically in Django
问题描述
我打算为Django管理面板提供很多语言。当我遵循Django文档中的规则时,我发现我必须使用一个中间件进行本地化...这里是我的设置:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware'
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django .contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
LOCALE_PATHS =(
os.path.join BASE_DIR,'locale'),
)
LANGUAGE_CODE ='en'
ugettext = lambda s:s
LANGUAGES =(
('fa',ugettext('Farsi')),
('en',ugettext('English')),
)
当我去管理员 mylocal / en / admin
或 mylocal / fa / admin
应用程序语言改变完美。但是我的语言文件( .po
)总是查看 LANGUAGE_CODE
。当我设置 LANGUAGE_CODE ='fa'
它会改变为波斯语。不自动
现在我只是希望我的语言文件使用urls / en /
或 / fa /
。
如果您需要退房,这是我的 urls.py
文件。 >
urlpatterns = i18n_patterns(
url(r'^ admin /',admin.site.urls),
)
我有一个类似的工作设置,主要区别就是我使用 ugettext_lazy
。这是因为我们需要在访问模型或设置时翻译这些字符串,而不是调用这些字符串(而不是调用它们)(这只会发生一次:它们只能在服务器启动时进行评估,并且不会识别任何进一步的更改;例如: Django管理语言)。
参考: https://docs.djangoproject.com/en/1.10/topics/i18n/translation/#lazy-translation
这就是我使用的(在这种特殊情况下,德语是默认语言,我翻译成英文):
project / urls.py
from django.conf.urls.i18n import i18n_patterns
urlpatterns = i18n_patterns(
url(r'^ admin /',admin.site.urls )
)
project / settings.py
from django.utils.translation import ugettext_lazy as _
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware'
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django .middleware.csrf.Csr fViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
LANGUAGE_CODE ='de-de'
USE_I18N = True
USE_L10N = True
LANGUAGES = [
(' de',_('German')),
('en',_('English')),
]
LOCALE_PATHS = [
os。 path.join(BASE_DIR,'locale'),
]
app / models.py
from django.utils.translation import ugettext_lazy as _
class幼儿园(models.Model):
stadt = models.CharField(verbose_name = _(Stadt))
class Meta:
verbose_name = _('Kindergarten')
verbose_name_plural = _('Kindergärten ')
工作流程
$ python manage.py makemessages --locale en
.. 。编辑项目/ locale / en / LC_MESSAGES / django.po ...
$ python manage.py compilemessages
现在我可以通过以下方式访问我的翻译Django管理员(界面+模型):
笔记
- Pyhton 3.5.2
- Django 1.10.2
I'm using python3 and Django 1.10 for my application, and I am kind of new to Django. I'm planning to have many languages for Django admin panel. As I follow the rules in Django documentation, I find out that I have to use a middleware for localization... Here are my settings:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
LOCALE_PATHS = (
os.path.join(BASE_DIR, 'locale'),
)
LANGUAGE_CODE = 'en'
ugettext = lambda s: s
LANGUAGES = (
('fa', ugettext('Farsi')),
('en', ugettext('English')),
)
When i go to admin mylocal/en/admin
or mylocal/fa/admin
the application language changed perfectly. But my language file(.po
) always looks into LANGUAGE_CODE
. when i set LANGUAGE_CODE='fa'
it will change to farsi . not automatically
Now i just want that my language files load using the urls /en/
or /fa/
.
Here is my urls.py
file if you need to check out.
urlpatterns = i18n_patterns(
url(r'^admin/', admin.site.urls),
)
I have a similar working setup, the main difference seems to be that I'm using ugettext_lazy
. That's because I need to translate these strings in my models or settings when they were accessed, rather than when they were called (which would happen only once: they would only be evaluated on server startup and would not recognize any further changes; e.g. switching the Django admin language).
Reference: https://docs.djangoproject.com/en/1.10/topics/i18n/translation/#lazy-translation
That's what I use (in this special case, german is the default language and I'm translating into english):
project/urls.py
from django.conf.urls.i18n import i18n_patterns
urlpatterns = i18n_patterns(
url(r'^admin/', admin.site.urls),
)
project/settings.py
from django.utils.translation import ugettext_lazy as _
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
LANGUAGE_CODE = 'de-de'
USE_I18N = True
USE_L10N = True
LANGUAGES = [
('de', _('German')),
('en', _('English')),
]
LOCALE_PATHS = [
os.path.join(BASE_DIR, 'locale'),
]
app/models.py
from django.utils.translation import ugettext_lazy as _
class Kindergarten(models.Model):
stadt = models.CharField(verbose_name=_(Stadt))
class Meta:
verbose_name = _('Kindergarten')
verbose_name_plural = _('Kindergärten')
Workflow
$ python manage.py makemessages --locale en
... edit project/locale/en/LC_MESSAGES/django.po ...
$ python manage.py compilemessages
Now I can access my translate Django admin (interface + models) via:
Notes
- Pyhton 3.5.2
- Django 1.10.2
这篇关于语言文件不会在Django中自动加载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!