bug-coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#19856: Bad month translation printed with date command in Greek loca


From: Eric Blake
Subject: bug#19856: Bad month translation printed with date command in Greek locale
Date: Fri, 13 Feb 2015 10:56:34 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.4.0

[adding the Austin Group, as this is a POSIX question]

On 02/13/2015 06:46 AM, Nick & John wrote:
> Hello we are Nick Barkas and Ioannis Barkas from Greece. There is an
> annoying error in the date command for quite some time when using
> Greek locale.

Thanks for the report.

> If date is instructed to print month and day of month, the translation
> is wrong and looks funny...
>  You have to be able to write Greek in order to understand it and
> since the bug exists we assume no one from coreutils developers knows
> Greek.
>  As a result we will explain every month in detail as it will be Greek
> to you.

I don't know if you intended that to be funny, but it makes a rather
nice play on a typical English idiom :)

> Remove "LC_TIME=el_GR.UTF-8" from the commands to get the date
> in English.
> 
> This is what you get with "B Y" (month year), which is correct:
> $ LC_TIME=el_GR.UTF-8 date +"%B %Y" -d "2015-01-01"
> Ιανουάριος 2015

> 
> This is what you get with "d B Y" (month year), which is wrong:
> $ LC_TIME=el_GR.UTF-8 date +"%d %B %Y" -d "2015-01-01"
> 01 Ιανουάριος 2015

> 
> Here is what the date command should print with "d B Y" (month year),
> in el_GR.UTF-8 locale:
> $ LC_TIME=el_GR.UTF-8 date +"%d %B %Y" -d "2015-01-01"
> 01 Ιανουαρίου 2015

> 
> In Greek language things are different and complex compared to
> English. We have accents (τόνους) for most words and words are not
> fixed but can dynamically change depending on context.
> When the month is accompanied by a day of month the accent (Greek
> tonos/τόνος) changes and ...ος becomes ...ου. To fix this, use the
> correct translations for months, if and only if %B
>  and %d are used together. If the month is called with no day (%d)
> using "%B" or if the month is called with "%d %b" or "%b" leave the
> translations as they are.

What should REALLY happen is that libc's strftime(3) (which is what
date(1) uses under the hood - the % modifiers are the same) should
support something like %OB to trigger a locale's alternative
representation, as the %O modifier is already used for other locales
that have different displays.

But right now, POSIX says %OB is undefined behavior (look for the
section on Modified Conversion Specifiers):
http://pubs.opengroup.org/onlinepubs/9699919799/functions/strftime.html

and on glibc, it does nothing:

$ LC_TIME=el_GR.UTF-8 date +"%d %OB %Y" -d "2015-12-01"
01 %OB 2015

I guess what it boils down to is that when defining a locale, the
existing 'era', 'era_d_format', 'era_t_format', and 'era_d_t_format'
affect existing %E uses, and 'alt_digits' affects existing %O uses
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html#tag_07_03_05

and the ideal solution would be adding a new locale file entry for
'alt_months' that would then let %OB provide the locale's alternate
month names.  Then you could write your string as "%d %OB %Y" to get the
grammatically correct output.

> Since there are many computer-science oriented Greek universities and
> so many Greeks around the world, we are amazed that no one fixed it so
> far.
> We must also inform you that this silly bug of yours has been seen in 
> webpages.

Coreutils will automatically pick up any fixes in glibc, you'll need to
get it fixed there first.  It would be nice to get POSIX to standardize
%OB, but that would be easier if you could first get glibc to implement
the solution to show that it makes sense.

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]