2

オブジェクト数、ファイル サイズ、日付、期間などの可読性を扱うための既存の Objective-C ライブラリはありますか? (そして、Cocoa の Foundation フレームワークに基づいていますか?)

つまり、NSDate、NSNumber、NSTimeInterval など、またはオブジェクトの NSArray が与えられます。次のような問題に対処する文字列表現を構築するためのライブラリはありますか:

  • 単数対複数のカウント: 「2 ファイル」、「3 ファイル」などを表示しますが、「1 ファイル」ではなく「1 ファイル」を表示します。
  • 日付: 「2010-02-18」の代わりに「昨日」、「2010-02-15」の代わりに「先週の月曜日」などを表示します。
  • 期間: 「...: 57 分」ではなく、「推定残り時間: 約 1 時間」を表示します。
  • ファイル サイズ: 50 バイトの場合は「50 バイト」と表示されますが、1073741824 バイトの場合は「1.0 GiB」と表示されます。

これは、ライブラリがすでに存在しているはずのよくある問題のようです。おそらく、すでに Apple によって提供されている標準的なフレームワークです (ただし、それについてはすぐにはわかりません)。質問はどこですか?;)


注:これは実際にはdreamlaxの回答に対するコメントですが、コメントとして投稿するには長すぎました.

MDCの記事へのリンクをありがとう。これがかなり複雑な問題になる可能性があることは認識しています。多言語は言うまでもなく、英語だけを考えても。

繰り返しになりますが、これが非常に複雑な問題であるという事実が、いくつかの問題を解決するライブラリが必要な理由です。;)

ファイル サイズは最も単純なように見えますが、これでも間違いやすいです。このサイトの同様の質問に対する回答として与えられたコードによる次の出力を検討してください。最初のコードは、奇妙なことに 1023 バイトを 1.0 KB として報告します。2 番目は (1024 * 1024) - 1 バイトを 1024.00 KB と報告しますが、最初の報告は 1.0 MB と報告します。Calculator.app によると、(1024 * 1024) - 1 バイトは約 1.023,9990234375 KB です。では、「1023.99 KB」「1024.00 KB」「1.0 MB」・・・と表示されるのでしょうか?わからない。

今日、ファイル サイズを変換するためのコードをいくつか書きましたが、単体テストを書いたときに同様の問題があることに気付きました。

これがすでに考え抜かれたライブラリがあれば本当にいいでしょう...

1022 bytes              = 1022 bytes
1023 bytes              = 1.0 KB
1024 bytes              = 1.0 KB
1025 bytes              = 1.0 KB
(1024 * 1024) - 1 bytes = 1.0 MB
(1024 * 1024) bytes     = 1.0 MB
(1024 * 1024) + 1 bytes = 1.0 MB

[サイズを人間が読める文字列に変換するための ObjC/Cocoa クラスからのコードで出力しますか? ]

1022 bytes              = 1022.00 B
1023 bytes              = 1023.00 B
1024 bytes              = 1024.00 B
1025 bytes              = 1.00 KB
(1024 * 1024) - 1 bytes = 1024.00 KB
(1024 * 1024) bytes     = 1024.00 KB
(1024 * 1024) + 1 bytes = 1.00 MB

[ Snow Leopard のファイル サイズからコードで出力]

上記の出力を生成するコード (かなり明白ですが、参照用です):

NSLog(@"1022 bytes              = %@", [self asFileSizeString: [NSNumber numberWithInt: 1022]]);
NSLog(@"1023 bytes              = %@", [self asFileSizeString: [NSNumber numberWithInt: 1023]]);
NSLog(@"1024 bytes              = %@", [self asFileSizeString: [NSNumber numberWithInt: 1024]]);
NSLog(@"1025 bytes              = %@", [self asFileSizeString: [NSNumber numberWithInt: 1025]]);
NSLog(@"(1024 * 1024) - 1 bytes = %@", [self asFileSizeString: [NSNumber numberWithInt: (1024 * 1024) - 1]]);
NSLog(@"(1024 * 1024) bytes     = %@", [self asFileSizeString: [NSNumber numberWithInt: (1024 * 1024)]]);
NSLog(@"(1024 * 1024) + 1 bytes = %@", [self asFileSizeString: [NSNumber numberWithInt: (1024 * 1024) + 1]]);
4

1 に答える 1

2

複数形に関して; 特に他の言語を考えると、思ったほど簡単ではありません。MDC には、この問題に関する優れた記事があります。

また、英語では「一昨日」を意味する言葉はありませんが、スペイン語では「antayer」という言葉を使うことができます。英語だけを考えると単純に思えますが、多くの異なる言語とそれらの相対時間を表す方法を考慮すると、すぐに複雑になります。

最も簡単なのはファイルサイズです。これらは、NSNumberFormatter. 数値フォーマッタは、数値の表現方法を決定するときに、ユーザーのロケールを考慮します。単位は各言語で同じように表され、数字も同じであるため、これは簡単です。小数点および千単位の区切り記号は、数値フォーマッタによって処理されます。

于 2010-02-19T12:55:59.630 に答える