config = getConfig('/common/utils/translation/config/trans.php'); // $this->config = getConfig('/queue/translation/config/trans.php'); $this->payload = $payload; } public function handle(): void { $cfgAll = $this->config['entities']; $pt = $this->payload; $type = $pt['entityType']; $id = $pt['entityId']; $locale = $pt['locale']; $sourceLocale = $pt['sourceLocale']; $sourceFields = $pt['sourceFields']; $clientFields = $pt['clientFields']; if (! isset($cfgAll[$type])) { Log::warning("TranslationJob: 未配置实体 {$type}"); return; } $cfg = $cfgAll[$type]; $modelClass = $cfg['translation_model']; $foreignKey = $cfg['foreign_key']; // 决定采用前端提供、源语种还是第三方翻译 if (! empty($clientFields)) { $fields = $clientFields; } elseif ($locale === $sourceLocale) { $fields = $sourceFields; } else { $translator = new TranslatorClient(); $fields = []; foreach ($sourceFields as $key => $text) { $fields[$key] = $translator->translate($text, $sourceLocale, $locale); } } // 写库 try { $modelClass::updateOrCreate( [ $foreignKey => $id, 'locale' => $locale, ], array_merge($fields, ['locale' => $locale]) ); } catch (\Throwable $e) { Log::error("TranslationJob 保存失败: {$type}#{$id} locale={$locale}: ".$e->getMessage()); } } }