Prática recomendada para personalizar o formato de data / hora em todo o sistema?

16

Gostaria de personalizar exclusivamente o formato de data e hora do meu sistema, mantendo o restante do local como está. Eu sei que a variável de ambiente LC_TIME tornará possível personalizar esse aspecto apenas apontando para uma localidade alternativa. Como estou usando o Linux (Ubuntu 14.04 para ser preciso), quero usar o formato entendido por localedef como entrada.

Li os três documentos a seguir:

O último foi particularmente útil.

Agora, eu apenas quero personalizar a seção para LC_TIME e gostaria de herdar outra coisa.

Então eu copiei en_US para um arquivo chamado isodate em /usr/share/i18n/locales e ajustei os valores que me interessam. Após peneirar a documentação, decidi também substituir todos os outros conteúdos da seção por um copy -keyword.

Pergunta: Não está claro para mim qual método deve ser a melhor prática. Alguém sabe disso (ou até outra alternativa que as minhas)?

Por exemplo, como eu me preocupo com apenas alguns valores ( d_t_fmt , d_fmt , t_fmt , t_fmt_ampm , am_pm , date_fmt ) seria bom herdar all de en_US para LC_TIME e, em seguida, basta substituir esses valores pelo meu formato semelhante ao ISO (ISO 8601). No entanto, a documentação sobre copy states (ênfase minha):

copy

Specify the name of an existing locale which shall be used as the definition of this category. If this keyword is specified, no other keyword shall be specified.

Isso significa que não posso simplesmente adicionar copy e adicionar mais palavras-chave.

Além disso, pode ser legítimo definir apenas a seção LC_TIME ou a localedef se recusará a compilá-la?

TL; DR

Qual é a melhor prática para personalizar minhas configurações de formato de data e hora, mantendo o princípio DRY, ou seja, sem repetir coisas desnecessariamente?

O que eu criei até agora:

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
    
por 0xC0000022L 18.05.2015 / 00:49

1 resposta

1

Eu criei uma localidade muito semelhante recentemente e como Pierre-Alain sugeriu que eu usei en_DK.UTF-8 como meu modelo. Eu não acho que existam práticas recomendadas estritas, como pode ser visto, observando as diferenças entre as localidades padrão que são distribuídas com a maioria das distribuições Linux.

Você pode ler sobre como resolvi meu problema no meu web site e veja o resultado final em gitlab .

    
por 23.10.2018 / 14:07