diff options
| author | Burt P <pburt0@gmail.com> | 2017-07-15 01:29:47 -0500 | 
|---|---|---|
| committer | Leandro Pereira <leandro@hardinfo.org> | 2017-07-19 07:20:33 -0700 | 
| commit | d42f694add9bcfca56a5d489c5f8f179595b118e (patch) | |
| tree | 1a7af829b497ef0191600a0be39df5fde342a5f6 /includes | |
| parent | 6ec5d0b90324367399d03a972f8b6a0f1bc804d5 (diff) | |
Support for pgettext()
Attempt adding support for pgettext without
the bulk of standard gettext.h
Signed-off-by: Burt P <pburt0@gmail.com>
Diffstat (limited to 'includes')
| -rw-r--r-- | includes/gettext.h | 47 | ||||
| -rw-r--r-- | includes/hardinfo.h | 7 | 
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" | 
