рдкрдХрд╛рдиреЗ рдХреА рд╡рд┐рдзрд┐ i18n рдЖрдзрд╛рд░ - рдмреИрдмреЗрд▓, рдХреЙрдлреА рдХреЗ рд╕рд╛рде рдЬрд╕рди рдФрд░ рдЖрдкрдХреЗ рд╕реНрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдПрдЪрдмреАрдПрд╕ рдХреЗ рд╕рд╛рде рдЕрдиреБрджрд╛рди

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

рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдЙрд╕реЗ рднреА рдЬрд╕рди рд╕реЗ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рдереАред
рдЗрд╕ рддрд░рд╣ рдкрд╛рдЗрдмреЗрд▓-рдЬреЛрдВрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдпрд╛ред
рдкрд┐рдердмреЗрд▓-рдЬреЛрдВрд╕ рдХреЛ рдпрд╛ рддреЛ рдЧреАрдердм рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ

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

рдпрд╣ рдкреЛрд╕реНрдЯ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдХрд┐ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреЗ рд▓рд┐рдП рдкреВрд░рд╛ рд╕реЗрдЯ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рд╕реНрдерд┐рд░ рд╕реНрдерд╛рди рдирд╣реАрдВ рд╣реИред
рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
(рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреЛрдИ рднреА рд╡рд╕реНрддреБ рдЕрдирд┐рд╡рд╛рд░реНрдп рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╕рдм рдХрд┐рд╕реА рднреА рдЖрд╡реЗрджрди рдХреЛ рдХреЗрд╡рд▓ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИ)

- рдХреЛрд▓рд╛рд╣рд▓ред рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯред
- рдЧреНрд░рдВрдЯред рдХрд╛рд░реНрдп рдкреНрд░рдмрдВрдзрдХ,
- рдХреЙрдлрд╝реАрд╕реНрдХреНрд░рд┐рдкреНрдЯред рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рди рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рд╕рднреА рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдХреЙрдлреА рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЛ рдЗрд╕рд╕реЗ рд▓рд╛рдЗрдиреЗрдВ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
- рд╣реИрдВрдбрд▓рдмрд╛рд░ - рдЯреЗрдореНрдкреНрд▓реЗрдЯ
- рдЬрд╕рди - рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдЯреЛрд░реЗрдЬ
- рдЬреЗрдбред js рдХреЗ рд▓рд┐рдП рдЧреЗрдЯрдЯреЗрдХреНрд╕реНрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ
- po2jsonред рдЬрдж рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд .json рдкреНрд░рд╛рд░реВрдк рдореЗрдВ .po рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрд┐рддрд╛



рдЧреЗрдЯрдЯреЗрдХреНрд╕реНрдЯ рдФрд░ рдорд┐рдердХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛


рдЧреЗрдЯрдЯреЗрдХреНрд╕реНрдЯ рд╢реБрд░реВ рдореЗрдВ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИ, рдЖрдЬ рдореИрдВ рдЧреЗрдЯрдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдЖрдо рддреМрд░ рдкрд░ рд╕реНрд╡реАрдХреГрдд рдкреНрд░рд╛рд░реВрдк рднреА рдХрд╣реВрдВрдЧрд╛ред (рдХреЗрд╡рд▓ рдПрдХ рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рд╣реЛрдиреЗ рдХреА рдирд╣реАрдВ)
рдиреНрдпреВрдирддрдо рд╕рд╛рд░ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдРрд╕реА рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ рдЬреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЧреЗрдЯрдЯреЗрдХреНрд╕реНрдЯ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдЧреБрдЬрд░рддреА рд╣реИрдВ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рд▓рд╛рдЗрди рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИрдВ, рдЬрдмрдХрд┐ рдмрд╣реБрд╡рдЪрди рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛ + рд╕рдВрджрд░реНрдн рдФрд░ рдбреЛрдореЗрди рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред
рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдпрд╣ рддрд╛рд░ рд╣реИ, рд╡реЗ рдЪрд╛рдмрд┐рдпрд╛рдБ рд╣реИрдВ, рди рдХрд┐ рдирд┐рд░рдВрддрд░ USER_WELCOME_MESSAGE рдХрд╣реАрдВ рдкрд╛рда рдореЗрдВ рдмрджрд▓ рд░рд╣реЗ рд╣реИрдВред

рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдПрдХ рд╕рдВрджрд░реНрдн рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдФрд░ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдмреЗрдмреЗрд▓ рдкреНрд▓рдЧ-рдЗрди рдореЗрдВ рдЗрд╕реЗ рдЕрднреА рддрдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ
рдмрд╛рдж рдореЗрдВ рдбреЛрдорд┐рдирд┐рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж рдорд┐рд▓реЗрдВрдЧреЗред
рд▓реЗрдХрд┐рди ngettext рдХрдИ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрд░реВрд░реА рдЪреАрдЬ рд╣реИ, рдЕрдЧрд░ рд╕рднреА рдирд╣реАрдВред
рдФрд░ рдлрд┐рд░ рдорд┐рдердХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред

 рд╢реВрдиреНрдп рд╕реЗрдмред  рд╢реВрдиреНрдп рд╕реЗрдм
 рдПрдХ рд╕реЗрдмред  рдПрдХ рд╕реЗрдм
 рджреЛ рд╕реЗрдмред  рджреЛ рд╕реЗрдм
 рдкрд╛рдБрдЪ рд╕реЗрдмред  рдкрд╛рдБрдЪ рд╕реЗрдм


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

рдирд┐рдпрдореЛрдВ рдХреЛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдФрд░ рдмрдмреИрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реА рд░реЗрдЦрд╛ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрдВрдЧреНрд░реЗрдЬреА рдХреЗ рд▓рд┐рдП рд╣реИ:
"Plural-Forms: nplurals=2; plural=(n != 1)\n" 


рдФрд░ рдпрд╣ рд░реВрд╕реА рдХреЗ рд▓рд┐рдП рд╣реИ:
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" 

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

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

рдХреНрдпреЛрдВ? рдпрд╣ рд╕рдм рд╕реЗрдм рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред
рдмрд╣реБрд╡рдЪрди рд╣рдореЗрд╢рд╛ рдПрдХрд╡рдЪрди рдореЗрдВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдПрдХрд╡рдЪрди рд╣рдореЗрд╢рд╛ рдЗрдХрд╛рдИ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ рдЕрдВрдЧреНрд░реЗрдЬреА рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рд░реВрд╕реА рдирд╣реАрдВ рд╣реИред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ ngettext, рдХреНрдпреЛрдВрдХрд┐ рдХреБрдВрдЬреА рдмрд┐рд▓реНрдХреБрд▓ рдЕрдВрдЧреНрд░реЗрдЬреА рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, ngettext рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИ - рдПрдХрд╡рдЪрди рдФрд░ рдмрд╣реБрд╡рдЪрдиред рдФрд░ рдмрд╣реБрд╡рдЪрди рдХреА рдПрдХ рд╕рд░рдгреА рдирд╣реАрдВред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рдЖрдк рдЕрднреА рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд░реВрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо рдЕрдиреБрд╡рд╛рдж рдлрд╝рд╛рдЗрд▓ рд░реВрд╕реА-рд░реВрд╕реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рд▓рд╛рдЗрди "рдЖрдкрдХреЗ рдкрд╛рд╕% s рд╕реЗрдм" рд╣реИ рдЬреЛ рд╕рд╣реА рдЧрд┐рд░рд╛рд╡рдЯ рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рдВ, рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд▓реЗрдХрд┐рди рдпрд╣ рдЯреЗрдврд╝рд╛ рд╣реИред
рдмрджрд▓рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреЗрд╡рд▓ рдХреБрдВрдЬреА рдмрджрд▓реА рдЧрдИ рд╣реИ, рд░реВрд╕реА рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рд░реВрд╕реА рднрд╛рд╖рд╛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдореВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдВрдЧреНрд░реЗрдЬреА рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде ngettext рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕рдВрдЧрдд рд╣реИред

