[ios] Swift에서 NSLocalizedString은 무엇입니까?

스위프트에 해당하는 것이 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, bundlevalue매개 변수가 표시되는 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 가이 전역 메서드를 찾습니다.