---
name: "xgettext"
section: "1"
platform: "linux"
package: "gettext"
version: "1.0-2"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/xgettext"
---

# xgettext(1)

extract gettext strings from source

## NAME

xgettext - extract gettext strings from source

## SYNOPSIS

**xgettext** \[*OPTION*\] \[*INPUTFILE*\]...

## DESCRIPTION

Extract translatable strings from given input files.

Mandatory arguments to long options are mandatory for short options too. Similarly for optional arguments.

### Input file location:

- INPUTFILE ...

  input files

- **-f**, **--files-from**=*FILE*

  get list of input files from FILE

- **-D**, **--directory**=*DIRECTORY*

  add DIRECTORY to list for input files search

If input file is -, standard input is read.

### Output file location:

- **-d**, **--default-domain**=*NAME*

  use NAME.po for output (instead of messages.po)

- **-o**, **--output**=*FILE*

  write output to specified file

- **-p**, **--output-dir**=*DIR*

  output files will be placed in directory DIR

If output file is -, output is written to standard output.

### Choice of input file language:

- **-L**, **--language**=*NAME*

  recognise the specified language (C, C++, ObjectiveC, PO, Python, Java, JavaProperties, C#, JavaScript, TypeScript, TSX, Scheme, Guile, Lisp, EmacsLisp, librep, Rust, Go, Ruby, Shell, awk, Lua, Modula-2, D, OCaml, Smalltalk, Vala, Tcl, Perl, PHP, GCC-source, YCP, NXStringTable, RST, RSJ, Glade, GSettings, Desktop)

- **-C**, **--c**++

  shorthand for **--language**=*C*++

By default the language is guessed depending on the input file name extension.

### Input file interpretation:

- **--from-code**=*NAME*

  encoding of input files (except for Python, Tcl, Glade)

By default the input files are assumed to be in ASCII.

### Operation mode:

- **-j**, **--join-existing**

  join messages with existing file

- **-x**, **--exclude-file**=*FILE*.po

  entries from FILE.po are not extracted

- **-cTAG**, **--add-comments**=*TAG*

  place comment blocks starting with TAG and preceding keyword lines in output file

- **-c**, **--add-comments**

  place all comment blocks preceding keyword lines in output file

- **--check**=*NAME*

  perform syntax check on messages (ellipsis-unicode, space-ellipsis,

-

  quote-unicode, bullet-unicode)

- **--no-check**=*NAME*

  don't perform syntax check on messages (url, email)

- **--sentence-end**=*TYPE*

  type describing the end of sentence (single-space, which is the default,

-

  or double-space)

### Language specific options:

- **-a**, **--extract-all**

  extract all strings (only languages C, C++, ObjectiveC, Python, Java, C#, JavaScript, TypeScript, TSX, Scheme, Guile, Lisp, EmacsLisp, librep, Rust, Go, Shell, awk, Lua, Modula-2, D, OCaml, Vala, Tcl, Perl, PHP, GCC-source, Glade, GSettings)

- **-kWORD**, **--keyword**=*WORD*

  look for WORD as an additional keyword

- **-k**, **--keyword**

  do not to use default keywords (only languages C, C++, ObjectiveC, Python, Java, C#, JavaScript, TypeScript, TSX, Scheme, Guile, Lisp, EmacsLisp, librep, Rust, Go, Shell, awk, Lua, Modula-2, D, OCaml, Vala, Tcl, Perl, PHP, GCC-source, Glade, GSettings, Desktop)

- **--flag**=*WORD*:ARG:FLAG

  additional flag for strings inside the argument number ARG of keyword WORD

- (only languages C, C++, ObjectiveC, Python,

  Java, C#, JavaScript, TypeScript, TSX, Scheme, Guile, Lisp, EmacsLisp, librep, Rust, Go, Shell, awk, Lua, Modula-2, D, OCaml, Vala, Tcl, Perl, PHP, GCC-source, YCP)

- **--tag**=*WORD*:FORMAT

  defines the behaviour of tagged template literals with tag WORD

-

  (only language JavaScript)

- **-T**, **--trigraphs**

  understand ANSI C trigraphs for input (deprecated; only languages C, C++, ObjectiveC)

- **--its**=*FILE*

  apply ITS rules from FILE (only XML based languages)

- **--qt**

  recognize Qt format strings (only language C++)

- **--kde**

  recognize KDE 4 format strings (only language C++)

- **--boost**

  recognize Boost format strings (only language C++)

- **--debug**

  more detailed formatstring recognition result

### Output details:

- **--color**

  use colors and other text attributes always

- **--color**=*WHEN*

  use colors and other text attributes if WHEN. WHEN may be 'always', 'never', 'auto', or 'html'.

- **--style**=*STYLEFILE*

  specify CSS style rule file for **--color**

- **-e**, **--no-escape**

  do not use C escapes in output (default)

- **-E**, **--escape**

  use C escapes in output, no extended chars

- **--force-po**

  write PO file even if empty

- **-i**, **--indent**

  write the .po file using indented style

- **--no-location**

  do not write '#: filename:line' lines

- **-n**, **--add-location**

  generate '#: filename:line' lines (default)

- **--strict**

  write out strict Uniforum conforming .po file

- **--properties-output**

  write out a Java .properties file

- **--stringtable-output**

  write out a NeXTstep/GNUstep .strings file

- **--itstool**

  write out itstool comments

- **-w**, **--width**=*NUMBER*

  set output page width

- **--no-wrap**

  do not break long message lines, longer than the output page width, into several lines

- **-s**, **--sort-output**

  generate sorted output (deprecated)

- **-F**, **--sort-by-file**

  sort output by file location

- **--omit-header**

  don't write header with 'msgid ""' entry

- **--no-git**

  don't use the git program to produce a reproducible 'POT-Creation-Date' field in the output.

- **--copyright-holder**=*STRING*

  set copyright holder in output

- **--foreign-user**

  omit FSF copyright in output for foreign user

- **--package-name**=*PACKAGE*

  set package name in output

- **--package-version**=*VERSION*

  set package version in output

- **--msgid-bugs-address**=*EMAIL*@ADDRESS

  set report address for msgid bugs

- **--generated**=*FILE*

  Declares that the given FILE is generated and therefore should not have an influence on the 'POT-Creation-Date' field in the output.

- **--reference**=*FILE*

  Declares that the output depends on the contents of the given FILE.  This has an influence on the 'POT-Creation-Date' field in the output.

- **-m\[STRING\]**, **--msgstr-prefix**\[=*STRING*\]

  use STRING or "" as prefix for msgstr values

- **-M\[STRING\]**, **--msgstr-suffix**\[=*STRING*\]

  use STRING or "" as suffix for msgstr values

### Informative output:

- **-h**, **--help**

  display this help and exit

- **-V**, **--version**

  output version information and exit

- **-v**, **--verbose**

  increase verbosity level

## AUTHOR

Written by Ulrich Drepper and Bruno Haible.

## REPORTING BUGS

Report bugs in the bug tracker at \<https://savannah.gnu.org/projects/gettext\> or by email to \<bug-gettext@gnu.org\>.

## COPYRIGHT

Copyright © 1995-2026 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later \<https://gnu.org/licenses/gpl.html\>\
 This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.

## SEE ALSO

The full documentation for **xgettext** is maintained as a Texinfo manual.  If the **info** and **xgettext** programs are properly installed at your site, the command

-

  **info xgettext**

should give you access to the complete manual.
