サポート » 使い方全般 » 日・韓・英の自動切り替えについて

  • 解決済 i_am_going

    (@i_am_going)


    初めて投稿します。
    Wordpressの利用も一週間ほどで、先日FTP処理を間違えホームページを崩壊させた素人です。
    投稿ルール、その他、フォーラムの使い方なども熟知しておりませんので、該当問題以外にもアドバイスがあればお願いします。

    <<環境>>
    作業PC:Mac 日本語環境、韓国語・英語も使える設定
    テストPC:作業PC、および韓国語環境Mac(日本語、英語も使える設定)
    Server:日本のXServer
    作業場所:韓国
    対象者:主に日本人、韓国人、念の為に英語圏人
    WPバージョン:4.1(XServerの自動インストールしたものです)
    補足:WPに韓国語をインストールしたことで、「設定」→「一般」の下の方の部分に「サイトの言語」という項目が出現し選択可能になっているが、保存すると日本語に戻っている。(これは挿入した文の影響かも知れません)

    <<本題>>
    ホームページを作成する時に、内容がほぼ固定的であるため、閲覧者の言語設定により、表示言語を切り替えたいと考えています。
    そのために「wp-config.php」に以下の文を挿入し、取り敢えず立ち上がります。
    しかし作業PCでは日本語表示され、テストPCでは英語表示されます。テストPCは韓国語環境なので、韓国語で表示させたいのですが、上手く出来ません。

    挿入した文は、次の通り…
    if (preg_match(‘/^ja/i’, $_SERVER[‘HTTP_ACCEPT_LANGUAGE’])) {
    $locale = “ja”;
    define (‘WPLANG’, ‘ja’);
    if(htmlspecialchars(@$_GET[“lang”] == “ko”)) {
    $locale = “ko”;
    define (‘WPLANG’, ‘ko’);
    }
    } elseif (preg_match(‘/^en/i’, $_SERVER[‘HTTP_ACCEPT_LANGUAGE’])) {
    $locale = “en_US”;
    define (‘WPLANG’, ‘en_US’);
    if(htmlspecialchars(@$_GET[“lang”] == “en”)) {
    $locale = “en_US”;
    define (‘WPLANG’, ‘en_US’);
    }
    } elseif (preg_match(‘/^ko/i’, $_SERVER[‘HTTP_ACCEPT_LANGUAGE’])) {
    $locale = “ko”;
    define (‘WPLANG’, ‘ko’);
    if(htmlspecialchars(@$_GET[‘lang’] == “ja”)) {
    $locale = “ja”;
    define (‘WPLANG’, ‘ja’);
    }
    } else {
    $locale = “en_US”;
    define (‘WPLANG’, ‘en_US’);
    if(htmlspecialchars(@$_GET[‘lang’] == “ja”)) {
    $locale = “ja”;
    define (‘WPLANG’, ‘ja’);
    }
    }
    ここまでを「/* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */」の前に挿入しています。

    これで、日韓英の判別が出来て、切り替えられれば、「固定ページ」のテキスト編集で以下の方な書き方で切り分けたいと思っています。
    <?php
    if ($locale == “ja”) {
    日本語モードなので日本語で解説している文
    } else {
    韓国語モードなので일본어 모드이므로 일본어로 해설하고있는 문장
    }
    ?>

    こういうやり方は無理なのでしょうか?
    よろしくお願いします。
    本当に素人なので、文そのものを見せてもらうか、かなり噛み砕いた説明でなければ理解出来ないかも知れませんので、その点もご考慮頂ければ幸いです。

    [モデレーター編集: 「【重要】 お読みください」はフォーラム管理上のお知らせを掲載するカテゴリーですので質問のトピックには使用されないようお願いします。質問のトピックを作成される際には最もあてはまるカテゴリーを選択してください。本件は「使い方全般」カテゴリーに移動します。]

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • モデレーター Takayuki Miyoshi

    (@takayukister)

    WordPress 4.0 以降の wp-config.php では WPLANG 定数は指定されなくなりましたので、変に指定すると WordPress 内部でのロケール設定と競合しておかしなことになります。また wp-config.php の内容はページの制限なくすべてに影響しますのでさらにおかしなことになる可能性が高くなります。現行のやり方は避けたほうが賢明です。

    2言語までなら力業でもなんとかなりそうですが、3言語となるともう無理でしょう。基本的には多言語化を行うプラグインがカバーする領域ですので、プラグインの使用をおすすめします(Bogo をとくにおすすめします)。

    それはそれとして、なぜ現行のコードでは韓国語で表示されていないのかというと、韓国語 WordPress で使われている標準のロケールは ko ではなく ko_KR だからです。ko を ko_KR に変えれば、とりあえず動くことは動くだろうと思います。

    トピック投稿者 i_am_going

    (@i_am_going)

    ご返答ありがとうございます。
    大体意味がわかりました、プラグインを使う方向で調べてみます。

    Bogoも調べてみます。
    助かりました。

    モデレーター Seisuke Kuraishi

    (@tenpura)

    WordPress 4.0 より WPLANG 定数の使用は推奨されなくなり、言語の設定は、管理画面の 「設定」 > 「一般」 > 「サイトの言語」から行うことになりました。3.9.x 以前と異なり言語設定のマスターとしての機能はなくなっていますので、WPLANG 定数を直接参照するようなコードは正しく機能しません。代わりに get_locale() 関数を利用するようにしてください。
    http://eastcoder.com/2014/09/language-settings-in-wordpress-4-0/

    4.1 で WPLANG 定数を設定した場合、その言語の翻訳ファイルがない場合のフォールバックとして機能し、管理画面からのその言語の指定を可能とするように働きます。したがってそのままで

    変に指定すると WordPress 内部でのロケール設定と競合しておかしなことになります。

    ということにはなりませんが、前述のとおり WPLANG を言語設定のマスターとして参照するような意図のコードは正しく機能しません。

    トピック投稿者 i_am_going

    (@i_am_going)

    ありがとうございました! 別の方法で考えてみます^^

    因みに、利用者(閲覧者)は何語の話者であるかを推定するのに利用出来る関数は、何があるのですかね? ブラウザーの言語設定とか、IPアドレスとか、ご存知ならばご教授願います。

    モデレーター Seisuke Kuraishi

    (@tenpura)

    関数ではないですが $_SERVER['HTTP_ACCEPT_LANGUAGE'] からブラウザーの言語設定がわかりますよ。

    モデレーター Takayuki Miyoshi

    (@takayukister)

    ちなみに、$_SERVER['HTTP_ACCEPT_LANGUAGE'] の値からブラウザ側の言語設定がわかりますが、その構文は若干複雑なので真面目に正確な値を取ろうとすると結構大変です。さきほどおすすめした Bogo には bogo_http_accept_languages() という関数があり、HTTP_ACCEPT_LANGUAGE の値を解釈して、それを基準にインストールされている言語のロケールを優先順位が高い順に並べて返してくれます。役に立つかはわかりませんが興味があったら試してみてください。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「日・韓・英の自動切り替えについて」には新たに返信することはできません。