xiligroup dev

Forum Replies Created

Visualisation du message 10 (461 sur 470, 527 au total)
  • Auteur
    Articles
  • in reply to: Why xili-tidy-tags plugin ? [updated] #558

    xiligroup dev
    Keymaster

    Why xili-tidy-tags plugin ? why a plugin ?

    This plugin offer to xili-language plugin a smart way to create sub-set of tags according language of the displayed post (or category). The tag cloud content is depending of the front current language in the multilingual website.

    [caption id="attachment_569" align="alignnone" width="300" caption="Checking tags with language groups"]Checking tags with language groups[/caption]

    BUT, as delivered as a plugin, it is also useful for current themes where the author want to ‘organize’ tags in groups ans sub-groups depending semantic or technical parts of his site. With the new template tag (as here in the sidebar), the cloud shows differents terms and tags.

    [caption id="attachment_562" align="alignnone" width="300" caption="Grouping tags (here semantic groups)"]Grouping tags (here semantic groups)[/caption]

    xili-tidy-tags plugin soon available on WordPress Plugin Directory (repository).

    Before to post a more detailled publication, please find below the .zip of the beta version and the read.me text contained in this.

    Download beta release at WP plugin directory : xili-tidy-tags 0.8.2

    The readme.txt :

    === xili-tidy-tags ===
    Contributors: MS xiligroup
    Donate link: https://dev.xiligroup.com/
    Tags: tag,tags,theme,post,plugin,posts, page, category, admin,multilingual,taxonomy,dictionary
    Requires at least: 2.7.0
    Tested up to: 2.7.1
    Stable tag: 0.8.2

    xili-tidy-tags is a tool for grouping tags by language or semantic group.

    == Description ==

    xili-tidy-tags is a tool for grouping tags by language with xili-language plugin for multilingual site. By instance to present only tags in english when the theme is in english because the post or the current category present texts in english. But this tags aggregator can also, by instance, be used to group tags according two or more main parts of the CMS website.
    Technically, as xili-language, this plugin don’t create tables in wordpress db. He only use (rich) taxonomy features. So, with or without the plugin, the base structure is not modified. **Template tags** are provided to enrich the theme and display sub-selection of tags.
    Through the settings admin UI, it is possible to assign to a tag one or more groups (by instance a french tag to the french language group. You can choose different storage policies.

    THIS VERSION 0.8.1 IS A BETA VERSION (running on our sites) – WE NEED FEEDBACK – coded as OOP and new admin UI WP 2.7 features (meta_box, js, screen options,…)

    == Installation ==

    1. Upload the folder containing `xili-tidy-tags.php` and others files to the `/wp-content/plugins/` directory,
    2. If xili-language plugin is activated, groups of languages are automatically created. If not, you can also use xili-tidy-tags to group your tags in semantic group like technical, trademark…
    3. in theme, a new template tag is available : `xili_tidy_tag_cloud` Same passed values as tag_cloud but two new : tagsgroup and tagsallgroup . tagsallgroup can be the parent group slug, tagsgroup is one of the child group slug. If one or both are included, the cloud is built with sub-selected tags in this (theses) group(s).

    **Exemples of script in sidebar.php :**

    = with xili-language plugin activated in multilingual website =

    < ?php _e('Tags cloud','xilidev');?>

    < ?php if (function_exists('xili_tidy_tag_cloud')) xili_tidy_tag_cloud('tagsgroup='.the_curlang().'&tagsallgroup=tidy-languages-group&largest=18'); ?>

    = with semantic group named as category and a group containing trademarks named trademark =

    < ?php _e('Tags cloud','xilidev');?>

    < ?php if (function_exists('xili_tidy_tag_cloud')) xili_tidy_tag_cloud('tagsgroup='.single_cat_title('',false).'&tagsallgroup=trademark&largest=18'); ?>

    == Frequently Asked Questions ==

    = Where can I see websites using this plugin ? =

    dev.xiligroup.com [here](https://dev.xiligroup.com/ « a multi-language site »)

    and

    http://www.xiliphone.mobi [here](http://www.xiliphone.mobi « a theme for mobile ») also usable with mobile as iPhone.

    = Next steps ? =

    A widget for `xili_tidy_tags_cloud` template tag function.

    More admin UI tools for bulk actions with tags groups….

    == Screenshots ==

    1. the admin settings UI : tidy tags groups
    2. the admin settings UI : table and checkboxes to set group of tags.
    3. the admin settings UI : table and checkboxes to set group of tags : sub-selection of groups.

    == More infos ==

    This first beta releases are for multilingual or cms website’s creator or designer.

    The plugin post is frequently documented [dev.xiligroup.com](https://dev.xiligroup.com/)
    and updated [Wordpress repository](http://wordpress.org/extend/plugins/xili-tidy-tags/).

    See also the [Wordpress plugins forum](http://wordpress.org/tags/xili-tidy-tags/).

    = 0.8.1 = some fixes – improved query – better tag_cloud()
    = 0.8.0 = first public beta release.

    © 090331 – MS – dev.xiligroup.com

    Technically speaking

    Since WordPress 2.3, the core include taxonomy library to manage categories, tags and links.
    At root, there is a catalog of terms used to naming the taxonomies. A term can be used in different taxonomies.

    the 3 taxonomies are ‘category’, ‘post_tag’, and ‘link_category’. The first is hierarchical, two are set to qualify posts, one to qualify links.

    In xili-language plugin, one taxonomy in introduced : ‘language’ to qualify posts according his language. With 0.9.8, a taxonomy is added to group and sort languages.
    This taxonomy is to ‘qualify’ terms by grouping them (and sorting them).

    xili-tidy-tags plugin also uses taxonomies to qualify terms (via relationships) for creating groups of tags of the ‘post_tag’ taxonomy. With this way, it is now possible to create hierarchical groups of tags and display sub-set of tags cloud. Two examples :

    1) On a multilingual site as here : if the post (or category) in front is in french, the tags cloud only show tags in french and internationals tags (by instance technical words or trademarks).

    2) On a CMS site with important main parts, the designer can choose to display tags cloud differently in the philosophy part and in the computer software part.

    xili-tidy-tags plugin provides in admin UI two ways to check a tag to one or more groups.
    a) when creating or modifying a tag
    b) with the dashboard page tidy groups assign (in a one shot table)

    A template tag (soon a widget) can be added in the sidebar (or replace the default one). In the passed values, it is included the name of group of tags that must be displayed (after the sub selection by the plugin).

    Soon more infos…
    M 090402 after 20:00 GMT

    in reply to: xili-language : shipping 0.9.8.2 [updated] #545

    xiligroup dev
    Keymaster

    This version 0.9.8.2 is a new step in the improvement of xili-language plugin to made a flexible multilingual website (blog or cms). – downloadable in wp repository – to create sub-groups of tags according language, it is recommended to use xili-tidy-tags plugin.

    What’ new ?

    1) In the background, data design has a little changed. By creating a new taxonomy, the languages are now sortable to be display as you want. Nothing to change when upgrading from previous release : only add sorting numbers.

    [caption id="attachment_547" align="alignnone" width="557" caption="Numbers to sort the languages"]Numbers to sort the languages[/caption]

    2) In the html side, it is now possible to insert automatically one language iso code in the html tag via the hooked language_attributes template tag.

    < !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    

    in php code of home page :

    >
    

    (when multiple languages, the list is sorted as you have defined)

    It is also possible to add a meta like this if you define it in functions.php:

    
    
    
    
    
    function my_head_insert_language_metas($curlang,$undefined) {
    	global $xili_language;
    	if ($undefined === false) {
    		$lang = str_replace('_','-',substr($curlang,0,3).strtoupper(substr($curlang,-2)));
    	} else {
    		$listlang = array();
    		//$listlanguages = get_terms(TAXONAME, array('hide_empty' => false));
    		//$listlanguages = get_terms_with_order($xili_language->langs_group_id,TAXOLANGSGROUP); replaced by since 0.9.8.2
                    $listlanguages = get_terms_of_groups_lite($xili_language->langs_group_id,TAXOLANGSGROUP,'ASC');
    		foreach ($listlanguages as $language) {
    			$listlang[] = str_replace('_','-',$language->name);
    		}	
    		$lang = implode(', ',$listlang);
    	}		
    	echo "\n";
    	echo "\n";
    	echo "\n";
    }
    add_filter('head_insert_language_metas','my_head_insert_language_metas',1,2);
    
    

    3) It is also possible to detect the language of the browser of the visitor when he arrived on your homepage by instance. (see preferences in Firefox by instance)
    Only check the settings box in admin UI.

    [caption id="attachment_548" align="alignnone" width="392" caption="Check and update to detect visitor\'s browser language"]Check and update to detect visitor's browser language[/caption]

    See plugin code to analyze the function.

    4) …and fixes (w3c) and best way to localize the_time() without changing the theme php scripts.

    Next step : some examples of scripts to enrich your multilingual theme…

    MS
    090404


    xiligroup dev
    Keymaster

    Lors des tests et de l’installation sur différents sites, immanquablement, on découvre des imperfections ou un défaut de documentation. Depuis la mise en forme majeure en programmation objet (OOP) (version 0.9.7), xili-language est maintenant plus complet pour transformer un thème wordpress en thème multilingue.

    Le kit est téléchargeable sur le site des extensions WordPress ou en mise à jour automatique via le tableau de bord de votre site.

    Quoi de neuf dans la version 0.9.7.4 ?

    Une doc. plus précise dans le code php pour les concepteurs de thème qui souhaite accrocher des fonctions personnalisées aux ancrages (hook) de l’extension elle-même. Profitez-en pour lire les articles récents de la catégorie xili-language.

    [caption id="attachment_532" align="alignright" width="244" caption="Les articles liés"]Les articles liés[/caption]

    Une nouvelle boite dans l’interface d’édition des articles (en haut à droite – mais repositionnable) pour saisir le numéro des articles liés en d’autres langues. (Le rafraichissement Ajax – en alpha test – n’étant pas actif, il n’est pas conseillé d’utiliser simultanément les champs personnalisés pour changer les numéros quand on utilise cette nouvelle boite).

    [0.9.8.2] Apports de cette version :
    Les mots clés sont sous-selectionnés selon la langue grâce à l’extension compatible xili-tidy-tags.
    La requête de sélection a été optimisée. Un défaut W3C a été corrigé. Le widget est multilingue.

    Rappel: utilisez les commentaires liés à chaque article pour questionner ou demander assistance. Le formulaire contact étant réservé aux questions générales, cela permet de diffuser les FAQ pour d’autres.

    M
    090405

    in reply to: xili-language plugin – new version [update 0.9.7.4] #522

    xiligroup dev
    Keymaster

    After main update 0.9.7 with OOP and hooks, xili-language is shipped to day in version 0.9.7.4.

    What’s new ?

    More docs in php code for theme’s designer that want to use xili-language hooks to improve personalization of his multilingual theme. (rules, style, specs of template tags).
    Beta tests of a metabox in post edit admin UI (to replace the custom fields form) when setting the linked posts in other languages. Because, no ajax refreshing occurs (in alpha test) when you use this form (at top right), don’t use custom fields form for linking posts.

    Don’t forget to read recent posts in xili-language category. (Tests of themes with localization, Using hooks,…).

    Don’t forget to use comments below when you need help. Contact form is reserved to general questions.


    xiligroup dev
    Keymaster

    [Note :] Un article actualisé sur les ancrages (en anglais) est ici disponible.

    Comme le permet la structure multilingue de ce site, cet article ne sera pas la traduction stricto-sensu de celui en anglais. Pour un concepteur de thème wordpress qui a un peu l’habitude du php, il lui sera aisé de lire l’article original et de voir comment l’utilisation de l’ancrage ‘xili_language_list’ pour le template_tag xili_language_list() que l’on place dans la colonne latérale des menus du thème. L’ajout de la fonction personnalisée dans le fichier functions.php du thème et de sa function d’accrochage à l’ancrage est compréhensible aisément.

    Sur le thème de ce site, cette fonction spécifique du thème ajoute les drapeaux et les trie selon un ordre spécifié dans la fonction.

    Dans un article précédent, on s’est interrogé sur les différences entre les fonctions ajoutées dans une extension et celles contenues dans le fichier functions.php du thème utilisé. Dans l’extension xili-language, le choix suivant a été fait : tout ce qui concerne des fonctions essentielles est dans le coeur (core) de l’extension et tout ce qui concerne une personnalisation pour coller au design (look) du thème est dans le thème. Cela est tout à fait possible parce que l’extension elle-même intègre des mécanismes d’ancrage (hook) et d’accrochage (add_action, add_filter). C’est en effet, bien meilleur que de modifier l’extension elle-même ce qui n’est pas sans risque lors de mise à jour ou de changement de thème.

    Pourquoi ne pas ajouter une interface de réglages dans le tableau de bord pour ces personnalisations ? D’abord, parce qu’il serait impossible de répondre aux myriades de possibilités et ensuite parce qu’il est plus simple de modifier quelques lignes que d’en créer des milliers pour affaiblir de surcroît les performances.

    A la fin de l’article se trouve la liste des ancrages tant pour les éléments de thèmes que pour les règles de modification des langages.

    [caption id="attachment_540" align="alignright" width="355" caption="Les autres articles"]Les autres articles[/caption]

    Dans l’exemple ci-dessous, on va s’intéresser à la personnalisation du template-tag : xiliml_the_other_posts () qui, inséré sous le titre d’un article, indique (s’ils existent) les liens vers les articles adaptés en d’autres langues. On va afficher les drapeaux des langues concernées et non leur nom comme par défaut.

    Première étape :

    Ajouter votre fonction dans le fichier functions.php et y adjoindre la fonction d’accrochage sur l’ancrage ‘xiliml_the_other_posts’ :

    function my_xiliml_the_other_posts($post_ID,$before = " ", $after = ", ") {
    
    /* here my code */
    }
    add_action('xiliml_the_other_posts','my_xiliml_the_other_posts',10,3);
    

    En commentant par // la dernière ligne, on retrouve l’affichage de base intégrée à l’extension.

    Deuxième étape :

    Vérifier que dans le dossier images du thème, il y a bien le sous dossier contenant les fichiers des drapeaux.

    Troisième étape :

    Copier le script suivant :

    $listlanguages = get_terms(TAXONAME, array('hide_empty' => false));
    		foreach ($listlanguages as $language) {
    			$otherpost = get_post_meta($post_ID, 'lang-'.$language->slug, true);
    			if ('' != $otherpost && $language->slug != $curlang ) {
    				$output .= $before."".__($language->description,THEME_TEXTDOMAIN) ." slug.".png' alt='' />".$after;
    			}	
    		}
    	if ('' != $output) {_e('This post in',THEME_TEXTDOMAIN); echo $output;}
    
    

    Quelques notes sur ce script :

    Après avoir collecté la liste des langues disponibles dans le site, la bouche foreach cherche s’il y a pour une langue donnée, un article lié (dont le numéro est saisi par l’auteur dans le champ personnalisé ou la boite appropriée). Si c’est le cas, le lien est créé avec l’image du drapeau. Si des liens existent, le titre est ajouté puis la liste affichée. On note que la constance THEME_TEXTDOMAIN est utilisé pour le domaine du texte qui sera traduit avec les autres textes du thème.

    Le résultat final est alors celui-ci

    function my_xiliml_the_other_posts($post_ID,$before = " ", $after = ", ") {
    
    $listlanguages = get_terms(TAXONAME, array('hide_empty' => false));
    		foreach ($listlanguages as $language) {
    			$otherpost = get_post_meta($post_ID, 'lang-'.$language->slug, true);
    			if ('' != $otherpost && $language->slug != $curlang ) {
    				$output .= $before."".__($language->description,THEME_TEXTDOMAIN) ." slug.".png' alt='' />".$after;
    			}	
    		}
    	if ('' != $output) {_e('This post in',THEME_TEXTDOMAIN); echo $output;}
    }
    add_action('xiliml_the_other_posts','my_xiliml_the_other_posts',10,3);
    
    

    D’autres astuces lors des prochains épisodes…

    Liste des ancrages (hook) :

    Voir le code php de l’extension pour plus de détails – Très utile pour les concepteurs de thème de type CMS.

    1) Ancrages (hooks) pour les éléments de thème – template tags :
    xili_language_list : liste des langues – décrit dans l’article en anglais.
    xili_post_language : la langue de l’article – à utiliser dans la boucle.
    xiliml_the_other_posts : La liste des articles liés dans d’autres langues.
    xiliml_the_category : le tag qui remplace le tag the_category.
    xiliml_langinsearchform : le tag qui ajoute les boutons radio pour une recherche plus ciblé – à ajouter dans le formulaire de recherche.

    2) Ancrages (hooks) pour les autres fonctionnalités du coeur du plugin :
    xiliml_cur_lang_head (voir ligne 310…) : Les règles qui président au changement de langue du thème.
    xiliml_cat_language : Les règles qui modifient les liens de la liste des catégories dans le menu en fonction du contexte et de ce que l’on veut voir afficher pour naviguer.
    … d’autres sont décrits dans le script php après la ligne 380.


    xiligroup dev
    Keymaster

    [NOTE: ] This post wil be soon updated for latest version of the plugin !
    In the first episode, was described a standard installation and integration of xili-language in a blog or cms with multilingual content (posts in different languages and links between them).

    I a previous memo, we discuss about the features of plugins versus functions in functions.php file of the theme’s folder.

    In xili-language plugin, it was decided and designed that core features are in the plugin and personalized features will be in the theme. It is possible because the plugin provides some hooks to enrich the plugin. The advantages are that themes can continue to be well designed in conformance of the look and the data-design.
    It is far better than modifiying the plugin itself (with the problems of poor maintenance when upgrading by instance the plugin).

    Why not create a admin settings UI ?
    Because it is heavy in coding for poor performances – it is better to add few lines in functions.php than thousand of lines in plugin… (and with its cohort of adverse effects)

    And the end of the article, a list of hooks will be shortly commented but now a detailled example about the template tag « xili_language_list ».

    This tag is used in widget but can also be used in theme design by webmaster (in header, footer or elsewhere outside the loop).

    In the default use, this tag xili_language_list() display the list of available languages and link them to the home (and show the most recent posts in the clicked language).

    In this example, three things will be done : a flag will be added at each line, the class to provide info when the line is selected and a sort to choose the first top languages in the displayed list.

    First step :

    function my_xili_language_list($before = ‘

  • ‘, $after =’
  • ‘) {
    }

    Create the line to attach this function to the hook ‘xili_language_list’ (by « commenting » this line with // at start, default behavior is restored.

    add_action('xili_language_list','my_xili_language_list',10,3); /* activate my_xili... instead the default in plugin */
    

    Second step :

    Don’t forget to add a series of flags in the theme’s images folder (subfolder = flags) with appropriate names.

    [caption id="attachment_507" align="alignnone" width="177" caption="flags in theme\'s images folder"]flags in theme's images folder[/caption]

    Third step :

    copy this script inside the function :

    $listlanguages = get_terms(TAXONAME, array('hide_empty' => false));
    		$currenturl = get_bloginfo('siteurl').'/?';
    		$a = "";
    		$lines = array();
    		$lineorder = array('fr_fr'=>1,'en_us'=>2); /* line to modify where to declare the top languages */
    		foreach ($listlanguages as $language) {
    			if ($before=='
  • ') { if (the_curlang() == $language->slug) { $beforee = '
  • '; } else { $beforee ='
  • '; } } if (isset($lineorder[$language->slug])) { $key = $lineorder[$language->slug]; /* set line sort */ } else { $key = 1000 + $language->term_id; /* if array is empty */ } $lines[$key] = $beforee ."description,THEME_TEXTDOMAIN)."'>"." slug.".png' alt='' /> ". __('in '.$language->description,THEME_TEXTDOMAIN) ."".$after; } ksort($lines); /*sort lines by key */ foreach ($lines as $line) { $a .= $line; } echo $a;
  • Some comments :

    First lines set the vars and keep in db the array of languages, set the order list for sorting it.
    After the loop where each line of the list are defined (and placed).
    List is sorted and displayed…

    Because the languages order can differ where the list is displayed, the array is here in functions.php and not yet in admin UI.

    Fourth step :

    Modify the line #107 containing the array $lineorder to set your languages series in order (by instance the first 2 tops if the site has more than 2 languages.)

    $lineorder = array('fr_fr'=>1,'en_us'=>2); /* line to modify where to declare the top languages */
    

    The final result is :

    function my_xili_language_list($before = '
  • ', $after ='
  • ') { $listlanguages = get_terms(TAXONAME, array('hide_empty' => false)); $currenturl = get_bloginfo('siteurl').'/?'; $a = ""; $lines = array(); $lineorder = array('fr_fr'=>1,'en_us'=>2); /* line to modify where to declare the top languages */ foreach ($listlanguages as $language) { if ($before=='
  • ') { if (the_curlang() == $language->slug) { $beforee = '
  • '; } else { $beforee ='
  • '; } } if (isset($lineorder[$language->slug])) { $key = $lineorder[$language->slug]; /* set line sort */ } else { $key = 1000 + $language->term_id; /* if array is empty */ } $lines[$key] = $beforee ."description,THEME_TEXTDOMAIN)."'>"." slug.".png' alt='' /> ". __('in '.$language->description,THEME_TEXTDOMAIN) ."".$after; } ksort($lines); /*sort lines by key */ foreach ($lines as $line) { $a .= $line; } echo $a; } add_action('xili_language_list','my_xili_language_list',10,3); /* activate my_xili... instead the default in plugin */
  • That all… until after the next episode

    The list of main hooks of xili-language (see php code for more infos about args) :

    Very useful for CMS theme’s designers…

    1) hooks for template tags :
    xili_language_list : here described.
    xili_post_language : the language of current post for the tag under the title in loop.
    xiliml_the_other_posts : the list of linked posts for the tag under the title in loop.
    xiliml_the_category : the tag which replace the tag the_category.
    xiliml_langinsearchform : the tab which add radio-buttons (addable in search form)

    2) hooks for other core plugin functions :
    xiliml_cur_lang_head (see line 310…) : the rules to change the theme’s language.
    xiliml_cat_language : the rules for linking and displaying categories in sidebar menu.
    … other described in plugin’s php code after lines 380.


