Code example using a message catalog
The following code uses the message just created
in
``Creating a message catalog''.
Rather than hard-coding output directly,
it reads the proper message catalog
depending on the LANG
environment variable.
Internationalized ``Hello, world'' program (hello.c)
  1 #include <stdio.h>
  2 #include <time.h>
  3 #include <nl_types.h>
  4 #include <langinfo.h>
  5 #include <locale.h>
  6 #define TEMPBUF_SIZE	100
  7 main()
  8 {
  9     nl_catd catalog;
 10     time_t  clock;
 11     char    tempbuffer[TEMPBUF_SIZE];
 12     setlocale (LC_ALL, "");
 13     if ((catalog = catopen ("hello.cat", 0)) == -1) {
 14 	fprintf(stderr, "Can't open message catalog\n");
 15 	/* Continue anyway, this is not fatal */
 16     }
 17     (void) time(&clock);
 18     (void) strftime(tempbuffer, TEMPBUF_SIZE,
 19            catgets(catalog, 1, 2, "%a %b %T %y"),
 20            localtime(&clock));
 21     printf("%s %s\n",
 22 	catgets(catalog, 1, 1, "hello world (English)"),
 23 	tempbuffer);
 24     );
 25     catclose(catalog);
 26     exit(0);
 27 }
line 1- 
Needs to be included to use standard routines like
printf(S).
 
line 2- 
Needs to be included to use time-related functions and data types.
 
line 3- 
Needs to be included to use the catalog routines.
 
lines 4-5- 
Needs to be included to use the
LC_*
and
LANG
environment variables.
 
line 6- 
Defines the maximum size of a temporary buffer.
 
line 9- 
Defines a variable to be of a type that
identifies a catalog (referred to as a
catalog descriptor).
 
line 10- 
Defines a variable to store the time.
 
line 11- 
Defines a temporary buffer of size TEMPBUF_SIZE
to store the formatted string corresponding to the time.
 
line 12- 
Needs to be included
so that the local environment
variable LANG is read.
 
line 13- 
Checks to see if a catalog with the
name argument
matching ``hello'' can be opened.
If successful, this message catalog will
now be referenced by the
catalog variable.
If the program is to use the
LC_MESSAGES environment variable,
use NL_CAT_LOCALE
as the second argument to the
catopen(S)
call instead of the 0 shown in the example.
 
lines 14-16- 
Prints out error message upon failure.
 
line 17- 
Sets the clock
variable to UNIX operating system
Epoch time.
 
lines 18-20- 
Formats the time according to the format
in the message catalog designated by the
variable catalog.
(The final format specification is a
default if there is an error in reading
the message catalog.)
 
lines 21-24- 
Retrieves message number 1 of set number 1
in the message catalog designated by the
variable catalog.
(The final string is a default if there is
an error in reading the message catalog.)
The retrieved message is printed and
followed by the preformatted time string
stored in tempbuffer.
 
line 25- 
Closes the message catalog identified by the
variable catalog.
 
Next topic: 
Combining the message catalog and the application program
Previous topic: 
Creating a message catalog
© 2003 Caldera International, Inc.  All rights reserved.
SCO OpenServer Release 5.0.7 -- 11 February 2003