/* * i18n.c: Internationalization * * See the main source file 'vdr.c' for copyright information and * how to reach the author. * * $Id: i18n.c 1.1 2000/11/11 10:39:27 kls Exp $ */ /* * 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. Add a new line to 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. * 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 = 2; typedef const char *tPhrase[NumLanguages]; const tPhrase Phrases[] = { // The name of the language (this MUST be the first phrase!): { "English", "Deutsch", }, // Menu titles: { "Main", "Hauptmenü", }, { "Schedule", "Programm", }, { "Channels", "Kanäle", }, { "Timers", "Timer", }, { "Recordings", "Aufzeichnungen", }, { "Setup", "Einstellungen", }, { "Edit Channel", "Kanal Editieren", }, { "Edit Timer", "Timer Editieren", }, { "Event", "Sendung", }, { "Summary", "Inhalt", }, { "Schedule - %s", "Programm - %s", }, { "What's on now?", "Was läuft jetzt?", }, { "What's on next?", "Was läuft als nächstes?", }, // Button texts (must not be more than 10 characters!): { "Edit", "Editieren", }, { "New", "Neu", }, { "Delete", "Löschen", }, { "Mark", "Markieren", }, { "Record", "Aufnehmen", }, { "Play", "Wiedergabe", }, { "Resume", "Weiter", }, { "Summary", "Inhalt", }, { "Switch", "Umschalten", }, { "Now", "Jetzt", }, { "Next", "Nächste", }, { "Schedule", "Programm", }, // Confirmations: { "Delete Channel?", "Kanal löschen?", }, { "Delete Timer?", "Timer löschen?", }, { "Delete Recording?", "Aufzeichnung löschen?", }, { "Stop Recording?", "Aufzeichnung beenden?", }, // Channel parameters: { "Name", "Name", }, { "Frequency", "Frequenz", }, { "Polarization", "Polarisation", }, { "Diseqc", "Diseqc", }, { "Srate", "Srate", }, { "Vpid", "Vpid", }, { "Apid", "Apid", }, { "CA", "CA", }, { "Pnr", "Pnr", }, // Timer parameters: { "Active", "Aktiv", }, { "Channel", "Kanal", }, { "Day", "Tag", }, { "Start", "Anfang", }, { "Stop", "Ende", }, { "Priority", "Priorität", }, { "Lifetime", "Lebensdauer", }, { "File", "Datei", }, // Error messages: { "Channel is being used by a timer!", "Kanal wird von einem Timer benutzt", }, { "Can't switch channel!", "Kanal kann nicht umgeschaltet werden!", }, { "Timer is recording!", "Timer zeichnet gerade auf!", }, { "Error while deleting recording!", "Fehler beim Löschen der Aufzeichnung!", }, { "*** Invalid Channel ***", "*** Ungültiger Kanal ***", }, { "No free DVB device to record!", "Keine freie DVB-Karte zum Aufnehmen!", }, { "Channel locked (recording)!", "Kanal blockiert (zeichnet auf)!", }, // Setup parameters: { "OSD-Language", "OSD-Sprache", }, { "PrimaryDVB", "Primäres Interface", }, { "ShowInfoOnChSwitch", "Info zeigen", }, { "MenuScrollPage", "Seitenweise scrollen", }, { "MarkInstantRecord", "Direktaufz. markieren", }, { "LnbFrequLo", "Untere LNB-Frequenz", }, { "LnbFrequHi", "Obere LNB-Frequenz", }, { "SetSystemTime", "Systemzeit stellen", }, { "MarginStart", "Zeitpuffer bei Anfang", }, { "MarginStop", "Zeitpuffer bei Ende", }, // The days of the week: { "MTWTFSS", "MDMDFSS", }, // Learning keys: { "Learning Remote Control Keys", "Fernbedienungs-Codes lernen", }, { "Phase 1: Detecting RC code type", "Phase 1: FB Code feststellen", }, { "Press any key on the RC unit", "Eine Taste auf der FB drücken", }, { "RC code detected!", "FB Code erkannt!", }, { "Do not press any key...", "Keine Taste drücken...", }, { "Phase 2: Learning specific key codes", "Phase 2: Einzelne Tastencodes lernen", }, { "Press key for '%s'", "Taste für '%s' drücken", }, { "Press 'Up' to confirm", "'Auf' drücken zum Bestätigen", }, { "Press 'Down' to continue", "'Ab' drücken zum Weitermachen", }, { "(press 'Up' to go back)", "('Auf' drücken um zurückzugehen)", }, { "(press 'Down' to end key definition)", "('Ab' drücken zum Beenden", }, { "Phase 3: Saving key codes", "Phase 3: Codes abspeichern", }, { "Press 'Up' to save, 'Down' to cancel", "'Auf' speichert, 'Ab' bricht ab", }, // Key names: { "Up", "Auf", }, { "Down", "Ab", }, { "Menu", "Menü", }, { "Ok", "Ok", }, { "Back", "Zurück", }, { "Left", "Links", }, { "Right", "Rechts", }, { "Red", "Rot", }, { "Green", "Grün", }, { "Yellow", "Gelb", }, { "Blue", "Blau", }, // Miscellaneous: { "yes", "ja", }, { "no", "nein", }, { "Stop replaying", "Wiedergabe beenden", }, { "Stop recording ", // note the trailing blank! "Aufzeichnung beenden ", }, { "Switching primary DVB...", "Primäres Interface wird umgeschaltet...", }, { "Up/Dn for new location - OK to move", "Auf/Ab für neue Position, dann OK", }, { NULL } }; const char *tr(const char *s) { if (Setup.OSDLanguage) { for (const tPhrase *p = Phrases; **p; p++) { if (strcmp(s, **p) == 0) return (*p)[Setup.OSDLanguage]; } 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]; }