transformerのススメ
本当の方法であれば、propertiesファイルをJavaScriptに変更してくれるらしい。
その方法として、1つの言語ファイル(***.properties)をVerlocityテンプレートの中で使えるようにしたり、JavaScriptで使えたり、soyテンプレートで使えるようにしたりできる。
この2つのドキュメントはかぶってるんだけど、この辺りを見るとそんな感じである。
Web Resource Transformer Module - Atlassian Developers
Web Resource Transformer Plugin Module - Atlassian Developers
このtransform機能は発展するらしく、
Stateless web-resource transforms and conditions - Atlassian Developers
とかなるらしい。JIRA7とかConfluence6で。
ということで、これをAJS.I18nで使おうと。
AUI Documentation
というドキュメントを読んでみたりした。
使えねー。^^
ところが、これが全く動かない。どう見ても動かない。調べると、同じことやってる人がいた。
AJS.I18n.getText issue - Atlassian Answers
で、ウルリッヒさんが「それ動かないし、Atlassianのドキュメントも変だよね」ってことでJavaScriptのinitに
AJS.I18n.get('com.example.confluence.plugin.fooPlugin');
ってやってRESTで後付するしかないみたいだよって。。。。
んーあ。。。
ロードタイミングによっては日本語使えないじゃないか・・・・。と思ったら
AJS.I18n.get(pluginKey, successCallback, errorCallback)
なので、コールバック使ってねってことか。。。うーん。。。。Atlassianさんなんとかしてくれ。
2015.06.22 追記 ・・・AJS.I18nって・・・そういうことだったのか。
AUIのAJS.I18n.getText()が新しくなってたので読んでみたのだけど、やっぱりわからない。。。なんで新しくJavaでClassを作るんだ?
AJS.i18n | AUI Documentation
で、もう一度このページを読んでみた。。。。
How to use AJS.I18n? - Atlassian Answers
ら。、、。。
AJS.I18n.getText() requires pre-processing on the server side. It does not do any magic on the client side :)
あれ???
単にJavaScriptを吐き出す際に、プリプロセッシングしてるだけ・・・・だと・・・・・?
atlassian-plugin.xmlでtransformationを入れたjsをConfluenceが吐いたJavaScriptのコード見てみた。。。
if (!confirm(AJS.I18n.getText("hogehoge.i18n.key")))
って書いたところが、
if (!confirm("日本語の内容"))
になってる!!!
つまり、web-resourceモジュールで
<transformation extension="js"> <transformer key="jsI18n" /> </transformation>
を入れておくと、JavaScriptを吐き出す際にAJS.I18n.getTextの文字列をスキャンして変換を掛けてくれるようなのだ。。。
こんな単純な仕組みだったなんて。。。
なんということだ。。。