xiligroup dev
Keymaster

Après une recherche dans le répertoire des thèmes avec le mot clé ‘localization’, on ne trouve que 3 thèmes (il y a aussi le thème ‘default-i8n’ ‘kubrick’ du kit wordpress).
On a choisi de tester les adaptations sur deux – les thèmes Gear et Fusion pour les rendre multilingues pour xili-language.
Ils sont tous deux bien conçus et d’un look et design agréables.

[caption id="attachment_431" align="alignright" width="300" caption="Fusion Theme SnapShot"]Fusion Theme SnapShot[/caption]

[caption id="attachment_436" align="alignright" width="300" caption="Gear theme snapshot"]Gear theme snapshot[/caption]

En guise de préambule :

Un thème multilingue est un thème dont l’environnement (menu, titres généraux) change selon le ou les articles affichés et leur langue. Il n’y a pas de traduction automatique des textes des publications. Ce sont bien les auteurs et éditeurs qui décident quelle est la langue de l’article et si celui-ci est traduit/adapté dans un autre article. Ils gardent le contrôle de l’organisation du site, des pages et catégories. xili-language ajoute simplement une nouvelle taxinomie transversale par la langue. C’est typiquement un système de gestion de contenus (CMS – data-design) qui repose sur des règles précises. Il est donc possible de naviguer en sélectionnant les articles d’une catégorie dans une langue donnée. Il en est de même pour la recherche d’un mot. De même si un internaute arrive via un moteur de recherche sur un article en anglais, si la règle est prévue, le thème environnant l’article sera en anglais et via les menus il découvra la présence potentielle d’un article similaire dans une autre langue.

1) Première étape :

Vérifier que le thème est bien ‘localizable’ donc que tous les mots et termes du thème ne sont pas écrits ‘en dur’ entre les tags HTML mais avec les fonctions __() et _e(). Ici dans les tests, on a constaté que le thème Gear contenait quelques erreurs : fonction sans domaine et fonction avec domaine erroné.

Chercher dans le fichier functions.php, la fonction load_theme_textdomain() et faire les modifications telles que décrites ci-dessous

A) Pour le thème Gear :

function theme_init(){
	if (class_exists('xili_language')) {
		define('THEME_TEXTDOMAIN','default');
		define('THEME_LANGS_FOLDER','/languages');
	} else {
	   load_theme_textdomain('default', get_template_directory() . '/languages');	
	}	
}
add_action ('init', 'theme_init');

B) Pour le thème Fusion :

function init_language(){
	if (class_exists('xili_language')) {
		define('THEME_TEXTDOMAIN','fusion');
		define('THEME_LANGS_FOLDER','/lang');
	} else {
	   load_theme_textdomain('fusion', get_template_directory() . '/lang');	
	}
	
}

En effet, dans ces thèmes, les fichiers .mo des différentes traductions sont dans un sous-dossiers du dossier themes donc il faut définir deux constantes si la classe (donc l’extension) xili-language est active.

