Version 1.5.7

- All logging now goes to LOG_ERR, because some systems split error, info and
  debug messages into separate files, which repeatedly caused extra efforts to
  find out when incomplete log excerpts were attached to problem reports in
  the past.
- Updated the Estonian OSD texts (thanks to Arthur Konovalov).
- Fixed a problem with characters >0x7F in the modified version of skipspace()
  (thanks to Marco Schlüßler).
- Fixed a bug I introduced when simplifying the original patch for detecting
  Premiere NVOD channel links (crash reported by Malte Schröder).
- Internationalization is now done with 'gettext' (following a suggestion by
  Lucian Muresan). Plugin authors may want to use the Perl script
  'i18n-to-gettext.pl' to convert their internationalized texts to the gettext
  format (see the instructions inside that script file). The function
  cPlugin::RegisterI18n() is still present for compatibility, but doesn't
  have any more functionality. So plugins that don't convert their texts to
  the gettext format will only present English texts.
  See PLUGINS.html, section "Internationalization", for instructions on how
  to make strings in arrays translatable.
  See README.i18n for information on how to create new or maintain existing
  translations.
- The three letter language codes and their aliases are stored in i18n.c, and
  each translation file only contains one of them to link that language name
  to the code.
- The 'newplugin' script has been extended to generate the Makefile section
  for i18n support.
- The parameter OSDLanguage in 'setup.conf' is now a string and holds the locale
  code of the selected OSD language (e.g. en_US). If Setup.OSDLanguage is not
  set to a particular locale that is found in VDR's locale directory, the
  locale as defined in the system environment is used by default.
- The list of tracks given in cStatus::SetAudioTrack() is now NULL terminated,
  so that plugins can actually use all the strings in the list, not just the
  one pointed to by Index (thanks to Alexander Rieger).
- Fixed handling kLeft in the calls to cStatus::MsgOsdTextItem() (thanks to
  Alexander Rieger).
- Added the "...or (at your option) any later version" phrase to the license
  information of all plugins, and also the 'newplugin' script (suggested by
  Ville Skyttä). Plugin authors may want to consider doing the same.
- Fixed the link to the GPL2 at http://www.gnu.org in vdr.c (thanks to Ville
  Skyttä).
- cBitmap::SetXpm() now checks whether the given Xpm pointer is not NULL, to
  avoid a crash with files that only contain "/* XPM */" (suggested by Andreas
  Mair).
- Added a debug error message to cReceiver::~cReceiver() in case it is still
  attached to a device (thanks to Reinhard Nissl).
This commit is contained in:
Klaus Schmidinger 2007-08-12 18:00:00 +02:00
parent 8849308cf9
commit 4c65b525dc
87 changed files with 28555 additions and 7419 deletions

View File

@ -1127,6 +1127,8 @@ Reinhard Nissl <rnissl@gmx.de>
with open file handles when starting background commands
for fixing handling error status in cDvbTuner::GetFrontendStatus()
for fixing a busy loop in fast forward if the next video data file is missing
for adding a debug error message to cReceiver::~cReceiver() in case it is still
attached to a device
Richard Robson <richard_robson@beeb.net>
for reporting freezing replay if a timer starts while in Transfer Mode from the
@ -1405,6 +1407,7 @@ Marco Schl
for fixing handling ChannelUp/Down keys if there is currently a replay running
for fixing a buffer overflow in initializing the system character table
for reporting a missing 'P' in vdr.c's SHUTDOWNCANCELROMPT macro
for fixing a problem with characters >0x7F in the modified version of skipspace()
Jürgen Schmitz <j.schmitz@web.de>
for reporting a bug in displaying the current channel when switching via the SVDRP
@ -1519,6 +1522,7 @@ Lucian Muresan <lucianm@users.sourceforge.net>
for making VDR actually use the iso8859-15 fonts
for suggesting to make the function ExchangeChars()
for reporting duplicate texts in i18n.c
for suggesting to use 'gettext' for internationalization
Mattias Grönlund <Mattias@Gronlund.net>
for pointing out a missing cleanup at program exit in case there is a problem
@ -1676,6 +1680,9 @@ Ville Skytt
for adapting cThread::ThreadId() to recent kernels
for some improvements to the man pages
for fixing some spelling errors in 'newplugin'
for suggesting to add the "...or (at your option) any later version" phrase to the
license information of all plugins, and also the 'newplugin' script
for fixing the link to the GPL2 at http://www.gnu.org in vdr.c
Steffen Beyer <cpunk@reactor.de>
for fixing setting the colored button help after deleting a recording in case the next
@ -1793,6 +1800,8 @@ Alexander Rieger <Alexander.Rieger@inka.de>
for reporting that the cTimer::operator=() messes up the cListObject's pointers
for reporting a memory leak in the cTimer::operator=() when using the 'aux' string
for fixing cTimer::operator=() in case a cTimer variable is assigned to itself
for making the list of tracks given in cStatus::SetAudioTrack() NULL terminated
for fixing handling kLeft in the calls to cStatus::MsgOsdTextItem()
Philip Prindeville <philipp_subx@redfish-solutions.com>
for updates to 'sources.conf'
@ -1919,11 +1928,13 @@ Franz Gangkofer <Franz.Gangkofer@cadsoft.de>
Malte Schröder <MalteSch@gmx.de>
for reporting a crash after executing the SVDRP command CLRE
for reporting a crash with the code for detecting Premiere NVOD channel links
Markus Hahn <mhahn@reel-multimedia.com>
for suggesting to only start recordings if there is at least 300MB free disk space
for suggesting that the "Back" key should restore the original string when pressed
while editing a string item
for fixing detection of Premiere NVOD channel links
Jaroslaw Swierczynski <swiergot@gmail.com>
for updating the Polish OSD texts and the fontosd-iso8859-2.c file
@ -2118,3 +2129,7 @@ Patrice Staudt <staudt@engsystem.net>
Tobias Bratfisch <tobias@reel-multimedia.com>
for improving numdigits(), isnumber() and strreplace()
for suggesting to make skipspace() an inline function
Andreas Mair <andreas@vdr-developer.org>
for suggesting to make cBitmap::SetXpm() checks whether the given Xpm pointer is
not NULL

49
HISTORY
View File

@ -5293,8 +5293,55 @@ Video Disk Recorder Revision History
- Made skipspace() an inline function (suggested by Tobias Bratfisch) and changed
it to handle the most common case of 'no leading space' very fast, and avoid
calling isspace(), which made the whole function a lot faster.
- Fixed detection of Premiere NVOD channel links (thanks to anonymous).
- Fixed detection of Premiere NVOD channel links (thanks to Markus Hahn).
- Added a table of the used trick speed values to the description of
cDevice::TrickSpeed() (suggested by Martin Dauskardt).
- Added a missing 'P' to vdr.c's SHUTDOWNCANCELROMPT macro (reported by Marco
Schlüßler).
2007-08-12: Version 1.5.7
- All logging now goes to LOG_ERR, because some systems split error, info and
debug messages into separate files, which repeatedly caused extra efforts to
find out when incomplete log excerpts were attached to problem reports in
the past.
- Updated the Estonian OSD texts (thanks to Arthur Konovalov).
- Fixed a problem with characters >0x7F in the modified version of skipspace()
(thanks to Marco Schlüßler).
- Fixed a bug I introduced when simplifying the original patch for detecting
Premiere NVOD channel links (crash reported by Malte Schröder).
- Internationalization is now done with 'gettext' (following a suggestion by
Lucian Muresan). Plugin authors may want to use the Perl script
'i18n-to-gettext.pl' to convert their internationalized texts to the gettext
format (see the instructions inside that script file). The function
cPlugin::RegisterI18n() is still present for compatibility, but doesn't
have any more functionality. So plugins that don't convert their texts to
the gettext format will only present English texts.
See PLUGINS.html, section "Internationalization", for instructions on how
to make strings in arrays translatable.
See README.i18n for information on how to create new or maintain existing
translations.
- The three letter language codes and their aliases are stored in i18n.c, and
each translation file only contains one of them to link that language name
to the code.
- The 'newplugin' script has been extended to generate the Makefile section
for i18n support.
- The parameter OSDLanguage in 'setup.conf' is now a string and holds the locale
code of the selected OSD language (e.g. en_US). If Setup.OSDLanguage is not
set to a particular locale that is found in VDR's locale directory, the
locale as defined in the system environment is used by default.
- The list of tracks given in cStatus::SetAudioTrack() is now NULL terminated,
so that plugins can actually use all the strings in the list, not just the
one pointed to by Index (thanks to Alexander Rieger).
- Fixed handling kLeft in the calls to cStatus::MsgOsdTextItem() (thanks to
Alexander Rieger).
- Added the "...or (at your option) any later version" phrase to the license
information of all plugins, and also the 'newplugin' script (suggested by
Ville Skyttä). Plugin authors may want to consider doing the same.
- Fixed the link to the GPL2 at http://www.gnu.org in vdr.c (thanks to Ville
Skyttä).
- cBitmap::SetXpm() now checks whether the given Xpm pointer is not NULL, to
avoid a crash with files that only contain "/* XPM */" (suggested by Andreas
Mair).
- Added a debug error message to cReceiver::~cReceiver() in case it is still
attached to a device (thanks to Reinhard Nissl).

View File

@ -24,6 +24,7 @@ You will also need to install the following libraries, as well as their
fontconfig
freetype2
gettext
libcap
libjpeg

View File

@ -6,7 +6,7 @@
# See the main source file 'vdr.c' for copyright information and
# how to reach the author.
#
# $Id: Make.config.template 1.10 2006/06/15 09:15:25 kls Exp $
# $Id: Make.config.template 1.12 2007/08/12 12:04:17 kls Exp $
### The C compiler and options:
@ -26,6 +26,7 @@ endif
#DVBDIR = /usr/src/v4l-dvb/linux
MANDIR = /usr/local/man
BINDIR = /usr/local/bin
LOCDIR = /usr/share/vdr/locale # set to ./locale to run VDR from within its source directory
PLUGINDIR= ./PLUGINS
PLUGINLIBDIR= $(PLUGINDIR)/lib

View File

