Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Linux ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 119

Автор ΠΡ€Π½ΠΎΠ»ΡŒΠ΄ Роббинс

13.1. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π¦Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠ΅ΠΉ являСтся ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅, мСсто, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. Π›ΠΎΠΊΠ°Π»ΠΈ содСрТат Π² сСбС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ свСдСния: Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ символов; свСдСния ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ отобраТСния Π΄Π°Ρ‚Ρ‹ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ; Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Ρ… сумм; Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ числовых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (с ΠΈΠ»ΠΈ Π±Π΅Π· Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ тысяч, ΠΊΠ°ΠΊΠΎΠΉ символ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² качСствС раздСлитСля Π΄Ρ€ΠΎΠ±Π½ΠΎΠΉ части числа ΠΈ Ρ‚.Π΄.).

Π˜Π½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ являСтся процСссом написания (ΠΈΠ»ΠΈ измСнСния) ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ локалями. Локализация являСтся процСссом приспособлСния ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ. Часто вмСсто этих Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ сокращСния i18n ΠΈ l10n соотвСтствСнно. (ЧисловоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, сколько Π±ΡƒΠΊΠ² Π² сСрСдинС слова, Π° эти сокращСния ΠΈΠΌΠ΅ΡŽΡ‚ нСбольшоС сходство с ΠΏΠΎΠ»Π½Ρ‹ΠΌΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°ΠΌΠΈ.[136] Π˜Ρ… Ρ‚Π°ΠΊΠΆΠ΅ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π»Π΅Π³Ρ‡Π΅ Π½Π°Π±ΠΈΡ€Π°Ρ‚ΡŒ.) Π”Ρ€ΡƒΠ³ΠΈΠΌ часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΌΡΡ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠΌ являСтся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ€ΠΎΠ΄Π½ΠΎΠ³ΠΎ языка, обозначаСмая ΠΊΠ°ΠΊ NLS[137]; NLS ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ для i18n ΠΈ l10n.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ люди ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ глобализация (сокращСнно g10n) для обозначСния процСсса ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ для ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для глобального использования.

ВозмоТности NLS ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π° Π΄Π²ΡƒΡ… уровнях. ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ являСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π‘. Она прСдоставляСт свСдСния ΠΎ Π»ΠΎΠΊΠ°Π»ΠΈ; ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ большСй части Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… подробностСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π΄Π°Ρ‚Ρ‹/Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, числовых ΠΈ Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ; ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ для Π΄Π°Π½Π½ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ сопоставлСния рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ классификации символов ΠΈ сравнСний. ИмСнно возмоТности Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² стандартах Π‘ ΠΈ POSIX.

На ΡƒΡ€ΠΎΠ²Π½Π΅ прилоТСния GNU gettext прСдоставляСт ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ для Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹: Ρ‚.Π΅. для возмоТности Π²Ρ‹Π²ΠΎΠ΄Π° сообщСний Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ СстСствСнных языках. GNU gettext основана Π½Π° ΠΏΠ»Π°Π½Π΅, ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠΌ Sun Microsystems для Solaris[138]; ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΎΠ½Π° Π±Ρ‹Π»Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° с нуля ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ прСдоставляСт Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌΡƒ gettext Solaris. GNU gettext являСтся стандартом Π΄Π΅-Ρ„Π°ΠΊΡ‚ΠΎ для Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, особСнно Π² ΠΌΠΈΡ€Π΅ GNU.

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ локалям ΠΈ gettext стандарт Π‘ прСдоставляСт возмоТности для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с нСсколькими Π½Π°Π±ΠΎΡ€Π°ΠΌΠΈ символов ΠΈ с ΠΈΡ… ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ β€” способом прСдставлСния Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π½Π°Π±ΠΎΡ€ΠΎΠ² символов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ мСньшСго числа Π±Π°ΠΉΡ‚ΠΎΠ². ΠœΡ‹ ΠΊΡ€Π°Ρ‚ΠΊΠΎ Π·Π°Ρ‚Ρ€ΠΎΠ½Π΅ΠΌ эти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² ΠΊΠΎΠ½Ρ†Π΅ Π³Π»Π°Π²Ρ‹.

13.2. Π›ΠΎΠΊΠ°Π»ΠΈ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π‘

Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ‡Π½ΠΎΠ΅ для Π»ΠΎΠΊΠ°Π»ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ управляСтся посрСдством установки ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… окруТСния, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΡ…, ΠΊΠ°ΠΊΡƒΡŽ локаль (Π»ΠΎΠΊΠ°Π»ΠΈ) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Число доступных Π»ΠΎΠΊΠ°Π»Π΅ΠΉ, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹Ρ… ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой, колСблСтся ΠΎΡ‚ ΠΌΠ΅Π½Π΅Π΅ Ρ‡Π΅ΠΌ дСсяти Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… коммСрчСских систСмах Unix Π΄ΠΎ сотСн Π»ΠΎΠΊΠ°Π»Π΅ΠΉ Π½Π° систСмах GNU/Linux. ('locale -a' Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ список доступных Π»ΠΎΠΊΠ°Π»Π΅ΠΉ.)

