我们使用Django
作为后端REST API
服务器。我希望将发送的文本翻译为推送通知到我们的应用程序。我是翻译新手。
文本位于配置文件中,并因每个用户而异。
NOTIFICATION_TEXT = {
'access_request': '%(user_name)s has requested to access your document %(story_name)s, please review '}
我看到谷歌翻译功能,如果给出最后一句,了解user_name和story_name是不变的,它会完美翻译。
我在Django中寻找类似的魔术带功能,我可以在发送给Accept-language
呼叫的REST
标头中收到的语言环境中的用户之前将最终消息包装起来。但这似乎不可能。
据我所知,我需要预先标记需要用ugettext
翻译的文本,并定义语言和中间件设置。然后使用
locale
个特定文件
django-admin makemessages -l de
然后在该特定语言环境的生成的django.po
文件中手动为翻译文本提供Django引用。
但我被困在如何标记,因为我的信息是动态的,在一个dic内。或者还有另一种方法吗?
编辑:
数据访问如下
data['msg'] = settings.NOTIFICATION_TEXT['access_request'] % \
dict(
user_name=get_user_name(sender),
story_name=story.story_name
)
答案 0 :(得分:4)
在插入动态上下文之前,你必须在消息中应用适当的翻译函数,在这种情况下(模块级别,我假设),这将是一个懒惰的:
from django.utils.translation import ugettext_lazy as _
NOTIFICATION_TEXT = {
'access_request': _('%(user_name)s has requested to access your document %(story_name)s, please review ')
}
makemessages -l de
然后会在区域设置django.po中创建一个条目:
msgid "%(user_name)s has requested to access your document %(story_name)s, please review "
msgstr ""
翻译后的字符串必须包含所有未更改的动态占位符:
msgid "%(user_name)s has requested to access your document %(story_name)s, please review "
msgstr "%(user_name)s hat Zugang zu Ihrem Dokument %(story_name)s beantragt, bitte überprüfen Sie "
将(user_name
,story_name
)上下文应用于之后应用翻译功能非常重要,您的架构此时已经强制执行此功能:
message = NOTIFICATION_TEXT['access_request'] % {'user_name': 'foo', 'story_name': 'bar'}