์ด ํ์ด์ง์ ์ํ๋ AI ์ด์์คํดํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์๋ฅผ ์์ฝํฉ๋๋ค
์ด ํ์ด์ง์ ์ฝํ ์ธ ๋ AI๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒ์ญ๋์์ต๋๋ค.
์์ด ์๋ณธ ๋ด์ฉ์ ์ต์ ๋ฒ์ ์ ๋ณด๊ธฐ์ด ๋ฌธ์๋ฅผ ๊ฐ์ ํ ์์ด๋์ด๊ฐ ์์ผ์๋ฉด GitHub์ ํ ๋ฆฌํ์คํธ๋ฅผ ์ ์ถํ์ฌ ์์ ๋กญ๊ฒ ๊ธฐ์ฌํด ์ฃผ์ธ์.
๋ฌธ์์ ๋ํ GitHub ๋งํฌ๋ฌธ์์ Markdown์ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
์ปดํฌ๋ํธ๋ณ i18n vs ์ค์์ง์ค์ i18n
์ปดํฌ๋ํธ๋ณ ์ ๊ทผ๋ฒ์ ์๋ก์ด ๊ฐ๋
์ด ์๋๋๋ค. ์๋ฅผ ๋ค์ด, Vue ์ํ๊ณ์์ vue-i18n์ SFC i18n (Single File Component)์ ์ง์ํฉ๋๋ค. Nuxt๋ ์ปดํฌ๋ํธ๋ณ ๋ฒ์ญ์ ์ ๊ณตํ๋ฉฐ, Angular๋ Feature Modules๋ฅผ ํตํด ์ ์ฌํ ํจํด์ ์ฌ์ฉํฉ๋๋ค.
Flutter ์ฑ์์๋ ์ข ์ข ๋ค์๊ณผ ๊ฐ์ ํจํด์ ๋ณผ ์ ์์ต๋๋ค:
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
ํ์ง๋ง React ํ๊ฒฝ์์๋ ์ฃผ๋ก ์ฌ๋ฌ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ๋ณด๋ฉฐ, ์ ๋ ์ด๋ฅผ ์ธ ๊ฐ์ง ๋ฒ์ฃผ๋ก ๋๋๊ฒ ์ต๋๋ค:
์ค์์ง์ค์ ์ ๊ทผ (i18next, next-intl, react-intl, lingui)
- (๋ค์์คํ์ด์ค ์์ด) ๋จ์ผ ์์ค์์ ์ฝํ ์ธ ๋ฅผ ๊ฐ์ ธ์จ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ์ด ๋ก๋๋ ๋ ๋ชจ๋ ํ์ด์ง์ ์ฝํ ์ธ ๋ฅผ ๋ก๋ํฉ๋๋ค.
์ธ๋ถํ๋ ์ ๊ทผ (intlayer, inlang)
- ํค ๋จ์ ๋๋ ์ปดํฌ๋ํธ ๋จ์๋ก ์ฝํ ์ธ ์กฐํ๋ฅผ ์ธ๋ถํํฉ๋๋ค.
์ด ๋ธ๋ก๊ทธ์์๋ ์ปดํ์ผ๋ฌ ๊ธฐ๋ฐ ์๋ฃจ์ ์ ์ด์ ์ ๋ง์ถ์ง ์๊ฒ ์ต๋๋ค. ํด๋น ๋ด์ฉ์ ์ด๋ฏธ ์ฌ๊ธฐ์์ ๋ค๋ค์ต๋๋ค: Compiler vs Declarative i18n. ์ปดํ์ผ๋ฌ ๊ธฐ๋ฐ i18n(์: Lingui)์ ๋จ์ํ ์ฝํ ์ธ ์ถ์ถ๊ณผ ๋ก๋ฉ์ ์๋ํํ ๋ฟ์ด๋ผ๋ ์ ์ ์ ์ํ์ธ์. ๋ด๋ถ์ ์ผ๋ก๋ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์๋ค๊ณผ ๋์ผํ ํ๊ณ๋ฅผ ๊ณต์ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์ฝํ ์ธ ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ์์ ๋ ์ธ๋ถํํ ์๋ก ์ปดํฌ๋ํธ์ ์ถ๊ฐ์ ์ธ ์ํ์ ๋ก์ง์ ์ฝ์ ํ ์ํ์ด ์ปค์ง๋๋ค.
์ธ๋ถํ๋ ์ ๊ทผ ๋ฐฉ์์ ์ค์์ง์ค์ ์ ๊ทผ๋ณด๋ค ๋ ์ ์ฐํ์ง๋ง, ์ข ์ข ํธ๋ ์ด๋์คํ๊ฐ ๋ฐ๋ฆ ๋๋ค. ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด "tree shaking"์ ํ๋ณดํ๋๋ผ๋, ์ค์ ๋ก๋ ์ข ์ข ๋ชจ๋ ์ธ์ด์ ๋ํด ํ์ด์ง๋ฅผ ๋ก๋ํ๊ฒ ๋ฉ๋๋ค.
์์ฝํ๋ฉด, ๊ฒฐ์ ์ ๋์ฒด๋ก ๋ค์๊ณผ ๊ฐ์ด ๋๋ฉ๋๋ค:
- ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ด์ง ์๊ฐ ์ธ์ด ์๋ณด๋ค ๋ง์ ๊ฒฝ์ฐ์๋ ์ธ๋ถํ๋ ์ ๊ทผ ๋ฐฉ์์ ์ ํธํด์ผ ํฉ๋๋ค.
- ์ธ์ด ์๊ฐ ํ์ด์ง ์๋ณด๋ค ๋ง์ ๊ฒฝ์ฐ์๋ ์ค์์ง์ค์ ์ ๊ทผ์ ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ฌผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์๋ค์ ์ด๋ฌํ ํ๊ณ๋ฅผ ์ธ์งํ๊ณ ์ฐํ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ๊ทธ์ค์๋ ๋ค์์คํ์ด์ค๋ก ๋ถ๋ฆฌํ๊ธฐ, JSON ํ์ผ์ ๋์ ์ผ๋ก ๋ก๋ํ๊ธฐ (await import()), ๋๋ ๋น๋ ์ ์ฝํ
์ธ ๋ฅผ ์ ๋ฆฌ(purge)ํ๋ ๋ฐฉ๋ฒ ๋ฑ์ด ์์ต๋๋ค.
์๋ ๊ทธ๋ํ๋ 110๊ฐ์ ํ์ด์ง๋ฅผ 110๊ฐ ์ธ์ด๋ก ๋ฒ์ญํ ์ด๋ก ์์ ์ฑ(ํ์ด์ง๋น ์ฝ 30KB์ ํ
์คํธ)์ ์ฝํ
์ธ ์ฉ๋์ ์ถ์ ํ ๊ฒ์
๋๋ค. ๋ก์ผ์ผ๋ณ ๋์ ๋ก๋ฉ์ ์ธ์ด ์ถ์ ์์ ๊ณ , ์ปดํฌ๋ํธ๋ ๋ผ์ฐํธ ๋จ์๋ก ์ฝํ
์ธ ๋ฅผ ์ค์ฝํํ๋ฉด ํ์ด์ง ์ถ์ด ์์ด์ง๋ฉฐ, ๋ ๊ฐ์ง๋ฅผ ๊ฒฐํฉํ์ ๋๋ง ์ฉ๋์ด ์ผ์ ํ๊ฒ ์ ์ง๋ฉ๋๋ค.

