代码之家  ›  专栏  ›  技术社区  ›  Mario Peshev

Django多语言-如何预览任何语言的内容?

  •  0
  • Mario Peshev  · 技术社区  · 15 年前

    我正在使用django多语言为一个django为基础的网站。当我定义 __unicode__ 用于模型返回此方式的函数:

    def __unicode__(self):
            return unicode(self.title)
    

    但是,我的默认语言是英语,并且我有一些仅以荷兰语插入的项。当我预览完整的列表时,我得到“无”作为标题。

    有没有一个简单的方法,试图获得英文标题,然后检查任何其他语言的标题只是为了预览?

    3 回复  |  直到 15 年前
        1
  •  0
  •   Lyubomir Petrov    15 年前

    迭代所有翻译可以很容易地这样做:

    >>> translations = [getattr(obj, "name_" + lang[0].replace("-","_")) for lang in
    settings.LANGUAGES]
    

    在哪里? OBJ 是模型对象,并且 将表示设置文件中的元组(“bg”、“保加利亚语”)。

    lang[0].替换(“-”,“u”) 如果您有类似“UK GB”的语言,则必须输入,因为这些值被放入 NAMEU-UKYGB

        2
  •  0
  •   Dominic Rodger    15 年前

    好吧,假设您的模型将荷兰语版本存储在一个名为 dutch_title 你可以这样做。

    def __unicode__(self):
      # If we've got an English title, use that
      if self.title:
        return self.title
    
      # Otherwise, default to the Dutch title
      return self.dutch_title
    

    不知道你所说的“有些项目只用荷兰语插入”是什么意思,很难更有效地回答你的问题。

        3
  •  0
  •   Lyubomir Petrov    15 年前

    根据您使用的应用程序(例如-django多语言),您可以使用:

    <td>{{ object.name_en|escape }}</td>
    

    (例如: http://code.google.com/p/django-multilingual/source/browse/trunk/testproject/templates/articles/category_list.html )

    我记得这个应用程序还有其他一些分叉,它们曾经像这样改变这种行为:

    Objec title is: {{object.en.name}}
    

    如果您使用其他应用程序,则可以始终运行manage.py shell并使用dir(mymodel)或dir(mymodel.fields)进行测试,以检查在其中定义了哪些字段:)

    如果这些字段名有神奇的getter,并且您在dir(…)中看不到任何有趣的内容,那么您可以参考首选L18N应用程序的代码,并查看引擎盖下的内容:)

    推荐文章