Files
lity3d/i18n.py
T

543 lines
17 KiB
Python
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.
"""
Lity3D Editor 多语言翻译系统
支持: 中文、English、日本語、한국어、Español、Français、Deutsch、Русский、العربية、Português、Italiano、Türkçe
"""
import json, os
LANG_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "languages")
_translations = {
"zh": {
"app_title": "Lity3D 编辑器",
"menu_file": "文件",
"menu_edit": "编辑",
"menu_build": "构建",
"menu_scene": "场景",
"menu_help": "帮助",
"menu_view": "视图",
"menu_language": "语言",
"new_file": "新建文件",
"open_file": "打开文件",
"open_folder": "打开文件夹",
"save": "保存",
"save_as": "另存为",
"exit": "退出",
"run": "运行",
"run_game": "运行游戏",
"run_file": "运行当前文件",
"stop": "停止",
"build_engine": "编译引擎",
"build_exe": "打包为 EXE",
"kill_process": "终止进程",
"new_scene": "新建场景",
"open_scene": "打开场景",
"save_scene": "保存场景",
"run_scene": "运行场景",
"about": "关于 Lity3D",
"docs": "API 文档",
"explorer": "资源管理器",
"output": "输出",
"console": "控制台",
"ready": "就绪",
"running": "运行中...",
"saved": "已保存",
"opened": "已打开",
"new_file_msg": "新文件",
"no_file": "没有打开文件",
"no_scene": "没有找到场景文件",
"build_first": "请先编译引擎",
"kill_done": "进程已终止",
"build_ok": "编译成功",
"build_err": "编译失败",
"packaged": "已打包",
"new_scene_ok": "新场景已创建",
"process_exit": "进程退出,返回码",
"cant_run": "无法运行此类文件",
"interpreter_not_found": "解释器未编译",
"theme": "主题",
"dark_theme": "深色主题",
"light_theme": "浅色主题",
"undo": "撤销",
"redo": "重做",
"cut": "剪切",
"copy": "复制",
"paste": "粘贴",
"select_all": "全选",
"find": "查找",
"replace": "替换",
"goto_line": "跳转到行",
"preferences": "首选项",
"recent_files": "最近文件",
"reload": "重新加载",
"close_tab": "关闭标签",
"close_all": "关闭所有",
"line": "行",
"col": "列",
"chars": "字符",
"encoding": "编码",
"new_scene_dialog_title": "新建场景",
"new_scene_name": "场景名称:",
"new_scene_type": "场景类型:",
"type_empty": "空场景",
"type_rpg": "RPG 模板",
"type_fps": "FPS 模板",
"type_platformer": "平台跳跃模板",
"type_custom": "自定义",
"create": "创建",
"cancel": "取消",
"confirm": "确认",
"delete": "删除",
"rename": "重命名",
"duplicate": "复制",
"properties": "属性",
"hierarchy": "层级",
"inspector": "检查器",
"game_view": "游戏视图",
"scene_view": "场景视图",
"project": "项目",
},
"en": {
"app_title": "Lity3D Editor",
"menu_file": "File",
"menu_edit": "Edit",
"menu_build": "Build",
"menu_scene": "Scene",
"menu_help": "Help",
"menu_view": "View",
"menu_language": "Language",
"new_file": "New File",
"open_file": "Open File",
"open_folder": "Open Folder",
"save": "Save",
"save_as": "Save As",
"exit": "Exit",
"run": "Run",
"run_game": "Run Game",
"run_file": "Run Current File",
"stop": "Stop",
"build_engine": "Build Engine",
"build_exe": "Package as EXE",
"kill_process": "Kill Process",
"new_scene": "New Scene",
"open_scene": "Open Scene",
"save_scene": "Save Scene",
"run_scene": "Run Scene",
"about": "About Lity3D",
"docs": "API Docs",
"explorer": "Explorer",
"output": "Output",
"console": "Console",
"ready": "Ready",
"running": "Running...",
"saved": "Saved",
"opened": "Opened",
"new_file_msg": "New file",
"no_file": "No file open",
"no_scene": "No scene file found",
"build_first": "Build engine first",
"kill_done": "Process killed",
"build_ok": "Build succeeded",
"build_err": "Build failed",
"packaged": "Packaged to",
"new_scene_ok": "New scene created",
"process_exit": "Process exited with code",
"cant_run": "Cannot run this file type",
"interpreter_not_found": "Interpreter not built",
"theme": "Theme",
"dark_theme": "Dark Theme",
"light_theme": "Light Theme",
"undo": "Undo",
"redo": "Redo",
"cut": "Cut",
"copy": "Copy",
"paste": "Paste",
"select_all": "Select All",
"find": "Find",
"replace": "Replace",
"goto_line": "Go to Line",
"preferences": "Preferences",
"recent_files": "Recent Files",
"reload": "Reload",
"close_tab": "Close Tab",
"close_all": "Close All",
"line": "Line",
"col": "Col",
"chars": "Characters",
"encoding": "Encoding",
"new_scene_dialog_title": "New Scene",
"new_scene_name": "Scene Name:",
"new_scene_type": "Scene Type:",
"type_empty": "Empty Scene",
"type_rpg": "RPG Template",
"type_fps": "FPS Template",
"type_platformer": "Platformer Template",
"type_custom": "Custom",
"create": "Create",
"cancel": "Cancel",
"confirm": "Confirm",
"delete": "Delete",
"rename": "Rename",
"duplicate": "Duplicate",
"properties": "Properties",
"hierarchy": "Hierarchy",
"inspector": "Inspector",
"game_view": "Game View",
"scene_view": "Scene View",
"project": "Project",
},
"ja": {
"app_title": "Lity3D エディタ",
"menu_file": "ファイル",
"menu_edit": "編集",
"menu_build": "ビルド",
"menu_scene": "シーン",
"menu_help": "ヘルプ",
"menu_view": "表示",
"menu_language": "言語",
"new_file": "新規ファイル",
"open_file": "ファイルを開く",
"open_folder": "フォルダを開く",
"save": "保存",
"save_as": "名前を付けて保存",
"exit": "終了",
"run": "実行",
"run_game": "ゲームを実行",
"run_file": "現在のファイルを実行",
"stop": "停止",
"build_engine": "エンジンをビルド",
"build_exe": "EXEにパッケージ",
"kill_process": "プロセスを終了",
"new_scene": "新規シーン",
"open_scene": "シーンを開く",
"save_scene": "シーンを保存",
"run_scene": "シーンを実行",
"about": "Lity3D について",
"docs": "API ドキュメント",
"explorer": "エクスプローラ",
"output": "出力",
"ready": "準備完了",
"running": "実行中...",
"dark_theme": "ダークテーマ",
"light_theme": "ライトテーマ",
"undo": "元に戻す",
"redo": "やり直す",
"save_as": "名前を付けて保存",
"line": "行",
"col": "列",
"cancel": "キャンセル",
"create": "作成",
},
"ko": {
"app_title": "Lity3D 편집기",
"menu_file": "파일",
"menu_edit": "편집",
"menu_build": "빌드",
"menu_scene": "씬",
"menu_help": "도움말",
"menu_view": "보기",
"menu_language": "언어",
"new_file": "새 파일",
"open_file": "파일 열기",
"open_folder": "폴더 열기",
"save": "저장",
"save_as": "다른 이름으로 저장",
"exit": "종료",
"run": "실행",
"run_game": "게임 실행",
"run_file": "현재 파일 실행",
"stop": "중지",
"build_engine": "엔진 빌드",
"build_exe": "EXE로 패키징",
"kill_process": "프로세스 종료",
"new_scene": "새 씬",
"about": "Lity3D 정보",
"docs": "API 문서",
"explorer": "탐색기",
"output": "출력",
"ready": "준비",
"running": "실행 중...",
"dark_theme": "다크 테마",
"light_theme": "라이트 테마",
"undo": "실행 취소",
"redo": "다시 실행",
"cancel": "취소",
"create": "생성",
"line": "줄",
"col": "열",
},
"es": {
"app_title": "Lity3D Editor",
"menu_file": "Archivo",
"menu_edit": "Editar",
"menu_build": "Construir",
"menu_scene": "Escena",
"menu_help": "Ayuda",
"menu_view": "Vista",
"menu_language": "Idioma",
"new_file": "Nuevo archivo",
"open_file": "Abrir archivo",
"save": "Guardar",
"save_as": "Guardar como",
"exit": "Salir",
"run": "Ejecutar",
"run_game": "Ejecutar juego",
"stop": "Detener",
"build_engine": "Compilar motor",
"build_exe": "Empaquetar como EXE",
"about": "Acerca de Lity3D",
"explorer": "Explorador",
"output": "Salida",
"ready": "Listo",
"running": "Ejecutando...",
"dark_theme": "Tema oscuro",
"light_theme": "Tema claro",
"undo": "Deshacer",
"redo": "Rehacer",
"cancel": "Cancelar",
"create": "Crear",
"line": "Línea",
"col": "Col",
},
"fr": {
"app_title": "Lity3D Éditeur",
"menu_file": "Fichier",
"menu_edit": "Édition",
"menu_build": "Construire",
"menu_scene": "Scène",
"menu_help": "Aide",
"menu_view": "Affichage",
"menu_language": "Langue",
"new_file": "Nouveau fichier",
"open_file": "Ouvrir fichier",
"save": "Enregistrer",
"save_as": "Enregistrer sous",
"exit": "Quitter",
"run": "Exécuter",
"run_game": "Exécuter le jeu",
"stop": "Arrêter",
"build_engine": "Compiler le moteur",
"build_exe": "Package EXE",
"about": "À propos",
"explorer": "Explorateur",
"output": "Sortie",
"ready": "Prêt",
"running": "En exécution...",
"dark_theme": "Thème sombre",
"light_theme": "Thème clair",
"undo": "Annuler",
"redo": "Rétablir",
"cancel": "Annuler",
"create": "Créer",
"line": "Ligne",
"col": "Col",
},
"de": {
"app_title": "Lity3D Editor",
"menu_file": "Datei",
"menu_edit": "Bearbeiten",
"menu_build": "Erstellen",
"menu_scene": "Szene",
"menu_help": "Hilfe",
"menu_view": "Ansicht",
"menu_language": "Sprache",
"new_file": "Neue Datei",
"open_file": "Datei öffnen",
"save": "Speichern",
"save_as": "Speichern unter",
"exit": "Beenden",
"run": "Ausführen",
"run_game": "Spiel starten",
"stop": "Stopp",
"build_engine": "Engine erstellen",
"build_exe": "Als EXE paketieren",
"about": "Über Lity3D",
"explorer": "Explorer",
"output": "Ausgabe",
"ready": "Bereit",
"running": "Wird ausgeführt...",
"dark_theme": "Dunkles Theme",
"light_theme": "Helles Theme",
"undo": "Rückgängig",
"redo": "Wiederholen",
"cancel": "Abbrechen",
"create": "Erstellen",
"line": "Zeile",
"col": "Spalte",
},
"ru": {
"app_title": "Lity3D Редактор",
"menu_file": "Файл",
"menu_edit": "Правка",
"menu_build": "Сборка",
"menu_scene": "Сцена",
"menu_help": "Справка",
"menu_view": "Вид",
"menu_language": "Язык",
"new_file": "Новый файл",
"open_file": "Открыть файл",
"save": "Сохранить",
"save_as": "Сохранить как",
"exit": "Выход",
"run": "Запуск",
"run_game": "Запустить игру",
"stop": "Стоп",
"build_engine": "Собрать движок",
"build_exe": "Упаковать в EXE",
"about": "О Lity3D",
"explorer": "Проводник",
"output": "Вывод",
"ready": "Готово",
"running": "Выполняется...",
"dark_theme": "Тёмная тема",
"light_theme": "Светлая тема",
"undo": "Отменить",
"redo": "Повторить",
"cancel": "Отмена",
"create": "Создать",
"line": "Строка",
"col": "Столбец",
},
"pt": {
"app_title": "Lity3D Editor",
"menu_file": "Arquivo",
"menu_edit": "Editar",
"menu_build": "Compilar",
"menu_scene": "Cena",
"menu_help": "Ajuda",
"menu_view": "Visualizar",
"menu_language": "Idioma",
"new_file": "Novo arquivo",
"open_file": "Abrir arquivo",
"save": "Salvar",
"save_as": "Salvar como",
"exit": "Sair",
"run": "Executar",
"run_game": "Executar jogo",
"stop": "Parar",
"build_engine": "Compilar engine",
"build_exe": "Empacotar EXE",
"about": "Sobre Lity3D",
"explorer": "Explorador",
"output": "Saída",
"ready": "Pronto",
"running": "Executando...",
"dark_theme": "Tema escuro",
"light_theme": "Tema claro",
"undo": "Desfazer",
"redo": "Refazer",
"cancel": "Cancelar",
"create": "Criar",
"line": "Linha",
"col": "Col",
},
"it": {
"app_title": "Lity3D Editor",
"menu_file": "File",
"menu_edit": "Modifica",
"menu_build": "Compila",
"menu_scene": "Scena",
"menu_help": "Aiuto",
"menu_view": "Vista",
"menu_language": "Lingua",
"new_file": "Nuovo file",
"open_file": "Apri file",
"save": "Salva",
"save_as": "Salva come",
"exit": "Esci",
"run": "Esegui",
"run_game": "Esegui gioco",
"stop": "Ferma",
"build_engine": "Compila engine",
"build_exe": "Pacchetta EXE",
"about": "Informazioni",
"explorer": "Esplora",
"output": "Output",
"ready": "Pronto",
"running": "In esecuzione...",
"dark_theme": "Tema scuro",
"light_theme": "Tema chiaro",
"undo": "Annulla",
"redo": "Ripristina",
"cancel": "Annulla",
"create": "Crea",
"line": "Riga",
"col": "Col",
},
"tr": {
"app_title": "Lity3D Editör",
"menu_file": "Dosya",
"menu_edit": "Düzenle",
"menu_build": "Derle",
"menu_scene": "Sahne",
"menu_help": "Yardım",
"menu_view": "Görünüm",
"menu_language": "Dil",
"new_file": "Yeni dosya",
"open_file": "Dosya aç",
"save": "Kaydet",
"save_as": "Farklı kaydet",
"exit": "Çıkış",
"run": "Çalıştır",
"run_game": "Oyunu çalıştır",
"stop": "Durdur",
"build_engine": "Motoru derle",
"build_exe": "EXE paketle",
"about": "Hakkında",
"explorer": "Gezgin",
"output": "Çıktı",
"ready": "Hazır",
"running": "Çalışıyor...",
"dark_theme": "Koyu tema",
"light_theme": "Açık tema",
"undo": "Geri al",
"redo": "Yinele",
"cancel": "İptal",
"create": "Oluştur",
"line": "Satır",
"col": "Sütun",
},
}
_current_lang = "zh"
_listeners = []
LANG_NAMES = {
"zh": "中文", "en": "English", "ja": "日本語", "ko": "한국어",
"es": "Español", "fr": "Français", "de": "Deutsch", "ru": "Русский",
"pt": "Português", "it": "Italiano", "tr": "Türkçe",
}
def t(key):
lang = _translations.get(_current_lang, _translations["en"])
return lang.get(key, _translations["en"].get(key, key))
def set_language(lang_code):
global _current_lang
if lang_code in _translations:
_current_lang = lang_code
for cb in _listeners:
cb()
def get_language():
return _current_lang
def on_language_change(callback):
_listeners.append(callback)
def get_all_languages():
return [(code, LANG_NAMES.get(code, code)) for code in _translations]
def save_language(code):
path = os.path.join(os.path.dirname(os.path.abspath(__file__)), ".lang")
with open(path, "w") as f:
f.write(code)
def load_language():
global _current_lang
path = os.path.join(os.path.dirname(os.path.abspath(__file__)), ".lang")
if os.path.exists(path):
with open(path) as f:
code = f.read().strip()
if code in _translations:
_current_lang = code