Traduire du JS avec javascript_catalogue

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

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'),
)

J’adorerais changer le monde, mais ils ne veulent pas me fournir le code source…

+0 -0
Auteur du sujet

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?

Édité par Sanoc

J’adorerais changer le monde, mais ils ne veulent pas me fournir le code source…

+0 -0
Auteur du sujet

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 ;)

J’adorerais changer le monde, mais ils ne veulent pas me fournir le code source…

+3 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

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