|
@@ -3,13 +3,14 @@
|
|
|
namespace App\Http\Controllers\Library;
|
|
namespace App\Http\Controllers\Library;
|
|
|
|
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Controllers\Controller;
|
|
|
-
|
|
|
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Http\Request;
|
|
|
-
|
|
|
|
|
|
|
+use Illuminate\Support\Facades\Cookie;
|
|
|
use Illuminate\Support\Facades\File;
|
|
use Illuminate\Support\Facades\File;
|
|
|
|
|
+use Illuminate\Support\Facades\Log;
|
|
|
|
|
|
|
|
use App\Models\PaliText;
|
|
use App\Models\PaliText;
|
|
|
use App\Models\ProgressChapter;
|
|
use App\Models\ProgressChapter;
|
|
|
|
|
+use App\Services\TermService;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -24,6 +25,16 @@ class TipitakaController extends Controller
|
|
|
'linear-gradient(160deg, #1a1a2d,rgb(76, 68, 146))',
|
|
'linear-gradient(160deg, #1a1a2d,rgb(76, 68, 146))',
|
|
|
'linear-gradient(160deg, #1a2820,rgb(55, 124, 99))',
|
|
'linear-gradient(160deg, #1a2820,rgb(55, 124, 99))',
|
|
|
];
|
|
];
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 构造函数,注入 TermService
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param \App\Services\TermService $termService
|
|
|
|
|
+ */
|
|
|
|
|
+ public function __construct(
|
|
|
|
|
+ protected TermService $termService,
|
|
|
|
|
+ ) {}
|
|
|
|
|
+
|
|
|
// -------------------------------------------------------------------------
|
|
// -------------------------------------------------------------------------
|
|
|
// 从 uid / id 字符串中提取一个稳定的整数,用于色池取余
|
|
// 从 uid / id 字符串中提取一个稳定的整数,用于色池取余
|
|
|
// -------------------------------------------------------------------------
|
|
// -------------------------------------------------------------------------
|
|
@@ -46,6 +57,8 @@ class TipitakaController extends Controller
|
|
|
public function index(Request $request, ?int $id = null)
|
|
public function index(Request $request, ?int $id = null)
|
|
|
{
|
|
{
|
|
|
|
|
|
|
|
|
|
+ $locale = Cookie::get('language') ?? 'en';
|
|
|
|
|
+
|
|
|
$categories = $this->loadCategories();
|
|
$categories = $this->loadCategories();
|
|
|
|
|
|
|
|
// ── 当前分类 ──────────────────────────────────────────
|
|
// ── 当前分类 ──────────────────────────────────────────
|
|
@@ -67,6 +80,28 @@ class TipitakaController extends Controller
|
|
|
fn($cat) => $cat['parent_id'] == $id
|
|
fn($cat) => $cat['parent_id'] == $id
|
|
|
));
|
|
));
|
|
|
|
|
|
|
|
|
|
+ $allNames = array_map(fn($item) => $item['name'], $subCategories);
|
|
|
|
|
+
|
|
|
|
|
+ // 去重
|
|
|
|
|
+ $allNames = array_values(array_unique($allNames));
|
|
|
|
|
+
|
|
|
|
|
+ // 查词典
|
|
|
|
|
+ $terms = $this->termService->glossaryByLemma($allNames, $locale);
|
|
|
|
|
+ // 构建映射
|
|
|
|
|
+ $termMap = [];
|
|
|
|
|
+ if ($terms) {
|
|
|
|
|
+ foreach ($terms as $term) {
|
|
|
|
|
+ $termMap[$term->word] = $term->meaning;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // 回填
|
|
|
|
|
+ foreach ($subCategories as $key => $cat) {
|
|
|
|
|
+ $name = $cat['name'] ?? null;
|
|
|
|
|
+ $subCategories[$key]['name'] = $termMap[$name] ?? $name;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
// ── 过滤参数 ────────────────────────────────────────────
|
|
// ── 过滤参数 ────────────────────────────────────────────
|
|
|
$selectedType = request('type', 'all');
|
|
$selectedType = request('type', 'all');
|
|
|
$selectedLang = request('lang', 'all');
|
|
$selectedLang = request('lang', 'all');
|