jpayne@68: jpayne@68: jpayne@68: jpayne@68: jpayne@68:
jpayne@68:[ << ] | jpayne@68:[ >> ] | jpayne@68:jpayne@68: | jpayne@68: | jpayne@68: | jpayne@68: | jpayne@68: | [Top] | jpayne@68:[Contents] | jpayne@68:[Index] | jpayne@68:[ ? ] | jpayne@68:
Sometimes it is necessary to manipulate PO files in a way that is better
jpayne@68: performed automatically than by hand. GNU gettext
includes a
jpayne@68: complete set of tools for this purpose.
jpayne@68:
When merging two packages into a single package, the resulting POT file jpayne@68: will be the concatenation of the two packages' POT files. Thus the jpayne@68: maintainer must concatenate the two existing package translations into jpayne@68: a single translation catalog, for each language. This is best performed jpayne@68: using ‘msgcat’. It is then the translators' duty to deal with any jpayne@68: possible conflicts that arose during the merge. jpayne@68:
jpayne@68: jpayne@68:When a translator takes over the translation job from another translator, jpayne@68: but she uses a different character encoding in her locale, she will jpayne@68: convert the catalog to her character encoding. This is best done through jpayne@68: the ‘msgconv’ program. jpayne@68:
jpayne@68:When a maintainer takes a source file with tagged messages from another jpayne@68: package, he should also take the existing translations for this source jpayne@68: file (and not let the translators do the same job twice). One way to do jpayne@68: this is through ‘msggrep’, another is to create a POT file for jpayne@68: that source file and use ‘msgmerge’. jpayne@68:
jpayne@68: jpayne@68: jpayne@68:When a translator wants to adjust some translation catalog for a special jpayne@68: dialect or orthography — for example, German as written in Switzerland jpayne@68: versus German as written in Germany — she needs to apply some text jpayne@68: processing to every message in the catalog. The tool for doing this is jpayne@68: ‘msgfilter’. jpayne@68:
jpayne@68:Another use of msgfilter
is to produce approximately the POT file for
jpayne@68: which a given PO file was made. This can be done through a filter command
jpayne@68: like ‘msgfilter sed -e d | sed -e '/^# /d'’. Note that the original
jpayne@68: POT file may have had different comments and different plural message counts,
jpayne@68: that's why it's better to use the original POT file if available.
jpayne@68:
When a translator wants to check her translations, for example according jpayne@68: to orthography rules or using a non-interactive spell checker, she can do jpayne@68: so using the ‘msgexec’ program. jpayne@68:
jpayne@68: jpayne@68:When third party tools create PO or POT files, sometimes duplicates cannot
jpayne@68: be avoided. But the GNU gettext
tools give an error when they
jpayne@68: encounter duplicate msgids in the same file and in the same domain.
jpayne@68: To merge duplicates, the ‘msguniq’ program can be used.
jpayne@68:
‘msgcomm’ is a more general tool for keeping or throwing away jpayne@68: duplicates, occurring in different files. jpayne@68:
jpayne@68:‘msgcmp’ can be used to check whether a translation catalog is jpayne@68: completely translated. jpayne@68:
jpayne@68: jpayne@68:‘msgattrib’ can be used to select and extract only the fuzzy jpayne@68: or untranslated messages of a translation catalog. jpayne@68:
jpayne@68:‘msgen’ is useful as a first step for preparing English translation jpayne@68: catalogs. It copies each message's msgid to its msgstr. jpayne@68:
jpayne@68:Finally, for those applications where all these various programs are not jpayne@68: sufficient, a library ‘libgettextpo’ is provided that can be used to jpayne@68: write other specialized programs that process PO files. jpayne@68:
jpayne@68: jpayne@68: jpayne@68: jpayne@68: jpayne@68:msgcat
Program msgcat [option] [inputfile]... jpayne@68: |
The msgcat
program concatenates and merges the specified PO files.
jpayne@68: It finds messages which are common to two or more of the specified PO files.
jpayne@68: By using the --more-than
option, greater commonality may be requested
jpayne@68: before messages are printed. Conversely, the --less-than
option may be
jpayne@68: used to specify less commonality before messages are printed (i.e.
jpayne@68: ‘--less-than=2’ will only print the unique messages). Translations,
jpayne@68: comments, extracted comments, and file positions will be cumulated, except that
jpayne@68: if --use-first
is specified, they will be taken from the first PO file
jpayne@68: to define them.
jpayne@68:
To concatenate POT files, better use xgettext
, not msgcat
,
jpayne@68: because msgcat
would choke on the undefined charsets in the specified
jpayne@68: POT files.
jpayne@68:
Input files. jpayne@68:
jpayne@68:Read the names of the input files from file instead of getting jpayne@68: them from the command line. jpayne@68:
jpayne@68:Add directory to the list of directories. Source files are jpayne@68: searched relative to this list of directories. The resulting ‘.po’ jpayne@68: file will be written relative to the current directory, though. jpayne@68:
jpayne@68:If inputfile is ‘-’, standard input is read. jpayne@68:
jpayne@68: jpayne@68: jpayne@68:Write output to specified file. jpayne@68:
jpayne@68:The results are written to standard output if no output file is specified jpayne@68: or if it is ‘-’. jpayne@68:
jpayne@68: jpayne@68: jpayne@68:Print messages with less than number definitions, defaults to infinite jpayne@68: if not set. jpayne@68:
jpayne@68:Print messages with more than number definitions, defaults to 0 if not jpayne@68: set. jpayne@68:
jpayne@68:Shorthand for ‘--less-than=2’. Requests that only unique messages be jpayne@68: printed. jpayne@68:
jpayne@68:Assume the input files are Java ResourceBundles in Java .properties
jpayne@68: syntax, not in PO file syntax.
jpayne@68:
Assume the input files are NeXTstep/GNUstep localized resource files in
jpayne@68: .strings
syntax, not in PO file syntax.
jpayne@68:
Specify encoding for output. jpayne@68:
jpayne@68:Use first available translation for each message. Don't merge several jpayne@68: translations into one. jpayne@68:
jpayne@68:Specify the ‘Language’ field to be used in the header entry. See jpayne@68: Filling in the Header Entry for the meaning of this field. Note: The jpayne@68: ‘Language-Team’ and ‘Plural-Forms’ fields are left unchanged. jpayne@68:
jpayne@68:Specify whether or when to use colors and other text attributes.
jpayne@68: See The --color
option for details.
jpayne@68:
Specify the CSS style rule file to use for --color
.
jpayne@68: See The --style
option for details.
jpayne@68:
Always write an output file even if it contains no message. jpayne@68:
jpayne@68:Write the .po file using indented style. jpayne@68:
jpayne@68:Do not write ‘#: filename:line’ lines. jpayne@68:
jpayne@68:Generate ‘#: filename:line’ lines (default). jpayne@68:
jpayne@68:The optional type can be either ‘full’, ‘file’, or
jpayne@68: ‘never’. If it is not given or ‘full’, it generates the
jpayne@68: lines with both file name and line number. If it is ‘file’, the
jpayne@68: line number part is omitted. If it is ‘never’, it completely
jpayne@68: suppresses the lines (same as --no-location
).
jpayne@68:
Write out a strict Uniforum conforming PO file. Note that this jpayne@68: Uniforum format should be avoided because it doesn't support the jpayne@68: GNU extensions. jpayne@68:
jpayne@68:Write out a Java ResourceBundle in Java .properties
syntax. Note
jpayne@68: that this file format doesn't support plural forms and silently drops
jpayne@68: obsolete messages.
jpayne@68:
Write out a NeXTstep/GNUstep localized resource file in .strings
syntax.
jpayne@68: Note that this file format doesn't support plural forms.
jpayne@68:
Set the output page width. Long strings in the output files will be jpayne@68: split across multiple lines in order to ensure that each line's width jpayne@68: (= number of screen columns) is less or equal to the given number. jpayne@68:
jpayne@68:Do not break long message lines. Message lines whose width exceeds the jpayne@68: output page width will not be split into several lines. Only file reference jpayne@68: lines which are wider than the output page width will be split. jpayne@68:
jpayne@68:Generate sorted output. Note that using this option makes it much harder jpayne@68: for the translator to understand each message's context. jpayne@68:
jpayne@68:Sort output by file location. jpayne@68:
jpayne@68:Display this help and exit. jpayne@68:
jpayne@68:Output version information and exit. jpayne@68:
jpayne@68:msgconv
Program msgconv [option] [inputfile] jpayne@68: |
The msgconv
program converts a translation catalog to a different
jpayne@68: character encoding.
jpayne@68:
Input PO file. jpayne@68:
jpayne@68:Add directory to the list of directories. Source files are jpayne@68: searched relative to this list of directories. The resulting ‘.po’ jpayne@68: file will be written relative to the current directory, though. jpayne@68:
jpayne@68:If no inputfile is given or if it is ‘-’, standard input is read. jpayne@68:
jpayne@68: jpayne@68: jpayne@68:Write output to specified file. jpayne@68:
jpayne@68:The results are written to standard output if no output file is specified jpayne@68: or if it is ‘-’. jpayne@68:
jpayne@68: jpayne@68: jpayne@68:Specify encoding for output. jpayne@68:
jpayne@68:The default encoding is the current locale's encoding. jpayne@68:
jpayne@68: jpayne@68: jpayne@68:Assume the input file is a Java ResourceBundle in Java .properties
jpayne@68: syntax, not in PO file syntax.
jpayne@68:
Assume the input file is a NeXTstep/GNUstep localized resource file in
jpayne@68: .strings
syntax, not in PO file syntax.
jpayne@68:
Specify whether or when to use colors and other text attributes.
jpayne@68: See The --color
option for details.
jpayne@68:
Specify the CSS style rule file to use for --color
.
jpayne@68: See The --style
option for details.
jpayne@68:
Always write an output file even if it contains no message. jpayne@68:
jpayne@68:Write the .po file using indented style. jpayne@68:
jpayne@68:Do not write ‘#: filename:line’ lines. jpayne@68:
jpayne@68:Generate ‘#: filename:line’ lines (default). jpayne@68:
jpayne@68:The optional type can be either ‘full’, ‘file’, or
jpayne@68: ‘never’. If it is not given or ‘full’, it generates the
jpayne@68: lines with both file name and line number. If it is ‘file’, the
jpayne@68: line number part is omitted. If it is ‘never’, it completely
jpayne@68: suppresses the lines (same as --no-location
).
jpayne@68:
Write out a strict Uniforum conforming PO file. Note that this jpayne@68: Uniforum format should be avoided because it doesn't support the jpayne@68: GNU extensions. jpayne@68:
jpayne@68:Write out a Java ResourceBundle in Java .properties
syntax. Note
jpayne@68: that this file format doesn't support plural forms and silently drops
jpayne@68: obsolete messages.
jpayne@68:
Write out a NeXTstep/GNUstep localized resource file in .strings
syntax.
jpayne@68: Note that this file format doesn't support plural forms.
jpayne@68:
Set the output page width. Long strings in the output files will be jpayne@68: split across multiple lines in order to ensure that each line's width jpayne@68: (= number of screen columns) is less or equal to the given number. jpayne@68:
jpayne@68:Do not break long message lines. Message lines whose width exceeds the jpayne@68: output page width will not be split into several lines. Only file reference jpayne@68: lines which are wider than the output page width will be split. jpayne@68:
jpayne@68:Generate sorted output. Note that using this option makes it much harder jpayne@68: for the translator to understand each message's context. jpayne@68:
jpayne@68:Sort output by file location. jpayne@68:
jpayne@68:Display this help and exit. jpayne@68:
jpayne@68:Output version information and exit. jpayne@68:
jpayne@68:msggrep
Program msggrep [option] [inputfile] jpayne@68: |
The msggrep
program extracts all messages of a translation catalog
jpayne@68: that match a given pattern or belong to some given source files.
jpayne@68:
Input PO file. jpayne@68:
jpayne@68:Add directory to the list of directories. Source files are jpayne@68: searched relative to this list of directories. The resulting ‘.po’ jpayne@68: file will be written relative to the current directory, though. jpayne@68:
jpayne@68:If no inputfile is given or if it is ‘-’, standard input is read. jpayne@68:
jpayne@68: jpayne@68: jpayne@68:Write output to specified file. jpayne@68:
jpayne@68:The results are written to standard output if no output file is specified jpayne@68: or if it is ‘-’. jpayne@68:
jpayne@68: jpayne@68: jpayne@68:[-N sourcefile]... [-M domainname]... jpayne@68: [-J msgctxt-pattern] [-K msgid-pattern] [-T msgstr-pattern] jpayne@68: [-C comment-pattern] jpayne@68: |
A message is selected if jpayne@68:
When more than one selection criterion is specified, the set of selected jpayne@68: messages is the union of the selected messages of each criterion. jpayne@68:
jpayne@68:msgctxt-pattern or msgid-pattern or msgstr-pattern syntax: jpayne@68:
[-E | -F] [-e pattern | -f file]... jpayne@68: |
patterns are basic regular expressions by default, or extended regular jpayne@68: expressions if -E is given, or fixed strings if -F is given. jpayne@68:
jpayne@68:Select messages extracted from sourcefile. sourcefile can be jpayne@68: either a literal file name or a wildcard pattern. jpayne@68:
jpayne@68:Select messages belonging to domain domainname. jpayne@68:
jpayne@68:Start of patterns for the msgctxt. jpayne@68:
jpayne@68:Start of patterns for the msgid. jpayne@68:
jpayne@68:Start of patterns for the msgstr. jpayne@68:
jpayne@68:Start of patterns for the translator's comment. jpayne@68:
jpayne@68:Start of patterns for the extracted comments. jpayne@68:
jpayne@68:Specify that pattern is an extended regular expression. jpayne@68:
jpayne@68:Specify that pattern is a set of newline-separated strings. jpayne@68:
jpayne@68:Use pattern as a regular expression. jpayne@68:
jpayne@68:Obtain pattern from file. jpayne@68:
jpayne@68:Ignore case distinctions. jpayne@68:
jpayne@68:Output only the messages that do not match any selection criterion, instead jpayne@68: of the messages that match a selection criterion. jpayne@68:
jpayne@68:Assume the input file is a Java ResourceBundle in Java .properties
jpayne@68: syntax, not in PO file syntax.
jpayne@68:
Assume the input file is a NeXTstep/GNUstep localized resource file in
jpayne@68: .strings
syntax, not in PO file syntax.
jpayne@68:
Specify whether or when to use colors and other text attributes.
jpayne@68: See The --color
option for details.
jpayne@68:
Specify the CSS style rule file to use for --color
.
jpayne@68: See The --style
option for details.
jpayne@68:
Always write an output file even if it contains no message. jpayne@68:
jpayne@68:Write the .po file using indented style. jpayne@68:
jpayne@68:Do not write ‘#: filename:line’ lines. jpayne@68:
jpayne@68:Generate ‘#: filename:line’ lines (default). jpayne@68:
jpayne@68:The optional type can be either ‘full’, ‘file’, or
jpayne@68: ‘never’. If it is not given or ‘full’, it generates the
jpayne@68: lines with both file name and line number. If it is ‘file’, the
jpayne@68: line number part is omitted. If it is ‘never’, it completely
jpayne@68: suppresses the lines (same as --no-location
).
jpayne@68:
Write out a strict Uniforum conforming PO file. Note that this jpayne@68: Uniforum format should be avoided because it doesn't support the jpayne@68: GNU extensions. jpayne@68:
jpayne@68:Write out a Java ResourceBundle in Java .properties
syntax. Note
jpayne@68: that this file format doesn't support plural forms and silently drops
jpayne@68: obsolete messages.
jpayne@68:
Write out a NeXTstep/GNUstep localized resource file in .strings
syntax.
jpayne@68: Note that this file format doesn't support plural forms.
jpayne@68:
Set the output page width. Long strings in the output files will be jpayne@68: split across multiple lines in order to ensure that each line's width jpayne@68: (= number of screen columns) is less or equal to the given number. jpayne@68:
jpayne@68:Do not break long message lines. Message lines whose width exceeds the jpayne@68: output page width will not be split into several lines. Only file reference jpayne@68: lines which are wider than the output page width will be split. jpayne@68:
jpayne@68:Generate sorted output. Note that using this option makes it much harder jpayne@68: for the translator to understand each message's context. jpayne@68:
jpayne@68:Sort output by file location. jpayne@68:
jpayne@68:Display this help and exit. jpayne@68:
jpayne@68:Output version information and exit. jpayne@68:
jpayne@68:To extract the messages that come from the source files
jpayne@68: gnulib-lib/error.c
and gnulib-lib/getopt.c
:
jpayne@68:
msggrep -N gnulib-lib/error.c -N gnulib-lib/getopt.c input.po jpayne@68: |
To extract the messages that contain the string “Please specify” in the jpayne@68: original string: jpayne@68:
jpayne@68:msggrep --msgid -F -e 'Please specify' input.po jpayne@68: |
To extract the messages that have a context specifier of either “Menu>File” jpayne@68: or “Menu>Edit” or a submenu of them: jpayne@68:
jpayne@68:msggrep --msgctxt -E -e '^Menu>(File|Edit)' input.po jpayne@68: |
To extract the messages whose translation contains one of the strings in the
jpayne@68: file wordlist.txt
:
jpayne@68:
msggrep --msgstr -F -f wordlist.txt input.po jpayne@68: |
msgfilter
Program msgfilter [option] filter [filter-option] jpayne@68: |
The msgfilter
program applies a filter to all translations of a
jpayne@68: translation catalog.
jpayne@68:
During each filter invocation, the environment variable
jpayne@68: MSGFILTER_MSGID
is bound to the message's msgid, and the environment
jpayne@68: variable MSGFILTER_LOCATION
is bound to the location in the PO file
jpayne@68: of the message. If the message has a context, the environment variable
jpayne@68: MSGFILTER_MSGCTXT
is bound to the message's msgctxt, otherwise it is
jpayne@68: unbound. If the message has a plural form, environment variable
jpayne@68: MSGFILTER_MSGID_PLURAL
is bound to the message's msgid_plural and
jpayne@68: MSGFILTER_PLURAL_FORM
is bound to the order number of the plural
jpayne@68: actually processed (starting with 0), otherwise both are unbound.
jpayne@68: If the message has a previous msgid (added by msgmerge
),
jpayne@68: environment variable MSGFILTER_PREV_MSGCTXT
is bound to the
jpayne@68: message's previous msgctxt, MSGFILTER_PREV_MSGID
is bound to
jpayne@68: the previous msgid, and MSGFILTER_PREV_MSGID_PLURAL
is bound to
jpayne@68: the previous msgid_plural.
jpayne@68:
Input PO file. jpayne@68:
jpayne@68:Add directory to the list of directories. Source files are jpayne@68: searched relative to this list of directories. The resulting ‘.po’ jpayne@68: file will be written relative to the current directory, though. jpayne@68:
jpayne@68:If no inputfile is given or if it is ‘-’, standard input is read. jpayne@68:
jpayne@68: jpayne@68: jpayne@68:Write output to specified file. jpayne@68:
jpayne@68:The results are written to standard output if no output file is specified jpayne@68: or if it is ‘-’. jpayne@68:
jpayne@68: jpayne@68: jpayne@68:The filter can be any program that reads a translation from standard jpayne@68: input and writes a modified translation to standard output. A frequently jpayne@68: used filter is ‘sed’. A few particular built-in filters are also jpayne@68: recognized. jpayne@68:
jpayne@68:Add newline at the end of each input line and also strip the ending jpayne@68: newline from the output line. jpayne@68:
jpayne@68:Note: If the filter is not a built-in filter, you have to care about encodings:
jpayne@68: It is your responsibility to ensure that the filter can cope
jpayne@68: with input encoded in the translation catalog's encoding. If the
jpayne@68: filter wants input in a particular encoding, you can in a first step
jpayne@68: convert the translation catalog to that encoding using the ‘msgconv’
jpayne@68: program, before invoking ‘msgfilter’. If the filter wants input
jpayne@68: in the locale's encoding, but you want to avoid the locale's encoding, then
jpayne@68: you can first convert the translation catalog to UTF-8 using the
jpayne@68: ‘msgconv’ program and then make ‘msgfilter’ work in an UTF-8
jpayne@68: locale, by using the LC_ALL
environment variable.
jpayne@68:
Note: Most translations in a translation catalog don't end with a
jpayne@68: newline character. For this reason, unless the --newline
jpayne@68: option is used, it is important that the filter recognizes its
jpayne@68: last input line even if it ends without a newline, and that it doesn't
jpayne@68: add an undesired trailing newline at the end. The ‘sed’ program on
jpayne@68: some platforms is known to ignore the last line of input if it is not
jpayne@68: terminated with a newline. You can use GNU sed
instead; it does
jpayne@68: not have this limitation.
jpayne@68:
Add script to the commands to be executed. jpayne@68:
jpayne@68:Add the contents of scriptfile to the commands to be executed. jpayne@68:
jpayne@68:Suppress automatic printing of pattern space. jpayne@68:
jpayne@68:The filter ‘recode-sr-latin’ is recognized as a built-in filter. jpayne@68: The command ‘recode-sr-latin’ converts Serbian text, written in the jpayne@68: Cyrillic script, to the Latin script. jpayne@68: The command ‘msgfilter recode-sr-latin’ applies this conversion to the jpayne@68: translations of a PO file. Thus, it can be used to convert an ‘sr.po’ jpayne@68: file to an ‘sr@latin.po’ file. jpayne@68:
jpayne@68: jpayne@68:The filter ‘quot’ is recognized as a built-in filter. jpayne@68: The command ‘msgfilter quot’ converts any quotations surrounded jpayne@68: by a pair of ‘"’, ‘'’, and ‘`’. jpayne@68:
jpayne@68: jpayne@68:The filter ‘boldquot’ is recognized as a built-in filter. jpayne@68: The command ‘msgfilter boldquot’ converts any quotations jpayne@68: surrounded by a pair of ‘"’, ‘'’, and ‘`’, also adding the jpayne@68: VT100 escape sequences to the text to decorate it as bold. jpayne@68:
jpayne@68:The use of built-in filters is not sensitive to the current locale's encoding. jpayne@68: Moreover, when used with a built-in filter, ‘msgfilter’ can automatically jpayne@68: convert the message catalog to the UTF-8 encoding when needed. jpayne@68:
jpayne@68: jpayne@68: jpayne@68:Assume the input file is a Java ResourceBundle in Java .properties
jpayne@68: syntax, not in PO file syntax.
jpayne@68:
Assume the input file is a NeXTstep/GNUstep localized resource file in
jpayne@68: .strings
syntax, not in PO file syntax.
jpayne@68:
Specify whether or when to use colors and other text attributes.
jpayne@68: See The --color
option for details.
jpayne@68:
Specify the CSS style rule file to use for --color
.
jpayne@68: See The --style
option for details.
jpayne@68:
Always write an output file even if it contains no message. jpayne@68:
jpayne@68:Write the .po file using indented style. jpayne@68:
jpayne@68:Keep the header entry, i.e. the message with ‘msgid ""’, unmodified, jpayne@68: instead of filtering it. By default, the header entry is subject to jpayne@68: filtering like any other message. jpayne@68:
jpayne@68:Do not write ‘#: filename:line’ lines. jpayne@68:
jpayne@68:Generate ‘#: filename:line’ lines (default). jpayne@68:
jpayne@68:The optional type can be either ‘full’, ‘file’, or
jpayne@68: ‘never’. If it is not given or ‘full’, it generates the
jpayne@68: lines with both file name and line number. If it is ‘file’, the
jpayne@68: line number part is omitted. If it is ‘never’, it completely
jpayne@68: suppresses the lines (same as --no-location
).
jpayne@68:
Write out a strict Uniforum conforming PO file. Note that this jpayne@68: Uniforum format should be avoided because it doesn't support the jpayne@68: GNU extensions. jpayne@68:
jpayne@68:Write out a Java ResourceBundle in Java .properties
syntax. Note
jpayne@68: that this file format doesn't support plural forms and silently drops
jpayne@68: obsolete messages.
jpayne@68:
Write out a NeXTstep/GNUstep localized resource file in .strings
syntax.
jpayne@68: Note that this file format doesn't support plural forms.
jpayne@68:
Set the output page width. Long strings in the output files will be jpayne@68: split across multiple lines in order to ensure that each line's width jpayne@68: (= number of screen columns) is less or equal to the given number. jpayne@68:
jpayne@68:Do not break long message lines. Message lines whose width exceeds the jpayne@68: output page width will not be split into several lines. Only file reference jpayne@68: lines which are wider than the output page width will be split. jpayne@68:
jpayne@68:Generate sorted output. Note that using this option makes it much harder jpayne@68: for the translator to understand each message's context. jpayne@68:
jpayne@68:Sort output by file location. jpayne@68:
jpayne@68:Display this help and exit. jpayne@68:
jpayne@68:Output version information and exit. jpayne@68:
jpayne@68:To convert German translations to Swiss orthography (in an UTF-8 locale): jpayne@68:
jpayne@68:msgconv -t UTF-8 de.po | msgfilter sed -e 's/ß/ss/g' jpayne@68: |
To convert Serbian translations in Cyrillic script to Latin script: jpayne@68:
jpayne@68:msgfilter recode-sr-latin < sr.po jpayne@68: |
msguniq
Program msguniq [option] [inputfile] jpayne@68: |
The msguniq
program unifies duplicate translations in a translation
jpayne@68: catalog. It finds duplicate translations of the same message ID. Such
jpayne@68: duplicates are invalid input for other programs like msgfmt
,
jpayne@68: msgmerge
or msgcat
. By default, duplicates are merged
jpayne@68: together. When using the ‘--repeated’ option, only duplicates are
jpayne@68: output, and all other messages are discarded. Comments and extracted
jpayne@68: comments will be cumulated, except that if ‘--use-first’ is
jpayne@68: specified, they will be taken from the first translation. File positions
jpayne@68: will be cumulated. When using the ‘--unique’ option, duplicates are
jpayne@68: discarded.
jpayne@68:
Input PO file. jpayne@68:
jpayne@68:Add directory to the list of directories. Source files are jpayne@68: searched relative to this list of directories. The resulting ‘.po’ jpayne@68: file will be written relative to the current directory, though. jpayne@68:
jpayne@68:If no inputfile is given or if it is ‘-’, standard input is read. jpayne@68:
jpayne@68: jpayne@68: jpayne@68:Write output to specified file. jpayne@68:
jpayne@68:The results are written to standard output if no output file is specified jpayne@68: or if it is ‘-’. jpayne@68:
jpayne@68: jpayne@68: jpayne@68:Print only duplicates. jpayne@68:
jpayne@68:Print only unique messages, discard duplicates. jpayne@68:
jpayne@68:Assume the input file is a Java ResourceBundle in Java .properties
jpayne@68: syntax, not in PO file syntax.
jpayne@68:
Assume the input file is a NeXTstep/GNUstep localized resource file in
jpayne@68: .strings
syntax, not in PO file syntax.
jpayne@68:
Specify encoding for output. jpayne@68:
jpayne@68:Use first available translation for each message. Don't merge several jpayne@68: translations into one. jpayne@68:
jpayne@68:Specify whether or when to use colors and other text attributes.
jpayne@68: See The --color
option for details.
jpayne@68:
Specify the CSS style rule file to use for --color
.
jpayne@68: See The --style
option for details.
jpayne@68:
Always write an output file even if it contains no message. jpayne@68:
jpayne@68:Write the .po file using indented style. jpayne@68:
jpayne@68:Do not write ‘#: filename:line’ lines. jpayne@68:
jpayne@68:Generate ‘#: filename:line’ lines (default). jpayne@68:
jpayne@68:The optional type can be either ‘full’, ‘file’, or
jpayne@68: ‘never’. If it is not given or ‘full’, it generates the
jpayne@68: lines with both file name and line number. If it is ‘file’, the
jpayne@68: line number part is omitted. If it is ‘never’, it completely
jpayne@68: suppresses the lines (same as --no-location
).
jpayne@68:
Write out a strict Uniforum conforming PO file. Note that this jpayne@68: Uniforum format should be avoided because it doesn't support the jpayne@68: GNU extensions. jpayne@68:
jpayne@68:Write out a Java ResourceBundle in Java .properties
syntax. Note
jpayne@68: that this file format doesn't support plural forms and silently drops
jpayne@68: obsolete messages.
jpayne@68:
Write out a NeXTstep/GNUstep localized resource file in .strings
syntax.
jpayne@68: Note that this file format doesn't support plural forms.
jpayne@68:
Set the output page width. Long strings in the output files will be jpayne@68: split across multiple lines in order to ensure that each line's width jpayne@68: (= number of screen columns) is less or equal to the given number. jpayne@68:
jpayne@68:Do not break long message lines. Message lines whose width exceeds the jpayne@68: output page width will not be split into several lines. Only file reference jpayne@68: lines which are wider than the output page width will be split. jpayne@68:
jpayne@68:Generate sorted output. Note that using this option makes it much harder jpayne@68: for the translator to understand each message's context. jpayne@68:
jpayne@68:Sort output by file location. jpayne@68:
jpayne@68:Display this help and exit. jpayne@68:
jpayne@68:Output version information and exit. jpayne@68:
jpayne@68:msgcomm
Program msgcomm [option] [inputfile]... jpayne@68: |
The msgcomm
program finds messages which are common to two or more
jpayne@68: of the specified PO files.
jpayne@68: By using the --more-than
option, greater commonality may be requested
jpayne@68: before messages are printed. Conversely, the --less-than
option may be
jpayne@68: used to specify less commonality before messages are printed (i.e.
jpayne@68: ‘--less-than=2’ will only print the unique messages). Translations,
jpayne@68: comments and extracted comments will be preserved, but only from the first
jpayne@68: PO file to define them. File positions from all PO files will be
jpayne@68: cumulated.
jpayne@68:
Input files. jpayne@68:
jpayne@68:Read the names of the input files from file instead of getting jpayne@68: them from the command line. jpayne@68:
jpayne@68:Add directory to the list of directories. Source files are jpayne@68: searched relative to this list of directories. The resulting ‘.po’ jpayne@68: file will be written relative to the current directory, though. jpayne@68:
jpayne@68:If inputfile is ‘-’, standard input is read. jpayne@68:
jpayne@68: jpayne@68: jpayne@68:Write output to specified file. jpayne@68:
jpayne@68:The results are written to standard output if no output file is specified jpayne@68: or if it is ‘-’. jpayne@68:
jpayne@68: jpayne@68: jpayne@68:Print messages with less than number definitions, defaults to infinite jpayne@68: if not set. jpayne@68:
jpayne@68:Print messages with more than number definitions, defaults to 1 if not jpayne@68: set. jpayne@68:
jpayne@68:Shorthand for ‘--less-than=2’. Requests that only unique messages be jpayne@68: printed. jpayne@68:
jpayne@68:Assume the input files are Java ResourceBundles in Java .properties
jpayne@68: syntax, not in PO file syntax.
jpayne@68:
Assume the input files are NeXTstep/GNUstep localized resource files in
jpayne@68: .strings
syntax, not in PO file syntax.
jpayne@68:
Specify whether or when to use colors and other text attributes.
jpayne@68: See The --color
option for details.
jpayne@68:
Specify the CSS style rule file to use for --color
.
jpayne@68: See The --style
option for details.
jpayne@68:
Always write an output file even if it contains no message. jpayne@68:
jpayne@68:Write the .po file using indented style. jpayne@68:
jpayne@68:Do not write ‘#: filename:line’ lines. jpayne@68:
jpayne@68:Generate ‘#: filename:line’ lines (default). jpayne@68:
jpayne@68:The optional type can be either ‘full’, ‘file’, or
jpayne@68: ‘never’. If it is not given or ‘full’, it generates the
jpayne@68: lines with both file name and line number. If it is ‘file’, the
jpayne@68: line number part is omitted. If it is ‘never’, it completely
jpayne@68: suppresses the lines (same as --no-location
).
jpayne@68:
Write out a strict Uniforum conforming PO file. Note that this jpayne@68: Uniforum format should be avoided because it doesn't support the jpayne@68: GNU extensions. jpayne@68:
jpayne@68:Write out a Java ResourceBundle in Java .properties
syntax. Note
jpayne@68: that this file format doesn't support plural forms and silently drops
jpayne@68: obsolete messages.
jpayne@68:
Write out a NeXTstep/GNUstep localized resource file in .strings
syntax.
jpayne@68: Note that this file format doesn't support plural forms.
jpayne@68:
Set the output page width. Long strings in the output files will be jpayne@68: split across multiple lines in order to ensure that each line's width jpayne@68: (= number of screen columns) is less or equal to the given number. jpayne@68:
jpayne@68:Do not break long message lines. Message lines whose width exceeds the jpayne@68: output page width will not be split into several lines. Only file reference jpayne@68: lines which are wider than the output page width will be split. jpayne@68:
jpayne@68:Generate sorted output. Note that using this option makes it much harder jpayne@68: for the translator to understand each message's context. jpayne@68:
jpayne@68:Sort output by file location. jpayne@68:
jpayne@68:Don't write header with ‘msgid ""’ entry. jpayne@68:
jpayne@68:Display this help and exit. jpayne@68:
jpayne@68:Output version information and exit. jpayne@68:
jpayne@68:msgcmp
Program msgcmp [option] def.po ref.pot jpayne@68: |
The msgcmp
program compares two Uniforum style .po files to check that
jpayne@68: both contain the same set of msgid strings. The def.po file is an
jpayne@68: existing PO file with the translations. The ref.pot file is the last
jpayne@68: created PO file, or a PO Template file (generally created by xgettext
).
jpayne@68: This is useful for checking that you have translated each and every message
jpayne@68: in your program. Where an exact match cannot be found, fuzzy matching is
jpayne@68: used to produce better diagnostics.
jpayne@68:
Translations. jpayne@68:
jpayne@68:References to the sources. jpayne@68:
jpayne@68:Add directory to the list of directories. Source files are jpayne@68: searched relative to this list of directories. jpayne@68:
jpayne@68:Apply ref.pot to each of the domains in def.po. jpayne@68:
jpayne@68:Do not use fuzzy matching when an exact match is not found. This may speed jpayne@68: up the operation considerably. jpayne@68:
jpayne@68:Consider fuzzy messages in the def.po file like translated messages. jpayne@68: Note that using this option is usually wrong, because fuzzy messages are jpayne@68: exactly those which have not been validated by a human translator. jpayne@68:
jpayne@68:Consider untranslated messages in the def.po file like translated jpayne@68: messages. Note that using this option is usually wrong. jpayne@68:
jpayne@68:Assume the input files are Java ResourceBundles in Java .properties
jpayne@68: syntax, not in PO file syntax.
jpayne@68:
Assume the input files are NeXTstep/GNUstep localized resource files in
jpayne@68: .strings
syntax, not in PO file syntax.
jpayne@68:
Display this help and exit. jpayne@68:
jpayne@68:Output version information and exit. jpayne@68:
jpayne@68:msgattrib
Program msgattrib [option] [inputfile] jpayne@68: |
The msgattrib
program filters the messages of a translation catalog
jpayne@68: according to their attributes, and manipulates the attributes.
jpayne@68:
Input PO file. jpayne@68:
jpayne@68:Add directory to the list of directories. Source files are jpayne@68: searched relative to this list of directories. The resulting ‘.po’ jpayne@68: file will be written relative to the current directory, though. jpayne@68:
jpayne@68:If no inputfile is given or if it is ‘-’, standard input is read. jpayne@68:
jpayne@68: jpayne@68: jpayne@68:Write output to specified file. jpayne@68:
jpayne@68:The results are written to standard output if no output file is specified jpayne@68: or if it is ‘-’. jpayne@68:
jpayne@68: jpayne@68: jpayne@68:Keep translated messages, remove untranslated messages. jpayne@68:
jpayne@68:Keep untranslated messages, remove translated messages. jpayne@68:
jpayne@68:Remove jpayne@68: ‘fuzzy’ jpayne@68: marked messages. jpayne@68:
jpayne@68:Keep jpayne@68: ‘fuzzy’ jpayne@68: marked messages, remove all other messages. jpayne@68:
jpayne@68:Remove obsolete #~ messages. jpayne@68:
jpayne@68:Keep obsolete #~ messages, remove all other messages. jpayne@68:
jpayne@68:Attributes are modified after the message selection/removal has been jpayne@68: performed. If the ‘--only-file’ or ‘--ignore-file’ option is jpayne@68: specified, the attribute modification is applied only to those messages jpayne@68: that are listed in the only-file and not listed in the jpayne@68: ignore-file. jpayne@68:
jpayne@68:Set all messages jpayne@68: ‘fuzzy’. jpayne@68:
jpayne@68:Set all messages jpayne@68: non-‘fuzzy’. jpayne@68:
jpayne@68:Set all messages obsolete. jpayne@68:
jpayne@68:Set all messages non-obsolete. jpayne@68:
jpayne@68:When setting jpayne@68: ‘fuzzy’ jpayne@68: mark, keep “previous msgid” of translated messages. jpayne@68:
jpayne@68:Remove the “previous msgid” (‘#|’) comments from all messages. jpayne@68:
jpayne@68:When removing jpayne@68: ‘fuzzy’ jpayne@68: mark, also set msgstr empty. jpayne@68:
jpayne@68:Limit the attribute changes to entries that are listed in file. jpayne@68: file should be a PO or POT file. jpayne@68:
jpayne@68:Limit the attribute changes to entries that are not listed in file. jpayne@68: file should be a PO or POT file. jpayne@68:
jpayne@68:Synonym for ‘--only-fuzzy --clear-fuzzy’: It keeps only the fuzzy jpayne@68: messages and removes their jpayne@68: ‘fuzzy’ jpayne@68: mark. jpayne@68:
jpayne@68:Synonym for ‘--only-obsolete --clear-obsolete’: It keeps only the jpayne@68: obsolete messages and makes them non-obsolete. jpayne@68:
jpayne@68:Assume the input file is a Java ResourceBundle in Java .properties
jpayne@68: syntax, not in PO file syntax.
jpayne@68:
Assume the input file is a NeXTstep/GNUstep localized resource file in
jpayne@68: .strings
syntax, not in PO file syntax.
jpayne@68:
Specify whether or when to use colors and other text attributes.
jpayne@68: See The --color
option for details.
jpayne@68:
Specify the CSS style rule file to use for --color
.
jpayne@68: See The --style
option for details.
jpayne@68:
Always write an output file even if it contains no message. jpayne@68:
jpayne@68:Write the .po file using indented style. jpayne@68:
jpayne@68:Do not write ‘#: filename:line’ lines. jpayne@68:
jpayne@68:Generate ‘#: filename:line’ lines (default). jpayne@68:
jpayne@68:The optional type can be either ‘full’, ‘file’, or
jpayne@68: ‘never’. If it is not given or ‘full’, it generates the
jpayne@68: lines with both file name and line number. If it is ‘file’, the
jpayne@68: line number part is omitted. If it is ‘never’, it completely
jpayne@68: suppresses the lines (same as --no-location
).
jpayne@68:
Write out a strict Uniforum conforming PO file. Note that this jpayne@68: Uniforum format should be avoided because it doesn't support the jpayne@68: GNU extensions. jpayne@68:
jpayne@68:Write out a Java ResourceBundle in Java .properties
syntax. Note
jpayne@68: that this file format doesn't support plural forms and silently drops
jpayne@68: obsolete messages.
jpayne@68:
Write out a NeXTstep/GNUstep localized resource file in .strings
syntax.
jpayne@68: Note that this file format doesn't support plural forms.
jpayne@68:
Set the output page width. Long strings in the output files will be jpayne@68: split across multiple lines in order to ensure that each line's width jpayne@68: (= number of screen columns) is less or equal to the given number. jpayne@68:
jpayne@68:Do not break long message lines. Message lines whose width exceeds the jpayne@68: output page width will not be split into several lines. Only file reference jpayne@68: lines which are wider than the output page width will be split. jpayne@68:
jpayne@68:Generate sorted output. Note that using this option makes it much harder jpayne@68: for the translator to understand each message's context. jpayne@68:
jpayne@68:Sort output by file location. jpayne@68:
jpayne@68:Display this help and exit. jpayne@68:
jpayne@68:Output version information and exit. jpayne@68:
jpayne@68:msgen
Program msgen [option] inputfile jpayne@68: |
The msgen
program creates an English translation catalog. The
jpayne@68: input file is the last created English PO file, or a PO Template file
jpayne@68: (generally created by xgettext). Untranslated entries are assigned a
jpayne@68: translation that is identical to the msgid.
jpayne@68:
Note: ‘msginit --no-translator --locale=en’ performs a very similar
jpayne@68: task. The main difference is that msginit
cares specially about
jpayne@68: the header entry, whereas msgen
doesn't.
jpayne@68:
Input PO or POT file. jpayne@68:
jpayne@68:Add directory to the list of directories. Source files are jpayne@68: searched relative to this list of directories. The resulting ‘.po’ jpayne@68: file will be written relative to the current directory, though. jpayne@68:
jpayne@68:If inputfile is ‘-’, standard input is read. jpayne@68:
jpayne@68: jpayne@68: jpayne@68:Write output to specified file. jpayne@68:
jpayne@68:The results are written to standard output if no output file is specified jpayne@68: or if it is ‘-’. jpayne@68:
jpayne@68: jpayne@68: jpayne@68:Assume the input file is a Java ResourceBundle in Java .properties
jpayne@68: syntax, not in PO file syntax.
jpayne@68:
Assume the input file is a NeXTstep/GNUstep localized resource file in
jpayne@68: .strings
syntax, not in PO file syntax.
jpayne@68:
Specify the ‘Language’ field to be used in the header entry. See jpayne@68: Filling in the Header Entry for the meaning of this field. Note: The jpayne@68: ‘Language-Team’ and ‘Plural-Forms’ fields are not set by this jpayne@68: option. jpayne@68:
jpayne@68:Specify whether or when to use colors and other text attributes.
jpayne@68: See The --color
option for details.
jpayne@68:
Specify the CSS style rule file to use for --color
.
jpayne@68: See The --style
option for details.
jpayne@68:
Always write an output file even if it contains no message. jpayne@68:
jpayne@68:Write the .po file using indented style. jpayne@68:
jpayne@68:Do not write ‘#: filename:line’ lines. jpayne@68:
jpayne@68:Generate ‘#: filename:line’ lines (default). jpayne@68:
jpayne@68:The optional type can be either ‘full’, ‘file’, or
jpayne@68: ‘never’. If it is not given or ‘full’, it generates the
jpayne@68: lines with both file name and line number. If it is ‘file’, the
jpayne@68: line number part is omitted. If it is ‘never’, it completely
jpayne@68: suppresses the lines (same as --no-location
).
jpayne@68:
Write out a strict Uniforum conforming PO file. Note that this jpayne@68: Uniforum format should be avoided because it doesn't support the jpayne@68: GNU extensions. jpayne@68:
jpayne@68:Write out a Java ResourceBundle in Java .properties
syntax. Note
jpayne@68: that this file format doesn't support plural forms and silently drops
jpayne@68: obsolete messages.
jpayne@68:
Write out a NeXTstep/GNUstep localized resource file in .strings
syntax.
jpayne@68: Note that this file format doesn't support plural forms.
jpayne@68:
Set the output page width. Long strings in the output files will be jpayne@68: split across multiple lines in order to ensure that each line's width jpayne@68: (= number of screen columns) is less or equal to the given number. jpayne@68:
jpayne@68:Do not break long message lines. Message lines whose width exceeds the jpayne@68: output page width will not be split into several lines. Only file reference jpayne@68: lines which are wider than the output page width will be split. jpayne@68:
jpayne@68:Generate sorted output. Note that using this option makes it much harder jpayne@68: for the translator to understand each message's context. jpayne@68:
jpayne@68:Sort output by file location. jpayne@68:
jpayne@68:Display this help and exit. jpayne@68:
jpayne@68:Output version information and exit. jpayne@68:
jpayne@68:msgexec
Program msgexec [option] command [command-option] jpayne@68: |
The msgexec
program applies a command to all translations of a
jpayne@68: translation catalog.
jpayne@68: The command can be any program that reads a translation from standard
jpayne@68: input. It is invoked once for each translation. Its output becomes
jpayne@68: msgexec's output. msgexec
's return code is the maximum return code
jpayne@68: across all invocations.
jpayne@68:
A special builtin command called ‘0’ outputs the translation, followed jpayne@68: by a null byte. The output of ‘msgexec 0’ is suitable as input for jpayne@68: ‘xargs -0’. jpayne@68:
jpayne@68:Add newline at the end of each input line. jpayne@68:
jpayne@68:During each command invocation, the environment variable
jpayne@68: MSGEXEC_MSGID
is bound to the message's msgid, and the environment
jpayne@68: variable MSGEXEC_LOCATION
is bound to the location in the PO file
jpayne@68: of the message. If the message has a context, the environment variable
jpayne@68: MSGEXEC_MSGCTXT
is bound to the message's msgctxt, otherwise it is
jpayne@68: unbound. If the message has a plural form, environment variable
jpayne@68: MSGEXEC_MSGID_PLURAL
is bound to the message's msgid_plural and
jpayne@68: MSGEXEC_PLURAL_FORM
is bound to the order number of the plural
jpayne@68: actually processed (starting with 0), otherwise both are unbound.
jpayne@68: If the message has a previous msgid (added by msgmerge
),
jpayne@68: environment variable MSGEXEC_PREV_MSGCTXT
is bound to the
jpayne@68: message's previous msgctxt, MSGEXEC_PREV_MSGID
is bound to
jpayne@68: the previous msgid, and MSGEXEC_PREV_MSGID_PLURAL
is bound to
jpayne@68: the previous msgid_plural.
jpayne@68:
Note: It is your responsibility to ensure that the command can cope
jpayne@68: with input encoded in the translation catalog's encoding. If the
jpayne@68: command wants input in a particular encoding, you can in a first step
jpayne@68: convert the translation catalog to that encoding using the ‘msgconv’
jpayne@68: program, before invoking ‘msgexec’. If the command wants input
jpayne@68: in the locale's encoding, but you want to avoid the locale's encoding, then
jpayne@68: you can first convert the translation catalog to UTF-8 using the
jpayne@68: ‘msgconv’ program and then make ‘msgexec’ work in an UTF-8
jpayne@68: locale, by using the LC_ALL
environment variable.
jpayne@68:
Input PO file. jpayne@68:
jpayne@68:Add directory to the list of directories. Source files are jpayne@68: searched relative to this list of directories. The resulting ‘.po’ jpayne@68: file will be written relative to the current directory, though. jpayne@68:
jpayne@68:If no inputfile is given or if it is ‘-’, standard input is read. jpayne@68:
jpayne@68: jpayne@68: jpayne@68:Assume the input file is a Java ResourceBundle in Java .properties
jpayne@68: syntax, not in PO file syntax.
jpayne@68:
Assume the input file is a NeXTstep/GNUstep localized resource file in
jpayne@68: .strings
syntax, not in PO file syntax.
jpayne@68:
Display this help and exit. jpayne@68:
jpayne@68:Output version information and exit. jpayne@68:
jpayne@68:Translators are usually only interested in seeing the untranslated and jpayne@68: fuzzy messages of a PO file. Also, when a message is set fuzzy because jpayne@68: the msgid changed, they want to see the differences between the previous jpayne@68: msgid and the current one (especially if the msgid is long and only few jpayne@68: words in it have changed). Finally, it's always welcome to highlight the jpayne@68: different sections of a message in a PO file (comments, msgid, msgstr, etc.). jpayne@68:
jpayne@68:Such highlighting is possible through the options ‘--color’ and
jpayne@68: ‘--style’. They are supported by all the programs that produce
jpayne@68: a PO file on standard output, such as msgcat
, msgmerge
,
jpayne@68: and msgunfmt
.
jpayne@68:
--color
option The ‘--color=when’ option specifies under which conditions jpayne@68: colorized output should be generated. The when part can be one of jpayne@68: the following: jpayne@68:
jpayne@68:always
yes
The output will be colorized. jpayne@68:
jpayne@68:never
no
The output will not be colorized. jpayne@68:
jpayne@68:auto
tty
The output will be colorized if the output device is a tty, i.e. when the jpayne@68: output goes directly to a text screen or terminal emulator window. jpayne@68:
jpayne@68:html
The output will be colorized and be in HTML format. jpayne@68:
jpayne@68:test
This is a special value, understood only by the msgcat
program. It
jpayne@68: is explained in the next section (The environment variable TERM
).
jpayne@68:
‘--color’ is equivalent to ‘--color=yes’. The default is jpayne@68: ‘--color=auto’. jpayne@68:
jpayne@68:Thus, a command like ‘msgcat vi.po’ will produce colorized output jpayne@68: when called by itself in a command window. Whereas in a pipe, such as jpayne@68: ‘msgcat vi.po | less -R’, it will not produce colorized output. To jpayne@68: get colorized output in this situation nevertheless, use the command jpayne@68: ‘msgcat --color vi.po | less -R’. jpayne@68:
jpayne@68:The ‘--color=html’ option will produce output that can be viewed in jpayne@68: a browser. This can be useful, for example, for Indic languages, jpayne@68: because the renderic of Indic scripts in browsers is usually better than jpayne@68: in terminal emulators. jpayne@68:
jpayne@68:Note that the output produced with the --color
option is not
jpayne@68: a valid PO file in itself. It contains additional terminal-specific escape
jpayne@68: sequences or HTML tags. A PO file reader will give a syntax error when
jpayne@68: confronted with such content. Except for the ‘--color=html’ case,
jpayne@68: you therefore normally don't need to save output produced with the
jpayne@68: --color
option in a file.
jpayne@68:
TERM
The environment variable TERM
contains a identifier for the text
jpayne@68: window's capabilities. You can get a detailed list of these cababilities
jpayne@68: by using the ‘infocmp’ command, using ‘man 5 terminfo’ as a
jpayne@68: reference.
jpayne@68:
When producing text with embedded color directives, msgcat
looks
jpayne@68: at the TERM
variable. Text windows today typically support at least
jpayne@68: 8 colors. Often, however, the text window supports 16 or more colors,
jpayne@68: even though the TERM
variable is set to a identifier denoting only
jpayne@68: 8 supported colors. It can be worth setting the TERM
variable to
jpayne@68: a different value in these cases:
jpayne@68:
xterm
xterm
is in most cases built with support for 16 colors. It can also
jpayne@68: be built with support for 88 or 256 colors (but not both). You can try to
jpayne@68: set TERM
to either xterm-16color
, xterm-88color
, or
jpayne@68: xterm-256color
.
jpayne@68:
rxvt
rxvt
is often built with support for 16 colors. You can try to set
jpayne@68: TERM
to rxvt-16color
.
jpayne@68:
konsole
konsole
too is often built with support for 16 colors. You can try to
jpayne@68: set TERM
to konsole-16color
or xterm-16color
.
jpayne@68:
After setting TERM
, you can verify it by invoking
jpayne@68: ‘msgcat --color=test’ and seeing whether the output looks like a
jpayne@68: reasonable color map.
jpayne@68:
--style
option The ‘--style=style_file’ option specifies the style file to use
jpayne@68: when colorizing. It has an effect only when the --color
option is
jpayne@68: effective.
jpayne@68:
If the --style
option is not specified, the environment variable
jpayne@68: PO_STYLE
is considered. It is meant to point to the user's
jpayne@68: preferred style for PO files.
jpayne@68:
The default style file is ‘$prefix/share/gettext/styles/po-default.css’,
jpayne@68: where $prefix
is the installation location.
jpayne@68:
A few style files are predefined: jpayne@68:
This style imitates the look used by vim 7. jpayne@68:
jpayne@68:This style imitates the look used by GNU Emacs 21 and 22 in an X11 window. jpayne@68:
jpayne@68:This style imitates the look used by GNU Emacs 22 in a terminal of type jpayne@68: ‘xterm’ (8 colors) or ‘xterm-16color’ (16 colors) or jpayne@68: ‘xterm-256color’ (256 colors), respectively. jpayne@68:
You can use these styles without specifying a directory. They are actually
jpayne@68: located in ‘$prefix/share/gettext/styles/’, where $prefix
is the
jpayne@68: installation location.
jpayne@68:
You can also design your own styles. This is described in the next section. jpayne@68:
jpayne@68: jpayne@68: jpayne@68: jpayne@68: jpayne@68:The same style file can be used for styling of a PO file, for terminal jpayne@68: output and for HTML output. It is written in CSS (Cascading Style Sheet) jpayne@68: syntax. See https://www.w3.org/TR/css2/cover.html for a formal jpayne@68: definition of CSS. Many HTML authoring tutorials also contain explanations jpayne@68: of CSS. jpayne@68:
jpayne@68:In the case of HTML output, the style file is embedded in the HTML output.
jpayne@68: In the case of text output, the style file is interpreted by the
jpayne@68: msgcat
program. This means, in particular, that when
jpayne@68: @import
is used with relative file names, the file names are
jpayne@68:
@import
, in the case of
jpayne@68: text output. (Actually, @import
s are not yet supported in this case,
jpayne@68: due to a limitation in libcroco
.)
jpayne@68: CSS rules are built up from selectors and declarations. The declarations jpayne@68: specify graphical properties; the selectors specify when they apply. jpayne@68:
jpayne@68:In PO files, the following simple selectors (based on "CSS classes", see jpayne@68: the CSS2 spec, section 5.8.3) are supported. jpayne@68:
jpayne@68:.header
This matches the header entry of a PO file. jpayne@68:
jpayne@68:.translated
This matches a translated message. jpayne@68:
jpayne@68:.untranslated
This matches an untranslated message (i.e. a message with empty translation). jpayne@68:
jpayne@68:.fuzzy
This matches a fuzzy message (i.e. a message which has a translation that jpayne@68: needs review by the translator). jpayne@68:
jpayne@68:.obsolete
This matches an obsolete message (i.e. a message that was translated but is jpayne@68: not needed by the current POT file any more). jpayne@68:
white-space jpayne@68: # translator-comments jpayne@68: #. extracted-comments jpayne@68: #: reference… jpayne@68: #, flag… jpayne@68: #| msgid previous-untranslated-string jpayne@68: msgid untranslated-string jpayne@68: msgstr translated-string jpayne@68: |
.comment
This matches all comments (translator comments, extracted comments, jpayne@68: source file reference comments, flag comments, previous message comments, jpayne@68: as well as the entire obsolete messages). jpayne@68:
jpayne@68:.translator-comment
This matches the translator comments. jpayne@68:
jpayne@68:.extracted-comment
This matches the extracted comments, i.e. the comments placed by the jpayne@68: programmer at the attention of the translator. jpayne@68:
jpayne@68:.reference-comment
This matches the source file reference comments (entire lines). jpayne@68:
jpayne@68:.reference
This matches the individual source file references inside the source file jpayne@68: reference comment lines. jpayne@68:
jpayne@68:.flag-comment
This matches the flag comment lines (entire lines). jpayne@68:
jpayne@68:.flag
This matches the individual flags inside flag comment lines. jpayne@68:
jpayne@68:.fuzzy-flag
This matches the `fuzzy' flag inside flag comment lines. jpayne@68:
jpayne@68:.previous-comment
This matches the comments containing the previous untranslated string (entire jpayne@68: lines). jpayne@68:
jpayne@68:.previous
This matches the previous untranslated string including the string delimiters,
jpayne@68: the associated keywords (msgid
etc.) and the spaces between them.
jpayne@68:
.msgid
This matches the untranslated string including the string delimiters,
jpayne@68: the associated keywords (msgid
etc.) and the spaces between them.
jpayne@68:
.msgstr
This matches the translated string including the string delimiters,
jpayne@68: the associated keywords (msgstr
etc.) and the spaces between them.
jpayne@68:
.keyword
This matches the keywords (msgid
, msgstr
, etc.).
jpayne@68:
.string
This matches strings, including the string delimiters (double quotes). jpayne@68:
.text
This matches the entire contents of a string (excluding the string delimiters, jpayne@68: i.e. the double quotes). jpayne@68:
jpayne@68:.escape-sequence
This matches an escape sequence (starting with a backslash). jpayne@68:
jpayne@68:.format-directive
This matches a format string directive (starting with a ‘%’ sign in the
jpayne@68: case of most programming languages, with a ‘{’ in the case of
jpayne@68: java-format
and csharp-format
, with a ‘~’ in the case of
jpayne@68: lisp-format
and scheme-format
, or with ‘$’ in the case of
jpayne@68: sh-format
).
jpayne@68:
.invalid-format-directive
This matches an invalid format string directive. jpayne@68:
jpayne@68:.added
In an untranslated string, this matches a part of the string that was not jpayne@68: present in the previous untranslated string. (Not yet implemented in this jpayne@68: release.) jpayne@68:
jpayne@68:.changed
In an untranslated string or in a previous untranslated string, this matches jpayne@68: a part of the string that is changed or replaced. (Not yet implemented in jpayne@68: this release.) jpayne@68:
jpayne@68:.removed
In a previous untranslated string, this matches a part of the string that jpayne@68: is not present in the current untranslated string. (Not yet implemented in jpayne@68: this release.) jpayne@68:
These selectors can be combined to hierarchical selectors. For example, jpayne@68:
jpayne@68:.msgstr .invalid-format-directive { color: red; } jpayne@68: |
will highlight the invalid format directives in the translated strings. jpayne@68:
jpayne@68:In text mode, pseudo-classes (CSS2 spec, section 5.11) and pseudo-elements jpayne@68: (CSS2 spec, section 5.12) are not supported. jpayne@68:
jpayne@68:The declarations in HTML mode are not limited; any graphical attribute jpayne@68: supported by the browsers can be used. jpayne@68:
jpayne@68:The declarations in text mode are limited to the following properties. Other jpayne@68: properties will be silently ignored. jpayne@68:
jpayne@68:color
(CSS2 spec, section 14.1)background-color
(CSS2 spec, section 14.2.1)These properties is supported. Colors will be adjusted to match the terminal's jpayne@68: capabilities. Note that many terminals support only 8 colors. jpayne@68:
jpayne@68:font-weight
(CSS2 spec, section 15.2.3)This property is supported, but most terminals can only render two different
jpayne@68: weights: normal
and bold
. Values >= 600 are rendered as
jpayne@68: bold
.
jpayne@68:
font-style
(CSS2 spec, section 15.2.3)This property is supported. The values italic
and oblique
are
jpayne@68: rendered the same way.
jpayne@68:
text-decoration
(CSS2 spec, section 16.3.1)This property is supported, limited to the values none
and
jpayne@68: underline
.
jpayne@68:
less
for viewing PO files The ‘less’ program is a popular text file browser for use in a text jpayne@68: screen or terminal emulator. It also supports text with embedded escape jpayne@68: sequences for colors and text decorations. jpayne@68:
jpayne@68:You can use less
to view a PO file like this (assuming an UTF-8
jpayne@68: environment):
jpayne@68:
msgcat --to-code=UTF-8 --color xyz.po | less -R jpayne@68: |
You can simplify this to this simple command: jpayne@68:
jpayne@68:less xyz.po jpayne@68: |
after these three preparations: jpayne@68:
jpayne@68:LESS
environment
jpayne@68: variable. In sh shells:
jpayne@68: $ LESS="$LESS -R -f" jpayne@68: $ export LESS jpayne@68: |
LESSOPEN
and
jpayne@68: LESSCLOSE
environment variables, as indicated in the manual page
jpayne@68: (‘man less’).
jpayne@68:
jpayne@68: msgcat
on them, producing
jpayne@68: a temporary file. Like this:
jpayne@68:
jpayne@68: case "$1" in jpayne@68: *.po) jpayne@68: tmpfile=`mktemp "${TMPDIR-/tmp}/less.XXXXXX"` jpayne@68: msgcat --to-code=UTF-8 --color "$1" > "$tmpfile" jpayne@68: echo "$tmpfile" jpayne@68: exit 0 jpayne@68: ;; jpayne@68: esac jpayne@68: |
The “Pology” package is a Free Software package for manipulating PO files. jpayne@68: It features, in particular: jpayne@68:
jpayne@68:Its home page is at http://pology.nedohodnik.net/. jpayne@68:
jpayne@68: jpayne@68: jpayne@68: jpayne@68:For the tasks for which a combination of ‘msgattrib’, ‘msgcat’ etc. jpayne@68: is not sufficient, a set of C functions is provided in a library, to make it jpayne@68: possible to process PO files in your own programs. When you use this library, jpayne@68: you don't need to write routines to parse the PO file; instead, you retrieve jpayne@68: a pointer in memory to each of messages contained in the PO file. Functions jpayne@68: for writing those memory structures to a file after working with them are jpayne@68: provided too. jpayne@68:
jpayne@68:The functions are declared in the header file ‘<gettext-po.h>’, and are jpayne@68: defined in a library called ‘libgettextpo’. jpayne@68:
jpayne@68: jpayne@68:The following example shows code how these functions can be used. Error jpayne@68: handling code is omitted, as its implementation is delegated to the user jpayne@68: provided functions. jpayne@68:
jpayne@68:struct po_xerror_handler handler = jpayne@68: { jpayne@68: .xerror = …, jpayne@68: .xerror2 = … jpayne@68: }; jpayne@68: const char *filename = …; jpayne@68: /* Read the file into memory. */ jpayne@68: po_file_t file = po_file_read (filename, &handler); jpayne@68: jpayne@68: { jpayne@68: const char * const *domains = po_file_domains (file); jpayne@68: const char * const *domainp; jpayne@68: jpayne@68: /* Iterate the domains contained in the file. */ jpayne@68: for (domainp = domains; *domainp; domainp++) jpayne@68: { jpayne@68: po_message_t *message; jpayne@68: const char *domain = *domainp; jpayne@68: po_message_iterator_t iterator = po_message_iterator (file, domain); jpayne@68: jpayne@68: /* Iterate each message inside the domain. */ jpayne@68: while ((message = po_next_message (iterator)) != NULL) jpayne@68: { jpayne@68: /* Read data from the message … */ jpayne@68: const char *msgid = po_message_msgid (message); jpayne@68: const char *msgstr = po_message_msgstr (message); jpayne@68: jpayne@68: … jpayne@68: jpayne@68: /* Modify its contents … */ jpayne@68: if (perform_some_tests (msgid, msgstr)) jpayne@68: po_message_set_fuzzy (message, 1); jpayne@68: jpayne@68: … jpayne@68: } jpayne@68: /* Always release returned po_message_iterator_t. */ jpayne@68: po_message_iterator_free (iterator); jpayne@68: } jpayne@68: jpayne@68: /* Write back the result. */ jpayne@68: po_file_t result = po_file_write (file, filename, &handler); jpayne@68: } jpayne@68: jpayne@68: /* Always release the returned po_file_t. */ jpayne@68: po_file_free (file); jpayne@68: |
Error management is performed through callbacks provided by the user of jpayne@68: the library. They are provided through a parameter with the following jpayne@68: type: jpayne@68:
jpayne@68:Its pointer is defined as po_xerror_handler_t
. Contains
jpayne@68: two fields, xerror
and xerror2
, with the following function
jpayne@68: signatures.
jpayne@68:
This function is called to signal a problem of the given severity.
jpayne@68: It must not return if severity is
jpayne@68: PO_SEVERITY_FATAL_ERROR
.
jpayne@68:
message_text is the problem description. When multiline_p jpayne@68: is true, it can contain multiple lines of text, each terminated with a jpayne@68: newline, otherwise a single line. jpayne@68:
jpayne@68:message and/or filename and lineno indicate where the jpayne@68: problem occurred: jpayne@68:
jpayne@68:NULL
, filename and lineno and
jpayne@68: column should be ignored.
jpayne@68:
jpayne@68: (size_t)(-1)
, lineno and column
jpayne@68: should be ignored.
jpayne@68:
jpayne@68: (size_t)(-1)
, it should be ignored.
jpayne@68: This function is called to signal a problem of the given severity
jpayne@68: that refers to two messages. It must not return if
jpayne@68: severity is PO_SEVERITY_FATAL_ERROR
.
jpayne@68:
It is similar to two calls to xerror. If possible, an ellipsis can be jpayne@68: appended to message_text1 and prepended to message_text2. jpayne@68:
This is a pointer type that refers to the contents of a PO file, after it has jpayne@68: been read into memory. jpayne@68:
The po_file_create
function creates an empty PO file representation in
jpayne@68: memory.
jpayne@68:
The po_file_read
function reads a PO file into memory. The file name
jpayne@68: is given as argument. The return value is a handle to the PO file's contents,
jpayne@68: valid until po_file_free
is called on it. In case of error, the
jpayne@68: functions from handler are called to signal it.
jpayne@68:
This function is exported as ‘po_file_read_v3’ at ABI level, but is
jpayne@68: defined as po_file_read
in C code after the inclusion of
jpayne@68: ‘<gettext-po.h>’.
jpayne@68:
The po_file_write
function writes the contents of the memory
jpayne@68: structure file the filename given. The return value is
jpayne@68: file after a successful operation. In case of error, the
jpayne@68: functions from handler are called to signal it.
jpayne@68:
This function is exported as ‘po_file_write_v2’ at ABI level, but
jpayne@68: is defined as po_file_write
in C code after the inclusion of
jpayne@68: ‘<gettext-po.h>’.
jpayne@68:
The po_file_free
function frees a PO file's contents from memory,
jpayne@68: including all messages that are only implicitly accessible through iterators.
jpayne@68:
The po_file_domains
function returns the domains for which the given
jpayne@68: PO file has messages. The return value is a NULL
terminated array
jpayne@68: which is valid as long as the file handle is valid. For PO files which
jpayne@68: contain no ‘domain’ directive, the return value contains only one domain,
jpayne@68: namely the default domain "messages"
.
jpayne@68:
This is a pointer type that refers to an iterator that produces a sequence of jpayne@68: messages. jpayne@68:
The po_message_iterator
returns an iterator that will produce the
jpayne@68: messages of file that belong to the given domain. If domain
jpayne@68: is NULL
, the default domain is used instead. To list the messages,
jpayne@68: use the function po_next_message
repeatedly.
jpayne@68:
The po_message_iterator_free
function frees an iterator previously
jpayne@68: allocated through the po_message_iterator
function.
jpayne@68:
The po_next_message
function returns the next message from
jpayne@68: iterator and advances the iterator. It returns NULL
when the
jpayne@68: iterator has reached the end of its message list.
jpayne@68:
This is a pointer type that refers to a message of a PO file, including its jpayne@68: translation. jpayne@68:
Returns a freshly constructed message. To finish initializing the
jpayne@68: message, you must set the msgid
and msgstr
. It must be
jpayne@68: inserted into a file to manage its memory, as there is no
jpayne@68: po_message_free
available to the user of the library.
jpayne@68:
The following functions access details of a po_message_t
. Recall
jpayne@68: that the results are valid as long as the file handle is valid.
jpayne@68:
The po_message_msgctxt
function returns the msgctxt
, the
jpayne@68: context of message. Returns NULL
for a message not restricted
jpayne@68: to a context.
jpayne@68:
The po_message_set_msgctxt
function changes the msgctxt
,
jpayne@68: the context of the message, to the value provided through
jpayne@68: msgctxt. The value NULL
removes the restriction.
jpayne@68:
The po_message_msgid
function returns the msgid
(untranslated
jpayne@68: English string) of message. This is guaranteed to be non-NULL
.
jpayne@68:
The po_message_set_msgid
function changes the msgid
jpayne@68: (untranslated English string) of message to the value provided through
jpayne@68: msgid, a non-NULL
string.
jpayne@68:
The po_message_msgid_plural
function returns the msgid_plural
jpayne@68: (untranslated English plural string) of message, a message with plurals,
jpayne@68: or NULL
for a message without plural.
jpayne@68:
The po_message_set_msgid_plural
function changes the
jpayne@68: msgid_plural
(untranslated English plural string) of a message to
jpayne@68: the value provided through msgid_plural, or removes the plurals if
jpayne@68: NULL
is provided as msgid_plural.
jpayne@68:
The po_message_msgstr
function returns the msgstr
(translation)
jpayne@68: of message. For an untranslated message, the return value is an empty
jpayne@68: string.
jpayne@68:
The po_message_set_msgstr
function changes the msgstr
jpayne@68: (translation) of message to the value provided through msgstr, a
jpayne@68: non-NULL
string.
jpayne@68:
The po_message_msgstr_plural
function returns the
jpayne@68: msgstr[index]
of message, a message with plurals, or
jpayne@68: NULL
when the index is out of range or for a message without
jpayne@68: plural.
jpayne@68:
The po_message_set_msgstr_plural
function changes the
jpayne@68: msgstr[index]
of message, a message with plurals, to
jpayne@68: the value provided through msgstr_plural. message must be a
jpayne@68: message with plurals.
jpayne@68: Use NULL
as the value of msgstr_plural with
jpayne@68: index pointing to the last element to reduce the number of plural
jpayne@68: forms.
jpayne@68:
The po_message_comments
function returns the comments of message,
jpayne@68: a multiline string, ending in a newline, or a non-NULL
empty string.
jpayne@68:
The po_message_set_comments
function changes the comments of
jpayne@68: message to the value comments, a multiline string, ending in a
jpayne@68: newline, or a non-NULL
empty string.
jpayne@68:
The po_message_extracted_comments
function returns the extracted
jpayne@68: comments of message, a multiline string, ending in a newline, or a
jpayne@68: non-NULL
empty string.
jpayne@68:
The po_message_set_extracted_comments
function changes the
jpayne@68: comments of message to the value extracted_comments, a multiline
jpayne@68: string, ending in a newline, or a non-NULL
empty string.
jpayne@68:
The po_message_prev_msgctxt
function returns the previous
jpayne@68: msgctxt
, the previous context of message. Return
jpayne@68: NULL
for a message that does not have a previous context.
jpayne@68:
The po_message_set_prev_msgctxt
function changes the previous
jpayne@68: msgctxt
, the context of the message, to the value provided
jpayne@68: through prev_msgctxt. The value NULL
removes the stored
jpayne@68: previous msgctxt.
jpayne@68:
The po_message_prev_msgid
function returns the previous
jpayne@68: msgid
(untranslated English string) of message, or
jpayne@68: NULL
if there is no previous msgid
stored.
jpayne@68:
The po_message_set_prev_msgid
function changes the previous
jpayne@68: msgid
(untranslated English string) of message to the value
jpayne@68: provided through prev_msgid, or removes the message when it is
jpayne@68: NULL
.
jpayne@68:
The po_message_prev_msgid_plural
function returns the previous
jpayne@68: msgid_plural
(untranslated English plural string) of
jpayne@68: message, a message with plurals, or NULL
for a message
jpayne@68: without plural without any stored previous msgid_plural
.
jpayne@68:
The po_message_set_prev_msgid_plural
function changes the
jpayne@68: previous msgid_plural
(untranslated English plural string) of a
jpayne@68: message to the value provided through prev_msgid_plural, or
jpayne@68: removes the stored previous msgid_plural
if NULL
is
jpayne@68: provided as prev_msgid_plural.
jpayne@68:
The po_message_is_obsolete
function returns true when message
jpayne@68: is marked as obsolete.
jpayne@68:
The po_message_set_obsolete
function changes the obsolete mark of
jpayne@68: message.
jpayne@68:
The po_message_is_fuzzy
function returns true when message
jpayne@68: is marked as fuzzy.
jpayne@68:
The po_message_set_fuzzy
function changes the fuzzy mark of
jpayne@68: message.
jpayne@68:
The po_message_is_format
function returns true when the message
jpayne@68: is marked as being a format string of format_type.
jpayne@68:
The po_message_set_fuzzy
function changes the format mark of
jpayne@68: the message for the format_type provided.
jpayne@68:
The po_message_is_range
function returns true when the message
jpayne@68: has a numeric range set, and stores the minimum and maximum value in the
jpayne@68: locations pointed by minp and maxp respectively.
jpayne@68:
The po_message_set_range
function changes the numeric range of
jpayne@68: the message. min and max must be non-negative, with
jpayne@68: min < max. Use min and max with value -1
jpayne@68: to remove the numeric range of message.
jpayne@68:
The following functions provide an interface to extract and manipulate
jpayne@68: the header entry (see section Filling in the Header Entry) from a file loaded in memory.
jpayne@68: The meta information must be written back into the domain message with
jpayne@68: the empty string as msgid
.
jpayne@68:
Returns the header entry of a domain from file, a PO file loaded in
jpayne@68: memory. The value NULL
provided as domain denotes the
jpayne@68: default domain. Returns NULL
if there is no header entry.
jpayne@68:
Returns the value of field in the header entry. The return
jpayne@68: value is either a freshly allocated string, to be freed by the caller,
jpayne@68: or NULL
.
jpayne@68:
Returns a freshly allocated string which contains the entry from jpayne@68: header with field set to value. The field is added if jpayne@68: necessary. jpayne@68:
This is a pointer type that refers to a string's position within a jpayne@68: source file. jpayne@68:
The following functions provide an interface to extract and manipulate jpayne@68: these references. jpayne@68:
jpayne@68:Returns the file reference in position index from the message. If
jpayne@68: index is out of range, returns NULL
.
jpayne@68:
Removes the file reference in position index from the message. It jpayne@68: moves all references following index one position backwards. jpayne@68:
Adds a reference to the string from file starting at
jpayne@68: start_line, if it is not already present for the message. The
jpayne@68: value (size_t)(-1)
for start_line denotes that the line
jpayne@68: number is not available.
jpayne@68:
Returns a NULL
terminated array of the supported format types.
jpayne@68:
Returns the pretty name associated with format_type. For example,
jpayne@68: it returns “C#” when format_type is “csharp_format”.
jpayne@68: Return NULL
if format_type is not a supported format type.
jpayne@68:
Tests whether the entire file is valid, like msgfmt
does it. If it
jpayne@68: is invalid, passes the reasons to handler.
jpayne@68:
Tests message, to be inserted at iterator in a PO file in memory,
jpayne@68: like msgfmt
does it. If it is invalid, passes the reasons to
jpayne@68: handler. iterator is not modified by this call; it only
jpayne@68: specifies the file and the domain.
jpayne@68:
Tests whether the message translation from message is a valid jpayne@68: format string if the message is marked as being a format string. If it jpayne@68: is invalid, passes the reasons to handler. jpayne@68:
jpayne@68:This function is exported as ‘po_message_check_format_v2’ at ABI
jpayne@68: level, but is defined as po_message_check_format
in C code after
jpayne@68: the inclusion of ‘<gettext-po.h>’.
jpayne@68:
[ << ] | jpayne@68:[ >> ] | jpayne@68:jpayne@68: | jpayne@68: | jpayne@68: | jpayne@68: | jpayne@68: | [Top] | jpayne@68:[Contents] | jpayne@68:[Index] | jpayne@68:[ ? ] | jpayne@68:
jpayne@68:
jpayne@68: This document was generated by Bruno Haible on February, 21 2024 using texi2html 1.78a.
jpayne@68:
jpayne@68:
jpayne@68:
jpayne@68: