Auto translate works (#597)

* feat: init translation prompts from Dify workflow

Add translation prompt templates used by Dify workflow:
- 1.md: New document translation
- 2.md: Update existing translation
- 3.md: Update with diff/checklist

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: add URL localization rule to prompt 1, fix lang codes in prompt 3

- prompt 1.md: Add Rule 3 URL Localization (was missing, causing /en/ URLs to not be mapped)
- prompt 3.md: Fix language code comments (cn/jp → zh/ja to match actual folder structure)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* docs: add README for translation prompts

Document prompt file mapping to Dify workflow nodes and testing workflow.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor: move prompts to tools/translate/, add testing docs

- Move prompt templates to tools/translate/prompt/ (closer to translation code)
- Add prompt testing workflow to translate-test-dify/README.md
- Document prompt-to-workflow mapping and URL localization rule

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
Alter-xyz
2025-12-10 23:34:46 -08:00
committed by GitHub
parent 43475277f3
commit 809fc7f5eb
5 changed files with 569 additions and 8 deletions

View File

@@ -87,6 +87,56 @@ See `example-model-comparison.md` for a complete example.
| results/ | Output (gitignored) |
| mock_docs/ | Temp test files (gitignored) |
## Testing Prompt Changes
Prompts are stored in `../translate/prompt/` (1.md, 2.md, 3.md).
### Prompt-to-Workflow Mapping
| File | Dify Workflow Node | Trigger |
|------|-------------------|---------|
| `1.md` | Template (1) | New doc (`the_doc` only) |
| `2.md` | Template (2) | Update (`the_doc` + `the_doc_exist`) |
| `3.md` | Template (3) | Update + diff (all three params) |
### Test All Scenarios
```bash
# Scenario 1: New document
cat > test.md << 'EOF'
# Test
## keys
app-YOUR_KEY
test
## target_languages
zh
## test_file
en/use-dify/getting-started/introduction.mdx
EOF
python run_test.py test.md
# Scenario 2: Add existing_file section
# Scenario 3: Add diff_content section
# Verify URL mapping
grep -o 'href="[^"]*"' results/*/variant_A/*.md | head -10
```
### Key Rule: URL Localization
All prompts must map internal links:
- `/en/``/zh/` or `/ja/`
- `plugin-dev-en/``plugin-dev-zh/` or `plugin-dev-ja/`
### API Parameters
```bash
curl -H "Authorization: Bearer $KEY" https://api.dify.ai/v1/parameters
```
Required: `original_language`, `output_language1`, `the_doc`, `termbase`
Optional: `the_doc_exist` (→ prompt 2), `diff_original` (→ prompt 3)
## Language Policy
All code and documentation in **English** (international project).

View File

@@ -56,6 +56,8 @@ def parse_markdown_spec(file_path: Path) -> dict:
"target_languages": ["cn"],
"test_content": None,
"test_file": None,
"existing_file": None, # For update scenario
"diff_content": None, # For update with diff scenario
"variants": {}
}
@@ -96,6 +98,16 @@ def parse_markdown_spec(file_path: Path) -> dict:
if file_match:
config["test_file"] = file_match.group(1).strip().split('\n')[0].strip()
# Existing translation file (for update scenarios)
existing_match = re.search(r'##\s*existing_file\s*\n(.*?)(?=\n##|\Z)', content, re.DOTALL | re.IGNORECASE)
if existing_match:
config["existing_file"] = existing_match.group(1).strip().split('\n')[0].strip()
# Diff content (for update with diff scenarios)
diff_match = re.search(r'##\s*diff_content\s*\n(.*?)(?=\n##|\Z)', content, re.DOTALL | re.IGNORECASE)
if diff_match:
config["diff_content"] = diff_match.group(1).strip()
return config
@@ -119,16 +131,24 @@ async def save_file(file_path: Path, content: str):
await f.write(content)
async def translate_text(content: str, api_key: str, target_language: str, termbase: str, max_retries: int = 3) -> str:
async def translate_text(content: str, api_key: str, target_language: str, termbase: str,
the_doc_exist: str = None, diff_original: str = None, max_retries: int = 3) -> str:
inputs = {
"original_language": "English",
"output_language1": target_language,
"the_doc": content,
"termbase": termbase
}
# Add optional params for update scenarios (triggers different prompts in Dify)
if the_doc_exist is not None:
inputs["the_doc_exist"] = the_doc_exist
if diff_original is not None:
inputs["diff_original"] = diff_original
payload = {
"response_mode": "streaming",
"user": "TranslationTest",
"inputs": {
"original_language": "English",
"output_language1": target_language,
"the_doc": content,
"termbase": termbase
}
"inputs": inputs
}
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
@@ -194,6 +214,8 @@ async def run_test(config_path: str, dry_run: bool = False):
variants = config.get("variants", {})
test_content = config.get("test_content")
test_file = config.get("test_file")
existing_file = config.get("existing_file")
diff_content = config.get("diff_content")
if not variants:
print("Error: No valid API keys found")
@@ -216,6 +238,18 @@ async def run_test(config_path: str, dry_run: bool = False):
print("Error: Need ## test_content or ## test_file section")
sys.exit(1)
# Load existing translation (optional - for update scenarios)
existing_content = None
if existing_file:
existing_path = Path(existing_file)
if not existing_path.is_absolute():
existing_path = SCRIPT_DIR.parent.parent / existing_file
if existing_path.exists():
existing_content = await load_file(existing_path)
print(f"Loaded existing translation: {existing_file} ({len(existing_content)} chars)")
else:
print(f"Warning: existing_file not found: {existing_file}")
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
result_dir = RESULTS_DIR / f"{timestamp}_{test_name}"
@@ -229,11 +263,24 @@ async def run_test(config_path: str, dry_run: bool = False):
termbase = await load_file(TERMBASE_PATH) if TERMBASE_PATH.exists() else ""
# Determine test mode
if existing_content and diff_content:
test_mode = "update+diff (prompt 3)"
elif existing_content:
test_mode = "update (prompt 2)"
else:
test_mode = "new (prompt 1)"
print(f"\n{'='*50}")
print(f"Test: {test_name}")
print(f"Mode: {test_mode}")
print(f"Variants: {', '.join(variants.keys())}")
print(f"Languages: {', '.join(target_languages)}")
print(f"Content: {doc_name} ({len(doc_content)} chars)")
if existing_content:
print(f"Existing: {len(existing_content)} chars")
if diff_content:
print(f"Diff: {len(diff_content)} chars")
print(f"{'='*50}\n")
all_results = {}
@@ -254,7 +301,8 @@ async def run_test(config_path: str, dry_run: bool = False):
lang_name = LANGUAGE_NAMES.get(lang, lang)
print(f"{lang_name}...", end=" ", flush=True)
translated = await translate_text(doc_content, api_key, lang_name, termbase)
translated = await translate_text(doc_content, api_key, lang_name, termbase,
the_doc_exist=existing_content, diff_original=diff_content)
if translated:
out_file = var_dir / f"{doc_name}_{lang}.md"
await save_file(out_file, translated)

114
tools/translate/prompt/1.md Normal file
View File

@@ -0,0 +1,114 @@
# Role Definition
You are an expert technical translator specializing in software documentation. Your specific task is to provide a precise, high-fidelity translation of **MDX documentation files intended for the Mintlify platform**. You must strictly adhere to a specific terminology glossary and preserve the complex structure of MDX files.
***
# Context and Data
You will be provided with a mandatory terminology glossary and the source MDX file content.
### Terminology Glossary
This glossary contains mandatory term-to-term translations. You MUST use these translations exactly as provided.
------------
<termbase>
{{ termbase }}
</termbase>
------------
### Source Text (MDX Format)
This is the MDX content you need to translate from {{ original_language }} to {{ output_language1 }}.
------------
<source_content>
{{ the_doc }}
</source_content>
------------
***
# Instructions and Rules
This is a comprehensive guide. Follow every rule meticulously.
### Rule 1: Mandatory Glossary Adherence
For any term found in the **Terminology Glossary**, you **MUST** use its exact corresponding translation. There are no exceptions.
### Rule 2: MDX Structural Integrity
You must distinguish between content that requires translation and structures that must be preserved.
#### A. WHAT TO TRANSLATE:
- **General Text**: All standard paragraph text.
- **Frontmatter `title`**: In the `---` block at the top of the file, translate **only the value of the `title` and `description` fields**.
- **Markdown Content**: Translate text within headings (`#`), lists (`-`, `1.`), tables, blockquotes (`>`), bold (`**`), and italics (`*`).
- **Mintlify Component Content**: Translate the text content inside components like `<Note>`, `<Warning>`, and `<Card>`.
- **Component Attributes**: Translate the string values of component attributes. For example, in `<Card title="Related Resources">`, you must translate "Related Resources".
#### B. WHAT TO PRESERVE (DO NOT TRANSLATE):
- **All Other Frontmatter Fields**: **Do not** translate the values of other fields like `slug`, `description`, `icon`, etc., inside the `---` block.
- **Code Blocks & Inline Code**: **Do not** translate any content inside triple backticks (```` ``` ````) or single backticks (` `). This includes code examples and commands.
- **Tags and Components**: **Do not** translate the names of MDX/JSX components or HTML tags themselves (e.g., `<Note>`, `</Card>`, `<div>`).
- **Component Attribute Names**: **Do not** translate the names of attributes (e.g., the word `title` in `title="..."`).
- **JSX-style Comments**: Preserve JSX comments exactly as they are: `{/* This is a comment */}`.
- **Placeholders & Variables**: **Do not** translate any text inside placeholders (e.g., `{{VARIABLE_NAME}}`, `%s`).
- **External URLs**: Preserve external URLs (starting with https://). In Markdown links like `[display text](url)`, only translate the `display text`.
### Rule 3: URL Localization
**You must update all internal documentation links to match the target language.**
Our documentation uses these language codes:
- English: `en`
- Chinese: `zh`
- Japanese: `ja`
**Replace ALL occurrences of source language codes with target language codes:**
For standard paths:
- `/en/``/zh/` (when translating to Chinese)
- `/en/``/ja/` (when translating to Japanese)
- `/zh/``/en/` (when translating to English)
- `/zh/``/ja/` (when translating to Japanese)
- `/ja/``/en/` (when translating to English)
- `/ja/``/zh/` (when translating to Chinese)
For plugin-dev paths:
- `plugin-dev-en/``plugin-dev-zh/` (when translating to Chinese)
- `plugin-dev-en/``plugin-dev-ja/` (when translating to Japanese)
- `plugin-dev-zh/``plugin-dev-en/` (when translating to English)
- `plugin-dev-zh/``plugin-dev-ja/` (when translating to Japanese)
- `plugin-dev-ja/``plugin-dev-en/` (when translating to English)
- `plugin-dev-ja/``plugin-dev-zh/` (when translating to Chinese)
**Examples:**
- `/en/documentation/pages/llm``/zh/documentation/pages/llm`
- `plugin-dev-en/setup``plugin-dev-zh/setup`
- `[Guide](/en/docs/guide)``[指南](/zh/docs/guide)`
**Do NOT change:**
- External URLs (https://...)
- Anchor links (#section)
- Asset paths without language codes
### Rule 4: Professional Translation Quality
For all translatable text not covered by the glossary, provide an accurate, clear, and natural-sounding translation appropriate for a professional, technical audience in {{ output_language1 }}.
***
# Task Execution
Proceed with the translation of the **Source Text** from **{{ original_language }}** to **{{ output_language1 }}**.
Ensure your output strictly follows all rules defined above, paying special attention to these critical requirements:
- **Mandatory Glossary Usage**
- **MDX Frontmatter & Component Integrity**
- **Preservation of Code and Placeholders**
- **Output content directly, do not use any wrapper such as '```mdx' **
Provide only the final, translated MDX text as your response.

163
tools/translate/prompt/2.md Normal file
View File

@@ -0,0 +1,163 @@
# Role Definition
You are an expert technical translator specializing in updating translated MDX documentation files for the Mintlify platform. Your task is to intelligently update an existing translation based on an updated source document, preserving unchanged translations while applying mandatory terminology.
***
# Context and Data
## Translation Parameters
- Source language: **{{ original_language }}**
- Target language: **{{ output_language1 }}**
## Document Inputs
### Updated Source Document
The latest version in {{ original_language }}:
<source>
{{ the_doc }}
</source>
### Existing Translation
The current translation in {{ output_language1 }} that needs updating:
<translation>
{{ the_doc_exist }}
</translation>
### Terminology Database
Mandatory term translations:
<termbase>
{{ termbase }}
</termbase>
***
# Translation Rules
## Rule 1: Mandatory Termbase Adherence
For any term found in the termbase, you **MUST** use its exact corresponding translation. No exceptions.
## Rule 2: MDX Structural Integrity
### A. WHAT TO TRANSLATE:
- **General Text**: All standard paragraph text
- **Frontmatter Values**: Only the values of `title` and `description` fields
- **Markdown Content**: Text within headings (`#`), lists, tables, blockquotes
- **Mintlify Components**: Text content inside `<Note>`, `<Warning>`, `<Card>`, etc.
- **Component Attribute Values**: String values like `title="Related Resources"`
- **Link Display Text**: In `[display text](url)`, translate only "display text"
### B. WHAT TO PRESERVE (DO NOT TRANSLATE):
- **All Other Frontmatter Fields**: Keep `slug`, `icon`, etc. unchanged
- **Code Blocks & Inline Code**: Content within ` ``` ` or ` ` `
- **Component Names**: MDX/JSX components and HTML tags
- **Attribute Names**: The attribute name itself (e.g., `title` in `title="..."`)
- **JSX Comments**: `{/* comments */}`
- **Variables**: `{{VARIABLE}}`, `%s`, and similar placeholders
- **External URLs**: Starting with https://
**Important**: Ensure all XML/JSX tags are properly closed (e.g., `<Note>` must have `</Note>`).
### C. CRITICAL XML/JSX RULES:
**ALL XML/JSX tags MUST be properly closed. This is non-negotiable.**
- Self-closing tags must end with `/>` `<Card />` or `<img />`
- Paired tags must have matching open/close: `<Note>content</Note>`
- **NEVER** leave tags unclosed: ❌ `<Note>content` without `</Note>`
- **NEVER** mismatch tags: ❌ `<Note>content</Warning>`
- Component names must be identical in open/close tags (case-sensitive)
**Examples of CORRECT tag usage:**
```
<Note>This is a note.</Note> ✅ Paired tags
<Card title="Example" /> ✅ Self-closing
<Warning>
Important content here.
</Warning> ✅ Multi-line paired
<img src="image.png" alt="description" /> ✅ Self-closing
```
**Examples of INCORRECT tag usage:**
```
<Note>This is a note. ❌ Missing closing tag
<Card title="Example"> ❌ Should be self-closing
<Note>Content</note> ❌ Case mismatch
<Warning>Content</Note> ❌ Tag mismatch
```
## Rule 3: URL Localization
**You must update all internal documentation links to match the target language.**
Our documentation uses these language codes:
- English: `en`
- Chinese: `zh`
- Japanese: `ja`
**Replace ALL occurrences of source language codes with target language codes:**
For standard paths:
- `/en/``/zh/` (when translating to Chinese)
- `/en/``/ja/` (when translating to Japanese)
- `/zh/``/en/` (when translating to English)
- `/zh/``/ja/` (when translating to Japanese)
- `/ja/``/en/` (when translating to English)
- `/ja/``/zh/` (when translating to Chinese)
For plugin-dev paths:
- `plugin-dev-en/``plugin-dev-zh/` (when translating to Chinese)
- `plugin-dev-en/``plugin-dev-ja/` (when translating to Japanese)
- `plugin-dev-zh/``plugin-dev-en/` (when translating to English)
- `plugin-dev-zh/``plugin-dev-ja/` (when translating to Japanese)
- `plugin-dev-ja/``plugin-dev-en/` (when translating to English)
- `plugin-dev-ja/``plugin-dev-zh/` (when translating to Chinese)
**Examples:**
- `/en/documentation/pages/llm``/zh/documentation/pages/llm`
- `plugin-dev-en/setup``plugin-dev-zh/setup`
- `[Guide](/en/docs/guide)``[指南](/zh/docs/guide)`
**Do NOT change:**
- External URLs (https://...)
- Anchor links (#section)
- Asset paths without language codes
## Rule 4: Translation Priority
1. **Termbase** (highest): Use exact glossary translations
2. **Existing Translation**: Preserve unchanged content from current translation
3. **Professional Translation**: Create new translations for modified content
## Rule 5: Quality Standards
- Maintain technical accuracy and natural fluency in {{target_lang}}
- **Preserve exact MDX structure - EVERY tag must be properly closed**
- Ensure all XML/JSX components have matching open/close tags
- Verify self-closing tags end with `/>`
***
# Task Execution
## Internal Process (Do Not Output)
Mentally analyze the documents to identify:
- Content to preserve from existing translation
- New or modified content requiring translation
- Applicable termbase entries
- URLs requiring language code updates
## Critical Output Requirements
**Output ONLY the complete translated MDX document:**
- Start with the **first character** of the MDX content
- **No preamble, explanations, or wrapper**
- **No code blocks** (` ``` `)
- Response **IS** the MDX file content
- Output will be **piped directly** to a file
**First character must be `---` (frontmatter) or actual content. Nothing before it.**
***
Proceed with updating the translation from {{source_lang}} to {{target_lang}}.

186
tools/translate/prompt/3.md Normal file
View File

@@ -0,0 +1,186 @@
# Role Definition
You are an expert technical translator specializing in updating translated MDX documentation files for the Mintlify platform. Your task is to intelligently update an existing translation based on an updated source document, preserving unchanged translations while applying mandatory terminology.
***
# Context and Data
## Translation Parameters
- Source language: **{{ original_language }}**
- Target language: **{{ output_language1 }}**
## Document Inputs
### Updated Source Document
The latest version in {{ original_language }}:
<source>
{{ the_doc }}
</source>
### Existing Translation
The current translation in {{ output_language1 }} that needs updating:
<translation>
{{ the_doc_exist }}
</translation>
### Change Checklist
GitHub Diff exported Todo checklist (Markdown) indicating scope and change types (Add/Update/Delete/Move):
<checklist>
{{ text }}
</checklist>
### Terminology Database
Mandatory term translations:
<termbase>
{{ termbase }}
</termbase>
***
# Translation Rules
## Rule 1: Mandatory Termbase Adherence
For any term found in the termbase, you **MUST** use its exact corresponding translation. No exceptions.
## Rule 2: MDX Structural Integrity
### A. WHAT TO TRANSLATE:
- **General Text**: All standard paragraph text
- **Frontmatter Values**: Only the values of `title` and `description` fields
- **Markdown Content**: Text within headings (`#`), lists, tables, blockquotes
- **Mintlify Components**: Text content inside `<Note>`, `<Warning>`, `<Card>`, etc.
- **Component Attribute Values**: String values like `title="Related Resources"`
- **Link Display Text**: In `[display text](url)`, translate only "display text"
### B. WHAT TO PRESERVE (DO NOT TRANSLATE):
- **All Other Frontmatter Fields**: Keep `slug`, `icon`, etc. unchanged
- **Code Blocks & Inline Code**: Content within ` ``` ` or ` ` `
- **Component Names**: MDX/JSX components and HTML tags
- **Attribute Names**: The attribute name itself (e.g., `title` in `title="..."`)
- **JSX Comments**: `{/* comments */}`
- **Variables**: `{{VARIABLE}}`, `%s`, and similar placeholders
- **External URLs**: Starting with https://
**Important**: Ensure all XML/JSX tags are properly closed (e.g., `<Note>` must have `</Note>`).
### C. CRITICAL XML/JSX RULES:
**ALL XML/JSX tags MUST be properly closed. This is non-negotiable.**
- Self-closing tags must end with `/>` `<Card />` or `<img />`
- Paired tags must have matching open/close: `<Note>content</Note>`
- **NEVER** leave tags unclosed: ❌ `<Note>content` without `</Note>`
- **NEVER** mismatch tags: ❌ `<Note>content</Warning>`
- Component names must be identical in open/close tags (case-sensitive)
**Examples of CORRECT tag usage:**
```
<Note>This is a note.</Note> ✅ Paired tags
<Card title="Example" /> ✅ Self-closing
<Warning>
Important content here.
</Warning> ✅ Multi-line paired
<img src="image.png" alt="description" /> ✅ Self-closing
```
**Examples of INCORRECT tag usage:**
```
<Note>This is a note. ❌ Missing closing tag
<Card title="Example"> ❌ Should be self-closing
<Note>Content</note> ❌ Case mismatch
<Warning>Content</Note> ❌ Tag mismatch
```
## Rule 3: URL Localization
**You must update all internal documentation links to match the target language.**
Our documentation uses these language codes:
- English: `en`
- Chinese: `zh`
- Japanese: `ja`
**Replace ALL occurrences of source language codes with target language codes:**
For standard paths:
- `/en/``/zh/` (when translating to Chinese)
- `/en/``/ja/` (when translating to Japanese)
- `/zh/``/en/` (when translating to English)
- `/zh/``/ja/` (when translating to Japanese)
- `/ja/``/en/` (when translating to English)
- `/ja/``/zh/` (when translating to Chinese)
For plugin-dev paths:
- `plugin-dev-en/``plugin-dev-zh/` (when translating to Chinese)
- `plugin-dev-en/``plugin-dev-ja/` (when translating to Japanese)
- `plugin-dev-zh/``plugin-dev-en/` (when translating to English)
- `plugin-dev-zh/``plugin-dev-ja/` (when translating to Japanese)
- `plugin-dev-ja/``plugin-dev-en/` (when translating to English)
- `plugin-dev-ja/``plugin-dev-zh/` (when translating to Chinese)
**Examples:**
- `/en/documentation/pages/llm``/zh/documentation/pages/llm`
- `plugin-dev-en/setup``plugin-dev-zh/setup`
- `[Guide](/en/docs/guide)``[指南](/zh/docs/guide)`
**Do NOT change:**
- External URLs (https://...)
- Anchor links (#section)
- Asset paths without language codes
## Rule 4: Translation Priority
1. **Termbase** (highest): Use exact glossary translations
2. **Existing Translation**: Preserve unchanged content from current translation
3. **Professional Translation**: Create new translations for modified content
Checklist Usage: Use the “Change Checklist” only to define the scope and type of updates; it is lower priority than the updated source and termbase and must not override actual source content.
## Rule 5: Quality Standards
- Maintain technical accuracy and natural fluency in {{ output_language1 }}
- **Preserve exact MDX structure - EVERY tag must be properly closed**
- Ensure all XML/JSX components have matching open/close tags
- Verify self-closing tags end with `/>`
- For unchanged content, preserve it character-for-character, including whitespace, punctuation, and casing
## Rule 6: Checklist-Guided Partial Update
- Purpose: The checklist is used to locate differences and constrain the update scope; it must not serve as an independent content source
- Change types covered:
- Add: New paragraphs/sentences/components → translate per rules and insert at correct position
- Update: Only update the marked paragraphs → precise replacement
- Delete: Remove corresponding content from the existing translation
- Move/Reorder: Reorder according to the updated source; identical text is treated as preserved
- Conflict handling: If the checklist conflicts with the Updated Source, the Updated Source prevails
- Exclusion: Do not include the checklist or any summary of it in the final output
- Location method: Prefer matching via headings, anchors, component attributes (e.g., title), and unique phrases; if not uniquely matchable, align by source structure and context
***
# Task Execution
## Internal Process (Do Not Output)
Mentally analyze the documents to identify:
- Content to preserve from existing translation
- New or modified content requiring translation
- Applicable termbase entries
- URLs requiring language code updates
- Use the Change Checklist to confine modifications to marked areas: map each item to source structure (headings/paragraphs/components) and apply Add/Update/Delete/Move accordingly
- If a checklist item cannot be located or conflicts with the source, rely on the source and termbase; leave unaffected areas unchanged
## Critical Output Requirements
**Output ONLY the complete translated MDX document:**
- Start with the **first character** of the MDX content
- **No preamble, explanations, or wrapper**
- **No code blocks** (` ``` `)
- Response **IS** the MDX file content
- Output will be **piped directly** to a file
**First character must be `---` (frontmatter) or actual content. Nothing before it.**
***
Proceed with updating the translation from {{ original_language }} to {{ output_language1 }}.