Where who wants to meet someone
[SwiftUI] DatePicker로 달력 표시할 때, 헤더 언어 바꾸기 본문
달력을 보여주기 위해 DatePicker를 사용하고 있는데, 상단의 연도와 달을 선택할 수 있는 부분이 "March 2024"와 같이 영문으로만 표기가 되는 것을 확인했다.
기기의 언어/지역 설정과 무관하고, DatePicker에서 설정할 수 있는 별도의 modifier가 없어 방법을 찾던 도중 하기의 방법을 알게 되었다.
DatePicker(
"DatePicker",
selection: $SelectedDate,
displayedComponents: .date)
.datePickerStyle(.graphical)
.environment(\.locale, Locale(identifier: String(Locale.preferredLanguages[0])))
환경변수를 사용하여 Locale을 지정해주는 것이다. 그러나 Locale에 current나 autoupdatingCurrent를 사용해도 변화가 없어 identifier에 직접 한국 코드를 적어야 하나 고민을 했고, preferredLanguages의 첫 번째 항목을 이용하기로 했다.
https://developer.apple.com/documentation/foundation/nslocale/1415614-preferredlanguages
preferredLanguages | Apple Developer Documentation
An ordered list of the user's preferred languages.
developer.apple.com
Language and Locale IDs
Language and Locale IDs Language IDs identify a language, dialect, or script and are used to name language-specific resource folders stored in the app bundle. Locale IDs identify a set of regional conventions and are used in APIs—such as the NSLocale, NS
developer.apple.com
preferredLanguages는 사용자의 선호 언어 리스트인데, Language and Locale IDs에 나와있는 것처럼
[language designator]_[region designator]
의 순으로 저장되어 있다.
위 시뮬레이터와 같이 [설정] - [언어 및 지역] 에서 선호하는 언어에 한국어, English 순으로 되어있다면, 아래 스크린샷과 같이 preferredLanguages에는
["ko(language designator_korean)-KR(region designator_Korea)]
["en(language designator_english)-KR(region designator_Korea)]
로 저장이 된다.
물론 이는 언어 및 지역 하단의 지역이 대한민국으로 설정되어 있다는 가정 하, 다른 나라로 되어있다면 KR부분이 달라진다.
그래서 identifier에 하드코딩으로 직접 id를 입력하는 대신, 사용자 선호도에 따라 결정되도록 하는데에 사용할 수 있는 것이다.
preferredLanguage의 첫번째 항목 [0]을 인자로 전달해줘도 되고, prefix(2)로 앞의 ko, en 부분만 전달해줘도 동일하게 적용된다.
'Apple Developer > iOS(SwiftUI)' 카테고리의 다른 글
[SwiftUI] modal presentation 배경색상 반투명 처리하기 (0) | 2024.03.21 |
---|---|
[SwiftUI] Picker 선택된 항목 색상 변경하기 (0) | 2024.03.16 |
[SwiftUI] .sheet의 이것저것 알아보기 (1) | 2024.02.08 |
[SwiftUI] tabItem 색상 변경 (0) | 2024.01.27 |
[WWDC20] Data Essentials in SwiftUI (1) | 2024.01.26 |