1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Laravel Translation. Wie am besten?

  • PixelPatron
  • 6. August 2024 um 19:25
  • Erledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • PixelPatron
    Punkte
    4.131
    Beiträge
    733
    • 6. August 2024 um 19:25
    • #1

    Grüsse meine lieben,

    wollte mal wissen von denjenigen die mit Laravel arbeiten wie ihr das mit der Translation umsetzt.

    Was ist eher geeignet?

    @lang('Ich schreibe meinen Text einfach so!')

    @lang('base.ich_schreibe_meinen_text_so')

    Der Grund warum ich frage ist ich würde gerne die Möglichkeit nutzen und meine Übersetzungen in der Datenbank verwalten. Mit dem gedachte Spatie Plugin haut er mir raus das der Key zu lange ist wenn ich Variante 1 nutze. Variante 2 ist mir einfach zu aufwendig. Bei variante 1 kann ich einfach schreiben und gut ist ..

    bin gespannt

    <3

  • Zur hilfreichsten Antwort springen
  • Syntafin
    Punkte
    7.925
    Beiträge
    1.439
    • 6. August 2024 um 21:22
    • #2
    Code
    {{ $t('form.save') }}

    Zu Blade Zeiten aber wäre es @lang('user.save') geworden, was dann einfach "Speichern" oder "Save" in Englisch wäre.

  • PixelPatron
    Punkte
    4.131
    Beiträge
    733
    • 6. August 2024 um 22:24
    • #3

    Okay und wie merkst du dir das alles? Oder hast du nen Plugin das dir die String später in eine json setzt? :D

  • Syntafin
    Punkte
    7.925
    Beiträge
    1.439
    • 7. August 2024 um 20:21
    • #4

    Ich bekomme die als Autovervollständigung angezeigt, ähnliches gibt es auch für zB VS Code (war Teil des Laravel Paketes), ansonsten ja es ist eine riesige JSON Datei bei mir :D

    Sollte ich mal eine Möglichkeit finden das anders zu lösen, ist das auf alle Fälle etwas das ich tun werde.

  • PixelPatron
    Punkte
    4.131
    Beiträge
    733
    • 7. August 2024 um 20:38
    • #5

    Ah. und warum nutzt du mittlerweile wieder t() statt @lang?

  • Syntafin
    Punkte
    7.925
    Beiträge
    1.439
    • 7. August 2024 um 21:25
    • Hilfreichste Antwort
    • #6

    In Blade Templates würde/verwende ich weiterhin @lang, das ist nur kein Blade Template ^^

  • PixelPatron 7. August 2024 um 21:30

    Hat einen Beitrag als hilfreichste Antwort ausgewählt.
  • PixelPatron
    Punkte
    4.131
    Beiträge
    733
    • 8. August 2024 um 22:01
    • #7

    Ich verstehe nur nicht warum das json bei mir so wie es bei dir aussieht nicht funktionieren mag:

    Code
    {
    "name": "Das geht!",
    "form": {
    "lastName": "Nachname",
    "name": "Name"
    }
    }

    Wobei es nur verschachtelt nicht geht ..

  • Syntafin
    Punkte
    7.925
    Beiträge
    1.439
    • 9. August 2024 um 06:08
    • #8

    Mal eben nachgeschaut und nein, bei JSON wird kein Nested unterstützt :) .

    Meine JSON Dateien sind auch ausschließlich für das Frontend gedacht.

  • PixelPatron
    Punkte
    4.131
    Beiträge
    733
    • 9. August 2024 um 12:41
    • #9
    Zitat von Syntafin

    Mal eben nachgeschaut und nein, bei JSON wird kein Nested unterstützt :) .

    Ich habe eine Lösung gefunden die auch wunderbar mit nested arbeitet. Poste sobald ich etwas Zeit finde die Lösung für Laravel 11 :)

    Lösung für Laravel Lang JSON nested Files:

    1) Erstelle eine Translator Klasse unter app/Translation/Translator.php

    Folgender Inhalt für Translator.php
    PHP
    <?php
    
    namespace App\Translation;
    
    use Illuminate\Support\Arr;
    use Illuminate\Translation\Translator as BaseTranslator;
    
    class Translator extends BaseTranslator
    {
        /**
         * @param $key
         * @param array $replace
         * @param $locale
         * @param $fallback
         *
         * @return array|string|null
         */
        public function get($key, array $replace = [], $locale = null, $fallback = true)
        {
            $results = parent::get($key, $replace, $locale, $fallback);
    
            // If the key does not contain nested translation
            // or the result did not return the key back, then it's okay
            if (!str_contains($key, '.') || $results !== $key) {
                if (is_array($results)) {
                    return $key;
                }
    
                return $results;
            }
    
            $locale = $locale ?: $this->locale;
            $line = Arr::get($this->loaded['*']['*'][$locale], $key);
    
            // Handle fallback to default language
            if (!isset($line) && $fallback && !empty($this->getFallback()) && $locale !== $this->getFallback()) {
                $this->load('*', '*', $this->getFallback());
                $line = Arr::get($this->loaded['*']['*'][$this->getFallback()], $key);
            }
    
            return $this->makeReplacements($line ?: $key, $replace);
        }
    }
    Alles anzeigen

    2) Hänge die Klasse in app/Providers/AppServiceProvider.php an

    Folgender Inhalt für AppServiceProvider.php
    PHP
    <?php
    
    // top code
    
    public function boot(): void
        {
            $this->app->extend('translator', function ($service, $app) {
                $translator = new Translator($service->getLoader(), $service->getLocale());
                $translator->setFallback($service->getFallback());
    
                return $translator;
            });
        }
        
    // bottom code
    Alles anzeigen

    Jetzt kannst du mit

    Code
    {{ __('nested.key') }}

    oder

    Code
    @lang('nested.key')

    deine Übersetzungen in deiner Laravel App abrufen. Beachte das du deine Lang Files nun zb als de.json speicherst.

    Code
    {
    	"form": {
    		"label": {
    			"lastName": "Last name",
    			"firstName": "First Name"
    		}
        },
    }

    4 Mal editiert, zuletzt von PixelPatron (9. August 2024 um 17:54)

  • Informatik-Forum
    Punkte
    110
    Beiträge
    22
    • 9. August 2024 um 19:18
    • #10

    evarioo hat das Thema gepusht.

  1. Datenschutzerklärung
  2. Impressum