mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Switched I18N to gettext
This commit is contained in:
parent
5b8fe34a0e
commit
0f7a4af168
@ -1520,6 +1520,7 @@ Lucian Muresan <lucianm@users.sourceforge.net>
|
|||||||
for making VDR actually use the iso8859-15 fonts
|
for making VDR actually use the iso8859-15 fonts
|
||||||
for suggesting to make the function ExchangeChars()
|
for suggesting to make the function ExchangeChars()
|
||||||
for reporting duplicate texts in i18n.c
|
for reporting duplicate texts in i18n.c
|
||||||
|
for suggesting to use 'gettext' for internationalization
|
||||||
|
|
||||||
Mattias Grönlund <Mattias@Gronlund.net>
|
Mattias Grönlund <Mattias@Gronlund.net>
|
||||||
for pointing out a missing cleanup at program exit in case there is a problem
|
for pointing out a missing cleanup at program exit in case there is a problem
|
||||||
|
18
HISTORY
18
HISTORY
@ -5299,7 +5299,7 @@ Video Disk Recorder Revision History
|
|||||||
- Added a missing 'P' to vdr.c's SHUTDOWNCANCELROMPT macro (reported by Marco
|
- Added a missing 'P' to vdr.c's SHUTDOWNCANCELROMPT macro (reported by Marco
|
||||||
Schlüßler).
|
Schlüßler).
|
||||||
|
|
||||||
2007-07-28: Version 1.5.7
|
2007-08-11: Version 1.5.7
|
||||||
|
|
||||||
- All logging now goes to LOG_ERR, because some systems split error, info and
|
- 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
|
debug messages into separate files, which repeatedly caused extra efforts to
|
||||||
@ -5310,3 +5310,19 @@ Video Disk Recorder Revision History
|
|||||||
(thanks to Marco Schlüßler).
|
(thanks to Marco Schlüßler).
|
||||||
- Fixed a bug I introduced when simplifying the original patch for detecting
|
- Fixed a bug I introduced when simplifying the original patch for detecting
|
||||||
Premiere NVOD channel links (crash reported by Malte Schröder).
|
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 '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 selcted OSD language (e.g. en_US). Therefore, when you first run
|
||||||
|
this version of VDR you may have to select your desired OSD language again.
|
||||||
|
1
INSTALL
1
INSTALL
@ -24,6 +24,7 @@ You will also need to install the following libraries, as well as their
|
|||||||
|
|
||||||
fontconfig
|
fontconfig
|
||||||
freetype2
|
freetype2
|
||||||
|
gettext
|
||||||
libcap
|
libcap
|
||||||
libjpeg
|
libjpeg
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
# See the main source file 'vdr.c' for copyright information and
|
# See the main source file 'vdr.c' for copyright information and
|
||||||
# how to reach the author.
|
# how to reach the author.
|
||||||
#
|
#
|
||||||
# $Id: Make.config.template 1.10 2006/06/15 09:15:25 kls Exp $
|
# $Id: Make.config.template 1.11 2007/08/11 10:50:44 kls Exp $
|
||||||
|
|
||||||
### The C compiler and options:
|
### The C compiler and options:
|
||||||
|
|
||||||
@ -26,6 +26,7 @@ endif
|
|||||||
#DVBDIR = /usr/src/v4l-dvb/linux
|
#DVBDIR = /usr/src/v4l-dvb/linux
|
||||||
MANDIR = /usr/local/man
|
MANDIR = /usr/local/man
|
||||||
BINDIR = /usr/local/bin
|
BINDIR = /usr/local/bin
|
||||||
|
LOCDIR = /usr/share/vdr/locale
|
||||||
|
|
||||||
PLUGINDIR= ./PLUGINS
|
PLUGINDIR= ./PLUGINS
|
||||||
PLUGINLIBDIR= $(PLUGINDIR)/lib
|
PLUGINLIBDIR= $(PLUGINDIR)/lib
|
||||||
|
36
Makefile
36
Makefile
@ -4,7 +4,7 @@
|
|||||||
# See the main source file 'vdr.c' for copyright information and
|
# See the main source file 'vdr.c' for copyright information and
|
||||||
# how to reach the author.
|
# how to reach the author.
|
||||||
#
|
#
|
||||||
# $Id: 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:
|
.DELETE_ON_ERROR:
|
||||||
|
|
||||||
@ -17,6 +17,7 @@ CXXFLAGS ?= -g -O2 -Wall -Woverloaded-virtual
|
|||||||
LSIDIR = ./libsi
|
LSIDIR = ./libsi
|
||||||
MANDIR = /usr/local/man
|
MANDIR = /usr/local/man
|
||||||
BINDIR = /usr/local/bin
|
BINDIR = /usr/local/bin
|
||||||
|
LOCDIR = /usr/share/vdr/locale
|
||||||
LIBS = -ljpeg -lpthread -ldl -lcap -lfreetype -lfontconfig
|
LIBS = -ljpeg -lpthread -ldl -lcap -lfreetype -lfontconfig
|
||||||
INCLUDES = -I/usr/include/freetype2
|
INCLUDES = -I/usr/include/freetype2
|
||||||
|
|
||||||
@ -58,6 +59,7 @@ DEFINES += -D_GNU_SOURCE
|
|||||||
|
|
||||||
DEFINES += -DVIDEODIR=\"$(VIDEODIR)\"
|
DEFINES += -DVIDEODIR=\"$(VIDEODIR)\"
|
||||||
DEFINES += -DPLUGINDIR=\"$(PLUGINLIBDIR)\"
|
DEFINES += -DPLUGINDIR=\"$(PLUGINLIBDIR)\"
|
||||||
|
DEFINES += -DLOCDIR=\"$(LOCDIR)\"
|
||||||
|
|
||||||
# The version numbers of VDR and the plugin API (taken from VDR's "config.h"):
|
# The version numbers of VDR and the plugin API (taken from VDR's "config.h"):
|
||||||
|
|
||||||
@ -69,7 +71,7 @@ ifdef VFAT
|
|||||||
DEFINES += -DVFAT
|
DEFINES += -DVFAT
|
||||||
endif
|
endif
|
||||||
|
|
||||||
all: vdr
|
all: vdr i18n
|
||||||
|
|
||||||
# Implicit rules:
|
# Implicit rules:
|
||||||
|
|
||||||
@ -95,6 +97,35 @@ vdr: $(OBJS) $(SILIB)
|
|||||||
$(SILIB):
|
$(SILIB):
|
||||||
$(MAKE) -C $(LSIDIR) all
|
$(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):
|
# The 'include' directory (for plugins):
|
||||||
|
|
||||||
include-dir:
|
include-dir:
|
||||||
@ -169,6 +200,7 @@ srcdoc:
|
|||||||
clean:
|
clean:
|
||||||
$(MAKE) -C $(LSIDIR) clean
|
$(MAKE) -C $(LSIDIR) clean
|
||||||
-rm -f $(OBJS) $(DEPFILE) vdr core* *~
|
-rm -f $(OBJS) $(DEPFILE) vdr core* *~
|
||||||
|
-rm -rf $(LOCALEDIR) $(PODIR)/*.mo $(PODIR)/*.pot
|
||||||
-rm -rf include
|
-rm -rf include
|
||||||
-rm -rf srcdoc
|
-rm -rf srcdoc
|
||||||
CLEAN: clean
|
CLEAN: clean
|
||||||
|
102
PLUGINS.html
102
PLUGINS.html
@ -14,15 +14,18 @@ Copyright © 2006 Klaus Schmidinger<br>
|
|||||||
<a href="http://www.cadsoft.de/vdr">www.cadsoft.de/vdr</a>
|
<a href="http://www.cadsoft.de/vdr">www.cadsoft.de/vdr</a>
|
||||||
</center>
|
</center>
|
||||||
<p>
|
<p>
|
||||||
<!--X1.5.0--><table width=100%><tr><td bgcolor=#00AA00> </td><td width=100%>
|
<!--X1.5.0--><table width=100%><tr><td bgcolor=#0000AA> </td><td width=100%>
|
||||||
Important modifications introduced in version 1.5.0 are marked like this.
|
Important modifications introduced in version 1.5.0 are marked like this.
|
||||||
<!--X1.5.0--></td></tr></table>
|
<!--X1.5.0--></td></tr></table>
|
||||||
<!--X1.5.1--><table width=100%><tr><td bgcolor=#AA0000> </td><td width=100%>
|
<!--X1.5.1--><table width=100%><tr><td bgcolor=#00AA00> </td><td width=100%>
|
||||||
Important modifications introduced in version 1.5.1 are marked like this.
|
Important modifications introduced in version 1.5.1 are marked like this.
|
||||||
<!--X1.5.1--></td></tr></table>
|
<!--X1.5.1--></td></tr></table>
|
||||||
<!--X1.5.3--><table width=100%><tr><td bgcolor=#FF0000> </td><td width=100%>
|
<!--X1.5.3--><table width=100%><tr><td bgcolor=#AA0000> </td><td width=100%>
|
||||||
Important modifications introduced in version 1.5.3 are marked like this.
|
Important modifications introduced in version 1.5.3 are marked like this.
|
||||||
<!--X1.5.3--></td></tr></table>
|
<!--X1.5.3--></td></tr></table>
|
||||||
|
<!--X1.5.7--><table width=100%><tr><td bgcolor=#FF0000> </td><td width=100%>
|
||||||
|
Important modifications introduced in version 1.5.7 are marked like this.
|
||||||
|
<!--X1.5.7--></td></tr></table>
|
||||||
<p>
|
<p>
|
||||||
VDR provides an easy to use plugin interface that allows additional functionality
|
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.
|
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="#Housekeeping">Housekeeping</a>
|
||||||
<li><a href="#Main thread hook">Main thread hook</a>
|
<li><a href="#Main thread hook">Main thread hook</a>
|
||||||
<li><a href="#Activity">Activity</a>
|
<li><a href="#Activity">Activity</a>
|
||||||
<!--X1.5.1--><table width=100%><tr><td bgcolor=#AA0000> </td><td width=100%>
|
<!--X1.5.1--><table width=100%><tr><td bgcolor=#00AA00> </td><td width=100%>
|
||||||
<li><a href="#Wakeup">Wakeup</a>
|
<li><a href="#Wakeup">Wakeup</a>
|
||||||
<!--X1.5.1--></td></tr></table>
|
<!--X1.5.1--></td></tr></table>
|
||||||
<li><a href="#Setup parameters">Setup parameters</a>
|
<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="#Devices">Devices</a>
|
||||||
<li><a href="#Audio">Audio</a>
|
<li><a href="#Audio">Audio</a>
|
||||||
<li><a href="#Remote Control">Remote Control</a>
|
<li><a href="#Remote Control">Remote Control</a>
|
||||||
<!--X1.5.0--><table width=100%><tr><td bgcolor=#00AA00> </td><td width=100%>
|
<!--X1.5.0--><table width=100%><tr><td bgcolor=#0000AA> </td><td width=100%>
|
||||||
<li><a href="#Conditional Access">Conditional Access</a>
|
<li><a href="#Conditional Access">Conditional Access</a>
|
||||||
<!--X1.5.0--></td></tr></table>
|
<!--X1.5.0--></td></tr></table>
|
||||||
</ul>
|
</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
|
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.
|
further plugins will be queried and no shutdown will be done.
|
||||||
|
|
||||||
<!--X1.5.1--><table width=100%><tr><td bgcolor=#AA0000> </td><td width=100%>
|
<!--X1.5.1--><table width=100%><tr><td bgcolor=#00AA00> </td><td width=100%>
|
||||||
<a name="Wakeup"><hr><h2>Wakeup</h2>
|
<a name="Wakeup"><hr><h2>Wakeup</h2>
|
||||||
|
|
||||||
<center><i><b>Wake me up before you go-go</b></i></center><p>
|
<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>
|
<center><i><b>Welcome to Babylon!</b></i></center><p>
|
||||||
|
|
||||||
If a plugin displays texts to the user, it should implement internationalized
|
<!--X1.5.7--><table width=100%><tr><td bgcolor=#FF0000> </td><td width=100%>
|
||||||
versions of these texts and call the function
|
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
|
||||||
<p><table><tr><td bgcolor=#F0F0F0><pre>
|
presented to the user as translatable, as in
|
||||||
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>{ NULL }</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:
|
|
||||||
|
|
||||||
<p><table><tr><td bgcolor=#F0F0F0><pre>
|
<p><table><tr><td bgcolor=#F0F0F0><pre>
|
||||||
const char *s = tr("Hello world!");
|
const char *s = tr("Hello world!");
|
||||||
</pre></td></tr></table><p>
|
</pre></td></tr></table><p>
|
||||||
|
|
||||||
The text given here must be the first one defined in the related <i>Phrases</i>
|
The text given here must be the English version, and the returned pointer is either
|
||||||
entry (which is the English version), and the returned pointer is either a translated
|
a translated version (if available) or the original string.
|
||||||
version (if available) or the original string. In the latter case a message will be
|
Texts are first searched for in the domain registered for this plugin (if any)
|
||||||
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)
|
|
||||||
and then in the global VDR texts. So a plugin can make use of texts defined by the
|
and then in the global VDR texts. So a plugin can make use of texts defined by the
|
||||||
core VDR code.
|
core VDR code.
|
||||||
<p>
|
<p>
|
||||||
<!--X1.5.3--><table width=100%><tr><td bgcolor=#FF0000> </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 < 3; i++)
|
||||||
|
MyFunc(tr(Texts[i]));
|
||||||
|
</pre></td></tr></table><p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<!--X1.5.3--><table width=100%><tr><td bgcolor=#AA0000> </td><td width=100%>
|
||||||
The system VDR is running on may use a character encoding where a single character
|
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,
|
(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).
|
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
|
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.
|
handling individual characters these functions may come in handy.
|
||||||
<!--X1.5.3--></td></tr></table>
|
<!--X1.5.3--></td></tr></table>
|
||||||
|
<!--X1.5.7--></td></tr></table>
|
||||||
|
|
||||||
<a name="Custom services"><hr><h2>Custom services</h2>
|
<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
|
areas. Drawing areas are always rectangular and may not overlap (but do not need
|
||||||
to be adjacent).
|
to be adjacent).
|
||||||
<p>
|
<p>
|
||||||
<!--X1.5.3--><table width=100%><tr><td bgcolor=#FF0000> </td><td width=100%>
|
<!--X1.5.3--><table width=100%><tr><td bgcolor=#AA0000> </td><td width=100%>
|
||||||
Special consideration may have to be given to color usage if the OSD provides
|
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>,
|
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
|
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.
|
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> </td><td width=100%>
|
<!--X1.5.0--><table width=100%><tr><td bgcolor=#0000AA> </td><td width=100%>
|
||||||
<a name="Conditional Access"><hr><h2>Conditional Access</h2>
|
<a name="Conditional Access"><hr><h2>Conditional Access</h2>
|
||||||
|
|
||||||
<center><i><b>Members only!</b></i></center><p>
|
<center><i><b>Members only!</b></i></center><p>
|
||||||
|
@ -49,3 +49,7 @@ VDR Plugin 'hello' Revision History
|
|||||||
2006-04-22: Version 0.1.1
|
2006-04-22: Version 0.1.1
|
||||||
|
|
||||||
- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
|
- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
|
||||||
|
|
||||||
|
2007-08-11: Version 0.2.0
|
||||||
|
|
||||||
|
- Switched to 'gettext' internationalization.
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
#
|
#
|
||||||
# Makefile for a Video Disk Recorder plugin
|
# 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.
|
# The official name of this plugin.
|
||||||
# This name will be used in the '-P...' option of VDR to load the 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.
|
# 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
|
PLUGIN = hello
|
||||||
|
|
||||||
@ -45,25 +47,50 @@ DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
|
|||||||
|
|
||||||
### The object files (add further files here):
|
### The object files (add further files here):
|
||||||
|
|
||||||
OBJS = $(PLUGIN).o i18n.o
|
OBJS = $(PLUGIN).o
|
||||||
|
|
||||||
### Implicit rules:
|
### Implicit rules:
|
||||||
|
|
||||||
%.o: %.c
|
%.o: %.c
|
||||||
$(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) $<
|
$(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) $<
|
||||||
|
|
||||||
# Dependencies:
|
### Dependencies:
|
||||||
|
|
||||||
MAKEDEP = g++ -MM -MG
|
MAKEDEP = $(CXX) -MM -MG
|
||||||
DEPFILE = .dependencies
|
DEPFILE = .dependencies
|
||||||
$(DEPFILE): Makefile
|
$(DEPFILE): Makefile
|
||||||
@$(MAKEDEP) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
|
@$(MAKEDEP) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
|
||||||
|
|
||||||
-include $(DEPFILE)
|
-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:
|
### Targets:
|
||||||
|
|
||||||
all: libvdr-$(PLUGIN).so
|
all: libvdr-$(PLUGIN).so i18n
|
||||||
|
|
||||||
libvdr-$(PLUGIN).so: $(OBJS)
|
libvdr-$(PLUGIN).so: $(OBJS)
|
||||||
$(CXX) $(CXXFLAGS) -shared $(OBJS) -o $@
|
$(CXX) $(CXXFLAGS) -shared $(OBJS) -o $@
|
||||||
@ -78,4 +105,5 @@ dist: clean
|
|||||||
@echo Distribution package created as $(PACKAGE).tgz
|
@echo Distribution package created as $(PACKAGE).tgz
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
@-rm -f $(PODIR)/*.mo $(PODIR)/*.pot
|
||||||
@-rm -f $(OBJS) $(DEPFILE) *.so *.tgz core* *~
|
@-rm -f $(OBJS) $(DEPFILE) *.so *.tgz core* *~
|
||||||
|
@ -3,18 +3,18 @@
|
|||||||
*
|
*
|
||||||
* See the README file for copyright information and how to reach the author.
|
* 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 <getopt.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <vdr/i18n.h>
|
||||||
#include <vdr/interface.h>
|
#include <vdr/interface.h>
|
||||||
#include <vdr/plugin.h>
|
#include <vdr/plugin.h>
|
||||||
#include "i18n.h"
|
|
||||||
|
|
||||||
static const char *VERSION = "0.1.1";
|
static const char *VERSION = "0.2.0";
|
||||||
static const char *DESCRIPTION = "A friendly greeting";
|
static const char *DESCRIPTION = trNOOP("A friendly greeting");
|
||||||
static const char *MAINMENUENTRY = "Hello";
|
static const char *MAINMENUENTRY = trNOOP("Hello");
|
||||||
|
|
||||||
class cPluginHello : public cPlugin {
|
class cPluginHello : public cPlugin {
|
||||||
private:
|
private:
|
||||||
@ -115,7 +115,6 @@ bool cPluginHello::ProcessArgs(int argc, char *argv[])
|
|||||||
bool cPluginHello::Start(void)
|
bool cPluginHello::Start(void)
|
||||||
{
|
{
|
||||||
// Start any background activities the plugin shall perform.
|
// Start any background activities the plugin shall perform.
|
||||||
RegisterI18n(Phrases);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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 }
|
|
||||||
};
|
|
@ -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
|
|
42
PLUGINS/src/hello/po/ca_ES.po
Normal file
42
PLUGINS/src/hello/po/ca_ES.po
Normal 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 ""
|
40
PLUGINS/src/hello/po/cs_CZ.po
Normal file
40
PLUGINS/src/hello/po/cs_CZ.po
Normal 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!"
|
40
PLUGINS/src/hello/po/da_DK.po
Normal file
40
PLUGINS/src/hello/po/da_DK.po
Normal 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 ""
|
40
PLUGINS/src/hello/po/de_DE.po
Normal file
40
PLUGINS/src/hello/po/de_DE.po
Normal 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!"
|
40
PLUGINS/src/hello/po/el_GR.po
Normal file
40
PLUGINS/src/hello/po/el_GR.po
Normal 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 ""
|
40
PLUGINS/src/hello/po/es_ES.po
Normal file
40
PLUGINS/src/hello/po/es_ES.po
Normal 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 ""
|
40
PLUGINS/src/hello/po/et_EE.po
Normal file
40
PLUGINS/src/hello/po/et_EE.po
Normal 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 ""
|
43
PLUGINS/src/hello/po/fi_FI.po
Normal file
43
PLUGINS/src/hello/po/fi_FI.po
Normal 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?"
|
43
PLUGINS/src/hello/po/fr_FR.po
Normal file
43
PLUGINS/src/hello/po/fr_FR.po
Normal 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 ""
|
41
PLUGINS/src/hello/po/hr_HR.po
Normal file
41
PLUGINS/src/hello/po/hr_HR.po
Normal 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 ""
|
41
PLUGINS/src/hello/po/hu_HU.po
Normal file
41
PLUGINS/src/hello/po/hu_HU.po
Normal 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 ""
|
42
PLUGINS/src/hello/po/it_IT.po
Normal file
42
PLUGINS/src/hello/po/it_IT.po
Normal 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 ""
|
42
PLUGINS/src/hello/po/nl_NL.po
Normal file
42
PLUGINS/src/hello/po/nl_NL.po
Normal 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 ""
|
41
PLUGINS/src/hello/po/nn_NO.po
Normal file
41
PLUGINS/src/hello/po/nn_NO.po
Normal 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 ""
|
40
PLUGINS/src/hello/po/pl_PL.po
Normal file
40
PLUGINS/src/hello/po/pl_PL.po
Normal 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 ""
|
40
PLUGINS/src/hello/po/pt_PT.po
Normal file
40
PLUGINS/src/hello/po/pt_PT.po
Normal 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 ""
|
41
PLUGINS/src/hello/po/ro_RO.po
Normal file
41
PLUGINS/src/hello/po/ro_RO.po
Normal 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 ""
|
40
PLUGINS/src/hello/po/ru_RU.po
Normal file
40
PLUGINS/src/hello/po/ru_RU.po
Normal 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 "ºÐÚ ßÞÖØÒÐÕâÕ?"
|
41
PLUGINS/src/hello/po/sl_SI.po
Normal file
41
PLUGINS/src/hello/po/sl_SI.po
Normal 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 ""
|
41
PLUGINS/src/hello/po/sv_SE.po
Normal file
41
PLUGINS/src/hello/po/sv_SE.po
Normal 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 ""
|
40
PLUGINS/src/hello/po/tr_TR.po
Normal file
40
PLUGINS/src/hello/po/tr_TR.po
Normal 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 ""
|
42
README.i18n
Normal file
42
README.i18n
Normal 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).
|
12
config.c
12
config.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: config.c 1.154 2007/06/23 09:42:49 kls Exp $
|
* $Id: config.c 1.155 2007/08/10 12:58:08 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
@ -214,7 +214,7 @@ cSetup Setup;
|
|||||||
|
|
||||||
cSetup::cSetup(void)
|
cSetup::cSetup(void)
|
||||||
{
|
{
|
||||||
OSDLanguage = 0;
|
strcpy(OSDLanguage, I18N_DEFAULT_LOCALE);
|
||||||
strcpy(OSDSkin, "sttng");
|
strcpy(OSDSkin, "sttng");
|
||||||
strcpy(OSDTheme, "default");
|
strcpy(OSDTheme, "default");
|
||||||
PrimaryDVB = 1;
|
PrimaryDVB = 1;
|
||||||
@ -349,9 +349,9 @@ bool cSetup::Load(const char *FileName)
|
|||||||
|
|
||||||
void cSetup::StoreLanguages(const char *Name, int *Values)
|
void cSetup::StoreLanguages(const char *Name, int *Values)
|
||||||
{
|
{
|
||||||
char buffer[I18nNumLanguages * 4];
|
char buffer[I18nLanguages()->Size() * 4];
|
||||||
char *q = buffer;
|
char *q = buffer;
|
||||||
for (int i = 0; i < I18nNumLanguages; i++) {
|
for (int i = 0; i < I18nLanguages()->Size(); i++) {
|
||||||
if (Values[i] < 0)
|
if (Values[i] < 0)
|
||||||
break;
|
break;
|
||||||
const char *s = I18nLanguageCode(Values[i]);
|
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)
|
bool cSetup::ParseLanguages(const char *Value, int *Values)
|
||||||
{
|
{
|
||||||
int n = 0;
|
int n = 0;
|
||||||
while (Value && *Value && n < I18nNumLanguages) {
|
while (Value && *Value && n < I18nLanguages()->Size()) {
|
||||||
char buffer[4];
|
char buffer[4];
|
||||||
strn0cpy(buffer, Value, sizeof(buffer));
|
strn0cpy(buffer, Value, sizeof(buffer));
|
||||||
int i = I18nLanguageIndex(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)
|
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, "OSDSkin")) Utf8Strn0Cpy(OSDSkin, Value, MaxSkinName);
|
||||||
else if (!strcasecmp(Name, "OSDTheme")) Utf8Strn0Cpy(OSDTheme, Value, MaxThemeName);
|
else if (!strcasecmp(Name, "OSDTheme")) Utf8Strn0Cpy(OSDTheme, Value, MaxThemeName);
|
||||||
else if (!strcasecmp(Name, "PrimaryDVB")) PrimaryDVB = atoi(Value);
|
else if (!strcasecmp(Name, "PrimaryDVB")) PrimaryDVB = atoi(Value);
|
||||||
|
8
config.h
8
config.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: config.h 1.295 2007/07/28 09:45:27 kls Exp $
|
* $Id: config.h 1.296 2007/08/10 13:01:52 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __CONFIG_H
|
#ifndef __CONFIG_H
|
||||||
@ -199,7 +199,7 @@ private:
|
|||||||
public:
|
public:
|
||||||
// Also adjust cMenuSetup (menu.c) when adding parameters here!
|
// Also adjust cMenuSetup (menu.c) when adding parameters here!
|
||||||
int __BeginData__;
|
int __BeginData__;
|
||||||
int OSDLanguage;
|
char OSDLanguage[I18N_MAX_LOCALE_LEN];
|
||||||
char OSDSkin[MaxSkinName];
|
char OSDSkin[MaxSkinName];
|
||||||
char OSDTheme[MaxThemeName];
|
char OSDTheme[MaxThemeName];
|
||||||
int PrimaryDVB;
|
int PrimaryDVB;
|
||||||
@ -219,8 +219,8 @@ public:
|
|||||||
int TimeSource;
|
int TimeSource;
|
||||||
int TimeTransponder;
|
int TimeTransponder;
|
||||||
int MarginStart, MarginStop;
|
int MarginStart, MarginStop;
|
||||||
int AudioLanguages[I18nNumLanguages + 1];
|
int AudioLanguages[I18N_MAX_LANGUAGES + 1];
|
||||||
int EPGLanguages[I18nNumLanguages + 1];
|
int EPGLanguages[I18N_MAX_LANGUAGES + 1];
|
||||||
int EPGScanTimeout;
|
int EPGScanTimeout;
|
||||||
int EPGBugfixLevel;
|
int EPGBugfixLevel;
|
||||||
int EPGLinger;
|
int EPGLinger;
|
||||||
|
328
i18n-to-gettext.pl
Executable file
328
i18n-to-gettext.pl
Executable file
@ -0,0 +1,328 @@
|
|||||||
|
#!/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.1 2007/08/11 10:36:33 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.
|
||||||
|
#
|
||||||
|
# - 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
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
`mv Makefile Makefile.old`;
|
||||||
|
open(OLD, "Makefile.old") || die "Makefile.old: $!";
|
||||||
|
open(NEW, ">Makefile") || die "Makefile: $!";
|
||||||
|
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);
|
51
i18n.h
51
i18n.h
@ -4,25 +4,58 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: 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
|
#ifndef __I18N_H
|
||||||
#define __I18N_H
|
#define __I18N_H
|
||||||
|
|
||||||
#include <stdio.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];
|
#define I18N_DEFAULT_LOCALE "en_US"
|
||||||
|
#define I18N_MAX_LOCALE_LEN 16 // for buffers that hold en_US etc.
|
||||||
void I18nRegister(const tI18nPhrase * const Phrases, const char *Plugin);
|
#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 *I18nTranslate(const char *s, const char *Plugin = NULL) __attribute_format_arg__(1);
|
||||||
|
///< Translates the given string (with optional Plugin context) into
|
||||||
const char * const * I18nLanguages(void);
|
///< the current language. If no translation is available, the original
|
||||||
const char *I18nLanguageCode(int Index);
|
///< 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);
|
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);
|
const char *I18nNormalizeLanguageCode(const char *Code);
|
||||||
///< Returns a 3 letter language code that may not be zero terminated.
|
///< 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.
|
///< 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)
|
#define tr(s) I18nTranslate(s)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define trNOOP(s) (s)
|
||||||
|
|
||||||
#endif //__I18N_H
|
#endif //__I18N_H
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: 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"
|
#include "interface.h"
|
||||||
@ -87,9 +87,7 @@ bool cInterface::QueryKeys(cRemote *Remote, cSkinDisplayMenu *DisplayMenu)
|
|||||||
eKeys NewKey = kUp;
|
eKeys NewKey = kUp;
|
||||||
while (NewKey != kNone) {
|
while (NewKey != kNone) {
|
||||||
char *Prompt;
|
char *Prompt;
|
||||||
char buf[32];
|
asprintf(&Prompt, tr("Press key for '%s'"), cKey::ToString(NewKey, true));
|
||||||
snprintf(buf, sizeof(buf), "Key$%s", cKey::ToString(NewKey));
|
|
||||||
asprintf(&Prompt, tr("Press key for '%s'"), tr(buf));
|
|
||||||
DisplayMenu->SetItem(Prompt, 4, false, false);
|
DisplayMenu->SetItem(Prompt, 4, false, false);
|
||||||
free(Prompt);
|
free(Prompt);
|
||||||
cRemote::Clear();
|
cRemote::Clear();
|
||||||
|
107
keys.c
107
keys.c
@ -4,24 +4,24 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: 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 "keys.h"
|
||||||
#include "plugin.h"
|
#include "plugin.h"
|
||||||
|
|
||||||
static tKey keyTable[] = { // "Up" and "Down" must be the first two keys!
|
static tKey keyTable[] = { // "Up" and "Down" must be the first two keys!
|
||||||
{ kUp, "Up" },
|
{ kUp, trNOOP("Key$Up") },
|
||||||
{ kDown, "Down" },
|
{ kDown, trNOOP("Key$Down") },
|
||||||
{ kMenu, "Menu" },
|
{ kMenu, trNOOP("Key$Menu") },
|
||||||
{ kOk, "Ok" },
|
{ kOk, trNOOP("Key$Ok") },
|
||||||
{ kBack, "Back" },
|
{ kBack, trNOOP("Key$Back") },
|
||||||
{ kLeft, "Left" },
|
{ kLeft, trNOOP("Key$Left") },
|
||||||
{ kRight, "Right" },
|
{ kRight, trNOOP("Key$Right") },
|
||||||
{ kRed, "Red" },
|
{ kRed, trNOOP("Key$Red") },
|
||||||
{ kGreen, "Green" },
|
{ kGreen, trNOOP("Key$Green") },
|
||||||
{ kYellow, "Yellow" },
|
{ kYellow, trNOOP("Key$Yellow") },
|
||||||
{ kBlue, "Blue" },
|
{ kBlue, trNOOP("Key$Blue") },
|
||||||
{ k0, "0" },
|
{ k0, "0" },
|
||||||
{ k1, "1" },
|
{ k1, "1" },
|
||||||
{ k2, "2" },
|
{ k2, "2" },
|
||||||
@ -32,38 +32,38 @@ static tKey keyTable[] = { // "Up" and "Down" must be the first two keys!
|
|||||||
{ k7, "7" },
|
{ k7, "7" },
|
||||||
{ k8, "8" },
|
{ k8, "8" },
|
||||||
{ k9, "9" },
|
{ k9, "9" },
|
||||||
{ kInfo, "Info" },
|
{ kInfo, trNOOP("Key$Info") },
|
||||||
{ kPlay, "Play" },
|
{ kPlay, trNOOP("Key$Play") },
|
||||||
{ kPause, "Pause" },
|
{ kPause, trNOOP("Key$Pause") },
|
||||||
{ kStop, "Stop" },
|
{ kStop, trNOOP("Key$Stop") },
|
||||||
{ kRecord, "Record" },
|
{ kRecord, trNOOP("Key$Record") },
|
||||||
{ kFastFwd, "FastFwd" },
|
{ kFastFwd, trNOOP("Key$FastFwd") },
|
||||||
{ kFastRew, "FastRew" },
|
{ kFastRew, trNOOP("Key$FastRew") },
|
||||||
{ kNext, "Next" },
|
{ kNext, trNOOP("Key$Next") },
|
||||||
{ kPrev, "Prev" },
|
{ kPrev, trNOOP("Key$Prev") },
|
||||||
{ kPower, "Power" },
|
{ kPower, trNOOP("Key$Power") },
|
||||||
{ kChanUp, "Channel+" },
|
{ kChanUp, trNOOP("Key$Channel+") },
|
||||||
{ kChanDn, "Channel-" },
|
{ kChanDn, trNOOP("Key$Channel-") },
|
||||||
{ kChanPrev, "PrevChannel"},
|
{ kChanPrev, trNOOP("Key$PrevChannel") },
|
||||||
{ kVolUp, "Volume+" },
|
{ kVolUp, trNOOP("Key$Volume+") },
|
||||||
{ kVolDn, "Volume-" },
|
{ kVolDn, trNOOP("Key$Volume-") },
|
||||||
{ kMute, "Mute" },
|
{ kMute, trNOOP("Key$Mute") },
|
||||||
{ kAudio, "Audio" },
|
{ kAudio, trNOOP("Key$Audio") },
|
||||||
{ kSchedule, "Schedule" },
|
{ kSchedule, trNOOP("Key$Schedule") },
|
||||||
{ kChannels, "Channels" },
|
{ kChannels, trNOOP("Key$Channels") },
|
||||||
{ kTimers, "Timers" },
|
{ kTimers, trNOOP("Key$Timers") },
|
||||||
{ kRecordings, "Recordings" },
|
{ kRecordings, trNOOP("Key$Recordings") },
|
||||||
{ kSetup, "Setup" },
|
{ kSetup, trNOOP("Key$Setup") },
|
||||||
{ kCommands, "Commands" },
|
{ kCommands, trNOOP("Key$Commands") },
|
||||||
{ kUser1, "User1" },
|
{ kUser1, trNOOP("Key$User1") },
|
||||||
{ kUser2, "User2" },
|
{ kUser2, trNOOP("Key$User2") },
|
||||||
{ kUser3, "User3" },
|
{ kUser3, trNOOP("Key$User3") },
|
||||||
{ kUser4, "User4" },
|
{ kUser4, trNOOP("Key$User4") },
|
||||||
{ kUser5, "User5" },
|
{ kUser5, trNOOP("Key$User5") },
|
||||||
{ kUser6, "User6" },
|
{ kUser6, trNOOP("Key$User6") },
|
||||||
{ kUser7, "User7" },
|
{ kUser7, trNOOP("Key$User7") },
|
||||||
{ kUser8, "User8" },
|
{ kUser8, trNOOP("Key$User8") },
|
||||||
{ kUser9, "User9" },
|
{ kUser9, trNOOP("Key$User9") },
|
||||||
{ kNone, "" },
|
{ kNone, "" },
|
||||||
{ k_Setup, "_Setup" },
|
{ k_Setup, "_Setup" },
|
||||||
{ kNone, NULL },
|
{ kNone, NULL },
|
||||||
@ -121,18 +121,29 @@ eKeys cKey::FromString(const char *Name)
|
|||||||
{
|
{
|
||||||
if (Name) {
|
if (Name) {
|
||||||
for (tKey *k = keyTable; k->name; k++) {
|
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 k->type;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return kNone;
|
return kNone;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *cKey::ToString(eKeys Key)
|
const char *cKey::ToString(eKeys Key, bool Translate)
|
||||||
{
|
{
|
||||||
for (tKey *k = keyTable; k->name; k++) {
|
for (tKey *k = keyTable; k->name; k++) {
|
||||||
if (k->type == Key)
|
if (k->type == Key) {
|
||||||
return k->name;
|
const char *n = k->name;
|
||||||
|
if (Translate)
|
||||||
|
n = tr(n);
|
||||||
|
const char *p = strchr(n, '$');
|
||||||
|
if (p)
|
||||||
|
n = p + 1;
|
||||||
|
return n;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
4
keys.h
4
keys.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: 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
|
#ifndef __KEYS_H
|
||||||
@ -100,7 +100,7 @@ public:
|
|||||||
bool Parse(char *s);
|
bool Parse(char *s);
|
||||||
bool Save(FILE *f);
|
bool Save(FILE *f);
|
||||||
static eKeys FromString(const char *Name);
|
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> {
|
class cKeys : public cConfig<cKey> {
|
||||||
|
54
menu.c
54
menu.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: menu.c 1.456 2007/06/23 09:27:13 kls Exp $
|
* $Id: menu.c 1.457 2007/08/10 13:13:13 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
@ -2153,6 +2153,7 @@ void cMenuSetupBase::Store(void)
|
|||||||
class cMenuSetupOSD : public cMenuSetupBase {
|
class cMenuSetupOSD : public cMenuSetupBase {
|
||||||
private:
|
private:
|
||||||
const char *useSmallFontTexts[3];
|
const char *useSmallFontTexts[3];
|
||||||
|
int osdLanguageIndex;
|
||||||
int numSkins;
|
int numSkins;
|
||||||
int originalSkinIndex;
|
int originalSkinIndex;
|
||||||
int skinIndex;
|
int skinIndex;
|
||||||
@ -2171,6 +2172,7 @@ public:
|
|||||||
|
|
||||||
cMenuSetupOSD::cMenuSetupOSD(void)
|
cMenuSetupOSD::cMenuSetupOSD(void)
|
||||||
{
|
{
|
||||||
|
osdLanguageIndex = I18nCurrentLanguage();
|
||||||
numSkins = Skins.Count();
|
numSkins = Skins.Count();
|
||||||
skinIndex = originalSkinIndex = Skins.Current()->Index();
|
skinIndex = originalSkinIndex = Skins.Current()->Index();
|
||||||
skinDescriptions = new const char*[numSkins];
|
skinDescriptions = new const char*[numSkins];
|
||||||
@ -2203,7 +2205,7 @@ void cMenuSetupOSD::Set(void)
|
|||||||
useSmallFontTexts[2] = tr("always");
|
useSmallFontTexts[2] = tr("always");
|
||||||
Clear();
|
Clear();
|
||||||
SetSection(tr("OSD"));
|
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));
|
Add(new cMenuEditStraItem(tr("Setup.OSD$Skin"), &skinIndex, numSkins, skinDescriptions));
|
||||||
if (themes.NumThemes())
|
if (themes.NumThemes())
|
||||||
Add(new cMenuEditStraItem(tr("Setup.OSD$Theme"), &themeIndex, themes.NumThemes(), themes.Descriptions()));
|
Add(new cMenuEditStraItem(tr("Setup.OSD$Theme"), &themeIndex, themes.NumThemes(), themes.Descriptions()));
|
||||||
@ -2237,6 +2239,7 @@ eOSState cMenuSetupOSD::ProcessKey(eKeys Key)
|
|||||||
bool ModifiedApperance = false;
|
bool ModifiedApperance = false;
|
||||||
|
|
||||||
if (Key == kOk) {
|
if (Key == kOk) {
|
||||||
|
I18nSetLocale(data.OSDLanguage);
|
||||||
if (skinIndex != originalSkinIndex) {
|
if (skinIndex != originalSkinIndex) {
|
||||||
cSkin *Skin = Skins.Get(skinIndex);
|
cSkin *Skin = Skins.Get(skinIndex);
|
||||||
if (Skin) {
|
if (Skin) {
|
||||||
@ -2273,16 +2276,17 @@ eOSState cMenuSetupOSD::ProcessKey(eKeys Key)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int osdLanguage = data.OSDLanguage;
|
|
||||||
int oldSkinIndex = skinIndex;
|
int oldSkinIndex = skinIndex;
|
||||||
|
int oldOsdLanguageIndex = osdLanguageIndex;
|
||||||
eOSState state = cMenuSetupBase::ProcessKey(Key);
|
eOSState state = cMenuSetupBase::ProcessKey(Key);
|
||||||
|
|
||||||
if (ModifiedApperance)
|
if (ModifiedApperance)
|
||||||
SetDisplayMenu();
|
SetDisplayMenu();
|
||||||
|
|
||||||
if (data.OSDLanguage != osdLanguage || skinIndex != oldSkinIndex) {
|
if (osdLanguageIndex != oldOsdLanguageIndex || skinIndex != oldSkinIndex) {
|
||||||
int OriginalOSDLanguage = Setup.OSDLanguage;
|
strn0cpy(data.OSDLanguage, I18nLocale(osdLanguageIndex), sizeof(data.OSDLanguage));
|
||||||
Setup.OSDLanguage = data.OSDLanguage;
|
int OriginalOSDLanguage = I18nCurrentLanguage();
|
||||||
|
I18nSetLanguage(osdLanguageIndex);
|
||||||
|
|
||||||
cSkin *Skin = Skins.Get(skinIndex);
|
cSkin *Skin = Skins.Get(skinIndex);
|
||||||
if (Skin) {
|
if (Skin) {
|
||||||
@ -2294,7 +2298,7 @@ eOSState cMenuSetupOSD::ProcessKey(eKeys Key)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Set();
|
Set();
|
||||||
Setup.OSDLanguage = OriginalOSDLanguage;
|
I18nSetLanguage(OriginalOSDLanguage);
|
||||||
}
|
}
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
@ -2313,7 +2317,7 @@ public:
|
|||||||
|
|
||||||
cMenuSetupEPG::cMenuSetupEPG(void)
|
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;
|
originalNumLanguages = numLanguages;
|
||||||
SetSection(tr("EPG"));
|
SetSection(tr("EPG"));
|
||||||
@ -2333,9 +2337,11 @@ void cMenuSetupEPG::Setup(void)
|
|||||||
Add(new cMenuEditBoolItem(tr("Setup.EPG$Set system time"), &data.SetSystemTime));
|
Add(new cMenuEditBoolItem(tr("Setup.EPG$Set system time"), &data.SetSystemTime));
|
||||||
if (data.SetSystemTime)
|
if (data.SetSystemTime)
|
||||||
Add(new cMenuEditTranItem(tr("Setup.EPG$Use time from transponder"), &data.TimeTransponder, &data.TimeSource));
|
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++)
|
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));
|
SetCurrent(Get(current));
|
||||||
Display();
|
Display();
|
||||||
@ -2365,7 +2371,7 @@ eOSState cMenuSetupEPG::ProcessKey(eKeys Key)
|
|||||||
if (numLanguages != oldnumLanguages || data.SetSystemTime != oldSetSystemTime) {
|
if (numLanguages != oldnumLanguages || data.SetSystemTime != oldSetSystemTime) {
|
||||||
for (int i = oldnumLanguages; i < numLanguages; i++) {
|
for (int i = oldnumLanguages; i < numLanguages; i++) {
|
||||||
data.EPGLanguages[i] = 0;
|
data.EPGLanguages[i] = 0;
|
||||||
for (int l = 0; l < I18nNumLanguages; l++) {
|
for (int l = 0; l < I18nLanguages()->Size(); l++) {
|
||||||
int k;
|
int k;
|
||||||
for (k = 0; k < oldnumLanguages; k++) {
|
for (k = 0; k < oldnumLanguages; k++) {
|
||||||
if (data.EPGLanguages[k] == l)
|
if (data.EPGLanguages[k] == l)
|
||||||
@ -2404,7 +2410,7 @@ public:
|
|||||||
|
|
||||||
cMenuSetupDVB::cMenuSetupDVB(void)
|
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;
|
originalNumAudioLanguages = numAudioLanguages;
|
||||||
videoDisplayFormatTexts[0] = tr("pan&scan");
|
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 cMenuEditStraItem(tr("Setup.DVB$Video display format"), &data.VideoDisplayFormat, 3, videoDisplayFormatTexts));
|
||||||
Add(new cMenuEditBoolItem(tr("Setup.DVB$Use Dolby Digital"), &data.UseDolbyDigital));
|
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 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++)
|
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));
|
SetCurrent(Get(current));
|
||||||
Display();
|
Display();
|
||||||
@ -2455,7 +2461,7 @@ eOSState cMenuSetupDVB::ProcessKey(eKeys Key)
|
|||||||
if (numAudioLanguages != oldnumAudioLanguages) {
|
if (numAudioLanguages != oldnumAudioLanguages) {
|
||||||
for (int i = oldnumAudioLanguages; i < numAudioLanguages; i++) {
|
for (int i = oldnumAudioLanguages; i < numAudioLanguages; i++) {
|
||||||
data.AudioLanguages[i] = 0;
|
data.AudioLanguages[i] = 0;
|
||||||
for (int l = 0; l < I18nNumLanguages; l++) {
|
for (int l = 0; l < I18nLanguages()->Size(); l++) {
|
||||||
int k;
|
int k;
|
||||||
for (k = 0; k < oldnumAudioLanguages; k++) {
|
for (k = 0; k < oldnumAudioLanguages; k++) {
|
||||||
if (data.AudioLanguages[k] == l)
|
if (data.AudioLanguages[k] == l)
|
||||||
@ -2826,7 +2832,7 @@ eOSState cMenuSetup::Restart(void)
|
|||||||
|
|
||||||
eOSState cMenuSetup::ProcessKey(eKeys Key)
|
eOSState cMenuSetup::ProcessKey(eKeys Key)
|
||||||
{
|
{
|
||||||
int osdLanguage = Setup.OSDLanguage;
|
int osdLanguage = I18nCurrentLanguage();
|
||||||
eOSState state = cOsdMenu::ProcessKey(Key);
|
eOSState state = cOsdMenu::ProcessKey(Key);
|
||||||
|
|
||||||
switch (state) {
|
switch (state) {
|
||||||
@ -2842,7 +2848,7 @@ eOSState cMenuSetup::ProcessKey(eKeys Key)
|
|||||||
case osUser10: return Restart();
|
case osUser10: return Restart();
|
||||||
default: ;
|
default: ;
|
||||||
}
|
}
|
||||||
if (Setup.OSDLanguage != osdLanguage) {
|
if (I18nCurrentLanguage() != osdLanguage) {
|
||||||
Set();
|
Set();
|
||||||
if (!HasSubMenu())
|
if (!HasSubMenu())
|
||||||
Display();
|
Display();
|
||||||
@ -2868,7 +2874,8 @@ cMenuPluginItem::cMenuPluginItem(const char *Name, int Index)
|
|||||||
|
|
||||||
// --- cMenuMain -------------------------------------------------------------
|
// --- cMenuMain -------------------------------------------------------------
|
||||||
|
|
||||||
#define STOP_RECORDING tr(" Stop recording ")
|
// TRANSLATORS: note the leading and trailing blanks!
|
||||||
|
#define STOP_RECORDING trNOOP(" Stop recording ")
|
||||||
|
|
||||||
cOsdObject *cMenuMain::pluginOsdObject = NULL;
|
cOsdObject *cMenuMain::pluginOsdObject = NULL;
|
||||||
|
|
||||||
@ -2967,6 +2974,7 @@ bool cMenuMain::Update(bool Force)
|
|||||||
replaying = NewReplaying;
|
replaying = NewReplaying;
|
||||||
// Replay control:
|
// Replay control:
|
||||||
if (replaying && !stopReplayItem)
|
if (replaying && !stopReplayItem)
|
||||||
|
// TRANSLATORS: note the leading blank!
|
||||||
Add(stopReplayItem = new cOsdItem(tr(" Stop replaying"), osStopReplay));
|
Add(stopReplayItem = new cOsdItem(tr(" Stop replaying"), osStopReplay));
|
||||||
else if (stopReplayItem && !replaying) {
|
else if (stopReplayItem && !replaying) {
|
||||||
Del(stopReplayItem->Index());
|
Del(stopReplayItem->Index());
|
||||||
@ -2980,6 +2988,7 @@ bool cMenuMain::Update(bool Force)
|
|||||||
// Editing control:
|
// Editing control:
|
||||||
bool CutterActive = cCutter::Active();
|
bool CutterActive = cCutter::Active();
|
||||||
if (CutterActive && !cancelEditingItem) {
|
if (CutterActive && !cancelEditingItem) {
|
||||||
|
// TRANSLATORS: note the leading blank!
|
||||||
Add(cancelEditingItem = new cOsdItem(tr(" Cancel editing"), osCancelEdit));
|
Add(cancelEditingItem = new cOsdItem(tr(" Cancel editing"), osCancelEdit));
|
||||||
result = true;
|
result = true;
|
||||||
}
|
}
|
||||||
@ -2999,7 +3008,7 @@ bool cMenuMain::Update(bool Force)
|
|||||||
const char *s = NULL;
|
const char *s = NULL;
|
||||||
while ((s = cRecordControls::GetInstantId(s)) != NULL) {
|
while ((s = cRecordControls::GetInstantId(s)) != NULL) {
|
||||||
char *buffer = NULL;
|
char *buffer = NULL;
|
||||||
asprintf(&buffer, "%s%s", STOP_RECORDING, s);
|
asprintf(&buffer, "%s%s", tr(STOP_RECORDING), s);
|
||||||
cOsdItem *item = new cOsdItem(osStopRecord);
|
cOsdItem *item = new cOsdItem(osStopRecord);
|
||||||
item->SetText(buffer, false);
|
item->SetText(buffer, false);
|
||||||
Add(item);
|
Add(item);
|
||||||
@ -3015,7 +3024,7 @@ bool cMenuMain::Update(bool Force)
|
|||||||
eOSState cMenuMain::ProcessKey(eKeys Key)
|
eOSState cMenuMain::ProcessKey(eKeys Key)
|
||||||
{
|
{
|
||||||
bool HadSubMenu = HasSubMenu();
|
bool HadSubMenu = HasSubMenu();
|
||||||
int osdLanguage = Setup.OSDLanguage;
|
int osdLanguage = I18nCurrentLanguage();
|
||||||
eOSState state = cOsdMenu::ProcessKey(Key);
|
eOSState state = cOsdMenu::ProcessKey(Key);
|
||||||
HadSubMenu |= HasSubMenu();
|
HadSubMenu |= HasSubMenu();
|
||||||
|
|
||||||
@ -3029,7 +3038,7 @@ eOSState cMenuMain::ProcessKey(eKeys Key)
|
|||||||
case osStopRecord: if (Interface->Confirm(tr("Stop recording?"))) {
|
case osStopRecord: if (Interface->Confirm(tr("Stop recording?"))) {
|
||||||
cOsdItem *item = Get(Current());
|
cOsdItem *item = Get(Current());
|
||||||
if (item) {
|
if (item) {
|
||||||
cRecordControls::Stop(item->Text() + strlen(STOP_RECORDING));
|
cRecordControls::Stop(item->Text() + strlen(tr(STOP_RECORDING)));
|
||||||
return osEnd;
|
return osEnd;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3080,7 +3089,7 @@ eOSState cMenuMain::ProcessKey(eKeys Key)
|
|||||||
if (!HasSubMenu() && Update(HadSubMenu))
|
if (!HasSubMenu() && Update(HadSubMenu))
|
||||||
Display();
|
Display();
|
||||||
if (Key != kNone) {
|
if (Key != kNone) {
|
||||||
if (Setup.OSDLanguage != osdLanguage) {
|
if (I18nCurrentLanguage() != osdLanguage) {
|
||||||
Set();
|
Set();
|
||||||
if (!HasSubMenu())
|
if (!HasSubMenu())
|
||||||
Display();
|
Display();
|
||||||
@ -4026,6 +4035,7 @@ bool cReplayControl::ShowProgress(bool Initial)
|
|||||||
void cReplayControl::TimeSearchDisplay(void)
|
void cReplayControl::TimeSearchDisplay(void)
|
||||||
{
|
{
|
||||||
char buf[64];
|
char buf[64];
|
||||||
|
// TRANSLATORS: note the trailing blank!
|
||||||
strcpy(buf, tr("Jump: "));
|
strcpy(buf, tr("Jump: "));
|
||||||
int len = strlen(buf);
|
int len = strlen(buf);
|
||||||
char h10 = '0' + (timeSearchTime >> 24);
|
char h10 = '0' + (timeSearchTime >> 24);
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: 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"
|
#include "menuitems.h"
|
||||||
@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
#define AUTO_ADVANCE_TIMEOUT 1500 // ms before auto advance when entering characters via numeric keys
|
#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 ---------------------------------------------------------
|
// --- cMenuEditItem ---------------------------------------------------------
|
||||||
|
|
||||||
@ -316,7 +316,7 @@ void cMenuEditStrItem::LeaveEditMode(bool SaveValue)
|
|||||||
void cMenuEditStrItem::SetHelpKeys(void)
|
void cMenuEditStrItem::SetHelpKeys(void)
|
||||||
{
|
{
|
||||||
if (InEditMode())
|
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
|
else
|
||||||
cSkinDisplay::Current()->SetButtons(NULL);
|
cSkinDisplay::Current()->SetButtons(NULL);
|
||||||
}
|
}
|
||||||
|
33
newplugin
33
newplugin
@ -12,7 +12,7 @@
|
|||||||
# See the main source file 'vdr.c' for copyright information and
|
# See the main source file 'vdr.c' for copyright information and
|
||||||
# how to reach the author.
|
# how to reach the author.
|
||||||
#
|
#
|
||||||
# $Id: newplugin 1.32 2007/04/28 14:46:39 kls Exp $
|
# $Id: newplugin 1.33 2007/08/10 15:54:46 kls Exp $
|
||||||
|
|
||||||
$PLUGIN_NAME = $ARGV[0] || die "Usage: newplugin <name>\n";
|
$PLUGIN_NAME = $ARGV[0] || die "Usage: newplugin <name>\n";
|
||||||
|
|
||||||
@ -109,7 +109,7 @@ OBJS = \$(PLUGIN).o
|
|||||||
%.o: %.c
|
%.o: %.c
|
||||||
\$(CXX) \$(CXXFLAGS) -c \$(DEFINES) \$(INCLUDES) \$<
|
\$(CXX) \$(CXXFLAGS) -c \$(DEFINES) \$(INCLUDES) \$<
|
||||||
|
|
||||||
# Dependencies:
|
### Dependencies:
|
||||||
|
|
||||||
MAKEDEP = \$(CXX) -MM -MG
|
MAKEDEP = \$(CXX) -MM -MG
|
||||||
DEPFILE = .dependencies
|
DEPFILE = .dependencies
|
||||||
@ -118,9 +118,34 @@ DEPFILE = .dependencies
|
|||||||
|
|
||||||
-include \$(DEPFILE)
|
-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:
|
### Targets:
|
||||||
|
|
||||||
all: libvdr-\$(PLUGIN).so
|
all: libvdr-\$(PLUGIN).so i18n
|
||||||
|
|
||||||
libvdr-\$(PLUGIN).so: \$(OBJS)
|
libvdr-\$(PLUGIN).so: \$(OBJS)
|
||||||
\$(CXX) \$(CXXFLAGS) -shared \$(OBJS) -o \$\@
|
\$(CXX) \$(CXXFLAGS) -shared \$(OBJS) -o \$\@
|
||||||
@ -135,7 +160,7 @@ dist: clean
|
|||||||
\@echo Distribution package created as \$(PACKAGE).tgz
|
\@echo Distribution package created as \$(PACKAGE).tgz
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
\@-rm -f \$(OBJS) \$(DEPFILE) *.so *.tgz core* *~
|
\@-rm -f \$(OBJS) \$(DEPFILE) *.so *.tgz core* *~ \$(PODIR)/*.mo \$(PODIR)/*.pot
|
||||||
};
|
};
|
||||||
|
|
||||||
$MAIN = qq
|
$MAIN = qq
|
||||||
|
14
plugin.c
14
plugin.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: 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"
|
#include "plugin.h"
|
||||||
@ -35,12 +35,12 @@ cPlugin::cPlugin(void)
|
|||||||
|
|
||||||
cPlugin::~cPlugin()
|
cPlugin::~cPlugin()
|
||||||
{
|
{
|
||||||
I18nRegister(NULL, Name());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void cPlugin::SetName(const char *s)
|
void cPlugin::SetName(const char *s)
|
||||||
{
|
{
|
||||||
name = s;
|
name = s;
|
||||||
|
I18nRegister(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *cPlugin::CommandLineHelp(void)
|
const char *cPlugin::CommandLineHelp(void)
|
||||||
@ -130,9 +130,9 @@ cString cPlugin::SVDRPCommand(const char *Command, const char *Option, int &Repl
|
|||||||
return NULL;
|
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)
|
void cPlugin::SetConfigDirectory(const char *Dir)
|
||||||
@ -338,10 +338,7 @@ bool cPluginManager::InitializePlugins(void)
|
|||||||
for (cDll *dll = dlls.First(); dll; dll = dlls.Next(dll)) {
|
for (cDll *dll = dlls.First(); dll; dll = dlls.Next(dll)) {
|
||||||
cPlugin *p = dll->Plugin();
|
cPlugin *p = dll->Plugin();
|
||||||
if (p) {
|
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());
|
isyslog("initializing plugin: %s (%s): %s", p->Name(), p->Version(), p->Description());
|
||||||
Setup.OSDLanguage = Language;
|
|
||||||
if (!p->Initialize())
|
if (!p->Initialize())
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -354,10 +351,7 @@ bool cPluginManager::StartPlugins(void)
|
|||||||
for (cDll *dll = dlls.First(); dll; dll = dlls.Next(dll)) {
|
for (cDll *dll = dlls.First(); dll; dll = dlls.Next(dll)) {
|
||||||
cPlugin *p = dll->Plugin();
|
cPlugin *p = dll->Plugin();
|
||||||
if (p) {
|
if (p) {
|
||||||
int Language = Setup.OSDLanguage;
|
|
||||||
Setup.OSDLanguage = 0; // the i18n texts are only available _after_ Start()
|
|
||||||
isyslog("starting plugin: %s", p->Name());
|
isyslog("starting plugin: %s", p->Name());
|
||||||
Setup.OSDLanguage = Language;
|
|
||||||
if (!p->Start())
|
if (!p->Start())
|
||||||
return false;
|
return false;
|
||||||
p->started = true;
|
p->started = true;
|
||||||
|
4
plugin.h
4
plugin.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: 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
|
#ifndef __PLUGIN_H
|
||||||
@ -51,7 +51,7 @@ public:
|
|||||||
void SetupStore(const char *Name, const char *Value = NULL);
|
void SetupStore(const char *Name, const char *Value = NULL);
|
||||||
void SetupStore(const char *Name, int Value);
|
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 bool Service(const char *Id, void *Data = NULL);
|
||||||
virtual const char **SVDRPHelpPages(void);
|
virtual const char **SVDRPHelpPages(void);
|
||||||
|
1272
po/ca_ES.po
Normal file
1272
po/ca_ES.po
Normal file
File diff suppressed because it is too large
Load Diff
1270
po/cs_CZ.po
Normal file
1270
po/cs_CZ.po
Normal file
File diff suppressed because it is too large
Load Diff
1270
po/da_DK.po
Normal file
1270
po/da_DK.po
Normal file
File diff suppressed because it is too large
Load Diff
1270
po/de_DE.po
Normal file
1270
po/de_DE.po
Normal file
File diff suppressed because it is too large
Load Diff
1270
po/el_GR.po
Normal file
1270
po/el_GR.po
Normal file
File diff suppressed because it is too large
Load Diff
1270
po/es_ES.po
Normal file
1270
po/es_ES.po
Normal file
File diff suppressed because it is too large
Load Diff
1270
po/et_EE.po
Normal file
1270
po/et_EE.po
Normal file
File diff suppressed because it is too large
Load Diff
1273
po/fi_FI.po
Normal file
1273
po/fi_FI.po
Normal file
File diff suppressed because it is too large
Load Diff
1273
po/fr_FR.po
Normal file
1273
po/fr_FR.po
Normal file
File diff suppressed because it is too large
Load Diff
1271
po/hr_HR.po
Normal file
1271
po/hr_HR.po
Normal file
File diff suppressed because it is too large
Load Diff
1271
po/hu_HU.po
Normal file
1271
po/hu_HU.po
Normal file
File diff suppressed because it is too large
Load Diff
1272
po/it_IT.po
Normal file
1272
po/it_IT.po
Normal file
File diff suppressed because it is too large
Load Diff
1272
po/nl_NL.po
Normal file
1272
po/nl_NL.po
Normal file
File diff suppressed because it is too large
Load Diff
1271
po/nn_NO.po
Normal file
1271
po/nn_NO.po
Normal file
File diff suppressed because it is too large
Load Diff
1270
po/pl_PL.po
Normal file
1270
po/pl_PL.po
Normal file
File diff suppressed because it is too large
Load Diff
1270
po/pt_PT.po
Normal file
1270
po/pt_PT.po
Normal file
File diff suppressed because it is too large
Load Diff
1271
po/ro_RO.po
Normal file
1271
po/ro_RO.po
Normal file
File diff suppressed because it is too large
Load Diff
1270
po/ru_RU.po
Normal file
1270
po/ru_RU.po
Normal file
File diff suppressed because it is too large
Load Diff
1271
po/sl_SI.po
Normal file
1271
po/sl_SI.po
Normal file
File diff suppressed because it is too large
Load Diff
1271
po/sv_SE.po
Normal file
1271
po/sv_SE.po
Normal file
File diff suppressed because it is too large
Load Diff
1270
po/tr_TR.po
Normal file
1270
po/tr_TR.po
Normal file
File diff suppressed because it is too large
Load Diff
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: 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"
|
#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);
|
osd->DrawText(0, 0, tr("Key$Mute"), Theme.Color(clrVolumePrompt), Theme.Color(clrBackground), font);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
// TRANSLATORS: note the trailing blank!
|
||||||
const char *Prompt = tr("Volume ");
|
const char *Prompt = tr("Volume ");
|
||||||
int l = font->Width(Prompt);
|
int l = font->Width(Prompt);
|
||||||
int p = (osd->Width() - l) * Current / Total;
|
int p = (osd->Width() - l) * Current / Total;
|
||||||
|
9
themes.c
9
themes.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: 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"
|
#include "themes.h"
|
||||||
@ -18,7 +18,6 @@
|
|||||||
cTheme::cTheme(void)
|
cTheme::cTheme(void)
|
||||||
{
|
{
|
||||||
name = strdup("default");
|
name = strdup("default");
|
||||||
memset(descriptions, 0, sizeof(descriptions));
|
|
||||||
memset(colorNames, 0, sizeof(colorNames));
|
memset(colorNames, 0, sizeof(colorNames));
|
||||||
memset(colorValues, 0, sizeof(colorValues));
|
memset(colorValues, 0, sizeof(colorValues));
|
||||||
descriptions[0] = strdup("Default");
|
descriptions[0] = strdup("Default");
|
||||||
@ -27,8 +26,6 @@ cTheme::cTheme(void)
|
|||||||
cTheme::~cTheme()
|
cTheme::~cTheme()
|
||||||
{
|
{
|
||||||
free(name);
|
free(name);
|
||||||
for (int i = 0; i < I18nNumLanguages; i++)
|
|
||||||
free(descriptions[i]);
|
|
||||||
for (int i = 0; i < MaxThemeColors; i++)
|
for (int i = 0; i < MaxThemeColors; i++)
|
||||||
free(colorNames[i]);
|
free(colorNames[i]);
|
||||||
}
|
}
|
||||||
@ -77,7 +74,7 @@ bool cTheme::FileNameOk(const char *FileName, bool SetName)
|
|||||||
|
|
||||||
const char *cTheme::Description(void)
|
const char *cTheme::Description(void)
|
||||||
{
|
{
|
||||||
char *s = descriptions[Setup.OSDLanguage];
|
char *s = descriptions[I18nCurrentLanguage()];
|
||||||
if (!s)
|
if (!s)
|
||||||
s = descriptions[0];
|
s = descriptions[0];
|
||||||
return s ? s : name;
|
return s ? s : name;
|
||||||
@ -167,7 +164,7 @@ bool cTheme::Save(const char *FileName)
|
|||||||
bool result = true;
|
bool result = true;
|
||||||
cSafeFile f(FileName);
|
cSafeFile f(FileName);
|
||||||
if (f.Open()) {
|
if (f.Open()) {
|
||||||
for (int i = 0; i < I18nNumLanguages; i++) {
|
for (int i = 0; i < I18nLanguages()->Size(); i++) {
|
||||||
if (descriptions[i])
|
if (descriptions[i])
|
||||||
fprintf(f, "Description%s%.*s = %s\n", i ? "." : "", 3, i ? I18nLanguageCode(i) : "", descriptions[i]);
|
fprintf(f, "Description%s%.*s = %s\n", i ? "." : "", 3, i ? I18nLanguageCode(i) : "", descriptions[i]);
|
||||||
}
|
}
|
||||||
|
5
themes.h
5
themes.h
@ -4,13 +4,14 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: 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
|
#ifndef __THEMES_H
|
||||||
#define __THEMES_H
|
#define __THEMES_H
|
||||||
|
|
||||||
#include "i18n.h"
|
#include "i18n.h"
|
||||||
|
#include "tools.h"
|
||||||
#include "osd.h"
|
#include "osd.h"
|
||||||
|
|
||||||
class cTheme {
|
class cTheme {
|
||||||
@ -18,7 +19,7 @@ public:
|
|||||||
enum { MaxThemeColors = 128 };
|
enum { MaxThemeColors = 128 };
|
||||||
private:
|
private:
|
||||||
char *name;
|
char *name;
|
||||||
char *descriptions[I18nNumLanguages];
|
cStringList descriptions;
|
||||||
char *colorNames[MaxThemeColors];
|
char *colorNames[MaxThemeColors];
|
||||||
tColor colorValues[MaxThemeColors];
|
tColor colorValues[MaxThemeColors];
|
||||||
bool FileNameOk(const char *FileName, bool SetName = false);
|
bool FileNameOk(const char *FileName, bool SetName = false);
|
||||||
|
5
timers.c
5
timers.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: 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"
|
#include "timers.h"
|
||||||
@ -218,7 +218,8 @@ cString cTimer::PrintDay(time_t Day, int WeekDays, bool SingleByteChars)
|
|||||||
char buffer[DAYBUFFERSIZE];
|
char buffer[DAYBUFFERSIZE];
|
||||||
char *b = buffer;
|
char *b = buffer;
|
||||||
if (WeekDays) {
|
if (WeekDays) {
|
||||||
const char *w = "MTWTFSS";
|
// TRANSLATORS: the first character of each weekday, beginning with monday
|
||||||
|
const char *w = trNOOP("MTWTFSS");
|
||||||
if (!SingleByteChars)
|
if (!SingleByteChars)
|
||||||
w = tr(w);
|
w = tr(w);
|
||||||
while (*w) {
|
while (*w) {
|
||||||
|
19
tools.c
19
tools.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: 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"
|
#include "tools.h"
|
||||||
@ -852,6 +852,7 @@ cString WeekDayName(int WeekDay)
|
|||||||
char buffer[16];
|
char buffer[16];
|
||||||
WeekDay = WeekDay == 0 ? 6 : WeekDay - 1; // we start with Monday==0!
|
WeekDay = WeekDay == 0 ? 6 : WeekDay - 1; // we start with Monday==0!
|
||||||
if (0 <= WeekDay && WeekDay <= 6) {
|
if (0 <= WeekDay && WeekDay <= 6) {
|
||||||
|
// TRANSLATORS: abbreviated weekdays, beginning with monday (must all be 3 letters!)
|
||||||
const char *day = tr("MonTueWedThuFriSatSun");
|
const char *day = tr("MonTueWedThuFriSatSun");
|
||||||
day += Utf8SymChars(day, WeekDay * 3);
|
day += Utf8SymChars(day, WeekDay * 3);
|
||||||
strn0cpy(buffer, day, min(Utf8SymChars(day, 3) + 1, int(sizeof(buffer))));
|
strn0cpy(buffer, day, min(Utf8SymChars(day, 3) + 1, int(sizeof(buffer))));
|
||||||
@ -1178,12 +1179,12 @@ void cStringList::Clear(void)
|
|||||||
// --- cFileNameList ---------------------------------------------------------
|
// --- cFileNameList ---------------------------------------------------------
|
||||||
|
|
||||||
// TODO better GetFileNames(const char *Directory, cStringList *List)?
|
// 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();
|
Clear();
|
||||||
if (Directory) {
|
if (Directory) {
|
||||||
@ -1191,9 +1192,17 @@ bool cFileNameList::Load(const char *Directory)
|
|||||||
struct dirent *e;
|
struct dirent *e;
|
||||||
if (d.Ok()) {
|
if (d.Ok()) {
|
||||||
while ((e = d.Next()) != NULL) {
|
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));
|
Append(strdup(e->d_name));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
Sort();
|
Sort();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
6
tools.h
6
tools.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: tools.h 1.106 2007/07/28 12:54:49 kls Exp $
|
* $Id: tools.h 1.107 2007/08/05 12:11:52 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __TOOLS_H
|
#ifndef __TOOLS_H
|
||||||
@ -487,8 +487,8 @@ public:
|
|||||||
|
|
||||||
class cFileNameList : public cStringList {
|
class cFileNameList : public cStringList {
|
||||||
public:
|
public:
|
||||||
cFileNameList(const char *Directory = NULL);
|
cFileNameList(const char *Directory = NULL, bool DirsOnly = false);
|
||||||
bool Load(const char *Directory);
|
bool Load(const char *Directory, bool DirsOnly = false);
|
||||||
};
|
};
|
||||||
|
|
||||||
class cHashObject : public cListObject {
|
class cHashObject : public cListObject {
|
||||||
|
7
vdr.5
7
vdr.5
@ -8,7 +8,7 @@
|
|||||||
.\" License as specified in the file COPYING that comes with the
|
.\" License as specified in the file COPYING that comes with the
|
||||||
.\" vdr distribution.
|
.\" 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"
|
.TH vdr 5 "07 Jan 2007" "1.4.5" "Video Disk Recorder Files"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
@ -542,9 +542,10 @@ you can provide language specific descriptions as
|
|||||||
.br
|
.br
|
||||||
\fBDescription.ger = Blaut\(:one\fR
|
\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
|
"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
|
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.
|
given in the theme's file name) will be used.
|
||||||
.SS AUDIO/VIDEO DATA
|
.SS AUDIO/VIDEO DATA
|
||||||
|
6
vdr.c
6
vdr.c
@ -22,7 +22,7 @@
|
|||||||
*
|
*
|
||||||
* The project's page is at http://www.cadsoft.de/vdr
|
* 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.295 2007/08/05 09:53:20 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
@ -511,6 +511,10 @@ int main(int argc, char *argv[])
|
|||||||
cCharSetConv::SetSystemCharacterTable(CodeSet);
|
cCharSetConv::SetSystemCharacterTable(CodeSet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Initialize internationalization:
|
||||||
|
|
||||||
|
I18nInitialize();
|
||||||
|
|
||||||
// Main program loop variables - need to be here to have them initialized before any EXIT():
|
// Main program loop variables - need to be here to have them initialized before any EXIT():
|
||||||
|
|
||||||
cOsdObject *Menu = NULL;
|
cOsdObject *Menu = NULL;
|
||||||
|
Loading…
Reference in New Issue
Block a user