在Django Rosetta中无法查看项目字符串的技术求助
看起来你已经搞定了Rosetta的基础配置,但Project标签页看不到自己代码里的翻译字符串,核心原因是还没生成项目自身的翻译目录文件,Rosetta需要读取这些.po文件才能识别待翻译内容。我来一步步帮你解决:
1. 确认你的App在INSTALLED_APPS中
Django的makemessages命令只会扫描INSTALLED_APPS里列出的App代码,所以先检查settings.py里的INSTALLED_APPS是否包含你写Hotel模型的那个App:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', # ...其他默认App 'your_hotel_app', # 替换成你的实际App名称 'rosetta', # 确保Rosetta也在列表中 ]
2. 创建locale目录(如果还没的话)
你在LOCALE_PATHS里指定了BASE_DIR/locale,先确认这个目录存在,不存在的话手动创建:
mkdir locale
Windows用户可以直接在资源管理器中新建对应文件夹。
3. 提取代码中的翻译字符串
运行Django的makemessages命令,为你支持的每种语言生成翻译文件:
# 生成英文翻译文件 python manage.py makemessages -l en # 生成德文翻译文件 python manage.py makemessages -l de # 生成西班牙文翻译文件 python manage.py makemessages -l es
注意:Windows系统需要先安装gettext工具才能运行
makemessages,可以通过Chocolatey或GNU官网下载安装。
执行完这些命令后,你会在locale目录下看到这样的结构:
locale/ ├── de/ │ └── LC_MESSAGES/ │ └── django.po ├── en/ │ └── LC_MESSAGES/ │ └── django.po └── es/ └── LC_MESSAGES/ └── django.po
这些.po文件里就包含了你models.py中用_()标记的所有待翻译字符串。
4. 编译翻译文件(可选但推荐)
虽然Rosetta可以自动处理,但运行compilemessages把.po编译成Django能识别的.mo二进制文件会更稳妥:
python manage.py compilemessages
5. 刷新Rosetta页面
现在回到Rosetta的Project标签页,你应该就能看到自己代码里的待翻译字符串了!
额外小提示:优化LANGUAGES配置
你当前settings.py里的gettext = lambda s: s可以换成Django的gettext_lazy,这样LANGUAGES里的语言名称也能被翻译:
from django.utils.translation import gettext_lazy as _ LANGUAGES = ( ('en', _('English')), ('de', _('German')), ('es', _('Spanish')), )
内容的提问来源于stack exchange,提问作者HuLu ViCa

