From ad32e6a847a23d4431b11ff200b69a39f790ce85 Mon Sep 17 00:00:00 2001 From: midasdf <205497066+midasdf@users.noreply.github.com> Date: Sat, 17 Oct 2026 09:00:18 +0900 Subject: [PATCH] i18n(ja): translate every dialog, message and menu string the pt-BR catalog covers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Japanese catalog still lived inline in i18n.rs with its ribbon and widget labels, so with the interface set to 日本語 the dialog titles and labels, message boxes, Backstage/File-view items, template names and native menus showed in English. This moves it to i18n/ja.rs and adds the 545 keys the Brazilian Portuguese catalog translates beyond it: 943 keys, the coverage pt-BR has (~43% of ~2,200 strings), in Excel for Mac 日本語版 wording. CORE keeps the shared reference set every catalog covers, verbatim and in the same order (the cross-catalog coverage test still points at it); DIALOGS holds the new strings, and the lookup checks it first. One test parses pt.rs's source so the two catalogs cannot drift apart again, one checks that every key is unique across the two lists and every value is translated, and one spot-checks the high-value strings. Docs: the Japanese row and the "Where we are" bullet in docs/localization-parity.md (943, ~43%), a revision row, the ROADMAP Languages paragraph and progress log, and gaps.md §11. --- ROADMAP.md | 11 +- crates/ui-egui/src/i18n.rs | 428 +------------ crates/ui-egui/src/i18n/ja.rs | 1115 +++++++++++++++++++++++++++++++++ docs/gaps.md | 8 +- docs/localization-parity.md | 30 +- 5 files changed, 1149 insertions(+), 443 deletions(-) create mode 100644 crates/ui-egui/src/i18n/ja.rs diff --git a/ROADMAP.md b/ROADMAP.md index 070552d07..7adcbaeb2 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -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-17 · **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) | diff --git a/crates/ui-egui/src/i18n.rs b/crates/ui-egui/src/i18n.rs index 98919f8a4..5392ba999 100644 --- a/crates/ui-egui/src/i18n.rs +++ b/crates/ui-egui/src/i18n.rs @@ -13,6 +13,7 @@ mod cs; mod de; mod es; mod fr; +mod ja; mod ko; mod pt; mod ru; @@ -120,7 +121,7 @@ impl Language { let translated = match self { Self::En => None, Self::Es => es::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), @@ -173,435 +174,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}"); @@ -687,7 +271,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()); } diff --git a/crates/ui-egui/src/i18n/ja.rs b/crates/ui-egui/src/i18n/ja.rs new file mode 100644 index 000000000..61cb8242f --- /dev/null +++ b/crates/ui-egui/src/i18n/ja.rs @@ -0,0 +1,1115 @@ +//! Japanese translations for the interface strings in `i18n.rs`; labels follow Excel for Mac's +//! Japanese wording, and anything absent falls back to English. +//! +//! [`CORE`] is the shared reference catalog every language translates: the ribbon, sheet tabs, +//! widgets and the most common dialog labels. [`DIALOGS`] adds the dialog titles and labels, +//! message boxes, Backstage/File-view items, template names and native-menu strings the Brazilian +//! Portuguese catalog (`pt.rs`) covers on top of it. The two lists never overlap. + +/// English label → Japanese, the shared reference set every catalog covers. +pub(super) const CORE: &[(&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", "印刷"), + ("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", "ファイル"), + ("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.", "計算の設定はブックと共に保存されます。"), +]; + +/// English label → Japanese for the dialog, message, Backstage and menu strings beyond [`CORE`]. +pub(super) const DIALOGS: &[(&str, &str)] = &[ + ("OK", "OK"), + ("Cancel", "キャンセル"), + ("Don't Save", "保存しない"), + ("Open…", "開く…"), + ("Show password", "パスワードの表示"), + ("Start a new workbook", "新しいブックの作成"), + ("Household Budget", "家計簿"), + ("Quarterly Sales Dashboard", "四半期売上ダッシュボード"), + ("Gradebook", "成績表"), + ("this workbook", "このブック"), + ("This workbook", "このブック"), + ("Do you want to save the changes you made to {title}?", "{title} への変更を保存しますか?"), + ("Save a copy as .{format}", ".{format} としてコピーを保存"), + ("Select a chart first.", "先にグラフを選択してください。"), + ("Text Box", "テキスト ボックス"), + ("Select Data", "データの選択"), + ("Row Height", "行の高さ"), + ("Column Width", "列の幅"), + ("Standard Width", "標準の幅"), + ("Rename Sheet", "シート名の変更"), + ("Move or Copy", "移動またはコピー"), + ("Protect Sheet", "シートの保護"), + ("Protect Structure and Windows", "構造とウィンドウの保護"), + ("Unprotect Workbook", "ブック保護の解除"), + ("Unprotect Sheet", "シート保護の解除"), + ("Password", "パスワード"), + ("Unhide", "再表示"), + ("Paste Special", "形式を選択して貼り付け"), + ("Series", "数列"), + ("New Comment", "新しいコメント"), + ("Insert Hyperlink", "ハイパーリンクの挿入"), + ("Create Sparklines", "スパークラインの作成"), + ("Page Setup", "ページ設定"), + ("Convert Text to Columns", "区切り位置指定ウィザード"), + ("Remove Duplicates", "重複の削除"), + ("Goal Seek", "ゴール シーク"), + ("Create Forecast Worksheet", "予測シートの作成"), + ("Solver Parameters", "ソルバー パラメーター"), + ("Solver Results", "ソルバーの結果"), + ("Edit Name", "名前の編集"), + ("New Name", "新しい名前"), + ("Format Cells", "セルの書式設定"), + ("Formula Builder", "数式ビルダー"), + ("Find and Replace", "検索と置換"), + ("Go To", "ジャンプ"), + ("Insert Calculated Field", "計算のフィールドの挿入"), + ("Go To Special", "セルを選択"), + ("Name Manager", "名前の管理"), + ("Conditional Formatting Rules Manager", "条件付き書式ルールの管理"), + ("Search Commands", "コマンドの検索"), + ("Agent Control", "エージェント制御"), + ("About GridCraft", "GridCraft について"), + ("Insert Chart", "グラフの挿入"), + ("Select Data Source", "データ ソースの選択"), + ("Action Journal", "操作ジャーナル"), + ("Macros", "マクロ"), + ("Workbook Statistics", "ブックの統計情報"), + ("Accessibility", "アクセシビリティ"), + ("Chart Title", "グラフ タイトル"), + ("Place Picture in Cell", "セルに画像を配置"), + ("Place Picture over Cells", "セルの上に画像を配置"), + ("Pick From List", "リストから選択"), + ("Save a Copy", "コピーを保存"), + ("Save Changes?", "変更を保存しますか?"), + ("Shift cells right", "セルを右に移動"), + ("Shift cells down", "セルを下に移動"), + ("Shift cells left", "セルを左に移動"), + ("Shift cells up", "セルを上に移動"), + ("Entire row", "行全体"), + ("Entire column", "列全体"), + ("Row height (pixels):", "行の高さ (ピクセル):"), + ("Column width (characters):", "列の幅 (文字数):"), + ("Standard column width (pixels):", "標準の列幅 (ピクセル):"), + ("Name:", "名前:"), + ("Before sheet (position, 0 = first):", "シートの前 (位置、0 = 先頭):"), + ("Create a copy", "コピーを作成する"), + ("Sheets: {sheets}", "シート: {sheets}"), + ("Password (optional):", "パスワード (省略可能):"), + ("Password:", "パスワード:"), + ("Allow all users of this sheet to:", "このシートのすべてのユーザーに許可する操作:"), + ("Format cells", "セルの書式設定"), + ("Format columns", "列の書式設定"), + ("Format rows", "行の書式設定"), + ("Insert rows", "行の挿入"), + ("Delete rows", "行の削除"), + ("Use AutoFilter", "オートフィルターを使用する"), + (" (password, unlocked)", " (パスワード、ロック解除)"), + (" (password)", " (パスワード)"), + ("No ranges yet.", "範囲はまだありません。"), + ("Ranges that stay editable when the sheet is protected:", "シートが保護されている間も編集できる範囲:"), + ("Action", "操作"), + ("Modify", "変更"), + ("Unlock with password", "パスワードでロック解除"), + ("Title:", "タイトル:"), + ("Refers to cells:", "参照先:"), + ("Range password:", "範囲のパスワード:"), + ("New title (Modify):", "新しいタイトル (変更):"), + ("Remove the password (Modify)", "パスワードの削除 (変更)"), + ("'{file}' is protected.", "'{file}' は保護されています。"), + ("Unhide sheet:", "再表示するシート:"), + ("Hidden: {sheets}", "非表示: {sheets}"), + ("All", "すべて"), + ("Formulas (F)", "数式 (F)"), + ("Values (V)", "値 (V)"), + ("Formats (T)", "書式 (T)"), + ("Comments and notes (C)", "コメントとメモ (C)"), + ("Validation", "入力規則"), + ("All except borders", "罫線を除くすべて"), + ("Column widths", "列幅"), + ("Formulas and number formats", "数式と数値の書式"), + ("Values and number formats", "値と数値の書式"), + ("Operation", "演算"), + ("Add", "加算"), + ("Subtract", "減算"), + ("Multiply", "乗算"), + ("Divide", "除算"), + ("Skip blanks", "空白セルを無視する"), + ("Transpose (E)", "行列を入れ替える (E)"), + ("Series in", "方向"), + ("Columns", "列"), + ("Rows", "行"), + ("Type", "種類"), + ("Linear", "線形"), + ("Growth", "等比"), + ("Date unit", "日付単位"), + ("Day", "日"), + ("Weekday", "曜日"), + ("Month", "月"), + ("Year", "年"), + ("Step value:", "増分値:"), + ("Stop value:", "停止値:"), + ("Start a conversation:", "会話を開始:"), + ("Note:", "メモ:"), + ("Display:", "表示文字列:"), + ("Link to (web address, e-mail or Sheet!A1):", "リンク先 (Web アドレス、電子メール アドレス、または Sheet!A1):"), + ("ScreenTip:", "スクリーン ヒント:"), + ("Data Range:", "データ範囲:"), + ("Location Range:", "配置先:"), + ("Markers", "マーカー"), + ("Footer:", "フッター:"), + ("Left margin (in):", "左余白 (インチ):"), + ("Right margin (in):", "右余白 (インチ):"), + ("Top margin (in):", "上余白 (インチ):"), + ("Bottom margin (in):", "下余白 (インチ):"), + ("Header (in):", "ヘッダー (インチ):"), + ("Footer (in):", "フッター (インチ):"), + ("Tab", "タブ"), + ("Semicolon", "セミコロン"), + ("Comma", "コンマ"), + ("Space", "スペース"), + ("Other:", "その他:"), + ("Treat consecutive delimiters as one", "連続した区切り文字は 1 文字として扱う"), + ("Destination:", "表示先:"), + ("My data has headers", "先頭行をデータの見出しとして使用する"), + ("Columns (blank = all, e.g. A,C):", "列 (空白 = すべて、例: A,C):"), + ("Timeline range (blank: first column of the selection):", "タイムラインの範囲 (空白: 選択範囲の最初の列):"), + ("Values range (blank: second column of the selection):", "値の範囲 (空白: 選択範囲の 2 番目の列):"), + ("Confidence interval", "信頼区間"), + ("Confidence level (%):", "信頼水準 (%):"), + ("Seasonality (auto, 0 for none, or a season length):", "周期性 (自動、なしの場合は 0、または 1 周期の長さ):"), + ("Fill missing points using", "欠落しているポイントの補完方法"), + ("Interpolation", "補間"), + ("Zeros", "ゼロ"), + ("Aggregate duplicates using", "重複を集計する方法"), + ("Average", "平均"), + ("Count", "個数"), + ("CountA", "空白を除く個数"), + ("Max", "最大値"), + ("Median", "中央値"), + ("Min", "最小値"), + ("Sum", "合計"), + ("Product", "積"), + ("Include forecast statistics", "予測の統計情報を含める"), + ("Chart", "グラフ"), + ("Line chart", "折れ線グラフ"), + ("Column chart", "縦棒グラフ"), + ("At each change in (column letter):", "基準 (列記号):"), + ("Use function", "集計の方法"), + ("Add subtotal to (columns, e.g. C,D):", "集計するフィールド (列、例: C,D):"), + ("Magnification", "倍率"), + ("Custom (%):", "ユーザー設定 (%):"), + ("Scope (Workbook or sheet name):", "範囲 (ブックまたはシート名):"), + ("Comment:", "コメント:"), + ("Refers to:", "参照先:"), + ("Allow", "入力値の種類"), + ("Any value", "任意の値"), + ("Whole number", "整数"), + ("Decimal", "小数"), + ("List", "リスト"), + ("Text length", "文字列の長さ"), + ("between", "次の値の間"), + ("not between", "次の値の間以外"), + ("equal to", "指定の値に等しい"), + ("not equal to", "指定の値に等しくない"), + ("greater than", "指定の値より大きい"), + ("less than", "指定の値より小さい"), + ("greater than or equal to", "指定の値以上"), + ("less than or equal to", "指定の値以下"), + ("Minimum / Source / Formula:", "最小値 / 元の値 / 数式:"), + ("Maximum:", "最大値:"), + ("Ignore blank", "空白を無視する"), + ("In-cell dropdown", "セル内のドロップダウン リスト"), + ("Input message:", "入力メッセージ:"), + ("Error style", "エラー メッセージのスタイル"), + ("Stop", "停止"), + ("Warning", "警告"), + ("Information", "情報"), + ("Error message:", "エラー メッセージ:"), + ("Format cells that are (value):", "セルの値が次の値のとき書式設定する (値):"), + ("and:", "と:"), + ("Format cells that contain the text:", "次の文字列を含むセルを書式設定:"), + ("Format cells that contain a date occurring:", "日付が次の期間にあるセルを書式設定:"), + ("Today", "今日"), + ("Tomorrow", "明日"), + ("In the last 7 days", "過去 7 日間"), + ("Last week", "先週"), + ("This week", "今週"), + ("Next week", "来週"), + ("Last month", "先月"), + ("This month", "今月"), + ("Next month", "来月"), + ("Format values where this formula is true:", "数式を使用して、書式設定するセルを決定:"), + ("with", "次の書式を適用"), + ("Light Red Fill with Dark Red Text", "濃い赤の文字、薄い赤の背景"), + ("Yellow Fill with Dark Yellow Text", "濃い黄色の文字、黄色の背景"), + ("Green Fill with Dark Green Text", "濃い緑の文字、緑の背景"), + ("Light Red Fill", "薄い赤の背景"), + ("Red Text", "赤の文字"), + ("Red Border", "赤い枠線"), + ("Formula:", "数式:"), + ("Select", "選択"), + ("Blanks", "空白セル"), + ("Errors", "エラー値"), + ("Numbers", "数値"), + ("Current region", "現在の領域"), + ("Last cell", "最後のセル"), + ("Visible cells only", "可視セルのみ"), + ("Conditional formats", "条件付き書式"), + ("Data validation", "入力規則"), + ("Horizontal axis title:", "横軸ラベル:"), + ("Vertical axis title:", "縦軸ラベル:"), + ("No picture selected", "画像が選択されていません"), + ("Picture file path (PNG or JPEG):", "画像ファイルのパス (PNG または JPEG):"), + ("Description (optional):", "説明 (省略可能):"), + ("Fits inside the selected cell and moves with its content.", "選択したセル内に収まり、内容と一緒に移動します。"), + ("Choose a PNG or JPEG no larger than 16 MB.", "16 MB 以下の PNG または JPEG を選択してください。"), + ("About", "バージョン情報"), + ("Contributors", "貢献者"), + ("Models", "モデル"), + ("Version {version}", "バージョン {version}"), + ("Join the ArtCraft Discord", "ArtCraft Discord に参加"), + ("This workbook has no scripts or macros.", "このブックにはスクリプトもマクロもありません。"), + ("(unnamed)", "(名前なし)"), + ("— VBA project (preserved, not run)", "— VBA プロジェクト (保持されますが、実行されません)"), + ("— 1 step", "— 1 ステップ"), + ("— {steps} steps", "— {steps} ステップ"), + ("Alignment", "配置"), + ("Font", "フォント"), + ("Border", "罫線"), + ("Format Cells|Fill", "塗りつぶし"), + ("Protection", "保護"), + ("Category:", "分類:"), + ("Sample", "サンプル"), + ("Type (custom format code):", "種類 (ユーザー定義の書式記号):"), + ("Vertical", "縦位置"), + ("Justify", "両端揃え"), + ("Center Across Selection", "選択範囲内で中央"), + ("Distributed", "均等割り付け"), + ("Top", "上"), + ("Bottom", "下"), + ("Indent", "インデント"), + ("Orientation (degrees)", "方向 (度)"), + ("Wrap text", "折り返して全体を表示する"), + ("Shrink to fit", "縮小して全体を表示する"), + ("Bold", "太字"), + ("Italic", "斜体"), + ("None", "なし"), + ("Single", "下線"), + ("Double", "二重下線"), + ("Single Accounting", "会計 (一重)"), + ("Double Accounting", "会計 (二重)"), + ("Superscript", "上付き"), + ("Subscript", "下付き"), + ("Color:", "色:"), + ("Outline", "外枠"), + ("Diagonal ↘", "斜め (右下がり)"), + ("Diagonal ↗", "斜め (右上がり)"), + ("none", "なし"), + ("thin", "細線"), + ("medium", "中線"), + ("thick", "太線"), + ("dashed", "破線"), + ("dotted", "点線"), + ("double", "二重線"), + ("Background Color:", "背景色:"), + ("Locked", "ロック"), + ("Hidden", "非表示"), + ("Search:", "検索:"), + ("e.g. lookup, average, date", "例: 検索、平均、日付"), + ("Date & Time", "日付/時刻"), + ("Lookup & Reference", "検索/行列"), + ("Math & Trig", "数学/三角"), + ("Statistical", "統計"), + ("Engineering", "エンジニアリング"), + ("Database", "データベース"), + ("Compatibility", "互換性"), + ("Web", "Web"), + ("Cube", "キューブ"), + ("Add-in and Automation", "アドインと自動化"), + ("Find", "検索"), + ("Replace", "置換"), + ("Find what:", "検索する文字列:"), + ("Replace with:", "置換後の文字列:"), + ("Match case", "大文字と小文字を区別する"), + ("Match entire cell contents", "セル内容が完全に同一である場合のみ検索"), + ("Within workbook", "ブック内"), + ("Replace All", "すべて置換"), + ("Find All", "すべて検索"), + ("Find Next", "次を検索"), + ("All done. We made {count} replacements.", "完了しました。{count} 件を置換しました。"), + ("{count} cell(s) found", "{count} 個のセルが見つかりました"), + ("Reference:", "参照:"), + ("Special…", "セルを選択…"), + ("My list has headers", "先頭行をデータの見出しとして使用する"), + ("Sort by", "最優先されるキー"), + ("Then by", "次に優先されるキー"), + ("Cell Values", "セルの値"), + ("Cell Color", "セルの色"), + ("A to Z", "昇順"), + ("Z to A", "降順"), + ("+ Add Level", "+ レベルの追加"), + ("New…", "新規作成…"), + ("Edit…", "編集…"), + ("Name", "名前"), + ("Value", "値"), + ("Refers To", "参照先"), + ("Scope", "範囲"), + ("Workbook", "ブック"), + ("No names defined", "定義された名前はありません"), + ("Recommended Charts", "推奨グラフ"), + ("All Charts", "すべてのグラフ"), + ("Clustered Column", "集合縦棒"), + ("Stacked Column", "積み上げ縦棒"), + ("100% Stacked Column", "100% 積み上げ縦棒"), + ("Clustered Bar", "集合横棒"), + ("Stacked Bar", "積み上げ横棒"), + ("100% Stacked Bar", "100% 積み上げ横棒"), + ("Line", "折れ線"), + ("Line with Markers", "マーカー付き折れ線"), + ("Stacked Line", "積み上げ折れ線"), + ("Pie", "円"), + ("Doughnut", "ドーナツ"), + ("Area", "面"), + ("Stacked Area", "積み上げ面"), + ("Scatter", "散布図"), + ("Scatter with Lines", "直線付き散布図"), + ("Radar", "レーダー"), + ("Histogram", "ヒストグラム"), + ("Waterfall", "ウォーターフォール"), + ("Funnel", "じょうご"), + ("Combo", "複合"), + ("Chart data range:", "グラフ データ範囲:"), + ("Legend Entries (Series)", "凡例項目 (系列)"), + ("Series{n}", "系列{n}"), + ("Keep", "残す"), + ("Remove", "削除"), + ("Horizontal (Category) Axis Labels:", "横軸 (項目) ラベル:"), + ("There are no conditional formatting rules on this sheet.", "このシートには条件付き書式ルールがありません。"), + ("applies to", "適用先"), + ("Type a command, e.g. freeze, chart, bold…", "コマンドを入力 (例: ウィンドウ枠の固定、グラフ、太字)…"), + ("Set cell:", "目的セル:"), + ("To value:", "目標値:"), + ("By changing cell:", "変化させるセル:"), + ("Goal Seeking found a solution: {value}", "ゴール シークで解が見つかりました: {value}"), + ("Analysis Tools", "分析ツール"), + ("Anova: Single Factor", "分散分析: 一元配置"), + ("Correlation", "相関"), + ("Covariance", "共分散"), + ("Descriptive Statistics", "基本統計量"), + ("Exponential Smoothing", "指数平滑"), + ("F-Test Two-Sample for Variances", "F 検定: 2 標本を使った分散の検定"), + ("Moving Average", "移動平均"), + ("Rank and Percentile", "順位と百分位数"), + ("Regression", "回帰"), + ("t-Test: Paired Two Sample for Means", "t 検定: 一対の標本による平均の検定"), + ("t-Test: Two-Sample Assuming Equal Variances", "t 検定: 等分散を仮定した 2 標本による検定"), + ("t-Test: Two-Sample Assuming Unequal Variances", "t 検定: 非等分散を仮定した 2 標本による検定"), + ("Output options", "出力オプション"), + ("Output Range:", "出力範囲:"), + ("New Worksheet Ply:", "新規ワークシート:"), + ("Grouped By:", "グループ化の基準:"), + ("Labels in first row", "先頭行をラベルとして使用"), + ("Input Range:", "入力範囲:"), + ("Variable 1 Range:", "変数 1 の範囲:"), + ("Variable 2 Range:", "変数 2 の範囲:"), + ("Summary statistics", "概要統計"), + ("Confidence Level for Mean (%), blank for none:", "平均の信頼度 (%、なしの場合は空白):"), + ("Kth Largest (blank for none):", "K 番目に大きい値 (なしの場合は空白):"), + ("Kth Smallest (blank for none):", "K 番目に小さい値 (なしの場合は空白):"), + ("Bin Range (blank for automatic bins):", "級の範囲 (空白の場合は自動):"), + ("Pareto (sorted histogram)", "パレート図 (並べ替えられたヒストグラム)"), + ("Cumulative Percentage", "累積比率"), + ("Alpha:", "アルファ:"), + ("Input Y Range:", "入力 Y 範囲:"), + ("Input X Range:", "入力 X 範囲:"), + ("Constant is Zero", "定数に 0 を使用"), + ("Confidence Level (%):", "信頼度 (%):"), + ("Residuals", "残差"), + ("Standardized Residuals", "標準化された残差"), + ("Normal Probability", "正規確率グラフ"), + ("Interval:", "間隔:"), + ("Standard Errors", "標準誤差"), + ("Damping factor:", "減衰係数:"), + ("Hypothesized Mean Difference:", "仮説平均との差異:"), + ("Set Objective:", "目的セルの設定:"), + ("To:", "目標値:"), + ("Value Of:", "値:"), + ("By Changing Variable Cells:", "変数セルの変更:"), + ("Subject to the Constraints:", "制約条件の対象:"), + ("Make Unconstrained Variables Non-Negative", "制約のない変数を非負数にする"), + ("Select a Solving Method:", "解決方法の選択:"), + ("GRG Nonlinear", "GRG 非線形"), + ("Solve", "解決"), + ("Keep Solver Solution", "ソルバー解を保存"), + ("Restore Original Values", "元の値を復元"), + ("The spelling check is complete for the entire sheet.", "シート全体のスペル チェックが完了しました。"), + ("Not in Dictionary ({cell}):", "辞書にない単語 ({cell}):"), + ("Suggestions:", "候補:"), + ("(No suggestions)", "(候補なし)"), + ("Ignore Once", "1 回無視"), + ("Add to Dictionary", "辞書に追加"), + ("Change", "変更"), + ("Change All", "すべて変更"), + ("$ English (United States)", "$ 英語 (米国)"), + ("Add Chart Element", "グラフ要素の追加"), + ("Align Left", "左揃え"), + ("Align Right", "右揃え"), + ("Bottom Align", "下揃え"), + ("Calculate Now (F9)", "再計算実行 (F9)"), + ("Calculate Sheet (⇧F9)", "シートの再計算 (⇧F9)"), + ("Calculation Options", "計算方法の設定"), + ("Cell Styles", "セルのスタイル"), + ("Change Chart Type", "グラフの種類の変更"), + ("Check Accessibility", "アクセシビリティ チェック"), + ("Clear Filter", "フィルターのクリア"), + ("Column or Bar", "縦棒または横棒"), + ("Comments pane", "コメント ウィンドウ"), + ("Convert the last ink stroke to a shape", "最後のインクのストロークを図形に変換"), + ("Convert to Range", "範囲に変換"), + ("Copy", "コピー"), + ("Custom Sort", "ユーザー設定の並べ替え"), + ("Cut", "切り取り"), + ("Define Name…", "名前の定義…"), + ("Delete Comment", "コメントの削除"), + ("Delete Sheet", "シートの削除"), + ("Delete chart", "グラフの削除"), + ("Delete…", "削除…"), + ("Dismiss", "閉じる"), + ("Down", "下へ"), + ("Edit chart title", "グラフ タイトルの編集"), + ("Erase ink strokes", "インクのストロークを消去"), + ("Every command run in this session (replayable)", "このセッションで実行されたすべてのコマンド (再生可能)"), + ("Expand formula bar", "数式バーの展開"), + ("Filter (⌘⇧F)", "フィルター (⌘⇧F)"), + ("Filter by Selected Cell's Value", "選択したセルの値でフィルター"), + ("Find & Select", "検索と選択"), + ("Flash Fill (⌘E)", "フラッシュ フィル (⌘E)"), + ("Forecast Sheet", "予測シート"), + ("Forecast end (date or number; blank: a third of the history):", "予測の終了 (日付または数値、空白の場合は履歴の 3 分の 1):"), + ("Format Chart pane", "グラフの書式設定ウィンドウ"), + ("Format as Table", "テーブルとして書式設定"), + ("Hide", "非表示"), + ("Hide Sheet", "シートの非表示"), + ("Hierarchy & more", "階層とその他"), + ("Highlighter", "蛍光ペン"), + ("How agents drive GridCraft (MCP / control channel)", "エージェントによる GridCraft の操作 (MCP / 制御チャネル)"), + ("Import a text or CSV file", "テキストまたは CSV ファイルのインポート"), + ("Insert Function", "関数の挿入"), + ("Insert Function (⇧F3)", "関数の挿入 (⇧F3)"), + ("Insert Link (⌘K)", "リンクの挿入 (⌘K)"), + ("Insert Sheet", "シートの挿入"), + ("Insert Slicer", "スライサーの挿入"), + ("Insert a picture", "画像の挿入"), + ("Insert a slicer to filter a table", "テーブルをフィルターするスライサーの挿入"), + ("Insert an icon", "アイコンの挿入"), + ("Insert…", "挿入…"), + ("Line or Area", "折れ線または面"), + ("Link…", "リンク…"), + ("Macros and scripts in this workbook (Alt+F8)", "このブックのマクロとスクリプト (Alt+F8)"), + ("Middle Align", "中央揃え"), + ("More commands", "その他のコマンド"), + ("Move or Copy Sheet…", "シートの移動またはコピー…"), + ("New sheet (⇧F11)", "新しいシート (⇧F11)"), + ("Next sheet", "次のシート"), + ("Page Breaks", "改ページ"), + ("Paper Size", "用紙サイズ"), + ("Paste (⌘V)", "貼り付け (⌘V)"), + ("Pick From Drop-down List…", "ドロップダウン リストから選択…"), + ("Pie or Doughnut", "円またはドーナツ"), + ("Previous sheet", "前のシート"), + ("Print Area", "印刷範囲"), + ("Print Titles", "印刷タイトル"), + ("Protect Workbook structure", "ブックの構造の保護"), + ("Redo (⌘Y)", "やり直し (⌘Y)"), + ("Save (⌘S)", "上書き保存 (⌘S)"), + ("Scatter or Bubble", "散布図またはバブル"), + ("Search and run any command", "任意のコマンドを検索して実行"), + ("Search commands (⌘⇧Space)", "コマンドの検索 (⌘⇧Space)"), + ("Select and move ink and shapes", "インクと図形の選択と移動"), + ("Series…", "数列…"), + ("Share: export or save a copy", "共有: エクスポートまたはコピーの保存"), + ("Show Formulas (⌃`)", "数式の表示 (⌃`)"), + ("Slicer", "スライサー"), + ("Sort & Filter", "並べ替えとフィルター"), + ("Spelling (F7)", "スペル チェック (F7)"), + ("Statistic", "統計"), + ("Switch Row/Column", "行/列の切り替え"), + ("Table (⌘T)", "テーブル (⌘T)"), + ("Table Styles", "テーブル スタイル"), + ("Text to Columns", "区切り位置"), + ("The output range already holds data. Replace it with the report?", "出力範囲には既にデータが入っています。レポートで置き換えますか?"), + ("Top Align", "上揃え"), + ("Undo (⌘Z)", "元に戻す (⌘Z)"), + ("Undo list", "元に戻す操作の一覧"), + ("Unhide Sheet…", "シートの再表示…"), + ("Up", "上へ"), + ("Version, contributors and the AI models that helped", "バージョン、貢献者、支援した AI モデル"), + ("What-If Analysis", "What-If 分析"), + ("Zoom In", "拡大"), + ("Zoom Out", "縮小"), + ("Zoom to 100%", "100% で表示"), + ("Zoom to Selection", "選択範囲に合わせる"), + ("Zoom…", "ズーム…"), + ("£ English (United Kingdom)", "£ 英語 (英国)"), + ("¥ Japanese", "¥ 日本語"), + ("€ Euro", "€ ユーロ"), + ("Tab|Insert", "挿入"), + ("AutoSave", "自動保存"), + ("Insert\nSlicer", "スライサーの\n挿入"), + ("Pen\nBlack", "ペン\n黒"), + ("Pen\nBlue", "ペン\n青"), + ("Pen\nRed", "ペン\n赤"), + ("Protect\nSheet", "シートの\n保護"), + ("Watch\nWindow", "ウォッチ\nウィンドウ"), + ("Workbook\nStatistics", "ブックの\n統計情報"), +]; + +/// Translates an interface label; `None` for a label the catalog does not know, so `i18n.rs` can +/// fall back to English. Dialog strings come first, the shared core second. +pub(super) fn translate(text: &str) -> Option<&'static str> { + DIALOGS.iter().chain(CORE).find(|(english, _)| *english == text).map(|(_, translated)| *translated) +} + +#[cfg(test)] +mod tests { + use std::collections::HashSet; + + use super::*; + + /// Every key the catalog holds, `DIALOGS` first. + fn catalog_keys() -> impl Iterator { + DIALOGS.iter().chain(CORE).map(|(english, _)| *english) + } + + /// The decoded value of the Rust string literal starting at byte `start` (its opening `"`), and + /// the byte index just past its closing quote. Escapes (`\n`, `\"`, `\\`, `\t`, `\u{…}`) are + /// decoded, so the keys compare equal to the ones in the tables above. + fn string_literal(source: &str, start: usize) -> Option<(String, usize)> { + if !source[start..].starts_with('"') { + return None; + } + let mut value = String::new(); + let mut chars = source[start + 1..].char_indices(); + while let Some((offset, c)) = chars.next() { + match c { + '"' => return Some((value, start + 1 + offset + 1)), + '\\' => match chars.next().map(|(_, c)| c) { + Some('n') => value.push('\n'), + Some('t') => value.push('\t'), + Some('r') => value.push('\r'), + Some('0') => value.push('\0'), + Some('\\') => value.push('\\'), + Some('"') => value.push('"'), + Some('\'') => value.push('\''), + Some('u') => { + let mut hex = String::new(); + for (_, c) in chars.by_ref() { + if c == '}' { + break; + } + if c != '{' { + hex.push(c); + } + } + if let Some(c) = u32::from_str_radix(&hex, 16).ok().and_then(char::from_u32) { + value.push(c); + } + } + // A line continuation (backslash, newline, indentation) adds nothing. + _ => {} + }, + _ => value.push(c), + } + } + None + } + + /// Every key `pt.rs` translates, read out of its source with a small scanner: a match arm is a + /// string literal whose `=>` is followed by another string literal, which covers the block form + /// (`"key" => { "value" }`) as well. Parsing the real source keeps the two catalogs from + /// drifting apart again instead of checking a remembered count. + fn portuguese_keys() -> Vec { + let source = include_str!("pt.rs"); + let mut literals: Vec<(String, usize, usize)> = Vec::new(); + let mut i = 0; + while i < source.len() { + let rest = &source[i..]; + if rest.starts_with("//") { + i += rest.find('\n').unwrap_or(rest.len()); + continue; + } + if rest.starts_with('"') { + let (value, end) = string_literal(source, i).unwrap(); + literals.push((value, i, end)); + i = end; + continue; + } + i += rest.chars().next().unwrap().len_utf8(); + } + let mut keys = Vec::new(); + for pair in literals.windows(2) { + let (key, _, end) = &pair[0]; + let start = pair[1].1; + let gap = source[*end..start].trim(); + if gap == "=>" || gap == "=> {" { + keys.push(key.clone()); + } + } + keys + } + + #[test] + fn keys_are_unique_and_every_value_is_translated() { + let mut seen = HashSet::new(); + for (english, japanese) in DIALOGS.iter().chain(CORE) { + assert!(!japanese.is_empty(), "empty translation for {english:?}"); + assert!(japanese.chars().any(|c| !c.is_whitespace()), "blank translation for {english:?}"); + assert!(seen.insert(*english), "duplicate key across CORE and DIALOGS: {english:?}"); + } + assert_eq!(seen.len(), catalog_keys().count()); + assert_eq!(CORE.len(), 398, "the shared reference set every catalog covers"); + assert_eq!(DIALOGS.len(), 545, "the dialog, message and menu strings beyond it"); + assert_eq!(catalog_keys().count(), 943); + } + + #[test] + fn covers_every_key_the_portuguese_catalog_translates() { + let portuguese = portuguese_keys(); + assert_eq!(portuguese.len(), 943, "pt.rs's arms changed: add the new keys here and update the count"); + let japanese: HashSet<&str> = catalog_keys().collect(); + for key in &portuguese { + assert!(japanese.contains(key.as_str()), "the Portuguese catalog translates {key:?}, the Japanese one does not"); + } + assert_eq!(japanese.len(), portuguese.len(), "the two catalogs hold the same key set"); + } + + #[test] + fn high_value_strings_use_excel_japanese_wording() { + for (english, japanese) in [ + ("OK", "OK"), + ("Cancel", "キャンセル"), + ("Don't Save", "保存しない"), + ("Text Box", "テキスト ボックス"), + ("Row Height", "行の高さ"), + ("Column Width", "列の幅"), + ("Sort", "並べ替え"), + ("Filter", "フィルター"), + ("Conditional Formatting", "条件付き書式"), + ("Do you want to save the changes you made to {title}?", "{title} への変更を保存しますか?"), + ("Save a copy as .{format}", ".{format} としてコピーを保存"), + ("Format Cells|Fill", "塗りつぶし"), + ("Insert\nSlicer", "スライサーの\n挿入"), + ] { + assert_eq!(translate(english), Some(japanese), "{english:?}"); + assert_eq!(crate::i18n::Language::Ja.tr(english), japanese, "{english:?}"); + } + // A `context|label` key shows only its label in English; an unknown label keeps the text. + assert_eq!(crate::i18n::Language::En.tr("Format Cells|Fill"), "Fill"); + assert_eq!(crate::i18n::Language::Ja.tr("Not in any catalog"), "Not in any catalog"); + } +} diff --git a/docs/gaps.md b/docs/gaps.md index 03e8672c5..85cd0f021 100644 --- a/docs/gaps.md +++ b/docs/gaps.md @@ -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-17 · **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) diff --git a/docs/localization-parity.md b/docs/localization-parity.md index 64876633d..ee846e6c3 100644 --- a/docs/localization-parity.md +++ b/docs/localization-parity.md @@ -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-17 · **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 | | Korean | ko | 266 (~12%) | no | Hangul via the CJK fallback; IME unverified | no | menus only | 6–10 h | | Vietnamese | vi | 0 (0%) | no | Latin with stacked diacritics: unverified | no | none | 6–10 h | @@ -83,6 +84,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-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 | | 2026-10-19 | minor | Right-to-left sheets in legacy `.xls` files (common in older Arabic workbooks) open right-to-left |