Bagaimana saya dapat menyesuaikan lokal sistem?

24

Di Sistem Administrasi Dukungan Bahasa Teks. Saya hanya dapat memilih lokal standar, tetapi saya ingin menyempurnakannya. Sebagai contoh di Windows saya bisa mengkustomisasi hal-hal seperti format waktu dan tanggal, mengukur satuan, pemisah desimal, mata uang, dll secara manual - bagaimana saya bisa melakukan ini di Ubuntu?

Ivan
sumber

Jawaban:

28

Jawaban ini akan menunjukkan cara menyesuaikan sepenuhnya lokal, secara opsional menggunakan lokal yang ada sebagai basis. Jenis lokal yang akan digunakan dalam jawaban ini adalah i18ntipe; jenis lokal semacam itu akan tersirat dalam setiap penyebutan kata "lokal" di badan jawaban.

Temukan panduan

Hal pertama yang Anda butuhkan untuk menyesuaikan lokal, adalah mengenal format lokal. Editor lokal web ini memiliki deskripsi komprehensif tentang setiap bidang di lokal, meskipun tidak dapat digunakan oleh sembarang orang dengan cara yang langsung. Ini akan menjadi panduan untuk digunakan.

Alat yang dibutuhkan

Satu-satunya alat yang Anda butuhkan untuk bekerja dengan lokal adalah

  1. Editor teks. Apa pun akan dilakukan, meskipun VIM akan unggul.
  2. Konverter teks ke unicode. Sangat diharapkan bahwa Anda tidak memilikinya, jadi saya akan memberi Anda yang sederhana. Baca subbagian berikutnya untuk mendapatkannya.

Saya sarankan Anda untuk membuat direktori dan menyimpan semua yang berhubungan dengan pekerjaan yang akan Anda lakukan pada lokasi itu.

Konverter text-to-unicode (encodestr)

CATATAN: jika Anda menggunakan karakter yang tidak umum, Anda mungkin memiliki masalah dengan skrip yang saya tulis di bawah ini; Anda mungkin ingin melihat skrip alternatif yang ditautkan oleh nass .

Simpan kode berikut ke file. File ini akan diidentifikasi oleh sistem Anda sebagai skrip python, yang tidak apa-apa karena itu adalah satu. Panduan ini mengasumsikan Anda memanggil skrip 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])

Setelah Anda menyimpannya, berikan izin eksekusi file - ini akan berguna. Anda dapat melakukannya dengan menggunakan nautilus, atau dengan berjalan dari terminal perintah berikut, pada direktori di mana Anda menyimpan script: chmod +x encodestr.

Sekarang Anda dapat menguji script ini dengan menjalankan pada direktori yang sama: ./encodestr hello. Anda harus mendapatkan hasil yang sama dengan <U0068><U0065><U006C><U006C><U006F>.

Ubah lokal yang ada

Memodifikasi lokal yang ada adalah yang paling mudah, karena idealnya Anda akan memilih lokal yang hampir sesuai dengan kebutuhan Anda, dalam hal ini Anda hanya perlu membuat sedikit modifikasi. Untuk menyesuaikannya, Anda dapat menggunakan panduan ini untuk mengetahui bagian mana yang ingin Anda ubah, dan bagaimana Anda dapat mengubahnya. Semua lokal yang terinstal berada /usr/share/i18n/locales, namun panduan ini berisi hampir setiap lokal yang pernah dibuat.

Namun, hal pertama yang akan Anda perhatikan ketika membuka lokal adalah Anda akan membaca kata-kata bahasa Inggris sebanyak <UXXXX>kode aneh . Anda harus dapat membuat kode-kode ini - ini adalah tempat encodestrskrip datang.

Ketika Anda tahu bagian mana yang harus Anda ubah, Anda perlu tahu setiap bidang yang ada di bagian itu.

Misalnya, LC_TIMEbagian tersebut berisi bidang t_fmt, dan banyak lainnya. Setiap bidang memiliki deskripsi sendiri pada panduan ini .

