fix and test translations
[platform/upstream/libexif.git] / test / nls / test-nls.c
1 #include "config.h"
2
3 #include "i18n.h"
4 #include <locale.h>
5
6 #include <stdio.h>
7 #include <string.h>
8
9 struct _testcase {
10   char *locale;
11   char *untranslated;
12   char *expected;
13 };
14
15 typedef struct _testcase testcase;
16
17 static testcase testcases[] = {
18   { "C",  
19     "[DO_NOT_TRANSLATE_THIS_MARKER]", 
20     "[DO_NOT_TRANSLATE_THIS_MARKER]" },
21   { "de", 
22     "[DO_NOT_TRANSLATE_THIS_MARKER]", 
23     "[DO_NOT_TRANSLATE_THIS_MARKER_de]" },
24 };
25
26 int main(int argc, char *argv[])
27 {
28   char *localedir;
29   int i;
30
31   if (argc != 2) {
32     puts("Syntax: test-nls <localedir>\n");
33     return 1;
34   }
35
36   localedir = argv[1];
37
38   for (i=0; i < sizeof(testcases)/sizeof(testcases[0]); i++) {
39     char *locale       = testcases[i].locale;
40     char *untranslated = testcases[i].untranslated;
41     char *expected     = testcases[i].expected;
42     char *translation;
43     char *actual_locale;
44
45     printf("setlocale to %s\n", locale);
46     actual_locale = setlocale(LC_MESSAGES, locale);
47
48     if (actual_locale == NULL) {
49       fprintf(stderr, "Error: Cannot set locale to %s.\n", locale);
50       exit(4);
51     }
52
53     printf("locale is now %s\n", actual_locale);
54
55     puts("before translation");
56     translation = dgettext(GETTEXT_PACKAGE, untranslated);
57     puts("after translation");
58
59     if (strcmp(expected, translation) != 0) {
60       fprintf(stderr, "# %s\n", N_("[DO_NOT_TRANSLATE_THIS_MARKER]"));
61
62       fprintf(stderr,
63               "locale:       %s\n"
64               "localedir:    %s\n"
65               "untranslated: %s\n"
66               "expected:     %s\n"
67               "translation:  %s\n"
68               "Error: translation != expected\n",
69               locale,
70               localedir,
71               untranslated,
72               expected, 
73               translation);
74       
75       return 1;
76     }
77   }
78   return 0;
79 }