import { Link } from 'react-router';
import GlobalFooterSonarCloud from './GlobalFooterSonarCloud';
import GlobalFooterBranding from './GlobalFooterBranding';
+import InstanceMessage from '../../components/common/InstanceMessage';
import { translate, translateWithParameters } from '../../helpers/l10n';
interface Props {
<p className="big" id="evaluation_warning">
{translate('footer.production_database_warning')}
</p>
- <p>{translate('footer.production_database_explanation')}</p>
+ <p>
+ <InstanceMessage message={translate('footer.production_database_explanation')} />
+ </p>
</div>
)}
footer.production_database_warning
</p>
<p>
- footer.production_database_explanation
+ <InstanceMessage
+ message="footer.production_database_explanation"
+ />
</p>
</div>
`;
*/
import * as React from 'react';
import { FormattedMessage } from 'react-intl';
+import InstanceMessage from '../../../../components/common/InstanceMessage';
+import NavBarNotif from '../../../../components/nav/NavBarNotif';
import RestartForm from '../../../../components/common/RestartForm';
import { cancelPendingPlugins, PluginPendingResult } from '../../../../api/plugins';
import { Button } from '../../../../components/ui/buttons';
import { translate } from '../../../../helpers/l10n';
-import NavBarNotif from '../../../../components/nav/NavBarNotif';
interface Props {
pending: PluginPendingResult;
return (
<NavBarNotif className="alert alert-info js-pending">
<span className="little-spacer-right">
- {translate('marketplace.sonarqube_needs_to_be_restarted_to')}
+ <InstanceMessage message={translate('marketplace.instance_needs_to_be_restarted_to')} />
</span>
{[
{ length: installing.length, msg: 'marketplace.install_x_plugins' },
<span
className="little-spacer-right"
>
- marketplace.sonarqube_needs_to_be_restarted_to
+ <InstanceMessage
+ message="marketplace.instance_needs_to_be_restarted_to"
+ />
</span>
<span
key="marketplace.install_x_plugins"
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
+import InstanceMessage from '../../../components/common/InstanceMessage';
import TokenForm from '../../users/components/TokensForm';
import { translate } from '../../../helpers/l10n';
<h2>{translate('users.tokens')}</h2>
<div className="boxed-group-inner">
<div className="big-spacer-bottom big-spacer-right markdown">
- {translate('my_account.tokens_description')}
+ <InstanceMessage message={translate('my_account.tokens_description')} />
</div>
<TokenForm login={login} />
<div
className="big-spacer-bottom big-spacer-right markdown"
>
- my_account.tokens_description
+ <InstanceMessage
+ message="my_account.tokens_description"
+ />
</div>
<TokensForm
login="user"
import { Profile, deactivateRule, activateRule } from '../../../api/quality-profiles';
import { RuleActivation, RuleDetails, RuleInheritance } from '../../../app/types';
import ConfirmButton from '../../../components/controls/ConfirmButton';
-import { translate, translateWithParameters } from '../../../helpers/l10n';
-import { getQualityProfileUrl } from '../../../helpers/urls';
import BuiltInQualityProfileBadge from '../../quality-profiles/components/BuiltInQualityProfileBadge';
-import Tooltip from '../../../components/controls/Tooltip';
+import InstanceMessage from '../../../components/common/InstanceMessage';
import SeverityHelper from '../../../components/shared/SeverityHelper';
+import Tooltip from '../../../components/controls/Tooltip';
import { Button } from '../../../components/ui/buttons';
+import { getQualityProfileUrl } from '../../../helpers/urls';
+import { translate, translateWithParameters } from '../../../helpers/l10n';
interface Props {
activations: RuleActivation[] | undefined;
<div className="coding-rule-section-separator" />
<h3 className="coding-rules-detail-title">
- {translate('coding_rules.quality_profiles')}
+ <InstanceMessage message={translate('coding_rules.quality_profiles')} />
</h3>
{canActivate && (
import Helmet from 'react-helmet';
import { connect } from 'react-redux';
import ConfirmButton from '../../../components/controls/ConfirmButton';
+import InstanceMessage from '../../../components/common/InstanceMessage';
import { translate } from '../../../helpers/l10n';
import { deleteOrganization } from '../actions';
import { Organization } from '../../../app/types';
render() {
const { hasPaidPlan } = this.state;
- const { onSonarCloud } = this.context;
const title = translate('organization.delete');
return (
<>
<header className="page-header">
<h1 className="page-title">{title}</h1>
<div className="page-description">
- {onSonarCloud
- ? translate('organization.delete.description.sonarcloud')
- : translate('organization.delete.description')}
+ <InstanceMessage message={translate('organization.delete.description')} />
</div>
</header>
<ConfirmButton
<div
className="page-description"
>
- organization.delete.description.sonarcloud
+ <InstanceMessage
+ message="organization.delete.description"
+ />
</div>
</header>
<ConfirmButton
<div
className="page-description"
>
- organization.delete.description
+ <InstanceMessage
+ message="organization.delete.description"
+ />
</div>
</header>
<ConfirmButton
import PropTypes from 'prop-types';
import HelpTooltip from '../../../components/controls/HelpTooltip';
import { translate } from '../../../helpers/l10n';
+import InstanceMessage from '../../../components/common/InstanceMessage';
export default class ListHeader extends React.PureComponent {
static propTypes = {
renderTooltip = permission =>
permission.key === 'user' || permission.key === 'codeviewer' ? (
<div>
- {translate('projects_role', permission.key, 'desc')}
+ <InstanceMessage message={translate('projects_role', permission.key, 'desc')} />
<div className="alert alert-warning spacer-top">
{translate('projects_role.public_projects_warning')}
</div>
</div>
) : (
- translate('projects_role', permission.key, 'desc')
+ <InstanceMessage message={translate('projects_role', permission.key, 'desc')} />
);
render() {
*/
import * as React from 'react';
import HelpTooltip from '../../../../components/controls/HelpTooltip';
+import InstanceMessage from '../../../../components/common/InstanceMessage';
import Tooltip from '../../../../components/controls/Tooltip';
import { translate, translateWithParameters } from '../../../../helpers/l10n';
if (this.props.showPublicProjectsWarning && ['user', 'codeviewer'].includes(permission.key)) {
return (
<div>
- {permission.description}
+ <InstanceMessage message={permission.description} />
<div className="alert alert-warning spacer-top">
{translate('projects_role.public_projects_warning')}
</div>
</div>
);
}
- return permission.description;
+ return <InstanceMessage message={permission.description} />;
};
render() {
// @flow
import React from 'react';
import PropTypes from 'prop-types';
+import InstanceMessage from '../../../components/common/InstanceMessage';
import { translate } from '../../../helpers/l10n';
export default class PageHeader extends React.PureComponent {
: translate('settings.page');
const description =
- this.props.component != null
- ? translate('project_settings.page.description')
- : translate('settings.page.description');
+ this.props.component != null ? (
+ translate('project_settings.page.description')
+ ) : (
+ <InstanceMessage message={translate('settings.page.description')} />
+ );
return (
<header className="page-header">
import OrganizationStep from './OrganizationStep';
import AnalysisStep from './AnalysisStep';
import ProjectWatcher from './ProjectWatcher';
+import InstanceMessage from '../../../components/common/InstanceMessage';
+import handleRequiredAuthentication from '../../../app/utils/handleRequiredAuthentication';
import { skipOnboarding } from '../../../api/users';
import { translate, translateWithParameters } from '../../../helpers/l10n';
import { getProjectUrl } from '../../../helpers/urls';
-import handleRequiredAuthentication from '../../../app/utils/handleRequiredAuthentication';
import './styles.css';
/*::
let stepNumber = 1;
- const header = translate(sonarCloud ? 'onboarding.header.sonarcloud' : 'onboarding.header');
-
return (
<div className="modal-container">
- <Helmet title={header} titleTemplate="%s" />
+ <InstanceMessage message={translate('onboarding.header')}>
+ {transformedMessage => <Helmet title={transformedMessage} titleTemplate="%s" />}
+ </InstanceMessage>
<div className="page page-limited onboarding">
<header className="page-header">
- <h1 className="page-title">{header}</h1>
+ <h1 className="page-title">
+ <InstanceMessage message={translate('onboarding.header')} />
+ </h1>
<div className="page-actions">
{this.state.skipping ? (
<i className="spinner" />
<div
className="modal-container"
>
- <HelmetWrapper
- defer={true}
- encodeSpecialCharacters={true}
- title="onboarding.header"
- titleTemplate="%s"
+ <InstanceMessage
+ message="onboarding.header"
/>
<div
className="page page-limited onboarding"
<h1
className="page-title"
>
- onboarding.header
+ <InstanceMessage
+ message="onboarding.header"
+ />
</h1>
<div
className="page-actions"
<div
className="modal-container"
>
- <HelmetWrapper
- defer={true}
- encodeSpecialCharacters={true}
- title="onboarding.header"
- titleTemplate="%s"
+ <InstanceMessage
+ message="onboarding.header"
/>
<div
className="page page-limited onboarding"
<h1
className="page-title"
>
- onboarding.header
+ <InstanceMessage
+ message="onboarding.header"
+ />
</h1>
<div
className="page-actions"
<div
className="modal-container"
>
- <HelmetWrapper
- defer={true}
- encodeSpecialCharacters={true}
- title="onboarding.header.sonarcloud"
- titleTemplate="%s"
+ <InstanceMessage
+ message="onboarding.header"
/>
<div
className="page page-limited onboarding"
<h1
className="page-title"
>
- onboarding.header.sonarcloud
+ <InstanceMessage
+ message="onboarding.header"
+ />
</h1>
<div
className="page-actions"
<div
className="modal-container"
>
- <HelmetWrapper
- defer={true}
- encodeSpecialCharacters={true}
- title="onboarding.header.sonarcloud"
- titleTemplate="%s"
+ <InstanceMessage
+ message="onboarding.header"
/>
<div
className="page page-limited onboarding"
<h1
className="page-title"
>
- onboarding.header.sonarcloud
+ <InstanceMessage
+ message="onboarding.header"
+ />
</h1>
<div
className="page-actions"
<div
className="modal-container"
>
- <HelmetWrapper
- defer={true}
- encodeSpecialCharacters={true}
- title="onboarding.header.sonarcloud"
- titleTemplate="%s"
+ <InstanceMessage
+ message="onboarding.header"
/>
<div
className="page page-limited onboarding"
<h1
className="page-title"
>
- onboarding.header.sonarcloud
+ <InstanceMessage
+ message="onboarding.header"
+ />
</h1>
<div
className="page-actions"
// @flow
import React from 'react';
import CodeSnippet from '../../../../components/common/CodeSnippet';
+import InstanceMessage from '../../../../components/common/InstanceMessage';
import { translate } from '../../../../helpers/l10n';
/*::
return (
<div>
<h4 className="spacer-bottom">{translate('onboarding.analysis.java.gradle.header')}</h4>
- <p
- className="spacer-bottom markdown"
- dangerouslySetInnerHTML={{ __html: translate('onboarding.analysis.java.gradle.text.1') }}
- />
+ <InstanceMessage message={translate('onboarding.analysis.java.gradle.text.1')}>
+ {transformedMessage => (
+ <p
+ className="spacer-bottom markdown"
+ dangerouslySetInnerHTML={{ __html: transformedMessage }}
+ />
+ )}
+ </InstanceMessage>
<CodeSnippet snippet={config} />
<p className="spacer-top spacer-bottom markdown">
{translate('onboarding.analysis.java.gradle.text.2')}
// @flow
import React from 'react';
import CodeSnippet from '../../../../components/common/CodeSnippet';
+import InstanceMessage from '../../../../components/common/InstanceMessage';
import { translate } from '../../../../helpers/l10n';
/*::
return (
<div>
<h4 className="spacer-bottom">{translate('onboarding.analysis.java.maven.header')}</h4>
- <p className="spacer-bottom markdown">{translate('onboarding.analysis.java.maven.text')}</p>
+ <p className="spacer-bottom markdown">
+ <InstanceMessage message={translate('onboarding.analysis.java.maven.text')} />
+ </p>
<CodeSnippet snippet={command} />
<p
className="big-spacer-top markdown"
>
onboarding.analysis.java.gradle.header
</h4>
- <p
- className="spacer-bottom markdown"
- dangerouslySetInnerHTML={
- Object {
- "__html": "onboarding.analysis.java.gradle.text.1",
- }
- }
+ <InstanceMessage
+ message="onboarding.analysis.java.gradle.text.1"
/>
<CodeSnippet
snippet="plugins {
>
onboarding.analysis.java.gradle.header
</h4>
- <p
- className="spacer-bottom markdown"
- dangerouslySetInnerHTML={
- Object {
- "__html": "onboarding.analysis.java.gradle.text.1",
- }
- }
+ <InstanceMessage
+ message="onboarding.analysis.java.gradle.text.1"
/>
<CodeSnippet
snippet="plugins {
<p
className="spacer-bottom markdown"
>
- onboarding.analysis.java.maven.text
+ <InstanceMessage
+ message="onboarding.analysis.java.maven.text"
+ />
</p>
<CodeSnippet
snippet={
<p
className="spacer-bottom markdown"
>
- onboarding.analysis.java.maven.text
+ <InstanceMessage
+ message="onboarding.analysis.java.maven.text"
+ />
</p>
<CodeSnippet
snippet={
--- /dev/null
+/*
+ * SonarQube
+ * Copyright (C) 2009-2018 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+import * as React from 'react';
+import * as PropTypes from 'prop-types';
+
+interface Props {
+ children?: (transformedMessage: string) => React.ReactNode;
+ message: string;
+}
+
+const InstanceMessage: React.SFC<Props> = (
+ { children, message }: Props,
+ context: { onSonarCloud: boolean }
+) => {
+ const transformedMessage = message.replace(
+ /\{instance\}/gim,
+ context.onSonarCloud ? 'SonarCloud' : 'SonarQube'
+ );
+
+ if (children) {
+ return children(transformedMessage);
+ }
+
+ return transformedMessage as any;
+};
+
+InstanceMessage.contextTypes = {
+ onSonarCloud: PropTypes.bool
+};
+
+export default InstanceMessage;
--- /dev/null
+/*
+ * SonarQube
+ * Copyright (C) 2009-2018 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+import * as React from 'react';
+import { shallow } from 'enzyme';
+import InstanceMessage from '../InstanceMessage';
+
+it('should replace {instance} with "SonarQube"', () => {
+ const childFunc = jest.fn();
+ getWrapper(childFunc, 'foo {instance} bar');
+ expect(childFunc).toHaveBeenCalledWith('foo SonarQube bar');
+});
+
+it('should replace {instance} with "SonarCloud"', () => {
+ const childFunc = jest.fn();
+ getWrapper(childFunc, 'foo {instance} bar', true);
+ expect(childFunc).toHaveBeenCalledWith('foo SonarCloud bar');
+});
+
+it('should return the same message', () => {
+ const childFunc = jest.fn();
+ getWrapper(childFunc, 'no instance to replace');
+ expect(childFunc).toHaveBeenCalledWith('no instance to replace');
+});
+
+function getWrapper(
+ children: (msg: string) => React.ReactNode,
+ message: string,
+ onSonarCloud = false
+) {
+ return shallow(<InstanceMessage message={message}>{children}</InstanceMessage>, {
+ context: { onSonarCloud }
+ });
+}
project_links.page.description=Edit some links associated with this project.
projects_management.page.description=Use this page to delete multiple projects at once, or to provision projects if you would like to configure them before the first analysis. Note that once a project is provisioned, you have access to perform all project configurations on it.
settings.page=General Settings
-settings.page.description=Edit global settings for this SonarQube instance.
+settings.page.description=Edit global settings for this {instance} instance.
system_info.page=System Info
project_quality_profiles.page=Quality Profiles
project_quality_profiles.page.description=Choose which profile is associated with this project on a language-by-language basis. (Note that you will only need to select profiles for multiple languages for multi-language projects.)
coding_rules.parameters=Parameters
coding_rules.parameters.default_value=Default Value:
coding_rules.quality_profiles=Quality Profiles
-coding_rules.quality_profiles.template_caption=This rule template was activated on the following profiles in previous versions of SonarQube. It is not possible anymore to do so. Instead, please create a custom rule.
+coding_rules.quality_profiles.template_caption=This rule template was activated on the following profiles in previous versions of {instance}. It is not possible anymore to do so. Instead, please create a custom rule.
coding_rules.quality_profile=Quality Profile
coding_rules.reactivate=Reactivate
coding_rules.reactivate.help=A rule with the same key has been previously deleted. Please reactivate the existing rule or modify the key to create a new rule.
my_account.no_project_notifications=You have not set project notifications yet.
my_account.profile=Profile
my_account.security=Security
-my_account.tokens_description=If you want to enforce security by not providing credentials of a real SonarQube user to run your code scan or to invoke web services, you can provide a User Token as a replacement of the user login. This will increase the security of your installation by not letting your analysis user's password going through your network.
+my_account.tokens_description=If you want to enforce security by not providing credentials of a real {instance} user to run your code scan or to invoke web services, you can provide a User Token as a replacement of the user login. This will increase the security of your installation by not letting your analysis user's password going through your network.
my_account.projects=Projects
my_account.projects.description=Those projects are the ones you are administering.
my_account.projects.no_results=You are not administering any project yet.
global_permissions.gateadmin=Administer Quality Gates
global_permissions.gateadmin.desc=Ability to perform any action on quality gates.
global_permissions.scan=Execute Analysis
-global_permissions.scan.desc=Ability to get all settings required to perform an analysis (including the secured settings like passwords) and to push analysis results to the SonarQube server.
+global_permissions.scan.desc=Ability to get all settings required to perform an analysis (including the secured settings like passwords) and to push analysis results to the {instance} server.
global_permissions.provisioning=Create Projects
global_permissions.provisioning.desc=Ability to initialize a project so its settings can be configured before the first analysis.
global_permissions.filter_by_x_permission=Filter by "{0}" permission
organizations_permissions.gateadmin=Administer Quality Gates
organizations_permissions.gateadmin.desc=Ability to perform any action on quality gates.
organizations_permissions.scan=Execute Analysis
-organizations_permissions.scan.desc=Ability to get all settings required to perform an analysis (including the secured settings like passwords) and to push analysis results to the SonarQube server.
+organizations_permissions.scan.desc=Ability to get all settings required to perform an analysis (including the secured settings like passwords) and to push analysis results to the {instance} server.
organizations_permissions.provisioning=Create Projects
organizations_permissions.provisioning.desc=Ability to initialize a project so its settings can be configured before the first analysis.
projects_role.codeviewer=See Source Code
projects_role.codeviewer.desc=View the project's source code. (Users will also need "Browse" permission)
projects_role.scan=Execute Analysis
-projects_role.scan.desc=Ability to get all settings required to perform an analysis (including the secured settings like passwords) and to push analysis results to the SonarQube server.
+projects_role.scan.desc=Ability to get all settings required to perform an analysis (including the secured settings like passwords) and to push analysis results to the {instance} server.
projects_role.bulk_change=Bulk Change
projects_role.apply_template=Apply Permission Template
projects_role.apply_template_to_xxx=Apply Permission Template To "{0}"
#------------------------------------------------------------------------------
marketplace.page=Marketplace
marketplace.page.description=Discover and install new features
-marketplace.sonarqube_needs_to_be_restarted_to=SonarQube needs to be restarted in order to
+marketplace.instance_needs_to_be_restarted_to={instance} needs to be restarted in order to
marketplace.install_x_plugins=install {nb} plugins
marketplace.update_x_plugins=update {nb} plugins
marketplace.uninstall_x_plugins=uninstall {nb} plugins
overview.badges.measure.description.APP=This badge dynamically displays the current status of one metric of your application.
overview.badges.marketing.alt=Scanned on SonarCloud badge
overview.badges.marketing.description=This badge lets you advertise that you're using SonarCloud for code quality.
-overview.badges.quality_gate.alt=SonarCloud Quality Gate badge
+overview.badges.quality_gate.alt=Quality Gate badge
overview.badges.quality_gate.description=This badge dynamically displays the current quality gate status of your project.
overview.badges.quality_gate.description.APP=This badge dynamically displays the current quality gate status of your application.
overview.badges.quality_gate.description.TRK=This badge dynamically displays the current quality gate status of your project.
organization.avatar.preview=Preview
organization.created=Organization "{0}" has been created.
organization.delete=Delete Organization
-organization.delete.description=Delete this organization from SonarQube. All projects belonging to the organization will be deleted as well. The operation cannot be undone.
-organization.delete.description.sonarcloud=Delete this organization from SonarCloud. All projects belonging to the organization will be deleted as well. The operation cannot be undone.
+organization.delete.description=Delete this organization from {instance}. All projects belonging to the organization will be deleted as well. The operation cannot be undone.
organization.delete.sonarcloud.paid_plan_info=Your current paid plan subscription will stop and you won't be charged anymore.
organization.delete.question=Are you sure you want to delete this organization?
organization.deleted=Organization has been deleted.
footer.license=LGPL v3
footer.news=News
footer.plugins=Plugins
-footer.production_database_explanation=The embedded database will not scale, it will not support upgrading to newer versions of SonarQube, and there is no support for migrating your data out of it into a different database engine.
+footer.production_database_explanation=The embedded database will not scale, it will not support upgrading to newer versions of {instance}, and there is no support for migrating your data out of it into a different database engine.
footer.production_database_warning=Embedded database should be used for evaluation purpose only
footer.support=Get Support
footer.terms=Terms
# ONBOARDING
#
#------------------------------------------------------------------------------
-onboarding.header=Welcome to SonarQube!
-onboarding.header.sonarcloud=Welcome to SonarCloud!
+onboarding.header=Welcome to {instance}!
onboarding.header.description=Want to quickly analyze a first project? Follow these {0} easy steps.
onboarding.token.header=Provide a token
onboarding.language.os.mac=macOS
onboarding.language.project_key=Define a unique project key
-onboarding.analysis.java.maven.header=Execute the SonarQube Scanner for Maven from your computer
-onboarding.analysis.java.maven.text=Running a SonarQube analysis with Maven is straighforward. You just need to run the following command in your project's folder.
-onboarding.analysis.java.maven.docs=Please visit the <a href="http://redirect.sonarsource.com/doc/install-configure-scanner-maven.html" target="_blank">official documentation of the SonarQube Scanner for Maven</a> for more details.
+onboarding.analysis.java.maven.header=Execute the Scanner for Maven from your computer
+onboarding.analysis.java.maven.text=Running a {instance} analysis with Maven is straighforward. You just need to run the following command in your project's folder.
+onboarding.analysis.java.maven.docs=Please visit the <a href="http://redirect.sonarsource.com/doc/install-configure-scanner-maven.html" target="_blank">official documentation of the Scanner for Maven</a> for more details.
-onboarding.analysis.java.gradle.header=Execute the SonarQube Scanner for Gradle from your computer
-onboarding.analysis.java.gradle.text.1=Running a SonarQube analysis with Gradle is straighforward. You just need to declare the <code>org.sonarqube</code> plugin in your <code>build.gradle</code> file:
+onboarding.analysis.java.gradle.header=Execute the Scanner for Gradle from your computer
+onboarding.analysis.java.gradle.text.1=Running an analysis with Gradle is straighforward. You just need to declare the <code>org.sonarqube</code> plugin in your <code>build.gradle</code> file:
onboarding.analysis.java.gradle.text.2=and run the following command:
-onboarding.analysis.java.gradle.docs=Please visit the <a href="http://redirect.sonarsource.com/doc/gradle.html" target="_blank">official documentation of the SonarQube Scanner for Gradle</a> for more details.
+onboarding.analysis.java.gradle.docs=Please visit the <a href="http://redirect.sonarsource.com/doc/gradle.html" target="_blank">official documentation of the Scanner for Gradle</a> for more details.
-onboarding.analysis.msbuild.header=Download and unzip the SonarQube Scanner for MSBuild
+onboarding.analysis.msbuild.header=Download and unzip the Scanner for MSBuild
onboarding.analysis.msbuild.text=And add the executable's directory to the <code>%PATH%</code> environment variable
-onboarding.analysis.msbuild.execute=Execute the SonarQube Scanner for MSBuild from your computer
-onboarding.analysis.msbuild.execute.text=Running a SonarQube analysis is straighforward. You just need to execute the following commands at the root of your solution.
-onboarding.analysis.msbuild.docs=Please visit the <a href="http://redirect.sonarsource.com/doc/install-configure-scanner-msbuild.html" target="_blank">official documentation of the SonarQube Scanner for MSBuild</a> for more details.
+onboarding.analysis.msbuild.execute=Execute the Scanner for MSBuild from your computer
+onboarding.analysis.msbuild.execute.text=Running a {instance} analysis is straighforward. You just need to execute the following commands at the root of your solution.
+onboarding.analysis.msbuild.docs=Please visit the <a href="http://redirect.sonarsource.com/doc/install-configure-scanner-msbuild.html" target="_blank">official documentation of the Scanner for MSBuild</a> for more details.
onboarding.analysis.build_wrapper.header.linux=Download and unzip the Build Wrapper for Linux
onboarding.analysis.build_wrapper.header.win=Download and unzip the Build Wrapper for Windows
onboarding.analysis.build_wrapper.text.win=And add the executable's directory to the <code>%PATH%</code> environment variable
onboarding.analysis.build_wrapper.text.mac=And add the executable's directory to the <code>PATH</code> environment variable
-onboarding.analysis.sq_scanner.header.linux=Download and unzip the SonarQube Scanner for Linux
-onboarding.analysis.sq_scanner.header.win=Download and unzip the SonarQube Scanner for Windows
-onboarding.analysis.sq_scanner.header.mac=Download and unzip the SonarQube Scanner for macOS
+onboarding.analysis.sq_scanner.header.linux=Download and unzip the Scanner for Linux
+onboarding.analysis.sq_scanner.header.win=Download and unzip the Scanner for Windows
+onboarding.analysis.sq_scanner.header.mac=Download and unzip the Scanner for macOS
onboarding.analysis.sq_scanner.text.linux=And add the <code>bin</code> directory to the <code>PATH</code> environment variable
onboarding.analysis.sq_scanner.text.win=And add the <code>bin</code> directory to the <code>%PATH%</code> environment variable
onboarding.analysis.sq_scanner.text.mac=And add the <code>bin</code> directory to the <code>PATH</code> environment variable
-onboarding.analysis.sq_scanner.execute=Execute the SonarQube Scanner from your computer
-onboarding.analysis.sq_scanner.execute.text=Running a SonarQube analysis is straighforward. You just need to execute the following commands in your project's folder.
-onboarding.analysis.sq_scanner.docs=Please visit the <a href="http://redirect.sonarsource.com/doc/install-configure-scanner.html" target="_blank">official documentation of the SonarQube Scanner</a> for more details.
+onboarding.analysis.sq_scanner.execute=Execute the Scanner from your computer
+onboarding.analysis.sq_scanner.execute.text=Running a {instance} analysis is straighforward. You just need to execute the following commands in your project's folder.
+onboarding.analysis.sq_scanner.docs=Please visit the <a href="http://redirect.sonarsource.com/doc/install-configure-scanner.html" target="_blank">official documentation of the Scanner</a> for more details.
onboarding.project_watcher.not_started=Once your project is analyzed, this page will refresh automatically.
onboarding.project_watcher.in_progress=Analysis is in progress, please wait...