
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдЗрд╕ рдмрд╛рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЖрдк рдЕрдкрдиреА рдХреЛрдгреАрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдмрд╣реБрднрд╛рд╖реА рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рдХреИрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдПрдБ рд╣реИрдВред
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
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдореЗрд░реЗ рдЯреНрд╡рд┐рдЯрд░, рдЬреАрдердм рдпрд╛ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЪреИрдирд▓ рдХреЛ рдХреЛрдгреАрдп рдХреЛ рд╕рдорд░реНрдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рд▓рд╛рдЗрд╡ рд╡реАрдбрд┐рдпреЛ рдкреЙрдбрдХрд╛рд╕реНрдЯ ngRuAir рдореЗрдВ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ: