Gatsby: Gatsby . рдХреЗ рд╕рд╛рде рд╡реЗрдмрд╕рд╛рдЗрдЯреЛрдВ рдХрд╛ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдЬреЛрдбрд╝реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 4 рдлрд╝рд░ре░ 2018  ┬╖  74рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: gatsbyjs/gatsby

рдПрдХ рдЕрдиреНрдп рдореБрджреНрджреЗ рдкрд░ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдЦрдХрд░, рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЦреЛрд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

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

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╣реЗрд▓реЛ рджреЛрд╕реНрддреЛрдВ, рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ

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

рдбреЗрдореЛ: https://gatsby-starter-default-intl.netlify.com

  • рдЖрдЙрдЯ рдСрдлрд╝ рдмреЙрдХреНрд╕ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг-рдврд╛рдВрдЪрд╛ react-intl рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд

  • рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкрд╕рдВрджреАрджрд╛ рднрд╛рд╖рд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ

  • рдПрдХрд▓ рдкреГрд╖реНрда рдШрдЯрдХ рдореЗрдВ рдмрд╣реБ-рднрд╛рд╖рд╛ url рдорд╛рд░реНрдЧреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдкрдХреЛ pages/en/index.js рдпрд╛ pages/ko/index.js рдЬреИрд╕реЗ рдЕрд▓рдЧ рдкреГрд╖реНрда рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

  • рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдореЗрдВ рд╕реЗ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдиреЗ рдКрдкрд░ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ, рдЕрдм рдпрд╣ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдХреЗ рджреМрд░рд╛рди рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рднрд╛рд╖рд╛ рдХреЛ рдмрдВрдбрд▓ рдХрд░рддрд╛ рд╣реИред

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

рд╕рднреА 74 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

I18next рдХреЛ GatsbyJS рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ i18next "рд╕реНрдерд┐рд░ рддрд░реАрдХрд╛" рд╣реИред

рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдпреЗ рдкреНрд░рд╢реНрди/рдЖрд░рдХреНрд╖рдг рдереЗ:
https://twitter.com/semdubois/status/930389055388508160

https://github.com/angeloocana/gatsby-plugin-i18n рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдХрдИ рд╕реАрдорд╛рдПрдБ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЕрдзрд┐рдХ рдЧрддрд┐рд╡рд┐рдзрд┐/рдзреНрдпрд╛рди рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред рдЗрд╕реЗ рдЧреИрдЯреНрд╕рдмреА рд░реЗрдкреЛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓ рд╕рдХрддреА рд╣реИред рдореБрдЭреЗ рднреА рдПрдХ рдЙрдЪрд┐рдд рд╕рдореЗрдХрд┐рдд рд╕рдорд╛рдзрд╛рди рдкрд╕рдВрдж рдЖрдПрдЧрд╛ред

рдореИрдВ рдЬреЗрдПрд╕ рд▓рд┐рдВрдЧреБрдИ рдкрд░ рднреА рдареЛрдХрд░ рдЦрд╛рдИ рдФрд░ рдпрд╣ рдЖрд╢рд╛рдЬрдирдХ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рд╡реА 2 рдХреЗ рд╕рд╛рдеред

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

  1. рдореИрдВ gatsby-plugin-i18n рд╕рдорд╛рдзрд╛рди рдЬреИрд╕реА рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдорд╛рд░реНрдХрдбрд╛рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХреИрд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

  2. рдХреНрдпрд╛ рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕реНрдерд┐рд░ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреНрдпрд╛рдЧ рджреЗрддрд╛ рд╣реИ?

FYI рдХрд░реЗрдВ @angeloocana

react-intl рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╕рдордп рд╣рдо рдЗрд╕реЗ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ, рдЗрд╕рдХрд╛ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рд╛рд░рд╛рдВрд╢ рдореИрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ред рдпрд╣ рдРрдк рдЕрднреА рддрдХ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЕрднреА рднреА рдЗрд╕ рд╕реЗрдЯрдЕрдк рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рддрдХ рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

рд╣рдо рдЕрдкрдиреА рд▓рдЧрднрдЧ рд╕рднреА рд╕рд╛рдордЧреНрд░реА (рдЬреЛ рд╣рдорд╛рд░реЗ Wordpress рдмреНрд▓реЙрдЧ рд╕реЗ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХреА рдЧрдИ рдереА) рдХреЛ Contentful рдореЗрдВ gatsby-source-contentful рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрд╣рд▓реЗ рд╣рдо рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ JSON рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд▓рд╛ рд░рд╣реЗ рдереЗ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд░рд╣реЗ рдереЗ рдФрд░ gatsby-source-filesystem рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ (рд╣рдордиреЗ /en/blog/... рдЬреИрд╕реЗ рдлрд╝реЛрд▓реНрдбрд░ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ред /de/blog/... ), рдЗрд╕рд▓рд┐рдП рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдХреЛрдИ рдХрдВрдЯреЗрдВрдЯрдлреБрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЬрдм рддрдХ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдЕрдкрдиреЗ рд╕реНрдерд╛рди рдХреЛ рдЬрд╛рдирддрд╛ рд╣реИред

рд╣рдо рдпрд╣ рднреА рдмрдЯрди рд▓реЗрдмрд▓, рдХреБрдЫ рд▓рд┐рдВрдХ рдпрд╛ рд╕реНрдереИрддрд┐рдХ рд╕рд╛рдордЧреНрд░реА рд╣реИ рдХрд┐ Contentful рд╕реЗ рдирд╣реАрдВ рдЖрддреА рд╣реИ рдЬреИрд╕реЗ рдХреБрдЫ рдкрд╛рда рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛ рд╣реИ Transifex рдмрдЬрд╛рдп рдФрд░ JSON рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд░реЗрдкреЛ рдореЗрдВ рдЬрдорд╛ рд╣реЛ рдЬрд╛рддреА рдкрд░ рд╕рд┐рдВрдХ рдХрд┐рдП рдЧрдПред рдЗрд╕ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХреБрдЫ i18n рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА рдФрд░ react-intl рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╛рдирддрд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рджрд┐рдирд╛рдВрдХ рдФрд░ рд╕рдВрдЦреНрдпрд╛ рд╕реНрд╡рд░реВрдкрдг рдХреЛ рднреА рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ: https://github.com/gatsbyjs/gatsby/issues/3830#issuecomment -362710469ред рддрдм рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП intl.formatMessage рдЬрдм рдореЗрдЯрд╛ рдЯреИрдЧ рдФрд░ <FormattedMessage /> , <FormattedDate /> рдЖрджрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдШрдЯрдХ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред

@szimek рдЕрдЧрд░ рдореИрдВ рдЖрдкрдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ react-intl рдШрдЯрдХ рдЯреЗрдХреНрд╕реНрдЯ рдЕрдиреБрд╡рд╛рдж рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИ, рдЬрдмрдХрд┐ рдкреЛрд╕реНрдЯ рдкреЗрдЬ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рддрд╣рдд рд╣рд╛рд░реНрдбрдХреЛрдбреЗрдб рдорд╛рд░реНрдЧреЛрдВ рдореЗрдВ рд╣реИрдВ?

рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рд╛рд░реНрдбрдХреЛрдбреЗрдб рдорд╛рд░реНрдЧ рдХреЗрд╡рд▓ рд╡рд╣реА рд╣реИрдВ рдЬреЛ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ? рдФрд░ i18n рдЕрдВрддрд░ рдШрдЯрдХ рдЕрдиреБрд╡рд╛рдж рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ?

@deltaskelta рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЖрдкрдХрд╛ рдкреНрд░рд╢реНрди рд╕рдордЭрддрд╛ рд╣реВрдВред

рдЗрд╕ рд╕рдордп рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдХрд╕реНрдЯрдо рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░реВрдЯрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ post рдкреГрд╖реНрда рдмрдирд╛рддреЗ рд╕рдордп (рд╣рдо gatsby-pagination рдкреНрд▓рдЧрдЗрди рдХреЗ рдереЛрдбрд╝реЗ рд╕рдВрд╢реЛрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдиреАрдп-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдФрд░ рдкреГрд╖реНрдард╛рдВрдХрд┐рдд index рдФрд░ category рдкреГрд╖реНрда рднреА рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ), рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:

posts.edges.map(({ node }) => {
  const id = node.contentfulid;
  const locale = node.node_locale;

  return createPage({
    path: `/${locale}/blog/posts/${id}`,
    layout: locale,
    component: path.resolve('./src/templates/post-page.jsx'),
    context: {
      id,
      locale,
    },
  });
});

рднрд▓реЗ рд╣реА рдЖрдкрдиреЗ рдЬреЗрдПрд╕ рдЕрдХреНрд╖рдо рдХрд░ рджрд┐рдпрд╛ рд╣реЛ, рдореЗрдЯрд╛ рдЯреИрдЧ рд╕рд╣рд┐рдд рд╕рднреА рд╕рд╛рдордЧреНрд░реА рд╕рд╣реА рднрд╛рд╖рд╛ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЬрд╛рддреА рд╣реИред

рд╣рдорд╛рд░реА рдУрд░ рд╕реЗ, рд╣рдо рдХреБрдЫ рд╕реБрдзрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде i18next рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ

