仓库多语言编辑

This commit is contained in:
2025-05-13 15:29:56 +08:00
parent 21b19109d0
commit 302acbc5ab
6 changed files with 236 additions and 97 deletions
@@ -54,6 +54,38 @@ class LocationController extends Crud
]);
}
/**
* 查询后置处理,添加位置信息
* @param mixed $items
* @return mixed
*/
protected function afterQuery($items)
{
$lang = session('lang', 'zh-cn');
switch ($lang) {
case 'zh-cn':
$location = new \app\model\Location();
break;
case 'en':
$location = new \app\model\LocationEn();
break;
case 'ru':
$location = new \app\model\LocationRu();
break;
case 'ar':
$location = new \app\model\LocationAr();
break;
}
foreach ($items as &$item) {
$item = $location::find($item['id']);
}
return $items;
}
/**
* 插入
* @param Request $request
@@ -74,44 +106,45 @@ class LocationController extends Crud
// 如果是 POST 请求,处理数据保存和翻译
if ($request->method() === 'POST') {
// 获取表单数据
$data = $request->all();
Log::info('location',$data);
// 保存主表数据
$location = new Location();
$location->fill($data);
$location->save();
// 处理多语言翻译
$languages = ['en', 'ar', 'ru'];
$translationModels = [
'en' => \app\model\LocationEn::class,
'ar' => \app\model\LocationAr::class,
'ru' => \app\model\LocationRu::class
];
// 创建翻译服务实例
$translatorService = new \app\service\TranslatorService();
foreach ($languages as $lang) {
$translationModel = $translationModels[$lang];
$translation = new $translationModel();
// 复制主表数据
$translation->fill($data);
$translation->id = $location->id;
// 使用翻译服务处理需要翻译的字段
$translatedData = $translatorService->location($data, $lang);
// 更新翻译后的字段
$translation->name = $translatedData['name'] ?? $data['name'];
// $translation->description = $translatedData['description'] ?? $data['description'];
Log::info('location:'.$lang.':translatedData',$translatedData);
$translation->save();
}
$this->save($request);
// // 获取表单数据
// $data = $request->all();
// Log::info('location',$data);
//
// // 保存主表数据
// $location = new Location();
// $location->fill($data);
// $location->save();
//
// // 处理多语言翻译
// $languages = ['en', 'ar', 'ru'];
// $translationModels = [
// 'en' => \app\model\LocationEn::class,
// 'ar' => \app\model\LocationAr::class,
// 'ru' => \app\model\LocationRu::class
// ];
//
// // 创建翻译服务实例
// $translatorService = new \app\service\TranslatorService();
//
// foreach ($languages as $lang) {
// $translationModel = $translationModels[$lang];
// $translation = new $translationModel();
//
// // 复制主表数据
// $translation->fill($data);
// $translation->id = $location->id;
//
// // 使用翻译服务处理需要翻译的字段
// $translatedData = $translatorService->location($data, $lang);
//
// // 更新翻译后的字段
// $translation->name = $translatedData['name'] ?? $data['name'];
//// $translation->description = $translatedData['description'] ?? $data['description'];
//
// Log::info('location:'.$lang.':translatedData',$translatedData);
// $translation->save();
// }
}
return view('location/insert', [
@@ -120,6 +153,66 @@ class LocationController extends Crud
]);
}
/**
* 保存
*/
public function save(Request $request)
{
// 获取表单数据
$data = $request->all();
$lang = session('lang', 'zh-cn');
$locationModel = $this->getModel($lang);
// 保存主表数据
if(!empty($data['id'])){
$location = $locationModel::find($data['id']);
}else{
$location = $locationModel;
}
$location->fill($data);
$location->save();
// 处理多语言翻译
$languages = ['zh-cn' => 'cn', 'en' => 'en', 'ar' => 'ar', 'ru' => 'ru'];
$translationModels = [
'cn' => \app\model\Location::class,
'en' => \app\model\LocationEn::class,
'ar' => \app\model\LocationAr::class,
'ru' => \app\model\LocationRu::class
];
//删除已保存的模型
unset($translationModels[$lang]);
unset($languages[$lang]);
// 创建翻译服务实例
$translatorService = new \app\service\TranslatorService();
foreach ($languages as $language) {
$translationModel = $translationModels[$language];
if(!empty($data['id'])){
$translation = $translationModel::find($data['id']);
}else{
$translation = new $translationModel();
}
// 复制主表数据
$translation->fill($data);
$translation->id = $location->id;
// 使用翻译服务处理需要翻译的字段
$translatedData = $translatorService->location($data, $language,$lang);
log::info('$lang',[$language,$lang,$translatedData]);
// 更新翻译后的字段
$translation->name = $translatedData['name'] ?? $data['name'];
$translation->save();
}
}
/**
* 更新
* @param Request $request
@@ -129,7 +222,8 @@ class LocationController extends Crud
public function update(Request $request): Response
{
if ($request->method() === 'POST') {
return parent::update($request);
// return parent::update($request);
$this->save($request);
}
// 获取当前语言
$lang = session('lang', 'zh-cn');
@@ -153,24 +247,32 @@ class LocationController extends Crud
public function getAll()
{
$lang = session('lang', 'zh-cn');
switch ($lang) {
case 'zh-cn':
$hz = new \app\model\Location();
break;
$hz = $this->getModel($lang);
$locations = $hz::get();
return Util::success($locations);
}
/**
* @param $lang
* @return \app\model\Location|\app\model\LocationAr|\app\model\LocationEn|\app\model\LocationRu
*/
protected function getModel($lang){
switch ($lang) {
case 'en':
$hz = new \app\model\LocationEn();
break;
case 'ru':
$hz = new \app\model\LocationRu();
break;
case 'ar':
$hz = new \app\model\LocationAr();
break;
default:
$hz = new \app\model\Location();
break;
}
$locations = $hz::get();
return Util::success($locations);
return $hz;
}
}