Traduire du JS avec javascript_catalogue

Le problème exposé dans ce sujet a été résolu.

Bonjour,

J'essaye de faire une traduction des textes JavaScript via Django mais je n'arrive pas a mes fins.

J'ai ajouter le catalogue a mes urls directement dans un i18n_patterns (suite a l'avis d'un stackOverFlow) qui se trouve donc dans mon urls.py du projet.

J'ai ensuite ajouter cette vue a mon template et ai ajouté un essai de base, mais rien a faire…

J'ai beau faire des python manage.py makemessages -d djangojs je n'ai pas l'impression de brasser quelque chose de consistant…

Est-ce que quelqu'un s'y connais un peu pour me décrire la démarche ?

Mon template:

1
2
3
4
5
6
7
8
<!-- Traduction for JS -->
<script type="text/javascript" src="{% url 'translateJS'%}"></script>

<script>
    $(function() {
        alert(gettext("Companies"));
    });
</script>

Mon urls.py:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
from django.conf.urls.i18n import i18n_patterns
from django.views.i18n import javascript_catalog

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

urlpatterns = patterns('',
    [...]
    url(r'^i18n/', include('django.conf.urls.i18n')),
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

urlpatterns += staticfiles_urlpatterns()

urlpatterns += i18n_patterns(
    url(r'^jsi18n/$', javascript_catalog, js_info_dict, name='translateJS'),
)
+0 -0

Ah j'ai du nouveau!!

Lorsque je met un code JS dans le répertoire template d'une application il est pris en compte et me forme bien un fichier .po

Reste a donc a savoir comment éviter de devoir les mettre dans template. Puisqu'on m'a appris a y mettre dans static.

Serait-ce propre de mettre les static js dans mon TEMPLATE_DIRS?

+0 -0

Suite a l'ouverture d'un ticket chez Django j'ai eu une réponse intéressante.

Mon erreur venait de la constante STATIC_ROOT dans settings.py. En effet cette dernière permet de dire à Django où mettre les STATIC au moment de faire le CollectStatic sur le serveur, moi je l'utilisais comme un moyen de dire a Django ou se trouve mes static (hors il les trouve tout seul soit dans le dossier de projet, soit dans les dossiers d'applications)

Au final il suffit donc de faire :

Dans le urls.py du projet

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
js_info_dict = {
    'domain': 'djangojs',
    'packages': ('app.kanboard',),
}

urlpatterns = patterns('',

    [...]

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

)

Dans le template

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

Dans le script JS présent dans static/my_app/mon_fichier.js

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

On envoie ensuite la commande

1
python manage.py makemessages -d djangojs

Où djangojs est en fait le domaine donner dans l'urls.py précedement (convention)

A ce moment précis on reçoit un djangojs.po dans le fichier locale que l'on peut alors traiter comme un .po standard.

Lien utile en cas de besoin : Documentation Django

Lien utile ou on trouve un mini projet et les explications associées : Ticket Django

Bonne chance a vous ;)

+3 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte