wordpress internationalization, localization and multilingual - do it right

28
WordPress - Internationalization - Localization - Multilingual (April 16, 2016) Do It Right

Upload: dat-hoang

Post on 15-Apr-2017

431 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: WordPress Internationalization, Localization and Multilingual - Do It Right

WordPress- Internationalization - Localization - Multilingual

(April 16, 2016)

Do It

Right

Page 2: WordPress Internationalization, Localization and Multilingual - Do It Right

Me and CompanyDat Hoang

Community & Support at OnTheGoSystems

Image credit: Denise VanDeCruze - OnTheGoSystems.

Page 3: WordPress Internationalization, Localization and Multilingual - Do It Right

Me and CompanyOnTheGoSystems

wp-types.comwpml.org icanlocalize.com

Page 4: WordPress Internationalization, Localization and Multilingual - Do It Right

Main Content

● What are they?

● Internationalization

● Localization

● Multilingual (with WPML)

Page 5: WordPress Internationalization, Localization and Multilingual - Do It Right

What are They?Internationalization (i18n) is the process of developing your theme/plugin language, so it can easily be translated into other languages.

Localization (l10n) describes the subsequent process of translating an internationalized theme/plugin.

Multilingual means there are more than one language in sites.

Page 6: WordPress Internationalization, Localization and Multilingual - Do It Right

Internationalization (1)

Wrongecho 'WordPress is the best!';

Right (use gettext functions)echo __( 'WordPress is the best!', 'my-text-domain' );

Wrong (don’t be clever!)__( 'Translate me.' , $my_text_domain );

Right (no variable, constant… for text domains)__( 'Translate me.' , 'my-text-domain' );

Page 7: WordPress Internationalization, Localization and Multilingual - Do It Right

Internationalization (2)

Basic functions:● __(), _e()● _x(), _ex() - Disambiguation by context_x( 'Post', 'noun', 'my-text-domain' );_x( 'Post', 'verb', 'my-text-domain' );

● _n(), _nx() - Plural/singular nounssprintf( _n( '%s star', '%s stars', $rating, 'text-domain' ), $rating );

● _n_noop(), _nx_noop(), translate_nooped_plural()

Page 8: WordPress Internationalization, Localization and Multilingual - Do It Right

Internationalization (3) - JavaScriptfunction add_my_script() { // Register the script wp_register_script( 'some_handle', get_template_directory_uri() . '/custom.js' ); // Localize the script with new data $translation_array = array ( 'some_string' => __( 'Some string to translate', 'text-domain' ), 'a_value' => '10' ); wp_localize_script( 'some_handle', 'object_name', $translation_array ); // Enqueued script with localized data. wp_enqueue_script( 'some_handle' ); }add_action( 'wp_enqueue_scripts', 'add_my_script' );

Page 9: WordPress Internationalization, Localization and Multilingual - Do It Right

Internationalization (4) - JavaScript

custom.js<script> // alerts 'Some string to translate' alert( object_name.some_string);</script>

HTML:<script type='text/javascript'>/* <![CDATA[ */var object_name = {"some_string":"Some string to translate","a_value":"10"};/* ]]> */</script>

Page 10: WordPress Internationalization, Localization and Multilingual - Do It Right

Internationalization (5)

Date and number functions:- number_format_i18n()- date_i18n()

Escape functions:

esc_html__()esc_html_e()esc_html_x()

esc_attr__()esc_attr_e()esc_attr_x()

Page 11: WordPress Internationalization, Localization and Multilingual - Do It Right

Internationalization (6)

Load .mo files: function my_plugin_load_plugin_textdomain() { load_plugin_textdomain( 'text-domain', FALSE, basename( dirname( __FILE__ ) ) . '/languages/' );}add_action( 'plugins_loaded', 'my_plugin_load_plugin_textdomain' );

Last but not least: original language = ENGLISH

Page 12: WordPress Internationalization, Localization and Multilingual - Do It Right

Localization (1)

File Types

● POT (Portable Object Template)#: plugin-name.php:123msgid "Page Title"msgstr ""

● PO (Portable Object) ● MO (Machine Object)

Page 14: WordPress Internationalization, Localization and Multilingual - Do It Right

Localization (3)

Translate● Poedit● Plugins:

○ Loco Translate○ WPML String Translation

● Google Translator Toolkit● translate.wordpress.org

Page 15: WordPress Internationalization, Localization and Multilingual - Do It Right

Localization (4)

Feel localization!● Settings > General > Site language

● Put the correct folders○ wp-content/languages/plugins/text-domain-vi_VN.mo○ wp-content/plugins/my-plugin/languages/text-domain-vi_VN.mo

Page 17: WordPress Internationalization, Localization and Multilingual - Do It Right

Multilingual (with WPML)

● Gettext strings

● Options (saved in wp_options)

● Content (posts, categories, menus)

● WooCommerce

● Common issues

Page 18: WordPress Internationalization, Localization and Multilingual - Do It Right

Multilingual (1)

Gettext strings● Important: theme and plugins are ready for

internalization/localization. ● Use .mo files● Use WPML > String Translation

Page 19: WordPress Internationalization, Localization and Multilingual - Do It Right

Multilingual (2)

Options - translate in WPML String Translation● Automatically: wpml-config.xml ● Manually: adding strings in wp-admin

Page 20: WordPress Internationalization, Localization and Multilingual - Do It Right

Multilingual (3)

Content - posts

Page 21: WordPress Internationalization, Localization and Multilingual - Do It Right

Multilingual (4)

Content - categories

Page 22: WordPress Internationalization, Localization and Multilingual - Do It Right

Multilingual (5)

Content - menus

Page 23: WordPress Internationalization, Localization and Multilingual - Do It Right

Multilingual (6)

WooCommerce - install WCML

Page 24: WordPress Internationalization, Localization and Multilingual - Do It Right

Multilingual (7)

Common issues: ● Translate custom strings- wpml_register_single_string- wpml_translate_single_string

● wp_query($args) or get_posts($args) doesn’t filter out correct posts IDs for the current language

- add "suppress_filters=0" to arguments.

Page 25: WordPress Internationalization, Localization and Multilingual - Do It Right

Multilingual (8)

Common issues: ● A custom post is different in a second

language$post = get_post(

apply_filters( 'wpml_object_id', $post->ID, 'cpt' ) );

● A custom taxonomy ID is different in a second language

$tax_id = apply_filters( 'wpml_object_id', $tax_id, 'tax' );

Page 26: WordPress Internationalization, Localization and Multilingual - Do It Right

Discussion

Image credit: http://sweetclipart.com/diverse-people-raising-hands-968

Page 27: WordPress Internationalization, Localization and Multilingual - Do It Right

Useful Links1. https://developer.wordpress.

org/plugins/internationalization/localization2. https://developer.wordpress.

org/plugin/internationalization/how-to-internationalize-your-plugin

3. https://docs.woothemes.com/document/woocommerce-localization/

4. https://wpml.org/documentation/related-projects/woocommerce-multilingual/

5. https://wpml.org/documentation/support/debugging-theme-compatibility/

6. https://wpml.org/documentation/translating-your-contents/

Page 28: WordPress Internationalization, Localization and Multilingual - Do It Right

Big Thanks!Dat HoangCommunity & SupportE: [email protected]: wpml.org | wp-types.com | icanlocalize.com

Saigon, April 16, 2016