On Tue, Oct 05 2021, Bagas Sanjaya wrote: > On 04/10/21 21.27, Ævar Arnfjörð Bjarmason wrote: >> 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 */ >> }; >> > > Are these object type names safe for translating? (e.g. can they be > translatable without affecting private API string, which aren't > translatable)? Yes, the N_() macro is always a noop. It's just there so the i18n tooling knows to pick up these strings and drop them into po/git.pot. See po/README.md for details. It does change the behavior of any code that later does _(type_name(type)), as the string will then (potentially) be found in the *.mo files, but as shown in 2/2 that needs to be added to each callsite manually. So we're not going to translate "ls-tree" output or whatever just because it has "tree" etc. in it. >> +/* >> + * 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) > > Did you mean that "unknown type" is generic shorthand? Yes, we could get the actual type name here, but it's a bit of a pain, and as noted in 2/2 this code doesn't work anyway (which pre-dates this series). But I'll see if I'll remember to loop around to fixing it after my fsck/object library fixes related to this land, but for now just marking this for translation makes senes I think.