mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Implemented internationalization
This commit is contained in:
parent
1d828252b6
commit
b668b2d013
7
FORMATS
7
FORMATS
@ -47,8 +47,11 @@ Video Disk Recorder File Formats
|
|||||||
----F-- = Friday
|
----F-- = Friday
|
||||||
-----S- = Saturday
|
-----S- = Saturday
|
||||||
------S = Sunday
|
------S = Sunday
|
||||||
(any combination is possible, for example MTWTF--) or the "day of month" (1..31)
|
(any combination is possible, for example MTWTF--, and the days may be
|
||||||
- Star time (first two digits for the hour, second two digits for the minutes)
|
indicated by any characters except '-', so for example ABC---- would set
|
||||||
|
a timer that records on monday, tuesday and wednesday) or the "day of month"
|
||||||
|
(1..31)
|
||||||
|
- Start time (first two digits for the hour, second two digits for the minutes)
|
||||||
- End time (first two digits for the hour, second two digits for the minutes)
|
- End time (first two digits for the hour, second two digits for the minutes)
|
||||||
- Priority (from 00 to 99, 00 = lowest prioity, 99 = highest priority)
|
- Priority (from 00 to 99, 00 = lowest prioity, 99 = highest priority)
|
||||||
- Guaranteed lifetime of recording (in days)
|
- Guaranteed lifetime of recording (in days)
|
||||||
|
4
HISTORY
4
HISTORY
@ -266,9 +266,11 @@ Video Disk Recorder Revision History
|
|||||||
are programmed via the "Schedules" menu) are now replaced by suitable
|
are programmed via the "Schedules" menu) are now replaced by suitable
|
||||||
substitutes.
|
substitutes.
|
||||||
|
|
||||||
2000-11-05: Version 0.68
|
2000-11-11: Version 0.68
|
||||||
|
|
||||||
- Date and time in the title of an event info page are now always right adjusted.
|
- Date and time in the title of an event info page are now always right adjusted.
|
||||||
- The 'current channel' is now handled device specific (in case there is more
|
- The 'current channel' is now handled device specific (in case there is more
|
||||||
than one DVB card).
|
than one DVB card).
|
||||||
- The 'SetSystemTime' option in the "Setup" menu is now shown as "yes/no".
|
- The 'SetSystemTime' option in the "Setup" menu is now shown as "yes/no".
|
||||||
|
- Implemented "internationalization" (see 'i18n.c' for information on how to
|
||||||
|
add new languages).
|
||||||
|
4
MANUAL
4
MANUAL
@ -228,6 +228,10 @@ Video Disk Recorder User's Manual
|
|||||||
displayed as "no" and "yes" in the "Setup" menu, while in the setup file they
|
displayed as "no" and "yes" in the "Setup" menu, while in the setup file they
|
||||||
are stored as '0' and '1', respectively):
|
are stored as '0' and '1', respectively):
|
||||||
|
|
||||||
|
OSDLanguage = 0 Defines the language used to display the OSD texts.
|
||||||
|
0 = Englisch
|
||||||
|
1 = Deutsch
|
||||||
|
|
||||||
PrimaryDVB = 1 Defines the primary DVB interface (i.e. the one that
|
PrimaryDVB = 1 Defines the primary DVB interface (i.e. the one that
|
||||||
will display the menus and will react on input through
|
will display the menus and will react on input through
|
||||||
the remote control). Valid values range from '1' to the
|
the remote control). Valid values range from '1' to the
|
||||||
|
15
Makefile
15
Makefile
@ -4,12 +4,12 @@
|
|||||||
# See the main source file 'vdr.c' for copyright information and
|
# See the main source file 'vdr.c' for copyright information and
|
||||||
# how to reach the author.
|
# how to reach the author.
|
||||||
#
|
#
|
||||||
# $Id: Makefile 1.14 2000/10/28 16:24:16 kls Exp $
|
# $Id: Makefile 1.15 2000/11/11 09:59:56 kls Exp $
|
||||||
|
|
||||||
DVBDIR = ../DVB
|
DVBDIR = ../DVB
|
||||||
|
|
||||||
INCLUDES = -I$(DVBDIR)/driver
|
INCLUDES = -I$(DVBDIR)/driver
|
||||||
OBJS = config.o dvbapi.o dvbosd.o eit.o font.o interface.o menu.o osd.o\
|
OBJS = config.o dvbapi.o dvbosd.o eit.o font.o i18n.o interface.o menu.o osd.o\
|
||||||
recording.o remote.o svdrp.o thread.o tools.o vdr.o videodir.o
|
recording.o remote.o svdrp.o thread.o tools.o vdr.o videodir.o
|
||||||
|
|
||||||
OSDFONT = -adobe-helvetica-medium-r-normal--23-*-100-100-p-*-iso8859-1
|
OSDFONT = -adobe-helvetica-medium-r-normal--23-*-100-100-p-*-iso8859-1
|
||||||
@ -35,20 +35,21 @@ font: genfontfile fontosd.c
|
|||||||
|
|
||||||
# Dependencies:
|
# Dependencies:
|
||||||
|
|
||||||
config.o : config.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h remote.h svdrp.h thread.h tools.h
|
config.o : config.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h interface.h remote.h svdrp.h thread.h tools.h
|
||||||
dvbapi.o : dvbapi.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h remote.h svdrp.h thread.h tools.h videodir.h
|
dvbapi.o : dvbapi.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h remote.h svdrp.h thread.h tools.h videodir.h
|
||||||
dvbosd.o : dvbosd.c dvbosd.h font.h tools.h
|
dvbosd.o : dvbosd.c dvbosd.h font.h tools.h
|
||||||
eit.o : eit.c eit.h thread.h tools.h
|
eit.o : eit.c eit.h thread.h tools.h
|
||||||
font.o : font.c font.h fontosd.c tools.h
|
font.o : font.c font.h fontosd.c tools.h
|
||||||
interface.o: interface.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h remote.h svdrp.h thread.h tools.h
|
i18n.o : i18n.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h thread.h tools.h
|
||||||
menu.o : menu.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h menu.h osd.h recording.h remote.h svdrp.h thread.h tools.h
|
interface.o: interface.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h interface.h remote.h svdrp.h thread.h tools.h
|
||||||
osd.o : osd.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h osd.h remote.h svdrp.h thread.h tools.h
|
menu.o : menu.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h interface.h menu.h osd.h recording.h remote.h svdrp.h thread.h tools.h
|
||||||
|
osd.o : osd.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h interface.h osd.h remote.h svdrp.h thread.h tools.h
|
||||||
recording.o: recording.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h recording.h remote.h svdrp.h thread.h tools.h videodir.h
|
recording.o: recording.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h recording.h remote.h svdrp.h thread.h tools.h videodir.h
|
||||||
remote.o : remote.c config.h dvbapi.h dvbosd.h eit.h font.h remote.h thread.h tools.h
|
remote.o : remote.c config.h dvbapi.h dvbosd.h eit.h font.h remote.h thread.h tools.h
|
||||||
svdrp.o : svdrp.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h remote.h svdrp.h thread.h tools.h
|
svdrp.o : svdrp.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h remote.h svdrp.h thread.h tools.h
|
||||||
thread.o : thread.c thread.h
|
thread.o : thread.c thread.h
|
||||||
tools.o : tools.c tools.h
|
tools.o : tools.c tools.h
|
||||||
vdr.o : vdr.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h menu.h osd.h recording.h remote.h svdrp.h thread.h tools.h videodir.h
|
vdr.o : vdr.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h interface.h menu.h osd.h recording.h remote.h svdrp.h thread.h tools.h videodir.h
|
||||||
videodir.o : videodir.c tools.h videodir.h
|
videodir.o : videodir.c tools.h videodir.h
|
||||||
|
|
||||||
# The main program:
|
# The main program:
|
||||||
|
12
config.c
12
config.c
@ -4,13 +4,14 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: config.c 1.30 2000/11/05 18:18:30 kls Exp $
|
* $Id: config.c 1.31 2000/11/11 09:56:01 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "dvbapi.h"
|
#include "dvbapi.h"
|
||||||
|
#include "i18n.h"
|
||||||
#include "interface.h"
|
#include "interface.h"
|
||||||
|
|
||||||
// -- cKeys ------------------------------------------------------------------
|
// -- cKeys ------------------------------------------------------------------
|
||||||
@ -270,7 +271,7 @@ bool cChannel::Switch(cDvbApi *DvbApi)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (DvbApi->Recording())
|
if (DvbApi->Recording())
|
||||||
Interface->Info("Channel locked (recording)!");
|
Interface->Info(tr("Channel locked (recording)!"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -405,7 +406,7 @@ const char *cTimer::PrintDay(int d)
|
|||||||
static char buffer[8];
|
static char buffer[8];
|
||||||
if ((d & 0x80000000) != 0) {
|
if ((d & 0x80000000) != 0) {
|
||||||
char *b = buffer;
|
char *b = buffer;
|
||||||
char *w = "MTWTFSS";
|
const char *w = tr("MTWTFSS");
|
||||||
*b = 0;
|
*b = 0;
|
||||||
while (*w) {
|
while (*w) {
|
||||||
*b++ = (d & 1) ? *w : '-';
|
*b++ = (d & 1) ? *w : '-';
|
||||||
@ -650,6 +651,7 @@ char *cSetup::fileName = NULL;
|
|||||||
|
|
||||||
cSetup::cSetup(void)
|
cSetup::cSetup(void)
|
||||||
{
|
{
|
||||||
|
OSDLanguage = 0;
|
||||||
PrimaryDVB = 1;
|
PrimaryDVB = 1;
|
||||||
ShowInfoOnChSwitch = 1;
|
ShowInfoOnChSwitch = 1;
|
||||||
MenuScrollPage = 1;
|
MenuScrollPage = 1;
|
||||||
@ -667,7 +669,8 @@ bool cSetup::Parse(char *s)
|
|||||||
char *Name = strtok(s, Delimiters);
|
char *Name = strtok(s, Delimiters);
|
||||||
char *Value = strtok(NULL, Delimiters);
|
char *Value = strtok(NULL, Delimiters);
|
||||||
if (Name && Value) {
|
if (Name && Value) {
|
||||||
if (!strcasecmp(Name, "PrimaryDVB")) PrimaryDVB = atoi(Value);
|
if (!strcasecmp(Name, "OSDLanguage")) OSDLanguage = atoi(Value);
|
||||||
|
else if (!strcasecmp(Name, "PrimaryDVB")) PrimaryDVB = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "ShowInfoOnChSwitch")) ShowInfoOnChSwitch = atoi(Value);
|
else if (!strcasecmp(Name, "ShowInfoOnChSwitch")) ShowInfoOnChSwitch = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "MenuScrollPage")) MenuScrollPage = atoi(Value);
|
else if (!strcasecmp(Name, "MenuScrollPage")) MenuScrollPage = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "MarkInstantRecord")) MarkInstantRecord = atoi(Value);
|
else if (!strcasecmp(Name, "MarkInstantRecord")) MarkInstantRecord = atoi(Value);
|
||||||
@ -717,6 +720,7 @@ bool cSetup::Save(const char *FileName)
|
|||||||
FILE *f = fopen(FileName, "w");
|
FILE *f = fopen(FileName, "w");
|
||||||
if (f) {
|
if (f) {
|
||||||
fprintf(f, "# VDR Setup\n");
|
fprintf(f, "# VDR Setup\n");
|
||||||
|
fprintf(f, "OSDLanguage = %d\n", OSDLanguage);
|
||||||
fprintf(f, "PrimaryDVB = %d\n", PrimaryDVB);
|
fprintf(f, "PrimaryDVB = %d\n", PrimaryDVB);
|
||||||
fprintf(f, "ShowInfoOnChSwitch = %d\n", ShowInfoOnChSwitch);
|
fprintf(f, "ShowInfoOnChSwitch = %d\n", ShowInfoOnChSwitch);
|
||||||
fprintf(f, "MenuScrollPage = %d\n", MenuScrollPage);
|
fprintf(f, "MenuScrollPage = %d\n", MenuScrollPage);
|
||||||
|
5
config.h
5
config.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: config.h 1.30 2000/11/05 13:17:03 kls Exp $
|
* $Id: config.h 1.31 2000/11/11 10:39:00 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __CONFIG_H
|
#ifndef __CONFIG_H
|
||||||
@ -18,7 +18,7 @@
|
|||||||
#include "eit.h"
|
#include "eit.h"
|
||||||
#include "tools.h"
|
#include "tools.h"
|
||||||
|
|
||||||
#define VDRVERSION "0.67"
|
#define VDRVERSION "0.68"
|
||||||
|
|
||||||
#define MaxBuffer 10000
|
#define MaxBuffer 10000
|
||||||
|
|
||||||
@ -229,6 +229,7 @@ private:
|
|||||||
bool Parse(char *s);
|
bool Parse(char *s);
|
||||||
public:
|
public:
|
||||||
// Also adjust cMenuSetup (menu.c) when adding parameters here!
|
// Also adjust cMenuSetup (menu.c) when adding parameters here!
|
||||||
|
int OSDLanguage;
|
||||||
int PrimaryDVB;
|
int PrimaryDVB;
|
||||||
int ShowInfoOnChSwitch;
|
int ShowInfoOnChSwitch;
|
||||||
int MenuScrollPage;
|
int MenuScrollPage;
|
||||||
|
366
i18n.c
Normal file
366
i18n.c
Normal file
@ -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];
|
||||||
|
}
|
||||||
|
|
19
i18n.h
Normal file
19
i18n.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
* i18n.h: Internationalization
|
||||||
|
*
|
||||||
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
|
* how to reach the author.
|
||||||
|
*
|
||||||
|
* $Id: i18n.h 1.1 2000/11/11 09:27:25 kls Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __I18N_H
|
||||||
|
#define __I18N_H
|
||||||
|
|
||||||
|
extern const int NumLanguages;
|
||||||
|
|
||||||
|
const char *tr(const char *s);
|
||||||
|
|
||||||
|
const char * const * Languages(void);
|
||||||
|
|
||||||
|
#endif //__I18N_H
|
31
interface.c
31
interface.c
@ -4,12 +4,13 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: interface.c 1.29 2000/11/05 12:50:44 kls Exp $
|
* $Id: interface.c 1.30 2000/11/10 17:03:02 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "interface.h"
|
#include "interface.h"
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include "i18n.h"
|
||||||
|
|
||||||
cInterface *Interface = NULL;
|
cInterface *Interface = NULL;
|
||||||
|
|
||||||
@ -321,9 +322,9 @@ void cInterface::QueryKeys(void)
|
|||||||
{
|
{
|
||||||
Keys.Clear();
|
Keys.Clear();
|
||||||
Clear();
|
Clear();
|
||||||
WriteText(1, 1, "Learning Remote Control Keys");
|
WriteText(1, 1, tr("Learning Remote Control Keys"));
|
||||||
WriteText(1, 3, "Phase 1: Detecting RC code type");
|
WriteText(1, 3, tr("Phase 1: Detecting RC code type"));
|
||||||
WriteText(1, 5, "Press any key on the RC unit");
|
WriteText(1, 5, tr("Press any key on the RC unit"));
|
||||||
cDvbApi::PrimaryDvbApi->Flush();
|
cDvbApi::PrimaryDvbApi->Flush();
|
||||||
#ifndef REMOTE_KBD
|
#ifndef REMOTE_KBD
|
||||||
unsigned char Code = 0;
|
unsigned char Code = 0;
|
||||||
@ -338,8 +339,8 @@ void cInterface::QueryKeys(void)
|
|||||||
if (rcIo->DetectCode(&Code, &Address)) {
|
if (rcIo->DetectCode(&Code, &Address)) {
|
||||||
Keys.code = Code;
|
Keys.code = Code;
|
||||||
Keys.address = Address;
|
Keys.address = Address;
|
||||||
WriteText(1, 5, "RC code detected!");
|
WriteText(1, 5, tr("RC code detected!"));
|
||||||
WriteText(1, 6, "Do not press any key...");
|
WriteText(1, 6, tr("Do not press any key..."));
|
||||||
cDvbApi::PrimaryDvbApi->Flush();
|
cDvbApi::PrimaryDvbApi->Flush();
|
||||||
rcIo->Flush(3000);
|
rcIo->Flush(3000);
|
||||||
ClearEol(0, 5);
|
ClearEol(0, 5);
|
||||||
@ -349,11 +350,11 @@ void cInterface::QueryKeys(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
WriteText(1, 3, "Phase 2: Learning specific key codes");
|
WriteText(1, 3, tr("Phase 2: Learning specific key codes"));
|
||||||
tKey *k = Keys.keys;
|
tKey *k = Keys.keys;
|
||||||
while (k->type != kNone) {
|
while (k->type != kNone) {
|
||||||
char *Prompt;
|
char *Prompt;
|
||||||
asprintf(&Prompt, "Press key for '%s'", k->name);
|
asprintf(&Prompt, tr("Press key for '%s'"), tr(k->name));
|
||||||
WriteText(1, 5, Prompt);
|
WriteText(1, 5, Prompt);
|
||||||
delete Prompt;
|
delete Prompt;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
@ -365,8 +366,8 @@ void cInterface::QueryKeys(void)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case kDown: if (k > Keys.keys + 1) {
|
case kDown: if (k > Keys.keys + 1) {
|
||||||
WriteText(1, 5, "Press 'Up' to confirm");
|
WriteText(1, 5, tr("Press 'Up' to confirm"));
|
||||||
WriteText(1, 6, "Press 'Down' to continue");
|
WriteText(1, 6, tr("Press 'Down' to continue"));
|
||||||
ClearEol(0, 7);
|
ClearEol(0, 7);
|
||||||
ClearEol(0, 8);
|
ClearEol(0, 8);
|
||||||
for (;;) {
|
for (;;) {
|
||||||
@ -391,11 +392,11 @@ void cInterface::QueryKeys(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (k > Keys.keys)
|
if (k > Keys.keys)
|
||||||
WriteText(1, 7, "(press 'Up' to go back)");
|
WriteText(1, 7, tr("(press 'Up' to go back)"));
|
||||||
else
|
else
|
||||||
ClearEol(0, 7);
|
ClearEol(0, 7);
|
||||||
if (k > Keys.keys + 1)
|
if (k > Keys.keys + 1)
|
||||||
WriteText(1, 8, "(press 'Down' to end key definition)");
|
WriteText(1, 8, tr("(press 'Down' to end key definition)"));
|
||||||
else
|
else
|
||||||
ClearEol(0, 8);
|
ClearEol(0, 8);
|
||||||
}
|
}
|
||||||
@ -409,9 +410,9 @@ void cInterface::LearnKeys(void)
|
|||||||
Clear();
|
Clear();
|
||||||
QueryKeys();
|
QueryKeys();
|
||||||
Clear();
|
Clear();
|
||||||
WriteText(1, 1, "Learning Remote Control Keys");
|
WriteText(1, 1, tr("Learning Remote Control Keys"));
|
||||||
WriteText(1, 3, "Phase 3: Saving key codes");
|
WriteText(1, 3, tr("Phase 3: Saving key codes"));
|
||||||
WriteText(1, 5, "Press 'Up' to save, 'Down' to cancel");
|
WriteText(1, 5, tr("Press 'Up' to save, 'Down' to cancel"));
|
||||||
for (;;) {
|
for (;;) {
|
||||||
eKeys key = GetKey();
|
eKeys key = GetKey();
|
||||||
if (key == kUp) {
|
if (key == kUp) {
|
||||||
|
179
menu.c
179
menu.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: menu.c 1.43 2000/11/05 18:41:09 kls Exp $
|
* $Id: menu.c 1.44 2000/11/11 09:58:12 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
@ -14,6 +14,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "eit.h"
|
#include "eit.h"
|
||||||
|
#include "i18n.h"
|
||||||
|
|
||||||
#define MENUTIMEOUT 120 // seconds
|
#define MENUTIMEOUT 120 // seconds
|
||||||
|
|
||||||
@ -131,7 +132,7 @@ cMenuEditBoolItem::cMenuEditBoolItem(const char *Name, int *Value)
|
|||||||
void cMenuEditBoolItem::Set(void)
|
void cMenuEditBoolItem::Set(void)
|
||||||
{
|
{
|
||||||
char buf[16];
|
char buf[16];
|
||||||
snprintf(buf, sizeof(buf), "%s", *value ? "yes" : "no");
|
snprintf(buf, sizeof(buf), "%s", *value ? tr("yes") : tr("no"));
|
||||||
SetValue(buf);
|
SetValue(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -493,6 +494,29 @@ eOSState cMenuEditStrItem::ProcessKey(eKeys Key)
|
|||||||
return osContinue;
|
return osContinue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --- cMenuEditStraItem -----------------------------------------------------
|
||||||
|
|
||||||
|
class cMenuEditStraItem : public cMenuEditIntItem {
|
||||||
|
private:
|
||||||
|
const char * const *strings;
|
||||||
|
protected:
|
||||||
|
virtual void Set(void);
|
||||||
|
public:
|
||||||
|
cMenuEditStraItem(const char *Name, int *Value, int NumStrings, const char * const *Strings);
|
||||||
|
};
|
||||||
|
|
||||||
|
cMenuEditStraItem::cMenuEditStraItem(const char *Name, int *Value, int NumStrings, const char * const *Strings)
|
||||||
|
:cMenuEditIntItem(Name, Value, 0, NumStrings - 1)
|
||||||
|
{
|
||||||
|
strings = Strings;
|
||||||
|
Set();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMenuEditStraItem::Set(void)
|
||||||
|
{
|
||||||
|
SetValue(strings[*value]);
|
||||||
|
}
|
||||||
|
|
||||||
// --- cMenuEditChannel ------------------------------------------------------
|
// --- cMenuEditChannel ------------------------------------------------------
|
||||||
|
|
||||||
class cMenuEditChannel : public cOsdMenu {
|
class cMenuEditChannel : public cOsdMenu {
|
||||||
@ -505,20 +529,20 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
cMenuEditChannel::cMenuEditChannel(int Index)
|
cMenuEditChannel::cMenuEditChannel(int Index)
|
||||||
:cOsdMenu("Edit Channel", 14)
|
:cOsdMenu(tr("Edit Channel"), 14)
|
||||||
{
|
{
|
||||||
channel = Channels.Get(Index);
|
channel = Channels.Get(Index);
|
||||||
if (channel) {
|
if (channel) {
|
||||||
data = *channel;
|
data = *channel;
|
||||||
Add(new cMenuEditStrItem( "Name", data.name, sizeof(data.name), FileNameChars));
|
Add(new cMenuEditStrItem( tr("Name"), data.name, sizeof(data.name), FileNameChars));
|
||||||
Add(new cMenuEditIntItem( "Frequency", &data.frequency, 10000, 13000)); //TODO exact limits???
|
Add(new cMenuEditIntItem( tr("Frequency"), &data.frequency, 10000, 13000)); //TODO exact limits???
|
||||||
Add(new cMenuEditChrItem( "Polarization", &data.polarization, "hv"));
|
Add(new cMenuEditChrItem( tr("Polarization"), &data.polarization, "hv"));
|
||||||
Add(new cMenuEditIntItem( "Diseqc", &data.diseqc, 0, 10)); //TODO exact limits???
|
Add(new cMenuEditIntItem( tr("Diseqc"), &data.diseqc, 0, 10)); //TODO exact limits???
|
||||||
Add(new cMenuEditIntItem( "Srate", &data.srate, 22000, 27500)); //TODO exact limits - toggle???
|
Add(new cMenuEditIntItem( tr("Srate"), &data.srate, 22000, 27500)); //TODO exact limits - toggle???
|
||||||
Add(new cMenuEditIntItem( "Vpid", &data.vpid, 0, 10000)); //TODO exact limits???
|
Add(new cMenuEditIntItem( tr("Vpid"), &data.vpid, 0, 10000)); //TODO exact limits???
|
||||||
Add(new cMenuEditIntItem( "Apid", &data.apid, 0, 10000)); //TODO exact limits???
|
Add(new cMenuEditIntItem( tr("Apid"), &data.apid, 0, 10000)); //TODO exact limits???
|
||||||
Add(new cMenuEditIntItem( "CA", &data.ca, 0, cDvbApi::NumDvbApis));
|
Add(new cMenuEditIntItem( tr("CA"), &data.ca, 0, cDvbApi::NumDvbApis));
|
||||||
Add(new cMenuEditIntItem( "Pnr", &data.pnr, 0));
|
Add(new cMenuEditIntItem( tr("Pnr"), &data.pnr, 0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -589,7 +613,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
cMenuChannels::cMenuChannels(void)
|
cMenuChannels::cMenuChannels(void)
|
||||||
:cOsdMenu("Channels", 4)
|
:cOsdMenu(tr("Channels"), 4)
|
||||||
{
|
{
|
||||||
//TODO
|
//TODO
|
||||||
int i = 0;
|
int i = 0;
|
||||||
@ -600,7 +624,7 @@ cMenuChannels::cMenuChannels(void)
|
|||||||
Add(new cMenuChannelItem(i, channel), i == curr);
|
Add(new cMenuChannelItem(i, channel), i == curr);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
SetHelp("Edit", "New", "Delete", "Mark");
|
SetHelp(tr("Edit"), tr("New"), tr("Delete"), tr("Mark"));
|
||||||
}
|
}
|
||||||
|
|
||||||
eOSState cMenuChannels::Switch(void)
|
eOSState cMenuChannels::Switch(void)
|
||||||
@ -641,11 +665,11 @@ eOSState cMenuChannels::Del(void)
|
|||||||
// Check if there is a timer using this channel:
|
// Check if there is a timer using this channel:
|
||||||
for (cTimer *ti = Timers.First(); ti; ti = (cTimer *)ti->Next()) {
|
for (cTimer *ti = Timers.First(); ti; ti = (cTimer *)ti->Next()) {
|
||||||
if (ti->channel == DeletedChannel) {
|
if (ti->channel == DeletedChannel) {
|
||||||
Interface->Error("Channel is being used by a timer!");
|
Interface->Error(tr("Channel is being used by a timer!"));
|
||||||
return osContinue;
|
return osContinue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (Interface->Confirm("Delete Channel?")) {
|
if (Interface->Confirm(tr("Delete Channel?"))) {
|
||||||
// Move and renumber the channels:
|
// Move and renumber the channels:
|
||||||
Channels.Del(channel);
|
Channels.Del(channel);
|
||||||
Channels.ReNumber();
|
Channels.ReNumber();
|
||||||
@ -835,7 +859,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
cMenuSummary::cMenuSummary(const char *Text)
|
cMenuSummary::cMenuSummary(const char *Text)
|
||||||
:cOsdMenu("Summary")
|
:cOsdMenu(tr("Summary"))
|
||||||
{
|
{
|
||||||
Add(new cMenuTextItem(Text, 1, 2, MenuColumns - 2, MAXOSDITEMS));
|
Add(new cMenuTextItem(Text, 1, 2, MenuColumns - 2, MAXOSDITEMS));
|
||||||
}
|
}
|
||||||
@ -861,22 +885,22 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
cMenuEditTimer::cMenuEditTimer(int Index, bool New)
|
cMenuEditTimer::cMenuEditTimer(int Index, bool New)
|
||||||
:cOsdMenu("Edit Timer", 10)
|
:cOsdMenu(tr("Edit Timer"), 12)
|
||||||
{
|
{
|
||||||
timer = Timers.Get(Index);
|
timer = Timers.Get(Index);
|
||||||
if (timer) {
|
if (timer) {
|
||||||
data = *timer;
|
data = *timer;
|
||||||
if (New)
|
if (New)
|
||||||
data.active = 1;
|
data.active = 1;
|
||||||
Add(new cMenuEditBoolItem("Active", &data.active));
|
Add(new cMenuEditBoolItem(tr("Active"), &data.active));
|
||||||
Add(new cMenuEditChanItem("Channel", &data.channel));
|
Add(new cMenuEditChanItem(tr("Channel"), &data.channel));
|
||||||
Add(new cMenuEditDayItem( "Day", &data.day));
|
Add(new cMenuEditDayItem( tr("Day"), &data.day));
|
||||||
Add(new cMenuEditTimeItem("Start", &data.start));
|
Add(new cMenuEditTimeItem(tr("Start"), &data.start));
|
||||||
Add(new cMenuEditTimeItem("Stop", &data.stop));
|
Add(new cMenuEditTimeItem(tr("Stop"), &data.stop));
|
||||||
//TODO VPS???
|
//TODO VPS???
|
||||||
Add(new cMenuEditIntItem( "Priority", &data.priority, 0, 99));
|
Add(new cMenuEditIntItem( tr("Priority"), &data.priority, 0, 99));
|
||||||
Add(new cMenuEditIntItem( "Lifetime", &data.lifetime, 0, 99));
|
Add(new cMenuEditIntItem( tr("Lifetime"), &data.lifetime, 0, 99));
|
||||||
Add(new cMenuEditStrItem( "File", data.file, sizeof(data.file), FileNameChars));
|
Add(new cMenuEditStrItem( tr("File"), data.file, sizeof(data.file), FileNameChars));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -948,7 +972,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
cMenuTimers::cMenuTimers(void)
|
cMenuTimers::cMenuTimers(void)
|
||||||
:cOsdMenu("Timer", 2, 4, 10, 6, 6)
|
:cOsdMenu(tr("Timers"), 2, 4, 10, 6, 6)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
cTimer *timer;
|
cTimer *timer;
|
||||||
@ -957,7 +981,7 @@ cMenuTimers::cMenuTimers(void)
|
|||||||
Add(new cMenuTimerItem(i, timer));
|
Add(new cMenuTimerItem(i, timer));
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
SetHelp("Edit", "New", "Delete", "Mark");
|
SetHelp(tr("Edit"), tr("New"), tr("Delete"), tr("Mark"));
|
||||||
}
|
}
|
||||||
|
|
||||||
eOSState cMenuTimers::Activate(bool On)
|
eOSState cMenuTimers::Activate(bool On)
|
||||||
@ -1000,7 +1024,7 @@ eOSState cMenuTimers::Del(void)
|
|||||||
cTimer *ti = Timers.Get(Index);
|
cTimer *ti = Timers.Get(Index);
|
||||||
if (ti) {
|
if (ti) {
|
||||||
if (!ti->recording) {
|
if (!ti->recording) {
|
||||||
if (Interface->Confirm("Delete Timer?")) {
|
if (Interface->Confirm(tr("Delete Timer?"))) {
|
||||||
Timers.Del(Timers.Get(Index));
|
Timers.Del(Timers.Get(Index));
|
||||||
cOsdMenu::Del(Index);
|
cOsdMenu::Del(Index);
|
||||||
Timers.Save();
|
Timers.Save();
|
||||||
@ -1009,7 +1033,7 @@ eOSState cMenuTimers::Del(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Interface->Error("Timer is recording!");
|
Interface->Error(tr("Timer is recording!"));
|
||||||
}
|
}
|
||||||
return osContinue;
|
return osContinue;
|
||||||
}
|
}
|
||||||
@ -1064,7 +1088,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
cMenuEvent::cMenuEvent(const cEventInfo *EventInfo, bool CanSwitch)
|
cMenuEvent::cMenuEvent(const cEventInfo *EventInfo, bool CanSwitch)
|
||||||
:cOsdMenu("Event")
|
:cOsdMenu(tr("Event"))
|
||||||
{
|
{
|
||||||
eventInfo = EventInfo;
|
eventInfo = EventInfo;
|
||||||
if (eventInfo) {
|
if (eventInfo) {
|
||||||
@ -1086,7 +1110,7 @@ cMenuEvent::cMenuEvent(const cEventInfo *EventInfo, bool CanSwitch)
|
|||||||
}
|
}
|
||||||
if (!isempty(p = eventInfo->GetExtendedDescription()))
|
if (!isempty(p = eventInfo->GetExtendedDescription()))
|
||||||
Add(new cMenuTextItem(p, 1, Line, MenuColumns - 2, Height() - Line - 2, clrCyan), true);
|
Add(new cMenuTextItem(p, 1, Line, MenuColumns - 2, Height() - Line - 2, clrCyan), true);
|
||||||
SetHelp("Record", NULL, NULL, CanSwitch ? "Switch" : NULL);
|
SetHelp(tr("Record"), NULL, NULL, CanSwitch ? tr("Switch") : NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1138,7 +1162,7 @@ static int CompareEventChannel(const void *p1, const void *p2)
|
|||||||
}
|
}
|
||||||
|
|
||||||
cMenuWhatsOn::cMenuWhatsOn(const cSchedules *Schedules, bool Now)
|
cMenuWhatsOn::cMenuWhatsOn(const cSchedules *Schedules, bool Now)
|
||||||
:cOsdMenu(Now ? "What's on now?" : "What's on next?", 4, 7, 6)
|
:cOsdMenu(Now ? tr("What's on now?") : tr("What's on next?"), 4, 7, 6)
|
||||||
{
|
{
|
||||||
const cSchedule *Schedule = Schedules->First();
|
const cSchedule *Schedule = Schedules->First();
|
||||||
const cEventInfo **pArray = NULL;
|
const cEventInfo **pArray = NULL;
|
||||||
@ -1164,7 +1188,7 @@ cMenuWhatsOn::cMenuWhatsOn(const cSchedules *Schedules, bool Now)
|
|||||||
Add(new cMenuWhatsOnItem(pArray[a]));
|
Add(new cMenuWhatsOnItem(pArray[a]));
|
||||||
|
|
||||||
delete pArray;
|
delete pArray;
|
||||||
SetHelp("Record", Now ? "Next" : "Now", "Schedule", "Switch");
|
SetHelp(tr("Record"), Now ? tr("Next") : tr("Now"), tr("Schedule"), tr("Switch"));
|
||||||
}
|
}
|
||||||
|
|
||||||
eOSState cMenuWhatsOn::Switch(void)
|
eOSState cMenuWhatsOn::Switch(void)
|
||||||
@ -1175,7 +1199,7 @@ eOSState cMenuWhatsOn::Switch(void)
|
|||||||
if (channel && channel->Switch())
|
if (channel && channel->Switch())
|
||||||
return osEnd;
|
return osEnd;
|
||||||
}
|
}
|
||||||
Interface->Error("Can't switch channel!");
|
Interface->Error(tr("Can't switch channel!"));
|
||||||
return osContinue;
|
return osContinue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1242,17 +1266,17 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
cMenuSchedule::cMenuSchedule(void)
|
cMenuSchedule::cMenuSchedule(void)
|
||||||
:cOsdMenu("Schedule", 6, 6)
|
:cOsdMenu("", 6, 6)
|
||||||
{
|
{
|
||||||
now = next = false;
|
now = next = false;
|
||||||
cChannel *channel = Channels.GetByNumber(cDvbApi::CurrentChannel());
|
cChannel *channel = Channels.GetByNumber(cDvbApi::CurrentChannel());
|
||||||
if (channel) {
|
if (channel) {
|
||||||
char *buffer = NULL;
|
char *buffer = NULL;
|
||||||
asprintf(&buffer, "Schedule - %s", channel->name);
|
asprintf(&buffer, tr("Schedule - %s"), channel->name);
|
||||||
SetTitle(buffer, false);
|
SetTitle(buffer, false);
|
||||||
|
PrepareSchedule();
|
||||||
|
SetHelp(tr("Record"), tr("Now"), tr("Next"));
|
||||||
}
|
}
|
||||||
PrepareSchedule();
|
|
||||||
SetHelp("Record", "Now", "Next");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int CompareEventTime(const void *p1, const void *p2)
|
static int CompareEventTime(const void *p1, const void *p2)
|
||||||
@ -1347,7 +1371,7 @@ void cMenuRecordingItem::Set(void)
|
|||||||
// --- cMenuRecordings -------------------------------------------------------
|
// --- cMenuRecordings -------------------------------------------------------
|
||||||
|
|
||||||
cMenuRecordings::cMenuRecordings(void)
|
cMenuRecordings::cMenuRecordings(void)
|
||||||
:cOsdMenu("Recordings", 6, 6)
|
:cOsdMenu(tr("Recordings"), 6, 6)
|
||||||
{
|
{
|
||||||
if (Recordings.Load()) {
|
if (Recordings.Load()) {
|
||||||
const char *lastReplayed = cReplayControl::LastReplayed();
|
const char *lastReplayed = cReplayControl::LastReplayed();
|
||||||
@ -1357,7 +1381,7 @@ cMenuRecordings::cMenuRecordings(void)
|
|||||||
recording = Recordings.Next(recording);
|
recording = Recordings.Next(recording);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SetHelp("Play", NULL, "Delete", "Summary");
|
SetHelp(tr("Play"), NULL, tr("Delete"), tr("Summary"));
|
||||||
Display();
|
Display();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1377,18 +1401,18 @@ eOSState cMenuRecordings::Del(void)
|
|||||||
if (ri) {
|
if (ri) {
|
||||||
//XXX what if this recording's file is currently in use???
|
//XXX what if this recording's file is currently in use???
|
||||||
//XXX if (!ti->recording) {
|
//XXX if (!ti->recording) {
|
||||||
if (Interface->Confirm("Delete Recording?")) {
|
if (Interface->Confirm(tr("Delete Recording?"))) {
|
||||||
if (ri->recording->Delete()) {
|
if (ri->recording->Delete()) {
|
||||||
cReplayControl::ClearLastReplayed(ri->recording->FileName());
|
cReplayControl::ClearLastReplayed(ri->recording->FileName());
|
||||||
cOsdMenu::Del(Current());
|
cOsdMenu::Del(Current());
|
||||||
Display();
|
Display();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Interface->Error("Error while deleting recording!");
|
Interface->Error(tr("Error while deleting recording!"));
|
||||||
}
|
}
|
||||||
//XXX }
|
//XXX }
|
||||||
//XXX else
|
//XXX else
|
||||||
//XXX Interface->Error("Timer is recording!");
|
//XXX Interface->Error(tr("Timer is recording!"));
|
||||||
}
|
}
|
||||||
return osContinue;
|
return osContinue;
|
||||||
}
|
}
|
||||||
@ -1425,24 +1449,35 @@ eOSState cMenuRecordings::ProcessKey(eKeys Key)
|
|||||||
class cMenuSetup : public cOsdMenu {
|
class cMenuSetup : public cOsdMenu {
|
||||||
private:
|
private:
|
||||||
cSetup data;
|
cSetup data;
|
||||||
|
int osdLanguage;
|
||||||
|
void Set(void);
|
||||||
public:
|
public:
|
||||||
cMenuSetup(void);
|
cMenuSetup(void);
|
||||||
virtual eOSState ProcessKey(eKeys Key);
|
virtual eOSState ProcessKey(eKeys Key);
|
||||||
};
|
};
|
||||||
|
|
||||||
cMenuSetup::cMenuSetup(void)
|
cMenuSetup::cMenuSetup(void)
|
||||||
:cOsdMenu("Setup", 20)
|
:cOsdMenu("", 25)
|
||||||
{
|
{
|
||||||
data = Setup;
|
data = Setup;
|
||||||
Add(new cMenuEditIntItem( "PrimaryDVB", &data.PrimaryDVB, 1, cDvbApi::NumDvbApis));
|
osdLanguage = Setup.OSDLanguage;
|
||||||
Add(new cMenuEditBoolItem("ShowInfoOnChSwitch", &data.ShowInfoOnChSwitch));
|
Set();
|
||||||
Add(new cMenuEditBoolItem("MenuScrollPage", &data.MenuScrollPage));
|
}
|
||||||
Add(new cMenuEditBoolItem("MarkInstantRecord", &data.MarkInstantRecord));
|
|
||||||
Add(new cMenuEditIntItem( "LnbFrequLo", &data.LnbFrequLo));
|
void cMenuSetup::Set(void)
|
||||||
Add(new cMenuEditIntItem( "LnbFrequHi", &data.LnbFrequHi));
|
{
|
||||||
Add(new cMenuEditBoolItem("SetSystemTime", &data.SetSystemTime));
|
Clear();
|
||||||
Add(new cMenuEditIntItem( "MarginStart", &data.MarginStart));
|
SetTitle(tr("Setup"));
|
||||||
Add(new cMenuEditIntItem( "MarginStop", &data.MarginStop));
|
Add(new cMenuEditStraItem(tr("OSD-Language"), &data.OSDLanguage, NumLanguages, Languages()));
|
||||||
|
Add(new cMenuEditIntItem( tr("PrimaryDVB"), &data.PrimaryDVB, 1, cDvbApi::NumDvbApis));
|
||||||
|
Add(new cMenuEditBoolItem(tr("ShowInfoOnChSwitch"), &data.ShowInfoOnChSwitch));
|
||||||
|
Add(new cMenuEditBoolItem(tr("MenuScrollPage"), &data.MenuScrollPage));
|
||||||
|
Add(new cMenuEditBoolItem(tr("MarkInstantRecord"), &data.MarkInstantRecord));
|
||||||
|
Add(new cMenuEditIntItem( tr("LnbFrequLo"), &data.LnbFrequLo));
|
||||||
|
Add(new cMenuEditIntItem( tr("LnbFrequHi"), &data.LnbFrequHi));
|
||||||
|
Add(new cMenuEditBoolItem(tr("SetSystemTime"), &data.SetSystemTime));
|
||||||
|
Add(new cMenuEditIntItem( tr("MarginStart"), &data.MarginStart));
|
||||||
|
Add(new cMenuEditIntItem( tr("MarginStop"), &data.MarginStop));
|
||||||
}
|
}
|
||||||
|
|
||||||
eOSState cMenuSetup::ProcessKey(eKeys Key)
|
eOSState cMenuSetup::ProcessKey(eKeys Key)
|
||||||
@ -1451,7 +1486,7 @@ eOSState cMenuSetup::ProcessKey(eKeys Key)
|
|||||||
|
|
||||||
if (state == osUnknown) {
|
if (state == osUnknown) {
|
||||||
switch (Key) {
|
switch (Key) {
|
||||||
case kOk: state = (Setup.PrimaryDVB != data.PrimaryDVB) ? osSwitchDvb : osBack;
|
case kOk: state = (Setup.PrimaryDVB != data.PrimaryDVB) ? osSwitchDvb : osEnd;
|
||||||
cDvbApi::PrimaryDvbApi->SetUseTSTime(data.SetSystemTime);
|
cDvbApi::PrimaryDvbApi->SetUseTSTime(data.SetSystemTime);
|
||||||
Setup = data;
|
Setup = data;
|
||||||
Setup.Save();
|
Setup.Save();
|
||||||
@ -1459,23 +1494,31 @@ eOSState cMenuSetup::ProcessKey(eKeys Key)
|
|||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (data.OSDLanguage != osdLanguage) {
|
||||||
|
int OriginalOSDLanguage = Setup.OSDLanguage;
|
||||||
|
Setup.OSDLanguage = data.OSDLanguage;
|
||||||
|
Set();
|
||||||
|
Display();
|
||||||
|
osdLanguage = data.OSDLanguage;
|
||||||
|
Setup.OSDLanguage = OriginalOSDLanguage;
|
||||||
|
}
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- cMenuMain -------------------------------------------------------------
|
// --- cMenuMain -------------------------------------------------------------
|
||||||
|
|
||||||
#define STOP_RECORDING "Stop recording "
|
#define STOP_RECORDING tr("Stop recording ")
|
||||||
|
|
||||||
cMenuMain::cMenuMain(bool Replaying)
|
cMenuMain::cMenuMain(bool Replaying)
|
||||||
:cOsdMenu("Main")
|
:cOsdMenu(tr("Main"))
|
||||||
{
|
{
|
||||||
Add(new cOsdItem("Schedule", osSchedule));
|
Add(new cOsdItem(tr("Schedule"), osSchedule));
|
||||||
Add(new cOsdItem("Channels", osChannels));
|
Add(new cOsdItem(tr("Channels"), osChannels));
|
||||||
Add(new cOsdItem("Timer", osTimer));
|
Add(new cOsdItem(tr("Timers"), osTimers));
|
||||||
Add(new cOsdItem("Recordings", osRecordings));
|
Add(new cOsdItem(tr("Recordings"), osRecordings));
|
||||||
Add(new cOsdItem("Setup", osSetup));
|
Add(new cOsdItem(tr("Setup"), osSetup));
|
||||||
if (Replaying)
|
if (Replaying)
|
||||||
Add(new cOsdItem("Stop replaying", osStopReplay));
|
Add(new cOsdItem(tr("Stop replaying"), osStopReplay));
|
||||||
const char *s = NULL;
|
const char *s = NULL;
|
||||||
while ((s = cRecordControls::GetInstantId(s)) != NULL) {
|
while ((s = cRecordControls::GetInstantId(s)) != NULL) {
|
||||||
char *buffer = NULL;
|
char *buffer = NULL;
|
||||||
@ -1483,7 +1526,7 @@ cMenuMain::cMenuMain(bool Replaying)
|
|||||||
Add(new cOsdItem(buffer, osStopRecord));
|
Add(new cOsdItem(buffer, osStopRecord));
|
||||||
delete buffer;
|
delete buffer;
|
||||||
}
|
}
|
||||||
SetHelp("Record", NULL, NULL, cReplayControl::LastReplayed() ? "Resume" : NULL);
|
SetHelp(tr("Record"), NULL, NULL, cReplayControl::LastReplayed() ? tr("Resume") : NULL);
|
||||||
Display();
|
Display();
|
||||||
lastActivity = time(NULL);
|
lastActivity = time(NULL);
|
||||||
}
|
}
|
||||||
@ -1495,10 +1538,10 @@ eOSState cMenuMain::ProcessKey(eKeys Key)
|
|||||||
switch (state) {
|
switch (state) {
|
||||||
case osSchedule: return AddSubMenu(new cMenuSchedule);
|
case osSchedule: return AddSubMenu(new cMenuSchedule);
|
||||||
case osChannels: return AddSubMenu(new cMenuChannels);
|
case osChannels: return AddSubMenu(new cMenuChannels);
|
||||||
case osTimer: return AddSubMenu(new cMenuTimers);
|
case osTimers: return AddSubMenu(new cMenuTimers);
|
||||||
case osRecordings: return AddSubMenu(new cMenuRecordings);
|
case osRecordings: return AddSubMenu(new cMenuRecordings);
|
||||||
case osSetup: return AddSubMenu(new cMenuSetup);
|
case osSetup: return AddSubMenu(new cMenuSetup);
|
||||||
case osStopRecord: if (Interface->Confirm("Stop Recording?")) {
|
case osStopRecord: if (Interface->Confirm(tr("Stop Recording?"))) {
|
||||||
cOsdItem *item = Get(Current());
|
cOsdItem *item = Get(Current());
|
||||||
if (item) {
|
if (item) {
|
||||||
cRecordControls::Stop(item->Text() + strlen(STOP_RECORDING));
|
cRecordControls::Stop(item->Text() + strlen(STOP_RECORDING));
|
||||||
@ -1571,7 +1614,7 @@ void cDisplayChannel::DisplayChannel(const cChannel *Channel)
|
|||||||
if (Channel && Channel->number)
|
if (Channel && Channel->number)
|
||||||
snprintf(buffer, BufSize, "%d %s", Channel->number, Channel->name);
|
snprintf(buffer, BufSize, "%d %s", Channel->number, Channel->name);
|
||||||
else
|
else
|
||||||
snprintf(buffer, BufSize, "%s", Channel ? Channel->name : "*** Invalid Channel ***");
|
snprintf(buffer, BufSize, "%s", Channel ? Channel->name : tr("*** Invalid Channel ***"));
|
||||||
Interface->Fill(0, 0, MenuColumns, 1, clrBackground);
|
Interface->Fill(0, 0, MenuColumns, 1, clrBackground);
|
||||||
Interface->Write(0, 0, buffer);
|
Interface->Write(0, 0, buffer);
|
||||||
time_t t = time(NULL);
|
time_t t = time(NULL);
|
||||||
@ -1697,7 +1740,7 @@ cRecordControl::cRecordControl(cDvbApi *DvbApi, cTimer *Timer)
|
|||||||
timer = new cTimer(true);
|
timer = new cTimer(true);
|
||||||
Timers.Add(timer);
|
Timers.Add(timer);
|
||||||
Timers.Save();
|
Timers.Save();
|
||||||
asprintf(&instantId, cDvbApi::NumDvbApis > 1 ? "%s on %d" : "%s", Channels.GetChannelNameByNumber(timer->channel), dvbApi->Index() + 1);
|
asprintf(&instantId, cDvbApi::NumDvbApis > 1 ? "%s - %d" : "%s", Channels.GetChannelNameByNumber(timer->channel), dvbApi->Index() + 1);
|
||||||
}
|
}
|
||||||
timer->SetRecording(true);
|
timer->SetRecording(true);
|
||||||
Channels.SwitchTo(timer->channel, dvbApi);
|
Channels.SwitchTo(timer->channel, dvbApi);
|
||||||
|
5
osd.c
5
osd.c
@ -4,12 +4,13 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: osd.c 1.11 2000/11/01 11:21:51 kls Exp $
|
* $Id: osd.c 1.12 2000/11/10 16:18:38 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "osd.h"
|
#include "osd.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include "i18n.h"
|
||||||
|
|
||||||
// --- cOsdItem --------------------------------------------------------------
|
// --- cOsdItem --------------------------------------------------------------
|
||||||
|
|
||||||
@ -248,7 +249,7 @@ void cOsdMenu::Mark(void)
|
|||||||
{
|
{
|
||||||
if (Count() && marked < 0) {
|
if (Count() && marked < 0) {
|
||||||
marked = current;
|
marked = current;
|
||||||
SetStatus("Up/Dn for new location - OK to move");
|
SetStatus(tr("Up/Dn for new location - OK to move"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
4
osd.h
4
osd.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: osd.h 1.14 2000/11/01 14:29:07 kls Exp $
|
* $Id: osd.h 1.15 2000/11/10 15:28:28 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __OSD_H
|
#ifndef __OSD_H
|
||||||
@ -21,7 +21,7 @@ enum eOSState { osUnknown,
|
|||||||
osContinue,
|
osContinue,
|
||||||
osSchedule,
|
osSchedule,
|
||||||
osChannels,
|
osChannels,
|
||||||
osTimer,
|
osTimers,
|
||||||
osRecordings,
|
osRecordings,
|
||||||
osSetup,
|
osSetup,
|
||||||
osRecord,
|
osRecord,
|
||||||
|
7
vdr.c
7
vdr.c
@ -22,7 +22,7 @@
|
|||||||
*
|
*
|
||||||
* The project's page is at http://www.cadsoft.de/people/kls/vdr
|
* The project's page is at http://www.cadsoft.de/people/kls/vdr
|
||||||
*
|
*
|
||||||
* $Id: vdr.c 1.43 2000/11/05 18:39:17 kls Exp $
|
* $Id: vdr.c 1.44 2000/11/10 16:13:27 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
@ -31,6 +31,7 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "dvbapi.h"
|
#include "dvbapi.h"
|
||||||
|
#include "i18n.h"
|
||||||
#include "interface.h"
|
#include "interface.h"
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
#include "recording.h"
|
#include "recording.h"
|
||||||
@ -229,7 +230,7 @@ int main(int argc, char *argv[])
|
|||||||
break;
|
break;
|
||||||
case osRecord: DELETENULL(Menu);
|
case osRecord: DELETENULL(Menu);
|
||||||
if (!cRecordControls::Start())
|
if (!cRecordControls::Start())
|
||||||
Interface->Error("No free DVB device to record!");
|
Interface->Error(tr("No free DVB device to record!"));
|
||||||
break;
|
break;
|
||||||
case osRecordings:
|
case osRecordings:
|
||||||
DELETENULL(Menu);
|
DELETENULL(Menu);
|
||||||
@ -246,7 +247,7 @@ int main(int argc, char *argv[])
|
|||||||
break;
|
break;
|
||||||
case osSwitchDvb:
|
case osSwitchDvb:
|
||||||
DELETENULL(*Interact);
|
DELETENULL(*Interact);
|
||||||
Interface->Info("Switching primary DVB...");
|
Interface->Info(tr("Switching primary DVB..."));
|
||||||
cDvbApi::SetPrimaryDvbApi(Setup.PrimaryDVB);
|
cDvbApi::SetPrimaryDvbApi(Setup.PrimaryDVB);
|
||||||
break;
|
break;
|
||||||
case osBack:
|
case osBack:
|
||||||
|
Loading…
Reference in New Issue
Block a user