2000-11-11 10:39:27 +01:00
|
|
|
/*
|
|
|
|
* i18n.h: Internationalization
|
|
|
|
*
|
|
|
|
* See the main source file 'vdr.c' for copyright information and
|
|
|
|
* how to reach the author.
|
|
|
|
*
|
2007-08-19 14:34:44 +02:00
|
|
|
* $Id: i18n.h 1.23 2007/08/19 14:07:17 kls Exp $
|
2000-11-11 10:39:27 +01:00
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __I18N_H
|
|
|
|
#define __I18N_H
|
|
|
|
|
2002-05-09 16:26:56 +02:00
|
|
|
#include <stdio.h>
|
2007-08-11 12:39:06 +02:00
|
|
|
#include "tools.h"
|
2000-11-11 10:39:27 +01:00
|
|
|
|
2007-08-11 12:39:06 +02:00
|
|
|
typedef const char *tI18nPhrase[22]; ///< obsolete - switch to 'gettext'!
|
2000-11-11 10:39:27 +01:00
|
|
|
|
2007-08-11 12:39:06 +02:00
|
|
|
#define I18N_DEFAULT_LOCALE "en_US"
|
|
|
|
#define I18N_MAX_LOCALE_LEN 16 // for buffers that hold en_US etc.
|
|
|
|
#define I18N_MAX_LANGUAGES 256 // for buffers that hold all available languages
|
2002-05-09 16:26:56 +02:00
|
|
|
|
2007-08-11 12:39:06 +02:00
|
|
|
void I18nInitialize(void);
|
|
|
|
///< Detects all available locales and loads the language names and codes.
|
|
|
|
void I18nRegister(const char *Plugin);
|
|
|
|
///< Registers the named plugin, so that it can use internationalized texts.
|
|
|
|
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.
|
|
|
|
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.
|
|
|
|
void I18nSetLanguage(int Language);
|
|
|
|
///< Sets the current language index to Language. If Language is outside
|
|
|
|
///< the range of available languages, nothing happens.
|
2007-08-18 09:21:52 +02:00
|
|
|
int I18nNumLanguagesWithLocale(void);
|
|
|
|
///< Returns the number of entries in the list returned by I18nLanguages()
|
|
|
|
///< that actually have a locale.
|
2007-08-11 12:39:06 +02:00
|
|
|
const cStringList *I18nLanguages(void);
|
|
|
|
///< Returns the list of available languages. Values returned by
|
|
|
|
///< I18nCurrentLanguage() are indexes into this list.
|
2007-08-18 09:21:52 +02:00
|
|
|
///< 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.
|
2006-03-26 09:27:30 +02:00
|
|
|
const char *I18nTranslate(const char *s, const char *Plugin = NULL) __attribute_format_arg__(1);
|
2007-08-11 12:39:06 +02:00
|
|
|
///< Translates the given string (with optional Plugin context) into
|
|
|
|
///< the current language. If no translation is available, the original
|
|
|
|
///< string will be returned.
|
|
|
|
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.
|
|
|
|
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").
|
2004-01-24 14:59:04 +01:00
|
|
|
int I18nLanguageIndex(const char *Code);
|
2007-08-11 12:39:06 +02:00
|
|
|
///< Returns the index of the language with the given three letter
|
|
|
|
///< language Code. If no suitable language is found, -1 is returned.
|
2004-01-25 15:32:08 +01:00
|
|
|
const char *I18nNormalizeLanguageCode(const char *Code);
|
2005-09-04 14:48:39 +02:00
|
|
|
///< 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!
|
|
|
|
bool I18nIsPreferredLanguage(int *PreferredLanguages, const char *LanguageCode, int &OldPreference, int *Position = NULL);
|
2005-09-09 14:50:35 +02:00
|
|
|
///< 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").
|
2002-05-09 16:26:56 +02:00
|
|
|
|
|
|
|
#ifdef PLUGIN_NAME_I18N
|
2007-08-19 14:34:44 +02:00
|
|
|
#define tr(s) I18nTranslate(s, "vdr-" PLUGIN_NAME_I18N)
|
2002-05-09 16:26:56 +02:00
|
|
|
#else
|
|
|
|
#define tr(s) I18nTranslate(s)
|
|
|
|
#endif
|
2000-11-11 10:39:27 +01:00
|
|
|
|
2007-08-11 12:39:06 +02:00
|
|
|
#define trNOOP(s) (s)
|
|
|
|
|
2000-11-11 10:39:27 +01:00
|
|
|
#endif //__I18N_H
|