blob: 6080d7af6bad3f70fa7db0ff3bc1008c5879084d [file] [log] [blame]
#include "config.h"
#include "i18n.h"
#include <locale.h>
#include <stdio.h>
#include <string.h>
struct _testcase {
char *locale;
char *untranslated;
char *expected;
};
typedef struct _testcase testcase;
/* Translators: Just ignore the stuff in the test subdirectory. */
static testcase testcases[] = {
{ "de_DE.UTF-8",
N_("[DO_NOT_TRANSLATE_THIS_MARKER]"),
"[DO_NOT_TRANSLATE_THIS_MARKER_de]" },
{ "C",
N_("[DO_NOT_TRANSLATE_THIS_MARKER]"),
N_("[DO_NOT_TRANSLATE_THIS_MARKER]") },
};
int main(int argc, char *argv[])
{
char *localedir;
int i;
if (argc != 2) {
puts("Syntax: test-nls <localedir>\n");
return 1;
}
localedir = argv[1];
do {
const char *newloc = setlocale(LC_ALL, NULL);
printf("Default locale: %s\n", newloc);
} while (0);
for (i=0; i < sizeof(testcases)/sizeof(testcases[0]); i++) {
char *locale = testcases[i].locale;
char *untranslated = testcases[i].untranslated;
char *expected = testcases[i].expected;
char *translation;
if (1) {
printf("setlocale(\"%s\")\n", locale);
const char *actual_locale = setlocale(LC_MESSAGES, locale);
if (actual_locale == NULL) {
fprintf(stderr, "Error: Cannot set locale to %s.\n", locale);
return 4;
}
printf("new locale: %s\n", actual_locale);
}
if (1) {
const char *basedir = bindtextdomain(GETTEXT_PACKAGE, localedir);
printf("message basedir: %s\n", basedir);
}
if (1) {
const char *domain = textdomain(GETTEXT_PACKAGE);
printf("message domain: %s\n", domain);
}
if (1) {
const char *codeset = bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
printf("message codeset: %s\n", codeset);
}
puts("before translation");
translation = gettext(untranslated);
puts("after translation");
if (strcmp(expected, translation) != 0) {
fprintf(stderr,
"locale: %s\n"
"localedir: %s\n"
"untranslated: %s\n"
"expected: %s\n"
"translation: %s\n"
"Error: translation != expected\n",
locale,
localedir,
untranslated,
expected,
translation);
return 1;
} else {
fprintf(stderr,
"expected: %s\n"
"translation: %s\n"
"Match!\n",
expected,
translation);
}
}
return 0;
}