Make WordPress Core


Ignore:
Timestamp:
05/10/2016 06:49:21 PM (9 years ago)
Author:
swissspidy
Message:

I18N: Reverse the order of loading plugin and theme translations.

load_theme_textdomain(), load_plugin_textdomain() and load_muplugin_textdomain() now try to load the .mo file from the wp-content/languages directory first. After the introduction of language packs, translation files are more likely to be located there.

Props swissspidy, sebastian.pisula.
Fixes #34213.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/l10n.php

    r37342 r37414  
    656656 *
    657657 * @since 1.5.0
     658 * @since 4.6.0 The function now tries to load the .mo file from the languages directory first.
    658659 *
    659660 * @param string $domain          Unique identifier for retrieving translated strings
     
    664665 */
    665666function load_plugin_textdomain( $domain, $deprecated = false, $plugin_rel_path = false ) {
    666     $locale = get_locale();
    667667    /**
    668668     * Filter a plugin's locale.
     
    673673     * @param string $domain Text domain. Unique identifier for retrieving translated strings.
    674674     */
    675     $locale = apply_filters( 'plugin_locale', $locale, $domain );
    676 
    677     if ( false !== $plugin_rel_path ) {
     675    $locale = apply_filters( 'plugin_locale', get_locale(), $domain );
     676
     677    $mofile = $domain . '-' . $locale . '.mo';
     678
     679    // Try to load from the languages directory first.
     680    if ( load_textdomain( $domain, WP_LANG_DIR . '/plugins/' . $mofile ) ) {
     681        return true;
     682    }
     683
     684    if ( false !== $plugin_rel_path ) {
    678685        $path = WP_PLUGIN_DIR . '/' . trim( $plugin_rel_path, '/' );
    679686    } elseif ( false !== $deprecated ) {
     
    684691    }
    685692
    686     // Load the textdomain according to the plugin first
    687     $mofile = $domain . '-' . $locale . '.mo';
    688     if ( $loaded = load_textdomain( $domain, $path . '/'. $mofile ) )
    689         return $loaded;
    690 
    691     // Otherwise, load from the languages directory
    692     $mofile = WP_LANG_DIR . '/plugins/' . $mofile;
    693     return load_textdomain( $domain, $mofile );
     693    return load_textdomain( $domain, $path . '/' . $mofile );
    694694}
    695695
     
    698698 *
    699699 * @since 3.0.0
     700 * @since 4.6.0 The function now tries to load the .mo file from the languages directory first.
    700701 *
    701702 * @param string $domain             Text domain. Unique identifier for retrieving translated strings.
     
    707708    /** This filter is documented in wp-includes/l10n.php */
    708709    $locale = apply_filters( 'plugin_locale', get_locale(), $domain );
     710
     711    $mofile = $domain . '-' . $locale . '.mo';
     712
     713    // Try to load from the languages directory first.
     714    if ( load_textdomain( $domain, WP_LANG_DIR . '/plugins/' . $mofile ) ) {
     715        return true;
     716    }
     717
    709718    $path = trailingslashit( WPMU_PLUGIN_DIR . '/' . ltrim( $mu_plugin_rel_path, '/' ) );
    710719
    711     // Load the textdomain according to the plugin first
    712     $mofile = $domain . '-' . $locale . '.mo';
    713     if ( $loaded = load_textdomain( $domain, $path . $mofile ) )
    714         return $loaded;
    715 
    716     // Otherwise, load from the languages directory
    717     $mofile = WP_LANG_DIR . '/plugins/' . $mofile;
    718     return load_textdomain( $domain, $mofile );
     720    return load_textdomain( $domain, $path . '/' . $mofile );
    719721}
    720722
     
    728730 *
    729731 * @since 1.5.0
     732 * @since 4.6.0 The function now tries to load the .mo file from the languages directory first.
    730733 *
    731734 * @param string $domain Text domain. Unique identifier for retrieving translated strings.
     
    735738 */
    736739function load_theme_textdomain( $domain, $path = false ) {
    737     $locale = get_locale();
    738740    /**
    739741     * Filter a theme's locale.
     
    744746     * @param string $domain Text domain. Unique identifier for retrieving translated strings.
    745747     */
    746     $locale = apply_filters( 'theme_locale', $locale, $domain );
    747 
    748     if ( ! $path )
     748    $locale = apply_filters( 'theme_locale', get_locale(), $domain );
     749
     750    $mofile = $domain . '-' . $locale . '.mo';
     751
     752    // Try to load from the languages directory first.
     753    if ( load_textdomain( $domain, WP_LANG_DIR . '/themes/' . $mofile ) ) {
     754        return true;
     755    }
     756
     757    if ( ! $path ) {
    749758        $path = get_template_directory();
    750 
    751     // Load the textdomain according to the theme
    752     $mofile = untrailingslashit( $path ) . "/{$locale}.mo";
    753     if ( $loaded = load_textdomain( $domain, $mofile ) )
    754         return $loaded;
    755 
    756     // Otherwise, load from the languages directory
    757     $mofile = WP_LANG_DIR . "/themes/{$domain}-{$locale}.mo";
    758     return load_textdomain( $domain, $mofile );
     759    }
     760
     761    return load_textdomain( $domain, $path . '/' . $locale . '.mo' );
    759762}
    760763
Note: See TracChangeset for help on using the changeset viewer.