我想在不使用扩展程序的情况下格式化锁定屏幕上的日期。
我已经使用过这个问题的答案设置我的顶栏时钟格式。但是,它不会影响锁屏格式。
答案1
BLUF:这是一种永久且干净的方法,无需使用扩展程序即可改变“锁定屏幕”(又称屏幕屏蔽/解锁对话框)上日期的格式。
首先,可以在这里找到有关 Gnome 本地化/国际化中使用 .po 和 .mo 文件的一些背景信息:
https://wiki.gnome.org/TranslationProject/LocalisationGuide
基本上,在运行时,Gnome 解锁对话框会获取当前时间并应用本地化/国际化字符串格式。它使用字符串键来查找用于给定语言环境的格式字符串,以确定实际显示的内容 - 它不依赖于语言环境文件格式字符串。如果您修改本地化/国际化文件中给定键的返回值,则锁定屏幕/解锁对话框日期显示将反映该更改。本地化/国际化使用两个文件。第一个是翻译人员为每个语言环境填充的人性化 .po 文件,在这里可以找到从查找键到格式字符串的映射。第二个是从 .po 文件生成的 .mo 文件...稍后将详细介绍这一点以及它之间的关系...
以下是 Ubuntu 20.04 中使用的 Gnome 解锁对话框版本的源代码链接:
https://github.com/GNOME/gnome-shell/blob/gnome-3-36/js/ui/unlockDialog.js
如果你检查函数'updateClock' 从第 365 行开始,您将看到正在使用的本地化/国际化查找键。您在下面的引号中看到的不是格式字符串本身,而是查找实际格式字符串的键。N(围绕键执行查找:
_updateClock() {
this._time.text = this._wallClock.clock;
let date = new Date();
/* Translators: This is a time format for a date in
long format */
let dateFormat = Shell.util_translate_time_string(N_('%A %B %-d'));
this._date.text = date.toLocaleFormat(dateFormat);
}
我想要一个自定义格式字符串,用于按顺序显示星期几、月份和日期。javascript 中的字符串键似乎没问题,可以实现我想要的功能,但我需要找到实际的映射才能确定。
let dateFormat = Shell.util_translate_time_string(N_('%A %B %-d'));
因此我需要在本地化/国际化 .po 文件中找到的关键是:
'%A %B %-d'
不幸的是,我找不到我需要的“en”语言环境文件,因此我抓取了 en_GB 文件。
https://github.com/GNOME/gnome-shell/blob/gnome-3-36/po/en_GB.po
然后,我搜索 unlockDialog.js 希望找到映射...最后我在第 2174 行找到了:
#. Translators: This is a time format for a date in
#. long format
#: js/ui/unlockDialog.js:371
msgid "%A %B %-d"
msgstr "%A %-d %B"
这种映射将提供星期几、日期和月份,而不是我想要的星期几、月份、日期。
为了获得所需的日期格式,我将映射更改为:
msgid "%A %B %-d"
msgstr "%A %B %-d"
本地化/国际化 .mo 文件是二进制格式,但很容易从人类可读的纯文本映射 .po 文件生成,该文件将给定的查找键映射到格式字符串。Gnome 解锁对话框使用特定名称为 gnome-shell.mo 的文件进行本地化/国际化。它是不是在我的系统中规定的位置任何区域设置:
/usr/share/locale/XX/LC_MESSAGES
因此,我不需要担心替换它,而是重新创建它。无论如何,您需要首先获取适合您的语言环境的 .po 文件:
https://github.com/GNOME/gnome-shell/tree/gnome-3-36/po
在上述“msgstr”反映出变化之前,锁屏日期将显示为:
Monday 4 Feb
但经过上述更改后(有关格式说明符,请参阅本答案末尾):
Monday Feb 4
接下来,获取此 .po 文件并在命令行中运行以下命令以获取 messages.mo 文件,其中 XX 是您的语言环境。二进制 msgfmt 可以在 20.04 中通过“sudo apt install gettext”安装:
msgfmt -cv XX.po
接下来,将生成的 messages.mo 文件重命名为 gnome-shell.mo 并将其复制到你的特定区域设置的 LC_MESSAGE 目录:
/usr/share/locale/XX/LC_MESSAGES/gnome-shell.mo
然后,为了使更改生效,请重新启动。
最后,这里有一些格式化字符串说明符可以帮助您。我从另一个网站借用了这些,因此不能保证这些全部在 Gnome 中工作:
The % sign indicating a directive may be immediately followed by a padding modifier, e.g. %-d:
0 - zero-padding
_ - space-padding
- - disable padding
%a - abbreviated weekday name.*
%A - full weekday name.*
%b - abbreviated month name.*
%B - full month name.*
%d - zero-padded day of the month as a decimal number [01,31].
%e - space-padded day of the month as a decimal number [ 1,31]; equivalent to %_d.
%f - microseconds as a decimal number [000000, 999999].
%H - hour (24-hour clock) as a decimal number [00,23].
%I - hour (12-hour clock) as a decimal number [01,12].
%j - day of the year as a decimal number [001,366].
%m - month as a decimal number [01,12].
%M - minute as a decimal number [00,59].
%L - milliseconds as a decimal number [000, 999].
%p - either AM or PM.*
%Q - milliseconds since UNIX epoch.
%s - seconds since UNIX epoch.
%S - second as a decimal number [00,61].
%u - Monday-based (ISO 8601) weekday as a decimal number [1,7].
%U - Sunday-based week of the year as a decimal number [00,53].
%V - ISO 8601 week of the year as a decimal number [01, 53].
%w - Sunday-based weekday as a decimal number [0,6].
%W - Monday-based week of the year as a decimal number [00,53].
%x - the locale’s date, such as %-m/%-d/%Y.*
%X - the locale’s time, such as %-I:%M:%S %p.*
%y - year without century as a decimal number [00,99].
%Y - year with century as a decimal number.
%Z - time zone offset, such as -0700, -07:00, -07, or Z.
%% - a literal percent sign (%).