如何自定义系统区域设置?


24

在系统管理语言支持 文本。我只能选择标准语言环境,但我想进行微调。例如,在Windows中,我可以手动自定义时间和日期格式,度量单位,小数点分隔符,货币等内容-如何在Ubuntu中做到这一点?

Answers:


28

该答案将演示如何完全自定义语言环境,可以选择使用现有语言环境作为基础。该答案中将使用的语言环境i18n类型是type;答案正文中每次提及“语言环境”时,都将暗含这种语言环境。

查找指南

定制语言环境的第一件事就是了解语言环境的格式。该Web语言环境编辑器语言环境中的每个字段都有全面的描述,尽管任何人都不能立即使用它。这将是使用指南。

所需工具

您需要使用语言环境的唯一工具是

  1. 文本编辑器。尽管VIM会取消,但任何方法都可以。
  2. 文本到Unicode的转换器。最期望您没有一个,所以我将为您提供一个简单的例子。阅读下一部分以获取它。

我建议您创建一个目录,并将与您将在其语言环境中进行的工作相关的所有内容保存到该目录中。

文本到Unicode转换器(encodestr)

注意:如果您使用的是非常见字符,则我在下面编写的脚本可能会出现问题;您可能想看看nass链接的替代脚本。

将以下代码保存到文件中。该文件将被系统标识为python脚本,可以,因为它是一个。本指南假定您调用了脚本encodestr

#!/usr/bin/python

def encode(string):
    newstring = str()
    for ch in string:
        newstring += "<U%04X>" % ord(ch)
    return newstring

if __name__ == '__main__':
    import sys
    print encode(sys.argv[1])

保存后,授予文件执行权限-这将派上用场。您可以使用nautilus或通过从终端在保存脚本的目录上运行以下命令来执行此操作:chmod +x encodestr

现在,您可以通过在同一目录下运行来测试此脚本./encodestr hello。您应该得到等于的输出<U0068><U0065><U006C><U006C><U006F>

修改现有语言环境

修改现有语言环境是最简单的情况,因为理想情况下,您会选择几乎完全适合您需求的语言环境,在这种情况下,您只需要进行少量修改即可。要对其进行定制,可以使用指南来了解要更改的部分以及如何更改它们。所有已安装的语言环境都位于中/usr/share/i18n/locales,但是该指南几乎包含了曾经创建的每个语言环境。

但是,在打开语言环境时,您会注意到的第一件事是,您将阅读英语单词,就像阅读奇怪的<UXXXX>代码一样。您将需要能够创建这些代码-这是encodestr脚本所在的位置。

当您知道必须更改的部分时,您需要了解该部分中包含的每个字段。

例如,该LC_TIME部分包含字段t_fmt,以及许多其他字段。每个字段在指南上都有其自己的描述。

既然您知道要修改的字段,请再次使用该指南找出该字段接受的值。

例如,该字段t_fmt接受文本和公共strfmt变量

只要知道要修改的字段上写的内容,就可以通过encodestr脚本运行文本以获取其编码后的等价物。

注意:并非每个字段都需要编码,如果需要,请使用现有的语言环境作为参考。

例如,如果要Time: %Tt_fmt字段中使用时间格式,请运行./encodestr "Time: %T"; 这将返回<U0054><U0069><U006D><U0065><U003A><U0020><U0025><U0054>,因此您将t_fmt <U0054><U0069><U006D><U0065><U003A><U0020><U0025><U0054>在您的语言环境中找到该行(当然,在相应的部分中)。

修改完每个要修改的字段后,您需要继续将语言环境安装到系统中,以便可以使用它。转到安装部分。

从头开始创建语言环境

与修改一种方法相反,可用于创建自定义语言环境的另一种方法是从头开始进行处理。如果再次使用该指南,这并不是很困难。不过,这里有个有用的提示:您可以从其他语言环境中复制节,而无需实际的复制和粘贴方法。您只需要遵循以下格式:

LC_SECTION
copy "locale"
END LC_SECTION

LC_SECTION您要修改的部分在哪里,以及locale您要从中复制该部分的语言环境。

例如,如果要在英语语言环境中复制时间格式,则可以使用以下文本作为自定义语言环境文件:

LC_TIME
copy "en_GB"
END LC_TIME

这样可以节省大量工作,并确保对引用的语言环境所做的任何更改都将反映到您的语言环境中。

安装自定义语言环境

