Msgcheck performs various checks on gettext files (with extension .po):
- compilation (with command
msgfmt -c) - for each translation:
- number of lines in translated strings
- whitespace at beginning/end of strings
- trailing whitespace at end of lines inside strings
- punctuation at end of strings
- spelling (messages and translations).
The script requires:
- Python ≥ 3.6
- gettext (for the command
msgfmt, used to compile PO files) - the python module
pyenchantif spelling is checked (with option-s).
Install a released version from the Python package index with pip:
$ pip install msgcheck
Or you can install via source distribution:
$ python setup.py install
Syntax:
$ msgcheck [options] file.po [file.po...]
Options:
-h,--help: display help message and exit-c,--no-compile: do not check compilation of file (withmsgfmt -c)-f,--fuzzy: check fuzzy strings-n,--check-noqa: check "noqa"-commented lines (they are skipped by default)-l,--no-lines: do not check number of lines-p,--no-punct: do not check punctuation at end of strings-s id|str,--spelling id|str: check spelling (id= source messages,str= translations)-d <dicts>,--dicts <dicts>: comma-separated list of extra dictionaries to use (in addition to file language)-P <file>,--pwl <file>: file(s) with personal list of words used when checking spelling (this option can be given multiple times)-m,--only-misspelled: display only misspelled words (no error, line number and translation)-w,--no-whitespace: do not check whitespace at beginning/end of strings-W,--no-whitespace-eol: do not check whitespace at end of lines inside strings-e,--extract: display all translations and exit (all checks except compilation are disabled in this mode)-i,--ignore-errors: display but ignore errors (always return 0)-q,--quiet: quiet mode: only display number of errors-v,--version: display version and exit
The environment variable MSGCHECK_OPTIONS can be set with some default options.
The script returns exit code 0 if all files checked are OK (0 errors or option
--extract given) or it returns N: number of files with errors (1 ≤ N ≤ 255).
$ msgcheck fr.po
======================================================================
/path/to/fr.po:242: [punct] end punctuation: ":" in translation, ":" not in string:
---
error
---
erreur:
======================================================================
/path/to/fr.po:262: [lines] number of lines: 1 in string, 2 in translation:
---
Message filters:
---
Filtres de
messages:
======================================================================
/path/to/fr.po:336: [whitespace] spaces at beginning: 0 in string, 1 in translation:
---
current value
---
valeur courante
======================================================================
/path/to/fr.po: 3 errors (almost good!)
Copyright © 2009-2025 Sébastien Helleu
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.