fix: complete app localization pass
This commit is contained in:
@@ -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>
|
||||
)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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}
|
||||
/>
|
||||
|
||||
Reference in New Issue
Block a user