SwiftUI로 iOS용 앱을 만들 때 다국어 처리하는 방법입니다.
1. String 파일 생성
"New Files..."을 누릅니다.
그리고 필터에 "String"을 치면 Resource에 String File이 보입니다.
Next를 누르면 새로운 창이 뜨는데 localizable 파일이 생성할 위치를 지정한 후 Create를 클릭합니다.
생성된 Localizable을 선택한 후 오른쪽 창에 있는 "Localize..."를 클릭합니다.
그럼 Localize... 가 다음처럼 펼쳐집니다.
2. 언어 추가
project > Info 에서 "Use Base Internationalization" 위에 있는 "+"를 누릅니다.
한글을 추가하기 위해 Korean (ko)를 선택합니다.
Finish를 누르면 다음과 같이 한글이 추가된 것을 확인할 수 있습니다.
그리고 왼쪽 Localizable을 펼쳐보면 English와 Korean이 보입니다.
3. localizable 파일에 텍스트 추가
Key = value 형식으로 써줍니다.
Key는 프로그램에서 사용할 값으로 고유해야 합니다.
그리고 세미콜론(;)을 문장 맨 뒤에 써줍니다.
4. 개발 화면에 적용
문자가 들어가야 할 곳에 NSLocalizedString("Hello", comment: "comment")으로 구현하면 됩니다.
만약 Key가 Localizable에 없을 때는 Key를 그대로 보여줍니다.
그리고 Key는 영어 뿐만 아니라 다른 언어, 심지어 특수 기호도 사용가능합니다.
다국어 처리의 기본은 영어입니다. 따라서 사용언어가 없을 경우는 영어로 표시됩니다.
마지막으로 문자열 포맷을 소개합니다.
%@ : string
%% : character
%d : int
%f : float
%ld : long
좀 더 다양한 포맷은 다음을 참조하십시오.
문자열 포맷이 필요한 이유는 바로 언어 별로 문장 순서가 달라서입니다.
예를 들어 한글로는 "길동아 안녕."을 영어로는 "Hi, Kildong"으로 쓰니까요.
그런데 이름은 길동이만 있는 것이 아닙니다. 그래서 변경가능한 것을 다양한 언어로 적용하기 위해 포맷을 사용하는 것입니다.
String(format: NSLocalizedString("%@ 안녕하세요.", comment: ""), "홍길동")
추가로 Text, Toggle, Picker 등 몇몇 SwiftUI type은 생성할 때 localized 문자를 찾습니다. 즉 NSLocalizedString을 사용하지 않아도 다국어 처리가 가능하다는 말입니다.
Initializers for several SwiftUI types – such as Text, Toggle, Picker and others – implicitly look up a localized string when you provide a string literal. When you use the initializer Text("Hello"), SwiftUI creates a LocalizedStringKey for you and uses that to look up a localization of the Hello string. This works because LocalizedStringKey conforms to ExpressibleByStringLiteral. |
https://developer.apple.com/documentation/swiftui/localizedstringkey
사용 방법은 localizable에 등록한 key를 그냥 사용하면 됩니다.
포맷을 사용할 때는 주의해야 할 사항이 있습니다.
바로 key에 임의의 값이 들어갈 위치를 지정해야 한다는 것입니다. 그리고 그 위치에 \(변수명)로 써 줍니다.
즉, "%@ 안녕하세요." = "Hello %@";를 Localizable에 등록을 했다면,
Text("\(name1) 안녕하세요.") 처럼 사용해야 한다는 것입니다. (%@ 위치에 \(name1)를 사용해야 합니다.)
그런데 만약 Text("%@ 안녕하세요. \(name1)")라고 했다면,
Localizable에 없는 문자로 인식해서 '%@ 안녕하세요. 홍길동'으로 나옵니다.
참고로, 중간에 스페이스(' ')가 더 들어가도 다른 문자로 인식합니다.
사용예 입니다.
'다시 개발자' 카테고리의 다른 글
'Can't connect to HTTPS URL because the SSL module is not available.' 처리 방법 (0) | 2023.04.06 |
---|---|
windows11에 OpenSSL 설치 (0) | 2023.04.06 |
Flutter, Member not found: ‘FirebaseAppPlatform.verifyExtends’ 에러 처리 (0) | 2023.01.09 |
Xcode, Failed to prepare the device for development error (0) | 2023.01.06 |
Apple Developer에서 Capabilities 추가하기 (0) | 2022.12.22 |
댓글