0

我试图在 laravel 中创建多语言视图我设置了所有内容但是当我将 config/app.php 中的本地化从“en”更改为“ar”时......它保持“en”并且我使用函数 App::getLocal 进行了测试

我的“en”翻译文件“messages.php”

'''

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Authentication Language Lines
    |--------------------------------------------------------------------------
    |
    | The following language lines are used during authentication for various
    | messages that we need to display to the user. You are free to modify
    | these language lines according to your application's requirements.
    |
    */
"offer name required" => "the name field is required",
"offer name max" => "the name cannot exceed 100 characters",
"offer name unique" => "offer name is already used",
"offer photo required" => "photo field is required also"
];

''' 代表“ar”

'''

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Authentication Language Lines
    |--------------------------------------------------------------------------
    |
    | The following language lines are used during authentication for various
    | messages that we need to display to the user. You are free to modify
    | these language lines according to your application's requirements.
    |
    */
"offer name required" => "يجب ادخال اسم العرض",
"offer name max" => "يجب أن لا يتعدى الاسم 100 عنصرا",
"offer name unique" => "هذا الاسم غير متوفر",
"offer photo required" => "يجب ادخال رابط الصورة"
];

''' 当我使用此代码打印一条消息进行测试时:'''

<?php

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

class locale extends Controller
{
    function getlocal(){
 
     echo __('messages.offer name required');
     echo(' <br> ');
   
}}

'''

即使我将它 locale="ar" 放在 app.php 中,它也总是以英文打印

我希望你能帮我解决这个问题..如果你需要任何额外的信息告诉我..谢谢你的时间

4

2 回答 2

0
  1. 您可以尝试使用php artisan config:clear命令清除缓存。

  2. 可能是空格的问题。尝试改变

    // "offer name required" => "يجب ادخال اسم العرض",
    'offer_name_required' => 'يجب ادخال اسم العرض',
    
    // echo __('messages.offer name required');
    echo __('messages.offer_name_required');
    
于 2020-09-24T13:19:43.230 回答
0

我建议将语言存储在会话中并使用中间件来设置区域设置。

工作示例

SetLocale.php 中间件

 public function handle($request, Closure $next)
{
    if (Session::has('language'))
    {
        App::setLocale(strtolower(Session::get('language')));
    }
    return $next($request);
}

设置语言的控制器功能

 public function setLanguage(string $language)
{
    if (Session::has('language'))
    {
        Session::forget('language');
    }
    Session::put('language', $language);

    return redirect()->back();
}

所以现在在网站上发生的所有事情上,中间件都会检查语言并将其设置为会话中的内容。

也不要忘记在 app\Http\Kernel.php 的 $middlewareGroups 中指定中间件

您可以在网站上的任何地方创建一个表单,供用户选择他的语言偏好,并带有到控制器功能的路由。

于 2020-09-24T12:22:14.090 回答