Blog

多言語対応プラグインWPMLで言語ごとに条件分岐する方法

WordPressの多言語対応プラグイン「WPML」では、設定画面(「WPML」→「テーマとプラグインローカライゼーション」)からテーマの中にある文字列を翻訳することができます。

しかしいちいち検索して翻訳して…… というのはちょっと煩わしいですよね。

また単純にテキストの翻訳だけならまだしも、言語によっては対応していないフォントもあるので、個別に指定する必要があるケースも出てきます。

そういうときにはテーマの方で言語ごとに条件分岐し、id/classを付与してスタイルを調整できると便利です。

WPMLで言語ごとに条件分岐する方法

WPMLでは以下のような形で言語コードを指定することで、言語によって条件分岐させることができます。

<?php if( ICL_LANGUAGE_CODE == 'ja' ): //日本語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'sq' ): //アルバニア語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'ar' ): //アラビア語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'hy' ): //アルメニア語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'eu' ): //バスク語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'bn' ): //ベンガル語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'bs' ): //ボスニア語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'bg' ): //ブルガリア語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'ca' ): //カタロニア語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'zh-hans' ): //簡体中国語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'zh-hant' ): //繁体中国語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'hr' ): //クロアチア語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'cs' ): //チェコ語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'da' ): //デンマーク語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'nl' ): //オランダ語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'en' ): //英語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'eo' ): //エスペラント ?>
<?php elseif( ICL_LANGUAGE_CODE == 'et' ): //エストニア語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'fi' ): //フィンランド語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'fr' ): //フランス語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'gl' ): //ガリシア語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'de' ): //ドイツ語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'el' ): //ギリシャ語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'he' ): //ヘブライ語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'hi' ): //ヒンディー語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'hu' ): //ハンガリー語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'is' ): //アイスランド語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'id' ): //インドネシア語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'ga' ): //アイルランド語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'it' ): //イタリア語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'ko' ): //韓国語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'ku' ): //クルド語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'lv' ): //ラトビア語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'lt' ): //リトアニア語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'mk' ): //マケドニア語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'mk' ): //マケドニア語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'ms' ): //マレー語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'mt' ): //マルタ語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'mn' ): //モンゴル語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'ne' ): //ネパール語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'no' ): //ノルウェー語(ブークモール) ?>
<?php elseif( ICL_LANGUAGE_CODE == 'fa' ): //ペルシャ語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'pl' ): //ポーランド語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'pt-br' ): //ポルトガル語(ブラジル) ?>
<?php elseif( ICL_LANGUAGE_CODE == 'pt-pt' ): //ポルトガル語(ポルトガル) ?>
<?php elseif( ICL_LANGUAGE_CODE == 'pa' ): //パンジャーブ語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'qu' ): //ケチュア語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'ro' ): //ルーマニア語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'ru' ): //ロシア語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'sr' ): //セルビア語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'sk' ): //スロバキア語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'sl' ): //スロベニア語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'so' ): //ソマリ語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'es' ): //スペイン語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'sv' ): //スウェーデン語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'ta' ): //タミル語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'th' ): //タイ語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'tr' ): //トルコ語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'uk' ): //ウクライナ語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'ur' ): //ウルドゥー語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'uz' ): //ウズベク語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'vi' ): //ベトナム語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'cy' ): //ウェールズ語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'yi' ): //イディッシュ語 ?>
<?php elseif( ICL_LANGUAGE_CODE == 'zu' ): //ズールー語 ?>
<?php else: //その他の言語 ?>
<?php endif; ?>

以下のような書き方もできます。

分岐させたい内容によって書きやすい方を使えば大丈夫です。

<?php if( ICL_LANGUAGE_CODE == 'ja' ) { //日本語
	echo '<span class="ja"></span>';
} elseif( ICL_LANGUAGE_CODE == 'en' ) { //英語
	echo '<span class="en"></span>';
} elseif( ICL_LANGUAGE_CODE == 'zh-hans' ) { //簡体中国語
	echo '<span class="zh-hans"></span>';
} else { //その他の言語
	echo '';
} ?>

言語によってフォントを指定する場合の例

先にも言いましたが、フォントによっては対応していない言語があります。

日本語や中国語はマルチバイト文字(全角文字)なので、シングルバイト(半角)にしか対応していないフォントでは正常に表示されません。

またタイ語などアルファベット表記でない言語や、ベトナム語などの特有の発音記号がある言語についても、使いたいフォントが対応しているか予め確認しておく必要があります。

しかしサイトで使う言語すべてに対応しているフォントとなると、選択肢が極端に限られてしまうケースも少なくありません。

そういう場合には、言語によってフォントを切り替えるようにしてみるのも一つの方法です。

たとえば以下のようにbodyタグに言語ごとに違うクラスを付与し、それぞれに違うフォントを指定するような形です。

PHP
<?php if( ICL_LANGUAGE_CODE == 'ja' ): //日本語 ?>
	<body class="ja">
<?php elseif( ICL_LANGUAGE_CODE == 'zh-hans' ): //簡体中国語 ?>
	<body class="zh-hans">
<?php elseif( ICL_LANGUAGE_CODE == 'th' ): //タイ語 ?>
	<body class="th">
<?php else: //その他の言語 ?>
	<body class="en">
<?php endif; ?>
CSS
/* その他の言語 */
body.ja {
	font-family: 'Roboto', sans-serif;
}

/* 日本語 */
body.ja {
	font-family: 'NotoSansJP', sans-serif;
}

/* 簡体中国語 */
body.zh-hans {
	font-family: 'NotoSansSC', sans-serif;
}

/* タイ語 */
body.th {
	font-family: 'Sarabun', sans-serif;
}

まとめ

以上、多言語対応プラグイン「WPML」で言語ごとに条件分岐する方法でした。

同じ内容の文章でも、言語によって文字数がかなり変わることはよくあります。

また同じフォントを使っていても、言語が変わるだけで字間や行間が窮屈だったり、逆に空きすぎだったりとかなり印象が変わります。

言語ごとに条件分岐できれば、そういうときの調整がかなり捗りますので、是非試してみてください。