- 締切済み
iPhoneのアプリケーションのローカライズについて
iPhoneのアプリケーションのローカライズについて iPhoneのアプリケーション開発の勉強をしています。 開発環境はXcode 3.2.4で、シュミレータ4.1で動作確認を行っています。 ローカライズに対応しようと以下のサイトを参考にしてみました。 http://akisute.com/2008/12/iphone_21.html Localizable.strings ファイルを追加し、NSLocalizedStringメソッドで値を取得するまではできました。 例) "hoge" = "hoge"; NSString* string = NSLocalizedString(@"hoge", nil); →string に "hoge" が格納される。 ところが、ファイルの設定で「ファイルをローカライズ可能にする」を選択して「English」が追加された後、 ローカライズの値を変更しても反映されません。 例) "hoge" = "hoge hoge"; NSString* string = NSLocalizedString(@"hoge", nil); →string に "hoge" が格納される。 ※"hoge hoge"にならない。 XCode で クリーニングを行ったり、build フォルダを削除しましたが状況は変わりません。 Finder でパッケージの中を確認しましたが、Localizable.stringsは English.lproj にのみ存在し、 内容も編集後の状態になっているようです。 ※そもそも"hoge" のリソースがない状態になっているのに、何故情報が残っているのか不明です。 原因がわからず途方に暮れている状態です。 皆様のお知恵を拝借できればと思いますので、何卒よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- harawo
- ベストアンサー率58% (3742/6450)
> すべての構成のベースSDKを「iOS デバイス 4.1」から「iOS デバイス 3.2」に変更して試したところ、 > ローカライズされて表示される(hoge が hoge hogehoge になった)ことが確認できました。 こちらのiPhoneシミュレータは、3.2でした。4.1に変更したところ、そちらとおなじ問題が起きることが、確認できました。 私のほうの、情報の見落としでしたね、すみません。 さて、であれば再現性のある不具合が確実なので、iPhone 4.1シミュレータのバグと断定していいでしょう。 質問文> ※そもそも"hoge" のリソースがない状態になっているのに、何故情報が残っているのか不明です。 プロジェクトにリソースがないのなら、どこにリソースが存在しているのか、かんたんな話です。iPhoneシミュレータ内に残っていると考えられます。ビルド時にiPhoneシミュレータ内のアプリが上書きされない、それもローカライズ関係の箇所だけ上書きされないようです。 ~/Library/Application Support/iPhone Simulatorの中をご覧ください。具体的にイメージがわくと思います。 ADCにバグ報告して、バグ修正を待つのが本筋でしょうが、とうめんの回避策は、ビルド前に、iPhoneシミュレータからアプリを削除しておくということになるでしょう。アプリ削除の方法は、リアルiPhoneとおなじです。 あるいは、iPhone 4.0シミュレータを使用するのがいいと思います。ちゃんとは確認できてませんが、このバージョンでは不具合が起きないようです。
- harawo
- ベストアンサー率58% (3742/6450)
> ローカライズのテスト専用にプロジェクトを作成していまして、 > 追加ステップは100もありませんので・・。 ローカライズのテストだけを行うのに、どうして100ステップ近い追加が必要なのでしょう?極端な話、コードを1行、新規プロジェクトに書き加えるだけで、テストは行えますし、ほかの要素を排除する目的としても、可能な限り単純化すべきです。 次のプロジェクトを作ってください。 View Based Applicationを新規作成します。プロジェクト名を仮に「LocalizeTest」とします。 「LocalizeTestViewController.m」を開きます。 初期化メソッド「- (void)viewDidLoad」が、「/*~*/」でコメント化され、無効になっているので、これを有効にします。 次の1行を、「[super viewDidLoad];」の次に書き加えます。 NSLog(NSLocalizedString(@"copy01", nil), nil); 保存します。 次に、空のファイル(Strings File)を作成し、ファイル名を「Localizable.strings」とします。サイドバーの「Resources」フォルダ内に置きます。 「"copy01" = "Hoge Hoge";」と記述し、保存します。 「実行」メニューから「コンソール」を開きます。 コンソールのツールバーから、「ビルドと実行」を実行します。 正常なら、コンソールに、実行日時とともに「Hoge Hoge」が表示されます。 おそらくこれが、最小最短のテストプロジェクトです。 質問文で提示なさったプログラムを読み直すと、ひとつ気にかかる点がありました。 Localizable.stringsに「"hoge" = "hoge";」と記述したとありますが、これでは関数NSLocalizedString()が、Localizable.stringsを読みに行けているのか、読みに行けていないのか、判別できません。私のテストプロジェクトで、「"copy01" = "Hoge Hoge";」としたのは、それを判別するのが目的です。 > 他のサイトに同様(?)の現象に悩まれている方がいまして、 リンク先を読んでみましたが、「同様」ではないですね。Localizabel.stringsのローカライズは、ちゃんとできているが、Nibファイル(.xib)のローカライズがうまくいかないという内容ではありませんか? > 最終手段として再インストールを試してみようと思っていますが、 最終手段ではありませんよ。まだあなたの人的ミスであるという線は、まったく消えていませんし、あそらくその線で間違いないでしょう。 「おれはゼッタイ間違っていない。それなのにプログラムがうまくいかないのは、Xcode、コンパイラ、Apple……つまりおれ以外に原因があるのだ」 そういう憤りを経験することなく、プログラムを行えたプログラマは、ひとりもいないと思います。そして、だれしもが、数時間ときには数日の苦闘の末に、なんど見直したか覚えていない場所に、ミスを見つけるものなのです。 だれもが通ってきた道です。がんばってください。
- harawo
- ベストアンサー率58% (3742/6450)
ご呈示のプログラムを、じっさいに記述して、ビルドしてみましたが、正常に「hoge hoge」という結果になりました。 おそらく誤字・脱字系の、単純なミスが原因と思われます。考えるだけでも気が滅入ることと思いますが、いまいちど書き込んだソースを、見直ししてみましょう。天才的なプログラマであろうが、だれであろうが、皆経験したことです。あなただけが遭遇しているトラブルではありませんので、がんばってください。 > Localizable.strings ファイルを追加し、NSLocalizedStringメソッドで値を取得するまではできました。 本題と関係ありませんが、NSLocalizedStringは、Objective-Cのメソッドではありません。Cの関数です。
お礼
ご回答&テストありがとうございます。 ソースコードを再度見直しましたが、単純ミスはなさそうです。 ローカライズのテスト専用にプロジェクトを作成していまして、 追加ステップは100もありませんので・・。 更にプロジェクトを1から作り直しましたが同じ現象が起きております。 他のサイトに同様(?)の現象に悩まれている方がいまして、 その方は再インストールで解決されたようです。 http://akamatsu.org/aka/?page_id=2260 最終手段として再インストールを試してみようと思っていますが、 仮に解決したとしても消化不良の感がありますので、 引き続き情報のご提供をお待ちしておりますm(_ _)m また、ご指摘ありがとうございます。 確かに関数をメソッドと記述するのはよろしくないですね(^^;) それでは引き続き宜しくお願いします。
お礼
回答&テストコードのご提供ありがとうございます。 試した結果ですが、コンソールに、実行日時とともに「Hoge Hoge」が表示されました。 ただ、ここまでは予想通りというか、最初の質問で記述した内容と再確認となります。 質問の状況説明が良くなく、伝わり辛かったようで恐縮です。 つきましては、説明の補足させていただきます。 (1)Localizable.stringsファイルを追加して、NSLocalizedString関数で文字列の取得ができた。 (2)Localizable.stringsファイルの情報を表示。一般タブの「ファイルをローカライズ可能にする」をクリックし、 English.lproj フォルダが作成され、且つ、Localizable.stringsファイルがXCode上で階層化され、 English が追加されていることが確認できた。 (3)1で設定した文字列のみ編集(hoge から hoge hoge)して実行。 結果は hoge のままであった。 (4)build フォルダの削除やクリーニングを行ったが結果は変わらなかった。 また、最初の質問で割愛してしまいましたが、 Nibファイル(.xib)のローカライズも同様の現象を確認しています。 以上のことにより、コーディングミスというより、設定不足やインストールの失敗を考えていました。 ただ、再インストールを行いましたが、残念ながら状況は変わらずとなっています。 ちなみに現在確認できている点を追記しますと、「プロジェクトの情報>一般」タブで すべての構成のベースSDKを「iOS デバイス 4.1」から「iOS デバイス 3.2」に変更して試したところ、 ローカライズされて表示される(hoge が hoge hogehoge になった)ことが確認できました。 ちなみに開発環境(コンパイラなど)の問題のみを疑うつもりはなく、 先に記述した通り、設定不足(おっしゃるところの人的ミス)もあると認識していますので、 その点についてはご安心(?)ください(^^;) ※仮に開発環境の問題であっても憤りは感じません。。 本業で某.Netフレームワークやら、Oraxxx Developer など 香ばしい環境で開発していますので、なれっこです(^^;) それでは引き続き情報のご提供をお待ちしておりますm(_ _)m
補足
>hoge が hoge hogehoge になった 「hoge が hoge hoge になった」の記述ミスです。