Ressource (Software)
# Ressource (Software)

Die Ressourcen (englisch resource) einer Software sind die Dateien, die nicht den Ablauf (Algorithmus) des Programms festlegen, sondern das „Hintergrundwissen“ für den Ablauf speichern. Ressourcen sind beispielsweise Wörterbuch-Dateien bei Übersetzungsprogrammen oder die Listen der Namen und Eigenschaften der einzelnen Charaktere in Computerspielen. Das bekannteste Beispiel für eine Ressource ist das z. B. im Startmenü oder auf dem Desktop angezeigte Programmsymbol.

Während das eigentliche Computerprogramm in einer Programmiersprache geschrieben ist, sind Ressourcen meist einfache Grafiken, Textdateien oder Tabellen. Der Vorteil dabei ist, dass sie auch von Menschen ohne Programmierkenntnisse erweitert oder verändert werden können. So kann man beispielsweise Linguisten als Fachleute an einem Wörterbuch als Ressource für ein Übersetzungsprogramm arbeiten lassen, ohne dass sie viel über das eigentliche Programm wissen müssen.

## Microsoft Windows

### Identifikation einer Ressource

Innerhalb eines Programms werden Ressourcen über eine Kombination aus Typ, Kennung und Sprache (siehe Locale) eindeutig identifiziert. Hierbei handelt es sich jeweils um 16-Bit-Zahlen, wobei Typ und Kennung auch ein String sein können. Beim Typ stehen die Zahlen 1 bis 24 für Standardtypen:

| Typ | Format | Beschreibung |
| - | - | - |
| 1 | Cursor-Eintrag | Mauszeiger in einer ganz bestimmten Auflösung und Farbtiefe |
| 2 | Bitmap | z. B. Bilder für Menüeinträge. |
| 3 | Icon-Eintrag | Symbole in einer ganz bestimmten Auflösung und Farbtiefe |
| 4 | Menü | Einträge einer Menüleiste oder eines Kontextmenüs |
| 5 | Dialog | Entwurf eines Fensters |
| 6 | String-Tabelle | Lokalisierbare Zeichenketten. 16 Stück pro Ressource. Am häufigsten handelt es sich dabei um die Beschriftungen von Formularfeldern, aber beispielsweise auch um regionale Darstellungsformen von Datums- und Zeitangaben. |
| 7 | Schriftartenordner | |
| 8 | Schriftart | Schriftschnitt |
| 9 | Tastenkombinationen | |
| 10 | RC Data | beliebige Daten |
| 11 | Nachrichten-Tabelle | Parametrisierbare Zeichenketten (z. B. für Fehlermeldungen). |
| 12 | Cursor-Gruppe | Liste mit Verweisen auf Cursor-Einträge |
| 13 | - | nicht belegt |
| 14 | Icon-Gruppe | Liste mit Verweisen auf Icon-Einträge |
| 15 | - | nicht belegt |
| 16 | Versionsinfo | Metadaten mit Programmname, Hersteller, Copyright, Versionsnummer usw., wird z. B. in den Eigenschaften der Programmdatei angezeigt |
| 17 | Dialog-Einbindung | z. B. Symbolleisten |
| 18 | - | nicht belegt |
| 19 | Plug & Play | |
| 20 | VxD | Virtuelle Gerätetreiber. |
| 21 | Animierter Cursor | Animierte Mauszeiger, wie beispielsweise eine Sanduhr oder ein sich drehender Kringel, um Warteprozesse zu visualisieren. |
| 22 | Animiertes Icon | Ähnlich wie animierte Mauszeiger, können auch Symbole animiert sein. Diese Funktion ist nur selten anzutreffen. |
| 23 | HTML | HTML-Dokumente und damit verknüpfte Dateien (CSS-Dateien, JS- und VBS-Dateien, Bilddateien, Videodateien etc.). Die Engine des Internet Explorers kann diese Inhalte über das res://-Protokoll abrufen und darstellen. Ein Beispiel dafür sind die Fehlerseiten des Internet Explorers. |
| 24 | Manifest | Metadaten für Theming, GUI-Skalierung und Benutzerkontensteuerung |

Neben den numerischen Standardtypen existieren noch ein paar textbasierte Typen mit fester Bedeutung.

| Typ | Format | Beschreibung |
| - | - | - |
| AVI | Animationen | Animationen im AVI-Format. Beispielsweise spielte der Dialog zur Visualisierung von Kopiervorgängen bis einschließlich Windows XP eine sich endlos wiederholende AVI-Animation ab, bei der Dateien von einem Ordner in einen anderen Ordner flattern. |
| MUI | MUI-Daten | Informationen für ausgelagerte, mehrsprachige Ressourcenbibliotheken. Sogenannte Satelliten-Assemblies. |
| TYPELIB | Typbibliotheken | Schnittstellenbeschreibungen für COM-Elemente. |
| WAVE | WAVE-Sounds | Audiodateien im WAV-Format. |

Programme machen in unterschiedlichem Umfang von den Möglichkeiten Gebrauch, da die Daten auch in externen Dateien oder im Quellcode abgelegt sein können. Soll eine Programmdatei ein Symbol haben, muss sie das Icon jedoch in Ressourcen enthalten (es wird die lexikografisch erste Icongruppe-Ressource verwendet). Der in der Versionsinfo-Ressource enthaltene Programm- bzw. Firmenname wird häufig in Sicherheitssoftware angezeigt. Diese beiden Typen sind daher in nahezu jeder PE-Datei enthalten.