2) Deuxième étape :

Avec l’aide des fichiers .po, il faut éventuellement compléter la liste des termes traduits avec ceux des catégories (nom et description) en ajoutant des couples de lignes et recréant les fichiers .mo de chacune des langues que vous avez choisies pour votre site. (via PoEdit par exemple)
Dans un autre article, on décrit un outil intégrable à wordpress – xili-dictionary – en cours de finalisation – et qui rend très aisée l’adaptation de ces termes et de leur traduction comme nous le faisons sur les sites xiligroup comme celui-ci.

Si dans votre site, vous souhaitez rendre mutlilingue la description, il faut modifier la ligne comme ici dans Fusion :

< ?php _e(get_bloginfo ( 'description' ),'fusion');/*bloginfo('description'); */?>

3) Troisième étape :

Enrichir le thème par ajout d’éléments pour la navigation multilingue :

– La liste des langues disponibles sur le site (dans le menu).

– Les liens vers les articles dans d’autres langues pour un article donné sous son titre quand il est affiché seul. (single).

A) La liste :

On peut ajouter cette liste de deux façons : soit en tant que widget, soit par ajout d’un template_tag dans le fichier du menu (sidebar.php par exemple).

Note à propos des widgets : à ce stade les widgets ne sont pas recommandés car ceux fourni avec le kit WP n’ont pas les mécanismes pour que leur titre soit « multilingue » – Le widget xili-language a fait cette adaptation. Depuis les widgets ‘consomment’ du code là où un template_tag n’en a qu’une !!!

