digitalmars.com                      
Last update Sat Jun 18 16:54:32 2011

locale.h


localeconv

Header
locale.h
Prototype
struct lconv *localeconv(void);
Description
localeconv returns a pointer to a filled-in struct lconv which contains information specific to the current country or locale. struct lconv looks like this:
struct lconv
{
   char *decimal_point;
   char *thousands_sep;
   char *int_curr_symbol;
   char *currency_symbol;
   char *mon_decimal_point;
   char *mon_thousands_sep;
   char *negative_sign;
   char frac_digits;
   char p_cs_precedes;
   char p_sep_by_space;
   char n_cs_precedes;
   char n_sep_by_space;
   char n_sign_posn;
   char lc[6];
};
The fields are:

Field Description
decimal_point The decimal point character for non-monetary usage.
thousands_sep The separator in non-monetary usage to the left of the decimal point.
int_curr_symbol The international currency symbol used in the locale.
currency_symbol The local currency symbol.
mon_decimal_point The decimal point character for monetary usage.
mon_thousand_sep The separator in monetary usage to the left of the decimal point.
negative_sign A string to indicate a negative monetary quantity.
frac_digits The number of digits to display to the right of the decimal point for a monetary quantity.
p_cs_precedes 1 if currency_symbol is a prefix, 0 if currency_symbol is a suffix for positive monetary quantities.
p_sep_by_space 1 if currency_symbol is separated by a space from a positive monetary quantity, 0 if there is no space.
n_cs_precedes 1 if currency_symbol is a prefix, 0 if currency_symbol is a suffix for a negative monetary quantity.
n_sep_by_space 1 if currency_value is separated by a space from a negative monetary quantity, 0 if there is no space.
n_sign_posn A value that indicates how to position negative_sign for a formatted monetary quantity.
lc[6] The current state of the locale. LC_XXX forms the index of this array. Its values are from _LOCALE enumeration in locale.h.
Return Value
A pointer to a struct lconv. The values contained within the structure should be regarded as read only.
Compatibility
DOS Windows 3.x Phar Lap DOSX Win32
See Also
setlocale
Example
See setlocale

setlocale

Header
locale.h
Prototype
char *setlocale(int category, const char *locale);
Description
setlocale changes locale-dependent behavior or checks on its current settings. category can be one of the following predefined constants. Digital Mars C++ supports the minimal ANSI C definition and therefore only the following constants have an effect.

Constant Description
LC_ALL Specifies the locale for all categories
LC_COLLATE Change the locale for the strcoll() and strxfrm() functions
LC_CTYPE Change the locale for the character-handling functions and the multi-byte functions.
LC_MONETARY Change the locale for monetary formatting.
LC_NUMERIC Change the locale for numeric formatting.
LC_TIME Change the locale for the strftime() function.

The following locales are recognized:

Locale Description
C The minimal default locale.
USA Predefined in locale.h as the "native" locale. setlocale(LC_ALL,"") selects this.

It also recognizes Italy, Netherlands, Norway, Switzerland, UK, Japan, Korea, China.

Information about the current locale can be obtained by calling setlocale with a NULL second argument. This will return the current locale for the category selected. Having set the locale, a call to localeconv will obtain a pointer to a filled in struct lconv with the specific locale values. See localeconv for details.

Return Value
A pointer containing the currently selected locale for the category specified. A NULL is returned if the locale specified is not supported.
Compatibility
DOS Windows 3.x Phar Lap DOSX Win32
See Also
localeconv
Example
/* Example for setlocale */

#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *countries[] =
{
   "USA",
   "ITALY",
   "NORWAY",
    NULL
};

void main()
{
  char *loc;
  char *currency;
  int i;
  struct lconv *lcptr;
  int money = 100; /* Something to display */

  /* setlocale can be called with a NULL
     locale to check on its current setting
   */
  loc = setlocale(LC_ALL, NULL);
  printf("The default locale is the \"%s\" locale\n", loc);

  for (i = 0; countries[i]; i++)
  {
    loc = setlocale(LC_ALL, countries[i]);
    lcptr = localeconv();
    currency = malloc
      (strlen(lcptr->currency_symbol) + 1);
    strcpy(currency, lcptr->currency_symbol);
    if (loc)
      printf("Monetary figure for %s locale: %s%d\n",
        loc, currency, money);
    free(currency);
 }
}
Output
The default locale is the "C" locale
Monetary figure for USA locale: $100
Monetary figure for Italy locale: L. 100
Monetary figure for Norway locale: kr100
Home | Compiler & Tools | IDDE Reference | STL | Search | Download | Forums