我将在下面显示的步骤可能不是最佳方法,但是可以工作。

  1. 编译您的语言环境。不要惊慌!这没有时间。只需运行命令sudo localedef -i custom -f UTF-8 custom.UTF-8 -c -vwhere custom是您的语言环境的名称。

  2. 将您的语言环境复制到/usr/share/i18n/locales/目录。您肯定会需要sudo特权来执行此操作,并且可以使用以下命令来执行此操作:sudo cp locale /usr/share/i18n/locales/where locale是自定义语言环境的文件名。

  3. 在中指定您的语言环境/var/lib/locales/supported.d/。例如,创建一个文件名/var/lib/locales/supported.d/asd并添加line custom UTF-8,其中custom是您的语言环境名称。

  4. 运行魔术命令。我实际上不知道此命令的确切作用,但这很关键。运行sudo locale-gen。最有可能在需要时生成对可用语言环境的引用。

  5. 告诉系统使用语言环境。如果要在系统范围内使用语言环境,请修改/etc/environment文件。如果没有,则可以修改~/.profile文件或启动时来源的任何其他文件。如果您不知道后者意味着什么,请放心使用该~/.profile文件。要了解您必须写的内容,请先运行locale命令。它应该发出带有类的物品清单LANGUAGELC_MESSAGESLC_CTYPE和其他许多人。你会写,对于每一个你想要的部分(由以前的命令中列出)的,在不同的行,这SECTION="locale"哪里SECTION是部分和locale您的自定义语言环境的名称。

例如,如果要使用荷兰的时间格式,但要使用英语,请输入:

LANGUAGE="en_GB:en"
LC_TIME="nl_NL"

注意:如果要对每个语言环境设置使用一个语言环境,请LC_ALL="locale"在其中locale输入自定义语言环境的名称。如果你想使用一个区域的一切,但在语言,你可以写LANG="locale"和(另一线路,当然)LANGUAGE="locale":XX这里XX是你想要的语言的2字母代码。

例如,如果要使用荷兰语区域设置和英语,则可以使用:

LANG="nl_NL"
LANGUAGE="nl_NL:en"

你已经完成了

下次登录时,应使用您的语言环境。您可以通过locale再次运行命令来进行测试。

请评论本指南中的不一致或错误陈述!


您好,您使用的python代码并非在所有情况下都有效。对于希腊字符πμ,它输出<U00CF><U0080><U00CE><U00BC>而不是预期字符<U03C0><U03BC>。这是一个有效的链接
2013年

感谢您的输入!我已将您的评论添加到应有的文本中:)
Severo Raz 2013年

我不得不添加custom UTF-8/usr/share/i18n/SUPPORTED我能运行之前sudo locale-gen。否则它将不在列表中。
威尔伯特

将您的字符串转换方法复制到我的Shell脚本集合中:github.com/budhajeewa/shell-scripts/commit/…。谢谢!
budhajeewa

如果有人在找一个功能来解决此问题,请使用此功能编写一个PHP脚本。github.com/budhajeewa/shell-scripts/commit/…。如果有人可以用Python编写它,请告诉我。我想将其添加到我的收藏中。
budhajeewa

8

不确定要进行哪种自定义,但是可以使用来设置一些语言环境变量~/.locale。例如,要获取英语消息,但要获取德国时间等信息,我会使用

export LC_ALL=""
export LANG="en_GB.utf8"
export LC_CTYPE="de_DE.utf8"
export LC_NUMERIC="de_DE.utf8"
export LC_TIME="de_DE.utf8"
export LC_COLLATE="de_DE.utf8"
export LC_MONETARY="de_DE.utf8"
export LC_MESSAGES="en_GB.utf8"
export LC_PAPER="de_DE.utf8"
export LC_NAME="en_GB.utf8"
export LC_ADDRESS="de_DE.utf8"
export LC_TELEPHONE="de_DE.utf8"
export LC_MEASUREMENT="de_DE.utf8"
export LC_IDENTIFICATION="de_DE.utf8"

也可以生成自定义语言环境。有关日期,请参见本指南


1
不,我想要较低级别的自定义。例如:英文消息,公制单位,修改后的捷克语日期/时间(DD.MM.YYYY HH:mm而不是DMYYYY H.MM),点作为小数点分隔符(在捷克语言环境中有逗号)和€作为货币(捷克语言环境中为Kč货币)。
伊凡

我懂了。以en_USLC_NUMERIC,并de_DELC_MONETARYLC_MEASUREMENT为您提供了其他副作用吗?另请参见用于生成个人语言环境的新链接。
Carsten Thiel

1
链接后面的说明似乎很好地回答了这个问题,也许您可​​以在此处复制最重要的部分,以防万一一天无法访问该链接?
Stefano Palazzo
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.