Voici ici un exemple dans Fusion (sidebar.php)




B) Le lien vers les autres articles similaires :

Exemple dans Gear (item.php)


">< ?php comments_number( __( 'No comments', 'default' ), __( '1 comment', 'default' ), __( '% comments', 'default' ),  __( 'comments', 'default' )); ?>



< ?php xiliml_the_other_posts($post->ID) ?> < ?php } ?>

4) Pause :

A ce stade des modifications, le site est maintenant mutlilingue avec les mécanismes livrés par défaut dans l’extension xili-language.

Donc quand vous modifiez ou ajouter un article, pensez à choisir sa langue dans sa fiche en haut à droite.

[caption id="attachment_439" align="noalign" width="246" caption="Setting the language of post before publish"]Setting the language of post before publish[/caption]

Si un article a une adaptation dans une autre langue, il suffit de renseigner le champ personnalisé – copie d’écran ici :

[caption id="attachment_449" align="alignnone" width="320" caption="champ vers un article en anglais (en_us)"]champ vers un article en anglais (en_us)[/caption]

Voici donc les resultats des tests sur dev.xiligroup sur son clone local :

Avec Fusion : (après une recherche)

[caption id="attachment_433" align="alignright" width="300" caption="Fusion SnapShot (french search)"]Fusion SnapShot (french search)[/caption]