рдореБрдЦреНрдп рд╕рд┐рджреНрдзрд╛рдВрдд рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИрдВ:

  • рд╕реНрдерд╛рди .json рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ рдФрд░ рдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рди рдмрд╕ /dist/ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЪрд▓реЗ рдЧрдП рд╣реИрдВред
  • рд╣рдо рдПрдХ рдПрдХрд▓ рдкреГрд╖реНрда рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ onCreatePage ( gatsby-node.js ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрддрдиреЗ рд╣реА рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг рддреИрдпрд╛рд░ рдХрд░реЗрдЧрд╛ рдЬрд┐рддрдиреЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рднрд╛рд╖рд╛рдПрдВ рд╣реИрдВред
  • рдкреГрд╖реНрда рдЬрд╛рдирдХрд╛рд░реА (рдЬреИрд╕реЗ рдкрдердирд╛рдо) рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЗрдВрджреНрд░реАрдХреГрдд рд╣реИрдВред

рд╕реНрдерд╛рдиреЛрдВ

рдЕрдиреБрд╡рд╛рджреЛрдВ рдХреЛ рдЕрдзрд┐рдХрддрд░ рдкреГрд╖реНрда рджреНрд╡рд╛рд░рд╛ рд╕рдореВрд╣реАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдкреНрд░рддрд┐ рдкреГрд╖реНрда рдПрдХ рдирд╛рдо рд╕реНрдерд╛рди (= JSON рдлрд╝рд╛рдЗрд▓) + рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдлрд╝рд╛рдЗрд▓ (рд╢реАрд░реНрд╖ рд▓реЗрдЦ / рдкрд╛рдж рд▓реЗрдЦ рдЬреИрд╕реЗ рд╕рд╛рдЭрд╛ рдкрд╛рда рдХреЗ рд▓рд┐рдП)ред

|- src/
  |- locales/
    |- en/
      |- foo.json
      |- bar.json
    |- fr/
      |- foo.json
      |- bar.json

рдЕрдлрд╕реЛрд╕ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рд╕реНрдерд╛рдиреАрдп рд╕рдВрд╢реЛрдзрдиреЛрдВ рдкрд░ рдХреЛрдИ рд╣реЙрдЯ-рд░реАрд▓реЛрдбрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ

i18рдЕрдЧрд▓рд╛

i18next рдХреЛ рдирд┐рдореНрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

import i18n from "i18next";
import Backend from "i18next-xhr-backend";
import { reactI18nextModule } from "react-i18next";
import config from "config";  // Our custom configurations env-specifics

const NAMESPACES = [
  "foo",
  "bar",
  ...
];

export default function createI18n() {
  const options = {
    fallbackLng   : false,
    whitelist     : ["en", "fr"],
    ns            : NAMESPACES,
    debug         : config.debug,
    interpolation : {
      escapeValue : false
    },
    react         : {
      wait : true
    },
    backend       : {
      loadPath : `${config.pathPrefix}locales/{{lng}}/{{ns}}.json`
    },
    parseMissingKeyHandler : () => "",  // Display an empty string when missing/loading key
  };

  return i18n
    .use(Backend)
    .use(reactI18nextModule)
    .init(options);
}

рдкрдиреНрдиреЗ рдХреА рдЬрд╛рдирдХрд╛рд░реА

рд╣рдорд╛рд░реЗ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд╕рднреА i18n рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдХреБрдЫ рд╕реВрдЪрдирд╛рдУрдВ рдХреЛ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ pagesInfos.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдореВрд╣реАрдХреГрдд рдХрд┐рдпрд╛ рд╣реИ:

module.exports = {
  index : {
    id          : "index",
    namespace   : "home",
    path        : {
      fr : "/",
      en : "/en/"
    }
  },
  projects : {
    id          : "projects",
    namespace   : "projects",
    path        : {
      fr : "/nos-clients/",
      en : "/en/our-clients/"
    }
  },
  // etc...

рдЬрд╣рд╛рдБ рдХреБрдВрдЬрд┐рдпрд╛рдБ рдкреГрд╖реНрда рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд╣реИрдВ , рдФрд░ рдирд╛рдорд╕реНрдерд╛рди рд╕реНрдерд╛рди рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд╣реИрдВ ред рд╡реЗ рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ:

|- src/
  |- pages/
    |- index.js
    |- projects.js
  |- locales/
    |- en/
      |- home.json
      |- projects.json
    |- fr/
      |- home.json
      |- projects.json

рдФрд░ рдЬрд╣рд╛рдВ рдкрде рд╣рдорд╛рд░реЗ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд╣рдорд╛рд░реЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ (рднрд╛рд╖рд╛рдУрдВ) рдХреЗ рдкрдердирд╛рдо рд╣реИрдВред

рдкреЗрдЬ рдмрдирд╛рдПрдВ

рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде, рдпрд╣рд╛рдВ рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рд╣реЛрдо рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреЗрдЬреЛрдВ рдХрд╛ FR + EN рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдирд╛ рд╣реИред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдПрдХ рд╕рдорд░реНрдкрд┐рдд рдХрд╛рд░реНрдп рдмрдирд╛рдпрд╛:

/**
 * Generate a custom page informations
 * <strong i="15">@param</strong>  {Object} defaultInfos  Default informations generated by Gatsby
 * <strong i="16">@return</strong> {Object}               Customized page object
 */
function generatePagesInfos(defaultInfos) {
  const pageId = defaultInfos.jsonName.slice(0, -5);  // NOTE: Get pageId from "pageName.json"
  const pageInfos = pagesInfos[pageId];

  const pageFR = {
    ...defaultInfos,
    context : {
      pageId      : pageInfos.id,
      namespace   : pageInfos.namespace,
      language    : "fr"
    },
    path : pageInfos.path.fr
  };

  const pageEN = {
    ...defaultInfos,
    context : {
      pageId      : pageInfos.id,
      namespace   : pageInfos.namespace,
      language    : "en"
    },
    path : pageInfos.path.en
  };

  return [pageFR, pageEN];
}

рдЗрд╕ рд╕рд╣рд╛рдпрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ onCreatePage рд╣реБрдХ рдХреЗ рджреМрд░рд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдХреЛ рд░реЗрдЧреЗрдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪреБрдирдирд╛:

exports.onCreatePage = async ({ page, boundActionCreators }) => {
  const { createPage, deletePage } = boundActionCreators;

  return new Promise((resolve, reject) => {

    if (page.path.match(page.path.match(/^\/$/))) {
      const i18nPages = generatePagesInfos(page);
      deletePage(page);                         // Remove old default page
      i18nPages.map(page => createPage(page));  // Create custom i18n pages
    }

    if (page.path.match(/^\/projects\/?$/)) {
      const i18nPages = generatePagesInfos(page);
      deletePage(page);
      i18nPages.map(page => createPage(page));
    }

    // etc...

    resolve();
  });
}

рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдХреЗ рджреЛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВ, рдПрдХ рдХрд╕реНрдЯрдо рдкрдердирд╛рдо рдХреЗ рд╕рд╛рде (рд╣рдорд╛рд░реЗ рдкреГрд╖реНрдареЛрдВ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдлрд╝рд╛рдЗрд▓ рд╕реЗ)ред рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдкрд░ pathContext рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ language рдЬрд╛рдирдХрд╛рд░реА pathContext ред рдЗрд╕ рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдкрд░ рд╕рд╣реА рднрд╛рд╖рд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╕рд╣реА рднрд╛рд╖рд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ

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

import React from "react";
import PropTypes from "prop-types";
import { i18n } from "context";    // Our custom context

/**
 * <strong i="10">@returns</strong> {React.PureComponent} Component with locales as proptypes
 */
export default function setLanguageFromPage() {

  return WrappedComponent => (
    class extends React.PureComponent {

      static propTypes = {
        pathContext : PropTypes.shape({
          language : PropTypes.string.isRequired
        })
      }

      componentDidMount() {
        const currentLanguage = i18n.language;
        const pageLanguage = this.props.pathContext.language;

        // First request
        if (!currentLanguage) {
          i18n.language = pageLanguage;
        }

        // Only update on language change
        if (currentLanguage !== pageLanguage) {
          i18n.changeLanguage(pageLanguage);
        }
      }

      render() {
        return <WrappedComponent {...this.props} />;
      }

    }
  );

}

рдлрд┐рд░ рдЗрд╕реЗ рдкреГрд╖реНрдареЛрдВ рдкрд░ рдХреЙрд▓ рдХрд░реЗрдВ:

@setLanguageFromPage()
export default class ProjectsPage extends React.PureComponent {
// ...

Pfew, рдЕрдм рдЖрдкрдХреЛ рдХреЗрд╡рд▓ i18next рдХреЗ рдЕрдиреБрд╡рд╛рдж рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖

рдПрдХ рдПрдХрд▓ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рдЬреЛ рдмрд┐рд▓реНрдб рдХреЗ рджреМрд░рд╛рди рдЬрд┐рддрдиреЗ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЙрддрдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдЙрддреНрдкрдиреНрди рдХрд░рддреА рд╣реИ
ЁЯСН рдЖрд╕рд╛рди рдкреГрд╖реНрда рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рдмрдВрдзрди
рдкрд╣рд▓реЗ рдХреБрдЫ рдкреНрд░рдпрд╛рд╕, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕рдм рдХреБрдЫ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ

рд▓реЛрдХреЗрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╣реЙрдЯ-рд░реАрд▓реЛрдб рдирд╣реАрдВ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рдЬреАрд╡рди рдХрд╛ рд╕реНрдерд┐рд░ рддрд░реАрдХрд╛" рдирд╣реАрдВ рд╣реИ ... рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЕрднреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ рд╣реИрдВред

рдореБрдЭреЗ рдпрд╣ рджреЗрдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ рдХрд┐ рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рд▓реЛрдЧ рдЗрд╕реЗ рдХреИрд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдкреБрдирд╢реНрдЪ. рдкреЛрдХ @szimek , рдпрд╣реА рдореИрдВ рдЖрдкрдХреЛ рдХреБрдЫ рджрд┐рди рдкрд╣рд▓реЗ рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ :)

рдореИрдВ @angeloocana рдХреЗ https://github.com/angeloocana/gatsby-plugin-i18n + React-intl рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рддрд░рд╣ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рд╕реАрдорд╛рдПрдВ рд╣реИрдВ (рд░реЗрдкреЛ рдореБрджреНрджреЗ рджреЗрдЦреЗрдВ) рдФрд░ рдореИрдВ рд╣реВрдВ рд░рд┐рдПрдХреНрдЯ-рдЗрдВрдЯрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрддрдирд╛ рдЦреБрд╢ рдирд╣реАрдВ рд╣реИред @tricoder42 рдХреЗ https://github.com/lingui/js-lingui рдХреЛ рдЖрдЬрдорд╛рдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ, рдЕрднреА рд╕рдордп рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред

@monsieurnebo deletePage рдареАрдХ рдкрд╣рд▓реЗ createPage рдЪрд▓рд╛рдиреЗ рдХрд╛ рд▓рдХреНрд╖реНрдп рдХреНрдпрд╛ рд╣реИ? рдореБрдЭреЗ рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рдкрд╕рдВрдж рд╣реИ рдФрд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреБрдЫ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВред

  • рдореИрдВ рдпрд╛ рддреЛ рдорд┐рд▓ рдЧрд▓рдд pathContext.language рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ deletePage

  • рдпрд╛ рдЬрдм рдореИрдВ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреА рддрд░рд╣ deletePage рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдмрд┐рд▓реНрдб рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред (рдпрд╣ рдХрд╣рддрд╛ рд╣реИ TypeError: Cannot read property 'id' of undefined рдЬрдм рдмрд┐рд▓реНрдб run graphql queries рд╕реНрдЯреЗрдЬ рдкрд░

рдпрд╣ рдЕрдм рддрдХ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИред

@deltaskelta рдЖрдкрдХреЛ рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реБрдП

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

рдЗрд╕ рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рдФрд░ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдЕрдкрдиреА public рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ, рдЖрдк рдЕрдВрддрд░ рджреЗрдЦреЗрдВрдЧреЗ;)

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

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдХреНрдпрд╛ рдЖрдк рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдкреА рд▓реЗрдВрдЧреЗ?

рдУрд╣, рдпрд╣ рдбрд┐рд▓реАрдЯрдкреЗрдЬ рдХреЙрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рдерд╛ред рдЬрдм рд╕реЗ рдореИрдВрдиреЗ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдерд╛, рдпрд╣ рдкреЗрдЬ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреЙрдкреА рди рдХрд░рдиреЗ рдХрд╛ рдореБрджреНрджрд╛ рдерд╛ред рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рдЬреЗрдПрд╕ рд╕реЗ рджреВрд░ рд░рд╣рдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВ рд╣рдореЗрд╢рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдареЛрдХрд░ рдЦрд╛рддрд╛ рд╣реВрдВ;)

@monsieurnebo рдореИрдВ рдЖрдкрдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЕрднреА рднреА react-i18next рдПрдЪрдУрд╕реА рдХреЗ рд╕рд╛рде рд▓рд┐рдкрдЯреЗ рд╕рднреА рдШрдЯрдХреЛрдВ рдХреЛ рдШрдЯрдХ рдореЗрдВ рдХреБрдЫ рднреА рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ...

рдХреНрдпрд╛ рдЖрдк рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рдЕрдВрдд рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ?

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

@deltaskelta рдЬрдм рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдЦрд╛рд▓реА рд╕рдордп рд╣реЛрдЧрд╛ рддреЛ рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ :)

