dwww Home | Manual pages | Find package

I18N::Langinfo(3perl)   Perl Programmers Reference Guide  I18N::Langinfo(3perl)

NAME
       I18N::Langinfo - query locale information

SYNOPSIS
         use I18N::Langinfo;

DESCRIPTION
       The langinfo() function queries various locale information that can be
       used to localize output and user interfaces.  It uses the current
       underlying locale, regardless of whether or not it was called from
       within the scope of "use locale".  The langinfo() function requires one
       numeric argument that identifies the locale constant to query: if no
       argument is supplied, $_ is used.  The numeric constants appropriate to
       be used as arguments are exportable from I18N::Langinfo.

       The following example will import the langinfo() function itself and
       three constants to be used as arguments to langinfo(): a constant for
       the abbreviated first day of the week (the numbering starts from Sunday
       = 1) and two more constants for the affirmative and negative answers for
       a yes/no question in the current locale.

           use I18N::Langinfo qw(langinfo ABDAY_1 YESSTR NOSTR);

           my ($abday_1, $yesstr, $nostr) =
               map { langinfo($_) } (ABDAY_1, YESSTR, NOSTR);

           print "$abday_1? [$yesstr/$nostr] ";

       In other words, in the "C" (or English) locale the above will probably
       print something like:

           Sun? [yes/no]

       but under a French locale

           dim? [oui/non]

       The usually available constants are as follows.

       •   For  abbreviated  and full length days of the week and months of the
           year:

               ABDAY_1 ABDAY_2 ABDAY_3 ABDAY_4 ABDAY_5 ABDAY_6 ABDAY_7
               ABMON_1 ABMON_2 ABMON_3 ABMON_4 ABMON_5 ABMON_6
               ABMON_7 ABMON_8 ABMON_9 ABMON_10 ABMON_11 ABMON_12
               DAY_1 DAY_2 DAY_3 DAY_4 DAY_5 DAY_6 DAY_7
               MON_1 MON_2 MON_3 MON_4 MON_5 MON_6
               MON_7 MON_8 MON_9 MON_10 MON_11 MON_12

       •   For the date-time, date, and time formats  used  by  the  strftime()
           function (see POSIX):

               D_T_FMT D_FMT T_FMT

       •   For  the  locales for which it makes sense to have ante meridiem and
           post meridiem time formats:

               AM_STR PM_STR T_FMT_AMPM

       •   For the character code set being used (such as "ISO8859-1", "cp850",
           "koi8-r", "sjis", "utf8", etc.):

               CODESET

       •   For the symbol or string of characters that indicates a number is  a
           monetary value:

               CRNCYSTR

           An example is the dollar sign "$".  Some locales not associated with
           particular  locations  may  have  an  empty currency string.  (The C
           locale is one.)  Otherwise, the return of this is always prefixed by
           one of these three characters:

           "-" indicates that in this locale, the string precedes  the  numeric
               value, as in a U.S. locale: "$9.95".

           "+" indicates  that  in  this locale, the string follows the numeric
               value, like "9.95USD".

           "." indicates that in this locale, the  string  replaces  the  radix
               character, like "9$95".

       •   For  the radix character used between the integer and the fractional
           part of decimal numbers, and the group separator string  for  large-
           ish   floating   point   numbers  (yes,  these  are  redundant  with
           POSIX::localeconv()):

               RADIXCHAR THOUSEP

       •   For any alternate digits used in this locale  besides  the  standard
           0..9:

               ALT_DIGITS

           This  returns  a  sequence of alternate numeric reprsesentations for
           the numbers 0 ... up to 99.  The representations are returned  in  a
           single   string,  with  a  semi-colon  ";"  used  to  separated  the
           individual ones.

           Most locales don't have alternate digits,  so  the  string  will  be
           empty.

           To access this data conveniently, you could do something like

            use I18N::Langinfo qw(langinfo ALT_DIGITS);
            my @alt_digits = split ';', langinfo(ALT_DIGITS);

           The  array @alt_digits will contain 0 elements if the current locale
           doesn't have alternate digits specified for it.  Otherwise, it  will
           have  as  many elements as the locale defines, with "[0]" containing
           the alternate digit for zero; "[1]" for one; and  so  forth,  up  to
           potentially "[99]" for the alternate representation of ninety-nine.

           Be  aware  that the alternate representation in some locales for the
           numbers 0..9 will have a leading alternate-zero, so would look  like
           the equivalent of 00..09.

           Running this program

            use I18N::Langinfo qw(langinfo ALT_DIGITS);
            my @alt_digits = split ';', langinfo(ALT_DIGITS);
            splice @alt_digits, 15;
            print join " ", @alt_digits, "\n";

           on a Japanese locale yields

           "〇 一 二 三 四 五 六 七 八 九 十 十一 十二 十三 十四"

           on some platforms.

       •   For the affirmative and negative responses and expressions:

               YESSTR YESEXPR NOSTR NOEXPR

       •   For  the  eras  based  on typically some ruler, such as the Japanese
           Emperor (naturally only defined in the appropriate locales):

               ERA ERA_D_FMT ERA_D_T_FMT ERA_T_FMT

       In addition, Linux boxes have extra items,  as  follows.   (When  called
       from other platform types, these return a stub value, of not much use.)

       "_NL_ADDRESS_POSTAL_FMT"
       "_NL_ADDRESS_COUNTRY_NAME"
       "_NL_ADDRESS_COUNTRY_POST"
       "_NL_ADDRESS_COUNTRY_AB2"
       "_NL_ADDRESS_COUNTRY_AB3"
       "_NL_ADDRESS_COUNTRY_CAR"
       "_NL_ADDRESS_COUNTRY_NUM"
       "_NL_ADDRESS_COUNTRY_ISBN"
       "_NL_ADDRESS_LANG_NAME"
       "_NL_ADDRESS_LANG_AB"
       "_NL_ADDRESS_LANG_TERM"
       "_NL_ADDRESS_LANG_LIB"
           On  Linux  boxes, these return information about the country for the
           current locale.  Further information is found in langinfo.h

       "_NL_IDENTIFICATION_TITLE"
       "_NL_IDENTIFICATION_SOURCE"
       "_NL_IDENTIFICATION_ADDRESS"
       "_NL_IDENTIFICATION_CONTACT"
       "_NL_IDENTIFICATION_EMAIL"
       "_NL_IDENTIFICATION_TEL"
       "_NL_IDENTIFICATION_FAX"
       "_NL_IDENTIFICATION_LANGUAGE"
       "_NL_IDENTIFICATION_TERRITORY"
       "_NL_IDENTIFICATION_AUDIENCE"
       "_NL_IDENTIFICATION_APPLICATION"
       "_NL_IDENTIFICATION_ABBREVIATION"
       "_NL_IDENTIFICATION_REVISION"
       "_NL_IDENTIFICATION_DATE"
       "_NL_IDENTIFICATION_CATEGORY"
           On Linux boxes, these return  meta  information  about  the  current
           locale,  such  as how to get in touch with its maintainers.  Further
           information is found in langinfo.h

       "_NL_MEASUREMENT_MEASUREMENT"
           On Linux boxes, it returns 1 if the  metric  system  of  measurement
           prevails in the locale; or 2 if US customary units prevail.

       "_NL_NAME_NAME_FMT"
       "_NL_NAME_NAME_GEN"
       "_NL_NAME_NAME_MR"
       "_NL_NAME_NAME_MRS"
       "_NL_NAME_NAME_MISS"
       "_NL_NAME_NAME_MS"
           On  Linux  boxes,  these  return  information  about  how  names are
           formatted and the personal salutations used in the  current  locale.
           Further information is found in locale(7) and langinfo.h

       "_NL_PAPER_HEIGHT"
       "_NL_PAPER_WIDTH"
           On  Linux  boxes,  these return the standard size of sheets of paper
           (in millimeters) in the current locale.

       "_NL_TELEPHONE_TEL_INT_FMT"
       "_NL_TELEPHONE_TEL_DOM_FMT"
       "_NL_TELEPHONE_INT_SELECT"
       "_NL_TELEPHONE_INT_PREFIX"
           On Linux boxes, these return information about how telephone numbers
           are formatted (both domestically and international calling)  in  the
           current locale.  Further information is found in langinfo.h

   For systems without "nl_langinfo"
       This  module  originally  was  just a wrapper for the libc "nl_langinfo"
       function, and did not work on systems lacking it, such as Windows.

       Starting in Perl  5.28,  this  module  works  on  all  platforms.   When
       "nl_langinfo"  is  not  available,  it uses various methods to construct
       what that function, if present, would return.  But there  are  potential
       glitches.  These are the items that could be different:

       "ERA"
           Unimplemented, so returns "".

       "CODESET"
           This  should  work  properly  for  Windows platforms.  On almost all
           other modern platforms, it will reliably return "UTF-8" if  that  is
           the  code set.  Otherwise, it depends on the locale's name.  If that
           is of the form "foo.bar", it will assume "bar" is the code set;  and
           it  also  knows  about  the two locales "C" and "POSIX".  If none of
           those apply it returns "".

       "YESEXPR"
       "YESSTR"
       "NOEXPR"
       "NOSTR"
           Only the values for English are returned.  "YESSTR" and "NOSTR" have
           been removed from POSIX 2008, and are retained  here  for  backwards
           compatibility.  Your platform's "nl_langinfo" may not support them.

       "ALT_DIGITS"
           On  systems  with a strftime(3) that recognizes the POSIX-defined %O
           format modifier (not Windows), perl tries hard to return these.  The
           result likely will go as high as what  nl_langinfo()  would  return,
           but  not  necessarily;  and  the  numbers  from  0..9 will always be
           stripped of leading zeros.

           Without %O, an empty string is always returned.

       "D_FMT"
           Always   evaluates   to   %x,   the   locale's   appropriate    date
           representation.

       "T_FMT"
           Always    evaluates   to   %X,   the   locale's   appropriate   time
           representation.

       "D_T_FMT"
           Always evaluates to %c,  the  locale's  appropriate  date  and  time
           representation.

       "CRNCYSTR"
           The  return  may  be  incorrect  for  those  rare  locales where the
           currency symbol replaces the radix character.  If you have  examples
           of  it  needing  to  work  differently,  please  file  a  report  at
           <https://github.com/Perl/perl5/issues>.

       "ERA_D_FMT"
       "ERA_T_FMT"
       "ERA_D_T_FMT"
       "T_FMT_AMPM"
           These are derived by using strftime(), and not all versions of  that
           function know about them.  "" is returned for these on such systems.

       All "_NL_foo" items
           These return the same values as they do on boxes that don't have the
           appropriate underlying locale categories.

       See  your  nl_langinfo(3)  for  more  information  about  the  available
       constants.  (Often this means having to look directly at the  langinfo.h
       C header file.)

   EXPORT
       By default only the langinfo() function is exported.

