i18n(ja): panels and dialogs (300 rows; 27% → 39%)

The panel catalog behind the menu bar translated the dialogs and
Preferences, but much of the work area was still English: panel tabs, form
fields, panel context menus, the tracker and graph controls, text-panel
options, the File panel's footers and the credits. Add 300 rows to the
Japanese catalog — and the matching Simplified and Traditional Chinese
sources the tests keep it in step with (the other languages may lag, an
untranslated row falls back to English):

- panel tabs (dock.rs / dock_ui.rs titles), the Project panel's columns,
  footer tooltips and column menu;
- form and dialog labels and choice options (the forms the panels open —
  import, interpret footage, render queue, trackers, text animators…);
- panel context menus (timeline layer/property menus, graph editor);
- the tracker, graph editor, text-panel, animator and Content-Aware Fill
  labels;
- the Preview panel's transport tooltips, credits table headers and sort
  options, the composition-settings tabs and the About links;
- the engine's text-animator menu labels, added as a data source like the
  settings pages (they are interface text the panels draw).

Strings are wrapped where they are drawn with the existing `tr`/`tr_args`
mechanism (the label helpers already ask the catalog, so the data tables
need no new ids); the catalog tests keep the three complete languages
listing the same sources, reject duplicate or empty rows and keep the
placeholder counts. A new test assertion in
`japanese_rows_translate_the_panels` pins a sample of this step.

The panel catalogs are now 993 Japanese and 995 Chinese rows (the two
Chinese catalogs are the complete source list); with the 628-row menu
catalogs Japanese is 1,621 of ≈ 4,200 interface strings (39%, up from 27%).

Still English: effect parameter names (≈ 1,650 registry names, drawn from
the model, not the catalogs), Home-screen literals, tooltips drawn from
engine data, engine error messages, and the rows other languages lack.

