Jak mogę dostosować ustawienia regionalne systemu?

24

W System Administracja → Obsługa języka Tekst. Mogę wybierać tylko standardowe ustawienia regionalne, ale chciałbym dostroić. Na przykład w systemie Windows mogę ręcznie dostosowywać takie rzeczy, jak format daty i godziny, jednostki miary, separator dziesiętny, waluta itp. - jak mogę to zrobić w Ubuntu?

Ivan
źródło

Odpowiedzi:

28

Ta odpowiedź pokaże, jak w pełni dostosować ustawienia regionalne, opcjonalnie używając istniejących ustawień narodowych jako podstawy. Typem ustawień regionalnych, które zostaną użyte w tej odpowiedzi, jest i18ntyp; taki typ lokalizacji będzie implikowany przy każdej wzmiance o słowie „lokalizacja” w treści odpowiedzi.

Znajdź przewodnika

Pierwszą rzeczą, którą musisz dostosować do ustawień regionalnych, jest poznanie formatu ustawień regionalnych. Ten edytor ustawień regionalnych w sieci zawiera wyczerpujący opis każdego pola w ustawieniach regionalnych, mimo że nie jest używany przez nikogo od razu. Będzie to przewodnik po użyciu.

Potrzebne narzędzia

Jedynymi narzędziami potrzebnymi do pracy z ustawieniami regionalnymi są

  1. Edytor tekstu. Wszystko zrobi, ale VIM będzie doskonały.
  2. Konwerter tekstu na Unicode. Można się spodziewać, że go nie masz, więc dam ci prosty. Przeczytaj następny podrozdział, aby go uzyskać.

Zalecam utworzenie katalogu i zapisanie w nim wszystkiego związanego z pracą, którą wykonasz w ustawieniach regionalnych.

Konwerter tekstu na Unicode (koder)

UWAGA: jeśli używasz nietypowych znaków , możesz mieć problemy ze skryptem, który piszę poniżej; możesz rzucić okiem na alternatywne skrypty połączone przez nass .

Zapisz następujący kod w pliku. Ten plik zostanie zidentyfikowany przez twój system jako skrypt Pythona, co jest w porządku, ponieważ jest jednym. Ten przewodnik zakłada, że ​​nazywasz się skryptem encodestr.

#!/usr/bin/python

def encode(string):
    newstring = str()
    for ch in string:
        newstring += "<U%04X>" % ord(ch)
    return newstring

if __name__ == '__main__':
    import sys
    print encode(sys.argv[1])

Po zapisaniu, daj pozwolenie na wykonanie pliku - to się przyda. Można to zrobić za pomocą Nautilus lub uruchamiając z terminalu następujące polecenie, w katalogu, w którym został zapisany skrypt: chmod +x encodestr.

Teraz można przetestować ten skrypt działa na tym samym katalogu: ./encodestr hello. Powinieneś otrzymać wynik równy <U0068><U0065><U006C><U006C><U006F>.

Zmodyfikuj istniejące ustawienia narodowe

Modyfikacja istniejącego ustawienia narodowego jest najłatwiejszym przypadkiem, ponieważ najlepiej wybrać ustawienie regionalne, które prawie całkowicie odpowiada twoim potrzebom, w takim przypadku musisz dokonać tylko niewielkich modyfikacji. Aby to dostosować, możesz skorzystać z przewodnika, aby dowiedzieć się, które sekcje chcesz zmienić i jak je zmienić. Wszystkie zainstalowane lokalizacje znajdują się w tym podręczniku/usr/share/i18n/locales , jednak przewodnik zawiera prawie wszystkie utworzone kiedykolwiek lokalizacje.

Jednak pierwszą rzeczą, którą zauważysz po otwarciu lokalizacji, jest to, że czytasz angielskie słowa tak samo, jak dziwne <UXXXX>kody. Trzeba będzie móc tworzyć te kody - w tym miejscu encodestrpojawia się skrypt.

Kiedy wiesz, które sekcje musisz zmienić, musisz znać każde pole zawarte w tej sekcji.

Na przykład LC_TIMEsekcja zawiera pole t_fmti wiele innych. Każde pole ma własny opis w przewodniku .

Teraz, gdy wiesz, które pola zmodyfikować, ponownie skorzystaj z przewodnika, aby dowiedzieć się, jakie wartości akceptuje to pole.

