2012-04-28 17 views
2

iOSはICUをボンネットの下で使用していると私は理解しています。私はiOS上のICUのMessageFormat

There {0,choice,0#are no files|1#is one file|1<are {0,number,integer} files}. 

ないのiOSがこの機能を公開し、例えば、数字と複数形を含む文字列をICUのMessageFormatのの機能にアクセスしたいのですが?もしそうなら、私はどのように使用するのですか?私は

[NSString stringWithFormat: "There {0,choice,0#are no files|1#is one file|1<are {0,number,integer} files}.", n]; 

または

[NSString stringWithFormat: "There {0,plural, =0{are no files}=1{is one file}other{are %ld files}}.", n]; 

を書くことができるかもしれないと思った。しかし、これらのフォーマット(それぞれICU4JとICUは、)動作しません。

+0

どこを見ましたか? – EmilioPelaez

+0

私は具体的にどこを見ましたか? – user371320

答えて

1

OS Xと同様、iOSには/usr/lib/libicucore.dylibが含まれています。ただし、どちらのOSでもサポートされている公開APIではありません。 OS Xでの使用方法と潜在的な問題については、this old messageを参照してください。

iOSでは、AppleがサポートされていないAPIを使用してアプリケーションを拒否する可能性があるという追加の問題があると思います。

+0

ニース。 7年前、彼らはこれを検討していました。サポートされていないライブラリを使用している場合、アプリマップは拒否されます。私のアプリにICUをバンドルすると、拒否される可能性があります(http://stackoverflow.com/questions/2427838/iphone-app-rejection-for-using-icu-unicode-extensions)開発者はiOS上で複数形をどのようにローカライズしていますか? – user371320

+0

@ user371320あなたがリンクしていた質問は、サポートされていない付属ライブラリにリンクすることでした。 ICUを構築し、アプリケーションに静的にリンクすることができます。 – LaC

+0

もちろん、私はICUコードを変更する必要があります: "上記のAPIと同じ名前のメソッドをソースコードに定義した場合は、メソッド名を変更してAppleのプライベートクラスアプリケーションが今後の提出でフラグが立てられないようにするAPI。 – user371320

0

stringWithFormatのフォーマットルールには、ICUフォーマットは含まれていません。あなたはそのようなことのために別の関数を呼び出す必要があります。 AFAIK iOSはICU MessageFormat互換のNSString APIを公開していません。

しかし、(経由で公開されたり、アプリケーションとICUのカスタムビルドをバンドルのいずれか)を使用すると、APIへのアクセス権を持っていたことを考えると、このようなメッセージは、ICUライブラリを動作するようにフォーマットするためのリソースファイルへのアクセス権を持っている必要があります

  • は、ロケール(s)はあなたが
  • に興味を持っているあなたはより多くの情報のためICU documentationを参照してください

を使用しようとしている選択肢の形式をサポートするのに十分最新であるための選択データが含まれています。

関連する問題