---
name: "potool"
section: "1"
platform: "linux"
package: "potool"
version: "0.19-1+b2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/potool"
---

# potool(1)

program for manipulating gettext po files

## NAME

potool - program for manipulating gettext po files

## SYNOPSIS

**potool** FILENAME1 \[ *FILENAME2* \] \[-f *f\|nf\|t\|nt\|nth\|o\|no*\] \[-n *ctxt\|id\|str\|cmt\|ucmt\|pcmt\|scmt\|dcmt\|tr\|linf*\]... \[-s\] \[-p\] \[-c\]

**potool** -h

## DESCRIPTION

**potool** works in two (so far) modes. The first mode requires providing one file name, and works as a filter. In the second mode, the program *replaces* the translations in FILENAME1 with the translations from FILENAME2. (So FILENAME1 is the base po file, while FILENAME2 is our working copy.)

## OPTIONS

- **-f filter**

  Determines which po file entries should be *retained.* In the second mode, the filters are applied only to FILENAME2 (the working copy). Existing filters are:\
   t   - translated entries\
   nt  - untranslated entries\
   nth - untranslated entries and the header\
   f   - fuzzy entries\
   nf  - entries that are not fuzzy\
   o   - obsolete entries\
   no  - non-obsolete entries\
   It is possible to stack filters, by specifying multiple -f options.

- **-n filter**

  Determines which po file entries parts should *not* be retained. Any number of -n options is allowed. Valid parameters are:\
   ctxt  - don't write 'ctxt' parts\
   id    - don't write 'id' parts\
   str   - don't write 'str' parts\
   tr    - don't write translations\
   ucmt  - don't write user's comments\
   pcmt  - don't write the comments regarding position in source files\
   scmt  - don't write special comments ('#, fuzzy, c-format, ...')\
   dcmt  - don't write reserved comments (usually starting with a dot)\
   cmt   - don't write any comments\
   linf  - change source line numbers to '1'.

  The last parameter is useful when you need to compare two po or pot files using [**diff**(1)](/diff/1.md) as it usually returns lots of unimportant line number changes otherwise.

- **-s**

  Don't display the entries themselves, only their count.

- **-p**

  causes potool to keep the formatting of the file intact. Without this option, all strings will be re-wrapped in the output at newlines or word boundaries to fit in 80 columns.

- **-c**

  Overwrite all msgstrs with their msgids.

- **-h**

  Display short usage help.

## EXAMPLES

- potool x.po -s -ft

  displays the number of translated entries. See also [**postats**(1)](/postats/1.md).

- potool x.po -nstr

  Deletes all translations - so you can start from scratch! :-)

- potool x.po -ft && potool x.po -fnt

  displays firstly the translated and then the non-translated entries from file x.po (reverse order is not recommended because of the first "header" entry). The output contains all information from x.po, with the difference that untranslated entries are located together in a single place.

- potool x.po -fnt \> tmp.po && editor tmp.po && potool x.po tmp.po

  lets you easily add new translations, without looking at the already translated entries

The last two examples are implemented as the [**potooledit**(1)](/potooledit/1.md) program.

## CAVEATS

By default, the program re-wraps lines in all strings in the output. See the **-p** option.

## SEE ALSO

[**potooledit**(1)](/potooledit/1.md), [**postats**(1)](/postats/1.md), [**msgmerge**(1)](/msgmerge/1.md), [**msgfmt**(1)](/msgfmt/1.md).\

## AUTHOR

Potool was written by Zbigniew Chyla and is now being maintained by Marcin Owsiany \<porridge@debian.org\>.
