2014年12月23日

[WP] テンプレートをいじらずに、qTranslateから後継プラグインに切り替える方法

WordPressの他言語化プラグインと言えば長らく「qTranslate」が定番でしたが、更新が止まってしまっていて使えない状態です。

この事態を受けて、いろんな人が「qTranslate」の亜種・クローン(「qTranslate」からのFork)をプラグインとして公開しています。

qTranslate Plus
zTranslate
など。

私が見た限りでは、
「qTranslate Plus」は本当にqTranslateとおんなじです。
「zTranslate」は、投稿画面がボタン切り替え式になっていて、私はこのほうが良い気がしました(前向きに開発していく気概が感じられてディスコンになりにくそうに思ったというのもあります)。


いずれのクローン(fork)も「qTranslateと完全に互換性があります」的なことを謳っています。
実際プラグインのソースコードを見ると、本当にそっくりです。

けれどもここで、すでにqTranslateを導入済みのWordPressサイトにおいて、
(1)「qTranslate」を無効にして
(2)かわりに「zTranslate」を有効にする
という手順だけで期待している通り動くか?というと、そうはいかない場合があります。

問題になるのは、テンプレートファイルに「qtrans_generateLanguageSelectCode」などのコードを書いている場合です。
こういったメソッド(関数)は「qTranslate」プラグインの(名前空間の)メソッドですから、「zTranslate」には同じ名前では存在していません。

「zTranslate」の場合は「ztrans_generateLanguageSelectCode」という名前、
「qTranslate Plus」の場合は「ppqtrans_generateLanguageSelectCode」という名前で、
それぞれ定義されています。
関数の中身は「qTranslate」のものとそっくり同じで、名前だけが違います。


よって、テンプレートファイルに「qtrans_generateLanguageSelectCode」と書いてある箇所は、新しくインストールしたクローンプラグインに合わせて「ztrans_generateLanguageSelectCode」などと書き換えてやらないといけません。


さらに言うと、テンプレートファイルを直接修正するのではなく、
使用中のテーマのfunctions.phpに下記のようなコードを書けば便利です。

従来のqTranslateの関数を呼び出していたコードで、クローン系のスクリプトにバイパス(スルー)してやることが出来ます。

// qTranslateのクローン(Fork)をなるべく単一コードで動かしたい
if (!function_exists('qtrans_generateLanguageSelectCode')) {
function qtrans_generateLanguageSelectCode($style='',$id='') {
if (function_exists('ppqtrans_generateLanguageSelectCode')) {
ppqtrans_generateLanguageSelectCode($style,$id);
} elseif (function_exists('ztrans_generateLanguageSelectCode')) {
ztrans_generateLanguageSelectCode($style,$id);
} else {
echo 'NotFoundAnyTrans.';
}
}
}
if (!function_exists('qtrans_getLanguage')) {
function qtrans_getLanguage() {
if (function_exists('ppqtrans_getLanguage')) {
return ppqtrans_getLanguage();
} elseif (function_exists('ztrans_getLanguage')) {
return ztrans_getLanguage();
} else {
return 'NotFoundAnyTrans.';
}
}
}
if (!function_exists('qtrans_use')) {
function qtrans_use($lang, $text, $show_available=false) {
if (function_exists('ppqtrans_use')) {
return ppqtrans_use($lang, $text, $show_available);
} elseif (function_exists('ztrans_use')) {
return ztrans_use($lang, $text, $show_available);
} else {
return 'NotFoundAnyTrans.';
}
}
}

私の場合は、このコードをそのまま自作プラグインとしてしまって、WordPressにインストールしています。
「qTranslate Clone Support」とか言う名前をつけて、WordPressサイトを構築するたびに毎回プラグインフォルダにつっこんでおけば、多言語サイトを作る時に迷わなくて済みますね!

(実際には、これ以外のよく使う便利なコードも合わせて、弊社謹製の「Koekatamarin Tools」というプラグインを自社専用に運用したりしています。)


◆ 2019/05/31 追記
「qTranslate Plus」は現在すでに開発・公開が停止されています。
「zTranslate」は2014年12月から「qTranslate-X」という名前に変わりましたが、現在更新が止まっています(まだダウンロードはできますし、PHP7系でも問題なく動作し、大きな脆弱性は見つかっていないようです)。

