Bir sistem yerel ayarını nasıl özelleştirebilirim?


24

Sistem Yönetim Dil desteği Metin seçeneğinde. Yalnızca standart yerel ayarları seçebilirim, ancak ince ayar yapmak istiyorum. Örneğin, Windows'ta saat ve tarih formatı, ölçü birimi, ondalık ayırıcı, para birimi vb. Şeyleri elle özelleştirebilirim - bunu Ubuntu'da nasıl yapabilirim?

Yanıtlar:


28

Bu cevap isteğe bağlı olarak mevcut bir yerel ayarı temel alarak bir yerel ayarın nasıl tamamen özelleştirileceğini gösterir. Bu cevapta kullanılacak yerel ayar i18ntürü; bu tür bir yerel ayar, cevabın gövdesindeki "yerel" kelimesinin her bir sözünde belirtilecektir.

Bir rehber bulun

Bir yerel ayarı özelleştirmek için ihtiyacınız olan ilk şey, yerel ayarın biçimini bilmektir. Bu web yerel ayar düzenleyicisi , hemen hemen herkes tarafından kullanılamamasına rağmen, yerel olarak her alanın kapsamlı bir açıklamasına sahiptir. Bu kullanım kılavuzu olacaktır.

Gerekli aletler

Yerellerle çalışmak için ihtiyacınız olan tek araç

  1. Bir metin editörü. Herhangi biri yapacak, VIM mükemmel olsa da.
  2. Bir metin-unicode dönüştürücü. Bir tanesine sahip olmaman en çok beklenen şeydi, bu yüzden sana basit bir tane vereceğim. Bunu elde etmek için bir sonraki alt bölümü okuyun.

Bir dizin oluşturmanızı ve yerelde yapacağınız çalışmalarla ilgili her şeyi kendinize kaydetmenizi öneririm.

Metin-unicode dönüştürücü (encodestr)

NOT: Yaygın olmayan karakterler kullanıyorsanız , aşağıya yazdığım komut dosyasıyla ilgili sorunlar yaşayabilirsiniz; nass ile bağlantılı alternatif komut dosyalarına bakmak isteyebilirsiniz .

Aşağıdaki kodu bir dosyaya kaydedin. Bu dosya, sisteminiz tarafından bir python betiği olarak tanımlanacaktır, çünkü bu bir tanedir. Bu kılavuz size komut dosyasını çağırdığını varsayar 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])

Kaydettikten sonra, dosya yürütme iznini verin - bu kullanışlı olacaktır. Sen Nautilus kullanarak veya komut dosyasını kaydettiğiniz dizine üzerinde bir terminal aşağıdaki komutu çalıştırarak yapabilirsiniz: chmod +x encodestr.

Artık aynı dizinde çalıştırarak bu senaryoyu test edebilirsiniz: ./encodestr hello. Eşit bir çıktı almalısınız <U0068><U0065><U006C><U006C><U006F>.

Mevcut bir yerel ayarı değiştirin

Mevcut bir yerel ayarı değiştirmek en kolay durumdur, çünkü ideal olarak ihtiyaçlarınızı neredeyse tamamen karşılayan bir yerel ayar seçersiniz, bu durumda sadece küçük değişiklikler yapmanız gerekir. Özelleştirmek için, hangi bölümlerden hangisini değiştirmek istediğinizi ve bunları nasıl değiştirebileceğinizi bilmek için kılavuzu kullanabilirsiniz. Yüklü yerel ayarların tümü bulunur /usr/share/i18n/locales, ancak kılavuzda , şimdiye kadar oluşturulan her yerel ayar bulunur.

Ancak, bir yerel ayarı açtığınızda farkedeceğiniz ilk şey, ingilizce kelimeleri tuhaf <UXXXX>kodlar kadar okuyacağınızdır . Bu kodları oluşturabilmek için ihtiyacınız olacak - encodestrbetiğin geldiği yer burası .

Hangi bölümleri değiştirmeniz gerektiğini bildiğiniz zaman, bu bölümdeki her bir alanı bilmeniz gerekir.

