【问题标题】:Django translation not working in my caseDjango 翻译在我的情况下不起作用
【发布时间】:2015-09-12 08:12:35
【问题描述】:

因为这个问题被问了很多次,我觉得很抱歉:

django - how to make translation work?

django internationalization and translations issue

How to setup up Django translation in the correct way?

http://askbot.org/en/question/8948/weve-edited-djangopo-files-but-translations-do-not-work-why/

我想要英语(默认)和斯洛文尼亚语。我的设置是这样的:

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
)
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'Europe/Belgrade'
USE_I18N = True
USE_L10N = True
USE_TZ = True
from django.utils.translation import ugettext_lazy as _
LANGUAGES = (
  ('si', _('Slovenian')),
  ('en-us', _('English')),
)
LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'locale'),
)

网址.py:

urlpatterns = i18n_patterns('',
    url(r'^', include('analytics.urls')),
    url(r'^login', RedirectView.as_view(url='/admin/login', permanent=False)),
    url(r'^admin/', include(admin.site.urls)),
)

模板:

<div class="time_range">{% trans "Time range:" %}</div>

我将消息编译为 .po 文件,现在根据文档,人们期望它开始工作。但我没有运气。如果我访问带有 /si/ 前缀的 url,我仍然会看到英文字符串。

【问题讨论】:

  • urls.py 的代码错误(额外的[ 符号)。这只是一个错字还是这个文件根本没有导入?
  • 哦..对不起,这只是一个错字..
  • 我曾经遇到过这个错误,因为我使用的是英语和 nano(控制台文本编辑器)的西班牙语,然后经过几次尝试,我可以看到一些非 ascii 字符的奇怪行为.po 文件,我修复了这些,一切正常,你能放你的 django.po 文件吗?或者也许只将一个字符串翻译成一些无意义的东西,比如“这是在 django 中测试 i18n”(没有非 ascii 字符),看看它是否有效?
  • 您需要在翻译完每个消息后制作和编译消息。你可以看看 django-rosetta。但是如果你没有翻译它们,当然它仍然会显示英文文本

标签: python django internationalization django-i18n


【解决方案1】:

创建 .po 文件后,还有两个步骤:

  1. 翻译 .po 文件中的消息
  2. 运行./manage.py compilemessages 将.po 文件编译成.mo 文件

引用Django translation documentation,After you create your message file – and each time you make changes to it – you’ll need to compile it into a more efficient form, for use by gettext. Do this with the django-admin compilemessages utility.

【讨论】:

    【解决方案2】:

    我不确定这是否重要,但在我的国际化应用程序中,我有这个:

    LANGUAGES = (
        ("nl", "Nederlands"),
        ("en", "English"),
        )   
    

    即,字符串周围没有_()。您的代码片段没有显示您如何定义_the documentation 表示您必须将其别名为ugettext_lazy()。也许它会有所作为。

    如果您将源代码提供给演示您的问题的最小 Django 应用程序(例如,在 github 上),那么对您的帮助会更容易。

    【讨论】:

    • 我用这个导入定义了_:from django.utils.translation import ugettext_lazy as _
    • 在这种情况下,它是根据文档。我倾向于详细研究您的问题,甚至手动调试它,但如果您可以提供一些最小的 Django 应用程序来演示您的问题,这将有很大帮助。这可能吗?
    猜你喜欢
    • 1970-01-01
    • 2015-06-23
    • 2013-12-09
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多