@monsieurnebo рдХреНрдпрд╛ рдЖрдк рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреА рд╡рд┐рдзрд┐ HTML рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ?

рд╣рд╛рдБ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ "рдЬреАрд╡рди рдХрд╛ рд╕реНрдерд┐рд░ рддрд░реАрдХрд╛" рдирд╣реАрдВ рд╣реИ

рдореБрдЭреЗ рдПрдХ рдкреНрд▓рдЧрдЗрди рдкрд╕рдВрдж рдЖрдПрдЧрд╛ рдЬреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╕реНрдерд┐рд░ рдЯреЗрдХреНрд╕реНрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред

рдУрд╣, рдЕрдЪреНрдЫрд╛ред рдПрдХ рд╕реНрдерд┐рд░ рд░реЗрдВрдбрд░ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореБрдЭреЗ рдЬрд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ ...

рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛, рдЪреВрдВрдХрд┐ рдЖрдкрдХреЗ gatsby-node рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рднрд╛рд╖рд╛ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдкрд╛рд░рд┐рдд рд╣реЛ рдЪреБрдХреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдмрд╣реБрдд рдХрдард┐рди рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рд╡реЗ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рд╕рдВрджреЗрд╢ рдХреБрдВрдЬреА рдорд╛рдВрдЧреЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкрд╛рд╕ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдореИрдВ рдПрдХ i18n рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рднреА рддрд░рд╣ рд╕реЗ рдХрд░реВрдВрдЧрд╛ ...

@szimek react-intl рдмрд┐рд▓реНрдб рдЪрд░рдг рдкрд░ рдЕрдиреБрд╡рд╛рдж рдХреИрд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ?

рдЬреИрд╕рд╛ рдХрд┐ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдБ Gatsby-plugin-i18n рд╕реНрдерд┐рд░ рдкрд╛рда рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрд╛?

@deltaskelta рдареАрдХ рд╣реИ, рд╕рднреА рдЕрдиреБрд╡рд╛рдж рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдХреЗ рджреМрд░рд╛рди рдЙрдкрд▓рдмреНрдз рд╣реИрдВ (рдЗрд╕реАрд▓рд┐рдП рдореИрдВ рдХрдИ рд▓реЗрдЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ), рдЗрд╕рд▓рд┐рдП рдпрд╣ "рдмрд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ" тДвя╕П;) рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ v2 рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд░рд╣реЗрдЧрд╛ ... рдореИрдВ рдПрдХ рдирдореВрдирд╛ рдРрдк рддреИрдпрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрднреА рддрдХ gatsby-plugin-i18n рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдирд╣реАрдВред

рдореИрдВрдиреЗ рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рдкрдврд╝рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ gatsby-plugin-i18n + рд╕рд╛рдордЧреНрд░реАрдкреВрд░реНрдг рдХреЙрдореНрдмреЛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЪрд░реНрдЪрд╛ (рдпрд╛ рдмрд▓реНрдХрд┐ рдПрдХ рдореЛрдиреЛрд▓реЙрдЧ) рд╣реИ: https://github.com/angeloocana/gatsby-plugin-i18n/issues/31

@szimek рдореБрдЭреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдЧреАред @sedubois рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ gatsby-plugin-i18n рднреА рд╕реНрдерд┐рд░ рдкрд╛рда рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдЬрд╛рджреВ рдХрд╣рд╛рдБ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ i18next рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдерд┐рд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд╛рдпрдм рд╣реИ ....

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВ рдЕрдм ... рдЖрдк рдЧреБрдЬрд░ рд░рд╣реЗ рд╣реИрдВ react-intl рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрджреЗрд╢ pathContext рдореЗрдВ gatsby-node рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рджреМрд░рд╛рди?

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдпрджрд┐ рдпрд╣ рдорд╛рдорд▓рд╛ рд╣реИ (рдЬреЛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ), рддреЛ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ i18n рд▓рд╛рдЗрдмреНрд░реЗрд░реА "рдХреБрдЫ рд╣рдж рддрдХ" рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рд╕рдВрджрд░реНрдн рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдПрдХ рд╢реБрджреНрдз рдЧреИрдЯреНрд╕рдмреА рд╕реЗрдЯрдЕрдк рд╣реИ рдФрд░ i18n lib рдХреЗрд╡рд▓ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓ рд░рд╣рд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдЬреЗрдПрд╕ рдХреЗ рд╕рд╛рде рддрд┐рдерд┐рдпрд╛рдВ рдФрд░ рдмрд╣реБрд╡рдЪрдиред

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

рджреВрд╕рд░реА рдУрд░, react-intl рдХрд╛ FormattedMessage рдШрдЯрдХ, рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рдВрджреЗрд╢ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ (рдЬреЛ рдЗрд╕реЗ рджрд┐рдП рдЧрдП рд╕рдВрджрд░реНрдн рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдФрд░ рдирд┐рд░реНрдорд╛рдг рдкрд░ рдПрдЪрдЯреАрдПрдордПрд▓ рдореЗрдВ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред

рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ i18n рдХрд╛ рдЕрдзрд┐рдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдПрдХреАрдХрд░рдг рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЗрдВрдЯрд▓ рдХреЗ рд╕рд╛рде рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк HTML рдореЗрдВ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЕрдЧрд░ рдореИрдВрдиреЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдЧрд▓рдд рд╕рдордЭрд╛ рд╣реИ рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рд╕реБрдзрд╛рд░реЗрдВ

@mattferderer рдХрд╛ рдпрд╣рд╛рдБ рд╕рд╣реА рд╡рд┐рдЪрд╛рд░ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ https://github.com/gatsbyjs/gatsby/issues/3830#issuecomment -362715706

рд▓реЗрдЖрдЙрдЯ рдкреГрд╖реНрдареЛрдВ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдПрдХрд╛рдзрд┐рдХ рд▓реЗрдЖрдЙрдЯ рдмрдирд╛рдП рдмрд┐рдирд╛ createPages рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд╕рдВрджрд░реНрдн рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ (рдЕрдЧрд░ рдореИрдВ рдпрд╣рд╛рдВ рдЧрд▓рдд рд╣реВрдВ рддреЛ рдореБрдЭреЗ рд╕реБрдзрд╛рд░реЗрдВ)ред рддреЛ рдлрд┐рд░, i18n рдХреЛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓реЗрдЖрдЙрдЯ рдХреЛ рдХреЗрд╡рд▓ children() рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдлрд┐рд░ рдкреНрд░рддрд┐ рднрд╛рд╖рд╛ рдкреНрд░рднрд╛рд╡ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓реЗрдЖрдЙрдЯ gatsby-node рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрде-рдкреНрд░рддрд┐-рднрд╛рд╖рд╛ рдмрдирд╛рдХрд░ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред pages/index рд╕реЗ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдкреГрд╖реНрда рдЬреЛ рд╕рдВрджрд░реНрдн рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрджреЗрд╢ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд░рд╛рдордмрд▓ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдФрд░ рдореБрдЭреЗ рдЗрд╕реЗ рдХрд╣реАрдВ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдирд╛ рдкрдбрд╝рд╛

EDIT2: рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдКрдкрд░ рдЧрд▓рдд рд╣реВрдВ, рд╣реЗрдбрд░ рдФрд░ рдлреБрдЯрд░ рдХреЛ рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХрдИ рд▓реЗрдЖрдЙрдЯ рдмрдирд╛рдП рдмрд┐рдирд╛ рдЙрдиреНрд╣реЗрдВ рд╕рдВрджреЗрд╢ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдПрдХрдорд╛рддреНрд░ рдЕрдиреНрдп рддрд░реАрдХрд╛ рдЬреЛ рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпреВрдЖрд░рдПрд▓ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдФрд░ рд▓реЛрдХреЗрд▓ рдХреЗ рд▓рд┐рдП рд░реЗрдЧреЗрдХреНрд╕рд┐рдВрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ... рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИрдХреА рдЪреАрдЬ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ

@KyleAMathews v2 рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд▓реЗрдЖрдЙрдЯ рд╣реИ, рд╣рдо рдкрде рдпрд╛ рднрд╛рд╖рд╛ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдВрджрд░реНрдн рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░реВрдЯ рд▓реЗрдЖрдЙрдЯ рдШрдЯрдХ рдХреЛ i18n рд╕рдВрджреЗрд╢ рдЬреИрд╕реЗ рдбреЗрдЯрд╛ рдХреИрд╕реЗ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

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

@deltaskelta рд╣рдо рдЬреЛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: https://github.com/szimek/gatsby-react-intl-exampleред рдпрд╣ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреЛрд╕реНрдЯ рдХреИрд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рд▓реЛрдХреЗрд▓ рдХреЗ рд▓рд┐рдП рдЗрдВрдбреЗрдХреНрд╕ рдкреЗрдЬ рдХреИрд╕реЗ рдмрдирд╛рдПрдВ, react-intl рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рд╢реАрд░реНрд╖рдХ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП react-intl injectIntl HOC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ (рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рдореЗрдЯрд╛ рдЯреИрдЧ) intl.formatMessage рд╕рд╣рд╛рдпрдХ рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдПред

рдЙрддреНрдкрдиреНрди рдкреГрд╖реНрда рд╣реИрдВ:

  • /en
  • /en/hello-world
  • /pl
  • /pl/witaj-swiecie

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдРрдк рдореЗрдВ рд╣рдо gatsby-pagination рд╕рдВрд╢реЛрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рд▓реЗрдЖрдЙрдЯ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкреЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП post_id рдлрд╝реАрд▓реНрдб рднреА рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдЙрд╕реА рдкреЛрд╕реНрдЯ рдХреЗ рдЕрдиреБрд╡рд╛рдж рдЦреЛрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ рдбреЗрдореЛ рдРрдк рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рджреЛрдиреЛрдВ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╕рдорд╛рди post_id ред

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВред рдореБрдЭреЗ рдЕрднреА-рдЕрднреА рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рд╛рдЗрдЯрдореИрдк рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рддрд╛рдХрд┐ рд╕реНрд╡рд┐рдлреНрдЯрдЯрд╛рдЗрдк (рд╣рдо рдЬрд┐рд╕ рдЦреЛрдЬ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ) рдХреЛ рдкрддрд╛ рдЪрд▓реЗ рдХрд┐ рд╣рдореЗрдВ рдХреМрди рд╕реЗ рдкреГрд╖реНрда рдорд┐рд▓реЗ рд╣реИрдВред

@deltaskelta рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрда рдШрдЯрдХ рд╣реЛрдВрдЧреЗ рдФрд░ рдлрд┐рд░ рдкреНрд░рддрд┐ рднрд╛рд╖рд╛ рдПрдХ рд▓реЗрдЖрдЙрдЯ рдШрдЯрдХ рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдБ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЖрдк рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

// French
import React from 'react'
import FrenchLayout from '../components/layouts/french'
import ImportantPage from '../components/pages/important-page'

export default ({ data }) => (
  <FrenchLayout>
    <ImportantPage {...data} />
  </FrenchLayout>
)

// French query here
// English
import React from 'react'
import EnglishLayout from '../components/layouts/english'
import ImportantPage from '../components/pages/important-page'

export default ({ data }) => (
  <EnglishLayout>
    <ImportantPage {...data} />
  </EnglishLayout>
)

// English query here

@KyleAMathews рдпреЗ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╣реИрдВ, рд╣реИ рдирд╛? рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ 3 рдкреЗрдЬ рдкреНрд░рдХрд╛рд░ рдФрд░ 7 рднрд╛рд╖рд╛рдПрдВ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ 21 рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА? :)

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

рдореИрдВрдиреЗ рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рдкрдврд╝рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ gatsby-plugin-i18n + рд╕рд╛рдордЧреНрд░реАрдкреВрд░реНрдг рдХреЙрдореНрдмреЛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЪрд░реНрдЪрд╛ (рдпрд╛ рдмрд▓реНрдХрд┐ рдПрдХ рдПрдХрд╛рд▓рд╛рдк) рд╣реИ: Angeloocana/gatsby-plugin-i18n#31

@sedubois , рд╣рд╛рд╣рд╛, рд╣рд╛рдБред рд╕рд╛рд░рд╛рдВрд╢: рдпрд╣ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕ рдкреАрдЖрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧреИрдЯреНрд╕рдмреА рдбреЙрдХреНрд╕ рдореЗрдВ gatsby-starter-contentful-i18n рд╕реНрдЯрд╛рд░реНрдЯрд░ рд░реЗрдкреЛ рд╢рд╛рдорд┐рд▓ рд╣реИ: https://github.com/gatsbyjs/gatsby/pull/4138

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

@mccrodp рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рдореЗрд░реЗ рдЬреИрд╕рд╛ рд╣реА рджрд┐рдЦрддрд╛ рд╣реИ, рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ gatsby-plugin-i18n рд▓рд┐рдП рдЖрдкрдХреЛ layout рд╡рд┐рдХрд▓реНрдк рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ createPage , рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИ рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдЕрднреА рднреА рдХрдИ рд▓реЗрдЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ;)

рдореИрдВ @KyleAMathews рд╕реБрдЭрд╛рд╡ рдХреЗ рд╕рд╛рде рдЧрдпрд╛ рд╣реВрдБ рдФрд░ рдПрдХ components/Layout рд╣реИ рдЬреЛ i18n lib рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореЗрд░реЗ gatsby рд▓реЗрдЖрдЙрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣, gatsby-node рдореИрдВ рдЕрдкрдиреЗ рд▓реЛрдХреЗрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рдкреЗрдЬ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЙрдирдХреЗ рдкрд╛рд╕ рдЙрди рд╕рднреА рдЪреАрдЬреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ, рдЬрд┐рди рддрдХ рдкреЗрдЬ рдХреА рдкрд╣реБрдВрдЪ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкрде рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдЗрд╕рдХреЗ рдмрд╛рдж рдореИрдВ рд▓реЛрдХреЗрд▓ рдХреЛ рд╕реАрдзреЗ рд▓реЗрдЖрдЙрдЯ рдШрдЯрдХ рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдЗрд╕реЗ i18n рдкрд░ рднреЗрдЬрддрд╛ рд╣реИред

