Sie sollten eine PHP-Bibliothek schreiben, die über Packagist oder Pear veröffentlicht wird. Es richtet sich an Peer-Entwickler, die es in beliebigen Einstellungen verwenden.So können Sie eine PHP-Drittanbieterbibliothek internationalisieren
Diese Bibliothek enthält einige Statusmeldungen, die für den Client festgelegt wurden. Wie internationalisiere ich diesen Code, damit die Entwickler, die die Bibliothek verwenden, die größtmögliche Freiheit haben, ihre eigene Lokalisierungsmethode zu verwenden? Ich möchte nichts annehmen, besonders nicht den Entwickler zwingen, gettext zu verwenden.
an einem Beispiel zu umgehen, lassen Sie uns diese Klasse nehmen:
class Example {
protected $message = "I'd like to be translated in your client's language.";
public function callMe() {
return $this->message;
}
public function callMeToo($user) {
return sprintf('Hi %s, nice to meet you!', $user);
}
}
Es gibt zwei Probleme: Wie kann ich die private $message
für die Übersetzung zu markieren, und wie lasse ich die Entwickler die Zeichenfolge innerhalb lokalisieren callMeToo()
?
One (sehr unbequem) Option wäre, für einige i18n Methode im Konstruktor zu fragen, wie so:
public function __construct($i18n) {
$this->i18n = $i18n;
$this->message = $this->i18n($this->message);
}
public function callMeToo($user) {
return sprintf($this->i18n('Hi %s, nice to meet you!'), $user);
}
aber ich hoffe, einen hohen Preis für eine elegantere Lösung.
Edit 1: Abgesehen von der einfachen String-Substitution ist das Feld von i18n breit. Die Prämisse ist, dass ich keine i18n-Lösung mit meiner Bibliothek packen möchte oder den Benutzer zwinge, einen spezifisch für meinen Code zu wählen.
Wie kann ich dann meinen Code strukturieren, um die beste und flexibelste Lokalisierung für verschiedene Aspekte zu ermöglichen: Stringübersetzung, Zahlen- und Währungsformatierung, Datum und Uhrzeit, ...? Angenommen, der eine oder der andere erscheint als Ausgabe aus meiner Bibliothek. An welcher Stelle oder Schnittstelle kann der Entwickler ihre Lokalisierungslösung einstecken?
Danke, interessant. Im Grunde scheinen mir die vorgeschlagenen 'loadStrings' gut zu meinen Bedürfnissen zu passen. Kennst du irgendwelche Projekte in der Wildnis, wie gehen sie damit um? (Zend ist allerdings ausgenommen, sie haben ihre eigene i18n-Bibliothek.) – Boldewyn
@Boldewyn Ich kenne ein paar Closed-Source-Projekte, die auf diese Weise damit umgehen, aber ich muss über ein Open-Source-Projekt nachdenken. Die meisten sind überhaupt nicht lokalisiert und wenn sie sind, benutzen sie gettext ... – ckruse
Ja, das ist genau mein Problem, leider ... – Boldewyn