Skip to content

Add translation tests for argparse #124295

Closed

Activity

  1. added
    testsTests in the Lib/test dir
    stdlibStandard Library Python modules in the Lib/ directory
    on Sep 20, 2024
  2. changed the title [-]Add translation tests to argparse[/-] [+]Add translation tests for argparse[/+] on Sep 20, 2024
  3. tomasr8 commented on Sep 24, 2024

    @tomasr8
    Member

    Continuing the discussion here since the other issue was closed.

    Quoting Serhiy:

    I thought that we should run the parser with different options to produce different error messages with installed special translator that transforms the original text in simply recognizable way. But there may be better ways.

    I was originally thinking the same, but to me that seems like a lot of effort compared to the benefit we'd get. Instead, I think that using a message extractor (e.g. pygettext) we can assert both the presence of a specific message and the line number it appears at. This should give us pretty much the same confidence as directly checking the argparse output but with an order of magnitude less work. What do you think?

  4. serhiy-storchaka commented on Sep 24, 2024

    @serhiy-storchaka
    Member

    and the line number it appears at

    Would not this make the tests extremely fragile?

  5. tomasr8 commented on Sep 25, 2024

    @tomasr8
    Member

    Would not this make the tests extremely fragile?

    Does it matter that much if you don't need to fix the tests manually? You'd have a snapshot of the PO file and a simple command to regenerate it so all you'd need to do is double-check the diff

  6. serhiy-storchaka commented on Sep 25, 2024

    @serhiy-storchaka
    Member

    You would need to regenerate the snapshot after every change in argparse (and it was changed a lot in last few days), and the diff would be so large that it would be hard to notice a real regression in the noise.

    But this is a good first step. Before #27667 was merged, Tools/i18n/pygettext.py produced a warning for _() used with non-literals. They should be treated as errors in the test. Also, line numbers should be ignored in comparison and only used to report errors. We should just collect a set of translated strings, compare it with the expected result and report about missing or additional strings.

  7. added
    3.12only security fixes
    3.13only security fixes
    3.14bugs and security fixes
    on Sep 25, 2024
  8. tomasr8 commented on Sep 25, 2024

    @tomasr8
    Member

    True, if the module is changing a lot, so would the snapshots. I'll try to come up with a PR based on your suggestions :)

  9. serhiy-storchaka commented on Oct 26, 2024

    @serhiy-storchaka
    Member

    We should also add translation tests for getopt and optparse, and maybe for other modules (this is separate issues). I am not a fan of converting many tests into packages just to add a data file. This may break history, add conflicts with existing PRs and make future work with tests less convenient. Maybe add a common directory for translation data?

  10. 8 remaining items

  11. tomasr8 commented on Oct 27, 2024

    @tomasr8
    Member

    I'll look into that :)

  12. added 5 commits that reference this issue on Oct 27, 2024
  13. serhiy-storchaka commented on Oct 27, 2024

    @serhiy-storchaka
    Member

    It does not catch ngettext strings.

  14. tomasr8 commented on Oct 27, 2024

    @tomasr8
    Member

    IIRC pygettext currently does not know how to handle *gettext() functions which take more than one argument.
    There is a way to specify additional keywords via --keyword=XXX but I don't see any way to tell it how many arguments
    it takes.

    For example invoking

    ./Tools/i18n/pygettext.py -o messages.pot --keyword=ngettext Lib/argparse.py
    

    Produces several warnings (and does not extract any ngettext strings):

    *** Lib/argparse.py:1639: Seen unexpected token ","
    *** Lib/argparse.py:2326: Seen unexpected token ","
    

    We could fix pygettext to allow functions like ngettext. We could probably use the same syntax that GNU's xgettext and pybabel use to specify keywords and their arguments: https://www.gnu.org/software/gettext/manual/html_node/xgettext-Invocation.html#index-_002dk_002c-xgettext-option

  15. serhiy-storchaka commented on Oct 28, 2024

    @serhiy-storchaka
    Member

    For beginning, it should support all gettext functions by default. Later we can make this customizable.

  16. added 2 commits that reference this issue on Dec 8, 2024
  17. added 2 commits that reference this issue on Jan 12, 2025
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

    3.12only security fixes3.13only security fixes3.14bugs and security fixesstdlibStandard Library Python modules in the Lib/ directorytestsTests in the Lib/test dir

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions