如何在Django管理中翻译模型的复数形式?

2024-04-19 08:43:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Django应用程序,其模型名为Topic。我想在Django admin中翻译这个模型的复数形式(见下面截图中的红色椭圆)。在

Screenshot

为此,我做了以下工作:

1)在模型.py

from django.utils.translation import ugettext_lazy as _

class Topic(models.Model):
    title = models.CharField(max_length=140)

    def __unicode__(self):
        return self.title
    class Meta:
        verbose_name = _('topic')
        verbose_name_plural = _('topics')

2)运行django-admin.py makemessages -l ru-RU,它生成了一个文件locale/ru/django.po。在

3)将翻译添加到django.po文件:

^{pr2}$

4)运行django-admin.py compilemessages。在

5)更改了settings.py,因此有以下设置:

LANGUAGE_CODE = 'ru-RU'

ugettext = lambda s: s

LANGUAGES = (
  ('ru-RU', ugettext('Russian')),
)

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.locale.LocaleMiddleware',
)

USE_I18N = True

USE_L10N = True

但它仍然不起作用(在管理员中标记的字母仍然以英语出现,而不是俄语)。在

我能做些什么来解决这个问题?在

更新1(28.09.2013 13:26):可能我的目录结构有问题。这里是:

Directory structure


Tags: djangopy模型selftopicadmintitlemodels
3条回答

我试过django1.7。在

我尝试了同样的方法,但是第一次没有成功,在调试到Django之后,我发现了一些提示并找到了解决方案,Django中应该有一些区域名称的文档,实际上有些规则没有文档化。在

在我的测试中,只能加载项目下的消息,应用程序中的所有消息都无法翻译。在

我尝试在应用程序视图中的同一个index()方法中打印。只有msgid在设置.py文件可以翻译。在

代码如下所示:

定义索引(请求):

print request.LANGUAGE_CODE
str_msg = _("Welcome to poll list!")   ## this keep English output, only appears in app
print str_msg
str_msg = _("Simplified Chinese")     ## this one worked, it appears in settings.py
print str_msg
context = {'latest_question_list': latest_question_list,
           'message': str_msg}
....

在检查了一些Django代码之后,我发现它只允许页面下给定的区域名称

https://github.com/django/django/tree/master/django/conf/locale

请注意目录名,没有“ru ru”,没有“zh-cn”。在

代码输入获取文本.py公司名称:

^{pr2}$

我通过将“zh-cn”更改为“zh-cn”解决了自己的问题,然后运行以下命令:

python manage.py makemessages -l zh_CN 

复制django.po公司从文件夹“/zh-cn/LC-MESSAGES/”到文件夹“/zh-cn/LC\u-MESSAGES”,保存我的翻译。在

python manage.py compilemessages

然后

python manage.py runserver

现在一切都好了!在

所以,我认为把“如如”改为“如”可以解决你的问题。在

我认为在app文件夹中添加应用程序翻译是一个更好的做法,这使得它更易于携带和查找。它也可以帮助你解决你的问题。在

在应用程序中创建“locale”文件夹:

my-site/opinions/locale/

站在你的应用文件夹里,运行“django-管理员py发短信-我如你“命令。它应该创建django.po公司把需要翻译的文件留白。在

在填写完缺少的翻译之后,运行“django-管理员py以防编译和重新启动服务器。在

而且,在你的设置.py文件,不要对文件夹使用硬编码字符串,最好是动态获取它们

^{pr2}$

最后一段代码将假定locale文件夹与设置.py文件。在

  1. 可能localedir不在应用程序的目录中,或者没有在LOCALE_PATHS中定义。https://docs.djangoproject.com/en/dev/topics/i18n/translation/#how-django-discovers-translations

  2. 它应该生成一个文件locale/ru-RU/LC_MESSAGES/django.po

相关问题 更多 >