Tag Info

Hot answers tagged

21

1. Write with localization in mind Don't use echo or print() to produce text output, instead use the WordPress functions __() and _e(): /** Not localization friendly */ echo "Welcome to my plugin"; // OR print("Welcome to my plugin"); /** Localization friendly */ _e('Welcome to my plugin', 'my-plugin'); // OR $my_text = __('Welcome to my plugin', ...


12

By far the best (easiest) way is to use the locale filter (inside get_locale()). First set up a quick function for retrieving a different language to use on the locale filter. /** * A function returns with returns the user's selectd locale, if stored. */ function wpse35622_get_new_locale($locale=false){ $new_locale = ...


12

There is a second argument in the __() function. It should be set to the domain you are are using for your plugin or theme. In the examples below I use 'text_domain'. Your domain string should be unique. It should not match any other domain string. Not using a text domain argument defaults to 'default' the WordPress domain name. See the link for more ...


12

Indeed, wp_localize_script() is simple, it just adds quotes around the values and escapes the content, expecting all of them to be strings. However, there is the l10n_print_after key of the array, which will be printed without any interference at all. It can be used to execute arbitrary code after the strings are passed. You can use it to pass your extra ...


11

You can do the following: Get the the language pack (e.g. de_DE.mo) from wordpress.org. If the language pack isn't available as a standalone download, you could also use the .mo file which is bundled in the WordPress ZIP-file for your language. Located under wp-content/languages. Move the .mo file to wp-content/languages/ of your default (english) ...


11

In this case, 'themify' is the defined textdomain for the Theme, used to make the Theme translatable. (Codex reference: load_theme_textdomain()). Making a Theme translation-ready requires a few steps. Define the Theme's textdomain: load_theme_textdomain( 'themify', TEMPLATEPATH.'/languages' ); Define translatable strings in the template. This is done ...


10

If you look into /wp-admin/edit-form-advanced.php, you will find the meta box: add_meta_box('submitdiv', __('Publish'), 'post_submit_meta_box', $post_type, 'side', 'core'); Note the __('Publish') – the function __() leads to translate() where you get the filter 'gettext'. There are two ways to handle your problem: 1. Address the string in a single ...


10

In wp-includes/l10n.php you will find the function get_locale(). It offers a filter; you can set the language and ignore the constant: function get_locale() { global $locale; if ( isset( $locale ) ) return apply_filters( 'locale', $locale ); // WPLANG is defined in wp-config. if ( defined( 'WPLANG' ) ) $locale = WPLANG; ...


9

I wouldn't try to localize your slugs. Instead, why not give your users the option to change them by adding another field to the permalink settings page? Hook into load-options-permalink.php and set up some things to catch the $_POST data to save your slug. Also add a settings field to the page. <?php add_action( 'load-options-permalink.php', ...


9

The Editor There are others, but this is most used: Poedit, a cross-platform gettext catalogs (.po files) editor. The Formats .mo stands for Machine Object -- compiled export of the .po file which is used by WordPress .po stands for Portable Object -- editable text file with the translations strings -- based on the master .pot file, using Update from POT ...


9

Use the fourth parameter for get_post_time(): $time = get_post_time( 'F j, Y', // format TRUE, // GMT get_the_ID(), // Post ID TRUE // translate, use date_i18n() ); get_post_time() calls mysql2date() internally, and it passes the $translate argument through. In mysql2date() we find this: if ( $translate ) ...


8

Step 1 Open your file in PoEdit. Step 2 Go to "Catalogue" » "Settings" Step 3 Fill in "Language" and "Country" 1). Step 4 Fill "Pluralform" (last field). // For 2 plural forms nplurals=2; plural=n != 1; // For 3 plural forms (for e.g. russian), use: nplurals=3; plural=(n%10==1 &amp;&amp; n%100!=11) ? 0 : ((n%10&gt;=2 &amp;&amp; ...


7

I just found the answer and instead of putting this in the Title: <!--:en-->My English Title<!--:--><!--:fr-->My French Title<!--:--> We need to put this code: [:en]My English Title[:fr]My French Title and qTranslate does the rest :)


7

For people that come here looking for a more detailed explanation about the text domain issue instead of just "use a text domain". Here's how it works. Firstly, you have to tell WordPress where the language files should be put in your theme, and what the 'theme slug' is (a unique identifier for your theme) like so: add_action('after_setup_theme', ...


6

The second part is not required, it just loads a PHP file with language specific functions. Examples In some countries/regions/religions it is not allowed to use capital letters in a word for anything else than the name of some god. In these cases you probably want to remove the Wordpress to WordPress filter. Some languages (Chinese) do not use spaces (in ...


6

Use the filter 'mce_external_languages'. From wp-includes/class-wp-editor.php: The following filter loads external language files for TinyMCE plugins. It takes an associative array 'plugin_name' => 'path', where path is the include path to the file. The language file should follow the same format as /tinymce/langs/wp-langs.php and ...


6

The code for hakre's suggestion to use translation filter would be something like this: add_filter( 'gettext', 'change_publish_button', 10, 2 ); function change_publish_button( $translation, $text ) { if ( $text == 'Publish' ) return 'Save'; return $translation; }


5

_x() let's you add a context to your strings. This is useful when you are using the same string in different places. This string may need different translations depending on the language. Your example would be : echo 'a1 in context 1 ' . _x('a1', 'context1', 'mydomain'); echo 'a1 in context 2 ' . _x('a1', 'context2', 'mydomain'); There are more examples ...


5

You should move the po- and mo-file with the translation of your plugin outside your plugin's directory. Whenever you update your plugin, your plugin files are replaced causing any file that is not part of the default plugin package to be deleted. (If you are translating your own plugin, you could as well add the translation files directly to your plugin ...


5

You can get a list of available languages with get_available_languages( $dir ). It returns an array with all .mo files where the names does not start with 'continents-cities', 'ms-' or admin-. To get a readable name for the file use format_code_lang( $code ). If you scan a directory for language files and get an array like array( 'de_DE', 'tr_TR' ) this ...


5

First, read this Codex page about translating WordPress. You have to create a language file to put into your language directory, do this by following the next steps: I assume you want to use poedit since you talk about a .po file download poedit File > new catalog In the first tab, fill in the fields, the most important ones are Language, in your case: ...


5

You don’t have to make anything special for WPML, using the regular translation code should be enough. See I18n for WordPress Developers in the Codex. Code preparation style.css Add Text Domain and Domain Path to your theme’s style.css. Example: /* * Theme Name: My awesome theme * Text Domain: my_awesome_theme * Domain Path: /languages */ ...


5

Is it enough to just create a child-theme - let's say technically without adding anything else but the bare minimum style.css - to have the translation of the parent-theme being used automatically for the child-theme as well? Basically, the answer is NO, ... but... there's an option: Add a mu-plugin. This (MU-)Plugin does several things: It hooks ...


5

_e() echoes the translated string, which will not work in variable assignment. You need to use __(), which returns the translated string.


4

You have differents languages in your site, although your frontend is not multilingual, you serve one language in frontend and another in backend. Ajax in Wordpress is processed in the "admin area" (wp-admin/admin-ajax.php), so the reponse of an ajax request will be in the language defined in the admin area. "English" in your case. I don't know exactly how ...


4

You may try Eazy Po. From file menu select “New from source code files..”. In xgettext Command Manager window; Press “Browse folder” to select base source folder. In Build pane press “Execute Command” button to generate Pot file.


4

The list is available in $GLOBALS['l10n'][ $text_domain ]. To get the looong list of translatable WordPress strings just use: print '<pre>' . htmlspecialchars( print_r( $GLOBALS['l10n']['default'], TRUE ) ) . '</pre>'; Do not use these strings in your theme or plugin. They are internal, de facto private. They can change any time, even in ...


4

You can try this codestyling-localization plugin:. You can translate you plugins and themes using this.


4

the_search_query() echoes itself, so by putting it into another echo function (what _e() is) you'll get result as in second example. It isn't recommended to use variables or function inside l18n functions, because they can't be translated, for more information see Otto's: Internationalization: You’re probably doing it wrong. So you should use code like ...


4

I would opt for readability and use a rather verbose solution: if ( 1 == $hours and 1 == $mins ) { _e( 'One hour and one minute', 'your_text_domain' ); } elseif ( 1 == $hours ) { printf( __( 'One hour and %d minutes', 'your_text_domain' ), $mins ); } elseif ( 1 == $mins ) { printf( __( '%d hours and one minute', 'your_text_domain' ), $hours ); } ...



Only top voted, non community-wiki answers of a minimum length are eligible