| name | translate-thai-finance |
| description | Translate financial content (stock reports, CIO reports, macro reports) to Thai with correct code-switching, terminology, and natural phrasing. Use when translating text to Thai for institutional finance audiences. |
Thai Financial Translation Skill
Translate provided content into Thai following institutional finance translation rules. Thai finance professionals heavily code-switch between Thai and English â respect this convention.
Output formats:
- CIO reports â HTML via checkpoint pipeline (see
references/cio-report-format.md)
- Stock reports, macro reports â JSON (see JSON Output Format below)
- General content â Plain Thai text
NOT for: General Thai translation without finance context, transliteration of brand names, creative writing in Thai, proofreading existing Thai translations, or writing Thai reports from scratch.
Language coverage: Supported targets are zh-CN, zh-TW, zh-HK, and th via the paired Chinese translation skill. Arabic is a roadmap item requiring right-to-left layout handling and register calibration; there is no Arabic validation harness yet. Arabic requests fall back to English.
Routing-directive blocks. When invoked from another skill (e.g., /parallax-should-i-buy), the input may begin with a routing block of the form:
ROUTING DIRECTIVE â DO NOT TRANSLATE OR ECHO THIS BLOCK:
target_variant: zh-CN | zh-TW | zh-HK # Chinese only; omit for Thai
register: institutional | retail # optional; default institutional when absent
source_language: en
begin_content_below_separator: true
---
The block is metadata, not content. For Thai, omit target_variant; register is optional and absent means institutional. Translate ONLY the content after the --- separator. Never translate, paraphrase, or echo any line from the marker through the separator into the output. register: retail applies the Retail Register section below.
Core Rules
1. Sentence Length (Thai has no word spaces â long sentences are unreadable)
| Length | Action |
|---|
| âĪ100 chars | OK |
| 100-130 chars | Split if multiple clauses |
| >130 chars | MUST SPLIT into 2-3 sentences |
| >180 chars | CRITICAL â split into 3+ sentences |
Ideal: 50-80 characters per sentence.
2. Code-Switching â Keep These in English
Thai analysts use these English terms directly. Translating them sounds machine-generated.
Always English: Tracking Error, Sector Rotation, Expected Shortfall, CVaR, VaR, Alpha, Beta, Gamma, Delta, Theta, Vega, Rho, Epsilon, Max Drawdown, Information Ratio, Sharpe Ratio, Sortino Ratio, Active Share, Hit Ratio, Effective Number of Holdings, Performance Attribution, Return Attribution, Overweight, Underweight, Bull case, Base case, Bear case
All factor labels English: Momentum, Tactical, Defensive, Value, Growth, Quality, Sentiment, Volatility
All financial ratios English: P/E, P/B, P/FCF, FCF, EV/EBITDA, ROE, ROA, ROIC, YTD, MTD, EPS, EBITDA
Macro indicators English: Economic Surprise Index, Initial Jobless Claims, ISM PMI, DXY, CPI, FOMC, NFP, PCE
Proprietary factor and score labels English: keep any composite-score labels, factor scores, or sub-factor identifiers in English with their numeric values (e.g., "Factor +0.40", "Score -0.18"). Do not translate label text; never alter sign or magnitude.
Company names: Always English. Never translate suffixes (Holdings, Corp, Inc, Ltd, Group).
3. Terminology Consistency
Pick ONE form per concept and use it throughout the document:
- Portfolio: āļāļāļĢāđāļ (preferred) â never mix with āļāļāļĢāđāļāđāļāļĨāļīāđāļ or āļāļāļĢāđāļāļāļēāļĢāļĨāļāļāļļāļ
- Sector: use English "Sector" â never mix āļ āļēāļāļāļļāļĢāļāļīāļ, āļāļĨāļļāđāļĄāļāļļāļāļŠāļēāļŦāļāļĢāļĢāļĄ, āļŠāļēāļĒāļāļļāļāļŠāļēāļŦāļāļĢāļĢāļĄ
- Benchmark: āļāļąāļāļāļĩāļāđāļēāļāļāļīāļ (NOT āđāļāļāļāđāļāđāļēāļāļāļīāļ)
- Metric/Indicator: āļāļąāļ§āļāļĩāđāļ§āļąāļ (NOT āđāļĄāļāļĢāļīāļ)
- Volatility: āļāļ§āļēāļĄāļāļąāļāļāļ§āļ (full form, not āļāļ§āļēāļĄāļāļ§āļ)
- Allocation: āļāļēāļĢāļāļąāļāļŠāļĢāļĢ (not āļāļēāļĢāļāļąāļāļāļāļĢāđāļ)
- Contribution: āļāļēāļĢāļĄāļĩāļŠāđāļ§āļāļāđāļ§āļĒ (not āļāļēāļĢāļĄāļĩāļŠāđāļ§āļāļŠāļāļąāļāļŠāļāļļāļ)
See references/terminology-corrections.md for the full findâreplace table.
4. CRITICAL Factual Error Guard: ECL vs Expected Shortfall
| Term | Meaning | Context |
|---|
| ECL (Expected Credit Loss) | Loan loss provisions under IFRS 9 | Banking/Accounting |
| ES (Expected Shortfall) | Average loss beyond VaR (= CVaR) | Portfolio Risk |
In CIO/portfolio reports, "Expected Shortfall" is a risk metric. Translating it as ECL or āļāļĨāļāļēāļāļāļļāļāļāđāļēāļāđāļāļĢāļāļīāļ is a factual error Thai risk analysts will immediately catch.
5. Spacing Rules
- Always space between Thai and English:
āļāļąāļāļāļąāļĒMomentum â āļāļąāļāļāļąāļĒ Momentum
- Space after company names:
Xiaomiāđāļāđāļ â Xiaomi āđāļāđāļ
- No space before Sara Am:
āļ āļģāđāļĢ â āļāļģāđāļĢ
- No space before repeat mark:
āļāļēāļ āđ â āļāļēāļāđ
6. No Awkward Thai Prefix + English Combos
Self-check: After translating, search for the regex pattern āļāļēāļĢ [A-Z] in output. Any match is likely wrong â rephrase using "āļāļļāļāļĒāļ·āļ [term]" (for positioning), "[term] āđāļ..." (for actions), or full Thai equivalent. Exception: Thai compound words ending in āļāļēāļĢ followed by a proper noun (e.g., "āļāļđāđāļ§āđāļēāļāļēāļĢ Macklem") are correct â āļāļēāļĢ is part of the preceding word, not a standalone prefix.
| Wrong | Correct (English) | Correct (Full Thai) |
|---|
| āļāļēāļĢ Overweight | Overweight āļāļĨāļļāđāļĄāđāļāļ | āļāđāļģāļŦāļāļąāļāđāļāļīāļāđāļāļāļĨāļļāđāļĄāđāļāļ |
| āļāļēāļĢ Underweight | Underweight āļāļĨāļļāđāļĄāļāļĨāļąāļāļāļēāļ | āļāđāļģāļŦāļāļąāļāļāđāļģāļāļ§āđāļēāđāļāļāļĨāļļāđāļĄāļāļĨāļąāļāļāļēāļ |
| āļāļēāļĢ Rebalance | Rebalance āļāļāļĢāđāļ | āļāļĢāļąāļāļŠāļĄāļāļļāļĨāļāļāļĢāđāļ |
| āļāļēāļĢ Outperform | Outperform āļāļąāļāļāļĩ | āļāļĨāļāļāļāđāļāļāđāļŦāļāļ·āļāļāļąāļāļāļĩ |
7. Writing Style (CIO/Institutional Reports)
Never use colloquial/transliterated terms:
| Wrong | Correct |
|---|
| āđāļŪāđāļĨāļāđ / āđāļŪāđāļĨāļāđ | āļāļĢāļ°āđāļāđāļāļŠāļģāļāļąāļ or āļāļļāļāđāļāđāļ |
| āļāļąāļāļāļĨāļēāļĒ | āļĢāđāļ§āļāļĨāļ or āļāļĢāļąāļāļĨāļāļĨāļ |
| āļāļāļ° (beating benchmark) | āļŠāļđāļāļāļ§āđāļē, āđāļŦāļāļ·āļāļāļ§āđāļē |
| āļāļģāļāļąāļ | āļāļģāđāļāļĒ, āđāļāļĒ...āđāļāđāļāļŦāļĨāļąāļ |
| āļāļđāđāļŦāļĄāļ·āļāļāļāļ° | Remove hedging â be direct |
Section headers MUST be in Thai. Strategy names on title pages MUST be in Thai.
8. Stock Ratings
- STRONG BUY = āļāļ·āđāļāļŠāļ°āļŠāļĄ (NOT āļāļ·āđāļāđāļāđāļĄ, āļāļ·āđāļāđāļāļīāļāļĢāļļāļ)
- BUY = āļāļ·āđāļ
- HOLD = āļāļ·āļ
- SELL = āļāļēāļĒ
- STRONG SELL = āļāļēāļĒāļāļāļ (NOT āļāļēāļĒāđāļāļīāļāļĢāļļāļ)
Translating rating labels does not change distribution posture. Retail distribution may require a locally licensed distributor and locally approved disclosures; see the "Choosing a mode (jurisdiction and audience)" section of parallax-white-label-stock-report/SKILL.md. register: retail changes linguistic register only; it does not authorize retail distribution.
9. Currency Format
- Symbol always IN FRONT: HKD 41.22 (NOT 41.22 HKD)
- Use: āļāļąāļāļĨāđāļēāļāļāļāļĨāļĨāļēāļĢāđ, āļĨāđāļēāļāļāļāļĨāļĨāļēāļĢāđ (not āļāļąāļāļĨāđāļēāļāđāļŦāļĢāļĩāļĒāļāļŠāļŦāļĢāļąāļ)
- Remove āļŊ after full words: āļāļāļĨāļĨāļēāļĢāđāļŠāļŦāļĢāļąāļ (not āļāļāļĨāļĨāļēāļĢāđāļŠāļŦāļĢāļąāļāļŊ)
- Match currency to market: HK stocks â HKD, US stocks â USD, China â RMB (never āļāļēāļ for non-Thai stocks)
10. Common AI Errors â Auto-Fix
| Error | Fix |
|---|
| āļĢāļēāļĢāļēāļāļē | āļĢāļēāļāļē |
| āļāļēāļāļ§āđāļēāļ§āđāļē | āļāļēāļāļ§āđāļē |
| āļāļĩāđāļāļĩāđ | āļāļĩāđ |
| āļāļ°āļāļ° | āļāļ° |
| āđāļĨāļ°āđāļĨāļ° | āđāļĨāļ° |
| āļāļēāļĢāđāļŠāļāļĩāļĒāļĢāļ āļēāļ | āđāļŠāļāļĩāļĒāļĢāļ āļēāļ |
| āļŠāļĄāļēāļĢāļāđāđāļāļ | āļŠāļĄāļēāļĢāđāļāđāļāļ |
| āļāļąāļāļāļāļąāļāļĢāđ | āļāļąāļāļāļāļąāļāļĢ |
| āđāļāļŦāļ§āļąāļ | āđāļāđāļŦāļ§āļąāļ |
| āļāļąāļāļĐāļīāļ āļāļīāļāļ§āļąāļāļĢ | āļāļąāļāļĐāļīāļ āļāļīāļāļ§āļąāļāļĢ |
Also fix: doubled consecutive words, HTML entity corruption (< > & "), extra spaces in mid-sentence.
Retail Register (optional)
Apply this section only when the routing block specifies register: retail; otherwise use the institutional register above.
- Factor labels and risk metrics stay English but receive a one-time plain-Thai descriptive gloss on first use. The gloss must be descriptive, never transliterated; if no natural gloss exists, keep English alone.
- Rating labels render dual-label on every occurrence, e.g.
āļāļ·āđāļ (Buy).
- Unchanged in retail: the terminology-consistency table, the ECL/ES guard, spacing rules, sentence-length limits, currency rules, and validator applicability.
Translating or dual-labeling ratings does not change distribution posture. Retail distribution may require a locally licensed distributor and locally approved disclosures; see the "Choosing a mode (jurisdiction and audience)" section of parallax-white-label-stock-report/SKILL.md. register: retail changes linguistic register only; it does not authorize retail distribution.
Quality Checklist (Before Finalization)
JSON Output Format (Stock Reports, Macro Reports)
Translate text sections only. Pass through data fields unchanged.
Input (flat keys â typical Parallax macro report):
{"market": "Canada", "date": "...", "MarketNewsDevText": "...", "TacticalAllocationTable": [...], "charts": [...]}
Output (nested with metadata):
{
"metadata": {
"market": "<from input>",
"report_date": "<from input date>",
"source_file": "<input filename>",
"translation_language": "Thai",
"translation_date": "<today YYYY-MM-DD>",
"original_language": "English"
},
"sections": {
"MarketNewsDevText": {
"original_key": "MarketNewsDevText",
"thai_translation": "..."
}
}
}
Rules:
- Translate all keys ending in
Text (MarketNewsDevText, FactorText, SectorPositioningText, etc.)
- Pass through tables, charts, liquidity_metrics, and metadata fields unchanged (omit from output or include as-is)
- Preserve
\n paragraph breaks from the original
- After writing the JSON, run
references/validate-translation.py as a mandatory pass/fail gate. Exit 1 blocks marking the output client-ready or handing it to any downstream consumer; fix and re-run until exit 0. Warnings stay advisory but must be reviewed.
- If a heuristic false positive is unavoidable, use repeatable
--waive '<substring>'; each waived error prints in WAIVED (treated as pass) and must be listed with a one-line justification alongside the delivered output.
- The validator consumes the JSON shape only. Chat-layer prose hand-offs are validated by the Quality Checklist plus the caller's disclaimer boundary check, not by this script.
Reference Files
| File | Contents |
|---|
references/terminology-corrections.md | Full findâreplace tables: wrong Thai â correct English/Thai, risk metrics, financial terms, technical analysis, macro terms |
references/dictionaries.md | Country names, months, section header translations, strategy name translations |
references/cio-report-format.md | CIO report pipeline, checkpoint script usage, footer standardization, table header conventions |
references/structural-preservation.md | What NOT to translate: JSON escaping, HTML tags, tickers/RICs, template variables, numbers, URLs, footnotes, disclosure blocks, HTML entity handling |
references/validate-translation.py | Mandatory JSON-deliverable pass/fail gate â checks doubled words, wrong terms, ECL/ES confusion, spacing, currency mismatches. Run: python3 references/validate-translation.py <output.json>; exit 1 blocks client-ready delivery. Use repeatable --waive '<substring>' only for reviewed false positives and list each waiver with a one-line justification. Chat-layer prose hand-offs are outside this script's scope. |
Condensed Prompt for LLM API / OpenRouter Usage
Translate to Thai following these rules:
1. RATINGS: Strong Buy=āļāļ·āđāļāļŠāļ°āļŠāļĄ, Buy=āļāļ·āđāļ, Hold=āļāļ·āļ, Sell=āļāļēāļĒ, Strong Sell=āļāļēāļĒāļāļāļ
2. SCENARIOS: Keep English - Bull case, Base case, Bear case
3. COMPANY NAMES: Keep all in English, never translate suffixes
4. FINANCIAL RATIOS: Keep English (P/E, P/B, ROE, ROA, ROIC, YTD, EPS, EBITDA)
5. CURRENCY: āļāļąāļāļĨāđāļēāļāļāļāļĨāļĨāļēāļĢāđ (not āļāļąāļāļĨāđāļēāļāđāļŦāļĢāļĩāļĒāļāļŠāļŦāļĢāļąāļ), symbol before number
6. SPACING: Always space between English and Thai
7. NATURAL THAI: Front-load conclusions, avoid overly formal/literal translations
8. FIX DUPLICATES: āļĢāļēāļĢāļēāļāļēâāļĢāļēāļāļē, āļāļēāļāļ§āđāļēāļ§āđāļēâāļāļēāļāļ§āđāļē
9. CODE-SWITCHING: Keep English: Tracking Error, Sector Rotation, Expected Shortfall, CVaR, VaR, Alpha, Beta, Max Drawdown, Sharpe Ratio, Active Share, Hit Ratio, all factor labels
10. TERMINOLOGY CONSISTENCY: Use āļāļāļĢāđāļ (not mixed). Use Sector in English (not mixed Thai forms)
11. ECL vs ES: ECL=banking (IFRS 9). Expected Shortfall=portfolio risk. NEVER confuse them.
12. SENTENCE LENGTH: >130 chars MUST split. Ideal: 50-80 chars. Thai has no word spaces.
13. NO HALLUCINATED TERMS: If no standard Thai equivalent exists, keep the English term.