2014-08-29 6 views
0

Я просто заканчиваю свое первое приложение и локализую различные функции. У меня есть одна функция в моем приложении, что я не уверен, могу ли я локализовать или нет.Проблемы с сообщением приветствия локализации

В основном, когда пользователи открывают мое приложение, их приветствует сообщение, в котором говорится «добрый день», «доброе утро» или «хороший вечер». Я создал некоторый код, который проверяет префикс времени, чтобы решить, какое сообщение отображать, однако, поскольку разные страны форматируют время по-разному, я не уверен, как это можно локализовать.

Должен ли я выяснить страны, в которых он работает, и добавить оператор if, который определяет, может ли приложение отображать это приветствие или нет? В противном случае вместо этого будет отображаться приветствие на основе их имени?

Вот мой код:

var date = NSDate() 
    let dateFormatter = NSDateFormatter() 
    dateFormatter.timeStyle = .ShortStyle 
    let time = dateFormatter.stringFromDate(date) 

    var currentTimeOfDay = "" 

    if time.hasPrefix("0") { 
     currentTimeOfDay = "morning" 
    } else if time.hasPrefix("10") { 
     currentTimeOfDay = "morning" 
    } else if time.hasPrefix("11") { 
     currentTimeOfDay = "morning" 
    } else if time.hasPrefix("12") { 
     currentTimeOfDay = "morning" 
    } else if time.hasPrefix("13") { 
     currentTimeOfDay = "afternoon" 
    } else if time.hasPrefix("14") { 
     currentTimeOfDay = "afternoon" 
    } else if time.hasPrefix("15") { 
     currentTimeOfDay = "afternoon" 
    } else if time.hasPrefix("16") { 
     currentTimeOfDay = "afternoon" 
    } else if time.hasPrefix("17") { 
     currentTimeOfDay = "afternoon" 
    } else if time.hasPrefix("18") { 
     currentTimeOfDay = "evening" 
    } else if time.hasPrefix("19") { 
     currentTimeOfDay = "evening" 
    } else if time.hasPrefix("2") { 
     currentTimeOfDay = "evening" 
    } 

ответ

6

Вы не должны использовать локализованную строку времени, чтобы определить время дня.

Использование NSCalendar и NSDateComponents:

let now = NSDate() 
let cal = NSCalendar.currentCalendar() 
let comps = cal.components(.CalendarUnitHour, fromDate: now) 
let hour = comps.hour 

Теперь hour представляет собой целое число в диапазоне 0 ... 23.

var currentTimeOfDay = "" 
switch hour { 
case 0 ... 12: 
    currentTimeOfDay = "morning" 
case 13 ... 17: 
    currentTimeOfDay = "afternoon" 
default: 
    currentTimeOfDay = "evening" 
} 
+0

Ах! Большое спасибо! Я должен был использовать оператор диапазона в моем исходном коде, но я полностью забыл об этом. – user3746428

+0

@ user3746428: Добро пожаловать. Также посмотрите методы 'NSLocalizedString()', чтобы получить выход, локализованный в настройках устройства. –

+0

Я только что попробовал свое приложение на устройстве iOS 7 в первый раз, и я получаю сообщение об ошибке. Когда я комментирую этот код, приложение работает нормально, но когда я его оставляю, я получаю эту ошибку »- [_ NSCopyOnWriteCalendarWrapper: fromDate:]: нераспознанный селектор, отправленный в экземпляр 0x175b5580 ' – user3746428

0

Для тех, кто использует Swift 4,0

let dateComponents = Calendar.current.dateComponents([.hour], from: Date()) 

    if let hour = dateComponents.hour { 
     let greetingString: String 
     switch hour { 
     case 0..<12: 
     greetingString = "Good morning" 
     case 12..<17: 
     greetingString = "Good afternoon" 
     default: 
     greetingString = "Good evening" 
     } 

 Смежные вопросы

  • Нет связанных вопросов^_^