LOCALE(7) Manuale del programmatore di Linux LOCALE(7)

locale - Descrizione del supporto multi-lingue

#include <locale.h>

Una localizzazione è un insieme di regole linguistiche e culturali che coprono campi come la lingua dei messaggi, diversi insiemi di caratteri, convenzioni lessicografiche, ecc. Un programma deve poter determinare la sua localizzazione e agire di conseguenza per poter essere adattato a culture diverse.

L'header <locale.h> dichiara i tipi di dati, funzioni e macro utili a questo scopo.

Le funzioni che vengono dichiarate sono setlocale(3) per impostare la localizzazione attuale e localeconv(3) per ottenere informazioni sulla formattazione dei numeri.

Le differenti categorie di informazioni sulla localizzazione di cui un programma potrebbe aver bisogno vengono dichiarate come macro. Usandole come primo argomento alla funzione setlocale(3) è possibile impostare queste variabili alla localizzazione desiderata:

LC_ADDRESS (estensione GNU, a partire da glibc 2.2)
Cambia le impostazioni che definiscono i formati usati per specificare luoghi ed elementi di tipo geografico (p.es. indirizzi postali). Le applicazioni che necessitano di questo tipo di informazioni possono usare nl_langinfo(3) per richiamare elementi non standard, come _NL_ADDRESS_COUNTRY_NAME (nome del paese, nella lingua della localizzazione) e _NL_ADDRESS_LANG_NAME (nome della lingua, nella lingua della localizzazione, che restituisce stringhe come "Deutschland" e "Deutsch" (per le localizzazioni della lingua tedesca). (Altri nomi di elementi sono elencati in <langinfo.h>.)
LC_COLLATE
Questa categoria controlla le regole di collazione usate per l'ordinamento e le espressioni regolari, comprese le classi di equivalenza dei caratteri e gli elementi di collazione multicarattere. Questa categoria di localizzazione modifica il comportamento delle funzioni strcoll(3) e strxfrm(3), che servono per confrontare stringhe nell'alfabeto locale. Ad esempio, la «ß» tedesca viene ordinata come «ss».
LC_CTYPE
Questa categoria determina l'interpretazione delle sequenze di byte come caratteri (p.es. caratteri singoli o multibyte), le classificazioni dei caratteri (p.es. lettera o cifra), e il comportamento delle classi di caratteri. Sui sistemi basati su glibc, questa categoria determina anche le regole di traslitterazione dei caratteri per iconv(1) e iconv(3). Modifica il comportamento delle funzioni che maneggiano e classificano caratteri, come isupper(3) e toupper(3), e le funzioni per caratteri multibyte come mblen(3) o wctomb(3).
LC_IDENTIFICATION (estensione GNU, a partire da glibc 2.2)
Cambia le impostazioni inerenti ai metadati per la localizzazione. Le applicazioni che necessitano di questa informazione possono usare nl_langinfo(3) per richiamare elementi non standard, come _NL_IDENTIFICATION_TITLE (titolo di questo documento di localizzazione) e _NL_IDENTIFICATION_TERRITORY (territorio geografico al quale si applica il documento), che potrebbe restituire "English locale for the USA" e "USA". (Altri nomi di elementi sono elencati in <langinfo.h>.)
LC_MONETARY
Questa categoria determina la formattazione usata per i valori numerici di tipo monetario. Cambia l'informazione restituita da localeconv(3), che descrive il modo in cui i numeri vengono normalmente stampati, compresi dettagli come l'uso del punto o della virgola decimale. Questa informazione è usata internamente dalla funzione strfmon(3).
LC_MESSAGES
Questa categoria influisce sulla lingua nella quale i messaggi vengono mostrati e la forma delle risposte positive o negative. La libreria C di GNU contiene le funzioni gettext(3), ngettext(3), e rpmatch(3) per facilitare l'impiego di queste informazioni. La famiglia di funzioni GNU gettext rispetta anche la variabile d'ambiente LANGUAGE (che contiene un elenco di localizzazioni, separate da virgole) se la categoria è stata impostata ad una localizzazione valida diversa da "C". Questa categoria influisce anche sul comportamento di catopen(3).
LC_MEASUREMENT (estensione GNU, a partire da glibc 2.2)
Cambia le impostazioni relative al sistema di misura nella localizzazione (cioè, metrico o sistema consuetudinario statunitense). Le applicazioni possono usare nl_langinfo(3) per richiamare l'elemento non standard _NL_MEASUREMENT_MEASUREMENT che restituisce un puntatore a un carattere che ha il valore 1 (metrico) o 2 (sistema consuetudinario statunitense).
LC_NAME (estensione GNU, a partire da glibc 2.2)
Cambia le impostazioni che definiscono i formati usati per rivolgersi alle persone. Le applicazioni possono usare nl_langinfo(3) per richiamare elementi non standard, come gli elementi _NL_NAME_NAME_MR (titolo generico per gli uomini) e _NL_NAME_NAME_MS (titolo generico per le donne), che restituiscono stringhe come "Herr" e "Frau" (per le localizzazioni in lingua tedesca ["Signor" e "Signora" per quelle in lingua italiana]). Altri nomi di elementi sono elencati in <langinfo.h>.)
LC_NUMERIC
Questa categoria determina le regole di formattazione usate per valori numerici non monetari —per esempio, il separatore delle migliaia e il carattere di radice (un punto nella maggior parte dei paesi di lingua inglese, una virgola in molte altre regioni). Ingfluisce su funzioni come printf(3), scanf(3), e strtod(3). Queste informazioni possono anche essere lette tramite la funzione localeconv(3).
LC_PAPER (estensione GNU, a partire da glibc 2.2)
Cambia le impostazioni relative alle dimensioni dei formati standard della carta (p.es., US letter o A4). Le applicazioni che necessitano di queste dimensioni possono ottenerle usando nl_langinfo(3) per richiamare gli elementi non standard _NL_PAPER_WIDTH e _NL_PAPER_HEIGHT, che restitiuscono valori interi che definiscono le dimensioni in millimetri.
LC_TELEPHONE (estensione GNU, a partire da glibc 2.2)
Cambia le impostazioni che descrivono i formati da usare per i servizi telefonici. Le applicazioni che necessitano di questa informazione possono usare nl_langinfo(3) per richiamare lementi non standard, come _NL_TELEPHONE_INT_PREFIX (prefisso internazionale usato per chiamare numeri in questa localizzazione), che restituiscono una stringa come, per esempio, "49" (per la Germania ["39" per l'Italia]). Altri nomi di elementi sono elencati in <langinfo.h>.)
LC_TIME
Questa categoria controlla la formattazione usata per valori di data e ora. Per esempio, in buona parte d'Europa si usano le 24 ore, a differenza delle 12 ore usate negli Stati Uniti. L'impostazione di questa categoria influisce sul comportamento di funzioni come strftime(3) e strptime(3).
LC_ALL
Vale per tutte le macro precedenti.

Se il secondo argomento a setlocale(3) è la stringa vuota "" la localizzazione predefinita è determinata come segue:

1.
Se è presente una variabile d'ambiente non nulla LC_ALL, viene usato il valore di LC_ALL.
2.
Se una variabile d'ambiente con lo stesso nome di una delle categorie precedenti esiste ed è non nulla, il suo valore viene usato per quella categoria.
3.
Se è presente una variabile d'ambiente non nulla LANG, viene usato il valore di LANG.

I valori che descrivono la formattazione locale dei numeri sono disponibili in una struct lconv restituita dalla funzione localeconv(3), che è così dichiarata:


struct lconv {
/* Informazioni numeriche (non monetarie) */
   char *decimal_point;     /* Carattere radice (separatore decimale) */
   char *thousands_sep;     /* Separatore per gruppi di cifre alla sinistra
                                del carattere radice */
   char *grouping;     /* Ciascun elemento rappresenta il numero di
                           cifre in un gruppo; elementi con indici più alti
                           sono a sinistra.  Un elemento con valore
                           CHAR_MAX significa che non vengono fatti ulteriori
                           raggruppamenti.  Un elemento con valore 0 significa
                           che il precedente elemento è usato per
                           all groups alla sinistra. */
    /* /
 I campi rimanenti sono per informazioni monetarie */
  char *int_curr_symbol;   /* I primi tre caratteri sono un simbolo
                                di valuta definito da ISO 4217.  Il quarto carattere
                                è il separatore.  Il quinto carattere
                                è '\0'. */
    char *currency_symbol;   /* Simbolo di valuta locale */
    char *mon_decimal_point; /* Carattere radice */
    char *mon_thousands_sep; /* Come thousands_sep sopra */
    char *mon_grouping;      /* Come grouping sopra */
    char *positive_sign;     /* Segno per valori positivi */
    char *negative_sign;     /* Segno per valori negativi */
    char  int_frac_digits;   /* Cifre frazionarie inernazionali */
    char  frac_digits;       /* Cifre frazionarie locali */
    char  p_cs_precedes;     /* 1 se il simbolo di valuta precede un
                                valore positivo, 0 se lo segue */
    char  p_sep_by_space;    /* 1 se uno spazio separa
                                il simbolo di valuta da un valore
                                positivo */
    char  n_cs_precedes;     /* 1 se il simbolo di valuta precede un
                                valore negativo, 0 se lo segue  */
    char  n_sep_by_space;    /* 1 se uno spazio separa
                               il simbolo di valuta da un valore
                                negativo */
    /* Posizione dei segni positivo e negativo:
       0 Parentesi delimitano la quantità e il simbolo di valuta
       1 Il segno precede la quantità e il simbolo di valuta.
       2 Il segno segue la quantità e il simbolo di valuta.
       3 Il segno è posto subito prima del simbolo di valuta.
       4 Il segno è posto subito dopo del simbolo di valuta. */
    char  p_sign_posn;
    char  n_sign_posn;
};

POSIX.1-2008 ha fissato norme relative a parecchie estensioni all'API, sulla base di implementazioni realizzate per la prima volta nella versione 2.3 della libreria GNU C. Queste estensioni sono progettate per cercare di risolvere il problema che la tradizionale API di localizzazione non è adeguatamente compatibile con applicazioni multithread [che vengono eseguite in parallelo su più di una CPU] e con applicazioni che devono gestire più di una localizzazione alla volta.

Le estensioni prendono la forma di nuove funzioni per creare e manipolare oggetti di localizzazione (newlocale(3), freelocale(3), duplocale(3), e uselocale(3)) e diverse nuove funzioni di libreria col suffisso "_l" (p.es., toupper_l(3)) che estendono le API dipendenti dalla localizzazione (p.es., toupper(3)) per consentire la specificazione di un oggetto di localizzazione che dovrebbe applicarsi quando si esegue la funzione.

La seguente variabile d'ambiente è usata da newlocale(3) e setlocale(3), e quindi influisce su tutti i programmi senza privilegi localizzati:
LOCPATH
Una lista di nomi di percorso, separati da due punti (':'), da usare per trovare i dati della localizzazione. Se questa variabile è impostata, vengono usati solo i singoli file compilati dei dati della localizzazione presenti in LOCPATH e il percorso predefinito di sistema per i dati della localizzazione; non viene usato nessuno degli archivi della localizzazione disponibili (vedi localedef(1)). I singoli file compilati dei dati della localizzazione vengono cercati nelle sottodirectory che dipendono dalla localizzazione correntemente usata. Per esempio, quando viene usato en_GB.UTF-8 per una categoria, viene fatta la ricerca nelle seguenti sottodirectory, in quest'ordine: en_GB.UTF-8, en_GB.utf8, en_GB, en.UTF-8, en.utf8 e en.

/usr/lib/locale/locale-archive
Ordinaria posizione predefinita dell'archivio della localizzazione.
/usr/lib/locale
Ordinario percorso predefinito per i singoli file compilati della localizzazione.

POSIX.1-2001.

iconv(1), locale(1), localedef(1), catopen(3), gettext(3), iconv(3), localeconv(3), mbstowcs(3), newlocale(3), ngettext(3), nl_langinfo(3), rpmatch(3), setlocale(3), strcoll(3), strfmon(3), strftime(3), strxfrm(3), uselocale(3), wcstombs(3), locale(5), charsets(7), unicode(7), utf-8(7)

Questa pagina fa parte del rilascio 5.11 del progetto Linux man-pages. Una descrizione del progetto, le istruzioni per la segnalazione degli errori, e l'ultima versione di questa pagina si trovano su https://www.kernel.org/doc/man-pages/.

La traduzione italiana di questa pagina di manuale è stata creata da Ottavio G. Rizzo <rizzo@pluto.linux.it>, Giulio Daprelà <giulio@pluto.it>, Elisabetta Galli <lab@kkk.it> e Marco Curreli <marcocurreli@tiscali.it>

Questa traduzione è documentazione libera; leggere la GNU General Public License Versione 3 o successiva per le condizioni di copyright. Non ci assumiamo alcuna responsabilità.

Per segnalare errori nella traduzione di questa pagina di manuale inviare un messaggio a pluto-ildp@lists.pluto.it.

22 marzo 2021 Linux