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