• POファイルをJSONファイルへ変換

    概要

    Convert PO file to JSON file

    WordPressで使用している翻訳ファイル・POファイルをJSONファイルへ変換する方法を紹介します。内容はWindows環境ですが、他のOSでも可能です。

    ここではWordPressプラグイン「Search Regex」を使って説明します。

    Node.js、npm、po2json等は一切使いません。PC環境に数Gバイトものファイルのインストールは不要です。
    当ページの変換方法後は、「Node.js、npm、po2jsonの環境」を全てアンインストールしました。(不要!

     

    Search Regex プラグイン

    このWordPressプラグインは以下のファイル構成になっています。

    今回、search-regex-ja.poを使って、search-regex-ja.jsonファイルを作り直しします。

    Source file
    \WORDPRESS1\WP-CONTENT\PLUGINS\SEARCH-REGEX
    │  license.txt
    │  README.md
    │  readme.txt
    │  search-regex-admin.php
    │  search-regex-capabilities.php
    │  search-regex-cli.php
    │  search-regex-settings.php
    │  search-regex-strings.php
    │  search-regex-version.php
    │  search-regex.css
    │  search-regex.js
    │  search-regex.php
    │
    ├─api
    │      api-base.php
    │      api-plugin.php
    │      api-preset.php
    │      api-replace.php
    │      api-search.php
    │      api-settings.php
    │      api-source.php
    │      api.php
    │
    ├─images
    │      donate.gif
    │      GitHub-Mark-64px.png
    │
    ├─locale
    │  │  search-regex-it_IT.mo
    │  │  search-regex-it_IT.po
    │  │  search-regex-ja.mo
    │  │  search-regex-ja.po <-★
    │  │  search-regex-nl_BE.mo
    │  │  search-regex-nl_BE.po
    │  │  search-regex-nl_NL.mo
    │  │  search-regex-nl_NL.po
    │  │  search-regex.pot
    │  │
    │  └─json
    │          search-regex-it_IT.json
    │          search-regex-ja.json <-★
    │          search-regex-nl_BE.json
    │          search-regex-nl_NL.json
    │
    ├─models
    │      match-column.php
    │      match-context.php
    │      match.php
    │      preset.php
    │      replace.php
    │      result.php
    │      search-flags.php
    │      search.php
    │      source-flags.php
    │      source-manager.php
    │      source.php
    │      totals.php
    │
    └─source
        ├─core
        │      comment-meta.php
        │      comment.php
        │      meta.php
        │      options.php
        │      post-meta.php
        │      post.php
        │      user-meta.php
        │      user.php
        │
        └─plugin
                redirection.php
    

     

    手順1:POファイルをPoeditで修正

    Poedit

    POファイルの修正が必要な場合は無料版のPoeditで修正します。使い方はネット上に多数有るのでココでは省略します。修正が不要な場合は、次へ。

     

    手順2:Webサイト上でPOファイルをJSONファイルへ変換

    1.ココをクリックして、以下のWebサイト「Convert Gettext PO files」を開きます。

    Convert Gettext PO files

    2.「Choose source file:」の「ファイルを選択」をクリックして、POファイルを選択します。

    Convert Gettext PO files

    ※「Source language:」と「Translation language:」は変更不要です。未入力でも結構です。

    3.「To:」の「JSON」->「Angular Gettext」を選択します。

    Convert Gettext PO files

    4.最後に「Convert」をクリックします。

    Convert Gettext PO files

    5.数秒するとサイト中央に以下の画面が表示されます。「Download」をクリックします。

    Convert Gettext PO files

    6.ダウンロードが完了したら、上記のWebサイトは閉じます。

    7.ダウンロードしたJSONファイルをテキストエディタで開きます。以下の文字列の検索をします。

    • “one”:
    • “other”:
    例:JSONの変換ミス

    上記の文字列がある場合は、変換ミスが出ています。原因は不明ですが、何らかの操作ミスと思われます。一旦、Webサイト「Convert Gettext PO files」を開き直して、最初から操作し作り直して下さい。

     

    手順3:JSONファイルのフォーマット変換

    Webサイトで変換したJSONファイルではWordPressのプラグイン「Search Regex」で認識はしません。まだフォーマットが違うからです。

    以下がWebサイトで変換した後の新JSONファイルです。

    次がSearch Regex プラグインで既に使っている旧JSONファイルです。

    日本語の翻訳部分を [ ] で囲む必要が有ることが分かります。

    Source file
    {
        "English1": "日本語1",
        "English2": "日本語2"
    }
    


    上記を以下の様に変更します。

    Source file
    {"English1":["日本語1"],"English2":["日本語2"]}
    


    1つ1つの手作業でも変更できますが、かなり大変です。ミスも出ます。今回は次の手順で一括変更をしました。

    1.フリーのMery テキストエディタを用意します。無い方はコチラからZIP版をダウンロードします。最新版を使いましょう。

    Mery テキストエディタ(2020/7/21時点)

    ※NotePad++でも良いですが、置換とマクロの扱いはMeryの方が親切です。

    2.フォーマットを変換するマクロを用意します。以下からダウンロードできるので、そのZIPファイルから「json-convert-20200721.txt」ファイルを取り出します。

    ダウンロード  JSON Mery用の変換マクロ(R1)  (402 バイト, 作成 2020年7月21日)

    Source file
    /* JSONファイルをWordPress用に変換するマクロ */
    /* JSON(Angular-Gettext) */
    document.selection.Replace("\",\\n", "\"],\\n", meFindNext | meFindReplaceRegExp | meReplaceAll);
    document.selection.Replace("\": \"", "\":[\"", meFindNext | meReplaceAll);
    document.selection.Replace("\\n", "", meFindNext | meFindReplaceRegExp | meReplaceAll);
    document.selection.Replace("\"],    \"", "\"],\"", meFindNext | meReplaceAll);
    document.selection.Replace("{    \"", "{\"", meFindNext | meReplaceAll);
    document.selection.EndOfDocument(false);
    document.selection.CharLeft(true, 1);
    document.selection.CharLeft(true, 1);
    document.selection.Replace("\"}", "\"]}", meFindNext);
    

    3.Meryを起動して、「json-convert-20200721.txt」ファイルをマクロとして取り込みます。[マクロ(M)] -> [選択(L)]を選択します。

    4.「json-convert-20200721.txt」ファイルを開きます。これでマクロが有効になります。

    5.次にMeryテキストエディタでダウンロードした新JSONファイルを開きます。

    6.Meryテキストエディタのマクロを実行します。[マクロ(M)] -> [実行(R)・・・・] を選択します。

    7.一瞬で終了します。変更された新JSONファイルを上書き保存します。

     

    手順4:JSONファイルをアップロード

    FTPを使います。プラグイン「Search Regex」のjsonフォルダの旧JSONファイルを一旦バックアップします。その後で新JSONファイルを上書きコピーします。

    以上で完了です。

     

    注意:Search Regexプラグインの設定画面が全て英語表示になっている場合はJSONファイルの変換が失敗しています。バックアップファイルの旧JSONファイルを一旦戻し、最初から作り直しします。

     

    備考

    • PO -> JSON変換サイト(英語)は1つだけで、他に見つけることが出来ませんでした。
    • JSONファイルのフォーマット変換を扱うWebサイトは多数有りますが、今回の変換に最適なサイトを見つけることは出来ませんでした。
    • po2json(+npm)環境は不要なソフトが多数インストールされ、しかも関連ソフトのインストールも難しいです。不可解なエラーも多発し、凡人には扱えません。
    • POファイルを一発で目的のJSONファイルに変換するソフトを作るのは難しくはないです。しかし、現時点で変換が必要と思われるファイルはWordPress プラグイン「Search Regex」のみです。数が増えたら、検討します。