Angular: [i18n] ๊ณ„ํš

์— ๋งŒ๋“  2017๋…„ 05์›” 02์ผ  ยท  310์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: angular/angular

๋‹ค์Œ์€ i18n์— ๋Œ€ํ•ด ๊ณ„ํš๋œ ๊ธฐ๋Šฅ/์ˆ˜์ • ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด i18n ๊ธฐ๋Šฅ์„ Angular์— ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ฃผ์ €ํ•˜์ง€ ๋ง๊ณ  ์•„๋ž˜์— ๋ฌธ์˜ํ•˜์„ธ์š”. ๊ฐ€๋Šฅํ•œ์ง€ ๊ทธ๋ฆฌ๊ณ  ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ๋ ค ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.
๋ฒ„๊ทธ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฌธ์ œ๋ฅผ ์—ฝ๋‹ˆ๋‹ค(์—ฌ๊ธฐ์—์„œ ์ด์— ๋Œ€ํ•ด ๋…ผ์˜ํ•  ํ•„์š” ์—†์Œ).

์•„์ด๋น„๋ฅผ ์œ„ํ•ด

_์ฐธ๊ณ : ๋Ÿฐํƒ€์ž„ ๋ฒˆ์—ญ ๋ฐ ๋Œ€๋ถ€๋ถ„์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์€ ivy_์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠน์ง•

  • [ ] ๋Ÿฐํƒ€์ž„ i18n(AOT๊ฐ€ ์žˆ๋Š” ๋ชจ๋“  ๋กœ์ผ€์ผ์— ๋Œ€ํ•œ ํ•˜๋‚˜์˜ ๋ฒˆ๋“ค) - [ ์ž‘์—… ์ค‘ ]
  • [ ] ID ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋„๊ตฌ(ID ์ƒ์„ฑ ์ค‘๋‹จ ์‹œ) - [PR #15621]
  • [ ] ํ…œํ”Œ๋ฆฟ ์™ธ๋ถ€์—์„œ ๋ฒˆ์—ญ ๋ฌธ์ž์—ด ์‚ฌ์šฉ - #11405 - [ ์ž‘์—… ์ค‘ ]
  • [ ] xmb/xlf์— ๋Œ€ํ•ด ๋™์ผํ•œ ID ์ƒ์„ฑ - #15136 [ ๋ธŒ๋ ˆ์ดํ‚น ์ฒด์ธ์ง€ PR #15621]

    ๋ฌธ์ œ

  • [ ] i18n ID ์ƒ์„ฑ ์‹œ ph/ICU ํ‘œํ˜„์‹ ๋ฌด์‹œ - #15573 [ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ PR #15621, ์ฐจ๋‹จ๋จ ]

์šฐ์„ ์ˆœ์œ„ ์—†์Œ

ํŠน์ง•

  • [ ] ์†์„ฑ์—์„œ ICU ๋ฉ”์‹œ์ง€ ํ—ˆ์šฉ - #21615 [ ์ฐจ๋‹จ๋จ , ํŒŒ์„œ ์—…๋ฐ์ดํŠธ ํ•„์š”]
  • [ ] HTML ๊ตฌ๋ฌธ ๋ถ„์„๊ธฐ ๊ฐœ์„ (๋ณด๊ฐ„์„ ์œ„ํ•ด ๋ ‰์„œ ์ถœ๋ ฅ์— ์ƒˆ INTERPOLATION_TOKEN ์ถ”๊ฐ€) - #9340
  • [ ] ๋ฒˆ์—ญ ๊ฑฐ๋ถ€(translate="false" ์†์„ฑ ์‚ฌ์šฉ) - #7814
  • [ ] I18nPluralPipe๋Š” "#"์„ ์‚ฌ์šฉํ•  ๋•Œ ์ˆซ์ž๋ฅผ ํ˜„์ง€ํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. - #11761
  • [ ] ICU ๋ณต์ˆ˜ ํ˜•์‹(์˜คํ”„์…‹ ์ถ”๊ฐ€ ๋ฐ #) - #9117 [ ์ฐจ๋‹จ๋จ , "ICU ๋ฉ”์‹œ์ง€ ์ด์Šค์ผ€์ดํ”„ ํ—ˆ์šฉ - #9286" ํ•„์š”]
  • [ ] ICU ์„œ์ˆ˜ ๋ฉ”์‹œ์ง€ ๊ตฌํ˜„
  • [ ] ์ž๋™ ๊ฐ์ง€ TRANSLATIONS_FORMAT - #11695
  • [ ] NgModule ์ˆ˜์ค€์—์„œ ๋ฒˆ์—ญ ์ œ๊ณต - #11431
  • [ ] ๊ณผํ•™ ๋ฒˆํ˜ธ ํŒŒ์ดํ”„ ์ถ”๊ฐ€ - #18276
  • [ ] API ์—ด๊ธฐ - [PR #14281]
  • [ ] ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ ๋‚ด์šฉ์ด @@ id ๊ฐ€ ๊ฐ™์œผ๋ฉด i18n ์ถ”์ถœ ์ค‘ throw - #18272

    ๋ฌธ์ œ

  • [ ] ์„ ํ–‰ ๋ฐ ํ›„ํ–‰ ๊ณต๋ฐฑ ๋ฌด์‹œ - #13114

  • [ ] select-icu์— ์ˆซ์ž ํ—ˆ์šฉ - #17799
  • [ ] ICU ๋ฉ”์‹œ์ง€ ์ด์Šค์ผ€์ดํ”„ ํ—ˆ์šฉ - #9286 [ ์ฐจ๋‹จ๋จ , ํŒŒ์„œ ์—…๋ฐ์ดํŠธ ํ•„์š”]
  • [ ] ํ…œํ”Œ๋ฆฟ ํŒŒ์„œ: ๊ฐœ์ฒด ๋ฆฌํ„ฐ๋Ÿด์„ ํŒŒ์ดํ”„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•  ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. - #9571

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

ot ๋ชจ๋“œ์—์„œ ๋™์  ๋ฐ”์ธ๋”ฉ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์ด๊ฒƒ์ด ๋กœ๋“œ๋งต์— ์ถ”๊ฐ€๋˜์–ด์•ผ ํ•˜๋Š” ์ด์œ ๋ฅผ ๋’ท๋ฐ›์นจํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ๋Š” ๋ชจ๋“  ์–ธ์–ด์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์›ํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋ณธ ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ์•ฑ ์™ธ๋ถ€์—์„œ ์ผ์ข…์˜ ๋ฆฌ๋””๋ ‰์…˜ ๋กœ์ง์ด ํ•„์š”ํ•˜๋ฉฐ ์‚ฌ์ดํŠธ๋ฅผ ์™„์ „ํžˆ ๋‹ค์‹œ ๋กœ๋“œํ•˜์ง€ ์•Š๊ณ ๋Š” ์–ธ์–ด๋ฅผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ๋Š” ์ฝ”๋ฅด๋„๋ฐ”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ฐ”์ผ์— ์•ฑ์„ ์ž„๋ฒ ๋”ฉํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์•„๋Š” ํ•œ ๋‹น์‹ ์˜ ์„ ํƒ์€ ์ง€ํŠธ(jit)๋กœ ์‚ฌ์ดํŠธ ์†๋„๋ฅผ ๋Šฆ์ถ”๊ฑฐ๋‚˜, ๋ชจ๋“  ์–ธ์–ด์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ์•ฑ์„ ๋งŒ๋“ค๊ฑฐ๋‚˜, ์•ฑ์— ๋ชจ๋“  ์–ธ์–ด๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋“ค ์ค‘ ์–ด๋Š ๊ฒƒ๋„ ์ข‹์€ ์˜ต์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค. Ionic์€ i18n์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ, ๊ทธ ์ด์œ ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  310 ๋Œ“๊ธ€

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>
๋ถ„๋ฆฌ๋œ ๋ฌธ์ž์—ด๋กœ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
๊ฐ„๋‹จํ•œ ๋Œ€๋‹ต: ๋Œ€์ƒ ์–ธ์–ด์˜ ๊ทœ์น™์„ ์•Œ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋ชจ๋“  ์–ธ์–ด๊ฐ€ '์ธ์‚ฌ๋ง', '์„ฑ๋ณ„', '์ด๋ฆ„' ํ˜•์‹์„ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ฒญํฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋ฌธ๋งฅ์„ ์ฃฝ์ด๋ฉด ๋ฒˆ์—ญ๊ฐ€๊ฐ€ ์™„์ „ํ•œ ๋ฌธ์žฅ์˜ ์˜๋ฏธ๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • CSS๋กœ ์ฒญํฌ๋ฅผ ์˜ฌ๋ฐ”๋ฅธ ์ˆœ์„œ๋กœ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ฒˆ์—ญ์— ๋Œ€ํ•œ ๊ทœ์น™์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋ฏ€๋กœ CSS ์‚ฌ์šฉ์ž๋Š” ๋Œ€์ƒ ์–ธ์–ด๋ฅผ ์•Œ์•„์•ผ ํ•˜๊ณ  ๋ฒˆ์—ญ ์‚ฌ์šฉ์ž๋Š” CSS๋ฅผ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ฝ”์–ด 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 ๋นŒ๋“œ๋ฅผ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํŠนํžˆ ์•ฑ์ด ์ƒ๋‹นํžˆ ํฌ๊ณ  ์—ฌ๋Ÿฌ ํ™˜๊ฒฝ์— ํ•˜๋ฃจ์— ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐฐํฌํ•œ๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•  ๋•Œ ์ƒ์ƒํ•  ์ˆ˜ ์žˆ๋“ฏ์ด ๋ฆฌ์†Œ์Šค ์ง‘์•ฝ์ ์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋ฐ”๋ผ๋Š” ๊ฒƒ์€:

  1. ๋Ÿฐํƒ€์ž„ i18n์˜ ๋Œ€๋žต์ ์ธ ETA
  2. ๋Ÿฐํƒ€์ž„ i18n์ด ๋ชจ๋“  ์–ธ์–ด์— ๋Œ€ํ•ด ๋‹จ์ผ ๋นŒ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€ ํ™•์ธ
  3. ์ƒ์„ฑ๋œ ๊ฐ ์–ธ์–ด๊ฐ€ ์ง€์—ฐ ๋กœ๋“œ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๋˜๋Š” ๋‹จ์ผ ๋Œ€๊ทœ๋ชจ ๋ฒˆ๋“ค์— ํฌํ•จ๋˜๋Š”์ง€ ์—ฌ๋ถ€

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์ด ์–ธ์ œ ๋‚˜์˜ฌ์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”, ํ–ฅํ›„ ๊ธฐ๋Šฅ์˜ ํˆฌ๋ช…์„ฑ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๋‹ค์Œ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต์„ ์•„๋Š” ๊ฒƒ์ด ๋งค์šฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  1. ์ƒˆ๋กœ์šด i18n ์›Œํฌํ”Œ๋กœ๊ฐ€ https://angular.io/guide/i18n ์— ์„ค๋ช…๋œ ํ˜„์žฌ ์›Œํฌํ”Œ๋กœ์™€ ์–ผ๋งˆ๋‚˜ ๋‹ค๋ฅผ์ง€ ์•„์‹ญ๋‹ˆ๊นŒ?

  2. i18n ๋ฐ i18n-*(์˜ˆ: ์„ ํƒ์  ์‚ฌ์šฉ์ž ์ง€์ • ID๊ฐ€ ์žˆ๋Š” i18n-title ์†์„ฑ)์ด ํ…œํ”Œ๋ฆฟ์—์„œ ๊ณ„์† ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๊นŒ?

  3. ๋‹ค์Œ ๋ช…๋ น์ด ๊ณ„์† ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

ng serve --aot --locale fr

ng xi18n  --i18nFormat=xlf
ng xi18n  --i18nFormat=xlf2
ng xi18n  --i18nFormat=xmb
  1. ํ…œํ”Œ๋ฆฟ์—์„œ ์ถ”์ถœํ•œ messages.xlf ํŠธ๋žœ์Šค ๋‹จ์œ„๊ฐ€ ์ฝ”๋“œ์— ์‚ฌ์šฉ๋œ ๊ฒƒ๊ณผ ๋ณ‘ํ•ฉ๋˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
  1. ์šฐ๋ฆฌ๋Š” ์—…๋ฐ์ดํŠธ ๊ฒฝํ—˜์„ ๊ฐ€๋Šฅํ•œ ํ•œ ๋งค๋„๋Ÿฝ๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ด์ „์— ์ž‘๋™ํ–ˆ๋˜ ๊ฒƒ์ด ์ ์–ด๋„ v7๊นŒ์ง€๋Š” ๊ณ„์† ์ž‘๋™ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  2. i18n ์†์„ฑ์€ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
  3. ์ถ”์ถœ๋„ ๋™์ผํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค
  4. ๊ทธ๊ฒƒ์€ ์•„๋งˆ๋„ ๋ณ€๊ฒฝ๋  ์œ ์ผํ•œ ๋ถ€๋ถ„์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„์ง ์–ด๋–ป๊ฒŒ ๋ณ€๊ฒฝ๋ ์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋Š” ์‚ฌํ•ญ์„ ๋งํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฉ”์‹œ์ง€๋Š” ๋ณด๊ธฐ๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ๋Ÿฐํƒ€์ž„์— ๋ณ‘ํ•ฉ๋ฉ๋‹ˆ๋‹ค(๋”ฐ๋ผ์„œ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ๊ณผ ํ‘œ์‹œ๋˜๋Š” ๋ณด๊ธฐ ์‚ฌ์ด ํ™”๋ฉด)

@Toub ์˜ ์˜๊ฒฌ์— ๋”ฐ๋ผ ์ด ์ „ํ™˜ ๊ธฐ๊ฐ„ ๋™์•ˆ ๊ตฌํ˜„ํ•˜๋ ค๋Š” ๋‹ค์Œ ์ ‘๊ทผ ๋ฐฉ์‹(i18n ์†์„ฑ๊ณผ ngx-translate ํ˜ผํ•ฉ)์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ๋Š” ์ƒˆ๋กœ์šด i18n ์ง€์›์ด ์ค€๋น„๋  ๋•Œ ์ฝ”๋“œ์—์„œ ์ˆ˜ํ–‰ํ•  ์—…๋ฐ์ดํŠธ๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

(์šฐ๋ฆฌ๋Š” ๋™์  ๋กœ์ผ€์ผ์„ ์›ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋กœ์ผ€์ผ๋‹น ํ•˜๋‚˜์˜ ์ƒ์„ฑ๋œ ์•ฑ์ด ์•„๋‹Œ)

  • ๊ฐ๋„ ์ถ”์ถœ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก i18n ์†์„ฑ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ถ”์ถœ๋œ ๋„๊ตฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ xliff ํŒŒ์ผ(๋˜๋Š” ๋‹ค๋ฅธ ํ˜•์‹)์„ ngx-translate(json ๋˜๋Š” po)์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•์‹์˜ ์ฝ˜ํ…์ธ ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” 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"๊ณผ๋„ ํ˜ธํ™˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋Ÿฐํƒ€์ž„์— ๋ฒˆ์—ญ์„ ๋กœ๋“œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ…œํ”Œ๋ฆฟ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ฝ”๋“œ์—์„œ๋„ ๋ฒˆ์—ญ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋“ˆ๋‹น ๋ฒˆ์—ญ์„ ๋ถ„ํ• ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ฒ˜์Œ์—๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ).

๋‹จ์ :

  • ๋Ÿฐํƒ€์ž„์— ๋ฒˆ์—ญํ•˜๋Š” ๊ฒƒ์€ ๋ฒˆ์—ญ์ด ์ถ”์ถœ๋˜์–ด html ๋…ธ๋“œ๋กœ ๋ณ€ํ™˜๋  ๋•Œ ์•ฝ๊ฐ„์˜ ๋น„์šฉ์ด ๋“ญ๋‹ˆ๋‹ค.
  • ์•ฑ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ์€ ๋ฒˆ์—ญ์„ ์ง€์—ฐ ๋กœ๋“œํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„๋งŒํผ ์ง€์—ฐ๋˜๊ฑฐ๋‚˜ ๋ฒˆ๋“ค์ด ์•ฝ๊ฐ„ ๋” ํฝ๋‹ˆ๋‹ค(๋ฒˆ์—ญ์„ ๋ฒˆ๋“ค๋กœ ๋ฌถ๋Š” ๊ฒฝ์šฐ)
  • ๋ฒˆ์—ญ์„ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ์•ฑ ๋ฒˆ๋“ค์— ์ง๋ ฌ ๋ณ€ํ™˜๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋ฉฐ ์ด๋Š” ๋งŽ์€ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค(์ด๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ผ์ข…์˜ json์œผ๋กœ ๋ฒˆ์—ญ์„ "์‚ฌ์ „ ์ปดํŒŒ์ผ"ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์•„์ง ๊ฒฐ์ •ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. )

์ด๋ก ์ ์œผ๋กœ ์ „์ฒด ์•ฑ์„ ๋‹ค์‹œ ๋กœ๋“œํ•˜์ง€ ์•Š๊ณ  ์–ธ์–ด๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ํ…œํ”Œ๋ฆฟ์ด ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ค์–ด์•ผ ํ•˜๊ฑฐ๋‚˜ 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

  • v7์—์„œ ivy๋ฅผ ๊ธฐ๋Œ€ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. v8์€ 2019๋…„ 3์›”/4์›”๋กœ ์˜ˆ์ • ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. v7์—์„œ ivy๋ฅผ ๊ธฐ๋Œ€ํ•˜๋ฉด ์•ˆ ๋˜๋Š” ๊ฒฝ์šฐ 2019๋…„ 4์›”์— ivy๊ฐ€ ์ถœ์‹œ๋  ๋•Œ๊นŒ์ง€ ๊ตญ์ œํ™”(i18n)์— ๋ฌด์—‡์„ ์‚ฌ์šฉํ• ์ง€์— ๋Œ€ํ•œ ๊ถŒ์žฅ/ํ•ฉ์˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์ž˜๋ชป๋œ ์ •๋ณด์ž…๋‹ˆ๋‹ค. ํ•ต์‹ฌ ํŒ€์€ 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 ์—ฌ๊ธฐ์—์„œ ์ŠคํŒธ์„ ์ œ๊ฑฐํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ฆฌ๊ณ  ๋‚ด ๋Œ“๊ธ€๋„.

  1. @fetis ์—๊ฒŒ : ๋‹น์‹ ๊ณผ ๊ฐ™์€ ์‚ฌ๋žŒ๋“ค์€ ์ด์Šˆ๋ฅผ ํŒ”๋กœ์šฐ ํ•ด์ œํ•˜๊ณ  ์ถœ์‹œ๋ฅผ ์œ„ํ•ด ๊ตฌ๋…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    image

  2. @Andrulko ์—๊ฒŒ : ์šฐ๋ฆฌ๋Š” ์ƒ๊ด€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค

  3. @ angular๋กœ : ์—ฌ๊ธฐ์—์„œ ๋ถˆํ‰ํ•˜๋Š” ๊ฒƒ์„ ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค! ์šฐ๋ฆฌ๊ฐ€ vX์šฉ์ด ์•„๋‹Œ v7์šฉ ์•„์ด๋น„๋ฅผ ์›ํ•˜๊ฑฐ๋‚˜ v7์šฉ์œผ๋กœ ํฌ๊ฒŒ ๊ฐœ์„ ๋œ ์ œํ’ˆ์„ ํŒ๋งคํ•˜์ง€ ์•Š๋Š” ๋ฐ˜๋ฉด ๊ท€ํ•˜๊ฐ€ ์ด์— ์‘๋‹ตํ•  ์ˆ˜ ์—†๊ฑฐ๋‚˜ ๋งˆ๊ฐ์ผ์„ ์ค€์ˆ˜ํ•˜๊ธฐ ์œ„ํ•ด 7.x์— ๋„ฃ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค... ์ด๊ฒƒ์€ ๊ณตํ‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค! ์˜ˆ ์˜ต์…˜์€ ์•„๋ฌด ๊ฒƒ๋„ ๋ฐœํ‘œํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด์–ด์•ผ ํ•˜๋ฉฐ ์•„๋ฌด๋„ ์ด๊ฒƒ์ด ๋‚˜์œ ์ƒ๊ฐ์ด๋ผ๊ณ  ๋ถˆํ‰ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ž์‹ ์˜ ์œ„์น˜๋ฅผ โ€‹โ€‹์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ, ์šฐ๋ฆฌ๋Š” v2 ์ดํ›„ ์˜ฌ๋ฐ”๋ฅธ i18n์„ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ํฐ ์•ฑ์— ๋Œ€ํ•œ ์ด ํ•„์ˆ˜ ์ธก๋ฉด์—์„œ 50000๊ฐœ์˜ ๋ฌธ์ž์—ด์„ ํฌํ•จํ•˜๋Š” ๊ตญ์ œ ์›น ์•ฑ๊ณผ ๊ฐ™์€ ํฐ ์•ฑ์— ๋Œ€ํ•œ ๊ฐ๋„ ์ค€๋น„๋ฅผ ํŒ๋งคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋‹น์‹ ์€ ์ด๊ฒƒ์„ ์ฝ๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•˜์ง€ ์•Š์ง€๋งŒ ๋™์ •์‹ฌ๊ณผ ์ข‹์€ ๋ฏฟ์Œ, imho ์šฐ๋ฆฌ๊ฐ€ i18n์„ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ๋ชจ๋“  ์ธก๋ฉด์— ๋Œ€ํ•ด ๋Š๋ฆฐ ๋นŒ๋“œ ์‹œ๊ฐ„/๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์œผ๋ฉด ๊ฐ๋„๊ฐ€ ๊ต‰์žฅํ•˜๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠน์ • ๋ฐฉํ–ฅ์€ ์ƒ๋‹จ์—์„œ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•˜๋ฉฐ ๋ฌผ๋ก  ๊ฒฐ์ •์ž์—๊ฒŒ ๋งํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. big-google์—์„œ ์šฐ๋ฆฌ๋Š” ์ด์™€ ๊ฐ™์€ ํฐ ์‹ค์ˆ˜๋ฅผ ํ•  ์ˆ˜ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋กœ๋ถ€ํ„ฐ ๋†’์€ ์˜ˆ์™ธ (๋น„ํŒ). ๋‚˜๋Š” exceptionels์™€ ๊ฐ™์€ Google ๊ฐœ๋ฐœ์ž๋ฅผ ๋ด…๋‹ˆ๋‹ค. ์‹ค์ˆ˜๊ฐ€ ์—†๋Š” ๋˜‘๋˜‘ํ•œ ์‚ฌ๋žŒ๋“ค์€ ๊ฒฝํ—˜ ๋งŽ์€ ๊ฐœ๋ฐœ์ž์™€ Google๊ณผ ๊ฐ™์€ devteam์—๊ฒŒ ์ด๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚˜์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค! ๋‚ด ๊ธ€๋กœ๋ฒŒ ์˜๊ฒฌ์€ ํšŒ์‚ฌ๊ฐ€ ์„ ํƒํ•œ ๋‹ค์Œ ๊ณต๊ฐœ ์†Œ์Šค๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ฐœ์ธ ํšŒ์‚ฌ์— ํŒ๋งค/์„ค๋ช…ํ•  ๋•Œ ๋น… ์•ฑ์— ๋Œ€ํ•ด Angular 100%๋ฅผ ํŒ๋งคํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค!

  4. @ ํŠนํžˆ ๋น„์ฆˆ๋‹ˆ์Šค ํšŒ์‚ฌ์—์„œ ์ผํ•˜์ง€ ์•Š๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด: ์˜คํ”ˆ ์†Œ์Šค๋ฅผ ์กด์ค‘ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด ๋Œ“๊ธ€์ด ์‹ซ์–ด์š”?!?!, lol go go my boss to wait.. to wait... angular๋ฅผ ์„ ํƒํ•œ ํ›„ ์šฐ๋ฆฌ๊ฐ€ ๋ฏฟ๊ธฐ ๋•Œ๋ฌธ์— ํฐ ์•ฑ์„ ์œ„ํ•ด ์ค€๋น„๋˜์—ˆ์Šต๋‹ˆ๋‹ค(80%๊ฐ€ ์•„๋‹Œ 100%)... ์šฐ๋ฆฌ๋Š” ์˜์กดํ•ฉ๋‹ˆ๋‹ค!

์šฐ๋ฆฌ๊ฐ€ ๋ฐฐ๋ฅผ ๋– ๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ์—ฌ๊ธฐ์—์„œ ๋‚˜์˜ ๋งˆ์ง€๋ง‰ ์ฝ”๋ฉ˜ํŠธ์ž…๋‹ˆ๋‹ค! ๊ตฌ๋… ์ทจ์†Œ + ๋‹ค์Œ ํ”„๋กœ์ ํŠธ์—์„œ Angular๋ฅผ ์„ ํƒํ•˜์ง€ ์•Š์Œ(๋‹น์‹ ์ด ์Šน์ž๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์—๋Š” ์šฐ๋ฆฌ ๊ฐ™์€ ์‚ฌ๋žŒ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค)

๊ทธ๋Ÿฐ ์—ด์ •! ๊ท ํ˜•์„ ์œ„ํ•ด... Angular 6์œผ๋กœ ์•ฑ์„ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๊ณ  6๊ฐœ ์–ธ์–ด๋กœ ๊ตญ์ œํ™”ํ–ˆ์œผ๋ฉฐ ์•ฝ๊ฐ„์˜ ๋ถˆํŽธํ•จ๋งŒ ๋Š๊ผˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋” ๋น ๋ฅธ ๋นŒ๋“œ ์‹œ๊ฐ„๊ณผ ์ฆ‰์„ ๋ฒˆ์—ญ์€ ํ™•์‹คํžˆ ์ข‹์ง€๋งŒ ์„ธ์ƒ์˜ ์ข…๋ง์€ ์•„๋‹™๋‹ˆ๋‹ค. i18n์ด ์•„๋‹Œ ํ”„๋ ˆ์ž„์›Œํฌ์˜ 98%๋Š” ๊ต‰์žฅํ•ฉ๋‹ˆ๋‹ค. ์ž˜ํ–ˆ์–ด! ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ์ƒˆ๋กœ์šด ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํฌํ„ธ์„ ์œ„ํ•ด Angular์— ๋Œ€ํ•œ ํ™˜์ƒ์ ์ธ ๊ฒฝํ—˜์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. i18n์€ ์Šค์œ„์Šค์—์„œ 4๊ฐœ ์–ธ์–ด๋ฅผ ์ง€์›ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•œ ๋งˆ์ง€๋ง‰ ๋ˆ„๋ฝ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ €๋Š” ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๊ฐ€ ์†Œํ†ต์— ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ๊ณ„ํš์„ ์œ„ํ•ด 1๋…„ ์ „์— i18 ๋ฆด๋ฆฌ์Šค๋ฅผ ๋” ์ž˜ ์˜ˆ์ธกํ–ˆ๋‹ค๋ฉด ์ด๋ฅผ ๊ณ„ํšํ•˜๊ณ  ๋‹ค๋ฅธ ๊ฐ€๋Šฅ์„ฑ์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์šฐ๋ฆฌ๋Š” ์–ด๋–ค ์—…๋ฐ์ดํŠธ๋ฅผ ๋“ฃ๊ธฐ๋ฅผ ๊ณ ๋Œ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. :-)

๊ฐ๋„๋ฅผ ๋ฐฉ์–ดํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ”„๋กœ๋•์…˜์—์„œ ์ถฉ๋ถ„ํžˆ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋‚ด๊ฐ€ ์ฐพ์€ ์ตœ๊ณ ์˜ ์†”๋ฃจ์…˜).

  1. ๋ฒˆ์—ญ ๋…ผ๋ฆฌ๋ฅผ ์–ด๋”˜๊ฐ€๋กœ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•ด ๋ฒˆ์—ญ๋œ ๊ฐ€๋ณ€ ํ…์ŠคํŠธ๋ฅผ ์ž์ฒด ๊ตฌ์„ฑ ์š”์†Œ์— ๋ž˜ํ•‘ํ•ฉ๋‹ˆ๋‹ค.
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>
  1. ๋‹ค์Œ๊ณผ ๊ฐ™์ด angular.json์—์„œ ๋นŒ๋“œ ๊ตฌ์„ฑ ํด๋”๋ฅผ ๊ตฌ์„ฑํ•˜์‹ญ์‹œ์˜ค.
"prod-en": {
  ...
   "outputPath": "dist/en/",
  ...
},
"prod-ru": {
  ...
   "outputPath": "dist/ru/",
  ...
}
  1. ๋‹ค๋ฅธ ์–ธ์–ด์— ๋Œ€ํ•ด ์•ฑ์„ ์ปดํŒŒ์ผํ•˜๋ ค๋ฉด ์ด์™€ ๊ฐ™์ด ๋„์ปค ๋นŒ๋“œ ํŒŒ์ผ์„ ๊ตฌ์„ฑํ•˜์‹ญ์‹œ์˜ค.
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
  1. ์ด nginx.conf๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜์œ„ ๋„๋ฉ”์ธ(์˜ˆ: en.site-name.com, ru.site-name.com)์—์„œ ์•ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ 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 ๋ฒˆ์—ญ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ถ€๋ถ„์— ์˜๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ xlf ์†Œ์Šค ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ(ng generate library libraryName ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ)?
  2. select ๋˜๋Š” pluralization์— ๋Œ€ํ•œ ๊ตญ์ œํ™”๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋™์•ˆ ์ƒ์„ฑ๋œ xlf ์†Œ์Šค ํŒŒ์ผ์€ ๋‹ค๋ฅธ ๋Œ€์•ˆ์— ๋Œ€ํ•œ trans-unit id๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋Œ€์•ˆ์— ๋Œ€ํ•ด์„œ๋„ ํ…œํ”Œ๋ฆฟ์„ ํ†ตํ•ด id๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?(์•„๋ž˜ ์ด๋ฏธ์ง€ ์ฐธ์กฐ)
    image

๋ช‡ ๊ฐ€์ง€ ๋‹ต๋ณ€์„ ๋„์™€์ฃผ์„ธ์š”.

@leanersLicense :

  1. cli๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋‹น ํ•˜๋‚˜์˜ ๋ฒˆ์—ญ ํŒŒ์ผ์„ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ฒˆ์—ญ์€ ํ˜„์žฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์ฆ‰, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ๋ฒˆ์—ญ์„ ๋กœ๋“œํ•  ์ˆ˜ ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค). ์šฐ๋ฆฌ๊ฐ€ ๊ตฌํ˜„ํ•  ๋‹ค์Œ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ํ•  ์ผ ๋ชฉ๋ก์˜ ๋งจ ์œ„์— ์žˆ์Šต๋‹ˆ๋‹ค(์ฝ”๋“œ ๋ฒˆ์—ญ ํฌํ•จ).
  1. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š”๋‹ค. <div i18n>Some value: {{ valueA // i18n(ph="PH_A") }}</div> ์™€ ๊ฐ™์€ ํŠน๋ณ„ํ•œ ์ฃผ์„์œผ๋กœ ์ž๋ฆฌ ํ‘œ์‹œ์ž์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ICU ํ‘œํ˜„์‹ @AndrewKushnir ์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
    ๊ธฐ๋Šฅ์„ ์š”์ฒญํ•˜๊ฑฐ๋‚˜ https://github.com/angular/angular/issues/24080 ์— ๋น„์Šทํ•œ ์˜๊ฒฌ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(ICU ํ‘œํ˜„์‹์— desc / ์˜๋ฏธ ์ถ”๊ฐ€).

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ์€ ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ๋ฒˆ์—ญ์„ ๋กœ๋“œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
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์„ ํ™•์ธํ•˜๋ฉด ๋ชจ๋“  ๋ฌธ์„œ ํฌ์ธํŠธ๊ฐ€ ๋ณด๋ฅ˜ ์ค‘์ž…๋‹ˆ๋‹ค.

https://is-angular-ivy-ready.firebaseapp.com/#/status

@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 ์‚ฌ์šฉ์˜ ๋‹จ์ ์ด ๋ฌด์—‡์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์— ๋”ฑ ๋งž๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

๋‹จ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋ฒˆ๋“ค ํฌ๊ธฐ ์ฆ๊ฐ€(์™ธ๋ถ€ lib + ๋นŒ๋“œ ์‹œ ์ฝ”๋“œ๋ฅผ ๊ต์ฒดํ•˜๋Š” ๋Œ€์‹  ์™ธ๋ถ€ ํŒŒ์ผ๋กœ ๋ณ€ํ™˜)
  • ๊ณต์‹์ ์ด์ง€ ์•Š์Œ(๋‚ด๊ฐ€ ์ฃฝ์œผ๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ค‘๋‹จ๋˜๊ณ  ๋™์ผํ•œ ์ˆ˜์ค€์˜ ์ง€์›์ด ์•„๋‹˜)
  • xliff/xmb๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๊ทธ๋Ÿฌ๋‚˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ†ตํ•ด json ๋ฐ ๊ธฐํƒ€ ํ˜•์‹์„ ์ง€์›ํ•˜๋ฉฐ ์ด๋ฅผ ์ง€์›ํ•˜๋Š” xliff/xmb ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ)
  • ๋ฒˆ์—ญ์„ ์ง€์—ฐ ๋กœ๋“œ/๋ถ„ํ• ํ•  ๋•Œ ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋Š” ๋™์ž‘์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๊ณ ์น  ์ˆ˜ ์—†์Œ)
  • ๊ตฌ๋ฌธ์€ ๊ณต์‹ ๊ตฌํ˜„์— ๋น„ํ•ด ๋” ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค.
  • ์„ฑ๋Šฅ(๋ฒˆ์—ญ์˜ ์ดˆ๊ธฐ ๋กœ๋“œ๋Š” ํ…์ŠคํŠธ๋ฅผ 1์ดˆ ๋™์•ˆ ์‚ฌ๋ผ์ง€๊ฒŒ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋Ÿฐํƒ€์ž„์— ๋‚ด์šฉ์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ ์••๋ ฅ)

