Considera di scrivere una libreria PHP, che verrà pubblicata tramite Packagist o Pear. È rivolto agli sviluppatori peer che lo utilizzano in impostazioni arbitrarie.Come internazionalizzare una libreria di terze parti PHP
Questa libreria conterrà alcuni messaggi di stato determinati per il client. Come faccio a internazionalizzare questo codice, in modo che gli sviluppatori che utilizzano la libreria abbiano la massima libertà possibile per collegare il proprio metodo di localizzazione? Non voglio assumere nulla, specialmente non costringere il dev a usare gettext.
a lavorare su un esempio, prendiamo questa classe:
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);
}
}
ci sono due problemi qui: Come faccio a contrassegnare il privato $message
per la traduzione, e come posso permettere allo sviluppatore di localizzare la stringa all'interno callMeToo()
?
Una possibilità (molto scomodo) sarebbe, a chiedere qualche metodo i18n nel costruttore, in questo modo:
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);
}
ma a caro prezzo sperare in una soluzione più elegante.
Modifica 1: Oltre alla sostituzione di stringa semplice, il campo di i18n è ampio. La premessa è che non voglio confezionare alcuna soluzione i18n con la mia libreria o costringere l'utente a sceglierne uno specifico per soddisfare il mio codice.
Quindi, come posso strutturare il mio codice per consentire la localizzazione migliore e più flessibile per diversi aspetti: traduzione di stringhe, formattazione di numeri e valute, date e orari, ...? Supponiamo che uno o l'altro appaiano come output dalla mia libreria. In quale posizione o interfaccia lo sviluppatore consumatore può collegare la sua soluzione di localizzazione?
Grazie, interessante. Fondamentalmente, il suggerito 'loadStrings' sembra essere una buona partita per le mie esigenze. Conosci qualche progetto in natura, come lo affrontano? (Zend è tuttavia esentato, hanno la loro libreria i18n.) – Boldewyn
@Boldewyn Conosco un paio di progetti closed source che gestiscono questo modo, ma devo riflettere su un progetto open source. La maggior parte non sono affatto localizzati e se lo sono, usano gettext ... – ckruse
Sì, questo è esattamente il mio problema, purtroppo ... – Boldewyn