рдХреИрдЯрд╛рд▓рд┐рд╕реНрдЯ рдПрдорд╡реАрд╕реА рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг

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

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

рдЪреВрдВрдХрд┐ рдкрд░реНрд▓ рдХрд╛ рдЕрд░реНрде gettext , рд▓реЗрдХрд┐рди рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред рдЕрднреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рддреИрдпрд╛рд░реА


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдпрд╛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдХреЛ рдЦреЛрд▓реЗрдВ, MyApp рдХрд╣реЗрдВред MojoMojo рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ update_po.sh рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЗрдВ рдФрд░ рдЗрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА ./script рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдбрд╛рд▓реЗрдВред рдЗрд╕ рд▓рд┐рдкрд┐ рдХреЛ рдЙрдкрдпреБрдХреНрдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реЗрд░рдлреЗрд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рд▓реЗрдЦрдХ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рд╣рдо рд╕рдВрдкреВрд░реНрдг рдлрд╝рд╛рдЗрд▓ рдореЗрдВ PROJECT_DIR рд╕рд╛рде MOJOMOJO_DIR рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд MOJOMOJO_DIR ред
 # Default setting PERL_DEFAULT=`which perl` PROJECT_DIR="." PROJECT_NAME="MyApp" 

рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдиреАрдп рдЪрд░ PROJECT_NAME рдЬреЛрдбрд╝реЗрдВ рдФрд░ $PROJECT_NAME рд╕рд╛рде рд╕рдВрдкреВрд░реНрдг MojoMojo рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд░реЗрдВред

рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдФрд░ po2json.pl рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╣рдо рдЗрд╕реЗ ./script .рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВред рд╣рдо рджреЛрдиреЛрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдмрдирд╛рддреЗ рд╣реИрдВред
рдпреБрдкреАрдбреА
po2json рд╕реНрдХреНрд░рд┐рдкреНрдЯ Locale::Simple рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ


рдпрджрд┐ рдЖрдк рдХреЛрдб update_po.sh рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╛рдЗрд▓реЛрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ:

рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
./lib/MyApp/I18N рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдВ, рд╣рдорд╛рд░реА .po рдлрд╛рдЗрд▓реЗрдВ рдЗрд╕рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрдВрдЧреАред рдпрджрд┐ рд╣рдо рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ ./root/static/json рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдХреЛрдб рдФрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕


Add :: TT, рдЖрдЗрдП HTML рд╡рд░реНрдЧ рдХреЛ рдмреБрд▓рд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдПрдХ рдореМрдЬреВрджрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕ рдмрд┐рдВрджреБ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
  $ ./script/myapp_create.pl view HTML TT 

рдпрд╣ рдХрдорд╛рдВрдб ./lib/MyApp/View/HTML.pm рд▓рд┐рдП рдПрдХ ./lib/MyApp/View/HTML.pm рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддреА ./lib/MyApp/View/HTML.pm ред рдЙрдирдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рдПрдХ рдкрде рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╣рд╛рдБ рд╕реНрдерд┐рдд рд╣реЛрдВрдЧреЗ:
 __PACKAGE__->config( TEMPLATE_EXTENSION => '.tt', INCLUDE_PATH => [ MyApp->path_to('root', 'base'), ], render_die => 1, ); 