๋งŽ์€ ๋ถ„๋“ค์ด ์ด์šฉํ•˜์‹œ๊ธฐ์— ๋”ฑ ์ข‹์€ ๊ฒƒ ๊ฐ™์•„์š”^^

Angular๊ฐ€ ์ ‘๊ทผ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ํˆฌ์žํ•˜์ง€๋งŒ ํ•ด๋‹น ํŒจํ‚ค์ง€์— ์–ธ์–ด๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์ด ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹จ์ผ ์–ธ์–ด ํ™˜๊ฒฝ์—์„œ ๋‚ด๋ฆฐ ๊ฒฐ์ •์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ 3-4๊ฐœ ์–ธ์–ด๋ฅผ ์ƒํ˜ธ ๊ตํ™˜์ ์œผ๋กœ ์ œ๊ณตํ•ด์•ผ ํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋ถ„๋ช…ํ•œ ์ด์ ์ด ์žˆ๋‹ค๋Š” ๋ฐœํ‘œ ์ดํ›„๋กœ ์ด ๊ธฐ๋Šฅ์˜ ๋ฆด๋ฆฌ์Šค๋ฅผ ์ฐธ์„์„ฑ ์žˆ๊ฒŒ ๊ธฐ๋‹ค๋ ค ์™”์Šต๋‹ˆ๋‹ค. ์ด ๋‰ด์Šค๋ฅผ ํ†ตํ•ด ๋ฒˆ์—ญ์„ ์™„์ „ํžˆ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ „๋žต์„ ์žฌ๊ณ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@ocombe Google์ด ๋‹น์‹ ์„ ๊ณ„์•ฝ์ž๋กœ ๊ณ ์šฉํ•  ๊ฐ€๋Šฅ์„ฑ์€ ์—†๋‚˜์š”?๐Ÿ˜‰

