/* * i18n.c: Internationalization * * See the main source file 'vdr.c' for copyright information and * how to reach the author. * * $Id: i18n.c 1.19 2001/06/16 14:27:10 kls Exp $ * * Slovenian translations provided by Miha Setina * Italian translations provided by Alberto Carraro * Dutch translations provided by Arnold Niessen * */ /* * 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 to have * it included in the next version of VDR. */ #include "i18n.h" #include #include "config.h" #include "tools.h" const int NumLanguages = 5; typedef const char *tPhrase[NumLanguages]; const tPhrase Phrases[] = { // The name of the language (this MUST be the first phrase!): { "English", "Deutsch", "Slovenski", "Italiano", "Nederlands", }, // Menu titles: { "Main", "Hauptmenü", "Glavni meni", "Principale", "Hoofdmenu", }, { "Schedule", "Programm", "Urnik", "Programmi", "Gids", }, { "Channels", "Kanäle", "Kanali", "Canali", "Kanalen", }, { "Timers", "Timer", "Termini", "Timer", "Timers", }, { "Recordings", "Aufzeichnungen", "Posnetki", "Registrazioni", "Opnames", }, { "Setup", "Einstellungen", "Nastavitve", "Opzioni", "Instellingen", }, { "Commands", "Befehle", "Ukazi", "Comandi", "Commando's", }, { "Edit Channel", "Kanal Editieren", "Uredi kanal", "Modifica canale", "Kanaal aanpassen", }, { "Edit Timer", "Timer Editieren", "Uredi termin", "Modifica Timer", "Timer veranderen", }, { "Event", "Sendung", "Oddaja", "Eventi", "Uitzending", }, { "Summary", "Inhalt", "Vsebina", "Sommario", "Inhoud", }, { "Schedule - %s", "Programm - %s", "Urnik - %s", "Programma - %s", "Programma - %s", }, { "What's on now?", "Was läuft jetzt?", "Kaj je na sporedu?", "In programmazione", "Wat is er nu?", }, { "What's on next?", "Was läuft als nächstes?", "Kaj sledi?", "Prossimi programmi", "Wat komt er hierna?", }, // Button texts (must not be more than 10 characters!): { "Edit", "Editieren", "Uredi", "Modifica", "Verander", }, { "New", "Neu", "Novo", "Nuovo", "Nieuw", }, { "Delete", "Löschen", "Odstrani", "Cancella", "Verwijder", }, { "Mark", "Markieren", "Oznaci", "Marca", "Verplaats", }, { "Record", "Aufnehmen", "Posnemi", "Registra", "Opnemen", }, { "Play", "Wiedergabe", "Predavajaj", "Riproduci", "Afspelen", }, { "Rewind", "Anfang", "Zacetek", "Da inizio", "Spoel terug", }, { "Resume", "Weiter", "Nadaljuj", "Riprendi", "Verder", }, { "Summary", "Inhalt", "Vsebina", "Sommario", "Inhoud", }, { "Switch", "Umschalten", "Preklopi", "Cambia", "Selecteer", }, { "Now", "Jetzt", "Sedaj", "Adesso", "Nu", }, { "Next", "Nächste", "Naslednji", "Prossimo", "Hierna", }, { "Schedule", "Programm", "Urnik", "Programma", "Programma", }, { "Language", "Sprache", "Jezik", "Linguaggio", "Taal", }, // Confirmations: { "Delete channel?", "Kanal löschen?", "Odstrani kanal?", "Cancello il canale?", "Kanaal verwijderen?", }, { "Delete timer?", "Timer löschen?", "Odstani termin?", "Cancello il timer?", "Timer verwijderen?", }, { "Delete recording?", "Aufzeichnung löschen?", "Odstrani posnetek?", "Cancello la registrazione?", "Opname verwijderen?", }, { "Stop recording?", "Aufzeichnung beenden?", "Koncaj snemanje?", "Fermo la registrazione?", "Opname stoppen?", }, { "Cancel editing?", "Schneiden abbrechen?", "Zelite prekiniti urejanje?", "Annullo la modifica?", "Bewerken afbreken?", }, // Channel parameters: { "Name", "Name", "Naziv", "Nome", "Naam", }, { "Frequency", "Frequenz", "Frekvenca", "Frequenza", "Frequentie", }, { "Polarization", "Polarisation", "Polarizacija", "Polarizzazione", "Polarisatie", }, { "Diseqc", "Diseqc", "Diseqc", "Diseqc", "Diseqc", }, { "Srate", "Srate", "Srate", "Srate", "Srate", }, { "Vpid", "Vpid", "Vpid", "Vpid", "Vpid", }, { "Apid1", "Apid1", "Apid1", "Apid1", "Apid1", }, { "Apid2", "Apid2", "Apid2", "Apid2", "Apid2", }, { "Tpid", "Tpid", "Tpid", "Tpid", "Tpid", }, { "CA", "CA", "CA", "CA", "CA", }, { "Pnr", "Pnr", "Pnr", "Pnr", "Pnr", }, // Timer parameters: { "Active", "Aktiv", "Aktivno", "Attivo", "Actief", }, { "Channel", "Kanal", "Kanal", "Canale", "Kanaal", }, { "Day", "Tag", "Dan", "Giorno", "Dag", }, { "Start", "Anfang", "Zacetek", "Inizio", "Begin", }, { "Stop", "Ende", "Konec", "Fine", "Einde", }, { "Priority", "Priorität", "Prioriteta", "Priorita", "Prioriteit", }, { "Lifetime", "Lebensdauer", "Veljavnost", "Durata", "Bewaarduur", }, { "File", "Datei", "Datoteka", "Nome", "Filenaam", }, // Error messages: { "Channel is being used by a timer!", "Kanal wird von einem Timer benutzt!", "Urnik zaseda kanal!", "Canale occupato da un timer!", "Kanaal wordt gebruikt door een timer!", }, { "Can't switch channel!", "Kanal kann nicht umgeschaltet werden!", "Ne morem preklopiti kanala!", "Impossibile cambiare canale!", "Kan geen kanaal wisselen!", }, { "Timer is recording!", "Timer zeichnet gerade auf!", "Snemanje po urniku!", "Registrazione di un timer in corso!", "Timer is aan het opnemen!", }, { "Error while deleting recording!", "Fehler beim Löschen der Aufzeichnung!", "Napaka pri odstranjevanju posnetka!", "Errore durante la canc del filmato!", "Fout bij verwijderen opname!", }, { "*** Invalid Channel ***", "*** Ungültiger Kanal ***", "*** Neznan kanal ***", "*** CANALE INVALIDO ***", "*** Ongeldig kanaal ***", }, { "No free DVB device to record!", "Keine freie DVB-Karte zum Aufnehmen!", "Ni proste DVB naprave za snemanje!", "Nessuna card DVB disp per registrare!", "Geen vrije DVB kaart om op te nemen!", }, { "Channel locked (recording)!", "Kanal blockiert (zeichnet auf)!", "Zaklenjen kanal (snemanje)!", "Canale bloccato (in registrazione)!", "Kanaal geblokkeerd (neemt op)!", }, { "Can't start editing process!", "Schnitt kann nicht gestartet werden!", "Ne morem zaceti urejanja!", "Imposs iniziare processo di modifica", "Kan niet beginnen met bewerken!", }, { "Editing process already active!", "Schnitt bereits aktiv!", "Urejanje je ze aktivno!", "Processo di modifica gia` attivo", "Bewerken is al actief!", }, // Setup parameters: { "OSD-Language", "OSD-Sprache", "OSD-jezik", "Linguaggio OSD", "OSD-taal", }, { "PrimaryDVB", "Primäres Interface", "Primarna naprava", "Scheda DVB primaria", "Eerste DVB kaart", }, { "ShowInfoOnChSwitch", "Info zeigen", "Pokazi naziv kanala", "Vis info nel cambio canale", "Kanaal info tonen", }, { "MenuScrollPage", "Seitenweise scrollen", "Drsni meni", "Scrolla pagina nel menu", "Scrollen per pagina", }, { "MarkInstantRecord", "Direktaufz. markieren", "Oznaci direktno snemanje", "Marca la registrazione", "Direkte opnamen markeren", }, { "LnbSLOF", "LnbSLOF", "LnbSLOF", "LnbSLOF", "LnbSLOF", }, { "LnbFrequLo", "Untere LNB-Frequenz", "Spodnja LNB-frek.", "Freq LO LNB", "Laagste LNB frequentie", }, { "LnbFrequHi", "Obere LNB-Frequenz", "Zgornja LNB-frek.", "Freq HI LNB", "Hoogste LNB frequentie", }, { "SetSystemTime", "Systemzeit stellen", "Sistemski cas", "Setta orario auto", "Systeem klok instellen", }, { "MarginStart", "Zeitpuffer bei Anfang", "Premor pred zacetkom", "Min margine inizio", "Tijd marge (begin)", }, { "MarginStop", "Zeitpuffer bei Ende", "Premor za koncem", "Min margine fine", "Tijd marge (eind)", }, { "EPGScanTimeout", "Zeit bis EPG Scan", "Cas do EPG pregleda", "Timeout EPG", "EPG-scan Timeout", }, { "SVDRPTimeout", "SVDRP Timeout", "", // TODO "Timeout SVDRP", "SVDRP Timeout", }, { "PrimaryLimit", "Primär-Limit", "", // TODO "", // TODO "", // TODO }, { "DefaultPriority", "Default Priorität", "", // TODO "", // TODO "", // TODO }, { "DefaultLifetime", "Default Lebensdauer", "", // TODO "", // TODO "", // TODO }, { "VideoFormat", "Video Format", "", // TODO "", // TODO "", // TODO }, // The days of the week: { "MTWTFSS", "MDMDFSS", "PTSCPSN", "DLMMGVS", "MDWDVZZ", }, // Learning keys: { "Learning Remote Control Keys", "Fernbedienungs-Codes lernen", "Ucim se kod upravljalca", "Apprendimento tasti unita` remota", "Leren toetsen afstandsbediening", }, { "Phase 1: Detecting RC code type", "Phase 1: FB Code feststellen", "Faza 1: Sprejemanje IR kode", "Fase 1: tipo ricevitore RC", "Fase 1: detecteren type afstandsbediening", }, { "Press any key on the RC unit", "Eine Taste auf der FB drücken", "Pritisnite tipko na upravljalcu", "Premere un tasto nell'unita` RC", "Druk op een willekeurige knop", }, { "RC code detected!", "FB Code erkannt!", "IR koda sprejeta!", "Codice RC rilevato!", "Afstandsbediening code herkend!", }, { "Do not press any key...", "Keine Taste drücken...", "Ne pritiskajte tipk...", "Non premere alcun tasto...", "Druk niet op een knop...", }, { "Phase 2: Learning specific key codes", "Phase 2: Einzelne Tastencodes lernen", "Faza 2: Ucenje posebnih kod", "Fase 2: Codici specifici dei tasti", "Fase 2: Leren specifieke toets-codes", }, { "Press key for '%s'", "Taste für '%s' drücken", "Pritisnite tipko za '%s'", "Premere il tasto per '%s'", "Druk knop voor '%s'", }, { "Press 'Up' to confirm", "'Auf' drücken zum Bestätigen", "Pritisnite tipko 'Gor' za potrditev", "Premere 'Su' per confermare", "Druk 'Omhoog' om te bevestigen", }, { "Press 'Down' to continue", "'Ab' drücken zum Weitermachen", "Pritisnite tipko 'Dol' za nadaljevanje", "Premere 'Giu' per confermare", "Druk 'Omlaag' om verder te gaan", }, { "(press 'Up' to go back)", "('Auf' drücken um zurückzugehen)", "(pritisnite 'Gor' za nazaj)", "(premere 'Su' per tornare indietro)", "(druk 'Omhoog' om terug te gaan)", }, { "(press 'Down' to end key definition)", "('Ab' drücken zum Beenden)", "(pritisnite 'Dol' za konec)", "('Giu' per finire la definiz tasti)", "(Druk 'Omlaag' om te beeindigen)", }, { "Phase 3: Saving key codes", "Phase 3: Codes abspeichern", "Faza 3: Shranjujem kodo", "Fase 3: Salvataggio key codes", "Fase 3: Opslaan toets 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", "'Omhoog' te bewaren, 'Omlaag' voor annuleren", }, // Key names: { "Up", "Auf", "Gor", "Su", "Omhoog", }, { "Down", "Ab", "Dol", "Giu", "Omlaag", }, { "Menu", "Menü", "Meni", "Menu", "Menu", }, { "Ok", "Ok", "Ok", "Ok", "Ok", }, { "Back", "Zurück", "Nazaj", "Indietro", "Terug", }, { "Left", "Links", "Levo", "Sinistra", "Links", }, { "Right", "Rechts", "Desno", "Destra", "Rechts", }, { "Red", "Rot", "Rdeca", "Rosso", "Rood", }, { "Green", "Grün", "Zelena", "Verde", "Groen", }, { "Yellow", "Gelb", "Rumena", "Giallo", "Geel", }, { "Blue", "Blau", "Modra", "Blu", "Blauw", }, // Miscellaneous: { "yes", "ja", "da", "si", "ja", }, { "no", "nein", "ne", "no", "nee", }, { " Stop replaying", // note the leading blank! " Wiedergabe beenden", " Prekini ponavljanje", " Interrompi riproduzione", " Stop afspelen", }, { " Stop recording ", // note the leading and trailing blanks! " Aufzeichnung beenden ", " Prekini shranjevanje ", " Interrompi registrazione ", " Stop opnemen ", }, { " Cancel editing", // note the leading blank! " Schneiden abbrechen", " Prekini urejanje", " Annulla modifiche", " Bewerken afbreken", }, { "Switching primary DVB...", "Primäres Interface wird umgeschaltet...", "Preklapljanje primarne naprave...", "Cambio su card DVB primaria...", "Eerste DVB-kaart wordt omgeschakeld...", }, { "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", "Gebruik Omhoog/Omlaag - daarna Ok", }, { "Editing process started", "Schnitt gestartet", "Urejanje se je zacelo", "Processo di modifica iniziato", "Bewerken is gestart", }, { 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]; }