how to add new languages into Django? My language "Uyghur" or "Uighur" is not supported in Django
how to add new languages into Django? My language "Uyghur" or "Uighur" is not supported in Django.
Can I add new language locale file in my project and use it? for example: zh_UG
this language is not supported in Django.
Solution 1:
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
Solution 2:
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.
Solution 3:
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.
Solution 4:
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