iOS如何用另一种语言显示日期,

时间:2013-02-12 18:23:46

标签: ios

我最近一直致力于使用法语版的应用程序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
}

这可能不是最佳方式。

有什么想法吗?

5 个答案:

答案 0 :(得分:3)

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

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

'EEEE'是星期几的全名,在我的情况下,将以荷兰语显示。

答案 1 :(得分:1)

将日期转换为字符串时,将正确的区域设置设置为NSDateFormatter,然后日期格式化程序将根据您的用户设置处理所有格式的细节:

NSDateFormatter *formatter = ... // Create and setup formatter
[formatter setLocale:[NSLocale autoupdatingCurrentLocale]]; 
// Now you can convert date to string

答案 2 :(得分:1)

这可能更容易: 有些东西叫做

NSDateFormatterShortStyle,
NSDateFormatterMediumStyle
NSDateFormatterLongStyle

分别设置日期和时间组件:

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

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

进一步了解Data Formatting Guide

答案 3 :(得分: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);

答案 4 :(得分:0)

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

示例:

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

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

Apple文档:NSDateFormatter localizedStringFromDate:dateStyle:timeStyle: