Schrift
[thread]392[/thread]

regex für Umlaute (de, en, fr): Geht das auch besser? (Seite 3)



<< |< 1 2 3 4 5 >| >> 47 Einträge, 5 Seiten
Alex
 2004-12-26 23:21
#3904 #3904
User since
2003-12-04
285 Artikel
BenutzerIn
[default_avatar]
[quote=pktm,26.12.2004, 22:08]Dann solltest du dir einen Konstruktor zulegen.
Das hat bei mir etwas gedauert bis ich das ganz gerallt hatte wie das ging aber es ist recht nützlich.

Und lass diesen Exporter weg, der verschmutzt nur den Namespace deines Hauptprogrammes.

Soweit mein erster Eindruck.
mfg pktm[/quote]
Was ist ein Konstruktor?

Welchen Exporter meinst Du? Habe den Aufbau irgendwo hier im Forum abgeschrieben - wenn ich ehrlich bin check' ich nicht so ganz was da so passiert - meine Vermutungen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
package sprache; # ok. der Name des Paketes
use strict; # auch klar
use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION); # ???
use vars qw(%deutsch %englisch %franzoesisch); # sind meine Variablen, aber warum dahin schreiben und dann noch mit use?
use HTML::Entities; #klar, einbinden des anderen Modules
require 5.004; # vermutlich die Perlversion die benötigt wird, woher weiß ich was für meinen Code gilt?
require Exporter; # ???
@ISA = qw(Exporter); # ???
@EXPORT = qw(g_w); # das ist die sub die ich bei Aufruf exportieren will
@EXPORT_OK = qw(%deutsch %englisch %franzoesisch); # ??? nochmal meine Variablen
$VERSION = '0.01'; # die, vemutlich nicht notwendige Versionsnummer dieses Modules
require HTML::Entities; # vermutlich fataler error wenn HTML::Entities nicht da ist

Bekomme ich Nachhilfe?
<center>Schönen Gruß, Alex
Mit dem Computer geht alles viel schneller - es dauert nur ein bißchen länger!
</center>
renee
 2004-12-26 23:41
#3905 #3905
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
package sprache; # ok. der Name des Paketes
use strict; # auch klar

Soweit ist ja alles klar!
Code: (dl )
1
2
use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION); # ???
use vars qw(%deutsch %englisch %franzoesisch); # sind meine Variablen, aber warum dahin schreiben und dann noch mit use?

mit use vars() machst Du Variablen bekannt, so ähnlich, wie Du es in anderen Programmen mit my machst! Du kannst die beiden Zeilen auch weglassen und die Variablen dafür mit our deklarieren (siehe perldoc strict)
Code: (dl )
1
2
use HTML::Entities; #klar, einbinden des anderen Modules
require 5.004; # vermutlich die Perlversion die benötigt wird, woher weiß ich was für meinen Code gilt?

require 5.004 ist z.B. nur notwendig, wenn Du auf Perl-Features zugreifst, die erst ab einer bestimmten Perl-Version dabei waren. Um dann noch sicher zustellen, dass Dein Modul funktioniert, gibst Du an, welche Perl-Version mindestens installiert sein muss. Ist nicht unbedingt notwendig, wenn Du nur Variablen mit dem Modul zur Verfügung stellst.
Code: (dl )
1
2
3
4
require Exporter; # ???
@ISA = qw(Exporter); # ???
@EXPORT = qw(g_w); # das ist die sub die ich bei Aufruf exportieren will
@EXPORT_OK = qw(%deutsch %englisch %franzoesisch); # ??? nochmal meine Variablen

mit dem Export-Zeugs machst Du die Sachen in Deinem Skript bekannt. Dann ist Vorsicht mit der Variablenbenennung gefragt!

mit use sprache qw(%deutsch); könntest Du jetzt direkt auf %deutsch im Skript zugreifen...

Code: (dl )
$VERSION = '0.01'; # die, vemutlich nicht notwendige Versionsnummer dieses Modules

ist nur dann notwendig, wenn du das Modul auf CPAN veröffentlichst
Code: (dl )
require HTML::Entities; # vermutlich fataler error wenn HTML::Entities nicht da ist

richtig! In einer CPAN-Distribution würde man das als Voraussetzung kennzeichnen, da Du aber weißt Dass Du es brauchst, wirst Du es sicherlich auch installieren ;)
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
esskar
 2004-12-26 23:41
#3906 #3906
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ich hätt es so gemacht

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package Language;

use strict;
use warnings;

use HTML::Entities;

use vars qw/$VERSION/;

$VERSION = '0.01';

my %languages = (
  german => {
     home => 'Startseite
     board => 'Kontaktforum',
     contact => 'Kontakt',
     recommend => 'empfehlen',
     imprint => 'Impressum',
     game => 'Spiel',
     submit => 'Absenden',
     reset=> 'Löschen',
  },
  english => {
  },
  french => {
  },
);

sub new
{
  my $class = shift;
  my $self = ();

  bless $self, $class;

  return $self;
}

sub get
{
  my ($self, $lang, $word) = @_;

  return $languages{$lang}->{$word};
}

sub get_ashtml
{
  return &HTML::Entities::encode_entities(&get(@_));
}

1;
\n\n

<!--EDIT|esskar|1104097370-->
steffenw
 2004-12-27 00:07