рд╡реИрд╕реЗ, рдЙрд╕реА рд╕рдордп рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ .po рдлрд╛рдЗрд▓реЗрдВ рдЕрдВрдЧреНрд░реЗрдЬреА рдХреЗ рд▓рд┐рдП рдФрд░ рд░реВрд╕реА рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рджрд┐рдЦрддреА рд╣реИрдВ
 msgid "You have %(apples_count)d apple" msgid_plural "You have %(apples_count)d apples" msgstr[0] "  %(apples_count)d " msgstr[1] "  %(apples_count)d " msgstr[2] "  %(apples_count)d " 


 msgid "You have %(apples_count)d apple" msgid_plural "You have %(apples_count)d apples" msgstr[0] "" msgstr[1] "" 


рдпрд╣реА рд╣реИ, рдкрд░рд┐рдгрд╛рдо рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рднрд╛рд╖рд╛ рд╡рд┐рдиреНрдпрд╛рд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред рд╢рд╛рдпрдж рдПрдХ рднрд╛рд╖рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рджрд░реНрдЬрди рдмрд╣реБрд╡рдЪрди рд░реВрдк рд╣реИрдВ ...

рдареАрдХ рд╣реИ, рддреЛ рдореИрдВ рдХрд╣рд╛рдБ рд╕реЗ рд╢реБрд░реВ рдХрд░реВрдБ?


рдЬрд┐рди рд╕рднреА рдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА 3 рд╕реЗрдм рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

рдкрд╛рдЗрдк рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ

рдХрдард┐рди рд╣рд┐рд╕реНрд╕рд╛ рдкреАрдЫреЗ рд╣реИред

рдпрд╣ рдмрдиреА рд╣реБрдИ рд╣реИ:
- рдХреЛрдб рдореЗрдВ рд╕рднреА рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдЧреЗрдЯрдЯреЗрдХреНрд╕реНрдЯ рдХреЙрд▓ рдореЗрдВ рдмрджрд▓реЗрдВ
- рдХреЛрдб рдкрд░ рдмреЗрдмрд▓ рд╕реЗрдЯ рдХрд░реЗрдВ
- .pot рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рдВрдЫрд┐рдд рднрд╛рд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк .po рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВред

рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХреНрдпрд╛ рд╣реИ?



рдпрд╣ рд╕рд╡рд╛рд▓ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ:

рд╕рд░рд▓ рднрд╛рдЧ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдФрд░ рдХреЛрдб рд╣реИред
Django рдФрд░ рдлреНрд▓рд╛рд╕реНрдХ - рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рд╕реЗ рдПрдХреНрд╕рдЯреНрд░реИрдХреНрдЯрд░реНрд╕ рд╣реИрдВ
рдкрд╛рдпрдерди рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореВрд▓ рд░реВрдк рд╕реЗ рдмреЗрдмрд▓ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ
рд╣реИрдВрдбрд▓рдмрд╛рд░ рдФрд░ рдЬрд╕рди - рдХреЛ рдкреЛрд╕реНрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд▓рд┐рдВрдХ рдмрдирд╛рдирд╛ рдерд╛ред
рдХреЙрдлрд╝реАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП - рдЖрдЧреЗ рдиреБрд╕реНрдЦрд╛
рдмрд╛рдХреА рд╕рдм рдХреЗ рд▓рд┐рдП - рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЧреВрдЧрд▓

рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рднрд╛рдЧ рд╕рд░рд▓ рд╣реИ - рдХреЛрдб, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рднреА рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдХреЙрд▓ рдореЗрдВ рд▓рд┐рдкрдЯреЗ / рдирдЧреЗрдЯрдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рдЙрд╕ рдкреНрд░рд╛рд░реВрдк рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд▓рдкреЗрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдПрдХреНрд╕рдЯреНрд░реИрдХреНрдЯрд░реНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╡реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рднреА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рд╣реИ:
 pybabel extract -F babel.cfg -o messages.pot -k "trans" -k "ntrans:1,2" -k "__" . 

рдЯреНрд░рд╛рдВрд╕рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдПрдирдЯреНрд░рд╛рдВрд╕ рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЕрдЬрдЧрд░ рдХреЗ рд▓рд┐рдП __, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЙрд╕ рдкрд░ рдмрд╛рдж рдореЗрдВ рдЕрдзрд┐рдХ)

рд╡рд╣ рд╕рдм рд╣реИ
рдкреНрд░рд┐рдВрдЯ ("рд╕реЗрдм") рдХреЛ рдкреНрд░рд┐рдВрдЯ (ngettext ("рд╕реЗрдм") рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рдФрд░ рд╕рдм
рдкреНрд░рд┐рдВрдЯ ("рдореЗрд░реЗ рдкрд╛рд╕% s рд╕реЗрдм рд╣реИрдВ") рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (ngettext ("рдореЗрд░реЗ рдкрд╛рд╕% s рд╕реЗрдм рд╣реИрдВ", "рдореЗрд░реЗ рдкрд╛рд╕% s рд╕реЗрдм рд╣реИрдВ", num_of_apples)% num_of_apples)

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

рдЕрдЬрдЧрд░:
 print(gettext("I have an apple!")) print(ngettext( "I have %(apples_count)d apple", "I have %(apples_count)d apples", num_of_apples ).format(apples_count=num_of_apples)) 

рдорд╛рдирдХ рдЧреЗрдЯрдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлреНрд▓рд╛рд╕реНрдХ рдФрд░ django рдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд░реИрдкрд░ рд╣реИрдВ

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ:
 console.log(i18n.trans("I have an apple!")) console.log(i18n.ntrans("I have %(apples_count)d apple","I have %(apples_count)d apples",num_of_apples,{apples_count:num_of_apples})); 

рдпрд╣рд╛рдБ рд╕реЗ рдЬреЗрдб рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрдлреА рдкреНрд░реЙрдХреНрд╕рд┐рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
github.com/tigrawap/pybabel-hbs/blob/master/client_side_usage/i18n.coffee
рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЬреЗрдб рд╕реНрдкреНрд░рд┐рдВрдЯрдл рдХреЗ рдХрд╛рд░рдг рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ


Coffeescript:
 console.log i18n.trans "I have an apple!" console.log i18n.ntrans "I have %(apples_count)d apple", "I have %(apples_count)d apples", num_of_apples, apples_count:num_of_apples 


Hadlebars:
 {{#trans}} I have an apple! {{/trans}} {{# ntrans num_of_apples apples_count=num_of_apples}} I have %(apples_count)d apple {{else}} I have %(apples_count)d apples {{/ntrans}} 


JSON рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдЯреЛрд░:
 { "anykey":"I have an apple!", "another_any_key":{ "type":"gettext_string", "funcname":"ngettext", "content":"I have %(apples_count)d apples", "alt_content":"I have %(apples_count)d apples" } } 

рдСрдлрдЯреЙрдкрд┐рдХ: рдкрд╛рдЗрдмреЗрд▓-рдЬреЛрдВрд╕ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЗрд╕ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╣рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рдерд╛ рдХрд┐ num_of_apples рд╣рд░ рдХреЙрд▓ рдХреЛ рджреЛ рдмрд╛рд░ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдмрд╛рд░ рдЗрд╕реЗ рдПрдирдЧреЗрдЯреЗрдХреНрд╕ рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдпрд╣ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдЗрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдЕрдиреНрдп рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рдеред

- рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛ - рдпрд╣ рд╕рд░рд▓ рднрд╛рдЧ рд╣реИ, рдореМрдЬреВрджрд╛ рдкрд╛рда рдХреЛ рд▓рдкреЗрдЯреЗрдВред
рдЖрдЧреЗ рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

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

2)
рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдирд┐рд░рдВрддрд░ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреЛ рдХрд╛рдлреА рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реИрдВ?
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдЧреАрддреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ - рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рджреЗ рджреВрдВрдЧрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдбрд╛рдпрдирд╛рдорд┐рдХреНрд╕ рд╣реИрдВ, рд╡реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ - рд╢рд╛рдпрдж рд╣реА рдХрднреА рдмрджрд▓рддреЗ рд╕реНрдЯреЗрдЯрд┐рдХреНрд╕, рдЬреЛ рдмрд╛рд╣рд░ рдлрд╛рдбрд╝рдХрд░ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рднреЗрдЬрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ pybabel-json рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИред
рдпрд╣ рд╕рдорд╛рдзрд╛рди рдХрд┐рд╕реА рдЕрдиреНрдп рдЕрдиреБрд╡рд╛рдж рд╕рдорд╕реНрдпрд╛ рдХрд╛ рднреА рд╕рдорд╛рдзрд╛рди рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдХрд┐рд╕реА рддреГрддреАрдп-рдкрдХреНрд╖ рд╕рд░реНрд╡рд░ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ред рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕реНрдерд┐рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдерд┐рд░ рд╣реИ рдХрд┐ рд╣рдо рдирд┐рдпрдВрддреНрд░рдг рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рд▓рдкреЗрдЯрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЖрдкрдХреЛ рдмрд╕ рдПрдХ .json рдлрд╛рдЗрд▓ рдмрдирд╛рдиреА рд╣реИ
errors.json
рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде
 { "from_F_service": [ "Connection error", "Access denied" ], "from_T_service":[ "Oops, it is too long" ] } 


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

рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде, рд╕реНрдерд┐рддрд┐ рд╕рдорд╛рди рд╣реИ, рдирд┐рд░реНрдорд╛рдг-рдзрдХреНрдХрд╛-рддреИрдирд╛рддреА рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ, рдЬреЛ рдХреБрдЫ рднреА (рдЖрдЦрд┐рд░рдХрд╛рд░, рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рд╣реИ)? рдЙрд╕реА рд╕реНрддрд░ рдкрд░ рдЬрд╣рд╛рдВ рд╣рд░ рдЪреАрдЬ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЖрдЬреНрдЮрд╛ рд╣реЛрдЧреА рдФрд░ рдмрд╛рдмреЗрд▓ рдХреЛ рдЗрди рдХрдорд╛рдВрдбреЛрдВ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдХреЛ рдирд┐рдХрд╛рд▓реЗрдЧрд╛ рдФрд░ рд╕рдорд╛рди рдЬрд╕рди рдПрдХрддреНрд░ рдХрд░реЗрдЧрд╛, рдЯреНрд░реИрдХ рджреНрд╡рд╛рд░рд╛ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдмреЗрдмрд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░реЗрдЧрд╛ред
рдмреЗрд╢рдХ - рдРрд╕реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ .gitignore рдпрд╛ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рдПрдирд╛рд▓реЙрдЧ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рд╕реНрд░реЛрдд рдирд┐рдпрдВрддреНрд░рдг рдЧрд┐рд░ рди рдЬрд╛рдП

рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рддрд╛рд░ рдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧреЗрдЯрдЯреЗрдХреНрд╕реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП
рдпрд╣реА рд╣реИ, рдпрджрд┐ рдпрд╣ рдЕрдЬрдЧрд░ рдореЗрдВ рд╣реИ, рддреЛ рдкрд╣рд▓реЗ рджрд┐рдП рдЧрдП рдЬреЗрдПрд╕ рдпрд╛ рдкреНрд░реЙрдХреНрд╕реА рддрд░реАрдХреЛрдВ рдореЗрдВ рдЧреЗрдЯрдЯреЗрдХреНрд╕реНрдЯ () рд╣реИ

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

 class SomeView(MainView): title=gettext("This view title") 


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

рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдореИрдВ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реВрдВ
рд╕рд╣реА рдЬрдЧрд╣ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рд╣реИ, рди рдХрд┐ рдХреНрд▓рд╛рд╕
рдпрд╛рдиреА
 def __(string,*k,**kwargs): return string class MainView(SomeParent): def __init__(self): #.... self.title=gettext(self._title) #.... class SomeView(MainView): _title=__("This view title") 


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

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

рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЗрд╕рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реИ, рди рдХрд┐ рдЙрд╕ рд╕рдордп рдЬрдм рдХрдХреНрд╖рд╛ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрд╡рд╛рдж рдХреА рджрд┐рд╢рд╛ рдХреА рд╕рднреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдореИрдВрдиреЗ рдЬрд╛рди рд▓рд┐рдпрд╛ рд╣реИ, рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдпрд╣ рд╕рдм рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред

рд╕рдм рдХреБрдЫ рдПрдХ рд╕рд╛рде рдЧреЛрдВрдж



рдЕрдм рдЖрдк рдпрд╣ рд╕рдм рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреБрдЫ рд╕рд░рд▓ рдХрджрдо рд╣реИрдВ:
0) рдореВрд▓ рд▓рд╛рдЗрдиреЛрдВ рдХреА рдПрдХ рдЦрд╛рд▓реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдВ, рддрд╛рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдкрд░ рд╢рдкрде рди рд▓реЗрдВ
 touch messages.pot 

1) рд▓рдХреНрд╖реНрдп рднрд╛рд╖рд╛рдУрдВ рдХреА .po рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдПрдВ рдпрд╣ 1 рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред .po рдлрд╛рдЗрд▓реЗрдВ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд▓рд╛рдЗрдиреЗрдВ рдФрд░ рдЙрди рджреЛрдиреЛрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рд╡рд╛рд▓реА рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВред
 pybabel init -i messages.pot -d path/i18n -l es #   .po      path/i18n/es (   i18n  ) #   ,   : (   ,       echo?, echo   ) echo {es,en,fr,de,ja} | xargs -n1 pybabel init -i messages.pot -d path/i18n -l 


