サポート » 使い方全般 » twentyseventeenの多言語化

  • ブラウザ設定言語に合わせて読み込むテンプレートを変えたいです。

    テーマは「twentyseventeen」を使っています。

    どうやら「front-page.php」が最初に読み込まれるテーマのようなので、ここに

    もし ja なら {
    <?php get_template_part( page-ja ); ?>
    } もし en なら {
    <?php get_template_part( page-en ); ?>
    } もし zh なら {
    <?php get_template_part( page-zh ); ?>
    }

    のような感じで書いて、日本語なら「page-ja.php」を読み込んで、英語なら「page-en.php」を読み込んで、中国語なら「page-zh.php」を読み込んで、という風にしたいと思っています。

    尚「page-xx.php」というトップページだけのサイトです。

    この場合「front-page.php」にはどのように書いたらよろしいでしょうか?

    • このトピックはmeijinochocoが5年、 1ヶ月前に変更しました。
2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック投稿者 meijinochoco

    (@meijinochoco)

    できたかもしれません。次の書き方で問題はないでしょうか?
    どなたかご指摘いただけましたら幸いです。
    よろしくお願いいたします。

    <?php
    /*
    Template Name: front-page
    */
    get_header(); ?>
    
    <?php
    
    $languages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
    $languages = array_reverse($languages);
    
    $result = '';
    
    foreach ($languages as $language) {
      if (preg_match('/^ja/i', $language)) {
        $result = 'ja';
      } elseif (preg_match('/^en/i', $language)) {
        $result = 'en';
      } elseif (preg_match('/^zh/i', $language)) {
        $result = 'zh';
      }
    }
    
    if ($result == '') {
      $result = 'Japanese';
    }
    
    get_template_part('page-'.$result);
    
    ?>
    
    <?php get_footer(); ?>

    こんにちは

    言語設定は複数設定することができ、優先度の高い順となります。
    例えば、言語設定で第一言語に「日本語」、第二言語に「中国語」、第三言語に「英語」とした場合、サイト側ではサイトが対応している言語が中国語と英語のみの場合は、中国語で表示するような動作がいいかと思います。
    よってコードにすると、下記のようなコードにするといいかと思います。

    $language = 'ja';
    if ( isset( $_SERVER['HTTP_ACCEPT_LANGUAGE'] ) ) {
    	$langs = explode( ',', $_SERVER['HTTP_ACCEPT_LANGUAGE'] );
    	foreach ( $langs as $lang ) {
    		$lang = strtolower( substr( trim( $langs[0] ), 0, 2 ) );
    		if ( in_array( $lang, array( 'ja', 'en', 'zh' ) ) ) {
    			$language = $lang;
    			break;
    		}
    	}
    }
    echo $language;

    ※ コード内の ‘ja’, ‘en’, ‘zh’ は実際に対応している言語を指定してください。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「twentyseventeenの多言語化」には新たに返信することはできません。