QA@IT
«回答へ戻る

320
 <!-- TI_MANIFEST -->
 
 <application android:icon="@drawable/appicon"
-	android:label="@string/appname" android:name="XXXXXApplication"
+	android:label="@string/app_name" android:name="XXXXXApplication"
 	android:debuggable="false">
 
 	<!-- TI_APPLICATION -->
 	<activity android:name=".XXXXXActivity"
-		android:label="@string/appname" android:theme="@style/Theme.Titanium"
+		android:label="@string/app_name" android:theme="@style/Theme.Titanium"
 		android:configChanges="keyboardHidden|orientation">
 		<intent-filter>
 			<action android:name="android.intent.action.MAIN" />

はい、といいえの両方が答えです。

多言語対応についてはいくつかのレベルに分類できるので、整理して説明します。

(1)アプリの多言語対応

アプリの中の文言をOSの言語設定に合わせて出し分けるような多言語対応については、Titanium Mobileは専用の仕組みを持っています。プロジェクトのディレクトリ直下にi18nディレクトリを作成して、その下にjaやen、ko、zh_hans、zh_hantなどのディレクトリを設置、それぞれの中にstrings.xmlというファイルを置きます。

PROJECT
└──i18n
    ├── en
    │   └── strings.xml
    ├── ja
    │   └── strings.xml
    ├── ko
    │   └── strings.xml
    ├── zh_hans
    │   └── strings.xml
    └── zh_hant
        └── strings.xml

strings.xmlの書式は

<?xml version="1.0" encoding="UTF-8"?>
<resources>
  <string name="open_window">ウィンドウを開く</string>
</resources>

のようになります。これで、JavaScriptの中でL()関数を使ってname属性として指定した値を記述すれば、自動的にOSの言語設定によって文言を差し替えてくれます。

alert(L('open_window'));

用意した言語以外の設定になっていた場合は、アプリのデフォルト言語(通常はEnglish)を優先します。

ホーム画面に表示されるアプリの名称を多言語対応する場合はiOSとAndroidで方法が違うので注意してください。

iOSの場合はstrings.xmlと同じ階層にapp.xmlファイルを設置します。その中でappnameとして各言語のアプリ名を記述していきます。

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <string name="appname">日本語の名前</string>
</resources>

一方、Androidの場合はプロジェクトのディレクトリ直下にplatform/android/res/values-ja/strings.xmlに下のようにappnameを指定して、AndroidManifest.xmlを編集します。

<?xml version="1.0" encoding="UTF-8"?>
<resources>
<string name="appname">日本語の名前</string>
</resources>

一度Android用のapp.apkをビルドすると、プロジェクトのディレクトリ直下のbuild/android/にAndroidManifest.xmlが生成されます。これを上で作成したplatform/android直下にコピーしてください。コピーしたAndroidManifest.xmlの冒頭部分、android:labelを編集します(「XXXXX」は作成するアプリ毎に異なります)。

<!-- TI_MANIFEST -->

<application android:icon="@drawable/appicon"
    android:label="@string/app_name" android:name="XXXXXApplication"
    android:debuggable="false">

    <!-- TI_APPLICATION -->
    <activity android:name=".XXXXXActivity"
        android:label="@string/app_name" android:theme="@style/Theme.Titanium"
        android:configChanges="keyboardHidden|orientation">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

それから、iOSの裏技ですが、空のstrings.xmlを設置するだけでスイッチの表記が「On/Off」に(そうしないと「○/-」みたいになる)変更されます。

(2)Titanium Studioの多言語対応 *オススメしません…

Aptanaから作られたTitanium MobileのIDE、Titanium Studioですが、機能も豊富でEclipseに慣れた方には使いやすいと思います。しかしTitanium Studio自体は日本語化されていません。Eclipseベースなのでよく知られたやり方で表示を変更することができます。

ただし、安定して動作するとは限らないので、どうしても必要な場合のみ自己責任でお試しください。やり方は「Titanium Studio 日本語化」で検索すればすぐにヒットします。

(3)Titanium Mobile SDKの多言語対応

Titanium MobileはIDEであるTitanium StudioとJavaやObjective-CのAPI群となる各ソースコード、Pythonで記述されたビルド用スクリプトなどから成る一連のプログラムの総称です。その内、なかなか対応が厄介なのがビルド用のスクリプトです。特に多言語対応の問題に関してはここが最も手強いので、注意が必要です。

原則として、熟練のTitanium Mobile利用者は以下のルールを守って開発しています。

・プロジェクト名は半角英数字で指定、スペースや記号は混ぜない
・プロジェクトの保存先のフルパスに日本語などマルチバイトの文字を混ぜない
・JavaScriptや画像などのファイル名にスペースや日本語などマルチバイトの文字を混ぜない

これらのルールを破るとプログラム上の間違いはなくてもビルドが出来ない、といった事態に陥ることがあります。余計な時間を費やすのがあまり好きでない方は、このルールを守るよう心がけましょう。

ビルドスクリプトがマルチバイト文字に関するエラーになる場合は必ず

UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 110

のようなエラーメッセージがコンソールに表示されます。こうなった場合、上のルールを守っていないとどこで問題が発生しているのか探すのはとても大変です。

