Por que 'date' imprime a data com a ordem errada das palavras quando localizada?

2

Estou usando o Kubuntu 14.04.2 LTS. Eu defino o ambiente de localidade com o seguinte comando:

export LANG=ru_RU.utf8 LANGUAGE=ru_RU.utf8 LC_ALL=ru_RU.utf8

para que locale diga que todas as entradas são ru_RU.utf8 . Mas quando eu emito o date , recebo o seguinte:

Чт. мая 14 12:55:36 MSK 2015

Embora seja normal dizer "14 de maio" em inglês, nunca dizemos "14" em russo (significaria "de 14 de maio" em vez de "14 de maio"). Deveria ser "14 meses" ou, na pior das hipóteses ", 14".

De acordo com info coreutils 'date invocation' , em C locale, a string de formato padrão é '+%a %b %e %H:%M:%S %Z %Y' e aparece exatamente o que obtenho com ru_RU.utf8 locale. Mas essa mesma página de informações diz que a string de formato depende da categoria LC_TIME locale. Então, concluo que há um bug em algum lugar no banco de dados do sistema local.

É realmente um bug ou algo está faltando?

    
por Ruslan 14.05.2015 / 12:10

1 resposta

6

Este não é um bug em date ; é causado pelas definições em LC_TIME . De acordo com a página info :

Invoking date with no format argument is equivalent to invoking it
with a default format that depends on the LC_TIME locale category.

Agora, se você abrir /usr/share/i18n/locales/ru_RU , em LC_TIME você verá que date_fmt (o formato de data / hora) é definido como:

date_fmt       "<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/
<U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
<U0025><U005A><U0020><U0025><U0059>"

que se traduz em %a %b %e %H:%M:%S %Z %Y , ou seja:% %a - nome abreviado do dia da semana do local (por exemplo, Чт )
%b - nome abreviado do mês do local (por ex. май )
%e - dia do mês, espaço acolchoado; mesmo que %_d (por exemplo, 14 )
etc ...
Portanto, se você editar o arquivo e trocar os dois especificadores de conversão %b e %e (ou seja, trocar <U0062> e <U0065> ):

date_fmt       "<U0025><U0061><U0020><U0025><U0065><U0020><U0025><U0062>/
<U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
<U0025><U005A><U0020><U0025><U0059>"

e, em seguida, executar locale-gen , você obterá o formato de data correto:

LC_TIME=ru_RU.utf8 date
Чт 14 май 13:27:14 MSK 2015

A data da última revisão (de 2015-05-14) do arquivo acima mencionado parece ser 2013-11-14 então sinta-se à vontade para relatar um erro: [email protected]

    
por 14.05.2015 / 13:37

Tags