Ustaw niestandardowe ustawienia narodowe w Gnome3 (na Fedorze 20)

15

Utworzyłem własne niestandardowe localepliki i umieściłem je w /etc/locale.confnich, aby skutecznie działały, jeśli zaloguję się na wirtualnej konsoli (Ctrl + Alt + F2). Jednak w mojej sesji Gnome3 te zmienne nie są ustawione. W przypadku aplikacji terminalowych mogę po prostu umieścić je w, .bashrcale to nie pomoże mi w aplikacjach graficznych takich jak Thunderbird i Pidgin.

Próbowałem postępować zgodnie z tymi wskazówkami: Ustawienia regionalne podczas inicjalizacji powłoki nie były używane przez sesję GNOME, a nawet emulowałem błąd w ustawieniach regionalnych - ArchWiki , tworząc .pam_environmentplik, ale localewciąż są one ustawione przez Gnome3. W ustawieniach Gnome znajduje się okno konfiguracji, ale pozwala jedynie ustawić bardzo ograniczony zestaw predefiniowanych localekombinacji i nie ma możliwości ich dostosowania.

Odpowiednie pliki w moim katalogu domowym:

user@localhost:~$ ls -lah .dmrc .pam_environment .session .xsession .xsessionrc
lrwxrwxrwx. 1 user user 16 12. Jun 08:57 .dmrc -> /etc/locale.conf
lrwxrwxrwx. 1 user user 16 11. Jun 20:23 .pam_environment -> /etc/locale.conf
lrwxrwxrwx. 1 user user 16 12. Jun 09:09 .session -> /etc/locale.conf
lrwxrwxrwx. 1 user user 16 12. Jun 09:07 .xsession -> /etc/locale.conf
lrwxrwxrwx. 1 user user  9 13. Jun 11:22 .xsessionrc -> .xsession
-rw-rw-r--. 1 user user 66 13. Jun 11:13 .profile

user@localhost:~$ cat .profile 
source /etc/locale.conf

Zawartość /etc/locale.conf:

LANG="en_US.utf8"
LC_TIME="de_MY.utf8" # NB: de_MY
LC_MONETARY="de_DE.utf8"
LC_PAPER="de_DE.utf8"
LC_NAME="de_DE.utf8"
LC_ADDRESS="de_DE.utf8"
LC_TELEPHONE="de_DE.utf8"
LC_MEASUREMENT="de_DE.utf8"
LC_IDENTIFICATION="de_DE.utf8"

Czy ktoś wie, jak ustawić niestandardowe localew Gnome3?

Perseidy
źródło

Odpowiedzi:

9

Informacje podstawowe

Testowałem to rozwiązanie na Fedorze 21 z GNOME Shell 3.14.4, ale wierzę, że można go zastosować również do innych wersji.

Pierwszą rzeczą do zrozumienia jest to, że środowisko pulpitu GNOME zastępuje ogólnosystemowe definicje ustawień regionalnych, a zatem nie ma na nie wpływu /etc/locale.conf. Ponadto mogą istnieć aplikacje, które mają własną konfigurację ustawień regionalnych i w ogóle nie używają ustawień systemowych ani GNOME. W tym przewodniku opiszę sposób dostosowania ustawień regionalnych do twoich potrzeb i GNOME, a system będzie spójny z perspektywy ustawień regionalnych.


Sprawdzanie bieżącego statusu ustawień regionalnych

Ustawienia systemowe

Z Przewodnika administratora systemu Fedora 21 :

Systemowe ustawienia regionalne są przechowywane w /etc/locale.confpliku, który odczytywany jest przy wczesnym uruchomieniu przez demona systemd . Ustawienia regionalne skonfigurowane w /etc/locale.confsą dziedziczone przez każdą usługę lub użytkownika, chyba że poszczególne programy lub poszczególni użytkownicy nadpisują je.

Aby zobaczyć aktualny stan ustawień regionalnych, możemy uruchomić:

$ localectl status
   System Locale: LANG=en_US.UTF-8
                  LC_NUMERIC=en_US.UTF-8
                  LC_TIME=en_US.UTF-8
                  LC_MONETARY=en_US.UTF-8
                  LC_PAPER=en_US.UTF-8
                  LC_MEASUREMENT=en_US.UTF-8
       VC Keymap: us
      X11 Layout: us

