basic multi-language interface added

This commit is contained in:
lars 2005-07-23 02:15:29 +00:00
parent d8e59dfd90
commit f4b4427b4a
6 changed files with 198 additions and 14 deletions

View File

@ -1,9 +1,6 @@
Lang {
Menu {
}
Name = Deutsch
Title {
Init = Initialisierung der CryptoBox

View 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&uuml;r den t&auml;glichen Gebrauch musst du das verschl&uuml;sselte Dateisystem lediglich aktivieren und deaktivieren
ConfirmInitHint = Um zu best&auml;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&uuml;tzt.
}
Button {
DoInit = CryptoBox initialisieren
SaveConfig = Speichere Konfiguration
Update = Aktualisieren
Mount = CryptoDaten aktivieren
Umount = CryptoDaten deaktivieren
}
Warning {
InitNotConfirmed {
Title = Best&auml;tigung schlug fehl
Text = Der Best&auml;tigungssatz muss exakt eingegeben werden!
}
EmptyPassword {
Title = Ung&uuml;ltige Eingabe
Text = Das Passwort darf nicht leer sein!
}
DifferentPasswords {
Title = Ungleiche Passworte
Text = Die beiden Passworte m&uuml;ssen identisch sein, um sicherzustellen, dass dies das gew&uuml;nschte Passwort ist.
}
MountFailed {
Title = Aktivierung schlug fehl
Text = Das verschl&uuml;sselte Dateisystem konnte nicht aktiviert werden. Wahrscheinlich war das Passwort falsch.
}
UmountFailed {
Title = Deaktivierung schlug fehl
Text = Das verschl&uuml;sselte Dateisystem konnte nicht abgeschaltet werden. Wahrscheinlich sind noch Dateien ge&ouml;ffnet. Also schlie&szlig;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&ouml;glich.
}
IsMounted {
Title = Bereits aktiv
Text = Das verschl&uuml;sselte Dateisystem ist bereits aktiv.
}
NotMounted {
Title = Nicht aktiv
Text = Das verschl&uuml;sselte Dateisystem ist derzeit nicht aktiv.
}
AlreadyConfigured {
Title = Konfiguration gefunden
Text = Die CryptoBox wurde bereits eingerichtet. Bei einer erneuten Initialisierung werden alle Daten gel&ouml;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&uuml;sselte Verbindung
Text = Die CryptoBox akzeptiert nur verschl&uuml;sselte Verbindungen (https). So bleibt dein Passwort vor neugierigen Augen gesch&uuml;tzt.
}
}
}

View File

@ -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">

View File

@ -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>

View File

@ -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'));

View File

@ -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;
}