Python Django显示msgid而不是msgstring
我已在设置中正确设置了Python Django显示msgid而不是msgstring,python,django,gettext,Python,Django,Gettext,我已在设置中正确设置了LOCALE\u路径 LANGUAGE\u code设置为it 作为测试,我将应用程序翻译成的唯一语言是it 在我的一个视图中,我有{%trans“my_MESSAGE_ID”%},在django.po中,我有 msgid "MY_MESSAGE_ID" msgstr "It is working" 如果使用it语言的访问者打开应用程序,他会看到“它正在工作” 如果使用en语言的访问者打开应用程序,他会看到“我的消息ID” Django应从不向最终用户显示msgid。D
LOCALE\u路径
LANGUAGE\u code
设置为it
作为测试,我将应用程序翻译成的唯一语言是it
在我的一个视图中,我有{%trans“my_MESSAGE_ID”%}
,在django.po
中,我有
msgid "MY_MESSAGE_ID"
msgstr "It is working"
如果使用
it
语言的访问者打开应用程序,他会看到“它正在工作”
如果使用en
语言的访问者打开应用程序,他会看到“我的消息ID”
Django应从不向最终用户显示msgid
。Django应该将第一个可用的翻译作为后备翻译,特别是如果我用LANGUAGE\u code
定义它的话。有什么方法可以实现这种行为吗
我了解到,这个问题的解决方案是使用
“It is working”
作为消息id。出于以下原因,我认为这个解决方案是不可接受的:
- 进行
翻译是没有用的,因为消息ID是 翻译本身已经完成了en
- 某些消息ID将非常长
- “消息id”指的是必须与语言无关的东西
- 如果我想更改默认语言,我必须重新编写整个应用程序文本内容
与其他许多人一样,Django在内部使用
gettext
;类似地,.mo
,.po
格式属于它们的实用程序,并由它们产生。如果未将完整消息用作msgid
,则未使用gettext
的全部功能
例如,参见glibc的文档:
提要
#包括
char*gettext(const char*msgid);
char*dgettext(const char*domainname,const char*msgid);
char*dcgettext(const char*domainname,const char*msgid,
国际贸易类别);
描述
gettext、dgettext和dcgettext函数试图通过查找将文本字符串翻译成用户的母语
邮件目录中的翻译
msgid参数标识要翻译的消息按照惯例,它是邮件的英文版本,带有
非ASCII字符替换为ASCII近似值。此选项允许翻译人员处理消息目录,称为PO文件,其中包含每条消息的英文和翻译版本,并且可以
可以使用msgfmt实用程序安装
此外,GNUgetText还提供了实用工具msgen
,该工具
创建英文翻译目录。输入文件是最后创建的英文PO文件或PO模板文件(通常由xgettext创建)。未翻译的条目被分配一个与msgid相同的翻译
此外,
gettext
实用程序可以为新消息找到模糊匹配,这将加快翻译速度,还可以在翻译过期时通知并标记为重新翻译。如果在模板中使用无意义的消息ID,这是不可能的 您是否已将default.po编译成具有正确路径的英文译本?否。有意提供的英文译本不可用。我想看看Django在用户语言的翻译不可用时的行为。它应该始终提供翻译,而不是消息ID。我编译的唯一翻译是“It”。我还可以编译“en”。如果德国用户打开网站怎么办?根据当前行为,它将显示消息ID,而不是退回到默认语言。的可能重复项
#include <libintl.h>
char * gettext (const char * msgid);
char * dgettext (const char * domainname, const char * msgid);
char * dcgettext (const char * domainname, const char * msgid,
int category);