JSアプリの多言語対応アーキテクチャについて

JSアプリを多言語化するには、色々な悩みがあります。現場で開発している方のコメントが興味深いのでまとめました。
0
kyo_ago @kyo_ago

@teppeis 個人的には大規模化した時に「ソース内で使ってないのに入ってる文言(誰もどこに使われてるかわからない)」をどうするかとか気になってます

2014-11-18 23:21:47
Teppei Sato @teppeis

@kyo_ago それはgrepしたら良いのでうちではあまり問題になってないですね。

2014-11-18 23:23:23
kyo_ago @kyo_ago

@teppeis なるほど。現状サーバサイドとクライアントサイドとiOSとAndroid(新、旧)があって、grepするのもめんどくなってきてどうしようか悩んでます

2014-11-18 23:24:34
kyo_ago @kyo_ago

あと、grepできるようにすると翻訳用のキーを全体で一意にしないといけなくて辛い。 階層化して参照したい

2014-11-18 23:25:23
Teppei Sato @teppeis

@kyo_ago それは前述したとおり、1つの文言キーを1つの箇所だけで使えばそうはならないので。

2014-11-18 23:27:14
kyo_ago @kyo_ago

翻訳オブジェクトがグローバル変数なら、esprimaで追っかけられるか?

2014-11-18 23:27:16
kyo_ago @kyo_ago

@teppeis んー、なんかそもそも前提条件とか状況の認識がずれてる気がするのでどっかで直接話したほうがいい気がします

2014-11-18 23:28:43
kyo_ago @kyo_ago

JSのソースの中に直接[% l('hello_world') %]みたいなのを埋め込んで、デプロイ前にサポート言語ごとのjsを書き出して配布するってのはまずいのかな? (テンプレートとかもプリコンパイルして言語リソース埋め込む)

2014-11-18 23:31:27
kyo_ago @kyo_ago

現状言語リソースのキーはほぼ一意に把握できるから変換はある程度容易にできそうだし、グローバル変数名とかと合わせれば普通に元ソースをreplaceしてもいいような? リロードしないと言語設定切り替えられないけど

2014-11-18 23:33:06
kyo_ago @kyo_ago

テンプレートとソース内のグローバル変数への参照を置き換えれば今でも普通に動く気がするな。 複数箇所からの参照をまとめて保存できないから若干サイズ増えそうだけど、複数箇所から参照される奴って大抵短いし問題ないような?

2014-11-18 23:35:15
kyo_ago @kyo_ago

事前に使ってる翻訳キーが一覧でとれれば言語リソースから必要な物だけ埋められるし、使ってない言語リソースを特定できるか? テンプレートへの埋め込み文言とコード内で使用してる文言を分けてあれば、あとで「この文言なんだっけ」とか言うのが減らせるか)

2014-11-18 23:39:17
kyo_ago @kyo_ago

考えてたら結局「現状使ってる言語キーの一覧が取りたい」ってことなのかな。。。

2014-11-18 23:43:14
kyo_ago @kyo_ago

言語リソースを事前にJSへ直接埋め込む場合、コードの中では文字列リテラルの中だけを考えればいいのか?

2014-11-18 23:45:08
Tak Yanagida (柳田) @tyanagida

@kyo_ago 一連の話、興味深く見てます。一人で作って翻訳してるサイトでは、「JSには言語依存なものを入れない」というポリシーでやってみました。CSSの:after使ったり、非表示divに入れたりしてます。maps.ontarget.cc/dams/

2014-11-18 23:45:44
kyo_ago @kyo_ago

@tyanagida このへんに関してあまり正解が見えないのでなにかうまい方法がないかなーと思ってます

2014-11-18 23:46:53
kyo_ago @kyo_ago

@tyanagida このへんに関してあまり正解が見えないのでなにかうまい方法がないかなーと思ってます

2014-11-18 23:46:53
Tak Yanagida (柳田) @tyanagida

@kyo_ago 被参照がチェックできないという問題は解決しないけど、「ソフトウェアグローバリゼーションのこれから」というイベントでゲームの翻訳やってる人が「バージョン管理の対象は、ファイル単位ではなく、文言単位にすべき」と言ってました。

2014-11-18 23:48:22
kyo_ago @kyo_ago

@tyanagida なるほどー バージョン管理の問題もありますね(はてなの資料でも「gitにバイナリとして認識させてる」とありましたが。。。)

2014-11-18 23:50:28
kyo_ago @kyo_ago

@tyanagida なるほどー バージョン管理の問題もありますね(はてなの資料でも「gitにバイナリとして認識させてる」とありましたが。。。)

2014-11-18 23:50:28
kyo_ago @kyo_ago

そもそもブラウザのフロントエンドで文言問題解決しても各アプリ内の文言どうするか問題解決してない

2014-11-18 23:51:30
kyo_ago @kyo_ago

「アプリは事前ダウンロードするから言語情報全部入りで重くなっても大丈夫」ってことでブラウザのフロントエンドと別に考えていいんだろうか? このへん、アプリの実装してて辛くなったりしないのか? 誰が一番負担を負ってるんだ?

2014-11-18 23:53:10
kyo_ago @kyo_ago

「アプリとJSでサービス実装してる時の多言語化必勝パターン」早く

2014-11-18 23:55:13
kyo_ago @kyo_ago

明日、社内のアプリの人にも色々聞いてみるか。。。

2014-11-18 23:55:49
kyo_ago @kyo_ago

ブラウザのフロントエンドだけにかぎって言えば一旦サーバサイドに集めた文言設定を毎回配信してもらうのがいい気がするな。 サーバサイドから文言設定引き上げるのは非常に難しいし、アプリ起動のフロー内にサーバサイドの処理が絶対入ってくるから

2014-11-18 23:57:39