Tetapkan lokal khusus di Gnome3 (di Fedora 20)

15

Saya telah membuat custom saya sendiri localedan menempatkan mereka di /etc/locale.confmana berhasil berlaku jika saya masuk pada konsol virtual (Ctrl + Alt + F2). Dalam sesi Gnome3 saya, variabel-variabel tersebut tidak disetel. Untuk aplikasi terminal saya hanya bisa menempatkannya di .bashrctetapi itu tidak akan membantu saya dengan aplikasi grafis seperti Thunderbird dan Pidgin.

Saya telah mencoba mengikuti petunjuk ini: Pengaturan lokal di inisialisasi shell tidak digunakan oleh sesi GNOME dan bahkan meniru bug di Lokal - ArchWiki dengan membuat .pam_environmentfile, tetapi localemasih tetap yang ditetapkan oleh Gnome3. Ada dialog konfigurasi dalam pengaturan Gnome tetapi hanya memungkinkan untuk mengatur serangkaian localekombinasi yang telah ditentukan sebelumnya dan tidak ada cara untuk menyesuaikannya.

File yang relevan di direktori rumah saya:

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

Isi dari /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"

Adakah yang tahu cara mengatur custom localedi Gnome3?

Perseids
sumber

Jawaban:

9

Informasi latar belakang

Saya menguji solusi pada Fedora 21 dengan GNOME Shell 3.14.4, tapi saya percaya itu dapat diterapkan ke versi lain juga.

Hal pertama yang harus dipahami adalah bahwa lingkungan desktop GNOME menimpa definisi lokal seluruh sistem dan karenanya tidak terpengaruh olehnya /etc/locale.conf. Selain itu, mungkin ada aplikasi yang memiliki konfigurasi lokal sendiri dan tidak menggunakan pengaturan sistem atau GNOME sama sekali. Dalam panduan ini saya akan menjelaskan cara menyesuaikan pengaturan lokal dengan kebutuhan Anda dan GNOME dan sistem akan konsisten dari perspektif lokal.


Memeriksa Status Lokal Saat Ini

Pengaturan Seluruh Sistem

Dari Panduan Administrator Sistem Fedora 21 :

Pengaturan lokal seluruh sistem disimpan dalam /etc/locale.conffile, yang dibaca saat boot awal oleh daemon systemd . Pengaturan lokal yang dikonfigurasikan /etc/locale.confdiwarisi oleh setiap layanan atau pengguna, kecuali setiap program atau pengguna individual menimpanya.

Untuk melihat status lokal saat ini kami dapat menjalankan:

$ 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

Pengaturan GNOME

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

GNOME hanya memiliki satu pengaturan. Dengan memberikan sekilas kode sumber dari gnome-control-centre nampaknya ketika set_localed_locale()fungsi dipanggil, ia menetapkan semua kategori berikut (LC_TIME, LC_NUMERIC, LC_MONETARY, LC_MEASUREMENT, LC_PAPER) ke tempat yang sama dengan yang didefinisikan dalam lokal org.gnome.system.locale region.

Menggabungkan pengaturan lokal yang berbeda tampaknya tidak mungkin tanpa membuat lokal kustom, tapi untungnya itu bukan tugas yang sangat kompleks.


Membuat Lokasi Khusus

Saya pikir cara termudah untuk menjelaskan adalah dengan contoh. Dalam kasus khusus saya, saya ingin memiliki lokal kustom, terutama berdasarkan bahasa Ibrani ( he_IL ) tetapi dengan LC_NAME, LC_MESSAGES dari en_US dan LC_TIME (dengan dimodifikasi first_weekdaydan first_workday) dari en_GB .

Meraih File Definisi Lokal

Anda harus memiliki ide lokasi mana yang ingin Anda gabungkan. Pertama kita perlu mencari file definisi terkait, yang dapat ditemukan di /usr/share/i18n/locales/. Kembali ke contoh saya, saya membutuhkan berikut: he_IL , en_US dan en_GB . Saya mengatur folder yang berfungsi di rumah saya dan menyalin file yang diperlukan ke dalamnya:

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

Membuat File Definisi Baru

Saya memutuskan untuk menelepon lokal saya hc_IL dan mengambil he_IL sebagai dasar. Baris berikut membuat file baru hc_ILdengan konten dari he_ILdan dalam perjalanan mengganti semua kemunculan string he_IL di dalam file dengan hc_IL .

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

Memodifikasi File Definisi Baru

Sekarang kita dapat menyesuaikan lokal baru dengan kebutuhan kita. Buka file yang baru dibuat ~/custom-locale/hc_ILdengan editor teks favorit Anda. Saya menggunakan vim (memiliki highlight sintaksis yang tepat untuk file definisi lokal):

