aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--server/sonar-web/src/main/js/app/components/nav/settings/SettingsNav.js4
-rw-r--r--server/sonar-web/src/main/js/app/components/nav/settings/__tests__/__snapshots__/SettingsNav-test.js.snap4
-rw-r--r--server/sonar-web/src/main/js/apps/account/notifications/Projects.js6
-rw-r--r--server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/Projects-test.js.snap15
-rw-r--r--server/sonar-web/src/main/js/apps/account/profile/Profile.js5
-rw-r--r--server/sonar-web/src/main/js/apps/account/templates/account-tokens.hbs24
-rw-r--r--server/sonar-web/src/main/js/apps/account/tokens-view.js7
-rw-r--r--server/sonar-web/src/main/js/apps/background-tasks/components/DateFilter.js5
-rw-r--r--server/sonar-web/src/main/js/apps/background-tasks/components/Search.js16
-rw-r--r--server/sonar-web/src/main/js/apps/coding-rules/rule/rule-profile-view.js4
-rw-r--r--server/sonar-web/src/main/js/apps/coding-rules/templates/rule/coding-rules-rule-meta.hbs9
-rw-r--r--server/sonar-web/src/main/js/apps/custom-measures/templates/custom-measures-delete.hbs8
-rw-r--r--server/sonar-web/src/main/js/apps/custom-measures/templates/custom-measures-form.hbs12
-rw-r--r--server/sonar-web/src/main/js/apps/custom-measures/templates/custom-measures-list-footer.hbs4
-rw-r--r--server/sonar-web/src/main/js/apps/custom-measures/templates/custom-measures-list-item.hbs8
-rw-r--r--server/sonar-web/src/main/js/apps/custom-measures/templates/custom-measures-list.hbs8
-rw-r--r--server/sonar-web/src/main/js/apps/groups/templates/groups-delete.hbs8
-rw-r--r--server/sonar-web/src/main/js/apps/groups/templates/groups-form.hbs10
-rw-r--r--server/sonar-web/src/main/js/apps/groups/templates/groups-header.hbs2
-rw-r--r--server/sonar-web/src/main/js/apps/groups/templates/groups-list-footer.hbs4
-rw-r--r--server/sonar-web/src/main/js/apps/groups/templates/groups-list-item.hbs6
-rw-r--r--server/sonar-web/src/main/js/apps/groups/templates/groups-list.hbs2
-rw-r--r--server/sonar-web/src/main/js/apps/groups/templates/groups-search.hbs2
-rw-r--r--server/sonar-web/src/main/js/apps/groups/templates/groups-users.hbs4
-rw-r--r--server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-migration-failed.hbs4
-rw-r--r--server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-migration-not-supported.hbs4
-rw-r--r--server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-migration-required.hbs10
-rw-r--r--server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-migration-running.hbs4
-rw-r--r--server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-migration-succeeded.hbs4
-rw-r--r--server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-no-migration.hbs4
-rw-r--r--server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-down.hbs6
-rw-r--r--server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-migration.hbs10
-rw-r--r--server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-starting.hbs2
-rw-r--r--server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-up.hbs6
-rw-r--r--server/sonar-web/src/main/js/apps/metrics/templates/metrics-delete.hbs8
-rw-r--r--server/sonar-web/src/main/js/apps/metrics/templates/metrics-form.hbs16
-rw-r--r--server/sonar-web/src/main/js/apps/metrics/templates/metrics-header.hbs7
-rw-r--r--server/sonar-web/src/main/js/apps/metrics/templates/metrics-list-footer.hbs4
-rw-r--r--server/sonar-web/src/main/js/apps/metrics/templates/metrics-list-item.hbs4
-rw-r--r--server/sonar-web/src/main/js/apps/overview/main/enhance.js4
-rw-r--r--server/sonar-web/src/main/js/apps/permission-templates/components/ActionsCell.js4
-rw-r--r--server/sonar-web/src/main/js/apps/permission-templates/components/Defaults.js4
-rw-r--r--server/sonar-web/src/main/js/apps/permission-templates/components/ListHeader.js6
-rw-r--r--server/sonar-web/src/main/js/apps/permission-templates/components/__tests__/__snapshots__/Defaults-test.js.snap16
-rw-r--r--server/sonar-web/src/main/js/apps/permission-templates/templates/permission-templates-delete.hbs8
-rw-r--r--server/sonar-web/src/main/js/apps/permission-templates/templates/permission-templates-form.hbs16
-rw-r--r--server/sonar-web/src/main/js/apps/permissions/project/components/PageHeader.js2
-rw-r--r--server/sonar-web/src/main/js/apps/permissions/project/templates/ApplyTemplateTemplate.hbs8
-rw-r--r--server/sonar-web/src/main/js/apps/permissions/shared/components/HoldersList.js5
-rw-r--r--server/sonar-web/src/main/js/apps/permissions/shared/components/SearchForm.js6
-rw-r--r--server/sonar-web/src/main/js/apps/projectsManagement/Search.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/Search-test.tsx.snap4
-rw-r--r--server/sonar-web/src/main/js/apps/quality-profiles/changelog/ChangelogSearch.tsx4
-rw-r--r--server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonForm.tsx1
-rw-r--r--server/sonar-web/src/main/js/apps/settings/encryption/EncryptionForm.js24
-rw-r--r--server/sonar-web/src/main/js/apps/settings/encryption/GenerateSecretKeyForm.js44
-rw-r--r--server/sonar-web/src/main/js/apps/settings/serverId/ServerIdApp.js2
-rw-r--r--server/sonar-web/src/main/js/apps/update-center/templates/_update-center-plugin-actions.hbs12
-rw-r--r--server/sonar-web/src/main/js/apps/update-center/templates/_update-center-plugin-changelog-entry.hbs2
-rw-r--r--server/sonar-web/src/main/js/apps/update-center/templates/update-center-footer.hbs2
-rw-r--r--server/sonar-web/src/main/js/apps/update-center/templates/update-center-header.hbs12
-rw-r--r--server/sonar-web/src/main/js/apps/update-center/templates/update-center-plugin-changelog.hbs2
-rw-r--r--server/sonar-web/src/main/js/apps/update-center/templates/update-center-plugin.hbs20
-rw-r--r--server/sonar-web/src/main/js/apps/update-center/templates/update-center-search.hbs16
-rw-r--r--server/sonar-web/src/main/js/apps/update-center/templates/update-center-system-update.hbs21
-rw-r--r--server/sonar-web/src/main/js/apps/users/templates/users-change-password.hbs12
-rw-r--r--server/sonar-web/src/main/js/apps/users/templates/users-deactivate.hbs8
-rw-r--r--server/sonar-web/src/main/js/apps/users/templates/users-form.hbs20
-rw-r--r--server/sonar-web/src/main/js/apps/users/templates/users-groups.hbs4
-rw-r--r--server/sonar-web/src/main/js/apps/users/templates/users-header.hbs2
-rw-r--r--server/sonar-web/src/main/js/apps/users/templates/users-list-footer.hbs4
-rw-r--r--server/sonar-web/src/main/js/apps/users/templates/users-list-item.hbs14
-rw-r--r--server/sonar-web/src/main/js/apps/users/templates/users-list.hbs6
-rw-r--r--server/sonar-web/src/main/js/apps/users/templates/users-search.hbs2
-rw-r--r--server/sonar-web/src/main/js/apps/users/templates/users-tokens.hbs24
-rw-r--r--server/sonar-web/src/main/js/apps/users/tokens-view.js7
-rw-r--r--server/sonar-web/src/main/js/components/SourceViewer/views/measures-overlay.js7
-rw-r--r--server/sonar-web/src/main/js/components/SourceViewer/views/templates/_source-viewer-measures-duplications.hbs2
-rw-r--r--server/sonar-web/src/main/js/components/SourceViewer/views/templates/_source-viewer-measures-lines.hbs2
-rw-r--r--sonar-core/src/main/resources/org/sonar/l10n/core.properties893
-rw-r--r--sonar-core/src/test/java/org/sonar/core/i18n/DefaultI18nTest.java2
81 files changed, 479 insertions, 1047 deletions
diff --git a/server/sonar-web/src/main/js/app/components/nav/settings/SettingsNav.js b/server/sonar-web/src/main/js/app/components/nav/settings/SettingsNav.js
index a18b7c1ab91..36a74fdef7a 100644
--- a/server/sonar-web/src/main/js/app/components/nav/settings/SettingsNav.js
+++ b/server/sonar-web/src/main/js/app/components/nav/settings/SettingsNav.js
@@ -116,7 +116,7 @@ class SettingsNav extends React.PureComponent {
</li>
<li>
<IndexLink to="/admin/custom_metrics" activeClassName="active">
- Custom Metrics
+ {translate('custom_metrics.page')}
</IndexLink>
</li>
{this.props.extensions.map(this.renderExtension)}
@@ -165,7 +165,7 @@ class SettingsNav extends React.PureComponent {
{!this.props.customOrganizations && (
<li>
<IndexLink to="/admin/projects_management" activeClassName="active">
- Management
+ {translate('management')}
</IndexLink>
</li>
)}
diff --git a/server/sonar-web/src/main/js/app/components/nav/settings/__tests__/__snapshots__/SettingsNav-test.js.snap b/server/sonar-web/src/main/js/app/components/nav/settings/__tests__/__snapshots__/SettingsNav-test.js.snap
index ffd20497a52..ca0145b11c8 100644
--- a/server/sonar-web/src/main/js/app/components/nav/settings/__tests__/__snapshots__/SettingsNav-test.js.snap
+++ b/server/sonar-web/src/main/js/app/components/nav/settings/__tests__/__snapshots__/SettingsNav-test.js.snap
@@ -68,7 +68,7 @@ exports[`should work with extensions 1`] = `
activeClassName="active"
to="/admin/custom_metrics"
>
- Custom Metrics
+ custom_metrics.page
</IndexLink>
</li>
<li>
@@ -156,7 +156,7 @@ exports[`should work with extensions 1`] = `
activeClassName="active"
to="/admin/projects_management"
>
- Management
+ management
</IndexLink>
</li>
<li>
diff --git a/server/sonar-web/src/main/js/apps/account/notifications/Projects.js b/server/sonar-web/src/main/js/apps/account/notifications/Projects.js
index 9c20ab517e3..d7d9df33ed7 100644
--- a/server/sonar-web/src/main/js/apps/account/notifications/Projects.js
+++ b/server/sonar-web/src/main/js/apps/account/notifications/Projects.js
@@ -123,7 +123,9 @@ class Projects extends React.PureComponent {
{allProjects.map(project => <ProjectNotifications key={project.key} project={project} />)}
<div className="spacer-top panel bg-muted">
- <span className="text-middle spacer-right">Set notifications for:</span>
+ <span className="text-middle spacer-right">
+ {translate('my_account.set_notifications_for')}:
+ </span>
<Select.Async
autoload={false}
cache={false}
@@ -133,7 +135,7 @@ class Projects extends React.PureComponent {
minimumInput={2}
optionRenderer={this.renderOption}
onChange={this.handleAddProject}
- placeholder="Search Project"
+ placeholder={translate('my_account.search_project')}
/>
</div>
</section>
diff --git a/server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/Projects-test.js.snap b/server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/Projects-test.js.snap
index efaa64321e6..0a6bbf5f267 100644
--- a/server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/Projects-test.js.snap
+++ b/server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/Projects-test.js.snap
@@ -29,7 +29,8 @@ exports[`should render projects 1`] = `
<span
className="text-middle spacer-right"
>
- Set notifications for:
+ my_account.set_notifications_for
+ :
</span>
<Async
autoload={false}
@@ -43,7 +44,7 @@ exports[`should render projects 1`] = `
onChange={[Function]}
optionRenderer={[Function]}
options={Array []}
- placeholder="Search Project"
+ placeholder="my_account.search_project"
searchPromptText="Type to search"
style={
Object {
@@ -92,7 +93,8 @@ exports[`should render projects 2`] = `
<span
className="text-middle spacer-right"
>
- Set notifications for:
+ my_account.set_notifications_for
+ :
</span>
<Async
autoload={false}
@@ -106,7 +108,7 @@ exports[`should render projects 2`] = `
onChange={[Function]}
optionRenderer={[Function]}
options={Array []}
- placeholder="Search Project"
+ placeholder="my_account.search_project"
searchPromptText="Type to search"
style={
Object {
@@ -155,7 +157,8 @@ exports[`should render projects 3`] = `
<span
className="text-middle spacer-right"
>
- Set notifications for:
+ my_account.set_notifications_for
+ :
</span>
<Async
autoload={false}
@@ -169,7 +172,7 @@ exports[`should render projects 3`] = `
onChange={[Function]}
optionRenderer={[Function]}
options={Array []}
- placeholder="Search Project"
+ placeholder="my_account.search_project"
searchPromptText="Type to search"
style={
Object {
diff --git a/server/sonar-web/src/main/js/apps/account/profile/Profile.js b/server/sonar-web/src/main/js/apps/account/profile/Profile.js
index 343e4206aba..1022a377f33 100644
--- a/server/sonar-web/src/main/js/apps/account/profile/Profile.js
+++ b/server/sonar-web/src/main/js/apps/account/profile/Profile.js
@@ -24,6 +24,7 @@ import UserExternalIdentity from './UserExternalIdentity';
import UserGroups from './UserGroups';
import UserScmAccounts from './UserScmAccounts';
import { getCurrentUser, areThereCustomOrganizations } from '../../../store/rootReducer';
+import { translate } from '../../../helpers/l10n';
/*::
type Props = {
@@ -45,7 +46,7 @@ function Profile(props /*: Props */) {
return (
<div className="account-body account-container">
<div className="spacer-bottom">
- Login: <strong id="login">{user.login}</strong>
+ {translate('login')}: <strong id="login">{user.login}</strong>
</div>
{!user.local &&
@@ -57,7 +58,7 @@ function Profile(props /*: Props */) {
{!!user.email && (
<div className="spacer-bottom">
- Email: <strong id="email">{user.email}</strong>
+ {translate('my_profile.email')}: <strong id="email">{user.email}</strong>
</div>
)}
diff --git a/server/sonar-web/src/main/js/apps/account/templates/account-tokens.hbs b/server/sonar-web/src/main/js/apps/account/templates/account-tokens.hbs
index 12884afbff9..2c8da3e0297 100644
--- a/server/sonar-web/src/main/js/apps/account/templates/account-tokens.hbs
+++ b/server/sonar-web/src/main/js/apps/account/templates/account-tokens.hbs
@@ -1,4 +1,4 @@
-<h2 class="spacer-bottom">Tokens</h2>
+<h2 class="spacer-bottom">{{t 'users.tokens'}}</h2>
<div class="big-spacer-bottom big-spacer-right markdown">
<p>{{t 'my_account.tokens_description'}}</p>
@@ -8,8 +8,8 @@
<table class="data">
<thead>
<tr>
- <th>Name</th>
- <th class="text-right">Created</th>
+ <th>{{t 'name'}}</th>
+ <th class="text-right">{{t 'created'}}</th>
<th>&nbsp;</th>
</tr>
</thead>
@@ -28,9 +28,9 @@
<div class="big-spacer-left">
<form class="js-revoke-token-form" data-token="{{name}}">
{{#if deleting}}
- <button class="button-red active input-small">Sure?</button>
+ <button class="button-red active input-small">{{t 'users.tokens.sure'}}</button>
{{else}}
- <button class="button-red input-small">Revoke</button>
+ <button class="button-red input-small">{{t 'users.tokens.revoke'}}</button>
{{/if}}
</form>
</div>
@@ -39,7 +39,7 @@
{{else}}
<tr>
<td colspan="3">
- <span class="note">No tokens</span>
+ <span class="note">{{t 'users.no_tokens'}}</span>
</td>
</tr>
{{/each}}
@@ -52,23 +52,21 @@
{{/each}}
<form class="js-generate-token-form spacer-top panel bg-muted">
- <label>Generate New Token:</label>
- <input type="text" required maxlength="100" placeholder="Enter Token Name">
- <button>Generate</button>
+ <label>{{t 'users.generate_new_token'}}:</label>
+ <input type="text" required maxlength="100" placeholder="{{t 'users.enter_token_name'}}">
+ <button>{{t 'users.generate'}}</button>
</form>
{{#if newToken}}
<div class="panel panel-white big-spacer-top">
<div class="alert alert-warning">
- New token "{{limitString newToken.name}}" has been created. Make sure you copy it now, you won’t be able to see it
- again!
+ {{tp 'users.tokens.new_token_created' newToken.name}}
</div>
<table class="data">
<tr>
-
<td class="thin">
- <button class="js-copy-to-clipboard" data-clipboard-text="{{newToken.token}}">Copy</button>
+ <button class="js-copy-to-clipboard" data-clipboard-text="{{newToken.token}}">{{t 'copy'}}</button>
</td>
<td class="nowrap">
<div class="monospaced text-success">{{newToken.token}}</div>
diff --git a/server/sonar-web/src/main/js/apps/account/tokens-view.js b/server/sonar-web/src/main/js/apps/account/tokens-view.js
index 29ef6f5f9cd..e63f1692804 100644
--- a/server/sonar-web/src/main/js/apps/account/tokens-view.js
+++ b/server/sonar-web/src/main/js/apps/account/tokens-view.js
@@ -22,6 +22,7 @@ import Marionette from 'backbone.marionette';
import Clipboard from 'clipboard';
import Template from './templates/account-tokens.hbs';
import { getTokens, generateToken, revokeToken } from '../../api/user-tokens';
+import { translate } from '../../helpers/l10n';
export default Marionette.ItemView.extend({
template: Template,
@@ -81,7 +82,11 @@ export default Marionette.ItemView.extend({
const clipboard = new Clipboard(copyButton.get(0));
clipboard.on('success', () => {
copyButton
- .tooltip({ title: 'Copied!', placement: 'bottom', trigger: 'manual' })
+ .tooltip({
+ title: translate('users.tokens.copied'),
+ placement: 'bottom',
+ trigger: 'manual'
+ })
.tooltip('show');
setTimeout(() => copyButton.tooltip('hide'), 1000);
});
diff --git a/server/sonar-web/src/main/js/apps/background-tasks/components/DateFilter.js b/server/sonar-web/src/main/js/apps/background-tasks/components/DateFilter.js
index de5c77abebd..fbb3bd5df25 100644
--- a/server/sonar-web/src/main/js/apps/background-tasks/components/DateFilter.js
+++ b/server/sonar-web/src/main/js/apps/background-tasks/components/DateFilter.js
@@ -20,6 +20,7 @@
import $ from 'jquery';
import React, { Component } from 'react';
import { isValidDate, parseDate, toShortNotSoISOString } from '../../../helpers/dates';
+import { translate } from '../../../helpers/l10n';
export default class DateFilter extends Component {
componentDidMount() {
@@ -70,7 +71,7 @@ export default class DateFilter extends Component {
onChange={() => true}
ref="minDate"
type="text"
- placeholder="From"
+ placeholder={translate('from')}
/>{' '}
<input
className="input-small"
@@ -78,7 +79,7 @@ export default class DateFilter extends Component {
onChange={() => true}
ref="maxDate"
type="text"
- placeholder="To"
+ placeholder={translate('to')}
/>
</div>
);
diff --git a/server/sonar-web/src/main/js/apps/background-tasks/components/Search.js b/server/sonar-web/src/main/js/apps/background-tasks/components/Search.js
index 9036a5613b0..d8bf4203b0c 100644
--- a/server/sonar-web/src/main/js/apps/background-tasks/components/Search.js
+++ b/server/sonar-web/src/main/js/apps/background-tasks/components/Search.js
@@ -79,7 +79,9 @@ export default class Search extends React.PureComponent {
return (
<li>
- <h6 className="bt-search-form-label">Search by Task or Component</h6>
+ <h6 className="bt-search-form-label">
+ {translate('background_tasks.search_by_task_or_component')}
+ </h6>
<input
onChange={e => this.handleQueryChange(e.target.value)}
@@ -87,7 +89,7 @@ export default class Search extends React.PureComponent {
ref="searchInput"
className="js-search input-medium"
type="search"
- placeholder="Search"
+ placeholder={translate('search_verb')}
/>
</li>
);
@@ -109,12 +111,12 @@ export default class Search extends React.PureComponent {
<section className="big-spacer-top big-spacer-bottom">
<ul className="bt-search-form">
<li>
- <h6 className="bt-search-form-label">Status</h6>
+ <h6 className="bt-search-form-label">{translate('status')}</h6>
<StatusFilter value={status} onChange={this.handleStatusChange.bind(this)} />
</li>
{types.length > 1 && (
<li>
- <h6 className="bt-search-form-label">Type</h6>
+ <h6 className="bt-search-form-label">{translate('type')}</h6>
<TypesFilter
value={taskType}
types={types}
@@ -124,12 +126,14 @@ export default class Search extends React.PureComponent {
)}
{!component && (
<li>
- <h6 className="bt-search-form-label">Only Latest Analysis</h6>
+ <h6 className="bt-search-form-label">
+ {translate('background_tasks.currents_filter.ONLY_CURRENTS')}
+ </h6>
<CurrentsFilter value={currents} onChange={this.handleCurrentsChange.bind(this)} />
</li>
)}
<li>
- <h6 className="bt-search-form-label">Date</h6>
+ <h6 className="bt-search-form-label">{translate('date')}</h6>
<DateFilter
minSubmittedAt={minSubmittedAt}
maxExecutedAt={maxExecutedAt}
diff --git a/server/sonar-web/src/main/js/apps/coding-rules/rule/rule-profile-view.js b/server/sonar-web/src/main/js/apps/coding-rules/rule/rule-profile-view.js
index 3ddbfd50961..31b1056c266 100644
--- a/server/sonar-web/src/main/js/apps/coding-rules/rule/rule-profile-view.js
+++ b/server/sonar-web/src/main/js/apps/coding-rules/rule/rule-profile-view.js
@@ -76,6 +76,8 @@ export default Marionette.ItemView.extend({
'coding_rules.revert_to_parent_definition.confirm',
this.getParent().name
),
+ yesLabel: translate('yes'),
+ noLabel: translate('cancel'),
yesHandler() {
return $.ajax({
type: 'POST',
@@ -98,6 +100,8 @@ export default Marionette.ItemView.extend({
confirmDialog({
title: translate('coding_rules.deactivate'),
html: translateWithParameters('coding_rules.deactivate.confirm'),
+ yesLabel: translate('yes'),
+ noLabel: translate('cancel'),
yesHandler() {
return $.ajax({
type: 'POST',
diff --git a/server/sonar-web/src/main/js/apps/coding-rules/templates/rule/coding-rules-rule-meta.hbs b/server/sonar-web/src/main/js/apps/coding-rules/templates/rule/coding-rules-rule-meta.hbs
index 41d6a6999a1..8f6506a0dbc 100644
--- a/server/sonar-web/src/main/js/apps/coding-rules/templates/rule/coding-rules-rule-meta.hbs
+++ b/server/sonar-web/src/main/js/apps/coding-rules/templates/rule/coding-rules-rule-meta.hbs
@@ -2,8 +2,7 @@
<div class="page-actions">
<span class="note">{{key}}</span>
- <a class="coding-rules-detail-permalink link-no-underline spacer-left" target="_blank" href="{{permalink}}"
- data-toggle="tooltip" data-placement="left" title="Rule permalink">
+ <a class="coding-rules-detail-permalink link-no-underline spacer-left" target="_blank" href="{{permalink}}">
<svg
class="text-text-top"
xmlns="http://www.w3.org/2000/svg"
@@ -33,13 +32,13 @@
</li>
<li class="coding-rules-detail-property"
- data-toggle="tooltip" data-placement="bottom" title="Default rule severity">
+ data-toggle="tooltip" data-placement="bottom" title="{{t 'default_severity'}}">
{{severityIcon severity}}&nbsp;{{t "severity" severity}}
</li>
{{#notEq status 'READY'}}
<li class="coding-rules-detail-property"
- data-toggle="tooltip" data-placement="bottom" title="Rule status">
+ data-toggle="tooltip" data-placement="bottom" title="{{t 'status'}}">
<span class="badge badge-normal-size badge-danger-light">
{{t 'rules.status' status}}
</span>
@@ -47,7 +46,7 @@
{{/notEq}}
<li class="coding-rules-detail-property coding-rules-detail-tag-list {{#if canCustomizeRule}}coding-rules-detail-tags-change{{/if}}"
- data-toggle="tooltip" data-placement="bottom" title="Rule tags">
+ data-toggle="tooltip" data-placement="bottom" title="{{t 'tags'}}">
<i class="icon-tags"></i>
<span>{{#if allTags}}{{join allTags ', '}}{{else}}{{t 'coding_rules.no_tags'}}{{/if}}</span>
{{#if canCustomizeRule}}<i class="icon-dropdown"></i>{{/if}}
diff --git a/server/sonar-web/src/main/js/apps/custom-measures/templates/custom-measures-delete.hbs b/server/sonar-web/src/main/js/apps/custom-measures/templates/custom-measures-delete.hbs
index 87a29038ba1..c216329b3b1 100644
--- a/server/sonar-web/src/main/js/apps/custom-measures/templates/custom-measures-delete.hbs
+++ b/server/sonar-web/src/main/js/apps/custom-measures/templates/custom-measures-delete.hbs
@@ -1,13 +1,13 @@
<form id="delete-custom-measure-form">
<div class="modal-head">
- <h2>Delete Custom Measure</h2>
+ <h2>{{t 'custom_measures.delete_custom_measure'}}</h2>
</div>
<div class="modal-body">
<div class="js-modal-messages"></div>
- Are you sure you want to delete custom measure "{{metric.name}}"?
+ {{tp 'custom_measures.delete_custom_measure.confirmation' metric.name}}
</div>
<div class="modal-foot">
- <button id="delete-custom-measure-submit" class="button-red">Delete</button>
- <a href="#" class="js-modal-close" id="delete-custom-measure-cancel">Cancel</a>
+ <button id="delete-custom-measure-submit" class="button-red">{{t 'delete'}}</button>
+ <a href="#" class="js-modal-close" id="delete-custom-measure-cancel">{{t 'cancel'}}</a>
</div>
</form>
diff --git a/server/sonar-web/src/main/js/apps/custom-measures/templates/custom-measures-form.hbs b/server/sonar-web/src/main/js/apps/custom-measures/templates/custom-measures-form.hbs
index 71b01cc044c..884cad7e08d 100644
--- a/server/sonar-web/src/main/js/apps/custom-measures/templates/custom-measures-form.hbs
+++ b/server/sonar-web/src/main/js/apps/custom-measures/templates/custom-measures-form.hbs
@@ -1,6 +1,6 @@
<form id="create-custom-measure-form" autocomplete="off">
<div class="modal-head">
- <h2>{{#if id}}Update{{else}}Create{{/if}} Custom Measure</h2>
+ <h2>{{#if id}}{{t 'custom_measures.update_custom_measure'}}{{else}}{{t 'custom_measures.create_custom_measure'}}{{/if}}</h2>
</div>
<div class="modal-body">
<div class="js-modal-messages"></div>
@@ -8,7 +8,7 @@
{{#unless id}}
{{#if canCreateMetric}}
<div class="modal-field">
- <label for="create-custom-measure-metric">Metric<em class="mandatory">*</em></label>
+ <label for="create-custom-measure-metric">{{t 'custom_measures.metric'}}<em class="mandatory">*</em></label>
<select id="create-custom-measure-metric" name="metric" required>
{{#each metrics}}
<option value="{{id}}" {{#eq id ../metric.id}}selected{{/eq}}>{{name}}</option>
@@ -21,19 +21,19 @@
{{/unless}}
<div class="modal-field">
- <label for="create-custom-measure-value">Value<em class="mandatory">*</em></label>
+ <label for="create-custom-measure-value">{{t 'value'}}<em class="mandatory">*</em></label>
<input id="create-custom-measure-value" name="value" type="text" maxlength="200" required value="{{value}}">
</div>
<div class="modal-field">
- <label for="create-custom-measure-description">Description</label>
+ <label for="create-custom-measure-description">{{t 'description'}}</label>
<textarea id="create-custom-measure-description" name="description">{{description}}</textarea>
</div>
</div>
<div class="modal-foot">
<button id="create-custom-measure-submit" {{#unless canCreateMetric}}disabled{{/unless}}>
- {{#if id}}Update{{else}}Create{{/if}}
+ {{#if id}}{{t 'update_verb'}}{{else}}{{t 'create_verb'}}{{/if}}
</button>
- <a href="#" class="js-modal-close" id="create-custom-measure-cancel">Cancel</a>
+ <a href="#" class="js-modal-close" id="create-custom-measure-cancel">{{t 'cancel'}}</a>
</div>
</form>
diff --git a/server/sonar-web/src/main/js/apps/custom-measures/templates/custom-measures-list-footer.hbs b/server/sonar-web/src/main/js/apps/custom-measures/templates/custom-measures-list-footer.hbs
index 3a91e24482c..91d1dbcfee5 100644
--- a/server/sonar-web/src/main/js/apps/custom-measures/templates/custom-measures-list-footer.hbs
+++ b/server/sonar-web/src/main/js/apps/custom-measures/templates/custom-measures-list-footer.hbs
@@ -1,6 +1,6 @@
<footer class="spacer-top note text-center">
- {{count}}/{{total}} shown
+ {{tp 'x_of_y_shown' count total}}
{{#if more}}
- <a id="custom-measures-fetch-more" class="spacer-left" href="#">show more</a>
+ <a id="custom-measures-fetch-more" class="spacer-left" href="#">{{t 'show_more'}}</a>
{{/if}}
</footer>
diff --git a/server/sonar-web/src/main/js/apps/custom-measures/templates/custom-measures-list-item.hbs b/server/sonar-web/src/main/js/apps/custom-measures/templates/custom-measures-list-item.hbs
index 7e26438880c..8efd57f4c11 100644
--- a/server/sonar-web/src/main/js/apps/custom-measures/templates/custom-measures-list-item.hbs
+++ b/server/sonar-web/src/main/js/apps/custom-measures/templates/custom-measures-list-item.hbs
@@ -20,15 +20,15 @@
<td class="">
{{#if updatedAt }}
- Updated on <span class="js-custom-measure-created-at">{{d updatedAt}}</span>
+ {{t 'updated_on'}} <span class="js-custom-measure-created-at">{{d updatedAt}}</span>
{{else}}
{{#if createdAt }}
- Created on <span class="js-custom-measure-created-at">{{d createdAt}}</span>
+ {{t 'created_on'}} <span class="js-custom-measure-created-at">{{d createdAt}}</span>
{{else}}
- Created
+ {{t 'created'}}
{{/if}}
{{/if}}
- by <span class="js-custom-measure-user">{{user.name}}</span>
+ {{t 'by_'}} <span class="js-custom-measure-user">{{user.name}}</span>
</td>
<td class="thin nowrap">
diff --git a/server/sonar-web/src/main/js/apps/custom-measures/templates/custom-measures-list.hbs b/server/sonar-web/src/main/js/apps/custom-measures/templates/custom-measures-list.hbs
index c01d062cd6c..20ca1491fa3 100644
--- a/server/sonar-web/src/main/js/apps/custom-measures/templates/custom-measures-list.hbs
+++ b/server/sonar-web/src/main/js/apps/custom-measures/templates/custom-measures-list.hbs
@@ -1,10 +1,10 @@
<table class="data zebra">
<thead>
<tr>
- <th>Metric</th>
- <th>Value</th>
- <th>Description</th>
- <th>Date</th>
+ <th>{{t 'custom_measures.metric'}}</th>
+ <th>{{t 'value'}}</th>
+ <th>{{t 'description'}}</th>
+ <th>{{t 'date'}}</th>
<th>&nbsp;</th>
</tr>
</thead>
diff --git a/server/sonar-web/src/main/js/apps/groups/templates/groups-delete.hbs b/server/sonar-web/src/main/js/apps/groups/templates/groups-delete.hbs
index 30628d56777..00d92c0a983 100644
--- a/server/sonar-web/src/main/js/apps/groups/templates/groups-delete.hbs
+++ b/server/sonar-web/src/main/js/apps/groups/templates/groups-delete.hbs
@@ -1,13 +1,13 @@
<form id="delete-group-form" autocomplete="off">
<div class="modal-head">
- <h2>Delete Group</h2>
+ <h2>{{t 'groups.delete_group'}}</h2>
</div>
<div class="modal-body">
<div class="js-modal-messages"></div>
- <div class="js-modal-text">Are you sure you want to delete "{{name}}"?</div>
+ <div class="js-modal-text">{{tp 'groups.delete_group.confirmation' name}}</div>
</div>
<div class="modal-foot">
- <button id="delete-group-submit">Delete</button>
- <a href="#" class="js-modal-close" id="delete-group-cancel">Cancel</a>
+ <button id="delete-group-submit">{{t 'delete'}}</button>
+ <a href="#" class="js-modal-close" id="delete-group-cancel">{{t 'cancel'}}</a>
</div>
</form>
diff --git a/server/sonar-web/src/main/js/apps/groups/templates/groups-form.hbs b/server/sonar-web/src/main/js/apps/groups/templates/groups-form.hbs
index a0927b33a73..c31e8598cd7 100644
--- a/server/sonar-web/src/main/js/apps/groups/templates/groups-form.hbs
+++ b/server/sonar-web/src/main/js/apps/groups/templates/groups-form.hbs
@@ -1,24 +1,24 @@
<form id="create-group-form" autocomplete="off">
<div class="modal-head">
- <h2>{{#if id}}Update{{else}}Create{{/if}} Group</h2>
+ <h2>{{#if id}}{{t 'groups.update_group'}}{{else}}{{t 'groups.create_group'}}{{/if}}</h2>
</div>
<div class="modal-body">
<div class="js-modal-messages"></div>
<div class="modal-field">
- <label for="create-group-name">Name<em class="mandatory">*</em></label>
+ <label for="create-group-name">{{t 'name'}}<em class="mandatory">*</em></label>
{{! keep this fake field to hack browser autofill }}
<input id="create-group-name-fake" name="name-fake" type="text" class="hidden">
<input id="create-group-name" name="name" type="text" size="50" maxlength="255" required value="{{name}}">
</div>
<div class="modal-field">
- <label for="create-group-description">Description</label>
+ <label for="create-group-description">{{t 'description'}}</label>
{{! keep this fake field to hack browser autofill }}
<textarea id="create-group-description-fake" name="description-fake" class="hidden"></textarea>
<textarea id="create-group-description" name="description">{{description}}</textarea>
</div>
</div>
<div class="modal-foot">
- <button id="create-group-submit">{{#if id}}Update{{else}}Create{{/if}}</button>
- <a href="#" class="js-modal-close" id="create-group-cancel">Cancel</a>
+ <button id="create-group-submit">{{#if id}}{{t 'update_verb'}}{{else}}{{t 'create'}}{{/if}}</button>
+ <a href="#" class="js-modal-close" id="create-group-cancel">{{t 'cancel'}}</a>
</div>
</form>
diff --git a/server/sonar-web/src/main/js/apps/groups/templates/groups-header.hbs b/server/sonar-web/src/main/js/apps/groups/templates/groups-header.hbs
index 94cf4a1ec34..3a63842e3c2 100644
--- a/server/sonar-web/src/main/js/apps/groups/templates/groups-header.hbs
+++ b/server/sonar-web/src/main/js/apps/groups/templates/groups-header.hbs
@@ -3,7 +3,7 @@
<i class="spinner hidden"></i>
<div class="page-actions">
<div class="button-group">
- <button id="groups-create">Create Group</button>
+ <button id="groups-create">{{t 'groups.create_group'}}</button>
</div>
</div>
<p class="page-description">{{t 'user_groups.page.description'}}</p>
diff --git a/server/sonar-web/src/main/js/apps/groups/templates/groups-list-footer.hbs b/server/sonar-web/src/main/js/apps/groups/templates/groups-list-footer.hbs
index 841ab40ecd9..16d1bdec7f5 100644
--- a/server/sonar-web/src/main/js/apps/groups/templates/groups-list-footer.hbs
+++ b/server/sonar-web/src/main/js/apps/groups/templates/groups-list-footer.hbs
@@ -1,6 +1,6 @@
<footer class="spacer-top note text-center">
- {{count}}/{{total}} shown
+ {{tp 'x_of_y_shown' count total}}
{{#if more}}
- <a id="groups-fetch-more" class="spacer-left" href="#">show more</a>
+ <a id="groups-fetch-more" class="spacer-left" href="#">{{t 'show_more'}}</a>
{{/if}}
</footer>
diff --git a/server/sonar-web/src/main/js/apps/groups/templates/groups-list-item.hbs b/server/sonar-web/src/main/js/apps/groups/templates/groups-list-item.hbs
index 85306c7f827..9f6bab62321 100644
--- a/server/sonar-web/src/main/js/apps/groups/templates/groups-list-item.hbs
+++ b/server/sonar-web/src/main/js/apps/groups/templates/groups-list-item.hbs
@@ -1,7 +1,7 @@
<div class="pull-right big-spacer-left nowrap">
{{#unless default}}
- <a class="js-group-update icon-edit little-spacer-right" title={{t 'users.update_details'}} data-toggle="tooltip" href="#"></a>
- <a class="js-group-delete icon-delete" title={{t 'delete'}} data-toggle="tooltip" href="#"></a>
+ <a class="js-group-update icon-edit little-spacer-right" title="{{t 'update_details'}}" data-toggle="tooltip" href="#"></a>
+ <a class="js-group-delete icon-delete" title="{{t 'delete'}}" data-toggle="tooltip" href="#"></a>
{{/unless}}
</div>
@@ -19,7 +19,7 @@
<div class="overflow-hidden bordered-left">
<span class="spacer-left spacer-right">{{membersCount}}</span>
{{#unless default}}
- <a class="js-group-users icon-bullet-list" title={{t 'users.update'}} data-toggle="tooltip" href="#"></a>
+ <a class="js-group-users icon-bullet-list" title="{{t 'users.update'}}" data-toggle="tooltip" href="#"></a>
{{/unless}}
</div>
</div>
diff --git a/server/sonar-web/src/main/js/apps/groups/templates/groups-list.hbs b/server/sonar-web/src/main/js/apps/groups/templates/groups-list.hbs
index 3db5500c5cc..b96143e7caa 100644
--- a/server/sonar-web/src/main/js/apps/groups/templates/groups-list.hbs
+++ b/server/sonar-web/src/main/js/apps/groups/templates/groups-list.hbs
@@ -2,7 +2,7 @@
{{#isNull organization}}
<div class="panel panel-vertical js-anyone">
<div class="display-inline-block text-top width-20">
- <strong class="js-group-name">Anyone</strong>
+ <strong class="js-group-name">{{t 'groups.anyone'}}</strong>
</div>
<div class="display-inline-block text-top big-spacer-left width-25">
diff --git a/server/sonar-web/src/main/js/apps/groups/templates/groups-search.hbs b/server/sonar-web/src/main/js/apps/groups/templates/groups-search.hbs
index 5e81ec0b32a..013f7cba90a 100644
--- a/server/sonar-web/src/main/js/apps/groups/templates/groups-search.hbs
+++ b/server/sonar-web/src/main/js/apps/groups/templates/groups-search.hbs
@@ -1,6 +1,6 @@
<div class="panel panel-vertical bordered-bottom spacer-bottom">
<form id="groups-search-form" class="search-box">
<button id="groups-search-submit" class="search-box-submit button-clean"><i class="icon-search"></i></button>
- <input id="groups-search-query" class="search-box-input" type="search" name="q" placeholder="Search" maxlength="100">
+ <input id="groups-search-query" class="search-box-input" type="search" name="q" placeholder="{{t 'search_verb'}}" maxlength="100">
</form>
</div>
diff --git a/server/sonar-web/src/main/js/apps/groups/templates/groups-users.hbs b/server/sonar-web/src/main/js/apps/groups/templates/groups-users.hbs
index eb346c0e31b..7f9db589a3e 100644
--- a/server/sonar-web/src/main/js/apps/groups/templates/groups-users.hbs
+++ b/server/sonar-web/src/main/js/apps/groups/templates/groups-users.hbs
@@ -1,10 +1,10 @@
<div class="modal-head">
- <h2>Update users</h2>
+ <h2>{{t 'users.update'}}</h2>
</div>
<div class="modal-body">
<div class="js-modal-messages"></div>
<div id="groups-users"></div>
</div>
<div class="modal-foot">
- <a href="#" class="js-modal-close" id="groups-users-done">Done</a>
+ <a href="#" class="js-modal-close" id="groups-users-done">{{t 'Done'}}</a>
</div>
diff --git a/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-migration-failed.hbs b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-migration-failed.hbs
index 2392a0f243e..ab1421b6b7e 100644
--- a/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-migration-failed.hbs
+++ b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-migration-failed.hbs
@@ -1,2 +1,2 @@
-<h1 class="maintenance-title text-danger">Upgrade Failed</h1>
-<p class="maintenance-text">Database connection cannot be established. Please check database status and JDBC settings.</p>
+<h1 class="maintenance-title text-danger">{{t 'maintenance.upgrade_failed'}}</h1>
+<p class="maintenance-text">{{t 'maintenance.upgrade_failed.text'}}</p>
diff --git a/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-migration-not-supported.hbs b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-migration-not-supported.hbs
index c139aa32211..6d023044313 100644
--- a/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-migration-not-supported.hbs
+++ b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-migration-not-supported.hbs
@@ -1,2 +1,2 @@
-<h1 class="maintenance-title text-danger">Migration not supported</h1>
-<p>Migration is not supported on embedded databases.</p>
+<h1 class="maintenance-title text-danger">{{t 'maintenance.migration_not_supported'}}</h1>
+<p>{{t 'maintenance.migration_not_supported.text'}}</p>
diff --git a/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-migration-required.hbs b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-migration-required.hbs
index 3830c20044c..3236ff5a80f 100644
--- a/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-migration-required.hbs
+++ b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-migration-required.hbs
@@ -1,7 +1,7 @@
-<h1 class="maintenance-title">Upgrade Database</h1>
-<p class="maintenance-text">The database upgrade can take several minutes.</p>
-<p class="maintenance-text">It is mandatory to <strong>back up database</strong> before upgrading.</p>
-<p class="maintenance-text">Make sure you have followed the steps from the <a target="_blank" href="https://redirect.sonarsource.com/doc/upgrading.html">SonarQube Upgrade guide</a>.</p>
+<h1 class="maintenance-title">{{t 'maintenance.upgrade_database'}}</h1>
+<p class="maintenance-text">{{t 'maintenance.upgrade_database.1'}}</p>
+<p class="maintenance-text">{{t 'maintenance.upgrade_database.2'}}</p>
+<p class="maintenance-text">{{t 'maintenance.upgrade_database.3'}}</p>
<div class="maintenance-spinner">
- <button id="start-migration">Upgrade</button>
+ <button id="start-migration">{{t 'maintenance.upgrade'}}</button>
</div>
diff --git a/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-migration-running.hbs b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-migration-running.hbs
index 52702e27c31..c69baef7434 100644
--- a/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-migration-running.hbs
+++ b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-migration-running.hbs
@@ -1,10 +1,10 @@
-<h1 class="maintenance-title">Database Migration</h1>
+<h1 class="maintenance-title">{{t 'maintenance.database_migration'}}</h1>
{{#if message}}
<p class="maintenance-text text-center">{{message}}</p>
{{/if}}
{{#if startedAt}}
<p class="maintenance-text text-center">
- Started {{fromNow startedAt}}<br>
+ {{t 'background_tasks.table.started'}} {{fromNow startedAt}}<br>
<small class="text-muted">{{dt startedAt}}</small>
</p>
{{/if}}
diff --git a/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-migration-succeeded.hbs b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-migration-succeeded.hbs
index 4f94bf53f34..7e70e68cf30 100644
--- a/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-migration-succeeded.hbs
+++ b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-migration-succeeded.hbs
@@ -1,4 +1,4 @@
-<h1 class="maintenance-title text-success">Database is up-to-date</h1>
+<h1 class="maintenance-title text-success">{{t 'maintenance.database_is_up_to_date'}}</h1>
<p class="maintenance-text text-center">
- <a href="{{link '/'}}">Home</a>
+ <a href="{{link '/'}}">{{t 'layout.home'}}</a>
</p>
diff --git a/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-no-migration.hbs b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-no-migration.hbs
index ba091295388..6c30631c9a5 100644
--- a/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-no-migration.hbs
+++ b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-state-no-migration.hbs
@@ -1,4 +1,4 @@
-<h1 class="maintenance-title">Database is up-to-date</h1>
+<h1 class="maintenance-title">{{t 'maintenance.database_is_up_to_date'}}</h1>
<p class="maintenance-text text-center">
- <a href="{{link '/'}}">Home</a>
+ <a href="{{link '/'}}">{{t 'layout.home'}}</a>
</p>
diff --git a/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-down.hbs b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-down.hbs
index 6507cbafa2e..811aa16ef5b 100644
--- a/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-down.hbs
+++ b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-down.hbs
@@ -1,5 +1,5 @@
-<h1 class="maintenance-title text-danger">SonarQube is down</h1>
-<p class="maintenance-text">Something went wrong. Please contact your system administrator.</p>
+<h1 class="maintenance-title text-danger">{{t 'maintenance.sonarqube_is_down'}}</h1>
+<p class="maintenance-text">{{t 'maintenance.sonarqube_is_down.text'}}</p>
<p class="maintenance-text text-center">
- <a href="{{link '/'}}">Try Again</a>
+ <a href="{{link '/'}}">{{t 'maintenance.try_again'}}</a>
</p>
diff --git a/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-migration.hbs b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-migration.hbs
index 267107206aa..f51f4c72475 100644
--- a/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-migration.hbs
+++ b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-migration.hbs
@@ -1,7 +1,3 @@
-<h1 class="maintenance-title">SonarQube is under maintenance</h1>
-<p class="maintenance-text">While waiting, you might want to investigate
- <a href="https://redirect.sonarsource.com/doc/plugin-library.html">new plugins</a> to extend the current functionality.
-</p>
-<p class="maintenance-text">If you are an administrator and have no idea why this message is being shown, you should
- read the <a href="https://redirect.sonarsource.com/doc/upgrading.html">upgrade guide</a>.
-</p>
+<h1 class="maintenance-title">{{t 'maintenance.sonarqube_is_under_maintenance'}}</h1>
+<p class="maintenance-text">{{{t 'maintenance.sonarqube_is_under_maintenance.1'}}}</p>
+<p class="maintenance-text">{{{t 'maintenance.sonarqube_is_under_maintenance.2'}}}</p>
diff --git a/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-starting.hbs b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-starting.hbs
index 263a3ff9a2f..96f7d89f122 100644
--- a/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-starting.hbs
+++ b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-starting.hbs
@@ -1,2 +1,2 @@
-<h1 class="maintenance-title">SonarQube is starting</h1>
+<h1 class="maintenance-title">{{t 'maintenance.sonarqube_is_starting'}}</h1>
<p class="maintenance-spinner"><i class="spinner"></i></p>
diff --git a/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-up.hbs b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-up.hbs
index 170edf144a2..e97b550f342 100644
--- a/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-up.hbs
+++ b/server/sonar-web/src/main/js/apps/maintenance/templates/_maintenance-status-up.hbs
@@ -1,5 +1,5 @@
-<h1 class="maintenance-title">SonarQube is up</h1>
-<p class="maintenance-text text-center">All systems operational.</p>
+<h1 class="maintenance-title">{{t 'maintenance.sonarqube_is_up'}}</h1>
+<p class="maintenance-text text-center">{{t 'maintenance.all_systems_opetational'}}</p>
<p class="maintenance-text text-center">
- <a href="{{link '/'}}">Home</a>
+ <a href="{{link '/'}}">{{t 'layout.home'}}</a>
</p>
diff --git a/server/sonar-web/src/main/js/apps/metrics/templates/metrics-delete.hbs b/server/sonar-web/src/main/js/apps/metrics/templates/metrics-delete.hbs
index 73cddffcbf0..e6bf9ff5323 100644
--- a/server/sonar-web/src/main/js/apps/metrics/templates/metrics-delete.hbs
+++ b/server/sonar-web/src/main/js/apps/metrics/templates/metrics-delete.hbs
@@ -1,13 +1,13 @@
<form id="delete-metric-form">
<div class="modal-head">
- <h2>Delete Metric</h2>
+ <h2>{{t 'custom_metrics.delete_metric'}}</h2>
</div>
<div class="modal-body">
<div class="js-modal-messages"></div>
- Are you sure you want to delete metric "{{name}}"?
+ {{tp 'custom_metrics.delete_metric.confirmation' name}}
</div>
<div class="modal-foot">
- <button id="delete-metric-submit" class="button-red">Delete</button>
- <a href="#" class="js-modal-close" id="delete-metric-cancel">Cancel</a>
+ <button id="delete-metric-submit" class="button-red">{{t 'delete'}}</button>
+ <a href="#" class="js-modal-close" id="delete-metric-cancel">{{t 'cancel'}}</a>
</div>
</form>
diff --git a/server/sonar-web/src/main/js/apps/metrics/templates/metrics-form.hbs b/server/sonar-web/src/main/js/apps/metrics/templates/metrics-form.hbs
index e7f23e20e5e..55c9c9d4936 100644
--- a/server/sonar-web/src/main/js/apps/metrics/templates/metrics-form.hbs
+++ b/server/sonar-web/src/main/js/apps/metrics/templates/metrics-form.hbs
@@ -1,27 +1,27 @@
<form id="create-metric-form" autocomplete="off">
<div class="modal-head">
- <h2>{{#if id}}Update{{else}}Create{{/if}} Metric</h2>
+ <h2>{{#if id}}{{t 'custom_metrics.update_metric'}}{{else}}{{t 'custom_metrics.create_metric'}}{{/if}}</h2>
</div>
<div class="modal-body">
<div class="js-modal-messages"></div>
<div class="modal-field">
- <label for="create-metric-key">Key<em class="mandatory">*</em></label>
+ <label for="create-metric-key">{{t 'key'}}<em class="mandatory">*</em></label>
<input id="create-metric-key" name="key" type="text" maxlength="200" required value="{{key}}">
</div>
<div class="modal-field">
- <label for="create-metric-name">Name<em class="mandatory">*</em></label>
+ <label for="create-metric-name">{{t 'name'}}<em class="mandatory">*</em></label>
<input id="create-metric-name" name="name" type="text" maxlength="200" required value="{{name}}">
</div>
<div class="modal-field">
- <label for="create-metric-description">Description</label>
+ <label for="create-metric-description">{{t 'description'}}</label>
<textarea id="create-metric-description" name="description">{{description}}</textarea>
</div>
<div class="modal-field">
- <label for="create-metric-domain">Domain</label>
+ <label for="create-metric-domain">{{t 'custom_metrics.domain'}}</label>
<input id="create-metric-domain" name="domain" type="text" maxlength="200" value="{{this.domain}}">
</div>
<div class="modal-field">
- <label for="create-metric-type">Type<em class="mandatory">*</em></label>
+ <label for="create-metric-type">{{t 'type'}}<em class="mandatory">*</em></label>
<select id="create-metric-type" name="type">
{{#each types}}
<option value="{{this}}" {{#eq this ../type}}selected{{/eq}}>{{t 'metric.type' this}}</option>
@@ -30,7 +30,7 @@
</div>
</div>
<div class="modal-foot">
- <button id="create-metric-submit">{{#if id}}Update{{else}}Create{{/if}}</button>
- <a href="#" class="js-modal-close" id="create-metric-cancel">Cancel</a>
+ <button id="create-metric-submit">{{#if id}}{{t 'update_verb'}}{{else}}{{t 'create'}}{{/if}}</button>
+ <a href="#" class="js-modal-close" id="create-metric-cancel">{{t 'cancel'}}</a>
</div>
</form>
diff --git a/server/sonar-web/src/main/js/apps/metrics/templates/metrics-header.hbs b/server/sonar-web/src/main/js/apps/metrics/templates/metrics-header.hbs
index 05ef5f04fad..fc2d4d1e080 100644
--- a/server/sonar-web/src/main/js/apps/metrics/templates/metrics-header.hbs
+++ b/server/sonar-web/src/main/js/apps/metrics/templates/metrics-header.hbs
@@ -1,10 +1,9 @@
<header class="page-header">
- <h1 class="page-title">Custom Metrics</h1>
+ <h1 class="page-title">{{t 'custom_metrics.page'}}</h1>
<div class="page-actions">
<div class="button-group">
- <button id="metrics-create">Create Metric</button>
+ <button id="metrics-create">{{t 'custom_metrics.create_metric'}}</button>
</div>
</div>
- <p class="page-description">These metrics are available for all projects. Manual measures can be set at project level
- via the configuration interface.</p>
+ <p class="page-description">{{t 'custom_metrics.page.description'}}</p>
</header>
diff --git a/server/sonar-web/src/main/js/apps/metrics/templates/metrics-list-footer.hbs b/server/sonar-web/src/main/js/apps/metrics/templates/metrics-list-footer.hbs
index c389b85f818..fe8af8e8aef 100644
--- a/server/sonar-web/src/main/js/apps/metrics/templates/metrics-list-footer.hbs
+++ b/server/sonar-web/src/main/js/apps/metrics/templates/metrics-list-footer.hbs
@@ -1,6 +1,6 @@
<footer class="spacer-top note text-center">
- {{count}}/{{total}} shown
+ {{tp 'x_of_y_shown' count total}}
{{#if more}}
- <a id="metrics-fetch-more" class="spacer-left" href="#">show more</a>
+ <a id="metrics-fetch-more" class="spacer-left" href="#">{{t 'show_more'}}</a>
{{/if}}
</footer>
diff --git a/server/sonar-web/src/main/js/apps/metrics/templates/metrics-list-item.hbs b/server/sonar-web/src/main/js/apps/metrics/templates/metrics-list-item.hbs
index 26b784ea303..cb25af27f94 100644
--- a/server/sonar-web/src/main/js/apps/metrics/templates/metrics-list-item.hbs
+++ b/server/sonar-web/src/main/js/apps/metrics/templates/metrics-list-item.hbs
@@ -1,6 +1,6 @@
<div class="pull-right big-spacer-left nowrap">
- <a class="js-metric-update icon-edit" title="Update" data-toggle="tooltip" href="#"></a>
- <a class="js-metric-delete icon-delete" title="Delete" data-toggle="tooltip" href="#"></a>
+ <a class="js-metric-update icon-edit" title="{{t 'update_verb'}}" data-toggle="tooltip" href="#"></a>
+ <a class="js-metric-delete icon-delete" title="{{t 'delete'}}" data-toggle="tooltip" href="#"></a>
</div>
<div class="display-inline-block text-top width-30">
diff --git a/server/sonar-web/src/main/js/apps/overview/main/enhance.js b/server/sonar-web/src/main/js/apps/overview/main/enhance.js
index 3e3759dfb33..15104554cc6 100644
--- a/server/sonar-web/src/main/js/apps/overview/main/enhance.js
+++ b/server/sonar-web/src/main/js/apps/overview/main/enhance.js
@@ -34,7 +34,7 @@ import {
getShortType,
getRatingTooltip
} from '../../../helpers/measures';
-import { translateWithParameters } from '../../../helpers/l10n';
+import { translateWithParameters, getLocalizedMetricName } from '../../../helpers/l10n';
import { getPeriodDate } from '../../../helpers/periods';
import {
getComponentDrilldownUrl,
@@ -93,7 +93,7 @@ export default function enhance(ComposedComponent) {
</div>
<div className="overview-domain-measure-label offset-left">
- {measure.metric.name}
+ {getLocalizedMetricName(measure.metric)}
{this.renderHistoryLink(measure.metric.key)}
</div>
</div>
diff --git a/server/sonar-web/src/main/js/apps/permission-templates/components/ActionsCell.js b/server/sonar-web/src/main/js/apps/permission-templates/components/ActionsCell.js
index c2b33c0356d..1c2e6f0618b 100644
--- a/server/sonar-web/src/main/js/apps/permission-templates/components/ActionsCell.js
+++ b/server/sonar-web/src/main/js/apps/permission-templates/components/ActionsCell.js
@@ -162,7 +162,7 @@ export default class ActionsCell extends React.PureComponent {
<li>
<Link to={{ pathname, query: { id: t.id } }}>
{this.renderDropdownIcon(<i className="icon-edit" />)}
- Edit Permissions
+ {translate('edit_permissions')}
</Link>
</li>
)}
@@ -170,7 +170,7 @@ export default class ActionsCell extends React.PureComponent {
<li>
<a href="#" className="js-update" onClick={this.handleUpdateClick.bind(this)}>
{this.renderDropdownIcon(<i className="icon-edit" />)}
- Update Details
+ {translate('update_details')}
</a>
</li>
diff --git a/server/sonar-web/src/main/js/apps/permission-templates/components/Defaults.js b/server/sonar-web/src/main/js/apps/permission-templates/components/Defaults.js
index 454b269f85a..c4faebbdd44 100644
--- a/server/sonar-web/src/main/js/apps/permission-templates/components/Defaults.js
+++ b/server/sonar-web/src/main/js/apps/permission-templates/components/Defaults.js
@@ -20,7 +20,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import { sortBy } from 'lodash';
-import { translate } from '../../../helpers/l10n';
+import { translate, translateWithParameters } from '../../../helpers/l10n';
import { PermissionTemplateType } from '../propTypes';
export default class Defaults extends React.PureComponent {
@@ -42,7 +42,7 @@ export default class Defaults extends React.PureComponent {
return (
<div>
<span className="badge spacer-right">
- {translate('default')} for {qualifiers}
+ {translateWithParameters('permission_template.default_for', qualifiers)}
</span>
</div>
);
diff --git a/server/sonar-web/src/main/js/apps/permission-templates/components/ListHeader.js b/server/sonar-web/src/main/js/apps/permission-templates/components/ListHeader.js
index 7dfea41232b..971db48df4b 100644
--- a/server/sonar-web/src/main/js/apps/permission-templates/components/ListHeader.js
+++ b/server/sonar-web/src/main/js/apps/permission-templates/components/ListHeader.js
@@ -31,19 +31,19 @@ export default class ListHeader extends React.PureComponent {
renderTooltip = permission =>
permission.key === 'user' || permission.key === 'codeviewer' ? (
<div>
- {permission.description}
+ {translate('projects_role', permission.key, 'desc')}
<div className="alert alert-warning spacer-top">
{translate('projects_role.public_projects_warning')}
</div>
</div>
) : (
- permission.description
+ translate('projects_role', permission.key, 'desc')
);
render() {
const cells = this.props.permissions.map(permission => (
<th key={permission.key} className="permission-column">
- {permission.name}
+ {translate('projects_role', permission.key)}
<Tooltip overlay={this.renderTooltip(permission)}>
<i className="icon-help little-spacer-left" />
</Tooltip>
diff --git a/server/sonar-web/src/main/js/apps/permission-templates/components/__tests__/__snapshots__/Defaults-test.js.snap b/server/sonar-web/src/main/js/apps/permission-templates/components/__tests__/__snapshots__/Defaults-test.js.snap
index 1d800c22ce5..9319abafef2 100644
--- a/server/sonar-web/src/main/js/apps/permission-templates/components/__tests__/__snapshots__/Defaults-test.js.snap
+++ b/server/sonar-web/src/main/js/apps/permission-templates/components/__tests__/__snapshots__/Defaults-test.js.snap
@@ -5,9 +5,7 @@ exports[`should render one qualifier 1`] = `
<span
className="badge spacer-right"
>
- default
- for
- qualifiers.DEV
+ permission_template.default_for.qualifiers.DEV
</span>
</div>
`;
@@ -17,9 +15,7 @@ exports[`should render only projects for custom organization 1`] = `
<span
className="badge spacer-right"
>
- default
- for
- qualifiers.TRK
+ permission_template.default_for.qualifiers.TRK
</span>
</div>
`;
@@ -29,9 +25,7 @@ exports[`should render several qualifiers 1`] = `
<span
className="badge spacer-right"
>
- default
- for
- qualifiers.TRK, qualifiers.VW
+ permission_template.default_for.qualifiers.TRK, qualifiers.VW
</span>
</div>
`;
@@ -41,9 +35,7 @@ exports[`should render several qualifiers for default organization 1`] = `
<span
className="badge spacer-right"
>
- default
- for
- qualifiers.TRK, qualifiers.VW
+ permission_template.default_for.qualifiers.TRK, qualifiers.VW
</span>
</div>
`;
diff --git a/server/sonar-web/src/main/js/apps/permission-templates/templates/permission-templates-delete.hbs b/server/sonar-web/src/main/js/apps/permission-templates/templates/permission-templates-delete.hbs
index 178214f7ba0..6cdf78a14a0 100644
--- a/server/sonar-web/src/main/js/apps/permission-templates/templates/permission-templates-delete.hbs
+++ b/server/sonar-web/src/main/js/apps/permission-templates/templates/permission-templates-delete.hbs
@@ -1,13 +1,13 @@
<form id="delete-permission-template-form">
<div class="modal-head">
- <h2>Delete Permission Template</h2>
+ <h2>{{t 'permission_template.delete_confirm_title'}}</h2>
</div>
<div class="modal-body">
<div class="js-modal-messages"></div>
- Are you sure you want to delete permission template "{{name}}"?
+ {{tp 'permission_template.do_you_want_to_delete_template_xxx' name}}
</div>
<div class="modal-foot">
- <button id="delete-permission-template-submit" class="button-red">Delete</button>
- <a href="#" class="js-modal-close" id="delete-permission-template-cancel">Cancel</a>
+ <button id="delete-permission-template-submit" class="button-red">{{t 'delete'}}</button>
+ <a href="#" class="js-modal-close" id="delete-permission-template-cancel">{{t 'cancel'}}</a>
</div>
</form>
diff --git a/server/sonar-web/src/main/js/apps/permission-templates/templates/permission-templates-form.hbs b/server/sonar-web/src/main/js/apps/permission-templates/templates/permission-templates-form.hbs
index 02ef4004747..b88decef2e4 100644
--- a/server/sonar-web/src/main/js/apps/permission-templates/templates/permission-templates-form.hbs
+++ b/server/sonar-web/src/main/js/apps/permission-templates/templates/permission-templates-form.hbs
@@ -1,34 +1,34 @@
<form id="permission-template-form" autocomplete="off">
<div class="modal-head">
- <h2>{{#if id}}Update{{else}}Create{{/if}} Permission Template</h2>
+ <h2>{{#if id}}{{t 'permission_template.edit_template'}}{{else}}{{t 'permission_template.new_template'}}{{/if}}</h2>
</div>
<div class="modal-body">
<div class="js-modal-messages"></div>
<div class="modal-field">
- <label for="permission-template-name">Name<em class="mandatory">*</em></label>
+ <label for="permission-template-name">{{t 'name'}}<em class="mandatory">*</em></label>
<input id="permission-template-name" name="name" type="text" maxlength="256" required value="{{name}}">
<div class="modal-field-description">
- Should be unique.
+ {{t 'should_be_unique'}}
</div>
</div>
<div class="modal-field">
- <label for="permission-template-description">Description</label>
+ <label for="permission-template-description">{{t 'description'}}</label>
<textarea id="permission-template-description" name="description" maxlength="4000" rows="5">{{description}}</textarea>
</div>
<div class="modal-field">
- <label for="permission-template-project-key-pattern">Project Key Pattern</label>
+ <label for="permission-template-project-key-pattern">{{t 'permission_template.key_pattern'}}</label>
<input id="permission-template-project-key-pattern" name="keyPattern" type="text" maxlength="500"
value="{{projectKeyPattern}}">
<div class="modal-field-description">
- Should be a valid regular expression.
+ {{t 'permission_template.key_pattern.description'}}
</div>
</div>
</div>
<div class="modal-foot">
- <button id="permission-template-submit">{{#if id}}Update{{else}}Create{{/if}}</button>
- <a href="#" class="js-modal-close" id="permission-template-cancel">Cancel</a>
+ <button id="permission-template-submit">{{#if id}}{{t 'update_verb'}}{{else}}{{t 'create'}}{{/if}}</button>
+ <a href="#" class="js-modal-close" id="permission-template-cancel">{{t 'cancel'}}</a>
</div>
</form>
diff --git a/server/sonar-web/src/main/js/apps/permissions/project/components/PageHeader.js b/server/sonar-web/src/main/js/apps/permissions/project/components/PageHeader.js
index 3df9dbd8fc3..659c166d752 100644
--- a/server/sonar-web/src/main/js/apps/permissions/project/components/PageHeader.js
+++ b/server/sonar-web/src/main/js/apps/permissions/project/components/PageHeader.js
@@ -75,7 +75,7 @@ export default class PageHeader extends React.PureComponent {
{canApplyPermissionTemplate && (
<div className="page-actions">
<button className="js-apply-template" onClick={this.handleApplyTemplate}>
- Apply Template
+ {translate('projects_role.apply_template')}
</button>
</div>
)}
diff --git a/server/sonar-web/src/main/js/apps/permissions/project/templates/ApplyTemplateTemplate.hbs b/server/sonar-web/src/main/js/apps/permissions/project/templates/ApplyTemplateTemplate.hbs
index 82c157e5d53..37e8ff307e5 100644
--- a/server/sonar-web/src/main/js/apps/permissions/project/templates/ApplyTemplateTemplate.hbs
+++ b/server/sonar-web/src/main/js/apps/permissions/project/templates/ApplyTemplateTemplate.hbs
@@ -1,6 +1,6 @@
<form id="project-permissions-apply-template-form" autocomplete="off">
<div class="modal-head">
- <h2>Apply Permission Template to "{{project.name}}"</h2>
+ <h2>{{tp 'projects_role.apply_template_to_xxx' project.name}}</h2>
</div>
<div class="modal-body">
@@ -16,7 +16,7 @@
{{#notNull permissionTemplates}}
<div class="modal-field">
<label for="project-permissions-template">
- Template<em class="mandatory">*</em>
+ {{t 'template'}}<em class="mandatory">*</em>
</label>
<select id="project-permissions-template">
{{#each permissionTemplates}}
@@ -33,9 +33,9 @@
<div class="modal-foot">
{{#unless done}}
{{#notNull permissionTemplates}}
- <button id="project-permissions-apply-template">Apply</button>
+ <button id="project-permissions-apply-template">{{t 'apply'}}</button>
{{/notNull}}
{{/unless}}
- <a href="#" class="js-modal-close">Close</a>
+ <a href="#" class="js-modal-close">{{t 'close'}}</a>
</div>
</form>
diff --git a/server/sonar-web/src/main/js/apps/permissions/shared/components/HoldersList.js b/server/sonar-web/src/main/js/apps/permissions/shared/components/HoldersList.js
index cde163b432c..da8bc9aa11f 100644
--- a/server/sonar-web/src/main/js/apps/permissions/shared/components/HoldersList.js
+++ b/server/sonar-web/src/main/js/apps/permissions/shared/components/HoldersList.js
@@ -22,7 +22,7 @@ import PropTypes from 'prop-types';
import UserHolder from './UserHolder';
import GroupHolder from './GroupHolder';
import Tooltip from '../../../../components/controls/Tooltip';
-import { translate } from '../../../../helpers/l10n';
+import { translate, translateWithParameters } from '../../../../helpers/l10n';
export default class HoldersList extends React.PureComponent {
static propTypes = {
@@ -69,7 +69,8 @@ export default class HoldersList extends React.PureComponent {
backgroundColor: p.key === selectedPermission ? '#d9edf7' : 'transparent'
}}>
<div className="permission-column-inner">
- <Tooltip overlay={`Filter by "${p.name}" permission`}>
+ <Tooltip
+ overlay={translateWithParameters('global_permissions.filter_by_x_permission', p.name)}>
<a data-key={p.key} href="#" onClick={this.handlePermissionClick}>
{p.name}
</a>
diff --git a/server/sonar-web/src/main/js/apps/permissions/shared/components/SearchForm.js b/server/sonar-web/src/main/js/apps/permissions/shared/components/SearchForm.js
index f20431a06b8..14c6018180f 100644
--- a/server/sonar-web/src/main/js/apps/permissions/shared/components/SearchForm.js
+++ b/server/sonar-web/src/main/js/apps/permissions/shared/components/SearchForm.js
@@ -53,9 +53,9 @@ export default class SearchForm extends React.PureComponent {
const { query, filter } = this.props;
const filterOptions = [
- { value: 'all', label: 'All' },
- { value: 'users', label: 'Users' },
- { value: 'groups', label: 'Groups' }
+ { value: 'all', label: translate('all') },
+ { value: 'users', label: translate('users.page') },
+ { value: 'groups', label: translate('user_groups.page') }
];
return (
diff --git a/server/sonar-web/src/main/js/apps/projectsManagement/Search.tsx b/server/sonar-web/src/main/js/apps/projectsManagement/Search.tsx
index 99e083ce7b2..d41a5c5e1bb 100644
--- a/server/sonar-web/src/main/js/apps/projectsManagement/Search.tsx
+++ b/server/sonar-web/src/main/js/apps/projectsManagement/Search.tsx
@@ -217,7 +217,7 @@ export default class Search extends React.PureComponent<Props, State> {
ref={node => (this.input = node!)}
className="search-box-input input-medium"
type="search"
- placeholder="Search"
+ placeholder={translate('search_verb')}
/>
</form>
</td>
diff --git a/server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/Search-test.tsx.snap b/server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/Search-test.tsx.snap
index bf2fb591f4a..bef6016eadc 100644
--- a/server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/Search-test.tsx.snap
+++ b/server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/Search-test.tsx.snap
@@ -168,7 +168,7 @@ exports[`render qualifiers filter 1`] = `
<input
className="search-box-input input-medium"
onChange={[Function]}
- placeholder="Search"
+ placeholder="search_verb"
type="search"
value=""
/>
@@ -270,7 +270,7 @@ exports[`renders 1`] = `
<input
className="search-box-input input-medium"
onChange={[Function]}
- placeholder="Search"
+ placeholder="search_verb"
type="search"
value=""
/>
diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/changelog/ChangelogSearch.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/changelog/ChangelogSearch.tsx
index 9c91e098135..288529c6c63 100644
--- a/server/sonar-web/src/main/js/apps/quality-profiles/changelog/ChangelogSearch.tsx
+++ b/server/sonar-web/src/main/js/apps/quality-profiles/changelog/ChangelogSearch.tsx
@@ -45,14 +45,14 @@ export default class ChangelogSearch extends React.PureComponent<Props> {
<DateInput
name="since"
value={this.formatDate(this.props.fromDate)}
- placeholder="From"
+ placeholder={translate('from')}
onChange={this.props.onFromDateChange}
/>
{' — '}
<DateInput
name="to"
value={this.formatDate(this.props.toDate)}
- placeholder="To"
+ placeholder={translate('to')}
onChange={this.props.onToDateChange}
/>
<button className="spacer-left" onClick={this.handleResetClick.bind(this)}>
diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonForm.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonForm.tsx
index 37711f160a2..bee2e948e07 100644
--- a/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonForm.tsx
+++ b/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonForm.tsx
@@ -46,6 +46,7 @@ export default class ComparisonForm extends React.PureComponent<Props> {
<Select
value={withKey}
options={options}
+ placeholder={translate('select_verb')}
clearable={false}
className="input-large"
onChange={this.handleChange.bind(this)}
diff --git a/server/sonar-web/src/main/js/apps/settings/encryption/EncryptionForm.js b/server/sonar-web/src/main/js/apps/settings/encryption/EncryptionForm.js
index e62b431277c..5b9655f86dc 100644
--- a/server/sonar-web/src/main/js/apps/settings/encryption/EncryptionForm.js
+++ b/server/sonar-web/src/main/js/apps/settings/encryption/EncryptionForm.js
@@ -19,6 +19,7 @@
*/
import React from 'react';
import PropTypes from 'prop-types';
+import { translate } from '../../../helpers/l10n';
export default class EncryptionForm extends React.PureComponent {
static propTypes = {
@@ -42,9 +43,7 @@ export default class EncryptionForm extends React.PureComponent {
render() {
return (
<div id="encryption-form-container">
- <div className="spacer-bottom">
- Secret key is registered. You can encrypt any property value with the following form:
- </div>
+ <div className="spacer-bottom">{translate('encryption.form_intro')}</div>
<form
id="encryption-form"
@@ -59,12 +58,13 @@ export default class EncryptionForm extends React.PureComponent {
value={this.state.value}
onChange={e => this.setState({ value: e.target.value })}
/>
- <button className="spacer-left">Encrypt</button>
+ <button className="spacer-left">{translate('encryption.encrypt')}</button>
</form>
{this.props.encryptedValue != null && (
<div>
- Encrypted Value:{' '}
+ {translate('encryption.encrypted_value')}
+ {': '}
<input
id="encrypted-value"
className="input-clear input-code input-super-large"
@@ -76,16 +76,12 @@ export default class EncryptionForm extends React.PureComponent {
)}
<div className="huge-spacer-top bordered-top">
- <div className="big-spacer-top spacer-bottom">
- Note that the secret key can be changed, but all the encrypted properties will have to
- be updated.{' '}
- <a href="https://redirect.sonarsource.com/doc/settings-encryption.html">
- More information
- </a>
- </div>
-
+ <div
+ className="big-spacer-top spacer-bottom"
+ dangerouslySetInnerHTML={{ __html: translate('encryption.form_note') }}
+ />
<form id="encryption-new-key-form" onSubmit={e => this.handleGenerateNewKey(e)}>
- <button>Generate New Secret Key</button>
+ <button>{translate('encryption.generate_new_secret_key')}</button>
</form>
</div>
</div>
diff --git a/server/sonar-web/src/main/js/apps/settings/encryption/GenerateSecretKeyForm.js b/server/sonar-web/src/main/js/apps/settings/encryption/GenerateSecretKeyForm.js
index 899c60dcaf0..867019a0935 100644
--- a/server/sonar-web/src/main/js/apps/settings/encryption/GenerateSecretKeyForm.js
+++ b/server/sonar-web/src/main/js/apps/settings/encryption/GenerateSecretKeyForm.js
@@ -19,6 +19,7 @@
*/
import React from 'react';
import PropTypes from 'prop-types';
+import { translate } from '../../../helpers/l10n';
export default class GenerateSecretKeyForm extends React.PureComponent {
static propTypes = {
@@ -37,7 +38,7 @@ export default class GenerateSecretKeyForm extends React.PureComponent {
{this.props.secretKey != null ? (
<div>
<div className="big-spacer-bottom">
- <h3 className="spacer-bottom">Secret Key</h3>
+ <h3 className="spacer-bottom">{translate('encryption.secret_key')}</h3>
<input
id="secret-key"
className="input-large"
@@ -47,43 +48,22 @@ export default class GenerateSecretKeyForm extends React.PureComponent {
/>
</div>
- <h3 className="spacer-bottom">How To Use</h3>
+ <h3 className="spacer-bottom">{translate('encryption.how_to_use')}</h3>
- <ul className="list-styled markdown">
- <li className="spacer-bottom">
- Store the secret key in the file <code>~/.sonar/sonar-secret.txt</code> of the
- server. This file can be relocated by defining the property{' '}
- <code>sonar.secretKeyPath</code> in <code>conf/sonar.properties</code>
- </li>
- <li className="spacer-bottom">
- Restrict access to this file by making it readable and by owner only
- </li>
- <li className="spacer-bottom">
- Restart the server if the property <code>sonar.secretKeyPath</code> has been set or
- changed.
- </li>
- <li className="spacer-bottom">
- Copy this file on all the machines that execute code inspection. Define the property{' '}
- <code>sonar.secretKeyPath</code> on those machines if the path is not{' '}
- <code>~/.sonar/sonar-secret.txt</code>.
- </li>
- <li>
- For each property that you want to encrypt, generate the encrypted value and replace
- the original value wherever it is stored (configuration files, command lines).
- </li>
- </ul>
+ <div
+ className="markdown"
+ dangerouslySetInnerHTML={{ __html: translate('encryption.how_to_use.content') }}
+ />
</div>
) : (
<div>
- <p className="spacer-bottom">
- Secret key is required to be able to encrypt properties.{' '}
- <a href="https://redirect.sonarsource.com/doc/settings-encryption.html">
- More information
- </a>
- </p>
+ <p
+ className="spacer-bottom"
+ dangerouslySetInnerHTML={{ __html: translate('ecryption.secret_key_description') }}
+ />
<form id="generate-secret-key-form" onSubmit={e => this.handleSubmit(e)}>
- <button>Generate Secret Key</button>
+ <button>{translate('encryption.generate_secret_key')}s</button>
</form>
</div>
)}
diff --git a/server/sonar-web/src/main/js/apps/settings/serverId/ServerIdApp.js b/server/sonar-web/src/main/js/apps/settings/serverId/ServerIdApp.js
index 2edff5822cd..98e9226835e 100644
--- a/server/sonar-web/src/main/js/apps/settings/serverId/ServerIdApp.js
+++ b/server/sonar-web/src/main/js/apps/settings/serverId/ServerIdApp.js
@@ -87,7 +87,7 @@ export default class ServerIdApp extends React.PureComponent {
{this.state.serverId != null && (
<div className={this.state.invalidServerId ? 'panel panel-danger' : 'panel'}>
- Server ID:
+ {translate('property.category.server_id')}:
<input
id="server-id-result"
className="spacer-left input-large input-clear input-code"
diff --git a/server/sonar-web/src/main/js/apps/update-center/templates/_update-center-plugin-actions.hbs b/server/sonar-web/src/main/js/apps/update-center/templates/_update-center-plugin-actions.hbs
index 5b67a9d6e48..bda3b53a5d5 100644
--- a/server/sonar-web/src/main/js/apps/update-center/templates/_update-center-plugin-actions.hbs
+++ b/server/sonar-web/src/main/js/apps/update-center/templates/_update-center-plugin-actions.hbs
@@ -4,10 +4,10 @@
<div class="button-group">
{{#each updates}}
{{#eq status 'COMPATIBLE'}}
- <button class="js-update" data-verion="{{release.version}}">Update to {{release.version}}</button>
+ <button class="js-update" data-verion="{{release.version}}">{{tp 'update_center.update_to_x' release.version}}</button>
{{/eq}}
{{/each}}
- <button class="js-uninstall button-red">Uninstall</button>
+ <button class="js-uninstall button-red">{{t 'update_center.uninstall'}}</button>
</div>
{{else}}
@@ -16,13 +16,13 @@
<p class="little-spacer-bottom">
<input class="js-terms" type="checkbox" name="plugin-terms" id="plugin-terms-{{key}}">
<label for="plugin-terms-{{key}}">
- I accept the
- <a class="js-plugin-terms nowrap" href="{{termsAndConditionsUrl}}" target="_blank">Terms and Conditions</a>
+ {{t 'update_center.i_accept_the'}}
+ <a class="js-plugin-terms nowrap" href="{{termsAndConditionsUrl}}" target="_blank">{{t 'update_center.terms_and_conditions'}}</a>
</label>
</p>
- <button class="js-install" disabled>Install</button>
+ <button class="js-install" disabled>{{t 'update_center.install'}}</button>
{{else}}
- <button class="js-install">Install</button>
+ <button class="js-install">{{t 'update_center.install'}}</button>
{{/if}}
{{/if}}
diff --git a/server/sonar-web/src/main/js/apps/update-center/templates/_update-center-plugin-changelog-entry.hbs b/server/sonar-web/src/main/js/apps/update-center/templates/_update-center-plugin-changelog-entry.hbs
index fddb84bce8c..a1ea88ce680 100644
--- a/server/sonar-web/src/main/js/apps/update-center/templates/_update-center-plugin-changelog-entry.hbs
+++ b/server/sonar-web/src/main/js/apps/update-center/templates/_update-center-plugin-changelog-entry.hbs
@@ -7,7 +7,7 @@
{{/notEq}}
<span class="js-plugin-changelog-date note spacer-right">{{d release.date}}</span>
{{#if release.changeLogUrl}}
- <a class="js-plugin-changelog-link" href="{{release.changeLogUrl}}" target="_blank">Release Notes</a>
+ <a class="js-plugin-changelog-link" href="{{release.changeLogUrl}}" target="_blank">{{t 'update_center.release_notes'}}</a>
{{/if}}
</div>
<div class="js-plugin-changelog-description">{{{release.description}}}</div>
diff --git a/server/sonar-web/src/main/js/apps/update-center/templates/update-center-footer.hbs b/server/sonar-web/src/main/js/apps/update-center/templates/update-center-footer.hbs
index 861df440805..c2ce68490d7 100644
--- a/server/sonar-web/src/main/js/apps/update-center/templates/update-center-footer.hbs
+++ b/server/sonar-web/src/main/js/apps/update-center/templates/update-center-footer.hbs
@@ -1,3 +1,3 @@
<footer class="spacer-top note text-center">
- {{total}} shown
+ {{tp 'x_show' total}}
</footer>
diff --git a/server/sonar-web/src/main/js/apps/update-center/templates/update-center-header.hbs b/server/sonar-web/src/main/js/apps/update-center/templates/update-center-header.hbs
index d70d165fd6b..e2eb7f9cefc 100644
--- a/server/sonar-web/src/main/js/apps/update-center/templates/update-center-header.hbs
+++ b/server/sonar-web/src/main/js/apps/update-center/templates/update-center-header.hbs
@@ -6,31 +6,31 @@
{{#any installing updating uninstalling}}
<div class="js-pending panel panel-warning big-spacer-bottom">
<div class="display-inline-block">
- <p>SonarQube needs to be restarted in order to</p>
+ <p>{{t 'update_center.sonarqube_needs_to_be_restarted_to'}}</p>
<ul class="list-styled spacer-top">
{{#if installing}}
<li>
- install
+ {{t 'update_center._install'}}
<strong class="big text-success little-spacer-left little-spacer-right">{{installing}}</strong> plugins
</li>
{{/if}}
{{#if updating}}
<li>
- update
+ {{t 'update_center._update'}}
<strong class="big text-success little-spacer-left little-spacer-right">{{updating}}</strong> plugins
</li>
{{/if}}
{{#if uninstalling}}
<li>
- uninstall
+ {{t 'update_center._uninstall'}}
<strong class="big text-danger little-spacer-left little-spacer-right">{{uninstalling}}</strong> plugins
</li>
{{/if}}
</ul>
</div>
<div class="pull-right">
- <button class="js-restart">Restart</button>
- <button class="js-cancel-all button-red">Revert</button>
+ <button class="js-restart">{{t 'update_center.restart'}}</button>
+ <button class="js-cancel-all button-red">{{t 'update_center.revert'}}</button>
</div>
</div>
{{/any}}
diff --git a/server/sonar-web/src/main/js/apps/update-center/templates/update-center-plugin-changelog.hbs b/server/sonar-web/src/main/js/apps/update-center/templates/update-center-plugin-changelog.hbs
index aed176b42d8..b75523b983c 100644
--- a/server/sonar-web/src/main/js/apps/update-center/templates/update-center-plugin-changelog.hbs
+++ b/server/sonar-web/src/main/js/apps/update-center/templates/update-center-plugin-changelog.hbs
@@ -1,5 +1,5 @@
<div class="bubble-popup-container">
- <div class="bubble-popup-title">Changelog</div>
+ <div class="bubble-popup-title">{{t 'changelog'}}</div>
<ul class="js-plugin-changelog-list">
{{#each previousUpdates}}
diff --git a/server/sonar-web/src/main/js/apps/update-center/templates/update-center-plugin.hbs b/server/sonar-web/src/main/js/apps/update-center/templates/update-center-plugin.hbs
index fddd712d7ed..0a6f40d4b1f 100644
--- a/server/sonar-web/src/main/js/apps/update-center/templates/update-center-plugin.hbs
+++ b/server/sonar-web/src/main/js/apps/update-center/templates/update-center-plugin.hbs
@@ -14,12 +14,12 @@
<ul>
{{#if version}}
<li class="little-spacer-bottom">
- <strong class="js-plugin-installed-version">{{version}}</strong>&nbsp;installed
+ <strong class="js-plugin-installed-version">{{version}}</strong>&nbsp;{{t 'update_center._installed'}}
</li>
{{/if}}
{{#notEmpty updates}}
<li class="little-spacer-bottom spacer-top">
- <strong>Updates:</strong>
+ <strong>{{t 'update_center.updates'}}:</strong>
</li>
{{#each updates}}
<li class="little-spacer-bottom">
@@ -48,7 +48,7 @@
<button class="button-link js-changelog issue-rule icon-ellipsis-h" data-idx="{{@index}}"></button>
{{#notEmpty update.requires}}
<p class="little-spacer-top">
- <strong>Installing this plugin will also install</strong>: {{#each update.requires}} {{name}}{{/each}}
+ <strong>{{t 'update_center.installing_this_plugin_will_also_install'}}</strong>: {{#each update.requires}} {{name}}{{/each}}
</p>
{{/notEmpty}}
</div>
@@ -63,10 +63,10 @@
<li class="little-spacer-bottom">
<ul class="list-inline">
{{#if homepageUrl}}
- <li><a class="js-plugin-homepage" href="{{homepageUrl}}" target="_blank">Homepage</a></li>
+ <li><a class="js-plugin-homepage" href="{{homepageUrl}}" target="_blank">{{t 'update_center.homepage'}}</a></li>
{{/if}}
{{#if issueTrackerUrl}}
- <li><a class="js-plugin-issues" href="{{issueTrackerUrl}}" target="_blank">Issue Tracker</a></li>
+ <li><a class="js-plugin-issues" href="{{issueTrackerUrl}}" target="_blank">{{t 'update_center.issue_tracker'}}</a></li>
{{/if}}
</ul>
</li>
@@ -74,14 +74,14 @@
{{#if license}}
<li class="little-spacer-bottom text-limited" title="{{license}}">
- Licensed under
+ {{t 'update_center.licensed_under'}}
<span class="js-plugin-license">{{license}}</span>
</li>
{{/if}}
{{#if organizationName}}
<li class="little-spacer-bottom">
- Developed by
+ {{t 'update_center.developed_by'}}
{{#if organizationUrl}}
<a class="js-plugin-organization" href="{{organizationUrl}}" target="_blank">{{organizationName}}</a>
{{else}}
@@ -94,15 +94,15 @@
<td class="text-top text-right width-20">
{{#eq _status 'installing'}}
- <p class="text-success">Install Pending</p>
+ <p class="text-success">{{t 'update_center.install_pending'}}</p>
{{/eq}}
{{#eq _status 'updating'}}
- <p class="text-success">Update Pending</p>
+ <p class="text-success">{{t 'update_center.update_pending'}}</p>
{{/eq}}
{{#eq _status 'uninstalling'}}
- <p class="text-danger">Uninstall Pending</p>
+ <p class="text-danger">{{t 'update_center.uninstall_pending'}}</p>
{{/eq}}
{{#eq _status 'failed'}}
diff --git a/server/sonar-web/src/main/js/apps/update-center/templates/update-center-search.hbs b/server/sonar-web/src/main/js/apps/update-center/templates/update-center-search.hbs
index 7b8e410b186..5a2b91a6d81 100644
--- a/server/sonar-web/src/main/js/apps/update-center/templates/update-center-search.hbs
+++ b/server/sonar-web/src/main/js/apps/update-center/templates/update-center-search.hbs
@@ -4,22 +4,22 @@
<li>
<input type="radio" name="update-center-filter" value="installed" id="update-center-filter-installed"
{{#eq state.section 'installed'}}checked{{/eq}}>
- <label for="update-center-filter-installed">Installed</label>
+ <label for="update-center-filter-installed">{{t 'update_center.installed'}}</label>
</li>
<li>
<input type="radio" name="update-center-filter" value="updates" id="update-center-filter-updates"
{{#eq state.section 'updates'}}checked{{/eq}} {{#unless state.updateCenterActive}}disabled{{/unless}}>
<label for="update-center-filter-updates"
- {{#unless state.updateCenterActive}}data-toggle="tooltip" title="Update Center is not activated."{{/unless}}>
- Updates Only
+ {{#unless state.updateCenterActive}}data-toggle="tooltip" title="{{t 'update_center.not_activated'}}"{{/unless}}>
+ {{t 'update_center.updates_only'}}
</label>
</li>
<li>
<input type="radio" name="update-center-filter" value="available" id="update-center-filter-available"
{{#eq state.section 'available'}}checked{{/eq}} {{#unless state.updateCenterActive}}disabled{{/unless}}>
<label for="update-center-filter-available"
- {{#unless state.updateCenterActive}}data-toggle="tooltip" title="Update Center is not activated."{{/unless}}>
- Available
+ {{#unless state.updateCenterActive}}data-toggle="tooltip" title="{{t 'update_center.not_activated'}}"{{/unless}}>
+ {{t 'update_center.available'}}
</label>
</li>
</ul>
@@ -29,8 +29,8 @@
<input type="radio" name="update-center-filter" value="system" id="update-center-filter-system"
{{#eq state.section 'system'}}checked{{/eq}} {{#unless state.updateCenterActive}}disabled{{/unless}}>
<label for="update-center-filter-system"
- {{#unless state.updateCenterActive}}data-toggle="tooltip" title="Update Center is not activated."{{/unless}}>
- System Upgrades
+ {{#unless state.updateCenterActive}}data-toggle="tooltip" title="{{t 'update_center.not_activated'}}"{{/unless}}>
+ {{t 'update_center.system_upgrades'}}
</label>
</li>
</ul>
@@ -40,7 +40,7 @@
<form id="update-center-search-form" class="search-box display-inline-block text-top">
<button id="update-center-search-submit" class="search-box-submit button-clean"><i class="icon-search"></i>
</button>
- <input id="update-center-search-query" class="search-box-input" type="search" name="q" placeholder="Search"
+ <input id="update-center-search-query" class="search-box-input" type="search" name="q" placeholder="{{t 'search_verb'}}"
maxlength="100" autocomplete="off">
</form>
{{/notEq}}
diff --git a/server/sonar-web/src/main/js/apps/update-center/templates/update-center-system-update.hbs b/server/sonar-web/src/main/js/apps/update-center/templates/update-center-system-update.hbs
index fca982cf447..0a8f1e1838a 100644
--- a/server/sonar-web/src/main/js/apps/update-center/templates/update-center-system-update.hbs
+++ b/server/sonar-web/src/main/js/apps/update-center/templates/update-center-system-update.hbs
@@ -13,45 +13,44 @@
<td class="text-top width-20 big-spacer-right">
<div>
<strong class="js-plugin-name">SonarQube {{version}}</strong>
- <span class="js-plugin-category badge badge-success spacer-left">System Upgrade</span>
+ <span class="js-plugin-category badge badge-success spacer-left">{{t 'update_center.system_upgrade'}}</span>
</div>
<div class="js-plugin-description little-spacer-top">{{{description}}}</div>
<ul class="big-spacer-top">
{{#if changeLogUrl}}
<li class="little-spacer-bottom">
- <a class="js-plugin-release-notes" href="{{changeLogUrl}}" target="_blank">Release Notes</a>
+ <a class="js-plugin-release-notes" href="{{changeLogUrl}}" target="_blank">{{t 'update_center.release_notes'}}</a>
</li>
{{/if}}
{{#if releaseDate}}
- <li class="little-spacer-bottom">Released: <span class="js-plugin-date">{{d releaseDate}}</span></li>
+ <li class="little-spacer-bottom">{{t 'update_center.released'}}: <span class="js-plugin-date">{{d releaseDate}}</span></li>
{{/if}}
</ul>
</td>
<td class="text-top width-60">
<div class="pull-left spacer-right">
- <strong>How to upgrade</strong>
+ <strong>{{t 'update_center.how_to_upgrade'}}</strong>
</div>
<ol class="js-plugin-update-steps list-styled overflow-hidden bordered-left">
<li class="little-spacer-bottom">
- Download the new SonarQube version and start it on an empty DB (the bundled H2 DB for instance).
+ {{t 'update_center.how_to_upgrade.1'}}
</li>
<li class="little-spacer-bottom">
- Install (from the update center) the plugins you want.
+ {{t 'update_center.how_to_upgrade.2'}}
</li>
<li class="little-spacer-bottom">
- Install your custom plugins (if any).
+ {{t 'update_center.how_to_upgrade.3'}}
</li>
<li class="little-spacer-bottom">
- Update the <code>conf/sonar.properties</code> file to use the relevant configurations from your old instance,
- including the connection information for your production DB.
+ {{t 'update_center.how_to_upgrade.4'}}
</li>
<li class="little-spacer-bottom">
- Stop your old SonarQube server.
+ {{t 'update_center.how_to_upgrade.5'}}
</li>
<li>
- Restart the new SonarQube instance: you're done!
+ {{t 'update_center.how_to_upgrade.6'}}
</li>
</ol>
</td>
diff --git a/server/sonar-web/src/main/js/apps/users/templates/users-change-password.hbs b/server/sonar-web/src/main/js/apps/users/templates/users-change-password.hbs
index 90b7c8cb138..020befdea88 100644
--- a/server/sonar-web/src/main/js/apps/users/templates/users-change-password.hbs
+++ b/server/sonar-web/src/main/js/apps/users/templates/users-change-password.hbs
@@ -1,32 +1,32 @@
<form id="change-user-password-form" autocomplete="off">
<div class="modal-head">
- <h2>Change Password</h2>
+ <h2>{{t 'my_profile.password.title'}}</h2>
</div>
<div class="modal-body">
<div class="js-modal-messages"></div>
{{#if isOwnPassword}}
<div class="modal-field">
- <label for="change-user-password-old-password">Old Password<em class="mandatory">*</em></label>
+ <label for="change-user-password-old-password">{{t 'my_profile.password.old'}}<em class="mandatory">*</em></label>
{{! keep this fake field to hack browser autofill }}
<input id="change-user-password-old-password-fake" name="old-password-fake" type="password" class="hidden">
<input id="change-user-password-old-password" name="old-password" type="password" size="50" maxlength="50" required>
</div>
{{/if}}
<div class="modal-field">
- <label for="change-user-password-password">New Password<em class="mandatory">*</em></label>
+ <label for="change-user-password-password">{{t 'my_profile.password.new'}}<em class="mandatory">*</em></label>
{{! keep this fake field to hack browser autofill }}
<input id="change-user-password-password-fake" name="password-fake" type="password" class="hidden">
<input id="change-user-password-password" name="password" type="password" size="50" maxlength="50" required>
</div>
<div class="modal-field">
- <label for="change-user-password-password-confirmation">Confirm Password<em class="mandatory">*</em></label>
+ <label for="change-user-password-password-confirmation">{{t 'my_profile.password.confirm'}}<em class="mandatory">*</em></label>
{{! keep this fake field to hack browser autofill }}
<input id="change-user-password-password-confirmation-fake" name="password-confirmation-fake" type="password" class="hidden">
<input id="change-user-password-password-confirmation" name="password-confirmation" type="password" size="50" maxlength="50" required>
</div>
</div>
<div class="modal-foot">
- <button id="change-user-password-submit">Change</button>
- <a href="#" class="js-modal-close" id="change-user-password-cancel">Cancel</a>
+ <button id="change-user-password-submit">{{t 'change_verb'}}</button>
+ <a href="#" class="js-modal-close" id="change-user-password-cancel">{{t 'cancel'}}</a>
</div>
</form>
diff --git a/server/sonar-web/src/main/js/apps/users/templates/users-deactivate.hbs b/server/sonar-web/src/main/js/apps/users/templates/users-deactivate.hbs
index 4d92cfd6e72..6ff6e8692e1 100644
--- a/server/sonar-web/src/main/js/apps/users/templates/users-deactivate.hbs
+++ b/server/sonar-web/src/main/js/apps/users/templates/users-deactivate.hbs
@@ -1,13 +1,13 @@
<form id="deactivate-user-form" autocomplete="off">
<div class="modal-head">
- <h2>Deactivate User</h2>
+ <h2>{{t 'users.deactivate_user'}}</h2>
</div>
<div class="modal-body">
<div class="js-modal-messages"></div>
- Are you sure you want to deactivate "{{name}} ({{login}})"?
+ {{tp 'users.deactivate_user.confirmation' name login}}
</div>
<div class="modal-foot">
- <button id="deactivate-user-submit">Deactivate</button>
- <a href="#" class="js-modal-close" id="deactivate-user-cancel">Cancel</a>
+ <button id="deactivate-user-submit">{{t 'users.deactivate'}}</button>
+ <a href="#" class="js-modal-close" id="deactivate-user-cancel">{{t 'cancel'}}</a>
</div>
</form>
diff --git a/server/sonar-web/src/main/js/apps/users/templates/users-form.hbs b/server/sonar-web/src/main/js/apps/users/templates/users-form.hbs
index 0530a745963..908eefb5df4 100644
--- a/server/sonar-web/src/main/js/apps/users/templates/users-form.hbs
+++ b/server/sonar-web/src/main/js/apps/users/templates/users-form.hbs
@@ -1,41 +1,41 @@
<form id="create-user-form" autocomplete="off">
<div class="modal-head">
- <h2>{{#if login}}Update{{else}}Create{{/if}} User</h2>
+ <h2>{{#if login}}{{t 'users.update_user'}}{{else}}{{t 'users.create_user'}}{{/if}}</h2>
</div>
<div class="modal-body">
<div class="js-modal-messages"></div>
{{#unless login}}
<div class="modal-field">
- <label for="create-user-login">Login<em class="mandatory">*</em></label>
+ <label for="create-user-login">{{t 'login'}}<em class="mandatory">*</em></label>
{{! keep this fake field to hack browser autofill }}
<input id="create-user-login-fake" name="login-fake" type="text" class="hidden">
<input id="create-user-login" name="login" type="text" size="50" minlength="3" maxlength="255" required
value="{{login}}">
- <p class="note">Minimum 3 characters</p>
+ <p class="note">{{tp 'users.minimum_x_characters' 3}}</p>
</div>
{{/unless}}
<div class="modal-field">
- <label for="create-user-name">Name<em class="mandatory">*</em></label>
+ <label for="create-user-name">{{t 'name'}}<em class="mandatory">*</em></label>
{{! keep this fake field to hack browser autofill }}
<input id="create-user-name-fake" name="name-fake" type="text" class="hidden">
<input id="create-user-name" name="name" type="text" size="50" maxlength="200" required value="{{name}}">
</div>
<div class="modal-field">
- <label for="create-user-email">Email</label>
+ <label for="create-user-email">{{t 'users.email'}}</label>
{{! keep this fake field to hack browser autofill }}
<input id="create-user-email-fake" name="email-fake" type="email" class="hidden">
<input id="create-user-email" name="email" type="email" size="50" maxlength="100" value="{{email}}">
</div>
{{#unless login}}
<div class="modal-field">
- <label for="create-user-password">Password<em class="mandatory">*</em></label>
+ <label for="create-user-password">{{t 'password'}}<em class="mandatory">*</em></label>
{{! keep this fake field to hack browser autofill }}
<input id="create-user-password-fake" name="password-fake" type="password" class="hidden">
<input id="create-user-password" name="password" type="password" size="50" maxlength="50" required>
</div>
{{/unless}}
<div class="modal-field">
- <label>SCM Accounts</label>
+ <label>{{t 'my_profile.scm_accounts'}}</label>
{{#each scmAccounts}}
<input name="scmAccounts" type="text" size="50" maxlength="255" value="{{this}}">
{{else}}
@@ -43,11 +43,11 @@
{{/each}}
<a id="create-user-add-scm-account" class="icon-plus" href="#" title="Add another SCM account"
data-toggle="tooltip"></a>
- <p class="note">Note that login and email are automatically considered as SCM accounts</p>
+ <p class="note">{{t 'user.login_or_email_used_as_scm_account'}}</p>
</div>
</div>
<div class="modal-foot">
- <button id="create-user-submit">{{#if login}}Update{{else}}Create{{/if}}</button>
- <a href="#" class="js-modal-close" id="create-user-cancel">Cancel</a>
+ <button id="create-user-submit">{{#if login}}{{t 'update_verb'}}{{else}}{{t 'create'}}{{/if}}</button>
+ <a href="#" class="js-modal-close" id="create-user-cancel">{{t 'cancel'}}</a>
</div>
</form>
diff --git a/server/sonar-web/src/main/js/apps/users/templates/users-groups.hbs b/server/sonar-web/src/main/js/apps/users/templates/users-groups.hbs
index 422716c7d9a..d98651e8c11 100644
--- a/server/sonar-web/src/main/js/apps/users/templates/users-groups.hbs
+++ b/server/sonar-web/src/main/js/apps/users/templates/users-groups.hbs
@@ -1,10 +1,10 @@
<div class="modal-head">
- <h2>Update Groups</h2>
+ <h2>{{t 'users.update_groups'}}</h2>
</div>
<div class="modal-body">
<div class="js-modal-messages"></div>
<div id="users-groups"></div>
</div>
<div class="modal-foot">
- <a href="#" class="js-modal-close" id="users-groups-done">Done</a>
+ <a href="#" class="js-modal-close" id="users-groups-done">{{t 'Done'}}</a>
</div>
diff --git a/server/sonar-web/src/main/js/apps/users/templates/users-header.hbs b/server/sonar-web/src/main/js/apps/users/templates/users-header.hbs
index 66dff8a39b6..fbd2d43f5db 100644
--- a/server/sonar-web/src/main/js/apps/users/templates/users-header.hbs
+++ b/server/sonar-web/src/main/js/apps/users/templates/users-header.hbs
@@ -3,7 +3,7 @@
<i class="spinner hidden"></i>
<div class="page-actions">
<div class="button-group">
- <button id="users-create">Create User</button>
+ <button id="users-create">{{t 'users.create_user'}}</button>
</div>
</div>
<p class="page-description">{{t 'users.page.description'}}</p>
diff --git a/server/sonar-web/src/main/js/apps/users/templates/users-list-footer.hbs b/server/sonar-web/src/main/js/apps/users/templates/users-list-footer.hbs
index 3cf34d7be8f..28115fb9c91 100644
--- a/server/sonar-web/src/main/js/apps/users/templates/users-list-footer.hbs
+++ b/server/sonar-web/src/main/js/apps/users/templates/users-list-footer.hbs
@@ -1,6 +1,6 @@
<footer class="spacer-top note text-center">
- {{count}}/{{total}} shown
+ {{tp 'x_of_y_shown' count total}}
{{#if more}}
- <a id="users-fetch-more" class="spacer-left" href="#">show more</a>
+ <a id="users-fetch-more" class="spacer-left" href="#">{{t 'show_more'}}</a>
{{/if}}
</footer>
diff --git a/server/sonar-web/src/main/js/apps/users/templates/users-list-item.hbs b/server/sonar-web/src/main/js/apps/users/templates/users-list-item.hbs
index 9e73394a88c..44c303a7db1 100644
--- a/server/sonar-web/src/main/js/apps/users/templates/users-list-item.hbs
+++ b/server/sonar-web/src/main/js/apps/users/templates/users-list-item.hbs
@@ -35,7 +35,7 @@
{{/each}}
{{#gt moreScmAccountsCount 0}}
<li class="little-spacer-bottom">
- <a class="js-user-more-scm" href="#">{{moreScmAccountsCount}} more</a>
+ <a class="js-user-more-scm" href="#">{{moreScmAccountsCount}} {{t 'more'}}</a>
</li>
{{/gt}}
</ul>
@@ -49,9 +49,9 @@
{{/each}}
<li class="little-spacer-bottom">
{{#gt moreGroupsCount 0}}
- <a class="js-user-more-groups spacer-right" href="#">{{moreGroupsCount}} more</a>
+ <a class="js-user-more-groups spacer-right" href="#">{{moreGroupsCount}} {{t 'more'}}</a>
{{/gt}}
- <a class="js-user-groups icon-bullet-list" title="Update Groups" data-toggle="tooltip" href="#"></a>
+ <a class="js-user-groups icon-bullet-list" title="{{t 'users.update_groups'}}" data-toggle="tooltip" href="#"></a>
</li>
</ul>
</td>
@@ -59,14 +59,14 @@
<td>
{{tokensCount}}
- <a class="js-user-tokens spacer-left icon-bullet-list" title="Update Tokens" data-toggle="tooltip" href="#"></a>
+ <a class="js-user-tokens spacer-left icon-bullet-list" title="{{t 'users.update_tokens'}}" data-toggle="tooltip" href="#"></a>
</td>
<td class="thin nowrap text-right">
- <a class="js-user-update icon-edit little-spacer-right" title="Update Details" data-toggle="tooltip" href="#"></a>
+ <a class="js-user-update icon-edit little-spacer-right" title="{{t 'update_details'}}" data-toggle="tooltip" href="#"></a>
{{#if local}}
- <a class="js-user-change-password icon-lock little-spacer-right" title="Change Password" data-toggle="tooltip"
+ <a class="js-user-change-password icon-lock little-spacer-right" title="{{t 'my_profile.password.title'}}" data-toggle="tooltip"
href="#"></a>
{{/if}}
- <a class="js-user-deactivate icon-delete" title="Deactivate" data-toggle="tooltip" href="#"></a>
+ <a class="js-user-deactivate icon-delete" title="{{t 'users.deactivate'}}" data-toggle="tooltip" href="#"></a>
</td>
diff --git a/server/sonar-web/src/main/js/apps/users/templates/users-list.hbs b/server/sonar-web/src/main/js/apps/users/templates/users-list.hbs
index e619880b584..e0c90491015 100644
--- a/server/sonar-web/src/main/js/apps/users/templates/users-list.hbs
+++ b/server/sonar-web/src/main/js/apps/users/templates/users-list.hbs
@@ -3,11 +3,11 @@
<tr>
<th>&nbsp;</th>
<th class="nowrap">&nbsp;</th>
- <th class="nowrap">SCM Accounts</th>
+ <th class="nowrap">{{t 'my_profile.scm_accounts'}}</th>
{{#unless customOrganizations}}
- <th class="nowrap">Groups</th>
+ <th class="nowrap">{{t 'my_profile.groups'}}</th>
{{/unless}}
- <th class="nowrap">Tokens</th>
+ <th class="nowrap">{{t 'users.tokens'}}</th>
<th class="nowrap">&nbsp;</th>
</tr>
</thead>
diff --git a/server/sonar-web/src/main/js/apps/users/templates/users-search.hbs b/server/sonar-web/src/main/js/apps/users/templates/users-search.hbs
index 625c81e15b9..4b879a050ba 100644
--- a/server/sonar-web/src/main/js/apps/users/templates/users-search.hbs
+++ b/server/sonar-web/src/main/js/apps/users/templates/users-search.hbs
@@ -1,7 +1,7 @@
<div class="panel panel-vertical bordered-bottom spacer-bottom">
<form id="users-search-form" class="search-box">
<button id="users-search-submit" class="search-box-submit button-clean"><i class="icon-search"></i></button>
- <input id="users-search-query" class="search-box-input" type="search" name="q" placeholder="Search" maxlength="100">
+ <input id="users-search-query" class="search-box-input" type="search" name="q" placeholder="{{t 'search_verb'}}" maxlength="100">
<span class="js-hint note spacer-left text-middle hidden">
{{tp 'select2.tooShort' 2}}
</span>
diff --git a/server/sonar-web/src/main/js/apps/users/templates/users-tokens.hbs b/server/sonar-web/src/main/js/apps/users/templates/users-tokens.hbs
index 2e0b1ed9f35..1080f88a5bd 100644
--- a/server/sonar-web/src/main/js/apps/users/templates/users-tokens.hbs
+++ b/server/sonar-web/src/main/js/apps/users/templates/users-tokens.hbs
@@ -1,5 +1,5 @@
<div class="modal-head">
- <h2>Tokens</h2>
+ <h2>{{t 'users.tokens'}}</h2>
</div>
<div class="modal-body">
@@ -9,8 +9,8 @@
<table class="data zebra">
<thead>
<tr>
- <th>Name</th>
- <th class="text-right">Created</th>
+ <th>{{t 'name'}}</th>
+ <th class="text-right">{{t 'created'}}</th>
<th>&nbsp;</th>
</tr>
</thead>
@@ -29,9 +29,9 @@
<div class="big-spacer-left">
<form class="js-revoke-token-form" data-token="{{name}}">
{{#if deleting}}
- <button class="button-red active input-small">Sure?</button>
+ <button class="button-red active input-small">{{t 'users.tokens.sure'}}</button>
{{else}}
- <button class="button-red input-small">Revoke</button>
+ <button class="button-red input-small">{{t 'users.tokens.revoke'}}</button>
{{/if}}
</form>
</div>
@@ -40,7 +40,7 @@
{{else}}
<tr>
<td colspan="3">
- <span class="note">No tokens</span>
+ <span class="note">{{t 'users.no_tokens'}}</span>
</td>
</tr>
{{/each}}
@@ -50,28 +50,28 @@
<hr class="big-spacer-top big-spacer-bottom">
- <h3 class="spacer-bottom">Generate Tokens</h3>
+ <h3 class="spacer-bottom">{{t 'users.generate_tokens'}}</h3>
{{#each errors}}
<div class="alert alert-danger">{{msg}}</div>
{{/each}}
<form class="js-generate-token-form">
- <input type="text" required maxlength="100" placeholder="Enter Token Name">
- <button>Generate</button>
+ <input type="text" required maxlength="100" placeholder="{{t 'users.enter_token_name'}}">
+ <button>{{t 'users.generate'}}</button>
</form>
{{#if newToken}}
<div class="panel panel-white big-spacer-top">
<div class="alert alert-warning">
- New token "{{limitString newToken.name}}" has been created. Make sure you copy it now, you won’t be able to see it again!
+ {{tp 'users.tokens.new_token_created' newToken.name}}
</div>
<table class="data">
<tr>
<td class="thin">
- <button class="js-copy-to-clipboard" data-clipboard-text="{{newToken.token}}">Copy</button>
+ <button class="js-copy-to-clipboard" data-clipboard-text="{{newToken.token}}">{{t 'copy'}}</button>
</td>
<td class="nowrap">
<code class="text-success">{{newToken.token}}</code>
@@ -83,5 +83,5 @@
</div>
<div class="modal-foot">
- <a href="#" class="js-modal-close">Done</a>
+ <a href="#" class="js-modal-close">{{t 'Done'}}</a>
</div>
diff --git a/server/sonar-web/src/main/js/apps/users/tokens-view.js b/server/sonar-web/src/main/js/apps/users/tokens-view.js
index 01889e1d848..fb9434142c0 100644
--- a/server/sonar-web/src/main/js/apps/users/tokens-view.js
+++ b/server/sonar-web/src/main/js/apps/users/tokens-view.js
@@ -22,6 +22,7 @@ import Clipboard from 'clipboard';
import Modal from '../../components/common/modals';
import Template from './templates/users-tokens.hbs';
import { getTokens, generateToken, revokeToken } from '../../api/user-tokens';
+import { translate } from '../../helpers/l10n';
export default Modal.extend({
template: Template,
@@ -84,7 +85,11 @@ export default Modal.extend({
const clipboard = new Clipboard(copyButton.get(0));
clipboard.on('success', () => {
copyButton
- .tooltip({ title: 'Copied!', placement: 'bottom', trigger: 'manual' })
+ .tooltip({
+ title: translate('users.tokens.copied'),
+ placement: 'bottom',
+ trigger: 'manual'
+ })
.tooltip('show');
setTimeout(() => copyButton.tooltip('hide'), 1000);
});
diff --git a/server/sonar-web/src/main/js/components/SourceViewer/views/measures-overlay.js b/server/sonar-web/src/main/js/components/SourceViewer/views/measures-overlay.js
index e2ab2a305cd..e30f3d8fcd1 100644
--- a/server/sonar-web/src/main/js/components/SourceViewer/views/measures-overlay.js
+++ b/server/sonar-web/src/main/js/components/SourceViewer/views/measures-overlay.js
@@ -25,6 +25,7 @@ import ModalView from '../../common/modals';
import Template from './templates/source-viewer-measures.hbs';
import { getMeasures } from '../../../api/measures';
import { getMetrics } from '../../../api/metrics';
+import { getLocalizedMetricName, getLocalizedMetricDomain } from '../../../helpers/l10n';
import { formatMeasure } from '../../../helpers/measures';
const severityComparator = severity => {
@@ -134,11 +135,13 @@ export default ModalView.extend({
},
prepareMetrics(metrics) {
- metrics = metrics.filter(metric => metric.value != null);
+ metrics = metrics
+ .filter(metric => metric.value != null)
+ .map(metric => ({ ...metric, name: getLocalizedMetricName(metric) }));
return sortBy(
toPairs(groupBy(metrics, 'domain')).map(domain => {
return {
- name: domain[0],
+ name: getLocalizedMetricDomain(domain[0]),
metrics: domain[1]
};
}),
diff --git a/server/sonar-web/src/main/js/components/SourceViewer/views/templates/_source-viewer-measures-duplications.hbs b/server/sonar-web/src/main/js/components/SourceViewer/views/templates/_source-viewer-measures-duplications.hbs
index f6119c38fb6..596e7d21650 100644
--- a/server/sonar-web/src/main/js/components/SourceViewer/views/templates/_source-viewer-measures-duplications.hbs
+++ b/server/sonar-web/src/main/js/components/SourceViewer/views/templates/_source-viewer-measures-duplications.hbs
@@ -10,7 +10,7 @@
</div>
<div class="measure measure-big" data-metric="duplicated_lines_density">
<span class="measure-value">{{measures.duplicated_lines_density}}</span>
- <span class="measure-name">Duplications</span>
+ <span class="measure-name">{{t 'metric.duplicated_lines_density.short_name'}}</span>
</div>
</div>
diff --git a/server/sonar-web/src/main/js/components/SourceViewer/views/templates/_source-viewer-measures-lines.hbs b/server/sonar-web/src/main/js/components/SourceViewer/views/templates/_source-viewer-measures-lines.hbs
index f0c81d0349b..28464266c79 100644
--- a/server/sonar-web/src/main/js/components/SourceViewer/views/templates/_source-viewer-measures-lines.hbs
+++ b/server/sonar-web/src/main/js/components/SourceViewer/views/templates/_source-viewer-measures-lines.hbs
@@ -9,7 +9,7 @@
<span class="measure-value">{{measures.ncloc}}</span>
</div>
<div class="measure measure-one-line" data-metric="comment_lines">
- <span class="measure-name">Comments</span>
+ <span class="measure-name">{{t 'metric.comment_lines_density.short_name'}}</span>
<span class="measure-value">{{measures.comment_lines_density}} / {{measures.comment_lines}}</span>
</div>
</div>
diff --git a/sonar-core/src/main/resources/org/sonar/l10n/core.properties b/sonar-core/src/main/resources/org/sonar/l10n/core.properties
index 5f553cff297..f47db92d842 100644
--- a/sonar-core/src/main/resources/org/sonar/l10n/core.properties
+++ b/sonar-core/src/main/resources/org/sonar/l10n/core.properties
@@ -6,18 +6,12 @@
action=Action
actions=Actions
-activate_all=Activate all
-activation=Activation
active=Active
add_verb=Add
-age=Age
apply=Apply
-assigned_to_me=Assigned to me
-association=Association
all=All
and=And
any=Any
-anytime=Anytime
ascending=Ascending
assignee=Assignee
author=Author
@@ -25,12 +19,10 @@ back=Back
backup=Backup
backup_verb=Back up
best=Best
-biggest=Biggest
blocker=Blocker
bold=Bold
branch=Branch
-build_date=Build date
-build_time=Build time
+by_=by
calendar=Calendar
cancel=Cancel
category=Category
@@ -44,13 +36,13 @@ code=Code
color=Color
compare=Compare
component=Component
-configurable=Configurable
configure=Configure
confirm=Confirm
continue=Continue
copy=Copy
create=Create
created=Created
+created_on=Created on
critical=Critical
customize=Customize
date=Date
@@ -72,15 +64,12 @@ favorite=Favorite
file=File
files=Files
filters=Filters
-filter_verb=Filter
follow=Follow
from=From
global=Global
help=Help
hide=Hide
-identifier_abbreviated=Id
inactive=Inactive
-including_abbreviated=incl.
info=Info
issue=Issue
issues=Issues
@@ -95,7 +84,6 @@ login=Login
major=Major
manual=Manual
max=Max
-max_items_reached=Only the first {0} components are displayed
max_results_reached=Only the first {0} results are displayed
me=Me
members=Members
@@ -103,11 +91,9 @@ min=Min
minor=Minor
more=More
more_actions=More Actions
-moreCriteria=+ More Criteria
my_favorite=My Favorite
my_favorites=My Favorites
name=Name
-name_too_long_x=Name is too long (maximum is {0} characters)
navigation=Navigation
never=Never
new_name=New name
@@ -117,18 +103,13 @@ off=Off
on=On
organization_key=Organization Key
open=Open
-open_verb=Open
-operations=Operations
optional=Optional
order=Order
owner=Owner
-package=Package
-packages=Packages
parameters=Parameters
password=Password
path=Path
permalink=Permanent Link
-permalinks=Permalinks
plugin=Plugin
project=Project
projects=Projects
@@ -151,50 +132,36 @@ result=Result
results=Results
x_results={0} results
review=Review
-reviews=Reviews
-review_verb=Review
rule=Rule
rules=Rules
save=Save
-save_as=Save As
search_verb=Search
see_all=See All
-select_all=Select all
select_verb=Select
set=Set
severity=Severity
-severity_abbreviated=Se.
shared=Shared
-show_verb=Show
+x_show={0} shown
x_of_y_shown={0} of {1} shown
size=Size
-smallest=Smallest
status=Status
-status_abbreviated=St.
-sub_project=Sub-project
-sub_projects=Sub-projects
-sub_view=Sub-view
-sub_views=Sub-views
table=Table
+tags=Tags
technical_debt=Technical Debt
template=Template
-the_end=The End
title=Title
to=To
-to.downcase=to
total=Total
treemap=Treemap
true=True
type=Type
unassigned=Not assigned
-unfollow=Unfollow
unit_test=Unit test
unit_tests=Unit tests
unknown=Unknown
unresolved=Unresolved
-unselect_all=Unselect all
-unselect_verb=Unselect
updated=Updated
+updated_on=Updated on
update_verb=Update
updating=Updating
user=User
@@ -217,86 +184,36 @@ yes=Yes
#
#------------------------------------------------------------------------------
-add_a_column=Add a column
-added_over_x_days=Added over {0} days
-added_since=Added since {0}
-added_since_previous_analysis=Added since previous analysis
-added_since_previous_analysis_detailed=Added since previous analysis ({0})
-added_since_previous_version=Added since previous version
-added_since_previous_version_detailed=Added since previous version ({0})
-added_since_version=Added since version {0}
-all_violations=All violations
-all_issues=All issues
and_worse=and worse
are_you_sure=Are you sure?
assigned_to=Assigned to
bulk_change=Bulk Change
bulleted_point=Bulleted point
-buy_developer_pack=Buy Developer Pack now
-check_project=Check project
coding_rules=Rules
clear=Clear
clear_all_filters=Clear All Filters
-click_to_add_to_favorites=Click to add to favorites
-click_to_remove_from_favorites=Click to remove from favorites
-contact_admin=Please contact your administrator.
created_by=Created by
-deactivate_all=Deactivate all
default_error_message=The request cannot be processed. Try again later.
default_severity=Default severity
-default_sort_on=Default sort on
-disable_treemap=Disable treemap
edit_permissions=Edit Permissions
-enable_treemap=Enable treemap
-equals=Equals
false_positive=False positive
-false_positives_only=False positives only
-full_source=Full source
-greater_or_equals=Greater or equals
-greater_than=Greater than
-help_tips=Help tips
last_analysis_before=Last analysis before
-learn_more=Learn more
-less_or_equals=Less or equals
-less_than=Less than
logging_out=You're logging out, please wait...
manage=Manage
-move_left=Move left
-move_right=Move right
+management=Management
my_organizations=My Organizations
-new_issues=New issues
new_violations=New violations
new_window=New window
no_data=No data
-no_lines_match_your_filter_criteria=No lines match your filter criteria.
no_results=No results
no_results_for_x=No results for "{0}"
no_results_search=We couldn't find any results matching selected criteria.
no_results_search.2=Try to change filters to get some results.
-not_authorized=You are not authorized to access this page.
-not_authorized_to_access_project=You are not authorized to access to this '{0}' project
-over_x_days=over {0} days
-over_x_days.short={0} days
-over_x_days_detailed=over {0} days ({1})
-over_x_days_detailed.short={0} days ({1})
-page_size=Page size
page_extension_failed=Page extension failed.
-paging_first=First
-paging_last=Last
-paging_next=Next
-paging_previous=Previous
-project_name=Project name
-remove_column=Remove this column
-results_not_display_due_to_security=Due to security settings, some results are not being displayed.
-save_and_preview=Save & Preview
-select_a_metric=Select a metric
set_as_default=Set as Default
unset_as_default=Unset as Default
-shared_by=Shared by
-show_less=Show Less
show_more=Show More
-since_x=since {0}
-since_x.short={0}
+should_be_unique=Should be unique
since_previous_analysis=since previous analysis
since_previous_analysis_detailed=since previous analysis ({0})
since_previous_analysis.short=\u0394 last
@@ -311,7 +228,7 @@ since_previous_version_detailed=since previous version ({0} - {1})
since_previous_version_with_only_date=since previous version ({0})
since_previous_version_detailed.short=\u0394 version ({0})
this_name_is_already_taken=This name is already taken.
-time_changes=Time changes
+update_details=Update details
work_duration.x_days={0}d
work_duration.x_hours={0}h
work_duration.x_minutes={0}min
@@ -500,14 +417,7 @@ layout.login=Log in
layout.logout=Log out
layout.measures=Measures
layout.settings=Administration
-layout.print=Print
-layout.permalink=Permalink
layout.sonar.slogan=Continuous Code Quality
-layout.dashboards=Dashboards
-layout.configuration=Project Configuration
-layout.projects=Projects
-layout.recent_projects=Recent Projects
-layout.user_panel.my_profile=My profile
sidebar.projects=Projects
sidebar.project_settings=Configuration
@@ -538,21 +448,9 @@ visibility.private.description.short=Only authorized users can browse and see th
#
#------------------------------------------------------------------------------
-all_rules.page=All Rules
-analysis_reports.page=Project Computation
coding_rules.page=Rules
global_permissions.page=Global Permissions
global_permissions.page.description=Grant and revoke permissions to make changes at the global level. These permissions include editing quality profiles, sharing dashboards, and performing global system administration.
-custom_metrics.page=Custom Metrics
-manual_metrics.page=Manual Metrics
-manual_metrics.page.description=These metrics are available for all projects. Manual measures can be set at project level via the configuration interface.
-manual_metrics.add_manual_metric=Add New Manual Metric
-manual_metrics.delete_manual_metric=Delete Manual Metric
-manual_metrics.delete_manual_metric_message=Are you sure that you want to delete manual metric "{0}"? \n Warning: all the associated manual measures will be deleted.
-manual_measures.page=Manual Measures
-manual_measures.page.description=Update the values of manual metrics for this project. Changes will take effect at the project's next analysis. Manual Metrics must be created at the global level.
-custom_measures.page=Custom Measures
-custom_measures.page.description=Update the values of custom metrics for this project. Changes will take effect at the project's next analysis. Custom metrics must be created at the global level.
organization_permissions.page.description=Grant and revoke organization permissions. Permissions can be granted to groups or individual users.
roles.page=Project Permissions
roles.page.description2=Grant and revoke project-level permissions. Permissions can be granted to groups or individual users.
@@ -561,36 +459,20 @@ project_settings.page=General Settings
project_settings.page.description=Edit project settings.
project_links.page=Links
project_links.page.description=Edit some links associated with this project.
-project_history.page=History
-project_history.page.description=Edit snapshot metadata, or delete snapshots from the project history.
-project_roles.page=Project Permissions
-project_roles.page.description=Grant and revoke permissions to this project to Browse (view a project's metrics), See Source Code, and Administer. Permissions can be granted to groups or individual users.
-project_roles.page.description2=Grant and revoke project-level permissions. Permissions can be granted to groups or individual users.
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.
system_info.page=System Info
-users.page=Users
-users.page.description=Create and administer individual users.
-user_groups.page=Groups
-user_groups.page.description=Create and administer groups of users.
-user_groups.anyone.description=Anybody (authenticated or not) who browses the application belongs to this group
-update_center.page=Update Center
-update_center.page.description=Install, uninstall and delete plugins. You can also download SonarQube updates from the System Updates tab on this page.
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.)
project_quality_gate.page=Quality Gate
project_quality_gate.page.description=Choose which quality gate is associated with this project.
-bulk_deletion.page=Bulk Deletion
-bulk_deletion.page.description=Use this page to delete multiple projects at once.
update_key.page=Update Key
update_key.page.description=Edit the keys of a project and/or its modules. Key changes must be made here BEFORE analyzing the project with the new keys, otherwise the analysis will simply create another project with the new key, rather than updating the existing project.
deletion.page=Deletion
project_deletion.page.description=Delete this project. The operation cannot be undone.
portfolio_deletion.page.description=Delete this portfolio. Component projects and Local Reference Portfolios will not be deleted, but component Standard Portfolios will be deleted. This operation cannot be undone.
application_deletion.page.description=Delete this application. Application projects will not be deleted. This operation cannot be undone.
-provisioning.page=Provisioning
-provisioning.page.description=Use this page to initialize projects if you would like to configure them before the first analysis. Once a project is provisioned, you have access to perform all project configurations on it.
project_branches.page=Branches
project_branches.page.description=Use this page to manage project branches.
project_branches.page.life_time=Short living branches are permanently deleted when there is no analysis for {days} days.
@@ -602,26 +484,12 @@ project_branches.page.life_time.admin=Short living branches are permanently dele
#
#------------------------------------------------------------------------------
-clouds.page=Clouds
overview.page=Overview
code.page=Code
-components.page=Components
-coverage.page=Coverage
-default_dashboards.page=Default Dashboards
-dependencies.page=Dependencies
-duplications.page=Duplications
-email_configuration.page=Email Settings
-event_categories.page=Event Categories
-filters.page=Filters
-my_profile.page=My Profile
permissions.page=Permissions
quality_profiles.page=Quality Profiles
quality_gates.page=Quality Gates
issues.page=Issues
-issues_drilldown.page=Issues Drilldown
-source.page=Source
-timemachine.page=Time Machine
-comparison.page=Compare
view_projects.page=Projects
portfolios.page=Portfolios
project_activity.page=Activity
@@ -644,12 +512,6 @@ process.fail=Failed
#------------------------------------------------------------------------------
sessions.log_in=Log in
-sessions.new_account=Not a member? <a href="{0}" tabindex="-1">Sign up</a> for an account.
-sessions.confirm_password=Confirm password
-sessions.sign_up=Sign up
-sessions.old_account=<a href="{0}" tabindex="-1">Log in</a> if you already have an account.
-session.flash_notice.authentication_failed=Authentication failed.
-session.flash_notice.logged_out=You have been logged out.
#------------------------------------------------------------------------------
@@ -662,16 +524,11 @@ issue.add_tags=Add Tags
issue.remove_tags=Remove Tags
issue.no_tag=No tags
issue.assign.formlink=Assign
-issue.assign.submit=Assign
-issue.unassign.submit=Unassign
issue.assign.to_me=to me
issue.comment.formlink=Comment
issue.comment.submit=Comment
issue.comment.tell_why=Please tell why?
-issue.comment.delete_confirm_title=Delete Comment
issue.comment.delete_confirm_message=Do you want to delete this comment?
-issue.comment.delete_confirm_button=Delete
-issue.details=Details
issue.rule_details=Rule Details
issue.send_notifications=Send Notifications
issue.transition=Transition
@@ -690,7 +547,6 @@ issue.transition.close.description=
issue.transition.wontfix=Resolve as won't fix
issue.transition.wontfix.description=This issue can be ignored because the rule is irrelevant in this context. Its effort won't be counted.
issue.set_severity=Change Severity
-issue.set_severity.submit=Change Severity
issue.set_type=Change Type
issue.type.CODE_SMELL=Code Smell
@@ -722,31 +578,13 @@ issue.resolution.REMOVED=Removed
issue.resolution.REMOVED.description=Either the rule or the resource was changed (removed, relocated, parameters changed, etc.) so that analysis no longer finds these issues.
issue.unresolved.description=Unresolved issues have not been addressed in any way.
-issue.updated=Updated:
-issue.manual.missing_rule=Missing rule
-issue.reported_by=Reported by
-issue.authorLogin=Author:
-issue.component_deleted=Removed
issue.effort=Effort:
issue.x_effort={0} effort
-issue.creation_date=Created
issue.filter_similar_issues=Filter Similar Issues
issue.this_issue_involves_x_code_locations=This issue involves {0} code location(s)
issues.return_to_list=Return to List
-issues.issues_limit_reached=For usability reasons, only the {0} issues are displayed.
issues.bulk_change=All Issues ({0})
issues.bulk_change_selected=Selected Issues ({0})
-issues.home.recent_issues=Recent Issues
-issues.home.my_recent_issues=My Recent Issues
-issues.home.over_last_week=Over Last Week
-issues.home.my_filters=My Filters
-issues.home.projects=Projects
-issues.home.authors=Authors
-issues.home.tags=Tags
-issues.home.new_search=New Search
-issues.toggle_selection_tooltip=(De-)Select all currently visible issues
-issues.ordered=ordered
-issues.by_creation_date=by creation date
issues.issues=issues
issues.to_select_issues=to select issues
issues.to_navigate=to navigate
@@ -779,63 +617,6 @@ issue.changelog.field.file=File
#------------------------------------------------------------------------------
#
-# ISSUE FILTERS
-#
-#------------------------------------------------------------------------------
-issue_filter.new_search=New Search
-issue_filter.header.assignee=Assignee
-issue_filter.header.creation_date=Created
-issue_filter.header.resolution=Resolution
-issue_filter.header.update_date=Updated
-issue_filter.criteria.assignee=Assignee
-issue_filter.criteria.created=Created
-issue_filter.criteria.created_at=Created at
-issue_filter.criteria.created_after=Created since
-issue_filter.criteria.created_before=Created before
-issue_filter.criteria.date_format=year-month-day (2013-01-31)
-issue_filter.criteria.project=Project
-issue_filter.criteria.resolution=Resolution
-issue_filter.criteria.rule=Rule
-issue_filter.criteria.severity=Severity
-issue_filter.criteria.status=Status
-issue_filter.filter_list=Issues Filters
-issue_filter.max_results_reached=Only the first {0} issues matching the search criteria have been retrieved. Add some additional criteria to get fewer results to be able to sort this list.
-issue_filter.no_result=No matching issues found.
-issue_filter.no_result.help=Status of the related issues may have changed since the last analysis.
-issue_filter.save_filter=Save Filter
-issue_filter.edit_filter=Edit Filter
-issue_filter.copy_filter=Copy Filter
-issue_filter.form.name=Name
-issue_filter.form.description=Description
-issue_filter.form.share=Shared with all users
-issue_filter.form.owner=Owner
-issue_filter.more_criteria=+ More Criteria
-issue_filter.favourite_filters=Favourite Filters
-issue_filter.manage.my_filters=My Issues Filters
-issue_filter.private=Private
-issue_filter.shared=Shared
-issue_filter.shared_with_all_users=Shared with all users
-issue_filter.sharing=Sharing
-issue_filter.no_issues=No Issues
-
-
-#------------------------------------------------------------------------------
-#
-# ISSUE FILTERS
-#
-#------------------------------------------------------------------------------
-issues.sort.creation_date=Creation Date
-issues.sort.update_date=Update Date
-issues.sort.close_date=Close Date
-issues.sort.assignee=Assignee
-issues.sort.severity=Severity
-issues.sort.status=Status
-issues.ordered_by=Ordered by
-issues.found=Found
-
-
-#------------------------------------------------------------------------------
-#
# ISSUES FACETS
#
#------------------------------------------------------------------------------
@@ -873,8 +654,6 @@ issue_bulk_change.form.title=Change {0} issues
issue_bulk_change.comment.help=This comment will be applied only to issues that will effectively be modified
issue_bulk_change.max_issues_reached=As too many issues have been selected, only the first {0} issues will be updated.
issue_bulk_change.x_issues={0} issues
-issue_bulk_change.error.empty_issues=Issues must not be empty
-issue_bulk_change.error.need_one_action=At least one action must be provided
@@ -884,11 +663,7 @@ issue_bulk_change.error.need_one_action=At least one action must be provided
#
#------------------------------------------------------------------------------
-all-projects.cols.name=Name
-all-projects.results_not_display_due_to_security=Due to security settings, some results are not being displayed.
-
projects.page=Projects
-projects.page.description=Explore projects by coverage, duplications or size.
projects._projects=projects
projects.no_projects.empty_instance=Once you analyze some projects, they will show up here.
projects.no_favorite_projects=You don't have any favorite projects yet.
@@ -899,7 +674,6 @@ projects.no_leak_period=Project has no leak data yet.
projects.leak_period_x=Leak Period started: {0}
projects.last_analysis_on_x=Last analysis: {0}
projects.search=Search by project name or key
-projects.sort_list=Sort list by
projects.perspective=Perspective
projects.sort_by=Sort by
projects.sort_ascending=Result sorted in ascending order
@@ -919,9 +693,6 @@ projects.sorting.new_maintainability=Maintainability
projects.sorting.new_coverage=Coverage
projects.sorting.new_duplications=Duplications
projects.sorting.new_lines=New Lines
-projects.sorting.on_new_code=on New Code
-projects.sorting.on_new_lines=on New Lines
-projects.view_settings=Settings
projects.view.overall=Overall Status
projects.view.leak=Leak
projects.worse_of_reliablity_and_security=Worse of Reliability and Security
@@ -960,44 +731,10 @@ projects.sort.-size=by size (biggest first)
#------------------------------------------------------------------------------
#
-# COMPARISON
-#
-#------------------------------------------------------------------------------
-
-comparison.compare=Compare
-comparison.add_metric=Add metric
-comparison.add_project=Add project
-comparison.select_version=Select a version
-comparison.suppress_column=Suppress column
-comparison.suppress_line=Suppress line
-comparison.move_left=Move left
-comparison.move_right=Move right
-comparison.move_down=Move down
-comparison.move_up=Move up
-comparison.version.latest=LATEST
-
-
-#------------------------------------------------------------------------------
-#
-# DEPENDENCIES
-#
-#------------------------------------------------------------------------------
-
-dependencies.search_library=Search library
-dependencies.search_help=Find out which projects depend on a given library.<br/>Search by group, artifact or name. E.g.: org.apache.struts, struts-core or Struts
-dependencies.select_library=Select library
-dependencies.select_version=Select version
-dependencies.used_by=Used by
-dependencies.not_used=Not used
-
-
-#------------------------------------------------------------------------------
-#
# DASHBOARD
#
#------------------------------------------------------------------------------
-dashboard.no_dashboard=No dashboard
dashboard.project_not_found=The requested project does not exist.
dashboard.project_not_found.2=Either it has never been analyzed successfully or it has been deleted.
@@ -1007,8 +744,6 @@ dashboard.project_not_found.2=Either it has never been analyzed successfully or
# SETTINGS
#
#------------------------------------------------------------------------------
-settings.add=Add value
-settings.save_category=Save {0} Settings
settings.key_x=Key: {0}
settings.default_x=Default: {0}
settings.not_set=(not set)
@@ -1080,13 +815,12 @@ property.category.scm=SCM
property.sonar.leak.period.description=Period used to compare measures and track new issues. Values are:<ul class='bullet'><li>Number of days before analysis, for example 5.</li><li>A custom date. Format is yyyy-MM-dd, for example 2010-12-25</li><li>'previous_version' to compare to the previous version in the project history</li><li>A version, for example '1.2' or 'BASELINE'</li></ul><p>When specifying a number of days or a date, the snapshot selected for comparison is the first one available inside the corresponding time range. </p><p>Changing this property only takes effect after subsequent project inspections.<p/>
property.sonar.branch.longLivedBranches.regex.description=Regular expression used to detect whether a branch is a long living branch (as opposed to short living branch), based on its name. This applies only during first analysis, the type of a branch cannot be changed later.
+
#------------------------------------------------------------------------------
#
# SEARCH ENGINE FOR RESOURCES
#
#------------------------------------------------------------------------------
-search.results=results
-search.duration=({0} seconds)
search.shortcut_hint=Hint: Press {0} from anywhere to open this search bar.
search.show_more.hint=Press {0} to display
search.placeholder=Search for projects, sub-projects and files...
@@ -1110,7 +844,6 @@ shortcuts.section.issues.navigate_between_issues=navigate between issues
shortcuts.section.issues.open_details=go from the list of issues to the source code
shortcuts.section.issues.return_to_list=return back to the list
-shortcuts.section.issue.select=select an issue
shortcuts.section.issue.do_transition=do an issue transition
shortcuts.section.issue.assign=assign issue
shortcuts.section.issue.assign_to_me=assign issue to the current user
@@ -1126,9 +859,6 @@ shortcuts.section.rules.return_to_list=return back to the list
shortcuts.section.rules.activate=activate selected rule
shortcuts.section.rules.deactivate=deactivate selected rule
-shortcuts.section.code=Code Page
-shortcuts.section.code.search=search components in the project scope
-
tutorials.onboarding=Analyze a new project
tutorials.skip=Skip this tutorial
tutorials.finish=Finish this tutorial
@@ -1147,160 +877,36 @@ select2.tooShort=Please enter at least {0} characters
#------------------------------------------------------------------------------
#
-# COMPONENTS
-#
-#------------------------------------------------------------------------------
-
-components.no_projects_have_been_analysed=No projects have been analysed.
-components.explanation_launch_sonar_to_have_results=If Maven and SonarQube are installed with default parameters on the same box, just launch the command <code>mvn sonar:sonar</code> to analyse your first project. In any other case, please refer to the <a href="http://www.sonarsource.org/documentation">documentation</a>.
-components.note_changes_impact_all_users=Note that these changes will impact all users and all projects.
-
-
-#------------------------------------------------------------------------------
-#
-# DRILLDOWN
-#
-#------------------------------------------------------------------------------
-
-drilldown.drilldown_on=Drilldown on
-issues_drilldown.col.severity=Severity
-issues_drilldown.col.rule=Rule
-issues_drilldown.no_issue=No issue
-drilldown.no_items_found=No items found
-
-
-#------------------------------------------------------------------------------
-#
-# RESOURCE VIEWER
-#
-#------------------------------------------------------------------------------
-
-resource_viewer.resource_deleted=This resource has been deleted.
-
-
-#------------------------------------------------------------------------------
-#
-# ISSUES VIEWER
-#
-#------------------------------------------------------------------------------
-
-issues_viewer.issue_filter.false_positives=False positives
-issues_viewer.issue_filter.unassigned=Not assigned
-
-
-#------------------------------------------------------------------------------
-#
# DUPLICATION VIEWER
#
#------------------------------------------------------------------------------
-
-duplications.no_duplicated_block=No duplicated blocks.
duplications.dups_found_on_deleted_resource=This file contains duplicated blocks with some deleted resources. This project should be reanalyzed to remove these obsolete duplicated blocks.
-duplications.block_was_duplicated_by_a_deleted_resource=This block was duplicated by a resource that has been deleted.
-duplications.old_format_should_reanalyze=This file contains duplications but a new analysis must be done in order to be able to display them.
-duplications.blocks=Blocks
-duplications.number_of_lines=Nb Lines
-duplications.from_line=From line
-duplications.file=File
-duplications.details=Details
-duplications.expand=Expand
-duplications.collapse=Collapse
-
-#------------------------------------------------------------------------------
-#
-# COVERAGE VIEWER
-#
-#------------------------------------------------------------------------------
-coverage_viewer.on_new_code=On new code
-coverage_viewer.by=by tests
-it_coverage_viewer.by=by integration tests
-overall_coverage_viewer.by=by all tests
-coverage_viewer.unit_tests=Tests
-coverage_viewer.integration_tests=Integration Tests
-coverage_viewer.overall_tests=All Tests
-coverage_viewer.per_test=Per test
-coverage_viewer.lines_covered_per_test=Covered lines
-coverage_viewer.select_test=Select a test
-coverage_viewer.line_covered_by_x_tests=Line is covered by {0} tests
-coverage_viewer.x_covered_conditions={0} conditions are covered by tests
#------------------------------------------------------------------------------
#
# GENERIC CODE VIEWER
#
#------------------------------------------------------------------------------
-code_viewer.no_info_displayed_due_to_security=Due to security settings, no information can be displayed.
code_viewer.no_source_code_displayed_due_to_security=Due to security settings, no source code can be displayed.
code_viewer.no_source_code_displayed_due_to_source_removed=The file was removed, no source code can be displayed.
#------------------------------------------------------------------------------
#
-# TESTS VIEWER
-#
-#------------------------------------------------------------------------------
-test_viewer.tests=Tests
-test_viewer.failures=Failures
-test_viewer.errors=Errors
-test_viewer.duration=Duration
-test_viewer.unit_test_name=Unit test name
-test_viewer.skipped=skipped
-test_viewer.expand=expand
-test_viewer.collapse=collapse
-test_viewer.covered_lines=Covered Lines
-test_viewer.tests_covering=Tests covering <b>{0}</b> on line <b>{1}</b>
-test_viewer.files_covered_by=Files covered by <b>{0}</b> ({1})
-
-
-#------------------------------------------------------------------------------
-#
-# MANUAL MEASURES
-#
-#------------------------------------------------------------------------------
-
-manual_measures.add_measure=Add Manual Measure
-manual_measures.manage_metrics=Manage Metrics
-manual_measures.col.domain=Domain
-manual_measures.col.metric=Metric
-manual_measures.col.value=Value
-manual_measures.col.description=Description
-manual_measures.col.author=Author
-manual_measures.col.date=Date
-manual_measures.col.operations=Operations
-manual_measures.col.last_change=Last change
-manual_measures.col.last_change_label=By {0} at {1}
-manual_measures.create_measure=Create Manual Measure
-manual_measures.delete_measure=Delete Manual Measure
-manual_measures.delete_measure.desc=Are you sure that you want to delete manual measure "{0}"?
-manual_measures.edit_measure=Edit Manual Measure: {0}
-manual_measures.save_button=Save
-manual_measures.save_and_add_button=Save & Add new
-manual_measures.pending_message=Pending measures are marked with orange box. Their values will be integrated to project during next analysis.
-manual_measures.no_more_available_metric=All available manual metrics have a measure.
-manual_measures.to_define_new_manual_metric_il_require=You can define new manual metrics if required.
-
-
-#------------------------------------------------------------------------------
-#
# CUSTOM MEASURES
#
#------------------------------------------------------------------------------
-
+custom_measures.page=Custom Measures
+custom_measures.page.description=Update the values of custom metrics for this project. Changes will take effect at the project's next analysis. Custom metrics must be created at the global level.
custom_measures.pending=Pending
custom_measures.pending_tooltip=The value will be integrated to project during next analysis.
custom_measures.all_metrics_taken=There are already measures on all available custom metrics.
-
-
-
-#------------------------------------------------------------------------------
-#
-# MANUAL MEASURES
-#
-#------------------------------------------------------------------------------
-
-manual_rules.should_provide_real_description=Rule created on the fly. A description should be provided.
-manual_rules.add_manual_rule=Add Manual Rule
+custom_measures.delete_custom_measure=Delete Custom Measure
+custom_measures.delete_custom_measure.confirmation=Are you sure you want to delete custom measure "{0}"?
+custom_measures.create_custom_measure=Create Custom Measure
+custom_measures.update_custom_measure=Update Custom Measure
+custom_measures.metric=Metric
#------------------------------------------------------------------------------
@@ -1339,36 +945,6 @@ project_activity.graphs.custom.type_x_message=Only "{0}" metrics are available w
project_activity.custom_metric.covered_lines=Covered Lines
-project_history.col.year=Year
-project_history.col.month=Month
-project_history.col.day=Day
-project_history.col.time=Time
-project_history.col.events=Events
-project_history.col.action=Action
-project_history.col.version=Version
-project_history.col.alert=Quality Gate Status
-project_history.col.profile=Profile
-project_history.delete=Delete
-project_history.last_snapshot=Last Analysis
-project_history.delete_snapshot=Delete
-project_history.snapshot_deleted=The snapshot is deleted.
-project_history.are_you_sure_delete_snapshot_x=Are you sure you want to delete the snapshot created on '{0}'?
-project_history.rename_version=Rename
-project_history.create_version=Create
-project_history.remove_version=Remove
-project_history.do_you_want_to_remove_version=Are you sure you want to remove '{0}' from this snapshot?
-project_history.version_updated=Version was updated to '{0}' for current project.
-project_history.version_created=Version '{0}' was created for current project.
-project_history.version_removed=Version '{0}' was removed from current project.
-project_history.version_already_exists=Version '{0}' already exists.
-project_history.rename_event=Rename
-project_history.create_event=Create
-project_history.remove_event=Remove
-project_history.event_updated=Event was successfully updated.
-project_history.event_deleted=Event '{0}' was deleted.
-project_history.event_created=Event '{0}' was created.
-project_history.event_already_exists=Event '{0}' already exists.
-
#------------------------------------------------------------------------------
#
@@ -1425,116 +1001,38 @@ projects_management.delete_all_warning=You're about to delete all {0} items.
#------------------------------------------------------------------------------
#
-# TIME MACHINE
-#
-#------------------------------------------------------------------------------
-
-time_machine.show_date=Show date
-time_machine.show_event=Show event
-time_machine.distributions=Distributions
-time_machine.distribution_chart=Distribution chart
-time_machine.compare_on_chart=Compare on chart
-time_machine.set_as_default_for_all_users=Set as default (for all users)
-
-
-#------------------------------------------------------------------------------
-#
-# CLOUDS
-#
-#------------------------------------------------------------------------------
-
-cloud.quick_wins=Quick wins
-cloud.top_risk=Top risk
-
-
-#------------------------------------------------------------------------------
-#
# QUALITY PROFILES
#
#------------------------------------------------------------------------------
-quality_profiles.quality_profiles=Quality Profiles
quality_profiles.new_profile=New Profile
-quality_profiles.compare_profiles=Compare Profiles
quality_profiles.compare_with=Compare with
quality_profiles.restore_profile=Restore Profile
-quality_profiles.restore_submit=Restore
quality_profiles.restore_profile.success={1} rule(s) restored in profile "{0}"
quality_profiles.restore_profile.warning={1} rule(s) restored, {2} rule(s) ignored in profile "{0}"
-quality_profiles.x_language_profiles={0} Profiles
quality_profiles.optional_configuration_file=Optional configuration file
-quality_profiles.create_x_language_profile=Create {0} Profile
-quality_profiles.are_you_sure_want_x_profile_as_default=Are you sure that you want to set the profile "{0}" as default?
-quality_profiles.profile_x_created=Profile "{0}" created. Set it as default or link it to a project to use it for next measures.
-quality_profiles.already_exists=This profile already exists.
-quality_profiles.profile_x_already_exists=Profile "{0}" already exists.
-quality_profiles.please_type_profile_name=Please type a profile name.
-quality_profiles.profile_x_deleted=Profile "{0}" is deleted.
-quality_profiles.default_profile_is_x=Default profile is "{0}".
-quality_profiles.profile_x_not_activated=Profile "{0}" is created but not activated.
-quality_profiles.please_upload_backup_file=Please upload a backup file.
-quality_profiles.profile_x_associated_to_x_projects=Profile "{0}" associated to {1} projects.
-quality_profiles.profile_name_cant_be_blank=Profile name can not be blank.
quality_profiles.new_name=New name
-quality_profiles.name_for_new_profile=Name for the new profile
quality_profiles.delete_confirm_title=Delete Profile
quality_profiles.are_you_sure_want_delete_profile_x=Are you sure that you want to delete the profile "{0}"?
quality_profiles.are_you_sure_want_delete_profile_x_and_descendants=Are you sure that you want to delete the profile "{0}" and all its descendants?
quality_profiles.this_profile_has_descendants=This profile has descendants.
-quality_profiles.editing_profile=Editing profile
quality_profiles.profile_inheritance=Inheritance
-quality_profiles.available_projects=Available projects
-quality_profiles.associated_projects=Associated projects
quality_profiles.no_projects_associated_to_profile=No projects are explicitly associated to the profile.
-quality_profiles.projects_warning=List of projects explicitly associated to this Quality profile :
-quality_profiles.including_x_overriding.suffix=, incl. {0} overriding
-quality_profiles.set_parent=Set parent
quality_profiles.parent=Parent:
-quality_profiles.inherit_rules_from_profile=Inherit rules configuration from the profile
-quality_profiles.no_version=no version
-quality_profiles.last_version_x_with_date=last version {0} ({1})
-quality_profiles.version_x_with_date=version {0} ({1})
-quality_profiles.version_x=version {0}
quality_profiles.parameter_set_to=Parameter {0} set to {1}
-quality_profiles.only_in_profile_x=Only in {0}
-quality_profiles.with_different_configuration=With different configuration
-quality_profiles.with_same_configuration=With same configuration
quality_profiles.x_rules_only_in={0} rules only in
quality_profiles.x_rules_have_different_configuration={0} rules have a different configuration
-quality_profiles.remove_project_action=Remove
-quality_profiles.remove_projects_action=Remove All
-quality_profiles.add_project_action=Add Project
-quality_profiles.remove_project_confirm_title=Remove Project from Profile
-quality_profiles.remove_project_confirm_message=Are you sure that you want to dissociate the project "{0}" from this profile? The default profile will be used during next analysis of this project.
-quality_profiles.remove_project_confirm_button=Remove
-quality_profiles.remove_projects_confirm_title=Remove All Projects from Profile
-quality_profiles.remove_projects_confirm_message=Are you sure that you want to dissociate all the projects from this profile? The default profile will be used during next analysis of these projects.
-quality_profiles.remove_projects_confirm_button=Remove All
quality_profiles.copy_x_title=Copy Profile {0} - {1}
quality_profiles.copy_new_name=New name
-quality_profiles.copy_overwrite_x=You are about to copy this quality profile into the existing "{0}" profile, which will fully overwrite it. Please confirm the name if you want to overwrite, or choose another name.
-quality_profiles.copy_x_overwritten=Profile '{0}' has been overwritten.
quality_profiles.rename_x_title=Rename Profile {0} - {1}
-quality_profiles.restore_built_in_profiles=Restore Built-in Profiles
-quality_profiles.restore_built_in_profiles_confirmation=Are you sure you want to restore {0} built-in profiles?
-quality_profiles.restore_built_in_profiles_success_message={0} built-in profiles have been restored.
-quality_profiles.including=including
quality_profiles.deprecated=deprecated
-quality_profiles.manage_rules_tooltip=Manage rules of this profile
-quality_profiles.manage_rules_tooltip_x_profile=Manage rules of profile '{0}'
-quality_profiles.see_rules_tooltip=See rules of this profile
-quality_profiles.see_rules_tooltip_x_profile=See rules of profile '{0}'
quality_profiles.severity_set_to=Severity set to
-quality_profiles.changelog_from=Changelog from
-quality_profiles.changelog.empty=No changes have been done.
quality_profiles.changelog.ACTIVATED=Activated
quality_profiles.changelog.DEACTIVATED=Deactivated
quality_profiles.changelog.UPDATED=Updated
quality_profiles.changelog.parameter_reset_to_default_value=Parameter {0} reset to default value
quality_profiles.deleted_profile=The profile {0} doesn't exist anymore
quality_profiles.projects_for_default=Every project not specifically associated with a quality profile will be associated to this one by default.
-quality_profiles.projects_for_default.edit=You must not select specific projects for the default quality profile.
-quality_profiles.inherits=Inherits "{0}"
quality_profile.x_rules={0} rule(s)
quality_profile.x_active_rules={0} active rules
quality_profiles.x_overridden_rules={0} overridden rules
@@ -1542,23 +1040,17 @@ quality_profiles.change_parent=Change Parent
quality_profiles.all_profiles=All Profiles
quality_profiles.x_profiles={0} profile(s)
quality_profiles.x_Profiles={0} Profiles
-quality_profiles.x_projects={0} projects
-quality_profiles.no_results=No profiles found. Try installing a language plugin.
quality_profiles.projects.select_hint=Click to associate this project with the quality profile
quality_profiles.projects.deselect_hint=Click to remove association between this project and the quality profile
-quality_profiles.no_profiles_for_comparison=There are no profiles for comparison
quality_profile.empty_comparison=The quality profiles are equal.
quality_profiles.activate_more=Activate More
quality_profiles.activate_more_rules=Activate More Rules
quality_profiles.intro1=Quality Profiles are collections of rules to apply during an analysis.
quality_profiles.intro2=For each language there is a default profile. All projects not explicitly assigned to some other profile will be analyzed with the default.
-quality_profiles.list.profile=Profile
-quality_profiles.list.inheritance=Inheritance
quality_profiles.list.projects=Projects
quality_profiles.list.rules=Rules
quality_profiles.list.updated=Updated
quality_profiles.list.used=Used
-quality_profiles.x_activated_out_of_y={0} rules activated out of {1} available
quality_profiles.x_updated_on_y={0}, updated on {1}
quality_profiles.change_projects=Change Projects
quality_profiles.not_found=The requested quality profile was not found.
@@ -1594,7 +1086,6 @@ quality_profiles.search_description=Search users by login or name, and groups by
#
#------------------------------------------------------------------------------
-quality_gates.noQualityGates=No Quality Gates
quality_gates.create=Create Quality Gate
quality_gates.rename=Rename Quality Gate
quality_gates.delete=Delete Quality Gate
@@ -1606,8 +1097,6 @@ quality_gates.condition.leak.never=Never
quality_gates.no_conditions=No Conditions
quality_gates.introduction=Only project measures are checked against thresholds. Sub-projects, directories and files are ignored.
quality_gates.health_icons=Project health icons represent:
-quality_gates.metric=Metric
-quality_gates.threshold=Threshold
quality_gates.projects_for_default=Every project not specifically associated to a quality gate will be associated to this one by default.
quality_gates.projects_for_default.edit=You must not select specific projects for the default quality gate.
quality_gates.projects.with=With
@@ -1632,9 +1121,6 @@ quality_gates.delete.confirm.message=Are you sure you want to delete the "{0}" q
quality_gates.delete.confirm.default=Are you sure you want to delete the "{0}" quality gate, which is the default quality gate?
quality_gates.delete_condition=Delete Condition
quality_gates.delete_condition.confirm.message=Are you sure you want to delete the "{0}" condition?
-quality_gates.project_period=over period {0} - defined at project level
-quality_gates.warning_tooltip=Warning Threshold
-quality_gates.error_tooltip=Error Threshold
quality_gates.condition.leak.yes=Yes
quality_gates.condition.leak.no=No
quality_gates.condition.leak.unconditional=Always
@@ -1652,10 +1138,7 @@ quality_gates.intro.2=It is possible to set a default Quality Gate, which will b
# RULES DOCUMENTATION PAGE
#
#------------------------------------------------------------------------------
-rules.more_about_rule_on_profile_x=More about this rule on profile "{0}"
-rules.identification=Identification
rules.parameters=Parameters
-rules.not_found=The rule "{0}" does not exist
rules.status.beta=Beta
rules.status.BETA=Beta
rules.status.deprecated=Deprecated
@@ -1673,17 +1156,11 @@ coding_rules.active_in_all_profiles=The rule is already activated on all availab
coding_rules.activate=Activate
coding_rules.activate_in=Activate In
coding_rules.activate_in_quality_profile=Activate In Quality Profile
-coding_rules.activate_in_all_quality_profiles=Activate In All {0} Profiles
-coding_rules.add_note=Add Note
-coding_rules.add_tags=Add Tags
coding_rules.available_since=Available Since
coding_rules.bulk_change=Bulk Change
coding_rules.bulk_change.success={2} rule(s) changed in profile {0} - {1}
coding_rules.bulk_change.warning={2} rule(s) changed, {3} rule(s) ignored in profile {0} - {1}
coding_rules.can_not_deactivate=This rule is inherited and can not be deactivated.
-coding_rules.change_severity=Change Severity
-coding_rules.change_severity_in=Change Severity In
-coding_rules.change_details=Change Details of Quality Profile
coding_rules.create=Create
coding_rules.create_custom_rule=Create Custom Rule
coding_rules.custom_rule=Custom Rule
@@ -1696,25 +1173,18 @@ coding_rules.extend_description=Extend Description
coding_rules.deactivate_in=Deactivate In
coding_rules.deactivate=Deactivate
coding_rules.deactivate.confirm=Are you sure you want to deactivate this rule in the profile?
-coding_rules.deactivate_in_quality_profile=Deactivate In Quality Profile
coding_rules.deactivate_in_all_quality_profiles=Deactivate In All {0} Profiles
-coding_rules.found=Found
coding_rules.inherits="{0}" inherits from "{1}"
coding_rules.issues=Issues
-coding_rules.key=Key:
coding_rules.most_violating_projects=Most Violating Projects
coding_rules.new_search=New Search
coding_rules.no_results=No Coding Rules
coding_rules.no_tags=No tags
-coding_rules.order=Order
-coding_rules.ordered_by=Ordered By
coding_rules.original=Original:
coding_rules.overrides="{0}" overrides "{1}"
-coding_rules.overwrite=Overwrite
coding_rules.parameter.empty=(empty)
coding_rules.parameters=Parameters
coding_rules.parameters.default_value=Default Value:
-coding_rules.permalink=Permalink
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_profile=Quality Profile
@@ -1722,18 +1192,15 @@ 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.
coding_rules.return_to_list=Return to List
coding_rules.remove_extended_description.confirm=Are you sure you want to remove the extended description?
-coding_rules.repository=Repository:
coding_rules.revert_to_parent_definition=Revert to Parent Definition
coding_rules.revert_to_parent_definition.confirm=This rule will be reverted to the parameters defined in profile {0}. Are you sure?
coding_rules.rule_template=Rule Template
coding_rules.rule_template.title=This rule can be used as a template to create custom rules,\nit cannot be activated on a profile
coding_rules._rules=rules
-coding_rules.select_tag=Select Tag
coding_rules.show_template=Show Template
coding_rules.type.tooltip.CODE_SMELL=Code Smell Detection Rule
coding_rules.type.tooltip.BUG=Bug Detection Rule
coding_rules.type.tooltip.VULNERABILITY=Vulnerability Detection Rule
-coding_rules.noncharacterized=Uncharacterized
coding_rules.update_custom_rule=Update Custom Rule
coding_rules.filter_similar_rules=Filter Similar Rules
@@ -1782,10 +1249,6 @@ coding_rules.facets.tags=Tags
coding_rules.facets.repositories=Repositories
coding_rules.facets.top=Top {0}
-coding_rules.sort.creation_date=Creation Date
-coding_rules.sort.name=Name
-coding_rules.sort.relevance=Relevance
-
coding_rules.remediation_function=Remediation function
coding_rules.remediation_function.LINEAR=Linear
coding_rules.remediation_function.LINEAR_OFFSET=Linear with offset
@@ -1799,33 +1262,12 @@ coding_rules.remediation_function.constant=Constant
# EMAIL CONFIGURATION
#
#------------------------------------------------------------------------------
-email_configuration.smtp_host=SMTP host
-email_configuration.smtp_host.description=For example "smtp.gmail.com". Leave blank to disable email sending.
-email_configuration.smtp_port=SMTP port
-email_configuration.smtp_port.description=Port number to connect with SMTP server.
-email_configuration.smtp_secure_connection=Use secure connection
-email_configuration.smtp_secure_connection.description=Whether to use secure connection and its type.
-email_configuration.smtp_username=SMTP username
-email_configuration.smtp_username.description=Optional - if you use authenticated SMTP, enter your username.
-email_configuration.smtp_password=SMTP password
-email_configuration.smtp_password.description=Optional - as above, enter your password if you use authenticated SMTP.
-email_configuration.from_address=From address
-email_configuration.from_address.description=Emails will come from this address. For example - "noreply@sonarsource.com". Note that server may ignore this setting (like does GMail).
-email_configuration.email_prefix=Email prefix
-email_configuration.email_prefix.description=This prefix will be prepended to all outgoing email subjects.
-email_configuration.save_settings=Save Email Settings
-email_configuration.saving_settings=Saving
-email_configuration.settings_saved=Settings are saved.
-
email_configuration.test.title=Test Configuration
email_configuration.test.to_address=To
-email_configuration.test.to_address_required=You must provide address where to send test email
email_configuration.test.subject=Subject
-email_configuration.test.subject_text=Test Message from SonarQube
email_configuration.test.message=Message
email_configuration.test.message_text=This is a test message from SonarQube.
email_configuration.test.send=Send Test Email
-email_configuration.test.sending=Sending Test Email
email_configuration.test.email_was_sent_to_x=Email was sent to {0}
@@ -1837,8 +1279,8 @@ email_configuration.test.email_was_sent_to_x=Email was sent to {0}
property.category.licenses=Licenses
property.category.licenses.description=In case of any issue or question about licenses, please send an email to <a href="mailto:contact@sonarsource.com?subject=Question about license">contact@sonarsource.com</a>.
property.category.licenses.server_id=Server ID
+
server_id_configuration.generate_button=Generate ID
-server_id_configuration.generating_button=Generating ID...
server_id_configuration.bad_key=The ID is not valid anymore. Please check the organization and the IP address.
server_id_configuration.information=The Server ID is a unique identifier of this SonarQube instance. It is used for example to obtain a license key for the SonarSource's commercial plugins. Two fields have to be provided to generate the ID : organization name and one of the IP addresses of the machine that hosts this server. There is no need to restart the server after generating a new server ID.
server_id_configuration.organisation.title=Organization
@@ -1846,9 +1288,7 @@ server_id_configuration.organisation.desc=Name of the organization
server_id_configuration.organisation.pattern=Only letters, digits and whitespaces are allowed.
server_id_configuration.ip.title=Fixed IP Address
server_id_configuration.ip.desc=A server ID is linked to the IP address of the hosting machine that runs SonarQube. If the server IP address was to change, the server ID will have to be regenerated. The valid addresses are :
-server_id_configuration.generation_error=Organization and/or IP address are not valid.
-server_id_configuration.fields_cannot_be_blank=Organization and IP address cannot be blank.
-server_id_configuration.does_not_match_organisation_pattern=Organization does not match the required pattern.
+
licenses.list.product=Product
licenses.list.organization=Organization
licenses.list.expiration=Expiration
@@ -1884,38 +1324,22 @@ notification.dispatcher.CeReportTaskFailure.project=Background tasks in failure
#
#------------------------------------------------------------------------------
-alerts.no_alerts=No alerts.
-alerts.notes.description=<p>Only project measures are checked against thresholds. Modules, packages and classes are ignored.</p>Project health icons represent :
alerts.notes.ok=at least one threshold is defined, no threshold is reached.
alerts.notes.warn=at least one warning threshold is reached, no error threshold is reached.
alerts.notes.error=at least one error threshold is reached.
-alerts.select_metric=Select a metric
alerts.operator.<=is less than
alerts.operator.>=is greater than
alerts.operator.\==equals
alerts.operator.!\==is not
-#------------------------------------------------------------------------------
-#
-# EVENTS
-#
-#------------------------------------------------------------------------------
-
-events.add_an_event=Add an event
-events.name_required=Name (required)
#------------------------------------------------------------------------------
#
# USER
#
#------------------------------------------------------------------------------
-user.bad_login=Use only letters, numbers, and .-_@ please.
user.password_doesnt_match_confirmation=Password doesn't match confirmation.
-user.reactivated=The user '{0}' has been reactivated.
-user.add_scm_account=Add SCM account
-user.scm_account_already_used=The scm account '{0}' is already used by user(s) : '{1}'
user.login_or_email_used_as_scm_account=Login and email are automatically considered as SCM accounts
-user.password_cant_be_changed_on_external_auth=Password cannot be changed when external authentication is used
login.login_to_sonarqube=Log In to SonarQube
login.more_options=More options
@@ -1941,8 +1365,6 @@ groups.remove.confirmation=Are you sure you want to remove group "{user}"?
# MY PROFILE & MY ACCOUNT
#
#------------------------------------------------------------------------------
-my_profile.login=Login
-my_profile.name=Name
my_profile.email=Email
my_profile.groups=Groups
my_profile.scm_accounts=SCM Accounts
@@ -1952,66 +1374,27 @@ my_profile.password.new=New Password
my_profile.password.confirm=Confirm Password
my_profile.password.submit=Change password
my_profile.password.changed=The password has been changed!
-my_profile.password.empty=Password can not be empty
-my_profile.password.wrong_old=Wrong old password
my_profile.notifications.submit=Save changes
my_profile.overall_notifications.title=Overall notifications
my_profile.per_project_notifications.title=Notifications per project
-my_profile.add_project=Add project
-my_profile.remove_this_line=Remove this line
-my_profile.favorites.title=Favorites
my_account.page=My Account
-my_account.favorite_components=Favorite Components
-my_account.no_favorite_components=You do not have favorite components yet.
-my_account.no_favorite_issue_filters=You do not have favorite issue filters yet.
my_account.notifications=Notifications
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.my_issues=My Issues
-my_account.issue_widget.leak_last_week=Leak Last Week
-my_account.issue_widget.by_project=My Issues by Project
-my_account.issue_widget.by_severity=My Issues by Severity
-my_account.to_fix=To Fix
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.
my_account.projects.analyzed_x=Analyzed {0}
my_account.projects.never_analyzed=Never analyzed
-my_account.projects.x_characters_min=({0} characters min)
my_account.organizations=Organizations
my_account.organizations.description=Those organizations are the ones you are administering.
my_account.organizations.no_results=You are not administering any organizations yet.
my_account.create_organization=Create Organization
-
-
-
-#------------------------------------------------------------------------------
-#
-# BULK RESOURCE DELETION
-#
-#------------------------------------------------------------------------------
-bulk_deletion.resource.projects=Projects
-bulk_deletion.resource.views=Portfolios
-bulk_deletion.resource.devs=Developers
-bulk_deletion.resource_name_filter_by_name=Filter by name:
-bulk_deletion.filter=Filter
-bulk_deletion.page_size=Page size
-bulk_deletion.select_all=Select all
-bulk_deletion.select_all_x_resources=Select all {0} components
-bulk_deletion.clear_selection=Clear selection of all {0} components
-bulk_deletion.following_deletions_failed=The following components could not be deleted. Please check the logs to know more about it.
-bulk_deletion.hide_message=Hide message
-bulk_deletion.sure_to_delete_the_resources=Are you sure you want to delete the selected components?
-bulk_deletion.please_select_at_least_one_resource=Please select at least one component to delete.
-bulk_deletion.deletion_manager.deleting_resources=Deleting components...
-bulk_deletion.deletion_manager.no_resource_to_delete=No results.
-bulk_deletion.deletion_manager.currently_deleting_x_out_of_x=Currently deleting components... ({0} out of {1})
-bulk_deletion.deletion_manager.deletion_completed=Component deletion completed.
-bulk_deletion.deletion_manager.however_failures_occurred=However, some failures occurred.
-bulk_deletion.started_since_x=Started {0} ago
+my_account.search_project=Search Project
+my_account.set_notifications_for=Set notifications for
#------------------------------------------------------------------------------
@@ -2019,9 +1402,6 @@ bulk_deletion.started_since_x=Started {0} ago
# PROJECT PROVISIONING
#
#------------------------------------------------------------------------------
-provisioning.no_results=There is currently no provisioned project.
-provisioning.missing.key=Key is missing
-provisioning.missing.name=Name is missing
provisioning.no_analysis=No analysis has been performed since creation. The only available section is the configuration.
provisioning.no_analysis.delete=Either you should retry analysis or simply {0}.
provisioning.no_analysis.delete_project=delete the project
@@ -2137,6 +1517,7 @@ metric.comment_lines.description=Number of comment lines
metric.comment_lines.name=Comment Lines
metric.comment_lines_density.description=Comments balanced by ncloc + comment lines
metric.comment_lines_density.name=Comments (%)
+metric.comment_lines_density.short_name=Comments
metric.complexity.abbreviation=Cmpx
metric.complexity.description=Cyclomatic complexity
metric.complexity.name=Complexity
@@ -2547,6 +1928,7 @@ 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.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
@@ -2618,21 +2000,15 @@ permission_templates.page.description=Manage templates of project permission set
permission_templates.set_default=Set Default
permission_templates.set_default_for=Set Default For
permission_template.new_template=Create Permission Template
-permission_template.create_template=Create
permission_template.delete_confirm_title=Delete Permission Template
permission_template.do_you_want_to_delete_template_xxx=Are you sure that you want to delete permission template "{0}"?
-permission_template.delete_template=Delete
permission_template.edit_template=Edit Permission Template
-permission_template.update_template=Update
permission_template.edit_permissions=Edit Permissions: {0}
-permission_template.update_permissions=Save
-permission_template.no_results=No template to display
-permission_template.set_default_templates=Set Default Templates
permission_template.key_pattern=Project key pattern
+permission_template.key_pattern.description=Should be a valid regular expression
permission_template.default_for=Default for {0}
permission_templates.project_creators=Project Creators
permission_templates.project_creators.explanation=When a new project is created, the user who creates the project will receive this permission on the project.
-permission_templates.grant_permission_to_project_creators=Grant the "{0}" permission to project creators
permission_templates.bulk_apply_permission_template=Bulk Apply Permission Template
permission_templates.bulk_apply_permission_template.apply_to_selected=You're about to apply the selected permission template to {0} selected item(s).
permission_templates.bulk_apply_permission_template.apply_to_all=You're about to apply the selected permission template to {0} item(s).
@@ -2668,36 +2044,8 @@ duration.years={0} years
# COMPONENT VIEWER
#
#------------------------------------------------------------------------------
-component_viewer.measure_section.size=Size
-component_viewer.measure_section.complexity=Complexity
-component_viewer.measure_section.structure=Structure
-component_viewer.measure_section.documentation=Documentation
-component_viewer.measure_section.filters=Filters
-component_viewer.measure_section.severities=Severities
-component_viewer.measure_section.rules=Rules
-component_viewer.measure_section.issues=Issues
-component_viewer.measure_section.sqale=SQALE
component_viewer.measure_section.unit_tests=Tests
-component_viewer.measure_section.tests=Tests
-component_viewer.measure_section.test_cases=Test Cases
-component_viewer.measure_section.integration_tests=Integration Tests
-component_viewer.measure_section.overall=Overall
-
-component_viewer.issues.current_issue=Current Issue
-component_viewer.issues.unresolved_issues=Unresolved Issues
-component_viewer.issues.fixed_issues=Fixed Issues
-component_viewer.issues.false_positive_issues=False Positive Issues
-component_viewer.issues.open_issues=Open/Reopened Issues
-
-component_viewer.header.debt=Debt
-component_viewer.header.toggle_issues=Toggle issues
-component_viewer.header.toggle_coverage=Toggle coverage
-component_viewer.header.toggle_duplications=Toggle duplications
-component_viewer.header.toggle_scm=Toggle SCM
-
-component_viewer.scm.modified_lines=Modified Lines
-
-component_viewer.transition.coverage=Covered By
+
component_viewer.transition.covers=Covers
component_viewer.transition.duplication=Duplicated By
@@ -2708,31 +2056,16 @@ component_viewer.tests.status=status
component_viewer.x_lines_are_covered={0} lines are covered
component_viewer.details=Details
-component_viewer.line_actions=Line Actions
-component_viewer.no_issues=No Issues
-component_viewer.no_coverage=No Coverage
-component_viewer.time_changes=Time Changes
-component_viewer.added=Added
-component_viewer.extensions=Extensions
-component_viewer.show_full_source=Show Full Source
component_viewer.show_raw_source=Show Raw Source
component_viewer.more_actions=More Actions
component_viewer.new_window=Open in New Window
component_viewer.open_in_workspace=Pin This File
component_viewer.get_permalink=Get Permalink
component_viewer.covered_lines=Covered Lines
-component_viewer.issues_limit_reached=For usability reasons, only the {0} first issues will be fully displayed. Remaining issues will simply be underlined.
-component_viewer.issues_limit_reached_tooltip={0}\n\nRefine your filter to be able to see the details of this issue.
-component_viewer.cannot_show=We're sorry, but something went wrong. Please try back in a few minutes and contact support if the problem persists.
component_viewer.show_details=Show Measures
component_viewer.show_all_measures=Show all measures
component_viewer.no_component=The component has been removed or never existed.
-component_viewer.workspace=Workspace
-component_viewer.workspace.tooltip=Keeps track of history of navigation
-component_viewer.workspace.show_workspace=Show workspace
-component_viewer.workspace.hide_workspace=Hide workspace
-
source_viewer.covered=Covered by tests
source_viewer.not_covered=Not covered by tests
source_viewer.conditions=conditions
@@ -2742,27 +2075,11 @@ source_viewer.tooltip.duplicated_block=Duplicated block. Click for details.
source_viewer.tooltip.covered=Fully covered by tests. Click for details.
source_viewer.tooltip.partially-covered=Partially covered by tests. Click for details.
source_viewer.tooltip.uncovered=Not covered by tests.
-source_viewer.tooltip.new_code=New {0}.
source_viewer.load_more_code=Load More Code
source_viewer.loading_more_code=Loading More Code...
-
-#------------------------------------------------------------------------------
-#
-# Analysis Reports
-#
-#------------------------------------------------------------------------------
-analysis_reports.past_reports=Past Reports
-analysis_reports.show_past_reports=Show Past Reports
-analysis_reports.current_activity=Current Activity
-analysis_reports.show_current_activity=Show Current Activity
-analysis_reports.x_reports={0} reports
-
-
-
-
#------------------------------------------------------------------------------
#
# WORKSPACE
@@ -2775,17 +2092,53 @@ workspace.close=Remove from the list of pinned files
workspace.no_rule=The rule has been removed or never existed.
-
#------------------------------------------------------------------------------
#
# UPDATE CENTER
#
#------------------------------------------------------------------------------
+update_center.page=Update Center
+update_center.page.description=Install, uninstall and delete plugins. You can also download SonarQube updates from the System Updates tab on this page.
update_center.status.COMPATIBLE=Compatible
update_center.status.INCOMPATIBLE=Incompatible
update_center.status.REQUIRES_SYSTEM_UPGRADE=Requires system update
update_center.status.DEPS_REQUIRE_SYSTEM_UPGRADE=Some of dependencies requires system update
-
+update_center.update_to_x=Update to {0}
+update_center.uninstall=Uninstall
+update_center.i_accept_the=I accept the
+update_center.terms_and_conditions=Terms and Conditions
+update_center.install=Install
+update_center.release_notes=Release Notes
+update_center.sonarqube_needs_to_be_restarted_to=SonarQube needs to be restarted in order to
+update_center._install=install
+update_center._update=update
+update_center._uninstall=uninstall
+update_center.restart=Restart
+update_center.revert=Revert
+update_center.installed=Installed
+update_center._installed=installed
+update_center.updates=Updates
+update_center.installing_this_plugin_will_also_install=Installing this plugin will also install
+update_center.homepage=Homepage
+update_center.issue_tracker=Issue Tracker
+update_center.licensed_under=Licensed under
+update_center.developed_by=Developed by
+update_center.install_pending=Install Pending
+update_center.update_pending=Update Pending
+update_center.uninstall_pending=Uninstall Pending
+update_center.updates_only=Updates Only
+update_center.available=Available
+update_center.not_activated=Update Center is not activated.
+update_center.system_upgrade=System Upgrade
+update_center.system_upgrades=System Upgrades
+update_center.released=Released
+update_center.how_to_upgrade=How to upgrade
+update_center.how_to_upgrade.1=Download the new SonarQube version and start it on an empty DB (the bundled H2 DB for instance).
+update_center.how_to_upgrade.2=Install (from the update center) the plugins you want.
+update_center.how_to_upgrade.3=Install your custom plugins (if any).
+update_center.how_to_upgrade.4=Update the conf/sonar.properties file to use the relevant configurations from your old instance, including the connection information for your production DB.
+update_center.how_to_upgrade.5=Stop your old SonarQube server.
+update_center.how_to_upgrade.6=Restart the new SonarQube instance: you're done!
#------------------------------------------------------------------------------
@@ -2794,11 +2147,8 @@ update_center.status.DEPS_REQUIRE_SYSTEM_UPGRADE=Some of dependencies requires s
#
#------------------------------------------------------------------------------
component_navigation.status.failed=The last analysis has failed.
-component_navigation.status.failed.admin=The last analysis has failed. More details available on the {url} page.
component_navigation.status.pending=There is a pending analysis.
-component_navigation.status.pending.admin=There is a pending analysis. More details available on the {url} page.
component_navigation.status.in_progress=The analysis is in progress.
-component_navigation.status.in_progress.admin=The analysis is in progress. More details available on the {url} page.
background_task.status.ALL=All
background_task.status.PENDING=Pending
@@ -2831,7 +2181,6 @@ background_tasks.table.started=Started
background_tasks.table.finished=Finished
background_tasks.table.duration=Duration
-background_tasks.logs=Logs
background_tasks.filter_by_component_x=Filter by Component "{0}"
background_tasks.cancel_task=Cancel Task
background_tasks.cancel_all_tasks=Cancel All Pending Tasks
@@ -2842,13 +2191,13 @@ background_tasks.error_message=Error Message
background_tasks.error_stacktrace=Error Details
background_tasks.pending=pending
background_tasks.failures=still failing
-background_tasks.in_progress_duration=Duration of the current task in progress.
background_tasks.number_of_workers=Number of Workers:
background_tasks.number_of_workers.warning=Configuring additional workers without first vertically scaling your server could have negative performance impacts.
background_tasks.change_number_of_workers=Edit CE Workers
background_tasks.change_number_of_workers.hint=If your queue backs up behind the analysis reports from large projects, increasing the number of Compute Engine workers will allow you to take full advantage of having configured increased Compute Engine memory on a multi-core server (vertical scaling).
background_tasks.add_more_with_governance=Add more with Governance
+background_tasks.search_by_task_or_component=Search by Task or Component
@@ -2935,8 +2284,6 @@ overview.complexity_tooltip.file={0} files have complexity around {1}
overview.deprecated_profile=This quality profile uses {0} deprecated rules and should be updated.
widget.as_calculated_on_x=As calculated on {0}
-widget.events.name=Events
-widget.events.show_all=Show All
#------------------------------------------------------------------------------
@@ -2974,22 +2321,16 @@ code.open_component_page=Open Component's Page
# COMPONENT MEASURES
#
#------------------------------------------------------------------------------
-component_measures.all_measures=All Measures
-component_measures.domain_measures={0} Measures
component_measures.domain_x_overview={0} Overview
component_measures.domain_overview=Overview
-component_measures.back_to_list=Back to List
component_measures.files=files
component_measures.show_metric_history=Show history of this metric
component_measures.tab.tree=Tree
component_measures.tab.list=List
-component_measures.tab.bubbles=Bubble Chart
component_measures.tab.treemap=Treemap
-component_measures.tab.history=History
component_measures.legend.color_x=Color: {0}
component_measures.legend.size_x=Size: {0}
component_measures.legend.worse_of_x_y=Worse of {0} and {1}
-component_measures.x_of_y={0} of {1}
component_measures.no_history=There is no historical data.
component_measures.not_found=The requested measure was not found.
component_measures.to_select_files=to select files
@@ -3020,7 +2361,6 @@ component_measures.facet_category.tests_category=Tests
#
#------------------------------------------------------------------------------
about_page.projects_analyzed=Projects Analyzed
-about_page.issues_found=Issues Found
about_page.read_more=Read More
about_page.read_documentation=Read documentation
@@ -3202,8 +2542,6 @@ onboarding.project_watcher.failed=Something went wrong, please check the analysi
#------------------------------------------------------------------------------
branches.learn_how_to_analyze=Learn how to analyze branches in SonarQube
branches.learn_how_to_analyze.text=Quickly setup branch analysis and get separate insights for each of your branches and pull requests.
-branches.no_support.header=Get the most out of SonarQube with branches analysis
-branches.no_support.header.text=Analyze each branch of your project separately with our Developer Pack.
branches.delete=Delete Branch
branches.delete.are_you_sure=Are you sure you want to delete branch "{0}"?
branches.rename=Rename Branch
@@ -3229,3 +2567,108 @@ portfolio.x_in_y={projects} in {rating}
portfolio.empty=This portfolio is empty.
portfolio.empty.hint=This portfolio has no projects, or none of associated projects has lines of code.
portfolio.not_computed=This portfolio is not yet computed.
+
+
+#------------------------------------------------------------------------------
+#
+# ENCRYPTION
+#
+#------------------------------------------------------------------------------
+encryption.form_intro=Secret key is registered. You can encrypt any property value with the following form:
+encryption.form_note=Note that the secret key can be changed, but all the encrypted properties will have to be updated. <a href="https://redirect.sonarsource.com/doc/settings-encryption.html">More information</a>
+encryption.encrypted_value=Encrypted Value
+encryption.generate_secret_key=Generate Secret Key
+encryption.generate_new_secret_key=Generate New Secret Key
+encryption.encrypt=Encrypt
+ecryption.secret_key_description=Secret key is required to be able to encrypt properties. <a href="https://redirect.sonarsource.com/doc/settings-encryption.html">More information</a>
+encryption.secret_key=Secret Key
+encryption.how_to_use=How To Use
+encryption.how_to_use.content=<ul><li>Store the secret key in the file <code>~/.sonar/sonar-secret.txt</code> of the server. This file can be relocated by defining the property <code>sonar.secretKeyPath</code> in <code>conf/sonar.properties</code></li><li>Restrict access to this file by making it readable and by owner only</li><li>Restart the server if the property <code>sonar.secretKeyPath</code> has been set or changed.</li><li>Copy this file on all the machines that execute code inspection. Define the property <code>sonar.secretKeyPath</code> on those machines if the path is not <code>~/.sonar/sonar-secret.txt</code>.</li><li>For each property that you want to encrypt, generate the encrypted value and replace the original value wherever it is stored (configuration files, command lines).</li></ul>
+
+
+#------------------------------------------------------------------------------
+#
+# CUSTOM METRICS
+#
+#------------------------------------------------------------------------------
+custom_metrics.page=Custom Metrics
+custom_metrics.page.description=These metrics are available for all projects. Manual measures can be set at project level via the configuration interface.
+custom_metrics.delete_metric=Delete Metric
+custom_metrics.delete_metric.confirmation=Are you sure you want to delete metric "{0}"?
+custom_metrics.update_metric=Update Metric
+custom_metrics.create_metric=Create Metric
+custom_metrics.domain=Domain
+
+
+#------------------------------------------------------------------------------
+#
+# USERS
+#
+#------------------------------------------------------------------------------
+users.page=Users
+users.page.description=Create and administer individual users.
+users.deactivate=Deactivate
+users.deactivate_user=Deactivate User
+users.deactivate_user.confirmation=Are you sure you want to deactivate "{0} ({1})"?
+users.create_user=Create User
+users.update_user=Update User
+users.minimum_x_characters=Minimum {0} characters
+users.email=Email
+users.update_groups=Update Groups
+users.update_tokens=Update Tokens
+users.add=Add user
+users.remove=Remove user
+users.search_description=Search users by login or name
+users.update=Update users
+users.tokens=Tokens
+users.tokens.sure=Sure?
+users.tokens.revoke=Revoke
+users.no_tokens=No tokens
+users.generate=Generate
+users.generate_tokens=Generate Tokens
+users.enter_token_name=Enter Token Name
+users.tokens.new_token_created=New token "{0}" has been created. Make sure you copy it now, you won’t be able to see it again!
+users.tokens.copied=Copied!
+users.generate_new_token=Generate New Token
+
+
+#------------------------------------------------------------------------------
+#
+# GROUPS
+#
+#------------------------------------------------------------------------------
+user_groups.page=Groups
+user_groups.page.description=Create and administer groups of users.
+user_groups.anyone.description=Anybody (authenticated or not) who browses the application belongs to this group
+groups.delete_group=Delete Group
+groups.delete_group.confirmation=Are you sure you want to delete "{0}"?
+groups.create_group=Create Group
+groups.update_group=Update Group
+groups.anyone=Anyone
+
+
+#------------------------------------------------------------------------------
+#
+# MAINTENANCE
+#
+#------------------------------------------------------------------------------
+maintenance.upgrade_failed=Upgrade Failed
+maintenance.upgrade_failed.text=Database connection cannot be established. Please check database status and JDBC settings.
+maintenance.migration_not_supported=Migration not supported
+maintenance.migration_not_supported.text=Migration is not supported on embedded databases.
+maintenance.upgrade_database=Upgrade Database
+maintenance.upgrade_database.1=The database upgrade can take several minutes.
+maintenance.upgrade_database.2=It is mandatory to back up database before upgrading.
+maintenance.upgrade_database.3=Make sure you have followed the steps from the SonarQube Upgrade guide.
+maintenance.upgrade=Upgrade
+maintenance.database_migration=Database Migration
+maintenance.database_is_up_to_date=Database is up-to-date
+maintenance.sonarqube_is_down=SonarQube is down
+maintenance.sonarqube_is_down.text=Something went wrong. Please contact your system administrator.
+maintenance.try_again=Try Again
+maintenance.sonarqube_is_under_maintenance=SonarQube is under maintenance
+maintenance.sonarqube_is_under_maintenance.1=While waiting, you might want to investigate <a href="https://redirect.sonarsource.com/doc/plugin-library.html">new plugins</a> to extend the current functionality.
+maintenance.sonarqube_is_under_maintenance.2=If you are an administrator and have no idea why this message is being shown, you should read the <a href="https://redirect.sonarsource.com/doc/upgrading.html">upgrade guide</a>.
+maintenance.sonarqube_is_starting=SonarQube is starting
+maintenance.sonarqube_is_up=SonarQube is up
+maintenance.all_systems_opetational=All systems operational.
diff --git a/sonar-core/src/test/java/org/sonar/core/i18n/DefaultI18nTest.java b/sonar-core/src/test/java/org/sonar/core/i18n/DefaultI18nTest.java
index 985810e8cb6..e310d4c97ff 100644
--- a/sonar-core/src/test/java/org/sonar/core/i18n/DefaultI18nTest.java
+++ b/sonar-core/src/test/java/org/sonar/core/i18n/DefaultI18nTest.java
@@ -156,7 +156,7 @@ public class DefaultI18nTest {
@Test
public void format_message_with_parameters() {
- assertThat(underTest.message(Locale.ENGLISH, "name_too_long_x", null, "10")).isEqualTo("Name is too long (maximum is 10 characters)");
+ assertThat(underTest.message(Locale.ENGLISH, "x_results", null, "10")).isEqualTo("10 results");
}
@Test