2) .pot рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ / рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ - рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдореБрдЦреНрдп рднрдВрдбрд╛рд░ред рдЗрд╕реЗ рдмрд┐рд▓реНрдб рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рддрдм рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рдирдИред
 python/node/your_language update_translation_jsons #      pybabel extract -F babel.cfg -o messages.pot -k "trans" -k "ntrans:1,2" -k "__" . #    # trans -    , ntrans -  # __  ""    # babel.cfg -  babel-     pybabel update -i messages.pot -d path/i18n/ # .po    , 


рдпрд╣рд╛рдБ рдпрд╣ рдПрдХ babel.cfg рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдпрд╣ рдПрдХ рдореИрдкрд┐рдВрдЧ рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдФрд░ рдХрд┐рди рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рддрд╛рд░ рдирд┐рдХрд╛рд▓рдиреЗ рд╣реИрдВ:
 [python: path/backend/notifier.py] [hbs: path/static/**.hbs] [json: path/static/i18n/src/**.json] [javascript: path/static/**.coffee_js] encoding = utf-8 


3) .json рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП po2json рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рднреА .po рдлрд╝рд╛рдЗрд▓реЗрдВ рдЪрд▓рд╛рдПрдБ, рдЬрд┐рд╕реЗ рдЬреЗрдб рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдЧрд╛ред
рдпрд╣ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЬреЛ рдХреБрдЫ рдЖрдк рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрд╕реЗ рдЬреАрдЖрдИрдЯреА рдореЗрдВ рдХрд░рдиреЗ рджреЗрдВ, рд╡реЗ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд╣реИрдВред

рд╕рднреА .po рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХреИрд╕реЗ рдЦрд┐рд▓рд╛рдПрдВ рдФрд░ рдХрд╣рд╛рдВ рдбрд╛рд▓реЗрдВ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЕрдВрддрд░рд╛рддреНрдорд╛ рдХреА рдЖрд╡рд╛рдЬ рдкрд░ рд╣реИред
рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдмрд╛рдХреА рдмрд┐рд▓реНрдб рдХреА рддрд░рд╣ рдЧреНрд░рдВрдЯ рдореЗрдВ рдЪрд▓рд╛рддрд╛ рд╣реВрдВред
grunt-po2json рдЬреЛ рдЧрд┐рдЯрд╣рдм рдкрд░ рд╣реИ рдФрд░ рдЕрдиреБрджрд╛рди рднрдВрдбрд╛рд░ рдореЗрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд╛рдо рдмрджрд▓рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдЬрдм рд╕рднреА рдЕрдВрддрд┐рдо .json рдлрд╛рдЗрд▓реЗрдВ рдПрдХ рд╣реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЬрд╛рддреА рд╣реИрдВ, рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рддрдп рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕реЗ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдорд╛рдорд▓рд╛ рдкреБрд▓ рдЕрдиреБрд░реЛрдз ...

рдмреЗрд╢рдХ, рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ po2json рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж ( npm рд╕реНрдерд╛рдкрд┐рдд po2json ) рдХреБрдЫ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рдорд╛рди рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
 echo {es,en,fr,de,ja} | xargs -n1 -I {} po2json /path/i18n/{}/LC_MESSAGES/messages.pot /path/to/build/i18n/{}.json 


рд╡рд┐рдЪрд╛рд░ рдзрд╛рд░рд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реНрдердХ рд╣реИ

рдкреЛрд╕реНрдЯ рдХреЗ рджреМрд░рд╛рди рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрдИ рдмрд╛рд░ "рдмрд╛рдж рдореЗрдВ рдЙрд╕ рдкрд░ рдЕрдзрд┐рдХ" рдХрд╛ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЙрдкрдпреБрдХреНрдд рдЬрдЧрд╣ рдирд╣реАрдВ рдереАред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
рдХреЙрдлрд╝реАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЕрдкрдирд╛ рдПрдХреНрд╕рдЯреНрд░реИрдХреНрдЯрд░ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдмрдирд╛рддреЗ рд╕рдордп, рдХреЙрдлрд╝реАрд╕рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд (рдпрд╛ рдЕрдиреБрд╡рд╛рджрд┐рдд) рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХреЗ рдмрд╛рдж рдХреЛрдбрд╛рдВрддрд░рдг .js рддрд╛рд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдереЛрдбрд╝рд╛ рдЧрд▓рдд рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдХреЙрдлреА рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЖрдЧреЗ рдХреЙрдлреА_рдЬреИрд╕ рдлрд╝рд╛рдЗрд▓ рдирд┐рд╣рд┐рдд рд╣реИ, рдЬреЛ рд╕рдВрдкрд╛рджрди рдХреЗ рд╕рдордп рдЧреНрд░рдиреНрдЯ рд╡реЙрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдИ рдЧрдИ рд╣реИ (рдФрд░ рд╕реНрдереИрддрд┐рдХ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдкреЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╖рдп рд╣реИ :)), рдпреЗ рдлрд╛рдЗрд▓реЗрдВ рдЧреАрддрд╛ рдХреЗ рдмрд╛рд╣рд░ рдЦреБрдж рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣реЛрддреА рд╣реИрдВред рдпрд╣рд╛рдВ рдЙрдирд╕реЗ рд▓рд╛рдЗрдиреЗрдВ рдЦреАрдВрдЪреА рдЧрдИ рд╣реИрдВ рдФрд░ рдирд┐рдХрд╛рд▓реА рдЧрдИ рд╣реИрдВ

- рдЗрд╕рдореЗрдВ рдбреЛрдореЗрди рдХрд╛ рднреА рдЬрд┐рдХреНрд░ рдерд╛ред
рдбреЛрдореЗрди рдЕрдВрддрддрдГ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╛рдЗрд▓реЗрдВ, рдореИрд╕реЗрдЬ.рдкреЙрдЯ / рдореИрд╕реЗрдЬ.рдкреЛ = рдбреЛрдореЗрди рд╕рдВрджреЗрд╢ рд╣реИрдВ
рдЖрдк рдХрдИ рдбреЛрдореЗрди рдирд╛рдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рднреА рдбреЛрдореЗрди рдирд╛рдореЛрдВ рдХреЛ рдПрдХ рдЬреЗрдб рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдкрд░ рдмрд╛рдБрдз рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ Jed Instantiaries рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЙрди рдкрд░ рд░реЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╣реЗрд▓реНрдкрд░реНрд╕ рд╣реИрдВрдбрд▓рдмрд╛рд░реНрд╕ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд░реИрдкрд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ... рдореБрдЭреЗ рдРрд╕реА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА, рд▓реЗрдХрд┐рди рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдХреБрдЫ рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдирд╣реАрдВ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ :)

- рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ рдмреНрд▓реЙрдХ рдореЗрдВ рдЯреЗрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рдлреБрдЯрдиреЛрдЯ
рдпрджрд┐ рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреБрдЫ рдФрд░ рд╕реБрдВрджрд░ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ "рдЖрдкрдХреЗ рдкрд╛рд╕ 1 рд╕реЗрдм", "рдЖрдкрдХреЗ рдкрд╛рд╕ 7 рд╕реЗрдм рд╣реИрдВ", рддреЛ рдореБрдЦреНрдп рднрд╛рд╖рд╛ рдЕрдВрдЧреНрд░реЗрдЬреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдпрд╣ рд╕рдордЭрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдирдЧреЗрдЯреЗрдХреНрд╕ рдХреЙрд▓ рдореЗрдВ "рдЖрдкрдХреЗ рдкрд╛рд╕% (apples_count) d рд╕реЗрдм" рд▓рд┐рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рди рдХрд┐ "рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕реЗрдм рд╣реИ"
рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдФрд░ 21 рд╡реЗрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдкрд╣рд▓реЗ рд░реВрдк рдореЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП - рдЕрд░реНрдерд╛рдд, "рдЖрдкрдХреЗ рдкрд╛рд╕% d рд╕реЗрдм рд╣реИ"

- рдПрдХ рдореБрджреНрджреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЕрднреА рддрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕реНрддрд░ рдкрд░ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ:
рдЬреЗрдм рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдирд╣реАрдВ рдПрдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдмреИрдмрд▓ рдПрдХ "рдЦрд╛рд▓реА рд▓рд╛рдЗрди" (рдПрдХ .po рдлрд╝рд╛рдЗрд▓ рд╡рд┐рдиреНрдпрд╛рд╕ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдХрд┐рд╕ рднрд╛рд╖рд╛ рдХреА рд╣реИ рдФрд░ рдХреМрди рд╕реА рдмрд╣реБрд╡рдЪрди рд░реЗрдЦрд╛рдПрдВ рд╣реИрдВ)ред
рдЬреИрд▓ рдХреЛ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдмрд╣реБрд╡рдЪрди рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрдЧрд╛, рдЬрдмрдХрд┐ рдмреЗрдмрд▓ рдмрд╣реБрд╡рдЪрди-рд░реВрдкреЛрдВ рдХреЛ рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИ
рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдпрд╛ рддреЛ рдмреЗрдмрд▓ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ, рдпрд╛ рдЬреЗрдб рдХреЗ рдЗрдирдкреБрдЯ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдпрд╛ рдЙрдирдХреЗ рдмреАрдЪред
рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рджреЛрдиреЛрдВ рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рджреЗрдЦреЗрдВред

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

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


All Articles