From e6dd34e31dba05e68ac66664c9fdc27285b273d2 Mon Sep 17 00:00:00 2001 From: yozuru Date: Sun, 20 Apr 2025 04:30:45 +0800 Subject: [PATCH] feat: internationalize toolbar menu items and associated Modals --- src/components/modals/binaural/binaural.tsx | 74 ++++++--- src/components/modals/breathing/breathing.tsx | 6 +- .../modals/breathing/exercise/exercise.tsx | 33 ++-- .../modals/isochronic/isochronic.tsx | 67 ++++++-- src/components/modals/presets/list/list.tsx | 57 +++++-- src/components/modals/presets/new/new.tsx | 11 +- src/components/modals/presets/presets.tsx | 5 +- .../modals/share-link/share-link.tsx | 29 ++-- src/components/modals/shared/shared.tsx | 46 +++--- src/components/modals/shortcuts/shortcuts.tsx | 93 +++++------ .../modals/sleep-timer/sleep-timer.tsx | 80 +++++---- .../toolbar/menu/items/binaural.tsx | 10 +- .../toolbar/menu/items/breathing-exercise.tsx | 6 +- .../toolbar/menu/items/countdown.tsx | 6 +- src/components/toolbar/menu/items/donate.tsx | 8 +- .../toolbar/menu/items/isochronic.tsx | 12 +- src/components/toolbar/menu/items/notepad.tsx | 5 +- .../toolbar/menu/items/pomodoro.tsx | 6 +- src/components/toolbar/menu/items/presets.tsx | 5 +- src/components/toolbar/menu/items/share.tsx | 5 +- .../toolbar/menu/items/shortcuts.tsx | 6 +- src/components/toolbar/menu/items/shuffle.tsx | 6 +- .../toolbar/menu/items/sleep-timer.tsx | 5 +- src/components/toolbar/menu/items/source.tsx | 6 +- src/components/toolbar/menu/items/todo.tsx | 6 +- src/components/toolbar/menu/menu.tsx | 12 +- .../toolbox/countdown/countdown.tsx | 52 +++--- src/components/toolbox/notepad/notepad.tsx | 34 ++-- src/components/toolbox/pomodoro/pomodoro.tsx | 25 +-- .../toolbox/pomodoro/setting/setting.tsx | 24 +-- src/components/toolbox/todo/form/form.tsx | 7 +- src/components/toolbox/todo/todo.tsx | 7 +- .../toolbox/todo/todos/todo/todo.tsx | 18 ++- src/components/toolbox/todo/todos/todos.tsx | 6 +- src/locales/en/translation.json | 153 +++++++++++++++++- src/locales/zh/translation.json | 153 +++++++++++++++++- 36 files changed, 779 insertions(+), 305 deletions(-) diff --git a/src/components/modals/binaural/binaural.tsx b/src/components/modals/binaural/binaural.tsx index 70512b4..ced84e2 100644 --- a/src/components/modals/binaural/binaural.tsx +++ b/src/components/modals/binaural/binaural.tsx @@ -1,5 +1,5 @@ import { useEffect, useState, useRef, useCallback } from 'react'; - +import { useTranslation } from 'react-i18next'; import { Modal } from '@/components/modal'; import { Slider } from '@/components/slider'; @@ -14,15 +14,46 @@ interface Preset { baseFrequency: number; beatFrequency: number; name: string; + translationKey: string; } const presets: Preset[] = [ - { baseFrequency: 100, beatFrequency: 2, name: 'Delta (Deep Sleep) 2 Hz' }, - { baseFrequency: 100, beatFrequency: 5, name: 'Theta (Meditation) 5 Hz' }, - { baseFrequency: 100, beatFrequency: 10, name: 'Alpha (Relaxation) 10 Hz' }, - { baseFrequency: 100, beatFrequency: 20, name: 'Beta (Focus) 20 Hz' }, - { baseFrequency: 100, beatFrequency: 40, name: 'Gamma (Cognition) 40 Hz' }, - { baseFrequency: 440, beatFrequency: 10, name: 'Custom' }, + { + baseFrequency: 100, + beatFrequency: 2, + name: 'Delta (Deep Sleep) 2 Hz', + translationKey: 'modals.generators.presets.delta', + }, + { + baseFrequency: 100, + beatFrequency: 5, + name: 'Theta (Meditation) 5 Hz', + translationKey: 'modals.generators.presets.theta', + }, + { + baseFrequency: 100, + beatFrequency: 10, + name: 'Alpha (Relaxation) 10 Hz', + translationKey: 'modals.generators.presets.alpha', + }, + { + baseFrequency: 100, + beatFrequency: 20, + name: 'Beta (Focus) 20 Hz', + translationKey: 'modals.generators.presets.beta', + }, + { + baseFrequency: 100, + beatFrequency: 40, + name: 'Gamma (Cognition) 40 Hz', + translationKey: 'modals.generators.presets.gamma', + }, + { + baseFrequency: 440, + beatFrequency: 10, + name: 'Custom', + translationKey: 'modals.generators.presets.custom', + }, ]; function computeBinauralBeatOscillatorFrequencies( @@ -36,6 +67,7 @@ function computeBinauralBeatOscillatorFrequencies( } export function BinauralModal({ onClose, show }: BinauralProps) { + const { t } = useTranslation(); const [baseFrequency, setBaseFrequency] = useState(440); // Default to A4 note const [beatFrequency, setBeatFrequency] = useState(10); // Default to 10 Hz difference const [volume, setVolume] = useState(0.5); // Default volume at 50% @@ -145,15 +177,14 @@ export function BinauralModal({ onClose, show }: BinauralProps) { }, [selectedPreset]); const handlePresetChange = (e: React.ChangeEvent) => { - const selected = e.target.value; - setSelectedPreset(selected); + const selectedName = e.target.value; + setSelectedPreset(selectedName); - if (selected === 'Custom') { - // Allow user to input custom frequencies + if (selectedName === 'Custom') { return; } - const preset = presets.find(p => p.name === selected); + const preset = presets.find(p => p.name === selectedName); if (preset) { setBaseFrequency(preset.baseFrequency); setBeatFrequency(preset.beatFrequency); @@ -163,17 +194,17 @@ export function BinauralModal({ onClose, show }: BinauralProps) { return (
-

Binaural Beat

-

Binaural beat generator.

+

{t('modals.binaural.title')}

+

{t('modals.binaural.description')}