Skip to content

Commit 0fb8497

Browse files
committed
Merge branch 'features/i18n-spatial-y-add-dataset' into development
Reactiva los overrides de i18n que pybabel había marcado obsoletos: el modal de búsqueda espacial de ckanext-spatial vuelve a verse en español y el botón de /dataset dice "Agregar dataset" en vez de "Agregar conjunto de datos".
2 parents bdb96b4 + bc2df61 commit 0fb8497

8 files changed

Lines changed: 217 additions & 180 deletions

File tree

babel.cfg

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
11
[python: **.py]
22
[ckan: **.html]
3+
# Los patrones se evalúan relativos al input dir (gobar_theme/...), no a la
4+
# raíz del repo. Solo assets/js: public/vendor/ tiene el Poncho minificado.
5+
[javascript: **/assets/js/*.js]
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/**
2+
* Anclas de extracción de i18n para strings que emite el JavaScript de OTRAS
3+
* extensiones. Este archivo no se ejecuta ni entra en ningún bundle de
4+
* webassets: existe solo para `pybabel extract`.
5+
*
6+
* CKAN arma el catálogo de traducciones de JS (ckan.lib.i18n.
7+
* build_js_translations) tomando de cada .pot únicamente las entradas cuya
8+
* ocurrencia termina en ".js". Como estos msgid viven en el código de
9+
* ckanext-spatial y no en el nuestro, sin este archivo nunca llegarían al
10+
* .pot y su traducción no se serviría al navegador: por eso el modal del
11+
* mapa se veía en inglés.
12+
*
13+
* En _build_js_translation los catálogos de los plugins se procesan después
14+
* del de core, así que lo que se ponga acá pisa la traducción de core.
15+
*/
16+
(function () {
17+
// ckanext-spatial — ckanext/spatial/assets/js/spatial_query.js
18+
_('Please draw query extent in the map:');
19+
_('Apply');
20+
_('Cancel');
21+
_('Draw an extent');
22+
})();

ckanext/gobar_theme/i18n/README_i18n.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,35 @@ los mismos `msgid`. Sirve para sobrescribir, por ejemplo, "Datasets"
3232

3333
> Sin `.mo` compilado, el catálogo no se activa (no rompe nada): se sigue
3434
> mostrando el texto de CKAN core.
35+
36+
## Strings que emite el JavaScript de otras extensiones
37+
38+
CKAN sirve las traducciones de JS por `/api/i18n/<lang>`, y arma ese catálogo
39+
en `ckan.lib.i18n.build_js_translations()` con una regla propia: de cada
40+
`.pot` toma **solo las entradas cuya ocurrencia (`#:`) termina en `.js`**, y
41+
descarta las obsoletas. Los catálogos de los plugins se procesan después del
42+
de core, así que lo nuestro pisa lo de core.
43+
44+
Consecuencia: para sobrescribir un string que emite el JS de otra extensión
45+
(por ejemplo el modal de búsqueda espacial de `ckanext-spatial`) **no alcanza
46+
con ponerlo en la sección de overrides manuales del `.po`** — esas entradas
47+
no tienen `#:` y nunca llegarían al catálogo JS.
48+
49+
Por eso existe `ckanext/gobar_theme/assets/js/i18n-overrides.js`: un archivo
50+
que no se ejecuta ni entra en ningún bundle, y cuya única función es darle a
51+
esos msgid un call-site `.js` real para que `pybabel extract` los deje en el
52+
`.pot`. Como efecto secundario resuelve el HAZARD documentado en los `.po`:
53+
al tener call-site, `pybabel update` ya no los re-obsoleta.
54+
55+
Para agregar uno nuevo:
56+
57+
1. Sumar `_('El string exacto en inglés');` en `assets/js/i18n-overrides.js`.
58+
2. `python setup.py extract_messages` para regenerar el `.pot`.
59+
3. Agregar el `msgid`/`msgstr` en cada `<locale>/LC_MESSAGES/*.po`, con el
60+
comentario `#:` que quedó en el `.pot`.
61+
4. Compilar (paso 2 de arriba) y reiniciar.
62+
63+
> `babel.cfg` tiene el mapping `[javascript: **/assets/js/*.js]`. Los patrones
64+
> se evalúan **relativos al input dir** (`gobar_theme/...`), no a la raíz del
65+
> repo — un patrón que arranque con `ckanext/` no matchea nada. Está acotado a
66+
> `assets/js` a propósito: `public/vendor/` tiene el Poncho minificado.

0 commit comments

Comments
 (0)