Komentar awal : Pertanyaan ini tidak tentang pengaturan lokal dengan mengubah LC_ALL
, LC_TIME
, LANG
, dll, itu lebih tentang mengubah lokal definisi , misalnya dalam /usr/share/i18n/locales/de_DE
, atau masing-masing, untuk mendapatkan saran tentang pilihan yang lebih tepat daripada mengubah mereka pengaturan sistem.
The niat adalah untuk mendapatkan representasi waktu ISO %Y-%m-%d
dan %H:%M:%S
tanpa efek samping yang tidak diinginkan.
Saran yang saya temukan di internet belum semuanya sesuai (misalnya, menetapkan lokal ke "Denmark" tidak akan mempertahankan nama hari kerja yang dieja bahasa asli bahasa tersebut).
Sekarang satu-satunya pilihan yang saya lihat saat ini untuk mendapatkan perilaku yang diinginkan adalah mengubah definisi lokal asli saya /usr/share/i18n/locales/de_DE
. Ini bukan solusi yang sempurna karena dengan pembaruan sistem, file yang diubah itu dapat ditimpa lagi.
Pertanyaan saya adalah:
- Apakah ada opsi terkait lokal yang lebih baik untuk mendapatkan fungsi yang diinginkan daripada mengubah file lokal sistem tertentu?
- Apakah ada masalah yang diharapkan saat mengubah file definisi lokal tertentu? (Dan bagaimana bisa dicegah bahwa file ini ditimpa jika terjadi pembaruan sistem?)
- Apakah akan lebih baik untuk menentukan varian spesifik baru dari file lokal yang ada dan menggunakannya dalam
LC_*
pengaturan? (Dan bagaimana file / definisi baru itu diketahui dengan benar oleh sistem?) - Ada saran lain?
en_XX
- Saya tidak tahu apa batasannya, percobaan dan kesalahan mungkin sudah cukup), buat perubahan apa pun yang Anda inginkan , dan gunakan sebagai lokal. Anda harus membuat ulang daftar atau apa pun sesudahnya, dll.LC_TIME
(di/etc/environment
atau/etc/default/locale
atau/etc/locale.conf
tergantung pada distro) ke lokal dimodifikasi (saya menelepon sayaisodate.UTF-8
) dan format masing-masing akan dijemput dari yang lokal disesuaikan untuk hanya waktu / tanggal. Ini adalah bagaimana saya menyesuaikanen_US
pengaturan saya yang lain untuk menampilkan tanggal / waktu ISO./var/lib/locales/supported.d/local
(atau salah satu file lain di sana) dan dijalankandpkg-reconfigure locales
sebagai superuser untuk definisi lokal yang akan dikompilasi. Dan ya, pengaturanLC_TIME
untuk menunjuk ke lokal yang dikustomisasi tampaknya menjadi metode yang paling tidak mengganggu dari semua yang saya lihat sejauh ini. Itu sebabnya sistem Anda memiliki pengaturan global di manaLC_TIME
dapat diatur berbeda dari "keseluruhan lokal".copy
pendekatan pada bagian, atau menjaga bagian lain redundan (sehingga saya dapatdiff
melawan file asli).Jawaban:
Dalam sebuah pertanyaan baru - baru ini saya bertanya apa praktik terbaik untuk perubahan semacam ini. Belum ada jawaban. Namun, saya bisa memberi Anda resep yang saya gunakan, yang telah terbukti bekerja dengan baik. Semua program mengambil tanggal dengan benar.
Deskripsi saya untuk Ubuntu, tetapi kemungkinan akan bekerja pada Debian dan Mint.
Persiapan
Salin lokal tempat Anda ingin menyesuaikan dari
/usr/share/i18n/locales
ke file baru. MisalnyaSesuaikan semua dengan pengecualian
LC_TIME
bagian ke:Sesuaikan
LC_TIME
bagian untuk mencocokkan hasil yang Anda inginkan. Anda dapat menggunakan pengaturan dari pertanyaan saya yang ditautkan di atas sebagai templat. Sepertinya ini persis seperti yang Anda inginkan.Jika lokal Anda tidak menggunakan notasi "AM / PM", setel itu menjadi kosong:
Membuatnya dikenal oleh sistem
Edit file
/var/lib/locales/supported.d/local
dan tambahkan info tentang definisi lokal Anda di sana. Yaitu menambahkan baris seperti ini jika nama file Anda di atasisodate
, sesuaikan sebaliknya:Jika
/var/lib/locales/supported.d/local
tidak ada, buat file dengan nama itu. Jangan memasukkan perubahan Anda ke masing-masingen
ataude
file di folder itu, karena mereka akan ditimpa segera setelahlanguage-pack-*-base
danlanguage-pack-*
paket pada sistem Anda menerima pembaruan.Sekarang jalankan
dpkg-reconfigure locales
:Dalam kasus Anda ini akan menunjukkan bahwa
de_DE.UTF-8@isodate
lokal telah dibuat (dengan asumsi Anda tidak memiliki masalah sintaksis).Terakhir, tambahkan yang berikut ini ke
/etc/default/locale
:Ini akan memastikan bahwa hanya
LC_TIME
mengesampingkan lokal default yang ditentukan menggunakanLANG
.Login lagi dan Anda harus dapat melihat tanggal / waktu ISO baru saat menggunakan
date
atau alat lain menggunakan fungsi runtime libc masing-masing.Maksudnya di sini adalah untuk membuat perubahan yang paling tidak mengganggu sementara juga tidak bekerja melawan sistem (misalnya terhadap manajer paket dan teman-teman). Tentu saja Anda juga dapat dengan mudah membuat salinan lokal Anda, menginstalnya dengan cara yang sama seperti diuraikan di atas dan kemudian menyesuaikan
LANG
. Intinya adalah, selama Anda tidak ingin menjalankan risiko perubahan Anda ditimpa oleh pembaruan paket, Anda harus menggunakan salinan yang disesuaikan (kustomisasi apa pun yang Anda pilih ; mis.copy
Atau cukup simpan bagian-bagian seperti saat berada di asli). Dan apakah Anda mengubahLANG
ke titik ke penuh definisi lokal disesuaikan - atau apakah Anda menambahkanLC_TIME
hanya menunjuk ke bagian khusus yang relevan dengan nama yang sama dari file definisi lokal khusus - Anda tidak akan menyesuaikan pengaturan global.sumber
en_US.UTF-8@isodate
.copy
denganLC_IDENTIFICATION
dan bagaimana akan yang mempengaruhi penamaan file dan bagaimana Anda merujuk ke lokal dalam/etc/default/locale
dan/var/lib/locales/supported.d/local
masing-masing? Bisakah Anda memberi tahu?en_US@isodate
file definisi dan digunakanlocaledef
untuk menghasilkan file yang benar; lihat sourceware.org/git/?p=glibc.git;a=blob;f=localedata/README untuk detail (dan sourceware.org/git/?p=glibc.git;a=blob;f=localedata/locales/ ... sebagai contoh).localedef -i en_US@isodate -f UTF-8 en_US.UTF-8@isodate
, Saya tidak yakin tentang konfigurasi khusus Debian, komentar saya kebanyakan tentang bagaimana untuk menyebutkan lokasi./usr/local/share/i18n/locales
, tambahkan pasangan locale / charmap yang didukung/usr/local/share/i18n/SUPPORTED
, dan jalankandpkg-reconfigure locales
(lihat juga/etc/locale.gen
).