WordPress.org

Make WordPress Core

Ticket #17268: wp_gettext_v3.patch

File wp_gettext_v3.patch, 4.0 KB (added by linushoppe, 7 years ago)

Patch against /wp-includes/l10n.php in WP 3.2.0

  • l10n.php

    old new  
    4848        if ( empty( $locale ) )
    4949                $locale = 'en_US';
    5050
     51        putenv('LC_ALL=' . $locale);
     52        setlocale(LC_ALL, $locale);
     53       
    5154        return apply_filters( 'locale', $locale );
    5255}
    5356
     
    6568 * @return string Translated text
    6669 */
    6770function translate( $text, $domain = 'default' ) {
    68         $translations = &get_translations_for_domain( $domain );
    69         return apply_filters( 'gettext', $translations->translate( $text ), $text, $domain );
     71        if (function_exists ('dgettext'))
     72                $translation = dgettext ($domain, $text);
     73        else {
     74                $translations = &get_translations_for_domain( $domain );
     75                $translation = $translations->translate( $text );
     76        }
     77       
     78        return apply_filters( 'gettext', $translation, $text, $domain );
    7079}
    7180
    7281function before_last_bar( $string ) {
     
    7887}
    7988
    8089function translate_with_gettext_context( $text, $context, $domain = 'default' ) {
    81         $translations = &get_translations_for_domain( $domain );
    82         return apply_filters( 'gettext_with_context', $translations->translate( $text, $context ), $text, $context, $domain );
     90        if (function_exists ('dcgettext')) {
     91                $translation = dgettext ($domain, $context . "\x04" . $text);
     92               
     93                if ($translation == $context . "\x04" . $text)
     94                        $translation = $text;
     95        } else {
     96                $translations = &get_translations_for_domain( $domain );
     97                $translation = $translations->translate( $text, $context );
     98        }
     99       
     100        return apply_filters( 'gettext_with_context', $translation, $text, $context, $domain );
    83101}
    84102
    85103/**
     
    236254 * @return string Either $single or $plural translated text
    237255 */
    238256function _n( $single, $plural, $number, $domain = 'default' ) {
    239         $translations = &get_translations_for_domain( $domain );
    240         $translation = $translations->translate_plural( $single, $plural, $number );
     257        if (function_exists ('dngettext'))
     258                $translation = dngettext ($domain, $single, $plural, $number);
     259        else {
     260                $translations = &get_translations_for_domain( $domain );
     261                $translation = $translations->translate_plural( $single, $plural, $number );
     262        }
     263       
    241264        return apply_filters( 'ngettext', $translation, $single, $plural, $number, $domain );
    242265}
    243266
     
    249272 *
    250273 */
    251274function _nx($single, $plural, $number, $context, $domain = 'default') {
    252         $translations = &get_translations_for_domain( $domain );
    253         $translation = $translations->translate_plural( $single, $plural, $number, $context );
     275        if (function_exists ('dngettext')) {
     276                $translation = dngettext ($domain, $context . "\x04" . $single, $plural, $number);
     277               
     278                if (($translation == $context . "\x04" . $single) || ($translation == $plural))
     279                        $translation = ($number == 1 ? $single : $plural);
     280        } else {
     281                $translations = &get_translations_for_domain( $domain );
     282                $translation = $translations->translate_plural( $single, $plural, $number, $context );
     283        }
     284       
    254285        return apply_filters( 'ngettext_with_context', $translation, $single, $plural, $number, $context, $domain );
    255286}
    256287
     
    318349
    319350        if ( !is_readable( $mofile ) ) return false;
    320351
     352        // Try to use gettext whenever available
     353        if (function_exists ('bindtextdomain')) {
     354                // Do an automatic setup
     355                $Locale = basename ($mofile, '.mo');
     356               
     357                if (($p = strrpos ($Locale, '-')) !== false)
     358                        $Locale = substr ($Locale, $p + 1);
     359               
     360                if (!is_file ('./wp-lang/' . $Locale . '/LC_MESSAGES/' . $domain . '.mo') &&
     361                    (is_dir ('./wp-lang/' . $Locale . '/LC_MESSAGES') || mkdir ('./wp-lang/' . $Locale . '/LC_MESSAGES', 0775, true)))
     362                        copy ($mofile, './wp-lang/' . $Locale . '/LC_MESSAGES/' . $domain . '.mo');
     363               
     364                // Configure gettext
     365                bindtextdomain ($domain, './wp-lang/');
     366                bind_textdomain_codeset ($domain, 'UTF-8');
     367               
     368                // Register a NOOP-Hanlder for this domain - just to keep consistency
     369                $l10n[$domain] = new NOOP_Translations;
     370               
     371                return true;
     372        }
     373       
    321374        $mo = new MO();
    322375        if ( !$mo->import_from_file( $mofile ) ) return false;
    323376