From b48d256ec4973fd84a119edc3eaf7c30143c4153 Mon Sep 17 00:00:00 2001 From: Robert Dyer <rdyer@unl.edu> Date: Thu, 22 Aug 2024 11:23:23 -0500 Subject: [PATCH] Translation: desktop-client/components/sidebar (#3302) --- .../src/components/sidebar/Accounts.tsx | 14 +++++++++----- .../src/components/sidebar/Sidebar.tsx | 19 +++++++++++-------- .../src/components/sidebar/ToggleButton.tsx | 4 +++- .../src/components/sidebar/Tools.tsx | 8 +++++--- upcoming-release-notes/3302.md | 6 ++++++ 5 files changed, 34 insertions(+), 17 deletions(-) create mode 100644 upcoming-release-notes/3302.md diff --git a/packages/desktop-client/src/components/sidebar/Accounts.tsx b/packages/desktop-client/src/components/sidebar/Accounts.tsx index 398a7aae9..93ea82d1f 100644 --- a/packages/desktop-client/src/components/sidebar/Accounts.tsx +++ b/packages/desktop-client/src/components/sidebar/Accounts.tsx @@ -1,5 +1,6 @@ // @ts-strict-ignore import React, { useState } from 'react'; +import { useTranslation } from 'react-i18next'; import { useSelector } from 'react-redux'; import * as queries from 'loot-core/src/client/queries'; @@ -31,6 +32,7 @@ export function Accounts({ onToggleClosedAccounts, onReorder, }: AccountsProps) { + const { t } = useTranslation(); const [isDragging, setIsDragging] = useState(false); const failedAccounts = useFailedAccounts(); const updatedAccounts = useUpdatedAccounts(); @@ -62,7 +64,7 @@ export function Accounts({ return ( <View> <Account - name="All accounts" + name={t('All accounts')} to="/accounts" query={queries.allAccountBalance()} style={{ fontWeight, marginTop: 15 }} @@ -70,7 +72,7 @@ export function Accounts({ {budgetedAccounts.length > 0 && ( <Account - name="For budget" + name={t('For budget')} to="/accounts/budgeted" query={queries.budgetedAccountBalance()} style={{ @@ -100,7 +102,7 @@ export function Accounts({ {offbudgetAccounts.length > 0 && ( <Account - name="Off budget" + name={t('Off budget')} to="/accounts/offbudget" query={queries.offbudgetAccountBalance()} style={{ @@ -131,7 +133,9 @@ export function Accounts({ {closedAccounts.length > 0 && ( <SecondaryItem style={{ marginTop: 15 }} - title={'Closed accounts' + (showClosedAccounts ? '' : '...')} + title={ + showClosedAccounts ? t('Closed accounts') : t('Closed accounts...') + } onClick={onToggleClosedAccounts} bold /> @@ -157,7 +161,7 @@ export function Accounts({ }} onClick={onAddAccount} Icon={SvgAdd} - title="Add account" + title={t('Add account')} /> </View> ); diff --git a/packages/desktop-client/src/components/sidebar/Sidebar.tsx b/packages/desktop-client/src/components/sidebar/Sidebar.tsx index 687410eee..7ea8c47f5 100644 --- a/packages/desktop-client/src/components/sidebar/Sidebar.tsx +++ b/packages/desktop-client/src/components/sidebar/Sidebar.tsx @@ -1,4 +1,5 @@ import React, { useRef, useState } from 'react'; +import { useTranslation } from 'react-i18next'; import { useDispatch } from 'react-redux'; import { Resizable } from 're-resizable'; @@ -38,6 +39,7 @@ import { Tools } from './Tools'; export function Sidebar() { const hasWindowButtons = !Platform.isBrowser && Platform.OS === 'mac'; + const { t } = useTranslation(); const dispatch = useDispatch(); const sidebar = useSidebar(); const accounts = useAccounts(); @@ -149,10 +151,10 @@ export function Sidebar() { </View> <View style={{ overflow: 'auto' }}> - <Item title="Budget" Icon={SvgWallet} to="/budget" /> - <Item title="Reports" Icon={SvgReports} to="/reports" /> + <Item title={t('Budget')} Icon={SvgWallet} to="/budget" /> + <Item title={t('Reports')} Icon={SvgReports} to="/reports" /> - <Item title="Schedules" Icon={SvgCalendar} to="/schedules" /> + <Item title={t('Schedules')} Icon={SvgCalendar} to="/schedules" /> <Tools /> @@ -177,6 +179,7 @@ export function Sidebar() { } function EditableBudgetName() { + const { t } = useTranslation(); const dispatch = useDispatch(); const navigate = useNavigate(); const [budgetName, setBudgetNamePref] = useMetadataPref('budgetName'); @@ -205,10 +208,10 @@ function EditableBudgetName() { } const items = [ - { name: 'rename', text: 'Rename budget' }, - { name: 'settings', text: 'Settings' }, - ...(Platform.isBrowser ? [{ name: 'help', text: 'Help' }] : []), - { name: 'close', text: 'Close file' }, + { name: 'rename', text: t('Rename budget') }, + { name: 'settings', text: t('Settings') }, + ...(Platform.isBrowser ? [{ name: 'help', text: t('Help') }] : []), + { name: 'close', text: t('Close file') }, ]; if (editing) { @@ -250,7 +253,7 @@ function EditableBudgetName() { onPress={() => setMenuOpen(true)} > <Text style={{ whiteSpace: 'nowrap', overflow: 'hidden' }}> - {budgetName || 'A budget has no name'} + {budgetName || t('A budget has no name')} </Text> <SvgExpandArrow width={7} height={7} style={{ marginLeft: 5 }} /> </Button> diff --git a/packages/desktop-client/src/components/sidebar/ToggleButton.tsx b/packages/desktop-client/src/components/sidebar/ToggleButton.tsx index bf7c79f5d..e7fddb159 100644 --- a/packages/desktop-client/src/components/sidebar/ToggleButton.tsx +++ b/packages/desktop-client/src/components/sidebar/ToggleButton.tsx @@ -1,4 +1,5 @@ import React, { type ComponentPropsWithoutRef } from 'react'; +import { useTranslation } from 'react-i18next'; import { SvgPin } from '../../icons/v1'; import { SvgArrowButtonLeft1 } from '../../icons/v2'; @@ -17,11 +18,12 @@ export function ToggleButton({ isFloating, onFloat, }: ToggleButtonProps) { + const { t } = useTranslation(); return ( <View className="float" style={{ ...style, flexShrink: 0 }}> <Button variant="bare" - aria-label={`${isFloating ? 'Pin' : 'Unpin'} sidebar`} + aria-label={isFloating ? t('Pin sidebar') : t('Unpin sidebar')} onPress={onFloat} style={{ color: theme.buttonMenuBorder }} > diff --git a/packages/desktop-client/src/components/sidebar/Tools.tsx b/packages/desktop-client/src/components/sidebar/Tools.tsx index 1b6b2c239..28ea8734f 100644 --- a/packages/desktop-client/src/components/sidebar/Tools.tsx +++ b/packages/desktop-client/src/components/sidebar/Tools.tsx @@ -1,4 +1,5 @@ import React, { useState, useCallback, useEffect } from 'react'; +import { useTranslation } from 'react-i18next'; import { useLocation } from 'react-router-dom'; import { @@ -14,6 +15,7 @@ import { Item } from './Item'; import { SecondaryItem } from './SecondaryItem'; export function Tools() { + const { t } = useTranslation(); const [isOpen, setOpen] = useState(false); const onToggle = useCallback(() => setOpen(open => !open), []); const location = useLocation(); @@ -40,19 +42,19 @@ export function Tools() { {isOpen && ( <> <SecondaryItem - title="Payees" + title={t('Payees')} Icon={SvgStoreFront} to="/payees" indent={15} /> <SecondaryItem - title="Rules" + title={t('Rules')} Icon={SvgTuning} to="/rules" indent={15} /> <SecondaryItem - title="Settings" + title={t('Settings')} Icon={SvgCog} to="/settings" indent={15} diff --git a/upcoming-release-notes/3302.md b/upcoming-release-notes/3302.md new file mode 100644 index 000000000..cf5de6fcd --- /dev/null +++ b/upcoming-release-notes/3302.md @@ -0,0 +1,6 @@ +--- +category: Enhancements +authors: [psybers] +--- + +Support translations in desktop-client/components/sidebar. -- GitLab