vdr 2.6.3
Classes | Functions | Variables
i18n.c File Reference
#include "i18n.h"
#include <ctype.h>
#include <libintl.h>
#include <locale.h>
#include <unistd.h>
#include "tools.h"

Go to the source code of this file.

Classes

struct  tSpecialLc
 

Functions

static bool ContainsCode (const char *Codes, const char *Code)
 
static const char * SkipContext (const char *s)
 
static void SetEnvLanguage (const char *Locale)
 
static void SetLanguageNames (void)
 
void I18nInitialize (const char *LocaleDir)
 
void I18nRegister (const char *Plugin)
 
void I18nSetLocale (const char *Locale)
 
int I18nCurrentLanguage (void)
 
void I18nSetLanguage (int Language)
 
int I18nNumLanguagesWithLocale (void)
 
const cStringListI18nLanguages (void)
 
const char * I18nTranslate (const char *s, const char *Plugin)
 
const char * I18nLocale (int Language)
 
const char * I18nLanguageCode (int Language)
 
int I18nLanguageIndex (const char *Code)
 
const char * I18nNormalizeLanguageCode (const char *Code)
 
bool I18nIsPreferredLanguage (int *PreferredLanguages, const char *LanguageCode, int &OldPreference, int *Position)
 

Variables

const char * LanguageName = trNOOP("LanguageName$English")
 
const char * LanguageCode = trNOOP("LanguageCode$eng")
 
const char * LanguageCodeList []
 
const struct tSpecialLc SpecialLanguageCodeList []
 
static cString I18nLocaleDir
 
static cStringList LanguageLocales
 
static cStringList LanguageNames
 
static cStringList LanguageCodes
 
static int NumLocales = 1
 
static int NumLanguages = 1
 
static int CurrentLanguage = 0
 

Function Documentation

◆ ContainsCode()

static bool ContainsCode ( const char *  Codes,
const char *  Code 
)
static

Definition at line 103 of file i18n.c.

References tSpecialLc::Code.

Referenced by I18nInitialize(), and I18nLanguageIndex().

◆ I18nCurrentLanguage()

int I18nCurrentLanguage ( void  )

Returns the index of the current language.

This number stays the same for any given language while the program is running, but may be different when the program is run again (for instance because a locale has been added or removed). The default locale ("en_US") always has a zero index.

Definition at line 231 of file i18n.c.

References CurrentLanguage.

Referenced by cMenuSetupOSD::cMenuSetupOSD(), cTheme::Description(), cMenuSetupOSD::ProcessKey(), cMenuSetup::ProcessKey(), and cMenuMain::ProcessKey().

◆ I18nInitialize()

void I18nInitialize ( const char *  LocaleDir = NULL)

Detects all available locales and loads the language names and codes.

If LocaleDir is given, it must point to a static string that lives for the entire lifetime of the program.

Definition at line 142 of file i18n.c.

References cVector< T >::Append(), tSpecialLc::Code, ContainsCode(), CurrentLanguage, dsyslog, esyslog, I18N_DEFAULT_LOCALE, I18N_MAX_LANGUAGES, I18nLocaleDir, LanguageCode, LanguageCodeList, LanguageCodes, LanguageLocales, LanguageName, LanguageNames, NumLanguages, NumLocales, SetEnvLanguage(), cVector< T >::Size(), SkipContext(), SpecialLanguageCodeList, and cString::sprintf().

Referenced by main().

◆ I18nIsPreferredLanguage()

bool I18nIsPreferredLanguage ( int *  PreferredLanguages,
const char *  LanguageCode,
int &  OldPreference,
int *  Position = NULL 
)

Checks the given LanguageCode (which may be something like "eng" or "eng+deu") against the PreferredLanguages and returns true if one is found that has an index smaller than OldPreference (which should be initialized to -1 before the first call to this function in a sequence of checks).

