查找指南

查找指南

在系统行政语言支持 文本。我只能选择标准区域设置,但我想进行微调。例如,在 Windows 中,我可以手动自定义时间和日期格式、度量单位、小数分隔符、货币等 - 我如何在 Ubuntu 中执行此操作?

答案1

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

查找指南

自定义语言环境需要做的第一件事就是了解该语言环境的格式。此 Web 区域设置编辑器尽管不是每个人都能立即使用,但对区域设置中的每个字段都有全面的描述。这将是使用指南。

所需工具

处理语言环境所需的唯一工具是

  1. 文本编辑器。任何编辑器都可以,不过 VIM 更好。
  2. 文本到 Unicode 转换器。您很可能没有,因此我将为您提供一个简单的转换器。阅读下一小节以获取它。

我建议您创建一个目录并将与您在该区域所做工作相关的所有内容保存到其中。

文本到 Unicode 转换器 (encodestr)

笔记:如果你正在使用非通用字符您可能对我下面写的脚本有问题;您可能需要查看以下链接的替代脚本纳斯

将以下代码保存到文件中。系统会将此文件识别为 Python 脚本,这没问题,因为它确实是 Python 脚本。本指南假设您将该脚本命名为encodestr

#!/usr/bin/env python3

import sys

def main():
    if len(sys.argv) != 2:
        exit(f'Usage: {sys.argv[0]} <string to encode>')
    print(encode(sys.argv[1]))

def encode(s):
    return ''.join(f"<U{ord(c):04X}>" for c in s)

if __name__ == '__main__':
    sys.exit(main())

保存后,授予文件执行权限 - 这将派上用场。您可以使用 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 -v其中custom是您的语言环境的名称。

  2. 将您的语言环境复制到/usr/share/i18n/locales/目录中。您肯定会需要须藤权限来执行此操作,您可以使用命令执行此操作,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您的自定义区域设置的名称。

例如,如果您想使用荷兰的时间格式,但使用英语,请写道:

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

笔记:如果要对每个区域设置使用一个区域设置,请输入LC_ALL="locale"locale定义区域设置的名称。如果要对除语言之外的所有设置使用区域设置,请输入所需语言的 2 个字母代码LANG="locale"(当然,在另一行中)。LANGUAGE="locale":XXXX

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

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

你已经完成了

下次登录时,您的语言环境应该已启用。您可以通过locale再次运行该命令来测试这一点。

请评论本指南中不一致或虚假陈述的地方!

答案2

不确定你想要什么样的定制,但你可以使用设置一些语言环境变量~/.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"

也可以生成自定义语言环境。例如参见本指南日期。

相关内容