在系统范围内自定义日期/时间格式的最佳实践?

在系统范围内自定义日期/时间格式的最佳实践?

长话短说

自定义日期和时间格式设置的最佳实践是什么,同时坚持 DRY 原则,即不重复不必要的内容?


我想要定制仅日期和时间格式对于我的系统,同时保持语言环境的其余部分不变。我知道环境变量LC_TIME将使得仅通过指向备用区域设置就可以自定义该方面。由于我使用的是 Linux(准确地说是 Ubuntu 14.04),因此我想使用 理解的格式作为localedef输入。

我已阅读以下三篇文档:

最后一个特别有帮助。

现在我仅有的想要自定义该部分LC_TIME并想继承其他一切。

所以我复制到一个名为in 的en_US文件并调整我关心的值。在筛选文档后,我决定还用- 关键字替换所有其他部分内容。isodate/usr/share/i18n/localescopy

问题:我不清楚哪种方法应该是最佳实践。有谁知道这一点(或者甚至是我给出的替代方案)?

例如,由于我只关心几个值(d_t_fmt, d_fmt, t_fmt, t_fmt_ampm, am_pm, date_fmt),所以很高兴继承全部en_USLC_TIME,然后仅使用我的类似 ISO 的格式 (ISO 8601) 覆盖这些值。但是,有关状态的文档copy(重点是我的):

复制

指定现有语言环境的名称,该语言环境将用作该类别的定义。如果指定了该关键字,不得指定其他关键字。

这意味着我不能简单地添加一个copy然后添加更多关键字。

另外,仅定义该LC_TIME部分可能是合法的,还是会localedef彻底拒绝编译该部分?


到目前为止我想到了什么:

escape_char /
comment_char %

LC_IDENTIFICATION
copy "en_US"
END LC_IDENTIFICATION

LC_CTYPE
copy "en_US"
END LC_CTYPE

LC_COLLATE
copy "en_US"
END LC_COLLATE

LC_MONETARY
copy "en_US"
END LC_MONETARY

LC_NUMERIC
copy "en_US"
END LC_NUMERIC

LC_TIME
abday   "<U0053><U0075><U006E>";"<U004D><U006F><U006E>";/
    "<U0054><U0075><U0065>";"<U0057><U0065><U0064>";/
    "<U0054><U0068><U0075>";"<U0046><U0072><U0069>";/
    "<U0053><U0061><U0074>"
day "<U0053><U0075><U006E><U0064><U0061><U0079>";/
    "<U004D><U006F><U006E><U0064><U0061><U0079>";/
    "<U0054><U0075><U0065><U0073><U0064><U0061><U0079>";/
    "<U0057><U0065><U0064><U006E><U0065><U0073><U0064><U0061><U0079>";/
    "<U0054><U0068><U0075><U0072><U0073><U0064><U0061><U0079>";/
    "<U0046><U0072><U0069><U0064><U0061><U0079>";/
    "<U0053><U0061><U0074><U0075><U0072><U0064><U0061><U0079>"

week    7;19971130;7
first_weekday   1
first_workday   2
abmon   "<U004A><U0061><U006E>";"<U0046><U0065><U0062>";/
    "<U004D><U0061><U0072>";"<U0041><U0070><U0072>";/
    "<U004D><U0061><U0079>";"<U004A><U0075><U006E>";/
    "<U004A><U0075><U006C>";"<U0041><U0075><U0067>";/
    "<U0053><U0065><U0070>";"<U004F><U0063><U0074>";/
    "<U004E><U006F><U0076>";"<U0044><U0065><U0063>"
mon "<U004A><U0061><U006E><U0075><U0061><U0072><U0079>";/
    "<U0046><U0065><U0062><U0072><U0075><U0061><U0072><U0079>";/
    "<U004D><U0061><U0072><U0063><U0068>";/
    "<U0041><U0070><U0072><U0069><U006C>";/
    "<U004D><U0061><U0079>";/
    "<U004A><U0075><U006E><U0065>";/
    "<U004A><U0075><U006C><U0079>";/
    "<U0041><U0075><U0067><U0075><U0073><U0074>";/
    "<U0053><U0065><U0070><U0074><U0065><U006D><U0062><U0065><U0072>";/
    "<U004F><U0063><U0074><U006F><U0062><U0065><U0072>";/
    "<U004E><U006F><U0076><U0065><U006D><U0062><U0065><U0072>";/
    "<U0044><U0065><U0063><U0065><U006D><U0062><U0065><U0072>"
% Appropriate date and time representation (%c)
%   "%Y-%m-%d %H:%M:%S"
d_t_fmt "<U0025><U0059><U002D><U0025><U006D><U002D><U0025><U0064><U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053>"
%
% Appropriate date representation (%x)
%   "%Y-%m-%d"
d_fmt   "<U0025><U0059><U002D><U0025><U006D><U002D><U0025><U0064>"
%
% Appropriate time representation (%X)
%   "%H:%M:%S"
t_fmt   "<U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053>"
%
t_fmt_ampm ""
%
am_pm   "";""
%
% Appropriate date representation (date(1))   "%Y-%m-%d %H:%M:%S"
date_fmt    "<U0025><U0059><U002D><U0025><U006D><U002D><U0025><U0064><U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053>"
END LC_TIME

LC_MESSAGES
copy "en_US"
END LC_MESSAGES

LC_PAPER
copy "en_US"
END LC_PAPER

LC_NAME
copy "en_US"
END LC_NAME


LC_ADDRESS
copy "en_US"
END LC_ADDRESS

LC_TELEPHONE
copy "en_US"
END LC_TELEPHONE

LC_MEASUREMENT
copy "en_US"
END LC_MEASUREMENT

答案1

正如一些评论中所指出的,您可以复制其余部分并LC_TIME在自定义区域设置文件中进行自定义,或者LC_TIME/etc/locale.conf.正如locale.conf(5)手册页所建议的,您还可以使用内核命令行选项locale.LC_TIME=来覆盖启动时的设置。

相关内容