Mercurial > pub > Impl
diff Lib/IMPL/Web/View/TTContext.pm @ 380:1eca08048ba9
TTContext migrated to the unified localization mechanism IMPL::Resources::StringLocaleMap
author | cin |
---|---|
date | Fri, 17 Jan 2014 15:58:57 +0400 |
parents | d5c8b955bf8d |
children | ced5937ff21a |
line wrap: on
line diff
--- a/Lib/IMPL/Web/View/TTContext.pm Thu Jan 16 18:10:50 2014 +0400 +++ b/Lib/IMPL/Web/View/TTContext.pm Fri Jan 17 15:58:57 2014 +0400 @@ -16,7 +16,8 @@ Resources => 'IMPL::Resources', Loader => 'IMPL::Code::Loader', MetadataBase => '-IMPL::Web::View::Metadata::BaseMeta', - Metadata => 'IMPL::Web::View::Metadata::ObjectMeta' + Metadata => 'IMPL::Web::View::Metadata::ObjectMeta', + StringMap => 'IMPL::Resources::StringLocaleMap' }, base => [ 'Template::Context' => '@_' @@ -38,10 +39,10 @@ includes modules aliases - id metadata model + templateInfo )) { my $t = $prop; @@ -93,6 +94,7 @@ } my @inc = ($this->base, @{$this->includes || []}); + #my @inc = @{$this->includes || []}; my $ext = $this->tt_ext || ""; @@ -101,7 +103,11 @@ foreach my $dir (@inc) { $file = $dir ? "$dir/$name" : $name; - my $base = join('/',splice([split(/\/+/,$file)],0,-1)); + my @parts = split(/\/+/,$file); + + my $templateName = pop @parts; + + my $base = join('/',@parts); $file = $ext ? "$file.$ext" : $file; @@ -118,10 +124,11 @@ } my $info = { base => $base, - labels => $this->load_labels($file), + name => $templateName, template => $tt, initialized => 0, - class => $class + class => $class, + file => $file }; $this->modules->{$file} = $info; return $cache->{$name} = $info; @@ -246,7 +253,10 @@ display_model => sub { $ctx->display_model(@_); }, - tt_cache => {} + tt_cache => {}, + labels => sub { + $ctx->load_labels(@_); + } }, $env ) @@ -309,15 +319,13 @@ } else { return $ctx->include($info->{template},$args); } - }, - hashMerge( - $info->{labels} || {}, - { - base => $info->{base}, - parent => $this, - id => $this->get_next_id - } - ) + }, + { + base => $info->{base}, + parent => $this, + id => $this->get_next_id, + templateInfo => $info + } ) } @@ -393,6 +401,8 @@ sub get_real_file { my ($this,$fname) = @_; + return unless length $fname; + my @path = split(/\/+/,$fname); foreach my $provider (@{$this->load_templates || []}) { @@ -404,36 +414,36 @@ } sub load_labels { - my ($this,$fname) = @_; + my ($this,$data) = @_; - $fname = $this->get_real_file($fname); + die ArgException->new("A hash reference is required") + unless ref($data) eq 'HASH'; - my %vars; + my $stringMap = StringMap->new($data); - my $flabels = "$fname.labels"; - - if (-f $flabels) { - - my %labels; - $labels{default} = IMPL::Resources::Strings::ParseStringsMap($flabels); - - while(my($label,$text) = each %{$labels{default}}) { - $vars{$label} = sub { - my ($params) = @_; - my $locale = Resources->currentLocale; - - unless ($labels{$locale}) { - $labels{$locale} = -f "$fname.$locale" ? - IMPL::Resources::Strings::ParseStringsMap("$fname.$locale") : - {}; - } - - return FormatMessage(($labels{$locale}{$label} || $text),$params); - } - } - } + $this->stash->update({ + map { + my $id = $_; + $id, + sub { + $stringMap->GetString($id,@_); + }; + } keys %$data + }); + + my $ti = $this->templateInfo || {}; - return \%vars; + if (my $fullName = $this->get_real_file($ti->{file})) { + my ($vol,$dir,$fname) = File::Spec->splitpath($fullName); + + my $name = $this->templateInfo->{name}; + + my $localePath = File::Spec->catpath($vol, File::Spec->catdir($dir,'locale'),''); + + $stringMap->name($name); + $stringMap->paths($localePath); + } + return; } 1;