Na przykład pole t_fmtakceptuje tekst i wspólne zmienne strfmt .

Gdy tylko wiesz, co napisać na polach, które chcesz zmodyfikować, uruchom tekst przez encodestrskrypt, aby uzyskać jego zakodowany odpowiednik.

UWAGA: Nie każde pole musi być zakodowane, w razie potrzeby użyj istniejącego ustawienia narodowego.

Na przykład, jeśli chcesz mieć format czasu Time: %Tw t_fmtpolu, uruchom ./encodestr "Time: %T"; to wróci, <U0054><U0069><U006D><U0065><U003A><U0020><U0025><U0054>a więc będziesz mieć linię t_fmt <U0054><U0069><U006D><U0065><U003A><U0020><U0025><U0054>w swoim języku (oczywiście w odpowiedniej sekcji).

Po zmodyfikowaniu każdego pola, które chcesz, musisz kontynuować instalację ustawień regionalnych w systemie, aby można było z niego korzystać. W tym celu przejdź do sekcji instalacji.

Tworzenie ustawień narodowych od podstaw

W przeciwieństwie do modyfikowania jednej, druga metoda, której możesz użyć do utworzenia własnych ustawień narodowych, działa na niej od zera. Nie jest to bardzo trudne, jeśli ponownie skorzystasz z przewodnika . Oto przydatna wskazówka: możesz kopiować sekcje z innych lokalizacji bez faktycznych metod kopiowania i wklejania . Musisz tylko przestrzegać tego formatu:

LC_SECTION
copy "locale"
END LC_SECTION

Gdzie LC_SECTIONjest sekcja, którą chcesz zmodyfikować, i localeustawienia regionalne, z których chcesz skopiować tę sekcję.

Na przykład, jeśli chcesz skopiować format czasu w ustawieniach regionalnych w języku angielskim, możesz mieć ten tekst jako swój niestandardowy plik ustawień regionalnych:

LC_TIME
copy "en_GB"
END LC_TIME

A to oszczędza dużo pracy i zapewnia, że ​​wszelkie zmiany dokonane w ustawieniach regionalnych, do których się odnoszą, zostaną odzwierciedlone w twojej.

Instalowanie niestandardowych ustawień regionalnych

Kroki, które pokażę poniżej, mogą nie być optymalne, ale działają.

  1. Skompiluj swoje ustawienia regionalne. Nie panikuj! To nie zajmuje czasu. Po prostu uruchom polecenie sudo localedef -i custom -f UTF-8 custom.UTF-8 -c -vgdzie customjest nazwa twojego locale.

  2. Skopiuj ustawienia regionalne do /usr/share/i18n/locales/katalogu. Na pewno będziesz potrzebować przywilejów sudo, aby to zrobić, i możesz to zrobić za pomocą polecenia, sudo cp locale /usr/share/i18n/locales/gdzie localejest nazwa pliku niestandardowych ustawień regionalnych.

  3. Podaj swoje ustawienia regionalne w /var/lib/locales/supported.d/. Na przykład utwórz nazwę pliku /var/lib/locales/supported.d/asdi dodaj wiersz custom UTF-8, w którym niestandardowe to nazwa ustawień regionalnych.

  4. Uruchom magiczne polecenie. Właściwie nie wiem, co dokładnie robi to polecenie, ale jest to kluczowe. Uruchom sudo locale-gen. Najprawdopodobniej w razie potrzeby generuje odniesienia do dostępnych lokalizacji.

  5. Powiedz systemowi, aby używał ustawień regionalnych. Jeśli chcesz, aby ustawienia narodowe były używane w całym systemie, zmodyfikuj /etc/environmentplik. Jeśli nie, możesz zmodyfikować ~/.profileplik lub dowolny inny plik, który jest pozyskiwany podczas uruchamiania. Jeśli nie wiesz, co oznacza to drugie, nie martw się, po prostu użyj ~/.profilepliku. Aby wiedzieć, co musisz w nim napisać, najpierw uruchom localepolecenie. Należy wydać listę przedmiotów, takich jak LANGUAGE, LC_MESSAGES, LC_CTYPEi wiele innych. Napisz dla każdej żądanej sekcji (wymienionej przez poprzednie polecenie) w osobnych wierszach, SECTION="locale"gdzie SECTIONjest sekcja i localenazwa niestandardowych ustawień regionalnych.

