i18n: add no-op _() and N_() wrappers

The _ function is for translating strings into the user's chosen
language.  The N_ macro just marks translatable strings for the
xgettext(1) tool without translating them; it is intended for use in
contexts where a function call cannot be used.  So, for example:

	fprintf(stderr, _("Expansion of alias '%s' failed; "
		"'%s' is not a git command\n"),
		cmd, argv[0]);

and

	const char *unpack_plumbing_errors[NB_UNPACK_TREES_ERROR_TYPES] = {
		/* ERROR_WOULD_OVERWRITE */
		N_("Entry '%s' would be overwritten by merge. Cannot merge."),
	[...]

Define such _ and N_ in a new gettext.h and include it in cache.h, so
they can be used everywhere.  Each just returns its argument for now.
_ is a function rather than a macro like N_ to avoid the temptation to
use _("foo") as a string literal (which would be a compile-time error
once _(s) expands to an expression for the translation of s).

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Ævar Arnfjörð Bjarmason 2011-02-22 23:41:20 +00:00 committed by Junio C Hamano
parent 098d0e0e8e
commit 6578483036
3 changed files with 28 additions and 0 deletions

View File

@ -515,6 +515,7 @@ LIB_H += diff.h
LIB_H += dir.h LIB_H += dir.h
LIB_H += exec_cmd.h LIB_H += exec_cmd.h
LIB_H += fsck.h LIB_H += fsck.h
LIB_H += gettext.h
LIB_H += git-compat-util.h LIB_H += git-compat-util.h
LIB_H += graph.h LIB_H += graph.h
LIB_H += grep.h LIB_H += grep.h

View File

@ -5,6 +5,7 @@
#include "strbuf.h" #include "strbuf.h"
#include "hash.h" #include "hash.h"
#include "advice.h" #include "advice.h"
#include "gettext.h"
#include SHA1_HEADER #include SHA1_HEADER
#ifndef git_SHA_CTX #ifndef git_SHA_CTX

26
gettext.h Normal file
View File

@ -0,0 +1,26 @@
/*
* Copyright (c) 2010-2011 Ævar Arnfjörð Bjarmason
*
* This is a skeleton no-op implementation of gettext for Git.
* You can replace it with something that uses libintl.h and wraps
* gettext() to try out the translations.
*/
#ifndef GETTEXT_H
#define GETTEXT_H
#ifdef _
#error "namespace conflict: '_' is pre-defined?"
#endif
#define FORMAT_PRESERVING(n) __attribute__((format_arg(n)))
static inline FORMAT_PRESERVING(1) const char *_(const char *msgid)
{
return msgid;
}
/* Mark msgid for translation but do not translate it. */
#define N_(msgid) (msgid)
#endif