Ja:多言語サイトの制作
From MODx Wiki
Main > Category:Ja:HOWTO > 多言語サイトの制作
Contents |
多言語サイトはあなたのサイトのユーザを拡大する素晴らしい方法です。どのCMSもそれぞれに多言語ページを扱っています。MODxにはそのような機能がありませんので、ここでは、あなたのMODxサイトを多言語サイトにする方法を紹介します。
アイコンのダウンロード
これは任意の手順です。しかし、この手順を飛ばす場合には、後述の"Languages"スニペット中の変数 $image を修正する必要があります。
- 2文字の国コード(JP等)に対応する名前のアイコンセットをダウンロードしてください。
- 詳しくは、このチュートリアルの最後にあるリソースを参照。
スニペットの作成
Redirect
"Redirect"という名前でスニペットを新規作成し、次のコードをコピー&ペーストします。
<?php $url = $modx->makeUrl($id); ob_end_clean(); // this will end the output buffer and discard silently what ever was in it header('Location: '.$url); ?>
Languages
さらに、"Languages"というスニペットを次のコードで新規作成します。
<?php // get languages info $tv = $modx->getTemplateVar('languages', "", $modx->documentIdentifier); $languages = $tv['value']; if (!strlen($languages)) { return ""; } $langnames = array( "en" => "English", "de" => "Deutsch" ); $output = ""; // get entries in languages list $entries = explode(",", $languages); // loop through language entries for ($e = 0; $e < count($entries); $e++) { // seperate into lang code and target document id list($lang, $targetid) = explode("=", $entries[$e]); $image = '<img src="assets/images/'.$lang.'.gif" width="16" height="11" border="0" alt="'.$langnames[$lang].'" />'; if (strlen($output)) { $output .= ' '; } $output .= '<a href="'.$modx->makeUrl($targetid).'">'.$image.'</a>'; } return $output; ?>
Languagesスニペット中の言語名の配列($langnames)を編集し、あなたが対応したいと思う全ての言語を記述します。最初の2文字はISO country codesで記述し、この言語名は(旗の)アイコンファイル名と対応します(言語名・アイコンファイル名はどちらも同じにします)。その国の言語で国名を記述します。(例: "German" の代わりにドイツ語で "Deutsch" と記述)
テンプレート変数の作成
次に"languages"という名前でテンプレート変数を新規作成し、入力タイプを"text"にします。これを全てのテンプレートに関連付けます(「テンプレートへのアクセス」をチェック)。
Languagesスニペットを呼び出すためにテンプレートを編集します。(旗の)アイコンを表示したい場所にスニペットコールを記述します。ユーザはそのアイコンをクリックして言語を切り替えることになります。
ドキュメントツリーの設定
ISOの国コードに対応する名前で空のドキュメントを作成します。例として、ここでは英語やドイツ語サイトのために、"en"と"de"というドキュメントを作成します。
国コードのドキュメントの下にドキュメントを追加します。例として、ドキュメントを追加する度に、1つの言語に対して1つのドキュメントを複製します。ここでは次のようにしました。
start (1) en |-> Welcome (2) de |-> Willkommen (3)
"ルート"ドキュメントを設定するために、親ドキュメント(この例ではドキュメントIDが1の"start"になります)にRedirectスニペットのスニペットコールを記述します。
[[Redirect? &id=`2`]]
このページ("start")は、ウェルカムページの一つにリダイレクトすることになります。例では、デフォルトの言語は英語になります。 "&id=`2`"を 3 に変えれば、デフォルトの言語はドイツ語になります。
サイトのドキュメントそれぞれに、対応する別の言語のページを指定する必要があります。これには、テンプレート変数の"languages"を利用します。テンプレート変数の入力形式は次のようになります。
2文字のISO国コード=ドキュメントID,2文字のISO国コード=ドキュメントID...
いくつかの例をあげます:
de=3
このドキュメントのドイツ語版として、ID 3のドキュメントを指定しています。
en=2,pl=6,fr=7
このドキュメントの英語版としてID 2、ポーランド語版としてID 6、フランス語版としてID 7のドキュメントを指定しています。
最後に
Languagesスニペットは、ドキュメントのテンプレート変数を元に、異なる言語の同じページへリンクするために(旗の)アイコンを使います。
さらに言語を追加するために:
- 新しい言語で全てのサイトのドキュメントを複製します。
- assets/imagesに新しい(旗の)アイコンを追加します。
- Languagesスニペットの配列に新しい言語を追加します。
- 新しい言語のページを指定するために、既にあるドキュメントのテンプレート変数「languages」を編集します。
Wayfinderのメニューを使用するには次のようにコールします:
[!Wayfinder? &startId=`[[UltimateParent]]`!]
それぞれのページでは、各言語のルートからのメニューが表示されるようになります。
参考
- Make_Multi_Lingual_Site Make Multi Lingual Site(英語)
- De:Mehrsprachige Site Translation into German(ドイツ語)
リソース
- Original Forum Post
- Flag Icons from famfamfam.com
- ISO Country Codes
- Multi-lingual / localization snippet : the l10n snippet
- Plugin for Multilanguage support by Sottwell
- The language hack has landed! by Carsten
- My multi-content solution is ready to be tested... who wants to test? by Madmage
- Discussion : Have we reached something in multi-language contents?
- Discussion : Collecting all multi-language content requests and proposals
