스위프트에 해당하는 것이 NSLocalizedString(...)
있습니까? 에서 Objective-C
일반적으로 다음을 사용합니다.
NSString *string = NSLocalizedString(@"key", @"comment");
Swift에서 어떻게 동일한 결과를 얻을 수 있습니까? 기능을 찾았습니다.
func NSLocalizedString(
key: String,
tableName: String? = default,
bundle: NSBundle = default,
value: String = default,
#comment: String) -> String
그러나 매우 길고 전혀 편리하지 않습니다.
답변
다음 해결책을 사용합니다.
1) 확장 만들기 :
extension String {
var localized: String {
return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
}
}
2) Localizable.strings 파일에서 :
"Hi" = "Привет";
3) 사용 예 :
myLabel.text = "Hi".localized
즐겨! 😉
–upd :-
의견이있는 경우이 솔루션을 사용할 수 있습니다.
1) 확장 :
extension String {
func localized(withComment:String) -> String {
return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: withComment)
}
}
2) .strings 파일에서 :
/* with !!! */
"Hi" = "Привет!!!";
3) 사용 :
myLabel.text = "Hi".localized(withComment: "with !!!")
답변
는 NSLocalizedString
스위프트의 세계도 존재한다.
func NSLocalizedString(
key: String,
tableName: String? = default,
bundle: NSBundle = default,
value: String = default,
#comment: String) -> String
는 tableName
, bundle
및 value
매개 변수가 표시되는 default
기능을 호출하는 동안 우리는 이러한 매개 변수를 생략 할 수 있습니다 수단 키워드. 이 경우 기본값이 사용됩니다.
이는 메소드 호출이 다음과 같이 단순화 될 수 있다는 결론으로 이어집니다.
NSLocalizedString("key", comment: "comment")
스위프트 5- 변화가 없지만 여전히 그렇게 작동합니다.
답변
기존 답변의 변형 :
스위프트 5.1 :
extension String {
func localized(withComment comment: String? = nil) -> String {
return NSLocalizedString(self, comment: comment ?? "")
}
}
그런 다음 주석을 사용하거나 사용하지 않고 간단히 사용할 수 있습니다.
"Goodbye".localized()
"Hello".localized(withComment: "Simple greeting")
참고 사항genstrings
이 솔루션 작동하지 않습니다를.
답변
이 방법을 사용하면 다른 유형 (예 : Int 또는 CurrencyUnit과 같은 사용자 정의 클래스)에 대해 다른 구현을 만들 수 있습니다. genstrings 유틸리티를 사용하여이 메소드 호출을 스캔 할 수도 있습니다. 단순히 명령에 루틴 플래그를 추가하십시오
genstrings MyCoolApp/Views/SomeView.swift -s localize -o .
신장:
import UIKit
extension String {
public static func localize(key: String, comment: String) -> String {
return NSLocalizedString(key, comment: comment)
}
}
용법:
String.localize("foo.bar", comment: "Foo Bar Comment :)")
답변
스위프트 3 버전 🙂 …
import Foundation
extension String {
var localized: String {
return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
}
}
답변
실제로 두 단계를 사용하여 Swift 프로젝트에서 텍스트를 번역 할 수 있습니다.
1) 첫 번째 단계는 이전 방법을 사용하여 번역 가능한 모든 문자열을 만드는 것입니다.
NSLocalisedString("Text to translate", comment: "Comment to comment")
1.1) 그런 다음 Genstring을 사용하여 Localizable.strings를 생성해야합니다.
$ genstrings *swift
2) 나중에이 답변을 사용해야합니다 .
2.1) 정규식에 따라 XCode “찾기 및 바꾸기”옵션을 사용하십시오. 주어진 예 (주석이없는 경우)의 정규 표현식은 다음과 같습니다.
NSLocalizedString\((.*)\, comment:\ \"\"\)
그리고 그것을 대체하십시오
$1.localized
또는 (의견이있는 경우)
NSLocalizedString\((.*)\, comment:\ (.*)\)
그리고 그것을 대체하십시오
$1.localizedWithComment(comment: $2)
원하는대로 정규식과 다른 확장 조합을 자유롭게 사용할 수 있습니다. 일반적인 방법은 전체 프로세스를 두 단계로 나누는 것입니다. 희망이 도움이됩니다.
답변
“코멘트”가 항상 무시되는 경우에 대한 작은 도우미 메소드를 작성했습니다. 적은 코드는 읽기 쉽다 :
public func NSLocalizedString(key: String) -> String {
return NSLocalizedString(key, comment: "")
}
클래스 외부의 아무 곳에 나 넣으면 Xcode 가이 전역 메서드를 찾습니다.