Make Do have been lucky enough to work with several international organisations over the years. This means that we have a lot of experience in making a WordPress website that works in multiple languages.
Supporting MultiLingual Projects as a WordPress Agency
When building a multilingual WordPress theme you need to ensure that both your content and your theme are able to be translated.
As an agency that supports multilingual websites, when you build a WordPress theme you need to ensure that any ‘static’ text can be translatable. IE any text that is hardcoded into the theme.
‘Theme’ Translation
You do this by using the built in WordPress internationalization functions (or i18n for short).
These are small functions that you can use to ensure that your text can be picked up by an internationalization parser. And they look like this:
__( 'String to Translate', 'my-theme' );
– String with no escaping_e( 'String to Translate', 'my-theme' );
– Echoed string with no escapingesc_html_e( 'String to Translate', 'my-theme' );
– Echoed string with HTML escaping (useesc_html__
for no echo).esc_attr_e( 'String to Translate', 'my-theme' );
– Echoed string with Attribute escaping (useesc_attr__
for no echo).
You will note that each of the functions above have a second parameter (in this case my-theme
, this is called the ‘Text Domain’. This allows you do set the translation defaults for your theme (or plugin, if you are using these functions inside a plugin).
To set a Text Domain you need to add the following line of meta to your theme (or plugin) definition file like so:
/*
* Theme Name: Make Do Theme
* Author: Make Do
* Text Domain: my-theme
*/
Next you need to use the load_theme_textdomain()
(there are also plugin and child theme variants of this function) to tell WordPress where your theme translation files are:
function my_theme_setup(){
load_theme_textdomain( 'my-theme', get_template_directory() . '/languages' );
}
add_action( 'after_setup_theme', 'my_theme_setup' );
In the ‘languages’ folder (which we pointed to in our last code example) is where we place our .mo
, .po
and .pot
files.
These files essentially build a library of all the strings in your plugin (or theme) that can be translated, and the relevant translation files. You can do this by hand, but we prefer to let a plugin such as Loco Translate by Tim Whitlock, or the WordPress Multilingual (WPML) String Translation module generate these automatically for us.
You can read the WordPress guide to Internationalization for more information on i18n.
‘Content’ Translation
In the past Make Do have built completely custom translation systems for our clients that have very specific needs (for example, if multiple languages are needed within a single country, or even on the same page), along with all the locale
manipulation that goes with it so that the pages can be indexed appropriately by search engines.
However, for most users, we would recommend using WordPress Multilingual (WPML), which is a great tool that lets you translate your content and your menus into alternative languages. It does have a price attached to it, but one that is well worth it in our opinion.
You can translate any piece of content within your WordPress Install:
When you click into a post, you can choose weather to start from scratch, or import the existing content:
Finally, you can configure WPML to output the URL with a language prefix, so you could have /es/articles/my-article/
for a Spanish version of /articles/my-article/
.
There are of course other translation services available, but for our enterprise level clients, this is how we would provide the best theme translation service possible as a WordPress agency.