Django国际化语言代码

时间:2010-07-08 06:02:16

标签: python django internationalization django-views django-i18n

我在哪里可以找到这样的语言列表和language_code。

(Swedish,sv)
(English,en)

5 个答案:

答案 0 :(得分:60)

如果您想在django中使用某些内容,请尝试:

from django.conf import settings

这将采用上面的格式,非常适合在您的某个模型中选择= fields =。 (即user_language = models.CharField(max_length=7, choices=settings.LANGUAGES)

LANGUAGES = (
    ('ar', gettext_noop('Arabic')),
    ('bg', gettext_noop('Bulgarian')),
    ('bn', gettext_noop('Bengali')),
    etc....
    )

关于使用设置的注意事项:

Note that django.conf.settings isn’t a module

答案 1 :(得分:15)

答案 2 :(得分:15)

以前的答案仅提及从 settings.py 获取LANGUAGE,因此很可能会覆盖此变量。因此,您可以从django.conf.global_settings.LANGUAGES

获取完整列表
from django.db import models

from django.conf.global_settings import LANGUAGES

class ModelWithLanguage(models.Model):
    language = models.CharField(max_length=7, choices=LANGUAGES)

答案 3 :(得分:4)

from django.conf import settings

 #note settings is an object , hence you cannot import its contents

 settings.configure()

 #note LANGUAGES is a tuple of tuples

 lang_dict = dict(settings.LANGUAGES)

 #use lang_dict for your query.

 print lang_dict['en']

此致

萨钦

答案 4 :(得分:0)

我从Django Project了解到你只能使用虚拟gettext函数:

  

如果您定义自定义LANGUAGES设置,如上一个项目符号中所述,可以将语言标记为翻译字符串 - 但使用“虚拟”ugettext()函数,而不是django.utils.translation中的函数}。您永远不应该从您的设置文件中导入django.utils.translation,因为该模块本身取决于设置,这将导致循环导入。“。

我花了一些时间才找到解决方案,但我终于明白了;模型字段的选择需要有一个带有真实gettext函数的元组,使用lambda函数,虚拟函数可以包含在真正的gettext函数中,如下所示:

from django.utils.translation import ugettext_lazy as _

language = models.CharField(max_length=5, choices=map(lambda (k,v): (k, _(v)), settings.LANGUAGES), verbose_name=_('language'))