рд▓реЗрдЖрдЙрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рд╕реНрддрд░ рдШрдЯрдХ рдХреЛ рд▓рдкреЗрдЯрдирд╛ рдорд╛рдореВрд▓реА рд░реВрдк рд╕реЗ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдЗрддрдирд╛ рднреНрд░рдо рджреВрд░ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдореЗрд░реЗ рдХреЛрдб рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИред

рдЕрд░реЗ @deltaskelta , рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ? рдпрд╣ рджреЗрдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рд╕реЗ рд╕рдореБрджрд╛рдп i18n рдкреНрд▓рдЧрдЗрди рдХреЛ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдкреБрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реАрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рджред

рдореЗрд░реА рдкреВрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЕрднреА рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдореВрд▓ рдмрд╛рддреЗрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ ...

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

  2. рд╕рдВрджрд░реНрдн рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ gatsby-node рдореЗрдВ рдЙрдЪрд┐рдд messages рдФрд░ locale рдлрд╝реАрдб рдХрд░реЗрдВ...

exports.onCreatePage = ({ page, boundActionCreators }) => {
  const { createPage, deletePage } = boundActionCreators;

  if (page.path.includes('404')) {
    return; // no need for localized 404 pages
  }

  return new Promise(resolve => {
    // if it is not the app page then I need localized static pages
    const pages = localizedPages(page);
    deletePage(page);
    pages.map(page => createPage(page));

    resolve();
  });
};

// to be passed to the localized pages so it can calculate the matchPath
const getMatchPath = lang => {
  return `${locales[lang]['path']}/app/:path`;
};

// this is a helper function that makes pages in each language.
const localizedPages = (page, matchPathFunc) => {
  var pages = [];
  Object.keys(locales).map(lang => {
    const path = locales[lang]['path'] + page.path;

    pages.push({
      ...page,
      path: path,
      matchPath: matchPathFunc ? matchPathFunc(lang) : undefined,
      context: {
        locale: lang,
        messages: locales[lang],
        pathRegex: `/.pages${page.path}./` // so pages can match markdown in their dir
      }
    });
  });

  return pages;
};
  1. рдЕрдм рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рд▓реЗрдЖрдЙрдЯ рдШрдЯрдХ рдмрдирд╛рдПрдВ рдЬрд┐рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рд╕реНрддрд░ рдХреЗ рдШрдЯрдХ рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ...
// this is the main entrypoint for the layout to the site
const GlobalLayout = ({ locale, children, path }) => {
  const theme = getTheme();
  return (
    <MuiThemeProvider theme={theme}>
      <CssBaseline>
        <IntlProvider locale={locale} messages={locales[locale]}>
          <div>
            <Header locale={locale} messages={locales[locale]} path={path} />
            {children}
          </div>
        </IntlProvider>
      </CssBaseline>
    </MuiThemeProvider>
  );
};
  1. рдЕрдкрдиреЗ рдкреГрд╖реНрда рд╕реНрддрд░ рдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╡реИрд╢реНрд╡рд┐рдХ рд▓реЗрдЖрдЙрдЯ рдШрдЯрдХ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдЙрдЪрд┐рдд рд╕реНрдерд╛рди рдФрд░ рд╕рдиреНрджрд░реНрдн рд╕реЗ рд╕рдВрджреЗрд╢ рдкрд╛рд░рд┐рдд рд╣реЛрдВ
const BlogPost = ({ data, pathContext, location }) => {
  const { locale } = pathContext;
  return (
    <GlobalLayout locale={locale} path={location.pathname}>
      <FullWidth>
        <h1>{data.markdownRemark.frontmatter.title}</h1>
        <h3>{data.markdownRemark.frontmatter.date}</h3>
        <div dangerouslySetInnerHTML={{ __html: data.markdownRemark.html }} />
      </FullWidth>
    </GlobalLayout>
  );
};

рдореБрдЭреЗ рдЗрд╕ рдХреЛрдб рдХреЛ рд╕рд╛рдл рдФрд░ рдкреБрдирд░реНрдЧрдард┐рдд рдХрд░рдирд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд▓реНрджреА рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдлрд┐рд░ рд╕реЗ рджреЗрдЦрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ ... рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рд╕рд╛рд░ рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛

рдореИрдВрдиреЗ рдПрдХ рдЧреИрдЯреНрд╕рдмреА рд╕реНрдЯрд╛рд░реНрдЯрд░ рдмрдирд╛рдпрд╛ рдЬреЛ рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЗрдПрд╕-рд▓рд┐рдВрдЧреБрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
https://github.com/dcroitoru/gatsby-starter-i18n-lingui

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

@szimek рдХреНрдпрд╛ рдХреЛрдИ рдореМрдХрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдирд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдЧреИрдЯреНрд╕рдмреА-рдкреЗрдЬрд┐рдиреЗрд╢рди рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХреЗрдВ? рдореИрдВ рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╕реНрд╡рдпрдВ рднреА рдЗрд╕реА рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

@martynhoyer My рдкреИрдЪ рдХрд╛ рд╡рд┐рд▓рдп рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ gatsby-pagination рдХреЗ рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╡рд╛рдкрд╕ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ред рдЖрдкрдХреЛ рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╣реИ?

рдирдорд╕реНрддреЗ @sgoudie
рдореИрдВ рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ: https://www.gatsbyjs.org/blog/2017-10-17-build-i18n-with-gatsby/ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрдкрдирд╛ рдХреЛрдИ рднреА locales/{lang}/*.json рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╕реБрд░рд╛рдЧ рд╣реИ?
2018-04-25 12_04_13-o intermedium agora e banco inter

рдореЗрд░рд╛ рд╡рд┐рдиреНрдпрд╛рд╕:
gasbty-node.js
```javascriptexports.onPostBuild = () => {
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ ('рд╕реНрдерд╛рдиреЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛')
fs.copySync(
path.join(__dirname, '/src/locales'),
path.join(__dirname, '/public/locales')
)
}

```

рдЬреЛрдбрд╝реЗрдВ

exports.onPostBootstrap = () => {
    console.log("Copying locales");
    fs.copySync(
        path.join(__dirname, "/src/locales"),
        path.join(__dirname, "/public/locales")
    );
};

рд╕реЗ gatsby-node.js

@ рдерд┐рдпрд╛рдЧреЛ рдорд┐рд░рд╛рдВрдбрд╛ рдореИрдВ рдЙрд╕реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рдерд╛, рддрдм рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ gatsby develop рдкреЛрд╕реНрдЯрдмрд┐рд▓реНрдб рдкрд░ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ gatsby build рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред onPostBootstrap рдХреЛ рд╣рд░ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХреЛрдИ рднреА рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рд▓реЗрдЖрдЙрдЯ рдореЗрдВ https://moz.com/learn/seo/hreflang-tag рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

@RobinHerzog рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╣реЗрд▓рдореЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред рд╡реЗ рдкреГрд╖реНрда рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рдмрдирд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рдерд╛ред

@szimek рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╕реЗ рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рд░рдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ред

<link rel="alternate" href={Route['en-us'][this.props.data.prismicDocument.data.group]} hreflang="en-us" /> <link rel="alternate" href={Route['fr-fr'][this.props.data.prismicDocument.data.group]} hreflang="fr-fr" />

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

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

рд▓рд╛рдЗрд╡ рд░реАрд▓реЛрдб, SEO рдлреНрд░реЗрдВрдбрд▓реА рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рднрд╛рд╖рд╛рдПрдВ url рдореЗрдВ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВред
рд╕рднреА .js рдкреЗрдЬ рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рд▓реЗрдЖрдЙрдЯ рдФрд░ .md рдмрдирд╛рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред
LangSelect рдФрд░ Link рдШрдЯрдХ i18n рд╕реНрдорд╛рд░реНрдЯ рд╣реИрдВред

рдпрджрд┐ рдЖрдк рдореЗрд░реА рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореБрдЭреЗ рд╕рдордЭрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рдХреЛрдб рдФрд░ рд╢реИрд▓реА рдХреЛ рдХреИрд╕реЗ рд╕реБрдзрд╛рд░ рд╕рдХрддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ред

@ рдЯреЙрдо-рдкрд┐рдЪреМрдб, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдЪреВрдВрдХрд┐ рдЖрдк рдкреГрд╖реНрда рдШрдЯрдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрджреЗрд╢ рдирд╣реАрдВ рднреЗрдЬ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд╡рд╣рд╛рдВ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

