カスタム言語スイッチャー
WPMLにはドロップダウン言語リストを見せる独自の言語スイッチャーが搭載されています。 非常に柔軟性のあるツールですが、これだけでは足りません。
あなたは自分の言語スイッチャーを作り、テーマに挿入することができます。 以下に掲載文に利用できる言語のリストとフッター用の言語リストを追加する方法を説明します。
(その他の)言語リストを得る方法
icl_get_languages() を使い、いかなるページにも翻訳リストを表示できます。使用方法:
icl_get_languages('skip_missing=N')
* N=0/1
skip_missing パラメーターは翻訳なしの言語をどう扱うか機能に指示します。 これについては後に詳細を説明します。
この機能は一言語における入力の配列をリターンします。 例えば、WordPressサイトが英語、フランス語、イタリア語で表示されていると、このようにリターンされます。
Array ( [0] => Array ( [active] => 1 [native_name] => English [translated_name] => English [language_code] => en [country_flag_url] => http://yourdomain/wpmlpath/res/flags/en.png [url] => http://yourdomain/about ) [1] => Array ( [active] => 0 [native_name] => Français [translated_name] => French [language_code] => fr [country_flag_url] => http://yourdomain/wpmlpath/res/flags/fr.png [url] => http://yourdomain/fr/a-propos ) [2] => Array ( [active] => 0 [native_name] => Italiano [translated_name] => Italian [language_code] => it [country_flag_url] => http://yourdomain/wpmlpath/res/flags/it.png [url] => http://yourdomain/it/circa ) )
各言語があなたのテーマ機能が言語セレクターを作るために使用できる独自のパラメーター配列を持ちます。
- active:これは現在有効な言語です。(一言語が有効です)
- native_name: これは母国語です。(翻訳されない言語)
- translated_name: 現在有効な言語に翻訳された言語名
- country_flag_url: 国旗のPNGイメージへのURL
- url: その言語の翻訳へのリンク
翻訳が無い場合の対応方法
ページによっては全ての言語に翻訳されないものもあります。 あなたは icl_get_languages に翻訳がない言語に何をリターンするか指示できます。
もし ‘skip_missing=1′ だとこれらの言語はアウトプットに現れません。 ‘skip_missing=0′ だと全ての言語が現れ、翻訳がない言語がその言語のホームページにリンクバックされます。
あなたのテーマ機能に使用する方法
言語スイッチャーはあなたが好きなように作成できます。 以下は人気がある二つの使用方法です。
ここに示されるPHP機能の例はあなたの functions.php ファイル(テーマフォルダー)に行くべきです。-プラグインには追加されません。
この掲載文は次の他言語でも読めます。
他言語でも読めることを文の最後(または最初)に説明するために1ラインを追加するとします。 この機能は既存する翻訳された掲載文だけをリターンするべきで、もし翻訳が無い場合、アウトプットはあるべきではありません。
function icl_post_languages(){
$languages = icl_get_languages('skip_missing=1');
if(1 < count($languages)){
echo __('This post is also available in: ');
foreach($languages as $l){
if(!$l['active']) $langs[] = '<a href="'.$l['url'].'">'.$l['translated_name'].'</a>';
}
echo join(', ', $langs);
}
}
この機能がすることは、
- WPMLから言語リストを取ってくる – $languages = icl_get_languages(‘skip_missing=1′);
- 掲載文に一以上の言語があることをチェックする – if(1 < count($languages))
- 現在表示されている言語をスキップしてアウトプットを作成する – if(!$l['active'])
注:
- このメッセージは gettextを通過します。 違う言語の掲載文に追加するこのメッセージが正しい言語で表示されるためにはこれは非常に重要です: __(‘この掲載文は次の言語でも読めます:’);
- 使用される言語名は翻訳された言語名です。 これは全てのセンテンスが正しい言語で書かれることを保証します: $l['translated_name']
結果は以下のとおりです。
掲載文のメッセージは他言語でも読めます。
このメッセージを掲載文に含むには、 single.php からcl_post_languages() 呼び出しを追加してください。
フッターへの言語名リストと国旗
ページのトップに言語セレクターがあっても、フッターにも言語名リストと国旗を追加することは良いアイデアです。 多くの人々が何があるかすばやく見るためにページの一番下へスクロールします。そのため、目立つ言語スイッチャーがそこにあれば、外国人のビジターを助けることができます。
function languages_list_footer(){
$languages = icl_get_languages('skip_missing=0');
if(!empty($languages)){
echo '<div id="footer_language_list"><ul>';
foreach($languages as $l){
echo '<li>';
if($l['country_flag_url']){
if(!$l['active']) echo '<a href="'.$l['url'].'">';
echo '<img src="'.$l['country_flag_url'].'" height="12" alt="'.$l['language_code'].'" width="18" />';
if(!$l['active']) echo '</a>';
}
if(!$l['active']) echo '<a href="'.$l['url'].'">';
echo icl_disp_language($l['native_name'], $l['translated_name']);
if(!$l['active']) echo '</a>';
echo '</li>';
}
echo '</ul></div>';
}
}
この機能は以下を行います。
- 翻訳された言語があれば、DIVを作成し、順序不同のリストを開始します: if(!empty($languages)){ echo ‘<div id="footer_language_list"><ul>’;
- 各言語を通過し、リスト項目として追加します。
- それが有効な言語でなければ、その言語のページへ行くリンクが付加されます: if(!$l['active']) echo ‘<a href="’.$l['url'].’">’;
- 言語の国旗を追加する: <img src="’.$l['country_flag_url'].’" alt="’.$l['language_code'].’" width="18" height="12" />
- 母国語と翻訳された言語が違えば、両方の言語名を追加します: echo icl_disp_language($l['native_name'], $l['translated_name']);
The icl_disp_language() 機能はWPMLにより作成されます。 この機能は (native_language_name, translated_language_name) という二つの議論が相違するかどうか調べます。 相違すれば両方リターンします。さもなければ一回だけリターンします。
また幾つかCSSを追加し、この言語リストにスタイルを追加しましょう。 このCSSは言語リストをフッターの中央に置き、少しフォーマットを加えます:
#footer_language_list{
margin-bottom: 25px;
text-align: center;
}
#footer_language_list ul{
list-style: none;
margin:0;
padding:0;
}
#footer_language_list ul li img{
margin-right:5px;
}
#footer_language_list ul li{
display:inline;
margin:0 5px 0 5px;
padding:0;
}
#footer_language_list ul li a, #footer_language_list ul li a:visited{
color: #fff;
text-decoration:underline;
}
#footer_language_list ul li a:hover, #footer_language_list ul li a:active{
color: #fff;
}
以下が言語スイッチャーです。
言語フッター
あなたのテーマに追加するためにはfooter.php ファイルにlanguages_list_footer 呼び出しを追加してください。
*注: この水平の言語スイッチャーは 容易に垂直の言語スイッチャーに変更できます。CSSから表示:インライン 命令文を取り除くだけです。