FINNISH:如何指定Unicode日期格式化程序(如MMMM yyyy)使用芬兰语

dan*_*ood 13 unicode macos date nsdateformatter

我一直在使用MMMM yyyyunicode日期时间格式http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns来生成Month Year.它适用于英语和各种拉丁语言.但我收到的投诉是芬兰的日期不正确.

正在生成的日期(NSDateFormatter在Mac上)是这样的:

kesäkuuta 2014
toukokuuta 2014
huhtikuuta 2014
Run Code Online (Sandbox Code Playgroud)

但他们应该 - 至少,根据我们软件的芬兰用户说:

kesäkuu 2014
toukokuu 2014
huhtikuu 2014 …
Run Code Online (Sandbox Code Playgroud)

我不懂芬兰语,所以我不明白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中的一个错误.

或者,另一个谷歌搜索显示IBM有这样的错误:http: //www-01.ibm.com/support/docview.wss?uid = swg1OA22258

无论如何,是否有任何了解芬兰语的Mac开发人员,他们了解这个问题,以及可能会发生什么?

dan*_*ood 21

好吧,我把这报告为苹果的一个错误,我得到了一个非常有用的答复,所以我想我会在这里分享.


Engineering已确定您需要根据以下内容解决此问题:

如果你想使用各种语言,你不应该直接在NSDateFormatter中设置格式"MMMM yyyy"; 有些人可能有第一年等等.

如果你想要一个使用完整月份名称MMMM +年的格式,你应该将它作为"模板"传递给NSDateFormatter dateFormatFromTemplate:如下所示:NSString*format = [NSDateFormatter dateFormatFromTemplate:@"yMMMM"options:0 locale:locale];

对于芬兰语语言环境,这会生成日期格式"LLLL y​​",它将生成月份名称的正确主格形式:tammikuu,helmikuu,maaliskuu等.

包括芬兰语和许多斯拉夫语言在内的许多语言使用月份名称的主格形式,没有日期编号,以及具有日期编号的月份名称的属格形式或某种相关形式(芬兰语的部分).NSDateFormatter有两个,MMMM指的是genitive形式,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:选项:locale:

这里的问题是开发人员在使用NSDateFormatter时需要解决的问题; NSDateFormatter的行为符合预期.

刚注意到,我遗漏了一个重要的部分:通过将模板传递给[NSDateFormatter dateFormatFromTemplate ...]获取格式字符串后,那个格式字符串应该在[NSDateFormatter setDateFormat:...]中设置(也许是很明显,但值得说)