Encore une question sur Django concernant la localisation des fichiers javascript. Django fournit une bibliothèque javascript petite et pratique qui est utilisée comme gettext pour internationaliser les chaînes dans les fichiers javascript.Django 1.2.3 - Internationalisation - makemessages ne détecte pas toutes les chaînes
Je l'ai configuré avec succès (au moins la fonction d'interpolation fonctionne) et j'ai pu générer le fichier po pour la langue française. Cependant, toutes les chaînes ne sont pas détectées. Je ne sais pas vraiment pourquoi parce qu'ils se ressemblent tous. Je n'ai rien trouvé sur le Django Trac et les docs officiels.
Le code javascript est dans un fichier externe inclus dans le modèle et Django l'a apparemment trouvé parce qu'il a mis deux chaînes dans le fichier po.
L'inclusion dans le modèle HTML:
<script src="{{MEDIA_URL|default:'/media/'}}js/list.js" type="text/javascript"></script>
Le code javascript:
/* ---------------
* Upload progress
* --------------- */
$(document).ready(function() {
$(function() {
$('#upload_form').uploadProgress({
//...
/* function called just before starting the upload */
start: function() {
$("#upload_form").hide();
filename = $("#id_file").val().split(/[\/\\]/).pop();
fmts = gettext('Uploading %(filename)s...');
dat = {
filename: filename
};
s = interpolate(fmts,dat,true);
$("#progress_filename").html(s);
$("#progress_container").show();
},
/* function called each time bar is updated */
uploading: function(upload) {
if (upload.percents >= 100) {
window.clearTimeout(this.timer);
fmts = gettext("Saving %(filename)s...");
dat = {
filename: filename
};
s = interpolate(fmts,dat,true);
$("#progress_filename").html(s);
} else {
fmts = gettext('Uploading %(filename)s : %(percents)s%...');
dat = {
filename: filename,
percents: upload.percents
};
s = interpolate(fmts,dat,true);
$("#progress_filename").html(s);
}
},
//...
});
});
});
/* --------------------
* Confirmation dialogs
* -------------------- */
function delVid(title) {
fmts = gettext('Do you really want to delete the video "%(title)s"?');
dat = {
title: title
};
s = interpolate(fmts,dat,true);
return confirm(s)
}
function abortVid(title) {
fmts = gettext('Do you really want to abort the processing of the video "%(title)s"?');
dat = {
title: title
};
s = interpolate(fmts,dat,true);
return confirm(s)
}
La première partie est une utilisation standard du module jquery.uploadprogress pour JQuery et la deuxième partie est juste deux fonctions pour les popups de confirmation.
Les chaînes détectées sont à la fois dans la première partie:
- 'Transfert% (nom de fichier) s ...'
- 'Saving% (nom de fichier) s ...'
J'ai utilisé la commande "django-admin.py -d djangojs -l fr" et il a généré un fichier djangojs.po avec ces deux chaînes. Je les ai traduits. Malheureusement, ils ne sont pas traduits lors de l'exécution. Il semble que j'ai deux problèmes finalement.
Une idée?
Bonne nouvelle! J'ai lu votre article et je ne savais pas que l'analyse par javacript était un tel hack. J'aurais dû regarder dans la source.J'espère qu'ils accepteront votre patch pour 1.3.1 ou quelque chose, il le fera. Ensuite, ils passeront probablement à Babel un jour. –
Probablement serait utile pour quelqu'un: N'a pas fonctionné avec 1.3.1, a bien fonctionné après le passage au tronc actuel (Django 1.4-pré-alpha). – Tony