django:语言感知下拉

时间:2016-05-06 20:25:32

标签: django django-models django-forms django-views django-i18n

我是django的新手,到目前为止我很喜欢它,特别是它的社区。这是我的问题:我有这个模型

class Nationality(models.Model):
  nationality_fr = models.CharField(max_length=50)
  nationality_en = models.CharField(max_length=50)
  show_flag = models.BooleanField()
  display_order = models.PositiveSmallIntegerField()

  def __str__(self):
    return self.nationality_fr

我想更改__ str __函数以返回nationality_fr,如果用户选择的语言是" fr"和language_en如果所选语言是" en"。我需要这个的原因是因为我显示选择国籍的下拉菜单供用户选择,他/她应该看到他/她的语言选择。有什么方法可以解决这个问题?

注意:我知道国家/地区有一个不错的应用,但除了这个国家/地区的情况外,我应该可以为其他方案执行此操作。

2 个答案:

答案 0 :(得分:0)

最简单的方法是get_language(),它会根据settings.LANGUAGE_CODE设置告诉您当前线程中的语言。

from django.utils.translation import get_language

def __str__(self):
    if get_language().startswith('fr'):
        return self.nationality_fr
    else:
        return self.nationality_en

如果让Django动态设置语言,基于URL子字符串或浏览器头等请求参数,请使用django.utils.translation.get_language_from_request代替(自Django 1.8开始)。 See docs here

答案 1 :(得分:0)

经过一番研究,我找到了解决方案: django.utils.translation.get_language()。它返回当前线程中使用的语言,你可以在如下模型中使用它:

from django.utils import translation

@property
def nationality(self):
    lang = translation.get_language()
    if lang == "fr":
        return self.nationality_fr
    else:
        return self.nationality_en

def __str__(self):
    return self.nationality