Сохранить в CoreData «ключи», «закрытый» набор ключей, например: "Run"
, "Walk"
, "Sleep"
.
В ваших Localizable.strings :
Английский:
"SomeKeyForRun" = "Run";
"SomeKeyForWalk" = "Walk";
"SomeKeyForSleep" = "Sleep";
Французский:
"SomeKeyForRun" = "Courir";
"SomeKeyForWalk" = "Marcher";
"SomeKeyForSleep" = "Dormir";
и т. Д.
Создайте расширение для ваших сущностей и добавьте в него метод / вычисляемую переменную
extension MyCoreDataEntity {
func localizedActivityName() -> String {
switch(myCoreDataEntityProperty) {
case "Run":
return NSLocalizedString("SomeKeyForRun")
case "Walk":
return NSLocalizedString("SomeKeyForWalk")
case "Sleep":
return NSLocalizedString("SomeKeyForSleep")
default:
return myCoreDataEntityProperty //or "Unknown Activity" etc.
}
}
}
Если вы хотите показать действие:
let activityLocalized: String = myCoreDataEntity.localizedActivityName()
В случае слишком большого количества случаев вы можете выбрать шаблон для построения ключа и сделать это в Localizable.strings
Следуя моему соглашению об именах, я выбрал:
extension MyCoreDataEntity {
func localizedActivityName() -> String {
return NSLocalizedString("SomeKeyFor" + myCoreDataEntityProperty)
}
}
Дополнительное примечание, мы не можем угадать, существует ли перевод (например, если вы его забыли)или получил неуправляемый на).Что мы можем сделать - это значение перевода, которое должно совпадать с ключом, если перевод не был найден.Вот почему наличие соглашения о наименовании ключа также полезно.Некоторые запускают их с __ModuleWhereItSUsed_Key
, всегда в верхнем регистре и т. Д.
extension MyCoreDataEntity {
func localizedActivityName() -> String {
let key = "SomeKeyFor" + myCoreDataEntityProperty
let translation = NSLocalizedString("SomeKeyFor" + myCoreDataEntityProperty)
if key == translation {
return myCoreDataEntityProperty //Or "Unknown Activity", default value, etc.
} else {
return translation
}
}
}