1.35.0 1.36.0
\ No newline at end of file
...@@ -285,7 +285,7 @@ gem 'gettext_i18n_rails', '~> 1.8.0' ...@@ -285,7 +285,7 @@ gem 'gettext_i18n_rails', '~> 1.8.0'
gem 'gettext_i18n_rails_js', '~> 1.3' gem 'gettext_i18n_rails_js', '~> 1.3'
gem 'gettext', '~> 3.2.2', require: false, group: :development gem 'gettext', '~> 3.2.2', require: false, group: :development
gem 'batch-loader', '~> 1.2.2' gem 'batch-loader', '~> 1.4.0'
# Perf bar # Perf bar
gem 'peek', '~> 1.0.1' gem 'peek', '~> 1.0.1'
...@@ -309,7 +309,7 @@ group :development do ...@@ -309,7 +309,7 @@ group :development do
gem 'foreman', '~> 0.84.0' gem 'foreman', '~> 0.84.0'
gem 'brakeman', '~> 4.2', require: false gem 'brakeman', '~> 4.2', require: false
gem 'letter_opener_web', '~> 1.3.0' gem 'letter_opener_web', '~> 1.3.4'
gem 'rblineprof', '~> 0.3.6', platform: :mri, require: false gem 'rblineprof', '~> 0.3.6', platform: :mri, require: false
# Better errors handler # Better errors handler
...@@ -417,7 +417,7 @@ group :ed25519 do ...@@ -417,7 +417,7 @@ group :ed25519 do
end end
# Gitaly GRPC client # Gitaly GRPC client
gem 'gitaly-proto', '~> 1.22.0', require: 'gitaly' gem 'gitaly-proto', '~> 1.26.0', require: 'gitaly'
gem 'grpc', '~> 1.19.0' gem 'grpc', '~> 1.19.0'
... ...
......
...@@ -76,7 +76,7 @@ GEM ...@@ -76,7 +76,7 @@ GEM
thread_safe (~> 0.3, >= 0.3.1) thread_safe (~> 0.3, >= 0.3.1)
babosa (1.0.2) babosa (1.0.2)
base32 (0.3.2) base32 (0.3.2)
batch-loader (1.2.2) batch-loader (1.4.0)
bcrypt (3.1.12) bcrypt (3.1.12)
bcrypt_pbkdf (1.0.0) bcrypt_pbkdf (1.0.0)
benchmark-ips (2.3.0) benchmark-ips (2.3.0)
...@@ -283,7 +283,7 @@ GEM ...@@ -283,7 +283,7 @@ GEM
gettext_i18n_rails (>= 0.7.1) gettext_i18n_rails (>= 0.7.1)
po_to_json (>= 1.0.0) po_to_json (>= 1.0.0)
rails (>= 3.2.0) rails (>= 3.2.0)
gitaly-proto (1.22.0) gitaly-proto (1.26.0)
grpc (~> 1.0) grpc (~> 1.0)
github-markup (1.7.0) github-markup (1.7.0)
gitlab-default_value_for (3.1.1) gitlab-default_value_for (3.1.1)
...@@ -444,9 +444,9 @@ GEM ...@@ -444,9 +444,9 @@ GEM
rest-client (~> 2.0) rest-client (~> 2.0)
launchy (2.4.3) launchy (2.4.3)
addressable (~> 2.3) addressable (~> 2.3)
letter_opener (1.4.1) letter_opener (1.7.0)
launchy (~> 2.2) launchy (~> 2.2)
letter_opener_web (1.3.0) letter_opener_web (1.3.4)
actionmailer (>= 3.2) actionmailer (>= 3.2)
letter_opener (~> 1.0) letter_opener (~> 1.0)
railties (>= 3.2) railties (>= 3.2)
...@@ -999,7 +999,7 @@ DEPENDENCIES ...@@ -999,7 +999,7 @@ DEPENDENCIES
awesome_print awesome_print
babosa (~> 1.0.2) babosa (~> 1.0.2)
base32 (~> 0.3.0) base32 (~> 0.3.0)
batch-loader (~> 1.2.2) batch-loader (~> 1.4.0)
bcrypt_pbkdf (~> 1.0) bcrypt_pbkdf (~> 1.0)
benchmark-ips (~> 2.3.0) benchmark-ips (~> 2.3.0)
better_errors (~> 2.5.0) better_errors (~> 2.5.0)
...@@ -1056,7 +1056,7 @@ DEPENDENCIES ...@@ -1056,7 +1056,7 @@ DEPENDENCIES
gettext (~> 3.2.2) gettext (~> 3.2.2)
gettext_i18n_rails (~> 1.8.0) gettext_i18n_rails (~> 1.8.0)
gettext_i18n_rails_js (~> 1.3) gettext_i18n_rails_js (~> 1.3)
gitaly-proto (~> 1.22.0) gitaly-proto (~> 1.26.0)
github-markup (~> 1.7.0) github-markup (~> 1.7.0)
gitlab-default_value_for (~> 3.1.1) gitlab-default_value_for (~> 3.1.1)
gitlab-labkit (~> 0.1.2) gitlab-labkit (~> 0.1.2)
...@@ -1093,7 +1093,7 @@ DEPENDENCIES ...@@ -1093,7 +1093,7 @@ DEPENDENCIES
kaminari (~> 1.0) kaminari (~> 1.0)
knapsack (~> 1.17) knapsack (~> 1.17)
kubeclient (~> 4.2.2) kubeclient (~> 4.2.2)
letter_opener_web (~> 1.3.0) letter_opener_web (~> 1.3.4)
license_finder (~> 5.4) license_finder (~> 5.4)
licensee (~> 8.9) licensee (~> 8.9)
lograge (~> 0.5) lograge (~> 0.5)
... ...
......
import Flash from '../flash'; import Flash from '../flash';
import BalsamiqViewer from './balsamiq/balsamiq_viewer'; import BalsamiqViewer from './balsamiq/balsamiq_viewer';
import { __ } from '~/locale';
function onError() { function onError() {
const flash = new Flash('Balsamiq file could not be loaded.'); const flash = new Flash(__('Balsamiq file could not be loaded.'));
return flash; return flash;
} }
... ...
......
...@@ -5,6 +5,7 @@ import Dropzone from 'dropzone'; ...@@ -5,6 +5,7 @@ import Dropzone from 'dropzone';
import { visitUrl } from '../lib/utils/url_utility'; import { visitUrl } from '../lib/utils/url_utility';
import { HIDDEN_CLASS } from '../lib/utils/constants'; import { HIDDEN_CLASS } from '../lib/utils/constants';
import csrf from '../lib/utils/csrf'; import csrf from '../lib/utils/csrf';
import { sprintf, __ } from '~/locale';
Dropzone.autoDiscover = false; Dropzone.autoDiscover = false;
...@@ -73,7 +74,7 @@ export default class BlobFileDropzone { ...@@ -73,7 +74,7 @@ export default class BlobFileDropzone {
.html(errorMessage) .html(errorMessage)
.text(); .text();
$('.dropzone-alerts') $('.dropzone-alerts')
.html(`Error uploading file: "${stripped}"`) .html(sprintf(__('Error uploading file: %{stripped}'), { stripped }))
.show(); .show();
this.removeFile(file); this.removeFile(file);
}, },
...@@ -84,7 +85,7 @@ export default class BlobFileDropzone { ...@@ -84,7 +85,7 @@ export default class BlobFileDropzone {
e.stopPropagation(); e.stopPropagation();
if (dropzone[0].dropzone.getQueuedFiles().length === 0) { if (dropzone[0].dropzone.getQueuedFiles().length === 0) {
// eslint-disable-next-line no-alert // eslint-disable-next-line no-alert
alert('Please select a file'); alert(__('Please select a file'));
return false; return false;
} }
toggleLoading(submitButton, submitButtonLoadingIcon, true); toggleLoading(submitButton, submitButtonLoadingIcon, true);
... ...
......
import JSZip from 'jszip'; import JSZip from 'jszip';
import JSZipUtils from 'jszip-utils'; import JSZipUtils from 'jszip-utils';
import { __ } from '~/locale';
export default class SketchLoader { export default class SketchLoader {
constructor(container) { constructor(container) {
...@@ -56,10 +57,10 @@ export default class SketchLoader { ...@@ -56,10 +57,10 @@ export default class SketchLoader {
const errorMsg = document.createElement('p'); const errorMsg = document.createElement('p');
errorMsg.className = 'prepend-top-default append-bottom-default text-center'; errorMsg.className = 'prepend-top-default append-bottom-default text-center';
errorMsg.textContent = ` errorMsg.textContent = __(`
Cannot show preview. For previews on sketch files, they must have the file format Cannot show preview. For previews on sketch files, they must have the file format
introduced by Sketch version 43 and above. introduced by Sketch version 43 and above.
`; `);
this.container.appendChild(errorMsg); this.container.appendChild(errorMsg);
this.removeLoadingIcon(); this.removeLoadingIcon();
... ...
......
import FileTemplateSelector from '../file_template_selector'; import FileTemplateSelector from '../file_template_selector';
import { __ } from '~/locale';
export default class DockerfileSelector extends FileTemplateSelector { export default class DockerfileSelector extends FileTemplateSelector {
constructor({ mediator }) { constructor({ mediator }) {
super(mediator); super(mediator);
this.config = { this.config = {
key: 'dockerfile', key: 'dockerfile',
name: 'Dockerfile', name: __('Dockerfile'),
pattern: /(Dockerfile)/, pattern: /(Dockerfile)/,
type: 'dockerfiles', type: 'dockerfiles',
dropdown: '.js-dockerfile-selector', dropdown: '.js-dockerfile-selector',
... ...
......
...@@ -2,6 +2,7 @@ import $ from 'jquery'; ...@@ -2,6 +2,7 @@ import $ from 'jquery';
import Flash from '../../flash'; import Flash from '../../flash';
import { handleLocationHash } from '../../lib/utils/common_utils'; import { handleLocationHash } from '../../lib/utils/common_utils';
import axios from '../../lib/utils/axios_utils'; import axios from '../../lib/utils/axios_utils';
import { __ } from '~/locale';
export default class BlobViewer { export default class BlobViewer {
constructor() { constructor() {
...@@ -26,7 +27,7 @@ export default class BlobViewer { ...@@ -26,7 +27,7 @@ export default class BlobViewer {
promise promise
.then(module => module.default(viewer)) .then(module => module.default(viewer))
.catch(error => { .catch(error => {
Flash('Error loading file viewer.'); Flash(__('Error loading file viewer.'));
throw error; throw error;
}); });
...@@ -106,16 +107,19 @@ export default class BlobViewer { ...@@ -106,16 +107,19 @@ export default class BlobViewer {
if (!this.copySourceBtn) return; if (!this.copySourceBtn) return;
if (this.simpleViewer.getAttribute('data-loaded')) { if (this.simpleViewer.getAttribute('data-loaded')) {
this.copySourceBtn.setAttribute('title', 'Copy source to clipboard'); this.copySourceBtn.setAttribute('title', __('Copy source to clipboard'));
this.copySourceBtn.classList.remove('disabled'); this.copySourceBtn.classList.remove('disabled');
} else if (this.activeViewer === this.simpleViewer) { } else if (this.activeViewer === this.simpleViewer) {
this.copySourceBtn.setAttribute( this.copySourceBtn.setAttribute(
'title', 'title',
'Wait for the source to load to copy it to the clipboard', __('Wait for the source to load to copy it to the clipboard'),
); );
this.copySourceBtn.classList.add('disabled'); this.copySourceBtn.classList.add('disabled');
} else { } else {
this.copySourceBtn.setAttribute('title', 'Switch to the source to copy it to the clipboard'); this.copySourceBtn.setAttribute(
'title',
__('Switch to the source to copy it to the clipboard'),
);
this.copySourceBtn.classList.add('disabled'); this.copySourceBtn.classList.add('disabled');
} }
...@@ -158,7 +162,7 @@ export default class BlobViewer { ...@@ -158,7 +162,7 @@ export default class BlobViewer {
this.toggleCopyButtonState(); this.toggleCopyButtonState();
}) })
.catch(() => new Flash('Error loading viewer')); .catch(() => new Flash(__('Error loading viewer')));
} }
static loadViewer(viewerParam) { static loadViewer(viewerParam) {
... ...
......
...@@ -83,7 +83,7 @@ export default { ...@@ -83,7 +83,7 @@ export default {
}" }"
:index="index" :index="index"
:data-issue-id="issue.id" :data-issue-id="issue.id"
class="board-card position-relative p-3 rounded" class="board-card p-3 rounded"
@mousedown="mouseDown" @mousedown="mouseDown"
@mousemove="mouseMove" @mousemove="mouseMove"
@mouseup="showIssue($event)" @mouseup="showIssue($event)"
... ...
......
...@@ -279,14 +279,10 @@ export default class Clusters { ...@@ -279,14 +279,10 @@ export default class Clusters {
this.store.acknowledgeSuccessfulUpdate(appId); this.store.acknowledgeSuccessfulUpdate(appId);
} }
toggleIngressDomainHelpText(ingressPreviousState, ingressNewState) { toggleIngressDomainHelpText({ externalIp }, { externalIp: newExternalIp }) {
const { externalIp, status } = ingressNewState; if (externalIp !== newExternalIp) {
const helpTextHidden = status !== APPLICATION_STATUS.INSTALLED || !externalIp; this.ingressDomainHelpText.classList.toggle('hide', !newExternalIp);
const domainSnippetText = `${externalIp}${INGRESS_DOMAIN_SUFFIX}`; this.ingressDomainSnippet.textContent = `${newExternalIp}${INGRESS_DOMAIN_SUFFIX}`;
if (ingressPreviousState.status !== status) {
this.ingressDomainHelpText.classList.toggle('hide', helpTextHidden);
this.ingressDomainSnippet.textContent = domainSnippetText;
} }
} }
... ...
......
...@@ -12,6 +12,7 @@ import stageStagingComponent from './components/stage_staging_component.vue'; ...@@ -12,6 +12,7 @@ import stageStagingComponent from './components/stage_staging_component.vue';
import stageTestComponent from './components/stage_test_component.vue'; import stageTestComponent from './components/stage_test_component.vue';
import CycleAnalyticsService from './cycle_analytics_service'; import CycleAnalyticsService from './cycle_analytics_service';
import CycleAnalyticsStore from './cycle_analytics_store'; import CycleAnalyticsStore from './cycle_analytics_store';
import { __ } from '~/locale';
Vue.use(Translate); Vue.use(Translate);
...@@ -61,7 +62,7 @@ export default () => { ...@@ -61,7 +62,7 @@ export default () => {
methods: { methods: {
handleError() { handleError() {
this.store.setErrorState(true); this.store.setErrorState(true);
return new Flash('There was an error while fetching cycle analytics data.'); return new Flash(__('There was an error while fetching cycle analytics data.'));
}, },
initDropdown() { initDropdown() {
const $dropdown = $('.js-ca-dropdown'); const $dropdown = $('.js-ca-dropdown');
... ...
......
...@@ -3,6 +3,7 @@ import VueRouter from 'vue-router'; ...@@ -3,6 +3,7 @@ import VueRouter from 'vue-router';
import { joinPaths } from '~/lib/utils/url_utility'; import { joinPaths } from '~/lib/utils/url_utility';
import flash from '~/flash'; import flash from '~/flash';
import store from './stores'; import store from './stores';
import { __ } from '~/locale';
Vue.use(VueRouter); Vue.use(VueRouter);
...@@ -94,7 +95,7 @@ router.beforeEach((to, from, next) => { ...@@ -94,7 +95,7 @@ router.beforeEach((to, from, next) => {
}) })
.catch(e => { .catch(e => {
flash( flash(
'Error while loading the project data. Please try again.', __('Error while loading the project data. Please try again.'),
'alert', 'alert',
document, document,
null, null,
... ...
......
import { activityBarViews } from '../../../constants'; import { activityBarViews } from '../../../constants';
import { __ } from '~/locale';
export const templateTypes = () => [ export const templateTypes = () => [
{ {
...@@ -10,11 +11,11 @@ export const templateTypes = () => [ ...@@ -10,11 +11,11 @@ export const templateTypes = () => [
key: 'gitignores', key: 'gitignores',
}, },
{ {
name: 'LICENSE', name: __('LICENSE'),
key: 'licenses', key: 'licenses',
}, },
{ {
name: 'Dockerfile', name: __('Dockerfile'),
key: 'dockerfiles', key: 'dockerfiles',
}, },
]; ];
... ...
......
...@@ -290,7 +290,7 @@ export default class SSHMirror { ...@@ -290,7 +290,7 @@ export default class SSHMirror {
this.setSSHPublicKey(data.import_data_attributes.ssh_public_key); this.setSSHPublicKey(data.import_data_attributes.ssh_public_key);
}) })
.catch(() => { .catch(() => {
Flash(_('Unable to regenerate public ssh key.')); Flash(__('Unable to regenerate public ssh key.'));
}); });
} }
... ...
......
import axios from '../../lib/utils/axios_utils'; import axios from '../../lib/utils/axios_utils';
import statusCodes from '../../lib/utils/http_status'; import statusCodes from '../../lib/utils/http_status';
import { backOff } from '../../lib/utils/common_utils'; import { backOff } from '../../lib/utils/common_utils';
import { s__ } from '../../locale'; import { s__, __ } from '../../locale';
const MAX_REQUESTS = 3; const MAX_REQUESTS = 3;
...@@ -15,7 +15,7 @@ function backOffRequest(makeRequestCallback) { ...@@ -15,7 +15,7 @@ function backOffRequest(makeRequestCallback) {
if (requestCounter < MAX_REQUESTS) { if (requestCounter < MAX_REQUESTS) {
next(); next();
} else { } else {
stop(new Error('Failed to connect to the prometheus server')); stop(new Error(__('Failed to connect to the prometheus server')));
} }
} else { } else {
stop(resp); stop(resp);
... ...
......
import { __ } from '~/locale';
export const mrStates = { export const mrStates = {
merged: 'merged', merged: 'merged',
closed: 'closed', closed: 'closed',
}; };
export const humanMRStates = { export const humanMRStates = {
merged: 'Merged', merged: __('Merged'),
closed: 'Closed', closed: __('Closed'),
open: 'Open', open: __('Open'),
}; };
import $ from 'jquery'; import $ from 'jquery';
import { addSelectOnFocusBehaviour } from '../lib/utils/common_utils'; import { addSelectOnFocusBehaviour } from '../lib/utils/common_utils';
import { slugifyWithHyphens } from '../lib/utils/text_utility'; import { slugifyWithHyphens } from '../lib/utils/text_utility';
import { s__ } from '~/locale';
let hasUserDefinedProjectPath = false; let hasUserDefinedProjectPath = false;
...@@ -114,71 +115,71 @@ const bindEvents = () => { ...@@ -114,71 +115,71 @@ const bindEvents = () => {
const value = $(this).val(); const value = $(this).val();
const templates = { const templates = {
rails: { rails: {
text: 'Ruby on Rails', text: s__('ProjectTemplates|Ruby on Rails'),
icon: '.template-option .icon-rails', icon: '.template-option .icon-rails',
}, },
express: { express: {
text: 'NodeJS Express', text: s__('ProjectTemplates|NodeJS Express'),
icon: '.template-option .icon-express', icon: '.template-option .icon-express',
}, },
spring: { spring: {
text: 'Spring', text: s__('ProjectTemplates|Spring'),
icon: '.template-option .icon-spring', icon: '.template-option .icon-spring',
}, },
iosswift: { iosswift: {
text: 'iOS (Swift)', text: s__('ProjectTemplates|iOS (Swift)'),
icon: '.template-option svg.icon-gitlab', icon: '.template-option svg.icon-gitlab',
}, },
dotnetcore: { dotnetcore: {
text: '.NET Core', text: s__('ProjectTemplates|.NET Core'),
icon: '.template-option .icon-dotnet', icon: '.template-option .icon-dotnet',
}, },
android: { android: {
text: 'Android', text: s__('ProjectTemplates|Android'),
icon: '.template-option svg.icon-android', icon: '.template-option svg.icon-android',
}, },
gomicro: { gomicro: {
text: 'Go Micro', text: s__('ProjectTemplates|Go Micro'),
icon: '.template-option .icon-gomicro', icon: '.template-option .icon-gomicro',
}, },
hugo: { hugo: {
text: 'Pages/Hugo', text: s__('ProjectTemplates|Pages/Hugo'),
icon: '.template-option .icon-hugo', icon: '.template-option .icon-hugo',
}, },
jekyll: { jekyll: {
text: 'Pages/Jekyll', text: s__('ProjectTemplates|Pages/Jekyll'),
icon: '.template-option .icon-jekyll', icon: '.template-option .icon-jekyll',
}, },
plainhtml: { plainhtml: {
text: 'Pages/Plain HTML', text: s__('ProjectTemplates|Pages/Plain HTML'),
icon: '.template-option .icon-plainhtml', icon: '.template-option .icon-plainhtml',
}, },
gitbook: { gitbook: {
text: 'Pages/GitBook', text: s__('ProjectTemplates|Pages/GitBook'),
icon: '.template-option .icon-gitbook', icon: '.template-option .icon-gitbook',
}, },
hexo: { hexo: {
text: 'Pages/Hexo', text: s__('ProjectTemplates|Pages/Hexo'),
icon: '.template-option .icon-hexo', icon: '.template-option .icon-hexo',
}, },
nfhugo: { nfhugo: {
text: 'Netlify/Hugo', text: s__('ProjectTemplates|Netlify/Hugo'),
icon: '.template-option .icon-netlify', icon: '.template-option .icon-netlify',
}, },
nfjekyll: { nfjekyll: {
text: 'Netlify/Jekyll', text: s__('ProjectTemplates|Netlify/Jekyll'),
icon: '.template-option .icon-netlify', icon: '.template-option .icon-netlify',
}, },
nfplainhtml: { nfplainhtml: {
text: 'Netlify/Plain HTML', text: s__('ProjectTemplates|Netlify/Plain HTML'),
icon: '.template-option .icon-netlify', icon: '.template-option .icon-netlify',
}, },
nfgitbook: { nfgitbook: {
text: 'Netlify/GitBook', text: s__('ProjectTemplates|Netlify/GitBook'),
icon: '.template-option .icon-netlify', icon: '.template-option .icon-netlify',
}, },
nfhexo: { nfhexo: {
text: 'Netlify/Hexo', text: s__('ProjectTemplates|Netlify/Hexo'),
icon: '.template-option .icon-netlify', icon: '.template-option .icon-netlify',
}, },
}; };
... ...
......
...@@ -4,8 +4,11 @@ const index = function index() { ...@@ -4,8 +4,11 @@ const index = function index() {
RavenConfig.init({ RavenConfig.init({
sentryDsn: gon.sentry_dsn, sentryDsn: gon.sentry_dsn,
currentUserId: gon.current_user_id, currentUserId: gon.current_user_id,
whitelistUrls: [gon.gitlab_url], whitelistUrls:
isProduction: process.env.NODE_ENV, process.env.NODE_ENV === 'production'
? [gon.gitlab_url]
: [gon.gitlab_url, 'webpack-internal://'],
environment: gon.sentry_environment,
release: gon.revision, release: gon.revision,
tags: { tags: {
revision: gon.revision, revision: gon.revision,
... ...
......
...@@ -61,7 +61,7 @@ const RavenConfig = { ...@@ -61,7 +61,7 @@ const RavenConfig = {
release: this.options.release, release: this.options.release,
tags: this.options.tags, tags: this.options.tags,
whitelistUrls: this.options.whitelistUrls, whitelistUrls: this.options.whitelistUrls,
environment: this.options.isProduction ? 'production' : 'development', environment: this.options.environment,
ignoreErrors: this.IGNORE_ERRORS, ignoreErrors: this.IGNORE_ERRORS,
ignoreUrls: this.IGNORE_URLS, ignoreUrls: this.IGNORE_URLS,
shouldSendCallback: this.shouldSendSample.bind(this), shouldSendCallback: this.shouldSendSample.bind(this),
... ...
......
import { __ } from '~/locale';
export default class U2FError { export default class U2FError {
constructor(errorCode, u2fFlowType) { constructor(errorCode, u2fFlowType) {
this.errorCode = errorCode; this.errorCode = errorCode;
...@@ -8,15 +10,17 @@ export default class U2FError { ...@@ -8,15 +10,17 @@ export default class U2FError {
message() { message() {
if (this.errorCode === window.u2f.ErrorCodes.BAD_REQUEST && this.httpsDisabled) { if (this.errorCode === window.u2f.ErrorCodes.BAD_REQUEST && this.httpsDisabled) {
return 'U2F only works with HTTPS-enabled websites. Contact your administrator for more details.'; return __(
'U2F only works with HTTPS-enabled websites. Contact your administrator for more details.',
);
} else if (this.errorCode === window.u2f.ErrorCodes.DEVICE_INELIGIBLE) { } else if (this.errorCode === window.u2f.ErrorCodes.DEVICE_INELIGIBLE) {
if (this.u2fFlowType === 'authenticate') { if (this.u2fFlowType === 'authenticate') {
return 'This device has not been registered with us.'; return __('This device has not been registered with us.');
} }
if (this.u2fFlowType === 'register') { if (this.u2fFlowType === 'register') {
return 'This device has already been registered with us.'; return __('This device has already been registered with us.');
} }
} }
return 'There was a problem communicating with your device.'; return __('There was a problem communicating with your device.');
} }
} }