<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.tuxbox-neutrino.org/w/index.php?action=history&amp;feed=atom&amp;title=Dreambox%3AEnigma2%3APlugin-Erstellung</id>
	<title>Dreambox:Enigma2:Plugin-Erstellung - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.tuxbox-neutrino.org/w/index.php?action=history&amp;feed=atom&amp;title=Dreambox%3AEnigma2%3APlugin-Erstellung"/>
	<link rel="alternate" type="text/html" href="https://wiki.tuxbox-neutrino.org/w/index.php?title=Dreambox:Enigma2:Plugin-Erstellung&amp;action=history"/>
	<updated>2026-04-05T18:48:04Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in TuxBoxWIKI</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.tuxbox-neutrino.org/w/index.php?title=Dreambox:Enigma2:Plugin-Erstellung&amp;diff=17702&amp;oldid=prev</id>
		<title>Dbt: zu  Archiv Development  verschoben</title>
		<link rel="alternate" type="text/html" href="https://wiki.tuxbox-neutrino.org/w/index.php?title=Dreambox:Enigma2:Plugin-Erstellung&amp;diff=17702&amp;oldid=prev"/>
		<updated>2018-05-16T11:07:27Z</updated>

		<summary type="html">&lt;p&gt;zu  Archiv Development  verschoben&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 16. Mai 2018, 13:07 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Zeile 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Archiv]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Register]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Register]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Software]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Software]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Enigma2]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Enigma2]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Kategorie&lt;/del&gt;:Development]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Category:Archiv&lt;/ins&gt;:Development]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Dreambox]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Dreambox]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;__TOC__&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;__TOC__&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Dbt</name></author>
	</entry>
	<entry>
		<id>https://wiki.tuxbox-neutrino.org/w/index.php?title=Dreambox:Enigma2:Plugin-Erstellung&amp;diff=17631&amp;oldid=prev</id>
		<title>Dbt: archiviert</title>
		<link rel="alternate" type="text/html" href="https://wiki.tuxbox-neutrino.org/w/index.php?title=Dreambox:Enigma2:Plugin-Erstellung&amp;diff=17631&amp;oldid=prev"/>
		<updated>2018-05-04T17:50:11Z</updated>

		<summary type="html">&lt;p&gt;archiviert&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 4. Mai 2018, 19:50 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Zeile 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Archiv]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Register]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Register]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Software]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Software]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Dbt</name></author>
	</entry>
	<entry>
		<id>https://wiki.tuxbox-neutrino.org/w/index.php?title=Dreambox:Enigma2:Plugin-Erstellung&amp;diff=15619&amp;oldid=prev</id>
		<title>Dbt: hat „Enigma2:Plugin-Erstellung“ nach „Dreambox:Enigma2:Plugin-Erstellung“ verschoben</title>
		<link rel="alternate" type="text/html" href="https://wiki.tuxbox-neutrino.org/w/index.php?title=Dreambox:Enigma2:Plugin-Erstellung&amp;diff=15619&amp;oldid=prev"/>
		<updated>2012-04-09T14:18:55Z</updated>

		<summary type="html">&lt;p&gt;hat „&lt;a href=&quot;/wiki/Enigma2:Plugin-Erstellung&quot; class=&quot;mw-redirect&quot; title=&quot;Enigma2:Plugin-Erstellung&quot;&gt;Enigma2:Plugin-Erstellung&lt;/a&gt;“ nach „&lt;a href=&quot;/wiki/Dreambox:Enigma2:Plugin-Erstellung&quot; title=&quot;Dreambox:Enigma2:Plugin-Erstellung&quot;&gt;Dreambox:Enigma2:Plugin-Erstellung&lt;/a&gt;“ verschoben&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 9. April 2012, 16:18 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;de&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(kein Unterschied)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Dbt</name></author>
	</entry>
	<entry>
		<id>https://wiki.tuxbox-neutrino.org/w/index.php?title=Dreambox:Enigma2:Plugin-Erstellung&amp;diff=11540&amp;oldid=prev</id>
		<title>Dbt: 1 Versionen</title>
		<link rel="alternate" type="text/html" href="https://wiki.tuxbox-neutrino.org/w/index.php?title=Dreambox:Enigma2:Plugin-Erstellung&amp;diff=11540&amp;oldid=prev"/>
		<updated>2009-07-04T11:26:36Z</updated>

		<summary type="html">&lt;p&gt;1 Versionen&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 4. Juli 2009, 13:26 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;de&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(kein Unterschied)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Dbt</name></author>
	</entry>
	<entry>
		<id>https://wiki.tuxbox-neutrino.org/w/index.php?title=Dreambox:Enigma2:Plugin-Erstellung&amp;diff=11539&amp;oldid=prev</id>
		<title>Dbt am 13. Februar 2009 um 15:01 Uhr</title>
		<link rel="alternate" type="text/html" href="https://wiki.tuxbox-neutrino.org/w/index.php?title=Dreambox:Enigma2:Plugin-Erstellung&amp;diff=11539&amp;oldid=prev"/>
		<updated>2009-02-13T15:01:17Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Kategorie:Register]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Enigma2]]&lt;br /&gt;
