internationalization: preparing your wordpress theme for the rest of the world

48
@LisaSabinWilson - webdevstudios.com | September 19, 2013 Preparing Your Theme For The World Internationalization Monday, September 23, 13

Upload: lisa-sabin-wilson

Post on 19-May-2015

3.076 views

Category:

Technology


1 download

DESCRIPTION

Internationalization and localization of WordPress themes

TRANSCRIPT

Page 1: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Preparing Your Theme For The WorldInternationalization

Monday, September 23, 13

Page 2: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Lisa Sabin-Wilson

WordPress since 2003

Making a living on WP since 2005

Author: WordPress For Dummies

@LisaSabinWilson

Monday, September 23, 13

Page 3: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Remember, no matter where you go ... there you are.

~ Confucius

Monday, September 23, 13

Page 4: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

WordPress is InternationalMake sure your themes are too!

Monday, September 23, 13

Page 5: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Imagine an internet like this.If you speak Chinese - it’s great! Not so great if you don’t.

Monday, September 23, 13

Page 6: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Internationalization (I18n)The practice of making your theme translation ready.

Monday, September 23, 13

Page 7: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Localization (l10n)The practice of translating an internationalized theme into a different language.

Monday, September 23, 13

Page 8: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Internationalization (I18n)YOU ARE NOT ACTUALLY TRANSLATING IT.(Unless you really want to.)

You are developing your theme to make it possible for someone else to translate it.

Monday, September 23, 13

Page 9: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Monday, September 23, 13

Page 10: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Text Domain<?php _e(‘Plugin Name’, ‘text-domain’); ?>

Defines which theme owns the translation-ready text and tells the GetText utility to return the translations only from the dictionary supplied with that name.

Monday, September 23, 13

Page 11: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Text Domain*MOST* theme authors use the name of their theme as the text domain to make it easy to identify which language files belong to what theme.

Monday, September 23, 13

Page 12: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Text Domain<?php _e(‘Plugin Name’, ‘startbox’); ?>

Use a unique name here so you don’t conflict with other language libraries in your WordPress installation.

Monday, September 23, 13

Page 13: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Theme FunctionsDefine the textdomain in your Theme Functions file. This tells WordPress where your theme stores the language files and what the textdomain for your theme is.

Monday, September 23, 13

Page 14: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Theme Functions1st Parameter: texdomainThis is the textdomain for the theme: lswtheme

Monday, September 23, 13

Page 15: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Theme Functions2nd Parameter: location of language files

get_template_directory() . ‘/languages’

wp-content/themes/lswtheme/lanugages/

Monday, September 23, 13

Page 16: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Two Basic GetText functions

_e (underscore + small case e)

&__ (two underscores)

Monday, September 23, 13

Page 17: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

_eUse this to wrap HTML text

strings within a GetText function call.

Monday, September 23, 13

Page 18: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Example of _e in use:<h2>Plugin Name</h2>

becomes

<?php _e(‘Plugin Name’, ‘text-domain’); ?>

Monday, September 23, 13

Page 19: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

__Use this to wrap PHP text

strings within a GetText function call.

Monday, September 23, 13

Page 20: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Unlike _e ...__ is used when you need to add a string of text to an EXISTING function call

Monday, September 23, 13

Page 21: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Example of __ in use:<?php the_content( ‘Read More’ ); ?>

becomes:

<?php the_content( __(‘Read More’, ‘text-domain’) ); ?>

Monday, September 23, 13

Page 22: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Use of _e or __ identifies which strings of text are available for translation.

Monday, September 23, 13

Page 23: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Other functions_n , _nx, _x, _ex, esc_attr_e(), esc_attr__(), esc_html__(), esc_html_e()Some resources to read:http://ottopress.com/2012/internationalization-youre-probably-doing-it-wronghttp://wp.smashingmagazine.com/2011/12/29/internationalizing-localizing-wordpress-themehttp://codex.wordpress.org/I18n_for_WordPress_Developers

Monday, September 23, 13

Page 24: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Without these functions, the GetText localization utility will ignore the text and those text strings will not be translatable on the fly.

Monday, September 23, 13

Page 25: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Is Translatable even a word?

Monday, September 23, 13

Page 26: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

YES!

Monday, September 23, 13

Page 27: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

You want your themes to beeminently translatable.

Monday, September 23, 13

Page 28: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

i18n TipsDo not put HTML markup inside your GetText functions. Translators should not have the ability to change your markup.Not this:<?php _e(‘<h2>Title</h2>’, ‘text-domain’); ?>

Do this:<h2><?php _e(‘Title’,‘text-domain’); ?></h2>

Monday, September 23, 13

Page 29: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

i18n TipsAcknowledge international date formats by allowing users to set their own formats in Settings-->General in their Dashboard.Not this:the_time(‘F j, Y’);

Do this:the_time( get_option('date_format') )

Monday, September 23, 13

Page 30: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

i18n TipsGoogle Fonts and other font packsNot all font packs are made equal. Some do not support cyrillic languages (Russian, Japanese, etc) or languages with western european characters (Polish, etc).

Monday, September 23, 13

Page 31: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

i18n TipsRTL (Right to Left) Support

Some languages read/write right to left (RTL): Arabic, Hebrew, Urdu

Monday, September 23, 13

Page 32: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

i18n TipsRTL (Right to Left) Support

Create a stylesheet for RTL: style-rtl.css

Monday, September 23, 13

Page 33: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

i18n TipsRTL (Right to Left) Supportis_rtl();Checks if current locale is RTL.if ( is_rtl() ) {

wp_enqueue_style('rtl', get_stylesheet_directory_uri().'/css/rtl.css’);

}

Monday, September 23, 13

Page 34: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

i18n TipsRTL (Right to Left) Support - CSS

Start by adding this to your body selector in your style-rtl.css:

body {

direction: rtl; unicode-bidi: embed;

}

Monday, September 23, 13

Page 35: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

i18n TipsRTL (Right to Left) Support - CSS

Go through your CSS line by line to create RTL support for each selector.

Some hints: http://codex.wordpress.org/Right-to-Left_Language_Support

Monday, September 23, 13

Page 36: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

i18n TipsRTL (Right to Left) Support - TestingRTL TesterThis plugin adds a button to the admin bar that allow super admins to switch the text direction of the site. It can be used to test WordPress themes and plugins with Right To Left (RTL) text direction.http://wordpress.org/plugins/rtl-tester/

Monday, September 23, 13

Page 37: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Language FilesOnce your theme is fully internationalized...

Create a .pot file and include it in your /languages folder

Monday, September 23, 13

Page 38: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Language Files.pot stands for Portable Object Template.

Contains a list of all translatable messages in your theme.

Monday, September 23, 13

Page 39: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Language Files.po stands for Portable Object.

Created when you translate a .pot file to a specific language - contains Human Readable text.

Monday, September 23, 13

Page 40: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Language Files.mo stands for Machine Object.

A binary file created automatically by translation software - - is NOT human readable.

Monday, September 23, 13

Page 41: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Example default .po fileFrom StartBox: http://wpstartbox.com

Monday, September 23, 13

Page 42: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Example .po filemsgid = text string available for translationmsgstr = translated text

Monday, September 23, 13

Page 43: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Example .po fileNotice: the msgstr string is blank in the default file.

Monday, September 23, 13

Page 44: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Example fr_FR.po fileNotice: the msgstr string is filled in with the French translation of the msgid

Monday, September 23, 13

Page 45: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

.pot | .po | .moHow do you create these files?

Monday, September 23, 13

Page 46: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Translation ToolsPoedit: http://poedit.com

GlotPress: http://glotpress.org

GNU GetText: http://gnu.org/software/gettext

Monday, September 23, 13

Page 47: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

Translation Plugins for WordPress

WPML: http://wpml.org/

WP Native Dashboard: http://wordpress.org/plugins/wp-native-dashboard/

Codestyling Localization:http://wordpress.org/plugins/codestyling-localization/

Monday, September 23, 13

Page 48: Internationalization: Preparing Your WordPress Theme for the Rest of the World

@LisaSabinWilson - webdevstudios.com | September 19, 2013

The End.

Thank you for listening.

Monday, September 23, 13