| <?php |
| /** |
| * WordPress Translation API |
| * |
| * @package WordPress |
| * @subpackage i18n |
| */ |
| |
| /** |
| * get_locale() - Gets the current locale |
| * |
| * If the locale is set, then it will filter the locale |
| * in the 'locale' filter hook and return the value. |
| * |
| * If the locale is not set already, then the WPLANG |
| * constant is used if it is defined. Then it is filtered |
| * through the 'locale' filter hook and the value for the |
| * locale global set and the locale is returned. |
| * |
| * The process to get the locale should only be done once |
| * but the locale will always be filtered using the |
| * 'locale' hook. |
| * |
| * @since 1.5.0 |
| * @uses apply_filters() Calls 'locale' hook on locale value |
| * @uses $locale Gets the locale stored in the global |
| * |
| * @return string The locale of the blog or from the 'locale' hook |
| */ |
| function get_locale() { |
| global $locale; |
| |
| if (isset($locale)) |
| return apply_filters( 'locale', $locale ); |
| |
| // WPLANG is defined in wp-config. |
| if (defined('WPLANG')) |
| $locale = WPLANG; |
| |
| if (empty($locale)) |
| $locale = 'en_US'; |
| |
| $locale = apply_filters('locale', $locale); |
| |
| return $locale; |
| } |
| |
| /** |
| * translate() - Retrieve the translated text |
| * |
| * If the domain is set in the $l10n global, then the text is run |
| * through the domain's translate method. After it is passed to |
| * the 'gettext' filter hook, along with the untranslated text as |
| * the second parameter. |
| * |
| * If the domain is not set, the $text is just returned. |
| * |
| * @since 2.2.0 |
| * @uses $l10n Gets list of domain translated string (gettext_reader) objects |
| * @uses apply_filters() Calls 'gettext' on domain translated text |
| * with the untranslated text as second parameter |
| * |
| * @param string $text Text to translate |
| * @param string $domain Domain to retrieve the translated text |
| * @return string Translated text |
| */ |
| function translate($text, $domain = 'default') { |
| global $l10n; |
| |
| if (isset($l10n[$domain])) |
| return apply_filters('gettext', $l10n[$domain]->translate($text), $text); |
| else |
| return $text; |
| } |
| |
| /** |
| * translate_with_context() - Retrieve the translated text and strip context |
| * |
| * If the domain is set in the $l10n global, then the text is run |
| * through the domain's translate method. After it is passed to |
| * the 'gettext' filter hook, along with the untranslated text as |
| * the second parameter. |
| * |
| * If the domain is not set, the $text is just returned. |
| * |
| * @since 2.5 |
| * @uses translate() |
| * |
| * @param string $text Text to translate |
| * @param string $domain Domain to retrieve the translated text |
| * @return string Translated text |
| */ |
| function translate_with_context($text, $domain = 'default') { |
| $whole = translate($text, $domain); |
| $last_bar = strrpos($whole, '|'); |
| if ( false == $last_bar ) { |
| return $whole; |
| } else { |
| return substr($whole, 0, $last_bar); |
| } |
| } |
| |
| /** |
| * __() - Retrieve a translated string |
| * |
| * __() is a convenience function which retrieves the translated |
| * string from the translate(). |
| * |
| * @see translate() An alias of translate() |
| * @since 2.1.0 |
| * |
| * @param string $text Text to translate |
| * @param string $domain Optional. Domain to retrieve the translated text |
| * @return string Translated text |
| */ |
| function __($text, $domain = 'default') { |
| return translate($text, $domain); |
| } |
| |
| // . |
| /** |
| * _e() - Display a translated string |
| * |
| * _e() is a convenience function which displays the returned |
| * translated text from translate(). |
| * |
| * @see translate() Echos returned translate() string |
| * @since 1.2.0 |
| * |
| * @param string $text Text to translate |
| * @param string $domain Optional. Domain to retrieve the translated text |
| */ |
| function _e($text, $domain = 'default') { |
| echo translate($text, $domain); |
| } |
| |
| /** |
| * _c() - Retrieve context translated string |
| * |
| * Quite a few times, there will be collisions with similar |
| * translatable text found in more than two places but with |
| * different translated context. |
| * |
| * In order to use the separate contexts, the _c() function |
| * is used and the translatable string uses a pipe ('|') |
| * which has the context the string is in. |
| * |
| * When the translated string is returned, it is everything |
| * before the pipe, not including the pipe character. If |
| * there is no pipe in the translated text then everything |
| * is returned. |
| * |
| * @since 2.2.0 |
| * |
| * @param string $text Text to translate |
| * @param string $domain Optional. Domain to retrieve the translated text |
| * @return string Translated context string without pipe |
| */ |
| function _c($text, $domain = 'default') { |
| return translate_with_context($text, $domain); |
| } |
| |
| /** |
| * __ngettext() - Retrieve the plural or single form based on the amount |
| * |
| * If the domain is not set in the $l10n list, then a comparsion |
| * will be made and either $plural or $single parameters returned. |
| * |
| * If the domain does exist, then the parameters $single, $plural, |
| * and $number will first be passed to the domain's ngettext method. |
| * Then it will be passed to the 'ngettext' filter hook along with |
| * the same parameters. The expected type will be a string. |
| * |
| * @since 1.2.0 |
| * @uses $l10n Gets list of domain translated string (gettext_reader) objects |
| * @uses apply_filters() Calls 'ngettext' hook on domains text returned, |
| * along with $single, $plural, and $number parameters. Expected to return string. |
| * |
| * @param string $single The text that will be used if $number is 1 |
| * @param string $plural The text that will be used if $number is not 1 |
| * @param int $number The number to compare against to use either $single or $plural |
| * @param string $domain Optional. The domain identifier the text should be retrieved in |
| * @return string Either $single or $plural translated text |
| */ |
| function __ngettext($single, $plural, $number, $domain = 'default') { |
| global $l10n; |
| |
| if (isset($l10n[$domain])) { |
| return apply_filters('ngettext', $l10n[$domain]->ngettext($single, $plural, $number), $single, $plural, $number); |
| } else { |
| if ($number != 1) |
| return $plural; |
| else |
| return $single; |
| } |
| } |
| |
| /** |
| * __ngettext_noop() - register plural strings in POT file, but don't translate them |
| * |
| * Used when you want do keep structures with translatable plural strings and |
| * use them later. |
| * |
| * Example: |
| * $messages = array( |
| * 'post' => ngettext_noop('%s post', '%s posts'), |
| * 'page' => ngettext_noop('%s pages', '%s pages') |
| * ); |
| * ... |
| * $message = $messages[$type]; |
| * $usable_text = sprintf(__ngettext($message[0], $message[1], $count), $count); |
| * |
| * @since 2.5 |
| * @param $single Single form to be i18ned |
| * @param $plural Plural form to be i18ned |
| * @param $number Not used, here for compatibility with __ngettext, optional |
| * @param $domain Not used, here for compatibility with __ngettext, optional |
| * @return array array($single, $plural) |
| */ |
| function __ngettext_noop($single, $plural, $number=1, $domain = 'default') { |
| return array($single, $plural); |
| } |
| |
| /** |
| * load_textdomain() - Loads MO file into the list of domains |
| * |
| * If the domain already exists, the inclusion will fail. If the |
| * MO file is not readable, the inclusion will fail. |
| * |
| * On success, the mofile will be placed in the $l10n global by |
| * $domain and will be an gettext_reader object. |
| * |
| * @since 1.5.0 |
| * @uses $l10n Gets list of domain translated string (gettext_reader) objects |
| * @uses CacheFileReader Reads the MO file |
| * @uses gettext_reader Allows for retrieving translated strings |
| * |
| * @param string $domain Unique identifier for retrieving translated strings |
| * @param string $mofile Path to the .mo file |
| * @return null On failure returns null and also on success returns nothing. |
| */ |
| function load_textdomain($domain, $mofile) { |
| global $l10n; |
| |
| if ( is_readable($mofile)) |
| $input = new CachedFileReader($mofile); |
| else |
| return; |
| |
| $gettext = new gettext_reader($input); |
| |
| if (isset($l10n[$domain])) { |
| $l10n[$domain]->load_tables(); |
| $gettext->load_tables(); |
| $l10n[$domain]->cache_translations = array_merge($gettext->cache_translations, $l10n[$domain]->cache_translations); |
| } else |
| $l10n[$domain] = $gettext; |
| |
| unset($input, $gettext); |
| } |
| |
| /** |
| * load_default_textdomain() - Loads default translated strings based on locale |
| * |
| * Loads the .mo file in WP_LANG_DIR constant path from WordPress root. |
| * The translated (.mo) file is named based off of the locale. |
| * |
| * @since 1.5.0 |
| */ |
| function load_default_textdomain() { |
| $locale = get_locale(); |
| |
| $mofile = WP_LANG_DIR . "/$locale.mo"; |
| |
| load_textdomain('default', $mofile); |
| } |
| |
| /** |
| * load_plugin_textdomain() - Loads the plugin's translated strings |
| * |
| * If the path is not given then it will be the root of the plugin |
| * directory. The .mo file should be named based on the domain with a |
| * dash followed by a dash, and then the locale exactly. |
| * |
| * @since 1.5.0 |
| * |
| * @param string $domain Unique identifier for retrieving translated strings |
| * @param string $abs_rel_path Optional. Relative path to ABSPATH of a folder, |
| * where the .mo file resides. Deprecated, but still functional until 2.7 |
| * @param string $plugin_rel_path Optional. Relative path to WP_PLUGIN_DIR. This is the preferred argument to use. It takes precendence over $abs_rel_path |
| */ |
| function load_plugin_textdomain($domain, $abs_rel_path = false, $plugin_rel_path = false) { |
| $locale = get_locale(); |
| |
| if ( false !== $plugin_rel_path ) |
| $path = WP_PLUGIN_DIR . '/' . trim( $plugin_rel_path, '/'); |
| else if ( false !== $abs_rel_path) |
| $path = ABSPATH . trim( $abs_rel_path, '/'); |
| else |
| $path = WP_PLUGIN_DIR; |
| |
| $mofile = $path . '/'. $domain . '-' . $locale . '.mo'; |
| load_textdomain($domain, $mofile); |
| } |
| |
| /** |
| * load_theme_textdomain() - Includes theme's translated strings for the theme |
| * |
| * If the current locale exists as a .mo file in the theme's root directory, it |
| * will be included in the translated strings by the $domain. |
| * |
| * The .mo files must be named based on the locale exactly. |
| * |
| * @since 1.5.0 |
| * |
| * @param string $domain Unique identifier for retrieving translated strings |
| */ |
| function load_theme_textdomain($domain) { |
| $locale = get_locale(); |
| |
| $mofile = get_template_directory() . "/$locale.mo"; |
| load_textdomain($domain, $mofile); |
| } |
| |
| ?> |