vfmg (DEVEL): vfmg - smarter way for finding correct lang and $LAN...

sparky sparky at pld-linux.org
Mon Oct 31 17:35:24 CET 2005


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




More information about the pld-cvs-commit mailing list