Abril
- Responsable: Robert Buj
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 |
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