ビルドの他にも、例えばTitanium MobileにはXcodeでビルドできるようにするためのツール、transport.pyが付属しています。これもマルチバイト文字を含むパスがあると正常に動作しません。(もしかしたらこちらのスクリプトでうまくいくかもしれませんが https://gist.github.com/814181)

もし問題が起きてしまった場合は、上のルールに則っていないケースがないかどうかチェックしてください。

はい、といいえの両方が答えです。

多言語対応についてはいくつかのレベルに分類できるので、整理して説明します。

(1)アプリの多言語対応

アプリの中の文言をOSの言語設定に合わせて出し分けるような多言語対応については、Titanium Mobileは専用の仕組みを持っています。プロジェクトのディレクトリ直下にi18nディレクトリを作成して、その下にjaやen、ko、zh_hans、zh_hantなどのディレクトリを設置、それぞれの中にstrings.xmlというファイルを置きます。

```
PROJECT
└──i18n
    ├── en
    │   └── strings.xml
    ├── ja
    │   └── strings.xml
    ├── ko
    │   └── strings.xml
    ├── zh_hans
    │   └── strings.xml
    └── zh_hant
        └── strings.xml
```

strings.xmlの書式は

```
<?xml version="1.0" encoding="UTF-8"?>
<resources>
  <string name="open_window">ウィンドウを開く</string>
</resources>
```

のようになります。これで、JavaScriptの中でL()関数を使ってname属性として指定した値を記述すれば、自動的にOSの言語設定によって文言を差し替えてくれます。

```javascript
alert(L('open_window'));
```

用意した言語以外の設定になっていた場合は、アプリのデフォルト言語(通常はEnglish)を優先します。

ホーム画面に表示されるアプリの名称を多言語対応する場合はiOSとAndroidで方法が違うので注意してください。

iOSの場合はstrings.xmlと同じ階層にapp.xmlファイルを設置します。その中でappnameとして各言語のアプリ名を記述していきます。

```
<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <string name="appname">日本語の名前</string>
</resources>
```

一方、Androidの場合はプロジェクトのディレクトリ直下にplatform/android/res/values-ja/strings.xmlに下のようにappnameを指定して、AndroidManifest.xmlを編集します。

```
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<string name="appname">日本語の名前</string>
</resources>
```

一度Android用のapp.apkをビルドすると、プロジェクトのディレクトリ直下のbuild/android/にAndroidManifest.xmlが生成されます。これを上で作成したplatform/android直下にコピーしてください。コピーしたAndroidManifest.xmlの冒頭部分、android:labelを編集します(「XXXXX」は作成するアプリ毎に異なります)。

```
<!-- TI_MANIFEST -->

<application android:icon="@drawable/appicon"
	android:label="@string/app_name" android:name="XXXXXApplication"
	android:debuggable="false">

	<!-- TI_APPLICATION -->
	<activity android:name=".XXXXXActivity"
		android:label="@string/app_name" android:theme="@style/Theme.Titanium"
		android:configChanges="keyboardHidden|orientation">
		<intent-filter>
			<action android:name="android.intent.action.MAIN" />
			        <category android:name="android.intent.category.LAUNCHER" />
		</intent-filter>
	</activity>
```


それから、iOSの裏技ですが、空のstrings.xmlを設置するだけでスイッチの表記が「On/Off」に(そうしないと「○/-」みたいになる)変更されます。

(2)Titanium Studioの多言語対応 *オススメしません…

Aptanaから作られたTitanium MobileのIDE、Titanium Studioですが、機能も豊富でEclipseに慣れた方には使いやすいと思います。しかしTitanium Studio自体は日本語化されていません。Eclipseベースなのでよく知られたやり方で表示を変更することができます。

ただし、安定して動作するとは限らないので、どうしても必要な場合のみ自己責任でお試しください。やり方は「Titanium Studio 日本語化」で検索すればすぐにヒットします。

(3)Titanium Mobile SDKの多言語対応

Titanium MobileはIDEであるTitanium StudioとJavaやObjective-CのAPI群となる各ソースコード、Pythonで記述されたビルド用スクリプトなどから成る一連のプログラムの総称です。その内、なかなか対応が厄介なのがビルド用のスクリプトです。特に多言語対応の問題に関してはここが最も手強いので、注意が必要です。

原則として、熟練のTitanium Mobile利用者は以下のルールを守って開発しています。

・プロジェクト名は半角英数字で指定、スペースや記号は混ぜない
・プロジェクトの保存先のフルパスに日本語などマルチバイトの文字を混ぜない
・JavaScriptや画像などのファイル名にスペースや日本語などマルチバイトの文字を混ぜない

これらのルールを破るとプログラム上の間違いはなくてもビルドが出来ない、といった事態に陥ることがあります。余計な時間を費やすのがあまり好きでない方は、このルールを守るよう心がけましょう。

ビルドスクリプトがマルチバイト文字に関するエラーになる場合は必ず

```python
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 110
```

のようなエラーメッセージがコンソールに表示されます。こうなった場合、上のルールを守っていないとどこで問題が発生しているのか探すのはとても大変です。

ビルドの他にも、例えばTitanium MobileにはXcodeでビルドできるようにするためのツール、transport.pyが付属しています。これもマルチバイト文字を含むパスがあると正常に動作しません。(もしかしたらこちらのスクリプトでうまくいくかもしれませんが https://gist.github.com/814181)

もし問題が起きてしまった場合は、上のルールに則っていないケースがないかどうかチェックしてください。

Androidの仕様変更のため

320
 </resources>
 ```
 
-一方、Androidの場合はi18n/ja/strings.xmlに下のようにappnameを指定して、AndroidManifest.xmlを編集します。
+一方、Androidの場合はプロジェクトのディレクトリ直下にplatform/android/res/values-ja/strings.xmlに下のようにappnameを指定して、AndroidManifest.xmlを編集します。
 
 ```
+<?xml version="1.0" encoding="UTF-8"?>
+<resources>
 <string name="appname">日本語の名前</string>
+</resources>
 ```
 
 一度Android用のapp.apkをビルドすると、プロジェクトのディレクトリ直下のbuild/android/にAndroidManifest.xmlが生成されます。これを上で作成したplatform/android直下にコピーしてください。コピーしたAndroidManifest.xmlの冒頭部分、android:labelを編集します(「XXXXX」は作成するアプリ毎に異なります)。

はい、といいえの両方が答えです。

多言語対応についてはいくつかのレベルに分類できるので、整理して説明します。

(1)アプリの多言語対応

アプリの中の文言をOSの言語設定に合わせて出し分けるような多言語対応については、Titanium Mobileは専用の仕組みを持っています。プロジェクトのディレクトリ直下にi18nディレクトリを作成して、その下にjaやen、ko、zh_hans、zh_hantなどのディレクトリを設置、それぞれの中にstrings.xmlというファイルを置きます。

PROJECT
└──i18n
    ├── en
    │   └── strings.xml
    ├── ja
    │   └── strings.xml
    ├── ko
    │   └── strings.xml
    ├── zh_hans
    │   └── strings.xml
    └── zh_hant
        └── strings.xml

strings.xmlの書式は

<?xml version="1.0" encoding="UTF-8"?>
<resources>
  <string name="open_window">ウィンドウを開く</string>
</resources>

のようになります。これで、JavaScriptの中でL()関数を使ってname属性として指定した値を記述すれば、自動的にOSの言語設定によって文言を差し替えてくれます。

alert(L('open_window'));

用意した言語以外の設定になっていた場合は、アプリのデフォルト言語(通常はEnglish)を優先します。

ホーム画面に表示されるアプリの名称を多言語対応する場合はiOSとAndroidで方法が違うので注意してください。

iOSの場合はstrings.xmlと同じ階層にapp.xmlファイルを設置します。その中でappnameとして各言語のアプリ名を記述していきます。

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <string name="appname">日本語の名前</string>
</resources>

一方、Androidの場合はプロジェクトのディレクトリ直下にplatform/android/res/values-ja/strings.xmlに下のようにappnameを指定して、AndroidManifest.xmlを編集します。

<?xml version="1.0" encoding="UTF-8"?>
<resources>
<string name="appname">日本語の名前</string>
</resources>

一度Android用のapp.apkをビルドすると、プロジェクトのディレクトリ直下のbuild/android/にAndroidManifest.xmlが生成されます。これを上で作成したplatform/android直下にコピーしてください。コピーしたAndroidManifest.xmlの冒頭部分、android:labelを編集します(「XXXXX」は作成するアプリ毎に異なります)。

<!-- TI_MANIFEST -->

<application android:icon="@drawable/appicon"
    android:label="@string/appname" android:name="XXXXXApplication"
    android:debuggable="false">

    <!-- TI_APPLICATION -->
    <activity android:name=".XXXXXActivity"
        android:label="@string/appname" android:theme="@style/Theme.Titanium"
        android:configChanges="keyboardHidden|orientation">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

それから、iOSの裏技ですが、空のstrings.xmlを設置するだけでスイッチの表記が「On/Off」に(そうしないと「○/-」みたいになる)変更されます。

(2)Titanium Studioの多言語対応 *オススメしません…

Aptanaから作られたTitanium MobileのIDE、Titanium Studioですが、機能も豊富でEclipseに慣れた方には使いやすいと思います。しかしTitanium Studio自体は日本語化されていません。Eclipseベースなのでよく知られたやり方で表示を変更することができます。

ただし、安定して動作するとは限らないので、どうしても必要な場合のみ自己責任でお試しください。やり方は「Titanium Studio 日本語化」で検索すればすぐにヒットします。

(3)Titanium Mobile SDKの多言語対応

Titanium MobileはIDEであるTitanium StudioとJavaやObjective-CのAPI群となる各ソースコード、Pythonで記述されたビルド用スクリプトなどから成る一連のプログラムの総称です。その内、なかなか対応が厄介なのがビルド用のスクリプトです。特に多言語対応の問題に関してはここが最も手強いので、注意が必要です。

原則として、熟練のTitanium Mobile利用者は以下のルールを守って開発しています。

・プロジェクト名は半角英数字で指定、スペースや記号は混ぜない
・プロジェクトの保存先のフルパスに日本語などマルチバイトの文字を混ぜない
・JavaScriptや画像などのファイル名にスペースや日本語などマルチバイトの文字を混ぜない

これらのルールを破るとプログラム上の間違いはなくてもビルドが出来ない、といった事態に陥ることがあります。余計な時間を費やすのがあまり好きでない方は、このルールを守るよう心がけましょう。

ビルドスクリプトがマルチバイト文字に関するエラーになる場合は必ず

UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 110

のようなエラーメッセージがコンソールに表示されます。こうなった場合、上のルールを守っていないとどこで問題が発生しているのか探すのはとても大変です。

ビルドの他にも、例えばTitanium MobileにはXcodeでビルドできるようにするためのツール、transport.pyが付属しています。これもマルチバイト文字を含むパスがあると正常に動作しません。(もしかしたらこちらのスクリプトでうまくいくかもしれませんが https://gist.github.com/814181)

もし問題が起きてしまった場合は、上のルールに則っていないケースがないかどうかチェックしてください。

はい、といいえの両方が答えです。

多言語対応についてはいくつかのレベルに分類できるので、整理して説明します。

(1)アプリの多言語対応

アプリの中の文言をOSの言語設定に合わせて出し分けるような多言語対応については、Titanium Mobileは専用の仕組みを持っています。プロジェクトのディレクトリ直下にi18nディレクトリを作成して、その下にjaやen、ko、zh_hans、zh_hantなどのディレクトリを設置、それぞれの中にstrings.xmlというファイルを置きます。

```
PROJECT
└──i18n
    ├── en
    │   └── strings.xml
    ├── ja
    │   └── strings.xml
    ├── ko
    │   └── strings.xml
    ├── zh_hans
    │   └── strings.xml
    └── zh_hant
        └── strings.xml
```

strings.xmlの書式は

```
<?xml version="1.0" encoding="UTF-8"?>
<resources>
  <string name="open_window">ウィンドウを開く</string>
</resources>
```

のようになります。これで、JavaScriptの中でL()関数を使ってname属性として指定した値を記述すれば、自動的にOSの言語設定によって文言を差し替えてくれます。

```javascript
alert(L('open_window'));
```

用意した言語以外の設定になっていた場合は、アプリのデフォルト言語(通常はEnglish)を優先します。

ホーム画面に表示されるアプリの名称を多言語対応する場合はiOSとAndroidで方法が違うので注意してください。

iOSの場合はstrings.xmlと同じ階層にapp.xmlファイルを設置します。その中でappnameとして各言語のアプリ名を記述していきます。

```
<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <string name="appname">日本語の名前</string>
</resources>
```

一方、Androidの場合はプロジェクトのディレクトリ直下にplatform/android/res/values-ja/strings.xmlに下のようにappnameを指定して、AndroidManifest.xmlを編集します。

```
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<string name="appname">日本語の名前</string>
</resources>
```

一度Android用のapp.apkをビルドすると、プロジェクトのディレクトリ直下のbuild/android/にAndroidManifest.xmlが生成されます。これを上で作成したplatform/android直下にコピーしてください。コピーしたAndroidManifest.xmlの冒頭部分、android:labelを編集します(「XXXXX」は作成するアプリ毎に異なります)。

```
<!-- TI_MANIFEST -->

<application android:icon="@drawable/appicon"
	android:label="@string/appname" android:name="XXXXXApplication"
	android:debuggable="false">

	<!-- TI_APPLICATION -->
	<activity android:name=".XXXXXActivity"
		android:label="@string/appname" android:theme="@style/Theme.Titanium"
		android:configChanges="keyboardHidden|orientation">
		<intent-filter>
			<action android:name="android.intent.action.MAIN" />
			        <category android:name="android.intent.category.LAUNCHER" />
		</intent-filter>
	</activity>
```


それから、iOSの裏技ですが、空のstrings.xmlを設置するだけでスイッチの表記が「On/Off」に(そうしないと「○/-」みたいになる)変更されます。

(2)Titanium Studioの多言語対応 *オススメしません…

Aptanaから作られたTitanium MobileのIDE、Titanium Studioですが、機能も豊富でEclipseに慣れた方には使いやすいと思います。しかしTitanium Studio自体は日本語化されていません。Eclipseベースなのでよく知られたやり方で表示を変更することができます。

ただし、安定して動作するとは限らないので、どうしても必要な場合のみ自己責任でお試しください。やり方は「Titanium Studio 日本語化」で検索すればすぐにヒットします。

(3)Titanium Mobile SDKの多言語対応

Titanium MobileはIDEであるTitanium StudioとJavaやObjective-CのAPI群となる各ソースコード、Pythonで記述されたビルド用スクリプトなどから成る一連のプログラムの総称です。その内、なかなか対応が厄介なのがビルド用のスクリプトです。特に多言語対応の問題に関してはここが最も手強いので、注意が必要です。

原則として、熟練のTitanium Mobile利用者は以下のルールを守って開発しています。

・プロジェクト名は半角英数字で指定、スペースや記号は混ぜない
・プロジェクトの保存先のフルパスに日本語などマルチバイトの文字を混ぜない
・JavaScriptや画像などのファイル名にスペースや日本語などマルチバイトの文字を混ぜない

これらのルールを破るとプログラム上の間違いはなくてもビルドが出来ない、といった事態に陥ることがあります。余計な時間を費やすのがあまり好きでない方は、このルールを守るよう心がけましょう。

ビルドスクリプトがマルチバイト文字に関するエラーになる場合は必ず

```python
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 110
```

のようなエラーメッセージがコンソールに表示されます。こうなった場合、上のルールを守っていないとどこで問題が発生しているのか探すのはとても大変です。

ビルドの他にも、例えばTitanium MobileにはXcodeでビルドできるようにするためのツール、transport.pyが付属しています。これもマルチバイト文字を含むパスがあると正常に動作しません。(もしかしたらこちらのスクリプトでうまくいくかもしれませんが https://gist.github.com/814181)

もし問題が起きてしまった場合は、上のルールに則っていないケースがないかどうかチェックしてください。

320
 
 (1)アプリの多言語対応
 
-アプリの中の文言をOSの言語設定に合わせて出し分けるような多言語対応については、Titanium Mobileは専用の仕組みを持っています。Resourcesディレクトリ直下にi18nディレクトリを作成して、その下にjaやen、ko、zh_hans、zh_hantなどのディレクトリを設置、それぞれの中にstrings.xmlというファイルを置きます。
+アプリの中の文言をOSの言語設定に合わせて出し分けるような多言語対応については、Titanium Mobileは専用の仕組みを持っています。プロジェクトのディレクトリ直下にi18nディレクトリを作成して、その下にjaやen、ko、zh_hans、zh_hantなどのディレクトリを設置、それぞれの中にstrings.xmlというファイルを置きます。
 
 ```
 PROJECT

はい、といいえの両方が答えです。

多言語対応についてはいくつかのレベルに分類できるので、整理して説明します。

(1)アプリの多言語対応

アプリの中の文言をOSの言語設定に合わせて出し分けるような多言語対応については、Titanium Mobileは専用の仕組みを持っています。プロジェクトのディレクトリ直下にi18nディレクトリを作成して、その下にjaやen、ko、zh_hans、zh_hantなどのディレクトリを設置、それぞれの中にstrings.xmlというファイルを置きます。

PROJECT
└──i18n
    ├── en
    │   └── strings.xml
    ├── ja
    │   └── strings.xml
    ├── ko
    │   └── strings.xml
    ├── zh_hans
    │   └── strings.xml
    └── zh_hant
        └── strings.xml

strings.xmlの書式は

<?xml version="1.0" encoding="UTF-8"?>
<resources>
  <string name="open_window">ウィンドウを開く</string>
</resources>

のようになります。これで、JavaScriptの中でL()関数を使ってname属性として指定した値を記述すれば、自動的にOSの言語設定によって文言を差し替えてくれます。

alert(L('open_window'));

用意した言語以外の設定になっていた場合は、アプリのデフォルト言語(通常はEnglish)を優先します。

ホーム画面に表示されるアプリの名称を多言語対応する場合はiOSとAndroidで方法が違うので注意してください。

iOSの場合はstrings.xmlと同じ階層にapp.xmlファイルを設置します。その中でappnameとして各言語のアプリ名を記述していきます。

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <string name="appname">日本語の名前</string>
</resources>

一方、Androidの場合はi18n/ja/strings.xmlに下のようにappnameを指定して、AndroidManifest.xmlを編集します。

<string name="appname">日本語の名前</string>

一度Android用のapp.apkをビルドすると、プロジェクトのディレクトリ直下のbuild/android/にAndroidManifest.xmlが生成されます。これを上で作成したplatform/android直下にコピーしてください。コピーしたAndroidManifest.xmlの冒頭部分、android:labelを編集します(「XXXXX」は作成するアプリ毎に異なります)。

<!-- TI_MANIFEST -->

<application android:icon="@drawable/appicon"
    android:label="@string/appname" android:name="XXXXXApplication"
    android:debuggable="false">

    <!-- TI_APPLICATION -->
    <activity android:name=".XXXXXActivity"
        android:label="@string/appname" android:theme="@style/Theme.Titanium"
        android:configChanges="keyboardHidden|orientation">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

それから、iOSの裏技ですが、空のstrings.xmlを設置するだけでスイッチの表記が「On/Off」に(そうしないと「○/-」みたいになる)変更されます。

(2)Titanium Studioの多言語対応 *オススメしません…

Aptanaから作られたTitanium MobileのIDE、Titanium Studioですが、機能も豊富でEclipseに慣れた方には使いやすいと思います。しかしTitanium Studio自体は日本語化されていません。Eclipseベースなのでよく知られたやり方で表示を変更することができます。

ただし、安定して動作するとは限らないので、どうしても必要な場合のみ自己責任でお試しください。やり方は「Titanium Studio 日本語化」で検索すればすぐにヒットします。

(3)Titanium Mobile SDKの多言語対応

Titanium MobileはIDEであるTitanium StudioとJavaやObjective-CのAPI群となる各ソースコード、Pythonで記述されたビルド用スクリプトなどから成る一連のプログラムの総称です。その内、なかなか対応が厄介なのがビルド用のスクリプトです。特に多言語対応の問題に関してはここが最も手強いので、注意が必要です。

原則として、熟練のTitanium Mobile利用者は以下のルールを守って開発しています。

・プロジェクト名は半角英数字で指定、スペースや記号は混ぜない
・プロジェクトの保存先のフルパスに日本語などマルチバイトの文字を混ぜない
・JavaScriptや画像などのファイル名にスペースや日本語などマルチバイトの文字を混ぜない

これらのルールを破るとプログラム上の間違いはなくてもビルドが出来ない、といった事態に陥ることがあります。余計な時間を費やすのがあまり好きでない方は、このルールを守るよう心がけましょう。

ビルドスクリプトがマルチバイト文字に関するエラーになる場合は必ず

UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 110

のようなエラーメッセージがコンソールに表示されます。こうなった場合、上のルールを守っていないとどこで問題が発生しているのか探すのはとても大変です。

ビルドの他にも、例えばTitanium MobileにはXcodeでビルドできるようにするためのツール、transport.pyが付属しています。これもマルチバイト文字を含むパスがあると正常に動作しません。(もしかしたらこちらのスクリプトでうまくいくかもしれませんが https://gist.github.com/814181)

もし問題が起きてしまった場合は、上のルールに則っていないケースがないかどうかチェックしてください。

はい、といいえの両方が答えです。

多言語対応についてはいくつかのレベルに分類できるので、整理して説明します。

(1)アプリの多言語対応

アプリの中の文言をOSの言語設定に合わせて出し分けるような多言語対応については、Titanium Mobileは専用の仕組みを持っています。プロジェクトのディレクトリ直下にi18nディレクトリを作成して、その下にjaやen、ko、zh_hans、zh_hantなどのディレクトリを設置、それぞれの中にstrings.xmlというファイルを置きます。

```
PROJECT
└──i18n
    ├── en
    │   └── strings.xml
    ├── ja
    │   └── strings.xml
    ├── ko
    │   └── strings.xml
    ├── zh_hans
    │   └── strings.xml
    └── zh_hant
        └── strings.xml
```

strings.xmlの書式は

```
<?xml version="1.0" encoding="UTF-8"?>
<resources>
  <string name="open_window">ウィンドウを開く</string>
</resources>
```

のようになります。これで、JavaScriptの中でL()関数を使ってname属性として指定した値を記述すれば、自動的にOSの言語設定によって文言を差し替えてくれます。

```javascript
alert(L('open_window'));
```

用意した言語以外の設定になっていた場合は、アプリのデフォルト言語(通常はEnglish)を優先します。

ホーム画面に表示されるアプリの名称を多言語対応する場合はiOSとAndroidで方法が違うので注意してください。

iOSの場合はstrings.xmlと同じ階層にapp.xmlファイルを設置します。その中でappnameとして各言語のアプリ名を記述していきます。

```
<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <string name="appname">日本語の名前</string>
</resources>
```

一方、Androidの場合はi18n/ja/strings.xmlに下のようにappnameを指定して、AndroidManifest.xmlを編集します。

```
<string name="appname">日本語の名前</string>
```

一度Android用のapp.apkをビルドすると、プロジェクトのディレクトリ直下のbuild/android/にAndroidManifest.xmlが生成されます。これを上で作成したplatform/android直下にコピーしてください。コピーしたAndroidManifest.xmlの冒頭部分、android:labelを編集します(「XXXXX」は作成するアプリ毎に異なります)。

```
<!-- TI_MANIFEST -->

<application android:icon="@drawable/appicon"
	android:label="@string/appname" android:name="XXXXXApplication"
	android:debuggable="false">

	<!-- TI_APPLICATION -->
	<activity android:name=".XXXXXActivity"
		android:label="@string/appname" android:theme="@style/Theme.Titanium"
		android:configChanges="keyboardHidden|orientation">
		<intent-filter>
			<action android:name="android.intent.action.MAIN" />
			        <category android:name="android.intent.category.LAUNCHER" />
		</intent-filter>
	</activity>
```


それから、iOSの裏技ですが、空のstrings.xmlを設置するだけでスイッチの表記が「On/Off」に(そうしないと「○/-」みたいになる)変更されます。

(2)Titanium Studioの多言語対応 *オススメしません…

Aptanaから作られたTitanium MobileのIDE、Titanium Studioですが、機能も豊富でEclipseに慣れた方には使いやすいと思います。しかしTitanium Studio自体は日本語化されていません。Eclipseベースなのでよく知られたやり方で表示を変更することができます。

ただし、安定して動作するとは限らないので、どうしても必要な場合のみ自己責任でお試しください。やり方は「Titanium Studio 日本語化」で検索すればすぐにヒットします。

(3)Titanium Mobile SDKの多言語対応

Titanium MobileはIDEであるTitanium StudioとJavaやObjective-CのAPI群となる各ソースコード、Pythonで記述されたビルド用スクリプトなどから成る一連のプログラムの総称です。その内、なかなか対応が厄介なのがビルド用のスクリプトです。特に多言語対応の問題に関してはここが最も手強いので、注意が必要です。

原則として、熟練のTitanium Mobile利用者は以下のルールを守って開発しています。

・プロジェクト名は半角英数字で指定、スペースや記号は混ぜない
・プロジェクトの保存先のフルパスに日本語などマルチバイトの文字を混ぜない
・JavaScriptや画像などのファイル名にスペースや日本語などマルチバイトの文字を混ぜない

これらのルールを破るとプログラム上の間違いはなくてもビルドが出来ない、といった事態に陥ることがあります。余計な時間を費やすのがあまり好きでない方は、このルールを守るよう心がけましょう。

ビルドスクリプトがマルチバイト文字に関するエラーになる場合は必ず

```python
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 110
```

のようなエラーメッセージがコンソールに表示されます。こうなった場合、上のルールを守っていないとどこで問題が発生しているのか探すのはとても大変です。

ビルドの他にも、例えばTitanium MobileにはXcodeでビルドできるようにするためのツール、transport.pyが付属しています。これもマルチバイト文字を含むパスがあると正常に動作しません。(もしかしたらこちらのスクリプトでうまくいくかもしれませんが https://gist.github.com/814181)

もし問題が起きてしまった場合は、上のルールに則っていないケースがないかどうかチェックしてください。

ディレクトリ階層が間違ってる

320
 アプリの中の文言をOSの言語設定に合わせて出し分けるような多言語対応については、Titanium Mobileは専用の仕組みを持っています。Resourcesディレクトリ直下にi18nディレクトリを作成して、その下にjaやen、ko、zh_hans、zh_hantなどのディレクトリを設置、それぞれの中にstrings.xmlというファイルを置きます。
 
 ```
-Resources
+PROJECT
 └──i18n
     ├── en
     │   └── strings.xml

はい、といいえの両方が答えです。

多言語対応についてはいくつかのレベルに分類できるので、整理して説明します。

(1)アプリの多言語対応

アプリの中の文言をOSの言語設定に合わせて出し分けるような多言語対応については、Titanium Mobileは専用の仕組みを持っています。Resourcesディレクトリ直下にi18nディレクトリを作成して、その下にjaやen、ko、zh_hans、zh_hantなどのディレクトリを設置、それぞれの中にstrings.xmlというファイルを置きます。

PROJECT
└──i18n
    ├── en
    │   └── strings.xml
    ├── ja
    │   └── strings.xml
    ├── ko
    │   └── strings.xml
    ├── zh_hans
    │   └── strings.xml
    └── zh_hant
        └── strings.xml

strings.xmlの書式は

<?xml version="1.0" encoding="UTF-8"?>
<resources>
  <string name="open_window">ウィンドウを開く</string>
</resources>

のようになります。これで、JavaScriptの中でL()関数を使ってname属性として指定した値を記述すれば、自動的にOSの言語設定によって文言を差し替えてくれます。

alert(L('open_window'));

用意した言語以外の設定になっていた場合は、アプリのデフォルト言語(通常はEnglish)を優先します。

ホーム画面に表示されるアプリの名称を多言語対応する場合はiOSとAndroidで方法が違うので注意してください。

iOSの場合はstrings.xmlと同じ階層にapp.xmlファイルを設置します。その中でappnameとして各言語のアプリ名を記述していきます。

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <string name="appname">日本語の名前</string>
</resources>

一方、Androidの場合はi18n/ja/strings.xmlに下のようにappnameを指定して、AndroidManifest.xmlを編集します。

<string name="appname">日本語の名前</string>

一度Android用のapp.apkをビルドすると、プロジェクトのディレクトリ直下のbuild/android/にAndroidManifest.xmlが生成されます。これを上で作成したplatform/android直下にコピーしてください。コピーしたAndroidManifest.xmlの冒頭部分、android:labelを編集します(「XXXXX」は作成するアプリ毎に異なります)。

<!-- TI_MANIFEST -->

<application android:icon="@drawable/appicon"
    android:label="@string/appname" android:name="XXXXXApplication"
    android:debuggable="false">

    <!-- TI_APPLICATION -->
    <activity android:name=".XXXXXActivity"
        android:label="@string/appname" android:theme="@style/Theme.Titanium"
        android:configChanges="keyboardHidden|orientation">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

それから、iOSの裏技ですが、空のstrings.xmlを設置するだけでスイッチの表記が「On/Off」に(そうしないと「○/-」みたいになる)変更されます。

(2)Titanium Studioの多言語対応 *オススメしません…

Aptanaから作られたTitanium MobileのIDE、Titanium Studioですが、機能も豊富でEclipseに慣れた方には使いやすいと思います。しかしTitanium Studio自体は日本語化されていません。Eclipseベースなのでよく知られたやり方で表示を変更することができます。

ただし、安定して動作するとは限らないので、どうしても必要な場合のみ自己責任でお試しください。やり方は「Titanium Studio 日本語化」で検索すればすぐにヒットします。

(3)Titanium Mobile SDKの多言語対応

Titanium MobileはIDEであるTitanium StudioとJavaやObjective-CのAPI群となる各ソースコード、Pythonで記述されたビルド用スクリプトなどから成る一連のプログラムの総称です。その内、なかなか対応が厄介なのがビルド用のスクリプトです。特に多言語対応の問題に関してはここが最も手強いので、注意が必要です。

原則として、熟練のTitanium Mobile利用者は以下のルールを守って開発しています。

・プロジェクト名は半角英数字で指定、スペースや記号は混ぜない
・プロジェクトの保存先のフルパスに日本語などマルチバイトの文字を混ぜない
・JavaScriptや画像などのファイル名にスペースや日本語などマルチバイトの文字を混ぜない

これらのルールを破るとプログラム上の間違いはなくてもビルドが出来ない、といった事態に陥ることがあります。余計な時間を費やすのがあまり好きでない方は、このルールを守るよう心がけましょう。

ビルドスクリプトがマルチバイト文字に関するエラーになる場合は必ず

UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 110

のようなエラーメッセージがコンソールに表示されます。こうなった場合、上のルールを守っていないとどこで問題が発生しているのか探すのはとても大変です。

ビルドの他にも、例えばTitanium MobileにはXcodeでビルドできるようにするためのツール、transport.pyが付属しています。これもマルチバイト文字を含むパスがあると正常に動作しません。(もしかしたらこちらのスクリプトでうまくいくかもしれませんが https://gist.github.com/814181)

もし問題が起きてしまった場合は、上のルールに則っていないケースがないかどうかチェックしてください。

はい、といいえの両方が答えです。

多言語対応についてはいくつかのレベルに分類できるので、整理して説明します。

(1)アプリの多言語対応

アプリの中の文言をOSの言語設定に合わせて出し分けるような多言語対応については、Titanium Mobileは専用の仕組みを持っています。Resourcesディレクトリ直下にi18nディレクトリを作成して、その下にjaやen、ko、zh_hans、zh_hantなどのディレクトリを設置、それぞれの中にstrings.xmlというファイルを置きます。

```
PROJECT
└──i18n
    ├── en
    │   └── strings.xml
    ├── ja
    │   └── strings.xml
    ├── ko
    │   └── strings.xml
    ├── zh_hans
    │   └── strings.xml
    └── zh_hant
        └── strings.xml
```

strings.xmlの書式は

```
<?xml version="1.0" encoding="UTF-8"?>
<resources>
  <string name="open_window">ウィンドウを開く</string>
</resources>
```

のようになります。これで、JavaScriptの中でL()関数を使ってname属性として指定した値を記述すれば、自動的にOSの言語設定によって文言を差し替えてくれます。

```javascript
alert(L('open_window'));
```

用意した言語以外の設定になっていた場合は、アプリのデフォルト言語(通常はEnglish)を優先します。

ホーム画面に表示されるアプリの名称を多言語対応する場合はiOSとAndroidで方法が違うので注意してください。

iOSの場合はstrings.xmlと同じ階層にapp.xmlファイルを設置します。その中でappnameとして各言語のアプリ名を記述していきます。

```
<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <string name="appname">日本語の名前</string>
</resources>
```

一方、Androidの場合はi18n/ja/strings.xmlに下のようにappnameを指定して、AndroidManifest.xmlを編集します。

```
<string name="appname">日本語の名前</string>
```

一度Android用のapp.apkをビルドすると、プロジェクトのディレクトリ直下のbuild/android/にAndroidManifest.xmlが生成されます。これを上で作成したplatform/android直下にコピーしてください。コピーしたAndroidManifest.xmlの冒頭部分、android:labelを編集します(「XXXXX」は作成するアプリ毎に異なります)。

```
<!-- TI_MANIFEST -->

<application android:icon="@drawable/appicon"
	android:label="@string/appname" android:name="XXXXXApplication"
	android:debuggable="false">

	<!-- TI_APPLICATION -->
	<activity android:name=".XXXXXActivity"
		android:label="@string/appname" android:theme="@style/Theme.Titanium"
		android:configChanges="keyboardHidden|orientation">
		<intent-filter>
			<action android:name="android.intent.action.MAIN" />
			        <category android:name="android.intent.category.LAUNCHER" />
		</intent-filter>
	</activity>
```


それから、iOSの裏技ですが、空のstrings.xmlを設置するだけでスイッチの表記が「On/Off」に(そうしないと「○/-」みたいになる)変更されます。

(2)Titanium Studioの多言語対応 *オススメしません…

Aptanaから作られたTitanium MobileのIDE、Titanium Studioですが、機能も豊富でEclipseに慣れた方には使いやすいと思います。しかしTitanium Studio自体は日本語化されていません。Eclipseベースなのでよく知られたやり方で表示を変更することができます。

ただし、安定して動作するとは限らないので、どうしても必要な場合のみ自己責任でお試しください。やり方は「Titanium Studio 日本語化」で検索すればすぐにヒットします。

(3)Titanium Mobile SDKの多言語対応

Titanium MobileはIDEであるTitanium StudioとJavaやObjective-CのAPI群となる各ソースコード、Pythonで記述されたビルド用スクリプトなどから成る一連のプログラムの総称です。その内、なかなか対応が厄介なのがビルド用のスクリプトです。特に多言語対応の問題に関してはここが最も手強いので、注意が必要です。

原則として、熟練のTitanium Mobile利用者は以下のルールを守って開発しています。

・プロジェクト名は半角英数字で指定、スペースや記号は混ぜない
・プロジェクトの保存先のフルパスに日本語などマルチバイトの文字を混ぜない
・JavaScriptや画像などのファイル名にスペースや日本語などマルチバイトの文字を混ぜない

これらのルールを破るとプログラム上の間違いはなくてもビルドが出来ない、といった事態に陥ることがあります。余計な時間を費やすのがあまり好きでない方は、このルールを守るよう心がけましょう。

ビルドスクリプトがマルチバイト文字に関するエラーになる場合は必ず

```python
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 110
```

のようなエラーメッセージがコンソールに表示されます。こうなった場合、上のルールを守っていないとどこで問題が発生しているのか探すのはとても大変です。

ビルドの他にも、例えばTitanium MobileにはXcodeでビルドできるようにするためのツール、transport.pyが付属しています。これもマルチバイト文字を含むパスがあると正常に動作しません。(もしかしたらこちらのスクリプトでうまくいくかもしれませんが https://gist.github.com/814181)

もし問題が起きてしまった場合は、上のルールに則っていないケースがないかどうかチェックしてください。

バージョン変わったらやり方が変わってた(Android)

320
 </resources>
 ```
 
-一方、Androidの場合はプロジェクトのディレクトリ直下にplatform/android/res/ディレクトリを作成し、その下に各言語用のディレクトリを「values-en」「values-ja」のように用意します。その下にstrings.xmlという名前でファイルを用意するのですが、ファイルの中身は上のiOS用のapp.xmlと同じです。ファイル名が違うので注意してください。
+一方、Androidの場合はi18n/ja/strings.xmlに下のようにappnameを指定して、AndroidManifest.xmlを編集します。
 
-それから、AndroidManifest.xmlをカスタマイズする必要があります。一度Android用のapp.apkをビルドすると、プロジェクトのディレクトリ直下のbuild/android/にAndroidManifest.xmlが生成されます。これを上で作成したplatform/android直下にコピーしてください。コピーしたAndroidManifest.xmlの冒頭部分、android:labelを編集します(「XXXXX」は作成するアプリ毎に異なります)。
+```
+<string name="appname">日本語の名前</string>
+```
+
+一度Android用のapp.apkをビルドすると、プロジェクトのディレクトリ直下のbuild/android/にAndroidManifest.xmlが生成されます。これを上で作成したplatform/android直下にコピーしてください。コピーしたAndroidManifest.xmlの冒頭部分、android:labelを編集します(「XXXXX」は作成するアプリ毎に異なります)。
 
 ```
 <!-- TI_MANIFEST -->

はい、といいえの両方が答えです。

多言語対応についてはいくつかのレベルに分類できるので、整理して説明します。

(1)アプリの多言語対応

アプリの中の文言をOSの言語設定に合わせて出し分けるような多言語対応については、Titanium Mobileは専用の仕組みを持っています。Resourcesディレクトリ直下にi18nディレクトリを作成して、その下にjaやen、ko、zh_hans、zh_hantなどのディレクトリを設置、それぞれの中にstrings.xmlというファイルを置きます。

Resources
└──i18n
    ├── en
    │   └── strings.xml
    ├── ja
    │   └── strings.xml
    ├── ko
    │   └── strings.xml
    ├── zh_hans
    │   └── strings.xml
    └── zh_hant
        └── strings.xml

strings.xmlの書式は

<?xml version="1.0" encoding="UTF-8"?>
<resources>
  <string name="open_window">ウィンドウを開く</string>
</resources>

のようになります。これで、JavaScriptの中でL()関数を使ってname属性として指定した値を記述すれば、自動的にOSの言語設定によって文言を差し替えてくれます。

alert(L('open_window'));

用意した言語以外の設定になっていた場合は、アプリのデフォルト言語(通常はEnglish)を優先します。

ホーム画面に表示されるアプリの名称を多言語対応する場合はiOSとAndroidで方法が違うので注意してください。

iOSの場合はstrings.xmlと同じ階層にapp.xmlファイルを設置します。その中でappnameとして各言語のアプリ名を記述していきます。

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <string name="appname">日本語の名前</string>
</resources>

一方、Androidの場合はi18n/ja/strings.xmlに下のようにappnameを指定して、AndroidManifest.xmlを編集します。

<string name="appname">日本語の名前</string>

一度Android用のapp.apkをビルドすると、プロジェクトのディレクトリ直下のbuild/android/にAndroidManifest.xmlが生成されます。これを上で作成したplatform/android直下にコピーしてください。コピーしたAndroidManifest.xmlの冒頭部分、android:labelを編集します(「XXXXX」は作成するアプリ毎に異なります)。

<!-- TI_MANIFEST -->

<application android:icon="@drawable/appicon"
    android:label="@string/appname" android:name="XXXXXApplication"
    android:debuggable="false">

    <!-- TI_APPLICATION -->
    <activity android:name=".XXXXXActivity"
        android:label="@string/appname" android:theme="@style/Theme.Titanium"
        android:configChanges="keyboardHidden|orientation">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

それから、iOSの裏技ですが、空のstrings.xmlを設置するだけでスイッチの表記が「On/Off」に(そうしないと「○/-」みたいになる)変更されます。

(2)Titanium Studioの多言語対応 *オススメしません…

Aptanaから作られたTitanium MobileのIDE、Titanium Studioですが、機能も豊富でEclipseに慣れた方には使いやすいと思います。しかしTitanium Studio自体は日本語化されていません。Eclipseベースなのでよく知られたやり方で表示を変更することができます。

ただし、安定して動作するとは限らないので、どうしても必要な場合のみ自己責任でお試しください。やり方は「Titanium Studio 日本語化」で検索すればすぐにヒットします。

(3)Titanium Mobile SDKの多言語対応

Titanium MobileはIDEであるTitanium StudioとJavaやObjective-CのAPI群となる各ソースコード、Pythonで記述されたビルド用スクリプトなどから成る一連のプログラムの総称です。その内、なかなか対応が厄介なのがビルド用のスクリプトです。特に多言語対応の問題に関してはここが最も手強いので、注意が必要です。

原則として、熟練のTitanium Mobile利用者は以下のルールを守って開発しています。

・プロジェクト名は半角英数字で指定、スペースや記号は混ぜない
・プロジェクトの保存先のフルパスに日本語などマルチバイトの文字を混ぜない
・JavaScriptや画像などのファイル名にスペースや日本語などマルチバイトの文字を混ぜない

これらのルールを破るとプログラム上の間違いはなくてもビルドが出来ない、といった事態に陥ることがあります。余計な時間を費やすのがあまり好きでない方は、このルールを守るよう心がけましょう。

ビルドスクリプトがマルチバイト文字に関するエラーになる場合は必ず

UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 110

のようなエラーメッセージがコンソールに表示されます。こうなった場合、上のルールを守っていないとどこで問題が発生しているのか探すのはとても大変です。

ビルドの他にも、例えばTitanium MobileにはXcodeでビルドできるようにするためのツール、transport.pyが付属しています。これもマルチバイト文字を含むパスがあると正常に動作しません。(もしかしたらこちらのスクリプトでうまくいくかもしれませんが https://gist.github.com/814181)

もし問題が起きてしまった場合は、上のルールに則っていないケースがないかどうかチェックしてください。

はい、といいえの両方が答えです。

多言語対応についてはいくつかのレベルに分類できるので、整理して説明します。

(1)アプリの多言語対応

アプリの中の文言をOSの言語設定に合わせて出し分けるような多言語対応については、Titanium Mobileは専用の仕組みを持っています。Resourcesディレクトリ直下にi18nディレクトリを作成して、その下にjaやen、ko、zh_hans、zh_hantなどのディレクトリを設置、それぞれの中にstrings.xmlというファイルを置きます。

```
Resources
└──i18n
    ├── en
    │   └── strings.xml
    ├── ja
    │   └── strings.xml
    ├── ko
    │   └── strings.xml
    ├── zh_hans
    │   └── strings.xml
    └── zh_hant
        └── strings.xml
```

strings.xmlの書式は

```
<?xml version="1.0" encoding="UTF-8"?>
<resources>
  <string name="open_window">ウィンドウを開く</string>
</resources>
```

のようになります。これで、JavaScriptの中でL()関数を使ってname属性として指定した値を記述すれば、自動的にOSの言語設定によって文言を差し替えてくれます。

```javascript
alert(L('open_window'));
```

用意した言語以外の設定になっていた場合は、アプリのデフォルト言語(通常はEnglish)を優先します。

ホーム画面に表示されるアプリの名称を多言語対応する場合はiOSとAndroidで方法が違うので注意してください。

iOSの場合はstrings.xmlと同じ階層にapp.xmlファイルを設置します。その中でappnameとして各言語のアプリ名を記述していきます。

```
<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <string name="appname">日本語の名前</string>
</resources>
```

一方、Androidの場合はi18n/ja/strings.xmlに下のようにappnameを指定して、AndroidManifest.xmlを編集します。

```
<string name="appname">日本語の名前</string>
```

一度Android用のapp.apkをビルドすると、プロジェクトのディレクトリ直下のbuild/android/にAndroidManifest.xmlが生成されます。これを上で作成したplatform/android直下にコピーしてください。コピーしたAndroidManifest.xmlの冒頭部分、android:labelを編集します(「XXXXX」は作成するアプリ毎に異なります)。

```
<!-- TI_MANIFEST -->

<application android:icon="@drawable/appicon"
	android:label="@string/appname" android:name="XXXXXApplication"
	android:debuggable="false">

	<!-- TI_APPLICATION -->
	<activity android:name=".XXXXXActivity"
		android:label="@string/appname" android:theme="@style/Theme.Titanium"
		android:configChanges="keyboardHidden|orientation">
		<intent-filter>
			<action android:name="android.intent.action.MAIN" />
			        <category android:name="android.intent.category.LAUNCHER" />
		</intent-filter>
	</activity>
```


それから、iOSの裏技ですが、空のstrings.xmlを設置するだけでスイッチの表記が「On/Off」に(そうしないと「○/-」みたいになる)変更されます。

(2)Titanium Studioの多言語対応 *オススメしません…

Aptanaから作られたTitanium MobileのIDE、Titanium Studioですが、機能も豊富でEclipseに慣れた方には使いやすいと思います。しかしTitanium Studio自体は日本語化されていません。Eclipseベースなのでよく知られたやり方で表示を変更することができます。

ただし、安定して動作するとは限らないので、どうしても必要な場合のみ自己責任でお試しください。やり方は「Titanium Studio 日本語化」で検索すればすぐにヒットします。

(3)Titanium Mobile SDKの多言語対応

Titanium MobileはIDEであるTitanium StudioとJavaやObjective-CのAPI群となる各ソースコード、Pythonで記述されたビルド用スクリプトなどから成る一連のプログラムの総称です。その内、なかなか対応が厄介なのがビルド用のスクリプトです。特に多言語対応の問題に関してはここが最も手強いので、注意が必要です。

原則として、熟練のTitanium Mobile利用者は以下のルールを守って開発しています。

・プロジェクト名は半角英数字で指定、スペースや記号は混ぜない
・プロジェクトの保存先のフルパスに日本語などマルチバイトの文字を混ぜない
・JavaScriptや画像などのファイル名にスペースや日本語などマルチバイトの文字を混ぜない

これらのルールを破るとプログラム上の間違いはなくてもビルドが出来ない、といった事態に陥ることがあります。余計な時間を費やすのがあまり好きでない方は、このルールを守るよう心がけましょう。

ビルドスクリプトがマルチバイト文字に関するエラーになる場合は必ず

```python
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 110
```

のようなエラーメッセージがコンソールに表示されます。こうなった場合、上のルールを守っていないとどこで問題が発生しているのか探すのはとても大変です。

ビルドの他にも、例えばTitanium MobileにはXcodeでビルドできるようにするためのツール、transport.pyが付属しています。これもマルチバイト文字を含むパスがあると正常に動作しません。(もしかしたらこちらのスクリプトでうまくいくかもしれませんが https://gist.github.com/814181)

もし問題が起きてしまった場合は、上のルールに則っていないケースがないかどうかチェックしてください。

fixed typo

320
 <!-- TI_MANIFEST -->
 
 <application android:icon="@drawable/appicon"
-	android:label="@string/app_name" android:name="XXXXXApplication"
+	android:label="@string/appname" android:name="XXXXXApplication"
 	android:debuggable="false">
 
 	<!-- TI_APPLICATION -->
 	<activity android:name=".XXXXXActivity"
-		android:label="@string/app_name" android:theme="@style/Theme.Titanium"
+		android:label="@string/appname" android:theme="@style/Theme.Titanium"
 		android:configChanges="keyboardHidden|orientation">
 		<intent-filter>
 			<action android:name="android.intent.action.MAIN" />

はい、といいえの両方が答えです。

多言語対応についてはいくつかのレベルに分類できるので、整理して説明します。

(1)アプリの多言語対応

アプリの中の文言をOSの言語設定に合わせて出し分けるような多言語対応については、Titanium Mobileは専用の仕組みを持っています。Resourcesディレクトリ直下にi18nディレクトリを作成して、その下にjaやen、ko、zh_hans、zh_hantなどのディレクトリを設置、それぞれの中にstrings.xmlというファイルを置きます。

Resources
└──i18n
    ├── en
    │   └── strings.xml
    ├── ja
    │   └── strings.xml
    ├── ko
    │   └── strings.xml
    ├── zh_hans
    │   └── strings.xml
    └── zh_hant
        └── strings.xml

strings.xmlの書式は

<?xml version="1.0" encoding="UTF-8"?>
<resources>
  <string name="open_window">ウィンドウを開く</string>
</resources>

のようになります。これで、JavaScriptの中でL()関数を使ってname属性として指定した値を記述すれば、自動的にOSの言語設定によって文言を差し替えてくれます。

alert(L('open_window'));

用意した言語以外の設定になっていた場合は、アプリのデフォルト言語(通常はEnglish)を優先します。

ホーム画面に表示されるアプリの名称を多言語対応する場合はiOSとAndroidで方法が違うので注意してください。

iOSの場合はstrings.xmlと同じ階層にapp.xmlファイルを設置します。その中でappnameとして各言語のアプリ名を記述していきます。

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <string name="appname">日本語の名前</string>
</resources>

一方、Androidの場合はプロジェクトのディレクトリ直下にplatform/android/res/ディレクトリを作成し、その下に各言語用のディレクトリを「values-en」「values-ja」のように用意します。その下にstrings.xmlという名前でファイルを用意するのですが、ファイルの中身は上のiOS用のapp.xmlと同じです。ファイル名が違うので注意してください。

それから、AndroidManifest.xmlをカスタマイズする必要があります。一度Android用のapp.apkをビルドすると、プロジェクトのディレクトリ直下のbuild/android/にAndroidManifest.xmlが生成されます。これを上で作成したplatform/android直下にコピーしてください。コピーしたAndroidManifest.xmlの冒頭部分、android:labelを編集します(「XXXXX」は作成するアプリ毎に異なります)。

<!-- TI_MANIFEST -->

<application android:icon="@drawable/appicon"
    android:label="@string/appname" android:name="XXXXXApplication"
    android:debuggable="false">

    <!-- TI_APPLICATION -->
    <activity android:name=".XXXXXActivity"
        android:label="@string/appname" android:theme="@style/Theme.Titanium"
        android:configChanges="keyboardHidden|orientation">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

それから、iOSの裏技ですが、空のstrings.xmlを設置するだけでスイッチの表記が「On/Off」に(そうしないと「○/-」みたいになる)変更されます。

(2)Titanium Studioの多言語対応 *オススメしません…

Aptanaから作られたTitanium MobileのIDE、Titanium Studioですが、機能も豊富でEclipseに慣れた方には使いやすいと思います。しかしTitanium Studio自体は日本語化されていません。Eclipseベースなのでよく知られたやり方で表示を変更することができます。

ただし、安定して動作するとは限らないので、どうしても必要な場合のみ自己責任でお試しください。やり方は「Titanium Studio 日本語化」で検索すればすぐにヒットします。

(3)Titanium Mobile SDKの多言語対応

Titanium MobileはIDEであるTitanium StudioとJavaやObjective-CのAPI群となる各ソースコード、Pythonで記述されたビルド用スクリプトなどから成る一連のプログラムの総称です。その内、なかなか対応が厄介なのがビルド用のスクリプトです。特に多言語対応の問題に関してはここが最も手強いので、注意が必要です。

原則として、熟練のTitanium Mobile利用者は以下のルールを守って開発しています。

・プロジェクト名は半角英数字で指定、スペースや記号は混ぜない
・プロジェクトの保存先のフルパスに日本語などマルチバイトの文字を混ぜない
・JavaScriptや画像などのファイル名にスペースや日本語などマルチバイトの文字を混ぜない

これらのルールを破るとプログラム上の間違いはなくてもビルドが出来ない、といった事態に陥ることがあります。余計な時間を費やすのがあまり好きでない方は、このルールを守るよう心がけましょう。

ビルドスクリプトがマルチバイト文字に関するエラーになる場合は必ず

UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 110

のようなエラーメッセージがコンソールに表示されます。こうなった場合、上のルールを守っていないとどこで問題が発生しているのか探すのはとても大変です。

ビルドの他にも、例えばTitanium MobileにはXcodeでビルドできるようにするためのツール、transport.pyが付属しています。これもマルチバイト文字を含むパスがあると正常に動作しません。(もしかしたらこちらのスクリプトでうまくいくかもしれませんが https://gist.github.com/814181)

もし問題が起きてしまった場合は、上のルールに則っていないケースがないかどうかチェックしてください。

はい、といいえの両方が答えです。

多言語対応についてはいくつかのレベルに分類できるので、整理して説明します。

(1)アプリの多言語対応

アプリの中の文言をOSの言語設定に合わせて出し分けるような多言語対応については、Titanium Mobileは専用の仕組みを持っています。Resourcesディレクトリ直下にi18nディレクトリを作成して、その下にjaやen、ko、zh_hans、zh_hantなどのディレクトリを設置、それぞれの中にstrings.xmlというファイルを置きます。

```
Resources
└──i18n
    ├── en
    │   └── strings.xml
    ├── ja
    │   └── strings.xml
    ├── ko
    │   └── strings.xml
    ├── zh_hans
    │   └── strings.xml
    └── zh_hant
        └── strings.xml
```

strings.xmlの書式は

```
<?xml version="1.0" encoding="UTF-8"?>
<resources>
  <string name="open_window">ウィンドウを開く</string>
</resources>
```

のようになります。これで、JavaScriptの中でL()関数を使ってname属性として指定した値を記述すれば、自動的にOSの言語設定によって文言を差し替えてくれます。

```javascript
alert(L('open_window'));
```

用意した言語以外の設定になっていた場合は、アプリのデフォルト言語(通常はEnglish)を優先します。

ホーム画面に表示されるアプリの名称を多言語対応する場合はiOSとAndroidで方法が違うので注意してください。

iOSの場合はstrings.xmlと同じ階層にapp.xmlファイルを設置します。その中でappnameとして各言語のアプリ名を記述していきます。

```
<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <string name="appname">日本語の名前</string>
</resources>
```

一方、Androidの場合はプロジェクトのディレクトリ直下にplatform/android/res/ディレクトリを作成し、その下に各言語用のディレクトリを「values-en」「values-ja」のように用意します。その下にstrings.xmlという名前でファイルを用意するのですが、ファイルの中身は上のiOS用のapp.xmlと同じです。ファイル名が違うので注意してください。

それから、AndroidManifest.xmlをカスタマイズする必要があります。一度Android用のapp.apkをビルドすると、プロジェクトのディレクトリ直下のbuild/android/にAndroidManifest.xmlが生成されます。これを上で作成したplatform/android直下にコピーしてください。コピーしたAndroidManifest.xmlの冒頭部分、android:labelを編集します(「XXXXX」は作成するアプリ毎に異なります)。

```
<!-- TI_MANIFEST -->

<application android:icon="@drawable/appicon"
	android:label="@string/appname" android:name="XXXXXApplication"
	android:debuggable="false">

	<!-- TI_APPLICATION -->
	<activity android:name=".XXXXXActivity"
		android:label="@string/appname" android:theme="@style/Theme.Titanium"
		android:configChanges="keyboardHidden|orientation">
		<intent-filter>
			<action android:name="android.intent.action.MAIN" />
			        <category android:name="android.intent.category.LAUNCHER" />
		</intent-filter>
	</activity>
```


それから、iOSの裏技ですが、空のstrings.xmlを設置するだけでスイッチの表記が「On/Off」に(そうしないと「○/-」みたいになる)変更されます。

(2)Titanium Studioの多言語対応 *オススメしません…

Aptanaから作られたTitanium MobileのIDE、Titanium Studioですが、機能も豊富でEclipseに慣れた方には使いやすいと思います。しかしTitanium Studio自体は日本語化されていません。Eclipseベースなのでよく知られたやり方で表示を変更することができます。

ただし、安定して動作するとは限らないので、どうしても必要な場合のみ自己責任でお試しください。やり方は「Titanium Studio 日本語化」で検索すればすぐにヒットします。

(3)Titanium Mobile SDKの多言語対応

Titanium MobileはIDEであるTitanium StudioとJavaやObjective-CのAPI群となる各ソースコード、Pythonで記述されたビルド用スクリプトなどから成る一連のプログラムの総称です。その内、なかなか対応が厄介なのがビルド用のスクリプトです。特に多言語対応の問題に関してはここが最も手強いので、注意が必要です。

原則として、熟練のTitanium Mobile利用者は以下のルールを守って開発しています。

・プロジェクト名は半角英数字で指定、スペースや記号は混ぜない
・プロジェクトの保存先のフルパスに日本語などマルチバイトの文字を混ぜない
・JavaScriptや画像などのファイル名にスペースや日本語などマルチバイトの文字を混ぜない

これらのルールを破るとプログラム上の間違いはなくてもビルドが出来ない、といった事態に陥ることがあります。余計な時間を費やすのがあまり好きでない方は、このルールを守るよう心がけましょう。

ビルドスクリプトがマルチバイト文字に関するエラーになる場合は必ず

```python
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 110
```

のようなエラーメッセージがコンソールに表示されます。こうなった場合、上のルールを守っていないとどこで問題が発生しているのか探すのはとても大変です。

ビルドの他にも、例えばTitanium MobileにはXcodeでビルドできるようにするためのツール、transport.pyが付属しています。これもマルチバイト文字を含むパスがあると正常に動作しません。(もしかしたらこちらのスクリプトでうまくいくかもしれませんが https://gist.github.com/814181)

もし問題が起きてしまった場合は、上のルールに則っていないケースがないかどうかチェックしてください。

XMLのtypoを修正

320
 		android:configChanges="keyboardHidden|orientation">
 		<intent-filter>
 			<action android:name="android.intent.action.MAIN" />
-			        category android:name="android.intent.category.LAUNCHER" />
+			        <category android:name="android.intent.category.LAUNCHER" />
 		</intent-filter>
 	</activity>
 ```

はい、といいえの両方が答えです。

多言語対応についてはいくつかのレベルに分類できるので、整理して説明します。

(1)アプリの多言語対応

アプリの中の文言をOSの言語設定に合わせて出し分けるような多言語対応については、Titanium Mobileは専用の仕組みを持っています。Resourcesディレクトリ直下にi18nディレクトリを作成して、その下にjaやen、ko、zh_hans、zh_hantなどのディレクトリを設置、それぞれの中にstrings.xmlというファイルを置きます。

Resources
└──i18n
    ├── en
    │   └── strings.xml
    ├── ja
    │   └── strings.xml
    ├── ko
    │   └── strings.xml
    ├── zh_hans
    │   └── strings.xml
    └── zh_hant
        └── strings.xml

strings.xmlの書式は

<?xml version="1.0" encoding="UTF-8"?>
<resources>
  <string name="open_window">ウィンドウを開く</string>
</resources>

のようになります。これで、JavaScriptの中でL()関数を使ってname属性として指定した値を記述すれば、自動的にOSの言語設定によって文言を差し替えてくれます。

alert(L('open_window'));

用意した言語以外の設定になっていた場合は、アプリのデフォルト言語(通常はEnglish)を優先します。

ホーム画面に表示されるアプリの名称を多言語対応する場合はiOSとAndroidで方法が違うので注意してください。

iOSの場合はstrings.xmlと同じ階層にapp.xmlファイルを設置します。その中でappnameとして各言語のアプリ名を記述していきます。

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <string name="appname">日本語の名前</string>
</resources>

一方、Androidの場合はプロジェクトのディレクトリ直下にplatform/android/res/ディレクトリを作成し、その下に各言語用のディレクトリを「values-en」「values-ja」のように用意します。その下にstrings.xmlという名前でファイルを用意するのですが、ファイルの中身は上のiOS用のapp.xmlと同じです。ファイル名が違うので注意してください。

それから、AndroidManifest.xmlをカスタマイズする必要があります。一度Android用のapp.apkをビルドすると、プロジェクトのディレクトリ直下のbuild/android/にAndroidManifest.xmlが生成されます。これを上で作成したplatform/android直下にコピーしてください。コピーしたAndroidManifest.xmlの冒頭部分、android:labelを編集します(「XXXXX」は作成するアプリ毎に異なります)。

<!-- TI_MANIFEST -->

<application android:icon="@drawable/appicon"
    android:label="@string/app_name" android:name="XXXXXApplication"
    android:debuggable="false">

    <!-- TI_APPLICATION -->
    <activity android:name=".XXXXXActivity"
        android:label="@string/app_name" android:theme="@style/Theme.Titanium"
        android:configChanges="keyboardHidden|orientation">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

それから、iOSの裏技ですが、空のstrings.xmlを設置するだけでスイッチの表記が「On/Off」に(そうしないと「○/-」みたいになる)変更されます。

(2)Titanium Studioの多言語対応 *オススメしません…

Aptanaから作られたTitanium MobileのIDE、Titanium Studioですが、機能も豊富でEclipseに慣れた方には使いやすいと思います。しかしTitanium Studio自体は日本語化されていません。Eclipseベースなのでよく知られたやり方で表示を変更することができます。

ただし、安定して動作するとは限らないので、どうしても必要な場合のみ自己責任でお試しください。やり方は「Titanium Studio 日本語化」で検索すればすぐにヒットします。

(3)Titanium Mobile SDKの多言語対応

Titanium MobileはIDEであるTitanium StudioとJavaやObjective-CのAPI群となる各ソースコード、Pythonで記述されたビルド用スクリプトなどから成る一連のプログラムの総称です。その内、なかなか対応が厄介なのがビルド用のスクリプトです。特に多言語対応の問題に関してはここが最も手強いので、注意が必要です。

原則として、熟練のTitanium Mobile利用者は以下のルールを守って開発しています。

・プロジェクト名は半角英数字で指定、スペースや記号は混ぜない
・プロジェクトの保存先のフルパスに日本語などマルチバイトの文字を混ぜない
・JavaScriptや画像などのファイル名にスペースや日本語などマルチバイトの文字を混ぜない

これらのルールを破るとプログラム上の間違いはなくてもビルドが出来ない、といった事態に陥ることがあります。余計な時間を費やすのがあまり好きでない方は、このルールを守るよう心がけましょう。

ビルドスクリプトがマルチバイト文字に関するエラーになる場合は必ず

UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 110

のようなエラーメッセージがコンソールに表示されます。こうなった場合、上のルールを守っていないとどこで問題が発生しているのか探すのはとても大変です。

ビルドの他にも、例えばTitanium MobileにはXcodeでビルドできるようにするためのツール、transport.pyが付属しています。これもマルチバイト文字を含むパスがあると正常に動作しません。(もしかしたらこちらのスクリプトでうまくいくかもしれませんが https://gist.github.com/814181)

もし問題が起きてしまった場合は、上のルールに則っていないケースがないかどうかチェックしてください。

はい、といいえの両方が答えです。

多言語対応についてはいくつかのレベルに分類できるので、整理して説明します。

(1)アプリの多言語対応

アプリの中の文言をOSの言語設定に合わせて出し分けるような多言語対応については、Titanium Mobileは専用の仕組みを持っています。Resourcesディレクトリ直下にi18nディレクトリを作成して、その下にjaやen、ko、zh_hans、zh_hantなどのディレクトリを設置、それぞれの中にstrings.xmlというファイルを置きます。

```
Resources
└──i18n
    ├── en
    │   └── strings.xml
    ├── ja
    │   └── strings.xml
    ├── ko
    │   └── strings.xml
    ├── zh_hans
    │   └── strings.xml
    └── zh_hant
        └── strings.xml
```

strings.xmlの書式は

```
<?xml version="1.0" encoding="UTF-8"?>
<resources>
  <string name="open_window">ウィンドウを開く</string>
</resources>
```

のようになります。これで、JavaScriptの中でL()関数を使ってname属性として指定した値を記述すれば、自動的にOSの言語設定によって文言を差し替えてくれます。

```javascript
alert(L('open_window'));
```

用意した言語以外の設定になっていた場合は、アプリのデフォルト言語(通常はEnglish)を優先します。

ホーム画面に表示されるアプリの名称を多言語対応する場合はiOSとAndroidで方法が違うので注意してください。

iOSの場合はstrings.xmlと同じ階層にapp.xmlファイルを設置します。その中でappnameとして各言語のアプリ名を記述していきます。

```
<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <string name="appname">日本語の名前</string>
</resources>
```

一方、Androidの場合はプロジェクトのディレクトリ直下にplatform/android/res/ディレクトリを作成し、その下に各言語用のディレクトリを「values-en」「values-ja」のように用意します。その下にstrings.xmlという名前でファイルを用意するのですが、ファイルの中身は上のiOS用のapp.xmlと同じです。ファイル名が違うので注意してください。

それから、AndroidManifest.xmlをカスタマイズする必要があります。一度Android用のapp.apkをビルドすると、プロジェクトのディレクトリ直下のbuild/android/にAndroidManifest.xmlが生成されます。これを上で作成したplatform/android直下にコピーしてください。コピーしたAndroidManifest.xmlの冒頭部分、android:labelを編集します(「XXXXX」は作成するアプリ毎に異なります)。

```
<!-- TI_MANIFEST -->

<application android:icon="@drawable/appicon"
	android:label="@string/app_name" android:name="XXXXXApplication"
	android:debuggable="false">

	<!-- TI_APPLICATION -->
	<activity android:name=".XXXXXActivity"
		android:label="@string/app_name" android:theme="@style/Theme.Titanium"
		android:configChanges="keyboardHidden|orientation">
		<intent-filter>
			<action android:name="android.intent.action.MAIN" />
			        <category android:name="android.intent.category.LAUNCHER" />
		</intent-filter>
	</activity>
```


それから、iOSの裏技ですが、空のstrings.xmlを設置するだけでスイッチの表記が「On/Off」に(そうしないと「○/-」みたいになる)変更されます。

(2)Titanium Studioの多言語対応 *オススメしません…

Aptanaから作られたTitanium MobileのIDE、Titanium Studioですが、機能も豊富でEclipseに慣れた方には使いやすいと思います。しかしTitanium Studio自体は日本語化されていません。Eclipseベースなのでよく知られたやり方で表示を変更することができます。

ただし、安定して動作するとは限らないので、どうしても必要な場合のみ自己責任でお試しください。やり方は「Titanium Studio 日本語化」で検索すればすぐにヒットします。

(3)Titanium Mobile SDKの多言語対応

Titanium MobileはIDEであるTitanium StudioとJavaやObjective-CのAPI群となる各ソースコード、Pythonで記述されたビルド用スクリプトなどから成る一連のプログラムの総称です。その内、なかなか対応が厄介なのがビルド用のスクリプトです。特に多言語対応の問題に関してはここが最も手強いので、注意が必要です。

原則として、熟練のTitanium Mobile利用者は以下のルールを守って開発しています。

・プロジェクト名は半角英数字で指定、スペースや記号は混ぜない
・プロジェクトの保存先のフルパスに日本語などマルチバイトの文字を混ぜない
・JavaScriptや画像などのファイル名にスペースや日本語などマルチバイトの文字を混ぜない

これらのルールを破るとプログラム上の間違いはなくてもビルドが出来ない、といった事態に陥ることがあります。余計な時間を費やすのがあまり好きでない方は、このルールを守るよう心がけましょう。

ビルドスクリプトがマルチバイト文字に関するエラーになる場合は必ず

```python
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 110
```

のようなエラーメッセージがコンソールに表示されます。こうなった場合、上のルールを守っていないとどこで問題が発生しているのか探すのはとても大変です。

ビルドの他にも、例えばTitanium MobileにはXcodeでビルドできるようにするためのツール、transport.pyが付属しています。これもマルチバイト文字を含むパスがあると正常に動作しません。(もしかしたらこちらのスクリプトでうまくいくかもしれませんが https://gist.github.com/814181)

もし問題が起きてしまった場合は、上のルールに則っていないケースがないかどうかチェックしてください。

Androidの情報を更新

320
 
 用意した言語以外の設定になっていた場合は、アプリのデフォルト言語(通常はEnglish)を優先します。
 
-また、ホーム画面に表示されるアプリの名称を多言語対応する場合は、strings.xmlと同じ階層にapp.xmlファイルを設置します。その中でappnameとして各言語のアプリ名を記述していきます。
+ホーム画面に表示されるアプリの名称を多言語対応する場合はiOSとAndroidで方法が違うので注意してください。
 
+iOSの場合はstrings.xmlと同じ階層にapp.xmlファイルを設置します。その中でappnameとして各言語のアプリ名を記述していきます。
+
 ```
 <?xml version="1.0" encoding="UTF-8"?>
 <resources>
 </resources>
 ```
 
-iOSの裏技ですが、空のstrings.xmlを設置するだけでスイッチの表記が「On/Off」に(そうしないと「○/-」みたいになる)変更されます。
+一方、Androidの場合はプロジェクトのディレクトリ直下にplatform/android/res/ディレクトリを作成し、その下に各言語用のディレクトリを「values-en」「values-ja」のように用意します。その下にstrings.xmlという名前でファイルを用意するのですが、ファイルの中身は上のiOS用のapp.xmlと同じです。ファイル名が違うので注意してください。
+
+それから、AndroidManifest.xmlをカスタマイズする必要があります。一度Android用のapp.apkをビルドすると、プロジェクトのディレクトリ直下のbuild/android/にAndroidManifest.xmlが生成されます。これを上で作成したplatform/android直下にコピーしてください。コピーしたAndroidManifest.xmlの冒頭部分、android:labelを編集します(「XXXXX」は作成するアプリ毎に異なります)。
+
+```
+<!-- TI_MANIFEST -->
+
+<application android:icon="@drawable/appicon"
+	android:label="@string/app_name" android:name="XXXXXApplication"
+	android:debuggable="false">
+
+	<!-- TI_APPLICATION -->
+	<activity android:name=".XXXXXActivity"
+		android:label="@string/app_name" android:theme="@style/Theme.Titanium"
+		android:configChanges="keyboardHidden|orientation">
+		<intent-filter>
+			<action android:name="android.intent.action.MAIN" />
+			        category android:name="android.intent.category.LAUNCHER" />
+		</intent-filter>
+	</activity>
+```
+
+
+それから、iOSの裏技ですが、空のstrings.xmlを設置するだけでスイッチの表記が「On/Off」に(そうしないと「○/-」みたいになる)変更されます。
 
 (2)Titanium Studioの多言語対応 *オススメしません…
 

はい、といいえの両方が答えです。

多言語対応についてはいくつかのレベルに分類できるので、整理して説明します。

(1)アプリの多言語対応

アプリの中の文言をOSの言語設定に合わせて出し分けるような多言語対応については、Titanium Mobileは専用の仕組みを持っています。Resourcesディレクトリ直下にi18nディレクトリを作成して、その下にjaやen、ko、zh_hans、zh_hantなどのディレクトリを設置、それぞれの中にstrings.xmlというファイルを置きます。

Resources
└──i18n
    ├── en
    │   └── strings.xml
    ├── ja
    │   └── strings.xml
    ├── ko
    │   └── strings.xml
    ├── zh_hans
    │   └── strings.xml
    └── zh_hant
        └── strings.xml

strings.xmlの書式は

<?xml version="1.0" encoding="UTF-8"?>
<resources>
  <string name="open_window">ウィンドウを開く</string>
</resources>

のようになります。これで、JavaScriptの中でL()関数を使ってname属性として指定した値を記述すれば、自動的にOSの言語設定によって文言を差し替えてくれます。

alert(L('open_window'));

用意した言語以外の設定になっていた場合は、アプリのデフォルト言語(通常はEnglish)を優先します。

ホーム画面に表示されるアプリの名称を多言語対応する場合はiOSとAndroidで方法が違うので注意してください。

iOSの場合はstrings.xmlと同じ階層にapp.xmlファイルを設置します。その中でappnameとして各言語のアプリ名を記述していきます。

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <string name="appname">日本語の名前</string>
</resources>

一方、Androidの場合はプロジェクトのディレクトリ直下にplatform/android/res/ディレクトリを作成し、その下に各言語用のディレクトリを「values-en」「values-ja」のように用意します。その下にstrings.xmlという名前でファイルを用意するのですが、ファイルの中身は上のiOS用のapp.xmlと同じです。ファイル名が違うので注意してください。

それから、AndroidManifest.xmlをカスタマイズする必要があります。一度Android用のapp.apkをビルドすると、プロジェクトのディレクトリ直下のbuild/android/にAndroidManifest.xmlが生成されます。これを上で作成したplatform/android直下にコピーしてください。コピーしたAndroidManifest.xmlの冒頭部分、android:labelを編集します(「XXXXX」は作成するアプリ毎に異なります)。

<!-- TI_MANIFEST -->

<application android:icon="@drawable/appicon"
    android:label="@string/app_name" android:name="XXXXXApplication"
    android:debuggable="false">

    <!-- TI_APPLICATION -->
    <activity android:name=".XXXXXActivity"
        android:label="@string/app_name" android:theme="@style/Theme.Titanium"
        android:configChanges="keyboardHidden|orientation">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
                    category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

それから、iOSの裏技ですが、空のstrings.xmlを設置するだけでスイッチの表記が「On/Off」に(そうしないと「○/-」みたいになる)変更されます。

(2)Titanium Studioの多言語対応 *オススメしません…

Aptanaから作られたTitanium MobileのIDE、Titanium Studioですが、機能も豊富でEclipseに慣れた方には使いやすいと思います。しかしTitanium Studio自体は日本語化されていません。Eclipseベースなのでよく知られたやり方で表示を変更することができます。

ただし、安定して動作するとは限らないので、どうしても必要な場合のみ自己責任でお試しください。やり方は「Titanium Studio 日本語化」で検索すればすぐにヒットします。

(3)Titanium Mobile SDKの多言語対応

Titanium MobileはIDEであるTitanium StudioとJavaやObjective-CのAPI群となる各ソースコード、Pythonで記述されたビルド用スクリプトなどから成る一連のプログラムの総称です。その内、なかなか対応が厄介なのがビルド用のスクリプトです。特に多言語対応の問題に関してはここが最も手強いので、注意が必要です。

原則として、熟練のTitanium Mobile利用者は以下のルールを守って開発しています。

・プロジェクト名は半角英数字で指定、スペースや記号は混ぜない
・プロジェクトの保存先のフルパスに日本語などマルチバイトの文字を混ぜない
・JavaScriptや画像などのファイル名にスペースや日本語などマルチバイトの文字を混ぜない

これらのルールを破るとプログラム上の間違いはなくてもビルドが出来ない、といった事態に陥ることがあります。余計な時間を費やすのがあまり好きでない方は、このルールを守るよう心がけましょう。

ビルドスクリプトがマルチバイト文字に関するエラーになる場合は必ず

UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 110

のようなエラーメッセージがコンソールに表示されます。こうなった場合、上のルールを守っていないとどこで問題が発生しているのか探すのはとても大変です。

ビルドの他にも、例えばTitanium MobileにはXcodeでビルドできるようにするためのツール、transport.pyが付属しています。これもマルチバイト文字を含むパスがあると正常に動作しません。(もしかしたらこちらのスクリプトでうまくいくかもしれませんが https://gist.github.com/814181)

もし問題が起きてしまった場合は、上のルールに則っていないケースがないかどうかチェックしてください。

はい、といいえの両方が答えです。

多言語対応についてはいくつかのレベルに分類できるので、整理して説明します。

(1)アプリの多言語対応

アプリの中の文言をOSの言語設定に合わせて出し分けるような多言語対応については、Titanium Mobileは専用の仕組みを持っています。Resourcesディレクトリ直下にi18nディレクトリを作成して、その下にjaやen、ko、zh_hans、zh_hantなどのディレクトリを設置、それぞれの中にstrings.xmlというファイルを置きます。

```
Resources
└──i18n
    ├── en
    │   └── strings.xml
    ├── ja
    │   └── strings.xml
    ├── ko
    │   └── strings.xml
    ├── zh_hans
    │   └── strings.xml
    └── zh_hant
        └── strings.xml
```

strings.xmlの書式は

```
<?xml version="1.0" encoding="UTF-8"?>
<resources>
  <string name="open_window">ウィンドウを開く</string>
</resources>
```

のようになります。これで、JavaScriptの中でL()関数を使ってname属性として指定した値を記述すれば、自動的にOSの言語設定によって文言を差し替えてくれます。

```javascript
alert(L('open_window'));
```

用意した言語以外の設定になっていた場合は、アプリのデフォルト言語(通常はEnglish)を優先します。

ホーム画面に表示されるアプリの名称を多言語対応する場合はiOSとAndroidで方法が違うので注意してください。

iOSの場合はstrings.xmlと同じ階層にapp.xmlファイルを設置します。その中でappnameとして各言語のアプリ名を記述していきます。

```
<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <string name="appname">日本語の名前</string>
</resources>
```

一方、Androidの場合はプロジェクトのディレクトリ直下にplatform/android/res/ディレクトリを作成し、その下に各言語用のディレクトリを「values-en」「values-ja」のように用意します。その下にstrings.xmlという名前でファイルを用意するのですが、ファイルの中身は上のiOS用のapp.xmlと同じです。ファイル名が違うので注意してください。

それから、AndroidManifest.xmlをカスタマイズする必要があります。一度Android用のapp.apkをビルドすると、プロジェクトのディレクトリ直下のbuild/android/にAndroidManifest.xmlが生成されます。これを上で作成したplatform/android直下にコピーしてください。コピーしたAndroidManifest.xmlの冒頭部分、android:labelを編集します(「XXXXX」は作成するアプリ毎に異なります)。

```
<!-- TI_MANIFEST -->

<application android:icon="@drawable/appicon"
	android:label="@string/app_name" android:name="XXXXXApplication"
	android:debuggable="false">

	<!-- TI_APPLICATION -->
	<activity android:name=".XXXXXActivity"
		android:label="@string/app_name" android:theme="@style/Theme.Titanium"
		android:configChanges="keyboardHidden|orientation">
		<intent-filter>
			<action android:name="android.intent.action.MAIN" />
			        category android:name="android.intent.category.LAUNCHER" />
		</intent-filter>
	</activity>
```


それから、iOSの裏技ですが、空のstrings.xmlを設置するだけでスイッチの表記が「On/Off」に(そうしないと「○/-」みたいになる)変更されます。

(2)Titanium Studioの多言語対応 *オススメしません…

Aptanaから作られたTitanium MobileのIDE、Titanium Studioですが、機能も豊富でEclipseに慣れた方には使いやすいと思います。しかしTitanium Studio自体は日本語化されていません。Eclipseベースなのでよく知られたやり方で表示を変更することができます。

ただし、安定して動作するとは限らないので、どうしても必要な場合のみ自己責任でお試しください。やり方は「Titanium Studio 日本語化」で検索すればすぐにヒットします。

(3)Titanium Mobile SDKの多言語対応

Titanium MobileはIDEであるTitanium StudioとJavaやObjective-CのAPI群となる各ソースコード、Pythonで記述されたビルド用スクリプトなどから成る一連のプログラムの総称です。その内、なかなか対応が厄介なのがビルド用のスクリプトです。特に多言語対応の問題に関してはここが最も手強いので、注意が必要です。

原則として、熟練のTitanium Mobile利用者は以下のルールを守って開発しています。

・プロジェクト名は半角英数字で指定、スペースや記号は混ぜない
・プロジェクトの保存先のフルパスに日本語などマルチバイトの文字を混ぜない
・JavaScriptや画像などのファイル名にスペースや日本語などマルチバイトの文字を混ぜない

これらのルールを破るとプログラム上の間違いはなくてもビルドが出来ない、といった事態に陥ることがあります。余計な時間を費やすのがあまり好きでない方は、このルールを守るよう心がけましょう。

ビルドスクリプトがマルチバイト文字に関するエラーになる場合は必ず

```python
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 110
```

のようなエラーメッセージがコンソールに表示されます。こうなった場合、上のルールを守っていないとどこで問題が発生しているのか探すのはとても大変です。

ビルドの他にも、例えばTitanium MobileにはXcodeでビルドできるようにするためのツール、transport.pyが付属しています。これもマルチバイト文字を含むパスがあると正常に動作しません。(もしかしたらこちらのスクリプトでうまくいくかもしれませんが https://gist.github.com/814181)

もし問題が起きてしまった場合は、上のルールに則っていないケースがないかどうかチェックしてください。

回答を投稿

はい、といいえの両方が答えです。

多言語対応についてはいくつかのレベルに分類できるので、整理して説明します。

(1)アプリの多言語対応

アプリの中の文言をOSの言語設定に合わせて出し分けるような多言語対応については、Titanium Mobileは専用の仕組みを持っています。Resourcesディレクトリ直下にi18nディレクトリを作成して、その下にjaやen、ko、zh_hans、zh_hantなどのディレクトリを設置、それぞれの中にstrings.xmlというファイルを置きます。

Resources
└──i18n
    ├── en
    │   └── strings.xml
    ├── ja
    │   └── strings.xml
    ├── ko
    │   └── strings.xml
    ├── zh_hans
    │   └── strings.xml
    └── zh_hant
        └── strings.xml

strings.xmlの書式は

<?xml version="1.0" encoding="UTF-8"?>
<resources>
  <string name="open_window">ウィンドウを開く</string>
</resources>

のようになります。これで、JavaScriptの中でL()関数を使ってname属性として指定した値を記述すれば、自動的にOSの言語設定によって文言を差し替えてくれます。

alert(L('open_window'));

用意した言語以外の設定になっていた場合は、アプリのデフォルト言語(通常はEnglish)を優先します。

また、ホーム画面に表示されるアプリの名称を多言語対応する場合は、strings.xmlと同じ階層にapp.xmlファイルを設置します。その中でappnameとして各言語のアプリ名を記述していきます。

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <string name="appname">日本語の名前</string>
</resources>

iOSの裏技ですが、空のstrings.xmlを設置するだけでスイッチの表記が「On/Off」に(そうしないと「○/-」みたいになる)変更されます。

(2)Titanium Studioの多言語対応 *オススメしません…

Aptanaから作られたTitanium MobileのIDE、Titanium Studioですが、機能も豊富でEclipseに慣れた方には使いやすいと思います。しかしTitanium Studio自体は日本語化されていません。Eclipseベースなのでよく知られたやり方で表示を変更することができます。

ただし、安定して動作するとは限らないので、どうしても必要な場合のみ自己責任でお試しください。やり方は「Titanium Studio 日本語化」で検索すればすぐにヒットします。

(3)Titanium Mobile SDKの多言語対応

Titanium MobileはIDEであるTitanium StudioとJavaやObjective-CのAPI群となる各ソースコード、Pythonで記述されたビルド用スクリプトなどから成る一連のプログラムの総称です。その内、なかなか対応が厄介なのがビルド用のスクリプトです。特に多言語対応の問題に関してはここが最も手強いので、注意が必要です。

原則として、熟練のTitanium Mobile利用者は以下のルールを守って開発しています。

・プロジェクト名は半角英数字で指定、スペースや記号は混ぜない
・プロジェクトの保存先のフルパスに日本語などマルチバイトの文字を混ぜない
・JavaScriptや画像などのファイル名にスペースや日本語などマルチバイトの文字を混ぜない

これらのルールを破るとプログラム上の間違いはなくてもビルドが出来ない、といった事態に陥ることがあります。余計な時間を費やすのがあまり好きでない方は、このルールを守るよう心がけましょう。

ビルドスクリプトがマルチバイト文字に関するエラーになる場合は必ず

UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 110

のようなエラーメッセージがコンソールに表示されます。こうなった場合、上のルールを守っていないとどこで問題が発生しているのか探すのはとても大変です。

ビルドの他にも、例えばTitanium MobileにはXcodeでビルドできるようにするためのツール、transport.pyが付属しています。これもマルチバイト文字を含むパスがあると正常に動作しません。(もしかしたらこちらのスクリプトでうまくいくかもしれませんが https://gist.github.com/814181)

もし問題が起きてしまった場合は、上のルールに則っていないケースがないかどうかチェックしてください。

はい、といいえの両方が答えです。

多言語対応についてはいくつかのレベルに分類できるので、整理して説明します。

(1)アプリの多言語対応

アプリの中の文言をOSの言語設定に合わせて出し分けるような多言語対応については、Titanium Mobileは専用の仕組みを持っています。Resourcesディレクトリ直下にi18nディレクトリを作成して、その下にjaやen、ko、zh_hans、zh_hantなどのディレクトリを設置、それぞれの中にstrings.xmlというファイルを置きます。

```
Resources
└──i18n
    ├── en
    │   └── strings.xml
    ├── ja
    │   └── strings.xml
    ├── ko
    │   └── strings.xml
    ├── zh_hans
    │   └── strings.xml
    └── zh_hant
        └── strings.xml
```

strings.xmlの書式は

```
<?xml version="1.0" encoding="UTF-8"?>
<resources>
  <string name="open_window">ウィンドウを開く</string>
</resources>
```

のようになります。これで、JavaScriptの中でL()関数を使ってname属性として指定した値を記述すれば、自動的にOSの言語設定によって文言を差し替えてくれます。

```javascript
alert(L('open_window'));
```

用意した言語以外の設定になっていた場合は、アプリのデフォルト言語(通常はEnglish)を優先します。

また、ホーム画面に表示されるアプリの名称を多言語対応する場合は、strings.xmlと同じ階層にapp.xmlファイルを設置します。その中でappnameとして各言語のアプリ名を記述していきます。

```
<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <string name="appname">日本語の名前</string>
</resources>
```

iOSの裏技ですが、空のstrings.xmlを設置するだけでスイッチの表記が「On/Off」に(そうしないと「○/-」みたいになる)変更されます。

(2)Titanium Studioの多言語対応 *オススメしません…

Aptanaから作られたTitanium MobileのIDE、Titanium Studioですが、機能も豊富でEclipseに慣れた方には使いやすいと思います。しかしTitanium Studio自体は日本語化されていません。Eclipseベースなのでよく知られたやり方で表示を変更することができます。

ただし、安定して動作するとは限らないので、どうしても必要な場合のみ自己責任でお試しください。やり方は「Titanium Studio 日本語化」で検索すればすぐにヒットします。

(3)Titanium Mobile SDKの多言語対応

Titanium MobileはIDEであるTitanium StudioとJavaやObjective-CのAPI群となる各ソースコード、Pythonで記述されたビルド用スクリプトなどから成る一連のプログラムの総称です。その内、なかなか対応が厄介なのがビルド用のスクリプトです。特に多言語対応の問題に関してはここが最も手強いので、注意が必要です。

原則として、熟練のTitanium Mobile利用者は以下のルールを守って開発しています。

・プロジェクト名は半角英数字で指定、スペースや記号は混ぜない
・プロジェクトの保存先のフルパスに日本語などマルチバイトの文字を混ぜない
・JavaScriptや画像などのファイル名にスペースや日本語などマルチバイトの文字を混ぜない

これらのルールを破るとプログラム上の間違いはなくてもビルドが出来ない、といった事態に陥ることがあります。余計な時間を費やすのがあまり好きでない方は、このルールを守るよう心がけましょう。

ビルドスクリプトがマルチバイト文字に関するエラーになる場合は必ず

```python
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 110
```

のようなエラーメッセージがコンソールに表示されます。こうなった場合、上のルールを守っていないとどこで問題が発生しているのか探すのはとても大変です。

ビルドの他にも、例えばTitanium MobileにはXcodeでビルドできるようにするためのツール、transport.pyが付属しています。これもマルチバイト文字を含むパスがあると正常に動作しません。(もしかしたらこちらのスクリプトでうまくいくかもしれませんが https://gist.github.com/814181)

もし問題が起きてしまった場合は、上のルールに則っていないケースがないかどうかチェックしてください。