gatsby-node рдореЗрдВ рдорд╛рд░реНрдХрдбрд╛рдЙрди i18n рд╕реЗрдЯрдЕрдк рд╡реИрд╕рд╛ рд╣реА рджрд┐рдЦрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рд▓реЛрдЧ рдпрд╣рд╛рдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреЗ рдкреЗрдЬ рдШрдЯрдХреЛрдВ рдкрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдХреНрд╖рдо рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рд░ рдкреНрд░рддрд┐рдкрд╛рджрди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рд╣рд╛рдБ, рдореБрдЭреЗ рд╕реНрдерд┐рд░ рдкреНрд░рддрд┐рдкрд╛рджрди рдорд┐рд▓рддрд╛ рд╣реИ, рд╡реИрд╕реЗ рднреА рдореЗрд░рд╛ рдЙрджреНрджреЗрд╢реНрдп рдпрд╣реА рдерд╛, i18n-react рдЪрд╛рд▓ рд╣реИ!

@TomPichaud рдХреНрдпрд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд i18n- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреИрд╕реЗ рд╣реИ ?

рдПрдХ рдЪреАрдЬ рдЬреЛ рдореБрдЭреЗ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣реА рд╣реИ, рд╡рд╣ рд╣реИ рдЕрдиреБрд╡рд╛рджрд┐рдд рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░реА рдкреИрдХреЗрдЬреЛрдВ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ (рдмрд╣реБрд╡рдЪрди рдФрд░ рд░рд┐рд╢реНрддреЗрджрд╛рд░реЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╢рд╛рдпрдж)ред

рд╕реНрдерд┐рд░ рд╕рд╛рдордЧреНрд░реА рд╡рд╛рд▓реА рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рдореИрдВ рдмрд╕ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ onCreatePage рд▓рд┐рдП рдкреГрд╖реНрдареЛрдВ рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд▓реЛрдХреЗрд▓ рдХреЛ context рдкрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

// some file with the locales
const locales = {
  en: {
    path: 'en',
    default: true,
  },
  pt: {
    path: 'pt',
  },
}
// gatsby-node.js
exports.onCreatePage = ({ page, boundActionCreators }) => {
  const { createPage, deletePage } = boundActionCreators

  return new Promise(resolve => {
    deletePage(page)

    Object.keys(locales).map(lang => {
      const localizedPath = locales[lang].default
        ? page.path
        : locales[lang].path + page.path

      return createPage({
        ...page,
        path: localizedPath,
        context: {
          locale: lang,
        },
      })
    })

    resolve()
  })
}

рдлрд┐рд░, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреГрд╖реНрда рдкрд░, рдореИрдВ рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓ рдХреЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХреНрд╡реЗрд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдореЗрдВ рд▓реЛрдХреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

рдорд╛рди рд▓реЗрдВ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ /data/home/en.js рдФрд░ /data/home/pt.js рдореЗрдВ рдШрд░реЗрд▓реВ рд╕рд╛рдордЧреНрд░реА рд╣реИ:

import React from 'react'

const IndexPage = ({ pathContext: { locale }, ...props }) => {
  const { childHomeJson: data } = props.data.allFile.edges[0].node

  return <div>{data.hello}</div>
}

export const query = graphql`
  query HomeContent($locale: String) {
    allFile(filter: { name: { eq: $locale } }) {
      edges {
        node {
          childHomeJson {
            hello
          }
        }
      }
    }
  }
`

export default IndexPage

netlifyCMS рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдЬрдм рддрдХ рдХрд┐ рд╡реЗ i18n рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ) рдФрд░ JSON рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЫрд╡рд┐рдпрд╛рдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдореЗрдВ рд╕рд╛рдкреЗрдХреНрд╖ рдкрде рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ NodeField рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ Gatsby рдХрд╛ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреЗ)

рдХреНрдпрд╛ рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ?

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

@pbrandone рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

@pbrandone рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕ рдХреНрд╡реЗрд░реА рдореЗрдВ IndexPage рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрдЪреНрдЪреЗ рдХреЗ рдШрдЯрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдЪрд╛рдмрд┐рдпреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдкреНрд░реЛрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рднреА рдШрдЯрдХреЛрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛?

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

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

@szimek рдареАрдХ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рд╛рдБред

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЗрдВрдЯрд▓ (рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп i18n рд▓рд╛рдЗрдмреНрд░реЗрд░реА) рдЬреЛрдбрд╝рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ:

// in src/components/layout/index.js

import React from 'react'
import { IntlProvider, addLocaleData } from 'react-intl'

// Locale data
import enData from 'react-intl/locale-data/en'
import ptData from 'react-intl/locale-data/pt'

// Messages
import en from '../../data/en.json'
import pt from '../../data/pt.json'

const messages = { en, pt }

addLocaleData([...enData, ...ptData])

const Layout = ({ locale, children }) => (
  <IntlProvider locale={locale} messages={messages[locale]}>
    {children}
  </IntlProvider>
)

export default Layout

рдФрд░ рдлрд┐рд░ рдкрдиреНрдиреЛрдВ рдкрд░:

import React from 'react'
import { FormattedMessage } from 'react-intl'

import Layout from '../components/layouts'

const IndexPage = ({ pathContext: { locale } }) => (
  <Layout locale={locale}>
    <FormattedMessage id="hello" />
  </Layout>
)

export default IndexPage

рд▓реЗрдХрд┐рди рддрдм рдЖрдк рдХрдИ JSON рдлрд╝рд╛рдЗрд▓реЛрдВ (рдЬреИрд╕реЗ рдкреНрд░рддрд┐ рдкреГрд╖реНрда) рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗ, рдФрд░ рди рд╣реА рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рднреА CMS рдбреЗрдЯрд╛ рдХреЛ рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓ рдХреА рд╢рдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдХреНрд╡реЗрд░реА рдФрд░ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрди JSON рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрде рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХреБрдВрдЬрд┐рдпрд╛рдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЬреЛ рдкреНрд░рддрд┐ рд╕реНрдерд╛рди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рдлрд┐рд░ рднреА рдЙрди рдкрд░ gatsby-image рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреА рд╣реИрдВред
рдФрд░ рдлрд┐рд░ рдЙрди JSON рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП netlify CMS рдЬреЛрдбрд╝реЗрдВ

Gatsby v2 рдХреЛ рдареАрдХ рд╕реЗ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ StaticQuery рдШрдЯрдХ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдмрд╛рд▓ рдШрдЯрдХреЛрдВ рдореЗрдВ рдХреНрд╡реЗрд░реА рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ рддреЛ рдХреЛрдИ рдореБрдЭреЗ рд╕рд╣реА рдХрд░реЗрдЧрд╛!)

рдЕрдЧрд░ рдРрд╕рд╛ рд╣реИ, рддреЛ рд╣рдо рд▓реЛрдХреЗрд▓ рдХреЛ рдХрд╣реАрдВ рднреА рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд┐рдПрдХреНрдЯ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд▓реЛрдХреЗрд▓ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдХреНрд╡реЗрд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@pbrandone рдЖрдк рд╕рд╣реА рд╣реИрдВ, рдпрд╣ рдЙрд╕ рддрд░рд╣ рд╕реЗ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдЕрддреАрдд рдореЗрдВ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдФрд░ рдЕрд╕рдлрд▓ рд╣реЛрдирд╛ рдпрд╛рдж рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдореБрдЭреЗ рдЧреИрдЯреНрд╕рдмреА рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреА рдПрдХ рдЕрдЪреНрдЫреА рд╕рдордЭ рдереА, рдореЗрд░реЗ рдкрд╛рд╕ рдЧреИрдЯреНрд╕рдмреА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдореЗрд░рд╛ react-intl рд╕реЗрдЯрдЕрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмрд┐рдирд╛ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рдЕрдм рдЖрдкрдХреЗ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ

@KyleAMathews рдореИрдВ рдЕрдкрдиреЗ рдкреЗрдЬ рдХреЛ react-intl рд╕реЗрдЯрдЕрдк рдФрд░ рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдмрддрд╛рдпрд╛ рдерд╛ рдХрд┐ рдореИрдВ Gatsby v1 - https://github.com/szimek/gatsby-react-intl-example рдореЗрдВ рднрд╛рд╖рд╛ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓реЗрдЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реВрдВ src/templates/Post.js рдШрдЯрдХ рд╣реЛрдЧрд╛ рдФрд░ рдлрд┐рд░ рднрд╛рд╖рд╛-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдШрдЯрдХ рдЬреИрд╕реЗ src/templates/Post.en.js , src/templates/Post.de.js рдЬреЛ рдХреЗрд╡рд▓ рднрд╛рд╖рд╛ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░реЗрдЧрд╛ рдФрд░ рднрд╛рд╖рд╛-рдЕрдЬреНрдЮреЗрдп рдШрдЯрдХ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдЧрд╛ред

