From 2048db8902dad7b19e88ea351f456071ca6903cf Mon Sep 17 00:00:00 2001 From: Pascal Rigaux Date: Thu, 8 Nov 2007 16:33:20 +0000 Subject: - localedrake: o fix handling variant together with charset (eg: uz.UTF-8@Latn) (#35090) --- perl-install/NEWS | 2 ++ perl-install/install/NEWS | 2 ++ perl-install/lang.pm | 40 +++++++++++++++++++++++++--------------- 3 files changed, 29 insertions(+), 15 deletions(-) diff --git a/perl-install/NEWS b/perl-install/NEWS index 9e61918d6..9aad03ef6 100644 --- a/perl-install/NEWS +++ b/perl-install/NEWS @@ -1,3 +1,5 @@ +- localedrake: + o fix handling variant together with charset (eg: uz.UTF-8@Latn) (#35090) - drakbug: o prevent altering tool and the like when catching a bug (#35241) diff --git a/perl-install/install/NEWS b/perl-install/install/NEWS index ebc8510b2..043b89420 100644 --- a/perl-install/install/NEWS +++ b/perl-install/install/NEWS @@ -1,3 +1,5 @@ +- localedrake: + o fix handling variant together with charset (eg: uz.UTF-8@Latn) (#35090) - partitioning wizard: ensure existing_part and resize_fat are proposed before wipe_drive - in case of ftp/http media, we select basesystem before doing diff --git a/perl-install/lang.pm b/perl-install/lang.pm index eeb773355..c5f968bdd 100644 --- a/perl-install/lang.pm +++ b/perl-install/lang.pm @@ -461,25 +461,35 @@ our @locales = qw(aa_DJ aa_ER aa_ER@saaho aa_ET af_ZA am_ET an_ES ar_AE ar_BH ar sub standard_locale { my ($lang, $country, $prefer_lang) = @_; - if (member("${lang}_${country}", @locales)) { - "${lang}_${country}"; + my $lang_ = force_lang_country($lang, $country); + if (member($lang_, @locales)) { + $lang_; } elsif ($prefer_lang && member($lang, @locales)) { $lang; } else { - my $main_locale = locale_to_main_locale($lang); - if ($main_locale ne $lang) { - standard_locale($main_locale, $country, $prefer_lang); - } else { - ''; - } + ''; } } -sub fix_variant { - my ($lang) = @_; - #- uz@Cyrl_UZ -> uz_UZ@Cyrl - $lang =~ s/(.*)(\@\w+)(_.*)/$1$3$2/; - $lang; +sub force_lang_country { + my ($lang, $country) = @_; + my $h = analyse_locale_name($lang); + $h->{country} = $country; + analysed_to_lang($h); +} + +sub force_lang_charset { + my ($lang, $charset) = @_; + my $h = analyse_locale_name($lang); + $h->{charset} = $charset; + analysed_to_lang($h); +} + +sub analysed_to_lang { + my ($h) = @_; + $h->{main} . '_' . $h->{country} . + ($h->{charset} ? '.' . $h->{charset} : '') . + ($h->{variant} ? '@' . $h->{variant} : ''); } sub analyse_locale_name { @@ -495,12 +505,12 @@ sub locale_to_main_locale { sub getlocale_for_lang { my ($lang, $country, $o_utf8) = @_; - fix_variant((standard_locale($lang, $country, 'prefer_lang') || l2locale($lang)) . ($o_utf8 ? '.UTF-8' : '')); + force_lang_charset(standard_locale($lang, $country, 'prefer_lang') || l2locale($lang), $o_utf8 && 'UTF-8'); } sub getlocale_for_country { my ($lang, $country, $o_utf8) = @_; - fix_variant((standard_locale($lang, $country, '') || c2locale($country)) . ($o_utf8 ? '.UTF-8' : '')); + force_lang_charset(standard_locale($lang, $country, '') || c2locale($country), $o_utf8 && 'UTF-8'); } sub getLANGUAGE { -- cgit v1.2.1