Dans Gear :

[caption id="attachment_437" align="alignright" width="300" caption="gear theme with a french post"]gear theme with a french post[/caption]

5) Les étapes suivantes :

Ces deux thèmes, moyennant ces modifications mineures sont maintenant multilingues. Si vous décidez de modifier des règles de changement d’affichage, d’enrichir le style et le comportement des listes (comme les drapeaux), d’ajouter des boutons radio pour restreindre la recherche par mot,… c’est possible grâce aux ‘hooks’ de l’extension elle-même et autres fonctions que l’on va ajouter (et activer via add_action ou add_filter) dans le fichier functions.php du thème.

C’est le sujet d’un prochain épisode dans un article à venir (patience…)

MS 090307


xiligroup dev
Keymaster

When searching in Theme Directory the term « localization« , you only find today three themes, so with the famous kubrik international (default-i8n shipped with wordpress kit), four themes seem to be quite ready for the test of compatiblilty with xili-language.

We have choosen two for this post : Gear and Fusion with for both fine look and design.

[caption id="attachment_431" align="alignright" width="300" caption="Fusion Theme SnapShot"]Fusion Theme SnapShot[/caption]

[caption id="attachment_436" align="alignright" width="300" caption="Gear theme snapshot"]Gear theme snapshot[/caption]

