humanizer-th 0.0.0-stage → 0.5.0

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.
Files changed (34) hide show
  1. package/LICENSE +21 -0
  2. package/README.en.md +176 -0
  3. package/README.md +227 -2
  4. package/bin/cli.js +123 -0
  5. package/package.json +33 -4
  6. package/skills/humanizer-th/SKILL.md +254 -0
  7. package/skills/humanizer-th/agents/openai.yaml +4 -0
  8. package/skills/humanizer-th/references/patterns.md +574 -0
  9. package/skills/humanizer-th/references/registers.md +127 -0
  10. package/skills/humanizer-th/references/style.md +102 -0
  11. package/skills/humanizer-th/references/word-swaps.md +206 -0
  12. package/skills/localize-th/SKILL.md +213 -0
  13. package/skills/localize-th/agents/openai.yaml +4 -0
  14. package/skills/localize-th/references/characters.md +89 -0
  15. package/skills/localize-th/references/formats.md +154 -0
  16. package/skills/localize-th/references/games.md +74 -0
  17. package/skills/localize-th/references/glossary.md +168 -0
  18. package/skills/localize-th/references/patterns.md +574 -0
  19. package/skills/localize-th/references/registers.md +127 -0
  20. package/skills/localize-th/references/style.md +102 -0
  21. package/skills/localize-th/references/subtitles.md +110 -0
  22. package/skills/localize-th/references/translation.md +255 -0
  23. package/skills/localize-th/references/ui.md +117 -0
  24. package/skills/localize-th/references/word-swaps.md +206 -0
  25. package/skills/localize-th/scripts/check_translation.py +484 -0
  26. package/skills/script-th/SKILL.md +162 -0
  27. package/skills/script-th/agents/openai.yaml +4 -0
  28. package/skills/script-th/references/characters.md +89 -0
  29. package/skills/script-th/references/dialogue.md +236 -0
  30. package/skills/script-th/references/patterns.md +574 -0
  31. package/skills/script-th/references/registers.md +127 -0
  32. package/skills/script-th/references/style.md +102 -0
  33. package/skills/script-th/references/video-prompts.md +103 -0
  34. package/skills/script-th/references/voice.md +107 -0
