L'objectif est d'offrir un bouton / sélectionner une liste déroulante ou similaire pour changer la langue de l' interface publique 1) à la volée.
Ce que je recherche
- Code du plugin ou du thème ...
- ... ou des idées
- L'utilisation d'une solution de contournement avec
load_textdomain()
serait appréciée pour laisser la traduction aux fichiers .po / .mo - Des idées sur la façon d'analyser les chaînes dans l'interface (par exemple, les fichiers ajax / plain php / ini, json, xml) lorsque vous ne comptez pas sur une fonction de domaine de texte
Remarque:
1) Il ne s'agit pas de publier dans différentes langues.
2) Je n'ai pas besoin de code pour créer la liste déroulante / le bouton / quoi que ce soit. Il s'agit uniquement du code / système fournissant les chaînes pour l'interface utilisateur.
Merci!
WPLANG
constante pourrait être une option. Je le fais sur deux sites avec un contenu multilingue où le plugin multilingue ne parvient pas à déclencher la traduction de l'interface utilisateur. S'il devait s'agir d'une solution AJAX / JSON, je ne saurais pas comment aider.Réponses:
De loin, la meilleure façon (la plus simple) est d'utiliser le filtre de paramètres régionaux (à l'intérieur
get_locale()
).Configurez d'abord une fonction rapide pour récupérer une langue différente à utiliser sur le
locale
filtre.J'ai laissé cela comme une fonction globale, pourrait être utile ...? Le reste du plug-in que j'ai enveloppé dans une classe.
Il crée une liste déroulante des langues possibles parmi lesquelles vous pouvez sélectionner.
Désavantages
wp-content/languages
fichiers du formulairexx_xx.mo
. S'il n'est pas de cette forme (tous les fichiers .mo ne le sont pas), le plug-in ne le détectera pas!$locale
autre chose que la langue? Si c'est le cas, il est toujours possible d'obtenir les mêmes paramètres régionaux, mais fournissez des traductions alternatives. C'est beaucoup plus compliqué cependant ...Le code
la source
'wp-admin/includes/ms.php'
déclenche un avis administrateur pour la mise à jour de vos sites réseau (lorsque vous êtes un seul site!). Il se peut queformat_code_lang()
cela doive être dupliqué dans une fonction personnalisée.Si vous pouvez vous contenter d'une actualisation de page, la redéfinition de la
WPLANG
constante pourrait être une option. Je le fais sur deux sites avec un contenu multilingue où le plugin multilingue ne parvient pas à déclencher la traduction de l'interface utilisateur.la source
http://example.com/language/whatever/
, non?$_SESSION
variable pour déclencher la redéfinition deWPLANG
la prochaine charge de page devrait suffire. Si vous souhaitez reproduire cela sur un site multilingue, notez que, comme le dit le commentaire avec le pastebin, le code qu'il contient fonctionne avec WPML, dernière version gratuite. Il ne peut pas être répliqué 1 à 1 avec qTranslate, car ces URI ne sont pas physiques mais réécrits via lemod_rewrite
module apache. Je suis sûr qu'il peut être ajusté, mais ne fonctionnera pas "tel quel".$_SESSION
) Mon problème est que, afaik, ils sont assez difficiles à gérer et que les trucs entre les globaux et le tableau peuvent se mélanger facilement. Donc, si j'essayais de trouver un moyen de changerWPLANG
, alors je dois trouver un moyen solide de le faire d'une demande à l'autre. Peutadd_query_arg/get_query_var
- être fera l'affaire ...http://www.qianqin.de/qtranslate/
est ce dont vous avez besoin ...
Edit I - après commentaire. Tout d'abord - merci pour tous ceux qui ont contribué au torrent downvotes. (c'est ce qui arrive quand on ne visite pas assez souvent: -))
now - La fonction qui gère le commutateur est dans qtranslate-core. (commence à la ligne 80 plus ou moins - dépend de la version que vous voulez.)
Puisque vous ne pouvez pas regarder dans un code NOT OOP, et que je n'ai plus rien d'autre à faire - j'ai pris 10 minutes pour synthétiser, paraphraser compiler ce non-OOp avec encore un autre code non-OOP pour vous.
(désolé, - vieille école primitive ici)
En supposant que j'ai compris la question && En supposant que vous vouliez que le code soit pour l'administrateur && en supposant que vous saurez comment le porter sur le front-end si vous voulez && en supposant que vous compreniez que le code n'est pas optimal:
REMARQUES :
1 - Il a été construit en 10 min. sur la machine locale à l'aéroport. La raison pour laquelle je dis cela est que la seule installation wordpress disponible disponible que j'ai ici est assez ancienne. (2.9 je pense).
Cela signifie que le menu de langue apparaîtra probablement sous la division d'aide contextuelle, car une nouvelle structure de div a été récemment introduite (avec des onglets) - mais cela devrait quand même fonctionner. (Je promets d'y revenir plus tard si j'ai le temps)
Si j'avais plus de temps (et un nouveau code wordpress ici), j'intégrerais probablement cela dans la nouvelle barre d'administration avec
add_action( 'admin_bar_menu', 'k99_add_language_menu_2', 1000 );
(j'ai déjà promis d'y revenir)2 - vous devriez avoir les fichiers de langues listés dans le dossier "languages" dans wp-content (mieux ??) ou wp-include. sur ce point - le code n'est qu'une preuve de concept - et bien sûr si on a plus de temps le menu doit être construit de manière dynamique et pas comme ici.
3 - votre WPLANG dans la configuration doit être vide. Je ne suis pas sûr que cela fonctionnera sur les versions wp plus récentes si une langue est déjà définie.
4 - il s'agit d'une simple preuve de concept synthétisée et paraphrasée construite sur ce qui a été vu dans le code de traduction (également ancienne version) - donc la plupart des choses se font de manière "rapide", pas nécessairement de la "bonne" façon (comme l'ajout de JS , pas de domaine texte dédié etc.).
EDIT II
quelqu'un a de la chance aujourd'hui! (Retard de vol)
Puisque vous recherchiez des "idées" d'approches, en voici une autre célèbre.
Il ne rentrera pas dans un plugin, ni dans aucun autre environnement non exclusif, mais il pourrait vous donner une autre direction sur la façon de gérer les "trucs du navigateur".
Cela permettra d'obtenir la langue avec un GET comme:
<a href="index.php?lang=de">German</a>
ou<a href="whatever.php?lang=ml">my Language</a>
Pour l'utiliser, vous pouvez créer un code (appelons-le wp-langswitch.php)
maintenant, dans wp-config, juste avant la constante WPLANG, nous devons inclure notre code.
Maintenant - il serait évidemment préférable d'ajouter des cookies au mélange pour stocker les langues.
EDIT III
J'ai promis d'y revenir plus tard - voici comment (d'une manière très incorrecte et primitive) il pourrait être intégré à la barre d'administration (au lieu du menu d'aide contextuelle)
Remplacez simplement cette fonction (ou ajoutez) à l'ancien code (le non-plugin NON-OOP d'origine).
Comme je l'ai dit, je n'ai pas de nouvelle installation wordpress ici sur local qui dispose d'une barre d'administration - mais cela devrait fonctionner.
(et encore une fois, cela pourrait ne pas fonctionner ... mais je suis sûr que vous pouvez résoudre ce problème si vous le voulez vraiment - même si ce n'est pas OOP) :-)
dois courir maintenant. j'espère que cela aide en quelque sorte.
EDIT IV - changé edit III en verion de travail pour la barre de menu admin (au moins sur mon wp 3.4)
puisque je n'avais pas d'installation de 3.4 en état de fonctionnement - et maintenant je suis revenu et je le fais - j'ai édité la solution Edit III - et cela fonctionne pour moi.
Concernant les votes positifs, je m'en fichais. Et je n'ai pas besoin de "primes" (quelles qu'elles soient ..) C'est juste pour le plaisir de l'exercice que vous devriez peut-être le donner à l'auteur de qTranslate. :-) malgré le fait qu'il ne s'agit pas de POO - c'est un plugin génial avec beaucoup à apprendre dans de nombreux domaines. compte tenu du "quand" de cette version du plugin, c'est même incroyable. vaut l'effort indescriptible de lire un code NON OOP - même s'il ne l'est pas - OOP. Et même s'il n'est pas correctement en retrait (bon dieu!).
la source
require()
. Vous ne pouvez pas utiliserdefine()
deux fois la même chaîne. Edit III a quelques problèmes avec les langues. La sélectionen_US
ne ferait rien (?), Mais lade_DE
réglerait surEnglish
;). Pour résumer: j'attribue des primes et je les remets à (par exemple StephenHarris) pour une réponse complète et fonctionnelle. Si vous avez quelque chose comme ça, veuillez mettre à jour votre réponse (approche par cookie intéressante) et je peux ajouter et vous récompenser une prime.