如何在Ubuntu服务器上添加语言环境?

我目前拥有这些语言环境:

locale -a

C
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZW.utf8
POSIX

如何将ru_RU语言环境安装到我的服务器上?
12个回答

жӘЂжџӨж”ҮжЊЃзљ„иҮ­иЁЂзҺҮеұѓпәљ ``` locale -a ```
ж·»еЉ ж‰ЂйњЂзљ„иҮ­иЁЂзҺҮеұѓпә€дң‹е¦‚ `ru`пә‰пәљ ``` sudo locale-gen ru_RU sudo locale-gen ru_RU.UTF-8 ```
иүђиҰЊд»Өдё‹ж›өж–°е‘Ң令пәљ ``` sudo update-locale ```

30然后运行 sudo update-locale - Justin Force
6如果不支持,你会怎么做? - Kimble
1use ru_RU.UTF-8 - neves
6请问您能详细解释为什么需要同时使用 ru_RUru_RU.UTF-8 吗?我对区域设置不太了解。 - Sopalajo de Arrierez
18如果你使用php5-fpm,你需要运行sudo service php5-fpm restart来重启服务。 - Stalinko
4这正是我所需要的,但我不得不重新启动Apache才能使其正常工作...谢谢! - Jabari
2@SopalajodeArrierez:在不指定字符集的情况下,执行locale-gen命令会默认生成ISO-8859-1字符集。 - igorsantos07
我需要这个用于 PHP 的 setlocale,并且我还必须重新启动我的虚拟机才能使其生效。 - totymedli
7由于某种原因,对我来说,命令sudo locale-gen ru_RU.UTF-8没有任何作用。作为替代方案,可以手动编辑文件vi /etc/locale.gen,取消注释所需的区域设置。 - The Godfather
我还必须运行"dpkg-reconfigure -plow locales",就像这里建议的一样:http://squirrelmail.org/wiki/SupportingMultipleLanguages - SimoneB
locale-genlocalehelper软件包的一部分;如果它也丢失了。 - rvalue
2update-locale是做什么的呢?对我来说,它生成了一个带有注释的文件。根据不同的版本,你可能需要执行locale-gen en_US.utf8,或者编辑/etc/locale.gen并执行locale-gen。此外,您可能还想要更改/导出LANG变量。至少在trusty上,dpkg-reconfigure locales似乎会运行locale-gen。就这些价值而言。 - x-yuri

我会选择另一种方法,这对Ubuntu风格更合适。 使用提供的软件包。每个语言环境都有软件包,并且它们会为您完成所有工作...无需编辑/var文件,我始终认为这些文件不应手动编辑。
sudo apt-get install language-pack-XX

其中XX代表语言代码。安装一种语言也会安装所有特定国家的变体(例如,安装language-pack-it将安装it_CH.utf8和it_IT.utf8,安装NL将安装nl_AW、nl_AW.utf8、nl_BE.utf8和nl_NL.utf8)。


我认为这是最好的、最符合“Ubuntu”精神的做法。 - Luke Madhanga
5但是生成本地化环境会提供一些东西,比如本地化的日期格式、小数分隔符、字符集等。语言包也提供了翻译,但这并不一定是其意图所在。 - Oskar Berggren
1同意奥斯卡的观点。如果考虑到这个安装是为了服务器,那就更加重要了——大多数界面都会是英文的。 - igorsantos07
2我担心这也会改变当前的区域设置,但事实并非如此。一切都很好。 在我看来,这似乎是最好的方法。我并不特别“需要”“翻译或其他东西”,但如果我出于某种原因专门使用了一个区域设置,我希望它是完整的。 - Balmipour

检查支持的区域设置: ``` less /usr/share/i18n/SUPPORTED ```
将区域设置添加到生成列表中: ``` echo ru_RU.UTF8 >> /var/lib/locales/supported.d/local ```
重新生成列表(这将调用 locale-gen...): ``` sudo dpkg-reconfigure locales ```

4我不得不在Ubuntu 15.04上添加第二列:echo ru_RU.UTF-8 UTF-8 >> /var/lib/locales/supported.d/local(UTF-8出现两次)。否则,它可以正常工作。 - jfs
在可靠的locale-gen ru_RU.utf8基本上是将ru_RU.UTF-8 UTF-8添加到/var/lib/locales/supported.d/local中,并且还会添加该区域设置。dpkg-reconfigure locales似乎运行locale-gen,在缺少参数的情况下,从/var/lib/locales/supported.d/local安装尚未安装的区域设置。 - x-yuri

我发现locale-gen是你的好朋友。 例如(添加希伯来语utf8):
root@world:~# locale-gen he_IL.UTF-8

你甚至可以这样重新表达它:
root@world:~# dpkg-reconfigure locales

检查一下你做得怎么样:
root@world:~# locale -a

我发现这个解决方案比向文本文件中添加内容要简单得多,尽管它确实是这样做的。

修改/etc/locale.gen文件,取消注释或添加您希望生成的区域设置。然后运行sudo locale-gen
您可以使用locale -a命令检查已添加的区域设置,该命令将显示所有区域设置。

哦,我的locale-gen创建了很多地区设置,忽略了locale.gen文件。 所以请谨慎使用这个建议。 - Dzenly
根据可靠的manpage所说:“否则,它会生成所有支持的区域设置。”虽然我现在使用的是trusty版本,但它似乎会查看/var/lib/locales/supported.d/local以获取要生成的区域设置列表。这与manpage中的内容相矛盾。 - x-yuri

echo ru_RU.UTF8 >> /var/lib/locales/supported.d/local

我在第3点收到以下信息:“错误:无效的条目 'ru_RU.UTF8'”
这对我有效:
echo ru_RU.UTF-8 UTF-8 >> /var/lib/locales/supported.d/local

这对我有用。在我的情况下,我遇到了en_GB区域设置的错误条目。我已经更新了我的/var/lib/locales/supported.d/mintlocale文件,添加了以下行:en_GB UTF-8en_GB.UTF-8 UTF-8(缺少了额外的UTF-8)。 - Samir Aguiar

使用Ubuntu语言包。所有支持的语言都可以在默认存储库中找到:
apt-cache search language-pack

Ubuntu(服务器版)中区域设置切换的完整示例:
jani@example:~$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.1 LTS"

可以使用以下命令列出所有可用的(即已安装的)区域设置:
locale -a

我的当前语言环境是en_IE:
jani@example:~$ locale
LANG=en_IE.UTF-8
LANGUAGE=
LC_CTYPE="en_IE.UTF-8"
LC_NUMERIC="en_IE.UTF-8"
LC_TIME="en_IE.UTF-8"
LC_COLLATE="en_IE.UTF-8"
LC_MONETARY="en_IE.UTF-8"
LC_MESSAGES=POSIX
LC_PAPER="en_IE.UTF-8"
LC_NAME="en_IE.UTF-8"
LC_ADDRESS="en_IE.UTF-8"
LC_TELEPHONE="en_IE.UTF-8"
LC_MEASUREMENT="en_IE.UTF-8"
LC_IDENTIFICATION="en_IE.UTF-8"
LC_ALL=
jani@example:~$ date
Sat Nov  1 15:36:51 UTC 2014
jani@example:~$

因为我没有ru语言环境,所以我需要安装ru语言包。
jani@example:~$ sudo apt-get -y install language-pack-ru
[..]
Generating locales...
  ru_RU.UTF-8... done
  ru_UA.UTF-8... done
Generation complete.
jani@example:~$ 

现在ru语言环境可用。系统默认语言环境通过编辑/etc/default/locale来设置:
jani@example:~$ sudo vi /etc/default/locale
# Created by cloud-init v. 0.7.5 on Mon, 27 Oct 2014 18:46:13 +0000
LANG="ru_RU.UTF-8"
LC_MESSAGES=POSIX
jani@example:~$

请重新登录并检查您全新的区域设置:
jani@example:~$ locale
LANG=ru_RU.UTF-8
LANGUAGE=
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=POSIX
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=
jani@example:~$ date
Сб. нояб.  1 15:43:45 UTC 2014
jani@example:~$ 

如果您没有安装locale:
apt-get update && apt-get install locales

在此之后,只需添加所需的区域设置。
sudo locale-gen pt_BR

对于一个不支持我所需的语言环境的小型服务器(locale -a没有列出它),我只需要运行以下命令即可:
sudo dpkg-reconfigure locales

提供了基于文本的对话框,我可以从中选择(上下翻页,空格选择,Tab键确定,Enter键保存)。它会自动重新生成区域设置。
正如其他人所说,您需要重新启动任何需要新区域设置的进程。

检查您的发行版中已经支持的区域设置。打开或使用cat命令打开文件/usr/share/i18n/SUPPORTED,并复制要添加的所需区域设置。
在终端中输入sudo locale-gen locale_name
例如:sudo locale-gen de_DE.iso885915@euro 输入sudo update-locale 使用locale -a命令检查是否安装了该区域设置。