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