Подтвердить что ты не робот

FINNISH: как указать форматирование даты Unicode (например, MMMM yyyy) для работы на финском языке

Я использую формат времени MMMM yyyy unicode date http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns для создания месяца. Он отлично работает на английском и разных латинских языках. Но я получаю жалобу, что даты неверны на финском языке.

Даты, которые генерируются (через NSDateFormatter на Mac), выглядят следующим образом:

kesäkuuta 2014
toukokuuta 2014
huhtikuuta 2014

Но они должны быть - по крайней мере, по словам финского пользователя нашего программного обеспечения:

kesäkuu 2014
toukokuu 2014
huhtikuu 2014 …

Я не знаю финский язык, поэтому я не понимаю, как работает суффикс ta. Как бы то ни было, кто-нибудь знает, как указать некоторые варианты форматирования даты, которые правильно форматируют дату на финском языке, не испорчая остальные языки?

(Я пробовал использовать MMM, но он хранит суффикс ta, но не меняет его, И сокращает месяцы на английском языке, чтобы он не был.)

Согласно этой странице IBM, похоже, что MMMM не включает ta. http://publib.boulder.ibm.com/infocenter/forms/v3r5m0/index.jsp?topic=/com.ibm.form.designer.locales.doc/i_xfdl_r_formats_fi_FI.html Трудно представить, что это ошибка в Mac OS.

Или другой поиск Google показывает, что у IBM была ошибка: http://www-01.ibm.com/support/docview.wss?uid=swg1OA22258

Во всяком случае, есть ли разработчики Mac, которые знают финский язык, кто понимает эту проблему и что может происходить?

4b9b3361

Ответ 1

Хорошо, я сообщил об этом как об ошибке для apple, и я получил довольно полезный ответ, поэтому я подумал, что поделюсь им здесь.


Инженерия определила, что это проблема для вас решить на основе следующего:

Вы никогда не должны устанавливать формат "MMMM yyyy" непосредственно в NSDateFormatter, если хотите работать на разных языках; некоторые могут иметь первый год и т.д.

Если вам нужен формат, который использует полное имя месяца MMMM + год, вы должны передать это как "шаблон" в NSDateFormatter dateFormatFromTemplate: например: NSString * format = [NSDateFormatter dateFormatFromTemplate: @ "yMMMM" options: 0 locale: locale];

Для финского языка это приводит к формату даты "LLLL y", который будет создавать правильную именную форму имен месяцев: tammikuu, helmikuu, maaliskuu и т.д.

Многие языки, включая финский и многие славянские языки, используют именную форму названия месяца без номера дня, а также родительскую форму или какую-либо связанную с ней форму (для финского языка) для названия месяца с номером дня. NSDateFormatter имеет оба варианта: MMMM ссылается на родительскую форму и LLLL, ссылаясь на номинативную форму. [NSDateFormatter dateFormatFromTemplate...] может определить, какой из них использовать на основе того, какие поля находятся в шаблоне. Таким образом, вы предоставляете шаблон, определяющий MMMM или LLLL, и он будет отображен в правильной форме в результирующем формате.

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

Для получения дополнительной информации о характере шаблона, таком как MMM и LLL, см. http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table

Информацию о dateFormatFromTemplate см. https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html#//apple_ref/occ/clm/NSDateFormatter/dateFormatFromTemplate:options:locale:

Проблема здесь - это то, что разработчик должен решить при использовании NSDateFormatter; NSDateFormatter ведет себя как предполагалось.

Только что заметил, я оставил важную часть: после получения строки формата, передав шаблон [NSDateFormatter dateFormatFromTemplate...] то эта строка формата является той, которая должна быть установлена ​​в [NSDateFormatter setDateFormat:...] (возможно, это очевидно, но это стоит сказать)