Hooks for pre-commit useful working with PO files.
- repo: https://github.com/mondeja/pre-commit-po-hooks
rev: v1.7.3
hooks:
- id: obsolete-messages
- id: untranslated-messages
- id: fuzzy-messages
- id: remove-django-translators
- id: standard-metadata
- id: max-lines
args: ["10000"]Checks for obsolete messages printing their line numbers if found.
Checks for untranslated messages printing their line numbers if found.
-m/--min: Minimum number of messages that must be translated in each file to pass this check. Can be defined as a percentage of the messages translated appending a character%at the end of the value.
Checks for fuzzy messages printing their line numbers if found.
Replaces a matching string at the beginning of extracted comments.
-m/--match "STRING": Matching string to be replaced.-r/--replacement "STRING": Replacement for the match at the beginning of the extracted comment. If you want to remove the matching beginning you can pass an empty string"".-d/--dry-run: Don't do the replacements, only writes to stderr the locations of the extracted comments to be replaced.
Same as lreplace-extracted-comments
passing --match "Translators: " --replacement "". Useful to remove the string
prepended by Django extracting messages with xgettext (see more about this
problem in django-rosetta#245).
Check that metadata fields matches a set of regular expressions.
-h/--header HEADER: Header name to match in metadata. This argument can be passed multiple times, but after each-h/--headerargument must be a-v/--valuethat indicates the regular expression for that header.-v/--value REGEX: Can be passed multiple times. Indicates the regular expression that the last header passed in the argument-h/--headermust match in the checked PO files.-n/--no-metadata: When this option is passed, the hook instead checks that there is no metadata in the files, so it will exit with code 1 if some metadata is found in a file or 0 if there is no metadata in any files.-r/--remove/--remove-metadata: When this option is passed the metadata will be removed from the files instead of being treated as a lint error.
Check that the metadata of your PO files fits some standard requirements based on the next regular expressions:
Project-Id-Version:\d+\.\d+\.\dReport-Msgid-Bugs-To:.+\s<.+@.+\..+>Last-Translator:.+\s<.+@.+\..+>Language-Team:.+\s<.+@.+\..+>Language:\w\w_?\w?\w?(@\w+)?Content-Type:text/plain; charset=[0-9a-zA-Z\-]+Content-Transfer-Encoding:\d+bits?
If you need to replace some fields with other regular expressions, you can do
it passing the -h and -v arguments of the
check-metadata hook.
For example, if your version includes the character v at the beginning:
-h "Project-Id-Version" -v "v\d+\.\d+\.\d"
It will check if PO files has metadata. If has metadata, it will fail the check returning exit code 1.
-r/--remove/--remove-metadata: When this option is passed the metadata will be removed from the files instead of being treated as a lint error.
Remove metadata headers from your PO files. This is an alias for
no-metadata hook passing --remove-metadata argument.
Define a maximum number of entries for each PO file. Pass an interger in the first argument:
- id: max-messages
args:
- "5000"- Maximum number of messages allowed for each PO file.
Define a maximum number of lines for each PO file. Pass an interger in the first argument:
- id: max-lines
args:
- "10000"- Maximum number of lines allowed for each PO file.
Define a minimum number of files that must be translated in order to pass.
Pass a float or a value ending with % character if you wan to compare
against the percentage of translated files:
- id: min-translated
args:
- "95%"- Minimum number or percentage of messages which must be translated in each PO file.