1unitedpower: bestimmte Sprache aus mehrsprachigem String filtern

Beitrag lesen

HTML-Platzhalterdateien können mehrsprachig sein. Die Anzahl der Sprachen ist von Programm zu Programm variabel. Alle Programme haben de, en, nl - aber ich schließe nicht aus, dass neue Programme auch fr, es, ... können und die alten nach und nach erweitert werden.

<p>textA: ###de###en###nl### textB: ###deutsch###english###Nederlands###</p>

Ich habe deinen Lösungsweg ehrlichgesagt nicht verstanden. Aber PHP hat auch einen eigenen Mechanismus um Platzhaler in Templates zu ersetzen. Die Syntax ist etwas anders als bei dir und vielleicht etwas gewöhnungsbedürftig, aber dafür musst du das Template nicht mehr selber nach Platzhaltern durchsuchen und sie ersetzen. Damit ließe sich sehr einfach eine ähnliche Übersetzungsfunktion bauen:

final class Lang
{
    const DE = 0;
    const EN = 1;
    const NL = 2;
}

$translate = function (int $key, string ...$dictionary) : string {
    return $dictionary[$key];
}

function render(int $lang) : string {
    return <<<HTML
        <p>
            textA: {$translate($lang, 'de', 'en', 'nl')}
            textB: {$translate($lang, 'deutsch', 'english', 'Netherlands')}
        </p>
        HTML;
}

render(Lang::DE);

$translate muss in diesem Fall ein Closure sein, weil normale Funktionen innerhalb von String-Platzhaltern nicht aufgerufen werden können.