Skip to content

cinra/i18n-conductor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 

Repository files navigation

i18n Conductor

カスタムフィールドで多言語対応するためのプラグイン。

  • 言語はカスタムタクソノミー(lang)で管理する(I18N_CONDUCTOR_LANGUAGE_TAXONOMYで変更可能)
  • 各投稿/固定ページに複数の言語を紐づけられるようにする
    • 各投稿/固定ページに対して言語の選択は必須とする
  • 多言語のためのヘルパー等実装部分は、プラグインにまとめる

出力項目

投稿/ページの言語情報

  • サイト内全ての投稿/ページに言語情報が付与される
    • 言語ディレクトリごとに定数 WPLANGで言語情報を定義
      • 日本語の場合: /index.phpWPLANGjaを定義(/から始まるURL構造となり、ドメインルートは日本語サイトとなる)
      • 英語の場合: /en/index.phpWPLANGenを定義(/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()を実行

URL・ファイル構造

  • URLの例

    • 日本語ページ: /{投稿orページのスラッグ}
    • 英語ページ: /en/{投稿orページのスラッグ}
  • 実装例

    • WPデフォルトのindex.phpを、下記ディレクトリに配置する
      • DOCROOT/
      • DOCROOT/en/
    • /{言語スラッグ}/index.phpで、$_SERVER['REQUEST_URI']を強制的に書き換える
  • 日本語版と英語版でURLは違うが、同じ処理を行う

    • 例:/about/en/aboutが同じテンプレートファイルを見に行く

リダイレクト処理

言語切替ボタンでの遷移

  • 言語切替ボタンに表示する言語は、言語のカスタムフィールドで決定する。
  • 中身のコンテンツも多言語展開している(=そのページの言語タクソノミー情報を参照する)ものについては、当該ページに遷移する
    • 例:/about/en/about

翻訳ファイルの実装

  • 翻訳ファイル(poファイル)を用意し、テンプレートでの翻訳表示で用いる __($str, '{theme-name}'), _e($str, {theme-name}) は、引数を省略して実行できるようにヘルパー___($str)__e($str)が使える

2. 構造

言語一覧

各言語のスラッグは、ISO 639の言語コードの2文字コードに準拠して下記のとおりとする。

言語 スラッグ
日本語 ja
英語 en

3. 実装内容

ヘルパー/関数

ヘルパー

___()

__(key, '{local_key}')のエイリアス

__e()

_e(key, '{local_key}')のエイリアス

__x()

_x(key, '{local_key}')のエイリアス

ACF用ヘルパー

get_i18n_field()

ACFのヘルパー関数get_field()に、i18n対応を施したもの

the_i18n_field()

echo get_i18n_field()のエイリアス

get_i18n_sub_field()

ACFのヘルパー関数get_sub_field()に、i18n対応を施したもの。

the_i18n_sub_field()

echo get_i18n_field()のエイリアス

have_i18n_rows()

ACFのヘルパー関数have_rows()に、i18n対応を施したもの。

the_i18n_row()

ACFのヘルパー関数the_row()に、i18n対応を施したもの。

定数

全体で定義される定数

I18N_CONDUCTOR_LANGUAGE_DIRECTORY

I18N_CONDUCTOR_LANGUAGE_TAXONOMY

Default: lang

I18N_CONDUCTOR_DEFAULT_LANG

I18N_CONDUCTOR_DOMAIN

I18N_CONDUCTOR_USE_NOTFOUND

Default: false

trueにすると、遷移先のPostが当該言語に対応していなかった場合、404エラーを吐く

I18N_CONDUCTOR_NOTFOUND_REDIRECT_SLUG

I18N_CONDUCTOR_USE_NOTFOUNDfalseの時に、遷移先のPostが当該言語に対応していなかった場合のリダイレクト先を設定する

Releases

No releases published

Packages

No packages published

Languages