2011-11-23 4 views
5

私はWordpressでユーザーベースのウェブサイトを持っており、そのプロファイル設定から言語を選択できます。この情報やその他の設定はuser_metaのすべてのユーザーに設定されています。Wordpress言語をプログラムで設定しますか?

私は翻訳方法を知っていますが、プログラムによってテーマ言語を設定する方法はありますか?

ありがとうございました!

編集:いいえプラグインしてください、私はできるだけ簡単にこれを行う必要があります。

答えて

2

私は別の解決策を見つけた:

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

} 

経由:http://codex.wordpress.org/Function_Reference/load_theme_textdomain

2

フィルタを探しています。これは、load_textdomain関数呼び出しの開始時に呼び出されました。ようなものになるだろう

:キーボードの脳から

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

コードは、テストされていません。いくつかの検証を行う必要があります。

+0

はありがとう、私はそれをテストを与える、あなたが知っているだろう。 –

+0

私は「警告:[...]のmy_load_textdomain()の引数2がありません」というコードは、あなたが投稿したコードと同じです。 –

+0

私が掲示したコードはそのまま動作しないので注意してください。これは、サイト環境に適用するための参考にすぎません。フィルタが必要とする引数を受け入れるように関数呼び出しを修正しました。 – vmassuchetto

2

私は同じ要求の範囲内の異なる言語でのプラグインからの請求書を生成するために、必要に応じて、私は、次の解決策を考え出しました:

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

私は同様の問題を持っていたし、このようにそれを解決:

  1. は、私の場合は、ユーザロケールを使用してロケールを取得したい:$userLocale = get_user_locale($userObject->ID);

  2. 私はダイナミックロケールで正しいtheme_textdomainをロードするためにカスタム関数を作成しました。それはほとんどWP関数と同じだが、あなたは、ロケール変数を追加することができます。

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

に基づいて:http://queryposts.com/function/load_theme_textdomain/

関連する問題