A short introduction :
a multilingual theme is a theme where texts around the post(s) are changed with languages of the parts of the website. There is no automatic translation of the contents of post. The editor has full control how he organize the post, the categories,… He only add another taxonomy : the language of each post. With xili-language plugin, the language of a theme with localization features is adapted (on the fly) to the language of the post or the category.
It is typically a CMS management or a data-design and need good rules.

1) First step :

Verify that all __() and _e() function are correctly in place in theme – In Gear, there is some errors – domain absent – _e(‘Categories’); – or domain inadequate (‘blank’ instead ‘default’)

Search in functions.php file the load_theme_textdomain() line and modify it as below

A) for Gear

function theme_init(){
	if (class_exists('xili_language')) {
		define('THEME_TEXTDOMAIN','default');
		define('THEME_LANGS_FOLDER','/languages');
	} else {
	   load_theme_textdomain('default', get_template_directory() . '/languages');	
	}	
}
add_action ('init', 'theme_init');

B) for Fusion

function init_language(){
	if (class_exists('xili_language')) {
		define('THEME_TEXTDOMAIN','fusion');
		define('THEME_LANGS_FOLDER','/lang');
	} else {
	   load_theme_textdomain('fusion', get_template_directory() . '/lang');	
	}
	
}

In these themes the .mo language files are in subfolder of theme folder, so the two constantes will be used by xili-language plugin if activated.

2) Second step.

Complete the .mo file with the translations of categories (name and description of each), description of the website and other terms by adding lines in .po files and using poEdit. In one other post, we will see how to use xili-dictionary with his UI in the wordpress admin.

If you want to translate the site description, you have to modify on line in header.php :

Exemple in Fusion (header.php) :

< ?php _e(get_bloginfo ( 'description' ),'fusion');/*bloginfo('description'); */?>

3) Third step :

enrich the layout of the theme by adding some features :
– a list of the available languages (in the sidebar)
– links when similar posts about the same subject translated are present in the website

The list can be added by to way – like a widget or like a template tag.
Note about title of widgets : The titles of default widget shipped with wordpress don’t contain the function _e() or __() with the domain of the theme. So they are not live translatable. We are not fan of widget coding consuming.
Today, it is better to use template tag as here in fusion (sidebar.php) :




Links under each post title in single display (single.php)
Only add the template tag just under the_title().
Here in Gear (item.php)


">< ?php comments_number( __( 'No comments', 'default' ), __( '1 comment', 'default' ), __( '% comments', 'default' ),  __( 'comments', 'default' )); ?>



< ?php xiliml_the_other_posts($post->ID) ?> < ?php } ?>

