カスタムフィールドで多言語対応するためのプラグイン。
- 言語はカスタムタクソノミー(
lang
)で管理する(I18N_CONDUCTOR_LANGUAGE_TAXONOMY
で変更可能) - 各投稿/固定ページに複数の言語を紐づけられるようにする
- 各投稿/固定ページに対して言語の選択は必須とする
- 多言語のためのヘルパー等実装部分は、プラグインにまとめる
- サイト内全ての投稿/ページに言語情報が付与される
- 言語ディレクトリごとに定数
WPLANG
で言語情報を定義- 日本語の場合:
/index.php
でWPLANG
にja
を定義(/
から始まるURL構造となり、ドメインルートは日本語サイトとなる) - 英語の場合:
/en/index.php
でWPLANG
にen
を定義(/en
から始まるURL構造となる)
- 日本語の場合:
- 各ページの言語情報は、
init
のフィルターフック処理内でWPLANG
から言語オブジェクトを取得してglobal変数で保持する
- 言語ディレクトリごとに定数
- 言語ごとにテンプレートファイルを分けず、テンプレートファイル内のテキストはWPに登録されているデータと翻訳ファイルで実装する
- 言語ごとの分岐が必要な場合は、
get_locale()
関数を用いる
- 言語ごとの分岐が必要な場合は、
投稿や固定ページのカスタムフィールドは、ACFを用いて各言語分用意する。
カスタムフィールドのスラッグ(URLを表す半角英数の文字列)には、プレフィックスとして各言語のスラッグを用いる。
ja_xxxx
en_xxxx
そのページの言語情報と項目のkeyから値を取得し、出力する
the_title()
、the_content()
実行時に、そのページの言語のタイトル/本文を出力する- フィルターフックを用いて実装
- プレフィックスを除いたカスタムフィールドのkeyから、そのページの言語のカスタムフィールドを取得する
- get_i18n_field(): 言語情報とカスタムフィールドのkeyから ACFの
get_field()
を実行
- get_i18n_field(): 言語情報とカスタムフィールドのkeyから ACFの
-
URLの例
- 日本語ページ:
/{投稿orページのスラッグ}
- 英語ページ:
/en/{投稿orページのスラッグ}
- 日本語ページ:
-
実装例
- WPデフォルトの
index.php
を、下記ディレクトリに配置するDOCROOT/
DOCROOT/en/
/{言語スラッグ}/index.php
で、$_SERVER['REQUEST_URI']
を強制的に書き換える
- WPデフォルトの
-
日本語版と英語版でURLは違うが、同じ処理を行う
- 例:
/about
と/en/about
が同じテンプレートファイルを見に行く
- 例:
- 言語切替ボタンに表示する言語は、言語のカスタムフィールドで決定する。
- 中身のコンテンツも多言語展開している(=そのページの言語タクソノミー情報を参照する)ものについては、当該ページに遷移する
- 例:
/about
→/en/about
- 例:
- 翻訳ファイル(poファイル)を用意し、テンプレートでの翻訳表示で用いる
__($str, '{theme-name}')
,_e($str, {theme-name})
は、引数を省略して実行できるようにヘルパー___($str)
、__e($str)
が使える
各言語のスラッグは、ISO 639の言語コードの2文字コードに準拠して下記のとおりとする。
例
言語 | スラッグ |
---|---|
日本語 | ja |
英語 | en |
__(key, '{local_key}')
のエイリアス
_e(key, '{local_key}')
のエイリアス
_x(key, '{local_key}')
のエイリアス
ACFのヘルパー関数get_field()
に、i18n対応を施したもの
echo get_i18n_field()
のエイリアス
ACFのヘルパー関数get_sub_field()
に、i18n対応を施したもの。
echo get_i18n_field()
のエイリアス
ACFのヘルパー関数have_rows()
に、i18n対応を施したもの。
ACFのヘルパー関数the_row()
に、i18n対応を施したもの。
全体で定義される定数
Default: lang
Default: false
true
にすると、遷移先のPostが当該言語に対応していなかった場合、404エラーを吐く
I18N_CONDUCTOR_USE_NOTFOUND
がfalse
の時に、遷移先のPostが当該言語に対応していなかった場合のリダイレクト先を設定する