Na przykład, jeśli chcesz użyć formatu czasu z Holandii, ale w języku angielskim, napisz:

LANGUAGE="en_GB:en"
LC_TIME="nl_NL"

UWAGA: Jeśli chcesz używać jednego ustawienia narodowego dla każdego ustawienia ustawień regionalnych, napisz LC_ALL="locale"gdzie localejest nazwa ustawień narodowych niestandardowych. Jeśli chcesz używać ustawień regionalnych do wszystkiego oprócz języka, możesz napisać LANG="locale"i (w innym wierszu, oczywiście), LANGUAGE="locale":XXgdzie XXjest dwuliterowy kod dla wybranego języka.

Na przykład, jeśli chcesz używać holenderskich ustawień regionalnych i języka angielskiego, możesz użyć:

LANG="nl_NL"
LANGUAGE="nl_NL:en"

Skończyłeś

Przy następnym logowaniu Twoje ustawienia regionalne powinny być w użyciu. Możesz to przetestować, uruchamiając localeponownie komendę.

Prosimy o komentarz w tym przewodniku na temat niespójności lub fałszywych stwierdzeń!

Severo Raz
źródło
Cześć, używany kod python nie działa we wszystkich przypadkach. W przypadku znaków greckich πμwypisuje <U00CF><U0080><U00CE><U00BC>zamiast oczekiwanych znaków <U03C0><U03BC>. Oto link, który działa.
nass
Dzięki za wkład! Umieściłem twój komentarz w tekście, w którym miał się pojawić :)
Severo Raz,
Musiałem dodać custom UTF-8do /usr/share/i18n/SUPPORTEDwcześniej mogłem uruchomić sudo locale-gen. W przeciwnym razie nie byłoby go na liście.
Wilbert,
Skopiowałem metodę konwersji ciągów do mojej kolekcji skryptów powłoki: github.com/budhajeewa/shell-scripts/commit/… . Dziękuję Ci!
budhajeewa,
Jeśli ktoś szuka funkcji odwrotnej do tej metody (potrzebowałem jej do odczytania istniejących wartości szesnastkowych w plikach ustawień narodowych), napisałem do tego skrypt PHP. github.com/budhajeewa/shell-scripts/commit/… . Jeśli ktoś może napisać to w Pythonie, daj mi znać. Chciałbym dodać to do mojej kolekcji.
budhajeewa,
8

Nie jestem pewien, jakiego rodzaju dostosowania chcesz, ale możesz ustawić niektóre zmienne regionalne za pomocą swojego ~/.locale. Na przykład, aby otrzymywać angielskie wiadomości, ale czas niemiecki i polubienia, których używam

export LC_ALL=""
export LANG="en_GB.utf8"
export LC_CTYPE="de_DE.utf8"
export LC_NUMERIC="de_DE.utf8"
export LC_TIME="de_DE.utf8"
export LC_COLLATE="de_DE.utf8"
export LC_MONETARY="de_DE.utf8"
export LC_MESSAGES="en_GB.utf8"
export LC_PAPER="de_DE.utf8"
export LC_NAME="en_GB.utf8"
export LC_ADDRESS="de_DE.utf8"
export LC_TELEPHONE="de_DE.utf8"
export LC_MEASUREMENT="de_DE.utf8"
export LC_IDENTIFICATION="de_DE.utf8"

Możliwe jest również generowanie niestandardowych ustawień narodowych. Zobacz np. Ten przewodnik po datach.

Carsten Thiel
źródło
1
Nie, chcę dostosowania na niższym poziomie. Na przykład: wiadomości w języku angielskim, jednostki metryczne, zmodyfikowana czeska data / godzina (DD.MM.RRRR GG: mm zamiast DMRRRR H.MM), kropka jako separator dziesiętny (w tym języku jest przecinek) jako waluta (waluta Kč jest w języku czeskim).
Ivan
Widzę. Biorąc en_USza LC_NUMERICi de_DEza LC_MONETARYi LC_MEASUREMENTdaje inne efekty uboczne? Zobacz także nowy link do generowania osobistych ustawień regionalnych.
Carsten Thiel,
1
instrukcje znajdujące się za linkiem wydają się cudownie odpowiadać na pytanie, może mógłbyś tutaj odtworzyć najważniejsze bity, na wypadek gdyby link nie był kiedyś dostępny?
Stefano Palazzo