Merge pull request #47 from nbenaglia/feature/i18n-apps-pages

i18n: Add translations for apps
This commit is contained in:
nico.benaz 2025-05-16 09:24:36 +02:00 committed by GitHub
commit af65881784
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
62 changed files with 1153 additions and 637 deletions

View File

@ -7,4 +7,4 @@ In JSON file:
In GUI: 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' })}`

View File

@ -2514,7 +2514,9 @@ function App() {
setExtstate('create-wallet'); setExtstate('create-wallet');
}} }}
> >
{t('auth:action.create_account', { postProcess: 'capitalize' })} {t('auth:action.create_account', {
postProcess: 'capitalizeFirst',
})}
</CustomButton> </CustomButton>
</> </>
)} )}
@ -2611,7 +2613,9 @@ function App() {
fontWeight: 600, fontWeight: 600,
}} }}
> >
{t('auth:action.authenticate', { postProcess: 'capitalize' })} {t('auth:action.authenticate', {
postProcess: 'capitalizeFirst',
})}
</TextP> </TextP>
</Box> </Box>
@ -2619,7 +2623,7 @@ function App() {
<> <>
<CustomLabel htmlFor="standard-adornment-password"> <CustomLabel htmlFor="standard-adornment-password">
{t('auth:wallet.password', { postProcess: 'capitalize' })} {t('auth:wallet.password', { postProcess: 'capitalizeFirst' })}
</CustomLabel> </CustomLabel>
<Spacer height="5px" /> <Spacer height="5px" />
@ -2643,7 +2647,7 @@ function App() {
fontSize: '12px', fontSize: '12px',
}} }}
> >
{t('auth:node.using', { postProcess: 'capitalize' })}:{' '} {t('auth:node.using', { postProcess: 'capitalizeFirst' })}:{' '}
{currentNode?.url} {currentNode?.url}
</Typography> </Typography>
</> </>
@ -2655,7 +2659,9 @@ function App() {
fontSize: '12px', fontSize: '12px',
}} }}
> >
{t('auth:node.using_public', { postProcess: 'capitalize' })} {t('auth:node.using_public', {
postProcess: 'capitalizeFirst',
})}
</Typography> </Typography>
</> </>
)} )}
@ -2663,7 +2669,9 @@ function App() {
<Spacer height="20px" /> <Spacer height="20px" />
<CustomButton onClick={authenticateWallet}> <CustomButton onClick={authenticateWallet}>
{t('auth:action.authenticate', { postProcess: 'capitalize' })} {t('auth:action.authenticate', {
postProcess: 'capitalizeFirst',
})}
</CustomButton> </CustomButton>
<ErrorText>{walletToBeDecryptedError}</ErrorText> <ErrorText>{walletToBeDecryptedError}</ErrorText>
@ -2932,7 +2940,7 @@ function App() {
<CustomButton onClick={createAccountFunc}> <CustomButton onClick={createAccountFunc}>
{t('auth:action.create_account', { {t('auth:action.create_account', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</CustomButton> </CustomButton>
</Box> </Box>
@ -2978,7 +2986,7 @@ function App() {
}} }}
> >
{t('core:action.backup_account', { {t('core:action.backup_account', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</CustomButton> </CustomButton>
</> </>
@ -3008,7 +3016,7 @@ function App() {
}} }}
> >
{t('core:message.success.transfer', { {t('core:message.success.transfer', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</TextP> </TextP>
<Spacer height="100px" /> <Spacer height="100px" />
@ -3019,7 +3027,7 @@ function App() {
}} }}
> >
<CustomButton> <CustomButton>
{t('core:action.continue', { postProcess: 'capitalize' })} {t('core:action.continue', { postProcess: 'capitalizeFirst' })}
</CustomButton> </CustomButton>
</ButtonBase> </ButtonBase>
</Box> </Box>
@ -3036,7 +3044,7 @@ function App() {
}} }}
> >
{t('core:message.success.transfer', { {t('core:message.success.transfer', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</TextP> </TextP>
<Spacer height="100px" /> <Spacer height="100px" />
@ -3045,7 +3053,7 @@ function App() {
window.close(); window.close();
}} }}
> >
{t('core:action.continue', { postProcess: 'capitalize' })} {t('core:action.continue', { postProcess: 'capitalizeFirst' })}
</CustomButton> </CustomButton>
</> </>
)} )}
@ -3061,7 +3069,7 @@ function App() {
}} }}
> >
{t('core:message.success.order_submitted', { {t('core:message.success.order_submitted', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</TextP> </TextP>
<Spacer height="100px" /> <Spacer height="100px" />
@ -3070,7 +3078,7 @@ function App() {
window.close(); window.close();
}} }}
> >
{t('core:action.close', { postProcess: 'capitalize' })} {t('core:action.close', { postProcess: 'capitalizeFirst' })}
</CustomButton> </CustomButton>
</> </>
)} )}
@ -3119,7 +3127,7 @@ function App() {
{message?.paymentFee && ( {message?.paymentFee && (
<DialogContentText id="alert-dialog-description2"> <DialogContentText id="alert-dialog-description2">
{t('core:fee.payment', { {t('core:fee.payment', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
: {message.paymentFee} : {message.paymentFee}
</DialogContentText> </DialogContentText>
@ -3127,7 +3135,7 @@ function App() {
{message?.publishFee && ( {message?.publishFee && (
<DialogContentText id="alert-dialog-description2"> <DialogContentText id="alert-dialog-description2">
{t('core:fee.publish', { {t('core:fee.publish', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
: {message.publishFee} : {message.publishFee}
</DialogContentText> </DialogContentText>
@ -3151,7 +3159,7 @@ function App() {
autoFocus autoFocus
> >
{t('core:action.accept', { {t('core:action.accept', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Button> </Button>
<Button <Button
@ -3170,7 +3178,7 @@ function App() {
onClick={onCancel} onClick={onCancel}
> >
{t('core:action.decline', { {t('core:action.decline', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Button> </Button>
</DialogActions> </DialogActions>
@ -3193,7 +3201,7 @@ function App() {
<DialogActions> <DialogActions>
<Button variant="contained" onClick={onOkInfo} autoFocus> <Button variant="contained" onClick={onOkInfo} autoFocus>
{t('core:action.close', { {t('core:action.close', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Button> </Button>
</DialogActions> </DialogActions>
@ -3214,7 +3222,7 @@ function App() {
<DialogActions> <DialogActions>
<Button variant="contained" onClick={onCancelUnsavedChanges}> <Button variant="contained" onClick={onCancelUnsavedChanges}>
{t('core:action.cancel', { {t('core:action.cancel', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Button> </Button>
<Button <Button
@ -3223,7 +3231,7 @@ function App() {
autoFocus autoFocus
> >
{t('core:action.continue_logout', { {t('core:action.continue_logout', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Button> </Button>
</DialogActions> </DialogActions>
@ -3502,7 +3510,7 @@ function App() {
<Box sx={{ display: 'flex', alignItems: 'center' }}> <Box sx={{ display: 'flex', alignItems: 'center' }}>
<Typography sx={{ fontSize: '14px' }}> <Typography sx={{ fontSize: '14px' }}>
{t('core:message.success.request_read', { {t('core:message.success.request_read', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
<PriorityHighIcon color="warning" /> <PriorityHighIcon color="warning" />
@ -3552,7 +3560,7 @@ function App() {
}} }}
> >
{t('core:action.accept', { {t('core:action.accept', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</CustomButtonAccept> </CustomButtonAccept>
<CustomButtonAccept <CustomButtonAccept
@ -3564,7 +3572,7 @@ function App() {
onClick={() => onCancelQortalRequestExtension()} onClick={() => onCancelQortalRequestExtension()}
> >
{t('core:action.decline', { {t('core:action.decline', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</CustomButtonAccept> </CustomButtonAccept>
</Box> </Box>

View File

@ -351,7 +351,8 @@ export const NotAuthenticated = ({
.catch((error) => { .catch((error) => {
console.error( console.error(
'Failed to set API key:', 'Failed to set API key:',
error.message || t('core:error', { postProcess: 'capitalize' }) error.message ||
t('core:error', { postProcess: 'capitalizeFirst' })
); );
}); });
} else { } else {
@ -361,7 +362,7 @@ export const NotAuthenticated = ({
setInfoSnack({ setInfoSnack({
type: 'error', type: 'error',
message: t('auth:apikey.select_valid', { message: t('auth:apikey.select_valid', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
setOpenSnack(true); setOpenSnack(true);
@ -387,7 +388,7 @@ export const NotAuthenticated = ({
'Failed to set API key:', 'Failed to set API key:',
error.message || error.message ||
t('core:error', { t('core:error', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}) })
); );
}); });
@ -399,7 +400,7 @@ export const NotAuthenticated = ({
message: message:
error?.message || error?.message ||
t('auth:apikey.select_valid', { t('auth:apikey.select_valid', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
setOpenSnack(true); setOpenSnack(true);
@ -481,7 +482,7 @@ export const NotAuthenticated = ({
fontSize: '18px', fontSize: '18px',
}} }}
> >
{t('auth:welcome', { postProcess: 'capitalize' })} {t('auth:welcome', { postProcess: 'capitalizeFirst' })}
<TextSpan <TextSpan
sx={{ sx={{
fontSize: '18px', fontSize: '18px',
@ -511,13 +512,13 @@ export const NotAuthenticated = ({
fontSize: '16px', fontSize: '16px',
}} }}
> >
{t('auth:tips.digital_id', { postProcess: 'capitalize' })} {t('auth:tips.digital_id', { postProcess: 'capitalizeFirst' })}
</Typography> </Typography>
</React.Fragment> </React.Fragment>
} }
> >
<CustomButton onClick={() => setExtstate('wallets')}> <CustomButton onClick={() => setExtstate('wallets')}>
{t('auth:account.account_many', { postProcess: 'capitalize' })} {t('auth:account.account_many', { postProcess: 'capitalizeFirst' })}
</CustomButton> </CustomButton>
</HtmlTooltip> </HtmlTooltip>
</Box> </Box>
@ -542,7 +543,7 @@ export const NotAuthenticated = ({
fontSize: '18px', fontSize: '18px',
}} }}
> >
{t('auth:tips.new_users', { postProcess: 'capitalize' })} {t('auth:tips.new_users', { postProcess: 'capitalizeFirst' })}
</Typography> </Typography>
<Spacer height="10px" /> <Spacer height="10px" />
<Typography <Typography
@ -551,7 +552,7 @@ export const NotAuthenticated = ({
fontSize: '16px', fontSize: '16px',
}} }}
> >
{t('auth:tips.new_account', { postProcess: 'capitalize' })} {t('auth:tips.new_account', { postProcess: 'capitalizeFirst' })}
</Typography> </Typography>
</React.Fragment> </React.Fragment>
} }
@ -572,7 +573,9 @@ export const NotAuthenticated = ({
}, },
}} }}
> >
{t('auth:action.create_account', { postProcess: 'capitalize' })} {t('auth:action.create_account', {
postProcess: 'capitalizeFirst',
})}
</CustomButton> </CustomButton>
</HtmlTooltip> </HtmlTooltip>
</Box> </Box>
@ -585,7 +588,7 @@ export const NotAuthenticated = ({
visibility: !useLocalNode && 'hidden', visibility: !useLocalNode && 'hidden',
}} }}
> >
{t('auth:node.using', { postProcess: 'capitalize' })}:{' '} {t('auth:node.using', { postProcess: 'capitalizeFirst' })}:{' '}
{currentNode?.url} {currentNode?.url}
</Typography> </Typography>
@ -613,7 +616,7 @@ export const NotAuthenticated = ({
textDecoration: 'underline', textDecoration: 'underline',
}} }}
> >
{t('auth:advanced_users', { postProcess: 'capitalize' })} {t('auth:advanced_users', { postProcess: 'capitalizeFirst' })}
</Typography> </Typography>
<Box <Box
sx={{ sx={{
@ -662,8 +665,12 @@ export const NotAuthenticated = ({
} }
label={ label={
isLocal isLocal
? t('auth:node.use_local', { postProcess: 'capitalize' }) ? t('auth:node.use_local', {
: t('auth:node.use_custom', { postProcess: 'capitalize' }) postProcess: 'capitalizeFirst',
})
: t('auth:node.use_custom', {
postProcess: 'capitalizeFirst',
})
} }
/> />
</Box> </Box>
@ -676,8 +683,12 @@ export const NotAuthenticated = ({
component="label" component="label"
> >
{apiKey {apiKey
? t('auth:node.use_local', { postProcess: 'capitalize' }) ? t('auth:node.use_local', {
: t('auth:apikey.import', { postProcess: 'capitalize' })} postProcess: 'capitalizeFirst',
})
: t('auth:apikey.import', {
postProcess: 'capitalizeFirst',
})}
</Button> </Button>
<Typography <Typography
sx={{ sx={{
@ -685,7 +696,7 @@ export const NotAuthenticated = ({
visibility: importedApiKey ? 'visible' : 'hidden', visibility: importedApiKey ? 'visible' : 'hidden',
}} }}
> >
{t('auth:apikey.key', { postProcess: 'capitalize' })}:{' '} {t('auth:apikey.key', { postProcess: 'capitalizeFirst' })}:{' '}
{importedApiKey} {importedApiKey}
</Typography> </Typography>
</> </>
@ -698,7 +709,7 @@ export const NotAuthenticated = ({
variant="contained" variant="contained"
component="label" component="label"
> >
{t('auth:node.choose', { postProcess: 'capitalize' })} {t('auth:node.choose', { postProcess: 'capitalizeFirst' })}
</Button> </Button>
</> </>
<Typography <Typography
@ -707,7 +718,7 @@ export const NotAuthenticated = ({
fontSize: '12px', fontSize: '12px',
}} }}
> >
{t('auth:build_version', { postProcess: 'capitalize' })}: {t('auth:build_version', { postProcess: 'capitalizeFirst' })}:
{manifestData?.version} {manifestData?.version}
</Typography> </Typography>
</Box> </Box>
@ -728,7 +739,7 @@ export const NotAuthenticated = ({
> >
<DialogTitle id="alert-dialog-title"> <DialogTitle id="alert-dialog-title">
{' '} {' '}
{t('auth:node.custom_many', { postProcess: 'capitalize' })}: {t('auth:node.custom_many', { postProcess: 'capitalizeFirst' })}:
</DialogTitle> </DialogTitle>
<DialogContent> <DialogContent>
<Box <Box
@ -798,7 +809,9 @@ export const NotAuthenticated = ({
}} }}
variant="contained" variant="contained"
> >
{t('core:action.choose', { postProcess: 'capitalize' })} {t('core:action.choose', {
postProcess: 'capitalizeFirst',
})}
</Button> </Button>
</Box> </Box>
</Box> </Box>
@ -858,7 +871,7 @@ export const NotAuthenticated = ({
variant="contained" variant="contained"
> >
{t('core:action.choose', { {t('core:action.choose', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Button> </Button>
@ -873,7 +886,7 @@ export const NotAuthenticated = ({
variant="contained" variant="contained"
> >
{t('core:action.edit', { {t('core:action.edit', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Button> </Button>
@ -887,7 +900,9 @@ export const NotAuthenticated = ({
}} }}
variant="contained" variant="contained"
> >
{t('core:remove', { postProcess: 'capitalize' })} {t('core:remove', {
postProcess: 'capitalizeFirst',
})}
</Button> </Button>
</Box> </Box>
</Box> </Box>
@ -926,7 +941,7 @@ export const NotAuthenticated = ({
<DialogActions> <DialogActions>
{mode === 'list' && ( {mode === 'list' && (
<Button variant="contained" onClick={addCustomNode}> <Button variant="contained" onClick={addCustomNode}>
{t('core:action.add', { postProcess: 'capitalize' })} {t('core:action.add', { postProcess: 'capitalizeFirst' })}
</Button> </Button>
)} )}
@ -939,7 +954,7 @@ export const NotAuthenticated = ({
}} }}
autoFocus autoFocus
> >
{t('core:action.close', { postProcess: 'capitalize' })} {t('core:action.close', { postProcess: 'capitalizeFirst' })}
</Button> </Button>
</> </>
)} )}
@ -954,7 +969,7 @@ export const NotAuthenticated = ({
}} }}
> >
{t('auth:action.return_to_list', { {t('auth:action.return_to_list', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Button> </Button>
@ -964,7 +979,7 @@ export const NotAuthenticated = ({
onClick={() => saveCustomNodes(customNodes)} onClick={() => saveCustomNodes(customNodes)}
autoFocus autoFocus
> >
{t('core:save', { postProcess: 'capitalize' })} {t('core:save', { postProcess: 'capitalizeFirst' })}
</Button> </Button>
</> </>
)} )}
@ -979,7 +994,7 @@ export const NotAuthenticated = ({
aria-describedby="alert-dialog-description" aria-describedby="alert-dialog-description"
> >
<DialogTitle id="alert-dialog-title"> <DialogTitle id="alert-dialog-title">
{t('auth:apikey.enter', { postProcess: 'capitalize' })} {t('auth:apikey.enter', { postProcess: 'capitalizeFirst' })}
</DialogTitle> </DialogTitle>
<DialogContent> <DialogContent>
<Box <Box
@ -998,7 +1013,9 @@ export const NotAuthenticated = ({
variant="contained" variant="contained"
component="label" component="label"
> >
{t('auth:apikey.alternative', { postProcess: 'capitalize' })} {t('auth:apikey.alternative', {
postProcess: 'capitalizeFirst',
})}
<input <input
type="file" type="file"
accept=".txt" accept=".txt"
@ -1053,7 +1070,7 @@ export const NotAuthenticated = ({
}} }}
autoFocus autoFocus
> >
{t('core:save', { postProcess: 'capitalize' })} {t('core:save', { postProcess: 'capitalizeFirst' })}
</Button> </Button>
<Button <Button
@ -1063,7 +1080,7 @@ export const NotAuthenticated = ({
setShowSelectApiKey(false); setShowSelectApiKey(false);
}} }}
> >
{t('core:action.close', { postProcess: 'capitalize' })} {t('core:action.close', { postProcess: 'capitalizeFirst' })}
</Button> </Button>
</DialogActions> </DialogActions>
</Dialog> </Dialog>

View File

@ -152,7 +152,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
} else { } else {
setSeedError( setSeedError(
t('auth:message.error.account_creation', { t('auth:message.error.account_creation', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}) })
); );
} }
@ -160,7 +160,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
setSeedError( setSeedError(
error?.message || error?.message ||
t('auth:message.error.account_creation', { t('auth:message.error.account_creation', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}) })
); );
} finally { } finally {
@ -202,7 +202,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
<> <>
<Typography> <Typography>
{t('auth:message.generic.no_account', { {t('auth:message.generic.no_account', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
@ -212,7 +212,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
<> <>
<Typography> <Typography>
{t('auth:message.generic.your_accounts', { {t('auth:message.generic.your_accounts', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
@ -224,7 +224,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
<Box> <Box>
<Typography> <Typography>
{t('auth:account.selected', { {t('auth:account.selected', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
: :
</Typography> </Typography>
@ -282,7 +282,9 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
fontSize: '16px', fontSize: '16px',
}} }}
> >
{t('auth:tips.existing_account', { postProcess: 'capitalize' })} {t('auth:tips.existing_account', {
postProcess: 'capitalizeFirst',
})}
</Typography> </Typography>
</Fragment> </Fragment>
} }
@ -294,7 +296,9 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
display: 'inline', display: 'inline',
}} }}
> >
{t('auth:action.add.seed_phrase', { postProcess: 'capitalize' })} {t('auth:action.add.seed_phrase', {
postProcess: 'capitalizeFirst',
})}
</CustomButton> </CustomButton>
</HtmlTooltip> </HtmlTooltip>
@ -309,7 +313,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
}} }}
> >
{t('auth:tips.additional_wallet', { {t('auth:tips.additional_wallet', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
</Fragment> </Fragment>
@ -323,7 +327,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
> >
<input {...getInputProps()} /> <input {...getInputProps()} />
{t('auth:action.add.account', { {t('auth:action.add.account', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</CustomButton> </CustomButton>
</HtmlTooltip> </HtmlTooltip>
@ -341,7 +345,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
> >
<DialogTitle id="alert-dialog-title"> <DialogTitle id="alert-dialog-title">
{t('auth:message.generic.type_seed', { {t('auth:message.generic.type_seed', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</DialogTitle> </DialogTitle>
@ -353,8 +357,8 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
}} }}
> >
<Label> <Label>
{t('auth:name', { {t('core:name', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Label> </Label>
<Input <Input
@ -367,7 +371,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
<Label> <Label>
{t('auth:seed', { {t('auth:seed', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Label> </Label>
<PasswordField <PasswordField
@ -385,7 +389,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
<Label> <Label>
{t('auth:action.choose_password', { {t('auth:action.choose_password', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Label> </Label>
<PasswordField <PasswordField
@ -413,7 +417,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
}} }}
> >
{t('core:action.close', { {t('core:action.close', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Button> </Button>
<LoadingButton <LoadingButton
@ -427,7 +431,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
autoFocus autoFocus
> >
{t('core:action.add', { {t('core:action.add', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</LoadingButton> </LoadingButton>
<Typography <Typography
@ -516,7 +520,7 @@ const WalletItem = ({ wallet, updateWalletItem, idx, setSelectedWallet }) => {
}} }}
> >
{t('core:action.login', { {t('core:action.login', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
</Box> </Box>
@ -545,8 +549,8 @@ const WalletItem = ({ wallet, updateWalletItem, idx, setSelectedWallet }) => {
}} }}
> >
<Label> <Label>
{t('auth:name', { {t('core:name', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Label> </Label>
<Input <Input
@ -562,7 +566,7 @@ const WalletItem = ({ wallet, updateWalletItem, idx, setSelectedWallet }) => {
<Label> <Label>
{t('auth:note', { {t('auth:note', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Label> </Label>
<Input <Input
@ -593,7 +597,7 @@ const WalletItem = ({ wallet, updateWalletItem, idx, setSelectedWallet }) => {
onClick={() => setIsEdit(false)} onClick={() => setIsEdit(false)}
> >
{t('core:action.close', { {t('core:action.close', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Button> </Button>
<Button <Button
@ -611,7 +615,7 @@ const WalletItem = ({ wallet, updateWalletItem, idx, setSelectedWallet }) => {
onClick={() => updateWalletItem(idx, null)} onClick={() => updateWalletItem(idx, null)}
> >
{t('core:action.remove', { {t('core:action.remove', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Button> </Button>
<Button <Button
@ -636,7 +640,7 @@ const WalletItem = ({ wallet, updateWalletItem, idx, setSelectedWallet }) => {
}} }}
> >
{t('core:action.save', { {t('core:action.save', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Button> </Button>
</Box> </Box>

View File

@ -27,8 +27,8 @@ import {
sortablePinnedAppsAtom, sortablePinnedAppsAtom,
} from '../../atoms/global'; } from '../../atoms/global';
import { saveToLocalStorage } from './AppsNavBarDesktop'; import { saveToLocalStorage } from './AppsNavBarDesktop';
import { useAtom, useSetAtom } from 'jotai'; import { useAtom, useSetAtom } from 'jotai';
import { useTranslation } from 'react-i18next';
export const AppInfo = ({ app, myName }) => { export const AppInfo = ({ app, myName }) => {
const isInstalled = app?.status?.status === 'READY'; const isInstalled = app?.status?.status === 'READY';
@ -37,6 +37,7 @@ export const AppInfo = ({ app, myName }) => {
); );
const theme = useTheme(); const theme = useTheme();
const { t } = useTranslation(['core', 'auth', 'group']);
const isSelectedAppPinned = !!sortablePinnedApps?.find( const isSelectedAppPinned = !!sortablePinnedApps?.find(
(item) => item?.name === app?.name && item?.service === app?.service (item) => item?.name === app?.name && item?.service === app?.service
@ -171,9 +172,13 @@ export const AppInfo = ({ app, myName }) => {
}} }}
> >
<AppDownloadButtonText> <AppDownloadButtonText>
{isSelectedAppPinned // TODO translate {isSelectedAppPinned
? 'Unpin from dashboard' ? t('core:action.unpin_from_dashboard', {
: 'Pin to dashboard'} postProcess: 'capitalizeFirst',
})
: t('core:action.pin_from_dashboard', {
postProcess: 'capitalizeFirst',
})}
</AppDownloadButtonText> </AppDownloadButtonText>
</AppDownloadButton> </AppDownloadButton>
@ -193,7 +198,13 @@ export const AppInfo = ({ app, myName }) => {
}} }}
> >
<AppDownloadButtonText> <AppDownloadButtonText>
{isInstalled ? 'Open' : 'Download'} {isInstalled
? t('core:action.open', {
postProcess: 'capitalizeFirst',
})
: t('core:action.download', {
postProcess: 'capitalizeFirst',
})}
</AppDownloadButtonText> </AppDownloadButtonText>
</AppDownloadButton> </AppDownloadButton>
</Box> </Box>
@ -216,25 +227,40 @@ export const AppInfo = ({ app, myName }) => {
<Spacer width="16px" /> <Spacer width="16px" />
<AppsCategoryInfoSub> <AppsCategoryInfoSub>
<AppsCategoryInfoLabel>Category:</AppsCategoryInfoLabel> <AppsCategoryInfoLabel>
{t('core:category', {
postProcess: 'capitalizeFirst',
})}
:
</AppsCategoryInfoLabel>
<Spacer height="4px" /> <Spacer height="4px" />
<AppsCategoryInfoValue> <AppsCategoryInfoValue>
{app?.metadata?.categoryName || 'none'} {app?.metadata?.categoryName ||
t('core:none', {
postProcess: 'capitalizeFirst',
})}
</AppsCategoryInfoValue> </AppsCategoryInfoValue>
</AppsCategoryInfoSub> </AppsCategoryInfoSub>
</AppsCategoryInfo> </AppsCategoryInfo>
<Spacer height="30px" /> <Spacer height="30px" />
<AppInfoAppName>About this Q-App</AppInfoAppName> <AppInfoAppName>
{t('core:q_apps.about', {
postProcess: 'capitalizeFirst',
})}
</AppInfoAppName>
</AppsWidthLimiter> </AppsWidthLimiter>
<Spacer height="20px" /> <Spacer height="20px" />
<AppsInfoDescription> <AppsInfoDescription>
{app?.metadata?.description || 'No description'} {app?.metadata?.description ||
t('core:message.generic.no_description', {
postProcess: 'capitalizeFirst',
})}
</AppsInfoDescription> </AppsInfoDescription>
</Box> </Box>
</AppsLibraryContainer> </AppsLibraryContainer>

View File

@ -23,6 +23,7 @@ import {
} from '../../atoms/global'; } from '../../atoms/global';
import { saveToLocalStorage } from './AppsNavBarDesktop'; import { saveToLocalStorage } from './AppsNavBarDesktop';
import { useAtom, useSetAtom } from 'jotai'; import { useAtom, useSetAtom } from 'jotai';
import { useTranslation } from 'react-i18next';
export const AppInfoSnippet = ({ export const AppInfoSnippet = ({
app, app,
@ -41,6 +42,7 @@ export const AppInfoSnippet = ({
); );
const theme = useTheme(); const theme = useTheme();
const { t } = useTranslation(['core', 'auth', 'group']);
return ( return (
<AppInfoSnippetContainer <AppInfoSnippetContainer
@ -166,11 +168,16 @@ export const AppInfoSnippet = ({
sx={{ sx={{
backgroundColor: theme.palette.background.paper, backgroundColor: theme.palette.background.paper,
opacity: isSelectedAppPinned ? 0.6 : 1, opacity: isSelectedAppPinned ? 0.6 : 1,
}} // TODO translate }}
> >
<AppDownloadButtonText> <AppDownloadButtonText>
{' '} {isSelectedAppPinned
{isSelectedAppPinned ? 'Unpin' : 'Pin'} ? t('core:action.unpin', {
postProcess: 'capitalizeFirst',
})
: t('core:action.pin', {
postProcess: 'capitalizeFirst',
})}
</AppDownloadButtonText> </AppDownloadButtonText>
</AppDownloadButton> </AppDownloadButton>
@ -187,7 +194,13 @@ export const AppInfoSnippet = ({
}} }}
> >
<AppDownloadButtonText> <AppDownloadButtonText>
{isInstalled ? 'Open' : 'Download'} {isInstalled
? t('core:action.open', {
postProcess: 'capitalizeFirst',
})
: t('core:action.download', {
postProcess: 'capitalizeFirst',
})}
</AppDownloadButtonText> </AppDownloadButtonText>
</AppDownloadButton> </AppDownloadButton>
</AppInfoSnippetRight> </AppInfoSnippetRight>

View File

@ -1,20 +1,8 @@
import React, { useContext, useEffect, useState } from 'react'; import React, { useContext, useEffect, useState } from 'react';
import { import {
AppCircle,
AppCircleContainer,
AppCircleLabel,
AppDownloadButton,
AppDownloadButtonText,
AppInfoAppName,
AppInfoSnippetContainer,
AppInfoSnippetLeft,
AppInfoSnippetMiddle,
AppInfoSnippetRight,
AppInfoUserName,
AppLibrarySubTitle, AppLibrarySubTitle,
AppPublishTagsContainer, AppPublishTagsContainer,
AppsLibraryContainer, AppsLibraryContainer,
AppsParent,
AppsWidthLimiter, AppsWidthLimiter,
PublishQAppCTAButton, PublishQAppCTAButton,
PublishQAppChoseFile, PublishQAppChoseFile,
@ -28,10 +16,7 @@ import {
useTheme, useTheme,
} from '@mui/material'; } from '@mui/material';
import { styled } from '@mui/system'; import { styled } from '@mui/system';
import UnfoldMoreRoundedIcon from '@mui/icons-material/UnfoldMoreRounded';
import { Add } from '@mui/icons-material';
import { MyContext, getBaseApiReact } from '../../App'; import { MyContext, getBaseApiReact } from '../../App';
import LogoSelected from '../../assets/svgs/LogoSelected.svg';
import { Spacer } from '../../common/Spacer'; import { Spacer } from '../../common/Spacer';
import { executeEvent } from '../../utils/events'; import { executeEvent } from '../../utils/events';
import { useDropzone } from 'react-dropzone'; import { useDropzone } from 'react-dropzone';
@ -39,6 +24,7 @@ import { LoadingSnackbar } from '../Snackbar/LoadingSnackbar';
import { CustomizedSnackbars } from '../Snackbar/Snackbar'; import { CustomizedSnackbars } from '../Snackbar/Snackbar';
import { getFee } from '../../background'; import { getFee } from '../../background';
import { fileToBase64 } from '../../utils/fileReading'; import { fileToBase64 } from '../../utils/fileReading';
import { useTranslation } from 'react-i18next';
const CustomSelect = styled(Select)({ const CustomSelect = styled(Select)({
border: '0.5px solid var(--50-white, #FFFFFF80)', border: '0.5px solid var(--50-white, #FFFFFF80)',
@ -81,6 +67,7 @@ export const AppPublish = ({ names, categories }) => {
const [file, setFile] = useState(null); const [file, setFile] = useState(null);
const { show } = useContext(MyContext); const { show } = useContext(MyContext);
const theme = useTheme(); const theme = useTheme();
const { t } = useTranslation(['core', 'auth', 'group']);
const [tag1, setTag1] = useState(''); const [tag1, setTag1] = useState('');
const [tag2, setTag2] = useState(''); const [tag2, setTag2] = useState('');
const [tag3, setTag3] = useState(''); const [tag3, setTag3] = useState('');
@ -106,9 +93,11 @@ export const AppPublish = ({ names, categories }) => {
errors.forEach((error) => { errors.forEach((error) => {
if (error.code === 'file-too-large') { if (error.code === 'file-too-large') {
console.error( console.error(
`File ${file.name} is too large. Max size allowed is ${ t('core:message.error.file_too_large', {
maxFileSize / (1024 * 1024) filename: file.name,
} MB.` size: maxFileSize / (1024 * 1024),
postProcess: 'capitalizeFirst',
})
); );
} }
}); });
@ -142,6 +131,7 @@ export const AppPublish = ({ names, categories }) => {
setTag5(myApp?.metadata?.tags[4] || ''); setTag5(myApp?.metadata?.tags[4] || '');
} }
} catch (error) { } catch (error) {
console.log(error);
} finally { } finally {
setIsLoading(''); setIsLoading('');
} }
@ -179,17 +169,25 @@ export const AppPublish = ({ names, categories }) => {
}); });
if (missingFields.length > 0) { if (missingFields.length > 0) {
const missingFieldsString = missingFields.join(', '); 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); throw new Error(errorMsg);
} }
const fee = await getFee('ARBITRARY'); const fee = await getFee('ARBITRARY');
await show({ await show({
// TODO translate message: t('core:question.publish_app', {
message: 'Would you like to publish this app?', postProcess: 'capitalizeFirst',
}),
publishFee: fee.fee + ' QORT', publishFee: fee.fee + ' QORT',
}); });
setIsLoading('Publishing... Please wait.'); setIsLoading(
t('core:message.generic.publishing', {
postProcess: 'capitalizeFirst',
})
);
const fileBase64 = await fileToBase64(file); const fileBase64 = await fileToBase64(file);
await new Promise((res, rej) => { await new Promise((res, rej) => {
window window
@ -214,13 +212,19 @@ export const AppPublish = ({ names, categories }) => {
rej(response.error); rej(response.error);
}) })
.catch((error) => { .catch((error) => {
rej(error.message || 'An error occurred'); rej(
error.message ||
t('core:message.error.generic', {
postProcess: 'capitalizeFirst',
})
);
}); });
}); });
setInfoSnack({ setInfoSnack({
type: 'success', type: 'success',
message: message: t('core:message.success.published', {
'Successfully published. Please wait a couple minutes for the network to propogate the changes.', postProcess: 'capitalizeFirst',
}),
}); });
setOpenSnack(true); setOpenSnack(true);
const dataObj = { const dataObj = {
@ -239,7 +243,11 @@ export const AppPublish = ({ names, categories }) => {
} catch (error) { } catch (error) {
setInfoSnack({ setInfoSnack({
type: 'error', type: 'error',
message: error?.message || 'Unable to publish app', message:
error?.message ||
t('core:message.error.publish_app', {
postProcess: 'capitalizeFirst',
}),
}); });
setOpenSnack(true); setOpenSnack(true);
} finally { } finally {
@ -260,18 +268,27 @@ export const AppPublish = ({ names, categories }) => {
width: 'auto', width: 'auto',
}} }}
> >
<AppLibrarySubTitle>Create Apps!</AppLibrarySubTitle> <AppLibrarySubTitle>
{t('core:action.create_apps', {
postProcess: 'capitalizeFirst',
})}
!
</AppLibrarySubTitle>
<Spacer height="18px" /> <Spacer height="18px" />
<PublishQAppInfo> <PublishQAppInfo>
Note: Currently, only one App and Website is allowed per Name. {t('core:message.generic.one_app_per_name', {
postProcess: 'capitalizeFirst',
})}
</PublishQAppInfo> </PublishQAppInfo>
<Spacer height="18px" /> <Spacer height="18px" />
<InputLabel sx={{ fontSize: '14px', marginBottom: '2px' }}> <InputLabel sx={{ fontSize: '14px', marginBottom: '2px' }}>
Name/App {t('core:name_app', {
postProcess: 'capitalizeFirst',
})}
</InputLabel> </InputLabel>
<CustomSelect <CustomSelect
@ -286,7 +303,9 @@ export const AppPublish = ({ names, categories }) => {
color: theme.palette.text.secondary, color: theme.palette.text.secondary,
}} }}
> >
Select Name/App {t('core:action.select_name_app', {
postProcess: 'capitalizeFirst',
})}
</em> </em>
{/* This is the placeholder item */} {/* This is the placeholder item */}
</CustomMenuItem> </CustomMenuItem>
@ -298,7 +317,9 @@ export const AppPublish = ({ names, categories }) => {
<Spacer height="15px" /> <Spacer height="15px" />
<InputLabel sx={{ fontSize: '14px', marginBottom: '2px' }}> <InputLabel sx={{ fontSize: '14px', marginBottom: '2px' }}>
App service type {t('core:app_service_type', {
postProcess: 'capitalizeFirst',
})}
</InputLabel> </InputLabel>
<CustomSelect <CustomSelect
@ -313,17 +334,29 @@ export const AppPublish = ({ names, categories }) => {
color: theme.palette.text.secondary, color: theme.palette.text.secondary,
}} }}
> >
Select App Type {t('core:action.select_app_type', {
postProcess: 'capitalizeFirst',
})}
</em> </em>
</CustomMenuItem> </CustomMenuItem>
<CustomMenuItem value={'APP'}>App</CustomMenuItem> <CustomMenuItem value={'APP'}>
<CustomMenuItem value={'WEBSITE'}>Website</CustomMenuItem> {t('core:app', {
postProcess: 'capitalizeFirst',
})}
</CustomMenuItem>
<CustomMenuItem value={'WEBSITE'}>
{t('core:website', {
postProcess: 'capitalizeFirst',
})}
</CustomMenuItem>
</CustomSelect> </CustomSelect>
<Spacer height="15px" /> <Spacer height="15px" />
<InputLabel sx={{ fontSize: '14px', marginBottom: '2px' }}> <InputLabel sx={{ fontSize: '14px', marginBottom: '2px' }}>
Title {t('core:title', {
postProcess: 'capitalizeFirst',
})}
</InputLabel> </InputLabel>
<InputBase <InputBase
@ -348,7 +381,9 @@ export const AppPublish = ({ names, categories }) => {
<Spacer height="15px" /> <Spacer height="15px" />
<InputLabel sx={{ fontSize: '14px', marginBottom: '2px' }}> <InputLabel sx={{ fontSize: '14px', marginBottom: '2px' }}>
Description {t('core:description', {
postProcess: 'capitalizeFirst',
})}
</InputLabel> </InputLabel>
<InputBase <InputBase
@ -373,7 +408,9 @@ export const AppPublish = ({ names, categories }) => {
<Spacer height="15px" /> <Spacer height="15px" />
<InputLabel sx={{ fontSize: '14px', marginBottom: '2px' }}> <InputLabel sx={{ fontSize: '14px', marginBottom: '2px' }}>
Category {t('core:category', {
postProcess: 'capitalizeFirst',
})}
</InputLabel> </InputLabel>
<CustomSelect <CustomSelect
@ -388,7 +425,9 @@ export const AppPublish = ({ names, categories }) => {
color: theme.palette.text.secondary, color: theme.palette.text.secondary,
}} }}
> >
Select Category {t('core:action.select_category', {
postProcess: 'capitalizeFirst',
})}
</em> </em>
</CustomMenuItem> </CustomMenuItem>
{categories?.map((category) => { {categories?.map((category) => {
@ -403,7 +442,9 @@ export const AppPublish = ({ names, categories }) => {
<Spacer height="15px" /> <Spacer height="15px" />
<InputLabel sx={{ fontSize: '14px', marginBottom: '2px' }}> <InputLabel sx={{ fontSize: '14px', marginBottom: '2px' }}>
Tags {t('core:tags', {
postProcess: 'capitalizeFirst',
})}
</InputLabel> </InputLabel>
<AppPublishTagsContainer> <AppPublishTagsContainer>
@ -497,7 +538,9 @@ export const AppPublish = ({ names, categories }) => {
<Spacer height="30px" /> <Spacer height="30px" />
<PublishQAppInfo> <PublishQAppInfo>
Select .zip file containing static content:{' '} {t('core:message.generic.select_zip', {
postProcess: 'capitalizeFirst',
})}
</PublishQAppInfo> </PublishQAppInfo>
<Spacer height="10px" /> <Spacer height="10px" />
@ -517,7 +560,7 @@ export const AppPublish = ({ names, categories }) => {
<PublishQAppChoseFile {...getRootProps()}> <PublishQAppChoseFile {...getRootProps()}>
{' '} {' '}
<input {...getInputProps()} /> <input {...getInputProps()} />
Choose File {t('core:action.choose_file', { postProcess: 'capitalizeFirst' })}
</PublishQAppChoseFile> </PublishQAppChoseFile>
<Spacer height="35px" /> <Spacer height="35px" />
@ -528,7 +571,7 @@ export const AppPublish = ({ names, categories }) => {
}} }}
onClick={publishApp} onClick={publishApp}
> >
Publish {t('core:action.publish', { postProcess: 'capitalizeFirst' })}
</PublishQAppCTAButton> </PublishQAppCTAButton>
</AppsWidthLimiter> </AppsWidthLimiter>

View File

@ -7,6 +7,7 @@ import { StarFilledIcon } from '../../assets/Icons/StarFilled';
import { StarEmptyIcon } from '../../assets/Icons/StarEmpty'; import { StarEmptyIcon } from '../../assets/Icons/StarEmpty';
import { AppInfoUserName } from './Apps-styles'; import { AppInfoUserName } from './Apps-styles';
import { Spacer } from '../../common/Spacer'; import { Spacer } from '../../common/Spacer';
import { useTranslation } from 'react-i18next';
export const AppRating = ({ app, myName, ratingCountPosition = 'right' }) => { export const AppRating = ({ app, myName, ratingCountPosition = 'right' }) => {
const [value, setValue] = useState(0); const [value, setValue] = useState(0);
@ -19,6 +20,7 @@ export const AppRating = ({ app, myName, ratingCountPosition = 'right' }) => {
const [openSnack, setOpenSnack] = useState(false); const [openSnack, setOpenSnack] = useState(false);
const [infoSnack, setInfoSnack] = useState(null); const [infoSnack, setInfoSnack] = useState(null);
const hasCalledRef = useRef(false); const hasCalledRef = useRef(false);
const { t } = useTranslation(['core', 'group']);
const getRating = useCallback(async (name, service) => { const getRating = useCallback(async (name, service) => {
try { try {
@ -101,26 +103,39 @@ export const AppRating = ({ app, myName, ratingCountPosition = 'right' }) => {
const rateFunc = async (event, chosenValue, currentValue) => { const rateFunc = async (event, chosenValue, currentValue) => {
try { try {
const newValue = chosenValue || currentValue; 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; if (!app?.name) return;
const fee = await getFee('CREATE_POLL'); const fee = await getFee('CREATE_POLL');
await show({ await show({
// TODO translate message: t('core:question.rate_app', {
message: `Would you like to rate this app a rating of ${newValue}?. It will create a POLL tx.`, rate: newValue,
postProcess: 'capitalizeFirst',
}),
publishFee: fee.fee + ' QORT', publishFee: fee.fee + ' QORT',
}); });
if (hasPublishedRating === false) { if (hasPublishedRating === false) {
const pollName = `app-library-${app.service}-rating-${app.name}`; const pollName = `app-library-${app.service}-rating-${app.name}`;
const pollOptions = [`1, 2, 3, 4, 5, initialValue-${newValue}`]; 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) => { await new Promise((res, rej) => {
window window
.sendMessage( .sendMessage(
'createPoll', 'createPoll',
{ {
pollName: pollName, pollName: pollName,
pollDescription: `Rating for ${app.service} ${app.name}`, pollDescription: pollDescription,
pollOptions: pollOptions, pollOptions: pollOptions,
pollOwnerAddress: myName, pollOwnerAddress: myName,
}, },
@ -134,8 +149,9 @@ export const AppRating = ({ app, myName, ratingCountPosition = 'right' }) => {
res(response); res(response);
setInfoSnack({ setInfoSnack({
type: 'success', type: 'success',
message: message: t('core:message.success.rated_app', {
'Successfully rated. Please wait a couple minutes for the network to propogate the changes.', postProcess: 'capitalizeFirst',
}),
}); });
setOpenSnack(true); setOpenSnack(true);
} }
@ -151,7 +167,11 @@ export const AppRating = ({ app, myName, ratingCountPosition = 'right' }) => {
(option) => +option.optionName === +newValue (option) => +option.optionName === +newValue
); );
if (isNaN(optionIndex) || optionIndex === -1) 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) => { await new Promise((res, rej) => {
window window
.sendMessage( .sendMessage(
@ -170,8 +190,9 @@ export const AppRating = ({ app, myName, ratingCountPosition = 'right' }) => {
res(response); res(response);
setInfoSnack({ setInfoSnack({
type: 'success', type: 'success',
message: message: t('core:message.success.rated_app', {
'Successfully rated. Please wait a couple minutes for the network to propogate the changes.', postProcess: 'capitalizeFirst',
}),
}); });
setOpenSnack(true); setOpenSnack(true);
} }
@ -185,7 +206,11 @@ export const AppRating = ({ app, myName, ratingCountPosition = 'right' }) => {
console.log('error', error); console.log('error', error);
setInfoSnack({ setInfoSnack({
type: 'error', type: 'error',
message: error?.message || 'Unable to rate', message:
error?.message ||
t('core:message.error.unable_rate', {
postProcess: 'capitalizeFirst',
}),
}); });
setOpenSnack(true); setOpenSnack(true);
} }
@ -195,8 +220,8 @@ export const AppRating = ({ app, myName, ratingCountPosition = 'right' }) => {
<div> <div>
<Box <Box
sx={{ sx={{
display: 'flex',
alignItems: 'center', alignItems: 'center',
display: 'flex',
flexDirection: ratingCountPosition === 'top' ? 'column' : 'row', flexDirection: ratingCountPosition === 'top' ? 'column' : 'row',
}} }}
> >
@ -207,8 +232,11 @@ export const AppRating = ({ app, myName, ratingCountPosition = 'right' }) => {
(votesInfo?.voteCounts?.length === 6 ? 1 : 0)}{' '} (votesInfo?.voteCounts?.length === 6 ? 1 : 0)}{' '}
{' RATINGS'} {' RATINGS'}
</AppInfoUserName> </AppInfoUserName>
<Spacer height="6px" /> <Spacer height="6px" />
<AppInfoUserName>{value?.toFixed(1)}</AppInfoUserName> <AppInfoUserName>{value?.toFixed(1)}</AppInfoUserName>
<Spacer height="6px" /> <Spacer height="6px" />
</> </>
)} )}

View File

@ -1,4 +1,4 @@
import React, { useEffect, useMemo, useState } from 'react'; import { forwardRef, useEffect, useMemo, useState } from 'react';
import { Box } from '@mui/material'; import { Box } from '@mui/material';
import { getBaseApiReact } from '../../App'; import { getBaseApiReact } from '../../App';
import { subscribeToEvent, unsubscribeFromEvent } from '../../utils/events'; import { subscribeToEvent, unsubscribeFromEvent } from '../../utils/events';
@ -7,7 +7,7 @@ import { useQortalMessageListener } from './useQortalMessageListener';
import { useThemeContext } from '../Theme/ThemeContext'; import { useThemeContext } from '../Theme/ThemeContext';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
export const AppViewer = React.forwardRef( export const AppViewer = forwardRef(
({ app, hide, isDevMode, skipAuth }, iframeRef) => { ({ app, hide, isDevMode, skipAuth }, iframeRef) => {
// const iframeRef = useRef(null); // const iframeRef = useRef(null);
const { window: frameWindow } = useFrame(); const { window: frameWindow } = useFrame();
@ -23,7 +23,7 @@ export const AppViewer = React.forwardRef(
); );
const [url, setUrl] = useState(''); const [url, setUrl] = useState('');
const { themeMode } = useThemeContext(); const { themeMode } = useThemeContext();
const { i18n } = useTranslation(['core']); const { i18n, t } = useTranslation(['core']);
const currentLang = i18n.language; const currentLang = i18n.language;
useEffect(() => { useEffect(() => {
@ -184,7 +184,13 @@ export const AppViewer = React.forwardRef(
// Timeout after 200ms if no response // Timeout after 200ms if no response
setTimeout(() => { setTimeout(() => {
window.removeEventListener('message', handleNavigationSuccess); window.removeEventListener('message', handleNavigationSuccess);
reject(new Error('Navigation timeout')); reject(
new Error(
t('core:message.error.navigation_timeout', {
postProcess: 'capitalizeFirst',
})
)
);
}, 200); }, 200);
const targetOrigin = iframeRef.current const targetOrigin = iframeRef.current
? new URL(iframeRef.current.src).origin ? new URL(iframeRef.current.src).origin

View File

@ -1,9 +1,8 @@
import React, { useContext } from 'react'; import { forwardRef } from 'react';
import { AppViewer } from './AppViewer'; import { AppViewer } from './AppViewer';
import Frame from 'react-frame-component'; import Frame from 'react-frame-component';
import { MyContext } from '../../App';
const AppViewerContainer = React.forwardRef( const AppViewerContainer = forwardRef(
({ app, isSelected, hide, isDevMode, customHeight, skipAuth }, ref) => { ({ app, isSelected, hide, isDevMode, customHeight, skipAuth }, ref) => {
return ( return (
<Frame <Frame

View File

@ -24,6 +24,7 @@ import { AppsIcon } from '../../assets/Icons/AppsIcon';
import { CoreSyncStatus } from '../CoreSyncStatus'; import { CoreSyncStatus } from '../CoreSyncStatus';
import { MessagingIconFilled } from '../../assets/Icons/MessagingIconFilled'; import { MessagingIconFilled } from '../../assets/Icons/MessagingIconFilled';
import { useAtom } from 'jotai'; import { useAtom } from 'jotai';
import { useTranslation } from 'react-i18next';
const uid = new ShortUniqueId({ length: 8 }); const uid = new ShortUniqueId({ length: 8 });
@ -47,19 +48,29 @@ export const AppsDesktop = ({
const [categories, setCategories] = useState([]); const [categories, setCategories] = useState([]);
const iframeRefs = useRef({}); const iframeRefs = useRef({});
const [isEnabledDevMode, setIsEnabledDevMode] = useAtom(enabledDevModeAtom); const [isEnabledDevMode, setIsEnabledDevMode] = useAtom(enabledDevModeAtom);
const { showTutorial } = useContext(MyContext); const { showTutorial } = useContext(MyContext);
const theme = useTheme(); const theme = useTheme();
const { t } = useTranslation(['core', 'group']);
const myApp = useMemo(() => { const myApp = useMemo(() => {
return availableQapps.find( return availableQapps.find(
(app) => app.name === myName && app.service === 'APP' (app) =>
app.name === myName &&
app.service ===
t('core:app', {
postProcess: 'capitalizeAll',
})
); );
}, [myName, availableQapps]); }, [myName, availableQapps]);
const myWebsite = useMemo(() => { const myWebsite = useMemo(() => {
return availableQapps.find( return availableQapps.find(
(app) => app.name === myName && app.service === 'WEBSITE' (app) =>
app.name === myName &&
app.service ===
t('core:website', {
postProcess: 'capitalizeAll',
})
); );
}, [myName, availableQapps]); }, [myName, availableQapps]);
@ -104,7 +115,6 @@ export const AppsDesktop = ({
try { try {
let apps = []; let apps = [];
let websites = []; let websites = [];
// dispatch(setIsLoadingGlobal(true))
const url = `${getBaseApiReact()}/arbitrary/resources/search?service=APP&mode=ALL&limit=0&includestatus=true&includemetadata=true`; const url = `${getBaseApiReact()}/arbitrary/resources/search?service=APP&mode=ALL&limit=0&includestatus=true&includemetadata=true`;
const response = await fetch(url, { const response = await fetch(url, {
@ -113,6 +123,7 @@ export const AppsDesktop = ({
'Content-Type': 'application/json', 'Content-Type': 'application/json',
}, },
}); });
if (!response?.ok) return; if (!response?.ok) return;
const responseData = await response.json(); const responseData = await response.json();
const urlWebsites = `${getBaseApiReact()}/arbitrary/resources/search?service=WEBSITE&mode=ALL&limit=0&includestatus=true&includemetadata=true`; 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', 'Content-Type': 'application/json',
}, },
}); });
if (!responseWebsites?.ok) return; if (!responseWebsites?.ok) return;
const responseDataWebsites = await responseWebsites.json(); const responseDataWebsites = await responseWebsites.json();
@ -245,7 +257,6 @@ export const AppsDesktop = ({
setTabs((prev) => [...prev, newTab]); setTabs((prev) => [...prev, newTab]);
setSelectedTab(newTab); setSelectedTab(newTab);
setMode('viewer'); setMode('viewer');
setIsNewTabWindow(false); setIsNewTabWindow(false);
}; };
@ -256,6 +267,7 @@ export const AppsDesktop = ({
unsubscribeFromEvent('addTab', addTabFunc); unsubscribeFromEvent('addTab', addTabFunc);
}; };
}, [tabs]); }, [tabs]);
const setSelectedTabFunc = (e) => { const setSelectedTabFunc = (e) => {
const data = e.detail?.data; const data = e.detail?.data;
if (e.detail?.isDevMode) return; if (e.detail?.isDevMode) return;
@ -325,9 +337,9 @@ export const AppsDesktop = ({
return ( return (
<AppsParent <AppsParent
sx={{ sx={{
position: !show && 'fixed',
left: !show && '-200vw',
flexDirection: 'row', flexDirection: 'row',
left: !show && '-200vw',
position: !show && 'fixed',
}} }}
> >
<Box <Box
@ -448,6 +460,7 @@ export const AppsDesktop = ({
}} }}
> >
<Spacer height="30px" /> <Spacer height="30px" />
<AppsHomeDesktop <AppsHomeDesktop
myName={myName} myName={myName}
availableQapps={availableQapps} availableQapps={availableQapps}
@ -474,15 +487,18 @@ export const AppsDesktop = ({
{mode === 'appInfo-from-category' && !selectedTab && ( {mode === 'appInfo-from-category' && !selectedTab && (
<AppInfo app={selectedAppInfo} myName={myName} /> <AppInfo app={selectedAppInfo} myName={myName} />
)} )}
<AppsCategoryDesktop <AppsCategoryDesktop
availableQapps={availableQapps} availableQapps={availableQapps}
isShow={mode === 'category' && !selectedTab} isShow={mode === 'category' && !selectedTab}
category={selectedCategory} category={selectedCategory}
myName={myName} myName={myName}
/> />
{mode === 'publish' && !selectedTab && ( {mode === 'publish' && !selectedTab && (
<AppPublish names={myName ? [myName] : []} categories={categories} /> <AppPublish names={myName ? [myName] : []} categories={categories} />
)} )}
{tabs.map((tab) => { {tabs.map((tab) => {
if (!iframeRefs.current[tab.tabId]) { if (!iframeRefs.current[tab.tabId]) {
iframeRefs.current[tab.tabId] = React.createRef(); iframeRefs.current[tab.tabId] = React.createRef();

View File

@ -1,7 +1,6 @@
import React, { useEffect, useRef, useState } from 'react'; import React, { useEffect, useRef, useState } from 'react';
import { AppsDevModeHome } from './AppsDevModeHome'; import { AppsDevModeHome } from './AppsDevModeHome';
import { Spacer } from '../../common/Spacer'; import { Spacer } from '../../common/Spacer';
import { import {
executeEvent, executeEvent,
subscribeToEvent, subscribeToEvent,
@ -10,7 +9,6 @@ import {
import { AppsParent } from './Apps-styles'; import { AppsParent } from './Apps-styles';
import AppViewerContainer from './AppViewerContainer'; import AppViewerContainer from './AppViewerContainer';
import ShortUniqueId from 'short-unique-id'; import ShortUniqueId from 'short-unique-id';
import { Box, ButtonBase, useTheme } from '@mui/material'; import { Box, ButtonBase, useTheme } from '@mui/material';
import { HomeIcon } from '../../assets/Icons/HomeIcon'; import { HomeIcon } from '../../assets/Icons/HomeIcon';
import { Save } from '../Save/Save'; import { Save } from '../Save/Save';
@ -137,7 +135,6 @@ export const AppsDevMode = ({
setTabs(copyTabs); setTabs(copyTabs);
setSelectedTab(newTab); setSelectedTab(newTab);
setMode('viewer'); setMode('viewer');
setIsNewTabWindow(false); setIsNewTabWindow(false);
}; };
@ -260,6 +257,7 @@ export const AppsDevMode = ({
} }
/> />
</ButtonBase> </ButtonBase>
<ButtonBase <ButtonBase
onClick={() => { onClick={() => {
setDesktopViewMode('apps'); setDesktopViewMode('apps');
@ -282,6 +280,7 @@ export const AppsDevMode = ({
/> />
</IconWrapper> </IconWrapper>
</ButtonBase> </ButtonBase>
<ButtonBase <ButtonBase
onClick={() => { onClick={() => {
setDesktopViewMode('chat'); setDesktopViewMode('chat');
@ -351,6 +350,7 @@ export const AppsDevMode = ({
}} }}
> >
<Spacer height="30px" /> <Spacer height="30px" />
<AppsDevModeHome <AppsDevModeHome
myName={myName} myName={myName}
availableQapps={availableQapps} availableQapps={availableQapps}

View File

@ -1,14 +1,12 @@
import React, { useContext, useMemo, useState } from 'react'; import { useContext, useState } from 'react';
import { import {
AppCircle, AppCircle,
AppCircleContainer, AppCircleContainer,
AppCircleLabel, AppCircleLabel,
AppLibrarySubTitle, AppLibrarySubTitle,
AppsContainer, AppsContainer,
AppsParent,
} from './Apps-styles'; } from './Apps-styles';
import { Buffer } from 'buffer'; import { Buffer } from 'buffer';
import { import {
Avatar, Avatar,
Box, Box,
@ -17,13 +15,11 @@ import {
Dialog, Dialog,
DialogActions, DialogActions,
DialogContent, DialogContent,
DialogContentText,
DialogTitle, DialogTitle,
Input, Input,
} from '@mui/material'; } from '@mui/material';
import { Add } from '@mui/icons-material'; import { Add } from '@mui/icons-material';
import { MyContext, getBaseApiReact } from '../../App'; import { MyContext, getBaseApiReact } from '../../App';
import LogoSelected from '../../assets/svgs/LogoSelected.svg';
import { executeEvent } from '../../utils/events'; import { executeEvent } from '../../utils/events';
import { Spacer } from '../../common/Spacer'; import { Spacer } from '../../common/Spacer';
import { useModal } from '../../common/useModal'; import { useModal } from '../../common/useModal';
@ -31,6 +27,8 @@ import { createEndpoint, isUsingLocal } from '../../background';
import { Label } from '../Group/AddGroup'; import { Label } from '../Group/AddGroup';
import ShortUniqueId from 'short-unique-id'; import ShortUniqueId from 'short-unique-id';
import swaggerSVG from '../../assets/svgs/swagger.svg'; import swaggerSVG from '../../assets/svgs/swagger.svg';
import { useTranslation } from 'react-i18next';
const uid = new ShortUniqueId({ length: 8 }); const uid = new ShortUniqueId({ length: 8 });
export const AppsDevModeHome = ({ export const AppsDevModeHome = ({
@ -43,7 +41,7 @@ export const AppsDevModeHome = ({
const [domain, setDomain] = useState('127.0.0.1'); const [domain, setDomain] = useState('127.0.0.1');
const [port, setPort] = useState(''); const [port, setPort] = useState('');
const [selectedPreviewFile, setSelectedPreviewFile] = useState(null); const [selectedPreviewFile, setSelectedPreviewFile] = useState(null);
const { t } = useTranslation(['core', 'group']);
const { isShow, onCancel, onOk, show, message } = useModal(); const { isShow, onCancel, onOk, show, message } = useModal();
const { const {
openSnackGlobal, openSnackGlobal,
@ -61,6 +59,7 @@ export const AppsDevModeHome = ({
console.log('No file selected.'); console.log('No file selected.');
} }
}; };
const handleSelectDirectry = async (existingDirectoryPath) => { const handleSelectDirectry = async (existingDirectoryPath) => {
const { buffer, directoryPath } = const { buffer, directoryPath } =
await window.electron.selectAndZipDirectory(existingDirectoryPath); await window.electron.selectAndZipDirectory(existingDirectoryPath);
@ -79,8 +78,7 @@ export const AppsDevModeHome = ({
setInfoSnackCustom({ setInfoSnackCustom({
type: 'error', type: 'error',
message: message: '',
'Please use your local node for dev mode! Logout and use Local node.',
}); });
return; return;
} }
@ -115,20 +113,21 @@ export const AppsDevModeHome = ({
const usingLocal = await isUsingLocal(); const usingLocal = await isUsingLocal();
if (!usingLocal) { if (!usingLocal) {
setOpenSnackGlobal(true); setOpenSnackGlobal(true);
setInfoSnackCustom({ setInfoSnackCustom({
type: 'error', type: 'error',
message: message: t('core:message.generic.devmode_local_node', {
'Please use your local node for dev mode! Logout and use Local node.', postProcess: 'capitalizeFirst',
}),
}); });
return; return;
} }
if (!myName) { if (!myName) {
setOpenSnackGlobal(true); setOpenSnackGlobal(true);
setInfoSnackCustom({ setInfoSnackCustom({
type: 'error', type: 'error',
message: 'You need a name to use preview', message: t('core:message.generic.name_preview', {
postProcess: 'capitalizeFirst',
}),
}); });
return; return;
} }
@ -137,15 +136,16 @@ export const AppsDevModeHome = ({
if (!buffer) { if (!buffer) {
setOpenSnackGlobal(true); setOpenSnackGlobal(true);
setInfoSnackCustom({ setInfoSnackCustom({
type: 'error', type: 'error',
message: 'Please select a file', message: t('core:message.generic.select_file', {
postProcess: 'capitalizeFirst',
}),
}); });
return; return;
} }
const postBody = Buffer.from(buffer).toString('base64');
const postBody = Buffer.from(buffer).toString('base64');
const endpoint = await createEndpoint( const endpoint = await createEndpoint(
`/arbitrary/APP/${myName}/zip?preview=true` `/arbitrary/APP/${myName}/zip?preview=true`
); );
@ -156,6 +156,7 @@ export const AppsDevModeHome = ({
}, },
body: postBody, body: postBody,
}); });
if (!response?.ok) throw new Error('Invalid zip'); if (!response?.ok) throw new Error('Invalid zip');
const previewPath = await response.text(); const previewPath = await response.text();
if (tabId) { if (tabId) {
@ -192,20 +193,21 @@ export const AppsDevModeHome = ({
const usingLocal = await isUsingLocal(); const usingLocal = await isUsingLocal();
if (!usingLocal) { if (!usingLocal) {
setOpenSnackGlobal(true); setOpenSnackGlobal(true);
setInfoSnackCustom({ setInfoSnackCustom({
type: 'error', type: 'error',
message: message: t('core:message.generic.devmode_local_node', {
'Please use your local node for dev mode! Logout and use Local node.', postProcess: 'capitalizeFirst',
}),
}); });
return; return;
} }
if (!myName) { if (!myName) {
setOpenSnackGlobal(true); setOpenSnackGlobal(true);
setInfoSnackCustom({ setInfoSnackCustom({
type: 'error', type: 'error',
message: 'You need a name to use preview', message: t('core:message.generic.name_preview', {
postProcess: 'capitalizeFirst',
}),
}); });
return; return;
} }
@ -214,15 +216,16 @@ export const AppsDevModeHome = ({
if (!buffer) { if (!buffer) {
setOpenSnackGlobal(true); setOpenSnackGlobal(true);
setInfoSnackCustom({ setInfoSnackCustom({
type: 'error', type: 'error',
message: 'Please select a file', message: t('core:message.generic.select_file', {
postProcess: 'capitalizeFirst',
}),
}); });
return; return;
} }
const postBody = Buffer.from(buffer).toString('base64');
const postBody = Buffer.from(buffer).toString('base64');
const endpoint = await createEndpoint( const endpoint = await createEndpoint(
`/arbitrary/APP/${myName}/zip?preview=true` `/arbitrary/APP/${myName}/zip?preview=true`
); );
@ -233,8 +236,15 @@ export const AppsDevModeHome = ({
}, },
body: postBody, 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(); const previewPath = await response.text();
if (tabId) { if (tabId) {
executeEvent('appsDevModeUpdateTab', { executeEvent('appsDevModeUpdateTab', {
data: { data: {
@ -276,7 +286,7 @@ export const AppsDevModeHome = ({
fontSize: '30px', fontSize: '30px',
}} }}
> >
Dev Mode Apps {t('core:devmode_apps', { postProcess: 'capitalizeFirst' })}
</AppLibrarySubTitle> </AppLibrarySubTitle>
</AppsContainer> </AppsContainer>
@ -301,7 +311,9 @@ export const AppsDevModeHome = ({
<AppCircle> <AppCircle>
<Add>+</Add> <Add>+</Add>
</AppCircle> </AppCircle>
<AppCircleLabel>Server</AppCircleLabel> <AppCircleLabel>
{t('core:server', { postProcess: 'capitalizeFirst' })}
</AppCircleLabel>
</AppCircleContainer> </AppCircleContainer>
</ButtonBase> </ButtonBase>
@ -319,7 +331,9 @@ export const AppsDevModeHome = ({
<Add>+</Add> <Add>+</Add>
</AppCircle> </AppCircle>
<AppCircleLabel>Zip</AppCircleLabel> <AppCircleLabel>
{t('core:zip', { postProcess: 'capitalizeFirst' })}
</AppCircleLabel>
</AppCircleContainer> </AppCircleContainer>
</ButtonBase> </ButtonBase>
@ -336,7 +350,9 @@ export const AppsDevModeHome = ({
<AppCircle> <AppCircle>
<Add>+</Add> <Add>+</Add>
</AppCircle> </AppCircle>
<AppCircleLabel>Directory</AppCircleLabel> <AppCircleLabel>
{t('core:directory', { postProcess: 'capitalizeFirst' })}
</AppCircleLabel>
</AppCircleContainer> </AppCircleContainer>
</ButtonBase> </ButtonBase>
@ -365,7 +381,9 @@ export const AppsDevModeHome = ({
objectFit: 'fill', objectFit: 'fill',
}, },
}} }}
alt="Q-Sandbox" alt={t('core:q_apps.q_sandbox', {
postProcess: 'capitalizeFirst',
})}
src={`${getBaseApiReact()}/arbitrary/THUMBNAIL/Q-Sandbox/qortal_avatar?async=true`} src={`${getBaseApiReact()}/arbitrary/THUMBNAIL/Q-Sandbox/qortal_avatar?async=true`}
> >
<img <img
@ -378,7 +396,11 @@ export const AppsDevModeHome = ({
</Avatar> </Avatar>
</AppCircle> </AppCircle>
<AppCircleLabel>Q-Sandbox</AppCircleLabel> <AppCircleLabel>
{t('core:q_apps.q_sandbox', {
postProcess: 'capitalizeFirst',
})}
</AppCircleLabel>
</AppCircleContainer> </AppCircleContainer>
</ButtonBase> </ButtonBase>
@ -407,7 +429,9 @@ export const AppsDevModeHome = ({
objectFit: 'fill', objectFit: 'fill',
}, },
}} }}
alt="API" alt={t('core:api', {
postProcess: 'capitalizeAll',
})}
src={swaggerSVG} src={swaggerSVG}
> >
<img <img
@ -420,7 +444,11 @@ export const AppsDevModeHome = ({
</Avatar> </Avatar>
</AppCircle> </AppCircle>
<AppCircleLabel>API</AppCircleLabel> <AppCircleLabel>
{t('core:api', {
postProcess: 'capitalizeAll',
})}
</AppCircleLabel>
</AppCircleContainer> </AppCircleContainer>
</ButtonBase> </ButtonBase>
</AppsContainer> </AppsContainer>
@ -437,7 +465,9 @@ export const AppsDevModeHome = ({
}} }}
> >
<DialogTitle id="alert-dialog-title"> <DialogTitle id="alert-dialog-title">
{'Add custom framework'} {t('core:action.add_custom_framework', {
postProcess: 'capitalizeFirst',
})}
</DialogTitle> </DialogTitle>
<DialogContent> <DialogContent>
@ -446,15 +476,22 @@ export const AppsDevModeHome = ({
display: 'flex', display: 'flex',
flexDirection: 'column', flexDirection: 'column',
gap: '5px', gap: '5px',
}} // TODO translate }}
> >
<Label>Domain</Label> <Label>
{t('core:domain', {
postProcess: 'capitalizeFirst',
})}
</Label>
<Input <Input
placeholder="Domain" placeholder={t('core:domain', {
postProcess: 'capitalizeFirst',
})}
value={domain} value={domain}
onChange={(e) => setDomain(e.target.value)} onChange={(e) => setDomain(e.target.value)}
/> />
</Box> </Box>
<Box <Box
sx={{ sx={{
display: 'flex', display: 'flex',
@ -463,9 +500,15 @@ export const AppsDevModeHome = ({
marginTop: '15px', marginTop: '15px',
}} }}
> >
<Label>Port</Label> <Label>
{t('core:port', {
postProcess: 'capitalizeFirst',
})}
</Label>
<Input <Input
placeholder="Port" placeholder={t('core:port', {
postProcess: 'capitalizeFirst',
})}
value={port} value={port}
onChange={(e) => setPort(e.target.value)} onChange={(e) => setPort(e.target.value)}
/> />
@ -474,15 +517,20 @@ export const AppsDevModeHome = ({
<DialogActions> <DialogActions>
<Button variant="contained" onClick={onCancel}> <Button variant="contained" onClick={onCancel}>
Close {t('core:action.close', {
postProcess: 'capitalizeFirst',
})}
</Button> </Button>
<Button <Button
disabled={!domain || !port} disabled={!domain || !port}
variant="contained" variant="contained"
onClick={() => onOk({ portVal: port, domainVal: domain })} onClick={() => onOk({ portVal: port, domainVal: domain })}
autoFocus autoFocus
> >
Add {t('core:action.add', {
postProcess: 'capitalizeFirst',
})}
</Button> </Button>
</DialogActions> </DialogActions>
</Dialog> </Dialog>

View File

@ -23,7 +23,6 @@ export const AppsDevModeNavBar = () => {
const [navigationController, setNavigationController] = useAtom( const [navigationController, setNavigationController] = useAtom(
navigationControllerAtom navigationControllerAtom
); );
const theme = useTheme(); const theme = useTheme();
const [isNewTabWindow, setIsNewTabWindow] = useState(false); const [isNewTabWindow, setIsNewTabWindow] = useState(false);
const tabsRef = useRef(null); const tabsRef = useRef(null);

View File

@ -16,6 +16,7 @@ import ArrowOutwardIcon from '@mui/icons-material/ArrowOutward';
import { AppsPrivate } from './AppsPrivate'; import { AppsPrivate } from './AppsPrivate';
import ThemeSelector from '../Theme/ThemeSelector'; import ThemeSelector from '../Theme/ThemeSelector';
import LanguageSelector from '../Language/LanguageSelector'; import LanguageSelector from '../Language/LanguageSelector';
import { useTranslation } from 'react-i18next';
export const AppsHomeDesktop = ({ export const AppsHomeDesktop = ({
setMode, setMode,
@ -26,6 +27,7 @@ export const AppsHomeDesktop = ({
}) => { }) => {
const [qortalUrl, setQortalUrl] = useState(''); const [qortalUrl, setQortalUrl] = useState('');
const theme = useTheme(); const theme = useTheme();
const { t } = useTranslation(['core', 'group']);
const openQortalUrl = () => { const openQortalUrl = () => {
try { try {
@ -41,6 +43,7 @@ export const AppsHomeDesktop = ({
console.log(error); console.log(error);
} }
}; };
return ( return (
<> <>
<AppsContainer <AppsContainer
@ -51,9 +54,9 @@ export const AppsHomeDesktop = ({
<AppLibrarySubTitle <AppLibrarySubTitle
sx={{ sx={{
fontSize: '30px', fontSize: '30px',
}} // TODO translate }}
> >
Apps Dashboard {t('core:apps_dashboard', { postProcess: 'capitalizeFirst' })}
</AppLibrarySubTitle> </AppLibrarySubTitle>
</AppsContainer> </AppsContainer>
@ -66,14 +69,14 @@ export const AppsHomeDesktop = ({
> >
<Box <Box
sx={{ sx={{
display: 'flex',
gap: '20px',
alignItems: 'center', alignItems: 'center',
backgroundColor: theme.palette.background.paper, backgroundColor: theme.palette.background.paper,
padding: '7px',
borderRadius: '20px', borderRadius: '20px',
width: '100%', display: 'flex',
gap: '20px',
maxWidth: '500px', maxWidth: '500px',
padding: '7px',
width: '100%',
}} }}
> >
<Input <Input
@ -143,7 +146,9 @@ export const AppsHomeDesktop = ({
<AddIcon /> <AddIcon />
</AppCircle> </AppCircle>
<AppCircleLabel>Library</AppCircleLabel> <AppCircleLabel>
{t('core:library', { postProcess: 'capitalizeFirst' })}
</AppCircleLabel>
</AppCircleContainer> </AppCircleContainer>
</ButtonBase> </ButtonBase>

View File

@ -41,6 +41,7 @@ import { Virtuoso } from 'react-virtuoso';
import { executeEvent } from '../../utils/events'; import { executeEvent } from '../../utils/events';
import { ComposeP, ShowMessageReturnButton } from '../Group/Forum/Mail-styles'; import { ComposeP, ShowMessageReturnButton } from '../Group/Forum/Mail-styles';
import { ReturnIcon } from '../../assets/Icons/ReturnIcon.tsx'; import { ReturnIcon } from '../../assets/Icons/ReturnIcon.tsx';
import { useTranslation } from 'react-i18next';
const officialAppList = [ const officialAppList = [
'q-tube', 'q-tube',
@ -104,6 +105,7 @@ export const AppsLibraryDesktop = ({
const [searchValue, setSearchValue] = useState(''); const [searchValue, setSearchValue] = useState('');
const virtuosoRef = useRef(null); const virtuosoRef = useRef(null);
const theme = useTheme(); const theme = useTheme();
const { t } = useTranslation(['core', 'group']);
const officialApps = useMemo(() => { const officialApps = useMemo(() => {
return availableQapps.filter( return availableQapps.filter(
@ -210,9 +212,13 @@ export const AppsLibraryDesktop = ({
ml: 1, ml: 1,
paddingLeft: '12px', paddingLeft: '12px',
}} }}
placeholder="Search for apps" placeholder={t('core:action.search_apps', {
postProcess: 'capitalizeFirst',
})}
inputProps={{ inputProps={{
'aria-label': 'Search for apps', 'aria-label': t('core:action.search_apps', {
postProcess: 'capitalizeFirst',
}),
fontSize: '16px', fontSize: '16px',
fontWeight: 400, fontWeight: 400,
}} }}
@ -273,10 +279,14 @@ export const AppsLibraryDesktop = ({
}} }}
onClick={() => { onClick={() => {
executeEvent('navigateBack', {}); executeEvent('navigateBack', {});
}} // TODO translate }}
> >
<ReturnIcon /> <ReturnIcon />
<ComposeP>Return to Apps Dashboard</ComposeP> <ComposeP>
{t('core:action.return_apps_dashboard', {
postProcess: 'capitalizeFirst',
})}
</ComposeP>
</ShowMessageReturnButton> </ShowMessageReturnButton>
<Spacer height="20px" /> <Spacer height="20px" />
@ -302,7 +312,11 @@ export const AppsLibraryDesktop = ({
</AppsWidthLimiter> </AppsWidthLimiter>
) : searchedList?.length === 0 && debouncedValue ? ( ) : searchedList?.length === 0 && debouncedValue ? (
<AppsWidthLimiter> <AppsWidthLimiter>
<Typography>No results</Typography> <Typography>
{t('core:message.generic.no_results', {
postProcess: 'capitalizeFirst',
})}
</Typography>
</AppsWidthLimiter> </AppsWidthLimiter>
) : ( ) : (
<> <>
@ -311,7 +325,7 @@ export const AppsLibraryDesktop = ({
fontSize: '30px', fontSize: '30px',
}} }}
> >
Official Apps {t('core:apps_official', { postProcess: 'capitalizeFirst' })}
</AppLibrarySubTitle> </AppLibrarySubTitle>
<Spacer height="45px" /> <Spacer height="45px" />
@ -396,7 +410,13 @@ export const AppsLibraryDesktop = ({
textAlign: 'start', textAlign: 'start',
}} }}
> >
{hasPublishApp ? 'Update your app' : 'Publish your app'} {hasPublishApp
? t('core:action.update_app', {
postProcess: 'capitalizeFirst',
})
: t('core:action.publish_app', {
postProcess: 'capitalizeFirst',
})}
</AppLibrarySubTitle> </AppLibrarySubTitle>
<Spacer height="18px" /> <Spacer height="18px" />
@ -422,7 +442,13 @@ export const AppsLibraryDesktop = ({
}} }}
> >
<PublishQAppCTAButton> <PublishQAppCTAButton>
{hasPublishApp ? 'Update' : 'Publish'} {hasPublishApp
? t('core:action.update', {
postProcess: 'capitalizeFirst',
})
: t('core:action.publish', {
postProcess: 'capitalizeFirst',
})}
</PublishQAppCTAButton> </PublishQAppCTAButton>
<Spacer width="20px" /> <Spacer width="20px" />
@ -441,7 +467,9 @@ export const AppsLibraryDesktop = ({
fontSize: '30px', fontSize: '30px',
}} }}
> >
Categories {t('core:category_other', {
postProcess: 'capitalizeFirst',
})}
</AppLibrarySubTitle> </AppLibrarySubTitle>
<Spacer height="18px" /> <Spacer height="18px" />
@ -480,7 +508,7 @@ export const AppsLibraryDesktop = ({
}, },
}} }}
> >
All {t('core:all', { postProcess: 'capitalizeFirst' })}
</Box> </Box>
</ButtonBase> </ButtonBase>

View File

@ -32,6 +32,7 @@ import {
sortablePinnedAppsAtom, sortablePinnedAppsAtom,
} from '../../atoms/global'; } from '../../atoms/global';
import { useAtom, useSetAtom } from 'jotai'; import { useAtom, useSetAtom } from 'jotai';
import { useTranslation } from 'react-i18next';
export function saveToLocalStorage(key, subKey, newValue) { export function saveToLocalStorage(key, subKey, newValue) {
try { try {
@ -75,7 +76,7 @@ export const AppsNavBarDesktop = ({ disableBack }) => {
); );
const theme = useTheme(); const theme = useTheme();
const { t } = useTranslation(['core', 'group']);
const [isNewTabWindow, setIsNewTabWindow] = useState(false); const [isNewTabWindow, setIsNewTabWindow] = useState(false);
const tabsRef = useRef(null); const tabsRef = useRef(null);
const [anchorEl, setAnchorEl] = useState(null); const [anchorEl, setAnchorEl] = useState(null);
@ -238,6 +239,7 @@ export const AppsNavBarDesktop = ({ disableBack }) => {
}} }}
/> />
</ButtonBase> </ButtonBase>
<ButtonBase <ButtonBase
onClick={(e) => { onClick={(e) => {
if (!selectedTab) return; if (!selectedTab) return;
@ -274,9 +276,9 @@ export const AppsNavBarDesktop = ({ disableBack }) => {
paper: { paper: {
sx: { sx: {
backgroundColor: theme.palette.background.default, backgroundColor: theme.palette.background.default,
borderRadius: '5px',
color: theme.palette.text.primary, color: theme.palette.text.primary,
width: '148px', width: '148px',
borderRadius: '5px',
}, },
}, },
}} }}
@ -375,9 +377,18 @@ export const AppsNavBarDesktop = ({ disableBack }) => {
: theme.palette.text.primary, : 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',
})
}}`}
/> />
</MenuItem> </MenuItem>
<MenuItem <MenuItem
onClick={() => { onClick={() => {
if (selectedTab?.refreshFunc) { if (selectedTab?.refreshFunc) {
@ -404,6 +415,7 @@ export const AppsNavBarDesktop = ({ disableBack }) => {
}} }}
/> />
</ListItemIcon> </ListItemIcon>
<ListItemText <ListItemText
sx={{ sx={{
'& .MuiTypography-root': { '& .MuiTypography-root': {
@ -447,7 +459,9 @@ export const AppsNavBarDesktop = ({ disableBack }) => {
color: theme.palette.text.primary, color: theme.palette.text.primary,
}, },
}} }}
primary="Copy link" primary={t('core:action.copy_link', {
postProcess: 'capitalizeFirst',
})}
/> />
</MenuItem> </MenuItem>
)} )}

View File

@ -36,6 +36,7 @@ import { fileToBase64 } from '../../utils/fileReading';
import { objectToBase64 } from '../../qdn/encryption/group-encryption'; import { objectToBase64 } from '../../qdn/encryption/group-encryption';
import { getFee } from '../../background'; import { getFee } from '../../background';
import { useAtom } from 'jotai'; import { useAtom } from 'jotai';
import { useTranslation } from 'react-i18next';
const maxFileSize = 50 * 1024 * 1024; // 50MB const maxFileSize = 50 * 1024 * 1024; // 50MB
@ -62,6 +63,7 @@ export const AppsPrivate = ({ myName }) => {
const [memberGroups] = useAtom(memberGroupsAtom); const [memberGroups] = useAtom(memberGroupsAtom);
const theme = useTheme(); const theme = useTheme();
const { t } = useTranslation(['core', 'group']);
const myGroupsPrivate = useMemo(() => { const myGroupsPrivate = useMemo(() => {
return memberGroups?.filter( return memberGroups?.filter(
@ -98,9 +100,11 @@ export const AppsPrivate = ({ myName }) => {
errors.forEach((error) => { errors.forEach((error) => {
if (error.code === 'file-too-large') { if (error.code === 'file-too-large') {
console.error( console.error(
`File ${file.name} is too large. Max size allowed is ${ t('core:message.error.file_too_large', {
maxFileSize / (1024 * 1024) filename: file.name,
} MB.` size: maxFileSize / (1024 * 1024),
postProcess: 'capitalizeFirst',
})
); );
} }
}); });
@ -111,7 +115,6 @@ export const AppsPrivate = ({ myName }) => {
const addPrivateApp = async () => { const addPrivateApp = async () => {
try { try {
if (privateAppValues?.groupId === 0) return; if (privateAppValues?.groupId === 0) return;
await openApp(privateAppValues, true); await openApp(privateAppValues, true);
} catch (error) { } catch (error) {
console.error(error); console.error(error);
@ -139,9 +142,28 @@ export const AppsPrivate = ({ myName }) => {
const publishPrivateApp = async () => { const publishPrivateApp = async () => {
try { try {
if (selectedGroup === 0) return; 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 (!logo)
if (!newPrivateAppValues?.name) throw new Error('Your app needs a name'); 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 base64Logo = await fileToBase64(logo);
const base64App = await fileToBase64(file); const base64App = await fileToBase64(file);
const objectToSave = { const objectToSave = {
@ -160,16 +182,22 @@ export const AppsPrivate = ({ myName }) => {
if (decryptedData?.error) { if (decryptedData?.error) {
throw new 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'); const fee = await getFee('ARBITRARY');
await show({ await show({
message: 'Would you like to publish this app?', message: t('core:question.publish_app', {
postProcess: 'capitalizeFirst',
}),
publishFee: fee.fee + ' QORT', publishFee: fee.fee + ' QORT',
}); });
await new Promise((res, rej) => { await new Promise((res, rej) => {
window window
.sendMessage('publishOnQDN', { .sendMessage('publishOnQDN', {
@ -185,7 +213,12 @@ export const AppsPrivate = ({ myName }) => {
rej(response.error); rej(response.error);
}) })
.catch((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); setOpenSnackGlobal(true);
setInfoSnackCustom({ setInfoSnackCustom({
type: 'error', 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 }) => {
<AppCircleLabel>Private</AppCircleLabel> <AppCircleLabel>Private</AppCircleLabel>
</AppCircleContainer> </AppCircleContainer>
</ButtonBase> </ButtonBase>
{isOpenPrivateModal && ( {isOpenPrivateModal && (
<Dialog <Dialog
open={isOpenPrivateModal} open={isOpenPrivateModal}
@ -312,10 +350,19 @@ export const AppsPrivate = ({ myName }) => {
display: 'flex', display: 'flex',
flexDirection: 'column', flexDirection: 'column',
gap: '5px', gap: '5px',
}} // TODO translate }}
> >
<Label>Select a group</Label> <Label>
<Label>Only private groups will be shown</Label> {t('group:action.select_group', {
postProcess: 'capitalizeFirst',
})}
</Label>
<Label>
{t('group:message.generic.only_private_groups', {
postProcess: 'capitalizeFirst',
})}
</Label>
<Select <Select
labelId="demo-simple-select-label" labelId="demo-simple-select-label"
id="demo-simple-select" id="demo-simple-select"
@ -330,7 +377,11 @@ export const AppsPrivate = ({ myName }) => {
}); });
}} }}
> >
<MenuItem value={0}>No group selected</MenuItem> <MenuItem value={0}>
{t('group:message.generic.no_selection', {
postProcess: 'capitalizeFirst',
})}
</MenuItem>
{myGroupsPrivate {myGroupsPrivate
?.filter((item) => !item?.isOpen) ?.filter((item) => !item?.isOpen)
@ -343,7 +394,9 @@ export const AppsPrivate = ({ myName }) => {
})} })}
</Select> </Select>
</Box> </Box>
<Spacer height="10px" /> <Spacer height="10px" />
<Box <Box
sx={{ sx={{
display: 'flex', display: 'flex',
@ -352,7 +405,9 @@ export const AppsPrivate = ({ myName }) => {
marginTop: '15px', marginTop: '15px',
}} }}
> >
<Label>name</Label> <Label>
{t('core:name', { postProcess: 'capitalizeFirst' })}
</Label>
<Input <Input
placeholder="name" placeholder="name"
value={privateAppValues?.name} value={privateAppValues?.name}
@ -366,6 +421,7 @@ export const AppsPrivate = ({ myName }) => {
} }
/> />
</Box> </Box>
<Box <Box
sx={{ sx={{
display: 'flex', display: 'flex',
@ -374,9 +430,14 @@ export const AppsPrivate = ({ myName }) => {
marginTop: '15px', marginTop: '15px',
}} }}
> >
<Label>identifier</Label> <Label>
{t('core:identifier', { postProcess: 'capitalizeFirst' })}
</Label>
<Input <Input
placeholder="identifier" placeholder={t('core:identifier', {
postProcess: 'capitalizeFirst',
})}
value={privateAppValues?.identifier} value={privateAppValues?.identifier}
onChange={(e) => onChange={(e) =>
setPrivateAppValues((prev) => { setPrivateAppValues((prev) => {
@ -397,7 +458,7 @@ export const AppsPrivate = ({ myName }) => {
setIsOpenPrivateModal(false); setIsOpenPrivateModal(false);
}} }}
> >
Close {t('core:action.close', { postProcess: 'capitalizeFirst' })}
</Button> </Button>
<Button <Button
disabled={ disabled={
@ -410,7 +471,7 @@ export const AppsPrivate = ({ myName }) => {
onClick={() => addPrivateApp()} onClick={() => addPrivateApp()}
autoFocus autoFocus
> >
Access {t('core:action.access', { postProcess: 'capitalizeFirst' })}
</Button> </Button>
</DialogActions> </DialogActions>
</> </>
@ -424,7 +485,9 @@ export const AppsPrivate = ({ myName }) => {
fontSize: '14px', fontSize: '14px',
}} }}
> >
Select .zip file containing static content:{' '} {t('core:message.generic.select_zip', {
postProcess: 'capitalizeFirst',
})}
</PublishQAppInfo> </PublishQAppInfo>
<Spacer height="10px" /> <Spacer height="10px" />
@ -435,10 +498,11 @@ export const AppsPrivate = ({ myName }) => {
fontSize: '14px', fontSize: '14px',
}} }}
>{` >{`
50mb MB maximum`}</PublishQAppInfo> 50mb MB max`}</PublishQAppInfo>
{file && ( {file && (
<> <>
<Spacer height="5px" /> <Spacer height="5px" />
<PublishQAppInfo>{`Selected: (${file?.name})`}</PublishQAppInfo> <PublishQAppInfo>{`Selected: (${file?.name})`}</PublishQAppInfo>
</> </>
)} )}
@ -454,7 +518,13 @@ export const AppsPrivate = ({ myName }) => {
> >
{' '} {' '}
<input {...getInputProps()} /> <input {...getInputProps()} />
{file ? 'Change' : 'Choose'} File {file
? t('core:action.change_file', {
postProcess: 'capitalizeFirst',
})
: t('core:action.choose_file', {
postProcess: 'capitalizeFirst',
})}
</PublishQAppChoseFile> </PublishQAppChoseFile>
<Spacer height="20px" /> <Spacer height="20px" />
@ -466,10 +536,18 @@ export const AppsPrivate = ({ myName }) => {
gap: '5px', gap: '5px',
}} }}
> >
<Label>Select a group</Label>
<Label> <Label>
Only groups where you are an admin will be shown {t('group:action.select_group', {
postProcess: 'capitalizeFirst',
})}
</Label> </Label>
<Label>
{t('group:amessage.generic.admin_only', {
postProcess: 'capitalizeFirst',
})}
</Label>
<Select <Select
labelId="demo-simple-select-label" labelId="demo-simple-select-label"
id="demo-simple-select" id="demo-simple-select"
@ -477,7 +555,11 @@ export const AppsPrivate = ({ myName }) => {
label="Groups where you are an admin" label="Groups where you are an admin"
onChange={(e) => setSelectedGroup(e.target.value)} onChange={(e) => setSelectedGroup(e.target.value)}
> >
<MenuItem value={0}>No group selected</MenuItem> <MenuItem value={0}>
{t('group:message.generic.no_selection', {
postProcess: 'capitalizeFirst',
})}
</MenuItem>
{myGroupsWhereIAmAdmin {myGroupsWhereIAmAdmin
?.filter((item) => !item?.isOpen) ?.filter((item) => !item?.isOpen)
.map((group) => { .map((group) => {
@ -500,9 +582,13 @@ export const AppsPrivate = ({ myName }) => {
marginTop: '15px', marginTop: '15px',
}} }}
> >
<Label>identifier</Label> <Label>
{t('core:identifier', { postProcess: 'capitalizeFirst' })}
</Label>
<Input <Input
placeholder="identifier" placeholder={t('core:identifier', {
postProcess: 'capitalizeFirst',
})}
value={newPrivateAppValues?.identifier} value={newPrivateAppValues?.identifier}
onChange={(e) => onChange={(e) =>
setNewPrivateAppValues((prev) => { setNewPrivateAppValues((prev) => {
@ -525,9 +611,14 @@ export const AppsPrivate = ({ myName }) => {
marginTop: '15px', marginTop: '15px',
}} }}
> >
<Label>App name</Label> <Label>
{t('core:app_name', { postProcess: 'capitalizeFirst' })}
</Label>
<Input <Input
placeholder="App name" placeholder={t('core:app_name', {
postProcess: 'capitalizeFirst',
})}
value={newPrivateAppValues?.name} value={newPrivateAppValues?.name}
onChange={(e) => onChange={(e) =>
setNewPrivateAppValues((prev) => { setNewPrivateAppValues((prev) => {
@ -543,10 +634,15 @@ export const AppsPrivate = ({ myName }) => {
<Spacer height="10px" /> <Spacer height="10px" />
<ImageUploader onPick={(file) => setLogo(file)}> <ImageUploader onPick={(file) => setLogo(file)}>
<Button variant="contained">Choose logo</Button> <Button variant="contained">
{t('core:action.choose_logo', {
postProcess: 'capitalizeFirst',
})}
</Button>
</ImageUploader> </ImageUploader>
{logo?.name} {logo?.name}
<Spacer height="25px" /> <Spacer height="25px" />
</DialogContent> </DialogContent>
@ -558,7 +654,7 @@ export const AppsPrivate = ({ myName }) => {
clearFields(); clearFields();
}} }}
> >
Close {t('core:action.close', { postProcess: 'capitalizeFirst' })}
</Button> </Button>
<Button <Button
@ -572,7 +668,7 @@ export const AppsPrivate = ({ myName }) => {
onClick={() => publishPrivateApp()} onClick={() => publishPrivateApp()}
autoFocus autoFocus
> >
Publish {t('core:action.publish', { postProcess: 'capitalizeFirst' })}
</Button> </Button>
</DialogActions> </DialogActions>
</> </>

View File

@ -1,4 +1,4 @@
import React, { useContext, useState } from 'react'; import { useContext, useState } from 'react';
import { executeEvent } from '../../utils/events'; import { executeEvent } from '../../utils/events';
import { getBaseApiReact, MyContext } from '../../App'; import { getBaseApiReact, MyContext } from '../../App';
import { createEndpoint } from '../../background'; import { createEndpoint } from '../../background';
@ -7,10 +7,9 @@ import {
sortablePinnedAppsAtom, sortablePinnedAppsAtom,
} from '../../atoms/global'; } from '../../atoms/global';
import { saveToLocalStorage } from './AppsNavBarDesktop'; import { saveToLocalStorage } from './AppsNavBarDesktop';
import { base64ToBlobUrl } from '../../utils/fileReading';
import { base64ToUint8Array } from '../../qdn/encryption/group-encryption'; import { base64ToUint8Array } from '../../qdn/encryption/group-encryption';
import { uint8ArrayToObject } from '../../backgroundFunctions/encryption'; import { uint8ArrayToObject } from '../../backgroundFunctions/encryption';
import { useAtom, useSetAtom } from 'jotai'; import { useSetAtom } from 'jotai';
export const useHandlePrivateApps = () => { export const useHandlePrivateApps = () => {
const [status, setStatus] = useState(''); const [status, setStatus] = useState('');

View File

@ -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 { executeEvent } from '../../utils/events';
import { navigationControllerAtom } from '../../atoms/global'; import { navigationControllerAtom } from '../../atoms/global';
import { Filesystem, Directory, Encoding } from '@capacitor/filesystem'; import { Filesystem, Directory } from '@capacitor/filesystem';
import { saveFile } from '../../qortalRequests/get'; import { saveFile } from '../../qortalRequests/get';
import { mimeToExtensionMap } from '../../utils/memeTypes'; import { mimeToExtensionMap } from '../../utils/memeTypes';
import { MyContext } from '../../App'; import { MyContext } from '../../App';

View File

@ -76,14 +76,16 @@ export const DownloadWallet = ({
if (!keepCurrentPassword && !newPassword) { if (!keepCurrentPassword && !newPassword) {
setWalletToBeDownloadedError( setWalletToBeDownloadedError(
t('auth:wallet.error.missing_new_password', { t('auth:wallet.error.missing_new_password', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}) })
); );
return; return;
} }
if (!walletToBeDownloadedPassword) { if (!walletToBeDownloadedPassword) {
setWalletToBeDownloadedError( setWalletToBeDownloadedError(
t('auth:wallet.error.missing_password', { postProcess: 'capitalize' }) t('auth:wallet.error.missing_password', {
postProcess: 'capitalizeFirst',
})
); );
return; return;
} }
@ -157,7 +159,9 @@ export const DownloadWallet = ({
fontWeight: 600, fontWeight: 600,
}} }}
> >
{t('auth:action.download_account', { postProcess: 'capitalize' })} {t('auth:action.download_account', {
postProcess: 'capitalizeFirst',
})}
</TextP> </TextP>
</Box> </Box>
@ -167,7 +171,7 @@ export const DownloadWallet = ({
<> <>
<CustomLabel htmlFor="standard-adornment-password"> <CustomLabel htmlFor="standard-adornment-password">
{t('auth:wallet.password_confirmation', { {t('auth:wallet.password_confirmation', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</CustomLabel> </CustomLabel>
@ -206,7 +210,7 @@ export const DownloadWallet = ({
<Box sx={{ display: 'flex', alignItems: 'center' }}> <Box sx={{ display: 'flex', alignItems: 'center' }}>
<Typography sx={{ fontSize: '14px' }}> <Typography sx={{ fontSize: '14px' }}>
{t('auth:wallet.keep_password', { {t('auth:wallet.keep_password', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
</Box> </Box>
@ -217,7 +221,7 @@ export const DownloadWallet = ({
<> <>
<CustomLabel htmlFor="standard-adornment-password"> <CustomLabel htmlFor="standard-adornment-password">
{t('auth:wallet.new_password', { {t('auth:wallet.new_password', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</CustomLabel> </CustomLabel>
@ -233,7 +237,7 @@ export const DownloadWallet = ({
<CustomButton onClick={confirmPasswordToDownload}> <CustomButton onClick={confirmPasswordToDownload}>
{t('auth:password_confirmation', { {t('auth:password_confirmation', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</CustomButton> </CustomButton>
@ -248,13 +252,13 @@ export const DownloadWallet = ({
await saveFileToDiskFunc(); await saveFileToDiskFunc();
await showInfo({ await showInfo({
message: t('auth:message.generic.keep_secure', { message: t('auth:message.generic.keep_secure', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
}} }}
> >
{t('auth:action.download_account', { {t('auth:action.download_account', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</CustomButton> </CustomButton>
</> </>

View File

@ -289,9 +289,9 @@ export const GroupAnnouncements = ({
const fee = await getFee('ARBITRARY'); const fee = await getFee('ARBITRARY');
await show({ await show({
message: t('group:question.perform_transaction', { message: t('core:question.perform_transaction', {
action: 'ARBITRARY', action: 'ARBITRARY',
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
publishFee: fee.fee + ' QORT', publishFee: fee.fee + ' QORT',
}); });

View File

@ -77,26 +77,26 @@ export const CoreSyncStatus = () => {
let imagePath = syncingImg; let imagePath = syncingImg;
let message = t('core:message.status.synchronizing', { let message = t('core:message.status.synchronizing', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}); });
if (isMintingPossible && !isUsingGateway) { if (isMintingPossible && !isUsingGateway) {
imagePath = syncedMintingImg; 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) { } else if (isSynchronizing === true && syncPercent === 99) {
imagePath = syncingImg; imagePath = syncingImg;
} else if (isSynchronizing && !isMintingPossible && syncPercent === 100) { } else if (isSynchronizing && !isMintingPossible && syncPercent === 100) {
imagePath = syncingImg; 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) { } else if (!isSynchronizing && !isMintingPossible && syncPercent === 100) {
imagePath = syncedImg; 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) { } else if (isSynchronizing && isMintingPossible && syncPercent === 100) {
imagePath = syncingImg; 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) { } else if (!isSynchronizing && isMintingPossible && syncPercent === 100) {
imagePath = syncedMintingImg; 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 ( return (
@ -121,36 +121,38 @@ export const CoreSyncStatus = () => {
top: '10px', top: '10px',
}} }}
> >
<h3>{t('core:core.information', { postProcess: 'capitalize' })}</h3> <h3>
{t('core:core.information', { postProcess: 'capitalizeFirst' })}
</h3>
<h4 className="lineHeight"> <h4 className="lineHeight">
{t('core:core.version', { postProcess: 'capitalize' })}:{' '} {t('core:core.version', { postProcess: 'capitalizeFirst' })}:{' '}
<span style={{ color: '#03a9f4' }}>{buildVersion}</span> <span style={{ color: '#03a9f4' }}>{buildVersion}</span>
</h4> </h4>
<h4 className="lineHeight">{message}</h4> <h4 className="lineHeight">{message}</h4>
<h4 className="lineHeight"> <h4 className="lineHeight">
{t('core:core.block_height', { postProcess: 'capitalize' })}:{' '} {t('core:core.block_height', { postProcess: 'capitalizeFirst' })}:{' '}
<span style={{ color: '#03a9f4' }}>{height || ''}</span> <span style={{ color: '#03a9f4' }}>{height || ''}</span>
</h4> </h4>
<h4 className="lineHeight"> <h4 className="lineHeight">
{t('core:core.peers', { postProcess: 'capitalize' })}:{' '} {t('core:core.peers', { postProcess: 'capitalizeFirst' })}:{' '}
<span style={{ color: '#03a9f4' }}> <span style={{ color: '#03a9f4' }}>
{numberOfConnections || ''} {numberOfConnections || ''}
</span> </span>
</h4> </h4>
<h4 className="lineHeight"> <h4 className="lineHeight">
{t('auth:node.using_public', { postProcess: 'capitalize' })}:{' '} {t('auth:node.using_public', { postProcess: 'capitalizeFirst' })}:{' '}
<span style={{ color: '#03a9f4' }}> <span style={{ color: '#03a9f4' }}>
{isUsingGateway?.toString()} {isUsingGateway?.toString()}
</span> </span>
</h4> </h4>
<h4 className="lineHeight"> <h4 className="lineHeight">
{t('core:ui.version', { postProcess: 'capitalize' })}:{' '} {t('core:ui.version', { postProcess: 'capitalizeFirst' })}:{' '}
<span style={{ color: '#03a9f4' }}>{manifestData.version}</span> <span style={{ color: '#03a9f4' }}>{manifestData.version}</span>
</h4> </h4>
</div> </div>

View File

@ -46,7 +46,7 @@ export const Explore = ({ setDesktopViewMode }) => {
fontSize: '1rem', fontSize: '1rem',
}} }}
> >
{t('tutorial:initial.trade_qort', { postProcess: 'capitalize' })} {t('tutorial:initial.trade_qort', { postProcess: 'capitalizeFirst' })}
</Typography> </Typography>
</ButtonBase> </ButtonBase>
@ -73,7 +73,7 @@ export const Explore = ({ setDesktopViewMode }) => {
fontSize: '1rem', fontSize: '1rem',
}} }}
> >
{t('tutorial:initial.see_apps', { postProcess: 'capitalize' })} {t('tutorial:initial.see_apps', { postProcess: 'capitalizeFirst' })}
</Typography> </Typography>
</ButtonBase> </ButtonBase>
@ -102,7 +102,9 @@ export const Explore = ({ setDesktopViewMode }) => {
fontSize: '1rem', fontSize: '1rem',
}} }}
> >
{t('tutorial:initial.general_chat', { postProcess: 'capitalize' })} {t('tutorial:initial.general_chat', {
postProcess: 'capitalizeFirst',
})}
</Typography> </Typography>
</ButtonBase> </ButtonBase>
@ -129,7 +131,7 @@ export const Explore = ({ setDesktopViewMode }) => {
fontSize: '1rem', fontSize: '1rem',
}} }}
> >
{t('core:wallet.wallet_other', { postProcess: 'capitalize' })} {t('core:wallet.wallet_other', { postProcess: 'capitalizeFirst' })}
</Typography> </Typography>
</ButtonBase> </ButtonBase>
</Box> </Box>

View File

@ -111,7 +111,7 @@ export const GeneralNotifications = ({ address }) => {
userSelect: 'none', userSelect: 'none',
}} }}
> >
No new notifications {t('core:message.generic.no_notifications')}
</Typography> </Typography>
)} )}
{hasNewPayment && ( {hasNewPayment && (

View File

@ -70,9 +70,9 @@ export const JoinGroup = () => {
const fee = await getFee('JOIN_GROUP'); const fee = await getFee('JOIN_GROUP');
await show({ await show({
message: t('group:question.perform_transaction', { message: t('core:question.perform_transaction', {
action: 'JOIN_GROUP', action: 'JOIN_GROUP',
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
publishFee: fee.fee + ' QORT', publishFee: fee.fee + ' QORT',
}); });
@ -89,7 +89,7 @@ export const JoinGroup = () => {
setInfoSnack({ setInfoSnack({
type: 'success', type: 'success',
message: t('group:message.success.group_join', { message: t('group:message.success.group_join', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
@ -100,11 +100,11 @@ export const JoinGroup = () => {
type: 'joined-group', type: 'joined-group',
label: t('group:message.success.group_join_label', { label: t('group:message.success.group_join_label', {
group_name: group?.groupName, group_name: group?.groupName,
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
labelDone: t('group:message.success.group_join_label', { labelDone: t('group:message.success.group_join_label', {
group_name: group?.groupName, group_name: group?.groupName,
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
done: false, done: false,
groupId, groupId,
@ -118,11 +118,11 @@ export const JoinGroup = () => {
type: 'joined-group-request', type: 'joined-group-request',
label: t('group:message.success.group_join_request', { label: t('group:message.success.group_join_request', {
group_name: group?.groupName, group_name: group?.groupName,
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
labelDone: t('group:message.success.group_join_outcome', { labelDone: t('group:message.success.group_join_outcome', {
group_name: group?.groupName, group_name: group?.groupName,
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
done: false, done: false,
groupId, groupId,
@ -147,7 +147,9 @@ export const JoinGroup = () => {
type: 'error', type: 'error',
message: message:
error.message || error.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }), t('core:message.error.generic', {
postProcess: 'capitalizeFirst',
}),
}); });
setOpenSnack(true); setOpenSnack(true);
rej(error); rej(error);
@ -205,7 +207,7 @@ export const JoinGroup = () => {
fontWeight: 600, fontWeight: 600,
}} }}
> >
{t('group:group.name', { postProcess: 'capitalize' })}:{' '} {t('group:group.name', { postProcess: 'capitalizeFirst' })}:{' '}
{` ${groupInfo?.groupName}`} {` ${groupInfo?.groupName}`}
</Typography> </Typography>
@ -215,8 +217,10 @@ export const JoinGroup = () => {
fontWeight: 600, fontWeight: 600,
}} }}
> >
{t('group:group.member_number', { postProcess: 'capitalize' })}:{' '} {t('group:group.member_number', {
{` ${groupInfo?.memberCount}`} postProcess: 'capitalizeFirst',
})}
: {` ${groupInfo?.memberCount}`}
</Typography> </Typography>
{groupInfo?.description && ( {groupInfo?.description && (
@ -237,7 +241,7 @@ export const JoinGroup = () => {
}} }}
> >
{t('group:message.generic.already_in_group', { {t('group:message.generic.already_in_group', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
)} )}
@ -249,7 +253,7 @@ export const JoinGroup = () => {
}} }}
> >
{t('group:message.generic.closed_group', { {t('group:message.generic.closed_group', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
)} )}
@ -276,7 +280,7 @@ export const JoinGroup = () => {
}} }}
> >
{t('core:action.join', { {t('core:action.join', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</CustomButtonAccept> </CustomButtonAccept>
</ButtonBase> </ButtonBase>
@ -291,7 +295,7 @@ export const JoinGroup = () => {
onClick={() => setIsOpen(false)} onClick={() => setIsOpen(false)}
> >
{t('core:action.close', { {t('core:action.close', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</CustomButtonAccept> </CustomButtonAccept>
</DialogActions> </DialogActions>

View File

@ -105,22 +105,22 @@ export const AddGroup = ({ address, open, setOpen }) => {
if (!name) if (!name)
throw new Error( throw new Error(
t('group:message.error.name_required', { t('group:message.error.name_required', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}) })
); );
if (!description) if (!description)
throw new Error( throw new Error(
t('group:message.error.description_required', { t('group:message.error.description_required', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}) })
); );
const fee = await getFee('CREATE_GROUP'); const fee = await getFee('CREATE_GROUP');
await show({ await show({
message: t('group:question.perform_transaction', { message: t('core:question.perform_transaction', {
action: 'CREATE_GROUP', action: 'CREATE_GROUP',
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
publishFee: fee.fee + ' QORT', publishFee: fee.fee + ' QORT',
}); });
@ -140,7 +140,7 @@ export const AddGroup = ({ address, open, setOpen }) => {
setInfoSnack({ setInfoSnack({
type: 'success', type: 'success',
message: t('group:message.success.group_creation', { message: t('group:message.success.group_creation', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
setOpenSnack(true); setOpenSnack(true);
@ -150,11 +150,11 @@ export const AddGroup = ({ address, open, setOpen }) => {
type: 'created-group', type: 'created-group',
label: t('group:message.success.group_creation_name', { label: t('group:message.success.group_creation_name', {
group_name: name, group_name: name,
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
labelDone: t('group:message.success.group_creation_label', { labelDone: t('group:message.success.group_creation_label', {
group_name: name, group_name: name,
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
done: false, done: false,
}, },
@ -172,7 +172,9 @@ export const AddGroup = ({ address, open, setOpen }) => {
rej({ rej({
message: message:
error.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 }) => {
> >
<Toolbar> <Toolbar>
<Typography sx={{ ml: 2, flex: 1 }} variant="h4" component="div"> <Typography sx={{ ml: 2, flex: 1 }} variant="h4" component="div">
{t('group:group.management', { postProcess: 'capitalize' })} {t('group:group.management', { postProcess: 'capitalizeFirst' })}
</Typography> </Typography>
<IconButton <IconButton
@ -267,7 +269,7 @@ export const AddGroup = ({ address, open, setOpen }) => {
> >
<Tab <Tab
label={t('group:action.create_group', { label={t('group:action.create_group', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
{...a11yProps(0)} {...a11yProps(0)}
sx={{ sx={{
@ -279,7 +281,7 @@ export const AddGroup = ({ address, open, setOpen }) => {
/> />
<Tab <Tab
label={t('group:action.find_group', { label={t('group:action.find_group', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
{...a11yProps(1)} {...a11yProps(1)}
sx={{ sx={{
@ -291,7 +293,7 @@ export const AddGroup = ({ address, open, setOpen }) => {
/> />
<Tab <Tab
label={t('group:group.invites', { label={t('group:group.invites', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
{...a11yProps(2)} {...a11yProps(2)}
sx={{ sx={{
@ -328,13 +330,13 @@ export const AddGroup = ({ address, open, setOpen }) => {
> >
<Label> <Label>
{t('group:group.name', { {t('group:group.name', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Label> </Label>
<Input <Input
placeholder={t('group:group.name', { placeholder={t('group:group.name', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
value={name} value={name}
onChange={(e) => setName(e.target.value)} onChange={(e) => setName(e.target.value)}
@ -350,13 +352,13 @@ export const AddGroup = ({ address, open, setOpen }) => {
> >
<Label> <Label>
{t('group:group.description', { {t('group:group.description', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Label> </Label>
<Input <Input
placeholder={t('group:group.description', { placeholder={t('group:group.description', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
value={description} value={description}
onChange={(e) => setDescription(e.target.value)} onChange={(e) => setDescription(e.target.value)}
@ -372,7 +374,7 @@ export const AddGroup = ({ address, open, setOpen }) => {
> >
<Label> <Label>
{t('group:group.type', { {t('group:group.type', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Label> </Label>
@ -385,12 +387,12 @@ export const AddGroup = ({ address, open, setOpen }) => {
> >
<MenuItem value={1}> <MenuItem value={1}>
{t('group:group.open', { {t('group:group.open', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</MenuItem> </MenuItem>
<MenuItem value={0}> <MenuItem value={0}>
{t('group:group.closed', { {t('group:group.closed', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</MenuItem> </MenuItem>
</Select> </Select>
@ -407,7 +409,7 @@ export const AddGroup = ({ address, open, setOpen }) => {
> >
<Typography> <Typography>
{t('group:advanced_options', { {t('group:advanced_options', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
@ -424,7 +426,7 @@ export const AddGroup = ({ address, open, setOpen }) => {
> >
<Label> <Label>
{t('group:approval_threshold', { {t('group:approval_threshold', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Label> </Label>
@ -437,12 +439,12 @@ export const AddGroup = ({ address, open, setOpen }) => {
> >
<MenuItem value={0}> <MenuItem value={0}>
{t('core:count.none', { {t('core:count.none', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</MenuItem> </MenuItem>
<MenuItem value={1}> <MenuItem value={1}>
{t('core:count.one', { {t('core:count.one', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</MenuItem> </MenuItem>
<MenuItem value={20}>20%</MenuItem> <MenuItem value={20}>20%</MenuItem>
@ -462,7 +464,7 @@ export const AddGroup = ({ address, open, setOpen }) => {
> >
<Label> <Label>
{t('group:block_delay.minimum', { {t('group:block_delay.minimum', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Label> </Label>
@ -521,7 +523,7 @@ export const AddGroup = ({ address, open, setOpen }) => {
> >
<Label> <Label>
{t('group:block_delay.maximum', { {t('group:block_delay.maximum', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Label> </Label>
@ -582,7 +584,7 @@ export const AddGroup = ({ address, open, setOpen }) => {
onClick={handleCreateGroup} onClick={handleCreateGroup}
> >
{t('group:action.create_group', { {t('group:action.create_group', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Button> </Button>
</Box> </Box>

View File

@ -113,9 +113,9 @@ export const AddGroupList = ({ setInfoSnack, setOpenSnack }) => {
const fee = await getFee('JOIN_GROUP'); const fee = await getFee('JOIN_GROUP');
await show({ await show({
message: t('group:question.perform_transaction', { message: t('core:question.perform_transaction', {
action: 'JOIN_GROUP', action: 'JOIN_GROUP',
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
publishFee: fee.fee + ' QORT', publishFee: fee.fee + ' QORT',
}); });
@ -131,7 +131,7 @@ export const AddGroupList = ({ setInfoSnack, setOpenSnack }) => {
setInfoSnack({ setInfoSnack({
type: 'success', type: 'success',
message: t('group:message.success.join_group', { message: t('group:message.success.join_group', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
@ -142,11 +142,11 @@ export const AddGroupList = ({ setInfoSnack, setOpenSnack }) => {
type: 'joined-group', type: 'joined-group',
label: t('group:message.success.group_join_label', { label: t('group:message.success.group_join_label', {
group_name: group?.groupName, group_name: group?.groupName,
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
labelDone: t('group:message.success.group_join_label', { labelDone: t('group:message.success.group_join_label', {
group_name: group?.groupName, group_name: group?.groupName,
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
done: false, done: false,
groupId, groupId,
@ -160,11 +160,11 @@ export const AddGroupList = ({ setInfoSnack, setOpenSnack }) => {
type: 'joined-group-request', type: 'joined-group-request',
label: t('group:message.success.group_join_request', { label: t('group:message.success.group_join_request', {
group_name: group?.groupName, group_name: group?.groupName,
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
labelDone: t('group:message.success.group_join_outcome', { labelDone: t('group:message.success.group_join_outcome', {
group_name: group?.groupName, group_name: group?.groupName,
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
done: false, done: false,
groupId, groupId,
@ -243,7 +243,7 @@ export const AddGroupList = ({ setInfoSnack, setOpenSnack }) => {
}} }}
> >
<Typography> <Typography>
{t('core:action.join', { postProcess: 'capitalize' })}{' '} {t('core:action.join', { postProcess: 'capitalizeFirst' })}{' '}
{group?.groupName} {group?.groupName}
</Typography> </Typography>
<Typography> <Typography>
@ -257,7 +257,7 @@ export const AddGroupList = ({ setInfoSnack, setOpenSnack }) => {
onClick={() => handleJoinGroup(group, group?.isOpen)} onClick={() => handleJoinGroup(group, group?.isOpen)}
> >
{t('group:action.join_group', { {t('group:action.join_group', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</LoadingButton> </LoadingButton>
</Box> </Box>

View File

@ -170,7 +170,9 @@ export const GroupMail = ({
.catch((error) => { .catch((error) => {
rej( rej(
error.message || error.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }) t('core:message.error.generic', {
postProcess: 'capitalizeFirst',
})
); );
}); });
}); });
@ -754,7 +756,7 @@ export const GroupMail = ({
<ThreadSingleLastMessageP> <ThreadSingleLastMessageP>
<ThreadSingleLastMessageSpanP> <ThreadSingleLastMessageSpanP>
{t('group:last_message', { {t('group:last_message', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
:{' '} :{' '}
</ThreadSingleLastMessageSpanP> </ThreadSingleLastMessageSpanP>
@ -791,7 +793,7 @@ export const GroupMail = ({
}} }}
> >
{t('core:page.last', { {t('core:page.last', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
<ArrowForwardIosIcon <ArrowForwardIosIcon
@ -825,7 +827,7 @@ export const GroupMail = ({
open={isLoading} open={isLoading}
info={{ info={{
message: t('group:message.success.loading_threads', { message: t('group:message.success.loading_threads', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}} }}
/> />

View File

@ -182,29 +182,29 @@ export const NewThread = ({
const missingFields: string[] = []; const missingFields: string[] = [];
if (!isMessage && !threadTitle) { if (!isMessage && !threadTitle) {
errorMsg = t('group:question.provide_thread', { errorMsg = t('core:question.provide_thread', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}); });
} }
if (!name) { if (!name) {
errorMsg = t('group:message.error.access_name', { errorMsg = t('group:message.error.access_name', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}); });
} }
if (!groupInfo) { if (!groupInfo) {
errorMsg = t('group:message.error.group_info', { errorMsg = t('group:message.error.group_info', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}); });
} }
// if (!description) missingFields.push('subject') // if (!description) missingFields.push('subject')
if (missingFields.length > 0) { if (missingFields.length > 0) {
const missingFieldsString = missingFields.join(', '); const missingFieldsString = missingFields.join(', ');
const errMsg = t('group:message.error.missing_field', { const errMsg = t('core:message.error.missing_fields', {
field: missingFieldsString, field: missingFieldsString,
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}); });
errorMsg = errMsg; errorMsg = errMsg;
} }
@ -217,7 +217,7 @@ export const NewThread = ({
if (!htmlContent?.trim() || htmlContent?.trim() === '<p></p>') { if (!htmlContent?.trim() || htmlContent?.trim() === '<p></p>') {
const errMsg = t('group:message.generic.provide_message', { const errMsg = t('group:message.generic.provide_message', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}); });
throw new Error(errMsg); throw new Error(errMsg);
} }
@ -229,9 +229,9 @@ export const NewThread = ({
feeToShow = +feeToShow * 2; feeToShow = +feeToShow * 2;
} }
await show({ await show({
message: t('group:question.perform_transaction', { message: t('core:question.perform_transaction', {
action: 'ARBITRARY', action: 'ARBITRARY',
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
publishFee: feeToShow + ' QORT', publishFee: feeToShow + ' QORT',
}); });
@ -257,7 +257,7 @@ export const NewThread = ({
isPrivate === false ? null : await getSecretKey(false, true); isPrivate === false ? null : await getSecretKey(false, true);
if (!secretKey && isPrivate) { if (!secretKey && isPrivate) {
const errMsg = t('group:message.error.group_secret_key', { const errMsg = t('group:message.error.group_secret_key', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}); });
throw new Error(errMsg); throw new Error(errMsg);
} }
@ -320,7 +320,7 @@ export const NewThread = ({
setInfoSnack({ setInfoSnack({
type: 'success', type: 'success',
message: t('group:message.success.thread_creation', { message: t('group:message.success.thread_creation', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
setOpenSnack(true); setOpenSnack(true);
@ -332,7 +332,7 @@ export const NewThread = ({
} else { } else {
if (!currentThread) { if (!currentThread) {
const errMsg = t('group:message.error.thread_id', { const errMsg = t('group:message.error.thread_id', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}); });
throw new Error(errMsg); throw new Error(errMsg);
} }
@ -360,7 +360,7 @@ export const NewThread = ({
setInfoSnack({ setInfoSnack({
type: 'success', type: 'success',
message: t('group:message.success.post_creation', { message: t('group:message.success.post_creation', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
setOpenSnack(true); setOpenSnack(true);
@ -404,10 +404,10 @@ export const NewThread = ({
<ComposeP> <ComposeP>
{currentThread {currentThread
? t('core:action.new.post', { ? t('core:action.new.post', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}) })
: t('core:action.new.thread', { : t('core:action.new.thread', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</ComposeP> </ComposeP>
</ComposeContainer> </ComposeContainer>
@ -437,10 +437,10 @@ export const NewThread = ({
<NewMessageHeaderP> <NewMessageHeaderP>
{isMessage {isMessage
? t('core:action.post_message', { ? t('core:action.post_message', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}) })
: t('core:action.new.thread', { : t('core:action.new.thread', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</NewMessageHeaderP> </NewMessageHeaderP>
@ -562,10 +562,10 @@ export const NewThread = ({
<NewMessageSendP> <NewMessageSendP>
{isMessage {isMessage
? t('core:action.post', { ? t('core:action.post', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}) })
: t('core:action.create_thread', { : t('core:action.create_thread', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</NewMessageSendP> </NewMessageSendP>

View File

@ -609,7 +609,7 @@ export const Thread = ({
<ReturnIcon /> <ReturnIcon />
<ComposeP> <ComposeP>
{t('group:action.return_to_thread', { {t('group:action.return_to_thread', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</ComposeP> </ComposeP>
</ShowMessageReturnButton> </ShowMessageReturnButton>
@ -688,7 +688,7 @@ export const Thread = ({
disabled={!hasFirstPage} disabled={!hasFirstPage}
variant="contained" variant="contained"
> >
{t('core:page.first', { postProcess: 'capitalize' })} {t('core:page.first', { postProcess: 'capitalizeFirst' })}
</Button> </Button>
<Button <Button
@ -707,7 +707,7 @@ export const Thread = ({
disabled={!hasPreviousPage} disabled={!hasPreviousPage}
variant="contained" variant="contained"
> >
{t('core:page.previous', { postProcess: 'capitalize' })} {t('core:page.previous', { postProcess: 'capitalizeFirst' })}
</Button> </Button>
<Button <Button
@ -726,7 +726,7 @@ export const Thread = ({
disabled={!hasNextPage} disabled={!hasNextPage}
variant="contained" variant="contained"
> >
{t('core:page.next', { postProcess: 'capitalize' })} {t('core:page.next', { postProcess: 'capitalizeFirst' })}
</Button> </Button>
<Button <Button
@ -745,7 +745,7 @@ export const Thread = ({
disabled={!hasLastPage} disabled={!hasLastPage}
variant="contained" variant="contained"
> >
{t('core:page.last', { postProcess: 'capitalize' })} {t('core:page.last', { postProcess: 'capitalizeFirst' })}
</Button> </Button>
</Box> </Box>
@ -929,7 +929,9 @@ export const Thread = ({
fontSize: '18px', fontSize: '18px',
}} }}
> >
{t('core:downloading_qdn', { postProcess: 'capitalize' })} {t('core:downloading_qdn', {
postProcess: 'capitalizeFirst',
})}
</Typography> </Typography>
</Box> </Box>
</Box> </Box>
@ -961,7 +963,7 @@ export const Thread = ({
}} }}
> >
{t('group:action.refetch_page', { {t('group:action.refetch_page', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Button> </Button>
</Box> </Box>
@ -1000,7 +1002,7 @@ export const Thread = ({
disabled={!hasFirstPage} disabled={!hasFirstPage}
variant="contained" variant="contained"
> >
{t('core:page.first', { postProcess: 'capitalize' })} {t('core:page.first', { postProcess: 'capitalizeFirst' })}
</Button> </Button>
<Button <Button
@ -1019,7 +1021,7 @@ export const Thread = ({
disabled={!hasPreviousPage} disabled={!hasPreviousPage}
variant="contained" variant="contained"
> >
{t('core:page.previous', { postProcess: 'capitalize' })} {t('core:page.previous', { postProcess: 'capitalizeFirst' })}
</Button> </Button>
<Button <Button
@ -1038,7 +1040,7 @@ export const Thread = ({
disabled={!hasNextPage} disabled={!hasNextPage}
variant="contained" variant="contained"
> >
{t('core:page.next', { postProcess: 'capitalize' })} {t('core:page.next', { postProcess: 'capitalizeFirst' })}
</Button> </Button>
<Button <Button
@ -1057,7 +1059,7 @@ export const Thread = ({
disabled={!hasLastPage} disabled={!hasLastPage}
variant="contained" variant="contained"
> >
{t('core:page.last', { postProcess: 'capitalize' })} {t('core:page.last', { postProcess: 'capitalizeFirst' })}
</Button> </Button>
</Box> </Box>
@ -1071,7 +1073,7 @@ export const Thread = ({
<LoadingSnackbar <LoadingSnackbar
open={isLoading} open={isLoading}
info={{ info={{
message: t('core:loading_posts', { postProcess: 'capitalize' }), message: t('core:loading_posts', { postProcess: 'capitalizeFirst' }),
}} }}
/> />
</GroupContainer> </GroupContainer>

View File

@ -514,7 +514,9 @@ export const Group = ({
.catch((error) => { .catch((error) => {
rej( rej(
error.message || 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) => { .catch((error) => {
rej( rej(
error.message || 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) => { .catch((error) => {
rej( rej(
error.message || 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) => { .catch((error) => {
rej( rej(
error.message || 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', { {t('group:message.generic.no_selection', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
</Box> </Box>
@ -2094,7 +2102,7 @@ export const Group = ({
{' '} {' '}
<Typography> <Typography>
{t('group:message.generic.encryption_key', { {t('group:message.generic.encryption_key', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
</div> </div>
@ -2120,21 +2128,21 @@ export const Group = ({
{' '} {' '}
<Typography> <Typography>
{t('group:message.generic.not_part_group', { {t('group:message.generic.not_part_group', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
<Spacer height="25px" /> <Spacer height="25px" />
<Typography> <Typography>
<strong> <strong>
{t('group:message.generic.only_encrypted', { {t('group:message.generic.only_encrypted', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</strong> </strong>
</Typography> </Typography>
<Spacer height="25px" /> <Spacer height="25px" />
<Typography> <Typography>
{t('group:message.generic.notify_admins', { {t('group:message.generic.notify_admins', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
<Spacer height="25px" /> <Spacer height="25px" />
@ -2156,7 +2164,7 @@ export const Group = ({
onClick={() => notifyAdmin(admin)} onClick={() => notifyAdmin(admin)}
> >
{t('core:action.notify', { {t('core:action.notify', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</LoadingButton> </LoadingButton>
</Box> </Box>
@ -2381,7 +2389,7 @@ export const Group = ({
message: message:
isLoadingGroupMessage || isLoadingGroupMessage ||
t('group:message.generic.setting_group', { t('group:message.generic.setting_group', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}} }}
/> />
@ -2390,7 +2398,7 @@ export const Group = ({
open={isLoadingGroups} open={isLoadingGroups}
info={{ info={{
message: t('group:message.generic.setting_group', { message: t('group:message.generic.setting_group', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}} }}
/> />

View File

@ -71,7 +71,7 @@ export const GroupInvites = ({ myAddress, setOpenAddGroup }) => {
fontSize: '1rem', fontSize: '1rem',
}} }}
> >
{t('group:group.invites', { postProcess: 'capitalize' })}{' '} {t('group:group.invites', { postProcess: 'capitalizeFirst' })}{' '}
{groupsWithJoinRequests?.length > 0 && {groupsWithJoinRequests?.length > 0 &&
` (${groupsWithJoinRequests?.length})`} ` (${groupsWithJoinRequests?.length})`}
</Typography> </Typography>
@ -131,7 +131,7 @@ export const GroupInvites = ({ myAddress, setOpenAddGroup }) => {
}} }}
> >
{t('group:message.generic.no_display', { {t('group:message.generic.no_display', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
</Box> </Box>
@ -181,7 +181,7 @@ export const GroupInvites = ({ myAddress, setOpenAddGroup }) => {
}} }}
primary={t('group:message.generic.group_invited_you', { primary={t('group:message.generic.group_invited_you', {
group: group?.groupName, group: group?.groupName,
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
/> />
</ListItemButton> </ListItemButton>

View File

@ -144,7 +144,7 @@ export const GroupJoinRequests = ({
fontSize: '1rem', fontSize: '1rem',
}} }}
> >
{t('group:join_requests', { postProcess: 'capitalize' })}{' '} {t('group:join_requests', { postProcess: 'capitalizeFirst' })}{' '}
{filteredJoinRequests?.filter((group) => group?.data?.length > 0) {filteredJoinRequests?.filter((group) => group?.data?.length > 0)
?.length > 0 && ?.length > 0 &&
` (${filteredJoinRequests?.filter((group) => group?.data?.length > 0)?.length})`} ` (${filteredJoinRequests?.filter((group) => group?.data?.length > 0)?.length})`}
@ -207,7 +207,7 @@ export const GroupJoinRequests = ({
}} }}
> >
{t('group:message.generic.no_display', { {t('group:message.generic.no_display', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
</Box> </Box>

View File

@ -85,7 +85,7 @@ export const HomeDesktop = ({
padding: '10px', padding: '10px',
}} }}
> >
{t('core:welcome', { postProcess: 'capitalize' })} {t('core:welcome', { postProcess: 'capitalizeFirst' })}
{userInfo?.name ? ( {userInfo?.name ? (
<span <span
style={{ style={{
@ -217,7 +217,9 @@ export const HomeDesktop = ({
fontSize: '1rem', fontSize: '1rem',
}} }}
> >
{t('tutorial:initial.explore', { postProcess: 'capitalize' })} {t('tutorial:initial.explore', {
postProcess: 'capitalizeFirst',
})}
</Typography>{' '} </Typography>{' '}
</Box> </Box>
</Divider> </Divider>

View File

@ -17,9 +17,9 @@ export const InviteMember = ({ groupId, setInfoSnack, setOpenSnack, show }) => {
const fee = await getFee('GROUP_INVITE'); const fee = await getFee('GROUP_INVITE');
await show({ await show({
message: t('group:question.perform_transaction', { message: t('core:question.perform_transaction', {
action: 'GROUP_INVITE', action: 'GROUP_INVITE',
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
publishFee: fee.fee + ' QORT', publishFee: fee.fee + ' QORT',
}); });
@ -40,7 +40,7 @@ export const InviteMember = ({ groupId, setInfoSnack, setOpenSnack, show }) => {
type: 'success', type: 'success',
message: t('group:message.success.group_invite', { message: t('group:message.success.group_invite', {
value: value, value: value,
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
setOpenSnack(true); setOpenSnack(true);
@ -61,7 +61,7 @@ export const InviteMember = ({ groupId, setInfoSnack, setOpenSnack, show }) => {
message: message:
error?.message || error?.message ||
t('core:message.error.generic', { t('core:message.error.generic', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
setOpenSnack(true); setOpenSnack(true);
@ -86,7 +86,7 @@ export const InviteMember = ({ groupId, setInfoSnack, setOpenSnack, show }) => {
flexDirection: 'column', flexDirection: 'column',
}} }}
> >
{t('group:action.invite_member', { postProcess: 'capitalize' })} {t('group:action.invite_member', { postProcess: 'capitalizeFirst' })}
<Spacer height="20px" /> <Spacer height="20px" />
@ -99,14 +99,14 @@ export const InviteMember = ({ groupId, setInfoSnack, setOpenSnack, show }) => {
<Spacer height="20px" /> <Spacer height="20px" />
<Label> <Label>
{t('group:invitation_expiry', { postProcess: 'capitalize' })} {t('group:invitation_expiry', { postProcess: 'capitalizeFirst' })}
</Label> </Label>
<Select <Select
labelId="demo-simple-select-label" labelId="demo-simple-select-label"
id="demo-simple-select" id="demo-simple-select"
value={expiryTime} value={expiryTime}
label={t('group:invitation_expiry', { postProcess: 'capitalize' })} label={t('group:invitation_expiry', { postProcess: 'capitalizeFirst' })}
onChange={handleChange} onChange={handleChange}
> >
<MenuItem value={10800}>{t('core:time.hour', { count: 3 })}</MenuItem> <MenuItem value={10800}>{t('core:time.hour', { count: 3 })}</MenuItem>
@ -129,7 +129,7 @@ export const InviteMember = ({ groupId, setInfoSnack, setOpenSnack, show }) => {
loading={isLoadingInvite} loading={isLoadingInvite}
onClick={inviteMember} onClick={inviteMember}
> >
{t('core:action.invite', { postProcess: 'capitalize' })} {t('core:action.invite', { postProcess: 'capitalizeFirst' })}
</LoadingButton> </LoadingButton>
</Box> </Box>
); );

View File

@ -88,9 +88,9 @@ export const ListOfBans = ({ groupId, setInfoSnack, setOpenSnack, show }) => {
try { try {
const fee = await getFee('CANCEL_GROUP_BAN'); const fee = await getFee('CANCEL_GROUP_BAN');
await show({ await show({
message: t('group:question.perform_transaction', { message: t('core:question.perform_transaction', {
action: 'CANCEL_GROUP_BAN', action: 'CANCEL_GROUP_BAN',
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
publishFee: fee.fee + ' QORT', publishFee: fee.fee + ' QORT',
}); });
@ -108,7 +108,7 @@ export const ListOfBans = ({ groupId, setInfoSnack, setOpenSnack, show }) => {
setInfoSnack({ setInfoSnack({
type: 'success', type: 'success',
message: t('group:message.success.unbanned_user', { message: t('group:message.success.unbanned_user', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
handlePopoverClose(); handlePopoverClose();
@ -184,7 +184,7 @@ export const ListOfBans = ({ groupId, setInfoSnack, setOpenSnack, show }) => {
onClick={() => handleCancelBan(member?.offender)} onClick={() => handleCancelBan(member?.offender)}
> >
{t('group:action.cancel_ban', { {t('group:action.cancel_ban', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</LoadingButton> </LoadingButton>
</Box> </Box>
@ -214,7 +214,7 @@ export const ListOfBans = ({ groupId, setInfoSnack, setOpenSnack, show }) => {
return ( return (
<div> <div>
<p>{t('group:ban_list', { postProcess: 'capitalize' })}</p> <p>{t('group:ban_list', { postProcess: 'capitalizeFirst' })}</p>
<div <div
style={{ style={{
display: 'flex', display: 'flex',

View File

@ -240,14 +240,16 @@ export const ListOfGroupPromotions = () => {
.catch((error) => { .catch((error) => {
rej( rej(
error.message || error.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }) t('core:message.error.generic', {
postProcess: 'capitalizeFirst',
})
); );
}); });
}); });
setInfoSnack({ setInfoSnack({
type: 'success', type: 'success',
message: t('group:message.success.group_promotion', { message: t('group:message.success.group_promotion', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
setOpenSnack(true); setOpenSnack(true);
@ -260,7 +262,7 @@ export const ListOfGroupPromotions = () => {
message: message:
error?.message || error?.message ||
t('group:message.error.group_promotion', { t('group:message.error.group_promotion', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
setOpenSnack(true); setOpenSnack(true);
@ -274,9 +276,9 @@ export const ListOfGroupPromotions = () => {
const groupId = group.groupId; const groupId = group.groupId;
const fee = await getFee('JOIN_GROUP'); const fee = await getFee('JOIN_GROUP');
await show({ await show({
message: t('group:question.perform_transaction', { message: t('core:question.perform_transaction', {
action: 'JOIN_GROUP', action: 'JOIN_GROUP',
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
publishFee: fee.fee + ' QORT', publishFee: fee.fee + ' QORT',
}); });
@ -291,7 +293,7 @@ export const ListOfGroupPromotions = () => {
setInfoSnack({ setInfoSnack({
type: 'success', type: 'success',
message: t('group:message.success.group_join', { message: t('group:message.success.group_join', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
@ -302,11 +304,11 @@ export const ListOfGroupPromotions = () => {
type: 'joined-group', type: 'joined-group',
label: t('group:message.success.group_join_label', { label: t('group:message.success.group_join_label', {
group_name: group?.groupName, group_name: group?.groupName,
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
labelDone: t('group:message.success.group_join_label', { labelDone: t('group:message.success.group_join_label', {
group_name: group?.groupName, group_name: group?.groupName,
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
done: false, done: false,
groupId, groupId,
@ -320,11 +322,11 @@ export const ListOfGroupPromotions = () => {
type: 'joined-group-request', type: 'joined-group-request',
label: t('group:message.success.group_join_request', { label: t('group:message.success.group_join_request', {
group_name: group?.groupName, group_name: group?.groupName,
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
labelDone: t('group:message.success.group_join_outcome', { labelDone: t('group:message.success.group_join_outcome', {
group_name: group?.groupName, group_name: group?.groupName,
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
done: false, done: false,
groupId, groupId,
@ -350,7 +352,9 @@ export const ListOfGroupPromotions = () => {
type: 'error', type: 'error',
message: message:
error.message || error.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }), t('core:message.error.generic', {
postProcess: 'capitalizeFirst',
}),
}); });
setOpenSnack(true); setOpenSnack(true);
rej(error); rej(error);
@ -399,7 +403,7 @@ export const ListOfGroupPromotions = () => {
fontSize: '1rem', fontSize: '1rem',
}} }}
> >
{t('group:group.promotions', { postProcess: 'capitalize' })}{' '} {t('group:group.promotions', { postProcess: 'capitalizeFirst' })}{' '}
{promotions.length > 0 && ` (${promotions.length})`} {promotions.length > 0 && ` (${promotions.length})`}
</Typography> </Typography>
@ -458,7 +462,9 @@ export const ListOfGroupPromotions = () => {
fontSize: '12px', fontSize: '12px',
}} }}
> >
{t('group.action.add_promotion', { postProcess: 'capitalize' })} {t('group.action.add_promotion', {
postProcess: 'capitalizeFirst',
})}
</Button> </Button>
</Box> </Box>
@ -505,7 +511,7 @@ export const ListOfGroupPromotions = () => {
}} }}
> >
{t('group.message.generic.no_display', { {t('group.message.generic.no_display', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
</Box> </Box>
@ -570,7 +576,7 @@ export const ListOfGroupPromotions = () => {
fallback={ fallback={
<Typography> <Typography>
{t('group.message.generic.invalid_data', { {t('group.message.generic.invalid_data', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
} }
@ -622,7 +628,7 @@ export const ListOfGroupPromotions = () => {
}} }}
> >
{t('group:group.name', { {t('group:group.name', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
: {` ${promotion?.groupName}`} : {` ${promotion?.groupName}`}
</Typography> </Typography>
@ -634,7 +640,7 @@ export const ListOfGroupPromotions = () => {
}} }}
> >
{t('group:group.member_number', { {t('group:group.member_number', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
: {` ${promotion?.memberCount}`} : {` ${promotion?.memberCount}`}
</Typography> </Typography>
@ -658,7 +664,7 @@ export const ListOfGroupPromotions = () => {
}} }}
> >
{t('group:message.generic.closed_group', { {t('group:message.generic.closed_group', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
)} )}
@ -681,7 +687,7 @@ export const ListOfGroupPromotions = () => {
onClick={handlePopoverClose} onClick={handlePopoverClose}
> >
{t('core:action.close', { {t('core:action.close', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</LoadingButton> </LoadingButton>
@ -697,7 +703,7 @@ export const ListOfGroupPromotions = () => {
} }
> >
{t('core:action.join', { {t('core:action.join', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</LoadingButton> </LoadingButton>
</Box> </Box>
@ -783,10 +789,10 @@ export const ListOfGroupPromotions = () => {
> >
{promotion?.isOpen {promotion?.isOpen
? t('group:group.public', { ? t('group:group.public', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}) })
: t('group:group.private', { : t('group:group.private', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
</Box> </Box>
@ -822,7 +828,7 @@ export const ListOfGroupPromotions = () => {
}} }}
> >
{t('group:action.join_group', { {t('group:action.join_group', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
: {` ${promotion?.groupName}`} : {` ${promotion?.groupName}`}
</Button> </Button>
@ -850,19 +856,19 @@ export const ListOfGroupPromotions = () => {
aria-describedby="alert-dialog-description" aria-describedby="alert-dialog-description"
> >
<DialogTitle id="alert-dialog-title"> <DialogTitle id="alert-dialog-title">
{t('group:action.promote_group', { postProcess: 'capitalize' })} {t('group:action.promote_group', { postProcess: 'capitalizeFirst' })}
</DialogTitle> </DialogTitle>
<DialogContent> <DialogContent>
<DialogContentText id="alert-dialog-description"> <DialogContentText id="alert-dialog-description">
{t('group:message.generic.latest_promotion', { {t('group:message.generic.latest_promotion', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</DialogContentText> </DialogContentText>
<DialogContentText id="alert-dialog-description2"> <DialogContentText id="alert-dialog-description2">
{t('group:message.generic.max_chars', { {t('group:message.generic.max_chars', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
: {fee && fee} {' QORT'} : {fee && fee} {' QORT'}
</DialogContentText> </DialogContentText>
@ -878,13 +884,13 @@ export const ListOfGroupPromotions = () => {
> >
<Label> <Label>
{t('group:action.select_group', { {t('group:action.select_group', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Label> </Label>
<Label> <Label>
{t('group:message.generic.admin_only', { {t('group:message.generic.admin_only', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Label> </Label>
@ -936,7 +942,7 @@ export const ListOfGroupPromotions = () => {
onClick={() => setIsShowModal(false)} onClick={() => setIsShowModal(false)}
> >
{t('core:action.close', { {t('core:action.close', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Button> </Button>
<Button <Button
@ -946,7 +952,7 @@ export const ListOfGroupPromotions = () => {
autoFocus autoFocus
> >
{t('core:action.publish', { {t('core:action.publish', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Button> </Button>
</DialogActions> </DialogActions>

View File

@ -94,9 +94,9 @@ export const ListOfInvites = ({
const fee = await getFee('CANCEL_GROUP_INVITE'); const fee = await getFee('CANCEL_GROUP_INVITE');
await show({ await show({
message: t('group:question.perform_transaction', { message: t('core:question.perform_transaction', {
action: 'CANCEL_GROUP_INVITE', action: 'CANCEL_GROUP_INVITE',
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
publishFee: fee.fee + ' QORT', publishFee: fee.fee + ' QORT',
}); });
@ -114,7 +114,7 @@ export const ListOfInvites = ({
setInfoSnack({ setInfoSnack({
type: 'success', type: 'success',
message: t('group:message.success.invitation_cancellation', { message: t('group:message.success.invitation_cancellation', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
setOpenSnack(true); setOpenSnack(true);
@ -136,7 +136,7 @@ export const ListOfInvites = ({
message: message:
error.message || error.message ||
t('core:message.error.generic', { t('core:message.error.generic', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
setOpenSnack(true); setOpenSnack(true);
@ -196,7 +196,7 @@ export const ListOfInvites = ({
onClick={() => handleCancelInvitation(member?.invitee)} onClick={() => handleCancelInvitation(member?.invitee)}
> >
{t('core:action.cancel_invitation', { {t('core:action.cancel_invitation', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</LoadingButton> </LoadingButton>
</Box> </Box>
@ -229,7 +229,7 @@ export const ListOfInvites = ({
<div> <div>
<p> <p>
{t('group:invitees_list', { {t('group:invitees_list', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</p> </p>
<div <div

View File

@ -97,9 +97,9 @@ export const ListOfJoinRequests = ({
const fee = await getFee('GROUP_INVITE'); const fee = await getFee('GROUP_INVITE');
await show({ await show({
message: t('group:question.perform_transaction', { message: t('core:question.perform_transaction', {
action: 'GROUP_INVITE', action: 'GROUP_INVITE',
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
publishFee: fee.fee + ' QORT', publishFee: fee.fee + ' QORT',
}); });
@ -119,7 +119,7 @@ export const ListOfJoinRequests = ({
setInfoSnack({ setInfoSnack({
type: 'success', type: 'success',
message: t('group:message.success,group_join', { message: t('group:message.success,group_join', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
setOpenSnack(true); setOpenSnack(true);
@ -130,10 +130,10 @@ export const ListOfJoinRequests = ({
...response, ...response,
type: 'join-request-accept', type: 'join-request-accept',
label: t('group:message.success,invitation_request', { label: t('group:message.success,invitation_request', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
labelDone: t('group:message.success,user_joined', { labelDone: t('group:message.success,user_joined', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
done: false, done: false,
groupId, groupId,
@ -157,7 +157,9 @@ export const ListOfJoinRequests = ({
type: 'error', type: 'error',
message: message:
error?.message || error?.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }), t('core:message.error.generic', {
postProcess: 'capitalizeFirst',
}),
}); });
setOpenSnack(true); setOpenSnack(true);
rej(error); rej(error);
@ -223,7 +225,9 @@ export const ListOfJoinRequests = ({
variant="contained" variant="contained"
onClick={() => handleAcceptJoinRequest(member?.joiner)} onClick={() => handleAcceptJoinRequest(member?.joiner)}
> >
{t('core:action.accept', { postProcess: 'capitalize' })} {t('core:action.accept', {
postProcess: 'capitalizeFirst',
})}
</LoadingButton> </LoadingButton>
</Box> </Box>
</Popover> </Popover>
@ -252,7 +256,7 @@ export const ListOfJoinRequests = ({
return ( return (
<div> <div>
<p>{t('core:list.join_request', { postProcess: 'capitalize' })}</p> <p>{t('core:list.join_request', { postProcess: 'capitalizeFirst' })}</p>
<div <div
style={{ style={{
position: 'relative', position: 'relative',

View File

@ -59,9 +59,9 @@ const ListOfMembers = ({
try { try {
const fee = await getFee('GROUP_KICK'); const fee = await getFee('GROUP_KICK');
await show({ await show({
message: t('group:question.perform_transaction', { message: t('core:question.perform_transaction', {
action: 'GROUP_KICK', action: 'GROUP_KICK',
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
publishFee: fee.fee + ' QORT', publishFee: fee.fee + ' QORT',
}); });
@ -78,7 +78,7 @@ const ListOfMembers = ({
setInfoSnack({ setInfoSnack({
type: 'success', type: 'success',
message: t('group:message.success.group_kick', { message: t('group:message.success.group_kick', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
setOpenSnack(true); setOpenSnack(true);
@ -98,7 +98,9 @@ const ListOfMembers = ({
type: 'error', type: 'error',
message: message:
error.message || error.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }), t('core:message.error.generic', {
postProcess: 'capitalizeFirst',
}),
}); });
setOpenSnack(true); setOpenSnack(true);
rej(error); rej(error);
@ -115,9 +117,9 @@ const ListOfMembers = ({
const fee = await getFee('GROUP_BAN'); const fee = await getFee('GROUP_BAN');
await show({ await show({
message: t('group:question.perform_transaction', { message: t('core:question.perform_transaction', {
action: 'GROUP_BAN', action: 'GROUP_BAN',
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
publishFee: fee.fee + ' QORT', publishFee: fee.fee + ' QORT',
}); });
@ -136,7 +138,7 @@ const ListOfMembers = ({
setInfoSnack({ setInfoSnack({
type: 'success', type: 'success',
message: t('group:message.success.group_ban', { message: t('group:message.success.group_ban', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
setOpenSnack(true); setOpenSnack(true);
@ -156,7 +158,9 @@ const ListOfMembers = ({
type: 'error', type: 'error',
message: message:
error.message || error.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }), t('core:message.error.generic', {
postProcess: 'capitalizeFirst',
}),
}); });
setOpenSnack(true); setOpenSnack(true);
rej(error); rej(error);
@ -173,9 +177,9 @@ const ListOfMembers = ({
try { try {
const fee = await getFee('ADD_GROUP_ADMIN'); const fee = await getFee('ADD_GROUP_ADMIN');
await show({ await show({
message: t('group:question.perform_transaction', { message: t('core:question.perform_transaction', {
action: 'ADD_GROUP_ADMIN', action: 'ADD_GROUP_ADMIN',
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
publishFee: fee.fee + ' QORT', publishFee: fee.fee + ' QORT',
}); });
@ -191,7 +195,7 @@ const ListOfMembers = ({
setInfoSnack({ setInfoSnack({
type: 'success', type: 'success',
message: t('group:message.success.group_member_admin', { message: t('group:message.success.group_member_admin', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
setOpenSnack(true); setOpenSnack(true);
@ -211,7 +215,9 @@ const ListOfMembers = ({
type: 'error', type: 'error',
message: message:
error.message || error.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }), t('core:message.error.generic', {
postProcess: 'capitalizeFirst',
}),
}); });
setOpenSnack(true); setOpenSnack(true);
rej(error); rej(error);
@ -228,9 +234,9 @@ const ListOfMembers = ({
try { try {
const fee = await getFee('REMOVE_GROUP_ADMIN'); const fee = await getFee('REMOVE_GROUP_ADMIN');
await show({ await show({
message: t('group:question.perform_transaction', { message: t('core:question.perform_transaction', {
action: 'REMOVE_GROUP_ADMIN', action: 'REMOVE_GROUP_ADMIN',
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
publishFee: fee.fee + ' QORT', publishFee: fee.fee + ' QORT',
}); });
@ -246,7 +252,7 @@ const ListOfMembers = ({
setInfoSnack({ setInfoSnack({
type: 'success', type: 'success',
message: t('group:message.success.group_remove_member', { message: t('group:message.success.group_remove_member', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
setOpenSnack(true); setOpenSnack(true);
@ -266,7 +272,9 @@ const ListOfMembers = ({
type: 'error', type: 'error',
message: message:
error.message || error.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }), t('core:message.error.generic', {
postProcess: 'capitalizeFirst',
}),
}); });
setOpenSnack(true); setOpenSnack(true);
rej(error); rej(error);
@ -326,7 +334,7 @@ const ListOfMembers = ({
onClick={() => handleKick(member?.member)} onClick={() => handleKick(member?.member)}
> >
{t('group:action.kick_member', { {t('group:action.kick_member', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</LoadingButton> </LoadingButton>
@ -337,7 +345,7 @@ const ListOfMembers = ({
onClick={() => handleBan(member?.member)} onClick={() => handleBan(member?.member)}
> >
{t('group:action.ban', { {t('group:action.ban', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</LoadingButton> </LoadingButton>
@ -348,7 +356,7 @@ const ListOfMembers = ({
onClick={() => makeAdmin(member?.member)} onClick={() => makeAdmin(member?.member)}
> >
{t('group:action.make_admin', { {t('group:action.make_admin', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</LoadingButton> </LoadingButton>
@ -359,7 +367,7 @@ const ListOfMembers = ({
onClick={() => removeAdmin(member?.member)} onClick={() => removeAdmin(member?.member)}
> >
{t('group:action.remove_admin', { {t('group:action.remove_admin', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</LoadingButton> </LoadingButton>
</> </>
@ -394,7 +402,7 @@ const ListOfMembers = ({
}} }}
> >
{t('core:admin', { {t('core:admin', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
)} )}
@ -410,7 +418,7 @@ const ListOfMembers = ({
<div> <div>
<p> <p>
{t('core:list.member', { {t('core:list.member', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</p> </p>
<div <div

View File

@ -46,7 +46,9 @@ export const ListOfThreadPostsWatched = () => {
.catch((error) => { .catch((error) => {
rej( rej(
error.message || error.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }) t('core:message.error.generic', {
postProcess: 'capitalizeFirst',
})
); );
}); });
}); });
@ -85,7 +87,7 @@ export const ListOfThreadPostsWatched = () => {
}} }}
> >
{t('group:thread_posts', { {t('group:thread_posts', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
: :
</Typography> </Typography>
@ -133,7 +135,7 @@ export const ListOfThreadPostsWatched = () => {
}} }}
> >
{t('group:message.generic.no_display', { {t('group:message.generic.no_display', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
</Box> </Box>

View File

@ -84,9 +84,9 @@ export const ManageMembers = ({
setIsLoadingLeave(true); setIsLoadingLeave(true);
const fee = await getFee('LEAVE_GROUP'); const fee = await getFee('LEAVE_GROUP');
await show({ await show({
message: t('group:question.perform_transaction', { message: t('core:question.perform_transaction', {
action: 'LEAVE_GROUP', action: 'LEAVE_GROUP',
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
publishFee: fee.fee + ' QORT', publishFee: fee.fee + ' QORT',
}); });
@ -104,11 +104,11 @@ export const ManageMembers = ({
type: 'leave-group', type: 'leave-group',
label: t('group:message.success.group_leave_name', { label: t('group:message.success.group_leave_name', {
group_name: selectedGroup?.groupName, group_name: selectedGroup?.groupName,
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
labelDone: t('group:message.success.group_leave_label', { labelDone: t('group:message.success.group_leave_label', {
group_name: selectedGroup?.groupName, group_name: selectedGroup?.groupName,
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
done: false, done: false,
groupId: selectedGroup?.groupId, groupId: selectedGroup?.groupId,
@ -119,7 +119,7 @@ export const ManageMembers = ({
setInfoSnack({ setInfoSnack({
type: 'success', type: 'success',
message: t('group:message.success.group_leave', { message: t('group:message.success.group_leave', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
setOpenSnack(true); setOpenSnack(true);
@ -130,7 +130,9 @@ export const ManageMembers = ({
.catch((error) => { .catch((error) => {
rej( rej(
error.message || error.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }) t('core:message.error.generic', {
postProcess: 'capitalizeFirst',
})
); );
}); });
}); });
@ -207,7 +209,9 @@ export const ManageMembers = ({
> >
<Toolbar> <Toolbar>
<Typography sx={{ ml: 2, flex: 1 }} variant="h4" component="div"> <Typography sx={{ ml: 2, flex: 1 }} variant="h4" component="div">
{t('group:action.manage_members', { postProcess: 'capitalize' })} {t('group:action.manage_members', {
postProcess: 'capitalizeFirst',
})}
</Typography> </Typography>
<IconButton <IconButton
@ -310,18 +314,20 @@ export const ManageMembers = ({
> >
<Box> <Box>
<Typography> <Typography>
{t('group:group.id', { postProcess: 'capitalize' })}:{' '} {t('group:group.id', { postProcess: 'capitalizeFirst' })}:{' '}
{groupInfo?.groupId} {groupInfo?.groupId}
</Typography> </Typography>
<Typography> <Typography>
{t('group:group.name', { postProcess: 'capitalize' })}:{' '} {t('group:group.name', { postProcess: 'capitalizeFirst' })}:{' '}
{groupInfo?.groupName} {groupInfo?.groupName}
</Typography> </Typography>
<Typography> <Typography>
{t('group:group.member_number', { postProcess: 'capitalize' })}:{' '} {t('group:group.member_number', {
{groupInfo?.memberCount} postProcess: 'capitalizeFirst',
})}
: {groupInfo?.memberCount}
</Typography> </Typography>
<ButtonBase <ButtonBase
@ -336,7 +342,7 @@ export const ManageMembers = ({
<InsertLinkIcon /> <InsertLinkIcon />
<Typography> <Typography>
{t('group:join_link', { postProcess: 'capitalize' })} {t('group:join_link', { postProcess: 'capitalizeFirst' })}
</Typography> </Typography>
</ButtonBase> </ButtonBase>
</Box> </Box>
@ -351,7 +357,9 @@ export const ManageMembers = ({
variant="contained" variant="contained"
onClick={handleLeaveGroup} onClick={handleLeaveGroup}
> >
{t('group:action.leave_group', { postProcess: 'capitalize' })} {t('group:action.leave_group', {
postProcess: 'capitalizeFirst',
})}
</LoadingButton> </LoadingButton>
)} )}
</Card> </Card>
@ -368,7 +376,9 @@ export const ManageMembers = ({
variant="contained" variant="contained"
onClick={() => getMembersWithNames(selectedGroup?.groupId)} onClick={() => getMembersWithNames(selectedGroup?.groupId)}
> >
{t('group:action.load_members', { postProcess: 'capitalize' })} {t('group:action.load_members', {
postProcess: 'capitalizeFirst',
})}
</Button> </Button>
<Spacer height="10px" /> <Spacer height="10px" />
@ -465,7 +475,7 @@ export const ManageMembers = ({
open={isLoadingMembers} open={isLoadingMembers}
info={{ info={{
message: t('group:message.generic.loading_members', { message: t('group:message.generic.loading_members', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}} }}
/> />

View File

@ -92,7 +92,9 @@ export const QMailMessages = ({ userName, userAddress }) => {
.catch((error) => { .catch((error) => {
rej( rej(
error.message || error.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }) t('core:message.error.generic', {
postProcess: 'capitalizeFirst',
})
); );
}); });
}); });
@ -155,7 +157,7 @@ export const QMailMessages = ({ userName, userAddress }) => {
fontSize: '1rem', fontSize: '1rem',
}} }}
> >
{t('group:latest_mails', { postProcess: 'capitalize' })} {t('group:latest_mails', { postProcess: 'capitalizeFirst' })}
</Typography> </Typography>
<MarkEmailUnreadIcon <MarkEmailUnreadIcon
@ -226,7 +228,7 @@ export const QMailMessages = ({ userName, userAddress }) => {
}} }}
> >
{t('group:message.generic.no_display', { {t('group:message.generic.no_display', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
</Box> </Box>

View File

@ -135,7 +135,9 @@ export const Settings = ({ open, setOpen, rawWallet }) => {
.catch((error) => { .catch((error) => {
rej( rej(
error.message || error.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }) t('core:message.error.generic', {
postProcess: 'capitalizeFirst',
})
); );
}); });
}); });
@ -160,7 +162,7 @@ export const Settings = ({ open, setOpen, rawWallet }) => {
<Toolbar> <Toolbar>
<Typography sx={{ ml: 2, flex: 1 }} variant="h4" component="div"> <Typography sx={{ ml: 2, flex: 1 }} variant="h4" component="div">
{t('core:general_settings', { {t('core:general_settings', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
@ -194,7 +196,7 @@ export const Settings = ({ open, setOpen, rawWallet }) => {
<LocalNodeSwitch checked={checked} onChange={handleChange} /> <LocalNodeSwitch checked={checked} onChange={handleChange} />
} }
label={t('group:action.disable_push_notifications', { label={t('group:action.disable_push_notifications', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
/> />
{window?.electronAPI && ( {window?.electronAPI && (
@ -212,7 +214,7 @@ export const Settings = ({ open, setOpen, rawWallet }) => {
/> />
} }
label={t('group:action.enable_dev_mode', { label={t('group:action.enable_dev_mode', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
/> />
)} )}
@ -236,7 +238,7 @@ const ExportPrivateKey = ({ rawWallet }) => {
setInfoSnackCustom({ setInfoSnackCustom({
type: 'info', type: 'info',
message: t('group:message.generic.descrypt_wallet', { message: t('group:message.generic.descrypt_wallet', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
@ -260,10 +262,10 @@ const ExportPrivateKey = ({ rawWallet }) => {
message: error?.message message: error?.message
? t('group:message.error.decrypt_wallet', { ? t('group:message.error.decrypt_wallet', {
errorMessage: error?.message, errorMessage: error?.message,
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}) })
: t('group:message.error.descrypt_wallet', { : t('group:message.error.descrypt_wallet', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
@ -281,7 +283,7 @@ const ExportPrivateKey = ({ rawWallet }) => {
onClick={() => setIsOpen(true)} onClick={() => setIsOpen(true)}
> >
{t('group:action.export_private_key', { {t('group:action.export_private_key', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Button> </Button>
@ -292,7 +294,7 @@ const ExportPrivateKey = ({ rawWallet }) => {
> >
<DialogTitle id="alert-dialog-title"> <DialogTitle id="alert-dialog-title">
{t('group:action.export_password', { {t('group:action.export_password', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</DialogTitle> </DialogTitle>
@ -305,7 +307,7 @@ const ExportPrivateKey = ({ rawWallet }) => {
> >
<DialogContentText id="alert-dialog-description"> <DialogContentText id="alert-dialog-description">
{t('group:message.generic.secure_place', { {t('group:message.generic.secure_place', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</DialogContentText> </DialogContentText>
@ -326,7 +328,7 @@ const ExportPrivateKey = ({ rawWallet }) => {
setInfoSnackCustom({ setInfoSnackCustom({
type: 'success', type: 'success',
message: t('group:message.generic.private_key_copied', { message: t('group:message.generic.private_key_copied', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
@ -334,7 +336,7 @@ const ExportPrivateKey = ({ rawWallet }) => {
}} }}
> >
{t('group:action.copy_private_key', { {t('group:action.copy_private_key', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})}{' '} })}{' '}
<ContentCopyIcon color="primary" /> <ContentCopyIcon color="primary" />
</Button> </Button>
@ -351,13 +353,13 @@ const ExportPrivateKey = ({ rawWallet }) => {
}} }}
> >
{t('group:action.cancel', { {t('group:action.cancel', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Button> </Button>
<Button variant="contained" onClick={exportPrivateKeyFunc}> <Button variant="contained" onClick={exportPrivateKeyFunc}>
{t('group:action.decrypt', { {t('group:action.decrypt', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Button> </Button>
</DialogActions> </DialogActions>

View File

@ -76,9 +76,9 @@ export const ThingsToDoInitial = ({
}} }}
> >
{!isLoaded {!isLoaded
? t('core:loading', { postProcess: 'capitalize' }) ? t('core:loading', { postProcess: 'capitalizeFirst' })
: t('tutorial:initial.getting_started', { : t('tutorial:initial.getting_started', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
@ -122,7 +122,7 @@ export const ThingsToDoInitial = ({
}, },
}} }}
primary={t('tutorial:initial.6_qort', { primary={t('tutorial:initial.6_qort', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
/> />
@ -171,7 +171,7 @@ export const ThingsToDoInitial = ({
}, },
}} }}
primary={t('tutorial:initial.register_name', { primary={t('tutorial:initial.register_name', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
/> />
<ListItemIcon <ListItemIcon

View File

@ -99,9 +99,9 @@ export const UserListOfInvites = ({
const fee = await getFee('JOIN_GROUP'); const fee = await getFee('JOIN_GROUP');
await show({ await show({
message: t('group:question.perform_transaction', { message: t('core:question.perform_transaction', {
action: 'JOIN_GROUP', action: 'JOIN_GROUP',
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
publishFee: fee.fee + ' QORT', publishFee: fee.fee + ' QORT',
}); });
@ -130,7 +130,7 @@ export const UserListOfInvites = ({
setInfoSnack({ setInfoSnack({
type: 'success', type: 'success',
message: t('group:message.success.group_join', { message: t('group:message.success.group_join', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
setOpenSnack(true); setOpenSnack(true);
@ -149,7 +149,9 @@ export const UserListOfInvites = ({
type: 'error', type: 'error',
message: message:
error.message || error.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }), t('core:message.error.generic', {
postProcess: 'capitalizeFirst',
}),
}); });
setOpenSnack(true); setOpenSnack(true);
rej(error); rej(error);
@ -203,7 +205,7 @@ export const UserListOfInvites = ({
> >
<Typography> <Typography>
{t('core:action.join', { {t('core:action.join', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})}{' '} })}{' '}
{invite?.groupName} {invite?.groupName}
</Typography> </Typography>
@ -217,7 +219,7 @@ export const UserListOfInvites = ({
} }
> >
{t('group:action.join_group', { {t('group:action.join_group', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</LoadingButton> </LoadingButton>
</Box> </Box>
@ -265,7 +267,7 @@ export const UserListOfInvites = ({
> >
<p> <p>
{t('core:list.invite', { {t('core:list.invite', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</p> </p>

View File

@ -36,13 +36,15 @@ export const NewUsersCTA = ({ balance }) => {
textAlign: 'center', textAlign: 'center',
}} }}
> >
{t('core:message.question.new_user', { postProcess: 'capitalize' })} {t('core:message.question.new_user', {
postProcess: 'capitalizeFirst',
})}
</Typography> </Typography>
<Spacer height="20px" /> <Spacer height="20px" />
<Typography> <Typography>
{t('core:message_us', { postProcess: 'capitalize' })} {t('core:message_us', { postProcess: 'capitalizeFirst' })}
</Typography> </Typography>
<Spacer height="20px" /> <Spacer height="20px" />

View File

@ -152,7 +152,7 @@ export const QortPrice = () => {
fontWeight: 'bold', fontWeight: 'bold',
}} }}
> >
{t('core:price', { postProcess: 'capitalize' })} {t('core:price', { postProcess: 'capitalizeFirst' })}
</Typography> </Typography>
{!ltcPerQort ? ( {!ltcPerQort ? (
@ -184,7 +184,7 @@ export const QortPrice = () => {
fontWeight: 'bold', fontWeight: 'bold',
}} }}
> >
{t('core:supply', { postProcess: 'capitalize' })} {t('core:supply', { postProcess: 'capitalizeFirst' })}
</Typography> </Typography>
{!supply ? ( {!supply ? (
@ -238,7 +238,7 @@ export const QortPrice = () => {
fontWeight: 'bold', fontWeight: 'bold',
}} }}
> >
{t('core:last_height', { postProcess: 'capitalize' })} {t('core:last_height', { postProcess: 'capitalizeFirst' })}
</Typography> </Typography>
{!lastBlock?.height ? ( {!lastBlock?.height ? (

View File

@ -40,7 +40,7 @@ const LanguageSelector = () => {
<Tooltip <Tooltip
key={currentLang} key={currentLang}
title={t('core:action.change_language', { title={t('core:action.change_language', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
> >
<button <button

View File

@ -65,6 +65,7 @@ export const MainAvatar = ({ myName, balance, setOpenSnack, setInfoSnack }) => {
const publishAvatar = async () => { const publishAvatar = async () => {
try { try {
// TODO translate
const fee = await getFee('ARBITRARY'); const fee = await getFee('ARBITRARY');
if (+balance < +fee.fee) if (+balance < +fee.fee)
throw new Error(`Publishing an Avatar requires ${fee.fee}`); throw new Error(`Publishing an Avatar requires ${fee.fee}`);

View File

@ -227,7 +227,9 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
rej({ rej({
message: message:
error.message || error.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }), t('core:message.error.generic', {
postProcess: 'capitalizeFirst',
}),
}); });
}); });
}); });
@ -237,7 +239,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
message: message:
error?.message || error?.message ||
t('core:message.error.minting_account_add', { t('core:message.error.minting_account_add', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
setOpenSnack(true); setOpenSnack(true);
@ -275,7 +277,9 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
rej({ rej({
message: message:
error.message || error.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }), t('core:message.error.generic', {
postProcess: 'capitalizeFirst',
}),
}); });
}); });
}); });
@ -285,7 +289,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
message: message:
error?.message || error?.message ||
t('core:message.error.minting_account_remove', { t('core:message.error.minting_account_remove', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
setOpenSnack(true); setOpenSnack(true);
@ -297,10 +301,10 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
const createRewardShare = useCallback(async (publicKey, recipient) => { const createRewardShare = useCallback(async (publicKey, recipient) => {
const fee = await getFee('REWARD_SHARE'); const fee = await getFee('REWARD_SHARE');
await show({ await show({
message: t('group:question.perform_transaction', { message: t('core:question.perform_transaction', {
// TODO move from group into core namespace // TODO move from group into core namespace
action: 'REWARD_SHARE', action: 'REWARD_SHARE',
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
publishFee: fee.fee + ' QORT', publishFee: fee.fee + ' QORT',
}); });
@ -317,10 +321,10 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
...response, ...response,
type: 'add-rewardShare', type: 'add-rewardShare',
label: t('group:message.success.rewardshare_add', { label: t('group:message.success.rewardshare_add', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
labelDone: t('group:message.success.rewardshare_add_label', { labelDone: t('group:message.success.rewardshare_add_label', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
done: false, done: false,
}, },
@ -335,7 +339,9 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
rej({ rej({
message: message:
error.message || error.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }), t('core:message.error.generic', {
postProcess: 'capitalizeFirst',
}),
}); });
}); });
}); });
@ -358,7 +364,9 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
rej({ rej({
message: message:
error.message || error.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }), t('core:message.error.generic', {
postProcess: 'capitalizeFirst',
}),
}); });
}); });
}); });
@ -384,7 +392,9 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
} }
throw new Error( throw new Error(
t('group:message.error.timeout_reward', { postProcess: 'capitalize' }) t('group:message.error.timeout_reward', {
postProcess: 'capitalizeFirst',
})
); );
}; };
@ -420,7 +430,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
message: message:
error?.message || error?.message ||
t('group:message.error.unable_minting', { t('group:message.error.unable_minting', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
setOpenSnack(true); setOpenSnack(true);
@ -460,10 +470,10 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
...response, ...response,
type: 'remove-rewardShare', type: 'remove-rewardShare',
label: t('group:message.success.rewardshare_remove', { label: t('group:message.success.rewardshare_remove', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
labelDone: t('group:message.success.rewardshare_remove_label', { labelDone: t('group:message.success.rewardshare_remove_label', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
done: false, done: false,
}, },
@ -477,7 +487,9 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
rej({ rej({
message: message:
error.message || error.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }), t('core:message.error.generic', {
postProcess: 'capitalizeFirst',
}),
}); });
}); });
}); });
@ -609,7 +621,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
> >
<DialogTitle id="alert-dialog-title"> <DialogTitle id="alert-dialog-title">
{t('group:message.generic.manage_minting', { {t('group:message.generic.manage_minting', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</DialogTitle> </DialogTitle>
@ -662,28 +674,28 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
> >
<Typography> <Typography>
{t('auth:account.account_one', { {t('auth:account.account_one', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
: {handleNames(accountInfo?.address)} : {handleNames(accountInfo?.address)}
</Typography> </Typography>
<Typography> <Typography>
{t('core:level', { {t('core:level', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
: {accountInfo?.level} : {accountInfo?.level}
</Typography> </Typography>
<Typography> <Typography>
{t('group:message.generic.next_level', { {t('group:message.generic.next_level', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})}{' '} })}{' '}
{_levelUpBlocks()} {_levelUpBlocks()}
</Typography> </Typography>
<Typography> <Typography>
{t('group:message.generic.node_minting', { {t('group:message.generic.node_minting', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})}{' '} })}{' '}
{nodeInfos?.isMintingPossible?.toString()} {nodeInfos?.isMintingPossible?.toString()}
</Typography> </Typography>
@ -723,14 +735,14 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
variant="contained" variant="contained"
> >
{t('core:action.start_minting', { {t('core:action.start_minting', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Button> </Button>
{mintingAccounts?.length > 1 && ( {mintingAccounts?.length > 1 && (
<Typography> <Typography>
{t('group:message.generic.minting_keys_per_node', { {t('group:message.generic.minting_keys_per_node', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
)} )}
@ -742,7 +754,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
{mintingAccounts?.length > 0 && ( {mintingAccounts?.length > 0 && (
<Typography> <Typography>
{t('group:message.generic.node_minting_account', { {t('group:message.generic.node_minting_account', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
)} )}
@ -762,7 +774,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
> >
<Typography> <Typography>
{t('group:message.generic.node_minting_key', { {t('group:message.generic.node_minting_key', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
</Box> </Box>
@ -781,7 +793,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
> >
<Typography> <Typography>
{t('group:message.generic.minting_account', { {t('group:message.generic.minting_account', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})}{' '} })}{' '}
{handleNames(acct?.mintingAccount)} {handleNames(acct?.mintingAccount)}
</Typography> </Typography>
@ -807,7 +819,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
variant="contained" variant="contained"
> >
{t('group:action.remove_minting_account', { {t('group:action.remove_minting_account', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Button> </Button>
@ -820,7 +832,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
{mintingAccounts?.length > 1 && ( {mintingAccounts?.length > 1 && (
<Typography> <Typography>
{t('group:message.generic.minting_keys_per_node_different', { {t('group:message.generic.minting_keys_per_node_different', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
)} )}
@ -846,13 +858,13 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
> >
<Typography> <Typography>
{t('group:message.generic.minter_group', { {t('group:message.generic.minter_group', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
<Typography> <Typography>
{t('group:message.generic.mintership_app', { {t('group:message.generic.mintership_app', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
@ -882,7 +894,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
variant="contained" variant="contained"
> >
{t('group:action.visit_q_mintership', { {t('group:action.visit_q_mintership', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Button> </Button>
</Box> </Box>
@ -903,14 +915,14 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
{!isShowNext && ( {!isShowNext && (
<Typography> <Typography>
{t('group:message.success.rewardshare_creation', { {t('group:message.success.rewardshare_creation', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
)} )}
{isShowNext && ( {isShowNext && (
<Typography> <Typography>
{t('group:message.success.rewardshare_confirmed', { {t('group:message.success.rewardshare_confirmed', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
)} )}
@ -923,7 +935,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
onClick={onOk} onClick={onOk}
autoFocus autoFocus
> >
{t('core:page.next', { postProcess: 'capitalize' })} {t('core:page.next', { postProcess: 'capitalizeFirst' })}
</Button> </Button>
</DialogActions> </DialogActions>
</Dialog> </Dialog>
@ -936,7 +948,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
variant="contained" variant="contained"
onClick={() => setIsOpenMinting(false)} onClick={() => setIsOpenMinting(false)}
> >
{t('core:action.close', { postProcess: 'capitalize' })} {t('core:action.close', { postProcess: 'capitalizeFirst' })}
</Button> </Button>
</DialogActions> </DialogActions>

View File

@ -65,8 +65,8 @@ export const QMailStatus = () => {
textTransform: 'uppercase', textTransform: 'uppercase',
}} }}
> >
{t('core:q_mail', { {t('core:q_apps.q_mail', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</span> </span>
} }

View File

@ -115,20 +115,20 @@ export const RegisterName = ({
if (!userInfo?.address) if (!userInfo?.address)
throw new Error( throw new Error(
t('core:message.error.address_not_found', { t('core:message.error.address_not_found', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}) })
); );
if (!registerNameValue) if (!registerNameValue)
throw new Error( throw new Error(
t('core:action.enter_name', { t('core:action.enter_name', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}) })
); );
const fee = await getFee('REGISTER_NAME'); const fee = await getFee('REGISTER_NAME');
await show({ await show({
message: t('group:question.register_name', { message: t('core:question.register_name', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
publishFee: fee.fee + ' QORT', publishFee: fee.fee + ' QORT',
}); });
@ -145,7 +145,7 @@ export const RegisterName = ({
setInfoSnack({ setInfoSnack({
type: 'success', type: 'success',
message: t('group:message.success.registered_name', { message: t('group:message.success.registered_name', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
setIsOpen(false); setIsOpen(false);
@ -156,12 +156,12 @@ export const RegisterName = ({
...response, ...response,
type: 'register-name', type: 'register-name',
label: t('group:message.success.registered_name_label', { label: t('group:message.success.registered_name_label', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
labelDone: t( labelDone: t(
'group:message.success.registered_name_success', 'group:message.success.registered_name_success',
{ {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
} }
), ),
done: false, done: false,
@ -182,7 +182,9 @@ export const RegisterName = ({
type: 'error', type: 'error',
message: message:
error.message || error.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }), t('core:message.error.generic', {
postProcess: 'capitalizeFirst',
}),
}); });
setOpenSnack(true); setOpenSnack(true);
rej(error); rej(error);
@ -224,7 +226,7 @@ export const RegisterName = ({
}} }}
> >
<Label> <Label>
{t('core:action.choose_name', { postProcess: 'capitalize' })} {t('core:action.choose_name', { postProcess: 'capitalizeFirst' })}
</Label> </Label>
<TextField <TextField
autoComplete="off" autoComplete="off"
@ -253,7 +255,7 @@ export const RegisterName = ({
{t('core:message.generic.name_registration', { {t('core:message.generic.name_registration', {
balance: balance ?? 0, balance: balance ?? 0,
fee: { nameFee }, fee: { nameFee },
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
</Box> </Box>
@ -280,7 +282,7 @@ export const RegisterName = ({
<Typography> <Typography>
{t('core:message.generic.name_available', { {t('core:message.generic.name_available', {
name: registerNameValue, name: registerNameValue,
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
</Box> </Box>
@ -302,7 +304,7 @@ export const RegisterName = ({
<Typography> <Typography>
{t('core:message.generic.name_unavailable', { {t('core:message.generic.name_unavailable', {
name: registerNameValue, name: registerNameValue,
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
</Box> </Box>
@ -320,7 +322,7 @@ export const RegisterName = ({
<Typography> <Typography>
{t('core:message.generic.name_checking', { {t('core:message.generic.name_checking', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
</Box> </Box>
@ -334,7 +336,7 @@ export const RegisterName = ({
}} }}
> >
{t('core:message.generic.name_benefits', { {t('core:message.generic.name_benefits', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
@ -352,7 +354,7 @@ export const RegisterName = ({
</ListItemIcon> </ListItemIcon>
<ListItemText <ListItemText
primary={t('core:message.generic.publish_data', { primary={t('core:message.generic.publish_data', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
/> />
</ListItem> </ListItem>
@ -367,7 +369,7 @@ export const RegisterName = ({
</ListItemIcon> </ListItemIcon>
<ListItemText <ListItemText
primary={t('core:message.generic.secure_ownership', { primary={t('core:message.generic.secure_ownership', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
/> />
</ListItem> </ListItem>
@ -384,7 +386,7 @@ export const RegisterName = ({
setRegisterNameValue(''); setRegisterNameValue('');
}} }}
> >
{t('core:action.close', { postProcess: 'capitalize' })} {t('core:action.close', { postProcess: 'capitalizeFirst' })}
</Button> </Button>
<Button <Button
@ -399,7 +401,7 @@ export const RegisterName = ({
onClick={registerName} onClick={registerName}
autoFocus autoFocus
> >
{t('core:action.register_name', { postProcess: 'capitalize' })} {t('core:action.register_name', { postProcess: 'capitalizeFirst' })}
</Button> </Button>
</DialogActions> </DialogActions>
</Dialog> </Dialog>

View File

@ -155,7 +155,9 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
const fee = await getFee('ARBITRARY'); const fee = await getFee('ARBITRARY');
await show({ await show({
message: t('core:save.publish_qnd', { postProcess: 'capitalize' }), message: t('core:save_options.publish_qnd', {
postProcess: 'capitalizeFirst',
}),
publishFee: fee.fee + ' QORT', publishFee: fee.fee + ' QORT',
}); });
const response = await new Promise((res, rej) => { const response = await new Promise((res, rej) => {
@ -175,7 +177,9 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
.catch((error) => { .catch((error) => {
rej( rej(
error.message || error.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }) t('core:message.error.generic', {
postProcess: 'capitalizeFirst',
})
); );
}); });
}); });
@ -184,8 +188,8 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
setSettingsQdnLastUpdated(Date.now()); setSettingsQdnLastUpdated(Date.now());
setInfoSnack({ setInfoSnack({
type: 'success', type: 'success',
message: t('core:message.success.publish_qdn', { message: t('core:message.success.published_qdn', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
setOpenSnack(true); setOpenSnack(true);
@ -198,7 +202,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
message: message:
error?.message || error?.message ||
t('core:message.error.save_qdn', { t('core:message.error.save_qdn', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
}); });
setOpenSnack(true); setOpenSnack(true);
@ -231,8 +235,8 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
{isDesktop ? ( {isDesktop ? (
<IconWrapper <IconWrapper
disableWidth={disableWidth} disableWidth={disableWidth}
label={t('core:save_options.save', { label={t('core:action.save', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
selected={false} selected={false}
color={ color={
@ -303,7 +307,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
}} }}
> >
{t('core:save_options.settings', { {t('core:save_options.settings', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography>{' '} </Typography>{' '}
<Spacer height="40px" /> <Spacer height="40px" />
@ -332,7 +336,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
}} }}
> >
{t('core:save_options.qdn', { {t('core:save_options.qdn', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Button> </Button>
</Box> </Box>
@ -363,7 +367,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
}} }}
> >
{t('core:save_options.register_name', { {t('core:save_options.register_name', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
</Box> </Box>
@ -384,7 +388,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
}} }}
> >
{t('core:save_options.unsaved_changes', { {t('core:save_options.unsaved_changes', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
@ -407,8 +411,8 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
onClick={saveToQdn} onClick={saveToQdn}
variant="contained" variant="contained"
> >
{t('core:save_options.save_qdn', { {t('core:action.save_qdn', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</LoadingButton> </LoadingButton>
<Spacer height="20px" /> <Spacer height="20px" />
@ -420,8 +424,8 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
fontSize: '14px', fontSize: '14px',
}} }}
> >
{t('core:save_options.reset_qdn', { {t('core:question.reset_qdn', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
<Spacer height="10px" /> <Spacer height="10px" />
@ -443,7 +447,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
}} }}
> >
{t('core:save_options.revert_qdn', { {t('core:save_options.revert_qdn', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</LoadingButton> </LoadingButton>
</> </>
@ -457,8 +461,8 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
}} }}
> >
{' '} {' '}
{t('core:save_options.reset_pinned', { {t('core:question.reset_pinned', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
<Spacer height="10px" /> <Spacer height="10px" />
@ -468,7 +472,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
variant="contained" variant="contained"
> >
{t('core:save_options.revert_default', { {t('core:save_options.revert_default', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</LoadingButton> </LoadingButton>
</> </>
@ -491,8 +495,8 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
fontSize: '14px', fontSize: '14px',
}} }}
> >
{t('core:save_options.overwrite_changes', { {t('core:question.overwrite_changes', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
<Spacer height="10px" /> <Spacer height="10px" />
@ -514,7 +518,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
}} }}
> >
{t('core:save_options.overwrite_qdn', { {t('core:save_options.overwrite_qdn', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</LoadingButton> </LoadingButton>
</Box> </Box>
@ -534,7 +538,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
}} }}
> >
{t('core:save_options.no_pinned_changes', { {t('core:save_options.no_pinned_changes', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</Typography> </Typography>
</Box> </Box>
@ -591,7 +595,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
}} }}
> >
{t('core:action.import', { {t('core:action.import', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</ButtonBase> </ButtonBase>
@ -616,7 +620,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
}} }}
> >
{t('core:action.export', { {t('core:action.export', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
})} })}
</ButtonBase> </ButtonBase>
</Box> </Box>

View File

@ -23,10 +23,10 @@ const ThemeSelector = () => {
title={ title={
themeMode === 'dark' themeMode === 'dark'
? t('core:theme.light', { ? t('core:theme.light', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}) })
: t('core:theme.light', { : t('core:theme.light', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}) })
} }
> >

View File

@ -91,7 +91,7 @@ export const Tutorials = () => {
</DialogContent> </DialogContent>
<DialogActions> <DialogActions>
<Button variant="contained" onClick={handleClose}> <Button variant="contained" onClick={handleClose}>
{t('core:action.close', { postProcess: 'capitalize' })} {t('core:action.close', { postProcess: 'capitalizeFirst' })}
</Button> </Button>
</DialogActions> </DialogActions>
</Dialog> </Dialog>
@ -138,7 +138,7 @@ export const Tutorials = () => {
<DialogActions> <DialogActions>
<Button variant="contained" onClick={handleClose}> <Button variant="contained" onClick={handleClose}>
{t('core:action.close', { postProcess: 'capitalize' })} {t('core:action.close', { postProcess: 'capitalizeFirst' })}
</Button> </Button>
</DialogActions> </DialogActions>
</Dialog> </Dialog>

View File

@ -108,7 +108,7 @@ export const useHandleTutorials = () => {
multi: [ multi: [
{ {
title: t('tutorial:1_getting_started', { title: t('tutorial:1_getting_started', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
resource: { resource: {
name: 'a-test', name: 'a-test',
@ -119,7 +119,7 @@ export const useHandleTutorials = () => {
}, },
{ {
title: t('tutorial:2_overview', { title: t('tutorial:2_overview', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
resource: { resource: {
name: 'a-test', name: 'a-test',
@ -130,7 +130,7 @@ export const useHandleTutorials = () => {
}, },
{ {
title: t('tutorial:3_groups', { title: t('tutorial:3_groups', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
resource: { resource: {
name: 'a-test', name: 'a-test',
@ -141,7 +141,7 @@ export const useHandleTutorials = () => {
}, },
{ {
title: t('tutorial:4_obtain_qort', { title: t('tutorial:4_obtain_qort', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
resource: { resource: {
name: 'a-test', name: 'a-test',
@ -163,7 +163,7 @@ export const useHandleTutorials = () => {
multi: [ multi: [
{ {
title: t('tutorial:apps.dashboard', { title: t('tutorial:apps.dashboard', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
resource: { resource: {
name: 'a-test', name: 'a-test',
@ -174,7 +174,7 @@ export const useHandleTutorials = () => {
}, },
{ {
title: t('tutorial:apps.navigation', { title: t('tutorial:apps.navigation', {
postProcess: 'capitalize', postProcess: 'capitalizeFirst',
}), }),
resource: { resource: {
name: 'a-test', name: 'a-test',

View File

@ -2,9 +2,15 @@ import i18n from 'i18next';
import { initReactI18next } from 'react-i18next'; import { initReactI18next } from 'react-i18next';
import LanguageDetector from 'i18next-browser-languagedetector'; import LanguageDetector from 'i18next-browser-languagedetector';
const capitalize = { const capitalizeAll = {
type: 'postProcessor', type: 'postProcessor',
name: 'capitalize', name: 'capitalizeAll',
process: (value: string) => value.toUpperCase(),
};
const capitalizeFirst = {
type: 'postProcessor',
name: 'capitalizeFirst',
process: (value: string) => value.charAt(0).toUpperCase() + value.slice(1), process: (value: string) => value.charAt(0).toUpperCase() + value.slice(1),
}; };
@ -38,7 +44,8 @@ for (const path in modules) {
i18n i18n
.use(initReactI18next) .use(initReactI18next)
.use(LanguageDetector) .use(LanguageDetector)
.use(capitalize as any) .use(capitalizeAll as any)
.use(capitalizeFirst as any)
.init({ .init({
resources, resources,
fallbackLng: 'en', fallbackLng: 'en',

View File

@ -37,7 +37,6 @@
"your_accounts": "your saved accounts" "your_accounts": "your saved accounts"
} }
}, },
"name": "name",
"node": { "node": {
"choose": "choose custom node", "choose": "choose custom node",
"custom_many": "custom nodes", "custom_many": "custom nodes",

View File

@ -1,21 +1,30 @@
{ {
"action": { "action": {
"add": "add", "add": "add",
"add_custom_framework": "add custom framework",
"accept": "accept", "accept": "accept",
"access": "access",
"backup_account": "backup account", "backup_account": "backup account",
"backup_wallet": "backup wallet", "backup_wallet": "backup wallet",
"cancel": "cancel", "cancel": "cancel",
"cancel_invitation": "cancel invitation", "cancel_invitation": "cancel invitation",
"change": "change", "change": "change",
"change_file": "change file",
"change_language": "change language", "change_language": "change language",
"choose": "choose", "choose": "choose",
"choose_file": "choose file",
"close": "close", "close": "close",
"continue": "continue", "continue": "continue",
"continue_logout": "continue to logout", "continue_logout": "continue to logout",
"copy_link": "copy link",
"create_apps": "create apps",
"create_file": "create file",
"create_thread": "create thread", "create_thread": "create thread",
"choose_logo": "choose a logo",
"choose_name": "choose a name", "choose_name": "choose a name",
"decline": "decline", "decline": "decline",
"decrypt": "decrypt", "decrypt": "decrypt",
"download": "download",
"edit": "edit", "edit": "edit",
"enter_name": "enter a name", "enter_name": "enter a name",
"export": "export", "export": "export",
@ -29,21 +38,46 @@
"thread": "new thread" "thread": "new thread"
}, },
"notify": "notify", "notify": "notify",
"open": "open",
"pin": "pin",
"pin_app": "pin app",
"pin_from_dashboard": "pin from dashboard",
"post": "post", "post": "post",
"post_message": "post message", "post_message": "post message",
"publish": "publish", "publish": "publish",
"publish_app": "publish your app",
"register_name": "register name", "register_name": "register name",
"remove": "remove", "remove": "remove",
"return_apps_dashboard": "return to Apps Dashboard",
"save": "save", "save": "save",
"start_minting": "start minting" "search_apps": "search for apps",
"select_app_type": "select App Type",
"select_category": "select Category",
"select_name_app": "select Name/App",
"start_minting": "start minting",
"unpin": "unpin",
"unpin_app": "unpin app",
"unpin_from_dashboard": "unpin from dashboard",
"update": "update",
"update_app": "update your app"
}, },
"admin": "admin", "admin": "admin",
"all": "all",
"api": "API",
"app": "app",
"app_name": "app name",
"app_service_type": "app service type",
"apps_dashboard": "apps Dashboard",
"apps_official": "official Apps",
"category": "category",
"category_other": "categories",
"core": { "core": {
"block_height": "block height", "block_height": "block height",
"information": "core information", "information": "core information",
"peers": "connected peers", "peers": "connected peers",
"version": "core version" "version": "core version"
}, },
"domain": "domain",
"ui": { "ui": {
"version": "UI version" "version": "UI version"
}, },
@ -52,14 +86,18 @@
"one": "one" "one": "one"
}, },
"description": "description", "description": "description",
"devmode_apps": "dev Mode Apps",
"directory": "directory",
"downloading_qdn": "downloading from QDN", "downloading_qdn": "downloading from QDN",
"fee": { "fee": {
"payment": "payment fee", "payment": "payment fee",
"publish": "publish fee" "publish": "publish fee"
}, },
"general_settings": "general settings", "general_settings": "general settings",
"identifier": "identifier",
"last_height": "last height", "last_height": "last height",
"level": "level", "level": "level",
"library": "library",
"list": { "list": {
"invite": "invite list", "invite": "invite list",
"join_request": "join request list", "join_request": "join request list",
@ -71,21 +109,43 @@
"message": { "message": {
"error": { "error": {
"address_not_found": "your address was not found", "address_not_found": "your address was not found",
"app_need_name": "your app needs a name",
"file_too_large": "file {{ filename }} is too large. Max size allowed is {{ size }} MB.",
"generic": "an error occurred", "generic": "an error occurred",
"incorrect_password": "incorrect password", "incorrect_password": "incorrect password",
"invalid_zip": "invalid zip",
"minting_account_add": "unable to add minting account", "minting_account_add": "unable to add minting account",
"minting_account_remove": "unable to remove minting account", "minting_account_remove": "unable to remove minting account",
"missing_field": "missing: {{ field }}", "missing_fields": "missing: {{ fields }}",
"save_qdn": "unable to save to QDN" "navigation_timeout": "navigation timeout",
"publish_app": "unable to publish app",
"rating_option": "cannot find rating option",
"save_qdn": "unable to save to QDN",
"unable_encrypt_app": "unable to encrypt app. App not published'",
"unable_publish_app": "unable to publish app",
"unable_rate": "unable to rate"
}, },
"generic": { "generic": {
"devmode_local_node": "please use your local node for dev mode! Logout and use Local node.",
"name_available": "{{ name }} is available", "name_available": "{{ name }} is available",
"name_benefits": "benefits of a name", "name_benefits": "benefits of a name",
"name_checking": "checking if name already exists", "name_checking": "checking if name already exists",
"name_preview": "you need a name to use preview",
"name_publish": "you need a Qortal name to publish",
"name_rate": "you need a name to rate.",
"name_registration": "your balance is {{ balance }} QORT. A name registration requires a {{ fee }} QORT fee", "name_registration": "your balance is {{ balance }} QORT. A name registration requires a {{ fee }} QORT fee",
"name_unavailable": "{{ name }} is unavailable", "name_unavailable": "{{ name }} is unavailable",
"no_description": "no description",
"no_notifications": "no new notifications",
"no_results": "no results",
"one_app_per_name": "note: Currently, only one App and Website is allowed per Name.",
"publish_data": "publish data to Qortal: anything from apps to videos. Fully decentralized!", "publish_data": "publish data to Qortal: anything from apps to videos. Fully decentralized!",
"secure_ownership": "secure ownership of data published by your name. You can even sell your name, along with your data to a third party." "publishing": "publishing... Please wait.",
"rating": "rating for {{ service }} {{ name }}",
"secure_ownership": "secure ownership of data published by your name. You can even sell your name, along with your data to a third party.",
"select_file": "please select a file",
"select_image": "please select an image for a logo",
"select_zip": "select .zip file containing static content:"
}, },
"question": { "question": {
"new_user": "are you a new user?" "new_user": "are you a new user?"
@ -98,12 +158,17 @@
}, },
"success": { "success": {
"order_submitted": "your buy order was submitted", "order_submitted": "your buy order was submitted",
"publish_qdn": "successfully published to QDN", "published": "successfully published. Please wait a couple minutes for the network to propogate the changes.",
"published_qdn": "successfully published to QDN",
"rated_app": "successfully rated. Please wait a couple minutes for the network to propogate the changes.",
"request_read": "I have read this request", "request_read": "I have read this request",
"transfer": "the transfer was succesful!" "transfer": "the transfer was succesful!"
} }
}, },
"minting_status": "minting status", "minting_status": "minting status",
"name": "name",
"name_app": "name/App",
"none": "none",
"page": { "page": {
"last": "last", "last": "last",
"first": "first", "first": "first",
@ -111,26 +176,39 @@
"previous": "previous" "previous": "previous"
}, },
"payment_notification": "payment notification", "payment_notification": "payment notification",
"port": "port",
"price": "price", "price": "price",
"q_mail": "q-mail", "q_apps": {
"about": "about this Q-App",
"q_mail": "q-mail",
"q_sandbox": "q-Sandbox"
},
"question": {
"perform_transaction": "would you like to perform a {{action}} transaction?",
"provide_thread": "please provide a thread title",
"publish_app": "would you like to publish this app?",
"publish_qdn": "would you like to publish your settings to QDN (encrypted)?",
"overwrite_changes": "the app was unable to download your existing QDN-saved pinned apps. Would you like to overwrite those changes?",
"rate_app": "would you like to rate this app a rating of {{ rate }}?. It will create a POLL tx.",
"register_name": "would you like to register this name?",
"reset_pinned": "don't like your current local changes? Would you like to reset to the default pinned apps?",
"reset_qdn": "don't like your current local changes? Would you like to reset to your saved QDN pinned apps?"
},
"save_options": { "save_options": {
"no_pinned_changes": "you currently do not have any changes to your pinned apps", "no_pinned_changes": "you currently do not have any changes to your pinned apps",
"overwrite_changes": "the app was unable to download your existing QDN-saved pinned apps. Would you like to overwrite those changes?",
"overwrite_qdn": "overwrite to QDN", "overwrite_qdn": "overwrite to QDN",
"publish_qdn": "would you like to publish your settings to QDN (encrypted)?",
"qdn": "use QDN saving", "qdn": "use QDN saving",
"register_name": "you need a registered Qortal name to save your pinned apps to QDN.", "register_name": "you need a registered Qortal name to save your pinned apps to QDN.",
"reset_pinned": "don't like your current local changes? Would you like to reset to the default pinned apps?",
"reset_qdn": "don't like your current local changes? Would you like to reset to your saved QDN pinned apps?",
"revert_default": "revert to default", "revert_default": "revert to default",
"revert_qdn": "revert to QDN", "revert_qdn": "revert to QDN",
"save_qdn": "save to QDN", "save_qdn": "save to QDN",
"save": "save",
"settings": "you are using the export/import way of saving settings.", "settings": "you are using the export/import way of saving settings.",
"unsaved_changes": " you have unsaved changes to your pinned apps. Save them to QDN." "unsaved_changes": "you have unsaved changes to your pinned apps. Save them to QDN."
}, },
"server": "server",
"settings": "settings", "settings": "settings",
"supply": "supply", "supply": "supply",
"tags": "tags",
"theme": { "theme": {
"dark": "dark mode", "dark": "dark mode",
"light": "light mode" "light": "light mode"
@ -146,9 +224,11 @@
"title": "title", "title": "title",
"tutorial": "tutorial", "tutorial": "tutorial",
"user_lookup": "user lookup", "user_lookup": "user lookup",
"zip": "zip",
"wallet": { "wallet": {
"wallet": "wallet", "wallet": "wallet",
"wallet_other": "wallets" "wallet_other": "wallets"
}, },
"website": "website",
"welcome": "welcome" "welcome": "welcome"
} }

View File

@ -78,6 +78,7 @@
"no_selection": "no group selected", "no_selection": "no group selected",
"not_part_group": "you are not part of the encrypted group of members. Wait until an admin re-encrypts the keys.", "not_part_group": "you are not part of the encrypted group of members. Wait until an admin re-encrypts the keys.",
"only_encrypted": "only unencrypted messages will be displayed.", "only_encrypted": "only unencrypted messages will be displayed.",
"only_private_groups": "only private groups will be shown",
"private_key_copied": "private key copied", "private_key_copied": "private key copied",
"provide_message": "please provide a first message to the thread", "provide_message": "please provide a first message to the thread",
"secure_place": "keep your private key in a secure place. Do not share!", "secure_place": "keep your private key in a secure place. Do not share!",
@ -132,10 +133,5 @@
"user_joined": "user successfully joined!" "user_joined": "user successfully joined!"
} }
}, },
"question": {
"perform_transaction": "would you like to perform a {{action}} transaction?",
"provide_thread": "please provide a thread title",
"register_name": "would you like to register this name?"
},
"thread_posts": "new thread posts" "thread_posts": "new thread posts"
} }