Titanium alloy で国際化のススメ

33
Titanium Alloy で国際化のススメ Tadatoshi Hanazaki Appcelerator Platform 4.0対応

Transcript of Titanium alloy で国際化のススメ

Titanium Alloy で国際化のススメ

Tadatoshi Hanazaki

Appcelerator Platform 4.0対応

はじめに

最近のTitanium (Alloy) の国際化の話をします。

主にSDK 4.0.0.GAで検証していますが、3.4.0~4.1.0なら同じと考えて大丈夫と思います。

About author

Tadatoshi Hanazaki @hntn

Titanium Certified Developer

株式会社 洛洛.comhttp://e-rakuraku.com/

専用の30倍レンズを装着すれば、iPhoneやAndroidがスキンチェッカーに大変身!日米版のほか、韓国、台湾、中国ローカライズしてます。だいたいTiです。

こんなん作ってます

http://support.beautecam.com/

Quick Start #1• i18n/言語codeフォルダを作り、それぞれに

strings.xmlファイルを作る

ProjectFolder

├ i18n

│ ├ en

│ │ └ strings.xml

│ ├ ja

│ │ └ strings.xml

Quick Start #2• strings.xmlファイルを編集する

i18n/en/strings.xml

<resources>

<string name=“TITLE_SIGNUP">Sign up</string>

<string name=“LABEL_SEND">Send</string>

</resources>

i18n/ja/strings.xml

<resources>

<string name="TITLE_SIGNUP">新規入会</string>

<string name=“LABEL_SEND">送信</string>

</resources>

Quick Start #3• Viewファイルを編集する

※SDK 3.4.0 以降、AlloyのViewにも書ける様になりました

app/view/index.xml<Alloy>

<Window titleid=“TITLE_SIGNUP”>

<ScrollView>

<Button onClick="doSignUp" titleid="LABEL_SEND"/>

Quick Start #4

言語: English 言語: 日本語

ホームのアプリ名 #1

※デフォルトはtiapp.xmlの <name> 、日本語を入れてもビルドは出来ない

アプリ名を日本語にしたい場合にも、国際化が必要です。但し、先述のstrings.xmlとは違うファイルになります。

ホームのアプリ名 #2• プロジェクトにi18n/言語codeフォルダそれぞれにapp.xmlファイルを作る

ProjectFolder

├ i18n

│ ├ en

│ │ └ app.xml

│ ├ ja

│ │ └ app.xml

ホームのアプリ名 #3• app.xmlファイルを編集する

i18n/en/app.xml

<?xml version="1.0" encoding="UTF-8"?>

<resources>

<string name="appname">マイアプリ</string>

</resources>

i18n/ja/app.xml

<?xml version="1.0" encoding="UTF-8"?>

<resources>

<string name="appname">MyAppName</string>

</resources>

SDK 3.1.x 以前は、AndroidはAndroidManifest.xmlをアレしたり、platform/android/res/values-xx.xmlをナニしたりと面倒でしたが、今は必要ありません。

SDK 3.2.0以降は(古い手順も未だ有効ですが)、iOSと同様先述の手順でOKです。

ホームのアプリ名 (Android)

iOSでTi.Mediaの写真関係を使うのであれば、国際化する必要が無くても設定だけはしたほうが良いです。

iOSのカメラ周り

iOS で Ti.Media.openPhotoGalleryした時の比較

国際化(ja)デフォルト

iOS で Ti.Media.showCameraした時の比較

国際化(ja)デフォルト

ところで、Tiで国際化したとして、デバイス側のどういう設定で言語が決まるかご存知ですか。

デバイスの言語設定 iOS

iOS

[設定] - [一般] - [言語と地域] -

[iPhoneの使用言語]

どうやら「地域」は関係ないようです

デバイスの言語設定 Android

Android

[設定] -[言語と入力] - [言語]

日本国内で流通しているAndroidでは、設定から切り替えられる言語の種類は少ないです。TiにかぎらずAndroidで多言語対応をする場合は、言語切り替えアプリに頼る事になります。

