ubuntuusers.de

Bash Lokalisierung

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Bash-Skripte können mittels xgettext lokalisiert werden. Als Standard-Sprache sollte man Englisch verwenden.

Beispiel-Skript

Folgendes Beispiel-Skript namens helloworld wird so mit einem Editor erstellt [1], dass mit xgettext Übersetzungsdateien angelegt werden können. Dazu sind die Variablen TEXTDOMAIN und TEXTDOMAINDIR anzugeben, die Namen und Speicherpfad der Übersetzungsdateien enthalten. Die zu übersetzenden Texte sind durch das vorangestellte Dollarzeichen gekennzeichnet.

1
2
3
4
5
6
7
#!/bin/bash

TEXTDOMAIN=helloworld
TEXTDOMAINDIR=/usr/share/locale

echo $"Hello World!"
echo $"This text is english!"

Das Skript wird beispielsweise als ~/bin/helloworld gespeichert und ausführbar gemacht [2].

Übersetzungs-Vorlage

Nun kann die Vorlage für Übersetzungen erstellt werden [3]:

bash --dump-po-strings ~/bin/helloworld | xgettext -L PO -o ~/helloworld.pot - 

Lokalisierung

Um mit der deutschen Übersetzung zu beginnen, wird die entsprechende .po-Datei erstellt [3]:

msginit -l de -i ~/helloworld.pot -o ~/helloworld.po 

Die Datei ~/helloworld.po kann in einem Übersetzungsprogramm oder in einem Texteditor bearbeitet werden. Das Resultat sollte wie folgt aussehen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# German translations for helloworld package.
# Copyright (C) 2008 Max Mustermann
# This file is distributed under the same license as the helloworld package.
# Max Mustermann <maxmustermann@mustermail.xy>, 2008.
#
msgid ""
msgstr ""
"Project-Id-Version: helloworld 0.0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2008-06-20 14:55+0200\n"
"PO-Revision-Date: 2008-06-20 14:55+0200\n"
"Last-Translator: Max Mustermann <maxmustermann@mustermail.xy>\n"
"Language-Team: German\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ASCII\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#: helloworld:6
msgid "Hello World!"
msgstr "Hallo Welt!"

#: helloworld:7
msgid "This text is english!"
msgstr "Dieser Text ist deutsch!"

Kompilieren und Installieren

Die Übersetzung muss in ein Binärformat umgewandelt werden, anschließend kann die fertige Übersetzung an die richtige Stelle verschoben werden [3]:

msgfmt -o ~/helloworld.mo ~/helloworld.po
sudo mv ~/helloworld.mo /usr/share/locale/de/LC_MESSAGES/ 

Überprüfen

Nun kann der Erfolg überprüft werden [3]:

LC_ALL=de_DE helloworld 
Hallo Welt!
Dieser Text ist deutsch!
LC_ALL=C helloworld 
Hello World!
This text is english!

Diese Revision wurde am 7. November 2011 18:25 von cornix erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Programmierung, Shell