Pause : now the site is multilingual with the default functions delivered with xili-language plugin.

When you modify a post or a page – of necessary – set his language :
[caption id="attachment_439" align="noalign" width="246" caption="Setting the language of post before publish"]Setting the language of post before publish[/caption]

See result in Gear and in Fusion

In Fusion :

Here it is after a search of french term « bienvenue » :

[caption id="attachment_433" align="alignright" width="300" caption="Fusion SnapShot (french search)"]Fusion SnapShot (french search)[/caption]

In Gear :

[caption id="attachment_437" align="alignright" width="300" caption="gear theme with a french post"]gear theme with a french post[/caption]

Future step

These two themes are now « multilingual » and :
If you need to modify the default rules when template language changes or enrich the style of some template_tags (as in snapshots with flag or more else), it is possible with the hooks of the plugin himself and some functions added in functions.php file.

It is the subject of another following post (next episode soon…).

MS 090306


xiligroup dev
Keymaster

La réécriture de l’extension xili-language (0.9.7.1) en mode OOP (programmation objet) rajoute de la souplesse et des nouveaux ancrages pour enrichir (hook) le theme wordpress de type CMS ou autre.

La mise à jour ne pose pas de problème particulier sauf les functions que vous auriez pu rajouter dans le fichier functions.php pour optimiser l’affichage de la liste des langues par exemple : Avant il fallait impérativement que cette fonction ait le nom imposé par le plugin. Aujourd’hui avec les fonctions « hook » comme add_action ou add_filter ce n’est plus nécessaire.

Prenons un exemple de la liste des langues avec drapeau (c’est le template tag dans votre sidebar) :

Par défaut la fonction affiche une liste sans drapeau. Que faire pour les afficher ?.
1) prévoir dans le dossier images du thème un dossier contenant les drapeaux avec un nom semblable à celui de la langue concernée : fr_fr.png ….

2) ajouter – dans le functions.php de votre thème – la fonction qui se base sur celle dans le code du plugin mais qui ajoute au début du lien le drapeau.

function my_xiliml_language_list($before = '
  • ', $after ='
  • ') { $catcur = get_bloginfo('siteurl').'/?'; $listlanguages = get_terms(TAXONAME, array('hide_empty' => false)); foreach ($listlanguages as $language) { $a = $before ."description,THEME_TEXTDOMAIN)."'>"." slug.".png' alt='' /> ". __('in '.$language->description,THEME_TEXTDOMAIN) ."".$after; echo $a; } }

    3) activer cette fonction en ajoutant le « add_action ».

    add_action('xili_language_list','my_xiliml_language_list');

    Et comme sur ce site (menu à gauche), la liste est personnalisée et en harmonie avec le thème du site.

    A suivre… (un autre exemple où l’on change les règles de changement de langue par exemple selon l’affichage d’un article ou d’une catégorie)

    MS 090305

    in reply to: Woaoo ! OOP coded is now xili-language plugin [0.9.7] #393

    xiligroup dev
    Keymaster

    The french readers have discovered in the previous post that simultaneously, we work on new settings plugin page according to powerful WP 2.7 features and we work to convert in OOP the xili-language plugin.

    After the 0.9.6 release where new UI was implemented, now with 0.9.7 this saturday evening, OOP code is tested on local server and here in dev.xiligroup server (temporary troubles occur during installation at around 20:00 Fr time).

    All major functions and template tags are hookable by the WP functions as add_filter or add_action. Far better than other methods as appeared in former releases with functions with special names.
    [caption id="attachment_394" align="alignright" width="300" caption="In past - pre-fixed name for hook"]In past - pre-fixed name for hook[/caption]

    [caption id="attachment_395" align="alignright" width="300" caption="Today - way to add a function for xili-language"]Today - way to add a function for xili-language[/caption]

    Inside the plugin, there is default rules or functions to display or decide when the language must change or not. To have your own rules in the theme, just create a function and add a filter (or action).
    All specific template_tags are also hookable to be more compliant with the international theme of your blog or CMS site. (see php lines > 960)

    Q : What troubles when upgrading from 0.9.5 to 0.9.7 ?
    A : No change in DB, only (if present) small modifications to do in hooking functions in your functions.php. (add filter or action functions).

    Q : why hook ?
    A : to adapt your site without any change in the plugin providing the core rules. (read)

    Q : what future ?
    A : test this beta release and provide a demo theme as in xiligroup’s sites.

    Enjoy with this (only ?) 1000 lines plugin !
    [caption id="attachment_397" width="208" caption="1000 lines with comments"]1000 lines with comments[/caption]

    (soon on WP repository)
    MS

    Visualisation du message 10 (461 sur 470, 527 au total)