仓库多语言编辑
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user