ただし

Android言語切替えアプリなら「Change Language」がオススメ

https://play.google.com/store/apps/details?id=com.examobile.changelanguage

他にもGoogle Playに沢山並んでますが、KitkatやLolipopでもちゃんと動くものは少ないです。

1) Ti.Locale.currentLocale2) Ti.Locale.currentLanguage3) Ti.Locale.currentCountry4) Ti.Platform.locale

ProjectFolder

├ i18n

│ ├ en

│ │ └ strings.xml

│ ├ ja

│ │ └ strings.xml

i18n/直下と同じなのはどれ?(~SDK 4.0.0)

1) Ti.Locale.currentLocale2) Ti.Locale.currentLanguage3) Ti.Locale.currentCountry4) Ti.Platform.locale

ProjectFolder

├ i18n

│ ├ en

│ │ └ strings.xml

│ ├ ja

│ │ └ strings.xml

ja-JP, en-JP, etc

ja, en, etc

JP, US, etciOS:jp, en,etcAndroid:ja-JP, en-US, etc

ex.i18n/直下と同じなのはどれ?(~SDK 4.0.0)

1) Ti.Locale.currentLocale2) Ti.Locale.currentLanguage3) Ti.Locale.currentCountry4) Ti.Platform.locale

答え (~SDK 4.0.0)

ProjectFolder

├ i18n

│ ├ en

│ │ └ strings.xml

│ ├ ja

│ │ └ strings.xml

※ドキュメントでは言語コード(ISO-639-1)って事になってはいます (~SDK 4.0.0)

ja-JP, en-JP, etc

ja, en, etc

JP, US, etciOS:jp, en,etcAndroid:ja-JP, en-US, etc

ex.

Ti.Locale.currentLanguageで概ね正解ですが、例外として、中国語などはiOS/Androidネイティブの作法に従い地域が指定する必要があります。

中国語 (繁体・簡体) ~SDK 4.0.0言語コードiOS

言語コードAndroid

Ti.Locale. currentLanguage

(IOS)

Ti.Locale. currentLanguage

(Android)

中国(簡体) zh-Hans zh-rCN zh-Hans zh

台湾(繁体) zh-Hant zh-rTW zh-Hant zh

香港(繁体) zh-HK zh-rHK zh-HK zh

英語 en en en en

日本 ja ja ja ja

おもいっきりOS依存です

※更にAndroidはマカオ(zh-rMO)やシンガポール(zh-rSG)とかも個別に存在します

• i18n下のDirectory名(言語コード)はISO 639-1通りとは限らない

• iOSとAndroidで共通じゃない

• というか i18n/zh-Hant 等(iOS固有)があると、Androidでbuildが失敗する

マイナー言語の辛み (~SDK 4.0.0)

2015年7月SDK 4.1.0.GAリリース

SDK 4.1.0以降は、

言語コード-RegionSuffix (国コード※)

の形式で、iOS/Androidと共通の方法で細かく指定出来るように。

国コードの指定

※ISO-3166-1 Alpha2 code

英語もカナダ(en-CA)、アメリカ(en-US)、英国(en-GB)などの細かい指定が可能に

中国語 (繁体・簡体) SDK 4.1.0~言語コードiOS

言語コードAndroid

Ti.Locale. currentLanguage

(IOS)

Ti.Locale. currentLanguage

(Android)

中国(簡体) zh-CN zh-CN zh-Hans zh

台湾(繁体) zh-TW zh-TW zh-Hant zh

香港(繁体) zh-HK zh-HK zh-HK zh

英語 en en en en

日本 ja ja ja ja

Google Spreadsheet便利

http://www.hanpendada.com/2015/01/google-spreadsheet.html

• Titanium (Alloy)の国際化は簡単です

• 日本のみの公開でもメリットがあるのでプロジェクトを作ったら最初にやりましょう

• SDK 4.1.0以降は更に便利に

• 折角だから日/英だけでも対応しよう

まとめ