[[Kategorie:Development]]&lt;br /&gt;
[[Kategorie:Dreambox]]&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich liegen die Plugins in /usr/lib/enigma2/python/Plugins. Dort dann halt entsprechend den vorhandenen Unterverzeichnissen ein Verzeichnis für das neue Plugin anlegen. &lt;br /&gt;
&lt;br /&gt;
=Voraussetzung und Erstellung=&lt;br /&gt;
&lt;br /&gt;
In dem Verzeichnis müssen sein:&lt;br /&gt;
* __init__.py (kann leer sein. wird aber benötigt, da Python das Verzeichnis sonst nicht als Modul erkennt)&lt;br /&gt;
* plugin.py (das Hauptskript für jedes Plugin)&lt;br /&gt;
&lt;br /&gt;
plugin.py muss enthalten:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 from Plugins.Plugin import PluginDescriptor # importiert den PluginDescriptor (s.u.)&amp;lt;br&amp;gt;&lt;br /&gt;
 # diese Funktion wird aufgerufen und gibt einen einzelnen PluginDescriptor oder eine Liste von PluginDescriptoren zurück&lt;br /&gt;
 # das **kwargs einfach ignorieren! (näheres dazu in docs/PLUGINS im enigma-baum) ***&lt;br /&gt;
 def Plugins(**kwargs):&lt;br /&gt;
   # Beispiel für ein einzelnes Plugin, welches im Plugin-Menü erscheint&lt;br /&gt;
   return PluginDescriptor(name=&amp;quot;File-Manager&amp;quot;, description=&amp;quot;Let's you view/edit files in your Dreambox&amp;quot;, where = &lt;br /&gt;
   PluginDescriptor.WHERE_PLUGINMENU, fnc=main)&lt;br /&gt;
   &lt;br /&gt;
   # Beispiel für eine Liste von Plugins, das erste erscheint im Plugin-Menü, das zweite wird beim E2-Start aufgerufen (Autostart)&lt;br /&gt;
   return [PluginDescriptor(name=&amp;quot;Plugin1&amp;quot;, description=&amp;quot;Example Plugin&amp;quot;, where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main),&lt;br /&gt;
   PluginDescriptor(where = PluginDescriptor.WHERE_AUTOSTART, fnc = autostart) ]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Filemanager ruft dann, wenn man auf den Menüpunkt &amp;quot;File-Manager&amp;quot; im Plugin-Menü geht, die Funktion &amp;quot;main&amp;quot; auf. Die muss so aussehen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 def main(session, **kwargs): # **kwargs einfach ignorieren, s.o. *** &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der session-Parameter enthält dann die Session, welche man z.B. zum Erstellen von Screen braucht.&lt;br /&gt;
