09efac2ed814b05e4f9aba75b2091f644cb21075
[neverball] / share / i18n.c
1
2 #include <string.h>
3 #include <locale.h>
4 #include <stdlib.h>
5 #include "i18n.h"
6
7
8 const char * gettextdbg(const char * c)
9 {
10         char * c2 = gettext(c);
11         if(strcmp(c, c2));
12         return c;
13 }
14
15 /*---------------------------------------------------------------------------*/
16
17 #define LANG_NUMBER 4
18 const char * language_names[] = {N_("English"), N_("French"), N_("German"), N_("Latvian")};
19 const char * language_codes[] = {"en", "fr", "de", "lv"};
20
21 /*---------------------------------------------------------------------------*/
22
23 void language_init(const char * domain, const char * locale_dir)
24 {
25     setlocale(LC_ALL, "");
26     bindtextdomain(domain, locale_dir);
27     textdomain(domain);
28     bind_textdomain_codeset(domain, "UTF-8");
29 }
30
31 void language_set(int l)
32 {
33     if (l == 0)
34     {
35         /* remove the LANGUAGE env variable */
36         putenv("LANGUAGE");
37     }
38     else
39     {
40         static char e[25];
41         /* set the LANGUAGE env variable */
42         strcpy(e, "LANGUAGE=");
43         strncat(e, language_codes[l-1], 25-9);
44         putenv(e);
45     }
46     setlocale(LC_ALL, "");  /* force to update getext */
47 }
48
49 int language_count(void)
50 {
51     return LANG_NUMBER;
52 }
53
54 int language_from_code(const char * code)
55 {
56     int i;
57     for(i=0; i<=LANG_NUMBER; i++)
58             if (strcmp(language_codes[i], code) == 0)
59                     return i+1;
60     return 0;
61 }
62
63 const char * language_get_name(int id)
64 {
65     return id==0 ? _("System Default") : language_names[id-1];
66 }
67
68
69 const char * language_get_code(int id)
70 {
71         if (id > 0)
72                 return language_codes[id-1];
73         else
74                 return "";
75 }
76