POファイルをJSONファイルへ変換
概要

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ファイルを作り直しします。
\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で修正

POファイルの修正が必要な場合は無料版のPoeditで修正します。使い方はネット上に多数有るのでココでは省略します。修正が不要な場合は、次へ。
手順2:Webサイト上でPOファイルをJSONファイルへ変換
1.ココをクリックして、以下のWebサイト「Convert Gettext PO files」を開きます。

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

※「Source language:」と「Translation language:」は変更不要です。未入力でも結構です。
3.「To:」の「JSON」->「Angular Gettext」を選択します。

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

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

6.ダウンロードが完了したら、上記のWebサイトは閉じます。
7.ダウンロードしたJSONファイルをテキストエディタで開きます。以下の文字列の検索をします。
- “one”:
- “other”:

上記の文字列がある場合は、変換ミスが出ています。原因は不明ですが、何らかの操作ミスと思われます。一旦、Webサイト「Convert Gettext PO files」を開き直して、最初から操作し作り直して下さい。
手順3:JSONファイルのフォーマット変換
Webサイトで変換したJSONファイルではWordPressのプラグイン「Search Regex」で認識はしません。まだフォーマットが違うからです。
以下がWebサイトで変換した後の新JSONファイルです。

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

日本語の翻訳部分を [ ] で囲む必要が有ることが分かります。
{ "English1": "日本語1", "English2": "日本語2" }
上記を以下の様に変更します。
{"English1":["日本語1"],"English2":["日本語2"]}
1つ1つの手作業でも変更できますが、かなり大変です。ミスも出ます。今回は次の手順で一括変更をしました。
1.フリーのMery テキストエディタを用意します。無い方はコチラからZIP版をダウンロードします。最新版を使いましょう。

※NotePad++でも良いですが、置換とマクロの扱いはMeryの方が親切です。
2.フォーマットを変換するマクロを用意します。以下からダウンロードできるので、そのZIPファイルから「json-convert-20200721.txt」ファイルを取り出します。
ダウンロード : JSON Mery用の変換マクロ(R1) (402 バイト, 作成 2020年7月21日)
/* 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」のみです。数が増えたら、検討します。