#include <stdio.h>
#include <stdlib.h>
#include <cups/i18n.h>
static void write_string(FILE *strings, const char *s);
int
main(int argc,
char *argv[])
{
FILE *strings;
cups_array_t *po;
char iconv[1024];
_cups_message_t *msg;
if (argc != 3)
{
puts("Usage: po2strings filename.po filename.strings");
return (1);
}
if ((po = _cupsMessageLoad(argv[1])) == NULL)
{
perror(argv[1]);
return (1);
}
snprintf(iconv, sizeof(iconv), "iconv -f utf-8 -t utf-16 >'%s'", argv[2]);
if ((strings = popen(iconv, "w")) == NULL)
{
perror(argv[2]);
_cupsMessageFree(po);
return (1);
}
for (msg = (_cups_message_t *)cupsArrayFirst(po);
msg;
msg = (_cups_message_t *)cupsArrayNext(po))
{
write_string(strings, msg->id);
fputs(" = ", strings);
write_string(strings, msg->str);
fputs(";\n", strings);
}
printf("%s: %d messages.\n", argv[2], cupsArrayCount(po));
pclose(strings);
_cupsMessageFree(po);
return (0);
}
static void
write_string(FILE *strings,
const char *s)
{
putc('\"', strings);
while (*s)
{
switch (*s)
{
case '\n' :
fputs("\\n", strings);
break;
case '\t' :
fputs("\\t", strings);
break;
case '\\' :
fputs("\\\\", strings);
break;
case '\"' :
fputs("\\\"", strings);
break;
default :
putc(*s, strings);
break;
}
s ++;
}
putc('\"', strings);
}