2011-11-23 13 views
5

Tengo un sitio web basado en el usuario con Wordpress y desde su configuración de perfil pueden seleccionar el idioma, esta información y otras configuraciones se establecen para cada usuario en user_meta.¿Configurando el lenguaje WordPress programáticamente?

Sé cómo traducir pero, ¿hay alguna manera de configurar el lenguaje de temas mediante programación?

¡Gracias!

Editar: Sin complementos por favor, tengo que hacer esto de la manera más simple posible.

Respuesta

2

he encontrado una solución diferente:

// 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'); 

} 

Vía: http://codex.wordpress.org/Function_Reference/load_theme_textdomain

2

Supongo que está buscando el filtro override_load_textdomain, llamado justo al comienzo de una llamada a la función load_textdomain.

Eso sería algo así como:

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'); 

Código del cerebro para teclado, no evaluados. Deberías hacer más validaciones y más.

+0

Gracias, voy a darle una prueba y le hará saber. –

+0

Aparece "Advertencia: falta el argumento 2 para my_load_textdomain() en [...]", el código es el mismo que publicó. –

+0

Tenga en cuenta que el código que publiqué no funcionará como está. Es solo una referencia para que se aplique al entorno de su sitio. Acabo de corregir la llamada de función para aceptar los argumentos que necesita el filtro. – vmassuchetto

2

me ocurrió siguiente solución, ya que necesitaba para generar facturas de un plugin en diferentes idiomas en el alcance de la misma petición:

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

que tenía un problema similar y lo resolvió así:

  1. En mi caso, yo quisiera recuperar el entorno local mediante el uso de la configuración regional del usuario: $userLocale = get_user_locale($userObject->ID);

  2. creé una función personalizada para cargar el theme_textdomain correcta con la configuración regional dinámico. Es casi lo mismo que la función WP, pero se puede añadir una variable local:

    /** 
    * 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); 
    } 
    

Basado en: http://queryposts.com/function/load_theme_textdomain/

Cuestiones relacionadas