Plugin dctranslations for Dotclear 2
By Jean-Christophe Dubacq on Sunday 4 October 2009, 20:26 - Dotclear - Permalink
Si vous voulez faire un blog en une seule langue, Dotclear le fait très bien par défaut. Si vous voulez mélanger des articles dans une langue et dans une autre, sans effort particulier de traduction, c'est également très bien géré. Si vous voulez faire un blog avec des articles en deux langues, tous traduits intégralement, vous pouvez (encore une fois par défaut) utiliser les capacités multi-blogs de Dotclear et faire simplement deux blogs distincts.
Mais si vous voulez réellement faire du contenu bilingue (petit à petit ou tout d'un coup), avec une réelle correspondance entre les articles, en en traduisant certains mais pas tous, en permettant aux lecteurs bilingues de sauter d'une traduction à l'autre, en mettant le maximum d'éléments dans la langue du visiteur (la navigation tout d'abord, et si un article existe en plusieurs versions, celle qui est préférée par le lecteur) tout en laissant accès au reste, bref, pour faire un réel site multilingue, cette extension dctranslations est pour vous.
La page de maintenance de ce plugin est à cette adresse : http://jean-christophe.dubacq.fr/post/dctranslations
Installation
Utilisez le fichier zippé fourni dans la page de maintenance. La zone d'administration est dans Blog > Traductions. La langue du blog doit être mise à une valeur vide (c'est fait automatiquement lorsqu'on se rend sur les paramètres du blog et qu'on les sauve ; il est important d'aller ensuite dans la zone d'administration des traductions pour régler les langues visibles et la langue de dernier recours). Le fonctionnement du plugin n'est pas correct tant que le paramètre de langue n'est pas vide (on peut vérifier dans Extensions > about:config).
Cette extension rajoute un panneau de commande pour choisir les langues utilisables par les lecteurs pour naviguer sur le site, une interface pour traduire les billets, les pages statiques ou des petits éléments de navigation. La traduction des widgets (definition) ou des descriptions de catégories sont laissées à d'autres extensions (mentionnées plus loin).
Ce plugin requiert l'usage du plugin stacker, en version au moins 0.4.
Cette extension redéfinissant des codes internes standards de Dotclear, il est recommandé après l'avoir installé d'aller dans le tableau de bord, et de faire Extensions -> Maintenance -> Vider le cache des templates.
L'extension autolocale joue un rôle similaire à cette extension pour ce qui est de présenter le blog en changeant la langue de navigation automatiquement selon les préférences de l'utilisateur, mais aucun contrôle plus fin n'est permis (et pas de traduction de billets). Pour un système multilingue complet, il est recommandé d'installer la dernière version du plugin translatedwidgets, ainsi que le plugin kezako.
La version courante de cette extension est 1.10.0 (local svn 406).
Cette extension est sous la licence GPL version 2.0.
Utilisation
Simple utilisateur
Lorsque vous naviguez sur un blog muni de cette extension, Dotclear choisit votre langue préférée (soit la dernière que vous aviez choisie manuellement, soit celle qui est indiqué dans votre navigateur). En dernier recours, une langue a été choisie par l'auteur du blog (si aucune de vos langues indiquées ne convient).
Pour indiquer une langue à votre navigateur, il s'agit presque toujours d'une préférence que vous pouvez modifier. Cette page de l'organisation W3C indique (en anglais) selon votre navigateur où trouver ce réglage : http://www.w3.org/International/questions/qa-lang-priorities.
Lorsqu'un billet ou une page est disponible en plusieurs langues, la langue préférée est présentée par défaut. Un widget (qui peut avoir été ajouté au site) permet de choisir une autre traduction (si un locuteur multilingue désire voir une autre version).
Simple auteur
Lorsque vous composez (ou éditez) une page ou un billet, apparaît en dessous de la zone usuelle de saisie une zone pour saisir une nouvelle traduction à chaque clic sur le bouton « nouvelle traduction », ainsi qu'une zone pour chaque traduction déjà entrée. Chaque zone comporte cinq indications: titre, langue, extrait, contenu, URL (la signification de chacun de ces cinq champs est la même que pour la langue d'origine). La zone peut être masquée partiellement, laissant alors apparaître seulement langue et titre.
Pour effacer une traduction déjà entrée, une case permet de le faire. La traduction n'est pas effacée tant qu'une sauvegarde n'a pas été faite.
L'URL sera déterminée automatiquement à partir du titre traduit, sauf si elle est modifiée manuellement. L'URL d'un billet est :
- ...nomdusite/tpost/lang/url-de-la-traduction (billet traduit)
- ...nomdusite/opost/lang/url-du-billet (billet dans la langue d'origine)
- ...nomdusite/post/url-du-billet (prend automatiquement la langue préférée du lecteur)
Chargé de traduction
Parce que tout n'est pas parfait, il est parfois nécessaire de rentrer à la main des éléments de traduction. Par exemple, la traduction des mots-clefs (tags), des titres de widgets (lorsque ce n'est pas le titre par défaut), etc. Le panneau d'administration (Blog > Traductions) permet d'entrer des traductions qui, ajoutées aux traductions déjà livrées avec Dotclear, servent à traduire les éléments visibles.
Le panneau d'administration comporte deux parties, une pour les réglages multi-lingues du blog, et une autre sur les éléments de traduction. Le réglage du blog se fait de deux façons extrêmement simples: il y a une liste de langages autorisés (disponibles pour la navigation). La valeur par défaut est « en,fr » ce qui autorise à naviguer en anglais ou en français (les deux langues les mieux traduites pour Dotclear). La deuxième valeur est la langue de dernier recours (qui doit être une des langues autorisées pour la navigation) qui est la langue utilisée si un lecteur vient naviguer sur le site et que son navigateur n'accepte aucune des langues autorisées. L'anglais est utilisé par défaut.
La deuxième partie sert à ajouter les éléments de traduction. Pour traduire un élément, il suffit que le terme tel que rentré dans l'interface soit dans la première colonne (« Chaîne »), et que la traduction correspondante soit la colonne correspondante à la langue.
Par exemple, si j'ai un mot-clé « calendar », je peux rajouter sa traduction française « agenda » dans la colonne « Français » et sa traduction allemande dans la colonne « Deutsch ». Je laisse la traduction anglaise vide, puisqu'il n'y a rien à traduire. J'aurais aussi pu choisir que le terme à rentrer était « agenda » et le traduire respectivement en anglais et allemand par « calendar » et « Kalendar ».
Pour ajouter une nouvelle entrée, il y a toujours une ligne vide dans la page 1 (les traductions sont présentées 16 par 16). Un petit menu à cliquer permet de faire apparaître automatiquement des lignes pour tous les titres de catégories et tous les titres de tags (la liste complète des termes sans traduction est alors affichée aussi en dessous).
Pour supprimer une traduction, il faut laisser la première colonne « Chaîne » et supprimer toutes les traductions. Une meilleure interface sera proposée dans l'avenir.
L'effet est normalement visible immédiatement en zone publique.
Administrateur
Comme précisé plus haut, il faut s'assurer que toutes les extensions requises sont présentes (et celles qui sont recommandées aussi), et que la langue du blog est réglé sur la chaîne vide. Il faut aussi remplacer les widgets déjà présents par les widgets équivalents traduits (de translatedwidgets). Par ailleurs, la permission « editor » doit être conférée aux utilisateurs autorisés à s'occuper de la traduction de l'interface (pas des billets; par exemple, traduire les mots-clés et autres éléments graphiques du thème qui ne seraient pas traduits par défaut -- titres de widgets différents du titre par défaut, par exemple). Les administrateurs d'un blog n'ont pas besoin de cette permission.
Trois widgets sont disponibles et à ajouter aux endroits adéquats. Le premier, actif uniquement sur une page de billet ou une page statique, permet de lister toutes les traductions existantes du billet.
Le deuxième, « langue de navigation », permet de choisir sa langue de navigation (elle devient alors la langue préférée pour ce site) sans passer par les préférences de son navigateur (toutefois, il peut être indispensable de recharger la page en « outrepassant » le mécanisme de cache, souvent par shift-F5, ou en quittant son navigateur). Il est assez important de le mettre, car beaucoup d'utilisateurs ne paramètrent pas correctement leur navigateur.
Le troisième, enfin, permet de remplacer le widget de choix des langues en sélectionnant les articles par leur langue s'ils existent dans la langue en question, pas seulement par leur langue d'origine. Il est appelé « Montrer seulement les billets en ... ». L'autre widget est gardé pour des raisons historiques, mais remplit moins de services (et s'appelle toujours « Langues du blog »).
Pour signaler un bug ou aider cette extension
Le mieux est de me contacter par courrier (pour un bug) ou de laisser un commentaire (pour dire que vous avez testé cette extension). En cas de mise à jour, je modifierai ce billet.
Liste des changements
Note : ce journal est non-exhaustif, généré automatiquement, en anglais, et sans doute non-informatif avant 2009.
- Local SVN release 404 (jcdubacq,2009-10-03)
- Fix bug with postgresql when creating new post
- Update for DC 2.1.6: delete references in declarations
- Move _widget.php to _widgets.php
- Local SVN release 374 (jcdubacq,2009-04-30)
- Update translations
- Local SVN release 372 (jcdubacq,2009-04-30)
- Tabs in administration area
- List of updated words
- Clean up code
- New screenshots
- Local SVN release 364 (jcdubacq,2009-04-28)
- Allow deleting a translation in a more natural way
- Allow several translations in one edition cycle
- Local SVN release 358 (jcdubacq,2009-04-25)
- Remove unnecessary tweaks for translatedwidgets
- Local SVN release 343 (jcdubacq,2009-04-22)
- Reindent code
- Change licence to GPL version 2.0
- Local SVN release 322 (jcdubacq,2009-02-07)
- Translate blog name and description also
- Local SVN release 305 (jcdubacq,2009-01-27)
- Fix (mostly german) locales
- Local SVN release 299 (jcdubacq,2009-01-26)
- Adapt to version 0.3 of stacker (behavior initStacker)
- Local SVN release 278 (jcdubacq,2009-01-01)
- Finalize documentation, make new release utility, release
- Local SVN release 275 (jcdubacq,2008-12-26)
- Reinstate version keyword
- Local SVN release 274 (jcdubacq,2008-12-26)
- Delete svn counter
- Local SVN release 273 (jcdubacq,2008-12-26)
- Fix tag feed, add SVN revision to number
- Local SVN release 260 (jcdubacq,2008-11-18)
- Merge supportedlang and dctranslations
- Local SVN release 242 (jcdubacq,2008-11-11)
- Reformatting
- Local SVN release 168 (jcdubacq,2008-05-06)
- Order plugins and themes
- Local SVN release 43 (jcdubacq,2008-02-15)
- Adding all other personal plugins
Travail restant à faire
Permettre la suppression de traductions de façon plus naturelle.Permettre plusieurs traductions en une seule sauvegarde.- translatedwidgets: faire un widget texte multilingue.