Docs: localization-parity (header, per-language table, overall share,
revision history), ROADMAP (language table, progress log, revision history).
This commit is contained in:
midasdf
2026-10-22 04:04:24 +09:00
parent 9db7f3b217
commit ad8b6acb6d
10 changed files with 962 additions and 35 deletions
+14 -9
View File
@@ -2,7 +2,7 @@
**Stage: alpha** · next: beta, ~30 points of "ready for real work" and ~350–620 h away
> **Last reviewed:** 2026-10-12 · **Last updated:** 2026-10-12 · **Change:** minor (open-issue count, crash list and localization share re-audited against `upstream/main` 470ea7a3) · **Target:** Adobe After Effects 2026 (26.5.0.89)
> **Last reviewed:** 2026-10-12 · **Last updated:** 2026-10-22 · **Change:** minor (localization: 300 more panel/dialog rows in Japanese and the Chinese catalogs; Japanese 27% → 39%) · **Target:** Adobe After Effects 2026 (26.5.0.89)
EffectCraft aims to do what After Effects does, with the same panels, menus and behaviour, written
from scratch in Rust. This page is the one-page summary; the evidence is in
@@ -80,24 +80,24 @@ Weights and evidence per row: [target-app-parity.md](docs/target-app-parity.md#b
## Languages
UI strings translated out of ≈ 3,900 (detail: [localization-parity.md](docs/localization-parity.md)).
UI strings translated out of ≈ 4,200 (detail: [localization-parity.md](docs/localization-parity.md)).
| Language | Status | % |
|---|---|---:|
| English | full | 100% |
| Simplified Chinese | partial (menus, part of the panels) | 29% |
| Spanish | menus only | 16% |
| Simplified Chinese | partial (menus, most of the panels) | 39% |
| Spanish | menus only | 15% |
| Hindi | none | 0% |
| Arabic | none | 0% |
| French | menus only | 16% |
| Portuguese (Brazil) | partial (menus, part of the panels) | 26% |
| French | menus only | 15% |
| Portuguese (Brazil) | partial (menus, part of the panels) | 25% |
| Indonesian | none | 0% |
| Japanese | partial (menus, part of the panels) | 27% |
| German | menus only | 16% |
| Japanese | partial (menus, most of the panels) | 39% |
| German | menus only | 15% |
| Korean | none | 0% |
| Vietnamese | none | 0% |
Also shipped: Traditional Chinese (partial, 29%), Ukrainian (partial, 29%), Czech (partial, 29%) and Russian (menus only, 16%). No language has had
Also shipped: Traditional Chinese (partial, 39%), Ukrainian (partial, 27%), Czech (partial, 27%) and Russian (menus only, 15%). No language has had
native-speaker review.
## Upcoming
@@ -117,6 +117,10 @@ Come tell us what matters most to you on [Discord](https://discord.gg/artcraft).
## Progress log
- 2026-10-22: Localization: the panel/dialog catalogs gain 300 rows in Japanese, Simplified
Chinese and Traditional Chinese — panel tabs, form and dialog labels, panel context menus,
tracker/graph/text-panel controls, File-panel footers and credits. Japanese is 1,621 of
≈ 4,200 interface strings (39%), Simplified and Traditional Chinese 1,623 (39%).
- 2026-10-16: Convert To Bezier Path turns a shape layer's Rectangle, Ellipse or Polystar
path into an editable Path 1 with the same geometry, as After Effects does; it used to
apply to mask RotoBezier only, so a parametric shape path could not be converted at all
@@ -154,6 +158,7 @@ Come tell us what matters most to you on [Discord](https://discord.gg/artcraft).
| Date | Change | Summary |
|---|---|---|
| 2026-10-22 | minor | Localization: 300 more panel/dialog rows in Japanese and the Chinese catalogs (panel tabs, form and dialog labels, context menus, tracker/graph/text-panel controls, File-panel footers, credits); language shares recounted (Japanese 27% → 39%, Chinese 29% → 39%, overall 18% → 27%) |
| 2026-10-12 | minor | Open-issue count (134 to 216), crash list and localization share (12% to 18%) updated to match docs/gaps.md |
| 2026-10-12 | patch | Roto Brush span validation after trimming; command regressions for both layer edges |
| 2026-10-10 | minor | Hours to ≈ 95% for each audience |
+4 -4
View File
@@ -246,7 +246,7 @@ pub fn contributors_ui(ui: &mut egui::Ui, auto: &mut Registry) {
ui.horizontal_wrapped(|ui| {
ui.label(tr("Show"));
for m in NameMode::ALL {
let r = ui.selectable_label(v.names == m, m.label());
let r = ui.selectable_label(v.names == m, tr(m.label()));
auto.add(&format!("about.credits.show.{}", m.id()), r.rect, m.label());
if r.clicked() {
v.names = m;
@@ -254,9 +254,9 @@ pub fn contributors_ui(ui: &mut egui::Ui, auto: &mut Registry) {
}
ui.separator();
ui.label(tr("Sort"));
let combo = egui::ComboBox::from_id_salt("credits_sort").selected_text(v.key.label().0).show_ui(ui, |ui| {
let combo = egui::ComboBox::from_id_salt("credits_sort").selected_text(tr(v.key.label().0)).show_ui(ui, |ui| {
for k in SortKey::ALL {
let r = ui.selectable_label(v.key == k, k.label().0);
let r = ui.selectable_label(v.key == k, tr(k.label().0));
auto.add(&format!("about.credits.sort.{}", k.id()), r.rect, k.label().0);
if r.clicked() {
v.key = k;
@@ -309,7 +309,7 @@ fn table(ui: &mut egui::Ui, list: &[&Contributor], v: &mut View, auto: &mut Regi
egui::Grid::new("credits_table").striped(true).num_columns(SortKey::ALL.len()).show(ui, |ui| {
for k in SortKey::ALL {
let arrow = if v.key == k { if v.ascending { " ▲" } else { " ▼" } } else { "" };
let r = ui.button(RichText::new(format!("{}{arrow}", k.label().1)).strong()).on_hover_text(k.label().0);
let r = ui.button(RichText::new(format!("{}{arrow}", k.label().1)).strong()).on_hover_text(tr(k.label().0));
auto.add(&format!("about.credits.header.{}", k.id()), r.rect, k.label().0);
if r.clicked() {
if v.key == k {
+2 -2
View File
@@ -206,7 +206,7 @@ impl EffectcraftApp {
let titles = self.tab_titles();
let decos = self.tab_decos();
let docs = self.tab_docs();
let title = |p: PanelKind| titles.iter().find(|(k, _)| *k == p).map(|(_, s)| s.clone()).unwrap_or_else(|| p.title().to_string());
let title = |p: PanelKind| titles.iter().find(|(k, _)| *k == p).map(|(_, s)| s.clone()).unwrap_or_else(|| crate::i18n::tr(p.title()).to_string());
let info = dock::TabInfo { title: &title, decos: &decos, docs: &docs };
// Where each group's tabs are (tab drags show where a tab will land between them).
let mut tab_rects: Vec<(String, Vec<(PanelKind, Rect)>)> = vec![];
@@ -570,7 +570,7 @@ impl EffectcraftApp {
}
}
// Ghost of the dragged tab.
let g = painter.layout_no_wrap(p.title().to_string(), crate::theme::Tokens::ui(12.0), Color32::WHITE);
let g = painter.layout_no_wrap(crate::i18n::tr(p.title()).to_string(), crate::theme::Tokens::ui(12.0), Color32::WHITE);
let gr = Rect::from_min_size(pos + vec2(12.0, 10.0), g.size() + vec2(16.0, 8.0));
painter.rect_filled(gr, 4.0, t.focus.gamma_multiply(0.85));
painter.galley(gr.min + vec2(8.0, 4.0), g, Color32::WHITE);
+913
View File
@@ -825,6 +825,309 @@ const JAPANESE: &[(&str, &str)] = &[
("Total Offset", "合計オフセット"),
("Per Layer", "レイヤーごと"),
("Track", "トラック"),
("Force alphabetical order", "アルファベット順を強制"),
("Frame rate (fps)", "フレームレート (fps)"),
("Import Kind", "読み込みの種類"),
("Delay (s)", "遅延 (秒)"),
("Amount (%)", "量 (%)"),
("Cascade (farther pins trail longer)", "カスケード (離れたピンほど長く遅れる)"),
("Speed (%)", "速度 (%)"),
("Use Draft Deformation", "下書き変形を使用"),
("Show Mesh", "メッシュを表示"),
("Scale X (%)", "X 方向の拡大率 (%)"),
("Scale Y (%)", "Y 方向の拡大率 (%)"),
("Rotation (degrees)", "回転 (度)"),
("Move X", "X 移動"),
("Move Y", "Y 移動"),
("Position (pixels)", "位置 (ピクセル)"),
("Position (percent of the composition)", "位置 (コンポジションに対する割合)"),
("Use Dimensions From", "使用するサイズの基準"),
("Still Duration (seconds)", "静止画のデュレーション (秒)"),
("Add to Render Queue", "レンダーキューに追加"),
("Sequence Layers", "レイヤーをシーケンス化"),
("Duration (seconds)", "デュレーション (秒)"),
("Matte color (premultiplied)", "マットの色 (プリマルチプライ)"),
("Invert Alpha", "アルファを反転"),
("Assume this frame rate", "このフレームレートとみなす"),
("Separate Fields", "フィールドを分離"),
("Pixel Aspect Ratio", "ピクセル縦横比"),
("Loop (times)", "ループ (回)"),
("Assign Profile", "プロファイルを割り当て"),
("Preserve RGB", "RGB を保持"),
("Interpret As Linear Light", "リニア光として解釈"),
("Start Timecode", "開始タイムコード"),
("Override Start", "開始値を上書き"),
("Time display style", "タイムコード表示"),
("Color engine", "カラーエンジン"),
("Working space", "作業用スペース"),
("Working gamma", "作業用ガンマ"),
("Linearize working space", "作業用スペースをリニア化"),
("Blend colors using 1.0 gamma", "1.0 ガンマで色を混合"),
("Output color space", "出力カラースペース"),
("Video rendering and effects", "ビデオのレンダリングとエフェクト"),
("Time Span", "時間範囲"),
("Blur (pixels before auto-trace)", "ブラー (自動トレース前のピクセル)"),
("Tolerance (pixels)", "許容値 (ピクセル)"),
("Threshold (%)", "しきい値 (%)"),
("Minimum Area (pixels)", "最小領域 (ピクセル)"),
("Corner Roundness (%)", "角の丸み (%)"),
("Apply To New Layer", "新しいレイヤーに適用"),
("Sensitivity threshold (0–1, lower finds more)", "感度のしきい値 (0~1、低いほど多く検出)"),
("Time field (empty: automatic)", "時間フィールド (空欄: 自動)"),
("Video start (ISO date-time, hh:mm:ss, timecode; empty: file date)", "ビデオ開始 (ISO 日時、hh:mm:ss、タイムコード、空欄: ファイルの日付)"),
("First sample at (comp seconds)", "最初のサンプル位置 (コンポジション秒)"),
("Frame rate", "フレームレート"),
("Color (#rrggbb)", "カラー (#rrggbb)"),
("Embed footage files", "フッテージを埋め込む"),
("Embed up to (MB)", "埋め込み上限 (MB)"),
("Orient Along Path", "パスに沿って向きを設定"),
("Orient Towards Camera", "カメラの方向に向ける"),
("Orient Towards Point of Interest", "対象点の方向に向ける"),
("Single Composition", "単一コンポジション"),
("Multiple Compositions", "複数のコンポジション"),
("Dissolve Front Layer", "前面のレイヤーをディゾルブ"),
("Cross Dissolve Front and Back Layers", "前後のレイヤーをクロスディゾルブ"),
("Interpret Straight - Unmatted", "ストレート (マットなし) として解釈"),
("Interpret Premultiplied - Matted With Color", "プリマルチプライ (色でマット) として解釈"),
("Upper Field First", "偶数フィールド優先"),
("Lower Field First", "奇数フィールド優先"),
("Rec. 2020", "Rec. 2020"),
("Use Source File Timecode", "ソースファイルのタイムコードを使用"),
("Feet + Frames (35mm)", "フィート + フレーム (35mm)"),
("Feet + Frames (16mm)", "フィート + フレーム (16mm)"),
("Current Frame", "現在のフレーム"),
("Work Area", "作業領域"),
("Create Markers", "マーカーを作成"),
("Split Layers", "レイヤーを分割"),
("Split and Precompose", "分割してプリコンポーズ"),
("All layers", "すべてのレイヤー"),
("None (leave them out)", "なし (除外)"),
("Nested sequences", "ネストしたシーケンス"),
("Solid…", "平面…"),
("Light…", "ライト…"),
("Camera…", "カメラ…"),
("Null Object", "ヌルオブジェクト"),
("Shape Layer", "シェイプレイヤー"),
("Adjustment Layer", "調整レイヤー"),
("Layer Settings…", "レイヤー設定…"),
("Create Shapes from Vector Layer", "ベクターレイヤーからシェイプを作成"),
("Create Shapes from Text", "テキストからシェイプを作成"),
("Create Masks from Text", "テキストからマスクを作成"),
("New Mask", "新しいマスク"),
("Center In View", "ビュー内で中央揃え"),
("Fit to Comp", "コンポジションに合わせる"),
("Flip Horizontal", "水平方向に反転"),
("Flip Vertical", "垂直方向に反転"),
("Enable Time Remapping", "時間リマップを有効化"),
("Time-Reverse Layer", "レイヤーを時間反転"),
("Freeze Frame", "フレームを固定"),
("Freeze On Last Frame", "最後のフレームで固定"),
("Add Marker", "マーカーを追加"),
("Bring Layer to Front", "レイヤーを最前面へ"),
("Bring Layer Forward", "レイヤーを前面へ"),
("Send Layer Backward", "レイヤーを背面へ"),
("Send Layer to Back", "レイヤーを最背面へ"),
("Pre-compose…", "プリコンポーズ…"),
("Split Layer", "レイヤーを分割"),
("Layer Style Options...", "レイヤースタイルのオプション..."),
("Convert to Editable Styles", "編集可能なスタイルに変換"),
("Show All", "すべて表示"),
("Remove All", "すべて削除"),
("Separate Dimensions", "次元を分離"),
("Add Property to Essential Graphics", "エッセンシャルグラフィックスにプロパティを追加"),
("Continuous Bezier", "連続ベジェ"),
("Auto Bezier", "自動ベジェ"),
("Lock To Time", "時間に固定"),
("Rove Across Time", "時間をまたいで移動"),
("Anchor Point", "アンカーポイント"),
("All Transform Properties", "すべてのトランスフォームプロパティ"),
("Line Anchor", "行のアンカー"),
("Line Spacing", "行間"),
("Character Offset", "文字オフセット"),
("Character Value", "文字値"),
("Fill Color: RGB", "塗りの色: RGB"),
("Fill Color: Hue", "塗りの色: 色相"),
("Fill Color: Saturation", "塗りの色: 彩度"),
("Fill Color: Brightness", "塗りの色: 明るさ"),
("Fill Color: Opacity", "塗りの色: 不透明度"),
("Stroke Color: RGB", "線の色: RGB"),
("Stroke Color: Hue", "線の色: 色相"),
("Stroke Color: Saturation", "線の色: 彩度"),
("Stroke Color: Brightness", "線の色: 明るさ"),
("Stroke Color: Opacity", "線の色: 不透明度"),
("Stroke Width", "線幅"),
("Front: Color", "前面: 色"),
("Bevel: Color", "ベベル: 色"),
("Side: Color", "側面: 色"),
("Back: Color", "背面: 色"),
("Effect Controls", "エフェクトコントロール"),
("Effects & Presets", "エフェクト&プリセット"),
("Motion Sketch", "モーションスケッチ"),
("Render Queue", "レンダーキュー"),
("Mask Interpolation", "マスク補間"),
("Script Console", "スクリプトコンソール"),
("Essential Graphics", "エッセンシャルグラフィックス"),
("ScriptUI Panel", "ScriptUI パネル"),
("Lumetri Scopes", "Lumetri スコープ"),
("Media Browser", "メディアブラウザー"),
("Content-Aware Fill", "コンテンツに応じた塗り"),
("Create Nulls From Paths", "パスからヌルを作成"),
("VR Comp Editor", "VR コンポジションエディター"),
("Media Duration", "メディアの長さ"),
("Frame Rate", "フレームレート"),
("File Path", "ファイルパス"),
("Interpret Footage", "フッテージの解釈"),
("Create a new Folder", "新しいフォルダーを作成"),
("Create a new Composition", "新しいコンポジションを作成"),
("First Frame", "最初のフレーム"),
("Previous Frame", "前のフレーム"),
("Next Frame", "次のフレーム"),
("Last Frame", "最後のフレーム"),
("Name (A–Z)", "名前 (A–Z)"),
("Merged PRs", "マージ済み PR"),
("Lines added", "追加行数"),
("Lines deleted", "削除行数"),
("Line delta", "行数の差分"),
("Binary assets added", "追加バイナリ"),
("Binary assets removed", "削除バイナリ"),
("First commit", "最初のコミット"),
("Last commit", "最後のコミット"),
("Display name", "表示名"),
("Real name", "本名"),
("ArtCraft website", "ArtCraft のウェブサイト"),
("Source code on GitHub", "GitHub のソースコード"),
("3D Renderer", "3D レンダラー"),
("Preset Name", "プリセット名"),
("Save Preset…", "プリセットを保存…"),
("Delete Preset", "プリセットを削除"),
("Lock Aspect Ratio", "縦横比を固定"),
("Frame Rate presets", "フレームレートのプリセット"),
("Background Color", "背景色"),
("Shutter Angle", "シャッター角度"),
("Shutter Phase", "シャッター位相"),
("Samples Per Frame", "フレームあたりのサンプル数"),
("Adaptive Sample Limit", "適応サンプル数の上限"),
("X and Y", "X と Y"),
("X only", "X のみ"),
("Y only", "Y のみ"),
("Track Camera", "カメラをトラッキング"),
("Warp Stabilizer", "ワープスタビライザー"),
("Track Motion", "モーションをトラッキング"),
("Stabilize Motion", "モーションを安定化"),
("Motion Source:", "モーションソース:"),
("Current Track:", "現在のトラック:"),
("Track Type:", "トラックの種類:"),
("Motion Target:", "モーションの適用先:"),
("Track Mask:", "トラックマスク:"),
("Analyze forward", "前方を解析"),
("Analyze backward", "後方を解析"),
("Continue Tracking", "トラッキングを続行"),
("Stop Tracking", "トラッキングを停止"),
("Adapt Feature", "特徴を適応"),
("Extrapolate Motion", "モーションを外挿"),
("Attach Point", "アタッチポイント"),
("Track Name", "トラック名"),
("Motion Tracker Options", "モーショントラッカーのオプション"),
("Motion Tracker Apply Options", "モーショントラッカーの適用オプション"),
("Edit Value Graph", "値グラフを編集"),
("Edit Speed Graph", "速度グラフを編集"),
("Show Reference Graph", "参照グラフを表示"),
(
"Auto-Select Graph Type (speed graph for spatial properties, else value graph)",
"グラフの種類を自動選択 (空間プロパティは速度グラフ、それ以外は値グラフ)",
),
("Auto-zoom graph height", "グラフの高さを自動ズーム"),
("Fit all graphs to view", "すべてのグラフをビューに合わせる"),
("Fit selection to view", "選択項目をビューに合わせる"),
("Snap (key drags snap to the current time and other keys)", "スナップ (キーのドラッグを現在の時間や他のキーに合わせる)"),
("Show Transform Box when multiple keys are selected", "複数のキーを選択したときにトランスフォームボックスを表示"),
("Separate Dimensions (Position)", "次元を分離 (位置)"),
("Convert selected keyframes to Hold", "選択したキーフレームをホールドに変換"),
("Convert selected keyframes to Linear", "選択したキーフレームをリニアに変換"),
("Convert selected keyframes to Auto Bezier", "選択したキーフレームを自動ベジェに変換"),
("Easy Ease (F9)", "イージーイーズ (F9)"),
("Easy Ease In (Shift+F9)", "イージーイーズイン (Shift+F9)"),
("Easy Ease Out (Ctrl+Shift+F9)", "イージーイーズアウト (Ctrl+Shift+F9)"),
("Spatial Path", "空間パス"),
("Temporal Path", "時間パス"),
("All the Same", "すべて同じ"),
("All Independently", "すべて個別"),
("Noise Type:", "ノイズの種類:"),
("Apply To:", "適用先:"),
("Temporal Graph", "時間グラフ"),
("Keyframe Rate:", "キーフレームレート:"),
("Capture speed at:", "速度の記録位置:"),
("Start Capture", "記録を開始"),
("Cancel Capture", "記録をキャンセル"),
("Small Caps", "スモールキャップ"),
("All Small Caps", "すべてスモールキャップ"),
("Superscript / Superior", "上付き文字"),
("Subscript / Inferior", "下付き文字"),
("Standard Ligatures", "標準合字"),
("Discretionary Ligatures", "任意合字"),
("Contextual Alternates", "状況依存の代替字形"),
("Stylistic Alternates", "スタイル代替字形"),
("Titling Alternates", "タイトル用代替字形"),
("Default Figure Style", "既定の数字スタイル"),
("Tabular Lining", "等幅ライニング"),
("Proportional Oldstyle", "プロポーショナルオールドスタイル"),
("Proportional Lining", "プロポーショナルライニング"),
("Tabular Oldstyle", "等幅オールドスタイル"),
("Fill Over Stroke", "線の上に塗り"),
("Stroke Over Fill", "塗りの上に線"),
("Stroke order", "線の順序"),
("Single-line Composer", "単一行コンポーザー"),
("Every-line Composer", "全行コンポーザー"),
("Text direction", "テキストの方向"),
("Recently Used", "最近使用した項目"),
("User Presets", "ユーザープリセット"),
("Remove from Favorites", "お気に入りから削除"),
("Show Animation Presets", "アニメーションプリセットを表示"),
(" Refresh List", " リストを更新"),
(" Clear Recently Used", " 最近使用した項目を消去"),
("Show 32 bpc Effects Only", "32 bpc のエフェクトのみ表示"),
("Show GPU Accelerated Effects Only", "GPU アクセラレーションのエフェクトのみ表示"),
("Show Effects for All Color Depths", "すべての色深度のエフェクトを表示"),
("* Animation Presets", "* アニメーションプリセット"),
("Select a layer to apply to", "適用するレイヤーを選択してください"),
("Search effects and presets", "エフェクトとプリセットを検索"),
("Alpha Expansion:", "アルファの拡張:"),
("Fill Method:", "塗りの方法:"),
("Edge Blend", "エッジのブレンド"),
("Entire Duration", "全体のデュレーション"),
("Reference Frame:", "参照フレーム:"),
("Use Current Time", "現在の時間を使用"),
("Generate Fill Layer", "塗りレイヤーを生成"),
("Lighting Correction:", "ライティングの補正:"),
("Create Text and Camera", "テキストとカメラを作成"),
("Create Solid and Camera", "平面とカメラを作成"),
("Create Null and Camera", "ヌルとカメラを作成"),
("Create Shadow Catcher, Camera and Light", "シャドウキャッチャー、カメラ、ライトを作成"),
("Unable to solve camera", "カメラを解析できません"),
("Waiting to solve", "解析待ち"),
("Create Camera", "カメラを作成"),
("track point", "トラックポイント"),
("Ruler zero point", "ルーラーの原点"),
("Vertical ruler", "垂直ルーラー"),
("Horizontal ruler", "水平ルーラー"),
("Viewer controls", "ビューアーのコントロール"),
("Resolution/Down Sample Factor", "解像度/ダウンサンプル係数"),
("Adjust Exposure", "露出を調整"),
("Snapshot taken", "スナップショットを撮影しました"),
("Fast Previews", "高速プレビュー"),
("3D View", "3D ビュー"),
("Current time", "現在の時間"),
("Layer Transform", "レイヤーのトランスフォーム"),
("Reset Transform", "トランスフォームをリセット"),
("Text Animation", "テキストアニメーション"),
("Text Animation Presets", "テキストアニメーションのプリセット"),
("EffectCraft on getartcraft.com", "getartcraft.com の EffectCraft"),
("Small Screen", "小さい画面"),
("Tool Creates Shape", "ツールでシェイプを作成"),
("Tool Creates Mask", "ツールでマスクを作成"),
("Blend Mode", "描画モード"),
("Show mesh", "メッシュを表示"),
("Record Options...", "記録オプション..."),
];
const SIMPLIFIED_CHINESE: &[(&str, &str)] = &[
@@ -1565,6 +1868,306 @@ const SIMPLIFIED_CHINESE: &[(&str, &str)] = &[
("Total Offset", "总偏移"),
("Per Layer", "每个图层"),
("Track", "跟踪"),
("Force alphabetical order", "强制按字母顺序"),
("Frame rate (fps)", "帧速率 (fps)"),
("Import Kind", "导入类型"),
("Delay (s)", "延迟 (秒)"),
("Amount (%)", "数量 (%)"),
("Cascade (farther pins trail longer)", "级联 (越远的图钉滞后越长)"),
("Speed (%)", "速度 (%)"),
("Use Draft Deformation", "使用草稿变形"),
("Show Mesh", "显示网格"),
("Scale X (%)", "X 缩放 (%)"),
("Scale Y (%)", "Y 缩放 (%)"),
("Rotation (degrees)", "旋转 (度)"),
("Move X", "移动 X"),
("Move Y", "移动 Y"),
("Position (pixels)", "位置 (像素)"),
("Position (percent of the composition)", "位置 (合成百分比)"),
("Use Dimensions From", "尺寸来源"),
("Still Duration (seconds)", "静止图像持续时间 (秒)"),
("Add to Render Queue", "添加到渲染队列"),
("Sequence Layers", "序列图层"),
("Duration (seconds)", "持续时间 (秒)"),
("Matte color (premultiplied)", "遮罩颜色 (预乘)"),
("Invert Alpha", "反转 Alpha"),
("Assume this frame rate", "按此帧速率处理"),
("Separate Fields", "分离场"),
("Pixel Aspect Ratio", "像素长宽比"),
("Loop (times)", "循环 (次)"),
("Assign Profile", "指定配置文件"),
("Preserve RGB", "保留 RGB"),
("Interpret As Linear Light", "解释为线性光"),
("Start Timecode", "开始时间码"),
("Override Start", "覆盖开始"),
("Time display style", "时间显示样式"),
("Color engine", "颜色引擎"),
("Working space", "工作空间"),
("Working gamma", "工作伽马"),
("Linearize working space", "线性化工作空间"),
("Blend colors using 1.0 gamma", "使用 1.0 伽马混合颜色"),
("Output color space", "输出颜色空间"),
("Video rendering and effects", "视频渲染与效果"),
("Time Span", "时间范围"),
("Blur (pixels before auto-trace)", "模糊 (自动描摹前的像素)"),
("Tolerance (pixels)", "容差 (像素)"),
("Threshold (%)", "阈值 (%)"),
("Minimum Area (pixels)", "最小区域 (像素)"),
("Corner Roundness (%)", "角圆度 (%)"),
("Apply To New Layer", "应用到新图层"),
("Sensitivity threshold (0–1, lower finds more)", "灵敏度阈值 (0–1,越低找到的越多)"),
("Time field (empty: automatic)", "时间字段 (为空: 自动)"),
("Video start (ISO date-time, hh:mm:ss, timecode; empty: file date)", "视频开始 (ISO 日期时间、hh:mm:ss、时间码;为空: 文件日期)"),
("First sample at (comp seconds)", "首个采样位置 (合成秒)"),
("Frame rate", "帧速率"),
("Color (#rrggbb)", "颜色 (#rrggbb)"),
("Embed footage files", "嵌入素材文件"),
("Embed up to (MB)", "嵌入上限 (MB)"),
("Orient Along Path", "沿路径定向"),
("Orient Towards Camera", "朝向摄像机"),
("Orient Towards Point of Interest", "朝向目标点"),
("Single Composition", "单个合成"),
("Multiple Compositions", "多个合成"),
("Dissolve Front Layer", "溶解前层"),
("Cross Dissolve Front and Back Layers", "交叉溶解前后层"),
("Interpret Straight - Unmatted", "解释为直接 (未遮罩)"),
("Interpret Premultiplied - Matted With Color", "解释为预乘 (以颜色遮罩)"),
("Upper Field First", "上场优先"),
("Lower Field First", "下场优先"),
("Rec. 2020", "Rec. 2020"),
("Use Source File Timecode", "使用源文件时间码"),
("Feet + Frames (35mm)", "英尺 + 帧 (35mm)"),
("Feet + Frames (16mm)", "英尺 + 帧 (16mm)"),
("Current Frame", "当前帧"),
("Work Area", "工作区域"),
("Create Markers", "创建标记"),
("Split Layers", "拆分图层"),
("Split and Precompose", "拆分并预合成"),
("All layers", "所有图层"),
("None (leave them out)", "无 (不含)"),
("Nested sequences", "嵌套序列"),
("Solid…", "纯色…"),
("Light…", "灯光…"),
("Camera…", "摄像机…"),
("Null Object", "空对象"),
("Shape Layer", "形状图层"),
("Adjustment Layer", "调整图层"),
("Layer Settings…", "图层设置…"),
("Create Shapes from Vector Layer", "从矢量图层创建形状"),
("Create Shapes from Text", "从文本创建形状"),
("Create Masks from Text", "从文本创建遮罩"),
("New Mask", "新建遮罩"),
("Center In View", "在视图中居中"),
("Fit to Comp", "适应合成"),
("Flip Horizontal", "水平翻转"),
("Flip Vertical", "垂直翻转"),
("Enable Time Remapping", "启用时间重映射"),
("Time-Reverse Layer", "时间反向图层"),
("Freeze Frame", "冻结帧"),
("Freeze On Last Frame", "在最后一帧冻结"),
("Add Marker", "添加标记"),
("Bring Layer to Front", "图层置顶"),
("Bring Layer Forward", "图层上移一层"),
("Send Layer Backward", "图层下移一层"),
("Send Layer to Back", "图层置底"),
("Pre-compose…", "预合成…"),
("Split Layer", "拆分图层"),
("Layer Style Options...", "图层样式选项..."),
("Convert to Editable Styles", "转换为可编辑样式"),
("Show All", "全部显示"),
("Remove All", "全部移除"),
("Separate Dimensions", "分离维度"),
("Add Property to Essential Graphics", "将属性添加到基本图形"),
("Continuous Bezier", "连续贝塞尔"),
("Auto Bezier", "自动贝塞尔"),
("Lock To Time", "锁定到时间"),
("Rove Across Time", "跨时间漫游"),
("Anchor Point", "锚点"),
("All Transform Properties", "所有变换属性"),
("Line Anchor", "行锚点"),
("Line Spacing", "行距"),
("Character Offset", "字符偏移"),
("Character Value", "字符值"),
("Fill Color: RGB", "填充颜色: RGB"),
("Fill Color: Hue", "填充颜色: 色相"),
("Fill Color: Saturation", "填充颜色: 饱和度"),
("Fill Color: Brightness", "填充颜色: 亮度"),
("Fill Color: Opacity", "填充颜色: 不透明度"),
("Stroke Color: RGB", "描边颜色: RGB"),
("Stroke Color: Hue", "描边颜色: 色相"),
("Stroke Color: Saturation", "描边颜色: 饱和度"),
("Stroke Color: Brightness", "描边颜色: 亮度"),
("Stroke Color: Opacity", "描边颜色: 不透明度"),
("Stroke Width", "描边宽度"),
("Front: Color", "前面: 颜色"),
("Bevel: Color", "斜面: 颜色"),
("Side: Color", "侧面: 颜色"),
("Back: Color", "背面: 颜色"),
("Effect Controls", "效果控件"),
("Effects & Presets", "效果和预设"),
("Motion Sketch", "运动草图"),
("Render Queue", "渲染队列"),
("Mask Interpolation", "遮罩插值"),
("Script Console", "脚本控制台"),
("Essential Graphics", "基本图形"),
("ScriptUI Panel", "ScriptUI 面板"),
("Lumetri Scopes", "Lumetri 示波器"),
("Media Browser", "媒体浏览器"),
("Content-Aware Fill", "内容识别填充"),
("Create Nulls From Paths", "从路径创建空对象"),
("VR Comp Editor", "VR 合成编辑器"),
("Media Duration", "媒体持续时间"),
("Frame Rate", "帧速率"),
("File Path", "文件路径"),
("Interpret Footage", "解释素材"),
("Create a new Folder", "新建文件夹"),
("Create a new Composition", "新建合成"),
("First Frame", "第一帧"),
("Previous Frame", "上一帧"),
("Next Frame", "下一帧"),
("Last Frame", "最后一帧"),
("Name (A–Z)", "名称 (A–Z)"),
("Merged PRs", "已合并 PR"),
("Lines added", "添加的行数"),
("Lines deleted", "删除的行数"),
("Line delta", "行数差异"),
("Binary assets added", "添加的二进制资源"),
("Binary assets removed", "删除的二进制资源"),
("First commit", "首次提交"),
("Last commit", "最近提交"),
("Display name", "显示名称"),
("Real name", "真实姓名"),
("ArtCraft website", "ArtCraft 网站"),
("Source code on GitHub", "GitHub 上的源代码"),
("3D Renderer", "3D 渲染器"),
("Preset Name", "预设名称"),
("Save Preset…", "保存预设…"),
("Delete Preset", "删除预设"),
("Lock Aspect Ratio", "锁定长宽比"),
("Frame Rate presets", "帧速率预设"),
("Background Color", "背景颜色"),
("Shutter Angle", "快门角度"),
("Shutter Phase", "快门相位"),
("Samples Per Frame", "每帧采样数"),
("Adaptive Sample Limit", "自适应采样上限"),
("X and Y", "X 和 Y"),
("X only", "仅 X"),
("Y only", "仅 Y"),
("Track Camera", "跟踪摄像机"),
("Warp Stabilizer", "变形稳定器"),
("Track Motion", "跟踪运动"),
("Stabilize Motion", "稳定运动"),
("Motion Source:", "运动源:"),
("Current Track:", "当前跟踪:"),
("Track Type:", "跟踪类型:"),
("Motion Target:", "运动目标:"),
("Track Mask:", "跟踪遮罩:"),
("Analyze forward", "向前分析"),
("Analyze backward", "向后分析"),
("Continue Tracking", "继续跟踪"),
("Stop Tracking", "停止跟踪"),
("Adapt Feature", "自适应特征"),
("Extrapolate Motion", "外推运动"),
("Attach Point", "附加点"),
("Track Name", "跟踪名称"),
("Motion Tracker Options", "运动跟踪器选项"),
("Motion Tracker Apply Options", "运动跟踪器应用选项"),
("Edit Value Graph", "编辑值图表"),
("Edit Speed Graph", "编辑速度图表"),
("Show Reference Graph", "显示参考图表"),
("Auto-Select Graph Type (speed graph for spatial properties, else value graph)", "自动选择图表类型 (空间属性用速度图表,否则用值图表)"),
("Auto-zoom graph height", "自动缩放图表高度"),
("Fit all graphs to view", "使所有图表适合视图"),
("Fit selection to view", "使所选内容适合视图"),
("Snap (key drags snap to the current time and other keys)", "吸附 (关键帧拖动时吸附到当前时间和其他关键帧)"),
("Show Transform Box when multiple keys are selected", "选择多个关键帧时显示变换框"),
("Separate Dimensions (Position)", "分离维度 (位置)"),
("Convert selected keyframes to Hold", "将所选关键帧转换为定格"),
("Convert selected keyframes to Linear", "将所选关键帧转换为线性"),
("Convert selected keyframes to Auto Bezier", "将所选关键帧转换为自动贝塞尔"),
("Easy Ease (F9)", "缓动 (F9)"),
("Easy Ease In (Shift+F9)", "缓入 (Shift+F9)"),
("Easy Ease Out (Ctrl+Shift+F9)", "缓出 (Ctrl+Shift+F9)"),
("Spatial Path", "空间路径"),
("Temporal Path", "时间路径"),
("All the Same", "全部相同"),
("All Independently", "全部独立"),
("Noise Type:", "噪波类型:"),
("Apply To:", "应用到:"),
("Temporal Graph", "时间图表"),
("Keyframe Rate:", "关键帧速率:"),
("Capture speed at:", "速度捕获位置:"),
("Start Capture", "开始捕获"),
("Cancel Capture", "取消捕获"),
("Small Caps", "小型大写字母"),
("All Small Caps", "全部小型大写字母"),
("Superscript / Superior", "上标"),
("Subscript / Inferior", "下标"),
("Standard Ligatures", "标准连字"),
("Discretionary Ligatures", "可选连字"),
("Contextual Alternates", "上下文替换"),
("Stylistic Alternates", "样式替换"),
("Titling Alternates", "标题替换"),
("Default Figure Style", "默认数字样式"),
("Tabular Lining", "等宽线条"),
("Proportional Oldstyle", "比例旧式"),
("Proportional Lining", "比例线条"),
("Tabular Oldstyle", "等宽旧式"),
("Fill Over Stroke", "填充在描边之上"),
("Stroke Over Fill", "描边在填充之上"),
("Stroke order", "描边顺序"),
("Single-line Composer", "单行书写器"),
("Every-line Composer", "逐行书写器"),
("Text direction", "文本方向"),
("Recently Used", "最近使用"),
("User Presets", "用户预设"),
("Remove from Favorites", "从收藏夹移除"),
("Show Animation Presets", "显示动画预设"),
(" Refresh List", " 刷新列表"),
(" Clear Recently Used", " 清除最近使用"),
("Show 32 bpc Effects Only", "仅显示 32 bpc 效果"),
("Show GPU Accelerated Effects Only", "仅显示 GPU 加速效果"),
("Show Effects for All Color Depths", "显示所有颜色深度的效果"),
("* Animation Presets", "* 动画预设"),
("Select a layer to apply to", "请选择要应用到的图层"),
("Search effects and presets", "搜索效果和预设"),
("Alpha Expansion:", "Alpha 扩展:"),
("Fill Method:", "填充方式:"),
("Edge Blend", "边缘混合"),
("Entire Duration", "整个持续时间"),
("Reference Frame:", "参考帧:"),
("Use Current Time", "使用当前时间"),
("Generate Fill Layer", "生成填充图层"),
("Lighting Correction:", "光照校正:"),
("Create Text and Camera", "创建文本和摄像机"),
("Create Solid and Camera", "创建纯色和摄像机"),
("Create Null and Camera", "创建空对象和摄像机"),
("Create Shadow Catcher, Camera and Light", "创建阴影捕捉器、摄像机和灯光"),
("Unable to solve camera", "无法求解摄像机"),
("Waiting to solve", "等待求解"),
("Create Camera", "创建摄像机"),
("track point", "跟踪点"),
("Ruler zero point", "标尺零点"),
("Vertical ruler", "垂直标尺"),
("Horizontal ruler", "水平标尺"),
("Viewer controls", "查看器控件"),
("Resolution/Down Sample Factor", "分辨率/降采样系数"),
("Adjust Exposure", "调整曝光"),
("Snapshot taken", "已拍摄快照"),
("Fast Previews", "快速预览"),
("3D View", "3D 视图"),
("Current time", "当前时间"),
("Layer Transform", "图层变换"),
("Reset Transform", "重置变换"),
("Text Animation", "文本动画"),
("Text Animation Presets", "文本动画预设"),
("EffectCraft on getartcraft.com", "getartcraft.com 上的 EffectCraft"),
("Small Screen", "小屏幕"),
("Tool Creates Shape", "工具创建形状"),
("Tool Creates Mask", "工具创建遮罩"),
("Blend Mode", "混合模式"),
("Show mesh", "显示网格"),
("Record Options...", "记录选项..."),
];
const TRADITIONAL_CHINESE: &[(&str, &str)] = &[
@@ -2300,6 +2903,306 @@ const TRADITIONAL_CHINESE: &[(&str, &str)] = &[
("Total Offset", "總偏移"),
("Per Layer", "每個圖層"),
("Track", "追蹤"),
("Force alphabetical order", "強制依字母順序"),
("Frame rate (fps)", "幀率 (fps)"),
("Import Kind", "匯入類型"),
("Delay (s)", "延遲 (秒)"),
("Amount (%)", "數量 (%)"),
("Cascade (farther pins trail longer)", "階層 (越遠的圖釘延遲越長)"),
("Speed (%)", "速度 (%)"),
("Use Draft Deformation", "使用草稿變形"),
("Show Mesh", "顯示網格"),
("Scale X (%)", "X 縮放 (%)"),
("Scale Y (%)", "Y 縮放 (%)"),
("Rotation (degrees)", "旋轉 (度)"),
("Move X", "移動 X"),
("Move Y", "移動 Y"),
("Position (pixels)", "位置 (像素)"),
("Position (percent of the composition)", "位置 (合成百分比)"),
("Use Dimensions From", "尺寸來源"),
("Still Duration (seconds)", "靜態影像持續時間 (秒)"),
("Add to Render Queue", "新增至轉譯佇列"),
("Sequence Layers", "序列圖層"),
("Duration (seconds)", "持續時間 (秒)"),
("Matte color (premultiplied)", "遮罩顏色 (預乘)"),
("Invert Alpha", "反轉 Alpha"),
("Assume this frame rate", "以此幀率為準"),
("Separate Fields", "分離場"),
("Pixel Aspect Ratio", "像素長寬比"),
("Loop (times)", "循環 (次)"),
("Assign Profile", "指定設定檔"),
("Preserve RGB", "保留 RGB"),
("Interpret As Linear Light", "解譯為線性光"),
("Start Timecode", "開始時間碼"),
("Override Start", "覆寫開始"),
("Time display style", "時間顯示樣式"),
("Color engine", "色彩引擎"),
("Working space", "工作空間"),
("Working gamma", "工作 Gamma"),
("Linearize working space", "線性化工作空間"),
("Blend colors using 1.0 gamma", "使用 1.0 Gamma 混合顏色"),
("Output color space", "輸出色彩空間"),
("Video rendering and effects", "視訊轉譯與效果"),
("Time Span", "時間範圍"),
("Blur (pixels before auto-trace)", "模糊 (自動描摹前的像素)"),
("Tolerance (pixels)", "容差 (像素)"),
("Threshold (%)", "閾值 (%)"),
("Minimum Area (pixels)", "最小區域 (像素)"),
("Corner Roundness (%)", "角圓度 (%)"),
("Apply To New Layer", "套用至新圖層"),
("Sensitivity threshold (0–1, lower finds more)", "靈敏度閾值 (0–1,越低找到的越多)"),
("Time field (empty: automatic)", "時間欄位 (空白: 自動)"),
("Video start (ISO date-time, hh:mm:ss, timecode; empty: file date)", "視訊開始 (ISO 日期時間、hh:mm:ss、時間碼;空白: 檔案日期)"),
("First sample at (comp seconds)", "首個取樣位置 (合成秒)"),
("Frame rate", "幀率"),
("Color (#rrggbb)", "顏色 (#rrggbb)"),
("Embed footage files", "內嵌素材檔案"),
("Embed up to (MB)", "內嵌上限 (MB)"),
("Orient Along Path", "沿路徑定向"),
("Orient Towards Camera", "朝向攝影機"),
("Orient Towards Point of Interest", "朝向目標點"),
("Single Composition", "單一合成"),
("Multiple Compositions", "多個合成"),
("Dissolve Front Layer", "溶解前層"),
("Cross Dissolve Front and Back Layers", "交叉溶解前後層"),
("Interpret Straight - Unmatted", "解譯為直接 (未遮罩)"),
("Interpret Premultiplied - Matted With Color", "解譯為預乘 (以顏色遮罩)"),
("Upper Field First", "上場優先"),
("Lower Field First", "下場優先"),
("Rec. 2020", "Rec. 2020"),
("Use Source File Timecode", "使用來源檔案時間碼"),
("Feet + Frames (35mm)", "英尺 + 幀 (35mm)"),
("Feet + Frames (16mm)", "英尺 + 幀 (16mm)"),
("Current Frame", "目前幀"),
("Work Area", "工作區域"),
("Create Markers", "建立標記"),
("Split Layers", "分割圖層"),
("Split and Precompose", "分割並預合成"),
("All layers", "所有圖層"),
("None (leave them out)", "無 (不含)"),
("Nested sequences", "巢狀序列"),
("Solid…", "純色…"),
("Light…", "燈光…"),
("Camera…", "攝影機…"),
("Null Object", "空物件"),
("Shape Layer", "形狀圖層"),
("Adjustment Layer", "調整圖層"),
("Layer Settings…", "圖層設定…"),
("Create Shapes from Vector Layer", "從向量圖層建立形狀"),
("Create Shapes from Text", "從文字建立形狀"),
("Create Masks from Text", "從文字建立遮罩"),
("New Mask", "新增遮罩"),
("Center In View", "在視圖中置中"),
("Fit to Comp", "符合合成"),
("Flip Horizontal", "水平翻轉"),
("Flip Vertical", "垂直翻轉"),
("Enable Time Remapping", "啟用時間重對應"),
("Time-Reverse Layer", "時間反轉圖層"),
("Freeze Frame", "凍結幀"),
("Freeze On Last Frame", "在最後一幀凍結"),
("Add Marker", "新增標記"),
("Bring Layer to Front", "圖層移至最上層"),
("Bring Layer Forward", "圖層上移一層"),
("Send Layer Backward", "圖層下移一層"),
("Send Layer to Back", "圖層移至最下層"),
("Pre-compose…", "預合成…"),
("Split Layer", "分割圖層"),
("Layer Style Options...", "圖層樣式選項..."),
("Convert to Editable Styles", "轉換為可編輯樣式"),
("Show All", "全部顯示"),
("Remove All", "全部移除"),
("Separate Dimensions", "分離維度"),
("Add Property to Essential Graphics", "將屬性新增至基本圖形"),
("Continuous Bezier", "連續貝茲"),
("Auto Bezier", "自動貝茲"),
("Lock To Time", "鎖定至時間"),
("Rove Across Time", "跨時間漫遊"),
("Anchor Point", "錨點"),
("All Transform Properties", "所有變換屬性"),
("Line Anchor", "行錨點"),
("Line Spacing", "行距"),
("Character Offset", "字元偏移"),
("Character Value", "字元值"),
("Fill Color: RGB", "填色: RGB"),
("Fill Color: Hue", "填色: 色相"),
("Fill Color: Saturation", "填色: 飽和度"),
("Fill Color: Brightness", "填色: 亮度"),
("Fill Color: Opacity", "填色: 不透明度"),
("Stroke Color: RGB", "筆畫顏色: RGB"),
("Stroke Color: Hue", "筆畫顏色: 色相"),
("Stroke Color: Saturation", "筆畫顏色: 飽和度"),
("Stroke Color: Brightness", "筆畫顏色: 亮度"),
("Stroke Color: Opacity", "筆畫顏色: 不透明度"),
("Stroke Width", "筆畫寬度"),
("Front: Color", "前面: 顏色"),
("Bevel: Color", "斜角: 顏色"),
("Side: Color", "側面: 顏色"),
("Back: Color", "背面: 顏色"),
("Effect Controls", "效果控制項"),
("Effects & Presets", "效果與預設集"),
("Motion Sketch", "運動草圖"),
("Render Queue", "轉譯佇列"),
("Mask Interpolation", "遮罩插補"),
("Script Console", "指令碼主控台"),
("Essential Graphics", "基本圖形"),
("ScriptUI Panel", "ScriptUI 面板"),
("Lumetri Scopes", "Lumetri 示波器"),
("Media Browser", "媒體瀏覽器"),
("Content-Aware Fill", "內容感知填色"),
("Create Nulls From Paths", "從路徑建立空物件"),
("VR Comp Editor", "VR 合成編輯器"),
("Media Duration", "媒體持續時間"),
("Frame Rate", "幀率"),
("File Path", "檔案路徑"),
("Interpret Footage", "解譯素材"),
("Create a new Folder", "新增資料夾"),
("Create a new Composition", "新增合成"),
("First Frame", "第一幀"),
("Previous Frame", "上一幀"),
("Next Frame", "下一幀"),
("Last Frame", "最後一幀"),
("Name (A–Z)", "名稱 (A–Z)"),
("Merged PRs", "已合併 PR"),
("Lines added", "新增的行數"),
("Lines deleted", "刪除的行數"),
("Line delta", "行數差異"),
("Binary assets added", "新增的二進位資源"),
("Binary assets removed", "刪除的二進位資源"),
("First commit", "首次提交"),
("Last commit", "最近提交"),
("Display name", "顯示名稱"),
("Real name", "真實姓名"),
("ArtCraft website", "ArtCraft 網站"),
("Source code on GitHub", "GitHub 上的原始碼"),
("3D Renderer", "3D 轉譯器"),
("Preset Name", "預設集名稱"),
("Save Preset…", "儲存預設集…"),
("Delete Preset", "刪除預設集"),
("Lock Aspect Ratio", "鎖定長寬比"),
("Frame Rate presets", "幀率預設集"),
("Background Color", "背景顏色"),
("Shutter Angle", "快門角度"),
("Shutter Phase", "快門相位"),
("Samples Per Frame", "每幀取樣數"),
("Adaptive Sample Limit", "自適應取樣上限"),
("X and Y", "X 和 Y"),
("X only", "僅 X"),
("Y only", "僅 Y"),
("Track Camera", "追蹤攝影機"),
("Warp Stabilizer", "彎曲穩定器"),
("Track Motion", "追蹤運動"),
("Stabilize Motion", "穩定運動"),
("Motion Source:", "運動來源:"),
("Current Track:", "目前追蹤:"),
("Track Type:", "追蹤類型:"),
("Motion Target:", "運動目標:"),
("Track Mask:", "追蹤遮罩:"),
("Analyze forward", "向前分析"),
("Analyze backward", "向後分析"),
("Continue Tracking", "繼續追蹤"),
("Stop Tracking", "停止追蹤"),
("Adapt Feature", "自適應特徵"),
("Extrapolate Motion", "外推運動"),
("Attach Point", "附加點"),
("Track Name", "追蹤名稱"),
("Motion Tracker Options", "運動追蹤器選項"),
("Motion Tracker Apply Options", "運動追蹤器套用選項"),
("Edit Value Graph", "編輯數值圖表"),
("Edit Speed Graph", "編輯速度圖表"),
("Show Reference Graph", "顯示參考圖表"),
("Auto-Select Graph Type (speed graph for spatial properties, else value graph)", "自動選擇圖表類型 (空間屬性用速度圖表,否則用數值圖表)"),
("Auto-zoom graph height", "自動縮放圖表高度"),
("Fit all graphs to view", "使所有圖表符合視圖"),
("Fit selection to view", "使所選內容符合視圖"),
("Snap (key drags snap to the current time and other keys)", "貼齊 (關鍵影格拖曳時貼齊目前時間和其他關鍵影格)"),
("Show Transform Box when multiple keys are selected", "選擇多個關鍵影格時顯示變換框"),
("Separate Dimensions (Position)", "分離維度 (位置)"),
("Convert selected keyframes to Hold", "將所選關鍵影格轉換為定格"),
("Convert selected keyframes to Linear", "將所選關鍵影格轉換為線性"),
("Convert selected keyframes to Auto Bezier", "將所選關鍵影格轉換為自動貝茲"),
("Easy Ease (F9)", "緩和 (F9)"),
("Easy Ease In (Shift+F9)", "緩入 (Shift+F9)"),
("Easy Ease Out (Ctrl+Shift+F9)", "緩出 (Ctrl+Shift+F9)"),
("Spatial Path", "空間路徑"),
("Temporal Path", "時間路徑"),
("All the Same", "全部相同"),
("All Independently", "全部獨立"),
("Noise Type:", "雜訊類型:"),
("Apply To:", "套用至:"),
("Temporal Graph", "時間圖表"),
("Keyframe Rate:", "關鍵影格率:"),
("Capture speed at:", "速度擷取位置:"),
("Start Capture", "開始擷取"),
("Cancel Capture", "取消擷取"),
("Small Caps", "小型大寫字母"),
("All Small Caps", "全部小型大寫字母"),
("Superscript / Superior", "上標"),
("Subscript / Inferior", "下標"),
("Standard Ligatures", "標準連字"),
("Discretionary Ligatures", "選用連字"),
("Contextual Alternates", "上下文替代"),
("Stylistic Alternates", "樣式替代"),
("Titling Alternates", "標題替代"),
("Default Figure Style", "預設數字樣式"),
("Tabular Lining", "等寬襯線數字"),
("Proportional Oldstyle", "比例舊式"),
("Proportional Lining", "比例襯線數字"),
("Tabular Oldstyle", "等寬舊式"),
("Fill Over Stroke", "填色在筆畫之上"),
("Stroke Over Fill", "筆畫在填色之上"),
("Stroke order", "筆畫順序"),
("Single-line Composer", "單行排版器"),
("Every-line Composer", "逐行排版器"),
("Text direction", "文字方向"),
("Recently Used", "最近使用"),
("User Presets", "使用者預設集"),
("Remove from Favorites", "從我的最愛移除"),
("Show Animation Presets", "顯示動畫預設集"),
(" Refresh List", " 重新整理清單"),
(" Clear Recently Used", " 清除最近使用"),
("Show 32 bpc Effects Only", "僅顯示 32 bpc 效果"),
("Show GPU Accelerated Effects Only", "僅顯示 GPU 加速效果"),
("Show Effects for All Color Depths", "顯示所有色彩深度的效果"),
("* Animation Presets", "* 動畫預設集"),
("Select a layer to apply to", "請選擇要套用的圖層"),
("Search effects and presets", "搜尋效果與預設集"),
("Alpha Expansion:", "Alpha 擴張:"),
("Fill Method:", "填色方式:"),
("Edge Blend", "邊緣混合"),
("Entire Duration", "整個持續時間"),
("Reference Frame:", "參考幀:"),
("Use Current Time", "使用目前時間"),
("Generate Fill Layer", "產生填色圖層"),
("Lighting Correction:", "光照校正:"),
("Create Text and Camera", "建立文字和攝影機"),
("Create Solid and Camera", "建立純色和攝影機"),
("Create Null and Camera", "建立空物件和攝影機"),
("Create Shadow Catcher, Camera and Light", "建立陰影擷取器、攝影機和燈光"),
("Unable to solve camera", "無法求解攝影機"),
("Waiting to solve", "等待求解"),
("Create Camera", "建立攝影機"),
("track point", "追蹤點"),
("Ruler zero point", "尺規零點"),
("Vertical ruler", "垂直尺規"),
("Horizontal ruler", "水平尺規"),
("Viewer controls", "檢視器控制項"),
("Resolution/Down Sample Factor", "解析度/降取樣係數"),
("Adjust Exposure", "調整曝光"),
("Snapshot taken", "已拍攝快照"),
("Fast Previews", "快速預覽"),
("3D View", "3D 視圖"),
("Current time", "目前時間"),
("Layer Transform", "圖層變換"),
("Reset Transform", "重設變換"),
("Text Animation", "文字動畫"),
("Text Animation Presets", "文字動畫預設集"),
("EffectCraft on getartcraft.com", "getartcraft.com 上的 EffectCraft"),
("Small Screen", "小螢幕"),
("Tool Creates Shape", "工具建立形狀"),
("Tool Creates Mask", "工具建立遮罩"),
("Blend Mode", "混合模式"),
("Show mesh", "顯示網格"),
("Record Options...", "記錄選項..."),
];
/// Ukrainian (uk): original translations of the same interface rows as the Chinese catalogs.
@@ -4447,6 +5350,7 @@ mod tests {
const CONVERTED: &[(&str, &str)] = &[
("color_picker.rs", include_str!("../color_picker.rs")),
("credits.rs", include_str!("../credits.rs")),
("dock.rs", include_str!("../dock.rs")),
("header.rs", include_str!("../header.rs")),
("menus.rs", include_str!("../menus.rs")),
("widgets.rs", include_str!("../widgets.rs")),
@@ -4504,6 +5408,8 @@ mod tests {
("engine settings pages", include_str!("../../../engine/src/prefs.rs")),
("engine viewer channels", include_str!("../../../engine/src/viewer.rs")),
("engine viewer commands", include_str!("../../../engine/src/commands/viewer_cmds.rs")),
// The text animator menu's labels come from the engine as data, like the settings pages.
("engine text animator kinds", include_str!("../../../project/src/build.rs")),
];
/// Call shapes that hand a string literal straight to the user.
@@ -4658,6 +5564,13 @@ mod tests {
fn japanese_rows_translate_the_panels() {
set_current("ja");
assert_eq!(tr("Composition Name:"), "コンポジション名:");
// The panel/dialog second step: panel tabs, form labels, context menus and messages.
assert_eq!(tr("Effect Controls"), "エフェクトコントロール");
assert_eq!(tr("Media Duration"), "メディアの長さ");
assert_eq!(tr("Bring Layer to Front"), "レイヤーを最前面へ");
assert_eq!(tr("All Transform Properties"), "すべてのトランスフォームプロパティ");
assert_eq!(tr("Fill Color: RGB"), "塗りの色: RGB");
assert_eq!(tr("Lines added"), "追加行数");
assert_eq!(tr("my layer.mp4"), "my layer.mp4");
assert_eq!(tr_args("Proxy Use: {}", &[&"Best"]), "プロキシの使用:Best");
assert_eq!(tr_args("Step {} of {}: {}", &[&1, &3, &"Colour"]), "ステップ1/3:Colour");
+1 -1
View File
@@ -259,7 +259,7 @@ pub fn show(
ui.add_space(8.0);
ui.horizontal(|ui| {
for (tab, label, key) in [(Tab::Basic, "Basic", "basic"), (Tab::Advanced, "Advanced", "advanced"), (Tab::Renderer, "3D Renderer", "renderer")] {
let r = ui.selectable_label(d.tab == tab, label);
let r = ui.selectable_label(d.tab == tab, crate::i18n::tr(label));
auto.add(&format!("dialog.comp.tab.{key}"), r.rect, label);
if r.clicked() {
d.tab = tab;
+1
View File
@@ -245,6 +245,7 @@ fn text_button(
tip: &str,
) -> bool {
let t = app.tokens;
let (label, tip) = (crate::i18n::tr(label), crate::i18n::tr(tip));
let w = p.layout_no_wrap(label.to_string(), Tokens::ui(11.0), t.text).size().x + 14.0;
// Once one button overflows, the rest follow it into the menu (they keep their order).
if !bar.hidden.is_empty() || bar.x + w > bar.limit {
+2 -1
View File
@@ -42,7 +42,8 @@ pub fn preview(app: &mut EffectcraftApp, ui: &mut egui::Ui, rect: Rect) {
for (icon, cmd, tip) in buttons {
let r = Rect::from_min_size(pos2(x, y), vec2(bw, 28.0));
let icon = if cmd == "playback.toggle" && app.playback.playing { Icon::Pause } else { icon };
if widgets::icon_button(ui, r, icon, cmd == "playback.toggle" && app.playback.playing, &t, egui::Id::new(("pv", cmd))).on_hover_text(tip).clicked() {
if widgets::icon_button(ui, r, icon, cmd == "playback.toggle" && app.playback.playing, &t, egui::Id::new(("pv", cmd))).on_hover_text(tr(tip)).clicked()
{
// The play button plays with the options of the shortcut shown below.
let params = if cmd == "playback.toggle" { json!({"shortcut": current.id()}) } else { json!({}) };
let _ = crate::menus::invoke(app, &ctx, cmd, params);
+9 -3
View File
@@ -475,7 +475,13 @@ pub fn show(app: &mut EffectcraftApp, ui: &mut egui::Ui, rect: Rect) {
continue;
}
let resp = ui.interact(hr.intersect(hdr), egui::Id::new(("proj-sort", *key)), Sense::click());
hp.with_clip_rect(hr).text(pos2(*x, hdr.center().y), Align2::LEFT_CENTER, *label, Tokens::ui(11.0), if resp.hovered() { t.text } else { t.text_dim });
hp.with_clip_rect(hr).text(
pos2(*x, hdr.center().y),
Align2::LEFT_CENTER,
crate::i18n::tr(label),
Tokens::ui(11.0),
if resp.hovered() { t.text } else { t.text_dim },
);
if *key == "label" {
icons::paint(&hp, Rect::from_center_size(pos2(label_x, hdr.center().y), vec2(10.0, 10.0)), Icon::Keyframe, t.text_dim);
}
@@ -981,7 +987,7 @@ pub fn show(app: &mut EffectcraftApp, ui: &mut egui::Ui, rect: Rect) {
(Icon::NewComp, "newComp", "Create a new Composition"),
] {
let r = Rect::from_min_size(pos2(x, foot.min.y + 3.0), vec2(22.0, 22.0));
let resp = widgets::icon_button(ui, r, icon, false, &t, egui::Id::new(("pfoot", id))).on_hover_text(tip);
let resp = widgets::icon_button(ui, r, icon, false, &t, egui::Id::new(("pfoot", id))).on_hover_text(crate::i18n::tr(tip));
app.auto.add(&format!("project.{id}"), r, tip);
resp.widget_info(|| egui::WidgetInfo::labeled(egui::WidgetType::Button, true, crate::i18n::tr(tip)));
if resp.clicked() {
@@ -1106,7 +1112,7 @@ fn column_menu(app: &mut EffectcraftApp, resp: &egui::Response) {
ui.label(egui::RichText::new(crate::i18n::tr("Columns")).weak());
for (key, label, _) in COLUMNS {
let mut on = app.ui.project_columns.iter().any(|c| c == key);
if ui.checkbox(&mut on, label).changed() {
if ui.checkbox(&mut on, crate::i18n::tr(label)).changed() {
set_column(&mut app.ui.project_columns, key, on);
}
}
+1 -1
View File
@@ -615,7 +615,7 @@ pub fn apply_dialog(app: &mut EffectcraftApp, ctx: &egui::Context, t: &Tokens) {
super::dialogs::modal(ctx, "Motion Tracker Apply Options", vec2(380.0, 170.0), t, |ui| {
ui.horizontal(|ui| {
ui.label(crate::i18n::tr("Apply Dimensions:"));
let labels = ["X and Y", "X only", "Y only"];
let labels = [crate::i18n::tr("X and Y"), crate::i18n::tr("X only"), crate::i18n::tr("Y only")];
let r = egui::ComboBox::from_id_salt("track-apply-dims")
.selected_text(labels[d.dims.min(2)])
.show_ui(ui, |ui| {
+15 -14
View File
@@ -1,6 +1,6 @@
# Localization parity
> **Last reviewed:** 2026-10-12 · **Last updated:** 2026-10-12 · **Change:** minor (catalogs recounted at `upstream/main` 470ea7a3: menus in 10 languages, panels in 6, Hangul probe (#599)) · **Target:** Adobe After Effects 2026
> **Last reviewed:** 2026-10-12 · **Last updated:** 2026-10-22 · **Change:** minor (the panel/dialog catalogs grow by 300 rows in Japanese, Simplified Chinese and Traditional Chinese: panel tabs, form and dialog labels, context menus, tracker/graph/text-panel labels, credits and File-panel footers; Japanese 1,621 and Chinese 1,623 of ≈ 4,200 interface strings; previously: minor, catalogs recounted at `upstream/main` 470ea7a3: menus in 10 languages, panels in 6, Hangul probe (#599)) · **Target:** Adobe After Effects 2026
How much of EffectCraft's interface is translated, language by language, compared with After
Effects. [gaps.md](gaps.md) gap 16 and workstream G9 hold the work;
@@ -63,16 +63,16 @@ the true percentages are slightly lower.
| Language | Code | UI strings translated | Dialogs / tooltips / help | Script support | Native review | Status | To `full` |
|---|---|---|---|---|---|---|---|
| English | `en` | ≈ 3,900 (100%, source) | All; docs in English | — | yes | full | — |
| Simplified Chinese | `zh-hans` | 1,130 (≈ 29%): menus 624 rows, panels 506 | Panels and dialogs partly; no help, effect names translated (306) and their parameter names not; Home screen literals unwrapped (#574, closed) | System CJK fallback; Han follows the UI language; CJK text in comps renders wrongly (#453); IME in text layers | no | partial | 6–9 h + review |
| Spanish | `es` | 624 (≈ 16%) | Menus only (panel catalog in open PR #996) | Latin, fine | no | menus only | 7–10 h + review |
| English | `en` | ≈ 4,200 (100%, source) | All; docs in English | — | yes | full | — |
| Simplified Chinese | `zh-hans` | 1,623 (≈ 39%): menus 628 rows, panels 995 | Panels and dialogs partly; no help, effect names translated (306) and their parameter names not; Home screen literals unwrapped (#574, closed) | System CJK fallback; Han follows the UI language; CJK text in comps renders wrongly (#453); IME in text layers | no | partial | 6–9 h + review |
| Spanish | `es` | 628 (≈ 15%) | Menus only (panel catalog in open PR #996) | Latin, fine | no | menus only | 7–10 h + review |
| Hindi | `hi` | 0 | — | UI: Devanagari fallback font but no shaping; text layers shape Devanagari | no | none (After Effects: none) | 9–13 h + shaping in the UI |
| Arabic | `ar` | 0 | — | UI: Arabic fallback font but no shaping and no RTL layout; text layers: bidi + shaping | no | none (After Effects: none) | 9–13 h + 15–25 h RTL UI |
| French | `fr` | 624 (≈ 16%) | Menus only | Latin, fine | no | menus only | 7–10 h + review |
| Portuguese (Brazil) | `pt-br` | 1,024 (≈ 26%): menus 624 rows, panels 400 | Panels and dialogs partly | Latin, fine | no | partial | 6–9 h + review |
| French | `fr` | 628 (≈ 15%) | Menus only | Latin, fine | no | menus only | 7–10 h + review |
| Portuguese (Brazil) | `pt-br` | 1,045 (≈ 25%): menus 628 rows, panels 417 | Panels and dialogs partly | Latin, fine | no | partial | 6–9 h + review |
| Indonesian | `id` | 0 | — | Latin, fine | no | none (After Effects: none) | 8–12 h + review |
| Japanese | `ja` | 1,034 (≈ 27%): menus 624 rows, panels 410 | Panels and dialogs partly | Japanese system fallback; vertical text and Tate-Chu-Yoko in text layers; IME | no | partial | 6–9 h + review |
| German | `de` | 624 (≈ 16%) | Menus only (open PR #666 adds interface translations) | Latin, fine | no | menus only | 7–10 h + review |
| Japanese | `ja` | 1,621 (≈ 39%): menus 628 rows, panels 993 | Panels and dialogs partly | Japanese system fallback; vertical text and Tate-Chu-Yoko in text layers; IME | no | partial | 6–9 h + review |
| German | `de` | 628 (≈ 15%) | Menus only (open PR #666 adds interface translations) | Latin, fine | no | menus only | 7–10 h + review |
| Korean | `ko` | 0 | — | Hangul fallback probe added (#599, closed); not checked on macOS here | no | none | 9–13 h + review |
| Vietnamese | `vi` | 0 | — | Latin with stacked diacritics; untested | no | none (After Effects: none) | 8–12 h + review |
@@ -80,14 +80,14 @@ Other languages EffectCraft ships (3):
| Language | Code | UI strings translated | Status | To `full` |
|---|---|---|---|---|
| Traditional Chinese | `zh-hant` | 1,130 (≈ 29%): menus 624 rows, panels 506 | partial | 6–9 h + review |
| Ukrainian | `uk` | 1,129 (≈ 29%): menus 624 rows, panels 505 | partial | 6–9 h + review |
| Czech | `cs` | 1,125 (≈ 29%): menus 624 rows, panels 501 | Existing catalog entries covered; unwrapped UI, effects and engine text still in English; AI-assisted, not yet native-speaker proofread | Remaining strings + independent native review |
| Traditional Chinese | `zh-hant` | 1,623 (≈ 39%): menus 628 rows, panels 995 | partial | 6–9 h + review |
| Ukrainian | `uk` | 1,152 (≈ 27%): menus 628 rows, panels 524 | partial | 6–9 h + review |
| Czech | `cs` | 1,146 (≈ 27%): menus 628 rows, panels 518 | Existing catalog entries covered; unwrapped UI, effects and engine text still in English; AI-assisted, not yet native-speaker proofread | Remaining strings + independent native review |
Russian (`ru`) has a menu catalog (624 rows, ≈ 16%); After Effects also ships Italian, which EffectCraft does not (8–12 h).
Russian (`ru`) has a menu catalog (628 rows, ≈ 15%); After Effects also ships Italian, which EffectCraft does not (8–12 h).
**Overall: ≈ 18%**, the average coverage of After Effects' 10 non-English languages
(Simplified and Traditional Chinese 29%, Japanese 27%, Brazilian Portuguese 26%, Spanish, French,
**Overall: ≈ 27%**, the average coverage of After Effects' 10 non-English languages
(Simplified and Traditional Chinese 39%, Japanese 39%, Ukrainian 27%, Czech 27%, Brazilian Portuguese 25%, Spanish, French and German 15%,
German and Russian 16%, Korean and Italian 0%; 175 / 10, was ≈ 12% on 10 October). This is the localization row in
[target-app-parity.md](target-app-parity.md#by-dimension).
@@ -103,6 +103,7 @@ can give; none has had it.
| Date | Change | Summary |
|---|---|---|
| 2026-10-22 | minor | Panel/dialog second step: 300 more catalog rows in Japanese, Simplified Chinese and Traditional Chinese (and no changes to the other catalogs) — panel tabs, form and dialog labels, panel context menus, the tracker and graph controls, text-panel options, File-panel footers and credits; the panel tables are now 993 Japanese and 995 Chinese rows, all drawn through `tr`/`tr_args`, with the tests keeping the three catalogs listing the same sources |
| 2026-10-12 | minor | Recounted: Russian, French, German and Czech menus (#873, #987), Brazilian Portuguese and Czech panels (#830, #987), Hangul probe (#599); overall ≈ 12% to ≈ 18%; Korean and Italian still absent |
| 2026-10-10 | major | First localization parity document: catalog rows counted for all six languages, the twelve-language table, After Effects' 11 shipped languages from its bundle |
| 2026-10-11 | minor | Ukrainian panel catalog brought level with the Chinese ones (495 of 496 rows, counted at this commit); its share rises to ≈ 29%. The other languages' panel counts are the 10 October measurement |