Upgrade to Pro — share decks privately, control downloads, hide ads and more …

I18n με WPML & Polylang - Panagiotis Halatsakos

I18n με WPML & Polylang - Panagiotis Halatsakos

WordPress Greek Community

April 28, 2015
Tweet

More Decks by WordPress Greek Community

Other Decks in Technology

Transcript

  1. Θέματα που καλύπτονται • Internationalization & Localization • Είναι το

    wordpress “πολυγλωσσικό”; • Εργαλεία & Plugins υποστήριξης περιεχομένου – WPML – PolyLang • Πως θα κάνω το theme μου πολυγλωσσικό; • Συμπεράσματα - Ερωτήσεις 27/4/2015 3rd wordpress meetup
  2. Internationalization & Localization I18n : Internationalization “Η διαδικασία στην οποία

    ένα λογισμικό σχεδιάζεται έτσι ώστε να προσαρμόζεται με τις γλωσσικές ανάγκες του χρήστη, χωρίς την απαίτηση αλλαγής κώδικα από το developer” 27/4/2015 3rd wordpress meetup
  3. Internationalization & Localization L10n: Localization “Η διαδικασία της εφαρμογής των

    τοπικών ρυθμίσεων του χρήστη σε ένα λογισμικό που υποστηρίζει το internationalization με την χρήση εργαλείων και μεταφράσεων” 27/4/2015 3rd wordpress meetup
  4. Internationalization & Localization Multilingual CMS – χαρακτηριστικά  Επικοινωνία 

    Παροχή περιεχομένου  Προσαρμοσμένες τιμές, συνάλλαγμα, ημερολόγιο κτλ. στη γλώσσα του επισκέπτη 27/4/2015 3rd wordpress meetup
  5. Internationalization & Localization Wordpress < 4 wp-config.php Wordpress >= 4

    Admin > Settings / General 27/4/2015 3rd wordpress meetup Είναι το wordpress “πολυγλωσσικό”; (2)
  6. Internationalization & Localization  Out of the box: administration screen,

    ρυθμίσεις τοπικές, basic themes  Περιεχόμενο; 27/4/2015 3rd wordpress meetup Είναι το wordpress “πολυγλωσσικό”; (3)
  7. Internationalization & Localization • Greek Wordpress https://el.wordpress.org/ • Greek Wordpress

    Translation Project https://make.wordpress.org/polyglots/ 27/4/2015 3rd wordpress meetup
  8. Internationalization & Localization Τρόποι μετάφρασης του site: • Χρήση Plugins

    + Gettext Tools • Χρήση multilingual press https://wordpress.org/plugins/multilingual-press/ • Full custom υλοποιήσεις 27/4/2015 3rd wordpress meetup
  9. WPML http://www.wpml.org Γιατί να χρησιμοποιήσω WPML? • Είναι mature plugin

    • Αρκετά μεγάλη υποστήριξη για τον «απλό» χρήστη • Εμπορική λύση • Developer pros (mini codex) + support 27/4/2015 3rd wordpress meetup
  10. PolyLang https://polylang.wordpress.com/ Γιατί να χρησιμοποιήσω PolyLang? • Είναι mature plugin

    • Είναι free • Developer pros (mini codex) • Εχει πολλές ομοιότητες με το wpml • Limited support 27/4/2015 3rd wordpress meetup
  11. Multilingual Themes 101 Στατικά κείμενα GNU Gettext Tools (Recipe #1)

     Δημιουργία φακέλου για τις γλώσσες του theme  Ορισμός textdomain  Χρήση των gettext functions για php / per plugin  Μετάφραση με το poedit 27/4/2015 3rd wordpress meetup
  12. Multilingual Themes 101 Δημιουργία φακέλου για τις γλώσσες [wordpress site

    location]/wp-content/themes/THEME/languages 27/4/2015 3rd wordpress meetup
  13. Multilingual Themes 101 27/4/2015 3rd wordpress meetup Αλλαγή με εισαγωγή

    placeholder text και χρήση της _() Επόμενα βήματα: 1. Χρήση κάποιου editor για po (π.χ. Poedit ή plugins) 2. Μετάφραση ανα γλώσσα 3. Compile σε .mo Εναλλακτικά -- Χρήση των: • WPML > String Translation (WPML) • Settings > Languages > String Translation (Polylang)
  14. Multilingual Themes 101 WPML o ICL_LANGUAGE_CODE εμφανίζει την τρέχουσα γλώσσα

    που βλέπει ο χρήστης το site o icl_get_languages() επιστρέφει τις διαθέσιμες γλώσσες, μαζί με γραφικές απεικονίσεις, locale και ενεργή γλώσσα. o icl_object_id() επιστρέφει το id της μετάφρασης (αν υπάρχει) για το συγκεκριμένο object (post, page, custom post type) PolyLang • pll_default_language() pll_current_language() • pll_the_languages() • pll_get_post() pll_get_term() 27/4/2015 3rd wordpress meetup
  15. Multilingual Themes • Εισαγωγή της γλώσσας στο body class για

    χρήση σε css και javascript 28/4/2015 3rd wordpress meetup WPML (στο header.php του theme) <?php /* Πρίν το ανοιγμα του body tag */ $bclass = array(); $bclass[] = “lang-”.ICL_LANGUAGE_CODE; // lang-el ή lang-{lang} ?> <body <?php body_class($bclass); ?>> …. </body>
  16. Multilingual Themes • Εισαγωγή της γλώσσας στο body class για

    χρήση σε css και javascript 27/4/2015 3rd wordpress meetup PolyLang (στο header.php του theme) <?php /* Πρίν το ανοιγμα του body tag */ $bclass = array(); $bclass[] = “lang-”.pll_current_language(); // lang-el ή lang-{lang} ?> <body <?php body_class($bclass); ?>> …. </body>
  17. Multilingual Themes 101 - WPML Ρυθμίσεις custom page (Pages >

    add new): • Template: Custom Template 2 • Custom Field Name: slider-category • Custom Field Value: home-slider • Τιτλος: Home Page Custom • Περιεχόμενο: Κενό (θα υπερκαλυφθεί από τη custom page) • Σελίδα μεταφρασμένη και στην δεύτερη γλώσσα (Αγγλικά) στο Wpml menu. Ρυθμίσεις: Settings > Reading Static Frontpage > Home Page Custom 27/4/2015 3rd wordpress meetup
  18. Multilingual Themes 101 - WPML <?php /* * Template Name:

    Customized Page 2 */ global $post, $sitepress; get_header(); while (have_posts()): the_post(); $custom_slider = get_post_meta(get_the_ID(),"slider-category",true); echo "<pre>Page Id:".get_the_ID()." Post Meta is:".$custom_slider."</pre>"; ?> <section id="slides" class="uk-width-1-1"> <?php $opts = array( 'post_type' => 'post', 'post_status' => 'publish', 'tax_query' => array( array( 'taxonomy' => 'category', 'field' => 'slug', 'terms' => array($custom_slider) ), ), 'order' => 'ASC', 'orderby' => 'menu_order',); ?> 27/4/2015 3rd wordpress meetup
  19. Multilingual Themes 101 - WPML <ul class="slides-container"> <?php $homesl =

    new WP_Query($opts); if ($homesl->have_posts()): while ($homesl->have_posts()): $homesl->the_post(); $image = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), 'full'); ?> <li><img src="<?php echo $image[0]; ?>" alt="<?php echo get_the_title(); ?>"></li> <?php endwhile; wp_reset_postdata(); endif; ?> </ul> <nav class="slides-navigation"> <a href="#" class="next"><i class="uk-icon-large uk-icon-chevron-right"></i></a> <a href="#" class="prev"><i class="uk-icon-large uk-icon-chevron-left"></i></a> </nav> </section> <?php endwhile; get_footer(); ?> 27/4/2015 3rd wordpress meetup Τι θα συμβεί στην αλλαγή γλώσσας?
  20. Multilingual Themes 101 - WPML Αλλαγές στο κώδικα (1η παραλλαγή)

    <?php … get_header(); $current_lang = icl_get_current_language(); $default_lang = icl_get_default_language(); while (have_posts()): the_post(); $theid = get_the_ID(); if ($current_lang!=$default_lang) { $theid = icl_object_id(get_the_ID(),"page",false,$default_lang); } $custom_slider = get_post_meta($theid,"slider-category",true); echo "<pre>Page Id:".$theid." Post Meta is:".$custom_slider."</pre>"; ?> 27/4/2015 3rd wordpress meetup
  21. Multilingual Themes 101 - WPML Αλλαγές στη σελίδα (μεταφρασμένη σελίδα

    / junior coder) • Αντί του πεδίου slider-category = home-slider, αλλάζουμε την τιμή σε home-slider-en (στη περίπτωση αυτή πρέπει να έχουμε μεταφράσει τις κατηγορίες με τα εργαλεια του WPML) 27/4/2015 3rd wordpress meetup
  22. Multilingual Themes 101 - Polylang Αλλαγές στο κώδικα (2η παραλλαγή)

    <?php … get_header(); while (have_posts()): the_post(); $theid = get_the_ID(); $custom_slider = get_post_meta($theid,"slider-category",true); if (pll_get_post_language($theid) != pll_default_language()) { $origpost = pll_get_post($theid, pll_default_language()); $slider1 = get_post_meta($origpost,"slider-category",true); $term = get_term_by('slug',$slider1,'category'); $tr_term = pll_get_term($term->term_id); $term = get_term_by('id',$tr_term,'category'); $custom_slider = esc_attr($term->slug); } echo "<pre>Page Id:".$theid." Post Meta is:".$custom_slider."</pre>"; ?> … 27/4/2015 3rd wordpress meetup
  23. Multilingual Themes 101 • Περισσότερη βοήθεια – codex http://codex.wordpress.org •

    WPML Developer Reference / Coding API https://wpml.org/documentation/support/wpml-coding-api/ • PolyLang Function Reference https://polylang.wordpress.com/documentation/documentation- for-developers/functions-reference/ 28/4/2015 3rd wordpress meetup