Python Can';我看不到我的项目';德扬戈·罗塞塔的s弦
我已经在我的Python Can';我看不到我的项目';德扬戈·罗塞塔的s弦,python,django,django-rosetta,Python,Django,Django Rosetta,我已经在我的Django项目上安装并配置了rosetta,我可以说它正在工作,因为我可以通过Django admin看到多语言功能,我可以在第三方和Django选项卡中看到要翻译的字符串,但当选择了项目选项卡时,我收到以下消息: Nothing to translate! You haven't specified any languages in your settings file, or haven't yet generated a batch of translation catalo
Django
项目上安装并配置了rosetta
,我可以说它正在工作,因为我可以通过Django admin
看到多语言功能,我可以在第三方
和Django
选项卡中看到要翻译的字符串,但当选择了项目
选项卡时,我收到以下消息:
Nothing to translate!
You haven't specified any languages in your settings file, or haven't yet generated a batch of translation catalogs.
Please refer to Django's I18N documentation for a guide on how to set up internationalization for your project.
我已经在代码中使用了gettext()
,但在rosetta
中看不到这些字符串
这是在mymodels.py
中使用gettext()
的示例:
from django.utils.translation import gettext as _
class Hotel(models.Model):
ONE_STAR = '*'
TWO_STARS = '**'
THREE_STARS = '***'
FOUR_STARS = '****'
FIVE_STARS = '****'
GRAND_TOURISM = 'GRAND_TOURISM'
NA = 'NA'
SPECIAL = 'SPECIAL'
ECO = 'ECO'
BOUTIQUE = 'BOUTIQUE'
HOTEL_CATEGORY_CHOICES = (
(ONE_STAR, _('*')),
(TWO_STARS, _('**')),
(THREE_STARS, _('***')),
(FOUR_STARS, _('****')),
(FIVE_STARS, _('*****')),
(GRAND_TOURISM, _('Grand Tourism')),
(NA, _('NA')),
(SPECIAL, _('Special')),
(ECO, _('Eco-Hotel')),
(BOUTIQUE, _('Boutique-Hotel'))
)
LOCALE_PATHS = (
os.path.join(BASE_DIR, 'locale'),
)
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 = 'en-us'
gettext = lambda s: s
LANGUAGES = (
('en', gettext('English')),
('de', gettext('German')),
('es', gettext('Spanish')),
)
USE_I18N = True
这是settings.py
中的语言配置:
from django.utils.translation import gettext as _
class Hotel(models.Model):
ONE_STAR = '*'
TWO_STARS = '**'
THREE_STARS = '***'
FOUR_STARS = '****'
FIVE_STARS = '****'
GRAND_TOURISM = 'GRAND_TOURISM'
NA = 'NA'
SPECIAL = 'SPECIAL'
ECO = 'ECO'
BOUTIQUE = 'BOUTIQUE'
HOTEL_CATEGORY_CHOICES = (
(ONE_STAR, _('*')),
(TWO_STARS, _('**')),
(THREE_STARS, _('***')),
(FOUR_STARS, _('****')),
(FIVE_STARS, _('*****')),
(GRAND_TOURISM, _('Grand Tourism')),
(NA, _('NA')),
(SPECIAL, _('Special')),
(ECO, _('Eco-Hotel')),
(BOUTIQUE, _('Boutique-Hotel'))
)
LOCALE_PATHS = (
os.path.join(BASE_DIR, 'locale'),
)
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 = 'en-us'
gettext = lambda s: s
LANGUAGES = (
('en', gettext('English')),
('de', gettext('German')),
('es', gettext('Spanish')),
)
USE_I18N = True
我不知道我遗漏了什么。开发人员应该知道,当您添加一种语言的区域或特定的书面脚本形式时,生成消息的命令必须使用“_”(下划线)作为区域分隔符,项目的
设置.py
必须使用“-”(连字符)作为区域分隔符
例如,我们把英语的“英国”版本,传统的和简体中文,香港地区的中文(广东话)。以下是创建语言翻译文件的命令:
$ django-admin makemessages -l en_uk
$ django-admin makemessages -l zh_hk
$ django-admin makemessages -l zh_hans
$ django-admin makemessages -l zh_hant
项目的settings.py
需要使用连字符将它们包含在语言元组中:
LANGUAGES = (
('en-uk', _('English (UK)')),
('zh-hk', _('Cantonese')),
('zh-hans', _('Chinese (Simplified)')),
('zh-hant', _('Chinese (Traditional)')),
)
我可以解决我报告的问题,只是我在使用
makemessages
时使用了错误的语言代码,但现在我只能在settings.py
中看到翻译字符串,在其他应用程序中看不到翻译字符串makemessages
为每个django应用程序在目录中创建了所有的*.po
文件,但是rosetta似乎没有注意到这些文件。好吧,它们最终出现在第三方
选项卡中,我不知道为什么。