X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/48ab98cb1779cf2088c1351ac3dd3d0da6fb31d3..46588ee871246a923d972538dbc93b26f4fda932:/wp-includes/l10n.php diff --git a/wp-includes/l10n.php b/wp-includes/l10n.php index 23174552..339602b1 100644 --- a/wp-includes/l10n.php +++ b/wp-includes/l10n.php @@ -76,7 +76,7 @@ function get_locale() { * * If there is no translation, or the text domain isn't loaded, the original text is returned. * - * Note: Don't use translate() directly, use __() or related functions. + * *Note:* Don't use {@see translate()} directly, use `{@see __()} or related functions. * * @since 2.2.0 * @@ -87,6 +87,7 @@ function get_locale() { function translate( $text, $domain = 'default' ) { $translations = get_translations_for_domain( $domain ); $translations = $translations->translate( $text ); + /** * Filter text with its translation. * @@ -364,15 +365,14 @@ function _nx($single, $plural, $number, $context, $domain = 'default') { * strings and use them later. * * Example: - * - * $messages = array( - * 'post' => _n_noop('%s post', '%s posts'), - * 'page' => _n_noop('%s pages', '%s pages') - * ); - * ... - * $message = $messages[$type]; - * $usable_text = sprintf( translate_nooped_plural( $message, $count ), $count ); - * + * + * $messages = array( + * 'post' => _n_noop( '%s post', '%s posts' ), + * 'page' => _n_noop( '%s pages', '%s pages' ), + * ); + * ... + * $message = $messages[ $type ]; + * $usable_text = sprintf( translate_nooped_plural( $message, $count ), $count ); * * @since 2.5.0 * @@ -389,6 +389,11 @@ function _n_noop( $singular, $plural, $domain = null ) { * Register plural strings with context in POT file, but don't translate them. * * @since 2.8.0 + * @param string $singular + * @param string $plural + * @param string $context + * @param string|null $domain + * @return array */ function _nx_noop( $singular, $plural, $context, $domain = null ) { return array( 0 => $singular, 1 => $plural, 2 => $context, 'singular' => $singular, 'plural' => $plural, 'context' => $context, 'domain' => $domain ); @@ -532,7 +537,8 @@ function unload_textdomain( $domain ) { * * @since 1.5.0 * - * @param string $locale Optional. Locale to load. Defaults to get_locale(). + * @param string $locale Optional. Locale to load. Default is the value of {@see get_locale()}. + * @return bool Whether the textdomain was loaded. */ function load_default_textdomain( $locale = null ) { if ( null === $locale ) { @@ -588,7 +594,7 @@ function load_plugin_textdomain( $domain, $deprecated = false, $plugin_rel_path if ( false !== $plugin_rel_path ) { $path = WP_PLUGIN_DIR . '/' . trim( $plugin_rel_path, '/' ); - } else if ( false !== $deprecated ) { + } elseif ( false !== $deprecated ) { _deprecated_argument( __FUNCTION__, '2.7' ); $path = ABSPATH . trim( $deprecated, '/' ); } else { @@ -661,7 +667,7 @@ function load_theme_textdomain( $domain, $path = false ) { $path = get_template_directory(); // Load the textdomain according to the theme - $mofile = "{$path}/{$locale}.mo"; + $mofile = untrailingslashit( $path ) . "/{$locale}.mo"; if ( $loaded = load_textdomain( $domain, $mofile ) ) return $loaded; @@ -699,7 +705,7 @@ function load_child_theme_textdomain( $domain, $path = false ) { * @since 2.8.0 * * @param string $domain Text domain. Unique identifier for retrieving translated strings. - * @return Translations A Translations instance. + * @return NOOP_Translations A Translations instance. */ function get_translations_for_domain( $domain ) { global $l10n; @@ -757,11 +763,15 @@ function translate_user_role( $name ) { function get_available_languages( $dir = null ) { $languages = array(); - foreach( (array)glob( ( is_null( $dir) ? WP_LANG_DIR : $dir ) . '/*.mo' ) 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-' )) - $languages[] = $lang_file; + $lang_files = glob( ( is_null( $dir) ? WP_LANG_DIR : $dir ) . '/*.mo' ); + if ( $lang_files ) { + 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-' ) ) { + $languages[] = $lang_file; + } + } } return $languages; @@ -797,16 +807,23 @@ function wp_get_installed_translations( $type ) { $language_data = array(); foreach ( $files as $file ) { - if ( '.' === $file[0] || is_dir( $file ) ) + if ( '.' === $file[0] || is_dir( $file ) ) { continue; - if ( substr( $file, -3 ) !== '.po' ) + } + if ( substr( $file, -3 ) !== '.po' ) { continue; - if ( ! preg_match( '/(?:(.+)-)?([A-Za-z_]{2,6}).po/', $file, $match ) ) + } + if ( ! preg_match( '/(?:(.+)-)?([A-Za-z_]{2,6}).po/', $file, $match ) ) { continue; + } + if ( ! in_array( substr( $file, 0, -3 ) . '.mo', $files ) ) { + continue; + } list( , $textdomain, $language ) = $match; - if ( '' === $textdomain ) + if ( '' === $textdomain ) { $textdomain = 'default'; + } $language_data[ $textdomain ][ $language ] = wp_get_pomo_file_data( WP_LANG_DIR . "$dir/$file" ); } return $language_data; @@ -842,24 +859,36 @@ function wp_get_pomo_file_data( $po_file ) { * @see get_available_languages() * @see wp_get_available_translations() * - * @param array $args Optional arguments. Default empty array. + * @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. + * } */ function wp_dropdown_languages( $args = array() ) { - require_once( ABSPATH . 'wp-admin/includes/translation-install.php' ); $args = wp_parse_args( $args, array( - 'id' => '', - 'name' => '', - 'languages' => array(), - 'selected' => '' + 'id' => '', + 'name' => '', + 'languages' => array(), + 'translations' => array(), + 'selected' => '', + 'show_available_translations' => true, ) ); - if ( empty( $args['languages'] ) ) { - return false; + $translations = $args['translations']; + if ( empty( $translations ) ) { + require_once( ABSPATH . 'wp-admin/includes/translation-install.php' ); + $translations = wp_get_available_translations(); } - $translations = wp_get_available_translations(); - /* * $args['languages'] should only contain the locales. Find the locale in * $translations to get the native name. Fall back to locale. @@ -871,8 +900,11 @@ function wp_dropdown_languages( $args = array() ) { $languages[] = array( 'language' => $translation['language'], 'native_name' => $translation['native_name'], - 'lang' => $translation['iso'][1], + 'lang' => current( $translation['iso'] ), ); + + // Remove installed language from available translations. + unset( $translations[ $locale ] ); } else { $languages[] = array( 'language' => $locale, @@ -882,20 +914,47 @@ function wp_dropdown_languages( $args = array() ) { } } + $translations_available = ( ! empty( $translations ) && $args['show_available_translations'] ); + printf( ''; }