我编写了一个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地址自动执行此操作?

以标准方式设置Debian语言环境:sudo dpkg-reconfigure语言环境。

#1 楼

编辑/etc/default/locale并将其内容设置为:
LANG="nl_NL.UTF-8"

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

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

您可以在/usr/share/i18n/SUPPORTED中找到受支持的语言环境列表
Debian Wiki上有更多可用信息。

评论


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

–pgs
09年8月16日在2:44

+1了这个用于描述locale-gen的答案,但是按照前面的评论,我的系统上没有/ var / lib / belocs / list这样的文件

– telent
2011年7月12日在19:52

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

–Cec
17年5月19日在8:25

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

–卡尔·莫里森(Karl Morrison)
18年2月15日在12:27

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

– Tobias Gaertner
18年8月30日在10:17

#2 楼

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

评论


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

–大卫·帕什利(David Pashley)
09年8月15日在15:54

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

–pgs
09年8月16日在2:42

我必须在sudo dpkg-reconfigure语言环境中使用sudo运行它。

– Alex Yursha
17年8月23日在4:56



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

–Paul Rougieux
17年12月13日在21:16



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

– aexl
18年6月14日在10:24

#3 楼

像大多数其他地方一样,这里的答案不完整。将来自几个地方的信息拼凑在一起之后,对我有用的是(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\)//' /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


在同一shell上,您需要对env vars执行source ~/.bashrc立即生效。您可以通过调用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


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


https://unix.stackexchange.com/a/247019/21289
https://perlgeek.de/en/article/set -up-a-clean-utf8-环境


评论


当需要在官方Microsoft映像中运行的dotnet应用程序需要区域设置时,这对我们有用。

–索比昂·拉文·安德森(ThorbjørnRavn Andersen)
19-11-25在15:26

在设置Docker容器时,这对我有用。但是,在执行locale-gen之后,我没有以root用户身份更新locale LANG = en_US.utf8,而是将环境范围的LANG = en_US.utf8添加到〜/ .bashrc中,从而将系统范围的语言环境设置为新用户。

– wind39
20-05-14在19:52

#4 楼

在安装了以下命令的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中未列出(且未注释)的每个语言环境。 >

#5 楼

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

评论


如果系统没有要求的语言环境,则setlocale将不起作用。

–教父
18年8月6日在12:53

#6 楼

对于像我一样在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-8fr_FR代码集,并最后键入:

sudo dpkg-reconfigure locales

完成工作

评论


感谢您提及support.d / local文件,我在那里找到了不必要的定义。花了我很长时间才找到:/

–阿凡达(Avamander)
20年6月4日在13:24

#7 楼

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

aptitude install language-pack-en


#8 楼

注意:以下某些命令需要root特权,请考虑使用sudo
基本信息
根据man locale-gen,语言环境设置在多个文件中。

/etc/locale.gen
主配置文件,格式简单:每行不为空且不以#开头的行将被视为要构建的语言环境定义。
/var/lib/locales/supported.d/
包含语言环境的目录语言包软件包提供的.gen代码段。不要手动编辑它们,它们会在软件包升级时被覆盖。

Arch Wiki上有关语言环境的全面详细信息。
检查语言环境和语言环境
要检查(已)生成的语言环境,请运行以下任何命令(输出会有细微的差别)。
 locale -a
localedef --list-archive
localectl list-locales
 

要检查当前使用的语言环境,请运行以下任何命令(输出差异很小)。
 locale
localectl
 

设置和生成(新)语言环境
通常由/etc/locale.gen中的注释行设置,然后需要运行locale-gen
 nano /etc/locale.gen # uncomment desired lines (locales)
locale-gen
 

这将为每个未注释的内容生成语言环境文件
或者,命令
 /etc/locale.gen 

w取消注释/var/lib/locales/supported.d/中的相应行,同时生成所需的语言环境。
删除语言环境
要删除locale-gen <locale> 中的语言环境,只需注释所需的行并使用locale-gen重新生成语言环境。命令/etc/locale.gen不会执行修饰符所建议的操作。
要删除locale-gen下的语言环境会比较棘手。由于任何文件locale-gen --purge <locale>都依赖于软件包/var/lib/locales/supported.d/,因此对前者的任何更改都将在更新后者时恢复。
解决方法。为防止在/var/lib/locales/supported.d/<code>下进行更改,请在其中使用“不可变(i)”属性设置文件。因此,不要删除文件,而是将它们清空。例如:
 language-pack-<code>-base 

设置语言环境
设置和生成语言环境不会设置系统语言环境。以下任何命令均可实现此目的。
 /var/lib/locales/supported.d/ 


评论


这是从这里来的。

–vitaminace33
20-10-11在14:47

不是归属,职位也是我的。

–vitaminace33
20-10-11在15:31

啊,很抱歉,我没有访问该链接。

– Glorfindel
20-10-11在15:33