Локализуемые строки и значения по умолчанию - PullRequest
1 голос
/ 16 мая 2019

У меня есть struct для моих локальных уведомлений, с init, который входит в localizable.strings и назначает значение, соответствующее key, телу уведомления :

struct Notification {
    let identifier: String
    let body: String

init(withKey: String) {
    self.id = key
    self.body = NSString.localizedUserNotificationString(forKey: key, arguments: nil)
}

Так что, если мои localizable.strings будут выглядеть так:

"testKey" = "Test Notification";

Тогда при инициализации нового Notification объекта получится следующее:

let notification = Notification(withKey: "testKey")
print(notification.body)                        // prints "Test Notification"

Однако, если я инициализирую уведомление с опечаткой, тело будет просто неправильно введенным ключом:

let mistypedNotification = Notification(withKey: "tstKey")
print(mistypedNotification.body)                 // prints "tstKey"

Мое желаемое поведение - чтобы строка default была назначена телу уведомления, если инициализатор вызывается с ключом, которого в настоящее время нет в localizable.strings , как показано ниже:

let desiredNotification = Notification(withKey: "keyNotCurrentlyInLocalizableFile")
print(desiredNotification.body)           // prints "default string"

Я знаю, что этого можно добиться с помощью одного из NSLocalizedString инициализаторов, но при этом я бы отказался от преимуществ использования NSString.localizedUserNotificationString, чего я не хочу делать. Есть ли способ достичь желаемого поведения, не нажимая NSLocalizedString?

1 Ответ

2 голосов
/ 16 мая 2019

Если в строке по умолчанию нет ключа / значения для строки, возвращается та же строка, которую вы укажете, поэтому, если они равны, это означает, что вы можете указать значение по умолчанию

let possibleBody =  NSString.localizedUserNotificationString(forKey: key, arguments: nil) 
self.body = possibleBody == key ? "defaultValue" : possibleBody
...