[Django]-How to add new languages into Django? My language "Uyghur" or "Uighur" is not supported in Django

31👍

Add a non available language to your Django app

ISO language code of Uighur ئۇيغۇر تىلى is ‘ug’.

In your settings.py:

from django.conf import global_settings

gettext_noop = lambda s: s

LANGUAGES = (
       ('ug', gettext_noop('Uighur')),
)

EXTRA_LANG_INFO = {
    'ug': {
        'bidi': True, # right-to-left
        'code': 'ug',
        'name': 'Uighur',
        'name_local': u'\u0626\u06C7\u064A\u063A\u06C7\u0631 \u062A\u0649\u0644\u0649', #unicode codepoints here
    },
}

# Add custom languages not provided by Django
import django.conf.locale
LANG_INFO = dict(django.conf.locale.LANG_INFO, **EXTRA_LANG_INFO)
django.conf.locale.LANG_INFO = LANG_INFO

# Languages using BiDi (right-to-left) layout
LANGUAGES_BIDI = global_settings.LANGUAGES_BIDI + ["ug"]

And:

manage.py makemessages -l ug
manage.py compilemessages

12👍

Based on laffuste’s answer.
First step, add language define in settings.py:

EXTRA_LANG_INFO = {
    'ms': {
        'bidi': False, # right-to-left
        'code': 'ms',
        'name': 'Bahasa Melayu',
        'name_local': u'Bahasa Melayu', #unicode codepoints here
    },
}

# Add custom languages not provided by Django
import django.conf.locale
from django.conf import global_settings
LANG_INFO = dict(django.conf.locale.LANG_INFO.items() + EXTRA_LANG_INFO.items())
django.conf.locale.LANG_INFO = LANG_INFO

# Languages using BiDi (right-to-left) layout
global_settings.LANGUAGES = global_settings.LANGUAGES + (("ms",'Bahasa Melayu'),)

Second step, Add locale in settings.py:

import os

PACKAGE_ROOT = os.path.abspath(os.path.dirname(__file__))
LOCALE_PATHS = (
    os.path.join(PACKAGE_ROOT, 'locale'),
)

Third step, Add locale defines in locale directory.

👤c2j

4👍

If someone encounters this, and will use the accepted answer (also check the comments on it) and still will have a redirect to /en/ instead of extra language – you need to create the .mo file for that locale. At least a dummy one.

Django checks if language is valid by checking if it can load the .mo file. There is no issue for standard languages because Django is shipped with a bunch of them, but for your custom language it doesn’t exists.

I hope that will save your time.

2👍

in your settings.py add

gettext = lambda s: s


LANGUAGES = (
    ('zh_UG', gettext('Uyghur')),
    ('en', gettext('English')),
)
USE_I18N = True

run


manage.py makemessages -l zh_UG

to create language files

1👍

# add Kyrgyz lang 
###########################################################
from django.conf import global_settings
gettext = lambda s: s
LANGUAGES = (
    ('ru', gettext('Russia')),
    ('ky', gettext('Kyrgyz')),
)
EXTRA_LANG_INFO = {
    'ky': {
        'bidi': False,
        'code': 'ky',
        'name': 'Kyrgyz',
        'name_local': u"Кыргызча",
    },
}

import django.conf.locale
from django.conf import global_settings
import django.conf.locale
LANG_INFO = dict(django.conf.locale.LANG_INFO, **EXTRA_LANG_INFO)
django.conf.locale.LANG_INFO = LANG_INFO
global_settings.LANGUAGES = global_settings.LANGUAGES + [("ky", 'Кыргызча')]

import os
PACKAGE_ROOT = os.path.abspath(os.path.dirname(__file__))
LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'locale'),
)
###########################################################

0👍

Just wanted to add that you need to run below commands despite whether you have added some translation to the files or not:

python manage.py makemessages -l tj
python manage.py compilemessages

Note that tj here is the new added language

0👍

Good news!

Django 5.0 added support for the Uyghur language (link)!

Leave a comment