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

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

此答案将演示如何完全自定义区域设置,可选择使用现有区域设置作为基础。 将在本答案中使用的语言环境类型是i18n类型; 每次提到答案正文中的“locale”一词时,都会隐含这种类型的语言环境。

查找指南

您需要自定义区域设置的第一件事是了解区域设置的格式。 此Web区域设置编辑器具有对区域设置中每个字段的全面描述,尽管任何人都无法以正确的方式使用该区域。 这将是使用指南。

需要的工具

使用区域设置所需的唯一工具是

  1. 文本编辑器。 任何人都会这样做,尽管VIM会出类拔萃。
  2. 文本到unicode转换器。 最期待你没有,所以我会给你一个简单的。 阅读下一小节以获得它。

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

文本到unicode转换器(encodestr)

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

将以下代码保存到文件中。 您的系统将此文件标识为python脚本,这是正确的,因为它是一个。 本指南假设您调用了脚本encodestr

 #!/usr/bin/python def encode(string): newstring = str() for ch in string: newstring += "" % ord(ch) return newstring if __name__ == '__main__': import sys print encode(sys.argv[1]) 

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

您现在可以通过在同一目录上运行来测试此脚本: ./encodestr hello 。 您应该获得等于

修改现有区域设置

修改现有的区域设置是最简单的情况,理想情况下,您将选择几乎完全符合您需求的区域设置,在这种情况下,您只需要进行少量修改。 要定制它,您可以使用该指南了解哪些部分是您想要更改的部分,以及如何更改它们。 所有已安装的语言环境都位于/usr/share/i18n/locales ,但该指南几乎包含了所有已创建的语言环境。

但是,当您打开语言环境时,您会注意到的第一件事是您将阅读英语单词和奇怪的代码一样多。 您需要能够创建这些代码 – 这是encodestr脚本的来源。

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

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

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

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

就在您知道要在要修改的字段上写入的内容时,通过encodestr脚本运行文本以获取其编码的等效项。

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

例如,如果要在t_fmt字段中使用时间格式Time: %T ,请运行./encodestr "Time: %T" ; 这将返回 t_fmt 你所在地区的t_fmt (当然在它的各个部分)。

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

从头开始创建语言环境

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

 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 -v其中custom是您的语言环境的名称。

  2. 将您的语言环境复制到/usr/share/i18n/locales/目录。 您肯定需要sudo权限才能执行此操作,您可以使用命令sudo cp locale /usr/share/i18n/locales/来执行此操作,其中locale是您的自定义语言环境的文件名。

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

  4. 运行magic命令。 我实际上不知道这个命令到底是什么,但它至关重要。 运行sudo locale-gen 。 最有可能的是,它会根据需要生成对可用语言环境的引用。

  5. 告诉您的系统使用区域设置。 如果希望以系统范围的方式使用语言环境,请修改/etc/environment文件。 如果没有,您可以修改~/.profile文件,或者在启动时获取的任何其他文件。 如果你不知道后者的意思不用担心,只需使用~/.profile文件。 要知道你必须在其中写入什么,首先运行locale命令。 它应该发布一个包含LANGUAGELC_MESSAGESLC_CTYPE等项目的列表。 对于您想要的每个部分(由上一个命令列出),您将在单独的行上编写此SECTION="locale" ,其中SECTION是部分,并且locale是自定义区域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命令来测试它。

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

不确定您想要什么样的自定义,但您可以使用~/.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" 

也可以生成自定义区域设置。 有关日期,请参阅本指南 。