@DmitryEfimenko ์šฐ๋ฆฌ๋Š” ํ˜„์žฌ ngx-translate ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋งค์šฐ ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค.

@ocombe Google์ด ์™ธ๋ถ€ ๊ฐœ๋ฐœ์ž/์ปค๋ฎค๋‹ˆํ‹ฐ๋กœ๋ถ€ํ„ฐ ์ด ๊ธฐ๋Šฅ์„ ์ˆ˜๋ฝํ•  ๊ฐ€๋Šฅ์„ฑ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๊ฐ€ ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ ๊ฐ™์•„์š”.

๋‹น์‹ ์ด ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ง„์ง€ํ•˜๊ณ  ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ž‘์—…ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋ณด๋‚ด๊ณ  ์‹ถ๋‹ค๋ฉด ๊ทธ๋“ค์ด ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์ž‘์—…ํ•˜๋Š” ๋ฐ ๋„์›€์„ ๋ฐ›์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๊ณ  ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ง„์ง€ํ•˜๊ณ  ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ž‘์—…ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋ณด๋‚ด๊ณ  ์‹ถ๋‹ค๋ฉด ๊ทธ๋“ค์ด ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์ž‘์—…ํ•˜๋Š” ๋ฐ ๋„์›€์„ ๋ฐ›์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๊ณ  ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@ocombe @IgorMinar Ivy i18n์„ ์œ„ํ•ด ์ž์›๋ด‰์‚ฌ๋ฅผ ํ•˜๊ณ  ์‹ถ์€๋ฐ ๊ธฐํšŒ๊ฐ€ ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”.

