我在 Ubuntu 中遇到了 locale 和 locale-gen 的问题

Syn*_*ror 3 command-line apt locale

我在区域设置方面遇到一些问题。当我在终端中输入语言环境时,出现这样的错误:

$locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LANGUAGE=
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
Run Code Online (Sandbox Code Playgroud)

我不知道我做错了什么,但我需要你们的帮助。当我在终端中输入 locale-gen 时,出现错误:

Generating locales (this might take a while)...
  en_US.UTF-8...failed to set locale!
[error] cannot open locale definition file `en_GB': No such file or directory
 done
Generation complete.
Run Code Online (Sandbox Code Playgroud)

我找到了一个解决方案,我自己想出了办法。我删除了最后一行 /etc/locale.gen 中的#。删除之前是这样的:

# aa_DJ ISO-8859-1
# aa_DJ.UTF-8 UTF-8
# aa_ER UTF-8
# aa_ER@saaho UTF-8
...
# zu_ZA ISO-8859-1
# zu_ZA.UTF-8 UTF-8
en_US.UTF-8 UTF-8
Run Code Online (Sandbox Code Playgroud)

我像这样更改了最后一行:

# en_US.UTF-8 UTF-8
Run Code Online (Sandbox Code Playgroud)

我不知道我是否做错了什么,但当我这样做时,错误就解决了。请告诉我我是否做错了什么。之后我尝试重新配置区域设置,但当我尝试执行以下操作时出现另一个错误:

$sudo dpkg-reconfigure locales
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = "",
        LC_ALL = "en_US.UTF-8",
        LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
/usr/bin/locale: Cannot set LC_CTYPE to default locale: No such file or directory
/usr/bin/locale: Cannot set LC_MESSAGES to default locale: No such file or directory
/usr/bin/locale: Cannot set LC_ALL to default locale: No such file or directory
Run Code Online (Sandbox Code Playgroud)

当我尝试使用以下命令更改 LC_ALL 时,我又遇到了一个错误:

$export LC_ALL="en_US.UTF-8 UTF-8"
bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8): No such file or directory
Run Code Online (Sandbox Code Playgroud)

我收到错误,但 LC_ALL 发生了变化。我不知道我的区域设置发生了什么,但看起来我真的把它搞砸了。我应该怎么做才能解决所有这些问题?

Gry*_*ryu 6

使用以下命令确保您的语言环境存在:

locale -a
Run Code Online (Sandbox Code Playgroud)

如果您在列表中没有看到您的区域设置,请使用:

sudo locale-gen en_US
sudo locale-gen en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

然后通过以下方式将您的区域设置更新为现有区域设置:

sudo update-locale LC_ALL=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

通过以下方式应用更改:

. /etc/default/locale
Run Code Online (Sandbox Code Playgroud)

我的区域设置:

$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=uk_UA.UTF-8
LC_TIME=uk_UA.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=uk_UA.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=uk_UA.UTF-8
LC_NAME=uk_UA.UTF-8
LC_ADDRESS=uk_UA.UTF-8
LC_TELEPHONE=uk_UA.UTF-8
LC_MEASUREMENT=uk_UA.UTF-8
LC_IDENTIFICATION=uk_UA.UTF-8
LC_ALL=
Run Code Online (Sandbox Code Playgroud)

设置当前会话的区域设置:

$ export LC_ALL=en_US.UTF-8
$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
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
Run Code Online (Sandbox Code Playgroud)

你也可以尝试

$ sudo apt purge locales && sudo apt install locales
Run Code Online (Sandbox Code Playgroud)