Езикови и регионални настройки 


1.       Проверка на текущите настройки

2.       Извеждане на инсталираните езици

3.       Промяна на настройките

4.       При отсъствие на езикови настройки

5.      Конфигуриране на клавиатурата


       

Пакетът locale  (инсталира се по подразбиране) включва езиковите настройки и културните правила - език на съобщенията, набори от символи, начин на представяне на числа, дати, лексикографически правила ...  . Адаптирането на операционната ситема към конкретните езикови настройки се нарича localization, често съкращаван като l10n (10 букви между l и n).

Всяка програма трябва да отчита тези настройки за коректното си пренасяне в различни културни среди. Създаването на такъв софтуер се нарича internationalization съкращаван аналогично като i18n .  Често използвано съкращение е l18n , което представлява съчетаване на l10n и i18n ( localization и  internationalization ).

Настройките за l10n се задават чрез променливи на средата, които могат да се задават експлицитно или да се оствят по подразбиране в зависимост от общите езикови настройки.


1.        Проверка на текущите настройки (променливите на средата за езикови настройки)

При инсталирането на linux се се избират и инсталират съответен език и клавиатура. Те могат да бъдат проверени с команда localectl (Control the system locale and keyboard layout settings) а само езикът може да бъде изведен с проверка на променливата на средата LANG.  

$ echo $LANG
en_US.UTF-8

$ localectl
     System Locale: LANG=en_US.utf8
                  LC_NUMERIC=bg_BG.UTF-8
                  LC_TIME=bg_BG.UTF-8
                  LC_MONETARY=bg_BG.UTF-8
                  LC_PAPER=bg_BG.UTF-8
                  LC_NAME=bg_BG.UTF-8
                  LC_ADDRESS=bg_BG.UTF-8
                  LC_TELEPHONE=bg_BG.UTF-8
                  LC_MEASUREMENT=bg_BG.UTF-8
                  LC_IDENTIFICATION=bg_BG.UTF-8
       VC Keymap: n/a
      X11 Layout: us
       X11 Model: pc105

Променливите могат да се различават за всеки потребител. Командата locale се използва за да се изведе списък с  всички  променливите за конкретния потребител:

$  locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
$

Променливите LC-* задават следното:

LANG
Provides default value for LC_* variables that have not been explicitly set.
LC_ADDRESS
How addresses are formatted (country first or last, where zip code goes etc.).
LC_ALL
Overrides individual LC_* settings: if LC_ALL is set, none of the below have any effect.
LC_COLLATE
How strings (file names...) are alphabetically sorted. Using the "C" or "POSIX" locale here results in a strcmp()-like sort order, which may be preferable to language-specific locales.
LC_CTYPE
How characters are classified as letters, numbers etc. This determines things like how characters are converted between upper and lower case.
LC_IDENTIFICATION
Metadata about the locale information.
LC_MEASUREMENT
What units of measurement are used (feet, meters, pounds, kilos etc.).
LC_MESSAGES
What language should be used for system messages.
LC_MONETARY
What currency you use, its name, and its symbol.
LC_NAME
How names are represented (surname first or last, etc.).
LC_NUMERIC
How you format your numbers. For example, in many countries a period (.) is used as a decimal separator, while others use a comma (,).
LC_PAPER
Paper sizes: 11 x 17 inches, A4, etc.
LC_TELEPHONE
What your telephone numbers look like.
LC_TIME
How your time and date are formatted. Use for example "en_DK.UTF-8" to get a 24-hour-clock in some programs.

Всяка от тези променливи може да бъде промена за текущия процес - CLI  (промяната се губи при затваряне на това CLI). Например ако LC_TIME=bg_BG.UTF-8

$date
 9.03.2022 (ср) 11:30:37 EET

Промяна на стойността на променливата:

$LC_TIME=en_US.utf8

При подаване отново на команда:

$date
Wed 09 Mar 2022 11:33:45 AM EET

        2.        Извеждане на инсталираните езици


$  locale -a
bg_BG.utf8
C
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IL
en_IL.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
POSIX
$

Ако някой език не се появява в списъка, той може допълнително да бъде инсталиран. 

$  sudo locale-gen fr_FR.UTF-8
[sudo] password for imom:
Generating locales (this might take a while)...
  fr_FR.UTF-8... done
Generation complete.
$

Проверка отново на инсталираните езици: 

$ locale -a
bg_BG.utf8
C
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IL
en_IL.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
fr_FR.utf8
POSIX
$

 

·        Списъкът на вички поддържани езици може да се намери във фала  /usr/share/i18n/SUPPORTED

$ cat /usr/share/i18n/SUPPORTED | less

 

        3.        Промяна на locale настройките 

Най лесно това може да се извърши ползвайки менюто Setting -> Region & Languages от графичния интерфейс.

Действащите езикови настройки се съхраняват във файла /etc/default/locale.  

$ cat /etc/default/locale
LANG="en_US.UTF-8"

В този случай при подаване на команда:

$ date
Tue Apr 21 09:50:23 EEST 2020

Този файл може да бъде променен ръчно или с команда  update-locale. След промяната трябва да се направи нов log-in за да може /etc/default/locale да бъде прочетен и изпълнен.

$ sudo update-locale LANG=fr_FR.UTF-8
[sudo] password for imom:
$

Сле рестартиране при подаване на команда:

$date
mardi 21 avril 2020, 09:40:47 (UTC+0300)

