The es pair, and a dictionary that was quietly Spain's
Phase 25. Spanish was never built — the groundwork was all [x] (DreamDict data, the prompt language, the L1 rule gating, TTS env-discovery), which is why the plan read as though it had shipped. shippedPairs was the honest answer: the server had been refusing es on purpose. The langpack is neutral Latin American, chosen with the user: tú, ustedes, no vosotros, and the pan-American half of every vocabulary split. A vitest greps for the peninsular twins the way fr is greped for québécismes — including coger, which is not merely regional but obscene through most of Latin America. The dictionary is the story. Debian's hunspell-es symlinks twenty country codes to one file, which reads as pan-Hispanic; RLA publishes twenty-four builds per release, one per country plus a generic es that is the union, and Debian ships peninsular es_ES. The 58,622-form gap is essentially voseo, so the first version of this commit underlined vení and tenés as misspellings and called it a considered gap. The MUST_ACCEPT list was written to catch exactly that and structurally could not: it asserted the pan-Hispanic vocabulary, and every RLA variant carries the full pan-Hispanic vocabulary — only the paradigms are localised. The REP table cited as the second witness is shared by all builds too. Two independent-looking proofs, neither able to distinguish anything, agreeing with each other. The profile now demands what discriminates, each verified against the build it targets: voseo rejects es_ES and Debian, vosotros rejects es_MX, and arepa/chévere/bacán reject es_AR, which has both paradigms and would otherwise pass. 717,640 forms, 1.74 MB gzipped, 762 ms / 97 MB in a real nspell. fr and pt-PT rebuild byte-identical from their own upstream debs, so the shared script still means what it meant. Shipping the union is fr's call arrived at from the other side: coût and cout are both correct French, tienes and tenés are both correct Spanish. The dictionary holds every variety because underlining is all it can do; the copy picks a register because speaking requires one. Reviewed by four models at the usual >=2-of-4 threshold, 5 of 27 findings applied — one catching the bedtime proverb as fr's Qui dort dîne calqued into Spanish, gloss and all, which is the rule the fr header states. One below-threshold finding (a missing ¡, seen by 1 of 4 because an absent opening mark has no closing ! to look wrong against) was applied and turned into an assertion instead: the suite now rejects any native line that closes ? or ! without opening one. piper-es on es_MX-ald-medium, not the es_ES-davefx-medium the plan named — six of Piper's nine Spanish voices are peninsular, so the obvious pick was the pt-PT trap through a different door. go build/vet/test, tsc, vite, vitest 251/251. Not deployed, not seen in a browser, not read by a native speaker, and no es account exists.
This commit is contained in:
@@ -89,6 +89,45 @@ through the packaging rather than through the model. The authentic dictionary is
|
||||
the Projecto Natura one (Universidade do Minho) that LibreOffice ships and Debian
|
||||
packages as `hunspell-pt-pt`; its aff declares `LANG pt_PT`.
|
||||
|
||||
**es: the wrong country again, hidden one layer further down.** Spanish looked
|
||||
like it would repeat the pt trap — `hunspell-es` installs twenty country codes,
|
||||
`es_AR` through `es_VE` — and then looked like it did not, because every one of
|
||||
them is a symlink to a single `es_ES.aff`/`es_ES.dic`. Both readings were wrong.
|
||||
Debian collapses the twenty because it ships **one** of upstream's builds, and
|
||||
the one it ships is the **peninsular** `es_ES`. RLA (Santiago Bosio's project,
|
||||
`sbosio/rla-es`) publishes twenty-four dictionaries per release: one per country,
|
||||
plus a **generic `es`** that is the union of all of them. Debian packages neither
|
||||
the generic one nor a choice — it packages Spain, under a name that reads like
|
||||
"Spanish".
|
||||
|
||||
Measured against the v2.9 release: Debian's file is 659,085 expanded forms and
|
||||
upstream `es_ES` is 659,018; the generic `es` is **717,640**. The 58,622-form
|
||||
difference is almost entirely **voseo** — `vení`, `tenés`, `querés`, `sabés`,
|
||||
`andá` — the present tense of most of Latin America, which Debian's package
|
||||
rejects as misspellings. Petal ships the **generic** build.
|
||||
|
||||
**Vocabulary cannot detect this and morphology can.** The first version of the es
|
||||
profile asserted the pan-Hispanic lexicon — *computadora* and *ordenador*, *papa*
|
||||
and *patata* — and passed happily on the peninsular file, because **every** RLA
|
||||
variant carries the full pan-Hispanic vocabulary; only the verb paradigms are
|
||||
localised. The `REP` table is no help either: its `ll`↔`y` and `ás`↔`az` entries
|
||||
look like evidence of yeísmo and seseo, but they are shared by all twenty-four
|
||||
builds. What separates them is exactly two things, and the profile now demands
|
||||
both at once: **voseo** (absent from `es_ES`) and **vosotros** (largely absent
|
||||
from `es_MX`). Only the generic build has both, so only the generic build passes.
|
||||
|
||||
This is the same decision fr made between `-classical` and `-revised`, arriving
|
||||
by a different road. The only thing this dictionary can do is underline
|
||||
something, and *tienes* and *tenés* are both correct Spanish taught in different
|
||||
countries — so Petal takes the build that accepts every variety rather than one
|
||||
that makes a writer wrong for where she is from. Nothing is generated to get
|
||||
there: the forms come from a real upstream package, which is what lets the
|
||||
MUST_ACCEPT list prove which package it was.
|
||||
|
||||
Licensing note: RLA is tri-licensed GPL-3+ / LGPL-3+ / MPL-1.1+; Petal
|
||||
redistributes under the MPL. The upstream README and LICENSE are vendored beside
|
||||
the output.
|
||||
|
||||
**fr: the wrong side of an argument the French have not settled.** The regional
|
||||
question turns out to be a non-question — Debian's `fr_FR`, `fr_CA`, `fr_BE`,
|
||||
`fr_CH`, `fr_LU` and `fr_MC` are all symlinks to one `fr.dic`, so unlike pt there
|
||||
@@ -114,6 +153,14 @@ Usage
|
||||
src/usr/share/hunspell/fr.aff \\
|
||||
src/usr/share/hunspell/fr.dic \\
|
||||
web/public/dictionaries/fr
|
||||
|
||||
Spanish does not come from Debian — see below; `hunspell-es` is the peninsular
|
||||
build. Take the generic dictionary from an upstream release instead:
|
||||
|
||||
curl -LO https://github.com/sbosio/rla-es/releases/download/v2.9/es.oxt
|
||||
unzip -d src es.oxt # an .oxt is a zip
|
||||
python3 scripts/build_hunspell_dictionary.py es \\
|
||||
src/es.aff src/es.dic web/public/dictionaries/es
|
||||
"""
|
||||
import gzip
|
||||
import os
|
||||
@@ -404,6 +451,52 @@ PROFILES = {
|
||||
"reject": ("jardinn", "écrivaitz", "xyzzyque"),
|
||||
"wrong": "this does not look like the comprehensive French dictionary",
|
||||
},
|
||||
# The generic RLA build, and the accept list is written to reject the four
|
||||
# neighbouring builds rather than to describe this one.
|
||||
#
|
||||
# The first version of this profile demanded *computadora* and *ordenador*,
|
||||
# *papa* and *patata*, and passed — on the peninsular file, because **every**
|
||||
# RLA variant carries the whole pan-Hispanic vocabulary. Vocabulary does not
|
||||
# discriminate here at all; only morphology does, and it discriminates
|
||||
# completely:
|
||||
#
|
||||
# * **voseo** (`vení`, `tenés`, `querés`) is in `es` and `es_AR` and not in
|
||||
# `es_ES` or Debian's package. Demanding it rejects the peninsular build.
|
||||
# * **vosotros** (`tenéis`, `escribid`) is in `es`, `es_AR` and `es_ES`, and
|
||||
# largely absent from `es_MX`. Demanding it rejects the Mexican build.
|
||||
#
|
||||
# Requiring both at once leaves exactly one package standing: the generic
|
||||
# `es`, which is the only one that accepts every variety of Spanish. That is
|
||||
# the same reason fr ships `-comprehensive` — the only thing this dictionary
|
||||
# can do is underline something, and *tienes* and *tenés* are both correct
|
||||
# Spanish taught in different countries.
|
||||
#
|
||||
# The rest are shape checks: `escribiésemos` is the -se imperfect subjunctive,
|
||||
# `dámelo` proves the enclitic pronoun rules ran, and `jardín`/`niño` prove
|
||||
# FLAG UTF-8 was read as characters rather than bytes.
|
||||
"es": {
|
||||
"accept": (
|
||||
# Rejects es_ES and Debian's hunspell-es.
|
||||
"vení", "tenés", "querés", "sabés", "andá",
|
||||
# Rejects es_MX.
|
||||
"tenéis", "escribid",
|
||||
# Rejects es_AR, which has both voseo and vosotros and would
|
||||
# otherwise pass. Caribbean and Andean everyday words: the generic
|
||||
# build is the union of all twenty-four, so it is the only one that
|
||||
# holds another region's vocabulary as well as its own.
|
||||
"arepa", "chévere", "bacán",
|
||||
# Pan-Hispanic vocabulary. These pass on every RLA build, so they
|
||||
# prove nothing on their own — kept because a source that stopped
|
||||
# being RLA at all would fail them.
|
||||
"computadora", "ordenador", "papa", "patata", "jugo", "zumo",
|
||||
# Morphology and encoding.
|
||||
"escribiéramos", "escribiésemos", "escríbeme", "dámelo",
|
||||
"jardín", "niño", "corazón",
|
||||
),
|
||||
"reject": ("jardinn", "escribiz", "xyzzyque", "haiga"),
|
||||
"wrong": "this is not the generic RLA build (a per-country one accepts "
|
||||
"only some of these)",
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user