Abril

Compartiu

Explicació del problema

Els canvis introduïts en la biblioteca glibc en la versió 2.28 produeixen un efecte no desitjat que fa que el format de data llarg pugui aparèixer amb la preposició «de» repetida. Per exemple «1 de de gener de 2018». En contrapartida, els canvis permeten escriure aquesta preposició de forma correcta en tots els casos, també en els mesos d’abril, agost i octubre, on la preposició s’apostrofa, que fins ara no era possible.

Aquest problema és bàsicament estètic, però obliga a corregir les traduccions de les aplicacions que usen la glibc. Això inclou els programes que escriguin els mesos amb lletres fets en C, C++, PHP, Perl o Python, les distribucions de GNU/Linux, FreeBSD o els sistemes operatius d’Apple macOS i iOS, Android i moltes pàgines web.

Usuaris

Els propers mesos és possible que us trobeu cadenes del tipus «1 abril de 2018», sense preposició. Això és un efecte transitori necessari per a evitar la repetició de la preposició en futures versions del programa en qüestió. No cal que ens n’informeu. Tingueu paciència, és molt possible que en la següent versió del programa o sistema operatiu ja tingueu les dates en el format «1 d’abril de 2018».

Si, per el contrari, trobeu algun programa amb la data en el format «1 de d’abril de 2018», significa que cal corregir la traducció d’aquest programa. Si es tracta de programari lliure i no el tenim al llista de seguiment, us demanem que ens el comuniqueu, així en tindrem coneixement i podrem corregir el problema. Si es programari propietari hauríeu de contactar amb el suport que tingueu contractat o amb el fabricant, i informar-lo del problema.

El altre cas possible és que trobeu les dates en el format «1 de abril de 2018». Aquesta és la situació vigent fins fa poc i desapareixerà progressivament tan bon punt surtin actualitzacions del sistema operatiu o aplicacions emprats.

Finalment, també és possible que trobeu casos com “d’abril” o “d’abril 2018” en situacions on us esperaríeu trobar el mes sense preposició. Significa que cal corregir la traducció d’aquest programa. Si es tracta de programari lliure i no el tenim al llista de seguiment, us demanem que ens el comuniqueu, així en tindrem coneixement i podrem corregir el problema. Si es programari propietari hauríeu de contactar amb el suport que tingueu contractat o amb el fabricant, i informar-lo del problema.

Programadors i traductors

Si sou programadors o traduïu programari que usa la biblioteca glibc, heu de tenir compte que el significat de la variables %B i %b ha canviat des de la versió 2.27 d’aquesta biblioteca. Cal que adapteu la traducció que faci ús d’aquests identificadors. En els casos on necessiteu mostrar els noms de mesos sense preposició, cal que useu %OB i %Ob, respectivament.

En les bases de dades, la recomanació és usar valors numèrics per a representar dates, per tant no hauríeu de tenir cap problema. En el cas que useu el format data llarg de text en alguna base de dades, heu de tenir en compte que el format ha canviat o canviarà i haureu d’adaptar les consultes i informes que usin aquesta base de dades.

Taula de seguiment

