рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг Node.js. рднрд╛рдЧ 3: рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг

рдПрдХ рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ: рдпрд╣ рдореЛрдЬрд╝рд┐рд▓рд╛ рдЖрдЗрдбреЗрдВрдЯрд┐рдЯреА рдЯреАрдо рд╕реЗ Node.js рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЧреНрдпрд╛рд░рд╣рд╡рд╛рдВ рд▓реЗрдЦ рд╣реИ, рдЬреЛ рдкрд░реНрд╕реЛрдирд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред

рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рднреА рд▓реЗрдЦ:
  1. " Node.js рдореЗрдВ рдореЗрдореЛрд░реА рд▓реАрдХ рдХреЗ рд▓рд┐рдП рд╢рд┐рдХрд╛рд░ "
  2. "рд╣рдо рдиреЛрдб рдХреЛ рдиреЗрддреНрд░рдЧреЛрд▓рдХ рдореЗрдВ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ "
  3. " рд╣рдо рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд╕рддреНрд░реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ "
  4. " рдлреНрд░рдВрдЯ рдПрдВрдб рдкрд░рдлреЙрд░рдореЗрдВрд╕ред рдкрд╛рд░реНрдЯ 1 - рдХреЙрдирд╕реЗрдиреНрдЯреЗрд╢рди, рдХрдореНрдкреНрд░реЗрд╢рди, рдХреИрд╢рд┐рдВрдЧ "
  5. " рд╣рдо рдПрдХ рд╕рд░реНрд╡рд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬреЛ рд▓реЛрдб рдХреЗ рддрд╣рдд рдХреНрд░реИрд╢ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ "
  6. " рдлреНрд░рдВрдЯ рдПрдВрдб рдкрд░рдлреЙрд░реНрдореЗрдВрд╕ред рдкрд╛рд░реНрдЯ 2 - рдХреИрдЯреЗрдЧрд┐рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд╛рдпрдирд╛рдорд┐рдХ рдХрдВрдЯреЗрдВрдЯ рдХреИрд╢рд┐рдВрдЧ "
  7. " рдиреЛрдб-рджреЛрд╖реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЫреЗрдбрд╝рдирд╛ "
  8. " рдлреНрд░рдВрдЯ рдПрдВрдб рдкрд░рдлреЙрд░реНрдореЗрдВрд╕ред рдкрд╛рд░реНрдЯ 3 - рдлреЙрдиреНрдЯ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди "
  9. " рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдиреЛрдбреНрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рднрд╛рдЧ 1 "
  10. " рд╕реНрдерд╛рдиреАрдпрдХрд░рдг Node.js. рдЕрдиреБрдкреНрд░рдпреЛрдЧ рднрд╛рдЧ 2: рдЯреВрд▓рдХрд┐рдЯ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ "
  11. " рд╕реНрдерд╛рдиреАрдпрдХрд░рдг Node.js. рдЕрдиреБрдкреНрд░рдпреЛрдЧ рднрд╛рдЧ 3: рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг "
  12. " Awsbox - рдЕрдореЗрдЬрд╝рди рдХреНрд▓рд╛рдЙрдб рдкрд░ Node.js рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП Paas рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ "





рддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


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

рдЕрдм рд╕реНрдерд╛рдиреАрдп рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП рд╣рдорд╛рд░рд╛ Node.js рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдкреЛ-рдлрд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░реВрдк рдореЗрдВ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╣реИрдВ:

locale en LC_MESSAGES messages.po de LC_MESSAGES messages.po es LC_MESSAGES messages.po 

рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди, рд╣рдореЗрдВ рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдЕрдиреБрд╡рд╛рджрд┐рдд рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ:


