Vielleicht hat es der ein oder andere bemerkt, ich versuche hier gerade etwas zweisprachiger zu werden.

Meine letzten Posts hier, konnte man auch immer auf englisch nachlesen. Das soll auch in Zukunft so bleiben und ich m├Âchte au├čerdem alle anderen Seiten Schritt f├╝r Schritt ├╝bersetzen.

Ganz so begeistert von den Bordmitteln, die von Kirby kommen, bin ich dann doch nicht, aber es l├Ąsst sich machen. Ich habe mir dazu ein kleines Snippet geschrieben und meinen Blog-Header noch etwas modifiziert.

Das Problem ist, dass Kirby, wenn eine ├ťbersetzung nicht vorhanden ist, den Text einfach auf Deutsch anzeigt. Das will ich nicht, wenn keine ├ťbersetzung vorhanden ist, soll man auch nicht auf den Sprachlink klicken k├Ânnen. Dazu habe ich den Standard-Code f├╝r den Sprachwechsler ein wenig modifiziert.

So funktioniert es besser

Im Snippet selber versuche ich zun├Ąchst herauszufinden, welches Template der aktuelle Beitrag benutzt (der Templatename entspricht dem ersten Teil des Dateinamens). Mit dieser Information kann ich dann nachsehen, ob es eine entsprechende Datei f├╝r die englische (oder deutsche, je nachdem) Version des Textes gibt. Ist diese vorhanden, gibt es einen Link, ansonsten ist die ├ťbersetzung nicht anw├Ąhlbar.

Hier ein Ausschnitt:

<?php foreach(c::get('lang.available') as $lang) : ?>
    <?php if($lang != c::get('lang.current')) : ?>
        <?php if($page->files()->find($page->template().'.'.$lang.'.md')) : ?>

Damit man in der URL das "de" nicht einfach zu einem "en" machen kann und dann doch wieder die Deutsche Version (unter der "en"-URL) angezeigt bekommt, habe ich noch folgendes in mein Template (bzw. das header-snippet, welches ich benutze) eingebaut:

<?php
    $lang = c::get('lang.current');
    $other = ($lang == 'de') ? 'en' : 'de';
    $template = $page->template();
    if($page->files()->find($template.'.'.$lang.'.md') == NULL) {
        header ('HTTP/1.1 303 See Other');
        header('Location: '.$page->url($other));
    }
?>

Zun├Ąchst gucke ich, welche Sprache gerade gew├Ąhlt ist und suche mir das Gegenst├╝ck dazu. Dann folgt wieder der Test, ob es eine ├ťbersetzung gibt. Wenn nicht, verweise ich auf die deutsche Version.

Ich bin mir noch nicht sicher, ob das mit dem 303-Header so wirklich korrekt ist, es erschien mir aber die beste Variante zu sein. Diese Variante funktioniert nat├╝rlich auch nur bei zwei Sprachen, gibt es mehrere, muss man noch mal Hand anlegen.

Meine Snippets gibt es, wie immer, auf GitHub.