メインコンテンツに移動
ホーム

古松

メインナビゲーション

  • ホーム
  • ビデオ
  • ご連絡

パンくず

  • ホーム
  • WordPressの多言語翻訳1:POT,PO,MOファイルの理解と作成

WordPressの多言語翻訳1:POT,PO,MOファイルの理解と作成

WordPressのユーザーインターフェース言語翻訳はLocalization/Internationalizationと言います

  • Localizationはユーザーインターフェース言語翻訳以外にいろいろな意味があります
    • ローカル関連の日付表示
    • 通貨などの単位
  • Internationalizationは文字セットなどを管理しています
    • 読み順序(左から右、右から左)
    • 文言/書式など
  • Localizationの略: l10n
    • 英語の綴りの最初(l)から最後(n)までの間に10文字があったので、"l10n"に簡略
  • Intanationalizationの略:i18n
    • 英語の綴りの最初(i)から最後(n)までの間に18文字があったので、"i18n" に簡略

WordPressのユーザーインターフェース翻訳はGUNのgettext翻訳システムを採用しています

  • WordPressのユーザーインターフェース翻訳システムを開発していないので、GUNのgettext翻訳システムを採用しています
  • GUNのgettext翻訳システムは複数タイプのファイル(POT、PO、MO)があります
  • POT(Portable Object Template): テキストファイル。基本言語(英語)文言が入っていますが、翻訳は空白です
    • msgid: 基本言語の文言(英語)。例: msgid: "test message"
    • msgstr: 翻訳文言(空白)。例:msgstr: ""
  • PO(Potable Object):テキストファイル。一つ言語に一つのPOファイルが作成します
    • msgid: 基本言語の文言(英語)。例: msgid: "test message"
    • msgstr: 翻訳文言(日本語)。例:msgstr: "テストメッセージ"
  • MO(Machine Object):バイナリファイル。POファイルからコンパイルして生成されます
    GUNのgettext翻訳システム紹介

POTファイル:テキストエディタで作成、PO/MOファイルがPoeditで作成(例)

  • POTファイルが開発ソースファイルにあるユーザーインターフェースの文言の集約です
    • 翻訳はそれぞれの国の人に任せて、POTファイルと関係ない
    • POTファイルがテキストエディタで作成されます
  • POファイルの作成/編集/コンパイルがいろいろな方法があります(gettextがオーペンソースなので、いろいろなフリーツールがあります)
    • ここでは、一般的によく利用されているPoeditを紹介します
  • POファイルがPoeditよりPOTファイルを読み込んで、変換し、翻訳文言を入力ます
    • 文字セットの決定(どこの国の文言に翻訳か)
    • 文言の翻訳をします(例: msgid:"test message" => msgstr:"テストメッセージ")
  • MOファイルがPoeditより翻訳した内容(POファイル)をコンパイルして、バイナリフォーマットとして保存します
    • テキストエディタで編集などはできません
    • テキスト文言変更の場合にPOファイルの翻訳文言を変更して、再度コンパイルします
    • テキスト文言の追加/削除/元文言変更はPOTファイル⇒POファイルまで

POTファイルが必須ではない(POファイルだけでもよい)

  • POTファイルが英文字通りに、ほかの言語への翻訳テンプレート(翻訳内容はない)
  • テキストエディタでPOファイル作成してもよいです
    • いくつかの定義をファイルの前に置きます
      msgid ""
      msgstr ""
      "MIME-Version: 1.0\n"
      "Content-Type: text/plain; charset=ISO-8859-1\n"
      "Content-Transfer-Encoding: 8bit\n"
      "Language: ja\n"
    • UTF-8フォーマットでファイル保存
  • 作成したPOファイルをPoeditで開く、編集して、保存するとMOファイルも自動的に作成されます
  • 複数の言語に翻訳しなければ、POファイルだけで十分です
    • 複数の言語に翻訳する場合、POTファイルがテンプレートとして利用されます

WordPressの新規投稿タイプ2:ユーザーインターフェースの翻訳方法

