@c This file is part of the GNU gettext manual.
@c Copyright (C) 1995-2020 Free Software Foundation, Inc.
@c See the file gettext.texi for copying conditions.

@node Pascal
@subsection Pascal - Free Pascal Compiler
@cindex Pascal
@cindex Free Pascal
@cindex Object Pascal

@table @asis
@item RPMs
fpk

@item Ubuntu packages
fp-compiler, fp-units-fcl

@item File extension
@code{pp}, @code{pas}

@item String syntax
@code{'abc'}

@item gettext shorthand
automatic

@item gettext/ngettext functions
---, use @code{ResourceString} data type instead

@item textdomain
---, use @code{TranslateResourceStrings} function instead

@item bindtextdomain
---, use @code{TranslateResourceStrings} function instead

@item setlocale
automatic, but uses only LANG, not LC_MESSAGES or LC_ALL

@item Prerequisite
@code{@{$mode delphi@}} or @code{@{$mode objfpc@}}@*@code{uses gettext;}

@item Use or emulate GNU gettext
emulate partially

@item Extractor
@code{ppc386} followed by @code{xgettext} or @code{rstconv}

@item Formatting with positions
@code{uses sysutils;}@*@code{format "%1:d %0:d"}

@item Portability
?

@item po-mode marking
---
@end table

The Pascal compiler has special support for the @code{ResourceString} data
type.  It generates a @code{.rst} file.  This is then converted to a
@code{.pot} file by use of @code{xgettext} or @code{rstconv}.  At runtime,
a @code{.mo} file corresponding to translations of this @code{.pot} file
can be loaded using the @code{TranslateResourceStrings} function in the
@code{gettext} unit.

An example is available in the @file{examples} directory: @code{hello-pascal}.
