Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Internationalization of static JS in Django

I want to translate a part of the JS in Django.

I've try the command python manage.py makemessages -d djangojs but it take only file in TEMPLATE_DIRS in the settings.py

I've try to set a JS in a template directory, and it work perfectly.

I've the djangojs.po and i can generate the .mo when i compile.

So the question is : How make message in static file?

I've found the same problem Here and Here but no one answer who keep a good architecture.

Please, save me!

My architecture:

  • myapp
    • locale
    • static
      • myapp
        • js
          • try.js
    • template
      • myapp
        • try.html
    • views.py
    • urls.py
    • [...]

PS: Sorry for my english, i'm not native ;)

like image 382
Sanoc Avatar asked Sep 27 '22 09:09

Sanoc


1 Answers

My error is when i set the STATIC_ROOT in settings.py. In fact this variable say at Django where stock Static when it do a CollectStatic on the server, i used her for say where found my static (Django can find all static whitout informations, it find static on a folder static on the project folder or on the app folder)

Finally :

set this in the urls.py of the pro

js_info_dict = {
    'domain': 'djangojs',
    'packages': ('app.kanboard',),
}

urlpatterns = patterns('',

    [...]

    #Internationalization Javascript
    url(r'^jsi18n/$', 'django.views.i18n.javascript_catalog', js_info_dict),

)

In the template

<script type="text/javascript" src="{% url 'django.views.i18n.javascript_catalog' %}"></script>

In the JS in static/my_app/my_file.js

document.write(gettext('Ma chaine de caractère a traduire'))

After, we rule this command-line

python manage.py makemessages -d djangojs

Here, djangojs is the domain set in urls.py at the begin (It's a pseudo-convention)

At this time, we have a djangojs.po in the folder locale what we can compile as a standard .po.

Link of the doc : Here

Lik of my ticket where you can find a sample project and explication in english : The ticket

Good luck !

like image 152
Sanoc Avatar answered Oct 11 '22 17:10

Sanoc