Files
pv/src/library/gettext.c
T

114 lines
2.2 KiB
C

/*
* Very minimal (and stupid) implementation of gettext, with a fixed lookup
* table.
*
* This library ONLY handles gettext(), and that only for the basic form (it
* translates strings to other strings with no other modification, so %2$d
* style constructs are not dealt with). The setlocale(), bindtextdomain(),
* and textdomain() functions are ignored.
*
* To use this library, create a function that, given a language string,
* returns a struct msg_table_s[] of msgid and msgstr pairs, with the end
* of the table being marked by a NULL msgid. The po2table.sh script will do
* this.
*
* Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood
*
* Distributed under the Artistic License v2.0; see `doc/COPYING'.
*/
#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifndef HAVE_GETTEXT
struct msgtable_s {
char *msgid;
char *msgstr;
};
#if ENABLE_NLS
struct msgtable_s *minigettext__gettable(char *);
#else /* ENABLE_NLS */
struct msgtable_s *minigettext__gettable(char *a)
{
return NULL;
}
#endif /* ENABLE_NLS */
char *minisetlocale(const char *a, const char *b)
{
return NULL;
}
char *minibindtextdomain(const char *a, const char *b)
{
return NULL;
}
char *minitextdomain(const char *a)
{
return NULL;
}
char *minigettext(const char *msgid)
{
static struct msgtable_s *table = NULL;
static int tried_lang = 0;
char *lang;
int i;
if (NULL == msgid)
return NULL;
if (0 == tried_lang) {
lang = getenv("LANGUAGE");
if (lang)
table = minigettext__gettable(lang);
if (NULL == table) {
lang = getenv("LANG");
if (lang)
table = minigettext__gettable(lang);
}
if (NULL == table) {
lang = getenv("LC_ALL");
if (lang)
table = minigettext__gettable(lang);
}
if (NULL == table) {
lang = getenv("LC_MESSAGES");
if (lang)
table = minigettext__gettable(lang);
}
tried_lang = 1;
}
if (NULL == table)
return (char *) msgid;
for (i = 0; table[i].msgid; i++) {
if (0 == strcmp(table[i].msgid, msgid)) {
if (0 == table[i].msgstr)
return (char *) msgid;
if (0 == table[i].msgstr[0])
return (char *) msgid;
return table[i].msgstr;
}
}
return (char *) msgid;
}
#endif /* HAVE_GETTEXT */
/* EOF */