๋‹น์‹ ์ด ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ง„์ง€ํ•˜๊ณ  ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ž‘์—…ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋ณด๋‚ด๊ณ  ์‹ถ๋‹ค๋ฉด ๊ทธ๋“ค์ด ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์ž‘์—…ํ•˜๋Š” ๋ฐ ๋„์›€์„ ๋ฐ›์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๊ณ  ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๊ธฐ๊บผ์ด ๊ธฐ์—ฌํ•˜๊ณ  ์‹ถ์ง€๋งŒ ์ž‘์—…์˜ ๋ฒ”์œ„์™€ ๋ณต์žก์„ฑ์„ ์ „ํ˜€ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ์›๋ณธ ๋ฉ”์‹œ์ง€์˜ ๋ชฉ๋ก์„ ์‚ฌ์–‘/์š”๊ตฌ์‚ฌํ•ญ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”, ์ด ๋ชฉ๋ก์€ ์ด์ œ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋‘ ๋ถ„์˜ ๊ด€์‹ฌ์„ ํŒ€์— ์ „๋‹ฌํ•˜์—ฌ ์ด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@ocombe 2๋ช… ์ด์ƒ์ธ ๊ฒƒ ๊ฐ™์•„์š”.

Angular ํŒ€์—์„œ ํ•„์š”ํ•œ ๊ฒƒ์€

  • ์š”๊ตฌ ์‚ฌํ•ญ ๋ชฉ๋ก/์ผ๋ถ€ ์‚ฌ์–‘
  • ๋Œ€๋žต์ ์ธ ๋ณต์žก์„ฑ ์ถ”์ •
  • ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋ฉ˜ํ†  1~2๋ช…

