рдХреЛрдгреАрдп рдореЗрдВ рдмрд╣реБрднрд╛рд╖реА рдРрдкреНрд╕

рдЫрд╡рд┐


рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдЗрд╕ рдмрд╛рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЖрдк рдЕрдкрдиреА рдХреЛрдгреАрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдмрд╣реБрднрд╛рд╖реА рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рдХреИрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдПрдБ рд╣реИрдВред


Ngx- рдЕрдиреБрд╡рд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрдВрдж рдХрд░реЛ!


рдореИрдВ рдорд┐рд▓рдиреЗ рд╡рд╛рд▓реА рдЕрдзрд┐рдХрд╛рдВрд╢ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рдирд╣реАрдВ, рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдФрд░ рдХреЛрдгреАрдп рдХреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░рд┐рд▓реАрдЬ рд╕реЗ рдкрд╣рд▓реЗ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред


рдорд╛рдирдХ i18n рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ!


рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЬрд┐рддрдирд╛ рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИ, рдЙрд╕рд╕реЗ рдХрд╣реАрдВ рдЬреНрдпрд╛рджрд╛ рдЖрд╕рд╛рди рд╣реИред


рдФрд░ рдЗрд╕рд▓рд┐рдП, рдпрд╣рд╛рдБ рдПрдХ рдЫреЛрдЯрд╛ рдирд┐рд░реНрджреЗрд╢ рд╣реИ:


  • рдЯреЗрдореНрдкрд▓реЗрдЯ рддрддреНрд╡ рдореЗрдВ i18n рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝реЗрдВ
  • рддрддреНрд╡ i18n рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ- рддрддреНрд╡ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╕реНрд╡рдпрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
  • ICU рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
  • рдкрд╛рдЗрдк рдХреЗ рд▓рд┐рдП рд╡рд╛рдВрдЫрд┐рдд рд╕реНрдерд╛рди рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВ

рд╣рдо 5 рдорд┐рдирдЯ рдореЗрдВ рд╣реИрд▓реЛ-рд╡рд░реНрд▓реНрдб рдРрдк рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВ:


рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рд╢реАрд░реНрд╖рдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрд╡рдпрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВрдЧреЗред


<div i18n i18n-title title="">  {{name}}! </div> 

рд╣рдо рдЕрдкрдиреЗ рдЕрдиреБрд╡рд╛рджрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╡рд░рдг рднреА рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ


 <div i18n="   ">  {{name}}! </div> 

рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЧреНрд░рдВрдереЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 <span i18n="@@HiId">!</span> 

рд╣рдо рдПрдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:


 <span i18n="  |@@HiId">!</span> 

рд╣рдо рдЖрдИрд╕реАрдпреВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА:


 <span i18n>  { orders, plural, =0 {} =1 { } other {<b>{{orders}}</b>} } <span> 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ рдПрдХ рдирд┐рдпрдорд┐рдд рд╕реНрд╡рд┐рдЪ-рдХреЗрд╕ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рд╣реИрдВред


рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИ!


рдХреЛрдгреАрдп CLI рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ:


ng xi18n


рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ XLIFF рдкреНрд░рд╛рд░реВрдк рдореЗрдВ messages.xlf рдлрд╝рд╛рдЗрд▓ рдПрдХрддреНрд░ рдХрд░реЗрдЧрд╛ред рдпрд╣ рдЖрдЧреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред


рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ рдореИрд╕реЗрдЬ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВ редfr.xlf (рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рдлреНрд░реЗрдВрдЪ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдЪрд╛рд╣рддреЗ рд╣реИрдВ)ред


рд╣рдо рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рджреЗрддреЗ рд╣реИрдВ, рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рдпрд╣ рдкреНрд░рд╛рд░реВрдк рдмрд╣реБрдд рдЖрдо рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реА рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рд╣реИрдВ рддрд╛рдХрд┐ рдЕрдиреБрд╡рд╛рджрдХ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╣реЛред


