2016-04-22 1 views
0

Ich habe unterhalb Code in meinem Controller.Fehler beim Versuch, Ordner in Ressourcen zu platzieren/lang/de: Laravel 5.2

public function AllCountries() { 
    $Countries = (new \App\DataAccess\CountryData())->GetAllCountries(); 
    app()->setLocale('fr'); 
    return view('Country.List')->with('Countries', $Countries->getData()->CountryList); 
} 

Definition von Verfahren zum Abrufen von Daten ist unten.

public function GetAllCountries() { 
    return response()->json(['CountryList' => \App\Models\CountryModel::all()]); 
} 

Unten finden Sie den Screenshot, die

enter image description here

Below Translation Array zeigt ist der Screenshot, der die Ansicht von Controller verfügt über nur ein Wort Übersetzung zeigen nur aufgerufen zeigt.

enter image description here

Wenn ich die Anwendung ausführen, Fehler erhalten folgende ich.

Verwendung von undefinierter Konstante CountriesList - angenommen 'CountriesList' (Ansicht: C: \ xampp \ htdocs \ Account \ resources \ Ansichten \ Land \ List.blade.php)

Normalerweise wenn wir Webseiten sehen, die in unserem Browser keine Standardsprache sind. Wir sehen eine Benachrichtigung, um die Seite beim Laden der Seite zu übersetzen. Siehe den Screenshot unten.

enter image description here

Aber das kommt nicht auf meiner Seite. Obwohl ich französische Sprache sehe, aber Übersetzungsmitteilung nicht kommt. Warum?

+0

Sie meinen, Sie schneiden views/Land/List.blade.php zu lang/en? – lukaserat

+0

Ich ziehe Land Ordner anzeigen zu Ressourcen/lang/en – Pankaj

+0

Und es gibt noch views/Land/List.blade.php? Wenn das so ist, dann denke ich, dass der 404, den du bekommst, nicht mit view oder lang verbunden ist. Ich habe nicht versucht, Großbuchstaben beim Erstellen von Lang-Dateien zu verwenden. Versuchen Sie vielleicht, nur Kleinbuchstaben zu verwenden. Wenn Sie lang/en/Country.php Datei haben, dann können Sie es als trans zu bekommen („Land. “) – lukaserat

Antwort

1

Lesen für mehr darüber, wie funktioniert die Lokalisierung in Laravel:

können Sie ähnliche Anwendungssprache so ändern

https://laravel.com/docs/5.2/localization#introduction

Wenn Sie wirklich die gesamte Vorlage außer Kraft setzen möchten, Sie können dies selbst tun:

$app->getLocale() 
App::getLocale() 

(aber ich schlage nicht vor, dass dies in der Regel eine gute Idee ist - normalerweise ist die Übersetzung von Strings eine bessere Idee.)

Diese Funktionen geben das Gebietsschema zurück, so dass Sie diese verwenden können, um die entsprechende Ansicht (z. Platzieren Sie alle jp Ansichten innerhalb eines jp/Verzeichnis.)

Sie ein ViewFactory der exists() Methode können Sie prüfen, ob es vorhanden ist, und Ersatz-Logik implementieren, wie Sie möchten. Es könnte sehr viel Sinn machen diese auf Ihrem eigenen Controller-Basisklasse zu implementieren (die aus dem Rahmen eines erben würde), und haben alle Ihre Controller diese neue Basisklasse Unterklasse. Auf diese Weise kann die Logik geteilt werden.

Etwas ungefähr so, zum Beispiel:

namespace App\Http\Controllers; 

use Illuminate\Foundation\Bus\DispatchesJobs; 
use Illuminate\Routing\Controller as BaseController; 
use Illuminate\Foundation\Validation\ValidatesRequests; 
use Illuminate\Foundation\Auth\Access\AuthorizesRequests; 
use Illuminate\Foundation\Auth\Access\AuthorizesResources; 

class Controller extends BaseController 
{ 
    use AuthorizesRequests, AuthorizesResources, DispatchesJobs, ValidatesRequests; 

    protected function localeViewResponse($view, $data = [], $mergeData = []) 
    { 
     $factory = view(); 
     $locale = app()->getLocale(); 

     if ($view->exists($locale . '.' . $view)) { 
      return $view->make($locale . '.' . $view, $data, $mergeData); 
     } 

     return $view->make($view, $data, $mergeData); 
    } 
} 

aber sagen, dass wieder, sollten Sie wirklich in Betracht ziehen, wenn Sie dies tun müssen. Angads Methode wird für andere Leute, die mit Laravel vertraut sind, Sinn ergeben und ist normalerweise der bessere Ansatz. Wenn Sie Probleme mit "undefinierter Konstante" haben, stellen Sie sicher, dass Sie die Dinge richtig angeben, und versuchen Sie, Ihre Frage mit dem von Ihnen versuchten Code zu aktualisieren.

+0

Können Sie einige Beispiel-Code auf Controller-Seite teilen? Ich schreibe den Code im Controller, um die Ansicht zurückzugeben. In Ihrem Link denke ich, dass es route-Datei verwendet. Ich möchte französische Standardsprache anzeigen. – Pankaj

+0

Ich habe ein Beispiel hinzugefügt. Sie können dies auch in eine separate Klasse einfügen und sie in den Konstruktor des Controllers einfügen. –

+0

Ich habe die Änderung gemacht, um meine Frage klarer zu machen. Bitte überprüfen Sie jetzt, – Pankaj

0

Sie gehen falsch vor.

Laravel, wie die meisten anderen MVC-Frameworks bietet aus der Box Lokalisierungsunterstützung: https://laravel.com/docs/5.2/localization

So ein besserer Ansatz die folgende wäre:

Dateien bietet erstellen Sprache für die Sprachen Ihrer Anwendung (für zB: Englisch und Französisch).

resources 
    | lang 
    | en 
     | countries.php 
    | fr 
     | countries.php 

In jeder der Sprachdateien würden Sie die Übersetzungen für Variablen entsprechend gesetzt:

// resources/lang/en/countries.php 
return [ 
    'india' => "India" 
]; 


// resources/lang/fr/countries.php 
return [ 
    'india' => "Inde" 
]; 

Hinweis: Ich weiß nicht, französisch Ich verwende Google für dieses Beispiel übersetzen

Dann aus Ihrer Sicht:

{{ trans('countries.india') }} 

Th Der Wert wird abhängig von der Anwendungseinstellung in der entsprechenden Sprachdatei angezeigt.

hier
Route::get('countries/{locale}', function ($locale) { 
    App::setLocale($locale); 

    return view('countries.list'); 
}); 
+0

Ich weiß, dass ich WordPress (CMS) nicht mit Laravel vergleichen kann. In Wordpress konnten wir eine andere Seite für Englisch und eine andere Seite für eine andere Sprache erstellen. Es ist also nicht notwendig, eine Datei für die Übersetzung und eine andere Datei für die Ansicht zu erstellen, um eine Übersetzung zu erhalten. Gibt es einen besseren Weg, die Übersetzung zu implementieren? kann etwas wie Wordpress sein? – Pankaj

+0

@Helper Diese Methode macht es meiner Meinung nach einfacher, die Lokalisierung zu pflegen und zu erweitern. Sicher sehen Sie den Vorteil, dies zu nutzen, als Wordpress es tut. –

+0

@Helper Sie erwähnen in Wordpress müssen Sie 1 Ansicht pro Sprache erstellen. Ist es nicht besser 1 Sprachdatei pro Sprache zu erstellen und nur 1 Ansicht? –