рдЗрди рджреЛрдиреЛрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рддрд╛рд░ JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╣реЛрдВред рд╕рд░реНрд╡рд░ рдХреА рдУрд░ рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдХрд░рддреЗ рд╕рдордп, рдЙрдиреНрд╣реЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ (рдпрд╛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдПрдХ рдЫреЛрдЯрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред

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

рдЖрдЧреЗ рд╣рдо рдкрд╣рд▓реА рд╡рд┐рдзрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ i18n-abide рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдкрд░рд┐рдЪрд┐рдд рддрд░реАрдХрд╛ рд╣реИред

рд╕рдВрдХрд▓рди json


рд╣рдо рдкреЛ рдлрд╛рдЗрд▓реНрд╕ рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреИрд╕реЗ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ JSON рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рд▓реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ? рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдВрдХрд▓рди-рдЬреЛрдВрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реА рдЕрдиреБрд╡рд╛рдж рдлрд╛рдЗрд▓реЗрдВ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрдбрд╝ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реИрдВ, рдФрд░ JSON рдлрд╛рдЗрд▓реЗрдВ рд╕реНрдерд┐рд░ / i18 рдореЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:

 $ mkdir -p static/i18n $ ./node_modules/.bin/compile-json locale static/i18n 

рд╣рдореЗрдВ рдирд┐рдореНрди рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛ рдорд┐рд▓рддреА рд╣реИ:

 static i18n en messages.json messages.js de messages.json messages.js es messages.json messages.js 

compile-json рд╕рднреА po-files рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП po2json.js рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрдмрдВрдзрд┐рдд .json рдФрд░ .js рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрдкреЗрдирд┐рд╢ рдЕрдиреБрд╡рд╛рдж рд▓реЗрдВ:

 # Spanish translations for PACKAGE package. # Copyright (C) 2013 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Austin King <ozten@localhost>, 2013. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-06-24 09:50+0200\n" "PO-Revision-Date: 2013-04-24 16:42-0700\n" "Last-Translator: Austin King <ozten@nutria.localdomain>\n" "Language-Team: Spanish\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: /home/ozten/abide-demo/views/homepage.ejs:3 msgid "Mozilla Persona" msgstr "Mozilla Personidada" 

рд╡рд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 "messages": { "": { "Project-Id-Version": " PACKAGE VERSION\nReport-Msgid-Bugs-To: \nPOT-Creation-Date: 2012-06-24 09:50+0200\nPO-Revision-Date: 2013-04-24 16:42-0700\nLast-Translator: Austin King <ozten@nutria.localdomain>\nLanguage-Team: German\nLanguage: de\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nPlural-Forms: nplurals=2; plural=(n != 1);\n" }, "Mozilla Persona": [ null, "Mozilla Personidada" ] } } 

рд╣рдо рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░, Node.js рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ, рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░, рдЗрд╕реЗ рдЕрдЬрд╛рдХреНрд╕ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рдЦреАрдВрдЪ рдХрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЦреБрд▓реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реНрдкреЗрдирд┐рд╢ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓ /i18n/es/messages.json рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд╕реНрдерд┐рд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдврд╛рдВрдЪреЗ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдордЭреМрддрд╛ рд╣реИ, рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк Node.js рдФрд░ рдХрд┐рд╕реА рднреА рд╡реЗрдм рд╕рд░реНрд╡рд░, рдЬреИрд╕реЗ рдХрд┐ Nginx, рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрд╡рд╛рдж рдлрд╛рдЗрд▓реЗрдВ рдЬрдорд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

рд╡рд┐рдиреНрдпрд╛рд╕

i18n-abide рдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реА рднрд╛рд╖рд╛рдПрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ рдФрд░ рдХрд╣рд╛рдВ рдЕрдиреБрд╡рд╛рдж рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

 app.use(i18n.abide({ supported_languages: ['en-US', 'de', 'es', 'zh-TW'], default_lang: 'en-US', translation_directory: 'static/i18n' })); 


рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЯреНрд░рд╛рдВрд╕рд▓реЗрд╢рди_рдирд┐рд░реНрджреЗрд╢рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рдЧреЗрдЯрдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред

i18n-abide рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рдЙрдкрдпреБрдХреНрдд support_languages тАЛтАЛрдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕реЗ рдЪреБрдирдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛ред

рд╣рдо рдореЛрдЯрд░реНрд╕ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ


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

рдЫрд╡рд┐

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

рдЫрд╡рд┐

рдЧреЙрдмрд▓реНрдбреАрдЧреБрдХ


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

рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдПрдХ рд▓реЛрдХреЗрд▓ рдЬреЛрдбрд╝реЗрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╡рд╛рдж рдЕрднреА рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рдорд░реНрдерд┐рдд-languages тАЛтАЛрдФрд░ debug_lang рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ CH рд╣реИ:

 app.use(i18n.abide({ supported_languages: ['en-US', 'de', 'es', 'zh-TW', 'it-CH'], debug_lang: 'it-CH', ... 

рдЕрдм, рдпрджрд┐ рдЖрдк рд╕реНрд╡рд┐рд╕ рдЗрддрд╛рд▓рд╡реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ i18n-abide рдЗрд╕ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП gobbledygook рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред

рдЫрд╡рд┐

рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рд╕рд╛рдЗрдЯ рдбрд┐рдЬрд╝рд╛рдЗрди рджрд╛рдИрдВ рд╕реЗ рдмрд╛рдИрдВ рдУрд░ рд╡рд░реНрддрдиреА рдХреЗ рд╕рд╛рде рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рд┐рдмреНрд░реВ:

рдЫрд╡рд┐

рдЧрд╣рд░рд╛ рдЬрд╛рдУ


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

рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдВрдЯрд░рдкреЛрд▓реЗрд╢рди

I18n-abide рдореЗрдВ рдПрдХ рдкреНрд░рд╛рд░реВрдк рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдФрд░ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рджреЛрдиреЛрдВ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╕реНрд╡рд░реВрдкрд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рд░рди рдЯрд╛рдЗрдо рдкрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рдиреЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рджреЛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


рдлреЙрд░реНрдореЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ HTML рдорд╛рд░реНрдХрдЕрдк рдХреЗ рд╕рд╛рде рдкреАрдУрдПрд▓-рдлрд╛рдЗрд▓ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддреАрди рдЙрджрд╛рд╣рд░рдг рд▓реЗрдВ:

 <%= gettext('<p>Buy <a href="/buy?prod=blue&type=ticket">Blue Tickets</a> Now!</p>') %> <p><%= format(gettext('Buy <a href="%s">Blue Tickets</a> Now!'), ['/buy?prod=blue&type=ticket']) %></p> <p><%= format(gettext('Buy <a href="%(url)s">Blue Tickets</a> Now!'), {url: '/buy?prod=blue&type=ticket'}) %></p> 

рдкреЛ-рдлрд╛рдЗрд▓ рдореЗрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдиреЗрдВ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреА:

 msgid "<p>Buy <a href=\"/buy?prod=blue&type=ticket\">Blue Tickets</a> Now!</p>" msgid "Buy <a href="%s">Blue Tickets</a> Now!" msgid "Buy <a href="%(url)s">Blue Tickets</a> Now!" 

рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдПрдХ рдЯреИрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИ
 . !   -  ,      .    URL. 

format , , HTML, , .

, . , URL. - .

- , :

<p><%= format(gettext('Welcome back, %(user_name)s'), {user_name: user.name}) %></p>

, .

. CSS, .

CSS. . , .


. , 100%- , , .

, . .

, .


: " Node.js " " Node " " , " " . 1 тАФ , , " " , " " . 2 тАФ etagify " " - node-convict " " . 3 тАФ " " Node.js. 1 " " Node.js. 2: " " Node.js. 3: " " Awsbox - PaaS- Node.js Amazon "
. ! - , . URL.

format , , HTML, , .

, . , URL. - .

- , :

<p><%= format(gettext('Welcome back, %(user_name)s'), {user_name: user.name}) %></p>


, .

. CSS, .

CSS. . , .


. , 100%- , , .

, . .

, .


: " Node.js " " Node " " , " " . 1 тАФ , , " " , " " . 2 тАФ etagify " " - node-convict " " . 3 тАФ " " Node.js. 1 " " Node.js. 2: " " Node.js. 3: " " Awsbox - PaaS- Node.js Amazon "
. ! - , . URL.

format , , HTML, , .

, . , URL. - .

- , :

<p><%= format(gettext('Welcome back, %(user_name)s'), {user_name: user.name}) %></p>


, .

. CSS, .

CSS. . , .


. , 100%- , , .

, . .

, .


: " Node.js " " Node " " , " " . 1 тАФ , , " " , " " . 2 тАФ etagify " " - node-convict " " . 3 тАФ " " Node.js. 1 " " Node.js. 2: " " Node.js. 3: " " Awsbox - PaaS- Node.js Amazon "
. ! - , . URL.

format , , HTML, , .

, . , URL. - .

- , :

<p><%= format(gettext('Welcome back, %(user_name)s'), {user_name: user.name}) %></p>


, .

. CSS, .

CSS. . , .


. , 100%- , , .

, . .

, .


: " Node.js " " Node " " , " " . 1 тАФ , , " " , " " . 2 тАФ etagify " " - node-convict " " . 3 тАФ " " Node.js. 1 " " Node.js. 2: " " Node.js. 3: " " Awsbox - PaaS- Node.js Amazon "
. ! - , . URL.

format , , HTML, , .

, . , URL. - .

- , :

<p><%= format(gettext('Welcome back, %(user_name)s'), {user_name: user.name}) %></p>


, .

. CSS, .

CSS. . , .


. , 100%- , , .

, . .

, .


: " Node.js " " Node " " , " " . 1 тАФ , , " " , " " . 2 тАФ etagify " " - node-convict " " . 3 тАФ " " Node.js. 1 " " Node.js. 2: " " Node.js. 3: " " Awsbox - PaaS- Node.js Amazon "
. ! - , . URL.

format , , HTML, , .

, . , URL. - .

- , :

<p><%= format(gettext('Welcome back, %(user_name)s'), {user_name: user.name}) %></p>


, .

. CSS, .

CSS. . , .


. , 100%- , , .

, . .

, .


: " Node.js " " Node " " , " " . 1 тАФ , , " " , " " . 2 тАФ etagify " " - node-convict " " . 3 тАФ " " Node.js. 1 " " Node.js. 2: " " Node.js. 3: " " Awsbox - PaaS- Node.js Amazon "

. ! - , . URL.

format , , HTML, , .

, . , URL. - .

- , :

<p><%= format(gettext('Welcome back, %(user_name)s'), {user_name: user.name}) %></p>


, .

. CSS, .

CSS. . , .


. , 100%- , , .

, . .

, .


: " Node.js " " Node " " , " " . 1 тАФ , , " " , " " . 2 тАФ etagify " " - node-convict " " . 3 тАФ " " Node.js. 1 " " Node.js. 2: " " Node.js. 3: " " Awsbox - PaaS- Node.js Amazon "
. ! - , . URL.

format , , HTML, , .

, . , URL. - .

- , :

<p><%= format(gettext('Welcome back, %(user_name)s'), {user_name: user.name}) %></p>


, .

. CSS, .

CSS. . , .


. , 100%- , , .

, . .

, .


: " Node.js " " Node " " , " " . 1 тАФ , , " " , " " . 2 тАФ etagify " " - node-convict " " . 3 тАФ " " Node.js. 1 " " Node.js. 2: " " Node.js. 3: " " Awsbox - PaaS- Node.js Amazon "
  1. . ! - , . URL.

    format , , HTML, , .

    , . , URL. - .

    - , :

    <p><%= format(gettext('Welcome back, %(user_name)s'), {user_name: user.name}) %></p>


    , .

    . CSS, .

    CSS. . , .


    . , 100%- , , .

    , . .

    , .


    : " Node.js " " Node " " , " " . 1 тАФ , , " " , " " . 2 тАФ etagify " " - node-convict " " . 3 тАФ " " Node.js. 1 " " Node.js. 2: " " Node.js. 3: " " Awsbox - PaaS- Node.js Amazon "
  2. . ! - , . URL.

    format , , HTML, , .

    , . , URL. - .

    - , :

    <p><%= format(gettext('Welcome back, %(user_name)s'), {user_name: user.name}) %></p>


    , .

    . CSS, .

    CSS. . , .


    . , 100%- , , .

    , . .

    , .


    : " Node.js " " Node " " , " " . 1 тАФ , , " " , " " . 2 тАФ etagify " " - node-convict " " . 3 тАФ " " Node.js. 1 " " Node.js. 2: " " Node.js. 3: " " Awsbox - PaaS- Node.js Amazon "
  3. . ! - , . URL.

    format , , HTML, , .

    , . , URL. - .

    - , :

    <p><%= format(gettext('Welcome back, %(user_name)s'), {user_name: user.name}) %></p>


    , .

    . CSS, .

    CSS. . , .


    . , 100%- , , .

    , . .

    , .


    : " Node.js " " Node " " , " " . 1 тАФ , , " " , " " . 2 тАФ etagify " " - node-convict " " . 3 тАФ " " Node.js. 1 " " Node.js. 2: " " Node.js. 3: " " Awsbox - PaaS- Node.js Amazon "
  4. . ! - , . URL.

    format , , HTML, , .

    , . , URL. - .

    - , :

    <p><%= format(gettext('Welcome back, %(user_name)s'), {user_name: user.name}) %></p>


    , .

    . CSS, .

    CSS. . , .


    . , 100%- , , .

    , . .

    , .


    : " Node.js " " Node " " , " " . 1 тАФ , , " " , " " . 2 тАФ etagify " " - node-convict " " . 3 тАФ " " Node.js. 1 " " Node.js. 2: " " Node.js. 3: " " Awsbox - PaaS- Node.js Amazon "
  5. . ! - , . URL.

    format , , HTML, , .

    , . , URL. - .

    - , :

    <p><%= format(gettext('Welcome back, %(user_name)s'), {user_name: user.name}) %></p>


    , .

    . CSS, .

    CSS. . , .


    . , 100%- , , .

    , . .

    , .


    : " Node.js " " Node " " , " " . 1 тАФ , , " " , " " . 2 тАФ etagify " " - node-convict " " . 3 тАФ " " Node.js. 1 " " Node.js. 2: " " Node.js. 3: " " Awsbox - PaaS- Node.js Amazon "
  6. . ! - , . URL.

    format , , HTML, , .

    , . , URL. - .

    - , :

    <p><%= format(gettext('Welcome back, %(user_name)s'), {user_name: user.name}) %></p>


    , .

    . CSS, .

    CSS. . , .


    . , 100%- , , .

    , . .

    , .


    : " Node.js " " Node " " , " " . 1 тАФ , , " " , " " . 2 тАФ etagify " " - node-convict " " . 3 тАФ " " Node.js. 1 " " Node.js. 2: " " Node.js. 3: " " Awsbox - PaaS- Node.js Amazon "
  7. . ! - , . URL.

    format , , HTML, , .

    , . , URL. - .

    - , :

    <p><%= format(gettext('Welcome back, %(user_name)s'), {user_name: user.name}) %></p>


    , .

    . CSS, .

    CSS. . , .


    . , 100%- , , .

    , . .

    , .


    : " Node.js " " Node " " , " " . 1 тАФ , , " " , " " . 2 тАФ etagify " " - node-convict " " . 3 тАФ " " Node.js. 1 " " Node.js. 2: " " Node.js. 3: " " Awsbox - PaaS- Node.js Amazon "
  8. . ! - , . URL.

    format , , HTML, , .

    , . , URL. - .

    - , :

    <p><%= format(gettext('Welcome back, %(user_name)s'), {user_name: user.name}) %></p>


    , .

    . CSS, .

    CSS. . , .


    . , 100%- , , .

    , . .

    , .


    : " Node.js " " Node " " , " " . 1 тАФ , , " " , " " . 2 тАФ etagify " " - node-convict " " . 3 тАФ " " Node.js. 1 " " Node.js. 2: " " Node.js. 3: " " Awsbox - PaaS- Node.js Amazon "
  9. . ! - , . URL.

    format , , HTML, , .

    , . , URL. - .

    - , :

    <p><%= format(gettext('Welcome back, %(user_name)s'), {user_name: user.name}) %></p>


    , .

    . CSS, .

    CSS. . , .


    . , 100%- , , .

    , . .

    , .


    : " Node.js " " Node " " , " " . 1 тАФ , , " " , " " . 2 тАФ etagify " " - node-convict " " . 3 тАФ " " Node.js. 1 " " Node.js. 2: " " Node.js. 3: " " Awsbox - PaaS- Node.js Amazon "
  10. . ! - , . URL.

    format , , HTML, , .

    , . , URL. - .

    - , :

    <p><%= format(gettext('Welcome back, %(user_name)s'), {user_name: user.name}) %></p>


    , .

    . CSS, .

    CSS. . , .


    . , 100%- , , .

    , . .

    , .


    : " Node.js " " Node " " , " " . 1 тАФ , , " " , " " . 2 тАФ etagify " " - node-convict " " . 3 тАФ " " Node.js. 1 " " Node.js. 2: " " Node.js. 3: " " Awsbox - PaaS- Node.js Amazon "
  11. . ! - , . URL.

    format , , HTML, , .

    , . , URL. - .

    - , :

    <p><%= format(gettext('Welcome back, %(user_name)s'), {user_name: user.name}) %></p>


    , .

    . CSS, .

    CSS. . , .


    . , 100%- , , .

    , . .

    , .


    : " Node.js " " Node " " , " " . 1 тАФ , , " " , " " . 2 тАФ etagify " " - node-convict " " . 3 тАФ " " Node.js. 1 " " Node.js. 2: " " Node.js. 3: " " Awsbox - PaaS- Node.js Amazon "
  12. . ! - , . URL.

    format , , HTML, , .

    , . , URL. - .

    - , :

    <p><%= format(gettext('Welcome back, %(user_name)s'), {user_name: user.name}) %></p>


    , .

    . CSS, .

    CSS. . , .


    . , 100%- , , .

    , . .

    , .


    : " Node.js " " Node " " , " " . 1 тАФ , , " " , " " . 2 тАФ etagify " " - node-convict " " . 3 тАФ " " Node.js. 1 " " Node.js. 2: " " Node.js. 3: " " Awsbox - PaaS- Node.js Amazon "
. ! - , . URL.

format , , HTML, , .

, . , URL. - .

- , :

<p><%= format(gettext('Welcome back, %(user_name)s'), {user_name: user.name}) %></p>


, .

. CSS, .

CSS. . , .


. , 100%- , , .

, . .

, .


: " Node.js " " Node " " , " " . 1 тАФ , , " " , " " . 2 тАФ etagify " " - node-convict " " . 3 тАФ " " Node.js. 1 " " Node.js. 2: " " Node.js. 3: " " Awsbox - PaaS- Node.js Amazon "

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


All Articles