ГарантируСтся сущСствованиС Π΄Π²ΡƒΡ… Π»ΠΎΠΊΠ°Π»Π΅ΠΉ, Β«Π‘Β» ΠΈ Β«POSIXΒ». Они Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π² качСствС Π»ΠΎΠΊΠ°Π»ΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, прСдоставляя ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ 7-разрядного ASCII, ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ Π½Π° Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах Unix Π±Π΅Π· ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π»ΠΎΠΊΠ°Π»Π΅ΠΉ. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, Π»ΠΎΠΊΠ°Π»ΠΈ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ язык, страну, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ свСдСния ΠΎ Π½Π°Π±ΠΎΡ€Π΅ символов. НапримСр, 'it_IT' ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΈΡ‚Π°Π»ΡŒΡΠ½ΡΠΊΠΎΠ³ΠΎ языка Π² Π˜Ρ‚Π°Π»ΠΈΠΈ с использованиСм систСмного Π½Π°Π±ΠΎΡ€Π° символов ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, a 'it_IT.UTF-8' ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ UTF-8 для Π½Π°Π±ΠΎΡ€Π° символов Unicode.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ подробности ΠΎΠ± ΠΈΠΌΠ΅Π½Π°Ρ… Π»ΠΎΠΊΠ°Π»Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² справочной страницС GNU/Linux setlocale(3). ΠžΠ±Ρ‹Ρ‡Π½ΠΎ дистрибутивы GNU/Linux ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ для систСмы локаль ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈ Π΅Π΅ установкС, ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° языкС, Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌ Ρ‚Π΅ΠΌ ΠΊΡ‚ΠΎ устанавливал Π΅Π΅, ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ большС Π½Π΅ приходится ΠΎΠ± этом Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ.

13.2.1. ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ Π»ΠΎΠΊΠ°Π»Π΅ΠΉ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» <locale.h> опрСдСляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ структуры Π»ΠΎΠΊΠ°Π»ΠΈ. ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ Π»ΠΎΠΊΠ°Π»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ разновидности ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ зависимы ΠΎΡ‚ Π»ΠΎΠΊΠ°Π»ΠΈ. ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ доступны Π² Π²ΠΈΠ΄Π΅ Π½Π°Π±ΠΎΡ€Π° ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… констант. Они пСрСчислСны Π² Ρ‚Π°Π±Π». 13.1.


Π’Π°Π±Π»ΠΈΡ†Π° 13.1. ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ Π»ΠΎΠΊΠ°Π»Π΅ΠΉ ISO Π‘, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² <locale.h>

ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ LC_ALL Π­Ρ‚Π° катСгория Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ всю Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π»ΠΎΠΊΠ°Π»ΠΈ. Она состоит ΠΈΠ· ΠΎΡΡ‚Π°Π²ΡˆΠ΅ΠΉΡΡ части элСмСнтов этой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ LC_COLLATE ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ для сравнСния строк (обсуТдаСмого Π½ΠΈΠΆΠ΅) ΠΈ областСй рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ LC_CTYPE ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ для классификации символов (Π·Π°Π³Π»Π°Π²Π½Ρ‹Π΅, строчныС ΠΈ Ρ‚.Π΄.) Π­Ρ‚ΠΎ влияСт Π½Π° сопоставлСниС рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ isXXX() Π² <ctype.h> LC_MESSAGES ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ для спСцифичных для Π»ΠΎΠΊΠ°Π»ΠΈ сообщСний. Π­Ρ‚Π° катСгория вступаСт Π² ΠΈΠ³Ρ€Ρƒ с GNU gettext, которая обсуТдаСт Π΄Π°Π»Π΅Π΅ Π² Π³Π»Π°Π²Π΅ LC_MONETARY ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ для форматирования Π΄Π΅Π½Π΅ΠΆΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΎΠΉ, ΠΊΠ°ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½Ρ‹Π΅ символы для мСстной Π²Π°Π»ΡŽΡ‚Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, $ ΠΏΡ€ΠΎΡ‚ΠΈΠ² USD для Π΄ΠΎΠ»Π»Π°Ρ€Π° БША), форматирования ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ ΠΈ Ρ‚.Π΄. LC_NUMERIC ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ для форматирования числовых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ LC_TIME ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ для форматирования Π΄Π°Ρ‚ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ

