X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/6359b807ff8b4ffa151d8756cdefb861c6c1d4db..784f914b1e4b1c62d6657e86397c2e83bcee4295:/wp-includes/l10n.php diff --git a/wp-includes/l10n.php b/wp-includes/l10n.php index 339602b1..bfc65989 100644 --- a/wp-includes/l10n.php +++ b/wp-includes/l10n.php @@ -1,27 +1,31 @@ translate_plural( $single, $plural, $number ); + /** - * Filter text with its translation when plural option is available. + * Filter the singular or plural form of a string. * * @since 2.2.0 * * @param string $translation Translated text. - * @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 string $number The number to compare against to use either $single or $plural. + * @param string $single The text to be used if the number is singular. + * @param string $plural The text to be used if the number is plural. + * @param string $number The number to compare against to use either the singular or plural form. * @param string $domain Text domain. Unique identifier for retrieving translated strings. */ return apply_filters( 'ngettext', $translation, $single, $plural, $number, $domain ); } /** - * Retrieve the plural or single form based on the supplied amount with gettext context. + * Translates and retrieves the singular or plural form based on the supplied number, with gettext context. * - * This is a hybrid of _n() and _x(). It supports contexts and plurals. + * This is a hybrid of _n() and _x(). It supports context and plurals. + * + * Used when you want to use the appropriate form of a string with context based on whether a + * number is singular or plural. + * + * Example: + * + * $people = sprintf( _n( '%s person', '%s people', $count, 'context', 'text-domain' ), number_format_i18n( $count ) ); * * @since 2.8.0 * - * @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 $single The text to be used if the number is singular. + * @param string $plural The text to be used if the number is plural. + * @param int $number The number to compare against to use either the singular or plural form. * @param string $context Context information for the translators. * @param string $domain Optional. Text domain. Unique identifier for retrieving translated strings. - * @return string Either $single or $plural translated text with context. + * Default 'default'. + * @return string The translated singular or plural form. */ function _nx($single, $plural, $number, $context, $domain = 'default') { $translations = get_translations_for_domain( $domain ); $translation = $translations->translate_plural( $single, $plural, $number, $context ); + /** - * Filter text with its translation while plural option and context are available. + * Filter the singular or plural form of a string with gettext context. * * @since 2.8.0 * * @param string $translation Translated text. - * @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 string $number The number to compare against to use either $single or $plural. + * @param string $single The text to be used if the number is singular. + * @param string $plural The text to be used if the number is plural. + * @param string $number The number to compare against to use either the singular or plural form. * @param string $context Context information for the translators. * @param string $domain Text domain. Unique identifier for retrieving translated strings. */ @@ -359,55 +389,103 @@ function _nx($single, $plural, $number, $context, $domain = 'default') { } /** - * Register plural strings in POT file, but don't translate them. + * Registers plural strings in POT file, but does not translate them. * * Used when you want to keep structures with translatable plural - * strings and use them later. + * strings and use them later when the number is known. * * Example: * * $messages = array( - * 'post' => _n_noop( '%s post', '%s posts' ), - * 'page' => _n_noop( '%s pages', '%s pages' ), + * 'post' => _n_noop( '%s post', '%s posts', 'text-domain' ), + * 'page' => _n_noop( '%s pages', '%s pages', 'text-domain' ), * ); * ... * $message = $messages[ $type ]; - * $usable_text = sprintf( translate_nooped_plural( $message, $count ), $count ); + * $usable_text = sprintf( translate_nooped_plural( $message, $count, 'text-domain' ), number_format_i18n( $count ) ); * * @since 2.5.0 * - * @param string $singular Single form to be i18ned. - * @param string $plural Plural form to be i18ned. + * @param string $singular Singular form to be localized. + * @param string $plural Plural form to be localized. * @param string $domain Optional. Text domain. Unique identifier for retrieving translated strings. - * @return array array($singular, $plural) + * Default null. + * @return array { + * Array of translation information for the strings. + * + * @type string $0 Singular form to be localized. No longer used. + * @type string $1 Plural form to be localized. No longer used. + * @type string $singular Singular form to be localized. + * @type string $plural Plural form to be localized. + * @type null $context Context information for the translators. + * @type string $domain Text domain. + * } */ function _n_noop( $singular, $plural, $domain = null ) { return array( 0 => $singular, 1 => $plural, 'singular' => $singular, 'plural' => $plural, 'context' => null, 'domain' => $domain ); } /** - * Register plural strings with context in POT file, but don't translate them. + * Registers plural strings with gettext context in POT file, but does not translate them. + * + * Used when you want to keep structures with translatable plural + * strings and use them later when the number is known. + * + * Example: + * + * $messages = array( + * 'post' => _n_noop( '%s post', '%s posts', 'context', 'text-domain' ), + * 'page' => _n_noop( '%s pages', '%s pages', 'context', 'text-domain' ), + * ); + * ... + * $message = $messages[ $type ]; + * $usable_text = sprintf( translate_nooped_plural( $message, $count, 'text-domain' ), number_format_i18n( $count ) ); * * @since 2.8.0 - * @param string $singular - * @param string $plural - * @param string $context - * @param string|null $domain - * @return array + * + * @param string $singular Singular form to be localized. + * @param string $plural Plural form to be localized. + * @param string $context Context information for the translators. + * @param string $domain Optional. Text domain. Unique identifier for retrieving translated strings. + * Default null. + * @return array { + * Array of translation information for the strings. + * + * @type string $0 Singular form to be localized. No longer used. + * @type string $1 Plural form to be localized. No longer used. + * @type string $2 Context information for the translators. No longer used. + * @type string $singular Singular form to be localized. + * @type string $plural Plural form to be localized. + * @type string $context Context information for the translators. + * @type string $domain Text domain. + * } */ function _nx_noop( $singular, $plural, $context, $domain = null ) { return array( 0 => $singular, 1 => $plural, 2 => $context, 'singular' => $singular, 'plural' => $plural, 'context' => $context, 'domain' => $domain ); } /** - * Translate the result of _n_noop() or _nx_noop(). + * Translates and retrieves the singular or plural form of a string that's been registered + * with _n_noop() or _nx_noop(). + * + * Used when you want to use a translatable plural string once the number is known. + * + * Example: + * + * $messages = array( + * 'post' => _n_noop( '%s post', '%s posts', 'text-domain' ), + * 'page' => _n_noop( '%s pages', '%s pages', 'text-domain' ), + * ); + * ... + * $message = $messages[ $type ]; + * $usable_text = sprintf( translate_nooped_plural( $message, $count, 'text-domain' ), number_format_i18n( $count ) ); * * @since 3.1.0 * - * @param array $nooped_plural Array with singular, plural and context keys, usually the result of _n_noop() or _nx_noop() - * @param int $count Number of objects + * @param array $nooped_plural Array with singular, plural, and context keys, usually the result of _n_noop() or _nx_noop(). + * @param int $count Number of objects. * @param string $domain Optional. Text domain. Unique identifier for retrieving translated strings. If $nooped_plural contains - * a text domain passed to _n_noop() or _nx_noop(), it will override this value. + * a text domain passed to _n_noop() or _nx_noop(), it will override this value. Default 'default'. * @return string Either $single or $plural translated text. */ function translate_nooped_plural( $nooped_plural, $count, $domain = 'default' ) { @@ -431,6 +509,8 @@ function translate_nooped_plural( $nooped_plural, $count, $domain = 'default' ) * * @since 1.5.0 * + * @global array $l10n + * * @param string $domain Text domain. Unique identifier for retrieving translated strings. * @param string $mofile Path to the .mo file. * @return bool True on success, false on failure. @@ -491,6 +571,8 @@ function load_textdomain( $domain, $mofile ) { * * @since 3.0.0 * + * @global array $l10n + * * @param string $domain Text domain. Unique identifier for retrieving translated strings. * @return bool Whether textdomain was unloaded. */ @@ -555,7 +637,7 @@ function load_default_textdomain( $locale = null ) { return $return; } - if ( is_admin() || defined( 'WP_INSTALLING' ) || ( defined( 'WP_REPAIRING' ) && WP_REPAIRING ) ) { + if ( is_admin() || wp_installing() || ( defined( 'WP_REPAIRING' ) && WP_REPAIRING ) ) { load_textdomain( 'default', WP_LANG_DIR . "/admin-$locale.mo" ); } @@ -704,15 +786,23 @@ function load_child_theme_textdomain( $domain, $path = false ) { * * @since 2.8.0 * + * @global array $l10n + * * @param string $domain Text domain. Unique identifier for retrieving translated strings. * @return NOOP_Translations A Translations instance. */ function get_translations_for_domain( $domain ) { global $l10n; - if ( !isset( $l10n[$domain] ) ) { - $l10n[$domain] = new NOOP_Translations; + if ( isset( $l10n[ $domain ] ) ) { + return $l10n[ $domain ]; + } + + static $noop_translations = null; + if ( null === $noop_translations ) { + $noop_translations = new NOOP_Translations; } - return $l10n[$domain]; + + return $noop_translations; } /** @@ -720,12 +810,14 @@ function get_translations_for_domain( $domain ) { * * @since 3.0.0 * + * @global array $l10n + * * @param string $domain Text domain. Unique identifier for retrieving translated strings. * @return bool Whether there are translations. */ function is_textdomain_loaded( $domain ) { global $l10n; - return isset( $l10n[$domain] ); + return isset( $l10n[ $domain ] ); } /** @@ -765,7 +857,7 @@ function get_available_languages( $dir = null ) { $lang_files = glob( ( is_null( $dir) ? WP_LANG_DIR : $dir ) . '/*.mo' ); if ( $lang_files ) { - foreach( $lang_files as $lang_file ) { + foreach ( $lang_files as $lang_file ) { $lang_file = basename( $lang_file, '.mo' ); if ( 0 !== strpos( $lang_file, 'continents-cities' ) && 0 !== strpos( $lang_file, 'ms-' ) && 0 !== strpos( $lang_file, 'admin-' ) ) { @@ -807,13 +899,13 @@ function wp_get_installed_translations( $type ) { $language_data = array(); foreach ( $files as $file ) { - if ( '.' === $file[0] || is_dir( $file ) ) { + if ( '.' === $file[0] || is_dir( WP_LANG_DIR . "$dir/$file" ) ) { continue; } if ( substr( $file, -3 ) !== '.po' ) { continue; } - if ( ! preg_match( '/(?:(.+)-)?([A-Za-z_]{2,6}).po/', $file, $match ) ) { + if ( ! preg_match( '/(?:(.+)-)?([a-z]{2,3}(?:_[A-Z]{2})?(?:_[a-z0-9]+)?).po/', $file, $match ) ) { continue; } if ( ! in_array( substr( $file, 0, -3 ) . '.mo', $files ) ) { @@ -855,6 +947,7 @@ function wp_get_pomo_file_data( $po_file ) { * Language selector. * * @since 4.0.0 + * @since 4.3.0 Introduced the `echo` argument. * * @see get_available_languages() * @see wp_get_available_translations() @@ -862,15 +955,18 @@ function wp_get_pomo_file_data( $po_file ) { * @param string|array $args { * Optional. Array or string of arguments for outputting the language selector. * - * @type string $id ID attribute of the select element. Default empty. - * @type string $name Name attribute of the select element. Default empty. - * @type array $languages List of installed languages, contain only the locales. - * Default empty array. - * @type array $translations List of available translations. Default result of - * {@see wp_get_available_translations()}. - * @type string $selected Language which should be selected. Default empty. - * @type bool $show_available_translations Whether to show available translations. Default true. + * @type string $id ID attribute of the select element. Default empty. + * @type string $name Name attribute of the select element. Default empty. + * @type array $languages List of installed languages, contain only the locales. + * Default empty array. + * @type array $translations List of available translations. Default result of + * wp_get_available_translations(). + * @type string $selected Language which should be selected. Default empty. + * @type bool|int $echo Whether to echo the generated markup. Accepts 0, 1, or their + * boolean equivalents. Default 1. + * @type bool $show_available_translations Whether to show available translations. Default true. * } + * @return string HTML content */ function wp_dropdown_languages( $args = array() ) { @@ -880,6 +976,7 @@ function wp_dropdown_languages( $args = array() ) { 'languages' => array(), 'translations' => array(), 'selected' => '', + 'echo' => 1, 'show_available_translations' => true, ) ); @@ -916,7 +1013,7 @@ function wp_dropdown_languages( $args = array() ) { $translations_available = ( ! empty( $translations ) && $args['show_available_translations'] ); - printf( '', esc_attr( $args['name'] ), esc_attr( $args['id'] ) ); // Holds the HTML markup. $structure = array(); @@ -954,7 +1051,13 @@ function wp_dropdown_languages( $args = array() ) { $structure[] = ''; } - echo join( "\n", $structure ); + $output .= join( "\n", $structure ); + + $output .= ''; + + if ( $args['echo'] ) { + echo $output; + } - echo ''; + return $output; }