我有一个Django应用程序,其模型名为Topic
。我想在Django admin中翻译这个模型的复数形式(见下面截图中的红色椭圆)。在
为此,我做了以下工作:
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
文件:
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):可能我的目录结构有问题。这里是:
我试过django1.7。在
我尝试了同样的方法,但是第一次没有成功,在调试到Django之后,我发现了一些提示并找到了解决方案,Django中应该有一些区域名称的文档,实际上有些规则没有文档化。在
在我的测试中,只能加载项目下的消息,应用程序中的所有消息都无法翻译。在
我尝试在应用程序视图中的同一个index()方法中打印。只有msgid在设置.py文件可以翻译。在
代码如下所示:
定义索引(请求):
在检查了一些Django代码之后,我发现它只允许页面下给定的区域名称
https://github.com/django/django/tree/master/django/conf/locale
请注意目录名,没有“ru ru”,没有“zh-cn”。在
代码输入获取文本.py公司名称:
^{pr2}$我通过将“zh-cn”更改为“zh-cn”解决了自己的问题,然后运行以下命令:
复制django.po公司从文件夹“/zh-cn/LC-MESSAGES/”到文件夹“/zh-cn/LC\u-MESSAGES”,保存我的翻译。在
然后
现在一切都好了!在
所以,我认为把“如如”改为“如”可以解决你的问题。在
我认为在app文件夹中添加应用程序翻译是一个更好的做法,这使得它更易于携带和查找。它也可以帮助你解决你的问题。在
在应用程序中创建“locale”文件夹:
站在你的应用文件夹里,运行“django-管理员py发短信-我如你“命令。它应该创建django.po公司把需要翻译的文件留白。在
在填写完缺少的翻译之后,运行“django-管理员py以防编译和重新启动服务器。在
而且,在你的设置.py文件,不要对文件夹使用硬编码字符串,最好是动态获取它们
^{pr2}$最后一段代码将假定locale文件夹与设置.py文件。在
可能
locale
dir不在应用程序的目录中,或者没有在LOCALE_PATHS
中定义。https://docs.djangoproject.com/en/dev/topics/i18n/translation/#how-django-discovers-translations它应该生成一个文件
locale/ru-RU/LC_MESSAGES/django.po
。相关问题 更多 >
编程相关推荐