Package: locales
Version: 2.36-9+deb12u4
Severity: important
Tags: l10n
X-Debbugs-Cc: maddes+deb...@maddes.net

Dear Maintainer,

referencing a custom locale that resides in /usr/local/share/i18n/loaces/ via 
"copy" doesn't work.

`dpkg-reconfigure locales` gives the following error message:
en_GB.UTF-8@INTL...[error] cannot open locale definition file `en_US@INTL': No 
such file or directory

Both locales will get attached to the bug, so you can be reproduce.

   * What led up to the situation?

Created custom locales in /usr/local/share/i18n/locales/ and wanted
to copy from one those custome locales: en_GB@INTL shall copy LC_TIME from 
en_US@INTL.

   * What exactly did you do (or not do) that was effective (or
     ineffective)?

Looked around and recognized that locale-gen doesn't pass any I18NPATH to 
localedef. So only the compiled-in single path /usr/share/i18n/locales/ is 
referenced.

   * What was the outcome of this action?

Referencing custom locales without I18NPATH does not work (see error message 
above).

   * What outcome did you expect instead?

Referencing a custom locale should work out of the box.

   * Workarounds?

This worked: `I18NPATH=/usr/local/share/i18n dpkg-reconfigure locales`

   * Possible solutions?

Option #1: Enhance `locale-gen` to set I18NPATH when calling localedef

TESTED and working, allows to set I18NPATH also from the outside.

/usr/sbin/locale-gen:
...
if [ -z "${I18NPATH:-}" ]; then
  if [ -d "${USER_LOCALES}" ]; then
    I18NPATH="${USER_LOCALES%/locales}"
  fi
fi

echo "Generating locales (this might take a while)..."
while read -r locale charset; do
  ...
  I18NPATH="${I18NPATH}" localedef ...
  ...
done


Option #2: Enhance `localedef` upstream to allow collon separated list of paths 
via LOCSRCDIR macro

There are no changes since glibc 2.36 in function locfile_read() of 
locale/programs/locfile.c and no debian patches for this function.

Something like this should work (UNTESTED!):

int
locfile_read (struct localedef_t *result, const struct charmap_t *charmap)
{
...
      /* Test in the default directories.  */
      if (ldfile == NULL)
        {
          char *locpath = LOCSRCDIR;
          const size_t pathlen = strlen (locpath);
          char locpathbuf[pathlen + 1];
          char path[strlen (filename) + 1 + pathlen];
          char *next;
          locpath = memcpy (locpathbuf, locpath, pathlen + 1);

          while (ldfile == NULL
             && (next = strsep (&locpath, ":")) != NULL)
            {
              stpcpy (stpcpy (path, next), filename);
            
              ldfile = lr_open (path, locfile_hash);
            
              if (ldfile == NULL)
                {
                  stpcpy (stpcpy (stpcpy (path, next), "/"), filename);
            
                  ldfile = lr_open (path, locfile_hash);
                }
            }
        }
...


-- System Information:
Debian Release: 12.5
  APT prefers stable-updates
  APT policy: (500, 'stable-updates'), (500, 'stable-security'), (500, 'stable')
Architecture: amd64 (x86_64)

Kernel: Linux 6.1.0-9-amd64 (SMP w/1 CPU thread; PREEMPT)
Locale: LANG=en_US.UTF-8@INTL, LC_CTYPE=en_US.UTF-8@INTL (charmap=UTF-8), 
LANGUAGE=en_US:en
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages locales depends on:
ii  debconf [debconf-2.0]  1.5.82
ii  libc-bin               2.36-9+deb12u4
ii  libc-l10n              2.36-9+deb12u4

locales recommends no packages.

locales suggests no packages.

-- debconf information:
* locales/locales_to_be_generated: en_DE.UTF-8@INTL UTF-8, en_US.UTF-8 UTF-8, 
en_US.UTF-8@INTL UTF-8
* locales/default_environment_locale: en_US.UTF-8@INTL
comment_char %
escape_char /

% INTL English locale for US
% This is a modified copy of "en_US"
% Modifications done for internationally working people: ISO date, 24h clock, 
comma as decimal separator, A4 paper, metric system, etc.
% Most settings are either directly copied from en_US or from i18n
% Special cases are explicitly mentioned

% "en_US" is part of the GNU C Library and contains locale data.
% The Free Software Foundation does not claim any copyright interest
% in the locale data contained in this file.  The foregoing does not
% affect the license of the GNU C Library as a whole.  It does not
% exempt you from the conditions of the license if your use would
% otherwise be governed by that license.

LC_IDENTIFICATION
title      "INTL English locale for US (based on en_US)"
source     "Maddes (based on the work of Free Software Foundation, Inc.)"
address    "http:////www.github.com//maddes-b//linux-stuff//";
contact    ""
email      ""
tel        ""
fax        ""
language   "American English"
territory  "United States"
revision   "1.0"
date       "2024-03-12"

category "i18n:2012";LC_IDENTIFICATION
category "i18n:2012";LC_CTYPE
category "i18n:2012";LC_COLLATE
category "i18n:2012";LC_TIME
category "i18n:2012";LC_NUMERIC
category "i18n:2012";LC_MONETARY
category "i18n:2012";LC_MESSAGES
category "i18n:2012";LC_PAPER
category "i18n:2012";LC_NAME
category "i18n:2012";LC_ADDRESS
category "i18n:2012";LC_TELEPHONE
category "i18n:2012";LC_MEASUREMENT
END LC_IDENTIFICATION


LC_CTYPE
copy "en_US"
END LC_CTYPE


LC_COLLATE
copy "en_US"
END LC_COLLATE


LC_MONETARY
% -- taken from en_US
int_curr_symbol     "USD "
currency_symbol     "$"
mon_decimal_point   ","  % INTL: adapted
mon_thousands_sep   "."  % INTL: adapted
mon_grouping        3;3
positive_sign       ""
negative_sign       "-"
int_frac_digits     2
frac_digits         2
p_cs_precedes       1
int_p_sep_by_space  1
p_sep_by_space      0
n_cs_precedes       1
int_n_sep_by_space  1
n_sep_by_space      0
p_sign_posn         1
n_sign_posn         1
END LC_MONETARY


LC_NUMERIC
% -- taken from en_US
decimal_point   ","  % INTL: adapted
thousands_sep   "."  % INTL: adapted
grouping        3;3
END LC_NUMERIC


LC_TIME
% -- taken from en_US/en_GB
abday "Sun";"Mon";"Tue";"Wed";"Thu";"Fri";"Sat"
day /
  "Sunday";/
  "Monday";/
  "Tuesday";/
  "Wednesday";/
  "Thursday";/
  "Friday";/
  "Saturday"
abmon /
  "Jan";"Feb";/
  "Mar";"Apr";/
  "May";"Jun";/
  "Jul";"Aug";/
  "Sep";"Oct";/
  "Nov";"Dec"
mon /
  "January";/
  "February";/
  "March";/
  "April";/
  "May";/
  "June";/
  "July";/
  "August";/
  "September";/
  "October";/
  "November";/
  "December"
% Appropriate 12h clock time representation (%r)
am_pm "AM";"PM"
t_fmt_ampm "%I:%M:%S %p %Z"  % INTL: adapted
% -- taken/adapted from i18n
% This is the ISO/IEC 14652 "i18n" definition for
% the LC_TIME category.
%
% Weekday and week numbering according to ISO 8601  % INTL: adapted
% https://sourceware.org/glibc/wiki/Locales#LC_TIME
% glibc <=2.36: needs to be based on Sunday
week 7;19971130;4
first_weekday 2
first_workday 2
% week 7;19971201;4
% first_weekday 1
% first_workday 1
% Date formats following ISO 8601
% Appropriate date and time representation (%c)
d_t_fmt    "%F %T %Z"  % INTL: adapted
%
% Appropriate date representation (%x)
d_fmt      "%F"
%
% Appropriate time representation (%X)
t_fmt      "%T %Z"  % INTL: adapted
%
% Appropriate date representation (date(1))
date_fmt   "%a %F %T %Z"  % INTL: adapted
END LC_TIME


LC_MESSAGES
copy "en_US"
END LC_MESSAGES


LC_PAPER
copy "i18n"
END LC_PAPER


LC_NAME
copy "en_US"
END LC_NAME


LC_ADDRESS
copy "en_US"
END LC_ADDRESS


LC_TELEPHONE
copy "en_US"
END LC_TELEPHONE


LC_MEASUREMENT
copy "i18n"
END LC_MEASUREMENT
comment_char %
escape_char /

% INTL English locale for GB
% This is a modified copy of "en_GB"
% Modifications done for internationally working people: ISO date, 24h clock, 
comma as decimal separator, A4 paper, metric system, etc.
% Most settings are either directly copied from en_GB or from i18n
% Special cases are explicitly mentioned

% "en_GB" is part of the GNU C Library and contains locale data.
% The Free Software Foundation does not claim any copyright interest
% in the locale data contained in this file.  The foregoing does not
% affect the license of the GNU C Library as a whole.  It does not
% exempt you from the conditions of the license if your use would
% otherwise be governed by that license.

LC_IDENTIFICATION
title      "INTL English locale for GB (based on en_GB)"
source     "Maddes (based on the work of Free Software Foundation, Inc.)"
address    "http:////www.github.com//maddes-b//linux-stuff//";
contact    ""
email      ""
tel        ""
fax        ""
language   "British English"
territory  "United Kingdom"
revision   "1.0"
date       "2024-03-12"

category "i18n:2012";LC_IDENTIFICATION
category "i18n:2012";LC_CTYPE
category "i18n:2012";LC_COLLATE
category "i18n:2012";LC_TIME
category "i18n:2012";LC_NUMERIC
category "i18n:2012";LC_MONETARY
category "i18n:2012";LC_MESSAGES
category "i18n:2012";LC_PAPER
category "i18n:2012";LC_NAME
category "i18n:2012";LC_ADDRESS
category "i18n:2012";LC_TELEPHONE
category "i18n:2012";LC_MEASUREMENT
END LC_IDENTIFICATION


LC_CTYPE
copy "en_GB"
END LC_CTYPE


LC_COLLATE
copy "en_GB"
END LC_COLLATE


LC_MONETARY
% -- taken from en_GB
int_curr_symbol         "GBP "
currency_symbol         "£"
mon_decimal_point       ","  % INTL: adapted
mon_thousands_sep       "."  % INTL: adapted
mon_grouping            3
positive_sign           ""
negative_sign           "-"
int_frac_digits         2
frac_digits             2
p_cs_precedes           1
p_sep_by_space          0
n_cs_precedes           1
n_sep_by_space          0
p_sign_posn             1
n_sign_posn             1
END LC_MONETARY


LC_NUMERIC
% -- taken from en_GB
decimal_point           ","  % INTL: adapted
thousands_sep           "."  % INTL: adapted
grouping                3
END LC_NUMERIC


LC_TIME
copy "en_US@INTL"
END LC_TIME


LC_MESSAGES
copy "en_GB"
END LC_MESSAGES


LC_PAPER
copy "i18n"
END LC_PAPER


LC_NAME
copy "en_GB"
END LC_NAME


LC_ADDRESS
copy "en_GB"
END LC_ADDRESS


LC_TELEPHONE
copy "en_GB"
END LC_TELEPHONE


LC_MEASUREMENT
copy "i18n"
END LC_MEASUREMENT
en_GB.UTF-8@INTL UTF-8
en_US.UTF-8@INTL UTF-8

Reply via email to