Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
721 changes: 360 additions & 361 deletions src/components/CadenceInput.tsx

Large diffs are not rendered by default.

10 changes: 6 additions & 4 deletions src/components/KeyCaptureInput.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import {
} from "../hotkeys";
import { isAlphabeticKeyboardKey } from "../keyboardKeyCase";
import type { KeyboardKeyCase, MouseButton } from "../store";
import { useTranslation } from "../i18n";

interface Props {
value: string;
Expand Down Expand Up @@ -52,6 +53,7 @@ export default function KeyCaptureInput({
keyboardKeyCase,
onMouseButtonCapture,
}: Props) {
const { t } = useTranslation();
const [listening, setListening] = useState(false);
const inputRef = useRef<HTMLInputElement | null>(null);
const rightClickStartedWhileListeningRef = useRef(false);
Expand All @@ -69,14 +71,14 @@ export default function KeyCaptureInput({
}, []);

const displayText = useMemo(() => {
if (listening) return "Press a key...";
if (!value) return "Select key";
if (listening) return t("hotkey.pressKey");
if (!value) return t("hotkey.selectKey");
return applyKeyboardKeyCase(
value,
formatHotkeyForDisplay(value, layoutMap),
keyboardKeyCase,
);
}, [keyboardKeyCase, layoutMap, listening, value]);
}, [keyboardKeyCase, layoutMap, listening, value, t]);

