programing

Swift에서 변수와 함께 NSLocalizedString 함수를 사용하는 방법은 무엇입니까?

bestprogram 2023. 8. 20. 12:18

Swift에서 변수와 함께 NSLocalizedString 함수를 사용하는 방법은 무엇입니까?

다음을 사용하여 앱을 현지화하려고 합니다.NSLocalizedStringXLIFF 파일을 가져올 때 대부분은 매력적으로 작동하지만 일부는 그렇지 않고 일부 문자열은 현지화되지 않았습니다.문제의 원인은 다음과 같습니다.NSLocalizedString내부에 다음과 같은 변수가 포함되어 있습니다.

NSLocalizedString(" - \(count) Notifica", comment: "sottotitolo prescrizione per le notifiche al singolare")

또는

NSLocalizedString("Notifica per \(medicina!) della prescrizione \(prescription!)\nMemo: \(memoTextView.text)", comment: "Messaggio della Local Notification")

아마도 이것은 이런 종류의 것들에 대한 정확한 구문이 아닐 것입니다.누가 스위프트에서 어떻게 하는지 설명해줄 수 있나요?

사용할 수 있습니다.sprintf형식 매개 변수NSLocalizedString예를 들어 다음과 같습니다.

let myString = String(format: NSLocalizedString(" - %d Notifica", comment: "sottotitolo prescrizione per le notifiche al singolare"), count)

WWDC 2014 "Xcode 6으로 현지화" 세션 #412에서 Swift에서 이를 위한 올바른 방법은 다음과 같습니다.

String.localizedStringWithFormat(
    NSLocalizedString(" - %d Notifica",
    comment: "sottotitolo prescrizione per le notifiche al singolare"),
    count)

참고:localizedStringWithFormat반환된 문자열을 설정합니다.local지정된 첫 번째 인수를 기반으로 합니다.

  • 아니요, 그것은 아무것도 번역하지 않습니다.
  • 이 혼란은 다음과 같은 잘못된 이름에서 비롯됩니다.NSLocalizedString.
  • 이름이 지어졌어야 했습니다.NSTranslatedString또는NSTranslatable(대신)NSLocalizedString).

나는 현지화할 문자열이 많기 때문에 String에 대한 확장을 만드는 접근법을 따라왔습니다.

extension String {
    var localized: String {
        return NSLocalizedString(self, comment:"")
    }
}

코드의 현지화에 사용하려면 다음을 수행합니다.

self.descriptionView.text = "Description".localized

동적 변수가 있는 문자열의 경우 다음을 수행합니다.

self.entryTimeLabel.text = "\("Doors-open-at".localized) \(event.eventStartTime)"

다른 언어(예: 아랍어 및 영어)에 대한 문자열 파일의 문자열 선언

enter image description here enter image description here

희망이 도움이 될 것입니다!

위의 해결책을 시도해 보았지만 아래 코드가 작동했습니다.

스위프트 4

extension String {

    /// Fetches a localized String
    ///
    /// - Returns: return value(String) for key
    public func localized() -> String {
        let path = Bundle.main.path(forResource: "en", ofType: "lproj")
        let bundle = Bundle(path: path!)
        return (bundle?.localizedString(forKey: self, value: nil, table: nil))!
    }


    /// Fetches a localised String Arguments
    ///
    /// - Parameter arguments: parameters to be added in a string
    /// - Returns: localized string
    public func localized(with arguments: [CVarArg]) -> String {
        return String(format: self.localized(), locale: nil, arguments: arguments)
    }

}

// variable in a class
 let tcAndPPMessage = "By_signing_up_or_logging_in,_you_agree_to_our"
                                     .localized(with: [tAndc, pp, signin])

// Localization File String
"By_signing_up_or_logging_in,_you_agree_to_our" = "By signing up or logging in, you agree to our \"%@\" and \"%@\" \nAlready have an Account? \"%@\"";

String에서 사용하는 확장자가 있습니다. 로컬라이즈를 추가합니다.변수 인수가 있는 형식 함수의 경우

extension String {

     func localizeWithFormat(arguments: CVarArg...) -> String{
        return String(format: self.localized, arguments: arguments)        
     }
            
     var localized: String{
         return Bundle.main.localizedString(forKey: self, value: nil, table: "StandardLocalizations")
     }
}

용도:

let siriCalendarText = "AnyCalendar"
let localizedText = "LTo use Siri with my app, please set %@ as the default list on your device reminders settings".localizeWithFormat(arguments: siriCalendarTitle)

String과 동일한 함수 및 속성 이름을 사용하지 않도록 주의하십시오.저는 보통 모든 프레임워크 기능에 3글자 접두사를 사용합니다.

저는 같은 함수를 작성했습니다.UILabel

extension UILabel {
    
    func setLocalizedText(key: String) {
        self.text = key.localized
    }
    
    func setLocalizedText(key: String, arguments: [CVarArg]) {
        self.text = String(format: key.localized, arguments: arguments)
    }
}

당신이 원한다면 이것을 옮길 수 있습니다.localizedUILabel에 대한 속성도 지정합니다.

extension String {
        
    var localized: String{
        return Bundle.main.localizedString(forKey: self, value: nil, table: nil)
    }
}

내 지역화 가능

"hi_n" = "Hi, %@!";

다음과 같이 사용:

self.greetingLabel.setLocalizedText(key: "hi_n", arguments: [self.viewModel.account!.firstName])
// Shows this on the screen -> Hi, StackOverflow!

다음을 생성했습니다.extension로.String많이 있었으므로strings되려고localized.

extension String {
    var localized: String {
        return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
    }
}

예:

let myValue = 10
let anotherValue = "another value"

let localizedStr = "This string is localized: \(myValue) \(anotherValue)".localized
print(localizedStr)

언급URL : https://stackoverflow.com/questions/26277626/how-to-use-nslocalizedstring-function-with-variables-in-swift