我通常通过配置我的 ubuntu
sudo locale-gen --purge en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)
我已经安装了语言环境
# locale -a
C
C.UTF-8
en_US.utf8
POSIX
Run Code Online (Sandbox Code Playgroud)
我失踪了可以en_US吗?
我在 Ubuntu 9.10 上有一个非常顽固的、众所周知的语言环境错误:
perl:警告:设置区域设置失败。
perl:警告:请检查您的区域设置:
语言 =(未设置),
LC_ALL =(未设置),
LC_TIME = "custom.UTF-8",
LANG = "en_US.UTF-8"
尝试了以下方法:
LANG=en_US.UTF-8和LC_ALL=en_US.UTF-8到 /etc/environmentapt-get install --reinstall locales(错误:perl:警告:回退到标准语言环境(“C”)。/usr/bin/mandb:无法设置语言环境;确保 $LC_* 和 $LANG 正确)sudo dpkg-reconfigure locales。结果:无法将 LC_ALL 设置为默认语言环境:没有这样的文件或目录,然后更新所有语言环境,包括 en_US.UTF-8sudo locale-gen 成功更新所有语言环境,包括 en_US.UTF-8sudo locale-gen un_US en_US.UTF-8 没有错误也没有其他输出/etc/default/locale它说LANG="en_US.UTF-8"echo $LANG 给出 en_US.UTF-8/var/lib/locales/supported.d/local 说 en_US.UTF-8 UTF-8locale -a 给我:C en_AG en_AU.utf8 en_BW.utf8 en_CA.utf8 en_DK.utf8 en_GB.utf8 en_HK.utf8 en_IE.utf8 en_IN en_NG en_NZ.utf8 en_PH.utf8 en_SG.utf8 en_US.utf8 …
--purge在生成新的语言环境之前,我使用了删除现有语言环境的选项,但似乎无法删除现有语言环境?
例如
# locale-gen --purge en_US
# locale -a
C
en_AG
en_AU.utf8
en_BW.utf8
en_US
en_US.utf8
POSIX
zh_TW
Run Code Online (Sandbox Code Playgroud) 由于更新到 Debian Buster,date在终端上运行以 AM/PM 格式显示时钟,而不是 24 小时时钟。这是新的,发生在所有更新的安装中。
Docker 容器:
yeri@b9b3e889fd76 ~ $ date
Thu 01 Aug 2019 11:28:25 PM +08
Run Code Online (Sandbox Code Playgroud)
本地主机:
liana ~ # date
Thu 01 Aug 2019 11:32:44 PM +08
Run Code Online (Sandbox Code Playgroud)
数字海洋:
ui0 ~ # date
Thu 01 Aug 2019 05:33:11 PM CEST
Run Code Online (Sandbox Code Playgroud)
这很烦人,我没有要求这样做 - 但是找不到更改它的设置。
我唯一能想到的是语言环境设置为美国;但之前的情况也是如此(Debian 9):
ui0 ~ # cat /etc/default/locale
# File generated by update-locale
LANG=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)
yeri@b9b3e889fd76 ~ $ locale
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" …Run Code Online (Sandbox Code Playgroud) 是否有任何命令行实用程序可以更改 Windows 2003 中的系统区域设置?
如何更改 linux 默认语言环境,以便所有用户和应用程序都具有相同的语言环境设置?
兄弟,沃尔夫
多年来我一直遇到“设置区域设置失败”的问题。我现在明白了问题所在。在我的本地计算机上,我的 LC_TIME 设置为自定义文件(“custom.UTF-8”)。我连接到的任何远程计算机上都不存在此自定义文件。但是,通过 SSH,我的区域设置被“导出”并在远程计算机上进行搜索。这就是为什么我不断得到:
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_TIME = "custom.UTF-8",
LANG = "en_US.UTF-8"
Run Code Online (Sandbox Code Playgroud)
我想要配置的是本地 LC_TIME (或任何语言环境变量)永远不会导出。我只需使用远程计算机上定义的值就可以了。我该如何定义这个?
服务器信息(删除了 DNS 和 IP):
cat /proc/version && uname -a && java -version
Linux version 2.6.16.33-xenU (*************) (gcc version 4.1.1 20070105 (Red Hat 4.1.1-52)) #2 SMP Wed Aug 15 17:27:36 SAST 2007
Linux ************* *************-xenU #2 SMP Wed Aug 15 17:27:36 SAST 2007 x86_64 x86_64 x86_64 GNU/Linux
java version "1.6.0_14"
Java(TM) SE Runtime Environment (build 1.6.0_14-b08)
Java HotSpot(TM) 64-Bit Server VM (build 14.0-b16, mixed mode)
Run Code Online (Sandbox Code Playgroud)
我有一些 PHP 代码正在读取 Excel 文件并进行字符串比较。由于似乎是语言环境问题,它在服务器上失败。然而,在我的本地机器(OSX 10.8.5 Mountain Lion)上,它可以工作!
在我的本地机器上,语言环境是 en_US.UTF-8。在服务器上,语言环境是 POSIX,但我将其更改为 en_US.utf8,因为当我查看locale -a时没有 en_US.UTF-8 …
我正在设置一个 Docker 版本,它允许我从 Linux 连接到 SQL Server。据我所知,这与这个问题几乎无关,但可能,因为我很困惑!
我的映像基于 Debian,因为 Debian 小而轻。我怀疑我错过了一些语言环境的东西,这就是导致这种情况的原因,但我不知道。
无论如何,这是我的命令+错误:
$ perl -MDBI -MData::Dumper -E'say Dumper(DBI->connect("dbi:ODBC:server=10.6.6.17;port=1433;database=Lynx;driver=ODBC Driver 11 for SQL Server;uid=sa;pwd=password")->selectall_arrayref("SELECT * FROM Setup"))'
terminate called after throwing an instance of 'std::runtime_error'
what(): locale::facet::_S_create_c_locale name not valid
Run Code Online (Sandbox Code Playgroud)
对我来说,这看起来像是 C++ 错误,可能与 SQL Server ODBC 驱动程序有关;它可能是 C++。
我试过了:
export LC_ALL=Cexport LC_ALL=C.UTF-8export LC_ALL=en_US.UTF-8export LC_ALL=en_USexport LC_ALL=POSIXapt-get install localeslocale-gen并且取得了零进展。有任何想法吗?
附录:以下是我实际的 Dockerfile;它肯定是不完整的并且可以使用一些爱,但它可能会帮助您重现此错误(请注意,我的命令中的连接字符串最终需要调整以指向真正的 SQL Server,但不会重现此问题。)
FROM perl:5.20.1
RUN wget ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.2.tar.gz && \
tar xf unixODBC-2.3.2.tar.gz && \
cd …Run Code Online (Sandbox Code Playgroud) 也许我不明白语言环境...但是你能解释一下吗:
如果我使用 localectl 设置区域设置:
localectl set-locale LANG=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)
我在 localectl 输出中看到:
System Locale: LANG=en_US.UTF-8
VC Keymap: us
X11 Layout: us
Run Code Online (Sandbox Code Playgroud)
系统区域设置现在是 en_US.UTF-8
但在locale输出中我仍然看到这个:
LANG=ru_RU.UTF-8
LC_CTYPE=ru_RU.UTF-8
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE=ru_RU.UTF-8
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=
Run Code Online (Sandbox Code Playgroud)
设置用户区域设置只有一种方法 - 将其导出或添加到 .bash_profile 文件中以在重新启动后保存?