Bagaimana cara menginstal / mengubah lokal di Debian?

65

Saya telah menulis aplikasi web untuk antarmuka pengguna dalam bahasa Belanda. Saya menggunakan rutin tanggal dan waktu sistem untuk memformat string tanggal dalam aplikasi. Namun, string tanggal yang format sistemnya dalam bahasa Inggris tapi saya ingin mereka dalam bahasa Belanda, jadi saya perlu mengatur lokal sistem. Bagaimana saya melakukannya di Debian? Saya mencoba pengaturan LC_ALL=nl_NLtetapi tampaknya tidak berpengaruh:

$ date
Sat Aug 15 14:31:31 UTC 2009
$ LC_ALL=nl_NL date
Sat Aug 15 14:31:36 UTC 2009

Saya ingat pengaturan LC_ALL pada sistem desktop Ubuntu saya berfungsi dengan baik. Apakah saya perlu menginstal paket tambahan untuk membuat ini berfungsi, atau apakah saya salah melakukannya?

Hongli Lai
sumber
apakah ada cara untuk melakukan ini secara otomatis berdasarkan alamat ip yang diberikan dari server?
Ambil
2
Pengaturan Debian Lokal cara standar : sudo dpkg-reconfigure locales.
Paul Rougieux

Jawaban:

72

Edit /etc/default/localedan atur konten ke:

LANG="nl_NL.UTF-8"

Anda dapat memeriksa lokal mana yang saat ini Anda hasilkan menggunakan:

# locale -a

Anda dapat menghasilkan lebih banyak dengan mengedit /etc/locale.gendan menghapus komentar baris untuk lokal yang ingin Anda aktifkan. Kemudian Anda dapat menghasilkan mereka dengan menjalankan:

# locale-gen

Anda dapat menemukan daftar lokal yang didukung di /usr/share/i18n/SUPPORTED

Ada informasi lebih lanjut yang tersedia di wiki Debian .

David Pashley
sumber
9
/ var / lib / belocs / list tidak ada. Anda perlu mengedit /etc/locale.gen atau menjalankan dpkg-reconfigure locales sebagai gantinya.
pgs
Beri +1 jawaban ini untuk mendeskripsikan locale-gen, tetapi sesuai komentar sebelumnya, tidak ada file seperti / var / lib / belocs / list di sistem saya
telent
Butuh 5 jam untuk menemukan jawaban ini, yang akhirnya menjadi sempurna. Selain itu, memungkinkan untuk membuat alias: en_US UTF-8 dan it_IT UFT-8 memungkinkan saya untuk memiliki lokal saya di UTF-8 secara default, yang bagus jika Anda memiliki kode PHP yang tergantung pada lokal
Cec
Apakah ada perintah atau paket yang dapat mengedit dan mengatur konten / etc / default / locale?
Karl Morrison
Lihat jawaban di bawah dari Tsar. Anda dapat melakukannya seperti: sed -i 's / ^ # * (en_US.UTF-8) / \ 1 /' /etc/locale.gen
Tobias Gaertner
66

Anda mungkin perlu menginstal localespaket. Ini akan menanyakan Anda tempat mana yang akan dihasilkan. Jika sudah diinstal, maka dpkg-reconfigure localesAnda dapat menghasilkan lebih banyak lokal.

pgs
sumber
Itu hanya menghasilkan lokal, tidak menetapkan standar sistem.
David Pashley
16
TIDAK, pertanyaan terakhir dari local-reconfigure dpkg adalah memilih lokal default.
pgs
2
Saya harus menjalankannya dengan sudoseperti pada sudo dpkg-reconfigure locales.
Alex Yursha
Jika itu adalah server yang diakses melalui ssh , halaman wiki Debian di locales menganjurkan meninggalkan membiarkan default lokal diatur ke NONE.
Paul Rougieux
1
Ini persis apa yang saya butuhkan: dapatkan semua lokal diinstal hanya dalam beberapa penekanan tombol. Terima kasih banyak!
aexl
11

Jawaban di sini tidak lengkap seperti pada kebanyakan tempat lain. Setelah mengumpulkan informasi dari beberapa tempat, yang berhasil bagi saya adalah (1) memastikan lokal yang saya inginkan tersedia (menghasilkannya jika tidak) kemudian (2) mengatur variabel lingkungan terkait lokal ke lokal yang diinginkan.

Dalam kasus saya, saya membutuhkan en_US.UTF-8program (yaitu non-interaktif) yang diinstal dalam wadah buruh pelabuhan. Ff mencapai apa yang saya butuhkan tetapi harus bekerja dengan baik di shell interaktif.

apt-get update

# Install locales package
apt-get install -y locales

# Uncomment en_US.UTF-8 for inclusion in generation
sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen

# Generate locale
locale-gen

# Export env vars
echo "export LC_ALL=en_US.UTF-8" >> ~/.bashrc
echo "export LANG=en_US.UTF-8" >> ~/.bashrc
echo "export LANGUAGE=en_US.UTF-8" >> ~/.bashrc

Pada shell yang sama, Anda harus melakukan source ~/.bashrcagar env vars berlaku segera. Anda dapat memeriksa bahwa lokal telah dikonfigurasi dengan benar dengan memohon locale.

LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

Ada banyak entri tanya jawab mengenai subjek ini tetapi hanya sedikit yang benar-benar membantu. Kredit yang harus dibayar:

Raja
sumber
6

Tidak satu pun dari jawaban ini yang berfungsi untuk saya, pada wadah LXC yang diinstal dengan:

lxc-create -n sse-master -t download -n sse-master -- \
    -d debian -r jessie --arch i386

Saya selalu mendapatkan output berikut locale-gen, yaitu tidak menghasilkan lokal (tidak ada yang terdaftar):

$ sudo locale-gen
Generating locales (this might take a while)...
Generation complete.

Menjalankan dpkg-reconfigure localesdan memilih beberapa lokal tidak memperbarui /etc/locale.genseperti yang saya harapkan.

Namun, ketika saya memodifikasi file itu secara manual dan menghapus komentar lokal yang saya inginkan, kemudian locale-genmulai berfungsi dengan baik:

$ sudo locale-gen
Generating locales (this might take a while)...
  en_GB.UTF-8... done
  en_US.UTF-8... done
Generation complete.

Saya juga dapat membuat lokal secara manual seperti ini:

sudo localedef -i en_US -f UTF-8 en_US.UTF-8
sudo localedef -i en_GB -f UTF-8 en_GB.UTF-8

Tapi ini bukan solusi permanen: Saya menemukan bahwa menjalankan locale-gentanpa --keep-existingopsi akan menghapus semua lokal yang dihasilkan secara manual, yaitu setiap lokal yang tidak terdaftar (dan tidak dicommentasikan) pada /etc/locale.gen.

qris
sumber
3

Untuk aplikasi web, mungkin lebih baik menggunakan setlocale () di dalam program, daripada mengharuskan lokal default sistem diatur secara tepat di luar. Kurang longgar berakhir seperti itu.

SamB
sumber
1
Jika sistem tidak memiliki lokal yang diperlukan, setlocalemaka tidak akan berfungsi.
The Godfather
1

Tetapi pertama-tama Anda perlu menginstal paket bahasa. Di VPS saya yang berbasis Jerman tidak ada paket bahasa Inggris yang sudah diinstal sebelumnya. Jadi, pertama Anda memeriksa apakah Anda sudah menginstalnya:

aptitude install language-pack-en
valentt
sumber
1

Bagi mereka, seperti saya, di Ubuntu 14.04 LTS, memiliki, entah bagaimana, tanpa /etc/locale.genfile, Anda dapat menambahkan lokal baru di /var/lib/locales/supported.d/localdan kemudian jalankan:

sudo dpkg-reconfigure locales

Anda juga dapat menambahkan lokal Prancis (misalnya) dengan cara ini (alih-alih mengedit /var/lib/locales/supported.d/local):

sudo locale-gen fr_FR fr_FR.UTF-8

untuk menambah dan menghasilkan ISO-8859-1dan UTF-8kumpulan kode fr_FRlokal dan akhirnya ketik:

sudo dpkg-reconfigure locales

untuk menyelesaikan pekerjaan

SebMa
sumber