用于语言切换的本地化不起作用

问题描述

正在寻找创建一些按钮,这些按钮在按下时会将语言环境设置为相应的语言。

已遵循准则表格Laravel site

我的理解是,通过在方法中设置语言,它将仅在整个请求中都有效,并且由于我在方法中具有“ return back()”,因此当移回索引页面时,该设置将不可见。 >

由于缺少setLocale的持久存储,我通过Laravel会话助手将值存储在$ _SESSION中。

我也知道我应该使用中间件并将一些代码从控制器移到中间件,但这不会对这个简约测试造成任何问题。


测试:

  1. 经过测试可直接在路线中设置区域设置,效果很好(请参见路线中未注释的文本)。

  2. 在每种语言的方法中测试了回显文本,以确保按钮触发该方法(正常工作)。

  3. 添加了打印输出,以检查会话是否包含['language']的值。

    $data = $request->session()->all();

    print_r($data);

  4. 在“ config / app.PHP”语言环境” =>“ en”中进行了调整,调整为“语言环境” =>“ es”,并确保系统确实更改了语言。

  5. 删除方法中的所有内容并仅添加了(每个方法一行):

    App::setLocale('en');

    App::setLocale('es');

  6. 在以下方法中设置
  7. ,以控制语言环境的值实际发生变化。确实可以,但是当该方法用户送回索引页面时,更改似乎并不持久。

    echo app()->getLocale();


问题:本地化解决方案不起作用的原因是什么?

web.PHP

<?PHP

use Illuminate\Support\Facades\Route;

Route::get('/',function () {
  // App::setLocale('es'); // -> This works.
    return view('index');
});

// Route through button,not form.
Route::get('/english','LanguageHandler@setLanguagetoEnglish');
Route::get('/spanish','LanguageHandler@setLanguagetoSpanish');

index.blade.PHP

<a href="/english">
  <button>
    English
  </button>
</a>

<a href="/spanish">
  <button>
    Spanish
  </button>
</a>

<br><br>

<h2>
  {{ __('text.introduction') }}
</h2>

LanguageHandler.PHP

namespace App\Http\Controllers;
use Illuminate\Http\Request;

class LanguageHandler extends Controller
{

    function setLanguagetoEnglish()
    {
      // echo "Language set to English!"; // For troubleshooting.

      \Session::put('language','en');
      \App::setLocale(\Session::get('language'));

      return back();
    }



    function setLanguagetoSpanish()
    {

    // echo "Language set to Spanish!"; // For troubleshooting.

    \Session::put('language','sp');
    \App::setLocale(\Session::get('language'));

    return back();
    }
}

resources / lang / zh-CN / text.PHP

<?PHP

return [
    'introduction' => 'Apple',];

资源/lang/sp/text.PHP

<?PHP

return [
    'introduction' => 'Manzana',];

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)