Right-click did nothing under the win7 skin, and then swallowed the next
click. 7.css declares `position: relative` on ul[role=menu] and the `skin`
layer outranks `utilities`, so Tailwind's `.fixed` lost: [style.left/top.px]
became flow offsets from the menu's static position — the last child of the
h-screen frame — and every menu rendered below the viewport, unreachable
behind overflow:hidden. Its backdrop is a plain <div>, unmatched by 7.css, so
that stayed genuinely fixed and ate the following click. Regressed in 0ae2a62,
when the menu adopted 7.css's real markup.
Restated `position: fixed` in skinfix, scoped to a new `w7-ctx` marker so
7.css's own menus keep theirs. scripts/menu-probe.ts is the regression test:
it renders the menu at declared coordinates, pixel-scans whether it landed
there, and carries a marker-less control menu (the bug verbatim) as its own
discriminator. A resting pixel diff cannot see this class of bug.
Selection band goes flat: --w7-sel-bg/-bd (#cbe8f6/#26a0da) is what Explorer
actually painted, where 7.css reused --w7-el-grad-h, its Aero element-hover
ramp. That var is left alone — buttons and tabs still want the gloss. The
unfocused pane gets the grey idle band; the band still never disappears with
focus, it only weakens. Harness diff confirms the change touches selection
rows and nothing else, in both themes.
New workspace-tab right-click menu in both skins: New Tab, Close Tab, Close
Other Tabs, Close Tabs to the Right, Disconnect. The target id travels inside
the action string because the right-clicked tab is not necessarily the active
one. Illegal entries are disabled rather than omitted, the way Win7 greyed
out — and since 7.css's [aria-disabled] handling is CSS-only, the keyboard
paths check the flag themselves.
Co-Authored-By: Claude <noreply@anthropic.com>
316 lines
12 KiB
TypeScript
316 lines
12 KiB
TypeScript
// Japanese translations. Fall back to English for missing keys.
|
||
// TODO(i18n): AI draft — needs native-speaker review.
|
||
export const ja = {
|
||
common: {
|
||
cancel: "キャンセル",
|
||
save: "保存",
|
||
close: "閉じる",
|
||
delete: "削除",
|
||
rename: "名前を変更",
|
||
create: "作成",
|
||
apply: "適用",
|
||
choose: "選択…",
|
||
connect: "接続",
|
||
local: "ローカル",
|
||
},
|
||
app: {
|
||
notConnectedTitle: "アプリに接続されていません",
|
||
notConnectedBody: "このページは通常のブラウザで動作しています。デスクトップアプリを起動して使用してください。",
|
||
managerOpen: "接続マネージャーが開いています。",
|
||
showConnections: "接続を表示",
|
||
},
|
||
tabBar: {
|
||
connections: "接続",
|
||
manageConnections: "接続を管理",
|
||
newTab: "新しいタブ ({mod}T)",
|
||
closeTab: "タブを閉じる ({mod}W)",
|
||
options: "オプション",
|
||
update: "アップデートあり",
|
||
updating: "更新中",
|
||
restartToUpdate: "再起動して適用",
|
||
updateTooltip: "アップデートがあります: miniSCP {version}",
|
||
},
|
||
options: {
|
||
title: "オプション",
|
||
language: "言語",
|
||
system: "システム",
|
||
skin: {
|
||
label: "外観",
|
||
modern: "モダン",
|
||
win7: "Windows 7",
|
||
restartHint: "次回 miniSCP を起動したときに適用されます",
|
||
},
|
||
theme: { label: "テーマ", system: "システム", light: "ライト", dark: "ダーク" },
|
||
tone: { label: "トーン", dark: "ダーク", darker: "より暗く" },
|
||
accent: { label: "アクセント" },
|
||
accentNames: {
|
||
graphite: "グラファイト",
|
||
blue: "ブルー",
|
||
indigo: "インディゴ",
|
||
purple: "パープル",
|
||
rose: "ローズ",
|
||
orange: "オレンジ",
|
||
green: "グリーン",
|
||
teal: "ティール",
|
||
},
|
||
fileIcons: { label: "ファイルアイコン", plain: "シンプル", multi: "カラー" },
|
||
interface: { label: "インターフェース", smaller: "縮小", larger: "拡大", reset: "100%に戻す" },
|
||
speedUnit: { label: "速度の単位" },
|
||
transfers: { label: "転送", single: "1件ずつ", multi: "複数" },
|
||
atOnce: "同時数",
|
||
editor: { label: "エディタ", builtin: "内蔵", custom: "カスタム" },
|
||
systemDefault: "システムの既定",
|
||
resetDefault: "既定に戻す",
|
||
finishedTransfers: { label: "完了した転送", autoClear: "自動クリア", keep: "保持" },
|
||
},
|
||
kinds: {
|
||
folder: "フォルダ",
|
||
symlink: "シンボリックリンク",
|
||
file: "ファイル",
|
||
image: "画像",
|
||
audio: "オーディオ",
|
||
video: "動画",
|
||
archive: "アーカイブ",
|
||
code: "コード",
|
||
document: "ドキュメント",
|
||
},
|
||
columns: {
|
||
name: "名前",
|
||
size: "サイズ",
|
||
mtime: "更新日時",
|
||
kind: "種類",
|
||
rights: "権限",
|
||
owner: "所有者",
|
||
group: "グループ",
|
||
},
|
||
panel: {
|
||
choosePanel: "このパネルに表示する内容を選択",
|
||
copy: "送信",
|
||
copyToRight: "右のパネルへ送信 (F5)",
|
||
copyToLeft: "左のパネルへ送信 (F5)",
|
||
edit: "編集",
|
||
editFile: "ファイルを編集 (F4)",
|
||
rename: "名前を変更 (F2)",
|
||
newFolder: "新規フォルダ (F7)",
|
||
newFile: "新規ファイル",
|
||
permissions: "アクセス権",
|
||
delete: "削除",
|
||
deleteHint: "削除 (F8 / Del)",
|
||
parentDir: "親フォルダ (Backspace)",
|
||
refresh: "更新",
|
||
clearFilter: "フィルターをクリア (Esc)",
|
||
sshConfig: "~/.ssh/config",
|
||
connectingTo: "{name} に接続中…",
|
||
emptyDir: "空のフォルダ",
|
||
noMatches: "一致なし",
|
||
matches: { other: "{count} 件一致 · Esc" },
|
||
},
|
||
connMgr: {
|
||
title: "接続",
|
||
importWinscp: "WinSCP からインポート…",
|
||
importWinscpHint: "WinSCP.ini エクスポートからセッションをインポート",
|
||
newConnection: "接続",
|
||
newConnectionHint: "新規接続",
|
||
newStack: "グループ",
|
||
newStackHint: "新規グループ",
|
||
expand: "展開",
|
||
collapse: "折りたたむ",
|
||
renameStack: "グループ名を変更",
|
||
deleteStack: "グループを削除",
|
||
openStack: "グループをタブで開く",
|
||
empty: "空",
|
||
connectionsHeader: "接続",
|
||
noneTitle: "保存された接続はまだありません。",
|
||
noneBody: "作成するか、WinSCP セッションをインポートしてください。",
|
||
name: "名前",
|
||
namePlaceholder: "マイサーバー",
|
||
host: "ホスト",
|
||
port: "ポート",
|
||
stack: "グループ",
|
||
stackNone: "(なし)",
|
||
username: "ユーザー名",
|
||
remotePath: "リモートパス(任意)",
|
||
remotePathPlaceholder: "ホームディレクトリ",
|
||
auth: "認証",
|
||
authPassword: "パスワード",
|
||
authKey: "秘密鍵",
|
||
password: "パスワード",
|
||
privateKeyFile: "秘密鍵ファイル",
|
||
passphrase: "パスフレーズ(任意)",
|
||
localDir: "ローカルディレクトリ(任意)",
|
||
localDirPlaceholder: "~/projects/my-server",
|
||
localDirHint: "もう一方のパネルがローカルで未操作のとき、ここが開きます。",
|
||
more: "詳細…",
|
||
less: "閉じる…",
|
||
selectPrompt: "接続を選択するか、新しく作成してください。",
|
||
newStackTitle: "新規グループ",
|
||
newStackPrompt: "グループ名",
|
||
renameStackTitle: "グループ名を変更",
|
||
deleteStackTitle: "グループを削除",
|
||
deleteStackBody: 'グループ "{name}" を削除しますか?含まれる接続は残り、グループ解除されます。',
|
||
deleteConnectionTitle: "接続を削除",
|
||
deleteConnectionBody: '"{name}" を削除しますか?',
|
||
},
|
||
editor: {
|
||
noFileTitle: "編集するファイルがありません",
|
||
noFileBody: "このウィンドウはエディタコンテキストなしで開かれました。アプリからファイルを開いてください。",
|
||
wrap: "折り返し",
|
||
wrapHint: "長い行を折り返す — 行番号を非表示 ({alt}Z)",
|
||
findHint: "検索 ({mod}F)",
|
||
findPlaceholder: "ファイル内を検索",
|
||
prevMatch: "前の一致 (⇧↵)",
|
||
nextMatch: "次の一致 (↵)",
|
||
closeHint: "閉じる (Esc)",
|
||
disconnected: "{name} から切断されました — 保存は失敗しますが、テキストはこのウィンドウに保持されます。",
|
||
cantOpen: "{name} を開けません",
|
||
closeWindow: "ウィンドウを閉じる",
|
||
shortcuts: "{mod}S 保存 · {mod}F 検索 · {mod}W 閉じる",
|
||
lines: { other: "{count} 行" },
|
||
close: "閉じる",
|
||
save: "保存",
|
||
saveChangesTitle: '"{name}" への変更を保存しますか?',
|
||
saveChangesBody: "保存しないと変更は失われます。",
|
||
dontSave: "保存しない",
|
||
countLabel: "{total} 件中 {current} 件目",
|
||
noMatches: "一致なし",
|
||
},
|
||
transfer: {
|
||
summary: "{active} 件実行中 · {finished} 件完了",
|
||
clearFinished: "完了分をクリア",
|
||
cancel: "キャンセル",
|
||
dismiss: "閉じる",
|
||
showDetails: "転送の詳細を表示",
|
||
copying: "{name} をコピー中 · {percent}%{speed}",
|
||
queued: "{count} 件待機中",
|
||
failed: { other: "{count} 件の転送が失敗" },
|
||
finished: "転送が完了しました",
|
||
ready: "準備完了",
|
||
items: "{count} 項目",
|
||
selected: "{count} 件選択中",
|
||
queuedState: "待機中",
|
||
scanning: "スキャン中…",
|
||
failedState: "失敗",
|
||
cancelled: "キャンセル済み",
|
||
completedFiles: { other: "{count} 個のファイル · {size}" },
|
||
left: "残り {eta}",
|
||
},
|
||
dialogs: {
|
||
chmodTitle: "アクセス権",
|
||
chmodItems: "{count} 項目",
|
||
read: "読み取り",
|
||
write: "書き込み",
|
||
execute: "実行",
|
||
roleOwner: "所有者",
|
||
roleGroup: "グループ",
|
||
roleOthers: "その他",
|
||
octal: "8進数",
|
||
mergeFolder: "フォルダを結合",
|
||
replace: "置き換える",
|
||
merge: "結合",
|
||
mergeAll: "すべて結合",
|
||
replaceAll: "すべて置き換える",
|
||
skip: "スキップ",
|
||
skipAll: "すべてスキップ",
|
||
ofTotal: "{total} 件中 {index} 件目",
|
||
overwriteDirBody: "コピー先に同名のフォルダが既にあります。結合すると中のファイルが置き換わる可能性があります。",
|
||
overwriteFileBody: "コピー先に同名のファイルが既にあります。",
|
||
source: "コピー元",
|
||
destination: "コピー先",
|
||
newer: "新しい",
|
||
},
|
||
toasts: {
|
||
movedToTrash: '"{name}" をゴミ箱に移動しました',
|
||
editingExternal: "{name} を編集中 — 保存すると自動でアップロードされます",
|
||
nothingToCopy: "コピーする項目がありません(シンボリックリンクはスキップされます)",
|
||
nothingToCopyAllSkipped: "コピーする項目がありません — 競合する項目はすべてスキップされました",
|
||
sameFolder: "両方のパネルが同じフォルダを表示しています",
|
||
sameFile: '"{name}" をスキップしました — 同じファイルです',
|
||
typeMismatch: '"{name}" をスキップしました — 別の種類の項目があります',
|
||
transferFailed: '転送 "{name}" が失敗しました: {error}',
|
||
unknownError: "不明なエラー",
|
||
saved: "{name} を保存しました",
|
||
disconnectedReason: "{title}: 切断されました ({reason})",
|
||
imported: { other: "{count} 件の接続をインポートしました" },
|
||
importedIntoStacks: { other: "({count} 件の新規グループに)" },
|
||
importedSkipped: "({skipped} 件スキップ)",
|
||
leftoverTitle: "残った編集済みファイル",
|
||
leftoverMore: "、他 {count} 件",
|
||
leftoverBody: {
|
||
other: "前回のセッションで {count} 件の一時編集ファイルが残っています({names})。クリアしますか?",
|
||
},
|
||
leftoverClear: "クリア",
|
||
},
|
||
fileActions: {
|
||
deleteTitle: "削除",
|
||
deleteBody: "{what} を削除しますか?フォルダは再帰的に削除されます。この操作は取り消せません。",
|
||
deleteConfirm: "削除",
|
||
renameTitle: '"{name}" の名前を変更',
|
||
renameConfirm: "名前を変更",
|
||
newFolderTitle: "新規フォルダ",
|
||
newFolderPlaceholder: "フォルダ名",
|
||
newFileTitle: "新規ファイル",
|
||
newFilePlaceholder: "ファイル名",
|
||
createConfirm: "作成",
|
||
itemsCount: "{count} 項目",
|
||
},
|
||
menu: {
|
||
about: "{app} について",
|
||
checkForUpdates: "アップデートを確認…",
|
||
quit: "終了",
|
||
file: "ファイル",
|
||
newTab: "新しいタブ",
|
||
closeTab: "タブを閉じる",
|
||
newFolder: "新規フォルダ",
|
||
newFile: "新規ファイル",
|
||
editFile: "ファイルを編集",
|
||
connect: "接続",
|
||
connectionManager: "接続マネージャー…",
|
||
edit: "編集",
|
||
view: "表示",
|
||
refresh: "更新",
|
||
window: "ウィンドウ",
|
||
},
|
||
ctx: {
|
||
size: "サイズ",
|
||
modified: "更新日時",
|
||
kind: "種類",
|
||
rights: "権限",
|
||
owner: "所有者",
|
||
group: "グループ",
|
||
revealFinder: "Finder で表示",
|
||
revealExplorer: "エクスプローラーで表示",
|
||
revealFileManager: "ファイルマネージャーで表示",
|
||
moveToTrash: "ゴミ箱に移動",
|
||
moveToRecycleBin: "ごみ箱に移動",
|
||
newFolder: "新規フォルダ",
|
||
newFile: "新規ファイル",
|
||
refresh: "更新",
|
||
open: "開く",
|
||
openDefault: "既定のアプリで開く",
|
||
edit: "編集",
|
||
copyToOther: "もう一方のパネルへ送信",
|
||
rename: "名前を変更",
|
||
permissions: "アクセス権",
|
||
copyPath: "パスをコピー",
|
||
delete: "削除",
|
||
columns: "列",
|
||
tabNew: "新しいタブ",
|
||
tabClose: "タブを閉じる",
|
||
tabCloseOthers: "他のタブを閉じる",
|
||
tabCloseRight: "右側のタブを閉じる",
|
||
tabDisconnect: "切断",
|
||
trashTooltip: "ここからゴミ箱に入れた項目は Finder の「戻す」を利用できません",
|
||
},
|
||
errors: {
|
||
sshAgentUnavailable: "ssh-agent が利用できません(SSH_AUTH_SOCK が未設定)",
|
||
identityFileNotFound: "認証鍵ファイルが見つかりません: {path}",
|
||
sessionNotConnected: 'セッション "{id}" は接続されていません',
|
||
localCannotDisconnect: "ローカルセッションは切断できません",
|
||
notADirectory: '"{path}" は存在し、フォルダではありません',
|
||
sameFileTransfer: '"{name}": コピー元とコピー先が同じファイルです',
|
||
sameFileNoName: "コピー元とコピー先が同じファイルです",
|
||
folderOntoItself: "フォルダをそれ自身の上にコピーすることはできません",
|
||
folderIntoItself: "フォルダをそれ自身の中にコピーすることはできません",
|
||
},
|
||
} as const;
|