/* Copyright (C) 2008 Andreas Baumann This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "port/sys.h" #include "port/string.h" /* for strerror_r */ #include "port/stdio.h" /* for puts, fprintf */ #include /* for exit, EXIT_SUCCESS, free */ #include /* for errno */ #include "port/gettext.h" /* for i18n */ int main( void ) { char *loc; char *bind_domain; char *domain; /* respect locale settings of the environment */ loc = setlocale( LC_ALL, "" ); if( loc == NULL ) { fprintf( stderr, "Warning, can't set locale, let's hope localization works nevertheless.\n" ); } else { printf( "Using locale %s\n", loc ); } /* for testing here set the location of the message files, * for standard installations this is /usr/share/locale * (this we must do also for libraries, but just this) */ bind_domain = bindtextdomain( "test_gettext", "locale" ); if( bind_domain == NULL ) { char buf[1024]; strerror_r( errno, buf, 1024 ); fprintf( stderr, "Error setting gettext bind domain: %s (%d)\n", buf, errno ); } else { printf( "Using bind domain %s\n", bind_domain ); } /* set text domain so gettext function calls are retrieving the right * string */ domain = textdomain( "test_gettext" ); if( domain == NULL ) { char buf[1024]; strerror_r( errno, buf, 1024 ); fprintf( stderr, "Error setting gettext domain: %s (%d)\n", buf, errno ); } else { printf( "Using domain %s\n", domain ); } /* dgettext instead of gettext in libraries? why? */ /* print something localized */ puts( _( "A message without parameters" ) ); /* croaks in older gcc because the format string is used with a function * without __attribute__ format definitions, this may also depend on the * age of gettext and libintl? */ printf( _( "A message with two parameters, a string %s and an integer %d\n" ), "string_param", 47 ); /* try POSIX positional arguments, gives a * test_gettext.c:79: warning: ISO C does not support %n$ operand number formats */ /* printf( _( "We must insert %1$d coins into %2$s" ), 55, "the box" ); */ return EXIT_SUCCESS; }