5Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
11
11
ZUGRIFFE
310
310
EMPFEHLEN
-
Hallo,
bei meinem aktuellen Projekt habe ich folgendes Problem. Ich habe eine Translater-Klasse, mit der ich die Stings auf meiner Seite in verschiedene Sprachen übersetzen möchte. Mein Problem ist an der Stelle, dass ich immer die translate Funktion aufrufen muss, wenn ich das tun möchte und das sieht echt bescheuert aus und nervt.
$this->translater->translate('Welcome');
Gibt es eine Möglichkeit, die Funktion direkt per Kürzeln anzusprechen? Idealfall wäre, wenn es dann nur noch hieße:
translate('Welcome');
Gruß, Tommy
-
24.12.11 10:27 #2
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.521
Wenn ich das lösen müsste, dann würde ich das so machen: Klasse "ML" (steht für Multilanguage) hat eine statische Funktion translate.
Code php:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
class ML { private static $lang = 'en'; public static function setLanguage($lang) { self::$lang = $lang; // z.b. gettext verwenden bindtextdomain($lang, '/Verzeichnis/mit/den/mo/files'); } public static function translate($str) { // Hier kommt der Code, der die Übersetzung in die jeweilige Sprache macht $trans = gettext($str); return $trans; } }
Dann kann mna prima überall folgendes machen:
Code php:1 2 3 4 5 6 7
class SomeClass { public function someFunction($someParameter) { echo ML::translate('__WILLKOMMEN__'); } }
Geändert von saftmeister (24.12.11 um 10:45 Uhr)
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
Hi Saftmeister,
ja über ne statische Funktion wäre ne Idee, wobei der Aufruf ML->translate('...'), auch recht kurz ist. Bei mir würde es ja wieder so aussehen:
Translater::translate('...').
Wenn PHP Mehrfachvererbung unterstüzen würde, würde ich mich ja für diese Variante entscheiden:
class Test extends Translater {
...
...
$this->translate('...');
}
Ich denke, es führt kein Weg an diesem Schönheitsfehler vorbei.
Danke und Gruß,
Tommy
-
24.12.11 13:28 #4
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.521
Wofür brauchst du in diesem Falle Mehrfach-Vererbung? Du könntest von Translater eine abgeleitete Klasse ML erstellen, und in dieser die Methoden statisch machen, dazu noch ein Singleton und gut ist.
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
Hi,
also ich möchte einfach nur ne kürze und zugleich sinnvolle Schreibweise für den Funktionsaufruf haben.
Ich habe gerade eine Möglichkeit gefunden über Delegation, das heißt ich übergebe den Funktionsnamen in einem String als Parameter an die Klasse weiter. Diese kann dann ganz normal über die Variable auf die Funktion zu greifen. Sehr schick, aber dann müsste ich glaub ich die Translaterklasse umschreiben in normale Funktionen. Muss ich mal drüber nachdenke. Aber ich denke, das wäre nen guter Ansatz.
Danke nochmal und Gruß,
Tommy
-
24.12.11 14:03 #6
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.521
Und wo hast du dann Code gespart? Du musst dann halt eine Delegations-Funktion aufrufen und übergibst dann statt einem eben 2 Parameter. Ist nicht wirklich weniger code. Außerdem hast du dann Code-Verdoppelungen an allen Ecken und Enden. Aber es ist deine Entscheidung. Meine Variante ist hier etwas kürzer:
Code php:1 2 3 4 5 6 7 8 9 10 11 12
class ML extends Translater { private static $_instance; public static function translate($string) { if(!self::$_instance) self::$_instance = new Translator(); return self::$_instance->translate($string); } }
Ganz easy
Natürlich kann man auch so was machen:
Code php:1 2 3 4 5 6 7 8 9 10 11 12 13
$translator = new Translator(); function translate($string) { return $translator->translate($string); } class SomeClass { public function someFunktion($someParameter) { echo translate('__WILLKOMMEN__'); } }
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
Ja, das stimmt auch wieder. Also deine erste Variante gefällt mir auch besser, wobei ich meine Translater Klasse auch gleich ML nennen kann und nen Singleton habe ich auch schon drinnen.
Aber könnte ich vllt der Klasse die Parameter direkt übergeben?
So dass ich dann statt
$this->translater->translate(...);
einfach sagen könnte:
$this->translater(..);
Gruß, Tommy
-
24.12.11 14:36 #8
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.521
Hast du für deine "Geschäftsklassen" eine allgemeine Klasse? Dann könntest du dort einfach eine Methode "translate" einbauen, die eine Instanz von Translater erzeugt und dort die Methode "translate" aufruft. In etwa so:
Code php:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
class Allgemein { protected function translate($string) { return Translater::getInstance()->translate($string); } } class BusinessLogic extends Allgemein { public function someFunction() { echo $this->translate('__WILLKOMMEN__'); } }
Die Klasse BusinessLogic macht zu Beispiel das Anzeigen von News-Beträgen oder whatever...Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
1.000 Dank! Das habe ich gesucht******!
Ich bau mir einfach eine Basisklasse, die ich immer vererben kann, wenn ich sie brauch.
Danke
-
25.12.11 14:10 #10
Das ganze könntest du auch einfach über Namespace lösen, einfach ein MyTools instanzieren und Translate aufrufen, als default Paramter würde ich englisch benutzen und wenn du Französisch bräuchtest einfach MyTools::Translate('Hallo', FRENCH); fertig. Das ist alles eine Sache von Geschmack und Sichtweise, was einem halt besser gefällt
-
Da hatte ich auch schon drüber nachgedacht gehabt, aber ich wollte halt unbedingt $this->translate('Hallo') haben. Die Spache steht in der Session (Browsereinstellung oder Profileinstellung), also muss ich die nicht übergeben.
Ich finde halt den ständigen Aufruf nervig und statisch erst recht, wenn ich im Code durchgehend mit dem Pfeil-Operator arbeite, da möchte ich dann nicht bei allen zu übersetzenden echos nen :: haben.
Daher ist dieser Lösungsansatz von Saftmeister schon ideal.
Danke trotzdem für den Tipp.
Gruß und frohes Fest, Tommy
-
25.12.11 15:26 #12
Das ist ja mehr eine Sache von Zugehörigkeit der Klassen und Abhängigkeit, Static Functions sind ja um Toolfunktionen in deiner Klasse oder Views zu nutzen die mit dem Context ansich überhaupt gar nix zu tun haben. Das reicht halt weit in die Objektorientierte Programmierung.
Aber ich hab gern geholfen.
Ähnliche Themen
-
Frage zu Alias
Von ratze79 im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 27.05.08, 13:04 -
alias mit Java
Von Meccan im Forum JavaAntworten: 2Letzter Beitrag: 16.10.07, 20:14 -
Was ist Alias Maya
Von spirits92 im Forum Autodesk Maya (ehemals Alias)Antworten: 3Letzter Beitrag: 18.08.05, 22:58 -
Alias Funktion beim Tomcat?
Von mail2mrx im Forum Hosting & WebserverAntworten: 0Letzter Beitrag: 12.07.05, 15:17 -
Alias mitbrennen
Von mardazad im Forum Mac OSAntworten: 0Letzter Beitrag: 25.10.04, 05:06





Zitieren

Login






[PHP][Snippet] Array zu XML konvertieren