@@ -0,0 +1,213 @@
1
+ ---
2
+ name: localize-th
3
+ description: Translates English into natural Thai for subtitles (SRT, VTT, ASS), dubbing scripts, app and website UI strings (JSON, PO, XLIFF, iOS .strings, Android XML, ARB, CSV), game text (dialogue, items, skills, quests, menus) and plain pasted text, then reviews existing Thai translations. Keeps timestamps, keys, placeholders and markup intact, follows Thai subtitle limits (35 characters per line, 2 lines, reading speed), picks pronouns and particles per character, keeps terms consistent with a glossary, and removes translationese and AI-writing tells. Explains in the user's language, with back-translations for non-Thai readers. Modes - แปล (translate, default), ตรวจคำแปล (review) and แก้คำแปล (fix). Use when the user asks to แปลซับ, แปลซับไตเติล, แปลบทพากย์, แปลเกม, แปล UI, แปลแอป, แปลเว็บ, ทำ localization, ตรวจคำแปลไทย, or translate subtitles, game text, app strings or website copy into Thai. English source only. Not for Thai-to-English, and not for rewriting Thai that was written in Thai (use humanizer-th).
4
+ license: MIT
5
+ ---
6
+
7
+ # localize-th
8
+
9
+ แปลภาษาอังกฤษเป็นภาษาไทยสำหรับซับไตเติล หน้าจอแอปและเว็บไซต์ และเกม ให้คนไทยอ่านแล้วไม่รู้สึกว่าเป็นงานแปล ความหมายต้องครบ และไฟล์ต้องเอากลับไปใช้ได้ทันทีโดยไม่พัง
10
+
11
+ งานนี้มีเป้าหมาย 2 อย่างที่ต้องได้พร้อมกัน
12
+
13
+ 1. **ภาษา:** อ่านเหมือนคนไทยเขียน ไม่ใช่แปลทีละคำ ตัวละครพูดเหมือนคน ปุ่มสั้นและชัด
14
+ 2. **ไฟล์:** เวลาในซับ key ในไฟล์ UI ตัวแปรอย่าง `{name}` หรือ `%s` และแท็กต่างๆ ต้องอยู่ครบเหมือนต้นฉบับทุกตัว คำแปลที่สวยแต่ทำแอปพังถือว่าใช้ไม่ได้
15
+
16
+ ## ใช้เมื่อไหร่
17
+
18
+ - ผู้ใช้ส่งซับไตเติล ไฟล์ข้อความ UI บทเกม หรือข้อความภาษาอังกฤษ แล้วขอให้แปลเป็นไทย
19
+ - ผู้ใช้ส่งคำแปลไทยที่มีอยู่แล้ว (พร้อมต้นฉบับหรือไม่ก็ได้) แล้วขอให้ตรวจหรือแก้
20
+
21
+ **ไม่ใช้เมื่อ**
22
+
23
+ - ต้นฉบับเป็นภาษาอื่นที่ไม่ใช่อังกฤษ ให้บอกผู้ใช้ว่า skill นี้เขียนกฎไว้สำหรับต้นฉบับภาษาอังกฤษ ถ้าผู้ใช้ยังอยากให้แปล ทำได้แต่ต้องบอกว่าไม่ได้ผ่านกฎชุดนี้ครบ
24
+ - แปลไทยเป็นอังกฤษ
25
+ - ข้อความไทยที่เขียนเป็นไทยตั้งแต่แรก แล้วอยากให้เป็นธรรมชาติขึ้น ใช้ skill `humanizer-th`
26
+
27
+ ## ไฟล์อ้างอิง
28
+
29
+ เปิดอ่านเมื่อจำเป็น ไม่ต้องอ่านทุกไฟล์ทุกครั้ง
30
+
31
+ | ไฟล์ | ใช้เมื่อ |
32
+ |---|---|
33
+ | [references/translation.md](references/translation.md) | ทุกครั้งที่แปล หลักการแปลและรูปแบบภาษาแปล LT01–LT12 |
34
+ | [references/subtitles.md](references/subtitles.md) | งานซับไตเติลและบทพากย์ ความยาวบรรทัด การตัดบรรทัด ความเร็วการอ่าน เครื่องหมาย |
35
+ | [references/ui.md](references/ui.md) | งานแอปและเว็บไซต์ ปุ่ม ข้อความแจ้งข้อผิดพลาด ตัวแปร พหูพจน์ |
36
+ | [references/games.md](references/games.md) | งานเกม ตัวละคร สรรพนาม ชื่อไอเทมและสกิล ข้อความที่ขึ้นกับเพศผู้เล่น |
37
+ | [references/formats.md](references/formats.md) | ทุกครั้งที่ได้เป็นไฟล์ ว่าแต่ละไฟล์แปลส่วนไหน ห้ามแตะส่วนไหน |
38
+ | [references/glossary.md](references/glossary.md) | หาคำแปลมาตรฐานของคำ UI และคำในเกม การสะกดคำทับศัพท์ |
39
+ | [references/characters.md](references/characters.md) | งานที่มีคนพูด สรรพนามและคำลงท้ายตามความสัมพันธ์ ตารางตัวละคร |
40
+ | [references/patterns.md](references/patterns.md) | ตรวจรูปแบบภาษาแบบ AI TH01–TH29 ในคำแปล |
41
+ | [references/registers.md](references/registers.md) | เลือกระดับภาษาของข้อความที่ไม่ใช่บทพูด |
42
+ | [references/word-swaps.md](references/word-swaps.md) | หาคำแทนสำนวนแข็ง |
43
+ | [references/style.md](references/style.md) | ผู้ใช้ให้งานแปลเดิมมา แล้วต้องแปลต่อให้เข้ากัน |
44
+
45
+ ## เลือกโหมด
46
+
47
+ | โหมด | เมื่อผู้ใช้พูดว่า | ทำอะไร |
48
+ |---|---|---|
49
+ | `แปล` (translate, ค่าเริ่มต้น) | "แปลซับนี้" "แปลไฟล์นี้เป็นไทย" หรือส่งข้อความอังกฤษมาโดยไม่บอกโหมด | คำแปลในรูปแบบเดียวกับต้นฉบับ + บันทึกการแปลสั้นๆ |
50
+ | `ตรวจคำแปล` (review) | "ตรวจคำแปลให้หน่อย" "แปลแบบนี้โอเคไหม" | รายการจุดที่มีปัญหา พร้อมรหัสและคำแปลที่เสนอ **ไม่แก้ไฟล์** |
51
+ | `แก้คำแปล` (fix) | "แก้คำแปลนี้ให้" "ปรับซับให้ลื่นขึ้น" | ไฟล์คำแปลที่แก้แล้ว + รายการจุดที่แก้ |
52
+
53
+ ## ขั้นตอน
54
+
55
+ ทำ 5 ขั้นตามลำดับ
56
+
57
+ ### ขั้นที่ 1: ดูว่าเป็นงานอะไร
58
+
59
+ ระบุ 3 อย่างนี้ก่อนแปล
60
+
61
+ 1. **ประเภทงาน:** ซับไตเติล / บทพากย์ / UI แอปหรือเว็บ / เกม / ข้อความทั่วไป (เกมมักมีทั้งบทพูดและ UI ในงานเดียว ให้ใช้กฎของทั้งสองส่วน)
62
+ 2. **รูปแบบไฟล์:** SRT, VTT, ASS, JSON, PO, XLIFF, .strings, Android XML, ARB, CSV หรือข้อความเปล่า ดูกฎของแต่ละแบบใน `formats.md`
63
+ 3. **บริบท:** แนวเรื่อง (ดราม่า ตลก แฟนตาซี) กลุ่มผู้ชม (เด็ก วัยรุ่น ผู้ใหญ่) ตัวละครและความสัมพันธ์ ชื่อแอปหรือแบรนด์ และอภิธานศัพท์ (glossary) ถ้าผู้ใช้มี
64
+
65
+ ถ้าบริบทขาดจนแปลผิดได้จริง เช่น ไม่รู้ว่าตัวละครสองตัวเป็นพี่น้องหรือคู่รัก ให้ถาม**คำถามเดียว**ที่สำคัญที่สุด ถ้าเดาได้พอสมควร ให้แปลไปก่อน แล้วบอกสิ่งที่เดาไว้ในบันทึกการแปล
66
+
67
+ ### ขั้นที่ 2: เตรียมคำศัพท์และตัวละคร
68
+
69
+ - **อภิธานศัพท์:** ถ้าผู้ใช้ให้มา ใช้ตามนั้นทุกจุด แม้จะไม่ตรงกับ `glossary.md` ถ้าไม่มี ให้ใช้ `glossary.md` แล้วจดคำที่เลือกไว้ใช้ให้ตรงกันทั้งไฟล์
70
+ - **ชื่อเฉพาะ:** ตัดสินครั้งเดียวว่าชื่อไหนทับศัพท์ ชื่อไหนแปลความหมาย ชื่อไหนคงเป็นอังกฤษ แล้วใช้แบบเดียวกันทั้งงาน (ดู `games.md` หัวข้อชื่อเฉพาะ)
71
+ - **ตัวละคร (ซับและเกม):** ทำตารางตัวละครตาม `characters.md` ว่าใครเรียกตัวเองว่าอะไร เรียกอีกฝ่ายว่าอะไร ใช้คำลงท้ายแบบไหน ห้ามเดาเพศจากชื่ออย่างเดียว ให้ดูจากบริบท เช่น he/she หรือฉากที่เห็น
72
+
73
+ ### ขั้นที่ 3: แปล
74
+
75
+ - แปลความหมายและเจตนา ไม่ใช่แปลทีละคำ อ่านทั้งฉากหรือทั้งหน้าจอก่อนแปลบรรทัดแรก
76
+ - เขียนแบบที่คนไทยพูดหรือเขียนจริงในสถานการณ์นั้น ไล่หารูปแบบภาษาแปลตาม `translation.md` (LT01–LT12) และรูปแบบ AI ตาม `patterns.md`
77
+ - ใช้กฎเฉพาะของงาน
78
+ - ซับ: ความยาวบรรทัด การตัดบรรทัด ความเร็วการอ่าน ตาม `subtitles.md` ย่อได้แต่ใจความต้องครบ
79
+ - บทพากย์: ความยาวที่พูดใกล้ต้นฉบับ เขียนให้อ่านออกเสียงได้ทันที ตาม `subtitles.md` หัวข้อบทพากย์
80
+ - UI: สั้น ชัด ทำตามได้ทันที ตาม `ui.md`
81
+ - เกม: น้ำเสียงตัวละคร ชื่อไอเทมและสกิล ตาม `games.md`
82
+ - ไฟล์ยาว: แปลทีละช่วง (เช่น ทีละ 100–200 บล็อกของซับ หรือทีละหน้าจอของ UI) แต่ใช้ตารางคำศัพท์และตัวละครชุดเดียวกันตลอด
83
+
84
+ ### ขั้นที่ 4: ตรวจไฟล์
85
+
86
+ เทียบไฟล์ที่แปลกับต้นฉบับ
87
+
88
+ - [ ] จำนวนบล็อกซับ เลขลำดับ และเวลาเหมือนเดิมทุกบล็อก
89
+ - [ ] key ทุกตัวอยู่ครบ ไม่มี key ใหม่ ไม่มี key หาย ลำดับเดิม
90
+ - [ ] ตัวแปรและ placeholder (`{name}` `{{count}}` `%s` `%1$d` `[PlayerName]`) ครบทุกตัว สะกดเหมือนเดิมทุกตัวอักษร
91
+ - [ ] แท็ก (`<b>` `<i>` `{\i1}` `\N` `<color=#f00>`) ครบ เปิดและปิดคู่กัน
92
+ - [ ] โครงสร้างพหูพจน์แบบ ICU (`{count, plural, ...}`) ยังอยู่ แปลเฉพาะข้อความข้างใน
93
+ - [ ] ไฟล์ยังเป็น JSON, XML หรือ CSV ที่ถูกต้อง เครื่องหมายคำพูดภายในข้อความถูก escape
94
+
95
+ ถ้าเครื่องมือที่ใช้อยู่รันคำสั่งได้ ให้รันสคริปต์ที่มากับ skill นี้ เทียบต้นฉบับกับคำแปล แล้วแก้ทุกจุดที่ขึ้น `ERROR` ส่วน `WARN` ให้แก้ถ้าแก้ได้โดยไม่เสียใจความ
96
+
97
+ ```
98
+ python3 scripts/check_translation.py ต้นฉบับ.srt คำแปล.srt
99
+ python3 scripts/check_translation.py ไฟล์.po
100
+ ```
101
+
102
+ (path `scripts/` นับจากโฟลเดอร์ของ skill นี้) สคริปต์รองรับ SRT, VTT, ASS, JSON, ARB, PO, XLIFF, .strings, Android XML และ CSV ถ้ารันไม่ได้ ให้ไล่เช็กตามรายการข้างบนเอง
103
+
104
+ ### ขั้นที่ 5: อ่านทวนเป็นภาษาไทย
105
+
106
+ อ่านคำแปลโดยไม่ดูต้นฉบับ เหมือนเป็นคนดูหรือผู้ใช้ชาวไทย
107
+
108
+ - [ ] อ่านแล้วไม่สะดุด ไม่มีประโยคที่ฟังเหมือนแปลมา
109
+ - [ ] ตัวละครแต่ละตัวพูดเหมือนเดิมตลอดเรื่อง สรรพนามไม่สลับไปมา
110
+ - [ ] คำศัพท์เดียวกันแปลเหมือนกันทุกจุด
111
+ - [ ] ไม่มีอีโมจิหรือ "!" ที่ต้นฉบับไม่ได้ต้องการ (ดู TH29 และ `subtitles.md`)
112
+ - [ ] ความหมาย ตัวเลข ชื่อ และข้อมูลครบตามต้นฉบับ
113
+
114
+ ## ข้อห้าม
115
+
116
+ 1. ห้ามเปลี่ยนเวลาในซับ key ตัวแปร แท็ก และโครงสร้างไฟล์
117
+ 2. ห้ามตัดใจความหรือเพิ่มข้อมูลที่ต้นฉบับไม่มี ซับย่อคำได้ แต่เรื่องต้องไม่เปลี่ยน
118
+ 3. ห้ามลดหรือเพิ่มความแรงของคำหยาบ ความรุนแรง หรือเรื่องทางเพศจากต้นฉบับ เว้นแต่ผู้ใช้กำหนดเรตไว้
119
+ 4. ห้ามแปลชื่อแบรนด์ ชื่อแอป ชื่อเฉพาะที่ผู้ใช้หรืออภิธานศัพท์กำหนดให้คงไว้
120
+ 5. ห้ามจงใจใส่คำผิด และห้ามเดาเพศตัวละครจากชื่ออย่างเดียว
121
+ 6. ถ้ากฎสองข้อชนกัน เช่น ซับยาวเกินแต่ตัดคำไม่ได้โดยไม่เสียใจความ ให้รักษาใจความไว้ก่อน แล้วบอกในบันทึกการแปลว่าบล็อกไหนยาวเกิน
122
+
123
+ ## รูปแบบคำตอบ
124
+
125
+ ### ภาษาของคำตอบ
126
+
127
+ - **คำแปลเป็นภาษาไทยเสมอ**
128
+ - **ส่วนที่อธิบายให้ผู้ใช้อ่าน ใช้ภาษาเดียวกับคำขอ:** บันทึกการแปล รายการที่ตรวจเจอ จุดที่แก้ คำถาม และหัวข้อในแบบคำตอบด้านล่าง ถ้าผู้ใช้สั่งเป็นภาษาอังกฤษ ให้เขียนส่วนนี้เป็นภาษาอังกฤษทั้งหมด เช่น `บันทึกการแปล:` เป็น `Translation notes:` ถ้าสั่งเป็นภาษาไทยหรือไทยปนอังกฤษ ใช้ภาษาไทย
129
+ - **คำไทยที่ยกมาอ้างในคำอธิบาย** คงเป็นภาษาไทย แล้วบอกความหมายในวงเล็บ เช่น "นาย" (casual "you", used between friends) รหัส LTxx และ THxx คงไว้เหมือนเดิม
130
+ - **คำแปลกลับ:** ถ้าผู้ใช้สั่งเป็นภาษาอื่นที่ไม่ใช่ไทย หรือบอกว่าอ่านไทยไม่ออก และงานมีไม่เกินราว 30 บรรทัด บล็อก หรือ key ให้แนบตารางคำแปลกลับไว้ท้ายคำตอบ ใต้หัวข้อ `Back-translation:` (คอลัมน์ บล็อกหรือ key / ไทย / คำแปลกลับ) ถ้ายาวกว่านั้น ให้บอกในบันทึกว่าทำให้ได้ ห้ามใส่คำแปลกลับลงในไฟล์คำแปลเด็ดขาด เขียนคำแปลกลับตามความหมายจริงของภาษาไทย ไม่ต้องเกลาให้สวย เพราะมีไว้ให้ผู้ใช้ตรวจว่าความหมายยังตรง และบอกสิ่งที่ภาษาไทยใส่เพิ่มไว้ในวงเล็บ เช่น `(polite, female speaker)` `(calls him "older brother")`
131
+
132
+ ### `แปล`
133
+
134
+ ```
135
+ [ไฟล์หรือข้อความที่แปลแล้ว ในรูปแบบเดียวกับต้นฉบับ]
136
+
137
+ ---
138
+ บันทึกการแปล:
139
+ - ประเภทงาน: ซับไตเติล SRT 48 บล็อก
140
+ - ตัวละคร: มายา (ผู้หญิง) เรียกตัวเองว่า "ฉัน" เรียกเจคว่า "นาย" / เจค (ผู้ชาย) ใช้ "ผม" กับ "คุณ" ช่วงต้นเรื่อง
141
+ - คำศัพท์ที่เลือก: "Resistance" แปลว่า "กลุ่มต่อต้าน"
142
+ - สิ่งที่เดาไว้: ...
143
+ - บล็อกที่ยาวเกินกำหนด: ...
144
+ ```
145
+
146
+ - ถ้าได้เป็นไฟล์ ให้ส่งไฟล์เต็มที่เอาไปใช้ได้ทันที ไม่ตัดบางส่วนแล้วเขียนว่า "...ที่เหลือเหมือนเดิม"
147
+ - ถ้าไฟล์ยาวเกินจะส่งในคำตอบเดียว ให้ส่งเป็นช่วงๆ บอกว่าช่วงนี้คือบล็อกไหนถึงบล็อกไหน และยังเหลืออีกเท่าไหร่
148
+ - บันทึกการแปลใส่เฉพาะสิ่งที่ผู้ใช้ต้องรู้ ไม่ต้องอธิบายทุกบรรทัด
149
+ - ข้อความสั้น (ไม่กี่บรรทัด) ไม่ต้องมีบันทึก ถ้าไม่มีอะไรต้องแจ้ง
150
+
151
+ ### `ตรวจคำแปล`
152
+
153
+ ```
154
+ พบ 5 จุด:
155
+
156
+ 1. บล็อก 12 "มันเป็นไปไม่ได้" (LT03) "มัน" แปลจาก it → เสนอ "เป็นไปไม่ได้หรอก"
157
+ 2. key `checkout.button` "ดำเนินการชำระเงิน" (UI) ยาวเกินปุ่ม → เสนอ "ชำระเงิน"
158
+ 3. บล็อก 30 ตัวแปร `{count}` หายไป (ไฟล์)
159
+ ...
160
+
161
+ ภาพรวม: [1–2 ประโยค]
162
+ ```
163
+
164
+ - เรียงตามลำดับในไฟล์ ปัญหาที่ทำไฟล์พังให้ติดป้าย `(ไฟล์)` และขึ้นก่อนในภาพรวม
165
+ - ถ้าไม่พบปัญหา ให้เขียนว่า `ไม่พบจุดที่ต้องแก้`
166
+
167
+ ### `แก้คำแปล`
168
+
169
+ ส่งไฟล์ที่แก้แล้วทั้งไฟล์ ตามด้วยรายการ `จุดที่แก้:` แบบเดียวกับ `ตรวจคำแปล`
170
+
171
+ ## กรณีพิเศษ
172
+
173
+ - **เพลงในหนังหรือเกม:** แปลเมื่อเนื้อเพลงเกี่ยวกับเรื่อง หรือผู้ใช้ขอ ถ้าไม่เกี่ยว ให้คงไว้หรือเว้นตามที่ผู้ใช้กำหนด ไม่ต้องแปลให้สัมผัส เว้นแต่ผู้ใช้ขอ
174
+ - **มุกและการเล่นคำ:** หามุกไทยที่ให้ผลใกล้เคียงกัน ถ้าหาไม่ได้ ให้แปลความหมายให้เข้าใจ แล้วบอกในบันทึกการแปล
175
+ - **ป้ายและตัวหนังสือบนจอ:** แปลเมื่อเกี่ยวกับเรื่อง ใส่วงเล็บหรือตำแหน่งตามที่ผู้ใช้กำหนด
176
+ - **ต้นฉบับผิดหรือกำกวม:** แปลตามเจตนาที่น่าจะเป็น แล้วบอกในบันทึก
177
+ - **ผู้ใช้ให้งานแปลเดิมมาด้วย** (ซับตอนก่อน ข้อความในแอปเวอร์ชันเดิม งานของทีมแปลเดิม): ทำโปรไฟล์ตาม `style.md` แล้วแปลให้เข้ากับของเดิม ทั้งคำศัพท์ สรรพนาม การพูดกับผู้ใช้ และความแรงของภาษา ถ้างานเดิมขัดกับค่าเริ่มต้นของ skill ให้ยึดงานเดิมเพื่อความต่อเนื่อง ยกเว้นจุดที่ผิดชัดๆ เช่น แปลผิดความหมาย หรือตัวแปรหาย ให้แจ้งในบันทึกการแปล
178
+ - **เนื้อหาเฉพาะทาง** (กฎหมาย การแพทย์ การเงิน): แปลให้ตรงความหมาย แจ้งในบันทึกว่าควรให้ผู้เชี่ยวชาญตรวจอีกรอบ
179
+
180
+ ## ตัวอย่างสั้น
181
+
182
+ **ผู้ใช้:** แปลซับนี้หน่อย ฉากพี่สาวโทรหาน้องชายที่หายไปหลายวัน
183
+
184
+ ```
185
+ 14
186
+ 00:02:10,500 --> 00:02:13,200
187
+ Where have you been? I've been calling you all week!
188
+
189
+ 15
190
+ 00:02:13,400 --> 00:02:15,000
191
+ - It's complicated.
192
+ - Then uncomplicate it.
193
+ ```
194
+
195
+ **ผลลัพธ์:**
196
+
197
+ ```
198
+ 14
199
+ 00:02:10,500 --> 00:02:13,200
200
+ แกหายไปไหนมา
201
+ พี่โทรหาทั้งอาทิตย์แล้วนะ
202
+
203
+ 15
204
+ 00:02:13,400 --> 00:02:15,000
205
+ - มันซับซ้อนน่ะ
206
+ - งั้นก็เล่ามาให้เข้าใจ
207
+
208
+ ---
209
+ บันทึกการแปล:
210
+ - พี่สาวเรียกน้องว่า "แก" แทนตัวเองว่า "พี่" ตามที่พี่น้องไทยพูดกัน
211
+ - ตัด "!" ออก ใช้ "นะ" แสดงอารมณ์แทน
212
+ - "uncomplicate it" เป็นการเล่นคำ แปลตามความหมายแทน
213
+ ```
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "localize-th"
3
+ short_description: "แปลซับ เกม แอป และเว็บไซต์เป็นภาษาไทยที่เป็นธรรมชาติ"
4
+ default_prompt: "ใช้ $localize-th แปลไฟล์นี้เป็นภาษาไทย คงเวลา key และตัวแปรไว้ครบ"
@@ -0,0 +1,89 @@
1
+ # ตัวละคร สรรพนาม และคำลงท้ายในบทพูด
2
+
3
+ ใช้กับทุกงานที่มีคนพูด ทั้งซับไตเติล บทเกม และบทละคร
4
+
5
+ ภาษาอังกฤษมี I กับ you แบบเดียวใช้กับทุกคน แต่ภาษาไทยต้องเลือกสรรพนามตามว่าใครพูดกับใคร อายุห่างกันแค่ไหน สนิทกันแค่ไหน และกำลังอารมณ์ไหน เลือกผิดคนดูรู้ทันทีว่าเป็นงานแปลหรือเป็นบทที่ AI เขียน
6
+
7
+ ## 1. หลักการ
8
+
9
+ 1. **ตัดสินเป็นคู่** ไม่ใช่ทีละตัว ตัวละคร A อาจเรียกตัวเองว่า "ผม" กับหัวหน้า แต่ "กู" กับเพื่อน
10
+ 2. **ใช้ให้ตรงกันตลอดเรื่อง** เปลี่ยนได้เมื่อความสัมพันธ์ในเรื่องเปลี่ยนจริง เช่น เริ่มสนิทกัน เลิกกัน หรือทะเลาะหนัก และให้เปลี่ยนตรงฉากนั้น ไม่ใช่สลับไปมา
11
+ 3. **ละประธานได้เมื่อรู้อยู่แล้วว่าใครพูดกับใคร** คนไทยพูดจริงไม่ได้ใส่ "ฉัน" "คุณ" ทุกประโยค
12
+ 4. **ห้ามเดาเพศจากชื่ออย่างเดียว** ดูจาก he/she ในต้นฉบับ ฉากที่เห็น หรือข้อมูลที่ผู้ใช้ให้ ถ้ายังไม่รู้และสำคัญต่อคำลงท้าย ให้ถาม
13
+ 5. **ตัวละครที่มีวิธีพูดเฉพาะตัว** ให้ใช้ตามตัวละครนั้น เช่น ตัวละครชายที่ใช้ "ค่ะ" ในต้นฉบับ หรือตัวละครที่พูดห้วนตลอด ไม่ต้องปรับให้เป็นแบบทั่วไป
14
+
15
+ ## 2. สรรพนามตามความสัมพันธ์
16
+
17
+ | ความสัมพันธ์ | แทนตัวเอง | เรียกอีกฝ่าย | หมายเหตุ |
18
+ |---|---|---|---|
19
+ | เพื่อนสนิทผู้ชาย | กู / เรา / ชื่อเล่น | มึง / นาย / แก / ชื่อเล่น | กู/มึง ฟังสนิทแต่หยาบ ใช้ตามเรตของเรื่อง |
20
+ | เพื่อนสนิทผู้หญิง | ฉัน / เรา / ชื่อเล่น | แก / เธอ / ชื่อเล่น | |
21
+ | เพื่อนต่างเพศ | เรา / ฉัน / ผม | นาย / เธอ / แก / ชื่อเล่น | |
22
+ | คู่รัก | เค้า / ผม / ฉัน / พี่ / ชื่อเล่น | ตัวเอง / คุณ / เธอ / น้อง / ชื่อเล่น | คนอายุมากกว่ามักเป็น "พี่" |
23
+ | พี่กับน้อง (ครอบครัว) | พี่ / ชื่อเล่น | น้อง / ชื่อน้อง / แก | น้องเรียกพี่ว่า "พี่" หรือ "พี่ + ชื่อ" |
24
+ | พ่อแม่กับลูก | พ่อ / แม่ | ลูก / ชื่อเล่น | ลูกแทนตัวว่า หนู / ผม / ชื่อเล่น |
25
+ | หัวหน้ากับลูกน้อง | ผม / ฉัน / พี่ | คุณ / ชื่อ / น้อง | ที่ทำงานไทยหลายแห่งใช้ "พี่" กับ "น้อง" |
26
+ | ลูกน้องกับหัวหน้า | ผม / ฉัน / ดิฉัน / หนู | คุณ + ชื่อ / พี่ / หัวหน้า / ตำแหน่ง | "ดิฉัน" ใช้ในที่ทางการมาก |
27
+ | คนแปลกหน้าวัยใกล้กัน | ผม / ฉัน | คุณ | |
28
+ | คนแปลกหน้าต่างวัย | ผม / หนู / ฉัน | พี่ / น้อง / ป้า / ลุง / น้า | คนไทยเรียกคนแปลกหน้าด้วยคำเรียกญาติตามอายุ |
29
+ | พนักงานกับลูกค้า | ผม / ดิฉัน / ละประธาน | คุณลูกค้า / ลูกค้า / คุณ | |
30
+ | ศัตรู ทะเลาะกัน | กู / ฉัน / ข้า | มึง / แก / เอ็ง | |
31
+ | เด็กเล็ก | หนู / ชื่อเล่น | ตามคำเรียกญาติ | |
32
+
33
+ ## 3. ย้อนยุค แฟนตาซี และไซไฟ
34
+
35
+ | แนว | แทนตัวเอง | เรียกอีกฝ่าย | คำลงท้าย |
36
+ |---|---|---|---|
37
+ | แฟนตาซียุคกลาง กำลังภายใน | ข้า | เจ้า / ท่าน (คนที่เคารพ) | ขอรับ / เจ้าค่ะ / เถิด |
38
+ | ราชสำนัก | กระหม่อม / หม่อมฉัน (พูดกับเจ้านาย) | ฝ่าบาท / องค์ชาย / องค์หญิง | พ่ะย่ะค่ะ / เพคะ |
39
+ | สำนักวิทยายุทธ | ข้า / ศิษย์ | ท่านอาจารย์ / ศิษย์พี่ / ศิษย์น้อง | |
40
+ | ทหาร ตำรวจ | ผม / กระผม (กับผู้บังคับบัญชา) | ท่าน / ยศ + ชื่อ | ครับผม |
41
+ | หุ่นยนต์ AI ในเรื่อง | ละประธาน / ระบบ / ดิฉัน | ผู้ใช้ / คุณ / ชื่อ | ตามบุคลิกที่ตั้งไว้ |
42
+
43
+ ราชาศัพท์ในราชสำนักแฟนตาซี ใช้พอให้ได้บรรยากาศ ไม่ต้องครบตามธรรมเนียมจริงทุกคำ แต่คำที่ใช้ต้องใช้ถูก เช่น "เพคะ" ผู้หญิงพูด "พ่ะย่ะค่ะ" ผู้ชายพูด
44
+
45
+ ## 4. คำลงท้ายในบทพูด
46
+
47
+ | คำ | ความรู้สึก | ตัวอย่าง |
48
+ |---|---|---|
49
+ | ครับ / ค่ะ | สุภาพ | ได้ครับ |
50
+ | คะ | คำถาม หรือต่อท้าย "นะ" | ไปไหนคะ / ขอบคุณนะคะ |
51
+ | จ้ะ / จ้า | อ่อนโยน เป็นกันเอง ผู้ใหญ่พูดกับเด็ก | มาแล้วจ้ะ |
52
+ | นะ | อ้อนวอน ยืนยันเบาๆ | อย่าไปนะ |
53
+ | น่ะ | อธิบาย ตอบแบบเลี่ยงๆ | ก็ยุ่งน่ะ |
54
+ | สิ / ซิ | เร่ง ท้า ชวน | พูดมาสิ |
55
+ | เถอะ | ชวน ยอมแพ้ | กลับบ้านเถอะ |
56
+ | ล่ะ | ถามต่อ เปลี่ยนเรื่อง | แล้วนายล่ะ |
57
+ | หรอก | ปฏิเสธเบาลง | ไม่เป็นไรหรอก |
58
+ | วะ / ว่ะ / เว้ย | กันเองมาก หยาบ ผู้ชายมักใช้ | เอาจริงดิวะ |
59
+ | ฮะ / คร้าบ | ครับแบบเล่นๆ ทะเล้น | ได้คร้าบ |
60
+
61
+ **สะกดให้ถูก:** "นะคะ" ไม่ใช่ "นะค่ะ" ใช้ "คะ" กับคำถามและหลัง "นะ" ใช้ "ค่ะ" กับประโยคบอกเล่า
62
+
63
+ **อย่าใส่ทุกประโยค** คำลงท้ายสุภาพทุกบรรทัดทำให้บทพูดฟังเหมือนพนักงานคอลเซ็นเตอร์ ใส่ตรงที่ตัวละครต้องการแสดงความสุภาพ อ่อนโยน หรืออารมณ์
64
+
65
+ ## 5. อารมณ์เปลี่ยน สรรพนามเปลี่ยน
66
+
67
+ คนไทยเปลี่ยนสรรพนามตามอารมณ์ ใช้เป็นเครื่องมือเล่าเรื่องได้
68
+
69
+ - โกรธจัด: "ผม/คุณ" กลายเป็น "ฉัน/แก" หรือ "กู/มึง"
70
+ - ประชด: สุภาพเกินเหตุ เช่น ใส่ "ครับ" ทุกคำ หรือเรียก "คุณ" กับเพื่อนสนิท
71
+ - เริ่มสนิท: จาก "คุณ" เป็นชื่อเล่น หรือ "พี่/น้อง"
72
+ - ห่างเหิน: จากชื่อเล่นกลับไปเป็น "คุณ"
73
+
74
+ เมื่อใช้แบบนี้ ให้จดในบันทึกว่าเปลี่ยนตรงไหนเพราะอะไร
75
+
76
+ ## 6. คำเรียกชื่อ
77
+
78
+ - คนไทยเรียกชื่อเล่นมากกว่าชื่อจริง และเรียกด้วยคำเรียกญาติ (พี่ น้อง ป้า ลุง น้า อา ยาย ตา)
79
+ - ชื่อฝรั่งในเรื่องที่ตั้งในต่างประเทศ คงชื่อเดิม แต่คำเรียกเปลี่ยนตามไทยได้ เช่น "Mr. Carter" เป็น "คุณคาร์เตอร์" และ "Sir" เป็น "ท่าน" หรือละไป
80
+ - อย่าเรียกชื่อในทุกประโยค บทอังกฤษใส่ชื่อบ่อยกว่าที่คนไทยพูดจริง
81
+
82
+ ## 7. ตารางตัวละคร
83
+
84
+ ทำก่อนแปลหรือเขียนบท และใช้ตารางเดียวกันทั้งเรื่อง
85
+
86
+ | ตัวละคร | เพศ อายุ | แทนตัวเอง | เรียกใคร ว่าอะไร | คำลงท้าย | วิธีพูด |
87
+ |---|---|---|---|---|---|
88
+ | มายา | หญิง 28 | ฉัน (กับเจค) / หนู (กับแม่) | เจค = นาย / แม่ = แม่ | ค่ะ เฉพาะกับผู้ใหญ่ | พูดเร็ว ประชดเก่ง |
89
+ | เจค | ชาย 30 | ผม | มายา = คุณ แล้วเปลี่ยนเป็น มายา หลังตอน 3 | ครับ น้อยๆ | สุภาพ พูดน้อย |
@@ -0,0 +1,154 @@
1
+ # รูปแบบไฟล์
2
+
3
+ ไฟล์ที่แปลแล้วต้องเปิดได้และใช้แทนไฟล์ต้นฉบับได้ทันที กฎรวมคือ **แปลเฉพาะข้อความที่คนจะเห็น ส่วนอื่นห้ามแตะ** และส่งไฟล์เป็น UTF-8
4
+
5
+ ## ซับไตเติล
6
+
7
+ ### SRT
8
+
9
+ ```
10
+ 12
11
+ 00:01:04,200 --> 00:01:06,900
12
+ <i>Where are you going?</i>
13
+ ```
14
+
15
+ - แปล: บรรทัดข้อความ
16
+ - ห้ามแตะ: เลขบล็อก บรรทัดเวลา บรรทัดว่างที่คั่นบล็อก
17
+ - คงแท็ก: `<i>` `<b>` `<u>` `<font color="...">`
18
+
19
+ ### WebVTT
20
+
21
+ ```
22
+ WEBVTT
23
+
24
+ NOTE ฉากเปิด
25
+
26
+ intro-1
27
+ 00:00:01.000 --> 00:00:04.000 align:start position:10%
28
+ <v Maya>Where are you going?
29
+ ```
30
+
31
+ - แปล: ข้อความใน cue
32
+ - ห้ามแตะ: `WEBVTT` บรรทัดเวลาพร้อมค่าตั้งท้ายเวลา (`align:` `position:` `line:`) ชื่อ cue บล็อก `STYLE` และ `REGION`
33
+ - `NOTE` เป็นหมายเหตุของคนทำไฟล์ ไม่ต้องแปล
34
+ - คงแท็ก: `<v ชื่อ>` `<c.class>` `<i>` `<b>` ชื่อในแท็ก `<v>` คงตามต้นฉบับ เว้นแต่ผู้ใช้ขอให้แปล
35
+
36
+ ### ASS / SSA
37
+
38
+ ```
39
+ [Events]
40
+ Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
41
+ Dialogue: 0,0:01:04.20,0:01:06.90,Default,Maya,0,0,0,,{\i1}Where are you going?{\i0}
42
+ ```
43
+
44
+ - แปล: เฉพาะช่องสุดท้าย (`Text`) ของบรรทัด `Dialogue:` ซึ่งอยู่หลังจุลภาคตัวที่ 9
45
+ - ห้ามแตะ: `[Script Info]` `[V4+ Styles]` ช่องเวลา ชื่อสไตล์ บรรทัด `Comment:`
46
+ - คงคำสั่งในวงเล็บปีกกา `{\i1}` `{\pos(...)}` `{\fad(...)}` และ `\N` (ขึ้นบรรทัด) `\h` (ช่องว่างไม่ตัดบรรทัด)
47
+ - ถ้าฟอนต์ในสไตล์ไม่มีตัวอักษรไทย เช่น ฟอนต์ตกแต่งบางตัว ให้แจ้งในบันทึก และเสนอฟอนต์ที่มีภาษาไทย เช่น Tahoma, Leelawadee UI, Noto Sans Thai ห้ามแก้สไตล์เองถ้าผู้ใช้ไม่ขอ
48
+
49
+ ## ข้อความ UI
50
+
51
+ ### JSON (i18next, react-intl, vue-i18n และแบบทั่วไป)
52
+
53
+ ```json
54
+ {
55
+ "cart": {
56
+ "title": "Your cart",
57
+ "items_one": "{{count}} item",
58
+ "items_other": "{{count}} items"
59
+ }
60
+ }
61
+ ```
62
+
63
+ - แปล: ค่า (value) ที่เป็นข้อความ
64
+ - ห้ามแตะ: key ลำดับ key โครงสร้างซ้อน ค่าที่เป็นตัวเลข true false null
65
+ - escape `"` เป็น `\"` และคง `\n`
66
+ - key พหูพจน์ของ i18next (`_one` `_other`) ภาษาไทยใช้แค่ `_other` แต่ให้คงทุก key ที่ต้นฉบับมี แล้วใส่ข้อความไทยเดียวกัน
67
+ - ถ้า root key เป็นรหัสภาษา เช่น `"en": {...}` ให้เปลี่ยนเป็น `"th"` และบอกในบันทึก
68
+
69
+ ### ARB (Flutter)
70
+
71
+ - แปล: ค่าของ key ปกติ
72
+ - ห้ามแตะ: key ที่ขึ้นต้นด้วย `@` (คำอธิบายและนิยาม placeholder)
73
+ - เปลี่ยน `"@@locale": "en"` เป็น `"th"`
74
+ - อ่าน `description` ใน `@key` เป็นบริบทประกอบการแปล
75
+
76
+ ### PO (gettext)
77
+
78
+ ```
79
+ #. Button on the checkout page
80
+ msgctxt "checkout"
81
+ msgid "Pay now"
82
+ msgstr ""
83
+ ```
84
+
85
+ - แปล: ใส่คำแปลใน `msgstr`
86
+ - ห้ามแตะ: `msgid` `msgid_plural` `msgctxt`
87
+ - อ่าน `#.` เป็นบริบทจากนักพัฒนา
88
+ - พหูพจน์: ภาษาไทยใส่แค่ `msgstr[0]` และหัวไฟล์ควรมี `Plural-Forms: nplurals=1; plural=0;`
89
+ - ตั้งหัวไฟล์ `Language: th` ถ้ายังไม่มี
90
+ - เอาป้าย `fuzzy` ออกเมื่อแปลแล้ว
91
+
92
+ ### XLIFF (1.2 และ 2.0)
93
+
94
+ - แปล: ใส่คำแปลใน `<target>` สร้าง `<target>` ถ้ายังไม่มี
95
+ - ห้ามแตะ: `<source>` ค่า `id` และ `resname`
96
+ - คงแท็กในบรรทัดทุกตัว เช่น `<x/>` `<g>` `<ph>` `<pc>` ใน `<target>` ให้ครบเหมือน `<source>`
97
+ - ตั้งภาษาปลายทาง: XLIFF 1.2 ใช้ `target-language="th"` ส่วน 2.0 ใช้ `trgLang="th"`
98
+ - ตั้งสถานะเป็นแปลแล้ว: 1.2 ใช้ `state="translated"` ส่วน 2.0 ใช้ `state="translated"` ใน `<segment>`
99
+
100
+ ### iOS `.strings`, `.stringsdict` และ `.xcstrings`
101
+
102
+ ```
103
+ /* Title of the settings screen */
104
+ "settings.title" = "Settings";
105
+ ```
106
+
107
+ - `.strings`: แปลเฉพาะข้อความทางขวาของ `=` คง `;` ท้ายบรรทัด escape `\"`
108
+ - `.stringsdict`: แปลค่า string ใน key `other` และคง `%#@...@` กับ `NSStringFormatValueTypeKey`
109
+ - `.xcstrings` (String Catalog): เพิ่มภาษา `th` ใน `localizations` ของแต่ละ key ใส่ `stringUnit` ที่มี `state: "translated"` และ `value`
110
+
111
+ ### Android `strings.xml`
112
+
113
+ ```xml
114
+ <string name="welcome">Welcome, %1$s!</string>
115
+ <string name="app_name" translatable="false">MyShop</string>
116
+ ```
117
+
118
+ - แปล: ข้อความใน `<string>` `<item>` ของ `<plurals>` และ `<string-array>`
119
+ - ห้ามแตะ: `name` และ `<string>` ที่มี `translatable="false"`
120
+ - escape: `'` เป็น `\'` `"` เป็น `\"` `&` เป็น `&amp;` `<` เป็น `&lt;` ถ้าไม่ได้อยู่ใน CDATA
121
+ - `<plurals>`: ภาษาไทยใช้ `quantity="other"` ดู `ui.md` หัวข้อพหูพจน์
122
+
123
+ ### YAML (Rails และระบบอื่น)
124
+
125
+ - แปลค่า คง key และการเยื้อง
126
+ - เปลี่ยน root key `en:` เป็น `th:`
127
+ - ข้อความที่มี `:` หรือขึ้นต้นด้วยอักขระพิเศษ ต้องอยู่ในเครื่องหมายคำพูด
128
+
129
+ ## บทเกมแบบ CSV และตาราง
130
+
131
+ ```
132
+ ID,Speaker,Context,MaxLength,English,Thai
133
+ Q1_001,Elara,"First meeting, suspicious",80,"Who sent you?",
134
+ ```
135
+
136
+ - หาคอลัมน์ให้ได้ก่อนว่าคอลัมน์ไหนคือ ID ต้นฉบับ คำแปล ผู้พูด บริบท ความยาวสูงสุด
137
+ - ใส่คำแปลในคอลัมน์ภาษาไทย ถ้าไม่มี ให้เพิ่มคอลัมน์ `Thai` ต่อท้าย และบอกในบันทึก
138
+ - ห้ามแตะ: คอลัมน์ ID และคอลัมน์ต้นฉบับ
139
+ - อ่านคอลัมน์ Speaker และ Context ทุกแถว เพื่อเลือกสรรพนามและน้ำเสียง
140
+ - เคารพ MaxLength ถ้ามี
141
+ - คงตัวคั่น (จุลภาค แท็บ อัฒภาค) ตามต้นฉบับ ข้อความที่มีจุลภาค ขึ้นบรรทัด หรือ `"` ต้องอยู่ในเครื่องหมายคำพูด และ `"` ข้างในเขียนเป็น `""`
142
+ - ถ้าผู้ใช้จะเปิดด้วย Excel แล้วภาษาไทยเพี้ยน แนะนำให้บันทึกเป็น UTF-8 with BOM
143
+
144
+ ## ข้อความที่วางมาในแชต
145
+
146
+ - ไม่มีไฟล์: ส่งคำแปลเป็นข้อความธรรมดา แยกย่อหน้าตามต้นฉบับ
147
+ - ถ้าวางมาเป็นรายการ ให้ส่งเป็นรายการลำดับเดียวกัน
148
+ - ถ้าดูออกว่าเป็นข้อความ UI (สั้นๆ หลายบรรทัด เช่น ชื่อปุ่ม) ให้ใช้กฎของ `ui.md` แม้ไม่ได้มาเป็นไฟล์
149
+
150
+ ## ไฟล์ยาว
151
+
152
+ - แปลทีละช่วง แต่ใช้อภิธานศัพท์และตารางตัวละครชุดเดียวกันทุกช่วง
153
+ - บอกทุกครั้งว่าส่งถึงบล็อกหรือ key ไหน และเหลืออีกเท่าไหร่
154
+ - ห้ามย่อไฟล์ด้วย "...ส่วนที่เหลือเหมือนเดิม" ไฟล์ที่ส่งต้องเอาไปต่อกันแล้วใช้ได้จริง
@@ -0,0 +1,74 @@
1
+ # เกม
2
+
3
+ เกมหนึ่งเกมมีข้อความหลายแบบ แต่ละแบบต้องแปลต่างกัน บทพูดต้องมีชีวิต ชื่อไอเทมต้องสั้นและจำง่าย เมนูต้องชัดแบบ UI ทั่วไป และทุกอย่างต้องใช้คำเดียวกันทั้งเกม
4
+
5
+ ## 1. ประเภทข้อความ
6
+
7
+ | ประเภท | แปลอย่างไร | ดูเพิ่ม |
8
+ |---|---|---|
9
+ | บทพูดในเนื้อเรื่อง | ตามตัวละครและความสัมพันธ์ | `characters.md` |
10
+ | เสียงตะโกนสั้น (bark) เช่น "Reloading!" "Enemy spotted!" | สั้นมาก พูดได้ในจังหวะต่อสู้ และต้องใช้ได้ในหลายสถานการณ์ | หัวข้อ 6 |
11
+ | เควสต์และภารกิจ | ชื่อเควสต์สั้น คำอธิบายบอกชัดว่าต้องทำอะไร | หัวข้อ 5 |
12
+ | ชื่อไอเทม สกิล สถานที่ | ตามหลักชื่อเฉพาะ | หัวข้อ 3–4 |
13
+ | คำอธิบายไอเทม | ค่าตัวเลขชัด flavor text ใช้ภาษาวรรณกรรมได้ | หัวข้อ 4 |
14
+ | เมนู ตั้งค่า ปุ่ม | ตามหลัก UI | `ui.md` |
15
+ | สอนเล่น (tutorial) | คำสั่งสั้น ชื่อปุ่มตรงกับเมนูจริง | หัวข้อ 5 |
16
+ | ความสำเร็จ (achievement) | ชื่อติดหู คำอธิบายบอกเงื่อนไขชัด | |
17
+ | ข้อความระหว่างโหลด | ประโยคเดียว อ่านจบก่อนโหลดเสร็จ | |
18
+
19
+ ## 2. ผู้เล่น
20
+
21
+ ผู้เล่นอาจเป็นผู้ชาย ผู้หญิง หรือไม่ระบุ ข้อความที่ตัวละครพูดกับผู้เล่น หรือผู้เล่นพูดเอง ต้องระวังเรื่องเพศ
22
+
23
+ - **เกมไม่มีตัวแปรเพศ:** ใช้คำที่ไม่ระบุเพศ ละประธาน หรือใช้ "เรา" แทนตัวผู้เล่น ไม่ใส่ "ครับ" "ค่ะ" ในประโยคที่ผู้เล่นพูด
24
+ - **เกมมีตัวแปรเพศ:** ถ้ารูปแบบไฟล์รองรับ เช่น ICU `{gender, select, male {...} female {...} other {...}}` ให้แปลแยกแต่ละแบบ
25
+ - **ตัวละครเรียกผู้เล่น:** เกมแฟนตาซีใช้ "ท่าน" "เจ้า" ได้โดยไม่ระบุเพศ เกมยุคปัจจุบันใช้ "คุณ" หรือชื่อตัวแปร เช่น `[PlayerName]`
26
+
27
+ ## 3. ชื่อเฉพาะ
28
+
29
+ ตัดสินครั้งเดียวต่อชื่อ แล้วใส่ในอภิธานศัพท์ของงาน
30
+
31
+ | ชนิดชื่อ | ค่าเริ่มต้น | ตัวอย่าง |
32
+ |---|---|---|
33
+ | ชื่อคนที่แต่งขึ้น | ทับศัพท์ | Elara = เอลารา |
34
+ | ชื่อสถานที่ที่เป็นคำแต่ง | ทับศัพท์ | Valoria = วาโลเรีย |
35
+ | ชื่อสถานที่ที่มีความหมาย | แปล | Whispering Woods = ป่ากระซิบ |
36
+ | ชื่อไอเทมและสกิล | แปล | Healing Potion = ยาฟื้นพลัง |
37
+ | ชื่อเกม ชื่อแบรนด์ ชื่อโหมดที่ใช้ในการตลาด | คงอังกฤษ หรือตามที่ผู้ใช้กำหนด | |
38
+ | ชื่อที่ผู้เล่นไทยเรียกเป็นอังกฤษกันทั่วไป | ทับศัพท์หรือคงอังกฤษ | Boss = บอส |
39
+
40
+ ทับศัพท์ตามเสียงที่ผู้เล่นจะพูด และสะกดตามหลักราชบัณฑิตยสถานเมื่อไม่ขัดกับที่ผู้เล่นใช้จริง ถ้าผู้ใช้มีชื่อที่ทับศัพท์ไว้แล้ว ใช้ตามนั้น
41
+
42
+ ## 4. ชื่อไอเทม สกิล และคำอธิบาย
43
+
44
+ - **ชื่อสั้น** ไม่เกินที่ช่องในเกมแสดงได้ ส่วนใหญ่ 2–4 คำ
45
+ - **เลี่ยง "แห่ง" ต่อกันยาว** "ดาบแห่งราชันย์แห่งความมืด" เป็น "ดาบราชันย์มืด"
46
+ - **ชุดชื่อที่มีระดับต้องตรงกันทั้งชุด** เช่น ระดับความหายาก Common, Rare, Epic, Legendary ใช้ ธรรมดา, หายาก, มหากาพย์, ตำนาน ทั้งเกม
47
+ - **คำอธิบายค่าตัวเลข** ต้องชัดและสั้น ตัวเลขและตัวแปรอยู่ครบ เช่น "Deals {0} fire damage over 3 seconds" เป็น "สร้างความเสียหายไฟ {0} หน่วยใน 3 วินาที"
48
+ - **flavor text** (ข้อความเล่าเรื่องของไอเทม) ใช้ภาษาวรรณกรรมได้ แต่ยังต้องไม่ฟังเหมือนแปล
49
+
50
+ ## 5. เควสต์และสอนเล่น
51
+
52
+ - ชื่อเควสต์: สั้น ชวนเล่น ไม่ต้องแปลตรงทุกคำ
53
+ - คำอธิบายเควสต์: บอกเป้าหมายให้ชัด ผู้เล่นต้องรู้ว่าไปที่ไหน ทำอะไร
54
+ - เป้าหมายย่อย: ขึ้นต้นด้วยคำกริยา เช่น "Collect 5 herbs (0/5)" เป็น "เก็บสมุนไพร 5 ต้น (0/5)"
55
+ - สอนเล่น: ชื่อปุ่มและชื่อเมนูต้องตรงกับที่แปลไว้ใน UI ทุกตัวอักษร "Press [A] to jump" เป็น "กด [A] เพื่อกระโดด" หรือ "กด [A] กระโดด"
56
+
57
+ ## 6. เสียงตะโกนและบทสั้น
58
+
59
+ bark เป็นบรรทัดที่เกมสุ่มเล่นได้หลายสถานการณ์ และมักไม่มีบริบท
60
+
61
+ - แปลให้ใช้ได้ทุกสถานการณ์ที่บรรทัดนั้นอาจถูกเล่น
62
+ - สั้นกว่าหรือเท่าต้นฉบับ ถ้ามีเสียงพากย์ ให้พูดจบในเวลาเท่าต้นฉบับ
63
+ - ใช้คำที่คนไทยตะโกนจริง เช่น "Enemy spotted!" เป็น "เจอศัตรู" "Reloading!" เป็น "รีโหลด" "Cover me!" เป็น "คุ้มกันที"
64
+
65
+ ## 7. ข้อความที่เกมต่อกันเอง
66
+
67
+ ถ้าเห็นว่าข้อความถูกต่อกันด้วยโค้ด เช่น key หนึ่งเป็น "You obtained " อีก key เป็นชื่อไอเทม ลำดับคำไทยอาจไม่เข้ากัน
68
+
69
+ - แปลให้ต่อกันแล้วยังอ่านได้ เช่น "ได้รับ " + ชื่อไอเทม
70
+ - ถ้าต่อกันแล้วอ่านไม่ได้จริงๆ ให้แจ้งในบันทึกว่าควรรวมเป็นข้อความเดียวที่มีตัวแปร
71
+
72
+ ## 8. เรตอายุ
73
+
74
+ ความรุนแรง คำหยาบ และเนื้อหาทางเพศ ต้องแรงเท่าต้นฉบับ (ข้อห้ามข้อ 3 ใน SKILL.md) ถ้าเกมมีเรตอายุต่ำ แต่ต้นฉบับมีคำแรง ให้แปลตามต้นฉบับแล้วแจ้งในบันทึก ไม่ปรับเอง