WordPress.org

Make WordPress Core

Ticket #17268: wp_gettext_v2.patch

File wp_gettext_v2.patch, 4.3 KB (added by linushoppe, 7 years ago)
  • .php

    old new  
    4747
    4848        if ( empty( $locale ) )
    4949                $locale = 'en_US';
    50 
     50       
     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         
     281        } else {
     282          $translations = &get_translations_for_domain( $domain );
     283          $translation = $translations->translate_plural( $single, $plural, $number, $context );
     284        }
     285       
    254286        return apply_filters( 'ngettext_with_context', $translation, $single, $plural, $number, $context, $domain );
    255287}
    256288
     
    328360        }
    329361
    330362        do_action( 'load_textdomain', $domain, $mofile );
    331 
     363       
    332364        $mofile = apply_filters( 'load_textdomain_mofile', $mofile, $domain );
    333 
     365       
    334366        if ( !is_readable( $mofile ) ) return false;
     367       
     368        // Try to use gettext whenever available
     369        if (function_exists ('bindtextdomain')) {
     370          // Do an automatic setup
     371          $Locale = basename ($mofile, '.mo');
     372         
     373          if (($p = strrpos ($Locale, '-')) !== false)
     374            $Locale = substr ($Locale, $p + 1);
     375         
     376          if (!is_file ('./wp-lang/' . $Locale . '/LC_MESSAGES/' . $domain . '.mo') &&
     377              (is_dir ('./wp-lang/' . $Locale . '/LC_MESSAGES') || mkdir ('./wp-lang/' . $Locale . '/LC_MESSAGES', 0775, true)))
     378            copy ($mofile, './wp-lang/' . $Locale . '/LC_MESSAGES/' . $domain . '.mo');
     379         
     380          // Configure gettext
     381          bindtextdomain ($domain, './wp-lang/');
     382          bind_textdomain_codeset ($domain, 'UTF-8');
     383         
     384          // Register a NOOP-Hanlder for this domain - just to keep consistency
     385          $l10n[$domain] = new NOOP_Translations;
     386         
     387          return true;
     388        }
    335389
    336390        $mo = new MO();
    337391        if ( !$mo->import_from_file( $mofile ) ) return false;
     
    483537function &get_translations_for_domain( $domain ) {
    484538        global $l10n;
    485539        if ( !isset( $l10n[$domain] ) ) {
    486                 $l10n[$domain] = &new NOOP_Translations;
     540                $l10n[$domain] = new NOOP_Translations;
    487541        }
    488542        return $l10n[$domain];
    489543}