2016-06-18 12 views
4

Ich fange an, eine Website mehrsprachige hinzufügen, die Laravel für Frontend verwendet.Laravel - Geben Sie eine Standard/Fallback-Zeichenfolge für mehrsprachige

Aufgrund des Mangels an Ressourcen im Moment, übersetze ich die Strings, wie ich gehe. Es wird eine Weile dauern, bis die ganze Seite übersetzt ist.

Die einzige Herausforderung ist, dass, wenn ein Text nicht übersetzt wird, was angezeigt wird, der Schlüssel ist. Ich möchte eine Standard/Fallback-Zeichenfolge für solche angeben.

z.B.

{{ trans('site.'.$name) }} 

Wenn ich ‚Business‘ als $ name übergeben und es gibt keine Übersetzung für ‚Business‘ in seite.php lang ich mit site.Business auf dem Frontend am Ende Datei. Das vermasselt alles. Im schlimmsten Fall, wenn es keine site.Business gibt, sollte Laravel Business ausgeben.

Noch besser sollte es eine Option für Standard/Fallback-String bieten.

Ist das möglich?

Auf einer Seitennotiz gibt es eine freie Übersetzung für allgemeine Wörter? Das spart Zeit, da ich alles selbst übersetzen muss.

Danke.

Antwort

2

Die Ausweichsprache ist, was Sie verwenden sollten. Siehe docs

Sie können auch eine „Ausweichsprache“ konfigurieren, die verwendet wird, wenn die aktive Sprache keine bestimmte Sprache Zeile enthält. Wie die Standardsprache wird die Ausweichsprache auch in der app/config/app.php Konfigurationsdatei konfiguriert:

'fallback_locale' => 'en',

Es wird sicher nehmen Sie nur so viel Zeit in Ausweich Schreiben inline als es einfach zu schreiben würde das Zurückfallen in eine parallele Übersetzungsdatei, während Sie in den Übersetzungsschlüssel schreiben. Die Zeit, die damit verbracht wird, über einen alternativen Weg nachzudenken, anstatt es einfach zu tun, wird am Ende vernachlässigbar sein.

Wenn Sie wirklich ein Inline-Fallback möchten, müssen Sie eine neue Hilfsmethode erstellen, die etwas anderes macht. Also bereite dich auf eine gebraute Großartigkeit vor.

Lassen Sie uns eine neue Funktion erstellen, die wir in jeder Ansicht verwenden können. Ich werde die von Joseph Sibler beschriebene Methode verwenden. Erstellen Sie eine Datei namens helpers.php innerhalb app. Dann fügen Sie das zu Ihrem composer.json in dem autoload Objekt unter einem files Array wie "app/helpers.php" hinzu. Nicht sicher, was ich meine? Siehe seine Antwort. Führen Sie nach dem Hinzufügen composer dump-autoload aus.

Nun fügen wir eine trans_fb() Methode hinzu, die alle Parameter der trans() Methode verwendet, aber auch mit einem Fallback. Ich werde diese Methode so definieren, dass die ersten beiden Argumente benötigt werden (der Schlüssel und der Fallback).

Wenn Laravel den Übersetzungsschlüssel nicht finden kann (er sucht z. B. in resources/lang/en/auth.php als auth.failed als Schlüssel), wird stattdessen das Fallback verwendet und alle anderen optionalen Argumente für die ursprüngliche Methode übergeben.

<?php 

if (! function_exists('trans_fb')) { 
    /** 
    * Translate the given message with a fallback string if none exists. 
    * 
    * @param string $id 
    * @param string $fallback 
    * @param array $parameters 
    * @param string $domain 
    * @param string $locale 
    * @return \Symfony\Component\Translation\TranslatorInterface|string 
    */ 
    function trans_fb($id, $fallback, $parameters = [], $domain = 'messages', $locale = null) 
    { 
     return ($id === ($translation = trans($id, $parameters, $domain, $locale))) ? $fallback : $translation; 
    } 
} 

Sie können diese dann in einer Vorlage verwenden, etwa so:

{{ trans_fb("i.love.laravel", "I love Laravel!") }}

+0

ich über die Ausweichsprache schon fertig hatte, aber in meiner Situation nicht lebensfähig aussehen. Ich werde versuchen, eine alternative Hilfsfunktion wie vorgeschlagen zu verwenden. Vielen Dank. –

+0

Wenn es nicht lebensfähig war, dann sollte das alles sein, was du brauchst :) Viel Glück. – Jonathan

+1

Ehrfürchtig. Die Verwendung der Hilfsfunktion macht die Magie. Vielen Dank. –