Skip to content

The glossary keeps list, type and Boolean in English but says nothing about object or module #58

Closed

Description

@tamnd

Found while wiring the L02 exemption in #57.

L02 reported 144 entries whose translation is the English verbatim. #49 triaged them into two piles, and the exemption moved 54 rather than the 38 that triage predicted. The extra 16 are type (12) and Boolean (4), which the glossary already holds as keep_en and which #49 had counted as real findings.

The glossary wins, because it is the written decision and the check is only reading it. But the rows are not consistent with each other:

term in the glossary L02 today
list kept exempt
type kept exempt
Boolean kept exempt
object absent 36 findings
module absent 41 findings

All five are the same thing in the corpus: a Sphinx index category, generated from .. index:: object: bytearray and the like, sitting one entry away from the identifier it categorises. Here is one such cluster from c-api/intro.po:

msgid "module"
msgstr "module"

msgid "builtins"
msgstr "builtins"

msgid "sys"
msgstr "sys"

builtins and sys name modules and stay in English. module is the English word for the category and wants translating. object and type are the same pair one level up, and the glossary currently keeps one and has no opinion about the other.

So somebody has to decide, per word, whether the Vietnamese documentation says kiểu or type, and đối tượng or object. That is terminology work and not a code change. What the code can do is stop the two answers coexisting, which is what G03 now does for the kept side.

There is a second, smaller thing in the same measurement. Lists is still reported 3 times while list is kept, because the whole-msgid match in L02 is exact and an inflected or capitalised form misses it. That is deliberate for now, a hard check that exempts loosely is worse than one that reports 3 extra entries, but it is the same shape as the inflectional-divergence check G-g was filed for.

  • Decide object and module, and add whichever rows the decision produces
  • Re-read type and Boolean against that decision, since they were curated before the index-category pattern was understood
  • Decide whether L02's whole-msgid match should fold case and inflection, or whether Lists is corpus work

Activity

  1. added
    glossaryTerminology contract and the matcher
    auditThe deterministic check catalogue
    on Aug 18, 2026
  2. tamnd commented on Aug 18, 2026

    @tamnd
    OwnerAuthor

    Done in #60 and content tamnd/python-docs-vi-machine-translation#56.

    All three boxes, and the first one turned out to be the wrong question. The issue asked which of object and module should be kept in English, on the assumption that a word gets one answer. Reading the rest of the keep_en list showed that six of them need two.

    float is số thực in a sentence. float on its own is a cell in the struct format-code table, sitting between _Float16 and f. type is kiểu in a sentence and the argparse keyword in a table of argparse keywords. list is danh sách in a sentence and a cell in the json conversion table next to array. While L02 read keep_en a row could only say one of those, and the one that got written was whichever silenced the louder check. That is why G03 was reporting 71 correct translations of type, list and float as glossary violations.

    So Term gained identifier and L02 reads Glossary.standalone, which is keep_en or identifier. No existing row changed meaning: a term that is English in every sentence is English on its own too.

    object and module. Measured over the pinned mirror, counting prose the matcher finds the term in and masking markup on the Vietnamese side:

    term Vietnamese English
    object đối tượng 63 object 46
    list danh sách 34 list 15
    type kiểu 30 type 16
    float số thực 4 float 4
    module mô-đun 17 module 64

    object goes to đối tượng and does not get identifier, because 35 of its 36 standalone entries are the index category and read "bytearray (object)" to somebody using the index. The one exception is the JSON conversion table.

    module had no majority and did not get one by area either, so it is decided on the reason. mô-đun is module spelled with a hyphen and carries nothing a reader does not already get from module, where đối tượng, kiểu, danh sách and số thực are Vietnamese words that mean something. bytecode, docstring, iterable, lambda, traceback and REPL are already kept on that reasoning.

    type and Boolean re-read. type moved to kiểu with identifier. Boolean did not move: its 4 standalone entries are index categories and the 3 prose entries that mention it all leave it in English, so the row was right.

    Lists. No folding. It is a section heading three times, each followed by prose beginning "Lists are mutable sequences", and a heading is translated. A hard check that exempts loosely is worse than one that reports 3 entries somebody has to translate. G-g still stands as filed for the inflection question in general.

    What moved. L02 86 to 45, which is the hard one. G03 94 to 103, G02 191 to 339, G04 143 to 313, all soft. 41 hard findings traded for 327 soft ones, and the soft ones are the work list: 198 of the 362 new ones are machine output from the 2026-08-17 tier 1 run, and 65 of G03's 103 are the model writing mô-đun because nothing told it not to. The next run clears those. The remaining 164 are human translations disagreeing with each other.

    reports/quality.md now says 0.19 misses per machine entry rather than 0.05, and the reason it said 0.05 is that the glossary had nothing to say about the words the model was getting wrong.

    import, slice and callable are the same shape as float and are left as they are. Their Vietnamese moves with the part of speech, nhập for the verb and import for the noun in "hệ thống import", and a row naming one rendering would fail G02 on the other. Filed as the next thing rather than guessed at here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    auditThe deterministic check catalogueglossaryTerminology contract and the matcher

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions