Files
VRCT/src-python/docs/details/translation_languages.md
2025-10-14 07:28:03 +09:00

342 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# translation_languages.py - 翻訳言語マッピング
## 概要
翻訳エンジンが対応する言語コードのマッピングテーブルを提供するモジュールです。複数の翻訳エンジンDeepL、Google、Bing、Papago等の言語コード仕様の差異を吸収し、統一的な翻訳言語管理を実現します。
## 主要機能
### 多エンジン対応
- DeepL無料版・API版
- Google Translate
- Microsoft TranslatorBing
- Papago Translator
- その他のWeb翻訳サービス
### 言語コード統合管理
- 各エンジン固有の言語コード形式を統一
- 送信元sourceと送信先target言語の分離管理
- 地域固有言語バリエーションの対応
## データ構造
### translation_lang
```python
translation_lang: Dict[str, Dict[str, Dict[str, str]]] = {
"エンジン名": {
"source": {"言語名": "言語コード", ...},
"target": {"言語名": "言語コード", ...}
}
}
```
### DeepL翻訳エンジン無料版
```python
translation_lang["DeepL"] = {
"source": {
"Arabic": "ar", "Bulgarian": "bg", "Czech": "cs", "Danish": "da",
"German": "de", "Greek": "el", "English": "en", "Spanish": "es",
"Estonian": "et", "Finnish": "fi", "French": "fr", "Irish": "ga",
"Croatian": "hr", "Hungarian": "hu", "Indonesian": "id",
"Icelandic": "is", "Italian": "it", "Japanese": "ja",
"Korean": "ko", "Lithuanian": "lt", "Latvian": "lv",
"Maltese": "mt", "Bokmal": "nb", "Dutch": "nl",
"Norwegian": "no", "Polish": "pl", "Portuguese": "pt",
"Romanian": "ro", "Russian": "ru", "Slovak": "sk",
"Slovenian": "sl", "Swedish": "sv", "Turkish": "tr",
"Ukrainian": "uk", "Chinese Simplified": "zh",
"Chinese Traditional": "zh"
},
"target": {/* 同じマッピング */}
}
```
### DeepL API有料版
```python
translation_lang["DeepL_API"] = {
"source": {/* 基本的にDeepLと同様 */},
"target": {
"Japanese": "ja",
"English American": "en-US", # 地域別対応
"English British": "en-GB",
"Portuguese Brazilian": "pt-BR", # ブラジル・ポルトガル語
"Portuguese European": "pt-PT", # ヨーロッパ・ポルトガル語
"Chinese Simplified": "zh",
"Chinese Traditional": "zh"
/* その他の言語 */
}
}
```
## 主要対応言語
### 西欧言語
- **English**: 英語(米国・英国バリエーション)
- **German**: ドイツ語
- **French**: フランス語
- **Spanish**: スペイン語
- **Italian**: イタリア語
- **Portuguese**: ポルトガル語(ブラジル・欧州)
- **Dutch**: オランダ語
- **Swedish**: スウェーデン語
- **Norwegian**: ノルウェー語
### 東欧・スラブ言語
- **Russian**: ロシア語
- **Polish**: ポーランド語
- **Czech**: チェコ語
- **Slovak**: スロバキア語
- **Ukrainian**: ウクライナ語
- **Bulgarian**: ブルガリア語
- **Croatian**: クロアチア語
- **Slovenian**: スロベニア語
### アジア言語
- **Japanese**: 日本語
- **Korean**: 韓国語
- **Chinese Simplified**: 中国語(簡体字)
- **Chinese Traditional**: 中国語(繁体字)
- **Indonesian**: インドネシア語
### その他の言語
- **Arabic**: アラビア語
- **Turkish**: トルコ語
- **Finnish**: フィンランド語
- **Estonian**: エストニア語
- **Latvian**: ラトビア語
- **Lithuanian**: リトアニア語
- **Maltese**: マルタ語
- **Irish**: アイルランド語
## 使用方法
### 基本的な言語コード取得
```python
from models.translation.translation_languages import translation_lang
# DeepLで日本語から英語への翻訳
deepl_source = translation_lang["DeepL"]["source"]["Japanese"] # "ja"
deepl_target = translation_lang["DeepL"]["target"]["English"] # "en"
# DeepL APIで地域固有の英語指定
deepl_api_target = translation_lang["DeepL_API"]["target"]["English American"] # "en-US"
```
### 対応言語の確認
```python
def get_supported_languages(engine_name):
"""指定エンジンの対応言語一覧取得"""
if engine_name in translation_lang:
engine_data = translation_lang[engine_name]
source_langs = list(engine_data["source"].keys())
target_langs = list(engine_data["target"].keys())
return {
"source": source_langs,
"target": target_langs,
"common": list(set(source_langs) & set(target_langs))
}
return None
# 使用例
deepl_langs = get_supported_languages("DeepL")
print(f"DeepL対応言語数: {len(deepl_langs['common'])}")
```
### 言語コード変換
```python
def convert_language_code(language_name, from_engine, to_engine, direction="source"):
"""エンジン間での言語コード変換"""
try:
# 元エンジンから言語名を確認
from_codes = translation_lang[from_engine][direction]
to_codes = translation_lang[to_engine][direction]
if language_name in from_codes and language_name in to_codes:
return to_codes[language_name]
return None
except KeyError:
return None
# 使用例DeepLからGoogle Translateへの変換
google_code = convert_language_code("Japanese", "DeepL", "Google", "target")
```
### 翻訳システムでの統合利用
```python
class TranslationLanguageManager:
"""翻訳言語管理クラス"""
@staticmethod
def get_language_code(engine, language, direction="target"):
"""安全な言語コード取得"""
try:
return translation_lang[engine][direction][language]
except KeyError:
return None
@staticmethod
def is_language_supported(engine, language, direction="target"):
"""言語サポート確認"""
try:
return language in translation_lang[engine][direction]
except KeyError:
return False
@staticmethod
def get_compatible_engines(source_lang, target_lang):
"""両言語をサポートするエンジン一覧"""
compatible = []
for engine in translation_lang:
source_supported = TranslationLanguageManager.is_language_supported(
engine, source_lang, "source"
)
target_supported = TranslationLanguageManager.is_language_supported(
engine, target_lang, "target"
)
if source_supported and target_supported:
compatible.append(engine)
return compatible
# 使用例
manager = TranslationLanguageManager()
# 日本語→英語をサポートするエンジン
engines = manager.get_compatible_engines("Japanese", "English")
print(f"対応エンジン: {engines}")
# 特定エンジンでの言語コード取得
ja_code = manager.get_language_code("DeepL", "Japanese", "source")
en_code = manager.get_language_code("DeepL", "English", "target")
```
## エンジン別特徴
### DeepL無料版
- **強み**: 高精度、自然な翻訳
- **制限**: 月間使用量制限、API制限
- **対応**: 26言語
### DeepL API有料版
- **強み**: DeepLの高精度、地域別言語対応
- **制限**: 従量課金
- **対応**: 地域固有言語バリエーション
### Google Translate
- **強み**: 多言語対応、高速
- **制限**: API制限、精度のばらつき
- **対応**: 100+言語
### Microsoft Translator
- **強み**: リアルタイム翻訳、音声対応
- **制限**: APIキー必要
- **対応**: 70+言語
## 地域バリエーション対応
### 英語の地域別対応
```python
# DeepL APIでの英語バリエーション
"English American": "en-US", # アメリカ英語
"English British": "en-GB", # イギリス英語
```
### ポルトガル語の地域別対応
```python
# ブラジル・ポルトガル語とヨーロッパ・ポルトガル語
"Portuguese Brazilian": "pt-BR",
"Portuguese European": "pt-PT",
```
### 中国語の文字体系対応
```python
# 簡体字・繁体字の区別
"Chinese Simplified": "zh", # 簡体字(中国本土)
"Chinese Traditional": "zh", # 繁体字(台湾・香港)
```
## 拡張性
### 新エンジンの追加
```python
# 新しい翻訳エンジンの追加例
translation_lang["NewEngine"] = {
"source": {
"Japanese": "jp",
"English": "en",
"Korean": "kr"
},
"target": {
"Japanese": "jp",
"English": "en",
"Korean": "kr"
}
}
```
### 新言語の追加
```python
# 既存エンジンへの新言語追加
translation_lang["DeepL"]["source"]["Hindi"] = "hi"
translation_lang["DeepL"]["target"]["Hindi"] = "hi"
```
## エラーハンドリング
### 安全な言語コード取得
```python
def safe_get_language_code(engine, language, direction="target", fallback="en"):
"""フォールバック機能付き言語コード取得"""
try:
return translation_lang[engine][direction][language]
except KeyError:
# フォールバック言語を返す
try:
return translation_lang[engine][direction].get("English", fallback)
except KeyError:
return fallback
```
### 言語サポート検証
```python
def validate_translation_pair(engine, source_lang, target_lang):
"""翻訳ペアの有効性検証"""
try:
engine_data = translation_lang[engine]
source_supported = source_lang in engine_data["source"]
target_supported = target_lang in engine_data["target"]
return {
"valid": source_supported and target_supported,
"source_supported": source_supported,
"target_supported": target_supported
}
except KeyError:
return {
"valid": False,
"source_supported": False,
"target_supported": False,
"error": f"Unknown engine: {engine}"
}
```
## 注意事項
- エンジンによって言語コード形式が異なる
- 地域バリエーションはエンジンにより対応状況が異なる
- 新しい言語追加時は全エンジンでの対応状況を確認
- API制限や課金体系はエンジンごとに異なる
- 一部の言語ペアは翻訳精度に差がある場合がある
## 関連モジュール
- `translation_translator.py`: 翻訳エンジン本体
- `translation_utils.py`: 翻訳ユーティリティ
- `transcription_languages.py`: 音声認識言語マッピング
- `config.py`: 翻訳言語設定管理
- `controller.py`: 言語選択UI制御