]> git.vomp.tv Git - vompclient.git/blob - i18n.cc
Connection failed detection
[vompclient.git] / i18n.cc
1 /*
2  * i18n.c: Internationalization
3  *
4  * This code is taken from the VDR project and modified for VOMP.
5  * See the main source file 'vdr.c' for original copyright information.
6  * Modifications (C) 2005 D Pickles.
7
8     This file is part of VOMP.
9
10     VOMP is free software; you can redistribute it and/or modify
11     it under the terms of the GNU General Public License as published by
12     the Free Software Foundation; either version 2 of the License, or
13     (at your option) any later version.
14
15     VOMP is distributed in the hope that it will be useful,
16     but WITHOUT ANY WARRANTY; without even the implied warranty of
17     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18     GNU General Public License for more details.
19
20     You should have received a copy of the GNU General Public License
21     along with VOMP; if not, write to the Free Software
22     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
23 */
24
25 #include "i18n.h"
26 #include "language-data.h"
27
28 int I18n::LanguageID = DEFAULT_LANGUAGE_INDEX;
29
30 int I18n::initialize(void)
31 {
32   VDR *vdr = VDR::getInstance();
33   char *lang = vdr->configLoad("General", "Language");
34   if (lang)
35   {
36     LanguageID = LanguageIndex(lang);
37     if (LanguageID == -1)
38     {
39       LanguageID = 0;
40     }
41   }
42   else
43   {
44     LanguageID = DEFAULT_LANGUAGE_INDEX;
45   }
46   return LanguageID;
47 }
48
49 char* I18n::translate(char* s)
50 {
51   if (LanguageID >= 0)
52   {
53     const tI18nPhrase *p = Phrases;
54     for (int i = ((p == Phrases) ? 1 : 2); i--; )
55     {
56       for (; **p; p++)
57       {
58         if (strcmp(s, **p) == 0)
59         {
60           char *t = (*p)[LanguageID];
61           if (t && *t) return t;
62         }
63       }
64       p = Phrases;
65     }
66     Log::getInstance()->log("I18n", Log::ERR, "No translation found for '%s' in language %d (%s)",
67                             s, LanguageID, LanguageName(LanguageID));
68   }
69
70   char *p = strchr(s, '$');
71   return p ? p + 1 : s;
72 }
73
74 const char* const * I18n::CharSets(void)
75 {
76   return charSets;
77 }
78
79 const char* const I18n::LanguageCode(int Index)
80 {
81   return 0 <= Index && Index < NumLanguages ? languageCodes[Index] : NULL;
82 }
83
84 const char* I18n::LanguageName(int Index)
85 {
86   return 0 <= Index && Index < NumLanguages ? Languages[Index] : NULL;
87 }
88
89 int I18n::LanguageIndex(const char* Name)
90 {
91   for (int i = 0; i < NumLanguages; i++)
92   {
93     if (strcasestr(Languages[i], Name)) return i;
94   }
95   Log::getInstance()->log("I18n", Log::ERR, "Unknown language: '%s'", Name);
96   return -1;
97 }
98
99 int I18n::GetNumLanguages(void)
100 {
101   return NumLanguages;
102 }