If LanguageCode is not any of the PreferredLanguages, and OldPreference is less than zero, OldPreference will be set to a value higher than the highest language index. If Position is given, it will return 0 if this was a single language code (like "eng"), 1 if it was the first of two language codes (like "eng" out of "eng+deu") and 2 if it was the second one (like "deu" out of ""eng+deu").

Definition at line 317 of file i18n.c.

References I18nLanguageIndex(), LanguageCode, LanguageCodes, and cVector< T >::Size().

Referenced by cEIT::cEIT(), cDevice::EnsureAudioTrack(), and cDevice::EnsureSubtitleTrack().

◆ I18nLanguageCode()

const char * I18nLanguageCode ( int  Language)

Returns the three letter language code of the given Language (which is an index as returned by I18nCurrentLanguage()).

If Language is outside the range of available languages, NULL is returned. The returned string may consist of several alternative three letter language codes, separated by commas (as in "deu,ger").

Definition at line 271 of file i18n.c.

References LanguageCodes, and cVector< T >::Size().

Referenced by I18nNormalizeLanguageCode(), cTheme::Save(), and cSetup::StoreLanguages().

◆ I18nLanguageIndex()

int I18nLanguageIndex ( const char *  Code)

Returns the index of the language with the given three letter language Code.

If no suitable language is found, -1 is returned.

Definition at line 276 of file i18n.c.

References tSpecialLc::Code, ContainsCode(), LanguageCodes, and cVector< T >::Size().

Referenced by I18nIsPreferredLanguage(), I18nNormalizeLanguageCode(), cTheme::Load(), and cSetup::ParseLanguages().

◆ I18nLanguages()

const cStringList * I18nLanguages ( void  )

Returns the list of available languages.

Values returned by I18nCurrentLanguage() are indexes into this list. Only the first I18nNumLanguagesWithLocale() entries in this list have an actual locale installed. The rest are just dummy entries to allow having three letter language codes for other languages that have no actual locale on this system.

Definition at line 249 of file i18n.c.

References LanguageNames.

Referenced by cMenuSetupDVB::cMenuSetupDVB(), cMenuSetupEPG::cMenuSetupEPG(), cSetup::ParseLanguages(), cMenuSetupEPG::ProcessKey(), cMenuSetupDVB::ProcessKey(), cTheme::Save(), cMenuSetupOSD::Set(), cMenuSetupEPG::Setup(), cMenuSetupDVB::Setup(), and cSetup::StoreLanguages().

◆ I18nLocale()

const char * I18nLocale ( int  Language)

Returns the locale code of the given Language (which is an index as returned by I18nCurrentLanguage()).

If Language is outside the range of available languages, NULL is returned.

Definition at line 266 of file i18n.c.

References LanguageLocales, and cVector< T >::Size().

Referenced by I18nSetLanguage(), and cMenuSetupOSD::ProcessKey().

◆ I18nNormalizeLanguageCode()

const char * I18nNormalizeLanguageCode ( const char *  Code)

Returns a 3 letter language code that may not be zero terminated.

If no normalized language code can be found, the given Code is returned. Make sure at most 3 characters are copied when using it!

Definition at line 286 of file i18n.c.

References tSpecialLc::Code, I18nLanguageCode(), and I18nLanguageIndex().

Referenced by cEIT::cEIT(), cPatPmtParser::ParsePmt(), and cPatFilter::Process().

◆ I18nNumLanguagesWithLocale()

int I18nNumLanguagesWithLocale ( void  )

Returns the number of entries in the list returned by I18nLanguages() that actually have a locale.

Definition at line 244 of file i18n.c.

References NumLocales.

Referenced by cMenuSetupOSD::Set().

◆ I18nRegister()

void I18nRegister ( const char *  Plugin)

Registers the named plugin, so that it can use internationalized texts.

Definition at line 211 of file i18n.c.

References I18nLocaleDir, and cString::sprintf().

Referenced by cPlugin::SetName().

◆ I18nSetLanguage()

void I18nSetLanguage ( int  Language)

Sets the current language index to Language.

If Language is outside the range of available languages, nothing happens.

Definition at line 236 of file i18n.c.

References CurrentLanguage, I18nLocale(), I18nSetLocale(), and NumLanguages.

Referenced by cMenuSetupOSD::ProcessKey().

◆ I18nSetLocale()

void I18nSetLocale ( const char *  Locale)

Sets the current locale to Locale.

The default locale is "en_US". If no such locale has been found in the call to I18nInitialize(), nothing happens.

Definition at line 217 of file i18n.c.

References CurrentLanguage, dsyslog, cStringList::Find(), LanguageLocales, SetEnvLanguage(), and SetLanguageNames().

Referenced by I18nSetLanguage(), cSetup::Parse(), and cMenuSetupOSD::ProcessKey().

◆ I18nTranslate()

const char * I18nTranslate ( const char *  s,
const char *  Plugin = NULL 
)

Translates the given string (with optional Plugin context) into the current language.

If no translation is available, the original string will be returned.

Definition at line 254 of file i18n.c.

References CurrentLanguage, and SkipContext().

◆ SetEnvLanguage()

static void SetEnvLanguage ( const char *  Locale)
static

Definition at line 124 of file i18n.c.

Referenced by I18nInitialize(), and I18nSetLocale().

◆ SetLanguageNames()

static void SetLanguageNames ( void  )
static

Definition at line 131 of file i18n.c.

References tSpecialLc::Code, LanguageNames, NumLanguages, SkipContext(), and SpecialLanguageCodeList.

Referenced by I18nSetLocale().

◆ SkipContext()

static const char * SkipContext ( const char *  s)
static

Definition at line 118 of file i18n.c.

Referenced by I18nInitialize(), I18nTranslate(), and SetLanguageNames().

Variable Documentation

◆ CurrentLanguage

int CurrentLanguage = 0
static

◆ I18nLocaleDir

cString I18nLocaleDir
static

Definition at line 93 of file i18n.c.

Referenced by I18nInitialize(), and I18nRegister().

◆ LanguageCode

const char* LanguageCode = trNOOP("LanguageCode$eng")

Definition at line 30 of file i18n.c.

Referenced by I18nInitialize(), and I18nIsPreferredLanguage().

◆ LanguageCodeList

const char* LanguageCodeList[]

Definition at line 37 of file i18n.c.

Referenced by I18nInitialize().

◆ LanguageCodes

cStringList LanguageCodes
static

◆ LanguageLocales

cStringList LanguageLocales
static

Definition at line 95 of file i18n.c.

Referenced by I18nInitialize(), I18nLocale(), and I18nSetLocale().

◆ LanguageName

const char* LanguageName = trNOOP("LanguageName$English")

Definition at line 28 of file i18n.c.

Referenced by I18nInitialize().

◆ LanguageNames

cStringList LanguageNames
static

Definition at line 96 of file i18n.c.

Referenced by I18nInitialize(), I18nLanguages(), and SetLanguageNames().

◆ NumLanguages

int NumLanguages = 1
static

Definition at line 100 of file i18n.c.

Referenced by I18nInitialize(), I18nSetLanguage(), and SetLanguageNames().

◆ NumLocales

int NumLocales = 1
static

Definition at line 99 of file i18n.c.

Referenced by I18nInitialize(), and I18nNumLanguagesWithLocale().

◆ SpecialLanguageCodeList

const struct tSpecialLc SpecialLanguageCodeList[]
Initial value:
= {
{ "qaa", trNOOP("LanguageName$original language (qaa)") },
{ "qad", trNOOP("LanguageName$audio description (qad)") },
{ "qks", trNOOP("LanguageName$clear speech (qks)") },
{ "mis", trNOOP("LanguageName$uncoded languages (mis)") },
{ "mul", trNOOP("LanguageName$multiple languages (mul)") },
{ "nar", trNOOP("LanguageName$narrative (nar)") },
{ "und", trNOOP("LanguageName$undetermined (und)") },
{ "zxx", trNOOP("LanguageName$no linguistic content (zxx)") },
{ NULL, NULL }
}
#define trNOOP(s)
Definition: i18n.h:88

Definition at line 81 of file i18n.c.

Referenced by I18nInitialize(), and SetLanguageNames().