やりたいこと:カスタム投稿タイプ(Custom Post Type)のUIを日本語化

  • 前回紹介したカスタム投稿タイプ、多言語翻訳用のPOT/PO/MOファイル
    • WordPressの新規投稿タイプ1:functions.phpファイルに定義する方法
    • WordPressの多言語翻訳1:POT,PO,MOファイルの理解と作成
  • 作成したカスタム投稿タイプのユーザーインターファイルを日本語化します
    カスタム投稿タイプのUIを日本語に翻訳

カスタム投稿タイプUIの日本語翻訳ファイル(PO/MO)を作成します

  • Poeditで日本語翻訳ファイル(PO)を作成します
    msgid ""
    msgstr ""
    "MIME-Version: 1.0\n"
    "Content-Type: text/plain; charset=UTF-8\n"
    "Content-Transfer-Encoding: 8bit\n"
    "Plural-Forms: nplurals=1; plural=0;\n"
    "X-Generator: Poedit 2.0.3\n"
    "Language: ja_JP\n"
    "Project-Id-Version: \n"
    "POT-Creation-Date: \n"
    "PO-Revision-Date: \n"
    "Last-Translator: \n"
    "Language-Team: \n"
    
    msgid "Products"
    msgstr "製品投稿"
    
    msgid "Product"
    msgstr "製品"
    
    msgid "Add New"
    msgstr "新規作成"
    
    msgid "Add New Product"
    msgstr "新規製品作成"
    
    msgid "Edit Product"
    msgstr "製品編集"
    
    msgid "New Product"
    msgstr "新規製品"
    
    msgid "All Products"
    msgstr "全製品"
    
    msgid "View Product"
    msgstr "製品表示"
    
    msgid "Search Products"
    msgstr "製品検"
    
    msgid "No products found"
    msgstr "製品を見つからない"
    
    msgid "No products found in the Trash"
    msgstr "ゴミ箱から製品を見つからない"
    
  • 上記POファイルをPoeditでコンパイルしてMOファイルに変換します

翻訳ファイルの配置は:{所属しているテーマフォルダ内} or {WPの言語フォルダ内}

  • 翻訳ファイルは所属しているテーマのフォルダ内に配置することができます
    • 今回の例では twentyseventeen-child (twentyseventeenの子テーマ)
    • 翻訳ファイルの命名規則: {locale}.po、{locale}.mo
      • localeは日本語の場合: ja.po、ja.mo となります
    • テーマフィールドに「languages」フォルダを作成、その下に配置します
      所属テーマのフォルダに翻訳ファイルの配置
  • WPの言語フォルダに配置することもできます
    • WPの言語フォルダ:wp-content/languages
    • 翻訳ファイルの命名規則: {domain}-{locale}.po、{domain}-{locale}.mo
      • 今回の例のテキストドメイン(text domain)名: product
      • 翻訳ファイル名:product-ja.po、product-ja.mo
    • 翻訳ファイル名を変更して、WPの言語フォルダに配置します
      翻訳ファイルWPの言語フォルダに配置

カスタム投稿タイプ登録する前に作成した翻訳ファイルをロードします

  • WPの言語フォルダに配置する場合、翻訳フォイルのロード記述する必要はありません(自動ロードとなります)
  • 所属しているテーマのフォルダに配置する場合、翻訳ファイルをロードする記述は必要となります
    • カスタム投稿タイプ登録(functions.php)する前にロードが必要です
      // 翻訳ファイルをロード
      load_theme_textdomain("product", get_stylesheet_directory() . '/languages');
      
      // カスタム投稿タイプ登録
      add_action( 'init', 'my_custom_post_product' );
      
    • 翻訳ファイルのディレクト取得関数:get_stylesheet_directory() なので、get_stylesheet_directory_url()ではありません(後者の場合、翻訳ファイルのロードはできません)。また、get_template_directory()関数の使用はできません(これは親テーマのディレクトリを取得する)
    • load_child_theme_textdomain()で翻訳ファイルのロードもできます

検索フォーム

カテゴリ別

  • laravel
  • drupal
  • javascript
  • windows
  • html
  • mysql
  • php
  • apache
  • css
  • SEO
  • video
  • wordpress
  • linux
  • python
  • Electron
  • Visual Studio Code

google ads