Ein Template-Plugin zum Escape von Angaben für JavaScript-Strings.
[kivitendo-erp.git] / SL / Locale.pm
index 8e7037d..f797ed6 100644 (file)
 
 package Locale;
 
+use Text::Iconv;
+
 use SL::LXDebug;
+use SL::Common;
 
 sub new {
   $main::lxdebug->enter_sub();
@@ -44,14 +47,34 @@ sub new {
   my ($type, $country, $NLS_file) = @_;
   my $self = {};
 
+  $country  =~ s|.*/||;
+  $country  =~ s|\.||g;
+  $NLS_file =~ s|.*/||;
+
   if ($country && -d "locale/$country") {
     local *IN;
     $self->{countrycode} = $country;
-    if (open(IN, "locale/$country/$NLS_file")) {
+    if (open(IN, "<", "locale/$country/$NLS_file")) {
       my $code = join("", <IN>);
       eval($code);
       close(IN);
     }
+
+    if (open IN, "<", "locale/$country/charset") {
+      $self->{charset} = <IN>;
+      close IN;
+
+      chomp $self->{charset};
+
+    } else {
+      $self->{charset} = Common::DEFAULT_CHARSET;
+    }
+
+    my $db_charset         = $main::dbcharset || Common::DEFAULT_CHARSET;
+
+    $self->{iconv}         = Text::Iconv->new($self->{charset}, $db_charset);
+    $self->{iconv_english} = Text::Iconv->new('ASCII',          $db_charset);
+    $self->{iconv_iso8859} = Text::Iconv->new('ISO-8859-15',    $db_charset);
   }
 
   $self->{NLS_file} = $NLS_file;
@@ -69,9 +92,20 @@ sub new {
 }
 
 sub text {
-  my ($self, $text) = @_;
+  my $self = shift;
+  my $text = shift;
+
+  if (exists $self->{texts}->{$text}) {
+    $text = $self->{iconv}->convert($self->{texts}->{$text});
+  } else {
+    $text = $self->{iconv_english}->convert($text);
+  }
+
+  if (@_) {
+    $text = Form->format_string($text, @_);
+  }
 
-  return (exists $self->{texts}{$text}) ? $self->{texts}{$text} : $text;
+  return $text;
 }
 
 sub findsub {