Mercurial > pub > Impl
comparison Lib/IMPL/Web/View/TTFactory.pm @ 338:c78dfbe658bd
improved string maps loading for TT documents
| author | cin |
|---|---|
| date | Sat, 15 Jun 2013 02:32:11 +0400 |
| parents | f4e14f32cf54 |
| children | 97628101b765 |
comparison
equal
deleted
inserted
replaced
| 337:f4e14f32cf54 | 338:c78dfbe658bd |
|---|---|
| 13 | 13 |
| 14 use IMPL::Const qw(:prop); | 14 use IMPL::Const qw(:prop); |
| 15 use IMPL::declare { | 15 use IMPL::declare { |
| 16 require => { | 16 require => { |
| 17 Loader => 'IMPL::Code::Loader', | 17 Loader => 'IMPL::Code::Loader', |
| 18 Resources => 'IMPL::Resources', | |
| 18 OpException => '-IMPL::InvalidOperationException', | 19 OpException => '-IMPL::InvalidOperationException', |
| 19 ArgException => '-IMPL::InvalidArgumentException' | 20 ArgException => '-IMPL::InvalidArgumentException' |
| 20 }, | 21 }, |
| 21 base => [ | 22 base => [ |
| 22 'IMPL::Object::Factory' => sub { | 23 'IMPL::Object::Factory' => sub { |
| 30 baseLocation => PROP_RW, | 31 baseLocation => PROP_RW, |
| 31 base => PROP_RW, | 32 base => PROP_RW, |
| 32 registry => PROP_RO, | 33 registry => PROP_RO, |
| 33 blocks => PROP_RO, | 34 blocks => PROP_RO, |
| 34 path => PROP_RO, | 35 path => PROP_RO, |
| 35 _instance => PROP_RW | 36 _instance => PROP_RW, |
| 37 _labels => PROP_RW | |
| 36 ] | 38 ] |
| 37 }; | 39 }; |
| 38 | 40 |
| 39 sub CTOR { | 41 sub CTOR { |
| 40 my ($this,$class,$template,$context,$path,$registry) = @_; | 42 my ($this,$class,$template,$context,$path,$registry) = @_; |
| 115 | 117 |
| 116 #TODO optimize labels loading for extended classes | 118 #TODO optimize labels loading for extended classes |
| 117 sub LoadLabelsToContext { | 119 sub LoadLabelsToContext { |
| 118 my ($this,$context) = @_; | 120 my ($this,$context) = @_; |
| 119 | 121 |
| 120 $this->base->LoadLabelsToContext($context) | 122 my %vars; |
| 123 | |
| 124 %vars = %{$this->base->_labels || {}} | |
| 121 if $this->base; | 125 if $this->base; |
| 126 $this->_labels(\%vars); | |
| 122 | 127 |
| 123 if(my $fname = $this->registry->loader->ResolveFileName($this->path)) { | 128 if(my $fname = $this->registry->loader->ResolveFileName($this->path)) { |
| 124 my $flabels = "$fname.labels"; | 129 my $flabels = "$fname.labels"; |
| 125 | 130 |
| 126 if (-f $flabels) { | 131 if (-f $flabels) { |
| 127 my %vars; | 132 |
| 128 my %labels; | 133 my %labels; |
| 129 $labels{default} = IMPL::Resources::Strings::ParseStringsMap("$flabels"); | 134 $labels{default} = IMPL::Resources::Strings::ParseStringsMap("$flabels"); |
| 130 | 135 |
| 131 while(my($label,$text) = each %{$labels{default}}) { | 136 while(my($label,$text) = each %{$labels{default}}) { |
| 132 warn "LABEL: $label"; | 137 warn "LABEL: $label"; |
| 133 $vars{$label} = sub { | 138 $vars{$label} = sub { |
| 134 my ($params) = @_; | 139 my ($params) = @_; |
| 135 my $locale = 'ru_RU'; | 140 my $locale = Resources->currentLocale; |
| 136 | 141 |
| 137 unless ($labels{$locale}) { | 142 unless ($labels{$locale}) { |
| 138 $labels{$locale} = -f "$fname.$locale" ? | 143 $labels{$locale} = -f "$fname.$locale" ? |
| 139 IMPL::Resources::Strings::ParseStringsMap("$fname.$locale") : | 144 IMPL::Resources::Strings::ParseStringsMap("$fname.$locale") : |
| 140 {}; | 145 {}; |
| 141 } | 146 } |
| 142 | 147 |
| 143 return FormatMessage(($labels{$locale}{$label} || $text),$params); | 148 return FormatMessage(($labels{$locale}{$label} || $text),$params); |
| 144 } | 149 } |
| 145 } | 150 } |
| 146 $context->stash->update(\%vars); | 151 |
| 147 } | 152 } |
| 148 } | 153 } |
| 154 $context->stash->update(\%vars); | |
| 149 } | 155 } |
| 150 | 156 |
| 151 sub MergeParameters { | 157 sub MergeParameters { |
| 152 my $this = shift; | 158 my $this = shift; |
| 153 my $refProps = shift || {}; | 159 my $refProps = shift || {}; |