glibc (libc6) 2.27+ 2.27 (després del llançament)
2.28
coreutils 8.29+ Ivan Vilata i Balaguer
Debian 10 (Buster) Sid: glibc-2.27-3
Ubuntu 18.04 LTS glibc_2.27-0ubuntu3
Fedora 28 Fedora 28: glibc-2.27-8.fc28 (#BZ 1546495)
Rawhide: glibc-2.27.9000-11.fc29
Mageia cauldron glibc-2.28-5.mga7 (22/8/18)
openSUSE Tumbleweed: libc6 = 2.27 sense el pedaç per al català (última comprovació: 19 de maig de 2018)
linux-pam Treballant-hi [1]
glib2 2.56.0 Add month names with day to Catalan translation
GNOME 3.28 REQ: glib2 >= 2.56; libc6 >= 2.27+
MATE 1.20+ caja, engrampa, eom, mate-panel, mate-system-monitor, mate-utils
REQ: glib2 >= 2.56; libc6 >= 2.27+
XFCE Treballant-hi xfce4-panel-4.13.3: [1],[2], orage: [1],[2]
REQ: glib2 >= 2.56; libc6 >= 2.27+
Cinnamon 3.8.1 Codi de seguiment: 7378
cinnamon, nemo
REQ: glib2 >= 2.56; libc6 >= 2.27+
JavaScript compatibilitat Per mostrar les dates, es recomana utilitzar la funció:
Date.prototype.toLocaleDateString()
i no utilitzar la funció:
Date.prototype.toLocaleFormat()
PHP 5.3.0+ Per mostrar les dates, es recomana utilitzar la funció:
IntlDateFormatter::format
Mozilla Firefox / Thunderbird  No estan afectats.

Altres implementacions

FreeBSD Informat Codi de seguiment: 225864
OS X Informat Codi de seguiment: 37535109
LibreOffice No usa glibc Estem treballant en millorar el format de data llarg
Qt Core (QDate) QString QDate::toString(Qt::DateFormat format = Qt::TextDate) const
Correcte
QString QDate::toString(const QString &format) const
No admet L, LL, LLL o LLLL al format. Per defecte, MMM=”abr.” i MMMM=”d’abril”.
KDE (Qt Core) Errors dolphin
“‘Yesterday’ (MMMM, yyyy)”->”‘ahir’ (MMM yyyy)”;
“‘Earlier on’ MMMM, yyyy”->”‘abans’ MMMM ‘de’ yyyy”;
“‘One Week Ago’ (MMMM, yyyy)”->”‘fa una setmana’ (MMM yyyy)”;
“‘Two Weeks Ago’ (MMMM, yyyy)”->”‘fa dues setmanes’ (MMM yyyy)”;
“‘Three Weeks Ago’ (MMMM, yyyy)”->”‘fa tres setmanes’ (MMM yyyy)”
LXQt (Qt Core) 0.12+ plugin-clock, plugin-worldclock: La documentació del format personalitzat (utilitza QDate::toString(const QString))
MMM=”gen.” i MMMM=”de gener”. [1]
GWT Correcte codi font

Notació ICU: format de les dates

Codi Exemple
MMM d’abr.
MMMM d’abril
LLL abr.
LLLL abril
EEEE, d MMMM ‘de’ YYYY diumenge, 1 d’abril de 2018
d MMMM ‘de’ YYYY 1 d’abril de 2018
LLLL ‘de’ YYYY abril de 2018
d LLL YYYY 1 abr. 2018
d/M/yy 1/4/18

més informació…

Quin és el millor format?

El següent exemple ajuda als traductors a decidir quina és la millor cadena per mostrar la data mitjançant la biblioteca Java ICU4J.

package org.softcatala.icu_test;

import com.ibm.icu.text.DateTimePatternGenerator;
import com.ibm.icu.text.SimpleDateFormat;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Locale;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Main {

    public static void main(String[] args) {
        Locale aLocale
                = new Locale.Builder().setLanguage("ca").setRegion("ES").build();

        DateFormat df
                = DateFormat.getDateInstance(DateFormat.SHORT, aLocale);

        DateTimePatternGenerator generator
                = DateTimePatternGenerator.getInstance(aLocale);

        final String pattern = generator.getBestPattern("dMMM");
        SimpleDateFormat formatter = new SimpleDateFormat(pattern, aLocale);

        String formatted;
        try {
            formatted = formatter.format(df.parse("1/04/2018"));
            System.out.println("Pattern=[" + pattern + "], Date=[" + formatted + "]");
        } catch (ParseException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
Format Sortida: patró + data
yyyyMMMMd Pattern=[d MMMM ‘de’ yyyy], Date=[1 d’abril de 2018]
dMMM Pattern=[d MMM], Date=[1 d’abr.]
MMMM Pattern=[LLLL], Date=[abril]

Proves

PHP

$ echo "<?php setlocale(LC_TIME, \"ca_ES\"); echo strftime(\"%-d %B de %Y\\n\", strtotime(\"4/1/2018\"));" | php
1 d'abril de 2018

$ echo "<?php setlocale(LC_TIME, \"ca_ES\"); echo strftime(\"%OB de %Y\\n\", strtotime(\"4/1/2018\"));" | php
abril de 2018

Python

$ python3 -c "from time import strptime, strftime; import locale; locale.setlocale(locale.LC_TIME, \"ca_ES.utf8\"); print(strftime(\"%-d %B de %Y\", strptime(\"2018-04-1\",\"%Y-%m-%d\")));"
1 d'abril de 2018

$ python3 -c "from time import strptime, strftime; import locale; locale.setlocale(locale.LC_TIME, \"ca_ES.utf8\"); print(strftime(\"%OB de %Y\", strptime(\"2018-04-1\",\"%Y-%m-%d\")));"
abril de 2018

Bash

$ date -d "2018/04/01" +"%-d %B de %Y"
1 d’abril de 2018

$ date -d "2018/04/01" +"%OB de %Y"
abril de 2018