Ustawienia GNOME

$ gsettings get org.gnome.system.locale region
'en_US.UTF-8'

GNOME ma tylko jedno ustawienie. Po krótkim spojrzeniu na kod źródłowy gnome-control-centre wydaje się, że po set_localed_locale()wywołaniu funkcji ustawia wszystkie następujące kategorie (LC_TIME, LC_NUMERIC, LC_MONETARY, LC_MEASUREMENT, LC_PAPER) na te same ustawienia regionalne zdefiniowane w org.gnome.system.locale region.

Mieszanie różnych ustawień narodowych wydaje się niemożliwe bez tworzenia własnych ustawień narodowych, ale na szczęście nie jest to bardzo skomplikowane zadanie.


Tworzenie niestandardowych ustawień regionalnych

Myślę, że najłatwiejszym sposobem wyjaśnienia jest przykład. W moim konkretnym przypadku chciałem mieć niestandardowe ustawienia narodowe, oparte głównie na hebrajskim ( he_IL ), ale z LC_NAME, LC_MESSAGES z en_US i LC_TIME (ze zmodyfikowanymi first_weekdayi first_workday) z en_GB .

Pobieranie plików definicji ustawień regionalnych

Powinieneś mieć pomysł, które lokalizacje chcesz mieszać. Najpierw musimy zlokalizować powiązane pliki definicji, które można znaleźć w /usr/share/i18n/locales/. Wracając do mojego przykładu, potrzebowałem: he_IL , en_US i en_GB . Skonfigurowałem folder roboczy w domu i skopiowałem do niego wymagane pliki:

$ cd /usr/share/i18n/locales
$ mkdir -v ~/custom-locale ; cp -v he_IL en_US en_GB ~/custom-locale/

Tworzenie nowego pliku definicji

Postanowiłem nazwać moją lokalizację hc_IL i wziąłem he_IL jako podstawę. Poniższe wiersze tworzą nowy plik hc_ILz zawartością zi he_ILpo drodze zamieniają wszystkie wystąpienia ciągu he_IL wewnątrz pliku na hc_IL .

$ cd ~/custom-locale/
$ sed 's/he_IL/hc_IL/g' he_IL > hc_IL

Modyfikowanie nowego pliku definicji

Teraz możemy dostosować nowe ustawienia regionalne do naszych potrzeb. Otwórz nowo utworzony plik za ~/custom-locale/hc_ILpomocą swojego ulubionego edytora tekstu. Używam vim (ma właściwe podświetlanie składni dla plików definicji ustawień regionalnych):

$ vim ~/custom-locale/hc_IL

Dla tych, którzy nie wybrali jeszcze swojego ulubionego edytora i vim nie jest filiżanką herbaty, mogą skorzystać z gedit :)

$ gedit ~/custom-locale/hc_IL

Struktura pliku nie jest bardzo skomplikowana. Zasadniczo jest on zbudowany z sekcji. Ze strony podręcznika regionalnego (5) :

Definicja ustawień regionalnych ma jedną część dla każdej kategorii ustawień narodowych. Każdą część można skopiować z innego istniejącego ustawienia narodowego lub zdefiniować od zera. Jeśli kategoria powinna zostać skopiowana, jedynym prawidłowym słowem kluczowym w definicji jest kopia, a następnie nazwa ustawień regionalnych, które należy skopiować.

Pojęcie kopii jest bardzo przydatne. Oszczędza czas, a wynikowy plik jest przejrzysty i zwięzły. Na przykład zamiast kopiować całe sekcje, możesz mieć:

LC_MESSAGES
copy "en_US"
END LC_MESSAGES

Dostęp do pełnej dokumentacji pliku definicji ustawień regionalnych można uzyskać poprzez:

$ man 5 locale

Chociaż jeśli chcesz po prostu stworzyć niestandardowe ustawienia narodowe, które są mieszanką istniejących, nie musisz rozumieć każdego szczegółu.

