3

こんにちは、iPhone/iPad 用のアプリケーションを作成したいと考えています。最初のページで、アプリケーションの言語を変更するオプションをユーザーに提供したいと考えています (デフォルトの言語は英語です)。ユーザーが選択した言語 (スペイン語など) に応じて、最初のページのテキストとボタンはすべてスペイン語になります。次に、ボタンを押すと、次のビューもスペイン語になります。(そして戻るボタンもスペイン語です)

どうすればこれを行うことができますか? ローカリゼーションを使用したくないことを忘れないでください。代わりに、設定アプリではなく、同じアプリ内でアプリの言語を変更できるようにする必要があります。

おそらくいくつかの例で助けていただければ幸いです。

事前にどうもありがとうございました!

4

3 に答える 3

2

私はこれを数回行いました。iOSはこのために設計されていないため、最初に行うべきことは、アプローチを再検討するか、クライアントに戻って、それが必要であることを絶対に確認することです。このアプローチが正しい状況はごくわずかであり、ほとんどが間違いです。

最初の問題は、文字列リソースのローカライズです。 NSBundleローカライズされた文字列をロードするメソッドを提供します。現在選択している言語を管理するためのシングルトンクラスを用意します。en.lproj言語を変更すると、ディレクトリ(または選択した言語)をバンドルとしてロードできます。その時点から、通常のマクロを使用してローカライズされた文字列リソースを取得する代わりに、シングルトンのメソッドを使用して現在のバンドルからそれらをフェッチします。

同じことが画像やその他のリソースにも当てはまります。シングルトンはどのローカリゼーションバンドルが機能しているかを知っているので、必要なリソースを求めてください。

言語を変更するときは、シングルトンに伝えてください。シングルトンは関連するバンドルをロードして通知を投稿できるため、ViewControllerは自分自身を更新することができます。

運が良ければ、ペン先のレイアウトは言語に依存せずに変更なしで機能します。これは、ローカライズされたインターフェイス要素のアウトレットコレクションを持つ他のユーザーが継承するベースビューコントローラを設定できることを意味します。通知をリッスンし、コレクションをウォークして必要なアイテムを更新する必要があります。

運が悪く、ローカリゼーションごとに異なるレイアウトが必要な場合は、状態を保存し、シングルトンから関連するペン先を取得してから、すべてをリロードして状態を復元する必要があります。

また、完全に修正できない問題もあります。iOSは、それがメインシステム言語であると見なします。制御できないiOS提供のコンテンツがある場合、それはメインシステム言語にローカライズされます。アプリケーションが完全に初期化される前に(つまり、で) AppleLanguages、ロケールを含む文字列を含む配列にユーザー設定を設定することで、これを少し軽減できます。ただし、これはアプリケーションの起動時にのみ言語を変更できます。main.c

于 2012-08-01T13:29:52.607 に答える
0

可能な実装:

CoreDataを使用して、ローカライズされた文字列のテーブルを作成します

名前/キー、言語、および値を保存します。

次に、値を読み取るのに役立つマネージャークラスを構築する必要があります。ここでシングルトンを使用することは、おそらく良いアプローチでしょう。次に、次のようなことを行うことができます。

[[LanguageManager] instance] getLocalizedString:@"mainView_title" forLang:@"en"];
于 2012-08-01T13:14:17.010 に答える
0

この記事をチェックアウトしようとしましたか?

ローカリゼーションを使用しないように求めているようですが、私が理解した唯一の理由は、実行時に言語を変更したいからです。

その投稿では、SDK の既存のローカリゼーション機能の一部を活用して要件を満たすカスタム ユーティリティ クラスを提供 (および使用方法を説明) します。

それが役に立つことを願っています。

于 2012-08-01T13:28:38.187 に答える