Π­Ρ‚ΠΈ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ стандартами. НСкоторыС систСмы ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ LC_TELEPHONE ΠΈΠ»ΠΈ LC_ADDRESS. Однако, ΠΎΠ½ΠΈ Π½Π΅ стандартизованы; любой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π½ΠΎ которая всС Ρ€Π°Π²Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ пСрСносимой, слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ #ifdef для окруТСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ².

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π‘ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π‘ Π²Π΅Π΄ΡƒΡ‚ сСбя Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ Π² Π»ΠΎΠΊΠ°Π»ΠΈ Β«Π‘Β» ΠΈΠ»ΠΈ Β«POSIXΒ» для обСспСчСния ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости со старыми систСмами. Однако, Π²Ρ‹Π·Π²Π°Π² setlocale() (ΠΊΠ°ΠΊ описано Π½ΠΈΠΆΠ΅), ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ дСйствиС Π»ΠΎΠΊΠ°Π»ΠΈ. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° это сдСлала, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚, установив ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ возмоТности Π»ΠΎΠΊΠ°Π»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚Π΅ ΠΆΠ΅ самыС ΠΈΠΌΠ΅Π½Π°, Ρ‡Ρ‚ΠΎ ΠΈ пСрСчислСнныС Π² Ρ‚Π°Π±Π». 13.1 ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ Π»ΠΎΠΊΠ°Π»Π΅ΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠΎΠΌΠ°Π½Π΄Π° β€”

export LC_NUMERIΠ‘=en_DK LC_TIME=C

β€” опрСдСляСт, Ρ‡Ρ‚ΠΎ числа Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² соотвСтствии с локалью 'en_DK' (английский язык Π² Π”Π°Π½ΠΈΠΈ), Π½ΠΎ Ρ‡Ρ‚ΠΎ значСния Π΄Π°Ρ‚Ρ‹ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² соотвСтствии с ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ локалью 'Π‘'. (Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ просто ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π»ΠΎΠΊΠ°Π»ΠΈ; это Π½Π΅ являСтся Ρ‡Π΅ΠΌ-Ρ‚ΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄Π΅Π»Π°Ρ‚ΡŒ.)

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ окруТСния LC_ALL ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ всС Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ LC_xxx. Если LC_ALL Π½Π΅ установлСна, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΈΡ‰Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ (LC_CTYPE, LC_MONETARY ΠΈ Ρ‚.Π΄.). НаконСц, Ссли Π½ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ… Π½Π΅ установлСна, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΈΡ‰Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ LANG. Π’ΠΎΡ‚ нСбольшая дСмонстрация с использованиСм gawk:

$ unset LC_ALL LANG /* Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ */

$ export LΠ‘_NUMERIC=en_DK LC_TIME=C

 /* ЕвропСйскиС числа, Π΄Π°Ρ‚Π° ΠΈ врСмя ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ */

$ gawk 'BEGIN { print 1.234 ; print strftime() }'

 /* ВывСсти число, Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ Π΄Π°Ρ‚Ρƒ ΠΈ врСмя */

1,234

Wed Jul 09 09:32:18 PDT 2003

$ export LC_NUMERIC=it_IT LC_TIME=it_IT

 /* Π˜Ρ‚Π°Π»ΡŒΡΠ½ΡΠΊΠΈΠ΅ числа, Π΄Π°Ρ‚Π° ΠΈ врСмя */

$ gawk 'BEGIN { print 1.234 ; print strftime() }'

 /* ВывСсти число, Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ Π΄Π°Ρ‚Ρƒ ΠΈ врСмя */

1,234

mer lug 09 09:32:40 PDT 2003

$ export LC_ALL=C /* Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ */

$ gawk 'BEGIN { print 1.234 ; print strftime() }'

 /* ВывСсти число, Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ Π΄Π°Ρ‚Ρƒ ΠΈ врСмя */

1.234

Wed Jul 09 09:33:00 PDT 2003

Для awk стандарт POSIX констатируСт, Ρ‡Ρ‚ΠΎ числовыС константы Π² исходном ΠΊΠΎΠ΄Π΅ всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π² качСствС дСсятичного раздСлитСля '.' Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ числовой Π²Ρ‹Π²ΠΎΠ΄ слСдуСт ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ Π»ΠΎΠΊΠ°Π»ΠΈ).

ΠŸΠΎΡ‡Ρ‚ΠΈ всС GNU вСрсии стандартных ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ Unix ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, особСнно Π½Π° систСмах GNU/Linux, установка этих ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… позволяСт Π²Π°ΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ систСмы[139].

13.2.2. Установка Π»ΠΎΠΊΠ°Π»ΠΈ: setlocale()