&lt;br /&gt;
Will man dann in &amp;lt;code&amp;gt; einen Screen aufrufen, macht man das so:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 session.open(&amp;lt;screen&amp;gt;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
So ein Screen ist eigentlich immer recht einheitlich aufgebaut, Beispiel Filemanager:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 class FileManager(Screen):&lt;br /&gt;
 	skin = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
 		&amp;lt;screen position=&amp;quot;100,100&amp;quot; size=&amp;quot;550,400&amp;quot; title=&amp;quot;Test&amp;quot; &amp;gt;&lt;br /&gt;
 			&amp;lt;widget name=&amp;quot;list&amp;quot; position=&amp;quot;10,0&amp;quot; size=&amp;quot;190,250&amp;quot; scrollbarMode=&amp;quot;showOnDemand&amp;quot; /&amp;gt;&lt;br /&gt;
 			&amp;lt;widget name=&amp;quot;pixmap&amp;quot; position=&amp;quot;200,0&amp;quot; size=&amp;quot;190,250&amp;quot; alphatest=&amp;quot;on&amp;quot; /&amp;gt;&lt;br /&gt;
 		&amp;lt;/screen&amp;gt;&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
 	def __init__(self, session, args = None):&lt;br /&gt;
 		Screen.__init__(self, session)&amp;lt;br&amp;gt;&lt;br /&gt;
 		self[&amp;quot;list&amp;quot;] = FileList(&amp;quot;/&amp;quot;, matchingPattern = &amp;quot;^.*\.(png|avi|mp3|mpeg|ts)&amp;quot;)&lt;br /&gt;
 		self[&amp;quot;pixmap&amp;quot;] = Pixmap()&amp;lt;br&amp;gt;		&lt;br /&gt;
 		self[&amp;quot;actions&amp;quot;] = NumberActionMap([&amp;quot;WizardActions&amp;quot;, &amp;quot;InputActions&amp;quot;],&lt;br /&gt;
 		{&lt;br /&gt;
 			&amp;quot;ok&amp;quot;: self.ok,&lt;br /&gt;
 			&amp;quot;back&amp;quot;: self.close,&lt;br /&gt;
 #			&amp;quot;left&amp;quot;: self.keyLeft,&lt;br /&gt;
 #			&amp;quot;right&amp;quot;: self.keyRight,&lt;br /&gt;
 			&amp;quot;1&amp;quot;: self.keyNumberGlobal,&lt;br /&gt;
 			&amp;quot;2&amp;quot;: self.keyNumberGlobal,&lt;br /&gt;
 			&amp;quot;3&amp;quot;: self.keyNumberGlobal,&lt;br /&gt;
 			&amp;quot;4&amp;quot;: self.keyNumberGlobal,&lt;br /&gt;
 			&amp;quot;5&amp;quot;: self.keyNumberGlobal,&lt;br /&gt;
 			&amp;quot;6&amp;quot;: self.keyNumberGlobal,&lt;br /&gt;
 			&amp;quot;7&amp;quot;: self.keyNumberGlobal,&lt;br /&gt;
 			&amp;quot;8&amp;quot;: self.keyNumberGlobal,&lt;br /&gt;
 			&amp;quot;9&amp;quot;: self.keyNumberGlobal,&lt;br /&gt;
 			&amp;quot;0&amp;quot;: self.keyNumberGlobal&lt;br /&gt;
 		}, -1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
skin = ... definiert einen lokalen Skin in diesem Plugin. Die Syntax entspricht der in skin.xml, bis auf den Screen-Namen, der wird hier nicht benötigt. Dann haben wir die Konstruktor-Methode __init__, welche dann den Screen-Konstruktor mit gleichen Parametern aufruft, da FileManager von Skin abgeleitet ist. Die Widgets, die wir im Skin definiert haben, sind noch leer. Diese werden dann in den nächsten Zeilen mit Funktion gefüllt:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 self[&amp;quot;pixmap&amp;quot;] = Pixmap() &amp;lt;-- das erstellt zum Beispiel ein Bild&lt;br /&gt;
 self[&amp;quot;list&amp;quot;] = FileList(&amp;quot;/&amp;quot;, matchingPattern = &amp;quot;^.*\.(png|avi|mp3|mpeg|ts)&amp;quot;) &amp;lt;-- das eine in der gleichen Datei definierte&lt;br /&gt;
 FileListe.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Als nächstes wird noch angegeben, was bei Tastendrücken passieren soll. Dafür sind die Actionmaps da.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 self[&amp;quot;actions&amp;quot;] = NumberActionMap([&amp;quot;WizardActions&amp;quot;, &amp;quot;InputActions&amp;quot;] &amp;lt;-- wir benutzen aus der keymap.xml-Datei die Abschnitte&lt;br /&gt;
 &amp;quot;WizardActions&amp;quot; und &amp;quot;InputAction&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Für die in der keymap.xml definierten Tastendrücke wird dann im folgenden angegeben, welche Methode der Klasse bei welchem Tastendruck aufgerufen werden soll. Also z.B. &amp;quot;ok&amp;quot;: self.ok ruft die Methode 'ok' auf, wenn man auf die Taste, die in der Keymap.xml als Action &amp;quot;ok&amp;quot; hat, gedrückt wird.&lt;br /&gt;
&lt;br /&gt;
=Unterstützung von Lokalisierungen in einem Plugin=&lt;br /&gt;
&lt;br /&gt;
Um ein Plugin in alle möglichen Sprachen übersetzbar zu machen müssen als alle Strings von der Funktion _() umgeben werden.&lt;br /&gt;
Um also z.B. den Titel des o.g. Filebrowsers übersetzbar zu machenm müsste man den code wie folgt gestalten:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 	skin = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
 		&amp;lt;screen position=&amp;quot;100,100&amp;quot; size=&amp;quot;550,400&amp;quot; title=&amp;quot;%s&amp;quot; &amp;gt;&lt;br /&gt;
 			&amp;lt;widget name=&amp;quot;list&amp;quot; position=&amp;quot;10,0&amp;quot; size=&amp;quot;190,250&amp;quot; scrollbarMode=&amp;quot;showOnDemand&amp;quot; /&amp;gt;&lt;br /&gt;
 			&amp;lt;widget name=&amp;quot;pixmap&amp;quot; position=&amp;quot;200,0&amp;quot; size=&amp;quot;190,250&amp;quot; alphatest=&amp;quot;on&amp;quot; /&amp;gt;&lt;br /&gt;
 		&amp;lt;/screen&amp;gt;&amp;quot;&amp;quot;&amp;quot; %(_(&amp;quot;test&amp;quot;))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Da die Funktion _() in Plugins jedoch leider nicht umittelbar zur Verfügung steht müssen wir die __init__.py unseres Plugins wie folgt ergänzen&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 from Components.Language import language&lt;br /&gt;
 from Tools.Directories import resolveFilename, SCOPE_PLUGINS&lt;br /&gt;
 import os,gettext&lt;br /&gt;
 &lt;br /&gt;
 PluginLanguageDomain = &amp;quot;FileBrowser&amp;quot;&lt;br /&gt;
 PluginLanguagePath = &amp;quot;Extensions/FileBrowser/locale&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 def localeInit():&lt;br /&gt;
    lang = language.getLanguage()[:2] # getLanguage returns e.g. &amp;quot;fi_FI&amp;quot; for &amp;quot;language_country&amp;quot;&lt;br /&gt;
    os.environ[&amp;quot;LANGUAGE&amp;quot;] = lang # Enigma doesn't set this (or LC_ALL, LC_MESSAGES, LANG). gettext needs it!&lt;br /&gt;
    print &amp;quot;[WebInterface] set language to &amp;quot;, lang&lt;br /&gt;
    gettext.bindtextdomain(PluginLanguageDomain, resolveFilename(SCOPE_PLUGINS, PluginLanguagePath))&lt;br /&gt;
 &lt;br /&gt;
 def _(txt):&lt;br /&gt;
    t = gettext.dgettext(PluginLanguageDomain, txt)&lt;br /&gt;
    if t == txt:&lt;br /&gt;
        print &amp;quot;[%s] fallback to default translation for %s&amp;quot; %(PluginLanguageDomain, txt)&lt;br /&gt;
        t = gettext.gettext(txt)&lt;br /&gt;
    return t&lt;br /&gt;
 &lt;br /&gt;
 localeInit()&lt;br /&gt;
 language.addCallback(localeInit)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Alles noch fehlt ist folgender Import in allen Dateien die Übersetzungen unterstützen sollen: 	&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 from __init__ import _&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vorrausetzung für die Funktio der neu definierten _() Funktion ist dass die kompilierten gettext Sprachdateien sich in dem in der Variablen &amp;quot;PluginLanguagePath&amp;quot; angegebenen Pfad befinden.&lt;br /&gt;
&lt;br /&gt;
Die notwendigen .po und die .pot - also das Template für neue Übersetzungen - Dateien kommen am besten in ein eigenes verzeichnis namens &amp;quot;po&amp;quot;. Erstellen kann man die enstprechenden Files z.B. mit PoEdit.&lt;br /&gt;
&lt;br /&gt;
Sollen die Sprachdateien mithilfe der [[Openembedded]] Toolchain kompiliert werden so ist noch ein entsprechendes Makefile notwendig.&lt;br /&gt;
Dieses kann wie folgt aufgebaut werden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;make&amp;quot;&amp;gt;&lt;br /&gt;
 #&lt;br /&gt;
 # to use this for the localisation of other plugins,&lt;br /&gt;
 # just change the DOMAIN to the name of the Plugin.&lt;br /&gt;
 # It is assumed, that the domain ist the same as&lt;br /&gt;
 # the directory name of the plugin.&lt;br /&gt;
 #&lt;br /&gt;
 &lt;br /&gt;
 DOMAIN=FileBrowser&lt;br /&gt;
 installdir = /usr/lib/enigma2/python/Plugins/Extensions/$(DOMAIN)&lt;br /&gt;
 #GETTEXT=./pygettext.py&lt;br /&gt;
 GETTEXT=xgettext&lt;br /&gt;
 &lt;br /&gt;
 #MSGFMT = ./msgfmt.py&lt;br /&gt;
 MSGFMT = msgfmt&lt;br /&gt;
 &lt;br /&gt;
 LANGS := de tr nl fy es&lt;br /&gt;
 LANGPO := $(foreach LANG, $(LANGS),$(LANG).po)&lt;br /&gt;
 LANGMO := $(foreach LANG, $(LANGS),$(LANG).mo)&lt;br /&gt;
 &lt;br /&gt;
 default: $(DOMAIN).pot $(LANGPO) merge $(LANGMO)&lt;br /&gt;
 	for lang in $(LANGS); do \&lt;br /&gt;
 		mkdir -p $$lang/LC_MESSAGES; \&lt;br /&gt;
 		cp $$lang.mo $$lang/LC_MESSAGES/$(DOMAIN).mo; \&lt;br /&gt;
 	done&lt;br /&gt;
 &lt;br /&gt;
 merge:&lt;br /&gt;
 	for lang in $(LANGS); do \&lt;br /&gt;
 		msgmerge --no-location -s -N -U $$lang.po $(DOMAIN).pot; \&lt;br /&gt;
 	done&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 # the TRANSLATORS: allows putting translation comments before the to-be-translated line.&lt;br /&gt;
 $(DOMAIN).pot:&lt;br /&gt;
 	$(GETTEXT) -L python --add-comments=&amp;quot;TRANSLATORS:&amp;quot; -d $(DOMAIN) -s -o $(DOMAIN).pot ../src/*.py&lt;br /&gt;
 	msguniq -o $(DOMAIN)uniq.pot $(DOMAIN).pot&lt;br /&gt;
 	$(RM) $(DOMAIN).pot&lt;br /&gt;
 	mv $(DOMAIN)uniq.pot $(DOMAIN).pot&lt;br /&gt;
 &lt;br /&gt;
 .PHONY: $(DOMAIN).pot&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 %.mo: %.po&lt;br /&gt;
 	$(MSGFMT) -o $@ $&amp;lt;&lt;br /&gt;
  &lt;br /&gt;
 %.po:&lt;br /&gt;
 	msginit -l $@ -o $@ -i $(DOMAIN).pot --no-translator&lt;br /&gt;
 &lt;br /&gt;
 CLEANFILES = $(foreach LANG, $(LANGS),$(LANG).mo)&lt;br /&gt;
 &lt;br /&gt;
 clean-local:&lt;br /&gt;
 	$(RM) -r $(LANGS)&lt;br /&gt;
 &lt;br /&gt;
 install-data-am: default&lt;br /&gt;
 	for lang in $(LANGS); do \&lt;br /&gt;
 		mkdir -p $(DESTDIR)$(installdir)/locale/$$lang/LC_MESSAGES; \&lt;br /&gt;
 		cp $$lang.mo $(DESTDIR)$(installdir)/locale/$$lang/LC_MESSAGES/$(DOMAIN).mo; \&lt;br /&gt;
 	done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{body}}&lt;/div&gt;</summary>
		<author><name>Dbt</name></author>
	</entry>
</feed>