์๋ ํ์ธ์~
์ค๋์ ๊ฐ์ธ ์ฑ์ ํตํด์ ์ ์ฉํ๋
Localize ๋ฐฉ๋ฒ์ ๋ํด์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค : )
์ ์ฉ ๋ฐฉ๋ฒ
1. Project - Info - Localizations์์ + ๋ฒํผ์ ํด๋ฆญํ๊ณ ์ ์ฉํ๊ณ ์ ํ๋ ์ธ์ด๋ฅผ ์ ํํฉ๋๋ค.
2. ์ด๋์ ์ ์ฉํ๊ณ ์ถ์์ง ์ ํํฉ๋๋ค.
3. Strings File ์ถ๊ฐํ๊ธฐ (ํ์ผ ์ด๋ฆ์ Localizable๋ก ๋ง๋ค๊ธฐ)
4. ์ฐ์ธก ์ฐฝ(Inspector)์์ ์ง์ํ๊ณ ์ ํ๋ ์ธ์ด๋ฅผ ์ ํํ๊ธฐ
์ฌ๊ธฐ์ ์คํ ๋ฆฌ๋ณด๋์ ๊ฒฝ์ฐ์๋ ์กฐ๊ธ ๋ค๋ฆ ๋๋ค.
์คํ ๋ฆฌ๋ณด๋๋ ์ฒดํฌํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด Localize ํ์ผ์ด ์๊ฒผ์ ํ ๋ฐ
ํด๋น localizable ํ์ผ์ ๋ค์ด๊ฐ ๋ณด๋ฉด ์๋์ ๊ฐ์ ๋ด์ฉ์ด ์์ฑ๋์ด ์์ต๋๋ค.
/* Class = "UILabel"; text = "์ค์ "; ObjectID = "2Q5-Fx-Kwa"; */
"2Q5-Fx-Kwa.text" = "์ค์ ";
์ฌ๊ธฐ์ ์ํ๋ ๋ฌธ๊ตฌ๋ก ๋ฐ๊พธ๊ณ ์งํํ๋ฉด ๋ฉ๋๋ค.
์ข์ธก์ ๊ฒฝ์ฐ ObjectID๋ก ๋ณต์ฌ ์ดํ ๊ฒ์ํ๋ฉด ํด๋น ์คํ ๋ฆฌ๋ณด๋์ ์ค๋ธ์ ํธ๋ก ์ด๋๋๋ฏ๋ก ํ์ธํ๋ฉด์ ์งํํ์๋ฉด ๋ฉ๋๋ค.
5. Localize ํ์ผ ์์ฑ ์์
๊ธฐ์กด์๋ "month" = "month"; ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์์ฑํ์ผ๋
Script๋ฅผ ํตํด ํด๋์ค๋ฅผ ์์ฑํ๊ณ Localize ์ฒ๋ฆฌ๊ฐ ๋ ํ๋กํผํฐ๋ฅผ ํ์ฉํ๊ธฐ ์ํด์
๋ค์๊ณผ ๊ฐ์ด ์์ฑํด ์ฃผ์๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
month = "month";
day = "day";
6. String์ Extension์ Localized ์์ฑํ๊ธฐ
๊ฒฐ๊ณผ์ ์ผ๋ก ์๋์ ๊ฐ์ ํด๋์ค๊ฐ ์์ฑ๋๋๋ฐ
// I18N.month๋ฅผ ์ด์ฉํด ์์๋ํ ๋ก์ปฌ๋ผ์ด์ฆ ์ฒ๋ฆฌ
class I18N {
static let month = "month".localized
}
์ด๋ ์ฌ์ฉ๋๋ localized๋ฅผ ๊ตฌํํ๋ ค๋ฉด String์์ Extension์ ํตํด ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๋ฉด ๋ฉ๋๋ค!
7. ๊ฐ์ฅ ์ค์ํ I18N ํด๋์ค๋ฅผ ๋ง๋ค์ด์ฃผ๋ Script ์์ฑํ๊ธฐ
[์ฐธ๊ณ ์ฌํญ]
I18N์ Internationalization์ ์ฝ์๋ก ๊ตญ์ ํ๋ ๋ป์ ๋๋ค. ํด๋์ค ๋ช ์ ์์ ๋กญ๊ฒ ์์ฑํ์๋ฉด ๋ฉ๋๋ค.
Project - Target - Build Phases๋ก ๋ค์ด๊ฐ์ ์๋ก์ด Script๋ฅผ ์์ฑ(์ข์ธก ์๋จ์ + ๋ฒํผ)ํ๊ณ ๋์
์๋์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ฃ์ด์ฃผ์๋ฉด ๋ฉ๋๋ค.
touch tempI18N.swift
echo "struct I18N {" >> tempI18N.swift
file="${SRCROOT}/์์ ์ ํ๋ก์ ํธ ํด๋/ko.lproj/Localizable.strings"
// ๋ง์ฝ Memo๋ผ๋ ํด๋์์ Resource๋ผ๋ ํด๋๊ฐ ์๊ณ ๊ทธ์์ Localize ํ์ผ์ด ์๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ์๋ฉด ๋ฉ๋๋ค.
// file="${SRCROOT}/Memo/Resource/ko.lproj/Localizable.strings"
while IFS= read -r line
do
variableName=$(echo ${line%%=*})
if [ "$variableName" != "" ]
then
echo " static let $variableName = \"$variableName\".localized" >> tempI18N.swift
fi
done <"$file"
echo "}" >> tempI18N.swift
cat "tempI18N.swift" > ${SRCROOT}/ํ๋ก์ ํธ ํด๋/I18N.swift
// temp18N.swift ํ์ผ์ ๋ณต์ฌํด์ ์ํ๋ ๊ณณ์ ๋ณต์ฌํด์ฃผ๋ ๊ตฌ๋ฌธ์ด๋ฏ๋ก
// ์ ์ฅ๋๊ธธ ์ํ์๋ ์์น๋ก ๋ณ๊ฒฝํด์ฃผ์ธ์~
rm tempI18N.swift
๊ฐ๋จํ๊ฒ ์์ ์คํฌ๋ฆฝํธ๋ฅผ ์ค๋ช ํด ๋ณด๋ฉด
tempI18N.swift๋ผ๋ ํ์ผ์ ๋ง๋ค๊ณ
๊ธฐ์กด์ ๋ง๋ค์ด ๋๋ Localize ํ์ผ ์ค ko.lproj์์
ํ ์ค, ํ ์ค ์ฝ์ด๊ฐ๋ฉฐ ์ ํฌ๊ฐ ์ํ๋ ํฌ๋งท์ผ๋ก ์์ฑํด์
์ํ๋ ๊ฒฝ๋ก์ ๋ถ์ฌ์ฃผ๋ ์คํฌ๋ฆฝํธ์ ๋๋ค.
์ด๋ ๊ฒ ์์ฑํ๊ณ Build๋ฅผ ํ๊ฒ ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ด I18N์ด๋ผ๋ ์์คํ์ผ์ด ์์ฑ๋๊ฒ ๋ฉ๋๋ค.
8. ์ฌ์ฉํ๊ธฐ
์ด์ Localize ํ์ผ์ ์์ ํ๋ฉด
์๋์ผ๋ก I18N ํด๋์ค์์ ํ๋กํผํฐ๊ฐ ์์ฑ๋๊ฒ ๋๊ณ
์ ํฌ๋ ํ๋ก์ ํธ ๋ด๋ถ์์ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.
label1.text = I18N.month
// ํ๊ตญ์ด๋ผ๋ฉด ์
// ์์ด๋ผ๋ฉด month
label2.text = I18N.day
// ํ๊ตญ์ด๋ผ๋ฉด ์ผ
// ์์ด๋ผ๋ฉด day
๋ค๋ค ๋์์ด ๋์์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค.
๊ทธ๋ผ ์ด๋ง ๐๐ป ๐๐ป ๐๐ป
'ํ๋ก์ ํธ > Today I Define' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Today I Define] NavigationBar๋ฅผ ๋ฎ์ง ๋ชปํ๋ ์ด์ (0) | 2022.05.15 |
---|---|
[Today I define] ๋ก์ปฌ ์๋ฆผ ์์ ( + ์ดํ ์๊ฐ) (0) | 2022.03.14 |