我在一个需要区分英国英语和美国英语的网站上工作。我们尝试的区别不是每个会话,而是每个对象。
e.g。
我们有一个英国dog
和一个美国cat
,英国dog
费用£1
和美国cat
$2
。
费用的存储价值为1
和2
,两个对象的值均为locale
:uk
/ us
。
我们已经尝试添加中间件来根据请求切换区域设置。但是必须获取对象(基于url的参数)似乎过多。
另一个想法是在每个网址上添加?locale=xx
,但这并不理想,因为信息已存储在对象上。
有没有办法使用django i18n机制来处理语言每个对象之间的翻译?
如果object.locale
为uk
呈现£
,则表示us
呈现$
。
答案 0 :(得分:1)
如果这是一个逐个对象的属性,您可以将其存储为模型本身的属性,并使用实例.__ class __。locale访问它。你也可以做类型(实例).locale或instance._meta.model.locale
class Dog(models.Model):
name = models.CharField(max_length=127, default='rover')
cost = models.IntegerField()
locale = "uk"
class Cat(models.Model):
name = models.CharField(max_length=127, default='fluffy')
cost = models.IntegerField()
locale = "us"
或者如果能够从实例本身访问它,它甚至更简单:instance.locale
如果您已经添加了希望退出i18n(可能在模板中)的功能,您可以传入上下文变量或将其存储为基于类的视图的属性。
答案 1 :(得分:1)
不幸的是,我不知道如何使用i18n来解决您的问题。
或者,这不使用Django i18n但它应该可以工作
您可以在settings.py
:
CURRENCY = {
'uk': '£',
'us': '$',
}
然后要获得正确的货币,您可以这样做:
settings.CURRENCY[object.locale]
您甚至可以进一步将其包装在模型属性中
@property
def currency(self):
return settings.CURRENCY[self.locale]