Comments
Super d'avoir mis ce plugin en ligne. Cela fait un joli cadeau de noël ! Merci
Merci beaucoup pour ces plugins, ça correspond exactement à ce dont j'aurai besoin.
J'ai donc tenté de les installer, la traduction d'articles fonctionne bien mais j'ai par contre pas reussi à faire traduire les titres des widgets de la sidebar.
Exemple avec le plugin otherblogs, je lui mets comme titre testfr je rajoute avec l'administration des traductions une ligne "chaine testfr, francais rien, english testen, espanol testes". Langues pour la navigation j'ai fr, en, es. Langue de dernier recours: English. MOn champ lang du about:config est bien vide. Et pourtant le titre du widget reste definitivement bloqué sur la version francaise, testfr. J'ai raté une étape en route ou y a quelque chose qui m'échappe ?
http://blogs.sematos.eu/
Merci
Bonsoir,
Ce plugin est extrèmement utile et me permet de passer de spip à dotclear.
Comme vous, j'ai choisi (avant de découvrir votre site!) le thème Noviny.
Si je vois bien comment virer le widget "tags" (non traduit) inclus d'office dans le thème Noviny pour le remplacer par votre widget traduit, je n'ai aucune idée de la façon dont vous êtes parvenu à automatiser la traduction du menu tpl:NovinyMenu
Pourriez vous m'éclairer ? (je ne connais dotclear que depuis 48 heures)
(via kezako -> autre chose -> Type/sous Type ?)
Merci d'avance
NB : Gwenaël mange un coussin, pendant que chez nous (4 mois) "Perrine mange mon pull over au lieu de son biberon". Il y a une forte parenté au niveau chorégraphie ! :+)
Encore moi, (désolé pour le double posting) mais il vient de m'apparaître que je vais avoir le même problème concernant les deux champs 'Nom du blog' et 'Description du blog' dans les paramètres du blog.
Vous vous en sortez par une feinte de sioux en mettant tout en latin ;+)
Hélas, moi il va falloir que je traduise (surtout le champs Description en fait). Et là, je sèche.
Merci d'avance
@pilow: J'utilise une version modifiée de Noviny. La modification qui vous intéresse est dans le fichier
_public.phpautour de la ligne 71 :if ($i == $current) {$res .= sprintf($active_item,html::escapeHTML($v[1]),html::escapeHTML($v[0]));
} else {
$res .= sprintf($item,html::escapeHTML($v[1]),html::escapeHTML($v[0]));
}
Il faut remplacer par ceci :
if ($i == $current) {$res .= sprintf($active_item,html::escapeHTML($v[1]),html::escapeHTML(__($v[0])));
} else {
$res .= sprintf($item,html::escapeHTML($v[1]),html::escapeHTML(__($v[0])));
}
Une fois ceci fait, vous saisissez dans une langue (de votre choix, j'utilise habituellement l'anglais) les éléments de menu (par exemple : Poubelle, lien vers pages/vacuum, vous saissez Poubelle). Vous vous rendez ensuite dans Blog -> Traductions (ce n'est pas Kezako, c'est un peu au dessus). Dans la ligne vide, la première, vous saisissez Poubelle pour chaîne, et pour English vous saisissez Trash. Vous pourriez saisir Poubelle pour Français, mais ce n'est pas nécessaire (une emplacement vide correspond à laisser l'expression intacte).
Je note le bug sur la traduction du titre et de la description du blog, un oubli idiot de ma part. Ce n'est pas difficile à faire, mais il me faut quand même un peu de temps. Je l'intégrerai à la prochaine version de dctranslations.
@Jean-Christophe Dubacq: Merci beaucoup pour ces précisions. Cela fonctionne parfaitement. Pour ce qui est du titre et du sous titre, merci d'avoir mis ça dans le Todo, je vais mettre les miens 'en dur' pour l'instant, en attendant la prochaine version de ce plugin, dont je ne saurais trop répéter à quel point il m'enchante. Merci encore.
Bonjour,
Un petit message pour dire que la prise en compte de la traduction des champs "nom du blog" et "description du blog" marchent très bien avec la nouvelle version release 322 du plugin.
(test sur mon site) Merci bcp.
Bonjour,
Un petit mot pour dire qu'après tests, la suite DCtranslation fonctionne très bien en multi-blog multi-lingue. Il sait tout faire, ce plugin ;+)
voir ici (deux blogs pour l'instant) :
http://www.oghme.com
http://cucuc.oghme.com
Une grand merci pour ces plugin c'est ce que je cherchais !
Une petite question : pourquoi Jean-Christophe ne soumet-tu pas tes plugins sur http://plugins.dotaddict.org ?
Thanks for great plugin. It really saved me
One question to pillow: How did you make it on cucuc.oghme.com that there is no refresh needed? I saw that clinks on the page have ?lang=x&navlang=x sticked at the end, how did you made it? Is just something I need
Bonjour
Une grand merci pour ces plugin c'est ce que je cherchais !
par contre j'ai un problème pour ajouter des langues dans DCTranslations
en les ajoutant dans About:config ou dans Traductions rien n'y fait
une série d'input se crée dans Traductions Dictionnaire rapide mais pas le nom de la langue
Avez vous eu ce problème?
et avez vous une ou des solutions?
Merci pour votre réponse prochaine.
Cordialement
AlainV
@AlainV : Est-ce que la langue que vous voulez ajouter est bien une langue existante pour Dotclear ? (liste dans .../admin/langs.php)
Également : De quelles langues s'agit-t-il ? Je sais (bug connu) que seuls les codes à deux lettres sont reconnus (pas de fr-ca par exemple, pour nos amis du Québec).
merci Jean Christophe
effectivement dans la liste dans (.../admin/langs.php) il n'y a pas ni l'allemand (de) ni l'espagnol (es) ni l'italien peut-être ça vient de là
je vais essayer d'installer ces langues
je ne sais pas comment le faire mais je vais chercher sur google
maintenant si vous avez une idée je suis preneur!
merci encore beaucoup pour ce système de traduction qui m'a l'air parfait
Cordialement
AlainV
problème résolu
il suffit d'installer les langues désirées dans DC2 et tout devient nickel
merci Jean Christophe
on peut trouver les langues disponibles à cette adresse:
http://download.dotclear.org/l10n/@...
Bonjour ! Merci pour ce super plugin qui tombe vraiment à point nommé !
Une petite question cependant : cela ne permet pas la traductions des "pages" ? J'ai essayé d'en traduire une (/contact) mais la traduction n'apparait pas en ligne ?
Ai-je loupé quelque chose ?
Merci d'avance !!
C'est officiel, je suis une buse
J'avais oublié de mettre le staker lors de ma migration de mon local à mon en ligne...
Bref, ça marche très bien, c'est super !
Encore merci pour ce plugin qui tombe vraiment vraiment à pic !!
J'adore dotclear
@dionizos : sorry for late answer.
I hacked the theme some.
But then you do have to insert 'canonical URLs' in your <head> so that google and other bots don't archive all the ?navlang=xx&lang=yy variations as different URLS.
(http://googlewebmastercentral.blogs...)
@notre seigneur et maître
Merci encore pour ce plugin
Bonjour
Je pensais avoir vu quelque chose pour permettre d'avoir une variable dans le template contenant le code du langage en cours, mais je n'arrive pas à remettre la main dessus (je me suis déjà penché sur dctranslations, translatedwidgets, stacker et kezako).
Aurais-je loupé quelque chose ? Merci
Bonjour,
Merci pour ces plugins essentiels.
Je n'ai pas compris quel code insérer pour permettre une traduction. Peut-on avoir plus d'explications là-dessus ?
Merci encore,
Thibaud.
@Dagnan:
$core->blog->settings->lang_navest initialisé par mon plugin à la langue finalement retenue pour la navigation.Bonjour,
Après bientôt 8 mois d'utilisation de DCtranslation, comme qui dirait, "que du bonheur".
Je reviens vers vous avec une question de SEO.
Dans la mesure où on prend du temps à écrire nos blogs en plusieurs langages, autant que cela profite à notre indexation au maximum ! J'utilise depuis plusieurs mois déjà les "canonical URL" , en insérant dans la balise HEAD de mes thèmes, un lien
Cela permet d'éviter que Google et les autres aillent enregistrer toutes les version de mes URL avec des paramètres ( ?lang=xx&navlang=yy par exemple, mais aussi d'autres trucs que je balade dans mes URL) et ne décrète que le contenu est "dupliqué" (ce qui nuit au référencement en affaiblissant le pagerank d'une page donnée)
Mais, dans la mesure où le contenu de chaque billet traduit est différent (d'une langue à l'autre), je trouvais domage de ne pas indiquer à google et consorts l'URL "opost" pour un billet traduit. Cf :
J'ai essayé d'utiliser la balise { { tpl:TranslationEntryURL } }, mais quel que soit le contexte, j'obtiens "http://www.oghme.com/opost//" sans plus. J'en déduis qu'il me reste encore pas mal à apprendre
Y aurait-il un moyen de faire cela au niveau d'un thème ? (même si c'est pas élégant)
Merci d'avance
@pilow: créé comme bug #242 sur le lab. J'y travaille dès que j'ai le temps. Pour que vous fassiez vous même, un premier élément de réponse : pour que tpost/opost soit défini, il faut être dans une boucle <tpl:Translations>. Est-ce que vous l'aviez bien mis ?
Merci Jean Christophe. Eh bien non, je ne connaissais pas cette balise.
La boucle suivante corrigée,
<tpl:Translations> <link rel="canonical" href="{{tpl:TranslationEntryURL}}" /> </tpl:Translations>fonctionne bien. Elle renvoie les URL traduites (pour chaque langue)
<link rel="canonical" href="http://cucuc.oghme.com/opost/en/p.0..." />
<link rel="canonical" href="http://cucuc.oghme.com/tpost/fr/Ce-..." />
Etc...
Comment puis-je la restreindre à n'afficher que l'URL de la version de l'article qui va être affiché et pas toutes les versions ?
De plus, nous mettons en place une interface de traduction semi-automatique du contenu de nos planches de BD par les lecteurs qui le souhaitent (backend en perl + XMLrpc + à la main parfois). J'aimerais trouver le moyen d'afficher un petite texte "pas encore traduit dans votre langue : xx" quand un utilisateur visite une page dans sa langue de navigation, mais que la version affichée "fallback" sur le "fallback language". Est-ce possible ?
Merci encore.
@pilow: ce n'est pas encore possible dans cette version de dctranslations. Je m'en occuperai (en particulier si vous faites une requête d'amélioration sur le lab de dotclear)...
Merci Jean-Christophe.
Je ferai une requête d'amélioration concernant les URL canoniques demain ou après demain (même si je me sens un peu déplacé à demander une "amélioration" d'un plugin aussi utile et bien fichu).
J'ai trouvé un moyen de gérer l'affichage "page non traduite" via la balise standard { { tpl:EntryLang } } qui affiche la langue du billet réellement affiché, soit le billet initial en cas de fallback. Après c'est un peu de CSS.
Bonsoir
Jean-Christophe, merci encore pour ces fabuleux plugins ! Et merci aussi pour votre précédente réponse (et du coup, pour <tpl:Translations>, que je n'avais vu nulle part).
Sur le blog que j'ai mis en place, je remarque un comportement bizarre :
(mon navigateur est en anglais par défaut)
Si je me rend sur l'url principale, j'ai bien l'interface ET les billets en anglais, mais j'ai aussi les billets en français qui n'ont pas de traduction en anglais. Cela disparait quand je clique sur le lien de changement de langue (URL/lang/en&navlang=en).
J'imagine qu'on doit pouvoir forcer ça ? Ou peut-être un réglage que j'ai oublié ?
Bonjour,
Tout d'abord, merci pour le plugin.
Moi j'aimerais que une fois la langue de navigation choisie, on ne voit que les billets dans la langue choisie, un peu à la manière de la fonction "montrer les billet uniquement en", mais dans toutes les sections du blog (accueil, page catégorie, page tag...).
Je me débrouille en PHP. Je peux peut-être proposer un patch ?
Par quoi dois-je commencer ?
Merci d'avance,
Marc
Merci pour ces plugins très utiles et vivement le widget texte multilingue, il me sera sacrément utile une fois qu'il sera créé ^^
Bonjour.
J'utilise avec la plus grande joie les quatre plugins de traduction.
J'aimerais utiliser aussi le plugin contribute de Moe mais ce dernier n'aime pas dctranslations.
Il ne fonctionnent pas ensemble…
Auriez-vous déjà entendu parler d'un pareil problème et une solution existerait-t-elle déjà ?
Moe a été averti du problème.
En attendant je continue mes recherches.
Merci.
Edfred
Au secours!!!!
je viens d'installer la bête et voila ce que j'obtiens!!!
hel me
Fatal error: Cannot redeclare class dcWidgets in /homez.309/beithazo/www/dotclear/plugins/widgets/class.widgets.php on line 15
Michaël, désactive le plugin widget afin de laisser travailler le nouvel inclus "translatedwidgets".
C'est bien noté dans la notice du plugin du même nom.