25#include <XPLMUtilities.h>
33static bool_t acfutils_xlate_inited = B_FALSE;
42xlate_compar(
const void *a,
const void *b)
45 int res = strcmp(xa->msgid, xb->msgid);
85 ASSERT(!acfutils_xlate_inited);
89 fp = fopen(po_file,
"r");
109 }
while (c !=
'\n' && c !=
'\r' && c != EOF);
114 logMsg(
"malformed po file %s: out of place "
115 "quoted string found", po_file);
119 if (e->msgid == NULL) {
121 }
else if (e->msgstr == NULL) {
124 logMsg(
"malformed po file %s: too many strings "
125 "following msgid or msgstr", po_file);
135 VERIFY3S(fscanf(fp,
"%31s", cmd), ==, 1);
136 if (strcmp(cmd,
"msgid") == 0) {
138 if (e->msgid == NULL ||
140 logMsg(
"malformed po file %s: "
141 "incomplete msgid entry",
147 if (*e->msgid == 0) {
155 e = calloc(1,
sizeof (*e));
156 }
else if (strcmp(cmd,
"msgstr") == 0) {
157 if (e == NULL || e->msgid == NULL) {
158 logMsg(
"malformed po file %s: "
159 "misplaced \"msgstr\" diretive",
165 logMsg(
"maformed po file %s: unknown "
166 "directive \"%s\".", po_file, cmd);
177 if (e->msgid == NULL || e->msgstr == NULL) {
178 logMsg(
"malformed po file %s: incomplete msgid entry",
184 if (*e->msgid == 0) {
195 acfutils_xlate_inited = B_TRUE;
202 acfutils_xlate_inited = B_TRUE;
218 if (!acfutils_xlate_inited)
228 acfutils_xlate_inited = B_FALSE;
251 const xlate_ent_t srch = { .msgid = (
char *)msgid };
254 if (!acfutils_xlate_inited)
261 return (ent->msgstr);
274 case xplm_Language_English:
276 case xplm_Language_French:
278 case xplm_Language_German:
280 case xplm_Language_Italian:
282 case xplm_Language_Spanish:
284 case xplm_Language_Korean:
286 case xplm_Language_Russian:
288 case xplm_Language_Greek:
290 case xplm_Language_Japanese:
292 case xplm_Language_Chinese:
#define VERIFY3S(x, op, y)
void * avl_destroy_nodes(avl_tree_t *tree, void **cookie)
void avl_add(avl_tree_t *tree, void *node)
void avl_create(avl_tree_t *tree, int(*compar)(const void *, const void *), size_t size, size_t offset)
void avl_destroy(avl_tree_t *tree)
void * avl_find(const avl_tree_t *tree, const void *node, avl_index_t *where)
static char * parser_get_next_quoted_str(FILE *fp)
void acfutils_xlate_fini(void)
const char * acfutils_xlate(const char *msgid)
const char * acfutils_xplang2code(int lang)
bool_t acfutils_xlate_init(const char *po_file)