2011-11-23 8 views
5

Ho un sito Web basato su utente con Wordpress e dalle loro impostazioni del profilo sono in grado di selezionare la lingua, queste informazioni e altre impostazioni sono impostate per ogni utente in user_meta.Impostazione della lingua di Wordpress a livello di programmazione?

So come tradurre ma, c'è un modo per impostare la lingua del tema a livello di programmazione?

Grazie!

Modifica: nessun plugin, per favore, ho bisogno di fare questo il più semplice possibile.

risposta

2

ho trovato una soluzione diversa:

// Set user selected language by loading the lang.mo file 
if (is_user_logged_in()) { 

    // add local filter 
    add_filter('locale', 'language'); 

    function language($locale) { 
     /* Note: user_meta and user_info are two functions made by me, 
      user_info will grab the current user ID and use it for 
      grabbing user_meta */ 

     // grab user_meta "lang" value 
     $lang = user_meta(user_info('ID', false), 'lang', false); 

     // if user_meta lang is not empty 
     if (!empty($lang)) { 
      $locale = $lang; /* set locale to lang */ 
     } 

     return $locale; 
    } 

    // load textdomain and .mo file if "lang" is set 
    load_theme_textdomain('theme-domain', TEMPLATEPATH . '/lang'); 

} 

Via: http://codex.wordpress.org/Function_Reference/load_theme_textdomain

2

Immagino che stiate cercando il filtro override_load_textdomain, chiamato solo all'inizio di una chiamata di funzione load_textdomain.

Che sarebbe qualcosa di simile:

function my_load_textdomain ($retval, $domain, $mofile) { 

    if ($domain != 'theme_domain') 
     return false; 

    $user = get_currentuserinfo() 
    $user_lang = get_user_lang($user); 

    if ($new_mofile = get_my_mofile($user_lang)) { 
     load_textdomain('theme_domain', $new_mofile); 
     return true; 
    } 

    return false; 
} 
add_filter('override_load_textdomain', 'my_load_textdomain'); 

Codice da cervello a tastiera, non testati. Dovresti fare altre convalide e così via.

+0

Grazie, darò una prova e ti faccio sapere. –

+0

Ottengo "Avviso: argomento mancante 2 per my_load_textdomain() in [...]", il codice è lo stesso che hai postato. –

+0

Si prega di notare che il codice che ho postato non funzionerà così com'è. È solo un riferimento per te da applicare al tuo ambiente del sito. Ho appena corretto la chiamata alla funzione per accettare gli argomenti richiesti dal filtro. – vmassuchetto

2

mi si avvicinò con seguente soluzione come ho bisogno di generare fatture da un plugin in diverse lingue nel campo di applicazione della stessa richiesta:

global $locale; 

    $locale = 'en_CA'; 
    load_plugin_textdomain('invoice', false, 'my-plugin/languages/'); 
    generateInvoice(); // produce the English localized invoice 

    $locale = 'fr_CA'; 
    load_plugin_textdomain('invoice', false, 'my-plugin/languages/'); 
    generateInvoice(); // produce the French localized invoice 
0

ho avuto un problema simile e risolto in questo modo:

0.123.
  1. Nel mio caso ho voluto recuperare il locale utilizzando le impostazioni internazionali dell'utente: $userLocale = get_user_locale($userObject->ID);

  2. ho creato una funzione personalizzata per caricare il theme_textdomain corrette in locale dinamica. E 'quasi la stessa della funzione di WP, ma è possibile aggiungere una variabile locale:

    /** 
    * Loads text domain by custom locale 
    * Based on a WP function, only change is the custom $locale 
    * parameter so we can get translated strings on demand during runtime 
    */ 
    function load_theme_textdomain_custom_locale($domain, $path = false, $locale) 
    { 
        /** 
        * Filter a theme's locale. 
        * 
        * @since 3.0.0 
        * 
        * @param string $locale The theme's current locale. 
        * @param string $domain Text domain. Unique identifier for retrieving translated strings. 
        */ 
        $locale = apply_filters('theme_locale', $locale, $domain); 
    
        if (!$path) { 
         $path = get_template_directory(); 
        } 
    
        // Load the textdomain according to the theme 
        $mofile = "{$path}/{$locale}.mo"; 
        if ($loaded = load_textdomain($domain, $mofile)) { 
         return $loaded; 
        } 
    
        // Otherwise, load from the languages directory 
        $mofile = WP_LANG_DIR . "/themes/{$domain}-{$locale}.mo"; 
        return load_textdomain($domain, $mofile); 
    } 
    

basa su: http://queryposts.com/function/load_theme_textdomain/