W moim przypadku zmodyfikowałem następujące kategorie i słowa kluczowe:

  • LC_IDENTIFICATION

    title      "Custom Hebrew locale"
    source     "mydomain.ws"
    address    "http:////www.mydomain.ws"
    contact    ""
    email      "[email protected]"
    tel        ""
    fax        ""
    language   "Hebrew"
    territory  "Israel"
    revision   "1.0"
    date       "2015-04-21"
    

    Uwaga: Wszystkie wiersze „ category .. ” w sekcji LC_IDENTIFICATION zostały zmodyfikowane podczas tworzenia pliku przy użyciu sed. Nie musimy ich już dotykać.

  • LC_TIME

    Skopiowałem całą sekcję z en_GB i zmodyfikowałem tylko wiersze wskazujące pierwszy dzień tygodnia i pierwszy dzień pracy:

    first_weekday 1
    first_workday 1
    
  • Pozostałe kategorie, które pozostawiłem, takie, jakie są, lub zastąpiłem ich treścią dyrektywą dotyczącą kopiowania, jak w:

    LC_NAME
    copy "en_US"
    END LC_NAME
    

To wszystko, plik definicji jest gotowy. Nie zapomnij zapisać pliku :)

Skompiluj i skopiuj nowe ustawienia regionalne

Kompilacja nowych ustawień regionalnych odbywa się za pomocą następującego polecenia jako root lub sudo . Zamień na hc_ILswoje ustawienia regionalne:

$ sudo localedef  -c -v -i hc_IL -f UTF-8 hc_IL.UTF-8

Jeśli kompilacja się powiedzie, skompilowane dane regionalne zostaną dodane do pliku archiwum /usr/lib/locale/locale-archive.

Skopiuj nowy plik definicji ustawień regionalnych do katalogu definicji ustawień regionalnych. Zamień na hc_ILswoje ustawienia regionalne:

$ sudo cp -v hc_IL /usr/share/i18n/locales/

Aktywowanie nowego ustawienia narodowego

W tym kroku chcemy skonfigurować system i GNOME do korzystania z nowych ustawień regionalnych.

Ustawienia systemowe

Edytuj /etc/locale.confplik jako root i ustaw każdą linię zaczynającą się LC_na nowe ustawienia regionalne. Na przykład:

LANG=en_US.UTF-8
LC_NUMERIC=hc_IL.utf8
LC_TIME=hc_IL.utf8
LC_MONETARY=hc_IL.utf8
LC_PAPER=hc_IL.utf8
LC_MEASUREMENT=hc_IL.utf8

Ustawienia GNOME

Aby aktywować nowe ustawienia narodowe w GNOME, uruchom następującą komendę. Zamień na hc_ILswoje ustawienia regionalne:

$ gsettings set org.gnome.system.locale region "hc_IL.utf8"

Sprawdzanie poprawności nowych ustawień

Ostatnim krokiem jest sprawdzenie, czy wszystko działa zgodnie z oczekiwaniami. Aby ponownie załadować wszystkie ustawienia, najłatwiejszy dla mnie był restart.

  • Sprawdź sekcję „Sprawdzanie bieżącego stanu ustawień regionalnych”, aby sprawdzić, czy konfiguracja systemu jest poprawna.
  • Użyj powłoki GNOME i aplikacji zależnych od ustawień regionalnych (graficznych i konsolowych) i sprawdź, czy zachowują się zgodnie z oczekiwaniami w nowych ustawieniach regionalnych. Np. Jeśli dostosowałeś LC_TIME, możesz uruchomić datepolecenie, aby sprawdzić format daty:

    $ date +%x
    21/04/15
    

Uwaga: Wszystko zostało przetestowane na Fedorze 21 z GNOME 3.14. Inne dystrybucje systemu Linux mogą wymagać dodatkowych lub różnych kroków.

Proszę o komentarz, jeśli znajdziesz jakieś problemy z instrukcjami.

dchrome
źródło
Mogę potwierdzić, że działa na Fedorze 22 z Cinnamon. Najprawdopodobniej będzie również działał z GNOME.
Dee'Kej,
1
Jestem pewien, że jeśli naprawdę się starają, konfigurowanie niestandardowych ustawień regionalnych może być jeszcze trudniejsze.
5heikki,
Kocham GNOME, ale to jest śmieszne. Przynajmniej pozostaw użytkownikom zaawansowanym możliwość ustawienia ustawień regionalnych tak, jak chcą. Chcę ustawień
narodowych