Локализация без учета регистра в iOS - PullRequest
0 голосов
/ 30 апреля 2018

При реализации локализации я понимаю, что локализация чувствительна к регистру, что означает:

 - "Cookie Selection" = "Sélection de biscuit";

 - "COOKIE SELECTION" = "SÉLECTION DE BISCUIT";

над двумя - разные сущности. Если вы локализуете как NSLocalizedString("cookie selection", comment: ""), это не будет локализовано, так как сопоставление значения ключа, заданное для «выбора файла cookie», относится либо к заглавной строке, либо к строке в верхнем регистре.

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

"Cookie Selection" = "Sélection de biscuit";

и это должно работать для всех случаев, как показано ниже

 1. NSLocalizedString("Cookie Selection", comment: "")
 2. NSLocalizedString("COOKIE SELECTION", comment: "")
 3. NSLocalizedString("cookie selection", comment: "")

Примечание: -> без какого-либо пользовательского метода, используйте только NSLocalization.

Счастливое кодирование

Ответы [ 3 ]

0 голосов
/ 30 апреля 2018

Самое простое и грубое решение - всегда использовать заглавные буквы следующим образом:

NSLocalizedString("cookie selection".uppercased(), comment: "Comment")

Более понятный подход - создать категорию в классе String и использовать вместо этого метод:

        extension String {
        public static func LocalizedString(key: String, comment: String) -> String {
            return NSLocalizedString(key.uppercased(), comment: comment)
        }
    }

// Usage

    String.LocalizedString(key: "cookie selection", comment: "")

Другим хорошим подходом было бы создать файл констант и использовать их вместо использования жестко закодированных строк.

0 голосов
/ 30 апреля 2018

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

enum Strings: String {
    case cookieSelection

    var localized: String {
        return NSLocalizedString(self.rawValue, comment: "Something here")
    }
}

Теперь вы можете отслеживать все локализованные строки в одном месте, а также исключать возможность их неправильного использования.

Для использования сделайте что-то вроде ...

label.text = Strings.cookieSelection.localized

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

enum Strings: String {
    case cookieSelection = "Cookie Selection"
}
0 голосов
/ 30 апреля 2018

Нет .... Лучше использовать константный файл, в котором вы будете хранить все константы локализации и ее значения, поэтому значение константы локализации по ошибке не изменится по ошибке (предположим, вы набираете Cookie Selection вместо Cookie Selection ) во время звонка. Затем вы будете использовать значения в локализуемых файлах в качестве ключа.

LocalizationConstants.swift

let CookieSelectionKey = "Cookie Selection"

Localizable.strings (английский)

"Cookie Selection" = "Selection Of cookie";

Теперь назовите это как

  NSLocalizedString(CookieSelectionKey, comment: "")

Поскольку он возвращает строку, вы можете использовать методы экземпляра строки, такие как в верхнем регистре, заглавные буквы (и т. Д.) , чтобы соответственно изменить регистр.

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