Swift에서 변수와 함께 NSLocalizedString 함수를 사용하는 방법은 무엇입니까?
다음을 사용하여 앱을 현지화하려고 합니다.NSLocalizedString
XLIFF 파일을 가져올 때 대부분은 매력적으로 작동하지만 일부는 그렇지 않고 일부 문자열은 현지화되지 않았습니다.문제의 원인은 다음과 같습니다.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)"
다른 언어(예: 아랍어 및 영어)에 대한 문자열 파일의 문자열 선언
희망이 도움이 될 것입니다!
위의 해결책을 시도해 보았지만 아래 코드가 작동했습니다.
스위프트 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)
}
}
당신이 원한다면 이것을 옮길 수 있습니다.localized
UILabel에 대한 속성도 지정합니다.
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
'programing' 카테고리의 다른 글
신속한 프로젝트에서 Objective-C 코코아 포드를 사용하는 방법 (0) | 2023.08.20 |
---|---|
어휘 폐쇄는 어떻게 작동합니까? (0) | 2023.08.20 |
통화로 더블 포맷하는 방법 - 스위프트 3. (0) | 2023.08.20 |
Swift Bridging 헤더 가져오기 문제 (0) | 2023.08.20 |
Excel 시트 안에 표 객체에 행을 삽입하는 방법? (0) | 2023.08.20 |