mirror of
https://github.com/storytold/gridcraft.git
synced 2026-10-22 18:22:24 +00:00
Merge PR #1732: i18n(ja): translate the dialog, message and menu strings (943 entries, matching the pt-BR coverage)
Conflicts: - crates/ui-egui/src/i18n.rs: mod it and mod ja both kept; Language::Ja dispatches to ja::translate; the shape test (PR #831) iterates ja::CORE, which replaces JAPANESE. - docs/localization-parity.md: both revision rows kept, newest first.
This commit is contained in:
commit
46ddd61021
5 files changed
+1151
-444
No files matched your search
+7
-4
@@ -2,7 +2,7 @@
|
||||
|
||||
**Stage: alpha** · next: beta, ~25 points of "ready for real work" and ~160–240 h away
|
||||
|
||||
> **Last reviewed:** 2026-10-11 · **Last updated:** 2026-10-12 · **Change:** minor (rows auto-fit oversized fonts on open and whole-row/column formatting) · **Target:** Microsoft Excel (Microsoft 365)
|
||||
> **Last reviewed:** 2026-10-11 · **Last updated:** 2026-10-20 · **Change:** minor (the Japanese catalog covers the dialogs, messages and menus) · **Target:** Microsoft Excel (Microsoft 365)
|
||||
|
||||
GridCraft aims at full Microsoft Excel parity, and at being better in places: faster, open (XLSX
|
||||
is the native format), fully scriptable by agents (MCP, control channel, CLI), and on the web.
|
||||
@@ -93,7 +93,9 @@ The ribbon is translated into Japanese, Simplified Chinese, Korean, Brazilian Po
|
||||
and German (266–268 labels each, ~12% of ~2,200 strings; merged 10-10 in #31, #104, #82, German
|
||||
added 10-11), the
|
||||
interface follows the system language, and CJK, Thai and Hebrew text falls back to system fonts
|
||||
(#38). Dialogs, menus and messages are English; formulas and number formats are en-US only.
|
||||
(#38). Japanese (10-17) and Brazilian Portuguese also translate the dialog titles and labels,
|
||||
message boxes, Backstage/File-view items, template names and native menus: 943 strings each, ~43%.
|
||||
The remaining dialogs, menus and messages are English; formulas and number formats are en-US only.
|
||||
Localized German formulas and numbers are in PR #163. Detail: [localization-parity.md](docs/localization-parity.md).
|
||||
|
||||
| Language | Code | Status | UI strings |
|
||||
@@ -104,9 +106,9 @@ Localized German formulas and numbers are in PR #163. Detail: [localization-pari
|
||||
| Hindi | hi | none | 0% |
|
||||
| Arabic | ar | none (no RTL layout, no shaping) | 0% |
|
||||
| French | fr | none | 0% |
|
||||
| Portuguese | pt-BR | menus only | ~12% |
|
||||
| Portuguese | pt-BR | menus, File view, dialogs | ~43% |
|
||||
| Indonesian | id | none | 0% |
|
||||
| Japanese | ja | menus only | ~12% |
|
||||
| Japanese | ja | menus, File view, dialogs, messages | ~43% |
|
||||
| German | de | menus only | ~12% |
|
||||
| Korean | ko | menus only | ~12% |
|
||||
| Vietnamese | vi | none | 0% |
|
||||
@@ -132,6 +134,7 @@ Ranked; estimates in Opus 5.5 agent-hours. Detail and the full beta-gate list in
|
||||
|
||||
| Date | What landed |
|
||||
|---|---|
|
||||
| 2026-10-20 | Japanese interface catalog covers every key the Brazilian Portuguese catalog translates: the 398-label shared core plus 545 dialog, message, Backstage and menu strings (943 total, ~43% of ~2,200). A test parses `pt.rs`'s source, so the two catalogs stay in step |
|
||||
| 2026-10-12 | Rows auto-fit oversized fonts: opening a file and whole-row/column formatting grow non-custom rows to their tallest font (#833) |
|
||||
| 2026-10-12 | Number formats: parsing a format code is linear in its length (long runs of `[`, `,` or `/` no longer take quadratic time), and an unclosed `[` is a literal when splitting sections as well as when tokenizing (#810) |
|
||||
| 2026-10-12 | Number formats: a fraction denominator with 65,536 zeros no longer crashes; format codes are capped at 255 characters like Excel (longer codes display as General, `TEXT` gives `#VALUE!`) (#807) |
|
||||
|
||||
+7
-423
@@ -15,6 +15,7 @@ mod el;
|
||||
mod es;
|
||||
mod fr;
|
||||
mod it;
|
||||
mod ja;
|
||||
mod ko;
|
||||
mod pl;
|
||||
mod pt;
|
||||
@@ -138,7 +139,7 @@ impl Language {
|
||||
Self::En => None,
|
||||
Self::Es => es::translate(text),
|
||||
Self::El => el::translate(text),
|
||||
Self::Ja => JAPANESE.iter().find(|(english, _)| *english == text).map(|(_, translated)| *translated),
|
||||
Self::Ja => ja::translate(text),
|
||||
Self::Zh => zh::translate(text),
|
||||
Self::Ko => ko::translate(text),
|
||||
Self::Ru => ru::translate(text),
|
||||
@@ -193,435 +194,18 @@ pub fn set_current(ctx: &egui::Context, language: Language) {
|
||||
ctx.data_mut(|d| d.insert_temp(lang_key(), language));
|
||||
}
|
||||
|
||||
/// English label → Japanese. Keys are the exact interface strings (command ids, file names and
|
||||
/// document text are never translated); anything absent falls back to English.
|
||||
const JAPANESE: &[(&str, &str)] = &[
|
||||
("Paste", "貼り付け"),
|
||||
("Paste Values", "値の貼り付け"),
|
||||
("Paste Formulas", "数式の貼り付け"),
|
||||
("Paste Formatting", "書式の貼り付け"),
|
||||
("Transpose", "行列を入れ替え"),
|
||||
("Paste Link", "リンクの貼り付け"),
|
||||
("Paste Special…", "形式を選択して貼り付け…"),
|
||||
("Insert Copied Cells", "コピーしたセルの挿入"),
|
||||
("Insert Copied Cells…", "コピーしたセルの挿入…"),
|
||||
("Insert Cut Cells", "切り取ったセルの挿入"),
|
||||
("Insert Paste", "挿入貼り付け"),
|
||||
("Cut (⌘X)", "切り取り (⌘X)"),
|
||||
("Copy (⌘C)", "コピー (⌘C)"),
|
||||
("Format Painter (double-click to keep it on)", "書式のコピー/貼り付け (ダブルクリックで固定)"),
|
||||
("Bold (⌘B)", "太字 (⌘B)"),
|
||||
("Italic (⌘I)", "斜体 (⌘I)"),
|
||||
("Underline (⌘U)", "下線 (⌘U)"),
|
||||
("Double Underline", "二重下線"),
|
||||
("Strikethrough", "取り消し線"),
|
||||
("Underline", "下線"),
|
||||
("Increase Font Size", "フォントの拡大"),
|
||||
("Decrease Font Size", "フォントの縮小"),
|
||||
("Wrap Text", "折り返して全体を表示"),
|
||||
("Merge & Center", "セルを結合して中央揃え"),
|
||||
("Merge Cells", "セルの結合"),
|
||||
("Merge Across", "横方向に結合"),
|
||||
("Unmerge Cells", "セル結合の解除"),
|
||||
("Fill Color", "塗りつぶしの色"),
|
||||
("Font Color", "フォントの色"),
|
||||
("Borders", "罫線"),
|
||||
("Top\nAlign", "上揃え"),
|
||||
("Middle\nAlign", "中央揃え (縦)"),
|
||||
("Bottom\nAlign", "下揃え"),
|
||||
("Left", "左"),
|
||||
("Right", "右"),
|
||||
("Center", "中央"),
|
||||
("Horizontal", "水平"),
|
||||
("Vertical Text", "縦書き"),
|
||||
("Decrease Indent", "インデントを減らす"),
|
||||
("Increase Indent", "インデントを増やす"),
|
||||
("Orientation", "方向"),
|
||||
("Page Layout|Orientation", "印刷の向き"),
|
||||
("Angle Counterclockwise", "左回りに回転"),
|
||||
("Angle Clockwise", "右回りに回転"),
|
||||
("Rotate Text Up", "文字列を上に回転"),
|
||||
("Rotate Text Down", "文字列を下に回転"),
|
||||
("Accounting Number Format", "通貨表示形式"),
|
||||
("Percent Style", "パーセント表示"),
|
||||
("Comma Style", "桁区切りスタイル"),
|
||||
("Increase Decimal", "小数点以下の桁数を増やす"),
|
||||
("Decrease Decimal", "小数点以下の桁数を減らす"),
|
||||
("More Accounting Formats…", "その他の通貨表示形式…"),
|
||||
("Conditional\nFormatting", "条件付き書式"),
|
||||
("Conditional Formatting", "条件付き書式"),
|
||||
("Format\nas Table", "テーブルとして書式設定"),
|
||||
("Cell\nStyles", "セルのスタイル"),
|
||||
("Format Cells…", "セルの書式設定…"),
|
||||
("Format Cell Alignment…", "セルの配置…"),
|
||||
("Format\nPane", "書式ウィンドウ"),
|
||||
("Format", "書式"),
|
||||
("Insert", "挿入"),
|
||||
("Insert Cells…", "セルの挿入…"),
|
||||
("Delete", "削除"),
|
||||
("Delete Cells…", "セルの削除…"),
|
||||
("Insert Sheet Rows", "シートの行を挿入"),
|
||||
("Insert Sheet Columns", "シートの列を挿入"),
|
||||
("Delete Sheet Rows", "シートの行を削除"),
|
||||
("Delete Sheet Columns", "シートの列を削除"),
|
||||
("Row Height…", "行の高さ…"),
|
||||
("AutoFit Row Height", "行の高さを自動調整"),
|
||||
("Column Width…", "列の幅…"),
|
||||
("AutoFit Column Width", "列の幅を自動調整"),
|
||||
("Default Width…", "標準の幅…"),
|
||||
("Hide Rows", "行を表示しない"),
|
||||
("Unhide Rows", "再表示"),
|
||||
("Hide Columns", "列の表示/非表示"),
|
||||
("Unhide Columns", "再表示"),
|
||||
("Lock Cell", "セルのロック"),
|
||||
("Clear", "クリア"),
|
||||
("Clear All", "すべてクリア"),
|
||||
("Clear Formats", "書式のクリア"),
|
||||
("Clear Contents", "数式と値のクリア"),
|
||||
("Clear Comments and Notes", "コメントとメモのクリア"),
|
||||
("Clear Hyperlinks", "ハイパーリンクのクリア"),
|
||||
("AutoSum", "オート SUM"),
|
||||
("AutoSum (⌘⇧T)", "オート SUM (⌘⇧T)"),
|
||||
("Flash\nFill", "フラッシュ フィル"),
|
||||
("Flash Fill", "フラッシュ フィル"),
|
||||
("Fill", "フィル"),
|
||||
("Clear Print Area", "印刷範囲のクリア"),
|
||||
("Find &\nSelect", "検索と選択"),
|
||||
("Find…", "検索…"),
|
||||
("Replace…", "置換…"),
|
||||
("Go To…", "ジャンプ…"),
|
||||
("Go To Special…", "セルを選択…"),
|
||||
("PivotTable", "ピボットテーブル"),
|
||||
("Recommended\nCharts", "推奨グラフ"),
|
||||
("Table", "テーブル"),
|
||||
("Pictures", "画像"),
|
||||
("Shapes", "図形"),
|
||||
("Icons", "アイコン"),
|
||||
("Text\nBox", "テキスト ボックス"),
|
||||
("Comment", "コメント"),
|
||||
("New\nComment", "新しいコメント"),
|
||||
("New Note", "新しいメモ"),
|
||||
("Show/Hide Note", "メモの表示/非表示"),
|
||||
("Header &\nFooter", "ヘッダーとフッター"),
|
||||
("Text to\nColumns", "区切り位置"),
|
||||
("Link", "リンク"),
|
||||
("Symbol", "記号"),
|
||||
("Sparklines", "スパークライン"),
|
||||
("Checkbox", "チェックボックス"),
|
||||
("Insert checkboxes in the selected cells", "選択したセルにチェックボックスを挿入"),
|
||||
("Header & Footer", "ヘッダーとフッター"),
|
||||
("Draw with ink", "インクで描画"),
|
||||
("Eraser", "消しゴム"),
|
||||
("Ink to\nShape", "インクを図形に変換"),
|
||||
("Select\nObjects", "オブジェクトの選択"),
|
||||
("Themes", "テーマ"),
|
||||
("Margins", "余白"),
|
||||
("Left Margin", "左余白"),
|
||||
("Right Margin", "右余白"),
|
||||
("Top Margin", "上余白"),
|
||||
("Bottom Margin", "下余白"),
|
||||
("Header Margin", "ヘッダーの余白"),
|
||||
("Footer Margin", "フッターの余白"),
|
||||
("Size", "サイズ"),
|
||||
("Print\nArea", "印刷範囲"),
|
||||
("Set Print Area", "印刷範囲の設定"),
|
||||
("Breaks", "改ページ"),
|
||||
("Insert Page Break", "改ページの挿入"),
|
||||
("Remove Page Break", "改ページの解除"),
|
||||
("Reset All Page Breaks", "すべての改ページを解除"),
|
||||
("Print\nTitles", "印刷タイトル"),
|
||||
("Sheet\nRight-to-Left", "シートを右から左へ"),
|
||||
("Sheet Right-to-Left", "シートを右から左へ"),
|
||||
("Narrow", "狭い"),
|
||||
("Wide", "広い"),
|
||||
("Normal", "標準"),
|
||||
("Portrait", "縦"),
|
||||
("Landscape", "横"),
|
||||
("Custom Margins…", "ユーザー設定の余白…"),
|
||||
("Insert\nFunction", "関数の挿入"),
|
||||
("Name\nManager", "名前の管理"),
|
||||
("Define Name", "名前の定義"),
|
||||
("Use in Formula", "数式で使用"),
|
||||
("Create from Selection", "選択範囲から作成"),
|
||||
("Trace Precedents", "参照元のトレース"),
|
||||
("Trace Dependents", "参照先のトレース"),
|
||||
("Remove Arrows", "矢印の解除"),
|
||||
("Show Formulas", "数式の表示"),
|
||||
("Error Checking", "エラーチェック"),
|
||||
("Evaluate Formula", "数式の検証"),
|
||||
("Watch Window", "ウォッチ ウィンドウ"),
|
||||
("Calculation\nOptions", "計算方法の設定"),
|
||||
("Calculate Now", "再計算実行"),
|
||||
("Calculate Sheet", "シートの再計算"),
|
||||
("Automatic", "自動"),
|
||||
("Automatic Except for Data Tables", "データ テーブル以外は自動"),
|
||||
("Manual", "手動"),
|
||||
("Sort &\nFilter", "並べ替えとフィルター"),
|
||||
("Sort", "並べ替え"),
|
||||
("Sort A to Z", "昇順"),
|
||||
("Sort Z to A", "降順"),
|
||||
("Custom Sort…", "ユーザー設定の並べ替え…"),
|
||||
("Filter", "フィルター"),
|
||||
("Reapply", "再適用"),
|
||||
("Get Data\n(Text/CSV)", "データの取得 (テキスト/CSV)"),
|
||||
("Remove\nDuplicates", "重複の削除"),
|
||||
("Data\nValidation", "データの入力規則"),
|
||||
("Data Validation", "データの入力規則"),
|
||||
("Data Validation…", "データの入力規則…"),
|
||||
("Circle Invalid Data", "無効なデータをマーク"),
|
||||
("Clear Validation", "入力規則のクリア"),
|
||||
("Group", "グループ化"),
|
||||
("Ungroup", "グループ解除"),
|
||||
("Show Detail", "詳細データの表示"),
|
||||
("Hide Detail", "詳細を表示しない"),
|
||||
("Subtotal", "小計"),
|
||||
("Data\nAnalysis", "データ分析"),
|
||||
("Data Analysis", "データ分析"),
|
||||
("Solver", "ソルバー"),
|
||||
("What-If\nAnalysis", "What-If 分析"),
|
||||
("Data Table…", "データ テーブル…"),
|
||||
("Scenario Manager…", "シナリオ マネージャー…"),
|
||||
("Goal Seek…", "ゴール シーク…"),
|
||||
("Forecast\nSheet", "予測シート"),
|
||||
("Spelling", "スペルチェック"),
|
||||
("Check\nAccessibility", "アクセシビリティ チェック"),
|
||||
("Threaded Comments", "スレッド化されたコメント"),
|
||||
("Show\nComments", "コメントの表示"),
|
||||
("Previous", "前へ"),
|
||||
("Next", "次へ"),
|
||||
("Previous Comment", "前のコメント"),
|
||||
("Next Comment", "次のコメント"),
|
||||
("Show All Notes", "すべてのメモを表示"),
|
||||
("Convert to Comments", "コメントに変換"),
|
||||
("Protect\nWorkbook", "ブックの保護"),
|
||||
("Allow Edit\nRanges", "範囲の編集を許可"),
|
||||
("Allow Edit Ranges", "範囲の編集を許可"),
|
||||
("Unprotect\nSheet", "シート保護の解除"),
|
||||
("Protect Sheet…", "シートの保護…"),
|
||||
("Comments", "コメント"),
|
||||
("Notes", "メモ"),
|
||||
("Page Break\nPreview", "改ページ プレビュー"),
|
||||
("Page\nLayout", "ページ レイアウト"),
|
||||
("Formula Bar", "数式バー"),
|
||||
("Gridlines", "目盛線"),
|
||||
("Headings", "見出し"),
|
||||
("Zoom", "ズーム"),
|
||||
("100%", "100%"),
|
||||
("Zoom to\nSelection", "選択範囲を拡大"),
|
||||
("Freeze\nPanes", "ウィンドウ枠の固定"),
|
||||
("Freeze Panes", "ウィンドウ枠の固定"),
|
||||
("Freeze Top Row", "最上行の固定"),
|
||||
("Freeze First Column", "最左列の固定"),
|
||||
("Unfreeze Panes", "ウィンドウ枠固定の解除"),
|
||||
("Dark Mode", "ダーク モード"),
|
||||
("Display theme", "表示テーマ"),
|
||||
("Animations", "アニメーション"),
|
||||
(
|
||||
"Glide the selection outline to the cell you move to instead of jumping there",
|
||||
"選択範囲の枠を、移動先のセルまで滑らかに動かします(瞬時には切り替えません)",
|
||||
),
|
||||
("System", "システム"),
|
||||
("Light", "ライト"),
|
||||
("Dark", "ダーク"),
|
||||
("Interface language", "表示言語"),
|
||||
("Interface size", "表示サイズ"),
|
||||
("Auto", "自動"),
|
||||
("Drag to freeze columns", "ドラッグして列を固定"),
|
||||
("Drag to freeze rows", "ドラッグして行を固定"),
|
||||
("Command\nPalette", "コマンド パレット"),
|
||||
("Agent\nControl", "エージェント制御"),
|
||||
("Action\nJournal", "操作ジャーナル"),
|
||||
("About\nGridCraft", "GridCraft について"),
|
||||
("Share", "共有"),
|
||||
("Add Chart\nElement", "グラフ要素を追加"),
|
||||
("Change\nChart Type", "グラフの種類の変更"),
|
||||
("Switch\nRow/Column", "行/列の切り替え"),
|
||||
("Select\nData", "データの選択"),
|
||||
("Data Labels: None", "データ ラベル: なし"),
|
||||
("Data Labels: Show", "データ ラベル: 表示"),
|
||||
("Legend: None", "凡例: なし"),
|
||||
("Legend: Bottom", "凡例: 下"),
|
||||
("Legend: Top", "凡例: 上"),
|
||||
("Legend: Right", "凡例: 右"),
|
||||
("Gridlines: None", "目盛線: なし"),
|
||||
("Gridlines: Show", "目盛線: 表示"),
|
||||
("Chart\nTitle", "グラフ タイトル"),
|
||||
("Delete\nChart", "グラフの削除"),
|
||||
("Convert\nto Range", "範囲に変換"),
|
||||
("Table\nStyles", "テーブル スタイル"),
|
||||
("Top 10 Items", "上位 10 項目"),
|
||||
("Top 10%", "上位 10%"),
|
||||
("Bottom 10 Items", "下位 10 項目"),
|
||||
("Bottom 10%", "下位 10%"),
|
||||
("Above Average", "平均より上"),
|
||||
("Below Average", "平均より下"),
|
||||
("Clear Rules from Entire Sheet", "シート全体からルールをクリア"),
|
||||
("Clear Rules from Selected Cells", "選択したセルからルールをクリア"),
|
||||
("Constants", "定数"),
|
||||
("Data Bars", "データ バー"),
|
||||
("Color Scales", "カラー スケール"),
|
||||
("Icon Sets", "アイコン セット"),
|
||||
("Home", "ホーム"),
|
||||
("Draw", "描画"),
|
||||
("Page Layout", "ページ レイアウト"),
|
||||
("Formulas", "数式"),
|
||||
("Data", "データ"),
|
||||
("Review", "レビュー"),
|
||||
("View", "表示"),
|
||||
("Automate", "自動化"),
|
||||
("Table Design", "テーブル デザイン"),
|
||||
("Chart Design", "グラフ デザイン"),
|
||||
("Ready", "準備完了"),
|
||||
("Enter", "入力"),
|
||||
("Edit", "編集"),
|
||||
("Point", "ポイント"),
|
||||
("Calculate", "計算"),
|
||||
("Select destination and press Enter or choose Paste", "貼り付け先を選び、Enter キーを押すか [貼り付け] を選びます"),
|
||||
("General", "標準"),
|
||||
("Number", "数値"),
|
||||
("Currency", "通貨"),
|
||||
("Accounting", "会計"),
|
||||
("Date", "日付"),
|
||||
("Time", "時刻"),
|
||||
("Percentage", "パーセンテージ"),
|
||||
("Fraction", "分数"),
|
||||
("Scientific", "指数"),
|
||||
("Text", "文字列"),
|
||||
("Special", "特殊"),
|
||||
("Custom", "ユーザー設定"),
|
||||
("Short Date", "日付"),
|
||||
("Long Date", "長い日付"),
|
||||
("More Number Formats…", "その他の表示形式…"),
|
||||
("Financial", "財務"),
|
||||
("Logical", "論理"),
|
||||
("Date &\nTime", "日付/時刻"),
|
||||
("Lookup &\nReference", "検索/行列"),
|
||||
("Math &\nTrig", "数学/三角"),
|
||||
("More\nFunctions", "その他の関数"),
|
||||
("Sheet Options|View", "画面"),
|
||||
("Print", "印刷"),
|
||||
// Page Layout view and the Header & Footer tab.
|
||||
("Click to add data", "クリックしてデータを追加"),
|
||||
("Add header", "ヘッダーの追加"),
|
||||
("Add footer", "フッターの追加"),
|
||||
("(none)", "(なし)"),
|
||||
("Header", "ヘッダー"),
|
||||
("Footer", "フッター"),
|
||||
("Page\nNumber", "ページ\n番号"),
|
||||
("Number\nof Pages", "ページ数"),
|
||||
("Current\nDate", "現在の\n日付"),
|
||||
("Current\nTime", "現在の\n時刻"),
|
||||
("File\nPath", "ファイルの\nパス"),
|
||||
("File\nName", "ファイル名"),
|
||||
("Sheet\nName", "シート名"),
|
||||
("Go to\nHeader", "ヘッダーに\n移動"),
|
||||
("Go to\nFooter", "フッターに\n移動"),
|
||||
("Page Number", "ページ番号"),
|
||||
("Number of Pages", "ページ数"),
|
||||
("Current Date", "現在の日付"),
|
||||
("Current Time", "現在の時刻"),
|
||||
("File Path", "ファイルのパス"),
|
||||
("File Name", "ファイル名"),
|
||||
("Sheet Name", "シート名"),
|
||||
("Go to Header", "ヘッダーに移動"),
|
||||
("Different First Page", "先頭ページのみ別指定"),
|
||||
("Different Odd & Even Pages", "奇数/偶数ページ別指定"),
|
||||
("Go to Footer", "フッターに移動"),
|
||||
("Ruler", "ルーラー"),
|
||||
// File › Backstage view.
|
||||
("File", "ファイル"),
|
||||
("Back", "戻る"),
|
||||
("New", "新規"),
|
||||
("Open", "開く"),
|
||||
("Info", "情報"),
|
||||
("Save", "上書き保存"),
|
||||
("Save As", "名前を付けて保存"),
|
||||
("Export", "エクスポート"),
|
||||
("Close", "閉じる"),
|
||||
("Options", "オプション"),
|
||||
("Blank workbook", "空白のブック"),
|
||||
("Recent", "最近使ったアイテム"),
|
||||
("No recent workbooks yet.", "最近使ったブックはまだありません。"),
|
||||
("More workbooks", "その他のブック"),
|
||||
("Modified", "更新日時"),
|
||||
("Not available", "利用できません"),
|
||||
("Just now", "たった今"),
|
||||
("Yesterday", "昨日"),
|
||||
("{n} min ago", "{n} 分前"),
|
||||
("{n} h ago", "{n} 時間前"),
|
||||
("{n} days ago", "{n} 日前"),
|
||||
("{n} weeks ago", "{n} 週間前"),
|
||||
("{n} months ago", "{n} か月前"),
|
||||
("{n} years ago", "{n} 年前"),
|
||||
("Browse…", "参照…"),
|
||||
("Not saved yet", "まだ保存されていません"),
|
||||
("Location", "場所"),
|
||||
("Sheets", "シート"),
|
||||
("Protect Workbook", "ブックの保護"),
|
||||
(
|
||||
"Sheet structure is locked: sheets can't be added, moved, renamed or deleted.",
|
||||
"シートの構成はロックされています。シートの追加、移動、名前の変更、削除はできません。",
|
||||
),
|
||||
(
|
||||
"Lock the sheet structure so sheets can't be added, moved, renamed or deleted.",
|
||||
"シートの構成をロックして、シートの追加、移動、名前の変更、削除をできないようにします。",
|
||||
),
|
||||
("Properties", "プロパティ"),
|
||||
("Title", "タイトル"),
|
||||
("Subject", "件名"),
|
||||
("Author", "作成者"),
|
||||
("Company", "会社名"),
|
||||
("Keywords", "キーワード"),
|
||||
("Description", "説明"),
|
||||
("No workbook is open.", "ブックが開かれていません。"),
|
||||
("Save as type", "ファイルの種類"),
|
||||
("Excel Workbook (*.xlsx)", "Excel ブック (*.xlsx)"),
|
||||
("CSV UTF-8 (Comma delimited) (*.csv)", "CSV UTF-8 (コンマ区切り) (*.csv)"),
|
||||
("Web Page (*.html)", "Web ページ (*.html)"),
|
||||
("PDF (*.pdf)", "PDF ファイル (*.pdf)"),
|
||||
("Download", "ダウンロード"),
|
||||
(
|
||||
"A CSV file, web page or PDF is a copy: the workbook keeps its own file.",
|
||||
"CSV ファイル、Web ページ、PDF はコピーです。ブックは元のファイルのままです。",
|
||||
),
|
||||
("Save the workbook under another name or in another folder.", "ブックを別の名前または別のフォルダーに保存します。"),
|
||||
("Print Active Sheets", "作業中のシートを印刷"),
|
||||
("Print Entire Workbook", "ブック全体を印刷"),
|
||||
("Fit Sheet on One Page", "シートを 1 ページに印刷"),
|
||||
("Page Setup…", "ページ設定…"),
|
||||
("Page {page} of {pages}", "{page} / {pages} ページ"),
|
||||
("Nothing to print.", "印刷する内容がありません。"),
|
||||
("Previous page", "前のページ"),
|
||||
("Next page", "次のページ"),
|
||||
("Create PDF", "PDF の作成"),
|
||||
("Save the sheet as a PDF document that keeps its page layout.", "ページ レイアウトを保ったまま、シートを PDF ドキュメントとして保存します。"),
|
||||
("Change File Type", "ファイルの種類の変更"),
|
||||
("CSV (Comma delimited)", "CSV (コンマ区切り)"),
|
||||
("Save the active sheet as comma-separated text.", "作業中のシートをコンマ区切りのテキストとして保存します。"),
|
||||
("Web Page (.html)", "Web ページ (.html)"),
|
||||
("Save the workbook as a web page.", "ブックを Web ページとして保存します。"),
|
||||
("Options|General", "全般"),
|
||||
("Options|Save", "保存"),
|
||||
("Show formula bar", "数式バーを表示する"),
|
||||
("Enable AutoComplete for cell values", "セルの値にオートコンプリートを使用する"),
|
||||
("Save .xlsx workbooks automatically after every change", "変更のたびに .xlsx ブックを自動的に保存する"),
|
||||
("Workbook calculation", "ブックの計算"),
|
||||
("Enable iterative calculation", "反復計算を行う"),
|
||||
("Calculation settings are saved with the workbook.", "計算の設定はブックと共に保存されます。"),
|
||||
];
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn translations_are_unique_and_preserve_unknown_text() {
|
||||
for (i, (en, ja)) in JAPANESE.iter().enumerate() {
|
||||
for (i, (en, ja)) in ja::CORE.iter().enumerate() {
|
||||
assert!(!ja.is_empty());
|
||||
assert!(JAPANESE.iter().take(i).all(|(other, _)| en != other));
|
||||
assert!(ja::CORE.iter().take(i).all(|(other, _)| en != other));
|
||||
assert_eq!(Language::En.tr(en), en.rsplit_once('|').map_or(*en, |(_, label)| label));
|
||||
}
|
||||
for (english, _) in JAPANESE {
|
||||
for (english, _) in ja::CORE {
|
||||
assert!(zh::translate(english).is_some_and(|text| !text.is_empty()), "missing Simplified Chinese: {english}");
|
||||
assert!(ko::translate(english).is_some_and(|text| !text.is_empty()), "missing Korean: {english}");
|
||||
assert!(ru::translate(english).is_some_and(|text| !text.is_empty()), "missing Russian: {english}");
|
||||
@@ -691,7 +275,7 @@ mod tests {
|
||||
let placeholders =
|
||||
|s: &str| s.split('{').skip(1).filter_map(|rest| rest.split_once('}').map(|(name, _)| name.to_string())).collect::<Vec<_>>();
|
||||
for language in Language::ALL {
|
||||
for (english, _) in JAPANESE {
|
||||
for (english, _) in ja::CORE {
|
||||
let label = english.rsplit_once('|').map_or(*english, |(_, label)| label);
|
||||
let text = language.tr(english);
|
||||
assert_eq!(placeholders(text), placeholders(label), "{language:?}: {english:?} => {text:?}");
|
||||
@@ -754,7 +338,7 @@ mod tests {
|
||||
// `tr` returns a found translation as it is, so a catalog that keeps `context|` in its
|
||||
// value shows it on screen (File › Options read "Options|Général" in French).
|
||||
for language in Language::ALL {
|
||||
for (english, _) in JAPANESE {
|
||||
for (english, _) in ja::CORE {
|
||||
let shown = language.tr(english);
|
||||
assert!(!shown.contains('|'), "{} shows a context prefix for {english}: {shown}", language.code());
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
+6
-3
@@ -1,6 +1,6 @@
|
||||
# Gaps
|
||||
|
||||
> **Last reviewed:** 2026-10-11 · **Last updated:** 2026-10-12 · **Change:** minor (rows auto-fit oversized fonts on open and whole-row/column formatting) · **Target:** Microsoft Excel (Microsoft 365)
|
||||
> **Last reviewed:** 2026-10-11 · **Last updated:** 2026-10-20 · **Change:** minor (the Japanese catalog covers the dialogs, messages and menus) · **Target:** Microsoft Excel (Microsoft 365)
|
||||
|
||||
Every known shortfall against Excel, one entry each, ranked by user impact (what blocks someone
|
||||
using GridCraft for real work first). This is the work list: pick from the top, check the open
|
||||
@@ -97,8 +97,10 @@ No alpha blockers: every core workflow passes the [alpha gate](roadmap.md#alpha-
|
||||
## After beta
|
||||
|
||||
### 11. No localization at all (L)
|
||||
- Ribbon-only catalog in five languages (#31, #104, #82; ~12% of strings each); dialogs, menus and
|
||||
messages English; en-US function names and separators (#45); German in PR #163. **Estimate:**
|
||||
- Catalog: ribbon-only in five languages (#31, #104, #82; ~12% of strings each), and 943 strings
|
||||
(~43%) in Japanese (10-17) and Brazilian Portuguese, including the dialog labels, messages, File
|
||||
view and menus. The remaining dialogs, menus and messages are English; en-US function names and
|
||||
separators (#45); German in PR #163. **Estimate:**
|
||||
100–165 h including #5. [localization-parity.md](localization-parity.md)
|
||||
|
||||
### 12. Get & Transform, external data, data model (F)
|
||||
@@ -168,6 +170,7 @@ No alpha blockers: every core workflow passes the [alpha gate](roadmap.md#alpha-
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-20 | minor | §11: the Japanese catalog covers the dialogs, messages and menus — 943 keys (~43%), matching the pt-BR coverage; a test keeps the two catalogs in step |
|
||||
| 2026-10-12 | minor | rows auto-fit oversized fonts on open and whole-row/column formatting (#833) |
|
||||
| 2026-10-12 | minor | Page Layout view: dragging margins on the rulers (#792) removed from the §14 remainder |
|
||||
| 2026-10-12 | minor | §13: Forecast Sheet Forecast Start (hindcast) landed (#785) |
|
||||
|
||||
+16
-14
@@ -1,6 +1,6 @@
|
||||
# Localization parity
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-19 · **Change:** minor (defined-name length limit counts characters, so long Arabic names are accepted; Table names are limited to 255 characters; right-to-left sheets in `.xls` files open right-to-left; text boxes and shapes keep right-to-left paragraph direction through XLSX save; Save as Web Page and copied HTML keep right-to-left; French and Serbian `context|label` translations no longer show the context) · **Target:** Microsoft Excel (Microsoft 365), Excel for Mac 16.113.4
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-20 · **Change:** minor (the Japanese catalog covers the dialogs, messages and menus) · **Target:** Microsoft Excel (Microsoft 365), Excel for Mac 16.113.4
|
||||
|
||||
Per-language status against Excel, which ships its UI in dozens of languages (Windows language
|
||||
packs cover 100+), with localized function names, argument separators, number and date formats,
|
||||
@@ -9,18 +9,19 @@ right-to-left sheets and full complex-script support. Part of
|
||||
|
||||
## Where we are (measured from source on `main`, after the 2026-10-10 merges)
|
||||
|
||||
- **A first catalog exists, for the ribbon only.** `crates/ui-egui/src/i18n.rs` (merged 10-10 in
|
||||
#31, #104, #82; German added 10-11) adds an interface-language preference that defaults to the
|
||||
system language (closes #20) and a View-tab switcher, with English-keyed lookup tables:
|
||||
Japanese 268 labels, Simplified Chinese, Korean, Russian, Brazilian Portuguese, German and Czech 266
|
||||
each. The tables are used by
|
||||
the ribbon, sheet tabs and widgets (`ribbon.rs`, `tabs.rs`, `widgets.rs`), the Format Cells
|
||||
dialog, every dialog title and the shared OK/Cancel buttons; the other dialogs, menus,
|
||||
context menus, task panes, status messages, command labels and function descriptions are still
|
||||
English literals. Untranslated labels fall back to English.
|
||||
- **A first catalog exists.** `crates/ui-egui/src/i18n.rs` (merged 10-10 in #31, #104, #82; German
|
||||
added 10-11) adds an interface-language preference that defaults to the system language (closes
|
||||
#20) and a View-tab switcher, with English-keyed lookup tables: Simplified Chinese, Korean,
|
||||
Russian, German and Czech 266–518 labels each, Brazilian Portuguese and Japanese 943 each. The
|
||||
tables are used by the ribbon, sheet tabs and widgets (`ribbon.rs`, `tabs.rs`, `widgets.rs`), the
|
||||
Format Cells dialog, every dialog title and the shared OK/Cancel buttons; Japanese and Portuguese
|
||||
also cover the other dialog labels, message boxes, Backstage/File-view items, template names and
|
||||
native menus (Japanese, 10-17: `i18n/ja.rs` keeps the shared 398-label core and adds 545 of those
|
||||
strings). The remaining menus, context menus, task panes, status messages, command labels and
|
||||
function descriptions are still English literals. Untranslated labels fall back to English.
|
||||
- **About 2,200 user-visible strings** in all (heuristic source scan: ~1,700 UI and command
|
||||
strings plus ~500 function descriptions), so each shipped language covers **~12%** (measured
|
||||
count / estimated total).
|
||||
strings plus ~500 function descriptions), so the ribbon-only languages cover **~12%** and
|
||||
Japanese and Portuguese **~43%** (measured count / estimated total).
|
||||
- **en-US only formulas and formats.** Function names, `,` argument separator, `.` decimal
|
||||
separator, en-US number and date formats (`crates/numfmt` says "en-US only"). Users ask for
|
||||
localized function names and `;` separators (#45). German with localized numbers and formulas
|
||||
@@ -54,9 +55,9 @@ separators, number/date formats, machine translation with agent review, and scri
|
||||
| Hindi | hi | 0 (0%) | no | Devanagari: **no shaping** | no | none | 12–18 h |
|
||||
| Arabic | ar | 0 (0%) | no | **no shaping, no RTL UI**; Sheet Right-to-Left mirrors the grid (#146) | no | none | 25–35 h |
|
||||
| French | fr | 0 (0%) | no | Latin: yes | no | none | 6–10 h |
|
||||
| Portuguese | pt-BR | 923 (~42%) | dialogs and tooltips (dialogs take effect with #669) | Latin: yes | no | menus, File view, dialogs | 2–4 h |
|
||||
| Portuguese | pt-BR | 943 (~43%) | dialogs and tooltips (dialogs take effect with #669) | Latin: yes | no | menus, File view, dialogs | 2–4 h |
|
||||
| Indonesian | id | 0 (0%) | no | Latin: yes | no | none | 5–8 h |
|
||||
| Japanese | ja | 268 (~12%) | no | CJK system-font fallback; IME unverified; no furigana display | no | menus only | 8–12 h |
|
||||
| Japanese | ja | 943 (~43%) | dialogs and messages | CJK system-font fallback; IME unverified; no furigana display | no | menus, File view, dialogs, messages | 3–5 h |
|
||||
| German | de | 266 (~12%) | no | Latin: yes | no | menus only | 4–8 h |
|
||||
| Italian | it | 971 (~44%) | dialogs, tooltips, pivot pane | Latin: yes | no | menus, File view, dialogs, pivot pane | 3–5 h |
|
||||
| Korean | ko | 266 (~12%) | no | Hangul via the CJK fallback; IME unverified | no | menus only | 6–10 h |
|
||||
@@ -84,6 +85,7 @@ language (none so far) and of localized function names.
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-20 | minor | Japanese catalog (`i18n/ja.rs`) covers every key the Brazilian Portuguese catalog translates: the 398-label shared core moved verbatim plus 545 dialog, message, Backstage and menu strings — 943 keys, ~12% → ~43%. A test parses `pt.rs`'s source, so the two catalogs can't drift apart again. Portuguese re-measured at 943 (was 923) |
|
||||
| 2026-10-15 | minor | Italian catalog (`i18n/it.rs`, 971 entries, ~44%): every key the Brazilian Portuguese catalog translates plus the PivotTable Fields pane strings; `it` locale tags (it-IT, it-CH…) resolve to Italian. Labels follow Excel's Italian terminology; native-speaker review still pending |
|
||||
| 2026-10-19 | minor | Defined-name length counts characters, not bytes: Arabic names up to 255 letters are accepted, and Create from Selection keeps long Arabic headers |
|
||||
| 2026-10-19 | minor | Table names are limited to 255 Unicode characters |
|
||||
|
||||
Reference in new issue
Block a user