Apache/2.4.7 (Ubuntu) Linux sman1baleendah 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 uid=33(www-data) gid=33(www-data) groups=33(www-data) safemode : OFF MySQL: ON | Perl: ON | cURL: OFF | WGet: ON > / usr / share / language-tools / | server ip : 104.21.89.46 your ip : 172.70.126.95 H O M E |
Filename | /usr/share/language-tools/language-options |
Size | 2.6 kb |
Permission | rwxr-xr-x |
Owner | root : root |
Create time | 27-Apr-2025 09:54 |
Last modified | 18-Jan-2014 02:14 |
Last accessed | 05-Jul-2025 15:40 |
Actions | edit | rename | delete | download (gzip) |
View | text | code | image |
#!/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;
}
}
}
}
}
# 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';
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;
}
}
}
}
}
# 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';