[PR]
2024年11月21日
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ローカライズ用のフォルダ名
2009年03月25日
XcodeでLocalizable.stringsの情報を見るとローカリゼーションを追加というボタンがあります。
英語、日本語、フランス語、ドイツ語についてはボタンを押した後に選択肢があるので簡単に追加できます。今回の1.7.0へのバージョンアップでKigenの内部表示くらいは機械翻訳でもいいからフランス語やドイツ語にも対応させようと思い、某翻訳サイトを覗いてみると、イタリア語やスペイン語も翻訳できるタブがありました。イタリアの有料版ユーザーもいることだし、このあたりも対応させてみようかとは思ってはみたものの、選択で追加できないものはどんな名前を付ければ認識してもらえるのだろうという疑問が発生しました。まあとりあえず駄目もとで試してみるかと、イタリア語はItalian、スペイン語はSpanishで追加をしてみたところ、あっさり認識されました。全部の言語が英語での言語名で認識してくれるのかはわかりませんが、少なくともイタリア語とスペイン語については実機でも動いたため、これで問題無いようです。
英語、日本語、フランス語、ドイツ語についてはボタンを押した後に選択肢があるので簡単に追加できます。今回の1.7.0へのバージョンアップでKigenの内部表示くらいは機械翻訳でもいいからフランス語やドイツ語にも対応させようと思い、某翻訳サイトを覗いてみると、イタリア語やスペイン語も翻訳できるタブがありました。イタリアの有料版ユーザーもいることだし、このあたりも対応させてみようかとは思ってはみたものの、選択で追加できないものはどんな名前を付ければ認識してもらえるのだろうという疑問が発生しました。まあとりあえず駄目もとで試してみるかと、イタリア語はItalian、スペイン語はSpanishで追加をしてみたところ、あっさり認識されました。全部の言語が英語での言語名で認識してくれるのかはわかりませんが、少なくともイタリア語とスペイン語については実機でも動いたため、これで問題無いようです。
PR
実機でのローカライズに失敗する場合
2009年01月04日
以前の記事で文字列のローカライズについて書きましたが、あれだけでは不完全でうまく動かない場合があります。これは自分がはまっていた問題なのですが、シミュレーターでは日本語表示されるのに、なぜか実機では英語で表示されるという、何とも中途半端な問題が発生することがあります。この問題の解決方法がようやく見つかりました。
解決方法
これで実機でも日本語表示が行えるようになります。なぜか実機ではローカライズがうまくいかないという場合はお試しあれ。
解決方法
- Xcode左側のリストのリソース項目に追加した日本語用のローカライズファイルを選択します。
- ウインドウ上のタイトルバー近くにある情報アイコンを押します。
- ウインドウが開くので中央付近の「エンコーディング」から「Unicode (UTF-16)」を選択します。
- さらにウインドウが開くので「変換」のボタンを押します。
- Xcodeのメニューで「ビルド」>「すべてのターゲットをクリーニング」を選びます。
- あとはいつも通り「ビルドして進行」させます。
これで実機でも日本語表示が行えるようになります。なぜか実機ではローカライズがうまくいかないという場合はお試しあれ。
文字列のローカライズ
2008年11月22日
各言語に応じて表示内容を変えたい場合
プロジェクトの入っているフォルダ(*.xcodeprojが入ってるフォルダ)内にフォルダを作ります。フォルダ名は英語ならEnglish.lproj、日本語ならJapanese.lprojです。
それぞれのフォルダの中にLocalizable.stringsという名前のテキストファイルを作っておきます。
実際のプログラム内で、言語毎に変える文字列をNSLocalizedStringを使って書きます。
例:cell.text = NSLocalizedString(@"Add new category", @"Level1 add new text");
@"Add new category"がLocalizable.strings内部を探す際のキーワードになります。@"Level1 add new text"の方は自分が何のために書いたか思い出すためにつけておくラベルなので、何でもよいみたいです。多分@""でも問題ないはずです。そして、先ほどの各言語フォルダのLocalizable.stringsに、キーワードに対応させる行を加えておきます。
English.lproj内のLocalizable.strings
"Add new category" = "ADD NEW CATEGORY!";
Japanese.lproj内のLocalizable.strings
"Add new category" = "新カテゴリ";
こうしておくと、上に書いたNSLocalizedString命令の実行結果として、デバイスの言語設定が英語の場合はADD NEW CATEGORY!が返り、日本語の場合は新カテゴリが返ります。ローカライズ用のフォルダを作っていない他の言語の場合はどうなるかというと、NSLocalizedStringの1個目の引数であるAdd new categoryがそのまま返ります。また、各言語のLocalizable.strings内に一致するキーワードが無い場合も同様にNSLocalizedStringの1個目の引数であるAdd new categoryがそのまま返ります。上の例では理解しやすいように英語の場合に入る文字列を大文字にしていますが、
"Add new category" = "Add new category";
としていても何の問題もありません。この場合我々には全く見分けはつきませんが、実際にはイコールの右側にあるAdd new categoryが返っています。
プロジェクトの入っているフォルダ(*.xcodeprojが入ってるフォルダ)内にフォルダを作ります。フォルダ名は英語ならEnglish.lproj、日本語ならJapanese.lprojです。
それぞれのフォルダの中にLocalizable.stringsという名前のテキストファイルを作っておきます。
実際のプログラム内で、言語毎に変える文字列をNSLocalizedStringを使って書きます。
例:cell.text = NSLocalizedString(@"Add new category", @"Level1 add new text");
@"Add new category"がLocalizable.strings内部を探す際のキーワードになります。@"Level1 add new text"の方は自分が何のために書いたか思い出すためにつけておくラベルなので、何でもよいみたいです。多分@""でも問題ないはずです。そして、先ほどの各言語フォルダのLocalizable.stringsに、キーワードに対応させる行を加えておきます。
English.lproj内のLocalizable.strings
"Add new category" = "ADD NEW CATEGORY!";
Japanese.lproj内のLocalizable.strings
"Add new category" = "新カテゴリ";
こうしておくと、上に書いたNSLocalizedString命令の実行結果として、デバイスの言語設定が英語の場合はADD NEW CATEGORY!が返り、日本語の場合は新カテゴリが返ります。ローカライズ用のフォルダを作っていない他の言語の場合はどうなるかというと、NSLocalizedStringの1個目の引数であるAdd new categoryがそのまま返ります。また、各言語のLocalizable.strings内に一致するキーワードが無い場合も同様にNSLocalizedStringの1個目の引数であるAdd new categoryがそのまま返ります。上の例では理解しやすいように英語の場合に入る文字列を大文字にしていますが、
"Add new category" = "Add new category";
としていても何の問題もありません。この場合我々には全く見分けはつきませんが、実際にはイコールの右側にあるAdd new categoryが返っています。
文字列と整数の相互変換
2008年11月19日
文字列を整数に変換する場合には、NSStringクラスのintValueを使います。
NSString *str = @"123";
NSInteger i = [str intValue];
とある場合には、iの値は123となります。
逆に整数値を文字列に変換する場合には、NSStringクラスのstringWithFormatを使います。
NSInteger i = 123;
NSString *str = [NSString stringWithFormat:@"%d", i];
とある場合には、
NSString *str = @"123";
と同じ結果になります。
NSString *str = @"123";
NSInteger i = [str intValue];
とある場合には、iの値は123となります。
逆に整数値を文字列に変換する場合には、NSStringクラスのstringWithFormatを使います。
NSInteger i = 123;
NSString *str = [NSString stringWithFormat:@"%d", i];
とある場合には、
NSString *str = @"123";
と同じ結果になります。
| HOME |