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. I18n με WPML & Polylang
    3rd wordpress meetup

    View Slide

  2. ΠΑΝΑΓΙΩΤΗΣ
    ΧΑΛΑΤΣΑΚΟΣ
    PHP Developer / Wordpress
    https://gr.linkedin.com/in/ditikos
    https://www.facebook.com/ditikos
    27/4/2015 3rd wordpress meetup

    View Slide

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

    View Slide

  4. INTERNATIONALIZATION &
    LOCALIZATION
    27/4/2015 3rd wordpress meetup

    View Slide

  5. Internationalization & Localization
    • Internationalization
    • Localization
    • Multilingual CMS - χαρακτηριστικά
    27/4/2015 3rd wordpress meetup

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  9. Internationalization & Localization
    Είναι το wordpress “πολυγλωσσικό”;
    27/4/2015 3rd wordpress meetup

    View Slide

  10. Internationalization & Localization
    Wordpress < 4
    wp-config.php
    Wordpress >= 4
    Admin > Settings / General
    27/4/2015 3rd wordpress meetup
    Είναι το wordpress “πολυγλωσσικό”; (2)

    View Slide

  11. Internationalization & Localization
     Out of the box:
    administration screen,
    ρυθμίσεις τοπικές,
    basic themes
     Περιεχόμενο;
    27/4/2015 3rd wordpress meetup
    Είναι το wordpress “πολυγλωσσικό”; (3)

    View Slide

  12. Internationalization & Localization
    27/4/2015 3rd wordpress meetup

    View Slide

  13. Internationalization & Localization
    • Greek Wordpress
    https://el.wordpress.org/
    • Greek Wordpress Translation Project
    https://make.wordpress.org/polyglots/
    27/4/2015 3rd wordpress meetup

    View Slide

  14. Internationalization & Localization
    Τρόποι μετάφρασης του site:
    • Χρήση Plugins + Gettext Tools
    • Χρήση multilingual press
    https://wordpress.org/plugins/multilingual-press/
    • Full custom υλοποιήσεις
    27/4/2015 3rd wordpress meetup

    View Slide

  15. Internationalization & Localization
    Plugins
     WPML
     PolyLang
     Qtranslate / QtranslateX
    27/4/2015 3rd wordpress meetup

    View Slide

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

    View Slide

  17. PolyLang
    https://polylang.wordpress.com/
    Γιατί να χρησιμοποιήσω PolyLang?
    • Είναι mature plugin
    • Είναι free
    • Developer pros (mini codex)
    • Εχει πολλές ομοιότητες με το wpml
    • Limited support
    27/4/2015 3rd wordpress meetup

    View Slide

  18. Multilingual Themes 101
    Στατικά κείμενα
    GNU Gettext Tools (Recipe #1)
     Δημιουργία φακέλου για τις γλώσσες του theme
     Ορισμός textdomain
     Χρήση των gettext functions για php / per plugin
     Μετάφραση με το poedit
    27/4/2015 3rd wordpress meetup

    View Slide

  19. Multilingual Themes 101
    Δημιουργία φακέλου για τις γλώσσες
    [wordpress site location]/wp-content/themes/THEME/languages
    27/4/2015 3rd wordpress meetup

    View Slide

  20. Multilingual Themes 101
    Ορισμός textdomain #1
    [wordpress site]/wp-content/themes/THEME/style.css
    27/4/2015 3rd wordpress meetup

    View Slide

  21. Multilingual Themes 101
    Ορισμός textdomain #2
    [wordpress site]/wp-content/themes/THEME/functions.php
    27/4/2015 3rd wordpress meetup

    View Slide

  22. Multilingual Themes 101
    Εργαλεία GNU
     PHP: __($string,$textdomain);
     GUI: PoEdit
    27/4/2015 3rd wordpress meetup

    View Slide

  23. Multilingual Themes 101
    27/4/2015 3rd wordpress meetup
    Αρχικός κώδικας (page template)
    Προβολή στη σελίδα

    View Slide

  24. 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)

    View Slide

  25. DYNAMIC CONTENT
    Multilingual Themes 101
    27/4/2015 3rd wordpress meetup

    View Slide

  26. 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

    View Slide

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

    View Slide

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

    View Slide

  29. Multilingual Themes 101
    • Παράδειγμα (WPML):
    Δημιουργία customized home page (masthead slider)
    27/4/2015 3rd wordpress meetup

    View Slide

  30. Multilingual Themes 101
    27/4/2015 3rd wordpress meetup
    Post id: 7, Post Meta: home-slider

    View Slide

  31. 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

    View Slide

  32. Multilingual Themes 101 - WPML
    /*
    * 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 "Page Id:".get_the_ID()." Post Meta is:".$custom_slider."";
    ?>

    $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

    View Slide

  33. Multilingual Themes 101 - WPML

    $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');
    ?>

    endwhile;
    wp_reset_postdata();
    endif;
    ?>






    endwhile;
    get_footer();
    ?>
    27/4/2015 3rd wordpress meetup
    Τι θα συμβεί στην αλλαγή γλώσσας?

    View Slide

  34. Multilingual Themes 101 - WPML
    27/4/2015 3rd wordpress meetup
    Post id: 486, Post Meta: ?????

    View Slide

  35. Multilingual Themes 101 - WPML
    Αλλαγές στο κώδικα (1η παραλλαγή)

    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 "Page Id:".$theid." Post Meta is:".$custom_slider."";
    ?>
    27/4/2015 3rd wordpress meetup

    View Slide

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

    View Slide

  37. Multilingual Themes 101 - Polylang
    • Παράδειγμα (PolyLang):
    Δημιουργία customized home page (masthead slider)
    27/4/2015 3rd wordpress meetup

    View Slide

  38. Multilingual Themes 101 - Polylang
    Αλλαγές στο κώδικα (2η παραλλαγή)

    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 "Page Id:".$theid." Post Meta is:".$custom_slider."";
    ?>

    27/4/2015 3rd wordpress meetup

    View Slide

  39. 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

    View Slide

  40. ΣΥΜΠΕΡAΣΜΑΤΑ -
    ΕΡΩΤHΣΕΙΣ
    28/4/2015 3rd wordpress meetup

    View Slide