You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
1.9 KiB
78 lines
1.9 KiB
diff --git a/lib/tagexts.c b/lib/tagexts.c |
|
index dc0e0fb..e0a5d1f 100644 |
|
--- a/lib/tagexts.c |
|
+++ b/lib/tagexts.c |
|
@@ -478,59 +478,29 @@ static const char * const _macro_i18ndomains = "%{?_i18ndomains}"; |
|
*/ |
|
static int i18nTag(Header h, rpmTag tag, rpmtd td, headerGetFlags hgflags) |
|
{ |
|
- int rc; |
|
+ int rc = headerGet(h, tag, td, HEADERGET_ALLOC); |
|
#if defined(ENABLE_NLS) |
|
- char * dstring = rpmExpand(_macro_i18ndomains, NULL); |
|
- |
|
- td->type = RPM_STRING_TYPE; |
|
- td->data = NULL; |
|
- td->count = 0; |
|
- |
|
- if (dstring && *dstring) { |
|
- char *domain, *de; |
|
- const char * langval; |
|
- char * msgkey; |
|
- const char * msgid; |
|
- |
|
- rasprintf(&msgkey, "%s(%s)", headerGetString(h, RPMTAG_NAME), |
|
- rpmTagGetName(tag)); |
|
- |
|
- /* change to en_US for msgkey -> msgid resolution */ |
|
- langval = getenv(language); |
|
- (void) setenv(language, "en_US", 1); |
|
- ++_nl_msg_cat_cntr; |
|
+ if (rc) { |
|
+ char *de, *dstring = rpmExpand(_macro_i18ndomains, NULL); |
|
+ const char *domain; |
|
|
|
- msgid = NULL; |
|
for (domain = dstring; domain != NULL; domain = de) { |
|
+ const char *msgid = td->data; |
|
+ const char *msg = NULL; |
|
+ |
|
de = strchr(domain, ':'); |
|
if (de) *de++ = '\0'; |
|
- msgid = dgettext(domain, msgkey); |
|
- if (msgid != msgkey) break; |
|
- } |
|
- |
|
- /* restore previous environment for msgid -> msgstr resolution */ |
|
- if (langval) |
|
- (void) setenv(language, langval, 1); |
|
- else |
|
- unsetenv(language); |
|
- ++_nl_msg_cat_cntr; |
|
- |
|
- if (domain && msgid) { |
|
- td->data = dgettext(domain, msgid); |
|
- td->data = xstrdup(td->data); /* XXX xstrdup has side effects. */ |
|
- td->count = 1; |
|
- td->flags = RPMTD_ALLOCED; |
|
+ msg = dgettext(domain, td->data); |
|
+ if (msg != msgid) { |
|
+ free(td->data); |
|
+ td->data = xstrdup(msg); |
|
+ break; |
|
+ } |
|
} |
|
- dstring = _free(dstring); |
|
- free(msgkey); |
|
- if (td->data) |
|
- return 1; |
|
+ free(dstring); |
|
} |
|
- |
|
- free(dstring); |
|
#endif |
|
|
|
- rc = headerGet(h, tag, td, HEADERGET_ALLOC); |
|
return rc; |
|
} |
|
|
|
|