2

カスタム ビューでボタンを使用Doneしており、そのタイトルをローカライズできるようにしたいと考えています。DoneからのシステムボタンUINavigationBarはすでにローカライズされていることを知っています。ローカライズされた文字列を何らかの方法で取得するのは完璧です。これを行う方法はありますか?

UINavigationBarローカライズされたDoneボタンのためだけに全体を使用するのは不適切なようです。

明確化: ポイントは、システムが使用するのと同じローカライズされた文字列を使用することです。

4

2 に答える 2

3

OS から標準の文字列を取得する公式の方法はありませんが、すべての文字列がローカライズされた文字列ファイルにある可能性が高く、それらのほとんどはシミュレーターに存在します (アプリからの文字列は含まれません)。シミュレーターには存在しませんが、フレームワークからのほとんどすべての文字列が必要です)。

シミュレーターのフレームワーク ディレクトリは、Xcode のインストール ディレクトリに対して相対的であり、次のようなものです (メモリから入力し、必要に応じてバージョンを変更します)。

Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk/System/Library/Frameworks/UIKit.framework/

まず、UIKit.framework/en.lproj/*.strings(または English.lproj または en_US.lproj) を調べます。文字列ファイルは plist であり、通常、デバイスではバイナリ plist になります (このようなファイルは "bplist00" で始まります)。これらを開くにはさまざまな方法があります。TextWrangler は plist を XML として自動的に表示し、コマンドライン ツールplutilは他の形式に変換します。私はbashエイリアスを使用します

alias plist-dump='plutil -convert xml1 -o /dev/stdout --'

文字列が見つかったら、いくつかのオプションがあります。

  • 次のようなものを使用して、実行時にフレームワークから直接ロードします

    [[NSBundle bundleWithIdentifier:...] localizedStringForKey:@"DONE" value:nil table:...]
    

    これはお勧めできません。異なる OS バージョンで動作することを保証するものではありません。(実際には、"Done" のような文字列はおそらく動かないでしょうが、別の方法は簡単なので大騒ぎする価値はありません。)

  • 文字列をプロジェクトにコピーします。これを自動的に実行して既存の Localizable.strings とマージするツールについては知りませんが、おそらくどこかに存在し、書くのはそれほど難しくありません。少し法的に疑わしい(ただし、関心のある言語の文字列を目でコピーするよりもはるかにそうではありません)。Apple の NDA に関する懸念を避けるために、プレリリース SDK でそれを行うことは絶対に避けます。

  • 文字列ファイル全体を eg にコピーし、 のUIKit.stringsようなものを使用しますNSLocalizedStringFromTable(@"DONE",@"UIKit",nil)。著作権侵害の可能性大!

実際には、Apple が iOS から iOS アプリに少数の文字列/画像をコピーすることを気にする可能性は低いと思います。それらをAndroidアプリにコピーすることは、まったく別の問題です...

于 2013-02-23T16:38:41.837 に答える
1

プロジェクト設定に必要なローカリゼーションを追加するだけです。追加した場合、完了ボタンなどのすべてのシステムはデバイスロケールによってローカライズされます。そうでない場合は、デフォルトの言語でローカライズされます。これも設定する必要があります。

カスタムボタンの場合:

[self.myButton setTitle:NSLocalizedString(@"my localizable title", @"") forState:UIControlStateNormal];

プロジェクト内のすべてのNSStringにも有効です。

NSString *someText = NSLocalizedString(@"my localizable title", @"");
self.myLabel.text = someText;

とにかく、必要なローカリゼーションを追加して、アプリをローカライズ可能にする必要があります。

その後、次の手順に従ってください。

http://www.raywenderlich.com/2876/how-to-localize-an-iphone-app-tutorial

しかし、私はあなたにプロジェクトの終わりにこれをすることを本当にお勧めします。

于 2013-02-21T23:52:12.963 に答える