【问题标题】:Django Internationalization doesn't work (makemessages doesn't find .py file)Django 国际化不起作用(makemessages 找不到 .py 文件)
【发布时间】:2014-01-16 13:54:18
【问题描述】:

我正在尝试使用 I18N 将我的 Django 网站国际化。当我做makemessages时。没有得到 view.py 文本的位。我做了以下事情:

# my flow
PROJECT
- LOCALE
- MYSITE
  - urls.py
  - settings.py
- APP1
  - views.py
- APP2
- APP3      
manage.py

# settings.py
LANGUAGES = (
     ('it', 'Italiano'),
     ('en', 'English'),
            )
LANGUAGE_CODE = 'it'
USE_I18N = True
LOCALE_PATHS = ('home/project/locale/',)
MIDDLEWARE_CLASSES = ( ...
                      'django.middleware.locale.LocaleMiddleware',
                     )   
TEMPLATE_CONTEXT_PROCESSORS = (...,
                      'django.core.context_processors.i18n',
                     )

 # views.py

 from django.utils.translation import ugettext as tra
 text = tra("this is a text")
 ...

 # template.html
 ...
 {% trans 'Dashboard' %}
 ....

当我执行“python manage.py makemessages.py en-l”时,从根目录(manage.py 在哪里)我只得到一个 django.po,其中包含来自 html 文件而不是来自 views.py 的文本。我也尝试使用“python manage.py makemessages.py en-l-e html,py”,但它不起作用。我哪里做错了?

【问题讨论】:

    标签: python django internationalization


    【解决方案1】:

    makemessages 在你的代码中寻找非常具体的模式; tra() 不是这些模式之一。

    makemessages command source 你可以看到xgettext 命令行工具被指示寻找: gettext_noopgettext_lazyngettext_lazyugettext_noopugettext_lazyungettext_lazypgettextnpgettextpgettext_lazynpgettext_lazy(除了@98)

    将您的 views.py 代码更改为:

    from django.utils.translation import ugettext as _
    text = _("this is a text")
    

    遵循广泛使用的gettext 约定,或使用:

    from django.utils.translation import ugettext
    text = ugettext("this is a text")
    

    最好坚持原来的translation.* 方法或_(),在这里。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2013-04-05
      • 2014-02-15
      相关资源
      最近更新 更多