basic multi-language interface added
This commit is contained in:
parent
d8e59dfd90
commit
f4b4427b4a
6 changed files with 198 additions and 14 deletions
|
@ -1,9 +1,6 @@
|
|||
Lang {
|
||||
|
||||
Menu {
|
||||
|
||||
}
|
||||
|
||||
Name = Deutsch
|
||||
|
||||
Title {
|
||||
Init = Initialisierung der CryptoBox
|
||||
|
|
106
cryptobox.conf.d/usr/share/cryptobox/lang/en.hdf
Normal file
106
cryptobox.conf.d/usr/share/cryptobox/lang/en.hdf
Normal file
|
@ -0,0 +1,106 @@
|
|||
Lang {
|
||||
|
||||
Name = English
|
||||
|
||||
Title {
|
||||
Init = Initialisierung der CryptoBox
|
||||
Mount = Aktivierung der Cryptodaten
|
||||
Umount = Deaktivierung der Cryptodaten
|
||||
Config = Konfiguration der CryptoBox
|
||||
Log = Protokoll der CryptoBox
|
||||
}
|
||||
|
||||
|
||||
Text {
|
||||
EnterNewPassword = Das neue Passwort eingeben:
|
||||
EnterSamePassword = Das neue Passwort wiederholen:
|
||||
InitWarning = Bei der Initialisierung werden ALLE DATEN auf der Festplatte GELÖSCHT!
|
||||
InitDescription = Schritt ist nur einmalig vor der ersten Nutzung notwendig.<br>Für den täglichen Gebrauch musst du das verschlüsselte Dateisystem lediglich aktivieren und deaktivieren
|
||||
ConfirmInitHint = Um zu bestätigen, dass du weisst, was du tust, tippe hier bitte exakt Folgendes ein:
|
||||
ConfirmInit = ja, loesche alle Daten!
|
||||
PartitionInfo = Derzeitige Partitionierung der Festplatte:
|
||||
IPAddress = Netwerk-Adresse (IP) der CryptoBox:
|
||||
TimeOut = Zeitabschaltung des Crypto-Dateisystems (in Minuten):
|
||||
EmptyLog = Das Logbuch der CryptoBox ist leer.
|
||||
SelectLanguage = Spracheinstellung:
|
||||
RedirectNote = Klicke hier, falls dein Browser die automatische Weiterleitung nicht unterstützt.
|
||||
}
|
||||
|
||||
|
||||
Button {
|
||||
DoInit = CryptoBox initialisieren
|
||||
SaveConfig = Speichere Konfiguration
|
||||
Update = Aktualisieren
|
||||
Mount = CryptoDaten aktivieren
|
||||
Umount = CryptoDaten deaktivieren
|
||||
}
|
||||
|
||||
|
||||
Warning {
|
||||
InitNotConfirmed {
|
||||
Title = Bestätigung schlug fehl
|
||||
Text = Der Bestätigungssatz muss exakt eingegeben werden!
|
||||
}
|
||||
|
||||
EmptyPassword {
|
||||
Title = Ungültige Eingabe
|
||||
Text = Das Passwort darf nicht leer sein!
|
||||
}
|
||||
|
||||
DifferentPasswords {
|
||||
Title = Ungleiche Passworte
|
||||
Text = Die beiden Passworte müssen identisch sein, um sicherzustellen, dass dies das gewünschte Passwort ist.
|
||||
}
|
||||
|
||||
MountFailed {
|
||||
Title = Aktivierung schlug fehl
|
||||
Text = Das verschlüsselte Dateisystem konnte nicht aktiviert werden. Wahrscheinlich war das Passwort falsch.
|
||||
}
|
||||
|
||||
UmountFailed {
|
||||
Title = Deaktivierung schlug fehl
|
||||
Text = Das verschlüsselte Dateisystem konnte nicht abgeschaltet werden. Wahrscheinlich sind noch Dateien geöffnet. Also schließe alle potentiell unsauberen Programme (beispielsweise die weitverbreitete Textverarbeitung). Notfalls ziehe einfach den Stromstecker!
|
||||
}
|
||||
|
||||
NotConfigured {
|
||||
Title = Keine Konfiguration gefunden
|
||||
Text = Die CryptoBox wurde noch nicht eingerichtet.
|
||||
}
|
||||
|
||||
InitNotFinished {
|
||||
Title = Initalisierung noch nicht abgeschlossen
|
||||
Text = Die Initialisierung wird in wenigen Minuten beendet sein. Erst danach ist diese Aktion möglich.
|
||||
}
|
||||
|
||||
IsMounted {
|
||||
Title = Bereits aktiv
|
||||
Text = Das verschlüsselte Dateisystem ist bereits aktiv.
|
||||
}
|
||||
|
||||
NotMounted {
|
||||
Title = Nicht aktiv
|
||||
Text = Das verschlüsselte Dateisystem ist derzeit nicht aktiv.
|
||||
}
|
||||
|
||||
AlreadyConfigured {
|
||||
Title = Konfiguration gefunden
|
||||
Text = Die CryptoBox wurde bereits eingerichtet. Bei einer erneuten Initialisierung werden alle Daten gelöscht!
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Error {
|
||||
|
||||
UnknownAction {
|
||||
Title = Unbekannte Aktion
|
||||
Text = Du hast eine undefinierte Aktion angefordert. Falls du dies nicht bewusst getan hast, solltest du es deinem Administrator mitteilen, damit er das Problem an die Entwickler der CryptoBox weiterleiten kann.
|
||||
}
|
||||
|
||||
NoSSL {
|
||||
Title = Unverschlüsselte Verbindung
|
||||
Text = Die CryptoBox akzeptiert nur verschlüsselte Verbindungen (https). So bleibt dein Passwort vor neugierigen Augen geschützt.
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -14,8 +14,11 @@
|
|||
|
||||
<p><label for="language"><?cs var:Lang.Text.SelectLanguage ?></label>
|
||||
<select name="language">
|
||||
<option value="de">Deutsch</option>
|
||||
<option value="en">English</option>
|
||||
<?cs each:item = Data.Languages ?>
|
||||
<option value="<?cs name:item ?>"
|
||||
<?cs if:(item = Data.Config.Language) ?>selected="selected"<?cs /if ?>
|
||||
><?cs var:item ?></option>
|
||||
<?cs /each ?>
|
||||
</select></p>
|
||||
|
||||
<button type="submit" name="action" value="config_do">
|
||||
|
|
|
@ -12,6 +12,12 @@
|
|||
</head>
|
||||
<body>
|
||||
|
||||
<div id="lang">
|
||||
<?cs each:item = Data.Languages ?>
|
||||
<a href="<?cs var:ScriptName ?>?action=set_lang&language=<?cs name:item ?>"><?cs var:item ?></a><br/>
|
||||
<?cs /each ?>
|
||||
</div>
|
||||
|
||||
<div id="main">
|
||||
<div id="head">
|
||||
<h1>Die CryptoBox</h1>
|
||||
|
|
|
@ -41,11 +41,7 @@ sub load_hdf()
|
|||
{
|
||||
my $hdf = ClearSilver::HDF->new();
|
||||
|
||||
my $fname = "$LANGUAGE_DIR/$LANGUAGE" . '.hdf';
|
||||
die ("Language file ($fname) not found!") unless (-e "$fname");
|
||||
$hdf->readFile("$fname");
|
||||
|
||||
$fname = "$TEMPLATE_DIR/main.cs";
|
||||
my $fname = "$TEMPLATE_DIR/main.cs";
|
||||
die ("Template directory is invalid ($fname not found)!") unless (-e "$fname");
|
||||
$hdf->setValue("TemplateDir","$TEMPLATE_DIR");
|
||||
|
||||
|
@ -56,10 +52,48 @@ sub load_hdf()
|
|||
# set a real script name - otherwise links with a query string will break
|
||||
$hdf->setValue("ScriptName", ($ENV{'SCRIPT_NAME'} eq '/')? '/cryptobox' : $ENV{'SCRIPT_NAME'});
|
||||
|
||||
&load_language_data($hdf, $LANGUAGE);
|
||||
|
||||
&get_available_languages($hdf);
|
||||
|
||||
return $hdf;
|
||||
}
|
||||
|
||||
|
||||
sub load_language_data()
|
||||
# import the specified language data
|
||||
# every call overrides previously loaded values
|
||||
# it is sufficient to call it somewhere before "render"
|
||||
{
|
||||
my $data = shift;
|
||||
my $lang = shift;
|
||||
my $fname = "$LANGUAGE_DIR/$lang" . '.hdf';
|
||||
die ("Language file ($fname) not found!") unless (-e "$fname");
|
||||
$data->readFile("$fname");
|
||||
}
|
||||
|
||||
|
||||
sub get_available_languages()
|
||||
# import the names of all available languages
|
||||
{
|
||||
my $data = shift;
|
||||
my ($file, @files, $hdf, $lang_name);
|
||||
|
||||
opendir(DIR, $LANGUAGE_DIR) or die ("Language directory ($LANGUAGE_DIR) not accessible!");
|
||||
@files = grep { /.*\.hdf$/ } readdir(DIR);
|
||||
close(DIR);
|
||||
|
||||
foreach $file (@files) {
|
||||
warn "$file";
|
||||
$hdf = ClearSilver::HDF->new();
|
||||
$hdf->readFile("$LANGUAGE_DIR/$file");
|
||||
substr($file, -4) = "";
|
||||
$lang_name = $hdf->getValue("Lang.Name", "$file");
|
||||
$data->setValue("Data.Languages." . "$file", "$lang_name");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sub check_ssl
|
||||
{
|
||||
# BEWARE: dirty trick - is there a better way?
|
||||
|
@ -283,9 +317,24 @@ if ( ! &check_ssl()) {
|
|||
} else {
|
||||
$pagedata->setValue('Data.Action', 'config_form');
|
||||
}
|
||||
#################### set_lang ########################
|
||||
} elsif ($action eq 'set_lang') {
|
||||
# TODO: check for invalid file names (containing "../../.." and so on)
|
||||
# TODO: ugly problem: can't save the setting, as long as the box is unconfigured
|
||||
my $language = $query->param('language');
|
||||
my $lang_file = "$LANGUAGE_DIR/$language" . ".hdf";
|
||||
if (-e "$lang_file") {
|
||||
system("$CB_SCRIPT", "set_config", "language", "$language");
|
||||
&load_language_data($pagedata, $language);
|
||||
} else {
|
||||
# warning for user is not necessary, as this wrong value
|
||||
# has surely been injected
|
||||
warn ("Could not find language file ($lang_file)!");
|
||||
}
|
||||
$pagedata->setValue('Data.Action', 'intro');
|
||||
#################### config_do #######################
|
||||
} elsif ($action eq 'config_do') {
|
||||
# TODO: not implemented yet!
|
||||
# TODO: parse for valid values
|
||||
system("$CB_SCRIPT", "set_config", "language", $query->param('language'));
|
||||
system("$CB_SCRIPT", "set_config", "timeout", $query->param('timeout'));
|
||||
system("$CB_SCRIPT", "set_config", "ip", $query->param('ip'));
|
||||
|
|
|
@ -94,8 +94,6 @@ body {
|
|||
|
||||
#words {
|
||||
width: 570px;
|
||||
// warum float?
|
||||
// float: left;
|
||||
padding: 1.1em 0em 1.1em 1.1em;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
@ -159,6 +157,7 @@ body {
|
|||
margin-bottom: 20px;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 15px;
|
||||
color: #707070;
|
||||
}
|
||||
|
||||
#words .warning {
|
||||
|
@ -171,6 +170,10 @@ body {
|
|||
font-size: 0.9em;
|
||||
}
|
||||
|
||||
#words div.warning h1,h2 {
|
||||
color: #808080;
|
||||
}
|
||||
|
||||
#words .warning a {
|
||||
line-height: 5em;
|
||||
color: #5e5e5e;
|
||||
|
@ -242,3 +245,23 @@ button:hover {
|
|||
#words form p {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* ------------=-=-=- language selection -=-=-=------------- */
|
||||
|
||||
#lang {
|
||||
position: absolute;
|
||||
float: right;
|
||||
right: 5px;
|
||||
top: 5px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
#lang a {
|
||||
color: #acacac;
|
||||
font-family: verdana, lucida, arial, helvetica, sans-serif;
|
||||
font-size: smaller;
|
||||
}
|
||||
|
||||
#lang a:hover {
|
||||
color: #707070;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue