Mercurial > pub > Impl
diff Lib/IMPL/Resources.pm @ 318:1838bdb4d238
corrected support of resources localization
author | cin |
---|---|
date | Tue, 14 May 2013 03:38:47 +0400 |
parents | 16ada169ca75 |
children | d485467eca92 |
line wrap: on
line diff
--- a/Lib/IMPL/Resources.pm Thu May 09 04:10:00 2013 +0400 +++ b/Lib/IMPL/Resources.pm Tue May 14 03:38:47 2013 +0400 @@ -1,59 +1,28 @@ package IMPL::Resources; use strict; -use warnings; -our $Encoding ||= 'utf-8'; -our %Files; - -my %Data; - - - foreach my $group (keys %Files) { - $Data{$group} = ParseResource($Files{$group}); - } +our $CurrentLocale ||= 'default'; -sub findFile { - my ($fname) = @_; - - foreach my $dir (',',@INC) { - my $fullfname = "$dir/$fname"; - return $fullfname if -f $fullfname; - } - - return $fname; -} - -sub ParseResource { - my ($fname) = @_; - - open my $hRes, "<:encoding($Encoding)", findFile($fname) or die "Failed to open file $fname: $!"; - - my %Map; - my $line = 1; - while (<$hRes>) { - chomp; - $line ++ and next if /^\s*$/; - - if (/^(\w+)\s*=\s*(.*)$/) { - $Map{$1} = $2; - } else { - die "Invalid resource format in $fname at $line"; - } - $line ++; - } - - return \%Map; +sub CurrentLocale { + $CurrentLocale; } -sub import { - my ($class,@groups) = @_; - my $caller = caller; - my %merged = map %{$Data{$_} || {} }, @groups; +sub SetLocale { + my ($self,$locale) = @_; - no strict 'refs'; - foreach my $item ( keys %merged ) { - *{"${caller}::ids_$item"} = sub { sprintf($merged{$item},@_) } - } + $CurrentLocale = $locale; +} + +sub InvokeInLocale { + my ($this,$locale,$code) = @_; + + local $CurrentLocale = $locale; + eval { + &$code() + if $code; + }; + die $@ + if $@; } 1;