Örneğin, LC_TIMEbölüm alanı t_fmtve diğerlerini içerir. Her alanın kendi açıklaması vardır. kılavuzda .

Artık hangi alanları değiştireceğinizi bildiğinize göre, kullan , alanın hangi değerleri kabul ettiğini bulmak için kılavuzu tekrar kullanın.

Örneğin, alan t_fmtmetni ve genel durumu kabul eder. strfmt değişkenlerini .

Tam olarak değiştirmek istediğiniz alanlara ne yazacağınızı bildiğinizde encodestr, kodlanmış eşdeğerini elde etmek için metni komut dosyası boyunca çalıştırın .

NOT: Her alanın kodlanması gerekmez, gerekirse referans olarak mevcut bir yerel ayarı kullanın.

Örneğin Time: %T, t_fmtalanda zaman formatının olmasını istiyorsanız , run ./encodestr "Time: %T"; bu geri dönecek <U0054><U0069><U006D><U0065><U003A><U0020><U0025><U0054>ve böylece t_fmt <U0054><U0069><U006D><U0065><U003A><U0020><U0025><U0054>yerel bölgenizdeki çizgiye sahip olacaksınız (elbette ilgili bölümünde).

İstediğiniz her alanı değiştirdikten sonra, yerel ayarı sisteme yüklemeye devam etmeniz gerekecektir, böylece kullanılabilir. Bunun için kurulum bölümüne ilerleyin.

Sıfırdan bir yerel ayar oluşturma

Birini değiştirmenin aksine, özel yerel ayarınızı oluşturmak için kullanabileceğiniz diğer yöntem üzerinde sıfırdan çalışmaktır. Bu, - yine - kılavuzu kullanıyorsanız çok zor değildir . Yine de yararlı bir ipucu: bölümleri gerçek kopyala ve yapıştır yöntemleri olmadan diğer yerel ayarlardan kopyalayabilirsiniz . Sadece bu formatı takip etmelisiniz:

LC_SECTION
copy "locale"
END LC_SECTION

LC_SECTIONDeğiştirmek istediğiniz bölüm nerede ve localeo bölümü kopyalamak istediğiniz yerel alan.

Örneğin, İngilizce biçiminde zaman biçimini kopyalamak istiyorsanız, bu metni özel yerel ayar dosyanız olur:

LC_TIME
copy "en_GB"
END LC_TIME

Bu da size çok fazla iş kazandırır ve başvurulan yerel ayarda yapılan herhangi bir değişikliğin sizinkilere yansıtılmasını sağlar.

Özel yerel ayarlarınızı yükleme

Aşağıda göstereceğim adımlar uygun olmayabilir, fakat işe yarar.

  1. Yerel ayarlarınızı derleyin. Panik yapmayın! Bu zaman alır. Sadece komutu çalıştırmak için yerel ayar adıdır.sudo localedef -i custom -f UTF-8 custom.UTF-8 -c -vcustom

  2. Yerel ayarlarınızı /usr/share/i18n/locales/dizine kopyalayın . Kesinlikle gerek olacaktır Sudo bunu ayrıcalıkları ve komutla yapabilirsin özel yereli dosya adıdır.sudo cp locale /usr/share/i18n/locales/locale

  3. Yerel ayarınızı içinde belirtin /var/lib/locales/supported.d/. Örneğin, bir dosya adı oluşturun /var/lib/locales/supported.d/asdve satırı custom UTF-8, yerel ayarınızın adı özel olan yere ekleyin .

  4. Sihirli komutu çalıştırın. Aslında bu komutun tam olarak ne yaptığını bilmiyorum, ama çok önemli. Run sudo locale-gen. İhtiyaç duyulan yerlere referanslar oluşturması en muhtemel olanıdır.

  5. Sisteminize yerel ayarları kullanmasını söyleyin. Yerel ayarın sistem genelinde kullanılmasını istiyorsanız, /etc/environmentdosyayı değiştirin . Değilse, ~/.profiledosyanızı veya başlangıçta kaynak yapılan herhangi birini değiştirebilirsiniz . İkincisinin ne anlama geldiğini bilmiyorsanız endişelenmeyin, ~/.profiledosyayı kullanın . Ne yazmanız gerektiğini bilmek için önce localekomutu çalıştırın . Sanki öğeler içeren bir liste çıkarması gerekir LANGUAGE, LC_MESSAGES, LC_CTYPEve diğerleri. İstediğiniz bölümlerin her biri için (önceki komutla listelenen), ayrı satırlara yazacaksınız, SECTION="locale"burada özel yerel ayarınızın SECTIONbölümü ve localeadı burasıdır .

