exstr
[
options
]
file
Extract strings from C source files, so that they can be stored in a
database and retrieved at application run-time using the
gettxt
system call. With no options,
exstr
produces a
grep
-type
list showing only filename and strings.
exstr
is one of several
commands to use when customizing applications for international use.
Typical use involves three steps:
-
Specify
-e
and the C source file, and redirect the output to a file.
This creates a database of text strings and identifying information.
-
Edit this database by adding information that was previously returned
by the
mkmsgs
command.
-
Specify
-r
and the C source file,
using the edited database as input. This replaces hardcoded text strings
with calls to
gettxt
.
gettxt
lets you access translated
versions of text strings. (The strings reside in a directory specified
by environment variable LC_MESSAGES.)
-
-e
-
Extract text strings from
file
. (
-e
is not used with other
options.) The information appears in this format:
file
:
line
:
field
:
msg_file
:
msg_num
:
string
-
-r
-
Replace strings in the source file with calls to
gettxt
.
-
-d
-
Use with
-r
to give the
gettxt
call a second argument,
the original text string. This string will be printed as the fallback
in case the
gettxt
call fails.
Assume a C source file named
proverbs.c
:
main() {
printf("Haste makes waste\n");
printf("A stitch in time\n");
}
-
First issue the command:
%
exstr -e proverbs.c > proverb.list
proverb.list
might look something like this:
proverbs.c:3:8:::Haste makes waste\n
proverbs.c:4:8:::A stitch in time\n
-
Run
mkmsgs
to create a message file (e.g.,
prov.US
)
that can be read by the
gettxt
call. If the two proverbs strings
above are listed ninth and tenth in
prov.US
, then you would
edit
proverb.list
as follows:
proverbs.c:3:8:prov.US:9:Haste makes waste\n
proverbs.c:4:8:prov.US:10:A stitch in time\n
-
Finally, specify
-r
to insert
gettxt
calls:
%
exstr -rd proverbs.c < proverb.list > Prov.c
The international version of your program,
Prov.c
, now looks like
this:
extern char *gettxt();
main() {
printf(gettxt("prov.US:9", "Haste makes\
waste\n"));
printf(gettxt("prov.US:10", "A\
stitch in time\n"));
}