2

我有我的应用程序运行良好,它使用本地通知。iOS通知本地化?

我已经决定现在应用程序国际化,并且一切正常,除了在更改设备上的语言之前在语言上设置的通知。

我从包含本地化字符串的数组中填充通知中的消息,所以我想当用户更改设备的语言时,通知中的字符串也会更改,但我错了。

如何最好的解决这个问题?我的NSString文本也应该是NSLocalizationString吗?

我的通知码:

UILocalNotification *localNotif = [[UILocalNotification alloc] init]; 
if (localNotif == nil) 
return; 
localNotif.fireDate = [alertTimes objectAtIndex:i]; 
localNotif.timeZone = [NSTimeZone defaultTimeZone]; 

NSString *text = [alertText objectAtIndex:i]; 

// Notification details 
localNotif.alertBody = text; 
// Set the action button 
localNotif.alertAction = @"View"; 

localNotif.soundName = UILocalNotificationDefaultSoundName; 
localNotif.applicationIconBadgeNumber = 1; 

// Specify custom data for the notification 
NSDictionary *infoDict = [NSDictionary dictionaryWithObject:@"someValue" forKey:@"someKey"]; 
localNotif.userInfo = infoDict; 

// Schedule the notification 
[[UIApplication sharedApplication] scheduleLocalNotification:localNotif]; 
[localNotif release]; 
+0

我想补充说,所有的字符串都是本地化的,除了以前面的语言创建的本地通知。如果我发送新的通知,它将使用新的语言,但尚未触发的旧通知将在旧的。这是大多数用户不会遇到的问题,因为人们不会经常更改他们的语言,但是那些更新到本地化版本的用户将会。 – zambono 2011-01-06 15:03:42

回答

1

如果我的NSString文字也NSLocalizationString?

是的,我会那样做。

NSLocalizedString(@"alertTimes",[alertTimes objectAtIndex:i])替换。我假设您在alertTimes数组中存储与您的本地化字符串匹配的字符串。

+0

是的,alertTimes中的所有对象都是本地化的字符串 – zambono 2011-01-06 14:24:03

+0

只是为了阐明本地化文本的正确方式是NSString * text = [NSString stringWithFormat:NSLocalizedString(@“alertTimes”,@“%@”),[alertTimes objectAtIndex:i] ]。但唉,这不是问题。所有字符串都是本地化的,除了以前面的语言创建的本地通知。如果我发送新的通知,它将使用新的语言,但尚未发生的旧通知将在旧的。这是大多数用户不会遇到的问题,因为人们不会经常更改他们的语言,但是那些更新到本地化版本的用户将会。 – zambono 2011-01-06 15:00:13

+0

是的,似乎没有什么可以改变这一点的。我会建议检查启动时的语言环境并重新创建在以前的语言环境中创建的通知。 – Moshe 2011-01-06 15:21:57