両方を設定して可能にしなければなりません。この2つの配列がペアになって動作します。不可に戻せるようになりました。(この2つ両方を不可にしなければなりません).言語ID(shortcuts)[編集]サポートしたい言語それぞれに対して、上記で説明したように、多言語指向オブジェクトで使用される言語IDを定義しなければなりません。言語IDは自由に定義することができますが、IDに対応する言語と何らかの関係のあるように設定するのが賢明でしょう。いえ、Geeklogシステムの側からすれば、英語に対応する言語IDが'en'だろうと'peter'だろうと構いません。注意:2つの配列の言語IDはすべて同じ長さでなければなりません。言語IDはオブジェクトのIDの後ろに'_'(アンダーバー)に続けて付加されます。言語名のISO省略形(日本語なら'ja'、英語なら'en'、ドイツ語なら'de'など)を使うことが推奨されています。GeeklogはWebブラウザの設定からユーザが好んで使用する言語を判定しようとするので、'en-US'のように国名の接尾辞をつけてもつけなくても構いません。言語ファイル[編集]$_CONF['language_files']は、どの言語ファイルがどの言語に対応するかを定義します。Geeklogは(ユーザ設定の中で)ユーザが使用する言語の設定にも言語ファイル名を使用しています。他の言語ファイル、つまり、コンテンツの表示に使う予定のない言語ファイルはすべて削除することが推奨されています。複数の文字コードを使用する言語(たとえば、日本語とロシア語)を混在させるときには注意してください(文字化けします)。そのような用途では、すべてのの言語ファイルをUTF-8に切り替える必要があるでしょう。言語名[編集]$_CONF['languages']では、サポートされている言語の表示用テキストを定義します。これらのテキストは、サポートされている言語の間でユーザが(ドロップダウンリストを使って)切り替えを行うときに使用されます。場合、言語の本来の名前、たとえば、ドイツ語なら'German'ではなく'Deutsch'、日本語なら'Japanese'ではなく'日本語'を使う必要があるでしょうが、これはただの慣例でしかありません。言語の検出[編集]ユーザが多言語切り替えサイトを訪問すると、登録ユーザであれば、Geeklogはまずユーザ設定をチェックし、次に言語データを格納しているクッキーを探します。見つからなければ、Webブラウザの設定('Accept-Language'ヘッダ)から言語を取得しようとします(ただし、うまくいくのは、上述のように言語名にISOの省略名を使うようにしている場合だけです)。それも失敗したら、サイトのデフォルト言語、つまり、$_CONF['language']でコンテンツは表示されます。多言語サポート[編集]プラグインおよび他のアドオン開発者は、多言語サポートを行うためにすべきことはあまりありません。主な点としては、プラグインの管理下にあるオブジェクトには(Geeklogの記事IDのような)編集可能で数値ではないIDを持たせなければならないでしょう。すれば、そのIDに言語IDを付加することができるようになるからです。プラグインの管理下にあるオブジェクトのリストを持っており、現在の言語でオブジェクトを表示したいだけであれば、SQLリクエストを構築する際にCOM_getLangSQL()関数を使えばよいでしょう。この関数は現在の言語で記述されているオブジェクトを返すためのSQLリクエストの一部を提供してくれます(詳しくは、lib-common.php中にある該当関数の記述を参照してください)。多言語サポートが無効の場合、COM_getLangSQL()関数は空文字列を返すので、コーディングの際に自分で確認する必要はありません。場合、それだけ知っていれば、プラグインで多言語サポートが可能になるはずです。場合によっては、以下に紹介する関数が役に立つかもしれません。COM_getLanguageId()は、ユーザが現在使っている言語の言語IDを返します。COM_getLanguage()は、ユーザが現在使っている言語の完全な名前(つまり、Geeklogの言語ファイル名から拡張子の.phpを除いたもの)を返します。記事と静的ページを切り替える[編集]英語・日本語だけでなく、多種多様な言語であらかじめ記事を用意しておき、言語を切り替えると、記事の言語とGeeklogの言語設定が同時に切り替わります。記事は、記事のIDで言語判別させます。それぞれの記事は、あらかじめ作成した言語ID付きの話題IDの話題に属させる必要があります。次のようにIDを設定して記事を作成します。story_en静的ページも同様に、話題IDを追加して作成します。1.5.1以後でサポートされます。その設定方法は,記事や静的ページとは少し異なるので注意が必要です。日本語と英語の多言語サイトを作る場合には,以下のように,言語idを追加しないブロックもかならず作成してください。about_enabout_jaabout最初の2つのブロックはそれぞれ多言語切り替えの際に表示するブロックをセットしますが,有効にチェックをいれないで,無効にしておきます。最後のブロックは,有効にしておきます。日本語に切り替わったらabout_jaのタイトルとコンテンツが表示されることになります。aboutは、何か適当なものをコンテンツに入力して保存しておいてください。多言語に対応したブロックが優先して表示されます。カスタムメニュープラグインもおなじルールです。ロケール設定を切り替える[編集]ふつう、言語を切り替えると、日付・時刻などのロケールの設定も変えなければなりません。そのためには、サイトのに記述されている言語ごとに代わりとなる設定を定義することできます。%Z';ですが、とりわけ問題になるのが、am/pmを使う時刻のフォーマットが含まれていることです。サイトを英語と日本語で切り替えるとしたら、日本語ユーザは次のように24時間制が使われていると期待するでしょう。%Z';日本の言語IDとしてISOの省略形である'ja'を使っていれば、次の設定をサイトのsiteconfig.phpに記入しておけばよいのです。%H:%M:%S';この2行を使って、Geeklogは日本語でコンテンツを表示するときには$_CONF['date_ja']のフォーマットを使い、その他の言語で表示するときには$_CONF['date]のフォーマットを使用します。実際には、上記のことがきちんと機能するには、$_CONF['locale']と$_CONF['locale_ja']もそれに合わせて設定しなければなりません。日付のフォーマット(ローカライズされた曜日と月の名前)を行う際に、正しいロケールが設定されている必要があるからです。'ja_JP';上述したように、以下のロケールの設定はすべて切り替えることができます。多言語用の追加は、siteconfig.phpに追加すると良いでしょう。$_CONF['locale']$_CONF['date']$_CONF['daytime']$_CONF['shortdate']$_CONF['dateonly']$_CONF['timeonly']$_CONF['week_start']$_CONF['hour_mode']$_CONF['thousand_separator']$_CONF['decimal_separator']切り替えたい要素を追加するhack[編集]METAタグを言語に応じて切り替える[編集]メタタグをロケールに応じて切り替えます。lib-common.phpに追加[編集]ロケールで切り替えたい要素はlib-common.phpに追加することでいくらでも設定できます。'Description';多言語TOPページを話題TOPにする[編集]Googleは、多言語のそれぞれのTOPページのURLを変えることを強く推奨しています。home_en等を作成し、それを多言語サイトのそれぞれのTOPページとします。phpblock_switch_language()[編集]ログインした人はいつでもユーザ設定で言語を切り替えられます。簡単にするには(そしてゲストユーザにも言語の切り替えを行わせるには)、サイトにPHPブロックを設置します。指定して利用できます。Geeklogには、利用可能なすべての言語を網羅するドロップダウンリスト(2言語しかない場合はもう一方の言語へ切り替えるためのリンク)を表示するphpblock_switch_language()関数を提供しています。この関数はheader.thtml(ヘッダのテンプレートファイル)から呼び出すこともできるので、サイトのグローバルメニューに追加することもできます。?>技術的には、切り替えた言語はクッキーに保存され、ログインユーザの場合、言語設定が更新されます。switchlang.php[編集]切り替えるためのアプリケーションとして、switchlang.phpが用意されています。Formによってプルダウンで切り替えるのではなく、サイトのトップに、それぞれの言語のトップページへのリンクを追加したい場合は、以下のリンクを記述してください。/switchlang.php/言語IDを実行して切り替えることができます。/switchlang.php/ja/switchlang.php/en/switchlang.php/deのように指定します。テンプレートファイルに切り替えメニューを追加する事例[編集]同じページを多言語へ切り替えて表示する[編集]以下の切り替えのswitchlang.phpは本体に同梱されています。正常に切り替わらない場合があること、同一コンテンツで切り替えるので、用意されていなければ、404エラーになるという欠点があります。href="{site_url}/switchlang.php/ko">韓国語</a></li></li>langselプラグインを活用して他の言語のTOPページへ移動するフォームボタン[編集]langselプラグインをあらかじめインストールして、以下のようにヘッダーのテンプレートheader.thtmlに記述してください。lib-custom.phpから呼んでください。AutotagsプラグインでcurrenturlをPHP関数として追加してください。=表示記事に対応する多言語での記事が存在する場合は、その多言語記事へのリンクを作成するカスタム関数は便利です。http://hiroron.com/downloads/index.php/227=言語IDのテーマ変数を追加する=言語IDを返すテーマ変数{switchlang}をすべてのテンプレートで利用可能にします。[[言語IDのテーマ変数を追加する]]=テンプレート内に、PHPで、多言語コンテンツを切り替えて表示する=フッタやヘッダテンプレートなどすべてのテンプレートでPHPを利用できます。言語IDを以下のように取得して、assistプラグインのstaticpage_content自動タグによって、以下の例では、トップページのみに、対応した言語のコンテンツ-content_XXを表示します。==上記の{switchlang}が利用できるハックが追加された場合は、以下の記述になります。2.1.3から、テーマ変数が用意されています。注とヒント[編集]ユーザにより使いやすくするには、編集時に言語IDをそのオブジェクトのIDから取り除いて見えなくしてしまうのもよいでしょう。その代わり言語切り替え用のドロップダウンメニューを提供するのです。オブジェクトを保存する時に、言語IDを自動的にIDに追加するとよいでしょう。日本語のモードで英語記事も作成したいというような場合にはかえって不自由を感じるかもしれません。多言語IDを取得するCOM関数です。これは大変便利な関数です。$story->EditElements('originalSid'));1.7.0以降は記事コピー機能が搭載されていますのでこれを利用してください。表示のライセンスで利用できます。