Örneğin, Hollanda’dan saat biçimini, ancak ingilizceyi kullanmak istiyorsanız, şunu yazın:

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

NOT: Her yerel ayar için bir yerel kullanmak istiyorsanız, yazma LC_ALL="locale"nerede localeözel yerel ayarı adıdır. Her şey için ancak dil için bir yerel kullanmak istiyorsanız yazabilirsiniz LANG="locale"ve (tabii ki, başka satırında) LANGUAGE="locale":XXnerede XXistediğiniz dil için 2 harfli bir koddur.

Örneğin, Hollanda yerel ayarını ve İngilizce dilini kullanmak istiyorsanız, şunları kullanabilirsiniz:

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

Sen bitirdin

Bir sonraki oturum açışınızda yerel ayarınız kullanımda olmalıdır. Bunu çalıştırarak test edebilirsiniz.locale komutu tekrar .

Lütfen bu kılavuzdaki tutarsızlıklar veya yanlış ifadeler hakkında yorum yapın!


Merhaba, kullandığınız python kodu, tüm durumlar için çalışmaz. Yunan karakterleri için πμ, <U00CF><U0080><U00CE><U00BC>beklenen karakterlerin yerine çıktı verir <U03C0><U03BC>. İşte çalışan bir link .
nass

Giriş için teşekkürler!
Yorumunuzu

Ben eklemek zorunda custom UTF-8için /usr/share/i18n/SUPPORTEDben çalıştırabilir önce sudo locale-gen. Aksi takdirde listede olmazdı.
Wilbert

String convert yönteminizi shell script koleksiyonuma kopyaladım : github.com/budhajeewa/shell-scripts/commit/… . Teşekkür ederim!
budhajeewa

Herhangi biri bu cevabın metodunu tersine çevirecek bir fonksiyon arıyorsa (yerel ayarlardaki mevcut onaltılık değerleri okumak için gerekli.), Bunun için bir PHP betiği yazdım. github.com/budhajeewa/shell-scripts/commit/… . Birisi Python'da yazabilirse, bana bildirin. Bunu koleksiyonuma eklemek istiyorum.
budhajeewa

8

Tür özelleştirme istediğiniz, ancak kullanarak bazı yerel değişkenleri ayarlayabilirsiniz Değil emin ne ~/.locale. Mesela ingilizce mesajları ama almanca zamanı ve kullandığımları beğenmek için

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"

Özel yereller oluşturmak da mümkündür. Tarihler için bu kılavuza bakınız .


1
Hayır, daha düşük seviyede kişiselleştirme istiyorum. Örneğin: İngilizce mesajlar, metrik birimler, değiştirilmiş Çek tarih / saat (DD.MM.YYYY HH: DMYYYY H.MM yerine mm), ondalık ayırıcı olarak bir nokta (Çek dilinde yerel olarak virgül vardır) ve € para birimi olarak (Çek yerel ayarında Kč para birimi vardır).
Ivan

Anlıyorum. Alarak en_USiçin LC_NUMERICve de_DEiçin LC_MONETARYve LC_MEASUREMENTdiğer yan etkileri verir? Kişisel bir yerel ayar oluşturmak için ayrıca yeni bağlantıya bakın.
Carsten Thiel

1
Bağlantının ardındaki talimatlar soruyu harika cevaplıyor gibi görünüyor, belki bir gün bağlantıya ulaşılamaması durumunda, burada en önemli bitleri kopyalayabilirsiniz.
Stefano Palazzo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.