Funktion LxERP.t8() analog zum Filter [% ... | $T8 %] implementiert.
authorSven Schöling <s.schoeling@linet-services.de>
Mon, 28 Jun 2010 11:07:26 +0000 (13:07 +0200)
committerSven Schöling <s.schoeling@linet-services.de>
Mon, 28 Jun 2010 11:07:26 +0000 (13:07 +0200)
Hintergrund: Will man einen zu übersetzenden Begriff an eine Funktion
übergeben, so geht das mit der Filtersyntax leider
nicht. Beispielsweise geht weder

  [% JavaScript.confirm('Are you sure?' | $T8) %]

(Syntaxfehler vom Template-Modul), noch geht

  [% SET t8='Are you sure?' | $T8; JavaScript.confirm(t8) %]

(hier steht in t8 der unübersetzte Begriff, und es ist
hässlich). Jetzt kann man aber optional folgendes schreiben:

  [% JavaScript.confirm(LxERP.t8('Are you sure?')) %]

Conflicts:

locale/de/locales.pl

SL/Template/Plugin/LxERP.pm
locale/de/locales.pl

index c26988b..df6cb6a 100644 (file)
@@ -106,4 +106,10 @@ sub abs {
   return $var < 0 ? $var * -1 : $var;
 }
 
+sub t8 {
+  my ($self, $text, $args) = @_;
+  $self->{locale} ||= Locale->new($::myconfig{countrycode}, 'all');
+  return $self->{locale}->text($text, @{ $args || [] });
+}
+
 1;
index 399af28..e529d54 100755 (executable)
@@ -566,19 +566,27 @@ sub scanhtmlfile {
         $plugins{needed}->{$plugin} = 1 if (first { $_ eq $plugin } qw(HTML LxERP JavaScript MultiColumnIterator));
       }
 
-      while ($line =~ m/\[\%            # Template-Start-Tag
-                        [\-~#]*         # Whitespace-Unterdrückung
-                        \s*             # Optional beliebig viele Whitespace
-                        [\'\"]          # Anfang des zu übersetzenden Strings
-                        (.*?)           # Der zu übersetzende String
-                        [\'\"]          # Ende des zu übersetzenden Strings
-                        \s*\|\s*        # Pipe-Zeichen mit optionalen Whitespace davor und danach
-                        \$T8            # Filteraufruf
-                        .*?             # Optionale Argumente für den Filter und Whitespaces
-                        [\-~#]*         # Whitespace-Unterdrückung
-                        \%\]            # Template-Ende-Tag
+      while ($line =~ m/(?:             # Start von Variante 1: LxERP.t8('...'); ohne darumliegende [% ... %]-Tags
+                          LxERP\.t8\(   #   LxERP.t8(
+                          [\'\"]        #   Anfang des zu übersetzenden Strings
+                          (.*?)         #   Der zu übersetzende String
+                          [\'\"]        #   Ende des zu übersetzenden Strings
+                        |               # Start von Variante 2: [% '...' | $T8 %]
+                          \[\%          #   Template-Start-Tag
+                          [\-~#]*       #   Whitespace-Unterdrückung
+                          \s*           #   Optional beliebig viele Whitespace
+                          [\'\"]        #   Anfang des zu übersetzenden Strings
+                          (.*?)         #   Der zu übersetzende String
+                          [\'\"]        #   Ende des zu übersetzenden Strings
+                          \s*\|\s*      #   Pipe-Zeichen mit optionalen Whitespace davor und danach
+                          \$T8          #   Filteraufruf
+                          .*?           #   Optionale Argumente für den Filter
+                          \s*           #   Whitespaces
+                          [\-~#]*       #   Whitespace-Unterdrückung
+                          \%\]          #   Template-Ende-Tag
+                        )
                        /ix) {
-        my $string = $1;
+        my $string = $1 || $2;
         print "Found filter >>>$string<<<\n" if $debug;
         substr $line, $LAST_MATCH_START[1], $LAST_MATCH_END[0] - $LAST_MATCH_START[0], '';