From 655cf1a6c8a466fa47eefb82f75ac40050a04974 Mon Sep 17 00:00:00 2001 From: development-singlecores Date: Wed, 21 Jan 2026 19:13:02 +0900 Subject: [PATCH 1/2] fix: right Shift key not working on Japanese keyboards --- .../src/renderer/src/components/keyboard/index.tsx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/desktop/src/renderer/src/components/keyboard/index.tsx b/desktop/src/renderer/src/components/keyboard/index.tsx index 739e4aa..eff8080 100644 --- a/desktop/src/renderer/src/components/keyboard/index.tsx +++ b/desktop/src/renderer/src/components/keyboard/index.tsx @@ -46,7 +46,11 @@ export const Keyboard = (): ReactElement => { event.preventDefault() event.stopPropagation() - const code = event.code + // Fallback for Japanese keyboards with Microsoft IME where event.code is empty for right Shift + let code = event.code + if (!code && event.key === 'Shift') { + code = 'ShiftRight' + } if (pressedKeys.current.has(code)) { return } @@ -78,7 +82,11 @@ export const Keyboard = (): ReactElement => { event.preventDefault() event.stopPropagation() - const code = event.code + // Fallback for Japanese keyboards with Microsoft IME where event.code is empty for right Shift + let code = event.code + if (!code && event.key === 'Shift') { + code = 'ShiftRight' + } // Handle AltGr state for Windows if (altGrState.current?.active) { From e6cec2ddf266419fb4183020bd0116c2439b2602 Mon Sep 17 00:00:00 2001 From: development-singlecores Date: Wed, 21 Jan 2026 19:13:25 +0900 Subject: [PATCH 2/2] feat: add Japanese localization --- desktop/src/renderer/src/i18n/languages.ts | 1 + desktop/src/renderer/src/i18n/locales/ja.ts | 114 ++++++++++++++++++++ 2 files changed, 115 insertions(+) create mode 100644 desktop/src/renderer/src/i18n/locales/ja.ts diff --git a/desktop/src/renderer/src/i18n/languages.ts b/desktop/src/renderer/src/i18n/languages.ts index 9ce989d..52eb9b0 100644 --- a/desktop/src/renderer/src/i18n/languages.ts +++ b/desktop/src/renderer/src/i18n/languages.ts @@ -7,6 +7,7 @@ const languages = [ { key: 'nl', name: 'Nederlands' }, { key: 'be', name: 'België' }, { key: 'ko', name: '한국어' }, + { key: 'ja', name: '日本語' }, { key: 'pt_br', name: 'Português (Brasil)' }, { key: 'pl', name: 'Polski' } ] diff --git a/desktop/src/renderer/src/i18n/locales/ja.ts b/desktop/src/renderer/src/i18n/locales/ja.ts new file mode 100644 index 0000000..703ef15 --- /dev/null +++ b/desktop/src/renderer/src/i18n/locales/ja.ts @@ -0,0 +1,114 @@ +const ja = { + translation: { + camera: { + tip: '認証を待っています...', + denied: '認証に失敗しました', + authorize: + 'リモートデスクトップにはカメラの許可が必要です。設定でカメラの許可を与えてください。', + failed: 'カメラへの接続に失敗しました。もう一度お試しください。' + }, + modal: { + title: 'USBデバイスを選択', + selectVideo: 'ビデオ入力デバイスを選択してください', + selectSerial: 'シリアルデバイスを選択してください', + selectBaudRate: 'ボーレートを選択してください' + }, + menu: { + serial: 'シリアル', + keyboard: 'キーボード', + mouse: 'マウス', + serialPort: { + device: 'シリアルデバイス', + baudRate: 'ボーレート', + noDeviceFound: 'シリアルデバイスが見つかりません', + clickToSelect: 'クリックしてシリアルポートを選択' + } + }, + video: { + resolution: '解像度', + scale: '拡大縮小', + customResolution: 'カスタム', + device: 'デバイス', + custom: { + title: 'カスタム解像度', + width: '幅', + height: '高さ', + confirm: 'OK', + cancel: 'キャンセル' + } + }, + keyboard: { + paste: '貼り付け', + virtualKeyboard: 'キーボード', + shortcut: { + title: 'ショートカット', + custom: 'カスタム', + capture: 'ここをクリックしてショートカットをキャプチャ', + clear: 'クリア', + save: '保存' + } + }, + mouse: { + cursor: { + title: 'カーソル', + pointer: 'ポインター', + grab: 'グラブ', + cell: 'セル', + hide: '非表示' + }, + mode: 'マウスモード', + absolute: '絶対モード', + relative: '相対モード', + direction: 'ホイール方向', + scrollUp: '上にスクロール', + scrollDown: '下にスクロール', + speed: 'ホイール速度', + fast: '速い', + slow: '遅い', + requestPointer: '相対モードを使用中です。マウスポインターを取得するにはデスクトップをクリックしてください。', + jiggler: { + title: 'マウスジグラー', + enable: '有効', + disable: '無効' + } + }, + settings: { + title: '設定', + appearance: { + title: '外観', + language: '言語', + menu: 'メニューバー', + menuTips: '起動時にメニューバーを開く' + }, + update: { + title: '更新を確認', + latest: '最新バージョンを使用しています。', + outdated: '更新が利用可能です。今すぐ更新しますか?', + downloading: 'ダウンロード中...', + installing: 'インストール中...', + failed: '更新に失敗しました。もう一度お試しください。', + confirm: '確認', + cancel: 'キャンセル' + }, + about: { + title: 'バージョン情報', + version: 'バージョン', + community: 'コミュニティ' + }, + reset: { + title: '設定をリセット', + description: 'すべてのアプリケーション設定をデフォルト値にリセットします', + warning: '警告', + warningDescription: 'この操作は元に戻せません。すべてのカスタム設定が失われます。', + button: 'すべての設定をリセット', + confirmTitle: 'リセットの確認', + confirmMessage: + 'すべての設定をリセットしてもよろしいですか?この操作は元に戻せません。', + confirm: 'リセット', + cancel: 'キャンセル' + } + } + } +} + +export default ja