summaryrefslogtreecommitdiff
path: root/i18n.c
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2000-11-11 10:39:27 +0100
committerKlaus Schmidinger <vdr@tvdr.de>2000-11-11 10:39:27 +0100
commitb668b2d013cdd79ace08f9e89817cc631ef555d0 (patch)
treeb889a7d910cfa36978a92e162d91177f91c7466d /i18n.c
parent1d828252b6f6f3af4f3f718f8cf1e8d67c4678ea (diff)
downloadvdr-b668b2d013cdd79ace08f9e89817cc631ef555d0.tar.gz
vdr-b668b2d013cdd79ace08f9e89817cc631ef555d0.tar.bz2
Implemented internationalization
Diffstat (limited to 'i18n.c')
-rw-r--r--i18n.c366
1 files changed, 366 insertions, 0 deletions
diff --git a/i18n.c b/i18n.c
new file mode 100644
index 00000000..06b1241d
--- /dev/null
+++ b/i18n.c
@@ -0,0 +1,366 @@
+/*
+ * 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 <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 = 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];
+}
+