Message migration WIP

This commit is contained in:
Paulo Gustavo Veiga 2022-10-22 17:49:46 -07:00
parent 52f278e65a
commit fac343187f
11 changed files with 191 additions and 104 deletions

View File

@ -1,26 +1,77 @@
{ {
"action.accept": {
"defaultMessage": "Accept"
},
"action.cancel": {
"defaultMessage": "Cancel"
},
"appbar.back-to-map-list": {
"defaultMessage": "Back to maps list"
},
"appbar.button-signup": {
"defaultMessage": "Sign Up"
},
"appbar.shared-button": {
"defaultMessage": "Share"
},
"appbar.tooltip-export": {
"defaultMessage": "Export"
},
"appbar.tooltip-history": {
"defaultMessage": "Changes History"
},
"appbar.tooltip-info": {
"defaultMessage": "Information"
},
"appbar.tooltip-print": {
"defaultMessage": "Print"
},
"appbar.tooltip-publish": {
"defaultMessage": "Publish"
},
"appbar.tooltip-redo": {
"defaultMessage": "Redo"
},
"appbar.tooltip-save": {
"defaultMessage": "Save"
},
"appbar.tooltip-shared": {
"defaultMessage": "Share for Collaboration"
},
"appbar.tooltip-signup": {
"defaultMessage": "Sign Up"
},
"appbar.tooltip-starred": {
"defaultMessage": "Starred"
},
"appbar.tooltip-undo": {
"defaultMessage": "Undo"
},
"editor.edit-description-mobile": {
"defaultMessage": "Limited mindmap edition capabilities are supported in Mobile devices. Use Desktop browser for full editor capabilities."
},
"editor.edit-mobile": {
"defaultMessage": "Note for mobile devices."
},
"editor.try-welcome": { "editor.try-welcome": {
"defaultMessage": "This edition space showcases some of the mindmap editor capabilities!" "defaultMessage": "This edition space showcases some of the mindmap editor capabilities!"
}, },
"editor.try-welcome-description": { "editor.try-welcome-description": {
"defaultMessage": "Sign Up to start creating, sharing and publishing unlimited number of mindmaps for free." "defaultMessage": "Sign Up to start creating, sharing and publishing unlimited number of mindmaps for free."
}, },
"editor.try-welcome-mobile": {
"defaultMessage": "This edition space showcases some of the mindmap capabilities!"
},
"editor.try-welcome-description-mobile": { "editor.try-welcome-description-mobile": {
"defaultMessage": "Sign Up to start creating, sharing and publishing unlimited number of mindmaps for free. Limited mindmap edition capabilties are supported in Mobile devices. Use Desktop browser for full editor capabilies." "defaultMessage": "Sign Up to start creating, sharing and publishing unlimited number of mindmaps for free. Limited mindmap edition capabilties are supported in Mobile devices. Use Desktop browser for full editor capabilies."
}, },
"editor.edit-mobile": { "editor.try-welcome-mobile": {
"defaultMessage": "Note for mobile devices." "defaultMessage": "This edition space showcases some of the mindmap editor capabilities!"
}, },
"editor.edit-description-mobile": { "link.help_text": {
"defaultMessage": "Limited mindmap edition capabilities are supported in Mobile devices. Use Desktop browser for full editor capabilities." "defaultMessage": "Address is not valid"
}, },
"login.signup": { "link.placeholder": {
"defaultMessage": "Sign Up" "defaultMessage": "https://www.example.com"
}, },
"action.share": { "note.label": {
"defaultMessage": "Share" "defaultMessage": "Note"
} }
} }

View File

