C++程序  |  106行  |  2.34 KB

#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;
}