如何在Debian上安装/更改语言环境?


65

我已经编写了一个Web应用程序,其用户界面为荷兰语。我使用系统的日期和时间例程在应用程序中格式化日期字符串。但是,系统格式的日期字符串是英语,但我希望用荷兰语,因此我需要设置系统的语言环境。我该如何在Debian上做到这一点?我尝试设置,LC_ALL=nl_NL但似乎没有任何效果:

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

我记得在我的Ubuntu桌面系统上设置LC_ALL可以正常工作。我是否需要安装额外的软件包才能完成这项工作,还是我做错了?


有没有一种方法可以根据服务器分配的IP地址自动执行此操作?
独家报道

2
设置Debian的语言环境的标准方式sudo dpkg-reconfigure locales
Paul Rougieux

Answers:


72

编辑/etc/default/locale并将内容设置为:

LANG="nl_NL.UTF-8"

您可以使用以下方法检查当前生成的语言环境:

# locale -a

您可以通过编辑/etc/locale.gen和取消注释要启用的语言环境的行来生成更多内容。然后,您可以通过运行以下命令生成它们:

# locale-gen

您可以在以下位置找到支持的语言环境列表 /usr/share/i18n/SUPPORTED

Debian Wiki上有更多可用信息。


9
/ var / lib / belocs / list不存在。您需要编辑/etc/locale.gen或运行dpkg-reconfigure语言环境。
pgs

+1这个答案描述语言环境根,但根据以前的评论,有没有这样的文件在/ var / lib中/ belocs /我的系统列表
TELENT

我花了5个小时才找到这个答案,最终还是很完美。此外,它允许创建别名:en_US UTF-8和it_IT UFT-8默认情况下允许我将语言环境设置为UTF-8,如果您拥有依赖于语言环境的PHP代码,那就太好了
Cec

是否有一个命令或软件包可以编辑和设置/ etc / default / locale的内容?
莫里森

请参阅以下沙皇的答案。您可以这样做:sed -i's / ^#*(en_US.UTF-8)/ \ 1 /'/etc/locale.gen
Tobias Gaertner,

66

您可能需要安装该locales软件包。这将询问您要生成哪些语言环境。如果已经安装,则dpkg-reconfigure locales可以生成更多语言环境。


那只会生成语言环境,而不会设置系统默认值。
David Pashley,09年

16
否,dpkg-reconfigure语言环境的最后一个问题是选择默认语言环境。
pgs

2
我必须使用sudoas 来运行它sudo dpkg-reconfigure locales
亚历克斯·尤沙

如果是通过ssh访问的服务器,则有关语言环境的Debian Wiki页面建议保留默认语言环境为NONE
Paul Rougieux

1
这正是我所需要的:只需几次按键就可以安装所有语言环境。非常感谢!
aexl

10

像大多数其他地方一样,这里的答案不完整。将来自几个地方的信息拼凑在一起后,对我有用的是(1)确保所需的语言环境可用(如果没有,则生成它),然后(2)将与语言环境相关的环境变量设置为所需的语言环境。

就我而言,我需要以en_US.UTF-8编程方式(即非交互方式)安装在Docker容器中。ff完成了我所需要的,但在交互式shell中应该可以正常工作。

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

在同一外壳上,您需要source ~/.bashrc使env var立即生效。您可以通过调用来检查语言环境是否已正确配置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

关于此主题的问答集很多,但实际上只有少数有用。信用到期的地方:


6

在安装了以下内容的LXC容器上,这些答案都不对我有用:

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

我总是从获得以下输出locale-gen,即不生成任何语言环境(未列出):

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

运行dpkg-reconfigure locales并选择一些语言环境并没有/etc/locale.gen按照我的预期进行更新。

但是,当我手动修改该文件并取消注释所需的语言环境后,便可以locale-gen正常工作:

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

我还能够像这样手动生成语言环境:

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

但是,这不是一个永久性的解决方案:我发现locale-gen没有该--keep-existing选项的运行将删除所有此类手动生成的语言环境,即未在中列出(且未注释)的每个语言环境/etc/locale.gen


3

对于Web应用程序,最好在程序内部使用setlocale(),而不是要求在外部适当地设置系统默认语言环境。这样减少了松动的末端。


1
如果系统没有要求的语言环境,setlocale则将无法正常工作。
教父

1

但是首先,您需要安装语言包。在基于德语的VPS上,没有预安装英语包。因此,首先您要检查是否已安装:

aptitude install language-pack-en

1

对于像我一样在Ubuntu 14.04 LTS上没有/etc/locale.gen文件的用户,可以在其中添加新的语言环境/var/lib/locales/supported.d/local,然后运行:

sudo dpkg-reconfigure locales

您还可以通过这种方式(例如编辑/var/lib/locales/supported.d/local)添加法语(例如)语言环境:

sudo locale-gen fr_FR fr_FR.UTF-8

添加并生成语言环境的ISO-8859-1和代码UTF-8集,fr_FR最后键入:

sudo dpkg-reconfigure locales

完成工作

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.