On Wed, 13 Apr 2022 11:34:55 +0200 Eberhard Beilharz <e...@sil.org> wrote:
> Hi, > > The automatic checks complain about a few of the language codes we use > [1]. Most are errors in our naming, except one: > > gettext: linux/keyman-config/locale/es_419.po: can't guess language > > To my knowledge *es_419* is a valid language code for Spanish spoken in > Latin America (419 is the region code for Latin America). Would it be > possible to enhance the checks so that it recognizes and accepts that code? > > Thanks, > Eberhard > > [1] https://i18n.debian.org/l10n-pkg-status/k/keyman.html The following should fix it (dl10n project [1]). add_country() is used, because Locale::Codes lacks region code 419. Probably, similar changes should be done in webwml in english/international/l10n/scripts/transmonitor-check. [1] https://salsa.debian.org/l10n-team/dl10n --- orig/dl10n-check +++ new/dl10n-check @@ -21,6 +21,7 @@ use Locale::Language; use Locale::Country; +Locale::Country::add_country(419, "Latin America and the Caribbean", LOCALE_CODE_NUMERIC); use Debian::L10n::Db; use Debian::L10n::Debconf; @@ -662,7 +663,7 @@ my $bad_lang=""; #this could be a language, but this is not a valid language my $this_stat = ""; #stats for this file my $err_msg =""; # err msg of the statistic external command (ie, msgfmt or debconf-stats) - my $regexp_for_lang_code = '(([a-zA-Z]{2,3})([-_][a-zA-Z]{2})?(@[^./]*)?)(\.[^./]+)?'; + my $regexp_for_lang_code = '(([a-zA-Z]{2,3})([-_]([a-zA-Z]{2}|\d{3}))?(@[^./]*)?)(\.[^./]+)?'; $filename = store_temp($pkg, $file); @@ -955,7 +956,7 @@ sub normalize_lang { my $lang = shift; $lang =~ s/\..*$//; - if ($lang =~ m,^(...?)[-_](..)$,) { + if ($lang =~ m,^(...?)[-_](...?)$,) { return lc($1).'_'.uc($2); } elsif ($lang =~ m,^(...?)$,) { return lc($1); @@ -1016,7 +1017,7 @@ close (DATA); } -# sub is_lang(code) : returns true iff code is a valide code of language +# sub is_lang(code) returns true if code is a valid language code sub is_lang { my $code = shift; $code =~ s/\@.*$//; @@ -1024,19 +1025,22 @@ my $checklanguage = sub { my $lang = shift; my $len = length $lang; - if ($len eq 2) { + if ($len == 2) { return defined code2language($lang, LOCALE_LANG_ALPHA_2); - } elsif ($len eq 3) { + } elsif ($len == 3) { return defined code2language($lang, LOCALE_LANG_ALPHA_3); } return 0; }; - # Accept these codes + # Accept these codes return 1 if $code eq 'cz' || $code eq 'dk' || $code eq 'sp'; if ($code =~ /^(...?)[-_](..)$/) { return (&$checklanguage($1) && defined(code2country($2))); } + elsif ($code =~ /^(...?)[-_](...)$/) { + return (&$checklanguage($1) && defined(code2country($2, LOCALE_CODE_NUMERIC))); + } return &$checklanguage($code); }