$ vim ~/custom-locale/hc_IL

Bagi mereka yang belum memilih editor favorit mereka dan vim bukan secangkir teh, dapat menggunakan gedit :)

$ gedit ~/custom-locale/hc_IL

Struktur file tidak terlalu rumit. Pada dasarnya, ini dibangun dari bagian. Dari lokal (5) halaman manual:

Definisi lokal memiliki satu bagian untuk setiap kategori lokal. Setiap bagian dapat disalin dari lokal lain yang sudah ada atau dapat ditentukan dari awal. Jika kategori harus disalin, satu-satunya kata kunci yang valid dalam definisi adalah salinan diikuti dengan nama lokal yang harus disalin.

Gagasan salinan sangat berguna. Menghemat waktu dan file yang dihasilkan jelas dan ringkas. Misalnya, alih-alih menyalin seluruh bagian di sekitar, Anda dapat memiliki:

LC_MESSAGES
copy "en_US"
END LC_MESSAGES

Dokumentasi lengkap pada file definisi lokal dapat diakses melalui:

$ man 5 locale

Meskipun, jika Anda hanya ingin membuat lokal kustom, yang merupakan campuran dari yang sudah ada, Anda tidak perlu memahami setiap detail.

Dalam kasus saya, saya mengubah kategori dan kata kunci berikut:

  • 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"
    

    Catatan: Semua baris " kategori .. " di bagian LC_IDENTIFICATION telah dimodifikasi selama pembuatan file menggunakan sed. Jadi kita tidak perlu menyentuhnya lagi.

  • LC_TIME

    Saya menyalin bagian lengkap dari en_GB dan hanya memodifikasi baris yang menunjukkan hari pertama minggu dan hari kerja pertama:

    first_weekday 1
    first_workday 1
    
  • Kategori lainnya yang saya tinggalkan atau diganti isinya dengan arahan salin seperti pada:

    LC_NAME
    copy "en_US"
    END LC_NAME
    

Itu saja, file definisi siap. Jangan lupa untuk menyimpan file :)

Kompilasi dan Salin Lokal Baru

Kompilasi lokal baru dilakukan dengan menggunakan perintah berikut sebagai root atau menggunakan sudo . Ganti hc_ILdengan lokal Anda:

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

Jika kompilasi berhasil, data lokal yang dikompilasi ditambahkan ke file arsip /usr/lib/locale/locale-archive.

Salin file definisi lokal baru ke direktori definisi lokal. Ganti hc_ILdengan lokal Anda:

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

Mengaktifkan Lokal Baru

Pada langkah ini kami ingin mengonfigurasi sistem dan GNOME untuk menggunakan lokal baru.

Pengaturan Seluruh Sistem

Edit /etc/locale.conffile sebagai root dan atur setiap baris yang dimulai dengan LC_ke lokal baru Anda. Sebagai contoh:

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

Pengaturan GNOME

Untuk mengaktifkan lokal baru di GNOME, jalankan perintah berikut. Ganti hc_ILdengan lokal Anda:

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

Memvalidasi Pengaturan Baru

Langkah terakhir adalah memvalidasi bahwa semuanya berfungsi seperti yang diharapkan. Untuk memuat ulang semua pengaturan yang paling mudah bagi saya adalah reboot.

  • Lihat bagian "Memeriksa Status Lokal Saat Ini" untuk memeriksa apakah konfigurasi sistem sudah benar.
  • Gunakan GNOME Shell dan aplikasi yang bergantung pada lokal (grafis dan konsol) dan periksa apakah mereka berperilaku seperti yang diharapkan dengan lokal baru. Misalnya jika Anda mengkustomisasi LC_TIME Anda dapat menjalankan dateperintah untuk memvalidasi format tanggal:

    $ date +%x
    21/04/15
    

Catatan: Semuanya diuji pada Fedora 21 dengan GNOME 3.14. Distribusi Linux lain mungkin memerlukan langkah tambahan atau berbeda.

Berikan komentar jika Anda menemukan masalah dengan instruksi.

dchrome
sumber
Saya dapat mengkonfirmasi ini berfungsi pada Fedora 22 dengan Cinnamon. Ini kemungkinan besar akan bekerja dengan GNOME juga.
Dee'Kej
1
Saya yakin jika mereka berusaha sangat keras, mereka dapat membuat pengaturan lokal khusus sedikit lebih sulit.
5heikki
Saya suka GNOME tetapi ini konyol. Setidaknya tinggalkan cara bagi pengguna listrik untuk mengatur pengaturan lokal mereka seperti yang mereka inginkan. Saya ingin lokal AS untuk sebagian besar hal, tetapi printer saya menggunakan kertas A4 ...
static_rtti