]> git.vomp.tv Git - vompclient.git/blob - i18n.cc
Fixes (1) for new frame number navigation
[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     delete[] lang;
42   }
43   else
44   {
45     LanguageID = DEFAULT_LANGUAGE_INDEX;
46   }
47   return LanguageID;
48 }
49
50 char* I18n::translate(char* s)
51 {
52   if (LanguageID >= 0)
53   {
54     const tI18nPhrase *p = Phrases;
55     for (int i = ((p == Phrases) ? 1 : 2); i--; )
56     {
57       for (; **p; p++)
58       {
59         if (strcmp(s, **p) == 0)
60         {
61           char *t = (*p)[LanguageID];
62           if (t && *t) return t;
63         }
64       }
65       p = Phrases;
66     }
67     Log::getInstance()->log("I18n", Log::ERR, "No translation found for '%s' in language %d (%s)",
68                             s, LanguageID, LanguageName(LanguageID));
69   }
70
71   char *p = strchr(s, '$');
72   return p ? p + 1 : s;
73 }
74
75 const char* const * I18n::CharSets(void)
76 {
77   return charSets;
78 }
79
80 const char* const I18n::LanguageCode(int Index)
81 {
82   return 0 <= Index && Index < NumLanguages ? languageCodes[Index] : NULL;
83 }
84
85 const char* I18n::LanguageName(int Index)
86 {
87   return 0 <= Index && Index < NumLanguages ? Languages[Index] : NULL;
88 }
89
90 int I18n::LanguageIndex(const char* Name)
91 {
92   for (int i = 0; i < NumLanguages; i++)
93   {
94     if (STRCASESTR(Languages[i], Name)) return i;
95   }
96   Log::getInstance()->log("I18n", Log::ERR, "Unknown language: '%s'", Name);
97   return -1;
98 }
99
100 int I18n::GetNumLanguages(void)
101 {
102   return NumLanguages;
103 }