Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]5734[/thread]

verschiedene Sprachen in einem Prog: Wie macht ihr das?



<< >> 10 Einträge, 1 Seite
macMeck
 2003-09-18 09:13
#53547 #53547
User since
2003-08-04
162 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

ich bin schon seit laengerem am ueberlegen, wie man am einfachsten und effizientesten ein bestehendes Programm dahingehend erweitert, dass es verschieden Sprachen unterstuetzt. Wollte mal rumfragen, wie ihr das macht, bzw. was sich bewaehrt hat.
Ein .pm-File fuer jede Sprache mit Konstanten fuer jeden Text, der ausgegeben wird? Fuer ein Webprojekt dann erstmal fuer den User auslesen, welche Sprache er gewaehlt hat und dann aus dem entsprechenden File anzeigen?
Oder gibt's besser Methoden? Helft mir doch mal mit euren Erfahrungswerten...

macMeck
It all works, as long as it's documented!
Robby
 2003-09-18 09:29
#53548 #53548
User since
2003-08-11
409 Artikel
BenutzerIn
[default_avatar]
Wie wäre es mit einer ini-Datei???
Dort irgendwelche Token für jede Sprache setzen und
je nach Sprache die richtige Sektion auslesen.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
[SETUP]
MeinProgramm:setup:lang = "GERMAN"

[GERMAN]
MeinProgramm:menu:file ="Datei"
MeinProgramm:menu:quit ="Beenden"
MeinProgramm:start:starttext ="Herzlich Willkommen"

[ENGLISH]
MeinProgramm:menu:file ="File"
MeinProgramm:menu:quit ="Quit"
MeinProgramm:start:starttext ="Welcome"


und dann im Code so abfragen:

Code: (dl )
1
2
3
4
5
# -----------------------------------------------------------------------------
# Sprache festlegen
# -----------------------------------------------------------------------------
loadIni("meineIni.ini","SETUP",\%SETUP);
loadIni("meineIni.ini",$SETUP{"MeinProgramm:setup:lang"},\%LANG);


Code: (dl )
	$anzeige->insert( 'end', $LANG{"MeinProgramm:start:starttext"}, COLOR->{UNDEF} . "\n");
Kaum macht man es richtig - schon funktioniert es!
Dubu
 2003-09-18 12:06
#53549 #53549
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Bei der I18N (Internationalization) von Programmen im Unix/Linux-Umfeld wird meist die GNU-gettext Library genommen. Dafuer gibt es auch ein Perl-Interface. Dieses und weitere Tools kann man unter http://search.cpan.org/modlist/Internationalization_Locale/Locale finden.
Crian
 2003-09-18 12:56
#53550 #53550
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
In dem Buch "Professional Perl Programming" von Peter Wainwright et al, welches mir vorgestern in einer Grabbelkiste bei Phönix für 5 Euro in die Hände gefallen ist :-D *freu* ist auch ein Kapitel über Lokalisation und I18n drin, wo auf die Probleme die so auftreten eingegangen wird. Ich habe es gerade nur mal überflogen, aber werde es demnächst auch genauer lesen, weil ich auch ein Programm i18n möchte, und da ich noch am nachdenken über die verwendeten Datenstrukturen bin, kann ich dann ev. schon auf Besonderheiten für die I18n Rücksicht nehmen.

An Paketen wird neben GNU's gettext noch das Paket Locale::Maketext erwähnt (welches eine pure perl Lösung ist). Der Autor weist allerdings darauf hin, dass dieses Paket noch in einem frühen Stadium ist (war), als er das Buch schrieb. Da das Buch von 2001 ist (für Perl 5.6), könnte sich das ja aber schon geändert haben.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
macMeck
 2003-09-19 05:08
#53551 #53551
User since
2003-08-04
162 Artikel
BenutzerIn
[default_avatar]
Kannst du mal davon berichten, wenn du entweder weiter gelesen oder mal was damit versucht hast. Ein Erfahrungsbericht ueber die versteckten Problemchen waere natuerlich spitze...

macMeck
It all works, as long as it's documented!
kabel
 2003-09-19 16:59
#53552 #53552
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
hier ist eine weitere lösung:

Code: (dl )
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
26
package Tie::I18N;

use Tie::Hash;
use base qw/Tie::StdHash/;

my %STRINGS = (
DE => {
ASK => "wieviele zeitschriften wollen sie kaufen?",
},

EN => {
ASK => "how many mags you wanna buy?",
}
);

sub TIEHASH {
my ($package, $language) = @_;
return bless {LANGUAGE => uc $language}, $package;
}

sub FETCH {
my ($self, $what) = @_;
return $STRINGS{$self->{LANGUAGE}}->{uc $what} || "";
}

1;


Quote
kabel@linux:~/progs/perl> cat i18n.pl
use strict;
use Tie::I18N;

my %hash;
tie %hash, "Tie::I18N", "de";
print $hash{ASK}, $/;
untie %hash;

tie %hash, "Tie::I18N", "en";
print $hash{ASK}, $/;
untie %hash;
kabel@linux:~/progs/perl> perl -w i18n.pl
wieviele zeitschriften wollen sie kaufen?
how many mags you wanna buy?
kabel@linux:~/progs/perl>


%STRINGS müsste natürlich irgendwie dynamisch gefüllt werden ...
-- stefan
Crian
 2003-09-21 23:02
#53553 #53553
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
[quote=macMeck,19.09.2003, 03:08]Kannst du mal davon berichten, wenn du entweder weiter gelesen oder mal was damit versucht hast. Ein Erfahrungsbericht ueber die versteckten Problemchen waere natuerlich spitze...

macMeck[/quote]
Ja werd ich, ich bin allerdings erstmal die nächsten drei Wochen im Urlaub :-D
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
macMeck
 2003-09-22 09:03
#53554 #53554
User since
2003-08-04
162 Artikel
BenutzerIn
[default_avatar]
Na dann wuensche ich dir doch viel Spass. Und da du ja bestimmt dein Perl-Buch mitnimmst, kannst du uns ja danach bericht :D

macMeck
It all works, as long as it's documented!
weismat
 2003-09-22 10:55
#53555 #53555
User since
2003-08-18
142 Artikel
BenutzerIn
[default_avatar]
Ich habe das mal bei einem Online Banking Projekt mit Java gemacht. Da wurden sogenannte Resources Bundles genutzt. Das ganze sah vom Interface so ähnlich aus wie die Lösung von Kabel. Es gab Excelspreadsheets, aus denen dann die Klasse generiert wurde.

Für die praktische Nutzung sind aus meiner Erfahrung eher folgende Dinge wichtig - systematische Benammung der Labels auf der Seite für die Kommunikation mit dem Übsetzer und gute Planung des Layouts - letzteres ist schwer, weil man nie weiß, wie kurz/lang ein Satz in den verschiedenen Sprachen wird. Das Testen des Layouts wird dann ziemlich aufwendig.
Crian
 2003-09-22 23:45
#53556 #53556
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
[quote=macMeck,22.09.2003, 07:03]Na dann wuensche ich dir doch viel Spass. Und da du ja bestimmt dein Perl-Buch mitnimmst, kannst du uns ja danach bericht :D

macMeck[/quote]
Urgs ... es liegt schon auf dem Stapel der einzupackenden Dinge, bin ich so durchschaubar?

Aber danke für die guten Wünsche :-)
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< >> 10 Einträge, 1 Seite



View all threads created 2003-09-18 09:13.