Commit 31e0e2ac authored by Ezekiel Kigbo's avatar Ezekiel Kigbo Committed by Fatih Acet

Vue-i18n: Autofix `ee` directory

Autofixes i18n lints in the ee directory
that were missed in earlier autofixes.
parent c90f4513
<script>
import { __ } from '~/locale';
import Flash from '~/flash';
import { redirectTo } from '~/lib/utils/url_utility';
......@@ -77,7 +78,7 @@ export default {
addToSlack() {
GitlabSlackService.addToSlack(this.slackLinkPath, this.selectedProjectId)
.then(response => redirectTo(response.data.add_to_slack_link))
.catch(() => Flash('Unable to build Slack link.'));
.catch(() => Flash(__('Unable to build Slack link.')));
},
},
};
......@@ -85,8 +86,8 @@ export default {
<template>
<div class="text-center">
<h1>GitLab for Slack</h1>
<p>Track your GitLab projects with GitLab for Slack.</p>
<h1>{{ __('GitLab for Slack') }}</h1>
<p>{{ __('Track your GitLab projects with GitLab for Slack.') }}</p>
<div v-once class="prepend-top-20 append-bottom-20">
<img :src="gitlabLogoPath" class="gitlab-slack-logo" />
......@@ -102,7 +103,7 @@ export default {
class="btn btn-red mx-auto js-popup-button prepend-top-default"
@click="togglePopup"
>
Add GitLab to Slack
{{ __('Add GitLab to Slack') }}
</button>
<div
......@@ -110,7 +111,7 @@ export default {
class="popup gitlab-slack-popup mx-auto prepend-top-20 text-center js-popup"
>
<div v-if="isSignedIn && hasProjects" class="inline">
<strong>Select GitLab project to link with your Slack team</strong>
<strong>{{ __('Select GitLab project to link with your Slack team') }}</strong>
<select
v-model="selectedProjectId"
......@@ -122,16 +123,17 @@ export default {
</select>
<button type="button" class="btn btn-red float-right js-add-button" @click="addToSlack">
Add to Slack
{{ __('Add to Slack') }}
</button>
</div>
<span v-else-if="isSignedIn && !hasProjects" class="js-no-projects">
You don't have any projects available.
</span>
<span v-else-if="isSignedIn && !hasProjects" class="js-no-projects">{{
__("You don't have any projects available.")
}}</span>
<span v-else>
You have to <a v-once :href="signInPath" class="js-gitlab-slack-sign-in-link"> log in </a>
You have to
<a v-once :href="signInPath" class="js-gitlab-slack-sign-in-link">{{ __('log in') }}</a>
</span>
</div>
......@@ -140,7 +142,7 @@ export default {
</div>
<div v-once class="text-center">
<h3>How it works</h3>
<h3>{{ __('How it works') }}</h3>
<div class="well gitlab-slack-well mx-auto">
<code class="code mx-auto append-bottom-10"
......@@ -151,7 +153,9 @@ export default {
Shows the issue with id <strong>&lt;id&gt;</strong>
</span>
<div class="prepend-top-default"><a :href="docsPath"> More Slack commands </a></div>
<div class="prepend-top-default">
<a v-once :href="docsPath">{{ __('More Slack commands') }}</a>
</div>
</div>
</div>
</div>
......
......@@ -3,5 +3,5 @@ export default {};
</script>
<template>
<div>Productivity Analytics app goes here</div>
<div>{{ __('Productivity Analytics app goes here') }}</div>
</template>
<script>
import { __ } from '~/locale';
import UsersSelect from '~/users_select';
import UserAvatarImage from '~/vue_shared/components/user_avatar/user_avatar_image.vue';
import { GlLoadingIcon } from '@gitlab/ui';
......@@ -12,7 +13,7 @@ export default {
anyUserText: {
type: String,
required: false,
default: 'Any user',
default: __('Any user'),
},
board: {
type: Object,
......@@ -39,7 +40,7 @@ export default {
placeholderText: {
type: String,
required: false,
default: 'Select user',
default: __('Select user'),
},
projectId: {
type: Number,
......@@ -98,7 +99,9 @@ export default {
<div :class="wrapperClass" class="block">
<div class="title append-bottom-10">
{{ label }}
<button v-if="canEdit" type="button" class="edit-link btn btn-blank float-right">Edit</button>
<button v-if="canEdit" type="button" class="edit-link btn btn-blank float-right">
{{ __('Edit') }}
</button>
</div>
<div class="value">
<div v-if="hasValue" class="media">
......@@ -139,7 +142,7 @@ dropdown-menu-user dropdown-menu-selectable dropdown-menu-author"
<input
autocomplete="off"
class="dropdown-input-field"
placeholder="Search"
:placeholder="__('Search')"
type="search"
/>
<i aria-hidden="true" class="fa fa-search dropdown-input-search" data-hidden="true">
......
<script>
import { __ } from '~/locale';
import ListLabel from '~/boards/models/label';
import BoardLabelsSelect from '~/vue_shared/components/sidebar/labels_select/base.vue';
import BoardMilestoneSelect from './milestone_select.vue';
......@@ -69,7 +70,7 @@ export default {
computed: {
expandButtonText() {
return this.expanded ? 'Collapse' : 'Expand';
return this.expanded ? __('Collapse') : __('Expand');
},
},
......@@ -99,13 +100,13 @@ export default {
<template>
<div>
<div v-if="canAdminBoard" class="media append-bottom-10">
<label class="form-section-title label-bold media-body"> Board scope </label>
<label class="form-section-title label-bold media-body">{{ __('Board scope') }}</label>
<button v-if="collapseScope" type="button" class="btn" @click="expanded = !expanded">
{{ expandButtonText }}
</button>
</div>
<p class="text-secondary append-bottom-10">
Board scope affects which issues are displayed for anyone who visits this board
{{ __('Board scope affects which issues are displayed for anyone who visits this board') }}
</p>
<div v-if="!collapseScope || expanded">
<board-milestone-select
......
......@@ -99,7 +99,9 @@ export default {
<div class="block milestone">
<div class="title append-bottom-10">
Milestone
<button v-if="canEdit" type="button" class="edit-link btn btn-blank float-right">Edit</button>
<button v-if="canEdit" type="button" class="edit-link btn btn-blank float-right">
{{ __('Edit') }}
</button>
</div>
<div :class="milestoneTitleClass" class="value">{{ milestoneTitle }}</div>
<div class="selectbox" style="display: none;">
......@@ -125,7 +127,7 @@ export default {
<input
type="search"
class="dropdown-input-field"
placeholder="Search milestones"
:placeholder="__('Search milestones')"
autocomplete="off"
/>
<i aria-hidden="true" data-hidden="true" class="fa fa-search dropdown-input-search">
......
......@@ -118,7 +118,9 @@ export default {
<div class="block weight">
<div class="title append-bottom-10">
Weight
<button v-if="canEdit" type="button" class="edit-link btn btn-blank float-right">Edit</button>
<button v-if="canEdit" type="button" class="edit-link btn btn-blank float-right">
{{ __('Edit') }}
</button>
</div>
<div :class="valueClass" class="value">{{ valueText }}</div>
<div class="selectbox" style="display: none;">
......@@ -131,7 +133,7 @@ export default {
data-default-label="Weight"
data-toggle="dropdown"
>
<span class="dropdown-toggle-text is-default"> Weight </span>
<span class="dropdown-toggle-text is-default">{{ __('Weight') }}</span>
<i aria-hidden="true" data-hidden="true" class="fa fa-chevron-down"> </i>
</button>
<div class="dropdown-menu dropdown-select dropdown-menu-selectable dropdown-menu-weight">
......
......@@ -96,7 +96,7 @@ export default {
this.errorMessage = valid ? '' : error;
this.queryIsValid = valid;
} else {
throw new Error('There was an error trying to validate your query');
throw new Error(__('There was an error trying to validate your query'));
}
})
.catch(() => {
......
......@@ -111,7 +111,7 @@ export default {
<section class="deploy-board-status">
<span v-tooltip :title="instanceIsCompletedText">
<span class="percentage text-center text-plain">{{ deployBoardData.completion }}%</span>
<span class="text text-center text-secondary">Complete</span>
<span class="text text-center text-secondary">{{ __('Complete') }}</span>
</span>
</section>
......@@ -145,18 +145,16 @@ export default {
class="btn"
data-method="post"
rel="nofollow"
>{{ __('Rollback') }}</a
>
Rollback
</a>
<a
v-if="deployBoardData.abort_url"
:href="deployBoardData.abort_url"
class="btn btn-red btn-inverted"
data-method="post"
rel="nofollow"
>{{ __('Abort') }}</a
>
Abort
</a>
</section>
</div>
......@@ -164,7 +162,9 @@ export default {
<section class="deploy-board-empty-state-svg" v-html="deployBoardSvg"></section>
<section class="deploy-board-empty-state-text">
<span class="deploy-board-empty-state-title d-flex">Kubernetes deployment not found</span>
<span class="deploy-board-empty-state-title d-flex">{{
__('Kubernetes deployment not found')
}}</span>
<span>
To see deployment progress for your environments, make sure you are deploying to
<code>$KUBE_NAMESPACE</code> and annotating with
......
......@@ -41,6 +41,8 @@ export default {
return this.isEpicOpen ? __('Open') : __('Closed');
},
actionButtonClass() {
// False positive css classes
// https://gitlab.com/gitlab-org/frontend/eslint-plugin-i18n/issues/24
return `btn btn-grouped js-btn-epic-action qa-close-reopen-epic-button ${
this.isEpicOpen ? 'btn-close' : 'btn-open'
}`;
......
<script>
import { s__ } from '~/locale';
import { __, s__ } from '~/locale';
import Flash from '~/flash';
import DeprecatedModal from '~/vue_shared/components/deprecated_modal.vue';
import SmartInterval from '~/smart_interval';
......@@ -117,7 +117,7 @@ export default {
this.store.setNodeDetails(nodeId, {
geo_node_id: nodeId,
health: err.message,
health_status: 'Unknown',
health_status: __('Unknown'),
missing_oauth_application: null,
sync_status_unavailable: true,
storage_shards_match: null,
......
<script>
import { s__ } from '~/locale';
import { sprintf, s__ } from '~/locale';
import { timeIntervalInWords } from '~/lib/utils/datetime_utility';
import tooltip from '~/vue_shared/directives/tooltip';
import icon from '~/vue_shared/components/icon.vue';
......@@ -88,7 +88,10 @@ export default {
statusEventInfo(lastEventId, cursorLastEventId, lagInSeconds) {
const timeAgoStr = timeIntervalInWords(lagInSeconds);
const pendingEvents = lastEventId - cursorLastEventId;
return `${timeAgoStr} (${pendingEvents} events)`;
return sprintf(s__('GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)'), {
timeAgoStr,
pendingEvents,
});
},
statusTooltip(lagInSeconds) {
if (this.eventTimestampEmpty || lagInSeconds <= TIME_DIFF.FIVE_MINS) {
......
......@@ -57,8 +57,8 @@ export default {
ref="service-desk-incoming-email"
type="text"
class="form-control incoming-email h-auto"
placeholder="__('Incoming email')"
aria-label="__('Incoming email')"
:placeholder="__('Incoming email')"
:aria-label="__('Incoming email')"
aria-describedby="incoming-email-describer"
:value="incomingEmail"
disabled="true"
......
......@@ -93,7 +93,7 @@ export default {
<gl-loading-icon v-if="isSubmitting" ref="loadingIcon" :inline="true" />
</button>
<button type="button" class="btn btn-default float-right" @click="onFormCancel">
Cancel
{{ __('Cancel') }}
</button>
</div>
</form>
......
<script>
import { __ } from '~/locale';
import { __, sprintf } from '~/locale';
import relatedIssuableMixin from '~/vue_shared/mixins/related_issuable_mixin';
export default {
......@@ -14,7 +14,8 @@ export default {
},
computed: {
removeButtonLabel() {
return `Remove ${this.displayReference}`;
const { displayReference } = this;
return sprintf(__('Remove %{displayReference}'), { displayReference });
},
stateTitle() {
if (this.isCondensed) return '';
......
......@@ -168,7 +168,7 @@ export default {
<a v-if="hasHelpPath" :href="helpPath">
<i
class="related-issues-header-help-icon fa fa-question-circle"
aria-label="Read more about related issues"
:aria-label="__('Read more about related issues')"
></i>
</a>
<div class="d-inline-flex lh-100 align-middle">
......@@ -186,7 +186,7 @@ export default {
type="button"
:class="qaClass"
class="js-issue-count-badge-add-button issue-count-badge-add-button btn btn-sm btn-default"
aria-label="Add an issue"
:aria-label="__('Add an issue')"
data-placement="top"
@click="$emit('toggleAddRelatedIssuesForm', $event)"
>
......
......@@ -25,6 +25,7 @@ Your caret can stop touching a `rawReference` can happen in a variety of ways:
*/
import _ from 'underscore';
import Flash from '~/flash';
import { __ } from '~/locale';
import RelatedIssuesBlock from './related_issues_block.vue';
import RelatedIssuesStore from '../stores/related_issues_store';
import RelatedIssuesService from '../services/related_issues_service';
......@@ -63,7 +64,7 @@ export default {
title: {
type: String,
required: false,
default: 'Related issues',
default: __('Related issues'),
},
issuableType: {
type: String,
......@@ -176,7 +177,7 @@ export default {
.catch(() => {
this.store.setRelatedIssues([]);
this.isFetching = false;
Flash('An error occurred while fetching issues.');
Flash(__('An error occurred while fetching issues.'));
});
},
saveIssueOrder({ issueId, beforeId, afterId, oldIndex, newIndex }) {
......@@ -195,7 +196,7 @@ export default {
}
})
.catch(() => {
Flash('An error occurred while reordering issues.');
Flash(__('An error occurred while reordering issues.'));
});
}
},
......
......@@ -65,7 +65,11 @@ export default {
this.startDate.getFullYear() === this.endDate.getFullYear(),
);
return `${startDateInWords} &ndash; ${dateInWords(this.endDate, true)}`;
const endDateInWords = dateInWords(this.endDate, true);
return sprintf(s__('GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}'), {
startDateInWords,
endDateInWords,
});
},
},
};
......
......@@ -88,7 +88,7 @@ export default {
},
maxInterval: DAY_IN_MS * this.vulnerabilitiesHistoryMaxDayInterval,
min: Date.now() - DAY_IN_MS * this.vulnerabilitiesHistoryDayRange,
name: 'Date',
name: __('Date'),
nameGap: 35,
nameLocation: 'center',
nameTextStyle: {
......@@ -102,7 +102,7 @@ export default {
color: '#707070',
},
boundaryGap: [0, '5%'],
name: 'Vulnerabilities',
name: __('Vulnerabilities'),
nameGap: 42,
nameLocation: 'center',
nameRotation: 90,
......
<script>
import { __ } from '~/locale';
import Flash from '~/flash';
import eventHub from '~/sidebar/event_hub';
import weightComponent from './weight.vue';
......@@ -28,7 +29,7 @@ export default {
methods: {
onUpdateWeight(newWeight) {
this.mediator.updateWeight(newWeight).catch(() => {
Flash('Error occurred while updating the issue weight');
Flash(__('Error occurred while updating the issue weight'));
});
},
},
......
<script>
import $ from 'jquery';
import { s__ } from '~/locale';
import { __, s__ } from '~/locale';
import eventHub from '~/sidebar/event_hub';
import tooltip from '~/vue_shared/directives/tooltip';
import icon from '~/vue_shared/components/icon.vue';
......@@ -33,7 +33,7 @@ export default {
weightNoneValue: {
type: String,
required: true,
default: 'None',
default: __('None'),
},
editable: {
type: Boolean,
......@@ -171,7 +171,7 @@ export default {
:value="weight"
class="form-control"
type="text"
placeholder="Enter a number"
:placeholder="__('Enter a number')"
@blur="onSubmit"
@keydown.enter="onSubmit"
/>
......
......@@ -21,7 +21,7 @@ export default {
<div class="media">
<status-icon status="warning" show-disabled-button />
<div class="media-body">
<span class="bold"> Merge requests are read-only in a secondary Geo node </span>
<span class="bold">{{ __('Merge requests are read-only in a secondary Geo node') }}</span>
<a
v-tooltip
:href="mr.geoSecondaryHelpPath"
......
<script>
import { sprintf, s__ } from '~/locale';
import icon from '~/vue_shared/components/icon.vue';
import ciStatus from '~/vue_shared/components/ci_icon.vue';
import tooltip from '~/vue_shared/directives/tooltip';
......@@ -59,7 +60,9 @@ export default {
return `+${this.linkedPipelines.length - this.maxRenderedPipelines}`;
},
counterTooltipText() {
return `${this.counterLabel} more downstream pipelines`;
return sprintf(s__('LinkedPipelines|%{counterLabel} more downstream pipelines'), {
counterLabel: this.counterLabel,
});
},
},
methods: {
......
......@@ -86,7 +86,7 @@ export default {
extraDownstreamTitle() {
const extra = this.downstreamCount - this.shownDownstreamCount;
return sprintf('%{extra} more downstream pipelines', {
return sprintf(__('%{extra} more downstream pipelines'), {
extra,
});
},
......
......@@ -227,6 +227,9 @@ msgstr ""
msgid "%{edit_in_new_fork_notice} Try to upload a file again."
msgstr ""
msgid "%{extra} more downstream pipelines"
msgstr ""
msgid "%{filePath} deleted"
msgstr ""
......@@ -633,6 +636,9 @@ msgstr ""
msgid "API Token"
msgstr ""
msgid "Abort"
msgstr ""
msgid "About GitLab"
msgstr ""
......@@ -776,6 +782,9 @@ msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
msgid "Add GitLab to Slack"
msgstr ""
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
......@@ -884,6 +893,9 @@ msgstr ""
msgid "Add reaction"
msgstr ""
msgid "Add to Slack"
msgstr ""
msgid "Add to epic"
msgstr ""
......@@ -1300,6 +1312,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
msgid "An error occurred while fetching issues."
msgstr ""
msgid "An error occurred while fetching label colors."
msgstr ""
......@@ -1393,6 +1408,9 @@ msgstr ""
msgid "An error occurred while rendering preview broadcast message"
msgstr ""
msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
msgstr ""
......@@ -1513,6 +1531,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
msgid "Any user"
msgstr ""
msgid "Appearance"
msgstr ""
......@@ -2210,6 +2231,9 @@ msgstr ""
msgid "Board scope"
msgstr ""
msgid "Board scope affects which issues are displayed for anyone who visits this board"
msgstr ""
msgid "BoardBlankState|Add default lists"
msgstr ""
......@@ -3748,6 +3772,9 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
msgid "Complete"
msgstr ""
msgid "Confidential"
msgstr ""
......@@ -4362,6 +4389,9 @@ msgstr ""
msgid "Data is still calculating..."
msgstr ""
msgid "Date"
msgstr ""
msgid "Date picker"
msgstr ""
......@@ -5256,6 +5286,9 @@ msgstr ""
msgid "Enter IP address range"
msgstr ""
msgid "Enter a number"
msgstr ""
msgid "Enter at least three characters to search"
msgstr ""
......@@ -5607,6 +5640,9 @@ msgstr ""
msgid "Error occurred when toggling the notification subscription"
msgstr ""
msgid "Error occurred while updating the issue weight"
msgstr ""
msgid "Error occurred. User was not blocked"
msgstr ""
......@@ -6443,6 +6479,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
msgstr ""
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
......@@ -6884,6 +6923,9 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
msgid "GitLab for Slack"
msgstr ""
msgid "GitLab metadata URL"
msgstr ""
......@@ -7064,6 +7106,9 @@ msgstr ""
msgid "Group: %{name}"
msgstr ""
msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
msgstr ""
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
......@@ -7393,6 +7438,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
msgid "How it works"
msgstr ""
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
......@@ -7684,6 +7732,9 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
msgid "Incoming email"
msgstr ""
msgid "Incompatible Project"
msgstr ""
......@@ -8148,6 +8199,9 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
msgid "Kubernetes deployment not found"
msgstr ""
msgid "Kubernetes error: %{error_code}"
msgstr ""
......@@ -8473,6 +8527,9 @@ msgstr ""
msgid "LinkedIn"
msgstr ""
msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
msgstr ""
msgid "List"
msgstr ""
......@@ -8824,6 +8881,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
msgid "Merge requests are read-only in a secondary Geo node"
msgstr ""
msgid "Merge when pipeline succeeds"
msgstr ""
......@@ -9199,6 +9259,9 @@ msgstr ""
msgid "More Information"
msgstr ""
msgid "More Slack commands"
msgstr ""
msgid "More info"
msgstr ""
......@@ -10643,6 +10706,9 @@ msgstr ""
msgid "Productivity Analytics"
msgstr ""
msgid "Productivity Analytics app goes here"
msgstr ""
msgid "Profile"
msgstr ""
......@@ -11702,6 +11768,9 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
msgid "Read more about related issues"
msgstr ""
msgid "Real-time features"
msgstr ""
......@@ -11824,6 +11893,9 @@ msgstr ""
msgid "Remove"
msgstr ""
msgid "Remove %{displayReference}"
msgstr ""
msgid "Remove Runner"
msgstr ""
......@@ -12301,6 +12373,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
msgid "Rollback"
msgstr ""
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
......@@ -12685,6 +12760,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
msgid "Select GitLab project to link with your Slack team"
msgstr ""
msgid "Select Page"
msgstr ""
......@@ -12769,6 +12847,9 @@ msgstr ""
msgid "Select timeframe"
msgstr ""
msgid "Select user"
msgstr ""
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
......@@ -14531,6 +14612,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
msgid "There was an error trying to validate your query"
msgstr ""
msgid "There was an error when reseting email token."
msgstr ""
......@@ -15252,6 +15336,9 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
msgid "Track your GitLab projects with GitLab for Slack."
msgstr ""
msgid "Transfer project"
msgstr ""
......@@ -15390,6 +15477,9 @@ msgstr ""
msgid "Unable to apply suggestions to a deleted line."
msgstr ""
msgid "Unable to build Slack link."
msgstr ""
msgid "Unable to connect to Prometheus server"
msgstr ""
......@@ -16745,6 +16835,9 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
msgid "You don't have any projects available."
msgstr ""
msgid "You don't have any recent searches"
msgstr ""
......@@ -17585,6 +17678,9 @@ msgstr ""
msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment