如何默认生成完全支持西班牙语的 Yocto 图像

Howto generate a Yocto image with spanish full-support by default

我在尝试设置完全支持的 Yocto 映像时遇到了问题 英语和西班牙语(默认为西班牙语)。我正在构建的映像基于 rocko 分支,我的发行版基于 "systemd"。

我当前的 distro.conf yocto 设置是这样的:

GLIBC_GENERATE_LOCALES ?= "es_ES.UTF-8 en_US.UTF-8"
IMAGE_LINGUAS ?= "es-es en-us"

通过此设置,我得到了具有以下语言环境设置的图像:

# locale
LANG=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

# localectl
System Locale: n/a
   VC Keymap: ES
  X11 Layout: es
   X11 Model: pc105
 X11 Options: terminate:ctrl_alt_bksp

# locale -a
C
POSIX
en_US
es_ES

# locale -m
ES

# locale charmap
ANSI_X3.4-1968

# rpm -qa | grep charmap
glibc-charmap-es-2.26-r0.corei7_64

使用该设置构建的映像无法按预期工作。当我按下 Ñ (enye) 键在 ssh 控制台上,我得到这个:

root at hostname:~#
(arg: 1)

如您所见,“ñ”字符未打印在控制台上。

经过大量测试,我已经能够通过创建这两个文件来解决此问题:

$ cat /etc/locale.conf
LANG=es_ES.UTF-8
LANGUAGE=es:en

$ cat /etc/profile.d/locale.sh
LC_ALL=es_ES
LANG=es_ES
LANGUAGE=es_ES

重启后,我得到这个 localectl 设置:

# localectl
System Locale: LANG=es_ES.UTF-8
              LANGUAGE=es:en
   VC Keymap: ES
  X11 Layout: es
   X11 Model: pc105
 X11 Options: terminate:ctrl_alt_bksp

“Ñ”键按预期工作:

root at hostname:~# ñññññ

我不知道如何在不对生成的图像进行手动更改的情况下解决此问题。一旦将 .wic 图像刻录到我的 USB 记忆棒中,我希望生成的图像支持西班牙语。

这可能吗?应该如何管理?

提前感谢您的宝贵时间! :-)

创建一个 recipe(.bb) 文件并重新编译。

转到您的 meta-layer/recipes-core/

vi hello.bb

DESCRIPTION= "added language support"
FILESEXTRAPATHS_prepend := "${THISDIR}:"
LICENSED="CLOSED"
SRC_URI = "file://locale.conf \
           file://locale.sh"
S="${WORKDIR}"
do_install(){
 install -d ${D}${sysconfdir}/profile.d/
 install -m 0777 ${S}/locale.conf ${D}${sysconfdir}
 install -m 0777 ${S}/locale.sh ${D}${syscondif}/profile.d/
}
FILES_${PN} ="${sysconfdir}/*"

这就是我解决问题的方法。首先,创建这个文件:

$ cat locale.conf
LANG=es_ES.UTF-8
LANGUAGE=es

$ cat locale.sh
LANG=es_ES

$ cat vconsole.conf
KEYMAP=es

之后,创建这个食谱:

DESCRIPTION = "Add es language support"
FILESEXTRAPATHS_prepend := "${THISDIR}:"
LICENSE = "CLOSED"
SRC_URI = " \
    file://locale.conf \
    file://vconsole.conf \
    file://locale.sh"
S = "${WORKDIR}"
do_install(){
    install -d ${D}${sysconfdir}/profile.d/
    install -m 0644 ${S}/locale.conf ${D}${sysconfdir}
    install -m 0644 ${S}/vconsole.conf ${D}${sysconfdir}
    install -m 0755 ${S}/locale.sh ${D}${sysconfdir}/profile.d/
}
FILES_${PN} ="${sysconfdir}/*"

希望这个回答对以后的其他人有所帮助! :-)