Как получить NSLocalizedString для конкретной локали или как получить нелокализованную строку

Есть ли способ получить локализованную строку для определенного языкового стандарта, отличного от текущего языкового стандарта?

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

myLocalizedString.getLocalizedString (язык: NSLocale)

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


person Frank R.    schedule 24.07.2019    source источник


Ответы (2)


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

func localizestring(for languageCode : String , keyString : String) -> String {
    //language code like --> en/ef/da
    let path = Bundle.main.path(forResource: languageCode, ofType: "lproj")
    let bundle = Bundle(path: path!)
    return NSLocalizedString(keyString , tableName: nil, bundle: bundle!, value: "", comment: "")
}
person komara    schedule 24.07.2019

Я решил это, расширив String этим методом в Swift. Таким образом вы можете получить локализованную строку для любого языкового стандарта в вашем приложении.

extension String {
    func localized(forLanguageCode lanCode: String) -> String {
        guard
            let bundlePath = Bundle.main.path(forResource: lanCode, ofType: "lproj"),
            let bundle = Bundle(path: bundlePath)
        else { return "" }
        
        return NSLocalizedString(
            self,
            bundle: bundle,
            value: " ",
            comment: ""
        )
    }
}

Пример (получить локализованную строку для украинского языка, если системный язык английский):

"settings_choose_language".localized(forLanguageCode: "uk")
person Dmytro Yashchenko    schedule 25.02.2021