【发布时间】:2018-01-12 18:05:22
【问题描述】:
我正在使用 Django Rest Framework 构建一个需要支持多种语言的 API,我们正在尝试使用 Django 翻译框架,并使用来自here 的答案我已经决定如何实现可翻译的选择字段。但是我的问题是相反的情况。
假设我有一个这样的模型:
from django.utils.translation import ugettext_lazy as _
class Payment(models.Model):
OPEN = 0
CLOSED = 1
BALANCE = 2
STATUS_CHOICES = (
(OPEN, _('open')),
(CLOSED, _('closed')),
(BALANCE, _('balance')),
)
status = models.IntegerField(choices=STATUS_CHOICES, default=OPEN, verbose_name=_("Status"))
这可以很好地将信息返回给用户,我们使用存储的状态值并在返回之前对其进行转换。但是,我也希望用户能够使用任何语言发布一个新的支付对象。所以如果用户想要创建一个开放的交易,他们可以发送{'status':'open'},但他们也可以用西班牙语发送{'status':'abierto'}。有没有办法自动处理这个?
基本上我想得到 ugettext_lazy 函数的反面。
【问题讨论】:
-
在选择字段中发布
abierto而不是open有什么意义? (我的意思是它只是 post API 不要让它变得不必要的复杂。 -
我问了同样的问题,不幸的是我没有最终决定我们需要支持什么。 :) 看起来你的其他问题没有一个简单的内置方法可以做到这一点。
-
让您的 api 以这种方式接受多种语言对我来说似乎完全是疯狂的。我希望客户按小时付费,因为这种“功能”会增加大量额外的测试和 QA 工作。
-
由于
status是一个 IntegerField,您通常也会在 api 中发布一个整数。如果您想要翻译后的选项,您可以向 api 端点提交OPTIONS请求。
标签: django internationalization django-rest-framework