@ -4,7 +4,7 @@
# See the main source file 'vdr.c' for copyright information and
# how to reach the author.
#
# $Id: Makefile 1.101 2007/06/16 10:48:59 kls Exp $
# $Id: Makefile 1.102 2007/08/11 12:26:12 kls Exp $
.DELETE_ON_ERROR:
@ -17,6 +17,7 @@ CXXFLAGS ?= -g -O2 -Wall -Woverloaded-virtual
LSIDIR = ./libsi
MANDIR = /usr/local/man
BINDIR = /usr/local/bin
LOCDIR = /usr/share/vdr/locale
LIBS = -ljpeg -lpthread -ldl -lcap -lfreetype -lfontconfig
INCLUDES = -I/usr/include/freetype2
@ -58,6 +59,7 @@ DEFINES += -D_GNU_SOURCE
DEFINES += -DVIDEODIR=\"$(VIDEODIR)\"
DEFINES += -DPLUGINDIR=\"$(PLUGINLIBDIR)\"
DEFINES += -DLOCDIR=\"$(LOCDIR)\"
# The version numbers of VDR and the plugin API (taken from VDR's "config.h"):
@ -69,7 +71,7 @@ ifdef VFAT
DEFINES += -DVFAT
endif
all: vdr
all: vdr i18n
# Implicit rules:
@ -95,6 +97,35 @@ vdr: $(OBJS) $(SILIB)
$(SILIB):
$(MAKE) -C $(LSIDIR) all
# Internationalization (I18N):
PODIR = po
LOCALEDIR = locale
I18Npo = $(wildcard $(PODIR)/*.po)
I18Nmo = $(addsuffix .mo, $(foreach file, $(I18Npo), $(basename $(file))))
I18Ndirs = $(notdir $(foreach file, $(I18Npo), $(basename $(file))))
I18Npot = $(PODIR)/vdr.pot
%.mo: %.po
msgfmt -c -o $@ $<
$(I18Npot): $(wildcard *.c)
xgettext -C -cTRANSLATORS --no-wrap -F -k -ktr -ktrNOOP --msgid-bugs-address='<vdr-bugs@cadsoft.de>' -o $@ $(wildcard *.c)
$(I18Npo): $(I18Npot)
msgmerge -U --no-wrap -F --backup=none -q $@ $<
i18n: $(I18Nmo)
@mkdir -p $(LOCALEDIR)
for i in $(I18Ndirs); do\
mkdir -p $(LOCALEDIR)/$$i/LC_MESSAGES;\
cp $(PODIR)/$$i.mo $(LOCALEDIR)/$$i/LC_MESSAGES/vdr.mo;\
done
install-i18n:
@mkdir -p $(LOCDIR)
@(cd $(LOCALEDIR); cp -r --parents * $(LOCDIR))
# The 'include' directory (for plugins):
include-dir:
@ -169,6 +200,7 @@ srcdoc:
clean:
$(MAKE) -C $(LSIDIR) clean
-rm -f $(OBJS) $(DEPFILE) vdr core* *~
-rm -rf $(LOCALEDIR) $(PODIR)/*.mo $(PODIR)/*.pot
-rm -rf include
-rm -rf srcdoc
CLEAN: clean

View File

@ -14,15 +14,18 @@ Copyright &copy; 2006 Klaus Schmidinger<br>
<a href="http://www.cadsoft.de/vdr">www.cadsoft.de/vdr</a>
</center>
<p>
<!--X1.5.0--><table width=100%><tr><td bgcolor=#00AA00>&nbsp;</td><td width=100%>
<!--X1.5.0--><table width=100%><tr><td bgcolor=#0000AA>&nbsp;</td><td width=100%>
Important modifications introduced in version 1.5.0 are marked like this.
<!--X1.5.0--></td></tr></table>
<!--X1.5.1--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
<!--X1.5.1--><table width=100%><tr><td bgcolor=#00AA00>&nbsp;</td><td width=100%>
Important modifications introduced in version 1.5.1 are marked like this.
<!--X1.5.1--></td></tr></table>
<!--X1.5.3--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%>
<!--X1.5.3--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
Important modifications introduced in version 1.5.3 are marked like this.
<!--X1.5.3--></td></tr></table>
<!--X1.5.7--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%>
Important modifications introduced in version 1.5.7 are marked like this.
<!--X1.5.7--></td></tr></table>
<p>
VDR provides an easy to use plugin interface that allows additional functionality
to be added to the program by implementing a dynamically loadable library file.
@ -61,7 +64,7 @@ structures and allows it to hook itself into specific areas to perform special a
<li><a href="#Housekeeping">Housekeeping</a>
<li><a href="#Main thread hook">Main thread hook</a>
<li><a href="#Activity">Activity</a>
<!--X1.5.1--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
<!--X1.5.1--><table width=100%><tr><td bgcolor=#00AA00>&nbsp;</td><td width=100%>
<li><a href="#Wakeup">Wakeup</a>
<!--X1.5.1--></td></tr></table>
<li><a href="#Setup parameters">Setup parameters</a>
@ -85,7 +88,7 @@ structures and allows it to hook itself into specific areas to perform special a
<li><a href="#Devices">Devices</a>
<li><a href="#Audio">Audio</a>
<li><a href="#Remote Control">Remote Control</a>
<!--X1.5.0--><table width=100%><tr><td bgcolor=#00AA00>&nbsp;</td><td width=100%>
<!--X1.5.0--><table width=100%><tr><td bgcolor=#0000AA>&nbsp;</td><td width=100%>
<li><a href="#Conditional Access">Conditional Access</a>
<!--X1.5.0--></td></tr></table>
</ul>
@ -684,7 +687,7 @@ be queried, and further prompts may show up. If all prompts have been confirmed,
the shutdown will take place. As soon as one prompt is not confirmed, no
further plugins will be queried and no shutdown will be done.
<!--X1.5.1--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
<!--X1.5.1--><table width=100%><tr><td bgcolor=#00AA00>&nbsp;</td><td width=100%>
<a name="Wakeup"><hr><h2>Wakeup</h2>
<center><i><b>Wake me up before you go-go</b></i></center><p>
@ -909,72 +912,38 @@ const char *MyConfigDir = cPlugin::ConfigDirectory();
<center><i><b>Welcome to Babylon!</b></i></center><p>
If a plugin displays texts to the user, it should implement internationalized
versions of these texts and call the function
<p><table><tr><td bgcolor=#F0F0F0><pre>
void RegisterI18n(const tI18nPhrase * const Phrases);
</pre></td></tr></table><p>
to register them with VDR's internationalization mechanism.
<p>
The call to this function must be done in the <a href="#Getting started"><tt>Initialize()</tt></a>
or <a href="#Getting started"><tt>Start()</tt></a> function of the plugin:
<p><table><tr><td bgcolor=#F0F0F0><pre>
const tI18nPhrase Phrases[] = {
{ "Hello world!",
"Hallo Welt!",
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
},
{ NULL }
};
void cPluginHello::Start(void)
{
RegisterI18n(Phrases);
}
</pre></td></tr></table><p>
Each entry of type <tt>tI18nPhrase</tt> must have exactly as many members as defined
by the constant <tt>I18nNumLanguages</tt> in the file <tt>VDR/i18n.h</tt>, and the
sequence of the various languages must be the same as defined in <tt>VDR/i18n.c</tt>.<br>
<b>It is very important that the array is terminated with a <tt>{&nbsp;NULL&nbsp;}</tt>
entry!</b>.
<p>
Usually you won't be able to fill in all the different translations by yourself, so
you may want to contact the maintainers of these languages (listed in the file
<tt>VDR/i18n.c</tt>) and ask them to provide the additional translations.
<p>
The actual runtime selection of the texts corresponding to the selected language
is done by wrapping each internationalized text with the <tt>tr()</tt> macro:
<!--X1.5.7--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%>
If a plugin displays texts to the user, it should prepare for internationalization
of these texts. All that is necessary for this is to mark every text that is
presented to the user as translatable, as in
<p><table><tr><td bgcolor=#F0F0F0><pre>
const char *s = tr("Hello world!");
</pre></td></tr></table><p>
The text given here must be the first one defined in the related <i>Phrases</i>
entry (which is the English version), and the returned pointer is either a translated
version (if available) or the original string. In the latter case a message will be
written to the log file, indicating that a translation is missing.
Texts are first searched for in the <i>Phrases</i> registered for this plugin (if any)
The text given here must be the English version, and the returned pointer is either
a translated version (if available) or the original string.
Texts are first searched for in the domain registered for this plugin (if any)
and then in the global VDR texts. So a plugin can make use of texts defined by the
core VDR code.
<p>
<!--X1.5.3--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%>
Sometimes texts are stored in an array, in which case they need to be marked
differently, using the trNOOP() macro. The actual translation is then done
when such a text is used, as in
<p><table><tr><td bgcolor=#F0F0F0><pre>
const char *Texts = {
trNOOP("First text"),
trNOOP("Second text"),
trNOOP("Third one")
};
for (int i = 0; i &lt; 3; i++)
MyFunc(tr(Texts[i]));
</pre></td></tr></table><p>
<p>
<!--X1.5.3--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
The system VDR is running on may use a character encoding where a single character
(or <i>symbol</i>) consists of more than one byte (UTF-8, as opposed to, for instance,
ISO8859-1, where every character is represented by a single byte in memory).
@ -986,6 +955,7 @@ and are defined in <tt>VDR/tools.h</tt>.
Most of the time a plugin doesn't need to care about this, but when it comes to
handling individual characters these functions may come in handy.
<!--X1.5.3--></td></tr></table>
<!--X1.5.7--></td></tr></table>
<a name="Custom services"><hr><h2>Custom services</h2>
@ -1635,7 +1605,7 @@ with the full required resolution. Only if this fails shall it use alternate
areas. Drawing areas are always rectangular and may not overlap (but do not need
to be adjacent).
<p>
<!--X1.5.3--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%>
<!--X1.5.3--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
Special consideration may have to be given to color usage if the OSD provides
8bpp (256 colors). In that case, fonts may be drawn using <i>anti-aliasing</i>,
which requires several blended color values between the foreground and background
@ -2118,7 +2088,7 @@ Put(uint64 Code, bool Repeat = false, bool Release = false);
The other parameters have the same meaning as in the first version of this function.
<!--X1.5.0--><table width=100%><tr><td bgcolor=#00AA00>&nbsp;</td><td width=100%>
<!--X1.5.0--><table width=100%><tr><td bgcolor=#0000AA>&nbsp;</td><td width=100%>
<a name="Conditional Access"><hr><h2>Conditional Access</h2>
<center><i><b>Members only!</b></i></center><p>

View File

@ -49,3 +49,7 @@ VDR Plugin 'hello' Revision History
2006-04-22: Version 0.1.1
- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
2007-08-11: Version 0.2.0
- Switched to 'gettext' internationalization.

View File

@ -1,11 +1,13 @@
#
# Makefile for a Video Disk Recorder plugin
#
# $Id: Makefile 1.15 2006/09/09 12:38:35 kls Exp $
# $Id: Makefile 1.16 2007/08/11 10:18:16 kls Exp $
# The official name of this plugin.
# This name will be used in the '-P...' option of VDR to load the plugin.
# By default the main source file also carries this name.
# IMPORTANT: the presence of this macro is important for the Make.config
# file. So it must be defined, even if it is not used here!
#
PLUGIN = hello
@ -45,25 +47,50 @@ DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
### The object files (add further files here):
OBJS = $(PLUGIN).o i18n.o
OBJS = $(PLUGIN).o
### Implicit rules:
%.o: %.c
$(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) $<
# Dependencies:
### Dependencies:
MAKEDEP = g++ -MM -MG
MAKEDEP = $(CXX) -MM -MG
DEPFILE = .dependencies
$(DEPFILE): Makefile
@$(MAKEDEP) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
-include $(DEPFILE)
### Internationalization (I18N):
PODIR = po
LOCALEDIR = $(VDRDIR)/locale
I18Npo = $(wildcard $(PODIR)/*.po)
I18Nmo = $(addsuffix .mo, $(foreach file, $(I18Npo), $(basename $(file))))
I18Ndirs = $(notdir $(foreach file, $(I18Npo), $(basename $(file))))
I18Npot = $(PODIR)/$(PLUGIN).pot
%.mo: %.po
msgfmt -c -o $@ $<
$(I18Npot): $(wildcard *.c)
xgettext -C -cTRANSLATORS --no-wrap -F -k -ktr -ktrNOOP --msgid-bugs-address='<vdr-bugs@cadsoft.de>' -o $@ $(wildcard *.c)
$(I18Npo): $(I18Npot)
msgmerge -U --no-wrap -F --backup=none -q $@ $<
i18n: $(I18Nmo)
@mkdir -p $(LOCALEDIR)
for i in $(I18Ndirs); do\
mkdir -p $(LOCALEDIR)/$$i/LC_MESSAGES;\
cp $(PODIR)/$$i.mo $(LOCALEDIR)/$$i/LC_MESSAGES/$(PLUGIN).mo;\
done
### Targets:
all: libvdr-$(PLUGIN).so
all: libvdr-$(PLUGIN).so i18n
libvdr-$(PLUGIN).so: $(OBJS)
$(CXX) $(CXXFLAGS) -shared $(OBJS) -o $@
@ -78,4 +105,5 @@ dist: clean
@echo Distribution package created as $(PACKAGE).tgz
clean:
@-rm -f $(PODIR)/*.mo $(PODIR)/*.pot
@-rm -f $(OBJS) $(DEPFILE) *.so *.tgz core* *~

View File

@ -6,6 +6,10 @@ Project's homepage: www.cadsoft.de/people/kls/vdr
Latest version available at: www.cadsoft.de/people/kls/vdr/software.htm
See the file COPYING for license information.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
See the file COPYING for more information.
Description: This is a small demo of the VDR plugin interface.

View File

@ -3,18 +3,18 @@
*
* See the README file for copyright information and how to reach the author.
*
* $Id: hello.c 1.12 2006/04/22 09:31:52 kls Exp $
* $Id: hello.c 1.13 2007/08/11 09:31:17 kls Exp $
*/
#include <getopt.h>
#include <stdlib.h>
#include <vdr/i18n.h>
#include <vdr/interface.h>
#include <vdr/plugin.h>
#include "i18n.h"
static const char *VERSION = "0.1.1";
static const char *DESCRIPTION = "A friendly greeting";
static const char *MAINMENUENTRY = "Hello";
static const char *VERSION = "0.2.0";
static const char *DESCRIPTION = trNOOP("A friendly greeting");
static const char *MAINMENUENTRY = trNOOP("Hello");
class cPluginHello : public cPlugin {
private:
@ -115,7 +115,6 @@ bool cPluginHello::ProcessArgs(int argc, char *argv[])
bool cPluginHello::Start(void)
{
// Start any background activities the plugin shall perform.
RegisterI18n(Phrases);
return true;
}

View File

@ -1,145 +0,0 @@
/*
* i18n.c: Internationalization
*
* See the README file for copyright information and how to reach the author.
*
* $Id: i18n.c 1.6 2006/04/22 09:30:57 kls Exp $
*/
#include "i18n.h"
const tI18nPhrase Phrases[] = {
{ "Hello",
"Hallo",
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"Hei",
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"¿àØÒÕâ!",
"",// TODO
"",// TODO
"",// TODO
"Ahoj",
},
{ "Hello world!",
"Hallo Welt!",
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"Hei maailma!",
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"·ÔàÐÒáâÒãÙ ÜØà!",
"",// TODO
"",// TODO
"",// TODO
"Ahoj svìte!",
},
{ "Howdy folks!",
"Tach zusammen!",
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"Mitä kuuluu?",
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"ºÐÚ ßÞÖØÒÐÕâÕ?",
"",// TODO
"",// TODO
"",// TODO
"Nazdar vespolek!",
},
{ "A friendly greeting",
"Ein freundlicher Gruß",
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"Ystävällisin terveisin",
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"´àãÖÕáÚÞÕ ßàØÒÕâáâÒØÕ",
"",// TODO
"",// TODO
"",// TODO
"Pøátelský pozdrav",
},
{ "Greeting time (s)",
"Dauer des Grußes (s)",
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"Tervehdysaika (s)",
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"¿àÞÔÞÛÖØâÕÛìÝÞáâì ßàØÒÕâáâÒØï",
"",// TODO
"",// TODO
"",// TODO
"Èas pozdravu (s)",
},
{ "Use alternate greeting",
"Alternativen Gruß verwenden",
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"Käytä vaihtoehtoista tervehdystä",
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"°ÛìâÕàÝÐâØÒÝÞÕ ßàØÒÕâáâÒØÕ",
"",// TODO
"",// TODO
"",// TODO
"Pou¾ít alternativní pozdrav",
},
{ NULL }
};

View File

@ -1,16 +0,0 @@
/*
* i18n.h: Internationalization
*
* See the README file for copyright information and how to reach the author.
*
* $Id: i18n.h 1.2 2002/05/11 14:48:16 kls Exp $
*/
#ifndef _I18N__H
#define _I18N__H
#include <vdr/i18n.h>
extern const tI18nPhrase Phrases[];
#endif //_I18N__H

View File

@ -0,0 +1,42 @@
# VDR plugin language source file.
# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
# This file is distributed under the same license as the VDR package.
# Marc Rovira Vall <tm05462@salleURL.edu>, 2003
# Ramon Roca <ramon.roca@xcombo.com>, 2003
# Jordi Vilà <jvila@tinet.org>, 2003
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2007-08-11 14:35+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Jordi Vilà <jvila@tinet.org>\n"
"Language-Team: <vdr@linuxtv.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
#: hello.c:16
msgid "A friendly greeting"
msgstr ""
#: hello.c:17
msgid "Hello"
msgstr ""
#: hello.c:60
msgid "Greeting time (s)"
msgstr ""
#: hello.c:61
msgid "Use alternate greeting"
msgstr ""
#: hello.c:129
msgid "Hello world!"
msgstr ""
#: hello.c:129
msgid "Howdy folks!"
msgstr ""

View File

@ -0,0 +1,40 @@
# VDR plugin language source file.
# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
# This file is distributed under the same license as the VDR package.
# Vladimír Bárta <vladimir.barta@k2atmitec.cz>, 2006
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2007-08-11 14:35+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Vladimír Bárta <vladimir.barta@k2atmitec.cz>\n"
"Language-Team: <vdr@linuxtv.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"
#: hello.c:16
msgid "A friendly greeting"
msgstr "Pøátelský pozdrav"
#: hello.c:17
msgid "Hello"
msgstr "Ahoj"
#: hello.c:60
msgid "Greeting time (s)"
msgstr "Èas pozdravu (s)"
#: hello.c:61
msgid "Use alternate greeting"
msgstr "Pou¾ít alternativní pozdrav"
#: hello.c:129
msgid "Hello world!"
msgstr "Ahoj svìte!"
#: hello.c:129
msgid "Howdy folks!"
msgstr "Nazdar vespolek!"

View File

@ -0,0 +1,40 @@
# VDR plugin language source file.
# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
# This file is distributed under the same license as the VDR package.
# Mogens Elneff <mogens@elneff.dk>, 2004
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2007-08-11 14:35+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Mogens Elneff <mogens@elneff.dk>\n"
"Language-Team: <vdr@linuxtv.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"
#: hello.c:16
msgid "A friendly greeting"
msgstr ""
#: hello.c:17
msgid "Hello"
msgstr ""
#: hello.c:60
msgid "Greeting time (s)"
msgstr ""
#: hello.c:61
msgid "Use alternate greeting"
msgstr ""
#: hello.c:129
msgid "Hello world!"
msgstr ""
#: hello.c:129
msgid "Howdy folks!"
msgstr ""

View File

@ -0,0 +1,40 @@
# VDR plugin language source file.
# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
# This file is distributed under the same license as the VDR package.
# Klaus Schmidinger <kls@cadsoft.de>, 2000
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2007-08-11 14:35+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Klaus Schmidinger <kls@cadsoft.de>\n"
"Language-Team: <vdr@linuxtv.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"
#: hello.c:16
msgid "A friendly greeting"
msgstr "Ein freundlicher Gruß"
#: hello.c:17
msgid "Hello"
msgstr "Hallo"
#: hello.c:60
msgid "Greeting time (s)"
msgstr "Dauer des Grußes (s)"
#: hello.c:61
msgid "Use alternate greeting"
msgstr "Alternativen Gruß verwenden"
#: hello.c:129
msgid "Hello world!"
msgstr "Hallo Welt!"
#: hello.c:129
msgid "Howdy folks!"
msgstr "Tach zusammen!"

View File

@ -0,0 +1,40 @@
# VDR plugin language source file.
# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
# This file is distributed under the same license as the VDR package.
# Dimitrios Dimitrakos <mail@dimitrios.de>, 2002
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2007-08-11 14:35+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Dimitrios Dimitrakos <mail@dimitrios.de>\n"
"Language-Team: <vdr@linuxtv.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-7\n"
"Content-Transfer-Encoding: 8bit\n"
#: hello.c:16
msgid "A friendly greeting"
msgstr ""
#: hello.c:17
msgid "Hello"
msgstr ""
#: hello.c:60
msgid "Greeting time (s)"
msgstr ""
#: hello.c:61
msgid "Use alternate greeting"
msgstr ""
#: hello.c:129
msgid "Hello world!"
msgstr ""
#: hello.c:129
msgid "Howdy folks!"
msgstr ""

View File

@ -0,0 +1,40 @@
# VDR plugin language source file.
# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
# This file is distributed under the same license as the VDR package.
# Ruben Nunez Francisco <ruben.nunez@tang-it.com>, 2002
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2007-08-11 14:35+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Ruben Nunez Francisco <ruben.nunez@tang-it.com>\n"
"Language-Team: <vdr@linuxtv.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"
#: hello.c:16
msgid "A friendly greeting"
msgstr ""
#: hello.c:17
msgid "Hello"
msgstr ""
#: hello.c:60
msgid "Greeting time (s)"
msgstr ""
#: hello.c:61
msgid "Use alternate greeting"
msgstr ""
#: hello.c:129
msgid "Hello world!"
msgstr ""
#: hello.c:129
msgid "Howdy folks!"
msgstr ""

View File

@ -0,0 +1,40 @@
# VDR plugin language source file.
# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
# This file is distributed under the same license as the VDR package.
# Arthur Konovalov <kasjas@hot.ee>, 2004
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2007-08-11 14:35+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Arthur Konovalov <kasjas@hot.ee>\n"
"Language-Team: <vdr@linuxtv.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-13\n"
"Content-Transfer-Encoding: 8bit\n"
#: hello.c:16
msgid "A friendly greeting"
msgstr ""
#: hello.c:17
msgid "Hello"
msgstr ""
#: hello.c:60
msgid "Greeting time (s)"
msgstr ""
#: hello.c:61
msgid "Use alternate greeting"
msgstr ""
#: hello.c:129
msgid "Hello world!"
msgstr ""
#: hello.c:129
msgid "Howdy folks!"
msgstr ""

View File

@ -0,0 +1,43 @@
# VDR plugin language source file.
# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
# This file is distributed under the same license as the VDR package.
# Hannu Savolainen <hannu@opensound.com>, 2002
# Jaakko Hyvätti <jaakko@hyvatti.iki.fi>, 2002
# Niko Tarnanen <niko.tarnanen@hut.fi>, 2003
# Rolf Ahrenberg <rahrenbe@cc.hut.fi>, 2003
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2007-08-11 14:35+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n"
"Language-Team: <vdr@linuxtv.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"
#: hello.c:16
msgid "A friendly greeting"
msgstr "Ystävällisin terveisin"
#: hello.c:17
msgid "Hello"
msgstr "Hei"
#: hello.c:60
msgid "Greeting time (s)"
msgstr "Tervehdysaika (s)"
#: hello.c:61
msgid "Use alternate greeting"
msgstr "Käytä vaihtoehtoista tervehdystä"
#: hello.c:129
msgid "Hello world!"
msgstr "Hei maailma!"
#: hello.c:129
msgid "Howdy folks!"
msgstr "Mitä kuuluu?"

View File

@ -0,0 +1,43 @@
# VDR plugin language source file.
# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
# This file is distributed under the same license as the VDR package.
# Jean-Claude Repetto <jc@repetto.org>, 2001
# Olivier Jacques <jacquesolivier@hotmail.com>, 2003
# Gregoire Favre <greg@magma.unil.ch>, 2003
# Nicolas Huillard <nhuillard@e-dition.fr>, 2005
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2007-08-11 14:35+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Nicolas Huillard <nhuillard@e-dition.fr>\n"
"Language-Team: <vdr@linuxtv.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
#: hello.c:16
msgid "A friendly greeting"
msgstr ""
#: hello.c:17
msgid "Hello"
msgstr ""
#: hello.c:60
msgid "Greeting time (s)"
msgstr ""
#: hello.c:61
msgid "Use alternate greeting"
msgstr ""
#: hello.c:129
msgid "Hello world!"
msgstr ""
#: hello.c:129
msgid "Howdy folks!"
msgstr ""

View File

@ -0,0 +1,41 @@
# VDR plugin language source file.
# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
# This file is distributed under the same license as the VDR package.
# Drazen Dupor <drazen.dupor@dupor.com>, 2004
# Dino Ravnic <dino.ravnic@fer.hr>, 2004
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2007-08-11 14:35+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Drazen Dupor <drazen.dupor@dupor.com>\n"
"Language-Team: <vdr@linuxtv.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"
#: hello.c:16
msgid "A friendly greeting"
msgstr ""
#: hello.c:17
msgid "Hello"
msgstr ""
#: hello.c:60
msgid "Greeting time (s)"
msgstr ""
#: hello.c:61
msgid "Use alternate greeting"
msgstr ""
#: hello.c:129
msgid "Hello world!"
msgstr ""
#: hello.c:129
msgid "Howdy folks!"
msgstr ""

View File

@ -0,0 +1,41 @@
# VDR plugin language source file.
# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
# This file is distributed under the same license as the VDR package.
# Istvan Koenigsberger <istvnko@hotmail.com>, 2002
# Guido Josten <guido.josten@t-online.de>, 2002
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2007-08-11 14:35+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Istvan Koenigsberger <istvnko@hotmail.com>, Guido Josten <guido.josten@t-online.de>\n"
"Language-Team: <vdr@linuxtv.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"
#: hello.c:16
msgid "A friendly greeting"
msgstr ""
#: hello.c:17
msgid "Hello"
msgstr ""
#: hello.c:60
msgid "Greeting time (s)"
msgstr ""
#: hello.c:61
msgid "Use alternate greeting"
msgstr ""
#: hello.c:129
msgid "Hello world!"
msgstr ""
#: hello.c:129
msgid "Howdy folks!"
msgstr ""

View File

@ -0,0 +1,42 @@
# VDR plugin language source file.
# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
# This file is distributed under the same license as the VDR package.
# Alberto Carraro <bertocar@tin.it>, 2001
# Antonio Ospite <ospite@studenti.unina.it>, 2003
# Sean Carlos <seanc@libero.it>, 2005
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2007-08-11 14:35+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Sean Carlos <seanc@libero.it>\n"
"Language-Team: <vdr@linuxtv.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"
#: hello.c:16
msgid "A friendly greeting"
msgstr ""
#: hello.c:17
msgid "Hello"
msgstr ""
#: hello.c:60
msgid "Greeting time (s)"
msgstr ""
#: hello.c:61
msgid "Use alternate greeting"
msgstr ""
#: hello.c:129
msgid "Hello world!"
msgstr ""
#: hello.c:129
msgid "Howdy folks!"
msgstr ""

View File

@ -0,0 +1,42 @@
# VDR plugin language source file.
# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
# This file is distributed under the same license as the VDR package.
# Arnold Niessen <niessen@iae.nl> <arnold.niessen@philips.com>, 2001
# Hans Dingemans <hans.dingemans@tacticalops.nl>, 2003
# Maarten Wisse <Maarten.Wisse@urz.uni-hd.de>, 2005
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2007-08-11 14:35+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Maarten Wisse <Maarten.Wisse@urz.uni-hd.de>\n"
"Language-Team: <vdr@linuxtv.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"
#: hello.c:16
msgid "A friendly greeting"
msgstr ""
#: hello.c:17
msgid "Hello"
msgstr ""
#: hello.c:60
msgid "Greeting time (s)"
msgstr ""
#: hello.c:61
msgid "Use alternate greeting"
msgstr ""
#: hello.c:129
msgid "Hello world!"
msgstr ""
#: hello.c:129
msgid "Howdy folks!"
msgstr ""

View File

@ -0,0 +1,41 @@
# VDR plugin language source file.
# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
# This file is distributed under the same license as the VDR package.
# Jørgen Tvedt <pjtvedt@online.no>, 2001
# Truls Slevigen <truls@slevigen.no>, 2002
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2007-08-11 14:35+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Truls Slevigen <truls@slevigen.no>\n"
"Language-Team: <vdr@linuxtv.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
#: hello.c:16
msgid "A friendly greeting"
msgstr ""
#: hello.c:17
msgid "Hello"
msgstr ""
#: hello.c:60
msgid "Greeting time (s)"
msgstr ""
#: hello.c:61
msgid "Use alternate greeting"
msgstr ""
#: hello.c:129
msgid "Hello world!"
msgstr ""
#: hello.c:129
msgid "Howdy folks!"
msgstr ""

View File

@ -0,0 +1,40 @@
# VDR plugin language source file.
# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
# This file is distributed under the same license as the VDR package.
# Michael Rakowski <mrak@gmx.de>, 2002
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2007-08-11 14:35+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Michael Rakowski <mrak@gmx.de>\n"
"Language-Team: <vdr@linuxtv.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"
#: hello.c:16
msgid "A friendly greeting"
msgstr ""
#: hello.c:17
msgid "Hello"
msgstr ""
#: hello.c:60
msgid "Greeting time (s)"
msgstr ""
#: hello.c:61
msgid "Use alternate greeting"
msgstr ""
#: hello.c:129
msgid "Hello world!"
msgstr ""
#: hello.c:129
msgid "Howdy folks!"
msgstr ""

View File

@ -0,0 +1,40 @@
# VDR plugin language source file.
# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
# This file is distributed under the same license as the VDR package.
# Paulo Lopes <pmml@netvita.pt>, 2001
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2007-08-11 14:35+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Paulo Lopes <pmml@netvita.pt>\n"
"Language-Team: <vdr@linuxtv.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
#: hello.c:16
msgid "A friendly greeting"
msgstr ""
#: hello.c:17
msgid "Hello"
msgstr ""
#: hello.c:60
msgid "Greeting time (s)"
msgstr ""
#: hello.c:61
msgid "Use alternate greeting"
msgstr ""
#: hello.c:129
msgid "Hello world!"
msgstr ""
#: hello.c:129
msgid "Howdy folks!"
msgstr ""

View File

@ -0,0 +1,41 @@
# VDR plugin language source file.
# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
# This file is distributed under the same license as the VDR package.
# Paul Lacatus <paul@campina.iiruc.ro>, 2002
# Lucian Muresan <lucianm@users.sourceforge.net>, 2004
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2007-08-11 14:35+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Lucian Muresan <lucianm@users.sourceforge.net>\n"
"Language-Team: <vdr@linuxtv.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"
#: hello.c:16
msgid "A friendly greeting"
msgstr ""
#: hello.c:17
msgid "Hello"
msgstr ""
#: hello.c:60
msgid "Greeting time (s)"
msgstr ""
#: hello.c:61
msgid "Use alternate greeting"
msgstr ""
#: hello.c:129
msgid "Hello world!"
msgstr ""
#: hello.c:129
msgid "Howdy folks!"
msgstr ""

View File

@ -0,0 +1,40 @@
# VDR plugin language source file.
# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
# This file is distributed under the same license as the VDR package.
# Vyacheslav Dikonov <sdiconov@mail.ru>, 2004
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2007-08-11 14:35+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Vyacheslav Dikonov <sdiconov@mail.ru>\n"
"Language-Team: <vdr@linuxtv.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-5\n"
"Content-Transfer-Encoding: 8bit\n"
#: hello.c:16
msgid "A friendly greeting"
msgstr "´àãÖÕáÚÞÕ ßàØÒÕâáâÒØÕ"
#: hello.c:17
msgid "Hello"
msgstr "¿àØÒÕâ!"
#: hello.c:60
msgid "Greeting time (s)"
msgstr "¿àÞÔÞÛÖØâÕÛìÝÞáâì ßàØÒÕâáâÒØï"
#: hello.c:61
msgid "Use alternate greeting"
msgstr "°ÛìâÕàÝÐâØÒÝÞÕ ßàØÒÕâáâÒØÕ"
#: hello.c:129
msgid "Hello world!"
msgstr "·ÔàÐÒáâÒãÙ ÜØà!"
#: hello.c:129
msgid "Howdy folks!"
msgstr "ºÐÚ ßÞÖØÒÐÕâÕ?"

View File

@ -0,0 +1,41 @@
# VDR plugin language source file.
# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
# This file is distributed under the same license as the VDR package.
# Miha Setina <mihasetina@softhome.net>, 2000
# Matjaz Thaler <matjaz.thaler@guest.arnes.si>, 2003
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2007-08-11 14:35+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Matjaz Thaler <matjaz.thaler@guest.arnes.si>\n"
"Language-Team: <vdr@linuxtv.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"
#: hello.c:16
msgid "A friendly greeting"
msgstr ""
#: hello.c:17
msgid "Hello"
msgstr ""
#: hello.c:60
msgid "Greeting time (s)"
msgstr ""
#: hello.c:61
msgid "Use alternate greeting"
msgstr ""
#: hello.c:129
msgid "Hello world!"
msgstr ""
#: hello.c:129
msgid "Howdy folks!"
msgstr ""

View File

@ -0,0 +1,41 @@
# VDR plugin language source file.
# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
# This file is distributed under the same license as the VDR package.
# Tomas Prybil <tomas@prybil.se>, 2002
# Jan Ekholm <chakie@infa.abo.fi>, 2003
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2007-08-11 14:35+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Tomas Prybil <tomas@prybil.se>\n"
"Language-Team: <vdr@linuxtv.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
#: hello.c:16
msgid "A friendly greeting"
msgstr ""
#: hello.c:17
msgid "Hello"
msgstr ""
#: hello.c:60
msgid "Greeting time (s)"
msgstr ""
#: hello.c:61
msgid "Use alternate greeting"
msgstr ""
#: hello.c:129
msgid "Hello world!"
msgstr ""
#: hello.c:129
msgid "Howdy folks!"
msgstr ""

View File

@ -0,0 +1,40 @@
# VDR plugin language source file.
# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
# This file is distributed under the same license as the VDR package.
# Oktay Yolgeçen <oktay_73@yahoo.de>, 2007
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2007-08-11 14:35+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Oktay Yolgeçen <oktay_73@yahoo.de>\n"
"Language-Team: <vdr@linuxtv.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-9\n"
"Content-Transfer-Encoding: 8bit\n"
#: hello.c:16
msgid "A friendly greeting"
msgstr ""
#: hello.c:17
msgid "Hello"
msgstr ""
#: hello.c:60
msgid "Greeting time (s)"
msgstr ""
#: hello.c:61
msgid "Use alternate greeting"
msgstr ""
#: hello.c:129
msgid "Hello world!"
msgstr ""
#: hello.c:129
msgid "Howdy folks!"
msgstr ""

View File

@ -6,7 +6,11 @@ Project's homepage: http://www.cadsoft.de/vdr
Latest version available at: http://www.cadsoft.de/vdr
See the file COPYING for license information.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
See the file COPYING for more information.
Description:

View File

@ -6,7 +6,11 @@ Project's homepage: www.cadsoft.de/vdr
Latest version available at: www.cadsoft.de/vdr
See the file COPYING for license information.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
See the file COPYING for more information.
Description:

View File

@ -6,7 +6,11 @@ Project's homepage: www.cadsoft.de/vdr
Latest version available at: www.cadsoft.de/vdr
See the file COPYING for license information.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
See the file COPYING for more information.
Description:

View File

@ -6,7 +6,11 @@ Project's homepage: www.cadsoft.de/vdr
Latest version available at: www.cadsoft.de/vdr
See the file COPYING for license information.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
See the file COPYING for more information.
Description:

View File

@ -6,6 +6,10 @@ Project's homepage: www.cadsoft.de/people/kls/vdr
Latest version available at: www.cadsoft.de/people/kls/vdr/software.htm
See the file COPYING for license information.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
See the file COPYING for more information.
Description: This is an example that shows the use of cStatus.

View File

@ -6,7 +6,11 @@ Project's homepage: http://www.cadsoft.de/vdr
Latest version available at: http://www.cadsoft.de/vdr
See the file COPYING for license information.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
See the file COPYING for more information.
Description:

42
README.i18n Normal file
View File

@ -0,0 +1,42 @@
Video Disk Recorder ('VDR') - Internationalization
--------------------------------------------------
The internationalized texts of VDR and its plugins use the 'gettext'
functionality. This file provides information on how to maintain
these texts. The instructions apply equally to VDR itself or any
plugin.
How to translate to a new language
----------------------------------
- Change into the source directory.
- Do a 'make i18n' to have the current *.pot file created.
- Make sure your locale is set to the language you want to
translate to.
- Change into the 'po' subdirectory and run 'msginit'. This
will create a new *.po file for your language.
- Edit the new *.po file and translate the texts.
You can do this either with your favorite text editor, or
with a specialited tool like POEdit, GTranslator, KBabel
or whatever you have.
How to maintain an existing language file
-----------------------------------------
- Do a 'make i18n' to have the *.po files brought up-to-date
with the texts in the source code.
- Edit the new *.po file and translate the texts.
If you are using a plain text editor, you should search for
empty strings ("") to find new, untranslated texts. Also,
look for the "fuzzy" keyword to find translations that have
been "guessed" from other, similar texts, and make sure they
are correct. After that you may want to remove the "fuzzy"
keyword. Specialized tools for maintaining translation
files may provide particular functions to guide you through
updating translations.
Once you have created or updated a translation file, please
send it to the maintainer of the respective plugin (in case
it belongs to a plugin) or to kls@cadsoft.de (for core VDR
language files).

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: config.c 1.154 2007/06/23 09:42:49 kls Exp $
* $Id: config.c 1.156 2007/08/12 12:09:37 kls Exp $
*/
#include "config.h"
@ -214,7 +214,7 @@ cSetup Setup;
cSetup::cSetup(void)
{
OSDLanguage = 0;
strcpy(OSDLanguage, ""); // default is taken from environment
strcpy(OSDSkin, "sttng");
strcpy(OSDTheme, "default");
PrimaryDVB = 1;
@ -349,9 +349,9 @@ bool cSetup::Load(const char *FileName)
void cSetup::StoreLanguages(const char *Name, int *Values)
{
char buffer[I18nNumLanguages * 4];
char buffer[I18nLanguages()->Size() * 4];
char *q = buffer;
for (int i = 0; i < I18nNumLanguages; i++) {
for (int i = 0; i < I18nLanguages()->Size(); i++) {
if (Values[i] < 0)
break;
const char *s = I18nLanguageCode(Values[i]);
@ -369,7 +369,7 @@ void cSetup::StoreLanguages(const char *Name, int *Values)
bool cSetup::ParseLanguages(const char *Value, int *Values)
{
int n = 0;
while (Value && *Value && n < I18nNumLanguages) {
while (Value && *Value && n < I18nLanguages()->Size()) {
char buffer[4];
strn0cpy(buffer, Value, sizeof(buffer));
int i = I18nLanguageIndex(buffer);
@ -384,7 +384,7 @@ bool cSetup::ParseLanguages(const char *Value, int *Values)
bool cSetup::Parse(const char *Name, const char *Value)
{
if (!strcasecmp(Name, "OSDLanguage")) OSDLanguage = atoi(Value);
if (!strcasecmp(Name, "OSDLanguage")) { strn0cpy(OSDLanguage, Value, sizeof(OSDLanguage)); I18nSetLocale(OSDLanguage); }
else if (!strcasecmp(Name, "OSDSkin")) Utf8Strn0Cpy(OSDSkin, Value, MaxSkinName);
else if (!strcasecmp(Name, "OSDTheme")) Utf8Strn0Cpy(OSDTheme, Value, MaxThemeName);
else if (!strcasecmp(Name, "PrimaryDVB")) PrimaryDVB = atoi(Value);

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: config.h 1.294 2007/07/20 14:52:05 kls Exp $
* $Id: config.h 1.296 2007/08/10 13:01:52 kls Exp $
*/
#ifndef __CONFIG_H
@ -22,13 +22,13 @@
// VDR's own version number:
#define VDRVERSION "1.5.6"
#define VDRVERSNUM 10506 // Version * 10000 + Major * 100 + Minor
#define VDRVERSION "1.5.7"
#define VDRVERSNUM 10507 // Version * 10000 + Major * 100 + Minor
// The plugin API's version number:
#define APIVERSION "1.5.6"
#define APIVERSNUM 10506 // Version * 10000 + Major * 100 + Minor
#define APIVERSION "1.5.7"
#define APIVERSNUM 10507 // Version * 10000 + Major * 100 + Minor
// When loading plugins, VDR searches them by their APIVERSION, which
// may be smaller than VDRVERSION in case there have been no changes to
@ -199,7 +199,7 @@ private:
public:
// Also adjust cMenuSetup (menu.c) when adding parameters here!
int __BeginData__;
int OSDLanguage;
char OSDLanguage[I18N_MAX_LOCALE_LEN];
char OSDSkin[MaxSkinName];
char OSDTheme[MaxThemeName];
int PrimaryDVB;
@ -219,8 +219,8 @@ public:
int TimeSource;
int TimeTransponder;
int MarginStart, MarginStop;
int AudioLanguages[I18nNumLanguages + 1];
int EPGLanguages[I18nNumLanguages + 1];
int AudioLanguages[I18N_MAX_LANGUAGES + 1];
int EPGLanguages[I18N_MAX_LANGUAGES + 1];
int EPGScanTimeout;
int EPGBugfixLevel;
int EPGLinger;

4
eit.c
View File

@ -8,7 +8,7 @@
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
* Adapted to 'libsi' for VDR 1.3.0 by Marcel Wiesweg <marcel.wiesweg@gmx.de>.
*
* $Id: eit.c 1.124 2007/07/21 14:58:04 kls Exp $
* $Id: eit.c 1.125 2007/07/28 13:16:43 kls Exp $
*/
#include "eit.h"
@ -199,7 +199,7 @@ cEIT::cEIT(cSchedules *Schedules, int Source, u_char Tid, const u_char *Data, bo
else if (Setup.UpdateChannels >= 4) {
cChannel *transponder = channel;
if (channel->Tid() != ld->getTransportStreamId())
channel = Channels.GetByTransponderID(linkID);
transponder = Channels.GetByTransponderID(linkID);
link = Channels.NewChannel(transponder, linkName, "", "", ld->getOriginalNetworkId(), ld->getTransportStreamId(), ld->getServiceId());
//XXX patFilter->Trigger();
}

332
i18n-to-gettext.pl Executable file
View File

@ -0,0 +1,332 @@
#!/usr/bin/perl -w
# Convert i18n texts to gettext
#
# Extracts all texts from the file i18n.c and creates language
# specific *.po files.
#
# Usage: i18n-to-gettext.pl
#
# See the main source file 'vdr.c' for copyright information and
# how to reach the author.
#
# $Id: i18n-to-gettext.pl 1.2 2007/08/12 10:02:01 kls Exp $
# How to convert an actual plugin:
#
# - If your code contains something like
#
# const char *Text = "Some text";
# ...
# Function(tr(Text));
#
# you need to enclose the text constant in trNOOP(...), as in
#
# const char *Text = trNOOP("Some text");
#
# The actual usage of the tr() macro remains unchanged.
#
# - If you have comments following the texts in your i18n.c file
# that should be seen by the translators, move them from the
# i18n.c file into the file where the text is actually used,
# and mark them with the TRANSLATORS keyword, as in
#
# // TRANSLATORS: note the plural!
# Add(new cMenuEditIntItem( tr("Setup.EPG$Preferred languages"), ...
#
# - Fill in your email address in the line
# $MSGIDBUGS = "" ...
# below, so that users can reach you in case there is a problem
# with a message id.
#
# - Run this Perl script from within your plugin's source directory.
# This script will run 'xgettext' to extract all of your texts
# into a file named <pluginname>.pot. After that it will extract
# your existing i18n texts from the file i18n.c (or wherever you
# have defined them) and generate *.po files for all languages
# currently known by VDR.
#
# - Your Makefile will be automatically adjusted to allow for
# building the *.mo files necessary for supporting gettext().
# Please check carefully whether the automatic adjustments have
# succeeded, though. The modified Makefile will be written to
# Makefile.new, so you can call this script any numer of times
# in case you need to do some fine tuning of your texts (especially
# adding some trNOOP() in case the script reports "missing phrases".
# Once you're done converting your plugin source to using gettext,
# rename Makefile.new to Makefile.
#
# - You may want to remove the old internationalized texts from your
# source. Usually this means removing the files i18n.[hc], stripping
# i18n.o from the OBJS variable in the Makefile and removing all
# '#include "i18n.h"' lines from the rest of your source files.
# These steps are not done automatically.
# Check for the existence of a Makefile:
die "Makefile not found!" unless (-f "Makefile");
# Determine the plugin name:
$PLUGIN = `grep '^PLUGIN *=' Makefile | head -1` || die "can't find plugin name!";
$PLUGIN =~ s/.*= *(.*)\n/$1/;
die "can't find plugin name!" unless ($PLUGIN);
# Locate the file containing the texts:
$I18NFILE = "";
for ("i18n.c", `ls *.c`) { # try i18n.c explicitly first
chomp($f = $_);
if (-f $f && `grep tI18nPhrase $f`) {
$I18NFILE = $f;
last;
}
}
die "can't find internationalized texts!" unless ($I18NFILE);
# Plugin specific information:
$TITLE = "VDR plugin language source file";
$COPYRIGHT = "2007 Klaus Schmidinger <kls\@cadsoft.de>";
$PACKAGE = "VDR";
$VERSION = "1.5.7";
$MSGIDBUGS = "" || die "enter your email address here"; # escape the '@', as in "user\@domain.tld"
$LANGUAGETEAM = "<vdr\@linuxtv.org>";
# Gettext environment:
$XGETTEXT = "xgettext -C -cTRANSLATORS --no-wrap -F -k -ktr -ktrNOOP --msgid-bugs-address='$MSGIDBUGS'";
$PODIR = "po";
$POTFILE = "$PODIR/$PLUGIN.pot";
# Languages as known by VDR 1.5.6:
@LANGS = (
"en_US",
"de_DE",
"sl_SI",
"it_IT",
"nl_NL",
"pt_PT",
"fr_FR",
"nn_NO",
"fi_FI",
"pl_PL",
"es_ES",
"el_GR",
"sv_SE",
"ro_RO",
"hu_HU",
"ca_ES",
"ru_RU",
"hr_HR",
"et_EE",
"da_DK",
"cs_CZ",
"tr_TR"
);
@CHARSETS = (
"ISO-8859-15",
"ISO-8859-15",
"ISO-8859-2",
"ISO-8859-15",
"ISO-8859-15",
"ISO-8859-1",
"ISO-8859-1",
"ISO-8859-1",
"ISO-8859-15",
"ISO-8859-2",
"ISO-8859-15",
"ISO-8859-7",
"ISO-8859-1",
"ISO-8859-2",
"ISO-8859-2",
"ISO-8859-1",
"ISO-8859-5",
"ISO-8859-2",
"ISO-8859-13",
"ISO-8859-15",
"ISO-8859-2",
"ISO-8859-9",
);
@TRANSLATORS = (
"Klaus Schmidinger <kls\@cadsoft.de>, 2000",
"Klaus Schmidinger <kls\@cadsoft.de>, 2000",
"Miha Setina <mihasetina\@softhome.net>, 2000; Matjaz Thaler <matjaz.thaler\@guest.arnes.si>, 2003",
"Alberto Carraro <bertocar\@tin.it>, 2001; Antonio Ospite <ospite\@studenti.unina.it>, 2003; Sean Carlos <seanc\@libero.it>, 2005",
"Arnold Niessen <niessen\@iae.nl> <arnold.niessen\@philips.com>, 2001; Hans Dingemans <hans.dingemans\@tacticalops.nl>, 2003; Maarten Wisse <Maarten.Wisse\@urz.uni-hd.de>, 2005",
"Paulo Lopes <pmml\@netvita.pt>, 2001",
"Jean-Claude Repetto <jc\@repetto.org>, 2001; Olivier Jacques <jacquesolivier\@hotmail.com>, 2003; Gregoire Favre <greg\@magma.unil.ch>, 2003; Nicolas Huillard <nhuillard\@e-dition.fr>, 2005",
"Jørgen Tvedt <pjtvedt\@online.no>, 2001; Truls Slevigen <truls\@slevigen.no>, 2002",
"Hannu Savolainen <hannu\@opensound.com>, 2002; Jaakko Hyvätti <jaakko\@hyvatti.iki.fi>, 2002; Niko Tarnanen <niko.tarnanen\@hut.fi>, 2003; Rolf Ahrenberg <rahrenbe\@cc.hut.fi>, 2003",
"Michael Rakowski <mrak\@gmx.de>, 2002",
"Ruben Nunez Francisco <ruben.nunez\@tang-it.com>, 2002",
"Dimitrios Dimitrakos <mail\@dimitrios.de>, 2002",
"Tomas Prybil <tomas\@prybil.se>, 2002; Jan Ekholm <chakie\@infa.abo.fi>, 2003",
"Paul Lacatus <paul\@campina.iiruc.ro>, 2002; Lucian Muresan <lucianm\@users.sourceforge.net>, 2004",
"Istvan Koenigsberger <istvnko\@hotmail.com>, 2002; Guido Josten <guido.josten\@t-online.de>, 2002",
"Marc Rovira Vall <tm05462\@salleURL.edu>, 2003; Ramon Roca <ramon.roca\@xcombo.com>, 2003; Jordi Vilà <jvila\@tinet.org>, 2003",
"Vyacheslav Dikonov <sdiconov\@mail.ru>, 2004",
"Drazen Dupor <drazen.dupor\@dupor.com>, 2004; Dino Ravnic <dino.ravnic\@fer.hr>, 2004",
"Arthur Konovalov <kasjas\@hot.ee>, 2004",
"Mogens Elneff <mogens\@elneff.dk>, 2004",
"Vladimír Bárta <vladimir.barta\@k2atmitec.cz>, 2006",
"Oktay Yolgeçen <oktay_73\@yahoo.de>, 2007"
);
@LASTTRANSLATOR = (
"Klaus Schmidinger <kls\@cadsoft.de>",
"Klaus Schmidinger <kls\@cadsoft.de>",
"Matjaz Thaler <matjaz.thaler\@guest.arnes.si>",
"Sean Carlos <seanc\@libero.it>",
"Maarten Wisse <Maarten.Wisse\@urz.uni-hd.de>",
"Paulo Lopes <pmml\@netvita.pt>",
"Nicolas Huillard <nhuillard\@e-dition.fr>",
"Truls Slevigen <truls\@slevigen.no>",
"Rolf Ahrenberg <rahrenbe\@cc.hut.fi>",
"Michael Rakowski <mrak\@gmx.de>",
"Ruben Nunez Francisco <ruben.nunez\@tang-it.com>",
"Dimitrios Dimitrakos <mail\@dimitrios.de>",
"Tomas Prybil <tomas\@prybil.se>",
"Lucian Muresan <lucianm\@users.sourceforge.net>",
"Istvan Koenigsberger <istvnko\@hotmail.com>, Guido Josten <guido.josten\@t-online.de>",
"Jordi Vilà <jvila\@tinet.org>",
"Vyacheslav Dikonov <sdiconov\@mail.ru>",
"Drazen Dupor <drazen.dupor\@dupor.com>",
"Arthur Konovalov <kasjas\@hot.ee>",
"Mogens Elneff <mogens\@elneff.dk>",
"Vladimír Bárta <vladimir.barta\@k2atmitec.cz>",
"Oktay Yolgeçen <oktay_73\@yahoo.de>"
);
# Collect all translated texts:
open(F, $I18NFILE) || die "$I18NFILE: $!\n";
while (<F>) {
chomp;
s/\t/ /g; # get rid of tabs
s/ *$//; # get rid of trailing blanks
s/^ *\/\/.*//; # remove comment lines
s/, *\/\/.*/,/; # strip trailing comments
next if (/^ *$/); # skip empty lines
next unless ($found or $found = /const *tI18nPhrase .*{/); # sync on phrases
next if (/const *tI18nPhrase .*{/); # skip sync line
last if (/{ *NULL *}/); # stop after last phrase
if (/{ *(.*),/) {
$Original = $1;
$Index = 0;
}
elsif (/}/) {
}
else {
$Translated = $_;
$Translated =~ s/ *(.*),/$1/;
$Index++;
$Map{$Original}[$Index] = $Translated;
}
}
close(F);
# Generate the .pot file:
(mkdir($PODIR) || die "$PODIR: $!\n") unless -d $PODIR;
system("$XGETTEXT -o $POTFILE *.c");
# Generate .po files for all languages:
open(POT, $POTFILE) || die "$POTFILE: $!\n";
@POT = <POT>;
close(POT);
for ($Index = 1; $LANGS[$Index]; $Index++) {
$Authors = "# " . join("\n# ", split(/; */, $TRANSLATORS[$Index])) . "\n";
$POFILE = "$PODIR/$LANGS[$Index].po";
open(PO, ">$POFILE") || die "$POFILE: $!\n";
$msgid = "";
for (@POT) {
next if (/^#, fuzzy$/); # skip the 'fuzzy' keyword
$msgid = $1 if (/^msgid (".+")/);
$date = $1 if (/POT-Creation-Date: (.*)\\n/);
$s = $_;
if (!$msgid) {
$s =~ s/SOME DESCRIPTIVE TITLE/$TITLE/;
$s =~ s/YEAR THE PACKAGE'S COPYRIGHT HOLDER/$COPYRIGHT/;
$s =~ s/PACKAGE/$PACKAGE/;
$s =~ s/VERSION/$VERSION/;
$s = $Authors if (/FIRST AUTHOR/);
$s =~ s/YEAR-MO-DA HO:MI\+ZONE/$date/;
$s =~ s/FULL NAME <EMAIL\@ADDRESS>/$LASTTRANSLATOR[$Index]/;
$s =~ s/LANGUAGE <LL\@li\.org>/$LANGUAGETEAM/;
$s =~ s/CHARSET/$CHARSETS[$Index]/;
}
else {
$s =~ s/""/$Map{$msgid}[$Index]/ if ($msgid && /^msgstr ""/ && defined $Map{$msgid}[$Index]);
$Used{$msgid} = 1;
}
print PO $s;
}
close(PO);
}
# Report missing phrases:
for (keys %Map) {
push(@Missing, "$_\n") unless $Used{$_};
}
if (@Missing) {
print "Missing phrases (may need to use trNOOP):\n\n";
print sort(@Missing);
}
# Adjust the Makefile:
$MAKEI18N = q{### Internationalization (I18N):
PODIR = po
LOCALEDIR = $(VDRDIR)/locale
I18Npo = $(wildcard $(PODIR)/*.po)
I18Nmo = $(addsuffix .mo, $(foreach file, $(I18Npo), $(basename $(file))))
I18Ndirs = $(notdir $(foreach file, $(I18Npo), $(basename $(file))))
I18Npot = $(PODIR)/$(PLUGIN).pot
%.mo: %.po
msgfmt -c -o $@ $<
$(I18Npot): $(wildcard *.c)
xgettext -C -cTRANSLATORS --no-wrap -F -k -ktr -ktrNOOP --msgid-bugs-address='<} . $MSGIDBUGS . q{>' -o $@ $(wildcard *.c)
$(I18Npo): $(I18Npot)
msgmerge -U --no-wrap -F --backup=none -q $@ $<
i18n: $(I18Nmo)
@mkdir -p $(LOCALEDIR)
for i in $(I18Ndirs); do\
mkdir -p $(LOCALEDIR)/$$i/LC_MESSAGES;\
cp $(PODIR)/$$i.mo $(LOCALEDIR)/$$i/LC_MESSAGES/$(PLUGIN).mo;\
done
};
open(OLD, "Makefile") || die "Makefile: $!";
open(NEW, ">Makefile.new") || die "Makefile.new: $!";
while (<OLD>) {
chomp;
if (/Targets:/) {
print NEW $MAKEI18N;
}
elsif (/^all:/) {
$_ .= " i18n";
}
elsif (/^clean:/) {
$_ .= "\n\t\@-rm -f \$(PODIR)/*.mo \$(PODIR)/*.pot";
}
print NEW "$_\n";
}
close(NEW);
close(OLD);

7149
i18n.c

File diff suppressed because it is too large Load Diff

51
i18n.h
View File

@ -4,25 +4,58 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: i18n.h 1.20 2007/05/28 11:43:14 kls Exp $
* $Id: i18n.h 1.21 2007/08/10 13:53:57 kls Exp $
*/
#ifndef __I18N_H
#define __I18N_H
#include <stdio.h>
#include "tools.h"
const int I18nNumLanguages = 22;
typedef const char *tI18nPhrase[22]; ///< obsolete - switch to 'gettext'!
typedef const char *tI18nPhrase[I18nNumLanguages];
void I18nRegister(const tI18nPhrase * const Phrases, const char *Plugin);
#define I18N_DEFAULT_LOCALE "en_US"
#define I18N_MAX_LOCALE_LEN 16 // for buffers that hold en_US etc.
#define I18N_MAX_LANGUAGES 256 // for buffers that hold all available languages
void I18nInitialize(void);
///< Detects all available locales and loads the language names and codes.
void I18nRegister(const char *Plugin);
///< Registers the named plugin, so that it can use internationalized texts.
void I18nSetLocale(const char *Locale);
///< Sets the current locale to Locale. The default locale is "en_US".
///< If no such locale has been found in the call to I18nInitialize(),
///< nothing happens.
int I18nCurrentLanguage(void);
///< Returns the index of the current language. This number stays the
///< same for any given language while the program is running, but may
///< be different when the program is run again (for instance because
///< a locale has been added or removed). The default locale ("en_US")
///< always has a zero index.
void I18nSetLanguage(int Language);
///< Sets the current language index to Language. If Language is outside
///< the range of available languages, nothing happens.
const cStringList *I18nLanguages(void);
///< Returns the list of available languages. Values returned by
///< I18nCurrentLanguage() are indexes into this list.
const char *I18nTranslate(const char *s, const char *Plugin = NULL) __attribute_format_arg__(1);
const char * const * I18nLanguages(void);
const char *I18nLanguageCode(int Index);
///< Translates the given string (with optional Plugin context) into
///< the current language. If no translation is available, the original
///< string will be returned.
const char *I18nLocale(int Language);
///< Returns the locale code of the given Language (which is an index as
///< returned by I18nCurrentLanguage()). If Language is outside the range
///< of available languages, NULL is returned.
const char *I18nLanguageCode(int Language);
///< Returns the three letter language code of the given Language (which
///< is an index as returned by I18nCurrentLanguage()). If Language is
///< outside the range of available languages, NULL is returned.
///< The returned string may consist of several alternative three letter
///< language codes, separated by commas (as in "deu,ger").
int I18nLanguageIndex(const char *Code);
///< Returns the index of the language with the given three letter
///< language Code. If no suitable language is found, -1 is returned.
const char *I18nNormalizeLanguageCode(const char *Code);
///< Returns a 3 letter language code that may not be zero terminated.
///< If no normalized language code can be found, the given Code is returned.
@ -44,4 +77,6 @@ bool I18nIsPreferredLanguage(int *PreferredLanguages, const char *LanguageCode,
#define tr(s) I18nTranslate(s)
#endif
#define trNOOP(s) (s)
#endif //__I18N_H

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: interface.c 1.75 2006/03/31 14:20:04 kls Exp $
* $Id: interface.c 1.76 2007/08/04 14:39:25 kls Exp $
*/
#include "interface.h"
@ -87,9 +87,7 @@ bool cInterface::QueryKeys(cRemote *Remote, cSkinDisplayMenu *DisplayMenu)
eKeys NewKey = kUp;
while (NewKey != kNone) {
char *Prompt;
char buf[32];
snprintf(buf, sizeof(buf), "Key$%s", cKey::ToString(NewKey));
asprintf(&Prompt, tr("Press key for '%s'"), tr(buf));
asprintf(&Prompt, tr("Press key for '%s'"), cKey::ToString(NewKey, true));
DisplayMenu->SetItem(Prompt, 4, false, false);
free(Prompt);
cRemote::Clear();

133
keys.c
View File

@ -4,69 +4,69 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: keys.c 1.14 2006/10/14 10:18:05 kls Exp $
* $Id: keys.c 1.15 2007/08/11 11:30:18 kls Exp $
*/
#include "keys.h"
#include "plugin.h"
static tKey keyTable[] = { // "Up" and "Down" must be the first two keys!
{ kUp, "Up" },
{ kDown, "Down" },
{ kMenu, "Menu" },
{ kOk, "Ok" },
{ kBack, "Back" },
{ kLeft, "Left" },
{ kRight, "Right" },
{ kRed, "Red" },
{ kGreen, "Green" },
{ kYellow, "Yellow" },
{ kBlue, "Blue" },
{ k0, "0" },
{ k1, "1" },
{ k2, "2" },
{ k3, "3" },
{ k4, "4" },
{ k5, "5" },
{ k6, "6" },
{ k7, "7" },
{ k8, "8" },
{ k9, "9" },
{ kInfo, "Info" },
{ kPlay, "Play" },
{ kPause, "Pause" },
{ kStop, "Stop" },
{ kRecord, "Record" },
{ kFastFwd, "FastFwd" },
{ kFastRew, "FastRew" },
{ kNext, "Next" },
{ kPrev, "Prev" },
{ kPower, "Power" },
{ kChanUp, "Channel+" },
{ kChanDn, "Channel-" },
{ kChanPrev, "PrevChannel"},
{ kVolUp, "Volume+" },
{ kVolDn, "Volume-" },
{ kMute, "Mute" },
{ kAudio, "Audio" },
{ kSchedule, "Schedule" },
{ kChannels, "Channels" },
{ kTimers, "Timers" },
{ kRecordings, "Recordings" },
{ kSetup, "Setup" },
{ kCommands, "Commands" },
{ kUser1, "User1" },
{ kUser2, "User2" },
{ kUser3, "User3" },
{ kUser4, "User4" },
{ kUser5, "User5" },
{ kUser6, "User6" },
{ kUser7, "User7" },
{ kUser8, "User8" },
{ kUser9, "User9" },
{ kNone, "" },
{ k_Setup, "_Setup" },
{ kNone, NULL },
{ kUp, trNOOP("Key$Up") },
{ kDown, trNOOP("Key$Down") },
{ kMenu, trNOOP("Key$Menu") },
{ kOk, trNOOP("Key$Ok") },
{ kBack, trNOOP("Key$Back") },
{ kLeft, trNOOP("Key$Left") },
{ kRight, trNOOP("Key$Right") },
{ kRed, trNOOP("Key$Red") },
{ kGreen, trNOOP("Key$Green") },
{ kYellow, trNOOP("Key$Yellow") },
{ kBlue, trNOOP("Key$Blue") },
{ k0, "0" },
{ k1, "1" },
{ k2, "2" },
{ k3, "3" },
{ k4, "4" },
{ k5, "5" },
{ k6, "6" },
{ k7, "7" },
{ k8, "8" },
{ k9, "9" },
{ kInfo, trNOOP("Key$Info") },
{ kPlay, trNOOP("Key$Play") },
{ kPause, trNOOP("Key$Pause") },
{ kStop, trNOOP("Key$Stop") },
{ kRecord, trNOOP("Key$Record") },
{ kFastFwd, trNOOP("Key$FastFwd") },
{ kFastRew, trNOOP("Key$FastRew") },
{ kNext, trNOOP("Key$Next") },
{ kPrev, trNOOP("Key$Prev") },
{ kPower, trNOOP("Key$Power") },
{ kChanUp, trNOOP("Key$Channel+") },
{ kChanDn, trNOOP("Key$Channel-") },
{ kChanPrev, trNOOP("Key$PrevChannel") },
{ kVolUp, trNOOP("Key$Volume+") },
{ kVolDn, trNOOP("Key$Volume-") },
{ kMute, trNOOP("Key$Mute") },
{ kAudio, trNOOP("Key$Audio") },
{ kSchedule, trNOOP("Key$Schedule") },
{ kChannels, trNOOP("Key$Channels") },
{ kTimers, trNOOP("Key$Timers") },
{ kRecordings, trNOOP("Key$Recordings") },
{ kSetup, trNOOP("Key$Setup") },
{ kCommands, trNOOP("Key$Commands") },
{ kUser1, trNOOP("Key$User1") },
{ kUser2, trNOOP("Key$User2") },
{ kUser3, trNOOP("Key$User3") },
{ kUser4, trNOOP("Key$User4") },
{ kUser5, trNOOP("Key$User5") },
{ kUser6, trNOOP("Key$User6") },
{ kUser7, trNOOP("Key$User7") },
{ kUser8, trNOOP("Key$User8") },
{ kUser9, trNOOP("Key$User9") },
{ kNone, "" },
{ k_Setup, "_Setup" },
{ kNone, NULL },
};
// -- cKey -------------------------------------------------------------------
@ -121,18 +121,29 @@ eKeys cKey::FromString(const char *Name)
{
if (Name) {
for (tKey *k = keyTable; k->name; k++) {
if (strcasecmp(k->name, Name) == 0)
const char *n = k->name;
const char *p = strchr(n, '$');
if (p)
n = p + 1;
if (strcasecmp(n, Name) == 0)
return k->type;
}
}
return kNone;
}
const char *cKey::ToString(eKeys Key)
const char *cKey::ToString(eKeys Key, bool Translate)
{
for (tKey *k = keyTable; k->name; k++) {
if (k->type == Key)
return k->name;
if (k->type == Key) {
const char *n = k->name;
if (Translate)
n = tr(n);
const char *p = strchr(n, '$');
if (p)
n = p + 1;
return n;
}
}
return NULL;
}

4
keys.h
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: keys.h 1.11 2007/02/25 10:49:35 kls Exp $
* $Id: keys.h 1.12 2007/08/04 14:40:23 kls Exp $
*/
#ifndef __KEYS_H
@ -100,7 +100,7 @@ public:
bool Parse(char *s);
bool Save(FILE *f);
static eKeys FromString(const char *Name);
static const char *ToString(eKeys Key);
static const char *ToString(eKeys Key, bool Translate = false);
};
class cKeys : public cConfig<cKey> {

61
menu.c
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: menu.c 1.456 2007/06/23 09:27:13 kls Exp $
* $Id: menu.c 1.459 2007/08/12 10:44:35 kls Exp $
*/
#include "menu.h"
@ -630,7 +630,7 @@ eOSState cMenuText::ProcessKey(eKeys Key)
case kRight|k_Repeat:
case kRight:
DisplayMenu()->Scroll(NORMALKEY(Key) == kUp || NORMALKEY(Key) == kLeft, NORMALKEY(Key) == kLeft || NORMALKEY(Key) == kRight);
cStatus::MsgOsdTextItem(NULL, NORMALKEY(Key) == kUp);
cStatus::MsgOsdTextItem(NULL, NORMALKEY(Key) == kUp || NORMALKEY(Key) == kLeft);
return osContinue;
default: break;
}
@ -980,7 +980,7 @@ eOSState cMenuEvent::ProcessKey(eKeys Key)
case kRight|k_Repeat:
case kRight:
DisplayMenu()->Scroll(NORMALKEY(Key) == kUp || NORMALKEY(Key) == kLeft, NORMALKEY(Key) == kLeft || NORMALKEY(Key) == kRight);
cStatus::MsgOsdTextItem(NULL, NORMALKEY(Key) == kUp);
cStatus::MsgOsdTextItem(NULL, NORMALKEY(Key) == kUp || NORMALKEY(Key) == kLeft);
return osContinue;
default: break;
}
@ -1809,7 +1809,7 @@ eOSState cMenuRecording::ProcessKey(eKeys Key)
case kRight|k_Repeat:
case kRight:
DisplayMenu()->Scroll(NORMALKEY(Key) == kUp || NORMALKEY(Key) == kLeft, NORMALKEY(Key) == kLeft || NORMALKEY(Key) == kRight);
cStatus::MsgOsdTextItem(NULL, NORMALKEY(Key) == kUp);
cStatus::MsgOsdTextItem(NULL, NORMALKEY(Key) == kUp || NORMALKEY(Key) == kLeft);
return osContinue;
default: break;
}
@ -2153,6 +2153,7 @@ void cMenuSetupBase::Store(void)
class cMenuSetupOSD : public cMenuSetupBase {
private:
const char *useSmallFontTexts[3];
int osdLanguageIndex;
int numSkins;
int originalSkinIndex;
int skinIndex;
@ -2171,6 +2172,7 @@ public:
cMenuSetupOSD::cMenuSetupOSD(void)
{
osdLanguageIndex = I18nCurrentLanguage();
numSkins = Skins.Count();
skinIndex = originalSkinIndex = Skins.Current()->Index();
skinDescriptions = new const char*[numSkins];
@ -2203,7 +2205,7 @@ void cMenuSetupOSD::Set(void)
useSmallFontTexts[2] = tr("always");
Clear();
SetSection(tr("OSD"));
Add(new cMenuEditStraItem(tr("Setup.OSD$Language"), &data.OSDLanguage, I18nNumLanguages, I18nLanguages()));
Add(new cMenuEditStraItem(tr("Setup.OSD$Language"), &osdLanguageIndex, I18nLanguages()->Size(), &I18nLanguages()->At(0)));
Add(new cMenuEditStraItem(tr("Setup.OSD$Skin"), &skinIndex, numSkins, skinDescriptions));
if (themes.NumThemes())
Add(new cMenuEditStraItem(tr("Setup.OSD$Theme"), &themeIndex, themes.NumThemes(), themes.Descriptions()));
@ -2237,6 +2239,7 @@ eOSState cMenuSetupOSD::ProcessKey(eKeys Key)
bool ModifiedApperance = false;
if (Key == kOk) {
I18nSetLocale(data.OSDLanguage);
if (skinIndex != originalSkinIndex) {
cSkin *Skin = Skins.Get(skinIndex);
if (Skin) {
@ -2273,16 +2276,17 @@ eOSState cMenuSetupOSD::ProcessKey(eKeys Key)
}
}
int osdLanguage = data.OSDLanguage;
int oldSkinIndex = skinIndex;
int oldOsdLanguageIndex = osdLanguageIndex;
eOSState state = cMenuSetupBase::ProcessKey(Key);
if (ModifiedApperance)
SetDisplayMenu();
if (data.OSDLanguage != osdLanguage || skinIndex != oldSkinIndex) {
int OriginalOSDLanguage = Setup.OSDLanguage;
Setup.OSDLanguage = data.OSDLanguage;
if (osdLanguageIndex != oldOsdLanguageIndex || skinIndex != oldSkinIndex) {
strn0cpy(data.OSDLanguage, I18nLocale(osdLanguageIndex), sizeof(data.OSDLanguage));
int OriginalOSDLanguage = I18nCurrentLanguage();
I18nSetLanguage(osdLanguageIndex);
cSkin *Skin = Skins.Get(skinIndex);
if (Skin) {
@ -2294,7 +2298,7 @@ eOSState cMenuSetupOSD::ProcessKey(eKeys Key)
}
Set();
Setup.OSDLanguage = OriginalOSDLanguage;
I18nSetLanguage(OriginalOSDLanguage);
}
return state;
}
@ -2313,7 +2317,7 @@ public:
cMenuSetupEPG::cMenuSetupEPG(void)
{
for (numLanguages = 0; numLanguages < I18nNumLanguages && data.EPGLanguages[numLanguages] >= 0; numLanguages++)
for (numLanguages = 0; numLanguages < I18nLanguages()->Size() && data.EPGLanguages[numLanguages] >= 0; numLanguages++)
;
originalNumLanguages = numLanguages;
SetSection(tr("EPG"));
@ -2333,9 +2337,11 @@ void cMenuSetupEPG::Setup(void)
Add(new cMenuEditBoolItem(tr("Setup.EPG$Set system time"), &data.SetSystemTime));
if (data.SetSystemTime)
Add(new cMenuEditTranItem(tr("Setup.EPG$Use time from transponder"), &data.TimeTransponder, &data.TimeSource));
Add(new cMenuEditIntItem( tr("Setup.EPG$Preferred languages"), &numLanguages, 0, I18nNumLanguages));
// TRANSLATORS: note the plural!
Add(new cMenuEditIntItem( tr("Setup.EPG$Preferred languages"), &numLanguages, 0, I18nLanguages()->Size()));
for (int i = 0; i < numLanguages; i++)
Add(new cMenuEditStraItem(tr("Setup.EPG$Preferred language"), &data.EPGLanguages[i], I18nNumLanguages, I18nLanguages()));
// TRANSLATORS: note the singular!
Add(new cMenuEditStraItem(tr("Setup.EPG$Preferred language"), &data.EPGLanguages[i], I18nLanguages()->Size(), &I18nLanguages()->At(0)));
SetCurrent(Get(current));
Display();
@ -2365,7 +2371,7 @@ eOSState cMenuSetupEPG::ProcessKey(eKeys Key)
if (numLanguages != oldnumLanguages || data.SetSystemTime != oldSetSystemTime) {
for (int i = oldnumLanguages; i < numLanguages; i++) {
data.EPGLanguages[i] = 0;
for (int l = 0; l < I18nNumLanguages; l++) {
for (int l = 0; l < I18nLanguages()->Size(); l++) {
int k;
for (k = 0; k < oldnumLanguages; k++) {
if (data.EPGLanguages[k] == l)
@ -2404,7 +2410,7 @@ public:
cMenuSetupDVB::cMenuSetupDVB(void)
{
for (numAudioLanguages = 0; numAudioLanguages < I18nNumLanguages && data.AudioLanguages[numAudioLanguages] >= 0; numAudioLanguages++)
for (numAudioLanguages = 0; numAudioLanguages < I18nLanguages()->Size() && data.AudioLanguages[numAudioLanguages] >= 0; numAudioLanguages++)
;
originalNumAudioLanguages = numAudioLanguages;
videoDisplayFormatTexts[0] = tr("pan&scan");
@ -2433,9 +2439,9 @@ void cMenuSetupDVB::Setup(void)
Add(new cMenuEditStraItem(tr("Setup.DVB$Video display format"), &data.VideoDisplayFormat, 3, videoDisplayFormatTexts));
Add(new cMenuEditBoolItem(tr("Setup.DVB$Use Dolby Digital"), &data.UseDolbyDigital));
Add(new cMenuEditStraItem(tr("Setup.DVB$Update channels"), &data.UpdateChannels, 6, updateChannelsTexts));
Add(new cMenuEditIntItem( tr("Setup.DVB$Audio languages"), &numAudioLanguages, 0, I18nNumLanguages));
Add(new cMenuEditIntItem( tr("Setup.DVB$Audio languages"), &numAudioLanguages, 0, I18nLanguages()->Size()));
for (int i = 0; i < numAudioLanguages; i++)
Add(new cMenuEditStraItem(tr("Setup.DVB$Audio language"), &data.AudioLanguages[i], I18nNumLanguages, I18nLanguages()));
Add(new cMenuEditStraItem(tr("Setup.DVB$Audio language"), &data.AudioLanguages[i], I18nLanguages()->Size(), &I18nLanguages()->At(0)));
SetCurrent(Get(current));
Display();
@ -2455,7 +2461,7 @@ eOSState cMenuSetupDVB::ProcessKey(eKeys Key)
if (numAudioLanguages != oldnumAudioLanguages) {
for (int i = oldnumAudioLanguages; i < numAudioLanguages; i++) {
data.AudioLanguages[i] = 0;
for (int l = 0; l < I18nNumLanguages; l++) {
for (int l = 0; l < I18nLanguages()->Size(); l++) {
int k;
for (k = 0; k < oldnumAudioLanguages; k++) {
if (data.AudioLanguages[k] == l)
@ -2826,7 +2832,7 @@ eOSState cMenuSetup::Restart(void)
eOSState cMenuSetup::ProcessKey(eKeys Key)
{
int osdLanguage = Setup.OSDLanguage;
int osdLanguage = I18nCurrentLanguage();
eOSState state = cOsdMenu::ProcessKey(Key);
switch (state) {
@ -2842,7 +2848,7 @@ eOSState cMenuSetup::ProcessKey(eKeys Key)
case osUser10: return Restart();
default: ;
}
if (Setup.OSDLanguage != osdLanguage) {
if (I18nCurrentLanguage() != osdLanguage) {
Set();
if (!HasSubMenu())
Display();
@ -2868,7 +2874,8 @@ cMenuPluginItem::cMenuPluginItem(const char *Name, int Index)
// --- cMenuMain -------------------------------------------------------------
#define STOP_RECORDING tr(" Stop recording ")
// TRANSLATORS: note the leading and trailing blanks!
#define STOP_RECORDING trNOOP(" Stop recording ")
cOsdObject *cMenuMain::pluginOsdObject = NULL;
@ -2967,6 +2974,7 @@ bool cMenuMain::Update(bool Force)
replaying = NewReplaying;
// Replay control:
if (replaying && !stopReplayItem)
// TRANSLATORS: note the leading blank!
Add(stopReplayItem = new cOsdItem(tr(" Stop replaying"), osStopReplay));
else if (stopReplayItem && !replaying) {
Del(stopReplayItem->Index());
@ -2980,6 +2988,7 @@ bool cMenuMain::Update(bool Force)
// Editing control:
bool CutterActive = cCutter::Active();
if (CutterActive && !cancelEditingItem) {
// TRANSLATORS: note the leading blank!
Add(cancelEditingItem = new cOsdItem(tr(" Cancel editing"), osCancelEdit));
result = true;
}
@ -2999,7 +3008,7 @@ bool cMenuMain::Update(bool Force)
const char *s = NULL;
while ((s = cRecordControls::GetInstantId(s)) != NULL) {
char *buffer = NULL;
asprintf(&buffer, "%s%s", STOP_RECORDING, s);
asprintf(&buffer, "%s%s", tr(STOP_RECORDING), s);
cOsdItem *item = new cOsdItem(osStopRecord);
item->SetText(buffer, false);
Add(item);
@ -3015,7 +3024,7 @@ bool cMenuMain::Update(bool Force)
eOSState cMenuMain::ProcessKey(eKeys Key)
{
bool HadSubMenu = HasSubMenu();
int osdLanguage = Setup.OSDLanguage;
int osdLanguage = I18nCurrentLanguage();
eOSState state = cOsdMenu::ProcessKey(Key);
HadSubMenu |= HasSubMenu();
@ -3029,7 +3038,7 @@ eOSState cMenuMain::ProcessKey(eKeys Key)
case osStopRecord: if (Interface->Confirm(tr("Stop recording?"))) {
cOsdItem *item = Get(Current());
if (item) {
cRecordControls::Stop(item->Text() + strlen(STOP_RECORDING));
cRecordControls::Stop(item->Text() + strlen(tr(STOP_RECORDING)));
return osEnd;
}
}
@ -3080,7 +3089,7 @@ eOSState cMenuMain::ProcessKey(eKeys Key)
if (!HasSubMenu() && Update(HadSubMenu))
Display();
if (Key != kNone) {
if (Setup.OSDLanguage != osdLanguage) {
if (I18nCurrentLanguage() != osdLanguage) {
Set();
if (!HasSubMenu())
Display();
@ -3482,6 +3491,7 @@ cDisplayTracks::cDisplayTracks(void)
numTracks++;
}
}
descriptions[numTracks] = 0;
timeout.Set(TRACKTIMEOUT);
displayTracks = Skins.Current()->DisplayTracks(tr("Button$Audio"), numTracks, descriptions);
Show();
@ -4026,6 +4036,7 @@ bool cReplayControl::ShowProgress(bool Initial)
void cReplayControl::TimeSearchDisplay(void)
{
char buf[64];
// TRANSLATORS: note the trailing blank!
strcpy(buf, tr("Jump: "));
int len = strlen(buf);
char h10 = '0' + (timeSearchTime >> 24);

4
menu.h
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: menu.h 1.87 2007/01/05 10:40:54 kls Exp $
* $Id: menu.h 1.88 2007/08/12 10:35:42 kls Exp $
*/
#ifndef __MENU_H
@ -115,7 +115,7 @@ private:
cSkinDisplayTracks *displayTracks;
cTimeMs timeout;
eTrackType types[ttMaxTrackTypes];
char *descriptions[ttMaxTrackTypes];
char *descriptions[ttMaxTrackTypes + 1]; // list is NULL terminated
int numTracks, track, audioChannel;
static cDisplayTracks *currentDisplayTracks;
virtual void Show(void);

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: menuitems.c 1.49 2007/06/08 15:16:38 kls Exp $
* $Id: menuitems.c 1.50 2007/08/04 09:12:18 kls Exp $
*/
#include "menuitems.h"
@ -18,7 +18,7 @@
#define AUTO_ADVANCE_TIMEOUT 1500 // ms before auto advance when entering characters via numeric keys
const char *FileNameChars = " abcdefghijklmnopqrstuvwxyz0123456789-.#~,/_@";
const char *FileNameChars = trNOOP(" abcdefghijklmnopqrstuvwxyz0123456789-.#~,/_@");
// --- cMenuEditItem ---------------------------------------------------------
@ -316,7 +316,7 @@ void cMenuEditStrItem::LeaveEditMode(bool SaveValue)
void cMenuEditStrItem::SetHelpKeys(void)
{
if (InEditMode())
cSkinDisplay::Current()->SetButtons(tr("Button$ABC/abc"), tr(insert ? "Button$Overwrite" : "Button$Insert"), tr("Button$Delete"));
cSkinDisplay::Current()->SetButtons(tr("Button$ABC/abc"), insert ? tr("Button$Overwrite") : tr("Button$Insert"), tr("Button$Delete"));
else
cSkinDisplay::Current()->SetButtons(NULL);
}

View File

@ -12,7 +12,7 @@
# See the main source file 'vdr.c' for copyright information and
# how to reach the author.
#
# $Id: newplugin 1.32 2007/04/28 14:46:39 kls Exp $
# $Id: newplugin 1.34 2007/08/12 11:04:39 kls Exp $
$PLUGIN_NAME = $ARGV[0] || die "Usage: newplugin <name>\n";
@ -35,7 +35,11 @@ Project's homepage: URL
Latest version available at: URL
See the file COPYING for license information.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
See the file COPYING for more information.
Description:
};
@ -109,7 +113,7 @@ OBJS = \$(PLUGIN).o
%.o: %.c
\$(CXX) \$(CXXFLAGS) -c \$(DEFINES) \$(INCLUDES) \$<
# Dependencies:
### Dependencies:
MAKEDEP = \$(CXX) -MM -MG
DEPFILE = .dependencies
@ -118,9 +122,34 @@ DEPFILE = .dependencies
-include \$(DEPFILE)
### Internationalization (I18N):
PODIR = po
LOCALEDIR = \$(VDRDIR)/locale
I18Npo = \$(wildcard \$(PODIR)/*.po)
I18Nmo = \$(addsuffix .mo, \$(foreach file, \$(I18Npo), \$(basename \$(file))))
I18Ndirs = \$(notdir \$(foreach file, \$(I18Npo), \$(basename \$(file))))
I18Npot = \$(PODIR)/\$(PLUGIN).pot
%.mo: %.po
msgfmt -c -o \$\@ \$<
\$(I18Npot): \$(wildcard *.c)
xgettext -C -cTRANSLATORS --no-wrap -F -k -ktr -ktrNOOP --msgid-bugs-address='<see README>' -o \$\@ \$(wildcard *.c)
\$(I18Npo): \$(I18Npot)
msgmerge -U --no-wrap -F --backup=none -q \$\@ \$<
i18n: \$(I18Nmo)
\@mkdir -p \$(LOCALEDIR)
for i in \$(I18Ndirs); do\\
mkdir -p \$(LOCALEDIR)/\$\$i/LC_MESSAGES;\\
cp \$(PODIR)/\$\$i.mo \$(LOCALEDIR)/\$\$i/LC_MESSAGES/\$(PLUGIN).mo;\\
done
### Targets:
all: libvdr-\$(PLUGIN).so
all: libvdr-\$(PLUGIN).so i18n
libvdr-\$(PLUGIN).so: \$(OBJS)
\$(CXX) \$(CXXFLAGS) -shared \$(OBJS) -o \$\@
@ -135,7 +164,7 @@ dist: clean
\@echo Distribution package created as \$(PACKAGE).tgz
clean:
\@-rm -f \$(OBJS) \$(DEPFILE) *.so *.tgz core* *~
\@-rm -f \$(OBJS) \$(DEPFILE) *.so *.tgz core* *~ \$(PODIR)/*.mo \$(PODIR)/*.pot
};
$MAIN = qq

4
osd.c
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: osd.c 1.71 2007/07/20 14:51:36 kls Exp $
* $Id: osd.c 1.72 2007/08/12 11:33:17 kls Exp $
*/
#include "osd.h"
@ -321,6 +321,8 @@ bool cBitmap::LoadXpm(const char *FileName)
bool cBitmap::SetXpm(const char *const Xpm[], bool IgnoreNone)
{
if (!Xpm)
return false;
const char *const *p = Xpm;
int w, h, n, c;
if (4 != sscanf(*p, "%d %d %d %d", &w, &h, &n, &c)) {

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: plugin.c 1.25 2007/02/24 13:44:23 kls Exp $
* $Id: plugin.c 1.26 2007/08/05 12:48:50 kls Exp $
*/
#include "plugin.h"
@ -35,12 +35,12 @@ cPlugin::cPlugin(void)
cPlugin::~cPlugin()
{
I18nRegister(NULL, Name());
}
void cPlugin::SetName(const char *s)
{
name = s;
I18nRegister(name);
}
const char *cPlugin::CommandLineHelp(void)
@ -130,9 +130,9 @@ cString cPlugin::SVDRPCommand(const char *Command, const char *Option, int &Repl
return NULL;
}
void cPlugin::RegisterI18n(const tI18nPhrase * const Phrases)
void cPlugin::RegisterI18n(const void *)
{
I18nRegister(Phrases, Name());
dsyslog("plugin '%s' called obsolete function RegisterI18n()", Name());
}
void cPlugin::SetConfigDirectory(const char *Dir)
@ -338,10 +338,7 @@ bool cPluginManager::InitializePlugins(void)
for (cDll *dll = dlls.First(); dll; dll = dlls.Next(dll)) {
cPlugin *p = dll->Plugin();
if (p) {
int Language = Setup.OSDLanguage;
Setup.OSDLanguage = 0; // the i18n texts are only available _after_ Start()
isyslog("initializing plugin: %s (%s): %s", p->Name(), p->Version(), p->Description());
Setup.OSDLanguage = Language;
if (!p->Initialize())
return false;
}
@ -354,10 +351,7 @@ bool cPluginManager::StartPlugins(void)
for (cDll *dll = dlls.First(); dll; dll = dlls.Next(dll)) {
cPlugin *p = dll->Plugin();
if (p) {
int Language = Setup.OSDLanguage;
Setup.OSDLanguage = 0; // the i18n texts are only available _after_ Start()
isyslog("starting plugin: %s", p->Name());
Setup.OSDLanguage = Language;
if (!p->Start())
return false;
p->started = true;

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: plugin.h 1.14 2007/02/24 13:45:28 kls Exp $
* $Id: plugin.h 1.15 2007/08/04 09:56:26 kls Exp $
*/
#ifndef __PLUGIN_H
@ -51,7 +51,7 @@ public:
void SetupStore(const char *Name, const char *Value = NULL);
void SetupStore(const char *Name, int Value);
void RegisterI18n(const tI18nPhrase * const Phrases);
void RegisterI18n(const void *); ///< This function is obsolete and may be removed in future versions of VDR!
virtual bool Service(const char *Id, void *Data = NULL);
virtual const char **SVDRPHelpPages(void);

1272
po/ca_ES.po Normal file

File diff suppressed because it is too large Load Diff

1270
po/cs_CZ.po Normal file

File diff suppressed because it is too large Load Diff

1270
po/da_DK.po Normal file

File diff suppressed because it is too large Load Diff

1270
po/de_DE.po Normal file

File diff suppressed because it is too large Load Diff

1270
po/el_GR.po Normal file

File diff suppressed because it is too large Load Diff

1270
po/es_ES.po Normal file

File diff suppressed because it is too large Load Diff

1270
po/et_EE.po Normal file

File diff suppressed because it is too large Load Diff

1273
po/fi_FI.po Normal file

File diff suppressed because it is too large Load Diff

1273
po/fr_FR.po Normal file

File diff suppressed because it is too large Load Diff

1271
po/hr_HR.po Normal file

File diff suppressed because it is too large Load Diff

1271
po/hu_HU.po Normal file

File diff suppressed because it is too large Load Diff

1272
po/it_IT.po Normal file

File diff suppressed because it is too large Load Diff

1272
po/nl_NL.po Normal file

File diff suppressed because it is too large Load Diff

1271
po/nn_NO.po Normal file

File diff suppressed because it is too large Load Diff

1270
po/pl_PL.po Normal file

File diff suppressed because it is too large Load Diff

1270
po/pt_PT.po Normal file

File diff suppressed because it is too large Load Diff

1271
po/ro_RO.po Normal file

File diff suppressed because it is too large Load Diff

1270
po/ru_RU.po Normal file

File diff suppressed because it is too large Load Diff

1271
po/sl_SI.po Normal file

File diff suppressed because it is too large Load Diff

1271
po/sv_SE.po Normal file

File diff suppressed because it is too large Load Diff

1270
po/tr_TR.po Normal file

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: receiver.c 1.6 2007/01/05 10:42:29 kls Exp $
* $Id: receiver.c 1.7 2007/08/12 11:52:59 kls Exp $
*/
#include "receiver.h"
@ -38,7 +38,12 @@ cReceiver::cReceiver(tChannelID ChannelID, int Priority, int Pid, const int *Pid
cReceiver::~cReceiver()
{
Detach();
if (device) {
const char *msg = "ERROR: cReceiver has not been detached yet! This is a design fault and VDR will segfault now!";
esyslog(msg);
fprintf(stderr, "%s\n", msg);
*(char *)0 = 0; // cause a segfault
}
}
bool cReceiver::WantsPid(int Pid)

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: skinclassic.c 1.17 2007/06/17 13:53:09 kls Exp $
* $Id: skinclassic.c 1.18 2007/07/29 12:35:03 kls Exp $
*/
#include "skinclassic.h"
@ -549,6 +549,7 @@ void cSkinClassicDisplayVolume::SetVolume(int Current, int Total, bool Mute)
osd->DrawText(0, 0, tr("Key$Mute"), Theme.Color(clrVolumePrompt), Theme.Color(clrBackground), font);
}
else {
// TRANSLATORS: note the trailing blank!
const char *Prompt = tr("Volume ");
int l = font->Width(Prompt);
int p = (osd->Width() - l) * Current / Total;

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: status.h 1.9 2005/12/31 15:15:25 kls Exp $
* $Id: status.h 1.10 2007/08/12 10:34:40 kls Exp $
*/
#ifndef __STATUS_H
@ -40,7 +40,7 @@ protected:
// absolutely or relative to the current volume.
virtual void SetAudioTrack(int Index, const char * const *Tracks) {}
// The audio track has been set to the one given by Index, which
// points into the Tracks array of strings.
// points into the Tracks array of strings. Tracks is NULL terminated.
virtual void SetAudioChannel(int AudioChannel) {}
// The audio channel has been set to the given value.
// 0=stereo, 1=left, 2=right, -1=no information available.

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: themes.c 1.6 2005/11/04 14:19:54 kls Exp $
* $Id: themes.c 1.7 2007/08/05 14:11:35 kls Exp $
*/
#include "themes.h"
@ -18,7 +18,6 @@
cTheme::cTheme(void)
{
name = strdup("default");
memset(descriptions, 0, sizeof(descriptions));
memset(colorNames, 0, sizeof(colorNames));
memset(colorValues, 0, sizeof(colorValues));
descriptions[0] = strdup("Default");
@ -27,8 +26,6 @@ cTheme::cTheme(void)
cTheme::~cTheme()
{
free(name);
for (int i = 0; i < I18nNumLanguages; i++)
free(descriptions[i]);
for (int i = 0; i < MaxThemeColors; i++)
free(colorNames[i]);
}
@ -77,7 +74,7 @@ bool cTheme::FileNameOk(const char *FileName, bool SetName)
const char *cTheme::Description(void)
{
char *s = descriptions[Setup.OSDLanguage];
char *s = descriptions[I18nCurrentLanguage()];
if (!s)
s = descriptions[0];
return s ? s : name;
@ -167,7 +164,7 @@ bool cTheme::Save(const char *FileName)
bool result = true;
cSafeFile f(FileName);
if (f.Open()) {
for (int i = 0; i < I18nNumLanguages; i++) {
for (int i = 0; i < I18nLanguages()->Size(); i++) {
if (descriptions[i])
fprintf(f, "Description%s%.*s = %s\n", i ? "." : "", 3, i ? I18nLanguageCode(i) : "", descriptions[i]);
}

View File

@ -4,13 +4,14 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: themes.h 1.1 2004/05/15 14:22:16 kls Exp $
* $Id: themes.h 1.2 2007/08/05 14:10:22 kls Exp $
*/
#ifndef __THEMES_H
#define __THEMES_H
#include "i18n.h"
#include "tools.h"
#include "osd.h"
class cTheme {
@ -18,7 +19,7 @@ public:
enum { MaxThemeColors = 128 };
private:
char *name;
char *descriptions[I18nNumLanguages];
cStringList descriptions;
char *colorNames[MaxThemeColors];
tColor colorValues[MaxThemeColors];
bool FileNameOk(const char *FileName, bool SetName = false);

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: timers.c 1.67 2007/06/16 10:41:21 kls Exp $
* $Id: timers.c 1.68 2007/08/04 09:23:33 kls Exp $
*/
#include "timers.h"
@ -218,7 +218,8 @@ cString cTimer::PrintDay(time_t Day, int WeekDays, bool SingleByteChars)
char buffer[DAYBUFFERSIZE];
char *b = buffer;
if (WeekDays) {
const char *w = "MTWTFSS";
// TRANSLATORS: the first character of each weekday, beginning with monday
const char *w = trNOOP("MTWTFSS");
if (!SingleByteChars)
w = tr(w);
while (*w) {

19
tools.c
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: tools.c 1.134 2007/07/21 13:02:45 kls Exp $
* $Id: tools.c 1.135 2007/08/05 12:18:15 kls Exp $
*/
#include "tools.h"
@ -852,6 +852,7 @@ cString WeekDayName(int WeekDay)
char buffer[16];
WeekDay = WeekDay == 0 ? 6 : WeekDay - 1; // we start with Monday==0!
if (0 <= WeekDay && WeekDay <= 6) {
// TRANSLATORS: abbreviated weekdays, beginning with monday (must all be 3 letters!)
const char *day = tr("MonTueWedThuFriSatSun");
day += Utf8SymChars(day, WeekDay * 3);
strn0cpy(buffer, day, min(Utf8SymChars(day, 3) + 1, int(sizeof(buffer))));
@ -1178,12 +1179,12 @@ void cStringList::Clear(void)
// --- cFileNameList ---------------------------------------------------------
// TODO better GetFileNames(const char *Directory, cStringList *List)?
cFileNameList::cFileNameList(const char *Directory)
cFileNameList::cFileNameList(const char *Directory, bool DirsOnly)
{
Load(Directory);
Load(Directory, DirsOnly);
}
bool cFileNameList::Load(const char *Directory)
bool cFileNameList::Load(const char *Directory, bool DirsOnly)
{
Clear();
if (Directory) {
@ -1191,8 +1192,16 @@ bool cFileNameList::Load(const char *Directory)
struct dirent *e;
if (d.Ok()) {
while ((e = d.Next()) != NULL) {
if (strcmp(e->d_name, ".") && strcmp(e->d_name, ".."))
if (strcmp(e->d_name, ".") && strcmp(e->d_name, "..")) {
if (DirsOnly) {
struct stat ds;
if (stat(e->d_name, &ds) == 0) {
if (S_ISDIR(ds.st_mode))
continue;
}
}
Append(strdup(e->d_name));
}
}
Sort();
return true;

16
tools.h
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: tools.h 1.104 2007/07/21 13:35:45 kls Exp $
* $Id: tools.h 1.107 2007/08/05 12:11:52 kls Exp $
*/
#ifndef __TOOLS_H
@ -28,9 +28,9 @@ typedef unsigned char uchar;
extern int SysLogLevel;
#define esyslog(a...) void( (SysLogLevel > 0) ? syslog_with_tid(LOG_ERR, a) : void() )
#define isyslog(a...) void( (SysLogLevel > 1) ? syslog_with_tid(LOG_INFO, a) : void() )
#define dsyslog(a...) void( (SysLogLevel > 2) ? syslog_with_tid(LOG_DEBUG, a) : void() )
#define esyslog(a...) void( (SysLogLevel > 0) ? syslog_with_tid(LOG_ERR, a) : void() )
#define isyslog(a...) void( (SysLogLevel > 1) ? syslog_with_tid(LOG_ERR, a) : void() )
#define dsyslog(a...) void( (SysLogLevel > 2) ? syslog_with_tid(LOG_ERR, a) : void() )
#define LOG_ERROR esyslog("ERROR (%s,%d): %m", __FILE__, __LINE__)
#define LOG_ERROR_STR(s) esyslog("ERROR: %s: %m", s)
@ -175,9 +175,9 @@ char *strreplace(char *s, char c1, char c2);
char *strreplace(char *s, const char *s1, const char *s2); ///< re-allocates 's' and deletes the original string if necessary!
inline char *skipspace(const char *s)
{
if (*s > ' ') // most strings don't have any leading space, so handle this case as fast as possible
if ((uchar)*s > ' ') // most strings don't have any leading space, so handle this case as fast as possible
return (char *)s;
while (*s && *s <= ' ') // avoiding isspace() here, because it is much slower
while (*s && (uchar)*s <= ' ') // avoiding isspace() here, because it is much slower
s++;
return (char *)s;
}
@ -487,8 +487,8 @@ public:
class cFileNameList : public cStringList {
public:
cFileNameList(const char *Directory = NULL);
bool Load(const char *Directory);
cFileNameList(const char *Directory = NULL, bool DirsOnly = false);
bool Load(const char *Directory, bool DirsOnly = false);
};
class cHashObject : public cListObject {

7
vdr.5
View File

@ -8,7 +8,7 @@
.\" License as specified in the file COPYING that comes with the
.\" vdr distribution.
.\"
.\" $Id: vdr.5 1.62 2007/06/03 13:21:34 kls Exp $
.\" $Id: vdr.5 1.63 2007/08/05 12:58:35 kls Exp $
.\"
.TH vdr 5 "07 Jan 2007" "1.4.5" "Video Disk Recorder Files"
.SH NAME
@ -542,9 +542,10 @@ you can provide language specific descriptions as
.br
\fBDescription.ger = Blaut\(:one\fR
where the language code (as defined in VDR/i18n.c) is added to the keyword
where the language code is added to the keyword
"Description", separated by a dot. You can enter as many language specific
descriptions as there are languages defined in VDR/i18n.h.
descriptions as you like, but only those that have a corresponding locale
messages file will be actually used.
If a theme file doesn't contain a Description, the name of the theme (as
given in the theme's file name) will be used.
.SS AUDIO/VIDEO DATA

8
vdr.c
View File

@ -16,13 +16,13 @@
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
* Or, point your browser to http://www.gnu.org/copyleft/gpl.html
* Or, point your browser to http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
* The author can be reached at kls@cadsoft.de
*
* The project's page is at http://www.cadsoft.de/vdr
*
* $Id: vdr.c 1.294 2007/07/22 11:40:01 kls Exp $
* $Id: vdr.c 1.296 2007/08/12 11:22:04 kls Exp $
*/
#include <getopt.h>
@ -511,6 +511,10 @@ int main(int argc, char *argv[])
cCharSetConv::SetSystemCharacterTable(CodeSet);
}
// Initialize internationalization:
I18nInitialize();
// Main program loop variables - need to be here to have them initialized before any EXIT():
cOsdObject *Menu = NULL;