luci-base: add support for plural translations and contexts in Lua api
[project/luci.git] / build / i18n-scan.pl
index ddec094caab48c25c9d7a2affdc2157a44246aad..e46863942be622be52db51a67d2ca18aa3adb08a 100755 (executable)
@@ -124,14 +124,24 @@ sub preprocess_htm($$) {
                '=' => '(%s)',
                '_' => 'translate([==[%s]==])',
                ':' => 'translate([==[%s]==])',
                '=' => '(%s)',
                '_' => 'translate([==[%s]==])',
                ':' => 'translate([==[%s]==])',
-               '+' => 'include([==[%s]==)',
+               '+' => 'include([==[%s]==])',
                '#' => '--[==[%s]==]',
                ''  => '%s'
        };
 
        # Translate the .htm source into a valid Lua source using bracket quotes
        # to avoid the need for complex escaping.
                '#' => '--[==[%s]==]',
                ''  => '%s'
        };
 
        # Translate the .htm source into a valid Lua source using bracket quotes
        # to avoid the need for complex escaping.
-       $source =~ s|<%-?([=_:+#]?)(.*?)-?%>|sprintf "]==]; $sub->{$1}; [==[", $2|sge;
+       $source =~ s!<%-?([=_:+#]?)(.*?)-?%>!
+               my $t = $1;
+               my $s = $2;
+
+               # Split translation expressions on first non-escaped pipe.
+               if ($t eq ':' || $t eq '_') {
+                       $s =~ s/^((?:[^\|\\]|\\.)*)\|(.*)$/$1]==],[==[$2/;
+               }
+
+               sprintf "]==]; $sub->{$t}; [==[", $s
+       !sge;
 
        # Discover expressions like "lng.translate(...)" or "luci.i18n.translate(...)"
        # and return them as extra keyword so that xgettext recognizes such expressions
 
        # Discover expressions like "lng.translate(...)" or "luci.i18n.translate(...)"
        # and return them as extra keyword so that xgettext recognizes such expressions