このエントリーをはてなブックマークに追加
posted by taichistereo at 17:05 | Comment(0) | WordPress

2014年12月02日

Evernoteが同期できない場合(OSStatus error -9800)解決策3つ

Mac版Evernoteで10MB以上の大きなファイルを添付して同期しようとした際に、同期エラーが起きることがあります。

Evernoteの添付ファイルの上限は、
  • 無料ユーザー 25MB
  • プレミアムユーザー 100MB
となっています。
Evernote Knowledge Base | Evernote

私はプレミアムユーザーに登録していて、今回添付しようとしたのは「大きい」と言っても17MBのPDFファイルです。仮に無料ユーザーだったとしても、ファイルサイズ的には問題ないはずです。
ではなぜエラーが起きているのでしょう?


エラー画面の詳しい説明を見てみると
操作を完了できませんでした。(OSStatus エラー -9800)
と出ています。

evernote9800.jpg

「OSStatus error」というのはMac OS自体が吐くエラーなのですが、ターミナルでmacerrorコマンドを使って調べてみても
macerror.jpg
こんな感じで、要領を得ません。

結論から言うと、これはどうも新バージョンのEvernote.appが原因のようで、バージョン5.5以前のものをインストールし直せば問題を回避できるようです。
これがまず解決策の1つ目です。

とはいえ、全ノートの同期なんかをやり直している時間はないし、そもそも古いバージョンのインストーラーも残っているのだろうか...?という場合は、次の方法があります。


1. まず、同期エラーをキレイにしておく
同期に失敗したノートを削除します。
ゴミ箱にも残しておかないように、ゴミ箱に移動して、完全に消去します。
これでいったん同期のエラー状態は無くなり、いつもどおり同期できる状態になります。

evernote9800_2.jpg
(同期ボタンに赤いマークが残っているとまだエラー状態)

ついでに、ゴミ箱にある他のノートも、エクスポートしてから消してしまうといいでしょう。
もしかなりの数のノートがゴミ箱にあったら、それを消すとEvernoteのパフォーマンスが上がります。
(私のEvernoteにはノートが7000ほどあるので、数ヶ月おきに整理するようにしています)

実はここまでで、同期の問題が解決する場合もあるようです。
改めてもう一度先ほどエラーが起きたファイルを添付してみて、同期させてみましょう。
ここまでが解決策の2つ目です。
(私の場合はまだダメでした)

これでもダメなら、もう一度ノートを消去しておいてから、次の方法を試します。


2. メールからEvernoteにファイルを送る
デスクトップ版のEvernoteに起因するエラーなので、Evernoteメールアドレスにメールを送る方法でノートを作成すれば上手くいくはずです。
(ファイルをまずEvernoteクラウドにアップロードしておいて、デスクトップアプリにダウンロードする)

自分の「アカウント情報」を見れば、メールアドレスが表示されています。
このメールアドレス宛にファイルを添付して送信すれば、Evernoteにノートが作成されます。写真でもPDFでも何でも。

evernotemail.jpg

とはいえ、メールにファイル添付するときは、これまた添付ファイルの容量制限というものがありますよね。
5MBまでとか、3MBとか。プロバイダー等によって異なります。
エラーになってMailer Daemonからメールが帰ってくるパターンです。

ここで便利なのがGoogleのGmailです。
Gmailの添付ファイルの容量制限は、25MBまで。メールにしてはかなり大きいです。
添付ファイルを追加する - Gmail ヘルプ

オンラインのGmailサイトにアクセスして、メールを作成します。
宛先はさきほどのEvernoteメールアドレス、件名は適当に、ファイルを添付するのを忘れずに。

送信完了からしばらくして、Evernoteを同期すると、メールで送ったファイルがEvernoteクラウドからダウンロードされます。
以上が最後の、解決方法3つ目です。


早くEvernote側がデスクトップアプリを修正してくれればいいんですけどね...

参考)
Could not sync note (OSStatus error -9800 - Evernote - Evernote User Forum

このエントリーをはてなブックマークに追加
posted by taichistereo at 04:33 | Comment(0) | アプリ・ツール
Blog Widget by LinkWithin