現在の言語をLARVER VIEWに表示するにはどうすればいいですか?

StackOverflow https://stackoverflow.com//questions/12706463

  •  13-12-2019
  •  | 
  •  

質問

私のWebアプリのローカライズのためにLaravel Langクラスを使用しています。application/config/application.phpで言語配列に2つの言語を追加しました。これにより、ローカライゼーションに使用するデフォルトの言語が、URIの最初の部分が示すようなデフォルトの言語を変更します(たとえば、bla.com/en/blaとbla.com/co/bla)。現在、現在のデフォルト言語が私のビューにあるものを確認できるようにする必要があります。ただし、Lang::$language変数が保護されるため、LANGクラスは私が把握できなかった限りこれをチェックする方法はありません。手動でURIを解析することと別々にこれをチェックする方法はありますか?

役に立ちましたか?

解決

ベンジャミン州の答えはとても良いです、そして彼の提案されたアプローチは完全に機能します。私はスニペットを少し改善しました。これでブラウザの言語を検出し、アプリケーションの設定ファイルに従ってその言語がサポートされているかどうかを確認します。

それは急なハックですが、それは私のアプリで動作します。アプリケーション言語も今設定されていることに注意してください。鉱石を改善することを自由に感じます。

Route::filter('before', function()
{
    // current uri language ($lang_uri)
    $lang_uri = URI::segment(1);

    // Set default session language if none is set
    if(!Session::has('language'))
    {
        // use lang in uri, if provided
        if(in_array($lang_uri, Config::get('application.languages')))
        {
            $lang = $lang_uri;  
        }
        // detect browser language
        elseif(isset(Request::server('http_accept_language')))
        {
            $headerlang = substr(Request::server('http_accept_language'), 0, 2);

            if(in_array($headerlang, Config::get('application.languages')))
            {
                // browser lang is supported, use it
                $lang = $headerlang;
            }
            // use default application lang
            else
            {
                $lang = Config::get('application.language');
            }
        }
        // no lang in uri nor in browser. use default
        else 
        {
                // use default application lang
                $lang = Config::get('application.language');            
        }

        // set application language for that user
        Session::put('language', $lang);
        Config::set('application.language',  $lang);
    }
    // session is available
    else
    {
        // set application to session lang
        Config::set('application.language', Session::get('language'));
    }

    // prefix is missing? add it
    if(!in_array($lang_uri, Config::get('application.languages'))) 
    {
        return Redirect::to(URI::current());
    }
    // a valid prefix is there, but not the correct lang? change app lang
    elseif(in_array($lang_uri, Config::get('application.languages')) AND $lang_uri != Config::get('application.language'))
    {
        Session::put('language', $lang_uri);
        Config::set('application.language',  $lang_uri);    
    }
});
.

他のヒント

Laravelのあなたのウェブサイトの現在の言語を知る最もクリーンな方法は次のように思われます:

Lang::locale();
.

https://laravel.com/api/5.8/IMILUMINANINE/translation/translator.html#method_locale

あなたのウェブサイトのデフォルト言語を返すこのコマンドとは異なります。

Config::get('app.locale');
.

新しいLaravelバージョンでは、現在の言語を取得できます。

Config::get('app.locale');
.

私は言語問題に対する解決策を考え出した(IRCのニックストラップとこの質問に対する受け入れられた答えのおかげで)。現在の言語をセッション変数として格納することを含みます。これは、言語URIセグメントが変更されたときに更新されます。

Route::filter('before', function()
{
    // Do stuff before every request to your application...

    // Default language ($lang) & current uri language ($lang_uri)
    $lang = 'he';
    $lang_uri = URI::segment(1);

    // Set default session language if none is set
    if(!Session::has('language'))
    {
        Session::put('language', $lang);
    }

    // Route language path if needed
    if($lang_uri !== 'en' && $lang_uri !== 'he')
    {
        Return Redirect::to($lang.'/'.URI::current());
    }
    // Set session language to uri
    elseif($lang_uri !== Session::get('language'))
    {
        Session::put('language', $lang_uri);
    }
});
.

代替案では、少し短い方法がこのようなものを使用することができます:

app()->getLocale()
.

これの利点は、PhpStormなどのIDESがこの機能を認識し、あなたがはるかに速く開発するのに役立ちます。

これはうまくいくでしょう

lang="{{ app()->getLocale() }}"
.

これは役に立つかもしれません。 config :: get( 'application.language')

を使うことができます
https://github.com/mcamara/laravel-localization
.

Laravelローカライゼーションは、要求に与えられたURLを使用します。この目的を達成するために、グループをroutes.phpファイルに追加する必要があります。ローカライズする必要があるすべてのページをフィルタリングします。

    // app/routes.php

    Route::group(array('prefix' => LaravelLocalization::setLanguage()), function()
    {
        /** ADD ALL LOCALIZED ROUTES INSIDE THIS GROUP **/
        Route::get('/', function()
        {
            return View::make('hello');
        });

        Route::get('test',function(){
            return View::make('test');
        });
    });

    /** OTHER PAGES THAT SHOULD NOT BE LOCALIZED **/
.

ルートファイルにこのグループが追加されると、ユーザーは[LanguagesAllowed]( 'en'と 'ES'に追加されたすべての言語にアクセスできます。デフォルトでは、そのオプションを変更するための設定セクションを調べます。たとえば、次のアドレスを使用して、ユーザーが2つの異なる言語にアクセスできるようになりました。

http://lavel.com/ja

http://lavel.com/es

http://laravel.com

Langクラスは特に正しい言語を出力するためのものであり、あなたが言語を内部的に管理するように。

APIを通して見る

これを直接あなたを助ける方法はありません。

URIの言語文字列を取得するには、必ずこれを行うことができます。

$language = URI::segment(1);
.

Laravelリクエスト

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top