Skip to content

Commit e410756

Browse files
committed
feat: Implement internationalization (i18n) and enhance UI/error handling
This commit introduces comprehensive internationalization support for the application, allowing users to switch between English and Japanese user interfaces. It also includes significant improvements to error handling, UI responsiveness, and overall stability. Key changes: - Added `strings.py` to manage UI text for English and Japanese. - Implemented dynamic language switching via a new "Language" menu. - Updated all relevant UI components (menus, labels, buttons, tooltips, Advanced Yaw Selector) to reflect the selected language. - Enhanced `gui_app.py`: - Refactored menu creation for robust language switching. - Improved handling of combobox selections during language changes. - Strengthened error handling for FFmpeg/ffprobe checks and video info retrieval. - Added Python and Tkinter version checks at startup in `insta360convert.py`. - Enhanced `ffmpeg_worker.py`: - Improved CUDA error detection logic. - Added default values for potentially missing configuration keys. - Refined FFmpeg command construction and output handling. - Enhanced `update_checker.py`: - Improved network error handling and API response parsing. - Standardized message key a.k.a. return for GUI. - Enhanced `tooltip_utils.py`: - Improved cursor tracking and tooltip positioning logic for better stability. - Updated `constants.py` with new version information (v2.2.0) and minor comment clarifications. - Updated `README.md` to reflect new features, version, and updated requirements. - Refined Windows batch file for launching the application. Bug Fixes: - Resolved TclError related to menu label updates during language switching. - Fixed `TypeError` for `Pool.join()` by removing unsupported `timeout` argument. - Addressed potential issues in video info parsing and CUDA compatibility checks.
1 parent e570c5e commit e410756

12 files changed

Lines changed: 3552 additions & 1714 deletions

README.md

Lines changed: 39 additions & 30 deletions
Large diffs are not rendered by default.

advanced_yaw_selector.py

Lines changed: 1341 additions & 622 deletions
Large diffs are not rendered by default.

constants.py

Lines changed: 56 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,72 @@
11
# constants.py
2-
# アプリケーション全体で使用する定数
3-
4-
APP_NAME = "Insta360Convert GUI"
2+
# アプリケーション全体で使用する定数 (翻訳不要なもの)
53

64
# --- バージョン情報 ---
7-
# リリース日 (ユーザー提供の値を維持、必要に応じて更新)
8-
APP_RELEASE_DATE = "2025-06-04"
5+
APP_RELEASE_DATE = "2025-06-05" # リリース日 (ユーザー提供の値を維持)
96

10-
# アプリケーションのセマンティックバージョン番号
11-
# これを v2.1.0 に更新する場合
127
APP_VERSION_MAJOR = 2
13-
APP_VERSION_MINOR = 1
8+
APP_VERSION_MINOR = 2
149
APP_VERSION_PATCH = 0
15-
# 文字列としてのバージョン (例: "v2.1.0" や "2.1.0")
16-
# 'v'プレフィックスを付けるかどうかは一貫性を持たせます。
17-
# GitHubのタグ名と合わせるなら 'v' を付けるのが一般的。
1810
APP_VERSION_STRING_SEMVER = f"v{APP_VERSION_MAJOR}.{APP_VERSION_MINOR}.{APP_VERSION_PATCH}"
1911

20-
# 開発バージョン文字列 (以前のAPP_DEV_VERSIONの役割。必要なら残すか、上記に統合)
21-
# もし APP_VERSION_STRING_SEMVER で十分なら、この行は不要かもしれません。
22-
# APP_DEV_LABEL = "dev" # 例えば開発版なら "dev", "beta", "rc1" など
23-
# APP_FULL_VERSION_STRING = f"{APP_VERSION_STRING_SEMVER}-{APP_DEV_LABEL}" if APP_DEV_LABEL else APP_VERSION_STRING_SEMVER
24-
25-
# GUIのタイトルバーやバージョン情報ダイアログで表示する文字列
26-
# (以前のAPP_VERSION_STRINGの役割。日付とバージョンを組み合わせるか、バージョンのみにするか選択)
27-
# 例1: 日付とセマンティックバージョン
28-
APP_DISPLAY_VERSION = f"{APP_VERSION_STRING_SEMVER} ({APP_RELEASE_DATE})"
29-
# 例2: セマンティックバージョンのみ (より一般的かも)
30-
# APP_DISPLAY_VERSION = APP_VERSION_STRING_SEMVER
31-
32-
# --- ここまでバージョン情報 ---
33-
34-
35-
# FFmpeg関連定数
12+
# --- FFmpeg関連定数 ---
3613
FFMPEG_PRESETS = ["ultrafast", "superfast", "veryfast", "faster", "fast", "medium", "slow", "slower", "veryslow"]
3714
DEFAULT_PRESET = "medium"
38-
DEFAULT_RESOLUTION_WIDTH = 1920
39-
HIGH_RESOLUTION_THRESHOLD = 4096 # この解像度を超える入力は高解像度とみなす
15+
DEFAULT_RESOLUTION_WIDTH = 1920 # 解像度指定が無効な場合のフォールバック値
16+
HIGH_RESOLUTION_THRESHOLD = 4096 # この解像度を超える入力は高解像度とみなし、CUDA互換性テストの対象とする
4017

4118
# --- GitHub関連定数 (アップデートチェック用) ---
4219
GITHUB_REPO_OWNER = "stechdrive"
4320
GITHUB_REPO_NAME = "Insta360Convert-GUI"
4421
GITHUB_API_URL_LATEST_RELEASE = f"https://api.github.com/repos/{GITHUB_REPO_OWNER}/{GITHUB_REPO_NAME}/releases/latest"
4522
GITHUB_RELEASES_PAGE_URL = f"https://github.com/{GITHUB_REPO_OWNER}/{GITHUB_REPO_NAME}/releases"
23+
24+
# --- advanced_yaw_selector.py で使用する定数 (一部は strings.py で翻訳されるものもある) ---
25+
# これらのデフォルト値は、strings.py で翻訳されたツールチップ等で使用される場合がある。
26+
# advanced_yaw_selector モジュール自体も、これらの値を使って初期設定を行う。
27+
AYS_INITIAL_CANVAS_SIZE = 380
28+
AYS_MIN_CANVAS_DRAW_SIZE = 50 # Minimum canvas dimension for drawing anything meaningful
29+
AYS_DEBOUNCE_DELAY_MS = 150 # Debounce delay for UI events like slider drags
30+
31+
AYS_MIN_FOV_DEGREES = 30.0
32+
AYS_MAX_FOV_DEGREES = 120.0
33+
AYS_DEFAULT_FOV_INTERNAL = 100.0 # FOVリセット時のデフォルト値
34+
AYS_MAX_YAW_DIVISIONS = 12
35+
AYS_DEFAULT_YAW_DIVISIONS_P0_INTERNAL = 8 # Default divisions for 0 pitch
36+
AYS_DEFAULT_YAW_DIVISIONS_OTHER_INTERNAL = 6 # Default divisions for non-0 pitch
37+
AYS_DEFAULT_PITCHES_STR = "-30,0,30" # ピッチリセット時のデフォルト値
38+
AYS_PREDEFINED_PITCH_ADD_VALUES = [-90, -75, -60, -45, -30, -15, 0, 15, 30, 45, 60, 75, 90]
39+
AYS_MAX_PITCH_ENTRIES = 7
40+
41+
# 色定義 (これらは翻訳対象外の内部識別子や固定色)
42+
AYS_COLOR_CANVAS_BG = "white"
43+
AYS_COLOR_TEXT = "black" # General text color on canvas
44+
AYS_FOV_RING_COLORS_BASE = [
45+
"skyblue", "lightcoral", "lightgreen", "plum", "gold", "lightpink",
46+
"orange", "cyan", "magenta", "yellowgreen", "lightblue", "pink"
47+
] # Colors for different yaw sectors
48+
AYS_C_FOV_BOUNDARY_LINE_COLOR = "black" # Outline for selected FOV cones
49+
AYS_COLOR_CENTER_TEXT_BG = "lightgrey" # Background for info text on canvas
50+
AYS_COLOR_PITCHED_EQUATOR = "slateGray" # Color for the equator line
51+
AYS_FAR_SIDE_LINE_COLOR = "#D0D0D0" # Outline for non-selected, back-facing cones
52+
AYS_FAR_SIDE_FILL_COLOR = "#F0F0F0" # Fill for non-selected, back-facing cones (not currently used directly for fill)
53+
AYS_BACKFACE_FILL_COLOR = "#EAEAEA" # Fill for back-facing polygons (general)
54+
AYS_BACKFACE_STIPPLE = "gray50" # Stipple for back-facing polygons
55+
AYS_BUTTON_NORMAL_BG = "SystemButtonFace" # Tkinterのデフォルトボタン背景に依存
56+
AYS_LABEL_TEXT_COLOR = "black" # Text color for yaw labels on canvas
57+
AYS_COLOR_SECTOR_DESELECTED_FILL = "#E0E0E0" # Fill for non-selected, front-facing cones
58+
AYS_COLOR_SECTOR_DESELECTED_OUTLINE = "#C0C0C0" # Outline for non-selected, front-facing cones
59+
AYS_CANVAS_HELP_TEXT_COLOR = "gray40" # Color for the help text on canvas
60+
61+
62+
if __name__ == '__main__':
63+
# このファイルは主に定数定義なので、直接実行時の動作は通常不要
64+
print("Constants defined in constants.py:")
65+
print(f" APP_VERSION_STRING_SEMVER: {APP_VERSION_STRING_SEMVER} ({APP_RELEASE_DATE})")
66+
print(f" DEFAULT_PRESET (FFmpeg): {DEFAULT_PRESET}")
67+
print(f" HIGH_RESOLUTION_THRESHOLD: {HIGH_RESOLUTION_THRESHOLD}")
68+
print(f" GITHUB_API_URL_LATEST_RELEASE: {GITHUB_API_URL_LATEST_RELEASE}")
69+
print(f" AYS_DEFAULT_FOV_INTERNAL: {AYS_DEFAULT_FOV_INTERNAL}")
70+
print(f" AYS_DEFAULT_PITCHES_STR: {AYS_DEFAULT_PITCHES_STR}")
71+
print(f" AYS_MAX_PITCH_ENTRIES: {AYS_MAX_PITCH_ENTRIES}")
72+
print(f" Number of AYS_FOV_RING_COLORS_BASE: {len(AYS_FOV_RING_COLORS_BASE)}")

0 commit comments

Comments
 (0)