Mark the "commit", "tree", "blob" and "tag" types for translation, and add an extern "unknown type" string for the OBJ_NONE case. It is usually bad practice to translate individual words like this, but for e.g. the list list output emitted by the "short object ID dead is ambiguous" advice it makes sense. A subsequent commit will make that output translatable, and use these translation markings to do so. Well, we won't use "commit", but let's mark it up anyway for consistency. It'll probably come in handy sooner than later to have it already be translated, and it's to much of a burden to place on translators if they're translating the other three object types anyway. Aside: I think it would probably make sense to change the "NULL" entry for type_name() to be the "unknown type". I've ran into cases where type_name() was unconditionally interpolated in e.g. an sprintf() format, but let's leave that for #leftoverbits as that would be changing the behavior of the type_name() function. All of these will be new in the git.pot file, except "blob" which will be shared with a "cat-file" command-line option, see 7bcf3414535 (cat-file --textconv/--filters: allow specifying the path separately, 2016-09-09) for its introduction. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> --- object.c | 27 +++++++++++++++++++++++---- object.h | 1 + 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/object.c b/object.c index 4e85955a941..47dbe0d8a2a 100644 --- a/object.c +++ b/object.c @@ -22,12 +22,31 @@ struct object *get_indexed_object(unsigned int idx) static const char *object_type_strings[] = { NULL, /* OBJ_NONE = 0 */ - "commit", /* OBJ_COMMIT = 1 */ - "tree", /* OBJ_TREE = 2 */ - "blob", /* OBJ_BLOB = 3 */ - "tag", /* OBJ_TAG = 4 */ + /* + * TRANSLATORS: "commit", "tree", "blob" and "tag" are the + * name of Git's object types. These names are interpolated + * stand-alone when doing so is unambiguous for translation + * and doesn't require extra context. E.g. as part of an + * already-translated string that needs to have a type name + * quoted verbatim, or the short description of a command-line + * option expecting a given type. + */ + N_("commit"), /* OBJ_COMMIT = 1 */ + N_("tree"), /* OBJ_TREE = 2 */ + N_("blob"), /* OBJ_BLOB = 3 */ + N_("tag"), /* OBJ_TAG = 4 */ }; +/* + * TRANSLATORS: This is the short type name of an object that's not + * one of Git's known object types, as opposed to "commit", "tree", + * "blob" and "tag" above. + * + * A user is unlikely to ever encounter these, but they can be + * manually created with "git hash-object --literally". + */ +const char *unknown_type = N_("unknown type"); + const char *type_name(unsigned int type) { if (type >= ARRAY_SIZE(object_type_strings)) diff --git a/object.h b/object.h index 549f2d256bc..0510dc4b3ea 100644 --- a/object.h +++ b/object.h @@ -91,6 +91,7 @@ struct object { struct object_id oid; }; +extern const char *unknown_type; const char *type_name(unsigned int type); int type_from_string_gently(const char *str, ssize_t, int gentle); #define type_from_string(str) type_from_string_gently(str, -1, 0) -- 2.33.0.1409.ge73c1ecc5b4