0

我最近一直在开发我们的应用程序使用的法语版本NSLocalizedStrings,到目前为止一切都很好。

但我现在的问题是日期。我经常在我的申请中显示日期,根据情况以不同的格式显示。

前任:

-Fri Feb 22, 2013
-Monday February 18, 2013
-Feb 18
-Dec 5, 2012

问题是,法语中的日期不仅在月份名称方面有所不同,而且在月份、日期和年份的出现顺序上也有所不同。

前任:

-Dec 5, 2012 would be 5 Dec 2012
-Monday February 18, 2013 would be Lundi le 18 Fevrier 2013.

我的Localizable.string文件中有单独的月/日名称,但是如何管理它的显示顺序。

我应该有一个 if 语句来检查当前的设备语言吗?

NSString *currentLanguage = [[NSLocale preferredLanguages] objectAtIndex:0];

if([currentLanguage isEqualToString:@"fr"])
{
    //Handle French logic
}

这可能不是最好的方法。

有任何想法吗?

4

5 回答 5

4

您应该使用 NSDateFormatter 并将其提供给您想要的 NSLocale,如下所示:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"nl_NL"];
dateFormatter.dateFormat = @"EEEE d MMMM yyyy HH:mm";

'EEEE' 是星期几的全名,在我的例子中,它将以荷兰语显示。

于 2013-02-12T18:29:16.830 回答
1

当您将日期转换为字符串时,为您的 NSDateFormatter 设置适当的语言环境,然后日期格式化程序将根据您的用户设置处理格式的所有细节:

NSDateFormatter *formatter = ... // Create and setup formatter
[formatter setLocale:[NSLocale autoupdatingCurrentLocale]]; 
// Now you can convert date to string
于 2013-02-12T18:27:57.040 回答
1

这可能要容易得多:有一种东西叫做

NSDateFormatterShortStyle,
NSDateFormatterMediumStyle
NSDateFormatterLongStyle

单独设置日期和时间组件:

[dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 
[dateFormatter setTimeStyle:NSDateFormatterNoStyle]; 

如果用户的语言,Ios 将正确格式化。

进一步查看数据格式化指南

于 2013-02-12T18:30:02.713 回答
1

使用NSDateFormatter. 例如:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];

NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:162000];

NSString *formattedDateString = [dateFormatter stringFromDate:date];
NSLog(@"formattedDateString: %@", formattedDateString);

NSDateFormatterMediumStyle将根据用户的偏好(英语、法语等)自动格式化日期。

如果您需要自定义样式并且应用程序在 iOS 4.0+ 中运行,您可以在日期格式化程序中使用自定义模板:

NSString *formatString = [NSDateFormatter dateFormatFromTemplate:@"EdMMMyyy" options:0
                                          locale:[NSLocale currentLocale]];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:formatString];

NSString *todayString = [dateFormatter stringFromDate:[NSDate date]];
NSLog(@"todayString: %@", todayString);
于 2013-02-12T18:30:15.607 回答
0

localizedStringFromDate:dateStyle:timeStyle:NSDateFormatter尝试使用 NSDateFormatter 和模板(来自Unicode Technical Standard #35 )之前,我会尝试使用类函数:

例子:

[NSDateFormatter localizedStringFromDate:dateTime dateStyle:NSDateFormatterMediumStyle timeStyle:NSDateFormatterNoStyle];

您可以选择文档中详述的各种长度的不同日期和时间输出。

Apple 文档:NSDateFormatter 本地化StringFromDate:dateStyle:timeStyle:

于 2013-02-12T20:58:48.827 回答