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