๋ค์์ i18n์ ๋ํด ๊ณํ๋ ๊ธฐ๋ฅ/์์ ๋ชฉ๋ก์ ๋๋ค.
์๋ก์ด i18n ๊ธฐ๋ฅ์ Angular์ ์ถ๊ฐํ๊ณ ์ถ๋ค๋ฉด ์ฃผ์ ํ์ง ๋ง๊ณ ์๋์ ๋ฌธ์ํ์ธ์. ๊ฐ๋ฅํ์ง ๊ทธ๋ฆฌ๊ณ ๋ฌธ์ ๋ฅผ ์ ๊ธฐํด์ผ ํ๋์ง ์๋ ค ๋๋ฆฌ๊ฒ ์ต๋๋ค.
๋ฒ๊ทธ๊ฐ ์๋ ๊ฒฝ์ฐ ๋ฌธ์ ๋ฅผ ์ฝ๋๋ค(์ฌ๊ธฐ์์ ์ด์ ๋ํด ๋
ผ์ํ ํ์ ์์).
_์ฐธ๊ณ : ๋ฐํ์ ๋ฒ์ญ ๋ฐ ๋๋ถ๋ถ์ ์๋ก์ด ๊ธฐ๋ฅ์ ivy_์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
[ ] xmb/xlf์ ๋ํด ๋์ผํ ID ์์ฑ - #15136 [ ๋ธ๋ ์ดํน ์ฒด์ธ์ง PR #15621]
[ ] i18n ID ์์ฑ ์ ph/ICU ํํ์ ๋ฌด์ - #15573 [ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ PR #15621, ์ฐจ๋จ๋จ ]
[ ] ๋ ๊ฐ์ ๋ค๋ฅธ ๋ด์ฉ์ด @@ id ๊ฐ ๊ฐ์ผ๋ฉด i18n ์ถ์ถ ์ค throw - #18272
[ ] ์ ํ ๋ฐ ํํ ๊ณต๋ฐฑ ๋ฌด์ - #13114
ot ๋ชจ๋์์ ๋์ ๋ฐ์ธ๋ฉ์ ์ํํ๋ ๊ธฐ๋ฅ์ ๋ณด๊ณ ์ถ์ต๋๋ค. ํนํ ์ด๊ฒ์ด ๋ก๋๋งต์ ์ถ๊ฐ๋์ด์ผ ํ๋ ์ด์ ๋ฅผ ๋ท๋ฐ์นจํ๋ ๋ ๊ฐ์ง ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์ต๋๋ค.
์ฒซ ๋ฒ์งธ๋ ๋ชจ๋ ์ธ์ด์ ๋ํด ๋ณ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ์ง ์๋ ๊ธฐ๋ณธ ์ฌ์ฉ ์ฌ๋ก์ ๋๋ค. ์ด๋ฅผ ์ํด์๋ ์ฑ ์ธ๋ถ์์ ์ผ์ข ์ ๋ฆฌ๋๋ ์ ๋ก์ง์ด ํ์ํ๋ฉฐ ์ฌ์ดํธ๋ฅผ ์์ ํ ๋ค์ ๋ก๋ํ์ง ์๊ณ ๋ ์ธ์ด๋ฅผ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
๋ ๋ฒ์งธ๋ ์ฝ๋ฅด๋๋ฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ฐ์ผ์ ์ฑ์ ์๋ฒ ๋ฉํ๋ ๊ฒฝ์ฐ์ ๋๋ค. ๋ด๊ฐ ์๋ ํ ๋น์ ์ ์ ํ์ ์งํธ(jit)๋ก ์ฌ์ดํธ ์๋๋ฅผ ๋ฆ์ถ๊ฑฐ๋, ๋ชจ๋ ์ธ์ด์ ๋ํด ๋ณ๋์ ์ฑ์ ๋ง๋ค๊ฑฐ๋, ์ฑ์ ๋ชจ๋ ์ธ์ด๋ฅผ ํฌํจํ๋ ๊ฒ์ ๋๋ค. ์ด๋ค ์ค ์ด๋ ๊ฒ๋ ์ข์ ์ต์ ์ด ์๋๋๋ค. Ionic์ i18n์ ์ฌ์ฉํ์ง ์๋ ๊ฒ ๊ฐ์๋ฐ, ๊ทธ ์ด์ ๊ฐ ๋ฌด์์ธ์ง ๊ถ๊ธํฉ๋๋ค.
@jlutz777 ์ด๋ 2๊ฐ์ง ์ ํจํ ์ฌ์ฉ ์ฌ๋ก์
๋๋ค. ์ด ์ฃผ์ ๋ ์ต๊ทผ ๋ด๋ถ์ ์ผ๋ก ๋
ผ์๋์์ผ๋ฉฐ ์ ๋ ์ด์ ๋ํด ์นํธํด ์์ต๋๋ค. i18n๊ณผ AoT๊ฐ Angular์์ ์๋ํ๋ ๋ฐฉ์์ ๊ณ ๋ คํ ๋ ์์ง๊น์ง๋ ์ฝ๊ฒ ๊ฐ๋ฅํ์ง ์์ง๋ง v5์์ AoT์ ๋ํ ์๋ก์ด ์ปดํ์ผ ํ๋ก์ธ์ค๋ฅผ ์ป์ผ๋ฉด ๋ฏธ๋์ ๊ฐ๋ฅํ ์๋ ์์ต๋๋ค.
๊ณต์์ ์ด๊ณ ๊ตฌ์ฒด์ ์ธ ๋ด์ฉ์ด ์์ผ๋ฉด ๋ก๋๋งต์ ํ ๋ฒ ์ถ๊ฐํ๊ฒ ์ต๋๋ค.
์ ๋ Electron + Angular 2 ์ฑ์์ ์์ ์ค์ด๋ฉฐ ์ด์ Angular์ ํจ๊ป i18n ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ์ธ์ด์ ๋ํ ํ์งํ ์ง์์ ์ถ๊ฐํ๋ ค๊ณ ํฉ๋๋ค. ์ค์ ๋ก ํ ํ๋ฆฟ ๋ฌธ์์ด์ ์ถ์ถํ๊ณ ๋ค๋ฅธ ์ธ์ด ํ์ผ ํ์์ผ๋ก ๋ณํํ๋ ๊ฒ์ ๋ช ํํ๊ฒ ๋ฌธ์ํ๋์ด ์์ง๋ง ์ฌ์ ํ ๋ช ํํ์ง ์๊ณ ๋ค์์ ์ฐพ๊ณ ์์ต๋๋ค.
ํฌ์ธํธ 2์ 3์ "ํ
ํ๋ฆฟ ์ธ๋ถ์ ๋ฒ์ญ ๋ฌธ์์ด ์ฌ์ฉ - #11405" ๊ธฐ๋ฅ์ผ๋ก ํด๊ฒฐ๋ฉ๋๋ค.
์์ 1์ ๋ํด์๋ ์์ @jlutz777 ์ ๋ํ ๋ต๋ณ์ ์ฐธ์กฐํ์ญ์์ค. ํ์ฌ๋ก์๋ ์ฌ์ ํ ์ฌ๋ฌ ์ธ์ด๋ก ์ฑ์ ๋น๋ํ๊ฑฐ๋ ๋ถํธ์คํธ๋ฉ์์ ๋ฒ์ญ์ ๋์ ์ผ๋ก ๋ก๋ํ ์ ์๋ JIT๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค(๋ฐํ์์ ์ ํ๋์ง๋ ์์ง๋ง x๋ฒ ๋ฒ๋ค๋ก ๋ฌถ๋ ๊ฒ๋ณด๋ค ์ฌ์ ํ ๋ซ์ต๋๋ค).
์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋๋ UI ์ธ์ด๋ ๋์ผํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฌ ๋ฒ์ ์ ๋น๋ํ ํ์๊ฐ ์๋ ๊ฒ์ด์ด์ผ ํฉ๋๋ค. ์ด๊ฒ์ ์ด๋ค ์์ผ๋ก๋ "์ปดํ์ผ๋ฌ" ๋ฌธ์ ๊ฐ ๋์ด์๋ ์ ๋ฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ปดํ์ผ๋ฌ์ ๊ฒฐํจ์ด ์๋ ๊ฒ์ ๋๋ค. ๋ฌธ์ ๋ ๋ฐํ์์ ๋ฐ์ดํฐ ํ์ผ์์ ํ ์คํธ๋ฅผ ๋ก๋ํ ์ ์๋๋ก ์์ฉ ํ๋ก๊ทธ๋จ์ ์ค๊ณํ๋ ๊ฒ์ด์ด์ผ ํฉ๋๋ค. ์ด๋ ๋ค๋ฅธ ๋ชจ๋์ฒ๋ผ ๋ก๋ํ๊ณ ์ฌ์ฉํ ์ ์๋ ๋ชจ๋/๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ํํด์ผ ํฉ๋๋ค. ์ปดํ์ผ๋ฌ ๊ธฐ๋ฅ์ ์ ํ ๋ง๋ค์ง ๋ง์ญ์์ค.
@figuerres ๊ทธ๊ฒ์ ๋ฏธ๋์ ๋ณ๊ฒฝ๋ ๊ฒ์ ๋๋ค. ์์ง ์ฝ์์ ์์ง๋ง ์ฐ๋ฆฌ๋ ์ด ๋ฌธ์ ๋ฅผ ์๊ณ ์๊ณ ๊ฐ๋ฅํ ํด๊ฒฐ์ฑ ์ ์ฐพ๊ณ ์์ต๋๋ค. ์ธ๋ถ ํ์ผ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ทธ ์ค ํ๋์ ๋๋ค.
์๋ ํ์ธ์ @ocombe - ์ฐ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์ ์ Angular์์ i18n์ ์ฌ์ฉํ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฌธ์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๊ฑฐ๋ ํฅํ ๋ช ๊ฐ์ ๋์ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ ๊ฒ์ผ๋ก ์๊ฐ๋๋ ๊ธฐ๋ฅ์ด ์์ต๋๊น? ์ด๋ค ์ ๋ณด๋ผ๋ ๋๋จํ ๊ฐ์ฌํ๊ฒ ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ DVD์ ๋ค์ ํ ๋ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
์๋
ํ์ธ์ @rjsteinert! ์๊ฒ ๋์ ๋คํ์ด์ผ!
ํ์ฌ ๊ณํ๋ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ID ์๋ ์์ฑ๋ฟ์
๋๋ค. ๋ฐฉ๋ฒ์ด ๋ณ๊ฒฝ๋๊ณ ID๊ฐ ๋ ์ด์ ์ผ์นํ์ง ์์ง๋ง ๋ฒ์ญ ํ์ผ์ ์
๋ฐ์ดํธํ๋ cli ๋ง์ด๊ทธ๋ ์ด์
๋๊ตฌ(๋ฐ ์ค๋น๊ฐ ๋์์ ๋๋ง ๋ง์ด๊ทธ๋ ์ด์
ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๋งค๊ฐ๋ณ์)๊ฐ ์์ต๋๋ค.
์ค๋ ์ด ์ฃผ์ ์ ๋ํด ๋ง์ด ๊ฒ์ํ๋๋ฐ i18n-tag๋ฅผ ๋ฒ์ญ ๋์ ์๋น์ค ํธ์ถ๋ก ๋ฐ๊พธ๋ ๊ฒ๊ณผ ๊ฐ์ "๊ฐ๋จํ" ์๋ฃจ์ ์ด ์๋์ง ๊ถ๊ธํฉ๋๋ค.
ํ์ฌ์:
<span i18n>Hello world</span>
=> <span>Hello world</span>
๋ก ๋ ๋๋ง๋จ
๋ด ์๊ฐ:
<span i18n>Hello world</span>
=> <span>{{i18nservice.translate('pass-in-the-generated-message-id')}}</span>
๋ก ๋ ๋๋ง๋จ
์ด๋ฐ ์์ผ๋ก API, ํ์ผ ๋ฑ์์ ์๋น์ค๋ฅผ ์ฑ์ธ ์ ์๊ณ ์ ์์ค๋ฅผ ๋ก๋ํ ๋ ๋ก์ผ์ผ์ ์ ํํ๋ ๊ฒฝ์ฐ์๋ i18nservice.setLocale('de-DE')
์ด์์ด ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ค์ ๋ฒ์ญ์ AOT์์ ๋์ ์ผ๋ก ์ํ๋ ์ ์์ต๋๋ค.
xi18n-tool์ ์ฌ์ฉํ ํ
์คํธ ์ถ์ถ์ ์ฌ์ ํ โโ์ด์ ๊ณผ ๊ฐ์ด ์๋ํ๋ฉฐ ์์ฑ๋ ๋ฉ์์ง ID๋ฅผ ํ์ฉํ์ฌ ๋ฒ์ญ ์๋น์ค์ ์ธ๋ฑ์ค๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํ์ฌ ๊ตฌํ์ ngc๊ฐ "--use-i18nservice" ํ๋๊ทธ๋ฅผ ์ฐพ๊ณ ๊ทธ๋ ์ง ์์ผ๋ฉด ์ง๊ธ๊น์ง ์ปดํ์ผํ ์ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ ์๋ฒฝํ๊ฒ ์๋ํฉ๋๋ค.
๋ด๊ฐ ํ์ฌ ์๋ณํ ์ ์๋ ํ ๊ฐ์ง ๋ฌธ์ ๋ i18nservice๋ฅผ ๊ฐ๊ฐ์ ๋ชจ๋ ๊ตฌ์ฑ ์์์ ์ฃผ์ ํ๋ ๊ฒ์ธ๋ฐ, ์ด๋ ํธ์ถ ๊ฐ๋ฅํ๊ธฐ ์ํด ๊ตฌ์ฑ ์์ ์ปจํ ์คํธ์ ์กด์ฌํด์ผ ํ์ง๋ง ์ด๋ค ๋ฐฉ์์ผ๋ก๋ ํด๊ฒฐํ ์ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด์ ๋ํ ์๊ฐ์ด ์์ต๋๊น?
๊ทธ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ๊ณ ๋ คํ๊ณ ์๋ ๊ฒ ์ค ํ๋์ ๋๋ค. ์ปดํ์ผ๋ฌ๋ฅผ ๋ฐํ์(AOT)์ ์ฌ์ฉํ ์ ์์ ๋ ํด๋น ๋ฒ์ญ ๋ด๋ถ์ ์ฝ๋ ๋ธ๋ก์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ฌธ์ ๊ฐ ์ฌ์ ํ ์์ต๋๋ค. ๊ทธ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ๋ฒ์ญ ๋ด๋ถ์์ ๊ฐ๋ ๊ตฌ์ฑ ์์/์ง์๋ฌธ/ํ์ดํ๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค...
์, ๊ทธ ์๊ฐ์ ํ์ง ์์์ต๋๋ค.
์ ๋ ํ์ฌ ๋น๋ ๋จ๊ณ(webpack)์์ HTML๋ก์ ๋ชจ๋ ๋ฒ์ญ์ ์ธ๋ผ์ธํ๊ณ ng-switch๋ฅผ ์ฌ์ฉํ์ฌ ng-์ปจํ
์ด๋๋ก ๋ํํ๋ POC/ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ฐ๋ฐ ์ค์
๋๋ค.
i18n ์์ฑ์ ๊ฒฝ์ฐ nativeElement์์ ์ค์ ํ๋ ์ง์๋ฌธ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
๋ฒ์ญ ์์ฒด๋ "๋ ๋๋ง"๋์ด ๋ชจ๋ <x id=".. "/>
์๋ฆฌ ํ์์๋ฅผ ๋์ฒดํฉ๋๋ค.
์ถ์
ํ์ง๋ง ์๋ํฉ๋๋ค ... ng๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆด ์ ์์ต๋๋ค.
์ด๋ฒ ์ฃผ ํ๋ฐ์ POC๋ฅผ ๊ฒ์ํ ์์ ์ด๋ฉฐ, ํฅํ ๊ตฌ์์ ๋์์ด ๋ ์ ์์ต๋๋ค.
๊ตฌํ์ด ์์ ๋๊น์ง ๋ด ์๊ตฌ์ ๋ง๋ "์๋ฃจ์
"์ ์๊ฐํด ๋์ต๋๋ค.
ํ๋ฆฌ๋ก๋๋ ์ด์ ์ปดํ์ผ๋ฌ์ ๋๊ธฐ๊ธฐ ์ ์ ๋ชจ๋ ๋ก์ผ์ผ์ ๋ํด HTML์ ๋ ๋๋งํ๋ฉฐ ์ง๊ธ๊น์ง๋ ๋งค๋ ฅ์ฒ๋ผ ์๋ํฉ๋๋ค.
๋ ํฌ: https://github.com/actra-development-oss/ng-i18n-aot-loader
NPM: https://www.npmjs.com/package/@actra-development-oss/ng -i18n-aot-loader
๊ตฌ์ฑ ์์์๋ ์๋น์ค๊ฐ ํ์ํจ์ ์์คํ
/์ปดํ์ผ๋ฌ์ ์๋ฆฌ๋ ์์ฑ์ด ์์ ์ ์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ํด๋น ์๋น์ค๋ id์ ๋ก์ผ์ผ์ ๊ฐ์ ธ์ ํ์งํ๋ ํ
์คํธ/๋งํฌ์
์ ๋ฐํํฉ๋๋ค.
๋ชจ๋ ์ง์ญํ๋ ํ
์คํธ๋ ์๋น์ค๊ฐ ์ฝ์ ์ ์๋ ๋ฆฌ์์ค๋ก ์๋ฒ์ ์ ์ฅ๋ฉ๋๋ค.
๊ตฌ์ฑ ์์์ ์์ฑ์ด ์๋ ๊ฒฝ์ฐ ๋ก์บ ๋ฐํ์์ด ์์ต๋๋ค.
๊ตฌ์ฑ ์์์ ์๋ ๊ฒฝ์ฐ ๋ฐํ์์ ํ์งํ๋ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ํธ์ถํฉ๋๋ค.
์ปดํ์ผ๋ฌ๋ ๋ฐ์ดํฐ ํ์ผ์ ๋น๋ํ๊ณ ์๋น์ค๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค.
์ด๊ฒ์ ๋๋ถ๋ถ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ํ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์๊ตฌ ์ฌํญ์ ์ฒ๋ฆฌํ๊ณ ์ฌ์ดํธ์์ ๋์ผํ ์ฑ์ ์ฌ๋ฌ ๋ณต์ฌ๋ณธ์ ๋น๋ํ๊ณ ์ ์ง ๊ด๋ฆฌํ ํ์๊ฐ ์๋ ์ข์ ๋ฐฉ๋ฒ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
๋๋ ๊ทธ๋ฐ ์๊ฐ์ ํ๋ค.
๋ฌธ์ ๋ ๋ฒ์ญ์ด ๋ฐ์ธ๋ฉ์ ํฌํจํ ์ ์์ผ๋ฏ๋ก ์ธ๋ถ ๋ฆฌ์์ค์์ ๋ฒ์ญ ํ์ผ์ ๋ก๋ํ ๋ ์ฝ๋ ์ฃผ์
์ ์ํด ์์คํ
์ ์ด ์ ์๋ค๋ ๊ฒ์
๋๋ค.
๋ํ ๋ฒ์ญ์ ๋ฐ๋ผ ์ด๋ฌํ ๋ฐ์ธ๋ฉ์ ๋์ ์ผ๋ก ํด๊ฒฐํ๋ ค๋ฉด ์ปดํ์ผ๋ฌ๊ฐ ํ์ํฉ๋๋ค.
IMHO ์ ํจํ ์๋ฃจ์
์ ์ปดํ์ผ ํ์์ ์ธ๋ผ์ธ ๋ฒ์ญ์ POC(์ ์ฃผ์ ์ฐธ์กฐ)๋ก ๊ตฌํํ ๋ฐฉ์์ผ ์ ์์ต๋๋ค.
์์์ ์ธ๊ธํ ๋ ๊ฐ์ง ๋ฌธ์ ๋ ๋ชจ๋ ์ ๊ฑฐ๋ ๊ฒ์
๋๋ค. ๋ด๊ฐ ์์ํ ์ ์๋ ์ ์ผํ ๋จ์ ์ ์๋ง๋ ๋ฒ๋ค ํฌ๊ธฐ์ด๋ฉฐ "์ผ๋ฐ ๋ฒ๋ค" + (๋ฒ์ญ๋ html-size * ๋ก์ผ์ผ)๋ก ์ปค์ง ๊ฒ์
๋๋ค.
์ ์ฒด ๋ฌธ์ ๋์ i18n
-tagged html์ ์ฌ์ฉํ์ฌ ng-switch
๋ง ๋ฎ์ถ ์ ์์ง๋ง ์ฌ์ ํ i18n-*
-tags์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๊ธ์, ์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ์๋ค; ๋๋๋ก ๋น์ ์ ํ๊ณ๊ฐ ์์ต๋๋ค ....
์ค์ฉ์ ์ธ ๊ด์ ์์ ๋ณด๋ฉด ๊ทธ๋ฐ ๊ฒ์ด ์๋ ๊ฒ์ด ๋ ๋์ ์ ์์ต๋๋ค. ์ฌ๋ฌ ์ธ์ด๋ก ์ ๊ณต๋ ์ ์๋ ํ ์คํธ ๋ฉ์ด๋ฆฌ๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. ์ด์ผ๊ธฐ์ ๋.
๋ฐ์ดํฐ ๋ฐ์ด๋ ์ฒญํฌ๊ฐ ํ์ํฉ๋๊น? ์ข์, ํ์ง๋ง ๊ทธ๊ฒ์ ๊ตญ์ ํ๋ ํ
์คํธ ์์ ์์ง ์์ผ๋ฏ๋ก ๋ถ๋ฆฌ๋์ด์ผ ํฉ๋๋ค. ์ฌ์ ํ html๊ณผ css๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฐ๊ณผ์ โโ์คํ์ผ์ ์ง์ ํ๊ณ ํ์์ ์ง์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์๊ฐํ ์ ์๋ ๋ชจ๋ ๋ฐฉ์์ผ๋ก ์ด๋ค์ ํฌํจํ๊ฑฐ๋ ๊ฒฐํฉํ ์๋ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด div ๋๋ ap ํ๊ทธ๋ ์ฌ๋ฌ ๋ฒ์๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. ํ ๋ฒ์๋ ํ
์คํธ์ด๊ณ ๋ค๋ฅธ ๋ฒ์๋ ํ
์คํธ ๋ฒ์๊ฐ i18n ๋ก์ผ์ผ ์๋น์ค์ ๋ฐ์ธ๋ฉ๋ ๋ฐ์ธ๋ฉ ๋ ์ง์ด๊ณ , ๋ ์ง๋ ๋ ๋ฒ์๊ฐ ์๋ ์ผ๋ถ ๋ ์ง ์๋น์ค์ ๋ฐ์ธ๋ฉ๋ฉ๋๋ค. ์์์ ์ง์ ํ๋ ๋จ๋ฝ ํ๊ทธ์
๋๋ค.
๊ฐ๋จํ๊ฒ ์ ์งํ๊ณ ๋ชจ๋ ์ฌ์ฉ์์ 95%๊ฐ ๋จผ์ ์๋ํ๋๋ก ํ ๋ค์ ๊ทน๋จ์ ์ธ ๊ฒฝ์ฐ๋ฅผ ํ์ ํ์ญ์์ค.
๋๋ ๊ทธ๊ฒ์ ๊ทน๋จ์ ์ธ ๊ฒฝ์ฐ๋ก ๋ณด์ง ์๊ณ ํ์์ ๊ฐ์ด ๋น์ฆ๋์ค์
๋๋ค.
Angular๋ ๋น์ฆ๋์ค๊ธ ํ๋ ์์ํฌ์ด๋ฏ๋ก i18n ์ฌ์ฉ์์ ์ ๋ถ๋ ์๋์ง๋ผ๋ ํ
์คํธ ๋ด๋ถ์ ๋ฐ์ธ๋ฉ ๋๋ ์ ์ด๋ ๋ณต์ํ ๋ฐ ์ ํ์ด ํ์ํฉ๋๋ค.
<span i18n>Hello, {user.gender, select, m {Mr.}, f {Ms.}} {{user.name}}</span>
๋ถ๋ฆฌ๋ ๋ฌธ์์ด๋ก ์ด๋ป๊ฒ ํด๊ฒฐํ์๊ฒ ์ต๋๊น?
๊ฐ๋จํ ๋๋ต: ๋์ ์ธ์ด์ ๊ท์น์ ์ ์ ์์ผ๋ฏ๋ก ๋ชจ๋ ์ธ์ด๊ฐ '์ธ์ฌ๋ง', '์ฑ๋ณ', '์ด๋ฆ' ํ์์ ๋ฐ๋ฅด๋ ๊ฒ์ ์๋๋๋ค.
์ด๋ฌํ ์ฒญํฌ๋ฅผ ๋ถ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ฝ์ด i18n์ ์์๋๋ก ๊ฐ๋๋ก ์๋ํ๋ฉฐ ๋น์ฆ๋์ค๊ธ ์ฑ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ถ๋ช ํ ๋๋ฝ๋ ๊ฒ์ AOT ํธํ์ฑ๋ฟ์ด๋ฏ๋ก ๊ฐ๋ ฅํ๊ณ ์๋ํ๋ ์์คํ ์ ์ ๋ฐ๋ ๋์ง ์๋ ๊ฒ์ผ๋ก ๊ต์ฒดํด์ผ ํ๋ ์ด์ ๋ฅผ ์ดํดํ ์ ์์ต๋๋ค. ์์ ์ ์๋ฃํ๋ ค๋ฉด ์ฌ๋ฌ ๋ฒ ์์ ํด์ผ ํฉ๋๋ค.
์ด ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ ์ฐพ๊ธฐ ์ํด ๋ด์ผ ํ์๊ฐ ์์ต๋๋ค.
@ocom ์ด ์์์ ๋ฃ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค. ์ด๊ฒ์ด Angular์ ํฅํ ๋ฆด๋ฆฌ์ค๋ฅผ ์ํ ์ข์ ์๋ฃ๋ก ์ด์ด์ง๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์ฌ๊ธฐ ์ง์ฅ์์ ์ฐ๋ฆฌ๋ ๋๋ถ๋ถ์ ๊ฐ๋ฐ ์๊ตฌ ์ฌํญ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์ ๋ง ์ข์ํฉ๋๋ค!
@ocombe , ์ ์ฒด ๋ฌธ์๋ฅผ ๋ค์ ๋ก๋ํ์ง ์๊ณ ์ธ์ด๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๊น? ๋ด๊ฐ ์ค๋ช
ํ๋ค :
์ด๋ฆ์ด "about"์ธ ํ์ด์ง์ ์์ง๋ง ์ธ์ด๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ณธ ํญ๋ชฉ ํ์ด์ง๋ก ๋ฆฌ๋๋ ์
๋ฉ๋๋ค.
i18n-app์์ ์์
ํ๋ ๋์ @angular/material(node_modules์ ์์)์ ์ธ๋ถ ์คํ์ผ์ํธ๋ฅผ ํด๊ฒฐํ ์ ์์ด ng-xi18n
-tool์ด ์คํจํ๋ค๋ ์๋ ค์ง "๋ฒ๊ทธ"๋ ๋ฐ๊ฒฌํ์ต๋๋ค.
๋๋ POC๋ก๋ ์ถ์ถ ๋๊ตฌ์ ๋ํด "๋๋ฝ๋ ํ์ผ ๋ฌด์"-HostContext๋ฅผ ๊ตฌํํ์ง๋ง ์ฃผ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ฐ๊ฒฐ๋๋๋ก PR #17845๋ก ์ถ๊ฐํ์ต๋๋ค.
@ocombe ์ด ์ฃผ์ ์ ๋ํด ๋งค์ฐ ํ๋ฐํ ๊ฒ ๊ฐ์ผ๋ PR์ ๋ณด๊ณ ํผ๋๋ฐฑ์ ์ฃผ์๊ฒ ์ต๋๊น?
๊ฐ์ฌํฉ๋๋ค. ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ์ฌ ์ ์ฒด ํ๋ก์ ํธ์ ๋ํด ๋ด๋ถํ๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ฉฐ์น ๋์ ์ฐพ์์ง๋ง ๊ตฌ์ฒด์ ์ธ ๊ฒ์ ์ฐพ์ง ๋ชปํ์ต๋๋ค. ๋น๋ถ๊ฐ์ ์ ์๊ฒ ๋์์ด ๋๋ ๋ค๋ฅธ ๊ฒ์ ์ ์ํด ์ฃผ์๊ฒ ์ต๋๊น? ๊ฐ์ฌํฉ๋๋ค.
์๋ ํ์ธ์ @ocombe์ ๋๋ค! @jlutz777 ์ด ์ ๊ธฐํ ์์ ์ ๋ํด ํ์ ์กฐ์น๋ฅผ ์ทจํ ์ ์์ต๋๊น(๋์ ๋ฐ์ธ๋ฉ์ ๋ํด, ๋ฐ๋ผ์ ์ธ์ด๋น ํ๋์ ์ฑ์ด ์์)?
์์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
@vicb ๋ ์ง๊ธ ์์ ์ค์ด๋ฉฐ 5.x์ ์์ ๊ฒ์ ๋๋ค(5.0์ด ์๋๋ผ 5.1์ผ ๊ฐ๋ฅ์ฑ์ด ๋์)
@ocombe ์ฒดํฌ๋ฆฌ์คํธ๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํฉ๋๊น? ๋๋ ๊ทธ๋ค ์ค ์ผ๋ถ๊ฐ ์ด๋ฏธ ์ต์ ๋ฒ์ ์์ ๋ณํฉ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ๋น์ ์ ๋ ธ๋ ฅ์ ๋ ์ ๋ฐ์ํ ๊ฒ์ ๋๋ค. ๐
์, ์ข์ ์๊ฐ์
๋๋ค. ์
๋ฐ์ดํธํ๊ฒ ์ต๋๋ค.
ํธ์ง: ์
๋ฐ์ดํธ๋จ
๋ฐํ์ i18n(AOT๊ฐ ์๋ ๋ชจ๋ ๋ก์ผ์ผ์ ๋ํ ํ๋์ ๋ฒ๋ค) - [์์ ์ค]
๊ด๋ จ ๋ฌธ์ /ํ๋ณด/ํ ๋ก ์ ์ด๋์ ์์ต๋๊น?
๋ช
๋ช
๋ ๋ ์ง ํ์(์: ultraLongDate
)์ ํ์ฅํ๊ธฐ ์ํ API๊ฐ ์์ผ๋ฉด ์ข์ ๊ฒ์ด๋ฏ๋ก ๊ธฐ๋ณธ ๋ ์ง ํ์ดํ๊ฐ ์ด๋ฅผ ์ธ์ํ๊ณ ์ฌ์ฉ์ ์ง์ ๋ ์ง ํ์ดํ๊ฐ ํ์ํ์ง ์์ต๋๋ค.
"Runtime i18n(AOT๊ฐ ์๋ ๋ชจ๋ ๋ก์ผ์ผ์ ์ํ ํ๋์ ๋ฒ๋ค)"์ ์งํ ์ํฉ์ด ๊ถ๊ธํฉ๋๋ค.
์ฐ๋ฆฌ ํ์๋ 60๊ฐ ์ด์์ ์ธ์ด๊ฐ ํฌํจ๋ ์ฌ๋ฌ ๊ฐ์ ๋ํ ์ฑ์ด ์์ต๋๋ค. ์ง๊ธ ์ฐ๋ฆฌ๋ N์ด ์ธ์ด์ ๊ฐ์๊ฐ ๋๋๋ก N ๋น๋๋ฅผ ๋ณ๋ ฌ๋ก ์คํํฉ๋๋ค. ์ด๊ฒ์ ํนํ ์ฑ์ด ์๋นํ ํฌ๊ณ ์ฌ๋ฌ ํ๊ฒฝ์ ํ๋ฃจ์ ์ฌ๋ฌ ๋ฒ ๋ฐฐํฌํ๋ค๋ ์ ์ ๊ณ ๋ คํ ๋ ์์ํ ์ ์๋ฏ์ด ๋ฆฌ์์ค ์ง์ฝ์ ์ ๋๋ค.
๋ด๊ฐ ๋ฐ๋ผ๋ ๊ฒ์:
ng๊ฐ "๋ค์ดํฐ๋ธ" ์๋ฃจ์
์ ์ ๊ณตํ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋์ @chcaru ๋ https://github.com/actra-development-oss/ng-i18n-aot-loader/ ๋ฅผ ์ดํด๋ณด์ญ์์ค.
๊ทธ๊ฒ์ ์ฌ๋ฌ ๋ก์ผ์ผ์ ๊ฐ์ง ํ๋์ AOT ๋น๋๋ฅผ ์๊ตฌํ๋ ๊ฒ์ ์ ํํ๊ฒ ์ ๊ณตํฉ๋๋ค.
@chcaru :
1/ ๋๋ต์ ์ธ ETA๋ Angular v6์
๋๋ค(์ฒซ ๋ฒ์งธ ๋ฒ ํ๋ 1์ ๋ง๊น์ง ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๊น? ํ์คํ์ง ์์). ์ข์ ์์์ ๊ฑฐ์ ๋ชจ๋ ์์
์ด ์๋ฃ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ฐํ์ ๋ฒ์ญ ํ์ ์ฝ๋ ๋ฒ์ญ์ด ๋น ๋ฅด๊ฒ ๋ฐ๋ผ์ผ ํ๋ค๋ ๊ฒ์
๋๋ค.
2/ ๋ค
3/ ๋ฒ์ญ์ ๋ฒ๋ค์์ ๋ถ๋ฆฌ๋์ด์ผ ํฉ๋๋ค. ๋ถํธ์คํธ๋ฉ ์ ์ ํ์ํ ๊ฒ์ ์ง์ฐ ๋ก๋ํ๊ฑฐ๋ ๋ชจ๋ ๊ฒ์ ํ๋๋ก ๋ฌถ์ ์ ์์ต๋๋ค. ๋ํ ๋ชจ๋์ ๋ํ ์ง์ฐ ๋ก๋ ๋ฒ์ญ์ ์ง์ํ๊ณ ์ถ์ง๋ง ์ธ์ ์ง์๋ ์ง๋ ํ์คํ์ง ์์ต๋๋ค. ๋ ๊ฐ๋ฅํ๋ค
@ocombe angularv6์ด ์ถ์๋ ๋๊น์ง ๋ฒ์ญ์ ๋์ ์ผ๋ก ๋ก๋ํ๊ฑฐ๋ ๋จ์ผ ํจํค์ง๋ก ๋ค๊ตญ์ด ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ง๋๋ ๊ฐ์ฅ ์ฌ๊ฐํ ์ต์ ์ ngx-translate์ ๋๋ค.
angularv6์ด ์ข
๋ฃ๋์์ ๋ ngx-translate๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๊ฒ ๋ง์ด๊ทธ๋ ์ด์
ํ๋ ๋ฐ ๋์์ด ๋๋ ๋ช ๊ฐ์ง ํ์ด ์์ต๋๊น?
๋ ์์ฉ ํ๋ก๊ทธ๋จ ์ฌ์ด์ ๋ค๋ฆฌ๊ฐ ์์ต๋๊น?
์ค์ ๋ก๋ ์ฝ๋๊ฐ ์๋นํ ๋ค๋ฆ ๋๋ค... ๋ง์ด๊ทธ๋ ์ด์ ๋๊ตฌ ์์ ์ ๋ํ ์์์ด ์๊ธฐ๋ฉด ์ด๋ฌํ ๊ธฐ๋ฅ์ด ํฌํจ๋ v6์ด ์ธ์ ๋์ฌ์ง ์ ์ ์์ต๋๋ค.
์๋ ํ์ธ์, ํฅํ ๊ธฐ๋ฅ์ ํฌ๋ช ์ฑ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๋ค์ ์ง๋ฌธ์ ๋ํ ๋ต์ ์๋ ๊ฒ์ด ๋งค์ฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
์๋ก์ด i18n ์ํฌํ๋ก๊ฐ https://angular.io/guide/i18n ์ ์ค๋ช ๋ ํ์ฌ ์ํฌํ๋ก์ ์ผ๋ง๋ ๋ค๋ฅผ์ง ์์ญ๋๊น?
i18n ๋ฐ i18n-*(์: ์ ํ์ ์ฌ์ฉ์ ์ง์ ID๊ฐ ์๋ i18n-title ์์ฑ)์ด ํ ํ๋ฆฟ์์ ๊ณ์ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๊น?
๋ค์ ๋ช ๋ น์ด ๊ณ์ ์๋ํฉ๋๊น?
ng serve --aot --locale fr
ng xi18n --i18nFormat=xlf
ng xi18n --i18nFormat=xlf2
ng xi18n --i18nFormat=xmb
@Toub ์ ์๊ฒฌ์ ๋ฐ๋ผ ์ด ์ ํ ๊ธฐ๊ฐ ๋์ ๊ตฌํํ๋ ค๋ ๋ค์ ์ ๊ทผ ๋ฐฉ์(i18n ์์ฑ๊ณผ ngx-translate ํผํฉ)์ ๋ํ ํผ๋๋ฐฑ์ ๋ฐ๋ ๋ฐ ๊ด์ฌ์ด ์์ต๋๋ค. ์ฐ๋ฆฌ์ ๋ชฉํ๋ ์๋ก์ด i18n ์ง์์ด ์ค๋น๋ ๋ ์ฝ๋์์ ์ํํ ์ ๋ฐ์ดํธ๋ฅผ ์ต์ํํ๋ ๊ฒ์ ๋๋ค.
(์ฐ๋ฆฌ๋ ๋์ ๋ก์ผ์ผ์ ์ํฉ๋๋ค. ์ฆ, ๋ก์ผ์ผ๋น ํ๋์ ์์ฑ๋ ์ฑ์ด ์๋)
i18n
์์ฑ์ ์ฌ์ฉํฉ๋๋ค.i18n
๋ฅผ ์ฌ์ฉํ์ฌ ์์์ translate
์์ฑ์ ํ์ฉํ์ฌ ๋ฒ์ญ์ ์ ์ฉํฉ๋๋ค(์ด์ ์ ์ถ์ถ).๋ค์์ ์ํ์ ๋๋ค.
<!-- Without parameters -->
<div i18n="hello-id" translate>HELLO</div>
<!-- With parameters -->
<div i18n="hello-id" translate [translateParams]="{value: 'world'}">HELLO</div>
ํผ๋๋ฐฑ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
ngx-translate์ ๋ํ ๋ฌธ์ ๋ฅผ ์ด โโ์ ์์ต๋๊น? "๋ฒ์ญ"์ ๋์์ผ๋ก "i18n" ์์ฑ์ ์ง์ํ๋๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๋ฐ์ดํธํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ผ ๊ฒ์ ๋๋ค.
@ocombe ์ ์ ๊ฐ์ฌํฉ๋๋ค! ngx-translate์์ ์ด์ ๋ํ ๋ฌธ์ ๋ฅผ ์ถ๊ฐํ์ต๋๋ค...
@ocombe ๋ด๊ฐ ๋ณผ ์์๋ ๋ฌธ์ ๋ i18n
/ i18n-*
์์ฑ์ด ๋ฐํ์์ ์ ๊ฑฐ๋๋ค๋ ๊ฒ์
๋๋ค(https://github.com/angular/angular/issues/11042). ๋ณด๊ดํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
๋๋ ํ์ธํ๊ณ ๋ด๊ฐ ์ค์ํ์ง ์๋ ํ Angular i18n์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ง ์ ๊ฑฐ๋ฉ๋๋ค(์ฆ, ์ปดํ์ผ์ ์ํํ ๋ ๋ฒ์ญ์ ๋ก๋ํ๋ค๋ ์๋ฏธ).
@ocombe ์ดํดํ์ง๋ง Angular CLI๋ฅผ ์ฌ์ฉํ๊ณ ng serve
๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ์์ํ๊ธฐ ๋๋ฌธ์ ๋ฒ์ญ์ ๋ก๋ํ์ง ์์ต๋๋ค ...
@ocombe , ์ฐ๋ฆฌ ํ์ฌ๋ ํ์ฌ ๊ท์ ๋ ๋ก์ผ์ผ๋ณ ๋ค์ค ์ฑ ์ ๋ต์ ์ฌ์ฉํ์ฌ i18n์ ์ง์ํ๊ธฐ ์ํ ๋ ธ๋ ฅ์ ๊ณง ์์ํฉ๋๋ค. ๋ํ URL์ ๋ก์ผ์ผ์ ํฌํจํ๊ณ ์ฑ์์ ๊ธฐ๋ณธ href๋ฅผ ์ค์ ํ ๊ณํ์ ๋๋ค. ๋ฐํ์ i18n ๊ธฐ๋ฅ์ด ์๋ฃ๋๋ฉด url ๋ก์ผ์ผ ์ ๋ต์ ๋ณ๊ฒฝํด์ผ ํฉ๋๊น? ๋ฐํ์ i18n์ด ์ถ์๋๋ฉด ๋๊ท๋ชจ ๋ฆฌํฉํ ๋ง์ ํผํ๊ธฐ ์์ํ๋ ๋ ์ข์ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ์ด ๋ชจ๋ ์์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
โฌ๏ธ "๊ณง ์์๋ฉ๋๋ค"๋ผ๊ณ ๋งํด์ผ ํฉ๋๋ค.
ํ๋์ ์ฑ/๋ก์ผ์ผ์ด ์ง๊ธ ๊ทธ๋๋ก ์๋ํด์ผ ํฉ๋๋ค(cli๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ ๋ถํธ์คํธ๋ฉ์์ ๋ก์ผ์ผ ํ์ผ์ ๋ก๋ํ๊ธฐ ์ํ ์ฝ๊ฐ์ ๋ณ๊ฒฝ ์ ์ธ)
๋ฒ๋ค ์ค์ ํ
ํ๋ฆฟ์์ i18n
ํ์ผ ์์ฑ์ด ์ ๊ฑฐ๋ ์ ๋ฅผ ๋๊ตฐ๊ฐ ๋์์ผ๋ก ์ง์ ํด ์ฃผ์๊ฒ ์ต๋๊น?
cc @ocombe
4.2.6์์ ๋ณ๊ฒฝ๋์์ต๋๋ค(PR https://github.com/angular/angular/issues/17999).
์๋ ! ๋๋ ์ค๋ซ๋์ ์ด ์ค๋ ๋๋ฅผ ๋ฐ๋ผ๋ค๋ ๋ค. v6์ ์ฒซ ๋ฒ์งธ ๋ฒ ํ๊ฐ ๋์จ ๊ฒ์ ๋ณด์์ต๋๋ค. ๋ณ๊ฒฝ ๋ก๊ทธ๋ฅผ ์ฝ์์ง๋ง ์ด ์ค๋ ๋ฌธ์ ์ ๊ด๋ จ๋ ๋ด์ฉ์ ๋ณด์ง ๋ชปํ์ต๋๋ค. ์ด ์ ๋ฉด์ ์ด๋ค ์์์ด ์์ต๋๊น? ์๋๋ฉด ์ ์ด๋ ์ธํฐํ์ด์ค๊ฐ ํด๋ฆฌํ๊ณผ ์ ์ฌํ ๊ฒ์ด๋ผ๋ ๋ณด์ฅ์ด ์์ต๋๊น?
์์ ํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
๊ทธ๊ฒ์ ๋ง์ง๋ง ๋ฒ ํ ์ค ํ๋ ๋๋ ์๋ง๋ RC(์๊ณ ์์ต๋๋ค...)์ ์์ ๊ฒ์
๋๋ค.
์ธํฐํ์ด์ค๋ ์ฝ๋ ๋ฒ์ญ์ ์ํด Google์ด ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด๋ฏ๋ก ์ข
๋ฃ ์ goog.getMsg
์ ์ ์ฌํฉ๋๋ค. https://developer.pubref.org/static/apidoc/global/closure/goog/getMsg.html
ํ์ง๋ง ๋ํผ๋ฅผ ์ฌ์ฉ ์ค์ผ ์ ์์ผ๋ฏ๋ก ์์ง ํ์คํ์ง ์์ Angular์ ์ธํฐํ์ด์ค๊ฐ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค.
๋ด ํด๋ฆฌํ์์ ๋น์ทํ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ง๋ง ํ์ํ ๊ฒฝ์ฐ id, ์ค๋ช
๋ฐ ์๋ฏธ๋ฅผ ์ ์ํ ์ ์๋ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฉฐ ์ฐ๋ฆฌ๋ ์ด๋ค ์์ผ๋ก๋ (๋งค๊ฐ๋ณ์๋ฅผ ํตํด ๋๋ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ํตํด) ํ์ํ๋ค๊ณ ๋ฏฟ์ต๋๋ค.
๋ชจ๋ ๋ ธ๋ ฅ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค! 4์์ ์์๋๋ ์ ์ฒด 1.x ์ฑ์ ์ ๋ฉด์ ์ธ ์ฌ์์ฑ์ ์ค๋นํ๊ณ ์์ต๋๋ค. ์ด๋ฌํ ๋ณํ์ ๋๋นํ๊ธฐ ์ํด ์ฐ๋ฆฌ๊ฐ ํ ์ ์๋/ํด์ผ ํ๋ ์ผ์ด ์์ต๋๊น? ์ง๊ธ ์ฐ๋ฆฌ๋ 6.x๋ฅผ ์ฌ์ฉํ ๊ณํ์ ๋๋ค. ๋ค์ ํ๋ฒ ๊ฐ์ฌํฉ๋๋ค!
@ocombe "์๋ค ๊ณต๋ฐฑ ๋ฌด์"๊ฐ ์ธ์ ์์๋๋์ง ๊ถ๊ธํ์ญ๋๊น?
๋ก๋๋งต์ ์ ๋ฐ์ดํธํด์ผ ํ์ง๋ง ์ง๊ธ์ ์ฝ๊ฐ ํผ๋์ค๋ฝ์ต๋๋ค(์ ์๊ฒ๋). ํนํ ์ด ๊ธฐ๋ฅ์ ๋ถ๋ช ํ ์ฐ์ ์์๊ฐ ์๋๋ฏ๋ก ๊ณง ์์ ํ ๊ฒ์ผ๋ก ๊ธฐ๋ํ์ง ๋ง์ญ์์ค.
@ocombe ์, ์ข์ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ๋ ๋ฐํ์ i18n์ด ์ ์ผํ ์ฐจ๋จ ์ง์ ์ธ ๋ฐํ์์ ๋งค์ฐ ๊ด์ฌ์ด ์์ต๋๋ค. ์๋ฃ ์ฌ๋ถ๋ฅผ %๋ก ์ถ์ธกํ ์ ์์ต๋๊น?
๋ ธ๊ณ ์ ์ง์ฌ์ผ๋ก ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
@์ค์ฝค๋ฒ
ํนํ ์ด ๊ธฐ๋ฅ์ ๋ถ๋ช ํ ์ฐ์ ์์๊ฐ ์๋๋ฏ๋ก ๊ณง ์์ ํ ๊ฒ์ผ๋ก ๊ธฐ๋ํ์ง ๋ง์ญ์์ค.
์ฌ๊ธฐ์ ๋งํ๋ ๊ธฐ๋ฅ์ ๋ช ํํ ํด์ฃผ์ค ์ ์๋์? ๋๋ ์ด๋ค ๊ฐ์ ๋ ํ๊ณ ์ถ์ง ์์ต๋๋ค.
@ofuangka "์ ํ ๋ฐ ํํ ๊ณต๋ฐฑ ๋ฌด์" ๊ธฐ๋ฅ์ ์ฐ์ ์์๊ฐ ์๋๋๋ค.
@Karamuto ์ง๊ธ์ ์ถ์ธกํ๊ธฐ ์ด๋ ต์ต๋๋ค. ์ง๊ธ ์์
์ค์
๋๋ค.
@์ค์ฝค๋ฒ
Runtime i18n์ ๋ํ ์ด์ ํ๋ฅผ ๊ณต์ ํด ์ฃผ์๊ฒ ์ต๋๊น(AOT๊ฐ ์๋ ๋ชจ๋ ๋ก์ผ์ผ์ ์ํ ํ๋์ ๋ฒ๋ค)
์ด์ ์ฐ๋ฆฌ๋ xi18n ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๊ฑฐ๋ํ ๋ค๊ตญ์ด ํ๋ก์ ํธ์ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
์ฐ๋ฆฌ๋ ํ์ค ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ๋ฅผ ํฌ๋งํ์ง๋ง ๊ทธ๊ฒ์ด ๋๋ฌด ์์์ ์ด๋ผ๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
๋ํ xlf ํ์ผ์ ๋ถํ ํ ์ ์๊ธฐ๋ฅผ ์ํฉ๋๋ค(๋ชจ๋๋น ํ๋์ ํ์ผ). ๊ฐ๋ฅํฉ๋๊น?
์๋ก
๋ฐํ์ i18n์ด Angular 6์์ ์ถ์๋ฉ๋๊น?
๊ฐ์ฌํ๊ณ ํ๋ณตํ ์ฝ๋ฉ!
์๊ฐ์ด ์ผ๋ง ๋จ์ง ์์์ผ๋ฉฐ ์ง๊ธ๊น์ง ์ด ๊ธฐ๋ฅ์ ๋ํ ํ์ค ์ธ์์ด ์์๊ธฐ ๋๋ฌธ์ ์ด ์์ ์ด ์ ์๊ฐ์ ์๋ฃ๋ ๊ฒ์ด๋ผ๋ ํฌ๋ง์ ์์ต๋๋ค.
๋ฒ์ 7 ๋ฆด๋ฆฌ์ค๋ ์ฐ๋ฆฌ์๊ฒ ๊ฝค ๋ฆ์ ๊ฒ์ ๋๋ค.
@์นด๋ผ๋ฌดํ # 22654
v6์ ๋์ฌ ๊ฒ ๊ฐ์๋ฐ ์์ด๋น๋ฅผ ๋จผ์ ๋๋ด์ผ ํฉ๋๋ค.
์ด๋ฒ ์ฃผ์ hello world๊ฐ ์๋ํด์ผ ํ์ง๋ง ์ต์ํ์ ๊ธฐ๋ฅ(์: ICU ์ง์ ์์)์ผ๋ก ์๋ํด์ผ ํฉ๋๋ค.
ํ์ง๋ง ํ๋๊ทธ ๋ค์ ์์ด๋น์ ํจ๊ป ์ถ์๋๊ธฐ ๋๋ฌธ์ ๊ณ์ ์์
ํ๊ณ ์๋ก์ด ๊ธฐ๋ฅ์ด ์๋ฃ๋๋ ๋๋ก ์ถ์ํ ์์ ์ด๋ฏ๋ก v7์ ๊ธฐ๋ค๋ฆด ํ์๊ฐ ์์ต๋๋ค.
@์ค์ฝค๋ฒ
๊ทธ๊ฑฐ ์ข์ ๊ฑฐ ๊ฐ์! ์ฒ์๋ถํฐ ICU๋ฅผ ์๋ฃํ ํ์๋ ์์ต๋๋ค. v6์ ํ๋ฐ๋ถ์์ ๋ฐ์ ํ๋ค๋ฉด ์ด๊ฒ์ ์ฐ๋ฆฌ์ ์ํด ์์ ํ ๊ด์ฐฎ์ต๋๋ค.
๋ค์ ํ ๋ฒ ํ๋ฅญํ ์์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
@Karamuto ๋ #22654๋ฅผ ์ด์ง ์ฟ๋ณด์ธ์!
๋ฉ์ฒญํ ์ง๋ฌธ: ์ฌ์ฉ์ ์ง์ ๊ตฌ์ฑ ์์์ ๋ํ ๋ฌธ์์ด ๊ธฐ๋ฐ ์ ๋ ฅ์ ๋ํด i18n ์ง์๋ฌธ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? aria-labels๋ฅผ ์ ๋ฌํ ๋์ ์:
๋ฉ์ง ์์
์ ์ํํ๋ ์ฌ์ฉ์ ์ง์ ๋ฒํผ์ ๋ํํฉ๋๋ค.
์ฌ์ฉ์ ์ ์ ๋ฒํผ์ ํ
ํ๋ฆฟ์ ๋ค์์ ์ํํฉ๋๋ค.
์ด๋ฏธ์ด ์์ ์ ์ํํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
@kekraft ์ ์ ์ ๋ ฅ์ ์ฌ์ฉํ๋ฉด i18n ์์ฑ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
<custom-button ariaLabel="your label" i18n-ariaLabel></custom-button>
๊ตฌ์ฑ ์์์์:
<button [attr.aria-label]="ariaLabel">Some button</button>
@ocombe ๋ฐํ์ i18n ์์ ์ ์๋ฃํ๋ ค๋ฉด ๊ธฐ์ฌ์๊ฐ ํ์ํฉ๋๊น?
์ ! v6 ์ถ์ ~~~
์ฌ๊ธฐ์ ์ด๋ค ์
๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
i18n angular 6์ ์๊ฐ ์ฌ๊ธฐ์ ์์ต๋๋ค.
https://github.com/angular/angular/pull/23660
@sandangel ์ด ์ค๋ ๋์ ์์ ๋ถ๋ถ์ ์๋ ๊ณํ์์ ๋จ์ํ "๋ชจ๋ ๊ฒ" ๋๋ "ํ์ธ๋ ๋ชจ๋ ๊ฒ"์ ์๋ฏธํ์ต๋๊น?
๋จ์ผ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ ๊ฒ์ ์ ๋ง ๊ณ ๋ํ๊ณ ์์๋๋ฐ, ๊ทธ๊ฒ์ด ๊ฐ์ฅ ์ค์ํ ๊ฒ ์ค ํ๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋งํฌํ #23660์ผ๋ก ์ด๋ํ์ฌ https://pr23660-e12f469.ngbuilds.io/guide/i18n ์ ๋๋ฌํ์ต๋๋ค.
๊ทธ๋ฌ๋ ๊ฑฐ๊ธฐ์๋ ์ฌ์ ํ ๋ค์๊ณผ ๊ฐ์ด ์ฐ์ฌ ์์ต๋๋ค.
AOT ์ปดํ์ผ๋ฌ๋ก ๊ตญ์ ํํ ๋ ๊ฐ ์ธ์ด์ ๋ํด ๋ณ๋์ ์ ํ๋ฆฌ์ผ์ด์ ํจํค์ง๋ฅผ ์ฌ์ ๋น๋ํ๊ณ ์๋ฒ ์ธก ์ธ์ด ๊ฐ์ง ๋๋ URL ๋งค๊ฐ๋ณ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ์ ํ ํจํค์ง๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค.
๋จ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฌ ์ธ์ด๋ก ์ฌ์ฉํ ์ ์์ต๋๊น? ์๋๋ฉด ์์ง ์ฌ์ฉํ ์ ์์ต๋๊น?
@MrCroft ๋ ๋ฐํ์ i18n์ด ์์ง ์งํ ์ค์ธ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ ๋น์ ์ฒ๋ผ ๋ช ๊ฐ์ง ๋ ๋ง์ ์ต์ ์ ์ฝ์์ง๋ง ๋ชจ๋ ํ์งํ์ ๋ํ ํ๋์ ๋ฒ๋ค์ ์๋๋๋ค :(
์ฐ๋ฆฌ๋ ์๋ ์ค์ธ hello world๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง ์ด๊ฒ์ ์๋ก์ด ๋ ๋๋ฌ(ivy)๋ง์ ์ํ ๊ฒ์ด๋ฉฐ ivy๋ ํฉ๊ธ ์๊ฐ์ ์ํ ์ค๋น๊ฐ ๋์ง ์์๊ธฐ ๋๋ฌธ์ ๋ถํํ๊ฒ๋ ๊ธฐ๋ค๋ ค์ผ ํ ๊ฒ์ ๋๋ค :(
@ocombe ๋ฐ๋ผ์ ํ๋ก๋์ ์ Ivy๊ฐ ์๋ ๊ฒฝ์ฐ(์๋ง๋ v7 ์ ๋) ๋ฐํ์ ๋ฒ์ญ์ด ์์ ๊ฒ์ ๋๋ค. ์ด ์ฌ๋ฐ๋ฅธ์ง?
@ocombe hello world์ ivy๋ ๊ณต๊ฐ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๊น? ์ด ์๋ก์ด i18next ๊ตฌํ์ ์ดํดํ๋ ค๊ณ ํ๋ฉด ๋ฉ์ง ๊ฒ์ ๋๋ค๐
@fetis ๋ค :(
@feloy ๋ค, ๊ฐ๋จํ hello world๋ ์ฌ๊ธฐ์ ์์ต๋๋ค: https://github.com/angular/angular/tree/master/packages/core/test/bundling/hello_world_i18n ํ์ง๋ง ๋งค์ฐ ์ต์ํ์
๋๋ค.
์ฌ๊ธฐ์์ ํ
์คํธ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค: https://github.com/angular/angular/blob/master/packages/compiler/test/render3/r3_view_compiler_i18n_spec.ts
์ฌ๊ธฐ์์ ์ผ๋ถ ๋ฆฌํฉํ ๋ง + ์ถ์ถ: https://github.com/angular/angular/pull/22931
@ocombe ์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ ์์ฉ ํ๋ก๊ทธ๋จ์์ i18n์ ๊ตฌํํ๋ ค๊ณ ์๋ํ๊ณ ์์ง๋ง ์ด๋์์๋ ์ฝ์ ๋๋ง๋ค ์ธ์ด๋น ํ๋์ messages.xlf ํ์ผ์ด ํ์ํ๋ค๋ ๊ฒ์ ์์์ต๋๋ค. ๋ค์ํ ๊ณ ๊ฐ ๋๋ฉด ํ๋ฉด ๋ฑ์ ๋ณต์กํ ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ณ ๋ คํ์ฌ ์ ์ง ๊ด๋ฆฌํ๋ ๋ฐ ์ค๋ฒํค๋๊ฐ ๋์ง ์์๊น์? ๊ตฌ์ฑ ์์ ๋๋ ๋ชจ๋๋ณ๋ก ๋ฉ์์ง ํ์ผ์ ๋ถ์ํ ์ ์๋์ง ํ์ธํ๋ ค๊ณ ํฉ๋๋ค. ์ด๋ฏธ ์ง์๋๋์?
@stickler-v ์ด ํ์ผ์ ๋ฌธ์์ด์ ๋ฒ์ญ ์ํํธ์จ์ด๋ก ์ ์กํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. ์๋์ผ๋ก ๋ฒ์ญํ๋ ๊ฒ์ ๊ณ ๋ คํ์ง ๋ง์ญ์์ค.
ํ์ง๋ง ๋ค๋ฅธ ์ธ์ด๋ก ๋ ์ค์ ํ ์คํธ๊ฐ ์ด๋์ ์์ต๋๊น? ๋ฒ์ญ๊ฐ๊ฐ ํ๋ ๊ฒ๊ณผ ๋์กฐ์ ์ผ๋ก ์ด ํ ์คํธ๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํด์ผ ํฉ๋๋ค.
๋ฏธ์ํ์ง๋ง ์กฐ๊ธ ๊ธธ์ ์์์ต๋๋ค. https://angular.io/guide/i18n์ ์๋ณธ ๋ฌธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. src/app/app.component.html์๋ ์์ด ํ ์คํธ๋ง ์์ต๋๋ค. messages.fr.xlf๋ ํ๋์ค์ด ํ ์คํธ๊ฐ ์๋ ํ์ผ์ด์ง๋ง ์๋์ผ๋ก ์์ฑ๋๋ฏ๋ก ๊ฑด๋๋ฆฌ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
์์ด ๋์ ํ๋์ค์ด ํ ์คํธ๋ฅผ ์ฌ์ฉํ์ฌ app.component.html์ ๋ ๋๋งํ๋ ค๋ฉด ํ๋์ค์ด ๋ฉ์์ง "Bonjour" ๋ฑ์ ์ด๋์ ์ง์ ํด์ผ ํฉ๋๊น?
@stickler-v ์ ๋ง ์ฃผ์ ๊ฐ ์๋๋ค์. StackOverflow์ ์ง๋ฌธ์ ๋ง๋์ธ์. ๊ทธ๊ณณ์์ ๊ธฐ๊บผ์ด ๋ตํด ๋๋ฆฌ๊ฒ ์ต๋๋ค.
์ฌ๊ธฐ์์ ๋
ผ์ํ์ง ์์ ์ ์์ต๋๊น? ์ฌ๊ธฐ ์ฃผ์ ๊ฐ ์๋๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
@stickler-v ์ง๋ฌธ์ ๋ํด, ๋ชจ๋/๊ตฌ์ฑ ์์๋น ํ๋์ ํ์ผ์ ์ง๊ธ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๋ฏธ๋์ ๊ฐ๋ฅํ ์๋ ์์ง๋ง ํ์ฌ ์์
์ค์ธ ๋ชฉ๋ก์๋ ์์ต๋๋ค.
๊ฒฝ๋ก ๋ฒ์ญ์ ์ง์ํ ๊ณํ์ด ์์ต๋๊น?
์ด๋ฏธ ๋ต๋ณ์ ๋ฐ์์ง๋ง ์ด ๋ฒ์ ์์ JS๋ก ๋ฒ์ญ์ด ๊ฐ๋ฅํ๊ฐ์? ์๋๋ฉด ์ฌ์ ํ ํ ํ๋ฆฟ ์ ์ฉ์ธ๊ฐ์?
@santhony7 ์์ง ์์ด๋น๊ฐ ์ค๋น๊ฐ ์๋์ด์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
์ฌ๊ธฐ์ ๋ฐํ์ i18n์ ์๋/๊ธฐ๋ฅ์ ๋ํ ํ ๊ฐ์ง ์ง๋ฌธ์ ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐํ์์ ์ธ์ด๋ฅผ ์ ํํ๊ณ ์ด์ ng-translate
์ ๊ธฐ๋ฅ์ฒ๋ผ ์ฑ์ ๋ค์ ๋ก๋ํ์ง ์๊ณ "๋ค์ง๊ธฐ"ํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋์ง์
๋๋ค. AngularJS ๋ฐ ngx-translate
? ์๋๋ฉด ์์ ํ ๋ค๋ฅธ ๊ฒ์ ์๋ฏธํฉ๋๊น?
์๋์, ์ธ์ด๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด ์ฑ์ ๋ค์ ๋ก๋ํด์ผ ํฉ๋๋ค.
ํ์ฌ i18n์์๋ ๋ฒ์ญ์ ๋น๋ํ๊ณ ์ ๊ณตํ ๋ ๋ฒ๋ค ์ฝ๋์ ๋ฌธ์์ด์ ๊ต์ฒดํฉ๋๋ค. ์ด๋ ๋ฒ๋ค์ด ํ์งํ๋์์์ ์๋ฏธํฉ๋๋ค.
๋ฐํ์ i18n์ ๋ฒ์ญ ํ์ผ์ด ์ง๊ธ๊ณผ ๊ฐ์ด ๋น๋ ์๊ฐ์ด ์๋๋ผ ์ฑ์ด ์์๋ ๋ ๋ก๋๋๋ค๋ ์๋ฏธ์
๋๋ค.
๊ทธ ๋๋ฌธ์ ์ฑ์ด ์์๋๊ธฐ ์ ์ ๋ฒ์ญ ํ์ผ์ ์ง์ฐ ๋ก๋ํ ์ ์์ต๋๋ค. ์ฆ, ๋ฒ๋ค์ด ์ธ์ด์ ๋ถ๋ฆฌ๋์ด ์ฑ์ ๋ํด ํ๋์ ๋ฒ๋ค๋ง ์ป์ต๋๋ค.
๋ํ ์ธ์ด๋น ํ๋์ ๋ฒ๋ค์ ์ฌ์ฉํ๋๋ก ์ ํํ๊ณ ์ธ์ด ํ์ผ์ ์ฑ๊ณผ ๋ฒ๋ค๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค(์ง๊ธ ํ๊ณ ์๋ ๊ฒ์ฒ๋ผ). ๋ฒ์ญ ํ์ผ์ ์ง์ฐ ๋ก๋ํ๋ ๋ฐ ํ์ํ ์ง์ฐ์ ํผํ ์ ์์ต๋๋ค.
ํ ๊ฒฝ์ฐ์๋ ์ถ๊ฐ http ์์ฒญ์ ์ํํ๊ณ ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ์ํํ์ง ์์ง๋ง ์ธ์ด๋น ํ๋์ ๋ฒ๋ค์ ๊ฐ๋ ๊ฒ์ ์ ๋นํํ ๋งํผ ํฐ ์ฐจ์ด๋ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ฐํ์ i18n์ ์ฅ์ :
๋จ์ :
์ด๋ก ์ ์ผ๋ก ์ ์ฒด ์ฑ์ ๋ค์ ๋ก๋ํ์ง ์๊ณ ์ธ์ด๋ฅผ ๋ณ๊ฒฝํ ์ ์์ง๋ง ๊ตฌ์ฑ ์์๊ฐ ์์ฑ๋ ๋ ํ
ํ๋ฆฟ์ด ์์ฑ๋๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด ๊ตฌ์ฑ ์์๋ฅผ ๋ค์ ๋ง๋ค์ด์ผ ํ๊ฑฐ๋ i18n
๋ฅผ ์ฌ์ฉํ๋ ๋์ ํ
ํ๋ฆฟ์ ์๋น์ค๋ฅผ ๋ฐ์ธ๋ฉํ ์ ์์ต๋๋ค.
๋ํ ์ฌ๋๋ค์ด ์๊ฐํด์ผ ํ ๊ฒ์ ํ ์ธ์ด์์ ๋ค๋ฅธ ์ธ์ด๋ก์ ์ผ๋ถ ๋ณ๊ฒฝ์ ์์ ์ ์๊ณ ๋ค๋ฅธ ๊ฒ์ ํด ์ ์๋ค๋ ๊ฒ์
๋๋ค. ์๋ฅผ ๋ค์ด ์์ด์์ ์คํ์ธ์ด๋ก ์ด๋ํ๋ ๊ฒ์ "์์" ์ผ์ด์ง๋ง ์์ด์์ ์ค๊ตญ์ด ๋๋ ์๋์ด๋ก ๋งํ๋ ๊ฒ์ ํด ์ ์์ต๋๋ค.
์ผ๋ถ ์ธ์ด์ ๊ฒฝ์ฐ ํ
์คํธ๋ฟ๋ง ์๋๋ผ ํด๋น ์ธ์ด๋ฅผ ์์ฉํ๊ธฐ ์ํด ๋ค๋ฅธ ๋ ์ด์์์ ๋์์ธํด์ผ ํ ์๋ ์์ผ๋ฉฐ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ ๋๋ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ ๋ฐ ๊ธฐํ ์ธ๋ถ ์ฌํญ์ ๋ํ ์ ๋ ฌ ๊ท์น์
๋๋ค.
๊ทธ๋์ ๋๋ถ๋ถ์ ์ค์ ์ฌ์ฉ์ ์ํด ์ฑ์ด ์ฑ์์ ์ธ์ด ๊ฐ์ง ๋จ๊ณ๋ฅผ ๋ก๋ํ์ฌ ์ฌ๋ฐ๋ฅธ ๋ฆฌ์์ค์ ์ผ๋ถ ๋ ์ด์์์ ๋ก๋ํ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค.
@ocombe ์ค๋ช
ํด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค! ํ์ฌ Angular i18n
๋ฅผ ์ ํ๋ฆฌ์ผ์ด์
๋ด์์ ๊ตฌํํ์ผ๋ฉฐ ๋ณ๊ฒฝ/์ ์ ์๋ ์๊ตฌ ์ฌํญ์ผ๋ก ์ธํด ๊ฑธ๋ฆผ๋์ด ๋์์ต๋๋ค. ๋ํ ํ์ฌ ๊ฒฉ์ฐจ๋ฅผ ํด์ํ๊ธฐ ์ํด https://github.com/ngx-translate/i18n-polyfill ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํจ๊ป ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
์ฌ๋ฌ ๋ฒ๋ค์ด ์ฝ๊ฐ์ ์ฑ๊ฐ์ฌ์ด์ง๋ง ํ์ฌ ์ถฉ๋ถํ ์ฝ๊ฒ ํด๊ฒฐํ ์ ์์ต๋๋ค. ํนํ ๊ฑธ๋ฆผ๋์ ํ์ฌ ์ฌ์ฉ๋๋ ์ธ์ด์ ๋ค๋ฅธ ์ธ์ด๋ก ํ์๋๋ ํ๋์ ๊ตฌ์ฑ ์์(๋ฐ ๋ชจ๋ ํ์ ๊ตฌ์ฑ ์์)๋ฅผ ๊ฐ์ง ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
์์งํ ngx-translate
์ด ๋๋ฅผ ์ํด ์ด ์์
์ ์ํํ๋ ๋ฐ ๋์์ด ๋ ์ ์๋์ง ์์ง ํ์คํ์ง ์์ง๋ง ํผ๋ฒ์ ๋ง๋ค๊ธฐ ์ ์ ๊ฐ๋ฅํ ๋ง์ ์ ๋ณด๋ฅผ ์ป์๋์ง ํ์ธํ๊ธฐ ์ํด ๋ค๊ฐ์ค๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํด ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ณ ์ถ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋์์ ์ฌ๋ฌ ์ธ์ด๋ก ๋ฒ์ญ๋ ์ฑ์ ์ง์ํ ๊ณํ์ด ์์ต๋๋ค. ๋ฒ์ญ/๋ชจ๋์ ๋ก๋ํ ์ ์๋ค๋ฉด ๋ฏธ๋์ ๊ฐ๋ฅํ ์๋ ์์ง๋ง ์ํคํ ์ฒ์ ๋ถ์์ฉ์ผ ๊ฒ์ ๋๋ค. ๋ฌ์ฑํ๊ธฐ ์ํด ๋ ธ๋ ฅํ์ต๋๋ค.
Ivy + ๋ฐํ์ i18n์ ๋ํ ETA๊ฐ ์์ต๋๊น?
๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์๋ฒฝํ๊ฒ ์ดํดํ์ง๋ง (ํ์ฌ ํ๋ก์ ํธ์ ๊ธฐ๊ฐ์ ๊ฐ์ํ ๋) ๊ธฐ๋ค๋ฆด ์ ์๋์ง ๋๋ ํ์ฌ ์๋ฃจ์
์ค ํ๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์์ํ๊ณ ํฅํ ๋ฒ์ ์ ์ํด ๋ฐํ์ i18n์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์
์ ์ฐ๊ธฐํด์ผ โโํ๋์ง ์์์ผ ํฉ๋๋ค. .
๋๋ ์ ํํ ์๊ฐ ํ๋ ์์ ์ ๊ณตํ๋ ค๊ณ ๋
ธ๋ ฅํ์ง ์์ ๊ฒ์
๋๋ค, ๋ด๊ฐ ์๋ํ ๋๋ง๋ค ๊ทธ๊ฒ์ ํ๋ ธ์ต๋๋ค :D
์ง๊ธ์ v7 ์ด์ ๋ฒ์ ์ด ์๋๋๋ค(์ด์ ์ ๋ฒ ํ ๋ฒ์ ์ผ๋ก ์ ๊ณต๋จ).
๋ฌธ์ ์์ต๋๋ค. ์ฐ๋ฆฌ ๋ชจ๋๋ ์ถ์ ์น๊ฐ ํญ์ ์ด๋ป๊ฒ ํ๋ฆฌ๋์ง ์๊ณ ์์ต๋๋ค. :๋
ํ์ฌ i18n(+ i18n-polyfill)์์ ๋ฐํ์ 18n์ผ๋ก ๋๋ ngx-translate์์ ๋ง์ด๊ทธ๋ ์ด์
ํ๋ ๊ฒ์ด ๋ ์ฌ์ธ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ญ๋๊น?
์๋ง๋ ํ์ฌ i18n์์ ๊ฐ์ ธ์จ ๊ฒ์ผ ์ ์์ง๋ง ๊ฐ๋ฅํ ๊ฒฝ์ฐ Angular i18n์ ๋ด๋ถ๋ฅผ ์ฌ์ฉํ๋ ngx-translate ๋ฒ์ ์ ์์ฑํ ๊ฒ์ ๋๋ค(์์ง ํ์คํ์ง ์์)
์๋ ํ์ธ์, ํ์ฌ ์ํ๋ฅผ ์ดํดํ๊ธฐ ์ํด ์ด ์ค๋ ๋๋ฅผ ํ์ํ๋ ค๊ณ ํ์ต๋๋ค. ngx ๋ฒ์ญ ์ฝ๋๋ ํ์ฌ ๋์ ์ง์ญํ๋ฅผ ์ฌ์ฉํ๋ ๋จ์ผ ์ฑ์ ๋ํด ๊ฐ์ฅ ์คํ ๊ฐ๋ฅํ "ํด๊ฒฐ ๋ฐฉ๋ฒ"์ ๋๊น?
์๋ ํ์ธ์, ngx-translate/i18n-polyfill์ ์ฌ์ฉํ์ฌ ๋ฐํ์์ ํ์งํ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๊น?
@suchg ๋ฐํ์์ด ์๋๋๋ค. ๋ฐํ์์ ๋ฒ์ญ์ ์ํํ ์ ์์ง๋ง ์ฌ์ฉ๋ ๋ก์ผ์ผ์ ๋ณ๊ฒฝํ ์๋ ์์ต๋๋ค.
@mjschranz ๋น ๋ฅธ ๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค
๋ฐํ์ ๋ฒ์ญ์กฐ์ฐจ๋ ์ง๊ธ์ ๊ด์ฐฎ์ต๋๋ค. ๊ฐ์ ์๋ฅผ ๊ณต์ ํ ์ ์์ต๋๊น?
https://github.com/ngx-translate/i18n-polyfill ์์ ๊ณต์ ๋ ์์ ๋ฅผ ์๋ํ๊ณ ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ์ ์ธ์ด๋ฅผ ๋ณ๊ฒฝํ์ง๋ง ์ด์ด ์์์ต๋๋ค.
ํน๋ณํ ๋ฒ์ญ ๋ฐฉ๋ฒ์ด ์๋์??
์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ Angular์ ๋ํ ํ ๋ก ์ ์ฌ๊ธฐ์์ ์ ์งํ์ญ์์ค. ๋์์ด ํ์ํ๋ฉด github ์ ์ฅ์์ ๋ฉ์์ง๋ฅผ ๊ฒ์ํ์ธ์.
์ด ๊ธฐ๋ฅ์ด ์์ผ๋ก ์ด๋ป๊ฒ ๋ณด์ผ์ง์ ๋ํ ๋ค๋ฅธ ์ถ์ ๋ฌธ์ ๋ ๋์์ธ ๋ฌธ์๊ฐ ์์ต๋๊น? ๊ตฌํ์ ๋๊ฑฐ๋ v7์ ์ ํ์ด ๊ฐ๋ฅํ ํ ์ํํ๊ฒ ์งํ๋ ์ ์๋๋ก ์ค๋นํ ์ ์์ต๋๋ค.
์๋
ํ์ธ์, ์ ๋ ํ์ฌ Angular 5๋ฅผ ์คํ ์ค์ด๋ฉฐ ํ๋ก์ ํธ์ ๋ค์ค ์ธ์ด๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
๋๋ ์ง๊ธ ๊ฑฐ์ ์ฐ์ํ๊ฒ ์๋ํ๋ ์๋ฃจ์
์ ์ถ๊ฐํ์ต๋๋ค. https://github.com/angular/angular/issues/24549.
์ด์์ ์ผ๋ก๋ ๊ตญ๊ฐ ์ค๋ํผ ์๋น์ค(ํธ์คํธ ์ด๋ฆ ๋งต ์กฐํ ๊ธฐ๋ฐ)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ธ์ด ํ์ผ์ ์ง์ฐ ๋ก๋ํ๊ณ ์ถ์ต๋๋ค.
๊ทธ๊ฒ์ด Angular 6์์ ๊ฐ๋ฅํ๋ค๋ฉด ๊ทธ๊ฒ์ ์ข์ ๊ฒ์
๋๋ค.
@mattiLeBlanc ๊ตฌ์ฑ ์์ ๋๋ ์๋น์ค์ ๋ฉ์์ง์ ๊ฐ์ ๋์ ๋ฉ์์ง๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํฉ๋๊น?
@zverbeta Angular Core ๋๋ ์ด ํ ๋ก ์ ์ปจํ ์คํธ๋ฅผ ์์ ํ ์ดํดํ์ง ๋ชปํ ์ ์ ๋ํด ์ํดํด ์ฃผ์ญ์์ค. ๋๋ ์ด๋ณด์๋ฅผ ์ํด ๋ด ์ปจํ ์คํธ์์๋ง ์ ๊ทผ ํ ์ ์์ต๋๋ค.
๊ทํ์ ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ผ๋ก, ์ ๋ ์ฐ๋ฆฌ๊ฐ URL ๋๋ ์ธ์ด ์ฟผ๋ฆฌ ๋งค๊ฐ๋ณ์์์ ์ถ๋ก ํ ์ ์๋ ๋ก์ผ์ผ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฉ์ง ๋ฐฉ์์ผ๋ก ๋ฒ์ญ ํ์ผ(xlf)์ ์ง์ฐ ๋ก๋ํ๋ ๋ฐ๋ง ๊ด์ฌ์ด ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. (์ ๋ ํ์ฌ URL ๋งต์ ์ฌ์ฉํ์ฌ ๋ก์ผ์ผ์ด ๋ฌด์์ธ์ง ๊ฒฐ์ ํฉ๋๋ค.)
๊ตฌ์ฑ ์์ ๋๋ ์๋น์ค์ ๋ฉ์์ง๋ i18n์ผ๋ก ๋งํฌ์
์ ํ๊ทธ๋ฅผ ์ง์ ํ๋ ๊ฒ์ฒ๋ผ ํ๊ทธ๊ฐ ์ง์ ๋์ง ์์ต๋๋ค. ์ ๋ Wordpress ๋ฐ PHP์ฉ i18n์ ๋ํ ์ฝ๊ฐ์ ๊ฒฝํ์ด ์์ต๋๋ค. ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ ์ฌ๋ฐ๋ฅธ ๋ฒ์ญ์ ์ป๊ธฐ ์ํด __( 'text' to translate, 'text domain' )
์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค. ์ด __()
๋ ๋ฉ์์ง ํ์ผ์ ์์ฑํ๋ CLI ๋ช
๋ น์ผ๋ก ์ค์บํ ์๋ ์์ต๋๋ค.
์ด๊ฒ์ ๋น์ ์ด ์ธ๊ธํ๋ ๋ฌธ์ ์ค ํ๋์ ๋๊น?
์๋ฅผ ๋ค์ด ์ด ๋งํฌ์ ๋ธ๋ก์์ ๋ด๊ฐ ์์์ฐจ๋ฆฐ ํ ๊ฐ์ง๋ (๊ฒ์ผ๋ฅธ ์ํ๋ก ๊ฐ ํ์ ์์์ i18n์ ์ถ๊ฐํ๊ณ ์ถ์ง ์์๊ธฐ ๋๋ฌธ์):
<div class="eligibility-banner" i18n="@@eligbilityBanner" fxLayout="column" fxLayout.gt-xs="row" fxLayoutAlign.gt-xs="center center" fxLayoutAlign="center start">
<div class="requirement-text" fxFlex="20">To be eligible, you:</div>
<div fxLayout="column" fxFlex="80" fxLayout.gt-xs="row" fxLayoutAlign="center start">
<div fxLayout="row" fxLayoutAlign="center center" class="requirement" fxFlex="33">
<pro-svg icon="icon-check-circle" className="icon-check" width="44" height="44"></pro-svg>
<div class="text">own an Australian business (with a valid ABN/ACN)</div>
</div>
<div fxLayout="row" fxLayoutAlign="center center" class="requirement" fxFlex="33">
<pro-svg icon="icon-check-circle" className="icon-check" width="44" height="44"></pro-svg>
<div class="text">are over 18 years old</div>
</div>
<div fxLayout="row" fxLayoutAlign="center center" class="requirement" fxFlex="33">
<pro-svg icon="icon-check-circle" className="icon-check" width="44" height="44"></pro-svg>
<div class="text">are an Australian Citizen or Permanent Resident</div>
</div>
</div>
</div>
๊ทธ๊ฒ์ ์ ์ฒด div ๋ธ๋ก์ ๋ด message.xlf์ ๋ณต์ฌํฉ๋๋ค.
๊ทธ๊ฒ์ ๋ง์ ๋งํฌ์
์ค์ผ์
๋๋ค. (๋ฌผ๋ก ํ
์คํธ๋ฅผ ํฌํจํ๋ ๊ฐ ํ๊ทธ์ i18n์ ์ฌ์ฉํ ์ ์์ต๋๋ค.)
์ด ์์์ _e()
๋ช
๋ น์ ์ฌ์ฉํ๋ฉด ๊ฝค ์ ์๋ํ ๊ฒ์
๋๋ค. echo ๋ช
๋ น์ผ๋ก ํ
์คํธ๋ฅผ ๋ํํ๋ฉด ๋ํ๋ ๋ชจ๋ ํ
์คํธ๊ฐ ์์ง๋ฉ๋๋ค. xml์์ ๋ชจ๋ ๋งํฌ์
์ฌ๋ณธ์ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
ํด๋น ๋ฌธ์์ด์ ๋์ ์ธ ๊ฒ์ ์ถ๊ฐํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ฌธ์์ด์ ์๋ฆฌ ํ์์๋ฅผ ์ฌ์ฉํ์ฌ ํ์ดํํ ์ ์์ต๋๋ค( sprintf
์์ ํ๋ ๊ฒ์ฒ๋ผ).
<p>{{ __( 'I would like a nice %s, please', fruit ) }}</p>
์ฌ๊ธฐ์ fruit
๋ ๊ฐ์ด __( 'apple')
๋๋ __( 'pear)
์ธ ๋ณ์์
๋๋ค.
3๊ฐ์ ํ
์คํธ๊ฐ XML๋ก ๋์ด ๋ณ๋๋ก ๋ฒ์ญ๋ ์ ์์ต๋๋ค.
๊ทธ๊ฒ ๋ฌด์จ ์์ฉ์ด ์๊ฒ ์ต๋๊น? i18n ์์ฑ์ ์ถ๊ฐํ๋ ๊ฒ๊ณผ ๋งค์ฐ ์ ์ฌํฉ๋๋ค. ๋ค์ ์ฝ๊ณ ๋์ ๊นจ๋ฌ์์ต๋๋ค. :)
๋ง์ง๋ง์ผ๋ก ๋ช ๊ฐ์ง ํ์์ ์ดํด๋ด
๋๋ค. XLIFF 2
๋ 1.2๋ณด๋ค ์ฝ๊ฐ ๊นจ๋ํ๊ณ ๊ฝค ๋ฉ์ง๊ฒ ๋ณด์
๋๋ค. XMB๋ 1995๋
์ ์คํ์ผ์ด ์ง์ ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ํผ๋์ค๋ฝ๊ณ ๋์ฐํ ๋ฌธ์์ฒ๋ผ ๋ณด์
๋๋ค.
XLIFF 2๋ฅผ ์ฌ์ฉํ ๋ TARGET ํ
์คํธ๊ฐ ๋ฒ์ 1.2์์์ ๊ฐ์ด ๋ ๋๋ง๋์ง ์๋๋ค๋ ๊ฒ์ ์์์ต๋๋ค.
.pot ๋ฐ .mo ํ์ผ์ ๋ณด์ จ์ต๋๊น? ๋งค์ฐ ๊ฐ๋จํ ํ์์ด๋ฉฐ POEdit ๋๊ตฌ๋ก ๋ฒ์ญ๋ ๊ฒฝ์ฐ์๋ ์ฌ์ฉ๋ฉ๋๋ค.
ํ ๊ธ ๋ฒํผ์ ์ฌ์ฉํ์ฌ ๋ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ด์ ์คํ์ธ์ด๋ก ๋ณํํด์ผ ํฉ๋๋ค. ๋ชจ๋ ๋ณ๊ฒฝ์ ์ํํ๊ณ ํ์ผ์ ๋ณ๋๋ก ์์ ํ์ต๋๋ค. .dist/en ๋ฐ dist/es ์๋์ ๋ ๊ฐ์ ๋น๋๋ฅผ ๋ง๋ค์์ต๋๋ค. ๋ฐฐํฌ๋ฅผ ์ํด ๋ฌด์์ ํด์ผ ํ๊ณ ๋ ๋น๋ ๊ฐ์ ์ ํํ๋ ๋ฐฉ๋ฒ์ ์๋ ค์ค ์ ์์ต๋๊น?
ํ ๊ธ ๋ฒํผ์ ํด๋ฆญํ ๋ ํด์ผ ํ ์ผ
@shobhit12345 https://stackoverflow.com ์ ์ง์ ์์ฒญ์ ๊ฒ์ํ์ธ์.
@zverbeta #24549 ์ ๊ฒ์ํ ์๋ฃจ์
์ --prod
๋ก ๋น๋ํ ๋ ์๋ํ์ง ์์ต๋๋ค. ์๋ง๋ ์ฌ์ฉํ ์ ์๋ require
๋ฅผ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด๋ค ๊ฒ์ด ๋ถ๋ช
ํฉ๋๊น?
--prod ํ๋๊ทธ๊ฐ ์์ผ๋ฉด ์นํฉ ๊ด๋ จ ์ฝ๋๊ฐ ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์ ์๋ฃจ์
์ด ์๋ํฉ๋๊น?
@mattiLeBlanc ์ด lib https://github.com/ngx-translate/i18n-polyfill ์ ์ฐพ์๊ณ ๋์ ํ ์คํธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
์๋ ํ์ธ์, i 18 n ์ ์ฌ์ฉํ์ฌ ๋์ ๊ฐ(๋ณด๊ฐ)์ ์ด๋ป๊ฒ ๋ฒ์ญํ ์ ์์ต๋๊น?
<source>This amount is for <x id="INTERPOLATION" equiv-text="{{policyName}}"/> policy #<x id="INTERPOLATION_1" equiv-text="{{policyGroupId}}"/></source>
<target>Esta cantidad es para <x id="INTERPOLATION" equiv-text="{{**policyName**}}"/> polรญtica #<x id="INTERPOLATION_1" equiv-text="{{policyGroupId}}"/></target>
์ด๋ด! ์งํํ ์์ ์ ์ถ์ ๋ฐ/๋๋ ์ง์ํ ์ ์๋ ๊ณณ์ด ์์ต๋๊น? ( ์์ ์ค์ธ ํ๊ทธ ํ๊ทธ)
๋ฐํ์ i18n ๋ฒ ํ ๋ฒ์ ์ถ์ ์ผ์ ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
@marcelnem ์ฃผ์์ ์ฐพ์ ์ ์์ง๋ง iirc ocombe๋ ๋ฐํ์ i18n์ด ivy์ฉ์ผ๋ก ๋ณํฉ๋์ด ivy ํ๋๊ทธ๊ฐ ์๋ v7 ๋ฒ ํ์์ ํ ์คํธํ ์ ์๋ค๊ณ ์ธ๊ธํ์ต๋๋ค.
๋ฐํ์ ๋ถ๋ถ์ ์๋ฃ๋์์ง๋ง ์ปดํ์ผ๋ฌ ๋ถ๋ถ์ ์๋ฃ๋์ง ์์์ผ๋ฏ๋ก ์์ง ivy๋ก ํ ์คํธํ ์ ์์ต๋๋ค.
์๋
ํ์ธ์, ์ ๋ Angular 6 i18n์ผ๋ก ์์
ํ๊ณ ์์ต๋๋ค. ๋๋ ์๋ฆฌ์ฑ
์ ๋ฐ๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ ๋ค๊ตญ์ด๋ก ์์
ํ๊ณ ์์ต๋๋ค.
https://v2.angular.io/docs/ts/latest/cookbook/i18n.html#!
ํ์ฌ ๊ตฌํ์ AOT๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฏ๋ก messages.xlf ํ์ผ๊ณผ messages.pt.xlf๋ฅผ ์์ฑํ์ต๋๋ค. ๋ด๊ฐ ์คํํ๋ฉด ๋ชจ๋ ๊ฒ์ด ์ ์๋ํฉ๋๋ค.
ng ์๋ธ --๊ตฌ์ฑ=pt
์์๋๋ก ํ ์คํธ๊ฐ ๋ฒ์ญ๋ฉ๋๋ค. ํ์ง๋ง ์๋ ๋ฐฉ์์ ๋ญ๊ฐ ๋งค์ฐ ์๋ชป๋ ๋ถ๋ถ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ ์๋ง๋ ๋ญ๊ฐ๋ฅผ ๋์น๊ณ ์์ ๊ฒ์ ๋๋ค. ๋ด๊ฐ ์ดํดํ๋ ํ, ๋ฒ์ญํ ์ ๋ฌธ์์ด์ ์ถ๊ฐํ๊ณ ์ด๋ฅผ i18n ์์ฑ์ผ๋ก ํ์ํ ๋๋ง๋ค "ng xi18n"์ ์คํํ๋ messages.xlf ํ์ผ์ ๋ค์ ์์ฑํ ๋ค์ messages.pt.xlf๋ฅผ ์๋์ผ๋ก ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค. xlf ํ์ผ์ ์์ค๊ฐ ์๋ ์ค ๋ฒํธ๋ ๋ณด์ ํ๊ณ ์์ผ๋ฏ๋ก ํ์ ๋ณ๊ฒฝํ๋ฉด ํ์ผ์ ๋ค์ ์์ฑํ๊ณ ์๋์ผ๋ก pt ํ์ผ์ ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค.
<context context-type="linenumber">16</context>
๊ทธ๊ฒ์ ๋๋ํด ๋ณด์ด์ง ์์ต๋๋ค. ๊ณ์ ์๋ํ๋ ค๋ฉด ๋ง์ ์ถ๊ฐ ์์
์ด ํ์ํฉ๋๋ค. ๋ด ๊ฑฑ์ ์ ์ดํดํฉ๋๊น? ๋ด๊ฐ ๋ญ๊ฐ๋ฅผ ๋์น๊ณ ์์ต๋๊น?
Angular 7 i18n์ Ivy๊ฐ ํตํฉ๋์ด ๋๊ท๋ชจ ์
๋ฐ์ดํธ๊ฐ ์์ ์์ ์ธ ๊ฒ์ผ๋ก ์๊ณ ์์ต๋๋ค. ๊ธฐ๋ค๋ ค์ผ ํ๋์?
์น์ ํ๋,
ํ๋น์ค
ps. ์ฃผ์ ์์ ๋ฒ์ด๋์ง ์๊ธฐ๋ฅผ ์ง์ฌ์ผ๋ก ๋ฐ๋๋๋ค๋ง, ๊ทธ๋ ๋ค๊ณ ๋๋ผ์ ๋ค๋ฉด ์ต์ํ ๋ฐฉํฅ์ ์ ์ํด ์ฃผ์ญ์์ค. ์๋ฅผ ๋ค์ด ์ด๊ฒ์ ์ด๋์ ๋ฌผ์ด์ผํฉ๋๊น? ๋๋ ๋ด ์์ฌ์ ๋ตํ ์ ์๋ ๋งํฌ๊ฐ ์๋ ๊ฒฝ์ฐ.
@fabiopcarvalho ๋ด๊ฐ ๊นจ๋ฌ์ ํ ๊ฐ์ง๋ HTML ๋ ์ด์์์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ ์ฝ๊ฒ ์ถ์ ํ ์ ์๋๋ก ๋ชจ๋ ๋จ์ผ ๋ฒ์ญ์ ๋ํด ์ฌ์ฉ์ ์ ์ ID๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํ๋ช ํ๋ค๋ ๊ฒ์ ๋๋ค.
ํ์ง๋ง ์, ๋ฒ์ญ ํ์ผ์ ์ ๊ธฐ์ ์ผ๋ก ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค.
@fabiopcarvalho ๋ฒ์ญ ๋ณํฉ์ ๋๊ธฐ ์ํด xliffmerge ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์๋ฒฝํฉ๋๋ค. ์ ๋ ๊ทธ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๊ณ ํ๋ฅญํ๊ฒ ์๋ํ์ต๋๋ค. ๋๋ ๋ํ id๋ฅผ ์ฌ์ฉํ๊ณ
๊ทธ๋ค์ ๋์์ด๋ฉ๋๋ค.
๋ต์ฅ์ ๋ณด๋ด ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค !!
2018๋ 8์ 30์ผ ๋ชฉ์์ผ์ Pedro Romero [email protected] ์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
@fabiopcarvalho https://github.com/fabiopcarvalho xliffmerge๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ณํฉ์ ๋์์ค https://github.com/martinroob/ngx-i18nsupport
๋ฒ์ญ์โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/angular/angular/issues/16477#issuecomment-417407822 ,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AWOWQ6vpjOb0Ntgpv7TUngRrBBsUIkVjks5uWCV7gaJpZM4NOSBk
.
์์ฑ aria-label์ด ์ ๊ทผ์ฑ์์ ๋ง์ด ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ์์ฑ์์ ICU ๋ฉ์์ง๋ฅผ ํ์ฉํ๋ ๊ฒ์ ์ ๊ทผ์ฑ์ ์ค์ํฉ๋๋ค. ํ์ ์กฐ์น์ ๋ฌธ์ ๊ฐ ์์ต๋๊น?
๋ฌธ์ ๊ฐ ์๋ ๊ฒ ๊ฐ์๋ฐ ์ด์ด์ฃผ์ค ์ ์๋์? ์ง๊ธ ์์ด๋น์ฉ ICU ํํ ์์ ์ค์ด๋ผ TODO ์ถ๊ฐํ๋๋ฐ ๊ธฐ๋ฅ์์ฒญ์ด ๋ ๋์๋ฏ
์์ ๊ฐ์ฌํฉ๋๋ค(Github ๊ฒ์์ด ์ ๋ง ์ข์ง ์์ต๋๋ค!)!
์๋ก์ด ๋ฒ์ ์ i18n์ ์ฌ์ฉํ์ฌ HTTP๋ฅผ ํตํด ์ธ๋ถ ์์ค์์ ๋ฒ์ญ ํ์ผ์ ์ง์ฐ ๋ก๋ํ ์ ์์ต๋๊น?
@ocombe ๋ ๋ฐํ์ i18n(AOT๊ฐ ์๋ ๋ชจ๋ ๋ก์ผ์ผ์ ๋ํ ํ๋์ ๋ฒ๋ค)์์ ์์ ํ๊ณ ์๋ค๊ณ ๋งํ์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ๊ธฐ๋ค๋ฆฐ ์ง 1๋ ์ด ๋์์ต๋๋ค. ์ธ์ ๊ทธ ๊ธฐ๋ฅ์ด Angular 7 ๋ฆด๋ฆฌ์ค์ ์ ๊ณต๋ ๊ฒ์ด๋ผ๊ณ ๊ธฐ๋ํ ์ ์์ต๋๊น?
@Sef1995 ์ฐ๋ฆฌ๊ฐ ํ์ฑํํ๊ณ ์ถ์ ๊ฒ ์ค ํ๋์
๋๋ค.
@AhmadShahid ๊ทธ๊ฒ์ v7๊ณผ ๋
๋ฆฝ์ ์ผ๋ก ์ถ์๋ ์์ด๋น๋ฅผ ํ์๋ก ํ ๊ฒ์ด๊ณ ์์ด๋น๋ v7์ ์ถ์๋ฅผ ์ํด ์ค๋น๋์ง ์์ ๊ฒ์
๋๋ค. ivy์ ์ผ๋ถ๋ ํ๋๊ทธ ๋ค์ ์ด๋ฏธ v6์ ์์ง๋ง ์์ ํ ๊ธฐ๋ฅ์ด ์๋๋ฉฐ ์ค์ ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉํด์๋ ์๋ฉ๋๋ค. ์์ด๋น์ ์ถ์์ผ์ ์์ง ์์ต๋๋ค.
@ocombe ๊ฐ๋จํ ์ง๋ฌธ์ ๋๋ค. ๋ค๋ฅธ ๋น๋(๊ฐ ์ธ์ด์ ๋ํด ํ๋์ฉ)๊ฐ ํ์ํ ์ค๋(angular6) ํ์ฌ i18n์ ๊ตฌํํ๋ฉด ivy๊ฐ ๋์ค๊ณ i18n ๋ฐํ์์ด ๋์ฌ ๋ ๋ ธ๋ ฅ์ด ์์ค๋ฉ๋๊น? i18n์ด ์ง๊ธ ๊ตฌํ๋๋ ๋ฐฉ์์ ์์ผ๋ก ๋์ฌ ๊ฒ๊ณผ ๋ค๋ฅผ ๊ฒ์ ๋๋ค. ๋ช ๊ฐ์ง ์คํ๋ฆฐํธ๋ฅผ ๋ฏธ๋ฆฌ ๊ณํํ๊ณ ์์ ์ ์ฐ์ ์์๋ฅผ ์ง์ ํ๋ ค๊ณ ํฉ๋๋ค. ๊ฐ์ฌ ํด์
ํผํ ์๋ง ์๋ค๋ฉด ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ง๋ค๊ณ ์ถ์ง ์์ต๋๋ค. ์ถ์ถ๋ ๋ฒ์ญ์ id๋ ์ค๋ซ๋์ ๊ฐ์ง๊ณ ์๋ ๋ฒ๊ทธ๋ฅผ ์์ ํจ์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋ ์ ์์ง๋ง ๋ง์ด๊ทธ๋ ์ด์ ๋๊ตฌ๋ฅผ ์ ๊ณตํ ๊ฒ์ ๋๋ค. 100% ํธํ๋ ๊ฒ์ด๋ผ๊ณ ํ์ ํ ์๋ ์์ง๋ง ์ํ๋ ๊ฒฝ์ฐ ์ฌ์ฉํ ์ ์๋ ์๋ก์ด ์ต์ ๊ณผ ํจ๊ป ๋๋ถ๋ถ์ ๊ธฐ๋ฅ์ด ๋์ผํ๊ฒ ์๋ํ ๊ฒ์ผ๋ก ๊ธฐ๋ํฉ๋๋ค.
@ocombe ๊ฐ๋จํ ์ง๋ฌธ์ ๋๋ค. ๋ค๋ฅธ ๋น๋(๊ฐ ์ธ์ด์ ๋ํด ํ๋์ฉ)๊ฐ ํ์ํ ์ค๋(angular6) ํ์ฌ i18n์ ๊ตฌํํ๋ฉด ivy๊ฐ ๋์ค๊ณ i18n ๋ฐํ์์ด ๋์ฌ ๋ ๋ ธ๋ ฅ์ด ์์ค๋ฉ๋๊น? i18n์ด ์ง๊ธ ๊ตฌํ๋๋ ๋ฐฉ์์ ์์ผ๋ก ๋์ฌ ๊ฒ๊ณผ ๋ค๋ฅผ ๊ฒ์ ๋๋ค. ๋ช ๊ฐ์ง ์คํ๋ฆฐํธ๋ฅผ ๋ฏธ๋ฆฌ ๊ณํํ๊ณ ์์ ์ ์ฐ์ ์์๋ฅผ ์ง์ ํ๋ ค๊ณ ํฉ๋๋ค. ๊ฐ์ฌ ํด์
์๋
ํ์ธ์, webpack require๋ฅผ ์ฌ์ฉํ์ฌ ํ๋์ ๋น๋๋ก ํ์ผ์ ๋์ ์ผ๋ก(์์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก) ๋ก๋ํ ์ ์์ต๋๋ค.
์์ ๋ ์ฌ๊ธฐ์์ ์ฐพ์ ์ ์์ต๋๋ค: https://github.com/angular/angular/issues/24549#issuecomment -402013622
AOT=true๋ webpack ํญ๋ชฉ์ ์ ๊ฑฐํ๋ฏ๋ก --prod --aot=false๋ก ๋น๋ํด์ผ ํฉ๋๋ค.
@ocombe ์๋ ํ์ธ์,
A7 ๋ฆด๋ฆฌ์ค ํ๋ณด๊ฐ ๋์์ต๋๋ค. ์ฝ์๋๋ก ๋ฐํ์ ๋ฒ์ญ์ ํ
์คํธํ ๊น์?. Runtime i18n (one bundle for all locales with AOT)
. ์ด๊ฒ์ ์ด๋ป๊ฒ ํ
์คํธ ํ ์ ์์ต๋๊น? ๋์์ฃผ์ธ์
๊ฐ์ฌ ํด์
v7์ด ์ด๋ฏธ ์ถ์๋์์ง๋ง @sheikalthaf ์ ์ง๋ฌธ์ ๋ ๋ฒ์งธ๋ก ์ง๋ฌธํฉ๋๋ค.
@sheikalthaf @Shuyinsama ์์ ๋ช ๊ฐ์ง ์๊ฒฌ ๊ณผ ์ฒซ ๋ฒ์งธ ๋ฉ์์ง์์ ์ค๋ช
ํ๋ฏ์ด:
๋ฐํ์ i18n์๋ v7๊ณผ ๋ณ๋๋ก ๋ฆด๋ฆฌ์ค๋ ivy๊ฐ ํ์ํฉ๋๋ค. ivy์ ์ผ๋ถ๋ ํ๋๊ทธ ๋ค์ ์ด๋ฏธ v7์ ์์ง๋ง ์์ ํ ๊ธฐ๋ฅ์ด ์๋๋ฉฐ ์ค์ ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉํด์๋ ์๋ฉ๋๋ค. ์์ด๋น์ ์ถ์์ผ์ ์์ง ์์ต๋๋ค.
@ocombe : ๋ถ๋ชจ์์ ์์ ๊ตฌ์ฑ ์์๋ก ๋์ i18n ํค๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น?
ํ์ ๊ตฌ์ฑ์์:
<div i18n="{{labelTextKey}}">{{labelText}}</div>
์์ ๊ตฌ์ฑ์์:
<app-input [labelText]="'Second name'"
[labelTextKey]="'@<strong i="13">@LabelSecondName</strong>'" ..></app-input>
์ ๋ฌํ ์ ์์ง๋ง ๋น๋ ์ i18n ๋ณํ์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋ณ์๋ ์ฌ์ ํ ๋น์ด ์๋ ์ํ์ ๋๋ค. ๋ฐ๋ผ์ ๋ฒ์ญ์ด ๋ฐ์ํ์ง ์์ต๋๋ค.
๊ทธ๋ฌํ ๊ฒฝ์ฐ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
@๋ฐฅ์นด์ค๋น
ํ์ ๊ตฌ์ฑ ์์์๋ i18n ํ๊ทธ๊ฐ ํ์ํ์ง ์์ผ๋ฉฐ ๋ค์๊ณผ ๊ฐ์ด ์์ ๊ตฌ์ฑ ์์์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
<app-input i18n-labelText="@@LabelSecondName" labelText="Second name"></app-input>
@cjsase : ์ ์๋ํฉ๋๋ค. ๋ง์ ๊ฐ์ฌํฉ๋๋ค! ๊ฑฐ์ 2์ผ๋์ ๊ณ ์ํ์ จ์ต๋๋ค.
์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก : https://github.com/angular/angular/issues/21706#issuecomment -430435254
์๋ชป๋ ์ ๋ณด์ ๋๋ค. ํต์ฌ ํ์ IVy๊ฐ 2019๋ ์ ์ถ์๋ ๊ฒ์ด๋ผ๊ณ ๋งํ ์ ์ด ์์ต๋๋ค. ๋์ ํต์ฌ ํ์ ๋ค์๊ณผ ๊ฐ์ด ๋งํ์ต๋๋ค.
ํ ์คํธ ๋ฐ ๊ฒ์ฆ์ ๊ฑฐ์น ๋ชจ๋ ๋ถ ๋ฒ์ ์ผ๋ก ์ถ์๋์ด์ผ ํฉ๋๋ค.
ivy๊ฐ ํ์ฑํ๋ ์ต๊ทค๋ฌ 7.1.0-beta.0 ์ฑ์ด ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ํ์ด์ง ์๋ก ๊ณ ์นจ ์์ด ์ ๋ฉด์์ ๋ฐํ๋ ๋์ ์ธ์ด ๋ณ๊ฒฝ ์ค์ ์ ๊ฐ์ง ์ ์์ต๋๊น?
๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ? ์ด ๋ฌธ์: https://github.com/angular/angular/blob/master/aio/content/guide/i18n.md
๊ทธ๋ฆฌ๊ณ ์ด ๋ฌธ์: https://angular.io/guide/i18n
์ด๊ฑฐ ์์จ?
ํ๋/๋ฏธ๋์ i18n ๊ฐ๋ ์ฑ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ด๋์์ ๋ฐฐ์ธ ์ ์์ต๋๊น?
@tatsujb ์๋์, ๋ถ๊ฐ๋ฅํ๋ฉฐ, ivy & runtime i18n์ผ๋ก๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ง๊ธ์ ์ธ์ด๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด Angular ์ฑ์ ๋ค์ ๋ก๋ํด์ผ ํฉ๋๋ค.
์์์ง ๋ง ๋ฌธ์๋ 4 ๋ง์ด๋์ค์ ๊ฐ์ ๊ฐ๋์ ํค๋ฉ๋ผ ๋ฒ์ ์ ์ ์ฉ๋ฉ๋๋ค.
๋๋ ๊ทธ๋ค์ด ๋ด ์ค์ ์ ์ ์ฉ๋๋ค๊ณ ์๊ฐํ์ง ์์ผ๋ฉฐ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ ํํ๊ฒ ๋ค๋ฃจ์ง ์์ต๋๋ค.
๋ฐฑ์๋์์ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ ๊ฒฝ์ฐ์๋ ๋ด ๊ฐ๋๊ฐ Java-spring ๋ฐฑ์๋์ ์ํด ํ๋ก๋์ ๋ชจ๋์์ ์ ๊ณต๋ฉ๋๋ค. ์ธ์ด๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ํด ๊น๋ฐ ์์ด์ฝ์ ๋๋ฅด๋ฉด ์ด๋ค ์ผ์ด ์ผ์ด๋ ๊น์?
์ฌ์ฉ์๋ฅผ www.yourdomain.com/cn/ ์ผ๋ก ์๋ดํ๋ฉด ์ ์ฒด Angular ์ฑ์ด ์ค๊ตญ์ด๋ก ์ปดํ์ผ๋ฉ๋๋ค. ์ง์ํ๋ ค๋ ๋ชจ๋ ์ธ์ด์ ๋ํด ์ปดํ์ผ๋ ์ ์ฒด Angular ์ฑ์ผ๋ก ๋๋ฉ๋๋ค.
@ocombe @santhony7 ์ด๊ฑด ์ด๋์: https://github.com/actra-development-oss/ng-i18n-aot-loader ?
๋ด๊ฐ ์ด๊ฒ์ ์๋ ํ ์ ์์ต๋๊น?
7.1.0-beta.0๊ณผ ํธํ์ด ์ ๋์ง ์๊ฑฐ๋ ํธํ์ด ์ ๋๋์?
@ocombe @santhony7 ์ด๊ฑด ์ด๋์: https://github.com/actra-development-oss/ng-i18n-aot-loader ?
๋ด๊ฐ ์ด๊ฒ์ ์๋ ํ ์ ์์ต๋๊น?
7.1.0-beta.0๊ณผ ํธํ์ด ์ ๋์ง ์๊ฑฐ๋ ํธํ์ด ์ ๋๋์?
๋์ ngx-translate๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋๋ ๋ ๋ค ์ฌ์ฉํ๊ณ ngx-translate๋ ์ ์ง ๊ด๋ฆฌ๊ฐ ํจ์ฌ ์ฝ์ต๋๋ค.
@digismack ์ด ๋์ ๋ ๋ค๋ฅธ ์ฐจ์ด์ ์ ์ฝ๊ฐ ๋ฌด์์ด ngx-translate๊ฐ ๋ชจ๋ ๊ณต์ angular-i18n ํญ๋ชฉ์ ์ญ์ ํ๊ณ ์ ํ ์ฌ์ฉํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๊ฒ์ ์์ฒด์ ์ผ๋ก ๋ ๋ฆฝ์ ์ธ ํ๋ก์ด๋ฉฐ json ํ์ผ์ ๋ฒ์ญ ์์ค์ ๋ํด ํจ์ฌ ๋ ๊ตฌ์ฒด์ ์ ๋๋ค.
๋ํ ๋ ๊ฐ์ง ๋ฐ๋ชจ ์ค์์ ngx-translate๊ฐ ํจ์ฌ ๋๋ฆฐ ๊ฒ ๊ฐ์ต๋๋ค. ์ ์ง ๊ด๋ฆฌ๊ฐ ๋ ์ฝ๋ค๋ ๊ฒ์ ๋ฌด์์ ์๋ฏธํฉ๋๊น?
@tatsujb th ng-i18n-aot-loader ๊ฐ๋ฐ์๋ก์ ์ ์ด๋ ๋ก๋๋ฅผ ํตํฉํ๋ ๊ฒ์ด ๊ตฌํํ๊ธฐ ๋ค์ ์ด๋ ต๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
๋ค๋ฅธ ๋ชจ๋ ๊ฒ์ ์๋ ๊ฐ์ง i18n ํจ๋ฌ๋ค์์ ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์ ์ผ์ดํฌ ์กฐ๊ฐ์
๋๋ค.
ํ๊ทธ ๊ตฌ์กฐ ๋ฑ์ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์๋ ํ v7์์ ์๋ํด์ผ ํฉ๋๋ค.
ngx-translate๋ฅผ ๊ตฌํํ๋ ค๊ณ ํ๋๋ฐ ๋ฒ์ญ ๊ฐ๋ฅํ ์ฅ์๋ก ๋ฒ์ญ ๊ฐ๋ฅํ ์ฅ์๋ก ์ด๋ํด์ผํฉ๋๋ค. ์ด๋ฏธ ๋ฏธ๋ฆฌ ๊ณํํ๋ i18n ํ๊ทธ๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ์ฌ์ค์ด ์ ์๊ฒ๋ ์ฝ๊ฐ ์ฐ์ค๊ฝ์ค๋ฝ์ต๋๋ค.
๋๋ฅผ ๋ฏฟ๋ ๊ฒ์ด ์๋ชป๋ ์ ํ์ด๋ผ๊ณ ์๊ฐํ๊ธฐ ์์ํ์ด, @digismack
@tatsujb 58๋ช ์ด ์ด ์ด์๋ฅผ ํ๋ก์ฐํ๊ณ ์์ต๋๋ค. ๊ฐ์ธ์ ์ผ๋ก i18n์ ๊ดํ Angular ํ์ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐ๋ฅด๊ณ ์์ต๋๋ค. OP์ ๋ด์ฉ๊ณผ ๊ด๋ จ์ด ์๋ ํ ์ก๋ด์ ์ค๋จํด ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
์๋ก์ด i18n ๊ธฐ๋ฅ์ Angular์ ์ถ๊ฐํ๊ณ ์ถ๋ค๋ฉด ์ฃผ์ ํ์ง ๋ง๊ณ ์๋์ ๋ฌธ์ํ์ธ์. ๊ฐ๋ฅํ์ง ๊ทธ๋ฆฌ๊ณ ๋ฌธ์ ๋ฅผ ์ ๊ธฐํด์ผ ํ๋์ง ์๋ ค ๋๋ฆฌ๊ฒ ์ต๋๋ค.
๋ฒ๊ทธ๊ฐ ์๋ ๊ฒฝ์ฐ ๋ฌธ์ ๋ฅผ ์ฝ๋๋ค(์ฌ๊ธฐ์์ ์ด์ ๋ํด ๋ ผ์ํ ํ์ ์์).
๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ StackOverflow์ ์ง๋ฌธํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ฌธ์ ๋ฅผ ์์ฑ/๋๊ธํ๋ ๊ฒ์ ์ ์ต๊ด์ด ์๋์ง๋ง... ๊ทธ๋ ๊ฒ ํ๊ฒ ์ต๋๋ค!
๊ณ ๋ คํ๋ฉด :
@gtbuchanan ๊ณผ CO๋ Aํ ์
๋๋ค.
@tatsujb ์ธ ๋ถํ/๋๊ธ/๊ธฐ๋ํ๋ ์ฌ๋์ Bํ ์
๋๋ค.
Aํ ๋ ๋๊ฐ์ ๋ง๋ง ๋ฐ๋ณตํด๋ ์ง์น์ง ์์ผ์ธ์?!?! ๋์๊ฒ ๋น์ ์ Bํ๋ณด๋ค ๋ ์ง์ฆ๋๋ค.
Angular Type B์ i18n ๋๋ฝ๋ ๊ธฐ๋ฅ์ผ๋ก ์ธํด ๋ฌธ์ ๋ฅผ "๊ตฌ๋ "ํ๋ ๊ฒ๋ณด๋ค ์ฌ๋๋ค์ด ๋ ์ข์ ํฉ๋๋ค(์น๊ตฌ๋ฅผ ์ฌ๊ท๊ธฐ ์ํ ๊ฒ์ด๋ผ๋ฉด Facebook์์ ์ข์์๋ฅผ ๋๋ฌ ๋ณด์ธ์. , ๋น์ ์ ๋ง์ ๋ฐ๊พธ๊ฑฐ๋ ๊ทธ๋ ๊ฒ ๋งํ๋ ๊ฒ์ ๋ฐ๋ช ํ์ง ์์ ๊ฒ์ ๋๋ค!...)
์ ํ A๋ ๊ตฌ๋ ์ ์ทจ์ํ๊ฑฐ๋ ์ ๋ฐ์ดํธ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ฑฐ๋ ๋ณ๊ฒฝ ๋ก๊ทธ๋ฅผ ๋น ๋ฅด๊ฒ ํ์ธํ๊ฑฐ๋ ๋ธ๋ก๊ทธ/๋ด์ค๋ฅผ ์ฝ์ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. Angular ํ์ ํฐ ๊ธ๊ผด ARIAL 72pixel๋ก ํ์ํ์ฌ ts+runtime i18n์์ i18n dynamic translate๋ฅผ ์๊ฐํฉ๋๋ค: big feature missing in angular ! ๊ทธ๋ค์ ๊ทธ๊ฒ์ ํฌ๊ฒ ๊ณ ๋ คํ์ง ์์์ผ๋ฏ๋ก ์ค๋๋ ์ฌ๋ฐ๋ฅธ i18n์ด ์์ต๋๋ค. ์ด๊ฒ์ Google ์ ๋์ ์ ๋ต์ด๋ฉฐ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค!
B๋ ์ด ๊ธฐ๋ฅ์ 2๋ ์ ์ ๊ธฐ๋ค๋ฆฝ๋๋ค. https://github.com/angular/angular/issues/9104#issue -159302131 Angular 2.X ์ดํ๋ก ๊ทธ๋ ์ต๋๋ค!
๋ต๋ตํ Bํ์ ์กด์คํ๊ณ ์ ์๋ฅผ ํ์ง ๋ง๋ผ๊ณ ๋งํ๊ณ ์ถ๋ค. ์๋ฌด๋ i18n์ ๋ํด ๋ง์ด ๋ถํํ์ง ์๋๋ค๋ฉด i18n ๊ฐ์ ์ด ์์ผ๋ก ๋ช ๋ ๋์ ๊ณ ๋ ค๋์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด๊ฒ๋ ์คํ ์์ค์ ์ ํฉํฉ๋๋ค! ๋นํ๊ฐ๋ฅผ ๋ถํํ์ญ์์ค! ์ ๋ต์ ๋ฐ๋ ์ ์์ต๋๋ค! ๊ทธ๋์ ์ฌ๋๋ค์ด ๋ถํ์ ํ๊ณ ๊ตฌ๋ ์ ์ทจ์ํ๋๋ก ํ์ญ์์ค. ์ด ํธ์ ๊ฐ์ ํ์ง ์๊ณ ๋ ๊ทํ์ ์ ๋ณด๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
Bํ ๋น์ ์ด ํ ์ ์์ ๋๊น์ง ๋ถํ/๋๊ธ์ ๊ณ์ํ์ญ์์ค! ๊ทธ๊ฒ์ ์ฌ๋๋ค์ ํ์๋ฅผ ์ดํดํ๋ ์ ์ผํ ์ต์ ์ ๋ฐฉ๋ฒ์ ๋๋ค!
์คํธ๋ผ์ดํฌ ์คํธ๋ผ์ดํฌ ใ ใ
@tatsujb ๋ชจ๋ ๊ฒ์ ๊ฐ์ธ ์ทจํฅ์ ๋ฌ๋ ค ์์ต๋๋ค. ng-i18n-aot-loader
๋ฅผ ๋ง์ง๋ง์ผ๋ก ๊ตฌํํ์ ๋ ์๋ํ๋๋ก ํ๋ ค๋ฉด ๊บผ๋ธ ๋น๋๋ฅผ ์คํํ๊ณ webpack ๊ตฌ์ฑ์ ์ฌ์ฉ์ ์ง์ ํด์ผ ํ์ต๋๋ค. ์ด์ฉ๋ฉด ๋ ์ด์ ๊ทธ๋ ์ง ์์ ์๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊บผ๋ธ ๋น๋๋ฅผ ์คํํ๋ฉด Angular CLI ๋๊ตฌ๋ฅผ ๋ ์ด์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ฅ๊ธฐ์ ์ผ๋ก ngx-translate
๋ฅผ ๊ตฌํํ๊ณ ์ฝ๊ฐ ๋ค๋ฅด๊ฒ ์๋ํ๋ค๋ ์ฌ์ค์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ๋ ์ฝ๋ค๋ ๊ฒ์ ์์์ต๋๋ค.
@gtbuchanan ๋๋ ๋น์ ์ ๊ณ ํต์ ๋๋ผ์ง๋ง, ์ด "์๋ค"๋ OP์ ๊ฒ์๋ฌผ์ ์ธ๊ธ๋ ๊ธฐ๋ฅ์ ๋ฒ์์ ์ง์ ์ ์ธ ๊ด๋ จ์ด ์์ต๋๋ค. Runtime i18n (one bundle for all locales with AOT)
์ ๊ธฐ๊ฐ์ด ๊ณ์ ๋ฏธ๋ค์ก๊ธฐ ๋๋ฌธ์ ์ฌ๋๋ค์ ์ฌ์ ํ โโํ์ฌ ์๋ฃจ์
์ ์ฐพ๊ธฐ ์ํด ์ด ์ค๋ ๋๋ฅผ ์ฐพ๊ณ ์์ต๋๋ค.
@ocombe , ์ด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฒ์ญ์ ๊ฐ์ ธ์ฌ ์ ํ๋ก์ ํธ๋ฅผ ์์ํ๋ ค๊ณ ํฉ๋๋ค.
์ฐ๋ฆฌ์ Angular ๋ชจ๋์ ๋๋ฆฌ๊ฒ ๋ก๋๋๋ฉฐ I18N๊ณผ ๊ด๋ จํ์ฌ Angular๊ฐ ์ ๊ณตํ๋ ๊ฒ์ ์ต๋ํ ๊ฐ๊น๊ฒ ์ ์งํ๊ณ ์ถ์ต๋๋ค.
Angular I18N ์ง์์ด ๊ณํ๋๋ก ์ต์ ๋ฆด๋ฆฌ์ค์ ํฌํจ๋์ง ์์๊ธฐ ๋๋ฌธ์ ์ง๊ธ ๋ง ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ ค๋ ์ฐ๋ฆฌ์ ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ ํด์ค ๋ง์์ด ์์ต๋๊น?
์๋ฅผ ๋ค์ด, I18N์ด โโ์ค๋น๋ ๋๊น์ง ์ฐ๋ฆฌ๋ ngx-translate๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง, ๋๋ ๊ทธ ํ๋ก์ ํธ์ github ์ด์ ์ด๋๊ฐ์์ ๊ทธ๊ฒ์ด ์ง์ฐ ๋ก๋ฉ์ ์ง์ํ์ง ์๋๋ค๋ ๊ฒ์ ์ฝ์์ต๋๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ์๊ฒ ์ผ ์คํ ํผ๊ฐ ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฐ ๋ค์ Angular์ I18N ์ง์์ ์์ง ํฉ๊ธ ์๊ฐ๋์ ์ค๋น๋์ง ์์์ต๋๋ค.
๋๋ ๊ณง ์์ ํ๋ก์ ํธ์ ๋ฌด์์ ์ฌ์ฉํ ๊ฒ์ธ์ง์ ๋ํ ์ฌ๋ฐ๋ฅธ ๋ฐฉํฅ์ ์๋ ค์ฃผ๋ ๋ช ๊ฐ์ง ํํธ๋ฅผ ์ ๋ง ๊ฐ์ฌํ๊ฒ ์๊ฐํฉ๋๋ค.
ํ์ํ:
๊ฐ์ ธ์ ์ข๋ค:
๋ฉ๋ฅด์
์ด ๋ฌธ์ ์ ์ถ์ข ์๋ค์ ์ํด @ocombe ๋ ๋ช ์๊ฐ ์์ angularconnect์์ ๋ฐํ์ i18n ์ ๋ํด ์ด์ผ๊ธฐํ ๊ฒ์ ๋๋ค. ๋๋ ์ ์ด๋ ์ด๋ฆฐ ์ง๋ฌธ ์ค ์ผ๋ถ๋ ๊ฑฐ๊ธฐ์์ ๋ต์ ์ป์ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ ๋ผ์ด๋ธ ์คํธ๋ฆผ ์ด ์์ต๋๋ค
@ctaepper - ์ ๋ณด๋ฅผ ์ฃผ์ ์ ๋๋จํ ๊ฐ์ฌํฉ๋๋ค!
@guygit ngx-translate
๋๋ angular-l10n
์ ์์ต๋๋ค. ์ฌ๊ธฐ ๋ด๊ฐ ๋ง๋ ๋น๊ต ํ
์ด๋ธ์ด ์์ต๋๋ค. https://medium.com/@sergeyfetiskin/tools -to-translate-your-angular-app-c021e25ff26a
์ฐ๋ฆฌ ์ฑ์ ๊ฒฝ์ฐ ๋ช ๊ฐ์ง ์ ํ ์ฌํญ์ด ์๋๋ผ๋ Angular ๋ฐฉ์์ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
@fetis ์ ๋ง ๊ฐ์ฌํฉ๋๋ค - ์ ๋ณด๊ณ ๊ฐ๋๋ค :-)
๋ฒ์ญ ํ์ผ์ฉ XLIFF ํ์ผ ์ ํ์ ๋ํด ๊ถ๊ธํฉ๋๋ค. Google ๋ฒ์ญ ํดํท๊ณผ Flutter/Dart i18n์ ๋ชจ๋ ARB ํ์ผ์ ์ง์ํ์ง๋ง XLIFF๋ ์ง์ํ์ง ์์ต๋๋ค. ARB ํ์ผ ์ง์์ด ์์ ๋์ด ์์ง ์๋ค๊ณ ๋ค์๋๋ฐ, ์ด๊ฒ์ด ๋ค์ ๊ณ ๋ ค๋ ์ ์๋ ๋ถ๋ถ์ธ์ง ๊ถ๊ธํฉ๋๋ค. ๋๋ ๋๊ตฐ๊ฐ( @ocombe ?)๊ฐ Angular๊ฐ XLIFF ํ์ผ๊ณผ ์ํธ ์์ฉํ๋ ์์น๋ฅผ ๊ฐ๋ฆฌํฌ ์ ์์ผ๋ฏ๋ก ARB ์ง์์ ํตํฉํ๋ ๊ฒ์ด ์ผ๋ง๋ ์ด๋ ค์ด์ง ํ์ธํ ์ ์์ต๋๋ค.
(์ผ๋ถ ์ํฉ์์๋ ๋ชจ๋ฐ์ผ ์ฑ์ Flutter/Dart๋ฅผ ์ฌ์ฉํ๊ณ ์น ์ฑ์ Angular๋ฅผ ์ฌ์ฉํ ์์ ์ด๋ฉฐ ๊ฐ๋ฅํ๋ฉด ๋ชจ๋ฐ์ผ๊ณผ ์น ๊ฐ์ ๋ฒ์ญ ํ์ผ์ ๊ณต์ ํ๊ณ ์ถ์ต๋๋ค. ARB -> XLIFF ๋ณํ๊ธฐ๋ฅผ Angular์ ํฌํจํ ์๊ฐ์ด ์๋ ๊ฒฝ์ฐ).
@localpcguy ๋ณํ๊ธฐ ์ข ๋ฅ๋ฅผ ์์ฑํ๊ฒ ๋๋ค๋ฉด ์ด๋ฏธ ๋ง์ ํ์์์/๋ก ๋ณํ์ ์ ๊ณตํ๊ณ ์๋ https://github.com/translate/translate ์ ๊ธฐ์ฌํ๋ ๋ฐ ๊ด์ฌ์ด ์์ ์ ์์ต๋๋ค.
์ฐธ๊ณ ๋ก ocombe๋ ๋ช ๋ฌ ์ ์ PO ํ์ผ(๋ฐ JSON?)์ ์ง์ํ๊ธฐ ์ํด ์ด์ฌํ ๋ ธ๋ ฅํ ๊ฒ์ด๋ผ๊ณ ๋งํ์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ XLIFF์ ํจ๊ป ์๋ํ๋ okay-ish ๋๊ตฌ๋ฅผ ์ฐพ๋ ๋ฐ ์ด๋ ค์์ ๊ฒช์๊ธฐ ๋๋ฌธ์ ์ธ์ ๊ฐ๋ ์ผ์ด๋ ๊ฒ์ ๋๋ค.
XLIFF์ ํจ๊ป ์ฌ์ฉํ okay ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฐพ๋ ๋ฐ ์ด๋ ค์์ ๊ฒช์๊ธฐ ๋๋ฌธ์ ๋๋ค.
@PowerKiKi ๊ทธ๊ฒ์ ์ฌ์ค์ด ์๋๋๋ค. ๊ฑฐ์ ๋ชจ๋ ์จ๋ผ์ธ ๋ฒ์ญ ๊ด๋ฆฌ ๋๊ตฌ๋ XLIFF ํ์์ ์ง์ํฉ๋๋ค. .xliff๋ฅผ ์๋์ผ๋ก ํธ์งํ๊ณ ์ถ์ง ์๋ค๋ฉด ๋ฌด๋ฃ ๋ฐ์คํฌํฑ ๋ฒ์ญ ํ๋ก๊ทธ๋จ๋ ์์ต๋๋ค.
@fetis ๋๋ ์ฃผ์ ์์ ๋ฒ์ด๋๋ ๊ฒ์ ์ซ์ดํ์ง๋ง ๋๊ตฌ์ ํจ๊ป XLIFF๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ด๋ จํ์ฌ ์๋นํ ๊ณ ํต์ ๋ฐ๊ฒฌํ์ต๋๋ค. ์ฌ๊ธฐ์์ ๋ด ์๊ฒฌ์ ์ฐธ์กฐํ์ญ์์ค. https://github.com/angular/angular/issues/20193#issuecomment -345755889
์ฐ๋ฆฌ๋ ์ฌ์ ํ ์ข์ ๊ฒ์ ์ฐพ์ง ๋ชปํ๊ณ ์์ง XLIFF 2๋ฅผ ์ง์ํ๋ ๊ฒ์ ์ฐพ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฌํ ๋๊ตฌ์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ ๊ณตํ์ญ์์ค. Smart Cat์ ๋ฉ์ง๊ฒ ๋ณด์ด์ง๋ง ๋ฌธ์์ด์ ์ ๋ฐ์ดํธํ๋ฉด ๋ด ๋์ ์ธก์ ํ๊ณ ์ถ์ด์ง๋๋ค.
๋น์ ์ ์ฐ๋ฆฌ๊ฐ ๋ชจ๋ฅด๋ ๊ฒ์ ์๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค :)
Pootle์ https://github.com/translate/translate ๋ฅผ ์ฌ์ฉํ๊ณ Gettext(po ํ์ผ)์ ์ ๋ง ํ๋ฅญํ์ง๋ง ์๋ฆฌ ํ์์/ํ๊ทธ๋ฅผ ์ง์ํ์ง ์์ผ๋ฉฐ ๋๊ตฐ๊ฐ์ ๊ธฐ์ฌ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค.
์ ๋ ์ด ๋ฌธ์ ๋ฅผ 1๋ ์ ๋ ๊ตฌ๋ ํ์ต๋๋ค. ์ด ์ ์์ ์งํ ์ํฉ์ Angular ํ์ ์ฐ์ ์์๊ฐ ์๋ ๊ฒ ๊ฐ๊ณ ๋ชจ๋ ์ธ์ด์ ๋ํด ํ ๋ฒ ์ฑ์ ์ปดํ์ผํ๊ณ ๋์ ๋ฒ์ญ์ ์ํํ๊ธฐ ์ํด ํํ๋ฅผ ๊ฑฐ์ณ์ผ ํ๋ ๊ฒ์ ํ์ฉ๋์ง ์์ต๋๋ค. ๊ฐ๋ฅํ๋ค๋ฉด ์ํ๋ ๋ค๋ฅธ i18n ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ฌ์ฉ์ ์ง์ ํ์ดํ๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ข์ต๋๋ค. ์์ํ๊ธฐ ๋๋ฌธ์ ์ด ํ์ดํ๋ ์ฑ์ ์ฌ๋ฌ ๋ฒ ์ปดํ์ผํ๋ ๋ฐ์๋ ๋๊ฐ์ด ํจ์จ์ ์ ๋๋ค. ๋ํ Angular์ ์์กดํ์ง ์๋ i18n์ ์ฌ์ฉํ๋ฉด ์ฝ๋์์ ๋์ ์ธ ๋ฒ์ญ์ ์ฝ๊ฒ ์ํํ ์ ์์ต๋๋ค. ๋ ๋ค๋ฅธ ์ฅ์ ์ ๋ฒ์ญ์ด ๋ ์ด์ Angular์ ์์กดํ์ง ์์ผ๋ฏ๋ก ์ํ๋ ๊ฒฝ์ฐ ์ผ๋ถ ๊ตฌ์ฑ ์์๋ฅผ ๋ค๋ฅธ ํ๋ ์์ํฌ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๊ธฐ ์์ํ๊ฑฐ๋ ์ํ๋ ๋ฒ์ญ ํ์๊ณผ ๋๊ตฌ๋ฅผ ์์ ๋กญ๊ฒ ์ ํํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ ๋ https://airbnb.io/polyglot.js/ ๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ๋งค์ฐ ๋ง์กฑํ๋ฉฐ, Angular i18n์์ ๋ค์ค ์ธ์ด๋ก์ ๋ด ์ฑ ๋ง์ด๊ทธ๋ ์ด์ ์ด ์ฌ์ ํ ์งํ ์ค์ผ ๋๋ ๊ฒฐ๊ณผ์ ์ ๊ฑฐ์ ์ด๋ณด๋ค ๋ ๋ง์กฑํ ์ ์์ต๋๋ค. Angular i18n๊ณผ์ ์ข ์์ฑ.
๋ฉ์ผ๋ก ์๋ฆผ์ ๋ฐ๊ณ ์ ์๊ฒฌ์ ์ ๊ฒฝ์ฐ์ง ์์ผ์ค ๋ถ๋ค๊ป ์ฃ์กํ์ง๋ง, ์๋ฆผ์ ๋๋ฌด ์ค๋๋ง์ ์ฝ์ด์ ๊ตฌ๋ ์ ์ทจ์ํ๊ธฐ ์ ์ ์๋ณ์ธ์ฌ๋ฅผ ๋๋ ค์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค. :)
๊ฑด๋ฐฐ!
์ด ์ ์์ ์งํ ์ํฉ์ Angular ํ์ ์ฐ์ ์์๊ฐ ์๋ ๊ฒ ๊ฐ๊ณ ๋ชจ๋ ์ธ์ด์ ๋ํด ํ ๋ฒ ์ฑ์ ์ปดํ์ผํ๊ณ ๋์ ๋ฒ์ญ์ ์ํํ๊ธฐ ์ํด ํํ๋ฅผ ๊ฑฐ์ณ์ผ ํ๋ ๊ฒ์ ํ์ฉ๋์ง ์์ต๋๋ค.
๋ฐํ์ i18n์ Angular ํ์ ์ต์ฐ์ ๊ณผ์ ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ฐจ๋จ์ผ๋ก ์ธํด ์๋ก์ด Ivy ๋ ๋๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค. ํ์ฌ๊น์ง ํ๋ก์ ํธ ์งํ ์ํฉ์ ์ํธํ๋ฉฐ Angular 8์ฉ Ivy๋ฅผ ๊ธฐ๋ํ ์ ์์ต๋๋ค. ๊ด๋ จ๋ ๋ชจ๋ ์ฌ๋์๊ฒ ์ด๋ ค์ด ์ํฉ์์ ์ดํดํฉ๋๋ค. ๊ณํ์ ์์ง๋ง Ivy๊ฐ ์๋ฃ๋์ง ์๋ ํ ์คํํ ์ ์์ต๋๋ค.
์ต๊ทผ ๋ฐ๋์์ ์ด๋ฆฐ AngularConnect ์ปจํผ๋ฐ์ค(2018)์ ๊ฐ์ฐ, ํนํ Olivier Combe์ "Runtime i18n"๊ณผ Alex Rickabaugh์ Day 2 ๊ธฐ์กฐ ์ฐ์ค์ ์ฐธ์กฐํ์ญ์์ค.
์ค์ ๋ก ๋ด ๊ฒฝํ์ @intellix์ ๋น์ทํฉ๋๋ค.
XLIFF 1.2 ๋ 10๋ ์ด ๋์์ง๋ง ์คํ ์์ค ํ๋ก์ ํธ์์ ์ง์์ด ์๋นํ ๋น์ฝํ ๊ฒ ๊ฐ์ต๋๋ค. Pootle์ https://github.com/translate/pootle/issues/4762 ๋ฐ https://github.com/translate/pootle/issues/1811์ ๋ฐ๋ผ palceholder๋ฅผ ์ง์ํ์ง ์์ต๋๋ค. PR์ด ๊ณง ์ง์์ ์ถ๊ฐํ ์๋ ์์ง๋ง Weblate ๋ ์ง์ํ์ง ์์ต๋๋ค .
๋ฐ์คํฌํฑ์์ Virtaal์ XLIFF ์๋ฆฌ ํ์์๋ฅผ ์ง์ _ํ์ง _ ํ์ง๋ง ์ต์ ๋ฆด๋ฆฌ์ค 0.7.1 ์ 6๋ ๋ ๊ฒ์ด๋ฉฐ ์ต์ macOS์์ ๋ ์ด์ ์๋ํ์ง ์์ต๋๋ค. ๋ถํํ๋ ๊ฒ๋ณด๊ธฐ์ ๋จ์ํจ์๋ ๋ถ๊ตฌํ๊ณ ์์ง ๋ณํฉ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ์์ฃผ ์ค๋๋ PR ๊ณผ ํจ๊ป ์ ๊ด๋ฆฌ๋ ํ๋ก์ ํธ์ ์ธ์์ ์ฃผ์ง๋ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ง๋ ๋ช ๋ ๋์ ๋งค์ฐ ๋ฎ์ ์ปค๋ฐ ํ๋ .
๋ฉฐ์น ์ ์ ์ถ์๋ Poedit 2.2๊ฐ XLIFF 1.2 ๋ฐ 2.0์ ์ง์ํ๋ค๋ ๊ฒ์ ๋ฐฉ๊ธ ์์์ต๋๋ค. ๋ถํํ๋ ํ์ฌ ์ค์นํ ๋ snapcraft.io CDN์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ฌ ํ ์คํธํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋ฐ์คํฌํ ์ฌ์ฉ์์๊ฒ ์ต๊ณ ์ ์๋ฃจ์ ์ผ ์ ์์ต๋๋ค.
@fetis ์๋ฆฌ ํ์์๋ฅผ ์ง์ํ๋ XLIFF 1.2 ๋๋ ๋ ๋์ XLIFF 2.0์ ํธ์งํ๊ธฐ ์ํ ์ผ๋ถ ์คํ ์์ค(๋๋ ์ต์ํ ๋ฌด๋ฃ๋ก ์ฌ์ฉํ ์ ์๋) ํ๋ก์ ํธ๋ฅผ ์ฐพ์ ๊ฒฝ์ฐ ์ฌ๊ธฐ์ ๋์ดํ์ญ์์ค. ๋ด๊ฐ ํ ์คํธํ ๋ค๋ฅธ ๋ชจ๋ ๊ฒ์ ์ ํ ์๋ํ์ง ์๊ฑฐ๋ ์ฌ์ฉํ๊ธฐ ๋งค์ฐ ๋ณต์กํ์ต๋๋ค.
@intellix @PowerKiKi ์ฌ๊ธฐ ๋ด๊ฐ ์๋ ๋ชฉ๋ก์ด ์์ต๋๋ค. ์ฐ๋ฆฌ์ ๋ชฉํ๋ ๋ค์ํ ๊ตญ๊ฐ์ ๋ฒ์ญ๊ฐ/๋๋ฃ์ ํ์ ํ ์ ์๋ ์จ๋ผ์ธ ๋ฒ์ญ ํ๋ซํผ์ ๋๋ค. ๋ชจ๋ ๊ณต๋ ์์ ์๋ฅผ ์ํด ๋ฐ์คํฌํฑ ์ํํธ์จ์ด๋ฅผ ์ค์นํ๊ณ XLIFF ํ์ผ ๋๊ธฐํ๋ฅผ ๊ด๋ฆฌํ๋ ํ๋ก์ธ์ค๋ฅผ ๊ฑฐ์น๋ ๊ฒ์ ์ฐ๋ฆฌ์๊ฒ ์ ํ ์ฌํญ์ด ์๋๋๋ค. ๊ทธ๋์ ์ ๋ ๋ฐ์คํฌํ ๋๊ตฌ, ํ๋ซํผ์ ํ ์คํธํ์ง ์์์ต๋๋ค.
์ ํ๋ฆฌ์ผ์ด์
์ค๋ฉ๊ฐT
https://omegat.org/
์์ฒด ํธ์คํ
https://weblate.org/en/ +์ ๋ฃ ํธ์คํ
https://pootle.translatehouse.org/
https://pontoon.mozilla.org/
ํ๋ซํผ
ํฌ๋ผ์ฐ๋
https://crowdin.com/
CLI ์ง์
WebTranslateIt
https://webtranslateit.com/
CLI ์ง์
ํธ๋์ํ์ค
https://www.transifex.com/
ํ๋ ์ด์ฆ์ฑ
https://phraseapp.com/
ํ์งํ
https://lokalise.co/
CLI ์ง์
_์ ๋ ดํ ๊ฐ๊ฒฉ์ ์ถฉ๋ถํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ Lokalise๋ก ํ๋ก์ ํธ๋ฅผ ๋ง์น๊ฒ ์ต๋๋ค._
~ํฌ์๋ํฐ~
https://poeditor.com/pricing/
์ ์ธ๋ XLIFF ์ง์์ Angular ํ์์์ ์๋ํ์ง ์์ต๋๋ค.
์คํ ์์ค ์๋ฃจ์ ์ ์ฐพ๊ณ ์๋ค๋ฉด ์ด ๋ชฉ๋ก์ด ์ ์ฉํ ์ ์์ต๋๋ค. https://opensource.com/article/17/6/open-source-localization-tools
์ฌ์ด๋ ๋
ธ๋
XLIFF 2.0์ ์ง์ํ๋ ์จ๋ผ์ธ ํ๋ซํผ์ ๋ณธ ์ ์ด ์์๊ณ ์ ์๊ฒ๋ ํฐ ๋๋ผ์์ด์์ต๋๋ค. XLIFF 1.2๋ ๊ณต์์ ์ผ๋ก ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฒ์ผ๋ก ํ์๋์ด ์์ผ๋ฉฐ ์
๊ณ์ ์๋ฌด๋ v2๋ฅผ ์ง์ํ์ง ์์์ต๋๋ค.
POEdit๊ฐ XLIFF ์ง์์ ์ ์ธํ๋ค๋ ์์์ ๋ฃ๊ณ ๊ธฐ์ฉ๋๋ค. .po ํ์ผ์ ์ฌ์ฉํ๋๋ฐ ์ข์์ต๋๋ค.
์ถ์ : ์ฌ๊ธฐ์ ์ฃผ์ ๋ฅผ ๋ฒ์ด๋๊ฒ ํด์ ๋งค์ฐ ์ ๊ฐ์ ๋๋ค. ํ์ง๋ง ๋์์ ์ฑ์์ XLIFF ํ์ผ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ ์ฌ์ ์ ์ผ๋ถ์ผ ๋ฟ์ด๋ฏ๋ก ์ฑ ์๋ช ์ฃผ๊ธฐ ๋์ ๋ฒ์ญํ๊ณ ์ ์ง ๊ด๋ฆฌํด์ผ ํฉ๋๋ค. ๊ทธ๋์ ์ค์ํ ํ ๋ก ์ ๋๋ค. ๋๋ ์ด๋๊ฐ๋ก ์ด์ฌํ ๊ฒ์ ์ ์ํ๊ณ , ์ด ๋ชฉ๋ก์ Medium ๊ธฐ์ฌ๋ก ๋ฃ์ ์ ์๊ณ ๊ฑฐ๊ธฐ์ ํ ๋ก ์ ๊ณ์ํ ์ ์์ต๋๋ค.
@localpcguy ๋ค์ํ ํ์์ด ์์ง๋ง ๋ชจ๋ ์ง์ ๊ฐ๋ฅํ ํ์์ ๋ฌ๋ ค ์์ต๋๋ค. ์ง๋ ฌ ๋ณํ๊ธฐ๋ฅผ ์์ฑํ๊ณ ์ ์ง ๊ด๋ฆฌํ๋ ค๋ฉด ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค. Xliff 2๋ ๋ค๋ฅธ ๋๊ตฐ๊ฐ๊ฐ PR๋ก ์ถ๊ฐํ๊ธฐ ๋๋ฌธ์ ์ง์์ ์ถ๊ฐํ์ต๋๋ค(๊ทธ๋ ์ง ์์ผ๋ฉด ์ง์ํ๋ ๋ฐ ์๊ฐ์ด ๊ฑธ๋ฆฌ์ง ์์์ ๊ฒ์
๋๋ค).
์ถ์ถ๊ณผ ๋ณํฉ์ด๋ผ๋ ๋ ๊ฐ์ง๋ฅผ ์ํด ์ง๋ ฌ ๋ณํ๊ธฐ๊ฐ ํ์ํฉ๋๋ค.
Angular Connect์์ ์ด์ ๋ํด ์ด์ผ๊ธฐํ์ง๋ ์์์ง๋ง ์ธ๋ถ ์ง๋ ฌ ๋ณํ๊ธฐ๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ivy๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐํ์(๋ณํฉ)์ ์ํํ๋ ๊ฒ์ ๋งค์ฐ ์ฌ์์ผ ํ์ง๋ง ์ปดํ์ผ๋ฌ๋ฅผ ๋ณ๊ฒฝํ ๋ ์ง๋ ฌ ๋ณํ๊ธฐ๋ฅผ ์
๋ฐ์ดํธํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ถ์ถ์ ์ฌ์ ํ โโ๋ณต์กํฉ๋๋ค.
๋๋ ๊ทธ๊ฒ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ช ๊ฐ์ง ์์ด๋์ด๊ฐ ์์ง๋ง ๋ด์์ด๋ฉ๊ตด์ด ์ฐฉ๋ฅํ๋ฉด ๊ทธ๊ฒ์ ๋ํด ํ๊ณผ ์ด์ผ๊ธฐํด์ผ ํฉ๋๋ค. ๋ด๊ฐ ์ ๋ง๋ก ํ๊ณ ์ถ์ ๊ฒ์ Angular i18n์ ์ฌ์ฉํ์ฌ ngx-translate๋ฅผ ๋ค์ ์์ฑํ ์ ์๋๋ก ์ต์ํ JSON ์ง์์ ์ถ๊ฐํ๋ ๊ฒ์
๋๋ค(๋ง์ ์ฌ๋๋ค์ด ์ํ๊ธฐ ๋๋ฌธ์).
@ocombe ์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค(๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ๋ชจ๋ ์ ๋ ฅ, ์ ๋ ๋ค์ํ ๋ณด๊ธฐ๋ฅผ ๋ณด๋ ๊ฒ์ ์ข์ํฉ๋๋ค). #14185๊ฐ ๋น์ ์ด ์ธ๊ธํ PR์ธ ๊ฒ ๊ฐ์ต๋๋ค. ARB ์ง์์ ์ถ๊ฐํ๋ ค๋ ๊ฒฝ์ฐ ์ฌ์ ํ ์ข์ ์ถ๋ฐ์ ์ ๋๊น? ์ ์ถํ ๊ฒฝ์ฐ ์ ์ฌ์ ์ผ๋ก ๋ณํฉ๋ ์ ์์ต๋๊น?
@localpcguy ๋ด์ผ ํ์๊ฐ ์์ด ์ด์ ๋ํด(๋ฐ ๊ธฐํ ์ฌํญ) ๋ ผ์ํ ์์ ์ ๋๋ค. ์งํ ์ํฉ์ ์๋ ค ๋๋ฆฌ๊ฒ ์ต๋๋ค.
์, ์ฐ๋ฆฌ๊ฐ ์๊ฐํ๋ ์๋ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ถ์ถ์ ์ํด ๋๊ตฌ๋ ์ํ๋ ํ์์ผ๋ก ํ์ฒ๋ฆฌํ ์ ์๋ ์ผ์ข ์ json ํ์(๋ฒ์ญ์ ์ํ ๊ณต์ json ํ์์ด๋ฏ๋ก ARB์ผ ์๋ ์์)์ผ๋ก ๋ฌธ์์ด์ ์ถ์ถํฉ๋๋ค. (json์ ์ฌ์ฉํ๊ธฐ ์ ๋ง ์ฝ์ต๋๋ค.) ๋ฐํ์์ ์ํด ํ์์ ์ดํดํ๋ ๊ณ ์ ํ ๋ก๋๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์ผ์ข ์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
๊ทธ๋์ ์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์ฑ์ ๋ก๋๋ฅผ ์ ๊ณตํ ์๋ง ์๋ค๋ฉด ์ด๋ค ์ข ๋ฅ์ ๋ฒ์ญ ํ์๋ ์์ ๋กญ๊ฒ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
๊ธ์, ์ด๊ฒ์ ๊ต์ฅํ ๊ฒ์ด๋ค :+1:
์, ์ฌ์ธต ์ต์ ํ์ ์ก์ธ์คํ ์ ์์ง๋ง(์ธ์ด๋น ํ๋์ ๋ฒ๋ค์ ์์ฑํ๊ธฐ ์ํด ๋น๋ ์ ๋ฌธ์์ด์ ๊ต์ฒดํฉ๋๋ค. ์ฆ, ๋ฒ์ญ์ด ๊ตฌ์ฑ ์์์ ํจ๊ป ๋ถํ ๋จ์ ์๋ฏธํฉ๋๋ค) ์ํ๋ ๋ชจ๋ ์ข
๋ฅ์ ์ง์ฐ ๋ก๋ฉ ์๋ฃจ์
์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฑ์ด ์์๋ ๋ ๋ชจ๋ ๋ฒ์ญ์ ๋ก๋ํ๋ ํ(๊ตฌ์ฑ ์์๊ฐ ์์ฑ๋๊ธฐ ์ ์ ๋๊ธฐ์ ์ผ๋ก ๋ก๋ํด์ผ ํจ)
๋ํ ์์ด๋น์์ ์ ๊ณตํ๋ ์๋ก์ด ์ง์ฐ ๋ก๋ฉ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์ ๊ตฌ์ฑ ์์๋ฅผ ๋ก๋ํ ๋ ์๋์ผ๋ก ์ฝ๋๋ฅผ ๋ถํ ํ๊ณ ๋ผ์ฐํฐ์ ๋น๋๊ธฐ์์ผ๋ก ๋ก๋ํ ์๋ ์์ต๋๋ค(Jason์ Angular Connect์์ ๋ฐ๋ชจ๋ฅผ ์ํํ์ต๋๋ค).
Ivy์์ ์ฆ์์์ ์ธ์ด๋ฅผ ์ ํํ๋ ๋ฒ ํ ๋ฐ๋ชจ(ํ์ผ๋ง ๋น๋์ค๋ ๋ผ์ด๋ธ ์คํธ๋ฆผ์ด ์๋)๋ฅผ ๊ธฐ๋ํ ์ ์์ต๋๊น? POC ๊ฒฐ์น์ ์์ด๋น๋ฅผ ์กฐํฉํ๋ ๊ฒ์ ๋ผ์ธ ํญ๊ฒฉ์ ๊ฐ์งํ๋ ์ข์ ๋ฐฉ๋ฒ์ด ๋ ์ ์์ต๋๋ค.
๊ฐ๋ฐ์์ ๋์ live-i18n์ ๋ฃ๊ธฐ ์ ์ ๋ด์์ด๋ฉ๊ตด์ด ์ข ๋ ์๋ฆฌ ์ก๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋ฐฉ์์ ๋์ํ์ง ์๋ ๊ฒ์ด ์๋๋ผ, 1์ธ ์๊ท๋ชจ POC๊ฐ ์์ธกํ๊ณ ์ ์ฌ์ ์ผ๋ก live-i18n์ด 2020๋ ์ผ๋ก ๋ฐ๋ ค๋๋ ๊ฒ์ ํผํ ์ ์์ต๋๋ค.
์ธ๋ถ ์ฌ์ฉ์๋ฅผ ์ํ ๋ฐํ์ ์๋น์ค๋ ์์ง ์๋ฃ๋์ง ์์์ผ๋ฉฐ Google ์ฑ์ผ๋ก ivy๋ฅผ ํ
์คํธํ๋ ๋ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ํด๋ก์ ( goog.getMsg
)๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๋ง ์์ต๋๋ค.
์์ผ๋ก ๋ช ๋ฌ ๋์ ์ด ์์
์ ์ํํ ๊ฒ์
๋๋ค. ์ด๊ฒ์ ์๋ง๋ ์์ง ์์ด๋น์ ํจ๊ป i18n์ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
๋ฐํ์ i18n์ ๋ํ ์ฝ๋๋ ์ด์ ๋ฐฉ๊ธ ๋ณํฉ๋์์ผ๋ฉฐ i18n์ ๋ํ ์ปดํ์ผ๋ฌ ์ฝ๋๋ ์์ผ๋ก ๋ฉฐ์น ๋ด์ ๋ณํฉ๋์ด์ผ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์์์ ์ธ๊ธํ ์ ๋ก๋์ ์ฝ๋์์ ๋ฒ์ญ์ ์ฌ์ฉํ๋ ์๋น์ค๋ฅผ ํฌํจํ์ฌ ์ธ๋ถ ์ฌ์ฉ์๋ฅผ ์ํ ์ ์๋น์ค์ ๋ํด ์์
ํฉ๋๋ค.
์ฆ์์์ ์ธ์ด๋ฅผ ์ ํํ๋ ค๋ฉด ์ฑ์ ์์ ํ ๋ค์ ๋ก๋ํ๊ฑฐ๋ ๊ฒฝ๋ก๋ฅผ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค(๋ชจ๋ ๊ธฐ์กด ๊ตฌ์ฑ ์์๋ฅผ ์ ๋ฆฌํจ). ๋๋ ์์ง POC ์์ ์ ์๋ํ์ง ์์ ๊ฒ์ ๋๋ค.
์ฆ์์์ ์ธ์ด๋ฅผ ์ ํํ๋ ค๋ฉด ์ฑ์ ์์ ํ ๋ค์ ๋ก๋ํ๊ฑฐ๋ ๊ฒฝ๋ก๋ฅผ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค(๋ชจ๋ ๊ธฐ์กด ๊ตฌ์ฑ ์์๋ฅผ ์ ๋ฆฌํจ). ๋๋ ์์ง POC ์์ ์ ์๋ํ์ง ์์ ๊ฒ์ ๋๋ค.
๊ทธ๊ฑด ๊ณตํํ์ง๋ง ...ํ์ง๋ง ์ฑ์ ์์ ํ ๋ค์ ๋ก๋ํ ํ์๋ ์์ต๋๋ค(๋๋ ์ต์ข
์ฌ์ฉ์์ ๋์ ์๋ฒฝํจ์ ๋ฌ์ฑํ๋ ๋ชจ๋ ๊ฒ, ์ผ๋ช
์ ์ฅ์๋, ์ธ์ฆ๋, URL๋ ์์ค๋์ง ์์ต๋๋ค. ์... /en/...
์ ๋ํด ์ค๋ช
ํ์ง ์์)
@tatsujb ์ฑ์ ์๋ก๊ณ ์นจํ๋ฉด ํ์ด์ง๊ฐ ์๋ก๊ณ ์นจ๋๋ ๊ฒ์ด ์๋๋ผ StackBlitz๊ฐ ํธ์งํ ๋๋ง๋ค ์ฑ์ ์๋ก๊ณ ์นจํฉ๋๋ค. ๋์ ๋ณด์ด๋ ๊ฒ์ด ๋๊ปด์ง๋์?
์ฑ์ ๋ค์ ๋ก๋ํ๋ค๋ ๊ฒ์ ์ฑ์ ๋ง์ดํธ ํด์ ํ ๋ค์ SSR-CSR ์ ํ(CSR-CSR)์ ํด๋นํ๋ ๋์ผํ ์์น์ ์ฑ์ ๋ง์ดํธํ๋ ๊ฒ์ ์๋ฏธํ๋ฉฐ ์ ์ ํ ์บ์ ์ํคํ ์ฒ๋ฅผ ๊ณ ๋ คํ๋ ๊ฒฝ์ฐ ํ์ ๋ถํธ์คํธ๋ฉ ํ๋ก์ธ์ค์์ ๋น๋๊ธฐ ์์ ์ด ์์ด์ผ ํฉ๋๋ค.
์ด ์ฌ๋ฐ๋ฅธ ์ค์ ์ผ๋ก; ๋ณ์ ๊ฐ์ ์ ์ฅํ๊ณ ์ธ์ฆ(์คํฌ๋กค ๊ฐ๋ฅํ div์ ์คํฌ๋กค ์๋ ํฌํจ)์ด ์ ์ง๋ฉ๋๊น?
@tatsujb ์๋ฅผ ๋ค์ด ์ดํ ๋ณ์ ๋๋ ์ฐฝ ์์ฑ๊ณผ ๊ฐ์ด Angular ์์ฑ ์ธ์คํด์ค ์ธ๋ถ์ ์ ์ฅ๋๋ ํ.
@trotyl ํ์ด์ง ์์ด ์ฑ์ ์ด๋ป๊ฒ ์๋ก๊ณ ์นจํฉ๋๊น?
@saithis ๋น์ ์ ํญ์ platformBootstrap().bootstrapModuleFactory()
(๋๋ ๊ธฐํ ๋๋ฑํ)๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ๋ช
๋ น์ ์ผ๋ก ๋ถํธ์คํธ๋ฉํฉ๋๋ค. ์ธ์ ์ด๋์๋ ํธ์ถํ ์ ์์ต๋๋ค. ํธ์ถ ์ ๋ง๋ฒ์ด ์์ต๋๋ค(Angular CLI์๋ ํ์ฌ ์ฝ๋ ๊ต์ฒด์ ๋ํ ์ ํ์ด ์์ผ๋ฉฐ ๋ ์ด์ ์์ด๋น์ ๋ฌธ์ ).
์คํฌ๋ฆฝํธ ํธ์ถ ์ ์ด์ฌํ ๋ถํธ์คํธ๋ฉํ๊ณ ์์ํ ์ ์ง(๋ง์ดํธ ํด์ ํ์ง ์์)ํ๋ ๊ฒ์ SPA์ ์ผ๋ฐ์ ์ธ ๊ดํ์ด์ง๋ง ์๋ฌด๋ ๊ทธ๋ ๊ฒ ํ๋๋ก ๊ฐ์ํ์ง ์์ต๋๋ค.
ํธ์ง: ๋๊ตฐ๊ฐ ๊ทธ๋ ๊ฒ ํ๋ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ถํธ์คํธ๋ฉ๋ NgModuleRef
๋ ํ๊ดด ํด์ผ ํฉ๋๋ค. ์ด๊ฒ๋ค์ ์ฃผ์ ์์ ๋ฒ์ด๋ ์ง๋ฌธ์ด๋ฉฐ ๋ค๋ฅธ ์ฑ๋์์ ๋
ผ์ํ๋ ๊ฒ์ด ์ข์ผ๋ฉฐ ์ฌ๊ธฐ์์ i18n ํ ๋ก ์ ์ถ์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
@trotyl ๊ฐ์ฌํฉ๋๋ค. ๋ถํธ์คํธ๋ฉ์ด ๋ค์ ์๋ํ๋์ง ๋ชฐ๋์ต๋๋ค.
@ocombe ์ฌ๊ธฐ์์ ์คํธ์ ์ ๊ฑฐํด ์ฃผ์๊ฒ ์ต๋๊น? ๊ทธ๋ฆฌ๊ณ ๋ด ๋๊ธ๋.
@fetis ์๊ฒ : ๋น์ ๊ณผ ๊ฐ์ ์ฌ๋๋ค์ ์ด์๋ฅผ ํ๋ก์ฐ ํด์ ํ๊ณ ์ถ์๋ฅผ ์ํด ๊ตฌ๋
ํด์ผ ํฉ๋๋ค.
@Andrulko ์๊ฒ : ์ฐ๋ฆฌ๋ ์๊ดํ์ง ์์ต๋๋ค
@ angular๋ก : ์ฌ๊ธฐ์์ ๋ถํํ๋ ๊ฒ์ ์๋ฒฝํ๊ฒ ์ดํดํฉ๋๋ค! ์ฐ๋ฆฌ๊ฐ vX์ฉ์ด ์๋ v7์ฉ ์์ด๋น๋ฅผ ์ํ๊ฑฐ๋ v7์ฉ์ผ๋ก ํฌ๊ฒ ๊ฐ์ ๋ ์ ํ์ ํ๋งคํ์ง ์๋ ๋ฐ๋ฉด ๊ทํ๊ฐ ์ด์ ์๋ตํ ์ ์๊ฑฐ๋ ๋ง๊ฐ์ผ์ ์ค์ํ๊ธฐ ์ํด 7.x์ ๋ฃ์ ๊ฒ์ ๋๋ค... ์ด๊ฒ์ ๊ณตํํ์ง ์์ต๋๋ค! ์ ์ต์ ์ ์๋ฌด ๊ฒ๋ ๋ฐํํ์ง ์๋ ๊ฒ์ด์ด์ผ ํ๋ฉฐ ์๋ฌด๋ ์ด๊ฒ์ด ๋์ ์๊ฐ์ด๋ผ๊ณ ๋ถํํ์ง ์์ ๊ฒ์ ๋๋ค. ํ๋ ์์ํฌ์์ ์์ ์ ์์น๋ฅผ โโ์ ํด์ผ ํฉ๋๋ค. ์, ์ฐ๋ฆฌ๋ v2 ์ดํ ์ฌ๋ฐ๋ฅธ i18n์ ๊ธฐ๋ค๋ฆฝ๋๋ค. ํฐ ์ฑ์ ๋ํ ์ด ํ์ ์ธก๋ฉด์์ 50000๊ฐ์ ๋ฌธ์์ด์ ํฌํจํ๋ ๊ตญ์ ์น ์ฑ๊ณผ ๊ฐ์ ํฐ ์ฑ์ ๋ํ ๊ฐ๋ ์ค๋น๋ฅผ ํ๋งคํ ์ ์์ต๋๋ค. ๋ฌผ๋ก ๋น์ ์ ์ด๊ฒ์ ์ฝ๋ ๊ฒ์ ์ข์ํ์ง ์์ง๋ง ๋์ ์ฌ๊ณผ ์ข์ ๋ฏฟ์, imho ์ฐ๋ฆฌ๊ฐ i18n์ ๊ณ ๋ คํ์ง ์๊ณ ๋ค๋ฅธ ๋ชจ๋ ์ธก๋ฉด์ ๋ํด ๋๋ฆฐ ๋น๋ ์๊ฐ/๊ฐ๋ฐ ์๊ฐ์ ๊ณ ๋ คํ์ง ์์ผ๋ฉด ๊ฐ๋๊ฐ ๊ต์ฅํ๋ค๊ณ ๋งํ ์ ์์ต๋๋ค. ํน์ ๋ฐฉํฅ์ ์๋จ์์ ๋ณ๊ฒฝ๋์ด์ผ ํ๋ฉฐ ๋ฌผ๋ก ๊ฒฐ์ ์์๊ฒ ๋งํ๊ณ ์์ต๋๋ค. big-google์์ ์ฐ๋ฆฌ๋ ์ด์ ๊ฐ์ ํฐ ์ค์๋ฅผ ํ ์ ์์๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ก๋ถํฐ ๋์ ์์ธ (๋นํ). ๋๋ exceptionels์ ๊ฐ์ Google ๊ฐ๋ฐ์๋ฅผ ๋ด ๋๋ค. ์ค์๊ฐ ์๋ ๋๋ํ ์ฌ๋๋ค์ ๊ฒฝํ ๋ง์ ๊ฐ๋ฐ์์ Google๊ณผ ๊ฐ์ devteam์๊ฒ ์ด๋ฐ ์ผ์ด ์ผ์ด๋์๋ ์ ๋ฉ๋๋ค! ๋ด ๊ธ๋ก๋ฒ ์๊ฒฌ์ ํ์ฌ๊ฐ ์ ํํ ๋ค์ ๊ณต๊ฐ ์์ค๊ฐ ๋ฌด์์ธ์ง ๊ฐ์ธ ํ์ฌ์ ํ๋งค/์ค๋ช ํ ๋ ๋น ์ฑ์ ๋ํด Angular 100%๋ฅผ ํ๋งคํ์ง ์์ต๋๋ค!
@ ํนํ ๋น์ฆ๋์ค ํ์ฌ์์ ์ผํ์ง ์๋ ์ฌ๋๋ค์ ์ํด: ์คํ ์์ค๋ฅผ ์กด์คํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ด ๋๊ธ์ด ์ซ์ด์?!?!, lol go go my boss to wait.. to wait... angular๋ฅผ ์ ํํ ํ ์ฐ๋ฆฌ๊ฐ ๋ฏฟ๊ธฐ ๋๋ฌธ์ ํฐ ์ฑ์ ์ํด ์ค๋น๋์์ต๋๋ค(80%๊ฐ ์๋ 100%)... ์ฐ๋ฆฌ๋ ์์กดํฉ๋๋ค!
์ฐ๋ฆฌ๊ฐ ๋ฐฐ๋ฅผ ๋ ๋๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์ฌ๊ธฐ์์ ๋์ ๋ง์ง๋ง ์ฝ๋ฉํธ์ ๋๋ค! ๊ตฌ๋ ์ทจ์ + ๋ค์ ํ๋ก์ ํธ์์ Angular๋ฅผ ์ ํํ์ง ์์(๋น์ ์ด ์น์๋ผ๊ณ ๋งํ ์ ์์ต๋๋ค. ์คํ ์์ค ํ๋ก์ ํธ์๋ ์ฐ๋ฆฌ ๊ฐ์ ์ฌ๋์ด ํ์ํ์ง ์์ต๋๋ค)
๊ทธ๋ฐ ์ด์ ! ๊ท ํ์ ์ํด... Angular 6์ผ๋ก ์ฑ์ ๋ค์ ์์ฑํ๊ณ 6๊ฐ ์ธ์ด๋ก ๊ตญ์ ํํ์ผ๋ฉฐ ์ฝ๊ฐ์ ๋ถํธํจ๋ง ๋๊ผ์ต๋๋ค. ๋ฌผ๋ก ๋ ๋น ๋ฅธ ๋น๋ ์๊ฐ๊ณผ ์ฆ์ ๋ฒ์ญ์ ํ์คํ ์ข์ง๋ง ์ธ์์ ์ข ๋ง์ ์๋๋๋ค. i18n์ด ์๋ ํ๋ ์์ํฌ์ 98%๋ ๊ต์ฅํฉ๋๋ค. ์ํ์ด! ์๋ก์ด ๊ธฐ๋ฅ์ ๊ธฐ๋ํฉ๋๋ค.
์ฐ๋ฆฌ๋ ๋ํ ์๋ก์ด ์ํฐํ๋ผ์ด์ฆ ํฌํธ์ ์ํด Angular์ ๋ํ ํ์์ ์ธ ๊ฒฝํ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. i18n์ ์ค์์ค์์ 4๊ฐ ์ธ์ด๋ฅผ ์ง์ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ํ์ํ ๋ง์ง๋ง ๋๋ฝ ๊ธฐ๋ฅ์ ๋๋ค. ์ ๋ ์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ์ํต์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ๋ก์ ํธ ๊ณํ์ ์ํด 1๋ ์ ์ i18 ๋ฆด๋ฆฌ์ค๋ฅผ ๋ ์ ์์ธกํ๋ค๋ฉด ์ด๋ฅผ ๊ณํํ๊ณ ๋ค๋ฅธ ๊ฐ๋ฅ์ฑ์ ๊ณ ๋ คํ ์ ์์์ ๊ฒ์ ๋๋ค. ์ฆ, ์ฐ๋ฆฌ๋ ์ด๋ค ์ ๋ฐ์ดํธ๋ฅผ ๋ฃ๊ธฐ๋ฅผ ๊ณ ๋ํ๊ณ ์์ต๋๋ค. :-)
๊ฐ๋๋ฅผ ๋ฐฉ์ดํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ด ํ๋ก๋์ ์์ ์ถฉ๋ถํ ๊ฐ๋จํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค(๋ด๊ฐ ์ฐพ์ ์ต๊ณ ์ ์๋ฃจ์ ).
parent-component.component.html
<app-route-translation
[routeData]="routeData"
></app-route-translation>
route-translation.component.html
<span
i18n="route text|Navigation text for route@@routeText"
>{
routeData.langKey, select,
home-1 {Home 1}
home-1-1 {Home 1-1}
home-1-2 {Home 1-2}
home-2 {Home 2}
home-2-1 {Home 2-1}
home-2-2 {Home 2-2}
home-root {Home root}
lazyPage {Lazy page}
notFound {404}
other {Other}
}</span>
"prod-en": {
...
"outputPath": "dist/en/",
...
},
"prod-ru": {
...
"outputPath": "dist/ru/",
...
}
FROM node:8 as build-stage
WORKDIR /app
COPY angular-util .
RUN npm install
RUN npm run ng build -- --configuration=prod-en
RUN npm run ng build -- --configuration=prod-ru
FROM nginx
WORKDIR /usr/share/nginx/html
COPY --from=build-stage /app/dist .
COPY nginx.conf /etc/nginx/conf.d/default.conf
ru
set $subdomain ru;
$3$#$๋ ๊ธฐ๋ณธ ๋ก์ผ์ผ๋ก ๋ฐ๊ฟ์ผ ํฉ๋๋ค.server {
listen 80;
set $subdomain ru;
if ($host ~ ^(\w+)\.) {
set $subdomain $1;
}
location / {
root /usr/share/nginx/html/$subdomain;
try_files $uri $uri/ /index.html =404;
}
}
์์ธํ ๋ด์ฉ์ ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์ญ์์ค
https://github.com/ivanivanyuk1993/angular-util/tree/master/src/app/util/shared/route-list
https://github.com/ivanivanyuk1993/titans-shoulders-project/tree/master/container-description/ui-container-description
๋๋ ์ด ๋๊ธ์ ์์ง์๊ฐ๋ฝ์ ์น์ผ์ธ์ฐ๊ณ ์ถ๋ค. ์๋ฒฝํ์ง๋ ์์ง๋ง ์น์์ ์ฐพ์ ์ด ์ฃผ์ ์ ๋ํ ๊ฐ์ฅ ์ ์ฉํ ๊ฒ์๋ฌผ์ ๋๋ค.
์ฌ๋ฌ๋ถ, ์๋ ํ์ธ์,
๋ด ํ๋ก์ ํธ์ i18n ๋ฒ์ญ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๋ถ๋ถ์ ์๋ฌธ์ด ์์ต๋๋ค.
๋ช ๊ฐ์ง ๋ต๋ณ์ ๋์์ฃผ์ธ์.
@leanersLicense :
<div i18n>Some value: {{ valueA // i18n(ph="PH_A") }}</div>
์ ๊ฐ์ ํน๋ณํ ์ฃผ์์ผ๋ก ์๋ฆฌ ํ์์์ ์ด๋ฆ์ ์ง์ ํ ์ ์์ง๋ง ICU ํํ์ @AndrewKushnir ์์๋ ์๋ํ์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค.๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋์ ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ๋ฒ์ญ์ ๋ก๋ํ ์ ์์ต๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1) ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ i18n์ xliff๋ก ์ถ์ถํ๊ณ ๋ฒ์ญํฉ๋๋ค.
2) ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจํค์ง์ ํจ๊ป xliff ํ์ผ ๋ฐฐ์ก
3) ์๋น์๋ ์์ ์ xliff ํ์ผ๋ ์ถ์ถํฉ๋๋ค.
4) ์๋น์๋ xliff๋ฅผ xml ํ์์ ๋ก๋ํฉ๋๋ค. node_modules์์ ์์๋ ๋ชจ๋ ํธ๋์ค ์ ๋์ ์ญ์ ํฉ๋๋ค.
5) ์๋น์๋ xliff๋ฅผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ xliff์ ์ฐ๊ฒฐํฉ๋๋ค.
๊ทํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋๊ตฐ๊ฐ๊ฐ ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ๊ทํ์ ๋ฒ์ญ์ ๋ก๋ํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
์ด ์ค๋ช
์ ์คํดํ๊ณ ์๋ ๊ฒ์ผ ์๋ ์์ง๋ง xlf
ํ์ผ์ ๋น๋ํ ๋ ํ์ฌ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ํ ๋ฒ์ญ ์ค์ ์ ๋ค๋ฅธ ํ๋ก์ ํธ์ ํ
ํ๋ฆฟ์ ์ง์ ๋ ํค๊ฐ ํฌํจ๋์ด ์๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ๋ง์์ ๋ ์ค๋ฅด๋ ๊ฒ์ https://github.com/ng-bootstrap/ng-bootstrap ์
๋๋ค.
ํ์ฌ๋ก์๋ ๋ถ๊ฐ๋ฅํ ๊ฒ ๊ฐ์ต๋๋ค.
<my-button i18n-title="@@SHARED_GO_LABEL" [title]="'Go'" [button-style]="'primary'" (click)="navigateToForm()"></my-button>
์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฒ์ ๋ด์์ ์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๊น(๋๋ ๋ด๊ฐ ๋ญ๊ฐ ์๋ชปํ๊ณ ์์ต๋๊น)?
@mikejr83
๊ทธ๊ฒ์ ๊ฐ๋ฅํ๋ค. title
[title]="'Go'"
title="Go"
๋ก ์ง์ ํ๋ฉด ๋ฉ๋๋ค.
๊ทํ์ ๋ต๋ณ๊ณผ ์ ์์ ๋ํด @ocombe ๋ฐ @ewok-janitor์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๐
@ocombe ๋์๊ด ๋ฒ์ญ์ด ๊ฐ๋ฅํ ์ ์ ๋ ์ง๊ฐ ์์ต๋๊น?
์ง๊ธ์ ๋ ์ง๊ฐ ์์ต๋๋ค. ivy์ ์ฒซ ๋ฒ์งธ ๋ฆด๋ฆฌ์ค์์ ์ฐ๋ฆฌ๋ ๊ธฐ๋ฅ ํจ๋ฆฌํฐ๋ฅผ ๊ฐ๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์๋ก์ด ๊ธฐ๋ฅ(์ฝ๋ ๋ฒ์ญ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ง์ ํฌํจ)์ ๋ํด ์์ ์งํ(๋๋ ์ค์ ๋ก ์ด์ ์ ์์ ์ ์์ํ์ง๋ง ivy๊ฐ ์ํ๋ก ์ถ์๋ ๋ ์๋ฃ๋์ง ์์ ๊ฒ์ ๋๋ค) ์์ ํ ๊ฒ์ ๋๋ค. ivy๊ฐ ๊ธฐ๋ณธ๊ฐ์ด ๋๊ธฐ ์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
xliff ํ์ผ์ ๋ํ ์์ ์ฌํญ์ด ์ด๋ฏธ ์์ต๋๊น? https://github.com/angular/angular/issues/17506
์ฐธ์กฐ๊ฐ ๊ณ ์ ๋์ด ์์ง ์๋ ํ ํ์์ ์ ํ ์ฌ์ฉํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
@ocombe ๊ฒฝ๋ก ๋ฒ์ญ์ ์ง์ํ ๊ณํ์ด ์์ต๋๊น?
๋ช ๋ฒ์ด๋ ์์ฒญ์ ๋ฐ์์ต๋๋ค. ์, ์ฆ๊ฐ์ ์ธ ๊ณํ์ ์๋์ง๋ง ํด์ผ ํ ์ผ ๋ชฉ๋ก์ ์์ต๋๋ค.
์๋ ํ์ธ์, ivy๊ฐ ๋ฒ ํ ๋ฒ์ ์ผ๋ก ์ถ์๋์์ ๋ ๋ฐํ์ i18n์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ฌธ์๊ฐ ์์ต๋๊น?
@marcelnem , ์ด URL์ ํ์ธํ๋ฉด ๋ชจ๋ ๋ฌธ์ ํฌ์ธํธ๊ฐ ๋ณด๋ฅ ์ค์ ๋๋ค.
@ocombe ์ง๊ธ Google์์ ํ๊ณ ์๋ ํ๋ฅญํ ์ผ์ ๋๋ค. Angular i18n์ ์ฒ์๋ถํฐ ngx-translate์ ๊ฐ์ '๋ฌด์ธ๊ฐ'์ฌ์ผ ํ์ต๋๋ค. Angular 8/9๊ฐ ์ถ์๋๋ฉด ngx-translate์์ Angular i18n ์คํ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๋ง์ด๊ทธ๋ ์ด์ ๊ฐ์ด๋, ์๋ํ ๋๊ตฌ, ๊ธฐ๋ฅ ๋น๊ต ๋ฑ์ด ์๋์ง ๊ถ๊ธํฉ๋๋ค.
์๋
์ค์ปด
์์์ ์ธ๊ธํ ๊ธฐ๋ฅ์ ๋ํด ํ์ธํด์ผ ํฉ๋๋ค.
๋ฐํ์ i18n(AOT๊ฐ ์๋ ๋ชจ๋ ๋ก์ผ์ผ์ ๋ํ ํ๋์ ๋ฒ๋ค) - [์์
์ค] >> ์ด๊ฒ์ด ์์ง ์งํ ์ค์
๋๊น, ์๋๋ฉด ์ข
๋ฃ์
๋๊น?
์์ง ์งํ ์ค์ธ ๊ฒฝ์ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์๋ ค์ฃผ์๊ฒ ์ต๋๊น?
๊ฐ์ฌํฉ๋๋ค
@ocombe ์์์ ์ธ์ด ํจํค์ง๋ ๋ ์ด์ค ๋ก๋ฉ์ผ๋ก ๋ก๋ํด์ผ ํ๋ค๊ณ ์ผ์ต๋๋ค. index.html์์ ์ง์ ์ธ์ด ํฉ์ ๋ก๋ํ ์๋ ์์ต๋๊น? ์ ํ๋ฆฌ์ผ์ด์ ์ด AWS Lambda๋ฅผ ํตํด ์คํ๋๊ณ ์ปดํ์ผ๋ ๊ฐ๋ ํ์ผ์ด S3 ๋ฒํท์ ์ ์ฅ๋๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๊ฒ์ ์ค์ ๋ก ์ด๋ฏธ ์๋ํ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด์ง๋ง Angular๋ ๋ค๋ฅธ ํธ์คํธ์์ ํ์ผ์ ๋ ์ด์ค๋ก ๋ก๋ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ ์ด์ค ๋ก๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ Angular์ ํ์ํ ๋ชจ๋ ํ์ผ์ ์ด๋ฏธ index.html์ ํฌํจ๋์ด ์์ด์ผ ํฉ๋๋ค(์ฌ๊ธฐ์ ์คํฌ๋ฆฝํธ๋ฅผ ํตํด S3 ํธ์คํธ๋ฅผ ์ถ๊ฐํจ).
@nidhi8953 ์ฌ์ ํ WIP์ด๋ฉฐ ivy์ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ์ฌ๋ก์๋ Google ๋ด๋ถ์์๋ง ์๋ํฉ๋๋ค(๋ฒ์ญ์ ๋ด๋ถ์ ์ผ๋ก Closure Compiler๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋๋ค). ๋ฒ์ญ์ ์ฒ๋ฆฌํ ๋ฐํ์ ์๋น์ค๋ ์ธ๋ถ ์ธ๊ณ์ ๋ํด ๋งค์ฐ ์คํ์ ์ ๋๋ค. ๋ช ๊ฐ์ง๋ฅผ ํ ์คํธ ํ๋ ค๋ฉด https://github.com/angular/angular/blob/master/packages/core/test/bundling/hello_world_i18n/index.ts ์์ ๋ฅผ ๋ณผ ์ ์์ง๋ง ์์์ผ ํฉ๋๋ค. ๊ธฐ๋ฅ์ ์ฌ์ ํ โโ๋น๊ณต๊ฐ์ด๋ฏ๋ก ๊ฐ๊น์ด ์์ผ ๋ด์ ์ด๋ฆ์ด ๋ณ๊ฒฝ๋๊ณ ๋ณ๊ฒฝ๋ ๊ฒ์ ๋๋ค. ํ์ฌ ๋ชฉํ๋ v8์ด ์ถ์๋๋ฉด(์๋ง์) ๊ฒฌ๊ณ ํ API ์ธํธ ์์ ์ ์์ํ๊ณ v9๊ฐ ์ถ์๋ ๋๊น์ง ์ ์ฒด v8์ ๋ํด ์ด๋ฅผ ๋ฐ๋ณตํ๋ ๊ฒ์ ๋๋ค. ์ด ์์ ์์ API๋ ์์ ์ ์ธ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋์ด์ผ ํฉ๋๋ค.
@vekunz ์ฐ๋ฆฌ๊ฐ ํ์ฌ ๊ณํ์ ๋ฐ๋ฅด๋ฉด ๊ฐ๋ฅํด์ผ ํฉ๋๋ค. ์ด์จ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ถํธ์คํธ๋ฉ์ ๋ฒ์ญ ํ์ผ์ ๋ก๋ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
@ocombe Ivy(ํ์ฌ 8.0.0-rc.3)๋ฅผ ์ฌ์ฉํ๊ณ ๋ค์ค ๋น๋์ Angular 7 ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ i18n์ ๊ตฌํํ ์ ์์ต๋๊น? ์๋๋ฉด Ivy์ฉ i18n API๊ฐ ์ถ์๋ ๋๊น์ง Angular 7์ ๊ณ์ ์ฌ์ฉํด์ผ ํฉ๋๊น? ๊ฐ๋ฅํ๋ค๋ฉด Ivy๋ฅผ ํ์ฉํ๋ ๋์์ ์๋ก์ด ๋ฐํ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์ ๋๊น์ง i18n์ ์ด์ ๋ฐฉ์์ ์ฌ์ฉํ๊ณ ์ถ์ต๋๋ค.
์
๋ฐ์ดํธ: ์๋ํ ํ ng xi18n
์ถ์ถ(#https://github.com/angular/angular-cli/issues/14225 ์ฐธ์กฐ)์ด๋ i18n์ ํตํ ๋น๋ ๋ชจ๋ ํจ๊ณผ๊ฐ ์์ต๋๋ค. .xlf ํ์ผ์ ๋ด๋ณด๋ด์ง ์๊ณ ๋จ์ด๋ฅผ ๋ฒ์ญํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ tsconfig.app.json์์ enableIvy ์ต์
์ false๋ก ์ค์ ํ๋ฉด ๋ ๋ค ๋ฒ์ 8.0.0-rc.3์์ ์ ์๋ํฉ๋๋ค. ์ฆ, i18n์ ์์ง ์๊ณ Angular์ ์
๊ทธ๋ ์ด๋ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ฅผ ์ ์๊ณ ์ฐจ๋ฑ ๋ก๋ฉ๊ณผ ๊ฐ์ ์๋ก์ด ์ด์ ์ ์ป์ ์ ์์ผ๋ฉฐ i18n์ด ์๋ํ๋ฉด Ivy๋ฅผ ์ผค ์ค๋น๊ฐ ๋ฉ๋๋ค.
@jacobbowdoin ivy์์๋ ์๋ํ์ง ์์ง๋ง ํ์ฑํ๋์ง ์์ ๊ฒฝ์ฐ ์๋ํฉ๋๋ค.
๋๋ ์ค๋๋ ์ถ์ถ/๋ก๋ฉ ์์คํ
์ด ivy์ ํจ๊ป ์๋ํ๋๋ก ๋ง๋ค๊ณ ์ถ์์ง๋ง ์ผ์์ ์ด์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ํ์์ ์ฐ์ ์์๋ก ๊ฒฐ์ ํ์ง ์์์ต๋๋ค(์ดํดํ ์ ์๋, ํ์ ์์
์ ๋จผ์ ์๋์ํค๋ ๊ฒ์ด ์ฐ์ ์์์
๋๋ค).
@ocombe ์๋ ํ์ธ์, ์ฐ๋ฆฌ๋ ์ง๊ธ i18n์ ๊ฐ๋ฐํ๊ณ ์ถ๊ธฐ ๋๋ฌธ์ ๋ฐํ์-i18n์ ๊ธฐ๋ค๋ฆด ์ ์์ต๋๋ค. ์ฌ์ ํ ngx-translate๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๊น? i18n-polyfill๊ณผ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ ๋๊น? i18n-polyfill์ ์ฌ์ฉํ๋ฉด runtime-i18n์ผ๋ก ๋ ์ฝ๊ฒ ๋ง์ด๊ทธ๋ ์ด์ ํ ์ ์์ต๋๊น?
ngx-translate๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ i18n-polyfill์ ์ฌ์ฉํ์ง ๋ง์ญ์์ค. ํ
ํ๋ฆฟ์ ๊ฐ๋ i18n์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
ngx-translate๋ ์ฌ์ ํ ๊ด๋ จ์ฑ์ด ์์ผ๋ฉฐ ์ฌ์ฉํ๊ธฐ ์ฝ์ต๋๋ค. ์ฌ๋ฌ ๋น๋(๋ก์บ๋น ํ๋์ฉ)๋ฅผ ์ง์ํ๊ธฐ ์ํด ๋ชจ๋ ์ธํ๋ผ๋ฅผ ๋ฐฐ์นํ ํ์๋ ์์ต๋๋ค.
@ocombe ์๋ ํ์ธ์. ์ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
-๋ฐํ์ i18n
-ํ
ํ๋ฆฟ ์ธ๋ถ์์ ๋ฒ์ญ ๋ฌธ์์ด ์ฌ์ฉ - #11405
์ฐ๋ฆฌ๋ ํ์ฌ ์์ค ์ฝ๋ ๋ฒ์ญ์ ๊ธฐ๋ค๋ ค์ผ ํ๋์ง ์๋๋ฉด i18n-polyfill์ ์ฌ์ฉํด์ผ ํ๋์ง ๋ ผ์ ์ค์ ๋๋ค(์ด๋ฏธ i18n์ผ๋ก ์์ํ์ต๋๋ค). ๋ช ์ฃผ ์ ๋๋ ์ฝ๊ฒ ๊ธฐ๋ค๋ฆด ์ ์์ผ๋ฏ๋ก ๋๋ต์ ์ธ ์ผ์ ์ ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค. ๋งค์ฐ ๊ฐ์ฌํฉ๋๋ค!
@halilovicedvin ivy๊ฐ Google ์ฑ์ ๊ธฐ๋ณธ๊ฐ์ด ๋์ ๋ง์ ์ธ๋ถ ์ฌ์ฉ์๋ฅผ ์ํ ๋ฐํ์ i18n ์๋น์ค ์์
์ ์์ํ๋ฏ๋ก ๊ณง v9 ์ฌ์ด ์ด๋๊ฐ์ ์์ต๋๋ค.
์ฌ๋๋ค์ด ๋ฉฐ์น ํด๊ฐ๋ฅผ ๋ด๊ธฐ ๋๋ฌธ์ ์ฌ๋ฆ์ด ์ง๋์ผ ๋ฏฟ์ ์ ์์ด์.
@halilovicedvin ์ฐ๋ฆฌ๋ ๋ช ์ฃผ ์ ์ i18n-polyfill๊ณผ ํจ๊ป i18n์ ์์ํ๊ณ ํ๋ฅญํ๊ฒ ์๋ํฉ๋๋ค. runtime-i18n์ด i18n-polyfill๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@vekunz ๋๋ ngx-translate ๋ฅผ i18n-polyfill๊ณผ ํจ๊ป ์ฌ์ฉํ๋ฉด runtime-i18n์ผ๋ก ๋ ์ฝ๊ฒ ๋ง์ด๊ทธ๋ ์ด์ ํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋์ง๋ง @ocombe (https://github.com/angular/angular/issues์ ์๊ฒฌ ์ดํ) /16477#issuecomment-498239301) ํด๋ฆฌํ์ ์ค์ ํ๊ธฐ ์ํ ์ถ๊ฐ ๋ ธ๋ ฅ์ด ์ ๋นํ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์๋ง๋ ์ฐ๋ฆฌ๋ ngx-translate๋ง์ ์ฌ์ฉํ ๊ฒ์ ๋๋ค.
@vekunz ์ค์ ํ ๊ฒฝํ์ ๋ฌด์์ ๋๊น?
@marcelnem i18n-polyfill๊ณผ ํจ๊ป ngx-translate๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. i18n-polyfill์ angular-i18n์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
i18n-polyfill์ ์ค์ ์ ์ค์ ๋ก ๋งค์ฐ ์ฌ์ ์ต๋๋ค. ๋ฌธ์์กฐ์ฐจ ์ ํํ์ง ์์ต๋๋ค. ๋ฌด์์ ๋ณ๊ฒฝํด์ผ ํ๋์ง ๋งค์ฐ ๋น ๋ฅด๊ฒ ์์๋์ต๋๋ค.
@vekunz ์ด์ ์ดํดํ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค. i18n-polyfill์ ๋ชฉ์ ์ด ๋ฌด์์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๊ณต์ angular i18n๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก http://myapp/en , http://myapp/de , http://myapp/fr ,... ์๋์ ์ฑ์ ์ฌ๋ฌ ๋ฒ ๋น๋ํ๊ณ ์ฌ๋ฌ ๋ฒ ๋ฐฐํฌํด์ผ ํฉ๋๊น?
@marcelnem ๋ค, i18n-polyfill๋ ์ฌ๋ฌ ๋น๋๊ฐ ํ์ํฉ๋๋ค. ๋ชฉ์ ์ angular-i18n์ ์ฌ์ฉํ๋ฉด ํ์ฌ html ํ
ํ๋ฆฟ ๋ด๋ถ์์๋ง ๋ฒ์ญ์ ์ฌ์ฉํ ์ ์๊ณ ํ์ดํ์คํฌ๋ฆฝํธ ์ฝ๋ ๋ด๋ถ์์๋ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์
๋๋ค. i18n-polyfill์ angular-i18n์ ํ์ฅํ์ฌ ํ์ดํ์คํฌ๋ฆฝํธ ์ฝ๋ ๋ด๋ถ์์๋ ๋ฒ์ญ์ ์ฌ์ฉํฉ๋๋ค.
Angular 9(๊ฐ์ ์ถ์ ์์ )์์๋ angular-i18n์ด typescript ๋ด๋ถ์ ๋ฒ์ญ๋ ์ง์ํ์ง๋ง ๊ทธ ๋์์๋ ์ด๋ฅผ ์ํด i18n-polyfill์ด ํ์ํฉ๋๋ค.
@vekunz ์ด์ ๋ํด ์ข ๋ ์์ธํ ์ค๋ช ํ ์ ์์ต๋๋ค. "๋ฌธ์๊ฐ ์ ํํ์ง ์์๋ ๋ณ๊ฒฝํด์ผ ํ ์ฌํญ์ ๋งค์ฐ ๋น ๋ฅด๊ฒ ์์๋์ต๋๋ค." ๋๋ ์๋ง๋ ๋ค์ ์ฃผ์ i18n-polyfill์ ์กฐ์ฌํ ๊ฒ์ด๋ฏ๋ก ๋ชจ๋ ์ ๋ณด๋ฅผ ๋์ด ํ๊ฐํ ๊ฒ์ ๋๋ค. ๊ณ ๋ง์
@halilovicedvin @marcelnem ์ด GitHub ๋ฌธ์ ์ ์ฃผ์ ์ฃผ์ ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ์ค๋ช ํ๋ pastebin ๋ฌธ์๋ฅผ ๋ง๋ค์์ต๋๋ค. https://pastebin.com/Xib6X6E9
@ocombe xi18n ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฒด ํ๋ก์ ํธ/๋ฆฌํฌ์งํ ๋ฆฌ๊ฐ ์๋ src ํด๋(๋ฒ์ญ ์์ฑ์ฉ)๋ก๋ง ์ ๋ ฅ ๊ฒฝ๋ก๋ฅผ ์ ํํ ์ ์์ต๋๊น?
@ocombe Ivy๋ Angular 8์์ ์ฌ๋ฌ ๋ก์ผ์ผ์ ์ง์ํฉ๋๊น(์ธ์ด ํ์ผ์ด ์๋ ๋ก์ผ์ผ ์ ์๋ง, ์๋ฅผ ๋ค์ด ๋ ์ง ํ์ดํ์ฉ)? ๋ค๋ฅธ ํ์ ํ์ฌ ngx-translate์ ํจ๊ป Angular๋ฅผ ์ฌ์ฉํ์ง๋ง ํ ํ์ฌ ๊ตฌ์ฑ ์์์๋ ์ฌ๋ฐ๋ฅธ ๋ก์บ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ํ ๊ฐ์ง ์ต์ ์ prod ๋ชจ๋์์ JIT ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด์ง๋ง ์ด๊ฒ์ ๊ทธ๋ค์ง ์ข์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ํ ๋ชจ๋ ์ธ์ด์ ๋ํด ์ ๋ฒ๋ค์ ์ปดํ์ผํ ์๋ ์์ต๋๋ค. ์ด๋ ๋๋ฌด ๋ง์ ์์ ์ด ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
@vekunz ์๋์ ์ฌ๋ฌ ๋ก์ผ์ผ์ ์ค์ ํ ์ ์์ต๋๋ค. ๊ฐ ์ปดํ์ผ๋ ๋ฒ๋ค์ ๋ํ ๋ก์ผ์ผ์ ์ค์ ํด์ผ ํฉ๋๋ค(cli ๊ตฌ์ฑ ํ์ผ์์ ์ค์ ํ ์ ์์)
๋น์ ์ด ๋ฃ๊ณ ์ถ์ด ํ๋ ๊ฒ์ด ์๋๋ผ๋ ๊ฑธ ์์์, ํ์ง๋ง ์ง๊ธ์ ๊ทธ๋ ์ฃ
@ocombe ๋ง์ํด ์ฃผ์๊ฒ ์ต๋๊น ? Angular ํ์ด ๋ฌธ์ ๋ก ์๋ณํ์ง ์๋๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง ๊ฐ๊น์ด ์ฅ๋์ Angular๋ฅผ ์ฌ์ฉํ๋ฉด ์ฑ์ ๋ค์ ๋ก๋ํ์ง ์๊ณ ๋ ๋ฐํ์์ ์ธ์ด๋ฅผ ๋ณ๊ฒฝํ ์ ์์ผ๋ฏ๋ก ๋ฒ์ญ์ ํ๋์ ๋ฒ๋ค๋ก ์ฌ๋ฐ๋ฅธ ๋ฒ์ญ์ ๋ก๋ํ๊ณ ํ ์คํธ ๋ฆฌํฐ๋ด๊ณผ ๋ฐ์ธ๋ฉํ ์ ์์ต๋๊น?
๋ฒ๋ค ํ๋๊ฐ ์์ผ๋ฉด ๊ฐ๋ฅํ์ง๋ง ๋ฒ์ญ์ ๋ถ์คํธ๋ฉ์์ ๋ก๋๋ฉ๋๋ค(์ฑ์ด ๋ก๋๋ ๋). ๊ธฐ์กด ์ํคํ
์ฒ๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฏธ ๋ฒ์ญ์ ์ฌ์ฉํ๋ ๊ตฌ์ฑ ์์๋ฅผ ๋ค์ ๋ก๋ํ์ง ์๊ณ ๋ฒ์ญ์ "ํซ" ๋ค์ ๋ก๋ํ๋ ๊ฒ์ด ๋งค์ฐ ๋ณต์กํฉ๋๋ค.
์ด๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค๊ณ ๋งํ๋ ๊ฒ์ ์๋์ง๋ง ๋ถํํ๋ ๊ฐ๊น์ด ๋ฏธ๋์ ๊ทธ๋ฐ ์ผ์ด ์ผ์ด๋ ๊ฒ์ด๋ผ๊ณ ๋ณด์ง๋ ์์ต๋๋ค.
๋น ๋ฅธ ์๋ต์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค @ocombe :) ์ข์ ์ผ์ ๊ณ์ํ์ญ์์ค :+1:
@ocombe๊ฐ i18n๊ณผ Ivy์ ๋ํด ์ด์ผ๊ธฐํ ์ผ๋ถ Angular Conference( AngularConnect ๋ก ์๊ฐํจ)์ ํ๋ฆฌ์ ํ ์ด์ ์ด ์์๊ณ ๊ทธ๊ณณ์์ ๊ทธ๋ ์ด๊ฒ์ด ์ ๊ทธ๋ ๊ฒ ๋ณต์กํ์ง์ ๋ํด ์์ฃผ ํ๋ฅญํ๊ฒ ์ค๋ช ํ์ต๋๋ค. ๋น๋์ค๋ฅผ ์ฐพ์ผ๋ ค๊ณ ํ ์ ์์ต๋๋ค.
์ฐพ์ ๊ฒ ๊ฐ์์ https://www.youtube.com/watch?v=miG-ghJhFPc
ivy์ ํจ๊ป ๋ฐํ์ i18n์ ๊ธฐ๋ค๋ฆฌ๋ ์ฌ๋๋ค์ ์ํด v9์ ๋ํ ํ์ฌ ๊ณํ์ ๋ฒ์ญ์ด ivy์ ํจ๊ป ์๋ํ์ง๋ง ๋น๋ ๋จ๊ณ๋ก๋ง ์ํ๋๋ ๊ฒ์ ๋๋ค(์ง๊ธ ๋ณด๊ธฐ ์์ง์ด ์๋ ๊ฒ์ฒ๋ผ). ์ด๊ฒ์ ํ์ฌ๋ก์๋ ์ฌ์ ํ 1 ๋น๋/๋ก์ผ์ผ์ด ๋ ๊ฒ์ด๊ณ ์ฝ๋ ๋ฒ์ญ์ ์์ ๊ฒ์์ ์๋ฏธํฉ๋๋ค(ํ ํ๋ฆฟ ๋ฒ์ญ๋ง).
๋ฒ๋จธ. ๊ธ์, ๊ฐ์น์๋ ์ผ์ ๋ํด ์ด์ฌํ ์ผํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
@ocombe ๋ฐํ์ ์ฝ๋ ๋ฒ์ญ์ ์ํด ํด๋ฆฌํ์ ๊ณ์ ์ ์งํ์๊ฒ ์ต๋๊น?
๊ทธ๊ฒ์ด ๊นจ์ง๋ฉด ์, ๋๋ ๊ทธ๊ฒ์ ์๋ก์ด ๊ฒ์ ์ถ๊ฐํ์ง ์์ ๊ฒ์ ๋๋ค.
i18n์ด ๊ทธ๋ ๊ฒ ์ค๋ซ๋์ 2๋ฑ ์๋ฏผ์ด์๋ค๋ ๊ฒ์ ์ ๋ง ์ง์ฆ๋๋ ์ผ์ ๋๋ค... ๋ชจ๋ ์ฌ๋์ด ๋ค์ดํฐ๋ธ ์์ด ๋ก์ผ์ผ ํ๊ฒฝ์์ ์ผํ๋ ๊ฒ์ ์๋๋๋ค. ):
๊ธ์์, ์ ๋ Angular๋ฅผ ์ํ ์๋กญ๊ณ ๊ฐ๋ ฅํ i18n ์๋ฃจ์
์ ๊ฐ๋ฐํ ์ ์๋๋ก ์ ๋ฅผ ํ์ํด ์ค ๋ช๋ช ํ์ฌ๋ฅผ ์ฐพ๊ณ ์๋ค๋ ์ ์ ๋์ํฉ๋๋ค(์ ๋ ๋ง์ ์์ด๋์ด๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค).
๊ด์ฌ์์ผ์ ๋ถ๋ค์ด ์๊ฐ๋์๋ฉด ํธ์ํฐ(@ocombe)๋ ์ด๋ฉ์ผ([email protected])๋ก ์๋ ค์ฃผ์ธ์ ๐
@ocombe ๋
ธ๊ณ ์๋ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๐ ํ์ ๋ ๋์ผ ํ๋ ์กฐ๊ธ ์์ธ์ ์์์
๋๋ค. I had to ...
๋ง์ํ์ ๊ฒ์ฒ๋ผ ์ฃผ๋ ์ด์ ๊ฐ ๋ฌด์์ธ์ง ์ง์ ๋ฌผ์ด๋ณด๊ฒ ๋ฉ๋๋ค. ๋๋ ๊ทธ๋ฐ ๊ฐ์ ์ ์ธ ์์์ ์ถ์ธก์ ์ซ์ดํฉ๋๋ค. ๊ทธ๋์ ๋น์ ์๊ฒ ๊ทธ๋ฐ ์ง์ ์ ์ธ ์ง๋ฌธ์ ํ๋ ๊ฒ์
๋๋ค.
์ ๋ Google์ ์ ๊ท์ง ์ง์์ด ์๋๋ผ Angular ํ๊ณผ ํจ๊ป ์ผํ๋ ์ธ๋ถ ๊ณ์ฝ์์์ต๋๋ค. ๋ฐ๋ผ์ ํ์ด ํ์๋ก ํ๋ ๋ฐ์ ๋ฐ๋ผ ๊ณ์ฝ์ด ์ธ์ ๋ ์ง ์ข
๋ฃ๋ ์ ์์ต๋๋ค.
๊ทธ๋ค์ ํ๋ก์ ํธ๋ฅผ ๋๊ธฐ ์ํด ๋ด๋ถ์ ์ผ๋ก ์๋ก์ด ์ฌ๋๋ค์ ๋ชจ์งํ๊ณ ์์ผ๋ฉฐ i18n ๋ฐ ๊ธฐํ ์ฃผ์ ๋ฅผ ๋์ธ ์ ํฉํ ์ฌ๋๋ค์ ์ฐพ์ ๊ฒ์ด๋ผ๊ณ ํ์ ํฉ๋๋ค. ๋ฐ๋ผ์ Angular์ ๋ฏธ๋์ ๋ํด ๊ฑฑ์ ํ ํ์๊ฐ ์์ต๋๋ค :visage_lรฉgรจrement_souriant: ๊ทธ๊ฒ์ ๋จ์ง ์ผ์์ ์ธ ์ข์
@ocombe ์ค๋ช ๊ฐ์ฌํฉ๋๋ค.
enums ๋๋ const ๋ฐฐ์ด ๋๋ .model.ts ํ์ผ๊ณผ ๊ฐ์ ํด๋์ค ์ธ๋ถ์์ i18n(i18n-polyfill)์ ์ด๋ป๊ฒ ์ฌ์ฉํ ์ ์๋์ง ์๋ ค์ฃผ์ค ์ ์๋์?
์์์ ๊ฒฝ์ฐ ์ฌ์ ํ ํด๋์ค์ ๋ฃ์ต๋๋ค. ๋๋ ์ด๋ค ๋์์ ๋ชจ๋ฅธ๋ค :/
@ocombe ngx-translate, i18npolyfill ๋ฐ Angular ํ๊ณผ ํจ๊ป Angular์ฉ i18n์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ๋
ธ๋ ฅ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์ฐ๋ฆฌ๋ ์ค์ํ์ง ์์ ์์ฉ ํ๋ก๊ทธ๋จ์์ ์๊ตฌํ๋ ๋๋ก ์ฌ์ฉ์์๊ฒ ๋ฒ์ญ์ ์ ๊ณตํ๊ธฐ ์ํด ๋งค์ผ ๊ทํ์ ์์
์ ์ฌ์ฉํฉ๋๋ค.
์์ผ๋ก ํ์๋ ์ผ์ ํ์ด์ ๋น๋๋ค.
์์์ ๊ฒฝ์ฐ ์ฌ์ ํ ํด๋์ค์ ๋ฃ์ต๋๋ค. ๋๋ ์ด๋ค ๋์์ ๋ชจ๋ฅธ๋ค :/
ํ .. ํด๋์ค๋ก ์ฎ๊ธฐ๋ฉด ๋ณ์๋ฅผ ์ ์ ์ผ๋ก ๋ง๋ค์ด์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ i18n์ ์ ์ ๋ณ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ด๋ณด๋ด๊ธฐ ํด๋์ค ์ {
์์ฑ์(๋น๊ณต๊ฐ i18n: I18n) {}
์ ์ ๋ณ์ = i18n('ํ
์คํธ'); // i18n์ ํด๋์ค์ ์ ์ ์ด ์๋๋ฏ๋ก ์ฌ๊ธฐ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
}
์ฌํ ์์์ ๋๋ค... ์ด๊ฒ์ Angular๋ฅผ "์ฝํ์ํต๋๋ค"... ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋งํ๋ฏ์ด ํฐ ์ผ์ ํด์ค @ocombe ์๊ฒ ํฐ ๊ฐ์ฌ๋ฅผ ๋๋ฆฝ๋๋ค. ํ์ด์ ๋น๋๋ค!
ngx-translate ์ฌ์ฉ์ ๋จ์ ์ด ๋ฌด์์ธ์ง ๊ถ๊ธํฉ๋๋ค. ์ฌ๋๋ค์ด ์ํ๋ ๊ธฐ๋ฅ์ ๋ฑ ๋ง๋ ๊ฒ ๊ฐ๋ค.
๋จ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ง์ ๋ถ๋ค์ด ์ด์ฉํ์๊ธฐ์ ๋ฑ ์ข์ ๊ฒ ๊ฐ์์^^
Angular๊ฐ ์ ๊ทผ์ฑ์ ํฅ์์ํค๊ณ ํฌ์ํ์ง๋ง ํด๋น ํจํค์ง์ ์ธ์ด๋ฅผ ํฌํจํ์ง ์๋ ๋ฐฉ๋ฒ์ด ๊ถ๊ธํฉ๋๋ค. ์ด๊ฒ์ ๋จ์ผ ์ธ์ด ํ๊ฒฝ์์ ๋ด๋ฆฐ ๊ฒฐ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก 3-4๊ฐ ์ธ์ด๋ฅผ ์ํธ ๊ตํ์ ์ผ๋ก ์ ๊ณตํด์ผ ํ๋ ํ๊ฒฝ์์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ๋ถ๋ช ํ ์ด์ ์ด ์๋ค๋ ๋ฐํ ์ดํ๋ก ์ด ๊ธฐ๋ฅ์ ๋ฆด๋ฆฌ์ค๋ฅผ ์ฐธ์์ฑ ์๊ฒ ๊ธฐ๋ค๋ ค ์์ต๋๋ค. ์ด ๋ด์ค๋ฅผ ํตํด ๋ฒ์ญ์ ์์ ํ ๊ด๋ฆฌํ๊ธฐ ์ํ ์ ๋ต์ ์ฌ๊ณ ํด์ผ ํฉ๋๋ค.
@ocombe Google์ด ๋น์ ์ ๊ณ์ฝ์๋ก ๊ณ ์ฉํ ๊ฐ๋ฅ์ฑ์ ์๋์?๐
@DmitryEfimenko ์ฐ๋ฆฌ๋ ํ์ฌ ngx-translate ๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ๋งค์ฐ ๋ง์กฑํฉ๋๋ค.
@ocombe Google์ด ์ธ๋ถ ๊ฐ๋ฐ์/์ปค๋ฎค๋ํฐ๋ก๋ถํฐ ์ด ๊ธฐ๋ฅ์ ์๋ฝํ ๊ฐ๋ฅ์ฑ์ ๋ฌด์์ ๋๊น? ์ฐ๋ฆฌ๊ฐ ๋๋ฌด ์ค๋ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ ๊ฐ์์.
๋น์ ์ด ๊ทธ๊ฒ์ ๋ํด ์ง์งํ๊ณ ๊ทธ๊ฒ์ ๋ํด ์์ ํ๋ ๋ฐ ์๊ฐ์ ๋ณด๋ด๊ณ ์ถ๋ค๋ฉด ๊ทธ๋ค์ด ์ด ๊ธฐ๋ฅ์ ๋ํด ์์ ํ๋ ๋ฐ ๋์์ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค.
๋น์ ์ด ๊ทธ๊ฒ์ ๋ํด ์ง์งํ๊ณ ๊ทธ๊ฒ์ ๋ํด ์์ ํ๋ ๋ฐ ์๊ฐ์ ๋ณด๋ด๊ณ ์ถ๋ค๋ฉด ๊ทธ๋ค์ด ์ด ๊ธฐ๋ฅ์ ๋ํด ์์ ํ๋ ๋ฐ ๋์์ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค.
@ocombe @IgorMinar Ivy i18n์ ์ํด ์์๋ด์ฌ๋ฅผ ํ๊ณ ์ถ์๋ฐ ๊ธฐํ๊ฐ ์์ผ๋ฉด ์๋ ค์ฃผ์ธ์.
๋น์ ์ด ๊ทธ๊ฒ์ ๋ํด ์ง์งํ๊ณ ๊ทธ๊ฒ์ ๋ํด ์์ ํ๋ ๋ฐ ์๊ฐ์ ๋ณด๋ด๊ณ ์ถ๋ค๋ฉด ๊ทธ๋ค์ด ์ด ๊ธฐ๋ฅ์ ๋ํด ์์ ํ๋ ๋ฐ ๋์์ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค.
๊ธฐ๊บผ์ด ๊ธฐ์ฌํ๊ณ ์ถ์ง๋ง ์์ ์ ๋ฒ์์ ๋ณต์ก์ฑ์ ์ ํ ๋ชจ๋ฆ ๋๋ค. ์๋ณธ ๋ฉ์์ง์ ๋ชฉ๋ก์ ์ฌ์/์๊ตฌ์ฌํญ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๊น?
์๋์, ์ด ๋ชฉ๋ก์ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค.
๋ ๋ถ์ ๊ด์ฌ์ ํ์ ์ ๋ฌํ์ฌ ์ด๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ํ์ธํ ์ ์๋๋ก ํ๊ฒ ์ต๋๋ค.
@ocombe 2๋ช ์ด์์ธ ๊ฒ ๊ฐ์์.
Angular ํ์์ ํ์ํ ๊ฒ์
ํด๋น ์ปค๋ฎค๋ํฐ์ ํจ๊ป โโ๊ฐ๋ฐ์ ์กฐ์งํ๊ณ ์์ ์ ๋ถํ ํ ์ ์์ต๋๋ค.
https://hackmd.io/UfFN_wyVT-Ob1p70nA3N_Q?view ์์ ๋ด๊ฐ ์๊ณ ์๋ ๊ฒ์ด ์์ต๋๋ค.
@fetis ์์ ์ ๋๋ฌด ๋ง์ด ๋ถํ ํ๋ ๊ฒ์ ์ข์ ์๊ฐ์ด ์๋ ์ ์์ต๋๋ค. ํนํ ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ ์ผ๋ถ ํต์ฌ ์์ ์ ๊ฒฝ์ฐ ํต์ ๋ฐ ์ปจํ ์คํธ ๊ณต์ ์ ๋ง์ ๋น์ฉ์ด ๋ญ๋๋ค.
์ฌ์ ํ ๋๋ XLIFF๊ฐ ํ๋ก๋ก ๋์ด๋ฉ๋๋ค(๋๋ ์คํ๋ ค ngx-translate์ ๋ํ ๋ถ์กฑ์ ๋จ์ ์ ๋๋ค). Google ๋ฒ์ญ ๋ฐ ๊ธฐํ Google ์๋น์ค๋ ๋ฒ์ญ ๋ฌธ์์ด์ JSON ํํ์ธ ARB ํ์ผ์ ์ฌ์ฉํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฐ๋ฆฌ๋ INTL์ด ARB ํ์ผ๋ก ๊ตฌํ๋๋ Flutter/Dart๋ก ๋ชจ๋ฐ์ผ ์ฑ์ ๊ตฌ์ถํ์ต๋๋ค. Angular ํ์ด ์ด๋ฅผ ๊ฒํ ํ ๋ Google ์ํ๊ณ์ ๋ค๋ฅธ ํญ๋ชฉ๊ณผ ๋ ๋์ ์ํธ ์ด์ฉ์ฑ์ ์ํด ์ด๊ฒ์ ๊ณ ๋ คํ๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
์์ ์ ๋๋ฌด ๋ง์ด ๋ถํ ํ๋ ๊ฒ์ ์ข์ ์๊ฐ์ด ์๋ ์ ์์ต๋๋ค. ํนํ ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ ์ผ๋ถ ํต์ฌ ์์ ์ ๊ฒฝ์ฐ ํต์ ๋ฐ ์ปจํ ์คํธ ๊ณต์ ์ ๋ง์ ๋น์ฉ์ด ๋ญ๋๋ค.
๋์ํ์ง๋ง ์ด ์ ์ฒด๋ฅผ ํ ์ฌ๋์ด ํฉ๋ฆฌ์ ์ธ ์๊ฐ์ ์ ๋ฌํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฒ์๊ฐ ๋๋ฌด ํฝ๋๋ค.
์์ ์ ๋๋ฌด ๋ง์ด ๋ถํ ํ๋ ๊ฒ์ ์ข์ ์๊ฐ์ด ์๋ ์ ์์ต๋๋ค. ํนํ ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ ์ผ๋ถ ํต์ฌ ์์ ์ ๊ฒฝ์ฐ ํต์ ๋ฐ ์ปจํ ์คํธ ๊ณต์ ์ ๋ง์ ๋น์ฉ์ด ๋ญ๋๋ค.
๋์ํ์ง๋ง ์ด ์ ์ฒด๋ฅผ ํ ์ฌ๋์ด ํฉ๋ฆฌ์ ์ธ ์๊ฐ์ ์ ๋ฌํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฒ์๊ฐ ๋๋ฌด ํฝ๋๋ค.
@fetis ํจ๊ป ์ผํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ํ๋ก์ ํธ์์ angular i18n์ ์ฌ์ฉํ๊ณ ์ถ์ง๋ง ๋งค์ฐ ์ ํ์ ์ ๋๋ค.
๋ ๋ถ์ ๊ด์ฌ์ ํ์ ์ ๋ฌํ์ฌ ์ด๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ํ์ธํ ์ ์๋๋ก ํ๊ฒ ์ต๋๋ค.
@ocombe Angular ํ์ ํผ๋๋ฐฑ์ด ์์ต๋๊น?
๋๋ ๊ทธ๋ค์๊ฒ ์๋ ธ๊ณ ๊ทธ๋ค์ ๊ด์ฌ์ด ์๋ ๊ฒ ๊ฐ์์ง๋ง ์ธ๋ถ์ ๋์์ ๋ฐ๊ธฐ ์ ์ ์ด ๋ชจ๋ ๊ฒ์ ๋ํ ๊ตฌ์ฒด์ ์ธ ๊ณํ์ ์ธ์์ผ ํฉ๋๋ค(๊ทธ๋ ์ง ์์ผ๋ฉด ํ์ํ ์์
์ ์ํํ์ง ๋ชปํ ๊ฒ์
๋๋ค).
@petebacondarwin ์ด ์ง๊ธ๋ถํฐ ์ธ์ํฉ๋๋ค.
@ocombe ์๋ ํ์ธ์. ์ ๋ ์๊ฒฌ์ ์ดํด๋ณด๊ณ ์์๊ณ *ngFor์์ ์ฌ์ฉํ๋ ๋์ i18n ํ๊ทธ์ ๋ํ ๋์ ID๋ฅผ ์์ฑํ๋ ์กฐํญ์ด ์ฌ์ ํ ์๋ค๋ ๊ฒ์ ๋๋ต์ ์ผ๋ก ์ดํดํ์ต๋๋ค. ๋ค๋ฅธ ์ต์ ์ด๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ๋๋ ngx-translate๋ง ์ฌ์ฉํด์ผ ํฉ๋๋ค.
@swapnilvaidankar ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
@swapnilvaidankar - ์ด๊ฒ์ด ๋ฌด์์ ์๋ฏธํ๋์ง ์ค๋ช ํด ์ฃผ์๊ฒ ์ต๋๊น?
*ngFor์์ ์ฌ์ฉํ๋ ๋์ i18n ํ๊ทธ์ ๋ํ ๋์ ID ์์ฑ
์๋ค์ํผ, ์ ์ ํ ์คํธ๋ฅผ ๋ค๋ฅธ ์ธ์ด๋ก ๋ฒ์ญํ๋ ค๋ฉด ์๋์ ๊ฐ์ด HTML ์์ ํ๊ทธ์์ i18n ์์ฑ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
<h1 i18n = "Card Header | Title for the under construction card@@constructionheader">Under Construction</h1>
์๋์ ๊ฐ์ด xlf ํ์ผ ์ค๋ํซ์ ์์ฑํ๊ณ ๋ชจ๋ ์ธ์ด์ ๋ํ ๋์์ ์ค์ ํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์์ ํ๋์ค์ด๋ก ์๋์ ๊ฐ์ด ๋ฒ์ญํ์ต๋๋ค.
<trans-unit id="constructionheader" datatype="html">
<source>Under Construction</source>
<target>En construction</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.html</context>
<context context-type="linenumber">3</context>
</context-group>
<note priority="1" from="description"> Title for the under construction card</note>
<note priority="1" from="meaning">Card Header </note>
</trans-unit>
ํ์ง๋ง ๋๋กญ๋ค์ด ๋ชฉ๋ก์ ๊ฒฝ์ฐ i18n ์์ฑ์ ์ฌ์ฉํ๊ธฐ ์ด๋ ค์ธ ๊ฒ ๊ฐ์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋ช
ํจ, ์ ๋จ์ง ๋ฐ ์์ฑ
์์ ๊ฐ์ ์ ํ ๋ชฉ๋ก์ ๋๋กญ๋ค์ด ๋ชฉ๋ก์ด๋ ๋จ์ ๋ชฉ๋ก์ ํ์ํ๋ ค๋ฉด ์ด๋ป๊ฒ ๋์ ID๋ฅผ ์์ฑํ ์ ์์ต๋๊น?
์ด ๋ฐฉ๋ฒ์ ์๋ํ์ง๋ง,
์๋์ ๊ฐ์ด xlf ํ์ผ ์ค๋ํซ์ ์์ฑํ๊ณ ์ด๊ฒ์ ์ฌ์ฉํ์ฌ ์ ํ ์ด๋ฆ์ ๋ค์์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ์ธ์ด๋ก ๋ฒ์ญํ๋ ๋ฐฉ๋ฒ์ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
<trans-unit id="product" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ product }}"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/product/product.component.html</context>
<context context-type="linenumber">6</context>
</context-group>
<note priority="1" from="description"> product name from List</note>
<note priority="1" from="meaning">product name </note>
</trans-unit>
์ฌ๊ธฐ์ ๋ฌธ์ ๋ ์์ด๋๊ฐ ๋ณด์ด๋ฉด
๋์ ์ฝํ ์ธ ๋๋ ์ฝํ ์ธ ๋ชฉ๋ก์ ์ฒ๋ฆฌํ ๋๋ง๋ค ์ด๋ฅผ ๋ฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์์ธํ ์ค๋ช
์ฃ์กํฉ๋๋ค.
์ฌ๊ธฐ์์ ๋ฌธ์ ๋ฅผ ์ดํดํ์
จ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๊ฐ์ฌ ํด์,
์ค์๋
๊ทธ ๋ฌธ์ ๋ฅผ ์ด โโ์ ์์ต๋๊น? ์ด๊ฒ์ ์ฌ๊ธฐ์์ ์ค์ ๋ก ์ฃผ์ ๊ฐ ์๋๋ฉฐ ๋ค๋ฅธ ์ฌ๋์ด ๋์ผํ ๊ฒ์ ์ฐพ๊ณ ์๋ค๋ฉด ๋ ์ฝ๊ฒ ์ฐพ์ ์ ์์ต๋๋ค.
@swapnilvaidankar i18n ์์ฑ์ ๋์ ์ฝํ ์ธ ๊ฐ ์๋ ์ ์ ํ ์คํธ ๋ฒ์ญ์ ์ํ ๊ฒ์ ๋๋ค. ๊ทํ์ ์์์ "์ ํ"์ ์์ค ์ฝ๋์์ ๊ฐ์ ธ์ค๊ณ (ts ํ์ผ์ ์ ์๋จ) ngx-translate๋ฅผ ์ฌ์ฉํด์ผ ํ๊ฑฐ๋(๋๋ ts ํ์ผ์์ ์ง์ ๋ฒ์ญ๋ ์ ํ ์ด๋ฆ์ด ์์) Http ์์ฒญ์์ ๊ฐ์ ธ์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ฐฑ์๋์์ ๋ฒ์ญ๋ ์ ํ ์ด๋ฆ์ ์ ๊ณตํด์ผ ํฉ๋๋ค.
๋๋ ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์ ๋ํด ์๋ก์ด ๋ฌธ์ ๊ฐ ํ์ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ด๋ฏธ ์ฌ๋ฌ ๋ฒ ์์ฒญํ TS ํ์ผ์ ๋ฐํ์ ๋ฒ์ญ ์์ฒญ์ผ ๋ฟ์ ๋๋ค.
@swapnilvaidankar ์ต์
์๊ฐ ์ ํ๋์ด ์๊ณ ์ด๋ฏธ ์๊ณ ์๋ ๊ฒฝ์ฐ ํ
์คํธ๋ฅผ ๋ ๋๋งํ๋ ๊ฐ๋จํ ngSwitch
๋ก ๊ตฌ์ฑ ์์๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ณ ๋งค๋ ฅ์ฒ๋ผ ์๋ํฉ๋๋ค.
@fetis - ๋ฌธ์ ๋ ์ด๋ฌํ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ๊ฐ ํน์ ๋ฌธ์ ์ ๋ํ ํ ๋ก ์ผ๋ก ๋์ด๊ฐ๋ ๊ฒ์ด ๋งค์ฐ ์ฝ๋ค๋ ๊ฒ์ ๋๋ค. ์ ๋ฌธ์ ๋ฅผ ๋ง๋ค๋ฉด ์ด ๋ฌธ์ ๋ฅผ ๋ฐฉํดํ์ง ์๊ณ ํด๋น ํ ๋ก ์ ๊ณ์ํ ์ ์๋ ์ ์ค๋ ๋๊ฐ ์ ๊ณต๋ฉ๋๋ค.
@fetis ์, ์ด ๋ฌธ์ ๋ ์ฌ๋ฌ ๊ณณ์์ ๋ณด์์ง๋ง ์ ์ ํ ํด๊ฒฐ์ฑ ์ ์ฐพ์ง ๋ชปํ์ต๋๋ค. ngSwitch๋ ๋ฐ๊ฒฌํ์ง๋ง ์ ๊ฒฝ์ฐ์๋ ์ ํฉํ ์๋ฃจ์ ์ด ์๋๋๋ค. ๊ทธ๋ฌ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
@ocombe ๋๋ ์ด๊ฒ์ ์ฌ๊ธฐ๊ฐ ์๋ ๋ค๋ฅธ ๊ณณ์์ ๋ ผ์ํ ๋ฌธ์ ๋ก ๊ฒ์ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๐
์๋ตํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
@petebacondarwin @swapnilvaidankar ์ฌ๊ธฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค https://github.com/angular/angular/issues/11405 ๋น์ ์ด ์ฐพ๊ณ ์๋
2.0.0-rc.6 ์ดํ(!) btw
@ocombe๋ , ์ด ๋ฌธ์ ๊ฐ ์์ง ์ต์ ์ํ์ ๋๊น? Angular 9์์ Ivy๊ฐ ๊ธฐ๋ณธ๊ฐ์ด ๋ ๊ฒ ๊ฐ์์ i18n์ ์ํ๊ฐ ์ด๋ค์ง ๊ถ๊ธํฉ๋๋ค. ์์ฐ ์ค๋น๊ฐ ์ธ์ ์ฏค ๊ฐ๋ฅํ ์ง ์์ํด ์ฃผ์๊ฒ ์ต๋๊น? Angular 9, 10, 11๋ก? Angular 9์ ํจ๊ป ์ ๊ณต๋์ง ์๋ ๊ฒฝ์ฐ Angular 9(๋ฐ Ivy)๋ i18n ์์ด ๋ฐฐ์ก๋ฉ๋๊น ์๋๋ฉด ์ด์ i18n์ ์ฌ์ฉํ ๊ฒ์ ๋๊น?
ํ์ฌ ์ํ์ ๋ํ ์ถ๊ฐ ์ ๋ณด๋ ์ด (https://github.com/angular/angular/issues/11405) ๋ฌธ์ ์์ ์ฐพ์ ์ ์์ต๋๋ค. ํ์ฌ ์ํ์ ๋ํด ์ด ํธ์์ ์ฝ์ ๊ฐ์น๊ฐ ์๋ ์ค๋ช :
๋ํ ์ด๊ฒ์ ํ์ธํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
v9์์ ์ค์์น๋ฅผ ์ ํํ์ฌ ๊ธฐ๋ณธ๊ฐ์ด ivy๋ฅผ ์ฌ์ฉํ๋๋ก ํ๊ณ ์์ง๋ง ์์ ํ ์๋ํ์ง ์๋ ์ฌ๋ฌ ์๋๋ฆฌ์ค๊ฐ ์์ ์ ์์ผ๋ฉฐ ํด๋น ํ๋ก์ ํธ๋ ํ์ฌ ๋ณด๊ธฐ ์์ง์ ๊ณ ์ํ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค.
์ฐ๋ฆฌ๋ v9.0.0 ๋ฆด๋ฆฌ์ค๋ฅผ ์ํด i18n์ ์์ํ๊ณ ์คํํ๊ธฐ ์ํด ๋
ธ๋ ฅํ๊ณ ์์ง๋ง ๋นก๋นกํ ๊ฒ์
๋๋ค.
"๋ฐํ์ i18n(๋ชจ๋ ๋ก์ผ์ผ์ ๋ํ ํ๋์ ๋ฒ๋ค)"์ ํ์ฌ ์ํ๋ ๋ฌด์์ ๋๊น?
@Ivajkin - ์ด ๋ฌธ์ ๊ฐ ์ต์ ์ํ๋ก ์ ์ง๋์ง ์์ ์ ๊ฐ์ ๋๋ค.
"๋ฐํ์ i18n"์ ์ผ๋ฐ์ ์ผ๋ก ์๊ตฌ๋๋ ๊ธฐ๋ฅ์ด์ง๋ง ์ฌ๋์ ๋ฐ๋ผ ์๋ฏธ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค.
์๋ก์ด i18n $localize
์ ๊ทผ ๋ฐฉ์์์๋ ๋ฐํ์์ ์ค์ ๋ฒ์ญ์ ์ํํ ์ ์์ต๋๋ค.
Angular ์ ํ๋ฆฌ์ผ์ด์ ๋ถํธ์คํธ๋ฉ ์ ์ ๊ฐ๋ฅํ ๋ชจ๋ ๋ฉ์์ง๋ฅผ ๋ฒ์ญํ์ง ์๋ ๊ฒฝ์ฐ ๋ฐํ์์ ์ค์ ๋ก ๋ค์ ๋ณต์กํ ์ ์์ต๋๋ค. ์ด ์์ ์ ์ํํ๋ ๊ฒฝ์ฐ ์ปดํ์ผ ์๊ฐ ๋ณํ์ ๋ํ ์๋ก์ด ์ ๊ทผ ๋ฐฉ์์ด ํ์ํ ๊ฒ์ผ ์ ์์ต๋๋ค.
์๋ก์ด i18n์์ ๋ฒ์ญ์ Angular ์ปดํ์ผ๋ฌ๊ฐ ์๋๋ผ ๋น๋ ํ์ดํ๋ผ์ธ์ ๋งจ ๋์์ ๋ฐ์ํฉ๋๋ค. ์ฆ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ์์ ๋ฒ์ญ๋์ง ์์ ๋ฉ์์ง๋ฅผ ์ ๊ณตํ ์ ์์ด์ผ ํ๋ฉฐ ์ต์ข ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ํ ๋๋ง ๋ฒ์ญ์ ์ํํ ์ ์์ด์ผ ํฉ๋๋ค.
์ด๊ฒ์ ๋ชจ๋ v9.0.0์์ ์์ ์ค์ ๋๋ค.
https://github.com/angular/angular/tree/master/packages/localize ์์ ์ฐ๋ฆฌ์ ์์น๋ฅผ โโํ์ธํ์ธ์.
@petebacondarwin ์๋ก์ด ์ปดํ์ผ ์๊ฐ ๋ฒ์ญ์ ๋ํด ์กฐ๊ธ ๋ ์์ธํ ์ค๋ช ํด ์ฃผ์๊ฒ ์ต๋๊น? ์ด๋ฅผ ํตํด ๋ชจ๋ ๋ก์ผ์ผ์์ ์๋ํ๋ ๋จ์ผ ๋ฒ๋ค(AOT ํฌํจ)์ ๊ตฌ์ถํ ์ ์์ต๋๊น?
์๋ก์ด ์ ๊ทผ ๋ฐฉ์์์๋ Angular ์ปดํ์ผ๋ฌ ๋ด์์ ๋ฒ์ญ์ ์ํํ๋ ๋์ ์ ์ญ $localize
ํ
ํ๋ฆฟ ๋ฌธ์์ด ํ๊ทธ ํธ๋ค๋ฌ ๋ฅผ ํตํด ๋ฒ์ญํด์ผ ํ๋ ๋ฉ์์ง์ "ํ๊ทธ"๋ฅผ ์ง์ ํฉ๋๋ค. ์ด๋ฌํ ํ๊ทธ๊ฐ ์ง์ ๋ ๋ฌธ์์ด์ ๋ฒ๋ค๋ง ๋ฐ ์ถ์์ ๋ชจ๋ ๋ฐฉ์์ ์ ์งํ๋ฏ๋ก ๋น๋ ํ์ดํ๋ผ์ธ์ด ๋๋ ๋ ์ฌ์ ํ ์กด์ฌํ๊ณ ๊ฒ์ํ ์ ์์ต๋๋ค. ์ด ํ์ผ์ ๋ค๋ฅธ ํ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ํฌํจํ๊ธฐ ์ํด ๋ณด๋ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฒ๋ค์ผ ์ ์์ต๋๋ค!
์ด์ ๋ช ๊ฐ์ง ์ต์ ์ด ์์ต๋๋ค.
a) ์ด๋ฌํ ํ๊ทธ๊ฐ ์ง์ ๋ ๋ฉ์์ง๋ฅผ ์ ์ ์ผ๋ก ์๋ณํ๊ณ ๋ฒ์ญ์ผ๋ก ๋์ฒดํ๋ ๋๊ตฌ๋ฅผ ์คํํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด JavaScript์์ $localize
์ฐธ์กฐ๊ฐ ํจ๊ณผ์ ์ผ๋ก ์ ๊ฑฐ๋๊ณ ๋ฐฐํฌ๋ฅผ ์ํ ์ต์ํ์ ์ฝ๋ ๋ฒ๋ค๋ง ๋จ๊ฒ ๋ฉ๋๋ค. ์ด "์ปดํ์ผ ํ์ ์ธ๋ผ์ด๋" ๋๊ตฌ๋ ์ฌ๋ฌ ๋ฒ์ญ์ ์ํํ๊ณ ๋ฒ์ญํ๋ ๊ฐ ์ธ์ด์ ๋ํ ๋ฒ๋ค ์ฌ๋ณธ์ ์์ฑํ ์ ์์ต๋๋ค. ๋น๋ ํ์ดํ๋ผ์ธ์ ๋งจ ๋์์ ์คํํ ์ ์์ผ๋ฏ๋ก ์ง์ํ๋ ๋ชจ๋ ์ธ์ด์ ๋ํด ๋น๋์ ๋ค๋ฅธ ์ธก๋ฉด์ ์คํํ ํ์๊ฐ ์์ต๋๋ค.
b) $localize
ํ๊ทธ๊ฐ ๋ธ๋ผ์ฐ์ ์์ ์คํ๋๋ ์ฝ๋์์ ๋๋๋๋ก ํ์ฉํ๊ณ $# $localize
๊ตฌํ์ ์ฌ์ฉํ์ฌ ๋ฐํ์์ ๋ฉ์์ง๋ฅผ ๋ฒ์ญํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๋จ์ ์ $localize
ํธ์ถ์ ๋ฌผ๋ก $localize
๋ฒ์ญ ๊ตฌํ๋ ํฌํจํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ์ ๋ํ ํ์ด๋ก๋๊ฐ ๋ ํฌ๋ค๋ ๊ฒ์
๋๋ค. ๋ํ ๋ฒ์ญ ์์ฒด๋ฅผ ๋ธ๋ผ์ฐ์ ๋ก ๋ณด๋ด์ผ ํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ํ ๊ฐ์ง ์ด์ ์ ๋ฐํ์์ ๋ฒ์ญ์ ์ง์ฐ ๋ก๋๋ฅผ ์ง์ํ๋ ๊ฒ์ผ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ http ์๋ฒ(๋๋ ๋น๋ ์๋ฒ)์์ ๋ฒ์ญ์ ์ํํ๋ ๊ฒ์ด ๋ฐํ์ ๊ฒฝํ์ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ๋ง๋ ๋ค๋ ์ ์ ๋
ผ๋์ ์ฌ์ง๊ฐ ์์ต๋๋ค.
๋ฐํ์ ์ต์
b) ๋ถํ๋๋ฆฝ๋๋ค. ๋ฒ์ญ์ JSON ํ์ผ๋ก ๋ก๋ํ๊ณ ํ์ฌ ngx-translate
์ ๊ฐ์ด ๋ฐํ์์ ์ธ์ด๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
์ค๋ช ๊ฐ์ฌํฉ๋๋ค. a) ์ ๊ทผ ๋ฐฉ์์ด "๊ฐ๋"์ ๋ ๊ฐ๊น์ง๋ง b) ์ ๊ทผ ๋ฐฉ์(์ผ๋ฐ์ ์ผ๋ก ์ง์ฐ ๋ก๋ฉ)์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ์ฌ์ฉ์๊ฐ ๋ฒ์ญ์ ๋์ ์ผ๋ก ์ ์/๋ณ๊ฒฝํ๋ ๊ธฐ๋ฅ๋ ์๋ค๋ ๊ฒ์ ์ดํดํฉ๋๋ค(์ฑ์ ๋ํ ์์ ๋ ๋ฒ์ญ์ ์ฆ์ ์ฌ์ฉํ ์ ์์). . ๋ด๊ฐ ๊ทธ๊ฒ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ๋ค๋ฉด ์ ๊ทผ ๋ฐฉ์ a)์ ๋ฒ์ญ์ ์ฝ๊ฐ์ ๋ณํ๊ฐ ์์ด๋ ์๋ก์ด ์ฌ๊ตฌ์ถ์ ์๋ฏธํฉ๋๋ค.
์ด๊ฒ์ ๋ฏธ๋ฆฌ ์ ์๋ Angular ๊ตฌ์ฑ ์์๊ฐ ์๋ ์ ์ ์ผ๋ก ์์ฑ๋ ํ์ด์ง์์ ์ฌ์ฉ์๊ฐ ์ํ๋ ๋๋ก ํ๋ก๊ทธ๋๋จธ๊ฐ ์ ์ํ ๊ฐ๋ ๊ตฌ์ฑ ์์๋ฅผ ํฌํจํ๋ ์ฌ์ฉ์ ์์ฑ ํ ํ๋ฆฟ์ผ๋ก ์ ํํ๋ ๊ฒ๊ณผ ๋์ผํ ์ด์ ์ ๋๋ค(์ด ๋ฐฉ๋ฒ์ผ๋ก ์ ์๋ ํ ํ๋ฆฟ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ๋ก๋๋ฉ๋๋ค... )
๋ก๋ํ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก a) ์ ๊ทผ ๋ฐฉ์์ด ์ฌ์ฉ๋ ๊ฐ๋ฅ์ฑ์ ๋ํด์๋ ์๊ฐํด ๋ณด์์ ๊ฒ์ ๋๋ค. ๋ฐํ์ ๋ฒ์ญ ์์ฒญ์ด ๋ฐ์ํ๋ฉด(์: ๋ฐฑ์๋๊ฐ ์ต์ ๋ฒ์ญ์ ๋ณด๋ด๊ธฐ ์์ํจ) ํ์๋ ๋ธ๋ก(์ง๊ธ๊น์ง ์ ์ ํ ์คํธ ํฌํจ)์ด ํฌ๋กค๋ง์ ์์ํ๊ณ b) ์ ๊ทผ ๋ฐฉ์๊ณผ ๊ฐ์ด ๋์ ์ผ๋ก ๊ต์ฒด๋ฉ๋๋ค. ๋ฐ๋ผ์ b)๋ ํ์ํ ๊ฒฝ์ฐ์๋ง ํ์ฑํ๋๊ณ ๋ชจ๋ ๋ฒ์ญ ๊ฐ๋ฅํ ๋ถ๋ถ์ ์ ์ฐจ)์ ๋ฐ๋ผ ์ค๋น๋ฉ๋๋ค. ๊ทธ๋ฌํ ์ ๊ทผ ๋ฐฉ์์ด b) ์ ๊ทผ ๋ฐฉ์ ์์ฒด๋ณด๋ค ๋ ๋ถ๋ด์ด ๋ ๊ฒ์ด๋ฉฐ ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์ง์ ์ ์ผ๋ก ์คํ ๊ฐ๋ฅํ์ง ์๋ค๋ ๊ฒ์ ์ดํดํ์ง๋ง ์ด๊ฒ์ด ์ฌ์ฉ์์ ์ค์ ์๊ตฌ์ ๋ ๊ฐ๊น์ต๋๋ค.
๋์ดํ ์ต์ ์ ๋ํด ํน์ ๊ฒฝ์ฐ์ ์ด๋ฌํ ๋์ ๊ธฐ๋ฅ์ ๋ฌ์ฑํ๊ธฐ ์ํด ์์ฉ ํ๋ก๊ทธ๋จ ์ฑ๋ฅ์ ์ฝ 25%๋ฅผ ํฌ์ํ ์ฉ์๊ฐ ์์ต๋๋ค(๋ฌผ๋ก ์ด ๋์ ์ ๊ทผ ๋ฐฉ์์ ๋ชจ๋ ๊ณณ์์ ์ฌ์ฉํ์ง๋ ์์ ๊ฒ์ ๋๋ค). ๋ฐ๋ผ์ AOT ํ์งํ ํ ํ๋ฆฟ์ด 0.4์ด ๋ง์ ๋ ๋๋ง๋๊ณ ๋์ ํ ํ๋ฆฟ์ ๊ฒฝ์ฐ 0.5์ด ๋ง์ ์์ฑ๋ ๊ฒฝ์ฐ ๋ฒ์ญ ๋ณ๊ฒฝ์ ๋ํ ์ฆ๊ฐ์ ์ธ ์๋ต์ด ํ์ํ ์ฑ์์ ์ฌ์ ํ ํ์ฉ ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค.
@demisx ๋ ์ ๊ทผ ๋ฐฉ์ ๋ชจ๋ v9์์ ์ฌ์ฉํ ์ ์์ง๋ง ์ต์
a)๋ง ์ฒ์์๋ ์์ ํ ์ง์๋๋ฉฐ(์ญํธํ์ฑ์ ์ํด) Angular ํ์์ ์์ ํ ์น์ธ๋๊ธฐ ์ ์ ์ต์
b)์ ๋ํด ์๋ก์ด ๊ฒ์ด ๊ฐ๋ฐ๋ ์ ์์ต๋๋ค.
๋ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ Locl
๋ Angular ํ์ด ๊ทธ ๊ฒฉ์ฐจ๋ฅผ ๋ฉ์ธ ๋๊น์ง v9๊ฐ ๋ฆด๋ฆฌ์ค๋ ๋ ์ต์
b)์ ๋ํ ๋ช ๊ฐ์ง ๋์ฐ๋ฏธ๋ฅผ ์ ๊ณตํ์ฌ ๋๊ตฌ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด๋ฌํ ๋ฐํ์ ๋ฒ์ญ์ ๊ตฌ์ฑ ์์๊ฐ ๋ ๋๋ง๋๋ฉด ์ ๋ฒ์ญ์ด ๋ก๋๋ ๊ฒฝ์ฐ์๋ ๋์ ์ผ๋ก ํ ์คํธ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค๋ ์ ์์ "๋ฐ์์ "์ด ์๋๋๋ค.
๋ฒ์ญ๋ ๋ฉ์์ง๋ $localize
ํ๊ทธ ๋ฌธ์์ด๊ณผ ๊ด๋ จํ์ฌ ์ ์ ์
๋๋ค. ๋ฐ๋ผ์ ๊ตฌ์ฑ ์์๋ฅผ ๋ค์ ๋ ๋๋งํด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ IVY์ ํ
ํ๋ฆฟ ์บ์ฑ์ ๋ฐ๋ผ ๋ค์ ๋ ๋๋งํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์์ ์ ์์ต๋๋ค.
์ด๊ฒ์ด ๋ฐํ์ ๋ฒ์ญ์ ๋์์ด ๋ฐ๋์ ์ง๊ด์ ์ด์ง๋ ์๊ธฐ ๋๋ฌธ์ ๊ตฌํํ๊ธฐ ๊น๋ค๋ก์ด ์ด์ ์ค ํ๋์ ๋๋ค.
๋น๋์์ ์ ์ ๋ฒ์ญ์ผ๋ก ์์ํ ๋ค์ ๋์ค์ ๋ฐํ์ ๋ฒ์ญ์ ์ถ๊ฐํ๋ ํ์ด๋ธ๋ฆฌ๋ ์ ๊ทผ ๋ฐฉ์๊ณผ ๊ด๋ จํ์ฌ. ์ปดํ์ผ ํ์ ์ธ๋ผ์ด๋์ด $localize
ํ๊ทธ๋ฅผ ์ ๊ฑฐํ์ง ์๊ณ ํ
ํ๋ฆฟ ๋ฌธ์์ด ๋ฆฌํฐ๋ด ๋ถ๋ถ๋ง ์
๋ฐ์ดํธํ ๊ฒฝ์ฐ ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ์ปดํ์ผ ์๊ฐ ๋น์ฉ๊ณผ ์ถ๊ฐ ๋ฒ๋ค ํฌ๊ธฐ ๋น์ฉ์ ์ด๋ํฉ๋๋ค.
Angular 9 RC1์์ ng xi18n
๋ฅผ ์คํํ๋ฉด "์ฃ์กํฉ๋๋ค. ๊ทธ๋ฌ๋ i18n์ ์์ง Ivy์์ ๊ตฌํ๋์ง ์์์ต๋๋ค."๋ฅผ ๋ฐํํ์ง๋ง ๋ณ๊ฒฝ ๋ก๊ทธ๋ ํ์ฌ ๊ตฌํ๋ _some_ i18n ์ง์์ด ์์์ ๋ํ๋
๋๋ค. ์ง๊ธ์ ๋ฒ์ญ ํ์ผ์ ์๋์ผ๋ก ์
๋ฐ์ดํธํด์ผ ํฉ๋๊น?
@neil-119 ํ์ฌ ์์ด๋น ๋ชจ๋์์๋ ์ถ์ถ์ด ์ง์๋์ง ์์ต๋๋ค. ์ถ์ถ์ ์คํํ๋ ค๋ฉด ์ฌ์ ํ ivy๋ฅผ ๋นํ์ฑํํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ถ์ถ๋ ๋ฒ์ญ ํ์ผ์ ์ฌ์ฉํ๋๋ก ๋ค์ ํ์ฑํํ ์ ์์ต๋๋ค.
์ต์ข v9 ๋ฆด๋ฆฌ์ค์ ์ถ์ถ์ ํฌํจํ๋๋ก ๊ณํ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@neil-119 Angular CLI๋ ์ถ์ถ์ ์ํด ์๋์ผ๋ก VE๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์๋ํ๋ ค๋ฉด ์๋ฌด ๊ฒ๋ ํ ํ์๊ฐ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ํ ๊ทธ๊ฒ์ ํ ์คํธํ๋ฏ๋ก ๊ทธ๊ฒ์ด ๊นจ์ก๋ค๋ ๊ฒ์ ๋๋์ต๋๋ค. ์ฌํ์ผ๋ก ๋ฌธ์ ๋ฅผ ์ด โโ์ ์์ต๋๊น?
ํ์ฌ ์์ด๋น ๋ชจ๋์์๋ ์ถ์ถ์ด ์ง์๋์ง ์์ต๋๋ค.
๋๋ ์๋์, ๊ทธ๊ฒ์ ์ผ ์คํ ํผ์
๋๋ค. ํ์ฌ ๋ฌธ์์ด ์ถ์ถ์ ์ฌ์ฉํ๋ ์๋ํ๋ ํ๋ก์ธ์ค๊ฐ ์์ต๋๋ค. ๋ฒ์ญ์ ์๋์ผ๋ก ์ถ์ถํ ์ ์๋ค๋ฉด ์ด๋ป๊ฒ Ivy๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ ์ ์์ต๋๊น?
sconfig.json every time
์กฐ์? ์ด๊ฒ์ ๋์๊ฒ ์ข์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
@fetis - ์ ๊ฐ ํ๋ ธ์ต๋๋ค. CLI๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ivy๊ฐ ํ์ฑํ๋ ๊ฒฝ์ฐ์๋ ng xi18n
๋ฅผ ํธ์ถํ๋ฉด ์์๋๋ก ์๋ํด์ผ ํฉ๋๋ค.
@petebacondarwin ๊ฐ์ฌํฉ๋๋ค. ํ์ฌ ํ๋ก์ ํธ์์ Ivy๋ฅผ ์ํํด ๋ณผ ์์ ์ด๋ฏ๋ก ๊ณง ํ์ธํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์๋ ํ์ธ์, ๋ด ๊ตฌ์ฑ ์์ (๊ฐ๋ 9.0.0-rc.1)์์ ์ฌ์ฉํ๋ ค๊ณ ํ์ต๋๋ค.
$localize `some string to localize`;
@angular/localize/init์ ์์ค ์ฝ๋์์ ๋ฌธ์๋ก ์ฐพ์์ต๋๋ค.
๋ด ์ธ์ด์ ๋ํด ํ์์ ๊ฐ์ด ๋น๋ํ๋ ค๊ณ ํ๋ฉด ์ด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
No translation found for "4145296873012977836" ("some string to localize").
ํด๋น ๋ฌธ์์ด์ ๋ํ ๋ฒ์ญ์ ์ ๊ณตํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น?
๋ด๊ฐ ๊ธฐ๋ํ๋ ๊ฒ์ ng xi18n์ด ๊ตฌ์ฑ ์์ ์ฝ๋์์ ์ด ํ
์คํธ์ ํจ๊ป .xlf ํ์ผ์ ์์ฑํ๋ค๋ ๊ฒ์
๋๋ค. ๋ง์ต๋๊น ์๋๋ฉด ์ ๊ฐ ๋ญ๊ฐ๋ฅผ ๋์น๊ณ ์์ต๋๊น?
์๋
ํ์ธ์ @Ks89 - ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋(ํ
ํ๋ฆฟ์ด ์๋)์์ ๋ฉ์์ง ์ถ์ถ์ v9์์ ์ง์๋์ง ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๊ตํํ ๊ฒฝ์ฐ ํด๊ฒฐํ ์ ์์ต๋๋ค. 4145296873012977836
๋ ๋ฉ์์ง์ ID์ด๋ฏ๋ก ์ด ID๋ก ๋ฒ์ญ ํ์ผ์ ๋ฒ์ญ์ ์ ๊ณตํ๋ฉด ๋ฒ์ญํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
@petebacondarwin ์ด ๊ธฐ๋ฅ์ด Angular์ ์ธ์ ์ถ๊ฐ๋๋์?
์ปดํฌ๋ํธ์์ ๋ฐํ์ ๋ฒ์ญ์ ์ ๋ง ์ ์ฉํ๊ฒ ๋ง๋๋ ๊ฒ์ด ์ ๋ง ์ค์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
.xlf ํ์ผ์ ๋ฒ์ญ๊ฐ์๊ฒ ๋ณด๋ผ ๋ ๋ชจ๋ ๋ฌธ์์ด์ ๋น ๋ฅด๊ฒ ์ถ๊ฐํ ๋ค์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ฑ์ ๋งค์ฐ ์ฝ๊ฒ ์ ์ฉํ ๊ฒ์ผ๋ก ๊ธฐ๋ํฉ๋๋ค.
๋ต๋ณ ํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค
9.1์์ ๊ธฐ๋ํ๊ฒ ์ต๋๋ค
ChangeDetectionStrategy
๊ฐ ๋ชจ๋ ๊ตฌ์ฑ ์์์ ๋ํด ๋ฌด์์ด๋ ์๊ด์์ด ์ ์ฒด ์ฑ์ ๊ฐ์ ๋ก ๋ค์ ๋ ๋๋งํ๋ ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด ์ด๋ฌํ ๋์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ๊ฐ ๋๋ฌด ์ฝ์ต๋๋ค.
@petebacondarwin Angular 9๋ ์ด์ ์๋ก์ด $localize ํ๊ทธ ๊ธฐ๋ฅ๊ณผ ํจ๊ป ์ถ์๋์ง๋ง ๋ฉ์์ง ์ถ์ถ ๊ธฐ๋ฅ์ ์์ต๋๋ค. ์ด์ ์ Angular 9.1์์ ์ด๋ฅผ ๊ธฐ๋ํ ์ ์๋ค๊ณ ๋งํ์ต๋๋ค. ์ด ์์ธก์ด ์ฌ์ ํ ์ ํจํ๋ฉฐ $localize API๊ฐ ์์ ์ ์ผ ๊ฒ์ผ๋ก ๊ธฐ๋ํ ์ ์์ต๋๊น?
ํ
ํ๋ฆฟ์์ ๋ฒ์ญ์ ์ถ์ถํ ์ ์์ต๋๋ค.
์ฝ๋์์๋ $localize
๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด Locl์ ์ดํด๋ด์ผ ํฉ๋๋ค. https://github.com/loclapp/locl/
@locl/cli
๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋ ๋ฐ ํ
ํ๋ฆฟ์์ ์ถ์ถํ ์ ์์ต๋๋ค.
@vekunz - ์์ธก์ ์ฌ์ ํ โโ์ ํจํฉ๋๋ค. ๋ํ @ocombe๊ฐ ์ง์ ํ๋ฏ์ด ํ์ฌ CLI ๋ฒ์ญ ์ถ์ถ ๋ฉ์ปค๋์ฆ์ Angular ํ
ํ๋ฆฟ(์: i18n
ํ๊ทธ๋ก ํ์๋ ํญ๋ชฉ) ๋ด์ ์๋ ๋ชจ๋ ๋ฒ์ญ์ ๋ํด ์ ์๋ํฉ๋๋ค. ์ง๊ธ ํต์ฌ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ถ์ถํ ์ ์๋ ์ ์ผํ ๊ฒ์ ์์ ์ ์ฝ๋(์: ์๋น์ค ๋๋ ๊ตฌ์ฑ ์์) ๋ด์์ $localize
์ ๋ํ ํธ์ถ์
๋๋ค.
$localize
ํธ์ถ ์์ฒด๋ ์์ ์ ์ธ API์
๋๋ค.
๋ฒ์ญ ๋ฐ ์ถ์ถ(ํนํ ์ปดํ์ผ ์)์ ์ํํ๋ ๋๊ตฌ๋ ์ฌ์ ํ ๋น๊ณต๊ฐ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ์ฃผ๋ณ์ ์์ ๋ง์ ๋๊ตฌ๋ฅผ ๋ง๋ค ๊ณํ์ด ์๋๋ผ๋ฉด(์: @ocombe ๊ฐ Locl์์ ํ๋ ๊ฒ์ฒ๋ผ) ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค.
@petebacondarwin ์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋์ ํ ์คํธ๋ฅผ ์ถ์ถ์ ์ํด "์จ๊ฒจ์ง" ๊ตฌ์ฑ ์์ ํ ํ๋ฆฟ์ผ๋ก ๋ณต์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์ถ์ถ๊ณผ ๋ฒ์ญ์ด ๋ชจ๋ ์๋ํด์ผ ํ์ง ์๊ฒ ์ต๋๊น?
@ocombe ์ถ์ถ์ด Angular 9.1์์ ์๋ํ๋ค๋ ์์ธก์ ๋ฐ๋ผ ์ฐ๋ฆฌ ๊ด๋ฆฌ์๋ ์๋ฃจ์ ๋น์ฉ์ ์ง๋ถํ์ง ์์ ๊ฒ์ ๋๋ค. ํนํ ์ธ์ด ๋ฐ ๋ฒ์ญ๋ ๊ฒฝ๋ก์ ์ค์๊ฐ ์ ํ์ด ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ถ์ถ์ ์ํด ์ฝ๋์ ํ ์คํธ๋ฅผ "์จ๊ฒจ์ง" ๊ตฌ์ฑ ์์ ํ ํ๋ฆฟ์ผ๋ก ๋ณต์ ํ ์ ์์ต๋๋ค.
์, ์ด ํด๊ฒฐ ๋ฐฉ๋ฒ์ ํ์ฌ๋ก์๋ ์๋ํฉ๋๋ค.
ํผ๋์ค๋ฝ์ต๋๋ค. 9.1์์๋ ๋ฐํ์ ๋ฒ์ญ์ด ๊ฐ๋ฅํฉ๋๊น? ์๋๋ฉด ํ ํ๋ฆฟ ์ธ๋ถ์์ ์ถ์ถ๋ง ํ์๊ฒ ์ต๋๊น? ์๋๋ฉด ์ด๋ค ์ค ์๋ฌด ๊ฒ๋?
์ ์๊ฒ ๋ฐํ์ ๋ฒ์ญ์ ํฌ๋ฌ ๊ธฐ๋ฅ์ด ๋ ๊ฒ์ ๋๋ค. ์ฌ๋ฌ ๋ฒ๋ค์ ๋ฐฐํฌํ๊ณ ์ฌ์ฉ์๊ฐ ์ ์ฒด ํ์ด์ง๋ฅผ ๊ฐ์ ๋ก ๋ค์ ๋ก๋ํ๋๋ก ํ๋ ๊ฒ์ ์ฌ์ฉ์ฑ์ด ์ข์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
@JustDoItSascha
๋ฐํ์ ๋ฒ์ญ์ ๋ณด์ฌ์ฃผ๋ ๊ฐ๋จํ ๋ฐ๋ชจ๋ฅผ ๋ง๋ค์์ต๋๋ค.
https://stackblitz.com/edit/ivy-vjqzd9?file=src%2Fapp%2Fapp.component.ts
์๋
! JavaScript๊ฐ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ๋์ ๋ฌธ์์ด์ด ๋ฒ์ญ๋๊ธฐ ๋๋ฌธ์ main.ts์์ loadTranslations
๋ฅผ ํธ์ถํ๋ ค๊ณ ํ์ง๋ง ์ถฉ๋ถํ์ง ์์ต๋๋ค.
main.ts๋ AppComponent๋ฅผ ๊ฐ์ ธ์ค๋ AppModule์ ๊ฐ์ ธ์ต๋๋ค(์ฌ๊ธฐ์ $localize
์ฌ์ฉ).
์๋ํ๊ฒํ๋ ค๋ฉด ๋ค์์ ์ํํ์ญ์์ค.
loadTranslations(......);
import('./app/app.module').then(m => platformBrowserDynamic(). bootstrapModule(m.AppModule);
์ด์ ์ด๊ฒ์ ์๋ํ์ง๋ง Angular์ "complier.js" ๋ฒ๋ค์ด ๊ณต๊ธ์ ์ฒด ๋ฒ๋ค์ ํฌํจ๋๋๋ก ํฉ๋๋ค.
๊ทธ๊ฒ์ ํผํ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ๊ฐ์ฌ ํด์
ํ์ฌ loadTranslations
๋ ์ ํ๋ฆฌ์ผ์ด์
์ด ์์๋๊ธฐ ์ ์ ํธ์ถ๋์ด์ผ ํ๋ฏ๋ก polyfills.ts
์์ ์ํํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ๋ฒ์ญ ์ธํธ๋ฅผ ๋ก๋ํ๋ ค๋ฉด ํ์ด์ง๋ฅผ ๋ค์ ๋ก๋ํด์ผ ํฉ๋๋ค. ๊ทธ ์ด์ ๋ฅผ ์กฐ๊ธ ๋ ์๊ณ ์ถ๋ค๋ฉด https://blog.ninja-squad.com/2019/12/10/angular-localize/ ๋ฅผ ์์ฑํ์ฌ ์ค๋ช
ํ์ต๋๋ค.
ํ์ฌ
loadTranslations
๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์๋๊ธฐ ์ ์ ํธ์ถ๋์ด์ผ ํ๋ฏ๋กpolyfills.ts
์์ ์ํํ ์ ์์ต๋๋ค.
๊ทธ๋ณด๋ค ๋ ๋์ ๊ฒ์ ๋ชจ๋ ํ์ผ์ ๊ฐ์ ธ์ค๊ธฐ ์ ์ ํธ์ถํด์ผ ํ๊ธฐ ๋๋ฌธ์ polyfills.ts(๋ฉ์ธ ์ฑ ํ์ผ๋ณด๋ค ๋จผ์ ์คํ๋จ)์ ๋ฃ์ผ๋ฉด ์๋ํ์ง๋ง ์ฑ์์ ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ "main" ํ์ผ์ ์ฌ์ฉํ๋ ค๋ฉด ๋ชจ๋์ ๋ํด ๋์ import(...)
๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
@vekunz ์ง๊ธ์ ๋ด lib๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ข์ ์ด์ ์ ๋๋ค ๐ Locl์ ์ถ์ถ์ ๊ดํ ๊ฒ์ด ์๋๋ผ i18n์ ๋จ์ํํ๊ธฐ ์ํด ๋ค๋ฅธ ๋ง์ ๋๊ตฌ๋ฅผ ์ถ๊ฐํ ์๊ฐ์ ๋๋ค.
Angular์์ ๋ฐํ์ i18n์ ๊ตฌํํ ์๋๊ฐ ์์ต๋๊น? ์ฐ๋ฆฌ๋ ๊ฑฐ์ 3๋ ๋์ ์ด ๊ธฐ๋ฅ์ ๊ธฐ๋ํด ์์ผ๋ฉฐ ์ด์ Ivy๊ฐ ์ฌ๊ธฐ์ ์์ผ๋ฉฐ ์์ง ๋ฐ์ฏค ๊ตฌ์์ง ์ํ์ ๋๋ค.
Angular์์ ๋ฐํ์ i18n์ ๊ตฌํํ ์๋๊ฐ ์์ต๋๊น? ์ฐ๋ฆฌ๋ ๊ฑฐ์ 3๋ ๋์ ์ด ๊ธฐ๋ฅ์ ๊ธฐ๋ํด ์์ผ๋ฉฐ ์ด์ Ivy๊ฐ ์ฌ๊ธฐ์ ์์ผ๋ฉฐ ์์ง ๋ฐ์ฏค ๊ตฌ์์ง ์ํ์ ๋๋ค.
์ ๊ฐ ์ดํดํ๋ ๋ฐ๋ Ivy๊ฐ ์ฌ๋ฌ ๋ฉด์์ ๋ฏธ๋๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ์๋๋ ฅ์ด๋ผ๋ ๊ฒ์ ๋๋ค. i18n ๋ฐ๋์ด Ivy ์ถ์์ ํจ๊ป ์์ฒญ๋๊ฒ ์์ง์ธ ๊ฒ์ ๋๋ผ์ด ์ผ์ด ์๋์ง๋ง, ์์ผ๋ก์ ํฐ ๋ณํ์ ๋ํ ์ ์ฌ๋ ฅ์ ๋ถ๋ฌ์ผ์ผํฌ ๊ฒ์ ๋๋ค. ๊ทธ๊ฒ์ด ๋ด๊ฐ ์ฝ์ ๊ฒ์ด์๊ณ , ์ด์จ๋ ๋์ ํฌ๋ง์ด์์ต๋๋ค.
@Karasuni - ๋ฐํ์ ๋ฒ์ญ์ด ํต์ฌ Angular ํ๋ ์์ํฌ์ ๋ํด ์ค์ ๋ก ์๋ฏธํ๋ ๋ฐ๊ฐ ๋ฌด์์ธ์ง ๋ช ํํ ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์๋ํ๋ฉด ๊ทธ๊ฒ์ ๋ํด ์๋นํ ํผ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
v9์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์๋ $localize
๊ธฐ๋ฐ ๋ฒ์ญ์ด ํฌํจ๋ฉ๋๋ค. ์ด๊ฒ์ ์ฃผ์ ๋ชฉํ๋ Angular ์ปดํ์ผ๋ฌ์์ ๋ฒ์ญ์ ๋ถ๋ฆฌํ์ฌ ์ฌ๋ฌ ๊ฐ์ง ๋ฉ์ง ๊ฐ์ ์ฌํญ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ฒ์
๋๋ค.
v9์ ๋ชจ๋ ์ฌ์ฉ์๊ฐ ์ฆ์ ์ฌ์ฉํ ์ ์๋ ์ฒซ ๋ฒ์งธ ๊ธฐ๋ฅ์ ๋ฒ์ญ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์์ฑ ์๋๋ฅผ ๋์ด๋ ๊ฒ์
๋๋ค. ์ด์ ์๋ ์ฑ์ ๋ฒ์ญํ๋ ค๋ ๊ฐ ์ธ์ด์ ๋ํด ์ ์ฒด ๋น๋ ํ์ดํ๋ผ์ธ์ ์คํํด์ผ ํ์ต๋๋ค. ์ด์ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ธฐ๋ณธ ์ปดํ์ผ์ ํ๋๋ง ์คํํ๋ฉด ๋๋ฉฐ ๋น๋ ์ถ๋ ฅ์์ โโ๊ฐ ์ธ์ด์ ๋ํด ํจ์ฌ ๋ ์งง์ ์ต์ข
๋ฒ์ญ ํ๋ก์ธ์ค๊ฐ ์คํ๋ฉ๋๋ค. ์ด๋ฅผ ์ง์ํ๊ธฐ ์ํด ์๋ก์ด @angular/localize
ํจํค์ง, Angular ์ปดํ์ผ๋ฌ ๋ด๋ถ์ ๋ณ๊ฒฝ ์ฌํญ ๋ฐ Angular CLI ๋ด๋ถ์ ์ ์ฒด ์์
๋ถํ๋ฅผ ํตํด ์ด๋ฅผ ์ต๋ํ ๋งค๋๋ฝ๊ณ ํฌ๋ช
ํ๊ฒ ๋ง๋ญ๋๋ค.
๋์งธ, $localize
ํ๊ทธ๊ฐ ๋ถ์ฐ ์ฝ๋์ ๋จ์ ์ ์์ผ๋ฏ๋ก ์ด์ ๋ธ๋ผ์ฐ์ ์์ ๋ฒ์ญ์ ์ํํ ์๋ ์์ต๋๋ค(์ปดํ์ผ ์๊ฐ์ด ์๋ ๋ฐํ์์). ์ด๊ฒ์ด ํต์ฌ Angular ํ๋ ์์ํฌ์์ ๋ฐํ์ ๋ฒ์ญ์ผ๋ก ์๋ฏธํ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ์ต์ข
๊ฒฐ๊ณผ๋ ์ปดํ์ผ ํ์์ ๋ฒ์ญ๊ณผ ์ฌ์ค์ ๋์ผํ์ง ์์ต๋๋ค. ๋ฒ์ญ์ ํ ๋ฒ๋ง ๋ฐ์ํฉ๋๋ค. ๋ฐํ์์ ์ธ์ด๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์
์ ๋ค์ ์์ํด์ผ ํฉ๋๋ค(์: ๋ค์ ๋ก๋๋ฅผ ํตํด). ์ด๊ฒ์ ํ๋ก์ ํธ๊ฐ ์๋ง์ ๋ฒ์ญ ํ์ผ๊ณผ ํจ๊ป ๋จ์ผ ๋ฐฐํฌํ์ ๋ฐฐํฌํ ์ ์๋๋ก ํ๋ ์ด์ ์ด ์์ต๋๋ค. ์ด๋ ๋ชจ๋ ๋ค๋ฅธ ๋ฒ์ญ์ ๋ฏธ๋ฆฌ ์์ฑํ๊ณ ์ถ์ง ์์ ์์์ ์ฌ์ฉ ์ฌ๋ก์์ ์ ์ฉํฉ๋๋ค. @ocombe ์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ฌ๊ธฐ์์ ์ง์ ํ ๊ฒ์ฒ๋ผ ๋ฒ์ญ์ ์ผ์ฐ ๋ก๋ํ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ๋ช ๊ฐ์ง ๊น๋ค๋ก์ด ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ด๋ฅผ ์ํํ๋ ๋ฐ ๋ ๋ง์ ๋์์ด ํ์ํ๋ฉด https://www.locl.app/ ๋ฅผ ๊ณ ๋ คํ ์ ์์ต๋๋ค.
์ด "๋ฐํ์" ๋ฒ์ญ์ ์ง์ฐ ๋ก๋ ๊ฒฝ๋ก์๋ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ์ค์ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ๋ค๋ฅธ ์ธ์ด๋ก ๋ค๋ฅธ ๊ฒฝ๋ก๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
๋ชจ๋ ์๋๋ฆฌ์ค์์ ์๋ํ๋ ์ด ๋ฒ์ญ ๋ก๋์ ๋ํ ๋จ์ผ ์ ๊ทผ ๋ฐฉ์์ด ์๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ CLI์ ์ ์ฉํ์ง ์์๊ฑฐ๋ ์์ง ์ด๋ฅผ ์ง์ํ๊ธฐ ์ํ ์์ ์ ์ธ ๊ณต๊ฐ API๋ฅผ ์ ๊ณตํ์ง ์์์ต๋๋ค. ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋ ์ ์ดํดํ๋ฉด ์ด์ ๋ํ ์ง์์ ๋ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๊ทธ ๋์ Locl๊ณผ ๊ฐ์ ๊ฒ์ด ์ค์ค๋ก ํด๊ฒฐํ๋ ๋ชจํ์ ํ๊ณ ์ถ์ง ์๋ค๋ฉด ๋์์ด ๋ ์ ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก ๋ฐํ์ ์ ๋ฒ์ญ๋ ๋ฌธ์์ด์ ๋์ ๋ณ๊ฒฝ์ ์ฝ์ด Angular ํ๋ ์์ํฌ์์ ํน๋ณํ (์ค๊ณ์) ์ง์๋์ง ์์ต๋๋ค. ๋ฒ์ญ๋ ๋ฌธ์์ด์ Angular์ ๋ณ๊ฒฝ ๊ฐ์ง ์์คํ
์ ์ฐ๊ฒฐํ๋ฉด ๋๋ถ๋ถ์ ์ ํ๋ฆฌ์ผ์ด์
์ ๋๋ฌด ๋ง์ ๋ถ๋ด์ ์ฃผ๊ณ ์ฑ๋ฅ์ ์ ํ์ํต๋๋ค. ์ปค๋ฎค๋ํฐ์์ ์ํธ ์์ฉ์์ ์ธ์ด ๋ณ๊ฒฝ ์ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ค์ ์์ํ๋ ๊ฒ ์ด์์ผ๋ก ์ค์ ๋ก ํ์ํ ์ค์ ์๋๋ฆฌ์ค๋ฅผ ๊ฑฐ์ ๋ณธ ์ ์ด ์์ต๋๋ค. ์ด๊ฒ์ด ์ ํ๋ฆฌ์ผ์ด์
์ ์๊ตฌ ์ฌํญ์ธ ๊ฒฝ์ฐ ๋ฒ์ญ์ ๊ฐ์ ธ์ค๋ ํ
ํ๋ฆฟ์ ๋ฌธ์์ด์ ์ฌ์ฉ์ ์ ์ ๋ด์ฅ ํ์ดํ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ๋ฌ์ฑํ ์ ์์ผ๋ฉฐ ๋ฒ์ญ์ ์ํด ์ฆ์์์ $localize
๋ฅผ ํธ์ถํ ์๋ ์์ง๋ง ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ด์ง๋ ์์ต๋๋ค. ์ด๊ฒ์ ๋งค์ฐ ์ฑ๋ฅ์ด ์ข์ ๊ฒ์
๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด https://netbasal.gitbook.io/transloco/์ ๊ฐ์ ๋ณด๋ค ๋์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ๊ณ ๋ คํ ์ ์์ต๋๋ค.
Angular์ ๋ค์ ๋ง์ด๋ ๋ฒ์ ์์ ์ ๊ณต๋๋ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ TS ์ฝ๋์์ ํ์งํ๋ ๋ฌธ์์ด์ ์๋ณํ๊ณ ์ถ์ถํ ์ ์๋ ํฅ์๋ ๋ฒ์ญ ์ถ์ถ์ด ๋ ๊ฒ์ ๋๋ค. ํ์ฌ CLI ์ถ์ถ์ ํ ํ๋ฆฟ์ ํ์งํ๋ ๋ฌธ์์ด๋ง ์ฒ๋ฆฌํฉ๋๋ค.
์์์ ์ค๋ช ํ ๋๋ก ๋ฐํ์ ๋ฒ์ญ์ ๊ฐ์ ํ๊ธฐ ์ํ ๋ณ๊ฒฝ ์ฌํญ์ ๋น ๋ฅด๋ฉด 9.1 ์ดํ์ ๋ํ๋ ๊ฒ์ ๋๋ค.
๋ง์ง๋ง์ผ๋ก ๋ฐํ์ ์ ๋ฒ์ญ๋ ๋ฌธ์์ด์ ๋์ ๋ณ๊ฒฝ์ ์ฝ์ด Angular ํ๋ ์์ํฌ์์ ํน๋ณํ (์ค๊ณ์) ์ง์๋์ง ์์ต๋๋ค. ๋ฒ์ญ๋ ๋ฌธ์์ด์ Angular์ ๋ณ๊ฒฝ ๊ฐ์ง ์์คํ ์ ์ฐ๊ฒฐํ๋ฉด ๋๋ถ๋ถ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ฌด ๋ง์ ๋ถ๋ด์ ์ฃผ๊ณ ์ฑ๋ฅ์ ์ ํ์ํต๋๋ค. ์ปค๋ฎค๋ํฐ์์ ์ํธ ์์ฉ์์ ์ธ์ด ๋ณ๊ฒฝ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ ์์ํ๋ ๊ฒ ์ด์์ผ๋ก ์ค์ ๋ก ํ์ํ ์ค์ ์๋๋ฆฌ์ค๋ฅผ ๊ฑฐ์ ๋ณธ ์ ์ด ์์ต๋๋ค.
๋ด๊ฐ ํ๋ ธ์ ์๋ ์์ง๋ง ์ด ์ค๋ ๋๋ง ํด๋ ๋ง์ ์ฌ๋๋ค์ด ์ ํ๋ฆฌ์ผ์ด์
์ ๋ค์ ๋น๋ํ๊ฑฐ๋ ๋ค์ ๋ก๋ํ์ง ์๊ณ ๋ ๋ฐํ์์ ์ธ์ด๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ ๊ธฐ๋ฅ์ ๋ถ๋ช
ํ ๊ด์ฌ์ ๋ณด์์ต๋๋ค. ์๋๋ฉด ์ฌ๊ธฐ ์๋ ๋ชจ๋ ์ฌ๋๋ค์ด runtime translation
์ ๋ํด ๋ค๋ฅธ ์ ์๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๊น?
์ธ์ด๋ฅผ ์ ํํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ ๋ก๋ํ๊ณ ์ถ์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ฌ์ฉ์๊ฐ ์์์ด ์๋ ํ์ด์ง์ ์์ ๋ ๋ฒ์ญ ์ ํ์ ๋ํ ์ ์ฒด ํ์ด์ง ์๋ก๊ณ ์นจ์ ์ฌ์ฉ์์๊ฒ ๊ฑฐ์ฌ๋ฆด ๊ฒ์ ๋๋ค.
๊ทธ๋ฅ ๋ช ํํ๊ฒ. ๋ด๊ฐ ๋งํ๋ ค๋ ๊ฒ์ ๋ง์ ์ฌ๋๋ค์ด ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ค์ ์ธ์ด ๋ณ๊ฒฝ์ด ์ ๋์ ์ผ๋ก ํ์ํ๋ค๊ณ ๋งํ๊ธฐ ์ํด ๋์๊ฒ ๋ค๊ฐ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์์ธ์ ํํค์ณ๋ณด๋ฉด ๊ทธ๋ ์ง ์๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ์ด๋ฅผ ํ์๋ก ํ๋ ์๋๋ฆฌ์ค๊ฐ ์๋ค๊ณ ๋งํ๋ ๊ฒ์ ์๋์ง๋ง ์ง๋ 1๋ ๋์์ ๊ฒฝํ์ ๋ฐ๋ฅด๋ฉด ๊ทนํ ์ผ๋ถ๋ฅผ ์ ํ์ต๋๋ค.
์ง๋ฌธ: ์ฌ์ฉ์๊ฐ ์ฑ์ ํน์ ์์์ผ๋ก ์ด๋ํ ๋ ์ธ์ด๋ฅผ ์ ํํด์ผ ํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
๋ผ์ด๋ธ ์ค์์นญ๋ ํ์ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ผ๋ง๋ ์์ฃผ ์น์ฌ์ดํธ์ ์ธ์ด๋ฅผ ๋ณ๊ฒฝํฉ๋๊น? ์ผ๋ฐ์ ์ผ๋ก ์ต๋ ํ ๋ฒ. ๊ทธ๋ฆฌ๊ณ ์ด๋ฒ์๋ ํ์ด์ง ์๋ก๊ณ ์นจ์ด ๊ทธ๋ ๊ฒ ์ค์ํ์ง ์์ต๋๋ค. @petebacondarwin ์ด ๋งํ๋ฏ์ด ๋ผ์ด๋ธ ์ค์์นญ์ ๋ํ ๊ฑฐ์ ๋ชจ๋ ์๋๋ฆฌ์ค๋ ์ค์ ์๋๋ฆฌ์ค์ ๊ด๋ จ์ด ์์ง๋ง "์์ผ๋ฉด ์ข์" ๊ฒ์ ๋๋ค.
์๋๋ฉด ์ฌ๊ธฐ ์๋ ๋ชจ๋ ์ฌ๋๋ค์ด ๋ฐํ์ ๋ฒ์ญ์ ๋ํด ๋ค๋ฅธ ์ ์๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๊น?
๋ฐํ์ ๋ฒ์ญ์ด ์ ๋์ ์ผ๋ก ํ์ํฉ๋๋ค. ๊ณ ๊ฐ์ ๋น๋ ์๋ฒ๋ฟ๋ง ์๋๋ผ ํ์ฅ์์ ๋ฒ์ญ์ ํธ์งํ๊ณ ์ ๋ฐ์ดํธํ ์ ์์ด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ์ปดํ์ผ ์๊ฐ๊ณผ ๋ฐ๋๋๋ ๋ฐํ์์ ๋๋ค.
ํ์ด์ง ๋ก๋ ํ ์ธ์ด์ ์ค์ ์ ํ์ ์์ผ๋ฉด ์ข์ต๋๋ค.
๊ทธ๋ฅ ๋ช ํํ๊ฒ. ๋ด๊ฐ ๋งํ๋ ค๋ ๊ฒ์ ๋ง์ ์ฌ๋๋ค์ด ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ค์ ์ธ์ด ๋ณ๊ฒฝ์ด ์ ๋์ ์ผ๋ก ํ์ํ๋ค๊ณ ๋งํ๊ธฐ ์ํด ๋์๊ฒ ๋ค๊ฐ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์์ธ์ ํํค์ณ๋ณด๋ฉด ๊ทธ๋ ์ง ์๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ์ด๋ฅผ ํ์๋ก ํ๋ ์๋๋ฆฌ์ค๊ฐ ์๋ค๊ณ ๋งํ๋ ๊ฒ์ ์๋์ง๋ง ์ง๋ 1๋ ๋์์ ๊ฒฝํ์ ๋ฐ๋ฅด๋ฉด ๊ทนํ ์ผ๋ถ๋ฅผ ์ ํ์ต๋๋ค.
์ง๋ฌธ: ์ฌ์ฉ์๊ฐ ์ฑ์ ํน์ ์์์ผ๋ก ์ด๋ํ ๋ ์ธ์ด๋ฅผ ์ ํํด์ผ ํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
๊ทธ๊ฒ์ด ํ์คํ ์๊ตฌ ์ฌํญ์ด ์๋๋ผ๋ ๊ฒ์ด ์ณ์ ์๋ ์์ต๋๋ค. ๋ก๋ ์ ๋ฒ์ญ์ ๋ฐฐํฌํ๋ ค๊ณ ์๋ํ ์ ์์ง๋ง ํ์ฌ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ ๋ก๋ํ๊ฑฐ๋ ํ์ด์ง์ ์์น๋ฅผ โโ๋ณ๊ฒฝํ์ง ์๊ณ ์ธ์ด๋ฅผ ๋์ ์ผ๋ก ์ ํํ ์ ์๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉ์ ๊ฒฝํ์ ์์ ํ ๋ณํํฉ๋๋ค. ๋ฒ์ญ์ ์ค๋ซ๋์ ๋จ๊ฑฐ์ด ์ฃผ์ ์์ต๋๋ค.
์ค์ํ ์ง๋ฌธ์ด ์์ต๋๋ค. ๋ฒ์ญ ํ์ผ์ ๋น๋๊ธฐ์์ผ๋ก ๋ก๋ํ ์ ์์ต๋๊น? ๋ด ๋ชจ๋ ๋ฒ์ญ์ ๋ค์ ์์ฑํ์ง ์๊ณ ์ ๋ฐ์ดํธํ ์ ์๋ ๊ฒ์ด ์ค์ํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ฉ๋๋ค.
์, ๋น๋๊ธฐ์์ผ๋ก ๋ก๋ํ ์ ์์ง๋ง ๋ก๋๋ ๋๊น์ง ์ ํ๋ฆฌ์ผ์ด์ ์์์ ์ง์ฐํด์ผ ํฉ๋๋ค.
๊ทธ๋ฅ ๋ช ํํ๊ฒ. ๋ด๊ฐ ๋งํ๋ ค๋ ๊ฒ์ ๋ง์ ์ฌ๋๋ค์ด ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ค์ ์ธ์ด ๋ณ๊ฒฝ์ด ์ ๋์ ์ผ๋ก ํ์ํ๋ค๊ณ ๋งํ๊ธฐ ์ํด ๋์๊ฒ ๋ค๊ฐ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์์ธ์ ํํค์ณ๋ณด๋ฉด ๊ทธ๋ ์ง ์๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ์ด๋ฅผ ํ์๋ก ํ๋ ์๋๋ฆฌ์ค๊ฐ ์๋ค๊ณ ๋งํ๋ ๊ฒ์ ์๋์ง๋ง ์ง๋ 1๋ ๋์์ ๊ฒฝํ์ ๋ฐ๋ฅด๋ฉด ๊ทนํ ์ผ๋ถ๋ฅผ ์ ํ์ต๋๋ค.
์ง๋ฌธ: ์ฌ์ฉ์๊ฐ ์ฑ์ ํน์ ์์์ผ๋ก ์ด๋ํ ๋ ์ธ์ด๋ฅผ ์ ํํด์ผ ํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?๊ทธ๊ฒ์ด ํ์คํ ์๊ตฌ ์ฌํญ์ด ์๋๋ผ๋ ๊ฒ์ด ์ณ์ ์๋ ์์ต๋๋ค. ๋ก๋ ์ ๋ฒ์ญ์ ๋ฐฐํฌํ๋ ค๊ณ ์๋ํ ์ ์์ง๋ง ํ์ฌ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ ๋ก๋ํ๊ฑฐ๋ ํ์ด์ง์ ์์น๋ฅผ โโ๋ณ๊ฒฝํ์ง ์๊ณ ์ธ์ด๋ฅผ ๋์ ์ผ๋ก ์ ํํ ์ ์๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉ์ ๊ฒฝํ์ ์์ ํ ๋ณํํฉ๋๋ค. ๋ฒ์ญ์ ์ค๋ซ๋์ ๋จ๊ฑฐ์ด ์ฃผ์ ์์ต๋๋ค.
๊ธฐ์ ์ ์ผ๋ก ์ ์ฒด ์ฑ์ ๋ค์ ๋ก๋ํ๋ฉด์๋ ์ฌ์ฉ์๊ฐ ์๋ ์์น๋ฅผ ๊ณ์ ์ ์งํ ์ ์์ต๋๋ค.
์ด๋๊ฐ์ ์ ์ฅ๋๊ณ ์์ ์ ๊ฒ์๋๋ ์ํ ๊ธฐ๋ฐ ์ฑ(ngxs, ngrx ๋๋ ๊ธฐํ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฌํจ)์ด "๊ทธ๋ฅ" ํ์ํฉ๋๋ค.
์ ์ผํ ํธ๋ฆญ์ ์คํฌ๋กค ์์น๋ฅผ ์ ์งํ๋ ๊ฒ์ด์ง๋ง ๊ทธ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค.
@petebacondarwin ๋๋ ๋น์ ์๊ฒ ๋์ํ๋ค๊ณ ๋งํด์ผํฉ๋๋ค. ๋๋ ์ฑ์ ์ฌ์ฉํ ๋ ์ธ์ด ๊ฐ์ ์๊ตฌ์ ์ผ๋ก ์ฑ์ ์ ํํ๋ ์ค์ ์ต์ข ์ฌ์ฉ์(๊ฐ๋ฐ ๋จ๊ณ์ ํ ์คํฐ ์ ์ธ)๋ฅผ ๋ชจ๋ฆ ๋๋ค. ๋ฌผ๋ก ์ด๋ป๊ฒ๋ ๋ค๋ฅธ ๊ณณ์์ ์ด๋ฉด ์ฒ์์๋ ๊ทธ๋ ๊ฒ ํ๊ฒ ์ง๋ง ๋์ค์๋ ๋๋ฌธ ๊ฒฝ์ฐ์ ๋๋ค.
์๋๋ฉด ์ฌ๊ธฐ ์๋ ๋ชจ๋ ์ฌ๋๋ค์ด ๋ฐํ์ ๋ฒ์ญ์ ๋ํด ๋ค๋ฅธ ์ ์๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๊น?
๋ฐํ์ ๋ฒ์ญ์ด ์ ๋์ ์ผ๋ก ํ์ํฉ๋๋ค. ๊ณ ๊ฐ์ ๋น๋ ์๋ฒ๋ฟ๋ง ์๋๋ผ ํ์ฅ์์ ๋ฒ์ญ์ ํธ์งํ๊ณ ์ ๋ฐ์ดํธํ ์ ์์ด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ์ปดํ์ผ ์๊ฐ๊ณผ ๋ฐ๋๋๋ ๋ฐํ์์ ๋๋ค.
ํ์ด์ง ๋ก๋ ํ ์ธ์ด์ ์ค์ ์ ํ์ ์์ผ๋ฉด ์ข์ต๋๋ค.
๊ณ ๊ฐ์ด ๋ฌด์์ ํ๊ณ ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ง๋ง "ํ๋ก๋์ ์น์ฌ์ดํธ์์ ์ค์๊ฐ์ผ๋ก ๋ฒ์ญ์ ํธ์งํ๋ ๊ฒ"์ ์ผ๋ฐ์ ์ธ ์๋๋ฆฌ์ค์ฒ๋ผ ๋ค๋ฆฌ์ง ์์ต๋๋ค.
๋ผ์ด๋ธ ์ธ์ด ๋ณ๊ฒฝ(_ํ์ด์ง ์๋ก๊ณ ์นจ ์์ด_)์ด ๊ทธ๋ฐ ๊ฑฐ๋ ์ฐจ๋จ๊ธฐ๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
์ฌ์ฉ์์ ์ธ์ด ๋ณ๊ฒฝ์ ํ ๋ฒ๋ง ๋ฐ์ํฉ๋๋ค.
์๊ฐํด ๋ณด์ธ์. ์ ํ ์ธ์ด๋ฅผ ๋ช ๋ฒ์ด๋ ๋ฐ๊พธ์ จ์ต๋๊น? ์๋ง๋ ํ ๋ฒ ๋๋ ๋ฐฉ๊ธ ๊ธฐ๋ณธ ์ธ์ด๋ก ๋กค๋งํ์ ๊ฒ์ ๋๋ค.
ํ์ด์ง๋ฅผ ๋ค์ ๋ก๋ํ์ง ์๊ณ ์ค์๊ฐ ๋ณ๊ฒฝ์ ์ํํ๊ธฐ ์ํด ์ธ์ด ๋ณ๊ฒฝ์ ๊ด์ฐฐํ๋ ๊ฒ์ ์ฌ์ฉ์์ ํ์ ๋์ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์๋ ๊ฒ์ ๋ํด ๋ง์ ์ฑ๋ฅ ์ ํ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
๊ถ๊ทน์ ์ผ๋ก ์ธ์ ๋๋ฅผ ์ํด 3๊ฐ์ง๋ก ๊ท๊ฒฐ๋ฉ๋๋ค.
@์นด๋ผ์๋
๋ฒ์ญ์ ๋น๋๊ธฐ์์ผ๋ก ๊ฐ์ ธ์จ ๋ค์์๋ง Angular ์ฑ์ ๋ก๋ํ ์ ์์ต๋๋ค.
import(...)
๋ฅผ ์ฌ์ฉํ์ฌ app.module์ ๋น๋๊ธฐ์์ผ๋ก ๋ก๋ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ ๋ด ์๊ฒฌ์ ์ฐธ์กฐํ์ญ์์ค.
๊ฐ์ธ์ ์ผ๋ก ๋๋ Wikipedia๋ฅผ ์ฌ์ฉํ์ฌ ๋ด๊ฐ ์๋ ์ํ์ ์ ๋ชฉ์ด ๋ค๋ฅธ ์ธ์ด๋ก "๋ฒ์ญ๋" ๊ฒ์ ์์๋ ๋๋ค.
์ด ์๋์๋ ์ด์ค ์ธ์ด ๋๋ ์ผ์ค ์ธ์ด๋ฅผ ๊ตฌ์ฌํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค(๋ฏธ๊ตญ ๋ด์์ ์ ์ธํ๊ณ ๋ ์๋ฌด๋ฐ ํด๊ฐ ์์).
์ฌ์ฉ์๊ฐ ๋ผ์ด๋ธ ์ค์์น ์ธ์ด๋ฅผ ์ํ ์๋ ์์ต๋๋ค. ์์ ํ ๊ทธ๋ด๋ฏํฉ๋๋ค. Wikipedia ์์ ๋ ์ด๊ฒ์ ํ์ฑํํ ๊ธ์ ์ ์ธ ๊ฒฐ๊ณผ์ ๋๋ค. ์ฑ๋ฅ์ ๊ตฌ์ค๋ก ๋ค๋ฅธ ์ ์ฌ์ ์ธ ์ฉ๋๊ฐ ์ด์ ์๊ธฐ ์ ์ ์ฐ๋ฆฌ๊ฐ ์ ๊ทธ๊ฒ์ ์ต์ ํด์ผ ํ๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
"์ ์กฐํ ๋ฒ์ญ ์ฑ๋ฅ"์ ์ฌ๋ฌ๋ถ์๊ฒ ๊ฐ์ ์๊ฐ ๋์ด์ผ ํ๋ ocombe์ ngx-translate์กฐ์ฐจ๋ ์ผ์์ ์ธ ์ฌ์ฉ์์๊ฒ ์ถฉ๋ถํ ๋น ๋ฅด๊ฒ ์คํ๋์์ต๋๋ค.
์ ๋ ๊ฐ์ธ์ ์ผ๋ก 3๊ฐ ๊ตญ์ด๋ฅผ ๊ตฌ์ฌํ๋ฉฐ ํ ๊ฐ์ง ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ฐ ์ ์ฐฉํ ์ ์์ต๋๋ค. ๋ชจ๋ ์ธ์ด๊ฐ ์ ๊ฒ๋ ์๋ฆ๋ต์ต๋๋ค.
๋๋ ์ด๊ฒ์ ๋์ํ ์ ์๋ค๊ณ ๋งํ๋ค.
์๊ฐํด ๋ณด์ธ์. ์ ํ ์ธ์ด๋ฅผ ๋ช ๋ฒ์ด๋ ๋ฐ๊พธ์ จ์ต๋๊น? ์๋ง๋ ํ ๋ฒ ๋๋ ๋ฐฉ๊ธ ๊ธฐ๋ณธ ์ธ์ด๋ก ๋กค๋งํ์ ๊ฒ์ ๋๋ค.
Wikipedia๋ ๊ธฐ์ฌ์ ๋ค๋ฅธ ์ธ์ด๊ฐ ์ค์ ๋ก ๋
๋ฆฝ์ ์ธ ๊ธฐ์ฌ์ด๊ธฐ ๋๋ฌธ์ ์ต์
์ ์์
๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ ํํ ๋์ผํ ์ฌ์ดํธ์ ๋ค๋ฅธ ์ธ์ด๋ ํ์ํ์ง ์์ต๋๋ค. 4๊ฐ๊ตญ์ด๋ฅผ ๊ตฌ์ฌํ๋๋ผ๋.
๊ทธ๋ฆฌ๊ณ ์ค์ ๋ก ๋ผ์ด๋ธ ์ ํ์ด ํ์ํ ๊ฒฝ์ฐ @petebacondarwin ์ด ์ธ๊ธํ ์ฌ์ฉ์ ์ง์ ๋ฒ์ญ ํ์ดํ ๋๋ @ocombe์ ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ข์ต๋๋ค. ์ ๋ ์ด๊ฒ์ด ์ด ํ ๋ก ์ ํ๊ธฐ์ ๊ฐ์ฅ ์ข์ ์ฅ์๊ฐ ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. (์ง๊ธ๊น์ง๋ ๋ชจ๋ ๋งค์ฐ ํฉ๋ฆฌ์ ์ด์์ง๋ง) ์ฐ๋ฆฌ๊ฐ ๋ถ์ ์ ์ธ ๋ ผ์์ ๋น ์ ธ๋ค์ง ์์๊น ๊ฑฑ์ ๋ฉ๋๋ค. ๊ฐ๊น์ด ์ฅ๋์ Angular ํ๋ ์์ํฌ๊ฐ ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ธ์ด ์ ํ ์๋ฃจ์ ์ ์ ๊ณตํ์ง ์์ ๊ฒ์ ๋๋ค.
๋๋ ์ด ๋ฌธ์ ์ ๊ฐ์น๊ฐ ๊ทธ ๊ณผ์ ์ ๋ฐ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด ๋ฌธ์ ์ ๋ํ ์ค๋ช ์ ๋งํฌ๋ ๋ฏธํด๊ฒฐ ๋ฌธ์ ๋ฐ PR์ https://github.com/angular/angular/milestone/101 ๋ก ์ด๋ํ์ผ๋ฉฐ ์ด PR์ ๋ซ๊ณ ์ ๊ธ ์์ ์ ๋๋ค.
๊ธฐ๋ฅ ์์ฒญ์ ๋ํ ์๋ก์ด ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ ์ ๋ฌธ์ ๋ฅผ ์ด๊ณ ์ ๋ฅผ ํ๊ทธํ์ญ์์ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
ot ๋ชจ๋์์ ๋์ ๋ฐ์ธ๋ฉ์ ์ํํ๋ ๊ธฐ๋ฅ์ ๋ณด๊ณ ์ถ์ต๋๋ค. ํนํ ์ด๊ฒ์ด ๋ก๋๋งต์ ์ถ๊ฐ๋์ด์ผ ํ๋ ์ด์ ๋ฅผ ๋ท๋ฐ์นจํ๋ ๋ ๊ฐ์ง ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์ต๋๋ค.
์ฒซ ๋ฒ์งธ๋ ๋ชจ๋ ์ธ์ด์ ๋ํด ๋ณ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ์ง ์๋ ๊ธฐ๋ณธ ์ฌ์ฉ ์ฌ๋ก์ ๋๋ค. ์ด๋ฅผ ์ํด์๋ ์ฑ ์ธ๋ถ์์ ์ผ์ข ์ ๋ฆฌ๋๋ ์ ๋ก์ง์ด ํ์ํ๋ฉฐ ์ฌ์ดํธ๋ฅผ ์์ ํ ๋ค์ ๋ก๋ํ์ง ์๊ณ ๋ ์ธ์ด๋ฅผ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
๋ ๋ฒ์งธ๋ ์ฝ๋ฅด๋๋ฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ฐ์ผ์ ์ฑ์ ์๋ฒ ๋ฉํ๋ ๊ฒฝ์ฐ์ ๋๋ค. ๋ด๊ฐ ์๋ ํ ๋น์ ์ ์ ํ์ ์งํธ(jit)๋ก ์ฌ์ดํธ ์๋๋ฅผ ๋ฆ์ถ๊ฑฐ๋, ๋ชจ๋ ์ธ์ด์ ๋ํด ๋ณ๋์ ์ฑ์ ๋ง๋ค๊ฑฐ๋, ์ฑ์ ๋ชจ๋ ์ธ์ด๋ฅผ ํฌํจํ๋ ๊ฒ์ ๋๋ค. ์ด๋ค ์ค ์ด๋ ๊ฒ๋ ์ข์ ์ต์ ์ด ์๋๋๋ค. Ionic์ i18n์ ์ฌ์ฉํ์ง ์๋ ๊ฒ ๊ฐ์๋ฐ, ๊ทธ ์ด์ ๊ฐ ๋ฌด์์ธ์ง ๊ถ๊ธํฉ๋๋ค.