语言文件不会在Django中自动加载 [英] language file doesn't load automatically in Django

查看:131
本文介绍了语言文件不会在Django中自动加载的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用python3和Django 1.10作为我的应用程序,而我对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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