{"id":614,"date":"2025-11-23T20:05:29","date_gmt":"2025-11-23T12:05:29","guid":{"rendered":"https:\/\/isunnylife.space\/?p=614"},"modified":"2025-11-24T17:11:57","modified_gmt":"2025-11-24T09:11:57","slug":"ai%e7%bf%bb%e8%af%91-%e9%98%bf%e9%87%8c%e6%a8%a1%e5%9e%8b","status":"publish","type":"post","link":"https:\/\/isunnylife.space\/?p=614","title":{"rendered":"Ai\u7ffb\u8bd1-\u963f\u91cc\u6a21\u578b"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>\u591a\u8bed\u8a00\u667a\u80fd\u7ffb\u8bd1\u5668<\/title>\n    <style>\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n        }\n        \n        body {\n            font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n            min-height: 100vh;\n            padding: 20px;\n        }\n        \n        .container {\n            max-width: 1200px;\n            margin: 0 auto;\n            background: white;\n            border-radius: 16px;\n            box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n            overflow: hidden;\n        }\n        \n        .header {\n            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n            color: white;\n            padding: 30px;\n            text-align: center;\n        }\n        \n        .header h1 {\n            font-size: 28px;\n            margin-bottom: 10px;\n        }\n        \n        .header p {\n            opacity: 0.9;\n            font-size: 14px;\n        }\n        \n\n        \n        .translator-wrapper {\n            display: flex;\n            min-height: 500px;\n        }\n        \n        .panel {\n            flex: 1;\n            padding: 30px;\n            display: flex;\n            flex-direction: column;\n        }\n        \n        .panel-left {\n            border-right: 2px solid #e5e7eb;\n        }\n        \n        .panel-header {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            margin-bottom: 20px;\n            gap: 15px;\n        }\n        \n        .language-selector {\n            position: relative;\n            flex: 1;\n        }\n        \n        .language-label {\n            font-size: 14px;\n            font-weight: 500;\n            color: #6b7280;\n            margin-bottom: 5px;\n            display: block;\n        }\n        \n        .copy-btn {\n            padding: 8px 16px;\n            background: #667eea;\n            color: white;\n            border: none;\n            border-radius: 6px;\n            font-size: 13px;\n            font-weight: 600;\n            cursor: pointer;\n            transition: all 0.3s;\n            display: flex;\n            align-items: center;\n            gap: 6px;\n            white-space: nowrap;\n        }\n        \n        .copy-btn:hover {\n            background: #5568d3;\n            transform: translateY(-1px);\n        }\n        \n        .copy-btn:active {\n            transform: translateY(0);\n        }\n        \n        .copy-btn.copied {\n            background: #10b981;\n        }\n        \n        .copy-btn:disabled {\n            opacity: 0.5;\n            cursor: not-allowed;\n        }\n        \n        select {\n            width: 100%;\n            padding: 10px 35px 10px 12px;\n            font-size: 15px;\n            font-weight: 600;\n            color: #1f2937;\n            border: 2px solid #e5e7eb;\n            border-radius: 8px;\n            background: white;\n            cursor: pointer;\n            transition: border-color 0.3s;\n            appearance: none;\n            background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='16' height='16' fill='%234b5563' viewBox='0 0 16 16'%3E%3Cpath d='M8 11L3 6h10z'\/%3E%3C\/svg%3E\");\n            background-repeat: no-repeat;\n            background-position: right 10px center;\n        }\n        \n        select:hover {\n            border-color: #667eea;\n        }\n        \n        select:focus {\n            outline: none;\n            border-color: #667eea;\n            box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);\n        }\n        \n        .char-count {\n            font-size: 12px;\n            color: #6b7280;\n        }\n        \n        textarea {\n            flex: 1;\n            width: 100%;\n            border: 2px solid #e5e7eb;\n            border-radius: 12px;\n            padding: 20px;\n            font-size: 16px;\n            font-family: inherit;\n            resize: none;\n            transition: border-color 0.3s;\n            line-height: 1.6;\n        }\n        \n        textarea:focus {\n            outline: none;\n            border-color: #667eea;\n        }\n        \n        .panel-left textarea {\n            background: #f9fafb;\n        }\n        \n        .panel-right textarea {\n            background: #fefce8;\n        }\n        \n        .controls {\n            display: flex;\n            justify-content: center;\n            gap: 15px;\n            padding: 20px 30px;\n            background: #f9fafb;\n            border-top: 1px solid #e5e7eb;\n        }\n        \n        button {\n            padding: 12px 30px;\n            font-size: 15px;\n            font-weight: 600;\n            border: none;\n            border-radius: 8px;\n            cursor: pointer;\n            transition: all 0.3s;\n        }\n        \n        button:disabled {\n            opacity: 0.5;\n            cursor: not-allowed;\n        }\n        \n        .btn-translate {\n            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n            color: white;\n        }\n        \n        .btn-translate:hover:not(:disabled) {\n            transform: translateY(-2px);\n            box-shadow: 0 5px 15px rgba(102, 126, 234, 0.4);\n        }\n        \n        .btn-clear {\n            background: #e5e7eb;\n            color: #4b5563;\n        }\n        \n        .btn-clear:hover {\n            background: #d1d5db;\n        }\n        \n        .btn-swap {\n            background: #10b981;\n            color: white;\n        }\n        \n        .btn-swap:hover {\n            background: #059669;\n            transform: translateY(-2px);\n        }\n        \n        .loading {\n            text-align: center;\n            color: #667eea;\n            font-size: 14px;\n            margin-top: 10px;\n        }\n        \n        .error {\n            background: #fee2e2;\n            color: #dc2626;\n            padding: 15px;\n            border-radius: 8px;\n            margin: 20px 30px;\n            font-size: 14px;\n        }\n        \n\n        @media (max-width: 768px) {\n            .translator-wrapper {\n                flex-direction: column;\n            }\n            \n            .panel-left {\n                border-right: none;\n                border-bottom: 2px solid #e5e7eb;\n            }\n            \n            .controls {\n                flex-wrap: wrap;\n            }\n            \n            .api-config {\n                flex-direction: column;\n                align-items: stretch;\n            }\n            \n            .api-input-wrapper {\n                min-width: 100%;\n            }\n        }\n    <\/style>\n<\/head>\n<body>\n    <div class=\"container\">\n        <div class=\"header\">\n            <h1>\ud83c\udf10 \u591a\u8bed\u8a00\u667a\u80fd\u7ffb\u8bd1\u5668<\/h1>\n            <p>\u652f\u6301 16 \u79cd\u8bed\u8a00\u4e92\u8bd1 &#8211; \u7531\u963f\u91cc\u4e91\u901a\u4e49\u5343\u95ee\u9a71\u52a8<\/p>\n        <\/div>\n        \n        <div class=\"translator-wrapper\">\n            <div class=\"panel panel-left\">\n                <div class=\"panel-header\">\n                    <div class=\"language-selector\">\n                        <label class=\"language-label\">\u6e90\u8bed\u8a00<\/label>\n                        <select id=\"leftLang\">\n                            <option value=\"zh\">\u4e2d\u6587 (\u7b80\u4f53)<\/option>\n                            <option value=\"zh-TW\">\u4e2d\u6587 (\u7e41\u9ad4)<\/option>\n                            <option value=\"en\">English (\u82f1\u8bed)<\/option>\n                            <option value=\"ja\">\u65e5\u672c\u8a9e (\u65e5\u8bed)<\/option>\n                            <option value=\"ko\">\ud55c\uad6d\uc5b4 (\u97e9\u8bed)<\/option>\n                            <option value=\"fr\">Fran\u00e7ais (\u6cd5\u8bed)<\/option>\n                            <option value=\"de\">Deutsch (\u5fb7\u8bed)<\/option>\n                            <option value=\"es\">Espa\u00f1ol (\u897f\u73ed\u7259\u8bed)<\/option>\n                            <option value=\"ru\">\u0420\u0443\u0441\u0441\u043a\u0438\u0439 (\u4fc4\u8bed)<\/option>\n                            <option value=\"ar\">\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (\u963f\u62c9\u4f2f\u8bed)<\/option>\n                            <option value=\"pt\">Portugu\u00eas (\u8461\u8404\u7259\u8bed)<\/option>\n                            <option value=\"it\">Italiano (\u610f\u5927\u5229\u8bed)<\/option>\n                            <option value=\"th\">\u0e44\u0e17\u0e22 (\u6cf0\u8bed)<\/option>\n                            <option value=\"vi\">Ti\u1ebfng Vi\u1ec7t (\u8d8a\u5357\u8bed)<\/option>\n                            <option value=\"id\">Bahasa Indonesia (\u5370\u5c3c\u8bed)<\/option>\n                            <option value=\"ms\">Bahasa Melayu (\u9a6c\u6765\u8bed)<\/option>\n                        <\/select>\n                    <\/div>\n                    <button class=\"copy-btn\" id=\"copyLeftBtn\" onclick=\"copyText('left')\" disabled>\n                        \ud83d\udccb \u590d\u5236\n                    <\/button>\n                    <span class=\"char-count\" id=\"leftCount\">0 \/ 5000<\/span>\n                <\/div>\n                <textarea \n                    id=\"leftText\" \n                    placeholder=\"\u8bf7\u8f93\u5165\u8981\u7ffb\u8bd1\u7684\u5185\u5bb9...\"\n                    maxlength=\"5000\"\n                ><\/textarea>\n            <\/div>\n            \n            <div class=\"panel panel-right\">\n                <div class=\"panel-header\">\n                    <div class=\"language-selector\">\n                        <label class=\"language-label\">\u76ee\u6807\u8bed\u8a00<\/label>\n                        <select id=\"rightLang\">\n                            <option value=\"zh\">\u4e2d\u6587 (\u7b80\u4f53)<\/option>\n                            <option value=\"zh-TW\">\u4e2d\u6587 (\u7e41\u9ad4)<\/option>\n                            <option value=\"en\" selected>English (\u82f1\u8bed)<\/option>\n                            <option value=\"ja\">\u65e5\u672c\u8a9e (\u65e5\u8bed)<\/option>\n                            <option value=\"ko\">\ud55c\uad6d\uc5b4 (\u97e9\u8bed)<\/option>\n                            <option value=\"fr\">Fran\u00e7ais (\u6cd5\u8bed)<\/option>\n                            <option value=\"de\">Deutsch (\u5fb7\u8bed)<\/option>\n                            <option value=\"es\">Espa\u00f1ol (\u897f\u73ed\u7259\u8bed)<\/option>\n                            <option value=\"ru\">\u0420\u0443\u0441\u0441\u043a\u0438\u0439 (\u4fc4\u8bed)<\/option>\n                            <option value=\"ar\">\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (\u963f\u62c9\u4f2f\u8bed)<\/option>\n                            <option value=\"pt\">Portugu\u00eas (\u8461\u8404\u7259\u8bed)<\/option>\n                            <option value=\"it\">Italiano (\u610f\u5927\u5229\u8bed)<\/option>\n                            <option value=\"th\">\u0e44\u0e17\u0e22 (\u6cf0\u8bed)<\/option>\n                            <option value=\"vi\">Ti\u1ebfng Vi\u1ec7t (\u8d8a\u5357\u8bed)<\/option>\n                            <option value=\"id\">Bahasa Indonesia (\u5370\u5c3c\u8bed)<\/option>\n                            <option value=\"ms\">Bahasa Melayu (\u9a6c\u6765\u8bed)<\/option>\n                        <\/select>\n                    <\/div>\n                    <button class=\"copy-btn\" id=\"copyRightBtn\" onclick=\"copyText('right')\" disabled>\n                        \ud83d\udccb \u590d\u5236\n                    <\/button>\n                    <span class=\"char-count\" id=\"rightCount\">0 \/ 5000<\/span>\n                <\/div>\n                <textarea \n                    id=\"rightText\" \n                    placeholder=\"\u7ffb\u8bd1\u7ed3\u679c\u5c06\u663e\u793a\u5728\u8fd9\u91cc...\"\n                    maxlength=\"5000\"\n                ><\/textarea>\n            <\/div>\n        <\/div>\n        \n        <div class=\"controls\">\n            <button class=\"btn-translate\" id=\"translateBtn\" onclick=\"translateText()\">\n                \ud83c\udf0d \u7ffb\u8bd1\n            <\/button>\n            <button class=\"btn-swap\" onclick=\"swapLanguages()\">\u21c4 \u4ea4\u6362<\/button>\n            <button class=\"btn-clear\" onclick=\"clearAll()\">\ud83d\uddd1\ufe0f \u6e05\u7a7a<\/button>\n        <\/div>\n        \n        <div id=\"loading\" class=\"loading\" style=\"display: none;\">\u6b63\u5728\u7ffb\u8bd1\u4e2d&#8230;<\/div>\n        <div id=\"error\" class=\"error\" style=\"display: none;\"><\/div>\n    <\/div>\n\n    <script>\n        \/\/ ==================== \u914d\u7f6e\u533a\u57df ====================\n        \/\/ \ud83d\udc47 \u8bf7\u5728\u4e0b\u65b9\u586b\u5165\u4f60\u7684\u963f\u91cc\u4e91\u901a\u4e49\u5343\u95ee API Key\n        const API_KEY = 'sk-d65e4683ab9641a989db827a4d7179ff';  \/\/ \u66ff\u6362\u4e3a\u4f60\u7684\u5b9e\u9645 API Key (sk-xxx)\n        \/\/ ================================================\n        \n        let lastActiveField = 'left';\n        \n        const leftText = document.getElementById('leftText');\n        const rightText = document.getElementById('rightText');\n        const leftLang = document.getElementById('leftLang');\n        const rightLang = document.getElementById('rightLang');\n        const leftCount = document.getElementById('leftCount');\n        const rightCount = document.getElementById('rightCount');\n        const loading = document.getElementById('loading');\n        const error = document.getElementById('error');\n        const translateBtn = document.getElementById('translateBtn');\n        const copyLeftBtn = document.getElementById('copyLeftBtn');\n        const copyRightBtn = document.getElementById('copyRightBtn');\n        \n        \/\/ \u8bed\u8a00\u540d\u79f0\u6620\u5c04\n        const languageNames = {\n            'zh': 'Chinese',\n            'zh-TW': 'Traditional Chinese',\n            'en': 'English',\n            'ja': 'Japanese',\n            'ko': 'Korean',\n            'fr': 'French',\n            'de': 'German',\n            'es': 'Spanish',\n            'ru': 'Russian',\n            'ar': 'Arabic',\n            'pt': 'Portuguese',\n            'it': 'Italian',\n            'th': 'Thai',\n            'vi': 'Vietnamese',\n            'id': 'Indonesian',\n            'ms': 'Malay'\n        };\n        \n        \/\/ \u66f4\u65b0\u5b57\u7b26\u8ba1\u6570\n        leftText.addEventListener('input', (e) => {\n            leftCount.textContent = `${e.target.value.length} \/ 5000`;\n            lastActiveField = 'left';\n            \/\/ \u542f\u7528\/\u7981\u7528\u590d\u5236\u6309\u94ae\n            copyLeftBtn.disabled = e.target.value.length === 0;\n        });\n        \n        rightText.addEventListener('input', (e) => {\n            rightCount.textContent = `${e.target.value.length} \/ 5000`;\n            lastActiveField = 'right';\n            \/\/ \u542f\u7528\/\u7981\u7528\u590d\u5236\u6309\u94ae\n            copyRightBtn.disabled = e.target.value.length === 0;\n        });\n        \n        \/\/ \u8bed\u8a00\u9009\u62e9\u53d8\u5316\u65f6\u7684\u5904\u7406\n        leftLang.addEventListener('change', () => {\n            if (leftLang.value === rightLang.value) {\n                const options = Array.from(rightLang.options);\n                const differentLang = options.find(opt => opt.value !== leftLang.value);\n                if (differentLang) {\n                    rightLang.value = differentLang.value;\n                }\n            }\n        });\n        \n        rightLang.addEventListener('change', () => {\n            if (leftLang.value === rightLang.value) {\n                const options = Array.from(leftLang.options);\n                const differentLang = options.find(opt => opt.value !== rightLang.value);\n                if (differentLang) {\n                    leftLang.value = differentLang.value;\n                }\n            }\n        });\n        \n        \/\/ \u7ffb\u8bd1\u51fd\u6570\n        async function translateText() {\n            if (!API_KEY || API_KEY === 'YOUR_API_KEY_HERE') {\n                showError('\u8bf7\u5148\u5728\u4ee3\u7801\u4e2d\u914d\u7f6e\u963f\u91cc\u4e91\u901a\u4e49\u5343\u95ee API Key');\n                return;\n            }\n            \n            const sourceText = lastActiveField === 'left' ? leftText.value : rightText.value;\n            const sourceLang = lastActiveField === 'left' ? leftLang.value : rightLang.value;\n            const targetLang = lastActiveField === 'left' ? rightLang.value : leftLang.value;\n            \n            if (!sourceText.trim()) {\n                showError('\u8bf7\u8f93\u5165\u8981\u7ffb\u8bd1\u7684\u5185\u5bb9');\n                return;\n            }\n            \n            if (sourceLang === targetLang) {\n                showError('\u6e90\u8bed\u8a00\u548c\u76ee\u6807\u8bed\u8a00\u4e0d\u80fd\u76f8\u540c');\n                return;\n            }\n            \n            hideError();\n            loading.style.display = 'block';\n            translateBtn.disabled = true;\n            \n            try {\n                const response = await fetch('https:\/\/dashscope.aliyuncs.com\/api\/v1\/services\/aigc\/text-generation\/generation', {\n                    method: 'POST',\n                    headers: {\n                        'Content-Type': 'application\/json',\n                        'Authorization': `Bearer ${API_KEY}`\n                    },\n                    body: JSON.stringify({\n                        model: 'qwen-plus',\n                        input: {\n                            messages: [\n                                {\n                                    role: 'system',\n                                    content: `You are a professional translator. Translate the following text from ${languageNames[sourceLang]} to ${languageNames[targetLang]}. Only provide the translation, no explanations. Maintain the original tone and style.`\n                                },\n                                {\n                                    role: 'user',\n                                    content: sourceText\n                                }\n                            ]\n                        },\n                        parameters: {\n                            result_format: 'message'\n                        }\n                    })\n                });\n                \n                if (!response.ok) {\n                    const errorData = await response.json();\n                    if (response.status === 401 || response.status === 400) {\n                        throw new Error('API Key \u65e0\u6548\uff0c\u8bf7\u68c0\u67e5\u540e\u91cd\u65b0\u8f93\u5165');\n                    } else if (response.status === 429) {\n                        throw new Error('\u8bf7\u6c42\u8fc7\u4e8e\u9891\u7e41\u6216\u914d\u989d\u5df2\u7528\u5b8c\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5');\n                    } else {\n                        throw new Error(errorData.message || `API \u9519\u8bef: ${response.status}`);\n                    }\n                }\n                \n                const data = await response.json();\n                const translatedText = data.output.choices[0].message.content.trim();\n                \n                if (lastActiveField === 'left') {\n                    rightText.value = translatedText;\n                    rightCount.textContent = `${translatedText.length} \/ 5000`;\n                    copyRightBtn.disabled = false;\n                } else {\n                    leftText.value = translatedText;\n                    leftCount.textContent = `${translatedText.length} \/ 5000`;\n                    copyLeftBtn.disabled = false;\n                }\n                \n            } catch (err) {\n                showError('\u7ffb\u8bd1\u5931\u8d25: ' + err.message);\n            } finally {\n                loading.style.display = 'none';\n                translateBtn.disabled = false;\n            }\n        }\n        \n        \/\/ \u4ea4\u6362\u8bed\u8a00\n        function swapLanguages() {\n            \/\/ \u4ea4\u6362\u6587\u672c\n            const temp = leftText.value;\n            leftText.value = rightText.value;\n            rightText.value = temp;\n            \n            \/\/ \u4ea4\u6362\u8bed\u8a00\u9009\u62e9\n            const tempLang = leftLang.value;\n            leftLang.value = rightLang.value;\n            rightLang.value = tempLang;\n            \n            \/\/ \u66f4\u65b0\u8ba1\u6570\n            leftCount.textContent = `${leftText.value.length} \/ 5000`;\n            rightCount.textContent = `${rightText.value.length} \/ 5000`;\n            \n            \/\/ \u4ea4\u6362\u6d3b\u52a8\u5b57\u6bb5\n            lastActiveField = lastActiveField === 'left' ? 'right' : 'left';\n        }\n        \n        \/\/ \u6e05\u7a7a\u6240\u6709\n        function clearAll() {\n            leftText.value = '';\n            rightText.value = '';\n            leftCount.textContent = '0 \/ 5000';\n            rightCount.textContent = '0 \/ 5000';\n            copyLeftBtn.disabled = true;\n            copyRightBtn.disabled = true;\n            hideError();\n        }\n        \n        \/\/ \u590d\u5236\u6587\u672c\u529f\u80fd\n        async function copyText(side) {\n            const text = side === 'left' ? leftText.value : rightText.value;\n            const btn = side === 'left' ? copyLeftBtn : copyRightBtn;\n            \n            if (!text.trim()) {\n                return;\n            }\n            \n            try {\n                await navigator.clipboard.writeText(text);\n                \n                \/\/ \u6309\u94ae\u52a8\u753b\u6548\u679c\n                const originalHTML = btn.innerHTML;\n                btn.innerHTML = '\u2713 \u5df2\u590d\u5236';\n                btn.classList.add('copied');\n                \n                setTimeout(() => {\n                    btn.innerHTML = originalHTML;\n                    btn.classList.remove('copied');\n                }, 2000);\n                \n            } catch (err) {\n                \/\/ \u964d\u7ea7\u65b9\u6848\uff1a\u4f7f\u7528\u4f20\u7edf\u7684\u590d\u5236\u65b9\u6cd5\n                const textarea = side === 'left' ? leftText : rightText;\n                textarea.select();\n                document.execCommand('copy');\n                \n                const originalHTML = btn.innerHTML;\n                btn.innerHTML = '\u2713 \u5df2\u590d\u5236';\n                btn.classList.add('copied');\n                \n                setTimeout(() => {\n                    btn.innerHTML = originalHTML;\n                    btn.classList.remove('copied');\n                }, 2000);\n            }\n        }\n        \n        \/\/ \u663e\u793a\u9519\u8bef\n        function showError(msg) {\n            error.textContent = msg;\n            error.style.display = 'block';\n        }\n        \n        \/\/ \u9690\u85cf\u9519\u8bef\n        function hideError() {\n            error.style.display = 'none';\n        }\n        \n        \/\/ \u56de\u8f66\u952e\u7ffb\u8bd1\uff08Ctrl+Enter\uff09\n        leftText.addEventListener('keydown', (e) => {\n            if (e.ctrlKey && e.key === 'Enter') {\n                translateText();\n            }\n        });\n        \n        rightText.addEventListener('keydown', (e) => {\n            if (e.ctrlKey && e.key === 'Enter') {\n                translateText();\n            }\n        });\n        \n        \/\/ \u9875\u9762\u52a0\u8f7d\u65f6\u521d\u59cb\u5316\n        initializeApp();\n    <\/script>\n<\/body>\n<\/html>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u591a\u8bed\u8a00\u667a\u80fd\u7ffb\u8bd1\u5668 \ud83c\udf10 \u591a\u8bed\u8a00\u667a\u80fd\u7ffb\u8bd1\u5668  [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-614","post","type-post","status-publish","format-standard","hentry","category-1"],"spectra_custom_meta":{"surerank_seo_checks":["a:13:{s:14:\"h2_subheadings\";a:3:{s:6:\"status\";s:7:\"warning\";s:7:\"message\";s:42:\"The page does not contain any subheadings.\";s:4:\"type\";s:4:\"page\";}s:13:\"media_present\";a:3:{s:6:\"status\";s:7:\"warning\";s:7:\"message\";s:39:\"No images or videos found on this page.\";s:4:\"type\";s:4:\"page\";}s:13:\"links_present\";a:3:{s:6:\"status\";s:7:\"warning\";s:7:\"message\";s:27:\"No links found on the page.\";s:4:\"type\";s:4:\"page\";}s:10:\"url_length\";a:3:{s:6:\"status\";s:7:\"success\";s:7:\"message\";s:35:\"Page URL is short and SEO-friendly.\";s:4:\"type\";s:4:\"page\";}s:19:\"search_engine_title\";a:3:{s:6:\"status\";s:7:\"success\";s:7:\"message\";s:55:\"Search engine title is present and under 60 characters.\";s:4:\"type\";s:4:\"page\";}s:25:\"search_engine_description\";a:3:{s:6:\"status\";s:7:\"success\";s:7:\"message\";s:62:\"Search engine description is present and under 160 characters.\";s:4:\"type\";s:4:\"page\";}s:13:\"canonical_url\";a:3:{s:6:\"status\";s:7:\"success\";s:7:\"message\";s:37:\"Canonical tag is present on the page.\";s:4:\"type\";s:4:\"page\";}s:15:\"open_graph_tags\";a:3:{s:6:\"status\";s:7:\"success\";s:7:\"message\";s:40:\"Open Graph tags are present on the page.\";s:4:\"type\";s:4:\"page\";}s:16:\"keyword_in_title\";a:3:{s:6:\"status\";s:10:\"suggestion\";s:7:\"message\";s:38:\"No focus keyword set to analyze title.\";s:4:\"type\";s:7:\"keyword\";}s:22:\"keyword_in_description\";a:3:{s:6:\"status\";s:10:\"suggestion\";s:7:\"message\";s:49:\"No focus keyword set to analyze meta description.\";s:4:\"type\";s:7:\"keyword\";}s:14:\"keyword_in_url\";a:3:{s:6:\"status\";s:10:\"suggestion\";s:7:\"message\";s:36:\"No focus keyword set to analyze URL.\";s:4:\"type\";s:7:\"keyword\";}s:18:\"keyword_in_content\";a:3:{s:6:\"status\";s:10:\"suggestion\";s:7:\"message\";s:40:\"No focus keyword set to analyze content.\";s:4:\"type\";s:7:\"keyword\";}s:12:\"broken_links\";a:2:{s:6:\"status\";s:7:\"success\";s:7:\"message\";s:34:\"No broken links found on the page.\";}}"],"surerank_seo_checks_last_updated":["1763993158"],"_edit_lock":["1763977270:1"],"_edit_last":["1"],"_uag_page_assets":["a:9:{s:3:\"css\";s:263:\".uag-blocks-common-selector{z-index:var(--z-index-desktop) !important}@media (max-width: 976px){.uag-blocks-common-selector{z-index:var(--z-index-tablet) !important}}@media (max-width: 767px){.uag-blocks-common-selector{z-index:var(--z-index-mobile) !important}}\n\";s:2:\"js\";s:0:\"\";s:18:\"current_block_list\";a:9:{i:0;s:9:\"core\/html\";i:1;s:14:\"core\/paragraph\";i:2;s:11:\"core\/search\";i:3;s:10:\"core\/group\";i:4;s:12:\"core\/heading\";i:5;s:17:\"core\/latest-posts\";i:6;s:20:\"core\/latest-comments\";i:7;s:13:\"core\/archives\";i:8;s:15:\"core\/categories\";}s:8:\"uag_flag\";b:0;s:11:\"uag_version\";s:10:\"1766657798\";s:6:\"gfonts\";a:0:{}s:10:\"gfonts_url\";s:0:\"\";s:12:\"gfonts_files\";a:0:{}s:14:\"uag_faq_layout\";b:0;}"],"views":["0"],"_uag_css_file_name":["uag-css-614.css"]},"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"xianjie.me@icloud.com","author_link":"https:\/\/isunnylife.space\/?author=1"},"uagb_comment_info":0,"uagb_excerpt":"\u591a\u8bed\u8a00\u667a\u80fd\u7ffb\u8bd1\u5668 \ud83c\udf10 \u591a\u8bed\u8a00\u667a\u80fd\u7ffb\u8bd1\u5668 [&hellip;]","_links":{"self":[{"href":"https:\/\/isunnylife.space\/index.php?rest_route=\/wp\/v2\/posts\/614","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/isunnylife.space\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/isunnylife.space\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/isunnylife.space\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/isunnylife.space\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=614"}],"version-history":[{"count":3,"href":"https:\/\/isunnylife.space\/index.php?rest_route=\/wp\/v2\/posts\/614\/revisions"}],"predecessor-version":[{"id":622,"href":"https:\/\/isunnylife.space\/index.php?rest_route=\/wp\/v2\/posts\/614\/revisions\/622"}],"wp:attachment":[{"href":"https:\/\/isunnylife.space\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=614"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/isunnylife.space\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=614"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/isunnylife.space\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=614"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}