#3907 #3907
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich glaube, @Alex, Du erfindest gerade das Modul "Locale::Maketext" neu. Denn genau darin geht es um mehrsprachige Dokumente, Trennung von Code, Design und Lexikon (also die jeweils zu übersetzenden Teile). Es gibt auch Vererbung innerhalb der Lexikas, bei ähnlichen Sprachen und Automatismen für die Defaultsprache. Enthalten ist auch die automatische Erkennung der angeforderten Sprache, die länderzpezifische Zahlenformatierung und vieles mehr.
$SIG{USER} = sub {love 'Perl' or die};
pktm
 2004-12-27 00:10
#3908 #3908
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Soweit ich das jetzt verstanden habe möchte Alex mit diesem Modul nur Entities encoden.
Code: (dl )
1
2
3
4
5
6
sub get
{
my ($self, $word) = @_;

return &HTML::Entities::encode_entities($word);
}


$lang können wir uns schenken, weil das Modul nicht nach Sprachen unterscheidet sondern einfach nur unkompliziert die Entities encoded.

Folglich:
a) copy&paste das Modul aus esskars Beitrag
b) lösche die beiden Methoden get und get_ashtml (sähe als getHtml sowieso viel schönder aus ^^)
c) lösche den %languages
d) copy&paste die Methode aus meinem Beitrag in das Modul (unten dran, aber vor das 1; (return 1; finde ich schöner, jedoch sind wir doch alle ein bischen schreibfaul :-) )
e) hab Spaß! (soll bedeuten: my $p = new Language; print $p->get(qw(öüä?&%$§"!^°)); )

Die Methode new ist übrigens der Konstruktor.
Der Konstruktor erzeugt eine Instanz der Objektklasse Language.
AKA: Man baut sich ein Objekt (->OOP) welches die Methoden (&get) aus deinem Modul enthält.
Witzigerweise sind in Perl Objekte quasi das Selbe wie Hashreferenzen, nur dass dieses "bless" dazu kommt (was man im übrigen nicht richtig übersetzen kann).
mfg pktm
http://www.intergastro-service.de (mein erstes CMS :) )
pktm
 2004-12-27 00:13
#3909 #3909
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
[quote=steffenw,26.12.2004, 23:07]Ich glaube, @Alex, Du erfindest gerade das Modul "Locale::Maketext" neu. Denn genau darin geht es um mehrsprachige Dokumente, Trennung von Code, Design und Lexikon (also die jeweils zu übersetzenden Teile). Es gibt auch Vererbung innerhalb der Lexikas, bei ähnlichen Sprachen und Automatismen für die Defaultsprache. Enthalten ist auch die automatische Erkennung der angeforderten Sprache, die länderzpezifische Zahlenformatierung und vieles mehr.[/quote]
Cool, das kannte ich noch garnicht.
Hätte ich das doch nur gefunden als ich meine CMS anfing zu schreiben...
Sieht aber recht gewöhnungsbedürftig aus.
http://www.intergastro-service.de (mein erstes CMS :) )
renee
 2004-12-27 00:20
#3910 #3910
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
@pktm: %languages wird gebraucht, da ja erst das Wort gefunden werden soll, das durch HTML::Entities geschickt werden soll. Wenn jemand auf der HP das französische Fähnchen anklickt, dann soll das franz. Wort für Startseite "übersetzt" werden. Dieses Lexikon - wie steffen es genannt hat - muss erstmal zur Verfügung gestellt werden.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
steffenw
 2004-12-27 00:21
#3911 #3911
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=pktm,26.12.2004, 23:13]Sieht aber recht gewöhnungsbedürftig aus.[/quote]
Nur am Anfang ...
Wenn Du es geschnallt hast, was nicht schwer sein kann, ich hab's ja auch, dann ist es an Primitivheit fast nicht mehr zu übertreffen. Fast, weil ich habe mir noch 1 Modul dazugeschrieben und dann ist noch angenehmer in der Schreibweise. Auch für den Übersetzer und Designer ist es viel einfacher dadurch.
$SIG{USER} = sub {love 'Perl' or die};
esskar
 2004-12-27 00:26
#3912 #3912
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=steffenw,26.12.2004, 23:21]ich habe mir noch 1 Modul dazugeschrieben und dann ist noch angenehmer in der Schreibweise. Auch für den Übersetzer und Designer ist es viel einfacher dadurch.[/quote]
stell es doch auf cpan
steffenw
 2004-12-27 00:26
#3913 #3913
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=renee,26.12.2004, 23:20]Dieses Lexikon - wie steffen es genannt hat - muss erstmal zur Verfügung gestellt werden.[/quote]Ja genau und für Deutsch nach Englisch könnte es so aussehen.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package LocaleMaketext::L10N::en;
use strict;
use warnings;
our @ISA = qw(LocaleMaketext::L10N);

# Sprachklasse fuer Englisch

our %Lexicon = (
 "Hallo Welt" => "Hello world",
 "Rezept für Pfannkuchen" => "Recipe for pancakes",
 "[_1] gefunden" => "[quant,_1,file,files,No file] found",
 "Datei,Dateien,keine Datei" => "file,files,No file",
);

1;
\n\n

<!--EDIT|steffenw|1104100118-->
$SIG{USER} = sub {love 'Perl' or die};
<< |< 1 2 3 4 5 >| >> 47 Einträge, 5 Seiten



View all threads created 2004-12-26 00:24.