I really often see a common mistake made when translating strings in WordPress so I thought I’d write a blog post in order to shed more light on the issue.
But first, here’s a quick refresher on how to internationalize code in WordPress:
<?php _e( 'Welcome to my blog!', 'my-plugin-text-domain' ); ?>
For dynamic strings, it’d be something like this:
<?php printf( __( 'Welcome to my blog, %s!', 'my-plugin-text-domain' ), $name ); ?>
But what about when you have multiple variables to use in your string? A common mistake is to do something like this:
<?php printf( __( 'Welcome to my blog, %s! Today\'s date is %s.', 'my-plugin-text-domain' ), $name, $date ); ?>
The issue with this is that you’re requiring the person’s name to always come before the date. If for internationalization reasons it needs to be in a different order, then it won’t work. You’ll end up with something like Today's date is Alex. Welcome to my blog, November 2nd!
.
The solution is to use standard sprintf()
argument swapping parameters:
<?php printf( __( 'Welcome to my blog, %1$s! Today\'s date is %2$s.', 'my-plugin-text-domain' ), $name, $date ); ?>
Now translators are free to re-order the string to whatever makes the most sense for the language in question without having to worry the order of the variables.
For a more in-depth review of this, check out the WordPress Codex where many real world examples can be found.
Pingback: Internationalization should be common practice, not a feature | WPCandy
Pingback: Internationalization should be common practice, not a feature | Web Designer Bacolod City | Ricky Noel Diancin Jr. Webmaster | Wordpress Expert
Pingback: Internationalization should be common practice, not a feature – wordpress technical development support
If you’re involved with software localization, you might want to check online translation platform http://poeditor.com/
Thank you Alex, one of the main issues with translating dynamic strings we bumped into with TranslatePress was that they came from a plugin or theme that is not using gettext for their strings. https://translatepress.com/translate-dynamic-strings-wordpress/