fill in the gaps on un-translated content with en

pull/3171/head
drafish 2 years ago
parent e11818d4e5
commit e0dbff763d
  1. 7
      apps/remix-ide/src/app/tabs/locales/zh/index.js
  2. 4
      libs/remix-ui/debugger-ui/src/lib/debugger-ui.tsx
  3. 6
      libs/remix-ui/debugger-ui/src/lib/tx-browser/tx-browser.tsx
  4. 34
      libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx
  5. 12
      libs/remix-ui/home-tab/src/lib/components/homeTabFeaturedPlugins.tsx
  6. 10
      libs/remix-ui/home-tab/src/lib/components/homeTabFile.tsx
  7. 14
      libs/remix-ui/home-tab/src/lib/components/homeTabGetStarted.tsx
  8. 20
      libs/remix-ui/home-tab/src/lib/components/homeTabLearn.tsx
  9. 14
      libs/remix-ui/home-tab/src/lib/components/homeTabScamAlert.tsx
  10. 22
      libs/remix-ui/home-tab/src/lib/components/homeTabTitle.tsx
  11. 2
      libs/remix-ui/locale-module/src/lib/remix-ui-locale-module.tsx
  12. 8
      libs/remix-ui/panel/src/lib/plugins/panel-header.tsx
  13. 4
      libs/remix-ui/plugin-manager/src/lib/components/ActivePluginCardContainer.tsx
  14. 4
      libs/remix-ui/plugin-manager/src/lib/components/InactivePluginCardContainer.tsx
  15. 34
      libs/remix-ui/plugin-manager/src/lib/components/LocalPluginForm.tsx
  16. 2
      libs/remix-ui/plugin-manager/src/lib/components/rootView.tsx
  17. 12
      libs/remix-ui/run-tab/src/lib/components/account.tsx
  18. 14
      libs/remix-ui/run-tab/src/lib/components/contractDropdownUI.tsx
  19. 2
      libs/remix-ui/run-tab/src/lib/components/deployButton.tsx
  20. 4
      libs/remix-ui/run-tab/src/lib/components/environment.tsx
  21. 2
      libs/remix-ui/run-tab/src/lib/components/gasPrice.tsx
  22. 6
      libs/remix-ui/run-tab/src/lib/components/instanceContainerUI.tsx
  23. 2
      libs/remix-ui/run-tab/src/lib/components/recorderCardUI.tsx
  24. 4
      libs/remix-ui/run-tab/src/lib/components/value.tsx
  25. 4
      libs/remix-ui/search/src/lib/components/Exclude.tsx
  26. 4
      libs/remix-ui/search/src/lib/components/Find.tsx
  27. 4
      libs/remix-ui/search/src/lib/components/Include.tsx
  28. 2
      libs/remix-ui/search/src/lib/components/OverWriteCheck.tsx
  29. 2
      libs/remix-ui/search/src/lib/components/Replace.tsx
  30. 2
      libs/remix-ui/search/src/lib/components/results/ResultItem.tsx
  31. 24
      libs/remix-ui/settings/src/lib/constants.ts
  32. 12
      libs/remix-ui/settings/src/lib/etherscan-settings.tsx
  33. 12
      libs/remix-ui/settings/src/lib/github-settings.tsx
  34. 32
      libs/remix-ui/settings/src/lib/remix-ui-settings.tsx
  35. 39
      libs/remix-ui/solidity-compiler/src/lib/compiler-container.tsx
  36. 10
      libs/remix-ui/solidity-compiler/src/lib/contract-selection.tsx
  37. 6
      libs/remix-ui/terminal/src/lib/remix-ui-terminal.tsx
  38. 20
      libs/remix-ui/terminal/src/lib/terminalWelcome.tsx
  39. 2
      libs/remix-ui/theme-module/src/lib/remix-ui-theme-module.tsx
  40. 44
      libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx

@ -8,8 +8,11 @@ import settingsJson from './settings.json';
import solidityJson from './solidity.json';
import terminalJson from './terminal.json';
import udappJson from './udapp.json';
import enJson from '../en';
export default {
// There may have some un-translated content. Always fill in the gaps with EN JSON.
// No need for a defaultMessage prop when render a FormattedMessage component.
export default Object.assign({}, enJson, {
...debuggerJson,
...filePanelJson,
...homeJson,
@ -20,4 +23,4 @@ export default {
...solidityJson,
...terminalJson,
...udappJson,
}
})

@ -388,9 +388,7 @@ export const DebuggerUI = (props: DebuggerUIProps) => {
<div>
<i className="fas fa-info-triangle" aria-hidden="true"></i>
<span>
<FormattedMessage id='debugger.introduction' defaultMessage='When Debugging with a transaction hash,
if the contract is verified, Remix will try to fetch the source code from Sourcify or Etherscan. Put in your Etherscan API key in the Remix settings.
For supported networks, please see' />: <a href="https://sourcify.dev" target="__blank" >https://sourcify.dev</a> & <a href="https://etherscan.io/contractsVerified" target="__blank">https://etherscan.io/contractsVerified</a>
<FormattedMessage id='debugger.introduction' />: <a href="https://sourcify.dev" target="__blank" >https://sourcify.dev</a> & <a href="https://etherscan.io/contractsVerified" target="__blank">https://etherscan.io/contractsVerified</a>
</span>
</div> }
{ state.debugging && <StepManager stepManager={ stepManager } /> }

@ -60,7 +60,7 @@ export const TxBrowser = ({ requestDebug, updateTxNumberFlag, unloadRequested, t
disabled={!state.txNumber }
style={{ pointerEvents: 'none', color: 'white' }}
>
<span><FormattedMessage id={`debugger.${debugging ? 'stopDebugging' : 'startDebugging'}`} defaultMessage={debugging ? 'Stop debugging' : 'Start debugging'} /></span>
<span><FormattedMessage id={`debugger.${debugging ? 'stopDebugging' : 'startDebugging'}`} /></span>
</button>
</div>
)
@ -76,7 +76,7 @@ export const TxBrowser = ({ requestDebug, updateTxNumberFlag, unloadRequested, t
type='text'
onChange={({ target: { value } }) => txInputChanged(value)}
onInput={txInputOnInput}
placeholder={intl.formatMessage({id: 'debugger.placeholder', defaultMessage: 'Transaction hash, should start with 0x'})}
placeholder={intl.formatMessage({id: 'debugger.placeholder'})}
data-id='debuggerTransactionInput'
disabled={debugging}
/>
@ -84,7 +84,7 @@ export const TxBrowser = ({ requestDebug, updateTxNumberFlag, unloadRequested, t
<div className='d-flex justify-content-center w-100 btn-group py-1'>
<CustomTooltip
placement="bottom"
tooltipText={<FormattedMessage id={`debugger.${debugging ? 'stopDebugging' : 'startDebugging'}`} defaultMessage={debugging ? 'Stop debugging' : 'Start debugging'} />}
tooltipText={<FormattedMessage id={`debugger.${debugging ? 'stopDebugging' : 'startDebugging'}`} />}
tooltipId={'debuggingButtontooltip'}
tooltipClasses="text-nowrap"
>

@ -11,7 +11,7 @@ function HomeTabFeatured() {
return (
<div className="pt-3 pl-2" id="hTFeaturedeSection">
<label style={{ fontSize: "1.2rem" }}><FormattedMessage id='home.featured' defaultMessage='Featured' /></label>
<label style={{ fontSize: "1.2rem" }}><FormattedMessage id='home.featured' /></label>
<div className="mb-2">
<div className="w-100 d-flex flex-column" style={{ height: "200px" }}>
<ThemeContext.Provider value={themeFilter}>
@ -38,37 +38,27 @@ function HomeTabFeatured() {
<div className="mx-1 px-1 d-flex">
<img src={"assets/img/bgRemi.webp"} style={{ flex: "1", height: "170px", maxWidth: "170px" }} alt="" ></img>
<div className="h6 w-50 p-4" style={{ flex: "1" }}>
<h5><FormattedMessage id='home.jumpIntoWeb3' defaultMessage='JUMP INTO WEB3' /></h5>
<p>
<FormattedMessage
id='home.jumpIntoWeb3Text'
defaultMessage='The Remix Project is a rich toolset which can be used for the entire journey of contract development by users of any knowledge level, and as a learning lab for teaching and experimenting with Ethereum.'
/>
</p>
<a className="remixui_home_text" onClick={() => _paq.push(['trackEvent', 'hometab', 'featuredSection', 'jumpIntoWeb3'])} target="__blank" href="https://remix-project.org"><FormattedMessage id='home.more' defaultMessage='More' /></a>
<h5><FormattedMessage id='home.jumpIntoWeb3' /></h5>
<p><FormattedMessage id='home.jumpIntoWeb3Text'/></p>
<a className="remixui_home_text" onClick={() => _paq.push(['trackEvent', 'hometab', 'featuredSection', 'jumpIntoWeb3'])} target="__blank" href="https://remix-project.org"><FormattedMessage id='home.more' /></a>
</div>
</div>
<div className="mx-1 px-1 d-flex">
<img src={"/assets/img/remixRewardUser.webp"} style={{ flex: "1", height: "170px", maxWidth: "170px" }} alt="" ></img>
<div className="h6 p-4" style={{ flex: "1" }}>
<h5><FormattedMessage id='home.remixRewards' defaultMessage='REMIX REWARDS' /></h5>
<p style={{ fontStyle: 'italic' }}><FormattedMessage id='home.remixRewardsText1' defaultMessage='NFTs for our users!' /></p>
<p>
<FormattedMessage
id='home.remixRewardsText2'
defaultMessage='Remix Project rewards contributors, beta testers, and UX research participants with NFTs deployed on Optimism. Remix Reward holders are able to mint a second “Remixer” user NFT badge to give to any other user of their choice.'
/>
</p>
<a className="remixui_home_text" target="__blank" onClick={() => _paq.push(['trackEvent', 'hometab', 'featuredSection', 'remixRewards'])} href="https://rewards.remix.ethereum.eth.limo"><FormattedMessage id='home.more' defaultMessage='More' /></a>
<h5><FormattedMessage id='home.remixRewards' /></h5>
<p style={{ fontStyle: 'italic' }}><FormattedMessage id='home.remixRewardsText1' /></p>
<p><FormattedMessage id='home.remixRewardsText2' /></p>
<a className="remixui_home_text" target="__blank" onClick={() => _paq.push(['trackEvent', 'hometab', 'featuredSection', 'remixRewards'])} href="https://rewards.remix.ethereum.eth.limo"><FormattedMessage id='home.more' /></a>
</div>
</div>
<div className="mx-1 px-1 d-flex">
<img src={"/assets/img/remixRewardBetaTester.webp"} style={{ flex: "1", height: "170px", maxWidth: "170px" }} alt="" ></img>
<div className="h6 p-4" style={{ flex: "1" }}>
<h5><FormattedMessage id='home.betaTesting' defaultMessage='BETA TESTING' /></h5>
<p style={{ fontStyle: 'italic' }}><FormattedMessage id='home.betaTestingText1' defaultMessage='Our community supports us.' /></p>
<p><FormattedMessage id='home.betaTestingText2' defaultMessage='You can join Beta Testing before each release of Remix IDE. Help us test now and get a handle on new features!' /></p>
<a className="remixui_home_text" onClick={() => _paq.push(['trackEvent', 'hometab', 'featuredSection', 'betatesting'])} target="__blank" href="https://rewards.remix.ethereum.eth.limo"><FormattedMessage id='home.more' defaultMessage='More' /></a>
<h5><FormattedMessage id='home.betaTesting' /></h5>
<p style={{ fontStyle: 'italic' }}><FormattedMessage id='home.betaTestingText1' /></p>
<p><FormattedMessage id='home.betaTestingText2' /></p>
<a className="remixui_home_text" onClick={() => _paq.push(['trackEvent', 'hometab', 'featuredSection', 'betatesting'])} target="__blank" href="https://rewards.remix.ethereum.eth.limo"><FormattedMessage id='home.more' /></a>
</div>
</div>
</Carousel>

@ -86,7 +86,7 @@ function HomeTabFeaturedPlugins ({plugin}: HomeTabFeaturedPluginsProps) {
return (
<div className="pl-2 w-100" id="hTFeaturedPlugins">
<label className="" style={{fontSize: "1.2rem"}}><FormattedMessage id='home.featuredPlugins' defaultMessage='Featured Plugins' /></label>
<label className="" style={{fontSize: "1.2rem"}}><FormattedMessage id='home.featuredPlugins' /></label>
<div ref={carouselRefDiv} className="w-100 d-flex flex-column">
<ThemeContext.Provider value={ themeFilter }>
<Carousel
@ -122,7 +122,7 @@ function HomeTabFeaturedPlugins ({plugin}: HomeTabFeaturedPluginsProps) {
imgPath="assets/img/solidityLogo.webp"
envID="solidityLogo"
envText="Solidity"
description={intl.formatMessage({ id: 'home.solidityPluginDesc', defaultMessage: "Compile, test and analyse smart contract." })}
description={intl.formatMessage({ id: 'home.solidityPluginDesc' })}
remixMaintained={true}
callback={() => startSolidity()}
/>
@ -130,28 +130,28 @@ function HomeTabFeaturedPlugins ({plugin}: HomeTabFeaturedPluginsProps) {
imgPath="assets/img/starkNetLogo.webp"
envID="starkNetLogo"
envText="StarkNet"
description={intl.formatMessage({ id: 'home.starkNetPluginDesc', defaultMessage: "Compile and deploy contracts with Cairo, a native language for StarkNet." })}
description={intl.formatMessage({ id: 'home.starkNetPluginDesc' })}
l2={true}
callback={() => startStarkNet()}
/>
<PluginButton
imgPath="assets/img/solhintLogo.webp"
envID="solhintLogo" envText="Solhint linter"
description={intl.formatMessage({ id: 'home.solhintPluginDesc', defaultMessage: "Solhint is an open source project for linting Solidity code." })}
description={intl.formatMessage({ id: 'home.solhintPluginDesc' })}
callback={() => startSolhint()}
/>
<PluginButton
imgPath="assets/img/sourcifyNewLogo.webp"
envID="sourcifyLogo"
envText="Sourcify"
description={intl.formatMessage({ id: 'home.sourcifyPluginDesc', defaultMessage: "Solidity contract and metadata verification service." })}
description={intl.formatMessage({ id: 'home.sourcifyPluginDesc' })}
callback={() => startSourceVerify()}
/>
<PluginButton
imgPath="assets/img/unitTesting.webp"
envID="sUTLogo"
envText="Solidity unit testing"
description={intl.formatMessage({ id: 'home.unitTestPluginDesc', defaultMessage: "Write and run unit tests for your contracts in Solidity." })}
description={intl.formatMessage({ id: 'home.unitTestPluginDesc' })}
callback={() => startSolidityUnitTesting()}
/>
</Carousel>

@ -154,16 +154,16 @@ function HomeTabFile ({plugin}: HomeTabFileProps) {
</ModalDialog>
<Toaster message={state.toasterMsg} />
<div className="justify-content-start mt-1 p-2 border-bottom d-flex flex-column" id="hTFileSection">
<label style={{fontSize: "1rem"}}><FormattedMessage id='home.files' defaultMessage='Files' /></label>
<button className="btn btn-primary p-2 border my-1" data-id="homeTabNewFile" style={{width: 'fit-content'}} onClick={() => createNewFile()}><FormattedMessage id='home.newFile' defaultMessage='New File' /></button>
<label className="btn p-2 border my-1" style={{width: 'fit-content'}} htmlFor="openFileInput"><FormattedMessage id='home.openFile' defaultMessage='Open File' /></label>
<label style={{fontSize: "1rem"}}><FormattedMessage id='home.files' /></label>
<button className="btn btn-primary p-2 border my-1" data-id="homeTabNewFile" style={{width: 'fit-content'}} onClick={() => createNewFile()}><FormattedMessage id='home.newFile' /></button>
<label className="btn p-2 border my-1" style={{width: 'fit-content'}} htmlFor="openFileInput"><FormattedMessage id='home.openFile' /></label>
<input title="open file" type="file" id="openFileInput" onChange={(event) => {
event.stopPropagation()
plugin.verticalIcons.select('filePanel')
uploadFile(event.target)
}} multiple />
<button className="btn p-2 border my-1" style={{width: 'fit-content'}} onClick={() => connectToLocalhost()}><FormattedMessage id='home.connectToLocalhost' defaultMessage='Connect to Localhost' /></button>
<label className="pt-2"><FormattedMessage id='home.loadFrom' defaultMessage='Load From' /></label>
<button className="btn p-2 border my-1" style={{width: 'fit-content'}} onClick={() => connectToLocalhost()}><FormattedMessage id='home.connectToLocalhost' /></button>
<label className="pt-2"><FormattedMessage id='home.loadFrom' /></label>
<div className="d-flex">
<button
className="btn p-2 border mr-2"

@ -69,9 +69,9 @@ function HomeTabGetStarted ({plugin}: HomeTabGetStartedProps) {
<div className="pl-2" id="hTGetStartedSection">
<label style={{fontSize: "1.2rem"}}>
<span className="mr-2" style={{fontWeight: "bold"}}>
<FormattedMessage id="home.getStarted" defaultMessage="Get Started" />
<FormattedMessage id="home.getStarted" />
</span>
- <FormattedMessage id="home.projectTemplates" defaultMessage="Project Templates" />
- <FormattedMessage id="home.projectTemplates" />
</label>
<div ref={carouselRefDiv} className="w-100 d-flex flex-column">
<ThemeContext.Provider value={ themeFilter }>
@ -108,27 +108,27 @@ function HomeTabGetStarted ({plugin}: HomeTabGetStartedProps) {
<WorkspaceTemplate
gsID="starkNetLogo"
workspaceTitle="Blank"
description={intl.formatMessage({ id: 'home.blankTemplateDesc', defaultMessage: "Create an empty workspace." })}
description={intl.formatMessage({ id: 'home.blankTemplateDesc' })}
callback={() => createWorkspace("blank")} />
<WorkspaceTemplate
gsID="solhintLogo"
workspaceTitle="Remix Default"
description={intl.formatMessage({ id: 'home.remixDefaultTemplateDesc', defaultMessage: "Create a workspace with sample files." })}
description={intl.formatMessage({ id: 'home.remixDefaultTemplateDesc' })}
callback={() => createWorkspace("remixDefault")} />
<WorkspaceTemplate
gsID="sourcifyLogo"
workspaceTitle="OpenZeppelin ERC20"
description={intl.formatMessage({ id: 'home.ozerc20TemplateDesc', defaultMessage: "Create an ERC20 token by importing OpenZeppelin library." })}
description={intl.formatMessage({ id: 'home.ozerc20TemplateDesc' })}
callback={() => createWorkspace("ozerc20")} />
<WorkspaceTemplate
gsID="sUTLogo"
workspaceTitle="OpenZeppelin ERC721"
description={intl.formatMessage({ id: 'home.ozerc721TemplateDesc', defaultMessage: "Create an NFT token by importing OpenZeppelin library." })}
description={intl.formatMessage({ id: 'home.ozerc721TemplateDesc' })}
callback={() => createWorkspace("ozerc721")} />
<WorkspaceTemplate
gsID="sUTLogo"
workspaceTitle="0xProject ERC20"
description={intl.formatMessage({ id: 'home.zeroxErc20TemplateDesc', defaultMessage: "Create an ERC20 token by importing 0xProject contract." })}
description={intl.formatMessage({ id: 'home.zeroxErc20TemplateDesc' })}
callback={() => createWorkspace("zeroxErc20")} />
</Carousel>
</ThemeContext.Provider>

@ -42,7 +42,7 @@ function HomeTabLearn ({plugin}: HomeTabLearnProps) {
<div className="d-flex px-2 pb-2 pt-2 d-flex flex-column" id="hTLearnSection">
<div className="d-flex justify-content-between">
<label className="py-2 align-self-center m-0" style={{fontSize: "1.2rem"}}>
<FormattedMessage id="home.learn" defaultMessage="Learn" />
<FormattedMessage id="home.learn" />
</label>
<button
onClick={ ()=> openLink()}
@ -54,38 +54,38 @@ function HomeTabLearn ({plugin}: HomeTabLearnProps) {
<div className="d-flex flex-column">
<label className="d-flex flex-column btn border" onClick={() => setState((prevState) => {return { ...prevState, visibleTutorial: VisibleTutorial.Basics }})}>
<label className="card-title align-self-start m-0 float-left" style={{fontSize: "1rem"}}>
<FormattedMessage id="home.remixBasics" defaultMessage="Remix Basics" />
<FormattedMessage id="home.remixBasics" />
</label>
{(state.visibleTutorial === VisibleTutorial.Basics) && <div className="pt-2 d-flex flex-column text-left">
<span>
<FormattedMessage id="home.remixBasicsDesc" defaultMessage="Introduction to Remix's interface and concepts used in Ethereum, as well as the basics of Solidity." />
<FormattedMessage id="home.remixBasicsDesc" />
</span>
<button className="btn btn-sm btn-secondary mt-2" style={{width: 'fit-content'}} onClick={() => startLearnEthTutorial('basics')}>
<FormattedMessage id="home.getStarted" defaultMessage="Get Started" />
<FormattedMessage id="home.getStarted" />
</button>
</div>}
</label>
<label className="d-flex flex-column btn border" onClick={() => setState((prevState) => {return { ...prevState, visibleTutorial: VisibleTutorial.Intermediate }})}>
<label className="card-title align-self-start m-0 float-left" style={{fontSize: "1rem"}}>
<FormattedMessage id="home.remixIntermediate" defaultMessage="Remix Intermediate" />
<FormattedMessage id="home.remixIntermediate" />
</label>
{(state.visibleTutorial === VisibleTutorial.Intermediate) && <div className="pt-2 d-flex flex-column text-left">
<span>
<FormattedMessage id="home.remixIntermediateDesc" defaultMessage="Using the web3.js to interact with a contract. Using Recorder tool." /></span>
<FormattedMessage id="home.remixIntermediateDesc" /></span>
<button className="btn btn-sm btn-secondary mt-2" style={{width: 'fit-content'}} onClick={() => startLearnEthTutorial('useofweb3js')}>
<FormattedMessage id="home.getStarted" defaultMessage="Get Started" />
<FormattedMessage id="home.getStarted" />
</button>
</div>}
</label>
<label className="d-flex flex-column btn border" onClick={() => setState((prevState) => {return { ...prevState, visibleTutorial: VisibleTutorial.Advanced }})}>
<label className="card-title align-self-start m-0 float-left" style={{fontSize: "1rem"}}>
<FormattedMessage id="home.remixAdvanced" defaultMessage="Remix Advanced" />
<FormattedMessage id="home.remixAdvanced" />
</label>
{(state.visibleTutorial === VisibleTutorial.Advanced) && <div className="pt-2 d-flex flex-column text-left">
<span>
<FormattedMessage id="home.remixAdvancedDesc" defaultMessage="Learn the Proxy Pattern and working with Libraries in Remix. Learn to use the Debugger." /></span>
<FormattedMessage id="home.remixAdvancedDesc" /></span>
<button className="btn btn-sm btn-secondary mt-2" style={{width: 'fit-content'}} onClick={() => startLearnEthTutorial('deploylibraries')}>
<FormattedMessage id="home.getStarted" defaultMessage="Get Started" />
<FormattedMessage id="home.getStarted" />
</button>
</div>}
</label>

@ -7,26 +7,26 @@ const _paq = window._paq = window._paq || [] // eslint-disable-line
function HomeTabScamAlert () {
return (
<div className="" id="hTScamAlertSection">
<label className="pl-2 text-danger" style={{fontSize: "1.2rem"}}><FormattedMessage id='home.scamAlert' defaultMessage='Scam Alerts' /></label>
<label className="pl-2 text-danger" style={{fontSize: "1.2rem"}}><FormattedMessage id='home.scamAlert' /></label>
<div className="py-2 ml-2 mb-1 align-self-end mb-2 d-flex flex-column border border-danger">
<span className="pl-4 mt-2">
<i className="pr-2 text-danger fas fa-exclamation-triangle"></i>
<b><FormattedMessage id='home.scamAlert' defaultMessage='Scam Alerts' />:</b>
<b><FormattedMessage id='home.scamAlert' />:</b>
</span>
<span className="pl-4 mt-1">
<FormattedMessage id='home.scamAlertText' defaultMessage='The only URL Remix uses is remix.ethereum.org' />
<FormattedMessage id='home.scamAlertText' />
</span>
<span className="pl-4 mt-1">
<FormattedMessage id='home.scamAlertText2' defaultMessage='Beware of online videos promoting "liquidity front runner bots"' />:
<FormattedMessage id='home.scamAlertText2' />:
<a className="pl-2 remixui_home_text" onClick={() => _paq.push(['trackEvent', 'hometab', 'scamAlert', 'learnMore'])} target="__blank" href="https://medium.com/remix-ide/remix-in-youtube-crypto-scams-71c338da32d">
<FormattedMessage id='home.learnMore' defaultMessage='Learn more' />
<FormattedMessage id='home.learnMore' />
</a>
</span>
<span className="pl-4 mt-1">
<FormattedMessage id='home.scamAlertText3' defaultMessage='Additional safety tips' />
<FormattedMessage id='home.scamAlertText3' />
: &nbsp;
<a className="remixui_home_text" onClick={() => _paq.push(['trackEvent', 'hometab', 'scamAlert', 'safetyTips'])} target="__blank" href="https://remix-ide.readthedocs.io/en/latest/security.html">
<FormattedMessage id='home.here' defaultMessage='here' />
<FormattedMessage id='home.here' />
</a>
</span>
</div>

@ -70,7 +70,7 @@ function HomeTabTitle() {
placement={'top'}
tooltipId="overlay-tooltip"
tooltipClasses="text-nowrap"
tooltipText={<FormattedMessage id="home.remixYoutubePlaylist" defaultMessage="Remix Youtube Playlist" />}
tooltipText={<FormattedMessage id="home.remixYoutubePlaylist" />}
tooltipTextClasses="border bg-light text-dark p-1 pr-3"
>
<button
@ -86,7 +86,7 @@ function HomeTabTitle() {
placement={'top'}
tooltipId="overlay-tooltip"
tooltipClasses="text-nowrap"
tooltipText={<FormattedMessage id="home.remixTwitterProfile" defaultMessage="Remix Twitter Profile" />}
tooltipText={<FormattedMessage id="home.remixTwitterProfile" />}
tooltipTextClasses="border bg-light text-dark p-1 pr-3"
>
<button
@ -102,7 +102,7 @@ function HomeTabTitle() {
placement={'top'}
tooltipId="overlay-tooltip"
tooltipClasses="text-nowrap"
tooltipText={<FormattedMessage id="home.remixLinkedinProfile" defaultMessage="Remix Linkedin Profile" />}
tooltipText={<FormattedMessage id="home.remixLinkedinProfile" />}
tooltipTextClasses="border bg-light text-dark p-1 pr-3"
>
<button
@ -118,7 +118,7 @@ function HomeTabTitle() {
placement={'top'}
tooltipId="overlay-tooltip"
tooltipClasses="text-nowrap"
tooltipText={<FormattedMessage id="home.remixMediumPosts" defaultMessage="Remix Medium Posts" />}
tooltipText={<FormattedMessage id="home.remixMediumPosts" />}
tooltipTextClasses="border bg-light text-dark p-1 pr-3"
>
<button
@ -134,7 +134,7 @@ function HomeTabTitle() {
placement={'top'}
tooltipId="overlay-tooltip"
tooltipClasses="text-nowrap"
tooltipText={<FormattedMessage id="home.remixGitterChannel" defaultMessage="Remix Gitter Channel" />}
tooltipText={<FormattedMessage id="home.remixGitterChannel" />}
tooltipTextClasses="border bg-light text-dark p-1 pr-3"
>
<button
@ -148,20 +148,20 @@ function HomeTabTitle() {
</span>
</div>
<b className="pb-1 text-dark" style={{ fontStyle: 'italic' }}>
<FormattedMessage id="home.nativeIDE" defaultMessage="The Native IDE for Web3 Development." />
<FormattedMessage id="home.nativeIDE" />
</b>
<div className="pb-1" id="hTGeneralLinks">
<a className="remixui_home_text" onClick={() => _paq.push(['trackEvent', 'hometab', 'header', 'webSite'])} target="__blank" href="https://remix-project.org">
<FormattedMessage id="home.website" defaultMessage="Website" />
<FormattedMessage id="home.website" />
</a>
<a className="pl-2 remixui_home_text" onClick={() => _paq.push(['trackEvent', 'hometab', 'header', 'documentation'])} target="__blank" href="https://remix-ide.readthedocs.io/en/latest">
<FormattedMessage id="home.documentation" defaultMessage="Documentation" />
<FormattedMessage id="home.documentation" />
</a>
<a className="pl-2 remixui_home_text" onClick={() => _paq.push(['trackEvent', 'hometab', 'header', 'remixPlugin'])} target="__blank" href="https://remix-plugin-docs.readthedocs.io/en/latest/">
<FormattedMessage id="home.remixPlugin" defaultMessage="Remix Plugin" />
<FormattedMessage id="home.remixPlugin" />
</a>
<a className="pl-2 remixui_home_text" onClick={() => _paq.push(['trackEvent', 'hometab', 'header', 'remixDesktop'])} target="__blank" href="https://github.com/ethereum/remix-desktop/releases">
<FormattedMessage id="home.remixDesktop" defaultMessage="Remix Desktop" />
<FormattedMessage id="home.remixDesktop" />
</a>
</div>
<div className="d-flex pb-1 align-items-center">
@ -170,7 +170,7 @@ function HomeTabTitle() {
type="text"
className="border form-control border-right-0"
id="homeTabSearchInput"
placeholder={intl.formatMessage({id: "home.searchDocumentation", defaultMessage: "Search Documentation" })}
placeholder={intl.formatMessage({ id: "home.searchDocumentation" })}
data-id="terminalInputSearch"
/>
<button

@ -18,7 +18,7 @@ export function RemixUiLocaleModule({ localeModule }: RemixUiLocaleModuleProps)
<div className="border-top mb-4">
<div className="card-body pt-3 pb-2">
<h6 className="card-title">
<FormattedMessage id='settings.locales' defaultMessage='Lanaguage' />
<FormattedMessage id='settings.locales' />
</h6>
<div className="card-text locales-container">
{localeModule.getLocales()

@ -67,21 +67,21 @@ const RemixUIPanelHeader = (props: RemixPanelProps) => {
<div className="d-flex w-100 flex-row py-2"></div>
<div className={`bg-light mx-3 mb-2 p-3 pt-1 border-bottom flex-column ${toggleExpander ? "d-flex" : "d-none"}`}>
{plugin?.profile?.author && <span className="d-flex flex-row align-items-center">
<label className="mb-0 pr-2"><FormattedMessage id='panel.author' defaultMessage='Author' />:</label>
<label className="mb-0 pr-2"><FormattedMessage id='panel.author' />:</label>
<span> { plugin?.profile.author } </span>
</span>}
{plugin?.profile?.maintainedBy && <span className="d-flex flex-row align-items-center">
<label className="mb-0 pr-2"><FormattedMessage id='panel.maintainedBy' defaultMessage='Maintained by' />:</label>
<label className="mb-0 pr-2"><FormattedMessage id='panel.maintainedBy' />:</label>
<span> { plugin?.profile.maintainedBy } </span>
</span>}
{plugin?.profile?.documentation && <span className="d-flex flex-row align-items-center">
<label className="mb-0 pr-2"><FormattedMessage id='panel.documentation' defaultMessage='Documentation' />:</label>
<label className="mb-0 pr-2"><FormattedMessage id='panel.documentation' />:</label>
<span>
<a href={plugin?.profile?.documentation} className="titleInfo p-0 mb-2" title="link to documentation" target="_blank" rel="noreferrer"><i aria-hidden="true" className="fas fa-book"></i></a>
</span>
</span>}
{plugin?.profile?.description && <span className="d-flex flex-row align-items-baseline">
<label className="mb-0 pr-2"><FormattedMessage id='panel.description' defaultMessage='Description' />:</label>
<label className="mb-0 pr-2"><FormattedMessage id='panel.description' />:</label>
<span> { plugin?.profile.description } </span>
</span>}
{plugin?.profile?.repo && <span className="d-flex flex-row align-items-center">

@ -20,11 +20,11 @@ function ActivePluginCardContainer ({ pluginComponent }: ActivePluginCardContain
return (
<React.Fragment>
{(pluginComponent.activePlugins && pluginComponent.activePlugins.length) ? <ModuleHeading headingLabel={intl.formatMessage({id: 'pluginManager.activeModules' , defaultMessage: 'Active Modules'})} count={pluginComponent.activePlugins.length} /> : null}
{(pluginComponent.activePlugins && pluginComponent.activePlugins.length) ? <ModuleHeading headingLabel={intl.formatMessage({ id: 'pluginManager.activeModules' })} count={pluginComponent.activePlugins.length} /> : null}
{pluginComponent.activePlugins && pluginComponent.activePlugins.map((profile, idx) => {
return (
<ActivePluginCard
buttonText={intl.formatMessage({id: 'pluginManager.deactivate' , defaultMessage: 'Deactivate'})}
buttonText={intl.formatMessage({ id: 'pluginManager.deactivate' })}
profile={profile}
deactivatePlugin={deactivatePlugin}
key={idx}

@ -21,11 +21,11 @@ function InactivePluginCardContainer ({ pluginComponent }: InactivePluginCardCon
return (
<React.Fragment>
{(pluginComponent.inactivePlugins && pluginComponent.inactivePlugins.length) ? <ModuleHeading headingLabel={intl.formatMessage({id: 'pluginManager.inactiveModules' , defaultMessage: 'Inactive Modules'})} count={pluginComponent.inactivePlugins.length} /> : null}
{(pluginComponent.inactivePlugins && pluginComponent.inactivePlugins.length) ? <ModuleHeading headingLabel={intl.formatMessage({ id: 'pluginManager.inactiveModules' })} count={pluginComponent.inactivePlugins.length} /> : null}
{pluginComponent.inactivePlugins && pluginComponent.inactivePlugins.map((profile, idx) => {
return (
<InactivePluginCard
buttonText={intl.formatMessage({id: 'pluginManager.activate' , defaultMessage: 'Activate'})}
buttonText={intl.formatMessage({ id: 'pluginManager.activate' })}
profile={profile}
key={idx}
activatePlugin={activatePlugin}

@ -100,7 +100,7 @@ function LocalPluginForm ({ closeModal, visible, pluginManager }: LocalPluginFor
handleHide={closeModal}
id="pluginManagerLocalPluginModalDialog"
hide={visible}
title={intl.formatMessage({ id: 'pluginManager.localForm.title', defaultMessage: 'Local Plugin' })}
title={intl.formatMessage({ id: 'pluginManager.localForm.title' })}
okLabel="OK"
okFn={ handleModalOkClick }
cancelLabel="Cancel"
@ -109,9 +109,9 @@ function LocalPluginForm ({ closeModal, visible, pluginManager }: LocalPluginFor
<form id="local-plugin-form">
<div className="form-group">
<label htmlFor="plugin-name">
<FormattedMessage id='pluginManager.localForm.pluginName' defaultMessage='Plugin Name' />
<FormattedMessage id='pluginManager.localForm.pluginName' />
&nbsp;
<small>(<FormattedMessage id='pluginManager.localForm.required' defaultMessage='required' />)</small>
<small>(<FormattedMessage id='pluginManager.localForm.required' />)</small>
</label>
<input
className="form-control"
@ -119,11 +119,11 @@ function LocalPluginForm ({ closeModal, visible, pluginManager }: LocalPluginFor
value={ name || '' }
id="plugin-name"
data-id="localPluginName"
placeholder={intl.formatMessage({ id: 'pluginManager.localForm.shouldBeCamelCase', defaultMessage: 'Should be camelCase' })} />
placeholder={intl.formatMessage({ id: 'pluginManager.localForm.shouldBeCamelCase' })} />
</div>
<div className="form-group">
<label htmlFor="plugin-displayname">
<FormattedMessage id='pluginManager.localForm.displayName' defaultMessage='Display Name' />
<FormattedMessage id='pluginManager.localForm.displayName' />
</label>
<input
className="form-control"
@ -131,12 +131,12 @@ function LocalPluginForm ({ closeModal, visible, pluginManager }: LocalPluginFor
value={ displayName || '' }
id="plugin-displayname"
data-id="localPluginDisplayName"
placeholder={intl.formatMessage({ id: 'pluginManager.localForm.nameInTheHeader', defaultMessage: 'Name in the header' })} />
placeholder={intl.formatMessage({ id: 'pluginManager.localForm.nameInTheHeader' })} />
</div>
<div className="form-group">
<label htmlFor="plugin-methods">
Api&nbsp;
(<FormattedMessage id='pluginManager.localForm.commaSeparatedMethod' defaultMessage='comma separated list of method names' />)
(<FormattedMessage id='pluginManager.localForm.commaSeparatedMethod' />)
</label>
<input
className="form-control"
@ -148,9 +148,9 @@ function LocalPluginForm ({ closeModal, visible, pluginManager }: LocalPluginFor
</div>
<div className="form-group">
<label htmlFor="plugin-methods">
<FormattedMessage id='pluginManager.localForm.pluginsItCanActivate' defaultMessage='Plugins it can activate' />
<FormattedMessage id='pluginManager.localForm.pluginsItCanActivate' />
&nbsp;
(<FormattedMessage id='pluginManager.localForm.commaSeparatedPlugin' defaultMessage='comma separated list of plugin names' />)
(<FormattedMessage id='pluginManager.localForm.commaSeparatedPlugin' />)
</label>
<input
className="form-control"
@ -164,7 +164,7 @@ function LocalPluginForm ({ closeModal, visible, pluginManager }: LocalPluginFor
<div className="form-group">
<label htmlFor="plugin-url">Url&nbsp;
<small>
(<FormattedMessage id='pluginManager.localForm.required' defaultMessage='required' />)
(<FormattedMessage id='pluginManager.localForm.required' />)
</small>
</label>
<input
@ -176,10 +176,10 @@ function LocalPluginForm ({ closeModal, visible, pluginManager }: LocalPluginFor
placeholder="ex: https://localhost:8000" />
</div>
<h6>
<FormattedMessage id='pluginManager.localForm.typeOfConnection' defaultMessage='Type of connection' />
<FormattedMessage id='pluginManager.localForm.typeOfConnection' />
&nbsp;
<small>
(<FormattedMessage id='pluginManager.localForm.required' defaultMessage='required' />)
(<FormattedMessage id='pluginManager.localForm.required' />)
</small>
</h6>
<div className="form-check form-group">
@ -209,10 +209,10 @@ function LocalPluginForm ({ closeModal, visible, pluginManager }: LocalPluginFor
</div>
</div>
<h6>
<FormattedMessage id='pluginManager.localForm.locationInRemix' defaultMessage='Location in remix' />
<FormattedMessage id='pluginManager.localForm.locationInRemix' />
&nbsp;
<small>
(<FormattedMessage id='pluginManager.localForm.required' defaultMessage='required' />)
(<FormattedMessage id='pluginManager.localForm.required' />)
</small>
</h6>
<div className="form-check form-group">
@ -226,7 +226,7 @@ function LocalPluginForm ({ closeModal, visible, pluginManager }: LocalPluginFor
data-id='localPluginRadioButtonsidePanel'
checked={location === 'sidePanel'}
onChange={(e) => setLocation(e.target.value as 'sidePanel' | 'mainPanel' | 'none')} />
<label className="form-check-label" htmlFor="sidePanel"><FormattedMessage id='pluginManager.localForm.sidePanel' defaultMessage='Side Panel' /></label>
<label className="form-check-label" htmlFor="sidePanel"><FormattedMessage id='pluginManager.localForm.sidePanel' /></label>
</div>
<div className="radio">
<input
@ -238,7 +238,7 @@ function LocalPluginForm ({ closeModal, visible, pluginManager }: LocalPluginFor
data-id='localPluginRadioButtonmainPanel'
checked={location === 'mainPanel'}
onChange={(e) => setLocation(e.target.value as 'sidePanel' | 'mainPanel' | 'none')} />
<label className="form-check-label" htmlFor="mainPanel"><FormattedMessage id='pluginManager.localForm.mainPanel' defaultMessage='Main Panel' /></label>
<label className="form-check-label" htmlFor="mainPanel"><FormattedMessage id='pluginManager.localForm.mainPanel' /></label>
</div>
<div className="radio">
<input
@ -250,7 +250,7 @@ function LocalPluginForm ({ closeModal, visible, pluginManager }: LocalPluginFor
data-id='localPluginRadioButtonnone'
checked={location === 'none'}
onChange={(e) => setLocation(e.target.value as 'sidePanel' | 'mainPanel' | 'none')} />
<label className="form-check-label" htmlFor="none"><FormattedMessage id='pluginManager.localForm.none' defaultMessage='None' /></label>
<label className="form-check-label" htmlFor="none"><FormattedMessage id='pluginManager.localForm.none' /></label>
</div>
</div>
</form>

@ -48,7 +48,7 @@ function RootView ({ pluginComponent, children }: RootViewProps) {
data-id="pluginManagerComponentSearchInput"
/>
<button onClick={openModal} className="remixui_pluginSearchButton btn bg-transparent text-dark border-0 mt-2 text-underline" data-id="pluginManagerComponentPluginSearchButton">
<FormattedMessage id='pluginManager.connectLocal' defaultMessage='Connect to a Local Plugin' />
<FormattedMessage id='pluginManager.connectLocal' />
</button>
</header>
{children}

@ -82,7 +82,7 @@ export function AccountUI (props: AccountProps) {
message='Enter your passphrase for this account to sign the message'
setPassphrase={props.setPassphrase}
/>, 'OK', () => {
props.modal(intl.formatMessage({id: 'udapp.signAMessage', defaultMessage: 'Sign a message'}), signMessagePrompt(), 'OK', () => {
props.modal(intl.formatMessage({ id: 'udapp.signAMessage' }), signMessagePrompt(), 'OK', () => {
props.signMessageWithAddress(selectedAccount, messageRef.current, signedMessagePrompt, props.passphrase)
props.setPassphrase('')
}, 'Cancel', null)
@ -91,7 +91,7 @@ export function AccountUI (props: AccountProps) {
})
}
props.modal(intl.formatMessage({id: 'udapp.signAMessage', defaultMessage: 'Sign a message'}), signMessagePrompt(), 'OK', () => {
props.modal(intl.formatMessage({ id: 'udapp.signAMessage' }), signMessagePrompt(), 'OK', () => {
props.signMessageWithAddress(selectedAccount, messageRef.current, signedMessagePrompt)
}, 'Cancel', null)
}
@ -123,7 +123,7 @@ export function AccountUI (props: AccountProps) {
const signMessagePrompt = () => {
return (
<div> <FormattedMessage id='udapp.enterAMessageToSign' defaultMessage='Enter a message to sign' />
<div> <FormattedMessage id='udapp.enterAMessageToSign' />
<div>
<textarea
id="prompt_text"
@ -142,9 +142,9 @@ export function AccountUI (props: AccountProps) {
const signedMessagePrompt = (msgHash: string, signedData: string) => {
return (
<div>
<b><FormattedMessage id='udapp.hash' defaultMessage='hash' />:</b><br />
<b><FormattedMessage id='udapp.hash' />:</b><br />
<span id="remixRunSignMsgHash" data-id="settingsRemixRunSignMsgHash">{msgHash}</span>
<br /><b><FormattedMessage id='udapp.signature' defaultMessage='signature' />:</b><br />
<br /><b><FormattedMessage id='udapp.signature' />:</b><br />
<span id="remixRunSignMsgSignature" data-id="settingsRemixRunSignMsgSignature">{signedData}</span>
</div>
)
@ -153,7 +153,7 @@ export function AccountUI (props: AccountProps) {
return (
<div className="udapp_crow">
<label className="udapp_settingsLabel">
<FormattedMessage id='udapp.account' defaultMessage='Account' />
<FormattedMessage id='udapp.account' />
<CustomTooltip
placement={'top-start'}
tooltipClasses="text-wrap"

@ -257,7 +257,7 @@ export function ContractDropdownUI (props: ContractDropdownProps) {
<div className='d-flex justify-content-between'>
<div className="d-flex justify-content-between align-items-end">
<label className="udapp_settingsLabel pr-1">
<FormattedMessage id='udapp.contract' defaultMessage='Contract' />
<FormattedMessage id='udapp.contract' />
</label>
<div className="d-flex">{compilerName && compilerName !== '' && <label style={{ maxHeight: '0.6rem', lineHeight: '1rem' }} data-id="udappCompiledBy">(Compiled by <span className="text-capitalize"> {compilerName}</span>)</label>}</div>
</div>
@ -301,10 +301,10 @@ export function ContractDropdownUI (props: ContractDropdownProps) {
</div>
<div>
<div className="udapp_deployDropdown">
{((contractList[currentFile] && contractList[currentFile].filter(contract => contract)) || []).length <= 0 ? intl.formatMessage({id: 'udapp.noCompiledContracts', defaultMessage: 'No compiled contracts'})
{((contractList[currentFile] && contractList[currentFile].filter(contract => contract)) || []).length <= 0 ? intl.formatMessage({ id: 'udapp.noCompiledContracts' })
: loadedContractData ? <div>
<ContractGUI
title={intl.formatMessage({id: 'udapp.deploy', defaultMessage: "Deploy"})}
title={intl.formatMessage({ id: 'udapp.deploy' })}
isDeploy={true}
deployOption={deployOptions[currentFile] && deployOptions[currentFile][currentContract] ? deployOptions[currentFile][currentContract].options : null}
initializerOptions={deployOptions[currentFile] && deployOptions[currentFile][currentContract] ? deployOptions[currentFile][currentContract].initializeOptions : null}
@ -337,7 +337,7 @@ export function ContractDropdownUI (props: ContractDropdownProps) {
data-id="contractDropdownIpfsCheckboxLabel"
className="m-0 form-check-label custom-control-label udapp_checkboxAlign"
>
<FormattedMessage id='udapp.publishTo' defaultMessage='Publish to' /> IPFS
<FormattedMessage id='udapp.publishTo' /> IPFS
</label>
</CustomTooltip>
</div>
@ -345,7 +345,7 @@ export function ContractDropdownUI (props: ContractDropdownProps) {
}
</div>
<div className="udapp_orLabel mt-2" style={{ display: loadType === 'abi' && !isContractFile(currentFile) ? 'none' : 'block' }}>
<FormattedMessage id='udapp.or' defaultMessage='or' />
<FormattedMessage id='udapp.or' />
</div>
<div className="udapp_button udapp_atAddressSect ">
<CustomTooltip
@ -356,7 +356,7 @@ export function ContractDropdownUI (props: ContractDropdownProps) {
>
<div id="runAndDeployAtAdressButtonContainer" onClick={loadFromAddress} data-title={atAddressOptions.title}>
<button className="udapp_atAddress btn btn-sm btn-info" id="runAndDeployAtAdressButton" disabled={atAddressOptions.disabled} style={{ pointerEvents: 'none' }} onClick={loadFromAddress} data-title={atAddressOptions.title}>
<FormattedMessage id='udapp.atAddress' defaultMessage='At Address' />
<FormattedMessage id='udapp.atAddress' />
</button>
</div>
</CustomTooltip>
@ -369,7 +369,7 @@ export function ContractDropdownUI (props: ContractDropdownProps) {
<input
ref={atAddressValue}
className="udapp_input udapp_ataddressinput ataddressinput form-control"
placeholder={intl.formatMessage({id: 'udapp.loadContractFromAddress', defaultMessage: "Load contract from Address"})}
placeholder={intl.formatMessage({ id: 'udapp.loadContractFromAddress' })}
onChange={atAddressChanged}
/>
</CustomTooltip>

@ -33,7 +33,7 @@ export function DeployButton (props: DeployButtonProps) {
tooltipText={props.buttonOptions.title}
>
<button onClick={props.handleActionClick} className={`udapp_instanceButton ${props.buttonOptions.widthClass} btn btn-sm ${props.buttonOptions.classList}`} data-id={props.buttonOptions.dataId}>
<FormattedMessage id='udapp.deploy' defaultMessage='Deploy' />
<FormattedMessage id='udapp.deploy' />
</button>
</CustomTooltip>
}

@ -27,7 +27,7 @@ export function EnvironmentUI (props: EnvironmentProps) {
return (
<div className="udapp_crow">
<label id="selectExEnv" className="udapp_settingsLabel">
<FormattedMessage id='udapp.environment' defaultMessage='Environment' />
<FormattedMessage id='udapp.environment' />
<CustomTooltip placement={'right'} tooltipClasses="text-nowrap" tooltipId="info-recorder"
tooltipText="Open chainlist.org and get the connection specs of the chain you want to interact with.">
@ -67,7 +67,7 @@ export function EnvironmentUI (props: EnvironmentProps) {
</Dropdown>
<CustomTooltip placement={'right-start'} tooltipClasses="text-wrap" tooltipId="runAndDeployAddresstooltip"
tooltipText={<FormattedMessage id='udapp.environmentDocs' defaultMessage='Click for docs about Environment' />}>
tooltipText={<FormattedMessage id='udapp.environmentDocs' />}>
<a href="https://remix-ide.readthedocs.io/en/latest/run.html#environment" target="_blank" rel="noreferrer"><i className="udapp_infoDeployAction ml-2 fas fa-info"></i></a>
</CustomTooltip>

@ -11,7 +11,7 @@ export function GasPriceUI (props: GasPriceProps) {
return (
<div className="udapp_crow">
<label className="udapp_settingsLabel"><FormattedMessage id='udapp.gasLimit' defaultMessage='Gas limit' /></label>
<label className="udapp_settingsLabel"><FormattedMessage id='udapp.gasLimit' /></label>
<CustomTooltip
placement={'right'}
tooltipClasses="text-nowrap"

@ -24,7 +24,7 @@ export function InstanceContainerUI (props: InstanceContainerProps) {
tooltipText={"Autogenerated generic user interfaces for interaction with deployed contracts"}
>
<label className="udapp_deployedContracts">
<FormattedMessage id='udapp.deployedContracts' defaultMessage='Deployed Contracts' />
<FormattedMessage id='udapp.deployedContracts' />
</label>
</CustomTooltip>
{ instanceList.length > 0
@ -33,7 +33,7 @@ export function InstanceContainerUI (props: InstanceContainerProps) {
placement="right"
tooltipClasses="text-nowrap"
tooltipId="deployAndRunClearInstancesTooltip"
tooltipText={<FormattedMessage id='udapp.deployAndRunClearInstances' defaultMessage='Clear instances list and reset recorder' />}
tooltipText={<FormattedMessage id='udapp.deployAndRunClearInstances' />}
>
<i className="mr-2 udapp_icon far fa-trash-alt" data-id="deployAndRunClearInstances" onClick={clearInstance} aria-hidden="true">
</i>
@ -59,7 +59,7 @@ export function InstanceContainerUI (props: InstanceContainerProps) {
}) }
</div>
: <span className="mx-2 mt-3 alert alert-warning" data-id="deployAndRunNoInstanceText" role="alert">
<FormattedMessage id='udapp.deployAndRunNoInstanceText' defaultMessage='Currently you have no contract instances to interact with.' />
<FormattedMessage id='udapp.deployAndRunNoInstanceText' />
</span>
}
</div>

@ -32,7 +32,7 @@ export function RecorderUI (props: RecorderProps) {
<div className="udapp_recorderSection d-flex justify-content-between" onClick={toggleClass}>
<div className="d-flex justify-content-center align-items-center">
<label className="mt-1 udapp_recorderSectionLabel">
<FormattedMessage id='udapp.transactionsRecorded' defaultMessage='Transactions recorded' />
<FormattedMessage id='udapp.transactionsRecorded' />
</label>
<CustomTooltip
placement={'right'}

@ -48,7 +48,7 @@ export function ValueUI (props: ValueProps) {
return (
<div className="udapp_crow">
<label className="udapp_settingsLabel" data-id="remixDRValueLabel"><FormattedMessage id='udapp.value' defaultMessage='Value' /></label>
<label className="udapp_settingsLabel" data-id="remixDRValueLabel"><FormattedMessage id='udapp.value' /></label>
<div className="udapp_gasValueContainer">
<CustomTooltip
placement={'top-start'}
@ -70,7 +70,7 @@ export function ValueUI (props: ValueProps) {
value={props.sendValue}
/>
</CustomTooltip>
<select name="unit"
value={props.sendUnit} className="form-control p-1 udapp_gasNvalUnit udapp_col2_2 custom-select" id="unit" onChange={(e) => { props.setUnit((e.target.value) as 'ether' | 'finney' | 'gwei' | 'wei') }}>
<option data-unit="wei" value='wei'>Wei</option>

@ -27,10 +27,10 @@ export const Exclude = props => {
return (
<>
<div className="search_plugin_find-part pl-3">
<label className='mt-2'><FormattedMessage id='search.filesToExclude' defaultMessage='Files to exclude' /></label>
<label className='mt-2'><FormattedMessage id='search.filesToExclude' /></label>
<input
id='search_exclude'
placeholder={intl.formatMessage({id: 'search.placeholder3', defaultMessage: "Exclude ie .git/**/* ( Enter to exclude )"})}
placeholder={intl.formatMessage({ id: 'search.placeholder3' })}
className="form-control"
onKeyUp={handleKeypress}
onChange={async (e) => change(e)}

@ -41,7 +41,6 @@ export const Find = () => {
id="search_input"
placeholder={intl.formatMessage({
id: 'search.placeholder1',
defaultMessage: 'Search ( Enter to search )',
})}
className="form-control"
value={inputValue}
@ -52,7 +51,6 @@ export const Find = () => {
<CustomTooltip
tooltipText={intl.formatMessage({
id: 'search.matchCase',
defaultMessage: 'Match Case',
})}
tooltipClasses="text-nowrap"
tooltipId="searchCaseSensitiveTooltip"
@ -75,7 +73,6 @@ export const Find = () => {
<CustomTooltip
tooltipText={intl.formatMessage({
id: 'search.matchWholeWord',
defaultMessage: 'Match Whole Word',
})}
tooltipClasses="text-nowrap"
tooltipId="searchWholeWordTooltip"
@ -98,7 +95,6 @@ export const Find = () => {
<CustomTooltip
tooltipText={intl.formatMessage({
id: 'search.useRegularExpression',
defaultMessage: 'Use Regular Expression',
})}
tooltipClasses="text-nowrap"
tooltipId="useRegularExpressionTooltip"

@ -26,10 +26,10 @@ export const Include = props => {
return (
<>
<div className="search_plugin_find-part pl-3">
<label className='mt-2'><FormattedMessage id='search.filesToInclude' defaultMessage='Files to include' /></label>
<label className='mt-2'><FormattedMessage id='search.filesToInclude' /></label>
<input
id='search_include'
placeholder={intl.formatMessage({id: 'search.placeholder2', defaultMessage: "Include ie *.sol ( Enter to include )"})}
placeholder={intl.formatMessage({ id: 'search.placeholder2' })}
className="form-control"
onChange={async(e) => change(e)}
onKeyUp={handleKeypress}

@ -25,7 +25,7 @@ export const OverWriteCheck = props => {
data-id="confirm_replace_label"
className="form-check-label custom-control-label"
>
<FormattedMessage id='search.replaceWithoutConfirmation' defaultMessage='replace without confirmation' />
<FormattedMessage id='search.replaceWithoutConfirmation' />
</label>
</div>
</div>

@ -18,7 +18,7 @@ export const Replace = props => {
<label className='d-none'>replace in files</label>
<input
id='search_replace'
placeholder={intl.formatMessage({id: 'search.replace', defaultMessage: "Replace"})}
placeholder={intl.formatMessage({ id: 'search.replace' })}
className="form-control"
onChange={change}
></input>

@ -127,7 +127,7 @@ export const ResultItem = (props: ResultItemProps) => {
{state.replaceEnabled?
<div className="search_plugin_wrap_summary_replace">
<div data-id={`replace-all-${props.file.filename}`} onClick={async() => replace()} className='btn btn-secondary mb-2 btn-sm'>
<FormattedMessage id='search.replaceAll' defaultMessage='Replace all' />
<FormattedMessage id='search.replaceAll' />
</div>
</div>
:null}

@ -1,39 +1,15 @@
export const generateContractMetadataText = 'Generate contract metadata. Generate a JSON file in the contract folder. Allows to specify library addresses the contract depends on. If nothing is specified, Remix deploys libraries automatically.'
export const textSecondary = 'text-secondary'
export const textDark = 'text-dark'
export const warnText = 'Be sure the endpoint is opened before enabling it. \nThis mode allows a user to provide a passphrase in the Remix interface without having to unlock the account. Although this is very convenient, you should completely trust the backend you are connected to (Geth, Parity, ...). Remix never persists any passphrase'.split('\n').map(s => s.trim()).join(' ')
export const gitAccessTokenTitle = 'GitHub Access Token'
export const gitAccessTokenText = 'Manage the access token used to publish to Gist and retrieve GitHub contents.'
export const gitAccessTokenText2 = 'Go to github token page (link below) to create a new token and save it in Remix. To create gists set the scope to "gist". To retrieve GitHub contents set the scope to "repo".'
export const gitAccessTokenLink = 'https://github.com/settings/tokens/new?scopes=gist,repo&description=Remix%20IDE%20Token'
export const etherscanTokenTitle = 'EtherScan Access Token'
export const etherscanTokenLink = 'https://etherscan.io/myapikey'
export const etherscanAccessTokenText = 'Manage the api key used to interact with Etherscan.'
export const etherscanAccessTokenText2 = 'Go to Etherscan api key page (link below) to create a new api key and save it in Remix.'
export const ethereunVMText = 'Always use Remix VM at load'
export const wordWrapText = 'Word wrap in editor'
export const enablePersonalModeText = ' Enable Personal Mode for Remix Provider. Transaction sent over Web3 will use the web3.personal API.\n'
export const useAutoCompleteText = 'Enable code completion in editor.'
export const useShowGasInEditorText = 'Display gas estimates in editor.'
export const displayErrorsText = 'Display errors in editor while typing.'
export const matomoAnalytics = 'Enable Matomo Analytics. We do not collect personally identifiable information (PII). The info is used to improve the site’s UX & UI. See more about '
export const swarmSettingsTitle = 'Swarm Settings'
export const swarmSettingsText = 'Swarm Settings'
export const ipfsSettingsText = 'IPFS Settings'
export const labels = {
'gist': {
'link': gitAccessTokenLink,
'title': gitAccessTokenTitle,
'message1': gitAccessTokenText,
'message2': gitAccessTokenText2,
'key': 'gist-access-token'
},
'etherscan': {
'link': etherscanTokenLink,
'title': etherscanTokenTitle,
'message1':etherscanAccessTokenText,
'message2':etherscanAccessTokenText2,
'key': 'etherscan-access-token'
}
}

@ -3,7 +3,7 @@ import { CustomTooltip } from '@remix-ui/helper'
import React, { useEffect, useState } from 'react'
import { FormattedMessage, useIntl } from 'react-intl'
import { EtherscanSettingsProps } from '../types'
import { etherscanTokenTitle, etherscanAccessTokenText, etherscanAccessTokenText2, etherscanTokenLink } from './constants'
import { etherscanTokenLink } from './constants'
export function EtherscanSettings (props: EtherscanSettingsProps) {
@ -34,9 +34,9 @@ export function EtherscanSettings (props: EtherscanSettingsProps) {
return (
<div className="border-top">
<div className="card-body pt-3 pb-2">
<h6 className="card-title"><FormattedMessage id='settings.etherscanTokenTitle' defaultMessage={etherscanTokenTitle} /></h6>
<p className="mb-1"><FormattedMessage id='settings.etherscanAccessTokenText' defaultMessage={etherscanAccessTokenText} /></p>
<p className=""><FormattedMessage id='settings.etherscanAccessTokenText2' defaultMessage={etherscanAccessTokenText2} /></p>
<h6 className="card-title"><FormattedMessage id='settings.etherscanTokenTitle' /></h6>
<p className="mb-1"><FormattedMessage id='settings.etherscanAccessTokenText' /></p>
<p className=""><FormattedMessage id='settings.etherscanAccessTokenText2' /></p>
<p className="mb-1"><a className="text-primary" target="_blank" href={etherscanTokenLink}>{etherscanTokenLink}</a></p>
<div>
<label className="mb-0 pb-0">TOKEN:</label>
@ -50,7 +50,7 @@ export function EtherscanSettings (props: EtherscanSettingsProps) {
<div>
<div className="text-secondary mb-0 h6">
<div className="d-flex justify-content-end pt-2">
<input className="btn btn-sm btn-primary ml-2" id="saveetherscantoken" data-id="settingsTabSaveEtherscanToken" onClick={saveEtherscanToken} value={intl.formatMessage({id: 'settings.save', defaultMessage: 'Save'})} type="button" disabled={etherscanToken === ''}></input>
<input className="btn btn-sm btn-primary ml-2" id="saveetherscantoken" data-id="settingsTabSaveEtherscanToken" onClick={saveEtherscanToken} value={intl.formatMessage({ id: 'settings.save' })} type="button" disabled={etherscanToken === ''}></input>
<CustomTooltip
tooltipText="Delete Etherscan token"
tooltipClasses="text-nowrap"
@ -58,7 +58,7 @@ export function EtherscanSettings (props: EtherscanSettingsProps) {
placement="left-start"
>
<button className="btn btn-sm btn-secondary ml-2" id="removeetherscantoken" data-id="settingsTabRemoveEtherscanToken" title="Delete Etherscan token" onClick={removeToken}>
<FormattedMessage id='settings.remove' defaultMessage='Remove' />
<FormattedMessage id='settings.remove' />
</button></CustomTooltip>
</div>
</div>

@ -3,7 +3,7 @@ import { CustomTooltip } from '@remix-ui/helper'
import React, { useEffect, useState } from 'react'
import { FormattedMessage, useIntl } from 'react-intl'
import { GithubSettingsProps } from '../types'
import { gitAccessTokenTitle, gitAccessTokenText, gitAccessTokenText2, gitAccessTokenLink } from './constants'
import { gitAccessTokenLink } from './constants'
export function GithubSettings (props: GithubSettingsProps) {
@ -51,9 +51,9 @@ export function GithubSettings (props: GithubSettingsProps) {
return (
<div className="border-top">
<div className="card-body pt-3 pb-2">
<h6 className="card-title"><FormattedMessage id='settings.gitAccessTokenTitle' defaultMessage={gitAccessTokenTitle} /></h6>
<p className="mb-1"><FormattedMessage id='settings.gitAccessTokenText' defaultMessage={gitAccessTokenText} /></p>
<p className=""><FormattedMessage id='settings.gitAccessTokenText2' defaultMessage={gitAccessTokenText2} /></p>
<h6 className="card-title"><FormattedMessage id='settings.gitAccessTokenTitle' /></h6>
<p className="mb-1"><FormattedMessage id='settings.gitAccessTokenText' /></p>
<p className=""><FormattedMessage id='settings.gitAccessTokenText2' /></p>
<p className="mb-1"><a className="text-primary" target="_blank" href={gitAccessTokenLink}>{gitAccessTokenLink}</a></p>
<div>
<label className="mb-0 pb-0">TOKEN:</label>
@ -75,7 +75,7 @@ export function GithubSettings (props: GithubSettingsProps) {
<div className="text-secondary mb-0 h6">
<input id="githubemail" data-id="settingsTabGithubEmail" type="text" className="form-control" onChange={(e) => handleChangeEmailState(e)} value={ githubEmail } />
<div className="d-flex justify-content-end pt-2">
<input className="btn btn-sm btn-primary ml-2" id="savegisttoken" data-id="settingsTabSaveGistToken" onClick={saveGithubToken} value={intl.formatMessage({id: 'settings.save', defaultMessage: 'Save'})} type="button"></input>
<input className="btn btn-sm btn-primary ml-2" id="savegisttoken" data-id="settingsTabSaveGistToken" onClick={saveGithubToken} value={intl.formatMessage({ id: 'settings.save' })} type="button"></input>
<CustomTooltip
tooltipText="Delete Github Credentials"
tooltipClasses="text-nowrap"
@ -83,7 +83,7 @@ export function GithubSettings (props: GithubSettingsProps) {
placement="top-start"
>
<button className="btn btn-sm btn-secondary ml-2" id="removegisttoken" data-id="settingsTabRemoveGistToken" onClick={removeToken}>
<FormattedMessage id='settings.remove' defaultMessage='Remove' />
<FormattedMessage id='settings.remove' />
</button>
</CustomTooltip>
</div>

@ -1,6 +1,6 @@
import React, { useState, useReducer, useEffect, useCallback } from 'react' // eslint-disable-line
import { enablePersonalModeText, ethereunVMText, labels, generateContractMetadataText, matomoAnalytics, textDark, textSecondary, warnText, wordWrapText, swarmSettingsTitle, ipfsSettingsText, useAutoCompleteText, useShowGasInEditorText, displayErrorsText } from './constants'
import { labels, textDark, textSecondary } from './constants'
import './remix-ui-settings.css'
import { ethereumVM, generateContractMetadat, personal, textWrapEventAction, useMatomoAnalytics, saveTokenToast, removeTokenToast, saveSwarmSettingsToast, saveIpfsSettingsToast, useAutoCompletion, useShowGasInEditor, useDisplayErrors } from './settingsAction'
@ -181,45 +181,45 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => {
} catch (e) {
console.log(e)
}
}}><FormattedMessage id='settings.reset' defaultMessage='Reset to Default settings' /></button>
}}><FormattedMessage id='settings.reset' /></button>
</div>
</CustomTooltip>
<div className="card-body pt-3 pb-2">
<h6 className="card-title"><FormattedMessage id='settings.general' defaultMessage='General settings' /></h6>
<h6 className="card-title"><FormattedMessage id='settings.general' /></h6>
<div className="mt-2 custom-control custom-checkbox mb-1">
<input onChange={onchangeGenerateContractMetadata} id="generatecontractmetadata" data-id="settingsTabGenerateContractMetadata" type="checkbox" className="custom-control-input" name="contractMetadata" checked={isMetadataChecked} />
<label className={`form-check-label custom-control-label align-middle ${getTextClass('settings/generate-contract-metadata')}`} data-id="settingsTabGenerateContractMetadataLabel" htmlFor="generatecontractmetadata">
<FormattedMessage id='settings.generateContractMetadataText' defaultMessage={generateContractMetadataText} />
<FormattedMessage id='settings.generateContractMetadataText' />
</label>
</div>
<div className="fmt-2 custom-control custom-checkbox mb-1">
<input onChange={onchangeOption} className="custom-control-input" id="alwaysUseVM" data-id="settingsTabAlwaysUseVM" type="checkbox" name="ethereumVM" checked={isEthereumVMChecked} />
<label className={`form-check-label custom-control-label align-middle ${getTextClass('settings/always-use-vm')}`} htmlFor="alwaysUseVM">
<FormattedMessage id='settings.ethereunVMText' defaultMessage={ethereunVMText} />
<FormattedMessage id='settings.ethereunVMText' />
</label>
</div>
<div className="mt-2 custom-control custom-checkbox mb-1">
<input id="editorWrap" className="custom-control-input" type="checkbox" onChange={textWrapEvent} checked={isEditorWrapChecked} />
<label className={`form-check-label custom-control-label align-middle ${getTextClass('settings/text-wrap')}`} htmlFor="editorWrap">
<FormattedMessage id='settings.wordWrapText' defaultMessage={wordWrapText} />
<FormattedMessage id='settings.wordWrapText' />
</label>
</div>
<div className='custom-control custom-checkbox mb-1'>
<input onChange={onchangeUseAutoComplete} id="settingsUseAutoComplete" type="checkbox" className="custom-control-input" checked={isAutoCompleteChecked} />
<label className={`form-check-label custom-control-label align-middle ${getTextClass('settings/auto-completion')}`} data-id="settingsAutoCompleteLabel" htmlFor="settingsUseAutoComplete">
<span><FormattedMessage id='settings.useAutoCompleteText' defaultMessage={useAutoCompleteText} /></span>
<span><FormattedMessage id='settings.useAutoCompleteText' /></span>
</label>
</div>
<div className='custom-control custom-checkbox mb-1'>
<input onChange={onchangeShowGasInEditor} id="settingsUseShowGas" type="checkbox" className="custom-control-input" checked={isShowGasInEditorChecked} />
<label className={`form-check-label custom-control-label align-middle ${getTextClass('settings/show-gas')}`} data-id="settingsShowGasLabel" htmlFor="settingsUseShowGas">
<span><FormattedMessage id='settings.useShowGasInEditorText' defaultMessage={useShowGasInEditorText} /></span>
<span><FormattedMessage id='settings.useShowGasInEditorText' /></span>
</label>
</div>
<div className='custom-control custom-checkbox mb-1'>
<input onChange={onchangeDisplayErrors} id="settingsDisplayErrors" type="checkbox" className="custom-control-input" checked={displayErrorsChecked} />
<label className={`form-check-label custom-control-label align-middle ${getTextClass('settings/display-errors')}`} data-id="displayErrorsLabel" htmlFor="settingsDisplayErrors">
<span><FormattedMessage id='settings.displayErrorsText' defaultMessage={displayErrorsText} /></span>
<span><FormattedMessage id='settings.displayErrorsText' /></span>
</label>
</div>
<div className="custom-control custom-checkbox mb-1">
@ -227,15 +227,15 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => {
<label className={`form-check-label custom-control-label align-middle ${getTextClass('settings/personal-mode')}`} htmlFor="personal">
<i className="fas fa-exclamation-triangle text-warning" aria-hidden="true"></i> <span> </span>
<span> </span>
<FormattedMessage id='settings.enablePersonalModeText' defaultMessage={enablePersonalModeText} />
<FormattedMessage id='settings.enablePersonalModeText' />
&nbsp;
<FormattedMessage id='settings.warnText' defaultMessage={warnText} />
<FormattedMessage id='settings.warnText' />
</label>
</div>
<div className="custom-control custom-checkbox mb-1">
<input onChange={onchangeMatomoAnalytics} id="settingsMatomoAnalytics" type="checkbox" className="custom-control-input" checked={isMatomoChecked} />
<label className={`form-check-label custom-control-label align-middle ${getTextClass('settings/matomo-analytics')}`} htmlFor="settingsMatomoAnalytics">
<span><FormattedMessage id='settings.matomoAnalytics' defaultMessage={matomoAnalytics} /></span>
<span><FormattedMessage id='settings.matomoAnalytics' /></span>
<a href="https://medium.com/p/66ef69e14931/" target="_blank"> Analytics in Remix IDE</a> <span>&</span> <a target="_blank" href="https://matomo.org/free-software">Matomo</a>
</label>
</div>
@ -266,7 +266,7 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => {
const swarmSettings = () => (
<div className="border-top">
<div className="card-body pt-3 pb-2">
<h6 className="card-title"><FormattedMessage id='settings.swarm' defaultMessage={ swarmSettingsTitle } /></h6>
<h6 className="card-title"><FormattedMessage id='settings.swarm' /></h6>
<div className="pt-2 pt-2 mb-0 pb-0"><label className="m-0">PRIVATE BEE ADDRESS:</label>
<div className="text-secondary mb-0 h6">
<input id="swarmprivatebeeaddress" data-id="settingsPrivateBeeAddress" className="form-control" onChange={handleSavePrivateBeeAddress} value={privateBeeAddress} />
@ -280,7 +280,7 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => {
</div>
</div>
<div className="d-flex justify-content-end pt-2">
<input className="btn btn-sm btn-primary ml-2" id="saveswarmsettings" data-id="settingsTabSaveSwarmSettings" onClick={() => saveSwarmSettings()} value={intl.formatMessage({id: 'settings.save', defaultMessage: 'Save'})} type="button" disabled={privateBeeAddress === ''}></input>
<input className="btn btn-sm btn-primary ml-2" id="saveswarmsettings" data-id="settingsTabSaveSwarmSettings" onClick={() => saveSwarmSettings()} value={intl.formatMessage({ id: 'settings.save' })} type="button" disabled={privateBeeAddress === ''}></input>
</div>
</div>
</div>
@ -330,7 +330,7 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => {
const ipfsSettings = () => (
<div className="border-top">
<div className="card-body pt-3 pb-2">
<h6 className="card-title"><FormattedMessage id='settings.ipfs' defaultMessage={ ipfsSettingsText } /></h6>
<h6 className="card-title"><FormattedMessage id='settings.ipfs' /></h6>
<div className="pt-2 mb-0"><label className="m-0">IPFS HOST:</label>
<div className="text-secondary mb-0 h6">
<input placeholder='e.g. ipfs.infura.io' id="settingsIpfsUrl" data-id="settingsIpfsUrl" className="form-control" onChange={handleSaveIpfsUrl} value={ ipfsUrl } />
@ -357,7 +357,7 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => {
</div>
</div>
<div className="d-flex justify-content-end pt-2">
<input className="btn btn-sm btn-primary ml-2" id="saveIpfssettings" data-id="settingsTabSaveIpfsSettings" onClick={() => saveIpfsSettings()} value={intl.formatMessage({id: 'settings.save', defaultMessage: 'Save'})} type="button"></input>
<input className="btn btn-sm btn-primary ml-2" id="saveIpfssettings" data-id="settingsTabSaveIpfsSettings" onClick={() => saveIpfsSettings()} value={intl.formatMessage({ id: 'settings.save' })} type="button"></input>
</div>
</div>
</div>)

@ -577,7 +577,6 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
modal(
intl.formatMessage({
id: 'solidity.addACustomCompiler',
defaultMessage: 'Add a custom compiler',
}),
promptMessage('URL'),
'OK',
@ -740,13 +739,13 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
<div className='pt-0 remixui_compilerSection'>
<div className="mb-1">
<label className="remixui_compilerLabel form-check-label" htmlFor="versionSelector">
<FormattedMessage id='solidity.compiler' defaultMessage='Compiler' />
<FormattedMessage id='solidity.compiler' />
</label>
<CustomTooltip
placement="top"
tooltipId="promptCompilerTooltip"
tooltipClasses="text-nowrap"
tooltipText={<FormattedMessage id='solidity.addACustomCompilerWithURL' defaultMessage='Add a custom compiler with URL' />}
tooltipText={<FormattedMessage id='solidity.addACustomCompilerWithURL' />}
>
<span className="far fa-plus border-0 p-0 ml-3" onClick={() => promptCompiler()}></span>
</CustomTooltip>
@ -773,19 +772,19 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
<div className="mb-2 flex-row-reverse remixui_nightlyBuilds custom-control custom-checkbox">
<input className="mr-2 custom-control-input" id="nightlies" type="checkbox" onChange={handleNightliesChange} checked={state.includeNightlies} />
<label htmlFor="nightlies" data-id="compilerNightliesBuild" className="form-check-label custom-control-label">
<FormattedMessage id='solidity.includeNightlyBuilds' defaultMessage='Include nightly builds' />
<FormattedMessage id='solidity.includeNightlyBuilds' />
</label>
</div>
<div className="mt-2 remixui_compilerConfig custom-control custom-checkbox">
<input className="remixui_autocompile custom-control-input" type="checkbox" onChange={handleAutoCompile} data-id="compilerContainerAutoCompile" id="autoCompile" title="Auto compile" checked={state.autoCompile} />
<label className="form-check-label custom-control-label" htmlFor="autoCompile">
<FormattedMessage id='solidity.autoCompile' defaultMessage='Auto compile' />
<FormattedMessage id='solidity.autoCompile' />
</label>
</div>
<div className="mt-1 mb-2 remixui_compilerConfig custom-control custom-checkbox">
<input className="remixui_autocompile custom-control-input" onChange={handleHideWarningsChange} id="hideWarningsBox" type="checkbox" title="Hide warnings" checked={state.hideWarnings} />
<label className="form-check-label custom-control-label" htmlFor="hideWarningsBox">
<FormattedMessage id='solidity.hideWarnings' defaultMessage='Hide warnings' />
<FormattedMessage id='solidity.hideWarnings' />
</label>
</div>
{
@ -793,7 +792,7 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
<div className="mt-3 remixui_compilerConfig custom-control custom-checkbox">
<input className="remixui_autocompile custom-control-input" onChange={updatehhCompilation} id="enableHardhat" type="checkbox" title="Enable Hardhat Compilation" checked={hhCompilation} />
<label className="form-check-label custom-control-label" htmlFor="enableHardhat">
<FormattedMessage id='solidity.enableHardhat' defaultMessage='Enable Hardhat Compilation' />
<FormattedMessage id='solidity.enableHardhat' />
</label>
<a className="mt-1 text-nowrap" href='https://remix-ide.readthedocs.io/en/latest/hardhat.html#enable-hardhat-compilation' target={'_blank'}>
<CustomTooltip
@ -801,7 +800,7 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
tooltipClasses="text-nowrap"
tooltipId="overlay-tooltip-hardhat"
tooltipText={<span className="border bg-light text-dark p-1 pr-3" style={{ minWidth: '230px' }}>
<FormattedMessage id='solidity.learnHardhat' defaultMessage='Learn how to use Hardhat Compilation' />
<FormattedMessage id='solidity.learnHardhat' />
</span>}
>
<i style={{ fontSize: 'medium' }} className={'ml-2 fal fa-info-circle'} aria-hidden="true"></i>
@ -814,7 +813,7 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
<div className="mt-3 remixui_compilerConfig custom-control custom-checkbox">
<input className="remixui_autocompile custom-control-input" onChange={updateTruffleCompilation} id="enableTruffle" type="checkbox" title="Enable Truffle Compilation" checked={truffleCompilation} />
<label className="form-check-label custom-control-label" htmlFor="enableTruffle">
<FormattedMessage id='solidity.enableTruffle' defaultMessage='Enable Truffle Compilation' />
<FormattedMessage id='solidity.enableTruffle' />
</label>
<a className="mt-1 text-nowrap" href='https://remix-ide.readthedocs.io/en/latest/truffle.html#enable-truffle-compilation' target={'_blank'}>
<CustomTooltip
@ -822,7 +821,7 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
tooltipClasses="text-nowrap"
tooltipId="overlay-tooltip-truffle"
tooltipText={<span className="border bg-light text-dark p-1 pr-3" style={{ minWidth: '230px' }}>
<FormattedMessage id='solidity.learnTruffle' defaultMessage='Learn how to use Truffle Compilation' />
<FormattedMessage id='solidity.learnTruffle' />
</span>}
>
<i style={{ fontSize: 'medium' }} className={'ml-2 fal fa-info-circle'} aria-hidden="true"></i>
@ -834,7 +833,7 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
<div className="d-flex px-4 remixui_compilerConfigSection justify-content-between" onClick={toggleConfigurations}>
<div className="d-flex">
<label className="mt-1 remixui_compilerConfigSection">
<FormattedMessage id='solidity.advancedConfigurations' defaultMessage='Advanced Configurations' />
<FormattedMessage id='solidity.advancedConfigurations' />
</label>
</div>
<div>
@ -847,13 +846,13 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
<div className="d-flex pb-1 remixui_compilerConfig custom-control custom-radio">
<input className="custom-control-input" type="radio" name="configradio" value="manual" onChange={toggleConfigType} checked={!state.useFileConfiguration} id="scManualConfig" />
<label className="form-check-label custom-control-label" htmlFor="scManualConfig" data-id="scManualConfiguration">
<FormattedMessage id='solidity.compilerConfiguration' defaultMessage='Compiler configuration' />
<FormattedMessage id='solidity.compilerConfiguration' />
</label>
</div>
<div className={`flex-column 'd-flex'}`}>
<div className="mb-2 ml-4">
<label className="remixui_compilerLabel form-check-label" htmlFor="compilierLanguageSelector">
<FormattedMessage id='solidity.language' defaultMessage='Language' />
<FormattedMessage id='solidity.language' />
</label>
<CustomTooltip
placement="right-start"
@ -871,7 +870,7 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
</div>
<div className="mb-2 ml-4">
<label className="remixui_compilerLabel form-check-label" htmlFor="evmVersionSelector">
<FormattedMessage id='solidity.evmVersion' defaultMessage='EVM Version' />
<FormattedMessage id='solidity.evmVersion' />
</label>
<select value={state.evmVersion} onChange={(e) => handleEvmVersionChange(e.target.value)} disabled={state.useFileConfiguration} className="custom-select" id="evmVersionSelector">
{compileTabLogic.evmVersions.map((version, index) => (<option key={index} data-id={state.evmVersion === version ? 'selected' : ''} value={version}>{version}</option>))}
@ -881,7 +880,7 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
<div className="justify-content-between align-items-center d-flex">
<input onChange={(e) => { handleOptimizeChange(e.target.checked) }} disabled={state.useFileConfiguration} className="custom-control-input" id="optimize" type="checkbox" checked={state.optimize} />
<label className="form-check-label custom-control-label" htmlFor="optimize">
<FormattedMessage id='solidity.enableOptimization' defaultMessage='Enable optimization' />
<FormattedMessage id='solidity.enableOptimization' />
</label>
<input
min="1"
@ -900,7 +899,7 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
<div className="d-flex pb-1 remixui_compilerConfig custom-control custom-radio">
<input className="custom-control-input" type="radio" name="configradio" value="file" onChange={toggleConfigType} checked={state.useFileConfiguration} id="scFileConfig" />
<label className="form-check-label custom-control-label" htmlFor="scFileConfig" data-id="scFileConfiguration">
<FormattedMessage id='solidity.useConfigurationFile' defaultMessage='Use configuration file' />
<FormattedMessage id='solidity.useConfigurationFile' />
</label>
</div>
<div className={`pt-2 ml-4 ml-2 align-items-start justify-content-between d-flex`}>
@ -932,7 +931,7 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
}}
/>
{!showFilePathInput && <button disabled={!state.useFileConfiguration} data-id="scConfigChangeFilePath" className="btn btn-sm btn-secondary" onClick={() => { setShowFilePathInput(true) }}>
<FormattedMessage id='solidity.change' defaultMessage='Change' />
<FormattedMessage id='solidity.change' />
</button>}
</div>
</div>
@ -950,18 +949,16 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
{ <i ref={compileIcon} className="fas fa-sync remixui_iconbtn ml-2" aria-hidden="true"></i> }
<div className="d-flex justify-content-between align-items-center">
<span>
<FormattedMessage id='solidity.compile' defaultMessage='Compile' />
<FormattedMessage id='solidity.compile' />
</span>
<span className="ml-1 text-nowrap">
{typeof state.compiledFileName === 'string'
? extractNameFromKey(state.compiledFileName) ||
`<${intl.formatMessage({
id: 'solidity.noFileSelected',
defaultMessage: 'no file selected',
})}>`
: `<${intl.formatMessage({
id: 'solidity.noFileSelected',
defaultMessage: 'no file selected',
})}>`}
</span>
</div>
@ -985,7 +982,7 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
</div>}
>
<span>
<FormattedMessage id='solidity.compileAndRunScript' defaultMessage='Compile and Run script' />
<FormattedMessage id='solidity.compileAndRunScript' />
</span>
</CustomTooltip>
</button>

@ -204,10 +204,10 @@ export const ContractSelection = (props: ContractSelectionProps) => {
placement="right-start"
tooltipId="publishOnIpfsTooltip"
tooltipClasses="text-nowrap"
tooltipText={`${intl.formatMessage({id: 'solidity.publishOn', defaultMessage: 'Publish on'})} Ipfs`}
tooltipText={`${intl.formatMessage({ id: 'solidity.publishOn' })} Ipfs`}
>
<span>
<span><FormattedMessage id='solidity.publishOn' defaultMessage='Publish on' /> Ipfs</span>
<span><FormattedMessage id='solidity.publishOn' /> Ipfs</span>
<img id="ipfsLogo" className="remixui_storageLogo ml-2" src="assets/img/ipfs.webp" />
</span>
</CustomTooltip>
@ -217,10 +217,10 @@ export const ContractSelection = (props: ContractSelectionProps) => {
placement="right-start"
tooltipId="publishOnSwarmTooltip"
tooltipClasses="text-nowrap"
tooltipText={`${intl.formatMessage({id: 'solidity.publishOn', defaultMessage: 'Publish on'})} Swarm`}
tooltipText={`${intl.formatMessage({ id: 'solidity.publishOn' })} Swarm`}
>
<span>
<span><FormattedMessage id='solidity.publishOn' defaultMessage='Publish on' /> Swarm</span>
<span><FormattedMessage id='solidity.publishOn' /> Swarm</span>
<img id="swarmLogo" className="remixui_storageLogo ml-2" src="assets/img/swarm.webp" />
</span>
</CustomTooltip>
@ -232,7 +232,7 @@ export const ContractSelection = (props: ContractSelectionProps) => {
tooltipClasses="text-nowrap"
tooltipText="Display Contract Details"
>
<span><FormattedMessage id='solidity.compilationDetails' defaultMessage='Compilation Details' /></span>
<span><FormattedMessage id='solidity.compilationDetails' /></span>
</CustomTooltip>
</button>
{/* Copy to Clipboard */}

@ -472,7 +472,7 @@ export const RemixUiTerminal = (props: RemixUiTerminalProps) => {
htmlFor="listenNetworkCheck"
data-id="listenNetworkCheckInput"
>
<FormattedMessage id='terminal.listen' defaultMessage='listen on all transactions' />
<FormattedMessage id='terminal.listen' />
</label>
</div>
<div className="remix_ui_terminal_search d-flex align-items-center h-100">
@ -485,7 +485,7 @@ export const RemixUiTerminal = (props: RemixUiTerminalProps) => {
type="text"
className="remix_ui_terminal_filter border form-control"
id="searchInput"
placeholder={intl.formatMessage({id: 'terminal.search', defaultMessage: "Search with transaction hash or address"})}
placeholder={intl.formatMessage({ id: 'terminal.search' })}
data-id="terminalInputSearch" />
</div>
</div>
@ -633,4 +633,4 @@ function isHtml (value) {
|| value.indexOf('<b') !== -1
}
export default RemixUiTerminal
export default RemixUiTerminal

@ -4,28 +4,28 @@ import { FormattedMessage } from 'react-intl'
const TerminalWelcomeMessage = ({ packageJson, storage }) => {
return (
<div className="remix_ui_terminal_block px-4 " data-id="block_null">
<div className="remix_ui_terminal_welcome"> <FormattedMessage id='terminal.welcomeText1' defaultMessage='Welcome to' /> Remix {packageJson} </div><br />
<div className=""><FormattedMessage id='terminal.welcomeText2' defaultMessage='Your files are stored in' /> {(window as any).remixFileSystem.name}, {storage} <FormattedMessage id='terminal.used' defaultMessage='used' /></div><br />
<div><FormattedMessage id='terminal.welcomeText3' defaultMessage='You can use this terminal to' />: </div>
<div className="remix_ui_terminal_welcome"> <FormattedMessage id='terminal.welcomeText1' /> Remix {packageJson} </div><br />
<div className=""><FormattedMessage id='terminal.welcomeText2' /> {(window as any).remixFileSystem.name}, {storage} <FormattedMessage id='terminal.used' /></div><br />
<div><FormattedMessage id='terminal.welcomeText3' />: </div>
<ul className='ml-0 mr-4'>
<li key="details-and-debug" ><FormattedMessage id='terminal.welcomeText4' defaultMessage='Check transactions details and start debugging' />.</li>
<li key="run-javascript"><FormattedMessage id='terminal.welcomeText5' defaultMessage='Execute JavaScript scripts' />:
<li key="details-and-debug" ><FormattedMessage id='terminal.welcomeText4' />.</li>
<li key="run-javascript"><FormattedMessage id='terminal.welcomeText5' />:
<br />
<i> - <FormattedMessage id='terminal.welcomeText6' defaultMessage='Input a script directly in the command line interface' /> </i>
<i> - <FormattedMessage id='terminal.welcomeText6' /> </i>
<br />
<i> - <FormattedMessage id='terminal.welcomeText7' defaultMessage='Select a Javascript file in the file explorer and then run \`remix.execute()\` or \`remix.exeCurrent()\` in the command line interface' /> </i>
<i> - <FormattedMessage id='terminal.welcomeText7' /> </i>
<br />
<i> - <FormattedMessage id='terminal.welcomeText8' defaultMessage='Right click on a JavaScript file in the file explorer and then click \`Run\`' /> </i>
<i> - <FormattedMessage id='terminal.welcomeText8' /> </i>
</li>
</ul>
<div><FormattedMessage id='terminal.welcomeText9' defaultMessage='The following libraries are accessible' />:</div>
<div><FormattedMessage id='terminal.welcomeText9' />:</div>
<ul className='ml-0 mr-4'>
<li key="web3-152"><a target="_blank" href="https://web3js.readthedocs.io/en/1.0/">web3 version 1.5.2</a></li>
<li key="ethers-console"><a target="_blank" href="https://docs.ethers.io">ethers.js</a> </li>
<li key="remix-console">remix</li>
</ul>
<div><FormattedMessage id='terminal.welcomeText10' defaultMessage='Type the library name to see available commands' />.</div>
<div><FormattedMessage id='terminal.welcomeText10' />.</div>
</div>
)
}

@ -19,7 +19,7 @@ export function RemixUiThemeModule({ themeModule }: RemixUiThemeModuleProps) {
return (
<div className="border-top">
<div className="card-body pt-3 pb-2">
<h6 className="card-title"><FormattedMessage id='settings.themes' defaultMessage='Themes' /></h6>
<h6 className="card-title"><FormattedMessage id='settings.themes' /></h6>
<div className="card-text themes-container">
{themeModule.getThemes()
? themeModule.getThemes().map((theme, idx) => (

@ -72,17 +72,17 @@ export function Workspace () {
}, [currentWorkspace])
const renameCurrentWorkspace = () => {
global.modal(intl.formatMessage({id: 'filePanel.workspace.rename', defaultMessage: 'Rename Current Workspace'}), renameModalMessage(), 'OK', onFinishRenameWorkspace, '')
global.modal(intl.formatMessage({ id: 'filePanel.workspace.rename' }), renameModalMessage(), 'OK', onFinishRenameWorkspace, '')
}
const createWorkspace = () => {
global.modal(intl.formatMessage({id: 'filePanel.workspace.create', defaultMessage: 'Create Workspace'}), createModalMessage(), 'OK', onFinishCreateWorkspace, '')
global.modal(intl.formatMessage({ id: 'filePanel.workspace.create' }), createModalMessage(), 'OK', onFinishCreateWorkspace, '')
}
const deleteCurrentWorkspace = () => {
global.modal(
intl.formatMessage({id: 'filePanel.workspace.delete', defaultMessage: 'Delete Current Workspace'}),
intl.formatMessage({id: 'filePanel.workspace.deleteConfirm', defaultMessage: 'Are you sure to delete the current workspace?'}),
intl.formatMessage({ id: 'filePanel.workspace.delete' }),
intl.formatMessage({ id: 'filePanel.workspace.deleteConfirm' }),
'OK',
onFinishDeleteWorkspace,
''
@ -91,7 +91,7 @@ export function Workspace () {
const cloneGitRepository = () => {
global.modal(
intl.formatMessage({id: 'filePanel.workspace.clone', defaultMessage: 'Clone Git Repository'}),
intl.formatMessage({ id: 'filePanel.workspace.clone' }),
cloneModalMessage(),
'OK',
handleTypingUrl,
@ -262,7 +262,7 @@ export function Workspace () {
const createModalMessage = () => {
return (
<>
<label id="selectWsTemplate" className="form-check-label" style={{fontWeight: "bolder"}}><FormattedMessage id='filePanel.workspace.chooseTemplate' defaultMessage='Choose a template' /></label>
<label id="selectWsTemplate" className="form-check-label" style={{fontWeight: "bolder"}}><FormattedMessage id='filePanel.workspace.chooseTemplate' /></label>
<select name="wstemplate" className="mb-3 form-control custom-select" id="wstemplate" defaultValue='remixDefault' ref={workspaceCreateTemplateInput} onChange={updateWsName}>
<optgroup style={{fontSize: "medium"}} label="General">
<option style={{fontSize: "small"}} value='remixDefault'>Default</option>
@ -336,7 +336,7 @@ export function Workspace () {
Initialize workspace as a new git repository
</label>
</div>
{!global.fs.gitConfig.username || !global.fs.gitConfig.email ?
{!global.fs.gitConfig.username || !global.fs.gitConfig.email ?
(
<div className='text-warning'>Please add username and email to Remix GitHub Settings to use git features.</div>)
:<></>
@ -364,7 +364,7 @@ export function Workspace () {
<input
type="text"
data-id="modalDialogCustomPromptTextClone"
placeholder={intl.formatMessage({id: 'filePanel.workspace.enterGitUrl', defaultMessage: 'Enter git repository url'})}
placeholder={intl.formatMessage({ id: 'filePanel.workspace.enterGitUrl' })}
ref={cloneUrlRef}
className="form-control"
/>
@ -377,7 +377,7 @@ export function Workspace () {
placement="right"
tooltipId="createWorkspaceTooltip"
tooltipClasses="text-nowrap"
tooltipText={<FormattedMessage id='filePanel.workspace.create' defaultMessage='Create Workspace' />}
tooltipText={<FormattedMessage id='filePanel.workspace.create' />}
>
<div
data-id='workspaceCreate'
@ -400,14 +400,14 @@ export function Workspace () {
className='far fa-plus pl-2'
>
</span>
<span className="pl-3"><FormattedMessage id='filePanel.create' defaultMessage='Create' /></span>
<span className="pl-3"><FormattedMessage id='filePanel.create' /></span>
</div>
</CustomTooltip>,
<CustomTooltip
placement="right-start"
tooltipId="createWorkspaceTooltip"
tooltipClasses="text-nowrap"
tooltipText={<FormattedMessage id='filePanel.workspace.delete' defaultMessage='Delete Workspace' />}
tooltipText={<FormattedMessage id='filePanel.workspace.delete' />}
>
<div
data-id='workspaceDelete'
@ -430,14 +430,14 @@ export function Workspace () {
className='far fa-trash pl-2'
>
</span>
<span className="pl-3"><FormattedMessage id='filePanel.delete' defaultMessage='Delete' /></span>
<span className="pl-3"><FormattedMessage id='filePanel.delete' /></span>
</div>
</CustomTooltip>,
<CustomTooltip
placement='right-start'
tooltipClasses="text-nowrap"
tooltipId="workspaceRenametooltip"
tooltipText={<FormattedMessage id='filePanel.workspace.rename' defaultMessage='Rename Workspace' />}
tooltipText={<FormattedMessage id='filePanel.workspace.rename' />}
>
<div onClick={() => {
renameCurrentWorkspace()
@ -458,7 +458,7 @@ export function Workspace () {
}}
className='far fa-edit pl-2'>
</span>
<span className="pl-3"><FormattedMessage id='filePanel.rename' defaultMessage='Rename' /></span>
<span className="pl-3"><FormattedMessage id='filePanel.rename' /></span>
</div>
</CustomTooltip>,
<Dropdown.Divider className="border mb-0 mt-0" />,
@ -466,7 +466,7 @@ export function Workspace () {
placement="right-start"
tooltipId="cloneWorkspaceTooltip"
tooltipClasses="text-nowrap"
tooltipText={<FormattedMessage id='filePanel.workspace.clone' defaultMessage='Clone Git Repository' />}
tooltipText={<FormattedMessage id='filePanel.workspace.clone' />}
>
<div
data-id='cloneGitRepository'
@ -489,7 +489,7 @@ export function Workspace () {
className='fab fa-github pl-2'
>
</span>
<span className="pl-3"><FormattedMessage id='filePanel.clone' defaultMessage='Clone' /></span>
<span className="pl-3"><FormattedMessage id='filePanel.clone' /></span>
</div>
</CustomTooltip>,
<Dropdown.Divider className="border mt-0 mb-0 remixui_menuhr" style={{ pointerEvents: 'none' }}/>,
@ -497,7 +497,7 @@ export function Workspace () {
placement="right-start"
tooltipId="createWorkspaceTooltip"
tooltipClasses="text-nowrap"
tooltipText={<FormattedMessage id='filePanel.workspace.download' defaultMessage='Download Workspace' />}
tooltipText={<FormattedMessage id='filePanel.workspace.download' />}
>
<div
data-id='workspacesDownload'
@ -520,14 +520,14 @@ export function Workspace () {
className='far fa-download pl-2 '
>
</span>
<span className="pl-3"><FormattedMessage id='filePanel.download' defaultMessage='Download' /></span>
<span className="pl-3"><FormattedMessage id='filePanel.download' /></span>
</div>
</CustomTooltip>,
<CustomTooltip
placement="right-start"
tooltipId="createWorkspaceTooltip"
tooltipClasses="text-nowrap"
tooltipText={<FormattedMessage id='filePanel.workspace.restore' defaultMessage='Restore Workspace Backup' />}
tooltipText={<FormattedMessage id='filePanel.workspace.restore' />}
>
<div
data-id='workspacesRestore'
@ -550,7 +550,7 @@ export function Workspace () {
className='far fa-upload pl-2'
>
</span>
<span className="pl-3"><FormattedMessage id='filePanel.restore' defaultMessage='Restore' /></span>
<span className="pl-3"><FormattedMessage id='filePanel.restore' /></span>
</div>
</CustomTooltip>,
<Dropdown.Divider className="border mt-0 mb-0 remixui_menuhr" style={{ pointerEvents: 'none' }}/>,
@ -598,7 +598,7 @@ export function Workspace () {
<div className="d-flex justify-content-between">
<span className="d-flex align-items-end">
<label className="pl-1 form-check-label" htmlFor="workspacesSelect" style={{wordBreak: 'keep-all'}}>
<FormattedMessage id='filePanel.workspace' defaultMessage='WORKSPACES' />
<FormattedMessage id='filePanel.workspace' />
</label>
</span>
{currentWorkspace !== LOCALHOST ? (<span className="remixui_menu remixui_topmenu d-flex justify-content-between align-items-end w-75">
@ -606,7 +606,7 @@ export function Workspace () {
placement="top-end"
tooltipId="createWorkspaceTooltip"
tooltipClasses="text-nowrap"
tooltipText={<FormattedMessage id='filePanel.create' defaultMessage='Create' />}
tooltipText={<FormattedMessage id='filePanel.create' />}
>
<span
hidden={currentWorkspace === LOCALHOST}

Loading…
Cancel
Save