2

アプリを正常に実行しており、ローカル通知を使用しています。

私は今アプリを国際化することを決定し、デバイスの言語を変更する前に言語に設定された通知を除いて、すべて正常に機能しています。

ローカライズされた文字列を含む配列から通知にメッセージを入力するので、ユーザーがデバイスの言語を変更すると、通知の文字列も変更されると考えましたが、間違っていました。

この問題にどのように取り組むのが最善でしょうか? 私の 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];
4

3 に答える 3

1

NSString テキストも NSLocalizationString にする必要がありますか?

はい、そうします。

に置き換え[alertTimes objectAtIndex:i]ますNSLocalizedString(@"alertTimes",[alertTimes objectAtIndex:i])alertTimesローカライズされた文字列に一致する文字列を配列に格納していると仮定しています。

于 2011-01-05T21:54:41.610 に答える
0

ローカル通知をローカライズするときは、必ず localizedUserNotificationString(forKey:arguments:) を使用してください。

ローカリゼーションの「落とし穴」はNSLocalizedString、通知がスケジュールされた後にユーザーが言語を切り替える可能性があるため、静的文字列がうまく機能しないことです。通知アラートに間違った言語が表示される可能性があります。

たとえば、英語のコピー文字列が設定された状態で通知がスケジュールされている場合、通知がトリガーされる前に静的文字列が生成されたため、通知がトリガーされる前に変更する方法がないためen-US、ユーザーは言語を切り替えました。jpNSLocalizedString

localizedUserNotificationString(forKey: arguments:)通知コンテンツの文字列テキストをローカライズするために使用する必要があります ( https://developer.apple.com/documentation/foundation/nsstring/1649585-localizedusernotificationstring )。通知が表示されようとしているときに、ローカライズされた文字列リソースからローカライズされた文字列値が動的に作成されます。

于 2020-11-16T02:33:17.353 に答える