рдкреНрд░рд╕реНрддреБрддрд┐ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП, рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рджреГрд╢реНрдп ./lib/MyApp.pm :
 __PACKAGE__->config( name => 'MyApp', default_view => 'HTML', 'View::HTML' => { ENCODING => 'UTF-8', }, ... 

рдФрд░ рдкреНрд▓рдЧрдЗрди рдШреЛрд╖рдгрд╛ рдореЗрдВ рд╣рдо I18N рдФрд░ Unicode рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
 use Catalyst qw/ -Debug ConfigLoader Static::Simple I18N Unicode ... 

I18N рдкреНрд▓рдЧрдЗрди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ loc() рдпрд╛ localize() рдлрдВрдХреНрд╢рди рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдпрд╣рд╛рдВ рджреЗрдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ: рдЙрддреНрдкреНрд░реЗрд░рдХ :: рдкреНрд▓рдЧрд┐рди :: I18N ред

рд╣рдо рдкрд╣рд▓реЗ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рдкреГрд╖реНрда рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЖрдЗрдП рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рджреЛ рдХреЙрд▓ рд╡рд┐рдХрд▓реНрдк рдЖрдЬрд╝рдорд╛рдПрдВред рдкрд╣рд▓реЗ рдирд┐рдпрдВрддреНрд░рдХ рд╕реЗ рд▓рд╛рдЗрди рдХреЛ stash рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╣рдо рдЗрд╕реЗ рдкреГрд╖реНрда рд╢реАрд░реНрд╖рдХ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗред рджреВрд╕рд░рд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреГрд╖реНрда рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рд░реЗрдЦрд╛ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред
рд╣рдо рдореВрд▓ рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ ./lib/MyApp/Controller/Root.pm :
 sub index :Path :Args(0) { my ( $self, $c ) = @_; $c->stash->{title} = $c->loc("Home Page"); } 

рд╣рдорд╛рд░реЗ рдЗрдВрдбреЗрдХреНрд╕ рдкреЗрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдмрдирд╛рдПрдВ ./root/base/index.tt
 <!doctype html> <html> <head> <meta charset="utf-8" /> <title>[% title %]</title> </head> <body> [% c.loc("Hello World!") %] </body> <html> 

рд╣рдо рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВред рдпрджрд┐ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВ: рд╣рдо CPAN рдХреЗ рд╕рд╛рде рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕рд╣реА / рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред

рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдкреЗрдЬ рдХреЗ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рд░реВрд╕реА рдХреЗ рд▓рд┐рдП рдЦрд╛рд▓реА рдлрд╝рд╛рдЗрд▓реЗрдВ рдмрдирд╛рдПрдБ рдФрд░ рдЬрд░реНрдорди рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХрд╣реЗрдВ:
  $ touch ./lib/MyApp/I18N/ru.po ./lib/MyApp/I18N/de.po 

рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рднрд░реЗрдВ, рдЬрд┐рд╕ рдкрд░ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереА:
  $ ./script/update_po.sh ru de 
рдпрджрд┐ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВ, рддреЛ рд╣рдо рд╕реАрдкреАрдПрдПрди рдХреЗ рд╕рд╛рде рд▓рд╛рдкрддрд╛ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред

рдЕрдм рд╣рдо "рдореВрд▓" рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВрдЧреЗ:
 "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ru\n" #: root/base/index.tt:8 msgid "Hello World!" msgstr " !" #: lib/MyApp/Controller/Root.pm:32 msgid "Home Page" msgstr " " 

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

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдмрджрд▓рддреЗ рд╕рдордп, update_po.sh рдХреЛ update_po.sh рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВред .po рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкреБрд░рд╛рдирд╛ рдбреЗрдЯрд╛ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдбреЗрдЯрд╛рдмреЗрд╕


рд╡реНрдпреВ рдореЗрдВ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╣реА рднрдВрдбрд╛рд░рдг рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдпрд╣ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЖрдзрд╛рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп рд╕реВрдЪрдирд╛ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЬрд╛рдирдХрд╛рд░реА ut88 рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЧрдИ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдиреЗрдХреНрд╢рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ, рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдмрд░рд╛рдмрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ SQL рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╣реИ: sqlite_unicode, mysql_enable_utf8, pg_enable_utf8, odbcc-utf8_on, рдЖрджрд┐ред
 <Model::DB> <connect_info> dsn dbi:mysql:database user username password password mysql_enable_utf8 1 </connect_info> </Model::DB> 
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, DBI рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦреЗрдВред

рдмреИрд╕рд╛рдЦреА


рдпрджрд┐ рд╣рдо рдЯреАрдЯреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдерд╛рдиреАрдпрдХреГрдд рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛рдмреЗрд╕ рдпрд╛ рдкрд╛рда рдлрд╝рд╛рдЗрд▓ рд╕реЗ, рддреЛ рд╣рдо рдмрд╣реБрдд рд╣реА рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХрд░рд╛рдУрдХреЗрдЬрд╝реА рджреЗрдЦреЗрдВрдЧреЗред рдпрд╣ рдХрд╛рд░реНрдп рд╣рдореЗрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛:
 sub enc { my ( $self, $str ) = @_; utf8::decode($str); return $str; } 

рд╣рдо рдЗрд╕реЗ ./lib/MyApp.pm рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддрджрдиреБрд╕рд╛рд░ рд╣рдо рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ perl рд╕реЗ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ:
  $c->stash->{field} = $c->enc($data); 

рдЯреАрдЯреА рдореЗрдВ рдРрд╕рд╛:
  [% c.enc(list.field) %] 

TT рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд┐рд▓реНрдЯрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджреГрд╢реНрдп рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ FILTERS рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ ./lib/MyApp/View/HTML.pm
 __PACKAGE__->config( TEMPLATE_EXTENSION => '.tt', INCLUDE_PATH => [ MyApp->path_to('root', 'base'), ], render_die => 1, FILTERS => { enc => sub { utf8::decode($_[0]); $_[0]; }, } ); 

рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:
  [% list.field | enc %] 

рд▓реЗрдХрд┐рди рдбреЗрдЯрд╛ рдФрд░ рдбреАрдмреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рдмреАрдПрдЬреА рд╣реИред

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдПрдХ рдЖрд╡рд░рдг рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рдЕрдзрд┐рдорд╛рдирддрдГ рдПрдХ рд▓реЛрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ:
 function loc(str) { if ( (typeof(locale) === 'undefined') || (typeof locale[str] === 'undefined') ) return str; return locale[str] } 

рдФрд░ рдкреЗрдЬ рд╢реАрд░реНрд╖рдХ рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдбреЗрдЯрд╛ рдХрд╛ рд▓реЛрдбрд┐рдВрдЧ рдЬреЛрдбрд╝реЗрдВ
 ... <script src="[% c.uri_for_static('json/') _ c.language _ '.po.json' %]" type="text/javascript"></script> </head> 

рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╕рдВрдкрд╛рджрди рджреЛ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ: ./lib/MyApp/I18N рдХреЙрд▓ рдХрд░реЗрдВ рдФрд░ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдлрд╝рд╛рдЗрд▓ рдХреЛ ./lib/MyApp/I18N рдореЗрдВ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ; / ./root/static/json/[lang].po.json рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ ./root/static/json/[lang].po.json рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред

рдкреБрдирд╢реНрдЪ:


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

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


All Articles