diff --git a/docs/i18n_languages.md b/docs/i18n_languages.md index 7447193..9fcf779 100644 --- a/docs/i18n_languages.md +++ b/docs/i18n_languages.md @@ -7,4 +7,4 @@ In JSON file: In GUI: -- If the first letter of the translation must be uppercase, use the postProcess, for example: `{t_auth('advanced_users', { postProcess: 'capitalize' })}` +- If the first letter of the translation must be uppercase, use the postProcess, for example: `{t_auth('advanced_users', { postProcess: 'capitalizeFirst' })}` diff --git a/src/App.tsx b/src/App.tsx index 17dea23..e5f9cc0 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -2514,7 +2514,9 @@ function App() { setExtstate('create-wallet'); }} > - {t('auth:action.create_account', { postProcess: 'capitalize' })} + {t('auth:action.create_account', { + postProcess: 'capitalizeFirst', + })} )} @@ -2611,7 +2613,9 @@ function App() { fontWeight: 600, }} > - {t('auth:action.authenticate', { postProcess: 'capitalize' })} + {t('auth:action.authenticate', { + postProcess: 'capitalizeFirst', + })} @@ -2619,7 +2623,7 @@ function App() { <> - {t('auth:wallet.password', { postProcess: 'capitalize' })} + {t('auth:wallet.password', { postProcess: 'capitalizeFirst' })} @@ -2643,7 +2647,7 @@ function App() { fontSize: '12px', }} > - {t('auth:node.using', { postProcess: 'capitalize' })}:{' '} + {t('auth:node.using', { postProcess: 'capitalizeFirst' })}:{' '} {currentNode?.url} @@ -2655,7 +2659,9 @@ function App() { fontSize: '12px', }} > - {t('auth:node.using_public', { postProcess: 'capitalize' })} + {t('auth:node.using_public', { + postProcess: 'capitalizeFirst', + })} )} @@ -2663,7 +2669,9 @@ function App() { - {t('auth:action.authenticate', { postProcess: 'capitalize' })} + {t('auth:action.authenticate', { + postProcess: 'capitalizeFirst', + })} {walletToBeDecryptedError} @@ -2932,7 +2940,7 @@ function App() { {t('auth:action.create_account', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -2978,7 +2986,7 @@ function App() { }} > {t('core:action.backup_account', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -3008,7 +3016,7 @@ function App() { }} > {t('core:message.success.transfer', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -3019,7 +3027,7 @@ function App() { }} > - {t('core:action.continue', { postProcess: 'capitalize' })} + {t('core:action.continue', { postProcess: 'capitalizeFirst' })} @@ -3036,7 +3044,7 @@ function App() { }} > {t('core:message.success.transfer', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -3045,7 +3053,7 @@ function App() { window.close(); }} > - {t('core:action.continue', { postProcess: 'capitalize' })} + {t('core:action.continue', { postProcess: 'capitalizeFirst' })} )} @@ -3061,7 +3069,7 @@ function App() { }} > {t('core:message.success.order_submitted', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -3070,7 +3078,7 @@ function App() { window.close(); }} > - {t('core:action.close', { postProcess: 'capitalize' })} + {t('core:action.close', { postProcess: 'capitalizeFirst' })} )} @@ -3119,7 +3127,7 @@ function App() { {message?.paymentFee && ( {t('core:fee.payment', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} : {message.paymentFee} @@ -3127,7 +3135,7 @@ function App() { {message?.publishFee && ( {t('core:fee.publish', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} : {message.publishFee} @@ -3151,7 +3159,7 @@ function App() { autoFocus > {t('core:action.accept', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -3193,7 +3201,7 @@ function App() { @@ -3214,7 +3222,7 @@ function App() { @@ -3502,7 +3510,7 @@ function App() { {t('core:message.success.request_read', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -3552,7 +3560,7 @@ function App() { }} > {t('core:action.accept', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} onCancelQortalRequestExtension()} > {t('core:action.decline', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} diff --git a/src/ExtStates/NotAuthenticated.tsx b/src/ExtStates/NotAuthenticated.tsx index 2a6b090..c2f6e74 100644 --- a/src/ExtStates/NotAuthenticated.tsx +++ b/src/ExtStates/NotAuthenticated.tsx @@ -351,7 +351,8 @@ export const NotAuthenticated = ({ .catch((error) => { console.error( 'Failed to set API key:', - error.message || t('core:error', { postProcess: 'capitalize' }) + error.message || + t('core:error', { postProcess: 'capitalizeFirst' }) ); }); } else { @@ -361,7 +362,7 @@ export const NotAuthenticated = ({ setInfoSnack({ type: 'error', message: t('auth:apikey.select_valid', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }), }); setOpenSnack(true); @@ -387,7 +388,7 @@ export const NotAuthenticated = ({ 'Failed to set API key:', error.message || t('core:error', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }) ); }); @@ -399,7 +400,7 @@ export const NotAuthenticated = ({ message: error?.message || t('auth:apikey.select_valid', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }), }); setOpenSnack(true); @@ -481,7 +482,7 @@ export const NotAuthenticated = ({ fontSize: '18px', }} > - {t('auth:welcome', { postProcess: 'capitalize' })} + {t('auth:welcome', { postProcess: 'capitalizeFirst' })} - {t('auth:tips.digital_id', { postProcess: 'capitalize' })} + {t('auth:tips.digital_id', { postProcess: 'capitalizeFirst' })} } > setExtstate('wallets')}> - {t('auth:account.account_many', { postProcess: 'capitalize' })} + {t('auth:account.account_many', { postProcess: 'capitalizeFirst' })} @@ -542,7 +543,7 @@ export const NotAuthenticated = ({ fontSize: '18px', }} > - {t('auth:tips.new_users', { postProcess: 'capitalize' })} + {t('auth:tips.new_users', { postProcess: 'capitalizeFirst' })} - {t('auth:tips.new_account', { postProcess: 'capitalize' })} + {t('auth:tips.new_account', { postProcess: 'capitalizeFirst' })} } @@ -572,7 +573,9 @@ export const NotAuthenticated = ({ }, }} > - {t('auth:action.create_account', { postProcess: 'capitalize' })} + {t('auth:action.create_account', { + postProcess: 'capitalizeFirst', + })} @@ -585,7 +588,7 @@ export const NotAuthenticated = ({ visibility: !useLocalNode && 'hidden', }} > - {t('auth:node.using', { postProcess: 'capitalize' })}:{' '} + {t('auth:node.using', { postProcess: 'capitalizeFirst' })}:{' '} {currentNode?.url} @@ -613,7 +616,7 @@ export const NotAuthenticated = ({ textDecoration: 'underline', }} > - {t('auth:advanced_users', { postProcess: 'capitalize' })} + {t('auth:advanced_users', { postProcess: 'capitalizeFirst' })} @@ -676,8 +683,12 @@ export const NotAuthenticated = ({ component="label" > {apiKey - ? t('auth:node.use_local', { postProcess: 'capitalize' }) - : t('auth:apikey.import', { postProcess: 'capitalize' })} + ? t('auth:node.use_local', { + postProcess: 'capitalizeFirst', + }) + : t('auth:apikey.import', { + postProcess: 'capitalizeFirst', + })} - {t('auth:apikey.key', { postProcess: 'capitalize' })}:{' '} + {t('auth:apikey.key', { postProcess: 'capitalizeFirst' })}:{' '} {importedApiKey} @@ -698,7 +709,7 @@ export const NotAuthenticated = ({ variant="contained" component="label" > - {t('auth:node.choose', { postProcess: 'capitalize' })} + {t('auth:node.choose', { postProcess: 'capitalizeFirst' })} - {t('auth:build_version', { postProcess: 'capitalize' })}: + {t('auth:build_version', { postProcess: 'capitalizeFirst' })}: {manifestData?.version} @@ -728,7 +739,7 @@ export const NotAuthenticated = ({ > {' '} - {t('auth:node.custom_many', { postProcess: 'capitalize' })}: + {t('auth:node.custom_many', { postProcess: 'capitalizeFirst' })}: - {t('core:action.choose', { postProcess: 'capitalize' })} + {t('core:action.choose', { + postProcess: 'capitalizeFirst', + })} @@ -858,7 +871,7 @@ export const NotAuthenticated = ({ variant="contained" > {t('core:action.choose', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -873,7 +886,7 @@ export const NotAuthenticated = ({ variant="contained" > {t('core:action.edit', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -887,7 +900,9 @@ export const NotAuthenticated = ({ }} variant="contained" > - {t('core:remove', { postProcess: 'capitalize' })} + {t('core:remove', { + postProcess: 'capitalizeFirst', + })} @@ -926,7 +941,7 @@ export const NotAuthenticated = ({ {mode === 'list' && ( )} @@ -939,7 +954,7 @@ export const NotAuthenticated = ({ }} autoFocus > - {t('core:action.close', { postProcess: 'capitalize' })} + {t('core:action.close', { postProcess: 'capitalizeFirst' })} )} @@ -954,7 +969,7 @@ export const NotAuthenticated = ({ }} > {t('auth:action.return_to_list', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -964,7 +979,7 @@ export const NotAuthenticated = ({ onClick={() => saveCustomNodes(customNodes)} autoFocus > - {t('core:save', { postProcess: 'capitalize' })} + {t('core:save', { postProcess: 'capitalizeFirst' })} )} @@ -979,7 +994,7 @@ export const NotAuthenticated = ({ aria-describedby="alert-dialog-description" > - {t('auth:apikey.enter', { postProcess: 'capitalize' })} + {t('auth:apikey.enter', { postProcess: 'capitalizeFirst' })} - {t('auth:apikey.alternative', { postProcess: 'capitalize' })} + {t('auth:apikey.alternative', { + postProcess: 'capitalizeFirst', + })} - {t('core:save', { postProcess: 'capitalize' })} + {t('core:save', { postProcess: 'capitalizeFirst' })} diff --git a/src/Wallets.tsx b/src/Wallets.tsx index 9fb153b..5d4cfc6 100644 --- a/src/Wallets.tsx +++ b/src/Wallets.tsx @@ -152,7 +152,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => { } else { setSeedError( t('auth:message.error.account_creation', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }) ); } @@ -160,7 +160,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => { setSeedError( error?.message || t('auth:message.error.account_creation', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }) ); } finally { @@ -202,7 +202,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => { <> {t('auth:message.generic.no_account', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -212,7 +212,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => { <> {t('auth:message.generic.your_accounts', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -224,7 +224,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => { {t('auth:account.selected', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} : @@ -282,7 +282,9 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => { fontSize: '16px', }} > - {t('auth:tips.existing_account', { postProcess: 'capitalize' })} + {t('auth:tips.existing_account', { + postProcess: 'capitalizeFirst', + })} } @@ -294,7 +296,9 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => { display: 'inline', }} > - {t('auth:action.add.seed_phrase', { postProcess: 'capitalize' })} + {t('auth:action.add.seed_phrase', { + postProcess: 'capitalizeFirst', + })} @@ -309,7 +313,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => { }} > {t('auth:tips.additional_wallet', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -323,7 +327,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => { > {t('auth:action.add.account', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -341,7 +345,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => { > {t('auth:message.generic.type_seed', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -353,8 +357,8 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => { }} > { { { }} > {t('core:action.close', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} { autoFocus > {t('core:action.add', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} { }} > {t('core:action.login', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -545,8 +549,8 @@ const WalletItem = ({ wallet, updateWalletItem, idx, setSelectedWallet }) => { }} > { { onClick={() => setIsEdit(false)} > {t('core:action.close', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} diff --git a/src/components/Apps/AppInfo.tsx b/src/components/Apps/AppInfo.tsx index abca186..6e8e274 100644 --- a/src/components/Apps/AppInfo.tsx +++ b/src/components/Apps/AppInfo.tsx @@ -27,8 +27,8 @@ import { sortablePinnedAppsAtom, } from '../../atoms/global'; import { saveToLocalStorage } from './AppsNavBarDesktop'; - import { useAtom, useSetAtom } from 'jotai'; +import { useTranslation } from 'react-i18next'; export const AppInfo = ({ app, myName }) => { const isInstalled = app?.status?.status === 'READY'; @@ -37,6 +37,7 @@ export const AppInfo = ({ app, myName }) => { ); const theme = useTheme(); + const { t } = useTranslation(['core', 'auth', 'group']); const isSelectedAppPinned = !!sortablePinnedApps?.find( (item) => item?.name === app?.name && item?.service === app?.service @@ -171,9 +172,13 @@ export const AppInfo = ({ app, myName }) => { }} > - {isSelectedAppPinned // TODO translate - ? 'Unpin from dashboard' - : 'Pin to dashboard'} + {isSelectedAppPinned + ? t('core:action.unpin_from_dashboard', { + postProcess: 'capitalizeFirst', + }) + : t('core:action.pin_from_dashboard', { + postProcess: 'capitalizeFirst', + })} @@ -193,7 +198,13 @@ export const AppInfo = ({ app, myName }) => { }} > - {isInstalled ? 'Open' : 'Download'} + {isInstalled + ? t('core:action.open', { + postProcess: 'capitalizeFirst', + }) + : t('core:action.download', { + postProcess: 'capitalizeFirst', + })} @@ -216,25 +227,40 @@ export const AppInfo = ({ app, myName }) => { - Category: + + {t('core:category', { + postProcess: 'capitalizeFirst', + })} + : + - {app?.metadata?.categoryName || 'none'} + {app?.metadata?.categoryName || + t('core:none', { + postProcess: 'capitalizeFirst', + })} - About this Q-App + + {t('core:q_apps.about', { + postProcess: 'capitalizeFirst', + })} + - {app?.metadata?.description || 'No description'} + {app?.metadata?.description || + t('core:message.generic.no_description', { + postProcess: 'capitalizeFirst', + })} diff --git a/src/components/Apps/AppInfoSnippet.tsx b/src/components/Apps/AppInfoSnippet.tsx index ba71164..1629b5e 100644 --- a/src/components/Apps/AppInfoSnippet.tsx +++ b/src/components/Apps/AppInfoSnippet.tsx @@ -23,6 +23,7 @@ import { } from '../../atoms/global'; import { saveToLocalStorage } from './AppsNavBarDesktop'; import { useAtom, useSetAtom } from 'jotai'; +import { useTranslation } from 'react-i18next'; export const AppInfoSnippet = ({ app, @@ -41,6 +42,7 @@ export const AppInfoSnippet = ({ ); const theme = useTheme(); + const { t } = useTranslation(['core', 'auth', 'group']); return ( - {' '} - {isSelectedAppPinned ? 'Unpin' : 'Pin'} + {isSelectedAppPinned + ? t('core:action.unpin', { + postProcess: 'capitalizeFirst', + }) + : t('core:action.pin', { + postProcess: 'capitalizeFirst', + })} @@ -187,7 +194,13 @@ export const AppInfoSnippet = ({ }} > - {isInstalled ? 'Open' : 'Download'} + {isInstalled + ? t('core:action.open', { + postProcess: 'capitalizeFirst', + }) + : t('core:action.download', { + postProcess: 'capitalizeFirst', + })} diff --git a/src/components/Apps/AppPublish.tsx b/src/components/Apps/AppPublish.tsx index 8875c0b..c63cee8 100644 --- a/src/components/Apps/AppPublish.tsx +++ b/src/components/Apps/AppPublish.tsx @@ -1,20 +1,8 @@ import React, { useContext, useEffect, useState } from 'react'; import { - AppCircle, - AppCircleContainer, - AppCircleLabel, - AppDownloadButton, - AppDownloadButtonText, - AppInfoAppName, - AppInfoSnippetContainer, - AppInfoSnippetLeft, - AppInfoSnippetMiddle, - AppInfoSnippetRight, - AppInfoUserName, AppLibrarySubTitle, AppPublishTagsContainer, AppsLibraryContainer, - AppsParent, AppsWidthLimiter, PublishQAppCTAButton, PublishQAppChoseFile, @@ -28,10 +16,7 @@ import { useTheme, } from '@mui/material'; import { styled } from '@mui/system'; -import UnfoldMoreRoundedIcon from '@mui/icons-material/UnfoldMoreRounded'; -import { Add } from '@mui/icons-material'; import { MyContext, getBaseApiReact } from '../../App'; -import LogoSelected from '../../assets/svgs/LogoSelected.svg'; import { Spacer } from '../../common/Spacer'; import { executeEvent } from '../../utils/events'; import { useDropzone } from 'react-dropzone'; @@ -39,6 +24,7 @@ import { LoadingSnackbar } from '../Snackbar/LoadingSnackbar'; import { CustomizedSnackbars } from '../Snackbar/Snackbar'; import { getFee } from '../../background'; import { fileToBase64 } from '../../utils/fileReading'; +import { useTranslation } from 'react-i18next'; const CustomSelect = styled(Select)({ border: '0.5px solid var(--50-white, #FFFFFF80)', @@ -81,6 +67,7 @@ export const AppPublish = ({ names, categories }) => { const [file, setFile] = useState(null); const { show } = useContext(MyContext); const theme = useTheme(); + const { t } = useTranslation(['core', 'auth', 'group']); const [tag1, setTag1] = useState(''); const [tag2, setTag2] = useState(''); const [tag3, setTag3] = useState(''); @@ -106,9 +93,11 @@ export const AppPublish = ({ names, categories }) => { errors.forEach((error) => { if (error.code === 'file-too-large') { console.error( - `File ${file.name} is too large. Max size allowed is ${ - maxFileSize / (1024 * 1024) - } MB.` + t('core:message.error.file_too_large', { + filename: file.name, + size: maxFileSize / (1024 * 1024), + postProcess: 'capitalizeFirst', + }) ); } }); @@ -142,6 +131,7 @@ export const AppPublish = ({ names, categories }) => { setTag5(myApp?.metadata?.tags[4] || ''); } } catch (error) { + console.log(error); } finally { setIsLoading(''); } @@ -179,17 +169,25 @@ export const AppPublish = ({ names, categories }) => { }); if (missingFields.length > 0) { const missingFieldsString = missingFields.join(', '); - const errorMsg = `Missing fields: ${missingFieldsString}`; + const errorMsg = t('core:message.error.missing_fields', { + fields: missingFieldsString, + postProcess: 'capitalizeFirst', + }); throw new Error(errorMsg); } const fee = await getFee('ARBITRARY'); await show({ - // TODO translate - message: 'Would you like to publish this app?', + message: t('core:question.publish_app', { + postProcess: 'capitalizeFirst', + }), publishFee: fee.fee + ' QORT', }); - setIsLoading('Publishing... Please wait.'); + setIsLoading( + t('core:message.generic.publishing', { + postProcess: 'capitalizeFirst', + }) + ); const fileBase64 = await fileToBase64(file); await new Promise((res, rej) => { window @@ -214,13 +212,19 @@ export const AppPublish = ({ names, categories }) => { rej(response.error); }) .catch((error) => { - rej(error.message || 'An error occurred'); + rej( + error.message || + t('core:message.error.generic', { + postProcess: 'capitalizeFirst', + }) + ); }); }); setInfoSnack({ type: 'success', - message: - 'Successfully published. Please wait a couple minutes for the network to propogate the changes.', + message: t('core:message.success.published', { + postProcess: 'capitalizeFirst', + }), }); setOpenSnack(true); const dataObj = { @@ -239,7 +243,11 @@ export const AppPublish = ({ names, categories }) => { } catch (error) { setInfoSnack({ type: 'error', - message: error?.message || 'Unable to publish app', + message: + error?.message || + t('core:message.error.publish_app', { + postProcess: 'capitalizeFirst', + }), }); setOpenSnack(true); } finally { @@ -260,18 +268,27 @@ export const AppPublish = ({ names, categories }) => { width: 'auto', }} > - Create Apps! + + {t('core:action.create_apps', { + postProcess: 'capitalizeFirst', + })} + ! + - Note: Currently, only one App and Website is allowed per Name. + {t('core:message.generic.one_app_per_name', { + postProcess: 'capitalizeFirst', + })} - Name/App + {t('core:name_app', { + postProcess: 'capitalizeFirst', + })} { color: theme.palette.text.secondary, }} > - Select Name/App + {t('core:action.select_name_app', { + postProcess: 'capitalizeFirst', + })} {/* This is the placeholder item */} @@ -298,7 +317,9 @@ export const AppPublish = ({ names, categories }) => { - App service type + {t('core:app_service_type', { + postProcess: 'capitalizeFirst', + })} { color: theme.palette.text.secondary, }} > - Select App Type + {t('core:action.select_app_type', { + postProcess: 'capitalizeFirst', + })} - App - Website + + {t('core:app', { + postProcess: 'capitalizeFirst', + })} + + + {t('core:website', { + postProcess: 'capitalizeFirst', + })} + - Title + {t('core:title', { + postProcess: 'capitalizeFirst', + })} { - Description + {t('core:description', { + postProcess: 'capitalizeFirst', + })} { - Category + {t('core:category', { + postProcess: 'capitalizeFirst', + })} { color: theme.palette.text.secondary, }} > - Select Category + {t('core:action.select_category', { + postProcess: 'capitalizeFirst', + })} {categories?.map((category) => { @@ -403,7 +442,9 @@ export const AppPublish = ({ names, categories }) => { - Tags + {t('core:tags', { + postProcess: 'capitalizeFirst', + })} @@ -497,7 +538,9 @@ export const AppPublish = ({ names, categories }) => { - Select .zip file containing static content:{' '} + {t('core:message.generic.select_zip', { + postProcess: 'capitalizeFirst', + })} @@ -517,7 +560,7 @@ export const AppPublish = ({ names, categories }) => { {' '} - Choose File + {t('core:action.choose_file', { postProcess: 'capitalizeFirst' })} @@ -528,7 +571,7 @@ export const AppPublish = ({ names, categories }) => { }} onClick={publishApp} > - Publish + {t('core:action.publish', { postProcess: 'capitalizeFirst' })} diff --git a/src/components/Apps/AppRating.tsx b/src/components/Apps/AppRating.tsx index 881cfec..8ae7e99 100644 --- a/src/components/Apps/AppRating.tsx +++ b/src/components/Apps/AppRating.tsx @@ -7,6 +7,7 @@ import { StarFilledIcon } from '../../assets/Icons/StarFilled'; import { StarEmptyIcon } from '../../assets/Icons/StarEmpty'; import { AppInfoUserName } from './Apps-styles'; import { Spacer } from '../../common/Spacer'; +import { useTranslation } from 'react-i18next'; export const AppRating = ({ app, myName, ratingCountPosition = 'right' }) => { const [value, setValue] = useState(0); @@ -19,6 +20,7 @@ export const AppRating = ({ app, myName, ratingCountPosition = 'right' }) => { const [openSnack, setOpenSnack] = useState(false); const [infoSnack, setInfoSnack] = useState(null); const hasCalledRef = useRef(false); + const { t } = useTranslation(['core', 'group']); const getRating = useCallback(async (name, service) => { try { @@ -101,26 +103,39 @@ export const AppRating = ({ app, myName, ratingCountPosition = 'right' }) => { const rateFunc = async (event, chosenValue, currentValue) => { try { const newValue = chosenValue || currentValue; - if (!myName) throw new Error('You need a name to rate.'); + if (!myName) + throw new Error( + t('core:message.generic.name_rate', { + postProcess: 'capitalizeFirst', + }) + ); if (!app?.name) return; const fee = await getFee('CREATE_POLL'); await show({ - // TODO translate - message: `Would you like to rate this app a rating of ${newValue}?. It will create a POLL tx.`, + message: t('core:question.rate_app', { + rate: newValue, + postProcess: 'capitalizeFirst', + }), publishFee: fee.fee + ' QORT', }); if (hasPublishedRating === false) { const pollName = `app-library-${app.service}-rating-${app.name}`; const pollOptions = [`1, 2, 3, 4, 5, initialValue-${newValue}`]; + const pollDescription = t('core:message.error.generic', { + name: app.name, + service: app.service, + postProcess: 'capitalizeFirst', + }); + await new Promise((res, rej) => { window .sendMessage( 'createPoll', { pollName: pollName, - pollDescription: `Rating for ${app.service} ${app.name}`, + pollDescription: pollDescription, pollOptions: pollOptions, pollOwnerAddress: myName, }, @@ -134,8 +149,9 @@ export const AppRating = ({ app, myName, ratingCountPosition = 'right' }) => { res(response); setInfoSnack({ type: 'success', - message: - 'Successfully rated. Please wait a couple minutes for the network to propogate the changes.', + message: t('core:message.success.rated_app', { + postProcess: 'capitalizeFirst', + }), }); setOpenSnack(true); } @@ -151,7 +167,11 @@ export const AppRating = ({ app, myName, ratingCountPosition = 'right' }) => { (option) => +option.optionName === +newValue ); if (isNaN(optionIndex) || optionIndex === -1) - throw new Error('Cannot find rating option'); + throw new Error( + t('core:message.error.rating_option', { + postProcess: 'capitalizeFirst', + }) + ); await new Promise((res, rej) => { window .sendMessage( @@ -170,8 +190,9 @@ export const AppRating = ({ app, myName, ratingCountPosition = 'right' }) => { res(response); setInfoSnack({ type: 'success', - message: - 'Successfully rated. Please wait a couple minutes for the network to propogate the changes.', + message: t('core:message.success.rated_app', { + postProcess: 'capitalizeFirst', + }), }); setOpenSnack(true); } @@ -185,7 +206,11 @@ export const AppRating = ({ app, myName, ratingCountPosition = 'right' }) => { console.log('error', error); setInfoSnack({ type: 'error', - message: error?.message || 'Unable to rate', + message: + error?.message || + t('core:message.error.unable_rate', { + postProcess: 'capitalizeFirst', + }), }); setOpenSnack(true); } @@ -195,8 +220,8 @@ export const AppRating = ({ app, myName, ratingCountPosition = 'right' }) => {
@@ -207,8 +232,11 @@ export const AppRating = ({ app, myName, ratingCountPosition = 'right' }) => { (votesInfo?.voteCounts?.length === 6 ? 1 : 0)}{' '} {' RATINGS'} + + {value?.toFixed(1)} + )} diff --git a/src/components/Apps/AppViewer.tsx b/src/components/Apps/AppViewer.tsx index 87f88e8..640d062 100644 --- a/src/components/Apps/AppViewer.tsx +++ b/src/components/Apps/AppViewer.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useMemo, useState } from 'react'; +import { forwardRef, useEffect, useMemo, useState } from 'react'; import { Box } from '@mui/material'; import { getBaseApiReact } from '../../App'; import { subscribeToEvent, unsubscribeFromEvent } from '../../utils/events'; @@ -7,7 +7,7 @@ import { useQortalMessageListener } from './useQortalMessageListener'; import { useThemeContext } from '../Theme/ThemeContext'; import { useTranslation } from 'react-i18next'; -export const AppViewer = React.forwardRef( +export const AppViewer = forwardRef( ({ app, hide, isDevMode, skipAuth }, iframeRef) => { // const iframeRef = useRef(null); const { window: frameWindow } = useFrame(); @@ -23,7 +23,7 @@ export const AppViewer = React.forwardRef( ); const [url, setUrl] = useState(''); const { themeMode } = useThemeContext(); - const { i18n } = useTranslation(['core']); + const { i18n, t } = useTranslation(['core']); const currentLang = i18n.language; useEffect(() => { @@ -184,7 +184,13 @@ export const AppViewer = React.forwardRef( // Timeout after 200ms if no response setTimeout(() => { window.removeEventListener('message', handleNavigationSuccess); - reject(new Error('Navigation timeout')); + reject( + new Error( + t('core:message.error.navigation_timeout', { + postProcess: 'capitalizeFirst', + }) + ) + ); }, 200); const targetOrigin = iframeRef.current ? new URL(iframeRef.current.src).origin diff --git a/src/components/Apps/AppViewerContainer.tsx b/src/components/Apps/AppViewerContainer.tsx index b159aa7..38c017b 100644 --- a/src/components/Apps/AppViewerContainer.tsx +++ b/src/components/Apps/AppViewerContainer.tsx @@ -1,9 +1,8 @@ -import React, { useContext } from 'react'; +import { forwardRef } from 'react'; import { AppViewer } from './AppViewer'; import Frame from 'react-frame-component'; -import { MyContext } from '../../App'; -const AppViewerContainer = React.forwardRef( +const AppViewerContainer = forwardRef( ({ app, isSelected, hide, isDevMode, customHeight, skipAuth }, ref) => { return ( { return availableQapps.find( - (app) => app.name === myName && app.service === 'APP' + (app) => + app.name === myName && + app.service === + t('core:app', { + postProcess: 'capitalizeAll', + }) ); }, [myName, availableQapps]); const myWebsite = useMemo(() => { return availableQapps.find( - (app) => app.name === myName && app.service === 'WEBSITE' + (app) => + app.name === myName && + app.service === + t('core:website', { + postProcess: 'capitalizeAll', + }) ); }, [myName, availableQapps]); @@ -104,7 +115,6 @@ export const AppsDesktop = ({ try { let apps = []; let websites = []; - // dispatch(setIsLoadingGlobal(true)) const url = `${getBaseApiReact()}/arbitrary/resources/search?service=APP&mode=ALL&limit=0&includestatus=true&includemetadata=true`; const response = await fetch(url, { @@ -113,6 +123,7 @@ export const AppsDesktop = ({ 'Content-Type': 'application/json', }, }); + if (!response?.ok) return; const responseData = await response.json(); const urlWebsites = `${getBaseApiReact()}/arbitrary/resources/search?service=WEBSITE&mode=ALL&limit=0&includestatus=true&includemetadata=true`; @@ -123,6 +134,7 @@ export const AppsDesktop = ({ 'Content-Type': 'application/json', }, }); + if (!responseWebsites?.ok) return; const responseDataWebsites = await responseWebsites.json(); @@ -245,7 +257,6 @@ export const AppsDesktop = ({ setTabs((prev) => [...prev, newTab]); setSelectedTab(newTab); setMode('viewer'); - setIsNewTabWindow(false); }; @@ -256,6 +267,7 @@ export const AppsDesktop = ({ unsubscribeFromEvent('addTab', addTabFunc); }; }, [tabs]); + const setSelectedTabFunc = (e) => { const data = e.detail?.data; if (e.detail?.isDevMode) return; @@ -325,9 +337,9 @@ export const AppsDesktop = ({ return ( + )} + + {mode === 'publish' && !selectedTab && ( )} + {tabs.map((tab) => { if (!iframeRefs.current[tab.tabId]) { iframeRefs.current[tab.tabId] = React.createRef(); diff --git a/src/components/Apps/AppsDevMode.tsx b/src/components/Apps/AppsDevMode.tsx index 14a289e..846867e 100644 --- a/src/components/Apps/AppsDevMode.tsx +++ b/src/components/Apps/AppsDevMode.tsx @@ -1,7 +1,6 @@ import React, { useEffect, useRef, useState } from 'react'; import { AppsDevModeHome } from './AppsDevModeHome'; import { Spacer } from '../../common/Spacer'; - import { executeEvent, subscribeToEvent, @@ -10,7 +9,6 @@ import { import { AppsParent } from './Apps-styles'; import AppViewerContainer from './AppViewerContainer'; import ShortUniqueId from 'short-unique-id'; - import { Box, ButtonBase, useTheme } from '@mui/material'; import { HomeIcon } from '../../assets/Icons/HomeIcon'; import { Save } from '../Save/Save'; @@ -137,7 +135,6 @@ export const AppsDevMode = ({ setTabs(copyTabs); setSelectedTab(newTab); setMode('viewer'); - setIsNewTabWindow(false); }; @@ -260,6 +257,7 @@ export const AppsDevMode = ({ } /> + { setDesktopViewMode('apps'); @@ -282,6 +280,7 @@ export const AppsDevMode = ({ /> + { setDesktopViewMode('chat'); @@ -351,6 +350,7 @@ export const AppsDevMode = ({ }} > + { const { buffer, directoryPath } = await window.electron.selectAndZipDirectory(existingDirectoryPath); @@ -79,8 +78,7 @@ export const AppsDevModeHome = ({ setInfoSnackCustom({ type: 'error', - message: - 'Please use your local node for dev mode! Logout and use Local node.', + message: '', }); return; } @@ -115,20 +113,21 @@ export const AppsDevModeHome = ({ const usingLocal = await isUsingLocal(); if (!usingLocal) { setOpenSnackGlobal(true); - setInfoSnackCustom({ type: 'error', - message: - 'Please use your local node for dev mode! Logout and use Local node.', + message: t('core:message.generic.devmode_local_node', { + postProcess: 'capitalizeFirst', + }), }); return; } if (!myName) { setOpenSnackGlobal(true); - setInfoSnackCustom({ type: 'error', - message: 'You need a name to use preview', + message: t('core:message.generic.name_preview', { + postProcess: 'capitalizeFirst', + }), }); return; } @@ -137,15 +136,16 @@ export const AppsDevModeHome = ({ if (!buffer) { setOpenSnackGlobal(true); - setInfoSnackCustom({ type: 'error', - message: 'Please select a file', + message: t('core:message.generic.select_file', { + postProcess: 'capitalizeFirst', + }), }); return; } - const postBody = Buffer.from(buffer).toString('base64'); + const postBody = Buffer.from(buffer).toString('base64'); const endpoint = await createEndpoint( `/arbitrary/APP/${myName}/zip?preview=true` ); @@ -156,6 +156,7 @@ export const AppsDevModeHome = ({ }, body: postBody, }); + if (!response?.ok) throw new Error('Invalid zip'); const previewPath = await response.text(); if (tabId) { @@ -192,20 +193,21 @@ export const AppsDevModeHome = ({ const usingLocal = await isUsingLocal(); if (!usingLocal) { setOpenSnackGlobal(true); - setInfoSnackCustom({ type: 'error', - message: - 'Please use your local node for dev mode! Logout and use Local node.', + message: t('core:message.generic.devmode_local_node', { + postProcess: 'capitalizeFirst', + }), }); return; } if (!myName) { setOpenSnackGlobal(true); - setInfoSnackCustom({ type: 'error', - message: 'You need a name to use preview', + message: t('core:message.generic.name_preview', { + postProcess: 'capitalizeFirst', + }), }); return; } @@ -214,15 +216,16 @@ export const AppsDevModeHome = ({ if (!buffer) { setOpenSnackGlobal(true); - setInfoSnackCustom({ type: 'error', - message: 'Please select a file', + message: t('core:message.generic.select_file', { + postProcess: 'capitalizeFirst', + }), }); return; } - const postBody = Buffer.from(buffer).toString('base64'); + const postBody = Buffer.from(buffer).toString('base64'); const endpoint = await createEndpoint( `/arbitrary/APP/${myName}/zip?preview=true` ); @@ -233,8 +236,15 @@ export const AppsDevModeHome = ({ }, body: postBody, }); - if (!response?.ok) throw new Error('Invalid zip'); + + if (!response?.ok) + throw new Error( + t('core:message.error.invalid_zip', { + postProcess: 'capitalizeFirst', + }) + ); const previewPath = await response.text(); + if (tabId) { executeEvent('appsDevModeUpdateTab', { data: { @@ -276,7 +286,7 @@ export const AppsDevModeHome = ({ fontSize: '30px', }} > - Dev Mode Apps + {t('core:devmode_apps', { postProcess: 'capitalizeFirst' })} @@ -301,7 +311,9 @@ export const AppsDevModeHome = ({ + - Server + + {t('core:server', { postProcess: 'capitalizeFirst' })} + @@ -319,7 +331,9 @@ export const AppsDevModeHome = ({ + - Zip + + {t('core:zip', { postProcess: 'capitalizeFirst' })} + @@ -336,7 +350,9 @@ export const AppsDevModeHome = ({ + - Directory + + {t('core:directory', { postProcess: 'capitalizeFirst' })} + @@ -365,7 +381,9 @@ export const AppsDevModeHome = ({ objectFit: 'fill', }, }} - alt="Q-Sandbox" + alt={t('core:q_apps.q_sandbox', { + postProcess: 'capitalizeFirst', + })} src={`${getBaseApiReact()}/arbitrary/THUMBNAIL/Q-Sandbox/qortal_avatar?async=true`} > - Q-Sandbox + + {t('core:q_apps.q_sandbox', { + postProcess: 'capitalizeFirst', + })} + @@ -407,7 +429,9 @@ export const AppsDevModeHome = ({ objectFit: 'fill', }, }} - alt="API" + alt={t('core:api', { + postProcess: 'capitalizeAll', + })} src={swaggerSVG} > - API + + {t('core:api', { + postProcess: 'capitalizeAll', + })} + @@ -437,7 +465,9 @@ export const AppsDevModeHome = ({ }} > - {'Add custom framework'} + {t('core:action.add_custom_framework', { + postProcess: 'capitalizeFirst', + })} @@ -446,15 +476,22 @@ export const AppsDevModeHome = ({ display: 'flex', flexDirection: 'column', gap: '5px', - }} // TODO translate + }} > - + setDomain(e.target.value)} /> + - + setPort(e.target.value)} /> @@ -474,15 +517,20 @@ export const AppsDevModeHome = ({ + diff --git a/src/components/Apps/AppsDevModeNavBar.tsx b/src/components/Apps/AppsDevModeNavBar.tsx index 5a632cd..e011ded 100644 --- a/src/components/Apps/AppsDevModeNavBar.tsx +++ b/src/components/Apps/AppsDevModeNavBar.tsx @@ -23,7 +23,6 @@ export const AppsDevModeNavBar = () => { const [navigationController, setNavigationController] = useAtom( navigationControllerAtom ); - const theme = useTheme(); const [isNewTabWindow, setIsNewTabWindow] = useState(false); const tabsRef = useRef(null); diff --git a/src/components/Apps/AppsHomeDesktop.tsx b/src/components/Apps/AppsHomeDesktop.tsx index 21d9d7d..b2c67cf 100644 --- a/src/components/Apps/AppsHomeDesktop.tsx +++ b/src/components/Apps/AppsHomeDesktop.tsx @@ -16,6 +16,7 @@ import ArrowOutwardIcon from '@mui/icons-material/ArrowOutward'; import { AppsPrivate } from './AppsPrivate'; import ThemeSelector from '../Theme/ThemeSelector'; import LanguageSelector from '../Language/LanguageSelector'; +import { useTranslation } from 'react-i18next'; export const AppsHomeDesktop = ({ setMode, @@ -26,6 +27,7 @@ export const AppsHomeDesktop = ({ }) => { const [qortalUrl, setQortalUrl] = useState(''); const theme = useTheme(); + const { t } = useTranslation(['core', 'group']); const openQortalUrl = () => { try { @@ -41,6 +43,7 @@ export const AppsHomeDesktop = ({ console.log(error); } }; + return ( <> - Apps Dashboard + {t('core:apps_dashboard', { postProcess: 'capitalizeFirst' })} @@ -66,14 +69,14 @@ export const AppsHomeDesktop = ({ > - Library + + {t('core:library', { postProcess: 'capitalizeFirst' })} + diff --git a/src/components/Apps/AppsLibraryDesktop.tsx b/src/components/Apps/AppsLibraryDesktop.tsx index 64f1007..ebe0ddd 100644 --- a/src/components/Apps/AppsLibraryDesktop.tsx +++ b/src/components/Apps/AppsLibraryDesktop.tsx @@ -41,6 +41,7 @@ import { Virtuoso } from 'react-virtuoso'; import { executeEvent } from '../../utils/events'; import { ComposeP, ShowMessageReturnButton } from '../Group/Forum/Mail-styles'; import { ReturnIcon } from '../../assets/Icons/ReturnIcon.tsx'; +import { useTranslation } from 'react-i18next'; const officialAppList = [ 'q-tube', @@ -104,6 +105,7 @@ export const AppsLibraryDesktop = ({ const [searchValue, setSearchValue] = useState(''); const virtuosoRef = useRef(null); const theme = useTheme(); + const { t } = useTranslation(['core', 'group']); const officialApps = useMemo(() => { return availableQapps.filter( @@ -210,9 +212,13 @@ export const AppsLibraryDesktop = ({ ml: 1, paddingLeft: '12px', }} - placeholder="Search for apps" + placeholder={t('core:action.search_apps', { + postProcess: 'capitalizeFirst', + })} inputProps={{ - 'aria-label': 'Search for apps', + 'aria-label': t('core:action.search_apps', { + postProcess: 'capitalizeFirst', + }), fontSize: '16px', fontWeight: 400, }} @@ -273,10 +279,14 @@ export const AppsLibraryDesktop = ({ }} onClick={() => { executeEvent('navigateBack', {}); - }} // TODO translate + }} > - Return to Apps Dashboard + + {t('core:action.return_apps_dashboard', { + postProcess: 'capitalizeFirst', + })} + @@ -302,7 +312,11 @@ export const AppsLibraryDesktop = ({ ) : searchedList?.length === 0 && debouncedValue ? ( - No results + + {t('core:message.generic.no_results', { + postProcess: 'capitalizeFirst', + })} + ) : ( <> @@ -311,7 +325,7 @@ export const AppsLibraryDesktop = ({ fontSize: '30px', }} > - Official Apps + {t('core:apps_official', { postProcess: 'capitalizeFirst' })} @@ -396,7 +410,13 @@ export const AppsLibraryDesktop = ({ textAlign: 'start', }} > - {hasPublishApp ? 'Update your app' : 'Publish your app'} + {hasPublishApp + ? t('core:action.update_app', { + postProcess: 'capitalizeFirst', + }) + : t('core:action.publish_app', { + postProcess: 'capitalizeFirst', + })} @@ -422,7 +442,13 @@ export const AppsLibraryDesktop = ({ }} > - {hasPublishApp ? 'Update' : 'Publish'} + {hasPublishApp + ? t('core:action.update', { + postProcess: 'capitalizeFirst', + }) + : t('core:action.publish', { + postProcess: 'capitalizeFirst', + })} @@ -441,7 +467,9 @@ export const AppsLibraryDesktop = ({ fontSize: '30px', }} > - Categories + {t('core:category_other', { + postProcess: 'capitalizeFirst', + })} @@ -480,7 +508,7 @@ export const AppsLibraryDesktop = ({ }, }} > - All + {t('core:all', { postProcess: 'capitalizeFirst' })} diff --git a/src/components/Apps/AppsNavBarDesktop.tsx b/src/components/Apps/AppsNavBarDesktop.tsx index 8d45604..f294834 100644 --- a/src/components/Apps/AppsNavBarDesktop.tsx +++ b/src/components/Apps/AppsNavBarDesktop.tsx @@ -32,6 +32,7 @@ import { sortablePinnedAppsAtom, } from '../../atoms/global'; import { useAtom, useSetAtom } from 'jotai'; +import { useTranslation } from 'react-i18next'; export function saveToLocalStorage(key, subKey, newValue) { try { @@ -75,7 +76,7 @@ export const AppsNavBarDesktop = ({ disableBack }) => { ); const theme = useTheme(); - + const { t } = useTranslation(['core', 'group']); const [isNewTabWindow, setIsNewTabWindow] = useState(false); const tabsRef = useRef(null); const [anchorEl, setAnchorEl] = useState(null); @@ -238,6 +239,7 @@ export const AppsNavBarDesktop = ({ disableBack }) => { }} /> + { if (!selectedTab) return; @@ -274,9 +276,9 @@ export const AppsNavBarDesktop = ({ disableBack }) => { paper: { sx: { backgroundColor: theme.palette.background.default, + borderRadius: '5px', color: theme.palette.text.primary, width: '148px', - borderRadius: '5px', }, }, }} @@ -375,9 +377,18 @@ export const AppsNavBarDesktop = ({ disableBack }) => { : theme.palette.text.primary, }, }} - primary={`${isSelectedAppPinned ? 'Unpin app' : 'Pin app'}`} + primary={`${ + isSelectedAppPinned + ? t('core:action.unpin_app', { + postProcess: 'capitalizeFirst', + }) + : t('core:action.pin_app', { + postProcess: 'capitalizeFirst', + }) + }}`} /> + { if (selectedTab?.refreshFunc) { @@ -404,6 +415,7 @@ export const AppsNavBarDesktop = ({ disableBack }) => { }} /> + { color: theme.palette.text.primary, }, }} - primary="Copy link" + primary={t('core:action.copy_link', { + postProcess: 'capitalizeFirst', + })} /> )} diff --git a/src/components/Apps/AppsPrivate.tsx b/src/components/Apps/AppsPrivate.tsx index cddbc12..d3af274 100644 --- a/src/components/Apps/AppsPrivate.tsx +++ b/src/components/Apps/AppsPrivate.tsx @@ -36,6 +36,7 @@ import { fileToBase64 } from '../../utils/fileReading'; import { objectToBase64 } from '../../qdn/encryption/group-encryption'; import { getFee } from '../../background'; import { useAtom } from 'jotai'; +import { useTranslation } from 'react-i18next'; const maxFileSize = 50 * 1024 * 1024; // 50MB @@ -62,6 +63,7 @@ export const AppsPrivate = ({ myName }) => { const [memberGroups] = useAtom(memberGroupsAtom); const theme = useTheme(); + const { t } = useTranslation(['core', 'group']); const myGroupsPrivate = useMemo(() => { return memberGroups?.filter( @@ -98,9 +100,11 @@ export const AppsPrivate = ({ myName }) => { errors.forEach((error) => { if (error.code === 'file-too-large') { console.error( - `File ${file.name} is too large. Max size allowed is ${ - maxFileSize / (1024 * 1024) - } MB.` + t('core:message.error.file_too_large', { + filename: file.name, + size: maxFileSize / (1024 * 1024), + postProcess: 'capitalizeFirst', + }) ); } }); @@ -111,7 +115,6 @@ export const AppsPrivate = ({ myName }) => { const addPrivateApp = async () => { try { if (privateAppValues?.groupId === 0) return; - await openApp(privateAppValues, true); } catch (error) { console.error(error); @@ -139,9 +142,28 @@ export const AppsPrivate = ({ myName }) => { const publishPrivateApp = async () => { try { if (selectedGroup === 0) return; - if (!logo) throw new Error('Please select an image for a logo'); - if (!myName) throw new Error('You need a Qortal name to publish'); - if (!newPrivateAppValues?.name) throw new Error('Your app needs a name'); + + if (!logo) + throw new Error( + t('core:message.generic.select_image', { + postProcess: 'capitalizeFirst', + }) + ); + + if (!myName) + throw new Error( + t('core:message.generic.name_publish', { + postProcess: 'capitalizeFirst', + }) + ); + + if (!newPrivateAppValues?.name) + throw new Error( + t('core:message.error.app_need_name', { + postProcess: 'capitalizeFirst', + }) + ); + const base64Logo = await fileToBase64(logo); const base64App = await fileToBase64(file); const objectToSave = { @@ -160,16 +182,22 @@ export const AppsPrivate = ({ myName }) => { if (decryptedData?.error) { throw new Error( - decryptedData?.error || 'Unable to encrypt app. App not published' + decryptedData?.error || + t('core:message.error.unable_encrypt_app', { + postProcess: 'capitalizeFirst', + }) ); } const fee = await getFee('ARBITRARY'); await show({ - message: 'Would you like to publish this app?', + message: t('core:question.publish_app', { + postProcess: 'capitalizeFirst', + }), publishFee: fee.fee + ' QORT', }); + await new Promise((res, rej) => { window .sendMessage('publishOnQDN', { @@ -185,7 +213,12 @@ export const AppsPrivate = ({ myName }) => { rej(response.error); }) .catch((error) => { - rej(error.message || 'An error occurred'); + rej( + error.message || + t('core:message.error.generic', { + postProcess: 'capitalizeFirst', + }) + ); }); }); @@ -203,7 +236,11 @@ export const AppsPrivate = ({ myName }) => { setOpenSnackGlobal(true); setInfoSnackCustom({ type: 'error', - message: error?.message || 'Unable to publish app', + message: + error?.message || + t('core:message.error.unable_publish_app', { + postProcess: 'capitalizeFirst', + }), }); } }; @@ -241,6 +278,7 @@ export const AppsPrivate = ({ myName }) => { Private + {isOpenPrivateModal && ( { display: 'flex', flexDirection: 'column', gap: '5px', - }} // TODO translate + }} > - - + + + + + { marginTop: '15px', }} > - + { } /> + { marginTop: '15px', }} > - + + setPrivateAppValues((prev) => { @@ -397,7 +458,7 @@ export const AppsPrivate = ({ myName }) => { setIsOpenPrivateModal(false); }} > - Close + {t('core:action.close', { postProcess: 'capitalizeFirst' })} @@ -424,7 +485,9 @@ export const AppsPrivate = ({ myName }) => { fontSize: '14px', }} > - Select .zip file containing static content:{' '} + {t('core:message.generic.select_zip', { + postProcess: 'capitalizeFirst', + })} @@ -435,10 +498,11 @@ export const AppsPrivate = ({ myName }) => { fontSize: '14px', }} >{` - 50mb MB maximum`} + 50mb MB max`} {file && ( <> + {`Selected: (${file?.name})`} )} @@ -454,7 +518,13 @@ export const AppsPrivate = ({ myName }) => { > {' '} - {file ? 'Change' : 'Choose'} File + {file + ? t('core:action.change_file', { + postProcess: 'capitalizeFirst', + }) + : t('core:action.choose_file', { + postProcess: 'capitalizeFirst', + })} @@ -466,10 +536,18 @@ export const AppsPrivate = ({ myName }) => { gap: '5px', }} > - + + + setNewPrivateAppValues((prev) => { @@ -525,9 +611,14 @@ export const AppsPrivate = ({ myName }) => { marginTop: '15px', }} > - + + setNewPrivateAppValues((prev) => { @@ -543,10 +634,15 @@ export const AppsPrivate = ({ myName }) => { setLogo(file)}> - + {logo?.name} + @@ -558,7 +654,7 @@ export const AppsPrivate = ({ myName }) => { clearFields(); }} > - Close + {t('core:action.close', { postProcess: 'capitalizeFirst' })} diff --git a/src/components/Apps/useHandlePrivateApps.tsx b/src/components/Apps/useHandlePrivateApps.tsx index 9a324bb..f8dd2a1 100644 --- a/src/components/Apps/useHandlePrivateApps.tsx +++ b/src/components/Apps/useHandlePrivateApps.tsx @@ -1,4 +1,4 @@ -import React, { useContext, useState } from 'react'; +import { useContext, useState } from 'react'; import { executeEvent } from '../../utils/events'; import { getBaseApiReact, MyContext } from '../../App'; import { createEndpoint } from '../../background'; @@ -7,10 +7,9 @@ import { sortablePinnedAppsAtom, } from '../../atoms/global'; import { saveToLocalStorage } from './AppsNavBarDesktop'; -import { base64ToBlobUrl } from '../../utils/fileReading'; import { base64ToUint8Array } from '../../qdn/encryption/group-encryption'; import { uint8ArrayToObject } from '../../backgroundFunctions/encryption'; -import { useAtom, useSetAtom } from 'jotai'; +import { useSetAtom } from 'jotai'; export const useHandlePrivateApps = () => { const [status, setStatus] = useState(''); diff --git a/src/components/Apps/useQortalMessageListener.tsx b/src/components/Apps/useQortalMessageListener.tsx index b1736a2..e2bb3c6 100644 --- a/src/components/Apps/useQortalMessageListener.tsx +++ b/src/components/Apps/useQortalMessageListener.tsx @@ -1,7 +1,7 @@ -import { useCallback, useContext, useEffect, useMemo, useState } from 'react'; +import { useCallback, useContext, useEffect, useState } from 'react'; import { executeEvent } from '../../utils/events'; import { navigationControllerAtom } from '../../atoms/global'; -import { Filesystem, Directory, Encoding } from '@capacitor/filesystem'; +import { Filesystem, Directory } from '@capacitor/filesystem'; import { saveFile } from '../../qortalRequests/get'; import { mimeToExtensionMap } from '../../utils/memeTypes'; import { MyContext } from '../../App'; diff --git a/src/components/Auth/DownloadWallet.tsx b/src/components/Auth/DownloadWallet.tsx index f96dbb6..eb85a20 100644 --- a/src/components/Auth/DownloadWallet.tsx +++ b/src/components/Auth/DownloadWallet.tsx @@ -76,14 +76,16 @@ export const DownloadWallet = ({ if (!keepCurrentPassword && !newPassword) { setWalletToBeDownloadedError( t('auth:wallet.error.missing_new_password', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }) ); return; } if (!walletToBeDownloadedPassword) { setWalletToBeDownloadedError( - t('auth:wallet.error.missing_password', { postProcess: 'capitalize' }) + t('auth:wallet.error.missing_password', { + postProcess: 'capitalizeFirst', + }) ); return; } @@ -157,7 +159,9 @@ export const DownloadWallet = ({ fontWeight: 600, }} > - {t('auth:action.download_account', { postProcess: 'capitalize' })} + {t('auth:action.download_account', { + postProcess: 'capitalizeFirst', + })} @@ -167,7 +171,7 @@ export const DownloadWallet = ({ <> {t('auth:wallet.password_confirmation', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -206,7 +210,7 @@ export const DownloadWallet = ({ {t('auth:wallet.keep_password', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -217,7 +221,7 @@ export const DownloadWallet = ({ <> {t('auth:wallet.new_password', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -233,7 +237,7 @@ export const DownloadWallet = ({ {t('auth:password_confirmation', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -248,13 +252,13 @@ export const DownloadWallet = ({ await saveFileToDiskFunc(); await showInfo({ message: t('auth:message.generic.keep_secure', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }), }); }} > {t('auth:action.download_account', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} diff --git a/src/components/Chat/GroupAnnouncements.tsx b/src/components/Chat/GroupAnnouncements.tsx index c91bfaa..abb4860 100644 --- a/src/components/Chat/GroupAnnouncements.tsx +++ b/src/components/Chat/GroupAnnouncements.tsx @@ -289,9 +289,9 @@ export const GroupAnnouncements = ({ const fee = await getFee('ARBITRARY'); await show({ - message: t('group:question.perform_transaction', { + message: t('core:question.perform_transaction', { action: 'ARBITRARY', - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }), publishFee: fee.fee + ' QORT', }); diff --git a/src/components/CoreSyncStatus.tsx b/src/components/CoreSyncStatus.tsx index 79e22d2..3e782c4 100644 --- a/src/components/CoreSyncStatus.tsx +++ b/src/components/CoreSyncStatus.tsx @@ -77,26 +77,26 @@ export const CoreSyncStatus = () => { let imagePath = syncingImg; let message = t('core:message.status.synchronizing', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }); if (isMintingPossible && !isUsingGateway) { imagePath = syncedMintingImg; - message = `${t(`core:message.status.${isSynchronizing ? 'synchronizing' : 'synchronized'}`, { postProcess: 'capitalize' })} ${t('core:message.status.minting')}`; + message = `${t(`core:message.status.${isSynchronizing ? 'synchronizing' : 'synchronized'}`, { postProcess: 'capitalizeFirst' })} ${t('core:message.status.minting')}`; } else if (isSynchronizing === true && syncPercent === 99) { imagePath = syncingImg; } else if (isSynchronizing && !isMintingPossible && syncPercent === 100) { imagePath = syncingImg; - message = `${t('core:message.status.synchronizing', { postProcess: 'capitalize' })} ${!isUsingGateway ? t('core:message.status.not_minting') : ''}`; + message = `${t('core:message.status.synchronizing', { postProcess: 'capitalizeFirst' })} ${!isUsingGateway ? t('core:message.status.not_minting') : ''}`; } else if (!isSynchronizing && !isMintingPossible && syncPercent === 100) { imagePath = syncedImg; - message = `${t('core:message.status.synchronized', { postProcess: 'capitalize' })} ${!isUsingGateway ? t('core:message.status.not_minting') : ''}`; + message = `${t('core:message.status.synchronized', { postProcess: 'capitalizeFirst' })} ${!isUsingGateway ? t('core:message.status.not_minting') : ''}`; } else if (isSynchronizing && isMintingPossible && syncPercent === 100) { imagePath = syncingImg; - message = `${t('core:message.status.synchronizing', { postProcess: 'capitalize' })} ${!isUsingGateway ? t('core:message.status.minting') : ''}`; + message = `${t('core:message.status.synchronizing', { postProcess: 'capitalizeFirst' })} ${!isUsingGateway ? t('core:message.status.minting') : ''}`; } else if (!isSynchronizing && isMintingPossible && syncPercent === 100) { imagePath = syncedMintingImg; - message = `${t('core:message.status.synchronized', { postProcess: 'capitalize' })} ${!isUsingGateway ? t('core:message.status.minting') : ''}`; + message = `${t('core:message.status.synchronized', { postProcess: 'capitalizeFirst' })} ${!isUsingGateway ? t('core:message.status.minting') : ''}`; } return ( @@ -121,36 +121,38 @@ export const CoreSyncStatus = () => { top: '10px', }} > -

{t('core:core.information', { postProcess: 'capitalize' })}

+

+ {t('core:core.information', { postProcess: 'capitalizeFirst' })} +

- {t('core:core.version', { postProcess: 'capitalize' })}:{' '} + {t('core:core.version', { postProcess: 'capitalizeFirst' })}:{' '} {buildVersion}

{message}

- {t('core:core.block_height', { postProcess: 'capitalize' })}:{' '} + {t('core:core.block_height', { postProcess: 'capitalizeFirst' })}:{' '} {height || ''}

- {t('core:core.peers', { postProcess: 'capitalize' })}:{' '} + {t('core:core.peers', { postProcess: 'capitalizeFirst' })}:{' '} {numberOfConnections || ''}

- {t('auth:node.using_public', { postProcess: 'capitalize' })}:{' '} + {t('auth:node.using_public', { postProcess: 'capitalizeFirst' })}:{' '} {isUsingGateway?.toString()}

- {t('core:ui.version', { postProcess: 'capitalize' })}:{' '} + {t('core:ui.version', { postProcess: 'capitalizeFirst' })}:{' '} {manifestData.version}

diff --git a/src/components/Explore/Explore.tsx b/src/components/Explore/Explore.tsx index 3da3cf5..33c7876 100644 --- a/src/components/Explore/Explore.tsx +++ b/src/components/Explore/Explore.tsx @@ -46,7 +46,7 @@ export const Explore = ({ setDesktopViewMode }) => { fontSize: '1rem', }} > - {t('tutorial:initial.trade_qort', { postProcess: 'capitalize' })} + {t('tutorial:initial.trade_qort', { postProcess: 'capitalizeFirst' })} @@ -73,7 +73,7 @@ export const Explore = ({ setDesktopViewMode }) => { fontSize: '1rem', }} > - {t('tutorial:initial.see_apps', { postProcess: 'capitalize' })} + {t('tutorial:initial.see_apps', { postProcess: 'capitalizeFirst' })} @@ -102,7 +102,9 @@ export const Explore = ({ setDesktopViewMode }) => { fontSize: '1rem', }} > - {t('tutorial:initial.general_chat', { postProcess: 'capitalize' })} + {t('tutorial:initial.general_chat', { + postProcess: 'capitalizeFirst', + })} @@ -129,7 +131,7 @@ export const Explore = ({ setDesktopViewMode }) => { fontSize: '1rem', }} > - {t('core:wallet.wallet_other', { postProcess: 'capitalize' })} + {t('core:wallet.wallet_other', { postProcess: 'capitalizeFirst' })} diff --git a/src/components/GeneralNotifications.tsx b/src/components/GeneralNotifications.tsx index c7a6072..b88000e 100644 --- a/src/components/GeneralNotifications.tsx +++ b/src/components/GeneralNotifications.tsx @@ -111,7 +111,7 @@ export const GeneralNotifications = ({ address }) => { userSelect: 'none', }} > - No new notifications + {t('core:message.generic.no_notifications')} )} {hasNewPayment && ( diff --git a/src/components/GlobalActions/JoinGroup.tsx b/src/components/GlobalActions/JoinGroup.tsx index a56d642..fc77d85 100644 --- a/src/components/GlobalActions/JoinGroup.tsx +++ b/src/components/GlobalActions/JoinGroup.tsx @@ -70,9 +70,9 @@ export const JoinGroup = () => { const fee = await getFee('JOIN_GROUP'); await show({ - message: t('group:question.perform_transaction', { + message: t('core:question.perform_transaction', { action: 'JOIN_GROUP', - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }), publishFee: fee.fee + ' QORT', }); @@ -89,7 +89,7 @@ export const JoinGroup = () => { setInfoSnack({ type: 'success', message: t('group:message.success.group_join', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }), }); @@ -100,11 +100,11 @@ export const JoinGroup = () => { type: 'joined-group', label: t('group:message.success.group_join_label', { group_name: group?.groupName, - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }), labelDone: t('group:message.success.group_join_label', { group_name: group?.groupName, - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }), done: false, groupId, @@ -118,11 +118,11 @@ export const JoinGroup = () => { type: 'joined-group-request', label: t('group:message.success.group_join_request', { group_name: group?.groupName, - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }), labelDone: t('group:message.success.group_join_outcome', { group_name: group?.groupName, - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }), done: false, groupId, @@ -147,7 +147,9 @@ export const JoinGroup = () => { type: 'error', message: error.message || - t('core:message.error.generic', { postProcess: 'capitalize' }), + t('core:message.error.generic', { + postProcess: 'capitalizeFirst', + }), }); setOpenSnack(true); rej(error); @@ -205,7 +207,7 @@ export const JoinGroup = () => { fontWeight: 600, }} > - {t('group:group.name', { postProcess: 'capitalize' })}:{' '} + {t('group:group.name', { postProcess: 'capitalizeFirst' })}:{' '} {` ${groupInfo?.groupName}`} @@ -215,8 +217,10 @@ export const JoinGroup = () => { fontWeight: 600, }} > - {t('group:group.member_number', { postProcess: 'capitalize' })}:{' '} - {` ${groupInfo?.memberCount}`} + {t('group:group.member_number', { + postProcess: 'capitalizeFirst', + })} + : {` ${groupInfo?.memberCount}`} {groupInfo?.description && ( @@ -237,7 +241,7 @@ export const JoinGroup = () => { }} > {t('group:message.generic.already_in_group', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} )} @@ -249,7 +253,7 @@ export const JoinGroup = () => { }} > {t('group:message.generic.closed_group', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} )} @@ -276,7 +280,7 @@ export const JoinGroup = () => { }} > {t('core:action.join', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -291,7 +295,7 @@ export const JoinGroup = () => { onClick={() => setIsOpen(false)} > {t('core:action.close', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} diff --git a/src/components/Group/AddGroup.tsx b/src/components/Group/AddGroup.tsx index 8b91ebe..24ac2da 100644 --- a/src/components/Group/AddGroup.tsx +++ b/src/components/Group/AddGroup.tsx @@ -105,22 +105,22 @@ export const AddGroup = ({ address, open, setOpen }) => { if (!name) throw new Error( t('group:message.error.name_required', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }) ); if (!description) throw new Error( t('group:message.error.description_required', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }) ); const fee = await getFee('CREATE_GROUP'); await show({ - message: t('group:question.perform_transaction', { + message: t('core:question.perform_transaction', { action: 'CREATE_GROUP', - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }), publishFee: fee.fee + ' QORT', }); @@ -140,7 +140,7 @@ export const AddGroup = ({ address, open, setOpen }) => { setInfoSnack({ type: 'success', message: t('group:message.success.group_creation', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }), }); setOpenSnack(true); @@ -150,11 +150,11 @@ export const AddGroup = ({ address, open, setOpen }) => { type: 'created-group', label: t('group:message.success.group_creation_name', { group_name: name, - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }), labelDone: t('group:message.success.group_creation_label', { group_name: name, - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }), done: false, }, @@ -172,7 +172,9 @@ export const AddGroup = ({ address, open, setOpen }) => { rej({ message: error.message || - t('core:message.error.generic', { postProcess: 'capitalize' }), + t('core:message.error.generic', { + postProcess: 'capitalizeFirst', + }), }); }); }); @@ -225,7 +227,7 @@ export const AddGroup = ({ address, open, setOpen }) => { > - {t('group:group.management', { postProcess: 'capitalize' })} + {t('group:group.management', { postProcess: 'capitalizeFirst' })} { > { /> { /> { > setName(e.target.value)} @@ -350,13 +352,13 @@ export const AddGroup = ({ address, open, setOpen }) => { > setDescription(e.target.value)} @@ -372,7 +374,7 @@ export const AddGroup = ({ address, open, setOpen }) => { > @@ -385,12 +387,12 @@ export const AddGroup = ({ address, open, setOpen }) => { > {t('group:group.open', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} {t('group:group.closed', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -407,7 +409,7 @@ export const AddGroup = ({ address, open, setOpen }) => { > {t('group:advanced_options', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -424,7 +426,7 @@ export const AddGroup = ({ address, open, setOpen }) => { > @@ -437,12 +439,12 @@ export const AddGroup = ({ address, open, setOpen }) => { > {t('core:count.none', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} {t('core:count.one', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} 20% @@ -462,7 +464,7 @@ export const AddGroup = ({ address, open, setOpen }) => { > @@ -521,7 +523,7 @@ export const AddGroup = ({ address, open, setOpen }) => { > @@ -582,7 +584,7 @@ export const AddGroup = ({ address, open, setOpen }) => { onClick={handleCreateGroup} > {t('group:action.create_group', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} diff --git a/src/components/Group/AddGroupList.tsx b/src/components/Group/AddGroupList.tsx index 49dce3d..06113a4 100644 --- a/src/components/Group/AddGroupList.tsx +++ b/src/components/Group/AddGroupList.tsx @@ -113,9 +113,9 @@ export const AddGroupList = ({ setInfoSnack, setOpenSnack }) => { const fee = await getFee('JOIN_GROUP'); await show({ - message: t('group:question.perform_transaction', { + message: t('core:question.perform_transaction', { action: 'JOIN_GROUP', - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }), publishFee: fee.fee + ' QORT', }); @@ -131,7 +131,7 @@ export const AddGroupList = ({ setInfoSnack, setOpenSnack }) => { setInfoSnack({ type: 'success', message: t('group:message.success.join_group', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }), }); @@ -142,11 +142,11 @@ export const AddGroupList = ({ setInfoSnack, setOpenSnack }) => { type: 'joined-group', label: t('group:message.success.group_join_label', { group_name: group?.groupName, - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }), labelDone: t('group:message.success.group_join_label', { group_name: group?.groupName, - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }), done: false, groupId, @@ -160,11 +160,11 @@ export const AddGroupList = ({ setInfoSnack, setOpenSnack }) => { type: 'joined-group-request', label: t('group:message.success.group_join_request', { group_name: group?.groupName, - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }), labelDone: t('group:message.success.group_join_outcome', { group_name: group?.groupName, - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }), done: false, groupId, @@ -243,7 +243,7 @@ export const AddGroupList = ({ setInfoSnack, setOpenSnack }) => { }} > - {t('core:action.join', { postProcess: 'capitalize' })}{' '} + {t('core:action.join', { postProcess: 'capitalizeFirst' })}{' '} {group?.groupName} @@ -257,7 +257,7 @@ export const AddGroupList = ({ setInfoSnack, setOpenSnack }) => { onClick={() => handleJoinGroup(group, group?.isOpen)} > {t('group:action.join_group', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} diff --git a/src/components/Group/Forum/GroupMail.tsx b/src/components/Group/Forum/GroupMail.tsx index 41f75ef..c1718a5 100644 --- a/src/components/Group/Forum/GroupMail.tsx +++ b/src/components/Group/Forum/GroupMail.tsx @@ -170,7 +170,9 @@ export const GroupMail = ({ .catch((error) => { rej( error.message || - t('core:message.error.generic', { postProcess: 'capitalize' }) + t('core:message.error.generic', { + postProcess: 'capitalizeFirst', + }) ); }); }); @@ -754,7 +756,7 @@ export const GroupMail = ({ {t('group:last_message', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} :{' '} @@ -791,7 +793,7 @@ export const GroupMail = ({ }} > {t('core:page.last', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} diff --git a/src/components/Group/Forum/NewThread.tsx b/src/components/Group/Forum/NewThread.tsx index 1a1e5df..802f4a4 100644 --- a/src/components/Group/Forum/NewThread.tsx +++ b/src/components/Group/Forum/NewThread.tsx @@ -182,29 +182,29 @@ export const NewThread = ({ const missingFields: string[] = []; if (!isMessage && !threadTitle) { - errorMsg = t('group:question.provide_thread', { - postProcess: 'capitalize', + errorMsg = t('core:question.provide_thread', { + postProcess: 'capitalizeFirst', }); } if (!name) { errorMsg = t('group:message.error.access_name', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }); } if (!groupInfo) { errorMsg = t('group:message.error.group_info', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }); } // if (!description) missingFields.push('subject') if (missingFields.length > 0) { const missingFieldsString = missingFields.join(', '); - const errMsg = t('group:message.error.missing_field', { + const errMsg = t('core:message.error.missing_fields', { field: missingFieldsString, - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }); errorMsg = errMsg; } @@ -217,7 +217,7 @@ export const NewThread = ({ if (!htmlContent?.trim() || htmlContent?.trim() === '

') { const errMsg = t('group:message.generic.provide_message', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }); throw new Error(errMsg); } @@ -229,9 +229,9 @@ export const NewThread = ({ feeToShow = +feeToShow * 2; } await show({ - message: t('group:question.perform_transaction', { + message: t('core:question.perform_transaction', { action: 'ARBITRARY', - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }), publishFee: feeToShow + ' QORT', }); @@ -257,7 +257,7 @@ export const NewThread = ({ isPrivate === false ? null : await getSecretKey(false, true); if (!secretKey && isPrivate) { const errMsg = t('group:message.error.group_secret_key', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }); throw new Error(errMsg); } @@ -320,7 +320,7 @@ export const NewThread = ({ setInfoSnack({ type: 'success', message: t('group:message.success.thread_creation', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }), }); setOpenSnack(true); @@ -332,7 +332,7 @@ export const NewThread = ({ } else { if (!currentThread) { const errMsg = t('group:message.error.thread_id', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }); throw new Error(errMsg); } @@ -360,7 +360,7 @@ export const NewThread = ({ setInfoSnack({ type: 'success', message: t('group:message.success.post_creation', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }), }); setOpenSnack(true); @@ -404,10 +404,10 @@ export const NewThread = ({ {currentThread ? t('core:action.new.post', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }) : t('core:action.new.thread', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -437,10 +437,10 @@ export const NewThread = ({ {isMessage ? t('core:action.post_message', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }) : t('core:action.new.thread', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -562,10 +562,10 @@ export const NewThread = ({ {isMessage ? t('core:action.post', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }) : t('core:action.create_thread', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} diff --git a/src/components/Group/Forum/Thread.tsx b/src/components/Group/Forum/Thread.tsx index a6c2d0f..447200e 100644 --- a/src/components/Group/Forum/Thread.tsx +++ b/src/components/Group/Forum/Thread.tsx @@ -609,7 +609,7 @@ export const Thread = ({ {t('group:action.return_to_thread', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -688,7 +688,7 @@ export const Thread = ({ disabled={!hasFirstPage} variant="contained" > - {t('core:page.first', { postProcess: 'capitalize' })} + {t('core:page.first', { postProcess: 'capitalizeFirst' })} @@ -929,7 +929,9 @@ export const Thread = ({ fontSize: '18px', }} > - {t('core:downloading_qdn', { postProcess: 'capitalize' })} + {t('core:downloading_qdn', { + postProcess: 'capitalizeFirst', + })} @@ -961,7 +963,7 @@ export const Thread = ({ }} > {t('group:action.refetch_page', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -1000,7 +1002,7 @@ export const Thread = ({ disabled={!hasFirstPage} variant="contained" > - {t('core:page.first', { postProcess: 'capitalize' })} + {t('core:page.first', { postProcess: 'capitalizeFirst' })} @@ -1071,7 +1073,7 @@ export const Thread = ({ diff --git a/src/components/Group/Group.tsx b/src/components/Group/Group.tsx index a7e330d..b524697 100644 --- a/src/components/Group/Group.tsx +++ b/src/components/Group/Group.tsx @@ -514,7 +514,9 @@ export const Group = ({ .catch((error) => { rej( error.message || - t('core:message.error.generic', { postProcess: 'capitalize' }) + t('core:message.error.generic', { + postProcess: 'capitalizeFirst', + }) ); }); }); @@ -543,7 +545,9 @@ export const Group = ({ .catch((error) => { rej( error.message || - t('core:message.error.generic', { postProcess: 'capitalize' }) + t('core:message.error.generic', { + postProcess: 'capitalizeFirst', + }) ); }); }); @@ -575,7 +579,9 @@ export const Group = ({ .catch((error) => { rej( error.message || - t('core:message.error.generic', { postProcess: 'capitalize' }) + t('core:message.error.generic', { + postProcess: 'capitalizeFirst', + }) ); }); }); @@ -1098,7 +1104,9 @@ export const Group = ({ .catch((error) => { rej( error.message || - t('core:message.error.generic', { postProcess: 'capitalize' }) + t('core:message.error.generic', { + postProcess: 'capitalizeFirst', + }) ); }); }); @@ -1995,7 +2003,7 @@ export const Group = ({ }} > {t('group:message.generic.no_selection', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -2094,7 +2102,7 @@ export const Group = ({ {' '} {t('group:message.generic.encryption_key', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -2120,21 +2128,21 @@ export const Group = ({ {' '} {t('group:message.generic.not_part_group', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} {t('group:message.generic.only_encrypted', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} {t('group:message.generic.notify_admins', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -2156,7 +2164,7 @@ export const Group = ({ onClick={() => notifyAdmin(admin)} > {t('core:action.notify', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -2381,7 +2389,7 @@ export const Group = ({ message: isLoadingGroupMessage || t('group:message.generic.setting_group', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }), }} /> @@ -2390,7 +2398,7 @@ export const Group = ({ open={isLoadingGroups} info={{ message: t('group:message.generic.setting_group', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }), }} /> diff --git a/src/components/Group/GroupInvites.tsx b/src/components/Group/GroupInvites.tsx index ca3f32c..f3da8a0 100644 --- a/src/components/Group/GroupInvites.tsx +++ b/src/components/Group/GroupInvites.tsx @@ -71,7 +71,7 @@ export const GroupInvites = ({ myAddress, setOpenAddGroup }) => { fontSize: '1rem', }} > - {t('group:group.invites', { postProcess: 'capitalize' })}{' '} + {t('group:group.invites', { postProcess: 'capitalizeFirst' })}{' '} {groupsWithJoinRequests?.length > 0 && ` (${groupsWithJoinRequests?.length})`} @@ -131,7 +131,7 @@ export const GroupInvites = ({ myAddress, setOpenAddGroup }) => { }} > {t('group:message.generic.no_display', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} @@ -181,7 +181,7 @@ export const GroupInvites = ({ myAddress, setOpenAddGroup }) => { }} primary={t('group:message.generic.group_invited_you', { group: group?.groupName, - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} /> diff --git a/src/components/Group/GroupJoinRequests.tsx b/src/components/Group/GroupJoinRequests.tsx index 15304f5..0991edb 100644 --- a/src/components/Group/GroupJoinRequests.tsx +++ b/src/components/Group/GroupJoinRequests.tsx @@ -144,7 +144,7 @@ export const GroupJoinRequests = ({ fontSize: '1rem', }} > - {t('group:join_requests', { postProcess: 'capitalize' })}{' '} + {t('group:join_requests', { postProcess: 'capitalizeFirst' })}{' '} {filteredJoinRequests?.filter((group) => group?.data?.length > 0) ?.length > 0 && ` (${filteredJoinRequests?.filter((group) => group?.data?.length > 0)?.length})`} @@ -207,7 +207,7 @@ export const GroupJoinRequests = ({ }} > {t('group:message.generic.no_display', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', })} diff --git a/src/components/Group/HomeDesktop.tsx b/src/components/Group/HomeDesktop.tsx index 83f8828..c270df0 100644 --- a/src/components/Group/HomeDesktop.tsx +++ b/src/components/Group/HomeDesktop.tsx @@ -85,7 +85,7 @@ export const HomeDesktop = ({ padding: '10px', }} > - {t('core:welcome', { postProcess: 'capitalize' })} + {t('core:welcome', { postProcess: 'capitalizeFirst' })} {userInfo?.name ? ( - {t('tutorial:initial.explore', { postProcess: 'capitalize' })} + {t('tutorial:initial.explore', { + postProcess: 'capitalizeFirst', + })} {' '} diff --git a/src/components/Group/InviteMember.tsx b/src/components/Group/InviteMember.tsx index 24ff960..8d7bcf2 100644 --- a/src/components/Group/InviteMember.tsx +++ b/src/components/Group/InviteMember.tsx @@ -17,9 +17,9 @@ export const InviteMember = ({ groupId, setInfoSnack, setOpenSnack, show }) => { const fee = await getFee('GROUP_INVITE'); await show({ - message: t('group:question.perform_transaction', { + message: t('core:question.perform_transaction', { action: 'GROUP_INVITE', - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }), publishFee: fee.fee + ' QORT', }); @@ -40,7 +40,7 @@ export const InviteMember = ({ groupId, setInfoSnack, setOpenSnack, show }) => { type: 'success', message: t('group:message.success.group_invite', { value: value, - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }), }); setOpenSnack(true); @@ -61,7 +61,7 @@ export const InviteMember = ({ groupId, setInfoSnack, setOpenSnack, show }) => { message: error?.message || t('core:message.error.generic', { - postProcess: 'capitalize', + postProcess: 'capitalizeFirst', }), }); setOpenSnack(true); @@ -86,7 +86,7 @@ export const InviteMember = ({ groupId, setInfoSnack, setOpenSnack, show }) => { flexDirection: 'column', }} > - {t('group:action.invite_member', { postProcess: 'capitalize' })} + {t('group:action.invite_member', { postProcess: 'capitalizeFirst' })} @@ -99,14 +99,14 @@ export const InviteMember = ({ groupId, setInfoSnack, setOpenSnack, show }) => {