Django国际化语言代码

41

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

(Swedish,sv)
(English,en)
5个回答

68

如果你想要在 Django 中使用某个东西,可以尝试:

from django.conf import settings

这将按照上述格式进行,非常适合分配到您的模型选择字段中(例如user_language = models.CharField(max_length=7, choices=settings.LANGUAGES))。

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

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

请注意,django.conf.settings不是一个模块。


1
此方法的额外好处是:由于gettext_noop()是一种延迟查找,因此语言名称将根据模板渲染时用户的语言环境进行翻译。这意味着英语用户将看到“French”,但法语用户将看到“Francais”。 - Thomas
以上语言是否有参考页面? - Hulk
2
http://code.djangoproject.com/browser/django/trunk/django/conf/global_settings.py 可以给你一个 Django 支持的所有语言列表,而 http://docs.djangoproject.com/en/dev/ref/settings/#languages 则提供了使用概述。希望这能帮到你。 - Thomas
1
max_length 应该为 5,在特定于国家的语言中有一个破折号,例如 es-mx - Kimvais
7
“sr-latn”有7个字符。 - user3850
1
此设置中的语言列表与 LANGUAGE_CODE 设置接受的值列表不同。例如,'en-us' 默认值在 LANGUAGES 全局设置中不存在。 - Filipe Correia

27

之前的答案只提到从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)

25

7
并非所有这些语言代码都受支持。请参阅文件django.conf.locale.LANG_INFO以获取主列表。 - spiderlama
Django 实际实现的内容并不一定完全符合这个列表,因为该列表并非由 Django 维护。 - kloddant
2
http://www.i18nguy.com/unicode/language-identifiers.html - jackotonye
1
https://github.com/django/django/blob/main/django/conf/global_settings.py#L56 - Eddir

3
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']

敬礼

sachin

(萨钦)

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'))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接