๋์์, ์ฝํ
์ธ ๋ฅผ ๋์ ์ผ๋ก ๋ก๋ํ๋ฉด ์๋ฒ์ ๋ํ ์ถ๊ฐ ์์ฒญ์ด ๋ฐ์ํ๋ค๋ ์ ์ ์์๋์ด์ผ ํฉ๋๋ค. ์ถ๊ฐ์ ์ธ useState๋ hook ํ๋๋ง๋ค ์๋ฒ ์์ฒญ์ด ํ๋ ๋ ๋ฐ์ํฉ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, Intlayer๋ ์ฌ๋ฌ ์ฝํ ์ธ ์ ์๋ฅผ ๋์ผํ ํค ์๋์ ๊ทธ๋ฃนํํ ๊ฒ์ ์ ์ํฉ๋๋ค. Intlayer๋ ๊ทธ๋ฐ ๋ค์ ํด๋น ์ฝํ ์ธ ๋ฅผ ๋ณํฉํฉ๋๋ค.
ํ์ง๋ง ์ด๋ฌํ ๋ชจ๋ ํด๊ฒฐ์ฑ ์ ์ข ํฉํด๋ณด๋ฉด, ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ ๊ทผ ๋ฐฉ์์ ์ค์์ง์ค์ ๋ฐฉ์์ด๋ผ๋ ์ ์ด ๋ถ๋ช ํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ค์์ง์ค์ ์ ๊ทผ ๋ฐฉ์์ด ์ ์ด๋ ๊ฒ ์ธ๊ธฐ ์์๊น์?
- ๋จผ์ , i18next๋ ๋๋ฆฌ ์ฌ์ฉ๋ ์ต์ด์ ์๋ฃจ์ ์ค ํ๋๋ก, PHP์ Java ์ํคํ ์ฒ(MVC)์์ ์๊ฐ์ ๋ฐ์ ์ฒ ํ(๊ด์ฌ์ฌ์ ์๊ฒฉํ ๋ถ๋ฆฌ, ์ฝํ ์ธ ๋ฅผ ์ฝ๋์ ๋ถ๋ฆฌํด์ ์ ์ง)์ ๋ฐ๋์ต๋๋ค. 2011๋ ์ ๋ฑ์ฅํ์ฌ React์ ๊ฐ์ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ๋ก์ ๋๋์ ์ธ ์ ํ๋ณด๋ค๋ ๋จผ์ ๊ทธ ํ์ค์ ํ๋ฆฝํ์ต๋๋ค.
- ํ ๋ฒ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋๋ฆฌ ์ฑํ๋๋ฉด ์์ฝ์์คํ ์ ๋ค๋ฅธ ํจํด์ผ๋ก ์ ํํ๊ธฐ๊ฐ ์ด๋ ค์์ง๋๋ค.
- ์ค์์ง์ค์ ์ ๊ทผ ๋ฐฉ์์ Crowdin, Phrase ๋๋ Localized์ ๊ฐ์ ๋ฒ์ญ ๊ด๋ฆฌ ์์คํ (Translation Management Systems)์์๋ ์์ ์ ๋ ์์ํ๊ฒ ๋ง๋ญ๋๋ค.
- ์ปดํฌ๋ํธ๋ณ ์ ๊ทผ ๋ฐฉ์์ ๋ก์ง์ ์ค์์ง์ค์ ๋ฐฉ์๋ณด๋ค ๋ ๋ณต์กํ๊ณ ๊ฐ๋ฐ์ ์ถ๊ฐ ์๊ฐ์ด ํ์ํฉ๋๋ค. ํนํ ์ฝํ ์ธ ๊ฐ ์ด๋์ ์์นํ๋์ง ์๋ณํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํ ๋ ๊ทธ๋ ์ต๋๋ค.
์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ด๋์์ ์๋์ง ์ดํดํ๋ ค๋ฉด JavaScript i18n์ ์ญ์ฌ๋ฅผ ์ฝ์ด๋ณด์ธ์.
์๊ฒ ์ง๋ง, ์ค์์ง์ค์ ์ ๊ทผ ๋ฐฉ์์ ๊ณ ์ํ๋ฉด ์ ๋๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?
๋ค์์ ๊ทํ์ ์ฑ์ ๋ฌธ์ ๊ฐ ๋ ์ ์๋ ์ด์ ์ ๋๋ค:
- ๋ฏธ์ฌ์ฉ ๋ฐ์ดํฐ: ํ์ด์ง๊ฐ ๋ก๋๋ ๋ ์ข ์ข ๋ค๋ฅธ ๋ชจ๋ ํ์ด์ง์ ์ฝํ ์ธ ๋ฅผ ํจ๊ป ๋ก๋ํฉ๋๋ค. (10ํ์ด์ง ์ฑ์ด๋ผ๋ฉด ๋ก๋๋ ์ฝํ ์ธ ์ 90%๊ฐ ์ฌ์ฉ๋์ง ์์). ๋ชจ๋ฌ์ ์ง์ฐ ๋ก๋(lazy load)ํ๋์? i18n ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์๊ดํ์ง ์๊ณ ์ด์จ๋ ๋ฌธ์์ด์ ๋จผ์ ๋ก๋ํฉ๋๋ค.
- ์ฑ๋ฅ: ๊ฐ ๋ฆฌ๋ ๋๋ง๋ง๋ค ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ๊ฑฐ๋ํ JSON ํ์ด๋ก๋๋ก ํ์ด๋๋ ์ด์ ๋์ด, ์ฑ์ด ์ปค์ง์๋ก ๋ฐ์์ฑ์ ์ํฅ์ ์ค๋๋ค.
- ์ ์ง๋ณด์: ํฐ JSON ํ์ผ์ ๊ด๋ฆฌํ๋ ๊ฒ์ ๊ณ ํต์ค๋ฝ์ต๋๋ค. ๋ฒ์ญ์ ์ถ๊ฐํ๋ ค๋ฉด ํ์ผ์ ์ด๊ณณ์ ๊ณณ ์ด๋ํด์ผ ํ๊ณ , ๋๋ฝ๋ ๋ฒ์ญ์ด ์๋์ง, orphan keys๊ฐ ๋จ์์์ง ์์์ง ํ์ธํด์ผ ํฉ๋๋ค.
- ๋์์ธ ์์คํ
:
์ด๋ ๋์์ธ ์์คํ
(์:
LoginForm์ปดํฌ๋ํธ)๊ณผ์ ๋นํธํ์ฑ์ ์ด๋ํ๋ฉฐ, ์๋ก ๋ค๋ฅธ ์ฑ๋ค ๊ฐ์ ์ปดํฌ๋ํธ ๋ณต์ ๋ฅผ ์ ํํฉ๋๋ค.
"ํ์ง๋ง ์ฐ๋ฆฌ๋ Namespaces๋ฅผ ๋ฐ๋ช ํ์์!"
๋ฌผ๋ก ์ด๊ณ , ์ด๋ ์์ฒญ๋ ์ง์ ์ ๋๋ค. ์ด์ Vite + React + React Router v7 + Intlayer ์ค์ ์์ ๋ฉ์ธ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ๋น๊ตํด ๋ณด๊ฒ ์ต๋๋ค. 20ํ์ด์ง์ง๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ฎฌ๋ ์ด์ ํ์ต๋๋ค.
์ฒซ ๋ฒ์งธ ์์๋ locale๋ณ๋ก lazy-loaded ๋ฒ์ญ์ ํฌํจํ์ง ์์์ผ๋ฉฐ ๋ค์์คํ์ด์ค ๋ถํ ๋ ์์ต๋๋ค. ๋ ๋ฒ์งธ๋ content purging + ๋ฒ์ญ์ ๋์ ๋ก๋ฉ์ ํฌํจํฉ๋๋ค.
ํ ์ด๋ธ์ ๋ชจ๋ฌ๋ก ์ด์ด ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ช ํํ๊ฒ ํ์ธ
| ์ต์ ํ๋ ๋ฒ๋ค | ์ต์ ํ๋์ง ์์ ๋ฒ๋ค |
|---|---|
![]() | ![]() |
๋ค์์คํ์ด์ค ๋๋ถ์, ์ฐ๋ฆฌ๋ ๋ค์ ๊ตฌ์กฐ์์:
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
๋ค์ ๊ตฌ์กฐ๋ก:
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
์ด์ ์ฑ์ ์ด๋ค ์ฝํ ์ธ ๋ฅผ ์ธ์ ์ด๋์ ๋ก๋ํ ์ง ์ธ๋ฐํ๊ฒ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก, ๋ณต์ก์ฑ ๋๋ฌธ์ ๋๋ค์์ ํ๋ก์ ํธ๋ ์ด ๋ถ๋ถ์ ๊ฑด๋๋ฐ๊ฒ ๋ฉ๋๋ค(์: ์ข์ ๊ดํ์ ๋ฐ๋ฅด๋ ๊ฒ๋ง์ผ๋ก ๋ฐ์ํ๋ ์ด๋ ค์์ ๋ณด๋ ค๋ฉด next-i18next ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ธ์). ๊ทธ ๊ฒฐ๊ณผ, ์ด๋ฌํ ํ๋ก์ ํธ๋ค์ ์์ ์ค๋ช ํ ๋๊ท๋ชจ JSON ๋ก๋ฉ ๋ฌธ์ ์ ์ง๋ฉดํ๊ฒ ๋ฉ๋๋ค.
์ฐธ๊ณ : ์ด ๋ฌธ์ ๋ i18next์๋ง ๊ตญํ๋ ๊ฒ์ด ์๋๋ผ ์์ ์ด๊ฑฐํ ๋ชจ๋ ์ค์์ง์ค์ ์ ๊ทผ ๋ฐฉ์์ ๊ณตํต์ ์ผ๋ก ๋ฐ์ํฉ๋๋ค.
ํ์ง๋ง ๋ชจ๋ ์ธ๋ถํ๋ ์ ๊ทผ ๋ฐฉ์์ด ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ ์๋๋ผ๋ ์ ์ ์๊ธฐ์ํค๊ณ ์ถ์ต๋๋ค. ์๋ฅผ ๋ค์ด, vue-i18n SFC๋ inlang์ ๊ฐ์ ์ ๊ทผ ๋ฐฉ์์ ๋ณธ์ง์ ์ผ๋ก ๋ก์ผ์ผ๋ณ ๋ฒ์ญ์ ์ง์ฐ ๋ก๋(lazy load)ํ์ง ์์ผ๋ฏ๋ก ๋ฒ๋ค ํฌ๊ธฐ ๋ฌธ์ ๋ฅผ ๋จ์ง ๋ค๋ฅธ ๋ฌธ์ ๋ก ๋ฐ๊พธ๋ ๊ฒ์ ๋ถ๊ณผํฉ๋๋ค.
๋ํ, ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ๊ฐ ์ ๋๋ก ์ด๋ฃจ์ด์ง์ง ์์ผ๋ฉด ๋ฒ์ญ๊ฐ์๊ฒ ๊ฒํ ์ฉ์ผ๋ก ๋ฒ์ญ์ ์ถ์ถํ๊ณ ์ ๊ณตํ๋ ์์ ์ด ํจ์ฌ ๋ ์ด๋ ค์์ง๋๋ค.
Intlayer์ ์ปดํฌ๋ํธ๋ณ ์ ๊ทผ ๋ฐฉ์์ด ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ
Intlayer๋ ๋ค์๊ณผ ๊ฐ์ ์ฌ๋ฌ ๋จ๊ณ๋ฅผ ๊ฑฐ์นฉ๋๋ค:
- ์ ์ธ(Declaration):
*.content.{ts|jsx|cjs|json|json5|...}ํ์ผ์ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฒ ์ด์ค ์ด๋์์๋ ์ฝํ ์ธ ๋ฅผ ์ ์ธํ์ธ์. ์ด๋ ๊ฒ ํ๋ฉด ์ฝํ ์ธ ๋ฅผ ์ฝ๋์ ๋์ผ ์์น์ ๋๋ฉด์ ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ๋ฅผ ๋ณด์ฅํ ์ ์์ต๋๋ค. ์ฝํ ์ธ ํ์ผ์ ๋ก์ผ์ผ๋ณ์ผ ์๋ ์๊ณ ๋ค๊ตญ์ด(multilingual)์ผ ์๋ ์์ต๋๋ค. - ์ฒ๋ฆฌ: Intlayer๋ ๋น๋ ๋จ๊ณ์์ JS ๋ก์ง์ ์ฒ๋ฆฌํ๊ณ , ๋๋ฝ๋ ๋ฒ์ญ ํด๋ฐฑ์ ์ฒ๋ฆฌํ๋ฉฐ, TypeScript ํ์ ์ ์์ฑํ๊ณ , ์ค๋ณต๋ ์ฝํ ์ธ ๋ฅผ ๊ด๋ฆฌํ๊ณ , CMS์์ ์ฝํ ์ธ ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฑ ๋ค์ํ ์์ ์ ์ํํฉ๋๋ค.
- ์ ๋ฆฌ(Purging): ์ฑ์ ๋น๋ํ ๋ Intlayer๋ ์ฌ์ฉ๋์ง ์๋ ์ฝํ ์ธ ๋ฅผ ์ ๋ฆฌํฉ๋๋ค(์ฝ๊ฐ Tailwind๊ฐ ํด๋์ค ๊ด๋ฆฌ๋ฅผ ํ๋ ๋ฐฉ์๊ณผ ์ ์ฌ). ๋ค์๊ณผ ๊ฐ์ด ์ฝํ ์ธ ๋ฅผ ๋์ฒดํฉ๋๋ค:
์ ์ธ:
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
์ฒ๋ฆฌ: Intlayer๋ .content ํ์ผ์ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ (dictionary)์ ๋น๋ํ๊ณ ๋ค์์ ์์ฑํฉ๋๋ค:
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
๋์ฒด: Intlayer๋ ์ ํ๋ฆฌ์ผ์ด์ ๋น๋ ์ค์ ์ปดํฌ๋ํธ๋ฅผ ๋ณํํฉ๋๋ค.
- ์ ์ ์ํฌํธ ๋ชจ๋:
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
- ๋์ ์ํฌํธ ๋ชจ๋:
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
useDictionaryAsync๋ ํ์ํ ๋๋ง ๋ก์ปฌ๋ผ์ด์ฆ๋ JSON์ ๋ก๋ํ๊ธฐ ์ํด Suspense ์ ์ฌ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํฉ๋๋ค.
์ด ์ปดํฌ๋ํธ๋ณ ์ ๊ทผ ๋ฐฉ์์ ์ฃผ์ ์ด์ :
์ปดํฌ๋ํธ ๊ฐ๊น์ด์ ์ฝํ ์ธ ์ ์ธ์ ์ ์งํ๋ฉด ์ ์ง๋ณด์๊ฐ ๋ ์ฌ์์ง๋๋ค(์: ์ปดํฌ๋ํธ๋ฅผ ๋ค๋ฅธ ์ฑ์ด๋ ๋์์ธ ์์คํ ์ผ๋ก ์ฎ๊ธฐ๋ ๊ฒฝ์ฐ). ์ปดํฌ๋ํธ ํด๋๋ฅผ ์ญ์ ํ๋ฉด ๊ด๋ จ ์ฝํ ์ธ ๋ ํจ๊ป ์ ๊ฑฐ๋๋ฏ๋ก, ์ด๋ฏธ
.test,.stories์ ๋ํด ํ์๋ ๊ฒ๊ณผ ๋์ผํ ๋ฐฉ์์ ์ ์ฉํ ์ ์์ต๋๋ค)์ปดํฌ๋ํธ๋ณ ์ ๊ทผ ๋ฐฉ์์ AI ์์ด์ ํธ๊ฐ ์ฌ๋ฌ ํ์ผ์ ์ด๋ฆฌ์ ๋ฆฌ ์ฐพ์๋ค๋์ง ์์๋ ๋๊ฒ ํฉ๋๋ค. ๋ชจ๋ ๋ฒ์ญ์ ํ ๊ณณ์์ ์ฒ๋ฆฌํ๋ฏ๋ก ์์ ์ ๋ณต์ก์ฑ๊ณผ ์ฌ์ฉ๋๋ ํ ํฐ ์๋ฅผ ์ค์ฌ์ค๋๋ค.
์ ํ ์ฌํญ
๋ฌผ๋ก , ์ด ์ ๊ทผ ๋ฐฉ์์๋ ํธ๋ ์ด๋์คํ๊ฐ ์์ต๋๋ค:
- ๋ค๋ฅธ l10n ์์คํ ์ด๋ ์ถ๊ฐ ํด๋ง๊ณผ ์ฐ๋ํ๊ธฐ๊ฐ ๋ ์ด๋ ต์ต๋๋ค.
- ๋ฝ์ธ(lock-in)์ด ๋ฐ์ํ ์ ์์ต๋๋ค(ํน์ ๋ฌธ๋ฒ ๋๋ฌธ์ ์ฌ์ค์ ๋๋ถ๋ถ์ i18n ์๋ฃจ์ ์์ ์ด๋ฏธ ๊ทธ๋ฌํฉ๋๋ค).
๋ฐ๋ก ์ด๋ฐ ์ด์ ๋ก Intlayer๋ i18n์ ์ํ ์์ ํ ํด์ (100% ๋ฌด๋ฃ ๋ฐ OSS)์ ์ ๊ณตํ๋ ค๊ณ ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ์์ฒด AI Provider์ API keys๋ฅผ ์ฌ์ฉํ๋ AI ๋ฒ์ญ ๊ธฐ๋ฅ๋ ํฌํจ๋ฉ๋๋ค. Intlayer๋ ๋ํ JSON์ ๋๊ธฐํํ๋ ํด๋ง์ ์ ๊ณตํ๋๋ฐ, ์ด๋ ICU / vue-i18n / i18next ๋ฉ์์ง ํฌ๋งคํฐ์ฒ๋ผ ๋์ํ์ฌ ์ฝํ ์ธ ๋ฅผ ํด๋น ํฌ๋งท์ ๋ง๊ฒ ๋งคํํฉ๋๋ค.
๋๊ธ
์์ง ๋๊ธ์ด ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ๋ก ์๊ฒฌ์ ๋๋ ๋ณด์ธ์.


