1#include "config.h"
2
3#include "i18n.h"
4#include <locale.h>
5
6#include <stdio.h>
7#include <string.h>
8
9struct _testcase {
10  char *locale;
11  char *untranslated;
12  char *expected;
13};
14
15typedef struct _testcase testcase;
16
17/* Translators: Just ignore the stuff in the test subdirectory. */
18static 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
27int 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