ํ•ด๋‹น ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ํ•จ๊ป˜ โ€‹โ€‹๊ฐœ๋ฐœ์„ ์กฐ์งํ•˜๊ณ  ์ž‘์—…์„ ๋ถ„ํ• ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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>

์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” ์•„์ด๋””๊ฐ€ ๋ณด์ด๋ฉดํƒœ๊ทธ๋Š” '์ œํ’ˆ' ์ „์šฉ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ œํ’ˆ ๋ชฉ๋ก์ด ๋“œ๋กญ๋‹ค์šด ๋ชฉ๋ก์œผ๋กœ ์ œ๊ณต๋  ์˜ˆ์ •์ด๋ฏ€๋กœ ID๊ฐ€ ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์˜ˆ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋™์  ์ฝ˜ํ…์ธ  ๋˜๋Š” ์ฝ˜ํ…์ธ  ๋ชฉ๋ก์„ ์ฒ˜๋ฆฌํ•  ๋•Œ๋งˆ๋‹ค ์ด๋ฅผ ๋‹ฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ์„ค๋ช… ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์—์„œ ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜์…จ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”,
์Šค์™‘๋‹

๊ทธ ๋ฌธ์ œ๋ฅผ ์—ด โ€‹โ€‹์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ ์—ฌ๊ธฐ์—์„œ ์‹ค์ œ๋กœ ์ฃผ์ œ๊ฐ€ ์•„๋‹ˆ๋ฉฐ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋™์ผํ•œ ๊ฒƒ์„ ์ฐพ๊ณ  ์žˆ๋‹ค๋ฉด ๋” ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@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) ๋ฌธ์ œ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ƒํƒœ์— ๋Œ€ํ•ด ์ด ํ˜ธ์—์„œ ์ฝ์„ ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ์„ค๋ช…:

๋˜ํ•œ ์ด๊ฒƒ์€ ํ™•์ธํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

image

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๊ฐ€์ง€๋กœ ๊ท€๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

  1. ํ…œํ”Œ๋ฆฟ ๋ฐ TS ํŒŒ์ผ์—์„œ ๋ฒˆ์—ญ์„ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.

    • ์†Œ์Šค ์–ธ์–ด ์ž์‚ฐ์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

    • ๋ฒˆ์—ญ๋„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค(_์—ฌ๋Ÿฌ ์–ธ์–ด๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ fr, en, de... ๋ชจ๋“  ์–ธ์–ด๊ฐ€ ์ƒˆ ๋ฒˆ์—ญ ํ‚ค๋กœ ์—…๋ฐ์ดํŠธ๋˜๊ณ  ์ œ๊ฑฐ๋œ ๋ฒˆ์—ญ ํ‚ค๋กœ ์—…๋ฐ์ดํŠธ๋˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค._)

  2. ๋ชจ๋“  ๋ฒˆ์—ญ์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ ๋นŒ๋“œ(_๊ฐ ๋ฒˆ์—ญ์— ๋Œ€ํ•ด 1๊ฐœ์˜ ๋นŒ๋“œ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ๋„ ๋นŒ๋“œ ์‹œ๊ฐ„์„ ์—ฌ๋Ÿฌ ๋ฒˆ ํ•˜์ง€ ์•Š๋Š” ํ•œ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค._)
  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์„ ๋‹ซ๊ณ  ์ž ๊ธ€ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ ์š”์ฒญ์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ด๊ณ  ์ €๋ฅผ ํƒœ๊ทธํ•˜์‹ญ์‹œ์˜ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