xref: /aosp_15_r20/external/libexif/test/nls/test-nls.c (revision 735d6239c16e246968a03ef6e2db00d67bad6cdc)
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