рдЖрдкрдХреА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ (https://github.com/gatsbyjs/gatsby/issues/3853#issuecomment-367115380) рдЖрдкрдиреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдпрд╛ рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдШрдЯрдХ рдореЗрдВ рднрд╛рд╖рд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд╡реЗрд░реА рд╣реИред

рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ createPage рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп, рдореИрдВ рдЗрди рднрд╛рд╖рд╛-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдШрдЯрдХреЛрдВ (рдЬреИрд╕реЗ src/templates/Post.en.js ) рдХреЗ рдирд╛рдо component рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓ рдХреНрд╡реЗрд░реА рдореЗрдВ рд╣реИ рднрд╛рд╖рд╛-рдЕрдЬреНрдЮреЗрдп рдШрдЯрдХ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ __ рдмрд┐рд▓реНрдХреБрд▓ рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИ__ (рдпрд╣ locale рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ context рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ)ред рдореИрдВ рдЗрди рд╕рднреА рднрд╛рд╖рд╛-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдШрдЯрдХреЛрдВ рдореЗрдВ рдареАрдХ рдЙрд╕реА рдХреНрд╡реЗрд░реА рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

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

рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдмрд╣реБ-рднрд╛рд╖рд╛ url рдорд╛рд░реНрдЧреЛрдВ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рднрд╛рд╖рд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ Gatsby рд╕реНрдЯрд╛рд░реНрдЯрд░ рдЬреЛрдбрд╝рд╛ рд╣реИред (рдкреНрд░рджрд░реНрд╢рди)

рдЧреИрдЯреНрд╕рдмреА-рд╕реНрдЯрд╛рд░реНрдЯрд░-рдбрд┐рдлреЙрд▓реНрдЯ-рдЗрдВрдЯрд▓

рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:

@wiziple рдзрдиреНрдпрд╡рд╛рдж! рдпрд╣ рд╡рд╛рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдЖрдк рдРрд╕рд╛ рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: https://github.com/wiziple/gatsby-starter-default-intl/blob/master/src/i18n/withIntl.js#L38 ;) рдЙрдореНрдореАрдж рд╣реИ, рдпрд╣ рдЕрднреА рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд╡реЗрдмрдкреИрдХ 4 рдореЗрдВ...

рдХреНрдпрд╛ рдпрд╣рд╛рдВ рдЙрд╕реА рддрд░рд╣ рд▓реЛрдХреЗрд▓ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ https://github.com/wiziple/gatsby-starter-default-intl/blob/master/src/i18n/withIntl.js#L6 ? рд╣рдо 6 (рдЬрд▓реНрдж рд╣реА 7 рднрд╛рд╖рд╛рдУрдВ) рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдореИрдВ рдХреЗрд╡рд▓ рдЙрд╕реА рдХреЛ рд▓реЛрдб рдХрд░ рд╕рдХреВрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдореИрдВ рдкреЗрдЬ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред рдпрджрд┐ рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рддреЛ рдпрд╣ рдХреЛрдИ рдмрдбрд╝реА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ - рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдпреЗ рд╕реНрдерд╛рдиреАрдп рдбреЗрдЯрд╛ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЫреЛрдЯреА рд╣реИрдВред

рдореБрдЭреЗ рдпрд╣ рднреА рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдЗрди рдкреГрд╖реНрдареЛрдВ рдХреЛ рдХреИрд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдХрд╛ рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдХреЛрдИ рдПрдХ "рд╕реНрд░реЛрдд" рднрд╛рд╖рд╛ рдирд╣реАрдВ рд╣реИ), рдЗрд╕рд▓рд┐рдП onCreatePage рд╕рд╛рде рд╕рдорд╛рдзрд╛рди рд╢рд╛рдпрдж рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВред

рдЙрдореНрдореАрдж рд╣реИ, рдпрд╣ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд░ рднрд╛рд╖рд╛-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреГрд╖реНрда рдШрдЯрдХ рдореЗрдВ рд╕рдорд╛рди рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓ рдХреНрд╡реЗрд░реА рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд░реЗрдЧрд╛ред

@szimek
рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рд╡реЗрдмрд╕рд╛рдЗрдЯ рдореЗрдВ 14 рднрд╛рд╖рд╛рдПрдБ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ рдлрд╝рд╛рдЗрд▓ 12-15 KB рдХреА рд╣реИред рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рд╣рдореЗрдВ SEO рдбреЗрдЯрд╛ рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдб рдЯрд╛рдЗрдо рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ рд░рд╛рдЙрдЯрд░ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рднрд╛рд╖рд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рддреЛ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕реЗ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реВрдВред

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдХрднреА-рдХрднреА рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдХреЛ рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛрддрд╛ рд╣реИред рдЖрдк onCreatePage рдореЗрдВ gatsby-node.js рдХреБрдЫ рдЕрдкрд╡рд╛рдж рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВрдиреЗ рднрд╛рд╖рд╛ рд░рд╛рдЙрдЯрд░ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдЕрдиреБрд╡рд╛рджрд┐рдд рднрд╛рд╖рд╛ рдХреА рдкреЗрд╢рдХрд╢ рди рдХрд░рдХреЗ рдмрд╕ рд╣рд▓ рдХрд┐рдпрд╛ред рдЖрдк рд╕реНрдЯрд╛рд░реНрдЯрд░ README.md рд╕реЗ рдкреНрд░реЛрдбрдХреНрд╢рди рдкрд░ рд╢реЛрдХреЗрд╕ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@wiziple рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

рдореИрдВрдиреЗ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓ require рдЪрд╛рд▓ рдХреЗ рд╕рд╛рде рдЖрдкрдХреЗ withIntl рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ (рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдиреБрдХрд╕рд╛рди рд╣реИ рдпрд╛ рдирд╣реАрдВ) рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдиреЗ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рджрд┐рдпрд╛ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдореИрдВ рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣рд╛ рдерд╛ - рдПрдХ рд╣реА рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓ рдХреНрд╡реЗрд░реА рдХреЛ рдПрдХрд╛рдзрд┐рдХ рднрд╛рд╖рд╛-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреГрд╖реНрда рдШрдЯрдХреЛрдВ рдореЗрдВ рдХреИрд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВ - рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреГрд╖реНрда рдШрдЯрдХ рд╣реЛрдиреЗ рд╕реЗред

@wiziple рд░реЗрдкреЛ рд╢реЗрдпрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рд╕рд╣реА рд░рд╛рд╕реНрддреЗ рдкрд░ рд▓реЗ рдЖрдпрд╛

рд▓рд┐рдВрдЧреБрдИ рдПрдХ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ @dcroitoru рдХреЛ рдПрдХ рдмреЗрд╣рддрд░реАрди рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рдкрд╣рдЪрд╛рди рдорд┐рд▓реА рд╣реИред рдЗрд╕реЗ Gatsby 2.0 рдореЗрдВ рдзрдХреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдереЛрдбрд╝реЗ рд╕реЗ рдкреНрдпрд╛рд░ рдХреА рдЬрд░реВрд░рдд рд╣реИ

рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рд▓рд┐рдВрдЧреБрдИ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрднреА рднреА рдПрдХ рдкреВрд░реНрдг рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЧреИрдЯреНрд╕рдмреА рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде, рд▓реЗрдХрд┐рди рд▓рд┐рдВрдЧреБрдИ рдХреЗ рд╕рд╛рде рднреАред рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╕реНрдЯрд╛рд░реНрдЯрд░ рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рд╣реИ рдФрд░ рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдЬрдм рдореИрдВрдиреЗ рдЬрд╛рдВрдЪ рдХреА рдереА рддреЛ рдХреБрдЫ рд╕реБрд╡рд┐рдзрд╛рдПрдВ рдЧрд╛рдпрдм рдереАрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдлреНрд▓рд╛рдИ рдкрд░ рд▓рд┐рдВрдЧреБрдИ рд╕рдВрдХрд▓рди рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛)ред рд▓рд┐рдВрдЧреБрдИ рдХреЗ рд▓реЗрдЦрдХ @tricoder42 рдиреЗ рдХрд╣рд╛ рдХрд┐ рдЬрдм рд▓рд┐рдВрдЧреБрдИ v3 (рдЬреЛ рдЬрд▓реНрдж рд╣реА рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ) рдХреЗ рдмрд╛рд╣рд░ рд╣реЛрдиреЗ рдкрд░ рд╡рд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред

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

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

рдмрд╕ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдмрдирд╛рдпрд╛ рд╣реИ: https://github.com/smakosh/gatsby-starter-i18n
рд▓реЗрдЦ: https://dev.to/smakosh/implement-i18n-to-a-gatsby-site-5ala

рдореИрдВрдиреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдп рдПрдХреАрдХрд░рдг рдХреЗ рд╕рд╛рде рджреЛ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдП рд╣реИрдВ

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

рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЧрдП рдкреГрд╖реНрда/рднрд╛рд╖рд╛ рд╕рдВрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЕрдиреБрд░реЛрдзрд┐рдд рдЕрдиреБрд╡рд╛рдж рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

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

https://github.com/gatsbyjs/gatsby/issues/3853#issuecomment -395432693 (рдпрджреНрдпрдкрд┐ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЧрд╣рд░рд╛рдИ рдореЗрдВ) рдХреЗ рд╕рд╛рде рдПрдХ рддреНрд╡рд░рд┐рдд рдорд╛рдзреНрдпрдо рдкреЛрд╕реНрдЯ рднреА рдмрдирд╛рдпрд╛ (рдФрд░ рдЗрд╕реЗ рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд░рдирд╛ рднреВрд▓ рдЧрдпрд╛)ред

https://blog.significa.pt/i18n-with-gatsby-528607b4da81 рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП

30 рджрд┐рдиреЛрдВ рдХреА рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рдХреЗ рдмрд╛рдж рдкреБрд░рд╛рдиреЗ рдореБрджреНрджреЗ рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рдпрд╣ рдореБрджреНрджрд╛ 20 рджрд┐рдиреЛрдВ рд╕реЗ рд╢рд╛рдВрдд рд╣реИ рдФрд░ рдЗрд╕реЗ рдкреБрд░рд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЦреБрд▓рд╛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ "рдмрд╛рд╕реА рдирд╣реАрдВ" рд▓реЗрдмрд▓ рдЬреЛрдбрд╝реЗрдВ!

рд╣реЗрд▓реЛ рджреЛрд╕реНрддреЛрдВ, рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ

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

рдбреЗрдореЛ: https://gatsby-starter-default-intl.netlify.com

  • рдЖрдЙрдЯ рдСрдлрд╝ рдмреЙрдХреНрд╕ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг-рдврд╛рдВрдЪрд╛ react-intl рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд

  • рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкрд╕рдВрджреАрджрд╛ рднрд╛рд╖рд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ

  • рдПрдХрд▓ рдкреГрд╖реНрда рдШрдЯрдХ рдореЗрдВ рдмрд╣реБ-рднрд╛рд╖рд╛ url рдорд╛рд░реНрдЧреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдкрдХреЛ pages/en/index.js рдпрд╛ pages/ko/index.js рдЬреИрд╕реЗ рдЕрд▓рдЧ рдкреГрд╖реНрда рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

  • рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдореЗрдВ рд╕реЗ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдиреЗ рдКрдкрд░ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ, рдЕрдм рдпрд╣ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдХреЗ рджреМрд░рд╛рди рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рднрд╛рд╖рд╛ рдХреЛ рдмрдВрдбрд▓ рдХрд░рддрд╛ рд╣реИред

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

рд╣реЗрд▓реЛ рджреЛрд╕реНрддреЛрдВ, рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ

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

рдбреЗрдореЛ: https://gatsby-starter-default-intl.netlify.com

  • рдЖрдЙрдЯ рдСрдлрд╝ рдмреЙрдХреНрд╕ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг-рдврд╛рдВрдЪрд╛ react-intl рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд
  • рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкрд╕рдВрджреАрджрд╛ рднрд╛рд╖рд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ
  • рдПрдХрд▓ рдкреГрд╖реНрда рдШрдЯрдХ рдореЗрдВ рдмрд╣реБ-рднрд╛рд╖рд╛ url рдорд╛рд░реНрдЧреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдкрдХреЛ pages/en/index.js рдпрд╛ pages/ko/index.js рдЬреИрд╕реЗ рдЕрд▓рдЧ рдкреГрд╖реНрда рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
  • рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдореЗрдВ рд╕реЗ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдиреЗ рдКрдкрд░ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ, рдЕрдм рдпрд╣ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдХреЗ рджреМрд░рд╛рди рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рднрд╛рд╖рд╛ рдХреЛ рдмрдВрдбрд▓ рдХрд░рддрд╛ рд╣реИред

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

рдЕрд░реЗ @wiziple рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдмрд╛рдд рд╕рдордЭ рдореЗрдВ рди рдЖрдИ рд╣реЛ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рд┐рд░реНрдл рдПрдХ рдлрд╛рдЗрд▓ рдореЗрдВ рдПрдХ рднрд╛рд╖рд╛ рдХреЗ рд╕рднреА рддрд╛рд░ рд╣реИрдВ?
рдХреНрдпрд╛ рдШрдЯрдХреЛрдВ рдХреА рд╕рдорд╛рди рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ рдХреЗ JSON рдХреЛ рдЕрдзрд┐рдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛?

@ cant89 рдореИрдВ рдЖрдкрдХреА рдмрд╛рдд gatsby develop рдпрд╛ gatsby build рдореЗрдВ рд╣реБрдХ рдХрд░реЗрдВред
рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рд╕рднреА JSON рдлрд╝рд╛рдЗрд▓реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдорд░реНрдЬ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдПрдХ рдлрд╝реНрд▓реИрдЯрди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
https://github.com/yahoo/react-intl/wiki/Upgrad-Guide#flatten -messages-object

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ i18n рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╕реЗрдЯрдЕрдк рд╣реИред https://github.com/gatsbyjs/gatsby/tree/master/examples/using-i18nред рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ i18n рдврд╛рдВрдЪреЗ рдкрд░ рдХреЛрдИ рд░рд╛рдп рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВред рдмрд╕ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рдПрдХ рдЪреБрдиреЗрдВред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ i18n рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╕реЗрдЯрдЕрдк рд╣реИред https://github.com/gatsbyjs/gatsby/tree/master/examples/using-i18nред рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ i18n рдврд╛рдВрдЪреЗ рдкрд░ рдХреЛрдИ рд░рд╛рдп рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВред рдмрд╕ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рдПрдХ рдЪреБрдиреЗрдВред

рдмрдврд╝рд┐рдпрд╛, рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реВрдБ!
рд╡реИрд╕реЗ рднреА рд░реАрдбрдореА рдкрд░ рд▓рд┐рдВрдХ рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИ, рд╢рд╛рдпрдж рдЖрдкрдХрд╛ рдорддрд▓рдм https://using-i18n.netlify.com/ рд╣реИ ?

@wardpeet рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╕реНрдерд┐рд░ рдЕрдиреБрд╡рд╛рджрд┐рдд рддрд╛рд░ (рдмрд┐рд▓реНрдб рдЯрд╛рдЗрдо рдкрд░) рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ? рдпрд╛ рдпрд╣ рд░рдирдЯрд╛рдЗрдо рдХреЗ рджреМрд░рд╛рди рдЯреЗрдХреНрд╕реНрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ?

@monsieurnebo рдмрд┐рд▓реНрдб рдЯрд╛рдЗрдо рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ

@ cant89 рд╣рдо рдЕрднреА рднреА рдбреАрдПрдирдПрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрднреА рдХреЗ рд▓рд┐рдП рдЬрд▓реНрдж рд╣реА рддреИрдпрд╛рд░ рд╣реИ-i18n.netlify.com/ рд╕рд╣реА рд▓рд┐рдВрдХ рд╣реИред

@monsieurnebo рдпрд╣ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдордп рдкрд░ рд╣реИред рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреА рдПрдХ рдкреНрд░рддрд┐ рдмрдирд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕рдм рдХреБрдЫ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рддреЗрдЬ рд░рд╣рддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рдм рдХреБрдЫ рд╕рд┐рд░реНрдл рдПрдХ .html рд╣реИред

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдФрд░ рдХрд╣рд╛рдВ рдкреВрдЫрдирд╛ рд╣реИ рд▓реЗрдХрд┐рди рдереЛрдбрд╝рд╛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред рдХреНрдпрд╛ рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдкреНрд▓рдЧрдЗрди рдЧреИрдЯреНрд╕рдмреА рдХреЗ pathPrefix рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ?

i.e. 
// gatsby-config.js

modules.exports = {
    pathPrefix: 'bar'
}

https://foo.com => https://foo.com/bar

but now my language locales will now be https://foo.com/bar/de-DE/
when I think I would prefer it be https://foo.com/de-DE/bar if that makes sense.

рд╣рдореНрдо рджрд┐рд▓рдЪрд╕реНрдк, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреВрд░реНрд╡ рдЖрдорддреМрд░ рдкрд░ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкрдердкреНрд░рд┐рдлрд╝рд┐рдХреНрд╕ рдЖрдкрдХреЗ рдбреЛрдореЗрди рдХреЛ domain.com/prefix рдмрдирд╛рдиреЗ рдХреА рддрд░рд╣ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдЖрдк рдПрдХ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ Gatsby рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд░реВрдЯ рдХреЛ рдмрджрд▓рдирд╛, рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдПрдХ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрджрд┐ рдЖрдк рдЙрдкрд╕рд░реНрдЧ рдХреЛ рдмрджрд▓рдиреЗ рд╡рд╛рд▓реА рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рднрд╛рд╖рд╛ рдЗрд╕реЗ рддреЛрдбрд╝ рджреЗрдЧреАред

рдЕрдм рд╕рд╡рд╛рд▓ рдЖрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ pathPrefix рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рд╕рдВрджрд░реНрдн: рдкрдердкреНрд░реАрдлрд┐рдХреНрд╕ рдбреЙрдХреНрд╕

рдирдорд╕реНрддреЗ,

рдпрд╣рд╛рдБ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЪрд░реНрдЪрд╛рдПрдБ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рдЧреИрдЯреНрд╕рдмреА рд╕рд╛рдЗрдЯ рдХреЛ i18n рдХрд░реЗрдВред рд▓реЗрдХрд┐рди POC рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдФрд░ рдПрдХ рдЕрдиреБрдХреВрд▓рд┐рдд рдЙрддреНрдкрд╛рджрди рддреИрдпрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рд╣реЛрдиреЗ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рд╣реИред

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

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

benstr picture benstr  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dustinhorton picture dustinhorton  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dustinhorton picture dustinhorton  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

signalwerk picture signalwerk  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ghost picture ghost  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