"date"가 현지화될 때 잘못된 단어 순서로 날짜를 인쇄하는 이유는 무엇입니까?

"date"가 현지화될 때 잘못된 단어 순서로 날짜를 인쇄하는 이유는 무엇입니까?

저는 쿠분투 14.04.2 LTS를 사용하고 있습니다. 다음 명령을 사용하여 로케일을 설정했습니다.

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

이제 locale모든 항목이 이라고 가정합니다 ru_RU.utf8. 그러나 을 발행하면 date다음과 같은 결과가 나타납니다.

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

영어로 "5월 14일"이라고 말하는 것이 일반적이지만 러시아어로는 "мая 14"라고 말하지 않습니다("5월 14일"이 아니라 "5월 14일"을 의미함). "14 мая" 또는 최악의 경우 "май, 14"여야 합니다.

에 따르면 로케일 info coreutils 'date invocation'의 기본 형식 문자열은 로케일을 통해 얻은 것과 정확히 동일하게 표시됩니다 . 그러나 동일한 정보 페이지에는 형식 문자열이 로케일 범주에 따라 다르다고 나와 있습니다. 그래서 시스템 로케일 데이터베이스에 버그가 있다는 결론을 내렸습니다.C'+%a %b %e %H:%M:%S %Z %Y'ru_RU.utf8LC_TIME

이것은 실제로 버그입니까, 아니면 뭔가 빠졌습니까?

답변1

이는 버그가 아닙니다 date. 의 정의로 인해 발생합니다 LC_TIME. info페이지 에 따르면 :

옮기다날짜형식 매개변수 없이 호출하는 것은 호출하는 것과 동일합니다.
다음에 따라 달라지는 기본 형식이 있습니다.LC_TIME로케일 카테고리.

이제 열면/usr/share/i18n/locales/ru_RU, 아래에는 다음과 같이 정의된 (날짜/시간 형식)이 LC_TIME표시됩니다 .date_fmt

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>"

로 변환됩니다. %a %b %e %H:%M:%S %Z %Y-
%a해당 로케일의 요일 약식 이름(예: Чт)
%b- 해당 로케일의 월 약식 이름(예: май)
%e- 날짜, 공백으로 채워진 날짜 %_d(예: 14) 등
. ..
따라서 파일을 편집하고 두 개의 변환 지정자 %band %e(즉, swap <U0062><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>"

그런 다음 이것을 실행하면 locale-gen올바른 날짜 형식을 얻을 수 있습니다.

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

위 문서의 마지막 개정일(2015년 5월 14일 기준)은 다음과 같습니다.2013-11-14버그를 신고해 주시기 바랍니다.[email protected]

관련 정보