@ -9,7 +9,7 @@
"test:integration": "start-server-and-test 'yarn playground' http-get://localhost:8081 'yarn cy:run'", "test:integration": "start-server-and-test 'yarn playground' http-get://localhost:8081 'yarn cy:run'",
"test": "yarn test:integration", "test": "yarn test:integration",
"test:unit": "jest ./test/unit/* --detectOpenHandles", "test:unit": "jest ./test/unit/* --detectOpenHandles",
"i18n:extract": "formatjs extract 'src/**/*.ts*' --ignore 'src/@types/**/*' --out-file lang/es.json", "i18n:extract": "formatjs extract 'src/**/*.ts*' --ignore 'src/@types/**/*' --out-file lang/en.json",
"i18n:compile": "for lang in {'es','en','fr','de','zh','ru'};do formatjs compile lang/${lang}.json --ast --out-file src/compiled-lang/${lang}.json;done" "i18n:compile": "for lang in {'es','en','fr','de','zh','ru'};do formatjs compile lang/${lang}.json --ast --out-file src/compiled-lang/${lang}.json;done"
}, },
"repository": "http://www.wisemapping.com", "repository": "http://www.wisemapping.com",

View File

@ -18,10 +18,10 @@
import Box from '@mui/material/Box'; import Box from '@mui/material/Box';
import Button from '@mui/material/Button'; import Button from '@mui/material/Button';
import IconButton from '@mui/material/IconButton'; import IconButton from '@mui/material/IconButton';
import { $msg } from '@wisemapping/mindplot';
import React from 'react'; import React from 'react';
import NodeProperty from '../../../../classes/model/node-property'; import NodeProperty from '../../../../classes/model/node-property';
import DeleteOutlineOutlinedIcon from '@mui/icons-material/DeleteOutlineOutlined'; import DeleteOutlineOutlinedIcon from '@mui/icons-material/DeleteOutlineOutlined';
import { FormattedMessage } from 'react-intl';
const SaveAndDelete = (props: { const SaveAndDelete = (props: {
model: NodeProperty; model: NodeProperty;
@ -31,11 +31,11 @@ const SaveAndDelete = (props: {
return ( return (
<Box component="span"> <Box component="span">
<Button color="primary" variant="outlined" onClick={props.submitHandler} sx={{ mr: 1 }}> <Button color="primary" variant="outlined" onClick={props.submitHandler} sx={{ mr: 1 }}>
{$msg('ACCEPT')} <FormattedMessage id="action.accept" defaultMessage="Accept" />
</Button> </Button>
<Button color="primary" variant="contained" onClick={props.closeModal}> <Button color="primary" variant="contained" onClick={props.closeModal}>
{$msg('CANCEL')} <FormattedMessage id="action.cancel" defaultMessage="Cancel" />
</Button> </Button>
{props.model.getValue() && props.model.getValue().trim() !== '' && ( {props.model.getValue() && props.model.getValue().trim() !== '' && (

View File

@ -16,7 +16,6 @@
* limitations under the License. * limitations under the License.
*/ */
import { useState } from 'react'; import { useState } from 'react';
import { $msg } from '@wisemapping/mindplot';
import NodeProperty from '../../../../classes/model/node-property'; import NodeProperty from '../../../../classes/model/node-property';
import Box from '@mui/material/Box'; import Box from '@mui/material/Box';
import React from 'react'; import React from 'react';
@ -25,16 +24,15 @@ import Link from '@mui/material/Link';
import IconButton from '@mui/material/IconButton'; import IconButton from '@mui/material/IconButton';
import SaveAndDelete from '../save-and-delete'; import SaveAndDelete from '../save-and-delete';
import OpenInNewOutlinedIcon from '@mui/icons-material/OpenInNewOutlined'; import OpenInNewOutlinedIcon from '@mui/icons-material/OpenInNewOutlined';
import { useIntl } from 'react-intl';
/** /**
* Url form for toolbar and node contextual editor * Url form for toolbar and node contextual editor
*/ */
const TopicLink = (props: { closeModal: () => void; urlModel: NodeProperty }) => { const TopicLink = (props: { closeModal: () => void; urlModel: NodeProperty }) => {
const [url, setUrl] = useState(props.urlModel.getValue()); const [url, setUrl] = useState(props.urlModel.getValue());
const intl = useIntl();
/**
* if url is valid set model value and calls closeModal
*/
const submitHandler = () => { const submitHandler = () => {
if (checkURL(url)) { if (checkURL(url)) {
props.closeModal(); props.closeModal();
@ -62,8 +60,15 @@ const TopicLink = (props: { closeModal: () => void; urlModel: NodeProperty }) =>
<Input <Input
autoFocus autoFocus
error={!isValidUrl} error={!isValidUrl}
helperText={isValidUrl ? '' : $msg('URL_ERROR')} helperText={
placeholder={$msg('PASTE_URL_HERE')} isValidUrl
? ''
: intl.formatMessage({ id: 'link.help_text', defaultMessage: 'Address is not valid' })
}
placeholder={intl.formatMessage({
id: 'link.placeholder',
defaultMessage: 'https://www.example.com',
})}
label="URL" label="URL"
value={url} value={url}
onChange={(event) => setUrl(event.target.value)} onChange={(event) => setUrl(event.target.value)}

View File

@ -16,17 +16,18 @@
* limitations under the License. * limitations under the License.
*/ */
import Box from '@mui/material/Box'; import Box from '@mui/material/Box';
import { $msg } from '@wisemapping/mindplot';
import React, { useState } from 'react'; import React, { useState } from 'react';
import NodeProperty from '../../../../classes/model/node-property'; import NodeProperty from '../../../../classes/model/node-property';
import Input from '../../input'; import Input from '../../input';
import SaveAndDelete from '../save-and-delete'; import SaveAndDelete from '../save-and-delete';
import { useIntl } from 'react-intl';
/** /**
* Note form for toolbar and node contextual editor * Note form for toolbar and node contextual editor
*/ */
const TopicNote = (props: { closeModal: () => void; noteModel: NodeProperty | null }) => { const TopicNote = (props: { closeModal: () => void; noteModel: NodeProperty | null }) => {
const [note, setNote] = useState(props.noteModel.getValue()); const [note, setNote] = useState(props.noteModel.getValue());
const intl = useIntl();
const submitHandler = () => { const submitHandler = () => {
props.closeModal(); props.closeModal();
@ -38,7 +39,7 @@ const TopicNote = (props: { closeModal: () => void; noteModel: NodeProperty | nu
<Input <Input
autoFocus autoFocus
multiline multiline
label={$msg('NOTE')} label={intl.formatMessage({ id: 'note.label', defaultMessage: 'Note' })}
variant="outlined" variant="outlined"
fullWidth fullWidth
rows={12} rows={12}

View File

@ -34,13 +34,13 @@ import CloudUploadOutlinedIcon from '@mui/icons-material/CloudUploadOutlined';
import HelpOutlineOutlinedIcon from '@mui/icons-material/InfoOutlined'; import HelpOutlineOutlinedIcon from '@mui/icons-material/InfoOutlined';
import ArrowBackIosNewOutlinedIcon from '@mui/icons-material/ArrowBackIosNewOutlined'; import ArrowBackIosNewOutlinedIcon from '@mui/icons-material/ArrowBackIosNewOutlined';
import Typography from '@mui/material/Typography'; import Typography from '@mui/material/Typography';
import { $msg } from '@wisemapping/mindplot';
import UndoAndRedo from '../action-widget/button/undo-and-redo'; import UndoAndRedo from '../action-widget/button/undo-and-redo';
import Button from '@mui/material/Button'; import Button from '@mui/material/Button';
import LogoTextBlackSvg from '../../../images/logo-text-black.svg'; import LogoTextBlackSvg from '../../../images/logo-text-black.svg';
import IconButton from '@mui/material/IconButton'; import IconButton from '@mui/material/IconButton';
import { ToolbarActionType } from '../toolbar/ToolbarActionType'; import { ToolbarActionType } from '../toolbar/ToolbarActionType';
import MapInfo from '../../classes/model/map-info'; import MapInfo from '../../classes/model/map-info';
import { useIntl } from 'react-intl';
interface AppBarProps { interface AppBarProps {
model: Editor; model: Editor;
@ -53,8 +53,14 @@ const appBarDivisor = {
render: () => <Typography component="div" sx={{ flexGrow: 1 }} />, render: () => <Typography component="div" sx={{ flexGrow: 1 }} />,
}; };
const keyTooltip = (msg: string, key: string): string => {
const isMac = window.navigator.platform.toUpperCase().indexOf('MAC') >= 0;
return `${msg} (${isMac ? '⌘' : 'Ctrl'} + ${key})`;
};
const AppBar = ({ model, mapInfo, capability, onAction, accountConfig }: AppBarProps) => { const AppBar = ({ model, mapInfo, capability, onAction, accountConfig }: AppBarProps) => {
const [isStarred, setStarred] = useState<undefined | boolean>(undefined); const [isStarred, setStarred] = useState<undefined | boolean>(undefined);
const intl = useIntl();
const handleStarredOnClick = () => { const handleStarredOnClick = () => {
const newStatus = !isStarred; const newStatus = !isStarred;
@ -70,11 +76,13 @@ const AppBar = ({ model, mapInfo, capability, onAction, accountConfig }: AppBarP
}); });
}, []); }, []);
console.log(``);
const config: ActionConfig[] = [ const config: ActionConfig[] = [
{ {
icon: <ArrowBackIosNewOutlinedIcon />, icon: <ArrowBackIosNewOutlinedIcon />,
tooltip: $msg('BACK_TO_MAP_LIST'), tooltip: intl.formatMessage({
id: 'appbar.back-to-map-list',
defaultMessage: 'Back to maps list',
}),
onClick: () => history.back(), onClick: () => history.back(),
}, },
{ {
@ -100,7 +108,10 @@ const AppBar = ({ model, mapInfo, capability, onAction, accountConfig }: AppBarP
<UndoAndRedo <UndoAndRedo
configuration={{ configuration={{
icon: <UndoOutlinedIcon />, icon: <UndoOutlinedIcon />,
tooltip: $msg('UNDO') + ' (' + $msg('CTRL') + ' + Z)', tooltip: keyTooltip(
intl.formatMessage({ id: 'appbar.tooltip-undo', defaultMessage: 'Undo' }),
'Z',
),
onClick: () => designer.undo(), onClick: () => designer.undo(),
}} }}
disabledCondition={(event) => event.undoSteps > 0} disabledCondition={(event) => event.undoSteps > 0}
@ -114,7 +125,10 @@ const AppBar = ({ model, mapInfo, capability, onAction, accountConfig }: AppBarP
<UndoAndRedo <UndoAndRedo
configuration={{ configuration={{
icon: <RedoOutlinedIcon />, icon: <RedoOutlinedIcon />,
tooltip: $msg('REDO') + ' (' + $msg('CTRL') + ' + Shift + Z)', tooltip: keyTooltip(
intl.formatMessage({ id: 'appbar.tooltip-redo', defaultMessage: 'Redo' }),
'Shift + Z',
),
onClick: () => designer.redo(), onClick: () => designer.redo(),
}} }}
disabledCondition={(event) => event.redoSteps > 0} disabledCondition={(event) => event.redoSteps > 0}
@ -126,23 +140,31 @@ const AppBar = ({ model, mapInfo, capability, onAction, accountConfig }: AppBarP
null, null,
{ {
icon: <SaveOutlinedIcon />, icon: <SaveOutlinedIcon />,
tooltip: $msg('SAVE') + ' (' + $msg('CTRL') + ' + S)',
onClick: () => { onClick: () => {
model.save(true); model.save(true);
}, },
tooltip: keyTooltip(
intl.formatMessage({ id: 'appbar.tooltip-save', defaultMessage: 'Save' }),
'S',
),
visible: !capability.isHidden('save'), visible: !capability.isHidden('save'),
disabled: () => !model?.isMapLoadded(), disabled: () => !model?.isMapLoadded(),
}, },
{ {
icon: <RestoreOutlinedIcon />, icon: <RestoreOutlinedIcon />,
tooltip: $msg('HISTORY'),
onClick: () => onAction('history'), onClick: () => onAction('history'),
tooltip: intl.formatMessage({
id: 'appbar.tooltip-history',
defaultMessage: 'Changes History',
}),
visible: !capability.isHidden('history'), visible: !capability.isHidden('history'),
}, },
appBarDivisor, appBarDivisor,
{ {
tooltip: $msg('STARRED'),
render: () => ( render: () => (
<Tooltip
title={intl.formatMessage({ id: 'appbar.tooltip-starred', defaultMessage: 'Starred' })}
>
<IconButton size="small" onClick={handleStarredOnClick}> <IconButton size="small" onClick={handleStarredOnClick}>
<StarRateRoundedIcon <StarRateRoundedIcon
color="action" color="action"
@ -151,40 +173,47 @@ const AppBar = ({ model, mapInfo, capability, onAction, accountConfig }: AppBarP
}} }}
/> />
</IconButton> </IconButton>
</Tooltip>
), ),
visible: !capability.isHidden('starred'), visible: !capability.isHidden('starred'),
disabled: () => isStarred !== undefined, disabled: () => isStarred !== undefined,
}, },
{ {
icon: <FileDownloadOutlinedIcon />, icon: <FileDownloadOutlinedIcon />,
tooltip: $msg('EXPORT'),
onClick: () => onAction('export'), onClick: () => onAction('export'),
tooltip: intl.formatMessage({ id: 'appbar.tooltip-export', defaultMessage: 'Export' }),
visible: !capability.isHidden('export'), visible: !capability.isHidden('export'),
}, },
{ {
icon: <PrintOutlinedIcon />, icon: <PrintOutlinedIcon />,
tooltip: $msg('PRINT'),
onClick: () => onAction('print'), onClick: () => onAction('print'),
tooltip: intl.formatMessage({ id: 'appbar.tooltip-print', defaultMessage: 'Print' }),
visible: !capability.isHidden('print'), visible: !capability.isHidden('print'),
}, },
{ {
icon: <HelpOutlineOutlinedIcon />, icon: <HelpOutlineOutlinedIcon />,
onClick: () => onAction('info'), onClick: () => onAction('info'),
tooltip: $msg('MAP_INFO'), tooltip: intl.formatMessage({ id: 'appbar.tooltip-info', defaultMessage: 'Information' }),
visible: !capability.isHidden('info'), visible: !capability.isHidden('info'),
}, },
{ {
icon: <CloudUploadOutlinedIcon />, icon: <CloudUploadOutlinedIcon />,
onClick: () => onAction('publish'), onClick: () => onAction('publish'),
tooltip: $msg('PUBLISH'), tooltip: intl.formatMessage({ id: 'appbar.tooltip-publish', defaultMessage: 'Publish' }),
visible: !capability.isHidden('publish'), visible: !capability.isHidden('publish'),
}, },
{ {
render: () => ( render: () => (
<Tooltip
title={intl.formatMessage({
id: 'appbar.tooltip-shared',
defaultMessage: 'Share for Collaboration',
})}
>
<Button variant="contained" onClick={() => onAction('share')}> <Button variant="contained" onClick={() => onAction('share')}>
{$msg('COLLABORATE')} {intl.formatMessage({ id: 'appbar.shared-button', defaultMessage: 'Share' })}
</Button> </Button>
</Tooltip>
), ),
visible: !capability.isHidden('share'), visible: !capability.isHidden('share'),
}, },
@ -194,9 +223,13 @@ const AppBar = ({ model, mapInfo, capability, onAction, accountConfig }: AppBarP
}, },
{ {
render: () => ( render: () => (
<Tooltip
title={intl.formatMessage({ id: 'appbar.tooltip-signup', defaultMessage: 'Sign Up' })}
>
<Button variant="contained" onClick={() => (window.location.href = '/c/registration')}> <Button variant="contained" onClick={() => (window.location.href = '/c/registration')}>
{$msg('SIGN_UP')} {intl.formatMessage({ id: 'appbar.button-signup', defaultMessage: 'Sign Up' })}
</Button> </Button>
</Tooltip>
), ),
visible: !capability.isHidden('sign-up'), visible: !capability.isHidden('sign-up'),
}, },

View File

@ -132,7 +132,7 @@ export const ToolbarSubmenu = (props: {
key={i} key={i}
configuration={o as ActionConfig} configuration={o as ActionConfig}
elevation={props.elevation + 3} elevation={props.elevation + 3}
></ToolbarMenuItem> />
); );
} else { } else {
return <span key={i}>{o.render(() => setOpen(false))}</span>; return <span key={i}>{o.render(() => setOpen(false))}</span>;
@ -180,7 +180,7 @@ export const ToolbarMenuItem = (props: {
configuration={props.configuration} configuration={props.configuration}
vertical={props.vertical} vertical={props.vertical}
elevation={props.elevation || 0} elevation={props.elevation || 0}
></ToolbarSubmenu> />
); );
else return null; else return null;
} }

View File

@ -31,20 +31,41 @@ const WarningDialog = ({ capability, message }: FooterPropsType): React.ReactEle
const intl = useIntl(); const intl = useIntl();
const [dialogClass, setDialogClass] = useState('tryInfoPanel'); const [dialogClass, setDialogClass] = useState('tryInfoPanel');
var titleKey = undefined; let msgExt, msg: string;
var descriptionKey = undefined;
if (capability.mode !== 'viewonly' && capability.mode !== 'showcase' && capability.isMobile) { if (capability.mode !== 'viewonly' && capability.mode !== 'showcase' && capability.isMobile) {
titleKey = 'editor.edit-mobile'; msg = intl.formatMessage({
descriptionKey = 'editor.edit-description-mobile'; id: 'editor.edit-mobile',
defaultMessage: 'Note for mobile devices.',
});
msgExt = intl.formatMessage({
id: 'editor.edit-description-mobile',
defaultMessage:
'Limited mindmap edition capabilities are supported in Mobile devices. Use Desktop browser for full editor capabilities.',
});
} }
if (capability.mode === 'showcase' && capability.isMobile) { if (capability.mode === 'showcase' && capability.isMobile) {
titleKey = 'editor.try-welcome-mobile'; msg = intl.formatMessage({
descriptionKey = 'editor.edit-description-mobile'; id: 'editor.try-welcome-mobile',
defaultMessage: 'This edition space showcases some of the mindmap editor capabilities!',
});
msgExt = intl.formatMessage({
id: 'editor.try-welcome-description-mobile',
defaultMessage:
'Sign Up to start creating, sharing and publishing unlimited number of mindmaps for free. Limited mindmap edition capabilties are supported in Mobile devices. Use Desktop browser for full editor capabilies.',
});
} }
if (capability.mode === 'showcase' && !capability.isMobile) { if (capability.mode === 'showcase' && !capability.isMobile) {
titleKey = 'editor.try-welcome'; msg = intl.formatMessage({
descriptionKey = 'editor.try-welcome-description'; id: 'editor.try-welcome',
defaultMessage: 'This edition space showcases some of the mindmap editor capabilities!',
});
msgExt = intl.formatMessage({
id: 'editor.try-welcome-description',
defaultMessage:
'Sign Up to start creating, sharing and publishing unlimited number of mindmaps for free.',
});
} }
// if the toolbar is present, the alert must not overlap // if the toolbar is present, the alert must not overlap
@ -53,7 +74,7 @@ const WarningDialog = ({ capability, message }: FooterPropsType): React.ReactEle
return ( return (
<> <>
<Notifier id="headerNotifier"></Notifier> <Notifier id="headerNotifier"></Notifier>
{(titleKey || message) && ( {(msgExt || message) && (
<div className={dialogClass + ' ' + alertTopAdjustmentStyle}> <div className={dialogClass + ' ' + alertTopAdjustmentStyle}>
<div className="tryInfoPanelInner"> <div className="tryInfoPanelInner">
<div className="closeButton"> <div className="closeButton">
@ -67,11 +88,7 @@ const WarningDialog = ({ capability, message }: FooterPropsType): React.ReactEle
<img src={CloseDialogSvg} /> <img src={CloseDialogSvg} />
</button> </button>
</div> </div>
{titleKey && ( {msgExt && <p>{`${msg} ${msgExt}`}</p>}
<p>
{intl.formatMessage({ id: titleKey })} {intl.formatMessage({ id: descriptionKey })}
</p>
)}
{message && <p>{message}</p>} {message && <p>{message}</p>}
</div> </div>
</div> </div>

View File

@ -1,4 +1,7 @@
const EN = { const EN = {
SAVING: 'Saving ...',
SAVE_COMPLETE: 'Save Complete',
ZOOM_IN: 'Zoom In', ZOOM_IN: 'Zoom In',
ZOOM_OUT: 'Zoom Out', ZOOM_OUT: 'Zoom Out',
TOPIC_SHAPE: 'Topic Shape', TOPIC_SHAPE: 'Topic Shape',
@ -18,22 +21,10 @@ const EN = {
FONT_SIZE: 'Text Size', FONT_SIZE: 'Text Size',
FONT_BOLD: 'Text Bold', FONT_BOLD: 'Text Bold',
FONT_ITALIC: 'Text Italic', FONT_ITALIC: 'Text Italic',
UNDO: 'Undo',
REDO: 'Redo',
INSERT: 'Insert', INSERT: 'Insert',
SAVE: 'Save',
NOTE: 'Note',
ADD_TOPIC: 'Add Topic', ADD_TOPIC: 'Add Topic',
LOADING: 'Loading ...', LOADING: 'Loading ...',
EXPORT: 'Export',
PRINT: 'Print',
PUBLISH: 'Publish',
COLLABORATE: 'Share',
HISTORY: 'History',
DISCARD_CHANGES: 'Discard Changes',
FONT_COLOR: 'Text Color', FONT_COLOR: 'Text Color',
SAVING: 'Saving ...',
SAVE_COMPLETE: 'Save Complete',
ZOOM_IN_ERROR: 'Zoom too high.', ZOOM_IN_ERROR: 'Zoom too high.',
ZOOM_ERROR: 'No more zoom can be applied.', ZOOM_ERROR: 'No more zoom can be applied.',
ONLY_ONE_TOPIC_MUST_BE_SELECTED: 'Could not create a topic. Only one topic must be selected.', ONLY_ONE_TOPIC_MUST_BE_SELECTED: 'Could not create a topic. Only one topic must be selected.',
@ -53,13 +44,8 @@ const EN = {
RELATIONSHIP_COULD_NOT_BE_CREATED: 'Relationship could not be created. A parent relationship topic must be selected first.', RELATIONSHIP_COULD_NOT_BE_CREATED: 'Relationship could not be created. A parent relationship topic must be selected first.',
SELECTION_COPIED_TO_CLIPBOARD: 'Topics copied to the clipboard', SELECTION_COPIED_TO_CLIPBOARD: 'Topics copied to the clipboard',
WRITE_YOUR_TEXT_HERE: 'Write your note here ...', WRITE_YOUR_TEXT_HERE: 'Write your note here ...',
REMOVE: 'Remove',
ACCEPT: 'Accept',
CANCEL: 'Cancel',
LINK: 'Link', LINK: 'Link',
OPEN_LINK: 'Open URL',
SESSION_EXPIRED: 'Your session has expired, please log-in again.', SESSION_EXPIRED: 'Your session has expired, please log-in again.',
URL_ERROR: 'URL not valid',
ACTION: 'Action', ACTION: 'Action',
CREATE_SIBLING_TOPIC: 'Create Sibling Topic', CREATE_SIBLING_TOPIC: 'Create Sibling Topic',
CREATE_CHILD_TOPIC: 'Create Child Topic', CREATE_CHILD_TOPIC: 'Create Child Topic',
@ -81,9 +67,7 @@ const EN = {
KEYBOARD_SHORTCUTS_MSG: 'Keyboard shortcuts can help you save time by allowing you to never take your hands off the keyboard to use the mouse.', KEYBOARD_SHORTCUTS_MSG: 'Keyboard shortcuts can help you save time by allowing you to never take your hands off the keyboard to use the mouse.',
COPY_AND_PASTE_TOPICS: 'Copy and Paste Topics', COPY_AND_PASTE_TOPICS: 'Copy and Paste Topics',
MULTIPLE_LINES: 'Add multiple text lines', MULTIPLE_LINES: 'Add multiple text lines',
BACK_TO_MAP_LIST: 'Back to Maps List',
KEYBOARD_SHOTCUTS: 'Keyboard Shorcuts', KEYBOARD_SHOTCUTS: 'Keyboard Shorcuts',
PASTE_URL_HERE: 'Paste your url address here:',
CTRL: 'Ctrl', CTRL: 'Ctrl',
SPACE_BAR: 'Space Bar', SPACE_BAR: 'Space Bar',
K_INSERT: 'Insert', K_INSERT: 'Insert',
@ -91,11 +75,9 @@ const EN = {
K_DELETE: 'Delete', K_DELETE: 'Delete',
BACKSPACE: 'Backspace', BACKSPACE: 'Backspace',
CENTER_POSITION: 'Zoom To Fit', CENTER_POSITION: 'Zoom To Fit',
MAP_INFO: 'Information',
FONT_FORMAT: 'Font Format', FONT_FORMAT: 'Font Format',
FONT_INCREASE: 'Font Size Increase', FONT_INCREASE: 'Font Size Increase',
FONT_DECREASE: 'Font Size Decrease', FONT_DECREASE: 'Font Size Decrease',
SIGN_UP: 'Sign Up',
}; };
export default EN; export default EN;

View File

@ -84,7 +84,6 @@ const EN = {
BACK_TO_MAP_LIST: 'Back to Maps List', BACK_TO_MAP_LIST: 'Back to Maps List',
KEYBOARD_SHOTCUTS: 'Keyboard Shorcuts', KEYBOARD_SHOTCUTS: 'Keyboard Shorcuts',
PASTE_URL_HERE: 'Вставьте нужный URL-адрес здесь:', PASTE_URL_HERE: 'Вставьте нужный URL-адрес здесь:',
CTRL: 'Ctrl',
SPACE_BAR: 'Space Bar', SPACE_BAR: 'Space Bar',
K_INSERT: 'Insert', K_INSERT: 'Insert',
MOUSE_CLICK: 'Mouse Click', MOUSE_CLICK: 'Mouse Click',

View File

@ -84,7 +84,6 @@ const ZH = {
BACK_TO_MAP_LIST: '回到脑图列表', BACK_TO_MAP_LIST: '回到脑图列表',
KEYBOARD_SHOTCUTS: '键盘快捷键', KEYBOARD_SHOTCUTS: '键盘快捷键',
PASTE_URL_HERE: '在此处粘贴所需的 URL 地址:', PASTE_URL_HERE: '在此处粘贴所需的 URL 地址:',
CTRL: 'Ctrl',
SPACE_BAR: 'Space Bar', SPACE_BAR: 'Space Bar',
K_INSERT: 'Insert', K_INSERT: 'Insert',
MOUSE_CLICK: 'Mouse Click', MOUSE_CLICK: 'Mouse Click',