django:语言感知下拉

django: Language-aware Drop-down

我是 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

如果(用户)选择的语言是 "fr",我想将 __ str __ 函数更改为 return nationality_fr如果选择的语言是 "en",则 language_en。我需要这个的原因是因为我正在显示一个用于选择国籍的下拉列表供用户选择,he/she 应该看到 his/her 语言的选项。处理此问题的最佳方法是什么?

注意:我知道有一个适用于国家/地区的不错的应用程序,但我应该能够为除此国家/地区以外的其他情况执行此操作。

最简单的方法是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 子字符串或浏览器 header 等请求参数动态设置语言,请改用 django.utils.translation.get_language_from_request(自 Django 1.8 起)。 See docs here

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

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