2016-09-01 3 views
1

Я работаю на веб-сайте, который должен различать британский английский и американский английский. Различие, которое мы пытаемся сделать, это не за сеанс, а скорее за объект.Изменить локально на основе объекта

например.

Мы имеем в Великобритании dog и США cat, Великобритания dog£1 стоят и США cat$2.

сохраненное значение стоимости является 1 и 2 и оба объекта имеют locale значение: uk/us.


Мы уже пытались добавить промежуточное программное обеспечение для переключения языкового стандарта в зависимости от запроса. Но получение объекта (на основе параметров URL) кажется чрезмерным.

Другой идеей было добавить ?locale=xx для каждого URL-адреса, но это не идеально, поскольку информация уже сохранена на объекте.


Есть ли способ использовать механизм Джанго i18n для обработки перевода между языками на объект?

Значение, если object.locale будет uk оказывать £, если это us оказывать $.

+0

Должно быть, это механизм Django i18n? – domino

+0

Если возможно, было бы легче справиться. Но кажется, что это невозможно, поэтому мы открыты для любого обходного пути. – nobe4

ответ

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 (возможно, в шаблоне), вы можете передать контекстную переменную или сохранить ее как атрибут класса.

+0

Я вижу, мы просто не хотим иметь условие для каждой суммы/валюты, чтобы отображать либо фунты, либо доллары. Вот почему мы думали о функциональности i18n. – nobe4

1

К сожалению, я не вижу, как вы можете использовать i18n для решения вашей проблемы.

С другой стороны, это не использовать Django i18n, но он должен работать

Вы можете установить это в вашем settings.py:

CURRENCY = { 
    'uk': '£', 
    'us': '$', 
} 

Затем, чтобы получить правильную валюту вы можете сделать:

settings.CURRENCY[object.locale] 

Вы можете даже пойти дальше и обернуть это в образце модели

@property 
def currency(self): 
    return settings.CURRENCY[self.locale] 
Смежные вопросы