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;