Author: sparky                       Date: Mon Oct 31 16:35:24 2005 GMT
Module: vfmg                          Tag: DEVEL
---- Log message:
- smarter way for finding correct lang and $LANGUAGE support

---- Files affected:
vfmg:
   vfmg (1.73.2.12 -> 1.73.2.13) 

---- Diffs:

================================================================
Index: vfmg/vfmg
diff -u vfmg/vfmg:1.73.2.12 vfmg/vfmg:1.73.2.13
--- vfmg/vfmg:1.73.2.12 Mon Oct 31 16:07:07 2005
+++ vfmg/vfmg   Mon Oct 31 17:35:19 2005
@@ -122,14 +122,34 @@
 # search dirs }}}
 
 # get locale (for Name[*])
-my $lang4 = "";
-$lang4 = $ENV{'LANG'}        if exists $ENV{'LANG'};
-$lang4 = $ENV{'LC_MESSAGES'} if exists $ENV{'LC_MESSAGES'};
-$lang4 = $ENV{'LC_ALL'}      if exists $ENV{'LC_ALL'};
-(my $lang3 = $lang4) =~ s/@.*//;
-(my $lang2 = $lang3) =~ s/\..*//;
-(my $lang1 = $lang2) =~ s/_.*//;
-
+my @lang;
+sub addlang {
+       my $l = $_[0];
+       push @lang, $l unless grep {$_ eq $l} @lang;
+       $l =~ s/@.*//;
+       push @lang, $l unless grep {$_ eq $l} @lang;
+       $l =~ s/\..*//;
+       push @lang, $l unless grep {$_ eq $l} @lang;
+       $l =~ s/_.*//;
+       push @lang, $l unless grep {$_ eq $l} @lang;
+}
+addlang($ENV{'LC_ALL'})                        if exists $ENV{'LC_ALL'};
+addlang($ENV{'LC_MESSAGES'})   if exists $ENV{'LC_MESSAGES'};
+if (exists $ENV{'LANGUAGE'}) {
+       foreach my $lang (split /:/, $ENV{'LANGUAGE'}) {
+               addlang($lang);
+       }
+}
+addlang($ENV{'LANG'})  if exists $ENV{'LANG'};
+my $langs = join "|", @lang;
+sub findfirstlang {
+       return 0 if $a eq $b;
+       foreach my $lang (@lang) {
+               return -1 if $a eq "Name[$lang]";
+               return 1 if $b eq "Name[$lang]";
+       }
+       return 0;
+}
 
 # what is $DESKTOP_FILE_PATH?
 
@@ -151,7 +171,7 @@
                map {
                        ## "foo = bar" or "Name[baz] = bar"
                        /^\s*
-                       (Name(?:\[(?:$lang4|$lang3|$lang2|$lang1)\])?
+                       (Name(?:\[(?:$langs)\])?
                         |Icon|Exec|Categories|Terminal|Type|Encoding)
                        \s* = \s* (.+?)
                        \s*$/ox
@@ -161,7 +181,7 @@
 
        return unless lc $tags{Type} eq 'application';
        $tags{_name} =
-         (sort { length $b <=> length $a } grep /^Name/, keys %tags)[0];
+         (sort findfirstlang grep /^Name/, keys %tags)[0];
        $tags{name} = $tags{ $tags{_name} };
        $tags{enc}  = exists $tags{Encoding} ? $tags{Encoding} : 'iso-8859-1';
        $tags{term} =
@@ -502,13 +522,13 @@
                                map {
                                                ## "foo = bar" or "Name[baz] = 
bar"
                                                /^\s*
-                                               
(Name(?:\[(?:$lang4|$lang3|$lang2|$lang1)\])?
+                                               (Name(?:\[(?:$langs)\])?
                                                 |Icon|Encoding)
                                                \s* = \s* (.+?)
                                                \s*$/ox
                                        } <F_IN>,
                                );
-                       $dname = $tags{(sort { length $b <=> length $a } grep 
/^Name/, keys %tags)[0]};
+                       $dname = $tags{(sort findfirstlang grep /^Name/, keys 
%tags)[0]};
                        $icon = $tags{Icon};
                        $enc = $tags{Encoding};
                        close F_IN;
================================================================

---- CVS-web:
    http://cvs.pld-linux.org/vfmg/vfmg?r1=1.73.2.12&r2=1.73.2.13&f=u

_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to