Във файла  /etc/default/locale експлицитно могат да бъдат дефинирани променливи LC_*  определящи различни езикови настройки.

Променливата   LANG  задава подразбиращи се стойности за всички LC_*  променливи, които не са експлицитно дефинирани.

 Променливата LC_ALL елиминира всички експлицитно дефинирани стойности на променливите LC_*.  Пълен списък  на  променливите LC_* може да се намери на  тук

 

        4.        При отсъствие на езикови настройки

Ако в системата няма създадени езикови настройки тогава файлът /etc/default/locale не съществува.  За да бъдат въведени настройките се процедира по следния начин:

1. Да се генерират нови настройки например:


$sudo locale-gen fr_FR.UTF-8

2. Задаване на езиковите настройки - това генерира файла /etc/default/locale.

$update-locale LANG=fr_FR.UTF-8

3. Рестартиране на системата и стартиране на нов прозорец. 

5.        Конфигуриране на клавиатурата

В Debian системите конфигурацията на клавиатурата се съхранява във файла  /etc/default/keyboard  и се ползва от конзолата и от графичния интерфейс. 

Той се състои от променливи задавани във формат:

VARIABLE=VALUE

Коментарните линии започват с #. 

Примерен файл:

$ cat /etc/default/keyboard
# Check /usr/share/doc/keyboard-configuration/README.Debian for
# documentation on what to do after having modified this file.

# The following variables describe your keyboard and can have the same
# values as the XkbModel, XkbLayout, XkbVariant and XkbOptions options
# in /etc/X11/xorg.conf.

XKBMODEL="pc105"
XKBLAYOUT="us,bg"
XKBVARIANT=",phonetic"
XKBOPTIONS="grp:alt_shift_toggle"

# If you don't want to use the XKB layout on the console, you can
# specify an alternative keymap.  Make sure it will be accessible
# before /usr is mounted.
# KMAP=/etc/console-setup/defkeymap.kmap.gz
BACKSPACE="guess"
$

Подробно описание на променливите може да се види  с:

$ man keyboard
...
       XKBMODEL
              Specifies the XKB keyboard model name.  Default: pc105  on  most
              platforms.

       XKBLAYOUT
              Specifies  the  XKB  keyboard  layout  name. This is usually the
              country or language type of the keyboard. Default:  us  on  most
              platforms

       XKBVARIANT
              Specifies the XKB keyboard variant components. These can be used
              to further specify the keyboard  layout  details.  Default:  not
              set.

       XKBOPTIONS
              Specifies  the  XKB keyboard option components.  Options usually
              relate to the behavior of the special keys (<Shift>,  <Control>,
              <Alt>, <CapsLock>, etc.)  Default: not set.

│Option                      Description                                                                    │
├───────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│grp:switch Right Alt (while pressed) │
│grp:lswitch Left Alt (while pressed) │
│grp:lwin_switch Left Win (while pressed) │
│grp:rwin_switch Right Win (while pressed) │
│grp:win_switch Any Win key (while pressed) │
│grp:caps_switch Caps Lock (while pressed), Alt+Caps Lock does the original capslock action │
│grp:rctrl_switch Right Ctrl (while pressed) │
│grp:toggle Right Alt │
│grp:lalt_toggle Left Alt │
│grp:caps_toggle Caps Lock │
│grp:shift_caps_toggle Shift+Caps Lock │
│grp:shift_caps_switch Caps Lock (to first layout), Shift+Caps Lock (to last layout) │
│grp:win_menu_switch Left Win (to first layout), Right Win/Menu (to last layout) │
│grp:lctrl_rctrl_switch Left Ctrl (to first layout), Right Ctrl (to last layout) │
│grp:alt_caps_toggle Alt+Caps Lock │
│grp:shifts_toggle Both Shift keys together │
│grp:alts_toggle Both Alt keys together │
│grp:ctrls_toggle Both Ctrl keys together │
│grp:ctrl_shift_toggle Ctrl+Shift │
│grp:lctrl_lshift_toggle Left Ctrl+Left Shift │
│grp:rctrl_rshift_toggle Right Ctrl+Right Shift │
│grp:ctrl_alt_toggle Alt+Ctrl │
│grp:alt_shift_toggle Alt+Shift │
│grp:lalt_lshift_toggle Left Alt+Left Shift │
│grp:alt_space_toggle Alt+Space │
│grp:menu_toggle Menu │
│grp:lwin_toggle Left Win │
│grp:rwin_toggle Right Win │
│grp:lshift_toggle Left Shift │
│grp:rshift_toggle Right Shift │
│grp:lctrl_toggle Left Ctrl │
│grp:rctrl_toggle Right Ctrl │
│grp:sclk_toggle Scroll Lock │
│grp:lctrl_lwin_rctrl_menu LeftCtrl+LeftWin (to first layout

       BACKSPACE
              Determines  the behavior of <BackSpace> and <Delete> keys on the
              console.  Allowed values: bs, del and guess.  In most cases  you
              can  specify guess here, in which case the current terminal set‐
              tings and the kernel of your operating system will  be  used  to
              determine  the  correct value.
...


Въвеждане на постоянни промени

Редактира се файла /etc/default/keyboard. 

По-лесния подход  е да се използва менюто Setting -> Region & Languages от графичния интерфейс.

Описанието на  налични модели, варианти и опции на клавиатурата може да се намери  с man xkeyboard-config

       

Подробно ръководство  може да видите  тук.