BUGS
       Before Perl 5.28, the returned values are unreliable for the "RADIXCHAR"
       and "THOUSEP" locale constants.

       Starting  in  5.28,  changing locales on threaded builds is supported on
       systems that offer thread-safe locale functions.   These  include  POSIX
       2008  systems  and  Windows  starting  with Visual Studio 2005, and this
       module will work properly in  such  situations.   However,  on  threaded
       builds  on  Windows  prior  to  Visual Studio 2015, retrieving the items
       "CRNCYSTR" and "THOUSEP" can result in a race with  a  thread  that  has
       converted  to  use the global locale.  It is quite uncommon for a thread
       to have done this.  It would be possible to construct a  workaround  for
       this; patches welcome: see "switch_to_global_locale" in perlapi.

SEE ALSO
       perllocale, "localeconv" in POSIX, "setlocale" in POSIX, nl_langinfo(3).

AUTHOR
       Jarkko Hietaniemi, <jhi@hut.fi>.  Now maintained by Perl 5 porters.

COPYRIGHT AND LICENSE
       Copyright 2001 by Jarkko Hietaniemi

       This  library is free software; you can redistribute it and/or modify it
       under the same terms as Perl itself.

perl v5.40.1                       2026-08-30             I18N::Langinfo(3perl)

Generated by dwww version 1.16 on Sat Oct 3 06:02:47 CEST 2026.