20140530 unity に於ける localization のおはなし
Post on 25-Jun-2015
1.808 Views
Preview:
DESCRIPTION
TRANSCRIPT
Unity に於ける Localization のおはなし
2014.05.30 (Fri) / Unity 勉強会 vol.21
株式会社キッズスター システムデベロプメントチーム リーダー
森 哲哉
こんばんは!
Good evening !
Guten Abend !
Bonsoir !
晚上好!
Bonan vesperon !
と、いうわけで
Localization のおはなしです。
自己紹介
$ whoami• “森 哲哉” と申します。
• a.k.a: もんりぃ / T: @monry / F: monry84
• 29歳 / ♂ / O型 / 天秤座 / 既婚
• 趣味は「お酒」と「合唱」です。
$ whoami• 大学を (自主的に) 卒業後、ベンチャーを転々。
• Web のフロントエンド、サーバサイドが得意。
• ようやく Unity 歴 1 年になりました。
• AWS とキャッキャウフフするのも好きです。
• 最近は社内インフラも やらされ… やってます。
$ jobs• “株式会社キッズスター” って会社で働いてます。
• 未就学児~小学生のお子さまをお持ちのファミリーをターゲットにした、知育/教育に関わるアプリ・サービスを展開しております。
• お陰様で EdTech な知育分野に於いてNo.1 規模で展開しております!(当社調べw)
$ ls -la apps/
森のえほん館 なりきり!! ごっこランド
パズル&テイルズおかしのくにを つくるのじゃ!!
なりきり!! アイスクリーム 屋さんごっこ
なりきり!! ママごっこ
お弁当をつくろう!
こえほん おかしの家を つくろう!
ハンバーガー やさんごっこ
飛行機を 組み立てよう!
i18n i18n
i18n i18n
前置き
環境• Unity: 4.3.4f1
• Platform: iOS, Android
• Development: Mac, Windows
• Dimension: (主に) 2D
• Language: C#
L10n? i18n? G11n?• スライドタイトルに Localization (L10n) って書いてあるけど…。
• 多少 Internationalization (i18n) に 絡んだ話もします。
• スライドタイトルを Globalization (G11n) にしとけば良かった…(́・ω・`)
対応可能範囲• 2014年05月現在、弊社が対応したコトのあるL10n はアメリカ英語のみとなります。
• 本スライドの内容だけでは、イギリス英語や 中国語の出し分け (簡体字/繁体字) などは難しいんじゃないかと思ってます。
• 方法あったらおせーてくださいw
言い訳• 本スライドで、ちょいちょい英語使ってます。
• セッションの内容に絡むから、ね。
• まぁ、要するに格好付けてるだけですが。ええ。
• が、 @monry は非常に英語が苦手ですっ!(キリッ
• 高校の時は常に 5 段階評価で 2 でした。(́;ω;`)
• 故に、文法おかしかったりするかもですが、 その辺はご愛敬ってコトで!!!
Localization の基本
What should I do?• テキストの L10n
• 画像・音声などのバイナリの L10n
• サーバサイドの L10n
• App Store, Google Play の L10n
未 L10n 環境• アプリの特性にも依存するが、基本的に 英語をデフォルトとしておくと良さそう。
• とは言え、英語翻訳すら出来ていない段階で 英語デフォは結構微妙。海外のストアに出してないなら、まだ良いが。
• 理想は、英語の L10n が完了した時点で デフォルト言語を変更出来るような仕組みを 予め作っておく。
時差• リテンション施策として、 PUSH 通知(APNs/GCM) が濫用されている昨今。
• デベロッパ視点では便利な機能なんだけど、 夜中に送ろうもんなら「通知がウザいです。☆1」ってな感じに置き土産付きでアンインストール されるのがオチです。
• ちゃんと時差を考慮した設計にしましょう。
リソースサイズ• バイナリファイルのサイズがネックになる。
• アプリ組み込み型でもダウンロード型でも。
• 個人的には全言語分のデータを突っ込むのはオヌヌメできない。
• 詳しくは後述。
開発/検証• 開発時や検証時に、言語切り替えを端末に依存させないような作りにするとベター
• 確認の度に端末の言語設定弄るのは強靱な精神力を必要とします。
• アプリの機能として言語切り替えがあるなら 問題ないけど。
開発/検証• KidsStar では Editor 実行時やDevelopment Build している場合にタイトル画面に OnGUI な言語切り替えボタンを出してます。
Localization の実装
端末の言語設定取得• 端末の設定言語を拾うには
UnityEngine.Application.systemLanguage を使う
• サポートしている言語はenum UnityEngine.SystemLanguage に定義されている
文字列等の L10n• 言語毎に翻訳テーブルを定義し、TextAsset か何かでアプリに埋め込む
• ダウンロード型にしても良いけど、 管理が大変なのでオススメできない。
• ポイントは翻訳テーブルの管理システム。
文字列等の L10n• KidsStar では…
• 言語/型毎に TextAsset を出力。
• English.string.txt, Japanese.float.txt 的な。
• key は別途 .asset ファイルで保持してTextAsset とリレーションさせるイメージ。
文字列等の L10n• Editor Script 頑張る
バイナリの L10n• 画像などの拡張子の前に .ja_JP のように付与
• Hoge.ja_JP.png, Hoge.en_US.png 的な。
• L10n 不要なファイルの存在も考慮し、リソースリスト内で L10n 対象かどうかをフラグ管理
• 勿論、リソースリストの実装は頑張る。
バイナリの L10n• Atlas 内の特定 Sprite のみ L10n も可能に。
• 泥臭いけど、null == GetSprite(name) で判定して、無いならGetSprite(name + “.” + I18N.currentLocale)とかかな…?
• 例は NGUI の場合。Native は分からんw
バイナリの L10n• ポイントは、アプリ組み込みであってもダウンロード型であっても、端末容量の圧迫を極力防ぐコト。
• 端末の言語設定に対して、必要最低限の リソースのみを保持させるような仕組みを作る。
• 特に Android は Non Wi-Fi だと APK サイズ上限は 50MB なので、相当頑張る必要アリ。
サーバサイドの L10n• ナウでヤングでモダンなフレームワークなら 標準対応してるコトも多いんじゃないかな?
• 設計上気を付けるコトとして、日時系のデータは UTC な DateTime で持つか UnixTimestampで 持つかの何れかがオヌヌメ。
• 文字列データの L10n は gettext 使うなり自前で組むなりご随意に。
• あ、間違っても Shift_JIS とか EUC-JP とかは NG。
サーバサイドの L10n• 予算との兼ね合いが大きいけど、mBaaS 使うのも手っ取り早いかも。
• 最低限の範囲でサポートしてくれてるトコが 多い印象なので、スタートアップ向けかな?
• この辺はエンジニアのスキルに依存しがち。
• ……(((((゚Д゚))))) ガクガクブルブル
App Store, Google Playの L10n
• 普通に L10n 対応されてますね。
• 注意点としては、Default Language をEnglish にしないと色々と面倒です。
• もし初期バージョンを Japanese にしちゃった 場合は こちら 参照のコト。(ステマ)
Demo
Any Questions ?
Thank you foryour attention !
top related