aboutsummaryrefslogtreecommitdiff
path: root/includes
diff options
context:
space:
mode:
Diffstat (limited to 'includes')
-rw-r--r--includes/gettext.h47
-rw-r--r--includes/hardinfo.h7
2 files changed, 48 insertions, 6 deletions
diff --git a/includes/gettext.h b/includes/gettext.h
new file mode 100644
index 00000000..fcdb2051
--- /dev/null
+++ b/includes/gettext.h
@@ -0,0 +1,47 @@
+
+#ifndef __GETTEXT_H__
+#define __GETTEXT_H__
+
+#include <string.h>
+#include <libintl.h>
+#include <locale.h>
+
+static const char *
+__pgettext_expr (const char *msgctxt, const char *msgid)
+{
+ size_t msgctxt_len = strlen (msgctxt) + 1;
+ size_t msgid_len = strlen (msgid) + 1;
+ const char *translation;
+#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+ char msg_ctxt_id[msgctxt_len + msgid_len];
+#else
+ char buf[1024];
+ char *msg_ctxt_id =
+ (msgctxt_len + msgid_len <= sizeof (buf)
+ ? buf
+ : (char *) malloc (msgctxt_len + msgid_len));
+ if (msg_ctxt_id != NULL)
+#endif
+ {
+ int found_translation;
+ memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
+ msg_ctxt_id[msgctxt_len - 1] = '\004';
+ memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
+ translation = gettext (msg_ctxt_id);
+ found_translation = (translation != msg_ctxt_id);
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+ if (msg_ctxt_id != buf)
+ free (msg_ctxt_id);
+#endif
+ if (found_translation)
+ return translation;
+ }
+ return msgid;
+}
+
+#define _(STRING) gettext(STRING)
+#define N_(STRING) (STRING)
+#define C_(CTX, STRING) __pgettext_expr(CTX, STRING)
+#define NC_(CTX, STRING) (STRING)
+
+#endif
diff --git a/includes/hardinfo.h b/includes/hardinfo.h
index cef49489..598d7717 100644
--- a/includes/hardinfo.h
+++ b/includes/hardinfo.h
@@ -23,12 +23,7 @@
#include "config.h"
#include "shell.h"
#include "vendor.h"
-#include <libintl.h>
-#include <locale.h>
-#define _(STRING) gettext(STRING)
-#define N_(STRING) (STRING)
-#define C_(CTX, STRING) pgettext(CTX, STRING)
-#define NC_(CTX, STRING) (STRING)
+#include "gettext.h"
#ifndef LOCALEDIR
#define LOCALEDIR "/usr/share/locale"