Search code examples
pythondjangogettextdjango-cmsdjango-i18n

Django gettext doesn't works


I try to serve my django-cms website in multiple languages

makemessages and compilemessages works like a charm, but when I runserver , my strings stay untranslated

The python files where i used ugettext_lazy:

from cms.toolbar_pool import toolbar_pool
from cms.extensions.toolbar import ExtensionToolbar
from django.utils.translation import ugettext_lazy as _
from .models import CategoryExtension


@toolbar_pool.register
class CategoryExtensionToolbar(ExtensionToolbar):
    # defines the model for the current toolbar
    model = CategoryExtension

    def populate(self):
        # setup the extension toolbar with permissions and sanity checks
        current_page_menu = self._setup_extension_toolbar()

        # if it's all ok
        if current_page_menu:
            # retrieves the instance of the current extension (if any) and the toolbar item URL
            page_extension, url = self.get_page_extension_admin()
            if url:
                # adds a toolbar item in position 0 (at the top of the menu)
                current_page_menu.add_modal_item(_('Page Category'), url=url,
                                                 disabled=not self.toolbar.edit_mode, position=0)

My settings related to translations :

def gettext(s):
    return s


LOCALE_PATHS = (
    BASE_DIR + "/locale",
)

LANGUAGE_CODE = 'fr-fr'

TIME_ZONE = 'Europe/Paris'

USE_I18N = True

USE_L10N = True

USE_TZ = True

LANGUAGES = (
    ('fr-fr', gettext('fr-fr')),
)

CMS_LANGUAGES = {
    1: [
        {
            'code': 'fr-fr',
            'name': gettext('fr-fr'),
            'redirect_on_fallback': True,
            'public': True,
            'hide_untranslated': False,
        },
    ],
    'default': {
        'redirect_on_fallback': True,
        'public': True,
        'hide_untranslated': False,
    },
}

And my po file (in PROJECT_ROOT/locale/fr-fr/LC_MESSAGES/django.po) :

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE 
# package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-06-06 19:11+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <[email protected]>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"

#: myapp/cms_toolbars.py:22
msgid "Page Category"
msgstr "Catégorie de Page"

#: myapp/configuration/cms_settings.py:6
msgid "Page"
msgstr "Page"

#: myapp/configuration/cms_settings.py:7
msgid "Page with instagram pictures"
msgstr "Page avec bandeau instagram"

#: myapp/configuration/cms_settings.py:8
msgid "Page who list children"
msgstr "Page qui liste ses enfants"

#: myapp/configuration/i18n_settings.py:25
#: myapp/configuration/i18n_settings.py:32
msgid "fr-fr"
msgstr "fr-fr"

Solution

  • I think your LANGUAGES setting is incorrect, please try this:

    LANGUAGES = [
        ('fr', gettext('French')),
    ]