mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
611 lines
12 KiB
C
611 lines
12 KiB
C
/*
|
|
* i18n.c: Internationalization
|
|
*
|
|
* See the main source file 'vdr.c' for copyright information and
|
|
* how to reach the author.
|
|
*
|
|
* $Id: i18n.c 1.12 2001/02/13 22:17:27 kls Exp $
|
|
*
|
|
* Slovenian translations provided by Miha Setina <mihasetina@softhome.net>
|
|
* Italian translations provided by Alberto Carraro <bertocar@tin.it>
|
|
*
|
|
*/
|
|
|
|
/*
|
|
* How to add a new language:
|
|
*
|
|
* 1. Announce your translation action on the Linux-DVB mailing
|
|
* list to avoid duplicate work.
|
|
* 2. Increase the value of 'NumLanguages'.
|
|
* 3. Insert a new line in every member of the 'Phrases[]' array,
|
|
* containing the translated text for the new language.
|
|
* For example, assuming you want to add the Italian language,
|
|
*
|
|
* { "English",
|
|
* "Deutsch",
|
|
* },
|
|
*
|
|
* would become
|
|
*
|
|
* { "English",
|
|
* "Deutsch",
|
|
* "Italiano",
|
|
* },
|
|
*
|
|
* and so on. Append your language after the last existing language
|
|
* and write the name of your language in your language (not in English,
|
|
* which means that it should be 'Italiano', not 'Italian').
|
|
* Note that only the characters defined in 'fontosd.c' will
|
|
* be available!
|
|
* 4. Compile VDR and test the new language by switching to it
|
|
* in the "Setup" menu.
|
|
* 5. Send the modified 'i18n.c' file to <kls@cadsoft.de> to have
|
|
* it included in the next version of VDR.
|
|
*/
|
|
|
|
#include "i18n.h"
|
|
#include <stdio.h>
|
|
#include "config.h"
|
|
#include "tools.h"
|
|
|
|
const int NumLanguages = 4;
|
|
|
|
typedef const char *tPhrase[NumLanguages];
|
|
|
|
const tPhrase Phrases[] = {
|
|
// The name of the language (this MUST be the first phrase!):
|
|
{ "English",
|
|
"Deutsch",
|
|
"Slovenski",
|
|
"Italiano",
|
|
},
|
|
// Menu titles:
|
|
{ "Main",
|
|
"Hauptmenü",
|
|
"Glavni meni",
|
|
"Principale",
|
|
},
|
|
{ "Schedule",
|
|
"Programm",
|
|
"Urnik",
|
|
"Programmi",
|
|
},
|
|
{ "Channels",
|
|
"Kanäle",
|
|
"Kanali",
|
|
"Canali",
|
|
},
|
|
{ "Timers",
|
|
"Timer",
|
|
"Termini",
|
|
"Timer",
|
|
},
|
|
{ "Recordings",
|
|
"Aufzeichnungen",
|
|
"Posnetki",
|
|
"Registrazioni",
|
|
},
|
|
{ "Setup",
|
|
"Einstellungen",
|
|
"Nastavitve",
|
|
"Opzioni",
|
|
},
|
|
{ "Commands",
|
|
"Befehle",
|
|
"Ukazi",
|
|
"Comandi",
|
|
},
|
|
{ "Edit Channel",
|
|
"Kanal Editieren",
|
|
"Uredi kanal",
|
|
"Modifica canale",
|
|
},
|
|
{ "Edit Timer",
|
|
"Timer Editieren",
|
|
"Uredi termin",
|
|
"Modifica Timer",
|
|
},
|
|
{ "Event",
|
|
"Sendung",
|
|
"Oddaja",
|
|
"Eventi",
|
|
},
|
|
{ "Summary",
|
|
"Inhalt",
|
|
"Vsebina",
|
|
"Sommario",
|
|
},
|
|
{ "Schedule - %s",
|
|
"Programm - %s",
|
|
"Urnik - %s",
|
|
"Programma - %s",
|
|
},
|
|
{ "What's on now?",
|
|
"Was läuft jetzt?",
|
|
"Kaj je na sporedu?",
|
|
"In programmazione",
|
|
},
|
|
{ "What's on next?",
|
|
"Was läuft als nächstes?",
|
|
"Kaj sledi?",
|
|
"Prossimi programmi",
|
|
},
|
|
// Button texts (must not be more than 10 characters!):
|
|
{ "Edit",
|
|
"Editieren",
|
|
"Uredi",
|
|
"Modifica",
|
|
},
|
|
{ "New",
|
|
"Neu",
|
|
"Novo",
|
|
"Nuovo",
|
|
},
|
|
{ "Delete",
|
|
"Löschen",
|
|
"Odstrani",
|
|
"Cancella",
|
|
},
|
|
{ "Mark",
|
|
"Markieren",
|
|
"Oznaci",
|
|
"Marca",
|
|
},
|
|
{ "Record",
|
|
"Aufnehmen",
|
|
"Posnemi",
|
|
"Registra",
|
|
},
|
|
{ "Play",
|
|
"Wiedergabe",
|
|
"Predavajaj",
|
|
"Riproduci",
|
|
},
|
|
{ "Rewind",
|
|
"Anfang",
|
|
"Zacetek",
|
|
"Da inizio",
|
|
},
|
|
{ "Resume",
|
|
"Weiter",
|
|
"Nadaljuj",
|
|
"Riprendi",
|
|
},
|
|
{ "Summary",
|
|
"Inhalt",
|
|
"Vsebina",
|
|
"Sommario",
|
|
},
|
|
{ "Switch",
|
|
"Umschalten",
|
|
"Preklopi",
|
|
"Cambia",
|
|
},
|
|
{ "Now",
|
|
"Jetzt",
|
|
"Sedaj",
|
|
"Adesso",
|
|
},
|
|
{ "Next",
|
|
"Nächste",
|
|
"Naslednji",
|
|
"Prossimo",
|
|
},
|
|
{ "Schedule",
|
|
"Programm",
|
|
"Urnik",
|
|
"Programma",
|
|
},
|
|
// Confirmations:
|
|
{ "Delete channel?",
|
|
"Kanal löschen?",
|
|
"Odstrani kanal?",
|
|
"Cancello il canale?",
|
|
},
|
|
{ "Delete timer?",
|
|
"Timer löschen?",
|
|
"Odstani termin?",
|
|
"Cancello il timer?",
|
|
},
|
|
{ "Delete recording?",
|
|
"Aufzeichnung löschen?",
|
|
"Odstrani posnetek?",
|
|
"Cancello la registrazione?",
|
|
},
|
|
{ "Stop recording?",
|
|
"Aufzeichnung beenden?",
|
|
"Koncaj snemanje?",
|
|
"Fermo la registrazione?",
|
|
},
|
|
{ "Cancel editing?",
|
|
"Schneiden abbrechen?",
|
|
"Zelite prekiniti urejanje?",
|
|
"Annullo la modifica?",
|
|
},
|
|
// Channel parameters:
|
|
{ "Name",
|
|
"Name",
|
|
"Naziv",
|
|
"Nome",
|
|
},
|
|
{ "Frequency",
|
|
"Frequenz",
|
|
"Frekvenca",
|
|
"Frequenza",
|
|
},
|
|
{ "Polarization",
|
|
"Polarisation",
|
|
"Polarizacija",
|
|
"Polarizzazione",
|
|
},
|
|
{ "Diseqc",
|
|
"Diseqc",
|
|
"Diseqc",
|
|
"Diseqc",
|
|
},
|
|
{ "Srate",
|
|
"Srate",
|
|
"Srate",
|
|
"Srate",
|
|
},
|
|
{ "Vpid",
|
|
"Vpid",
|
|
"Vpid",
|
|
"Vpid",
|
|
},
|
|
{ "Apid",
|
|
"Apid",
|
|
"Apid",
|
|
"Apid",
|
|
},
|
|
{ "Tpid",
|
|
"Tpid",
|
|
"Tpid",
|
|
"Tpid",
|
|
},
|
|
{ "CA",
|
|
"CA",
|
|
"CA",
|
|
"CA",
|
|
},
|
|
{ "Pnr",
|
|
"Pnr",
|
|
"Pnr",
|
|
"Pnr",
|
|
},
|
|
// Timer parameters:
|
|
{ "Active",
|
|
"Aktiv",
|
|
"Aktivno",
|
|
"Attivo",
|
|
},
|
|
{ "Channel",
|
|
"Kanal",
|
|
"Kanal",
|
|
"Canale",
|
|
},
|
|
{ "Day",
|
|
"Tag",
|
|
"Dan",
|
|
"Giorno",
|
|
},
|
|
{ "Start",
|
|
"Anfang",
|
|
"Zacetek",
|
|
"Inizio",
|
|
},
|
|
{ "Stop",
|
|
"Ende",
|
|
"Konec",
|
|
"Fine",
|
|
},
|
|
{ "Priority",
|
|
"Priorität",
|
|
"Prioriteta",
|
|
"Priorita",
|
|
},
|
|
{ "Lifetime",
|
|
"Lebensdauer",
|
|
"Veljavnost",
|
|
"Durata",
|
|
},
|
|
{ "File",
|
|
"Datei",
|
|
"Datoteka",
|
|
"Nome",
|
|
},
|
|
// Error messages:
|
|
{ "Channel is being used by a timer!",
|
|
"Kanal wird von einem Timer benutzt!",
|
|
"Urnik zaseda kanal!",
|
|
"Canale occupato da un timer!",
|
|
},
|
|
{ "Can't switch channel!",
|
|
"Kanal kann nicht umgeschaltet werden!",
|
|
"Ne morem preklopiti kanala!",
|
|
"Impossibile cambiare canale!",
|
|
},
|
|
{ "Timer is recording!",
|
|
"Timer zeichnet gerade auf!",
|
|
"Snemanje po urniku!",
|
|
"Registrazione di un timer in corso!",
|
|
},
|
|
{ "Error while deleting recording!",
|
|
"Fehler beim Löschen der Aufzeichnung!",
|
|
"Napaka pri odstranjevanju posnetka!",
|
|
"Errore durante la canc del filmato!",
|
|
},
|
|
{ "*** Invalid Channel ***",
|
|
"*** Ungültiger Kanal ***",
|
|
"*** Neznan kanal ***",
|
|
"*** CANALE INVALIDO ***",
|
|
},
|
|
{ "No free DVB device to record!",
|
|
"Keine freie DVB-Karte zum Aufnehmen!",
|
|
"Ni proste DVB naprave za snemanje!",
|
|
"Nessuna card DVB disp per registrare!",
|
|
},
|
|
{ "Channel locked (recording)!",
|
|
"Kanal blockiert (zeichnet auf)!",
|
|
"Zaklenjen kanal (snemanje)!",
|
|
"Canale bloccato (in registrazione)!",
|
|
},
|
|
{ "Can't start editing process!",
|
|
"Schnitt kann nicht gestartet werden!",
|
|
"Ne morem zaceti urejanja!",
|
|
"Imposs iniziare processo di modifica",
|
|
},
|
|
{ "Editing process already active!",
|
|
"Schnitt bereits aktiv!",
|
|
"Urejanje je ze aktivno!",
|
|
"Processo di modifica gia` attivo",
|
|
},
|
|
// Setup parameters:
|
|
{ "OSD-Language",
|
|
"OSD-Sprache",
|
|
"OSD-jezik",
|
|
"Linguaggio OSD",
|
|
},
|
|
{ "PrimaryDVB",
|
|
"Primäres Interface",
|
|
"Primarna naprava",
|
|
"Scheda DVB primaria",
|
|
},
|
|
{ "ShowInfoOnChSwitch",
|
|
"Info zeigen",
|
|
"Pokazi naziv kanala",
|
|
"Vis info nel cambio canale",
|
|
},
|
|
{ "MenuScrollPage",
|
|
"Seitenweise scrollen",
|
|
"Drsni meni",
|
|
"Scrolla pagina nel menu",
|
|
},
|
|
{ "MarkInstantRecord",
|
|
"Direktaufz. markieren",
|
|
"Oznaci direktno snemanje",
|
|
"Marca la registrazione",
|
|
},
|
|
{ "LnbFrequLo",
|
|
"Untere LNB-Frequenz",
|
|
"Spodnja LNB-frek.",
|
|
"Freq LO LNB",
|
|
},
|
|
{ "LnbFrequHi",
|
|
"Obere LNB-Frequenz",
|
|
"Zgornja LNB-frek.",
|
|
"Freq HI LNB",
|
|
},
|
|
{ "SetSystemTime",
|
|
"Systemzeit stellen",
|
|
"Sistemski cas",
|
|
"Setta orario auto",
|
|
},
|
|
{ "MarginStart",
|
|
"Zeitpuffer bei Anfang",
|
|
"Premor pred zacetkom",
|
|
"Min margine inizio",
|
|
},
|
|
{ "MarginStop",
|
|
"Zeitpuffer bei Ende",
|
|
"Premor za koncem",
|
|
"Min margine fine",
|
|
},
|
|
{ "EPGScanTimeout",
|
|
"Zeit bis EPG Scan",
|
|
"Cas do EPG pregleda",
|
|
"Timeout EPG",
|
|
},
|
|
// The days of the week:
|
|
{ "MTWTFSS",
|
|
"MDMDFSS",
|
|
"PTSCPSN",
|
|
"DLMMGVS",
|
|
},
|
|
// Learning keys:
|
|
{ "Learning Remote Control Keys",
|
|
"Fernbedienungs-Codes lernen",
|
|
"Ucim se kod upravljalca",
|
|
"Apprendimento tasti unita` remota",
|
|
},
|
|
{ "Phase 1: Detecting RC code type",
|
|
"Phase 1: FB Code feststellen",
|
|
"Faza 1: Sprejemanje IR kode",
|
|
"Fase 1: tipo ricevitore RC",
|
|
},
|
|
{ "Press any key on the RC unit",
|
|
"Eine Taste auf der FB drücken",
|
|
"Pritisnite tipko na upravljalcu",
|
|
"Premere un tasto nell'unita` RC",
|
|
},
|
|
{ "RC code detected!",
|
|
"FB Code erkannt!",
|
|
"IR koda sprejeta!",
|
|
"Codice RC rilevato!",
|
|
},
|
|
{ "Do not press any key...",
|
|
"Keine Taste drücken...",
|
|
"Ne pritiskajte tipk...",
|
|
"Non premere alcun tasto...",
|
|
},
|
|
{ "Phase 2: Learning specific key codes",
|
|
"Phase 2: Einzelne Tastencodes lernen",
|
|
"Faza 2: Ucenje posebnih kod",
|
|
"Fase 2: Codici specifici dei tasti",
|
|
},
|
|
{ "Press key for '%s'",
|
|
"Taste für '%s' drücken",
|
|
"Pritisnite tipko za '%s'",
|
|
"Premere il tasto per '%s'",
|
|
},
|
|
{ "Press 'Up' to confirm",
|
|
"'Auf' drücken zum Bestätigen",
|
|
"Pritisnite tipko 'Gor' za potrditev",
|
|
"Premere 'Su' per confermare",
|
|
},
|
|
{ "Press 'Down' to continue",
|
|
"'Ab' drücken zum Weitermachen",
|
|
"Pritisnite tipko 'Dol' za nadaljevanje",
|
|
"Premere 'Giu' per confermare",
|
|
},
|
|
{ "(press 'Up' to go back)",
|
|
"('Auf' drücken um zurückzugehen)",
|
|
"(pritisnite 'Gor' za nazaj)",
|
|
"(premere 'Su' per tornare indietro)",
|
|
},
|
|
{ "(press 'Down' to end key definition)",
|
|
"('Ab' drücken zum Beenden",
|
|
"(pritisnite 'Dol' za konec)",
|
|
"('Giu' per finire la definiz tasti)",
|
|
},
|
|
{ "Phase 3: Saving key codes",
|
|
"Phase 3: Codes abspeichern",
|
|
"Faza 3: Shranjujem kodo",
|
|
"Fase 3: Salvataggio key codes",
|
|
},
|
|
{ "Press 'Up' to save, 'Down' to cancel",
|
|
"'Auf' speichert, 'Ab' bricht ab",
|
|
"'Gor' za potrditev, 'Dol' za prekinitev",
|
|
"'Su' per salvare, 'Giu' per annullare",
|
|
},
|
|
// Key names:
|
|
{ "Up",
|
|
"Auf",
|
|
"Gor",
|
|
"Su",
|
|
},
|
|
{ "Down",
|
|
"Ab",
|
|
"Dol",
|
|
"Giu",
|
|
},
|
|
{ "Menu",
|
|
"Menü",
|
|
"Meni",
|
|
"Menu",
|
|
},
|
|
{ "Ok",
|
|
"Ok",
|
|
"Ok",
|
|
"Ok",
|
|
},
|
|
{ "Back",
|
|
"Zurück",
|
|
"Nazaj",
|
|
"Indietro",
|
|
},
|
|
{ "Left",
|
|
"Links",
|
|
"Levo",
|
|
"Sinistra",
|
|
},
|
|
{ "Right",
|
|
"Rechts",
|
|
"Desno",
|
|
"Destra",
|
|
},
|
|
{ "Red",
|
|
"Rot",
|
|
"Rdeca",
|
|
"Rosso",
|
|
},
|
|
{ "Green",
|
|
"Grün",
|
|
"Zelena",
|
|
"Verde",
|
|
},
|
|
{ "Yellow",
|
|
"Gelb",
|
|
"Rumena",
|
|
"Giallo",
|
|
},
|
|
{ "Blue",
|
|
"Blau",
|
|
"Modra",
|
|
"Blu",
|
|
},
|
|
// Miscellaneous:
|
|
{ "yes",
|
|
"ja",
|
|
"da",
|
|
"si",
|
|
},
|
|
{ "no",
|
|
"nein",
|
|
"ne",
|
|
"no",
|
|
},
|
|
{ "Stop replaying",
|
|
"Wiedergabe beenden",
|
|
"Prekini ponavljanje",
|
|
"Interrompi riproduzione",
|
|
},
|
|
{ "Stop recording ", // note the trailing blank!
|
|
"Aufzeichnung beenden ",
|
|
"Prekini shranjevanje ",
|
|
"Interrompi registrazione ",
|
|
},
|
|
{ "Cancel editing",
|
|
"Schneiden abbrechen",
|
|
"Prekini urejanje",
|
|
"Annulla modifiche",
|
|
},
|
|
{ "Switching primary DVB...",
|
|
"Primäres Interface wird umgeschaltet...",
|
|
"Preklapljanje primarne naprave...",
|
|
"Cambio su card DVB primaria...",
|
|
},
|
|
{ "Up/Dn for new location - OK to move",
|
|
"Auf/Ab für neue Position - dann OK",
|
|
"Gor/Dol za novo poz. - Ok za premik",
|
|
"Su/Giu per nuova posizione - OK per muovere",
|
|
},
|
|
{ "Editing process started",
|
|
"Schnitt gestartet",
|
|
"Urejanje se je zacelo",
|
|
"Processo di modifica iniziato",
|
|
},
|
|
{ NULL }
|
|
};
|
|
|
|
const char *tr(const char *s)
|
|
{
|
|
if (Setup.OSDLanguage) {
|
|
for (const tPhrase *p = Phrases; **p; p++) {
|
|
if (strcmp(s, **p) == 0) {
|
|
const char *t = (*p)[Setup.OSDLanguage];
|
|
if (t && *t)
|
|
return t;
|
|
}
|
|
}
|
|
esyslog(LOG_ERR, "no translation found for '%s' in language %d (%s)\n", s, Setup.OSDLanguage, Phrases[0][Setup.OSDLanguage]);
|
|
}
|
|
return s;
|
|
}
|
|
|
|
const char * const * Languages(void)
|
|
{
|
|
return &Phrases[0][0];
|
|
}
|
|
|