根据对象更改本地

时间:2016-09-01 17:14:53

标签: django django-i18n

我在一个需要区分英国英语和美国英语的网站上工作。我们尝试的区别不是每个会话,而是每个对象

e.g。

我们有一个英国dog和一个美国cat,英国dog费用£1和美国cat $2

费用的存储价值为12,两个对象的值均为localeuk / us

我们已经尝试添加中间件来根据请求切换区域设置。但是必须获取对象(基于url的参数)似乎过多。

另一个想法是在每个网址上添加?locale=xx,但这并不理想,因为信息已存储在对象上。

有没有办法使用django i18n机制来处理语言每个对象之间的翻译?

如果object.localeuk呈现£,则表示us呈现$

2 个答案:

答案 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]