Browse Source

feat:language

igb 4 months ago
parent
commit
0aba82b682

+ 48 - 0
app/Distributor/Controllers/LanguageController.php

@@ -0,0 +1,48 @@
+<?php
+namespace App\Distributor\Controllers;
+
+use App\Http\Controllers\Controller;
+
+use Illuminate\Http\Request;
+class LanguageController extends Controller
+{
+
+    public function index(Request $request)
+    {
+        return $this->switchLanguage($request);
+    }
+
+    /**
+     * 切换语言并修改 app.locale
+     *
+     * @param Request $request
+     * @return \Illuminate\Http\RedirectResponse
+     */
+    public function switchLanguage(Request $request)
+    {
+
+
+        // 从 URL 参数中获取语言,默认为 'en'
+        $lang = $request->input('lang', 'en');
+
+        if (!$lang)
+        {
+            abort(404);
+        }
+        // 验证是否是支持的语言
+        if (!in_array($lang, ['en', 'zh_CN'])) {
+            abort(404);
+        }
+
+        $configArray = ['lang' => $lang,];
+
+        user_admin_config($configArray);
+
+        // 动态修改 app.locale 配置
+        config(['app.locale' => $lang]);
+
+        return response()->json(['success' => true, 'lang' => $lang]);
+    }
+
+}
+

+ 2 - 0
app/Distributor/routes.php

@@ -60,6 +60,8 @@ Route::group([
     $router->get('api/pages', 'ApiController@pages');
     $router->get('api/tag', 'ApiController@tag');
     $router->get('api/generate-slug', 'ApiController@generateSlug');
+    // 定义切换语言的路由
+    $router->get('language-switch','LanguageController@index');
 });
 
 /*

+ 1 - 0
lang/en/admin.php

@@ -247,4 +247,5 @@ return [
     'pages'  => 'Pages',
     'pages_tag'  => 'Pages Tag',
     'product_import'  => 'Product Import',
+    'view_website'  => 'View Online Site',
 ];

+ 1 - 0
lang/zh_CN/admin.php

@@ -254,5 +254,6 @@ return [
     'distro_list'=> '分销商列表',
     'distro_user'=> '分销商用户',
     'inquiry_list' => '询盘列表',
+    'view_website'  => '查看在线网站',
 
 ];

+ 31 - 1
resources/views/distributor/partials/navbar.blade.php

@@ -40,7 +40,7 @@
                 <div class="navbar-right d-flex align-items-center">
                     {!! Dcat\Admin\Admin::navbar()->render() !!}
 
-                    <a href="{{getDistributorDomain()}}" target="_blank" class="nav-link"><i class="fa fa-chrome f18"></i></a>
+                    <a href="{{getDistributorDomain()}}" target="_blank" class="nav-link "><i class="fa fa-eye f16"></i> {{trans('admin.view_website')}}</a>
 
                     <!--
                     @if(!empty($configData['home_url']))
@@ -51,6 +51,18 @@
                     <a href="javascript:;"  data-check-screen="full" class="nav-link"><i class="feather icon-maximize f16"></i></a>
                     @endif
                     --->
+
+                    <!-- Dropdown Menu -->
+                    <div class="dropdown">
+                        <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+                            <i class="fa fa-language f16"></i> {{trans('admin.language')}}
+                        </a>
+                        <div class="dropdown-menu" aria-labelledby="navbarDropdown">
+                            <a class="dropdown-item" href="javascript:null;" onclick="javascript:switchLanguage('en');" style="padding-left: 10px;">English</a>
+                            <a class="dropdown-item"  href="javascript:null;" onclick="javascript:switchLanguage('zh_CN');" onclick="javascript:switchLanguage('en');" style="padding-left: 10px;">中文</a>
+                        </div>
+                    </div>
+
                     <ul class="nav navbar-nav">
                         {{--User Account Menu--}}
                         {!! admin_section(Dcat\Admin\Admin::SECTION['NAVBAR_USER_PANEL']) !!}
@@ -64,3 +76,21 @@
 </nav>
 @endif
 {!! admin_section(Dcat\Admin\Admin::SECTION['NAVBAR_AFTER']) !!}
+<script>
+    function switchLanguage(lang) {
+
+        fetch(`/dist/language-switch?lang=${lang}`, {
+            method: 'GET'
+        })
+            .then(response => response.json())
+            .then(data => {
+                if (data.success) {
+                    window.location.reload(); // Optional: Reload to fetch updated language
+                } else {
+                    alert(data.error);
+                }
+            })
+            .catch(error => console.error('Error:', error));
+    }
+
+</script>