@tomako/tools-runtime 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -1
- package/src/components/tools/engine/package-widget-runtime.tsx +5 -1
- package/src/components/tools/engine/task-recovery.test.ts +65 -0
- package/src/components/tools/engine/task-recovery.ts +109 -0
- package/src/components/tools/engine/use-legacy-llm-task.ts +16 -3
- package/src/components/tools/engine/use-tool-task.ts +77 -53
- package/src/features/tools/app-icon-resizer/app-icon-resizer.spec.ts +1 -1
- package/src/features/tools/app-store-screenshot-generator/app-store-screenshot-generator.container.tsx +6 -8
- package/src/features/tools/app-store-screenshot-generator/app-store-screenshot-generator.spec.ts +1 -1
- package/src/features/tools/app-store-screenshot-generator/widget/app-store-screenshot-generator.tsx +44 -6
- package/src/features/tools/app-store-screenshot-generator/widget/generation.test.ts +126 -0
- package/src/features/tools/app-store-screenshot-generator/widget/generation.ts +52 -14
- package/src/features/tools/cold-start-channel-selector/cold-start-channel-selector.spec.ts +1 -1
- package/src/features/tools/cold-start-channel-selector/widget/cold-start-channel-selector.tsx +45 -16
- package/src/features/tools/competitor-analysis/competitor-analysis.container.tsx +31 -26
- package/src/features/tools/competitor-analysis/competitor-analysis.spec.ts +1 -1
- package/src/features/tools/competitor-analysis/widget/competitor-analysis.tsx +47 -16
- package/src/features/tools/disclaimer-generator/disclaimer-generator.package.ts +4 -4
- package/src/features/tools/email-template-generator/email-template-generator.container.tsx +45 -173
- package/src/features/tools/email-template-generator/email-template-generator.spec.ts +1 -1
- package/src/features/tools/email-template-generator/widget/email-template-generator.tsx +37 -4
- package/src/features/tools/package/to-tool-module.ts +15 -0
- package/src/features/tools/product-name-generator/product-name-generator.spec.ts +1 -1
- package/src/features/tools/product-name-generator/widget/product-name-generator.tsx +60 -27
- package/src/features/tools/product-poster-generator/product-poster-generator.spec.ts +1 -1
- package/src/features/tools/product-poster-generator/widget/constants.ts +3 -1
- package/src/features/tools/product-poster-generator/widget/helpers.test.ts +51 -0
- package/src/features/tools/product-poster-generator/widget/helpers.ts +27 -0
- package/src/features/tools/product-poster-generator/widget/product-poster-generator.tsx +112 -12
- package/src/features/tools/slogan-generator/slogan-generator.package.ts +101 -29
- package/src/features/tools/twitter-gif-downloader/twitter-gif-downloader.container.tsx +2 -3
- package/src/features/tools/twitter-gif-downloader/twitter-gif-downloader.spec.ts +1 -1
- package/src/i18n/messages/en/tools/app-icon-resizer.ts +1 -1
- package/src/i18n/messages/en/tools/app-store-screenshot-generator.ts +3 -3
- package/src/i18n/messages/en/tools/cold-start-channel-selector.ts +4 -4
- package/src/i18n/messages/en/tools/competitor-analysis.ts +14 -10
- package/src/i18n/messages/en/tools/email-template-generator.ts +13 -13
- package/src/i18n/messages/en/tools/product-poster-generator.ts +3 -2
- package/src/i18n/messages/en/tools/twitter-gif-downloader.ts +1 -1
- package/src/i18n/messages/zh/tools/app-store-screenshot-generator.ts +4 -4
- package/src/i18n/messages/zh/tools/cold-start-channel-selector.ts +2 -2
- package/src/i18n/messages/zh/tools/competitor-analysis.ts +14 -10
- package/src/i18n/messages/zh/tools/email-template-generator.ts +12 -12
- package/src/i18n/messages/zh/tools/product-poster-generator.ts +2 -1
- package/src/i18n/messages/zh/tools/twitter-gif-downloader.ts +1 -1
- package/src/i18n/messages/zh-tw/tools/app-store-screenshot-generator.ts +44 -44
- package/src/i18n/messages/zh-tw/tools/cold-start-channel-selector.ts +105 -105
- package/src/i18n/messages/zh-tw/tools/competitor-analysis.ts +44 -40
- package/src/i18n/messages/zh-tw/tools/email-template-generator.ts +112 -112
- package/src/i18n/messages/zh-tw/tools/product-name-generator.ts +92 -92
- package/src/i18n/messages/zh-tw/tools/product-poster-generator.ts +74 -73
- package/src/i18n/messages/zh-tw/tools/twitter-gif-downloader.ts +48 -48
- package/src/lib/tools/cold-start-channel-selector-schema.test.ts +39 -0
- package/src/lib/tools/cold-start-channel-selector-schema.ts +8 -4
- package/src/lib/tools/competitor-analysis-schema.test.ts +69 -0
- package/src/lib/tools/competitor-analysis-schema.ts +53 -5
- package/src/lib/tools/ops-catalog.ts +10 -1
|
@@ -2,8 +2,8 @@ const productNameGenerator = {
|
|
|
2
2
|
meta: {
|
|
3
3
|
title: "產品取名器:App 和 SaaS 起名工具",
|
|
4
4
|
displayTitle: "產品取名器",
|
|
5
|
-
description: "
|
|
6
|
-
intro: "為 App、Web 工具、SaaS 和 AI
|
|
5
|
+
description: "輸入產品想法、目標使用者、命名風格和網域名稱後綴,產生 3-5 個可繼續評估的產品名,展開單個候選後再做網域名稱、搜尋與商標預篩。",
|
|
6
|
+
intro: "為 App、Web 工具、SaaS 和 AI 產品早期命名設計。先拿到少量有理由的候選名,再按需深查網域名稱、搜尋噪音和商標入口,避免一次性把成本花在會被淘汰的名字上。",
|
|
7
7
|
category: "品牌工具",
|
|
8
8
|
keywords: [
|
|
9
9
|
"產品取名器",
|
|
@@ -11,13 +11,13 @@ const productNameGenerator = {
|
|
|
11
11
|
"App 起名",
|
|
12
12
|
"SaaS 命名",
|
|
13
13
|
"AI 產品命名",
|
|
14
|
-
"
|
|
14
|
+
"網域名稱預篩",
|
|
15
15
|
],
|
|
16
16
|
},
|
|
17
17
|
guide: {
|
|
18
18
|
workspaceHeading: "產品取名器",
|
|
19
19
|
workspaceHint:
|
|
20
|
-
"
|
|
20
|
+
"輸入產品想法,產生候選名與預篩線索。",
|
|
21
21
|
workspaceBadge: "3-5 個候選名",
|
|
22
22
|
standard: {
|
|
23
23
|
benefits: {
|
|
@@ -25,15 +25,15 @@ const productNameGenerator = {
|
|
|
25
25
|
cards: [
|
|
26
26
|
{
|
|
27
27
|
title: "可討論的短名單",
|
|
28
|
-
body: "
|
|
28
|
+
body: "首輪只回傳 3-5 個候選名,並附上核心理念和基礎品牌信號,讓命名會先聚焦少數方向。",
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
31
|
title: "更少的早期誤判",
|
|
32
|
-
body: "
|
|
32
|
+
body: "讀音、長度、風格、網域名稱後綴和搜尋噪音會分層呈現,幫助你先排掉不值得深查的名字。",
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
35
|
title: "清楚的複核邊界",
|
|
36
|
-
body: "
|
|
36
|
+
body: "網域名稱和商標只做預篩入口與風險提示,不把 AI 候選名包裝成可直接商用的法律結論。",
|
|
37
37
|
},
|
|
38
38
|
],
|
|
39
39
|
},
|
|
@@ -42,8 +42,8 @@ const productNameGenerator = {
|
|
|
42
42
|
id: "name-shortlist",
|
|
43
43
|
title: "把粗糙想法整理成\n可評審的候選名",
|
|
44
44
|
body: [
|
|
45
|
-
"
|
|
46
|
-
"
|
|
45
|
+
"產品早期起名最怕一次拿到幾十個相似詞,卻沒有理由判斷。這個工具先把產品想法、目標使用者和命名氣質轉成少量候選。",
|
|
46
|
+
"每個名字都帶核心理念和基礎資訊,方便產品、設計、增長和創始團隊快速決定哪些方向值得繼續看。",
|
|
47
47
|
],
|
|
48
48
|
image: {
|
|
49
49
|
src: "/tools/product-name-generator-section-primary-8bit-v2.webp",
|
|
@@ -53,34 +53,34 @@ const productNameGenerator = {
|
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
55
|
id: "name-variations",
|
|
56
|
-
title: "
|
|
56
|
+
title: "用風格、市場和網域名稱偏好\n控制命名方向",
|
|
57
57
|
body: [
|
|
58
58
|
"同一個產品可以走清晰直接、技術感、友好輕量、高級可信或自造詞方向。表單只保留會真正影響結果的核心選擇。",
|
|
59
|
-
"
|
|
59
|
+
"目標市場和網域名稱後綴會影響候選名的讀音、長度和後續檢查路徑,避免把所有 App、SaaS 和 AI 工具套進同一套名字。",
|
|
60
60
|
],
|
|
61
61
|
image: {
|
|
62
62
|
src: "/tools/product-name-generator-section-variation-8bit-v2.webp",
|
|
63
|
-
alt: "
|
|
63
|
+
alt: "像素風命名方向配圖,展示風格、市場和網域名稱偏好影響候選名。",
|
|
64
64
|
},
|
|
65
65
|
},
|
|
66
66
|
{
|
|
67
67
|
id: "name-review",
|
|
68
68
|
title: "先判斷名字是否值得保留\n再做深查",
|
|
69
69
|
body: [
|
|
70
|
-
"
|
|
71
|
-
"
|
|
70
|
+
"網域名稱、搜尋和商標預篩只在你展開單個候選後繼續觸發。這樣可以減少等待,也避免把預算和注意力花在早就會被淘汰的名字上。",
|
|
71
|
+
"深查結果會提供可打開的搜尋入口、風險提示和下一步檢查清單,正式商用前仍需要註冊商確認和專業商標複核。",
|
|
72
72
|
],
|
|
73
73
|
image: {
|
|
74
74
|
src: "/tools/product-name-generator-section-support-8bit-v2.webp",
|
|
75
|
-
alt: "
|
|
75
|
+
alt: "像素風候選名複核配圖,展示網域名稱、搜尋和商標預篩線索。",
|
|
76
76
|
},
|
|
77
77
|
imageFirst: true,
|
|
78
78
|
},
|
|
79
79
|
],
|
|
80
80
|
generation: {
|
|
81
|
-
title: "
|
|
81
|
+
title: "如何產生一份\n產品名短名單",
|
|
82
82
|
imageAlt: "像素風產品取名流程配圖,展示從產品 brief 到候選名和複核材料。",
|
|
83
|
-
ctaLabel: "
|
|
83
|
+
ctaLabel: "產生候選名",
|
|
84
84
|
steps: [
|
|
85
85
|
{
|
|
86
86
|
title: "寫下產品想法",
|
|
@@ -88,15 +88,15 @@ const productNameGenerator = {
|
|
|
88
88
|
},
|
|
89
89
|
{
|
|
90
90
|
title: "選擇命名約束",
|
|
91
|
-
body: "
|
|
91
|
+
body: "確認目標使用者、命名風格、目標市場和網域名稱後綴。已有工作名或候選名可以放到進階設定裡一起篩。",
|
|
92
92
|
},
|
|
93
93
|
{
|
|
94
|
-
title: "
|
|
95
|
-
body: "
|
|
94
|
+
title: "產生首輪短名單",
|
|
95
|
+
body: "工具會回傳 3-5 個候選名,並附核心理念、基礎資訊、快篩維度和可複製結果。",
|
|
96
96
|
},
|
|
97
97
|
{
|
|
98
98
|
title: "展開候選做複核",
|
|
99
|
-
body: "
|
|
99
|
+
body: "對真正有感覺的名字再展開深查,查看網域名稱、搜尋、商標入口、風險提示和下一步檢查。",
|
|
100
100
|
},
|
|
101
101
|
],
|
|
102
102
|
},
|
|
@@ -108,17 +108,17 @@ const productNameGenerator = {
|
|
|
108
108
|
{
|
|
109
109
|
title: "產品名短名單",
|
|
110
110
|
body:
|
|
111
|
-
"
|
|
111
|
+
"首輪回傳少量候選名,每個名字都附核心理念和基礎資訊,方便團隊直接討論。",
|
|
112
112
|
},
|
|
113
113
|
{
|
|
114
114
|
title: "基礎品牌信號",
|
|
115
115
|
body:
|
|
116
|
-
"
|
|
116
|
+
"優先檢查讀音、長度、命名風格和你選擇的網域名稱後綴,先排掉明顯不值得深查的方向。",
|
|
117
117
|
},
|
|
118
118
|
{
|
|
119
119
|
title: "單名深查入口",
|
|
120
120
|
body:
|
|
121
|
-
"
|
|
121
|
+
"只對你展開的候選名繼續看網域名稱、搜尋噪音、商標官方入口、風險提示和下一步檢查。",
|
|
122
122
|
},
|
|
123
123
|
{
|
|
124
124
|
title: "可複製的決策素材",
|
|
@@ -128,25 +128,25 @@ const productNameGenerator = {
|
|
|
128
128
|
],
|
|
129
129
|
howToUse: "如何使用產品取名器",
|
|
130
130
|
howToUseSteps: [
|
|
131
|
-
"
|
|
132
|
-
"
|
|
133
|
-
"
|
|
134
|
-
"
|
|
131
|
+
"填寫產品想法、目標使用者、命名氣質和已有工作名。",
|
|
132
|
+
"選擇目標市場、網域名稱後綴和可接受預算,首輪先保持輕量。",
|
|
133
|
+
"產生 3-5 個候選名後,先看核心理念、讀音和基礎資訊。",
|
|
134
|
+
"對有感覺的名字點擊展開,再單獨做網域名稱、搜尋和商標預篩。",
|
|
135
135
|
],
|
|
136
136
|
capabilityNote:
|
|
137
|
-
"
|
|
137
|
+
"首輪優先解決「有沒有值得繼續看的名字」。網域名稱價格、搜尋噪音和商標安全不會在首輪強行承諾,深查也只作為預篩,不替代註冊商確認或法律意見。",
|
|
138
138
|
stagedOutput: "為什麼分階段輸出",
|
|
139
139
|
stageLabel: "階段",
|
|
140
140
|
stagedOutputBullets: [
|
|
141
141
|
"第一階段只解決「有沒有值得繼續看的名字」:減少等待時間和不必要的深查成本。",
|
|
142
|
-
"
|
|
142
|
+
"第二階段只分析使用者點擊的候選名:網域名稱、搜尋、商標入口和風險點按需展開。",
|
|
143
143
|
"第三階段適合最終決策:把 2-3 個候選名放在一起做紅黃綠判斷和下一步清單。",
|
|
144
144
|
],
|
|
145
145
|
resultGuidance: "拿到候選名後怎麼判斷",
|
|
146
146
|
resultGuidanceBullets: [
|
|
147
|
-
"
|
|
148
|
-
"把 2-3
|
|
149
|
-
"
|
|
147
|
+
"先淘汰讀音不順、過於泛化、和競品太近或看不出產品方向的名字,不急著買網域名稱。",
|
|
148
|
+
"把 2-3 個候選名讀給真實使用者或團隊成員聽,觀察他們能否複述、拼寫和猜到產品大概用途。",
|
|
149
|
+
"只對最終候選展開深查,核對網域名稱價格、搜尋噪音、商標官方入口和需要人工複核的風險點。",
|
|
150
150
|
],
|
|
151
151
|
whyTomako: "為什麼選這個取名器",
|
|
152
152
|
whyTomakoItems: [
|
|
@@ -158,136 +158,136 @@ const productNameGenerator = {
|
|
|
158
158
|
{
|
|
159
159
|
title: "圍繞產品語境篩選",
|
|
160
160
|
body:
|
|
161
|
-
"
|
|
161
|
+
"候選名會結合產品想法、目標使用者、命名風格、已有工作名和目標市場,不把所有 App、SaaS、AI 工具套進同一套名字。",
|
|
162
162
|
},
|
|
163
163
|
{
|
|
164
164
|
title: "先判斷名字,再決定是否深查",
|
|
165
165
|
body:
|
|
166
|
-
"
|
|
166
|
+
"網域名稱、搜尋和商標預篩放在展開後按需觸發,適合早期命名會、產品方向還在變化的階段。",
|
|
167
167
|
},
|
|
168
168
|
{
|
|
169
169
|
title: "邊界清楚,方便複核",
|
|
170
170
|
body:
|
|
171
|
-
"
|
|
171
|
+
"頁面會把網域名稱狀態、商標入口和法律邊界說清楚,讓候選名成為決策起點,而不是冒充最終清關結論。",
|
|
172
172
|
},
|
|
173
173
|
],
|
|
174
174
|
strongName: "好產品名的判斷標準",
|
|
175
175
|
strongNameBullets: [
|
|
176
|
-
"
|
|
176
|
+
"可讀可念:團隊、使用者和投資人第一次聽到時不費勁。",
|
|
177
177
|
"可延展:不鎖死在今天的單一功能,能承載產品線升級。",
|
|
178
|
-
"
|
|
179
|
-
"
|
|
178
|
+
"可檢索:品牌搜尋、App Store、GitHub、社群媒體和網域名稱仍有可得空間。",
|
|
179
|
+
"可講述:名字背後的隱喻能和產品定位、使用者場景或品牌語氣自然連上。",
|
|
180
180
|
"差異感:與同類軟件、AI 工具或頭部競品在拼寫和讀音上拉開距離。",
|
|
181
181
|
],
|
|
182
182
|
mistakes: "命名時最容易踩的坑",
|
|
183
183
|
mistakeBullets: [
|
|
184
|
-
"把「.com
|
|
185
|
-
"
|
|
186
|
-
"
|
|
184
|
+
"把「.com 是否可買」當成唯一標準,忽略目標市場和使用者記憶。",
|
|
185
|
+
"一次產生幾十個好聽名字,卻沒有網域名稱、SEO、商標和品類衝突的分層篩選。",
|
|
186
|
+
"過早追求抽象高級感,導致使用者不知道產品解決什麼問題。",
|
|
187
187
|
"為了包含關鍵詞把名字做得太長,最後既不像品牌,也不利於口頭傳播。",
|
|
188
188
|
],
|
|
189
189
|
useCases: "適合哪些場景",
|
|
190
190
|
useCaseBullets: [
|
|
191
191
|
"獨立開發者給新 App、Web 工具、插件或 AI 小產品定名字。",
|
|
192
192
|
"早期團隊在產品定位還會變化時,先拿到可延展的命名方向。",
|
|
193
|
-
"已經有 2-5
|
|
194
|
-
"
|
|
195
|
-
"
|
|
193
|
+
"已經有 2-5 個候選名,需要判斷哪個更適合繼續買網域名稱和做品牌。",
|
|
194
|
+
"出海產品需要同時考慮英文可讀性、中文語感和全球搜尋噪音。",
|
|
195
|
+
"產品、設計和增長團隊開命名會前,用同一套標準先產生可討論的短名單。",
|
|
196
196
|
],
|
|
197
197
|
faq: "常見問題",
|
|
198
198
|
faqItems: [
|
|
199
199
|
{
|
|
200
|
-
question: "
|
|
200
|
+
question: "為什麼不一次性回傳所有網域名稱和商標分析?",
|
|
201
201
|
answer:
|
|
202
|
-
"
|
|
202
|
+
"命名初期大部分候選會被淘汰。先輕量產生和快篩,再只對使用者點開的名字做深查,可以明顯降低等待時間和不必要的分析成本。",
|
|
203
203
|
},
|
|
204
204
|
{
|
|
205
205
|
question: "我需要寫很完整的產品定位嗎?",
|
|
206
206
|
answer:
|
|
207
|
-
"
|
|
207
|
+
"不需要。寫清產品做什麼、給誰用、想傳達什麼感覺即可;如果只有粗糙想法,也可以先產生方向,再用候選名反推定位是否清楚。",
|
|
208
208
|
},
|
|
209
209
|
{
|
|
210
|
-
question: "
|
|
210
|
+
question: "工具會保證網域名稱可以買到嗎?",
|
|
211
211
|
answer:
|
|
212
|
-
"
|
|
212
|
+
"不會。網域名稱狀態來自 RDAP/DNS 等快篩信號,價格和最終可購買性必須以註冊商頁面為準,尤其是溢價網域名稱。",
|
|
213
213
|
},
|
|
214
214
|
{
|
|
215
215
|
question: "商標預篩可以替代律師嗎?",
|
|
216
216
|
answer:
|
|
217
|
-
"
|
|
217
|
+
"不可以。工具會提供官方資料庫入口、搜尋查詢和風險提示,但不能給出法律清關結論。正式投入品牌資產前應做專業檢索和法律複核。",
|
|
218
218
|
},
|
|
219
219
|
{
|
|
220
220
|
question: "已有候選名也能分析嗎?",
|
|
221
221
|
answer:
|
|
222
|
-
"
|
|
222
|
+
"可以。把候選名按行填到表單裡,工具會把它們納入首輪篩選,也會根據產品定位產生相近變體。",
|
|
223
223
|
},
|
|
224
224
|
{
|
|
225
225
|
question: "提交的產品想法會如何使用?",
|
|
226
226
|
answer:
|
|
227
|
-
"
|
|
227
|
+
"表單內容會用於產生候選名和深查所需的上下文。不要提交機密源碼、未公開商業秘密、客戶隱私或其他敏感個人資訊。",
|
|
228
228
|
},
|
|
229
229
|
{
|
|
230
|
-
question: "
|
|
230
|
+
question: "產生的名字可以直接商用嗎?",
|
|
231
231
|
answer:
|
|
232
|
-
"
|
|
232
|
+
"候選名可以作為命名起點,但正式商用前仍要確認網域名稱、應用程式商店、社群媒體帳號、商標近似和目標市場語義,必要時請做專業商標檢索。",
|
|
233
233
|
},
|
|
234
234
|
],
|
|
235
235
|
ctaPrimary: "繼續做 GTM 自檢",
|
|
236
|
-
ctaSecondary: "
|
|
236
|
+
ctaSecondary: "回傳全部工具",
|
|
237
237
|
ctaHint:
|
|
238
|
-
"
|
|
238
|
+
"確定候選名後,繼續評估定位、通路、素材和衡量指標是否準備好上線。",
|
|
239
239
|
visualAlt: {
|
|
240
240
|
hero: "產品取名器首屏視覺,展示粗略想法被整理成候選方向和檢查信號。",
|
|
241
241
|
value: "聚焦短名單視覺,展示零散命名想法被篩成少量高質量候選方向。",
|
|
242
|
-
checks: "
|
|
242
|
+
checks: "候選名預篩視覺,展示網域名稱、搜尋和人工複核等檢查入口。",
|
|
243
243
|
decision: "命名決策包視覺,展示候選方向進入保留、複核和決策流程。",
|
|
244
244
|
},
|
|
245
245
|
},
|
|
246
246
|
widget: {
|
|
247
|
-
formTitle: "
|
|
247
|
+
formTitle: "產生產品名候選",
|
|
248
248
|
formHint:
|
|
249
|
-
"
|
|
249
|
+
"先產生可評估的候選名;深度查詢留到卡片展開後再做。",
|
|
250
250
|
workingNameLabel: "已有產品名或工作名",
|
|
251
251
|
workingNamePlaceholder: "例如 Kitepath,可留空",
|
|
252
252
|
descriptionLabel: "產品想法",
|
|
253
253
|
descriptionPlaceholder:
|
|
254
|
-
"
|
|
255
|
-
targetUsersLabel: "
|
|
254
|
+
"描述產品做什麼、給誰用、解決什麼問題。例如:一個幫獨立開發者自動產生上線素材和通路計劃的 AI 工作區。",
|
|
255
|
+
targetUsersLabel: "目標使用者",
|
|
256
256
|
targetUsersPlaceholder: "例如 獨立開發者、SaaS 創始人、出海小團隊",
|
|
257
257
|
desiredVibeLabel: "希望傳達的感覺",
|
|
258
258
|
desiredVibePlaceholder: "例如 清爽、可信、技術感、輕一點、不要太企業",
|
|
259
259
|
styleLabel: "命名風格",
|
|
260
260
|
marketLabel: "目標市場 / 語言",
|
|
261
261
|
marketPlaceholder: "選擇目標市場",
|
|
262
|
-
domainLabel: "
|
|
263
|
-
domainPlaceholder: "
|
|
262
|
+
domainLabel: "優先查詢的網域名稱後綴",
|
|
263
|
+
domainPlaceholder: "選擇網域名稱後綴",
|
|
264
264
|
maxPriceLabel: "最高可接受價格(美元)",
|
|
265
|
-
countLabel: "
|
|
266
|
-
advancedLabel: "
|
|
267
|
-
fallbackLabel: "
|
|
265
|
+
countLabel: "回傳數量",
|
|
266
|
+
advancedLabel: "更多篩選設定",
|
|
267
|
+
fallbackLabel: "允許備選組合網域名稱",
|
|
268
268
|
fallbackHint: "例如 get + 名稱、try + 名稱、名稱 + app、名稱 + hq。",
|
|
269
269
|
candidateNamesLabel: "已有候選名",
|
|
270
270
|
candidateNamesPlaceholder: "每行一個,或用逗號分隔。例如:\nKitepath\nNimbly\nAuralis",
|
|
271
271
|
optional: "可選",
|
|
272
|
-
generateAgent: "
|
|
273
|
-
generatingAgent: "
|
|
274
|
-
retryAgent: "
|
|
272
|
+
generateAgent: "開始產生候選名",
|
|
273
|
+
generatingAgent: "正在產生候選名",
|
|
274
|
+
retryAgent: "重新產生候選名",
|
|
275
275
|
reset: "重置",
|
|
276
|
-
emptyTitle: "
|
|
276
|
+
emptyTitle: "等待產生候選名",
|
|
277
277
|
emptyHint:
|
|
278
|
-
"
|
|
279
|
-
emptyBullets: ["3-5 個候選名", "
|
|
278
|
+
"首輪結果會逐個展示,每張卡片先只放核心理念和基礎資訊;網域名稱、SEO、商標預篩在展開後單獨觸發。",
|
|
279
|
+
emptyBullets: ["3-5 個候選名", "核心理念與基礎資訊", "按需觸發二次深查"],
|
|
280
280
|
workspaceVisualAlt:
|
|
281
|
-
"
|
|
282
|
-
loadingTitle: "
|
|
281
|
+
"工作區右側視覺,展示粗略命名輸入被整理成三個候選方向和網域名稱後綴信號。",
|
|
282
|
+
loadingTitle: "正在產生與快篩",
|
|
283
283
|
loadingStatus: "正在準備候選名短名單",
|
|
284
284
|
loadingCountdown: "約 1 分鐘內",
|
|
285
285
|
loadingHint:
|
|
286
|
-
"
|
|
286
|
+
"正在根據產品想法產生候選名,並做基礎讀音、長度和網域名稱後綴快篩。首輪不會做完整商標清關。",
|
|
287
287
|
loadingSteps: [
|
|
288
|
-
"
|
|
288
|
+
"產生命名策略和候選名",
|
|
289
289
|
"運行讀音、長度和基礎品牌篩選",
|
|
290
|
-
"
|
|
290
|
+
"只檢查你選擇的網域名稱後綴",
|
|
291
291
|
"準備可展開的深查入口",
|
|
292
292
|
],
|
|
293
293
|
errorTitle: "暫時沒有拿到取名結果",
|
|
@@ -302,14 +302,14 @@ const productNameGenerator = {
|
|
|
302
302
|
detailAwaiting: "深查已完成初步分析,正在整理可展示結果。",
|
|
303
303
|
score: "評分",
|
|
304
304
|
coreIdea: "核心理念",
|
|
305
|
-
basics: "
|
|
306
|
-
domains: "
|
|
305
|
+
basics: "基礎資訊",
|
|
306
|
+
domains: "網域名稱快照",
|
|
307
307
|
checks: "快篩維度",
|
|
308
|
-
seoDetail: "SEO /
|
|
308
|
+
seoDetail: "SEO / 搜尋預篩",
|
|
309
309
|
trademarkDetail: "商標預篩",
|
|
310
310
|
risks: "風險提示",
|
|
311
311
|
nextChecks: "下一步檢查",
|
|
312
|
-
openLink: "
|
|
312
|
+
openLink: "打開連結",
|
|
313
313
|
taskIdLabel: "任務 ID",
|
|
314
314
|
styles: {
|
|
315
315
|
clear: "清晰直接",
|
|
@@ -348,34 +348,34 @@ const productNameGenerator = {
|
|
|
348
348
|
stages: {
|
|
349
349
|
unchecked_idea: "未檢查想法",
|
|
350
350
|
fast_screened: "已快篩",
|
|
351
|
-
domain_checked: "
|
|
351
|
+
domain_checked: "已查網域名稱",
|
|
352
352
|
deep_researched: "已深查",
|
|
353
353
|
},
|
|
354
354
|
errors: {
|
|
355
|
-
required: "
|
|
356
|
-
fixFields: "
|
|
355
|
+
required: "請至少填寫產品想法,並選擇目標市場和網域名稱後綴。",
|
|
356
|
+
fixFields: "請先修正表單中標註的位置,再產生候選名。",
|
|
357
357
|
descriptionRequired: "請先填寫產品想法。",
|
|
358
358
|
descriptionShort: "產品想法再補充一點點就能開始,至少寫 4 個字。",
|
|
359
359
|
descriptionMeaningful: "請填寫真實的產品想法,不要只輸入數字或佔位符。",
|
|
360
360
|
market: "請至少選擇一個目標市場或語言。",
|
|
361
|
-
domain: "
|
|
361
|
+
domain: "請至少選擇一個要優先查詢的網域名稱後綴。",
|
|
362
362
|
maxPrice: "最高可接受價格需要是 0 到 50000 之間的數字。",
|
|
363
363
|
candidateNames: "已有候選名太長了,請控制在 500 個字符以內。",
|
|
364
364
|
copy: "當前瀏覽器無法複製,請稍後重試。",
|
|
365
365
|
agent:
|
|
366
|
-
"
|
|
366
|
+
"取名任務提交或產生失敗。請稍後重試;當前沒有拿到可展示的取名結果。",
|
|
367
367
|
gateway:
|
|
368
368
|
"在線任務服務暫時不可用,任務沒有創建成功。這不是表單選擇問題,請稍後重試。",
|
|
369
369
|
noResult:
|
|
370
|
-
"
|
|
370
|
+
"取名流程結束後沒有回傳可展示的結構化結果。請稍後重試。",
|
|
371
371
|
invalidResult:
|
|
372
|
-
"
|
|
372
|
+
"回傳結果的結構或內容不符合取名器要求。請重新產生。",
|
|
373
373
|
demoFallbackResult:
|
|
374
|
-
"
|
|
374
|
+
"回傳的候選名疑似示例或兜底名單,頁面已拒絕展示。請重新產生,或確認遠端取名流程已更新。",
|
|
375
375
|
noDetail:
|
|
376
|
-
"
|
|
376
|
+
"深查任務結束後沒有回傳可展示結果。請重試。",
|
|
377
377
|
invalidDetailResult:
|
|
378
|
-
"
|
|
378
|
+
"深查回傳內容不符合本工具需要的結構。請重試。",
|
|
379
379
|
},
|
|
380
380
|
},
|
|
381
381
|
} as const;
|