рдЦреИрд░, рдЕрдм рд╣рдо angular.json configs рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:


 "configurations": { ... "fr": { "outputPath": "dist/my-project-fr/", //    "i18nFile": "src/locale/messages.fr.xlf", //    "i18nFormat": "xlf", //   "i18nLocale": "fr", //   ... } } 

рд╡рд╣ рд╕рдм рд╣реИ!


> ng serve - configuration=fr
> ng build - configuration=fr




рдЕрдм рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдЕрдВрджрд░ рд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
рдЫрд╡рд┐


рдпрд╣ рдЖрд░реЗрдЦ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЧрддрд┐рд╢реАрд▓рддрд╛ рдмрд╕ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдорд╛рдирдХ i18n рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реИред рдФрд░ рднрд╛рд╖рд╛ рдХреЗ рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдмрдВрдбрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред




рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдмрд╣реБрднрд╛рд╖рд╛рд╡рд╛рдж рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рдХреНрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЬреНрдпрд╛рджрд╛рддрд░ рдЕрдХреНрд╕рд░ рдпрд╣ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рд╣реИред рдмрд╕ рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рдкреВрдЫреЗрдВ, рдХреНрдпрд╛ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдХреНрд╕рд░ рднрд╛рд╖рд╛рдУрдВ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╣реИрдВ? рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХрд╛ рдЕрд░рдмреА рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдЖрдк рдбрдмреНрд▓реНрдпреВ 3 рд╕реА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рд╡рд┐рд╕реНрддреГрдд рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред




рдПрдХ рдХреЛрдгреАрдп рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди i18n рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд▓рд┐рдВрдХ рдирд╣реАрдВ рдбрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред




рдбрд╛рдпрдирд╛рдорд┐рдХреНрд╕ рдХреЗ рдкреНрд░реЗрдорд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЕрдЪреНрдЫреА рдЦрдмрд░ рд╣реИ, рд╕рд╛рде рдореЗрдВ рдЖрдЗрд╡реА рд░реИрдирдЯрд╛рдЗрдо рд╕рд░реНрд╡рд┐рд╕ рджрд┐рдЦрд╛рдИ рджреЗрдЧреАред


i18n рдФрд░ рдЖрдЗрд╡реА
рдЫрд╡рд┐


рддреЛ рдпрд╣ рдХреНрдпрд╛ рджреЗрдЧрд╛?


  • рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рд░ рдЬрдЧрд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛, Vue), рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЛрдгреАрдп рддрддреНрд╡реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ
  • рдЯреНрд░реА-shakeable
  • рдЖрд▓рд╕реА-рд▓реЛрдбрд┐рдВрдЧ рд╕рдорд░реНрдерди
  • рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди
  • рд╕рдВрдХрд▓рди рдХреЗ рдмрд┐рдирд╛ рдкреВрд░реНрдг рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛



рдЦреИрд░, рдЪреВрдВрдХрд┐ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрднреА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЬрд▓реНрджреА рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдмрд╣реБрднрд╛рд╖реА рдореЛрдб рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдмрдирд╛рдИ рд╣реИ:


 > npx ngx-translate-all --format ngx-translate | i18n --in ru --out en,fr --outPath src/assets/i18n 

рдпрд╣ 2 рдкреНрд░рд╛рд░реВрдк рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рджреЛрдиреЛрдВ рдорд╛рдирдХ i18n рдФрд░ ngx-Translate-allред
рдорд╛рдирдХ i18n рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░реЗрдЧреА рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рд╡рд░рдг рдЬреЛрдбрд╝ рджреЗрдЧреАред


 --format i18n <div i18n="AppModule.AppComponent"> ! </div> 

рдПрдирдПрдХреНрд╕рдПрдХреНрд╕-рдЯреНрд░рд╛рдВрд╕рд▓реЗрд╢рди рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЪрд░ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдЧрд╛, рдкрд╛рдЗрдк рдбрд╛рд▓ рджреЗрдЧрд╛, рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдЬрд╕реНрд╕рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдЧрд╛ред


 --format ngx-translate <div> {{AppModule.AppComponent[0] | translate}} <div> 



рдФрд░ рдореИрдВ рдпрд╣ рднреА рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдорд╛рдирдХ i18n рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ, рдХрдо рд╕реЗ рдХрдо рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдореЗрдВред рдФрд░ рдЬрд▓реНрдж рд╣реА рдореИрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реВрдВрдЧрд╛ рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдПрдирдПрдХреНрд╕рдПрдХреНрд╕-рдЯреНрд░рд╛рдВрд╕рд▓реЗрдЯ рд╕реЗ i18n рддрдХ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджреЗрдЧрд╛


 > npx ngx-translate-migrate ngx-translate -> i18n 

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдореЗрд░реЗ рдЯреНрд╡рд┐рдЯрд░, рдЬреАрдердм рдпрд╛ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЪреИрдирд▓ рдХреЛ рдХреЛрдгреАрдп рдХреЛ рд╕рдорд░реНрдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


https://twitter.com/irustm
https://t.me/ngFanatic
https://github.com/irustm


рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рд▓рд╛рдЗрд╡ рд╡реАрдбрд┐рдпреЛ рдкреЙрдбрдХрд╛рд╕реНрдЯ ngRuAir рдореЗрдВ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ:



7 рдЕрдкреНрд░реИрд▓, 2019 20.00 рдорд╛рд╕реНрдХреЛ рд╕рдордп
рд╡рд┐рд╖рдп: рдХреЛрдгреАрдп рдкрд░ рдмрд╣реБрднрд╛рд╖реА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рд╡рд┐рдХрд╛рд╕ред

Source: https://habr.com/ru/post/hi446402/


All Articles