Wie Laravel Eloquent Mehrsprachigkeit lernen kann

aktualisiert am 28. Januar 2019, erstellt am 11. Januar 2017 von Dirk Helbert in Laravel
Laravel Eloquent Mehrsprachigkeit

Ich habe die ganze Zeit überlegt, wie ich Laravel Eloquent Mehrsprachigkeit beibringen kann. Wer mit Laravel eine internationale Seite umsetzen will, der kennt das Problem. In der Datenbank sind Informationen, die noch zu übersetzen sind. Doch wie funktioniert das eigentlich? Muss ich für jeden Eintrag in der Datenbank auch einen Eintrag in einer Übersetzungsdatei eintragen?

Nein, mit einem Trait für Laravel von Spatie, einer Agentur in Belgien, wird das total einfach. Dabei werden die Übersetzungen als Json gespeichert und zwar ohne zusätzliche Tabelle oder Tabellenfelder.

Hol dir jetzt mein kostenloses E-Book
Geben Sie Ihre Email Adresse ein und klicken Sie auf den Knopf "Sofort Zugang erhalten".
Ich stimme zu, dass meine Daten beim Newsletter Provider Mailchimp gespeichert werden. ( Datenschutzerklärung und Datenschutz Mailchimp )
Mit der Anforderung des eBooks meldest du dich zu meinem kostenlosen E-Mail Newsletter mit relevanten Informationen zur Webentwicklung sowie meinen Büchern und Leistungen an.

Laravel Eloquent Mehrsprachigkeit in wenigen einfachen Schritten

Ich benutze dazu Laravel 5.7.22 und erstelle ein neues Projekt

composer create-project laravel/laravel spatie-laravel-translatable
cd spatie-laravel-translatable
composer require spatie/laravel-translatable
php artisan serve

Und die Fallback Sprach Konfiguration kopieren:

php artisan vendor:publish --provider="Spatie\Translatable\TranslatableServiceProvider"

Dort steht dann 'fallback_locale' => 'en', drin. Wenn du als Ausgangssprache Deutsch benutzt, dann kannst du hier auch de eintragen. Grundsätzlich ist es bei mehrsprachigen Anwendungen aber wohl besser Englisch als Hauptsprache zu nutzen. Schliesslich versteht das dann auch so ziemlich jeder. Auch ohne Übersetzung.

Da ich gerade selbst einen WordPress Clone für mich entwickle, passt das Thema eigentlich ganz gut.

Ich erstelle jetzt eine Post Model mit:

php artisan make:model Post -m

Jetzt habe ich das Model und die Datenbank Migration. In der .env setze ich die Datenbank Verbindung auf sqlite.

DB_CONNECTION=sqlite 

Den Rest der DB_ Einträge entferne ich. Dann noch die /database/database.sqlite anlegen.

touch database/database.sqlite // Mac OS und Linux
type nul > database/database.sqlite // Windows

Ich öffne das Model unter /app/Post.php und füge den Trait ein

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Spatie\Translatable\HasTranslations;

class Post extends Model
{
    use HasTranslations;

    public $translatable = ['title'];
}

Der title soll in meinem Fall übersetzbar sein.

In die Migrationsdatei des Post Models das title Feld hinzufügen.

Schema::create('posts', function (Blueprint $table) {
    ...
    $table->string('title');
    ...
}); 

Und mit php artisan migrate die Datenbank und alle Tabellen erstellen.

Die Magie beginnt

Jetzt kommen wir langsam zur Magie dieser Komponente.

Zu Testzwecken erstelle ich in /routes/web.php eine Dummy Route um die erste Übersetzung einzufügen.

Route::get('/preparetranslation', function() {
    $translations = [
        'en' => 'Laravel Beginner Tutorial',   
        'de' => 'Laravel Anfänger Tutorial'   
    ];
    $post = new App\Post();
    $post->setTranslations('title', $translations);
    $post->save();
 }); 

Ich rufe das Projekt jetzt mit http://localhost:8000/preparetranslation auf und bekomme eine weiße Seite. Das ist so gewollt.

Jetzt passe ich noch die andere Route an.

Route::get('/', function () {
    $post = App\Post::first();
    echo $post->title;
}); 

Jetzt http://localhost:8000 aufrufen und es erscheint:

Laravel Beginner Tutorial

Wenn ich jetzt in der /config/app.php die locale ändere

'locale' => 'de',

und die Seite noch mal aufrufe, erhalte ich

Laravel Anfänger Tutorial

Wie geil und einfach ist das denn?

Ich werde diese Komponente auf jeden Fall mal näher anschauen. Das ist echt cool. Und diese Laravel Eloquent Mehrsprachigkeit hat mir noch bei meinem Blog Projekt gefehlt.

Danke an Freek Van der Herten und seinen Twitter Post.

Wenn dir dieser kleine Tipp gefallen hat, dann hinterlass doch einfach einen Kommentar. Ich freue mich. Hast du noch nicht so viel mit Laravel gemacht? Vielleicht kann ich dich für mein Laravel 5 Anfänger Tutorial begeistern.

Laravel Version : 5.7.22

4 Kommentare zu “Wie Laravel Eloquent Mehrsprachigkeit lernen kann”

    1. Ich benutze gerne die SQLite Datenbank, weil es für Tutorials einfacher ist. Da brauche ich nur eine Datei anlegen und kann direkt loslegen. Nicht immer ist lokal ein MySQL Server vorhanden. Im Produktivsystem setze ich allerdings dann auch auf MySQL.

  • Hallo Dirk,
    ich nutze sonst stets Codeignator. Und habe mir heute mal Dein Tutorial reingezogen. Es ist gut und es hat spaß gemacht. Nun werde ich mal testweise (versuchen) ein altes projekt von mir mit laravel umsetzen.

    Ich bin echt einwenig begeistert von dem was ich bis jetzt gelesen haben. coole sache 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.