const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {
event.preventDefault();
Expand Down Expand Up @@ -163,7 +165,7 @@ export default function KeyCaptureInput({
onKeyDown={handleKeyDown}
onContextMenu={handleContextMenu}
spellCheck={false}
title="Right click input to clear"
title={t("hotkey.rightClickToClear")}
style={{
cursor: "pointer",
textAlign: "center",
Expand Down
4 changes: 2 additions & 2 deletions src/components/panels/SimplePanel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -143,8 +143,8 @@ export default function SimplePanel({ settings, update }: SimplePanelProps) {
}));

const inputTypeOptions = [
{ value: "mouse", label: "Mouse" },
{ value: "keyboard", label: "Key" },
{ value: "mouse", label: t("options.inputType.mouse") },
{ value: "keyboard", label: t("options.inputType.keyboard") },
] as const;
const canToggleKeyboardKeyCase = isAlphabeticKeyboardKey(
settings.keyboardKey,
Expand Down
5 changes: 4 additions & 1 deletion src/i18n.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,9 @@ import es from "./locales/es.json";
import fr from "./locales/fr.json";
import de from "./locales/de.json";
import he from "./locales/he.json";
import cn from "./locales/cn.json";

export const LANGUAGE_CODES = ["en", "es", "fr", "ar", "de", "he"] as const;
export const LANGUAGE_CODES = ["en", "es", "fr", "ar", "de", "he", "cn"] as const;
export type Language = (typeof LANGUAGE_CODES)[number];

export const DEFAULT_LANGUAGE: Language = "en";
Expand All @@ -27,6 +28,7 @@ export const LANGUAGE_OPTIONS: readonly { code: Language; label: string }[] = [
{ code: "ar", label: "العربية" },
{ code: "de", label: "Deutsch"},
{ code: "he", label: "עברית"},
{ code: "cn", label: "简体中文"},
];

type TranslationTree = typeof en;
Expand All @@ -44,6 +46,7 @@ const translations: Record<Language, TranslationTree> = {
ar,
de,
he,
cn,
};

type I18nContextValue = {
Expand Down
49 changes: 34 additions & 15 deletions src/locales/ar.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
"fr": "Français",
"ar": "العربية",
"de": "Deutsch",
"he": "עברית"
"he": "עברית",
"cn": "简体中文"
},
"common": {
"on": "تشغيل",
Expand Down Expand Up @@ -64,13 +65,13 @@
"runOnStartupDescription": "بدء تشغيل BlurAutoClicker تلقائياً مع Windows، مصغراً إلى شريط المهام.",
"sectionAppearance": "المظهر",
"sectionAppearanceDescription": "تفضيلات السمة ولون التمييز.",
"theme": "السمة",
"themeDescription": "التبديل بين السمات الداكنة والفاتحة.",
"advancedLayout": "تخطيط الوضع المتقدم",
"advancedLayoutDescription": "اختر ما إذا كان النقر التسلسلي يظهر بجانب عناصر التحكم المتقدمة الأخرى أو أسفل النقر المزدوج.",
"advancedLayoutWide": "عريض",
"advancedLayoutTall": "طويل",
"accentColor": "لون التمييز",
"theme": "السمة",
"themeDescription": "التبديل بين السمات الداكنة والفاتحة.",
"advancedLayout": "تخطيط الوضع المتقدم",
"advancedLayoutDescription": "اختر ما إذا كان النقر التسلسلي يظهر بجانب عناصر التحكم المتقدمة الأخرى أو أسفل النقر المزدوج.",
"advancedLayoutWide": "عريض",
"advancedLayoutTall": "طويل",
"accentColor": "لون التمييز",
"accentColorDescription": "تخصيص لون التمييز الأساسي المستخدم للحالات النشطة.",
"sectionPresets": "الإعدادات المسبقة",
"sectionPresetsDescription": "حفظ أو تحديث أو إعادة تسمية أو حذف تكوينات النقر القابلة لإعادة الاستخدام.",
Expand Down Expand Up @@ -115,12 +116,12 @@
"cadenceDescription": "يتحكم في سرعة توليد النقرات: إما كنقرات لكل فترة (المعدل) أو كتأخير ثابت بين النقرات (التأخير).",
"clicksPer": "نقرات لكل",
"hotkey": "اختصار لوحة المفاتيح",
"hotkeyDescription": "اختر مجموعة المفاتيح التي تبدأ وتوقف النقر. استخدم التبديل للضغط للتشغيل/الإيقاف، أو الاستمرار للنقر فقط أثناء الضغط.",
"mouseButton": "زر الماوس",
"mouseButtonDescription": "اختر زر الماوس الذي سيضغط عليه النقر في كل حدث نقر.",
"keyboardKey": "مفتاح لوحة المفاتيح",
"keyboardKeyDescription": "اختر مفتاح لوحة المفاتيح الذي سيضغط عليه النقر في كل حدث نقر.",
"dutyCycle": "مدة النقر",
"hotkeyDescription": "اختر مجموعة المفاتيح التي تبدأ وتوقف النقر. استخدم التبديل للضغط للتشغيل/الإيقاف، أو الاستمرار للنقر فقط أثناء الضغط.",
"mouseButton": "زر الماوس",
"mouseButtonDescription": "اختر زر الماوس الذي سيضغط عليه النقر في كل حدث نقر.",
"keyboardKey": "مفتاح لوحة المفاتيح",
"keyboardKeyDescription": "اختر مفتاح لوحة المفاتيح الذي سيضغط عليه النقر في كل حدث نقر.",
"dutyCycle": "مدة النقر",
"dutyCycleDescription": "اختر مدة الضغط على زر الماوس خلال كل نقرة. 50% عند نقرة واحدة في الثانية = 0.5 ثانية ضغط، 0.5 ثانية تحرير",
"speedVariation": "تباين السرعة",
"speedVariationDescription": "يعشوّي سرعة النقر بالنسبة المئوية المحددة.",
Expand Down Expand Up @@ -168,7 +169,8 @@
"sequenceAddingIn": "سيتم الإضافة خلال",
"sequenceCapturing": "جارٍ الالتقاط...",
"customStopZoneAddingIn": "سيتم التعيين خلال",
"customStopZoneCapturing": "جارٍ التعيين..."
"customStopZoneCapturing": "جارٍ التعيين...",
"perClick": "لكل نقرة"
},
"options": {
"interval": {
Expand Down Expand Up @@ -197,6 +199,20 @@
"Middle": "نقر وسط",
"Right": "نقر أيمن"
},
"inputType": {
"mouse": "ماوس",
"keyboard": "لوحة مفاتيح"
},
"rateInputMode": {
"rate": "معدل",
"duration": "تأخير"
},
"timeUnits": {
"h": "س",
"m": "د",
"s": "ث",
"ms": "مللي ث"
},
"timeUnitShort": {
"s": "ث",
"m": "د",
Expand All @@ -205,7 +221,10 @@
},
"hotkey": {
"pressKeys": "اضغط على المفاتيح...",
"pressKey": "اضغط على مفتاح...",
"empty": "انقر واضغط على المفاتيح",
"selectKey": "اختر مفتاح",
"rightClickToClear": "انقر بزر الماوس الأيمن لحذف",
"key": {
"up": "أعلى",
"down": "أسفل",
Expand Down
Loading