OXIESEC PANEL
- Current Dir:
/
/
usr
/
share
/
language-tools
Server IP: 139.59.38.164
Upload:
Create Dir:
Name
Size
Modified
Perms
📁
..
-
11/10/2024 09:42:49 AM
rwxr-xr-x
📄
language-options
2.78 KB
11/02/2020 05:05:51 PM
rwxr-xr-x
📄
language-validate
1.79 KB
11/02/2020 05:05:51 PM
rwxr-xr-x
📄
language2locale
1.75 KB
11/02/2020 05:05:51 PM
rwxr-xr-x
📄
locale2papersize
320 bytes
11/02/2020 05:05:51 PM
rwxr-xr-x
📄
main-countries
420 bytes
11/02/2020 05:05:51 PM
rw-r--r--
📄
save-to-pam-env
1.03 KB
11/02/2020 05:05:51 PM
rwxr-xr-x
📄
set-language-helper
732 bytes
11/02/2020 05:05:51 PM
rwxr-xr-x
📄
update-langlist
1.36 KB
11/02/2020 05:05:51 PM
rwxr-xr-x
Editing: language-options
Close
#!/usr/bin/perl use strict; use warnings; my $langtoolsdir = '/usr/share/language-tools'; # get the locales available on the system my @avail_locales = map { chomp; s/\.utf8//; $_ } qx( locale -a | grep -F .utf8 ); # add items without country code to facilitate lookups my %extended_localelist; for my $loc (@avail_locales) { ( my $lang = $loc ) =~ s/_[A-Z]+//; @extended_localelist{$loc, $lang} = (1, 1); } # get the directory names in /usr/share/locale-langpack plus possible other # translation directory names in /usr/share/locale and /usr/local/share/locale my %translation_dirs; if ( opendir my ($dh), '/usr/share/locale-langpack' ) { $translation_dirs{$_} = 1 for readdir $dh; } my %langpack_langcodes = map { s/[^a-z].+//; $_, 1 } grep !/^\./, keys %translation_dirs; for my $t_dir ('/usr/share/locale', '/usr/local/share/locale') { if ( opendir my ($dh), $t_dir ) { for ( readdir $dh ) { for my $lang ( keys %langpack_langcodes ) { if ( /^$lang[_@]/ ) { $translation_dirs{$_} = 1; last; } } } } } # Assume that 'en' is present even if the English language pack isn't installed if ( ! $translation_dirs{'en'} and "@avail_locales" =~ /\ben_US\b/ ) { $translation_dirs{'en'} = 1; } # get the intersection of available translation_dirs and the extended locale list my %intersection; for ( keys %extended_localelist ) { $intersection{$_} = 1 if $translation_dirs{$_}; } # adjustments if ( open my $fh, '<', "$langtoolsdir/main-countries" ) { # If country code items in a language exist: # - Remove the item without country code, since gettext won't find a # translation under e.g. 'de_DE' if the first item in LANGUAGE is 'de' # (see https://launchpad.net/bugs/700213). 'en' is kept, though, since # it's always the last item in LANGUAGE per design. # - Make sure that the main dialect of the language is represented among # the country code items (see https://launchpad.net/bugs/710148). my %main; while ( <$fh> ) { next if /^\s*(?:#|$)/; my ($k, $v) = split; $main{$k} = $v; } my %count; for ( keys %intersection ) { next if /^en[^a-z]/; ( my $not_country = $_ ) =~ s/_[A-Z]+//; $count{$not_country} ++; } for my $langcode ( keys %count ) { if ( $count{$langcode} > 1 ) { delete $intersection{$langcode}; $intersection{ $main{$langcode} } = 1 if $main{$langcode}; } } } else { # not access to the language-to-main-dialect map # => stick with a minimum of list manipulation delete $intersection{'zh'}; } # print the resulting list of language options print join("\n", sort keys %intersection) || 'en';