0) { foreach ($tmp as $k => $v) { if ($k == 'zh' || $k == 'key') { continue; } if ($count != substr_count($v, '(*)')) { $regrror[$key] = $tmp; continue 2; } } } } else { $redundants[$key] = $tmp; } } foreach ($array as $text) { $key = trim($text); if (!isset($translations[$key])) { $needs[$key] = $key; } } if (count($needs) > 0) { $waits = array_chunk($needs, 100, true); foreach ($waits as $index => $items) { if ($index > 0) { print_r("\n"); } print_r("正在翻译:" . count($items) . "/" . count($needs) . "\n"); $content = implode("\n", $items); $open_ai = new OpenAi(OPEN_AI_KEY); $open_ai->setProxy(OPEN_AI_PROXY); $chat = $open_ai->chat([ 'model' => 'gpt-4o', 'messages' => [ [ "role" => "system", "content" => << "user", "content" => $content, ], ], 'temperature' => 1.0, 'max_tokens' => 4000, 'frequency_penalty' => 0, 'presence_penalty' => 0, ]); $obj = json_decode($chat); $arr = json_decode($obj->choices[0]->message->content, true); if (!$arr || !is_array($arr)) { print_r("翻译失败:\n"); print_r($content . "\n"); continue; } foreach ($arr as $item) { foreach (['key', 'zh', 'zh-CHT', 'en', 'ko', 'ja', 'de', 'fr', 'id', 'ru'] as $lang) { if (!isset($item[$lang])) { print_r("翻译结果不符合规范:{$item['key']},缺少:{$lang}\n"); continue 2; } } if (empty($item['key'])) { print_r("翻译结果不符合规范:{$item['key']},key为空\n"); continue; } $count = substr_count($item['key'], '(*)'); if ($count > 0) { foreach ($item as $k => $v) { if ($k == 'zh' || $k == 'key') { continue; } if ($count != substr_count($v, '(*)')) { print_r("翻译结果不符合规范:{$item['key']},正则匹配错误:{$k} => {$v}\n"); continue 2; } } } $item['zh'] = ""; $translations[$item['key']] = $item; } file_put_contents("translate.json", json_encode(array_values($translations), JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); print_r("翻译完成:" . count($items) . "/" . count($needs) . "\n"); } }