basic multi-language interface added
This commit is contained in:
parent
d8e59dfd90
commit
f4b4427b4a
|
@ -1,9 +1,6 @@
|
||||||
Lang {
|
Lang {
|
||||||
|
|
||||||
Menu {
|
Name = Deutsch
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Title {
|
Title {
|
||||||
Init = Initialisierung der CryptoBox
|
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>
|
<p><label for="language"><?cs var:Lang.Text.SelectLanguage ?></label>
|
||||||
<select name="language">
|
<select name="language">
|
||||||
<option value="de">Deutsch</option>
|
<?cs each:item = Data.Languages ?>
|
||||||
<option value="en">English</option>
|
<option value="<?cs name:item ?>"
|
||||||
|
<?cs if:(item = Data.Config.Language) ?>selected="selected"<?cs /if ?>
|
||||||
|
><?cs var:item ?></option>
|
||||||
|
<?cs /each ?>
|
||||||
</select></p>
|
</select></p>
|
||||||
|
|
||||||
<button type="submit" name="action" value="config_do">
|
<button type="submit" name="action" value="config_do">
|
||||||
|
|
|
@ -12,6 +12,12 @@
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<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="main">
|
||||||
<div id="head">
|
<div id="head">
|
||||||
<h1>Die CryptoBox</h1>
|
<h1>Die CryptoBox</h1>
|
||||||
|
|
|
@ -41,11 +41,7 @@ sub load_hdf()
|
||||||
{
|
{
|
||||||
my $hdf = ClearSilver::HDF->new();
|
my $hdf = ClearSilver::HDF->new();
|
||||||
|
|
||||||
my $fname = "$LANGUAGE_DIR/$LANGUAGE" . '.hdf';
|
my $fname = "$TEMPLATE_DIR/main.cs";
|
||||||
die ("Language file ($fname) not found!") unless (-e "$fname");
|
|
||||||
$hdf->readFile("$fname");
|
|
||||||
|
|
||||||
$fname = "$TEMPLATE_DIR/main.cs";
|
|
||||||
die ("Template directory is invalid ($fname not found)!") unless (-e "$fname");
|
die ("Template directory is invalid ($fname not found)!") unless (-e "$fname");
|
||||||
$hdf->setValue("TemplateDir","$TEMPLATE_DIR");
|
$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
|
# set a real script name - otherwise links with a query string will break
|
||||||
$hdf->setValue("ScriptName", ($ENV{'SCRIPT_NAME'} eq '/')? '/cryptobox' : $ENV{'SCRIPT_NAME'});
|
$hdf->setValue("ScriptName", ($ENV{'SCRIPT_NAME'} eq '/')? '/cryptobox' : $ENV{'SCRIPT_NAME'});
|
||||||
|
|
||||||
|
&load_language_data($hdf, $LANGUAGE);
|
||||||
|
|
||||||
|
&get_available_languages($hdf);
|
||||||
|
|
||||||
return $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
|
sub check_ssl
|
||||||
{
|
{
|
||||||
# BEWARE: dirty trick - is there a better way?
|
# BEWARE: dirty trick - is there a better way?
|
||||||
|
@ -283,9 +317,24 @@ if ( ! &check_ssl()) {
|
||||||
} else {
|
} else {
|
||||||
$pagedata->setValue('Data.Action', 'config_form');
|
$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 #######################
|
#################### config_do #######################
|
||||||
} elsif ($action eq '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", "language", $query->param('language'));
|
||||||
system("$CB_SCRIPT", "set_config", "timeout", $query->param('timeout'));
|
system("$CB_SCRIPT", "set_config", "timeout", $query->param('timeout'));
|
||||||
system("$CB_SCRIPT", "set_config", "ip", $query->param('ip'));
|
system("$CB_SCRIPT", "set_config", "ip", $query->param('ip'));
|
||||||
|
|
|
@ -94,8 +94,6 @@ body {
|
||||||
|
|
||||||
#words {
|
#words {
|
||||||
width: 570px;
|
width: 570px;
|
||||||
// warum float?
|
|
||||||
// float: left;
|
|
||||||
padding: 1.1em 0em 1.1em 1.1em;
|
padding: 1.1em 0em 1.1em 1.1em;
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
}
|
}
|
||||||
|
@ -159,6 +157,7 @@ body {
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
padding-bottom: 15px;
|
padding-bottom: 15px;
|
||||||
|
color: #707070;
|
||||||
}
|
}
|
||||||
|
|
||||||
#words .warning {
|
#words .warning {
|
||||||
|
@ -171,6 +170,10 @@ body {
|
||||||
font-size: 0.9em;
|
font-size: 0.9em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#words div.warning h1,h2 {
|
||||||
|
color: #808080;
|
||||||
|
}
|
||||||
|
|
||||||
#words .warning a {
|
#words .warning a {
|
||||||
line-height: 5em;
|
line-height: 5em;
|
||||||
color: #5e5e5e;
|
color: #5e5e5e;
|
||||||
|
@ -242,3 +245,23 @@ button:hover {
|
||||||
#words form p {
|
#words form p {
|
||||||
text-align: center;
|
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