Sekarang Anda tahu bidang mana yang harus diubah, gunakan panduan ini lagi untuk mengetahui nilai apa yang diterima bidang itu.

Misalnya, bidang t_fmtmenerima teks dan variabel strfmt umum .

Hanya ketika Anda tahu apa yang harus ditulis pada bidang yang ingin Anda modifikasi, jalankan teks melalui encodestrskrip untuk mendapatkan padanannya yang disandikan.

CATATAN: Tidak setiap bidang perlu dikodekan, gunakan lokal yang ada sebagai referensi jika diperlukan.

Misalnya, jika Anda ingin memiliki format waktu Time: %Tdi t_fmtbidang, jalankan ./encodestr "Time: %T"; ini akan kembali <U0054><U0069><U006D><U0065><U003A><U0020><U0025><U0054>dan Anda akan memiliki garis t_fmt <U0054><U0069><U006D><U0065><U003A><U0020><U0025><U0054>di lokal Anda (tentu saja di bagian masing-masing).

Setelah Anda memodifikasi setiap bidang yang Anda inginkan, Anda harus melanjutkan untuk menginstal lokal ke sistem, sehingga dapat digunakan. Lanjutkan ke bagian instalasi untuk ini.

Membuat lokal dari awal

Berbeda dengan memodifikasi satu, metode lain yang dapat Anda gunakan untuk membuat lokal kustom Anda bekerja dari awal. Ini tidak terlalu sulit jika - lagi - Anda menggunakan panduan ini . Berikut tip yang bermanfaat: Anda dapat menyalin bagian dari lokal lain tanpa metode salin dan tempel yang sebenarnya . Anda hanya perlu mengikuti format ini:

LC_SECTION
copy "locale"
END LC_SECTION

Di mana LC_SECTIONbagian yang ingin Anda modifikasi, dan localeadalah tempat Anda ingin menyalin bagian itu.

Misalnya, jika Anda ingin menyalin format waktu di lokal Inggris, Anda akan memiliki teks ini file lokal kustom Anda:

LC_TIME
copy "en_GB"
END LC_TIME

Dan itu menghemat banyak pekerjaan dan memastikan bahwa setiap perubahan yang dibuat untuk lokal yang dirujuk akan dicerminkan ke Anda.

Menginstal lokal kustom Anda

Langkah-langkah yang akan saya tunjukkan di bawah ini mungkin tidak optimal, tetapi bekerja.

  1. Kompilasi lokal Anda. Jangan panik! Ini tidak membutuhkan waktu. Jalankan saja perintah di sudo localedef -i custom -f UTF-8 custom.UTF-8 -c -vmana customnama lokal Anda.

  2. Salin lokal Anda ke /usr/share/i18n/locales/direktori. Anda pasti akan memerlukan hak sudo untuk melakukan ini, dan Anda dapat melakukannya dengan perintah di sudo cp locale /usr/share/i18n/locales/mana localenama file lokal kustom Anda.

  3. Tentukan lokal Anda di /var/lib/locales/supported.d/. Misalnya, buat nama file /var/lib/locales/supported.d/asddan tambahkan baris custom UTF-8, di mana custom adalah nama lokal Anda.

  4. Jalankan perintah ajaib. Saya sebenarnya tidak tahu persis apa yang dilakukan perintah ini, tetapi ini sangat penting. Lari sudo locale-gen. Kemungkinan besar itu menghasilkan referensi ke lokal yang tersedia di mana diperlukan.

  5. Beri tahu sistem Anda untuk menggunakan lokal. Jika Anda ingin lokal digunakan di seluruh sistem, ubah /etc/environmentfile. Jika tidak, Anda dapat memodifikasi ~/.profilefile Anda , atau file lainnya yang bersumber saat startup. Jika Anda tidak tahu apa artinya yang terakhir jangan khawatir, gunakan saja ~/.profilefile tersebut. Untuk mengetahui apa yang harus Anda tulis di dalamnya, pertama jalankan localeperintah. Ini harus mengeluarkan daftar dengan item seperti LANGUAGE, LC_MESSAGES, LC_CTYPEdan banyak lainnya. Anda akan menulis, untuk setiap bagian yang Anda inginkan (dicantumkan oleh perintah sebelumnya), pada baris terpisah, di SECTION="locale"sinilah SECTIONbagian dan localenama lokal kustom Anda.

Misalnya, jika Anda ingin menggunakan format waktu dari Belanda, tetapi bahasa Inggris, tulis:

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

CATATAN: Jika Anda ingin menggunakan satu lokal untuk setiap pengaturan lokal, tulis di LC_ALL="locale"mana localenama lokal kustom Anda. Jika Anda ingin menggunakan lokal untuk semua hal selain bahasa, Anda dapat menulis LANG="locale"dan (di baris lain, tentu saja) di LANGUAGE="locale":XXmana XXkode 2 huruf untuk bahasa yang Anda inginkan.

Misalnya, jika Anda ingin menggunakan bahasa Belanda dan bahasa Inggris, Anda dapat menggunakan:

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

Kamu telah selesai

Lain kali Anda masuk, lokal Anda harus digunakan. Anda dapat menguji ini dengan menjalankan localeperintah lagi.

Berikan komentar tentang ketidakkonsistenan atau pernyataan salah dalam panduan ini!

Severo Raz
sumber
Halo, Kode python yang Anda gunakan, tidak berfungsi untuk semua kasus. Untuk karakter yunani πμ, ini menghasilkan <U00CF><U0080><U00CE><U00BC>, bukan karakter yang diharapkan <U03C0><U03BC>. Berikut ini tautan yang berfungsi.
nass
Terima kasih atas masukan Anda! Saya telah memasukkan komentar Anda dalam teks di mana ia seharusnya :)
Severo Raz
Saya harus menambahkan custom UTF-8untuk /usr/share/i18n/SUPPORTEDsebelum saya bisa menjalankan sudo locale-gen. Kalau tidak, itu tidak akan ada dalam daftar.
Wilbert
Menyalin metode konversi string Anda ke koleksi skrip shell saya: github.com/budhajeewa/shell-scripts/commit/… . Terima kasih!
budhajeewa
Jika ada yang mencari fungsi untuk melakukan kebalikan dari metode dalam jawaban ini (saya membutuhkannya untuk membaca nilai hex yang ada dalam file lokal.), Saya menulis skrip PHP untuk itu. github.com/budhajeewa/shell-scripts/commit/… . Jika seseorang dapat menulisnya dengan Python, beri tahu saya. Saya ingin menambahkan itu ke koleksi saya.
budhajeewa
8

Tidak yakin jenis penyesuaian apa yang Anda inginkan, tetapi Anda dapat menetapkan beberapa variabel lokal menggunakan ~/.locale. Misalnya, untuk mendapatkan pesan bahasa Inggris tetapi waktu Jerman dan suka saya gunakan

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"

Menghasilkan lokal khusus juga dimungkinkan. Lihat misalnya panduan ini untuk tanggal.

Carsten Thiel
sumber
1
Tidak, saya ingin kustomisasi tingkat bawah. Misalnya: pesan bahasa Inggris, satuan metrik, tanggal / waktu Republik Ceko yang dimodifikasi (DD.MM.YYYY HH: mm alih-alih DMYYYY H.MM), sebuah titik sebagai pemisah desimal (ada koma untuk ini di lokal Ceko) dan € sebagai mata uang (ada mata uang Kč di lokal Ceko).
Ivan
Saya melihat. Mengambil en_USuntuk LC_NUMERICdan de_DEuntuk LC_MONETARYdan LC_MEASUREMENTmemberi Anda efek samping lain? Lihat juga tautan baru untuk menghasilkan lokal pribadi.
Carsten Thiel
1
petunjuk di balik Tautan tampaknya menjawab pertanyaan dengan sangat baik, mungkin Anda bisa meniru bit yang paling penting di sini, kalau-kalau tautannya tidak dapat dijangkau suatu hari nanti?
Stefano Palazzo