fix: complete app localization pass

This commit is contained in:
lucaronin
2026-04-26 19:37:21 +02:00
parent 1d546dde3d
commit a2f8ba72a2
57 changed files with 2566 additions and 1016 deletions

View File

@@ -1,6 +1,7 @@
import type { RefObject } from 'react'
import { PencilSimple, Trash } from '@phosphor-icons/react'
import { Button } from '@/components/ui/button'
import { translate, type AppLocale } from '../../lib/i18n'
export interface FolderContextMenuState {
path: string
@@ -13,6 +14,7 @@ interface FolderContextMenuProps {
menuRef: RefObject<HTMLDivElement | null>
onDelete?: (folderPath: string) => void
onRename: (folderPath: string) => void
locale?: AppLocale
}
export function FolderContextMenu({
@@ -20,6 +22,7 @@ export function FolderContextMenu({
menuRef,
onDelete,
onRename,
locale = 'en',
}: FolderContextMenuProps) {
if (!menu) return null
@@ -37,7 +40,7 @@ export function FolderContextMenu({
onClick={() => onRename(menu.path)}
>
<PencilSimple size={14} />
Rename folder
{translate(locale, 'sidebar.action.renameFolderMenu')}
</Button>
<Button
type="button"
@@ -47,7 +50,7 @@ export function FolderContextMenu({
data-testid="delete-folder-menu-item"
>
<Trash size={14} />
Delete folder
{translate(locale, 'sidebar.action.deleteFolderMenu')}
</Button>
</div>
)

View File

@@ -11,6 +11,7 @@ import { Button } from '@/components/ui/button'
import { cn } from '@/lib/utils'
import type { FolderNode } from '../../types'
import { useFolderRowInteractions } from './useFolderRowInteractions'
import { translate, type AppLocale } from '../../lib/i18n'
interface FolderItemRowProps {
contentInset: number
@@ -23,6 +24,7 @@ interface FolderItemRowProps {
onSelect: () => void
onStartRenameFolder?: (folderPath: string) => void
onToggle: (path: string) => void
locale?: AppLocale
}
export function FolderItemRow({
@@ -36,9 +38,10 @@ export function FolderItemRow({
onSelect,
onStartRenameFolder,
onToggle,
locale = 'en',
}: FolderItemRowProps) {
const hasChildren = node.children.length > 0
const expandLabel = isExpanded ? `Collapse ${node.name}` : `Expand ${node.name}`
const expandLabel = translate(locale, isExpanded ? 'sidebar.folder.collapse' : 'sidebar.folder.expand', { name: node.name })
const hasActions = !!onStartRenameFolder || !!onDeleteFolder
const { handleRenameDoubleClick, handleSelectClick } = useFolderRowInteractions({
hasChildren,
@@ -81,9 +84,9 @@ export function FolderItemRow({
<div className="pointer-events-none absolute right-2 top-1/2 flex -translate-y-1/2 items-center gap-0.5 opacity-0 transition-opacity group-hover:pointer-events-auto group-hover:opacity-100 group-focus-within:pointer-events-auto group-focus-within:opacity-100">
{onStartRenameFolder && (
<FolderActionButton
ariaLabel={`Rename ${node.name}`}
ariaLabel={translate(locale, 'sidebar.action.renameFolder')}
testId={`rename-folder-btn:${node.path}`}
title="Rename folder"
title={translate(locale, 'sidebar.action.renameFolder')}
onClick={() => {
onSelect()
onStartRenameFolder(node.path)
@@ -94,9 +97,9 @@ export function FolderItemRow({
)}
{onDeleteFolder && (
<FolderActionButton
ariaLabel={`Delete ${node.name}`}
ariaLabel={translate(locale, 'sidebar.action.deleteFolder')}
testId={`delete-folder-btn:${node.path}`}
title="Delete folder"
title={translate(locale, 'sidebar.action.deleteFolder')}
destructive
onClick={() => {
onSelect()

View File

@@ -4,6 +4,7 @@ import { NoteDropTarget } from '../note-retargeting/NoteDropTarget'
import { useNoteRetargetingContext } from '../note-retargeting/noteRetargetingContext'
import { FolderNameInput } from './FolderNameInput'
import { FolderItemRow } from './FolderItemRow'
import { translate, type AppLocale } from '../../lib/i18n'
interface FolderTreeRowProps {
depth: number
@@ -16,6 +17,7 @@ interface FolderTreeRowProps {
onStartRenameFolder?: (folderPath: string) => void
onToggle: (path: string) => void
onCancelRenameFolder?: () => void
locale?: AppLocale
renamingFolderPath?: string | null
selection: SidebarSelection
}
@@ -24,21 +26,23 @@ function FolderRenameRow({
contentInset,
depthIndent,
node,
locale,
onCancelRenameFolder,
onRenameFolder,
}: {
contentInset: number
depthIndent: number
node: FolderNode
locale: AppLocale
onCancelRenameFolder: () => void
onRenameFolder: (folderPath: string, nextName: string) => Promise<boolean> | boolean
}) {
return (
<div style={{ paddingLeft: depthIndent }}>
<FolderNameInput
ariaLabel="Folder name"
ariaLabel={translate(locale, 'sidebar.folder.name')}
initialValue={node.name}
placeholder="Folder name"
placeholder={translate(locale, 'sidebar.folder.name')}
leftInset={contentInset}
selectTextOnFocus={true}
testId="rename-folder-input"
@@ -60,6 +64,7 @@ function FolderChildren({
onStartRenameFolder,
onToggle,
onCancelRenameFolder,
locale,
renamingFolderPath,
selection,
}: FolderTreeRowProps) {
@@ -86,6 +91,7 @@ function FolderChildren({
onStartRenameFolder={onStartRenameFolder}
onToggle={onToggle}
onCancelRenameFolder={onCancelRenameFolder}
locale={locale}
renamingFolderPath={renamingFolderPath}
selection={selection}
/>
@@ -105,6 +111,7 @@ export const FolderTreeRow = memo(function FolderTreeRow({
onStartRenameFolder,
onToggle,
onCancelRenameFolder,
locale = 'en',
renamingFolderPath,
selection,
}: FolderTreeRowProps) {
@@ -129,6 +136,7 @@ export const FolderTreeRow = memo(function FolderTreeRow({
onSelect={selectFolder}
onStartRenameFolder={onStartRenameFolder}
onToggle={onToggle}
locale={locale}
/>
)
@@ -139,6 +147,7 @@ export const FolderTreeRow = memo(function FolderTreeRow({
contentInset={contentInset}
depthIndent={depthIndent}
node={node}
locale={locale}
onCancelRenameFolder={onCancelRenameFolder}
onRenameFolder={onRenameFolder}
/>
@@ -163,6 +172,7 @@ export const FolderTreeRow = memo(function FolderTreeRow({
onStartRenameFolder={onStartRenameFolder}
onToggle={onToggle}
onCancelRenameFolder={onCancelRenameFolder}
locale={locale}
renamingFolderPath={renamingFolderPath}
selection={selection}
/>