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 /* Translators: Just ignore the stuff in the test subdirectory. */
18 static testcase testcases[] = {
19   { "de_DE.UTF-8",
20     N_("[DO_NOT_TRANSLATE_THIS_MARKER]"),
21        "[DO_NOT_TRANSLATE_THIS_MARKER_de]" },
22   { "C",
23     N_("[DO_NOT_TRANSLATE_THIS_MARKER]"),
24     N_("[DO_NOT_TRANSLATE_THIS_MARKER]") },
25 };
26 
main(int argc,char * argv[])27 int main(int argc, char *argv[])
28 {
29   char *localedir;
30   int i;
31 
32   if (argc != 2) {
33     puts("Syntax: test-nls <localedir>\n");
34     return 1;
35   }
36 
37   localedir = argv[1];
38 
39   do {
40     const char *newloc = setlocale(LC_ALL, NULL);
41     printf("Default locale: %s\n", newloc);
42   } while (0);
43 
44 
45   for (i=0; i < sizeof(testcases)/sizeof(testcases[0]); i++) {
46     char *locale       = testcases[i].locale;
47     char *untranslated = testcases[i].untranslated;
48     char *expected     = testcases[i].expected;
49     char *translation;
50 
51     if (1) {
52       printf("setlocale(\"%s\")\n", locale);
53       const char *actual_locale = setlocale(LC_MESSAGES, locale);
54       if (actual_locale == NULL) {
55 	fprintf(stderr, "Error: Cannot set locale to %s.\n", locale);
56 	return 4;
57       }
58       printf("new locale: %s\n", actual_locale);
59     }
60 
61     if (1) {
62       const char *basedir = bindtextdomain(GETTEXT_PACKAGE, localedir);
63       printf("message basedir: %s\n", basedir);
64     }
65 
66     if (1) {
67       const char *domain = textdomain(GETTEXT_PACKAGE);
68       printf("message domain: %s\n", domain);
69     }
70 
71     if (1) {
72       const char *codeset = bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
73       printf("message codeset: %s\n", codeset);
74     }
75 
76     puts("before translation");
77     translation = gettext(untranslated);
78     puts("after translation");
79 
80     if (strcmp(expected, translation) != 0) {
81       fprintf(stderr,
82 	      "locale:       %s\n"
83 	      "localedir:    %s\n"
84 	      "untranslated: %s\n"
85 	      "expected:     %s\n"
86 	      "translation:  %s\n"
87 	      "Error: translation != expected\n",
88 	      locale,
89 	      localedir,
90 	      untranslated,
91 	      expected,
92 	      translation);
93 
94       return 1;
95     } else {
96       fprintf(stderr,
97 	      "expected:     %s\n"
98 	      "translation:  %s\n"
99 	      "Match!\n",
100 	      expected,
101 	      translation);
102     }
103   }
104   return 0;
105 }
106