๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽ iOS

[iOS/Swift] Localization ์ฝ”๋“œ๋กœ ๋‹ค๊ตญ์–ด ์ฒ˜๋ฆฌ

by ํ‹ด๋”” 2023. 2. 23.
728x90
๋ฐ˜์‘ํ˜•

 

PROJECT > Info ํƒญ > Localization ์„น์…˜ > + ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ์„œ ์–ธ์–ด ์ถ”๊ฐ€

 

New File > Strings File ์ถ”๊ฐ€

 

์ƒ์„ฑ๋œ ํŒŒ์ผ ํ™•์ธ > ์˜ค๋ฅธ์ชฝ File ์ธ์ŠคํŽ™ํ„ฐ ํ™•์ธ 

Localize ๋ฒ„ํŠผ > ์–ธ์–ด ์„ ํƒ > Localize ๋ฒ„ํŠผ ํด๋ฆญ

 

๋‹ค์‹œ File Inspector ํ™•์ธํ•˜๋ฉด Localization ์„น์…˜ ์˜์—ญ์— ์ถ”๊ฐ€ํ•œ ์–ธ์–ด ๋ชฉ๋ก์ด ํ‘œ์‹œ๋จ

๋‹ค๊ตญ์–ด ์ฒ˜๋ฆฌํ•  ์–ธ์–ด ์„ ํƒํ•˜๋ฉด Project Navigator์—์„œ ์–ธ์–ด ๋ณ„๋กœ Localizable ์ƒ์„ฑ๋œ ๊ฒƒ ํ™•์ธ ๊ฐ€๋Šฅ

 

๋™์Œ์ด์˜์–ด, ํ™”๋ฉด๋ณ„๋กœ ๋ณ€์—ญ๋˜์–ด์•ผ ํ•˜๋Š” ๋‹จ์–ด๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ‚ค๊ฐ’์€ ๊ณ ์œ  ๊ฐ’์œผ๋กœ ์ž‘์„ฑํ•ด ์ฃผ๋Š” ๊ฒƒ์ด ์ข‹์Œ

 

String Extension

extension String {
    var localized: String {
        return NSLocalizedString(self, comment: "\(self)_comment")
    }
    
    func localized(_ args: CVarArg...) -> String {
        return String(format: localized, args)
    }
}
label.text = "login_enter_snow".localized

์‚ฌ์šฉ์‹œ์— ํ‚ค๊ฐ’์œผ๋กœ ์ง€์ •ํ•ด ์ค€ ๊ฐ’์— localized ์ต์Šคํ…์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

// Localizable (Korean)
"currency" = "%d์›";

// Localizable (English)
"currency" = "$ %d";

๋งŒ์ผ ํŠน์ • ๋‹จ์–ด๋‚˜ ์ˆซ์ž๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋กœ์ปฌ๋ผ์ด์ง• ๋˜์–ด์•ผ ํ•œ๋‹ค๋ฉด ์ˆซ์ž %d, ๋ฌธ์ž์—ด %@๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

label.text = "currency".localized(100)

์ธ์ž๋กœ ๊ฐ’์„ ์ „๋‹ฌํ•ด ์คŒ

 

๊ตฌ์กฐ์ฒด ์‚ฌ์šฉ

struct LocalizableStrings {
    struct Placeholder {
        static let name = "name".localized
    }
}

struct๋ฅผ ์ƒ์„ฑํ•œ ๋’ค ๋กœ์ปฌ๋ผ์ด์ฆˆ string์„ ๊ฐ€์ง€๋Š” ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด ์คŒ

// Localizable (Korean)
"name" = "์ด๋ฆ„์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”";

// Localizable (English)
"name" = "Insert your name";

 

์ฐธ๊ณ  ์‚ฌ์ดํŠธ

String Extension

https://gist.github.com/Juanpe/0ba09355229c0afa2ced6609735fd46c

Structure

https://i-colours-u.tistory.com/22

 

Pexels์—์„œ Tima Miroshnichenko๋‹˜์˜ ์‚ฌ์ง„: https://www.pexels.com/ko-kr/photo/5427870/

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€