locale - descrierea suportului multilingvistic
O configurație regională este un set de reguli
lingvistice și culturale. Acestea acoperă aspecte cum ar fi
limba pentru mesaje, seturi de caractere diferite, convenții
lexicografice și așa mai departe. Un program trebuie să
fie capabil să determine configurația regională a
sistemului și să acționeze în
consecință pentru a fi portabil în diferite
culturi.
Antetul <locale.h> declară tipuri de date,
funcții și macro-uri care sunt utile în această
sarcină.
Funcțiile pe care le declară sunt
setlocale(3) pentru a defini configurația regională
curentă și localeconv(3) pentru a obține
informații despre formatarea numerelor.
Există diferite categorii de informații locale de
care un program ar putea avea nevoie; acestea sunt declarate ca macro-uri.
Utilizându-le ca prim argument al funcției
setlocale(3), este posibil să definiți una dintre
acestea la parametrul regional dorit:
- LC_ADDRESS
(extensie GNU, începând cu glibc 2.2)
- Modifică configurările care descriu formatele (de exemplu,
adresele poștale) utilizate pentru a descrie locațiile
și elementele legate de geografie. Aplicațiile care au
nevoie de aceste informații pot utiliza nl_langinfo(3)
pentru a extrage elemente nestandardizate, cum ar fi
_NL_ADDRESS_COUNTRY_NAME (numele țării, în
limba localului) și _NL_ADDRESS_LANG_NAME (numele limbii,
în limba configurației regionale), care returnează
șiruri de caractere cum ar fi „Deutschland” și
„Deutsch” (pentru parametrii regionali de limbă
germană). Alte nume de elemente sunt enumerate în
<langinfo.h>.
- LC_COLLATE
- Această categorie guvernează regulile de colaționare
utilizate pentru sortare și expresii regulate, inclusiv clasele de
echivalență a caracterelor și elementele de
colaționare multi-caracter. Această categorie locală
modifică comportamentul funcțiilor strcoll(3)
și strxfrm(3), care sunt utilizate pentru a compara
șiruri în alfabetul local. De exemplu, s ascuțit
german, numit și „eszett” (ß) este sortat ca
„ss”.
- LC_CTYPE
- Această categorie determină interpretarea secvențelor
de octeți ca caractere (de exemplu, caractere cu un singur octet
versus caractere cu mai multe octeți), clasificarea caracterelor
(de exemplu, alfabetice sau cifre) și comportamentul claselor de
caractere. În sistemele glibc, această categorie
determină și regulile de transliterare a caracterelor pentru
iconv(1) și iconv(3). Aceasta modifică
comportamentul funcțiilor de tratare și clasificare a
caracterelor, precum isupper(3) și toupper(3),
și al funcțiilor de caractere multioctet, precum
mblen(3) sau wctomb(3).
- LC_IDENTIFICATION
(extensie GNU, începând cu glibc 2.2)
- Modifică regurile care se referă la metadatele pentru
parametrii regionali. Aplicațiile care au nevoie de aceste
informații pot utiliza nl_langinfo(3) pentru a extrage
elemente nestandardizate, cum ar fi _NL_IDENTIFICATION_TITLE
(titlul acestui document de configurație regională)
și _NL_IDENTIFICATION_TERRITORY (teritoriul geografic
căruia i se aplică acest document de configurație
regională), care ar putea returna șiruri de caractere precum
„English locale for the USA” și „USA”.
Alte nume de elemente sunt enumerate în
<langinfo.h>.
- LC_MONETARY
- Această categorie determină formatarea utilizată
pentru valorile numerice monetare. Aceasta modifică
informațiile returnate de localeconv(3), care descriu modul
în care sunt imprimate de obicei numerele, cu detalii precum
punctul zecimal versus virgula zecimală. Această
informație este utilizată intern de funcția
strfmon(3).
- LC_MESSAGES
- Această categorie afectează limba în care sunt
afișate mesajele și modul în care arată un
răspuns afirmativ sau negativ. Biblioteca GNU C conține
funcțiile gettext(3), ngettext(3) și
rpmatch(3) pentru a facilita utilizarea acestor informații.
Familia de funcții GNU gettext se supune, de asemenea, variabilei
de mediu LANGUAGE (care conține o listă de parametri
regionali separați prin două puncte) dacă categoria
este definită la un alt parametru regional valid decât
"C". Această categorie afectează, de
asemenea, comportamentul lui catopen(3).
- LC_MEASUREMENT
(extensie GNU, începând cu glibc 2.2)
- Modifică configurările legate de sistemul de măsurare
local (adică, unități metrice față de
unități uzuale americane). Aplicațiile pot utiliza
nl_langinfo(3) pentru a extrage elementul
_NL_MEASUREMENT_MEASUREMENT nestandardizat, care returnează
un indicator către un caracter care are valoarea 1 (metric) sau 2
(unități uzuale americane).
- LC_NAME (extensie
GNU, începând cu glibc 2.2)
- Modifică configurările care descriu formatele utilizate
pentru adresarea persoanelor. Aplicațiile care au nevoie de aceste
informații pot utiliza nl_langinfo(3) pentru a prelua
elemente non-standard, cum ar fi elementele _NL_NAME_NAME_MR
(salutul general pentru bărbați) și
_NL_NAME_NAME_MS (salutul general pentru femei), care
returnează șiruri precum „Herr” și
„Frau” (pentru configurațiile regionale de
limbă germană). Alte nume de elemente sunt enumerate
în <langinfo.h>.
- LC_NUMERIC
- Această categorie determină regulile de formatare utilizate
pentru valorile numerice nemonetare -- de exemplu, separatorul de mii
și caracterul zecimal (un punct în majoritatea
țărilor vorbitoare de limba engleză, dar o
virgulă în multe alte regiuni). Aceasta afectează
funcții precum printf(3), scanf(3) și
strtod(3). Aceste informații pot fi citite și cu
funcția localeconv(3).
- LC_PAPER
(extensie GNU, începând cu glibc 2.2)
- Modifică configurările referitoare la dimensiunile
mărimii standard a hârtiei (de exemplu, US letter versus
A4). Aplicațiile care au nevoie de dimensiuni le pot obține
utilizând nl_langinfo(3) pentru a extrage elementele
non-standard _NL_PAPER_WIDTH și _NL_PAPER_HEIGHT,
care returnează valori int specificând dimensiunile
în milimetri.
- LC_TELEPHONE
(extensie GNU, începând cu glibc 2.2)
- Modifică configurările care descriu formatele care
urmează să fie utilizate cu serviciile telefonice.
Aplicațiile care au nevoie de aceste informații pot utiliza
nl_langinfo(3) pentru a prelua elemente nestandardizate, cum ar fi
_NL_TELEPHONE_INT_PREFIX (prefix internațional utilizat
pentru apelarea numerelor în această configurație
regională), care returnează un șir de caractere cum
ar fi „40” (pentru România). Alte nume de elemente
sunt enumerate în <langinfo.h>.
- LC_TIME
- Această categorie reglementează formatarea utilizată
pentru valorile datei și orei. De exemplu, cea mai mare parte a
Europei utilizează un ceas de 24 de ore față de
ceasul de 12 ore utilizat în Statele Unite. Configurarea acestei
categorii afectează comportamentul unor funcții precum
strftime(3) și strptime(3).
- LC_ALL
- Toate cele de mai sus.
Dacă cel de-al doilea argument al funcției
setlocale(3) este un șir gol, "", pentru
configurația regională implicită, aceasta este
determinată folosind următorii pași:
- (1)
- Dacă există o variabilă de mediu LC_ALL cu o
valoare nenulă, se utilizează valoarea lui
LC_ALL.
- (2)
- Dacă există o variabilă de mediu cu același
nume ca una dintre categoriile de mai sus și nu este nulă,
valoarea acesteia este utilizată pentru categoria
respectivă.
- (3)
- Dacă există o variabilă de mediu LANG cu o
valoare nenulă, se utilizează valoarea lui LANG.
Valorile privind formatarea numerică locală (conform
configurației regionale) sunt disponibile într-o struct
lconv returnată de funcția localeconv(3), care are
următoarea declarație:
struct lconv {
/* Informații numerice (ne monetare) */
char *decimal_point; /* Caracterul zecimal */
char *thousands_sep; /* Separator pentru grupuri de cifre
la stânga caracterului zecimal */
char *grouping; /* Fiecare element este numărul de cifre
dintr-un grup; elementele cu indici mai mari
sunt mai la stânga. CHAR_MAX înseamnă că nu
se face nicio grupare suplimentară. Un element
cu valoarea 0 înseamnă că elementul anterior
este utilizat pentru toate grupurile din stânga. */
/* Câmpurile rămase sunt pentru informații monetare. */
char *int_curr_symbol; /* Primele trei caractere sunt un simbol
valutar din ISO 4217. Al patrulea
caracter este separatorul. Al cincilea
caracter este „\0”. */
char *currency_symbol; /* Simbolul monedei locale */
char *mon_decimal_point; /* Caracterul zecimal */
char *mon_thousands_sep; /* Precum thousands_sep de mai sus */
char *mon_grouping; /* Precum grouping de mai sus */
char *positive_sign; /* Semnul pentru valorile pozitive */
char *negative_sign; /* Semnul pentru valorile negative */
char int_frac_digits; /* Cifre fracționare internaționale */
char frac_digits; /* Cifre fracționare locale */
char p_cs_precedes; /* 1 dacă simbolul monedei precede o
valoare pozitivă, 0 dacă urmează */
char p_sep_by_space; /* 1 dacă un spațiu separă simbolul
monedei de o valoare pozitivă */
char n_cs_precedes; /* 1 dacă simbolul monedei precede o
valoare negativă, 0 dacă urmează */
char n_sep_by_space; /* 1 dacă un spațiu separă simbolul
monedei de o valoare negativă */
/* Poziții cu semn pozitiv și negativ:
0 Parantezele înconjoară cantitatea și simbolul monedei.
1 Semnul precede cantitatea și simbolul monedei.
2 Semnul urmează cantității și simbolului monedei.
3 Semnul precede imediat simbolul monedei (currency_symbol).
4 Semnul urmează imediat simbolului monedei. */
char p_sign_posn;
char n_sign_posn;
};
POSIX.1-2008 a standardizat o serie de extensii ale API-ului
configurației regionale pentru parametrii acesteia, bazate pe
implementări care au apărut pentru prima dată în
glibc 2.3. Aceste extensii sunt concepute pentru a rezolva problema faptului
că API-urile configurației regionale tradiționale nu se
combină bine cu aplicațiile multi-fir și cu
aplicațiile care trebuie să se descurce cu mai mulți
parametrii regionali.
Extensiile iau forma unor noi funcții pentru crearea
și manipularea obiectelor de parametri regionali
(newlocale(3), freelocale(3), duplocale(3) și
uselocale(3)) și diverse funcții noi de
bibliotecă cu sufixul „_l” (de ex, toupper_l(3))
care extind API-urile tradiționale dependente de parametrii regionali
(de exemplu, toupper(3)) pentru a permite specificarea unui obiect de
parametru regional care ar trebui aplicat la executarea funcției.
Următoarea variabilă de mediu este utilizată
de newlocale(3) și setlocale(3) și
afectează astfel toate programele neprivilegiate ce se
conformă configurațiilor regionale:
- LOCPATH
- O listă de nume de rute, separate prin două puncte (':'),
care ar trebui să fie utilizate pentru a găsi date
referitoare la parametri regionali. Dacă această
variabilă este definită, sunt utilizate numai
fișierele individuale de date referitoare la parametri regionali
compilate din LOCPATH și ruta de date a parametrilor
regionali implicită a sistemului; orice alte arhive referitoare la
parametri regionali disponibile nu sunt utilizate (consultați
localedef(1)). Fișierele individuale de date locale
compilate sunt căutate în subdirectoare care depind de
configurația regională utilizată în prezent.
De exemplu, atunci când en_GB.UTF-8 este utilizată
pentru o categorie, sunt căutate următoarele subdirectoare,
în această ordine: en_GB.UTF-8, en_GB.utf8,
en_GB, en.UTF-8, en.utf8 și en.
- /usr/lib/locale/locale-archive
- Locația implicită obișnuită a arhivei
locale.
- /usr/lib/locale
- Ruta implicită obișnuită pentru fișierele de
configurații regionale „locale” individuale
compilate.
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)
Traducerea în limba română a acestui manual a
fost făcută de Remus-Gabriel Chelu
<remusgabriel.chelu@disroot.org>
Această traducere este documentație gratuită;
citiți
Licența
publică generală GNU Versiunea 3 sau o versiune
ulterioară cu privire la condiții privind drepturile de autor.
NU se asumă NICIO RESPONSABILITATE.
Dacă găsiți erori în traducerea
acestui manual, vă rugăm să trimiteți un e-mail
la
translation-team-ro@lists.sourceforge.net.