### Resource Code

Resource Code wird als Skriptsprache bei der Entwicklung von Programmen unter OS/2 und Windows dazu genutzt, Elemente der grafischen Benutzeroberfläche und Textkonstanten zu definieren. Dadurch kann eine Trennung zwischen Programmcode und Benutzerschnittstelle erreicht werden.

### RC-Datei

Eine Ressourcendatei (resource script file) enthält einen oder mehrere Ressourcenausdrücke (resource statements), welche jeweils den Typ, Kennung und den Datenwert festlegen. Es handelt sich um eine gewöhnliche Textdatei mit der Endung *.rc, wobei zusätzliche Dateien eingebunden werden können.

Das folgende Beispiel zeigt eine Menü-Ressource (Typ 4). Die Menüleiste besitzt einen Eintrag namens „Datei“. Dem Eintrag auf der Menüleiste ist ein aufklappbares Untermenü (Popup) mit den Einträgen „Öffnen …“, „Drucken“ und „Beenden“ zugeordnet. Die Einträge sind jeweils mit einem horizontalen Strich getrennt. Der Menüpunkt „Drucken“ ist deaktiviert. Die Tastenkombinationen sind Teil der Beschriftung und werden vom Text mit einem Tabulatorzeichen (\t) getrennt. Die Zeichen nach einem Et-Zeichen (&) werden in der GUI unterstrichen dargestellt.

### Resourcecompiler

Der Ressourcencompiler übersetzt textbasierte Ressourcendateien (*.rc) in binäre Ressourcendateien (*.res). Je nachdem, ob sie im nächsten Schritt PE- (32 oder 64 Bit) oder NE-Dateien (16 Bit) hinzugefügt werden sollen, haben *.res-Dateien ein leicht anderes Dateiformat.

## .NET

Anwendungen, die auf .NET bzw. dem .Net-Framework beruhen, nutzen ein eigenes Format für mehrsprachige Ressourcen. Das Format basiert auf XML und besitzt die Dateiendung *.resx.

## Android

Android Apps werden im APK-Format gespeichert. Dabei handelt es sich im Wesentlichen um ein ZIP-Archiv mit einer vorgegebenen Verzeichnisstruktur. Ressourcen werden dabei im res-Verzeichnis abgelegt.

| Typ | Format | Beschreibung |
| - | - | - |
| animator | Property-Animationen | XML-Dateien, mit denen alle Eigenschaften (englisch Properties) von beliebigen Objekten (z. B. Position, Größe, Drehung, Hintergrundfarbe etc.) über eine gewisse Zeitspanne hinweg verändert werden können. |
| anim | View-Animationen | XML-Dateien, mit denen bestimmte Eigenschaften von View-Objekten der grafischen Benutzeroberfläche über eine gewisse Zeitspanne hinweg verändert werden können. Das Verfahren eignet sich für Tweening. Diese Art von Ressource ist weniger mächtig als Ressourcen vom Typ animator, dafür jedoch effizienter. |
| color | Farbschema | XML-Dateien mit Farbangaben für einzelne Steuerelemente in unterschiedlichen Zuständen. Beispielsweise die Hintergrundfarbe für gedrückte Schaltflächen. |
| drawable | Grafiken | Beliebige Raster- und Vektorgrafiken (ggf. in mehreren Auflösungen) |
| mipmap | Launcher-Symbole | Icons in verschiedenen Auflösungen und Formen für App-Launcher. |
| layout | Layouts | Entwürfe für die grafische Benutzeroberfläche von Aktivitäten. |
| menu | Menü | XML-Dateien mit Menüeinträgen (z. B. für Kontextmenüs) |
| raw | Daten | Beliebige (binäre) Daten, die als Datenstrom geladen werden können. |
| values | Werte | XML-Dateien mit Name-Wert-Paaren. Jeder Eintrag ordnet einem eindeutigen Ressourcennamen einen Wert und den dazugehörigen Datentyp zu. |
| xml | XML | Beliebige XML-Dateien. |
| font | Schriftarten | Schriftdateien und XML-Dateien mit Angaben zu Schriftfamilien. |

Jedem dieser Verzeichnisse können noch design-, auflösungs- und sprachspezifische Qualifikatoren, jeweils mit einem Bindestrich getrennt, angehängt werden. Die Reihenfolge der Qualifikatoren ist allerdings nicht willkürlich.

Beispiele für Qualifikatoren:

* drawable Bilder für die Standardsprache der App. Fallback für alle nicht genauer festgelegten Bilder.
* drawable-night Bilder für den Nachtmodus unabhängig von Sprache und Auflösung.
* drawable-en Bilder für die Sprache Englisch, unabhängig von der Auflösung.
* drawable-ldpi Bilder für Bildschirme mit niedriger Punktdichte (120 DPI), unabhängig von der Sprache.
* drawable-zh-rCN-land-hdpi Bilder für vereinfachtes Chinesisch im Querformat (englisch landscape) auf Bildschirmen mit hoher Punktdichte (240 DPI).
