ãããi18nã§èšç»ãããŠããæ©èœ/ä¿®æ£ã®ãªã¹ãã§ãã
æ°ããi18næ©èœãAngularã«è¿œå ãããå Žåã¯ã以äžã§é æ
®ãªã質åããŠãã ããããããå¯èœãã©ãããåé¡ã解決ããå¿
èŠããããã©ããããç¥ããããŸãã
ãã°ãããå Žåã¯ãåé¡ãéããŸãïŒããã§ããã«ã€ããŠè°è«ããå¿
èŠã¯ãããŸããïŒã
_泚ïŒå®è¡æã®ç¿»èš³ãšã»ãšãã©ã®æ°æ©èœã¯ivyã§ã®ã¿å©çšå¯èœã«ãªããŸã_
[] xmb / xlfã«åãIDãçæããŸã-ïŒ15136 [é倧ãªå€æŽPRïŒ15621]
[] i18n IDãçæãããšãã«ph / ICUåŒãç¡èŠããŸã-ïŒ15573 [ãã¬ãŒã¯ãã§ã³ãžPRïŒ15621ããããã¯]
[] 2ã€ã®ç°ãªãã³ã³ãã³ããåã@@ idãæã£ãŠããå Žåãi18næœåºäžã«ã¹ããŒããŸã-ïŒ 18272
[]å é ãšæ«å°Ÿã®ã¹ããŒã¹ãç¡èŠãã-ïŒ13114
aotã¢ãŒãã§åçãã€ã³ãã£ã³ã°ãå®è¡ã§ããããã«ããããšæããŸãã ããŒããããã«ãããè¿œå ããå¿ èŠãããçç±ãããã¯ã¢ããããããã«ãç¹ã«2ã€ã®ãŠãŒã¹ã±ãŒã¹ããããŸãã
1ã€ç®ã¯ãèšèªããšã«åå¥ã®ã¢ããªã±ãŒã·ã§ã³ãå¿ èŠãšããªãåºæ¬çãªãŠãŒã¹ã±ãŒã¹ã§ãã ããã«ã¯ãã¢ããªã®å€éšã«ããçš®ã®ãªãã€ã¬ã¯ãããžãã¯ãå¿ èŠã§ããããµã€ããå®å šã«ãªããŒãããªãéããèšèªãåçã«å€æŽããããšã¯ã§ããŸããã
2ã€ç®ã¯ãcordovaã䜿çšããŠã¢ãã€ã«ã«ã¢ããªãåã蟌ãå Žåã§ãã ç§ã®ç¥ãéããããªãã®éžæã¯jitããããšã§ããã€ãŸãããµã€ãã®é床ãèœãšããããèšèªããšã«åå¥ã®ã¢ããªãäœæããããã¢ããªã«ãã¹ãŠã®èšèªãå«ãããããŸãïŒãã¡ããããã¯è¥å€§åããŸãïŒã ãããã¯ã©ããè¯ãéžæè¢ã§ã¯ãããŸããã Ionicã¯i18nã䜿çšããŠããªãããã§ããããããçç±ãªã®ããšæããŸãã
@ jlutz777ãããã¯2ã€ã®æå¹ãªãŠãŒã¹ã±ãŒã¹ã§ãããã®ããŒãã¯æè¿ç€Ÿå
ã§è°è«ãããŠãããç§ããããæå±ããŠããŸãã Angularã§i18nãšAoTãã©ã®ããã«æ©èœããããèãããšããŸã ç°¡åã«ã¯äžå¯èœã§ãããv5ã§AoTã®æ°ããã³ã³ãã€ã«ããã»ã¹ãååŸãããšãå°æ¥çã«ã¯å¯èœã«ãªãå¯èœæ§ããããŸãã
äžåºŠããŒããããã«è¿œå ããŸã/ããã«ã€ããŠå
¬åŒã§å
·äœçãªããšãããã°ã
ç§ã¯Electron + Angular 2ã¢ããªã«åãçµãã§ãããAngularã§i18næ©èœã䜿çšããŠè€æ°èšèªã®ããŒã«ãªãŒãŒã·ã§ã³ã®ãµããŒããè¿œå ããããšããŠããŸãã å®éã«ã¯ããã³ãã¬ãŒãæååã®æœåºãšããããç°ãªãèšèªã®ãã¡ã€ã«åœ¢åŒã«å€æããããšã¯æ確ã«ææžåãããŠããŸãããç§ã¯ãŸã å€ãã®ããšãæ確ã«ããŠæ¢ãããšã¯ã§ããŸããã
ãã€ã³ã2ãš3ã¯ãããã³ãã¬ãŒãã®å€éšã§ç¿»èš³æååã䜿çšãã-ïŒ11405ãæ©èœã§è§£æ±ºãããŸãã
ãã€ã³ã1ã«ã€ããŠã¯ãäžèšã®@ jlutz777ã«äžããåçãåç
§ããŠãã ããã ä»ã®ãšãããã¢ããªãè€æ°ã®èšèªã§ãã«ãããããããŒãã¹ãã©ããã§åçã«ç¿»èš³ãããŒãã§ããJITã䜿çšããå¿
èŠããããŸãïŒå®è¡æã«åãæ¿ããããšã¯ãããŸããããxåãã³ãã«ãããããåªããŠããŸãïŒã
ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšãããUIèšèªã¯ãåãã¢ããªã±ãŒã·ã§ã³ã®è€æ°ã®ããŒãžã§ã³ãæ§ç¯ããå¿ èŠã®ãªããã®ã§ããå¿ èŠããããŸãã ããã¯æ±ºããŠãã³ã³ãã€ã©ãã®åé¡ã§ã¯ãããŸããã ãã®å Žåãã³ã³ãã€ã©ã«æ¬ é¥ããããŸãã åé¡ã¯ãå®è¡æã«ããŒã¿ãã¡ã€ã«ããããã¹ããããŒãã§ããããã«ã¢ããªã±ãŒã·ã§ã³ãèšèšããããšã§ãã ããã¯ãä»ã®ã¢ãžã¥ãŒã«ãšåãããã«ããŒãããŠäœ¿çšã§ããã¢ãžã¥ãŒã«/ã©ã€ãã©ãªã䜿çšããŠå®è¡ããå¿ èŠããããŸãã ãã®ã³ã³ãã€ã©ããŸã£ããæ©èœãããªãã§ãã ããã
@figuerresããã¯å°æ¥å€æŽãããäºå®ã§ããããŸã çŽæã¯ãããŸãããããã®åé¡ãèªèããŠãããå€éšãã¡ã€ã«ã䜿çšããããšã§å¯èœãªè§£æ±ºçãæ€èšããŠããŸãã
ããã«ã¡ã¯@ ocombe-ããããã¢ããªã±ãŒã·ã§ã³ã«Angularã§i18nã䜿çšããããã§ãã ä»åŸæ°ãæã§å»æ¢ãããããé倧ãªå€æŽãå ããããå¯èœæ§ããããšæãããæ©èœãããã¥ã¡ã³ãã«ãããŸããïŒ ã©ããªæ å ±ã§ã倧æè¿ã§ãã ãããŠDVDãããããšãïŒ
ãã@rjsteinertïŒ ãããç¥ã£ãŠããããã§ãïŒ
çŸåšèšç»ãããŠããé倧ãªå€æŽã¯1ã€ã ãã§ããããã¯ãIDã®èªåçæã§ãã ã¡ãœãããå€æŽãããIDã¯äžèŽããªããªããŸããã翻蚳ãã¡ã€ã«ãæŽæ°ããããã®CLI移è¡ããŒã«ïŒããã³æºåãã§ãããšãã«ã®ã¿ç§»è¡ããããã«äœ¿çšã§ãããã©ã¡ãŒã¿ãŒïŒããããŸãã
ç§ã¯ä»æ¥ãã®ãããã¯ã«ã€ããŠããããã°ãŒã°ã«ã§æ€çŽ¢ããŸããããi18nã¿ã°ã翻蚳ã§ã¯ãªããµãŒãã¹ãžã®åŒã³åºãã«çœ®ãæãããããªãåçŽãªã解決çãããã®ã§ã¯ãªãããšèããŠããŸãã
é»æµïŒ
<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ããã¡ã€ã«ãªã©ããå
¥åã§ãããããå®éã®ç¿»èš³ã¯AOTã§åçã«å®è¡ã§ãããã±ãŒã«ã®åãæ¿ãã§ãããæ°ãããœãŒã¹ãããŒãããããšã§i18nservice.setLocale('de-DE')
ãã¯ããã«è¶
ããããšã¯ãããŸããã
xi18n-toolã䜿çšããããã¹ãæœåºã¯ä»¥åãšåãããã«æ©èœãããšã«ããçæãããã¡ãã»ãŒãžIDãå©çšããŠã翻蚳ãµãŒãã¹ã®ã€ã³ããã¯ã¹ãšããŠäœ¿çšã§ããŸãã
ngcã¯åã«ã--use-i18nserviceããã©ã°ãæ€çŽ¢ãããã以å€ã®å Žåã¯ãããŸã§ãšåãããã«ã³ã³ãã€ã«ã§ãããããçŸåšã®å®è£
ãåé¡ãªãæ©èœããŸãã
ç§ãçŸåšç¹å®ã§ããåé¡ã®1ã€ã¯ãi18nserviceãã³ã³ããŒãã³ãã³ã³ããã¹ãã«ååšããŠåŒã³åºãå¯èœã§ããå¿ èŠãããããããã¹ãŠã®ã³ã³ããŒãã³ãã«æ³šå ¥ãããããšã§ãããããã¯äœããã®æ¹æ³ã§è§£æ±ºã§ããã¯ãã§ãã
ããã«ã€ããŠäœãèãã¯ãããŸããïŒ
ããã¯ãç§ãã¡ããã¯ãããšèããŠããããšã®1ã€ã§ããã³ã³ãã€ã©ãŒãå®è¡æã«äœ¿çšã§ããªãå ŽåïŒAOTïŒã«ããããã®å€æå ã®ã³ãŒããããã¯ãã©ã®ããã«åŠçããããšããåé¡ããŸã ãããŸãã ããã¯ã翻蚳å ã§è§åºŠã³ã³ããŒãã³ã/ãã£ã¬ã¯ãã£ã/ãã€ãã䜿çšã§ããªãããšãæå³ããŸã...
ã¯ããããã«ã€ããŠã¯èããŠããŸããã§ããã
ç§ã¯çŸåšããã«ãã¹ãããïŒwebpackïŒã§ãã¹ãŠã®ç¿»èš³ãHTMLã«ã€ã³ã©ã€ã³åããng-switchã䜿çšããŠããããng-containersã«ã©ãããã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ãšãã±ãŒã«ãååŸããããŒã«ã©ã€ãºãããããã¹ã/ããŒã¯ã¢ãããè¿ããŸãã
ããŒã«ã©ã€ãºããããã¹ãŠã®ããã¹ãã¯ããµãŒãã¹ãèªã¿åãããšãã§ãããªãœãŒã¹ãšããŠãµãŒããŒã«ä¿åãããŸãã
ã³ã³ããŒãã³ãã«å±æ§nolocaleruntimeããªãå Žåã
ã³ã³ããŒãã³ãã«ãããããå Žåã¯ãå®è¡æã«ããŒã«ã©ã€ãºãããããŒã¿ãååŸããããã«åŒã³åºããŸãã
ã³ã³ãã€ã©ã¯ããŒã¿ãã¡ã€ã«ãäœæãããµãŒãã¹ãæ¥ç¶ããã ãã§ãã
ããã¯ãã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ã®æãäžè¬çãªããŒãºãåŠçããããã®è¯ãæ¹æ³ã®ããã«æããŸããåãã¢ããªã®è€æ°ã®ã³ããŒãæ§ç¯ããŠç¶æããããã«ãµã€ããå¿ èŠãšããŸããã
ç§ãããæããŸããã
åé¡ã¯ã翻蚳ã«ãã€ã³ãã£ã³ã°ãå«ãŸããŠããå¯èœæ§ããããããå€éšãªãœãŒã¹ãã翻蚳ãã¡ã€ã«ãããŒããããšãã«ã·ã¹ãã ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã®ããã«éãããããšã§ãã
ããã«ã翻蚳ã«å¿ããŠãããã®ãã€ã³ãã£ã³ã°ãåçã«è§£æ±ºããã«ã¯ãã³ã³ãã€ã©ãŒãå¿
èŠã«ãªããŸãã
IMHOã®æå¹ãªãœãªã¥ãŒã·ã§ã³ã¯ãã³ã³ãã€ã«æã«ã€ã³ã©ã€ã³å€æãPOCïŒäžèšã®ã³ã¡ã³ããåç
§ïŒãšããŠå®è£
ããæ¹æ³ã§ããããããšã¬ã¬ã³ãã§çµ±åãããæ¹æ³ã§ãã
äžèšã®äž¡æ¹ã®åé¡ã¯è§£æ¶ãããŸãããç§ãæ³åã§ããå¯äžã®æ¬ ç¹ã¯ããããããã³ãã«ãµã€ãºã§ãããããã¬ãŒã³ãã³ãã«ã+ïŒç¿»èš³ãããhtml-size *ãã±ãŒã«ïŒã«æé·ããŸãã
ããã¯ãããã¥ã¡ã³ãå
šäœã§ã¯ãªãi18n
ã¿ã°ä»ãhtmlã䜿çšããã ãã§ng-switch
äžããããšãã§ããŸãããããã§ãi18n-*
ã¿ã°ã«ã¯åé¡ããããŸãã
ããŠããã«ãããŸãã æã«ã¯éçããããŸãâŠã
å®çšçãªèŠ³ç¹ããã¯ããããæããªãæ¹ãè¯ããããããŸãããè€æ°ã®èšèªã§æäŸã§ããããã¹ãã®ãã£ã³ã¯ãæã€ããšãã§ããŸãã 話ã®çµããã
ããŒã¿ãã€ã³ãããããã£ã³ã¯ãå¿
èŠã§ããïŒ ããããŸããããããããã¯åœéåãããããã¹ãã®äžã«ã¯ãããŸãããããã¯å¥ã
ã§ãªããã°ãªããŸããã htmlãšcssã䜿çšããŠãçµæã®ã¹ã¿ã€ã«ãšãã©ãŒããããåŒãç¶ã䜿çšã§ããŸãã ããããèããããããããæ¹æ³ã§ããããåã蟌ãã ãçµã¿åããããããããšã¯ã§ããŸããã
ããšãã°ãdivãŸãã¯apã¿ã°ãè€æ°ã®ã¹ãã³ãæã€ããšãã§ããå Žåã1ã€ã®ã¹ãã³ã¯ããã¹ãã§ãããå¥ã®ã¹ãã³ã¯ãã€ã³ããããæ¥ä»ã§ããããã¹ãã¹ãã³ã¯i18nãã±ãŒã«ãµãŒãã¹ã«ãã€ã³ããããæ¥ä»ã¯2ã€ã®ã¹ãã³ãå«ãŸããæ¥ä»ãµãŒãã¹ã«ãã€ã³ããããŸãããããããã©ãŒããããã段èœã¿ã°ã
ã·ã³ãã«ã«ä¿ã¡ãæåã«ãã¹ãŠã®ãŠãŒã¶ãŒã®95ïŒ ã§æ©èœããããã«ããŠããããšããžã±ãŒã¹ãææ¡ããŸãã
ç§ã¯ããããšããžã±ãŒã¹ãšããŠã¯èŠãŠããŸãããããã¯ãã€ãã®ããã«ããžãã¹ã§ãã
Angularã¯ããžãã¹ã°ã¬ãŒãã®ãã¬ãŒã ã¯ãŒã¯ã§ããããããã¹ãŠã§ã¯ãªãã«ããŠããå€ãã®i18nãŠãŒã¶ãŒã¯ãããã¹ãå
ã§ãã€ã³ãã£ã³ã°ããŸãã¯å°ãªããšãè€æ°åœ¢åãšéžæãå¿
èŠãšããŸãã
<span i18n>Hello, {user.gender, select, m {Mr.}, f {Ms.}} {{user.name}}</span>
åé¢ãããæååã§ãããã©ã®ããã«è§£æ±ºããŸããïŒ
ç°¡åãªçãïŒã¿ãŒã²ããèšèªã®ã«ãŒã«ãç¥ãããšãã§ããªãããããã¹ãŠã®èšèªããæšæ¶ãããæ§å¥ãããååãã®åœ¢åŒã«åŸãããã§ã¯ãªããããããããŸããã
ãããã®ãã£ã³ã¯ãåé¢ãããšã次ã®ããã«ãªããŸãã
ã³ã¢i18nã¯æåŸ ã©ããã«è§åºŠãä»ããŠåäœããããžãã¹ã°ã¬ãŒãã®ã¢ããªã§äœ¿çšã§ããŸããæããã«æ¬ ããŠããã®ã¯ãAOTãšã®äºææ§ã ãã§ãããã®ããã匷åã§æ©èœããã·ã¹ãã ããååã§ã¯ãªããã®ã«çœ®ãæããå¿ èŠãããçç±ãããããŸããããããæãéããããã«è€æ°åã®äœæ¥ãå¿ èŠãšããŸãã
ææ¥ããã®åé¡ã®è§£æ±ºçãèŠã€ããããã®äŒè°ããããŸãã
@ocombeã¯ãããèããŠããããæããŸããããããAngularã®å°æ¥ã®ãªãªãŒã¹ã«åœ¹ç«ã€ãã®ã«ãªãããšãé¡ã£ãŠããŸããããã§ã®äœæ¥ã§ã¯ãéçºããŒãºã«å¯ŸããŠãã®ã»ãšãã©ãã©ã®ããã«æ©èœããããæ¬åœã«æ°ã«å ¥ã£ãŠããŸãã
@ocombe ãããã¥ã¡ã³ãå
šäœããªããŒãããã«èšèªãå€æŽããããšã¯å¯èœã§ããïŒ ç§ã説æããŸã ïŒ
ãaboutããšããååã®ããŒãžã«ããŸãããèšèªãå€æŽãããšãã¢ããªã±ãŒã·ã§ã³ã®ã¡ã€ã³ãšã³ããªããŒãžã«ãªãã€ã¬ã¯ããããŸãã
i18n-appã§äœæ¥ããŠãããšãã«ã@ angle / MaterialïŒnode_modulesã«ããïŒãªã©ã®å€éšã¹ã¿ã€ã«ã·ãŒãã解決ã§ããã ng-xi18n
-toolã倱æãããšããæ¢ç¥ã®ããã°ãã«ãééããŸããã
ãäžè¶³ããŠãããã¡ã€ã«ãç¡èŠããã-æœåºããŒã«ã®HostContextãPOCãšããŠå®è£
ããŸããããã¡ã€ã³ãªããžããªã«ãªã³ã¯ããããã«PRïŒ17845ãšããŠè¿œå ããŸããã
@ocombeã¯ããã®ãããã¯ã«éåžžã«ç©æ¥µçã«åãçµãã§ããããã§ãããPRãèŠãŠããã£ãŒãããã¯ãæäŸããŠããã ããŸãããã
ããããšããç§ã¯ãããèŠãŠãããŸãã
åçããŒã¿ãå«ããããžã§ã¯ãå šäœã«å éšåãå®è£ ããæ¹æ³ãæ¢ããŠæ°æ¥ãçµã¡ãŸããããå ·äœçãªãã®ã¯äœãèŠã€ãããŸããã§ããã å°ãªããšãåœé¢ã¯ç§ãå©ããŠãããäœãä»ã®ãã®ãç§ã«ææ¡ããŠããã ããŸãããã ããããšãã
ããã«ã¡ã¯@ocombeïŒ @ jlutz777ã«ãã£ãŠæèµ·ããããã€ã³ãïŒåçãã€ã³ãã£ã³ã°ã«ã€ããŠããããã£ãŠèšèªããšã«1ã€ã®ã¢ããªããªãïŒã«é¢ãããã©ããŒã¢ãããè¡ãããšã¯ã§ããŸããïŒ
ããªãã®ä»äºã«æè¬ããŸãïŒ
@vicbã¯çŸåšåãçµãã§ããã5.xã«ãªããŸãïŒ5.0ã§ã¯ãªã5.1ã§ããå¯èœæ§ãé«ãïŒ
@ocombeãã§ãã¯ãªã¹ããæŽæ°ããå¿ èŠããããŸããïŒ ãããã®ããã€ãã¯ãã§ã«æ°ããããŒãžã§ã³ã«ããŒãžãããŠããããšãããããŸãã ãããŠãããã¯ããªãã®åªåãããããåæ ããã§ãããã ð
ã¯ããããèãã§ããæŽæ°ããŸã
ç·šéïŒæŽæ°
ã©ã³ã¿ã€ã i18nïŒAOTã䜿çšãããã¹ãŠã®ãã±ãŒã«ã«1ã€ã®ãã³ãã«ïŒ-[äœæ¥äž]
é¢é£ããåé¡/ PR /ãã£ã¹ã«ãã·ã§ã³ã¯ã©ãã«ãããŸããïŒ
ååä»ãã®æ¥ä»åœ¢åŒïŒ ultraLongDate
ãªã©ïŒãæ¡åŒµããããã®APIãããã°ããã€ãã£ãã®æ¥ä»ãã€ãããããèªèããã«ã¹ã¿ã ã®æ¥ä»ãã€ãã¯å¿
èŠãããŸããã
ãã©ã³ã¿ã€ã i18nïŒAOTã䜿çšãããã¹ãŠã®ãã±ãŒã«ã«1ã€ã®ãã³ãã«ïŒãã®é²æç¶æ³ã«ã€ããŠç¥ãããã ãã§ãã
ç§ã®ããŒã ã«ã¯ã60以äžã®èšèªã䜿çšããè€æ°ã®å€§ããªã¢ããªããããŸãã çŸåšãNãèšèªã®æ°ã«ãªãããã«ãNåã®ãã«ãã䞊è¡ããŠå®è¡ããŠããŸãã ãæ³åã®ãšãããããã¯ãªãœãŒã¹ã倧éã«æ¶è²»ããŸããç¹ã«ãã¢ããªãããªã倧ããã1æ¥ã«äœåºŠãè€æ°ã®ç°å¢ã«ãããã€ãããããšãèãããšã
ç§ãæãã§ããã®ã¯ïŒ
@chcaruã¯ãngãããã€ãã£ãããœãªã¥ãŒã·ã§ã³ãæäŸããã®ãåŸ
ã£ãŠããéã httpsïŒ//github.com/actra-development-oss/ng-i18n-aot-loader/ãåç
§ããŠãã ããã
ããã¯ããªããæ±ããŠãããã®ãæ£ç¢ºã«æäŸããè€æ°ã®ãã±ãŒã«ãæã€1ã€ã®AOTãã«ããæäŸããŸãã
@chcaru ïŒ
1 /倧ãŸããªETAã¯Angularv6ã§ãïŒæåã®ããŒã¿çã¯1ææ«ãŸã§ã«äœæããå¿
èŠããããŸããïŒããããŸããïŒã幞ããªããšã«ãã»ãšãã©ãã¹ãŠã®äœæ¥ãå®äºãããããã³ãŒãã®ç¿»èš³ã¯å®è¡æã®ç¿»èš³ã®çŽåŸã«å®è¡ããå¿
èŠããããŸãã
2 /ã¯ã
3 /翻蚳ã¯ãã³ãã«ããåé¢ããå¿
èŠããããŸããããŒãã¹ãã©ããã®åã«å¿
èŠãªãã®ãé
延ããŒããããããã¹ãŠã1ã€ã«ãã³ãã«ããã ãã§æžã¿ãŸããã¢ãžã¥ãŒã«ã®é
延ããŒã翻蚳ããµããŒããããã®ã§ããããã€ã«ãªããã¯ããããŸãããå©çšå¯èœã«ãªã
@ocombeã¯angularv6ããªãªãŒã¹ããããŸã§ã翻蚳ãåçã«ããŒãããããåäžã®ããã±ãŒãžã§å€èšèªã¢ããªã±ãŒã·ã§ã³ãäœæãããããããã®æãæ·±å»ãªãªãã·ã§ã³ã¯ngx-translateã§ãã
ngx-translateã䜿ãå§ããŠãangularv6ããªãªãŒã¹ããããšãã«ç°¡åã«ç§»è¡ã§ããããã«ããããã®ãã³ãã¯ãããŸããïŒ
äž¡æ¹ã®ã¢ããªã±ãŒã·ã§ã³éã®ããªããžã¯ãããŸããïŒ
å®éã«ã¯ãã³ãŒãã¯ãŸã£ããç°ãªããŸã...移è¡ããŒã«ã§äœæ¥ããæ欲ãããå Žåã¯ãv6ã§ãããã®æ©èœãæäŸãããææãããããŸã
ããã«ã¡ã¯ãä»åŸã®æ©èœã®éææ§ã«æè¬ããŸãã
次ã®è³ªåã«å¯Ÿããçããç¥ã£ãŠãããšéåžžã«åœ¹ç«ã¡ãŸãã
æ°ããi18nã¯ãŒã¯ãããŒã¯ã httpsïŒ//angular.io/guide/i18nã§èª¬æãããŠããçŸåšã®ã¯ãŒã¯ãããŒãšã©ã®ããã«ç°ãªãã®ã§ããããã
i18nããã³i18n- *ã«ãªããŸããïŒããšãã°ããªãã·ã§ã³ã®ã«ã¹ã¿ã IDãæã€i18n-titleå±æ§ã¯ãåŒãç¶ããã³ãã¬ãŒãã§äœ¿çšã§ããŸããïŒ
次ã®ã³ãã³ãã¯åŒãç¶ãæ©èœããŸããïŒ
ng serve --aot --locale fr
ng xi18n --i18nFormat=xlf
ng xi18n --i18nFormat=xlf2
ng xi18n --i18nFormat=xmb
@Toubã®ã³ã¡ã³ãã«ç¶ããŠããã®ç§»è¡æéäžãå®è£ ããã次ã®ã¢ãããŒãïŒi18nå±æ§ãšngx-translateãæ··åïŒã«ã€ããŠãã£ãŒãããã¯ãåŸãããšã«é¢å¿ããããŸãã ç§ãã¡ã®ç®çã¯ãæ°ããi18nãµããŒãã®æºåãã§ãããšãã«ãã³ãŒãã§è¡ãæŽæ°ãæå°éã«æããããšã§ãã
ïŒåçãªãã±ãŒã«ãå¿ èŠã§ããããšã«æ³šæããŠãã ãããã€ãŸãããã±ãŒã«ããšã«1ã€ã®çæãããã¢ããªã§ã¯ãããŸããïŒ
i18n
å±æ§ã䜿çšããŠãè§åºŠæœåºããŒã«ã掻çšã§ããããã«ããŸããi18n
ïŒ$å±æ§ã䜿çšããèŠçŽ ã®translate
å±æ§ãå©çšããŠã翻蚳ãé©çšããŸãïŒä»¥åã«æœåºããããã®ïŒãµã³ãã«ã¯æ¬¡ã®ãšããã§ãã
<!-- Without parameters -->
<div i18n="hello-id" translate>HELLO</div>
<!-- With parameters -->
<div i18n="hello-id" translate [translateParams]="{value: 'world'}">HELLO</div>
ãã£ãŒãããã¯ããããšãããããŸãïŒ
ãã®ããã«ngx-translateã§åé¡ãéããŠããã ããŸããïŒ ãããããã翻蚳ãã®ä»£ããã«ãi18nãå±æ§ããµããŒãããããã«ã©ã€ãã©ãªãæŽæ°ããã®ãæåã ãšæããŸãã
@ocombeææ¡ãããããšãïŒ ngx-translateã«ãã®åé¡ãè¿œå ããŸãã...
@ocombeç§ãèŠãããšãã§ããåé¡ã¯ã i18n
/ i18n-*
å±æ§ãå®è¡æã«åé€ãããããšã§ãïŒhttps://github.com/angular/angular/issues/11042ïŒã ããããä¿æããæ¹æ³ã¯ãããŸããïŒ
ç§ã¯ãã§ãã¯ããŸããããééããªãéããAngular i18nã䜿çšããŠããå Žåã«ã®ã¿åé€ãããŸãïŒã€ãŸããã³ã³ãã€ã«æã«ç¿»èš³ãããŒãããŸãïŒã
@ocombeããããŸããããAngular CLIã䜿çšããŠããŠã ng serve
ã§ã¢ããªã±ãŒã·ã§ã³ãèµ·åããããã翻蚳ãããŒãããŸãã...
@ocombe ãåœç€Ÿã¯ãçŸåšèŠå®ãããŠãããã±ãŒã«ããšã®è€æ°ã®ã¢ããªæŠç¥ã䜿çšããŠi18nããµããŒãããåãçµã¿ã®çŽåã«ãªããŸãã ãŸããURLã«ãã±ãŒã«ãå«ããã¢ããªã§ããŒã¹hrefãèšå®ããããšãèšç»ããŠããŸãã ã©ã³ã¿ã€ã i18næ©èœãå®äºããããurlãã±ãŒã«æŠç¥ã§ã©ã®ãããªå€æŽãå ããå¿ èŠããããŸããïŒ ã©ã³ã¿ã€ã i18nããªãªãŒã¹ããããã倧èŠæš¡ãªãªãã¡ã¯ã¿ãªã³ã°ãåé¿ãå§ããããã®ããè¯ãæ¹æ³ã¯ãããŸããïŒ ãã®ãã¹ãŠã«ãååããã ãããããšãããããŸãã
â¬ïžã¯ãããããå§ãŸããŸãããšèšãã¹ãã§ã
1ã€ã®ã¢ããª/ãã±ãŒã«ã¯çŸåšãæ©èœããŠããã¯ãã§ãïŒCLIã䜿çšããŠããªãå Žåã¯ãããŒãã¹ãã©ããã§ãã±ãŒã«ãã¡ã€ã«ãããŒãããããã®å°ããªå€æŽãé€ããŠïŒ
誰ããç§ãã¿ãŒã²ããã«ããŠãã©ã®ãã¡ã€ã«i18n
å±æ§ããã³ãã¬ãŒãããŒãã³ã°ãã³ãã«ããåé€ãããŠãããæããŠãã ããã
cc @ocombe
4.2.6ã§å€æŽãããŸããïŒPR https://github.com/angular/angular/issues/17999ïŒ
ããïŒ ç§ã¯é·ãéãã®ã¹ã¬ããããã©ããŒããŠããŸããã v6ã®æåã®ããŒã¿çããªãªãŒã¹ãããŠããã®ãèŠãŸããã å€æŽãã°ãèªã¿ãŸãããããã®é·å¹Žã®åé¡ã«é¢é£ãããã®ã¯äœãèŠã€ãããŸããã§ããã ãã®é¢ã§äœããã¥ãŒã¹ã¯ãããŸããïŒ ãŸãã¯ãå°ãªããšããã€ã³ã¿ãŒãã§ã€ã¹ãããªãã£ã«ã«äŒŒãŠãããšããä¿èšŒã¯ãããŸããïŒ
ããªãã®ä»äºãããããšãïŒ
ããã¯æåŸã®ããŒã¿çã®1ã€ããŸãã¯å€å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ã¯ãç§ãã¡ã«ãšã£ãŠå¯äžã®ããããã³ã°ãã€ã³ãã§ãããããç§ãã¡ãéåžžã«èå³ãæã£ãŠããŸãã å®äºçãïŒ ã§æšæž¬ããŠããã ããŸããïŒ
ãç²ãæ§ã§ããïŒ
@ocombe
ç¹ã«ãã®æ©èœã¯æããã«åªå äºé ã§ã¯ãããŸãããããã«äœæ¥ããããšãæåŸ ããªãã§ãã ããã
ããã§è©±ããŠããæ©èœãæ確ã«ããŠããã ããŸããïŒ ç§ã¯äœã®ä»®å®ãããããããŸããã
@ofuangkaæ©èœãå
é ãšæ«å°Ÿã®ã¹ããŒã¹ãç¡èŠãããã¯åªå
äºé
ã§ã¯ãããŸããã
@Karamutoä»ã®ãšããæšæž¬ããã®ã¯é£ããã§ããç§ãã¡ã¯ä»ããã«åãçµãã§ããŸã
@ocombe
Runtime i18nïŒAOTã®ãã¹ãŠã®ãã±ãŒã«ã«1ã€ã®ãã³ãã«ïŒã«é¢ãããã€ã«ã¹ããŒã³ãæããŠãã ãã
ä»ãç§ãã¡ã¯xi18nããŒã«ã䜿çšãããã巚倧ãªå€èšèªãããžã§ã¯ãã«ãµãŒãããŒãã£ã®ã©ã€ãã©ãªã䜿çšããããšã«ããŸããã
æ£èŠã®ããŒã«ã䜿çšã§ããããã«ãªãããšãæãã§ããŸãããããã¯ããŸãã«ãçã
ããããšã«æ³šæããŠãã ããã
ãŸããxlfãã¡ã€ã«ïŒã¢ãžã¥ãŒã«ããšã«1ã€ã®ãã¡ã€ã«ïŒãåå²ã§ããããã«ãããã®ã§ãããå¯èœã§ããïŒ
ã¢ããã¢ãã
ã©ã³ã¿ã€ã i18nã¯Angular6ã§ãªãªãŒã¹ãããŸããïŒ
ãããã§å¹žããªã³ãŒãã£ã³ã°ïŒ
ããã§åžæã倱ãããããæéå ã«çµäºããããšãæåŸ ããŸããããã¯ãæ®ãæéãããŸããªãããã®æ©èœã«é¢ããçŸå®ããããŸã§ãªãã£ãããã§ãã
ããŒãžã§ã³7ã®ãªãªãŒã¹ã¯ç§ãã¡ã«ãšã£ãŠããªãé ãã§ãããã
@ã«ã©ã ãïŒ22654
v6ã§ãªãªãŒã¹ããããšæããŸãããæåã«Ivyãçµäºããå¿
èŠããããŸãã
ä»é±ã¯helloworldãæ©èœããã¯ãã§ãããæ©èœã¯æå°éã§ãïŒããšãã°ãICUãµããŒãã¯ãããŸããïŒã
ãã ãããã©ã°ã®åŸãã«ãããã¿ã§ãªãªãŒã¹ãããŠããã®ã§ãäœæ¥ãç¶ããæ°æ©èœãçµäºãããããã«ãªãªãŒã¹ããŸããv7ãåŸ
ã€å¿
èŠã¯ãããŸããã
@ocombe
ããã¯ããã§ãïŒ æåãã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è§åºŠ6ã®äŸã¯ããã«ãããŸã
https://github.com/angular/angular/pull/23660
@sandangelã¯ããã®ã¹ã¬ããã®åé ã®èšç»ãããåã«ããã¹ãŠããŸãã¯ããã§ãã¯ããããã¹ãŠããæå³ããŸãããïŒ
åäžã®ã¢ããªã±ãŒã·ã§ã³ãæã€ããšãæ¬åœã«æ¥œãã¿ã«ããŠããŸãããããã¯æãéèŠãªããšã®1ã€ã ãšæããŸãã ãªã³ã¯ããïŒ23660ã«è¡ãã httpsïŒ //pr23660-e12f469.ngbuilds.io/guide/i18nã«å°éããŸãã
ããããããã«ã¯ãŸã æžãããŠããŸãïŒ
AOTã³ã³ãã€ã©ã䜿çšããŠåœéåããå Žåã¯ãèšèªããšã«åå¥ã®ã¢ããªã±ãŒã·ã§ã³ããã±ãŒãžãäºåã«æ§ç¯ãããµãŒããŒåŽã®èšèªæ€åºãŸãã¯URLãã©ã¡ãŒã¿ã«åºã¥ããŠé©åãªããã±ãŒãžãæäŸããå¿ èŠããããŸãã
è€æ°ã®èšèªã«å¯Ÿå¿ããåäžã®ã¢ããªã±ãŒã·ã§ã³ãäœæããããšã¯å¯èœã§ããããããšããŸã å¯èœã§ããïŒ
@MrCroftã¯ãã©ã³ã¿ã€ã i18nããŸã é²è¡äžã®ããã§ãã ç§ã¯ããªãã®ããã«ããã€ãã®ãªãã·ã§ã³ãèªã¿ãŸãããããã¹ãŠã®ããŒã«ãªãŒãŒã·ã§ã³ã®ããã®1ã€ã®ãã³ãã«ã§ã¯ãããŸãã:(
åäœããHelloWorldããããŸãããããã¯æ°ããã¬ã³ãã©ãŒïŒ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ãå®è£ ããããšããŠããŸãããããã«ã€ããŠèªããšãèšèªããšã«1ã€ã®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ã«é¢ããŠã¯ãã¢ãžã¥ãŒã«/ã³ã³ããŒãã³ãããšã«1ã€ã®ãã¡ã€ã«ã¯çŸåšäžå¯èœã§ããå°æ¥çã«ã¯å¯èœæ§ããããŸãããçŸåšåãçµãã§ãããã®ã®ãªã¹ãã«ã¯å«ãŸããŠããŸããã
ã«ãŒãå€æããµããŒãããèšç»ã¯ãããŸããïŒ
ããããã§ã«åçãããŠããå Žåã¯ç³ãèš³ãããŸãããããã®ããŒãžã§ã³ã§JSã§ã®ç¿»èš³ã¯å¯èœã§ããããããšããã³ãã¬ãŒãã®ã¿ã§ããïŒ
@ santhony7ã¢ã€ããŒã®æºåãã§ããŠããªãã®ã§ãããã¯ãŸã äžå¯èœã§ãã
ããã§ã©ã³ã¿ã€ã i18nã®æå³/æ©èœã«ã€ããŠç§ãæã£ãŠãã質åã®1ã€ã¯ãå€ãng-translate
ã®æ©èœã®ããã«ãã¢ããªããªããŒãããã«å®è¡æã«èšèªãéžæããŠãå転ãã§ããããšãæå³ãããã©ããã§ãã AngularJSã®å Žåãšngx-translate
ã®å ŽåïŒ ãããšããããã¯ãŸã£ããå¥ã®ããšãæå³ããŸããïŒ
ããããèšèªãå€æŽããã«ã¯ã¢ããªããªããŒãããå¿ èŠããããŸãã
çŸåšã®i18nã§ã¯ã翻蚳ããã«ãããŠæäŸãããšãã«ããã³ãã«ã³ãŒãã®æååã眮ãæããŸããããã¯ããã³ãã«ãããŒã«ã©ã€ãºãããŠããããšãæå³ããŸãã
ã©ã³ã¿ã€ã i18nã¯ãçŸåšã®ããã«ãã«ãæã«ã§ã¯ãªããã¢ããªã®èµ·åæã«ç¿»èš³ãã¡ã€ã«ãèªã¿èŸŒãŸããããšãæå³ããŸãã
ãã®ãããã¢ããªãèµ·åããåã«ç¿»èš³ãã¡ã€ã«ãé
延ããŒãã§ããŸããã€ãŸãããã³ãã«ã¯èšèªããåé¢ãããŠãããã¢ããªã®ãã³ãã«ã¯1ã€ã ãã§ãã
ãŸããèšèªããšã«1ã€ã®ãã³ãã«ãéžæããèšèªãã¡ã€ã«ãã¢ããªã«ãã³ãã«ããããšãã§ããŸãïŒçŸåšè¡ã£ãŠããããã«ïŒãããã«ããã翻蚳ãã¡ã€ã«ã®é
延èªã¿èŸŒã¿ã«å¿
èŠãªé
延ãåé¿ã§ããŸãã
ããå Žåã«ã¯è¿œå ã®httpãªã¯ãšã¹ããè¡ããä»ã®å Žåã«ã¯è¡ããŸããããèšèªããšã«1ã€ã®ãã³ãã«ãæã€ããšãæ£åœåããã®ã«ååãªéãã¯ãªããšæããŸãã
ã©ã³ã¿ã€ã i18nã®å©ç¹ïŒ
çæïŒ
çè«çã«ã¯ãã¢ããªå
šäœããªããŒãããã«èšèªãå€æŽã§ããŸãããã³ã³ããŒãã³ãã®äœææã«ãã³ãã¬ãŒããçæããããããæ¢åã®ã³ã³ããŒãã³ããåäœæããå¿
èŠããããŸãããŸãã¯ãïŒ i18n
ã䜿çšãã代ããã«ïŒãã³ãã¬ãŒãã§ãµãŒãã¹ããã€ã³ãããããšãã§ããŸãã
ãŸããããèšèªããå¥ã®èšèªãžã®å€æŽã¯å°ãããããããŸãããã倧ãããããããŸãããããšãã°ãè±èªããã¹ãã€ã³èªãžã®å€æŽã¯ãå°ããããããããŸããããè±èªããäžåœèªãã¢ã©ãã¢èªãžã®å€æŽã¯å€§ãããããããŸããã
äžéšã®èšèªãæ確ã«ããã«ã¯ãããã¹ãã ãã§ãªãããã®èšèªã«å¯Ÿå¿ããããã«å¥ã®ã¬ã€ã¢ãŠããèšèšããå¿
èŠãããå ŽåããããŸãããŸããå·Šããå³ãŸãã¯å³ããå·Šãžã®é
眮ããã®ä»ã®è©³çŽ°ã®ã«ãŒã«ããããŸãã
ãããã£ãŠãã»ãšãã©ã®å®éã®äœ¿çšã§ã¯ãã¢ããªãé©åãªãªãœãŒã¹ãšããã€ãã®ã¬ã€ã¢ãŠããããŒãããããšã«ã€ãªããèšèªæ€åºã¹ããããã¢ããªã«ããŒãããããšãæåŸ ããŸãã
@ocombeæ確ã«ããŠããã ãããããšãããããŸãïŒ ç§ã¯çŸåšã®Angular i18n
ãã¢ããªã±ãŒã·ã§ã³å
ã«å®è£
ããŸããããå€æŽ/äžæãªèŠä»¶ã®ããã«åé¡ãçºçããŸããã ãŸãã httpsïŒ//github.com/ngx-translate/i18n-polyfillã©ã€ãã©ãªãçµã¿åãããŠäœ¿çšââããŠãçŸåšã®ã®ã£ãããåããŠããŸãã
è€æ°ã®ãã³ãã«ã¯å°ãé¢åã§ãããçŸåšã¯ç°¡åã«åé¿ã§ããŸãã ç¹ã«é害ã¯ãçŸåšäœ¿çšãããŠããèšèªãšã¯ç°ãªãèšèªã§è¡šç€ºããã1ã€ã®ã³ã³ããŒãã³ãïŒããã³ãã®ãã¹ãŠã®åã³ã³ããŒãã³ãïŒãæã€å¯èœæ§ããããŸãã
ççŽã«èšã£ãŠã ngx-translate
ãç§ã®ããã«ãããéæããã®ã«åœ¹ç«ã€ãã©ããã¯ãŸã ããããŸãããããããããè¡ãåã«ã§ããã ãå€ãã®æ
å ±ãæã£ãŠããããšã確èªããããã«ãä»åŸã®å€æŽã«ã€ããŠã¡ãã»ãŒãžãéããããšæããŸããã
è€æ°ã®èšèªã«åæã«ç¿»èš³ãããã¢ããªããµããŒãããäºå®ã¯ãããŸãããå°æ¥ã翻蚳/ã¢ãžã¥ãŒã«ãããŒãã§ããããã«ãªãå¯èœæ§ããããŸãããããã¯ã¢ãŒããã¯ãã£ã®å¯äœçšã§ãããå ·äœçã«ã¯äœãã§ã¯ãããŸãããéæããããšããŸããã
Ivy +ã©ã³ã¿ã€ã i18nã®ETAã¯ãããŸããïŒ
ããã§ãªãå Žåã¯å®å
šã«ç解ããŠããŸãããïŒçŸåšã®ãããžã§ã¯ãã®æéæ ãèæ
®ããŠïŒãããåŸ
ã€ããšãã§ãããã©ããããŸãã¯çŸåšã®ãœãªã¥ãŒã·ã§ã³ã®1ã€ã䜿çšããŠãå°æ¥ã®ããŒãžã§ã³ã®ããã«ã©ã³ã¿ã€ã i18nãžã®ç§»è¡ã延æããå¿
èŠããããã©ãããç¥ãå¿
èŠããããŸãã
ç§ã¯æ£ç¢ºãªæéæ ãäžããããšã¯ããŸãããç§ãè©Šã¿ããã³ã«ããã¯ééã£ãŠããŸããïŒD
çŸåšã¯v7ããåã§ã¯ãããŸããïŒä»¥åã¯ããŒã¿çãšããŠå©çšå¯èœã«ãªããŸãïŒ
åé¡ãããŸãããç§ãã¡ã¯çãèŠç©ãããåžžã«ééã£ãŠããããšãç¥ã£ãŠããŸãã ïŒD
çŸåšã®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ã§å
±æãããŠããäŸãè©ŠããŠã¿ãŸããããChromeãã©ãŠã¶ãŒã®èšèªãå€æŽããŸããããããŸããããŸããã§ããã
翻蚳ã®ããã®ç¹å®ã®æ¹æ³ã¯ãããŸããïŒ
å€éšã©ã€ãã©ãªã§ã¯ãªããAngularã«ã€ããŠããã§è°è«ãç¶ããŠãã ããã ããã«ã€ããŠãµããŒããå¿ èŠãªå Žåã¯ãgithubãªããžããªã«ã¡ãã»ãŒãžãæçš¿ããŠãã ãã
ãããæ©èœãå°æ¥ã©ã®ããã«ãªããã«ã€ããŠãä»ã®è¿œè·¡ã®åé¡ãèšèšããã¥ã¡ã³ãã¯ãããŸããïŒ ãããããå®è£ ãæ¯æŽããããv7ã§ã®ç§»è¡ãå¯èœãªéãã¹ã ãŒãºã«ãªãããã«æºåãããããããšãã§ããŸãã
ããã«ã¡ã¯ãç§ã¯çŸåšAngular 5ãå®è¡ããŠããããããžã§ã¯ãã«å€èšèªãè¿œå ããå¿
èŠããããŸãã
ç§ã¯ä»ç§ã®ããã«åã解決çãè¿œå ããŸãããããã¯ã»ãšãã©ãšã¬ã¬ã³ãã§ãã https://github.com/angular/angular/issues/24549ã
çæ³çã«ã¯ãã«ã³ããªãŒã¹ããã¡ãŒãµãŒãã¹ïŒãã¹ãåãããã«ãã¯ã¢ããã«åºã¥ãïŒã«åºã¥ããŠèšèªãã¡ã€ã«ãé
延ããŒãããããšæããŸãã
ãããAngular6ã§å¯èœã§ããã°ãããã¯çŽ æŽãããããšã§ãã
@mattiLeBlancã³ã³ããŒãã³ãããµãŒãã¹ããã®ã¡ãã»ãŒãžãªã©ãåçã¡ãã»ãŒãžãã©ã®ããã«è§£æ±ºããŸããïŒ
@zverbeta AngularCoreãŸãã¯ãã®ãã£ã¹ã«ãã·ã§ã³ã®ã³ã³ããã¹ããå®å šã«ç解ããŠããªãããšããè©«ã³ç³ãäžããŸãã ç§ã¯åå¿è ã®ããã«ç§ã®æèããã®ã¿ããã«ã¢ãããŒãããããšãã§ããŸãã
ããªãã®è³ªåã«çããŠãURLãŸãã¯èšèªqueryparamããæšæž¬ã§ãããã±ãŒã«ã«åºã¥ããŠã翻蚳ãã¡ã€ã«ïŒxlfïŒãé©åãªæ¹æ³ã§é 延ããŒãããããšã«ã®ã¿é¢å¿ããããšæããŸãã ïŒç§ã¯çŸåšããã±ãŒã«ã決å®ããããã«URLãããã䜿çšããŠããŸãïŒã
ã³ã³ããŒãã³ããŸãã¯ãµãŒãã¹ããã®ã¡ãã»ãŒãžã¯ãããŒã¯ã¢ããã«i18nã®ã¿ã°ãä»ããããã«ã¿ã°ä»ããããŸããã ç§ã¯WordpressãšPHPçšã®i18nã®çµéšããããŸãã ããã§ã __( 'text' to translate, 'text domain' )
ã¢ãããŒãã䜿çšããŠãæ£ãã翻蚳ãååŸããŸãã ãã®__()
ã¯ãã¡ãã»ãŒãžãã¡ã€ã«ãäœæããCLIã³ãã³ãã«ãã£ãŠã¹ãã£ã³ããããšãã§ããŸãã
ããã¯ããªããèšåããŠããåé¡ã®1ã€ã§ããïŒ
ããšãã°ããã®ããŒã¯ã¢ããã®ãããã¯ã§æ°ä»ããããšã1ã€ãããŸãïŒæ æ°ã§ãåãµãèŠçŽ ã«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ã䜿çšããŠãããšãã«ãããŒãžã§ã³1.2ã®ããã«TARGETããã¹ããã¬ã³ããªã³ã°ãããªãããšã«æ°ã¥ããŸããã
.potãã¡ã€ã«ãš.moãã¡ã€ã«ãèŠãããšããããŸããïŒ éåžžã«ã·ã³ãã«ãªãã©ãŒãããã§ãPOEditããŒã«ã§ç¿»èš³ããŠäœ¿çšããããšãã§ããŸãã
ãã°ã«ãã¿ã³ã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ãè±èªãšã¹ãã€ã³èªã«å€æããå¿ èŠããããŸãã ãã¹ãŠã®å€æŽãè¡ãããã¡ã€ã«ãåå¥ã«äœæ¥ããŸããã .dist / enãšdist / esã®äžã«2ã€ã®ãã«ããäœæããŸãããå±éã®ããã«äœãããå¿ èŠãããããäž¡æ¹ã®ãã«ããåãæ¿ããæ¹æ³ãæããŠããããŸããïŒ
ãã°ã«ãã¿ã³ãã¯ãªãã¯ããŠäœãããå¿ èŠããããŸãã
@ shobhit12345httpsïŒ//stackoverflow.comã«æ¯æŽãªã¯ãšã¹ããæçš¿ããŠãã ãã
@zverbeta --prod
ã§ãã«ããããšãïŒ24549ã«æçš¿ãããœãªã¥ãŒã·ã§ã³ãæ©èœããŸããã ããããå©çšã§ããªãrequire
ã䜿çšããŠããã®ã§ãæãããªããšã§ããïŒ
--prodãã©ã°ããªããšãwebpacké¢é£ã®ã³ãŒããå«ãŸããŠããããããœãªã¥ãŒã·ã§ã³ã¯æ©èœããŸããïŒ
@mattiLeBlancãã®libhttps ïŒ//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 6i18nã䜿çšããŠããŸãã ç§ã¯å€èšèªã§äœæ¥ããŠããŸããã€ãŸããã¯ãã¯ããã¯ã«åŸããŸããã
https://v2.angular.io/docs/ts/latest/cookbook/i18n.html#ïŒ
çŸåšã®å®è£ ã§ã¯AOTã䜿çšããŠãããããmessages.xlfãã¡ã€ã«ãšmessages.pt.xlfãçæããŸããã ç§ãèµ°ããšããã¹ãŠãããŸãæ©èœããŠããŸã
ng serve --configuration = 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æ¥æšææ¥ãPedroRomeroã®[email protected]ã¯æ¬¡ã®ããã«æžããŠããŸãã
@fabiopcarvalhohttps ïŒ//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ãè¿œå ããŸããããæ©èœã®ãªã¯ãšã¹ãã®æ¹ãè¯ãã§ãããã
@ ocombe ã httpsïŒ//github.com/angular/angular/issues/21615
å®ç§ãªæè¬ã§ãïŒGithubæ€çŽ¢ã¯æ¬åœã«æªãã§ãïŒïŒïŒ
æ°ããããŒãžã§ã³ã®i18nã䜿çšããŠãããšãã°HTTPçµç±ã§å€éšãœãŒã¹ãã翻蚳ãã¡ã€ã«ãé 延ããŒãããããšã¯ã§ããŸããïŒ
@ocombeã¯ãRuntime i18nïŒAOTã䜿çšãããã¹ãŠã®ãã±ãŒã«ã«1ã€ã®ãã³ãã«ïŒã§äœæ¥ããŠãããšãã£ããã£ãŠããŸããã ç§ãã¡ãåŸ ã£ãŠããã®ã¯1幎以äžåã§ãã ãã®æ©èœãAngular7ãªãªãŒã¹ã§æäŸããããšæåŸ ã§ããã®ã¯ãã€ã§ããïŒ
@ Sef1995ããã¯ç§ãã¡ãå¯èœã«ãããããšã®1ã€ã§ã
@AhmadShahid v7ãšã¯ç¬ç«ããŠãªãªãŒã¹ãããivyãå¿
èŠã§ãããivyã¯v7ã®ãªãªãŒã¹ã®æºåãã§ããŠããŸããã ãã¿ã®äžéšã¯ãã§ã«v6ã«ãã©ã°ã®åŸãã«ãããŸãããå®å
šãªæ©èœã§ã¯ãªããããå®éã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯äœ¿çšããªãã§ãã ããã ivyã®ãªãªãŒã¹æ¥ã¯ãŸã ãããŸããã
@ocombeç°¡åãªè³ªåã§ãããä»æ¥ã®æç¹ã§i18nïŒangular6ïŒãå®è£ ãããšãç°ãªããã«ãïŒèšèªããšã«1ã€ïŒãå¿ èŠã«ãªããŸãããivyãåºãŠi18nã©ã³ã¿ã€ã ã«ãªããšãåŽåã倱ãããŸããïŒ ã€ãŸããi18nã®å®è£ æ¹æ³ã¯ãä»åŸã®å®è£ æ¹æ³ãšã¯ç°ãªãã®ã§ããããã äºåã«ããã€ãã®ã¹ããªã³ããèšç»ããäœæ¥ã«åªå é äœãä»ããããšããŠããŸãã ããããšã
åé¿ã§ããã®ã§ããã°ãé倧ãªå€æŽãå ããããããŸããã æœåºããã翻蚳ã®IDã¯ãé·ãéæ±ããŠãããã°ãä¿®æ£ãããšãã«å€æŽãããå¯èœæ§ããããŸããã移è¡ããŒã«ãæäŸããŸãã 100ïŒ äºææ§ããããšã¯èšããŸããããå¿ èŠã«å¿ããŠæ°ãããªãã·ã§ã³ã䜿çšã§ãããããã»ãšãã©ã®æ©èœãåãããã«æ©èœããããšãæåŸ ããŠããŸãã
@ocombeç°¡åãªè³ªåã§ãããä»æ¥ã®æç¹ã§i18nïŒangular6ïŒãå®è£ ãããšãç°ãªããã«ãïŒèšèªããšã«1ã€ïŒãå¿ èŠã«ãªããŸãããivyãåºãŠi18nã©ã³ã¿ã€ã ã«ãªããšãåŽåã倱ãããŸããïŒ ã€ãŸããi18nã®å®è£ æ¹æ³ã¯ãä»åŸã®å®è£ æ¹æ³ãšã¯ç°ãªãã®ã§ããããã äºåã«ããã€ãã®ã¹ããªã³ããèšç»ããäœæ¥ã«åªå é äœãä»ããããšããŠããŸãã ããããšã
ããã«ã¡ã¯ãwebpackrequireã䜿çšããŠã1ã€ã®ãã«ãã§ãã¡ã€ã«ãåçã«ïŒäžæçãªåé¿çãšããŠïŒããŒãã§ããŸãã
äŸã¯ããã«ãããŸãïŒ 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ããã®è³ªåã2çªç®ã«ããŠããŸãã
@sheikalthaf @Shuyinsamaäžèšã®ããã€ãã®ã³ã¡ã³ããšæåã®ã¡ãã»ãŒãžã§èª¬æããããã«ïŒ
ã©ã³ã¿ã€ã i18nã«ã¯ãv7ãšã¯ç¬ç«ããŠãªãªãŒã¹ãããivyãå¿
èŠã§ãã ãã¿ã®äžéšã¯ãã§ã«v7ã«ãã©ã°ã®åŸãã«ãããŸãããå®å
šãªæ©èœã§ã¯ãªããããå®éã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯äœ¿çšããªãã§ãã ããã ivyã®ãªãªãŒã¹æ¥ã¯ãŸã ãããŸããã
@ocombe ïŒåçi18nããŒã芪ã³ã³ããŒãã³ãããåã³ã³ããŒãã³ãã«æž¡ãã®ã¯ã©ãã§ããã
åã³ã³ããŒãã³ãïŒ
<div i18n="{{labelTextKey}}">{{labelText}}</div>
芪ã³ã³ããŒãã³ãïŒ
<app-input [labelText]="'Second name'"
[labelTextKey]="'@<strong i="13">@LabelSecondName</strong>'" ..></app-input>
ç§ã¯ãããæž¡ãããšãã§ããŸãããi18nå€æã¯ãã«ãæã«è¡ããããããå€æ°ã¯ãã®ç¶æ ã®ãŸãŸç©ºã§ãã ãããã£ãŠã翻蚳ã¯è¡ãããŸããã
ãã®ãããªå Žåã®æŽæ°ã¯ãããŸããïŒ
@bobKasbi
åã³ã³ããŒãã³ãã«i18nã¿ã°ã¯å¿ èŠãããŸããã次ã®ããã«ã芪ã§äœ¿çšã§ããŸãã
<app-input i18n-labelText="@@LabelSecondName" labelText="Second name"></app-input>
@cjsase ïŒããŸãæ©èœããŠããŸãã ã©ããããããšãïŒ ã»ãŒ2æ¥ã§èŠåŽããŠããŸããã
ããã«åºã¥ãïŒ https ïŒ//github.com/angular/angular/issues/21706#issuecomment -430435254
ããã¯èª€ã£ãæ å ±ã§ãã ã³ã¢ããŒã ã¯ãIVyã2019幎ã«ãªãªãŒã¹ããããšã¯æ±ºããŠèšããŸããã§ããã代ããã«ãã³ã¢ããŒã ã¯æ¬¡ã®ããã«è¿°ã¹ãŸããïŒç§ã®åŒ·èª¿ïŒïŒ
ãã¹ãããã³æ€èšŒãããå Žåã¯åžžã«ããã€ããŒããŒãžã§ã³ã§ãªãªãŒã¹ããå¿ èŠããããŸã
ivyãæå¹ã«ãªã£ãŠããAngular7.1.0-beta.0ã¢ããªããããšããŸããããããŒãžãæŽæ°ããã«ãåçèšèªå€æŽãåé¢ããçºè¡ããã»ããã¢ãããè¡ãããšã¯ã§ããŸããïŒ
ã¯ãã®å Žåã¯ã©ãã§ããïŒ ãã®ããã¥ã¡ã³ãïŒ https ïŒ//github.com/angular/angular/blob/master/aio/content/guide/i18n.md
ããã³ãã®ããã¥ã¡ã³ãïŒ https ïŒ//angular.io/guide/i18n
ãããç¹éããŸãããïŒ
ææ°/å°æ¥ã®i18n-angularã¢ããªã®äœææ¹æ³ã¯ã©ãã§åŠã¶ããšãã§ããŸããïŒ
@tatsujbããããããã¯äžå¯èœã§ãããivyãšruntimei18nã§ãäžå¯èœã§ãã ä»ã®ãšãããèšèªãå€æŽãããå Žåã¯ãAngularã¢ããªããªããŒãããå¿ èŠããããŸã
ããããŸããããããã¥ã¡ã³ãã¯4ãã€ãã¹ã®ãããªangularã®ãã¡ã©ããŒãžã§ã³ã«é©çšãããŸãã
ããããç§ã®ã»ããã¢ããã«é©çšããããšã¯æããªãããå€æŽãã©ã®çšåºŠæ£ç¢ºã«æå¹ã«ãããã«ã€ããŠã説æããŠããŸããã
å€æŽã¯ããã¯ãšã³ãã«ãã£ãŠåŒ·å¶ãããå¿ èŠããããšç§ã¯èããŠããŸãã
ç§ã®å ŽåãAngularã¯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 2ã€ã®éãã¯å°ãæãã§ãããngx-translateã¯å ¬åŒã®angular-i18nã®ãã®ããã¹ãŠåé€ãããŸã£ãã䜿çšããªããšããããšã§ãã ããã¯ããèªèº«ã®ç¬ç«ããåè·¯å šäœã§ãããjsonãã¡ã€ã«ã¯ç¿»èš³ã®ãœãŒã¹ã«ã€ããŠã¯ããã«å ·äœçã§ã¯ãããŸããã
ãŸãã2ã€ã®ãã¢ã®ãã¡ngx-translateã¯ã¯ããã«é ãããã§ãããä¿å®ãç°¡åã ã£ããšã¯ã©ãããæå³ã§ããïŒ
ng-i18n-aot-loaderã®éçºè
ãšããŠã®@tatsujbå°ãªããšãããŒããŒãçµ±åããããšã¯ãå®è£
ãããªãé£ããããšãç§ã¯ç¥ã£ãŠããŸãã
ãã以å€ã¯ãã¹ãŠãå
ã®è§åºŠã®ããi18nãã©ãã€ã ã«åŸã£ãŠããããç°¡åã§ãã
ã¿ã°æ§é ãªã©ã«é倧ãªå€æŽããªãéããv7ã§åäœããã¯ãã§ãã
ngx-translateãå®è£ ããããšããŠããŸãç§ã¯ç¿»èš³å¯èœãªå Žæããšã«ç¿»èš³å¯èœãªå Žæã«è¡ããªããã°ãªããŸããã ãã§ã«èšç»ããŠããi18nã¿ã°ã䜿çšã§ããªãã®ã¯ãç§ã«ã¯å°ãã°ãããŠããŸãã
ç§ã¯ããªããä¿¡é Œããããšã¯ééã£ãéžæã ãšæãå§ããŠããŸãã @ digismack
@tatsujbãã®åé¡ããã©ããŒããŠãã人ã¯58人ã§ãã å人çã«ã¯ãi18nã«é¢ããAngularããŒã ããã®ææ°æ å ±ããã©ããŒããŠããŸãã OPã®å 容ã«é¢é£ããªãéãããããã¹ããæ¢ããŠããã ããã°å¹žãã§ãã
æ°ããi18næ©èœãAngularã«è¿œå ãããå Žåã¯ã以äžã§é æ ®ãªã質åããŠãã ããããããå¯èœãã©ãããåé¡ã解決ããå¿ èŠããããã©ããããç¥ããããŸãã
ãã°ãããå Žåã¯ãåé¡ãéããŸãïŒããã§ããã«ã€ããŠè°è«ããå¿ èŠã¯ãããŸããïŒã
ä»ã®ã©ã€ãã©ãªã§åé¡ãçºçããå Žåã¯ãStackOverflowã§è³ªåããããšããå§ãããŸãã
åé¡ãæžãããã³ã¡ã³ããããããã®ã¯ç§ã®ç¿æ
£ã§ã¯ãããŸãã...ããããç§ã¯ããããŸãïŒ
æ€èšäžïŒ
@gtbuchananãšCOã¯ã¿ã€ãAã®äººã§ãã
@tatsujbãªã©æå¥ãèšã/ã³ã¡ã³ããã/æåŸ
ãã人ã¯Båã®äººã§ã
ã¿ã€ãAããªãã¯ãã€ãåãããšãç¹°ãè¿ãã®ã«ç²ããŠããŸãããïŒïŒïŒïŒ ç§ã«ãšã£ãŠãããªãã¯ã¿ã€ãBãããè¿·æã§ãã
Angularã¿ã€ãBã«i18nã®æ©èœããªããããåé¡ãããµãã¹ã¯ã©ã€ããããã ãã®äººãããã€ã©ã€ã©ããŸãïŒåéãäœãããã«ãFacebookã«ããããç²åŸããå Žåã¯ãããããŸãããããã«ã¯ãã®å ŽæããããŸããã ãããªãã¯èšèãå€ãããããããèšã£ãŠããäœããçºæãããããŸããïŒ...ïŒ
ã¿ã€ãAã¯ã賌èªã解é€ããããæŽæ°ãåŸ ã£ãããå€æŽãã°ããã°ãã確èªããããããã°ããã¥ãŒã¹ãèªãã ãã§ãããšæããŸããAngularããŒã ãããã倧ããªãã©ã³ãARIAL 72pixelã«å ¥ããŠãts + runtime i18nããi18nåç翻蚳ãå°å ¥ããããã«ããŠãã ããïŒAngularã«å€§ããªæ©èœããããŸããïŒ åœŒãã¯ãããããŸãèæ ®ããŠããªãã£ãã®ã§ãä»æ¥ç§ãã¡ã¯æ£ããi18nãæã£ãŠããŸãããããã¯ã°ãŒã°ã«ããããã®æŠç¥ã§ãããããã¯å€ããããšãã§ããŸããïŒ
人ã Bã¯2幎åã«ãã®æ©èœãåŸ ã£ãŠããŸãã httpsïŒ //github.com/angular/angular/issues/9104#issue -159302131ã¯ããangular 2.X以éã§ãïŒ
欲æ±äžæºã®ã¿ã€ãBãå°éããéªæªã«ãªããªãã§ãã ããã 誰ãi18nã«ã€ããŠå€ãã®äžæºãèšããªãã®ãªããi18nã®æ¹åã¯ä»åŸäœå¹Žãèæ ®ãããªããšæããŸãããããããªãŒãã³ãœãŒã¹ã®aprtã§ãïŒ æ¹è©å®¶ã«æå¥ãèšãïŒ æŠç¥ã¯å€ããå¯èœæ§ããããŸãïŒ ã ãã人ã ã«æå¥ãèšãããŠã賌èªããããŠãã ãããããªãã¯ãã®åé¡ã賌èªããã«ããªãã®æ å ±ãèŠã€ããããšãã§ããä»ã®äººãããæé«ã§ãïŒ
ã¿ã€ãBã¯ãã§ãããŸã§æå¥/ã³ã¡ã³ããç¶ããŠãã ããïŒ ããã¯äººã ã®ããŒãºãç解ããå¯äžã®æè¯ã®æ¹æ³ã§ãïŒ
ã¹ãã©ã€ã¯ã¹ãã©ã€ã¯ç¬
@tatsujbããã¯ãã¹ãŠå人çãªå¥œã¿ã«åž°çããŸãã ng-i18n-aot-loader
ãæåŸã«å®è£
ãããšãããããæ©èœãããã«ã¯ãæåºããããã«ããå®è¡ããwebpackæ§æãã«ã¹ã¿ãã€ãºããå¿
èŠããããŸããã å€åããã¯ãã¯ãããã§ã¯ãããŸããã ãã ããæåºããããã«ããå®è¡ãããšãAngularCLIããŒã«ã¯äœ¿çšã§ããªããªããŸããã ãããã£ãŠãé·æçã«ã¯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ãµããŒãã¯ãŸã ãã©ã€ã ã¿ã€ã ã®æºåãã§ããŠããŸããã
ä»åŸã®ãããžã§ã¯ãã§äœã䜿çšãããã«ã€ããŠãæ£ããæ¹åã瀺ãããã€ãã®ãã³ããå®éã«ç解ããŸã-ngx-translate vsïŒ
æã£ãŠããå¿ èŠããããŸãïŒ
ãã£ãæ¹ãããïŒ
ã¡ã«ã·ãŒ
ãã®åé¡ã®ãã©ãã¯ãŒã®ããã«ã @ ocombeã¯angularconnectã§ã®ã©ã³ã¿ã€ã i18nã«ã€ããŠæ°æéã§è©±ããŸãã æªè§£æ±ºã®è³ªåã®å°ãªããšãããã€ãã¯ããã§çãããããšæããŸãã å©çšå¯èœãªã©ã€ãã¹ããªãŒã ããããŸã
@ ctaepper-æ å ±ããããšãããããŸãïŒ
@guygitããã¯ngx-translate
ãŸãã¯angular-l10n
ã®å ŽåããããŸãã ãããç§ãäœæããæ¯èŒè¡šã§ãhttps://medium.com/@sergeyfetiskin/tools-to-translate-your-angular-app-c021e25ff26a
ç§ãã¡ã®ã¢ããªã§ã¯ãããã€ãã®å¶éããããŸãããAngularã䜿çšããããšã«ããŸããã
@fetisããããšãããããŸãã-èŠãŠã¿ãŸã:-)
翻蚳ãã¡ã€ã«çšã®XLIFFãã¡ã€ã«ã®éžæã«ã€ããŠçåã«æã-GoogleTranslateToolkitãšFlutter / Dart i18nã¯ã©ã¡ããARBãã¡ã€ã«ããµããŒãããXLIFFããµããŒãããŠããŸããã ARBãã¡ã€ã«ã®ãµããŒãã¯äºå®ãããŠããªããšèããŸããããããã¯ããäžåºŠæ€èšãããå¯èœæ§ãããã®ã§ã¯ãªãããšæããŸãã ãŸãã¯ã誰ãïŒ @ocombe ïŒïŒãAngularãXLIFFãã¡ã€ã«ãšå¯Ÿè©±ããå Žæãæã瀺ãããšãã§ããã°ãARBãµããŒããçµ±åããã®ãã©ãã»ã©é£ãããã調ã¹ãããšãã§ããŸãã
ïŒç¶æ³ã«ãã£ãŠã¯ãã¢ãã€ã«ã¢ããªã«Flutter / Dartã䜿çšããWebã¢ããªã«Angularã䜿çšããäºå®ã§ããå¯èœãªéããã¢ãã€ã«ãšWebã®äž¡æ¹ã§ç¿»èš³ãã¡ã€ã«ãå ±æããããšèããŠããŸãã ARB-> Angularã«å«ããããšãæ€èšããæ欲ããªãå Žåã¯ãXLIFFã³ã³ããŒã¿ãŒãïŒ
@localpcguyã³ã³ããŒã¿ãŒã®ãããªãã®ãæžãããšã«ãªã£ãå Žåã¯ããã§ã«å€ãã®åœ¢åŒãã/ãžã®å€æãæäŸããŠããhttps://github.com/translate/translateã«æçš¿ããããšã«èå³ããããããããŸããã
ã¡ãªã¿ã«ã ocombeã¯æ°ãæåã«ãPOãã¡ã€ã«ïŒããã³JSONïŒïŒããµããŒãããããã«æžåœã«ããã·ã¥ãããšè¿°ã¹ãŸããã XLIFFã§åäœãããªãã±ãŒã£ãœãããŒã«ãèŠã€ããã®ã«èŠåŽããã®ã§ããã€ããããèµ·ããããšãé¡ã£ãŠããŸãã
XLIFFã§åäœãããªãã±ãŒã£ãœãããŒã«ãèŠã€ããã®ã«èŠåŽããããã§ãã
@PowerKiKiããã¯åã«çå®ã§ã¯ãããŸããã ã»ãšãã©ãã¹ãŠã®ãªã³ã©ã€ã³ç¿»èš³ç®¡çããŒã«ã¯XLIFF圢åŒããµããŒãããŠããŸãã ãŸãã.xââliffãæåã§ç·šéããããªãå Žåã¯ãç¡æã®ãã¹ã¯ããã翻蚳ããã°ã©ã ããããŸãã
@fetisç§ã¯è©±é¡ããå€ããã®ã¯å«ãã§ãããããŒã«ã§XLIFFã䜿çšããããšã«é¢ããŠããªãã®èŠçãæããŸããã ããã§ç§ã®ã³ã¡ã³ããåç §ããŠãã ããïŒ https ïŒ//github.com/angular/angular/issues/20193#issuecomment -345755889
ãã®ãããªããŒã«ãžã®åç §ãæäŸããŠãã ããããŸã è¯ããã®ã¯èŠã€ããããXLIFF 2ããµããŒããããã®ããŸã èŠã€ãã£ãŠããŸãããSmartCatã¯ãããã«èŠããŸãããæååãæŽæ°ãããšãç®ãåãããããªããŸãã
ããªãã¯ç§ãã¡ãç¥ããªãããšãç¥ã£ãŠããããã§ã:)
Pootleã¯https://github.com/translate/translateã䜿çšããŠãããGettextïŒpoãã¡ã€ã«ïŒã«ã¯éåžžã«åªããŠããŸãããããã¬ãŒã¹ãã«ããŒ/ã¿ã°ããµããŒãããŠãããã誰ãããã®æçš¿ãåŸ ã£ãŠããŸãã
ç§ã¯ãã®å·ãé·ãé賌èªããŠããŸãã ãã®ç¹ã§ã®é²æ©ã¯AngularããŒã ã®åªå äºé ã§ã¯ãªãããã§ãããèšèªããšã«ã¢ããªã1åã³ã³ãã€ã«ããåçãªç¿»èš³ãè¡ãããã«ããŒããå®è¡ããå¿ èŠã¯ãããŸããã å¯èœã§ããã°ãä»ã®i18nã©ã€ãã©ãªã䜿çšããã«ã¹ã¿ã ãã€ããäœæããããšããå§ãããŸãã çŽç²ã§ããããããã®ãã€ãã¯ã¢ããªãè€æ°åã³ã³ãã€ã«ããã®ãšåããããå¹ççã§ãã ãŸããAngularã«äŸåããªãi18nã䜿çšããããšã§ãã³ãŒãããç°¡åã«åçãªå€æãè¡ãããšãã§ããŸãã ãã1ã€ã®å©ç¹ã¯ã翻蚳ãAngularã«äŸåããªããªãããšã§ãããã®ãããå¿ èŠã«å¿ããŠäžéšã®ã³ã³ããŒãã³ããä»ã®ãã¬ãŒã ã¯ãŒã¯ã«ç§»è¡ããããèªç±ã«ç¿»èš³åœ¢åŒãããŒã«ãéžæãããããããšãã§ããŸãã ç§ã¯https://airbnb.io/polyglot.js/ã䜿çšããŠããŠãéåžžã«æºè¶³ããŠããŸããã¢ããªãAngular i18nããpolyglotã«ç§»è¡ããŠããå Žåã§ããçµæãšåé€ã«æºè¶³ããããšã¯ã§ããŸããã Angulari18nãšã®äŸåé¢ä¿ã®
ãããããªãã®ã¡ãŒã«ã®éç¥ãšããŠåãåããç§ã®æèŠãæ°ã«ããªã人ã«ã¯ç³ãèš³ãããŸããããããªãã®éç¥ãé·ãéèªãã§ããã®ã§ã賌èªã解é€ããåã«å¥ããåããªããã°ãªããªããšæããŠããŸã:)
也æ¯ïŒ
ãã®ç¹ã§ã®é²æ©ã¯AngularããŒã ã®åªå äºé ã§ã¯ãªãããã§ãããèšèªããšã«ã¢ããªã1åã³ã³ãã€ã«ããåçãªç¿»èš³ãè¡ãããã«ããŒããå®è¡ããå¿ èŠã¯ãããŸããã
ã©ã³ã¿ã€ã i18nã¯AngularããŒã ã«ãšã£ãŠå€§ããªåªå äºé ã§ãã ãã ããããããã³ã°ã®åé¡ã¯æ°ããIvyã¬ã³ãã©ãŒã§ãã ãããžã§ã¯ãã®é²æã¯ãããŸã§ã®ãšããé 調ã§ãããããIvy for Angular8ãæåŸ ã§ããŸããããã¯é¢ä¿è å šå¡ã«ãšã£ãŠé£ããç¶æ³ã§ããããšãç解ããŠããŸãã èšç»ã¯ãããŸãããã¢ã€ããŒãå®æããªãéãå®æœããããšã¯ã§ããŸããã
ãã³ãã³ã§éå¬ãããæè¿ã®AngularConnectã«ã³ãã¡ã¬ã³ã¹ïŒ2018ïŒã®è¬æŒãç¹ã«OlivierCombeã«ãããRuntimei18nããšAlexRickabaughã«ãã2æ¥ç®ã®åºèª¿è¬æŒãã芧ãã ããã
確ãã«ç§ã®çµéšã¯@intellixã«äŒŒãŠããŸãã
XLIFF 1.2ã¯10幎åã®ãã®ã§ããããªãŒãã³ãœãŒã¹ãããžã§ã¯ãã§ã®ãµããŒãã¯ããªã貧匱ãªããã§ãã https://github.com/translate/pootle/issues/4762ããã³https://github.com/translate/pootle/issues/1811ã«ãããšãPootleã¯palceholdersããµããŒãããŠããŸããã WeblateããããããµããŒãããŠããŸãããã PRã¯ãŸããªããµããŒããè¿œå ããå¯èœæ§ããããŸãã
ãã¹ã¯ãããã§ã¯ãVirtaalã¯XLIFFãã¬ãŒã¹ãã«ããŒããµããŒãããŠããŸãããææ°ãªãªãŒã¹0.7.1ã¯6幎åã®ãã®ã§ãããç§ãèãããšããã«ãããšãææ°ã®macOSã§ã¯åäœããªããªããŸããã æ®å¿µãªãããããã¯ããç¶æããããããžã§ã¯ãã®å°è±¡ãäžããŸãããããã€ãã®éåžžã«å€ãPRã¯ãæããã«åçŽã§ããã«ããããããããŸã ããŒãžãããã®ãåŸ ã£ãŠããŸãã ãããŠãéå»æ°å¹Žéã®ã³ããã掻åã¯éåžžã«å°ãªãã§ãã
æ°æ¥åã«ãªãªãŒã¹ãããPoedit2.2ãXLIFF1.2ãš2.0ããµããŒãããŠããããšãç¥ããŸããã çŸåšã€ã³ã¹ããŒã«äžã«snapcraft.ioCDNãããšã©ãŒãçºçãããããæ®å¿µãªãããã¹ãã§ããŸããã ããããããã¯ãã¹ã¯ããããŠãŒã¶ãŒã«ãšã£ãŠæè¯ã®è§£æ±ºçãããããŸããã
@fetisãã¬ãŒã¹ãã«ããŒããµããŒãããXLIFF1.2ãããã«ã¯XLIFF 2.0ãç·šéããããã®ãªãŒãã³ãœãŒã¹ïŒãŸãã¯å°ãªããšãç¡æã§äœ¿çšã§ããïŒãããžã§ã¯ããèŠã€ããå Žåã¯ãããã«ãªã¹ãããŠãã ããã ç§ããã¹ãããä»ã®ãã¹ãŠã¯ããŸã£ããæ©èœããŠããªããã䜿çšããã®ãéåžžã«è€éã§ããã
@ intellix @ PowerKiKiãããç§ãç¥ã£ãŠãããªã¹ãã§ãã ç§ãã¡ã®ç®æšã¯ãããŸããŸãªåœã®ç¿»èš³è /ååãšååã§ãããªã³ã©ã€ã³ç¿»èš³ãã©ãããã©ãŒã ã§ãã ãã¹ãŠã®å ±åäœæ¥è ã«ãã¹ã¯ããããœãããŠã§ã¢ãã€ã³ã¹ããŒã«ããXLIFFãã¡ã€ã«ã®åæã管çããããã»ã¹ãå®è¡ããããšã¯ç§ãã¡ã®éžæã§ã¯ãããŸããã ãã®ããããã¹ã¯ãããããŒã«ããã©ãããã©ãŒã ã¯ãã¹ãããŸããã§ããã
ã¢ããªã±ãŒã·ã§ã³
OmegaT
https://omegat.org/
ã»ã«ããã¹ã
https://weblate.org/en/+ææãã¹ãã£ã³ã°
https://pootle.translatehouse.org/
https://pontoon.mozilla.org/
ãã©ãããã©ãŒã
Crowdin
https://crowdin.com/
CLIãµããŒã
WebTranslateIt
https://webtranslateit.com/
CLIãµããŒã
Transifex
https://www.transifex.com/
PhraseApp
https://phraseapp.com/
Lokalise
https://lokalise.co/
CLIãµããŒã
_æé ãªäŸ¡æ Œã§ååãªæ©èœãæäŸããããããããžã§ã¯ãã®Lokaliseã§çµäºãããšæããŸãã_
ãPOEditorã
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ãã¡ã€ã«ã«äœ¿çšããŸãããããã¯çŽ æŽãããããšã§ããã
PSããã§è©±é¡ãå€ããŠç³ãèš³ãããŸããããåæã«ã¢ããªããXLIFFãã¡ã€ã«ãååŸããããšã¯æ ã®äžéšã«ããããã¢ããªã®ã©ã€ããµã€ã¯ã«ãéããŠããã翻蚳ããŠç¶æããå¿ èŠããããŸãã ã§ããããããã¯éèŠãªè°è«ã§ãã ç§ã¯ã©ããã«ç§»åããããšãææ¡ããŸããç§ã¯ãã®ãªã¹ããäžçšåºŠã®èšäºãšããŠçœ®ãããšãã§ããããã§è°è«ãç¶ããããšãã§ããŸãã
@localpcguyå€ãã®ãã©ãŒãããããããŸãããããã¯ãã¹ãŠããµããŒãã§ãããã©ãŒãããã®æ°ã«ããã£ãŠããŸãã ã·ãªã¢ã©ã€ã¶ãŒã®äœæãšä¿å®ã«ã¯æéãããããŸãã Xliff 2ã¯ä»ã®èª°ãã«ãã£ãŠPRãšããŠè¿œå ãããã®ã§ããµããŒããè¿œå ããŸããïŒããã§ãªããã°ããµããŒãããã®ã«æéãããããŸããã§ããïŒã
æœåºãšããŒãžã®2ã€ã®ããã®ã·ãªã¢ã©ã€ã¶ãŒãå¿
èŠã§ãã
ããã«ã€ããŠã¯AngularConnectã§è©±ããŠããŸããããå€éšã·ãªã¢ã©ã€ã¶ãŒã䜿çšã§ããããã«ãªãããšãé¡ã£ãŠããŸãã ivyã䜿çšããŠã©ã³ã¿ã€ã ïŒããŒãžïŒã§ãããè¡ãã®ã¯éåžžã«ç°¡åã§ãããã³ã³ãã€ã©ãŒã«å€æŽãå ãããšãã«ã·ãªã¢ã©ã€ã¶ãŒãæŽæ°ããå¿
èŠããããããæœåºã¯äŸç¶ãšããŠè€éã§ãã
ãããè¡ãæ¹æ³ã«ã€ããŠããã€ãã®ã¢ã€ãã¢ããããŸããããã¿ãçå°ããããããŒã ãšè©±ãåãå¿
èŠããããŸãã ç§ãæ¬åœã«ããããã®ã¯ãå°ãªããšãJSONãµããŒããè¿œå ããŠãAngular i18nã䜿çšããŠngx-translateãæžãçŽãããšãã§ããããã«ããããšã§ãïŒãããŠå€ãã®äººããããæãã§ããããïŒã
@ocombeã«æè¬ããŸãïŒãããŠä»ã®ãã¹ãŠã®å ¥åãç§ã¯ããŸããŸãªãã¥ãŒãèŠãã®ã奜ãã§ãïŒã ïŒ14185ã¯ããªãããã£ããã£ãPRã ã£ãããã§ãããARBãµããŒãã®è¿œå ãæ€èšãããã®ã§ããã°ãããã§ãè¯ãåºçºç¹ã§ããïŒ ããã¯æåºãããå Žåã«æœåšçã«ããŒãžãããå¯èœæ§ããããã®ã§ããïŒ
@localpcguyææ¥ããŒãã£ã³ã°ããããããïŒããã³ãã®ä»ã®ããšïŒã«ã€ããŠè©±ãåããŸããã©ããªããããç¥ããããŸãã
ããŠããããããŸããããšç§ãã¡ãèãããã®ã§ãïŒæœåºã®ããã«ãç§ãã¡ã¯ããçš®ã®json圢åŒïŒç¿»èš³çšã®å ¬åŒã®json圢åŒãªã®ã§ARBã§ãããããããããŸããïŒã§æååãæœåºããŸãã ïŒjsonã¯æ¬åœã«äœ¿ããããã§ãïŒãããŠå®è¡æã«ãããªããããªãã®ãã©ãŒããããç解ããããªãèªèº«ã®ããŒããŒãæžãããã«äœ¿ãããšãã§ããããçš®ã®ã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããŸãã
ã€ãŸããããã¯ãã¢ããªã«ããŒããŒãæäŸã§ããéãã翻蚳ã«ä»»æã®çš®é¡ã®åœ¢åŒãèªç±ã«äœ¿çšã§ããããšãæå³ããŸããïŒ
ãŸãããã¯çŽ æŽãããã§ãããïŒ+1ïŒ
ã¯ãã詳现ãªæé©åã«ã¢ã¯ã»ã¹ããããšã¯ã§ããŸããïŒãã«ãæã«æååã眮ãæããŠãèšèªããšã«1ã€ã®ãã³ãã«ãäœæããŸããã€ãŸãã翻蚳ã¯ã³ã³ããŒãã³ãã§ã³ãŒãåå²ãããŸãïŒããä»»æã®çš®é¡ã®é
延èªã¿èŸŒã¿ãœãªã¥ãŒã·ã§ã³ã䜿çšã§ããŸããã¢ããªã®èµ·åæã«ãã¹ãŠã®ç¿»èš³ãèªã¿èŸŒãéãïŒã³ã³ããŒãã³ããäœæããåã«åæçã«èªã¿èŸŒãå¿
èŠããããŸãïŒ
ãŸããæçµçã«ã¯æåã§ã³ãŒãåå²ããæ°ããã³ã³ããŒãã³ããããŒããããšãã«éåæã§ã«ãŒã¿ãŒã«ããŒãããããšãã§ããŸããããã¯ãivyãæäŸããæ°ããé
延èªã¿èŸŒã¿æ©èœã䜿çšããŠè¡ããŸãïŒJasonã¯Angular Connectã§ãã¢ãè¡ããŸããïŒã
Ivyã§ãªã³ã¶ãã©ã€ã§èšèªãåãæ¿ããããŒã¿ãã¢ïŒãããªãã©ã€ãã¹ããªãŒã ã ãããã¡ã€ã«ããã®ã§ã¯ãªãïŒãæåŸ ã§ããŸããïŒ POCã®æçµåã®ãã¿ããŸãšããããšããããšã¯ãéäžç ²ç«ãæ€åºããããã®åªããæ¹æ³ãããããŸããã
éçºè ã®æ±ãlive-i18nã«æ³šå ¥ããåã«ãããåºãŸã£ãç³ã®ãã¿ãåŸ ã€ãšããã¢ãããŒãã«åæããªãããã§ã¯ãããŸããã1人ã®å°èŠæš¡POCã¯ã次ã®åœ¢ã§è«å€§ãªå©çãåŸãã«ã¯å°éã®æ±ã ãšæããŸããå èŠæ§ããããã©ã€ãi18nã2020幎ã«ããã·ã¥ãããã®ãåé¿ã§ããå¯èœæ§ããããŸãã
å€éšãŠãŒã¶ãŒåãã®ã©ã³ã¿ã€ã ãµãŒãã¹ã¯ãŸã å®äºããŠããŸãããã¯ããŒãžã£ïŒ goog.getMsg
ïŒã䜿çšããã³ãŒããããããŸãããããã¯ãGoogleã¢ããªã§ãã¿ããã¹ãããããã«å¿
èŠãªãã®ã ããã§ãã
ç§ã¯ããããæ°ã¶æéããã«åãçµãã§ãããŸãã ããã¯ããããããŸã ivyã§i18nã䜿çšã§ããªãããšãæå³ããŸãã
ã©ã³ã¿ã€ã i18nã®ã³ãŒãã¯æšæ¥ããŒãžãããã°ããã§ãããi18nã®ã³ã³ãã€ã©ã³ãŒãã¯æ°æ¥ä»¥å
ã«ããŒãžãããã¯ãã§ãïŒç§ãã¡ã¯ããã«å°éããŠããŸãïŒïŒã 次ã«ãå
ã»ã©èª¬æããæ°ããããŒããŒããã³ãŒãã§ç¿»èš³ã䜿çšãããµãŒãã¹ãªã©ãå€éšã®äººã
åãã®æ°ãããµãŒãã¹ã«åãçµã¿ãŸãã
ãã®å Žã§èšèªãåãæ¿ããå Žåã§ããã¢ããªãå®å šã«ãªããŒãããããã«ãŒããå€æŽããå¿ èŠããããŸãïŒæ¢åã®ãã¹ãŠã®ã³ã³ããŒãã³ããã¯ãªãŒã³ã¢ãããããŸãïŒã ç§ã¯ãŸã POCã«åãçµãã§ã¿ãŸããã
ãã®å Žã§èšèªãåãæ¿ããå Žåã§ããã¢ããªãå®å šã«ãªããŒãããããã«ãŒããå€æŽããå¿ èŠããããŸãïŒæ¢åã®ãã¹ãŠã®ã³ã³ããŒãã³ããã¯ãªãŒã³ã¢ãããããŸãïŒã ç§ã¯ãŸã POCã«åãçµãã§ã¿ãŸããã
ããã¯å
¬å¹³ã§ã...ãã ããã¢ããªã®å®å
šãªãªããŒãïŒãŸãã¯ãšã³ããŠãŒã¶ãŒã®ç®ã«ã·ãŒã ã¬ã¹ãå®çŸãããã®ãå¥åãã¹ãã¢ãèªèšŒãURLã倱ãããšã¯ãããŸããïŒãŸã... /en/...
ãèæ
®ããªãïŒã¯å¿
èŠãããŸãã
@tatsujbã¢ããªã®ãªããŒãã¯ããŒãžã®ãªããŒãã§ã¯ãããŸãããStackBlitzã¯ç·šéã®ãã³ã«ã¢ããªããªããŒãããŸãããç®ã«èŠãããšæããŸããïŒ
ã¢ããªããªããŒããããšããããšã¯ãã¢ããªãã¢ã³ããŠã³ãããŠããåãäœçœ®ã«ã¢ããªãããŠã³ãããããšãæå³ããŸããããã¯ãSSR-CSR移è¡ïŒCSR-CSRïŒãšåçã§ãããé©åãªãã£ãã·ã¥ã¢ãŒããã¯ãã£ãæ€èšãããŠããå Žåã¯ãåŸç¶ã®ããŒãã¹ãã©ããããã»ã¹ã§éåæã¿ã¹ã¯ãçºçããªãããã«ããå¿ èŠããããŸãã
ãããã£ãŠããã®æ£ããèšå®ã§ã å€æ°å€ãšèªèšŒïŒããã³ã¹ã¯ããŒã«å¯èœãªdivã®ã¹ã¯ããŒã«éïŒãä¿åããŸããïŒ
@tatsujb Angularã§äœæãããã€ã³ã¹ã¿ã³ã¹ã®å€éšãããšãã°åå¥å€æ°ããŠã£ã³ããŠããããã£ã«ä¿åãããŠããéãã
@trotylããŒãžãªãã§ã¢ããªããªããŒãããã«ã¯ã©ãããã°ããã§ããïŒ
@saithisã¢ããªã±ãŒã·ã§ã³ã¯åžžã«platformBootstrap().bootstrapModuleFactory()
ïŒãŸãã¯ä»ã®åçã®ãã®ïŒã§ããŒãã¹ãã©ããããŸãããã€ã§ãã©ãã§ãåŒã³åºãããšãã§ããŸããåŒã³åºãæã«éæ³ã¯ãããŸããïŒAngular CLIã«ã¯çŸåšã³ãŒã眮æã®å¶éãããããã¯ãã¢ã€ããŒã®åé¡ïŒã
ã¹ã¯ãªããã®åŒã³åºãæã«ç±å¿ã«ããŒãã¹ãã©ãããããããæ°žä¹ ã«ä¿æããïŒã¢ã³ããŠã³ãããªãïŒããšã¯ãSPAã®äžè¬çãªæ¹æ³ã«ãããŸãããã誰ãããªãã«ããããããšã匷å¶ããŠããŸããã
ç·šéïŒèª°ããããããŠããå Žåã¯ãã¡ã¢ãªãªãŒã¯ãé²ãããã«ããŒãã¹ãã©ãããããNgModuleRef
ãç Žæ£ããå¿
èŠããããŸãã ãããã¯ãããã¯ããå€ãã質åã§ãããä»ã®ãã£ãã«ã§è°è«ããæ¹ãããã§ããããããã§i18nã®è°è«ã远跡ããæ¹ãããã§ãããã
@trotylããããšããããŒãã¹ãã©ãããåã³æ©èœããããšãç¥ããŸããã§ããã
@ocombeããã§ã¹ãã ãåé€ã§ããŸããïŒ ãããŠç§ã®ã³ã¡ã³ããã
@fetisãžïŒããªãã®ãããªäººã
ã¯ããªãªãŒã¹ã®ããã«åé¡ãšãµãã¹ã¯ã©ã€ãã®ãã©ããŒã解é€ããå¿
èŠããããŸã
@AndrulkoãžïŒç§ãã¡ã¯æ°ã«ããŸãã
@angularã«ïŒèšã£ãããã«ç§ã¯å®å šã«ç解ããŠããŸãããã§æå¥ãèšããŸãïŒ ããšãã°ãvXã§ã¯ãªãv7ã®ãã¿ã欲ããã£ãããŸãã¯v7ã®å€§å¹ ãªæ¹åã販売ããªãã§ãå¿çã§ããªãã£ãå ŽåããŸãã¯æéãå®ãããã«7.xã«é 眮ããå Žåãªã©ã§ã...ããã¯å ¬å¹³ã§ã¯ãããŸããã ã¯ãããªãã·ã§ã³ã¯äœãçºè¡šããªãããšã§ããå¿ èŠãããããããæªãèãã§ãããšèª°ãæå¥ãèšãããšã¯ãããŸããããã¬ãŒã ã¯ãŒã¯ã§èªåã®å Žæãäœãå¿ èŠããããŸãã ã¯ããv2以éæ£ããi18nãåŸ ã£ãŠããŸãã倧ããªã¢ããªã®ãã®å¿ é ã®åŽé¢ã§ã¯ã50000æååãå«ãåœéçãªãŠã§ãã¢ããªã®ãããªå€§ããªã¢ããªã®Angular察å¿ã販売ã§ããŸããã§ããããã¡ããããããèªãã®ã¯å¥œãã§ã¯ãããŸããããæãããããªããè¯ãã§ãä¿¡ä»°ãç§ãã¡ãi18nãèæ ®ãããä»ã®ãã¹ãŠã®åŽé¢ã§ãã«ãæé/éçºæéãé ãå Žåãè§åºŠã¯çŽ æŽããããšèšããŸãã ãã¡ããã決å®è ã«è©±ãããããšãç¹å®ã®æ¹åãäžéšã§å€ããã¯ãã§ãã ããã°ã°ãŒã°ã«ããç§ãã¡ã¯ãã®ãããªå€§ããªééããç¯ãããšãã§ããªãã£ãã®ã§ãç§ãã¡ïŒæ¹å€ããïŒããã®æé«ã®äŸå€ã ç§ã¯ã°ãŒã°ã«ã®éçºè ãäŸå€ã®ããã«èŠãã-è³¢ã人ã ã¯ééããªããã®ããšã¯çµéšè±å¯ãªéçºè ãã°ãŒã°ã«ã®ãããªéçºè ã«ãšã£ãŠã¯èµ·ãããªãã¯ãã ïŒ ç§ã®äžççãªæèŠã§ã¯ãäŒæ¥ããããéžæããæ°éäŒæ¥ã«ãªãŒãã³ãœãŒã¹ãšã¯äœãã販売/説æãããšãã«ã倧ããªã¢ããªã®è§åºŠã100ïŒ è²©å£²ããããšã¯ãããŸããïŒ
@ç¹ã«ããžãã¹äŒç€Ÿã§åããŠããªã人ã®ããã«ïŒç§ã¯ç¢ºãã«ãªãŒãã³ãœãŒã¹ãå°éããŠããªãã®ã§ç§ã®ã³ã¡ã³ããå«ãã§ããïŒïŒïŒïŒå€§ããªã¢ããªã®æºåãã§ããŠããŸãïŒ80ïŒ ã§ã¯ãªã100ïŒ ïŒ...ç§ãã¡ã¯äŸåããŠããŸãïŒ
è¹ãé¢ããã®ã§ããããç§ã®æåŸã®ã³ã¡ã³ãã§ãïŒ ç»é²ã解é€ãã+次ã®ãããžã§ã¯ãã§AngularãéžæããªãïŒããªããåè ã§ãããšèšããŸãããªãŒãã³ãœãŒã¹ãããžã§ã¯ãã«ã¯ç§ãã¡ã®ãããªäººã¯å¿ èŠãããŸããïŒ
ãããªæ ç±ïŒ ãã©ã³ã¹ãåãããã«...ç§ãã¡ã¯ã¢ããªãAngular6ã§æžãçŽãã6èšèªã§åœéåããŠãããããããªäžäŸ¿ãæããŠããŸãã 確ãã«ããã«ãæéã®ççž®ãšãã®å Žã§ã®ç¿»èš³ã¯ç¢ºãã«çŽ æŽãããããšã§ãããç§ãã¡ã«ãšã£ãŠäžçã®çµããã§ã¯ãããŸããã i18nã§ã¯ãªããã¬ãŒã ã¯ãŒã¯ã®98ïŒ ã¯çŽ æŽãããã§ãã çŽ æŽãããä»äºã®äººïŒ æ°æ©èœã楜ãã¿ã«ããŠããŸãã
ãŸããæ°ãããšã³ã¿ãŒãã©ã€ãºããŒã¿ã«ã§Angularã䜿çšããçŽ æŽãããçµéšããããŸãã i18nã¯ãã¹ã€ã¹ã§ã¯4ã€ã®èšèªããµããŒãããå¿ èŠããããããå¿ èŠãªæåŸã®æ©èœã§ãã ããã§ã®åé¡ã¯ã³ãã¥ãã±ãŒã·ã§ã³ã«ãããšæããŸãã ãããžã§ã¯ãã®èšç»ã«ã€ããŠã¯ã1幎åã«i18ã®ãªãªãŒã¹ãããæ£ç¢ºã«èŠç©ããããšãã§ããã°ããããèšç»ããŠä»ã®å¯èœæ§ãæ€èšããããšãã§ããã¯ãã§ãã ãšã¯ãããæŽæ°ããåŸ ã¡ããŠãããŸãã :-)
è§åºŠãå®ãããã«ããã®ããã«æ¬çªç°å¢ã§ç°¡åã«äœ¿çšã§ããŸãïŒç§ãèŠã€ããæè¯ã®è§£æ±ºçïŒ
parent-component.component.html
<app-route-translation
[routeData]="routeData"
></app-route-translation>
route-translation.component.html
<span
i18n="route text|Navigation text for route@@routeText"
>{
routeData.langKey, select,
home-1 {Home 1}
home-1-1 {Home 1-1}
home-1-2 {Home 1-2}
home-2 {Home 2}
home-2-1 {Home 2-1}
home-2-2 {Home 2-2}
home-root {Home root}
lazyPage {Lazy page}
notFound {404}
other {Other}
}</span>
"prod-en": {
...
"outputPath": "dist/en/",
...
},
"prod-ru": {
...
"outputPath": "dist/ru/",
...
}
FROM node:8 as build-stage
WORKDIR /app
COPY angular-util .
RUN npm install
RUN npm run ng build -- --configuration=prod-en
RUN npm run ng build -- --configuration=prod-ru
FROM nginx
WORKDIR /usr/share/nginx/html
COPY --from=build-stage /app/dist .
COPY nginx.conf /etc/nginx/conf.d/default.conf
set $subdomain ru;
ã®ru
ãããã©ã«ãã®ãã±ãŒã«ã«çœ®ãæããå¿
èŠããããŸã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
ãã®ã³ã¡ã³ãã«è³æã§ãã å®ç§ã§ã¯ãªããããããŸããããããã§ãç§ãWebã§èŠã€ãããã®ãããã¯ã«é¢ããæã圹ç«ã€æçš¿ã§ãã
ããã«ã¡ã¯ãã¿ããªã
ç§ã¯èªåã®ãããžã§ã¯ãã«i18n翻蚳ã䜿çšããŠããŸãã ç§ã¯æ¬¡ã®åéã«çåãæã£ãŠããŸãïŒ
ããã€ãã®çããæäŒã£ãŠãããŸãããã
@learnersLicense ïŒ
<div i18n>Some value: {{ valueA // i18n(ph="PH_A") }}</div>
ããããICUåŒã @ AndrewKushnirã§ã¯æ©èœããªããšæããŸããïŒããªãã®ã©ã€ãã©ãªãæ¶è²»ãã誰ãã¯ããã®ã©ã€ãã©ãªã®ããªãã®ç¿»èš³ãããŒãããããšãã§ããªããªããŸã
ãããåé¿ãã1ã€ã®æ¹æ³ã¯æ¬¡ã®ãšããã§ãã
1ïŒã©ã€ãã©ãªã«i18nãxliffã«æœåºããŠç¿»èš³ããã
2ïŒã©ã€ãã©ãªããã±ãŒãžãšäžç·ã«xliffãã¡ã€ã«ãåºè·ãã
3ïŒã³ã³ã·ã¥ãŒããŒãç¬èªã®xliffãã¡ã€ã«ãæœåºããŸã
4ïŒã³ã³ã·ã¥ãŒããŒã¯xliffãxmlããŒãµãŒã«ããŒãããŸãã node_modulesããçºçãããã©ã³ã¹ãŠãããããã¹ãŠåé€ããŸã
5ïŒã³ã³ã·ã¥ãŒããŒã¯ãããxliffã§ãããšã©ã€ãã©ãªãŒxliffãé£çµããŸã
ã€ãŸããã©ã€ãã©ãªãæ¶è²»ãã人ã¯ããã®ã©ã€ãã©ãªã®ç¿»èš³ãèªã¿èŸŒããªããªããŸãã
ãã®ã¹ããŒãã¡ã³ãã誀解ããŠãããããããŸãããã xlf
ãã¡ã€ã«ãäœæãããšãã«ãäŒç€Ÿã®ã¢ããªã±ãŒã·ã§ã³ã®ç¿»èš³èšå®ã§ãä»ã®ãããžã§ã¯ãã®ãã³ãã¬ãŒãã§æå®ãããããŒãå«ãŸããŠããããšãç¥ã£ãŠããŸãã é ã«æµ®ãã¶ã®ã¯https://github.com/ng-bootstrap/ng-bootstrapã§ã
çŸæç¹ã§ã¯ãããã¯äžå¯èœã®ããã§ãã
<my-button i18n-title="@@SHARED_GO_LABEL" [title]="'Go'" [button-style]="'primary'" (click)="navigateToForm()"></my-button>
ãããã®å€æŽã®ç¯å²å ã§ãããã¯å¯ŸåŠãããŸããïŒãŸãã¯ç§ã¯äœãééã£ãããšãããŠããŸããïŒïŒ
@ mikejr83
ããã¯å¯èœã§ãã title
[title]="'Go'"
title="Go"
$ãšããŠå²ãåœãŠãå¿
èŠããããŸã
@ocombeãš@ ewok-janitorã®åçãšææ¡ã«æè¬ããŸãã ð
@ocombeã©ã€ãã©ãªã®ç¿»èš³ãå©çšå¯èœã«ãªããŸã§ã®æ«å®çãªæ¥ä»ã¯ãããŸããïŒ
ä»ã®ãšããæ¥ä»ã¯ãããŸããã ivyã®æåã®ãªãªãŒã¹ã§ã¯ãæ©èœã®åçæ§ãå®çŸããããšããŠããŸãã æ°ããæ©èœïŒã³ãŒãã®ç¿»èš³ãã©ã€ãã©ãªã®ãµããŒããå«ãïŒã¯ããã«äœæ¥ããŸãïŒãŸãã¯å®éã«ã¯åã«äœæ¥ãéå§ããŸãããivyãã¢ã«ãã¡çã§ãªãªãŒã¹ãããŠãçµäºããŸããïŒã ivyãããã©ã«ãã«ãªãåã«å©çšå¯èœã«ãªããŸãã
xliffãã¡ã€ã«ã®ä¿®æ£ã¯ãã§ã«ãããŸããïŒ https://github.com/angular/angular/issues/17506
åç
§ãä¿®æ£ãããŠããªãéãããã®åœ¢åŒã䜿çšããããšã¯ãŸã£ããäžå¯èœã§ãã
@ocombeã«ãŒãå€æããµããŒãããèšç»ã¯ãããŸããïŒ
ã¯ããããã¯æ°åèŠæ±ãããŸãããããã¯åœé¢ã®èšç»ã§ã¯ãããŸããããããã¹ãããšã®ãªã¹ãã«ãããŸã
ããã«ã¡ã¯ãivyãããŒã¿çã§ãªãªãŒã¹ããããšãã«ã©ã³ã¿ã€ã i18nã䜿çšããæ¹æ³ã«é¢ããããã¥ã¡ã³ãã¯ãããŸããïŒ
@marcelnem ããã®URLã確èªãããšããã¹ãŠã®ããã¥ã¡ã³ããã€ã³ããä¿çã«ãªã£ãŠããŸãã
@ocombeããªããä»Googleã§ãã£ãŠããçŽ æŽãããä»äºã Angular i18nã¯ãæåããngx-translateã®ãããªãäœããã§ããå¿ èŠããããŸããã Angular 8/9ããªãªãŒã¹ãããããngx-translateããAngular i18nã¹ã¿ã€ã«ã«ç§»è¡ããããã®ç§»è¡ã¬ã€ããèªåããŒã«ãæ©èœæ¯èŒãªã©ãããã®ã ããããšæã£ãŠããŸããã
ããã«ã¡ã¯ocombe
ããªããäžã§è¿°ã¹ããã®æ©èœã«ã€ããŠããªãã«ç¢ºèªããå¿
èŠããããŸã
ã©ã³ã¿ã€ã i18nïŒAOTã䜿çšãããã¹ãŠã®ãã±ãŒã«ã«1ã€ã®ãã³ãã«ïŒ-[äœæ¥äž] >>ããã¯ãŸã é²è¡äžã§ããããããšãçµäºããŠããŸãã
ãŸã é²è¡äžã®å Žåã¯ãåé¿çãæããŠãã ããã
ããããšã
äžèšã§æžãã@ocombeã¯ãèšèªããã±ãŒãžã¯lacyloadingã«ãã£ãŠããŒãããå¿ èŠããããšè¿°ã¹ãŠããŸãã èšèªããã¯ãindex.htmlã«çŽæ¥ããŒãããããšãå¯èœã§ããïŒ ã¢ããªã±ãŒã·ã§ã³ãAWSLambdaäžã§å®è¡ãããã³ã³ãã€ã«ãããAngularãã¡ã€ã«ãS3ãã±ããã«ä¿åãããå Žåãããããã§ãã ããããŸã£ããæ©èœããããšã¯å®éã«ã¯ãã§ã«åé¿çã§ãããAngularã¯å¥ã®ãã¹ããããã¡ã€ã«ãã¬ã€ã·ãŒããŒãã§ããªããããã¬ã€ã·ãŒããŒãã䜿çšããããšã¯ã§ããŸããã ãããã£ãŠãAngularãå¿ èŠãšãããã¹ãŠã®ãã¡ã€ã«ã¯ãindex.htmlïŒã¹ã¯ãªãããä»ããŠS3ãã¹ããè¿œå ããå ŽæïŒã«ãã§ã«å«ãŸããŠããå¿ èŠããããŸãã
@ nidhi8953ããã¯ãŸã WIPã§ãããivyã§å©çšã§ããããã«ãªããŸããä»ã®ãšãããGoogleå ã§ã®ã¿æ©èœããŸãïŒç¿»èš³ã«ã¯å éšã§ClosureCompilerã䜿çšããŠããããïŒã 翻蚳ãåŠçããã©ã³ã¿ã€ã ãµãŒãã¹ã¯ãå€ã®äžçã«ãšã£ãŠéåžžã«å®éšçãªãã®ã§ãã ããã€ãã®ããšããã¹ããããå Žåã¯ã次ã®äŸãåç §ããŠãã ããïŒ 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ã§æ£åžžã«æ©èœããŸãã ããã¯ãAngularã®ã¢ããã°ã¬ãŒããã¹ã«åŸãããšãã§ããi18nã倱ãããšãªããå·®åããŒããªã©ã®æ°ããå©ç¹ã®ããã€ããååŸããi18nãæ©èœãããIvyããªã³ã«ããæºåãã§ããŠããããšãæå³ããŸãã
@jacobbowdoinã¯ãivyããªã³ã®å Žåã¯æ©èœããŸããããã¢ã¯ãã£ãåãããŠããªãå Žåã¯æ©èœããŸãã
å€ãæœåº/èªã¿èŸŒã¿ã·ã¹ãã ãivyã§åäœããããã£ãã®ã§ãããããã¯äžæçãªãã®ã§ãã£ããããããŒã ã«ãã£ãŠåªå
é äœãšããŠæ±ºå®ãããŸããã§ããïŒç解ã§ããã®ã§ãå¿
é ã®ãã®ãæåã«åäœãããããšãåªå
é äœã§ãïŒã
ããã«ã¡ã¯@ocombe ãç§ãã¡ã¯ä»i18nãéçºãããã®ã§ãã©ã³ã¿ã€ã ãåŸ ã€ããšã¯ã§ããŸãã-i18nã ããã§ãngx-translateã®äœ¿çšããå§ãããŸããïŒ i18n-polyfillãšäžç·ã«äœ¿çšããã®ã¯çã«ããªã£ãŠããŸããïŒ i18n-polyfillã䜿çšãããšãruntime-i18nãžã®ç§»è¡ã容æã«ãªããŸããïŒ
ngx-translateã䜿çšããå Žåã¯ãi18n-polyfillã䜿çšããªãã§ãã ããã ãã³ãã¬ãŒãã«Angulari18nã䜿çšããå Žåã«ã®ã¿ãããã䜿çšããã®ãçã«ããªã£ãŠããŸãã
ngx-translateã¯äŸç¶ãšããŠé¢é£æ§ãããã䜿ããããã§ãã è€æ°ã®ãã«ãïŒãã±ãŒã«ããšã«1ã€ïŒããµããŒãããããã«ããã¹ãŠã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãé
眮ããå¿
èŠã¯ãããŸããã
ããã«ã¡ã¯@ocombe ãã¹ããŒã¿ã¹ã®æŽæ°ã¯ãããŸããïŒ
-ã©ã³ã¿ã€ã i18n
-ãã³ãã¬ãŒãã®å€éšã§ç¿»èš³æååã䜿çšãã-ïŒ11405
çŸåšããœãŒã¹ã³ãŒãã®ç¿»èš³ãåŸ ã€ã¹ãããi18n-polyfillã䜿çšãã¹ããã«ã€ããŠè°è«ããŠããŸãïŒãã§ã«i18nããå§ããŸããïŒã æ°é±éã¯ç°¡åã«åŸ ã€ããšãã§ããã®ã§ãããããã®ã¿ã€ã ã©ã€ã³ãããã ããã°å¹žãã§ãã ã©ããããããšãããããŸããïŒ
@halilovicedvin Googleã¢ããªã§ivyãããã©ã«ãã«ãªããšããã«ãå€éšãŠãŒã¶ãŒåãã®ã©ã³ã¿ã€ã 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ãããèšå®ããããªãã®çµéšã¯äœã§ããïŒ
@ marcelnemi18n -polyfillã§ngx-translateã䜿çšããããšã¯ã§ããŸããã i18n-polyfillã¯ãangular-i18nã§ã®ã¿äœ¿çšã§ããŸãã
i18n-polyfillã®ã»ããã¢ããã¯ç¢ºãã«éåžžã«ç°¡åã§ããã ããã¥ã¡ã³ãã¯ããã»ã©æ£ç¢ºã§ã¯ãããŸããããäœãå€æŽããã°ããããããã«ããããŸããã
@vekunzããããŸãããããããšãããããŸãã i18n-polyfillã®ç®çãäœã§ãããããããŸããã å ¬åŒã®Angulari18nãšåæ§ã«ãã¢ããªãè€æ°åãã«ããã httpïŒ// myapp / en ã httpïŒ// myapp / de ã httpïŒ// myapp / fr ã...ã§è€æ°åãããã€ããå¿ èŠããããŸããïŒ
@marcelnemã¯ããi18n-polyfillã䜿çšããè€æ°ã®ãã«ããå¿
èŠã§ãã ç®çã¯ãangular-i18nã䜿çšãããšãçŸåšhtmlãã³ãã¬ãŒãå
ã§ã®ã¿ç¿»èš³ã䜿çšã§ããtypescriptã³ãŒãå
ã§ã¯äœ¿çšã§ããªãããšã§ãã i18n-polyfillã¯angular-i18nãæ¡åŒµããŠãã¿ã€ãã¹ã¯ãªããã³ãŒãå
ã®ç¿»èš³ã䜿çšããŸãã
Angular 9ïŒç§ã«ç»å ŽïŒã§ã¯ãangular-i18nã¯typescriptå
ã®ç¿»èš³ããµããŒãããŸããããããŸã§ã®éãããã«ã¯i18n-polyfillãå¿
èŠã§ãã
@vekunzã¯ãããã«ã€ããŠããå°ã詳ãã説æããŠããã ããŸããããããã¥ã¡ã³ãã¯ããã»ã©æ£ç¢ºã§ã¯ãããŸããããäœãå€æŽããã°ããããããã«ããããŸãããã ç§ã¯ããããæ¥é±i18n-polyfillã調ã¹ãŠããã®ã§ãã©ããªæ å ±ã§ãé«ãè©äŸ¡ãããã§ãããã ã©ãã
@halilovicedvin @marcelnemãã®GitHubã®åé¡ã®ã¡ã€ã³ãããã¯ã§ã¯ãªããããç§ã¯ããã説æããããŒã¹ããã³ããã¥ã¡ã³ããäœæããŸããhttps://pastebin.com/Xib6X6E9
@ocombe xi18nããŒã«ã䜿çšããŠããããžã§ã¯ã/ãªããžããªå šäœã§ã¯ãªããïŒç¿»èš³ãçæããããã®ïŒsrcãã©ã«ããŒã®ã¿ã«å ¥åãã¹ãå¶éã§ããŸããïŒ
@ocombe Ivyã¯Angular8ã§è€æ°ã®ãã±ãŒã«ããµããŒãããŠããŸããïŒèšèªãã¡ã€ã«ã§ã¯ãªãããã±ãŒã«å®çŸ©ã®ã¿ãããšãã°ãæ¥ä»ãã€ãã®å ŽåïŒïŒ ä»ã®ããŒã ã¯çŸåšngx-translateã§Angularã䜿çšããŠããŸããã1ã€ã®ãµãŒãããŒãã£ã³ã³ããŒãã³ãã«ã¯æ£ãããã±ãŒã«ãå¿ èŠã§ãã 1ã€ã®ãªãã·ã§ã³ã¯ãprodã¢ãŒãã§JITã³ã³ãã€ã©ãŒã䜿çšããããšã§ãããããã¯ããŸãè¯ããããŸããã ãããããã¹ãŠã®èšèªã®æ°ãããã³ãã«ãã³ã³ãã€ã«ããããšãã§ããŸãããããã¯éåžžã«å€ãã®ããšã«ãªãããã§ãã
@vekunzããããè€æ°ã®ãã±ãŒã«ãèšå®ããããšã¯ã§ããŸãããã³ã³ãã€ã«ããããã³ãã«ããšã«ãã±ãŒã«ãèšå®ããå¿
èŠããããŸãïŒcliæ§æãã¡ã€ã«ã§èšå®ã§ããŸãïŒ
ããã¯ããªããèãããã£ããã®ã§ã¯ãªãããšãç§ã¯ç¥ã£ãŠããŸãããããããã¯ä»ã®ãšãããããã©ã®ããã§ãããã§ã
@ocombeäœãæããŠããã ããŸããïŒAngularã®ããŒã ã¯ãããåé¡ãšããŠç¹å®ããŠããªãããšã¯ç¥ã£ãŠããŸãããAngularã䜿çšãããšãè¿ãå°æ¥ãã¢ããªããªããŒãããã«å®è¡æã«èšèªãå€æŽã§ããããã«ãªããšæããŸããåäžã®ãã³ãã«ã§ãæ£ãã翻蚳ãããŒãããŠããã¹ããªãã©ã«ãšãã€ã³ãããå¯èœæ§ããããŸããïŒ
ã¯ãããã³ãã«ã1ã€ãããŸããã翻蚳ã¯ããŒã¹ãã©ããã§èªã¿èŸŒãŸããŸãïŒã¢ããªãèªã¿èŸŒãŸãããšãïŒã æ¢åã®ã¢ãŒããã¯ãã£ã§ã¯ããã§ã«ç¿»èš³ã䜿çšããŠããã³ã³ããŒãã³ãããªããŒãããã«ã翻蚳ãããããããªããŒãããã®ã¯éåžžã«è€éã§ãã
ãããäžå¯èœã ãšèšã£ãŠããããã§ã¯ãããŸããããæ®å¿µãªããè¿ãå°æ¥ã«èµ·ãããšã¯æããŸããã
è¿ éãªå¯Ÿå¿ãããŠããã@ocombeã«æè¬ããŸã:)è¯ãä»äºãç¶ããŠãã ããïŒ+1ïŒ
ããè§åºŠã®ããäŒè°ïŒAngularConnectã ãšæããŸãïŒãã@ocombeã®ãã¬ãŒã³ããŒã·ã§ã³ãã©ããã«ãããããã§åœŒã¯i18nãšIvyã«ã€ããŠè©±ããŸããããããŠããã§åœŒã¯ãããéåžžã«ãã説æããŸããããªãããã¯ãšãŠãè€éãªã®ã§ããïŒ ç§ã¯ãããªãèŠã€ããããšãè©Šã¿ãããšãã§ããŸãã
ç§ã¯ãããèŠã€ãããšæããŸãhttps://www.youtube.com/watch?v=miG-ghJhFPc
ivyã§ã©ã³ã¿ã€ã i18nãåŸ ã£ãŠãã人ã«ãšã£ãŠãv9ã®çŸåšã®èšç»ã¯ã翻蚳ãivyã§æ©èœãããããšã§ããããã«ãã¹ããããšããŠã®ã¿æ©èœããŸãïŒçŸåšã®ãã¥ãŒãšã³ãžã³ã®å Žåãšåæ§ïŒã ããã¯ãä»ã®ãšãããŸã 1ãã«ã/ãã±ãŒã«ã§ãããã³ãŒãå€æã¯è¡ãããªãïŒãã³ãã¬ãŒãå€æã®ã¿ïŒããšãæå³ããŸãã
æ®å¿µã ããŠãããã䟡å€ããããã®ã®ããã«ãããªãã®ããŒãã¯ãŒã¯ã«æè¬ããŸãïŒ
@ocombeã¯ãã©ã³ã¿ã€ã ã³ãŒãå€æã®ããªãã£ã«ãåŒãç¶ãç¶æããŸããïŒ
ã¯ãå£ããå Žåãç§ã¯ããã«æ°ãããã®ãè¿œå ããŸããã
i18nãé·ãéäºçŽåžæ°ã§ãã£ãããšã¯ã¡ãã£ãšæ®å¿µã§ã...誰ãããã€ãã£ãã®è±èªãã±ãŒã«ç°å¢ã§åããŠããããã§ã¯ãããŸããã ïŒïŒ
åæããŸããAngularçšã®æ°ãã匷åãªi18nãœãªã¥ãŒã·ã§ã³ãéçºã§ããããã«ãç§ãåŸæŽããäŒç€ŸãèŠã€ããããšããŠããŸãïŒç§ã«ã¯ããããã®ã¢ã€ãã¢ããããŸãïŒã
èå³ã®ãã人ã®ããšãèããããTwitterïŒ@ocombeïŒãŸãã¯ã¡ãŒã«ïŒ[email protected]ïŒã§ç¥ãããŠãã ããð
@ocombeãä»äºãããããšãããããŸããã ðããªããããŒã ãå»ããªããã°ãªããªããšããã®ã¯å°ãé©ãã¹ããã¥ãŒã¹ã§ãã ããªããI had to ...
ãšèšã£ãããã«ãããã¯ç§ãããªãã«çŽæ¥ããªãã«äž»ãªçç±ãäœã§ãã£ãããå°ããããã«å°ããŸãã ç§ã¯ãããã®éæ¥çãªãã³ããåœãŠæšéãå«ããªã®ã§ããããããªããžã®ãã®ãããªçŽæ¥çãªè³ªåã®çç±ã§ãã
ç§ã¯AngularããŒã ã§åãå€éšã®è«è² æ¥è
ã§ãããGoogleã®ãã«ã¿ã€ã ã®åŸæ¥å¡ã§ã¯ãããŸããã§ããããã®ãããããŒã ã®ããŒãºã«å¿ããŠããã€ã§ãå¥çŽãçµäºã§ããŸãã
圌ãã¯ãããžã§ã¯ããæ¯æŽããããã«ç€Ÿå
ã§æ°ãã人ãåéããŠãããi18nããã®ä»ã®ãããã¯ãæ¯æŽããé©åãªäººãèŠã€ãããšç¢ºä¿¡ããŠããã®ã§ãAngularã®å°æ¥ã«ã€ããŠå¿é
ããå¿
èŠã¯ãããŸããïŒvisage_légÚrement_souriantïŒããã¯ãã ã®äžæçãªåŸé
@ocombeã説æããããšãããããŸãã
åæåãconsté åããŸãã¯.model.tsãã¡ã€ã«ãªã©ã®ã¯ã©ã¹å€ã§i18nïŒi18n-polyfillïŒã䜿çšããæ¹æ³ãæããŠããããŸããïŒ
å®æ°ã«ã€ããŠã¯ãç§ã¯ãŸã ããããã¯ã©ã¹ã«å ¥ããŠããŸãã ç§ã¯ä»£æ¿æ¡ãç¥ããŸããïŒ/
@ocombe ngx-translateãi18npolyfillãããã³AngularããŒã ã䜿çšããAngularã®i18nã§ã®ãã¹ãŠã®ããŒãã¯ãŒã¯ã«æè¬ããŸãã
éèŠãªã¢ããªã±ãŒã·ã§ã³ã§å¿
èŠãšãããããã«ãç§ãã¡ã¯æ¯æ¥ããªãã®ä»äºã䜿çšããŠãŠãŒã¶ãŒã«ç¿»èš³ãæäŸããŸãã
ããªããåé²ããããšã«å¹žéãç¥ããŸãã
å®æ°ã«ã€ããŠã¯ãç§ã¯ãŸã ããããã¯ã©ã¹ã«å ¥ããŠããŸãã ç§ã¯ä»£æ¿æ¡ãç¥ããŸããïŒ/
ããŒã..ããããã¯ã©ã¹ã«ç§»åããå Žåã¯ã䜿çšããå€æ°ãéçã«ããå¿ èŠããããŸãã ããããéçå€æ°ã«i18nã䜿çšããããšã¯ã§ããŸããã
ãšã¯ã¹ããŒãã¯ã©ã¹äŸ{
ã³ã³ã¹ãã©ã¯ã¿ãŒïŒãã©ã€ããŒãi18nïŒI18nïŒ{}
éçå€æ°= i18nïŒ 'text'ïŒ; //ã¯ã©ã¹Exampleã®ééçã§ãããããããã§ã¯i18nã䜿çšã§ããŸãã
}
æ²ãããã¥ãŒã¹...ãã®ã匱äœåãAngular ...ä»ã®äººãèšãããã«ãçŽ æŽãããä»äºãããŠããã@ocombeã®ãããã§ã幞éãç¥ããŸãã
èå³ããããŸãããngx-translateã䜿çšããããšã®ãã¡ãªããã¯äœã§ããïŒ äººã ãæ¢ããŠããæ©èœãæ£ç¢ºã«å®çŸã§ããããã§ã
äžå©ãªç¹ã¯æ¬¡ã®ãšããã§ãã
ããã¯èšã£ãŠããå€ãã®äººã«ãšã£ãŠã¯ååãªããã§ãð
è§åºŠãã©ã®ããã«ã¢ã¯ã»ã·ããªãã£ãä¿é²ããæè³ããã®ãäžæè°ã§ããããã®ããã±ãŒãžã«ã¯èšèªãå«ãŸããŠããŸããã ããã¯åäžèšèªç°å¢ããã®æ±ºå®ã§ãããšå®æããŠããŸãã
éåžžã3ã4ã®èšèªã亀æå¯èœã«æäŸããå¿ èŠãããç°å¢ããæ¥ãŠãå€éšã©ã€ãã©ãªã䜿çšãããããæãããªå©ç¹ããããã®æ©èœã®çºè¡šä»¥æ¥ãç§ã¯èŸæ±åŒ·ããã®æ©èœã®ãªãªãŒã¹ãåŸ ã£ãŠããŸããã ãã®ãã¥ãŒã¹ã§ãç§ã¯ç¿»èš³ãå®å šã«ç®¡çããããã®ç§ãã¡ã®æŠç¥ãåèããå¿ èŠããããŸãã
@ocombe Googleãããªããè«è² æ¥è ãšããŠéããªãå¯èœæ§ã¯ãããŸãããïŒð
@DmitryEfimenkoçŸåšngx-translateã䜿çšããŠãããéåžžã«æºè¶³ããŠããŸãã
@ocombe Googleãå€éšã®éçºè /ã³ãã¥ããã£ãããã®æ©èœãåãå ¥ããå¯èœæ§ã¯ã©ã®ããããããŸããïŒ ç§ãã¡ã¯ããŸãã«ãé·ãéåŸ ã£ãŠãããšæããŸãã
ããªããããã«çå£ã«åãçµãã§ããŠãããã«åãçµãããšã«æéãè²»ããããã®ã§ããã°ã圌ãããã®æ©èœã«åãçµãããã®å©ããåãå ¥ããå¯èœæ§ãé«ããšç§ã¯èšãã§ããã
ããªããããã«çå£ã«åãçµãã§ããŠãããã«åãçµãããšã«æéãè²»ããããã®ã§ããã°ã圌ãããã®æ©èœã«åãçµãããã®å©ããåãå ¥ããå¯èœæ§ãé«ããšç§ã¯èšãã§ããã
@ocombe @IgorMinar Ivy i18nã®ãã©ã³ãã£ã¢æŽ»åãæäŸãããã®ã§ãããæ©äŒãããã°æããŠãã ããã
ããªããããã«çå£ã«åãçµãã§ããŠãããã«åãçµãããšã«æéãè²»ããããã®ã§ããã°ã圌ãããã®æ©èœã«åãçµãããã®å©ããåãå ¥ããå¯èœæ§ãé«ããšç§ã¯èšãã§ããã
ç§ã¯è²¢ç®ããããšæã£ãŠããŸãããã¿ã¹ã¯ã®ç¯å²ãšè€éããå®å šã«ç¥ããŸããã å ã®ã¡ãã»ãŒãžã®ãªã¹ããä»æ§/èŠä»¶ãšããŠäœ¿çšã§ããŸããïŒ
ãããããã®ãªã¹ãã¯å»æ¢ãããŸããã
ãããæŽçããæ¹æ³ã確èªã§ããããã«ã2人ãèå³ãæã£ãŠããããšãããŒã ã«ç¥ãããŸãã
@ocombeç§ãã¡2人以äžã ãšæããŸãã
AngularããŒã ã«å¿ èŠãªãã®ã¯
ãã®ã³ãã¥ããã£ãšäžç·ã«éçºãæŽçããã¿ã¹ã¯ãåå²ããããšãã§ããŸã
https://hackmd.io/UfFN_wyVT-Ob1p70nA3N_Q?viewã§ç§ãç¥ã£ãŠããããšããããŸã
@fetisäœæ¥ãåå²ããããã®ã¯è¯ãèãã§ã¯ãªããããããŸãããç¹ã«ã競åã®å¯èœæ§ãé«ãäžéšã®ã³ã¢äœæ¥ã§ã¯ãã³ãã¥ãã±ãŒã·ã§ã³ãšã³ã³ããã¹ãå ±æã«ãå€å€§ãªã³ã¹ããããããŸãã
ããã§ãé©ããã®ã¯ãXLIFFããããšããŠãªã¹ããããŠããããšã§ãïŒããããngx-translateã®XLIFFã®æ¬ åŠã¯ãã¡ãªããã§ãïŒã Google翻蚳ããã®ä»ã®GoogleãµãŒãã¹ã¯ã翻蚳æååã®JSONè¡šçŸã§ããARBãã¡ã€ã«ã䜿çšããŠããããã§ãã ããšãã°ãINTLãARBãã¡ã€ã«ã§å®è£ ãããŠããFlutter / Dartã䜿çšããŠã¢ãã€ã«ã¢ããªãæ§ç¯ããŸããã AngularããŒã ããããæ€èšãããšãã«ãGoogleãšã³ã·ã¹ãã å ã®ä»ã®ã¢ã€ãã ãšã®çžäºéçšãæ¹åããããã«ããããèæ ®ã«å ¥ãããšããã§ãããã
äœæ¥ãåå²ããããã®ã¯è¯ãèãã§ã¯ãªããããããŸãããç¹ã«ã競åã®å¯èœæ§ãé«ãäžéšã®ã³ã¢äœæ¥ã§ã¯ãã³ãã¥ãã±ãŒã·ã§ã³ãšã³ã³ããã¹ãå ±æã«ãå€å€§ãªã³ã¹ããããããŸãã
åæããŸããããã®å šäœã1人ã§åŠ¥åœãªæéå ã«çŽåã§ãããšã¯æããŸããã ã¹ã³ãŒãã倧ãããã
äœæ¥ãåå²ããããã®ã¯è¯ãèãã§ã¯ãªããããããŸãããç¹ã«ã競åã®å¯èœæ§ãé«ãäžéšã®ã³ã¢äœæ¥ã§ã¯ãã³ãã¥ãã±ãŒã·ã§ã³ãšã³ã³ããã¹ãå ±æã«ãå€å€§ãªã³ã¹ããããããŸãã
åæããŸããããã®å šäœã1人ã§åŠ¥åœãªæéå ã«çŽåã§ãããšã¯æããŸããã ã¹ã³ãŒãã倧ãããã
@fetisç§ã¯ããªããšäžç·ã«åãããšãã§ããŸãã ç§ãã¡ã¯ãããžã§ã¯ãã§Angulari18nãæ¬åœã«äœ¿çšããããšæã£ãŠããŸãããããã¯éåžžã«éãããŠããŸãã
ãããæŽçããæ¹æ³ã確èªã§ããããã«ã2人ãèå³ãæã£ãŠããããšãããŒã ã«ç¥ãããŸãã
@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ãèŠãããšãã§ãããªãã°ãããã§ã®åé¡
åçã³ã³ãã³ããŸãã¯ã³ã³ãã³ãã®ãªã¹ããåŠçãããšãã¯ãã€ã§ãããããå®çŸããæ¹æ³ãããããŸããã
詳ãã説æã§ããããªããã
ããã§åé¡ãç解ããŠããã ããã°å¹žãã§ãã
ããããšãã
Swapnil
ãã®ããã®åé¡ãéããŠããã ããŸããïŒ ããã§ã¯å®éã«ã¯ãããã¯ã§ã¯ãªããä»ã®èª°ããåããã®ãæ¢ããŠããå Žåã¯ããããèŠã€ããã®ãç°¡åã«ãªããŸã
@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ïŒïŒïŒãšããã§
ããã«ã¡ã¯@ocombe ããã®åé¡ã¯ãŸã ææ°ã§ããïŒ IvyãAngular9ã®ããã©ã«ãã«ãªãããã§ãã®ã§ãi18nã®ã¹ããŒã¿ã¹ã¯ã©ããªã£ãŠããã®ã§ããããïŒ ãã€çç£æºåãæŽããèŠç©ããããé¡ãããŸãã Angular 9ã10ã11ã§ã¯ïŒ Angular 9ããªãå ŽåãAngular 9ïŒããã³IvyïŒã¯i18nãªãã§åºè·ãããŸããããããšãå€ãi18nã䜿çšããŸããïŒ
çŸåšã®ç¶æ ã«é¢ãã詳现ã«ã€ããŠã¯ããã®ïŒhttps://github.com/angular/angular/issues/11405ïŒã®åé¡ãåç §ããŠãã ããã çŸåšã®ç¶æ ã«ã€ããŠãã®å·ã§èªã䟡å€ã®ããã³ã¡ã³ãïŒ
ãŸããããã¯ãã§ãã¯ãã䟡å€ããããŸãã
v9ã§ã¯ã¹ã€ãããåãæ¿ããŠãããã©ã«ãã§ivyã䜿çšããããã«ããŠããŸãããå®å
šã«æ©èœããŠããªãã·ããªãªãããã€ãããå¯èœæ§ãããããããã®ãããžã§ã¯ãã¯ä»ã®ãšããview-engineã«åºå·ãããšäºæ³ãããŸãã
ç§ãã¡ã¯v9.0.0ãªãªãŒã¹ã§i18nã皌åãããããã«åãçµãã§ããŸãããã¿ã€ãã«ãªãã§ãããã
ãã©ã³ã¿ã€ã i18nïŒãã¹ãŠã®ãã±ãŒã«ã«1ã€ã®ãã³ãã«ïŒãã®çŸåšã®ã¹ããŒã¿ã¹ã¯äœã§ããïŒ
@ 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
å€æå®è£
ãå«ãŸããŠããå¿
èŠãããããããã©ãŠã¶ãŒãžã®ãã€ããŒãã倧ãããªãããšã§ãã ãŸãã翻蚳èªäœããã©ãŠã¶ã«éä¿¡ããå¿
èŠããããŸãã ãã®ã¢ãããŒãã®å©ç¹ã®1ã€ã¯ãå®è¡æã«ç¿»èš³ã®é
延èªã¿èŸŒã¿ããµããŒãããããšã§ãã ãã ããhttpãµãŒããŒïŒãŸãã¯ãã«ããµãŒããŒïŒã§å€æãå®è¡ãããšãããå¹ççãªã©ã³ã¿ã€ã ãšã¯ã¹ããªãšã³ã¹ãåŸãããããšã¯è°è«ã®äœå°ããããŸãã
ã©ã³ã¿ã€ã ãªãã·ã§ã³bïŒãé¡ãããŸãã çŸåšngx-translate
ã§è¡ã£ãŠããããã«ã翻蚳ãJSONãã¡ã€ã«ãšããŠããŒãããå®è¡æã«èšèªãåãæ¿ããããšãã§ããŸãã
説æããããšãã aïŒã¢ãããŒãã¯ãããè§åºŠã®ããããã®ã§ãããbïŒã¢ãããŒãïŒããã³äžè¬çãªé 延èªã¿èŸŒã¿ïŒã®å€§ããªå©ç¹ã¯ããŠãŒã¶ãŒã«ãã翻蚳ãåçã«å®çŸ©/å€æŽã§ããããšã§ããããŸãïŒã¢ããªã®å€æŽããã翻蚳ã¯ããã«äœ¿çšã§ããŸãïŒ ã ç§ããããæ£ããç解ããŠããã°ãã¢ãããŒãaïŒã§ã®ç¿»èš³ã®å°ããªå€æŽã¯ãæ°ããåæ§ç¯ãæå³ããŸãã
ããã¯ãäºåå®çŸ©ãããAngularã³ã³ããŒãã³ãã䜿çšããŠéçã«çæãããããŒãžããããŠãŒã¶ãŒãæãããã«ããã°ã©ããŒãå®çŸ©ããAngularã³ã³ããŒãã³ããå«ããŠãŒã¶ãŒçæãã³ãã¬ãŒãã«åãæ¿ããã®ãšåãå©ç¹ã§ãïŒãã®æ¹æ³ã§å®çŸ©ããããã³ãã¬ãŒããããŒã¿ããŒã¹ããããŒããããŸã... ïŒã
ãŸããããã©ã«ãã§ããŒãæã«aïŒã¢ãããŒãã䜿çšãããå¯èœæ§ã«ã€ããŠãèãããããããŸããã å®è¡æã®ç¿»èš³èŠæ±ãçºçããå ŽåïŒããšãã°ãããã¯ãšã³ããæ°ãã翻蚳ã®éä¿¡ãéå§ããå ŽåïŒãbïŒã¢ãããŒãã®ããã«ãããŒã¯ããããããã¯ïŒãããŸã§éçããã¹ããå«ãïŒãã¯ããŒã«ãããåçã«çœ®ãæãããå§ããŸãã ãããã£ãŠãbïŒã¯å¿ èŠãªå Žåã«ã®ã¿ã¢ã¯ãã£ãåããããã¹ãŠã®ç¿»èš³å¯èœãªããŒãã¯æé aïŒã«åŸã£ãŠæºåãããŸãã ãã®ãããªã¢ãããŒãã¯ãbïŒã¢ãããŒãèªäœãããè² æ ã倧ããããã®æ¹æ³ã§çŽæ¥å®è¡ã§ããããã§ã¯ãªãããšã¯ç解ããŠããŸãããããã¯ãŠãŒã¶ãŒã®å®éã®ããŒãºã«è¿ããã®ã«ãªããŸãã
ããªãããªã¹ããããªãã·ã§ã³ã«å¯ŸããŠãç§ã¯ãã®ãããªåçãªæ©èœãå®çŸããããã«ãç¹å®ã®å Žåã«ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã®çŽ25ïŒ ãç ç²ã«ããã€ããã§ãïŒãã¡ãããç§ã¯ã©ãã§ããã®åçãªã¢ãããŒãã䜿çšããŸããïŒã ãããã£ãŠãAOTããŒã«ã©ã€ãºããããã³ãã¬ãŒãã0.4ç§ã§ã¬ã³ããªã³ã°ãããå Žåãåçãã³ãã¬ãŒãã®å Žåã0.5ç§ã§çæãããå Žåã§ãã翻蚳ã®å€æŽã«å¯Ÿãããã®ãããªå³æã®å¿çãå¿ èŠãªã¢ããªã§ã¯èš±å®¹ã§ãããšæããŸãã
@demisxã¯äž¡æ¹ã®ã¢ãããŒããv9ã§å©çšå¯èœã«ãªããŸããããªãã·ã§ã³aïŒã®ã¿ãæåã«å®å
šã«ãµããŒãããïŒäžäœäºææ§ã®ããïŒãAngularããŒã ã«ãã£ãŠå®å
šã«æ¿èªãããåã«ãªãã·ã§ã³bïŒã®ããã«æ°ãããã®ãéçºãããå¯èœæ§ããããŸãã
ç§ã®ã©ã€ãã©ãªLocl
ã¯ããªãã·ã§ã³bïŒv9ããªãªãŒã¹ããããšãã«ãAngularããŒã ããã®ã®ã£ãããåãããŸã§ã誰ã§ã䜿çšã§ããããã«ããããã®ããã€ãã®ãã«ããŒãæäŸããŸã
ãã®ãããªã©ã³ã¿ã€ã å€æã¯ãã³ã³ããŒãã³ããã¬ã³ããªã³ã°ããããšãæ°ããå€æãããŒããããå Žåã§ããã®ããã¹ããåçã«å€æŽã§ããªããšããæå³ã§ããªã¢ã¯ãã£ããã§ã¯ãªãããšã«æ³šæããŠãã ããã
翻蚳ãããã¡ãã»ãŒãžã¯ã $localize
ã¿ã°ä»ãæååã«é¢ããŠéçã§ãã ãããã£ãŠãã³ã³ããŒãã³ããåã¬ã³ããªã³ã°ããå¿
èŠããããŸãã ãŸããIVYã§ã®ãã³ãã¬ãŒãã®ãã£ãã·ã¥ã«ãã£ãŠã¯ãåã¬ã³ããªã³ã°ã ãã§ã¯äžååãªå ŽåããããŸãã
ããã¯ãå®è¡æã®å€æã®åäœãå¿ ãããçŽæçã§ãããšã¯éããªããããå®è¡æã®å€æãå®è£ ããã®ãé£ããçç±ã®1ã€ã§ãã
ãã«ãã§éçå€æãéå§ããåŸã§ã©ã³ã¿ã€ã å€æãè¿œå ãããã€ããªããã¢ãããŒãã«ã€ããŠã ããã¯ãã³ã³ãã€ã«æã®ã€ã³ã©ã€ã³åã§$localize
ã¿ã°ãåé€ãããããã³ãã¬ãŒãåãããæååãªãã©ã«éšåãæŽæ°ãããå Žåã«å®è¡å¯èœã«ãªãå¯èœæ§ããããŸãã ãã ããããã«ãããã³ã³ãã€ã«æéã®ã³ã¹ããšè¿œå ã®ãã³ãã«ãµã€ãºã®ã³ã¹ããçºçããŸãã
Angular 9 RC1ã§ng xi18n
ãå®è¡ãããšããç³ãèš³ãããŸããããi18nã¯ãŸã Ivyã«å®è£
ãããŠããŸããããšè¿ãããŸãããå€æŽãã°ã«ã¯ãçŸåš_some_i18nãµããŒããå®è£
ãããŠããããšã瀺ãããŠããŸãã ä»ã®ãšããã翻蚳ãã¡ã€ã«ãæåã§æŽæ°ããå¿
èŠããããšæããŸããïŒ
@ neil-119çŸåšãæœåºã¯ivyã¢ãŒãã§ã¯ãµããŒããããŠããŸããã æœåºãå®è¡ããã«ã¯ãivyãç¡å¹ã«ããå¿ èŠããããŸãã ãã ããå床æå¹ã«ããŠãæœåºããã翻蚳ãã¡ã€ã«ã䜿çšããããšãã§ããŸãã
æçµçãªv9ãªãªãŒã¹ã«æœåºãå«ãŸããäºå®ã§ããããšãé¡ã£ãŠããŸãã
@ neil-119 AngularCLIã¯æœåºã«VEãèªåçã«äœ¿çšããå¿ èŠããããŸãã ãããæ©èœããããã«äœãããå¿ èŠã¯ãããŸããã ãŸããããããã¹ãããŠããã®ã§ãå£ããŠããããšã«é©ããŠããŸãã åçŸã§åé¡ãéãããšãã§ããŸããïŒ
çŸåšãæœåºã¯ivyã¢ãŒãã§ã¯ãµããŒããããŠããŸããã
ãŸãã¯ããããããã¯ã·ã§ãŒã¹ããããŒã§ãã çŸåšãæååæœåºã«ããèªååãããããã»ã¹ããããŸãã 翻蚳ãèªåçã«æœåºã§ããªãå Žåãã©ãããã°Ivyã«ç§»è¡ã§ããŸããïŒ
sconfig.json every time
ãæäœããŸããïŒ ããã¯ç§ã«ã¯ããèãããŸããã
@ fetis-ç§ã¯ééã£ãŠããŸããã CLIã䜿çšããŠããå Žåã¯ãivyãæå¹ã«ãªã£ãŠããå Žåã§ãã ng xi18n
ã®åŒã³åºãã¯æåŸ
ã©ããã«æ©èœããã¯ãã§ãã
@petebacondarwinããããšãã çŸåšã®ãããžã§ã¯ãã§Ivyãè©ŠããŠã¿ãã€ãããªã®ã§ããããããã«ç¢ºèªããããšæããŸã
ããã«ã¡ã¯ãã³ã³ããŒãã³ãïŒangular 9.0.0-rc.1ïŒã§äœ¿çšããããšããŸãã
$localize `some string to localize`;
@ angle / locale / initã®ãœãŒã¹ã³ãŒãã§docãšããŠèŠã€ãããŸããã
èªåã®èšèªã§éåžžã©ããã«ãã«ãããããšãããšããã®ãšã©ãŒãçºçããŸãNo translation found for "4145296873012977836" ("some string to localize").
ãã®æååã®ç¿»èš³ãæäŸããã«ã¯ã©ãããã°ããã§ããïŒ
ç§ãæåŸ
ããŠããã®ã¯ãngxi18nãã³ã³ããŒãã³ãã³ãŒããããã®ããã¹ããå«ã.xlfãã¡ã€ã«ãçæããããšã§ãã ããã¯æ£ããã§ããããããšãç§ã¯äœããæ¬ ããŠããŸããïŒ
ããã«ã¡ã¯@ Ks89- ïŒãã³ãã¬ãŒãã§ã¯ãªãïŒã¢ããªã±ãŒã·ã§ã³ã³ãŒãããã®ã¡ãã»ãŒãžã®æœåºã¯ãv9ã§ã¯ãµããŒããããŠããŸããã
ããããããªããåå£ãªå Žåã¯ããããåé¿ããããšãã§ããŸãã 4145296873012977836
ã¯ã¡ãã»ãŒãžã®IDã§ããããã翻蚳ãã¡ã€ã«ã§ãã®IDã䜿çšããŠç¿»èš³ãæäŸãããšã翻蚳æã«äœ¿çšãããŸãã
@petebacondarwinãã®æ©èœãAngularã«è¿œå ãããã®ã¯ãã€ã§ããïŒ
ã³ã³ããŒãã³ãã®å®è¡æã®ç¿»èš³ãæ¬åœã«äŸ¿å©ã«ããããšãæ¬åœã«éèŠã ãšæããŸãã
.xlfãã¡ã€ã«ã翻蚳è ã«éä¿¡ãããšããã¹ãŠã®æååããã°ããè¿œå ããŠããã®çµæãã¢ããªã«éåžžã«ç°¡åã«é©çšã§ãããšæåŸ ããŠããŸãã
çããŠãããŠããããšã
9.1ã§æåŸ ããŸã
ãã¹ãŠã®ã³ã³ããŒãã³ãã®ChangeDetectionStrategy
ã«é¢ä¿ãªããã¢ããªå
šäœã匷å¶çã«åã¬ã³ââããªã³ã°ããæ¹æ³ãããã°ããããã®åçãªåé¡ãç°¡åã«è§£æ±ºã§ããŸãã
@petebacondarwin Angular 9ã¯ãæ°ãã$ localeizeã¿ã°é¢æ°ãšãšãã«ãªãªãŒã¹ãããŸããããã¡ãã»ãŒãžã¯æœåºãããŠããŸããã 以åãAngular9.1ã§ãããæåŸ ã§ãããšãã£ããããŸããã ãã®äºæž¬ã¯ãŸã æå¹ã§ããïŒ$ localeAPIãå®å®ããŠãããšæåŸ ã§ããŸããïŒ
ãã³ãã¬ãŒããã翻蚳ãæœåºã§ããŸãã
ã³ãŒãã§ã$localize
ã䜿çšããå Žåã¯ãLoclãåç
§ããŠãã ããïŒ https ïŒ//github.com/loclapp/locl/
@locl/cli
ã䜿çšãããšãã³ãŒããšãã³ãã¬ãŒãããæœåºã§ããŸã
@ vekunz-äºæž¬ã¯ãŸã æå¹ã§ãã ããã«ã @ ocombeãææããŠããããã«ãçŸåšã®CLI翻蚳æœåºã¡ã«ããºã ã¯ãAngularãã³ãã¬ãŒãå
ã®ãã¹ãŠã®ç¿»èš³ïŒã€ãŸãã i18n
ã¿ã°ã§ããŒã¯ãããŠãããã®ïŒã«å¯ŸããŠåé¡ãªãæ©èœããŸãã çŸåšãã³ã¢ããŒã«ã䜿çšããŠæœåºã§ããªãã®ã¯ãç¬èªã®ã³ãŒãå
ïŒãµãŒãã¹ãã³ã³ããŒãã³ããªã©ïŒã§ã®$localize
ã®åŒã³åºãã ãã§ãã
$localize
åŒã³åºãèªäœã¯å®å®ããAPIã§ãã
ïŒç¹ã«ã³ã³ãã€ã«æã«ïŒå€æãšæœåºãè¡ãããŒã«ã¯ãŸã å ¬éãããŠããŸããã ãã ããïŒ@ ocombeãLoclã§è¡ã£ãŠããããã«ïŒç¬èªã®ããŒã«ãæ§ç¯ããããšãèšç»ããŠããªãéããããã¯åé¡ã§ã¯ãããŸããã
@petebacondarwinã«æè¬ããŸããããã«ãããã³ãŒãããã®ããã¹ããæœåºçšã®ãé衚瀺ãã³ã³ããŒãã³ããã³ãã¬ãŒãã«è€è£œã§ããŸãã ããããã°ãæœåºãšç¿»èš³ã®äž¡æ¹ãæ©èœããã¯ãã§ãããïŒ
@ocombeæœåºãAngular9.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ïŒã¡ã€ã³ã®ã¢ããªãã¡ã€ã«ã®åã«å®è¡ãããŸãïŒã«é
眮ãããšæ©èœããŸããã ãã¡ã€ã³ããã¡ã€ã«ã®å Žåãã¢ãžã¥ãŒã«ã«åçãªimport(...)
ã䜿çšããå¿
èŠããããŸã
@vekunzä»ã®ãšããç§ã®libã䜿çšããªãã®ã¯è¯ãçç±ã§ãðLoclã¯åãªãæœåºã§ã¯ãªããšèšãããŠããŸãããi18nãç°¡çŽ åããããã«ä»ã®å€ãã®ããŒã«ãè¿œå ããã€ããã§ã
Angularã«ã©ã³ã¿ã€ã i18nãå®è£ ããæå³ã¯ãããŸããïŒ ç§ãã¡ã¯ã»ãŒ3幎éãã®æ©èœãæåŸ ããŠããŸããããä»ã§ã¯Ivyãããã«ããããŸã ååããçŒããŠããŸããã
Angularã«ã©ã³ã¿ã€ã i18nãå®è£ ããæå³ã¯ãããŸããïŒ ç§ãã¡ã¯ã»ãŒ3幎éãã®æ©èœãæåŸ ããŠããŸããããä»ã§ã¯Ivyãããã«ããããŸã ååããçŒããŠããŸããã
ç§ã®ç解ã§ã¯ãã¢ã€ããŒã¯å€ãã®ç¹ã§ãããããèµ·ããããšãå¯èœã«ãããã®ã§ãã i18nããŒãã«ãIvyã®ãªãªãŒã¹ã§ä¿¡ããããªãã»ã©åããŸããããããã¯å°æ¥ã®å€§ããªå€åã®å¯èœæ§ã解ãæŸã€ã¯ãã§ãã ããã¯ç§ã®èªãã ããšã§ããããšã«ããç§ã®åžæã§ãã
@ Karasuni-ããªãã®æ··ä¹±ããããããã³ã¢Angularãã¬ãŒã ã¯ãŒã¯ã«ãšã£ãŠã©ã³ã¿ã€ã å€æãå®éã«äœãæå³ããã®ããæ確ã«ããå¿ èŠããããšæããŸãã
v9ã§è¡ã£ãå€æŽã«ã¯ã $localize
ããŒã¹ã®å€æãå«ãŸããŸãã ããã®äž»ãªç®çã¯ã翻蚳ãAngularã³ã³ãã€ã©ããåãé¢ããŠãå€ãã®åªããæ¹åãå¯èœã«ããããšã§ããã
ããã®æåã®ãã®ã¯ãv9ã®ãã¹ãŠã®ãŠãŒã¶ãŒãããã«å©çšã§ãããã®ã§ã翻蚳ãããã¢ããªã±ãŒã·ã§ã³ã®çæãé«éåããããšã§ãã 以åã¯ãã¢ããªã翻蚳ããèšèªããšã«ãã«ããã€ãã©ã€ã³å
šäœãå®è¡ããå¿
èŠããããŸããã ããã§ãã¢ããªã±ãŒã·ã§ã³ã®ã¡ã€ã³ã³ã³ãã€ã«ã1åå®è¡ããã ãã§ããã«ãã®åºåã§èšèªããšã«å€§å¹
ã«çãæçµçãªç¿»èš³ããã»ã¹ãå®è¡ãããŸãã ããããµããŒãããããã«ãæ°ãã@angular/localize
ããã±ãŒãžãAngularã³ã³ãã€ã©ãŒå
ã®å€æŽãããã³Angular CLIå
ã§ã®äœæ¥ã®å
šè² è·ãããããããå¯èœãªéãã·ãŒã ã¬ã¹ã§ééçã«ããŸãã
次ã«ã $localize
ã¿ã°ãåæ£ã³ãŒãã«æ®ãããšãã§ããããããã©ãŠã¶ãŒã§ïŒã³ã³ãã€ã«æã§ã¯ãªãå®è¡æã«ïŒå€æãå®è¡ããããšãã§ããããã«ãªããŸããã ããã¯ãã³ã¢Angularãã¬ãŒã ã¯ãŒã¯ã§ã©ã³ã¿ã€ã å€æãšããŠæå³ãããã®ã§ãã ãã ããããã®æçµçãªçµæã¯ãã³ã³ãã€ã«æã®å€æãšå®è³ªçã«åãã§ããããšã«æ³šæããŠãã ããã 翻蚳ã¯1åã ãè¡ãããŸãã å®è¡æã«èšèªãå€æŽãããå Žåã¯ãã¢ããªã±ãŒã·ã§ã³å
šäœãåèµ·åããå¿
èŠããããŸãïŒããšãã°ããªããŒããä»ããŠïŒã ããã«ã¯ããããžã§ã¯ããå€æ°ã®ç¿»èš³ãã¡ã€ã«ãå«ãåäžã®é
åžå¯èœãã¡ã€ã«ãå±éã§ãããšããå©ç¹ããããŸããããã¯ããã¹ãŠã®ç°ãªã翻蚳ãäºåã«çæããããªãå°æ°ã®ãŠãŒã¹ã±ãŒã¹ã§åœ¹ç«ã¡ãŸãã @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ãèšã£ãããã«ãã©ã€ãã¹ã€ããã³ã°ã®ã»ãšãã©ãã¹ãŠã®ã·ããªãªã¯ãå®éã®ã·ããªãªãšã¯é¢ä¿ããªããããããšäŸ¿å©ããªã ãã§ãã
ãããšããããã«ããå šå¡ãã©ã³ã¿ã€ã 翻蚳ã®ç°ãªãå®çŸ©ãæã£ãŠããŸããïŒ
å®è¡æã®ç¿»èš³ã絶察ã«å¿ èŠã§ãã ã客æ§ã¯ããã«ããµãŒããŒã ãã§ãªããçŸå Žã§ç¿»èš³ãç·šéããã³æŽæ°ã§ããå¿ èŠããããŸãã ãããã£ãŠãã³ã³ãã€ã«æã§ã¯ãªããã©ã³ã¿ã€ã ã§ãã
ããŒãžã®èªã¿èŸŒã¿åŸã®å®éã®èšèªã®åãæ¿ãã¯äŸ¿å©ã§ãã
ãã æ確ã«ããŸãã ç§ãèšãããã£ãã®ã¯ãå€ãã®äººãç§ã®ãšããã«æ¥ãŠãã¢ããªã±ãŒã·ã§ã³ã§ã©ã€ãèšèªãå€æŽããããšã絶察ã«å¿ èŠã ãšèšã£ãŠãããšããããšã§ãã ããããçç±ãæãäžãããšãããã§ã¯ãªãããšãããããŸãã ãããå¿ èŠãšããã·ããªãªããªããšèšã£ãŠããããã§ã¯ãããŸããããæšå¹Žã®ç§ã®çµéšã§ã¯ãã»ãšãã©ééããŠããŸããã
質åïŒã¢ããªã®ç¹å®ã®ãã©ãŒã ã«ç§»åãããšãã«ããŠãŒã¶ãŒãèšèªãåãæ¿ããå¿ èŠãããã®ã¯ãªãã§ããïŒ
ããªãã¯ããã確ããªèŠä»¶ã§ã¯ãªããšããããšã¯æ£ãããããããŸããã ããŒãæã«ç¿»èš³ããããã€ããããšè©Šã¿ããããããŸããããå€éšã©ã€ãã©ãªã䜿çšããŠãçŸåšèšèªãåçã«åãæ¿ããããšãã§ããã¢ããªã±ãŒã·ã§ã³ã®ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãå®å šã«å€æããŸãïŒãªããŒãããããããŒãžå ã®äœçœ®ãå€æŽãããããå¿ èŠã¯ãããŸããïŒã 翻蚳ã¯éåžžã«é·ãéçœç±ãããããã¯ã§ããã
éèŠãªè³ªåããããŸãã翻蚳ãã¡ã€ã«ãéåæã§ããŒãã§ããŸããïŒ åæ§ç¯ããã«æŽæ°ã§ããããšãéèŠã§ãããããç§ã®ç¿»èš³ã¯ãã¹ãŠããŒã¿ããŒã¹ã«ä¿åãããŸãã
ã¯ããéåæã§ããŒãã§ããŸãããããŒãããããŸã§ã¢ããªã±ãŒã·ã§ã³ã®éå§ãé ãããå¿ èŠããããŸã
ãã æ確ã«ããŸãã ç§ãèšãããã£ãã®ã¯ãå€ãã®äººãç§ã®ãšããã«æ¥ãŠãã¢ããªã±ãŒã·ã§ã³ã§ã©ã€ãèšèªãå€æŽããããšã絶察ã«å¿ èŠã ãšèšã£ãŠãããšããããšã§ãã ããããçç±ãæãäžãããšãããã§ã¯ãªãããšãããããŸãã ãããå¿ èŠãšããã·ããªãªããªããšèšã£ãŠããããã§ã¯ãããŸããããæšå¹Žã®ç§ã®çµéšã§ã¯ãã»ãšãã©ééããŠããŸããã
質åïŒã¢ããªã®ç¹å®ã®ãã©ãŒã ã«ç§»åãããšãã«ããŠãŒã¶ãŒãèšèªãåãæ¿ããå¿ èŠãããã®ã¯ãªãã§ããïŒããªãã¯ããã確ããªèŠä»¶ã§ã¯ãªããšããããšã¯æ£ãããããããŸããã ããŒãæã«ç¿»èš³ããããã€ããããšè©Šã¿ããããããŸããããå€éšã©ã€ãã©ãªã䜿çšããŠãçŸåšèšèªãåçã«åãæ¿ããããšãã§ããã¢ããªã±ãŒã·ã§ã³ã®ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãå®å šã«å€æããŸãïŒãªããŒãããããããŒãžå ã®äœçœ®ãå€æŽãããããå¿ èŠã¯ãããŸããïŒã 翻蚳ã¯éåžžã«é·ãéçœç±ãããããã¯ã§ããã
æè¡çã«ã¯ãã¢ããªå
šäœããªããŒãããŠãããŠãŒã¶ãŒãå
ã®å Žæã«çããããšãã§ããŸãã
ã©ããã«ä¿åãããèµ·åæã«ååŸãããç¶æ
é§ååã¢ããªïŒngxsãngrxããŸãã¯ãã®ä»ã®ç¶æ
管çã©ã€ãã©ãªã䜿çšïŒããå¿
èŠãã§ãã
å¯äžã®ããªãã¯ã¯ã¹ã¯ããŒã«äœçœ®ãç¶æããããšã§ããããããå®è¡å¯èœã§ãã
@petebacondarwinç§ã¯ããªãã«åæãããšèšããªããã°ãªããŸããã ã¢ããªã䜿çšãããšãã«èšèªéã§ã¢ããªãæ°žç¶çã«åãæ¿ããå®éã®ãšã³ããŠãŒã¶ãŒïŒéçºãã§ãŒãºã®ãã¹ã¿ãŒãé€ãïŒã¯ããããŸããã 確ãã«ã圌ãã¯ããããæåã«ãããå¥ã®ãã®ã§éããå Žåã«ãããè¡ããŸãããåŸã§ããã¯ãŸããªã±ãŒã¹ã§ãã
ãããšããããã«ããå šå¡ãã©ã³ã¿ã€ã 翻蚳ã®ç°ãªãå®çŸ©ãæã£ãŠããŸããïŒ
å®è¡æã®ç¿»èš³ã絶察ã«å¿ èŠã§ãã ã客æ§ã¯ããã«ããµãŒããŒã ãã§ãªããçŸå Žã§ç¿»èš³ãç·šéããã³æŽæ°ã§ããå¿ èŠããããŸãã ãããã£ãŠãã³ã³ãã€ã«æã§ã¯ãªããã©ã³ã¿ã€ã ã§ãã
ããŒãžã®èªã¿èŸŒã¿åŸã®å®éã®èšèªã®åãæ¿ãã¯äŸ¿å©ã§ãã
顧客ãäœãããŠããã®ãã¯ããããŸããããã翻蚳ã®ç·šéã¯æ¬çªWebãµã€ãã§ã©ã€ãã§è¡ãããšããã®ã¯äžè¬çãªã·ããªãªã®ããã«ã¯æããŸããã
èšèªãã©ã€ãã§å€æŽããããšïŒ_ããŒãžã®ãªããŒããªã_ïŒããã®ãããªååŒã®ãã¬ãŒã«ãŒã«ãªããšã¯æããŸããã
ãŠãŒã¶ãŒã®èšèªã®å€æŽã¯1åã ãè¡ãããŸãã
èããŠã¿ãŠãã ãããããªãã¯äœåããªãã®é»è©±ã®èšèªãå€ããŸãããïŒ ããããäžåºŠããããã©ã«ãã®èšèªã§ããŒã«ããã ãã§ãã
ããŒãžããªããŒãããã«ã©ã€ãå€æŽãè¡ãããã«èšèªã®å€æŽãç£èŠãããšããŠãŒã¶ãŒã®åç¶æéäžã»ãšãã©äœ¿çšãããªããã®ã«å¯ŸããŠãããã©ãŒãã³ã¹ãå€§å¹ ã«äœäžããŸãã
æçµçã«ãç§ã«ãšã£ãŠã¯3ã€ã®ããšã«ãªããŸãã
@çé
éåæã§ç¿»èš³ããã§ããããŠãããAngularã¢ããªãèªã¿èŸŒãããšãã§ããŸãã
import(...)
ã䜿çšããŠapp.moduleãéåæã§ããŒãããæ¹æ³ã«ã€ããŠã¯ãäžèšã®ç§ã®ã³ã¡ã³ããåç
§ããŠãã ããã
å人çã«ã¯ããŠã£ãããã£ã¢ã䜿çšããŠãèªåãç¥ã£ãŠããæ ç»ã®ã¿ã€ãã«ãå¥ã®èšèªã«ã翻蚳ããããŠããããšãææ¡ããŠããŸãã
ãã®æ代ã§ã¯ããã€ãªã³ã¬ã«ãŸãã¯ããªãªã³ã¬ã«ã§ããããšã¯åœããåã®ããšã§ã¯ãããŸããïŒç±³åœå ãé€ããŠã害ã¯ãããŸããïŒã
ãŠãŒã¶ãŒã¯ãå®å šã«ãã£ãšããããèšèªãåãæ¿ããŠçããããšæããããããŸããã ãŠã£ãããã£ã¢ã®äŸã¯ããããæå¹ã«ããããšã®è¯å®çãªçµæã§ããããã©ãŒãã³ã¹ã®åç®ã§æ¥ã®ç®ãèŠãããã«ãä»ã®æœåšçãªçšéãçããåã«æå¶ããªããã°ãªããªãçç±ãããããŸããã
ocombeã®ngx-translateã§ããããããã©ãŒãã³ã¹ã®äœã翻蚳ãã®çããã«ãšã£ãŠã¯éåžžã«åªããäŸã§ããå¿ èŠããããæ¥åžžã®ãŠãŒã¶ãŒã«ãšã£ãŠã¯ååã«é«éã«å®è¡ãããŸããã
ç§ã¯å人çã«3ãåœèªã§ããã1ã€ã®èšèªã䜿çšããããšã«æ±ºããããŸããããã¹ãŠã®èšèªãç§ã«ãšã£ãŠçŸããã§ãã
ç§ã¯ããã«åæããããšã¯ã§ããŸããïŒ
èããŠã¿ãŠãã ãããããªãã¯äœåããªãã®é»è©±ã®èšèªãå€ããŸãããïŒ ããããäžåºŠããããã©ã«ãã®èšèªã§ããŒã«ããã ãã§ãã
èšäºã®ããŸããŸãªèšèªã¯å®éã«ã¯ç¬ç«ããèšäºã§ããããããŠã£ãããã£ã¢ã¯ããã®ææªã®äŸã§ãã éåžžããŸã£ããåããµã€ãã®ç°ãªãèšèªã¯å¿
èŠãããŸããã 4ãåœèªã§äœæ¥ããŠãã
ãŸããå®éã«ã©ã€ãã¹ã€ããã³ã°ãå¿
èŠãªå Žåã¯ã @ petebacondarwinãèšåããã«ã¹ã¿ã å€æãã€ãã®åé¿çããŸãã¯@ocombeã®æ°ããããŒã«ã®ããããã䜿çšã§ããŸãã
ããŠãããããã®è°è«ãããã®ã«æ¬åœã«æé©ãªå Žæã§ã¯ãªããšæããŸãã ç§ã¯ïŒãããŸã§ã®ãšãããã¹ãŠãéåžžã«åççã§ãããïŒåŠå®çãªè°è«ã«é¥ãã®ã§ã¯ãªãããšå¿é ããŠããŸãã è¿ãå°æ¥ãAngularãã¬ãŒã ã¯ãŒã¯ã¯ããã«äœ¿ããã©ã€ãèšèªåãæ¿ããœãªã¥ãŒã·ã§ã³ãæäŸããªãã®ã§ã¯ãªãããšå¿é ããŠããŸãã
ãã®åé¡ã®äŸ¡å€ã¯äžå·¡ãããšæããŸãã ãã®åé¡ã®èª¬æã«ãªã³ã¯ãããŠããæªè§£æ±ºã®åé¡ãšPRãhttps://github.com/angular/angular/milestone/101ã«ç§»åãããã®PRãéããŠããã¯ããŸãã
æ©èœãªã¯ãšã¹ãã®æ°ããåé¡ãããå Žåã¯ãæ°ããåé¡ãéããŠã¿ã°ãä»ããŠãã ããã
æãåèã«ãªãã³ã¡ã³ã
aotã¢ãŒãã§åçãã€ã³ãã£ã³ã°ãå®è¡ã§ããããã«ããããšæããŸãã ããŒããããã«ãããè¿œå ããå¿ èŠãããçç±ãããã¯ã¢ããããããã«ãç¹ã«2ã€ã®ãŠãŒã¹ã±ãŒã¹ããããŸãã
1ã€ç®ã¯ãèšèªããšã«åå¥ã®ã¢ããªã±ãŒã·ã§ã³ãå¿ èŠãšããªãåºæ¬çãªãŠãŒã¹ã±ãŒã¹ã§ãã ããã«ã¯ãã¢ããªã®å€éšã«ããçš®ã®ãªãã€ã¬ã¯ãããžãã¯ãå¿ èŠã§ããããµã€ããå®å šã«ãªããŒãããªãéããèšèªãåçã«å€æŽããããšã¯ã§ããŸããã
2ã€ç®ã¯ãcordovaã䜿çšããŠã¢ãã€ã«ã«ã¢ããªãåã蟌ãå Žåã§ãã ç§ã®ç¥ãéããããªãã®éžæã¯jitããããšã§ããã€ãŸãããµã€ãã®é床ãèœãšããããèšèªããšã«åå¥ã®ã¢ããªãäœæããããã¢ããªã«ãã¹ãŠã®èšèªãå«ãããããŸãïŒãã¡ããããã¯è¥å€§åããŸãïŒã ãããã¯ã©ããè¯ãéžæè¢ã§ã¯ãããŸããã Ionicã¯i18nã䜿çšããŠããªãããã§ããããããçç±ãªã®ããšæããŸãã