Существующая библиотека Objective C для работы с читабельностью человека (и основанная на платформе Foundation Какао)? - PullRequest
2 голосов
/ 19 февраля 2010

Существует ли библиотека Objective-C для работы с человеком, который может считывать количество объектов, размеры файлов, даты, продолжительность и т. Д.? (и на основе основы Какао?)

Другими словами, с учетом NSDate, NSNumber, NSTimeInterval и т. Д. Или NSArray объектов; Есть ли библиотека для построения строкового представления, которое решает такие проблемы как:

  • Подсчет единственного и множественного числа: отображение «2 файла», «3 файла» и т. Д., Но «1 файл» вместо «1 файла».
  • Даты: отображение «вчера» вместо «2010-02-18», «последний понедельник» вместо «2010-02-15» и т. Д.
  • Длительность: отображается «расчетное оставшееся время: около часа» вместо «...: 57 минут».
  • Размеры файла: отображение «50 байтов» для 50 байтов, но «1,0 ГиБ» для 1073741824 байтов и т. Д.

Кажется, что такая распространенная проблема - библиотека уже существует; возможно даже уже стандартная структура, предоставленная Apple (хотя я не могу сразу найти что-нибудь об этом). Вопрос где? ;)


Примечание: Это действительно комментарий к ответу Dreamlax, но его слишком долго публиковать в качестве комментария.

Спасибо за ссылку на статью MDC. Я понимаю, что это может быть довольно сложной проблемой; даже если рассматривать только английский, не говоря уже о нескольких языках.

Опять же, тот факт, что это такая сложная проблема, является еще одной причиной, почему я хотел бы иметь библиотеку, которая решает некоторые из проблем. ;)

Размеры файлов кажутся самыми простыми, но даже в этом легко ошибиться. Рассмотрим следующий вывод с помощью кода, приведенного в качестве ответов на аналогичные вопросы на этом сайте. Первый код странным образом сообщает о 1023 байтах как 1,0 КБ. Вторые отчеты (1024 * 1024) - 1 байт размером 1024,00 КБ, тогда как первый сообщает об этом размером 1,0 МБ. Согласно Calculator.app, (1024 * 1024) - 1 байт составляет около 1,023,9990234375 КБ. Так должно ли это отображаться как «1023,99 КБ», «1024,00 КБ», «1,0 МБ», ...? Я не уверен.

Сегодня я быстро написал некоторый код для преобразования размеров файлов, а затем понял, что у него есть похожие проблемы, когда я написал для него модульные тесты.

Было бы неплохо иметь библиотеку, в которой это уже было продумано ...

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]]);

1 Ответ

2 голосов
/ 19 февраля 2010

в отношении плюрализма; это не так просто, как можно подумать, особенно при рассмотрении других языков. У MDC есть хорошая статья по этому вопросу .

Кроме того, в английском языке нет слова, означающего «позавчера», но в испанском языке можно использовать слово «anteayer». Это кажется достаточно простым, когда вы рассматриваете только английский, но когда вам необходимо учитывать множество различных языков и способы их представления относительного времени, это быстро становится сложным.

Наиболее простым является размер файла. Они могут быть отформатированы как NSNumberFormatter. Устройство форматирования чисел учитывает языковой стандарт пользователя, когда определяет, как представлять число. Это делается проще, потому что единица измерения одинаково представлена ​​на каждом языке, как и цифры. Десятичный разделитель и / или разделитель тысяч обрабатываются средством форматирования чисел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...