Как отобразить локализованные дни недели в CollectionView в Swift? IOS - PullRequest
0 голосов
/ 06 июля 2018

Я только что делал приложение погоды, которое отображает 5-дневную погоду. И проблема, с которой я сейчас сталкиваюсь, это как мне отображать рабочие дни, которые динамически извлекаются в моем представлении коллекции? Они хорошо отображаются на английском языке, но я хочу, чтобы они были на русском языке. Источник указан ниже:

Это код, который находится в моей cellForItemAt функции

dateFormatter.locale = Locale(identifier: "en_US")
dateFormatter.setLocalizedDateFormatFromTemplate("EEEE")
let actualDate = dateFormatter.string(from: date)
cell.dayCollection.text = String(NSLocalizedString("%@", comment: "displaying weekdays"), actualDate) // see this line
return cell

Это мой файл Localizable.string:

"%@" = "Воскресенье";
"%@" = "Понедельник";
"%@" = "Вторник";
"%@" = "Среда";
"%@" = "Четверг";
"%@" = "Пятница";
"%@" = "Суббота";

Пожалуйста, дайте мне знать, если вам нужен какой-либо другой источник или ответ. Буду очень признателен за любую помощь!

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Я думаю, что лучше использовать локализацию по умолчанию для дат вместо настраиваемой локализованной строки.

let date = Date() 
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "ru_RU")
dateFormatter.dateFormat = "EEEE"
let day = dateFormatter.string(from: date).capitalized
print(day)  // you will see eg. "Пятница"

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

0 голосов
/ 06 июля 2018

Ваш Localized.string файл должен быть

"Sunday" = "Воскресенье";
"Monday" = "Понедельник";
"Tuesday" = "Вторник";
"Wednesday" = "Среда";
"Thursday" = "Четверг";
"Friday" = "Пятница";
"Saturday" = "Суббота";

и

let day = NSLocalizedString(actualDate, comment: "")
cell.dayCollection.text = day

Обновление для отображения «Сегодня» как текущего дня

Сначала создайте Extension+Date.swift файл. Добавьте приведенный ниже код в файл.

extension Date {
        /// Compare self with another date.
        ///
        /// - Parameter anotherDate: The another date to compare as Date.
        /// - Returns: Returns true if is same day, otherwise false.
        public func isSame(_ anotherDate: Date) -> Bool {
            let calendar = Calendar.autoupdatingCurrent
            let componentsSelf = calendar.dateComponents([.year, .month, .day], from: self)
            let componentsAnotherDate = calendar.dateComponents([.year, .month, .day], from: anotherDate)

            return componentsSelf.year == componentsAnotherDate.year && componentsSelf.month == componentsAnotherDate.month && componentsSelf.day == componentsAnotherDate.day
        }
}

В вашем cellForRow изменить на:

var actualDate = dateFormatter.string(from: date)
if date.isSame(Date()) {
    actualDate = "Today"
}

Добавьте Today ключ к вашему Localized.string файлу

"Today" = "Cегодня";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...