diff options
260 files changed, 19820 insertions, 13917 deletions
diff --git a/app/assets/javascripts/boards/components/board_sidebar.js b/app/assets/javascripts/boards/components/board_sidebar.js index 983429550f0..add24303e7b 100644 --- a/app/assets/javascripts/boards/components/board_sidebar.js +++ b/app/assets/javascripts/boards/components/board_sidebar.js @@ -2,6 +2,7 @@ import Vue from 'vue'; import Flash from '../../flash'; +import { __ } from '../../locale'; import Sidebar from '../../right_sidebar'; import eventHub from '../../sidebar/event_hub'; import assigneeTitle from '../../sidebar/components/assignees/assignee_title'; @@ -95,7 +96,7 @@ gl.issueBoards.BoardSidebar = Vue.extend({ }) .catch(() => { this.loadingAssignees = false; - return new Flash('An error occurred while saving assignees'); + Flash(__('An error occurred while saving assignees')); }); }, }, diff --git a/app/assets/javascripts/boards/components/modal/footer.js b/app/assets/javascripts/boards/components/modal/footer.js index 182957113a2..03cd7ef65cb 100644 --- a/app/assets/javascripts/boards/components/modal/footer.js +++ b/app/assets/javascripts/boards/components/modal/footer.js @@ -1,7 +1,6 @@ -/* eslint-disable no-new */ - import Vue from 'vue'; import Flash from '../../../flash'; +import { __ } from '../../../locale'; import './lists_dropdown'; import { pluralize } from '../../../lib/utils/text_utility'; @@ -36,7 +35,7 @@ gl.issueBoards.ModalFooter = Vue.extend({ gl.boardService.bulkUpdate(issueIds, { add_label_ids: [list.label.id], }).catch(() => { - new Flash('Failed to update issues, please try again.', 'alert'); + Flash(__('Failed to update issues, please try again.')); selectedIssues.forEach((issue) => { list.removeIssue(issue); diff --git a/app/assets/javascripts/boards/components/sidebar/remove_issue.js b/app/assets/javascripts/boards/components/sidebar/remove_issue.js index 1ad97211934..0ae32bb4d0a 100644 --- a/app/assets/javascripts/boards/components/sidebar/remove_issue.js +++ b/app/assets/javascripts/boards/components/sidebar/remove_issue.js @@ -1,7 +1,6 @@ -/* eslint-disable no-new */ - import Vue from 'vue'; import Flash from '../../../flash'; +import { __ } from '../../../locale'; const Store = gl.issueBoards.BoardsStore; @@ -45,7 +44,7 @@ gl.issueBoards.RemoveIssueBtn = Vue.extend({ }, }; Vue.http.patch(this.updateUrl, data).catch(() => { - new Flash('Failed to remove issue from board, please try again.', 'alert'); + Flash(__('Failed to remove issue from board, please try again.')); lists.forEach((list) => { list.addIssue(issue); diff --git a/app/assets/javascripts/ci_variable_list/ci_variable_list.js b/app/assets/javascripts/ci_variable_list/ci_variable_list.js index d91789c2192..3467e88119b 100644 --- a/app/assets/javascripts/ci_variable_list/ci_variable_list.js +++ b/app/assets/javascripts/ci_variable_list/ci_variable_list.js @@ -39,7 +39,7 @@ export default class VariableList { }, protected: { selector: '.js-ci-variable-input-protected', - default: 'true', + default: 'false', }, environment_scope: { // We can't use a `.js-` class here because diff --git a/app/assets/javascripts/commit/image_file.js b/app/assets/javascripts/commit/image_file.js index 525fbf9dac9..6504a0bbbfc 100644 --- a/app/assets/javascripts/commit/image_file.js +++ b/app/assets/javascripts/commit/image_file.js @@ -1,5 +1,4 @@ /* eslint-disable func-names, space-before-function-paren, wrap-iife, no-var, no-use-before-define, prefer-arrow-callback, no-else-return, consistent-return, prefer-template, quotes, one-var, one-var-declaration-per-line, no-unused-vars, no-return-assign, comma-dangle, quote-props, no-unused-expressions, no-sequences, object-shorthand, max-len */ -import 'vendor/jquery.waitforimages'; // Width where images must fits in, for 2-up this gets divided by 2 const availWidth = 900; diff --git a/app/assets/javascripts/commons/jquery.js b/app/assets/javascripts/commons/jquery.js index b93e94a3c97..a7ed175f7a4 100644 --- a/app/assets/javascripts/commons/jquery.js +++ b/app/assets/javascripts/commons/jquery.js @@ -6,5 +6,5 @@ import 'vendor/jquery.endless-scroll'; import 'vendor/jquery.caret'; import 'vendor/jquery.atwho'; import 'vendor/jquery.scrollTo'; -import 'vendor/jquery.waitforimages'; +import 'jquery.waitforimages'; import 'select2/select2'; diff --git a/app/assets/javascripts/create_merge_request_dropdown.js b/app/assets/javascripts/create_merge_request_dropdown.js index 482d83621e2..fb1fc9cd32e 100644 --- a/app/assets/javascripts/create_merge_request_dropdown.js +++ b/app/assets/javascripts/create_merge_request_dropdown.js @@ -180,6 +180,7 @@ export default class CreateMergeRequestDropdown { valueAttribute: 'data-text', }, ], + hideOnClick: false, }; } diff --git a/app/assets/javascripts/diff.js b/app/assets/javascripts/diff.js index a162424b3cf..3ab8f3ab7ad 100644 --- a/app/assets/javascripts/diff.js +++ b/app/assets/javascripts/diff.js @@ -1,3 +1,6 @@ +import axios from '~/lib/utils/axios_utils'; +import flash from '~/flash'; +import { __ } from '~/locale'; import { getLocationHash } from './lib/utils/url_utility'; import FilesCommentButton from './files_comment_button'; import SingleFileDiff from './single_file_diff'; @@ -69,7 +72,9 @@ export default class Diff { const view = file.data('view'); const params = { since, to, bottom, offset, unfold, view }; - $.get(link, params, response => $target.parent().replaceWith(response)); + axios.get(link, { params }) + .then(({ data }) => $target.parent().replaceWith(data)) + .catch(() => flash(__('An error occurred while loading diff'))); } openAnchoredDiff(cb) { diff --git a/app/assets/javascripts/droplab/constants.js b/app/assets/javascripts/droplab/constants.js index 673e9bb4c0f..868d47e91b3 100644 --- a/app/assets/javascripts/droplab/constants.js +++ b/app/assets/javascripts/droplab/constants.js @@ -3,7 +3,6 @@ const DATA_DROPDOWN = 'data-dropdown'; const SELECTED_CLASS = 'droplab-item-selected'; const ACTIVE_CLASS = 'droplab-item-active'; const IGNORE_CLASS = 'droplab-item-ignore'; -const IGNORE_HIDING_CLASS = 'droplab-item-ignore-hiding'; // Matches `{{anything}}` and `{{ everything }}`. const TEMPLATE_REGEX = /\{\{(.+?)\}\}/g; @@ -14,5 +13,4 @@ export { ACTIVE_CLASS, TEMPLATE_REGEX, IGNORE_CLASS, - IGNORE_HIDING_CLASS, }; diff --git a/app/assets/javascripts/droplab/drop_down.js b/app/assets/javascripts/droplab/drop_down.js index 5eb0a339a1c..3cc316c3f3e 100644 --- a/app/assets/javascripts/droplab/drop_down.js +++ b/app/assets/javascripts/droplab/drop_down.js @@ -1,13 +1,14 @@ import utils from './utils'; -import { SELECTED_CLASS, IGNORE_CLASS, IGNORE_HIDING_CLASS } from './constants'; +import { SELECTED_CLASS, IGNORE_CLASS } from './constants'; class DropDown { - constructor(list, config = {}) { + constructor(list, config = { }) { this.currentIndex = 0; this.hidden = true; this.list = typeof list === 'string' ? document.querySelector(list) : list; this.items = []; this.eventWrapper = {}; + this.hideOnClick = config.hideOnClick !== false; if (config.addActiveClassToDropdownButton) { this.dropdownToggle = this.list.parentNode.querySelector('.js-dropdown-toggle'); @@ -37,15 +38,17 @@ class DropDown { clickEvent(e) { if (e.target.tagName === 'UL') return; - if (e.target.classList.contains(IGNORE_CLASS)) return; + if (e.target.closest(`.${IGNORE_CLASS}`)) return; - const selected = utils.closest(e.target, 'LI'); + const selected = e.target.closest('li'); if (!selected) return; this.addSelectedClass(selected); e.preventDefault(); - if (!e.target.classList.contains(IGNORE_HIDING_CLASS)) this.hide(); + if (this.hideOnClick) { + this.hide(); + } const listEvent = new CustomEvent('click.dl', { detail: { diff --git a/app/assets/javascripts/environments/components/environment_item.vue b/app/assets/javascripts/environments/components/environment_item.vue index a9d554e549e..79326ca3487 100644 --- a/app/assets/javascripts/environments/components/environment_item.vue +++ b/app/assets/javascripts/environments/components/environment_item.vue @@ -1,8 +1,9 @@ <script> import Timeago from 'timeago.js'; import _ from 'underscore'; - import userAvatarLink from '../../vue_shared/components/user_avatar/user_avatar_link.vue'; - import { humanize } from '../../lib/utils/text_utility'; + import tooltip from '~/vue_shared/directives/tooltip'; + import UserAvatarLink from '~/vue_shared/components/user_avatar/user_avatar_link.vue'; + import { humanize } from '~/lib/utils/text_utility'; import ActionsComponent from './environment_actions.vue'; import ExternalUrlComponent from './environment_external_url.vue'; import StopComponent from './environment_stop.vue'; @@ -21,14 +22,18 @@ export default { components: { - userAvatarLink, - 'commit-component': CommitComponent, - 'actions-component': ActionsComponent, - 'external-url-component': ExternalUrlComponent, - 'stop-component': StopComponent, - 'rollback-component': RollbackComponent, - 'terminal-button-component': TerminalButtonComponent, - 'monitoring-button-component': MonitoringButtonComponent, + UserAvatarLink, + CommitComponent, + ActionsComponent, + ExternalUrlComponent, + StopComponent, + RollbackComponent, + TerminalButtonComponent, + MonitoringButtonComponent, + }, + + directives: { + tooltip, }, props: { @@ -443,7 +448,11 @@ v-if="!model.isFolder" class="environment-name flex-truncate-parent table-mobile-content" :href="environmentPath"> - <span class="flex-truncate-child">{{ model.name }}</span> + <span + class="flex-truncate-child" + v-tooltip + :title="model.name" + >{{ model.name }}</span> </a> <span v-else diff --git a/app/assets/javascripts/gpg_badges.js b/app/assets/javascripts/gpg_badges.js index 7ac9dcd1112..b33165f9402 100644 --- a/app/assets/javascripts/gpg_badges.js +++ b/app/assets/javascripts/gpg_badges.js @@ -1,3 +1,8 @@ +import { parseQueryStringIntoObject } from '~/lib/utils/common_utils'; +import axios from '~/lib/utils/axios_utils'; +import flash from '~/flash'; +import { __ } from '~/locale'; + export default class GpgBadges { static fetch() { const badges = $('.js-loading-gpg-badge'); @@ -5,13 +10,13 @@ export default class GpgBadges { badges.html('<i class="fa fa-spinner fa-spin"></i>'); - $.get({ - url: form.data('signatures-path'), - data: form.serialize(), - }).done((response) => { - response.signatures.forEach((signature) => { + const params = parseQueryStringIntoObject(form.serialize()); + return axios.get(form.data('signatures-path'), { params }) + .then(({ data }) => { + data.signatures.forEach((signature) => { badges.filter(`[data-commit-sha="${signature.commit_sha}"]`).replaceWith(signature.html); }); - }); + }) + .catch(() => flash(__('An error occurred while loading commits'))); } } diff --git a/app/assets/javascripts/groups_select.js b/app/assets/javascripts/groups_select.js index a69a0bde17b..65a2395fe29 100644 --- a/app/assets/javascripts/groups_select.js +++ b/app/assets/javascripts/groups_select.js @@ -1,5 +1,6 @@ +import axios from './lib/utils/axios_utils'; import Api from './api'; -import { normalizeCRLFHeaders } from './lib/utils/common_utils'; +import { normalizeHeaders } from './lib/utils/common_utils'; export default function groupsSelect() { // Needs to be accessible in rspec @@ -17,24 +18,23 @@ export default function groupsSelect() { dataType: 'json', quietMillis: 250, transport(params) { - return $.ajax(params) - .then((data, status, xhr) => { - const results = data || []; - - const headers = normalizeCRLFHeaders(xhr.getAllResponseHeaders()); + axios[params.type.toLowerCase()](params.url, { + params: params.data, + }) + .then((res) => { + const results = res.data || []; + const headers = normalizeHeaders(res.headers); const currentPage = parseInt(headers['X-PAGE'], 10) || 0; const totalPages = parseInt(headers['X-TOTAL-PAGES'], 10) || 0; const more = currentPage < totalPages; - return { + params.success({ results, pagination: { more, }, - }; - }) - .then(params.success) - .fail(params.error); + }); + }).catch(params.error); }, data(search, page) { return { diff --git a/app/assets/javascripts/importer_status.js b/app/assets/javascripts/importer_status.js index 1dc70872d92..134a503864e 100644 --- a/app/assets/javascripts/importer_status.js +++ b/app/assets/javascripts/importer_status.js @@ -1,3 +1,7 @@ +import { __ } from './locale'; +import axios from './lib/utils/axios_utils'; +import flash from './flash'; + class ImporterStatus { constructor(jobsUrl, importUrl) { this.jobsUrl = jobsUrl; @@ -9,29 +13,7 @@ class ImporterStatus { initStatusPage() { $('.js-add-to-import') .off('click') - .on('click', (event) => { - const $btn = $(event.currentTarget); - const $tr = $btn.closest('tr'); - const $targetField = $tr.find('.import-target'); - const $namespaceInput = $targetField.find('.js-select-namespace option:selected'); - const id = $tr.attr('id').replace('repo_', ''); - let targetNamespace; - let newName; - if ($namespaceInput.length > 0) { - targetNamespace = $namespaceInput[0].innerHTML; - newName = $targetField.find('#path').prop('value'); - $targetField.empty().append(`${targetNamespace}/${newName}`); - } - $btn.disable().addClass('is-loading'); - - return $.post(this.importUrl, { - repo_id: id, - target_namespace: targetNamespace, - new_name: newName, - }, { - dataType: 'script', - }); - }); + .on('click', this.addToImport.bind(this)); $('.js-import-all') .off('click') @@ -44,6 +26,39 @@ class ImporterStatus { }); } + addToImport(event) { + const $btn = $(event.currentTarget); + const $tr = $btn.closest('tr'); + const $targetField = $tr.find('.import-target'); + const $namespaceInput = $targetField.find('.js-select-namespace option:selected'); + const id = $tr.attr('id').replace('repo_', ''); + let targetNamespace; + let newName; + if ($namespaceInput.length > 0) { + targetNamespace = $namespaceInput[0].innerHTML; + newName = $targetField.find('#path').prop('value'); + $targetField.empty().append(`${targetNamespace}/${newName}`); + } + $btn.disable().addClass('is-loading'); + + return axios.post(this.importUrl, { + repo_id: id, + target_namespace: targetNamespace, + new_name: newName, + }) + .then(({ data }) => { + const job = $(`tr#repo_${id}`); + job.attr('id', `project_${data.id}`); + + job.find('.import-target').html(`<a href="${data.full_path}">${data.full_path}</a>`); + $('table.import-jobs tbody').prepend(job); + + job.addClass('active'); + job.find('.import-actions').html('<i class="fa fa-spinner fa-spin" aria-label="importing"></i> started'); + }) + .catch(() => flash(__('An error occurred while importing project'))); + } + setAutoUpdate() { return setInterval(() => $.get(this.jobsUrl, data => $.each(data, (i, job) => { const jobItem = $(`#project_${job.id}`); @@ -71,7 +86,7 @@ class ImporterStatus { } // eslint-disable-next-line consistent-return -export default function initImporterStatus() { +function initImporterStatus() { const importerStatus = document.querySelector('.js-importer-status'); if (importerStatus) { @@ -79,3 +94,8 @@ export default function initImporterStatus() { return new ImporterStatus(data.jobsImportPath, data.importPath); } } + +export { + initImporterStatus as default, + ImporterStatus, +}; diff --git a/app/assets/javascripts/issue.js b/app/assets/javascripts/issue.js index ff65ea99e9a..333bbd9e0ba 100644 --- a/app/assets/javascripts/issue.js +++ b/app/assets/javascripts/issue.js @@ -1,5 +1,4 @@ /* eslint-disable func-names, space-before-function-paren, no-var, prefer-rest-params, wrap-iife, one-var, no-underscore-dangle, one-var-declaration-per-line, object-shorthand, no-unused-vars, no-new, comma-dangle, consistent-return, quotes, dot-notation, quote-props, prefer-arrow-callback, max-len */ -import 'vendor/jquery.waitforimages'; import axios from './lib/utils/axios_utils'; import { addDelimiter } from './lib/utils/text_utility'; import flash from './flash'; @@ -25,6 +24,51 @@ export default class Issue { if (Issue.createMrDropdownWrap) { this.createMergeRequestDropdown = new CreateMergeRequestDropdown(Issue.createMrDropdownWrap); } + + // Listen to state changes in the Vue app + document.addEventListener('issuable_vue_app:change', (event) => { + this.updateTopState(event.detail.isClosed, event.detail.data); + }); + } + + /** + * This method updates the top area of the issue. + * + * Once the issue state changes, either through a click on the top area (jquery) + * or a click on the bottom area (Vue) we need to update the top area. + * + * @param {Boolean} isClosed + * @param {Array} data + * @param {String} issueFailMessage + */ + updateTopState(isClosed, data, issueFailMessage = 'Unable to update this issue at this time.') { + if ('id' in data) { + const isClosedBadge = $('div.status-box-issue-closed'); + const isOpenBadge = $('div.status-box-open'); + const projectIssuesCounter = $('.issue_counter'); + + isClosedBadge.toggleClass('hidden', !isClosed); + isOpenBadge.toggleClass('hidden', isClosed); + + $(document).trigger('issuable:change', isClosed); + this.toggleCloseReopenButton(isClosed); + + let numProjectIssues = Number(projectIssuesCounter.first().text().trim().replace(/[^\d]/, '')); + numProjectIssues = isClosed ? numProjectIssues - 1 : numProjectIssues + 1; + projectIssuesCounter.text(addDelimiter(numProjectIssues)); + + if (this.createMergeRequestDropdown) { + if (isClosed) { + this.createMergeRequestDropdown.unavailable(); + this.createMergeRequestDropdown.disable(); + } else { + // We should check in case a branch was created in another tab + this.createMergeRequestDropdown.checkAbilityToCreateBranch(); + } + } + } else { + flash(issueFailMessage); + } } initIssueBtnEventListeners() { @@ -45,34 +89,8 @@ export default class Issue { url = $button.attr('href'); return axios.put(url) .then(({ data }) => { - const isClosedBadge = $('div.status-box-issue-closed'); - const isOpenBadge = $('div.status-box-open'); - const projectIssuesCounter = $('.issue_counter'); - - if ('id' in data) { - const isClosed = $button.hasClass('btn-close'); - isClosedBadge.toggleClass('hidden', !isClosed); - isOpenBadge.toggleClass('hidden', isClosed); - - $(document).trigger('issuable:change', isClosed); - this.toggleCloseReopenButton(isClosed); - - let numProjectIssues = Number(projectIssuesCounter.first().text().trim().replace(/[^\d]/, '')); - numProjectIssues = isClosed ? numProjectIssues - 1 : numProjectIssues + 1; - projectIssuesCounter.text(addDelimiter(numProjectIssues)); - - if (this.createMergeRequestDropdown) { - if (isClosed) { - this.createMergeRequestDropdown.unavailable(); - this.createMergeRequestDropdown.disable(); - } else { - // We should check in case a branch was created in another tab - this.createMergeRequestDropdown.checkAbilityToCreateBranch(); - } - } - } else { - flash(issueFailMessage); - } + const isClosed = $button.hasClass('btn-close'); + this.updateTopState(isClosed, data); }) .catch(() => flash(issueFailMessage)) .then(() => { diff --git a/app/assets/javascripts/merge_request.js b/app/assets/javascripts/merge_request.js index bedd50de1bb..a64093afcf4 100644 --- a/app/assets/javascripts/merge_request.js +++ b/app/assets/javascripts/merge_request.js @@ -1,6 +1,4 @@ /* eslint-disable func-names, space-before-function-paren, no-var, prefer-rest-params, wrap-iife, quotes, no-underscore-dangle, one-var, one-var-declaration-per-line, consistent-return, dot-notation, quote-props, comma-dangle, object-shorthand, max-len, prefer-arrow-callback */ - -import 'vendor/jquery.waitforimages'; import { __ } from '~/locale'; import TaskList from './task_list'; import MergeRequestTabs from './merge_request_tabs'; diff --git a/app/assets/javascripts/notes/components/comment_form.vue b/app/assets/javascripts/notes/components/comment_form.vue index 3c8452ac808..df796050e0d 100644 --- a/app/assets/javascripts/notes/components/comment_form.vue +++ b/app/assets/javascripts/notes/components/comment_form.vue @@ -2,16 +2,18 @@ import { mapActions, mapGetters } from 'vuex'; import _ from 'underscore'; import Autosize from 'autosize'; + import { __ } from '~/locale'; import Flash from '../../flash'; import Autosave from '../../autosave'; import TaskList from '../../task_list'; import * as constants from '../constants'; import eventHub from '../event_hub'; import issueWarning from '../../vue_shared/components/issue/issue_warning.vue'; - import noteSignedOutWidget from './note_signed_out_widget.vue'; - import discussionLockedWidget from './discussion_locked_widget.vue'; import markdownField from '../../vue_shared/components/markdown/field.vue'; import userAvatarLink from '../../vue_shared/components/user_avatar/user_avatar_link.vue'; + import loadingButton from '../../vue_shared/components/loading_button.vue'; + import noteSignedOutWidget from './note_signed_out_widget.vue'; + import discussionLockedWidget from './discussion_locked_widget.vue'; import issuableStateMixin from '../mixins/issuable_state'; export default { @@ -22,6 +24,7 @@ discussionLockedWidget, markdownField, userAvatarLink, + loadingButton, }, mixins: [ issuableStateMixin, @@ -30,9 +33,6 @@ return { note: '', noteType: constants.COMMENT, - // Can't use mapGetters, - // this needs to be in the data object because it belongs to the state - issueState: this.$store.getters.getNoteableData.state, isSubmitting: false, isSubmitButtonDisabled: true, }; @@ -43,6 +43,7 @@ 'getUserData', 'getNoteableData', 'getNotesData', + 'issueState', ]), isLoggedIn() { return this.getUserData.id; @@ -105,7 +106,7 @@ mounted() { // jQuery is needed here because it is a custom event being dispatched with jQuery. $(document).on('issuable:change', (e, isClosed) => { - this.issueState = isClosed ? constants.CLOSED : constants.REOPENED; + this.toggleIssueLocalState(isClosed ? constants.CLOSED : constants.REOPENED); }); this.initAutoSave(); @@ -117,6 +118,9 @@ 'stopPolling', 'restartPolling', 'removePlaceholderNotes', + 'closeIssue', + 'reopenIssue', + 'toggleIssueLocalState', ]), setIsSubmitButtonDisabled(note, isSubmitting) { if (!_.isEmpty(note) && !isSubmitting) { @@ -126,6 +130,8 @@ } }, handleSave(withIssueAction) { + this.isSubmitting = true; + if (this.note.length) { const noteData = { endpoint: this.endpoint, @@ -142,7 +148,6 @@ if (this.noteType === constants.DISCUSSION) { noteData.data.note.type = constants.DISCUSSION_NOTE; } - this.isSubmitting = true; this.note = ''; // Empty textarea while being requested. Repopulate in catch this.resizeTextarea(); this.stopPolling(); @@ -184,13 +189,25 @@ Please check your network connection and try again.`; this.toggleIssueState(); } }, + enableButton() { + this.isSubmitting = false; + }, toggleIssueState() { - this.issueState = this.isIssueOpen ? constants.CLOSED : constants.REOPENED; - - // This is out of scope for the Notes Vue component. - // It was the shortest path to update the issue state and relevant places. - const btnClass = this.isIssueOpen ? 'btn-reopen' : 'btn-close'; - $(`.js-btn-issue-action.${btnClass}:visible`).trigger('click'); + if (this.isIssueOpen) { + this.closeIssue() + .then(() => this.enableButton()) + .catch(() => { + this.enableButton(); + Flash(__('Something went wrong while closing the issue. Please try again later')); + }); + } else { + this.reopenIssue() + .then(() => this.enableButton()) + .catch(() => { + this.enableButton(); + Flash(__('Something went wrong while reopening the issue. Please try again later')); + }); + } }, discard(shouldClear = true) { // `blur` is needed to clear slash commands autocomplete cache if event fired. @@ -367,15 +384,19 @@ append-right-10 comment-type-dropdown js-comment-type-dropdown droplab-dropdown" </li> </ul> </div> - <button - type="button" - @click="handleSave(true)" + + <loading-button v-if="canUpdateIssue" - :class="actionButtonClassNames" + :loading="isSubmitting" + @click="handleSave(true)" + :container-class="[ + actionButtonClassNames, + 'btn btn-comment btn-comment-and-close js-action-button' + ]" :disabled="isSubmitting" - class="btn btn-comment btn-comment-and-close js-action-button"> - {{ issueActionButtonTitle }} - </button> + :label="issueActionButtonTitle" + /> + <button type="button" v-if="note.length" diff --git a/app/assets/javascripts/notes/index.js b/app/assets/javascripts/notes/index.js index d250dd8d25b..48e7cfddb63 100644 --- a/app/assets/javascripts/notes/index.js +++ b/app/assets/javascripts/notes/index.js @@ -28,6 +28,8 @@ document.addEventListener('DOMContentLoaded', () => new Vue({ notesPath: notesDataset.notesPath, markdownDocsPath: notesDataset.markdownDocsPath, quickActionsDocsPath: notesDataset.quickActionsDocsPath, + closeIssuePath: notesDataset.closeIssuePath, + reopenIssuePath: notesDataset.reopenIssuePath, }, }; }, diff --git a/app/assets/javascripts/notes/services/notes_service.js b/app/assets/javascripts/notes/services/notes_service.js index b51b0cb2013..b8e7ffc8c46 100644 --- a/app/assets/javascripts/notes/services/notes_service.js +++ b/app/assets/javascripts/notes/services/notes_service.js @@ -32,4 +32,7 @@ export default { toggleAward(endpoint, data) { return Vue.http.post(endpoint, data, { emulateJSON: true }); }, + toggleIssueState(endpoint, data) { + return Vue.http.put(endpoint, data); + }, }; diff --git a/app/assets/javascripts/notes/stores/actions.js b/app/assets/javascripts/notes/stores/actions.js index 085b18642ba..4c846d69b86 100644 --- a/app/assets/javascripts/notes/stores/actions.js +++ b/app/assets/javascripts/notes/stores/actions.js @@ -61,6 +61,39 @@ export const createNewNote = ({ commit }, { endpoint, data }) => service export const removePlaceholderNotes = ({ commit }) => commit(types.REMOVE_PLACEHOLDER_NOTES); +export const closeIssue = ({ commit, dispatch, state }) => service + .toggleIssueState(state.notesData.closeIssuePath) + .then(res => res.json()) + .then((data) => { + commit(types.CLOSE_ISSUE); + dispatch('emitStateChangedEvent', data); + }); + +export const reopenIssue = ({ commit, dispatch, state }) => service + .toggleIssueState(state.notesData.reopenIssuePath) + .then(res => res.json()) + .then((data) => { + commit(types.REOPEN_ISSUE); + dispatch('emitStateChangedEvent', data); + }); + +export const emitStateChangedEvent = ({ commit, getters }, data) => { + const event = new CustomEvent('issuable_vue_app:change', { detail: { + data, + isClosed: getters.issueState === constants.CLOSED, + } }); + + document.dispatchEvent(event); +}; + +export const toggleIssueLocalState = ({ commit }, newState) => { + if (newState === constants.CLOSED) { + commit(types.CLOSE_ISSUE); + } else if (newState === constants.REOPENED) { + commit(types.REOPEN_ISSUE); + } +}; + export const saveNote = ({ commit, dispatch }, noteData) => { const { note } = noteData.data.note; let placeholderText = note; diff --git a/app/assets/javascripts/notes/stores/getters.js b/app/assets/javascripts/notes/stores/getters.js index e18b277119e..82024104d73 100644 --- a/app/assets/javascripts/notes/stores/getters.js +++ b/app/assets/javascripts/notes/stores/getters.js @@ -8,6 +8,7 @@ export const getNotesDataByProp = state => prop => state.notesData[prop]; export const getNoteableData = state => state.noteableData; export const getNoteableDataByProp = state => prop => state.noteableData[prop]; +export const issueState = state => state.noteableData.state; export const getUserData = state => state.userData || {}; export const getUserDataByProp = state => prop => state.userData && state.userData[prop]; diff --git a/app/assets/javascripts/notes/stores/mutation_types.js b/app/assets/javascripts/notes/stores/mutation_types.js index d520c197407..6d7c3bbae0f 100644 --- a/app/assets/javascripts/notes/stores/mutation_types.js +++ b/app/assets/javascripts/notes/stores/mutation_types.js @@ -12,3 +12,7 @@ export const SHOW_PLACEHOLDER_NOTE = 'SHOW_PLACEHOLDER_NOTE'; export const TOGGLE_AWARD = 'TOGGLE_AWARD'; export const TOGGLE_DISCUSSION = 'TOGGLE_DISCUSSION'; export const UPDATE_NOTE = 'UPDATE_NOTE'; + +// Issue +export const CLOSE_ISSUE = 'CLOSE_ISSUE'; +export const REOPEN_ISSUE = 'REOPEN_ISSUE'; diff --git a/app/assets/javascripts/notes/stores/mutations.js b/app/assets/javascripts/notes/stores/mutations.js index 20f81a430c2..b3f66578c9a 100644 --- a/app/assets/javascripts/notes/stores/mutations.js +++ b/app/assets/javascripts/notes/stores/mutations.js @@ -152,4 +152,12 @@ export default { noteObj.notes.splice(noteObj.notes.indexOf(comment), 1, note); } }, + + [types.CLOSE_ISSUE](state) { + Object.assign(state.noteableData, { state: constants.CLOSED }); + }, + + [types.REOPEN_ISSUE](state) { + Object.assign(state.noteableData, { state: constants.REOPENED }); + }, }; diff --git a/app/assets/javascripts/pages/projects/tree/show/index.js b/app/assets/javascripts/pages/projects/tree/show/index.js index c4b3356e478..cba57058380 100644 --- a/app/assets/javascripts/pages/projects/tree/show/index.js +++ b/app/assets/javascripts/pages/projects/tree/show/index.js @@ -14,7 +14,7 @@ export default () => { $('#tree-slider').waitForImages(() => ajaxGet(document.querySelector('.js-tree-content').dataset.logsPath)); - const commitPipelineStatusEl = document.getElementById('commit-pipeline-status'); + const commitPipelineStatusEl = document.querySelector('.js-commit-pipeline-status'); const statusLink = document.querySelector('.commit-actions .ci-status-link'); if (statusLink != null) { statusLink.remove(); diff --git a/app/assets/javascripts/render_math.js b/app/assets/javascripts/render_math.js index 73b6aafdd12..eabdb01b2a9 100644 --- a/app/assets/javascripts/render_math.js +++ b/app/assets/javascripts/render_math.js @@ -1,4 +1,5 @@ -/* global katex */ +import { __ } from './locale'; +import flash from './flash'; // Renders math using KaTeX in any element with the // `js-render-math` class @@ -8,15 +9,8 @@ // <code class="js-render-math"></div> // -import { __ } from './locale'; -import axios from './lib/utils/axios_utils'; -import flash from './flash'; - -// Only load once -let katexLoaded = false; - // Loop over all math elements and render math -function renderWithKaTeX(elements) { +function renderWithKaTeX(elements, katex) { elements.each(function katexElementsLoop() { const mathNode = $('<span></span>'); const $this = $(this); @@ -34,30 +28,10 @@ function renderWithKaTeX(elements) { export default function renderMath($els) { if (!$els.length) return; - - if (katexLoaded) { - renderWithKaTeX($els); - } else { - axios.get(gon.katex_css_url) - .then(() => { - const css = $('<link>', { - rel: 'stylesheet', - type: 'text/css', - href: gon.katex_css_url, - }); - css.appendTo('head'); - }) - .then(() => axios.get(gon.katex_js_url, { - responseType: 'text', - })) - .then(({ data }) => { - // Add katex js to our document - $.globalEval(data); - }) - .then(() => { - katexLoaded = true; - renderWithKaTeX($els); // Run KaTeX - }) - .catch(() => flash(__('An error occurred while rendering KaTeX'))); - } + Promise.all([ + import(/* webpackChunkName: 'katex' */ 'katex'), + import(/* webpackChunkName: 'katex' */ 'katex/dist/katex.css'), + ]).then(([katex]) => { + renderWithKaTeX($els, katex); + }).catch(() => flash(__('An error occurred while rendering KaTeX'))); } diff --git a/app/assets/javascripts/render_mermaid.js b/app/assets/javascripts/render_mermaid.js index 31c7a772cf4..d4f18955bd2 100644 --- a/app/assets/javascripts/render_mermaid.js +++ b/app/assets/javascripts/render_mermaid.js @@ -30,6 +30,9 @@ export default function renderMermaid($els) { $els.each((i, el) => { const source = el.textContent; + // Remove any extra spans added by the backend syntax highlighting. + Object.assign(el, { textContent: source }); + mermaid.init(undefined, el, (id) => { const svg = document.getElementById(id); diff --git a/app/assets/javascripts/sidebar/components/time_tracking/sidebar_time_tracking.js b/app/assets/javascripts/sidebar/components/time_tracking/sidebar_time_tracking.js index d32fe4abc7d..782e4ba4fad 100644 --- a/app/assets/javascripts/sidebar/components/time_tracking/sidebar_time_tracking.js +++ b/app/assets/javascripts/sidebar/components/time_tracking/sidebar_time_tracking.js @@ -2,7 +2,7 @@ import _ from 'underscore'; import '~/smart_interval'; -import timeTracker from './time_tracker'; +import IssuableTimeTracker from './time_tracker.vue'; import Store from '../../stores/sidebar_store'; import Mediator from '../../sidebar_mediator'; @@ -16,7 +16,7 @@ export default { }; }, components: { - 'issuable-time-tracker': timeTracker, + IssuableTimeTracker, }, methods: { listenForQuickActions() { diff --git a/app/assets/javascripts/sidebar/components/time_tracking/time_tracker.js b/app/assets/javascripts/sidebar/components/time_tracking/time_tracker.vue index 866178e2b23..230736a56b8 100644 --- a/app/assets/javascripts/sidebar/components/time_tracking/time_tracker.js +++ b/app/assets/javascripts/sidebar/components/time_tracking/time_tracker.vue @@ -1,3 +1,4 @@ +<script> import timeTrackingHelpState from './help_state'; import timeTrackingCollapsedState from './collapsed_state'; import timeTrackingSpentOnlyPane from './spent_only_pane'; @@ -8,7 +9,15 @@ import timeTrackingComparisonPane from './comparison_pane'; import eventHub from '../../event_hub'; export default { - name: 'issuable-time-tracker', + name: 'IssuableTimeTracker', + components: { + 'time-tracking-collapsed-state': timeTrackingCollapsedState, + 'time-tracking-estimate-only-pane': timeTrackingEstimateOnlyPane, + 'time-tracking-spent-only-pane': timeTrackingSpentOnlyPane, + 'time-tracking-no-tracking-pane': timeTrackingNoTrackingPane, + 'time-tracking-comparison-pane': timeTrackingComparisonPane, + 'time-tracking-help-state': timeTrackingHelpState, + }, props: { time_estimate: { type: Number, @@ -38,14 +47,6 @@ export default { showHelp: false, }; }, - components: { - 'time-tracking-collapsed-state': timeTrackingCollapsedState, - 'time-tracking-estimate-only-pane': timeTrackingEstimateOnlyPane, - 'time-tracking-spent-only-pane': timeTrackingSpentOnlyPane, - 'time-tracking-no-tracking-pane': timeTrackingNoTrackingPane, - 'time-tracking-comparison-pane': timeTrackingComparisonPane, - 'time-tracking-help-state': timeTrackingHelpState, - }, computed: { timeSpent() { return this.time_spent; @@ -81,6 +82,9 @@ export default { return !!this.showHelp; }, }, + created() { + eventHub.$on('timeTracker:updateData', this.update); + }, methods: { toggleHelpState(show) { this.showHelp = show; @@ -92,72 +96,73 @@ export default { this.human_time_spent = data.human_time_spent; }, }, - created() { - eventHub.$on('timeTracker:updateData', this.update); - }, - template: ` - <div - class="time_tracker time-tracking-component-wrap" - v-cloak - > - <time-tracking-collapsed-state - :show-comparison-state="showComparisonState" - :show-no-time-tracking-state="showNoTimeTrackingState" - :show-help-state="showHelpState" - :show-spent-only-state="showSpentOnlyState" - :show-estimate-only-state="showEstimateOnlyState" +}; +</script> + +<template> + <div + class="time_tracker time-tracking-component-wrap" + v-cloak + > + <time-tracking-collapsed-state + :show-comparison-state="showComparisonState" + :show-no-time-tracking-state="showNoTimeTrackingState" + :show-help-state="showHelpState" + :show-spent-only-state="showSpentOnlyState" + :show-estimate-only-state="showEstimateOnlyState" + :time-spent-human-readable="timeSpentHumanReadable" + :time-estimate-human-readable="timeEstimateHumanReadable" + /> + <div class="title hide-collapsed"> + {{ __('Time tracking') }} + <div + class="help-button pull-right" + v-if="!showHelpState" + @click="toggleHelpState(true)" + > + <i + class="fa fa-question-circle" + aria-hidden="true" + > + </i> + </div> + <div + class="close-help-button pull-right" + v-if="showHelpState" + @click="toggleHelpState(false)" + > + <i + class="fa fa-close" + aria-hidden="true" + > + </i> + </div> + </div> + <div class="time-tracking-content hide-collapsed"> + <time-tracking-estimate-only-pane + v-if="showEstimateOnlyState" + :time-estimate-human-readable="timeEstimateHumanReadable" + /> + <time-tracking-spent-only-pane + v-if="showSpentOnlyState" + :time-spent-human-readable="timeSpentHumanReadable" + /> + <time-tracking-no-tracking-pane + v-if="showNoTimeTrackingState" + /> + <time-tracking-comparison-pane + v-if="showComparisonState" + :time-estimate="timeEstimate" + :time-spent="timeSpent" :time-spent-human-readable="timeSpentHumanReadable" :time-estimate-human-readable="timeEstimateHumanReadable" /> - <div class="title hide-collapsed"> - {{ __('Time tracking') }} - <div - class="help-button pull-right" - v-if="!showHelpState" - @click="toggleHelpState(true)" - > - <i - class="fa fa-question-circle" - aria-hidden="true" - /> - </div> - <div - class="close-help-button pull-right" + <transition name="help-state-toggle"> + <time-tracking-help-state v-if="showHelpState" - @click="toggleHelpState(false)" - > - <i - class="fa fa-close" - aria-hidden="true" - /> - </div> - </div> - <div class="time-tracking-content hide-collapsed"> - <time-tracking-estimate-only-pane - v-if="showEstimateOnlyState" - :time-estimate-human-readable="timeEstimateHumanReadable" + :root-path="rootPath" /> - <time-tracking-spent-only-pane - v-if="showSpentOnlyState" - :time-spent-human-readable="timeSpentHumanReadable" - /> - <time-tracking-no-tracking-pane - v-if="showNoTimeTrackingState" - /> - <time-tracking-comparison-pane - v-if="showComparisonState" - :time-estimate="timeEstimate" - :time-spent="timeSpent" - :time-spent-human-readable="timeSpentHumanReadable" - :time-estimate-human-readable="timeEstimateHumanReadable" - /> - <transition name="help-state-toggle"> - <time-tracking-help-state - v-if="showHelpState" - :rootPath="rootPath" - /> - </transition> - </div> + </transition> </div> - `, -}; + </div> +</template> diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_missing_branch.js b/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_missing_branch.js deleted file mode 100644 index 7733fb74afe..00000000000 --- a/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_missing_branch.js +++ /dev/null @@ -1,43 +0,0 @@ -import statusIcon from '../mr_widget_status_icon.vue'; -import tooltip from '../../../vue_shared/directives/tooltip'; -import mrWidgetMergeHelp from '../../components/mr_widget_merge_help.vue'; - -export default { - name: 'MRWidgetMissingBranch', - props: { - mr: { type: Object, required: true }, - }, - directives: { - tooltip, - }, - components: { - 'mr-widget-merge-help': mrWidgetMergeHelp, - statusIcon, - }, - computed: { - missingBranchName() { - return this.mr.sourceBranchRemoved ? 'source' : 'target'; - }, - message() { - return `If the ${this.missingBranchName} branch exists in your local repository, you can merge this merge request manually using the command line`; - }, - }, - template: ` - <div class="mr-widget-body media"> - <status-icon status="warning" :show-disabled-button="true" /> - <div class="media-body space-children"> - <span class="bold js-branch-text"> - <span class="capitalize"> - {{missingBranchName}} - </span> branch does not exist. - Please restore it or use a different {{missingBranchName}} branch - <i - v-tooltip - class="fa fa-question-circle" - :title="message" - :aria-label="message"></i> - </span> - </div> - </div> - `, -}; diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_missing_branch.vue b/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_missing_branch.vue new file mode 100644 index 00000000000..718c0e4b3c6 --- /dev/null +++ b/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_missing_branch.vue @@ -0,0 +1,62 @@ +<script> + import { sprintf, s__ } from '~/locale'; + import tooltip from '~/vue_shared/directives/tooltip'; + import statusIcon from '../mr_widget_status_icon.vue'; + import mrWidgetMergeHelp from '../../components/mr_widget_merge_help.vue'; + + export default { + name: 'MRWidgetMissingBranch', + directives: { + tooltip, + }, + components: { + mrWidgetMergeHelp, + statusIcon, + }, + props: { + mr: { + type: Object, + required: true, + }, + }, + computed: { + missingBranchName() { + return this.mr.sourceBranchRemoved ? 'source' : 'target'; + }, + missingBranchNameMessage() { + return sprintf(s__('mrWidget| Please restore it or use a different %{missingBranchName} branch'), { + missingBranchName: this.missingBranchName, + }); + }, + message() { + return sprintf(s__('mrWidget|If the %{missingBranchName} branch exists in your local repository, you can merge this merge request manually using the command line'), { + missingBranchName: this.missingBranchName, + }); + }, + }, + }; +</script> +<template> + <div class="mr-widget-body media"> + <status-icon + status="warning" + :show-disabled-button="true" + /> + + <div class="media-body space-children"> + <span class="bold js-branch-text"> + <span class="capitalize"> + {{ missingBranchName }} + </span> {{ s__("mrWidget|branch does not exist.") }} + {{ missingBranchNameMessage }} + <i + v-tooltip + class="fa fa-question-circle" + :title="message" + :aria-label="message" + > + </i> + </span> + </div> + </div> +</template> diff --git a/app/assets/javascripts/vue_merge_request_widget/dependencies.js b/app/assets/javascripts/vue_merge_request_widget/dependencies.js index 7ca15537719..5517888c3b1 100644 --- a/app/assets/javascripts/vue_merge_request_widget/dependencies.js +++ b/app/assets/javascripts/vue_merge_request_widget/dependencies.js @@ -24,7 +24,7 @@ export { default as WipState } from './components/states/mr_widget_wip'; export { default as ArchivedState } from './components/states/mr_widget_archived.vue'; export { default as ConflictsState } from './components/states/mr_widget_conflicts.vue'; export { default as NothingToMergeState } from './components/states/mr_widget_nothing_to_merge'; -export { default as MissingBranchState } from './components/states/mr_widget_missing_branch'; +export { default as MissingBranchState } from './components/states/mr_widget_missing_branch.vue'; export { default as NotAllowedState } from './components/states/mr_widget_not_allowed'; export { default as ReadyToMergeState } from './components/states/mr_widget_ready_to_merge'; export { default as SHAMismatchState } from './components/states/mr_widget_sha_mismatch'; diff --git a/app/assets/javascripts/vue_shared/components/confirmation_input.vue b/app/assets/javascripts/vue_shared/components/confirmation_input.vue deleted file mode 100644 index 1aa03ea6317..00000000000 --- a/app/assets/javascripts/vue_shared/components/confirmation_input.vue +++ /dev/null @@ -1,62 +0,0 @@ -<script> - import _ from 'underscore'; - import { __, sprintf } from '~/locale'; - - export default { - props: { - inputId: { - type: String, - required: true, - }, - confirmationKey: { - type: String, - required: true, - }, - confirmationValue: { - type: String, - required: true, - }, - shouldEscapeConfirmationValue: { - type: Boolean, - required: false, - default: true, - }, - }, - computed: { - inputLabel() { - let value = this.confirmationValue; - if (this.shouldEscapeConfirmationValue) { - value = _.escape(value); - } - - return sprintf( - __('Type %{value} to confirm:'), - { value: `<code>${value}</code>` }, - false, - ); - }, - }, - methods: { - hasCorrectValue() { - return this.$refs.enteredValue.value === this.confirmationValue; - }, - }, - }; -</script> - -<template> - <div> - <label - v-html="inputLabel" - :for="inputId" - > - </label> - <input - :id="inputId" - :name="confirmationKey" - type="text" - ref="enteredValue" - class="form-control" - /> - </div> -</template> diff --git a/app/assets/javascripts/vue_shared/components/loading_button.vue b/app/assets/javascripts/vue_shared/components/loading_button.vue index ff8c0f7c1d2..6ae6b179f7f 100644 --- a/app/assets/javascripts/vue_shared/components/loading_button.vue +++ b/app/assets/javascripts/vue_shared/components/loading_button.vue @@ -40,7 +40,7 @@ required: false, }, containerClass: { - type: String, + type: [String, Array, Object], required: false, default: 'btn btn-align-content', }, diff --git a/app/assets/stylesheets/framework.scss b/app/assets/stylesheets/framework.scss index 887879ab715..2fccfa4011c 100644 --- a/app/assets/stylesheets/framework.scss +++ b/app/assets/stylesheets/framework.scss @@ -21,7 +21,7 @@ @import "framework/flash"; @import "framework/forms"; @import "framework/gfm"; -@import "framework/gitlab-theme"; +@import "framework/gitlab_theme"; @import "framework/header"; @import "framework/highlight"; @import "framework/issue_box"; @@ -35,10 +35,10 @@ @import "framework/pagination"; @import "framework/panels"; @import "framework/popup"; -@import "framework/secondary-navigation-elements"; +@import "framework/secondary_navigation_elements"; @import "framework/selects"; @import "framework/sidebar"; -@import "framework/contextual-sidebar"; +@import "framework/contextual_sidebar"; @import "framework/tables"; @import "framework/notes"; @import "framework/tabs"; @@ -49,16 +49,16 @@ @import "framework/zen"; @import "framework/blank"; @import "framework/wells"; -@import "framework/page-header"; +@import "framework/page_header"; @import "framework/awards"; @import "framework/images"; -@import "framework/broadcast-messages"; +@import "framework/broadcast_messages"; @import "framework/emojis"; -@import "framework/emoji-sprites"; +@import "framework/emoji_sprites"; @import "framework/icons"; @import "framework/snippets"; @import "framework/memory_graph"; @import "framework/responsive_tables"; -@import "framework/stacked-progress-bar"; +@import "framework/stacked_progress_bar"; @import "framework/ci_variable_list"; @import "framework/feature_highlight"; diff --git a/app/assets/stylesheets/framework/broadcast-messages.scss b/app/assets/stylesheets/framework/broadcast_messages.scss index 9b54fb94cdc..9b54fb94cdc 100644 --- a/app/assets/stylesheets/framework/broadcast-messages.scss +++ b/app/assets/stylesheets/framework/broadcast_messages.scss diff --git a/app/assets/stylesheets/framework/common.scss b/app/assets/stylesheets/framework/common.scss index 73524d5cf60..ae517c41cb2 100644 --- a/app/assets/stylesheets/framework/common.scss +++ b/app/assets/stylesheets/framework/common.scss @@ -449,9 +449,11 @@ img.emoji { .prepend-top-10 { margin-top: 10px; } .prepend-top-15 { margin-top: 15px; } .prepend-top-default { margin-top: $gl-padding !important; } +.prepend-top-16 { margin-top: 16px; } .prepend-top-20 { margin-top: 20px; } .prepend-left-4 { margin-left: 4px; } .prepend-left-5 { margin-left: 5px; } +.prepend-left-8 { margin-left: 8px; } .prepend-left-10 { margin-left: 10px; } .prepend-left-default { margin-left: $gl-padding; } .prepend-left-20 { margin-left: 20px; } diff --git a/app/assets/stylesheets/framework/contextual-sidebar.scss b/app/assets/stylesheets/framework/contextual_sidebar.scss index 1acde98c3ae..1acde98c3ae 100644 --- a/app/assets/stylesheets/framework/contextual-sidebar.scss +++ b/app/assets/stylesheets/framework/contextual_sidebar.scss diff --git a/app/assets/stylesheets/framework/dropdowns.scss b/app/assets/stylesheets/framework/dropdowns.scss index 691df098c70..1d7b0b602cc 100644 --- a/app/assets/stylesheets/framework/dropdowns.scss +++ b/app/assets/stylesheets/framework/dropdowns.scss @@ -736,10 +736,6 @@ } } -.droplab-item-ignore { - pointer-events: none; -} - .pika-single.animate-picker.is-bound, .pika-single.animate-picker.is-bound.is-hidden { /* diff --git a/app/assets/stylesheets/framework/emoji-sprites.scss b/app/assets/stylesheets/framework/emoji_sprites.scss index 0174e17b660..0174e17b660 100644 --- a/app/assets/stylesheets/framework/emoji-sprites.scss +++ b/app/assets/stylesheets/framework/emoji_sprites.scss diff --git a/app/assets/stylesheets/framework/forms.scss b/app/assets/stylesheets/framework/forms.scss index be96c8ee964..a2ea155a10e 100644 --- a/app/assets/stylesheets/framework/forms.scss +++ b/app/assets/stylesheets/framework/forms.scss @@ -182,6 +182,7 @@ label { .help-block { margin-bottom: 0; + margin-top: #{$grid-size / 2}; } .gl-field-error { diff --git a/app/assets/stylesheets/framework/gitlab-theme.scss b/app/assets/stylesheets/framework/gitlab_theme.scss index db36e27fa74..db36e27fa74 100644 --- a/app/assets/stylesheets/framework/gitlab-theme.scss +++ b/app/assets/stylesheets/framework/gitlab_theme.scss diff --git a/app/assets/stylesheets/framework/page-header.scss b/app/assets/stylesheets/framework/page_header.scss index 0c879f40930..0c879f40930 100644 --- a/app/assets/stylesheets/framework/page-header.scss +++ b/app/assets/stylesheets/framework/page_header.scss diff --git a/app/assets/stylesheets/framework/secondary-navigation-elements.scss b/app/assets/stylesheets/framework/secondary_navigation_elements.scss index 17c31d6b184..17c31d6b184 100644 --- a/app/assets/stylesheets/framework/secondary-navigation-elements.scss +++ b/app/assets/stylesheets/framework/secondary_navigation_elements.scss diff --git a/app/assets/stylesheets/framework/stacked-progress-bar.scss b/app/assets/stylesheets/framework/stacked_progress_bar.scss index 4869cda73e5..4869cda73e5 100644 --- a/app/assets/stylesheets/framework/stacked-progress-bar.scss +++ b/app/assets/stylesheets/framework/stacked_progress_bar.scss diff --git a/app/assets/stylesheets/pages/environments.scss b/app/assets/stylesheets/pages/environments.scss index 4eba05a492d..884665d35c7 100644 --- a/app/assets/stylesheets/pages/environments.scss +++ b/app/assets/stylesheets/pages/environments.scss @@ -121,6 +121,10 @@ width: 100%; text-align: left; } + + .environment-child-row { + padding-left: 20px; + } } } diff --git a/app/assets/stylesheets/pages/issues.scss b/app/assets/stylesheets/pages/issues.scss index c48e58af691..6763af4e98b 100644 --- a/app/assets/stylesheets/pages/issues.scss +++ b/app/assets/stylesheets/pages/issues.scss @@ -181,11 +181,6 @@ ul.related-merge-requests > li { } .create-mr-dropdown-wrap { - .branch-message, - .ref-message { - display: none; - } - .ref::selection { color: $placeholder-text-color; } @@ -216,6 +211,17 @@ ul.related-merge-requests > li { transform: translateY(0); display: none; margin-top: 4px; + + // override dropdown item styles + .btn.btn-success { + @include btn-default; + @include btn-green; + + border-style: solid; + border-width: 1px; + line-height: $line-height-base; + width: auto; + } } .create-merge-request-dropdown-toggle { @@ -225,66 +231,6 @@ ul.related-merge-requests > li { margin-left: 0; } } - - .droplab-item-ignore { - pointer-events: auto; - } - - .create-item { - cursor: pointer; - margin: 0 1px; - - &:hover, - &:focus { - background-color: $dropdown-item-hover-bg; - color: $gl-text-color; - } - } - - li.divider { - margin: 8px 10px; - } - - li:not(.divider) { - padding: 8px 9px; - - &:last-child { - padding-bottom: 8px; - } - - &.droplab-item-selected { - .icon-container { - i { - visibility: visible; - } - } - - .description { - display: block; - } - } - - &.droplab-item-ignore { - padding-top: 8px; - } - - .icon-container { - float: left; - - i { - visibility: hidden; - } - } - - .description { - padding-left: 22px; - } - - input, - span { - margin: 4px 0 0; - } - } } .discussion-reply-holder .note-edit-form { diff --git a/app/controllers/import/base_controller.rb b/app/controllers/import/base_controller.rb index 9de0297ecfd..c84fc2d305d 100644 --- a/app/controllers/import/base_controller.rb +++ b/app/controllers/import/base_controller.rb @@ -2,26 +2,16 @@ class Import::BaseController < ApplicationController private def find_or_create_namespace(names, owner) - return current_user.namespace if names == owner - return current_user.namespace unless current_user.can_create_group? - names = params[:target_namespace].presence || names - full_path_namespace = Namespace.find_by_full_path(names) - return full_path_namespace if full_path_namespace + return current_user.namespace if names == owner + + group = Groups::NestedCreateService.new(current_user, group_path: names).execute - names.split('/').inject(nil) do |parent, name| - begin - namespace = Group.create!(name: name, - path: name, - owner: current_user, - parent: parent) - namespace.add_owner(current_user) + group.errors.any? ? current_user.namespace : group + rescue => e + Gitlab::AppLogger.error(e) - namespace - rescue ActiveRecord::RecordNotUnique, ActiveRecord::RecordInvalid - Namespace.where(parent: parent).find_by_path_or_name(name) - end - end + current_user.namespace end end diff --git a/app/controllers/import/bitbucket_controller.rb b/app/controllers/import/bitbucket_controller.rb index 5ad1e116e4e..13ea736688d 100644 --- a/app/controllers/import/bitbucket_controller.rb +++ b/app/controllers/import/bitbucket_controller.rb @@ -37,24 +37,30 @@ class Import::BitbucketController < Import::BaseController def create bitbucket_client = Bitbucket::Client.new(credentials) - @repo_id = params[:repo_id].to_s - name = @repo_id.gsub('___', '/') + repo_id = params[:repo_id].to_s + name = repo_id.gsub('___', '/') repo = bitbucket_client.repo(name) - @project_name = params[:new_name].presence || repo.name + project_name = params[:new_name].presence || repo.name repo_owner = repo.owner repo_owner = current_user.username if repo_owner == bitbucket_client.user.username namespace_path = params[:new_namespace].presence || repo_owner + target_namespace = find_or_create_namespace(namespace_path, current_user) - @target_namespace = find_or_create_namespace(namespace_path, current_user) - - if current_user.can?(:create_projects, @target_namespace) + if current_user.can?(:create_projects, target_namespace) # The token in a session can be expired, we need to get most recent one because # Bitbucket::Connection class refreshes it. session[:bitbucket_token] = bitbucket_client.connection.token - @project = Gitlab::BitbucketImport::ProjectCreator.new(repo, @project_name, @target_namespace, current_user, credentials).execute + + project = Gitlab::BitbucketImport::ProjectCreator.new(repo, project_name, target_namespace, current_user, credentials).execute + + if project.persisted? + render json: ProjectSerializer.new.represent(project) + else + render json: { errors: project.errors.full_messages }, status: :unprocessable_entity + end else - render 'unauthorized' + render json: { errors: 'This namespace has already been taken! Please choose another one.' }, status: :unprocessable_entity end end diff --git a/app/controllers/import/fogbugz_controller.rb b/app/controllers/import/fogbugz_controller.rb index 5df6bd34185..669eb31a995 100644 --- a/app/controllers/import/fogbugz_controller.rb +++ b/app/controllers/import/fogbugz_controller.rb @@ -58,17 +58,17 @@ class Import::FogbugzController < Import::BaseController end def create - @repo_id = params[:repo_id] - repo = client.repo(@repo_id) + repo = client.repo(params[:repo_id]) fb_session = { uri: session[:fogbugz_uri], token: session[:fogbugz_token] } - @target_namespace = current_user.namespace - @project_name = repo.name - - namespace = @target_namespace - umap = session[:fogbugz_user_map] || client.user_map - @project = Gitlab::FogbugzImport::ProjectCreator.new(repo, fb_session, namespace, current_user, umap).execute + project = Gitlab::FogbugzImport::ProjectCreator.new(repo, fb_session, current_user.namespace, current_user, umap).execute + + if project.persisted? + render json: ProjectSerializer.new.represent(project) + else + render json: { errors: project.errors.full_messages }, status: :unprocessable_entity + end end private diff --git a/app/controllers/import/github_controller.rb b/app/controllers/import/github_controller.rb index b8ba7921613..69fb8121ded 100644 --- a/app/controllers/import/github_controller.rb +++ b/app/controllers/import/github_controller.rb @@ -36,16 +36,21 @@ class Import::GithubController < Import::BaseController end def create - @repo_id = params[:repo_id].to_i - repo = client.repo(@repo_id) - @project_name = params[:new_name].presence || repo.name + repo = client.repo(params[:repo_id].to_i) + project_name = params[:new_name].presence || repo.name namespace_path = params[:target_namespace].presence || current_user.namespace_path - @target_namespace = find_or_create_namespace(namespace_path, current_user.namespace_path) + target_namespace = find_or_create_namespace(namespace_path, current_user.namespace_path) - if can?(current_user, :create_projects, @target_namespace) - @project = Gitlab::LegacyGithubImport::ProjectCreator.new(repo, @project_name, @target_namespace, current_user, access_params, type: provider).execute + if can?(current_user, :create_projects, target_namespace) + project = Gitlab::LegacyGithubImport::ProjectCreator.new(repo, project_name, target_namespace, current_user, access_params, type: provider).execute + + if project.persisted? + render json: ProjectSerializer.new.represent(project) + else + render json: { errors: project.errors.full_messages }, status: :unprocessable_entity + end else - render 'unauthorized' + render json: { errors: 'This namespace has already been taken! Please choose another one.' }, status: :unprocessable_entity end end diff --git a/app/controllers/import/gitlab_controller.rb b/app/controllers/import/gitlab_controller.rb index 407154e59a0..18f1d20f5a9 100644 --- a/app/controllers/import/gitlab_controller.rb +++ b/app/controllers/import/gitlab_controller.rb @@ -24,15 +24,19 @@ class Import::GitlabController < Import::BaseController end def create - @repo_id = params[:repo_id].to_i - repo = client.project(@repo_id) - @project_name = repo['name'] - @target_namespace = find_or_create_namespace(repo['namespace']['path'], client.user['username']) + repo = client.project(params[:repo_id].to_i) + target_namespace = find_or_create_namespace(repo['namespace']['path'], client.user['username']) - if current_user.can?(:create_projects, @target_namespace) - @project = Gitlab::GitlabImport::ProjectCreator.new(repo, @target_namespace, current_user, access_params).execute + if current_user.can?(:create_projects, target_namespace) + project = Gitlab::GitlabImport::ProjectCreator.new(repo, target_namespace, current_user, access_params).execute + + if project.persisted? + render json: ProjectSerializer.new.represent(project) + else + render json: { errors: project.errors.full_messages }, status: :unprocessable_entity + end else - render 'unauthorized' + render json: { errors: 'This namespace has already been taken! Please choose another one.' }, status: :unprocessable_entity end end diff --git a/app/controllers/import/google_code_controller.rb b/app/controllers/import/google_code_controller.rb index 7d7f13ce5d5..baa19fb383d 100644 --- a/app/controllers/import/google_code_controller.rb +++ b/app/controllers/import/google_code_controller.rb @@ -85,16 +85,16 @@ class Import::GoogleCodeController < Import::BaseController end def create - @repo_id = params[:repo_id] - repo = client.repo(@repo_id) - @target_namespace = current_user.namespace - @project_name = repo.name - - namespace = @target_namespace - + repo = client.repo(params[:repo_id]) user_map = session[:google_code_user_map] - @project = Gitlab::GoogleCodeImport::ProjectCreator.new(repo, namespace, current_user, user_map).execute + project = Gitlab::GoogleCodeImport::ProjectCreator.new(repo, current_user.namespace, current_user, user_map).execute + + if project.persisted? + render json: ProjectSerializer.new.represent(project) + else + render json: { errors: project.errors.full_messages }, status: :unprocessable_entity + end end private diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb index 515cb08f1fc..33fced99132 100644 --- a/app/controllers/projects/issues_controller.rb +++ b/app/controllers/projects/issues_controller.rb @@ -122,8 +122,7 @@ class Projects::IssuesController < Projects::ApplicationController end def referenced_merge_requests - @merge_requests = @issue.referenced_merge_requests(current_user) - @closed_by_merge_requests = @issue.closed_by_merge_requests(current_user) + @merge_requests, @closed_by_merge_requests = ::Issues::FetchReferencedMergeRequestsService.new(project, current_user).execute(issue) respond_to do |format| format.json do diff --git a/app/finders/snippets_finder.rb b/app/finders/snippets_finder.rb index 4450766485f..33359fa1efb 100644 --- a/app/finders/snippets_finder.rb +++ b/app/finders/snippets_finder.rb @@ -1,14 +1,28 @@ +# Snippets Finder +# +# Used to filter Snippets collections by a set of params +# +# Arguments. +# +# current_user - The current user, nil also can be used. +# params: +# visibility (integer) - Individual snippet visibility: Public(20), internal(10) or private(0). +# project (Project) - Project related. +# author (User) - Author related. +# +# params are optional class SnippetsFinder < UnionFinder - attr_accessor :current_user, :params + include Gitlab::Allowable + attr_accessor :current_user, :params, :project def initialize(current_user, params = {}) @current_user = current_user @params = params + @project = params[:project] end def execute items = init_collection - items = by_project(items) items = by_author(items) items = by_visibility(items) @@ -18,25 +32,42 @@ class SnippetsFinder < UnionFinder private def init_collection - items = Snippet.all + if project.present? + authorized_snippets_from_project + else + authorized_snippets + end + end - accessible(items) + def authorized_snippets_from_project + if can?(current_user, :read_project_snippet, project) + if project.team.member?(current_user) + project.snippets + else + project.snippets.public_to_user(current_user) + end + else + Snippet.none + end end - def accessible(items) - segments = [] - segments << items.public_to_user(current_user) - segments << authorized_to_user(items) if current_user + def authorized_snippets + Snippet.where(feature_available_projects.or(not_project_related)).public_or_visible_to_user(current_user) + end - find_union(segments, Snippet.includes(:author)) + def feature_available_projects + projects = Project.public_or_visible_to_user(current_user) + .with_feature_available_for_user(:snippets, current_user).select(:id) + arel_query = Arel::Nodes::SqlLiteral.new(projects.to_sql) + table[:project_id].in(arel_query) end - def authorized_to_user(items) - items.where( - 'author_id = :author_id - OR project_id IN (:project_ids)', - author_id: current_user.id, - project_ids: current_user.authorized_projects.select(:id)) + def not_project_related + table[:project_id].eq(nil) + end + + def table + Snippet.arel_table end def by_visibility(items) @@ -53,12 +84,6 @@ class SnippetsFinder < UnionFinder items.where(author_id: params[:author].id) end - def by_project(items) - return items unless params[:project] - - items.where(project_id: params[:project].id) - end - def visibility_from_scope case params[:scope].to_s when 'are_private' diff --git a/app/models/key.rb b/app/models/key.rb index ae5769c0627..7406c98c99e 100644 --- a/app/models/key.rb +++ b/app/models/key.rb @@ -33,8 +33,9 @@ class Key < ActiveRecord::Base after_destroy :refresh_user_cache def key=(value) - write_attribute(:key, value.present? ? Gitlab::SSHPublicKey.sanitize(value) : nil) - + value&.delete!("\n\r") + value.strip! unless value.blank? + write_attribute(:key, value) @public_key = nil end @@ -96,7 +97,7 @@ class Key < ActiveRecord::Base def generate_fingerprint self.fingerprint = nil - return unless public_key.valid? + return unless self.key.present? self.fingerprint = public_key.fingerprint end diff --git a/app/models/project.rb b/app/models/project.rb index 0590cc1c720..3893b1818f3 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1589,8 +1589,11 @@ class Project < ActiveRecord::Base end def protected_for?(ref) - ProtectedBranch.protected?(self, ref) || + if repository.branch_exists?(ref) + ProtectedBranch.protected?(self, ref) + elsif repository.tag_exists?(ref) ProtectedTag.protected?(self, ref) + end end def deployment_variables diff --git a/app/models/snippet.rb b/app/models/snippet.rb index 7c8716f8c18..a58c208279e 100644 --- a/app/models/snippet.rb +++ b/app/models/snippet.rb @@ -74,6 +74,27 @@ class Snippet < ActiveRecord::Base @link_reference_pattern ||= super("snippets", /(?<snippet>\d+)/) end + # Returns a collection of snippets that are either public or visible to the + # logged in user. + # + # This method does not verify the user actually has the access to the project + # the snippet is in, so it should be only used on a relation that's already scoped + # for project access + def self.public_or_visible_to_user(user = nil) + if user + authorized = user + .project_authorizations + .select(1) + .where('project_authorizations.project_id = snippets.project_id') + + levels = Gitlab::VisibilityLevel.levels_for_user(user) + + where('EXISTS (?) OR snippets.visibility_level IN (?) or snippets.author_id = (?)', authorized, levels, user.id) + else + public_to_user + end + end + def to_reference(from = nil, full: false) reference = "#{self.class.reference_prefix}#{id}" diff --git a/app/policies/project_policy.rb b/app/policies/project_policy.rb index 1dd8f0a25a9..61a7bf02675 100644 --- a/app/policies/project_policy.rb +++ b/app/policies/project_policy.rb @@ -119,7 +119,6 @@ class ProjectPolicy < BasePolicy enable :create_note enable :upload_file enable :read_cycle_analytics - enable :read_project_snippet end rule { can?(:reporter_access) }.policy do diff --git a/app/serializers/project_serializer.rb b/app/serializers/project_serializer.rb new file mode 100644 index 00000000000..74de1e79a8f --- /dev/null +++ b/app/serializers/project_serializer.rb @@ -0,0 +1,3 @@ +class ProjectSerializer < BaseSerializer + entity ProjectEntity +end diff --git a/app/services/groups/nested_create_service.rb b/app/services/groups/nested_create_service.rb index d6f08fc3cce..5c337a9faa5 100644 --- a/app/services/groups/nested_create_service.rb +++ b/app/services/groups/nested_create_service.rb @@ -11,8 +11,8 @@ module Groups def execute return nil unless group_path - if group = Group.find_by_full_path(group_path) - return group + if namespace = namespace_or_group(group_path) + return namespace end if group_path.include?('/') && !Group.supports_nested_groups? @@ -40,10 +40,14 @@ module Groups ) new_params[:visibility_level] ||= Gitlab::CurrentSettings.current_application_settings.default_group_visibility - last_group = Group.find_by_full_path(partial_path) || Groups::CreateService.new(current_user, new_params).execute + last_group = namespace_or_group(partial_path) || Groups::CreateService.new(current_user, new_params).execute end last_group end + + def namespace_or_group(group_path) + Namespace.find_by_full_path(group_path) + end end end diff --git a/app/services/issues/fetch_referenced_merge_requests_service.rb b/app/services/issues/fetch_referenced_merge_requests_service.rb new file mode 100644 index 00000000000..39c8ded9df4 --- /dev/null +++ b/app/services/issues/fetch_referenced_merge_requests_service.rb @@ -0,0 +1,12 @@ +module Issues + class FetchReferencedMergeRequestsService < Issues::BaseService + def execute(issue) + referenced_merge_requests = issue.referenced_merge_requests(current_user) + referenced_merge_requests = Gitlab::IssuableSorter.sort(project, referenced_merge_requests) { |i| i.iid.to_s } + closed_by_merge_requests = issue.closed_by_merge_requests(current_user) + closed_by_merge_requests = Gitlab::IssuableSorter.sort(project, closed_by_merge_requests) { |i| i.iid.to_s } + + [referenced_merge_requests, closed_by_merge_requests] + end + end +end diff --git a/app/services/merge_requests/build_service.rb b/app/services/merge_requests/build_service.rb index 2ae855d078b..ab6f8ea44a9 100644 --- a/app/services/merge_requests/build_service.rb +++ b/app/services/merge_requests/build_service.rb @@ -160,10 +160,12 @@ module MergeRequests merge_request.title = "Resolve \"#{issue.title}\"" if issue.is_a?(Issue) - unless merge_request.title - branch_title = source_branch.downcase.remove(issue_iid.downcase).titleize.humanize + return if merge_request.title.present? + + if issue_iid.present? merge_request.title = "Resolve #{issue_iid}" - merge_request.title += " \"#{branch_title}\"" unless branch_title.empty? + branch_title = source_branch.downcase.remove(issue_iid.downcase).titleize.humanize + merge_request.title += " \"#{branch_title}\"" if branch_title.present? end end diff --git a/app/views/ci/variables/_variable_row.html.haml b/app/views/ci/variables/_variable_row.html.haml index 495a55660cb..15201780451 100644 --- a/app/views/ci/variables/_variable_row.html.haml +++ b/app/views/ci/variables/_variable_row.html.haml @@ -5,7 +5,7 @@ - id = variable&.id - key = variable&.key - value = variable&.value -- is_protected = variable && !only_key_value ? variable.protected : true +- is_protected = variable && !only_key_value ? variable.protected : false - id_input_name = "#{form_field}[variables_attributes][][id]" - destroy_input_name = "#{form_field}[variables_attributes][][_destroy]" diff --git a/app/views/groups/labels/new.html.haml b/app/views/groups/labels/new.html.haml index ae240490bbd..538c353cf2d 100644 --- a/app/views/groups/labels/new.html.haml +++ b/app/views/groups/labels/new.html.haml @@ -1,6 +1,5 @@ - breadcrumb_title "Labels" - page_title 'New Label' -- header_title group_title(@group, 'Labels', group_labels_path(@group)) %h3.page-title New Label diff --git a/app/views/import/base/create.js.haml b/app/views/import/base/create.js.haml deleted file mode 100644 index 4dc3a4a0acf..00000000000 --- a/app/views/import/base/create.js.haml +++ /dev/null @@ -1,13 +0,0 @@ -- if @project.persisted? - :plain - job = $("tr#repo_#{@repo_id}") - job.attr("id", "project_#{@project.id}") - target_field = job.find(".import-target") - target_field.empty() - target_field.append('#{link_to @project.full_path, project_path(@project)}') - $("table.import-jobs tbody").prepend(job) - job.addClass("active").find(".import-actions").html("<i class='fa fa-spinner fa-spin'></i> started") -- else - :plain - job = $("tr#repo_#{@repo_id}") - job.find(".import-actions").html("<i class='fa fa-exclamation-circle'></i> Error saving project: #{escape_javascript(h(@project.errors.full_messages.join(',')))}") diff --git a/app/views/import/base/unauthorized.js.haml b/app/views/import/base/unauthorized.js.haml deleted file mode 100644 index ada5f99f4e2..00000000000 --- a/app/views/import/base/unauthorized.js.haml +++ /dev/null @@ -1,14 +0,0 @@ -:plain - tr = $("tr#repo_#{@repo_id}") - target_field = tr.find(".import-target") - import_button = tr.find(".btn-import") - origin_target = target_field.text() - project_name = "#{@project_name}" - origin_namespace = "#{@target_namespace.full_path}" - target_field.empty() - target_field.append("<p class='alert alert-danger'>This namespace has already been taken! Please choose another one.</p>") - target_field.append("<input type='text' name='target_namespace' />") - target_field.append("/" + project_name) - target_field.data("project_name", project_name) - target_field.find('input').prop("value", origin_namespace) - import_button.enable().removeClass('is-loading') diff --git a/app/views/projects/commits/_commit.html.haml b/app/views/projects/commits/_commit.html.haml index 64259669c19..6ff7bcae54f 100644 --- a/app/views/projects/commits/_commit.html.haml +++ b/app/views/projects/commits/_commit.html.haml @@ -51,7 +51,7 @@ - if commit.status(ref) = render_commit_status(commit, ref: ref) - #commit-pipeline-status{ data: { endpoint: pipelines_project_commit_path(project, commit.id) } } + .js-commit-pipeline-status{ data: { endpoint: pipelines_project_commit_path(project, commit.id) } } = link_to commit.short_id, link, class: "commit-sha btn btn-transparent btn-link" = clipboard_button(text: commit.id, title: _("Copy commit SHA to clipboard")) = link_to_browse_code(project, commit) diff --git a/app/views/projects/issues/_discussion.html.haml b/app/views/projects/issues/_discussion.html.haml index 9779c1985d5..11b5e02f1e0 100644 --- a/app/views/projects/issues/_discussion.html.haml +++ b/app/views/projects/issues/_discussion.html.haml @@ -12,6 +12,8 @@ markdown_docs_path: help_page_path('user/markdown'), quick_actions_docs_path: help_page_path('user/project/quick_actions'), notes_path: notes_url, + close_issue_path: issue_path(@issue, issue: { state_event: :close }, format: 'json'), + reopen_issue_path: issue_path(@issue, issue: { state_event: :reopen }, format: 'json'), last_fetched_at: Time.now.to_i, noteable_data: serialize_issuable(@issue), current_user_data: UserSerializer.new.represent(current_user, only_path: true).to_json } } diff --git a/app/views/projects/issues/_new_branch.html.haml b/app/views/projects/issues/_new_branch.html.haml index 37b00a14fc6..36e24037214 100644 --- a/app/views/projects/issues/_new_branch.html.haml +++ b/app/views/projects/issues/_new_branch.html.haml @@ -21,30 +21,33 @@ %button.btn.create-merge-request-dropdown-toggle.dropdown-toggle.btn-success.btn-inverted.js-dropdown-toggle{ type: 'button', data: { dropdown: { trigger: '#create-merge-request-dropdown' } } } = icon('caret-down') - %ul#create-merge-request-dropdown.create-merge-request-dropdown-menu.dropdown-menu.dropdown-menu-align-right.gl-show-field-errors{ data: { dropdown: true } } - - if can_create_merge_request - %li.create-item.droplab-item-selected.droplab-item-ignore-hiding{ role: 'button', data: { value: 'create-mr', text: 'Create merge request' } } - .menu-item.droplab-item-ignore-hiding - .icon-container.droplab-item-ignore-hiding= icon('check') - .description.droplab-item-ignore-hiding Create merge request and branch - - %li.create-item.droplab-item-ignore-hiding{ class: [!can_create_merge_request && 'droplab-item-selected'], role: 'button', data: { value: 'create-branch', text: 'Create branch' } } - .menu-item.droplab-item-ignore-hiding - .icon-container.droplab-item-ignore-hiding= icon('check') - .description.droplab-item-ignore-hiding Create branch - %li.divider - - %li.droplab-item-ignore - Branch name - %input.js-branch-name.form-control.droplab-item-ignore{ type: 'text', placeholder: "#{@issue.to_branch_name}", value: "#{@issue.to_branch_name}" } - %span.js-branch-message.branch-message.droplab-item-ignore - - %li.droplab-item-ignore - Source (branch or tag) - %input.js-ref.ref.form-control.droplab-item-ignore{ type: 'text', placeholder: "#{@project.default_branch}", value: "#{@project.default_branch}", data: { value: "#{@project.default_branch}" } } - %span.js-ref-message.ref-message.droplab-item-ignore - - %li.droplab-item-ignore - %button.btn.btn-success.js-create-target.droplab-item-ignore{ type: 'button', data: { action: 'create-mr' } } - Create merge request - + .droplab-dropdown + %ul#create-merge-request-dropdown.create-merge-request-dropdown-menu.dropdown-menu.dropdown-menu-align-right.gl-show-field-errors{ data: { dropdown: true } } + - if can_create_merge_request + %li.droplab-item-selected{ role: 'button', data: { value: 'create-mr', text: _('Create merge request') } } + .menu-item + = icon('check', class: 'icon') + = _('Create merge request and branch') + + %li{ class: [!can_create_merge_request && 'droplab-item-selected'], role: 'button', data: { value: 'create-branch', text: _('Create branch') } } + .menu-item + = icon('check', class: 'icon') + = _('Create branch') + %li.divider.droplab-item-ignore + + %li.droplab-item-ignore.prepend-left-8.append-right-8.prepend-top-16 + .form-group + %label{ for: 'new-branch-name' } + = _('Branch name') + %input#new-branch-name.js-branch-name.form-control{ type: 'text', placeholder: "#{@issue.to_branch_name}", value: "#{@issue.to_branch_name}" } + %span.js-branch-message.help-block + + .form-group + %label{ for: 'source-name' } + = _('Source (branch or tag)') + %input#source-name.js-ref.ref.form-control{ type: 'text', placeholder: "#{@project.default_branch}", value: "#{@project.default_branch}", data: { value: "#{@project.default_branch}" } } + %span.js-ref-message.help-block + + .form-group + %button.btn.btn-success.js-create-target{ type: 'button', data: { action: 'create-mr' } } + = _('Create merge request') diff --git a/app/views/projects/milestones/show.html.haml b/app/views/projects/milestones/show.html.haml index 623c42ba88e..de381d489c6 100644 --- a/app/views/projects/milestones/show.html.haml +++ b/app/views/projects/milestones/show.html.haml @@ -27,7 +27,7 @@ Edit - if @project.group - = link_to promote_project_milestone_path(@milestone.project, @milestone), title: "Promote to Group Milestone", class: 'btn btn-grouped', data: { confirm: "You are about to promote #{@milestone.title} to a group level. This will make this milestone available to all projects inside #{@project.group.name}. The existing project milestone will be merged into the group level. This action cannot be reversed.", toggle: "tooltip" }, method: :post do + = link_to promote_project_milestone_path(@milestone.project, @milestone), title: "Promote to Group Milestone", class: 'btn btn-grouped', data: { confirm: "Promoting #{@milestone.title} will make it available for all projects inside #{@project.group.name}. Existing project milestones with the same name will be merged. This action cannot be reversed.", toggle: "tooltip" }, method: :post do Promote - if @milestone.active? diff --git a/app/views/shared/_label.html.haml b/app/views/shared/_label.html.haml index c0eebdfaddd..8847d11f623 100644 --- a/app/views/shared/_label.html.haml +++ b/app/views/shared/_label.html.haml @@ -48,7 +48,7 @@ .pull-right.hidden-xs.hidden-sm - if label.is_a?(ProjectLabel) && label.project.group && can?(current_user, :admin_label, label.project.group) - = link_to promote_project_label_path(label.project, label), title: "Promote to Group Label", class: 'btn btn-transparent btn-action', data: {confirm: "You are about to promote #{label.title} to a group level. This will make this milestone available to all projects inside #{label.project.group.name}. The existing project label will be merged into the group level. This action cannot be reversed.", toggle: "tooltip"}, method: :post do + = link_to promote_project_label_path(label.project, label), title: "Promote to Group Label", class: 'btn btn-transparent btn-action', data: {confirm: "Promoting #{label.title} will make it available for all projects inside #{label.project.group.name}. Existing project labels with the same name will be merged. This action cannot be reversed.", toggle: "tooltip"}, method: :post do %span.sr-only Promote to Group = sprite_icon('level-up') - if can?(current_user, :admin_label, label) diff --git a/app/views/shared/milestones/_milestone.html.haml b/app/views/shared/milestones/_milestone.html.haml index e08a49b4e59..e3b2b53833e 100644 --- a/app/views/shared/milestones/_milestone.html.haml +++ b/app/views/shared/milestones/_milestone.html.haml @@ -51,7 +51,7 @@ \ - if @project.group - = link_to promote_project_milestone_path(milestone.project, milestone), title: "Promote to Group Milestone", class: 'btn btn-xs btn-grouped', data: { confirm: "You are about to promote #{milestone.title} to a group level. This will make this milestone available to all projects inside #{@project.group.name}. The existing project milestone will be merged into the group level. This action cannot be reversed.", toggle: "tooltip" }, method: :post do + = link_to promote_project_milestone_path(milestone.project, milestone), title: "Promote to Group Milestone", class: 'btn btn-xs btn-grouped', data: { confirm: "Promoting #{milestone.title} will make it available for all projects inside #{@project.group.name}. Existing project milestones with the same name will be merged. This action cannot be reversed.", toggle: "tooltip" }, method: :post do Promote = link_to 'Close Milestone', project_milestone_path(@project, milestone, milestone: {state_event: :close }), method: :put, remote: true, class: "btn btn-xs btn-close btn-grouped" diff --git a/changelogs/unreleased/26466-natural-sort-mrs.yml b/changelogs/unreleased/26466-natural-sort-mrs.yml new file mode 100644 index 00000000000..e3bf9834f24 --- /dev/null +++ b/changelogs/unreleased/26466-natural-sort-mrs.yml @@ -0,0 +1,4 @@ +--- +title: Group MRs on issue page by project and namespace. +merge_request: 8494 +author: Jeff Stubler diff --git a/changelogs/unreleased/40552-sanitize-extra-blank-spaces-used-when-uploading-a-ssh-key.yml b/changelogs/unreleased/40552-sanitize-extra-blank-spaces-used-when-uploading-a-ssh-key.yml deleted file mode 100644 index 9e4811ca308..00000000000 --- a/changelogs/unreleased/40552-sanitize-extra-blank-spaces-used-when-uploading-a-ssh-key.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Sanitize extra blank spaces used when uploading a SSH key -merge_request: 40552 -author: -type: fixed diff --git a/changelogs/unreleased/42922-environment-name.yml b/changelogs/unreleased/42922-environment-name.yml new file mode 100644 index 00000000000..0e9544245f6 --- /dev/null +++ b/changelogs/unreleased/42922-environment-name.yml @@ -0,0 +1,5 @@ +--- +title: Adds tooltip in environment names to increase readability +merge_request: +author: +type: fixed diff --git a/changelogs/unreleased/42923-close-issue.yml b/changelogs/unreleased/42923-close-issue.yml new file mode 100644 index 00000000000..e332bbf5dec --- /dev/null +++ b/changelogs/unreleased/42923-close-issue.yml @@ -0,0 +1,5 @@ +--- +title: Fix close button on issues not working on mobile +merge_request: +author: +type: fixed diff --git a/changelogs/unreleased/4826-geo-wikisyncservice-attempts-to-sync-projects.yml b/changelogs/unreleased/4826-geo-wikisyncservice-attempts-to-sync-projects.yml new file mode 100644 index 00000000000..7f1ccbfcc7e --- /dev/null +++ b/changelogs/unreleased/4826-geo-wikisyncservice-attempts-to-sync-projects.yml @@ -0,0 +1,5 @@ +--- +title: Create empty wiki when import from GitLab and wiki is not there +merge_request: +author: +type: fixed diff --git a/changelogs/unreleased/docs-update-vue-naming-guidelines.yml b/changelogs/unreleased/docs-update-vue-naming-guidelines.yml new file mode 100644 index 00000000000..95bfd212370 --- /dev/null +++ b/changelogs/unreleased/docs-update-vue-naming-guidelines.yml @@ -0,0 +1,5 @@ +--- +title: Update vue component naming guidelines +merge_request: 17018 +author: George Tsiolis +type: other diff --git a/changelogs/unreleased/group-label-page-breadcrumb.yml b/changelogs/unreleased/group-label-page-breadcrumb.yml new file mode 100644 index 00000000000..c6cc4618c52 --- /dev/null +++ b/changelogs/unreleased/group-label-page-breadcrumb.yml @@ -0,0 +1,5 @@ +--- +title: Fix breadcrumb on labels page for groups +merge_request: 17045 +author: Onuwa Nnachi Isaac +type: fixed diff --git a/changelogs/unreleased/jivl-update-katex.yml b/changelogs/unreleased/jivl-update-katex.yml new file mode 100644 index 00000000000..99b5fe49620 --- /dev/null +++ b/changelogs/unreleased/jivl-update-katex.yml @@ -0,0 +1,5 @@ +--- +title: Updated the katex library +merge_request: 15864 +author: +type: other diff --git a/changelogs/unreleased/mk-fix-no-untracked-upload-files-error.yml b/changelogs/unreleased/mk-fix-no-untracked-upload-files-error.yml new file mode 100644 index 00000000000..fddfba94192 --- /dev/null +++ b/changelogs/unreleased/mk-fix-no-untracked-upload-files-error.yml @@ -0,0 +1,5 @@ +--- +title: Resolve PrepareUntrackedUploads PostgreSQL syntax error +merge_request: 17019 +author: +type: fixed diff --git a/changelogs/unreleased/refactor-move-issuable-time-tracker-vue-component.yml b/changelogs/unreleased/refactor-move-issuable-time-tracker-vue-component.yml new file mode 100644 index 00000000000..5ed06c61817 --- /dev/null +++ b/changelogs/unreleased/refactor-move-issuable-time-tracker-vue-component.yml @@ -0,0 +1,5 @@ +--- +title: Move IssuableTimeTracker vue component +merge_request: 16948 +author: George Tsiolis +type: performance diff --git a/changelogs/unreleased/winh-new-branch-dropdown-style.yml b/changelogs/unreleased/winh-new-branch-dropdown-style.yml new file mode 100644 index 00000000000..007e9e9f453 --- /dev/null +++ b/changelogs/unreleased/winh-new-branch-dropdown-style.yml @@ -0,0 +1,5 @@ +--- +title: Cleanup new branch/merge request form in issues +merge_request: 16854 +author: +type: fixed diff --git a/config/application.rb b/config/application.rb index 751307de975..c914e34b9c3 100644 --- a/config/application.rb +++ b/config/application.rb @@ -11,6 +11,7 @@ module Gitlab require_dependency Rails.root.join('lib/gitlab/redis/queues') require_dependency Rails.root.join('lib/gitlab/redis/shared_state') require_dependency Rails.root.join('lib/gitlab/request_context') + require_dependency Rails.root.join('lib/gitlab/current_settings') # Settings in config/environments/* take precedence over those specified here. # Application configuration should go into files in config/initializers @@ -107,8 +108,6 @@ module Gitlab config.assets.precompile << "print.css" config.assets.precompile << "notify.css" config.assets.precompile << "mailers/*.css" - config.assets.precompile << "katex.css" - config.assets.precompile << "katex.js" config.assets.precompile << "xterm/xterm.css" config.assets.precompile << "performance_bar.css" config.assets.precompile << "lib/ace.js" diff --git a/config/webpack.config.js b/config/webpack.config.js index 7f3fe551a03..a4e6c64fce5 100644 --- a/config/webpack.config.js +++ b/config/webpack.config.js @@ -154,6 +154,27 @@ var config = { } }, { + test: /katex.css$/, + include: /node_modules\/katex\/dist/, + use: [ + { loader: 'style-loader' }, + { + loader: 'css-loader', + options: { + name: '[name].[hash].[ext]' + } + }, + ], + }, + { + test: /\.(eot|ttf|woff|woff2)$/, + include: /node_modules\/katex\/dist\/fonts/, + loader: 'file-loader', + options: { + name: '[name].[hash].[ext]', + } + }, + { test: /monaco-editor\/\w+\/vs\/loader\.js$/, use: [ { loader: 'exports-loader', options: 'l.global' }, diff --git a/db/migrate/20180208183958_schedule_populate_untracked_uploads_if_needed.rb b/db/migrate/20180208183958_schedule_populate_untracked_uploads_if_needed.rb new file mode 100644 index 00000000000..e46e793d9d2 --- /dev/null +++ b/db/migrate/20180208183958_schedule_populate_untracked_uploads_if_needed.rb @@ -0,0 +1,47 @@ +# See http://doc.gitlab.com/ce/development/migration_style_guide.html +# for more information on how to write migrations for GitLab. + +class SchedulePopulateUntrackedUploadsIfNeeded < ActiveRecord::Migration + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + FOLLOW_UP_MIGRATION = 'PopulateUntrackedUploads'.freeze + + class UntrackedFile < ActiveRecord::Base + include EachBatch + + self.table_name = 'untracked_files_for_uploads' + end + + def up + if table_exists?(:untracked_files_for_uploads) + process_or_remove_table + end + end + + def down + # nothing + end + + private + + def process_or_remove_table + if UntrackedFile.all.empty? + drop_temp_table + else + schedule_populate_untracked_uploads_jobs + end + end + + def drop_temp_table + drop_table(:untracked_files_for_uploads, if_exists: true) + end + + def schedule_populate_untracked_uploads_jobs + say "Scheduling #{FOLLOW_UP_MIGRATION} background migration jobs since there are rows in untracked_files_for_uploads." + + bulk_queue_background_migration_jobs_by_range( + UntrackedFile, FOLLOW_UP_MIGRATION) + end +end diff --git a/db/post_migrate/20170717111152_cleanup_move_system_upload_folder_symlink.rb b/db/post_migrate/20170717111152_cleanup_move_system_upload_folder_symlink.rb index 26b99b61424..c48f1c938d0 100644 --- a/db/post_migrate/20170717111152_cleanup_move_system_upload_folder_symlink.rb +++ b/db/post_migrate/20170717111152_cleanup_move_system_upload_folder_symlink.rb @@ -20,7 +20,7 @@ class CleanupMoveSystemUploadFolderSymlink < ActiveRecord::Migration def down if File.directory?(new_directory) say "Symlinking #{old_directory} -> #{new_directory}" - FileUtils.ln_s(new_directory, old_directory) + FileUtils.ln_s(new_directory, old_directory) unless File.exist?(old_directory) else say "#{new_directory} doesn't exist, skipping." end diff --git a/db/schema.rb b/db/schema.rb index d07a4c31618..b281be110da 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20180206200543) do +ActiveRecord::Schema.define(version: 20180208183958) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" diff --git a/doc/development/fe_guide/style_guide_js.md b/doc/development/fe_guide/style_guide_js.md index 02773162801..917d28b48ee 100644 --- a/doc/development/fe_guide/style_guide_js.md +++ b/doc/development/fe_guide/style_guide_js.md @@ -207,10 +207,39 @@ Do not use them anymore and feel free to remove them when refactoring legacy cod var c = pureFunction(values.foo); ``` -1. Avoid constructors with side-effects +1. Avoid constructors with side-effects. +Although we aim for code without side-effects we need some side-effects for our code to run. + +If the class won't do anything if we only instantiate it, it's ok to add side effects into the constructor (_Note:_ The following is just an example. If the only purpose of the class is to add an event listener and handle the callback a function will be more suitable.) + +```javascript +// Bad +export class Foo { + constructor() { + this.init(); + } + init() { + document.addEventListener('click', this.handleCallback) + }, + handleCallback() { + + } +} + +// Good +export class Foo { + constructor() { + document.addEventListener() + } + handleCallback() { + } +} +``` + +On the other hand, if a class only needs to extend a third party/add event listeners in some specific cases, they should be initialized oustside of the constructor. 1. Prefer `.map`, `.reduce` or `.filter` over `.forEach` -A forEach will cause side effects, it will be mutating the array being iterated. Prefer using `.map`, +A forEach will most likely cause side effects, it will be mutating the array being iterated. Prefer using `.map`, `.reduce` or `.filter` ```javascript const users = [ { name: 'Foo' }, { name: 'Bar' } ]; @@ -302,20 +331,20 @@ Please check this [rules][eslint-plugin-vue-rules] for more documentation. #### Naming 1. **Extensions**: Use `.vue` extension for Vue components. -1. **Reference Naming**: Use camelCase for their instances: +1. **Reference Naming**: Use PascalCase for their instances: ```javascript // bad - import CardBoard from 'cardBoard' + import cardBoard from 'cardBoard.vue' components: { - CardBoard: + cardBoard, }; // good - import cardBoard from 'cardBoard' + import CardBoard from 'cardBoard.vue' components: { - cardBoard: + CardBoard, }; ``` diff --git a/doc/development/sidekiq_style_guide.md b/doc/development/sidekiq_style_guide.md index 59ebf41e09f..76ff51446ba 100644 --- a/doc/development/sidekiq_style_guide.md +++ b/doc/development/sidekiq_style_guide.md @@ -17,6 +17,9 @@ would be `process_something`. If you're not sure what queue a worker uses, you can find it using `SomeWorker.queue`. There is almost never a reason to manually override the queue name using `sidekiq_options queue: :some_queue`. +You must always add any new queues to `app/workers/all_queues.yml` otherwise +your worker will not run. + ## Queue Namespaces While different workers cannot share a queue, they can share a queue namespace. diff --git a/lib/api/search.rb b/lib/api/search.rb index 9f08fd96a3b..b9982e03bb3 100644 --- a/lib/api/search.rb +++ b/lib/api/search.rb @@ -85,9 +85,9 @@ module API use :pagination end get ':id/-/search' do - find_group!(params[:id]) + group = find_group!(params[:id]) - present search(group_id: params[:id]), with: entity + present search(group_id: group.id), with: entity end end @@ -106,9 +106,9 @@ module API use :pagination end get ':id/-/search' do - find_project!(params[:id]) + project = find_project!(params[:id]) - present search(project_id: params[:id]), with: entity + present search(project_id: project.id), with: entity end end end diff --git a/lib/api/todos.rb b/lib/api/todos.rb index ffccfebe752..c6dbcf84e3a 100644 --- a/lib/api/todos.rb +++ b/lib/api/todos.rb @@ -60,7 +60,7 @@ module API end post ':id/mark_as_done' do TodoService.new.mark_todos_as_done_by_ids(params[:id], current_user) - todo = Todo.find(params[:id]) + todo = current_user.todos.find(params[:id]) present todo, with: Entities::Todo, current_user: current_user end diff --git a/lib/api/v3/todos.rb b/lib/api/v3/todos.rb index 2f2cf259987..3e2c61f6dbd 100644 --- a/lib/api/v3/todos.rb +++ b/lib/api/v3/todos.rb @@ -12,7 +12,7 @@ module API end delete ':id' do TodoService.new.mark_todos_as_done_by_ids(params[:id], current_user) - todo = Todo.find(params[:id]) + todo = current_user.todos.find(params[:id]) present todo, with: ::API::Entities::Todo, current_user: current_user end diff --git a/lib/banzai/filter/syntax_highlight_filter.rb b/lib/banzai/filter/syntax_highlight_filter.rb index a79a0154846..0ac7e231b5b 100644 --- a/lib/banzai/filter/syntax_highlight_filter.rb +++ b/lib/banzai/filter/syntax_highlight_filter.rb @@ -14,23 +14,33 @@ module Banzai end def highlight_node(node) - code = node.text css_classes = 'code highlight js-syntax-highlight' - language = node.attr('lang') + lang = node.attr('lang') + retried = false - if use_rouge?(language) - lexer = lexer_for(language) + if use_rouge?(lang) + lexer = lexer_for(lang) language = lexer.tag + else + lexer = Rouge::Lexers::PlainText.new + language = lang + end + + begin + code = Rouge::Formatters::HTMLGitlab.format(lex(lexer, node.text), tag: language) + css_classes << " #{language}" if language + rescue + # Gracefully handle syntax highlighter bugs/errors to ensure users can + # still access an issue/comment/etc. First, retry with the plain text + # filter. If that fails, then just skip this entirely, but that would + # be a pretty bad upstream bug. + return if retried - begin - code = Rouge::Formatters::HTMLGitlab.format(lex(lexer, code), tag: language) - css_classes << " #{language}" - rescue - # Gracefully handle syntax highlighter bugs/errors to ensure - # users can still access an issue/comment/etc. + language = nil + lexer = Rouge::Lexers::PlainText.new + retried = true - language = nil - end + retry end highlighted = %(<pre class="#{css_classes}" lang="#{language}" v-pre="true"><code>#{code}</code></pre>) diff --git a/lib/gitlab/background_migration/prepare_untracked_uploads.rb b/lib/gitlab/background_migration/prepare_untracked_uploads.rb index a7a1bbe1752..298de005b9b 100644 --- a/lib/gitlab/background_migration/prepare_untracked_uploads.rb +++ b/lib/gitlab/background_migration/prepare_untracked_uploads.rb @@ -43,7 +43,11 @@ module Gitlab store_untracked_file_paths - schedule_populate_untracked_uploads_jobs + if UntrackedFile.all.empty? + drop_temp_table + else + schedule_populate_untracked_uploads_jobs + end end private @@ -92,7 +96,7 @@ module Gitlab end end - yield(paths) + yield(paths) if paths.any? end def build_find_command(search_dir) @@ -165,6 +169,11 @@ module Gitlab bulk_queue_background_migration_jobs_by_range( UntrackedFile, FOLLOW_UP_MIGRATION) end + + def drop_temp_table + UntrackedFile.connection.drop_table(:untracked_files_for_uploads, + if_exists: true) + end end end end diff --git a/lib/gitlab/encoding_helper.rb b/lib/gitlab/encoding_helper.rb index c0edcabc6fd..6659efa0961 100644 --- a/lib/gitlab/encoding_helper.rb +++ b/lib/gitlab/encoding_helper.rb @@ -28,9 +28,9 @@ module Gitlab # encode and clean the bad chars message.replace clean(message) - rescue ArgumentError - return nil - rescue + rescue ArgumentError => e + return unless e.message.include?('unknown encoding name') + encoding = detect ? detect[:encoding] : "unknown" "--broken encoding: #{encoding}" end diff --git a/lib/gitlab/gon_helper.rb b/lib/gitlab/gon_helper.rb index 86a90d57d9c..ba04387022d 100644 --- a/lib/gitlab/gon_helper.rb +++ b/lib/gitlab/gon_helper.rb @@ -13,8 +13,6 @@ module Gitlab gon.relative_url_root = Gitlab.config.gitlab.relative_url_root gon.shortcuts_path = help_page_path('shortcuts') gon.user_color_scheme = Gitlab::ColorSchemes.for_user(current_user).css_class - gon.katex_css_url = ActionController::Base.helpers.asset_path('katex.css') - gon.katex_js_url = ActionController::Base.helpers.asset_path('katex.js') gon.sentry_dsn = Gitlab::CurrentSettings.clientside_sentry_dsn if Gitlab::CurrentSettings.clientside_sentry_enabled gon.gitlab_url = Gitlab.config.gitlab.url gon.revision = Gitlab::REVISION diff --git a/lib/gitlab/import_export/importer.rb b/lib/gitlab/import_export/importer.rb index c14646b0611..a00795f553e 100644 --- a/lib/gitlab/import_export/importer.rb +++ b/lib/gitlab/import_export/importer.rb @@ -50,9 +50,10 @@ module Gitlab end def wiki_restorer - Gitlab::ImportExport::RepoRestorer.new(path_to_bundle: wiki_repo_path, + Gitlab::ImportExport::WikiRestorer.new(path_to_bundle: wiki_repo_path, shared: @shared, - project: ProjectWiki.new(project_tree.restored_project)) + project: ProjectWiki.new(project_tree.restored_project), + wiki_enabled: @project.wiki_enabled?) end def uploads_restorer diff --git a/lib/gitlab/import_export/wiki_restorer.rb b/lib/gitlab/import_export/wiki_restorer.rb new file mode 100644 index 00000000000..f33bfb332ab --- /dev/null +++ b/lib/gitlab/import_export/wiki_restorer.rb @@ -0,0 +1,23 @@ +module Gitlab + module ImportExport + class WikiRestorer < RepoRestorer + def initialize(project:, shared:, path_to_bundle:, wiki_enabled:) + super(project: project, shared: shared, path_to_bundle: path_to_bundle) + + @wiki_enabled = wiki_enabled + end + + def restore + @project.wiki if create_empty_wiki? + + super + end + + private + + def create_empty_wiki? + !File.exist?(@path_to_bundle) && @wiki_enabled + end + end + end +end diff --git a/lib/gitlab/middleware/multipart.rb b/lib/gitlab/middleware/multipart.rb index cc1e92480be..d4c54049b74 100644 --- a/lib/gitlab/middleware/multipart.rb +++ b/lib/gitlab/middleware/multipart.rb @@ -42,7 +42,7 @@ module Gitlab key, value = parsed_field.first if value.nil? - value = open_file(tmp_path) + value = open_file(tmp_path, @request.params["#{key}.name"]) @open_files << value else value = decorate_params_value(value, @request.params[key], tmp_path) @@ -70,7 +70,7 @@ module Gitlab case path_value when nil - value_hash[path_key] = open_file(tmp_path) + value_hash[path_key] = open_file(tmp_path, value_hash.dig(path_key, '.name')) @open_files << value_hash[path_key] value_hash when Hash @@ -81,8 +81,8 @@ module Gitlab end end - def open_file(path) - ::UploadedFile.new(path, File.basename(path), 'application/octet-stream') + def open_file(path, name) + ::UploadedFile.new(path, name || File.basename(path), 'application/octet-stream') end end diff --git a/lib/gitlab/query_limiting.rb b/lib/gitlab/query_limiting.rb index f64f1757144..9f69a9e4a39 100644 --- a/lib/gitlab/query_limiting.rb +++ b/lib/gitlab/query_limiting.rb @@ -6,7 +6,7 @@ module Gitlab # This ensures we don't produce any errors that users can't do anything # about themselves. def self.enable? - Gitlab.com? || Rails.env.development? || Rails.env.test? + Rails.env.development? || Rails.env.test? end # Allows the current request to execute any number of SQL queries. diff --git a/lib/gitlab/ssh_public_key.rb b/lib/gitlab/ssh_public_key.rb index 545e7c74f7e..89ca1298120 100644 --- a/lib/gitlab/ssh_public_key.rb +++ b/lib/gitlab/ssh_public_key.rb @@ -21,22 +21,6 @@ module Gitlab technology(name)&.supported_sizes end - def self.sanitize(key_content) - ssh_type, *parts = key_content.strip.split - - return key_content if parts.empty? - - parts.each_with_object("#{ssh_type} ").with_index do |(part, content), index| - content << part - - if Gitlab::SSHPublicKey.new(content).valid? - break [content, parts[index + 1]].compact.join(' ') # Add the comment part if present - elsif parts.size == index + 1 # return original content if we've reached the last element - break key_content - end - end - end - attr_reader :key_text, :key # Unqualified MD5 fingerprint for compatibility @@ -53,23 +37,23 @@ module Gitlab end def valid? - key.present? && bits && technology.supported_sizes.include?(bits) + key.present? end def type - technology.name if key.present? + technology.name if valid? end def bits - return if key.blank? + return unless valid? case type when :rsa - key.n&.num_bits + key.n.num_bits when :dsa - key.p&.num_bits + key.p.num_bits when :ecdsa - key.group.order&.num_bits + key.group.order.num_bits when :ed25519 256 else diff --git a/lib/tasks/gemojione.rake b/lib/tasks/gemojione.rake index c2d3a6b6950..c6942d22926 100644 --- a/lib/tasks/gemojione.rake +++ b/lib/tasks/gemojione.rake @@ -115,7 +115,7 @@ namespace :gemojione do end end - style_path = Rails.root.join(*%w(app assets stylesheets framework emoji-sprites.scss)) + style_path = Rails.root.join(*%w(app assets stylesheets framework emoji_sprites.scss)) # Combine the resized assets into a packed sprite and re-generate the SCSS SpriteFactory.cssurl = "image-url('$IMAGE')" diff --git a/locale/bg/gitlab.po b/locale/bg/gitlab.po index 81ce8ec506e..badd665c08c 100644 --- a/locale/bg/gitlab.po +++ b/locale/bg/gitlab.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: gitlab-ee\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-12-12 18:31+0000\n" -"PO-Revision-Date: 2018-01-05 04:42-0500\n" +"POT-Creation-Date: 2018-02-07 11:38-0600\n" +"PO-Revision-Date: 2018-02-12 03:58-0500\n" "Last-Translator: gitlab <mbartlett+crowdin@gitlab.com>\n" "Language-Team: Bulgarian\n" "Language: bg_BG\n" @@ -16,23 +16,41 @@ msgstr "" "X-Crowdin-Language: bg\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" +msgid " and" +msgstr "" + msgid "%d commit" msgid_plural "%d commits" msgstr[0] "%d подаване" msgstr[1] "%d подаваниÑ" +msgid "%d commit behind" +msgid_plural "%d commits behind" +msgstr[0] "" +msgstr[1] "" + +msgid "%d issue" +msgid_plural "%d issues" +msgstr[0] "" +msgstr[1] "" + msgid "%d layer" msgid_plural "%d layers" msgstr[0] "" msgstr[1] "" +msgid "%d merge request" +msgid_plural "%d merge requests" +msgstr[0] "" +msgstr[1] "" + msgid "%s additional commit has been omitted to prevent performance issues." msgid_plural "%s additional commits have been omitted to prevent performance issues." msgstr[0] "%s подаване беше пропуÑнато, за да не Ñе натоварва ÑиÑтемата." msgstr[1] "%s Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ Ð±Ñха пропуÑнати, за да не Ñе натоварва ÑиÑтемата." -msgid "%{commit_author_link} committed %{commit_timeago}" -msgstr "%{commit_author_link} подаде %{commit_timeago}" +msgid "%{commit_author_link} authored %{commit_timeago}" +msgstr "" msgid "%{count} participant" msgid_plural "%{count} participants" @@ -45,9 +63,6 @@ msgstr "" msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt." msgstr "" -msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will block access for %{number_of_seconds} seconds." -msgstr "" - msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will not retry automatically. Reset storage information when the problem is resolved." msgstr "" @@ -121,24 +136,81 @@ msgstr "ДобавÑне на лиценз" msgid "Add new directory" msgstr "ДобавÑне на нова папка" +msgid "Add todo" +msgstr "" + +msgid "AdminArea|Stop all jobs" +msgstr "" + +msgid "AdminArea|Stop all jobs?" +msgstr "" + +msgid "AdminArea|Stop jobs" +msgstr "" + +msgid "AdminArea|Stopping jobs failed" +msgstr "" + +msgid "AdminArea|You’re about to stop all jobs. This will halt all current jobs that are running." +msgstr "" + msgid "AdminHealthPageLink|health page" msgstr "" +msgid "Advanced" +msgstr "" + msgid "Advanced settings" msgstr "" msgid "All" msgstr "" +msgid "All changes are committed" +msgstr "" + +msgid "Allows you to add and manage Kubernetes clusters." +msgstr "" + +msgid "An error occurred previewing the blob" +msgstr "" + msgid "An error occurred when toggling the notification subscription" msgstr "" msgid "An error occurred when updating the issue weight" msgstr "" +msgid "An error occurred while dismissing the feature highlight. Refresh the page and try dismissing again." +msgstr "" + +msgid "An error occurred while fetching markdown preview" +msgstr "" + msgid "An error occurred while fetching sidebar data" msgstr "" +msgid "An error occurred while getting projects" +msgstr "" + +msgid "An error occurred while loading filenames" +msgstr "" + +msgid "An error occurred while rendering KaTeX" +msgstr "" + +msgid "An error occurred while rendering preview broadcast message" +msgstr "" + +msgid "An error occurred while retrieving calendar activity" +msgstr "" + +msgid "An error occurred while retrieving diff" +msgstr "" + +msgid "An error occurred while validating username" +msgstr "" + msgid "An error occurred. Please try again." msgstr "" @@ -163,9 +235,6 @@ msgstr "ÐаиÑтина ли иÑкате да изтриете този пла msgid "Are you sure you want to discard your changes?" msgstr "" -msgid "Are you sure you want to leave this group?" -msgstr "" - msgid "Are you sure you want to reset registration token?" msgstr "" @@ -178,6 +247,21 @@ msgstr "" msgid "Artifacts" msgstr "" +msgid "Assign custom color like #FF0000" +msgstr "" + +msgid "Assign labels" +msgstr "" + +msgid "Assign milestone" +msgstr "" + +msgid "Assign to" +msgstr "" + +msgid "Assignee" +msgstr "" + msgid "Attach a file by drag & drop or %{upload_link}" msgstr "Прикачете файл чрез влачене и пуÑкане или %{upload_link}" @@ -193,13 +277,16 @@ msgstr "" msgid "Author" msgstr "" -msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly." +msgid "Authors: %{authors}" msgstr "" -msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly." +msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly." msgstr "" -msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly." +msgid "Auto Review Apps and Auto Deploy need a domain name and a %{kubernetes} to work correctly." +msgstr "" + +msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly." msgstr "" msgid "AutoDevOps|Auto DevOps (Beta)" @@ -223,6 +310,12 @@ msgstr "" msgid "Available" msgstr "" +msgid "Avatar will be removed. Are you sure?" +msgstr "" + +msgid "Average per day: %{average}" +msgstr "" + msgid "Billing" msgstr "" @@ -277,6 +370,9 @@ msgstr "" msgid "BillingPlans|per user" msgstr "" +msgid "Begin with the selected commit" +msgstr "" + msgid "Branch" msgid_plural "Branches" msgstr[0] "Клон" @@ -405,8 +501,8 @@ msgstr "от" msgid "CI / CD" msgstr "" -msgid "CI configuration" -msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð½Ð° непрекъÑната интеграциÑ" +msgid "CI/CD configuration" +msgstr "" msgid "CICD|Jobs" msgstr "" @@ -417,6 +513,9 @@ msgstr "Отказ" msgid "Cancel edit" msgstr "" +msgid "Cannot modify managed Kubernetes cluster" +msgstr "" + msgid "Change Weight" msgstr "" @@ -432,15 +531,24 @@ msgstr "Подбиране" msgid "ChangeTypeAction|Revert" msgstr "ОтмÑна" +msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes." +msgstr "" + msgid "Changelog" msgstr "СпиÑък Ñ Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ð¸" +msgid "Changes are shown as if the <b>source</b> revision was being merged into the <b>target</b> revision." +msgstr "" + msgid "Charts" msgstr "Графики" msgid "Chat" msgstr "" +msgid "Check interval" +msgstr "" + msgid "Checking %{text} availability…" msgstr "" @@ -453,7 +561,19 @@ msgstr "Подбиране на това подаване" msgid "Cherry-pick this merge request" msgstr "Подбиране на тази заÑвка за Ñливане" -msgid "Choose which groups you wish to replicate to this secondary node. Leave blank to replicate all." +msgid "Choose File ..." +msgstr "" + +msgid "Choose a branch/tag (e.g. %{master}) or enter a commit (e.g. %{sha}) to see what's changed or to create a merge request." +msgstr "" + +msgid "Choose file..." +msgstr "" + +msgid "Choose which groups you wish to synchronize to this secondary node." +msgstr "" + +msgid "Choose which shards you wish to synchronize to this secondary node." msgstr "" msgid "CiStatusLabel|canceled" @@ -510,79 +630,91 @@ msgstr "пропуÑнато" msgid "CiStatus|running" msgstr "протича в момента" -msgid "CircuitBreakerApiLink|circuitbreaker api" +msgid "CiVariables|Input variable key" msgstr "" -msgid "Clone repository" +msgid "CiVariables|Input variable value" msgstr "" -msgid "Close" +msgid "CiVariables|Remove variable row" msgstr "" -msgid "Cluster" +msgid "CiVariable|* (All environments)" msgstr "" -msgid "ClusterIntegration|%{appList} was successfully installed on your cluster" +msgid "CiVariable|All environments" msgstr "" -msgid "ClusterIntegration|%{boldNotice} This will add some extra resources like a load balancer, which incur additional costs. See %{pricingLink}" +msgid "CiVariable|Create wildcard" msgstr "" -msgid "ClusterIntegration|API URL" +msgid "CiVariable|Error occured while saving variables" msgstr "" -msgid "ClusterIntegration|Active" +msgid "CiVariable|New environment" msgstr "" -msgid "ClusterIntegration|Add an existing cluster" +msgid "CiVariable|Protected" msgstr "" -msgid "ClusterIntegration|Add cluster" +msgid "CiVariable|Search environments" msgstr "" -msgid "ClusterIntegration|All" +msgid "CiVariable|Toggle protected" msgstr "" -msgid "ClusterIntegration|Applications" +msgid "CiVariable|Validation failed" msgstr "" -msgid "ClusterIntegration|CA Certificate" +msgid "CircuitBreakerApiLink|circuitbreaker api" msgstr "" -msgid "ClusterIntegration|Certificate Authority bundle (PEM format)" +msgid "Click to expand text" msgstr "" -msgid "ClusterIntegration|Choose how to set up cluster integration" +msgid "Clone repository" msgstr "" -msgid "ClusterIntegration|Cluster" +msgid "Close" msgstr "" -msgid "ClusterIntegration|Cluster details" +msgid "Closed" msgstr "" -msgid "ClusterIntegration|Cluster integration" +msgid "ClusterIntegration|%{appList} was successfully installed on your Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Cluster integration is disabled for this project." +msgid "ClusterIntegration|API URL" msgstr "" -msgid "ClusterIntegration|Cluster integration is enabled for this project." +msgid "ClusterIntegration|Add Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Cluster integration is enabled for this project. Disabling this integration will not affect your cluster, it will only temporarily turn off GitLab's connection to it." +msgid "ClusterIntegration|Add an existing Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Cluster is being created on Google Kubernetes Engine..." +msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration" +msgstr "" + +msgid "ClusterIntegration|Applications" +msgstr "" + +msgid "ClusterIntegration|Are you sure you want to remove this Kubernetes cluster's integration? This will not delete your actual Kubernetes cluster." +msgstr "" + +msgid "ClusterIntegration|CA Certificate" +msgstr "" + +msgid "ClusterIntegration|Certificate Authority bundle (PEM format)" msgstr "" -msgid "ClusterIntegration|Cluster name" +msgid "ClusterIntegration|Choose how to set up Kubernetes cluster integration" msgstr "" -msgid "ClusterIntegration|Cluster was successfully created on Google Kubernetes Engine. Refresh the page to see cluster's details" +msgid "ClusterIntegration|Choose which of your project's environments will use this Kubernetes cluster." msgstr "" -msgid "ClusterIntegration|Clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" +msgid "ClusterIntegration|Control how your Kubernetes cluster integrates with GitLab" msgstr "" msgid "ClusterIntegration|Copy API URL" @@ -591,37 +723,34 @@ msgstr "" msgid "ClusterIntegration|Copy CA Certificate" msgstr "" -msgid "ClusterIntegration|Copy Token" +msgid "ClusterIntegration|Copy Kubernetes cluster name" msgstr "" -msgid "ClusterIntegration|Copy cluster name" +msgid "ClusterIntegration|Copy Token" msgstr "" -msgid "ClusterIntegration|Create a new cluster on Google Engine right from GitLab" +msgid "ClusterIntegration|Create Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Create cluster" +msgid "ClusterIntegration|Create Kubernetes cluster on Google Kubernetes Engine" msgstr "" -msgid "ClusterIntegration|Create cluster on Google Kubernetes Engine" +msgid "ClusterIntegration|Create a new Kubernetes cluster on Google Kubernetes Engine right from GitLab" msgstr "" msgid "ClusterIntegration|Create on GKE" msgstr "" -msgid "ClusterIntegration|Enable cluster integration" -msgstr "" - msgid "ClusterIntegration|Enter the details for an existing Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Enter the details for your cluster" +msgid "ClusterIntegration|Enter the details for your Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Environment pattern" +msgid "ClusterIntegration|Environment scope" msgstr "" -msgid "ClusterIntegration|GKE pricing" +msgid "ClusterIntegration|GitLab Integration" msgstr "" msgid "ClusterIntegration|GitLab Runner" @@ -639,64 +768,94 @@ msgstr "" msgid "ClusterIntegration|Helm Tiller" msgstr "" -msgid "ClusterIntegration|Inactive" -msgstr "" - msgid "ClusterIntegration|Ingress" msgstr "" msgid "ClusterIntegration|Install" msgstr "" -msgid "ClusterIntegration|Install applications on your cluster. Read more about %{helpLink}" -msgstr "" - msgid "ClusterIntegration|Installed" msgstr "" msgid "ClusterIntegration|Installing" msgstr "" -msgid "ClusterIntegration|Integrate cluster automation" +msgid "ClusterIntegration|Integrate Kubernetes cluster automation" +msgstr "" + +msgid "ClusterIntegration|Integration status" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster details" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is disabled for this project." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project. Disabling this integration will not affect your Kubernetes cluster, it will only temporarily turn off GitLab's connection to it." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster is being created on Google Kubernetes Engine..." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster name" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters can be used to deploy applications and to provide Review Apps for this project" msgstr "" msgid "ClusterIntegration|Learn more about %{link_to_documentation}" msgstr "" -msgid "ClusterIntegration|Learn more about Clusters" +msgid "ClusterIntegration|Learn more about Kubernetes" msgstr "" -msgid "ClusterIntegration|Machine type" +msgid "ClusterIntegration|Learn more about environments" msgstr "" -msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create clusters" +msgid "ClusterIntegration|Machine type" msgstr "" -msgid "ClusterIntegration|Manage cluster integration on your GitLab project" +msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create Kubernetes clusters" msgstr "" -msgid "ClusterIntegration|Manage your cluster by visiting %{link_gke}" +msgid "ClusterIntegration|Manage" msgstr "" -msgid "ClusterIntegration|Multiple clusters are available in GitLab Entreprise Edition Premium and Ultimate" +msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}" msgstr "" -msgid "ClusterIntegration|Note:" +msgid "ClusterIntegration|More information" msgstr "" -msgid "ClusterIntegration|Number of nodes" +msgid "ClusterIntegration|Multiple Kubernetes clusters are available in GitLab Enterprise Edition Premium and Ultimate" msgstr "" -msgid "ClusterIntegration|Please enter access information for your cluster. If you need help, you can read our %{link_to_help_page} on clusters" +msgid "ClusterIntegration|Note:" msgstr "" -msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:" +msgid "ClusterIntegration|Number of nodes" msgstr "" -msgid "ClusterIntegration|Problem setting up the cluster" +msgid "ClusterIntegration|Please enter access information for your Kubernetes cluster. If you need help, you can read our %{link_to_help_page} on Kubernetes" msgstr "" -msgid "ClusterIntegration|Problem setting up the clusters list" +msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:" msgstr "" msgid "ClusterIntegration|Project ID" @@ -708,16 +867,19 @@ msgstr "" msgid "ClusterIntegration|Project namespace (optional, unique)" msgstr "" -msgid "ClusterIntegration|Read our %{link_to_help_page} on cluster integration." +msgid "ClusterIntegration|Prometheus" +msgstr "" + +msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration." msgstr "" -msgid "ClusterIntegration|Remove cluster integration" +msgid "ClusterIntegration|Remove Kubernetes cluster integration" msgstr "" msgid "ClusterIntegration|Remove integration" msgstr "" -msgid "ClusterIntegration|Removing cluster integration will remove the cluster configuration you have added to this project. It will not delete your cluster on Google Kubernetes Engine." +msgid "ClusterIntegration|Remove this Kubernetes cluster's configuration from this project. This will not delete your actual Kubernetes cluster." msgstr "" msgid "ClusterIntegration|Request to begin installing failed" @@ -726,7 +888,7 @@ msgstr "" msgid "ClusterIntegration|Save changes" msgstr "" -msgid "ClusterIntegration|See and edit the details for your cluster" +msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster" msgstr "" msgid "ClusterIntegration|See machine types" @@ -747,25 +909,25 @@ msgstr "" msgid "ClusterIntegration|Something went wrong on our end." msgstr "" -msgid "ClusterIntegration|Something went wrong while creating your cluster on Google Kubernetes Engine" +msgid "ClusterIntegration|Something went wrong while creating your Kubernetes cluster on Google Kubernetes Engine" msgstr "" msgid "ClusterIntegration|Something went wrong while installing %{title}" msgstr "" -msgid "ClusterIntegration|There are no clusters to show" +msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below" msgstr "" -msgid "ClusterIntegration|This account must have permissions to create a cluster in the %{link_to_container_project} specified below" +msgid "ClusterIntegration|Toggle Kubernetes Cluster" msgstr "" -msgid "ClusterIntegration|Toggle Cluster" +msgid "ClusterIntegration|Toggle Kubernetes cluster" msgstr "" msgid "ClusterIntegration|Token" msgstr "" -msgid "ClusterIntegration|With a cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." +msgid "ClusterIntegration|With a Kubernetes cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." msgstr "" msgid "ClusterIntegration|Your account must have %{link_to_kubernetes_engine}" @@ -777,7 +939,7 @@ msgstr "" msgid "ClusterIntegration|access to Google Kubernetes Engine" msgstr "" -msgid "ClusterIntegration|cluster" +msgid "ClusterIntegration|check the pricing here" msgstr "" msgid "ClusterIntegration|documentation" @@ -795,6 +957,9 @@ msgstr "" msgid "ClusterIntegration|properly configured" msgstr "" +msgid "Collapse" +msgstr "" + msgid "Comments" msgstr "" @@ -812,6 +977,9 @@ msgstr "Времетраене на подаваниÑта в минути за msgid "Commit message" msgstr "Съобщение за подаването" +msgid "Commit statistics for %{ref} %{start_time} - %{end_time}" +msgstr "" + msgid "CommitBoxTitle|Commit" msgstr "Подаване" @@ -824,15 +992,57 @@ msgstr "ПодаваниÑ" msgid "Commits feed" msgstr "Поток от подаваниÑ" +msgid "Commits per day hour (UTC)" +msgstr "" + +msgid "Commits per day of month" +msgstr "" + +msgid "Commits per weekday" +msgstr "" + +msgid "Commits|An error occurred while fetching merge requests data." +msgstr "" + +msgid "Commits|Commit: %{commitText}" +msgstr "" + msgid "Commits|History" msgstr "ИÑториÑ" +msgid "Commits|No related merge requests found" +msgstr "" + msgid "Committed by" msgstr "Подадено от" msgid "Compare" msgstr "Сравнение" +msgid "Compare Git revisions" +msgstr "" + +msgid "Compare Revisions" +msgstr "" + +msgid "CompareBranches|%{source_branch} and %{target_branch} are the same." +msgstr "" + +msgid "CompareBranches|Compare" +msgstr "" + +msgid "CompareBranches|Source" +msgstr "" + +msgid "CompareBranches|Target" +msgstr "" + +msgid "CompareBranches|There isn't anything to compare." +msgstr "" + +msgid "Confidentiality" +msgstr "" + msgid "Container Registry" msgstr "" @@ -884,6 +1094,9 @@ msgstr "РъководÑтво за ÑътрудничеÑтво" msgid "Contributors" msgstr "Сътрудници" +msgid "ContributorsPage|%{startDate} – %{endDate}" +msgstr "" + msgid "ContributorsPage|Building repository graph." msgstr "" @@ -905,9 +1118,18 @@ msgstr "" msgid "Copy URL to clipboard" msgstr "Копиране на адреÑа в буфера за обмен" +msgid "Copy branch name to clipboard" +msgstr "" + msgid "Copy commit SHA to clipboard" msgstr "Копиране на идентификатора на подаването в буфера за обмен" +msgid "Copy reference to clipboard" +msgstr "" + +msgid "Create" +msgstr "" + msgid "Create New Directory" msgstr "Създаване на нова папка" @@ -926,6 +1148,9 @@ msgstr "" msgid "Create file" msgstr "" +msgid "Create lists from labels. Issues with that label appear in that list." +msgstr "" + msgid "Create merge request" msgstr "Създаване на заÑвка за Ñливане" @@ -938,6 +1163,9 @@ msgstr "" msgid "Create new file" msgstr "" +msgid "Create new label" +msgstr "" + msgid "Create new..." msgstr "Създаване на нов…" @@ -959,6 +1187,9 @@ msgstr "ЧаÑова зона за „Cron“" msgid "Cron syntax" msgstr "СинтакÑÐ¸Ñ Ð½Ð° „Cron“" +msgid "Current node" +msgstr "" + msgid "Custom notification events" msgstr "ПерÑонализирани ÑÑŠÐ±Ð¸Ñ‚Ð¸Ñ Ð·Ð° извеÑÑ‚Ñване" @@ -968,9 +1199,6 @@ msgstr "ПерÑонализираните нива на извеÑÑ‚Ñване msgid "Cycle Analytics" msgstr "Ðнализ на циклите" -msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project." -msgstr "Ðнализът на циклите дава общ поглед върху това колко време е нужно на една Ð¸Ð´ÐµÑ Ð´Ð° Ñе превърне в завършена функционалноÑÑ‚ в проекта." - msgid "CycleAnalyticsStage|Code" msgstr "Програмиране" @@ -1027,12 +1255,21 @@ msgstr "" msgid "Details" msgstr "" +msgid "Diffs|No file name available" +msgstr "" + msgid "Directory name" msgstr "Име на папката" +msgid "Disable" +msgstr "" + msgid "Discard changes" msgstr "" +msgid "Discover GitLab Geo." +msgstr "" + msgid "Dismiss Cycle Analytics introduction box" msgstr "" @@ -1058,7 +1295,7 @@ msgid "Download zip" msgstr "СвалÑне във формат „zip“" msgid "DownloadArtifacts|Download" -msgstr "СвалÑне" +msgstr "СвалÑне на" msgid "DownloadCommit|Email Patches" msgstr "Изпращане на кръпките по е-поща" @@ -1069,15 +1306,24 @@ msgstr "Обикновен файл Ñ Ñ€Ð°Ð·Ð»Ð¸ÐºÐ¸" msgid "DownloadSource|Download" msgstr "СвалÑне" +msgid "Due date" +msgstr "" + msgid "Edit" msgstr "Редактиране" msgid "Edit Pipeline Schedule %{id}" msgstr "Редактиране на плана %{id} за Ñхема" +msgid "Edit files in the editor and commit changes here" +msgstr "" + msgid "Emails" msgstr "" +msgid "Enable" +msgstr "" + msgid "Environments|An error occurred while fetching the environments." msgstr "" @@ -1096,9 +1342,6 @@ msgstr "" msgid "Environments|Environments" msgstr "" -msgid "Environments|Environments are places where code gets deployed, such as staging or production." -msgstr "" - msgid "Environments|Job" msgstr "" @@ -1141,9 +1384,33 @@ msgstr "" msgid "Error creating epic" msgstr "" +msgid "Error fetching contributors data." +msgstr "" + +msgid "Error fetching labels." +msgstr "" + +msgid "Error fetching network graph." +msgstr "" + +msgid "Error fetching refs" +msgstr "" + +msgid "Error fetching usage ping data." +msgstr "" + msgid "Error occurred when toggling the notification subscription" msgstr "" +msgid "Error saving label update." +msgstr "" + +msgid "Error updating status for all todos." +msgstr "" + +msgid "Error updating todo status." +msgstr "" + msgid "EventFilterBy|Filter by all" msgstr "" @@ -1171,6 +1438,9 @@ msgstr "Ð’Ñеки меÑец (на 1-во чиÑло, в 4 ч. Ñутринта msgid "Every week (Sundays at 4:00am)" msgstr "Ð’ÑÑка Ñедмица (в неделÑ, в 4 ч. Ñутринта)" +msgid "Expand" +msgstr "" + msgid "Explore projects" msgstr "" @@ -1189,6 +1459,9 @@ msgstr "" msgid "February" msgstr "" +msgid "Fields on this page are now uneditable, you can configure" +msgstr "" + msgid "File name" msgstr "" @@ -1233,10 +1506,10 @@ msgstr "От прилагането на заÑвката за Ñливане д msgid "GPG Keys" msgstr "" -msgid "Geo Nodes" +msgid "Generate a default set of labels" msgstr "" -msgid "GeoNodeSyncStatus|Failed" +msgid "Geo Nodes" msgstr "" msgid "GeoNodeSyncStatus|Node is failing or broken." @@ -1245,16 +1518,100 @@ msgstr "" msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage." msgstr "" -msgid "GeoNodeSyncStatus|Out of sync" +msgid "GeoNodes|Database replication lag:" +msgstr "" + +msgid "GeoNodes|Disabling a node stops the sync process. Are you sure?" +msgstr "" + +msgid "GeoNodes|Does not match the primary storage configuration" +msgstr "" + +msgid "GeoNodes|Failed" +msgstr "" + +msgid "GeoNodes|Full" +msgstr "" + +msgid "GeoNodes|GitLab version does not match the primary node version" +msgstr "" + +msgid "GeoNodes|GitLab version:" +msgstr "" + +msgid "GeoNodes|Health status:" +msgstr "" + +msgid "GeoNodes|Last event ID processed by cursor:" +msgstr "" + +msgid "GeoNodes|Last event ID seen from primary:" +msgstr "" + +msgid "GeoNodes|Loading nodes" +msgstr "" + +msgid "GeoNodes|Local Attachments:" +msgstr "" + +msgid "GeoNodes|Local LFS objects:" +msgstr "" + +msgid "GeoNodes|Local job artifacts:" +msgstr "" + +msgid "GeoNodes|New node" +msgstr "" + +msgid "GeoNodes|Out of sync" +msgstr "" + +msgid "GeoNodes|Replication slot WAL:" +msgstr "" + +msgid "GeoNodes|Replication slots:" +msgstr "" + +msgid "GeoNodes|Repositories:" +msgstr "" + +msgid "GeoNodes|Selective" +msgstr "" + +msgid "GeoNodes|Storage config:" +msgstr "" + +msgid "GeoNodes|Sync settings:" +msgstr "" + +msgid "GeoNodes|Synced" +msgstr "" + +msgid "GeoNodes|Unused slots" +msgstr "" + +msgid "GeoNodes|Used slots" +msgstr "" + +msgid "GeoNodes|Wikis:" +msgstr "" + +msgid "GeoNodes|You have configured Geo nodes using an insecure HTTP connection. We recommend the use of HTTPS." msgstr "" -msgid "GeoNodeSyncStatus|Synced" +msgid "Geo|All projects" msgstr "" msgid "Geo|File sync capacity" msgstr "" -msgid "Geo|Groups to replicate" +msgid "Geo|Groups to synchronize" +msgstr "" + +msgid "Geo|Projects in certain groups" +msgstr "" + +msgid "Geo|Projects in certain storage shards" msgstr "" msgid "Geo|Repository sync capacity" @@ -1263,12 +1620,24 @@ msgstr "" msgid "Geo|Select groups to replicate." msgstr "" +msgid "Geo|Shards to synchronize" +msgstr "" + +msgid "Git revision" +msgstr "" + msgid "Git storage health information has been reset" msgstr "" +msgid "Git version" +msgstr "" + msgid "GitLab Runner section" msgstr "" +msgid "Gitaly Servers" +msgstr "" + msgid "Go to your fork" msgstr "Към Вашето разклонение" @@ -1278,6 +1647,9 @@ msgstr "Разклонение" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it!" +msgstr "" + msgid "GroupSettings|Prevent sharing a project within %{group} with other groups" msgstr "" @@ -1314,7 +1686,7 @@ msgstr "" msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group." msgstr "" -msgid "GroupsTree|Are you sure you want to leave the \"${this.group.fullName}\" group?" +msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?" msgstr "" msgid "GroupsTree|Create a project in this group." @@ -1365,6 +1737,11 @@ msgstr "" msgid "HealthCheck|Unhealthy" msgstr "" +msgid "Hide value" +msgid_plural "Hide values" +msgstr[0] "" +msgstr[1] "" + msgid "History" msgstr "" @@ -1391,6 +1768,12 @@ msgid_plural "Instances" msgstr[0] "" msgstr[1] "" +msgid "Instance does not support multiple Kubernetes clusters" +msgstr "" + +msgid "Interested parties can even contribute by pushing commits if they want to." +msgstr "" + msgid "Internal - The group and any internal projects can be viewed by any logged in user." msgstr "" @@ -1418,6 +1801,9 @@ msgstr "" msgid "Issues" msgstr "" +msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable." +msgstr "" + msgid "Jan" msgstr "" @@ -1436,6 +1822,27 @@ msgstr "" msgid "June" msgstr "" +msgid "Kubernetes" +msgstr "" + +msgid "Kubernetes Cluster" +msgstr "" + +msgid "Kubernetes cluster creation time exceeds timeout; %{timeout}" +msgstr "" + +msgid "Kubernetes cluster integration was not removed." +msgstr "" + +msgid "Kubernetes cluster integration was successfully removed." +msgstr "" + +msgid "Kubernetes cluster was successfully updated." +msgstr "" + +msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page" +msgstr "" + msgid "LFSStatus|Disabled" msgstr "Изключено" @@ -1445,6 +1852,9 @@ msgstr "Включено" msgid "Labels" msgstr "" +msgid "Labels can be applied to issues and merge requests to categorize them." +msgstr "" + msgid "Last %d day" msgid_plural "Last %d days" msgstr[0] "ПоÑÐ»ÐµÐ´Ð½Ð¸Ñ %d ден" @@ -1474,6 +1884,9 @@ msgstr "" msgid "LastPushEvent|at" msgstr "" +msgid "Learn more" +msgstr "" + msgid "Learn more in the" msgstr "Ðаучете повече в" @@ -1492,14 +1905,18 @@ msgstr "ÐапуÑкане на проекта" msgid "License" msgstr "" -msgid "Limited to showing %d event at most" -msgid_plural "Limited to showing %d events at most" -msgstr[0] "Ограничено до показване на най-много %d Ñъбитие" -msgstr[1] "Ограничено до показване на най-много %d ÑъбитиÑ" +msgid "Loading the GitLab IDE..." +msgstr "" msgid "Lock" msgstr "" +msgid "Lock %{issuableDisplayName}" +msgstr "" + +msgid "Lock this %{issuableDisplayName}? Only <strong>project members</strong> will be able to comment." +msgstr "" + msgid "Locked" msgstr "" @@ -1509,12 +1926,21 @@ msgstr "" msgid "Login" msgstr "" +msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos." +msgstr "" + +msgid "Manage labels" +msgstr "" + msgid "Mar" msgstr "" msgid "March" msgstr "" +msgid "Mark done" +msgstr "" + msgid "Maximum git storage failures" msgstr "" @@ -1527,6 +1953,9 @@ msgstr "Медиана" msgid "Members" msgstr "" +msgid "Merge Request" +msgstr "" + msgid "Merge Requests" msgstr "" @@ -1536,9 +1965,30 @@ msgstr "" msgid "Merge request" msgstr "" +msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others" +msgstr "" + +msgid "Merged" +msgstr "" + msgid "Messages" msgstr "" +msgid "Milestone" +msgstr "" + +msgid "Milestones|Delete milestone" +msgstr "" + +msgid "Milestones|Delete milestone %{milestoneTitle}?" +msgstr "" + +msgid "Milestones|Failed to delete milestone %{milestoneTitle}" +msgstr "" + +msgid "Milestones|Milestone %{milestoneTitle} was not found" +msgstr "" + msgid "MissingSSHKeyWarningLink|add an SSH key" msgstr "добавите SSH ключ" @@ -1548,10 +1998,16 @@ msgstr "" msgid "More information is available|here" msgstr "" +msgid "Move" +msgstr "" + +msgid "Move issue" +msgstr "" + msgid "Multiple issue boards" msgstr "" -msgid "New Cluster" +msgid "Name new label" msgstr "" msgid "New Issue" @@ -1559,6 +2015,12 @@ msgid_plural "New Issues" msgstr[0] "Ðов проблем" msgstr[1] "Ðови проблема" +msgid "New Kubernetes Cluster" +msgstr "" + +msgid "New Kubernetes cluster" +msgstr "" + msgid "New Pipeline Schedule" msgstr "Ðов план за Ñхема" @@ -1583,6 +2045,9 @@ msgstr "" msgid "New issue" msgstr "Ðов проблем" +msgid "New label" +msgstr "" + msgid "New merge request" msgstr "Ðова заÑвка за Ñливане" @@ -1601,7 +2066,22 @@ msgstr "" msgid "New tag" msgstr "Ðов етикет" -msgid "No container images stored for this project. Add one by following the instructions above." +msgid "No assignee" +msgstr "" + +msgid "No changes" +msgstr "" + +msgid "No connection could be made to a Gitaly Server, please check your logs!" +msgstr "" + +msgid "No due date" +msgstr "" + +msgid "No estimate or time spent" +msgstr "" + +msgid "No file chosen" msgstr "" msgid "No repository" @@ -1616,9 +2096,15 @@ msgstr "" msgid "None" msgstr "" +msgid "Not allowed to merge" +msgstr "" + msgid "Not available" msgstr "Ðе е налично" +msgid "Not confidential" +msgstr "" + msgid "Not enough data" msgstr "ÐÑма доÑтатъчно данни" @@ -1679,6 +2165,12 @@ msgstr "Ðаблюдение" msgid "Notifications" msgstr "" +msgid "Notifications off" +msgstr "" + +msgid "Notifications on" +msgstr "" + msgid "Nov" msgstr "" @@ -1688,7 +2180,7 @@ msgstr "" msgid "Number of access attempts" msgstr "" -msgid "Number of failures before backing off" +msgid "OK" msgstr "" msgid "Oct" @@ -1703,6 +2195,9 @@ msgstr "Филтър" msgid "Only project members can comment." msgstr "" +msgid "Open" +msgstr "" + msgid "Opened" msgstr "" @@ -1736,9 +2231,6 @@ msgstr "" msgid "Password" msgstr "" -msgid "People without permission will never get a notification and won\\'t be able to comment." -msgstr "" - msgid "Pipeline" msgstr "Схема" @@ -1781,12 +2273,6 @@ msgstr "Ð’Ñички" msgid "PipelineSchedules|Inactive" msgstr "Ðеактивно" -msgid "PipelineSchedules|Input variable key" -msgstr "Въведете ключ за променливата" - -msgid "PipelineSchedules|Input variable value" -msgstr "Въведете ÑтойноÑтта на променливата" - msgid "PipelineSchedules|Next Run" msgstr "Следващо изпълнение" @@ -1796,9 +2282,6 @@ msgstr "Ðищо" msgid "PipelineSchedules|Provide a short description for this pipeline" msgstr "Въведете кратко опиÑание за тази Ñхема" -msgid "PipelineSchedules|Remove variable row" -msgstr "Премахване на реда за променлива" - msgid "PipelineSchedules|Take ownership" msgstr "Поемане на ÑобÑтвеноÑтта" @@ -1826,6 +2309,12 @@ msgstr "" msgid "Pipelines for last year" msgstr "" +msgid "Pipelines|Build with confidence" +msgstr "" + +msgid "Pipelines|Get started with Pipelines" +msgstr "" + msgid "Pipeline|all" msgstr "вÑички" @@ -1838,12 +2327,21 @@ msgstr "Ñ ÐµÑ‚Ð°Ð¿" msgid "Pipeline|with stages" msgstr "Ñ ÐµÑ‚Ð°Ð¿Ð¸" +msgid "Play" +msgstr "" + +msgid "Please <a href=%{link_to_billing} target=\"_blank\" rel=\"noopener noreferrer\">enable billing for one of your projects to be able to create a Kubernetes cluster</a>, then try again." +msgstr "" + msgid "Please solve the reCAPTCHA" msgstr "" msgid "Preferences" msgstr "" +msgid "Primary" +msgstr "" + msgid "Private - Project access must be granted explicitly to each user." msgstr "" @@ -1889,6 +2387,9 @@ msgstr "" msgid "Profiles|your account" msgstr "" +msgid "Programming languages used in this repository" +msgstr "" + msgid "Project '%{project_name}' is in the process of being deleted." msgstr "" @@ -1904,6 +2405,15 @@ msgstr "Проектът „%{project_name}“ беше обновен уÑÐ¿ÐµÑ msgid "Project access must be granted explicitly to each user." msgstr "ДоÑтъпът до проекта Ñ‚Ñ€Ñбва да бъде даван поотделно на вÑеки потребител." +msgid "Project avatar" +msgstr "" + +msgid "Project avatar in repository: %{link}" +msgstr "" + +msgid "Project cache successfully reset." +msgstr "" + msgid "Project details" msgstr "" @@ -1922,6 +2432,21 @@ msgstr "ИзнаÑÑнето на проекта започна. Ще получ msgid "ProjectActivityRSS|Subscribe" msgstr "" +msgid "ProjectCreationLevel|Allowed to create projects" +msgstr "" + +msgid "ProjectCreationLevel|Default project creation protection" +msgstr "" + +msgid "ProjectCreationLevel|Developers + Masters" +msgstr "" + +msgid "ProjectCreationLevel|Masters" +msgstr "" + +msgid "ProjectCreationLevel|No one" +msgstr "" + msgid "ProjectFeature|Disabled" msgstr "Изключено" @@ -1946,15 +2471,9 @@ msgstr "Графика" msgid "ProjectSettings|Contact an admin to change this setting." msgstr "" -msgid "ProjectSettings|Immediately run a pipeline on the default branch" -msgstr "" - msgid "ProjectSettings|Only signed commits can be pushed to this repository." msgstr "" -msgid "ProjectSettings|Problem setting up the CI/CD settings JavaScript" -msgstr "" - msgid "ProjectSettings|This setting is applied on the server level and can be overridden by an admin." msgstr "" @@ -2024,6 +2543,9 @@ msgstr "" msgid "PrometheusService|View environments" msgstr "" +msgid "Protip:" +msgstr "" + msgid "Public - The group and any public projects can be viewed without any authentication." msgstr "" @@ -2039,6 +2561,9 @@ msgstr "" msgid "PushRule|Committer restriction" msgstr "" +msgid "Quick actions can be used in the issues description and comment boxes." +msgstr "" + msgid "Read more" msgstr "Прочетете повече" @@ -2051,6 +2576,12 @@ msgstr "Клони" msgid "RefSwitcher|Tags" msgstr "Етикети" +msgid "Reference:" +msgstr "" + +msgid "Register / Sign In" +msgstr "" + msgid "Registry" msgstr "" @@ -2075,9 +2606,18 @@ msgstr "Свързани приложени заÑвки за Ñливане" msgid "Remind later" msgstr "ÐапомнÑне по-къÑно" +msgid "Remove" +msgstr "" + +msgid "Remove avatar" +msgstr "" + msgid "Remove project" msgstr "Премахване на проекта" +msgid "Repair authentication" +msgstr "" + msgid "Repository" msgstr "" @@ -2093,6 +2633,11 @@ msgstr "" msgid "Reset runners registration token" msgstr "" +msgid "Reveal value" +msgid_plural "Reveal values" +msgstr[0] "" +msgstr[1] "" + msgid "Revert this commit" msgstr "ОтмÑна на това подаване" @@ -2102,15 +2647,15 @@ msgstr "ОтмÑна на тази заÑвка за Ñливане" msgid "SSH Keys" msgstr "" -msgid "Save" -msgstr "" - msgid "Save changes" msgstr "" msgid "Save pipeline schedule" msgstr "Запазване на плана за Ñхема" +msgid "Save variables" +msgstr "" + msgid "Schedule a new pipeline" msgstr "Създаване на нов план за Ñхема" @@ -2126,38 +2671,59 @@ msgstr "" msgid "Search branches and tags" msgstr "ТърÑете в клоните и етикетите" -msgid "Seconds before reseting failure information" +msgid "Search milestones" +msgstr "" + +msgid "Search project" msgstr "" -msgid "Seconds to wait after a storage failure" +msgid "Search users" +msgstr "" + +msgid "Seconds before reseting failure information" msgstr "" msgid "Seconds to wait for a storage access attempt" msgstr "" +msgid "Secret variables" +msgstr "" + msgid "Select Archive Format" msgstr "Изберете формата на архива" msgid "Select a timezone" msgstr "Изберете чаÑова зона" +msgid "Select assignee" +msgstr "" + +msgid "Select branch/tag" +msgstr "" + msgid "Select target branch" msgstr "Изберете целеви клон" +msgid "Selective synchronization" +msgstr "" + msgid "Sep" msgstr "" msgid "September" msgstr "" +msgid "Server version" +msgstr "" + msgid "Service Templates" msgstr "" msgid "Set a password on your account to pull or push via %{protocol}." msgstr "Задайте парола на акаунта Ñи, за да можете да изтеглÑте и изпращате промени чрез %{protocol}." -msgid "Set up CI" -msgstr "ÐаÑтройка на ÐИ" +msgid "Set up CI/CD" +msgstr "" msgid "Set up Koding" msgstr "ÐаÑтройка на „Koding“" @@ -2171,6 +2737,15 @@ msgstr "зададете парола" msgid "Settings" msgstr "" +msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero." +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset pipeline minutes" +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset used pipeline minutes" +msgstr "" + msgid "Show parent pages" msgstr "" @@ -2185,9 +2760,6 @@ msgstr[1] "Показване на %d ÑъбитиÑ" msgid "Sidebar|Change weight" msgstr "" -msgid "Sidebar|Edit" -msgstr "" - msgid "Sidebar|No" msgstr "" @@ -2200,18 +2772,30 @@ msgstr "" msgid "Snippets" msgstr "" +msgid "Something went wrong on our end" +msgstr "" + msgid "Something went wrong on our end." msgstr "" +msgid "Something went wrong trying to change the confidentiality of this issue" +msgstr "" + msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}" msgstr "" +msgid "Something went wrong when toggling the button" +msgstr "" + msgid "Something went wrong while fetching the projects." msgstr "" msgid "Something went wrong while fetching the registry list." msgstr "" +msgid "Something went wrong. Please try again." +msgstr "" + msgid "Sort by" msgstr "" @@ -2341,10 +2925,10 @@ msgstr "" msgid "Stopped" msgstr "" -msgid "Subgroups" +msgid "Storage" msgstr "" -msgid "Subscribe" +msgid "Subgroups" msgstr "" msgid "Switch branch/tag" @@ -2442,7 +3026,10 @@ msgstr "" msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project." msgstr "" -msgid "The circuitbreaker backoff threshold should be lower than the failure count threshold" +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project" +msgstr "" + +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project." msgstr "" msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request." @@ -2457,10 +3044,10 @@ msgstr "Връзката на разклонение беше премахнат msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage." msgstr "Етапът на проблемите показва колко е времето от Ñъздаването на проблем до определÑнето на целеви етап на проекта за него, или до добавÑнето му в ÑпиÑък на дъÑката за проблеми. Започнете да добавÑте проблеми, за да видите данните за този етап." -msgid "The number of attempts GitLab will make to access a storage." +msgid "The maximum file size allowed is 200KB." msgstr "" -msgid "The number of failures after which GitLab will start temporarily disabling access to a storage shard on a host" +msgid "The number of attempts GitLab will make to access a storage." msgstr "" msgid "The number of failures of after which GitLab will completely prevent access to the storage. The number of failures can be reset in the admin interface: %{link_to_health_page} or using the %{api_documentation_link}." @@ -2469,9 +3056,6 @@ msgstr "" msgid "The phase of the development lifecycle." msgstr "Етапът от цикъла на разработка" -msgid "The pipelines schedule runs pipelines in the future, repeatedly, for specific branches or tags. Those scheduled pipelines will inherit limited project access based on their associated user." -msgstr "Планът за Ñхемата ще изпълнÑва Ñхемите в бъдеще, периодично, за определени клони или етикети. Тези планирани Ñхеми ще наÑледÑÑ‚ ограничениÑта на доÑтъпа до проекта на ÑÐ²ÑŠÑ€Ð·Ð°Ð½Ð¸Ñ Ñ Ñ‚ÑÑ… потребител." - msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit." msgstr "Етапът на планиране показва колко е времето от преходната Ñтъпка до изпращането на първото подаване. Това време ще бъде добавено автоматично Ñлед като изпратите първото Ñи подаване." @@ -2502,19 +3086,46 @@ msgstr "" msgid "The time in seconds GitLab will try to access storage. After this time a timeout error will be raised." msgstr "" +msgid "The time in seconds between storage checks. When a previous check did complete yet, GitLab will skip a check." +msgstr "" + msgid "The time taken by each data entry gathered by that stage." msgstr "Времето, което отнема вÑеки Ð·Ð°Ð¿Ð¸Ñ Ð¾Ñ‚ данни за ÑÑŠÐ¾Ñ‚Ð²ÐµÑ‚Ð½Ð¸Ñ ÐµÑ‚Ð°Ð¿." msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6." msgstr "СтойноÑтта, коÑто Ñе намира в Ñредата на поÑледователноÑтта от наблюдавани данни. Ðапример: медианата на 3, 5 и 9 е 5, а медианата на 3, 5, 7 и 8 е (5+7)/2 = 6." +msgid "There are no issues to show" +msgstr "" + +msgid "There are no merge requests to show" +msgstr "" + msgid "There are problems accessing Git storage: " msgstr "" +msgid "There was an error loading users activity calendar." +msgstr "" + +msgid "There was an error saving your notification settings." +msgstr "" + +msgid "There was an error subscribing to this label." +msgstr "" + +msgid "There was an error when reseting email token." +msgstr "" + +msgid "There was an error when subscribing to this label." +msgstr "" + +msgid "There was an error when unsubscribing from this label." +msgstr "" + msgid "This board\\'s scope is reduced" msgstr "" -msgid "This branch has changed since you started editing. Would you like to create a new branch?" +msgid "This directory" msgstr "" msgid "This is a confidential issue." @@ -2523,18 +3134,45 @@ msgstr "" msgid "This is the author's first Merge Request to this project." msgstr "" +msgid "This issue is confidential" +msgstr "" + msgid "This issue is confidential and locked." msgstr "" msgid "This issue is locked." msgstr "" +msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments" +msgstr "" + +msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered" +msgstr "" + +msgid "This job has not been triggered yet" +msgstr "" + +msgid "This job has not started yet" +msgstr "" + +msgid "This job is in pending state and is waiting to be picked by a runner" +msgstr "" + +msgid "This job requires a manual action" +msgstr "" + msgid "This means you can not push code until you create an empty repository or import existing one." msgstr "Това означава, че нÑма да можете да изпращате код, докато не Ñъздадете празно хранилище или не внеÑете ÑъщеÑтвуващо такова." msgid "This merge request is locked." msgstr "" +msgid "This project" +msgstr "" + +msgid "This repository" +msgstr "" + msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here." msgstr "" @@ -2547,9 +3185,21 @@ msgstr "Време преди работата по проблем да запо msgid "Time between merge request creation and merge/close" msgstr "Време между Ñъздаване на заÑвка за Ñливане и прилагането/отхвърлÑнето Ñ" +msgid "Time tracking" +msgstr "" + msgid "Time until first merge request" msgstr "Време преди първата заÑвка за Ñливане" +msgid "TimeTrackingEstimated|Est" +msgstr "" + +msgid "TimeTracking|Estimated:" +msgstr "" + +msgid "TimeTracking|Spent" +msgstr "" + msgid "Timeago|%s days ago" msgstr "преди %s дни" @@ -2689,6 +3339,18 @@ msgstr "Ñек" msgid "Title" msgstr "" +msgid "Todo" +msgstr "" + +msgid "Toggle sidebar" +msgstr "" + +msgid "ToggleButton|Toggle Status: OFF" +msgstr "" + +msgid "ToggleButton|Toggle Status: ON" +msgstr "" + msgid "Total Time" msgstr "Общо време" @@ -2704,19 +3366,40 @@ msgstr "" msgid "Track groups of issues that share a theme, across projects and milestones" msgstr "" +msgid "Total: %{total}" +msgstr "" + +msgid "Track time with quick actions" +msgstr "" + +msgid "Trigger this manual action" +msgstr "" + msgid "Turn on Service Desk" msgstr "" +msgid "Type %{value} to confirm:" +msgstr "" + +msgid "Unable to reset project cache." +msgstr "" + +msgid "Unknown" +msgstr "" + msgid "Unlock" msgstr "" +msgid "Unlock this %{issuableDisplayName}? <strong>Everyone</strong> will be able to comment." +msgstr "" + msgid "Unlocked" msgstr "" msgid "Unstar" msgstr "Без звезда" -msgid "Unsubscribe" +msgid "Up to date" msgstr "" msgid "Upgrade your plan to activate Advanced Global Search." @@ -2740,6 +3423,9 @@ msgstr "Качване на нов файл" msgid "Upload file" msgstr "Качване на файл" +msgid "Upload new avatar" +msgstr "" + msgid "UploadLink|click to upload" msgstr "щракнете за качване" @@ -2752,9 +3438,15 @@ msgstr "" msgid "Use your global notification setting" msgstr "Използване на глобалната Ви наÑтройка за извеÑтиÑта" +msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want." +msgstr "" + msgid "View file @ " msgstr "" +msgid "View labels" +msgstr "" + msgid "View open merge request" msgstr "Преглед на отворената заÑвка за Ñливане" @@ -2776,6 +3468,9 @@ msgstr "ÐеизвеÑтно" msgid "Want to see the data? Please ask an administrator for access." msgstr "ИÑкате ли да видите данните? Помолете админиÑтратор за доÑтъп." +msgid "We could not verify that one of your projects on GCP has billing enabled. Please try again." +msgstr "" + msgid "We don't have enough data to show this stage." msgstr "ÐÑма доÑтатъчно данни за този етап." @@ -2788,9 +3483,6 @@ msgstr "" msgid "Weight" msgstr "" -msgid "When access to a storage fails. GitLab will prevent access to the storage for the time specified here. This allows the filesystem to recover. Repositories on failing shards are temporarly unavailable" -msgstr "" - msgid "Wiki" msgstr "" @@ -2809,6 +3501,12 @@ msgstr "" msgid "WikiClone|Start Gollum and edit locally" msgstr "" +msgid "WikiEditPageTip|Tip: You can move this page by adding the path to the beginning of the title." +msgstr "" + +msgid "WikiEdit|There is already a page with the same title in that path." +msgstr "" + msgid "WikiEmptyPageError|You are not allowed to create wiki pages" msgstr "" @@ -2911,9 +3609,21 @@ msgstr "Ðа път Ñте да премахнете връзката на раРmsgid "You are going to transfer %{project_name_with_namespace} to another owner. Are you ABSOLUTELY sure?" msgstr "Ðа път Ñте да прехвърлите „%{project_name_with_namespace}“ към друг ÑобÑтвеник. ÐÐИСТИÐРли иÑкате това?" +msgid "You can also star a label to make it a priority label." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + msgid "You can only add files when you are on a branch" msgstr "Можете да добавÑте файлове Ñамо когато Ñе намирате в клон" +msgid "You can only edit files when you are on a branch" +msgstr "" + msgid "You cannot write to a read-only secondary GitLab Geo instance. Please use %{link_to_primary_node} instead." msgstr "" @@ -2953,6 +3663,12 @@ msgstr "ÐÑма да можете да изтеглÑте или изпраща msgid "You won't be able to pull or push project code via SSH until you add an SSH key to your profile" msgstr "" +msgid "You'll need to use different branch names to get a valid comparison." +msgstr "" + +msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure" +msgstr "" + msgid "Your comment will not be visible to the public." msgstr "" @@ -2965,26 +3681,220 @@ msgstr "Вашето име" msgid "Your projects" msgstr "" +msgid "assign yourself" +msgstr "" + msgid "branch name" msgstr "" msgid "by" msgstr "" +msgid "ciReport|Code quality" +msgstr "" + +msgid "ciReport|DAST detected no alerts by analyzing the review app" +msgstr "" + +msgid "ciReport|Failed to load ${type} report" +msgstr "" + +msgid "ciReport|Fixed:" +msgstr "" + +msgid "ciReport|Instances" +msgstr "" + +msgid "ciReport|Learn more about whitelisting" +msgstr "" + +msgid "ciReport|Loading ${type} report" +msgstr "" + +msgid "ciReport|No changes to code quality" +msgstr "" + +msgid "ciReport|No changes to performance metrics" +msgstr "" + +msgid "ciReport|Performance metrics" +msgstr "" + +msgid "ciReport|SAST" +msgstr "" + +msgid "ciReport|SAST detected no security vulnerabilities" +msgstr "" + +msgid "ciReport|SAST:container no vulnerabilities were found" +msgstr "" + +msgid "ciReport|Show complete code vulnerabilities report" +msgstr "" + +msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}" +msgstr "" + msgid "commit" msgstr "" +msgid "confidentiality|You are going to turn off the confidentiality. This means <strong>everyone</strong> will be able to see and leave a comment on this issue." +msgstr "" + +msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with <strong>at least Reporter access</strong> are able to see and leave comments on the issue." +msgstr "" + msgid "day" msgid_plural "days" msgstr[0] "ден" msgstr[1] "дни" +msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command." +msgstr "" + +msgid "merge request" +msgid_plural "merge requests" +msgstr[0] "" +msgstr[1] "" + +msgid "mrWidget|Cancel automatic merge" +msgstr "" + +msgid "mrWidget|Check out branch" +msgstr "" + +msgid "mrWidget|Checking ability to merge automatically" +msgstr "" + +msgid "mrWidget|Cherry-pick" +msgstr "" + +msgid "mrWidget|Cherry-pick this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Closed" +msgstr "" + +msgid "mrWidget|Closed by" +msgstr "" + +msgid "mrWidget|Closes" +msgstr "" + +msgid "mrWidget|Did not close" +msgstr "" + +msgid "mrWidget|Email patches" +msgstr "" + +msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|Mentions" +msgstr "" + +msgid "mrWidget|Merge" +msgstr "" + +msgid "mrWidget|Merge failed." +msgstr "" + +msgid "mrWidget|Merge locally" +msgstr "" + +msgid "mrWidget|Merged by" +msgstr "" + +msgid "mrWidget|Plain diff" +msgstr "" + +msgid "mrWidget|Refresh" +msgstr "" + +msgid "mrWidget|Refresh now" +msgstr "" + +msgid "mrWidget|Refreshing now" +msgstr "" + +msgid "mrWidget|Remove Source Branch" +msgstr "" + +msgid "mrWidget|Remove source branch" +msgstr "" + +msgid "mrWidget|Request to merge" +msgstr "" + +msgid "mrWidget|Resolve conflicts" +msgstr "" + +msgid "mrWidget|Revert" +msgstr "" + +msgid "mrWidget|Revert this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Set by" +msgstr "" + +msgid "mrWidget|The changes were merged into" +msgstr "" + +msgid "mrWidget|The changes were not merged into" +msgstr "" + +msgid "mrWidget|The changes will be merged into" +msgstr "" + +msgid "mrWidget|The source branch has been removed" +msgstr "" + +msgid "mrWidget|The source branch is being removed" +msgstr "" + +msgid "mrWidget|The source branch will be removed" +msgstr "" + +msgid "mrWidget|The source branch will not be removed" +msgstr "" + +msgid "mrWidget|There are merge conflicts" +msgstr "" + +msgid "mrWidget|This merge request failed to be merged automatically" +msgstr "" + +msgid "mrWidget|This merge request is in the process of being merged" +msgstr "" + +msgid "mrWidget|This project is archived, write access has been disabled" +msgstr "" + +msgid "mrWidget|You can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|You can remove source branch now" +msgstr "" + +msgid "mrWidget|command line" +msgstr "" + +msgid "mrWidget|into" +msgstr "" + +msgid "mrWidget|to be merged automatically when the pipeline succeeds" +msgstr "" + msgid "new merge request" msgstr "нова заÑвка за Ñливане" msgid "notification emails" msgstr "извеÑÑ‚Ð¸Ñ Ð¿Ð¾ е-поща" +msgid "or" +msgstr "" + msgid "parent" msgid_plural "parents" msgstr[0] "родител" @@ -2996,12 +3906,21 @@ msgstr "" msgid "personal access token" msgstr "" +msgid "remove due date" +msgstr "" + msgid "source" msgstr "" +msgid "spendCommand|%{slash_command} will update the sum of the time spent." +msgstr "" + msgid "to help your contributors communicate effectively!" msgstr "" msgid "username" msgstr "" +msgid "uses Kubernetes clusters to deploy your code!" +msgstr "" + diff --git a/locale/de/gitlab.po b/locale/de/gitlab.po index 5b33ed0a628..4a0ca1e7efb 100644 --- a/locale/de/gitlab.po +++ b/locale/de/gitlab.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: gitlab-ee\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-12-12 18:31+0000\n" -"PO-Revision-Date: 2018-01-05 04:41-0500\n" +"POT-Creation-Date: 2018-02-07 11:38-0600\n" +"PO-Revision-Date: 2018-02-12 04:00-0500\n" "Last-Translator: gitlab <mbartlett+crowdin@gitlab.com>\n" "Language-Team: German\n" "Language: de_DE\n" @@ -16,23 +16,41 @@ msgstr "" "X-Crowdin-Language: de\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" +msgid " and" +msgstr "" + msgid "%d commit" msgid_plural "%d commits" msgstr[0] "%d Commit" msgstr[1] "%d Commits" +msgid "%d commit behind" +msgid_plural "%d commits behind" +msgstr[0] "" +msgstr[1] "" + +msgid "%d issue" +msgid_plural "%d issues" +msgstr[0] "" +msgstr[1] "" + msgid "%d layer" msgid_plural "%d layers" msgstr[0] "" msgstr[1] "" +msgid "%d merge request" +msgid_plural "%d merge requests" +msgstr[0] "" +msgstr[1] "" + msgid "%s additional commit has been omitted to prevent performance issues." msgid_plural "%s additional commits have been omitted to prevent performance issues." msgstr[0] "%s zusätzlicher Commit wurde ausgelassen um Leistungsprobleme zu verhindern." msgstr[1] "%s zusätzliche Commits wurden ausgelassen um Leistungsprobleme zu verhindern." -msgid "%{commit_author_link} committed %{commit_timeago}" -msgstr "%{commit_author_link} hat %{commit_timeago} committet" +msgid "%{commit_author_link} authored %{commit_timeago}" +msgstr "" msgid "%{count} participant" msgid_plural "%{count} participants" @@ -45,9 +63,6 @@ msgstr "" msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt." msgstr "%{number_of_failures} von %{maximum_failures} Fehlschlägen. GitLab wird den Zugriff beim nächsten Versuch zulassen." -msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will block access for %{number_of_seconds} seconds." -msgstr "%{number_of_failures} von %{maximum_failures} Fehlschlägen. GitLab wird den Zugriff für %{number_of_seconds} Sekunden blockieren." - msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will not retry automatically. Reset storage information when the problem is resolved." msgstr "%{number_of_failures} von %{maximum_failures} Fehlschlägen. GitLab wird es nicht weiter versuchen. Setze die Speicherinformation nach Behebung des Problems zurück." @@ -121,24 +136,81 @@ msgstr "Lizenz hinzufügen" msgid "Add new directory" msgstr "Erstelle eine neues Verzeichnis" +msgid "Add todo" +msgstr "" + +msgid "AdminArea|Stop all jobs" +msgstr "" + +msgid "AdminArea|Stop all jobs?" +msgstr "" + +msgid "AdminArea|Stop jobs" +msgstr "" + +msgid "AdminArea|Stopping jobs failed" +msgstr "" + +msgid "AdminArea|You’re about to stop all jobs. This will halt all current jobs that are running." +msgstr "" + msgid "AdminHealthPageLink|health page" msgstr "" +msgid "Advanced" +msgstr "" + msgid "Advanced settings" msgstr "" msgid "All" msgstr "Alle" +msgid "All changes are committed" +msgstr "" + +msgid "Allows you to add and manage Kubernetes clusters." +msgstr "" + +msgid "An error occurred previewing the blob" +msgstr "" + msgid "An error occurred when toggling the notification subscription" msgstr "" msgid "An error occurred when updating the issue weight" msgstr "" +msgid "An error occurred while dismissing the feature highlight. Refresh the page and try dismissing again." +msgstr "" + +msgid "An error occurred while fetching markdown preview" +msgstr "" + msgid "An error occurred while fetching sidebar data" msgstr "" +msgid "An error occurred while getting projects" +msgstr "" + +msgid "An error occurred while loading filenames" +msgstr "" + +msgid "An error occurred while rendering KaTeX" +msgstr "" + +msgid "An error occurred while rendering preview broadcast message" +msgstr "" + +msgid "An error occurred while retrieving calendar activity" +msgstr "" + +msgid "An error occurred while retrieving diff" +msgstr "" + +msgid "An error occurred while validating username" +msgstr "" + msgid "An error occurred. Please try again." msgstr "" @@ -163,9 +235,6 @@ msgstr "Bist Du sicher, dass Du diesen Pipeline-Zeitplan löschen möchtest?" msgid "Are you sure you want to discard your changes?" msgstr "Bist Du sicher, dass Du alle Änderungen zurücksetzen willst?" -msgid "Are you sure you want to leave this group?" -msgstr "" - msgid "Are you sure you want to reset registration token?" msgstr "Bist Du sicher, dass Du den Registrierungstoken zurücksetzen willst?" @@ -178,6 +247,21 @@ msgstr "Bist Du sicher?" msgid "Artifacts" msgstr "" +msgid "Assign custom color like #FF0000" +msgstr "" + +msgid "Assign labels" +msgstr "" + +msgid "Assign milestone" +msgstr "" + +msgid "Assign to" +msgstr "" + +msgid "Assignee" +msgstr "" + msgid "Attach a file by drag & drop or %{upload_link}" msgstr "Datei mittels Drag & Drop oder %{upload_link} hinzufügen" @@ -193,13 +277,16 @@ msgstr "" msgid "Author" msgstr "" -msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly." +msgid "Authors: %{authors}" msgstr "" -msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly." +msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly." msgstr "" -msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly." +msgid "Auto Review Apps and Auto Deploy need a domain name and a %{kubernetes} to work correctly." +msgstr "" + +msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly." msgstr "" msgid "AutoDevOps|Auto DevOps (Beta)" @@ -223,6 +310,12 @@ msgstr "" msgid "Available" msgstr "" +msgid "Avatar will be removed. Are you sure?" +msgstr "" + +msgid "Average per day: %{average}" +msgstr "" + msgid "Billing" msgstr "" @@ -277,6 +370,9 @@ msgstr "" msgid "BillingPlans|per user" msgstr "" +msgid "Begin with the selected commit" +msgstr "" + msgid "Branch" msgid_plural "Branches" msgstr[0] "Zweig" @@ -405,8 +501,8 @@ msgstr "von" msgid "CI / CD" msgstr "CI / CD" -msgid "CI configuration" -msgstr "CI-Konfiguration" +msgid "CI/CD configuration" +msgstr "" msgid "CICD|Jobs" msgstr "" @@ -417,6 +513,9 @@ msgstr "Abbrechen" msgid "Cancel edit" msgstr "Bearbeitung abbrechen" +msgid "Cannot modify managed Kubernetes cluster" +msgstr "" + msgid "Change Weight" msgstr "" @@ -432,15 +531,24 @@ msgstr "Herauspicken" msgid "ChangeTypeAction|Revert" msgstr "Wiederherstellen " +msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes." +msgstr "" + msgid "Changelog" msgstr "Änderungsliste " +msgid "Changes are shown as if the <b>source</b> revision was being merged into the <b>target</b> revision." +msgstr "" + msgid "Charts" msgstr "Diagramme" msgid "Chat" msgstr "Chat" +msgid "Check interval" +msgstr "" + msgid "Checking %{text} availability…" msgstr "" @@ -453,7 +561,19 @@ msgstr "Diesen Commit herauspicken " msgid "Cherry-pick this merge request" msgstr "Diesen Merge Request herauspicken" -msgid "Choose which groups you wish to replicate to this secondary node. Leave blank to replicate all." +msgid "Choose File ..." +msgstr "" + +msgid "Choose a branch/tag (e.g. %{master}) or enter a commit (e.g. %{sha}) to see what's changed or to create a merge request." +msgstr "" + +msgid "Choose file..." +msgstr "" + +msgid "Choose which groups you wish to synchronize to this secondary node." +msgstr "" + +msgid "Choose which shards you wish to synchronize to this secondary node." msgstr "" msgid "CiStatusLabel|canceled" @@ -510,79 +630,91 @@ msgstr "übersprungen" msgid "CiStatus|running" msgstr "laufend" -msgid "CircuitBreakerApiLink|circuitbreaker api" +msgid "CiVariables|Input variable key" msgstr "" -msgid "Clone repository" +msgid "CiVariables|Input variable value" msgstr "" -msgid "Close" +msgid "CiVariables|Remove variable row" msgstr "" -msgid "Cluster" +msgid "CiVariable|* (All environments)" msgstr "" -msgid "ClusterIntegration|%{appList} was successfully installed on your cluster" +msgid "CiVariable|All environments" msgstr "" -msgid "ClusterIntegration|%{boldNotice} This will add some extra resources like a load balancer, which incur additional costs. See %{pricingLink}" +msgid "CiVariable|Create wildcard" msgstr "" -msgid "ClusterIntegration|API URL" +msgid "CiVariable|Error occured while saving variables" msgstr "" -msgid "ClusterIntegration|Active" +msgid "CiVariable|New environment" msgstr "" -msgid "ClusterIntegration|Add an existing cluster" +msgid "CiVariable|Protected" msgstr "" -msgid "ClusterIntegration|Add cluster" +msgid "CiVariable|Search environments" msgstr "" -msgid "ClusterIntegration|All" +msgid "CiVariable|Toggle protected" msgstr "" -msgid "ClusterIntegration|Applications" +msgid "CiVariable|Validation failed" msgstr "" -msgid "ClusterIntegration|CA Certificate" +msgid "CircuitBreakerApiLink|circuitbreaker api" msgstr "" -msgid "ClusterIntegration|Certificate Authority bundle (PEM format)" +msgid "Click to expand text" msgstr "" -msgid "ClusterIntegration|Choose how to set up cluster integration" +msgid "Clone repository" msgstr "" -msgid "ClusterIntegration|Cluster" +msgid "Close" msgstr "" -msgid "ClusterIntegration|Cluster details" +msgid "Closed" msgstr "" -msgid "ClusterIntegration|Cluster integration" +msgid "ClusterIntegration|%{appList} was successfully installed on your Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Cluster integration is disabled for this project." +msgid "ClusterIntegration|API URL" msgstr "" -msgid "ClusterIntegration|Cluster integration is enabled for this project." +msgid "ClusterIntegration|Add Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Cluster integration is enabled for this project. Disabling this integration will not affect your cluster, it will only temporarily turn off GitLab's connection to it." +msgid "ClusterIntegration|Add an existing Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Cluster is being created on Google Kubernetes Engine..." +msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration" +msgstr "" + +msgid "ClusterIntegration|Applications" +msgstr "" + +msgid "ClusterIntegration|Are you sure you want to remove this Kubernetes cluster's integration? This will not delete your actual Kubernetes cluster." +msgstr "" + +msgid "ClusterIntegration|CA Certificate" +msgstr "" + +msgid "ClusterIntegration|Certificate Authority bundle (PEM format)" msgstr "" -msgid "ClusterIntegration|Cluster name" +msgid "ClusterIntegration|Choose how to set up Kubernetes cluster integration" msgstr "" -msgid "ClusterIntegration|Cluster was successfully created on Google Kubernetes Engine. Refresh the page to see cluster's details" +msgid "ClusterIntegration|Choose which of your project's environments will use this Kubernetes cluster." msgstr "" -msgid "ClusterIntegration|Clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" +msgid "ClusterIntegration|Control how your Kubernetes cluster integrates with GitLab" msgstr "" msgid "ClusterIntegration|Copy API URL" @@ -591,37 +723,34 @@ msgstr "" msgid "ClusterIntegration|Copy CA Certificate" msgstr "" -msgid "ClusterIntegration|Copy Token" +msgid "ClusterIntegration|Copy Kubernetes cluster name" msgstr "" -msgid "ClusterIntegration|Copy cluster name" +msgid "ClusterIntegration|Copy Token" msgstr "" -msgid "ClusterIntegration|Create a new cluster on Google Engine right from GitLab" +msgid "ClusterIntegration|Create Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Create cluster" +msgid "ClusterIntegration|Create Kubernetes cluster on Google Kubernetes Engine" msgstr "" -msgid "ClusterIntegration|Create cluster on Google Kubernetes Engine" +msgid "ClusterIntegration|Create a new Kubernetes cluster on Google Kubernetes Engine right from GitLab" msgstr "" msgid "ClusterIntegration|Create on GKE" msgstr "" -msgid "ClusterIntegration|Enable cluster integration" -msgstr "" - msgid "ClusterIntegration|Enter the details for an existing Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Enter the details for your cluster" +msgid "ClusterIntegration|Enter the details for your Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Environment pattern" +msgid "ClusterIntegration|Environment scope" msgstr "" -msgid "ClusterIntegration|GKE pricing" +msgid "ClusterIntegration|GitLab Integration" msgstr "" msgid "ClusterIntegration|GitLab Runner" @@ -639,64 +768,94 @@ msgstr "" msgid "ClusterIntegration|Helm Tiller" msgstr "" -msgid "ClusterIntegration|Inactive" -msgstr "" - msgid "ClusterIntegration|Ingress" msgstr "" msgid "ClusterIntegration|Install" msgstr "" -msgid "ClusterIntegration|Install applications on your cluster. Read more about %{helpLink}" -msgstr "" - msgid "ClusterIntegration|Installed" msgstr "" msgid "ClusterIntegration|Installing" msgstr "" -msgid "ClusterIntegration|Integrate cluster automation" +msgid "ClusterIntegration|Integrate Kubernetes cluster automation" +msgstr "" + +msgid "ClusterIntegration|Integration status" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster details" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is disabled for this project." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project. Disabling this integration will not affect your Kubernetes cluster, it will only temporarily turn off GitLab's connection to it." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster is being created on Google Kubernetes Engine..." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster name" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters can be used to deploy applications and to provide Review Apps for this project" msgstr "" msgid "ClusterIntegration|Learn more about %{link_to_documentation}" msgstr "" -msgid "ClusterIntegration|Learn more about Clusters" +msgid "ClusterIntegration|Learn more about Kubernetes" msgstr "" -msgid "ClusterIntegration|Machine type" +msgid "ClusterIntegration|Learn more about environments" msgstr "" -msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create clusters" +msgid "ClusterIntegration|Machine type" msgstr "" -msgid "ClusterIntegration|Manage cluster integration on your GitLab project" +msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create Kubernetes clusters" msgstr "" -msgid "ClusterIntegration|Manage your cluster by visiting %{link_gke}" +msgid "ClusterIntegration|Manage" msgstr "" -msgid "ClusterIntegration|Multiple clusters are available in GitLab Entreprise Edition Premium and Ultimate" +msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}" msgstr "" -msgid "ClusterIntegration|Note:" +msgid "ClusterIntegration|More information" msgstr "" -msgid "ClusterIntegration|Number of nodes" +msgid "ClusterIntegration|Multiple Kubernetes clusters are available in GitLab Enterprise Edition Premium and Ultimate" msgstr "" -msgid "ClusterIntegration|Please enter access information for your cluster. If you need help, you can read our %{link_to_help_page} on clusters" +msgid "ClusterIntegration|Note:" msgstr "" -msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:" +msgid "ClusterIntegration|Number of nodes" msgstr "" -msgid "ClusterIntegration|Problem setting up the cluster" +msgid "ClusterIntegration|Please enter access information for your Kubernetes cluster. If you need help, you can read our %{link_to_help_page} on Kubernetes" msgstr "" -msgid "ClusterIntegration|Problem setting up the clusters list" +msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:" msgstr "" msgid "ClusterIntegration|Project ID" @@ -708,16 +867,19 @@ msgstr "" msgid "ClusterIntegration|Project namespace (optional, unique)" msgstr "" -msgid "ClusterIntegration|Read our %{link_to_help_page} on cluster integration." +msgid "ClusterIntegration|Prometheus" +msgstr "" + +msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration." msgstr "" -msgid "ClusterIntegration|Remove cluster integration" +msgid "ClusterIntegration|Remove Kubernetes cluster integration" msgstr "" msgid "ClusterIntegration|Remove integration" msgstr "" -msgid "ClusterIntegration|Removing cluster integration will remove the cluster configuration you have added to this project. It will not delete your cluster on Google Kubernetes Engine." +msgid "ClusterIntegration|Remove this Kubernetes cluster's configuration from this project. This will not delete your actual Kubernetes cluster." msgstr "" msgid "ClusterIntegration|Request to begin installing failed" @@ -726,7 +888,7 @@ msgstr "" msgid "ClusterIntegration|Save changes" msgstr "" -msgid "ClusterIntegration|See and edit the details for your cluster" +msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster" msgstr "" msgid "ClusterIntegration|See machine types" @@ -747,25 +909,25 @@ msgstr "" msgid "ClusterIntegration|Something went wrong on our end." msgstr "" -msgid "ClusterIntegration|Something went wrong while creating your cluster on Google Kubernetes Engine" +msgid "ClusterIntegration|Something went wrong while creating your Kubernetes cluster on Google Kubernetes Engine" msgstr "" msgid "ClusterIntegration|Something went wrong while installing %{title}" msgstr "" -msgid "ClusterIntegration|There are no clusters to show" +msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below" msgstr "" -msgid "ClusterIntegration|This account must have permissions to create a cluster in the %{link_to_container_project} specified below" +msgid "ClusterIntegration|Toggle Kubernetes Cluster" msgstr "" -msgid "ClusterIntegration|Toggle Cluster" +msgid "ClusterIntegration|Toggle Kubernetes cluster" msgstr "" msgid "ClusterIntegration|Token" msgstr "" -msgid "ClusterIntegration|With a cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." +msgid "ClusterIntegration|With a Kubernetes cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." msgstr "" msgid "ClusterIntegration|Your account must have %{link_to_kubernetes_engine}" @@ -777,7 +939,7 @@ msgstr "" msgid "ClusterIntegration|access to Google Kubernetes Engine" msgstr "" -msgid "ClusterIntegration|cluster" +msgid "ClusterIntegration|check the pricing here" msgstr "" msgid "ClusterIntegration|documentation" @@ -795,6 +957,9 @@ msgstr "" msgid "ClusterIntegration|properly configured" msgstr "" +msgid "Collapse" +msgstr "" + msgid "Comments" msgstr "Kommentare" @@ -812,6 +977,9 @@ msgstr "Dauer der Commits in Minuten für die letzten 30 Commits" msgid "Commit message" msgstr "Commit Nachricht" +msgid "Commit statistics for %{ref} %{start_time} - %{end_time}" +msgstr "" + msgid "CommitBoxTitle|Commit" msgstr "Commit" @@ -824,15 +992,57 @@ msgstr "Commits" msgid "Commits feed" msgstr "Liste der Commits" +msgid "Commits per day hour (UTC)" +msgstr "" + +msgid "Commits per day of month" +msgstr "" + +msgid "Commits per weekday" +msgstr "" + +msgid "Commits|An error occurred while fetching merge requests data." +msgstr "" + +msgid "Commits|Commit: %{commitText}" +msgstr "" + msgid "Commits|History" msgstr "Verlauf" +msgid "Commits|No related merge requests found" +msgstr "" + msgid "Committed by" msgstr "Committed von" msgid "Compare" msgstr "Vergleichen" +msgid "Compare Git revisions" +msgstr "" + +msgid "Compare Revisions" +msgstr "" + +msgid "CompareBranches|%{source_branch} and %{target_branch} are the same." +msgstr "" + +msgid "CompareBranches|Compare" +msgstr "" + +msgid "CompareBranches|Source" +msgstr "" + +msgid "CompareBranches|Target" +msgstr "" + +msgid "CompareBranches|There isn't anything to compare." +msgstr "" + +msgid "Confidentiality" +msgstr "" + msgid "Container Registry" msgstr "" @@ -884,6 +1094,9 @@ msgstr "Mitarbeitsanleitung" msgid "Contributors" msgstr "Mitarbeiter" +msgid "ContributorsPage|%{startDate} – %{endDate}" +msgstr "" + msgid "ContributorsPage|Building repository graph." msgstr "" @@ -905,9 +1118,18 @@ msgstr "" msgid "Copy URL to clipboard" msgstr "Kopiere URL in die Zwischenablage" +msgid "Copy branch name to clipboard" +msgstr "" + msgid "Copy commit SHA to clipboard" msgstr "Kopiere Commit SHA in die Zwischenablage" +msgid "Copy reference to clipboard" +msgstr "" + +msgid "Create" +msgstr "" + msgid "Create New Directory" msgstr "Erstelle neues Verzeichnis" @@ -926,6 +1148,9 @@ msgstr "" msgid "Create file" msgstr "" +msgid "Create lists from labels. Issues with that label appear in that list." +msgstr "" + msgid "Create merge request" msgstr "Erstelle Merge Request" @@ -938,6 +1163,9 @@ msgstr "" msgid "Create new file" msgstr "" +msgid "Create new label" +msgstr "" + msgid "Create new..." msgstr "Erstelle neues..." @@ -959,6 +1187,9 @@ msgstr "Cron Zeitzone" msgid "Cron syntax" msgstr "Cron Syntax" +msgid "Current node" +msgstr "" + msgid "Custom notification events" msgstr "Individuelle Benachrichtigungsereignisse" @@ -968,9 +1199,6 @@ msgstr "Individuelle Benachrichtigungsstufen sind identisch mit den Beteiligungs msgid "Cycle Analytics" msgstr "Arbeitsablaufsanalysen" -msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project." -msgstr "Arbeitsablaufsanalysen verschaffen einen Ãœberblick, welche Zeit Dein Projekt von der Idee zur Realisierung benötigt." - msgid "CycleAnalyticsStage|Code" msgstr "Entwicklung" @@ -1027,12 +1255,21 @@ msgstr "" msgid "Details" msgstr "Details" +msgid "Diffs|No file name available" +msgstr "" + msgid "Directory name" msgstr "Verzeichnisname" +msgid "Disable" +msgstr "" + msgid "Discard changes" msgstr "Änderungen verwerfen" +msgid "Discover GitLab Geo." +msgstr "" + msgid "Dismiss Cycle Analytics introduction box" msgstr "" @@ -1069,15 +1306,24 @@ msgstr "Unterschiede" msgid "DownloadSource|Download" msgstr "Herunterladen" +msgid "Due date" +msgstr "" + msgid "Edit" msgstr "Bearbeiten" msgid "Edit Pipeline Schedule %{id}" msgstr "Pipeline Zeitplan bearbeiten %{id}" +msgid "Edit files in the editor and commit changes here" +msgstr "" + msgid "Emails" msgstr "E-Mails" +msgid "Enable" +msgstr "" + msgid "Environments|An error occurred while fetching the environments." msgstr "" @@ -1096,9 +1342,6 @@ msgstr "" msgid "Environments|Environments" msgstr "" -msgid "Environments|Environments are places where code gets deployed, such as staging or production." -msgstr "" - msgid "Environments|Job" msgstr "" @@ -1141,9 +1384,33 @@ msgstr "" msgid "Error creating epic" msgstr "" +msgid "Error fetching contributors data." +msgstr "" + +msgid "Error fetching labels." +msgstr "" + +msgid "Error fetching network graph." +msgstr "" + +msgid "Error fetching refs" +msgstr "" + +msgid "Error fetching usage ping data." +msgstr "" + msgid "Error occurred when toggling the notification subscription" msgstr "" +msgid "Error saving label update." +msgstr "" + +msgid "Error updating status for all todos." +msgstr "" + +msgid "Error updating todo status." +msgstr "" + msgid "EventFilterBy|Filter by all" msgstr "Filtere alle" @@ -1171,6 +1438,9 @@ msgstr "Monatlich (am Ersten um 4:00 Uhr)" msgid "Every week (Sundays at 4:00am)" msgstr "Wöchentlich (Sonntags um 4:00 Uhr)" +msgid "Expand" +msgstr "" + msgid "Explore projects" msgstr "" @@ -1189,6 +1459,9 @@ msgstr "" msgid "February" msgstr "" +msgid "Fields on this page are now uneditable, you can configure" +msgstr "" + msgid "File name" msgstr "" @@ -1233,10 +1506,10 @@ msgstr "Vom Umsetzen des Merge Request bis zur Bereitstellung auf dem Produktivs msgid "GPG Keys" msgstr "" -msgid "Geo Nodes" +msgid "Generate a default set of labels" msgstr "" -msgid "GeoNodeSyncStatus|Failed" +msgid "Geo Nodes" msgstr "" msgid "GeoNodeSyncStatus|Node is failing or broken." @@ -1245,16 +1518,100 @@ msgstr "" msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage." msgstr "" -msgid "GeoNodeSyncStatus|Out of sync" +msgid "GeoNodes|Database replication lag:" +msgstr "" + +msgid "GeoNodes|Disabling a node stops the sync process. Are you sure?" +msgstr "" + +msgid "GeoNodes|Does not match the primary storage configuration" +msgstr "" + +msgid "GeoNodes|Failed" +msgstr "" + +msgid "GeoNodes|Full" +msgstr "" + +msgid "GeoNodes|GitLab version does not match the primary node version" +msgstr "" + +msgid "GeoNodes|GitLab version:" +msgstr "" + +msgid "GeoNodes|Health status:" +msgstr "" + +msgid "GeoNodes|Last event ID processed by cursor:" +msgstr "" + +msgid "GeoNodes|Last event ID seen from primary:" +msgstr "" + +msgid "GeoNodes|Loading nodes" +msgstr "" + +msgid "GeoNodes|Local Attachments:" +msgstr "" + +msgid "GeoNodes|Local LFS objects:" +msgstr "" + +msgid "GeoNodes|Local job artifacts:" +msgstr "" + +msgid "GeoNodes|New node" +msgstr "" + +msgid "GeoNodes|Out of sync" msgstr "" -msgid "GeoNodeSyncStatus|Synced" +msgid "GeoNodes|Replication slot WAL:" +msgstr "" + +msgid "GeoNodes|Replication slots:" +msgstr "" + +msgid "GeoNodes|Repositories:" +msgstr "" + +msgid "GeoNodes|Selective" +msgstr "" + +msgid "GeoNodes|Storage config:" +msgstr "" + +msgid "GeoNodes|Sync settings:" +msgstr "" + +msgid "GeoNodes|Synced" +msgstr "" + +msgid "GeoNodes|Unused slots" +msgstr "" + +msgid "GeoNodes|Used slots" +msgstr "" + +msgid "GeoNodes|Wikis:" +msgstr "" + +msgid "GeoNodes|You have configured Geo nodes using an insecure HTTP connection. We recommend the use of HTTPS." +msgstr "" + +msgid "Geo|All projects" msgstr "" msgid "Geo|File sync capacity" msgstr "" -msgid "Geo|Groups to replicate" +msgid "Geo|Groups to synchronize" +msgstr "" + +msgid "Geo|Projects in certain groups" +msgstr "" + +msgid "Geo|Projects in certain storage shards" msgstr "" msgid "Geo|Repository sync capacity" @@ -1263,12 +1620,24 @@ msgstr "" msgid "Geo|Select groups to replicate." msgstr "" +msgid "Geo|Shards to synchronize" +msgstr "" + +msgid "Git revision" +msgstr "" + msgid "Git storage health information has been reset" msgstr "Informationen über den Speicherzustand von Gitlab wurden zurückgesetzt." +msgid "Git version" +msgstr "" + msgid "GitLab Runner section" msgstr "GitLab Runner Bereich" +msgid "Gitaly Servers" +msgstr "" + msgid "Go to your fork" msgstr "Gehe zu Deinem Ableger" @@ -1278,6 +1647,9 @@ msgstr "Ableger" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it!" +msgstr "" + msgid "GroupSettings|Prevent sharing a project within %{group} with other groups" msgstr "" @@ -1314,7 +1686,7 @@ msgstr "" msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group." msgstr "" -msgid "GroupsTree|Are you sure you want to leave the \"${this.group.fullName}\" group?" +msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?" msgstr "" msgid "GroupsTree|Create a project in this group." @@ -1365,6 +1737,11 @@ msgstr "Keine Probleme erkannt" msgid "HealthCheck|Unhealthy" msgstr "Problematisch" +msgid "Hide value" +msgid_plural "Hide values" +msgstr[0] "" +msgstr[1] "" + msgid "History" msgstr "" @@ -1391,6 +1768,12 @@ msgid_plural "Instances" msgstr[0] "" msgstr[1] "" +msgid "Instance does not support multiple Kubernetes clusters" +msgstr "" + +msgid "Interested parties can even contribute by pushing commits if they want to." +msgstr "" + msgid "Internal - The group and any internal projects can be viewed by any logged in user." msgstr "" @@ -1418,6 +1801,9 @@ msgstr "" msgid "Issues" msgstr "" +msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable." +msgstr "" + msgid "Jan" msgstr "" @@ -1436,6 +1822,27 @@ msgstr "" msgid "June" msgstr "" +msgid "Kubernetes" +msgstr "" + +msgid "Kubernetes Cluster" +msgstr "" + +msgid "Kubernetes cluster creation time exceeds timeout; %{timeout}" +msgstr "" + +msgid "Kubernetes cluster integration was not removed." +msgstr "" + +msgid "Kubernetes cluster integration was successfully removed." +msgstr "" + +msgid "Kubernetes cluster was successfully updated." +msgstr "" + +msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page" +msgstr "" + msgid "LFSStatus|Disabled" msgstr "Deaktiviert" @@ -1445,6 +1852,9 @@ msgstr "Aktiviert" msgid "Labels" msgstr "" +msgid "Labels can be applied to issues and merge requests to categorize them." +msgstr "" + msgid "Last %d day" msgid_plural "Last %d days" msgstr[0] "Letzten %d Tag" @@ -1474,6 +1884,9 @@ msgstr "Du übertrugst an" msgid "LastPushEvent|at" msgstr "am" +msgid "Learn more" +msgstr "" + msgid "Learn more in the" msgstr "Erfahre mehr in den" @@ -1492,14 +1905,18 @@ msgstr "Verlasse das Projekt" msgid "License" msgstr "" -msgid "Limited to showing %d event at most" -msgid_plural "Limited to showing %d events at most" -msgstr[0] "Limitiere die Anzeige auf höchstens %d Ereignis" -msgstr[1] "Limitiere die Anzeige auf höchstens %d Ereignisse" +msgid "Loading the GitLab IDE..." +msgstr "" msgid "Lock" msgstr "" +msgid "Lock %{issuableDisplayName}" +msgstr "" + +msgid "Lock this %{issuableDisplayName}? Only <strong>project members</strong> will be able to comment." +msgstr "" + msgid "Locked" msgstr "" @@ -1509,12 +1926,21 @@ msgstr "" msgid "Login" msgstr "" +msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos." +msgstr "" + +msgid "Manage labels" +msgstr "" + msgid "Mar" msgstr "" msgid "March" msgstr "" +msgid "Mark done" +msgstr "" + msgid "Maximum git storage failures" msgstr "" @@ -1527,6 +1953,9 @@ msgstr "Median" msgid "Members" msgstr "Mitglieder" +msgid "Merge Request" +msgstr "" + msgid "Merge Requests" msgstr "" @@ -1536,9 +1965,30 @@ msgstr "Ereignisse zusammenführen" msgid "Merge request" msgstr "" +msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others" +msgstr "" + +msgid "Merged" +msgstr "" + msgid "Messages" msgstr "Nachrichten" +msgid "Milestone" +msgstr "" + +msgid "Milestones|Delete milestone" +msgstr "" + +msgid "Milestones|Delete milestone %{milestoneTitle}?" +msgstr "" + +msgid "Milestones|Failed to delete milestone %{milestoneTitle}" +msgstr "" + +msgid "Milestones|Milestone %{milestoneTitle} was not found" +msgstr "" + msgid "MissingSSHKeyWarningLink|add an SSH key" msgstr "einen SSH Schlüssel hinzufügst" @@ -1548,10 +1998,16 @@ msgstr "Ãœberwachung" msgid "More information is available|here" msgstr "hier" +msgid "Move" +msgstr "" + +msgid "Move issue" +msgstr "" + msgid "Multiple issue boards" msgstr "" -msgid "New Cluster" +msgid "Name new label" msgstr "" msgid "New Issue" @@ -1559,6 +2015,12 @@ msgid_plural "New Issues" msgstr[0] "Neues Ticket" msgstr[1] "Neue Tickets" +msgid "New Kubernetes Cluster" +msgstr "" + +msgid "New Kubernetes cluster" +msgstr "" + msgid "New Pipeline Schedule" msgstr "Neuer Pipeline Zeitplan" @@ -1583,6 +2045,9 @@ msgstr "" msgid "New issue" msgstr "Neues Ticket" +msgid "New label" +msgstr "" + msgid "New merge request" msgstr "Neuer Merge Request" @@ -1601,7 +2066,22 @@ msgstr "" msgid "New tag" msgstr "Neuer Tag" -msgid "No container images stored for this project. Add one by following the instructions above." +msgid "No assignee" +msgstr "" + +msgid "No changes" +msgstr "" + +msgid "No connection could be made to a Gitaly Server, please check your logs!" +msgstr "" + +msgid "No due date" +msgstr "" + +msgid "No estimate or time spent" +msgstr "" + +msgid "No file chosen" msgstr "" msgid "No repository" @@ -1616,9 +2096,15 @@ msgstr "" msgid "None" msgstr "" +msgid "Not allowed to merge" +msgstr "" + msgid "Not available" msgstr "Nicht verfügbar" +msgid "Not confidential" +msgstr "" + msgid "Not enough data" msgstr "Nicht genügend Daten" @@ -1679,6 +2165,12 @@ msgstr "Beobachten" msgid "Notifications" msgstr "Benachrichtigungen" +msgid "Notifications off" +msgstr "" + +msgid "Notifications on" +msgstr "" + msgid "Nov" msgstr "" @@ -1688,7 +2180,7 @@ msgstr "" msgid "Number of access attempts" msgstr "" -msgid "Number of failures before backing off" +msgid "OK" msgstr "" msgid "Oct" @@ -1703,6 +2195,9 @@ msgstr "Filter" msgid "Only project members can comment." msgstr "" +msgid "Open" +msgstr "" + msgid "Opened" msgstr "" @@ -1736,9 +2231,6 @@ msgstr "" msgid "Password" msgstr "Passwort" -msgid "People without permission will never get a notification and won\\'t be able to comment." -msgstr "" - msgid "Pipeline" msgstr "" @@ -1781,12 +2273,6 @@ msgstr "Alle" msgid "PipelineSchedules|Inactive" msgstr "Inaktiv" -msgid "PipelineSchedules|Input variable key" -msgstr "Schlüssel der Eingangsvariable" - -msgid "PipelineSchedules|Input variable value" -msgstr "Wert der Eingangsvariable" - msgid "PipelineSchedules|Next Run" msgstr "Nächste Durchführung" @@ -1796,9 +2282,6 @@ msgstr "Nichts" msgid "PipelineSchedules|Provide a short description for this pipeline" msgstr "Beschreibe diese Pipeline" -msgid "PipelineSchedules|Remove variable row" -msgstr "Entferne Variablenreihe" - msgid "PipelineSchedules|Take ownership" msgstr "Eigentümer werden" @@ -1826,6 +2309,12 @@ msgstr "" msgid "Pipelines for last year" msgstr "Pipelines des letzten Jahres" +msgid "Pipelines|Build with confidence" +msgstr "" + +msgid "Pipelines|Get started with Pipelines" +msgstr "" + msgid "Pipeline|all" msgstr "Alle" @@ -1838,12 +2327,21 @@ msgstr "mit Stage" msgid "Pipeline|with stages" msgstr "mit Stages" +msgid "Play" +msgstr "" + +msgid "Please <a href=%{link_to_billing} target=\"_blank\" rel=\"noopener noreferrer\">enable billing for one of your projects to be able to create a Kubernetes cluster</a>, then try again." +msgstr "" + msgid "Please solve the reCAPTCHA" msgstr "" msgid "Preferences" msgstr "" +msgid "Primary" +msgstr "" + msgid "Private - Project access must be granted explicitly to each user." msgstr "" @@ -1889,6 +2387,9 @@ msgstr "" msgid "Profiles|your account" msgstr "" +msgid "Programming languages used in this repository" +msgstr "" + msgid "Project '%{project_name}' is in the process of being deleted." msgstr "" @@ -1904,6 +2405,15 @@ msgstr "Das Projekt '%{project_name}' wurde erfolgreich aktualisiert." msgid "Project access must be granted explicitly to each user." msgstr "Jedem Nutzer muss explizit der Zugriff auf das Projekt gewährt werden." +msgid "Project avatar" +msgstr "" + +msgid "Project avatar in repository: %{link}" +msgstr "" + +msgid "Project cache successfully reset." +msgstr "" + msgid "Project details" msgstr "Projektdetails" @@ -1922,6 +2432,21 @@ msgstr "Export des Projektes gestartet. Ein Link zum herunterladen wir Dir per E msgid "ProjectActivityRSS|Subscribe" msgstr "Abonnieren" +msgid "ProjectCreationLevel|Allowed to create projects" +msgstr "" + +msgid "ProjectCreationLevel|Default project creation protection" +msgstr "" + +msgid "ProjectCreationLevel|Developers + Masters" +msgstr "" + +msgid "ProjectCreationLevel|Masters" +msgstr "" + +msgid "ProjectCreationLevel|No one" +msgstr "" + msgid "ProjectFeature|Disabled" msgstr "Dekativiert" @@ -1946,15 +2471,9 @@ msgstr "Diagramm" msgid "ProjectSettings|Contact an admin to change this setting." msgstr "" -msgid "ProjectSettings|Immediately run a pipeline on the default branch" -msgstr "" - msgid "ProjectSettings|Only signed commits can be pushed to this repository." msgstr "" -msgid "ProjectSettings|Problem setting up the CI/CD settings JavaScript" -msgstr "" - msgid "ProjectSettings|This setting is applied on the server level and can be overridden by an admin." msgstr "" @@ -1977,7 +2496,7 @@ msgid "ProjectsDropdown|Loading projects" msgstr "" msgid "ProjectsDropdown|Projects you visit often will appear here" -msgstr "ProjectsDropdown | Projekte, die Sie häufig besuchen, werden hier angezeigt" +msgstr "Projekte, die du häufig besuchst, werden hier angezeigt" msgid "ProjectsDropdown|Search your projects" msgstr "" @@ -2024,6 +2543,9 @@ msgstr "" msgid "PrometheusService|View environments" msgstr "" +msgid "Protip:" +msgstr "" + msgid "Public - The group and any public projects can be viewed without any authentication." msgstr "" @@ -2039,6 +2561,9 @@ msgstr "Ãœbertragungsereignisse" msgid "PushRule|Committer restriction" msgstr "" +msgid "Quick actions can be used in the issues description and comment boxes." +msgstr "" + msgid "Read more" msgstr "Mehr lesen" @@ -2051,6 +2576,12 @@ msgstr "Branches" msgid "RefSwitcher|Tags" msgstr "Tags" +msgid "Reference:" +msgstr "" + +msgid "Register / Sign In" +msgstr "" + msgid "Registry" msgstr "" @@ -2075,9 +2606,18 @@ msgstr "Zugehörige umgesetzte Merge Requests" msgid "Remind later" msgstr "Später erinnern" +msgid "Remove" +msgstr "" + +msgid "Remove avatar" +msgstr "" + msgid "Remove project" msgstr "Projekt entfernen" +msgid "Repair authentication" +msgstr "" + msgid "Repository" msgstr "" @@ -2093,6 +2633,11 @@ msgstr "Zugriffstoken für Systemzustand zurücksetzen" msgid "Reset runners registration token" msgstr "Registrierungstoken für Runner zurücksetzen" +msgid "Reveal value" +msgid_plural "Reveal values" +msgstr[0] "" +msgstr[1] "" + msgid "Revert this commit" msgstr "Commit zurücksetzen" @@ -2102,15 +2647,15 @@ msgstr "Merge Request zurücksetzen" msgid "SSH Keys" msgstr "SSH-Schlüssel" -msgid "Save" -msgstr "" - msgid "Save changes" msgstr "" msgid "Save pipeline schedule" msgstr "Zeitplan der Pipeline speichern" +msgid "Save variables" +msgstr "" + msgid "Schedule a new pipeline" msgstr "Plane eine neue Pipeline" @@ -2126,38 +2671,59 @@ msgstr "" msgid "Search branches and tags" msgstr "Suche nach Branches und Tags" -msgid "Seconds before reseting failure information" +msgid "Search milestones" +msgstr "" + +msgid "Search project" msgstr "" -msgid "Seconds to wait after a storage failure" +msgid "Search users" +msgstr "" + +msgid "Seconds before reseting failure information" msgstr "" msgid "Seconds to wait for a storage access attempt" msgstr "" +msgid "Secret variables" +msgstr "" + msgid "Select Archive Format" msgstr "Archivierungsformat auswählen" msgid "Select a timezone" msgstr "Zeitzone auswählen" +msgid "Select assignee" +msgstr "" + +msgid "Select branch/tag" +msgstr "" + msgid "Select target branch" msgstr "Zielbranch auswählen" +msgid "Selective synchronization" +msgstr "" + msgid "Sep" msgstr "" msgid "September" msgstr "" +msgid "Server version" +msgstr "" + msgid "Service Templates" msgstr "" msgid "Set a password on your account to pull or push via %{protocol}." msgstr "Lege ein Passwort für dein Konto fest, um mittels %{protocol} zu übertragen (push) oder abzurufen (pull)." -msgid "Set up CI" -msgstr "CI einrichten" +msgid "Set up CI/CD" +msgstr "" msgid "Set up Koding" msgstr "Koding einrichten" @@ -2171,6 +2737,15 @@ msgstr "ein Passwort festlegst" msgid "Settings" msgstr "Einstellungen" +msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero." +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset pipeline minutes" +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset used pipeline minutes" +msgstr "" + msgid "Show parent pages" msgstr "" @@ -2185,9 +2760,6 @@ msgstr[1] "Zeige %d Ereignisse" msgid "Sidebar|Change weight" msgstr "" -msgid "Sidebar|Edit" -msgstr "" - msgid "Sidebar|No" msgstr "" @@ -2200,18 +2772,30 @@ msgstr "" msgid "Snippets" msgstr "" +msgid "Something went wrong on our end" +msgstr "" + msgid "Something went wrong on our end." msgstr "" +msgid "Something went wrong trying to change the confidentiality of this issue" +msgstr "" + msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}" msgstr "" +msgid "Something went wrong when toggling the button" +msgstr "" + msgid "Something went wrong while fetching the projects." msgstr "" msgid "Something went wrong while fetching the registry list." msgstr "" +msgid "Something went wrong. Please try again." +msgstr "" + msgid "Sort by" msgstr "" @@ -2341,10 +2925,10 @@ msgstr "Starte den Runner!" msgid "Stopped" msgstr "" -msgid "Subgroups" +msgid "Storage" msgstr "" -msgid "Subscribe" +msgid "Subgroups" msgstr "" msgid "Switch branch/tag" @@ -2442,7 +3026,10 @@ msgstr "" msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project." msgstr "" -msgid "The circuitbreaker backoff threshold should be lower than the failure count threshold" +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project" +msgstr "" + +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project." msgstr "" msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request." @@ -2457,10 +3044,10 @@ msgstr "Die Beziehung des Ablegers wurde entfernt." msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage." msgstr "Die Ticketphase stellt die Zeit vom Anlegen eines Tickets bis zum Zuweisen eines Meilensteins oder Hinzufügen zur Aufgabentafel dar. Erstelle einen Ticket, damit dessen Daten hier erscheinen." -msgid "The number of attempts GitLab will make to access a storage." +msgid "The maximum file size allowed is 200KB." msgstr "" -msgid "The number of failures after which GitLab will start temporarily disabling access to a storage shard on a host" +msgid "The number of attempts GitLab will make to access a storage." msgstr "" msgid "The number of failures of after which GitLab will completely prevent access to the storage. The number of failures can be reset in the admin interface: %{link_to_health_page} or using the %{api_documentation_link}." @@ -2469,9 +3056,6 @@ msgstr "" msgid "The phase of the development lifecycle." msgstr "Die Phase des Entwicklungslebenszyklus." -msgid "The pipelines schedule runs pipelines in the future, repeatedly, for specific branches or tags. Those scheduled pipelines will inherit limited project access based on their associated user." -msgstr "Die Pipelinezeitpläne starten Pipelines in der Zukunft, wiederholend, für bestimmte Branches oder Tags. Diese geplanten Pipelines haben denselben begrenzten Zugriff auf das Projekt, wie der zugeordnete Nutzer." - msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit." msgstr "Die Planungsphase stellt die Zeit von der vorherigen Phase bis zum Ãœbertragen des ersten Commits dar. Sobald Du den ersten Commit überträgst, werden dessen Daten hier erscheinen." @@ -2502,19 +3086,46 @@ msgstr "" msgid "The time in seconds GitLab will try to access storage. After this time a timeout error will be raised." msgstr "" +msgid "The time in seconds between storage checks. When a previous check did complete yet, GitLab will skip a check." +msgstr "" + msgid "The time taken by each data entry gathered by that stage." msgstr "Zeit, die für das jeweilige Ereignis in der Phase ermittelt wurde." msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6." msgstr "Der mittlere aller erfassten Werte. Zum Beispiel ist für 3, 5, 9 der Median 5. Bei 3, 5, 7, 8 ist der Median (5+7)/2 = 6." +msgid "There are no issues to show" +msgstr "" + +msgid "There are no merge requests to show" +msgstr "" + msgid "There are problems accessing Git storage: " msgstr "Es gibt ein Problem beim Zugriff auf den Gitspeicher:" +msgid "There was an error loading users activity calendar." +msgstr "" + +msgid "There was an error saving your notification settings." +msgstr "" + +msgid "There was an error subscribing to this label." +msgstr "" + +msgid "There was an error when reseting email token." +msgstr "" + +msgid "There was an error when subscribing to this label." +msgstr "" + +msgid "There was an error when unsubscribing from this label." +msgstr "" + msgid "This board\\'s scope is reduced" msgstr "" -msgid "This branch has changed since you started editing. Would you like to create a new branch?" +msgid "This directory" msgstr "" msgid "This is a confidential issue." @@ -2523,18 +3134,45 @@ msgstr "" msgid "This is the author's first Merge Request to this project." msgstr "" +msgid "This issue is confidential" +msgstr "" + msgid "This issue is confidential and locked." msgstr "" msgid "This issue is locked." msgstr "" +msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments" +msgstr "" + +msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered" +msgstr "" + +msgid "This job has not been triggered yet" +msgstr "" + +msgid "This job has not started yet" +msgstr "" + +msgid "This job is in pending state and is waiting to be picked by a runner" +msgstr "" + +msgid "This job requires a manual action" +msgstr "" + msgid "This means you can not push code until you create an empty repository or import existing one." msgstr "Dies bedeutet, dass Du keinen Code übertragen kannst, bevor Du kein leeres Repositorium erstellt oder ein Existierendes importiert hast." msgid "This merge request is locked." msgstr "" +msgid "This project" +msgstr "" + +msgid "This repository" +msgstr "" + msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here." msgstr "" @@ -2547,9 +3185,21 @@ msgstr "Zeit bis die Implementierung für ein Ticket beginnt" msgid "Time between merge request creation and merge/close" msgstr "Zeit zwischen einem Merge Request und dessen Umsetzung / Schließung" +msgid "Time tracking" +msgstr "" + msgid "Time until first merge request" msgstr "Zeit bis zum ersten Merge Request" +msgid "TimeTrackingEstimated|Est" +msgstr "" + +msgid "TimeTracking|Estimated:" +msgstr "" + +msgid "TimeTracking|Spent" +msgstr "" + msgid "Timeago|%s days ago" msgstr "vor %s Tagen" @@ -2689,6 +3339,18 @@ msgstr "Sek." msgid "Title" msgstr "" +msgid "Todo" +msgstr "" + +msgid "Toggle sidebar" +msgstr "" + +msgid "ToggleButton|Toggle Status: OFF" +msgstr "" + +msgid "ToggleButton|Toggle Status: ON" +msgstr "" + msgid "Total Time" msgstr "Gesamtzeit" @@ -2704,19 +3366,40 @@ msgstr "" msgid "Track groups of issues that share a theme, across projects and milestones" msgstr "" +msgid "Total: %{total}" +msgstr "" + +msgid "Track time with quick actions" +msgstr "" + +msgid "Trigger this manual action" +msgstr "" + msgid "Turn on Service Desk" msgstr "" +msgid "Type %{value} to confirm:" +msgstr "" + +msgid "Unable to reset project cache." +msgstr "" + +msgid "Unknown" +msgstr "" + msgid "Unlock" msgstr "" +msgid "Unlock this %{issuableDisplayName}? <strong>Everyone</strong> will be able to comment." +msgstr "" + msgid "Unlocked" msgstr "" msgid "Unstar" msgstr "Entfavorisieren" -msgid "Unsubscribe" +msgid "Up to date" msgstr "" msgid "Upgrade your plan to activate Advanced Global Search." @@ -2740,6 +3423,9 @@ msgstr "Eine Neue Datei hochladen" msgid "Upload file" msgstr "Eine Datei hochladen" +msgid "Upload new avatar" +msgstr "" + msgid "UploadLink|click to upload" msgstr "Zum Upload klicken" @@ -2752,9 +3438,15 @@ msgstr "Benutze den folgenden Registrierungstoken während des Setups:" msgid "Use your global notification setting" msgstr "Benutze Deine globalen Benachrichtigungseinstellungen" +msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want." +msgstr "" + msgid "View file @ " msgstr "" +msgid "View labels" +msgstr "" + msgid "View open merge request" msgstr "Zeige offene Merge Requests." @@ -2776,6 +3468,9 @@ msgstr "Unbekannt" msgid "Want to see the data? Please ask an administrator for access." msgstr "Du möchtest diese Daten sehen? Bitte frage einen Administrator nach dem Zugang." +msgid "We could not verify that one of your projects on GCP has billing enabled. Please try again." +msgstr "" + msgid "We don't have enough data to show this stage." msgstr "Es liegen nicht genügend Daten vor, um diese Phase anzuzeigen." @@ -2788,9 +3483,6 @@ msgstr "" msgid "Weight" msgstr "" -msgid "When access to a storage fails. GitLab will prevent access to the storage for the time specified here. This allows the filesystem to recover. Repositories on failing shards are temporarly unavailable" -msgstr "" - msgid "Wiki" msgstr "Wiki" @@ -2809,6 +3501,12 @@ msgstr "" msgid "WikiClone|Start Gollum and edit locally" msgstr "" +msgid "WikiEditPageTip|Tip: You can move this page by adding the path to the beginning of the title." +msgstr "" + +msgid "WikiEdit|There is already a page with the same title in that path." +msgstr "" + msgid "WikiEmptyPageError|You are not allowed to create wiki pages" msgstr "" @@ -2911,9 +3609,21 @@ msgstr "Du bist dabei, die Beziehung des Ablegers zum Ursprungsprojekt %{forked_ msgid "You are going to transfer %{project_name_with_namespace} to another owner. Are you ABSOLUTELY sure?" msgstr "Du bist dabei %{project_name_with_namespace} einem andere Besitzer zu übergeben. Bist Du dir WIRKLICH sicher?" +msgid "You can also star a label to make it a priority label." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + msgid "You can only add files when you are on a branch" msgstr "Du kannst Dateien nur hinzufügen, wenn Du dich auf einem Branch befindest." +msgid "You can only edit files when you are on a branch" +msgstr "" + msgid "You cannot write to a read-only secondary GitLab Geo instance. Please use %{link_to_primary_node} instead." msgstr "" @@ -2953,6 +3663,12 @@ msgstr "Du kannst erst mittels SSH übertragen (push) oder abrufen (pull), nachd msgid "You won't be able to pull or push project code via SSH until you add an SSH key to your profile" msgstr "" +msgid "You'll need to use different branch names to get a valid comparison." +msgstr "" + +msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure" +msgstr "" + msgid "Your comment will not be visible to the public." msgstr "" @@ -2965,26 +3681,220 @@ msgstr "Dein Name" msgid "Your projects" msgstr "Deine Projekte" +msgid "assign yourself" +msgstr "" + msgid "branch name" msgstr "" msgid "by" msgstr "" +msgid "ciReport|Code quality" +msgstr "" + +msgid "ciReport|DAST detected no alerts by analyzing the review app" +msgstr "" + +msgid "ciReport|Failed to load ${type} report" +msgstr "" + +msgid "ciReport|Fixed:" +msgstr "" + +msgid "ciReport|Instances" +msgstr "" + +msgid "ciReport|Learn more about whitelisting" +msgstr "" + +msgid "ciReport|Loading ${type} report" +msgstr "" + +msgid "ciReport|No changes to code quality" +msgstr "" + +msgid "ciReport|No changes to performance metrics" +msgstr "" + +msgid "ciReport|Performance metrics" +msgstr "" + +msgid "ciReport|SAST" +msgstr "" + +msgid "ciReport|SAST detected no security vulnerabilities" +msgstr "" + +msgid "ciReport|SAST:container no vulnerabilities were found" +msgstr "" + +msgid "ciReport|Show complete code vulnerabilities report" +msgstr "" + +msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}" +msgstr "" + msgid "commit" msgstr "" +msgid "confidentiality|You are going to turn off the confidentiality. This means <strong>everyone</strong> will be able to see and leave a comment on this issue." +msgstr "" + +msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with <strong>at least Reporter access</strong> are able to see and leave comments on the issue." +msgstr "" + msgid "day" msgid_plural "days" msgstr[0] "Tag" msgstr[1] "Tage" +msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command." +msgstr "" + +msgid "merge request" +msgid_plural "merge requests" +msgstr[0] "" +msgstr[1] "" + +msgid "mrWidget|Cancel automatic merge" +msgstr "" + +msgid "mrWidget|Check out branch" +msgstr "" + +msgid "mrWidget|Checking ability to merge automatically" +msgstr "" + +msgid "mrWidget|Cherry-pick" +msgstr "" + +msgid "mrWidget|Cherry-pick this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Closed" +msgstr "" + +msgid "mrWidget|Closed by" +msgstr "" + +msgid "mrWidget|Closes" +msgstr "" + +msgid "mrWidget|Did not close" +msgstr "" + +msgid "mrWidget|Email patches" +msgstr "" + +msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|Mentions" +msgstr "" + +msgid "mrWidget|Merge" +msgstr "" + +msgid "mrWidget|Merge failed." +msgstr "" + +msgid "mrWidget|Merge locally" +msgstr "" + +msgid "mrWidget|Merged by" +msgstr "" + +msgid "mrWidget|Plain diff" +msgstr "" + +msgid "mrWidget|Refresh" +msgstr "" + +msgid "mrWidget|Refresh now" +msgstr "" + +msgid "mrWidget|Refreshing now" +msgstr "" + +msgid "mrWidget|Remove Source Branch" +msgstr "" + +msgid "mrWidget|Remove source branch" +msgstr "" + +msgid "mrWidget|Request to merge" +msgstr "" + +msgid "mrWidget|Resolve conflicts" +msgstr "" + +msgid "mrWidget|Revert" +msgstr "" + +msgid "mrWidget|Revert this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Set by" +msgstr "" + +msgid "mrWidget|The changes were merged into" +msgstr "" + +msgid "mrWidget|The changes were not merged into" +msgstr "" + +msgid "mrWidget|The changes will be merged into" +msgstr "" + +msgid "mrWidget|The source branch has been removed" +msgstr "" + +msgid "mrWidget|The source branch is being removed" +msgstr "" + +msgid "mrWidget|The source branch will be removed" +msgstr "" + +msgid "mrWidget|The source branch will not be removed" +msgstr "" + +msgid "mrWidget|There are merge conflicts" +msgstr "" + +msgid "mrWidget|This merge request failed to be merged automatically" +msgstr "" + +msgid "mrWidget|This merge request is in the process of being merged" +msgstr "" + +msgid "mrWidget|This project is archived, write access has been disabled" +msgstr "" + +msgid "mrWidget|You can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|You can remove source branch now" +msgstr "" + +msgid "mrWidget|command line" +msgstr "" + +msgid "mrWidget|into" +msgstr "" + +msgid "mrWidget|to be merged automatically when the pipeline succeeds" +msgstr "" + msgid "new merge request" msgstr "Neuer Merge Request" msgid "notification emails" msgstr "Benachrichtungsemail" +msgid "or" +msgstr "" + msgid "parent" msgid_plural "parents" msgstr[0] "Vorgänger" @@ -2996,12 +3906,21 @@ msgstr "" msgid "personal access token" msgstr "" +msgid "remove due date" +msgstr "" + msgid "source" msgstr "" +msgid "spendCommand|%{slash_command} will update the sum of the time spent." +msgstr "" + msgid "to help your contributors communicate effectively!" msgstr "" msgid "username" msgstr "" +msgid "uses Kubernetes clusters to deploy your code!" +msgstr "" + diff --git a/locale/eo/gitlab.po b/locale/eo/gitlab.po index 54906417e75..7d4648c55f1 100644 --- a/locale/eo/gitlab.po +++ b/locale/eo/gitlab.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: gitlab-ee\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-12-12 18:31+0000\n" -"PO-Revision-Date: 2018-01-05 04:42-0500\n" +"POT-Creation-Date: 2018-02-07 11:38-0600\n" +"PO-Revision-Date: 2018-02-12 03:59-0500\n" "Last-Translator: gitlab <mbartlett+crowdin@gitlab.com>\n" "Language-Team: Esperanto\n" "Language: eo_UY\n" @@ -16,23 +16,41 @@ msgstr "" "X-Crowdin-Language: eo\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" +msgid " and" +msgstr "" + msgid "%d commit" msgid_plural "%d commits" msgstr[0] "%d enmetado" msgstr[1] "%d enmetadoj" +msgid "%d commit behind" +msgid_plural "%d commits behind" +msgstr[0] "" +msgstr[1] "" + +msgid "%d issue" +msgid_plural "%d issues" +msgstr[0] "" +msgstr[1] "" + msgid "%d layer" msgid_plural "%d layers" msgstr[0] "" msgstr[1] "" +msgid "%d merge request" +msgid_plural "%d merge requests" +msgstr[0] "" +msgstr[1] "" + msgid "%s additional commit has been omitted to prevent performance issues." msgid_plural "%s additional commits have been omitted to prevent performance issues." msgstr[0] "%s enmetado estis transsaltita, por ne troÅarÄi la sistemon." msgstr[1] "%s enmetadoj estis transsaltitaj, por ne troÅarÄi la sistemon." -msgid "%{commit_author_link} committed %{commit_timeago}" -msgstr "%{commit_author_link} enmetis %{commit_timeago}" +msgid "%{commit_author_link} authored %{commit_timeago}" +msgstr "" msgid "%{count} participant" msgid_plural "%{count} participants" @@ -45,9 +63,6 @@ msgstr "" msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt." msgstr "" -msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will block access for %{number_of_seconds} seconds." -msgstr "" - msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will not retry automatically. Reset storage information when the problem is resolved." msgstr "" @@ -121,24 +136,81 @@ msgstr "Aldoni rajtigilon" msgid "Add new directory" msgstr "Aldoni novan dosierujon" +msgid "Add todo" +msgstr "" + +msgid "AdminArea|Stop all jobs" +msgstr "" + +msgid "AdminArea|Stop all jobs?" +msgstr "" + +msgid "AdminArea|Stop jobs" +msgstr "" + +msgid "AdminArea|Stopping jobs failed" +msgstr "" + +msgid "AdminArea|You’re about to stop all jobs. This will halt all current jobs that are running." +msgstr "" + msgid "AdminHealthPageLink|health page" msgstr "" +msgid "Advanced" +msgstr "" + msgid "Advanced settings" msgstr "" msgid "All" msgstr "" +msgid "All changes are committed" +msgstr "" + +msgid "Allows you to add and manage Kubernetes clusters." +msgstr "" + +msgid "An error occurred previewing the blob" +msgstr "" + msgid "An error occurred when toggling the notification subscription" msgstr "" msgid "An error occurred when updating the issue weight" msgstr "" +msgid "An error occurred while dismissing the feature highlight. Refresh the page and try dismissing again." +msgstr "" + +msgid "An error occurred while fetching markdown preview" +msgstr "" + msgid "An error occurred while fetching sidebar data" msgstr "" +msgid "An error occurred while getting projects" +msgstr "" + +msgid "An error occurred while loading filenames" +msgstr "" + +msgid "An error occurred while rendering KaTeX" +msgstr "" + +msgid "An error occurred while rendering preview broadcast message" +msgstr "" + +msgid "An error occurred while retrieving calendar activity" +msgstr "" + +msgid "An error occurred while retrieving diff" +msgstr "" + +msgid "An error occurred while validating username" +msgstr "" + msgid "An error occurred. Please try again." msgstr "" @@ -163,9 +235,6 @@ msgstr "Ĉu vi certe volas forigi ĉi tiun ĉenstablan planon?" msgid "Are you sure you want to discard your changes?" msgstr "" -msgid "Are you sure you want to leave this group?" -msgstr "" - msgid "Are you sure you want to reset registration token?" msgstr "" @@ -178,6 +247,21 @@ msgstr "" msgid "Artifacts" msgstr "" +msgid "Assign custom color like #FF0000" +msgstr "" + +msgid "Assign labels" +msgstr "" + +msgid "Assign milestone" +msgstr "" + +msgid "Assign to" +msgstr "" + +msgid "Assignee" +msgstr "" + msgid "Attach a file by drag & drop or %{upload_link}" msgstr "Alkroĉu dosieron per Åovmetado aÅ %{upload_link}" @@ -193,13 +277,16 @@ msgstr "" msgid "Author" msgstr "" -msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly." +msgid "Authors: %{authors}" msgstr "" -msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly." +msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly." msgstr "" -msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly." +msgid "Auto Review Apps and Auto Deploy need a domain name and a %{kubernetes} to work correctly." +msgstr "" + +msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly." msgstr "" msgid "AutoDevOps|Auto DevOps (Beta)" @@ -223,6 +310,12 @@ msgstr "" msgid "Available" msgstr "" +msgid "Avatar will be removed. Are you sure?" +msgstr "" + +msgid "Average per day: %{average}" +msgstr "" + msgid "Billing" msgstr "" @@ -277,6 +370,9 @@ msgstr "" msgid "BillingPlans|per user" msgstr "" +msgid "Begin with the selected commit" +msgstr "" + msgid "Branch" msgid_plural "Branches" msgstr[0] "Branĉo" @@ -405,8 +501,8 @@ msgstr "de" msgid "CI / CD" msgstr "" -msgid "CI configuration" -msgstr "Agordoj de seninterrompa integrado" +msgid "CI/CD configuration" +msgstr "" msgid "CICD|Jobs" msgstr "" @@ -417,6 +513,9 @@ msgstr "Nuligi" msgid "Cancel edit" msgstr "" +msgid "Cannot modify managed Kubernetes cluster" +msgstr "" + msgid "Change Weight" msgstr "" @@ -432,15 +531,24 @@ msgstr "Precize elekti" msgid "ChangeTypeAction|Revert" msgstr "Malfari" +msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes." +msgstr "" + msgid "Changelog" msgstr "Listo de ÅanÄoj" +msgid "Changes are shown as if the <b>source</b> revision was being merged into the <b>target</b> revision." +msgstr "" + msgid "Charts" msgstr "Diagramoj" msgid "Chat" msgstr "" +msgid "Check interval" +msgstr "" + msgid "Checking %{text} availability…" msgstr "" @@ -453,7 +561,19 @@ msgstr "Precize elekti ĉi tiun kunmetadon" msgid "Cherry-pick this merge request" msgstr "Precize elekti ĉi tiun peton pri kunfando" -msgid "Choose which groups you wish to replicate to this secondary node. Leave blank to replicate all." +msgid "Choose File ..." +msgstr "" + +msgid "Choose a branch/tag (e.g. %{master}) or enter a commit (e.g. %{sha}) to see what's changed or to create a merge request." +msgstr "" + +msgid "Choose file..." +msgstr "" + +msgid "Choose which groups you wish to synchronize to this secondary node." +msgstr "" + +msgid "Choose which shards you wish to synchronize to this secondary node." msgstr "" msgid "CiStatusLabel|canceled" @@ -510,79 +630,91 @@ msgstr "transsaltita" msgid "CiStatus|running" msgstr "plenumiÄanta" -msgid "CircuitBreakerApiLink|circuitbreaker api" +msgid "CiVariables|Input variable key" msgstr "" -msgid "Clone repository" +msgid "CiVariables|Input variable value" msgstr "" -msgid "Close" +msgid "CiVariables|Remove variable row" msgstr "" -msgid "Cluster" +msgid "CiVariable|* (All environments)" msgstr "" -msgid "ClusterIntegration|%{appList} was successfully installed on your cluster" +msgid "CiVariable|All environments" msgstr "" -msgid "ClusterIntegration|%{boldNotice} This will add some extra resources like a load balancer, which incur additional costs. See %{pricingLink}" +msgid "CiVariable|Create wildcard" msgstr "" -msgid "ClusterIntegration|API URL" +msgid "CiVariable|Error occured while saving variables" msgstr "" -msgid "ClusterIntegration|Active" +msgid "CiVariable|New environment" msgstr "" -msgid "ClusterIntegration|Add an existing cluster" +msgid "CiVariable|Protected" msgstr "" -msgid "ClusterIntegration|Add cluster" +msgid "CiVariable|Search environments" msgstr "" -msgid "ClusterIntegration|All" +msgid "CiVariable|Toggle protected" msgstr "" -msgid "ClusterIntegration|Applications" +msgid "CiVariable|Validation failed" msgstr "" -msgid "ClusterIntegration|CA Certificate" +msgid "CircuitBreakerApiLink|circuitbreaker api" msgstr "" -msgid "ClusterIntegration|Certificate Authority bundle (PEM format)" +msgid "Click to expand text" msgstr "" -msgid "ClusterIntegration|Choose how to set up cluster integration" +msgid "Clone repository" msgstr "" -msgid "ClusterIntegration|Cluster" +msgid "Close" msgstr "" -msgid "ClusterIntegration|Cluster details" +msgid "Closed" msgstr "" -msgid "ClusterIntegration|Cluster integration" +msgid "ClusterIntegration|%{appList} was successfully installed on your Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Cluster integration is disabled for this project." +msgid "ClusterIntegration|API URL" msgstr "" -msgid "ClusterIntegration|Cluster integration is enabled for this project." +msgid "ClusterIntegration|Add Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Cluster integration is enabled for this project. Disabling this integration will not affect your cluster, it will only temporarily turn off GitLab's connection to it." +msgid "ClusterIntegration|Add an existing Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Cluster is being created on Google Kubernetes Engine..." +msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration" +msgstr "" + +msgid "ClusterIntegration|Applications" +msgstr "" + +msgid "ClusterIntegration|Are you sure you want to remove this Kubernetes cluster's integration? This will not delete your actual Kubernetes cluster." +msgstr "" + +msgid "ClusterIntegration|CA Certificate" +msgstr "" + +msgid "ClusterIntegration|Certificate Authority bundle (PEM format)" msgstr "" -msgid "ClusterIntegration|Cluster name" +msgid "ClusterIntegration|Choose how to set up Kubernetes cluster integration" msgstr "" -msgid "ClusterIntegration|Cluster was successfully created on Google Kubernetes Engine. Refresh the page to see cluster's details" +msgid "ClusterIntegration|Choose which of your project's environments will use this Kubernetes cluster." msgstr "" -msgid "ClusterIntegration|Clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" +msgid "ClusterIntegration|Control how your Kubernetes cluster integrates with GitLab" msgstr "" msgid "ClusterIntegration|Copy API URL" @@ -591,37 +723,34 @@ msgstr "" msgid "ClusterIntegration|Copy CA Certificate" msgstr "" -msgid "ClusterIntegration|Copy Token" +msgid "ClusterIntegration|Copy Kubernetes cluster name" msgstr "" -msgid "ClusterIntegration|Copy cluster name" +msgid "ClusterIntegration|Copy Token" msgstr "" -msgid "ClusterIntegration|Create a new cluster on Google Engine right from GitLab" +msgid "ClusterIntegration|Create Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Create cluster" +msgid "ClusterIntegration|Create Kubernetes cluster on Google Kubernetes Engine" msgstr "" -msgid "ClusterIntegration|Create cluster on Google Kubernetes Engine" +msgid "ClusterIntegration|Create a new Kubernetes cluster on Google Kubernetes Engine right from GitLab" msgstr "" msgid "ClusterIntegration|Create on GKE" msgstr "" -msgid "ClusterIntegration|Enable cluster integration" -msgstr "" - msgid "ClusterIntegration|Enter the details for an existing Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Enter the details for your cluster" +msgid "ClusterIntegration|Enter the details for your Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Environment pattern" +msgid "ClusterIntegration|Environment scope" msgstr "" -msgid "ClusterIntegration|GKE pricing" +msgid "ClusterIntegration|GitLab Integration" msgstr "" msgid "ClusterIntegration|GitLab Runner" @@ -639,64 +768,94 @@ msgstr "" msgid "ClusterIntegration|Helm Tiller" msgstr "" -msgid "ClusterIntegration|Inactive" -msgstr "" - msgid "ClusterIntegration|Ingress" msgstr "" msgid "ClusterIntegration|Install" msgstr "" -msgid "ClusterIntegration|Install applications on your cluster. Read more about %{helpLink}" -msgstr "" - msgid "ClusterIntegration|Installed" msgstr "" msgid "ClusterIntegration|Installing" msgstr "" -msgid "ClusterIntegration|Integrate cluster automation" +msgid "ClusterIntegration|Integrate Kubernetes cluster automation" +msgstr "" + +msgid "ClusterIntegration|Integration status" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster details" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is disabled for this project." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project. Disabling this integration will not affect your Kubernetes cluster, it will only temporarily turn off GitLab's connection to it." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster is being created on Google Kubernetes Engine..." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster name" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters can be used to deploy applications and to provide Review Apps for this project" msgstr "" msgid "ClusterIntegration|Learn more about %{link_to_documentation}" msgstr "" -msgid "ClusterIntegration|Learn more about Clusters" +msgid "ClusterIntegration|Learn more about Kubernetes" msgstr "" -msgid "ClusterIntegration|Machine type" +msgid "ClusterIntegration|Learn more about environments" msgstr "" -msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create clusters" +msgid "ClusterIntegration|Machine type" msgstr "" -msgid "ClusterIntegration|Manage cluster integration on your GitLab project" +msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create Kubernetes clusters" msgstr "" -msgid "ClusterIntegration|Manage your cluster by visiting %{link_gke}" +msgid "ClusterIntegration|Manage" msgstr "" -msgid "ClusterIntegration|Multiple clusters are available in GitLab Entreprise Edition Premium and Ultimate" +msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}" msgstr "" -msgid "ClusterIntegration|Note:" +msgid "ClusterIntegration|More information" msgstr "" -msgid "ClusterIntegration|Number of nodes" +msgid "ClusterIntegration|Multiple Kubernetes clusters are available in GitLab Enterprise Edition Premium and Ultimate" msgstr "" -msgid "ClusterIntegration|Please enter access information for your cluster. If you need help, you can read our %{link_to_help_page} on clusters" +msgid "ClusterIntegration|Note:" msgstr "" -msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:" +msgid "ClusterIntegration|Number of nodes" msgstr "" -msgid "ClusterIntegration|Problem setting up the cluster" +msgid "ClusterIntegration|Please enter access information for your Kubernetes cluster. If you need help, you can read our %{link_to_help_page} on Kubernetes" msgstr "" -msgid "ClusterIntegration|Problem setting up the clusters list" +msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:" msgstr "" msgid "ClusterIntegration|Project ID" @@ -708,16 +867,19 @@ msgstr "" msgid "ClusterIntegration|Project namespace (optional, unique)" msgstr "" -msgid "ClusterIntegration|Read our %{link_to_help_page} on cluster integration." +msgid "ClusterIntegration|Prometheus" +msgstr "" + +msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration." msgstr "" -msgid "ClusterIntegration|Remove cluster integration" +msgid "ClusterIntegration|Remove Kubernetes cluster integration" msgstr "" msgid "ClusterIntegration|Remove integration" msgstr "" -msgid "ClusterIntegration|Removing cluster integration will remove the cluster configuration you have added to this project. It will not delete your cluster on Google Kubernetes Engine." +msgid "ClusterIntegration|Remove this Kubernetes cluster's configuration from this project. This will not delete your actual Kubernetes cluster." msgstr "" msgid "ClusterIntegration|Request to begin installing failed" @@ -726,7 +888,7 @@ msgstr "" msgid "ClusterIntegration|Save changes" msgstr "" -msgid "ClusterIntegration|See and edit the details for your cluster" +msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster" msgstr "" msgid "ClusterIntegration|See machine types" @@ -747,25 +909,25 @@ msgstr "" msgid "ClusterIntegration|Something went wrong on our end." msgstr "" -msgid "ClusterIntegration|Something went wrong while creating your cluster on Google Kubernetes Engine" +msgid "ClusterIntegration|Something went wrong while creating your Kubernetes cluster on Google Kubernetes Engine" msgstr "" msgid "ClusterIntegration|Something went wrong while installing %{title}" msgstr "" -msgid "ClusterIntegration|There are no clusters to show" +msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below" msgstr "" -msgid "ClusterIntegration|This account must have permissions to create a cluster in the %{link_to_container_project} specified below" +msgid "ClusterIntegration|Toggle Kubernetes Cluster" msgstr "" -msgid "ClusterIntegration|Toggle Cluster" +msgid "ClusterIntegration|Toggle Kubernetes cluster" msgstr "" msgid "ClusterIntegration|Token" msgstr "" -msgid "ClusterIntegration|With a cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." +msgid "ClusterIntegration|With a Kubernetes cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." msgstr "" msgid "ClusterIntegration|Your account must have %{link_to_kubernetes_engine}" @@ -777,7 +939,7 @@ msgstr "" msgid "ClusterIntegration|access to Google Kubernetes Engine" msgstr "" -msgid "ClusterIntegration|cluster" +msgid "ClusterIntegration|check the pricing here" msgstr "" msgid "ClusterIntegration|documentation" @@ -795,6 +957,9 @@ msgstr "" msgid "ClusterIntegration|properly configured" msgstr "" +msgid "Collapse" +msgstr "" + msgid "Comments" msgstr "" @@ -812,6 +977,9 @@ msgstr "DaÅro de la enmetadoj por la lastaj 30 enmetadoj" msgid "Commit message" msgstr "MesaÄo pri la enmetado" +msgid "Commit statistics for %{ref} %{start_time} - %{end_time}" +msgstr "" + msgid "CommitBoxTitle|Commit" msgstr "Enmeti" @@ -824,15 +992,57 @@ msgstr "Enmetadoj" msgid "Commits feed" msgstr "Fluo de enmetadoj" +msgid "Commits per day hour (UTC)" +msgstr "" + +msgid "Commits per day of month" +msgstr "" + +msgid "Commits per weekday" +msgstr "" + +msgid "Commits|An error occurred while fetching merge requests data." +msgstr "" + +msgid "Commits|Commit: %{commitText}" +msgstr "" + msgid "Commits|History" msgstr "Historio" +msgid "Commits|No related merge requests found" +msgstr "" + msgid "Committed by" msgstr "Enmetita de" msgid "Compare" msgstr "Kompari" +msgid "Compare Git revisions" +msgstr "" + +msgid "Compare Revisions" +msgstr "" + +msgid "CompareBranches|%{source_branch} and %{target_branch} are the same." +msgstr "" + +msgid "CompareBranches|Compare" +msgstr "" + +msgid "CompareBranches|Source" +msgstr "" + +msgid "CompareBranches|Target" +msgstr "" + +msgid "CompareBranches|There isn't anything to compare." +msgstr "" + +msgid "Confidentiality" +msgstr "" + msgid "Container Registry" msgstr "" @@ -884,6 +1094,9 @@ msgstr "Gvidlinioj por kontribuado" msgid "Contributors" msgstr "Kontribuantoj" +msgid "ContributorsPage|%{startDate} – %{endDate}" +msgstr "" + msgid "ContributorsPage|Building repository graph." msgstr "" @@ -905,9 +1118,18 @@ msgstr "" msgid "Copy URL to clipboard" msgstr "Kopii la adreson en la kopibufron" +msgid "Copy branch name to clipboard" +msgstr "" + msgid "Copy commit SHA to clipboard" msgstr "Kopii la identigilon de la enmetado" +msgid "Copy reference to clipboard" +msgstr "" + +msgid "Create" +msgstr "" + msgid "Create New Directory" msgstr "Krei novan dosierujon" @@ -926,6 +1148,9 @@ msgstr "" msgid "Create file" msgstr "" +msgid "Create lists from labels. Issues with that label appear in that list." +msgstr "" + msgid "Create merge request" msgstr "Krei peton pri kunfando" @@ -938,6 +1163,9 @@ msgstr "" msgid "Create new file" msgstr "" +msgid "Create new label" +msgstr "" + msgid "Create new..." msgstr "Krei novan…" @@ -959,6 +1187,9 @@ msgstr "Horzono por Cron" msgid "Cron syntax" msgstr "La sintakso de Cron" +msgid "Current node" +msgstr "" + msgid "Custom notification events" msgstr "Propraj sciigaj eventoj" @@ -968,9 +1199,6 @@ msgstr "La propraj sciigaj niveloj estas la samaj kiel la niveloj de partoprenad msgid "Cycle Analytics" msgstr "Cikla analizo" -msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project." -msgstr "La cikla analizo esploras kiom da tempo necesas por disvolvi ideon Äis Äi fariÄos realaĵo." - msgid "CycleAnalyticsStage|Code" msgstr "Programado" @@ -1027,12 +1255,21 @@ msgstr "" msgid "Details" msgstr "" +msgid "Diffs|No file name available" +msgstr "" + msgid "Directory name" msgstr "Nomo de dosierujo" +msgid "Disable" +msgstr "" + msgid "Discard changes" msgstr "" +msgid "Discover GitLab Geo." +msgstr "" + msgid "Dismiss Cycle Analytics introduction box" msgstr "" @@ -1069,15 +1306,24 @@ msgstr "Normala dosiero kun diferencoj" msgid "DownloadSource|Download" msgstr "ElÅuti" +msgid "Due date" +msgstr "" + msgid "Edit" msgstr "Redakti" msgid "Edit Pipeline Schedule %{id}" msgstr "Redakti ĉenstablan planon %{id}" +msgid "Edit files in the editor and commit changes here" +msgstr "" + msgid "Emails" msgstr "" +msgid "Enable" +msgstr "" + msgid "Environments|An error occurred while fetching the environments." msgstr "" @@ -1096,9 +1342,6 @@ msgstr "" msgid "Environments|Environments" msgstr "" -msgid "Environments|Environments are places where code gets deployed, such as staging or production." -msgstr "" - msgid "Environments|Job" msgstr "" @@ -1141,9 +1384,33 @@ msgstr "" msgid "Error creating epic" msgstr "" +msgid "Error fetching contributors data." +msgstr "" + +msgid "Error fetching labels." +msgstr "" + +msgid "Error fetching network graph." +msgstr "" + +msgid "Error fetching refs" +msgstr "" + +msgid "Error fetching usage ping data." +msgstr "" + msgid "Error occurred when toggling the notification subscription" msgstr "" +msgid "Error saving label update." +msgstr "" + +msgid "Error updating status for all todos." +msgstr "" + +msgid "Error updating todo status." +msgstr "" + msgid "EventFilterBy|Filter by all" msgstr "" @@ -1171,6 +1438,9 @@ msgstr "Ĉiumonate (en la 1a de la monato, je 4:00)" msgid "Every week (Sundays at 4:00am)" msgstr "Ĉiusemajne (en dimanĉo, je 4:00)" +msgid "Expand" +msgstr "" + msgid "Explore projects" msgstr "" @@ -1189,6 +1459,9 @@ msgstr "" msgid "February" msgstr "" +msgid "Fields on this page are now uneditable, you can configure" +msgstr "" + msgid "File name" msgstr "" @@ -1233,10 +1506,10 @@ msgstr "De la kunfandado de la peto pri kunfando Äis la disponigado en la publi msgid "GPG Keys" msgstr "" -msgid "Geo Nodes" +msgid "Generate a default set of labels" msgstr "" -msgid "GeoNodeSyncStatus|Failed" +msgid "Geo Nodes" msgstr "" msgid "GeoNodeSyncStatus|Node is failing or broken." @@ -1245,16 +1518,100 @@ msgstr "" msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage." msgstr "" -msgid "GeoNodeSyncStatus|Out of sync" +msgid "GeoNodes|Database replication lag:" +msgstr "" + +msgid "GeoNodes|Disabling a node stops the sync process. Are you sure?" +msgstr "" + +msgid "GeoNodes|Does not match the primary storage configuration" +msgstr "" + +msgid "GeoNodes|Failed" +msgstr "" + +msgid "GeoNodes|Full" +msgstr "" + +msgid "GeoNodes|GitLab version does not match the primary node version" +msgstr "" + +msgid "GeoNodes|GitLab version:" +msgstr "" + +msgid "GeoNodes|Health status:" +msgstr "" + +msgid "GeoNodes|Last event ID processed by cursor:" +msgstr "" + +msgid "GeoNodes|Last event ID seen from primary:" +msgstr "" + +msgid "GeoNodes|Loading nodes" +msgstr "" + +msgid "GeoNodes|Local Attachments:" +msgstr "" + +msgid "GeoNodes|Local LFS objects:" +msgstr "" + +msgid "GeoNodes|Local job artifacts:" +msgstr "" + +msgid "GeoNodes|New node" +msgstr "" + +msgid "GeoNodes|Out of sync" msgstr "" -msgid "GeoNodeSyncStatus|Synced" +msgid "GeoNodes|Replication slot WAL:" +msgstr "" + +msgid "GeoNodes|Replication slots:" +msgstr "" + +msgid "GeoNodes|Repositories:" +msgstr "" + +msgid "GeoNodes|Selective" +msgstr "" + +msgid "GeoNodes|Storage config:" +msgstr "" + +msgid "GeoNodes|Sync settings:" +msgstr "" + +msgid "GeoNodes|Synced" +msgstr "" + +msgid "GeoNodes|Unused slots" +msgstr "" + +msgid "GeoNodes|Used slots" +msgstr "" + +msgid "GeoNodes|Wikis:" +msgstr "" + +msgid "GeoNodes|You have configured Geo nodes using an insecure HTTP connection. We recommend the use of HTTPS." +msgstr "" + +msgid "Geo|All projects" msgstr "" msgid "Geo|File sync capacity" msgstr "" -msgid "Geo|Groups to replicate" +msgid "Geo|Groups to synchronize" +msgstr "" + +msgid "Geo|Projects in certain groups" +msgstr "" + +msgid "Geo|Projects in certain storage shards" msgstr "" msgid "Geo|Repository sync capacity" @@ -1263,12 +1620,24 @@ msgstr "" msgid "Geo|Select groups to replicate." msgstr "" +msgid "Geo|Shards to synchronize" +msgstr "" + +msgid "Git revision" +msgstr "" + msgid "Git storage health information has been reset" msgstr "" +msgid "Git version" +msgstr "" + msgid "GitLab Runner section" msgstr "" +msgid "Gitaly Servers" +msgstr "" + msgid "Go to your fork" msgstr "Al via disbranĉigo" @@ -1278,6 +1647,9 @@ msgstr "Disbranĉigo" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it!" +msgstr "" + msgid "GroupSettings|Prevent sharing a project within %{group} with other groups" msgstr "" @@ -1314,7 +1686,7 @@ msgstr "" msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group." msgstr "" -msgid "GroupsTree|Are you sure you want to leave the \"${this.group.fullName}\" group?" +msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?" msgstr "" msgid "GroupsTree|Create a project in this group." @@ -1365,6 +1737,11 @@ msgstr "" msgid "HealthCheck|Unhealthy" msgstr "" +msgid "Hide value" +msgid_plural "Hide values" +msgstr[0] "" +msgstr[1] "" + msgid "History" msgstr "" @@ -1391,6 +1768,12 @@ msgid_plural "Instances" msgstr[0] "" msgstr[1] "" +msgid "Instance does not support multiple Kubernetes clusters" +msgstr "" + +msgid "Interested parties can even contribute by pushing commits if they want to." +msgstr "" + msgid "Internal - The group and any internal projects can be viewed by any logged in user." msgstr "" @@ -1418,6 +1801,9 @@ msgstr "" msgid "Issues" msgstr "" +msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable." +msgstr "" + msgid "Jan" msgstr "" @@ -1436,6 +1822,27 @@ msgstr "" msgid "June" msgstr "" +msgid "Kubernetes" +msgstr "" + +msgid "Kubernetes Cluster" +msgstr "" + +msgid "Kubernetes cluster creation time exceeds timeout; %{timeout}" +msgstr "" + +msgid "Kubernetes cluster integration was not removed." +msgstr "" + +msgid "Kubernetes cluster integration was successfully removed." +msgstr "" + +msgid "Kubernetes cluster was successfully updated." +msgstr "" + +msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page" +msgstr "" + msgid "LFSStatus|Disabled" msgstr "MalÅaltita" @@ -1445,6 +1852,9 @@ msgstr "Åœaltita" msgid "Labels" msgstr "" +msgid "Labels can be applied to issues and merge requests to categorize them." +msgstr "" + msgid "Last %d day" msgid_plural "Last %d days" msgstr[0] "La lasta %d tago" @@ -1474,6 +1884,9 @@ msgstr "" msgid "LastPushEvent|at" msgstr "" +msgid "Learn more" +msgstr "" + msgid "Learn more in the" msgstr "Lernu pli en la" @@ -1492,14 +1905,18 @@ msgstr "Forlasi la projekton" msgid "License" msgstr "" -msgid "Limited to showing %d event at most" -msgid_plural "Limited to showing %d events at most" -msgstr[0] "Limigita al montrado de ne pli ol %d evento" -msgstr[1] "Limigita al montrado de ne pli ol %d eventoj" +msgid "Loading the GitLab IDE..." +msgstr "" msgid "Lock" msgstr "" +msgid "Lock %{issuableDisplayName}" +msgstr "" + +msgid "Lock this %{issuableDisplayName}? Only <strong>project members</strong> will be able to comment." +msgstr "" + msgid "Locked" msgstr "" @@ -1509,12 +1926,21 @@ msgstr "" msgid "Login" msgstr "" +msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos." +msgstr "" + +msgid "Manage labels" +msgstr "" + msgid "Mar" msgstr "" msgid "March" msgstr "" +msgid "Mark done" +msgstr "" + msgid "Maximum git storage failures" msgstr "" @@ -1527,6 +1953,9 @@ msgstr "Mediano" msgid "Members" msgstr "" +msgid "Merge Request" +msgstr "" + msgid "Merge Requests" msgstr "" @@ -1536,9 +1965,30 @@ msgstr "" msgid "Merge request" msgstr "" +msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others" +msgstr "" + +msgid "Merged" +msgstr "" + msgid "Messages" msgstr "" +msgid "Milestone" +msgstr "" + +msgid "Milestones|Delete milestone" +msgstr "" + +msgid "Milestones|Delete milestone %{milestoneTitle}?" +msgstr "" + +msgid "Milestones|Failed to delete milestone %{milestoneTitle}" +msgstr "" + +msgid "Milestones|Milestone %{milestoneTitle} was not found" +msgstr "" + msgid "MissingSSHKeyWarningLink|add an SSH key" msgstr "aldonos SSH-Ålosilon" @@ -1548,10 +1998,16 @@ msgstr "" msgid "More information is available|here" msgstr "" +msgid "Move" +msgstr "" + +msgid "Move issue" +msgstr "" + msgid "Multiple issue boards" msgstr "" -msgid "New Cluster" +msgid "Name new label" msgstr "" msgid "New Issue" @@ -1559,6 +2015,12 @@ msgid_plural "New Issues" msgstr[0] "Nova problemo" msgstr[1] "Novaj problemoj" +msgid "New Kubernetes Cluster" +msgstr "" + +msgid "New Kubernetes cluster" +msgstr "" + msgid "New Pipeline Schedule" msgstr "Nova ĉenstabla plano" @@ -1583,6 +2045,9 @@ msgstr "" msgid "New issue" msgstr "Nova problemo" +msgid "New label" +msgstr "" + msgid "New merge request" msgstr "Nova peto pri kunfando" @@ -1601,7 +2066,22 @@ msgstr "" msgid "New tag" msgstr "Nova etikedo" -msgid "No container images stored for this project. Add one by following the instructions above." +msgid "No assignee" +msgstr "" + +msgid "No changes" +msgstr "" + +msgid "No connection could be made to a Gitaly Server, please check your logs!" +msgstr "" + +msgid "No due date" +msgstr "" + +msgid "No estimate or time spent" +msgstr "" + +msgid "No file chosen" msgstr "" msgid "No repository" @@ -1616,9 +2096,15 @@ msgstr "" msgid "None" msgstr "" +msgid "Not allowed to merge" +msgstr "" + msgid "Not available" msgstr "Ne disponebla" +msgid "Not confidential" +msgstr "" + msgid "Not enough data" msgstr "Ne estas sufiĉe da datenoj" @@ -1679,6 +2165,12 @@ msgstr "Rigardado" msgid "Notifications" msgstr "" +msgid "Notifications off" +msgstr "" + +msgid "Notifications on" +msgstr "" + msgid "Nov" msgstr "" @@ -1688,7 +2180,7 @@ msgstr "" msgid "Number of access attempts" msgstr "" -msgid "Number of failures before backing off" +msgid "OK" msgstr "" msgid "Oct" @@ -1703,6 +2195,9 @@ msgstr "Filtrilo" msgid "Only project members can comment." msgstr "" +msgid "Open" +msgstr "" + msgid "Opened" msgstr "" @@ -1736,9 +2231,6 @@ msgstr "" msgid "Password" msgstr "" -msgid "People without permission will never get a notification and won\\'t be able to comment." -msgstr "" - msgid "Pipeline" msgstr "Ĉenstablo" @@ -1781,12 +2273,6 @@ msgstr "Ĉiuj" msgid "PipelineSchedules|Inactive" msgstr "MalÅaltitaj" -msgid "PipelineSchedules|Input variable key" -msgstr "Entajpu Ålosilon por la variablo" - -msgid "PipelineSchedules|Input variable value" -msgstr "Entajpu la valoron de la variablo" - msgid "PipelineSchedules|Next Run" msgstr "Sekvanta plenumo" @@ -1796,9 +2282,6 @@ msgstr "Nenio" msgid "PipelineSchedules|Provide a short description for this pipeline" msgstr "Entajpu mallongan priskribon pri ĉi tiu ĉenstablo" -msgid "PipelineSchedules|Remove variable row" -msgstr "Forigi la variablan linion" - msgid "PipelineSchedules|Take ownership" msgstr "Akiri posedon" @@ -1826,6 +2309,12 @@ msgstr "" msgid "Pipelines for last year" msgstr "" +msgid "Pipelines|Build with confidence" +msgstr "" + +msgid "Pipelines|Get started with Pipelines" +msgstr "" + msgid "Pipeline|all" msgstr "ĉiuj" @@ -1838,12 +2327,21 @@ msgstr "kun etapo" msgid "Pipeline|with stages" msgstr "kun etapoj" +msgid "Play" +msgstr "" + +msgid "Please <a href=%{link_to_billing} target=\"_blank\" rel=\"noopener noreferrer\">enable billing for one of your projects to be able to create a Kubernetes cluster</a>, then try again." +msgstr "" + msgid "Please solve the reCAPTCHA" msgstr "" msgid "Preferences" msgstr "" +msgid "Primary" +msgstr "" + msgid "Private - Project access must be granted explicitly to each user." msgstr "" @@ -1889,6 +2387,9 @@ msgstr "" msgid "Profiles|your account" msgstr "" +msgid "Programming languages used in this repository" +msgstr "" + msgid "Project '%{project_name}' is in the process of being deleted." msgstr "" @@ -1904,6 +2405,15 @@ msgstr "La projekto „%{project_name}“ estis sukcese Äisdatigita." msgid "Project access must be granted explicitly to each user." msgstr "Ĉiu uzanto devas akiri propran atingon al la projekto." +msgid "Project avatar" +msgstr "" + +msgid "Project avatar in repository: %{link}" +msgstr "" + +msgid "Project cache successfully reset." +msgstr "" + msgid "Project details" msgstr "" @@ -1922,6 +2432,21 @@ msgstr "La elporto de la projekto komenciÄis. Vi ricevos ligilon per retpoÅto msgid "ProjectActivityRSS|Subscribe" msgstr "" +msgid "ProjectCreationLevel|Allowed to create projects" +msgstr "" + +msgid "ProjectCreationLevel|Default project creation protection" +msgstr "" + +msgid "ProjectCreationLevel|Developers + Masters" +msgstr "" + +msgid "ProjectCreationLevel|Masters" +msgstr "" + +msgid "ProjectCreationLevel|No one" +msgstr "" + msgid "ProjectFeature|Disabled" msgstr "MalÅaltita" @@ -1946,15 +2471,9 @@ msgstr "Grafeo" msgid "ProjectSettings|Contact an admin to change this setting." msgstr "" -msgid "ProjectSettings|Immediately run a pipeline on the default branch" -msgstr "" - msgid "ProjectSettings|Only signed commits can be pushed to this repository." msgstr "" -msgid "ProjectSettings|Problem setting up the CI/CD settings JavaScript" -msgstr "" - msgid "ProjectSettings|This setting is applied on the server level and can be overridden by an admin." msgstr "" @@ -2024,6 +2543,9 @@ msgstr "" msgid "PrometheusService|View environments" msgstr "" +msgid "Protip:" +msgstr "" + msgid "Public - The group and any public projects can be viewed without any authentication." msgstr "" @@ -2039,6 +2561,9 @@ msgstr "" msgid "PushRule|Committer restriction" msgstr "" +msgid "Quick actions can be used in the issues description and comment boxes." +msgstr "" + msgid "Read more" msgstr "Legu pli" @@ -2051,6 +2576,12 @@ msgstr "Branĉoj" msgid "RefSwitcher|Tags" msgstr "Etikedoj" +msgid "Reference:" +msgstr "" + +msgid "Register / Sign In" +msgstr "" + msgid "Registry" msgstr "" @@ -2075,9 +2606,18 @@ msgstr "Rilataj aplikitaj petoj pri kunfando" msgid "Remind later" msgstr "Rememorigu denove" +msgid "Remove" +msgstr "" + +msgid "Remove avatar" +msgstr "" + msgid "Remove project" msgstr "Forigi la projekton" +msgid "Repair authentication" +msgstr "" + msgid "Repository" msgstr "" @@ -2093,6 +2633,11 @@ msgstr "" msgid "Reset runners registration token" msgstr "" +msgid "Reveal value" +msgid_plural "Reveal values" +msgstr[0] "" +msgstr[1] "" + msgid "Revert this commit" msgstr "Malfari ĉi tiun enmetadon" @@ -2102,15 +2647,15 @@ msgstr "Malfari ĉi tiun peton pri kunfando" msgid "SSH Keys" msgstr "" -msgid "Save" -msgstr "" - msgid "Save changes" msgstr "" msgid "Save pipeline schedule" msgstr "Konservi ĉenstablan planon" +msgid "Save variables" +msgstr "" + msgid "Schedule a new pipeline" msgstr "Plani novan ĉenstablon" @@ -2126,38 +2671,59 @@ msgstr "" msgid "Search branches and tags" msgstr "Serĉu branĉon aÅ etikedon" -msgid "Seconds before reseting failure information" +msgid "Search milestones" +msgstr "" + +msgid "Search project" msgstr "" -msgid "Seconds to wait after a storage failure" +msgid "Search users" +msgstr "" + +msgid "Seconds before reseting failure information" msgstr "" msgid "Seconds to wait for a storage access attempt" msgstr "" +msgid "Secret variables" +msgstr "" + msgid "Select Archive Format" msgstr "Elektu formaton de arkivo" msgid "Select a timezone" msgstr "Elektu horzonon" +msgid "Select assignee" +msgstr "" + +msgid "Select branch/tag" +msgstr "" + msgid "Select target branch" msgstr "Elektu celan branĉon" +msgid "Selective synchronization" +msgstr "" + msgid "Sep" msgstr "" msgid "September" msgstr "" +msgid "Server version" +msgstr "" + msgid "Service Templates" msgstr "" msgid "Set a password on your account to pull or push via %{protocol}." msgstr "Kreu pasvorton por via konto por ebligi al vi eltiri kaj alpuÅi per %{protocol}." -msgid "Set up CI" -msgstr "Agordi SI" +msgid "Set up CI/CD" +msgstr "" msgid "Set up Koding" msgstr "Agordi „Koding“" @@ -2171,6 +2737,15 @@ msgstr "kreos pasvorton" msgid "Settings" msgstr "" +msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero." +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset pipeline minutes" +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset used pipeline minutes" +msgstr "" + msgid "Show parent pages" msgstr "" @@ -2185,9 +2760,6 @@ msgstr[1] "Estas montrataj %d eventoj" msgid "Sidebar|Change weight" msgstr "" -msgid "Sidebar|Edit" -msgstr "" - msgid "Sidebar|No" msgstr "" @@ -2200,18 +2772,30 @@ msgstr "" msgid "Snippets" msgstr "" +msgid "Something went wrong on our end" +msgstr "" + msgid "Something went wrong on our end." msgstr "" +msgid "Something went wrong trying to change the confidentiality of this issue" +msgstr "" + msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}" msgstr "" +msgid "Something went wrong when toggling the button" +msgstr "" + msgid "Something went wrong while fetching the projects." msgstr "" msgid "Something went wrong while fetching the registry list." msgstr "" +msgid "Something went wrong. Please try again." +msgstr "" + msgid "Sort by" msgstr "" @@ -2341,10 +2925,10 @@ msgstr "" msgid "Stopped" msgstr "" -msgid "Subgroups" +msgid "Storage" msgstr "" -msgid "Subscribe" +msgid "Subgroups" msgstr "" msgid "Switch branch/tag" @@ -2442,7 +3026,10 @@ msgstr "" msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project." msgstr "" -msgid "The circuitbreaker backoff threshold should be lower than the failure count threshold" +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project" +msgstr "" + +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project." msgstr "" msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request." @@ -2457,10 +3044,10 @@ msgstr "La rilato de disbranĉigo estis forigita." msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage." msgstr "La etapo de la problemo montras kiom la tempo pasas de la kreado de problemo Äis la atribuado de la problemo al cela etapo de la projekto, aÅ al listo sur la problemtabulo. Komencu krei problemojn por vidi la datenojn por ĉi tiu etapo." -msgid "The number of attempts GitLab will make to access a storage." +msgid "The maximum file size allowed is 200KB." msgstr "" -msgid "The number of failures after which GitLab will start temporarily disabling access to a storage shard on a host" +msgid "The number of attempts GitLab will make to access a storage." msgstr "" msgid "The number of failures of after which GitLab will completely prevent access to the storage. The number of failures can be reset in the admin interface: %{link_to_health_page} or using the %{api_documentation_link}." @@ -2469,9 +3056,6 @@ msgstr "" msgid "The phase of the development lifecycle." msgstr "La etapo de la disvolva ciklo." -msgid "The pipelines schedule runs pipelines in the future, repeatedly, for specific branches or tags. Those scheduled pipelines will inherit limited project access based on their associated user." -msgstr "La ĉenstabla plano plenumas ĉenstablojn en la estonteco, ripete, por difinitaj branĉoj aÅ etikedoj. Tiuj planitaj ĉenstabloj heredos la limigitan atingon al la projekto de la rilata uzanto." - msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit." msgstr "La etapo de la plano montras la tempon de la antaÅa Åtupo Äis la alpuÅado de via unua enmetado. Ĉi tiu tempo aldoniÄos aÅtomate post kiam vi alpuÅas la unuan enmetadon." @@ -2502,19 +3086,46 @@ msgstr "" msgid "The time in seconds GitLab will try to access storage. After this time a timeout error will be raised." msgstr "" +msgid "The time in seconds between storage checks. When a previous check did complete yet, GitLab will skip a check." +msgstr "" + msgid "The time taken by each data entry gathered by that stage." msgstr "La tempo, kiu estas necesa por ĉiu dateno kolektita de la etapo." msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6." msgstr "La valoro, kiu troviÄas en la mezo de aro da rigardataj valoroj. Ekzemple: inter 3, 5 kaj 9, la mediano estas 5. Inter 3, 5, 7 kaj 8, la mediano estas (5+7)/2 = 6." +msgid "There are no issues to show" +msgstr "" + +msgid "There are no merge requests to show" +msgstr "" + msgid "There are problems accessing Git storage: " msgstr "" +msgid "There was an error loading users activity calendar." +msgstr "" + +msgid "There was an error saving your notification settings." +msgstr "" + +msgid "There was an error subscribing to this label." +msgstr "" + +msgid "There was an error when reseting email token." +msgstr "" + +msgid "There was an error when subscribing to this label." +msgstr "" + +msgid "There was an error when unsubscribing from this label." +msgstr "" + msgid "This board\\'s scope is reduced" msgstr "" -msgid "This branch has changed since you started editing. Would you like to create a new branch?" +msgid "This directory" msgstr "" msgid "This is a confidential issue." @@ -2523,18 +3134,45 @@ msgstr "" msgid "This is the author's first Merge Request to this project." msgstr "" +msgid "This issue is confidential" +msgstr "" + msgid "This issue is confidential and locked." msgstr "" msgid "This issue is locked." msgstr "" +msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments" +msgstr "" + +msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered" +msgstr "" + +msgid "This job has not been triggered yet" +msgstr "" + +msgid "This job has not started yet" +msgstr "" + +msgid "This job is in pending state and is waiting to be picked by a runner" +msgstr "" + +msgid "This job requires a manual action" +msgstr "" + msgid "This means you can not push code until you create an empty repository or import existing one." msgstr "Ĉi tiu signifas, ke vi ne povos alpuÅi kodon, antaÅ ol vi kreos malplenan deponejon aÅ enportos jam ekzistantan." msgid "This merge request is locked." msgstr "" +msgid "This project" +msgstr "" + +msgid "This repository" +msgstr "" + msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here." msgstr "" @@ -2547,9 +3185,21 @@ msgstr "Tempo antaÅ la komenco de laboro super problemo" msgid "Time between merge request creation and merge/close" msgstr "Tempo inter la kreado de poeto pri kunfando kaj Äia aplikado/fermado" +msgid "Time tracking" +msgstr "" + msgid "Time until first merge request" msgstr "Tempo Äis la unua peto pri kunfando" +msgid "TimeTrackingEstimated|Est" +msgstr "" + +msgid "TimeTracking|Estimated:" +msgstr "" + +msgid "TimeTracking|Spent" +msgstr "" + msgid "Timeago|%s days ago" msgstr "antaÅ %s tagoj" @@ -2689,6 +3339,18 @@ msgstr "s" msgid "Title" msgstr "" +msgid "Todo" +msgstr "" + +msgid "Toggle sidebar" +msgstr "" + +msgid "ToggleButton|Toggle Status: OFF" +msgstr "" + +msgid "ToggleButton|Toggle Status: ON" +msgstr "" + msgid "Total Time" msgstr "Totala tempo" @@ -2704,19 +3366,40 @@ msgstr "" msgid "Track groups of issues that share a theme, across projects and milestones" msgstr "" +msgid "Total: %{total}" +msgstr "" + +msgid "Track time with quick actions" +msgstr "" + +msgid "Trigger this manual action" +msgstr "" + msgid "Turn on Service Desk" msgstr "" +msgid "Type %{value} to confirm:" +msgstr "" + +msgid "Unable to reset project cache." +msgstr "" + +msgid "Unknown" +msgstr "" + msgid "Unlock" msgstr "" +msgid "Unlock this %{issuableDisplayName}? <strong>Everyone</strong> will be able to comment." +msgstr "" + msgid "Unlocked" msgstr "" msgid "Unstar" msgstr "Malsteligi" -msgid "Unsubscribe" +msgid "Up to date" msgstr "" msgid "Upgrade your plan to activate Advanced Global Search." @@ -2740,6 +3423,9 @@ msgstr "AlÅuti novan dosieron" msgid "Upload file" msgstr "AlÅuti dosieron" +msgid "Upload new avatar" +msgstr "" + msgid "UploadLink|click to upload" msgstr "alklaku por alÅuti" @@ -2752,9 +3438,15 @@ msgstr "" msgid "Use your global notification setting" msgstr "Uzi vian Äeneralan agordon pri la sciigoj" +msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want." +msgstr "" + msgid "View file @ " msgstr "" +msgid "View labels" +msgstr "" + msgid "View open merge request" msgstr "Vidi la malfermitan peton pri kunfando" @@ -2776,6 +3468,9 @@ msgstr "Nekonata" msgid "Want to see the data? Please ask an administrator for access." msgstr "Ĉu vi volas vidi la datenojn? Bonvolu peti atingeblon de administranto." +msgid "We could not verify that one of your projects on GCP has billing enabled. Please try again." +msgstr "" + msgid "We don't have enough data to show this stage." msgstr "Ne estas sufiĉe da datenoj por montri ĉi tiun etapon." @@ -2788,9 +3483,6 @@ msgstr "" msgid "Weight" msgstr "" -msgid "When access to a storage fails. GitLab will prevent access to the storage for the time specified here. This allows the filesystem to recover. Repositories on failing shards are temporarly unavailable" -msgstr "" - msgid "Wiki" msgstr "" @@ -2809,6 +3501,12 @@ msgstr "" msgid "WikiClone|Start Gollum and edit locally" msgstr "" +msgid "WikiEditPageTip|Tip: You can move this page by adding the path to the beginning of the title." +msgstr "" + +msgid "WikiEdit|There is already a page with the same title in that path." +msgstr "" + msgid "WikiEmptyPageError|You are not allowed to create wiki pages" msgstr "" @@ -2911,9 +3609,21 @@ msgstr "Vi forigos la rilaton de la disbranĉigo al la originala projekto, „%{ msgid "You are going to transfer %{project_name_with_namespace} to another owner. Are you ABSOLUTELY sure?" msgstr "Vi estas transigonta „%{project_name_with_namespace}“ al alia posedanto. Ĉu vi estas ABSOLUTE certa?" +msgid "You can also star a label to make it a priority label." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + msgid "You can only add files when you are on a branch" msgstr "Oni povas aldoni dosierojn nur kiam oni estas en branĉo" +msgid "You can only edit files when you are on a branch" +msgstr "" + msgid "You cannot write to a read-only secondary GitLab Geo instance. Please use %{link_to_primary_node} instead." msgstr "" @@ -2953,6 +3663,12 @@ msgstr "Vi ne povos eltiri aÅ alpuÅi kodon per SSH antaÅ ol vi %{add_ssh_key_ msgid "You won't be able to pull or push project code via SSH until you add an SSH key to your profile" msgstr "" +msgid "You'll need to use different branch names to get a valid comparison." +msgstr "" + +msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure" +msgstr "" + msgid "Your comment will not be visible to the public." msgstr "" @@ -2965,26 +3681,220 @@ msgstr "Via nomo" msgid "Your projects" msgstr "" +msgid "assign yourself" +msgstr "" + msgid "branch name" msgstr "" msgid "by" msgstr "" +msgid "ciReport|Code quality" +msgstr "" + +msgid "ciReport|DAST detected no alerts by analyzing the review app" +msgstr "" + +msgid "ciReport|Failed to load ${type} report" +msgstr "" + +msgid "ciReport|Fixed:" +msgstr "" + +msgid "ciReport|Instances" +msgstr "" + +msgid "ciReport|Learn more about whitelisting" +msgstr "" + +msgid "ciReport|Loading ${type} report" +msgstr "" + +msgid "ciReport|No changes to code quality" +msgstr "" + +msgid "ciReport|No changes to performance metrics" +msgstr "" + +msgid "ciReport|Performance metrics" +msgstr "" + +msgid "ciReport|SAST" +msgstr "" + +msgid "ciReport|SAST detected no security vulnerabilities" +msgstr "" + +msgid "ciReport|SAST:container no vulnerabilities were found" +msgstr "" + +msgid "ciReport|Show complete code vulnerabilities report" +msgstr "" + +msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}" +msgstr "" + msgid "commit" msgstr "" +msgid "confidentiality|You are going to turn off the confidentiality. This means <strong>everyone</strong> will be able to see and leave a comment on this issue." +msgstr "" + +msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with <strong>at least Reporter access</strong> are able to see and leave comments on the issue." +msgstr "" + msgid "day" msgid_plural "days" msgstr[0] "tago" msgstr[1] "tagoj" +msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command." +msgstr "" + +msgid "merge request" +msgid_plural "merge requests" +msgstr[0] "" +msgstr[1] "" + +msgid "mrWidget|Cancel automatic merge" +msgstr "" + +msgid "mrWidget|Check out branch" +msgstr "" + +msgid "mrWidget|Checking ability to merge automatically" +msgstr "" + +msgid "mrWidget|Cherry-pick" +msgstr "" + +msgid "mrWidget|Cherry-pick this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Closed" +msgstr "" + +msgid "mrWidget|Closed by" +msgstr "" + +msgid "mrWidget|Closes" +msgstr "" + +msgid "mrWidget|Did not close" +msgstr "" + +msgid "mrWidget|Email patches" +msgstr "" + +msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|Mentions" +msgstr "" + +msgid "mrWidget|Merge" +msgstr "" + +msgid "mrWidget|Merge failed." +msgstr "" + +msgid "mrWidget|Merge locally" +msgstr "" + +msgid "mrWidget|Merged by" +msgstr "" + +msgid "mrWidget|Plain diff" +msgstr "" + +msgid "mrWidget|Refresh" +msgstr "" + +msgid "mrWidget|Refresh now" +msgstr "" + +msgid "mrWidget|Refreshing now" +msgstr "" + +msgid "mrWidget|Remove Source Branch" +msgstr "" + +msgid "mrWidget|Remove source branch" +msgstr "" + +msgid "mrWidget|Request to merge" +msgstr "" + +msgid "mrWidget|Resolve conflicts" +msgstr "" + +msgid "mrWidget|Revert" +msgstr "" + +msgid "mrWidget|Revert this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Set by" +msgstr "" + +msgid "mrWidget|The changes were merged into" +msgstr "" + +msgid "mrWidget|The changes were not merged into" +msgstr "" + +msgid "mrWidget|The changes will be merged into" +msgstr "" + +msgid "mrWidget|The source branch has been removed" +msgstr "" + +msgid "mrWidget|The source branch is being removed" +msgstr "" + +msgid "mrWidget|The source branch will be removed" +msgstr "" + +msgid "mrWidget|The source branch will not be removed" +msgstr "" + +msgid "mrWidget|There are merge conflicts" +msgstr "" + +msgid "mrWidget|This merge request failed to be merged automatically" +msgstr "" + +msgid "mrWidget|This merge request is in the process of being merged" +msgstr "" + +msgid "mrWidget|This project is archived, write access has been disabled" +msgstr "" + +msgid "mrWidget|You can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|You can remove source branch now" +msgstr "" + +msgid "mrWidget|command line" +msgstr "" + +msgid "mrWidget|into" +msgstr "" + +msgid "mrWidget|to be merged automatically when the pipeline succeeds" +msgstr "" + msgid "new merge request" msgstr "novan peton pri kunfando" msgid "notification emails" msgstr "sciigoj per retpoÅto" +msgid "or" +msgstr "" + msgid "parent" msgid_plural "parents" msgstr[0] "patro" @@ -2996,12 +3906,21 @@ msgstr "" msgid "personal access token" msgstr "" +msgid "remove due date" +msgstr "" + msgid "source" msgstr "" +msgid "spendCommand|%{slash_command} will update the sum of the time spent." +msgstr "" + msgid "to help your contributors communicate effectively!" msgstr "" msgid "username" msgstr "" +msgid "uses Kubernetes clusters to deploy your code!" +msgstr "" + diff --git a/locale/es/gitlab.po b/locale/es/gitlab.po index 750dde61a03..7d28a7064d3 100644 --- a/locale/es/gitlab.po +++ b/locale/es/gitlab.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: gitlab-ee\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-12-12 18:31+0000\n" -"PO-Revision-Date: 2018-01-05 04:41-0500\n" +"POT-Creation-Date: 2018-02-07 11:38-0600\n" +"PO-Revision-Date: 2018-02-12 04:01-0500\n" "Last-Translator: gitlab <mbartlett+crowdin@gitlab.com>\n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -16,13 +16,31 @@ msgstr "" "X-Crowdin-Language: es-ES\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" +msgid " and" +msgstr "" + msgid "%d commit" msgid_plural "%d commits" msgstr[0] "%d cambio" msgstr[1] "%d cambios" +msgid "%d commit behind" +msgid_plural "%d commits behind" +msgstr[0] "" +msgstr[1] "" + +msgid "%d issue" +msgid_plural "%d issues" +msgstr[0] "" +msgstr[1] "" + msgid "%d layer" msgid_plural "%d layers" +msgstr[0] "%d capa" +msgstr[1] "%d capas" + +msgid "%d merge request" +msgid_plural "%d merge requests" msgstr[0] "" msgstr[1] "" @@ -31,50 +49,47 @@ msgid_plural "%s additional commits have been omitted to prevent performance iss msgstr[0] "%s cambio adicional ha sido omitido para evitar problemas de rendimiento." msgstr[1] "%s cambios adicionales han sido omitidos para evitar problemas de rendimiento." -msgid "%{commit_author_link} committed %{commit_timeago}" -msgstr "%{commit_author_link} cambió %{commit_timeago}" +msgid "%{commit_author_link} authored %{commit_timeago}" +msgstr "" msgid "%{count} participant" msgid_plural "%{count} participants" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%{count} participante" +msgstr[1] "%{count} participantes" msgid "%{number_commits_behind} commits behind %{default_branch}, %{number_commits_ahead} commits ahead" -msgstr "" +msgstr "%{number_commits_behind} commits detrás de %{default_branch}, %{number_commits_ahead} commits por delante" msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt." -msgstr "" - -msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will block access for %{number_of_seconds} seconds." -msgstr "" +msgstr "%{number_of_failures} de %{maximum_failures} intentos fallidos. GitLab permitirá el acceso en el siguiente intento." msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will not retry automatically. Reset storage information when the problem is resolved." -msgstr "" +msgstr "%{number_of_failures} de %{maximum_failures} intentos fallidos. GitLab no reintentará automáticamente. Debe reinicializar la información de almacenamiento cuando el problema sea solventado." msgid "%{storage_name}: failed storage access attempt on host:" msgid_plural "%{storage_name}: %{failed_attempts} failed storage access attempts:" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%{storage_name}: intento de acceso fallido al almacenamiento en host:" +msgstr[1] "%{storage_name}: %{failed_attempts} intentos de acceso fallido al almacenamiento:" msgid "%{text} is available" -msgstr "" +msgstr "%{text} esta disponible" msgid "(checkout the %{link} for information on how to install it)." -msgstr "" +msgstr "(para obtener información sobre cómo instalarlo visite %{link})." msgid "+ %{moreCount} more" -msgstr "" +msgstr "+ %{moreCount} más" msgid "- show less" -msgstr "" +msgstr "- mostrar menos" msgid "1 pipeline" msgid_plural "%d pipelines" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "1 pipeline" +msgstr[1] "%d pipelines" msgid "1st contribution!" -msgstr "" +msgstr "¡1ra contribución!" msgid "2FA enabled" msgstr "" @@ -86,16 +101,16 @@ msgid "About auto deploy" msgstr "Acerca del auto despliegue" msgid "Abuse Reports" -msgstr "" +msgstr "Reportes de abuso" msgid "Access Tokens" -msgstr "" +msgstr "Tokens de acceso" msgid "Access to failing storages has been temporarily disabled to allow the mount to recover. Reset storage information after the issue has been resolved to allow access again." msgstr "" msgid "Account" -msgstr "" +msgstr "Cuenta" msgid "Active" msgstr "Activo" @@ -104,7 +119,7 @@ msgid "Activity" msgstr "Actividad" msgid "Add" -msgstr "" +msgstr "Añadir" msgid "Add Changelog" msgstr "Agregar Changelog" @@ -113,7 +128,7 @@ msgid "Add Contribution guide" msgstr "Agregar guÃa de contribución" msgid "Add Group Webhooks and GitLab Enterprise Edition." -msgstr "" +msgstr "Añadir Webhooks Grupales y Gitlab Enterprise Edition." msgid "Add License" msgstr "Agregar Licencia" @@ -121,38 +136,95 @@ msgstr "Agregar Licencia" msgid "Add new directory" msgstr "Agregar nuevo directorio" +msgid "Add todo" +msgstr "" + +msgid "AdminArea|Stop all jobs" +msgstr "" + +msgid "AdminArea|Stop all jobs?" +msgstr "" + +msgid "AdminArea|Stop jobs" +msgstr "" + +msgid "AdminArea|Stopping jobs failed" +msgstr "" + +msgid "AdminArea|You’re about to stop all jobs. This will halt all current jobs that are running." +msgstr "" + msgid "AdminHealthPageLink|health page" +msgstr "Página de estado" + +msgid "Advanced" msgstr "" msgid "Advanced settings" -msgstr "" +msgstr "Configuración avanzada" msgid "All" msgstr "" -msgid "An error occurred when toggling the notification subscription" +msgid "All changes are committed" msgstr "" +msgid "Allows you to add and manage Kubernetes clusters." +msgstr "" + +msgid "An error occurred previewing the blob" +msgstr "" + +msgid "An error occurred when toggling the notification subscription" +msgstr "Se produjo un error al activar/desactivar la suscripción de notificación" + msgid "An error occurred when updating the issue weight" +msgstr "Se produjo un error al actualizar el peso de la incidencia" + +msgid "An error occurred while dismissing the feature highlight. Refresh the page and try dismissing again." +msgstr "" + +msgid "An error occurred while fetching markdown preview" msgstr "" msgid "An error occurred while fetching sidebar data" +msgstr "Se produjo un error al obtener datos de la barra lateral" + +msgid "An error occurred while getting projects" msgstr "" -msgid "An error occurred. Please try again." +msgid "An error occurred while loading filenames" msgstr "" -msgid "Appearance" +msgid "An error occurred while rendering KaTeX" msgstr "" -msgid "Applications" +msgid "An error occurred while rendering preview broadcast message" +msgstr "" + +msgid "An error occurred while retrieving calendar activity" msgstr "" +msgid "An error occurred while retrieving diff" +msgstr "" + +msgid "An error occurred while validating username" +msgstr "" + +msgid "An error occurred. Please try again." +msgstr "Se produjo un error. Por favor inténtelo de nuevo." + +msgid "Appearance" +msgstr "Apariencia" + +msgid "Applications" +msgstr "Aplicaciones" + msgid "Apr" msgstr "" msgid "April" -msgstr "" +msgstr "Abril" msgid "Archived project! Repository is read-only" msgstr "¡Proyecto archivado! El repositorio es de solo lectura" @@ -161,45 +233,60 @@ msgid "Are you sure you want to delete this pipeline schedule?" msgstr "¿Estás seguro que deseas eliminar esta programación del pipeline?" msgid "Are you sure you want to discard your changes?" -msgstr "" +msgstr "¿Está seguro que desea descartar sus cambios?" + +msgid "Are you sure you want to reset registration token?" +msgstr "¿Está seguro que desea reinicializar el token de registro?" + +msgid "Are you sure you want to reset the health check token?" +msgstr "¿Está seguro que desea reinicializar el token de Verificación de Estado?" + +msgid "Are you sure?" +msgstr "¿Estás seguro?" + +msgid "Artifacts" +msgstr "Artefactos" -msgid "Are you sure you want to leave this group?" +msgid "Assign custom color like #FF0000" msgstr "" -msgid "Are you sure you want to reset registration token?" +msgid "Assign labels" msgstr "" -msgid "Are you sure you want to reset the health check token?" +msgid "Assign milestone" msgstr "" -msgid "Are you sure?" +msgid "Assign to" msgstr "" -msgid "Artifacts" +msgid "Assignee" msgstr "" msgid "Attach a file by drag & drop or %{upload_link}" msgstr "Adjunte un archivo arrastrando & soltando o %{upload_link}" msgid "Aug" -msgstr "" +msgstr "Ago" msgid "August" -msgstr "" +msgstr "Agosto" msgid "Authentication Log" -msgstr "" +msgstr "Registro de Autenticación" msgid "Author" +msgstr "Autor" + +msgid "Authors: %{authors}" msgstr "" -msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly." +msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly." msgstr "" -msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly." +msgid "Auto Review Apps and Auto Deploy need a domain name and a %{kubernetes} to work correctly." msgstr "" -msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly." +msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly." msgstr "" msgid "AutoDevOps|Auto DevOps (Beta)" @@ -221,11 +308,17 @@ msgid "AutoDevOps|You can activate %{link_to_settings} for this project." msgstr "" msgid "Available" +msgstr "Disponible" + +msgid "Avatar will be removed. Are you sure?" msgstr "" -msgid "Billing" +msgid "Average per day: %{average}" msgstr "" +msgid "Billing" +msgstr "Facturación" + msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan." msgstr "" @@ -277,6 +370,9 @@ msgstr "" msgid "BillingPlans|per user" msgstr "" +msgid "Begin with the selected commit" +msgstr "" + msgid "Branch" msgid_plural "Branches" msgstr[0] "Rama" @@ -405,8 +501,8 @@ msgstr "por" msgid "CI / CD" msgstr "" -msgid "CI configuration" -msgstr "Configuración de CI" +msgid "CI/CD configuration" +msgstr "" msgid "CICD|Jobs" msgstr "" @@ -417,6 +513,9 @@ msgstr "Cancelar" msgid "Cancel edit" msgstr "" +msgid "Cannot modify managed Kubernetes cluster" +msgstr "" + msgid "Change Weight" msgstr "" @@ -432,15 +531,24 @@ msgstr "Cherry-pick" msgid "ChangeTypeAction|Revert" msgstr "Revertir" +msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes." +msgstr "" + msgid "Changelog" msgstr "" +msgid "Changes are shown as if the <b>source</b> revision was being merged into the <b>target</b> revision." +msgstr "" + msgid "Charts" msgstr "Gráficos" msgid "Chat" msgstr "" +msgid "Check interval" +msgstr "" + msgid "Checking %{text} availability…" msgstr "" @@ -453,7 +561,19 @@ msgstr "Escoger este cambio" msgid "Cherry-pick this merge request" msgstr "Escoger esta solicitud de fusión" -msgid "Choose which groups you wish to replicate to this secondary node. Leave blank to replicate all." +msgid "Choose File ..." +msgstr "" + +msgid "Choose a branch/tag (e.g. %{master}) or enter a commit (e.g. %{sha}) to see what's changed or to create a merge request." +msgstr "" + +msgid "Choose file..." +msgstr "" + +msgid "Choose which groups you wish to synchronize to this secondary node." +msgstr "" + +msgid "Choose which shards you wish to synchronize to this secondary node." msgstr "" msgid "CiStatusLabel|canceled" @@ -510,79 +630,91 @@ msgstr "omitido" msgid "CiStatus|running" msgstr "en ejecución" -msgid "CircuitBreakerApiLink|circuitbreaker api" +msgid "CiVariables|Input variable key" msgstr "" -msgid "Clone repository" +msgid "CiVariables|Input variable value" msgstr "" -msgid "Close" +msgid "CiVariables|Remove variable row" msgstr "" -msgid "Cluster" +msgid "CiVariable|* (All environments)" msgstr "" -msgid "ClusterIntegration|%{appList} was successfully installed on your cluster" +msgid "CiVariable|All environments" msgstr "" -msgid "ClusterIntegration|%{boldNotice} This will add some extra resources like a load balancer, which incur additional costs. See %{pricingLink}" +msgid "CiVariable|Create wildcard" msgstr "" -msgid "ClusterIntegration|API URL" +msgid "CiVariable|Error occured while saving variables" msgstr "" -msgid "ClusterIntegration|Active" +msgid "CiVariable|New environment" msgstr "" -msgid "ClusterIntegration|Add an existing cluster" +msgid "CiVariable|Protected" msgstr "" -msgid "ClusterIntegration|Add cluster" +msgid "CiVariable|Search environments" msgstr "" -msgid "ClusterIntegration|All" +msgid "CiVariable|Toggle protected" msgstr "" -msgid "ClusterIntegration|Applications" +msgid "CiVariable|Validation failed" msgstr "" -msgid "ClusterIntegration|CA Certificate" +msgid "CircuitBreakerApiLink|circuitbreaker api" msgstr "" -msgid "ClusterIntegration|Certificate Authority bundle (PEM format)" +msgid "Click to expand text" msgstr "" -msgid "ClusterIntegration|Choose how to set up cluster integration" +msgid "Clone repository" msgstr "" -msgid "ClusterIntegration|Cluster" +msgid "Close" msgstr "" -msgid "ClusterIntegration|Cluster details" +msgid "Closed" msgstr "" -msgid "ClusterIntegration|Cluster integration" +msgid "ClusterIntegration|%{appList} was successfully installed on your Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Cluster integration is disabled for this project." +msgid "ClusterIntegration|API URL" msgstr "" -msgid "ClusterIntegration|Cluster integration is enabled for this project." +msgid "ClusterIntegration|Add Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Cluster integration is enabled for this project. Disabling this integration will not affect your cluster, it will only temporarily turn off GitLab's connection to it." +msgid "ClusterIntegration|Add an existing Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Cluster is being created on Google Kubernetes Engine..." +msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration" msgstr "" -msgid "ClusterIntegration|Cluster name" +msgid "ClusterIntegration|Applications" msgstr "" -msgid "ClusterIntegration|Cluster was successfully created on Google Kubernetes Engine. Refresh the page to see cluster's details" +msgid "ClusterIntegration|Are you sure you want to remove this Kubernetes cluster's integration? This will not delete your actual Kubernetes cluster." msgstr "" -msgid "ClusterIntegration|Clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" +msgid "ClusterIntegration|CA Certificate" +msgstr "" + +msgid "ClusterIntegration|Certificate Authority bundle (PEM format)" +msgstr "" + +msgid "ClusterIntegration|Choose how to set up Kubernetes cluster integration" +msgstr "" + +msgid "ClusterIntegration|Choose which of your project's environments will use this Kubernetes cluster." +msgstr "" + +msgid "ClusterIntegration|Control how your Kubernetes cluster integrates with GitLab" msgstr "" msgid "ClusterIntegration|Copy API URL" @@ -591,37 +723,34 @@ msgstr "" msgid "ClusterIntegration|Copy CA Certificate" msgstr "" -msgid "ClusterIntegration|Copy Token" +msgid "ClusterIntegration|Copy Kubernetes cluster name" msgstr "" -msgid "ClusterIntegration|Copy cluster name" +msgid "ClusterIntegration|Copy Token" msgstr "" -msgid "ClusterIntegration|Create a new cluster on Google Engine right from GitLab" +msgid "ClusterIntegration|Create Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Create cluster" +msgid "ClusterIntegration|Create Kubernetes cluster on Google Kubernetes Engine" msgstr "" -msgid "ClusterIntegration|Create cluster on Google Kubernetes Engine" +msgid "ClusterIntegration|Create a new Kubernetes cluster on Google Kubernetes Engine right from GitLab" msgstr "" msgid "ClusterIntegration|Create on GKE" msgstr "" -msgid "ClusterIntegration|Enable cluster integration" -msgstr "" - msgid "ClusterIntegration|Enter the details for an existing Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Enter the details for your cluster" +msgid "ClusterIntegration|Enter the details for your Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Environment pattern" +msgid "ClusterIntegration|Environment scope" msgstr "" -msgid "ClusterIntegration|GKE pricing" +msgid "ClusterIntegration|GitLab Integration" msgstr "" msgid "ClusterIntegration|GitLab Runner" @@ -639,64 +768,94 @@ msgstr "" msgid "ClusterIntegration|Helm Tiller" msgstr "" -msgid "ClusterIntegration|Inactive" -msgstr "" - msgid "ClusterIntegration|Ingress" msgstr "" msgid "ClusterIntegration|Install" msgstr "" -msgid "ClusterIntegration|Install applications on your cluster. Read more about %{helpLink}" -msgstr "" - msgid "ClusterIntegration|Installed" msgstr "" msgid "ClusterIntegration|Installing" msgstr "" -msgid "ClusterIntegration|Integrate cluster automation" +msgid "ClusterIntegration|Integrate Kubernetes cluster automation" +msgstr "" + +msgid "ClusterIntegration|Integration status" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster details" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is disabled for this project." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project. Disabling this integration will not affect your Kubernetes cluster, it will only temporarily turn off GitLab's connection to it." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster is being created on Google Kubernetes Engine..." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster name" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters can be used to deploy applications and to provide Review Apps for this project" msgstr "" msgid "ClusterIntegration|Learn more about %{link_to_documentation}" msgstr "" -msgid "ClusterIntegration|Learn more about Clusters" +msgid "ClusterIntegration|Learn more about Kubernetes" msgstr "" -msgid "ClusterIntegration|Machine type" +msgid "ClusterIntegration|Learn more about environments" msgstr "" -msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create clusters" +msgid "ClusterIntegration|Machine type" msgstr "" -msgid "ClusterIntegration|Manage cluster integration on your GitLab project" +msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create Kubernetes clusters" msgstr "" -msgid "ClusterIntegration|Manage your cluster by visiting %{link_gke}" +msgid "ClusterIntegration|Manage" msgstr "" -msgid "ClusterIntegration|Multiple clusters are available in GitLab Entreprise Edition Premium and Ultimate" +msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}" msgstr "" -msgid "ClusterIntegration|Note:" +msgid "ClusterIntegration|More information" msgstr "" -msgid "ClusterIntegration|Number of nodes" +msgid "ClusterIntegration|Multiple Kubernetes clusters are available in GitLab Enterprise Edition Premium and Ultimate" msgstr "" -msgid "ClusterIntegration|Please enter access information for your cluster. If you need help, you can read our %{link_to_help_page} on clusters" +msgid "ClusterIntegration|Note:" msgstr "" -msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:" +msgid "ClusterIntegration|Number of nodes" msgstr "" -msgid "ClusterIntegration|Problem setting up the cluster" +msgid "ClusterIntegration|Please enter access information for your Kubernetes cluster. If you need help, you can read our %{link_to_help_page} on Kubernetes" msgstr "" -msgid "ClusterIntegration|Problem setting up the clusters list" +msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:" msgstr "" msgid "ClusterIntegration|Project ID" @@ -708,16 +867,19 @@ msgstr "" msgid "ClusterIntegration|Project namespace (optional, unique)" msgstr "" -msgid "ClusterIntegration|Read our %{link_to_help_page} on cluster integration." +msgid "ClusterIntegration|Prometheus" msgstr "" -msgid "ClusterIntegration|Remove cluster integration" +msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration." +msgstr "" + +msgid "ClusterIntegration|Remove Kubernetes cluster integration" msgstr "" msgid "ClusterIntegration|Remove integration" msgstr "" -msgid "ClusterIntegration|Removing cluster integration will remove the cluster configuration you have added to this project. It will not delete your cluster on Google Kubernetes Engine." +msgid "ClusterIntegration|Remove this Kubernetes cluster's configuration from this project. This will not delete your actual Kubernetes cluster." msgstr "" msgid "ClusterIntegration|Request to begin installing failed" @@ -726,7 +888,7 @@ msgstr "" msgid "ClusterIntegration|Save changes" msgstr "" -msgid "ClusterIntegration|See and edit the details for your cluster" +msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster" msgstr "" msgid "ClusterIntegration|See machine types" @@ -747,25 +909,25 @@ msgstr "" msgid "ClusterIntegration|Something went wrong on our end." msgstr "" -msgid "ClusterIntegration|Something went wrong while creating your cluster on Google Kubernetes Engine" +msgid "ClusterIntegration|Something went wrong while creating your Kubernetes cluster on Google Kubernetes Engine" msgstr "" msgid "ClusterIntegration|Something went wrong while installing %{title}" msgstr "" -msgid "ClusterIntegration|There are no clusters to show" +msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below" msgstr "" -msgid "ClusterIntegration|This account must have permissions to create a cluster in the %{link_to_container_project} specified below" +msgid "ClusterIntegration|Toggle Kubernetes Cluster" msgstr "" -msgid "ClusterIntegration|Toggle Cluster" +msgid "ClusterIntegration|Toggle Kubernetes cluster" msgstr "" msgid "ClusterIntegration|Token" msgstr "" -msgid "ClusterIntegration|With a cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." +msgid "ClusterIntegration|With a Kubernetes cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." msgstr "" msgid "ClusterIntegration|Your account must have %{link_to_kubernetes_engine}" @@ -777,7 +939,7 @@ msgstr "" msgid "ClusterIntegration|access to Google Kubernetes Engine" msgstr "" -msgid "ClusterIntegration|cluster" +msgid "ClusterIntegration|check the pricing here" msgstr "" msgid "ClusterIntegration|documentation" @@ -795,6 +957,9 @@ msgstr "" msgid "ClusterIntegration|properly configured" msgstr "" +msgid "Collapse" +msgstr "" + msgid "Comments" msgstr "" @@ -812,6 +977,9 @@ msgstr "Duración de los cambios en minutos para los últimos 30" msgid "Commit message" msgstr "Mensaje del cambio" +msgid "Commit statistics for %{ref} %{start_time} - %{end_time}" +msgstr "" + msgid "CommitBoxTitle|Commit" msgstr "Cambio" @@ -824,15 +992,57 @@ msgstr "Cambios" msgid "Commits feed" msgstr "Feed de cambios" +msgid "Commits per day hour (UTC)" +msgstr "" + +msgid "Commits per day of month" +msgstr "" + +msgid "Commits per weekday" +msgstr "" + +msgid "Commits|An error occurred while fetching merge requests data." +msgstr "" + +msgid "Commits|Commit: %{commitText}" +msgstr "" + msgid "Commits|History" msgstr "Historial" +msgid "Commits|No related merge requests found" +msgstr "" + msgid "Committed by" msgstr "Enviado por" msgid "Compare" msgstr "Comparar" +msgid "Compare Git revisions" +msgstr "" + +msgid "Compare Revisions" +msgstr "" + +msgid "CompareBranches|%{source_branch} and %{target_branch} are the same." +msgstr "" + +msgid "CompareBranches|Compare" +msgstr "" + +msgid "CompareBranches|Source" +msgstr "" + +msgid "CompareBranches|Target" +msgstr "" + +msgid "CompareBranches|There isn't anything to compare." +msgstr "" + +msgid "Confidentiality" +msgstr "" + msgid "Container Registry" msgstr "" @@ -884,6 +1094,9 @@ msgstr "GuÃa de contribución" msgid "Contributors" msgstr "Contribuidores" +msgid "ContributorsPage|%{startDate} – %{endDate}" +msgstr "" + msgid "ContributorsPage|Building repository graph." msgstr "" @@ -905,9 +1118,18 @@ msgstr "" msgid "Copy URL to clipboard" msgstr "Copiar URL al portapapeles" +msgid "Copy branch name to clipboard" +msgstr "" + msgid "Copy commit SHA to clipboard" msgstr "Copiar SHA del cambio al portapapeles" +msgid "Copy reference to clipboard" +msgstr "" + +msgid "Create" +msgstr "" + msgid "Create New Directory" msgstr "Crear Nuevo Directorio" @@ -926,6 +1148,9 @@ msgstr "" msgid "Create file" msgstr "" +msgid "Create lists from labels. Issues with that label appear in that list." +msgstr "" + msgid "Create merge request" msgstr "Crear solicitud de fusión" @@ -938,6 +1163,9 @@ msgstr "" msgid "Create new file" msgstr "" +msgid "Create new label" +msgstr "" + msgid "Create new..." msgstr "Crear nuevo..." @@ -959,6 +1187,9 @@ msgstr "Zona horaria del Cron" msgid "Cron syntax" msgstr "Sintaxis de Cron" +msgid "Current node" +msgstr "" + msgid "Custom notification events" msgstr "Eventos de notificaciones personalizadas" @@ -968,9 +1199,6 @@ msgstr "Los niveles de notificación personalizados son los mismos que los nivel msgid "Cycle Analytics" msgstr "" -msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project." -msgstr "Cycle Analytics ofrece una visión general de cuánto tiempo tarda en pasar de idea a producción en su proyecto." - msgid "CycleAnalyticsStage|Code" msgstr "Código" @@ -1027,12 +1255,21 @@ msgstr "" msgid "Details" msgstr "" +msgid "Diffs|No file name available" +msgstr "" + msgid "Directory name" msgstr "Nombre del directorio" +msgid "Disable" +msgstr "" + msgid "Discard changes" msgstr "" +msgid "Discover GitLab Geo." +msgstr "" + msgid "Dismiss Cycle Analytics introduction box" msgstr "" @@ -1069,15 +1306,24 @@ msgstr "Diferencias en texto plano" msgid "DownloadSource|Download" msgstr "Descargar" +msgid "Due date" +msgstr "" + msgid "Edit" msgstr "Editar" msgid "Edit Pipeline Schedule %{id}" msgstr "Editar Programación del Pipeline %{id}" +msgid "Edit files in the editor and commit changes here" +msgstr "" + msgid "Emails" msgstr "" +msgid "Enable" +msgstr "" + msgid "Environments|An error occurred while fetching the environments." msgstr "" @@ -1096,9 +1342,6 @@ msgstr "" msgid "Environments|Environments" msgstr "" -msgid "Environments|Environments are places where code gets deployed, such as staging or production." -msgstr "" - msgid "Environments|Job" msgstr "" @@ -1141,9 +1384,33 @@ msgstr "" msgid "Error creating epic" msgstr "" +msgid "Error fetching contributors data." +msgstr "" + +msgid "Error fetching labels." +msgstr "" + +msgid "Error fetching network graph." +msgstr "" + +msgid "Error fetching refs" +msgstr "" + +msgid "Error fetching usage ping data." +msgstr "" + msgid "Error occurred when toggling the notification subscription" msgstr "" +msgid "Error saving label update." +msgstr "" + +msgid "Error updating status for all todos." +msgstr "" + +msgid "Error updating todo status." +msgstr "" + msgid "EventFilterBy|Filter by all" msgstr "" @@ -1171,6 +1438,9 @@ msgstr "Todos los meses (el dÃa 1 a las 4:00 am)" msgid "Every week (Sundays at 4:00am)" msgstr "Todas las semanas (domingos a las 4:00 am)" +msgid "Expand" +msgstr "" + msgid "Explore projects" msgstr "" @@ -1189,6 +1459,9 @@ msgstr "" msgid "February" msgstr "" +msgid "Fields on this page are now uneditable, you can configure" +msgstr "" + msgid "File name" msgstr "" @@ -1233,10 +1506,10 @@ msgstr "Desde la integración de la solicitud de fusión hasta el despliegue a p msgid "GPG Keys" msgstr "" -msgid "Geo Nodes" +msgid "Generate a default set of labels" msgstr "" -msgid "GeoNodeSyncStatus|Failed" +msgid "Geo Nodes" msgstr "" msgid "GeoNodeSyncStatus|Node is failing or broken." @@ -1245,16 +1518,100 @@ msgstr "" msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage." msgstr "" -msgid "GeoNodeSyncStatus|Out of sync" +msgid "GeoNodes|Database replication lag:" +msgstr "" + +msgid "GeoNodes|Disabling a node stops the sync process. Are you sure?" +msgstr "" + +msgid "GeoNodes|Does not match the primary storage configuration" +msgstr "" + +msgid "GeoNodes|Failed" +msgstr "" + +msgid "GeoNodes|Full" +msgstr "" + +msgid "GeoNodes|GitLab version does not match the primary node version" +msgstr "" + +msgid "GeoNodes|GitLab version:" +msgstr "" + +msgid "GeoNodes|Health status:" +msgstr "" + +msgid "GeoNodes|Last event ID processed by cursor:" +msgstr "" + +msgid "GeoNodes|Last event ID seen from primary:" +msgstr "" + +msgid "GeoNodes|Loading nodes" +msgstr "" + +msgid "GeoNodes|Local Attachments:" +msgstr "" + +msgid "GeoNodes|Local LFS objects:" +msgstr "" + +msgid "GeoNodes|Local job artifacts:" +msgstr "" + +msgid "GeoNodes|New node" +msgstr "" + +msgid "GeoNodes|Out of sync" +msgstr "" + +msgid "GeoNodes|Replication slot WAL:" +msgstr "" + +msgid "GeoNodes|Replication slots:" +msgstr "" + +msgid "GeoNodes|Repositories:" +msgstr "" + +msgid "GeoNodes|Selective" msgstr "" -msgid "GeoNodeSyncStatus|Synced" +msgid "GeoNodes|Storage config:" +msgstr "" + +msgid "GeoNodes|Sync settings:" +msgstr "" + +msgid "GeoNodes|Synced" +msgstr "" + +msgid "GeoNodes|Unused slots" +msgstr "" + +msgid "GeoNodes|Used slots" +msgstr "" + +msgid "GeoNodes|Wikis:" +msgstr "" + +msgid "GeoNodes|You have configured Geo nodes using an insecure HTTP connection. We recommend the use of HTTPS." +msgstr "" + +msgid "Geo|All projects" msgstr "" msgid "Geo|File sync capacity" msgstr "" -msgid "Geo|Groups to replicate" +msgid "Geo|Groups to synchronize" +msgstr "" + +msgid "Geo|Projects in certain groups" +msgstr "" + +msgid "Geo|Projects in certain storage shards" msgstr "" msgid "Geo|Repository sync capacity" @@ -1263,12 +1620,24 @@ msgstr "" msgid "Geo|Select groups to replicate." msgstr "" +msgid "Geo|Shards to synchronize" +msgstr "" + +msgid "Git revision" +msgstr "" + msgid "Git storage health information has been reset" msgstr "" +msgid "Git version" +msgstr "" + msgid "GitLab Runner section" msgstr "" +msgid "Gitaly Servers" +msgstr "" + msgid "Go to your fork" msgstr "Ir a tu bifurcación" @@ -1278,6 +1647,9 @@ msgstr "Bifurcación" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it!" +msgstr "" + msgid "GroupSettings|Prevent sharing a project within %{group} with other groups" msgstr "" @@ -1314,7 +1686,7 @@ msgstr "" msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group." msgstr "" -msgid "GroupsTree|Are you sure you want to leave the \"${this.group.fullName}\" group?" +msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?" msgstr "" msgid "GroupsTree|Create a project in this group." @@ -1365,6 +1737,11 @@ msgstr "" msgid "HealthCheck|Unhealthy" msgstr "" +msgid "Hide value" +msgid_plural "Hide values" +msgstr[0] "" +msgstr[1] "" + msgid "History" msgstr "" @@ -1391,6 +1768,12 @@ msgid_plural "Instances" msgstr[0] "" msgstr[1] "" +msgid "Instance does not support multiple Kubernetes clusters" +msgstr "" + +msgid "Interested parties can even contribute by pushing commits if they want to." +msgstr "" + msgid "Internal - The group and any internal projects can be viewed by any logged in user." msgstr "" @@ -1418,6 +1801,9 @@ msgstr "" msgid "Issues" msgstr "" +msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable." +msgstr "" + msgid "Jan" msgstr "" @@ -1436,6 +1822,27 @@ msgstr "" msgid "June" msgstr "" +msgid "Kubernetes" +msgstr "" + +msgid "Kubernetes Cluster" +msgstr "" + +msgid "Kubernetes cluster creation time exceeds timeout; %{timeout}" +msgstr "" + +msgid "Kubernetes cluster integration was not removed." +msgstr "" + +msgid "Kubernetes cluster integration was successfully removed." +msgstr "" + +msgid "Kubernetes cluster was successfully updated." +msgstr "" + +msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page" +msgstr "" + msgid "LFSStatus|Disabled" msgstr "Deshabilitado" @@ -1445,6 +1852,9 @@ msgstr "Habilitado" msgid "Labels" msgstr "" +msgid "Labels can be applied to issues and merge requests to categorize them." +msgstr "" + msgid "Last %d day" msgid_plural "Last %d days" msgstr[0] "Último %d dÃa" @@ -1474,6 +1884,9 @@ msgstr "" msgid "LastPushEvent|at" msgstr "" +msgid "Learn more" +msgstr "" + msgid "Learn more in the" msgstr "Más información en la" @@ -1492,14 +1905,18 @@ msgstr "Abandonar proyecto" msgid "License" msgstr "" -msgid "Limited to showing %d event at most" -msgid_plural "Limited to showing %d events at most" -msgstr[0] "Limitado a mostrar máximo %d evento" -msgstr[1] "Limitado a mostrar máximo %d eventos" +msgid "Loading the GitLab IDE..." +msgstr "" msgid "Lock" msgstr "" +msgid "Lock %{issuableDisplayName}" +msgstr "" + +msgid "Lock this %{issuableDisplayName}? Only <strong>project members</strong> will be able to comment." +msgstr "" + msgid "Locked" msgstr "" @@ -1509,12 +1926,21 @@ msgstr "" msgid "Login" msgstr "" +msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos." +msgstr "" + +msgid "Manage labels" +msgstr "" + msgid "Mar" msgstr "" msgid "March" msgstr "" +msgid "Mark done" +msgstr "" + msgid "Maximum git storage failures" msgstr "" @@ -1527,6 +1953,9 @@ msgstr "Mediana" msgid "Members" msgstr "" +msgid "Merge Request" +msgstr "" + msgid "Merge Requests" msgstr "" @@ -1536,9 +1965,30 @@ msgstr "" msgid "Merge request" msgstr "" +msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others" +msgstr "" + +msgid "Merged" +msgstr "" + msgid "Messages" msgstr "" +msgid "Milestone" +msgstr "" + +msgid "Milestones|Delete milestone" +msgstr "" + +msgid "Milestones|Delete milestone %{milestoneTitle}?" +msgstr "" + +msgid "Milestones|Failed to delete milestone %{milestoneTitle}" +msgstr "" + +msgid "Milestones|Milestone %{milestoneTitle} was not found" +msgstr "" + msgid "MissingSSHKeyWarningLink|add an SSH key" msgstr "agregar una clave SSH" @@ -1548,10 +1998,16 @@ msgstr "" msgid "More information is available|here" msgstr "" +msgid "Move" +msgstr "" + +msgid "Move issue" +msgstr "" + msgid "Multiple issue boards" msgstr "" -msgid "New Cluster" +msgid "Name new label" msgstr "" msgid "New Issue" @@ -1559,6 +2015,12 @@ msgid_plural "New Issues" msgstr[0] "Nueva incidencia" msgstr[1] "Nuevas incidencias" +msgid "New Kubernetes Cluster" +msgstr "" + +msgid "New Kubernetes cluster" +msgstr "" + msgid "New Pipeline Schedule" msgstr "Nueva Programación del Pipeline" @@ -1583,6 +2045,9 @@ msgstr "" msgid "New issue" msgstr "Nueva incidencia" +msgid "New label" +msgstr "" + msgid "New merge request" msgstr "Nueva solicitud de fusión" @@ -1601,7 +2066,22 @@ msgstr "" msgid "New tag" msgstr "Nueva etiqueta" -msgid "No container images stored for this project. Add one by following the instructions above." +msgid "No assignee" +msgstr "" + +msgid "No changes" +msgstr "" + +msgid "No connection could be made to a Gitaly Server, please check your logs!" +msgstr "" + +msgid "No due date" +msgstr "" + +msgid "No estimate or time spent" +msgstr "" + +msgid "No file chosen" msgstr "" msgid "No repository" @@ -1616,9 +2096,15 @@ msgstr "" msgid "None" msgstr "" +msgid "Not allowed to merge" +msgstr "" + msgid "Not available" msgstr "No disponible" +msgid "Not confidential" +msgstr "" + msgid "Not enough data" msgstr "No hay suficientes datos" @@ -1679,6 +2165,12 @@ msgstr "Vigilancia" msgid "Notifications" msgstr "" +msgid "Notifications off" +msgstr "" + +msgid "Notifications on" +msgstr "" + msgid "Nov" msgstr "" @@ -1688,7 +2180,7 @@ msgstr "" msgid "Number of access attempts" msgstr "" -msgid "Number of failures before backing off" +msgid "OK" msgstr "" msgid "Oct" @@ -1703,6 +2195,9 @@ msgstr "Filtrar" msgid "Only project members can comment." msgstr "" +msgid "Open" +msgstr "" + msgid "Opened" msgstr "" @@ -1736,9 +2231,6 @@ msgstr "" msgid "Password" msgstr "" -msgid "People without permission will never get a notification and won\\'t be able to comment." -msgstr "" - msgid "Pipeline" msgstr "" @@ -1781,12 +2273,6 @@ msgstr "Todos" msgid "PipelineSchedules|Inactive" msgstr "Inactivos" -msgid "PipelineSchedules|Input variable key" -msgstr "Ingrese nombre de clave" - -msgid "PipelineSchedules|Input variable value" -msgstr "Ingrese el valor de la variable" - msgid "PipelineSchedules|Next Run" msgstr "Próxima Ejecución" @@ -1796,9 +2282,6 @@ msgstr "Ninguno" msgid "PipelineSchedules|Provide a short description for this pipeline" msgstr "Proporcione una descripción breve para este pipeline" -msgid "PipelineSchedules|Remove variable row" -msgstr "Eliminar fila de variable" - msgid "PipelineSchedules|Take ownership" msgstr "Tomar posesión" @@ -1826,6 +2309,12 @@ msgstr "" msgid "Pipelines for last year" msgstr "" +msgid "Pipelines|Build with confidence" +msgstr "" + +msgid "Pipelines|Get started with Pipelines" +msgstr "" + msgid "Pipeline|all" msgstr "todos" @@ -1838,12 +2327,21 @@ msgstr "con etapa" msgid "Pipeline|with stages" msgstr "con etapas" +msgid "Play" +msgstr "" + +msgid "Please <a href=%{link_to_billing} target=\"_blank\" rel=\"noopener noreferrer\">enable billing for one of your projects to be able to create a Kubernetes cluster</a>, then try again." +msgstr "" + msgid "Please solve the reCAPTCHA" msgstr "" msgid "Preferences" msgstr "" +msgid "Primary" +msgstr "" + msgid "Private - Project access must be granted explicitly to each user." msgstr "" @@ -1889,6 +2387,9 @@ msgstr "" msgid "Profiles|your account" msgstr "" +msgid "Programming languages used in this repository" +msgstr "" + msgid "Project '%{project_name}' is in the process of being deleted." msgstr "" @@ -1904,6 +2405,15 @@ msgstr "Proyecto ‘%{project_name}’ fue actualizado satisfactoriamente." msgid "Project access must be granted explicitly to each user." msgstr "El acceso al proyecto debe concederse explÃcitamente a cada usuario." +msgid "Project avatar" +msgstr "" + +msgid "Project avatar in repository: %{link}" +msgstr "" + +msgid "Project cache successfully reset." +msgstr "" + msgid "Project details" msgstr "" @@ -1922,6 +2432,21 @@ msgstr "Se inició la exportación del proyecto. Se enviará un enlace de descar msgid "ProjectActivityRSS|Subscribe" msgstr "" +msgid "ProjectCreationLevel|Allowed to create projects" +msgstr "" + +msgid "ProjectCreationLevel|Default project creation protection" +msgstr "" + +msgid "ProjectCreationLevel|Developers + Masters" +msgstr "" + +msgid "ProjectCreationLevel|Masters" +msgstr "" + +msgid "ProjectCreationLevel|No one" +msgstr "" + msgid "ProjectFeature|Disabled" msgstr "Deshabilitada" @@ -1946,15 +2471,9 @@ msgstr "Historial gráfico" msgid "ProjectSettings|Contact an admin to change this setting." msgstr "" -msgid "ProjectSettings|Immediately run a pipeline on the default branch" -msgstr "" - msgid "ProjectSettings|Only signed commits can be pushed to this repository." msgstr "" -msgid "ProjectSettings|Problem setting up the CI/CD settings JavaScript" -msgstr "" - msgid "ProjectSettings|This setting is applied on the server level and can be overridden by an admin." msgstr "" @@ -2024,6 +2543,9 @@ msgstr "" msgid "PrometheusService|View environments" msgstr "" +msgid "Protip:" +msgstr "" + msgid "Public - The group and any public projects can be viewed without any authentication." msgstr "" @@ -2039,6 +2561,9 @@ msgstr "" msgid "PushRule|Committer restriction" msgstr "" +msgid "Quick actions can be used in the issues description and comment boxes." +msgstr "" + msgid "Read more" msgstr "Leer más" @@ -2051,6 +2576,12 @@ msgstr "Ramas" msgid "RefSwitcher|Tags" msgstr "Etiquetas" +msgid "Reference:" +msgstr "" + +msgid "Register / Sign In" +msgstr "" + msgid "Registry" msgstr "" @@ -2075,9 +2606,18 @@ msgstr "Solicitudes de fusión Relacionadas" msgid "Remind later" msgstr "Recordar después" +msgid "Remove" +msgstr "" + +msgid "Remove avatar" +msgstr "" + msgid "Remove project" msgstr "Eliminar proyecto" +msgid "Repair authentication" +msgstr "" + msgid "Repository" msgstr "" @@ -2093,6 +2633,11 @@ msgstr "" msgid "Reset runners registration token" msgstr "" +msgid "Reveal value" +msgid_plural "Reveal values" +msgstr[0] "" +msgstr[1] "" + msgid "Revert this commit" msgstr "Revertir este cambio" @@ -2102,15 +2647,15 @@ msgstr "Revertir esta solicitud de fusión" msgid "SSH Keys" msgstr "" -msgid "Save" -msgstr "" - msgid "Save changes" msgstr "" msgid "Save pipeline schedule" msgstr "Guardar programación del pipeline" +msgid "Save variables" +msgstr "" + msgid "Schedule a new pipeline" msgstr "Programar un nuevo pipeline" @@ -2126,38 +2671,59 @@ msgstr "" msgid "Search branches and tags" msgstr "Buscar ramas y etiquetas" -msgid "Seconds before reseting failure information" +msgid "Search milestones" +msgstr "" + +msgid "Search project" msgstr "" -msgid "Seconds to wait after a storage failure" +msgid "Search users" +msgstr "" + +msgid "Seconds before reseting failure information" msgstr "" msgid "Seconds to wait for a storage access attempt" msgstr "" +msgid "Secret variables" +msgstr "" + msgid "Select Archive Format" msgstr "Seleccionar formato de archivo" msgid "Select a timezone" msgstr "Selecciona una zona horaria" +msgid "Select assignee" +msgstr "" + +msgid "Select branch/tag" +msgstr "" + msgid "Select target branch" msgstr "Selecciona una rama de destino" +msgid "Selective synchronization" +msgstr "" + msgid "Sep" msgstr "" msgid "September" msgstr "" +msgid "Server version" +msgstr "" + msgid "Service Templates" msgstr "" msgid "Set a password on your account to pull or push via %{protocol}." msgstr "Establezca una contraseña en su cuenta para actualizar o enviar a través de %{protocol}." -msgid "Set up CI" -msgstr "Configurar CI" +msgid "Set up CI/CD" +msgstr "" msgid "Set up Koding" msgstr "Configurar Koding" @@ -2171,6 +2737,15 @@ msgstr "establecer una contraseña" msgid "Settings" msgstr "" +msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero." +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset pipeline minutes" +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset used pipeline minutes" +msgstr "" + msgid "Show parent pages" msgstr "" @@ -2185,9 +2760,6 @@ msgstr[1] "Mostrando %d eventos" msgid "Sidebar|Change weight" msgstr "" -msgid "Sidebar|Edit" -msgstr "" - msgid "Sidebar|No" msgstr "" @@ -2200,18 +2772,30 @@ msgstr "" msgid "Snippets" msgstr "" +msgid "Something went wrong on our end" +msgstr "" + msgid "Something went wrong on our end." msgstr "" +msgid "Something went wrong trying to change the confidentiality of this issue" +msgstr "" + msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}" msgstr "" +msgid "Something went wrong when toggling the button" +msgstr "" + msgid "Something went wrong while fetching the projects." msgstr "" msgid "Something went wrong while fetching the registry list." msgstr "" +msgid "Something went wrong. Please try again." +msgstr "" + msgid "Sort by" msgstr "" @@ -2341,10 +2925,10 @@ msgstr "" msgid "Stopped" msgstr "" -msgid "Subgroups" +msgid "Storage" msgstr "" -msgid "Subscribe" +msgid "Subgroups" msgstr "" msgid "Switch branch/tag" @@ -2442,7 +3026,10 @@ msgstr "" msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project." msgstr "" -msgid "The circuitbreaker backoff threshold should be lower than the failure count threshold" +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project" +msgstr "" + +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project." msgstr "" msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request." @@ -2457,10 +3044,10 @@ msgstr "La relación con la bifurcación se ha eliminado." msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage." msgstr "La etapa de incidencia muestra el tiempo que toma desde la creación de un tema hasta asignar el tema a un hito, o añadir el tema a una lista en el panel de temas. Empieza a crear temas para ver los datos de esta etapa." -msgid "The number of attempts GitLab will make to access a storage." +msgid "The maximum file size allowed is 200KB." msgstr "" -msgid "The number of failures after which GitLab will start temporarily disabling access to a storage shard on a host" +msgid "The number of attempts GitLab will make to access a storage." msgstr "" msgid "The number of failures of after which GitLab will completely prevent access to the storage. The number of failures can be reset in the admin interface: %{link_to_health_page} or using the %{api_documentation_link}." @@ -2469,9 +3056,6 @@ msgstr "" msgid "The phase of the development lifecycle." msgstr "La etapa del ciclo de vida de desarrollo." -msgid "The pipelines schedule runs pipelines in the future, repeatedly, for specific branches or tags. Those scheduled pipelines will inherit limited project access based on their associated user." -msgstr "La programación de pipelines ejecuta pipelines en el futuro, repetidamente, para ramas o etiquetas especÃficas. Los pipelines programados heredarán acceso limitado al proyecto basado en su usuario asociado." - msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit." msgstr "La etapa de planificación muestra el tiempo desde el paso anterior hasta el envÃo de tu primera confirmación. Este tiempo se añadirá automáticamente una vez que usted envÃe el primer cambio." @@ -2502,19 +3086,46 @@ msgstr "" msgid "The time in seconds GitLab will try to access storage. After this time a timeout error will be raised." msgstr "" +msgid "The time in seconds between storage checks. When a previous check did complete yet, GitLab will skip a check." +msgstr "" + msgid "The time taken by each data entry gathered by that stage." msgstr "El tiempo utilizado por cada entrada de datos obtenido por esa etapa." msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6." msgstr "El valor en el punto medio de una serie de valores observados. Por ejemplo, entre 3, 5, 9, la mediana es 5. Entre 3, 5, 7, 8, la mediana es (5 + 7) / 2 = 6." +msgid "There are no issues to show" +msgstr "" + +msgid "There are no merge requests to show" +msgstr "" + msgid "There are problems accessing Git storage: " msgstr "" +msgid "There was an error loading users activity calendar." +msgstr "" + +msgid "There was an error saving your notification settings." +msgstr "" + +msgid "There was an error subscribing to this label." +msgstr "" + +msgid "There was an error when reseting email token." +msgstr "" + +msgid "There was an error when subscribing to this label." +msgstr "" + +msgid "There was an error when unsubscribing from this label." +msgstr "" + msgid "This board\\'s scope is reduced" msgstr "" -msgid "This branch has changed since you started editing. Would you like to create a new branch?" +msgid "This directory" msgstr "" msgid "This is a confidential issue." @@ -2523,18 +3134,45 @@ msgstr "" msgid "This is the author's first Merge Request to this project." msgstr "" +msgid "This issue is confidential" +msgstr "" + msgid "This issue is confidential and locked." msgstr "" msgid "This issue is locked." msgstr "" +msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments" +msgstr "" + +msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered" +msgstr "" + +msgid "This job has not been triggered yet" +msgstr "" + +msgid "This job has not started yet" +msgstr "" + +msgid "This job is in pending state and is waiting to be picked by a runner" +msgstr "" + +msgid "This job requires a manual action" +msgstr "" + msgid "This means you can not push code until you create an empty repository or import existing one." msgstr "Esto significa que no puede enviar código hasta que cree un repositorio vacÃo o importe uno existente." msgid "This merge request is locked." msgstr "" +msgid "This project" +msgstr "" + +msgid "This repository" +msgstr "" + msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here." msgstr "" @@ -2547,9 +3185,21 @@ msgstr "Tiempo antes de que empieze la implementación de una incidencia" msgid "Time between merge request creation and merge/close" msgstr "Tiempo entre la creación de la solicitud de fusión y la integración o cierre de ésta" +msgid "Time tracking" +msgstr "" + msgid "Time until first merge request" msgstr "Tiempo hasta la primera solicitud de fusión" +msgid "TimeTrackingEstimated|Est" +msgstr "" + +msgid "TimeTracking|Estimated:" +msgstr "" + +msgid "TimeTracking|Spent" +msgstr "" + msgid "Timeago|%s days ago" msgstr "hace %s dÃas" @@ -2689,6 +3339,18 @@ msgstr "s" msgid "Title" msgstr "" +msgid "Todo" +msgstr "" + +msgid "Toggle sidebar" +msgstr "" + +msgid "ToggleButton|Toggle Status: OFF" +msgstr "" + +msgid "ToggleButton|Toggle Status: ON" +msgstr "" + msgid "Total Time" msgstr "Tiempo Total" @@ -2704,19 +3366,40 @@ msgstr "" msgid "Track groups of issues that share a theme, across projects and milestones" msgstr "" +msgid "Total: %{total}" +msgstr "" + +msgid "Track time with quick actions" +msgstr "" + +msgid "Trigger this manual action" +msgstr "" + msgid "Turn on Service Desk" msgstr "" +msgid "Type %{value} to confirm:" +msgstr "" + +msgid "Unable to reset project cache." +msgstr "" + +msgid "Unknown" +msgstr "" + msgid "Unlock" msgstr "" +msgid "Unlock this %{issuableDisplayName}? <strong>Everyone</strong> will be able to comment." +msgstr "" + msgid "Unlocked" msgstr "" msgid "Unstar" msgstr "No Destacar" -msgid "Unsubscribe" +msgid "Up to date" msgstr "" msgid "Upgrade your plan to activate Advanced Global Search." @@ -2740,6 +3423,9 @@ msgstr "Subir nuevo archivo" msgid "Upload file" msgstr "Subir archivo" +msgid "Upload new avatar" +msgstr "" + msgid "UploadLink|click to upload" msgstr "Hacer clic para subir" @@ -2752,9 +3438,15 @@ msgstr "" msgid "Use your global notification setting" msgstr "Utiliza tu configuración de notificación global" +msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want." +msgstr "" + msgid "View file @ " msgstr "" +msgid "View labels" +msgstr "" + msgid "View open merge request" msgstr "Ver solicitud de fusión abierta" @@ -2776,6 +3468,9 @@ msgstr "Desconocido" msgid "Want to see the data? Please ask an administrator for access." msgstr "¿Quieres ver los datos? Por favor pide acceso al administrador." +msgid "We could not verify that one of your projects on GCP has billing enabled. Please try again." +msgstr "" + msgid "We don't have enough data to show this stage." msgstr "No hay suficientes datos para mostrar en esta etapa." @@ -2788,9 +3483,6 @@ msgstr "" msgid "Weight" msgstr "" -msgid "When access to a storage fails. GitLab will prevent access to the storage for the time specified here. This allows the filesystem to recover. Repositories on failing shards are temporarly unavailable" -msgstr "" - msgid "Wiki" msgstr "" @@ -2809,6 +3501,12 @@ msgstr "" msgid "WikiClone|Start Gollum and edit locally" msgstr "" +msgid "WikiEditPageTip|Tip: You can move this page by adding the path to the beginning of the title." +msgstr "" + +msgid "WikiEdit|There is already a page with the same title in that path." +msgstr "" + msgid "WikiEmptyPageError|You are not allowed to create wiki pages" msgstr "" @@ -2911,9 +3609,21 @@ msgstr "Vas a eliminar el enlace de la bifurcación con el proyecto original %{f msgid "You are going to transfer %{project_name_with_namespace} to another owner. Are you ABSOLUTELY sure?" msgstr "Vas a transferir %{project_name_with_namespace} a otro propietario. ¿Estás TOTALMENTE seguro?" +msgid "You can also star a label to make it a priority label." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + msgid "You can only add files when you are on a branch" msgstr "Solo puedes agregar archivos cuando estás en una rama" +msgid "You can only edit files when you are on a branch" +msgstr "" + msgid "You cannot write to a read-only secondary GitLab Geo instance. Please use %{link_to_primary_node} instead." msgstr "" @@ -2953,6 +3663,12 @@ msgstr "No podrás actualizar o enviar código al proyecto a través de SSH hast msgid "You won't be able to pull or push project code via SSH until you add an SSH key to your profile" msgstr "" +msgid "You'll need to use different branch names to get a valid comparison." +msgstr "" + +msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure" +msgstr "" + msgid "Your comment will not be visible to the public." msgstr "" @@ -2965,26 +3681,220 @@ msgstr "Tu nombre" msgid "Your projects" msgstr "" +msgid "assign yourself" +msgstr "" + msgid "branch name" msgstr "" msgid "by" msgstr "" +msgid "ciReport|Code quality" +msgstr "" + +msgid "ciReport|DAST detected no alerts by analyzing the review app" +msgstr "" + +msgid "ciReport|Failed to load ${type} report" +msgstr "" + +msgid "ciReport|Fixed:" +msgstr "" + +msgid "ciReport|Instances" +msgstr "" + +msgid "ciReport|Learn more about whitelisting" +msgstr "" + +msgid "ciReport|Loading ${type} report" +msgstr "" + +msgid "ciReport|No changes to code quality" +msgstr "" + +msgid "ciReport|No changes to performance metrics" +msgstr "" + +msgid "ciReport|Performance metrics" +msgstr "" + +msgid "ciReport|SAST" +msgstr "" + +msgid "ciReport|SAST detected no security vulnerabilities" +msgstr "" + +msgid "ciReport|SAST:container no vulnerabilities were found" +msgstr "" + +msgid "ciReport|Show complete code vulnerabilities report" +msgstr "" + +msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}" +msgstr "" + msgid "commit" msgstr "" +msgid "confidentiality|You are going to turn off the confidentiality. This means <strong>everyone</strong> will be able to see and leave a comment on this issue." +msgstr "" + +msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with <strong>at least Reporter access</strong> are able to see and leave comments on the issue." +msgstr "" + msgid "day" msgid_plural "days" msgstr[0] "dÃa" msgstr[1] "dÃas" +msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command." +msgstr "" + +msgid "merge request" +msgid_plural "merge requests" +msgstr[0] "" +msgstr[1] "" + +msgid "mrWidget|Cancel automatic merge" +msgstr "" + +msgid "mrWidget|Check out branch" +msgstr "" + +msgid "mrWidget|Checking ability to merge automatically" +msgstr "" + +msgid "mrWidget|Cherry-pick" +msgstr "" + +msgid "mrWidget|Cherry-pick this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Closed" +msgstr "" + +msgid "mrWidget|Closed by" +msgstr "" + +msgid "mrWidget|Closes" +msgstr "" + +msgid "mrWidget|Did not close" +msgstr "" + +msgid "mrWidget|Email patches" +msgstr "" + +msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|Mentions" +msgstr "" + +msgid "mrWidget|Merge" +msgstr "" + +msgid "mrWidget|Merge failed." +msgstr "" + +msgid "mrWidget|Merge locally" +msgstr "" + +msgid "mrWidget|Merged by" +msgstr "" + +msgid "mrWidget|Plain diff" +msgstr "" + +msgid "mrWidget|Refresh" +msgstr "" + +msgid "mrWidget|Refresh now" +msgstr "" + +msgid "mrWidget|Refreshing now" +msgstr "" + +msgid "mrWidget|Remove Source Branch" +msgstr "" + +msgid "mrWidget|Remove source branch" +msgstr "" + +msgid "mrWidget|Request to merge" +msgstr "" + +msgid "mrWidget|Resolve conflicts" +msgstr "" + +msgid "mrWidget|Revert" +msgstr "" + +msgid "mrWidget|Revert this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Set by" +msgstr "" + +msgid "mrWidget|The changes were merged into" +msgstr "" + +msgid "mrWidget|The changes were not merged into" +msgstr "" + +msgid "mrWidget|The changes will be merged into" +msgstr "" + +msgid "mrWidget|The source branch has been removed" +msgstr "" + +msgid "mrWidget|The source branch is being removed" +msgstr "" + +msgid "mrWidget|The source branch will be removed" +msgstr "" + +msgid "mrWidget|The source branch will not be removed" +msgstr "" + +msgid "mrWidget|There are merge conflicts" +msgstr "" + +msgid "mrWidget|This merge request failed to be merged automatically" +msgstr "" + +msgid "mrWidget|This merge request is in the process of being merged" +msgstr "" + +msgid "mrWidget|This project is archived, write access has been disabled" +msgstr "" + +msgid "mrWidget|You can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|You can remove source branch now" +msgstr "" + +msgid "mrWidget|command line" +msgstr "" + +msgid "mrWidget|into" +msgstr "" + +msgid "mrWidget|to be merged automatically when the pipeline succeeds" +msgstr "" + msgid "new merge request" msgstr "nueva solicitud de fusión" msgid "notification emails" msgstr "correos electrónicos de notificación" +msgid "or" +msgstr "" + msgid "parent" msgid_plural "parents" msgstr[0] "padre" @@ -2996,12 +3906,21 @@ msgstr "" msgid "personal access token" msgstr "" +msgid "remove due date" +msgstr "" + msgid "source" msgstr "" +msgid "spendCommand|%{slash_command} will update the sum of the time spent." +msgstr "" + msgid "to help your contributors communicate effectively!" msgstr "" msgid "username" msgstr "" +msgid "uses Kubernetes clusters to deploy your code!" +msgstr "" + diff --git a/locale/fr/gitlab.po b/locale/fr/gitlab.po index 2a713917684..d176e67937f 100644 --- a/locale/fr/gitlab.po +++ b/locale/fr/gitlab.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: gitlab-ee\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-12-12 18:31+0000\n" -"PO-Revision-Date: 2018-01-05 04:40-0500\n" +"POT-Creation-Date: 2018-02-07 11:38-0600\n" +"PO-Revision-Date: 2018-02-12 03:59-0500\n" "Last-Translator: gitlab <mbartlett+crowdin@gitlab.com>\n" "Language-Team: French\n" "Language: fr_FR\n" @@ -16,23 +16,41 @@ msgstr "" "X-Crowdin-Language: fr\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" +msgid " and" +msgstr "" + msgid "%d commit" msgid_plural "%d commits" -msgstr[0] "%d validation" -msgstr[1] "%d validations" +msgstr[0] "%d commit" +msgstr[1] "%d commits" + +msgid "%d commit behind" +msgid_plural "%d commits behind" +msgstr[0] "" +msgstr[1] "" + +msgid "%d issue" +msgid_plural "%d issues" +msgstr[0] "" +msgstr[1] "" msgid "%d layer" msgid_plural "%d layers" msgstr[0] "%d couche" msgstr[1] "%d couches" +msgid "%d merge request" +msgid_plural "%d merge requests" +msgstr[0] "" +msgstr[1] "" + msgid "%s additional commit has been omitted to prevent performance issues." msgid_plural "%s additional commits have been omitted to prevent performance issues." msgstr[0] "%s validation supplémentaire a été masquée afin d'éviter de créer de problèmes de performances." msgstr[1] "%s validations supplémentaires ont été masquées afin d'éviter de créer de problèmes de performances." -msgid "%{commit_author_link} committed %{commit_timeago}" -msgstr "%{commit_author_link} a validé %{commit_timeago}" +msgid "%{commit_author_link} authored %{commit_timeago}" +msgstr "" msgid "%{count} participant" msgid_plural "%{count} participants" @@ -45,9 +63,6 @@ msgstr "%{number_commits_behind} validations de retard sur %{default_branch}, %{ msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt." msgstr "%{number_of_failures} sur %{maximum_failures} tentative(s). GitLab va vous permettre d'accéder à la prochaine tentative." -msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will block access for %{number_of_seconds} seconds." -msgstr "%{number_of_failures} échecs sur %{maximum_failures}. GitLab va bloquer l’accès pendant %{number_of_seconds} secondes." - msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will not retry automatically. Reset storage information when the problem is resolved." msgstr "%{number_of_failures} échecs sur %{maximum_failures}. GitLab ne va plus réessayer automatiquement. Réinitialisez les informations de stockage lorsque le problème est résolu." @@ -121,24 +136,81 @@ msgstr "Ajouter une licence" msgid "Add new directory" msgstr "Ajouter un nouveau dossier" +msgid "Add todo" +msgstr "" + +msgid "AdminArea|Stop all jobs" +msgstr "" + +msgid "AdminArea|Stop all jobs?" +msgstr "" + +msgid "AdminArea|Stop jobs" +msgstr "" + +msgid "AdminArea|Stopping jobs failed" +msgstr "" + +msgid "AdminArea|You’re about to stop all jobs. This will halt all current jobs that are running." +msgstr "" + msgid "AdminHealthPageLink|health page" msgstr "État des services" +msgid "Advanced" +msgstr "" + msgid "Advanced settings" msgstr "Paramètres avancés" msgid "All" msgstr "Tous" +msgid "All changes are committed" +msgstr "" + +msgid "Allows you to add and manage Kubernetes clusters." +msgstr "" + +msgid "An error occurred previewing the blob" +msgstr "" + msgid "An error occurred when toggling the notification subscription" msgstr "Une erreur s’est produite lors de l’activation/désactivation de l’abonnement aux notifications" msgid "An error occurred when updating the issue weight" msgstr "Une erreur s'est produite lors de la mise à jour du poids du ticket" +msgid "An error occurred while dismissing the feature highlight. Refresh the page and try dismissing again." +msgstr "" + +msgid "An error occurred while fetching markdown preview" +msgstr "" + msgid "An error occurred while fetching sidebar data" msgstr "Une erreur s'est produite lors de la récupération des données de la barre latérale" +msgid "An error occurred while getting projects" +msgstr "" + +msgid "An error occurred while loading filenames" +msgstr "" + +msgid "An error occurred while rendering KaTeX" +msgstr "" + +msgid "An error occurred while rendering preview broadcast message" +msgstr "" + +msgid "An error occurred while retrieving calendar activity" +msgstr "" + +msgid "An error occurred while retrieving diff" +msgstr "" + +msgid "An error occurred while validating username" +msgstr "" + msgid "An error occurred. Please try again." msgstr "Une erreur est survenue. Merci de réessayer." @@ -163,9 +235,6 @@ msgstr "Êtes-vous sûr·e de vouloir supprimer ce pipeline programmé ?" msgid "Are you sure you want to discard your changes?" msgstr "Êtes-vous sûr·e de vouloir annuler vos modifications ?" -msgid "Are you sure you want to leave this group?" -msgstr "Êtes-vous sûr·e de vouloir quitter ce groupe ?" - msgid "Are you sure you want to reset registration token?" msgstr "Êtes-vous sûr·e de vouloir réinitialiser le jeton d’inscription ?" @@ -178,6 +247,21 @@ msgstr "Êtes-vous certain ?" msgid "Artifacts" msgstr "Artéfacts" +msgid "Assign custom color like #FF0000" +msgstr "" + +msgid "Assign labels" +msgstr "" + +msgid "Assign milestone" +msgstr "" + +msgid "Assign to" +msgstr "" + +msgid "Assignee" +msgstr "" + msgid "Attach a file by drag & drop or %{upload_link}" msgstr "Attachez un fichier par glisser & déposer ou %{upload_link}" @@ -193,15 +277,18 @@ msgstr "Journal d'authentification" msgid "Author" msgstr "Auteur" -msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly." -msgstr "Les applications de révision automatique et le déploiement automatique requièrent un nom de domaine et un %{kubernetes} pour fonctionner correctement." +msgid "Authors: %{authors}" +msgstr "" + +msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly." +msgstr "" + +msgid "Auto Review Apps and Auto Deploy need a domain name and a %{kubernetes} to work correctly." +msgstr "" msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly." msgstr "Les applications de révision automatique et de déploiement automatique requièrent un nom de domaine pour fonctionner correctement." -msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly." -msgstr "Les applications de révision automatique et de déploiement automatique requièrent un %{kubernetes} pour fonctionner correctement." - msgid "AutoDevOps|Auto DevOps (Beta)" msgstr "Auto DevOps (Béta)" @@ -223,6 +310,12 @@ msgstr "Vous pouvez activer %{link_to_settings} pour ce projet." msgid "Available" msgstr "Disponible" +msgid "Avatar will be removed. Are you sure?" +msgstr "" + +msgid "Average per day: %{average}" +msgstr "" + msgid "Billing" msgstr "Facturation" @@ -277,6 +370,9 @@ msgstr "payé annuellement pour %{price_per_year}" msgid "BillingPlans|per user" msgstr "par utilisateur" +msgid "Begin with the selected commit" +msgstr "" + msgid "Branch" msgid_plural "Branches" msgstr[0] "Branche" @@ -405,8 +501,8 @@ msgstr "par" msgid "CI / CD" msgstr "Intégration continu / Déploiement continu" -msgid "CI configuration" -msgstr "Configuration de l'intégration continue (CI)" +msgid "CI/CD configuration" +msgstr "" msgid "CICD|Jobs" msgstr "Tâches" @@ -417,6 +513,9 @@ msgstr "Annuler" msgid "Cancel edit" msgstr "Annuler modification" +msgid "Cannot modify managed Kubernetes cluster" +msgstr "" + msgid "Change Weight" msgstr "Changer le poids" @@ -432,15 +531,24 @@ msgstr "Picorer" msgid "ChangeTypeAction|Revert" msgstr "Défaire" +msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes." +msgstr "" + msgid "Changelog" msgstr "Journal des modifications" +msgid "Changes are shown as if the <b>source</b> revision was being merged into the <b>target</b> revision." +msgstr "" + msgid "Charts" msgstr "Statistiques" msgid "Chat" msgstr "Chat" +msgid "Check interval" +msgstr "" + msgid "Checking %{text} availability…" msgstr "Vérification de la disponibilité de %{text}…" @@ -453,8 +561,20 @@ msgstr "Picorer cette validation" msgid "Cherry-pick this merge request" msgstr "Picorer cette demande de fusion" -msgid "Choose which groups you wish to replicate to this secondary node. Leave blank to replicate all." -msgstr "Choisissez quels groupes vous souhaitez répliquer sur le nÅ“ud secondaire. Laissez vide pour tous les répliquer." +msgid "Choose File ..." +msgstr "" + +msgid "Choose a branch/tag (e.g. %{master}) or enter a commit (e.g. %{sha}) to see what's changed or to create a merge request." +msgstr "" + +msgid "Choose file..." +msgstr "" + +msgid "Choose which groups you wish to synchronize to this secondary node." +msgstr "" + +msgid "Choose which shards you wish to synchronize to this secondary node." +msgstr "" msgid "CiStatusLabel|canceled" msgstr "annulé" @@ -510,224 +630,266 @@ msgstr "ignoré" msgid "CiStatus|running" msgstr "en cours" +msgid "CiVariables|Input variable key" +msgstr "" + +msgid "CiVariables|Input variable value" +msgstr "" + +msgid "CiVariables|Remove variable row" +msgstr "" + +msgid "CiVariable|* (All environments)" +msgstr "" + +msgid "CiVariable|All environments" +msgstr "" + +msgid "CiVariable|Create wildcard" +msgstr "" + +msgid "CiVariable|Error occured while saving variables" +msgstr "" + +msgid "CiVariable|New environment" +msgstr "" + +msgid "CiVariable|Protected" +msgstr "" + +msgid "CiVariable|Search environments" +msgstr "" + +msgid "CiVariable|Toggle protected" +msgstr "" + +msgid "CiVariable|Validation failed" +msgstr "" + msgid "CircuitBreakerApiLink|circuitbreaker api" msgstr "CircuitBreaker API" +msgid "Click to expand text" +msgstr "" + msgid "Clone repository" msgstr "Cloner le dépôt" msgid "Close" msgstr "Fermer" -msgid "Cluster" -msgstr "Cluster" - -msgid "ClusterIntegration|%{appList} was successfully installed on your cluster" -msgstr "%{appList} a été installé avec succès sur votre cluster" +msgid "Closed" +msgstr "" -msgid "ClusterIntegration|%{boldNotice} This will add some extra resources like a load balancer, which incur additional costs. See %{pricingLink}" -msgstr "%{boldNotice} Cela va ajouter des ressources supplémentaires comme un répartiteur de charge, qui engendrent des coûts supplémentaires. Voir %{pricingLink}" +msgid "ClusterIntegration|%{appList} was successfully installed on your Kubernetes cluster" +msgstr "" msgid "ClusterIntegration|API URL" msgstr "URL de l'API" -msgid "ClusterIntegration|Active" -msgstr "Actif" - -msgid "ClusterIntegration|Add an existing cluster" -msgstr "Ajouter un cluster existant" +msgid "ClusterIntegration|Add Kubernetes cluster" +msgstr "" -msgid "ClusterIntegration|Add cluster" -msgstr "Ajoutez le cluster" +msgid "ClusterIntegration|Add an existing Kubernetes cluster" +msgstr "" -msgid "ClusterIntegration|All" -msgstr "Tous" +msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration" +msgstr "" msgid "ClusterIntegration|Applications" msgstr "Applications" +msgid "ClusterIntegration|Are you sure you want to remove this Kubernetes cluster's integration? This will not delete your actual Kubernetes cluster." +msgstr "" + msgid "ClusterIntegration|CA Certificate" msgstr "Certificat d‘autorité de certification" msgid "ClusterIntegration|Certificate Authority bundle (PEM format)" msgstr "Paquet de l‘Autorité de certification (format PEM)" -msgid "ClusterIntegration|Choose how to set up cluster integration" -msgstr "Choisissez comment configurer l‘intégration de cluster" - -msgid "ClusterIntegration|Cluster" -msgstr "" - -msgid "ClusterIntegration|Cluster details" -msgstr "Détails du cluster" - -msgid "ClusterIntegration|Cluster integration" -msgstr "Intégration du cluster" - -msgid "ClusterIntegration|Cluster integration is disabled for this project." -msgstr "L'intégration du cluster est désactivée pour ce projet." - -msgid "ClusterIntegration|Cluster integration is enabled for this project." -msgstr "L'intégration du cluster est activée pour ce projet." - -msgid "ClusterIntegration|Cluster integration is enabled for this project. Disabling this integration will not affect your cluster, it will only temporarily turn off GitLab's connection to it." -msgstr "L'intégration de cluster est activée pour ce projet. La désactivation de cette intégration n’affectera pas votre cluster, il coupera temporairement la connexion de GitLab à celui-ci." - -msgid "ClusterIntegration|Cluster is being created on Google Kubernetes Engine..." +msgid "ClusterIntegration|Choose how to set up Kubernetes cluster integration" msgstr "" -msgid "ClusterIntegration|Cluster name" -msgstr "Nom du cluster" - -msgid "ClusterIntegration|Cluster was successfully created on Google Kubernetes Engine. Refresh the page to see cluster's details" +msgid "ClusterIntegration|Choose which of your project's environments will use this Kubernetes cluster." msgstr "" -msgid "ClusterIntegration|Clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" +msgid "ClusterIntegration|Control how your Kubernetes cluster integrates with GitLab" msgstr "" msgid "ClusterIntegration|Copy API URL" -msgstr "" +msgstr "Copier l’URL de l’API" msgid "ClusterIntegration|Copy CA Certificate" -msgstr "" +msgstr "Copier le certificat CA" -msgid "ClusterIntegration|Copy Token" +msgid "ClusterIntegration|Copy Kubernetes cluster name" msgstr "" -msgid "ClusterIntegration|Copy cluster name" -msgstr "Copier le nom du cluster" +msgid "ClusterIntegration|Copy Token" +msgstr "Copier le jeton" -msgid "ClusterIntegration|Create a new cluster on Google Engine right from GitLab" +msgid "ClusterIntegration|Create Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Create cluster" -msgstr "Créer le cluster" - -msgid "ClusterIntegration|Create cluster on Google Kubernetes Engine" +msgid "ClusterIntegration|Create Kubernetes cluster on Google Kubernetes Engine" msgstr "" -msgid "ClusterIntegration|Create on GKE" +msgid "ClusterIntegration|Create a new Kubernetes cluster on Google Kubernetes Engine right from GitLab" msgstr "" -msgid "ClusterIntegration|Enable cluster integration" -msgstr "Activer l’intégration du cluster" +msgid "ClusterIntegration|Create on GKE" +msgstr "Créer sur GKE" msgid "ClusterIntegration|Enter the details for an existing Kubernetes cluster" -msgstr "" +msgstr "Entrer les détails pour le cluster Kubernetes existant" -msgid "ClusterIntegration|Enter the details for your cluster" +msgid "ClusterIntegration|Enter the details for your Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Environment pattern" +msgid "ClusterIntegration|Environment scope" msgstr "" -msgid "ClusterIntegration|GKE pricing" +msgid "ClusterIntegration|GitLab Integration" msgstr "" msgid "ClusterIntegration|GitLab Runner" -msgstr "" +msgstr "Éxécuteur GitLab" msgid "ClusterIntegration|Google Cloud Platform project ID" msgstr "ID de projet Google Cloud Platform" msgid "ClusterIntegration|Google Kubernetes Engine" -msgstr "" +msgstr "Google Kubernetes Engine" msgid "ClusterIntegration|Google Kubernetes Engine project" -msgstr "" +msgstr "Projet Google Kubernetes Engine" msgid "ClusterIntegration|Helm Tiller" +msgstr "Helm Tiller" + +msgid "ClusterIntegration|Ingress" +msgstr "Ingress" + +msgid "ClusterIntegration|Install" +msgstr "Installer" + +msgid "ClusterIntegration|Installed" +msgstr "Installé" + +msgid "ClusterIntegration|Installing" +msgstr "En cours d’installation" + +msgid "ClusterIntegration|Integrate Kubernetes cluster automation" msgstr "" -msgid "ClusterIntegration|Inactive" +msgid "ClusterIntegration|Integration status" msgstr "" -msgid "ClusterIntegration|Ingress" +msgid "ClusterIntegration|Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Install" +msgid "ClusterIntegration|Kubernetes cluster details" msgstr "" -msgid "ClusterIntegration|Install applications on your cluster. Read more about %{helpLink}" +msgid "ClusterIntegration|Kubernetes cluster integration" msgstr "" -msgid "ClusterIntegration|Installed" +msgid "ClusterIntegration|Kubernetes cluster integration is disabled for this project." msgstr "" -msgid "ClusterIntegration|Installing" +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project. Disabling this integration will not affect your Kubernetes cluster, it will only temporarily turn off GitLab's connection to it." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster is being created on Google Kubernetes Engine..." msgstr "" -msgid "ClusterIntegration|Integrate cluster automation" +msgid "ClusterIntegration|Kubernetes cluster name" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters can be used to deploy applications and to provide Review Apps for this project" msgstr "" msgid "ClusterIntegration|Learn more about %{link_to_documentation}" msgstr "En savoir plus sur %{link_to_documentation}" -msgid "ClusterIntegration|Learn more about Clusters" +msgid "ClusterIntegration|Learn more about Kubernetes" +msgstr "" + +msgid "ClusterIntegration|Learn more about environments" msgstr "" msgid "ClusterIntegration|Machine type" msgstr "Type de machine" -msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create clusters" -msgstr "Assurez-vous que votre compte %{link_to_requirements} pour créer des clusters" +msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create Kubernetes clusters" +msgstr "" -msgid "ClusterIntegration|Manage cluster integration on your GitLab project" +msgid "ClusterIntegration|Manage" msgstr "" -msgid "ClusterIntegration|Manage your cluster by visiting %{link_gke}" -msgstr "Gérer votre cluster en visitant le lien %{link_gke}" +msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}" +msgstr "" -msgid "ClusterIntegration|Multiple clusters are available in GitLab Entreprise Edition Premium and Ultimate" +msgid "ClusterIntegration|More information" msgstr "" -msgid "ClusterIntegration|Note:" +msgid "ClusterIntegration|Multiple Kubernetes clusters are available in GitLab Enterprise Edition Premium and Ultimate" msgstr "" +msgid "ClusterIntegration|Note:" +msgstr "Remarque :" + msgid "ClusterIntegration|Number of nodes" msgstr "Nombre de nÅ“uds" -msgid "ClusterIntegration|Please enter access information for your cluster. If you need help, you can read our %{link_to_help_page} on clusters" +msgid "ClusterIntegration|Please enter access information for your Kubernetes cluster. If you need help, you can read our %{link_to_help_page} on Kubernetes" msgstr "" msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:" msgstr "Veuillez vous assurer que votre compte Google répond aux exigences suivantes : " -msgid "ClusterIntegration|Problem setting up the cluster" -msgstr "" - -msgid "ClusterIntegration|Problem setting up the clusters list" -msgstr "" - msgid "ClusterIntegration|Project ID" -msgstr "" +msgstr "ID du projet" msgid "ClusterIntegration|Project namespace" -msgstr "" +msgstr "Espace de noms du projet" msgid "ClusterIntegration|Project namespace (optional, unique)" msgstr "Espace de noms du projet (facultatif, unique)" -msgid "ClusterIntegration|Read our %{link_to_help_page} on cluster integration." -msgstr "Lire notre %{link_to_help_page} sur l’intégration d’un cluster." +msgid "ClusterIntegration|Prometheus" +msgstr "" + +msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration." +msgstr "" -msgid "ClusterIntegration|Remove cluster integration" -msgstr "Retirer l’intégration du cluster" +msgid "ClusterIntegration|Remove Kubernetes cluster integration" +msgstr "" msgid "ClusterIntegration|Remove integration" msgstr "Retirer l’intégration" -msgid "ClusterIntegration|Removing cluster integration will remove the cluster configuration you have added to this project. It will not delete your cluster on Google Kubernetes Engine." +msgid "ClusterIntegration|Remove this Kubernetes cluster's configuration from this project. This will not delete your actual Kubernetes cluster." msgstr "" msgid "ClusterIntegration|Request to begin installing failed" -msgstr "" +msgstr "La demande de lancement d'installation a échoué" msgid "ClusterIntegration|Save changes" -msgstr "" +msgstr "Enregistrer les modifications" -msgid "ClusterIntegration|See and edit the details for your cluster" -msgstr "Voir et modifier les détails de votre cluster" +msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster" +msgstr "" msgid "ClusterIntegration|See machine types" msgstr "Voir les types de machine" @@ -739,55 +901,55 @@ msgid "ClusterIntegration|See zones" msgstr "Voir les zones" msgid "ClusterIntegration|Service token" -msgstr "" +msgstr "Jeton de service" msgid "ClusterIntegration|Show" -msgstr "" +msgstr "Afficher" msgid "ClusterIntegration|Something went wrong on our end." msgstr "Un problème est survenu de notre côté." -msgid "ClusterIntegration|Something went wrong while creating your cluster on Google Kubernetes Engine" +msgid "ClusterIntegration|Something went wrong while creating your Kubernetes cluster on Google Kubernetes Engine" msgstr "" msgid "ClusterIntegration|Something went wrong while installing %{title}" -msgstr "" +msgstr "Une erreur s’est produite lors de l'installation de %{title}" -msgid "ClusterIntegration|There are no clusters to show" +msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below" msgstr "" -msgid "ClusterIntegration|This account must have permissions to create a cluster in the %{link_to_container_project} specified below" +msgid "ClusterIntegration|Toggle Kubernetes Cluster" msgstr "" -msgid "ClusterIntegration|Toggle Cluster" -msgstr "Activer/désactiver le cluster" +msgid "ClusterIntegration|Toggle Kubernetes cluster" +msgstr "" msgid "ClusterIntegration|Token" -msgstr "" +msgstr "Jeton" -msgid "ClusterIntegration|With a cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." -msgstr "Avec un cluster associé à ce projet, vous pouvez utiliser des applications de revue, déployer vos applications, exécuter vos pipelines et bien plus encore, de manière très simple." +msgid "ClusterIntegration|With a Kubernetes cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." +msgstr "" msgid "ClusterIntegration|Your account must have %{link_to_kubernetes_engine}" -msgstr "" +msgstr "Votre compte doit disposer de %{link_to_kubernetes_engine}" msgid "ClusterIntegration|Zone" msgstr "Zone" msgid "ClusterIntegration|access to Google Kubernetes Engine" -msgstr "" +msgstr "Accèder à Google Kubernetes Engine" -msgid "ClusterIntegration|cluster" -msgstr "cluster" +msgid "ClusterIntegration|check the pricing here" +msgstr "" msgid "ClusterIntegration|documentation" -msgstr "" +msgstr "documentation" msgid "ClusterIntegration|help page" msgstr "page d’aide" msgid "ClusterIntegration|installing applications" -msgstr "" +msgstr "Installation des applications" msgid "ClusterIntegration|meets the requirements" msgstr "répond aux exigences" @@ -795,6 +957,9 @@ msgstr "répond aux exigences" msgid "ClusterIntegration|properly configured" msgstr "correctement configuré" +msgid "Collapse" +msgstr "" + msgid "Comments" msgstr "Commentaires" @@ -812,6 +977,9 @@ msgstr "Durée des 30 derniers pipelines en minutes" msgid "Commit message" msgstr "Message de validation" +msgid "Commit statistics for %{ref} %{start_time} - %{end_time}" +msgstr "" + msgid "CommitBoxTitle|Commit" msgstr "Validation" @@ -824,15 +992,57 @@ msgstr "Validations" msgid "Commits feed" msgstr "Flux de validations" +msgid "Commits per day hour (UTC)" +msgstr "" + +msgid "Commits per day of month" +msgstr "" + +msgid "Commits per weekday" +msgstr "" + +msgid "Commits|An error occurred while fetching merge requests data." +msgstr "" + +msgid "Commits|Commit: %{commitText}" +msgstr "" + msgid "Commits|History" msgstr "Historique" +msgid "Commits|No related merge requests found" +msgstr "" + msgid "Committed by" msgstr "Validé par" msgid "Compare" msgstr "Comparer" +msgid "Compare Git revisions" +msgstr "" + +msgid "Compare Revisions" +msgstr "" + +msgid "CompareBranches|%{source_branch} and %{target_branch} are the same." +msgstr "" + +msgid "CompareBranches|Compare" +msgstr "" + +msgid "CompareBranches|Source" +msgstr "" + +msgid "CompareBranches|Target" +msgstr "" + +msgid "CompareBranches|There isn't anything to compare." +msgstr "" + +msgid "Confidentiality" +msgstr "" + msgid "Container Registry" msgstr "Registre de conteneur" @@ -884,20 +1094,23 @@ msgstr "Guide de contribution" msgid "Contributors" msgstr "Contributeurs" -msgid "ContributorsPage|Building repository graph." +msgid "ContributorsPage|%{startDate} – %{endDate}" msgstr "" +msgid "ContributorsPage|Building repository graph." +msgstr "Construction du graphique du dépôt." + msgid "ContributorsPage|Commits to %{branch_name}, excluding merge commits. Limited to 6,000 commits." -msgstr "" +msgstr "Validations sur %{branch_name}, à l’exclusion des validations de fusion. Limité à 6 000 validations." msgid "ContributorsPage|Please wait a moment, this page will automatically refresh when ready." -msgstr "" +msgstr "Veuillez patienter, cette page va être automatiquement actualisée." msgid "Control the maximum concurrency of LFS/attachment backfill for this secondary node" -msgstr "" +msgstr "Contrôler la concurrence maximale des remplacements de fichier-joint LFS pour ce nÅ“ud secondaire" msgid "Control the maximum concurrency of repository backfill for this secondary node" -msgstr "" +msgstr "Contrôler la concurrence maximale des remplacements de dépôt pour ce nÅ“ud secondaire" msgid "Copy SSH public key to clipboard" msgstr "Copier la clé publique SSH dans le presse-papier" @@ -905,9 +1118,18 @@ msgstr "Copier la clé publique SSH dans le presse-papier" msgid "Copy URL to clipboard" msgstr "Copier l'URL dans le presse-papier" +msgid "Copy branch name to clipboard" +msgstr "" + msgid "Copy commit SHA to clipboard" msgstr "Copier le SHA de la validation" +msgid "Copy reference to clipboard" +msgstr "" + +msgid "Create" +msgstr "" + msgid "Create New Directory" msgstr "Créer un nouveau dossier" @@ -921,11 +1143,14 @@ msgid "Create empty bare repository" msgstr "Créer un dépôt vide" msgid "Create epic" -msgstr "" +msgstr "Créer l'épopée" msgid "Create file" msgstr "Créer un fichier" +msgid "Create lists from labels. Issues with that label appear in that list." +msgstr "" + msgid "Create merge request" msgstr "Créer une demande de fusion" @@ -938,6 +1163,9 @@ msgstr "Créer un nouveau dossier" msgid "Create new file" msgstr "Créer un nouveau fichier" +msgid "Create new label" +msgstr "" + msgid "Create new..." msgstr "Créer nouveau..." @@ -951,7 +1179,7 @@ msgid "CreateTokenToCloneLink|create a personal access token" msgstr "Créer un jeton d'accès personnel" msgid "Creating epic" -msgstr "" +msgstr "Création de l'épopée en cours" msgid "Cron Timezone" msgstr "Fuseau horaire de Cron" @@ -959,6 +1187,9 @@ msgstr "Fuseau horaire de Cron" msgid "Cron syntax" msgstr "Syntaxe Cron" +msgid "Current node" +msgstr "" + msgid "Custom notification events" msgstr "Événements de notification personnalisés" @@ -968,9 +1199,6 @@ msgstr "Le niveau de notification Personnalisé est similaire au niveau Particip msgid "Cycle Analytics" msgstr "Analyseur de cycle" -msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project." -msgstr "L’analyseur de cycle permet d’avoir une vue d’ensemble du temps nécessaire pour aller d’une idée à sa mise en production pour votre projet." - msgid "CycleAnalyticsStage|Code" msgstr "Code" @@ -1027,12 +1255,21 @@ msgstr "Les modèles de description permettent de définir des modèles spécifi msgid "Details" msgstr "Détails" +msgid "Diffs|No file name available" +msgstr "" + msgid "Directory name" msgstr "Nom du dossier" +msgid "Disable" +msgstr "" + msgid "Discard changes" msgstr "Supprimer les modifications" +msgid "Discover GitLab Geo." +msgstr "" + msgid "Dismiss Cycle Analytics introduction box" msgstr "Passer l’introduction Cycle Analytics" @@ -1069,15 +1306,24 @@ msgstr "Diff simple" msgid "DownloadSource|Download" msgstr "Télécharger" +msgid "Due date" +msgstr "" + msgid "Edit" msgstr "Éditer" msgid "Edit Pipeline Schedule %{id}" msgstr "Éditer le pipeline programmé %{id}" +msgid "Edit files in the editor and commit changes here" +msgstr "" + msgid "Emails" msgstr "Courriels" +msgid "Enable" +msgstr "" + msgid "Environments|An error occurred while fetching the environments." msgstr "Une erreur s‘est produite lors de la récupération des environnements." @@ -1096,9 +1342,6 @@ msgstr "Environnement" msgid "Environments|Environments" msgstr "Environnements" -msgid "Environments|Environments are places where code gets deployed, such as staging or production." -msgstr "Les environnements sont des lieux où le code est déployé, comme staging ou production." - msgid "Environments|Job" msgstr "Tâche" @@ -1130,20 +1373,44 @@ msgid "Environments|You don't have any environments right now." msgstr "Vous n’avez aucun environnement pour le moment." msgid "Epic will be removed! Are you sure?" -msgstr "" +msgstr "L’épopée sera supprimée ! Êtes-vous sûr•e ?" msgid "Epics" -msgstr "" +msgstr "Épopées" msgid "Epics let you manage your portfolio of projects more efficiently and with less effort" -msgstr "" +msgstr "Les épopées vous permettent de gérer votre portefeuille de projets plus efficacement et avec moins d'effort" msgid "Error creating epic" +msgstr "Erreur lors de la création de l’épopée" + +msgid "Error fetching contributors data." +msgstr "" + +msgid "Error fetching labels." +msgstr "" + +msgid "Error fetching network graph." +msgstr "" + +msgid "Error fetching refs" +msgstr "" + +msgid "Error fetching usage ping data." msgstr "" msgid "Error occurred when toggling the notification subscription" msgstr "Une erreur s’est produite lors de l’activation/désactivation de l’abonnement aux notifications" +msgid "Error saving label update." +msgstr "" + +msgid "Error updating status for all todos." +msgstr "" + +msgid "Error updating todo status." +msgstr "" + msgid "EventFilterBy|Filter by all" msgstr "Aucun filtre" @@ -1171,6 +1438,9 @@ msgstr "Chaque mois (le 1er à 4:00 du matin)" msgid "Every week (Sundays at 4:00am)" msgstr "Chaque semaine (dimanche à 4h00 du matin)" +msgid "Expand" +msgstr "" + msgid "Explore projects" msgstr "Explorer les projets" @@ -1189,6 +1459,9 @@ msgstr "Févr." msgid "February" msgstr "Février" +msgid "Fields on this page are now uneditable, you can configure" +msgstr "" + msgid "File name" msgstr "Nom du fichier" @@ -1233,29 +1506,113 @@ msgstr "Depuis la fusion de la demande de fusion jusqu'au déploiement en produc msgid "GPG Keys" msgstr "Clés GPG" +msgid "Generate a default set of labels" +msgstr "" + msgid "Geo Nodes" msgstr "NÅ“uds Geo" -msgid "GeoNodeSyncStatus|Failed" -msgstr "Échec" - msgid "GeoNodeSyncStatus|Node is failing or broken." msgstr "Le nÅ“ud est défaillant ou cassé." msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage." msgstr "Le nÅ“ud est lent, surchargé, ou il vient juste de récupérer après un problème." -msgid "GeoNodeSyncStatus|Out of sync" -msgstr "Désynchronisé" +msgid "GeoNodes|Database replication lag:" +msgstr "" + +msgid "GeoNodes|Disabling a node stops the sync process. Are you sure?" +msgstr "" + +msgid "GeoNodes|Does not match the primary storage configuration" +msgstr "" + +msgid "GeoNodes|Failed" +msgstr "" + +msgid "GeoNodes|Full" +msgstr "" + +msgid "GeoNodes|GitLab version does not match the primary node version" +msgstr "" + +msgid "GeoNodes|GitLab version:" +msgstr "" + +msgid "GeoNodes|Health status:" +msgstr "" + +msgid "GeoNodes|Last event ID processed by cursor:" +msgstr "" + +msgid "GeoNodes|Last event ID seen from primary:" +msgstr "" + +msgid "GeoNodes|Loading nodes" +msgstr "" + +msgid "GeoNodes|Local Attachments:" +msgstr "" + +msgid "GeoNodes|Local LFS objects:" +msgstr "" + +msgid "GeoNodes|Local job artifacts:" +msgstr "" + +msgid "GeoNodes|New node" +msgstr "" + +msgid "GeoNodes|Out of sync" +msgstr "" + +msgid "GeoNodes|Replication slot WAL:" +msgstr "" + +msgid "GeoNodes|Replication slots:" +msgstr "" + +msgid "GeoNodes|Repositories:" +msgstr "" + +msgid "GeoNodes|Selective" +msgstr "" + +msgid "GeoNodes|Storage config:" +msgstr "" + +msgid "GeoNodes|Sync settings:" +msgstr "" + +msgid "GeoNodes|Synced" +msgstr "" + +msgid "GeoNodes|Unused slots" +msgstr "" + +msgid "GeoNodes|Used slots" +msgstr "" + +msgid "GeoNodes|Wikis:" +msgstr "" + +msgid "GeoNodes|You have configured Geo nodes using an insecure HTTP connection. We recommend the use of HTTPS." +msgstr "" -msgid "GeoNodeSyncStatus|Synced" -msgstr "Synchronisé" +msgid "Geo|All projects" +msgstr "" msgid "Geo|File sync capacity" msgstr "Capacité de synchronisation de fichier" -msgid "Geo|Groups to replicate" -msgstr "Groupes à répliquer" +msgid "Geo|Groups to synchronize" +msgstr "" + +msgid "Geo|Projects in certain groups" +msgstr "" + +msgid "Geo|Projects in certain storage shards" +msgstr "" msgid "Geo|Repository sync capacity" msgstr "Capacité de synchronisation du dépôt" @@ -1263,12 +1620,24 @@ msgstr "Capacité de synchronisation du dépôt" msgid "Geo|Select groups to replicate." msgstr "Sélectionner les groupes à répliquer." +msgid "Geo|Shards to synchronize" +msgstr "" + +msgid "Git revision" +msgstr "" + msgid "Git storage health information has been reset" msgstr "Les informations de santé du stockage Git ont été réinitialisées" +msgid "Git version" +msgstr "" + msgid "GitLab Runner section" msgstr "Section de l'Exécuteur GitLab" +msgid "Gitaly Servers" +msgstr "" + msgid "Go to your fork" msgstr "Aller à votre fourche" @@ -1278,6 +1647,9 @@ msgstr "Fourche" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "L’authentification Google n’est pas %{link_to_documentation}. Demandez à votre administrateur GitLab si vous souhaitez utiliser ce service." +msgid "Got it!" +msgstr "" + msgid "GroupSettings|Prevent sharing a project within %{group} with other groups" msgstr "Empêcher le partage d'un projet de %{group} avec d'autres groupes" @@ -1314,8 +1686,8 @@ msgstr "Aucun groupe trouvé" msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group." msgstr "Vous pouvez gérer les autorisations des membres de votre groupe et accéder à chacun de ses projets." -msgid "GroupsTree|Are you sure you want to leave the \"${this.group.fullName}\" group?" -msgstr "Êtes-vous sûr·e de vouloir quitter le groupe « ${this.group.fullName} » ?" +msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?" +msgstr "" msgid "GroupsTree|Create a project in this group." msgstr "Créez un projet dans ce groupe." @@ -1345,7 +1717,7 @@ msgid "GroupsTree|Sorry, no groups or projects matched your search" msgstr "Désolé, aucun groupe ni projet ne correspond à vos critères de recherche" msgid "Have your users email" -msgstr "" +msgstr "Lister les emails utilisateurs" msgid "Health Check" msgstr "État des services" @@ -1365,6 +1737,11 @@ msgstr "Aucun problème détecté" msgid "HealthCheck|Unhealthy" msgstr "En mauvaise santé" +msgid "Hide value" +msgid_plural "Hide values" +msgstr[0] "" +msgstr[1] "" + msgid "History" msgstr "Historique" @@ -1391,6 +1768,12 @@ msgid_plural "Instances" msgstr[0] "Instance" msgstr[1] "Instances" +msgid "Instance does not support multiple Kubernetes clusters" +msgstr "" + +msgid "Interested parties can even contribute by pushing commits if they want to." +msgstr "" + msgid "Internal - The group and any internal projects can be viewed by any logged in user." msgstr "Interne - Le groupe ainsi que tous les projets internes sont accessibles pour n’importe quel·le utilisa·teur·trice connecté·e." @@ -1418,6 +1801,9 @@ msgstr "Tableaux" msgid "Issues" msgstr "Tickets" +msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable." +msgstr "" + msgid "Jan" msgstr "Janv." @@ -1436,6 +1822,27 @@ msgstr "Juin" msgid "June" msgstr "Juin" +msgid "Kubernetes" +msgstr "" + +msgid "Kubernetes Cluster" +msgstr "" + +msgid "Kubernetes cluster creation time exceeds timeout; %{timeout}" +msgstr "" + +msgid "Kubernetes cluster integration was not removed." +msgstr "" + +msgid "Kubernetes cluster integration was successfully removed." +msgstr "" + +msgid "Kubernetes cluster was successfully updated." +msgstr "" + +msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page" +msgstr "" + msgid "LFSStatus|Disabled" msgstr "Désactivé" @@ -1445,6 +1852,9 @@ msgstr "Activé" msgid "Labels" msgstr "Labels" +msgid "Labels can be applied to issues and merge requests to categorize them." +msgstr "" + msgid "Last %d day" msgid_plural "Last %d days" msgstr[0] "Le dernier %d jour" @@ -1474,6 +1884,9 @@ msgstr "Vous avez poussé sur" msgid "LastPushEvent|at" msgstr "à " +msgid "Learn more" +msgstr "" + msgid "Learn more in the" msgstr "En apprendre plus dans le" @@ -1492,14 +1905,18 @@ msgstr "Quitter le projet" msgid "License" msgstr "Licence" -msgid "Limited to showing %d event at most" -msgid_plural "Limited to showing %d events at most" -msgstr[0] "Limiter l'affichage au plus à %d évènement" -msgstr[1] "Limiter l'affichage au plus à %d évènements" +msgid "Loading the GitLab IDE..." +msgstr "" msgid "Lock" msgstr "Verrouiller" +msgid "Lock %{issuableDisplayName}" +msgstr "" + +msgid "Lock this %{issuableDisplayName}? Only <strong>project members</strong> will be able to comment." +msgstr "" + msgid "Locked" msgstr "Verrouillé" @@ -1509,12 +1926,21 @@ msgstr "Fichiers verrouillés" msgid "Login" msgstr "Se connecter" +msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos." +msgstr "" + +msgid "Manage labels" +msgstr "" + msgid "Mar" msgstr "Mars" msgid "March" msgstr "Mars" +msgid "Mark done" +msgstr "" + msgid "Maximum git storage failures" msgstr "Nombre maximum d’échecs du stockage git" @@ -1527,6 +1953,9 @@ msgstr "Médian" msgid "Members" msgstr "Membres" +msgid "Merge Request" +msgstr "" + msgid "Merge Requests" msgstr "Demandes de fusion" @@ -1536,9 +1965,30 @@ msgstr "Événements de fusion" msgid "Merge request" msgstr "Demande de fusion" +msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others" +msgstr "" + +msgid "Merged" +msgstr "" + msgid "Messages" msgstr "Messages" +msgid "Milestone" +msgstr "" + +msgid "Milestones|Delete milestone" +msgstr "" + +msgid "Milestones|Delete milestone %{milestoneTitle}?" +msgstr "" + +msgid "Milestones|Failed to delete milestone %{milestoneTitle}" +msgstr "" + +msgid "Milestones|Milestone %{milestoneTitle} was not found" +msgstr "" + msgid "MissingSSHKeyWarningLink|add an SSH key" msgstr "ajouter une clé SSH" @@ -1548,17 +1998,29 @@ msgstr "Surveillance" msgid "More information is available|here" msgstr "ici" +msgid "Move" +msgstr "" + +msgid "Move issue" +msgstr "" + msgid "Multiple issue boards" msgstr "Multiple tableaux de tickets" -msgid "New Cluster" -msgstr "Nouveau cluster" +msgid "Name new label" +msgstr "" msgid "New Issue" msgid_plural "New Issues" msgstr[0] "Nouveau ticket" msgstr[1] "Nouveaux tickets" +msgid "New Kubernetes Cluster" +msgstr "" + +msgid "New Kubernetes cluster" +msgstr "" + msgid "New Pipeline Schedule" msgstr "Nouveau pipeline programmé" @@ -1572,7 +2034,7 @@ msgid "New directory" msgstr "Nouveau dossier" msgid "New epic" -msgstr "" +msgstr "Nouvelle épopée" msgid "New file" msgstr "Nouveau fichier" @@ -1583,6 +2045,9 @@ msgstr "Nouveau groupe" msgid "New issue" msgstr "Nouveau ticket" +msgid "New label" +msgstr "" + msgid "New merge request" msgstr "Nouvelle demande de fusion" @@ -1601,8 +2066,23 @@ msgstr "Nouveau sous-groupe" msgid "New tag" msgstr "Nouveau tag" -msgid "No container images stored for this project. Add one by following the instructions above." -msgstr "Aucune image de conteneur stockée pour ce projet. Ajoutez en une en suivant les instructions ci-dessous." +msgid "No assignee" +msgstr "" + +msgid "No changes" +msgstr "" + +msgid "No connection could be made to a Gitaly Server, please check your logs!" +msgstr "" + +msgid "No due date" +msgstr "" + +msgid "No estimate or time spent" +msgstr "" + +msgid "No file chosen" +msgstr "" msgid "No repository" msgstr "Pas de dépôt" @@ -1616,9 +2096,15 @@ msgstr "Pas de temps passé" msgid "None" msgstr "Aucun·e" +msgid "Not allowed to merge" +msgstr "" + msgid "Not available" msgstr "Indisponible" +msgid "Not confidential" +msgstr "" + msgid "Not enough data" msgstr "Données insuffisantes" @@ -1679,6 +2165,12 @@ msgstr "Surveillé" msgid "Notifications" msgstr "Notifications" +msgid "Notifications off" +msgstr "" + +msgid "Notifications on" +msgstr "" + msgid "Nov" msgstr "Nov." @@ -1688,8 +2180,8 @@ msgstr "Novembre" msgid "Number of access attempts" msgstr "Nombre de tentatives d'accès" -msgid "Number of failures before backing off" -msgstr "Nombre d'échecs avant annulation" +msgid "OK" +msgstr "" msgid "Oct" msgstr "Oct." @@ -1703,6 +2195,9 @@ msgstr "Filtre" msgid "Only project members can comment." msgstr "Seuls les membres du projet peuvent commenter." +msgid "Open" +msgstr "" + msgid "Opened" msgstr "Ouvert" @@ -1736,9 +2231,6 @@ msgstr "« Première" msgid "Password" msgstr "Mot de Passe" -msgid "People without permission will never get a notification and won\\'t be able to comment." -msgstr "Les personnes sans autorisation ne recevront jamais de notifications et ne pourront pas commenter." - msgid "Pipeline" msgstr "Pipeline" @@ -1781,12 +2273,6 @@ msgstr "Tous" msgid "PipelineSchedules|Inactive" msgstr "Inactif" -msgid "PipelineSchedules|Input variable key" -msgstr "Nom de la variable" - -msgid "PipelineSchedules|Input variable value" -msgstr "Valeur de la variable" - msgid "PipelineSchedules|Next Run" msgstr "Prochaine exécution" @@ -1796,9 +2282,6 @@ msgstr "Aucune" msgid "PipelineSchedules|Provide a short description for this pipeline" msgstr "Indiquez une courte description" -msgid "PipelineSchedules|Remove variable row" -msgstr "Supprimer la variable" - msgid "PipelineSchedules|Take ownership" msgstr "S’approprier" @@ -1826,6 +2309,12 @@ msgstr "Pipelines de la semaine dernière" msgid "Pipelines for last year" msgstr "Pipelines de l’année dernière" +msgid "Pipelines|Build with confidence" +msgstr "" + +msgid "Pipelines|Get started with Pipelines" +msgstr "" + msgid "Pipeline|all" msgstr "Tous" @@ -1838,12 +2327,21 @@ msgstr "avec l'étape" msgid "Pipeline|with stages" msgstr "avec les étapes" +msgid "Play" +msgstr "" + +msgid "Please <a href=%{link_to_billing} target=\"_blank\" rel=\"noopener noreferrer\">enable billing for one of your projects to be able to create a Kubernetes cluster</a>, then try again." +msgstr "" + msgid "Please solve the reCAPTCHA" msgstr "Veuillez résoudre le reCAPTCHA" msgid "Preferences" msgstr "Préférences" +msgid "Primary" +msgstr "" + msgid "Private - Project access must be granted explicitly to each user." msgstr "Privé - L’accès au projet doit être autorisé explicitement pour chaque utilisa·teur·trice." @@ -1889,6 +2387,9 @@ msgstr "Votre compte est actuellement propriétaire des groupes suivants :" msgid "Profiles|your account" msgstr "votre compte" +msgid "Programming languages used in this repository" +msgstr "" + msgid "Project '%{project_name}' is in the process of being deleted." msgstr "Le projet “%{project_name}†est en train d’être supprimé." @@ -1904,6 +2405,15 @@ msgstr "Projet '%{project_name}' mis à jour avec succès." msgid "Project access must be granted explicitly to each user." msgstr "L’accès au projet doit être explicitement accordé à chaque utilisateur." +msgid "Project avatar" +msgstr "" + +msgid "Project avatar in repository: %{link}" +msgstr "" + +msgid "Project cache successfully reset." +msgstr "" + msgid "Project details" msgstr "Détails du projet" @@ -1922,6 +2432,21 @@ msgstr "L'export du projet a débuté. Un lien de téléchargement sera envoyé msgid "ProjectActivityRSS|Subscribe" msgstr "S’abonner" +msgid "ProjectCreationLevel|Allowed to create projects" +msgstr "" + +msgid "ProjectCreationLevel|Default project creation protection" +msgstr "" + +msgid "ProjectCreationLevel|Developers + Masters" +msgstr "" + +msgid "ProjectCreationLevel|Masters" +msgstr "" + +msgid "ProjectCreationLevel|No one" +msgstr "" + msgid "ProjectFeature|Disabled" msgstr "Désactivé" @@ -1946,15 +2471,9 @@ msgstr "Graphes" msgid "ProjectSettings|Contact an admin to change this setting." msgstr "Contactez un administrateur pour modifier ce paramètre." -msgid "ProjectSettings|Immediately run a pipeline on the default branch" -msgstr "Exécuter immédiatement un pipeline sur la branche par défaut" - msgid "ProjectSettings|Only signed commits can be pushed to this repository." msgstr "Seules les validations signées peuvent être poussées sur ce dépôt." -msgid "ProjectSettings|Problem setting up the CI/CD settings JavaScript" -msgstr "Problème lors de la configuration des paramètres CI/CD JavaScript" - msgid "ProjectSettings|This setting is applied on the server level and can be overridden by an admin." msgstr "Ce paramètre est appliqué au niveau du serveur et peut être modifié par un administrateur." @@ -1992,36 +2511,39 @@ msgid "ProjectsDropdown|This feature requires browser localStorage support" msgstr "Cette fonctionnalité requiert le support du localStorage par votre navigateur" msgid "PrometheusService|By default, Prometheus listens on ‘http://localhost:9090’. It’s not recommended to change the default address and port as this might affect or conflict with other services running on the GitLab server." -msgstr "" +msgstr "Par défaut, Prometheus écoute sur 'http://localhost:9090'. Il n’est pas recommandé de changer l’adresse et le port par défaut car cela pourrait affecter ou entrer en conflit avec d'autres services fonctionnant sur le serveur GitLab." msgid "PrometheusService|Finding and configuring metrics..." -msgstr "" +msgstr "Recherche et configuration des métriques en cours…" msgid "PrometheusService|Metrics" -msgstr "" +msgstr "Métriques" msgid "PrometheusService|Metrics are automatically configured and monitored based on a library of metrics from popular exporters." -msgstr "" +msgstr "Les métriques sont automatiquement configurées et surveillées en fonction d’une bibliothèque de métriques provenant d’exportateurs populaires." msgid "PrometheusService|Missing environment variable" -msgstr "" +msgstr "Variable d’environnement manquante" msgid "PrometheusService|Monitored" -msgstr "" +msgstr "Surveillé" msgid "PrometheusService|More information" -msgstr "" +msgstr "Plus d’informations" msgid "PrometheusService|No metrics are being monitored. To start monitoring, deploy to an environment." -msgstr "" +msgstr "Aucune métrique n’est surveillée. Pour démarrer la surveillance, déployez sur un environnement." msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/" -msgstr "" +msgstr "URL de base de l’API Prometheus, comme http://prometheus.example.com/" msgid "PrometheusService|Time-series monitoring service" msgstr "" msgid "PrometheusService|View environments" +msgstr "Afficher les environnements" + +msgid "Protip:" msgstr "" msgid "Public - The group and any public projects can be viewed without any authentication." @@ -2039,6 +2561,9 @@ msgstr "Évènements de poussée" msgid "PushRule|Committer restriction" msgstr "Restriction du validateur" +msgid "Quick actions can be used in the issues description and comment boxes." +msgstr "" + msgid "Read more" msgstr "Lire plus" @@ -2051,6 +2576,12 @@ msgstr "Branches" msgid "RefSwitcher|Tags" msgstr "Tags" +msgid "Reference:" +msgstr "" + +msgid "Register / Sign In" +msgstr "" + msgid "Registry" msgstr "Registre" @@ -2075,9 +2606,18 @@ msgstr "Demandes fusionnées liées" msgid "Remind later" msgstr "Me le rappeler ultérieurement" +msgid "Remove" +msgstr "" + +msgid "Remove avatar" +msgstr "" + msgid "Remove project" msgstr "Supprimer le projet" +msgid "Repair authentication" +msgstr "" + msgid "Repository" msgstr "Dépôt" @@ -2093,6 +2633,11 @@ msgstr "Réinitialiser le jeton d’accès au bilan de santé" msgid "Reset runners registration token" msgstr "Réinitialiser le jeton d’inscription des exécuteurs" +msgid "Reveal value" +msgid_plural "Reveal values" +msgstr[0] "" +msgstr[1] "" + msgid "Revert this commit" msgstr "Défaire cette validation" @@ -2102,15 +2647,15 @@ msgstr "Défaire cette demande de fusion" msgid "SSH Keys" msgstr "Clés SSH" -msgid "Save" -msgstr "Enregistrer" - msgid "Save changes" msgstr "Enregistrer les modifications" msgid "Save pipeline schedule" msgstr "Sauvegarder le pipeline programmé" +msgid "Save variables" +msgstr "" + msgid "Schedule a new pipeline" msgstr "Programmer un nouveau pipeline" @@ -2121,43 +2666,64 @@ msgid "Scheduling Pipelines" msgstr "Programmer des pipelines" msgid "Scoped issue boards" -msgstr "" +msgstr "Tableaux de tickets avec portée limitée" msgid "Search branches and tags" msgstr "Rechercher dans les branches et les étiquettes" +msgid "Search milestones" +msgstr "" + +msgid "Search project" +msgstr "" + +msgid "Search users" +msgstr "" + msgid "Seconds before reseting failure information" msgstr "Nombre de secondes avant de réinitialiser les informations d’échec" -msgid "Seconds to wait after a storage failure" -msgstr "Nombre de secondes d'attente après un échec de stockage" - msgid "Seconds to wait for a storage access attempt" msgstr "Nombre de secondes d’attente pour un essai d'accès au stockage" +msgid "Secret variables" +msgstr "" + msgid "Select Archive Format" msgstr "Sélectionnez le format de l'archive" msgid "Select a timezone" msgstr "Sélectionnez un fuseau horaire" +msgid "Select assignee" +msgstr "" + +msgid "Select branch/tag" +msgstr "" + msgid "Select target branch" msgstr "Sélectionnez une branche cible" +msgid "Selective synchronization" +msgstr "" + msgid "Sep" msgstr "Sept." msgid "September" msgstr "Septembre" +msgid "Server version" +msgstr "" + msgid "Service Templates" msgstr "Modèles de service" msgid "Set a password on your account to pull or push via %{protocol}." msgstr "Définissez un mot de passe pour votre compte pour pouvoir tirer ou pousser par %{protocol}." -msgid "Set up CI" -msgstr "Mettre en place l'intégration continue (CI)" +msgid "Set up CI/CD" +msgstr "" msgid "Set up Koding" msgstr "Mettre en place Koding" @@ -2171,6 +2737,15 @@ msgstr "définir un mot de passe" msgid "Settings" msgstr "Paramètres" +msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero." +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset pipeline minutes" +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset used pipeline minutes" +msgstr "" + msgid "Show parent pages" msgstr "Afficher les pages parentes" @@ -2185,9 +2760,6 @@ msgstr[1] "Affichage de %d évènements" msgid "Sidebar|Change weight" msgstr "Changer le poids" -msgid "Sidebar|Edit" -msgstr "Modifier" - msgid "Sidebar|No" msgstr "Non" @@ -2200,18 +2772,30 @@ msgstr "Poids" msgid "Snippets" msgstr "Extraits de code" +msgid "Something went wrong on our end" +msgstr "" + msgid "Something went wrong on our end." msgstr "Une erreur est survenue de notre côté." +msgid "Something went wrong trying to change the confidentiality of this issue" +msgstr "" + msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}" msgstr "Quelque chose ne s‘est pas bien passé en essayant de changer l’état de verrouillage de cette ${this.issuableDisplayName}" +msgid "Something went wrong when toggling the button" +msgstr "" + msgid "Something went wrong while fetching the projects." msgstr "Une erreur s'est produite lors de la récupération des projets." msgid "Something went wrong while fetching the registry list." msgstr "Une erreur s'est produite lors de la récupération de la liste du registre." +msgid "Something went wrong. Please try again." +msgstr "" + msgid "Sort by" msgstr "Trier par" @@ -2318,7 +2902,7 @@ msgid "Source code" msgstr "Code source" msgid "Source is not available" -msgstr "" +msgstr "La source n’est pas disponible" msgid "Spam Logs" msgstr "Journaux des messages indésirables" @@ -2341,12 +2925,12 @@ msgstr "Démarrer l'Exécuteur !" msgid "Stopped" msgstr "Arrêté" +msgid "Storage" +msgstr "" + msgid "Subgroups" msgstr "Sous-groupes" -msgid "Subscribe" -msgstr "S’abonner" - msgid "Switch branch/tag" msgstr "Changer de branche / tag" @@ -2442,8 +3026,11 @@ msgstr "Merci ! Ne plus afficher ce message" msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project." msgstr "La Recherche Globale Avancée de Gitlab est un outils puissant qui vous fait gagner du temps. Au lieu de créer du code similaire et perdre du temps, vous pouvez maintenant chercher dans le code d'autres équipes pour vous aider sur votre projet." -msgid "The circuitbreaker backoff threshold should be lower than the failure count threshold" -msgstr "Le seuil d’interruption du disjoncteur devrait être inférieur au seuil de nombre de défaillance" +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project" +msgstr "" + +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project." +msgstr "" msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request." msgstr "L’étape de développement montre le temps entre la première validation et la création de la demande de fusion. Les données seront automatiquement ajoutées ici une fois que vous aurez créé votre première demande de fusion." @@ -2457,21 +3044,18 @@ msgstr "La relation de fourche a été supprimée." msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage." msgstr "L'étape des tickets montre le temps nécessaire entre la création d'un ticket et son assignation à un jalon, ou son ajout à une liste d'un tableau de tickets. Commencez par créer des tickets pour voir des données pour cette étape." +msgid "The maximum file size allowed is 200KB." +msgstr "" + msgid "The number of attempts GitLab will make to access a storage." msgstr "Le nombre de tentatives que GitLab va effectuer pour accéder au stockage." -msgid "The number of failures after which GitLab will start temporarily disabling access to a storage shard on a host" -msgstr "Le nombre d'échecs avant que GitLab ne commence à désactiver l'accès à la partition de stockage sur l'hôte" - msgid "The number of failures of after which GitLab will completely prevent access to the storage. The number of failures can be reset in the admin interface: %{link_to_health_page} or using the %{api_documentation_link}." msgstr "Nombre d’échecs avant que GitLab n’empêche tout accès au stockage. Ce nombre d’échecs peut être réinitialisé dans l’interface d’administration : %{link_to_health_page} ou en suivant le %{api_documentation_link}." msgid "The phase of the development lifecycle." msgstr "Les étapes du cycle de développement." -msgid "The pipelines schedule runs pipelines in the future, repeatedly, for specific branches or tags. Those scheduled pipelines will inherit limited project access based on their associated user." -msgstr "Les pipelines programmés exécutent des pipelines dans le futur, de façon répétée, pour les branches et tags spécifiées. Ces pipelines programmés héritent d’un accès partiel au projet basé sur l’utilisa·teur·trice qui leurs est associé·e." - msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit." msgstr "L’étape de planification montre le temps entre l’étape précédente et l’envoi de votre première validation. Ce temps sera automatiquement ajouté quand vous pousserez votre première validation." @@ -2502,20 +3086,47 @@ msgstr "Délai en secondes pendant lequel GitLab gardera les informations d’é msgid "The time in seconds GitLab will try to access storage. After this time a timeout error will be raised." msgstr "Temps en secondes pendant lequel GitLab essaiera d’accéder au stockage. Après ce délai, une erreur d’expiration d’attente sera déclenchée." +msgid "The time in seconds between storage checks. When a previous check did complete yet, GitLab will skip a check." +msgstr "" + msgid "The time taken by each data entry gathered by that stage." msgstr "Le temps pris par chaque entrée récoltée durant cette étape." msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6." msgstr "La valeur située au point médian d’une série de valeur observée. C.à .d., entre 3, 5, 9, le médian est 5. Entre 3, 5, 7, 8, le médian est (5+7)/2 = 6." +msgid "There are no issues to show" +msgstr "" + +msgid "There are no merge requests to show" +msgstr "" + msgid "There are problems accessing Git storage: " msgstr "Il y a des difficultés à accéder aux données Git : " -msgid "This board\\'s scope is reduced" +msgid "There was an error loading users activity calendar." msgstr "" -msgid "This branch has changed since you started editing. Would you like to create a new branch?" -msgstr "Cette branche a changé depuis le début de l’édition. Souhaitez-vous créer une nouvelle branche ?" +msgid "There was an error saving your notification settings." +msgstr "" + +msgid "There was an error subscribing to this label." +msgstr "" + +msgid "There was an error when reseting email token." +msgstr "" + +msgid "There was an error when subscribing to this label." +msgstr "" + +msgid "There was an error when unsubscribing from this label." +msgstr "" + +msgid "This board\\'s scope is reduced" +msgstr "La portée de ce tableau est limitée" + +msgid "This directory" +msgstr "" msgid "This is a confidential issue." msgstr "Ce ticket est confidentiel." @@ -2523,21 +3134,48 @@ msgstr "Ce ticket est confidentiel." msgid "This is the author's first Merge Request to this project." msgstr "C’est la première demande de fusion de cet auteur pour ce projet." +msgid "This issue is confidential" +msgstr "" + msgid "This issue is confidential and locked." msgstr "Ce ticket est confidentiel et verrouillé." msgid "This issue is locked." msgstr "Ce ticket est verrouillé." +msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments" +msgstr "" + +msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered" +msgstr "" + +msgid "This job has not been triggered yet" +msgstr "" + +msgid "This job has not started yet" +msgstr "" + +msgid "This job is in pending state and is waiting to be picked by a runner" +msgstr "" + +msgid "This job requires a manual action" +msgstr "" + msgid "This means you can not push code until you create an empty repository or import existing one." msgstr "Cela signifie que vous ne pouvez pas pousser du code tant que vous n’avez pas créé un dépôt vide, ou que vous n’avez pas importé un dépôt existant." msgid "This merge request is locked." msgstr "Cette demande de fusion est verrouillée." -msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here." +msgid "This project" +msgstr "" + +msgid "This repository" msgstr "" +msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here." +msgstr "Ces emails deviennent automatiquement des tickets (les commentaires étant extrait de la conversation par email) répertoriés ici." + msgid "Time before an issue gets scheduled" msgstr "Temps avant qu’un ticket ne soit planifié" @@ -2547,9 +3185,21 @@ msgstr "Temps avant que la résolution du ticket ne débute" msgid "Time between merge request creation and merge/close" msgstr "Temps entre la création d'une demande de fusion et sa fusion/clôture" +msgid "Time tracking" +msgstr "" + msgid "Time until first merge request" msgstr "Temps jusqu’à la première demande de fusion" +msgid "TimeTrackingEstimated|Est" +msgstr "" + +msgid "TimeTracking|Estimated:" +msgstr "" + +msgid "TimeTracking|Spent" +msgstr "" + msgid "Timeago|%s days ago" msgstr "il y a %s jours" @@ -2689,6 +3339,18 @@ msgstr "s" msgid "Title" msgstr "Titre" +msgid "Todo" +msgstr "" + +msgid "Toggle sidebar" +msgstr "" + +msgid "ToggleButton|Toggle Status: OFF" +msgstr "" + +msgid "ToggleButton|Toggle Status: ON" +msgstr "" + msgid "Total Time" msgstr "Temps total" @@ -2702,22 +3364,43 @@ msgid "Track activity with Contribution Analytics." msgstr "Suivre l’activité avec Contribution Analytics." msgid "Track groups of issues that share a theme, across projects and milestones" +msgstr "Suivez les groupes de tickets qui partagent un thème, entre projets et jalons" + +msgid "Total: %{total}" +msgstr "" + +msgid "Track time with quick actions" +msgstr "" + +msgid "Trigger this manual action" msgstr "" msgid "Turn on Service Desk" +msgstr "Activer le Service Desk" + +msgid "Type %{value} to confirm:" +msgstr "" + +msgid "Unable to reset project cache." +msgstr "" + +msgid "Unknown" msgstr "" msgid "Unlock" msgstr "Déverrouiller" +msgid "Unlock this %{issuableDisplayName}? <strong>Everyone</strong> will be able to comment." +msgstr "" + msgid "Unlocked" msgstr "Déverrouillé" msgid "Unstar" msgstr "Supprimer des favoris" -msgid "Unsubscribe" -msgstr "Se désabonner" +msgid "Up to date" +msgstr "" msgid "Upgrade your plan to activate Advanced Global Search." msgstr "Mettez à jour votre abonnement pour activer la Recherche Globale Avancée." @@ -2740,11 +3423,14 @@ msgstr "Téléverser un nouveau fichier" msgid "Upload file" msgstr "Téléverser un fichier" +msgid "Upload new avatar" +msgstr "" + msgid "UploadLink|click to upload" msgstr "Cliquez pour envoyer" msgid "Use Service Desk to connect with your users (e.g. to offer customer support) through email right inside GitLab" -msgstr "" +msgstr "Utilisez Service Desk pour intéragir avec vos utilisateurs (par exemple pour offrir un support client) par email directement dans GitLab" msgid "Use the following registration token during setup:" msgstr "Utiliser le jeton d’inscription suivant pendant l’installation :" @@ -2752,9 +3438,15 @@ msgstr "Utiliser le jeton d’inscription suivant pendant l’installation :" msgid "Use your global notification setting" msgstr "Utiliser vos paramètres de notification globaux" +msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want." +msgstr "" + msgid "View file @ " msgstr "Voir le fichier @ " +msgid "View labels" +msgstr "" + msgid "View open merge request" msgstr "Afficher la demande de fusion" @@ -2776,11 +3468,14 @@ msgstr "Inconnu" msgid "Want to see the data? Please ask an administrator for access." msgstr "Vous voulez voir les données ? Merci de contacter un administrateur pour en obtenir l’accès." +msgid "We could not verify that one of your projects on GCP has billing enabled. Please try again." +msgstr "" + msgid "We don't have enough data to show this stage." msgstr "Nous n'avons pas suffisamment de données pour afficher cette étape." msgid "We want to be sure it is you, please confirm you are not a robot." -msgstr "" +msgstr "Nous voulons être sûrs que c'est bien vous, merci de confirmer que vous n’êtes pas un robot." msgid "Webhooks allow you to trigger a URL if, for example, new code is pushed or a new issue is created. You can configure webhooks to listen for specific events like pushes, issues or merge requests. Group webhooks will apply to all projects in a group, allowing you to standardize webhook functionality across your entire group." msgstr "Les webhooks vous permettent d’appeler une URL si, par exemple, du nouveau code est poussé ou un nouveau ticket est créé. Vous pouvez configurer les webhooks pour écouter les événements spécifiques comme des poussées de code, des tickets ou des demandes de fusion. Les webhooks de groupes s’appliqueront à tous les projets dans un groupe, ce qui vous permet de normaliser la fonctionnalité du webhook dans votre groupe entier." @@ -2788,9 +3483,6 @@ msgstr "Les webhooks vous permettent d’appeler une URL si, par exemple, du nou msgid "Weight" msgstr "Poids" -msgid "When access to a storage fails. GitLab will prevent access to the storage for the time specified here. This allows the filesystem to recover. Repositories on failing shards are temporarly unavailable" -msgstr "Si l’accès à un stockage échoue, GitLab empêchera l’accès au stockage pendant la durée spécifiée ici. Cela permettra au système de fichiers de récupérer. Les dépôts présents sur les secteurs en erreur seront temporairement indisponibles." - msgid "Wiki" msgstr "Wiki" @@ -2809,6 +3501,12 @@ msgstr "Il est recommandé d’installer %{markdown} pour que les spécificités msgid "WikiClone|Start Gollum and edit locally" msgstr "Démarrer Gollum et modifier localement" +msgid "WikiEditPageTip|Tip: You can move this page by adding the path to the beginning of the title." +msgstr "" + +msgid "WikiEdit|There is already a page with the same title in that path." +msgstr "" + msgid "WikiEmptyPageError|You are not allowed to create wiki pages" msgstr "Vous n’êtes pas autorisé·e à créer des pages wiki" @@ -2911,9 +3609,21 @@ msgstr "Vous allez supprimer la relation de fourche avec le projet source %{fork msgid "You are going to transfer %{project_name_with_namespace} to another owner. Are you ABSOLUTELY sure?" msgstr "Vous allez transférer %{project_name_with_namespace} à un nouveau propriétaire. Êtes vous ABSOLUMENT sûr·e ?" +msgid "You can also star a label to make it a priority label." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + msgid "You can only add files when you are on a branch" msgstr "Vous ne pouvez ajouter de fichier que dans une branche" +msgid "You can only edit files when you are on a branch" +msgstr "" + msgid "You cannot write to a read-only secondary GitLab Geo instance. Please use %{link_to_primary_node} instead." msgstr "Vous ne pouvez pas écrire sur une instance GitLab Geo secondaire en lecture-seule. Veuillez utiliser le %{link_to_primary_node} à la place." @@ -2953,6 +3663,12 @@ msgstr "Vous ne pourrez pas récupérer ou pousser de code par SSH tant que vous msgid "You won't be able to pull or push project code via SSH until you add an SSH key to your profile" msgstr "Vous ne pourrez pas récupérer ou pousser de code par SSH tant que vous n’aurez pas ajouté de clé SSH à votre profil" +msgid "You'll need to use different branch names to get a valid comparison." +msgstr "" + +msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure" +msgstr "" + msgid "Your comment will not be visible to the public." msgstr "Votre commentaire ne sera pas visible publiquement." @@ -2965,26 +3681,220 @@ msgstr "Votre nom" msgid "Your projects" msgstr "Vos projets" +msgid "assign yourself" +msgstr "" + msgid "branch name" msgstr "nom de la branche" msgid "by" msgstr "par" +msgid "ciReport|Code quality" +msgstr "" + +msgid "ciReport|DAST detected no alerts by analyzing the review app" +msgstr "" + +msgid "ciReport|Failed to load ${type} report" +msgstr "" + +msgid "ciReport|Fixed:" +msgstr "" + +msgid "ciReport|Instances" +msgstr "" + +msgid "ciReport|Learn more about whitelisting" +msgstr "" + +msgid "ciReport|Loading ${type} report" +msgstr "" + +msgid "ciReport|No changes to code quality" +msgstr "" + +msgid "ciReport|No changes to performance metrics" +msgstr "" + +msgid "ciReport|Performance metrics" +msgstr "" + +msgid "ciReport|SAST" +msgstr "" + +msgid "ciReport|SAST detected no security vulnerabilities" +msgstr "" + +msgid "ciReport|SAST:container no vulnerabilities were found" +msgstr "" + +msgid "ciReport|Show complete code vulnerabilities report" +msgstr "" + +msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}" +msgstr "" + msgid "commit" msgstr "validation" +msgid "confidentiality|You are going to turn off the confidentiality. This means <strong>everyone</strong> will be able to see and leave a comment on this issue." +msgstr "" + +msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with <strong>at least Reporter access</strong> are able to see and leave comments on the issue." +msgstr "" + msgid "day" msgid_plural "days" msgstr[0] "jour" msgstr[1] "jours" +msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command." +msgstr "" + +msgid "merge request" +msgid_plural "merge requests" +msgstr[0] "" +msgstr[1] "" + +msgid "mrWidget|Cancel automatic merge" +msgstr "" + +msgid "mrWidget|Check out branch" +msgstr "" + +msgid "mrWidget|Checking ability to merge automatically" +msgstr "" + +msgid "mrWidget|Cherry-pick" +msgstr "" + +msgid "mrWidget|Cherry-pick this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Closed" +msgstr "" + +msgid "mrWidget|Closed by" +msgstr "" + +msgid "mrWidget|Closes" +msgstr "" + +msgid "mrWidget|Did not close" +msgstr "" + +msgid "mrWidget|Email patches" +msgstr "" + +msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|Mentions" +msgstr "" + +msgid "mrWidget|Merge" +msgstr "" + +msgid "mrWidget|Merge failed." +msgstr "" + +msgid "mrWidget|Merge locally" +msgstr "" + +msgid "mrWidget|Merged by" +msgstr "" + +msgid "mrWidget|Plain diff" +msgstr "" + +msgid "mrWidget|Refresh" +msgstr "" + +msgid "mrWidget|Refresh now" +msgstr "" + +msgid "mrWidget|Refreshing now" +msgstr "" + +msgid "mrWidget|Remove Source Branch" +msgstr "" + +msgid "mrWidget|Remove source branch" +msgstr "" + +msgid "mrWidget|Request to merge" +msgstr "" + +msgid "mrWidget|Resolve conflicts" +msgstr "" + +msgid "mrWidget|Revert" +msgstr "" + +msgid "mrWidget|Revert this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Set by" +msgstr "" + +msgid "mrWidget|The changes were merged into" +msgstr "" + +msgid "mrWidget|The changes were not merged into" +msgstr "" + +msgid "mrWidget|The changes will be merged into" +msgstr "" + +msgid "mrWidget|The source branch has been removed" +msgstr "" + +msgid "mrWidget|The source branch is being removed" +msgstr "" + +msgid "mrWidget|The source branch will be removed" +msgstr "" + +msgid "mrWidget|The source branch will not be removed" +msgstr "" + +msgid "mrWidget|There are merge conflicts" +msgstr "" + +msgid "mrWidget|This merge request failed to be merged automatically" +msgstr "" + +msgid "mrWidget|This merge request is in the process of being merged" +msgstr "" + +msgid "mrWidget|This project is archived, write access has been disabled" +msgstr "" + +msgid "mrWidget|You can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|You can remove source branch now" +msgstr "" + +msgid "mrWidget|command line" +msgstr "" + +msgid "mrWidget|into" +msgstr "" + +msgid "mrWidget|to be merged automatically when the pipeline succeeds" +msgstr "" + msgid "new merge request" msgstr "nouvelle demande de fusion" msgid "notification emails" msgstr "courriels de notification" +msgid "or" +msgstr "" + msgid "parent" msgid_plural "parents" msgstr[0] "parent" @@ -2996,12 +3906,21 @@ msgstr "mot de passe" msgid "personal access token" msgstr "jeton d’accès personnel" +msgid "remove due date" +msgstr "" + msgid "source" msgstr "source" +msgid "spendCommand|%{slash_command} will update the sum of the time spent." +msgstr "" + msgid "to help your contributors communicate effectively!" msgstr "pour aider vos contributeurs à communiquer efficacement !" msgid "username" msgstr "nom d’utilisateur" +msgid "uses Kubernetes clusters to deploy your code!" +msgstr "" + diff --git a/locale/it/gitlab.po b/locale/it/gitlab.po index 8b237dfe450..62a6da1604a 100644 --- a/locale/it/gitlab.po +++ b/locale/it/gitlab.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: gitlab-ee\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-12-12 18:31+0000\n" -"PO-Revision-Date: 2018-01-05 04:42-0500\n" +"POT-Creation-Date: 2018-02-07 11:38-0600\n" +"PO-Revision-Date: 2018-02-12 04:00-0500\n" "Last-Translator: gitlab <mbartlett+crowdin@gitlab.com>\n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -16,23 +16,41 @@ msgstr "" "X-Crowdin-Language: it\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" +msgid " and" +msgstr "" + msgid "%d commit" msgid_plural "%d commits" msgstr[0] "%d commit" msgstr[1] "%d commits" +msgid "%d commit behind" +msgid_plural "%d commits behind" +msgstr[0] "" +msgstr[1] "" + +msgid "%d issue" +msgid_plural "%d issues" +msgstr[0] "" +msgstr[1] "" + msgid "%d layer" msgid_plural "%d layers" msgstr[0] "%d livello" msgstr[1] "%d livelli" +msgid "%d merge request" +msgid_plural "%d merge requests" +msgstr[0] "" +msgstr[1] "" + msgid "%s additional commit has been omitted to prevent performance issues." msgid_plural "%s additional commits have been omitted to prevent performance issues." msgstr[0] "%s commit aggiuntivo è stato omesso per evitare degradi di prestazioni negli issues." msgstr[1] "%s commit aggiuntivi sono stati omessi per evitare degradi di prestazioni negli issues." -msgid "%{commit_author_link} committed %{commit_timeago}" -msgstr "%{commit_author_link} ha committato %{commit_timeago}" +msgid "%{commit_author_link} authored %{commit_timeago}" +msgstr "" msgid "%{count} participant" msgid_plural "%{count} participants" @@ -45,9 +63,6 @@ msgstr "%{number_commits_behind} commits precedenti %{default_branch}, %{number_ msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt." msgstr "%{number_of_failures} di %{maximum_failures} fallimenti. GitLab consentirà l'accesso al prossimo tentativo." -msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will block access for %{number_of_seconds} seconds." -msgstr "%{number_of_failures} di %{maximum_failures} fallimenti. Gitlab bloccherà l'accesso per %{number_of_seconds} secondi." - msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will not retry automatically. Reset storage information when the problem is resolved." msgstr "%{number_of_failures} di %{maximum_failures} fallimenti. Gitlab non ritenterà automaticamente. Ripristina l'informazioni d'archiviazione quando il problema è risolto." @@ -121,24 +136,81 @@ msgstr "Aggiungi Licenza" msgid "Add new directory" msgstr "Aggiungi una directory (cartella)" +msgid "Add todo" +msgstr "" + +msgid "AdminArea|Stop all jobs" +msgstr "" + +msgid "AdminArea|Stop all jobs?" +msgstr "" + +msgid "AdminArea|Stop jobs" +msgstr "" + +msgid "AdminArea|Stopping jobs failed" +msgstr "" + +msgid "AdminArea|You’re about to stop all jobs. This will halt all current jobs that are running." +msgstr "" + msgid "AdminHealthPageLink|health page" msgstr "Pagina di stato" +msgid "Advanced" +msgstr "" + msgid "Advanced settings" msgstr "Impostazioni Avanzate" msgid "All" msgstr "Tutto" +msgid "All changes are committed" +msgstr "" + +msgid "Allows you to add and manage Kubernetes clusters." +msgstr "" + +msgid "An error occurred previewing the blob" +msgstr "" + msgid "An error occurred when toggling the notification subscription" msgstr "Errore durante l'attivazione/disattivazione della sottoscrizione per l'iscrizione" msgid "An error occurred when updating the issue weight" msgstr "" +msgid "An error occurred while dismissing the feature highlight. Refresh the page and try dismissing again." +msgstr "" + +msgid "An error occurred while fetching markdown preview" +msgstr "" + msgid "An error occurred while fetching sidebar data" msgstr "Errore durante il recupero dei dati della barra laterale" +msgid "An error occurred while getting projects" +msgstr "" + +msgid "An error occurred while loading filenames" +msgstr "" + +msgid "An error occurred while rendering KaTeX" +msgstr "" + +msgid "An error occurred while rendering preview broadcast message" +msgstr "" + +msgid "An error occurred while retrieving calendar activity" +msgstr "" + +msgid "An error occurred while retrieving diff" +msgstr "" + +msgid "An error occurred while validating username" +msgstr "" + msgid "An error occurred. Please try again." msgstr "Si è verificato un errore. Riprova." @@ -163,9 +235,6 @@ msgstr "Sei sicuro di voler cancellare questa pipeline programmata?" msgid "Are you sure you want to discard your changes?" msgstr "Vuoi davvero ignorare le modifiche?" -msgid "Are you sure you want to leave this group?" -msgstr "Vuoi davvero lasciare questo gruppo?" - msgid "Are you sure you want to reset registration token?" msgstr "Sei sicuro di voler ripristinare il token di registrazione?" @@ -178,6 +247,21 @@ msgstr "Sei sicuro?" msgid "Artifacts" msgstr "Artefatti" +msgid "Assign custom color like #FF0000" +msgstr "" + +msgid "Assign labels" +msgstr "" + +msgid "Assign milestone" +msgstr "" + +msgid "Assign to" +msgstr "" + +msgid "Assignee" +msgstr "" + msgid "Attach a file by drag & drop or %{upload_link}" msgstr "Aggiungi un file tramite trascina & rilascia ( drag & drop) o %{upload_link}" @@ -193,15 +277,18 @@ msgstr "Log di autenticazione" msgid "Author" msgstr "Autore" -msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly." -msgstr "Le app d'auto-review e l'Auto Deploy (rilascio automatico) necessita di un nome dominio e il servizio %{kubernetes} per funzionare correttamente." +msgid "Authors: %{authors}" +msgstr "" + +msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly." +msgstr "" + +msgid "Auto Review Apps and Auto Deploy need a domain name and a %{kubernetes} to work correctly." +msgstr "" msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly." msgstr "Le app d'auto-review e l'Auto Deploy (rilascio automatico) necessita di un nome dominio per funzionare correttamente." -msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly." -msgstr "Le app d'auto-review e l'Auto Deploy (rilascio automatico) necessita del servizio %{kubernetes} per funzionare correttamente." - msgid "AutoDevOps|Auto DevOps (Beta)" msgstr "Auto DevOps (Béta)" @@ -223,6 +310,12 @@ msgstr "Puoi attivare %{link_to_settings} per questo progetto." msgid "Available" msgstr "Disponibile" +msgid "Avatar will be removed. Are you sure?" +msgstr "" + +msgid "Average per day: %{average}" +msgstr "" + msgid "Billing" msgstr "" @@ -277,6 +370,9 @@ msgstr "" msgid "BillingPlans|per user" msgstr "" +msgid "Begin with the selected commit" +msgstr "" + msgid "Branch" msgid_plural "Branches" msgstr[0] "" @@ -405,8 +501,8 @@ msgstr "per" msgid "CI / CD" msgstr "CI / CD" -msgid "CI configuration" -msgstr "Configurazione CI (Integrazione Continua)" +msgid "CI/CD configuration" +msgstr "" msgid "CICD|Jobs" msgstr "Jobs" @@ -417,6 +513,9 @@ msgstr "Cancella" msgid "Cancel edit" msgstr "Annulla modifica" +msgid "Cannot modify managed Kubernetes cluster" +msgstr "" + msgid "Change Weight" msgstr "" @@ -432,15 +531,24 @@ msgstr "Cherry-pick" msgid "ChangeTypeAction|Revert" msgstr "Ripristina" +msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes." +msgstr "" + msgid "Changelog" msgstr "Changelog" +msgid "Changes are shown as if the <b>source</b> revision was being merged into the <b>target</b> revision." +msgstr "" + msgid "Charts" msgstr "Grafici" msgid "Chat" msgstr "Chat" +msgid "Check interval" +msgstr "" + msgid "Checking %{text} availability…" msgstr "Controllo disponibilità per %{text}…" @@ -453,7 +561,19 @@ msgstr "Cherry-pick di questo commit" msgid "Cherry-pick this merge request" msgstr "Cherry-pick questa richiesta di merge" -msgid "Choose which groups you wish to replicate to this secondary node. Leave blank to replicate all." +msgid "Choose File ..." +msgstr "" + +msgid "Choose a branch/tag (e.g. %{master}) or enter a commit (e.g. %{sha}) to see what's changed or to create a merge request." +msgstr "" + +msgid "Choose file..." +msgstr "" + +msgid "Choose which groups you wish to synchronize to this secondary node." +msgstr "" + +msgid "Choose which shards you wish to synchronize to this secondary node." msgstr "" msgid "CiStatusLabel|canceled" @@ -510,80 +630,92 @@ msgstr "saltata" msgid "CiStatus|running" msgstr "in corso" +msgid "CiVariables|Input variable key" +msgstr "" + +msgid "CiVariables|Input variable value" +msgstr "" + +msgid "CiVariables|Remove variable row" +msgstr "" + +msgid "CiVariable|* (All environments)" +msgstr "" + +msgid "CiVariable|All environments" +msgstr "" + +msgid "CiVariable|Create wildcard" +msgstr "" + +msgid "CiVariable|Error occured while saving variables" +msgstr "" + +msgid "CiVariable|New environment" +msgstr "" + +msgid "CiVariable|Protected" +msgstr "" + +msgid "CiVariable|Search environments" +msgstr "" + +msgid "CiVariable|Toggle protected" +msgstr "" + +msgid "CiVariable|Validation failed" +msgstr "" + msgid "CircuitBreakerApiLink|circuitbreaker api" msgstr "api circuitbreaker" +msgid "Click to expand text" +msgstr "" + msgid "Clone repository" msgstr "Clona repository" msgid "Close" msgstr "" -msgid "Cluster" -msgstr "Cluster" - -msgid "ClusterIntegration|%{appList} was successfully installed on your cluster" -msgstr "%{appList} è stata installata con successo nel tuo cluster" +msgid "Closed" +msgstr "" -msgid "ClusterIntegration|%{boldNotice} This will add some extra resources like a load balancer, which incur additional costs. See %{pricingLink}" -msgstr "%{boldNotice} Ciò richiederà delle risorse extra come un load balancer, dove si applicheranno costi aggiuntivi. Consulta %{pricingLink}" +msgid "ClusterIntegration|%{appList} was successfully installed on your Kubernetes cluster" +msgstr "" msgid "ClusterIntegration|API URL" msgstr "API URL" -msgid "ClusterIntegration|Active" -msgstr "Attivo" - -msgid "ClusterIntegration|Add an existing cluster" -msgstr "Aggiungi un cluster esistente" +msgid "ClusterIntegration|Add Kubernetes cluster" +msgstr "" -msgid "ClusterIntegration|Add cluster" -msgstr "Aggiungi cluster" +msgid "ClusterIntegration|Add an existing Kubernetes cluster" +msgstr "" -msgid "ClusterIntegration|All" -msgstr "Tutti" +msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration" +msgstr "" msgid "ClusterIntegration|Applications" msgstr "Applicazioni" +msgid "ClusterIntegration|Are you sure you want to remove this Kubernetes cluster's integration? This will not delete your actual Kubernetes cluster." +msgstr "" + msgid "ClusterIntegration|CA Certificate" msgstr "Certificato CA" msgid "ClusterIntegration|Certificate Authority bundle (PEM format)" msgstr "Certificate Authority bundle (formato PEM)" -msgid "ClusterIntegration|Choose how to set up cluster integration" -msgstr "Scegli come impostare l'integrazione cluster" - -msgid "ClusterIntegration|Cluster" -msgstr "Cluster" - -msgid "ClusterIntegration|Cluster details" -msgstr "Dettagli Cluster" - -msgid "ClusterIntegration|Cluster integration" -msgstr "Integrazione Cluster" - -msgid "ClusterIntegration|Cluster integration is disabled for this project." -msgstr "L'integrazione dei cluster è disabilitata per questo progetto." - -msgid "ClusterIntegration|Cluster integration is enabled for this project." -msgstr "L'integrazione dei cluster è abilitata per questo progetto." - -msgid "ClusterIntegration|Cluster integration is enabled for this project. Disabling this integration will not affect your cluster, it will only temporarily turn off GitLab's connection to it." -msgstr "L'integrazione dei cluster è abilitata per questo progetto. Se la disabiliti il tuo cluster non sarà modificato, sarà solo spenta la connessione a Gitlab." - -msgid "ClusterIntegration|Cluster is being created on Google Kubernetes Engine..." +msgid "ClusterIntegration|Choose how to set up Kubernetes cluster integration" msgstr "" -msgid "ClusterIntegration|Cluster name" -msgstr "Nome Cluster" - -msgid "ClusterIntegration|Cluster was successfully created on Google Kubernetes Engine. Refresh the page to see cluster's details" +msgid "ClusterIntegration|Choose which of your project's environments will use this Kubernetes cluster." msgstr "" -msgid "ClusterIntegration|Clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" -msgstr "I cluster di consentono di revisionare le app, effettuare rilasci, eseguire pipelines, e molto altro in modo semplice. %{link_to_help_page}" +msgid "ClusterIntegration|Control how your Kubernetes cluster integrates with GitLab" +msgstr "" msgid "ClusterIntegration|Copy API URL" msgstr "Copia URL API" @@ -591,38 +723,35 @@ msgstr "Copia URL API" msgid "ClusterIntegration|Copy CA Certificate" msgstr "Copia Certificato CA" +msgid "ClusterIntegration|Copy Kubernetes cluster name" +msgstr "" + msgid "ClusterIntegration|Copy Token" msgstr "Copia Token" -msgid "ClusterIntegration|Copy cluster name" -msgstr "Copia nome del cluster" - -msgid "ClusterIntegration|Create a new cluster on Google Engine right from GitLab" -msgstr "Crea un nuovo cluster su Google Engine direttamente da Gitlab" +msgid "ClusterIntegration|Create Kubernetes cluster" +msgstr "" -msgid "ClusterIntegration|Create cluster" -msgstr "Crea cluster" +msgid "ClusterIntegration|Create Kubernetes cluster on Google Kubernetes Engine" +msgstr "" -msgid "ClusterIntegration|Create cluster on Google Kubernetes Engine" +msgid "ClusterIntegration|Create a new Kubernetes cluster on Google Kubernetes Engine right from GitLab" msgstr "" msgid "ClusterIntegration|Create on GKE" msgstr "Crea su GKE" -msgid "ClusterIntegration|Enable cluster integration" -msgstr "Abilita integrazione cluster" - msgid "ClusterIntegration|Enter the details for an existing Kubernetes cluster" msgstr "Inserisci i dettagli per un cluster Kubernetes esistente" -msgid "ClusterIntegration|Enter the details for your cluster" -msgstr "Inserisci i dettagli per il tuo cluster" +msgid "ClusterIntegration|Enter the details for your Kubernetes cluster" +msgstr "" -msgid "ClusterIntegration|Environment pattern" -msgstr "Environment pattern" +msgid "ClusterIntegration|Environment scope" +msgstr "" -msgid "ClusterIntegration|GKE pricing" -msgstr "Prezzi GKE" +msgid "ClusterIntegration|GitLab Integration" +msgstr "" msgid "ClusterIntegration|GitLab Runner" msgstr "Gitlab Runner" @@ -639,47 +768,83 @@ msgstr "" msgid "ClusterIntegration|Helm Tiller" msgstr "Helm Tiller" -msgid "ClusterIntegration|Inactive" -msgstr "Inattivo" - msgid "ClusterIntegration|Ingress" msgstr "Ingresso" msgid "ClusterIntegration|Install" msgstr "Installa" -msgid "ClusterIntegration|Install applications on your cluster. Read more about %{helpLink}" -msgstr "Installa applicazioni sul tuo cluster. Leggi di più a riguardo %{helpLink}" - msgid "ClusterIntegration|Installed" msgstr "Installato" msgid "ClusterIntegration|Installing" msgstr "" -msgid "ClusterIntegration|Integrate cluster automation" +msgid "ClusterIntegration|Integrate Kubernetes cluster automation" +msgstr "" + +msgid "ClusterIntegration|Integration status" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster details" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is disabled for this project." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project. Disabling this integration will not affect your Kubernetes cluster, it will only temporarily turn off GitLab's connection to it." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster is being created on Google Kubernetes Engine..." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster name" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters can be used to deploy applications and to provide Review Apps for this project" msgstr "" msgid "ClusterIntegration|Learn more about %{link_to_documentation}" msgstr "" -msgid "ClusterIntegration|Learn more about Clusters" -msgstr "Approfondisci riguardo i Clusters" +msgid "ClusterIntegration|Learn more about Kubernetes" +msgstr "" + +msgid "ClusterIntegration|Learn more about environments" +msgstr "" msgid "ClusterIntegration|Machine type" msgstr "Tipo di macchina" -msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create clusters" -msgstr "Assicurati che il tuo account %{link_to_requirements} per creare i cluster" +msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create Kubernetes clusters" +msgstr "" + +msgid "ClusterIntegration|Manage" +msgstr "" -msgid "ClusterIntegration|Manage cluster integration on your GitLab project" -msgstr "Gestisci l'integrazione dei cluster nel tuo progetto GitLab" +msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}" +msgstr "" -msgid "ClusterIntegration|Manage your cluster by visiting %{link_gke}" -msgstr "Gestisci i tuoi cluster visitando %{link_gke}" +msgid "ClusterIntegration|More information" +msgstr "" -msgid "ClusterIntegration|Multiple clusters are available in GitLab Entreprise Edition Premium and Ultimate" -msgstr "I cluster multipli sono disponibili nell'edizione Enterprise di Gitlab (Premium e Ultimate)" +msgid "ClusterIntegration|Multiple Kubernetes clusters are available in GitLab Enterprise Edition Premium and Ultimate" +msgstr "" msgid "ClusterIntegration|Note:" msgstr "Nota:" @@ -687,18 +852,12 @@ msgstr "Nota:" msgid "ClusterIntegration|Number of nodes" msgstr "Numero di nodi" -msgid "ClusterIntegration|Please enter access information for your cluster. If you need help, you can read our %{link_to_help_page} on clusters" +msgid "ClusterIntegration|Please enter access information for your Kubernetes cluster. If you need help, you can read our %{link_to_help_page} on Kubernetes" msgstr "" msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:" msgstr "" -msgid "ClusterIntegration|Problem setting up the cluster" -msgstr "" - -msgid "ClusterIntegration|Problem setting up the clusters list" -msgstr "" - msgid "ClusterIntegration|Project ID" msgstr "" @@ -708,16 +867,19 @@ msgstr "" msgid "ClusterIntegration|Project namespace (optional, unique)" msgstr "" -msgid "ClusterIntegration|Read our %{link_to_help_page} on cluster integration." +msgid "ClusterIntegration|Prometheus" msgstr "" -msgid "ClusterIntegration|Remove cluster integration" +msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration." +msgstr "" + +msgid "ClusterIntegration|Remove Kubernetes cluster integration" msgstr "" msgid "ClusterIntegration|Remove integration" msgstr "" -msgid "ClusterIntegration|Removing cluster integration will remove the cluster configuration you have added to this project. It will not delete your cluster on Google Kubernetes Engine." +msgid "ClusterIntegration|Remove this Kubernetes cluster's configuration from this project. This will not delete your actual Kubernetes cluster." msgstr "" msgid "ClusterIntegration|Request to begin installing failed" @@ -726,7 +888,7 @@ msgstr "" msgid "ClusterIntegration|Save changes" msgstr "" -msgid "ClusterIntegration|See and edit the details for your cluster" +msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster" msgstr "" msgid "ClusterIntegration|See machine types" @@ -747,25 +909,25 @@ msgstr "" msgid "ClusterIntegration|Something went wrong on our end." msgstr "" -msgid "ClusterIntegration|Something went wrong while creating your cluster on Google Kubernetes Engine" +msgid "ClusterIntegration|Something went wrong while creating your Kubernetes cluster on Google Kubernetes Engine" msgstr "" msgid "ClusterIntegration|Something went wrong while installing %{title}" msgstr "" -msgid "ClusterIntegration|There are no clusters to show" +msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below" msgstr "" -msgid "ClusterIntegration|This account must have permissions to create a cluster in the %{link_to_container_project} specified below" +msgid "ClusterIntegration|Toggle Kubernetes Cluster" msgstr "" -msgid "ClusterIntegration|Toggle Cluster" +msgid "ClusterIntegration|Toggle Kubernetes cluster" msgstr "" msgid "ClusterIntegration|Token" msgstr "" -msgid "ClusterIntegration|With a cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." +msgid "ClusterIntegration|With a Kubernetes cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." msgstr "" msgid "ClusterIntegration|Your account must have %{link_to_kubernetes_engine}" @@ -777,7 +939,7 @@ msgstr "" msgid "ClusterIntegration|access to Google Kubernetes Engine" msgstr "" -msgid "ClusterIntegration|cluster" +msgid "ClusterIntegration|check the pricing here" msgstr "" msgid "ClusterIntegration|documentation" @@ -795,6 +957,9 @@ msgstr "" msgid "ClusterIntegration|properly configured" msgstr "" +msgid "Collapse" +msgstr "" + msgid "Comments" msgstr "Commenti" @@ -812,6 +977,9 @@ msgstr "Durata del commit (in minuti) per gli ultimi 30 commit" msgid "Commit message" msgstr "Messaggio del commit" +msgid "Commit statistics for %{ref} %{start_time} - %{end_time}" +msgstr "" + msgid "CommitBoxTitle|Commit" msgstr "Commit" @@ -824,15 +992,57 @@ msgstr "Commits" msgid "Commits feed" msgstr "Feed dei Commits" +msgid "Commits per day hour (UTC)" +msgstr "" + +msgid "Commits per day of month" +msgstr "" + +msgid "Commits per weekday" +msgstr "" + +msgid "Commits|An error occurred while fetching merge requests data." +msgstr "" + +msgid "Commits|Commit: %{commitText}" +msgstr "" + msgid "Commits|History" msgstr "Cronologia" +msgid "Commits|No related merge requests found" +msgstr "" + msgid "Committed by" msgstr "Committato da " msgid "Compare" msgstr "Confronta" +msgid "Compare Git revisions" +msgstr "" + +msgid "Compare Revisions" +msgstr "" + +msgid "CompareBranches|%{source_branch} and %{target_branch} are the same." +msgstr "" + +msgid "CompareBranches|Compare" +msgstr "" + +msgid "CompareBranches|Source" +msgstr "" + +msgid "CompareBranches|Target" +msgstr "" + +msgid "CompareBranches|There isn't anything to compare." +msgstr "" + +msgid "Confidentiality" +msgstr "" + msgid "Container Registry" msgstr "" @@ -884,6 +1094,9 @@ msgstr "Guida per contribuire" msgid "Contributors" msgstr "Collaboratori" +msgid "ContributorsPage|%{startDate} – %{endDate}" +msgstr "" + msgid "ContributorsPage|Building repository graph." msgstr "Genero grafico della repository." @@ -905,9 +1118,18 @@ msgstr "" msgid "Copy URL to clipboard" msgstr "Copia URL negli appunti" +msgid "Copy branch name to clipboard" +msgstr "" + msgid "Copy commit SHA to clipboard" msgstr "Copia l'SHA del commit negli appunti" +msgid "Copy reference to clipboard" +msgstr "" + +msgid "Create" +msgstr "" + msgid "Create New Directory" msgstr "Crea una nuova cartella" @@ -926,6 +1148,9 @@ msgstr "" msgid "Create file" msgstr "Crea file" +msgid "Create lists from labels. Issues with that label appear in that list." +msgstr "" + msgid "Create merge request" msgstr "Crea una richiesta di merge" @@ -938,6 +1163,9 @@ msgstr "Crea una nuova cartella" msgid "Create new file" msgstr "Crea un nuovo File" +msgid "Create new label" +msgstr "" + msgid "Create new..." msgstr "Crea nuovo..." @@ -959,6 +1187,9 @@ msgstr "Timezone del Cron" msgid "Cron syntax" msgstr "Sintassi Cron" +msgid "Current node" +msgstr "" + msgid "Custom notification events" msgstr "Eventi-Notifica personalizzati" @@ -968,9 +1199,6 @@ msgstr "I livelli di notifica personalizzati sono uguali a quelli di partecipazi msgid "Cycle Analytics" msgstr "Statistiche Cicliche" -msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project." -msgstr "L'Analisi Ciclica fornisce una panoramica sul tempo che trascorre tra l'idea ed il rilascio in produzione del tuo progetto" - msgid "CycleAnalyticsStage|Code" msgstr "Codice" @@ -1027,12 +1255,21 @@ msgstr "" msgid "Details" msgstr "Dettagli" +msgid "Diffs|No file name available" +msgstr "" + msgid "Directory name" msgstr "Nome cartella" +msgid "Disable" +msgstr "" + msgid "Discard changes" msgstr "Annulla modifiche" +msgid "Discover GitLab Geo." +msgstr "" + msgid "Dismiss Cycle Analytics introduction box" msgstr "Chiudi l'introduzione alle Analisi Cicliche" @@ -1069,15 +1306,24 @@ msgstr "Differenze" msgid "DownloadSource|Download" msgstr "Scarica" +msgid "Due date" +msgstr "" + msgid "Edit" msgstr "Modifica" msgid "Edit Pipeline Schedule %{id}" msgstr "Cambia programmazione della pipeline %{id}" +msgid "Edit files in the editor and commit changes here" +msgstr "" + msgid "Emails" msgstr "E-mail" +msgid "Enable" +msgstr "" + msgid "Environments|An error occurred while fetching the environments." msgstr "Errore durante il fetch degli ambienti." @@ -1096,9 +1342,6 @@ msgstr "Ambiente" msgid "Environments|Environments" msgstr "Ambienti" -msgid "Environments|Environments are places where code gets deployed, such as staging or production." -msgstr "Gli ambienti sono gli spazi dove il codice viene rilasciato, come staging o produzione." - msgid "Environments|Job" msgstr "Job" @@ -1141,9 +1384,33 @@ msgstr "" msgid "Error creating epic" msgstr "" +msgid "Error fetching contributors data." +msgstr "" + +msgid "Error fetching labels." +msgstr "" + +msgid "Error fetching network graph." +msgstr "" + +msgid "Error fetching refs" +msgstr "" + +msgid "Error fetching usage ping data." +msgstr "" + msgid "Error occurred when toggling the notification subscription" msgstr "Errore durante l'attivazione/disattivazione della sottoscrizione per l'iscrizione" +msgid "Error saving label update." +msgstr "" + +msgid "Error updating status for all todos." +msgstr "" + +msgid "Error updating todo status." +msgstr "" + msgid "EventFilterBy|Filter by all" msgstr "Filtra per tutti" @@ -1171,6 +1438,9 @@ msgstr "Ogni primo giorno del mese (alle 4 del mattino)" msgid "Every week (Sundays at 4:00am)" msgstr "Ogni settimana (Di domenica alle 4 del mattino)" +msgid "Expand" +msgstr "" + msgid "Explore projects" msgstr "Esplora progetti" @@ -1189,6 +1459,9 @@ msgstr "Feb" msgid "February" msgstr "Febbraio" +msgid "Fields on this page are now uneditable, you can configure" +msgstr "" + msgid "File name" msgstr "Nome file" @@ -1233,10 +1506,10 @@ msgstr "Dalla richiesta di merge fino effettua il merge fino al rilascio in prod msgid "GPG Keys" msgstr "Chiavi GPG" -msgid "Geo Nodes" +msgid "Generate a default set of labels" msgstr "" -msgid "GeoNodeSyncStatus|Failed" +msgid "Geo Nodes" msgstr "" msgid "GeoNodeSyncStatus|Node is failing or broken." @@ -1245,16 +1518,100 @@ msgstr "" msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage." msgstr "" -msgid "GeoNodeSyncStatus|Out of sync" +msgid "GeoNodes|Database replication lag:" +msgstr "" + +msgid "GeoNodes|Disabling a node stops the sync process. Are you sure?" +msgstr "" + +msgid "GeoNodes|Does not match the primary storage configuration" +msgstr "" + +msgid "GeoNodes|Failed" +msgstr "" + +msgid "GeoNodes|Full" +msgstr "" + +msgid "GeoNodes|GitLab version does not match the primary node version" msgstr "" -msgid "GeoNodeSyncStatus|Synced" +msgid "GeoNodes|GitLab version:" +msgstr "" + +msgid "GeoNodes|Health status:" +msgstr "" + +msgid "GeoNodes|Last event ID processed by cursor:" +msgstr "" + +msgid "GeoNodes|Last event ID seen from primary:" +msgstr "" + +msgid "GeoNodes|Loading nodes" +msgstr "" + +msgid "GeoNodes|Local Attachments:" +msgstr "" + +msgid "GeoNodes|Local LFS objects:" +msgstr "" + +msgid "GeoNodes|Local job artifacts:" +msgstr "" + +msgid "GeoNodes|New node" +msgstr "" + +msgid "GeoNodes|Out of sync" +msgstr "" + +msgid "GeoNodes|Replication slot WAL:" +msgstr "" + +msgid "GeoNodes|Replication slots:" +msgstr "" + +msgid "GeoNodes|Repositories:" +msgstr "" + +msgid "GeoNodes|Selective" +msgstr "" + +msgid "GeoNodes|Storage config:" +msgstr "" + +msgid "GeoNodes|Sync settings:" +msgstr "" + +msgid "GeoNodes|Synced" +msgstr "" + +msgid "GeoNodes|Unused slots" +msgstr "" + +msgid "GeoNodes|Used slots" +msgstr "" + +msgid "GeoNodes|Wikis:" +msgstr "" + +msgid "GeoNodes|You have configured Geo nodes using an insecure HTTP connection. We recommend the use of HTTPS." +msgstr "" + +msgid "Geo|All projects" msgstr "" msgid "Geo|File sync capacity" msgstr "" -msgid "Geo|Groups to replicate" +msgid "Geo|Groups to synchronize" +msgstr "" + +msgid "Geo|Projects in certain groups" +msgstr "" + +msgid "Geo|Projects in certain storage shards" msgstr "" msgid "Geo|Repository sync capacity" @@ -1263,12 +1620,24 @@ msgstr "" msgid "Geo|Select groups to replicate." msgstr "" +msgid "Geo|Shards to synchronize" +msgstr "" + +msgid "Git revision" +msgstr "" + msgid "Git storage health information has been reset" msgstr "Le informazioni sullo stato dell'archiviazione Git è stata ripristinata" +msgid "Git version" +msgstr "" + msgid "GitLab Runner section" msgstr "Sezione Gitlab Runner" +msgid "Gitaly Servers" +msgstr "" + msgid "Go to your fork" msgstr "Vai il tuo fork" @@ -1278,6 +1647,9 @@ msgstr "Fork" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "L'autenticazione Google non è %{link_to_documentation}. Richiedi al tuo amministratore Gitlab se desideri utilizzare il servizio." +msgid "Got it!" +msgstr "" + msgid "GroupSettings|Prevent sharing a project within %{group} with other groups" msgstr "Blocca la condivisione di un progetto di %{group} con altri gruppi" @@ -1314,7 +1686,7 @@ msgstr "" msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group." msgstr "" -msgid "GroupsTree|Are you sure you want to leave the \"${this.group.fullName}\" group?" +msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?" msgstr "" msgid "GroupsTree|Create a project in this group." @@ -1365,6 +1737,11 @@ msgstr "" msgid "HealthCheck|Unhealthy" msgstr "" +msgid "Hide value" +msgid_plural "Hide values" +msgstr[0] "" +msgstr[1] "" + msgid "History" msgstr "Cronologia" @@ -1391,6 +1768,12 @@ msgid_plural "Instances" msgstr[0] "" msgstr[1] "" +msgid "Instance does not support multiple Kubernetes clusters" +msgstr "" + +msgid "Interested parties can even contribute by pushing commits if they want to." +msgstr "" + msgid "Internal - The group and any internal projects can be viewed by any logged in user." msgstr "" @@ -1418,6 +1801,9 @@ msgstr "" msgid "Issues" msgstr "" +msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable." +msgstr "" + msgid "Jan" msgstr "Gen" @@ -1436,6 +1822,27 @@ msgstr "Giu" msgid "June" msgstr "Giugno" +msgid "Kubernetes" +msgstr "" + +msgid "Kubernetes Cluster" +msgstr "" + +msgid "Kubernetes cluster creation time exceeds timeout; %{timeout}" +msgstr "" + +msgid "Kubernetes cluster integration was not removed." +msgstr "" + +msgid "Kubernetes cluster integration was successfully removed." +msgstr "" + +msgid "Kubernetes cluster was successfully updated." +msgstr "" + +msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page" +msgstr "" + msgid "LFSStatus|Disabled" msgstr "Disabilitato" @@ -1445,6 +1852,9 @@ msgstr "Abilitato" msgid "Labels" msgstr "" +msgid "Labels can be applied to issues and merge requests to categorize them." +msgstr "" + msgid "Last %d day" msgid_plural "Last %d days" msgstr[0] "L'ultimo %d giorno" @@ -1474,6 +1884,9 @@ msgstr "" msgid "LastPushEvent|at" msgstr "" +msgid "Learn more" +msgstr "" + msgid "Learn more in the" msgstr "Leggi di più su" @@ -1492,14 +1905,18 @@ msgstr "Abbandona il progetto" msgid "License" msgstr "" -msgid "Limited to showing %d event at most" -msgid_plural "Limited to showing %d events at most" -msgstr[0] "Limita visualizzazione %d d'evento" -msgstr[1] "Limita visualizzazione %d di eventi" +msgid "Loading the GitLab IDE..." +msgstr "" msgid "Lock" msgstr "" +msgid "Lock %{issuableDisplayName}" +msgstr "" + +msgid "Lock this %{issuableDisplayName}? Only <strong>project members</strong> will be able to comment." +msgstr "" + msgid "Locked" msgstr "Bloccato" @@ -1509,12 +1926,21 @@ msgstr "" msgid "Login" msgstr "Login" +msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos." +msgstr "" + +msgid "Manage labels" +msgstr "" + msgid "Mar" msgstr "Mar" msgid "March" msgstr "Marzo" +msgid "Mark done" +msgstr "" + msgid "Maximum git storage failures" msgstr "" @@ -1527,6 +1953,9 @@ msgstr "Mediano" msgid "Members" msgstr "Membri" +msgid "Merge Request" +msgstr "" + msgid "Merge Requests" msgstr "Richieste di merge" @@ -1536,9 +1965,30 @@ msgstr "" msgid "Merge request" msgstr "Richiesta di merge" +msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others" +msgstr "" + +msgid "Merged" +msgstr "" + msgid "Messages" msgstr "Messaggi" +msgid "Milestone" +msgstr "" + +msgid "Milestones|Delete milestone" +msgstr "" + +msgid "Milestones|Delete milestone %{milestoneTitle}?" +msgstr "" + +msgid "Milestones|Failed to delete milestone %{milestoneTitle}" +msgstr "" + +msgid "Milestones|Milestone %{milestoneTitle} was not found" +msgstr "" + msgid "MissingSSHKeyWarningLink|add an SSH key" msgstr "aggiungi una chiave SSH" @@ -1548,17 +1998,29 @@ msgstr "Monitoraggio" msgid "More information is available|here" msgstr "Ulteriori informazioni sono disponibili | qui" +msgid "Move" +msgstr "" + +msgid "Move issue" +msgstr "" + msgid "Multiple issue boards" msgstr "" -msgid "New Cluster" -msgstr "Nuovo Cluster" +msgid "Name new label" +msgstr "" msgid "New Issue" msgid_plural "New Issues" msgstr[0] "Nuovo Issue" msgstr[1] "Nuovi Issues" +msgid "New Kubernetes Cluster" +msgstr "" + +msgid "New Kubernetes cluster" +msgstr "" + msgid "New Pipeline Schedule" msgstr "Nuova pianificazione Pipeline" @@ -1583,6 +2045,9 @@ msgstr "Nuovo gruppo" msgid "New issue" msgstr "Nuovo Issue" +msgid "New label" +msgstr "" + msgid "New merge request" msgstr "Nuova richiesta di merge" @@ -1601,7 +2066,22 @@ msgstr "Nuovo sottogruppo" msgid "New tag" msgstr "Nuovo tag" -msgid "No container images stored for this project. Add one by following the instructions above." +msgid "No assignee" +msgstr "" + +msgid "No changes" +msgstr "" + +msgid "No connection could be made to a Gitaly Server, please check your logs!" +msgstr "" + +msgid "No due date" +msgstr "" + +msgid "No estimate or time spent" +msgstr "" + +msgid "No file chosen" msgstr "" msgid "No repository" @@ -1616,9 +2096,15 @@ msgstr "" msgid "None" msgstr "Nessuno" +msgid "Not allowed to merge" +msgstr "" + msgid "Not available" msgstr "Non disponibile" +msgid "Not confidential" +msgstr "" + msgid "Not enough data" msgstr "Dati insufficienti " @@ -1679,6 +2165,12 @@ msgstr "Osserva" msgid "Notifications" msgstr "Notifiche" +msgid "Notifications off" +msgstr "" + +msgid "Notifications on" +msgstr "" + msgid "Nov" msgstr "Nov" @@ -1688,7 +2180,7 @@ msgstr "Novembre" msgid "Number of access attempts" msgstr "Numero di tentativi di accesso raggiunto" -msgid "Number of failures before backing off" +msgid "OK" msgstr "" msgid "Oct" @@ -1703,6 +2195,9 @@ msgstr "Filtra" msgid "Only project members can comment." msgstr "Solo i membri del progetto possono commentare." +msgid "Open" +msgstr "" + msgid "Opened" msgstr "" @@ -1736,9 +2231,6 @@ msgstr "« Prima" msgid "Password" msgstr "Password" -msgid "People without permission will never get a notification and won\\'t be able to comment." -msgstr "Le persone che non hanno il permesso non saranno notificate e non potranno commentare." - msgid "Pipeline" msgstr "Pipeline" @@ -1781,12 +2273,6 @@ msgstr "Tutto" msgid "PipelineSchedules|Inactive" msgstr "Inattiva" -msgid "PipelineSchedules|Input variable key" -msgstr "Chiave della variabile" - -msgid "PipelineSchedules|Input variable value" -msgstr "Valore della variabile" - msgid "PipelineSchedules|Next Run" msgstr "Prossima esecuzione" @@ -1796,9 +2282,6 @@ msgstr "Nessuna" msgid "PipelineSchedules|Provide a short description for this pipeline" msgstr "Fornisci una breve descrizione per questa pipeline" -msgid "PipelineSchedules|Remove variable row" -msgstr "Rimuovi riga della variabile" - msgid "PipelineSchedules|Take ownership" msgstr "Prendi possesso" @@ -1826,6 +2309,12 @@ msgstr "Pipeline per la settimana scorsa" msgid "Pipelines for last year" msgstr "Pipeline per l'ultimo anno" +msgid "Pipelines|Build with confidence" +msgstr "" + +msgid "Pipelines|Get started with Pipelines" +msgstr "" + msgid "Pipeline|all" msgstr "tutto" @@ -1838,12 +2327,21 @@ msgstr "con stadio" msgid "Pipeline|with stages" msgstr "con più stadi" +msgid "Play" +msgstr "" + +msgid "Please <a href=%{link_to_billing} target=\"_blank\" rel=\"noopener noreferrer\">enable billing for one of your projects to be able to create a Kubernetes cluster</a>, then try again." +msgstr "" + msgid "Please solve the reCAPTCHA" msgstr "" msgid "Preferences" msgstr "Preferenze" +msgid "Primary" +msgstr "" + msgid "Private - Project access must be granted explicitly to each user." msgstr "Privato - L'accesso al progetto deve essere fornito esplicitamente ad ogni utente." @@ -1889,6 +2387,9 @@ msgstr "Il tuo account è attualmente proprietario in questi gruppi:" msgid "Profiles|your account" msgstr "il tuo account" +msgid "Programming languages used in this repository" +msgstr "" + msgid "Project '%{project_name}' is in the process of being deleted." msgstr "Il progetto '%{project_name}' è in fase di eliminazione." @@ -1904,6 +2405,15 @@ msgstr "Il Progetto '%{project_name}' è stato aggiornato con successo." msgid "Project access must be granted explicitly to each user." msgstr "L'accesso al progetto dev'esser fornito esplicitamente ad ogni utente" +msgid "Project avatar" +msgstr "" + +msgid "Project avatar in repository: %{link}" +msgstr "" + +msgid "Project cache successfully reset." +msgstr "" + msgid "Project details" msgstr "Dettagli del progetto" @@ -1922,6 +2432,21 @@ msgstr "Esportazione del progetto iniziata. Un link di download sarà inviato vi msgid "ProjectActivityRSS|Subscribe" msgstr "Iscriviti" +msgid "ProjectCreationLevel|Allowed to create projects" +msgstr "" + +msgid "ProjectCreationLevel|Default project creation protection" +msgstr "" + +msgid "ProjectCreationLevel|Developers + Masters" +msgstr "" + +msgid "ProjectCreationLevel|Masters" +msgstr "" + +msgid "ProjectCreationLevel|No one" +msgstr "" + msgid "ProjectFeature|Disabled" msgstr "Disabilitato" @@ -1946,15 +2471,9 @@ msgstr "Grafico" msgid "ProjectSettings|Contact an admin to change this setting." msgstr "" -msgid "ProjectSettings|Immediately run a pipeline on the default branch" -msgstr "Esegui subito una pipeline sulla branch di default" - msgid "ProjectSettings|Only signed commits can be pushed to this repository." msgstr "" -msgid "ProjectSettings|Problem setting up the CI/CD settings JavaScript" -msgstr "Problemi durante l'impostazione delle CI/CD JavaScript settings" - msgid "ProjectSettings|This setting is applied on the server level and can be overridden by an admin." msgstr "" @@ -2024,6 +2543,9 @@ msgstr "" msgid "PrometheusService|View environments" msgstr "" +msgid "Protip:" +msgstr "" + msgid "Public - The group and any public projects can be viewed without any authentication." msgstr "Pubblico - il gruppo e tutti i progetti pubblici possono essere visualizzati senza alcuna autenticazione." @@ -2039,6 +2561,9 @@ msgstr "" msgid "PushRule|Committer restriction" msgstr "" +msgid "Quick actions can be used in the issues description and comment boxes." +msgstr "" + msgid "Read more" msgstr "Vedi altro" @@ -2051,6 +2576,12 @@ msgstr "Branches" msgid "RefSwitcher|Tags" msgstr "Tags" +msgid "Reference:" +msgstr "" + +msgid "Register / Sign In" +msgstr "" + msgid "Registry" msgstr "" @@ -2075,9 +2606,18 @@ msgstr "Richieste di Merge Completate Correlate" msgid "Remind later" msgstr "Ricordamelo più tardi" +msgid "Remove" +msgstr "" + +msgid "Remove avatar" +msgstr "" + msgid "Remove project" msgstr "Rimuovi progetto" +msgid "Repair authentication" +msgstr "" + msgid "Repository" msgstr "" @@ -2093,6 +2633,11 @@ msgstr "" msgid "Reset runners registration token" msgstr "" +msgid "Reveal value" +msgid_plural "Reveal values" +msgstr[0] "" +msgstr[1] "" + msgid "Revert this commit" msgstr "Ripristina questo commit" @@ -2102,15 +2647,15 @@ msgstr "Ripristina questa richiesta di merge" msgid "SSH Keys" msgstr "Chiavi SSH" -msgid "Save" -msgstr "Salva" - msgid "Save changes" msgstr "Salva modifiche" msgid "Save pipeline schedule" msgstr "Salva pianificazione pipeline" +msgid "Save variables" +msgstr "" + msgid "Schedule a new pipeline" msgstr "Pianifica una nuova Pipeline" @@ -2126,38 +2671,59 @@ msgstr "" msgid "Search branches and tags" msgstr "Ricerca branches e tags" -msgid "Seconds before reseting failure information" +msgid "Search milestones" msgstr "" -msgid "Seconds to wait after a storage failure" +msgid "Search project" +msgstr "" + +msgid "Search users" +msgstr "" + +msgid "Seconds before reseting failure information" msgstr "" msgid "Seconds to wait for a storage access attempt" msgstr "" +msgid "Secret variables" +msgstr "" + msgid "Select Archive Format" msgstr "Seleziona formato d'archivio" msgid "Select a timezone" msgstr "Seleziona una timezone" +msgid "Select assignee" +msgstr "" + +msgid "Select branch/tag" +msgstr "" + msgid "Select target branch" msgstr "Seleziona una branch di destinazione" +msgid "Selective synchronization" +msgstr "" + msgid "Sep" msgstr "Set" msgid "September" msgstr "Settembre" +msgid "Server version" +msgstr "" + msgid "Service Templates" msgstr "" msgid "Set a password on your account to pull or push via %{protocol}." msgstr "Establezca una contraseña en su cuenta para actualizar o enviar a través de %{protocol}." -msgid "Set up CI" -msgstr "Configura CI" +msgid "Set up CI/CD" +msgstr "" msgid "Set up Koding" msgstr "Configura Koding" @@ -2171,6 +2737,15 @@ msgstr "imposta una password" msgid "Settings" msgstr "Impostazioni" +msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero." +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset pipeline minutes" +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset used pipeline minutes" +msgstr "" + msgid "Show parent pages" msgstr "" @@ -2185,9 +2760,6 @@ msgstr[1] "Visualizza %d eventi" msgid "Sidebar|Change weight" msgstr "" -msgid "Sidebar|Edit" -msgstr "" - msgid "Sidebar|No" msgstr "" @@ -2200,18 +2772,30 @@ msgstr "" msgid "Snippets" msgstr "Snippet" +msgid "Something went wrong on our end" +msgstr "" + msgid "Something went wrong on our end." msgstr "Si è verificato un problema con il nostro server." +msgid "Something went wrong trying to change the confidentiality of this issue" +msgstr "" + msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}" msgstr "" +msgid "Something went wrong when toggling the button" +msgstr "" + msgid "Something went wrong while fetching the projects." msgstr "Qualcosa è andato storto durante il fetch dei progetti." msgid "Something went wrong while fetching the registry list." msgstr "Qualcosa è andato storto durante il recupero dell'elenco dei registri." +msgid "Something went wrong. Please try again." +msgstr "" + msgid "Sort by" msgstr "Ordina per" @@ -2341,10 +2925,10 @@ msgstr "" msgid "Stopped" msgstr "" -msgid "Subgroups" +msgid "Storage" msgstr "" -msgid "Subscribe" +msgid "Subgroups" msgstr "" msgid "Switch branch/tag" @@ -2442,7 +3026,10 @@ msgstr "" msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project." msgstr "" -msgid "The circuitbreaker backoff threshold should be lower than the failure count threshold" +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project" +msgstr "" + +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project." msgstr "" msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request." @@ -2457,10 +3044,10 @@ msgstr "La relazione del fork è stata rimossa" msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage." msgstr "Lo stadio di Issue mostra il tempo che impiega un issue ad esser correlato ad una Milestone, o ad esser aggiunto ad una tua Lavagna. Inizia la creazione di problemi per visualizzare i dati in questo stadio." -msgid "The number of attempts GitLab will make to access a storage." +msgid "The maximum file size allowed is 200KB." msgstr "" -msgid "The number of failures after which GitLab will start temporarily disabling access to a storage shard on a host" +msgid "The number of attempts GitLab will make to access a storage." msgstr "" msgid "The number of failures of after which GitLab will completely prevent access to the storage. The number of failures can be reset in the admin interface: %{link_to_health_page} or using the %{api_documentation_link}." @@ -2469,9 +3056,6 @@ msgstr "" msgid "The phase of the development lifecycle." msgstr "Il ciclo vitale della fase di sviluppo." -msgid "The pipelines schedule runs pipelines in the future, repeatedly, for specific branches or tags. Those scheduled pipelines will inherit limited project access based on their associated user." -msgstr "Le pipelines pianificate vengono eseguite nel futuro, ripetitivamente, per specifici tag o branch ed ereditano restrizioni di progetto basate sull'utente ad esse associato." - msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit." msgstr "Lo stadio di pianificazione mostra il tempo trascorso dal primo commit al suo step precedente. Questo periodo sarà disponibile automaticamente nel momento in cui farai il primo commit." @@ -2502,19 +3086,46 @@ msgstr "" msgid "The time in seconds GitLab will try to access storage. After this time a timeout error will be raised." msgstr "" +msgid "The time in seconds between storage checks. When a previous check did complete yet, GitLab will skip a check." +msgstr "" + msgid "The time taken by each data entry gathered by that stage." msgstr "Il tempo aggregato relativo eventi/data entry raccolto in quello stadio." msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6." msgstr "Il valore falsato nel mezzo di una serie di dati osservati. ES: tra 3,5,9 il mediano è 5. Tra 3,5,7,8 il mediano è (5+7)/2 quindi 6." +msgid "There are no issues to show" +msgstr "" + +msgid "There are no merge requests to show" +msgstr "" + msgid "There are problems accessing Git storage: " msgstr "" +msgid "There was an error loading users activity calendar." +msgstr "" + +msgid "There was an error saving your notification settings." +msgstr "" + +msgid "There was an error subscribing to this label." +msgstr "" + +msgid "There was an error when reseting email token." +msgstr "" + +msgid "There was an error when subscribing to this label." +msgstr "" + +msgid "There was an error when unsubscribing from this label." +msgstr "" + msgid "This board\\'s scope is reduced" msgstr "" -msgid "This branch has changed since you started editing. Would you like to create a new branch?" +msgid "This directory" msgstr "" msgid "This is a confidential issue." @@ -2523,18 +3134,45 @@ msgstr "" msgid "This is the author's first Merge Request to this project." msgstr "" +msgid "This issue is confidential" +msgstr "" + msgid "This issue is confidential and locked." msgstr "" msgid "This issue is locked." msgstr "" +msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments" +msgstr "" + +msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered" +msgstr "" + +msgid "This job has not been triggered yet" +msgstr "" + +msgid "This job has not started yet" +msgstr "" + +msgid "This job is in pending state and is waiting to be picked by a runner" +msgstr "" + +msgid "This job requires a manual action" +msgstr "" + msgid "This means you can not push code until you create an empty repository or import existing one." msgstr "Questo significa che non è possibile effettuare push di codice fino a che non crei una repository vuota o ne importi una esistente" msgid "This merge request is locked." msgstr "" +msgid "This project" +msgstr "" + +msgid "This repository" +msgstr "" + msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here." msgstr "" @@ -2547,9 +3185,21 @@ msgstr "Il tempo che impiega un issue per esser implementato" msgid "Time between merge request creation and merge/close" msgstr "Il tempo tra la creazione di una richiesta di merge ed il merge/close" +msgid "Time tracking" +msgstr "" + msgid "Time until first merge request" msgstr "Il tempo fino alla prima richiesta di merge" +msgid "TimeTrackingEstimated|Est" +msgstr "" + +msgid "TimeTracking|Estimated:" +msgstr "" + +msgid "TimeTracking|Spent" +msgstr "" + msgid "Timeago|%s days ago" msgstr "%s giorni fa" @@ -2689,6 +3339,18 @@ msgstr "s" msgid "Title" msgstr "" +msgid "Todo" +msgstr "" + +msgid "Toggle sidebar" +msgstr "" + +msgid "ToggleButton|Toggle Status: OFF" +msgstr "" + +msgid "ToggleButton|Toggle Status: ON" +msgstr "" + msgid "Total Time" msgstr "Tempo Totale" @@ -2704,19 +3366,40 @@ msgstr "" msgid "Track groups of issues that share a theme, across projects and milestones" msgstr "" +msgid "Total: %{total}" +msgstr "" + +msgid "Track time with quick actions" +msgstr "" + +msgid "Trigger this manual action" +msgstr "" + msgid "Turn on Service Desk" msgstr "" +msgid "Type %{value} to confirm:" +msgstr "" + +msgid "Unable to reset project cache." +msgstr "" + +msgid "Unknown" +msgstr "" + msgid "Unlock" msgstr "" +msgid "Unlock this %{issuableDisplayName}? <strong>Everyone</strong> will be able to comment." +msgstr "" + msgid "Unlocked" msgstr "" msgid "Unstar" msgstr "" -msgid "Unsubscribe" +msgid "Up to date" msgstr "" msgid "Upgrade your plan to activate Advanced Global Search." @@ -2740,6 +3423,9 @@ msgstr "Carica un nuovo file" msgid "Upload file" msgstr "Carica file" +msgid "Upload new avatar" +msgstr "" + msgid "UploadLink|click to upload" msgstr "clicca per caricare" @@ -2752,9 +3438,15 @@ msgstr "" msgid "Use your global notification setting" msgstr "Usa le tue impostazioni globali " +msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want." +msgstr "" + msgid "View file @ " msgstr "" +msgid "View labels" +msgstr "" + msgid "View open merge request" msgstr "Mostra la richieste di merge aperte" @@ -2776,6 +3468,9 @@ msgstr "Sconosciuto" msgid "Want to see the data? Please ask an administrator for access." msgstr "Vuoi visualizzare i dati? Richiedi l'accesso ad un amministratore, grazie." +msgid "We could not verify that one of your projects on GCP has billing enabled. Please try again." +msgstr "" + msgid "We don't have enough data to show this stage." msgstr "Non ci sono sufficienti dati da mostrare su questo stadio" @@ -2788,9 +3483,6 @@ msgstr "" msgid "Weight" msgstr "" -msgid "When access to a storage fails. GitLab will prevent access to the storage for the time specified here. This allows the filesystem to recover. Repositories on failing shards are temporarly unavailable" -msgstr "" - msgid "Wiki" msgstr "" @@ -2809,6 +3501,12 @@ msgstr "" msgid "WikiClone|Start Gollum and edit locally" msgstr "" +msgid "WikiEditPageTip|Tip: You can move this page by adding the path to the beginning of the title." +msgstr "" + +msgid "WikiEdit|There is already a page with the same title in that path." +msgstr "" + msgid "WikiEmptyPageError|You are not allowed to create wiki pages" msgstr "" @@ -2911,9 +3609,21 @@ msgstr "Stai per rimuovere la relazione con il progetto sorgente %{forked_from_p msgid "You are going to transfer %{project_name_with_namespace} to another owner. Are you ABSOLUTELY sure?" msgstr "Stai per trasferire %{project_name_with_namespace} ad un altro owner. Sei ASSOLUTAMENTE sicuro?" +msgid "You can also star a label to make it a priority label." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + msgid "You can only add files when you are on a branch" msgstr "Puoi aggiungere files solo quando sei in una branch" +msgid "You can only edit files when you are on a branch" +msgstr "" + msgid "You cannot write to a read-only secondary GitLab Geo instance. Please use %{link_to_primary_node} instead." msgstr "" @@ -2953,6 +3663,12 @@ msgstr "Non sarai in grado di effettuare push o pull tramite SSH fino a che %{ad msgid "You won't be able to pull or push project code via SSH until you add an SSH key to your profile" msgstr "" +msgid "You'll need to use different branch names to get a valid comparison." +msgstr "" + +msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure" +msgstr "" + msgid "Your comment will not be visible to the public." msgstr "" @@ -2965,26 +3681,220 @@ msgstr "Il tuo nome" msgid "Your projects" msgstr "" +msgid "assign yourself" +msgstr "" + msgid "branch name" msgstr "" msgid "by" msgstr "" +msgid "ciReport|Code quality" +msgstr "" + +msgid "ciReport|DAST detected no alerts by analyzing the review app" +msgstr "" + +msgid "ciReport|Failed to load ${type} report" +msgstr "" + +msgid "ciReport|Fixed:" +msgstr "" + +msgid "ciReport|Instances" +msgstr "" + +msgid "ciReport|Learn more about whitelisting" +msgstr "" + +msgid "ciReport|Loading ${type} report" +msgstr "" + +msgid "ciReport|No changes to code quality" +msgstr "" + +msgid "ciReport|No changes to performance metrics" +msgstr "" + +msgid "ciReport|Performance metrics" +msgstr "" + +msgid "ciReport|SAST" +msgstr "" + +msgid "ciReport|SAST detected no security vulnerabilities" +msgstr "" + +msgid "ciReport|SAST:container no vulnerabilities were found" +msgstr "" + +msgid "ciReport|Show complete code vulnerabilities report" +msgstr "" + +msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}" +msgstr "" + msgid "commit" msgstr "" +msgid "confidentiality|You are going to turn off the confidentiality. This means <strong>everyone</strong> will be able to see and leave a comment on this issue." +msgstr "" + +msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with <strong>at least Reporter access</strong> are able to see and leave comments on the issue." +msgstr "" + msgid "day" msgid_plural "days" msgstr[0] "giorno" msgstr[1] "giorni" +msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command." +msgstr "" + +msgid "merge request" +msgid_plural "merge requests" +msgstr[0] "" +msgstr[1] "" + +msgid "mrWidget|Cancel automatic merge" +msgstr "" + +msgid "mrWidget|Check out branch" +msgstr "" + +msgid "mrWidget|Checking ability to merge automatically" +msgstr "" + +msgid "mrWidget|Cherry-pick" +msgstr "" + +msgid "mrWidget|Cherry-pick this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Closed" +msgstr "" + +msgid "mrWidget|Closed by" +msgstr "" + +msgid "mrWidget|Closes" +msgstr "" + +msgid "mrWidget|Did not close" +msgstr "" + +msgid "mrWidget|Email patches" +msgstr "" + +msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|Mentions" +msgstr "" + +msgid "mrWidget|Merge" +msgstr "" + +msgid "mrWidget|Merge failed." +msgstr "" + +msgid "mrWidget|Merge locally" +msgstr "" + +msgid "mrWidget|Merged by" +msgstr "" + +msgid "mrWidget|Plain diff" +msgstr "" + +msgid "mrWidget|Refresh" +msgstr "" + +msgid "mrWidget|Refresh now" +msgstr "" + +msgid "mrWidget|Refreshing now" +msgstr "" + +msgid "mrWidget|Remove Source Branch" +msgstr "" + +msgid "mrWidget|Remove source branch" +msgstr "" + +msgid "mrWidget|Request to merge" +msgstr "" + +msgid "mrWidget|Resolve conflicts" +msgstr "" + +msgid "mrWidget|Revert" +msgstr "" + +msgid "mrWidget|Revert this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Set by" +msgstr "" + +msgid "mrWidget|The changes were merged into" +msgstr "" + +msgid "mrWidget|The changes were not merged into" +msgstr "" + +msgid "mrWidget|The changes will be merged into" +msgstr "" + +msgid "mrWidget|The source branch has been removed" +msgstr "" + +msgid "mrWidget|The source branch is being removed" +msgstr "" + +msgid "mrWidget|The source branch will be removed" +msgstr "" + +msgid "mrWidget|The source branch will not be removed" +msgstr "" + +msgid "mrWidget|There are merge conflicts" +msgstr "" + +msgid "mrWidget|This merge request failed to be merged automatically" +msgstr "" + +msgid "mrWidget|This merge request is in the process of being merged" +msgstr "" + +msgid "mrWidget|This project is archived, write access has been disabled" +msgstr "" + +msgid "mrWidget|You can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|You can remove source branch now" +msgstr "" + +msgid "mrWidget|command line" +msgstr "" + +msgid "mrWidget|into" +msgstr "" + +msgid "mrWidget|to be merged automatically when the pipeline succeeds" +msgstr "" + msgid "new merge request" msgstr "Nuova richiesta di merge" msgid "notification emails" msgstr "Notifiche via email" +msgid "or" +msgstr "" + msgid "parent" msgid_plural "parents" msgstr[0] "" @@ -2996,12 +3906,21 @@ msgstr "" msgid "personal access token" msgstr "" +msgid "remove due date" +msgstr "" + msgid "source" msgstr "" +msgid "spendCommand|%{slash_command} will update the sum of the time spent." +msgstr "" + msgid "to help your contributors communicate effectively!" msgstr "" msgid "username" msgstr "" +msgid "uses Kubernetes clusters to deploy your code!" +msgstr "" + diff --git a/locale/ja/gitlab.po b/locale/ja/gitlab.po index 700d70cad3f..31c4422c928 100644 --- a/locale/ja/gitlab.po +++ b/locale/ja/gitlab.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: gitlab-ee\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-12-12 18:31+0000\n" -"PO-Revision-Date: 2018-01-05 04:40-0500\n" +"POT-Creation-Date: 2018-02-07 11:38-0600\n" +"PO-Revision-Date: 2018-02-12 04:00-0500\n" "Last-Translator: gitlab <mbartlett+crowdin@gitlab.com>\n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -16,20 +16,35 @@ msgstr "" "X-Crowdin-Language: ja\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" +msgid " and" +msgstr "" + msgid "%d commit" msgid_plural "%d commits" msgstr[0] "%d個ã®ã‚³ãƒŸãƒƒãƒˆ" +msgid "%d commit behind" +msgid_plural "%d commits behind" +msgstr[0] "" + +msgid "%d issue" +msgid_plural "%d issues" +msgstr[0] "" + msgid "%d layer" msgid_plural "%d layers" msgstr[0] "" +msgid "%d merge request" +msgid_plural "%d merge requests" +msgstr[0] "" + msgid "%s additional commit has been omitted to prevent performance issues." msgid_plural "%s additional commits have been omitted to prevent performance issues." msgstr[0] "パフォーマンス低下をé¿ã‘ã‚‹ãŸã‚ %s 個ã®ã‚³ãƒŸãƒƒãƒˆã‚’çœç•¥ã—ã¾ã—ãŸã€‚" -msgid "%{commit_author_link} committed %{commit_timeago}" -msgstr "%{commit_timeago}ã«%{commit_author_link}ãŒã‚³ãƒŸãƒƒãƒˆã—ã¾ã—ãŸã€‚" +msgid "%{commit_author_link} authored %{commit_timeago}" +msgstr "" msgid "%{count} participant" msgid_plural "%{count} participants" @@ -41,9 +56,6 @@ msgstr "" msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt." msgstr "" -msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will block access for %{number_of_seconds} seconds." -msgstr "" - msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will not retry automatically. Reset storage information when the problem is resolved." msgstr "" @@ -115,24 +127,81 @@ msgstr "ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã‚’è¿½åŠ " msgid "Add new directory" msgstr "æ–°è¦ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’è¿½åŠ " +msgid "Add todo" +msgstr "" + +msgid "AdminArea|Stop all jobs" +msgstr "" + +msgid "AdminArea|Stop all jobs?" +msgstr "" + +msgid "AdminArea|Stop jobs" +msgstr "" + +msgid "AdminArea|Stopping jobs failed" +msgstr "" + +msgid "AdminArea|You’re about to stop all jobs. This will halt all current jobs that are running." +msgstr "" + msgid "AdminHealthPageLink|health page" msgstr "" +msgid "Advanced" +msgstr "" + msgid "Advanced settings" msgstr "" msgid "All" msgstr "" +msgid "All changes are committed" +msgstr "" + +msgid "Allows you to add and manage Kubernetes clusters." +msgstr "" + +msgid "An error occurred previewing the blob" +msgstr "" + msgid "An error occurred when toggling the notification subscription" msgstr "" msgid "An error occurred when updating the issue weight" msgstr "" +msgid "An error occurred while dismissing the feature highlight. Refresh the page and try dismissing again." +msgstr "" + +msgid "An error occurred while fetching markdown preview" +msgstr "" + msgid "An error occurred while fetching sidebar data" msgstr "" +msgid "An error occurred while getting projects" +msgstr "" + +msgid "An error occurred while loading filenames" +msgstr "" + +msgid "An error occurred while rendering KaTeX" +msgstr "" + +msgid "An error occurred while rendering preview broadcast message" +msgstr "" + +msgid "An error occurred while retrieving calendar activity" +msgstr "" + +msgid "An error occurred while retrieving diff" +msgstr "" + +msgid "An error occurred while validating username" +msgstr "" + msgid "An error occurred. Please try again." msgstr "" @@ -157,9 +226,6 @@ msgstr "ã“ã®ãƒ‘イプラインスケジュールを削除ã—ã¾ã™ã‹ï¼Ÿ" msgid "Are you sure you want to discard your changes?" msgstr "" -msgid "Are you sure you want to leave this group?" -msgstr "" - msgid "Are you sure you want to reset registration token?" msgstr "" @@ -172,6 +238,21 @@ msgstr "" msgid "Artifacts" msgstr "" +msgid "Assign custom color like #FF0000" +msgstr "" + +msgid "Assign labels" +msgstr "" + +msgid "Assign milestone" +msgstr "" + +msgid "Assign to" +msgstr "" + +msgid "Assignee" +msgstr "" + msgid "Attach a file by drag & drop or %{upload_link}" msgstr "ドラッグ&ドãƒãƒƒãƒ—ã¾ãŸã¯ %{upload_link} ã§ãƒ•ã‚¡ã‚¤ãƒ«ã‚’添付" @@ -187,13 +268,16 @@ msgstr "" msgid "Author" msgstr "" -msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly." +msgid "Authors: %{authors}" msgstr "" -msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly." +msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly." msgstr "" -msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly." +msgid "Auto Review Apps and Auto Deploy need a domain name and a %{kubernetes} to work correctly." +msgstr "" + +msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly." msgstr "" msgid "AutoDevOps|Auto DevOps (Beta)" @@ -217,6 +301,12 @@ msgstr "" msgid "Available" msgstr "" +msgid "Avatar will be removed. Are you sure?" +msgstr "" + +msgid "Average per day: %{average}" +msgstr "" + msgid "Billing" msgstr "" @@ -271,6 +361,9 @@ msgstr "" msgid "BillingPlans|per user" msgstr "" +msgid "Begin with the selected commit" +msgstr "" + msgid "Branch" msgid_plural "Branches" msgstr[0] "ブランãƒ" @@ -398,8 +491,8 @@ msgstr "作者" msgid "CI / CD" msgstr "" -msgid "CI configuration" -msgstr "CI è¨å®š" +msgid "CI/CD configuration" +msgstr "" msgid "CICD|Jobs" msgstr "" @@ -410,6 +503,9 @@ msgstr "ã‚ャンセル" msgid "Cancel edit" msgstr "" +msgid "Cannot modify managed Kubernetes cluster" +msgstr "" + msgid "Change Weight" msgstr "" @@ -425,15 +521,24 @@ msgstr "ãƒã‚§ãƒªãƒ¼ãƒ”ック" msgid "ChangeTypeAction|Revert" msgstr "リãƒãƒ¼ãƒˆ" +msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes." +msgstr "" + msgid "Changelog" msgstr "変更履æ´" +msgid "Changes are shown as if the <b>source</b> revision was being merged into the <b>target</b> revision." +msgstr "" + msgid "Charts" msgstr "ãƒãƒ£ãƒ¼ãƒˆ" msgid "Chat" msgstr "" +msgid "Check interval" +msgstr "" + msgid "Checking %{text} availability…" msgstr "" @@ -446,7 +551,19 @@ msgstr "ã“ã®ã‚³ãƒŸãƒƒãƒˆã‚’ãƒã‚§ãƒªãƒ¼ãƒ”ック" msgid "Cherry-pick this merge request" msgstr "ã“ã®ãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’ãƒã‚§ãƒªãƒ¼ãƒ”ック" -msgid "Choose which groups you wish to replicate to this secondary node. Leave blank to replicate all." +msgid "Choose File ..." +msgstr "" + +msgid "Choose a branch/tag (e.g. %{master}) or enter a commit (e.g. %{sha}) to see what's changed or to create a merge request." +msgstr "" + +msgid "Choose file..." +msgstr "" + +msgid "Choose which groups you wish to synchronize to this secondary node." +msgstr "" + +msgid "Choose which shards you wish to synchronize to this secondary node." msgstr "" msgid "CiStatusLabel|canceled" @@ -503,79 +620,91 @@ msgstr "スã‚ップ済ã¿" msgid "CiStatus|running" msgstr "実行ä¸" -msgid "CircuitBreakerApiLink|circuitbreaker api" +msgid "CiVariables|Input variable key" msgstr "" -msgid "Clone repository" +msgid "CiVariables|Input variable value" msgstr "" -msgid "Close" +msgid "CiVariables|Remove variable row" msgstr "" -msgid "Cluster" +msgid "CiVariable|* (All environments)" msgstr "" -msgid "ClusterIntegration|%{appList} was successfully installed on your cluster" +msgid "CiVariable|All environments" msgstr "" -msgid "ClusterIntegration|%{boldNotice} This will add some extra resources like a load balancer, which incur additional costs. See %{pricingLink}" +msgid "CiVariable|Create wildcard" msgstr "" -msgid "ClusterIntegration|API URL" +msgid "CiVariable|Error occured while saving variables" msgstr "" -msgid "ClusterIntegration|Active" +msgid "CiVariable|New environment" msgstr "" -msgid "ClusterIntegration|Add an existing cluster" +msgid "CiVariable|Protected" msgstr "" -msgid "ClusterIntegration|Add cluster" +msgid "CiVariable|Search environments" msgstr "" -msgid "ClusterIntegration|All" +msgid "CiVariable|Toggle protected" msgstr "" -msgid "ClusterIntegration|Applications" +msgid "CiVariable|Validation failed" msgstr "" -msgid "ClusterIntegration|CA Certificate" +msgid "CircuitBreakerApiLink|circuitbreaker api" msgstr "" -msgid "ClusterIntegration|Certificate Authority bundle (PEM format)" +msgid "Click to expand text" +msgstr "" + +msgid "Clone repository" +msgstr "" + +msgid "Close" msgstr "" -msgid "ClusterIntegration|Choose how to set up cluster integration" +msgid "Closed" msgstr "" -msgid "ClusterIntegration|Cluster" +msgid "ClusterIntegration|%{appList} was successfully installed on your Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Cluster details" +msgid "ClusterIntegration|API URL" msgstr "" -msgid "ClusterIntegration|Cluster integration" +msgid "ClusterIntegration|Add Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Cluster integration is disabled for this project." +msgid "ClusterIntegration|Add an existing Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Cluster integration is enabled for this project." +msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration" msgstr "" -msgid "ClusterIntegration|Cluster integration is enabled for this project. Disabling this integration will not affect your cluster, it will only temporarily turn off GitLab's connection to it." +msgid "ClusterIntegration|Applications" msgstr "" -msgid "ClusterIntegration|Cluster is being created on Google Kubernetes Engine..." +msgid "ClusterIntegration|Are you sure you want to remove this Kubernetes cluster's integration? This will not delete your actual Kubernetes cluster." msgstr "" -msgid "ClusterIntegration|Cluster name" +msgid "ClusterIntegration|CA Certificate" msgstr "" -msgid "ClusterIntegration|Cluster was successfully created on Google Kubernetes Engine. Refresh the page to see cluster's details" +msgid "ClusterIntegration|Certificate Authority bundle (PEM format)" msgstr "" -msgid "ClusterIntegration|Clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" +msgid "ClusterIntegration|Choose how to set up Kubernetes cluster integration" +msgstr "" + +msgid "ClusterIntegration|Choose which of your project's environments will use this Kubernetes cluster." +msgstr "" + +msgid "ClusterIntegration|Control how your Kubernetes cluster integrates with GitLab" msgstr "" msgid "ClusterIntegration|Copy API URL" @@ -584,37 +713,34 @@ msgstr "" msgid "ClusterIntegration|Copy CA Certificate" msgstr "" -msgid "ClusterIntegration|Copy Token" +msgid "ClusterIntegration|Copy Kubernetes cluster name" msgstr "" -msgid "ClusterIntegration|Copy cluster name" +msgid "ClusterIntegration|Copy Token" msgstr "" -msgid "ClusterIntegration|Create a new cluster on Google Engine right from GitLab" +msgid "ClusterIntegration|Create Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Create cluster" +msgid "ClusterIntegration|Create Kubernetes cluster on Google Kubernetes Engine" msgstr "" -msgid "ClusterIntegration|Create cluster on Google Kubernetes Engine" +msgid "ClusterIntegration|Create a new Kubernetes cluster on Google Kubernetes Engine right from GitLab" msgstr "" msgid "ClusterIntegration|Create on GKE" msgstr "" -msgid "ClusterIntegration|Enable cluster integration" -msgstr "" - msgid "ClusterIntegration|Enter the details for an existing Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Enter the details for your cluster" +msgid "ClusterIntegration|Enter the details for your Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Environment pattern" +msgid "ClusterIntegration|Environment scope" msgstr "" -msgid "ClusterIntegration|GKE pricing" +msgid "ClusterIntegration|GitLab Integration" msgstr "" msgid "ClusterIntegration|GitLab Runner" @@ -632,64 +758,94 @@ msgstr "" msgid "ClusterIntegration|Helm Tiller" msgstr "" -msgid "ClusterIntegration|Inactive" -msgstr "" - msgid "ClusterIntegration|Ingress" msgstr "" msgid "ClusterIntegration|Install" msgstr "" -msgid "ClusterIntegration|Install applications on your cluster. Read more about %{helpLink}" -msgstr "" - msgid "ClusterIntegration|Installed" msgstr "" msgid "ClusterIntegration|Installing" msgstr "" -msgid "ClusterIntegration|Integrate cluster automation" +msgid "ClusterIntegration|Integrate Kubernetes cluster automation" +msgstr "" + +msgid "ClusterIntegration|Integration status" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster details" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is disabled for this project." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project. Disabling this integration will not affect your Kubernetes cluster, it will only temporarily turn off GitLab's connection to it." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster is being created on Google Kubernetes Engine..." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster name" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters can be used to deploy applications and to provide Review Apps for this project" msgstr "" msgid "ClusterIntegration|Learn more about %{link_to_documentation}" msgstr "" -msgid "ClusterIntegration|Learn more about Clusters" +msgid "ClusterIntegration|Learn more about Kubernetes" msgstr "" -msgid "ClusterIntegration|Machine type" +msgid "ClusterIntegration|Learn more about environments" msgstr "" -msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create clusters" +msgid "ClusterIntegration|Machine type" msgstr "" -msgid "ClusterIntegration|Manage cluster integration on your GitLab project" +msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create Kubernetes clusters" msgstr "" -msgid "ClusterIntegration|Manage your cluster by visiting %{link_gke}" +msgid "ClusterIntegration|Manage" msgstr "" -msgid "ClusterIntegration|Multiple clusters are available in GitLab Entreprise Edition Premium and Ultimate" +msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}" msgstr "" -msgid "ClusterIntegration|Note:" +msgid "ClusterIntegration|More information" msgstr "" -msgid "ClusterIntegration|Number of nodes" +msgid "ClusterIntegration|Multiple Kubernetes clusters are available in GitLab Enterprise Edition Premium and Ultimate" msgstr "" -msgid "ClusterIntegration|Please enter access information for your cluster. If you need help, you can read our %{link_to_help_page} on clusters" +msgid "ClusterIntegration|Note:" msgstr "" -msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:" +msgid "ClusterIntegration|Number of nodes" msgstr "" -msgid "ClusterIntegration|Problem setting up the cluster" +msgid "ClusterIntegration|Please enter access information for your Kubernetes cluster. If you need help, you can read our %{link_to_help_page} on Kubernetes" msgstr "" -msgid "ClusterIntegration|Problem setting up the clusters list" +msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:" msgstr "" msgid "ClusterIntegration|Project ID" @@ -701,16 +857,19 @@ msgstr "" msgid "ClusterIntegration|Project namespace (optional, unique)" msgstr "" -msgid "ClusterIntegration|Read our %{link_to_help_page} on cluster integration." +msgid "ClusterIntegration|Prometheus" msgstr "" -msgid "ClusterIntegration|Remove cluster integration" +msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration." +msgstr "" + +msgid "ClusterIntegration|Remove Kubernetes cluster integration" msgstr "" msgid "ClusterIntegration|Remove integration" msgstr "" -msgid "ClusterIntegration|Removing cluster integration will remove the cluster configuration you have added to this project. It will not delete your cluster on Google Kubernetes Engine." +msgid "ClusterIntegration|Remove this Kubernetes cluster's configuration from this project. This will not delete your actual Kubernetes cluster." msgstr "" msgid "ClusterIntegration|Request to begin installing failed" @@ -719,7 +878,7 @@ msgstr "" msgid "ClusterIntegration|Save changes" msgstr "" -msgid "ClusterIntegration|See and edit the details for your cluster" +msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster" msgstr "" msgid "ClusterIntegration|See machine types" @@ -740,25 +899,25 @@ msgstr "" msgid "ClusterIntegration|Something went wrong on our end." msgstr "" -msgid "ClusterIntegration|Something went wrong while creating your cluster on Google Kubernetes Engine" +msgid "ClusterIntegration|Something went wrong while creating your Kubernetes cluster on Google Kubernetes Engine" msgstr "" msgid "ClusterIntegration|Something went wrong while installing %{title}" msgstr "" -msgid "ClusterIntegration|There are no clusters to show" +msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below" msgstr "" -msgid "ClusterIntegration|This account must have permissions to create a cluster in the %{link_to_container_project} specified below" +msgid "ClusterIntegration|Toggle Kubernetes Cluster" msgstr "" -msgid "ClusterIntegration|Toggle Cluster" +msgid "ClusterIntegration|Toggle Kubernetes cluster" msgstr "" msgid "ClusterIntegration|Token" msgstr "" -msgid "ClusterIntegration|With a cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." +msgid "ClusterIntegration|With a Kubernetes cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." msgstr "" msgid "ClusterIntegration|Your account must have %{link_to_kubernetes_engine}" @@ -770,7 +929,7 @@ msgstr "" msgid "ClusterIntegration|access to Google Kubernetes Engine" msgstr "" -msgid "ClusterIntegration|cluster" +msgid "ClusterIntegration|check the pricing here" msgstr "" msgid "ClusterIntegration|documentation" @@ -788,6 +947,9 @@ msgstr "" msgid "ClusterIntegration|properly configured" msgstr "" +msgid "Collapse" +msgstr "" + msgid "Comments" msgstr "" @@ -804,6 +966,9 @@ msgstr "ç›´è¿‘30コミットã®æ‰€è¦æ™‚é–“(分)" msgid "Commit message" msgstr "コミットメッセージ" +msgid "Commit statistics for %{ref} %{start_time} - %{end_time}" +msgstr "" + msgid "CommitBoxTitle|Commit" msgstr "コミット" @@ -816,15 +981,57 @@ msgstr "コミット" msgid "Commits feed" msgstr "コミットフィード" +msgid "Commits per day hour (UTC)" +msgstr "" + +msgid "Commits per day of month" +msgstr "" + +msgid "Commits per weekday" +msgstr "" + +msgid "Commits|An error occurred while fetching merge requests data." +msgstr "" + +msgid "Commits|Commit: %{commitText}" +msgstr "" + msgid "Commits|History" msgstr "å±¥æ´" +msgid "Commits|No related merge requests found" +msgstr "" + msgid "Committed by" msgstr "コミット担当者: " msgid "Compare" msgstr "比較" +msgid "Compare Git revisions" +msgstr "" + +msgid "Compare Revisions" +msgstr "" + +msgid "CompareBranches|%{source_branch} and %{target_branch} are the same." +msgstr "" + +msgid "CompareBranches|Compare" +msgstr "" + +msgid "CompareBranches|Source" +msgstr "" + +msgid "CompareBranches|Target" +msgstr "" + +msgid "CompareBranches|There isn't anything to compare." +msgstr "" + +msgid "Confidentiality" +msgstr "" + msgid "Container Registry" msgstr "" @@ -876,6 +1083,9 @@ msgstr "貢献者å‘ã‘ガイド" msgid "Contributors" msgstr "貢献者" +msgid "ContributorsPage|%{startDate} – %{endDate}" +msgstr "" + msgid "ContributorsPage|Building repository graph." msgstr "" @@ -897,9 +1107,18 @@ msgstr "" msgid "Copy URL to clipboard" msgstr "クリップボードã«URLをコピー" +msgid "Copy branch name to clipboard" +msgstr "" + msgid "Copy commit SHA to clipboard" msgstr "コミットã®SHAをクリップボードã«ã‚³ãƒ”ー" +msgid "Copy reference to clipboard" +msgstr "" + +msgid "Create" +msgstr "" + msgid "Create New Directory" msgstr "æ–°è¦ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’作æˆ" @@ -918,6 +1137,9 @@ msgstr "" msgid "Create file" msgstr "" +msgid "Create lists from labels. Issues with that label appear in that list." +msgstr "" + msgid "Create merge request" msgstr "マージリクエストを作æˆ" @@ -930,6 +1152,9 @@ msgstr "" msgid "Create new file" msgstr "" +msgid "Create new label" +msgstr "" + msgid "Create new..." msgstr "æ–°è¦ä½œæˆ" @@ -951,6 +1176,9 @@ msgstr "Cron ã®ã‚¿ã‚¤ãƒ ゾーン" msgid "Cron syntax" msgstr "Cron ã®æ§‹æ–‡" +msgid "Current node" +msgstr "" + msgid "Custom notification events" msgstr "カスタム通知è¨å®š" @@ -960,9 +1188,6 @@ msgstr "\"カスタム\" ã®é€šçŸ¥ãƒ¬ãƒ™ãƒ«ã®åŸºæœ¬ã¯ \"å‚åŠ \" ã¨åŒã˜ã§ã msgid "Cycle Analytics" msgstr "サイクル分æž" -msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project." -msgstr "サイクル分æžã«ã‚ˆã‚Šã€ã‚ãªãŸã®ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆãŒã‚¢ã‚¤ãƒ‡ã‚£ã‚¢ã®æ®µéšŽã‹ã‚‰ãƒ—ãƒãƒ€ã‚¯ã‚·ãƒ§ãƒ³ç’°å¢ƒã«ãƒªãƒªãƒ¼ã‚¹ã•ã‚Œã‚‹ã¾ã§ã©ã‚Œãらã„時間ãŒã‹ã‹ã£ãŸã‹ä¿¯çž°ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" - msgid "CycleAnalyticsStage|Code" msgstr "コード" @@ -1018,12 +1243,21 @@ msgstr "" msgid "Details" msgstr "" +msgid "Diffs|No file name available" +msgstr "" + msgid "Directory name" msgstr "ディレクトリå" +msgid "Disable" +msgstr "" + msgid "Discard changes" msgstr "" +msgid "Discover GitLab Geo." +msgstr "" + msgid "Dismiss Cycle Analytics introduction box" msgstr "" @@ -1060,15 +1294,24 @@ msgstr "プレーン差分" msgid "DownloadSource|Download" msgstr "ダウンãƒãƒ¼ãƒ‰" +msgid "Due date" +msgstr "" + msgid "Edit" msgstr "編集" msgid "Edit Pipeline Schedule %{id}" msgstr "パイプラインスケジュール %{id} を編集" +msgid "Edit files in the editor and commit changes here" +msgstr "" + msgid "Emails" msgstr "" +msgid "Enable" +msgstr "" + msgid "Environments|An error occurred while fetching the environments." msgstr "" @@ -1087,9 +1330,6 @@ msgstr "" msgid "Environments|Environments" msgstr "" -msgid "Environments|Environments are places where code gets deployed, such as staging or production." -msgstr "" - msgid "Environments|Job" msgstr "" @@ -1132,9 +1372,33 @@ msgstr "" msgid "Error creating epic" msgstr "" +msgid "Error fetching contributors data." +msgstr "" + +msgid "Error fetching labels." +msgstr "" + +msgid "Error fetching network graph." +msgstr "" + +msgid "Error fetching refs" +msgstr "" + +msgid "Error fetching usage ping data." +msgstr "" + msgid "Error occurred when toggling the notification subscription" msgstr "" +msgid "Error saving label update." +msgstr "" + +msgid "Error updating status for all todos." +msgstr "" + +msgid "Error updating todo status." +msgstr "" + msgid "EventFilterBy|Filter by all" msgstr "" @@ -1162,6 +1426,9 @@ msgstr "毎月 (1æ—¥ã®åˆå‰4:00)" msgid "Every week (Sundays at 4:00am)" msgstr "毎週 (日曜日ã®åˆå‰4:00)" +msgid "Expand" +msgstr "" + msgid "Explore projects" msgstr "" @@ -1180,6 +1447,9 @@ msgstr "" msgid "February" msgstr "" +msgid "Fields on this page are now uneditable, you can configure" +msgstr "" + msgid "File name" msgstr "" @@ -1223,10 +1493,10 @@ msgstr "マージリクエストãŒãƒžãƒ¼ã‚¸ã•ã‚Œã¦ã‹ã‚‰ãƒ—ãƒãƒ€ã‚¯ã‚·ãƒ§ãƒ³ msgid "GPG Keys" msgstr "" -msgid "Geo Nodes" +msgid "Generate a default set of labels" msgstr "" -msgid "GeoNodeSyncStatus|Failed" +msgid "Geo Nodes" msgstr "" msgid "GeoNodeSyncStatus|Node is failing or broken." @@ -1235,16 +1505,100 @@ msgstr "" msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage." msgstr "" -msgid "GeoNodeSyncStatus|Out of sync" +msgid "GeoNodes|Database replication lag:" +msgstr "" + +msgid "GeoNodes|Disabling a node stops the sync process. Are you sure?" +msgstr "" + +msgid "GeoNodes|Does not match the primary storage configuration" +msgstr "" + +msgid "GeoNodes|Failed" +msgstr "" + +msgid "GeoNodes|Full" +msgstr "" + +msgid "GeoNodes|GitLab version does not match the primary node version" +msgstr "" + +msgid "GeoNodes|GitLab version:" +msgstr "" + +msgid "GeoNodes|Health status:" +msgstr "" + +msgid "GeoNodes|Last event ID processed by cursor:" +msgstr "" + +msgid "GeoNodes|Last event ID seen from primary:" +msgstr "" + +msgid "GeoNodes|Loading nodes" msgstr "" -msgid "GeoNodeSyncStatus|Synced" +msgid "GeoNodes|Local Attachments:" +msgstr "" + +msgid "GeoNodes|Local LFS objects:" +msgstr "" + +msgid "GeoNodes|Local job artifacts:" +msgstr "" + +msgid "GeoNodes|New node" +msgstr "" + +msgid "GeoNodes|Out of sync" +msgstr "" + +msgid "GeoNodes|Replication slot WAL:" +msgstr "" + +msgid "GeoNodes|Replication slots:" +msgstr "" + +msgid "GeoNodes|Repositories:" +msgstr "" + +msgid "GeoNodes|Selective" +msgstr "" + +msgid "GeoNodes|Storage config:" +msgstr "" + +msgid "GeoNodes|Sync settings:" +msgstr "" + +msgid "GeoNodes|Synced" +msgstr "" + +msgid "GeoNodes|Unused slots" +msgstr "" + +msgid "GeoNodes|Used slots" +msgstr "" + +msgid "GeoNodes|Wikis:" +msgstr "" + +msgid "GeoNodes|You have configured Geo nodes using an insecure HTTP connection. We recommend the use of HTTPS." +msgstr "" + +msgid "Geo|All projects" msgstr "" msgid "Geo|File sync capacity" msgstr "" -msgid "Geo|Groups to replicate" +msgid "Geo|Groups to synchronize" +msgstr "" + +msgid "Geo|Projects in certain groups" +msgstr "" + +msgid "Geo|Projects in certain storage shards" msgstr "" msgid "Geo|Repository sync capacity" @@ -1253,12 +1607,24 @@ msgstr "" msgid "Geo|Select groups to replicate." msgstr "" +msgid "Geo|Shards to synchronize" +msgstr "" + +msgid "Git revision" +msgstr "" + msgid "Git storage health information has been reset" msgstr "" +msgid "Git version" +msgstr "" + msgid "GitLab Runner section" msgstr "" +msgid "Gitaly Servers" +msgstr "" + msgid "Go to your fork" msgstr "自分ã®ãƒ•ã‚©ãƒ¼ã‚¯ã¸ç§»å‹•" @@ -1268,6 +1634,9 @@ msgstr "フォーク" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it!" +msgstr "" + msgid "GroupSettings|Prevent sharing a project within %{group} with other groups" msgstr "" @@ -1304,7 +1673,7 @@ msgstr "" msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group." msgstr "" -msgid "GroupsTree|Are you sure you want to leave the \"${this.group.fullName}\" group?" +msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?" msgstr "" msgid "GroupsTree|Create a project in this group." @@ -1355,6 +1724,10 @@ msgstr "" msgid "HealthCheck|Unhealthy" msgstr "" +msgid "Hide value" +msgid_plural "Hide values" +msgstr[0] "" + msgid "History" msgstr "" @@ -1380,6 +1753,12 @@ msgid "Instance" msgid_plural "Instances" msgstr[0] "" +msgid "Instance does not support multiple Kubernetes clusters" +msgstr "" + +msgid "Interested parties can even contribute by pushing commits if they want to." +msgstr "" + msgid "Internal - The group and any internal projects can be viewed by any logged in user." msgstr "" @@ -1407,6 +1786,9 @@ msgstr "" msgid "Issues" msgstr "" +msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable." +msgstr "" + msgid "Jan" msgstr "" @@ -1425,6 +1807,27 @@ msgstr "" msgid "June" msgstr "" +msgid "Kubernetes" +msgstr "" + +msgid "Kubernetes Cluster" +msgstr "" + +msgid "Kubernetes cluster creation time exceeds timeout; %{timeout}" +msgstr "" + +msgid "Kubernetes cluster integration was not removed." +msgstr "" + +msgid "Kubernetes cluster integration was successfully removed." +msgstr "" + +msgid "Kubernetes cluster was successfully updated." +msgstr "" + +msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page" +msgstr "" + msgid "LFSStatus|Disabled" msgstr "無効" @@ -1434,6 +1837,9 @@ msgstr "有効" msgid "Labels" msgstr "" +msgid "Labels can be applied to issues and merge requests to categorize them." +msgstr "" + msgid "Last %d day" msgid_plural "Last %d days" msgstr[0] "éŽåŽ»%d日間" @@ -1462,6 +1868,9 @@ msgstr "" msgid "LastPushEvent|at" msgstr "" +msgid "Learn more" +msgstr "" + msgid "Learn more in the" msgstr "詳ã—ã見る:" @@ -1480,13 +1889,18 @@ msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆã‚’離脱" msgid "License" msgstr "" -msgid "Limited to showing %d event at most" -msgid_plural "Limited to showing %d events at most" -msgstr[0] "イベント表示数を最大 %d 個ã«åˆ¶é™" +msgid "Loading the GitLab IDE..." +msgstr "" msgid "Lock" msgstr "" +msgid "Lock %{issuableDisplayName}" +msgstr "" + +msgid "Lock this %{issuableDisplayName}? Only <strong>project members</strong> will be able to comment." +msgstr "" + msgid "Locked" msgstr "" @@ -1496,12 +1910,21 @@ msgstr "" msgid "Login" msgstr "" +msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos." +msgstr "" + +msgid "Manage labels" +msgstr "" + msgid "Mar" msgstr "" msgid "March" msgstr "" +msgid "Mark done" +msgstr "" + msgid "Maximum git storage failures" msgstr "" @@ -1514,6 +1937,9 @@ msgstr "ä¸å¤®å€¤" msgid "Members" msgstr "" +msgid "Merge Request" +msgstr "" + msgid "Merge Requests" msgstr "" @@ -1523,9 +1949,30 @@ msgstr "" msgid "Merge request" msgstr "" +msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others" +msgstr "" + +msgid "Merged" +msgstr "" + msgid "Messages" msgstr "" +msgid "Milestone" +msgstr "" + +msgid "Milestones|Delete milestone" +msgstr "" + +msgid "Milestones|Delete milestone %{milestoneTitle}?" +msgstr "" + +msgid "Milestones|Failed to delete milestone %{milestoneTitle}" +msgstr "" + +msgid "Milestones|Milestone %{milestoneTitle} was not found" +msgstr "" + msgid "MissingSSHKeyWarningLink|add an SSH key" msgstr "SSH éµã‚’è¿½åŠ " @@ -1535,16 +1982,28 @@ msgstr "" msgid "More information is available|here" msgstr "" +msgid "Move" +msgstr "" + +msgid "Move issue" +msgstr "" + msgid "Multiple issue boards" msgstr "" -msgid "New Cluster" +msgid "Name new label" msgstr "" msgid "New Issue" msgid_plural "New Issues" msgstr[0] "æ–°è¦èª²é¡Œ" +msgid "New Kubernetes Cluster" +msgstr "" + +msgid "New Kubernetes cluster" +msgstr "" + msgid "New Pipeline Schedule" msgstr "æ–°è¦ãƒ‘イプラインスケジュール" @@ -1569,6 +2028,9 @@ msgstr "" msgid "New issue" msgstr "æ–°è¦èª²é¡Œ" +msgid "New label" +msgstr "" + msgid "New merge request" msgstr "æ–°è¦ãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆ" @@ -1587,7 +2049,22 @@ msgstr "" msgid "New tag" msgstr "æ–°è¦ã‚¿ã‚°" -msgid "No container images stored for this project. Add one by following the instructions above." +msgid "No assignee" +msgstr "" + +msgid "No changes" +msgstr "" + +msgid "No connection could be made to a Gitaly Server, please check your logs!" +msgstr "" + +msgid "No due date" +msgstr "" + +msgid "No estimate or time spent" +msgstr "" + +msgid "No file chosen" msgstr "" msgid "No repository" @@ -1602,9 +2079,15 @@ msgstr "" msgid "None" msgstr "" +msgid "Not allowed to merge" +msgstr "" + msgid "Not available" msgstr "利用ã§ãã¾ã›ã‚“" +msgid "Not confidential" +msgstr "" + msgid "Not enough data" msgstr "データä¸è¶³" @@ -1665,6 +2148,12 @@ msgstr "ã™ã¹ã¦é€šçŸ¥" msgid "Notifications" msgstr "" +msgid "Notifications off" +msgstr "" + +msgid "Notifications on" +msgstr "" + msgid "Nov" msgstr "" @@ -1674,7 +2163,7 @@ msgstr "" msgid "Number of access attempts" msgstr "" -msgid "Number of failures before backing off" +msgid "OK" msgstr "" msgid "Oct" @@ -1689,6 +2178,9 @@ msgstr "フィルター" msgid "Only project members can comment." msgstr "" +msgid "Open" +msgstr "" + msgid "Opened" msgstr "" @@ -1722,9 +2214,6 @@ msgstr "" msgid "Password" msgstr "" -msgid "People without permission will never get a notification and won\\'t be able to comment." -msgstr "" - msgid "Pipeline" msgstr "パイプライン" @@ -1767,12 +2256,6 @@ msgstr "全件" msgid "PipelineSchedules|Inactive" msgstr "無効" -msgid "PipelineSchedules|Input variable key" -msgstr "変数ã®åå‰ã‚’入力" - -msgid "PipelineSchedules|Input variable value" -msgstr "変数ã®å€¤ã‚’入力" - msgid "PipelineSchedules|Next Run" msgstr "次ã®å®Ÿè¡Œ" @@ -1782,9 +2265,6 @@ msgstr "ãªã—" msgid "PipelineSchedules|Provide a short description for this pipeline" msgstr "ã“ã®ãƒ‘イプラインã«ã¤ã„ã¦ç°¡å˜ã«è¨˜è¿°ã—ã¦ãã ã•ã„。" -msgid "PipelineSchedules|Remove variable row" -msgstr "変数を削除" - msgid "PipelineSchedules|Take ownership" msgstr "権é™ã‚’å–å¾—ã™ã‚‹" @@ -1812,6 +2292,12 @@ msgstr "" msgid "Pipelines for last year" msgstr "" +msgid "Pipelines|Build with confidence" +msgstr "" + +msgid "Pipelines|Get started with Pipelines" +msgstr "" + msgid "Pipeline|all" msgstr "全件" @@ -1824,12 +2310,21 @@ msgstr "ステージã‚ã‚Š" msgid "Pipeline|with stages" msgstr "ステージã‚ã‚Š" +msgid "Play" +msgstr "" + +msgid "Please <a href=%{link_to_billing} target=\"_blank\" rel=\"noopener noreferrer\">enable billing for one of your projects to be able to create a Kubernetes cluster</a>, then try again." +msgstr "" + msgid "Please solve the reCAPTCHA" msgstr "" msgid "Preferences" msgstr "" +msgid "Primary" +msgstr "" + msgid "Private - Project access must be granted explicitly to each user." msgstr "" @@ -1875,6 +2370,9 @@ msgstr "" msgid "Profiles|your account" msgstr "" +msgid "Programming languages used in this repository" +msgstr "" + msgid "Project '%{project_name}' is in the process of being deleted." msgstr "" @@ -1890,6 +2388,15 @@ msgstr "'%{project_name}' プãƒã‚¸ã‚§ã‚¯ãƒˆã¯æ£å¸¸ã«æ›´æ–°ã•ã‚Œã¾ã—ãŸã€‚ msgid "Project access must be granted explicitly to each user." msgstr "ユーザーã”ã¨ã«ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã‚¢ã‚¯ã‚»ã‚¹ã®æ¨©é™ã‚’指定ã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。" +msgid "Project avatar" +msgstr "" + +msgid "Project avatar in repository: %{link}" +msgstr "" + +msgid "Project cache successfully reset." +msgstr "" + msgid "Project details" msgstr "" @@ -1908,6 +2415,21 @@ msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã‚’開始ã—ã¾ã—ãŸã€‚ダウン msgid "ProjectActivityRSS|Subscribe" msgstr "" +msgid "ProjectCreationLevel|Allowed to create projects" +msgstr "" + +msgid "ProjectCreationLevel|Default project creation protection" +msgstr "" + +msgid "ProjectCreationLevel|Developers + Masters" +msgstr "" + +msgid "ProjectCreationLevel|Masters" +msgstr "" + +msgid "ProjectCreationLevel|No one" +msgstr "" + msgid "ProjectFeature|Disabled" msgstr "無効" @@ -1932,15 +2454,9 @@ msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚°ãƒ©ãƒ•" msgid "ProjectSettings|Contact an admin to change this setting." msgstr "" -msgid "ProjectSettings|Immediately run a pipeline on the default branch" -msgstr "" - msgid "ProjectSettings|Only signed commits can be pushed to this repository." msgstr "" -msgid "ProjectSettings|Problem setting up the CI/CD settings JavaScript" -msgstr "" - msgid "ProjectSettings|This setting is applied on the server level and can be overridden by an admin." msgstr "" @@ -2010,6 +2526,9 @@ msgstr "" msgid "PrometheusService|View environments" msgstr "" +msgid "Protip:" +msgstr "" + msgid "Public - The group and any public projects can be viewed without any authentication." msgstr "" @@ -2025,6 +2544,9 @@ msgstr "" msgid "PushRule|Committer restriction" msgstr "" +msgid "Quick actions can be used in the issues description and comment boxes." +msgstr "" + msgid "Read more" msgstr "続ãã‚’èªã‚€" @@ -2037,6 +2559,12 @@ msgstr "ブランãƒ" msgid "RefSwitcher|Tags" msgstr "ã‚¿ã‚°" +msgid "Reference:" +msgstr "" + +msgid "Register / Sign In" +msgstr "" + msgid "Registry" msgstr "" @@ -2061,9 +2589,18 @@ msgstr "関連ã™ã‚‹ãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆ" msgid "Remind later" msgstr "後ã§é€šçŸ¥" +msgid "Remove" +msgstr "" + +msgid "Remove avatar" +msgstr "" + msgid "Remove project" msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆã‚’削除" +msgid "Repair authentication" +msgstr "" + msgid "Repository" msgstr "" @@ -2079,6 +2616,10 @@ msgstr "" msgid "Reset runners registration token" msgstr "" +msgid "Reveal value" +msgid_plural "Reveal values" +msgstr[0] "" + msgid "Revert this commit" msgstr "ã“ã®ã‚³ãƒŸãƒƒãƒˆã‚’リãƒãƒ¼ãƒˆ" @@ -2088,15 +2629,15 @@ msgstr "ã“ã®ãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’リãƒãƒ¼ãƒˆ" msgid "SSH Keys" msgstr "" -msgid "Save" -msgstr "" - msgid "Save changes" msgstr "" msgid "Save pipeline schedule" msgstr "パイプラインスケジュールをä¿å˜" +msgid "Save variables" +msgstr "" + msgid "Schedule a new pipeline" msgstr "æ–°ã—ã„パイプラインã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’作æˆ" @@ -2112,38 +2653,59 @@ msgstr "" msgid "Search branches and tags" msgstr "ブランãƒã¾ãŸã¯ã‚¿ã‚°ã‚’検索" -msgid "Seconds before reseting failure information" +msgid "Search milestones" msgstr "" -msgid "Seconds to wait after a storage failure" +msgid "Search project" +msgstr "" + +msgid "Search users" +msgstr "" + +msgid "Seconds before reseting failure information" msgstr "" msgid "Seconds to wait for a storage access attempt" msgstr "" +msgid "Secret variables" +msgstr "" + msgid "Select Archive Format" msgstr "アーカイブã®ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã‚’é¸æŠž" msgid "Select a timezone" msgstr "タイムゾーンをé¸æŠž" +msgid "Select assignee" +msgstr "" + +msgid "Select branch/tag" +msgstr "" + msgid "Select target branch" msgstr "ターゲットブランãƒã‚’é¸æŠž" +msgid "Selective synchronization" +msgstr "" + msgid "Sep" msgstr "" msgid "September" msgstr "" +msgid "Server version" +msgstr "" + msgid "Service Templates" msgstr "" msgid "Set a password on your account to pull or push via %{protocol}." msgstr "%{protocol} プãƒã‚³ãƒˆãƒ«çµŒç”±ã§ãƒ—ルã€ãƒ—ッシュã™ã‚‹ãŸã‚ã«ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®ãƒ‘スワードをè¨å®šã€‚" -msgid "Set up CI" -msgstr "CI ã‚’è¨å®š" +msgid "Set up CI/CD" +msgstr "" msgid "Set up Koding" msgstr "Koding ã‚’è¨å®š" @@ -2157,6 +2719,15 @@ msgstr "パスワードをè¨å®š" msgid "Settings" msgstr "" +msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero." +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset pipeline minutes" +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset used pipeline minutes" +msgstr "" + msgid "Show parent pages" msgstr "" @@ -2170,9 +2741,6 @@ msgstr[0] "%d ã®ã‚¤ãƒ™ãƒ³ãƒˆã‚’表示ä¸" msgid "Sidebar|Change weight" msgstr "" -msgid "Sidebar|Edit" -msgstr "" - msgid "Sidebar|No" msgstr "" @@ -2185,18 +2753,30 @@ msgstr "" msgid "Snippets" msgstr "" +msgid "Something went wrong on our end" +msgstr "" + msgid "Something went wrong on our end." msgstr "" +msgid "Something went wrong trying to change the confidentiality of this issue" +msgstr "" + msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}" msgstr "" +msgid "Something went wrong when toggling the button" +msgstr "" + msgid "Something went wrong while fetching the projects." msgstr "" msgid "Something went wrong while fetching the registry list." msgstr "" +msgid "Something went wrong. Please try again." +msgstr "" + msgid "Sort by" msgstr "" @@ -2326,10 +2906,10 @@ msgstr "" msgid "Stopped" msgstr "" -msgid "Subgroups" +msgid "Storage" msgstr "" -msgid "Subscribe" +msgid "Subgroups" msgstr "" msgid "Switch branch/tag" @@ -2426,7 +3006,10 @@ msgstr "" msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project." msgstr "" -msgid "The circuitbreaker backoff threshold should be lower than the failure count threshold" +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project" +msgstr "" + +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project." msgstr "" msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request." @@ -2441,10 +3024,10 @@ msgstr "フォークã®ãƒªãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãŒå‰Šé™¤ã•ã‚Œã¾ã—ãŸã€‚" msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage." msgstr "課題ステージã§ã¯ã€èª²é¡ŒãŒç™»éŒ²ã•ã‚Œã¦ã‹ã‚‰ãƒžã‚¤ãƒ«ã‚¹ãƒˆãƒ¼ãƒ³ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã‚‹ã‹ã€èª²é¡Œãƒœãƒ¼ãƒ‰ã®ãƒªã‚¹ãƒˆã«è¿½åŠ ã•ã‚Œã‚‹ã¾ã§ã®æ™‚é–“ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚ã“ã®ãƒªã‚¹ãƒˆã«è¡¨ç¤ºã™ã‚‹ã«ã¯èª²é¡Œã‚’最åˆã«ä½œæˆã—ã¦ãã ã•ã„。" -msgid "The number of attempts GitLab will make to access a storage." +msgid "The maximum file size allowed is 200KB." msgstr "" -msgid "The number of failures after which GitLab will start temporarily disabling access to a storage shard on a host" +msgid "The number of attempts GitLab will make to access a storage." msgstr "" msgid "The number of failures of after which GitLab will completely prevent access to the storage. The number of failures can be reset in the admin interface: %{link_to_health_page} or using the %{api_documentation_link}." @@ -2453,9 +3036,6 @@ msgstr "" msgid "The phase of the development lifecycle." msgstr "開発ライフサイクルã®æ®µéšŽ" -msgid "The pipelines schedule runs pipelines in the future, repeatedly, for specific branches or tags. Those scheduled pipelines will inherit limited project access based on their associated user." -msgstr "パイプラインスケジュールã¯æŒ‡å®šã®ãƒ–ランãƒã¾ãŸã¯ã‚¿ã‚°ã«å¯¾ã—ã¦è‡ªå‹•çš„ã«ãƒ‘イプラインを実行ã—ã¾ã™ã€‚計画済ã¿ãƒ‘イプラインã¯ãれらã®ç´ä»˜ã‘られãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã¨åŒã˜æ¨©é™ã‚’継承ã—ã¾ã™ã€‚" - msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit." msgstr "計画ステージã§ã¯ã€èª²é¡Œã‚¹ãƒ†ãƒ¼ã‚¸ã«ç™»éŒ²ã•ã‚Œã¦ã‹ã‚‰ãƒ—ッシュã•ã‚ŒãŸæœ€åˆã®ã‚³ãƒŸãƒƒãƒˆæ™‚刻ã¾ã§ã®æ™‚é–“ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚最åˆã®ã‚³ãƒŸãƒƒãƒˆãŒãƒ—ッシュã•ã‚Œã¨ãã«è‡ªå‹•çš„ã«è¿½åŠ ã•ã‚Œã¾ã™ã€‚" @@ -2486,19 +3066,46 @@ msgstr "" msgid "The time in seconds GitLab will try to access storage. After this time a timeout error will be raised." msgstr "" +msgid "The time in seconds between storage checks. When a previous check did complete yet, GitLab will skip a check." +msgstr "" + msgid "The time taken by each data entry gathered by that stage." msgstr "ã“ã®ã‚¹ãƒ†ãƒ¼ã‚¸ã«åŽé›†ã•ã‚ŒãŸãƒ‡ãƒ¼ã‚¿æ¯Žã®æ™‚é–“" msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6." msgstr "得られãŸä¸€é€£ã®ãƒ‡ãƒ¼ã‚¿ã‚’å°ã•ã„é †ã«ä¸¦ã¹ãŸã¨ãã«ä¸å¤®ã«ä½ç½®ã™ã‚‹å€¤ã€‚例ãˆã°ã€3, 5, 9ã®ä¸å¤®å€¤ã¯5。3, 5, 7, 8ã®ä¸å¤®å€¤ã¯ (5+7)/2 = 6。" +msgid "There are no issues to show" +msgstr "" + +msgid "There are no merge requests to show" +msgstr "" + msgid "There are problems accessing Git storage: " msgstr "" +msgid "There was an error loading users activity calendar." +msgstr "" + +msgid "There was an error saving your notification settings." +msgstr "" + +msgid "There was an error subscribing to this label." +msgstr "" + +msgid "There was an error when reseting email token." +msgstr "" + +msgid "There was an error when subscribing to this label." +msgstr "" + +msgid "There was an error when unsubscribing from this label." +msgstr "" + msgid "This board\\'s scope is reduced" msgstr "" -msgid "This branch has changed since you started editing. Would you like to create a new branch?" +msgid "This directory" msgstr "" msgid "This is a confidential issue." @@ -2507,18 +3114,45 @@ msgstr "" msgid "This is the author's first Merge Request to this project." msgstr "" +msgid "This issue is confidential" +msgstr "" + msgid "This issue is confidential and locked." msgstr "" msgid "This issue is locked." msgstr "" +msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments" +msgstr "" + +msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered" +msgstr "" + +msgid "This job has not been triggered yet" +msgstr "" + +msgid "This job has not started yet" +msgstr "" + +msgid "This job is in pending state and is waiting to be picked by a runner" +msgstr "" + +msgid "This job requires a manual action" +msgstr "" + msgid "This means you can not push code until you create an empty repository or import existing one." msgstr "空レãƒã‚¸ãƒˆãƒªãƒ¼ã‚’作æˆã¾ãŸã¯æ—¢å˜ãƒ¬ãƒã‚¸ãƒˆãƒªãƒ¼ã‚’インãƒãƒ¼ãƒˆã‚’ã—ãªã‘ã‚Œã°ã€ã‚³ãƒ¼ãƒ‰ã®ãƒ—ッシュã¯ã§ãã¾ã›ã‚“。" msgid "This merge request is locked." msgstr "" +msgid "This project" +msgstr "" + +msgid "This repository" +msgstr "" + msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here." msgstr "" @@ -2531,9 +3165,21 @@ msgstr "課題ã®å®Ÿè£…ãŒé–‹å§‹ã•ã‚Œã‚‹ã¾ã§ã®æ™‚é–“" msgid "Time between merge request creation and merge/close" msgstr "マージリクエストãŒä½œæˆã•ã‚Œã¦ã‹ã‚‰ãƒžãƒ¼ã‚¸ã¾ãŸã¯ã‚¯ãƒãƒ¼ã‚ºã•ã‚Œã‚‹ã¾ã§ã®æ™‚é–“" +msgid "Time tracking" +msgstr "" + msgid "Time until first merge request" msgstr "最åˆã®ãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¾ã§ã®æ™‚é–“" +msgid "TimeTrackingEstimated|Est" +msgstr "" + +msgid "TimeTracking|Estimated:" +msgstr "" + +msgid "TimeTracking|Spent" +msgstr "" + msgid "Timeago|%s days ago" msgstr "%sæ—¥å‰" @@ -2671,6 +3317,18 @@ msgstr "秒" msgid "Title" msgstr "" +msgid "Todo" +msgstr "" + +msgid "Toggle sidebar" +msgstr "" + +msgid "ToggleButton|Toggle Status: OFF" +msgstr "" + +msgid "ToggleButton|Toggle Status: ON" +msgstr "" + msgid "Total Time" msgstr "åˆè¨ˆæ™‚é–“" @@ -2686,19 +3344,40 @@ msgstr "" msgid "Track groups of issues that share a theme, across projects and milestones" msgstr "" +msgid "Total: %{total}" +msgstr "" + +msgid "Track time with quick actions" +msgstr "" + +msgid "Trigger this manual action" +msgstr "" + msgid "Turn on Service Desk" msgstr "" +msgid "Type %{value} to confirm:" +msgstr "" + +msgid "Unable to reset project cache." +msgstr "" + +msgid "Unknown" +msgstr "" + msgid "Unlock" msgstr "" +msgid "Unlock this %{issuableDisplayName}? <strong>Everyone</strong> will be able to comment." +msgstr "" + msgid "Unlocked" msgstr "" msgid "Unstar" msgstr "スターを外ã™" -msgid "Unsubscribe" +msgid "Up to date" msgstr "" msgid "Upgrade your plan to activate Advanced Global Search." @@ -2722,6 +3401,9 @@ msgstr "æ–°è¦ãƒ•ã‚¡ã‚¤ãƒ«ã‚’アップãƒãƒ¼ãƒ‰" msgid "Upload file" msgstr "ファイルをアップãƒãƒ¼ãƒ‰" +msgid "Upload new avatar" +msgstr "" + msgid "UploadLink|click to upload" msgstr "クリックã—ã¦ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰" @@ -2734,9 +3416,15 @@ msgstr "" msgid "Use your global notification setting" msgstr "全体通知è¨å®šã‚’利用" +msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want." +msgstr "" + msgid "View file @ " msgstr "" +msgid "View labels" +msgstr "" + msgid "View open merge request" msgstr "オープンãªãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’表示" @@ -2758,6 +3446,9 @@ msgstr "ä¸æ˜Ž" msgid "Want to see the data? Please ask an administrator for access." msgstr "ã“ã®ãƒ‡ãƒ¼ã‚¿ã‚’å‚ç…§ã—ãŸã„ã§ã™ã‹ï¼Ÿã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ç®¡ç†è€…ã«å•ã„åˆã‚ã›ã¦ãã ã•ã„。" +msgid "We could not verify that one of your projects on GCP has billing enabled. Please try again." +msgstr "" + msgid "We don't have enough data to show this stage." msgstr "データä¸è¶³ã®ãŸã‚ã€ã“ã®ã‚¹ãƒ†ãƒ¼ã‚¸ã®è¡¨ç¤ºã¯ã§ãã¾ã›ã‚“。" @@ -2770,9 +3461,6 @@ msgstr "" msgid "Weight" msgstr "" -msgid "When access to a storage fails. GitLab will prevent access to the storage for the time specified here. This allows the filesystem to recover. Repositories on failing shards are temporarly unavailable" -msgstr "" - msgid "Wiki" msgstr "" @@ -2791,6 +3479,12 @@ msgstr "" msgid "WikiClone|Start Gollum and edit locally" msgstr "" +msgid "WikiEditPageTip|Tip: You can move this page by adding the path to the beginning of the title." +msgstr "" + +msgid "WikiEdit|There is already a page with the same title in that path." +msgstr "" + msgid "WikiEmptyPageError|You are not allowed to create wiki pages" msgstr "" @@ -2893,9 +3587,21 @@ msgstr "å…ƒã®ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆ (%{forked_from_project}) ã¨ã®ãƒªãƒ¬ãƒ¼ã‚·ãƒ§ã msgid "You are going to transfer %{project_name_with_namespace} to another owner. Are you ABSOLUTELY sure?" msgstr "%{project_name_with_namespace} プãƒã‚¸ã‚§ã‚¯ãƒˆã‚’別ã®ã‚ªãƒ¼ãƒŠãƒ¼ã«ç§»è²ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚本当ã«ã‚ˆã‚ã—ã„ã§ã™ã‹ï¼Ÿ" +msgid "You can also star a label to make it a priority label." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + msgid "You can only add files when you are on a branch" msgstr "ãƒ•ã‚¡ã‚¤ãƒ«ã‚’è¿½åŠ ã™ã‚‹ã«ã¯ã€ã©ã“ã‹ã®ãƒ–ランãƒã«ã„ãªã‘ã‚Œã°ã„ã‘ã¾ã›ã‚“" +msgid "You can only edit files when you are on a branch" +msgstr "" + msgid "You cannot write to a read-only secondary GitLab Geo instance. Please use %{link_to_primary_node} instead." msgstr "" @@ -2935,6 +3641,12 @@ msgstr "%{add_ssh_key_link} をプãƒãƒ•ã‚¡ã‚¤ãƒ«ã«è¿½åŠ ã—ã¦ã„ãªã„ã®ã§ã msgid "You won't be able to pull or push project code via SSH until you add an SSH key to your profile" msgstr "" +msgid "You'll need to use different branch names to get a valid comparison." +msgstr "" + +msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure" +msgstr "" + msgid "Your comment will not be visible to the public." msgstr "" @@ -2947,25 +3659,218 @@ msgstr "åå‰" msgid "Your projects" msgstr "" +msgid "assign yourself" +msgstr "" + msgid "branch name" msgstr "" msgid "by" msgstr "" +msgid "ciReport|Code quality" +msgstr "" + +msgid "ciReport|DAST detected no alerts by analyzing the review app" +msgstr "" + +msgid "ciReport|Failed to load ${type} report" +msgstr "" + +msgid "ciReport|Fixed:" +msgstr "" + +msgid "ciReport|Instances" +msgstr "" + +msgid "ciReport|Learn more about whitelisting" +msgstr "" + +msgid "ciReport|Loading ${type} report" +msgstr "" + +msgid "ciReport|No changes to code quality" +msgstr "" + +msgid "ciReport|No changes to performance metrics" +msgstr "" + +msgid "ciReport|Performance metrics" +msgstr "" + +msgid "ciReport|SAST" +msgstr "" + +msgid "ciReport|SAST detected no security vulnerabilities" +msgstr "" + +msgid "ciReport|SAST:container no vulnerabilities were found" +msgstr "" + +msgid "ciReport|Show complete code vulnerabilities report" +msgstr "" + +msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}" +msgstr "" + msgid "commit" msgstr "" +msgid "confidentiality|You are going to turn off the confidentiality. This means <strong>everyone</strong> will be able to see and leave a comment on this issue." +msgstr "" + +msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with <strong>at least Reporter access</strong> are able to see and leave comments on the issue." +msgstr "" + msgid "day" msgid_plural "days" msgstr[0] "æ—¥" +msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command." +msgstr "" + +msgid "merge request" +msgid_plural "merge requests" +msgstr[0] "" + +msgid "mrWidget|Cancel automatic merge" +msgstr "" + +msgid "mrWidget|Check out branch" +msgstr "" + +msgid "mrWidget|Checking ability to merge automatically" +msgstr "" + +msgid "mrWidget|Cherry-pick" +msgstr "" + +msgid "mrWidget|Cherry-pick this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Closed" +msgstr "" + +msgid "mrWidget|Closed by" +msgstr "" + +msgid "mrWidget|Closes" +msgstr "" + +msgid "mrWidget|Did not close" +msgstr "" + +msgid "mrWidget|Email patches" +msgstr "" + +msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|Mentions" +msgstr "" + +msgid "mrWidget|Merge" +msgstr "" + +msgid "mrWidget|Merge failed." +msgstr "" + +msgid "mrWidget|Merge locally" +msgstr "" + +msgid "mrWidget|Merged by" +msgstr "" + +msgid "mrWidget|Plain diff" +msgstr "" + +msgid "mrWidget|Refresh" +msgstr "" + +msgid "mrWidget|Refresh now" +msgstr "" + +msgid "mrWidget|Refreshing now" +msgstr "" + +msgid "mrWidget|Remove Source Branch" +msgstr "" + +msgid "mrWidget|Remove source branch" +msgstr "" + +msgid "mrWidget|Request to merge" +msgstr "" + +msgid "mrWidget|Resolve conflicts" +msgstr "" + +msgid "mrWidget|Revert" +msgstr "" + +msgid "mrWidget|Revert this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Set by" +msgstr "" + +msgid "mrWidget|The changes were merged into" +msgstr "" + +msgid "mrWidget|The changes were not merged into" +msgstr "" + +msgid "mrWidget|The changes will be merged into" +msgstr "" + +msgid "mrWidget|The source branch has been removed" +msgstr "" + +msgid "mrWidget|The source branch is being removed" +msgstr "" + +msgid "mrWidget|The source branch will be removed" +msgstr "" + +msgid "mrWidget|The source branch will not be removed" +msgstr "" + +msgid "mrWidget|There are merge conflicts" +msgstr "" + +msgid "mrWidget|This merge request failed to be merged automatically" +msgstr "" + +msgid "mrWidget|This merge request is in the process of being merged" +msgstr "" + +msgid "mrWidget|This project is archived, write access has been disabled" +msgstr "" + +msgid "mrWidget|You can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|You can remove source branch now" +msgstr "" + +msgid "mrWidget|command line" +msgstr "" + +msgid "mrWidget|into" +msgstr "" + +msgid "mrWidget|to be merged automatically when the pipeline succeeds" +msgstr "" + msgid "new merge request" msgstr "æ–°è¦ãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆ" msgid "notification emails" msgstr "メール通知" +msgid "or" +msgstr "" + msgid "parent" msgid_plural "parents" msgstr[0] "親" @@ -2976,12 +3881,21 @@ msgstr "" msgid "personal access token" msgstr "" +msgid "remove due date" +msgstr "" + msgid "source" msgstr "" +msgid "spendCommand|%{slash_command} will update the sum of the time spent." +msgstr "" + msgid "to help your contributors communicate effectively!" msgstr "" msgid "username" msgstr "" +msgid "uses Kubernetes clusters to deploy your code!" +msgstr "" + diff --git a/locale/ko/gitlab.po b/locale/ko/gitlab.po index aab1650a0bc..73909e6f6de 100644 --- a/locale/ko/gitlab.po +++ b/locale/ko/gitlab.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: gitlab-ee\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-12-12 18:31+0000\n" -"PO-Revision-Date: 2018-01-05 04:41-0500\n" +"POT-Creation-Date: 2018-02-07 11:38-0600\n" +"PO-Revision-Date: 2018-02-12 04:00-0500\n" "Last-Translator: gitlab <mbartlett+crowdin@gitlab.com>\n" "Language-Team: Korean\n" "Language: ko_KR\n" @@ -16,20 +16,35 @@ msgstr "" "X-Crowdin-Language: ko\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" +msgid " and" +msgstr "" + msgid "%d commit" msgid_plural "%d commits" msgstr[0] "%d 커밋" +msgid "%d commit behind" +msgid_plural "%d commits behind" +msgstr[0] "" + +msgid "%d issue" +msgid_plural "%d issues" +msgstr[0] "" + msgid "%d layer" msgid_plural "%d layers" msgstr[0] "" +msgid "%d merge request" +msgid_plural "%d merge requests" +msgstr[0] "" + msgid "%s additional commit has been omitted to prevent performance issues." msgid_plural "%s additional commits have been omitted to prevent performance issues." msgstr[0] "%s 추가 ì»¤ë°‹ì€ ì„±ëŠ¥ ì´ìŠˆë¥¼ 방지하기 위해 ìƒëžµë˜ì—ˆìŠµë‹ˆë‹¤." -msgid "%{commit_author_link} committed %{commit_timeago}" -msgstr "%{commit_timeago} ì— %{commit_author_link} ë‹˜ì´ ì»¤ë°‹í•˜ì˜€ìŠµë‹ˆë‹¤. " +msgid "%{commit_author_link} authored %{commit_timeago}" +msgstr "" msgid "%{count} participant" msgid_plural "%{count} participants" @@ -41,9 +56,6 @@ msgstr "" msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt." msgstr "%{number_of_failures} / %{maximum_failures} 실패. GitLab ì€ ë‹¤ìŒ ì‹œë„ì—ì„œ 성공하면 ì ‘ê·¼ì„ í—ˆìš©í• ê²ƒìž…ë‹ˆë‹¤." -msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will block access for %{number_of_seconds} seconds." -msgstr "%{number_of_failures} / %{maximum_failures} 실패. GitLab ì€ %{number_of_seconds} ì´ˆ ê°„ ì ‘ê·¼ì„ ì œí•œí•˜ê² ìŠµë‹ˆë‹¤." - msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will not retry automatically. Reset storage information when the problem is resolved." msgstr "%{number_of_failures} / %{maximum_failures} 실패. GitLab ì€ ìžë™ìœ¼ë¡œ 다시 ì‹œë„하지 않습니다. ë¬¸ì œê°€ í•´ê²°ë˜ë©´ ì €ìž¥ 공간 ì •ë³´ë¥¼ 초기화 해주세요. " @@ -115,24 +127,81 @@ msgstr "ë¼ì´ì„ 스 추가" msgid "Add new directory" msgstr "새 ë””ë ‰í† ë¦¬ 추가" +msgid "Add todo" +msgstr "" + +msgid "AdminArea|Stop all jobs" +msgstr "" + +msgid "AdminArea|Stop all jobs?" +msgstr "" + +msgid "AdminArea|Stop jobs" +msgstr "" + +msgid "AdminArea|Stopping jobs failed" +msgstr "" + +msgid "AdminArea|You’re about to stop all jobs. This will halt all current jobs that are running." +msgstr "" + msgid "AdminHealthPageLink|health page" msgstr "" +msgid "Advanced" +msgstr "" + msgid "Advanced settings" msgstr "" msgid "All" msgstr "ì „ì²´" +msgid "All changes are committed" +msgstr "" + +msgid "Allows you to add and manage Kubernetes clusters." +msgstr "" + +msgid "An error occurred previewing the blob" +msgstr "" + msgid "An error occurred when toggling the notification subscription" msgstr "" msgid "An error occurred when updating the issue weight" msgstr "" +msgid "An error occurred while dismissing the feature highlight. Refresh the page and try dismissing again." +msgstr "" + +msgid "An error occurred while fetching markdown preview" +msgstr "" + msgid "An error occurred while fetching sidebar data" msgstr "" +msgid "An error occurred while getting projects" +msgstr "" + +msgid "An error occurred while loading filenames" +msgstr "" + +msgid "An error occurred while rendering KaTeX" +msgstr "" + +msgid "An error occurred while rendering preview broadcast message" +msgstr "" + +msgid "An error occurred while retrieving calendar activity" +msgstr "" + +msgid "An error occurred while retrieving diff" +msgstr "" + +msgid "An error occurred while validating username" +msgstr "" + msgid "An error occurred. Please try again." msgstr "" @@ -157,9 +226,6 @@ msgstr "ì´ íŒŒì´í”„ë¼ì¸ ìŠ¤ì¼€ì¥´ì„ ì‚ì œ í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" msgid "Are you sure you want to discard your changes?" msgstr "변경 ë‚´ìš©ì„ ì·¨ì†Œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?" -msgid "Are you sure you want to leave this group?" -msgstr "" - msgid "Are you sure you want to reset registration token?" msgstr "ë“±ë¡ í† í°ì„ 초기화 í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" @@ -172,6 +238,21 @@ msgstr "확실합니까?" msgid "Artifacts" msgstr "" +msgid "Assign custom color like #FF0000" +msgstr "" + +msgid "Assign labels" +msgstr "" + +msgid "Assign milestone" +msgstr "" + +msgid "Assign to" +msgstr "" + +msgid "Assignee" +msgstr "" + msgid "Attach a file by drag & drop or %{upload_link}" msgstr "드래그 & ë“œë¡ ë˜ëŠ” %{upload_link}" @@ -187,13 +268,16 @@ msgstr "" msgid "Author" msgstr "" -msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly." +msgid "Authors: %{authors}" msgstr "" -msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly." +msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly." msgstr "" -msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly." +msgid "Auto Review Apps and Auto Deploy need a domain name and a %{kubernetes} to work correctly." +msgstr "" + +msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly." msgstr "" msgid "AutoDevOps|Auto DevOps (Beta)" @@ -217,6 +301,12 @@ msgstr "" msgid "Available" msgstr "" +msgid "Avatar will be removed. Are you sure?" +msgstr "" + +msgid "Average per day: %{average}" +msgstr "" + msgid "Billing" msgstr "" @@ -271,6 +361,9 @@ msgstr "" msgid "BillingPlans|per user" msgstr "" +msgid "Begin with the selected commit" +msgstr "" + msgid "Branch" msgid_plural "Branches" msgstr[0] "브랜치" @@ -398,8 +491,8 @@ msgstr "작성ìž" msgid "CI / CD" msgstr "" -msgid "CI configuration" -msgstr "CI ì„¤ì •" +msgid "CI/CD configuration" +msgstr "" msgid "CICD|Jobs" msgstr "" @@ -410,6 +503,9 @@ msgstr "취소" msgid "Cancel edit" msgstr "" +msgid "Cannot modify managed Kubernetes cluster" +msgstr "" + msgid "Change Weight" msgstr "" @@ -425,15 +521,24 @@ msgstr "Cherry-pick" msgid "ChangeTypeAction|Revert" msgstr "Revert" +msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes." +msgstr "" + msgid "Changelog" msgstr "변경사í•" +msgid "Changes are shown as if the <b>source</b> revision was being merged into the <b>target</b> revision." +msgstr "" + msgid "Charts" msgstr "차트" msgid "Chat" msgstr "" +msgid "Check interval" +msgstr "" + msgid "Checking %{text} availability…" msgstr "" @@ -446,7 +551,19 @@ msgstr "ì´ ì»¤ë°‹ì„ Cherry-pick" msgid "Cherry-pick this merge request" msgstr "ì´ ë¨¸ì§€ 리퀘스트를 Cherry-pick" -msgid "Choose which groups you wish to replicate to this secondary node. Leave blank to replicate all." +msgid "Choose File ..." +msgstr "" + +msgid "Choose a branch/tag (e.g. %{master}) or enter a commit (e.g. %{sha}) to see what's changed or to create a merge request." +msgstr "" + +msgid "Choose file..." +msgstr "" + +msgid "Choose which groups you wish to synchronize to this secondary node." +msgstr "" + +msgid "Choose which shards you wish to synchronize to this secondary node." msgstr "" msgid "CiStatusLabel|canceled" @@ -503,79 +620,91 @@ msgstr "건너 뜀" msgid "CiStatus|running" msgstr "실행 중" -msgid "CircuitBreakerApiLink|circuitbreaker api" +msgid "CiVariables|Input variable key" msgstr "" -msgid "Clone repository" +msgid "CiVariables|Input variable value" msgstr "" -msgid "Close" +msgid "CiVariables|Remove variable row" msgstr "" -msgid "Cluster" +msgid "CiVariable|* (All environments)" msgstr "" -msgid "ClusterIntegration|%{appList} was successfully installed on your cluster" +msgid "CiVariable|All environments" msgstr "" -msgid "ClusterIntegration|%{boldNotice} This will add some extra resources like a load balancer, which incur additional costs. See %{pricingLink}" +msgid "CiVariable|Create wildcard" msgstr "" -msgid "ClusterIntegration|API URL" +msgid "CiVariable|Error occured while saving variables" msgstr "" -msgid "ClusterIntegration|Active" +msgid "CiVariable|New environment" msgstr "" -msgid "ClusterIntegration|Add an existing cluster" +msgid "CiVariable|Protected" msgstr "" -msgid "ClusterIntegration|Add cluster" +msgid "CiVariable|Search environments" msgstr "" -msgid "ClusterIntegration|All" +msgid "CiVariable|Toggle protected" msgstr "" -msgid "ClusterIntegration|Applications" +msgid "CiVariable|Validation failed" msgstr "" -msgid "ClusterIntegration|CA Certificate" +msgid "CircuitBreakerApiLink|circuitbreaker api" msgstr "" -msgid "ClusterIntegration|Certificate Authority bundle (PEM format)" +msgid "Click to expand text" +msgstr "" + +msgid "Clone repository" +msgstr "" + +msgid "Close" msgstr "" -msgid "ClusterIntegration|Choose how to set up cluster integration" +msgid "Closed" msgstr "" -msgid "ClusterIntegration|Cluster" +msgid "ClusterIntegration|%{appList} was successfully installed on your Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Cluster details" +msgid "ClusterIntegration|API URL" msgstr "" -msgid "ClusterIntegration|Cluster integration" +msgid "ClusterIntegration|Add Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Cluster integration is disabled for this project." +msgid "ClusterIntegration|Add an existing Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Cluster integration is enabled for this project." +msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration" msgstr "" -msgid "ClusterIntegration|Cluster integration is enabled for this project. Disabling this integration will not affect your cluster, it will only temporarily turn off GitLab's connection to it." +msgid "ClusterIntegration|Applications" msgstr "" -msgid "ClusterIntegration|Cluster is being created on Google Kubernetes Engine..." +msgid "ClusterIntegration|Are you sure you want to remove this Kubernetes cluster's integration? This will not delete your actual Kubernetes cluster." msgstr "" -msgid "ClusterIntegration|Cluster name" +msgid "ClusterIntegration|CA Certificate" msgstr "" -msgid "ClusterIntegration|Cluster was successfully created on Google Kubernetes Engine. Refresh the page to see cluster's details" +msgid "ClusterIntegration|Certificate Authority bundle (PEM format)" msgstr "" -msgid "ClusterIntegration|Clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" +msgid "ClusterIntegration|Choose how to set up Kubernetes cluster integration" +msgstr "" + +msgid "ClusterIntegration|Choose which of your project's environments will use this Kubernetes cluster." +msgstr "" + +msgid "ClusterIntegration|Control how your Kubernetes cluster integrates with GitLab" msgstr "" msgid "ClusterIntegration|Copy API URL" @@ -584,37 +713,34 @@ msgstr "" msgid "ClusterIntegration|Copy CA Certificate" msgstr "" -msgid "ClusterIntegration|Copy Token" +msgid "ClusterIntegration|Copy Kubernetes cluster name" msgstr "" -msgid "ClusterIntegration|Copy cluster name" +msgid "ClusterIntegration|Copy Token" msgstr "" -msgid "ClusterIntegration|Create a new cluster on Google Engine right from GitLab" +msgid "ClusterIntegration|Create Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Create cluster" +msgid "ClusterIntegration|Create Kubernetes cluster on Google Kubernetes Engine" msgstr "" -msgid "ClusterIntegration|Create cluster on Google Kubernetes Engine" +msgid "ClusterIntegration|Create a new Kubernetes cluster on Google Kubernetes Engine right from GitLab" msgstr "" msgid "ClusterIntegration|Create on GKE" msgstr "" -msgid "ClusterIntegration|Enable cluster integration" -msgstr "" - msgid "ClusterIntegration|Enter the details for an existing Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Enter the details for your cluster" +msgid "ClusterIntegration|Enter the details for your Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Environment pattern" +msgid "ClusterIntegration|Environment scope" msgstr "" -msgid "ClusterIntegration|GKE pricing" +msgid "ClusterIntegration|GitLab Integration" msgstr "" msgid "ClusterIntegration|GitLab Runner" @@ -632,64 +758,94 @@ msgstr "" msgid "ClusterIntegration|Helm Tiller" msgstr "" -msgid "ClusterIntegration|Inactive" -msgstr "" - msgid "ClusterIntegration|Ingress" msgstr "" msgid "ClusterIntegration|Install" msgstr "" -msgid "ClusterIntegration|Install applications on your cluster. Read more about %{helpLink}" -msgstr "" - msgid "ClusterIntegration|Installed" msgstr "" msgid "ClusterIntegration|Installing" msgstr "" -msgid "ClusterIntegration|Integrate cluster automation" +msgid "ClusterIntegration|Integrate Kubernetes cluster automation" +msgstr "" + +msgid "ClusterIntegration|Integration status" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster details" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is disabled for this project." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project. Disabling this integration will not affect your Kubernetes cluster, it will only temporarily turn off GitLab's connection to it." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster is being created on Google Kubernetes Engine..." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster name" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters can be used to deploy applications and to provide Review Apps for this project" msgstr "" msgid "ClusterIntegration|Learn more about %{link_to_documentation}" msgstr "" -msgid "ClusterIntegration|Learn more about Clusters" +msgid "ClusterIntegration|Learn more about Kubernetes" msgstr "" -msgid "ClusterIntegration|Machine type" +msgid "ClusterIntegration|Learn more about environments" msgstr "" -msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create clusters" +msgid "ClusterIntegration|Machine type" msgstr "" -msgid "ClusterIntegration|Manage cluster integration on your GitLab project" +msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create Kubernetes clusters" msgstr "" -msgid "ClusterIntegration|Manage your cluster by visiting %{link_gke}" +msgid "ClusterIntegration|Manage" msgstr "" -msgid "ClusterIntegration|Multiple clusters are available in GitLab Entreprise Edition Premium and Ultimate" +msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}" msgstr "" -msgid "ClusterIntegration|Note:" +msgid "ClusterIntegration|More information" msgstr "" -msgid "ClusterIntegration|Number of nodes" +msgid "ClusterIntegration|Multiple Kubernetes clusters are available in GitLab Enterprise Edition Premium and Ultimate" msgstr "" -msgid "ClusterIntegration|Please enter access information for your cluster. If you need help, you can read our %{link_to_help_page} on clusters" +msgid "ClusterIntegration|Note:" msgstr "" -msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:" +msgid "ClusterIntegration|Number of nodes" msgstr "" -msgid "ClusterIntegration|Problem setting up the cluster" +msgid "ClusterIntegration|Please enter access information for your Kubernetes cluster. If you need help, you can read our %{link_to_help_page} on Kubernetes" msgstr "" -msgid "ClusterIntegration|Problem setting up the clusters list" +msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:" msgstr "" msgid "ClusterIntegration|Project ID" @@ -701,16 +857,19 @@ msgstr "" msgid "ClusterIntegration|Project namespace (optional, unique)" msgstr "" -msgid "ClusterIntegration|Read our %{link_to_help_page} on cluster integration." +msgid "ClusterIntegration|Prometheus" msgstr "" -msgid "ClusterIntegration|Remove cluster integration" +msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration." +msgstr "" + +msgid "ClusterIntegration|Remove Kubernetes cluster integration" msgstr "" msgid "ClusterIntegration|Remove integration" msgstr "" -msgid "ClusterIntegration|Removing cluster integration will remove the cluster configuration you have added to this project. It will not delete your cluster on Google Kubernetes Engine." +msgid "ClusterIntegration|Remove this Kubernetes cluster's configuration from this project. This will not delete your actual Kubernetes cluster." msgstr "" msgid "ClusterIntegration|Request to begin installing failed" @@ -719,7 +878,7 @@ msgstr "" msgid "ClusterIntegration|Save changes" msgstr "" -msgid "ClusterIntegration|See and edit the details for your cluster" +msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster" msgstr "" msgid "ClusterIntegration|See machine types" @@ -740,25 +899,25 @@ msgstr "" msgid "ClusterIntegration|Something went wrong on our end." msgstr "" -msgid "ClusterIntegration|Something went wrong while creating your cluster on Google Kubernetes Engine" +msgid "ClusterIntegration|Something went wrong while creating your Kubernetes cluster on Google Kubernetes Engine" msgstr "" msgid "ClusterIntegration|Something went wrong while installing %{title}" msgstr "" -msgid "ClusterIntegration|There are no clusters to show" +msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below" msgstr "" -msgid "ClusterIntegration|This account must have permissions to create a cluster in the %{link_to_container_project} specified below" +msgid "ClusterIntegration|Toggle Kubernetes Cluster" msgstr "" -msgid "ClusterIntegration|Toggle Cluster" +msgid "ClusterIntegration|Toggle Kubernetes cluster" msgstr "" msgid "ClusterIntegration|Token" msgstr "" -msgid "ClusterIntegration|With a cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." +msgid "ClusterIntegration|With a Kubernetes cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." msgstr "" msgid "ClusterIntegration|Your account must have %{link_to_kubernetes_engine}" @@ -770,7 +929,7 @@ msgstr "" msgid "ClusterIntegration|access to Google Kubernetes Engine" msgstr "" -msgid "ClusterIntegration|cluster" +msgid "ClusterIntegration|check the pricing here" msgstr "" msgid "ClusterIntegration|documentation" @@ -788,6 +947,9 @@ msgstr "" msgid "ClusterIntegration|properly configured" msgstr "" +msgid "Collapse" +msgstr "" + msgid "Comments" msgstr "" @@ -804,6 +966,9 @@ msgstr "최근 30 ê±´ì˜ ì»¤ë°‹ 소요시간 (분)" msgid "Commit message" msgstr "커밋 메시지" +msgid "Commit statistics for %{ref} %{start_time} - %{end_time}" +msgstr "" + msgid "CommitBoxTitle|Commit" msgstr "커밋" @@ -816,15 +981,57 @@ msgstr "커밋" msgid "Commits feed" msgstr "커밋 피드" +msgid "Commits per day hour (UTC)" +msgstr "" + +msgid "Commits per day of month" +msgstr "" + +msgid "Commits per weekday" +msgstr "" + +msgid "Commits|An error occurred while fetching merge requests data." +msgstr "" + +msgid "Commits|Commit: %{commitText}" +msgstr "" + msgid "Commits|History" msgstr "ì´ë ¥" +msgid "Commits|No related merge requests found" +msgstr "" + msgid "Committed by" msgstr "커밋한 사용ìž" msgid "Compare" msgstr "비êµ" +msgid "Compare Git revisions" +msgstr "" + +msgid "Compare Revisions" +msgstr "" + +msgid "CompareBranches|%{source_branch} and %{target_branch} are the same." +msgstr "" + +msgid "CompareBranches|Compare" +msgstr "" + +msgid "CompareBranches|Source" +msgstr "" + +msgid "CompareBranches|Target" +msgstr "" + +msgid "CompareBranches|There isn't anything to compare." +msgstr "" + +msgid "Confidentiality" +msgstr "" + msgid "Container Registry" msgstr "" @@ -876,6 +1083,9 @@ msgstr "ê¸°ì—¬ì— ëŒ€í•œ 안내" msgid "Contributors" msgstr "기여해 ì£¼ì‹ ë¶„ë“¤" +msgid "ContributorsPage|%{startDate} – %{endDate}" +msgstr "" + msgid "ContributorsPage|Building repository graph." msgstr "" @@ -897,9 +1107,18 @@ msgstr "" msgid "Copy URL to clipboard" msgstr "URLì„ í´ë¦½ë³´ë“œì— 복사" +msgid "Copy branch name to clipboard" +msgstr "" + msgid "Copy commit SHA to clipboard" msgstr "ì»¤ë°‹ì˜ SHA를 í´ë¦½ë³´ë“œë¡œ 복사합니다" +msgid "Copy reference to clipboard" +msgstr "" + +msgid "Create" +msgstr "" + msgid "Create New Directory" msgstr "새 ë””ë ‰í† ë¦¬ 만들기" @@ -918,6 +1137,9 @@ msgstr "" msgid "Create file" msgstr "" +msgid "Create lists from labels. Issues with that label appear in that list." +msgstr "" + msgid "Create merge request" msgstr "머지 리퀘스트 만들기" @@ -930,6 +1152,9 @@ msgstr "" msgid "Create new file" msgstr "" +msgid "Create new label" +msgstr "" + msgid "Create new..." msgstr "새로 만들기 ..." @@ -951,6 +1176,9 @@ msgstr "Cron 시간대" msgid "Cron syntax" msgstr "í¬ë¡ 구문" +msgid "Current node" +msgstr "" + msgid "Custom notification events" msgstr "ì‚¬ìš©ìž ì •ì˜ ì•Œë¦¼ ì´ë²¤íŠ¸" @@ -960,9 +1188,6 @@ msgstr "ì‚¬ìš©ìž ì •ì˜ ì•Œë¦¼ ìˆ˜ì¤€ì€ ì°¸ì—¬ 수준과 ë™ì¼í•©ë‹ˆë‹¤. 맞ì msgid "Cycle Analytics" msgstr "" -msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project." -msgstr "Cycle Analytics는 프로ì 트ì—ì„œ ì•„ì´ë””어를 프로ë•ì…˜ìœ¼ë¡œ 옮기는 ë° ê±¸ë¦¬ëŠ” ì‹œê°„ì„ ëŒ€ëžµì 으로 ë³´ì—¬ì¤ë‹ˆë‹¤." - msgid "CycleAnalyticsStage|Code" msgstr "코드" @@ -1018,12 +1243,21 @@ msgstr "" msgid "Details" msgstr "ìƒì„¸" +msgid "Diffs|No file name available" +msgstr "" + msgid "Directory name" msgstr "ë””ë ‰í† ë¦¬ ì´ë¦„" +msgid "Disable" +msgstr "" + msgid "Discard changes" msgstr "변경 ë‚´ìš© 취소" +msgid "Discover GitLab Geo." +msgstr "" + msgid "Dismiss Cycle Analytics introduction box" msgstr "" @@ -1060,15 +1294,24 @@ msgstr "Plain Diff" msgid "DownloadSource|Download" msgstr "다운로드" +msgid "Due date" +msgstr "" + msgid "Edit" msgstr "편집" msgid "Edit Pipeline Schedule %{id}" msgstr "파ì´í”„ë¼ì¸ 스케줄 편집 %{id}" +msgid "Edit files in the editor and commit changes here" +msgstr "" + msgid "Emails" msgstr "" +msgid "Enable" +msgstr "" + msgid "Environments|An error occurred while fetching the environments." msgstr "" @@ -1087,9 +1330,6 @@ msgstr "" msgid "Environments|Environments" msgstr "" -msgid "Environments|Environments are places where code gets deployed, such as staging or production." -msgstr "" - msgid "Environments|Job" msgstr "" @@ -1132,9 +1372,33 @@ msgstr "" msgid "Error creating epic" msgstr "" +msgid "Error fetching contributors data." +msgstr "" + +msgid "Error fetching labels." +msgstr "" + +msgid "Error fetching network graph." +msgstr "" + +msgid "Error fetching refs" +msgstr "" + +msgid "Error fetching usage ping data." +msgstr "" + msgid "Error occurred when toggling the notification subscription" msgstr "" +msgid "Error saving label update." +msgstr "" + +msgid "Error updating status for all todos." +msgstr "" + +msgid "Error updating todo status." +msgstr "" + msgid "EventFilterBy|Filter by all" msgstr "ëª¨ë“ ê°’ì„ ê¸°ì¤€ìœ¼ë¡œ í•„í„°" @@ -1162,6 +1426,9 @@ msgstr "매월 (1ì¼ ì˜¤ì „ 4ì‹œ)" msgid "Every week (Sundays at 4:00am)" msgstr "매주 (ì¼ìš”ì¼ ì˜¤ì „ 4ì‹œì—)" +msgid "Expand" +msgstr "" + msgid "Explore projects" msgstr "" @@ -1180,6 +1447,9 @@ msgstr "" msgid "February" msgstr "" +msgid "Fields on this page are now uneditable, you can configure" +msgstr "" + msgid "File name" msgstr "" @@ -1223,10 +1493,10 @@ msgstr "머지 리퀘스트 머지ì—ì„œ 프로ë•ì…˜ í™˜ê²½ì— ë°°í¬ê¹Œì§€" msgid "GPG Keys" msgstr "" -msgid "Geo Nodes" +msgid "Generate a default set of labels" msgstr "" -msgid "GeoNodeSyncStatus|Failed" +msgid "Geo Nodes" msgstr "" msgid "GeoNodeSyncStatus|Node is failing or broken." @@ -1235,16 +1505,100 @@ msgstr "" msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage." msgstr "" -msgid "GeoNodeSyncStatus|Out of sync" +msgid "GeoNodes|Database replication lag:" +msgstr "" + +msgid "GeoNodes|Disabling a node stops the sync process. Are you sure?" +msgstr "" + +msgid "GeoNodes|Does not match the primary storage configuration" +msgstr "" + +msgid "GeoNodes|Failed" +msgstr "" + +msgid "GeoNodes|Full" +msgstr "" + +msgid "GeoNodes|GitLab version does not match the primary node version" +msgstr "" + +msgid "GeoNodes|GitLab version:" +msgstr "" + +msgid "GeoNodes|Health status:" +msgstr "" + +msgid "GeoNodes|Last event ID processed by cursor:" +msgstr "" + +msgid "GeoNodes|Last event ID seen from primary:" +msgstr "" + +msgid "GeoNodes|Loading nodes" +msgstr "" + +msgid "GeoNodes|Local Attachments:" +msgstr "" + +msgid "GeoNodes|Local LFS objects:" +msgstr "" + +msgid "GeoNodes|Local job artifacts:" +msgstr "" + +msgid "GeoNodes|New node" +msgstr "" + +msgid "GeoNodes|Out of sync" +msgstr "" + +msgid "GeoNodes|Replication slot WAL:" +msgstr "" + +msgid "GeoNodes|Replication slots:" +msgstr "" + +msgid "GeoNodes|Repositories:" +msgstr "" + +msgid "GeoNodes|Selective" +msgstr "" + +msgid "GeoNodes|Storage config:" +msgstr "" + +msgid "GeoNodes|Sync settings:" msgstr "" -msgid "GeoNodeSyncStatus|Synced" +msgid "GeoNodes|Synced" +msgstr "" + +msgid "GeoNodes|Unused slots" +msgstr "" + +msgid "GeoNodes|Used slots" +msgstr "" + +msgid "GeoNodes|Wikis:" +msgstr "" + +msgid "GeoNodes|You have configured Geo nodes using an insecure HTTP connection. We recommend the use of HTTPS." +msgstr "" + +msgid "Geo|All projects" msgstr "" msgid "Geo|File sync capacity" msgstr "" -msgid "Geo|Groups to replicate" +msgid "Geo|Groups to synchronize" +msgstr "" + +msgid "Geo|Projects in certain groups" +msgstr "" + +msgid "Geo|Projects in certain storage shards" msgstr "" msgid "Geo|Repository sync capacity" @@ -1253,12 +1607,24 @@ msgstr "" msgid "Geo|Select groups to replicate." msgstr "" +msgid "Geo|Shards to synchronize" +msgstr "" + +msgid "Git revision" +msgstr "" + msgid "Git storage health information has been reset" msgstr "git storage ìƒíƒœ ì •ë³´ê°€ 초기화ë˜ì—ˆìŠµë‹ˆë‹¤." +msgid "Git version" +msgstr "" + msgid "GitLab Runner section" msgstr "GitLab Runner 섹션" +msgid "Gitaly Servers" +msgstr "" + msgid "Go to your fork" msgstr "ë‹¹ì‹ ì˜ í¬í¬ë¡œ ì´ë™í•˜ì„¸ìš”" @@ -1268,6 +1634,9 @@ msgstr "í¬í¬" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it!" +msgstr "" + msgid "GroupSettings|Prevent sharing a project within %{group} with other groups" msgstr "" @@ -1304,7 +1673,7 @@ msgstr "" msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group." msgstr "" -msgid "GroupsTree|Are you sure you want to leave the \"${this.group.fullName}\" group?" +msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?" msgstr "" msgid "GroupsTree|Create a project in this group." @@ -1355,6 +1724,10 @@ msgstr " 헬스 ë¬¸ì œê°€ 발견ë˜ì§€ 않았습니다." msgid "HealthCheck|Unhealthy" msgstr "ë¹„ì •ìƒ" +msgid "Hide value" +msgid_plural "Hide values" +msgstr[0] "" + msgid "History" msgstr "" @@ -1380,6 +1753,12 @@ msgid "Instance" msgid_plural "Instances" msgstr[0] "" +msgid "Instance does not support multiple Kubernetes clusters" +msgstr "" + +msgid "Interested parties can even contribute by pushing commits if they want to." +msgstr "" + msgid "Internal - The group and any internal projects can be viewed by any logged in user." msgstr "" @@ -1407,6 +1786,9 @@ msgstr "" msgid "Issues" msgstr "" +msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable." +msgstr "" + msgid "Jan" msgstr "" @@ -1425,6 +1807,27 @@ msgstr "" msgid "June" msgstr "" +msgid "Kubernetes" +msgstr "" + +msgid "Kubernetes Cluster" +msgstr "" + +msgid "Kubernetes cluster creation time exceeds timeout; %{timeout}" +msgstr "" + +msgid "Kubernetes cluster integration was not removed." +msgstr "" + +msgid "Kubernetes cluster integration was successfully removed." +msgstr "" + +msgid "Kubernetes cluster was successfully updated." +msgstr "" + +msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page" +msgstr "" + msgid "LFSStatus|Disabled" msgstr "Disabled" @@ -1434,6 +1837,9 @@ msgstr "Enabled" msgid "Labels" msgstr "" +msgid "Labels can be applied to issues and merge requests to categorize them." +msgstr "" + msgid "Last %d day" msgid_plural "Last %d days" msgstr[0] "최근 %d ì¼" @@ -1462,6 +1868,9 @@ msgstr "푸쉬: " msgid "LastPushEvent|at" msgstr "at" +msgid "Learn more" +msgstr "" + msgid "Learn more in the" msgstr "ë” ìžì„¸ížˆ 알아보기" @@ -1480,13 +1889,18 @@ msgstr "프로ì 트ì—ì„œ 나가기" msgid "License" msgstr "" -msgid "Limited to showing %d event at most" -msgid_plural "Limited to showing %d events at most" -msgstr[0] "최대 %d ì´ë²¤íŠ¸ 만 표시하는 것으로 ì œí•œë©ë‹ˆë‹¤." +msgid "Loading the GitLab IDE..." +msgstr "" msgid "Lock" msgstr "" +msgid "Lock %{issuableDisplayName}" +msgstr "" + +msgid "Lock this %{issuableDisplayName}? Only <strong>project members</strong> will be able to comment." +msgstr "" + msgid "Locked" msgstr "" @@ -1496,12 +1910,21 @@ msgstr "" msgid "Login" msgstr "" +msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos." +msgstr "" + +msgid "Manage labels" +msgstr "" + msgid "Mar" msgstr "" msgid "March" msgstr "" +msgid "Mark done" +msgstr "" + msgid "Maximum git storage failures" msgstr "" @@ -1514,6 +1937,9 @@ msgstr "중앙값" msgid "Members" msgstr "" +msgid "Merge Request" +msgstr "" + msgid "Merge Requests" msgstr "" @@ -1523,9 +1949,30 @@ msgstr "머지 ì´ë²¤íŠ¸" msgid "Merge request" msgstr "" +msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others" +msgstr "" + +msgid "Merged" +msgstr "" + msgid "Messages" msgstr "" +msgid "Milestone" +msgstr "" + +msgid "Milestones|Delete milestone" +msgstr "" + +msgid "Milestones|Delete milestone %{milestoneTitle}?" +msgstr "" + +msgid "Milestones|Failed to delete milestone %{milestoneTitle}" +msgstr "" + +msgid "Milestones|Milestone %{milestoneTitle} was not found" +msgstr "" + msgid "MissingSSHKeyWarningLink|add an SSH key" msgstr "SSH 키 추가" @@ -1535,16 +1982,28 @@ msgstr "" msgid "More information is available|here" msgstr "여기" +msgid "Move" +msgstr "" + +msgid "Move issue" +msgstr "" + msgid "Multiple issue boards" msgstr "" -msgid "New Cluster" +msgid "Name new label" msgstr "" msgid "New Issue" msgid_plural "New Issues" msgstr[0] "새 ì´ìŠˆ" +msgid "New Kubernetes Cluster" +msgstr "" + +msgid "New Kubernetes cluster" +msgstr "" + msgid "New Pipeline Schedule" msgstr "새로운 파ì´í”„ë¼ì¸ ì¼ì •" @@ -1569,6 +2028,9 @@ msgstr "" msgid "New issue" msgstr "새 ì´ìŠˆ" +msgid "New label" +msgstr "" + msgid "New merge request" msgstr "새 머지 리퀘스트" @@ -1587,7 +2049,22 @@ msgstr "" msgid "New tag" msgstr "새 태그 " -msgid "No container images stored for this project. Add one by following the instructions above." +msgid "No assignee" +msgstr "" + +msgid "No changes" +msgstr "" + +msgid "No connection could be made to a Gitaly Server, please check your logs!" +msgstr "" + +msgid "No due date" +msgstr "" + +msgid "No estimate or time spent" +msgstr "" + +msgid "No file chosen" msgstr "" msgid "No repository" @@ -1602,9 +2079,15 @@ msgstr "" msgid "None" msgstr "" +msgid "Not allowed to merge" +msgstr "" + msgid "Not available" msgstr "ì‚¬ìš©í• ìˆ˜ ì—†ìŒ" +msgid "Not confidential" +msgstr "" + msgid "Not enough data" msgstr "ë°ì´í„°ê°€ 충분하지 않습니다." @@ -1665,6 +2148,12 @@ msgstr "Watch" msgid "Notifications" msgstr "" +msgid "Notifications off" +msgstr "" + +msgid "Notifications on" +msgstr "" + msgid "Nov" msgstr "" @@ -1674,7 +2163,7 @@ msgstr "" msgid "Number of access attempts" msgstr "" -msgid "Number of failures before backing off" +msgid "OK" msgstr "" msgid "Oct" @@ -1689,6 +2178,9 @@ msgstr "í•„í„°" msgid "Only project members can comment." msgstr "" +msgid "Open" +msgstr "" + msgid "Opened" msgstr "" @@ -1722,9 +2214,6 @@ msgstr "" msgid "Password" msgstr "" -msgid "People without permission will never get a notification and won\\'t be able to comment." -msgstr "" - msgid "Pipeline" msgstr "파ì´í”„ë¼ì¸" @@ -1767,12 +2256,6 @@ msgstr "모ë‘" msgid "PipelineSchedules|Inactive" msgstr "비활성" -msgid "PipelineSchedules|Input variable key" -msgstr "ìž…ë ¥ 변수 키" - -msgid "PipelineSchedules|Input variable value" -msgstr "ìž…ë ¥ 변수 ê°’" - msgid "PipelineSchedules|Next Run" msgstr "ë‹¤ìŒ ì‹¤í–‰" @@ -1782,9 +2265,6 @@ msgstr "ì—†ìŒ" msgid "PipelineSchedules|Provide a short description for this pipeline" msgstr "ì´ íŒŒì´í”„ë¼ì¸ì— 대한 간단한 설명 ì œê³µ" -msgid "PipelineSchedules|Remove variable row" -msgstr "변수 í–‰ ì œê±°" - msgid "PipelineSchedules|Take ownership" msgstr "ì†Œìœ ê¶Œ ê°€ì ¸ 오기" @@ -1812,6 +2292,12 @@ msgstr "" msgid "Pipelines for last year" msgstr "" +msgid "Pipelines|Build with confidence" +msgstr "" + +msgid "Pipelines|Get started with Pipelines" +msgstr "" + msgid "Pipeline|all" msgstr "모ë‘" @@ -1824,12 +2310,21 @@ msgstr "스테ì´ì§•" msgid "Pipeline|with stages" msgstr "스테ì´ì§•" +msgid "Play" +msgstr "" + +msgid "Please <a href=%{link_to_billing} target=\"_blank\" rel=\"noopener noreferrer\">enable billing for one of your projects to be able to create a Kubernetes cluster</a>, then try again." +msgstr "" + msgid "Please solve the reCAPTCHA" msgstr "" msgid "Preferences" msgstr "" +msgid "Primary" +msgstr "" + msgid "Private - Project access must be granted explicitly to each user." msgstr "" @@ -1875,6 +2370,9 @@ msgstr "" msgid "Profiles|your account" msgstr "" +msgid "Programming languages used in this repository" +msgstr "" + msgid "Project '%{project_name}' is in the process of being deleted." msgstr "" @@ -1890,6 +2388,15 @@ msgstr "'%{project_name}'프로ì 트가 성공ì 으로 ì—…ë°ì´íŠ¸ë˜ì—ˆìŠµë‹ msgid "Project access must be granted explicitly to each user." msgstr "프로ì 트 액세스는 ê° ì‚¬ìš©ìžì—게 명시ì 으로 부여ë˜ì–´ì•¼í•©ë‹ˆë‹¤." +msgid "Project avatar" +msgstr "" + +msgid "Project avatar in repository: %{link}" +msgstr "" + +msgid "Project cache successfully reset." +msgstr "" + msgid "Project details" msgstr "프로ì 트 ìƒì„¸" @@ -1908,6 +2415,21 @@ msgstr "프로ì 트 내보내기가 시작ë˜ì—ˆìŠµë‹ˆë‹¤. 다운로드 ë§í¬ë msgid "ProjectActivityRSS|Subscribe" msgstr "구ë…" +msgid "ProjectCreationLevel|Allowed to create projects" +msgstr "" + +msgid "ProjectCreationLevel|Default project creation protection" +msgstr "" + +msgid "ProjectCreationLevel|Developers + Masters" +msgstr "" + +msgid "ProjectCreationLevel|Masters" +msgstr "" + +msgid "ProjectCreationLevel|No one" +msgstr "" + msgid "ProjectFeature|Disabled" msgstr "사용 안 함" @@ -1932,15 +2454,9 @@ msgstr "그래프" msgid "ProjectSettings|Contact an admin to change this setting." msgstr "" -msgid "ProjectSettings|Immediately run a pipeline on the default branch" -msgstr "" - msgid "ProjectSettings|Only signed commits can be pushed to this repository." msgstr "" -msgid "ProjectSettings|Problem setting up the CI/CD settings JavaScript" -msgstr "" - msgid "ProjectSettings|This setting is applied on the server level and can be overridden by an admin." msgstr "" @@ -2010,6 +2526,9 @@ msgstr "" msgid "PrometheusService|View environments" msgstr "" +msgid "Protip:" +msgstr "" + msgid "Public - The group and any public projects can be viewed without any authentication." msgstr "" @@ -2025,6 +2544,9 @@ msgstr "푸쉬 ì´ë²¤íŠ¸" msgid "PushRule|Committer restriction" msgstr "" +msgid "Quick actions can be used in the issues description and comment boxes." +msgstr "" + msgid "Read more" msgstr "ë” ì½ê¸°" @@ -2037,6 +2559,12 @@ msgstr "브랜치" msgid "RefSwitcher|Tags" msgstr "태그" +msgid "Reference:" +msgstr "" + +msgid "Register / Sign In" +msgstr "" + msgid "Registry" msgstr "" @@ -2061,9 +2589,18 @@ msgstr "ê´€ë ¨ 머지 리퀘스트" msgid "Remind later" msgstr "ë‚˜ì¤‘ì— ë‹¤ì‹œ 알림" +msgid "Remove" +msgstr "" + +msgid "Remove avatar" +msgstr "" + msgid "Remove project" msgstr "프로ì 트 ì‚ì œ" +msgid "Repair authentication" +msgstr "" + msgid "Repository" msgstr "" @@ -2079,6 +2616,10 @@ msgstr "헬스 ì²´í¬ ì ‘ê·¼ í† í° ì´ˆê¸°í™”" msgid "Reset runners registration token" msgstr "runner ë“±ë¡ í† í° ì´ˆê¸°í™”" +msgid "Reveal value" +msgid_plural "Reveal values" +msgstr[0] "" + msgid "Revert this commit" msgstr "ì´ ì»¤ë°‹ ë˜ëŒë¦¬ê¸°" @@ -2088,15 +2629,15 @@ msgstr "ì´ ë¨¸ì§€ 리퀘스트 ë˜ëŒë¦¬ê¸°" msgid "SSH Keys" msgstr "" -msgid "Save" -msgstr "" - msgid "Save changes" msgstr "" msgid "Save pipeline schedule" msgstr "파ì´í”„ë¼ì¸ 스케줄 ì €ìž¥" +msgid "Save variables" +msgstr "" + msgid "Schedule a new pipeline" msgstr "새로운 파ì´í”„ë¼ì¸ 스케줄 잡기" @@ -2112,38 +2653,59 @@ msgstr "" msgid "Search branches and tags" msgstr "브랜치 ë° íƒœê·¸ 검색" -msgid "Seconds before reseting failure information" +msgid "Search milestones" msgstr "" -msgid "Seconds to wait after a storage failure" +msgid "Search project" +msgstr "" + +msgid "Search users" +msgstr "" + +msgid "Seconds before reseting failure information" msgstr "" msgid "Seconds to wait for a storage access attempt" msgstr "" +msgid "Secret variables" +msgstr "" + msgid "Select Archive Format" msgstr "ì•„ì¹´ì´ë¸Œ í¬ë§· ì„ íƒ" msgid "Select a timezone" msgstr "시간대 ì„ íƒ" +msgid "Select assignee" +msgstr "" + +msgid "Select branch/tag" +msgstr "" + msgid "Select target branch" msgstr "ëŒ€ìƒ ë¸Œëžœì¹˜ ì„ íƒ" +msgid "Selective synchronization" +msgstr "" + msgid "Sep" msgstr "" msgid "September" msgstr "" +msgid "Server version" +msgstr "" + msgid "Service Templates" msgstr "" msgid "Set a password on your account to pull or push via %{protocol}." msgstr "%{protocol} í”„ë¡œí† ì½œì„ í†µí•´ Pull 하거나 Pushí•˜ë ¤ë©´ ê³„ì •ì— íŒ¨ìŠ¤ì›Œë“œë¥¼ ì„¤ì •í•˜ì‹ì‹œì˜¤." -msgid "Set up CI" -msgstr "CI ì„¤ì •" +msgid "Set up CI/CD" +msgstr "" msgid "Set up Koding" msgstr "Koding ì„¤ì •" @@ -2157,6 +2719,15 @@ msgstr "패스워드 ì„¤ì •" msgid "Settings" msgstr "" +msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero." +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset pipeline minutes" +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset used pipeline minutes" +msgstr "" + msgid "Show parent pages" msgstr "" @@ -2170,9 +2741,6 @@ msgstr[0] "%d ê°œì˜ ì´ë²¤íŠ¸ 표시 중" msgid "Sidebar|Change weight" msgstr "" -msgid "Sidebar|Edit" -msgstr "" - msgid "Sidebar|No" msgstr "" @@ -2185,18 +2753,30 @@ msgstr "" msgid "Snippets" msgstr "" +msgid "Something went wrong on our end" +msgstr "" + msgid "Something went wrong on our end." msgstr "" +msgid "Something went wrong trying to change the confidentiality of this issue" +msgstr "" + msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}" msgstr "" +msgid "Something went wrong when toggling the button" +msgstr "" + msgid "Something went wrong while fetching the projects." msgstr "" msgid "Something went wrong while fetching the registry list." msgstr "" +msgid "Something went wrong. Please try again." +msgstr "" + msgid "Sort by" msgstr "" @@ -2326,10 +2906,10 @@ msgstr "Runner 시작!" msgid "Stopped" msgstr "" -msgid "Subgroups" +msgid "Storage" msgstr "" -msgid "Subscribe" +msgid "Subgroups" msgstr "" msgid "Switch branch/tag" @@ -2426,7 +3006,10 @@ msgstr "" msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project." msgstr "" -msgid "The circuitbreaker backoff threshold should be lower than the failure count threshold" +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project" +msgstr "" + +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project." msgstr "" msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request." @@ -2441,10 +3024,10 @@ msgstr "í¬í¬ 관계가 ì œê±°ë˜ì—ˆìŠµë‹ˆë‹¤." msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage." msgstr "ì´ìŠˆ 단계ì—는 ì´ìŠˆë¥¼ 작성하여 마ì¼ìŠ¤í†¤ìœ¼ë¡œ ì§€ì •í•˜ëŠ” ë° ê±¸ë¦¬ëŠ” 시간 ë˜ëŠ” ì´ìŠˆ ë³´ë“œì˜ ëª©ë¡ì— ì´ìŠˆë¥¼ 추가하는 ì‹œê°„ì´ í‘œì‹œë©ë‹ˆë‹¤. ì´ ë‹¨ê³„ì˜ ë°ì´í„°ë¥¼ 보기 위해서는 ì´ìŠˆë¥¼ ë¨¼ì € 작성해야 합니다." -msgid "The number of attempts GitLab will make to access a storage." +msgid "The maximum file size allowed is 200KB." msgstr "" -msgid "The number of failures after which GitLab will start temporarily disabling access to a storage shard on a host" +msgid "The number of attempts GitLab will make to access a storage." msgstr "" msgid "The number of failures of after which GitLab will completely prevent access to the storage. The number of failures can be reset in the admin interface: %{link_to_health_page} or using the %{api_documentation_link}." @@ -2453,9 +3036,6 @@ msgstr "" msgid "The phase of the development lifecycle." msgstr "개발 ìˆ˜ëª…ì£¼ê¸°ì˜ ë‹¨ê³„." -msgid "The pipelines schedule runs pipelines in the future, repeatedly, for specific branches or tags. Those scheduled pipelines will inherit limited project access based on their associated user." -msgstr "파ì´í”„ë¼ì¸ ì¼ì •ì€ ë¯¸ëž˜ì— íŠ¹ì • 브랜치 ë˜ëŠ” íƒœê·¸ì— ëŒ€í•´ 반복ì 으로 파ì´í”„ë¼ì¸ì„ 실행합니다. ì˜ˆì •ëœ íŒŒì´í”„ë¼ì¸ì€ ê´€ë ¨ 사용ìžë¥¼ 기반으로 ì œí•œëœ í”„ë¡œì 트 액세스 ê¶Œí•œì„ ìƒì†ë°›ìŠµë‹ˆë‹¤." - msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit." msgstr "ê³„íš ë‹¨ê³„ì—서는 ì´ì „ 단계ì—ì„œ 첫 번째 커밋 ì‹œê°„ì´ í‘œì‹œë©ë‹ˆë‹¤. ì´ ì‹œê°„ì€ ì²« 번째 ì»¤ë°‹ì„ ëˆ„ë¥´ë©´ ìžë™ìœ¼ë¡œ 추가ë©ë‹ˆë‹¤." @@ -2486,19 +3066,46 @@ msgstr "" msgid "The time in seconds GitLab will try to access storage. After this time a timeout error will be raised." msgstr "" +msgid "The time in seconds between storage checks. When a previous check did complete yet, GitLab will skip a check." +msgstr "" + msgid "The time taken by each data entry gathered by that stage." msgstr "해당 단계ì—ì„œ 수집 í•œ ê° ë°ì´í„° ìž…ë ¥ì— ì†Œìš” ëœ ì‹œê°„" msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6." msgstr "ê°’ì€ ì¼ë ¨ì˜ 관측 ê°’ 중ì ì— ìžˆìŠµë‹ˆë‹¤. 예를 들어, 3, 5, 9 사ì´ì˜ 중간 ê°’ì€ 5입니다. 3, 5, 7, 8 사ì´ì˜ 중간 ê°’ì€ (5 + 7) / 2 = 6입니다." +msgid "There are no issues to show" +msgstr "" + +msgid "There are no merge requests to show" +msgstr "" + msgid "There are problems accessing Git storage: " msgstr "git storageì— ì ‘ê·¼í•˜ëŠ”ë° ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤. " +msgid "There was an error loading users activity calendar." +msgstr "" + +msgid "There was an error saving your notification settings." +msgstr "" + +msgid "There was an error subscribing to this label." +msgstr "" + +msgid "There was an error when reseting email token." +msgstr "" + +msgid "There was an error when subscribing to this label." +msgstr "" + +msgid "There was an error when unsubscribing from this label." +msgstr "" + msgid "This board\\'s scope is reduced" msgstr "" -msgid "This branch has changed since you started editing. Would you like to create a new branch?" +msgid "This directory" msgstr "" msgid "This is a confidential issue." @@ -2507,18 +3114,45 @@ msgstr "" msgid "This is the author's first Merge Request to this project." msgstr "" +msgid "This issue is confidential" +msgstr "" + msgid "This issue is confidential and locked." msgstr "" msgid "This issue is locked." msgstr "" +msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments" +msgstr "" + +msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered" +msgstr "" + +msgid "This job has not been triggered yet" +msgstr "" + +msgid "This job has not started yet" +msgstr "" + +msgid "This job is in pending state and is waiting to be picked by a runner" +msgstr "" + +msgid "This job requires a manual action" +msgstr "" + msgid "This means you can not push code until you create an empty repository or import existing one." msgstr "즉, 빈 ì €ìž¥ì†Œë¥¼ 만들거나 기존 ì €ìž¥ì†Œë¥¼ ê°€ì ¸ì˜¬ 때까지 코드를 Push í• ìˆ˜ 없습니다." msgid "This merge request is locked." msgstr "" +msgid "This project" +msgstr "" + +msgid "This repository" +msgstr "" + msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here." msgstr "" @@ -2531,9 +3165,21 @@ msgstr "ì´ìŠˆê°€ 구현ë˜ê¸° ì „ì˜ ì‹œê°„" msgid "Time between merge request creation and merge/close" msgstr "머지 리퀘스트 ìƒì„±ê³¼ 머지 / 닫기 사ì´ì˜ 시간" +msgid "Time tracking" +msgstr "" + msgid "Time until first merge request" msgstr "첫 번째 머지 ë¦¬í€˜ìŠ¤íŠ¸ê¹Œì§€ì˜ ì‹œê°„" +msgid "TimeTrackingEstimated|Est" +msgstr "" + +msgid "TimeTracking|Estimated:" +msgstr "" + +msgid "TimeTracking|Spent" +msgstr "" + msgid "Timeago|%s days ago" msgstr "%s ì¼ ì „" @@ -2671,6 +3317,18 @@ msgstr "ì´ˆ" msgid "Title" msgstr "" +msgid "Todo" +msgstr "" + +msgid "Toggle sidebar" +msgstr "" + +msgid "ToggleButton|Toggle Status: OFF" +msgstr "" + +msgid "ToggleButton|Toggle Status: ON" +msgstr "" + msgid "Total Time" msgstr "시간 합계:" @@ -2686,19 +3344,40 @@ msgstr "" msgid "Track groups of issues that share a theme, across projects and milestones" msgstr "" +msgid "Total: %{total}" +msgstr "" + +msgid "Track time with quick actions" +msgstr "" + +msgid "Trigger this manual action" +msgstr "" + msgid "Turn on Service Desk" msgstr "" +msgid "Type %{value} to confirm:" +msgstr "" + +msgid "Unable to reset project cache." +msgstr "" + +msgid "Unknown" +msgstr "" + msgid "Unlock" msgstr "" +msgid "Unlock this %{issuableDisplayName}? <strong>Everyone</strong> will be able to comment." +msgstr "" + msgid "Unlocked" msgstr "" msgid "Unstar" msgstr "별표 ì œê±°" -msgid "Unsubscribe" +msgid "Up to date" msgstr "" msgid "Upgrade your plan to activate Advanced Global Search." @@ -2722,6 +3401,9 @@ msgstr "새 íŒŒì¼ ì—…ë¡œë“œ" msgid "Upload file" msgstr "íŒŒì¼ ì—…ë¡œë“œ" +msgid "Upload new avatar" +msgstr "" + msgid "UploadLink|click to upload" msgstr "ì—…ë¡œë“œí•˜ë ¤ë©´ í´ë¦í•˜ì‹ì‹œì˜¤." @@ -2734,9 +3416,15 @@ msgstr "ì„¤ì • ì¤‘ì— ë‹¤ìŒ ë“±ë¡ í† í° ì´ìš© : " msgid "Use your global notification setting" msgstr "ì „ì²´ 알림 ì„¤ì • 사용" +msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want." +msgstr "" + msgid "View file @ " msgstr "" +msgid "View labels" +msgstr "" + msgid "View open merge request" msgstr "열린 머지 리퀘스트보기" @@ -2758,6 +3446,9 @@ msgstr "ì•Œ 수 ì—†ìŒ" msgid "Want to see the data? Please ask an administrator for access." msgstr "ì´ ë°ì´í„°ë¥¼ ë³´ê³ ì‹¶ì€ê°€ìš”? 관리ìžì—게 액세스 ê¶Œí•œì„ ìš”ì²í•˜ì„¸ìš”." +msgid "We could not verify that one of your projects on GCP has billing enabled. Please try again." +msgstr "" + msgid "We don't have enough data to show this stage." msgstr "ì´ ë‹¨ê³„ë¥¼ ë³´ì—¬ì£¼ê¸°ì— ì¶©ë¶„í•œ ë°ì´í„°ê°€ 없습니다." @@ -2770,9 +3461,6 @@ msgstr "" msgid "Weight" msgstr "" -msgid "When access to a storage fails. GitLab will prevent access to the storage for the time specified here. This allows the filesystem to recover. Repositories on failing shards are temporarly unavailable" -msgstr "" - msgid "Wiki" msgstr "" @@ -2791,6 +3479,12 @@ msgstr "" msgid "WikiClone|Start Gollum and edit locally" msgstr "" +msgid "WikiEditPageTip|Tip: You can move this page by adding the path to the beginning of the title." +msgstr "" + +msgid "WikiEdit|There is already a page with the same title in that path." +msgstr "" + msgid "WikiEmptyPageError|You are not allowed to create wiki pages" msgstr "" @@ -2893,9 +3587,21 @@ msgstr "í¬í¬ 관계를 소스 프로ì 트 %{forked_from_project}ì— ëŒ€í•´ ì msgid "You are going to transfer %{project_name_with_namespace} to another owner. Are you ABSOLUTELY sure?" msgstr "%{project_name_with_namespace}ì„ ë‹¤ë¥¸ ì†Œìœ ìžì—게 ì´ì „í•˜ë ¤ê³ í•©ë‹ˆë‹¤. \"ì •ë§ë¡œ\" 확실합니까?" +msgid "You can also star a label to make it a priority label." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + msgid "You can only add files when you are on a branch" msgstr "ë¸Œëžœì¹˜ì— ìžˆì„ ë•Œì—만 파ì¼ì„ 추가 í• ìˆ˜ 있습니다." +msgid "You can only edit files when you are on a branch" +msgstr "" + msgid "You cannot write to a read-only secondary GitLab Geo instance. Please use %{link_to_primary_node} instead." msgstr "" @@ -2935,6 +3641,12 @@ msgstr "ë‹¹ì‹ ì˜ í”„ë¡œí•„ì— %{add_ssh_key_link} 를 하기 ì „ì—는 SSH를 í msgid "You won't be able to pull or push project code via SSH until you add an SSH key to your profile" msgstr "" +msgid "You'll need to use different branch names to get a valid comparison." +msgstr "" + +msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure" +msgstr "" + msgid "Your comment will not be visible to the public." msgstr "" @@ -2947,25 +3659,218 @@ msgstr "ê·€í•˜ì˜ ì´ë¦„" msgid "Your projects" msgstr "" +msgid "assign yourself" +msgstr "" + msgid "branch name" msgstr "" msgid "by" msgstr "" +msgid "ciReport|Code quality" +msgstr "" + +msgid "ciReport|DAST detected no alerts by analyzing the review app" +msgstr "" + +msgid "ciReport|Failed to load ${type} report" +msgstr "" + +msgid "ciReport|Fixed:" +msgstr "" + +msgid "ciReport|Instances" +msgstr "" + +msgid "ciReport|Learn more about whitelisting" +msgstr "" + +msgid "ciReport|Loading ${type} report" +msgstr "" + +msgid "ciReport|No changes to code quality" +msgstr "" + +msgid "ciReport|No changes to performance metrics" +msgstr "" + +msgid "ciReport|Performance metrics" +msgstr "" + +msgid "ciReport|SAST" +msgstr "" + +msgid "ciReport|SAST detected no security vulnerabilities" +msgstr "" + +msgid "ciReport|SAST:container no vulnerabilities were found" +msgstr "" + +msgid "ciReport|Show complete code vulnerabilities report" +msgstr "" + +msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}" +msgstr "" + msgid "commit" msgstr "" +msgid "confidentiality|You are going to turn off the confidentiality. This means <strong>everyone</strong> will be able to see and leave a comment on this issue." +msgstr "" + +msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with <strong>at least Reporter access</strong> are able to see and leave comments on the issue." +msgstr "" + msgid "day" msgid_plural "days" msgstr[0] "ì¼" +msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command." +msgstr "" + +msgid "merge request" +msgid_plural "merge requests" +msgstr[0] "" + +msgid "mrWidget|Cancel automatic merge" +msgstr "" + +msgid "mrWidget|Check out branch" +msgstr "" + +msgid "mrWidget|Checking ability to merge automatically" +msgstr "" + +msgid "mrWidget|Cherry-pick" +msgstr "" + +msgid "mrWidget|Cherry-pick this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Closed" +msgstr "" + +msgid "mrWidget|Closed by" +msgstr "" + +msgid "mrWidget|Closes" +msgstr "" + +msgid "mrWidget|Did not close" +msgstr "" + +msgid "mrWidget|Email patches" +msgstr "" + +msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|Mentions" +msgstr "" + +msgid "mrWidget|Merge" +msgstr "" + +msgid "mrWidget|Merge failed." +msgstr "" + +msgid "mrWidget|Merge locally" +msgstr "" + +msgid "mrWidget|Merged by" +msgstr "" + +msgid "mrWidget|Plain diff" +msgstr "" + +msgid "mrWidget|Refresh" +msgstr "" + +msgid "mrWidget|Refresh now" +msgstr "" + +msgid "mrWidget|Refreshing now" +msgstr "" + +msgid "mrWidget|Remove Source Branch" +msgstr "" + +msgid "mrWidget|Remove source branch" +msgstr "" + +msgid "mrWidget|Request to merge" +msgstr "" + +msgid "mrWidget|Resolve conflicts" +msgstr "" + +msgid "mrWidget|Revert" +msgstr "" + +msgid "mrWidget|Revert this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Set by" +msgstr "" + +msgid "mrWidget|The changes were merged into" +msgstr "" + +msgid "mrWidget|The changes were not merged into" +msgstr "" + +msgid "mrWidget|The changes will be merged into" +msgstr "" + +msgid "mrWidget|The source branch has been removed" +msgstr "" + +msgid "mrWidget|The source branch is being removed" +msgstr "" + +msgid "mrWidget|The source branch will be removed" +msgstr "" + +msgid "mrWidget|The source branch will not be removed" +msgstr "" + +msgid "mrWidget|There are merge conflicts" +msgstr "" + +msgid "mrWidget|This merge request failed to be merged automatically" +msgstr "" + +msgid "mrWidget|This merge request is in the process of being merged" +msgstr "" + +msgid "mrWidget|This project is archived, write access has been disabled" +msgstr "" + +msgid "mrWidget|You can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|You can remove source branch now" +msgstr "" + +msgid "mrWidget|command line" +msgstr "" + +msgid "mrWidget|into" +msgstr "" + +msgid "mrWidget|to be merged automatically when the pipeline succeeds" +msgstr "" + msgid "new merge request" msgstr "새 머지 리퀘스트" msgid "notification emails" msgstr "알림 ì´ë©”ì¼" +msgid "or" +msgstr "" + msgid "parent" msgid_plural "parents" msgstr[0] "부모" @@ -2976,12 +3881,21 @@ msgstr "" msgid "personal access token" msgstr "" +msgid "remove due date" +msgstr "" + msgid "source" msgstr "" +msgid "spendCommand|%{slash_command} will update the sum of the time spent." +msgstr "" + msgid "to help your contributors communicate effectively!" msgstr "" msgid "username" msgstr "" +msgid "uses Kubernetes clusters to deploy your code!" +msgstr "" + diff --git a/locale/nl_NL/gitlab.po b/locale/nl_NL/gitlab.po index eca1923fd2c..451be6434db 100644 --- a/locale/nl_NL/gitlab.po +++ b/locale/nl_NL/gitlab.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: gitlab-ee\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-12-12 18:31+0000\n" -"PO-Revision-Date: 2018-01-05 04:42-0500\n" +"POT-Creation-Date: 2018-02-07 11:38-0600\n" +"PO-Revision-Date: 2018-02-12 03:59-0500\n" "Last-Translator: gitlab <mbartlett+crowdin@gitlab.com>\n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -16,22 +16,40 @@ msgstr "" "X-Crowdin-Language: nl\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" +msgid " and" +msgstr "" + msgid "%d commit" msgid_plural "%d commits" msgstr[0] "%d commit" msgstr[1] "%d commits" +msgid "%d commit behind" +msgid_plural "%d commits behind" +msgstr[0] "" +msgstr[1] "" + +msgid "%d issue" +msgid_plural "%d issues" +msgstr[0] "" +msgstr[1] "" + msgid "%d layer" msgid_plural "%d layers" msgstr[0] "" msgstr[1] "" +msgid "%d merge request" +msgid_plural "%d merge requests" +msgstr[0] "" +msgstr[1] "" + msgid "%s additional commit has been omitted to prevent performance issues." msgid_plural "%s additional commits have been omitted to prevent performance issues." msgstr[0] "%s andere commit is weggelaten om prestatieproblemen te voorkomen." msgstr[1] "%s andere commits zijn weggelaten om prestatieproblemen te voorkomen." -msgid "%{commit_author_link} committed %{commit_timeago}" +msgid "%{commit_author_link} authored %{commit_timeago}" msgstr "" msgid "%{count} participant" @@ -45,9 +63,6 @@ msgstr "" msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt." msgstr "" -msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will block access for %{number_of_seconds} seconds." -msgstr "" - msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will not retry automatically. Reset storage information when the problem is resolved." msgstr "" @@ -121,24 +136,81 @@ msgstr "Licentie toevoegen" msgid "Add new directory" msgstr "Nieuwe map toevoegen" +msgid "Add todo" +msgstr "" + +msgid "AdminArea|Stop all jobs" +msgstr "" + +msgid "AdminArea|Stop all jobs?" +msgstr "" + +msgid "AdminArea|Stop jobs" +msgstr "" + +msgid "AdminArea|Stopping jobs failed" +msgstr "" + +msgid "AdminArea|You’re about to stop all jobs. This will halt all current jobs that are running." +msgstr "" + msgid "AdminHealthPageLink|health page" msgstr "" +msgid "Advanced" +msgstr "" + msgid "Advanced settings" msgstr "" msgid "All" msgstr "Alles" +msgid "All changes are committed" +msgstr "" + +msgid "Allows you to add and manage Kubernetes clusters." +msgstr "" + +msgid "An error occurred previewing the blob" +msgstr "" + msgid "An error occurred when toggling the notification subscription" msgstr "" msgid "An error occurred when updating the issue weight" msgstr "" +msgid "An error occurred while dismissing the feature highlight. Refresh the page and try dismissing again." +msgstr "" + +msgid "An error occurred while fetching markdown preview" +msgstr "" + msgid "An error occurred while fetching sidebar data" msgstr "" +msgid "An error occurred while getting projects" +msgstr "" + +msgid "An error occurred while loading filenames" +msgstr "" + +msgid "An error occurred while rendering KaTeX" +msgstr "" + +msgid "An error occurred while rendering preview broadcast message" +msgstr "" + +msgid "An error occurred while retrieving calendar activity" +msgstr "" + +msgid "An error occurred while retrieving diff" +msgstr "" + +msgid "An error occurred while validating username" +msgstr "" + msgid "An error occurred. Please try again." msgstr "" @@ -163,9 +235,6 @@ msgstr "" msgid "Are you sure you want to discard your changes?" msgstr "" -msgid "Are you sure you want to leave this group?" -msgstr "" - msgid "Are you sure you want to reset registration token?" msgstr "" @@ -178,6 +247,21 @@ msgstr "" msgid "Artifacts" msgstr "" +msgid "Assign custom color like #FF0000" +msgstr "" + +msgid "Assign labels" +msgstr "" + +msgid "Assign milestone" +msgstr "" + +msgid "Assign to" +msgstr "" + +msgid "Assignee" +msgstr "" + msgid "Attach a file by drag & drop or %{upload_link}" msgstr "" @@ -193,13 +277,16 @@ msgstr "" msgid "Author" msgstr "Auteur" -msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly." +msgid "Authors: %{authors}" msgstr "" -msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly." +msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly." msgstr "" -msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly." +msgid "Auto Review Apps and Auto Deploy need a domain name and a %{kubernetes} to work correctly." +msgstr "" + +msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly." msgstr "" msgid "AutoDevOps|Auto DevOps (Beta)" @@ -223,6 +310,12 @@ msgstr "" msgid "Available" msgstr "" +msgid "Avatar will be removed. Are you sure?" +msgstr "" + +msgid "Average per day: %{average}" +msgstr "" + msgid "Billing" msgstr "" @@ -277,6 +370,9 @@ msgstr "" msgid "BillingPlans|per user" msgstr "" +msgid "Begin with the selected commit" +msgstr "" + msgid "Branch" msgid_plural "Branches" msgstr[0] "" @@ -405,8 +501,8 @@ msgstr "door" msgid "CI / CD" msgstr "CI / CD" -msgid "CI configuration" -msgstr "CI Configuratie" +msgid "CI/CD configuration" +msgstr "" msgid "CICD|Jobs" msgstr "" @@ -417,6 +513,9 @@ msgstr "Annuleren" msgid "Cancel edit" msgstr "Bewerken annuleren" +msgid "Cannot modify managed Kubernetes cluster" +msgstr "" + msgid "Change Weight" msgstr "" @@ -432,15 +531,24 @@ msgstr "" msgid "ChangeTypeAction|Revert" msgstr "" +msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes." +msgstr "" + msgid "Changelog" msgstr "" +msgid "Changes are shown as if the <b>source</b> revision was being merged into the <b>target</b> revision." +msgstr "" + msgid "Charts" msgstr "Grafieken" msgid "Chat" msgstr "Chat" +msgid "Check interval" +msgstr "" + msgid "Checking %{text} availability…" msgstr "" @@ -453,7 +561,19 @@ msgstr "Cherry-pick deze commit" msgid "Cherry-pick this merge request" msgstr "" -msgid "Choose which groups you wish to replicate to this secondary node. Leave blank to replicate all." +msgid "Choose File ..." +msgstr "" + +msgid "Choose a branch/tag (e.g. %{master}) or enter a commit (e.g. %{sha}) to see what's changed or to create a merge request." +msgstr "" + +msgid "Choose file..." +msgstr "" + +msgid "Choose which groups you wish to synchronize to this secondary node." +msgstr "" + +msgid "Choose which shards you wish to synchronize to this secondary node." msgstr "" msgid "CiStatusLabel|canceled" @@ -510,79 +630,91 @@ msgstr "overgeslagen" msgid "CiStatus|running" msgstr "" -msgid "CircuitBreakerApiLink|circuitbreaker api" +msgid "CiVariables|Input variable key" msgstr "" -msgid "Clone repository" +msgid "CiVariables|Input variable value" msgstr "" -msgid "Close" +msgid "CiVariables|Remove variable row" msgstr "" -msgid "Cluster" +msgid "CiVariable|* (All environments)" msgstr "" -msgid "ClusterIntegration|%{appList} was successfully installed on your cluster" +msgid "CiVariable|All environments" msgstr "" -msgid "ClusterIntegration|%{boldNotice} This will add some extra resources like a load balancer, which incur additional costs. See %{pricingLink}" +msgid "CiVariable|Create wildcard" msgstr "" -msgid "ClusterIntegration|API URL" +msgid "CiVariable|Error occured while saving variables" msgstr "" -msgid "ClusterIntegration|Active" +msgid "CiVariable|New environment" msgstr "" -msgid "ClusterIntegration|Add an existing cluster" +msgid "CiVariable|Protected" msgstr "" -msgid "ClusterIntegration|Add cluster" +msgid "CiVariable|Search environments" msgstr "" -msgid "ClusterIntegration|All" +msgid "CiVariable|Toggle protected" msgstr "" -msgid "ClusterIntegration|Applications" +msgid "CiVariable|Validation failed" msgstr "" -msgid "ClusterIntegration|CA Certificate" +msgid "CircuitBreakerApiLink|circuitbreaker api" msgstr "" -msgid "ClusterIntegration|Certificate Authority bundle (PEM format)" +msgid "Click to expand text" msgstr "" -msgid "ClusterIntegration|Choose how to set up cluster integration" +msgid "Clone repository" msgstr "" -msgid "ClusterIntegration|Cluster" +msgid "Close" msgstr "" -msgid "ClusterIntegration|Cluster details" +msgid "Closed" msgstr "" -msgid "ClusterIntegration|Cluster integration" +msgid "ClusterIntegration|%{appList} was successfully installed on your Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Cluster integration is disabled for this project." +msgid "ClusterIntegration|API URL" msgstr "" -msgid "ClusterIntegration|Cluster integration is enabled for this project." +msgid "ClusterIntegration|Add Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Cluster integration is enabled for this project. Disabling this integration will not affect your cluster, it will only temporarily turn off GitLab's connection to it." +msgid "ClusterIntegration|Add an existing Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Cluster is being created on Google Kubernetes Engine..." +msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration" msgstr "" -msgid "ClusterIntegration|Cluster name" +msgid "ClusterIntegration|Applications" msgstr "" -msgid "ClusterIntegration|Cluster was successfully created on Google Kubernetes Engine. Refresh the page to see cluster's details" +msgid "ClusterIntegration|Are you sure you want to remove this Kubernetes cluster's integration? This will not delete your actual Kubernetes cluster." msgstr "" -msgid "ClusterIntegration|Clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" +msgid "ClusterIntegration|CA Certificate" +msgstr "" + +msgid "ClusterIntegration|Certificate Authority bundle (PEM format)" +msgstr "" + +msgid "ClusterIntegration|Choose how to set up Kubernetes cluster integration" +msgstr "" + +msgid "ClusterIntegration|Choose which of your project's environments will use this Kubernetes cluster." +msgstr "" + +msgid "ClusterIntegration|Control how your Kubernetes cluster integrates with GitLab" msgstr "" msgid "ClusterIntegration|Copy API URL" @@ -591,37 +723,34 @@ msgstr "" msgid "ClusterIntegration|Copy CA Certificate" msgstr "" -msgid "ClusterIntegration|Copy Token" +msgid "ClusterIntegration|Copy Kubernetes cluster name" msgstr "" -msgid "ClusterIntegration|Copy cluster name" +msgid "ClusterIntegration|Copy Token" msgstr "" -msgid "ClusterIntegration|Create a new cluster on Google Engine right from GitLab" +msgid "ClusterIntegration|Create Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Create cluster" +msgid "ClusterIntegration|Create Kubernetes cluster on Google Kubernetes Engine" msgstr "" -msgid "ClusterIntegration|Create cluster on Google Kubernetes Engine" +msgid "ClusterIntegration|Create a new Kubernetes cluster on Google Kubernetes Engine right from GitLab" msgstr "" msgid "ClusterIntegration|Create on GKE" msgstr "" -msgid "ClusterIntegration|Enable cluster integration" -msgstr "" - msgid "ClusterIntegration|Enter the details for an existing Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Enter the details for your cluster" +msgid "ClusterIntegration|Enter the details for your Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Environment pattern" +msgid "ClusterIntegration|Environment scope" msgstr "" -msgid "ClusterIntegration|GKE pricing" +msgid "ClusterIntegration|GitLab Integration" msgstr "" msgid "ClusterIntegration|GitLab Runner" @@ -639,64 +768,94 @@ msgstr "" msgid "ClusterIntegration|Helm Tiller" msgstr "" -msgid "ClusterIntegration|Inactive" -msgstr "" - msgid "ClusterIntegration|Ingress" msgstr "" msgid "ClusterIntegration|Install" msgstr "" -msgid "ClusterIntegration|Install applications on your cluster. Read more about %{helpLink}" -msgstr "" - msgid "ClusterIntegration|Installed" msgstr "" msgid "ClusterIntegration|Installing" msgstr "" -msgid "ClusterIntegration|Integrate cluster automation" +msgid "ClusterIntegration|Integrate Kubernetes cluster automation" +msgstr "" + +msgid "ClusterIntegration|Integration status" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster details" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is disabled for this project." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project. Disabling this integration will not affect your Kubernetes cluster, it will only temporarily turn off GitLab's connection to it." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster is being created on Google Kubernetes Engine..." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster name" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters can be used to deploy applications and to provide Review Apps for this project" msgstr "" msgid "ClusterIntegration|Learn more about %{link_to_documentation}" msgstr "" -msgid "ClusterIntegration|Learn more about Clusters" +msgid "ClusterIntegration|Learn more about Kubernetes" msgstr "" -msgid "ClusterIntegration|Machine type" +msgid "ClusterIntegration|Learn more about environments" msgstr "" -msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create clusters" +msgid "ClusterIntegration|Machine type" msgstr "" -msgid "ClusterIntegration|Manage cluster integration on your GitLab project" +msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create Kubernetes clusters" msgstr "" -msgid "ClusterIntegration|Manage your cluster by visiting %{link_gke}" +msgid "ClusterIntegration|Manage" msgstr "" -msgid "ClusterIntegration|Multiple clusters are available in GitLab Entreprise Edition Premium and Ultimate" +msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}" msgstr "" -msgid "ClusterIntegration|Note:" +msgid "ClusterIntegration|More information" msgstr "" -msgid "ClusterIntegration|Number of nodes" +msgid "ClusterIntegration|Multiple Kubernetes clusters are available in GitLab Enterprise Edition Premium and Ultimate" msgstr "" -msgid "ClusterIntegration|Please enter access information for your cluster. If you need help, you can read our %{link_to_help_page} on clusters" +msgid "ClusterIntegration|Note:" msgstr "" -msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:" +msgid "ClusterIntegration|Number of nodes" msgstr "" -msgid "ClusterIntegration|Problem setting up the cluster" +msgid "ClusterIntegration|Please enter access information for your Kubernetes cluster. If you need help, you can read our %{link_to_help_page} on Kubernetes" msgstr "" -msgid "ClusterIntegration|Problem setting up the clusters list" +msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:" msgstr "" msgid "ClusterIntegration|Project ID" @@ -708,16 +867,19 @@ msgstr "" msgid "ClusterIntegration|Project namespace (optional, unique)" msgstr "" -msgid "ClusterIntegration|Read our %{link_to_help_page} on cluster integration." +msgid "ClusterIntegration|Prometheus" msgstr "" -msgid "ClusterIntegration|Remove cluster integration" +msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration." +msgstr "" + +msgid "ClusterIntegration|Remove Kubernetes cluster integration" msgstr "" msgid "ClusterIntegration|Remove integration" msgstr "" -msgid "ClusterIntegration|Removing cluster integration will remove the cluster configuration you have added to this project. It will not delete your cluster on Google Kubernetes Engine." +msgid "ClusterIntegration|Remove this Kubernetes cluster's configuration from this project. This will not delete your actual Kubernetes cluster." msgstr "" msgid "ClusterIntegration|Request to begin installing failed" @@ -726,7 +888,7 @@ msgstr "" msgid "ClusterIntegration|Save changes" msgstr "" -msgid "ClusterIntegration|See and edit the details for your cluster" +msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster" msgstr "" msgid "ClusterIntegration|See machine types" @@ -747,25 +909,25 @@ msgstr "" msgid "ClusterIntegration|Something went wrong on our end." msgstr "" -msgid "ClusterIntegration|Something went wrong while creating your cluster on Google Kubernetes Engine" +msgid "ClusterIntegration|Something went wrong while creating your Kubernetes cluster on Google Kubernetes Engine" msgstr "" msgid "ClusterIntegration|Something went wrong while installing %{title}" msgstr "" -msgid "ClusterIntegration|There are no clusters to show" +msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below" msgstr "" -msgid "ClusterIntegration|This account must have permissions to create a cluster in the %{link_to_container_project} specified below" +msgid "ClusterIntegration|Toggle Kubernetes Cluster" msgstr "" -msgid "ClusterIntegration|Toggle Cluster" +msgid "ClusterIntegration|Toggle Kubernetes cluster" msgstr "" msgid "ClusterIntegration|Token" msgstr "" -msgid "ClusterIntegration|With a cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." +msgid "ClusterIntegration|With a Kubernetes cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." msgstr "" msgid "ClusterIntegration|Your account must have %{link_to_kubernetes_engine}" @@ -777,7 +939,7 @@ msgstr "" msgid "ClusterIntegration|access to Google Kubernetes Engine" msgstr "" -msgid "ClusterIntegration|cluster" +msgid "ClusterIntegration|check the pricing here" msgstr "" msgid "ClusterIntegration|documentation" @@ -795,6 +957,9 @@ msgstr "" msgid "ClusterIntegration|properly configured" msgstr "" +msgid "Collapse" +msgstr "" + msgid "Comments" msgstr "Opmerkingen" @@ -812,6 +977,9 @@ msgstr "" msgid "Commit message" msgstr "" +msgid "Commit statistics for %{ref} %{start_time} - %{end_time}" +msgstr "" + msgid "CommitBoxTitle|Commit" msgstr "Commit" @@ -824,15 +992,57 @@ msgstr "Commits" msgid "Commits feed" msgstr "" +msgid "Commits per day hour (UTC)" +msgstr "" + +msgid "Commits per day of month" +msgstr "" + +msgid "Commits per weekday" +msgstr "" + +msgid "Commits|An error occurred while fetching merge requests data." +msgstr "" + +msgid "Commits|Commit: %{commitText}" +msgstr "" + msgid "Commits|History" msgstr "Geschiedenis" +msgid "Commits|No related merge requests found" +msgstr "" + msgid "Committed by" msgstr "Gecommit door" msgid "Compare" msgstr "Vergelijk" +msgid "Compare Git revisions" +msgstr "" + +msgid "Compare Revisions" +msgstr "" + +msgid "CompareBranches|%{source_branch} and %{target_branch} are the same." +msgstr "" + +msgid "CompareBranches|Compare" +msgstr "" + +msgid "CompareBranches|Source" +msgstr "" + +msgid "CompareBranches|Target" +msgstr "" + +msgid "CompareBranches|There isn't anything to compare." +msgstr "" + +msgid "Confidentiality" +msgstr "" + msgid "Container Registry" msgstr "" @@ -884,6 +1094,9 @@ msgstr "" msgid "Contributors" msgstr "" +msgid "ContributorsPage|%{startDate} – %{endDate}" +msgstr "" + msgid "ContributorsPage|Building repository graph." msgstr "" @@ -905,9 +1118,18 @@ msgstr "" msgid "Copy URL to clipboard" msgstr "" +msgid "Copy branch name to clipboard" +msgstr "" + msgid "Copy commit SHA to clipboard" msgstr "" +msgid "Copy reference to clipboard" +msgstr "" + +msgid "Create" +msgstr "" + msgid "Create New Directory" msgstr "" @@ -926,6 +1148,9 @@ msgstr "" msgid "Create file" msgstr "" +msgid "Create lists from labels. Issues with that label appear in that list." +msgstr "" + msgid "Create merge request" msgstr "" @@ -938,6 +1163,9 @@ msgstr "" msgid "Create new file" msgstr "" +msgid "Create new label" +msgstr "" + msgid "Create new..." msgstr "" @@ -959,6 +1187,9 @@ msgstr "" msgid "Cron syntax" msgstr "" +msgid "Current node" +msgstr "" + msgid "Custom notification events" msgstr "" @@ -968,9 +1199,6 @@ msgstr "" msgid "Cycle Analytics" msgstr "" -msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project." -msgstr "" - msgid "CycleAnalyticsStage|Code" msgstr "Code" @@ -1027,12 +1255,21 @@ msgstr "" msgid "Details" msgstr "" +msgid "Diffs|No file name available" +msgstr "" + msgid "Directory name" msgstr "" +msgid "Disable" +msgstr "" + msgid "Discard changes" msgstr "" +msgid "Discover GitLab Geo." +msgstr "" + msgid "Dismiss Cycle Analytics introduction box" msgstr "" @@ -1069,15 +1306,24 @@ msgstr "" msgid "DownloadSource|Download" msgstr "" +msgid "Due date" +msgstr "" + msgid "Edit" msgstr "" msgid "Edit Pipeline Schedule %{id}" msgstr "" +msgid "Edit files in the editor and commit changes here" +msgstr "" + msgid "Emails" msgstr "" +msgid "Enable" +msgstr "" + msgid "Environments|An error occurred while fetching the environments." msgstr "" @@ -1096,9 +1342,6 @@ msgstr "" msgid "Environments|Environments" msgstr "" -msgid "Environments|Environments are places where code gets deployed, such as staging or production." -msgstr "" - msgid "Environments|Job" msgstr "" @@ -1141,9 +1384,33 @@ msgstr "" msgid "Error creating epic" msgstr "" +msgid "Error fetching contributors data." +msgstr "" + +msgid "Error fetching labels." +msgstr "" + +msgid "Error fetching network graph." +msgstr "" + +msgid "Error fetching refs" +msgstr "" + +msgid "Error fetching usage ping data." +msgstr "" + msgid "Error occurred when toggling the notification subscription" msgstr "" +msgid "Error saving label update." +msgstr "" + +msgid "Error updating status for all todos." +msgstr "" + +msgid "Error updating todo status." +msgstr "" + msgid "EventFilterBy|Filter by all" msgstr "" @@ -1171,6 +1438,9 @@ msgstr "" msgid "Every week (Sundays at 4:00am)" msgstr "" +msgid "Expand" +msgstr "" + msgid "Explore projects" msgstr "" @@ -1189,6 +1459,9 @@ msgstr "" msgid "February" msgstr "" +msgid "Fields on this page are now uneditable, you can configure" +msgstr "" + msgid "File name" msgstr "" @@ -1233,10 +1506,10 @@ msgstr "" msgid "GPG Keys" msgstr "" -msgid "Geo Nodes" +msgid "Generate a default set of labels" msgstr "" -msgid "GeoNodeSyncStatus|Failed" +msgid "Geo Nodes" msgstr "" msgid "GeoNodeSyncStatus|Node is failing or broken." @@ -1245,16 +1518,100 @@ msgstr "" msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage." msgstr "" -msgid "GeoNodeSyncStatus|Out of sync" +msgid "GeoNodes|Database replication lag:" +msgstr "" + +msgid "GeoNodes|Disabling a node stops the sync process. Are you sure?" +msgstr "" + +msgid "GeoNodes|Does not match the primary storage configuration" +msgstr "" + +msgid "GeoNodes|Failed" +msgstr "" + +msgid "GeoNodes|Full" +msgstr "" + +msgid "GeoNodes|GitLab version does not match the primary node version" +msgstr "" + +msgid "GeoNodes|GitLab version:" +msgstr "" + +msgid "GeoNodes|Health status:" +msgstr "" + +msgid "GeoNodes|Last event ID processed by cursor:" +msgstr "" + +msgid "GeoNodes|Last event ID seen from primary:" +msgstr "" + +msgid "GeoNodes|Loading nodes" +msgstr "" + +msgid "GeoNodes|Local Attachments:" +msgstr "" + +msgid "GeoNodes|Local LFS objects:" +msgstr "" + +msgid "GeoNodes|Local job artifacts:" +msgstr "" + +msgid "GeoNodes|New node" +msgstr "" + +msgid "GeoNodes|Out of sync" +msgstr "" + +msgid "GeoNodes|Replication slot WAL:" msgstr "" -msgid "GeoNodeSyncStatus|Synced" +msgid "GeoNodes|Replication slots:" +msgstr "" + +msgid "GeoNodes|Repositories:" +msgstr "" + +msgid "GeoNodes|Selective" +msgstr "" + +msgid "GeoNodes|Storage config:" +msgstr "" + +msgid "GeoNodes|Sync settings:" +msgstr "" + +msgid "GeoNodes|Synced" +msgstr "" + +msgid "GeoNodes|Unused slots" +msgstr "" + +msgid "GeoNodes|Used slots" +msgstr "" + +msgid "GeoNodes|Wikis:" +msgstr "" + +msgid "GeoNodes|You have configured Geo nodes using an insecure HTTP connection. We recommend the use of HTTPS." +msgstr "" + +msgid "Geo|All projects" msgstr "" msgid "Geo|File sync capacity" msgstr "" -msgid "Geo|Groups to replicate" +msgid "Geo|Groups to synchronize" +msgstr "" + +msgid "Geo|Projects in certain groups" +msgstr "" + +msgid "Geo|Projects in certain storage shards" msgstr "" msgid "Geo|Repository sync capacity" @@ -1263,12 +1620,24 @@ msgstr "" msgid "Geo|Select groups to replicate." msgstr "" +msgid "Geo|Shards to synchronize" +msgstr "" + +msgid "Git revision" +msgstr "" + msgid "Git storage health information has been reset" msgstr "" +msgid "Git version" +msgstr "" + msgid "GitLab Runner section" msgstr "" +msgid "Gitaly Servers" +msgstr "" + msgid "Go to your fork" msgstr "" @@ -1278,6 +1647,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it!" +msgstr "" + msgid "GroupSettings|Prevent sharing a project within %{group} with other groups" msgstr "" @@ -1314,7 +1686,7 @@ msgstr "" msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group." msgstr "" -msgid "GroupsTree|Are you sure you want to leave the \"${this.group.fullName}\" group?" +msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?" msgstr "" msgid "GroupsTree|Create a project in this group." @@ -1365,6 +1737,11 @@ msgstr "" msgid "HealthCheck|Unhealthy" msgstr "" +msgid "Hide value" +msgid_plural "Hide values" +msgstr[0] "" +msgstr[1] "" + msgid "History" msgstr "" @@ -1391,6 +1768,12 @@ msgid_plural "Instances" msgstr[0] "" msgstr[1] "" +msgid "Instance does not support multiple Kubernetes clusters" +msgstr "" + +msgid "Interested parties can even contribute by pushing commits if they want to." +msgstr "" + msgid "Internal - The group and any internal projects can be viewed by any logged in user." msgstr "" @@ -1418,6 +1801,9 @@ msgstr "" msgid "Issues" msgstr "" +msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable." +msgstr "" + msgid "Jan" msgstr "" @@ -1436,6 +1822,27 @@ msgstr "" msgid "June" msgstr "" +msgid "Kubernetes" +msgstr "" + +msgid "Kubernetes Cluster" +msgstr "" + +msgid "Kubernetes cluster creation time exceeds timeout; %{timeout}" +msgstr "" + +msgid "Kubernetes cluster integration was not removed." +msgstr "" + +msgid "Kubernetes cluster integration was successfully removed." +msgstr "" + +msgid "Kubernetes cluster was successfully updated." +msgstr "" + +msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page" +msgstr "" + msgid "LFSStatus|Disabled" msgstr "" @@ -1445,6 +1852,9 @@ msgstr "" msgid "Labels" msgstr "" +msgid "Labels can be applied to issues and merge requests to categorize them." +msgstr "" + msgid "Last %d day" msgid_plural "Last %d days" msgstr[0] "" @@ -1474,6 +1884,9 @@ msgstr "" msgid "LastPushEvent|at" msgstr "" +msgid "Learn more" +msgstr "" + msgid "Learn more in the" msgstr "" @@ -1492,14 +1905,18 @@ msgstr "" msgid "License" msgstr "" -msgid "Limited to showing %d event at most" -msgid_plural "Limited to showing %d events at most" -msgstr[0] "" -msgstr[1] "" +msgid "Loading the GitLab IDE..." +msgstr "" msgid "Lock" msgstr "" +msgid "Lock %{issuableDisplayName}" +msgstr "" + +msgid "Lock this %{issuableDisplayName}? Only <strong>project members</strong> will be able to comment." +msgstr "" + msgid "Locked" msgstr "" @@ -1509,12 +1926,21 @@ msgstr "" msgid "Login" msgstr "" +msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos." +msgstr "" + +msgid "Manage labels" +msgstr "" + msgid "Mar" msgstr "" msgid "March" msgstr "" +msgid "Mark done" +msgstr "" + msgid "Maximum git storage failures" msgstr "" @@ -1527,6 +1953,9 @@ msgstr "" msgid "Members" msgstr "" +msgid "Merge Request" +msgstr "" + msgid "Merge Requests" msgstr "" @@ -1536,9 +1965,30 @@ msgstr "" msgid "Merge request" msgstr "" +msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others" +msgstr "" + +msgid "Merged" +msgstr "" + msgid "Messages" msgstr "" +msgid "Milestone" +msgstr "" + +msgid "Milestones|Delete milestone" +msgstr "" + +msgid "Milestones|Delete milestone %{milestoneTitle}?" +msgstr "" + +msgid "Milestones|Failed to delete milestone %{milestoneTitle}" +msgstr "" + +msgid "Milestones|Milestone %{milestoneTitle} was not found" +msgstr "" + msgid "MissingSSHKeyWarningLink|add an SSH key" msgstr "" @@ -1548,10 +1998,16 @@ msgstr "" msgid "More information is available|here" msgstr "" +msgid "Move" +msgstr "" + +msgid "Move issue" +msgstr "" + msgid "Multiple issue boards" msgstr "" -msgid "New Cluster" +msgid "Name new label" msgstr "" msgid "New Issue" @@ -1559,6 +2015,12 @@ msgid_plural "New Issues" msgstr[0] "Nieuwe issue" msgstr[1] "Nieuwe issues" +msgid "New Kubernetes Cluster" +msgstr "" + +msgid "New Kubernetes cluster" +msgstr "" + msgid "New Pipeline Schedule" msgstr "" @@ -1583,6 +2045,9 @@ msgstr "" msgid "New issue" msgstr "" +msgid "New label" +msgstr "" + msgid "New merge request" msgstr "" @@ -1601,7 +2066,22 @@ msgstr "" msgid "New tag" msgstr "" -msgid "No container images stored for this project. Add one by following the instructions above." +msgid "No assignee" +msgstr "" + +msgid "No changes" +msgstr "" + +msgid "No connection could be made to a Gitaly Server, please check your logs!" +msgstr "" + +msgid "No due date" +msgstr "" + +msgid "No estimate or time spent" +msgstr "" + +msgid "No file chosen" msgstr "" msgid "No repository" @@ -1616,9 +2096,15 @@ msgstr "" msgid "None" msgstr "" +msgid "Not allowed to merge" +msgstr "" + msgid "Not available" msgstr "" +msgid "Not confidential" +msgstr "" + msgid "Not enough data" msgstr "" @@ -1679,6 +2165,12 @@ msgstr "" msgid "Notifications" msgstr "" +msgid "Notifications off" +msgstr "" + +msgid "Notifications on" +msgstr "" + msgid "Nov" msgstr "" @@ -1688,7 +2180,7 @@ msgstr "" msgid "Number of access attempts" msgstr "" -msgid "Number of failures before backing off" +msgid "OK" msgstr "" msgid "Oct" @@ -1703,6 +2195,9 @@ msgstr "" msgid "Only project members can comment." msgstr "" +msgid "Open" +msgstr "" + msgid "Opened" msgstr "" @@ -1736,9 +2231,6 @@ msgstr "" msgid "Password" msgstr "" -msgid "People without permission will never get a notification and won\\'t be able to comment." -msgstr "" - msgid "Pipeline" msgstr "" @@ -1781,12 +2273,6 @@ msgstr "" msgid "PipelineSchedules|Inactive" msgstr "" -msgid "PipelineSchedules|Input variable key" -msgstr "" - -msgid "PipelineSchedules|Input variable value" -msgstr "" - msgid "PipelineSchedules|Next Run" msgstr "" @@ -1796,9 +2282,6 @@ msgstr "" msgid "PipelineSchedules|Provide a short description for this pipeline" msgstr "" -msgid "PipelineSchedules|Remove variable row" -msgstr "" - msgid "PipelineSchedules|Take ownership" msgstr "" @@ -1826,6 +2309,12 @@ msgstr "" msgid "Pipelines for last year" msgstr "" +msgid "Pipelines|Build with confidence" +msgstr "" + +msgid "Pipelines|Get started with Pipelines" +msgstr "" + msgid "Pipeline|all" msgstr "" @@ -1838,12 +2327,21 @@ msgstr "" msgid "Pipeline|with stages" msgstr "" +msgid "Play" +msgstr "" + +msgid "Please <a href=%{link_to_billing} target=\"_blank\" rel=\"noopener noreferrer\">enable billing for one of your projects to be able to create a Kubernetes cluster</a>, then try again." +msgstr "" + msgid "Please solve the reCAPTCHA" msgstr "" msgid "Preferences" msgstr "" +msgid "Primary" +msgstr "" + msgid "Private - Project access must be granted explicitly to each user." msgstr "" @@ -1889,6 +2387,9 @@ msgstr "" msgid "Profiles|your account" msgstr "" +msgid "Programming languages used in this repository" +msgstr "" + msgid "Project '%{project_name}' is in the process of being deleted." msgstr "" @@ -1904,6 +2405,15 @@ msgstr "" msgid "Project access must be granted explicitly to each user." msgstr "" +msgid "Project avatar" +msgstr "" + +msgid "Project avatar in repository: %{link}" +msgstr "" + +msgid "Project cache successfully reset." +msgstr "" + msgid "Project details" msgstr "" @@ -1922,6 +2432,21 @@ msgstr "" msgid "ProjectActivityRSS|Subscribe" msgstr "" +msgid "ProjectCreationLevel|Allowed to create projects" +msgstr "" + +msgid "ProjectCreationLevel|Default project creation protection" +msgstr "" + +msgid "ProjectCreationLevel|Developers + Masters" +msgstr "" + +msgid "ProjectCreationLevel|Masters" +msgstr "" + +msgid "ProjectCreationLevel|No one" +msgstr "" + msgid "ProjectFeature|Disabled" msgstr "" @@ -1946,15 +2471,9 @@ msgstr "" msgid "ProjectSettings|Contact an admin to change this setting." msgstr "" -msgid "ProjectSettings|Immediately run a pipeline on the default branch" -msgstr "" - msgid "ProjectSettings|Only signed commits can be pushed to this repository." msgstr "" -msgid "ProjectSettings|Problem setting up the CI/CD settings JavaScript" -msgstr "" - msgid "ProjectSettings|This setting is applied on the server level and can be overridden by an admin." msgstr "" @@ -2024,6 +2543,9 @@ msgstr "" msgid "PrometheusService|View environments" msgstr "" +msgid "Protip:" +msgstr "" + msgid "Public - The group and any public projects can be viewed without any authentication." msgstr "" @@ -2039,6 +2561,9 @@ msgstr "" msgid "PushRule|Committer restriction" msgstr "" +msgid "Quick actions can be used in the issues description and comment boxes." +msgstr "" + msgid "Read more" msgstr "" @@ -2051,6 +2576,12 @@ msgstr "" msgid "RefSwitcher|Tags" msgstr "" +msgid "Reference:" +msgstr "" + +msgid "Register / Sign In" +msgstr "" + msgid "Registry" msgstr "" @@ -2075,9 +2606,18 @@ msgstr "" msgid "Remind later" msgstr "" +msgid "Remove" +msgstr "" + +msgid "Remove avatar" +msgstr "" + msgid "Remove project" msgstr "" +msgid "Repair authentication" +msgstr "" + msgid "Repository" msgstr "" @@ -2093,6 +2633,11 @@ msgstr "" msgid "Reset runners registration token" msgstr "" +msgid "Reveal value" +msgid_plural "Reveal values" +msgstr[0] "" +msgstr[1] "" + msgid "Revert this commit" msgstr "" @@ -2102,15 +2647,15 @@ msgstr "" msgid "SSH Keys" msgstr "" -msgid "Save" -msgstr "" - msgid "Save changes" msgstr "" msgid "Save pipeline schedule" msgstr "" +msgid "Save variables" +msgstr "" + msgid "Schedule a new pipeline" msgstr "" @@ -2126,37 +2671,58 @@ msgstr "" msgid "Search branches and tags" msgstr "" -msgid "Seconds before reseting failure information" +msgid "Search milestones" +msgstr "" + +msgid "Search project" +msgstr "" + +msgid "Search users" msgstr "" -msgid "Seconds to wait after a storage failure" +msgid "Seconds before reseting failure information" msgstr "" msgid "Seconds to wait for a storage access attempt" msgstr "" +msgid "Secret variables" +msgstr "" + msgid "Select Archive Format" msgstr "" msgid "Select a timezone" msgstr "" +msgid "Select assignee" +msgstr "" + +msgid "Select branch/tag" +msgstr "" + msgid "Select target branch" msgstr "" +msgid "Selective synchronization" +msgstr "" + msgid "Sep" msgstr "" msgid "September" msgstr "" +msgid "Server version" +msgstr "" + msgid "Service Templates" msgstr "" msgid "Set a password on your account to pull or push via %{protocol}." msgstr "" -msgid "Set up CI" +msgid "Set up CI/CD" msgstr "" msgid "Set up Koding" @@ -2171,6 +2737,15 @@ msgstr "" msgid "Settings" msgstr "" +msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero." +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset pipeline minutes" +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset used pipeline minutes" +msgstr "" + msgid "Show parent pages" msgstr "" @@ -2185,9 +2760,6 @@ msgstr[1] "" msgid "Sidebar|Change weight" msgstr "" -msgid "Sidebar|Edit" -msgstr "" - msgid "Sidebar|No" msgstr "" @@ -2200,18 +2772,30 @@ msgstr "" msgid "Snippets" msgstr "" +msgid "Something went wrong on our end" +msgstr "" + msgid "Something went wrong on our end." msgstr "" +msgid "Something went wrong trying to change the confidentiality of this issue" +msgstr "" + msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}" msgstr "" +msgid "Something went wrong when toggling the button" +msgstr "" + msgid "Something went wrong while fetching the projects." msgstr "" msgid "Something went wrong while fetching the registry list." msgstr "" +msgid "Something went wrong. Please try again." +msgstr "" + msgid "Sort by" msgstr "" @@ -2341,10 +2925,10 @@ msgstr "" msgid "Stopped" msgstr "" -msgid "Subgroups" +msgid "Storage" msgstr "" -msgid "Subscribe" +msgid "Subgroups" msgstr "" msgid "Switch branch/tag" @@ -2442,7 +3026,10 @@ msgstr "" msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project." msgstr "" -msgid "The circuitbreaker backoff threshold should be lower than the failure count threshold" +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project" +msgstr "" + +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project." msgstr "" msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request." @@ -2457,10 +3044,10 @@ msgstr "" msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage." msgstr "" -msgid "The number of attempts GitLab will make to access a storage." +msgid "The maximum file size allowed is 200KB." msgstr "" -msgid "The number of failures after which GitLab will start temporarily disabling access to a storage shard on a host" +msgid "The number of attempts GitLab will make to access a storage." msgstr "" msgid "The number of failures of after which GitLab will completely prevent access to the storage. The number of failures can be reset in the admin interface: %{link_to_health_page} or using the %{api_documentation_link}." @@ -2469,9 +3056,6 @@ msgstr "" msgid "The phase of the development lifecycle." msgstr "" -msgid "The pipelines schedule runs pipelines in the future, repeatedly, for specific branches or tags. Those scheduled pipelines will inherit limited project access based on their associated user." -msgstr "" - msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit." msgstr "" @@ -2502,19 +3086,46 @@ msgstr "" msgid "The time in seconds GitLab will try to access storage. After this time a timeout error will be raised." msgstr "" +msgid "The time in seconds between storage checks. When a previous check did complete yet, GitLab will skip a check." +msgstr "" + msgid "The time taken by each data entry gathered by that stage." msgstr "" msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6." msgstr "" +msgid "There are no issues to show" +msgstr "" + +msgid "There are no merge requests to show" +msgstr "" + msgid "There are problems accessing Git storage: " msgstr "" +msgid "There was an error loading users activity calendar." +msgstr "" + +msgid "There was an error saving your notification settings." +msgstr "" + +msgid "There was an error subscribing to this label." +msgstr "" + +msgid "There was an error when reseting email token." +msgstr "" + +msgid "There was an error when subscribing to this label." +msgstr "" + +msgid "There was an error when unsubscribing from this label." +msgstr "" + msgid "This board\\'s scope is reduced" msgstr "" -msgid "This branch has changed since you started editing. Would you like to create a new branch?" +msgid "This directory" msgstr "" msgid "This is a confidential issue." @@ -2523,18 +3134,45 @@ msgstr "" msgid "This is the author's first Merge Request to this project." msgstr "" +msgid "This issue is confidential" +msgstr "" + msgid "This issue is confidential and locked." msgstr "" msgid "This issue is locked." msgstr "" +msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments" +msgstr "" + +msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered" +msgstr "" + +msgid "This job has not been triggered yet" +msgstr "" + +msgid "This job has not started yet" +msgstr "" + +msgid "This job is in pending state and is waiting to be picked by a runner" +msgstr "" + +msgid "This job requires a manual action" +msgstr "" + msgid "This means you can not push code until you create an empty repository or import existing one." msgstr "" msgid "This merge request is locked." msgstr "" +msgid "This project" +msgstr "" + +msgid "This repository" +msgstr "" + msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here." msgstr "" @@ -2547,9 +3185,21 @@ msgstr "" msgid "Time between merge request creation and merge/close" msgstr "" +msgid "Time tracking" +msgstr "" + msgid "Time until first merge request" msgstr "" +msgid "TimeTrackingEstimated|Est" +msgstr "" + +msgid "TimeTracking|Estimated:" +msgstr "" + +msgid "TimeTracking|Spent" +msgstr "" + msgid "Timeago|%s days ago" msgstr "" @@ -2689,6 +3339,18 @@ msgstr "s" msgid "Title" msgstr "" +msgid "Todo" +msgstr "" + +msgid "Toggle sidebar" +msgstr "" + +msgid "ToggleButton|Toggle Status: OFF" +msgstr "" + +msgid "ToggleButton|Toggle Status: ON" +msgstr "" + msgid "Total Time" msgstr "" @@ -2704,19 +3366,40 @@ msgstr "" msgid "Track groups of issues that share a theme, across projects and milestones" msgstr "" +msgid "Total: %{total}" +msgstr "" + +msgid "Track time with quick actions" +msgstr "" + +msgid "Trigger this manual action" +msgstr "" + msgid "Turn on Service Desk" msgstr "" +msgid "Type %{value} to confirm:" +msgstr "" + +msgid "Unable to reset project cache." +msgstr "" + +msgid "Unknown" +msgstr "" + msgid "Unlock" msgstr "" +msgid "Unlock this %{issuableDisplayName}? <strong>Everyone</strong> will be able to comment." +msgstr "" + msgid "Unlocked" msgstr "" msgid "Unstar" msgstr "" -msgid "Unsubscribe" +msgid "Up to date" msgstr "" msgid "Upgrade your plan to activate Advanced Global Search." @@ -2740,6 +3423,9 @@ msgstr "" msgid "Upload file" msgstr "" +msgid "Upload new avatar" +msgstr "" + msgid "UploadLink|click to upload" msgstr "" @@ -2752,9 +3438,15 @@ msgstr "" msgid "Use your global notification setting" msgstr "" +msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want." +msgstr "" + msgid "View file @ " msgstr "" +msgid "View labels" +msgstr "" + msgid "View open merge request" msgstr "" @@ -2776,6 +3468,9 @@ msgstr "" msgid "Want to see the data? Please ask an administrator for access." msgstr "" +msgid "We could not verify that one of your projects on GCP has billing enabled. Please try again." +msgstr "" + msgid "We don't have enough data to show this stage." msgstr "" @@ -2788,9 +3483,6 @@ msgstr "" msgid "Weight" msgstr "" -msgid "When access to a storage fails. GitLab will prevent access to the storage for the time specified here. This allows the filesystem to recover. Repositories on failing shards are temporarly unavailable" -msgstr "" - msgid "Wiki" msgstr "" @@ -2809,6 +3501,12 @@ msgstr "" msgid "WikiClone|Start Gollum and edit locally" msgstr "" +msgid "WikiEditPageTip|Tip: You can move this page by adding the path to the beginning of the title." +msgstr "" + +msgid "WikiEdit|There is already a page with the same title in that path." +msgstr "" + msgid "WikiEmptyPageError|You are not allowed to create wiki pages" msgstr "" @@ -2911,9 +3609,21 @@ msgstr "" msgid "You are going to transfer %{project_name_with_namespace} to another owner. Are you ABSOLUTELY sure?" msgstr "" +msgid "You can also star a label to make it a priority label." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + msgid "You can only add files when you are on a branch" msgstr "" +msgid "You can only edit files when you are on a branch" +msgstr "" + msgid "You cannot write to a read-only secondary GitLab Geo instance. Please use %{link_to_primary_node} instead." msgstr "" @@ -2953,6 +3663,12 @@ msgstr "" msgid "You won't be able to pull or push project code via SSH until you add an SSH key to your profile" msgstr "" +msgid "You'll need to use different branch names to get a valid comparison." +msgstr "" + +msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure" +msgstr "" + msgid "Your comment will not be visible to the public." msgstr "" @@ -2965,26 +3681,220 @@ msgstr "" msgid "Your projects" msgstr "" +msgid "assign yourself" +msgstr "" + msgid "branch name" msgstr "" msgid "by" msgstr "" +msgid "ciReport|Code quality" +msgstr "" + +msgid "ciReport|DAST detected no alerts by analyzing the review app" +msgstr "" + +msgid "ciReport|Failed to load ${type} report" +msgstr "" + +msgid "ciReport|Fixed:" +msgstr "" + +msgid "ciReport|Instances" +msgstr "" + +msgid "ciReport|Learn more about whitelisting" +msgstr "" + +msgid "ciReport|Loading ${type} report" +msgstr "" + +msgid "ciReport|No changes to code quality" +msgstr "" + +msgid "ciReport|No changes to performance metrics" +msgstr "" + +msgid "ciReport|Performance metrics" +msgstr "" + +msgid "ciReport|SAST" +msgstr "" + +msgid "ciReport|SAST detected no security vulnerabilities" +msgstr "" + +msgid "ciReport|SAST:container no vulnerabilities were found" +msgstr "" + +msgid "ciReport|Show complete code vulnerabilities report" +msgstr "" + +msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}" +msgstr "" + msgid "commit" msgstr "" +msgid "confidentiality|You are going to turn off the confidentiality. This means <strong>everyone</strong> will be able to see and leave a comment on this issue." +msgstr "" + +msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with <strong>at least Reporter access</strong> are able to see and leave comments on the issue." +msgstr "" + msgid "day" msgid_plural "days" msgstr[0] "" msgstr[1] "" +msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command." +msgstr "" + +msgid "merge request" +msgid_plural "merge requests" +msgstr[0] "" +msgstr[1] "" + +msgid "mrWidget|Cancel automatic merge" +msgstr "" + +msgid "mrWidget|Check out branch" +msgstr "" + +msgid "mrWidget|Checking ability to merge automatically" +msgstr "" + +msgid "mrWidget|Cherry-pick" +msgstr "" + +msgid "mrWidget|Cherry-pick this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Closed" +msgstr "" + +msgid "mrWidget|Closed by" +msgstr "" + +msgid "mrWidget|Closes" +msgstr "" + +msgid "mrWidget|Did not close" +msgstr "" + +msgid "mrWidget|Email patches" +msgstr "" + +msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|Mentions" +msgstr "" + +msgid "mrWidget|Merge" +msgstr "" + +msgid "mrWidget|Merge failed." +msgstr "" + +msgid "mrWidget|Merge locally" +msgstr "" + +msgid "mrWidget|Merged by" +msgstr "" + +msgid "mrWidget|Plain diff" +msgstr "" + +msgid "mrWidget|Refresh" +msgstr "" + +msgid "mrWidget|Refresh now" +msgstr "" + +msgid "mrWidget|Refreshing now" +msgstr "" + +msgid "mrWidget|Remove Source Branch" +msgstr "" + +msgid "mrWidget|Remove source branch" +msgstr "" + +msgid "mrWidget|Request to merge" +msgstr "" + +msgid "mrWidget|Resolve conflicts" +msgstr "" + +msgid "mrWidget|Revert" +msgstr "" + +msgid "mrWidget|Revert this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Set by" +msgstr "" + +msgid "mrWidget|The changes were merged into" +msgstr "" + +msgid "mrWidget|The changes were not merged into" +msgstr "" + +msgid "mrWidget|The changes will be merged into" +msgstr "" + +msgid "mrWidget|The source branch has been removed" +msgstr "" + +msgid "mrWidget|The source branch is being removed" +msgstr "" + +msgid "mrWidget|The source branch will be removed" +msgstr "" + +msgid "mrWidget|The source branch will not be removed" +msgstr "" + +msgid "mrWidget|There are merge conflicts" +msgstr "" + +msgid "mrWidget|This merge request failed to be merged automatically" +msgstr "" + +msgid "mrWidget|This merge request is in the process of being merged" +msgstr "" + +msgid "mrWidget|This project is archived, write access has been disabled" +msgstr "" + +msgid "mrWidget|You can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|You can remove source branch now" +msgstr "" + +msgid "mrWidget|command line" +msgstr "" + +msgid "mrWidget|into" +msgstr "" + +msgid "mrWidget|to be merged automatically when the pipeline succeeds" +msgstr "" + msgid "new merge request" msgstr "" msgid "notification emails" msgstr "" +msgid "or" +msgstr "" + msgid "parent" msgid_plural "parents" msgstr[0] "" @@ -2996,12 +3906,21 @@ msgstr "" msgid "personal access token" msgstr "" +msgid "remove due date" +msgstr "" + msgid "source" msgstr "" +msgid "spendCommand|%{slash_command} will update the sum of the time spent." +msgstr "" + msgid "to help your contributors communicate effectively!" msgstr "" msgid "username" msgstr "" +msgid "uses Kubernetes clusters to deploy your code!" +msgstr "" + diff --git a/locale/pl_PL/gitlab.po b/locale/pl_PL/gitlab.po index a9059b0a73b..9c5455eac67 100644 --- a/locale/pl_PL/gitlab.po +++ b/locale/pl_PL/gitlab.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: gitlab-ee\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-12-12 18:31+0000\n" -"PO-Revision-Date: 2018-01-05 04:41-0500\n" +"POT-Creation-Date: 2018-02-07 11:38-0600\n" +"PO-Revision-Date: 2018-02-12 04:01-0500\n" "Last-Translator: gitlab <mbartlett+crowdin@gitlab.com>\n" "Language-Team: Polish\n" "Language: pl_PL\n" @@ -16,25 +16,46 @@ msgstr "" "X-Crowdin-Language: pl\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" +msgid " and" +msgstr "" + msgid "%d commit" msgid_plural "%d commits" msgstr[0] "" msgstr[1] "" msgstr[2] "" +msgid "%d commit behind" +msgid_plural "%d commits behind" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "%d issue" +msgid_plural "%d issues" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + msgid "%d layer" msgid_plural "%d layers" msgstr[0] "" msgstr[1] "" msgstr[2] "" +msgid "%d merge request" +msgid_plural "%d merge requests" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + msgid "%s additional commit has been omitted to prevent performance issues." msgid_plural "%s additional commits have been omitted to prevent performance issues." msgstr[0] "" msgstr[1] "" msgstr[2] "" -msgid "%{commit_author_link} committed %{commit_timeago}" +msgid "%{commit_author_link} authored %{commit_timeago}" msgstr "" msgid "%{count} participant" @@ -49,9 +70,6 @@ msgstr "" msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt." msgstr "" -msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will block access for %{number_of_seconds} seconds." -msgstr "" - msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will not retry automatically. Reset storage information when the problem is resolved." msgstr "" @@ -127,24 +145,81 @@ msgstr "" msgid "Add new directory" msgstr "" +msgid "Add todo" +msgstr "" + +msgid "AdminArea|Stop all jobs" +msgstr "" + +msgid "AdminArea|Stop all jobs?" +msgstr "" + +msgid "AdminArea|Stop jobs" +msgstr "" + +msgid "AdminArea|Stopping jobs failed" +msgstr "" + +msgid "AdminArea|You’re about to stop all jobs. This will halt all current jobs that are running." +msgstr "" + msgid "AdminHealthPageLink|health page" msgstr "" +msgid "Advanced" +msgstr "" + msgid "Advanced settings" msgstr "" msgid "All" msgstr "" +msgid "All changes are committed" +msgstr "" + +msgid "Allows you to add and manage Kubernetes clusters." +msgstr "" + +msgid "An error occurred previewing the blob" +msgstr "" + msgid "An error occurred when toggling the notification subscription" msgstr "" msgid "An error occurred when updating the issue weight" msgstr "" +msgid "An error occurred while dismissing the feature highlight. Refresh the page and try dismissing again." +msgstr "" + +msgid "An error occurred while fetching markdown preview" +msgstr "" + msgid "An error occurred while fetching sidebar data" msgstr "" +msgid "An error occurred while getting projects" +msgstr "" + +msgid "An error occurred while loading filenames" +msgstr "" + +msgid "An error occurred while rendering KaTeX" +msgstr "" + +msgid "An error occurred while rendering preview broadcast message" +msgstr "" + +msgid "An error occurred while retrieving calendar activity" +msgstr "" + +msgid "An error occurred while retrieving diff" +msgstr "" + +msgid "An error occurred while validating username" +msgstr "" + msgid "An error occurred. Please try again." msgstr "" @@ -169,9 +244,6 @@ msgstr "" msgid "Are you sure you want to discard your changes?" msgstr "" -msgid "Are you sure you want to leave this group?" -msgstr "" - msgid "Are you sure you want to reset registration token?" msgstr "" @@ -184,6 +256,21 @@ msgstr "" msgid "Artifacts" msgstr "" +msgid "Assign custom color like #FF0000" +msgstr "" + +msgid "Assign labels" +msgstr "" + +msgid "Assign milestone" +msgstr "" + +msgid "Assign to" +msgstr "" + +msgid "Assignee" +msgstr "" + msgid "Attach a file by drag & drop or %{upload_link}" msgstr "" @@ -199,13 +286,16 @@ msgstr "" msgid "Author" msgstr "" -msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly." +msgid "Authors: %{authors}" msgstr "" -msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly." +msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly." msgstr "" -msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly." +msgid "Auto Review Apps and Auto Deploy need a domain name and a %{kubernetes} to work correctly." +msgstr "" + +msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly." msgstr "" msgid "AutoDevOps|Auto DevOps (Beta)" @@ -229,6 +319,12 @@ msgstr "" msgid "Available" msgstr "" +msgid "Avatar will be removed. Are you sure?" +msgstr "" + +msgid "Average per day: %{average}" +msgstr "" + msgid "Billing" msgstr "" @@ -283,6 +379,9 @@ msgstr "" msgid "BillingPlans|per user" msgstr "" +msgid "Begin with the selected commit" +msgstr "" + msgid "Branch" msgid_plural "Branches" msgstr[0] "" @@ -412,7 +511,7 @@ msgstr "" msgid "CI / CD" msgstr "" -msgid "CI configuration" +msgid "CI/CD configuration" msgstr "" msgid "CICD|Jobs" @@ -424,6 +523,9 @@ msgstr "" msgid "Cancel edit" msgstr "" +msgid "Cannot modify managed Kubernetes cluster" +msgstr "" + msgid "Change Weight" msgstr "" @@ -439,15 +541,24 @@ msgstr "" msgid "ChangeTypeAction|Revert" msgstr "" +msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes." +msgstr "" + msgid "Changelog" msgstr "" +msgid "Changes are shown as if the <b>source</b> revision was being merged into the <b>target</b> revision." +msgstr "" + msgid "Charts" msgstr "" msgid "Chat" msgstr "" +msgid "Check interval" +msgstr "" + msgid "Checking %{text} availability…" msgstr "" @@ -460,7 +571,19 @@ msgstr "" msgid "Cherry-pick this merge request" msgstr "" -msgid "Choose which groups you wish to replicate to this secondary node. Leave blank to replicate all." +msgid "Choose File ..." +msgstr "" + +msgid "Choose a branch/tag (e.g. %{master}) or enter a commit (e.g. %{sha}) to see what's changed or to create a merge request." +msgstr "" + +msgid "Choose file..." +msgstr "" + +msgid "Choose which groups you wish to synchronize to this secondary node." +msgstr "" + +msgid "Choose which shards you wish to synchronize to this secondary node." msgstr "" msgid "CiStatusLabel|canceled" @@ -517,79 +640,91 @@ msgstr "" msgid "CiStatus|running" msgstr "" -msgid "CircuitBreakerApiLink|circuitbreaker api" +msgid "CiVariables|Input variable key" msgstr "" -msgid "Clone repository" +msgid "CiVariables|Input variable value" msgstr "" -msgid "Close" +msgid "CiVariables|Remove variable row" msgstr "" -msgid "Cluster" +msgid "CiVariable|* (All environments)" msgstr "" -msgid "ClusterIntegration|%{appList} was successfully installed on your cluster" +msgid "CiVariable|All environments" msgstr "" -msgid "ClusterIntegration|%{boldNotice} This will add some extra resources like a load balancer, which incur additional costs. See %{pricingLink}" +msgid "CiVariable|Create wildcard" msgstr "" -msgid "ClusterIntegration|API URL" +msgid "CiVariable|Error occured while saving variables" msgstr "" -msgid "ClusterIntegration|Active" +msgid "CiVariable|New environment" msgstr "" -msgid "ClusterIntegration|Add an existing cluster" +msgid "CiVariable|Protected" msgstr "" -msgid "ClusterIntegration|Add cluster" +msgid "CiVariable|Search environments" msgstr "" -msgid "ClusterIntegration|All" +msgid "CiVariable|Toggle protected" msgstr "" -msgid "ClusterIntegration|Applications" +msgid "CiVariable|Validation failed" msgstr "" -msgid "ClusterIntegration|CA Certificate" +msgid "CircuitBreakerApiLink|circuitbreaker api" msgstr "" -msgid "ClusterIntegration|Certificate Authority bundle (PEM format)" +msgid "Click to expand text" msgstr "" -msgid "ClusterIntegration|Choose how to set up cluster integration" +msgid "Clone repository" msgstr "" -msgid "ClusterIntegration|Cluster" +msgid "Close" msgstr "" -msgid "ClusterIntegration|Cluster details" +msgid "Closed" msgstr "" -msgid "ClusterIntegration|Cluster integration" +msgid "ClusterIntegration|%{appList} was successfully installed on your Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Cluster integration is disabled for this project." +msgid "ClusterIntegration|API URL" msgstr "" -msgid "ClusterIntegration|Cluster integration is enabled for this project." +msgid "ClusterIntegration|Add Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Cluster integration is enabled for this project. Disabling this integration will not affect your cluster, it will only temporarily turn off GitLab's connection to it." +msgid "ClusterIntegration|Add an existing Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Cluster is being created on Google Kubernetes Engine..." +msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration" +msgstr "" + +msgid "ClusterIntegration|Applications" +msgstr "" + +msgid "ClusterIntegration|Are you sure you want to remove this Kubernetes cluster's integration? This will not delete your actual Kubernetes cluster." +msgstr "" + +msgid "ClusterIntegration|CA Certificate" +msgstr "" + +msgid "ClusterIntegration|Certificate Authority bundle (PEM format)" msgstr "" -msgid "ClusterIntegration|Cluster name" +msgid "ClusterIntegration|Choose how to set up Kubernetes cluster integration" msgstr "" -msgid "ClusterIntegration|Cluster was successfully created on Google Kubernetes Engine. Refresh the page to see cluster's details" +msgid "ClusterIntegration|Choose which of your project's environments will use this Kubernetes cluster." msgstr "" -msgid "ClusterIntegration|Clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" +msgid "ClusterIntegration|Control how your Kubernetes cluster integrates with GitLab" msgstr "" msgid "ClusterIntegration|Copy API URL" @@ -598,37 +733,34 @@ msgstr "" msgid "ClusterIntegration|Copy CA Certificate" msgstr "" -msgid "ClusterIntegration|Copy Token" +msgid "ClusterIntegration|Copy Kubernetes cluster name" msgstr "" -msgid "ClusterIntegration|Copy cluster name" +msgid "ClusterIntegration|Copy Token" msgstr "" -msgid "ClusterIntegration|Create a new cluster on Google Engine right from GitLab" +msgid "ClusterIntegration|Create Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Create cluster" +msgid "ClusterIntegration|Create Kubernetes cluster on Google Kubernetes Engine" msgstr "" -msgid "ClusterIntegration|Create cluster on Google Kubernetes Engine" +msgid "ClusterIntegration|Create a new Kubernetes cluster on Google Kubernetes Engine right from GitLab" msgstr "" msgid "ClusterIntegration|Create on GKE" msgstr "" -msgid "ClusterIntegration|Enable cluster integration" -msgstr "" - msgid "ClusterIntegration|Enter the details for an existing Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Enter the details for your cluster" +msgid "ClusterIntegration|Enter the details for your Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Environment pattern" +msgid "ClusterIntegration|Environment scope" msgstr "" -msgid "ClusterIntegration|GKE pricing" +msgid "ClusterIntegration|GitLab Integration" msgstr "" msgid "ClusterIntegration|GitLab Runner" @@ -646,64 +778,94 @@ msgstr "" msgid "ClusterIntegration|Helm Tiller" msgstr "" -msgid "ClusterIntegration|Inactive" -msgstr "" - msgid "ClusterIntegration|Ingress" msgstr "" msgid "ClusterIntegration|Install" msgstr "" -msgid "ClusterIntegration|Install applications on your cluster. Read more about %{helpLink}" -msgstr "" - msgid "ClusterIntegration|Installed" msgstr "" msgid "ClusterIntegration|Installing" msgstr "" -msgid "ClusterIntegration|Integrate cluster automation" +msgid "ClusterIntegration|Integrate Kubernetes cluster automation" +msgstr "" + +msgid "ClusterIntegration|Integration status" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster details" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is disabled for this project." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project. Disabling this integration will not affect your Kubernetes cluster, it will only temporarily turn off GitLab's connection to it." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster is being created on Google Kubernetes Engine..." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster name" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters can be used to deploy applications and to provide Review Apps for this project" msgstr "" msgid "ClusterIntegration|Learn more about %{link_to_documentation}" msgstr "" -msgid "ClusterIntegration|Learn more about Clusters" +msgid "ClusterIntegration|Learn more about Kubernetes" msgstr "" -msgid "ClusterIntegration|Machine type" +msgid "ClusterIntegration|Learn more about environments" msgstr "" -msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create clusters" +msgid "ClusterIntegration|Machine type" msgstr "" -msgid "ClusterIntegration|Manage cluster integration on your GitLab project" +msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create Kubernetes clusters" msgstr "" -msgid "ClusterIntegration|Manage your cluster by visiting %{link_gke}" +msgid "ClusterIntegration|Manage" msgstr "" -msgid "ClusterIntegration|Multiple clusters are available in GitLab Entreprise Edition Premium and Ultimate" +msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}" msgstr "" -msgid "ClusterIntegration|Note:" +msgid "ClusterIntegration|More information" msgstr "" -msgid "ClusterIntegration|Number of nodes" +msgid "ClusterIntegration|Multiple Kubernetes clusters are available in GitLab Enterprise Edition Premium and Ultimate" msgstr "" -msgid "ClusterIntegration|Please enter access information for your cluster. If you need help, you can read our %{link_to_help_page} on clusters" +msgid "ClusterIntegration|Note:" msgstr "" -msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:" +msgid "ClusterIntegration|Number of nodes" msgstr "" -msgid "ClusterIntegration|Problem setting up the cluster" +msgid "ClusterIntegration|Please enter access information for your Kubernetes cluster. If you need help, you can read our %{link_to_help_page} on Kubernetes" msgstr "" -msgid "ClusterIntegration|Problem setting up the clusters list" +msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:" msgstr "" msgid "ClusterIntegration|Project ID" @@ -715,16 +877,19 @@ msgstr "" msgid "ClusterIntegration|Project namespace (optional, unique)" msgstr "" -msgid "ClusterIntegration|Read our %{link_to_help_page} on cluster integration." +msgid "ClusterIntegration|Prometheus" msgstr "" -msgid "ClusterIntegration|Remove cluster integration" +msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration." +msgstr "" + +msgid "ClusterIntegration|Remove Kubernetes cluster integration" msgstr "" msgid "ClusterIntegration|Remove integration" msgstr "" -msgid "ClusterIntegration|Removing cluster integration will remove the cluster configuration you have added to this project. It will not delete your cluster on Google Kubernetes Engine." +msgid "ClusterIntegration|Remove this Kubernetes cluster's configuration from this project. This will not delete your actual Kubernetes cluster." msgstr "" msgid "ClusterIntegration|Request to begin installing failed" @@ -733,7 +898,7 @@ msgstr "" msgid "ClusterIntegration|Save changes" msgstr "" -msgid "ClusterIntegration|See and edit the details for your cluster" +msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster" msgstr "" msgid "ClusterIntegration|See machine types" @@ -754,25 +919,25 @@ msgstr "" msgid "ClusterIntegration|Something went wrong on our end." msgstr "" -msgid "ClusterIntegration|Something went wrong while creating your cluster on Google Kubernetes Engine" +msgid "ClusterIntegration|Something went wrong while creating your Kubernetes cluster on Google Kubernetes Engine" msgstr "" msgid "ClusterIntegration|Something went wrong while installing %{title}" msgstr "" -msgid "ClusterIntegration|There are no clusters to show" +msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below" msgstr "" -msgid "ClusterIntegration|This account must have permissions to create a cluster in the %{link_to_container_project} specified below" +msgid "ClusterIntegration|Toggle Kubernetes Cluster" msgstr "" -msgid "ClusterIntegration|Toggle Cluster" +msgid "ClusterIntegration|Toggle Kubernetes cluster" msgstr "" msgid "ClusterIntegration|Token" msgstr "" -msgid "ClusterIntegration|With a cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." +msgid "ClusterIntegration|With a Kubernetes cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." msgstr "" msgid "ClusterIntegration|Your account must have %{link_to_kubernetes_engine}" @@ -784,7 +949,7 @@ msgstr "" msgid "ClusterIntegration|access to Google Kubernetes Engine" msgstr "" -msgid "ClusterIntegration|cluster" +msgid "ClusterIntegration|check the pricing here" msgstr "" msgid "ClusterIntegration|documentation" @@ -802,6 +967,9 @@ msgstr "" msgid "ClusterIntegration|properly configured" msgstr "" +msgid "Collapse" +msgstr "" + msgid "Comments" msgstr "" @@ -820,6 +988,9 @@ msgstr "" msgid "Commit message" msgstr "" +msgid "Commit statistics for %{ref} %{start_time} - %{end_time}" +msgstr "" + msgid "CommitBoxTitle|Commit" msgstr "" @@ -832,15 +1003,57 @@ msgstr "" msgid "Commits feed" msgstr "" +msgid "Commits per day hour (UTC)" +msgstr "" + +msgid "Commits per day of month" +msgstr "" + +msgid "Commits per weekday" +msgstr "" + +msgid "Commits|An error occurred while fetching merge requests data." +msgstr "" + +msgid "Commits|Commit: %{commitText}" +msgstr "" + msgid "Commits|History" msgstr "" +msgid "Commits|No related merge requests found" +msgstr "" + msgid "Committed by" msgstr "" msgid "Compare" msgstr "" +msgid "Compare Git revisions" +msgstr "" + +msgid "Compare Revisions" +msgstr "" + +msgid "CompareBranches|%{source_branch} and %{target_branch} are the same." +msgstr "" + +msgid "CompareBranches|Compare" +msgstr "" + +msgid "CompareBranches|Source" +msgstr "" + +msgid "CompareBranches|Target" +msgstr "" + +msgid "CompareBranches|There isn't anything to compare." +msgstr "" + +msgid "Confidentiality" +msgstr "" + msgid "Container Registry" msgstr "" @@ -892,6 +1105,9 @@ msgstr "" msgid "Contributors" msgstr "" +msgid "ContributorsPage|%{startDate} – %{endDate}" +msgstr "" + msgid "ContributorsPage|Building repository graph." msgstr "" @@ -913,9 +1129,18 @@ msgstr "" msgid "Copy URL to clipboard" msgstr "" +msgid "Copy branch name to clipboard" +msgstr "" + msgid "Copy commit SHA to clipboard" msgstr "" +msgid "Copy reference to clipboard" +msgstr "" + +msgid "Create" +msgstr "" + msgid "Create New Directory" msgstr "" @@ -934,6 +1159,9 @@ msgstr "" msgid "Create file" msgstr "" +msgid "Create lists from labels. Issues with that label appear in that list." +msgstr "" + msgid "Create merge request" msgstr "" @@ -946,6 +1174,9 @@ msgstr "" msgid "Create new file" msgstr "" +msgid "Create new label" +msgstr "" + msgid "Create new..." msgstr "" @@ -967,6 +1198,9 @@ msgstr "" msgid "Cron syntax" msgstr "" +msgid "Current node" +msgstr "" + msgid "Custom notification events" msgstr "" @@ -976,9 +1210,6 @@ msgstr "" msgid "Cycle Analytics" msgstr "" -msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project." -msgstr "" - msgid "CycleAnalyticsStage|Code" msgstr "" @@ -1036,12 +1267,21 @@ msgstr "" msgid "Details" msgstr "" +msgid "Diffs|No file name available" +msgstr "" + msgid "Directory name" msgstr "" +msgid "Disable" +msgstr "" + msgid "Discard changes" msgstr "" +msgid "Discover GitLab Geo." +msgstr "" + msgid "Dismiss Cycle Analytics introduction box" msgstr "" @@ -1078,15 +1318,24 @@ msgstr "" msgid "DownloadSource|Download" msgstr "" +msgid "Due date" +msgstr "" + msgid "Edit" msgstr "" msgid "Edit Pipeline Schedule %{id}" msgstr "" +msgid "Edit files in the editor and commit changes here" +msgstr "" + msgid "Emails" msgstr "" +msgid "Enable" +msgstr "" + msgid "Environments|An error occurred while fetching the environments." msgstr "" @@ -1105,9 +1354,6 @@ msgstr "" msgid "Environments|Environments" msgstr "" -msgid "Environments|Environments are places where code gets deployed, such as staging or production." -msgstr "" - msgid "Environments|Job" msgstr "" @@ -1150,9 +1396,33 @@ msgstr "" msgid "Error creating epic" msgstr "" +msgid "Error fetching contributors data." +msgstr "" + +msgid "Error fetching labels." +msgstr "" + +msgid "Error fetching network graph." +msgstr "" + +msgid "Error fetching refs" +msgstr "" + +msgid "Error fetching usage ping data." +msgstr "" + msgid "Error occurred when toggling the notification subscription" msgstr "" +msgid "Error saving label update." +msgstr "" + +msgid "Error updating status for all todos." +msgstr "" + +msgid "Error updating todo status." +msgstr "" + msgid "EventFilterBy|Filter by all" msgstr "" @@ -1180,6 +1450,9 @@ msgstr "" msgid "Every week (Sundays at 4:00am)" msgstr "" +msgid "Expand" +msgstr "" + msgid "Explore projects" msgstr "" @@ -1198,6 +1471,9 @@ msgstr "" msgid "February" msgstr "" +msgid "Fields on this page are now uneditable, you can configure" +msgstr "" + msgid "File name" msgstr "" @@ -1243,10 +1519,10 @@ msgstr "" msgid "GPG Keys" msgstr "" -msgid "Geo Nodes" +msgid "Generate a default set of labels" msgstr "" -msgid "GeoNodeSyncStatus|Failed" +msgid "Geo Nodes" msgstr "" msgid "GeoNodeSyncStatus|Node is failing or broken." @@ -1255,16 +1531,100 @@ msgstr "" msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage." msgstr "" -msgid "GeoNodeSyncStatus|Out of sync" +msgid "GeoNodes|Database replication lag:" +msgstr "" + +msgid "GeoNodes|Disabling a node stops the sync process. Are you sure?" +msgstr "" + +msgid "GeoNodes|Does not match the primary storage configuration" +msgstr "" + +msgid "GeoNodes|Failed" +msgstr "" + +msgid "GeoNodes|Full" +msgstr "" + +msgid "GeoNodes|GitLab version does not match the primary node version" +msgstr "" + +msgid "GeoNodes|GitLab version:" +msgstr "" + +msgid "GeoNodes|Health status:" +msgstr "" + +msgid "GeoNodes|Last event ID processed by cursor:" +msgstr "" + +msgid "GeoNodes|Last event ID seen from primary:" +msgstr "" + +msgid "GeoNodes|Loading nodes" +msgstr "" + +msgid "GeoNodes|Local Attachments:" +msgstr "" + +msgid "GeoNodes|Local LFS objects:" +msgstr "" + +msgid "GeoNodes|Local job artifacts:" +msgstr "" + +msgid "GeoNodes|New node" +msgstr "" + +msgid "GeoNodes|Out of sync" +msgstr "" + +msgid "GeoNodes|Replication slot WAL:" msgstr "" -msgid "GeoNodeSyncStatus|Synced" +msgid "GeoNodes|Replication slots:" +msgstr "" + +msgid "GeoNodes|Repositories:" +msgstr "" + +msgid "GeoNodes|Selective" +msgstr "" + +msgid "GeoNodes|Storage config:" +msgstr "" + +msgid "GeoNodes|Sync settings:" +msgstr "" + +msgid "GeoNodes|Synced" +msgstr "" + +msgid "GeoNodes|Unused slots" +msgstr "" + +msgid "GeoNodes|Used slots" +msgstr "" + +msgid "GeoNodes|Wikis:" +msgstr "" + +msgid "GeoNodes|You have configured Geo nodes using an insecure HTTP connection. We recommend the use of HTTPS." +msgstr "" + +msgid "Geo|All projects" msgstr "" msgid "Geo|File sync capacity" msgstr "" -msgid "Geo|Groups to replicate" +msgid "Geo|Groups to synchronize" +msgstr "" + +msgid "Geo|Projects in certain groups" +msgstr "" + +msgid "Geo|Projects in certain storage shards" msgstr "" msgid "Geo|Repository sync capacity" @@ -1273,12 +1633,24 @@ msgstr "" msgid "Geo|Select groups to replicate." msgstr "" +msgid "Geo|Shards to synchronize" +msgstr "" + +msgid "Git revision" +msgstr "" + msgid "Git storage health information has been reset" msgstr "" +msgid "Git version" +msgstr "" + msgid "GitLab Runner section" msgstr "" +msgid "Gitaly Servers" +msgstr "" + msgid "Go to your fork" msgstr "" @@ -1288,6 +1660,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it!" +msgstr "" + msgid "GroupSettings|Prevent sharing a project within %{group} with other groups" msgstr "" @@ -1324,7 +1699,7 @@ msgstr "" msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group." msgstr "" -msgid "GroupsTree|Are you sure you want to leave the \"${this.group.fullName}\" group?" +msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?" msgstr "" msgid "GroupsTree|Create a project in this group." @@ -1375,6 +1750,12 @@ msgstr "" msgid "HealthCheck|Unhealthy" msgstr "" +msgid "Hide value" +msgid_plural "Hide values" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + msgid "History" msgstr "" @@ -1402,6 +1783,12 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" +msgid "Instance does not support multiple Kubernetes clusters" +msgstr "" + +msgid "Interested parties can even contribute by pushing commits if they want to." +msgstr "" + msgid "Internal - The group and any internal projects can be viewed by any logged in user." msgstr "" @@ -1429,6 +1816,9 @@ msgstr "" msgid "Issues" msgstr "" +msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable." +msgstr "" + msgid "Jan" msgstr "" @@ -1447,6 +1837,27 @@ msgstr "" msgid "June" msgstr "" +msgid "Kubernetes" +msgstr "" + +msgid "Kubernetes Cluster" +msgstr "" + +msgid "Kubernetes cluster creation time exceeds timeout; %{timeout}" +msgstr "" + +msgid "Kubernetes cluster integration was not removed." +msgstr "" + +msgid "Kubernetes cluster integration was successfully removed." +msgstr "" + +msgid "Kubernetes cluster was successfully updated." +msgstr "" + +msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page" +msgstr "" + msgid "LFSStatus|Disabled" msgstr "" @@ -1456,6 +1867,9 @@ msgstr "" msgid "Labels" msgstr "" +msgid "Labels can be applied to issues and merge requests to categorize them." +msgstr "" + msgid "Last %d day" msgid_plural "Last %d days" msgstr[0] "" @@ -1486,6 +1900,9 @@ msgstr "" msgid "LastPushEvent|at" msgstr "" +msgid "Learn more" +msgstr "" + msgid "Learn more in the" msgstr "" @@ -1504,15 +1921,18 @@ msgstr "" msgid "License" msgstr "" -msgid "Limited to showing %d event at most" -msgid_plural "Limited to showing %d events at most" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgid "Loading the GitLab IDE..." +msgstr "" msgid "Lock" msgstr "" +msgid "Lock %{issuableDisplayName}" +msgstr "" + +msgid "Lock this %{issuableDisplayName}? Only <strong>project members</strong> will be able to comment." +msgstr "" + msgid "Locked" msgstr "" @@ -1522,12 +1942,21 @@ msgstr "" msgid "Login" msgstr "" +msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos." +msgstr "" + +msgid "Manage labels" +msgstr "" + msgid "Mar" msgstr "" msgid "March" msgstr "" +msgid "Mark done" +msgstr "" + msgid "Maximum git storage failures" msgstr "" @@ -1540,6 +1969,9 @@ msgstr "" msgid "Members" msgstr "" +msgid "Merge Request" +msgstr "" + msgid "Merge Requests" msgstr "" @@ -1549,9 +1981,30 @@ msgstr "" msgid "Merge request" msgstr "" +msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others" +msgstr "" + +msgid "Merged" +msgstr "" + msgid "Messages" msgstr "" +msgid "Milestone" +msgstr "" + +msgid "Milestones|Delete milestone" +msgstr "" + +msgid "Milestones|Delete milestone %{milestoneTitle}?" +msgstr "" + +msgid "Milestones|Failed to delete milestone %{milestoneTitle}" +msgstr "" + +msgid "Milestones|Milestone %{milestoneTitle} was not found" +msgstr "" + msgid "MissingSSHKeyWarningLink|add an SSH key" msgstr "" @@ -1561,10 +2014,16 @@ msgstr "" msgid "More information is available|here" msgstr "" +msgid "Move" +msgstr "" + +msgid "Move issue" +msgstr "" + msgid "Multiple issue boards" msgstr "" -msgid "New Cluster" +msgid "Name new label" msgstr "" msgid "New Issue" @@ -1573,6 +2032,12 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" +msgid "New Kubernetes Cluster" +msgstr "" + +msgid "New Kubernetes cluster" +msgstr "" + msgid "New Pipeline Schedule" msgstr "" @@ -1597,6 +2062,9 @@ msgstr "" msgid "New issue" msgstr "" +msgid "New label" +msgstr "" + msgid "New merge request" msgstr "" @@ -1615,7 +2083,22 @@ msgstr "" msgid "New tag" msgstr "" -msgid "No container images stored for this project. Add one by following the instructions above." +msgid "No assignee" +msgstr "" + +msgid "No changes" +msgstr "" + +msgid "No connection could be made to a Gitaly Server, please check your logs!" +msgstr "" + +msgid "No due date" +msgstr "" + +msgid "No estimate or time spent" +msgstr "" + +msgid "No file chosen" msgstr "" msgid "No repository" @@ -1630,9 +2113,15 @@ msgstr "" msgid "None" msgstr "" +msgid "Not allowed to merge" +msgstr "" + msgid "Not available" msgstr "" +msgid "Not confidential" +msgstr "" + msgid "Not enough data" msgstr "" @@ -1693,6 +2182,12 @@ msgstr "" msgid "Notifications" msgstr "" +msgid "Notifications off" +msgstr "" + +msgid "Notifications on" +msgstr "" + msgid "Nov" msgstr "" @@ -1702,7 +2197,7 @@ msgstr "" msgid "Number of access attempts" msgstr "" -msgid "Number of failures before backing off" +msgid "OK" msgstr "" msgid "Oct" @@ -1717,6 +2212,9 @@ msgstr "" msgid "Only project members can comment." msgstr "" +msgid "Open" +msgstr "" + msgid "Opened" msgstr "" @@ -1750,9 +2248,6 @@ msgstr "" msgid "Password" msgstr "" -msgid "People without permission will never get a notification and won\\'t be able to comment." -msgstr "" - msgid "Pipeline" msgstr "" @@ -1795,12 +2290,6 @@ msgstr "" msgid "PipelineSchedules|Inactive" msgstr "" -msgid "PipelineSchedules|Input variable key" -msgstr "" - -msgid "PipelineSchedules|Input variable value" -msgstr "" - msgid "PipelineSchedules|Next Run" msgstr "" @@ -1810,9 +2299,6 @@ msgstr "" msgid "PipelineSchedules|Provide a short description for this pipeline" msgstr "" -msgid "PipelineSchedules|Remove variable row" -msgstr "" - msgid "PipelineSchedules|Take ownership" msgstr "" @@ -1840,6 +2326,12 @@ msgstr "" msgid "Pipelines for last year" msgstr "" +msgid "Pipelines|Build with confidence" +msgstr "" + +msgid "Pipelines|Get started with Pipelines" +msgstr "" + msgid "Pipeline|all" msgstr "" @@ -1852,12 +2344,21 @@ msgstr "" msgid "Pipeline|with stages" msgstr "" +msgid "Play" +msgstr "" + +msgid "Please <a href=%{link_to_billing} target=\"_blank\" rel=\"noopener noreferrer\">enable billing for one of your projects to be able to create a Kubernetes cluster</a>, then try again." +msgstr "" + msgid "Please solve the reCAPTCHA" msgstr "" msgid "Preferences" msgstr "" +msgid "Primary" +msgstr "" + msgid "Private - Project access must be granted explicitly to each user." msgstr "" @@ -1903,6 +2404,9 @@ msgstr "" msgid "Profiles|your account" msgstr "" +msgid "Programming languages used in this repository" +msgstr "" + msgid "Project '%{project_name}' is in the process of being deleted." msgstr "" @@ -1918,6 +2422,15 @@ msgstr "" msgid "Project access must be granted explicitly to each user." msgstr "" +msgid "Project avatar" +msgstr "" + +msgid "Project avatar in repository: %{link}" +msgstr "" + +msgid "Project cache successfully reset." +msgstr "" + msgid "Project details" msgstr "" @@ -1936,6 +2449,21 @@ msgstr "" msgid "ProjectActivityRSS|Subscribe" msgstr "" +msgid "ProjectCreationLevel|Allowed to create projects" +msgstr "" + +msgid "ProjectCreationLevel|Default project creation protection" +msgstr "" + +msgid "ProjectCreationLevel|Developers + Masters" +msgstr "" + +msgid "ProjectCreationLevel|Masters" +msgstr "" + +msgid "ProjectCreationLevel|No one" +msgstr "" + msgid "ProjectFeature|Disabled" msgstr "" @@ -1960,15 +2488,9 @@ msgstr "" msgid "ProjectSettings|Contact an admin to change this setting." msgstr "" -msgid "ProjectSettings|Immediately run a pipeline on the default branch" -msgstr "" - msgid "ProjectSettings|Only signed commits can be pushed to this repository." msgstr "" -msgid "ProjectSettings|Problem setting up the CI/CD settings JavaScript" -msgstr "" - msgid "ProjectSettings|This setting is applied on the server level and can be overridden by an admin." msgstr "" @@ -2038,6 +2560,9 @@ msgstr "" msgid "PrometheusService|View environments" msgstr "" +msgid "Protip:" +msgstr "" + msgid "Public - The group and any public projects can be viewed without any authentication." msgstr "" @@ -2053,6 +2578,9 @@ msgstr "" msgid "PushRule|Committer restriction" msgstr "" +msgid "Quick actions can be used in the issues description and comment boxes." +msgstr "" + msgid "Read more" msgstr "" @@ -2065,6 +2593,12 @@ msgstr "" msgid "RefSwitcher|Tags" msgstr "" +msgid "Reference:" +msgstr "" + +msgid "Register / Sign In" +msgstr "" + msgid "Registry" msgstr "" @@ -2089,9 +2623,18 @@ msgstr "" msgid "Remind later" msgstr "" +msgid "Remove" +msgstr "" + +msgid "Remove avatar" +msgstr "" + msgid "Remove project" msgstr "" +msgid "Repair authentication" +msgstr "" + msgid "Repository" msgstr "" @@ -2107,6 +2650,12 @@ msgstr "" msgid "Reset runners registration token" msgstr "" +msgid "Reveal value" +msgid_plural "Reveal values" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + msgid "Revert this commit" msgstr "" @@ -2116,15 +2665,15 @@ msgstr "" msgid "SSH Keys" msgstr "" -msgid "Save" -msgstr "" - msgid "Save changes" msgstr "" msgid "Save pipeline schedule" msgstr "" +msgid "Save variables" +msgstr "" + msgid "Schedule a new pipeline" msgstr "" @@ -2140,37 +2689,58 @@ msgstr "" msgid "Search branches and tags" msgstr "" -msgid "Seconds before reseting failure information" +msgid "Search milestones" +msgstr "" + +msgid "Search project" msgstr "" -msgid "Seconds to wait after a storage failure" +msgid "Search users" +msgstr "" + +msgid "Seconds before reseting failure information" msgstr "" msgid "Seconds to wait for a storage access attempt" msgstr "" +msgid "Secret variables" +msgstr "" + msgid "Select Archive Format" msgstr "" msgid "Select a timezone" msgstr "" +msgid "Select assignee" +msgstr "" + +msgid "Select branch/tag" +msgstr "" + msgid "Select target branch" msgstr "" +msgid "Selective synchronization" +msgstr "" + msgid "Sep" msgstr "" msgid "September" msgstr "" +msgid "Server version" +msgstr "" + msgid "Service Templates" msgstr "" msgid "Set a password on your account to pull or push via %{protocol}." msgstr "" -msgid "Set up CI" +msgid "Set up CI/CD" msgstr "" msgid "Set up Koding" @@ -2185,6 +2755,15 @@ msgstr "" msgid "Settings" msgstr "" +msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero." +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset pipeline minutes" +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset used pipeline minutes" +msgstr "" + msgid "Show parent pages" msgstr "" @@ -2200,9 +2779,6 @@ msgstr[2] "" msgid "Sidebar|Change weight" msgstr "" -msgid "Sidebar|Edit" -msgstr "" - msgid "Sidebar|No" msgstr "" @@ -2215,18 +2791,30 @@ msgstr "" msgid "Snippets" msgstr "" +msgid "Something went wrong on our end" +msgstr "" + msgid "Something went wrong on our end." msgstr "" +msgid "Something went wrong trying to change the confidentiality of this issue" +msgstr "" + msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}" msgstr "" +msgid "Something went wrong when toggling the button" +msgstr "" + msgid "Something went wrong while fetching the projects." msgstr "" msgid "Something went wrong while fetching the registry list." msgstr "" +msgid "Something went wrong. Please try again." +msgstr "" + msgid "Sort by" msgstr "" @@ -2356,10 +2944,10 @@ msgstr "" msgid "Stopped" msgstr "" -msgid "Subgroups" +msgid "Storage" msgstr "" -msgid "Subscribe" +msgid "Subgroups" msgstr "" msgid "Switch branch/tag" @@ -2458,7 +3046,10 @@ msgstr "" msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project." msgstr "" -msgid "The circuitbreaker backoff threshold should be lower than the failure count threshold" +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project" +msgstr "" + +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project." msgstr "" msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request." @@ -2473,10 +3064,10 @@ msgstr "" msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage." msgstr "" -msgid "The number of attempts GitLab will make to access a storage." +msgid "The maximum file size allowed is 200KB." msgstr "" -msgid "The number of failures after which GitLab will start temporarily disabling access to a storage shard on a host" +msgid "The number of attempts GitLab will make to access a storage." msgstr "" msgid "The number of failures of after which GitLab will completely prevent access to the storage. The number of failures can be reset in the admin interface: %{link_to_health_page} or using the %{api_documentation_link}." @@ -2485,9 +3076,6 @@ msgstr "" msgid "The phase of the development lifecycle." msgstr "" -msgid "The pipelines schedule runs pipelines in the future, repeatedly, for specific branches or tags. Those scheduled pipelines will inherit limited project access based on their associated user." -msgstr "" - msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit." msgstr "" @@ -2518,19 +3106,46 @@ msgstr "" msgid "The time in seconds GitLab will try to access storage. After this time a timeout error will be raised." msgstr "" +msgid "The time in seconds between storage checks. When a previous check did complete yet, GitLab will skip a check." +msgstr "" + msgid "The time taken by each data entry gathered by that stage." msgstr "" msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6." msgstr "" +msgid "There are no issues to show" +msgstr "" + +msgid "There are no merge requests to show" +msgstr "" + msgid "There are problems accessing Git storage: " msgstr "" +msgid "There was an error loading users activity calendar." +msgstr "" + +msgid "There was an error saving your notification settings." +msgstr "" + +msgid "There was an error subscribing to this label." +msgstr "" + +msgid "There was an error when reseting email token." +msgstr "" + +msgid "There was an error when subscribing to this label." +msgstr "" + +msgid "There was an error when unsubscribing from this label." +msgstr "" + msgid "This board\\'s scope is reduced" msgstr "" -msgid "This branch has changed since you started editing. Would you like to create a new branch?" +msgid "This directory" msgstr "" msgid "This is a confidential issue." @@ -2539,18 +3154,45 @@ msgstr "" msgid "This is the author's first Merge Request to this project." msgstr "" +msgid "This issue is confidential" +msgstr "" + msgid "This issue is confidential and locked." msgstr "" msgid "This issue is locked." msgstr "" +msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments" +msgstr "" + +msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered" +msgstr "" + +msgid "This job has not been triggered yet" +msgstr "" + +msgid "This job has not started yet" +msgstr "" + +msgid "This job is in pending state and is waiting to be picked by a runner" +msgstr "" + +msgid "This job requires a manual action" +msgstr "" + msgid "This means you can not push code until you create an empty repository or import existing one." msgstr "" msgid "This merge request is locked." msgstr "" +msgid "This project" +msgstr "" + +msgid "This repository" +msgstr "" + msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here." msgstr "" @@ -2563,9 +3205,21 @@ msgstr "" msgid "Time between merge request creation and merge/close" msgstr "" +msgid "Time tracking" +msgstr "" + msgid "Time until first merge request" msgstr "" +msgid "TimeTrackingEstimated|Est" +msgstr "" + +msgid "TimeTracking|Estimated:" +msgstr "" + +msgid "TimeTracking|Spent" +msgstr "" + msgid "Timeago|%s days ago" msgstr "" @@ -2707,6 +3361,18 @@ msgstr "" msgid "Title" msgstr "" +msgid "Todo" +msgstr "" + +msgid "Toggle sidebar" +msgstr "" + +msgid "ToggleButton|Toggle Status: OFF" +msgstr "" + +msgid "ToggleButton|Toggle Status: ON" +msgstr "" + msgid "Total Time" msgstr "" @@ -2722,19 +3388,40 @@ msgstr "" msgid "Track groups of issues that share a theme, across projects and milestones" msgstr "" +msgid "Total: %{total}" +msgstr "" + +msgid "Track time with quick actions" +msgstr "" + +msgid "Trigger this manual action" +msgstr "" + msgid "Turn on Service Desk" msgstr "" +msgid "Type %{value} to confirm:" +msgstr "" + +msgid "Unable to reset project cache." +msgstr "" + +msgid "Unknown" +msgstr "" + msgid "Unlock" msgstr "" +msgid "Unlock this %{issuableDisplayName}? <strong>Everyone</strong> will be able to comment." +msgstr "" + msgid "Unlocked" msgstr "" msgid "Unstar" msgstr "" -msgid "Unsubscribe" +msgid "Up to date" msgstr "" msgid "Upgrade your plan to activate Advanced Global Search." @@ -2758,6 +3445,9 @@ msgstr "" msgid "Upload file" msgstr "" +msgid "Upload new avatar" +msgstr "" + msgid "UploadLink|click to upload" msgstr "" @@ -2770,9 +3460,15 @@ msgstr "" msgid "Use your global notification setting" msgstr "" +msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want." +msgstr "" + msgid "View file @ " msgstr "" +msgid "View labels" +msgstr "" + msgid "View open merge request" msgstr "" @@ -2794,6 +3490,9 @@ msgstr "" msgid "Want to see the data? Please ask an administrator for access." msgstr "" +msgid "We could not verify that one of your projects on GCP has billing enabled. Please try again." +msgstr "" + msgid "We don't have enough data to show this stage." msgstr "" @@ -2806,9 +3505,6 @@ msgstr "" msgid "Weight" msgstr "" -msgid "When access to a storage fails. GitLab will prevent access to the storage for the time specified here. This allows the filesystem to recover. Repositories on failing shards are temporarly unavailable" -msgstr "" - msgid "Wiki" msgstr "" @@ -2827,6 +3523,12 @@ msgstr "" msgid "WikiClone|Start Gollum and edit locally" msgstr "" +msgid "WikiEditPageTip|Tip: You can move this page by adding the path to the beginning of the title." +msgstr "" + +msgid "WikiEdit|There is already a page with the same title in that path." +msgstr "" + msgid "WikiEmptyPageError|You are not allowed to create wiki pages" msgstr "" @@ -2929,9 +3631,21 @@ msgstr "" msgid "You are going to transfer %{project_name_with_namespace} to another owner. Are you ABSOLUTELY sure?" msgstr "" +msgid "You can also star a label to make it a priority label." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + msgid "You can only add files when you are on a branch" msgstr "" +msgid "You can only edit files when you are on a branch" +msgstr "" + msgid "You cannot write to a read-only secondary GitLab Geo instance. Please use %{link_to_primary_node} instead." msgstr "" @@ -2971,6 +3685,12 @@ msgstr "" msgid "You won't be able to pull or push project code via SSH until you add an SSH key to your profile" msgstr "" +msgid "You'll need to use different branch names to get a valid comparison." +msgstr "" + +msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure" +msgstr "" + msgid "Your comment will not be visible to the public." msgstr "" @@ -2983,27 +3703,222 @@ msgstr "" msgid "Your projects" msgstr "" +msgid "assign yourself" +msgstr "" + msgid "branch name" msgstr "" msgid "by" msgstr "" +msgid "ciReport|Code quality" +msgstr "" + +msgid "ciReport|DAST detected no alerts by analyzing the review app" +msgstr "" + +msgid "ciReport|Failed to load ${type} report" +msgstr "" + +msgid "ciReport|Fixed:" +msgstr "" + +msgid "ciReport|Instances" +msgstr "" + +msgid "ciReport|Learn more about whitelisting" +msgstr "" + +msgid "ciReport|Loading ${type} report" +msgstr "" + +msgid "ciReport|No changes to code quality" +msgstr "" + +msgid "ciReport|No changes to performance metrics" +msgstr "" + +msgid "ciReport|Performance metrics" +msgstr "" + +msgid "ciReport|SAST" +msgstr "" + +msgid "ciReport|SAST detected no security vulnerabilities" +msgstr "" + +msgid "ciReport|SAST:container no vulnerabilities were found" +msgstr "" + +msgid "ciReport|Show complete code vulnerabilities report" +msgstr "" + +msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}" +msgstr "" + msgid "commit" msgstr "" +msgid "confidentiality|You are going to turn off the confidentiality. This means <strong>everyone</strong> will be able to see and leave a comment on this issue." +msgstr "" + +msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with <strong>at least Reporter access</strong> are able to see and leave comments on the issue." +msgstr "" + msgid "day" msgid_plural "days" msgstr[0] "" msgstr[1] "" msgstr[2] "" +msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command." +msgstr "" + +msgid "merge request" +msgid_plural "merge requests" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "mrWidget|Cancel automatic merge" +msgstr "" + +msgid "mrWidget|Check out branch" +msgstr "" + +msgid "mrWidget|Checking ability to merge automatically" +msgstr "" + +msgid "mrWidget|Cherry-pick" +msgstr "" + +msgid "mrWidget|Cherry-pick this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Closed" +msgstr "" + +msgid "mrWidget|Closed by" +msgstr "" + +msgid "mrWidget|Closes" +msgstr "" + +msgid "mrWidget|Did not close" +msgstr "" + +msgid "mrWidget|Email patches" +msgstr "" + +msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|Mentions" +msgstr "" + +msgid "mrWidget|Merge" +msgstr "" + +msgid "mrWidget|Merge failed." +msgstr "" + +msgid "mrWidget|Merge locally" +msgstr "" + +msgid "mrWidget|Merged by" +msgstr "" + +msgid "mrWidget|Plain diff" +msgstr "" + +msgid "mrWidget|Refresh" +msgstr "" + +msgid "mrWidget|Refresh now" +msgstr "" + +msgid "mrWidget|Refreshing now" +msgstr "" + +msgid "mrWidget|Remove Source Branch" +msgstr "" + +msgid "mrWidget|Remove source branch" +msgstr "" + +msgid "mrWidget|Request to merge" +msgstr "" + +msgid "mrWidget|Resolve conflicts" +msgstr "" + +msgid "mrWidget|Revert" +msgstr "" + +msgid "mrWidget|Revert this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Set by" +msgstr "" + +msgid "mrWidget|The changes were merged into" +msgstr "" + +msgid "mrWidget|The changes were not merged into" +msgstr "" + +msgid "mrWidget|The changes will be merged into" +msgstr "" + +msgid "mrWidget|The source branch has been removed" +msgstr "" + +msgid "mrWidget|The source branch is being removed" +msgstr "" + +msgid "mrWidget|The source branch will be removed" +msgstr "" + +msgid "mrWidget|The source branch will not be removed" +msgstr "" + +msgid "mrWidget|There are merge conflicts" +msgstr "" + +msgid "mrWidget|This merge request failed to be merged automatically" +msgstr "" + +msgid "mrWidget|This merge request is in the process of being merged" +msgstr "" + +msgid "mrWidget|This project is archived, write access has been disabled" +msgstr "" + +msgid "mrWidget|You can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|You can remove source branch now" +msgstr "" + +msgid "mrWidget|command line" +msgstr "" + +msgid "mrWidget|into" +msgstr "" + +msgid "mrWidget|to be merged automatically when the pipeline succeeds" +msgstr "" + msgid "new merge request" msgstr "" msgid "notification emails" msgstr "" +msgid "or" +msgstr "" + msgid "parent" msgid_plural "parents" msgstr[0] "" @@ -3016,12 +3931,21 @@ msgstr "" msgid "personal access token" msgstr "" +msgid "remove due date" +msgstr "" + msgid "source" msgstr "" +msgid "spendCommand|%{slash_command} will update the sum of the time spent." +msgstr "" + msgid "to help your contributors communicate effectively!" msgstr "" msgid "username" msgstr "" +msgid "uses Kubernetes clusters to deploy your code!" +msgstr "" + diff --git a/locale/pt_BR/gitlab.po b/locale/pt_BR/gitlab.po index 24753f2b140..5aef8f45234 100644 --- a/locale/pt_BR/gitlab.po +++ b/locale/pt_BR/gitlab.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: gitlab-ee\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-12-12 18:31+0000\n" -"PO-Revision-Date: 2018-01-05 04:41-0500\n" +"POT-Creation-Date: 2018-02-07 11:38-0600\n" +"PO-Revision-Date: 2018-02-12 04:01-0500\n" "Last-Translator: gitlab <mbartlett+crowdin@gitlab.com>\n" "Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" @@ -16,23 +16,41 @@ msgstr "" "X-Crowdin-Language: pt-BR\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" +msgid " and" +msgstr "" + msgid "%d commit" msgid_plural "%d commits" msgstr[0] "%d commit" msgstr[1] "%d commits" +msgid "%d commit behind" +msgid_plural "%d commits behind" +msgstr[0] "" +msgstr[1] "" + +msgid "%d issue" +msgid_plural "%d issues" +msgstr[0] "" +msgstr[1] "" + msgid "%d layer" msgid_plural "%d layers" msgstr[0] "%d camada" msgstr[1] "%d camadas" +msgid "%d merge request" +msgid_plural "%d merge requests" +msgstr[0] "" +msgstr[1] "" + msgid "%s additional commit has been omitted to prevent performance issues." msgid_plural "%s additional commits have been omitted to prevent performance issues." msgstr[0] "%s commit adicional foi omitido para prevenir problemas de performance." msgstr[1] "%s commits adicionais foram omitidos para prevenir problemas de performance." -msgid "%{commit_author_link} committed %{commit_timeago}" -msgstr "%{commit_author_link} fez commit %{commit_timeago}" +msgid "%{commit_author_link} authored %{commit_timeago}" +msgstr "" msgid "%{count} participant" msgid_plural "%{count} participants" @@ -45,9 +63,6 @@ msgstr "%{number_commits_behind} commits atrás de %{default_branch}, %{number_c msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt." msgstr "%{number_of_failures} de %{maximum_failures} falhas. O GitLab permitirá o acesso na próxima tentativa." -msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will block access for %{number_of_seconds} seconds." -msgstr "%{number_of_failures} de %{maximum_failures} falhas. O GitLab irá bloquear o acesso por %{number_of_seconds} segundos." - msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will not retry automatically. Reset storage information when the problem is resolved." msgstr "%{number_of_failures} de %{maximum_failures} falhas. O GitLab não tentará mais automaticamente. Redefina as informações de storage quando o problema for resolvido." @@ -121,24 +136,81 @@ msgstr "Adicionar Licença" msgid "Add new directory" msgstr "Adicionar novo diretório" +msgid "Add todo" +msgstr "" + +msgid "AdminArea|Stop all jobs" +msgstr "" + +msgid "AdminArea|Stop all jobs?" +msgstr "" + +msgid "AdminArea|Stop jobs" +msgstr "" + +msgid "AdminArea|Stopping jobs failed" +msgstr "" + +msgid "AdminArea|You’re about to stop all jobs. This will halt all current jobs that are running." +msgstr "" + msgid "AdminHealthPageLink|health page" msgstr "página de saúde" +msgid "Advanced" +msgstr "" + msgid "Advanced settings" msgstr "Configurações avançadas" msgid "All" msgstr "Todos" +msgid "All changes are committed" +msgstr "" + +msgid "Allows you to add and manage Kubernetes clusters." +msgstr "" + +msgid "An error occurred previewing the blob" +msgstr "" + msgid "An error occurred when toggling the notification subscription" msgstr "Erro ao modificar notificação de assinatura" msgid "An error occurred when updating the issue weight" msgstr "Um erro aconteceu ao atualizar o peso da issue" +msgid "An error occurred while dismissing the feature highlight. Refresh the page and try dismissing again." +msgstr "" + +msgid "An error occurred while fetching markdown preview" +msgstr "" + msgid "An error occurred while fetching sidebar data" msgstr "Erro ao recuperar informações da barra lateral" +msgid "An error occurred while getting projects" +msgstr "" + +msgid "An error occurred while loading filenames" +msgstr "" + +msgid "An error occurred while rendering KaTeX" +msgstr "" + +msgid "An error occurred while rendering preview broadcast message" +msgstr "" + +msgid "An error occurred while retrieving calendar activity" +msgstr "" + +msgid "An error occurred while retrieving diff" +msgstr "" + +msgid "An error occurred while validating username" +msgstr "" + msgid "An error occurred. Please try again." msgstr "Ocorreu um erro. Tente novamente." @@ -163,9 +235,6 @@ msgstr "Tem certeza que deseja excluir este agendamento de pipeline?" msgid "Are you sure you want to discard your changes?" msgstr "Você tem certeza que deseja descartar suas alterações?" -msgid "Are you sure you want to leave this group?" -msgstr "Tem certeza que quer sair desse grupo?" - msgid "Are you sure you want to reset registration token?" msgstr "Você tem certeza que quer recriar o token de registro?" @@ -178,6 +247,21 @@ msgstr "Você tem certeza?" msgid "Artifacts" msgstr "Artefatos" +msgid "Assign custom color like #FF0000" +msgstr "" + +msgid "Assign labels" +msgstr "" + +msgid "Assign milestone" +msgstr "" + +msgid "Assign to" +msgstr "" + +msgid "Assignee" +msgstr "" + msgid "Attach a file by drag & drop or %{upload_link}" msgstr "Para anexar arquivo, arraste e solte ou %{upload_link}" @@ -193,15 +277,18 @@ msgstr "Log de autenticação" msgid "Author" msgstr "Autor" -msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly." -msgstr "Apps de revisão automática e Auto Deploy precisam de um nome de domÃnio e o %{kubernetes} para que funcione corretamente." +msgid "Authors: %{authors}" +msgstr "" + +msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly." +msgstr "" + +msgid "Auto Review Apps and Auto Deploy need a domain name and a %{kubernetes} to work correctly." +msgstr "" msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly." msgstr "Apps de revisão automática e Auto Deploy precisam de um nome de domÃnio para que funcione corretamente." -msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly." -msgstr "Apps de revisão automática e Auto Deploy precisam do %{kubernetes} para que funcione corretamente." - msgid "AutoDevOps|Auto DevOps (Beta)" msgstr "Auto DevOps (Beta)" @@ -223,6 +310,12 @@ msgstr "Você pode ativar %{link_to_settings} para esse projeto." msgid "Available" msgstr "DisponÃvel" +msgid "Avatar will be removed. Are you sure?" +msgstr "" + +msgid "Average per day: %{average}" +msgstr "" + msgid "Billing" msgstr "Cobrança" @@ -277,6 +370,9 @@ msgstr "pago %{price_per_year} anualmente" msgid "BillingPlans|per user" msgstr "por usuário" +msgid "Begin with the selected commit" +msgstr "" + msgid "Branch" msgid_plural "Branches" msgstr[0] "Branch" @@ -370,13 +466,13 @@ msgid "Branches|To confirm, type %{branch_name_confirmation}:" msgstr "Para confirmar, digite %{branch_name_confirmation}:" msgid "Branches|To discard the local changes and overwrite the branch with the upstream version, delete it here and choose 'Update Now' above." -msgstr "" +msgstr "Para descartar as mudanças locais e sobrescrever a branch com a versão de upstream, apague-o aqui e escolha 'Atualizar agora', acima." msgid "Branches|You’re about to permanently delete the protected branch %{branch_name}." msgstr "Você irá apagar irreparavelmente a branch protegida '%{branch_name}'." msgid "Branches|diverged from upstream" -msgstr "" +msgstr "divergiu do upstream" msgid "Branches|merged" msgstr "merge realizado" @@ -405,8 +501,8 @@ msgstr "por" msgid "CI / CD" msgstr "CI / CD" -msgid "CI configuration" -msgstr "Configuração da IC" +msgid "CI/CD configuration" +msgstr "" msgid "CICD|Jobs" msgstr "Jobs" @@ -417,6 +513,9 @@ msgstr "Cancelar" msgid "Cancel edit" msgstr "Cancelar edição" +msgid "Cannot modify managed Kubernetes cluster" +msgstr "" + msgid "Change Weight" msgstr "Alterar peso" @@ -432,15 +531,24 @@ msgstr "Cherry-pick" msgid "ChangeTypeAction|Revert" msgstr "Reverter" +msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes." +msgstr "" + msgid "Changelog" msgstr "Registro de mudanças" +msgid "Changes are shown as if the <b>source</b> revision was being merged into the <b>target</b> revision." +msgstr "" + msgid "Charts" msgstr "Gráficos" msgid "Chat" msgstr "Bate-papo" +msgid "Check interval" +msgstr "" + msgid "Checking %{text} availability…" msgstr "Verificando disponibilidade de %{text}…" @@ -453,8 +561,20 @@ msgstr "Cherry-pick esse commit" msgid "Cherry-pick this merge request" msgstr "Cherry-pick esse merge request" -msgid "Choose which groups you wish to replicate to this secondary node. Leave blank to replicate all." -msgstr "Escolha quais grupos você deseja replicar para este nó secundário. Deixe em branco para replicar tudo." +msgid "Choose File ..." +msgstr "" + +msgid "Choose a branch/tag (e.g. %{master}) or enter a commit (e.g. %{sha}) to see what's changed or to create a merge request." +msgstr "" + +msgid "Choose file..." +msgstr "" + +msgid "Choose which groups you wish to synchronize to this secondary node." +msgstr "" + +msgid "Choose which shards you wish to synchronize to this secondary node." +msgstr "" msgid "CiStatusLabel|canceled" msgstr "cancelado" @@ -510,80 +630,92 @@ msgstr "ignorado" msgid "CiStatus|running" msgstr "executando" +msgid "CiVariables|Input variable key" +msgstr "" + +msgid "CiVariables|Input variable value" +msgstr "" + +msgid "CiVariables|Remove variable row" +msgstr "" + +msgid "CiVariable|* (All environments)" +msgstr "" + +msgid "CiVariable|All environments" +msgstr "" + +msgid "CiVariable|Create wildcard" +msgstr "" + +msgid "CiVariable|Error occured while saving variables" +msgstr "" + +msgid "CiVariable|New environment" +msgstr "" + +msgid "CiVariable|Protected" +msgstr "" + +msgid "CiVariable|Search environments" +msgstr "" + +msgid "CiVariable|Toggle protected" +msgstr "" + +msgid "CiVariable|Validation failed" +msgstr "" + msgid "CircuitBreakerApiLink|circuitbreaker api" msgstr "interruptor da api" +msgid "Click to expand text" +msgstr "" + msgid "Clone repository" msgstr "Clonar repositório" msgid "Close" msgstr "Fechar" -msgid "Cluster" -msgstr "Cluster" - -msgid "ClusterIntegration|%{appList} was successfully installed on your cluster" -msgstr "%{appList} foi instalado no seu cluster" +msgid "Closed" +msgstr "" -msgid "ClusterIntegration|%{boldNotice} This will add some extra resources like a load balancer, which incur additional costs. See %{pricingLink}" -msgstr "%{boldNotice} isso irá adicionar recursos extras como balanceamento de carga, que acarretará em custos adicionais. Veja %{pricingLink}" +msgid "ClusterIntegration|%{appList} was successfully installed on your Kubernetes cluster" +msgstr "" msgid "ClusterIntegration|API URL" msgstr "API URL" -msgid "ClusterIntegration|Active" -msgstr "Ativo" - -msgid "ClusterIntegration|Add an existing cluster" -msgstr "Adicionar um cluster existente" +msgid "ClusterIntegration|Add Kubernetes cluster" +msgstr "" -msgid "ClusterIntegration|Add cluster" -msgstr "Adicionar cluster" +msgid "ClusterIntegration|Add an existing Kubernetes cluster" +msgstr "" -msgid "ClusterIntegration|All" -msgstr "Tudo" +msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration" +msgstr "" msgid "ClusterIntegration|Applications" msgstr "Aplicações" +msgid "ClusterIntegration|Are you sure you want to remove this Kubernetes cluster's integration? This will not delete your actual Kubernetes cluster." +msgstr "" + msgid "ClusterIntegration|CA Certificate" msgstr "Certificado CA" msgid "ClusterIntegration|Certificate Authority bundle (PEM format)" msgstr "Pacote de autoridade certificadora (Formato PEM)" -msgid "ClusterIntegration|Choose how to set up cluster integration" -msgstr "Escolher como configurar a integração de cluster" - -msgid "ClusterIntegration|Cluster" -msgstr "Cluster" - -msgid "ClusterIntegration|Cluster details" -msgstr "Detalhes do cluster" - -msgid "ClusterIntegration|Cluster integration" -msgstr "Integração do cluster" - -msgid "ClusterIntegration|Cluster integration is disabled for this project." -msgstr "Integração do cluster está desabilitada para esse projeto." - -msgid "ClusterIntegration|Cluster integration is enabled for this project." -msgstr "Integração do cluster está ativada nesse projeto." - -msgid "ClusterIntegration|Cluster integration is enabled for this project. Disabling this integration will not affect your cluster, it will only temporarily turn off GitLab's connection to it." -msgstr "Integração do cluster está ativada para esse projeto. Desabilitar a integração não afetará seu cluster, mas desligará temporariamente a conexão do Gitlab com ele." - -msgid "ClusterIntegration|Cluster is being created on Google Kubernetes Engine..." -msgstr "O Cluster está sendo criado no Google Kubernetes Engine..." - -msgid "ClusterIntegration|Cluster name" -msgstr "Nome do cluster" +msgid "ClusterIntegration|Choose how to set up Kubernetes cluster integration" +msgstr "" -msgid "ClusterIntegration|Cluster was successfully created on Google Kubernetes Engine. Refresh the page to see cluster's details" +msgid "ClusterIntegration|Choose which of your project's environments will use this Kubernetes cluster." msgstr "" -msgid "ClusterIntegration|Clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" -msgstr "Clusters permitem que você utilize review apps, faça deploy de suas aplicações, rode pipelines, e muito mais de um jeito simples. %{link_to_help_page}" +msgid "ClusterIntegration|Control how your Kubernetes cluster integrates with GitLab" +msgstr "" msgid "ClusterIntegration|Copy API URL" msgstr "Copiar URL da API" @@ -591,38 +723,35 @@ msgstr "Copiar URL da API" msgid "ClusterIntegration|Copy CA Certificate" msgstr "Copiar certificado CA" +msgid "ClusterIntegration|Copy Kubernetes cluster name" +msgstr "" + msgid "ClusterIntegration|Copy Token" msgstr "Copiar token" -msgid "ClusterIntegration|Copy cluster name" -msgstr "Copiar nome do cluster" - -msgid "ClusterIntegration|Create a new cluster on Google Engine right from GitLab" -msgstr "Criar um novo cluster do Google Engine pelo GitLab" +msgid "ClusterIntegration|Create Kubernetes cluster" +msgstr "" -msgid "ClusterIntegration|Create cluster" -msgstr "Criar cluster" +msgid "ClusterIntegration|Create Kubernetes cluster on Google Kubernetes Engine" +msgstr "" -msgid "ClusterIntegration|Create cluster on Google Kubernetes Engine" +msgid "ClusterIntegration|Create a new Kubernetes cluster on Google Kubernetes Engine right from GitLab" msgstr "" msgid "ClusterIntegration|Create on GKE" msgstr "Criar no GKE" -msgid "ClusterIntegration|Enable cluster integration" -msgstr "Ativar integração com o cluster" - msgid "ClusterIntegration|Enter the details for an existing Kubernetes cluster" msgstr "Insira os detalhes para o cluster Kubernetes existente" -msgid "ClusterIntegration|Enter the details for your cluster" -msgstr "Insira os detalhes para seu cluster" +msgid "ClusterIntegration|Enter the details for your Kubernetes cluster" +msgstr "" -msgid "ClusterIntegration|Environment pattern" -msgstr "Padrão de ambiente" +msgid "ClusterIntegration|Environment scope" +msgstr "" -msgid "ClusterIntegration|GKE pricing" -msgstr "Preços do GKE" +msgid "ClusterIntegration|GitLab Integration" +msgstr "" msgid "ClusterIntegration|GitLab Runner" msgstr "Gitlab Runner" @@ -631,55 +760,91 @@ msgid "ClusterIntegration|Google Cloud Platform project ID" msgstr "ID do projeto no Google Cloud Platform" msgid "ClusterIntegration|Google Kubernetes Engine" -msgstr "" +msgstr "Google Kubernetes Engine" msgid "ClusterIntegration|Google Kubernetes Engine project" -msgstr "" +msgstr "Projeto do Google Kubernetes Engine" msgid "ClusterIntegration|Helm Tiller" msgstr "Helm Tiller" -msgid "ClusterIntegration|Inactive" -msgstr "Inativo" - msgid "ClusterIntegration|Ingress" msgstr "Ingressar" msgid "ClusterIntegration|Install" msgstr "Instalar" -msgid "ClusterIntegration|Install applications on your cluster. Read more about %{helpLink}" -msgstr "Instalar aplicações no seu cluster. Leia mais em %{helpLink}" - msgid "ClusterIntegration|Installed" msgstr "Instalado" msgid "ClusterIntegration|Installing" msgstr "Instalando" -msgid "ClusterIntegration|Integrate cluster automation" -msgstr "Integrar cluster de automação" +msgid "ClusterIntegration|Integrate Kubernetes cluster automation" +msgstr "" + +msgid "ClusterIntegration|Integration status" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster details" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is disabled for this project." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project. Disabling this integration will not affect your Kubernetes cluster, it will only temporarily turn off GitLab's connection to it." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster is being created on Google Kubernetes Engine..." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster name" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters can be used to deploy applications and to provide Review Apps for this project" +msgstr "" msgid "ClusterIntegration|Learn more about %{link_to_documentation}" msgstr "Leia mais sobre %{link_to_documentation}" -msgid "ClusterIntegration|Learn more about Clusters" -msgstr "Ler mais sobre clusters" +msgid "ClusterIntegration|Learn more about Kubernetes" +msgstr "" + +msgid "ClusterIntegration|Learn more about environments" +msgstr "" msgid "ClusterIntegration|Machine type" msgstr "Tipo de máquina" -msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create clusters" -msgstr "Confira se sua conta %{link_to_requirements} para criar clusters" +msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create Kubernetes clusters" +msgstr "" -msgid "ClusterIntegration|Manage cluster integration on your GitLab project" -msgstr "Gerenciar cluster de integração no projeto do GitLab" +msgid "ClusterIntegration|Manage" +msgstr "" -msgid "ClusterIntegration|Manage your cluster by visiting %{link_gke}" -msgstr "Gerencie seu cluster visitando %{link_gke}" +msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}" +msgstr "" + +msgid "ClusterIntegration|More information" +msgstr "" -msgid "ClusterIntegration|Multiple clusters are available in GitLab Entreprise Edition Premium and Ultimate" -msgstr "Múltiplos clusters estão disponÃveis no GitLab Enterprise Premium e Ultimate" +msgid "ClusterIntegration|Multiple Kubernetes clusters are available in GitLab Enterprise Edition Premium and Ultimate" +msgstr "" msgid "ClusterIntegration|Note:" msgstr "Nota:" @@ -687,18 +852,12 @@ msgstr "Nota:" msgid "ClusterIntegration|Number of nodes" msgstr "Número de nós" -msgid "ClusterIntegration|Please enter access information for your cluster. If you need help, you can read our %{link_to_help_page} on clusters" -msgstr "Por favor, insira informações de acesso para seu cluster. Se precisar de ajuda, você pode ler %{link_to_help_page} em cluster" +msgid "ClusterIntegration|Please enter access information for your Kubernetes cluster. If you need help, you can read our %{link_to_help_page} on Kubernetes" +msgstr "" msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:" msgstr "Por favor, tenha certeza que sua conta no Google cumpre com os requisitos:" -msgid "ClusterIntegration|Problem setting up the cluster" -msgstr "Problema ao configurar o cluster" - -msgid "ClusterIntegration|Problem setting up the clusters list" -msgstr "Problema ao configurar a lista de cluster" - msgid "ClusterIntegration|Project ID" msgstr "ID do projeto" @@ -708,16 +867,19 @@ msgstr "Namespace do projeto" msgid "ClusterIntegration|Project namespace (optional, unique)" msgstr "Namespace do projeto (opcional, único)" -msgid "ClusterIntegration|Read our %{link_to_help_page} on cluster integration." -msgstr "Ler nossa %{link_to_help_page} na integração com cluster." +msgid "ClusterIntegration|Prometheus" +msgstr "" + +msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration." +msgstr "" -msgid "ClusterIntegration|Remove cluster integration" -msgstr "Remover integração com cluster" +msgid "ClusterIntegration|Remove Kubernetes cluster integration" +msgstr "" msgid "ClusterIntegration|Remove integration" msgstr "Remover integração" -msgid "ClusterIntegration|Removing cluster integration will remove the cluster configuration you have added to this project. It will not delete your cluster on Google Kubernetes Engine." +msgid "ClusterIntegration|Remove this Kubernetes cluster's configuration from this project. This will not delete your actual Kubernetes cluster." msgstr "" msgid "ClusterIntegration|Request to begin installing failed" @@ -726,8 +888,8 @@ msgstr "Solicitação para inÃcio de instalação falhou" msgid "ClusterIntegration|Save changes" msgstr "Salvar alterações" -msgid "ClusterIntegration|See and edit the details for your cluster" -msgstr "Ver e editar os detalhes para seu cluster" +msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster" +msgstr "" msgid "ClusterIntegration|See machine types" msgstr "Ver tipos de máquina" @@ -747,38 +909,38 @@ msgstr "Mostrar" msgid "ClusterIntegration|Something went wrong on our end." msgstr "Alguma coisa deu errado do nosso lado." -msgid "ClusterIntegration|Something went wrong while creating your cluster on Google Kubernetes Engine" +msgid "ClusterIntegration|Something went wrong while creating your Kubernetes cluster on Google Kubernetes Engine" msgstr "" msgid "ClusterIntegration|Something went wrong while installing %{title}" msgstr "Algo deu errado ao instalar %{title}" -msgid "ClusterIntegration|There are no clusters to show" -msgstr "Não há clusters para mostrar" +msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below" +msgstr "" -msgid "ClusterIntegration|This account must have permissions to create a cluster in the %{link_to_container_project} specified below" -msgstr "Essa conta precisa de permissão para criar um cluster no %{link_to_container_project} especificado." +msgid "ClusterIntegration|Toggle Kubernetes Cluster" +msgstr "" -msgid "ClusterIntegration|Toggle Cluster" -msgstr "Alternar cluster" +msgid "ClusterIntegration|Toggle Kubernetes cluster" +msgstr "" msgid "ClusterIntegration|Token" msgstr "Token" -msgid "ClusterIntegration|With a cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." -msgstr "Com um cluster associado à esse projeto, você pode usar revisão de apps, fazer deploy de suas aplicações, rodar suas pipelines e muito mais de um jeito simples." +msgid "ClusterIntegration|With a Kubernetes cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." +msgstr "" msgid "ClusterIntegration|Your account must have %{link_to_kubernetes_engine}" -msgstr "" +msgstr "Sua conta precisa de %{link_to_kubernetes_engine}" msgid "ClusterIntegration|Zone" msgstr "Zona" msgid "ClusterIntegration|access to Google Kubernetes Engine" -msgstr "" +msgstr "acesso ao Google Container Engine" -msgid "ClusterIntegration|cluster" -msgstr "cluster" +msgid "ClusterIntegration|check the pricing here" +msgstr "" msgid "ClusterIntegration|documentation" msgstr "documentação" @@ -795,6 +957,9 @@ msgstr "atende aos requisitos" msgid "ClusterIntegration|properly configured" msgstr "configurado corretamente" +msgid "Collapse" +msgstr "" + msgid "Comments" msgstr "Comentários" @@ -812,6 +977,9 @@ msgstr "Duração do commit em minutos para os últimos 30 commits" msgid "Commit message" msgstr "Mensagem de commit" +msgid "Commit statistics for %{ref} %{start_time} - %{end_time}" +msgstr "" + msgid "CommitBoxTitle|Commit" msgstr "Commit" @@ -824,15 +992,57 @@ msgstr "Commits" msgid "Commits feed" msgstr "Feed de commits" +msgid "Commits per day hour (UTC)" +msgstr "" + +msgid "Commits per day of month" +msgstr "" + +msgid "Commits per weekday" +msgstr "" + +msgid "Commits|An error occurred while fetching merge requests data." +msgstr "" + +msgid "Commits|Commit: %{commitText}" +msgstr "" + msgid "Commits|History" msgstr "Histórico" +msgid "Commits|No related merge requests found" +msgstr "" + msgid "Committed by" msgstr "Commit feito por" msgid "Compare" msgstr "Comparar" +msgid "Compare Git revisions" +msgstr "" + +msgid "Compare Revisions" +msgstr "" + +msgid "CompareBranches|%{source_branch} and %{target_branch} are the same." +msgstr "" + +msgid "CompareBranches|Compare" +msgstr "" + +msgid "CompareBranches|Source" +msgstr "" + +msgid "CompareBranches|Target" +msgstr "" + +msgid "CompareBranches|There isn't anything to compare." +msgstr "" + +msgid "Confidentiality" +msgstr "" + msgid "Container Registry" msgstr "Container Registry" @@ -884,6 +1094,9 @@ msgstr "Guia de contribuição" msgid "Contributors" msgstr "Contribuidores" +msgid "ContributorsPage|%{startDate} – %{endDate}" +msgstr "" + msgid "ContributorsPage|Building repository graph." msgstr "Gerando gráfico do repositório." @@ -894,20 +1107,29 @@ msgid "ContributorsPage|Please wait a moment, this page will automatically refre msgstr "Por favor, espere um momento, essa página será atualizada automaticamente." msgid "Control the maximum concurrency of LFS/attachment backfill for this secondary node" -msgstr "" +msgstr "Controle a concorrência máxima de LFS/preenchimento de repositórios para esse nó secundário" msgid "Control the maximum concurrency of repository backfill for this secondary node" -msgstr "" +msgstr "Controle a concorrência máxima de preenchimento de repositório para esse nó secundário" msgid "Copy SSH public key to clipboard" -msgstr "" +msgstr "Copiar chave públic SSH para área de transferência" msgid "Copy URL to clipboard" msgstr "Copiar URL para área de transferência" +msgid "Copy branch name to clipboard" +msgstr "" + msgid "Copy commit SHA to clipboard" msgstr "Copiar SHA do commit para a área de transferência" +msgid "Copy reference to clipboard" +msgstr "" + +msgid "Create" +msgstr "" + msgid "Create New Directory" msgstr "Criar Novo Diretório" @@ -926,6 +1148,9 @@ msgstr "Criar épico" msgid "Create file" msgstr "Criar arquivo" +msgid "Create lists from labels. Issues with that label appear in that list." +msgstr "" + msgid "Create merge request" msgstr "Criar merge request" @@ -938,6 +1163,9 @@ msgstr "Criar nova pasta" msgid "Create new file" msgstr "Criar novo arquivo" +msgid "Create new label" +msgstr "" + msgid "Create new..." msgstr "Criar novo..." @@ -959,6 +1187,9 @@ msgstr "Fuso horário do cron" msgid "Cron syntax" msgstr "Sintaxe do cron" +msgid "Current node" +msgstr "" + msgid "Custom notification events" msgstr "Eventos de notificação personalizados" @@ -968,9 +1199,6 @@ msgstr "NÃveis de notificação personalizados são equivalentes a nÃveis de p msgid "Cycle Analytics" msgstr "Análise de Ciclo" -msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project." -msgstr "A Análise de Ciclo fornece uma visão geral de quanto tempo uma ideia demora para ir para produção em seu projeto." - msgid "CycleAnalyticsStage|Code" msgstr "Código" @@ -1027,12 +1255,21 @@ msgstr "Modelos de descrição permitem que você defina modelos de contextos es msgid "Details" msgstr "Detalhes" +msgid "Diffs|No file name available" +msgstr "" + msgid "Directory name" msgstr "Nome do diretório" +msgid "Disable" +msgstr "" + msgid "Discard changes" msgstr "Descartar alterações" +msgid "Discover GitLab Geo." +msgstr "" + msgid "Dismiss Cycle Analytics introduction box" msgstr "Ignorar introdução do Cycle Analytics" @@ -1069,15 +1306,24 @@ msgstr "Arquivo de texto com as mudanças" msgid "DownloadSource|Download" msgstr "Baixar" +msgid "Due date" +msgstr "" + msgid "Edit" msgstr "Alterar" msgid "Edit Pipeline Schedule %{id}" msgstr "Alterar Agendamento do Pipeline %{id}" +msgid "Edit files in the editor and commit changes here" +msgstr "" + msgid "Emails" msgstr "Emails" +msgid "Enable" +msgstr "" + msgid "Environments|An error occurred while fetching the environments." msgstr "Um erro ocorreu ao recuperar ambientes." @@ -1096,9 +1342,6 @@ msgstr "Ambiente" msgid "Environments|Environments" msgstr "Ambientes" -msgid "Environments|Environments are places where code gets deployed, such as staging or production." -msgstr "Ambientes são lugares onde códigos são implantados (deploy), como homologação ou produção." - msgid "Environments|Job" msgstr "Job" @@ -1141,9 +1384,33 @@ msgstr "Epics permite que você gerencie seu portfólio de projetos de forma mai msgid "Error creating epic" msgstr "Erro ao criar épico" +msgid "Error fetching contributors data." +msgstr "" + +msgid "Error fetching labels." +msgstr "" + +msgid "Error fetching network graph." +msgstr "" + +msgid "Error fetching refs" +msgstr "" + +msgid "Error fetching usage ping data." +msgstr "" + msgid "Error occurred when toggling the notification subscription" msgstr "Erro ao alterar configuração de notificação de assinatura" +msgid "Error saving label update." +msgstr "" + +msgid "Error updating status for all todos." +msgstr "" + +msgid "Error updating todo status." +msgstr "" + msgid "EventFilterBy|Filter by all" msgstr "EventFilterBy|Filtrar por tudo" @@ -1171,6 +1438,9 @@ msgstr "Todos os meses (no dia primeiro à s 4:00)" msgid "Every week (Sundays at 4:00am)" msgstr "Toda semana (domingos à s 4:00)" +msgid "Expand" +msgstr "" + msgid "Explore projects" msgstr "Explorar projetos" @@ -1189,6 +1459,9 @@ msgstr "Fev" msgid "February" msgstr "Fevereiro" +msgid "Fields on this page are now uneditable, you can configure" +msgstr "" + msgid "File name" msgstr "Nome do arquivo" @@ -1233,42 +1506,138 @@ msgstr "Do merge request até a implantação em produção" msgid "GPG Keys" msgstr "Chaves GPG" +msgid "Generate a default set of labels" +msgstr "" + msgid "Geo Nodes" msgstr "Nós de geo" -msgid "GeoNodeSyncStatus|Failed" -msgstr "Falhou" - msgid "GeoNodeSyncStatus|Node is failing or broken." msgstr "Nó está falhando ou quebrado." msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage." msgstr "Nó está lento, sobrecarregado, ou acabou de recuperar após uma interrupção." -msgid "GeoNodeSyncStatus|Out of sync" -msgstr "Sem sincronia" +msgid "GeoNodes|Database replication lag:" +msgstr "" + +msgid "GeoNodes|Disabling a node stops the sync process. Are you sure?" +msgstr "" + +msgid "GeoNodes|Does not match the primary storage configuration" +msgstr "" + +msgid "GeoNodes|Failed" +msgstr "" + +msgid "GeoNodes|Full" +msgstr "" + +msgid "GeoNodes|GitLab version does not match the primary node version" +msgstr "" + +msgid "GeoNodes|GitLab version:" +msgstr "" + +msgid "GeoNodes|Health status:" +msgstr "" + +msgid "GeoNodes|Last event ID processed by cursor:" +msgstr "" + +msgid "GeoNodes|Last event ID seen from primary:" +msgstr "" + +msgid "GeoNodes|Loading nodes" +msgstr "" + +msgid "GeoNodes|Local Attachments:" +msgstr "" + +msgid "GeoNodes|Local LFS objects:" +msgstr "" + +msgid "GeoNodes|Local job artifacts:" +msgstr "" -msgid "GeoNodeSyncStatus|Synced" -msgstr "Sincronizado" +msgid "GeoNodes|New node" +msgstr "" + +msgid "GeoNodes|Out of sync" +msgstr "" + +msgid "GeoNodes|Replication slot WAL:" +msgstr "" + +msgid "GeoNodes|Replication slots:" +msgstr "" + +msgid "GeoNodes|Repositories:" +msgstr "" + +msgid "GeoNodes|Selective" +msgstr "" + +msgid "GeoNodes|Storage config:" +msgstr "" + +msgid "GeoNodes|Sync settings:" +msgstr "" + +msgid "GeoNodes|Synced" +msgstr "" + +msgid "GeoNodes|Unused slots" +msgstr "" + +msgid "GeoNodes|Used slots" +msgstr "" + +msgid "GeoNodes|Wikis:" +msgstr "" + +msgid "GeoNodes|You have configured Geo nodes using an insecure HTTP connection. We recommend the use of HTTPS." +msgstr "" + +msgid "Geo|All projects" +msgstr "" msgid "Geo|File sync capacity" msgstr "Capacidade de sincronização de arquivos" -msgid "Geo|Groups to replicate" -msgstr "Grupos para replicação" +msgid "Geo|Groups to synchronize" +msgstr "" + +msgid "Geo|Projects in certain groups" +msgstr "" + +msgid "Geo|Projects in certain storage shards" +msgstr "" msgid "Geo|Repository sync capacity" msgstr "Capacidade de sincronização do repositório" msgid "Geo|Select groups to replicate." +msgstr "Selecione grupos para replicar." + +msgid "Geo|Shards to synchronize" +msgstr "" + +msgid "Git revision" msgstr "" msgid "Git storage health information has been reset" msgstr "Informações sobre o status de saúde do storage Git foram reiniciadas" +msgid "Git version" +msgstr "" + msgid "GitLab Runner section" msgstr "Seção GitLab Runner" +msgid "Gitaly Servers" +msgstr "" + msgid "Go to your fork" msgstr "Ir para seu fork" @@ -1278,6 +1647,9 @@ msgstr "Fork" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "Autenticação do Google não está %{link_to_documentation}. Peça ao administrador do Gitlab se você deseja usar esse serviço." +msgid "Got it!" +msgstr "" + msgid "GroupSettings|Prevent sharing a project within %{group} with other groups" msgstr "Bloquear compartilhamento de projetos do grupo %{group} com outros grupos" @@ -1314,8 +1686,8 @@ msgstr "Nenhum grupo encontrado" msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group." msgstr "Você pode gerenciar permissões de membros e acesso do seu grupo para cada projeto no grupo." -msgid "GroupsTree|Are you sure you want to leave the \"${this.group.fullName}\" group?" -msgstr "Você tem certeza que deseja sair do grupo \"${this.group.fullName}\"?" +msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?" +msgstr "" msgid "GroupsTree|Create a project in this group." msgstr "Criar um projeto nesse grupo." @@ -1345,7 +1717,7 @@ msgid "GroupsTree|Sorry, no groups or projects matched your search" msgstr "Desculpe, nenhum grupo ou projeto correspondem à sua pesquisa" msgid "Have your users email" -msgstr "" +msgstr "E-mail para abertura de issues" msgid "Health Check" msgstr "Status de Saúde" @@ -1365,6 +1737,11 @@ msgstr "Nenhum problema de saúde detectado" msgid "HealthCheck|Unhealthy" msgstr "Não saudável" +msgid "Hide value" +msgid_plural "Hide values" +msgstr[0] "" +msgstr[1] "" + msgid "History" msgstr "Histórico" @@ -1375,21 +1752,27 @@ msgid "Import repository" msgstr "Importar repositório" msgid "Improve Issue boards with GitLab Enterprise Edition." -msgstr "" +msgstr "Melhorar issue boards com o GitLab Enterprise Edition." msgid "Improve issues management with Issue weight and GitLab Enterprise Edition." -msgstr "" +msgstr "Melhore a gerência de issues com pesos no GitLab Enterprise Edition." msgid "Improve search with Advanced Global Search and GitLab Enterprise Edition." -msgstr "" +msgstr "Encontre o que precisa mais facilmente com a pesquisa global avançada com GitLab Enterprise Edition." msgid "Install a Runner compatible with GitLab CI" msgstr "Instalar um Runner compatÃvel com o GitLab CI" msgid "Instance" msgid_plural "Instances" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Instância" +msgstr[1] "Instâncias" + +msgid "Instance does not support multiple Kubernetes clusters" +msgstr "" + +msgid "Interested parties can even contribute by pushing commits if they want to." +msgstr "" msgid "Internal - The group and any internal projects can be viewed by any logged in user." msgstr "Interno - O grupo e projetos internos podem ser visualizados por qualquer usuário autenticado." @@ -1404,7 +1787,7 @@ msgid "Introducing Cycle Analytics" msgstr "Apresentando a Análise de Ciclo" msgid "Issue board focus mode" -msgstr "" +msgstr "Focus mode no issue board" msgid "Issue events" msgstr "Eventos de issue" @@ -1413,11 +1796,14 @@ msgid "IssueBoards|Board" msgstr "Board" msgid "IssueBoards|Boards" -msgstr "" +msgstr "Boards" msgid "Issues" msgstr "Issues" +msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable." +msgstr "" + msgid "Jan" msgstr "Jan" @@ -1436,6 +1822,27 @@ msgstr "Jun" msgid "June" msgstr "Junho" +msgid "Kubernetes" +msgstr "" + +msgid "Kubernetes Cluster" +msgstr "" + +msgid "Kubernetes cluster creation time exceeds timeout; %{timeout}" +msgstr "" + +msgid "Kubernetes cluster integration was not removed." +msgstr "" + +msgid "Kubernetes cluster integration was successfully removed." +msgstr "" + +msgid "Kubernetes cluster was successfully updated." +msgstr "" + +msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page" +msgstr "" + msgid "LFSStatus|Disabled" msgstr "Desabilitado" @@ -1445,6 +1852,9 @@ msgstr "Habilitado" msgid "Labels" msgstr "Etiquetas" +msgid "Labels can be applied to issues and merge requests to categorize them." +msgstr "" + msgid "Last %d day" msgid_plural "Last %d days" msgstr[0] "Último %d dia" @@ -1474,6 +1884,9 @@ msgstr "Você fez o push para" msgid "LastPushEvent|at" msgstr "em" +msgid "Learn more" +msgstr "" + msgid "Learn more in the" msgstr "Saiba mais em" @@ -1490,31 +1903,44 @@ msgid "Leave project" msgstr "Sair do projeto" msgid "License" -msgstr "" +msgstr "Licença" -msgid "Limited to showing %d event at most" -msgid_plural "Limited to showing %d events at most" -msgstr[0] "Limitado a mostrar %d evento, no máximo" -msgstr[1] "Limitado a mostrar %d eventos, no máximo" +msgid "Loading the GitLab IDE..." +msgstr "" msgid "Lock" msgstr "Bloquear" +msgid "Lock %{issuableDisplayName}" +msgstr "" + +msgid "Lock this %{issuableDisplayName}? Only <strong>project members</strong> will be able to comment." +msgstr "" + msgid "Locked" msgstr "Bloqueado" msgid "Locked Files" -msgstr "" +msgstr "Arquivos bloqueados" msgid "Login" msgstr "Entrar" +msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos." +msgstr "" + +msgid "Manage labels" +msgstr "" + msgid "Mar" msgstr "Mar" msgid "March" msgstr "Março" +msgid "Mark done" +msgstr "" + msgid "Maximum git storage failures" msgstr "Máximo de falhas do git storage" @@ -1527,6 +1953,9 @@ msgstr "Mediana" msgid "Members" msgstr "Membros" +msgid "Merge Request" +msgstr "" + msgid "Merge Requests" msgstr "Merge Requests" @@ -1536,9 +1965,30 @@ msgstr "Eventos de merge" msgid "Merge request" msgstr "Merge requests" +msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others" +msgstr "" + +msgid "Merged" +msgstr "" + msgid "Messages" msgstr "Mensagens" +msgid "Milestone" +msgstr "" + +msgid "Milestones|Delete milestone" +msgstr "" + +msgid "Milestones|Delete milestone %{milestoneTitle}?" +msgstr "" + +msgid "Milestones|Failed to delete milestone %{milestoneTitle}" +msgstr "" + +msgid "Milestones|Milestone %{milestoneTitle} was not found" +msgstr "" + msgid "MissingSSHKeyWarningLink|add an SSH key" msgstr "adicione uma chave SSH" @@ -1548,17 +1998,29 @@ msgstr "Monitoramento" msgid "More information is available|here" msgstr "Mais informações estão disponÃveis|aqui" -msgid "Multiple issue boards" +msgid "Move" msgstr "" -msgid "New Cluster" -msgstr "Novo cluster" +msgid "Move issue" +msgstr "" + +msgid "Multiple issue boards" +msgstr "Múltiplos issue boards" + +msgid "Name new label" +msgstr "" msgid "New Issue" msgid_plural "New Issues" msgstr[0] "Nova Issue" msgstr[1] "Novas Issues" +msgid "New Kubernetes Cluster" +msgstr "" + +msgid "New Kubernetes cluster" +msgstr "" + msgid "New Pipeline Schedule" msgstr "Novo Agendamento de Pipeline" @@ -1572,7 +2034,7 @@ msgid "New directory" msgstr "Novo diretório" msgid "New epic" -msgstr "" +msgstr "Novo épico" msgid "New file" msgstr "Novo arquivo" @@ -1583,6 +2045,9 @@ msgstr "Novo grupo" msgid "New issue" msgstr "Nova issue" +msgid "New label" +msgstr "" + msgid "New merge request" msgstr "Novo merge request" @@ -1601,8 +2066,23 @@ msgstr "Novo subgrupo" msgid "New tag" msgstr "Nova tag" -msgid "No container images stored for this project. Add one by following the instructions above." -msgstr "Nenhuma imagem gravada para esse projeto. Adiciona uma com as instruções a seguir." +msgid "No assignee" +msgstr "" + +msgid "No changes" +msgstr "" + +msgid "No connection could be made to a Gitaly Server, please check your logs!" +msgstr "" + +msgid "No due date" +msgstr "" + +msgid "No estimate or time spent" +msgstr "" + +msgid "No file chosen" +msgstr "" msgid "No repository" msgstr "Nenhum repositório" @@ -1616,9 +2096,15 @@ msgstr "Nenhum tempo gasto" msgid "None" msgstr "Nenhum" +msgid "Not allowed to merge" +msgstr "" + msgid "Not available" msgstr "Não disponÃvel" +msgid "Not confidential" +msgstr "" + msgid "Not enough data" msgstr "Dados insuficientes" @@ -1679,6 +2165,12 @@ msgstr "Observar" msgid "Notifications" msgstr "Notificações" +msgid "Notifications off" +msgstr "" + +msgid "Notifications on" +msgstr "" + msgid "Nov" msgstr "Nov" @@ -1688,8 +2180,8 @@ msgstr "Novembro" msgid "Number of access attempts" msgstr "Número de tentativas de acesso" -msgid "Number of failures before backing off" -msgstr "Número de falhas antes de reverter" +msgid "OK" +msgstr "" msgid "Oct" msgstr "Out" @@ -1703,9 +2195,12 @@ msgstr "Filtrar" msgid "Only project members can comment." msgstr "Somente membros do projeto podem comentar." -msgid "Opened" +msgid "Open" msgstr "" +msgid "Opened" +msgstr "Aberto" + msgid "OpenedNDaysAgo|Opened" msgstr "Aberto" @@ -1736,9 +2231,6 @@ msgstr "<< Primeiro" msgid "Password" msgstr "Senha" -msgid "People without permission will never get a notification and won\\'t be able to comment." -msgstr "Pessoas sem permissão nunca receberão uma notificação e não serão capazes de comentar." - msgid "Pipeline" msgstr "Pipeline" @@ -1752,7 +2244,7 @@ msgid "Pipeline Schedules" msgstr "Agendamentos da Pipeline" msgid "Pipeline quota" -msgstr "" +msgstr "Cota de pipeline" msgid "PipelineCharts|Failed:" msgstr "Falhou:" @@ -1781,12 +2273,6 @@ msgstr "Todos" msgid "PipelineSchedules|Inactive" msgstr "Inativo" -msgid "PipelineSchedules|Input variable key" -msgstr "Chave da variável de entrada" - -msgid "PipelineSchedules|Input variable value" -msgstr "Valor da variável de entrada" - msgid "PipelineSchedules|Next Run" msgstr "Próxima Execução" @@ -1796,9 +2282,6 @@ msgstr "Nenhum" msgid "PipelineSchedules|Provide a short description for this pipeline" msgstr "Digite uma descrição curta para esta pipeline" -msgid "PipelineSchedules|Remove variable row" -msgstr "Remova a linha da variável" - msgid "PipelineSchedules|Take ownership" msgstr "Tornar-se proprietário" @@ -1826,6 +2309,12 @@ msgstr "Pipelines para a última semana" msgid "Pipelines for last year" msgstr "Pipelines para o último ano" +msgid "Pipelines|Build with confidence" +msgstr "" + +msgid "Pipelines|Get started with Pipelines" +msgstr "" + msgid "Pipeline|all" msgstr "todos" @@ -1838,12 +2327,21 @@ msgstr "com etapa" msgid "Pipeline|with stages" msgstr "com etapas" -msgid "Please solve the reCAPTCHA" +msgid "Play" +msgstr "" + +msgid "Please <a href=%{link_to_billing} target=\"_blank\" rel=\"noopener noreferrer\">enable billing for one of your projects to be able to create a Kubernetes cluster</a>, then try again." msgstr "" +msgid "Please solve the reCAPTCHA" +msgstr "Por favor, resolva o reCAPTCHA" + msgid "Preferences" msgstr "Preferências" +msgid "Primary" +msgstr "" + msgid "Private - Project access must be granted explicitly to each user." msgstr "Privado - O acesso ao projeto deve ser concedido explicitamente para cada usuário." @@ -1889,6 +2387,9 @@ msgstr "Sua conta é atualmente proprietária dos seguintes grupos:" msgid "Profiles|your account" msgstr "sua conta" +msgid "Programming languages used in this repository" +msgstr "" + msgid "Project '%{project_name}' is in the process of being deleted." msgstr "O projeto '%{project_name}' está sendo excluÃdo." @@ -1904,6 +2405,15 @@ msgstr "Projeto '%{project_name}' atualizado com sucesso." msgid "Project access must be granted explicitly to each user." msgstr "Acesso ao projeto deve ser concedido explicitamente para cada usuário." +msgid "Project avatar" +msgstr "" + +msgid "Project avatar in repository: %{link}" +msgstr "" + +msgid "Project cache successfully reset." +msgstr "" + msgid "Project details" msgstr "Detalhes do projeto" @@ -1922,6 +2432,21 @@ msgstr "Exportação do projeto iniciada. Um link para baixá-la será enviado p msgid "ProjectActivityRSS|Subscribe" msgstr "Inscreva-se" +msgid "ProjectCreationLevel|Allowed to create projects" +msgstr "" + +msgid "ProjectCreationLevel|Default project creation protection" +msgstr "" + +msgid "ProjectCreationLevel|Developers + Masters" +msgstr "" + +msgid "ProjectCreationLevel|Masters" +msgstr "" + +msgid "ProjectCreationLevel|No one" +msgstr "" + msgid "ProjectFeature|Disabled" msgstr "Desabilitado" @@ -1944,28 +2469,22 @@ msgid "ProjectNetworkGraph|Graph" msgstr "Ãrvore" msgid "ProjectSettings|Contact an admin to change this setting." -msgstr "" - -msgid "ProjectSettings|Immediately run a pipeline on the default branch" -msgstr "Rodar pipeline na branch default imediatamente" +msgstr "Fale com um administrador para mudar essa configuração." msgid "ProjectSettings|Only signed commits can be pushed to this repository." -msgstr "" - -msgid "ProjectSettings|Problem setting up the CI/CD settings JavaScript" -msgstr "Problema ao definir configurações de CI/CD Javascript" +msgstr "Esse repositório só aceita push de commits assinados." msgid "ProjectSettings|This setting is applied on the server level and can be overridden by an admin." -msgstr "" +msgstr "Essa configuração é aplicada em nÃvel de servidor e pode ser sobrescrita por qualquer administrador." msgid "ProjectSettings|This setting is applied on the server level but has been overridden for this project." -msgstr "" +msgstr "Essa configuração está aplicada à nivel de servidor mas foi sobrescrita para esse projeto." msgid "ProjectSettings|This setting will be applied to all projects unless overridden by an admin." -msgstr "" +msgstr "Essa configuração será aplicada à todos os projetos, a não ser que seja sobrescrita pelo administrador." msgid "ProjectSettings|Users can only push commits to this repository that were committed with one of their own verified emails." -msgstr "" +msgstr "Usuários só podem fazer push de commits para esse repositório se os commits estiverem assinados com um de seus próprios e-mails verificados." msgid "Projects" msgstr "Projetos" @@ -2019,11 +2538,14 @@ msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example msgstr "URL da API base do Prometheus. como http://prometheus.example.com/" msgid "PrometheusService|Time-series monitoring service" -msgstr "Monitoramento com Prometheus" +msgstr "" msgid "PrometheusService|View environments" msgstr "Ver ambientes" +msgid "Protip:" +msgstr "" + msgid "Public - The group and any public projects can be viewed without any authentication." msgstr "Público - O grupo e seus projetos podem ser visualizados por todos sem autenticação." @@ -2031,12 +2553,15 @@ msgid "Public - The project can be accessed without any authentication." msgstr "Público - O projeto pode ser acessado sem nenhuma autenticação." msgid "Push Rules" -msgstr "" +msgstr "Regras de push" msgid "Push events" msgstr "Eventos de push" msgid "PushRule|Committer restriction" +msgstr "Restrição de commit" + +msgid "Quick actions can be used in the issues description and comment boxes." msgstr "" msgid "Read more" @@ -2051,6 +2576,12 @@ msgstr "Branches" msgid "RefSwitcher|Tags" msgstr "Tags" +msgid "Reference:" +msgstr "" + +msgid "Register / Sign In" +msgstr "" + msgid "Registry" msgstr "Registro" @@ -2075,9 +2606,18 @@ msgstr "Merge Requests Relacionados" msgid "Remind later" msgstr "Lembrar mais tarde" +msgid "Remove" +msgstr "" + +msgid "Remove avatar" +msgstr "" + msgid "Remove project" msgstr "Remover projeto" +msgid "Repair authentication" +msgstr "" + msgid "Repository" msgstr "Repositório" @@ -2093,6 +2633,11 @@ msgstr "Recriar o token de status de saúde" msgid "Reset runners registration token" msgstr "Recriar o token de registro de runners" +msgid "Reveal value" +msgid_plural "Reveal values" +msgstr[0] "" +msgstr[1] "" + msgid "Revert this commit" msgstr "Reverter este commit" @@ -2102,15 +2647,15 @@ msgstr "Reverter esse merge request" msgid "SSH Keys" msgstr "Chaves SSH" -msgid "Save" -msgstr "Salvar" - msgid "Save changes" msgstr "Salvar alterações" msgid "Save pipeline schedule" msgstr "Salvar agendamento da pipeline" +msgid "Save variables" +msgstr "" + msgid "Schedule a new pipeline" msgstr "Agendar nova pipeline" @@ -2121,43 +2666,64 @@ msgid "Scheduling Pipelines" msgstr "Agendando pipelines" msgid "Scoped issue boards" -msgstr "" +msgstr "Issue board de escopo" msgid "Search branches and tags" msgstr "Procurar branch e tags" +msgid "Search milestones" +msgstr "" + +msgid "Search project" +msgstr "" + +msgid "Search users" +msgstr "" + msgid "Seconds before reseting failure information" msgstr "Segundos antes de redefinir as informações de falha" -msgid "Seconds to wait after a storage failure" -msgstr "Segundos a esperar após uma falha de armazenamento" - msgid "Seconds to wait for a storage access attempt" msgstr "Segundo de espera para tentativa de acesso ao storage" +msgid "Secret variables" +msgstr "" + msgid "Select Archive Format" msgstr "Selecionar Formato do Arquivo" msgid "Select a timezone" msgstr "Selecionar fuso horário" +msgid "Select assignee" +msgstr "" + +msgid "Select branch/tag" +msgstr "" + msgid "Select target branch" msgstr "Selecionar branch de destino" +msgid "Selective synchronization" +msgstr "" + msgid "Sep" msgstr "Set" msgid "September" msgstr "Setembro" +msgid "Server version" +msgstr "" + msgid "Service Templates" msgstr "Modelos de serviço" msgid "Set a password on your account to pull or push via %{protocol}." msgstr "Defina uma senha para sua conta para aceitar ou entregar código via %{protocol}." -msgid "Set up CI" -msgstr "Configurar CI" +msgid "Set up CI/CD" +msgstr "" msgid "Set up Koding" msgstr "Configurar Koding" @@ -2171,6 +2737,15 @@ msgstr "defina uma senha" msgid "Settings" msgstr "Configurações" +msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero." +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset pipeline minutes" +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset used pipeline minutes" +msgstr "" + msgid "Show parent pages" msgstr "Mostrar páginas acima" @@ -2183,35 +2758,44 @@ msgstr[0] "Mostrando %d evento" msgstr[1] "Mostrando %d eventos" msgid "Sidebar|Change weight" -msgstr "" - -msgid "Sidebar|Edit" -msgstr "" +msgstr "Mudar peso" msgid "Sidebar|No" -msgstr "" +msgstr "Não" msgid "Sidebar|None" -msgstr "" +msgstr "Nenhum" msgid "Sidebar|Weight" -msgstr "" +msgstr "Peso" msgid "Snippets" msgstr "Snippets" +msgid "Something went wrong on our end" +msgstr "" + msgid "Something went wrong on our end." msgstr "Algo deu errado do nosso lado." +msgid "Something went wrong trying to change the confidentiality of this issue" +msgstr "" + msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}" msgstr "Algo deu errado ao tentar mudar o estado de ${this.issuableDisplayName}" +msgid "Something went wrong when toggling the button" +msgstr "" + msgid "Something went wrong while fetching the projects." msgstr "Algo deu errado ao recuperar os projetos." msgid "Something went wrong while fetching the registry list." msgstr "Algo deu errado ao recuperar a lista de registro." +msgid "Something went wrong. Please try again." +msgstr "" + msgid "Sort by" msgstr "Ordenar por" @@ -2255,7 +2839,7 @@ msgid "SortOptions|Least popular" msgstr "Menos populares" msgid "SortOptions|Less weight" -msgstr "" +msgstr "Menos peso" msgid "SortOptions|Milestone" msgstr "Milestone" @@ -2267,7 +2851,7 @@ msgid "SortOptions|Milestone due soon" msgstr "Milestone de fim mais próximo" msgid "SortOptions|More weight" -msgstr "" +msgstr "Mais peso" msgid "SortOptions|Most popular" msgstr "Mais populares" @@ -2309,7 +2893,7 @@ msgid "SortOptions|Start soon" msgstr "Iniciar mais próximo" msgid "SortOptions|Weight" -msgstr "" +msgstr "Peso" msgid "Source" msgstr "Origem" @@ -2341,12 +2925,12 @@ msgstr "Inicie o Runner!" msgid "Stopped" msgstr "Parado" +msgid "Storage" +msgstr "" + msgid "Subgroups" msgstr "Subgrupos" -msgid "Subscribe" -msgstr "Assine" - msgid "Switch branch/tag" msgstr "Trocar branch/tag" @@ -2437,13 +3021,16 @@ msgid "Team" msgstr "Equipe" msgid "Thanks! Don't show me this again" -msgstr "" +msgstr "Obrigado! Não mostrar novamente" msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project." +msgstr "A pesquisa global avançada no GitLab é um serviço de pesquisa poderoso que economiza seu tempo. Ao invés de criar códigos duplicados e perder seu tempo, você pode agora pesquisar códigos de outros times que podem ajudar em seu projeto." + +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project" msgstr "" -msgid "The circuitbreaker backoff threshold should be lower than the failure count threshold" -msgstr "O limite do recuso do circuitbreaker deve ser inferior ao limite de contagem de falhas" +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project." +msgstr "" msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request." msgstr "A etapa de codificação mostra o tempo desde a entrega do primeiro commit até a criação do merge request. Os dados serão automaticamente adicionados aqui desde o momento de criação do merge request." @@ -2457,21 +3044,18 @@ msgstr "O relacionamento como fork foi removido." msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage." msgstr "A etapa de planejamento mostra o tempo que se leva desde a criação de uma issue até sua atribuição à um milestone, ou sua adição a uma lista no seu Issue Board. Comece a criar issues para ver dados para esta etapa." +msgid "The maximum file size allowed is 200KB." +msgstr "" + msgid "The number of attempts GitLab will make to access a storage." msgstr "O número de tentativas que gitlab fará para acessar um storage." -msgid "The number of failures after which GitLab will start temporarily disabling access to a storage shard on a host" -msgstr "O número de falhas até o GitLab começar a desabilitar temporariamente o acesso a um nó de storage em um host" - msgid "The number of failures of after which GitLab will completely prevent access to the storage. The number of failures can be reset in the admin interface: %{link_to_health_page} or using the %{api_documentation_link}." msgstr "O número de falhas para que o GitLab desabilite o acesso ao storage. O número de falhas pode ser redefinido na interface do administrador: %{link_to_health_page} ou %{api_documentation_link}." msgid "The phase of the development lifecycle." msgstr "A fase do ciclo de vida do desenvolvimento." -msgid "The pipelines schedule runs pipelines in the future, repeatedly, for specific branches or tags. Those scheduled pipelines will inherit limited project access based on their associated user." -msgstr "O agendamento de pipeline executa pipelines no futuro, repetidamente, para branches ou tags especÃficas. Essas pipelines agendadas terão acesso limitado ao projeto baseado no seu usuário associado." - msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit." msgstr "A etapa de planejamento mostra o tempo do passo anterior até a publicação de seu primeiro conjunto de mudanças. Este tempo será adicionado automaticamente assim que você enviar seu primeiro conjunto de mudanças." @@ -2502,20 +3086,47 @@ msgstr "Tempo em segundos para o GitLab manter as informações de falha. Se nen msgid "The time in seconds GitLab will try to access storage. After this time a timeout error will be raised." msgstr "Tempo em segundos que o GitLab tentará acessar o storage. Depois desse tempo, um erro de tempo excedido será disparado." +msgid "The time in seconds between storage checks. When a previous check did complete yet, GitLab will skip a check." +msgstr "" + msgid "The time taken by each data entry gathered by that stage." msgstr "O tempo necessário por cada entrada de dados reunida por essa etapa." msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6." msgstr "O valor situado no ponto médio de uma série de valores observados. Ex., entre 3, 5, 9, a mediana é 5. Entre 3, 5, 7, 8, a mediana é (5+7)/2 = 6." +msgid "There are no issues to show" +msgstr "" + +msgid "There are no merge requests to show" +msgstr "" + msgid "There are problems accessing Git storage: " msgstr "Há problemas para acessar o storage Git: " -msgid "This board\\'s scope is reduced" +msgid "There was an error loading users activity calendar." msgstr "" -msgid "This branch has changed since you started editing. Would you like to create a new branch?" -msgstr "Esse branch mudou desde quando você começou sua edição. Você quer criar um novo branch?" +msgid "There was an error saving your notification settings." +msgstr "" + +msgid "There was an error subscribing to this label." +msgstr "" + +msgid "There was an error when reseting email token." +msgstr "" + +msgid "There was an error when subscribing to this label." +msgstr "" + +msgid "There was an error when unsubscribing from this label." +msgstr "" + +msgid "This board\\'s scope is reduced" +msgstr "O escopo desse board está reduzido" + +msgid "This directory" +msgstr "" msgid "This is a confidential issue." msgstr "Essa issue é confidencial." @@ -2523,21 +3134,48 @@ msgstr "Essa issue é confidencial." msgid "This is the author's first Merge Request to this project." msgstr "Esse é o autor do primeiro merge request desse projeto." +msgid "This issue is confidential" +msgstr "" + msgid "This issue is confidential and locked." msgstr "Essa issue é confidencial e está bloqueada." msgid "This issue is locked." msgstr "Essa issue está bloqueada." +msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments" +msgstr "" + +msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered" +msgstr "" + +msgid "This job has not been triggered yet" +msgstr "" + +msgid "This job has not started yet" +msgstr "" + +msgid "This job is in pending state and is waiting to be picked by a runner" +msgstr "" + +msgid "This job requires a manual action" +msgstr "" + msgid "This means you can not push code until you create an empty repository or import existing one." msgstr "Isto significa que você não pode entregar código até que crie um repositório vazio ou importe um existente." msgid "This merge request is locked." msgstr "Esse merge request está bloqueado." -msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here." +msgid "This project" msgstr "" +msgid "This repository" +msgstr "" + +msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here." +msgstr "Esses e-mails se tornarão issues automaticamente (com os comentários se tornando uma conversa de e-mail) listadas aqui." + msgid "Time before an issue gets scheduled" msgstr "Tempo até que uma issue seja agendada" @@ -2547,9 +3185,21 @@ msgstr "Tempo até que uma issue comece a ser implementado" msgid "Time between merge request creation and merge/close" msgstr "Tempo entre a criação da solicitação de incorporação e a aceitação/fechamento" +msgid "Time tracking" +msgstr "" + msgid "Time until first merge request" msgstr "Tempo até a primeira solicitação de incorporação" +msgid "TimeTrackingEstimated|Est" +msgstr "" + +msgid "TimeTracking|Estimated:" +msgstr "" + +msgid "TimeTracking|Spent" +msgstr "" + msgid "Timeago|%s days ago" msgstr "há %s dias" @@ -2689,6 +3339,18 @@ msgstr "s" msgid "Title" msgstr "TÃtulo" +msgid "Todo" +msgstr "" + +msgid "Toggle sidebar" +msgstr "" + +msgid "ToggleButton|Toggle Status: OFF" +msgstr "" + +msgid "ToggleButton|Toggle Status: ON" +msgstr "" + msgid "Total Time" msgstr "Tempo Total" @@ -2704,20 +3366,41 @@ msgstr "Acompanhe a atividade com o Contribution Analytics." msgid "Track groups of issues that share a theme, across projects and milestones" msgstr "Acompanhe grupos de questões que compartilhem um tema, em projetos e milestones" +msgid "Total: %{total}" +msgstr "" + +msgid "Track time with quick actions" +msgstr "" + +msgid "Trigger this manual action" +msgstr "" + msgid "Turn on Service Desk" msgstr "Ativar Service Desk" +msgid "Type %{value} to confirm:" +msgstr "" + +msgid "Unable to reset project cache." +msgstr "" + +msgid "Unknown" +msgstr "" + msgid "Unlock" msgstr "Desbloquear" +msgid "Unlock this %{issuableDisplayName}? <strong>Everyone</strong> will be able to comment." +msgstr "" + msgid "Unlocked" msgstr "Desbloqueado" msgid "Unstar" msgstr "Desmarcar" -msgid "Unsubscribe" -msgstr "Desassinar" +msgid "Up to date" +msgstr "" msgid "Upgrade your plan to activate Advanced Global Search." msgstr "Atualize seu plano para ativar a Pesquisa Global Avançada." @@ -2740,6 +3423,9 @@ msgstr "Enviar Novo Arquivo" msgid "Upload file" msgstr "Enviar arquivo" +msgid "Upload new avatar" +msgstr "" + msgid "UploadLink|click to upload" msgstr "clique para fazer upload" @@ -2752,9 +3438,15 @@ msgstr "Use o seguinte token de registro durante a configuração:" msgid "Use your global notification setting" msgstr "Utilizar configuração de notificação global" +msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want." +msgstr "" + msgid "View file @ " msgstr "Ver arquivo @ " +msgid "View labels" +msgstr "" + msgid "View open merge request" msgstr "Ver merge request aberto" @@ -2776,6 +3468,9 @@ msgstr "Desconhecido" msgid "Want to see the data? Please ask an administrator for access." msgstr "Precisa visualizar os dados? Solicite acesso ao administrador." +msgid "We could not verify that one of your projects on GCP has billing enabled. Please try again." +msgstr "" + msgid "We don't have enough data to show this stage." msgstr "Esta etapa não possui dados suficientes para exibição." @@ -2788,9 +3483,6 @@ msgstr "Webhooks permitem que você acione uma URL se, por exemplo, quando um no msgid "Weight" msgstr "Peso" -msgid "When access to a storage fails. GitLab will prevent access to the storage for the time specified here. This allows the filesystem to recover. Repositories on failing shards are temporarly unavailable" -msgstr "Falha ao acessar o storage. Gitlab impedirá o acesso ao storage pelo tempo especificado aqui. Isso permite que o sistema de arquivos se recupere. Repositórios que estiverem em nós com falha ficarão temporariamente indisponÃveis" - msgid "Wiki" msgstr "Wiki" @@ -2809,6 +3501,12 @@ msgstr "É recomendado instalar %{markdown} para que as funções GFM sejam rend msgid "WikiClone|Start Gollum and edit locally" msgstr "Inicie o Gollum e edite localmente" +msgid "WikiEditPageTip|Tip: You can move this page by adding the path to the beginning of the title." +msgstr "" + +msgid "WikiEdit|There is already a page with the same title in that path." +msgstr "" + msgid "WikiEmptyPageError|You are not allowed to create wiki pages" msgstr "Você não tem permissão para criar páginas web" @@ -2911,9 +3609,21 @@ msgstr "Você está prestes a remover a relação de fork do projeto original %{ msgid "You are going to transfer %{project_name_with_namespace} to another owner. Are you ABSOLUTELY sure?" msgstr "Você irá transferir %{project_name_with_namespace} para outro proprietário. Tem certeza ABSOLUTA?" +msgid "You can also star a label to make it a priority label." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + msgid "You can only add files when you are on a branch" msgstr "Você somente pode adicionar arquivos quando estiver em um branch" +msgid "You can only edit files when you are on a branch" +msgstr "" + msgid "You cannot write to a read-only secondary GitLab Geo instance. Please use %{link_to_primary_node} instead." msgstr "Você não pode escrever numa instância secundária de somente leitura do GitLab Geo. Por favor use %{link_to_primary_node}." @@ -2953,6 +3663,12 @@ msgstr "Você não conseguirá fazer pull ou push no projeto via SSH até que a msgid "You won't be able to pull or push project code via SSH until you add an SSH key to your profile" msgstr "Você não poderá fazer push ou pull do código via SSH enquanto não adicionar sua chave SSH no seu perfil" +msgid "You'll need to use different branch names to get a valid comparison." +msgstr "" + +msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure" +msgstr "" + msgid "Your comment will not be visible to the public." msgstr "Seu comentário não estará visÃvel ao público." @@ -2965,26 +3681,220 @@ msgstr "Seu nome" msgid "Your projects" msgstr "Seus projetos" +msgid "assign yourself" +msgstr "" + msgid "branch name" msgstr "nome da branch" msgid "by" msgstr "por" +msgid "ciReport|Code quality" +msgstr "" + +msgid "ciReport|DAST detected no alerts by analyzing the review app" +msgstr "" + +msgid "ciReport|Failed to load ${type} report" +msgstr "" + +msgid "ciReport|Fixed:" +msgstr "" + +msgid "ciReport|Instances" +msgstr "" + +msgid "ciReport|Learn more about whitelisting" +msgstr "" + +msgid "ciReport|Loading ${type} report" +msgstr "" + +msgid "ciReport|No changes to code quality" +msgstr "" + +msgid "ciReport|No changes to performance metrics" +msgstr "" + +msgid "ciReport|Performance metrics" +msgstr "" + +msgid "ciReport|SAST" +msgstr "" + +msgid "ciReport|SAST detected no security vulnerabilities" +msgstr "" + +msgid "ciReport|SAST:container no vulnerabilities were found" +msgstr "" + +msgid "ciReport|Show complete code vulnerabilities report" +msgstr "" + +msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}" +msgstr "" + msgid "commit" msgstr "commit" +msgid "confidentiality|You are going to turn off the confidentiality. This means <strong>everyone</strong> will be able to see and leave a comment on this issue." +msgstr "" + +msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with <strong>at least Reporter access</strong> are able to see and leave comments on the issue." +msgstr "" + msgid "day" msgid_plural "days" msgstr[0] "dia" msgstr[1] "dias" +msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command." +msgstr "" + +msgid "merge request" +msgid_plural "merge requests" +msgstr[0] "" +msgstr[1] "" + +msgid "mrWidget|Cancel automatic merge" +msgstr "" + +msgid "mrWidget|Check out branch" +msgstr "" + +msgid "mrWidget|Checking ability to merge automatically" +msgstr "" + +msgid "mrWidget|Cherry-pick" +msgstr "" + +msgid "mrWidget|Cherry-pick this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Closed" +msgstr "" + +msgid "mrWidget|Closed by" +msgstr "" + +msgid "mrWidget|Closes" +msgstr "" + +msgid "mrWidget|Did not close" +msgstr "" + +msgid "mrWidget|Email patches" +msgstr "" + +msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|Mentions" +msgstr "" + +msgid "mrWidget|Merge" +msgstr "" + +msgid "mrWidget|Merge failed." +msgstr "" + +msgid "mrWidget|Merge locally" +msgstr "" + +msgid "mrWidget|Merged by" +msgstr "" + +msgid "mrWidget|Plain diff" +msgstr "" + +msgid "mrWidget|Refresh" +msgstr "" + +msgid "mrWidget|Refresh now" +msgstr "" + +msgid "mrWidget|Refreshing now" +msgstr "" + +msgid "mrWidget|Remove Source Branch" +msgstr "" + +msgid "mrWidget|Remove source branch" +msgstr "" + +msgid "mrWidget|Request to merge" +msgstr "" + +msgid "mrWidget|Resolve conflicts" +msgstr "" + +msgid "mrWidget|Revert" +msgstr "" + +msgid "mrWidget|Revert this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Set by" +msgstr "" + +msgid "mrWidget|The changes were merged into" +msgstr "" + +msgid "mrWidget|The changes were not merged into" +msgstr "" + +msgid "mrWidget|The changes will be merged into" +msgstr "" + +msgid "mrWidget|The source branch has been removed" +msgstr "" + +msgid "mrWidget|The source branch is being removed" +msgstr "" + +msgid "mrWidget|The source branch will be removed" +msgstr "" + +msgid "mrWidget|The source branch will not be removed" +msgstr "" + +msgid "mrWidget|There are merge conflicts" +msgstr "" + +msgid "mrWidget|This merge request failed to be merged automatically" +msgstr "" + +msgid "mrWidget|This merge request is in the process of being merged" +msgstr "" + +msgid "mrWidget|This project is archived, write access has been disabled" +msgstr "" + +msgid "mrWidget|You can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|You can remove source branch now" +msgstr "" + +msgid "mrWidget|command line" +msgstr "" + +msgid "mrWidget|into" +msgstr "" + +msgid "mrWidget|to be merged automatically when the pipeline succeeds" +msgstr "" + msgid "new merge request" msgstr "novo merge request" msgid "notification emails" msgstr "emails de notificação" +msgid "or" +msgstr "" + msgid "parent" msgid_plural "parents" msgstr[0] "pai" @@ -2996,12 +3906,21 @@ msgstr "senha" msgid "personal access token" msgstr "token de acesso pessoal" +msgid "remove due date" +msgstr "" + msgid "source" msgstr "origem" +msgid "spendCommand|%{slash_command} will update the sum of the time spent." +msgstr "" + msgid "to help your contributors communicate effectively!" msgstr "para ajudar seus contribuintes à se comunicar de maneira eficaz!" msgid "username" msgstr "nome do usuário" +msgid "uses Kubernetes clusters to deploy your code!" +msgstr "" + diff --git a/locale/ru/gitlab.po b/locale/ru/gitlab.po index 1b3b65325ac..0adb8e5b716 100644 --- a/locale/ru/gitlab.po +++ b/locale/ru/gitlab.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: gitlab-ee\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-12-12 18:31+0000\n" -"PO-Revision-Date: 2018-01-05 04:40-0500\n" +"POT-Creation-Date: 2018-02-07 11:38-0600\n" +"PO-Revision-Date: 2018-02-12 04:01-0500\n" "Last-Translator: gitlab <mbartlett+crowdin@gitlab.com>\n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -16,26 +16,47 @@ msgstr "" "X-Crowdin-Language: ru\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" +msgid " and" +msgstr "" + msgid "%d commit" msgid_plural "%d commits" msgstr[0] "%d коммит" msgstr[1] "%d коммита" msgstr[2] "%d коммитов" +msgid "%d commit behind" +msgid_plural "%d commits behind" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "%d issue" +msgid_plural "%d issues" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + msgid "%d layer" msgid_plural "%d layers" msgstr[0] "%d Ñлой" msgstr[1] "%d ÑлоÑ" msgstr[2] "%d Ñлоёв" +msgid "%d merge request" +msgid_plural "%d merge requests" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + msgid "%s additional commit has been omitted to prevent performance issues." msgid_plural "%s additional commits have been omitted to prevent performance issues." msgstr[0] "%s добавленный коммит был иÑключен Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´Ð¾Ñ‚Ð²Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼ Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñтью." msgstr[1] "%s добавленных коммита были иÑключены Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´Ð¾Ñ‚Ð²Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼ Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñтью." msgstr[2] "%s добавленных коммитов были иÑключены Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´Ð¾Ñ‚Ð²Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼ Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñтью." -msgid "%{commit_author_link} committed %{commit_timeago}" -msgstr "%{commit_author_link} добавил коммит %{commit_timeago}" +msgid "%{commit_author_link} authored %{commit_timeago}" +msgstr "" msgid "%{count} participant" msgid_plural "%{count} participants" @@ -49,9 +70,6 @@ msgstr "на %{number_commits_behind} коммитов позади %{default_br msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt." msgstr "%{number_of_failures} из %{maximum_failures} возможных неудачных попыток. GitLab будет доÑтупен поÑле Ñледующей попытки." -msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will block access for %{number_of_seconds} seconds." -msgstr "%{number_of_failures} из %{maximum_failures} возможных неудачных попыток. GitLab заблокирует доÑтуп на %{number_of_seconds} Ñекунд." - msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will not retry automatically. Reset storage information when the problem is resolved." msgstr "%{number_of_failures} из %{maximum_failures} возможных неудачных попыток. GitLab не будет автоматичеÑки повторÑÑ‚ÑŒ попытку. СброÑьте информацию хранилища поÑле уÑÑ‚Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ñ‹." @@ -62,7 +80,7 @@ msgstr[1] "%{storage_name}: %{failed_attempts} - неудачные попытк msgstr[2] "%{storage_name}: %{failed_attempts} - неудачные попытки доÑтупа к хранилищу:" msgid "%{text} is available" -msgstr "" +msgstr "%{text} доÑтупен" msgid "(checkout the %{link} for information on how to install it)." msgstr "(перейдите по ÑÑылке %{link} Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ об уÑтановке)." @@ -110,7 +128,7 @@ msgid "Activity" msgstr "ÐктивноÑÑ‚ÑŒ" msgid "Add" -msgstr "" +msgstr "Добавить" msgid "Add Changelog" msgstr "Добавить Журнал Изменений" @@ -119,7 +137,7 @@ msgid "Add Contribution guide" msgstr "Добавить РуководÑтво учаÑтника" msgid "Add Group Webhooks and GitLab Enterprise Edition." -msgstr "" +msgstr "Добавить групповые веб-обработчики и GitLab Enterprise Edition." msgid "Add License" msgstr "Добавить Лицензию" @@ -127,22 +145,79 @@ msgstr "Добавить Лицензию" msgid "Add new directory" msgstr "Добавить новый каталог" +msgid "Add todo" +msgstr "" + +msgid "AdminArea|Stop all jobs" +msgstr "" + +msgid "AdminArea|Stop all jobs?" +msgstr "" + +msgid "AdminArea|Stop jobs" +msgstr "" + +msgid "AdminArea|Stopping jobs failed" +msgstr "" + +msgid "AdminArea|You’re about to stop all jobs. This will halt all current jobs that are running." +msgstr "" + msgid "AdminHealthPageLink|health page" msgstr "Ñтраница работоÑпоÑобноÑти" +msgid "Advanced" +msgstr "" + msgid "Advanced settings" msgstr "РаÑширенные наÑтройки" msgid "All" msgstr "Ð’Ñе" -msgid "An error occurred when toggling the notification subscription" +msgid "All changes are committed" +msgstr "" + +msgid "Allows you to add and manage Kubernetes clusters." +msgstr "" + +msgid "An error occurred previewing the blob" msgstr "" +msgid "An error occurred when toggling the notification subscription" +msgstr "Произошла ошибка при переключении подпиÑки на оповещениÑ" + msgid "An error occurred when updating the issue weight" +msgstr "Произошла ошибка при обновлении веÑа обÑуждениÑ" + +msgid "An error occurred while dismissing the feature highlight. Refresh the page and try dismissing again." +msgstr "" + +msgid "An error occurred while fetching markdown preview" msgstr "" msgid "An error occurred while fetching sidebar data" +msgstr "Произошла ошибка при получении денег данных Ð´Ð»Ñ Ð±Ð¾ÐºÐ¾Ð²Ð¾Ð¹ панели" + +msgid "An error occurred while getting projects" +msgstr "" + +msgid "An error occurred while loading filenames" +msgstr "" + +msgid "An error occurred while rendering KaTeX" +msgstr "" + +msgid "An error occurred while rendering preview broadcast message" +msgstr "" + +msgid "An error occurred while retrieving calendar activity" +msgstr "" + +msgid "An error occurred while retrieving diff" +msgstr "" + +msgid "An error occurred while validating username" msgstr "" msgid "An error occurred. Please try again." @@ -169,9 +244,6 @@ msgstr "Ð’Ñ‹ дейÑтвительно хотите удалить Ñто Ñ€Ð°Ñ msgid "Are you sure you want to discard your changes?" msgstr "Ð’Ñ‹ уверены, что хотите отменить ваши изменениÑ?" -msgid "Are you sure you want to leave this group?" -msgstr "Ð’Ñ‹ уверены, что хотите покинуть Ñту группу?" - msgid "Are you sure you want to reset registration token?" msgstr "Ð’Ñ‹ уверены, что хотите ÑброÑить Ñтот региÑтрационный токен?" @@ -184,6 +256,21 @@ msgstr "Ð’Ñ‹ уверены?" msgid "Artifacts" msgstr "Ðртефакты" +msgid "Assign custom color like #FF0000" +msgstr "" + +msgid "Assign labels" +msgstr "" + +msgid "Assign milestone" +msgstr "" + +msgid "Assign to" +msgstr "" + +msgid "Assignee" +msgstr "" + msgid "Attach a file by drag & drop or %{upload_link}" msgstr "Приложить файл через drag & drop или %{upload_link}" @@ -199,15 +286,18 @@ msgstr "Журнал аутентификации" msgid "Author" msgstr "Ðвтор" -msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly." -msgstr "ÐŸÑ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑкого ревью и автоматичеÑкого Ñ€Ð°Ð·Ð²Ñ‘Ñ€Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ Ñ‚Ñ€ÐµÐ±ÑƒÑŽÑ‚ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐ½Ð¸ домена и %{kubernetes} Ð´Ð»Ñ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ð¹ работы." +msgid "Authors: %{authors}" +msgstr "" + +msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly." +msgstr "" + +msgid "Auto Review Apps and Auto Deploy need a domain name and a %{kubernetes} to work correctly." +msgstr "" msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly." msgstr "ÐŸÑ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑкого ревью и автоматичеÑкого Ñ€Ð°Ð·Ð²Ñ‘Ñ€Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ Ñ‚Ñ€ÐµÐ±ÑƒÑŽÑ‚ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐ½Ð¸ домена Ð´Ð»Ñ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ð¹ работы." -msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly." -msgstr "ÐŸÑ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑкого ревью и автоматичеÑкого Ñ€Ð°Ð·Ð²Ñ‘Ñ€Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ Ñ‚Ñ€ÐµÐ±ÑƒÑŽÑ‚ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ %{kubernetes} Ð´Ð»Ñ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ð¹ работы." - msgid "AutoDevOps|Auto DevOps (Beta)" msgstr "Auto DevOps (бета)" @@ -227,11 +317,17 @@ msgid "AutoDevOps|You can activate %{link_to_settings} for this project." msgstr "Ð’Ñ‹ можете активировать %{link_to_settings} Ð´Ð»Ñ Ñтого проекта." msgid "Available" +msgstr "ДоÑтупен" + +msgid "Avatar will be removed. Are you sure?" msgstr "" -msgid "Billing" +msgid "Average per day: %{average}" msgstr "" +msgid "Billing" +msgstr "Тариф" + msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan." msgstr "%{group_name} иÑпользует тарифный план %{plan_link}." @@ -283,6 +379,9 @@ msgstr "оплачиваетÑÑ ÐµÐ¶ÐµÐ³Ð¾Ð´Ð½Ð¾ в размере %{price_per_ msgid "BillingPlans|per user" msgstr "за пользователÑ" +msgid "Begin with the selected commit" +msgstr "" + msgid "Branch" msgid_plural "Branches" msgstr[0] "Ветка" @@ -296,10 +395,10 @@ msgid "Branch has changed" msgstr "Ветка была изменена" msgid "Branch is already taken" -msgstr "" +msgstr "Ветвь уже ÑущеÑтвует" msgid "Branch name" -msgstr "" +msgstr "Ð˜Ð¼Ñ Ð²ÐµÑ‚Ð²Ð¸" msgid "BranchSwitcherPlaceholder|Search branches" msgstr "ПоиÑк веток" @@ -362,7 +461,7 @@ msgid "Branches|Sort by" msgstr "Сортировать по" msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart." -msgstr "" +msgstr "Ветвь не может быть обновлена автоматичеÑки, потому что она имеет раÑÑ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ñ Ñ€Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÑŒÑким репозиторием." msgid "Branches|The default branch cannot be deleted" msgstr "Ветка \"по умолчанию\" не может быть удалена" @@ -377,13 +476,13 @@ msgid "Branches|To confirm, type %{branch_name_confirmation}:" msgstr "Ð”Ð»Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ, введите %{branch_name_confirmation}:" msgid "Branches|To discard the local changes and overwrite the branch with the upstream version, delete it here and choose 'Update Now' above." -msgstr "" +msgstr "Чтобы отменить локальные Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸ перезапиÑать ветвь верÑией из родительÑкого репозиториÑ, удалите её здеÑÑŒ и выберите \"Обновить ÑейчаÑ\" выше." msgid "Branches|You’re about to permanently delete the protected branch %{branch_name}." msgstr "Ð’Ñ‹ ÑобираетеÑÑŒ безвозвратно удалить защищённую ветку %{branch_name}." msgid "Branches|diverged from upstream" -msgstr "" +msgstr "раÑходитÑÑ Ñ Ñ€Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÑŒÑким репозиторием" msgid "Branches|merged" msgstr "влита" @@ -412,8 +511,8 @@ msgstr "по автору" msgid "CI / CD" msgstr "CI / CD" -msgid "CI configuration" -msgstr "ÐаÑтройка CI" +msgid "CI/CD configuration" +msgstr "" msgid "CICD|Jobs" msgstr "ЗаданиÑ" @@ -424,9 +523,12 @@ msgstr "Отмена" msgid "Cancel edit" msgstr "Отменить редактирование" -msgid "Change Weight" +msgid "Cannot modify managed Kubernetes cluster" msgstr "" +msgid "Change Weight" +msgstr "Изменить ВеÑ" + msgid "ChangeTypeActionLabel|Pick into branch" msgstr "Выбрать в ветке" @@ -439,20 +541,29 @@ msgstr "Подобрать" msgid "ChangeTypeAction|Revert" msgstr "Отменить" +msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes." +msgstr "" + msgid "Changelog" msgstr "Журнал изменений" +msgid "Changes are shown as if the <b>source</b> revision was being merged into the <b>target</b> revision." +msgstr "" + msgid "Charts" msgstr "Диаграммы" msgid "Chat" msgstr "Чат" -msgid "Checking %{text} availability…" +msgid "Check interval" msgstr "" +msgid "Checking %{text} availability…" +msgstr "Проверка доÑтупноÑти %{text} ..." + msgid "Checking branch availability..." -msgstr "" +msgstr "Проверка доÑтупноÑти ветви..." msgid "Cherry-pick this commit" msgstr "Подобрать в Ñтом коммите" @@ -460,7 +571,19 @@ msgstr "Подобрать в Ñтом коммите" msgid "Cherry-pick this merge request" msgstr "Подобрать Ñтот Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° ÑлиÑние" -msgid "Choose which groups you wish to replicate to this secondary node. Leave blank to replicate all." +msgid "Choose File ..." +msgstr "" + +msgid "Choose a branch/tag (e.g. %{master}) or enter a commit (e.g. %{sha}) to see what's changed or to create a merge request." +msgstr "" + +msgid "Choose file..." +msgstr "" + +msgid "Choose which groups you wish to synchronize to this secondary node." +msgstr "" + +msgid "Choose which shards you wish to synchronize to this secondary node." msgstr "" msgid "CiStatusLabel|canceled" @@ -517,175 +640,220 @@ msgstr "пропущено" msgid "CiStatus|running" msgstr "выполнÑетÑÑ" -msgid "CircuitBreakerApiLink|circuitbreaker api" -msgstr "CircuitBreaker API" - -msgid "Clone repository" -msgstr "Клонировать репозиторий" +msgid "CiVariables|Input variable key" +msgstr "" -msgid "Close" +msgid "CiVariables|Input variable value" msgstr "" -msgid "Cluster" -msgstr "КлаÑтер" +msgid "CiVariables|Remove variable row" +msgstr "" -msgid "ClusterIntegration|%{appList} was successfully installed on your cluster" +msgid "CiVariable|* (All environments)" msgstr "" -msgid "ClusterIntegration|%{boldNotice} This will add some extra resources like a load balancer, which incur additional costs. See %{pricingLink}" +msgid "CiVariable|All environments" msgstr "" -msgid "ClusterIntegration|API URL" +msgid "CiVariable|Create wildcard" msgstr "" -msgid "ClusterIntegration|Active" +msgid "CiVariable|Error occured while saving variables" msgstr "" -msgid "ClusterIntegration|Add an existing cluster" +msgid "CiVariable|New environment" msgstr "" -msgid "ClusterIntegration|Add cluster" +msgid "CiVariable|Protected" msgstr "" -msgid "ClusterIntegration|All" +msgid "CiVariable|Search environments" msgstr "" -msgid "ClusterIntegration|Applications" +msgid "CiVariable|Toggle protected" msgstr "" -msgid "ClusterIntegration|CA Certificate" +msgid "CiVariable|Validation failed" msgstr "" -msgid "ClusterIntegration|Certificate Authority bundle (PEM format)" +msgid "CircuitBreakerApiLink|circuitbreaker api" +msgstr "CircuitBreaker API" + +msgid "Click to expand text" msgstr "" -msgid "ClusterIntegration|Choose how to set up cluster integration" +msgid "Clone repository" +msgstr "Клонировать репозиторий" + +msgid "Close" +msgstr "Закрыть" + +msgid "Closed" msgstr "" -msgid "ClusterIntegration|Cluster" +msgid "ClusterIntegration|%{appList} was successfully installed on your Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Cluster details" -msgstr "Параметры клаÑтера" +msgid "ClusterIntegration|API URL" +msgstr "ÐÐ´Ñ€ÐµÑ API" -msgid "ClusterIntegration|Cluster integration" -msgstr "Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ ÐºÐ»Ð°Ñтеров" +msgid "ClusterIntegration|Add Kubernetes cluster" +msgstr "" -msgid "ClusterIntegration|Cluster integration is disabled for this project." -msgstr "Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ ÐºÐ»Ð°Ñтеров отключена Ð´Ð»Ñ Ñтого проекта." +msgid "ClusterIntegration|Add an existing Kubernetes cluster" +msgstr "" -msgid "ClusterIntegration|Cluster integration is enabled for this project." -msgstr "Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ ÐºÐ»Ð°Ñтеров включена Ð´Ð»Ñ Ñтого проекта." +msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration" +msgstr "" -msgid "ClusterIntegration|Cluster integration is enabled for this project. Disabling this integration will not affect your cluster, it will only temporarily turn off GitLab's connection to it." -msgstr "Ð”Ð»Ñ Ñтого проекта включена Ð¸Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ ÐºÐ»Ð°Ñтеров. Отключение интеграции не повлиÑет на клаÑтер, но Ñоединение Ñ GitLab будет временно отключено." +msgid "ClusterIntegration|Applications" +msgstr "ПриложениÑ" -msgid "ClusterIntegration|Cluster is being created on Google Kubernetes Engine..." +msgid "ClusterIntegration|Are you sure you want to remove this Kubernetes cluster's integration? This will not delete your actual Kubernetes cluster." msgstr "" -msgid "ClusterIntegration|Cluster name" -msgstr "Ðазвание клаÑтера" +msgid "ClusterIntegration|CA Certificate" +msgstr "Сертификат удоÑтоверÑющего центра" + +msgid "ClusterIntegration|Certificate Authority bundle (PEM format)" +msgstr "Комплект Ñертификатов удоÑтоверÑющего центра (формат PEM)" -msgid "ClusterIntegration|Cluster was successfully created on Google Kubernetes Engine. Refresh the page to see cluster's details" +msgid "ClusterIntegration|Choose how to set up Kubernetes cluster integration" msgstr "" -msgid "ClusterIntegration|Clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" +msgid "ClusterIntegration|Choose which of your project's environments will use this Kubernetes cluster." msgstr "" -msgid "ClusterIntegration|Copy API URL" +msgid "ClusterIntegration|Control how your Kubernetes cluster integrates with GitLab" msgstr "" +msgid "ClusterIntegration|Copy API URL" +msgstr "Скопировать Ð°Ð´Ñ€ÐµÑ API" + msgid "ClusterIntegration|Copy CA Certificate" -msgstr "" +msgstr "Копировать Сертификат УдоÑтоверÑющего Центра" -msgid "ClusterIntegration|Copy Token" +msgid "ClusterIntegration|Copy Kubernetes cluster name" msgstr "" -msgid "ClusterIntegration|Copy cluster name" -msgstr "Копировать название клаÑтера" +msgid "ClusterIntegration|Copy Token" +msgstr "Скопировать Токен" -msgid "ClusterIntegration|Create a new cluster on Google Engine right from GitLab" +msgid "ClusterIntegration|Create Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Create cluster" -msgstr "Создать клаÑтер" - -msgid "ClusterIntegration|Create cluster on Google Kubernetes Engine" +msgid "ClusterIntegration|Create Kubernetes cluster on Google Kubernetes Engine" msgstr "" -msgid "ClusterIntegration|Create on GKE" +msgid "ClusterIntegration|Create a new Kubernetes cluster on Google Kubernetes Engine right from GitLab" msgstr "" -msgid "ClusterIntegration|Enable cluster integration" -msgstr "Включить интеграцию Ñ ÐºÐ»Ð°Ñтерами" +msgid "ClusterIntegration|Create on GKE" +msgstr "Создать в GKE" msgid "ClusterIntegration|Enter the details for an existing Kubernetes cluster" -msgstr "" +msgstr "Укажите параметры ÑущеÑтвующего клаÑтера Kubernetes" -msgid "ClusterIntegration|Enter the details for your cluster" +msgid "ClusterIntegration|Enter the details for your Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Environment pattern" +msgid "ClusterIntegration|Environment scope" msgstr "" -msgid "ClusterIntegration|GKE pricing" +msgid "ClusterIntegration|GitLab Integration" msgstr "" msgid "ClusterIntegration|GitLab Runner" -msgstr "" +msgstr "GitLab Runner" msgid "ClusterIntegration|Google Cloud Platform project ID" msgstr "Идентификатор проекта в Google Cloud Platform" msgid "ClusterIntegration|Google Kubernetes Engine" -msgstr "" +msgstr "Google Kubernetes Engine" msgid "ClusterIntegration|Google Kubernetes Engine project" -msgstr "" +msgstr "Проект Google Kubernetes Engine" msgid "ClusterIntegration|Helm Tiller" +msgstr "Helm Tiller" + +msgid "ClusterIntegration|Ingress" +msgstr "Ingress" + +msgid "ClusterIntegration|Install" +msgstr "УÑтановить" + +msgid "ClusterIntegration|Installed" +msgstr "УÑтановлен" + +msgid "ClusterIntegration|Installing" +msgstr "УÑтановка" + +msgid "ClusterIntegration|Integrate Kubernetes cluster automation" msgstr "" -msgid "ClusterIntegration|Inactive" +msgid "ClusterIntegration|Integration status" msgstr "" -msgid "ClusterIntegration|Ingress" +msgid "ClusterIntegration|Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Install" +msgid "ClusterIntegration|Kubernetes cluster details" msgstr "" -msgid "ClusterIntegration|Install applications on your cluster. Read more about %{helpLink}" +msgid "ClusterIntegration|Kubernetes cluster integration" msgstr "" -msgid "ClusterIntegration|Installed" +msgid "ClusterIntegration|Kubernetes cluster integration is disabled for this project." msgstr "" -msgid "ClusterIntegration|Installing" +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project. Disabling this integration will not affect your Kubernetes cluster, it will only temporarily turn off GitLab's connection to it." msgstr "" -msgid "ClusterIntegration|Integrate cluster automation" +msgid "ClusterIntegration|Kubernetes cluster is being created on Google Kubernetes Engine..." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster name" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters can be used to deploy applications and to provide Review Apps for this project" msgstr "" msgid "ClusterIntegration|Learn more about %{link_to_documentation}" msgstr "Узнайте больше на %{link_to_documentation}" -msgid "ClusterIntegration|Learn more about Clusters" +msgid "ClusterIntegration|Learn more about Kubernetes" +msgstr "" + +msgid "ClusterIntegration|Learn more about environments" msgstr "" msgid "ClusterIntegration|Machine type" msgstr "Тип машины" -msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create clusters" -msgstr "УбедитеÑÑŒ, что ваша ÑƒÑ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ %{link_to_requirements} Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÐºÐ»Ð°Ñтеров" +msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create Kubernetes clusters" +msgstr "" + +msgid "ClusterIntegration|Manage" +msgstr "" -msgid "ClusterIntegration|Manage cluster integration on your GitLab project" +msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}" msgstr "" -msgid "ClusterIntegration|Manage your cluster by visiting %{link_gke}" -msgstr "УправлÑйте клаÑтером, Ð¿ÐµÑ€ÐµÐ¹Ð´Ñ Ð¿Ð¾ ÑÑылке %{link_gke}" +msgid "ClusterIntegration|More information" +msgstr "" -msgid "ClusterIntegration|Multiple clusters are available in GitLab Entreprise Edition Premium and Ultimate" +msgid "ClusterIntegration|Multiple Kubernetes clusters are available in GitLab Enterprise Edition Premium and Ultimate" msgstr "" msgid "ClusterIntegration|Note:" @@ -694,47 +862,44 @@ msgstr "Примечание:" msgid "ClusterIntegration|Number of nodes" msgstr "КоличеÑтво узлов" -msgid "ClusterIntegration|Please enter access information for your cluster. If you need help, you can read our %{link_to_help_page} on clusters" +msgid "ClusterIntegration|Please enter access information for your Kubernetes cluster. If you need help, you can read our %{link_to_help_page} on Kubernetes" msgstr "" msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:" msgstr "ПожалуйÑта, убедитеÑÑŒ, что ваш аккаунт Google отвечает Ñледующим требованиÑм:" -msgid "ClusterIntegration|Problem setting up the cluster" -msgstr "" - -msgid "ClusterIntegration|Problem setting up the clusters list" -msgstr "" - msgid "ClusterIntegration|Project ID" -msgstr "" +msgstr "ID проекта" msgid "ClusterIntegration|Project namespace" -msgstr "" +msgstr "ПроÑтранÑтво имён проекта" msgid "ClusterIntegration|Project namespace (optional, unique)" msgstr "ПроÑтранÑтво имен проекта (необÑзательное, уникальное)" -msgid "ClusterIntegration|Read our %{link_to_help_page} on cluster integration." -msgstr "Прочтите нашу документацию %{link_to_help_page} по интеграции клаÑтера." +msgid "ClusterIntegration|Prometheus" +msgstr "" -msgid "ClusterIntegration|Remove cluster integration" -msgstr "Удалить интеграцию Ñ ÐºÐ»Ð°Ñтером" +msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration." +msgstr "" + +msgid "ClusterIntegration|Remove Kubernetes cluster integration" +msgstr "" msgid "ClusterIntegration|Remove integration" msgstr "Удалить интеграцию" -msgid "ClusterIntegration|Removing cluster integration will remove the cluster configuration you have added to this project. It will not delete your cluster on Google Kubernetes Engine." +msgid "ClusterIntegration|Remove this Kubernetes cluster's configuration from this project. This will not delete your actual Kubernetes cluster." msgstr "" msgid "ClusterIntegration|Request to begin installing failed" -msgstr "" +msgstr "Ðе удалоÑÑŒ выполнить Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° запуÑк процеÑÑа уÑтановки" msgid "ClusterIntegration|Save changes" -msgstr "" +msgstr "Сохранить изменениÑ" -msgid "ClusterIntegration|See and edit the details for your cluster" -msgstr "ПроÑмотреть и отредактировать параметры Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ клаÑтера" +msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster" +msgstr "" msgid "ClusterIntegration|See machine types" msgstr "См. типы машин" @@ -746,55 +911,55 @@ msgid "ClusterIntegration|See zones" msgstr "См. зоны" msgid "ClusterIntegration|Service token" -msgstr "" +msgstr "Служебный токен" msgid "ClusterIntegration|Show" -msgstr "" +msgstr "Показать" msgid "ClusterIntegration|Something went wrong on our end." msgstr " У Ð½Ð°Ñ Ñ‡Ñ‚Ð¾-то пошло не так." -msgid "ClusterIntegration|Something went wrong while creating your cluster on Google Kubernetes Engine" +msgid "ClusterIntegration|Something went wrong while creating your Kubernetes cluster on Google Kubernetes Engine" msgstr "" msgid "ClusterIntegration|Something went wrong while installing %{title}" -msgstr "" +msgstr "Произошли ошибки во Ð²Ñ€ÐµÐ¼Ñ ÑƒÑтановки %{title}" -msgid "ClusterIntegration|There are no clusters to show" +msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below" msgstr "" -msgid "ClusterIntegration|This account must have permissions to create a cluster in the %{link_to_container_project} specified below" +msgid "ClusterIntegration|Toggle Kubernetes Cluster" msgstr "" -msgid "ClusterIntegration|Toggle Cluster" -msgstr "Переключить КлаÑтер" +msgid "ClusterIntegration|Toggle Kubernetes cluster" +msgstr "" msgid "ClusterIntegration|Token" -msgstr "" +msgstr "Токен" -msgid "ClusterIntegration|With a cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." -msgstr "ЕÑли привÑзать клаÑтер к Ñтому проекту, вы Ñ Ð»Ñ‘Ð³ÐºÐ¾Ñтью Ñможете иÑпользовать Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñ€ÐµÐ²ÑŒÑŽ, развертывать ваши приложениÑ, запуÑкать Ñборочные линии и многое другое." +msgid "ClusterIntegration|With a Kubernetes cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." +msgstr "" msgid "ClusterIntegration|Your account must have %{link_to_kubernetes_engine}" -msgstr "" +msgstr "Ваша ÑƒÑ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ должна иметь %{link_to_kubernetes_engine}" msgid "ClusterIntegration|Zone" msgstr "Зона" msgid "ClusterIntegration|access to Google Kubernetes Engine" -msgstr "" +msgstr "доÑтуп к Google Kubernetes Engine" -msgid "ClusterIntegration|cluster" -msgstr "клаÑтер" +msgid "ClusterIntegration|check the pricing here" +msgstr "" msgid "ClusterIntegration|documentation" -msgstr "" +msgstr "документациÑ" msgid "ClusterIntegration|help page" msgstr "Ñтраница Ñправки" msgid "ClusterIntegration|installing applications" -msgstr "" +msgstr "ClusterIntegration | уÑтановка приложений" msgid "ClusterIntegration|meets the requirements" msgstr "отвечает требованиÑм" @@ -802,6 +967,9 @@ msgstr "отвечает требованиÑм" msgid "ClusterIntegration|properly configured" msgstr "правильно наÑтроен" +msgid "Collapse" +msgstr "" + msgid "Comments" msgstr "Комментарии" @@ -820,6 +988,9 @@ msgstr "ПродолжительноÑÑ‚ÑŒ поÑледних 30 коммитоРmsgid "Commit message" msgstr "ОпиÑание коммита" +msgid "Commit statistics for %{ref} %{start_time} - %{end_time}" +msgstr "" + msgid "CommitBoxTitle|Commit" msgstr "Коммит" @@ -832,15 +1003,57 @@ msgstr "Коммиты" msgid "Commits feed" msgstr "Лента коммитов" +msgid "Commits per day hour (UTC)" +msgstr "" + +msgid "Commits per day of month" +msgstr "" + +msgid "Commits per weekday" +msgstr "" + +msgid "Commits|An error occurred while fetching merge requests data." +msgstr "" + +msgid "Commits|Commit: %{commitText}" +msgstr "" + msgid "Commits|History" msgstr "ИÑториÑ" +msgid "Commits|No related merge requests found" +msgstr "" + msgid "Committed by" msgstr "ЗафикÑировано автором" msgid "Compare" msgstr "Сравнить" +msgid "Compare Git revisions" +msgstr "" + +msgid "Compare Revisions" +msgstr "" + +msgid "CompareBranches|%{source_branch} and %{target_branch} are the same." +msgstr "" + +msgid "CompareBranches|Compare" +msgstr "" + +msgid "CompareBranches|Source" +msgstr "" + +msgid "CompareBranches|Target" +msgstr "" + +msgid "CompareBranches|There isn't anything to compare." +msgstr "" + +msgid "Confidentiality" +msgstr "" + msgid "Container Registry" msgstr "РееÑÑ‚Ñ€ Контейнеров" @@ -892,30 +1105,42 @@ msgstr "РуководÑтво учаÑтника" msgid "Contributors" msgstr "УчаÑтники" -msgid "ContributorsPage|Building repository graph." +msgid "ContributorsPage|%{startDate} – %{endDate}" msgstr "" +msgid "ContributorsPage|Building repository graph." +msgstr "ПоÑтроение графа репозиториÑ." + msgid "ContributorsPage|Commits to %{branch_name}, excluding merge commits. Limited to 6,000 commits." -msgstr "" +msgstr "Коммиты в %{branch_name}, за иÑключением коммитов ÑлиÑниÑ. Ограничено 6,000 коммитами." msgid "ContributorsPage|Please wait a moment, this page will automatically refresh when ready." -msgstr "" +msgstr "ПожалуйÑта подождите, Ñта Ñтраница автоматичеÑки обновитÑÑ Ð¿Ð¾ готовноÑти." msgid "Control the maximum concurrency of LFS/attachment backfill for this secondary node" -msgstr "" +msgstr "Контролировать макÑимальное количеÑтво потоков фоновой загрузки LFS/вложений Ð´Ð»Ñ Ñтого вторичного узла" msgid "Control the maximum concurrency of repository backfill for this secondary node" -msgstr "" +msgstr "Контролировать макÑимальное количеÑтво потоков фоновой загрузки хранилища Ð´Ð»Ñ Ñтого вторичного узла" msgid "Copy SSH public key to clipboard" -msgstr "" +msgstr "Скопировать публичный ключ SSH в буфер обмена" msgid "Copy URL to clipboard" msgstr "Копировать URL в буфер обмена" +msgid "Copy branch name to clipboard" +msgstr "" + msgid "Copy commit SHA to clipboard" msgstr "Копировать SHA коммита в буфер обмена" +msgid "Copy reference to clipboard" +msgstr "" + +msgid "Create" +msgstr "" + msgid "Create New Directory" msgstr "Создать Ðовый каталог" @@ -929,11 +1154,14 @@ msgid "Create empty bare repository" msgstr "Создать пуÑтой репозиторий" msgid "Create epic" -msgstr "" +msgstr "Создать Ñпик" msgid "Create file" msgstr "Создать файл" +msgid "Create lists from labels. Issues with that label appear in that list." +msgstr "" + msgid "Create merge request" msgstr "Создать Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° ÑлиÑние" @@ -946,6 +1174,9 @@ msgstr "Создать новый каталог" msgid "Create new file" msgstr "Создать новый файл" +msgid "Create new label" +msgstr "" + msgid "Create new..." msgstr "Ðовый" @@ -959,7 +1190,7 @@ msgid "CreateTokenToCloneLink|create a personal access token" msgstr "Ñоздать перÑональный токен доÑтупа" msgid "Creating epic" -msgstr "" +msgstr "Создание Ñпика" msgid "Cron Timezone" msgstr "Ð’Ñ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð·Ð¾Ð½Ð° Cron" @@ -967,6 +1198,9 @@ msgstr "Ð’Ñ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð·Ð¾Ð½Ð° Cron" msgid "Cron syntax" msgstr "СинтакÑÐ¸Ñ Cron" +msgid "Current node" +msgstr "" + msgid "Custom notification events" msgstr "Ð¡Ð¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð½Ð°Ñтраиваемых уведомлений" @@ -976,9 +1210,6 @@ msgstr "ÐаÑтраиваемые уровни уведомлений аналРmsgid "Cycle Analytics" msgstr "Ðналитика Цикла" -msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project." -msgstr "Ðналитика Цикла дает предÑтавление о том, Ñколько времени требуетÑÑ, чтобы перейти от идеи к производÑтву в вашем проекте." - msgid "CycleAnalyticsStage|Code" msgstr "ÐапиÑание кода" @@ -1031,22 +1262,31 @@ msgid "Description" msgstr "ОпиÑание" msgid "Description templates allow you to define context-specific templates for issue and merge request description fields for your project." -msgstr "" +msgstr "Шаблоны опиÑаний позволÑÑŽÑ‚ вам определить контекÑтно-завиÑимые шаблоны Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð±Ñуждений и запроÑов на ÑлиÑние в вашем проекте." msgid "Details" msgstr "ÐŸÐ¾Ð´Ñ€Ð¾Ð±Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ" +msgid "Diffs|No file name available" +msgstr "" + msgid "Directory name" msgstr "Ð˜Ð¼Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°" +msgid "Disable" +msgstr "" + msgid "Discard changes" msgstr "Отменить изменениÑ" +msgid "Discover GitLab Geo." +msgstr "" + msgid "Dismiss Cycle Analytics introduction box" msgstr "Отключить блок Ð²Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð² Ðналитику Цикла" msgid "Dismiss Merge Request promotion" -msgstr "" +msgstr "Отключить анонÑÑ‹ Ð´Ð»Ñ Ð—Ð°Ð¿Ñ€Ð¾Ñов на ÑлиÑние" msgid "Don't show again" msgstr "Ðе показывать Ñнова" @@ -1078,79 +1318,109 @@ msgstr "ПроÑтой Diff" msgid "DownloadSource|Download" msgstr "Скачать" +msgid "Due date" +msgstr "" + msgid "Edit" msgstr "Редактировать" msgid "Edit Pipeline Schedule %{id}" msgstr "Изменить раÑпиÑание Ñборочной линии %{id}" +msgid "Edit files in the editor and commit changes here" +msgstr "" + msgid "Emails" msgstr "Email-адреÑа" -msgid "Environments|An error occurred while fetching the environments." +msgid "Enable" msgstr "" +msgid "Environments|An error occurred while fetching the environments." +msgstr "Произошла ошибка при получении окружений." + msgid "Environments|An error occurred while making the request." -msgstr "" +msgstr "Произошла ошибка во Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñа." msgid "Environments|Commit" -msgstr "" +msgstr "Коммит" msgid "Environments|Deployment" -msgstr "" +msgstr "Развертывание" msgid "Environments|Environment" -msgstr "" +msgstr "Окружение" msgid "Environments|Environments" -msgstr "" - -msgid "Environments|Environments are places where code gets deployed, such as staging or production." -msgstr "" +msgstr "ОкружениÑ" msgid "Environments|Job" -msgstr "" +msgstr "Задание" msgid "Environments|New environment" -msgstr "" +msgstr "Ðовое окружение" msgid "Environments|No deployments yet" -msgstr "" +msgstr "Еще нет развертываний" msgid "Environments|Open" -msgstr "" +msgstr "Открыть" msgid "Environments|Re-deploy" -msgstr "" +msgstr "Переразвернуть" msgid "Environments|Read more about environments" -msgstr "" +msgstr "Подробнее об окружениÑÑ…" msgid "Environments|Rollback" -msgstr "" +msgstr "Откатить" msgid "Environments|Show all" msgstr "Показать вÑе" msgid "Environments|Updated" -msgstr "" +msgstr "Обновлено" msgid "Environments|You don't have any environments right now." -msgstr "" +msgstr "Ð’Ñ‹ пока не наÑтроили ни одного окружениÑ." msgid "Epic will be removed! Are you sure?" -msgstr "" +msgstr "Ðпик будет удален! Ð’Ñ‹ уверены?" msgid "Epics" -msgstr "" +msgstr "Ðпики" msgid "Epics let you manage your portfolio of projects more efficiently and with less effort" -msgstr "" +msgstr "Ðпики позволÑÑ‚ вам управлÑÑ‚ÑŒ портфелем проектов более Ñффективно и Ñ Ð¼ÐµÐ½ÑŒÑˆÐ¸Ð¼Ð¸ уÑилиÑми" msgid "Error creating epic" +msgstr "Ошибка ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñпика" + +msgid "Error fetching contributors data." +msgstr "" + +msgid "Error fetching labels." +msgstr "" + +msgid "Error fetching network graph." +msgstr "" + +msgid "Error fetching refs" +msgstr "" + +msgid "Error fetching usage ping data." msgstr "" msgid "Error occurred when toggling the notification subscription" +msgstr "Произошла ошибка при переключении подпиÑки на оповещение" + +msgid "Error saving label update." +msgstr "" + +msgid "Error updating status for all todos." +msgstr "" + +msgid "Error updating todo status." msgstr "" msgid "EventFilterBy|Filter by all" @@ -1180,6 +1450,9 @@ msgstr "ЕжемеÑÑчно (каждое 1-е чиÑло в 4:00)" msgid "Every week (Sundays at 4:00am)" msgstr "Еженедельно (по воÑкреÑениÑм в 4:00)" +msgid "Expand" +msgstr "" + msgid "Explore projects" msgstr "Обзор проектов" @@ -1198,6 +1471,9 @@ msgstr "Фев." msgid "February" msgstr "Февраль" +msgid "Fields on this page are now uneditable, you can configure" +msgstr "" + msgid "File name" msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°" @@ -1243,42 +1519,138 @@ msgstr "От запроÑа на ÑлиÑние до Ñ€Ð°Ð·Ð²ÐµÑ€Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ msgid "GPG Keys" msgstr "GPG Ключи" +msgid "Generate a default set of labels" +msgstr "" + msgid "Geo Nodes" +msgstr "ГеографичеÑкие Узлы" + +msgid "GeoNodeSyncStatus|Node is failing or broken." +msgstr "Ðа узле Ñбой или он не работает." + +msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage." +msgstr "Узел функционирует медленно, перегужен или только что воÑÑтановлен поÑле ÑбоÑ." + +msgid "GeoNodes|Database replication lag:" msgstr "" -msgid "GeoNodeSyncStatus|Failed" +msgid "GeoNodes|Disabling a node stops the sync process. Are you sure?" msgstr "" -msgid "GeoNodeSyncStatus|Node is failing or broken." +msgid "GeoNodes|Does not match the primary storage configuration" msgstr "" -msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage." +msgid "GeoNodes|Failed" msgstr "" -msgid "GeoNodeSyncStatus|Out of sync" +msgid "GeoNodes|Full" msgstr "" -msgid "GeoNodeSyncStatus|Synced" +msgid "GeoNodes|GitLab version does not match the primary node version" +msgstr "" + +msgid "GeoNodes|GitLab version:" +msgstr "" + +msgid "GeoNodes|Health status:" +msgstr "" + +msgid "GeoNodes|Last event ID processed by cursor:" +msgstr "" + +msgid "GeoNodes|Last event ID seen from primary:" +msgstr "" + +msgid "GeoNodes|Loading nodes" +msgstr "" + +msgid "GeoNodes|Local Attachments:" +msgstr "" + +msgid "GeoNodes|Local LFS objects:" +msgstr "" + +msgid "GeoNodes|Local job artifacts:" +msgstr "" + +msgid "GeoNodes|New node" +msgstr "" + +msgid "GeoNodes|Out of sync" +msgstr "" + +msgid "GeoNodes|Replication slot WAL:" +msgstr "" + +msgid "GeoNodes|Replication slots:" +msgstr "" + +msgid "GeoNodes|Repositories:" +msgstr "" + +msgid "GeoNodes|Selective" +msgstr "" + +msgid "GeoNodes|Storage config:" +msgstr "" + +msgid "GeoNodes|Sync settings:" +msgstr "" + +msgid "GeoNodes|Synced" +msgstr "" + +msgid "GeoNodes|Unused slots" +msgstr "" + +msgid "GeoNodes|Used slots" +msgstr "" + +msgid "GeoNodes|Wikis:" +msgstr "" + +msgid "GeoNodes|You have configured Geo nodes using an insecure HTTP connection. We recommend the use of HTTPS." +msgstr "" + +msgid "Geo|All projects" msgstr "" msgid "Geo|File sync capacity" +msgstr "Объем хранилища Ð´Ð»Ñ Ñинхронизации файлов" + +msgid "Geo|Groups to synchronize" msgstr "" -msgid "Geo|Groups to replicate" +msgid "Geo|Projects in certain groups" msgstr "" -msgid "Geo|Repository sync capacity" +msgid "Geo|Projects in certain storage shards" msgstr "" +msgid "Geo|Repository sync capacity" +msgstr "Объем хранилища Ð´Ð»Ñ Ñинхронизации репозиториÑ" + msgid "Geo|Select groups to replicate." +msgstr "Выберите группы Ð´Ð»Ñ Ñ€ÐµÐ¿Ð»Ð¸ÐºÐ°Ñ†Ð¸Ð¸." + +msgid "Geo|Shards to synchronize" +msgstr "" + +msgid "Git revision" msgstr "" msgid "Git storage health information has been reset" msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ ÑтабильноÑти Git хранилища была Ñброшена" +msgid "Git version" +msgstr "" + msgid "GitLab Runner section" msgstr "Ð¡ÐµÐºÑ†Ð¸Ñ Gitlab Runner" +msgid "Gitaly Servers" +msgstr "" + msgid "Go to your fork" msgstr "Перейти к вашему ответвлению" @@ -1288,6 +1660,9 @@ msgstr "Ответвление" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "ÐÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Google не %{link_to_documentation}. ПопроÑите Ñвоего админиÑтратора GitLab, еÑли вы хотите воÑпользоватьÑÑ Ñтим ÑервиÑом." +msgid "Got it!" +msgstr "" + msgid "GroupSettings|Prevent sharing a project within %{group} with other groups" msgstr "Запретить публикацию проектов из %{group} в других группах" @@ -1324,8 +1699,8 @@ msgstr "Группы не найдены" msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group." msgstr "Ð’Ñ‹ можете управлÑÑ‚ÑŒ правами и доÑтупом учаÑтников вашей группы к каждому проекту в группе." -msgid "GroupsTree|Are you sure you want to leave the \"${this.group.fullName}\" group?" -msgstr "Ð’Ñ‹ уверены, что вы хотите покинуть группу \"${this.group.fullName}\"?" +msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?" +msgstr "" msgid "GroupsTree|Create a project in this group." msgstr "Создать проект в Ñтой группе." @@ -1355,7 +1730,7 @@ msgid "GroupsTree|Sorry, no groups or projects matched your search" msgstr "К Ñожалению, по вашему запроÑу групп или проектов не найдено" msgid "Have your users email" -msgstr "" +msgstr "ÐÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð°Ñ Ð¿Ð¾Ñ‡Ñ‚Ð° Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ð¹ пользователей" msgid "Health Check" msgstr "Проверка работоÑпоÑобноÑти" @@ -1375,6 +1750,12 @@ msgstr "Проблем работоÑпоÑобноÑти не обнаружеРmsgid "HealthCheck|Unhealthy" msgstr "ÐеÑтабильный" +msgid "Hide value" +msgid_plural "Hide values" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + msgid "History" msgstr "ИÑториÑ" @@ -1385,22 +1766,28 @@ msgid "Import repository" msgstr "Импорт репозиториÑ" msgid "Improve Issue boards with GitLab Enterprise Edition." -msgstr "" +msgstr "Улучшить доÑки обÑуждений Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ GitLab Enterprise Edition." msgid "Improve issues management with Issue weight and GitLab Enterprise Edition." -msgstr "" +msgstr "Улучшить управление обÑуждениÑми возможноÑтью Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð²ÐµÑа обÑÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ Ð¸ GitLab Enterprise Edition." msgid "Improve search with Advanced Global Search and GitLab Enterprise Edition." -msgstr "" +msgstr "Улучшить поиÑк при помощи РаÑширенного Глобального ПоиÑка и GitLab Enterprise Edition." msgid "Install a Runner compatible with GitLab CI" msgstr "УÑтановите Gitlab Runner ÑовмеÑтимый Ñ Gitlab CI" msgid "Instance" msgid_plural "Instances" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "ÐкземплÑÑ€" +msgstr[1] "ÐкземплÑра" +msgstr[2] "ÐкземплÑров" + +msgid "Instance does not support multiple Kubernetes clusters" +msgstr "" + +msgid "Interested parties can even contribute by pushing commits if they want to." +msgstr "" msgid "Internal - The group and any internal projects can be viewed by any logged in user." msgstr "Внутренний - Группу и включённые в неё проекты может видеть любой зарегиÑтрированный пользователь." @@ -1415,7 +1802,7 @@ msgid "Introducing Cycle Analytics" msgstr "Внедрение Цикла Ðналитик" msgid "Issue board focus mode" -msgstr "" +msgstr "Режим фокуÑировки над доÑкой обÑуждений" msgid "Issue events" msgstr "Ð¡Ð¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¾Ð±Ñуждений" @@ -1424,11 +1811,14 @@ msgid "IssueBoards|Board" msgstr "ДоÑка" msgid "IssueBoards|Boards" -msgstr "" +msgstr "ДоÑки" msgid "Issues" msgstr "ОбÑуждениÑ" +msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable." +msgstr "" + msgid "Jan" msgstr "Янв." @@ -1447,6 +1837,27 @@ msgstr "Июн." msgid "June" msgstr "Июнь" +msgid "Kubernetes" +msgstr "" + +msgid "Kubernetes Cluster" +msgstr "" + +msgid "Kubernetes cluster creation time exceeds timeout; %{timeout}" +msgstr "" + +msgid "Kubernetes cluster integration was not removed." +msgstr "" + +msgid "Kubernetes cluster integration was successfully removed." +msgstr "" + +msgid "Kubernetes cluster was successfully updated." +msgstr "" + +msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page" +msgstr "" + msgid "LFSStatus|Disabled" msgstr "Отключено" @@ -1456,6 +1867,9 @@ msgstr "Включено" msgid "Labels" msgstr "Метки" +msgid "Labels can be applied to issues and merge requests to categorize them." +msgstr "" + msgid "Last %d day" msgid_plural "Last %d days" msgstr[0] "ПоÑледний %d день" @@ -1486,6 +1900,9 @@ msgstr "Ð’Ñ‹ отправили в" msgid "LastPushEvent|at" msgstr "в" +msgid "Learn more" +msgstr "" + msgid "Learn more in the" msgstr "Узнайте больше в" @@ -1502,32 +1919,44 @@ msgid "Leave project" msgstr "Покинуть проект" msgid "License" -msgstr "" +msgstr "ЛицензиÑ" -msgid "Limited to showing %d event at most" -msgid_plural "Limited to showing %d events at most" -msgstr[0] "Показывать %d Ñобытие макÑимум" -msgstr[1] "Показывать %d ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¼Ð°ÐºÑимум" -msgstr[2] "Показывать %d Ñобытий макÑимум" +msgid "Loading the GitLab IDE..." +msgstr "" msgid "Lock" msgstr "Блокировка" +msgid "Lock %{issuableDisplayName}" +msgstr "" + +msgid "Lock this %{issuableDisplayName}? Only <strong>project members</strong> will be able to comment." +msgstr "" + msgid "Locked" msgstr "Заблокировано" msgid "Locked Files" -msgstr "" +msgstr "Заблокированные Файлы" msgid "Login" msgstr "Войти" +msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos." +msgstr "" + +msgid "Manage labels" +msgstr "" + msgid "Mar" msgstr "Мар." msgid "March" msgstr "Март" +msgid "Mark done" +msgstr "" + msgid "Maximum git storage failures" msgstr "МакÑимальное количеÑтво Ñбоев хранилища git" @@ -1540,6 +1969,9 @@ msgstr "Среднее" msgid "Members" msgstr "УчаÑтники" +msgid "Merge Request" +msgstr "" + msgid "Merge Requests" msgstr "ЗапроÑÑ‹ на СлиÑние" @@ -1549,9 +1981,30 @@ msgstr "Ð¡Ð¾Ð±Ñ‹Ñ‚Ð¸Ñ ÑлиÑний" msgid "Merge request" msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° ÑлиÑние" +msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others" +msgstr "" + +msgid "Merged" +msgstr "" + msgid "Messages" msgstr "СообщениÑ" +msgid "Milestone" +msgstr "" + +msgid "Milestones|Delete milestone" +msgstr "" + +msgid "Milestones|Delete milestone %{milestoneTitle}?" +msgstr "" + +msgid "Milestones|Failed to delete milestone %{milestoneTitle}" +msgstr "" + +msgid "Milestones|Milestone %{milestoneTitle} was not found" +msgstr "" + msgid "MissingSSHKeyWarningLink|add an SSH key" msgstr "добавить ключ SSH" @@ -1561,11 +2014,17 @@ msgstr "Мониторинг" msgid "More information is available|here" msgstr "Больше информации доÑтупно|тут" -msgid "Multiple issue boards" +msgid "Move" +msgstr "" + +msgid "Move issue" msgstr "" -msgid "New Cluster" -msgstr "Ðовый КлаÑтер" +msgid "Multiple issue boards" +msgstr "Сводные доÑки обÑуждений" + +msgid "Name new label" +msgstr "" msgid "New Issue" msgid_plural "New Issues" @@ -1573,6 +2032,12 @@ msgstr[0] "Ðовое ОбÑуждение" msgstr[1] "Ðовых ОбÑуждениÑ" msgstr[2] "Ðовых ОбÑуждений" +msgid "New Kubernetes Cluster" +msgstr "" + +msgid "New Kubernetes cluster" +msgstr "" + msgid "New Pipeline Schedule" msgstr "Ðовое РаÑпиÑание Сборочной Линии" @@ -1580,13 +2045,13 @@ msgid "New branch" msgstr "ÐÐ¾Ð²Ð°Ñ Ð²ÐµÑ‚ÐºÐ°" msgid "New branch unavailable" -msgstr "" +msgstr "ÐÐ¾Ð²Ð°Ñ Ð²ÐµÑ‚ÐºÐ° недоÑтупна" msgid "New directory" msgstr "Ðовый каталог" msgid "New epic" -msgstr "" +msgstr "Ðовый Ñпик" msgid "New file" msgstr "Ðовый файл" @@ -1597,6 +2062,9 @@ msgstr "ÐÐ¾Ð²Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°" msgid "New issue" msgstr "Ðовое обÑуждение" +msgid "New label" +msgstr "" + msgid "New merge request" msgstr "Ðовый Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° ÑлиÑние" @@ -1615,8 +2083,23 @@ msgstr "ÐÐ¾Ð²Ð°Ñ Ð¿Ð¾Ð´Ð³Ñ€ÑƒÐ¿Ð¿Ð°" msgid "New tag" msgstr "Ðовый тег" -msgid "No container images stored for this project. Add one by following the instructions above." -msgstr "Ðет образов контейнеров Ð´Ð»Ñ Ñтого проекта. Добавьте образ, ÑÐ»ÐµÐ´ÑƒÑ Ð¸Ð½ÑтрукциÑм выше." +msgid "No assignee" +msgstr "" + +msgid "No changes" +msgstr "" + +msgid "No connection could be made to a Gitaly Server, please check your logs!" +msgstr "" + +msgid "No due date" +msgstr "" + +msgid "No estimate or time spent" +msgstr "" + +msgid "No file chosen" +msgstr "" msgid "No repository" msgstr "Ðет репозиториÑ" @@ -1625,14 +2108,20 @@ msgid "No schedules" msgstr "Ðет раÑпиÑаний" msgid "No time spent" -msgstr "" +msgstr "Ðет затраченного времени" msgid "None" msgstr "ПуÑто" +msgid "Not allowed to merge" +msgstr "" + msgid "Not available" msgstr "ÐедоÑтупно" +msgid "Not confidential" +msgstr "" + msgid "Not enough data" msgstr "ÐедоÑтаточно данных" @@ -1693,6 +2182,12 @@ msgstr "ОтÑлеживать" msgid "Notifications" msgstr "УведомлениÑ" +msgid "Notifications off" +msgstr "" + +msgid "Notifications on" +msgstr "" + msgid "Nov" msgstr "ÐоÑб." @@ -1702,8 +2197,8 @@ msgstr "ÐоÑбрь" msgid "Number of access attempts" msgstr "КоличеÑтво попыток доÑтупа" -msgid "Number of failures before backing off" -msgstr "КоличеÑтво ошибок перед откатом" +msgid "OK" +msgstr "" msgid "Oct" msgstr "Окт." @@ -1717,9 +2212,12 @@ msgstr "Фильтр" msgid "Only project members can comment." msgstr "Только учаÑтники проекта могут оÑтавлÑÑ‚ÑŒ комментарии." -msgid "Opened" +msgid "Open" msgstr "" +msgid "Opened" +msgstr "Открыт" + msgid "OpenedNDaysAgo|Opened" msgstr "Открыто" @@ -1750,9 +2248,6 @@ msgstr "« ПерваÑ" msgid "Password" msgstr "Пароль" -msgid "People without permission will never get a notification and won\\'t be able to comment." -msgstr "Люди без разрешений не получат уведомление и не Ñмогут комментировать." - msgid "Pipeline" msgstr "Ð¡Ð±Ð¾Ñ€Ð¾Ñ‡Ð½Ð°Ñ Ð»Ð¸Ð½Ð¸Ñ" @@ -1766,7 +2261,7 @@ msgid "Pipeline Schedules" msgstr "РаÑпиÑÐ°Ð½Ð¸Ñ Ð¡Ð±Ð¾Ñ€Ð¾Ñ‡Ð½Ñ‹Ñ… Линий" msgid "Pipeline quota" -msgstr "" +msgstr "Квота Ñборочной линии" msgid "PipelineCharts|Failed:" msgstr "Ðеудача:" @@ -1795,12 +2290,6 @@ msgstr "Ð’Ñе" msgid "PipelineSchedules|Inactive" msgstr "Ðеактивно" -msgid "PipelineSchedules|Input variable key" -msgstr "Ввод ключевой переменной" - -msgid "PipelineSchedules|Input variable value" -msgstr "Ð’Ñтавить значение" - msgid "PipelineSchedules|Next Run" msgstr "Следующий запуÑк" @@ -1810,9 +2299,6 @@ msgstr "ОтÑутÑтвует" msgid "PipelineSchedules|Provide a short description for this pipeline" msgstr "ПредоÑтавьте краткое опиÑание Ñтой Ñборочной линии" -msgid "PipelineSchedules|Remove variable row" -msgstr "Удалить значение" - msgid "PipelineSchedules|Take ownership" msgstr "Стать владельцем" @@ -1840,6 +2326,12 @@ msgstr "Сборочные линии за поÑледнюю неделю" msgid "Pipelines for last year" msgstr "Сборочные линии за поÑледний год" +msgid "Pipelines|Build with confidence" +msgstr "" + +msgid "Pipelines|Get started with Pipelines" +msgstr "" + msgid "Pipeline|all" msgstr "вÑе" @@ -1852,12 +2344,21 @@ msgstr "Ñо Ñтадией" msgid "Pipeline|with stages" msgstr "Ñо ÑтадиÑми" -msgid "Please solve the reCAPTCHA" +msgid "Play" msgstr "" +msgid "Please <a href=%{link_to_billing} target=\"_blank\" rel=\"noopener noreferrer\">enable billing for one of your projects to be able to create a Kubernetes cluster</a>, then try again." +msgstr "" + +msgid "Please solve the reCAPTCHA" +msgstr "ПожалуйÑта, решите reCAPTCHA" + msgid "Preferences" msgstr "ПредпочтениÑ" +msgid "Primary" +msgstr "" + msgid "Private - Project access must be granted explicitly to each user." msgstr "Приватный - ДоÑтуп к проекту должен предоÑтавлÑÑ‚ÑŒÑÑ Ñвно каждому пользователю." @@ -1903,6 +2404,9 @@ msgstr "Ваша ÑƒÑ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ñ msgid "Profiles|your account" msgstr "ваша ÑƒÑ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ" +msgid "Programming languages used in this repository" +msgstr "" + msgid "Project '%{project_name}' is in the process of being deleted." msgstr "Проект '%{project_name}' находитÑÑ Ð² процеÑÑе удалениÑ." @@ -1918,6 +2422,15 @@ msgstr "Проект '%{project_name}' уÑпешно обновлен." msgid "Project access must be granted explicitly to each user." msgstr "ДоÑтуп к проекту должен предоÑтавлÑÑ‚ÑŒÑÑ Ñвно каждому пользователю." +msgid "Project avatar" +msgstr "" + +msgid "Project avatar in repository: %{link}" +msgstr "" + +msgid "Project cache successfully reset." +msgstr "" + msgid "Project details" msgstr "Детали проекта" @@ -1936,6 +2449,21 @@ msgstr "Ðачат ÑкÑпорт проекта. СÑылка Ð´Ð»Ñ Ñкачи msgid "ProjectActivityRSS|Subscribe" msgstr "ПодпиÑатьÑÑ" +msgid "ProjectCreationLevel|Allowed to create projects" +msgstr "" + +msgid "ProjectCreationLevel|Default project creation protection" +msgstr "" + +msgid "ProjectCreationLevel|Developers + Masters" +msgstr "" + +msgid "ProjectCreationLevel|Masters" +msgstr "" + +msgid "ProjectCreationLevel|No one" +msgstr "" + msgid "ProjectFeature|Disabled" msgstr "Отключено" @@ -1958,28 +2486,22 @@ msgid "ProjectNetworkGraph|Graph" msgstr "Граф" msgid "ProjectSettings|Contact an admin to change this setting." -msgstr "" - -msgid "ProjectSettings|Immediately run a pipeline on the default branch" -msgstr "" +msgstr "ОбратитеÑÑŒ к админиÑтратору Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñтой наÑтройки." msgid "ProjectSettings|Only signed commits can be pushed to this repository." -msgstr "" - -msgid "ProjectSettings|Problem setting up the CI/CD settings JavaScript" -msgstr "" +msgstr "Только подпиÑанные коммиты могут быть помещены в Ñтот репозиторий." msgid "ProjectSettings|This setting is applied on the server level and can be overridden by an admin." -msgstr "" +msgstr "Ðта наÑтройка применÑетÑÑ Ð½Ð° уровне Ñервера и может быть переопределена админиÑтратором." msgid "ProjectSettings|This setting is applied on the server level but has been overridden for this project." -msgstr "" +msgstr "Ðта наÑтройка применÑетÑÑ Ð½Ð° уровне Ñервера, но была переопределена Ð´Ð»Ñ Ñтого проекта." msgid "ProjectSettings|This setting will be applied to all projects unless overridden by an admin." -msgstr "" +msgstr "Ðта наÑтройка будет применена Ð´Ð»Ñ Ð²Ñех проектов, еÑли иное поведение не переопределено админиÑтратором." msgid "ProjectSettings|Users can only push commits to this repository that were committed with one of their own verified emails." -msgstr "" +msgstr "Пользователи могут отправлÑÑ‚ÑŒ коммиты в данный репозиторий, только в Ñлучае еÑли коммит подпиÑан одним из подтвержденных адреÑов почты." msgid "Projects" msgstr "Проекты" @@ -2006,36 +2528,39 @@ msgid "ProjectsDropdown|This feature requires browser localStorage support" msgstr "Ðта функциональноÑÑ‚ÑŒ требует поддержки localStorage в вашем браузере" msgid "PrometheusService|By default, Prometheus listens on ‘http://localhost:9090’. It’s not recommended to change the default address and port as this might affect or conflict with other services running on the GitLab server." -msgstr "" +msgstr "По умолчанию, Prometheus запуÑкаетÑÑ Ð¿Ð¾ адреÑу ‘http://localhost:9090’. Ðе рекомендуетÑÑ Ð¸Ð·Ð¼ÐµÐ½ÑÑ‚ÑŒ Ð°Ð´Ñ€ÐµÑ Ð¸ порт по умолчанию, так как Ñто может привеÑти к конфликту Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼ ÑервиÑами запущенными на GitLab Ñервере." msgid "PrometheusService|Finding and configuring metrics..." -msgstr "" +msgstr "Определение и наÑтройка метрик..." msgid "PrometheusService|Metrics" -msgstr "" +msgstr "Метрики" msgid "PrometheusService|Metrics are automatically configured and monitored based on a library of metrics from popular exporters." -msgstr "" +msgstr "Метрики автоматичеÑки наÑтраиваютÑÑ Ð¸ отÑлеживаютÑÑ Ð½Ð° оÑнове популÑрных библиотек метрик." msgid "PrometheusService|Missing environment variable" -msgstr "" +msgstr "Пропущена Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ" msgid "PrometheusService|Monitored" -msgstr "" +msgstr "Мониторинг подключен" msgid "PrometheusService|More information" -msgstr "" +msgstr "Ð”Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ" msgid "PrometheusService|No metrics are being monitored. To start monitoring, deploy to an environment." -msgstr "" +msgstr "Ðи одной метрики не отÑлеживаетÑÑ. Ð”Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° мониторинга разверните окружение." msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/" -msgstr "" +msgstr "Базовый Ð°Ð´Ñ€ÐµÑ Prometheus API, например http://prometheus.example.com/" msgid "PrometheusService|Time-series monitoring service" msgstr "" msgid "PrometheusService|View environments" +msgstr "ПроÑмотр окружений" + +msgid "Protip:" msgstr "" msgid "Public - The group and any public projects can be viewed without any authentication." @@ -2045,12 +2570,15 @@ msgid "Public - The project can be accessed without any authentication." msgstr "Публичный - ДоÑтуп к проекту возможен без какой-либо проверки подлинноÑти." msgid "Push Rules" -msgstr "" +msgstr "Правила Отправки" msgid "Push events" msgstr "Ð¡Ð¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸" msgid "PushRule|Committer restriction" +msgstr "ÐžÐ³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¼Ð¸Ñ‚ÐµÑ€Ð°" + +msgid "Quick actions can be used in the issues description and comment boxes." msgstr "" msgid "Read more" @@ -2065,9 +2593,15 @@ msgstr "Ветки" msgid "RefSwitcher|Tags" msgstr "Теги" -msgid "Registry" +msgid "Reference:" msgstr "" +msgid "Register / Sign In" +msgstr "" + +msgid "Registry" +msgstr "РееÑÑ‚Ñ€" + msgid "Related Commits" msgstr "СвÑзанные коммиты" @@ -2089,9 +2623,18 @@ msgstr "СвÑзанные Влитые ЗапроÑÑ‹" msgid "Remind later" msgstr "Ðапомнить позже" +msgid "Remove" +msgstr "" + +msgid "Remove avatar" +msgstr "" + msgid "Remove project" msgstr "Удалить проект" +msgid "Repair authentication" +msgstr "" + msgid "Repository" msgstr "Репозиторий" @@ -2107,6 +2650,12 @@ msgstr "СброÑить ключ доÑтупа проверки Ñ€Ð°Ð±Ð¾Ñ‚Ð¾Ñ msgid "Reset runners registration token" msgstr "СброÑить ключ региÑтрации Gitlab Runners" +msgid "Reveal value" +msgid_plural "Reveal values" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + msgid "Revert this commit" msgstr "Отменить Ñто коммит" @@ -2116,15 +2665,15 @@ msgstr "Отменить Ñтот Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° ÑлиÑние" msgid "SSH Keys" msgstr "SSH Ключи" -msgid "Save" -msgstr "Сохранить" - msgid "Save changes" msgstr "Сохранить изменениÑ" msgid "Save pipeline schedule" msgstr "Сохранить раÑпиÑание Ñборочной лини" +msgid "Save variables" +msgstr "" + msgid "Schedule a new pipeline" msgstr "РаÑпиÑание новой Ñборочной линии" @@ -2135,43 +2684,64 @@ msgid "Scheduling Pipelines" msgstr "Планирование Сборочных Линий" msgid "Scoped issue boards" -msgstr "" +msgstr "ТематичеÑкие доÑки обÑуждений" msgid "Search branches and tags" msgstr "Ðайти ветки и теги" +msgid "Search milestones" +msgstr "" + +msgid "Search project" +msgstr "" + +msgid "Search users" +msgstr "" + msgid "Seconds before reseting failure information" msgstr "Секунд до очиÑтки информации о ÑбоÑÑ…" -msgid "Seconds to wait after a storage failure" -msgstr "Секунд задержки поÑле ÑÐ±Ð¾Ñ Ð² хранилище" - msgid "Seconds to wait for a storage access attempt" msgstr "Секунд задержки между попытками доÑтупа к хранилищу" +msgid "Secret variables" +msgstr "" + msgid "Select Archive Format" msgstr "Выбрать формат архива" msgid "Select a timezone" msgstr "Выбор временной зоны" +msgid "Select assignee" +msgstr "" + +msgid "Select branch/tag" +msgstr "" + msgid "Select target branch" msgstr "Выбор целевой ветки" +msgid "Selective synchronization" +msgstr "" + msgid "Sep" msgstr "Сент." msgid "September" msgstr "СентÑбрь" +msgid "Server version" +msgstr "" + msgid "Service Templates" msgstr "Шаблоны Служб" msgid "Set a password on your account to pull or push via %{protocol}." msgstr "УÑтановите пароль в Ñвоем аккаунте, чтобы отправлÑÑ‚ÑŒ или получать код через %{protocol}." -msgid "Set up CI" -msgstr "ÐаÑтройка CI" +msgid "Set up CI/CD" +msgstr "" msgid "Set up Koding" msgstr "ÐаÑтройка Koding" @@ -2185,6 +2755,15 @@ msgstr "уÑтановите пароль" msgid "Settings" msgstr "ÐаÑтройки" +msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero." +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset pipeline minutes" +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset used pipeline minutes" +msgstr "" + msgid "Show parent pages" msgstr "Показать родительÑкие Ñтраницы" @@ -2198,27 +2777,33 @@ msgstr[1] "Показано %d Ñобытий" msgstr[2] "Показано %d Ñобытий" msgid "Sidebar|Change weight" -msgstr "" - -msgid "Sidebar|Edit" -msgstr "" +msgstr "Изменить веÑ" msgid "Sidebar|No" -msgstr "" +msgstr "Ðет" msgid "Sidebar|None" -msgstr "" +msgstr "ОтÑутÑтвует" msgid "Sidebar|Weight" -msgstr "" +msgstr "ВеÑ" msgid "Snippets" msgstr "Сниппеты" +msgid "Something went wrong on our end" +msgstr "" + msgid "Something went wrong on our end." msgstr "У Ð½Ð°Ñ Ñ‡Ñ‚Ð¾-то пошло не так." +msgid "Something went wrong trying to change the confidentiality of this issue" +msgstr "" + msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}" +msgstr "Что-то пошло не так при попытке Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑоÑтоÑÐ½Ð¸Ñ Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²ÐºÐ¸ ${this.issuableDisplayName}" + +msgid "Something went wrong when toggling the button" msgstr "" msgid "Something went wrong while fetching the projects." @@ -2227,6 +2812,9 @@ msgstr "Что-то пошло не так при получении Ð¿Ñ€Ð¾ÐµÐºÑ msgid "Something went wrong while fetching the registry list." msgstr "Что-то пошло не так при получении ÑпиÑка рееÑтров." +msgid "Something went wrong. Please try again." +msgstr "" + msgid "Sort by" msgstr "Сортировать по" @@ -2270,7 +2858,7 @@ msgid "SortOptions|Least popular" msgstr "Ðаименее популÑрный" msgid "SortOptions|Less weight" -msgstr "" +msgstr "Меньший веÑ" msgid "SortOptions|Milestone" msgstr "Веха" @@ -2282,7 +2870,7 @@ msgid "SortOptions|Milestone due soon" msgstr "Веха, наÑÑ‚ÑƒÐ¿Ð°ÑŽÑ‰Ð°Ñ Ñ€Ð°Ð½ÑŒÑˆÐµ" msgid "SortOptions|More weight" -msgstr "" +msgstr "Больший веÑ" msgid "SortOptions|Most popular" msgstr "Ðаиболее популÑрный" @@ -2324,7 +2912,7 @@ msgid "SortOptions|Start soon" msgstr "Ðачатые недавно" msgid "SortOptions|Weight" -msgstr "" +msgstr "ВеÑ" msgid "Source" msgstr "ИÑточник" @@ -2333,7 +2921,7 @@ msgid "Source code" msgstr "ИÑходный код" msgid "Source is not available" -msgstr "" +msgstr "ИÑходный текÑÑ‚ недоÑтупен" msgid "Spam Logs" msgstr "Спам Логи" @@ -2354,14 +2942,14 @@ msgid "Start the Runner!" msgstr "ЗапуÑтить GitLab Runner!" msgid "Stopped" +msgstr "ОÑтановлен" + +msgid "Storage" msgstr "" msgid "Subgroups" msgstr "Подгруппы" -msgid "Subscribe" -msgstr "ПодпиÑатьÑÑ" - msgid "Switch branch/tag" msgstr "Переключить ветка/тег" @@ -2378,52 +2966,52 @@ msgid "Tags" msgstr "Теги" msgid "TagsPage|Browse commits" -msgstr "" +msgstr "ПроÑмотреть коммиты" msgid "TagsPage|Browse files" -msgstr "" +msgstr "ПроÑмотреть файлы" msgid "TagsPage|Can't find HEAD commit for this tag" -msgstr "" +msgstr "Ðевозможно найти HEAD коммит Ð´Ð»Ñ Ñтого тега" msgid "TagsPage|Cancel" -msgstr "" +msgstr "Отмена" msgid "TagsPage|Create tag" -msgstr "" +msgstr "Создать тег" msgid "TagsPage|Delete tag" -msgstr "" +msgstr "Удалить тег" msgid "TagsPage|Deleting the %{tag_name} tag cannot be undone. Are you sure?" -msgstr "" +msgstr "Удаление тега %{tag_name} не может быть отменено. Ð’Ñ‹ уверены?" msgid "TagsPage|Edit release notes" -msgstr "" +msgstr "Редактировать заметки к релизу" msgid "TagsPage|Existing branch name, tag, or commit SHA" -msgstr "" +msgstr "Ð˜Ð¼Ñ ÑущеÑтвующей ветки, тега или SHA коммита" msgid "TagsPage|Filter by tag name" -msgstr "" +msgstr "Фильтр по имени тега" msgid "TagsPage|New Tag" -msgstr "" +msgstr "Ðовый Тег" msgid "TagsPage|New tag" -msgstr "" +msgstr "Ðовый тег" msgid "TagsPage|Optionally, add a message to the tag." -msgstr "" +msgstr "При желании вы можете добавить Ñообщение в тег." msgid "TagsPage|Optionally, add release notes to the tag. They will be stored in the GitLab database and displayed on the tags page." -msgstr "" +msgstr "Опционально, добавьте опиÑание релиза к тегу. Оно будет Ñохранено в базе данных GitLab и отобразитÑÑ Ð½Ð° Ñтранице тегов." msgid "TagsPage|Release notes" -msgstr "" +msgstr "Заметки к релизу" msgid "TagsPage|Repository has no tags yet." -msgstr "" +msgstr "Репозитарий не Ñодержит тегов." msgid "TagsPage|Sort by" msgstr "Сортировать по" @@ -2432,19 +3020,19 @@ msgid "TagsPage|Tags" msgstr "Теги" msgid "TagsPage|Tags give the ability to mark specific points in history as being important" -msgstr "" +msgstr "Теги дают возможноÑÑ‚ÑŒ отмечать определенные точки в иÑтории как важные" msgid "TagsPage|This tag has no release notes." -msgstr "" +msgstr "Ðтот тег не Ñодержит заметок к релизу." msgid "TagsPage|Use git tag command to add a new one:" -msgstr "" +msgstr "ИÑпользуйте команду git tag, чтобы добавить новый тег:" msgid "TagsPage|Write your release notes or drag files here..." -msgstr "" +msgstr "Ðапишите Ñвои заметки к релизу или перетащите файлы Ñюда..." msgid "TagsPage|protected" -msgstr "" +msgstr "защищенный" msgid "Target Branch" msgstr "Ветка" @@ -2453,13 +3041,16 @@ msgid "Team" msgstr "Команда" msgid "Thanks! Don't show me this again" -msgstr "" +msgstr "СпаÑибо! Больше не показывайте мне Ñто Ñообщение" msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project." +msgstr "РаÑширенный глобальный поиÑк в GitLab - Ñто мощный инÑтрумент Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка, который Ñокращает ваше времÑ. ВмеÑто ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð´ÑƒÐ±Ð»Ð¸Ñ€ÑƒÑŽÑ‰ÐµÐ³Ð¾ кода и траты времени, вы можете иÑкать код внутри других команд, который поможет вам в вашем проекте." + +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project" msgstr "" -msgid "The circuitbreaker backoff threshold should be lower than the failure count threshold" -msgstr "Порог ÑÑ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¡ircuitBreaker должен быть меньше, чем порог ÑÑ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑбоÑ" +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project." +msgstr "" msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request." msgstr "Ðтап напиÑÐ°Ð½Ð¸Ñ ÐºÐ¾Ð´Ð° показывает Ð²Ñ€ÐµÐ¼Ñ Ñ Ð¿ÐµÑ€Ð²Ð¾Ð³Ð¾ коммита до ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñа на ÑлиÑние. Данные автоматичеÑки добавÑÑ‚ÑÑ Ñюда поÑле того, как вы Ñоздать Ñвой первый Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° ÑлиÑние." @@ -2473,21 +3064,18 @@ msgstr "СвÑзь Ñ Ð¾Ñ‚Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ удалена." msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage." msgstr "Ð¡Ñ‚Ð°Ð´Ð¸Ñ Ð¾Ð±ÑÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ Ð¿Ð¾ÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ времÑ, которое потребуетÑÑ Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ‚Ð° ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±ÑÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ Ð´Ð¾ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¾Ð±Ñуждению вехи, или Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±ÑÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ Ð½Ð° вашу доÑку задач. Ðачните Ñоздавать обÑуждениÑ, чтобы увидеть ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñтой Ñтадии." +msgid "The maximum file size allowed is 200KB." +msgstr "" + msgid "The number of attempts GitLab will make to access a storage." msgstr "КоличеÑтво попыток, которые GitLab будет предпринимать Ð´Ð»Ñ Ð´Ð¾Ñтупа к хранилищу." -msgid "The number of failures after which GitLab will start temporarily disabling access to a storage shard on a host" -msgstr "КоличеÑтво ошибок, поÑле которого GitLab начнёт временно отключать доÑтуп к шарду хранилища на хоÑте" - msgid "The number of failures of after which GitLab will completely prevent access to the storage. The number of failures can be reset in the admin interface: %{link_to_health_page} or using the %{api_documentation_link}." msgstr "КоличеÑтво Ñбоев, поÑле которого Gitlab полноÑтью прекратит доÑтуп к хранилищу. Изменение Ñчётчика \"количеÑтво Ñбоев\" может быть произведено через админиÑтративный интерфейÑ: %{link_to_health_page} или при помощи API %{api_documentation_link}." msgid "The phase of the development lifecycle." msgstr "Фаза жизненного цикла разработки." -msgid "The pipelines schedule runs pipelines in the future, repeatedly, for specific branches or tags. Those scheduled pipelines will inherit limited project access based on their associated user." -msgstr "РаÑпиÑание Ñборочных линий регулÑрно запуÑкает Ñборочные линии Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð½Ñ‹Ñ… ветвей или тегов. Запланированные Ñборочные линии наÑледуют Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð½Ð° доÑтуп к проекту на оÑнове ÑвÑзанного Ñ Ð½Ð¸Ð¼Ð¸ пользователÑ." - msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit." msgstr "Ðтап Ð¿Ð»Ð°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð²Ñ€ÐµÐ¼Ñ Ð¾Ñ‚ предыдущего шага до отправки первого коммита. ДобавлÑетÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑки, как только отправите Ñвой первый коммит." @@ -2518,20 +3106,47 @@ msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð² Ñекундах, в течение которого GitLa msgid "The time in seconds GitLab will try to access storage. After this time a timeout error will be raised." msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð² Ñекундах в течении которого GitLab будет пытатьÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ доÑтуп к хранилищу. ПоÑле Ñтого времени будет зафикÑирована ошибка Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐµÐ½Ð¸Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ ожиданиÑ." +msgid "The time in seconds between storage checks. When a previous check did complete yet, GitLab will skip a check." +msgstr "" + msgid "The time taken by each data entry gathered by that stage." msgstr "ВремÑ, затраченное каждым Ñлементом, Ñобранным на Ñтом Ñтапе." msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6." msgstr "Среднее значение в Ñ€Ñду. Пример: между 3, 5, 9, Ñреднее 5, между 3, 5, 7, 8, Ñреднее (5+7)/2 = 6." +msgid "There are no issues to show" +msgstr "" + +msgid "There are no merge requests to show" +msgstr "" + msgid "There are problems accessing Git storage: " msgstr "Проблемы Ñ Ð´Ð¾Ñтупом к Git хранилищу: " -msgid "This board\\'s scope is reduced" +msgid "There was an error loading users activity calendar." msgstr "" -msgid "This branch has changed since you started editing. Would you like to create a new branch?" -msgstr "Ðта ветка была изменена, пока вы её редактировали. Ð’Ñ‹ хотите Ñоздать новую ветку?" +msgid "There was an error saving your notification settings." +msgstr "" + +msgid "There was an error subscribing to this label." +msgstr "" + +msgid "There was an error when reseting email token." +msgstr "" + +msgid "There was an error when subscribing to this label." +msgstr "" + +msgid "There was an error when unsubscribing from this label." +msgstr "" + +msgid "This board\\'s scope is reduced" +msgstr "УÑтановлен отбор" + +msgid "This directory" +msgstr "" msgid "This is a confidential issue." msgstr "Ðто конфиденциальное обÑуждение." @@ -2539,21 +3154,48 @@ msgstr "Ðто конфиденциальное обÑуждение." msgid "This is the author's first Merge Request to this project." msgstr "Ðто первый Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° ÑлиÑние от автора в Ñтот проект." +msgid "This issue is confidential" +msgstr "" + msgid "This issue is confidential and locked." msgstr "Ðто обÑуждение конфиденциально и заблокировано." msgid "This issue is locked." msgstr "ОбÑуждение заблокировано." +msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments" +msgstr "" + +msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered" +msgstr "" + +msgid "This job has not been triggered yet" +msgstr "" + +msgid "This job has not started yet" +msgstr "" + +msgid "This job is in pending state and is waiting to be picked by a runner" +msgstr "" + +msgid "This job requires a manual action" +msgstr "" + msgid "This means you can not push code until you create an empty repository or import existing one." msgstr "Ðто означает, что вы не можете отправить код, пока не Ñоздадите пуÑтой репозиторий или не импортируете ÑущеÑтвующий." msgid "This merge request is locked." msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° ÑлиÑние заблокирован." -msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here." +msgid "This project" +msgstr "" + +msgid "This repository" msgstr "" +msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here." +msgstr "Ðти Ñлектронные пиÑьма автоматичеÑки преобразуютÑÑ Ð² обÑÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ (комментарии раÑÑылаютÑÑ ÐºÐ°Ðº ветвь обÑÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ Ð² почте), перечиÑленные здеÑÑŒ." + msgid "Time before an issue gets scheduled" msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð´Ð¾ начала Ð¿Ð¾Ð¿Ð°Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±ÑÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ Ð² планировщик" @@ -2563,9 +3205,21 @@ msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð´Ð¾ начала работы над обÑуждением" msgid "Time between merge request creation and merge/close" msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð¼ÐµÐ¶Ð´Ñƒ Ñозданием запроÑа ÑлиÑÐ½Ð¸Ñ Ð¸ ÑлиÑнием / закрытием" +msgid "Time tracking" +msgstr "" + msgid "Time until first merge request" msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð´Ð¾ первого запроÑа на ÑлиÑние" +msgid "TimeTrackingEstimated|Est" +msgstr "" + +msgid "TimeTracking|Estimated:" +msgstr "" + +msgid "TimeTracking|Spent" +msgstr "" + msgid "Timeago|%s days ago" msgstr "%s дней назад" @@ -2705,52 +3359,85 @@ msgid "Time|s" msgstr "Ñ" msgid "Title" +msgstr "Заголовок" + +msgid "Todo" +msgstr "" + +msgid "Toggle sidebar" +msgstr "" + +msgid "ToggleButton|Toggle Status: OFF" +msgstr "" + +msgid "ToggleButton|Toggle Status: ON" msgstr "" msgid "Total Time" msgstr "Общее времÑ" msgid "Total issue time spent" -msgstr "" +msgstr "Общее времÑ, затраченное на обÑуждение" msgid "Total test time for all commits/merges" msgstr "Общее Ð²Ñ€ÐµÐ¼Ñ Ñ‚ÐµÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ„Ð¸ÐºÑаций/ÑлиÑний" msgid "Track activity with Contribution Analytics." -msgstr "" +msgstr "ОтÑлеживать активноÑÑ‚ÑŒ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ðналитики УчаÑтников." msgid "Track groups of issues that share a theme, across projects and milestones" +msgstr "Следите за обÑуждениÑми, Ñгруппированными по темам, Ñразу из неÑкольких проектов и Ñтапов" + +msgid "Total: %{total}" +msgstr "" + +msgid "Track time with quick actions" +msgstr "" + +msgid "Trigger this manual action" msgstr "" msgid "Turn on Service Desk" +msgstr "Включить Службу Поддержки" + +msgid "Type %{value} to confirm:" +msgstr "" + +msgid "Unable to reset project cache." +msgstr "" + +msgid "Unknown" msgstr "" msgid "Unlock" msgstr "Разблокировать" +msgid "Unlock this %{issuableDisplayName}? <strong>Everyone</strong> will be able to comment." +msgstr "" + msgid "Unlocked" msgstr "Разблокировано" msgid "Unstar" msgstr "СнÑÑ‚ÑŒ отметку" -msgid "Unsubscribe" -msgstr "ОтпиÑатьÑÑ" +msgid "Up to date" +msgstr "" msgid "Upgrade your plan to activate Advanced Global Search." -msgstr "" +msgstr "ПовыÑьте ваш тарифный план, чтобы активировать Улучшенный Глобальный ПоиÑк." msgid "Upgrade your plan to activate Contribution Analytics." -msgstr "" +msgstr "ПовыÑьте ваш тарифный план, чтобы активировать Ðналитики УчаÑтников." msgid "Upgrade your plan to activate Group Webhooks." -msgstr "" +msgstr "ПовыÑьте ваш тарифный план, чтобы активировать Групповые Веб-Обработчики." msgid "Upgrade your plan to activate Issue weight." -msgstr "" +msgstr "ПовыÑьте ваш тарифный план чтобы активировать Ð²ÐµÑ Ð¾Ð±Ñуждений." msgid "Upgrade your plan to improve Issue boards." -msgstr "" +msgstr "ПовыÑьте ваш тарифный план, чтобы улучшить доÑки обÑуждений." msgid "Upload New File" msgstr "Загрузить новый файл" @@ -2758,11 +3445,14 @@ msgstr "Загрузить новый файл" msgid "Upload file" msgstr "Загрузить файл" +msgid "Upload new avatar" +msgstr "" + msgid "UploadLink|click to upload" msgstr "кликните Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸" msgid "Use Service Desk to connect with your users (e.g. to offer customer support) through email right inside GitLab" -msgstr "" +msgstr "ИÑпользуйте Службу поддержки Ð´Ð»Ñ ÑвÑзи Ñ Ð²Ð°ÑˆÐ¸Ð¼Ð¸ пользователÑми (например, Ð´Ð»Ñ Ð¾ÑущеÑÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ клиентов) через Ñлектронную почту непоÑредÑтвенно в GitLab" msgid "Use the following registration token during setup:" msgstr "ИÑпользуйте Ñледующий токен региÑтрации в процеÑÑе уÑтановки:" @@ -2770,9 +3460,15 @@ msgstr "ИÑпользуйте Ñледующий токен региÑтрацРmsgid "Use your global notification setting" msgstr "ИÑпользуютÑÑ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ наÑтройки уведомлений" +msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want." +msgstr "" + msgid "View file @ " msgstr "ПроÑмотр файла @ " +msgid "View labels" +msgstr "" + msgid "View open merge request" msgstr "ПроÑмотреть открытый Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° ÑлиÑние" @@ -2794,20 +3490,20 @@ msgstr "Ðе определен" msgid "Want to see the data? Please ask an administrator for access." msgstr "Хотите увидеть данные? ОбратитеÑÑŒ к админиÑтратору за доÑтупом." +msgid "We could not verify that one of your projects on GCP has billing enabled. Please try again." +msgstr "" + msgid "We don't have enough data to show this stage." msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¿Ð¾ Ñтапу отÑутÑтвует." msgid "We want to be sure it is you, please confirm you are not a robot." -msgstr "" +msgstr "Мы хотим быть уверены, что Ñто вы, пожалуйÑта, подтвердите, что вы не робот." msgid "Webhooks allow you to trigger a URL if, for example, new code is pushed or a new issue is created. You can configure webhooks to listen for specific events like pushes, issues or merge requests. Group webhooks will apply to all projects in a group, allowing you to standardize webhook functionality across your entire group." -msgstr "" +msgstr "Веб-обработчики позволÑÑŽÑ‚ вам вызывать Ð°Ð´Ñ€ÐµÑ URL еÑли, например, отправлен новый код или Ñоздано новое обÑуждение. Ð’Ñ‹ можете наÑтроить веб-обработчики так, чтобы они реагировали на определённые ÑобытиÑ, такие как отправки кода, обÑÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ запроÑÑ‹ на ÑлиÑние. Групповые веб-обработчики применÑÑŽÑ‚ÑÑ ÐºÐ¾ вÑем проектам в группе и позволÑÑŽÑ‚ вам Ñтандартизовать функциональноÑÑ‚ÑŒ веб-обработчиков Ð´Ð»Ñ Ð²Ñей вашей группы." msgid "Weight" -msgstr "" - -msgid "When access to a storage fails. GitLab will prevent access to the storage for the time specified here. This allows the filesystem to recover. Repositories on failing shards are temporarly unavailable" -msgstr "Когда доÑтуп к хранилищу получить не удалоÑÑŒ, GitLab приоÑтановит доÑтуп к хранилищу на времÑ, указанное здеÑÑŒ. Ðто позволит файловой ÑиÑтеме воÑÑтановитьÑÑ. Репозитории на Ñбойных \"шардах\" будут временно недоÑтупны" +msgstr "ВеÑ" msgid "Wiki" msgstr "Wiki" @@ -2827,6 +3523,12 @@ msgstr "РекомендуетÑÑ ÑƒÑтановить %{markdown}, чтобы msgid "WikiClone|Start Gollum and edit locally" msgstr "ЗапуÑтите Gollum и редактируете локально" +msgid "WikiEditPageTip|Tip: You can move this page by adding the path to the beginning of the title." +msgstr "" + +msgid "WikiEdit|There is already a page with the same title in that path." +msgstr "" + msgid "WikiEmptyPageError|You are not allowed to create wiki pages" msgstr "Ð’Ñ‹ не можете Ñоздавать вики-Ñтраницы" @@ -2912,7 +3614,7 @@ msgid "Wiki|Wiki Pages" msgstr "Вики Страницы" msgid "With contribution analytics you can have an overview for the activity of issues, merge requests and push events of your organization and its members." -msgstr "" +msgstr "С аналитикой учаÑтников вы можете изучать активноÑÑ‚ÑŒ в обÑуждениÑÑ…, запроÑах на ÑлиÑние и Ñобытий отправки кода Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ¹ организации и её учаÑтников." msgid "Withdraw Access Request" msgstr "Отменить Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð´Ð¾Ñтупа" @@ -2929,12 +3631,24 @@ msgstr "Ð’Ñ‹ ÑобираетеÑÑŒ удалить ÑвÑзь ответвлен msgid "You are going to transfer %{project_name_with_namespace} to another owner. Are you ABSOLUTELY sure?" msgstr "Ð’Ñ‹ ÑобираетеÑÑŒ передать проект %{project_name_with_namespace} другому владельцу. Ð’Ñ‹ ÐБСОЛЮТÐО уверены?" +msgid "You can also star a label to make it a priority label." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + msgid "You can only add files when you are on a branch" msgstr "Ð’Ñ‹ можете добавлÑÑ‚ÑŒ только файлы, когда находитеÑÑŒ в ветке" -msgid "You cannot write to a read-only secondary GitLab Geo instance. Please use %{link_to_primary_node} instead." +msgid "You can only edit files when you are on a branch" msgstr "" +msgid "You cannot write to a read-only secondary GitLab Geo instance. Please use %{link_to_primary_node} instead." +msgstr "Ð’Ñ‹ не можете запиÑывать на подчиненные ÑкземплÑры \"только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ\" клаÑтера GitLab Geo. ИÑпользуйте вмеÑто Ñтого %{link_to_primary_node}." + msgid "You cannot write to this read-only GitLab instance." msgstr "Ð’Ñ‹ не можете запиÑывать на Ñтот ÑкземплÑÑ€ \"только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ\" клаÑтера GitLab." @@ -2969,6 +3683,12 @@ msgid "You won't be able to pull or push project code via SSH until you %{add_ss msgstr "Ð’Ñ‹ не Ñможете получать и отправлÑÑ‚ÑŒ код проекта через SSH пока %{add_ssh_key_link} в ваш профиль." msgid "You won't be able to pull or push project code via SSH until you add an SSH key to your profile" +msgstr "Ð’Ñ‹ не Ñможете работать Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¾Ð¼ через SSH, пока не добавите в Ñвой профиль SSH ключ" + +msgid "You'll need to use different branch names to get a valid comparison." +msgstr "" + +msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure" msgstr "" msgid "Your comment will not be visible to the public." @@ -2983,13 +3703,67 @@ msgstr "Ваше имÑ" msgid "Your projects" msgstr "Ваши проекты" -msgid "branch name" +msgid "assign yourself" msgstr "" +msgid "branch name" +msgstr "Ð¸Ð¼Ñ Ð²ÐµÑ‚Ð²Ð¸" + msgid "by" +msgstr "по" + +msgid "ciReport|Code quality" +msgstr "" + +msgid "ciReport|DAST detected no alerts by analyzing the review app" +msgstr "" + +msgid "ciReport|Failed to load ${type} report" +msgstr "" + +msgid "ciReport|Fixed:" +msgstr "" + +msgid "ciReport|Instances" +msgstr "" + +msgid "ciReport|Learn more about whitelisting" +msgstr "" + +msgid "ciReport|Loading ${type} report" +msgstr "" + +msgid "ciReport|No changes to code quality" +msgstr "" + +msgid "ciReport|No changes to performance metrics" +msgstr "" + +msgid "ciReport|Performance metrics" +msgstr "" + +msgid "ciReport|SAST" +msgstr "" + +msgid "ciReport|SAST detected no security vulnerabilities" +msgstr "" + +msgid "ciReport|SAST:container no vulnerabilities were found" +msgstr "" + +msgid "ciReport|Show complete code vulnerabilities report" +msgstr "" + +msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}" msgstr "" msgid "commit" +msgstr "коммит" + +msgid "confidentiality|You are going to turn off the confidentiality. This means <strong>everyone</strong> will be able to see and leave a comment on this issue." +msgstr "" + +msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with <strong>at least Reporter access</strong> are able to see and leave comments on the issue." msgstr "" msgid "day" @@ -2998,12 +3772,153 @@ msgstr[0] "день" msgstr[1] "дней" msgstr[2] "дней" +msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command." +msgstr "" + +msgid "merge request" +msgid_plural "merge requests" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "mrWidget|Cancel automatic merge" +msgstr "" + +msgid "mrWidget|Check out branch" +msgstr "" + +msgid "mrWidget|Checking ability to merge automatically" +msgstr "" + +msgid "mrWidget|Cherry-pick" +msgstr "" + +msgid "mrWidget|Cherry-pick this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Closed" +msgstr "" + +msgid "mrWidget|Closed by" +msgstr "" + +msgid "mrWidget|Closes" +msgstr "" + +msgid "mrWidget|Did not close" +msgstr "" + +msgid "mrWidget|Email patches" +msgstr "" + +msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|Mentions" +msgstr "" + +msgid "mrWidget|Merge" +msgstr "" + +msgid "mrWidget|Merge failed." +msgstr "" + +msgid "mrWidget|Merge locally" +msgstr "" + +msgid "mrWidget|Merged by" +msgstr "" + +msgid "mrWidget|Plain diff" +msgstr "" + +msgid "mrWidget|Refresh" +msgstr "" + +msgid "mrWidget|Refresh now" +msgstr "" + +msgid "mrWidget|Refreshing now" +msgstr "" + +msgid "mrWidget|Remove Source Branch" +msgstr "" + +msgid "mrWidget|Remove source branch" +msgstr "" + +msgid "mrWidget|Request to merge" +msgstr "" + +msgid "mrWidget|Resolve conflicts" +msgstr "" + +msgid "mrWidget|Revert" +msgstr "" + +msgid "mrWidget|Revert this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Set by" +msgstr "" + +msgid "mrWidget|The changes were merged into" +msgstr "" + +msgid "mrWidget|The changes were not merged into" +msgstr "" + +msgid "mrWidget|The changes will be merged into" +msgstr "" + +msgid "mrWidget|The source branch has been removed" +msgstr "" + +msgid "mrWidget|The source branch is being removed" +msgstr "" + +msgid "mrWidget|The source branch will be removed" +msgstr "" + +msgid "mrWidget|The source branch will not be removed" +msgstr "" + +msgid "mrWidget|There are merge conflicts" +msgstr "" + +msgid "mrWidget|This merge request failed to be merged automatically" +msgstr "" + +msgid "mrWidget|This merge request is in the process of being merged" +msgstr "" + +msgid "mrWidget|This project is archived, write access has been disabled" +msgstr "" + +msgid "mrWidget|You can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|You can remove source branch now" +msgstr "" + +msgid "mrWidget|command line" +msgstr "" + +msgid "mrWidget|into" +msgstr "" + +msgid "mrWidget|to be merged automatically when the pipeline succeeds" +msgstr "" + msgid "new merge request" msgstr "новый Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° ÑлиÑние" msgid "notification emails" msgstr "email Ð´Ð»Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ð¹" +msgid "or" +msgstr "" + msgid "parent" msgid_plural "parents" msgstr[0] "иÑточник" @@ -3016,12 +3931,21 @@ msgstr "пароль" msgid "personal access token" msgstr "токен Ð´Ð»Ñ Ð¿ÐµÑ€Ñонального доÑтупа" +msgid "remove due date" +msgstr "" + msgid "source" +msgstr "иÑходный текÑÑ‚" + +msgid "spendCommand|%{slash_command} will update the sum of the time spent." msgstr "" msgid "to help your contributors communicate effectively!" -msgstr "" +msgstr "чтобы помочь учаÑтникам взаимодейÑтвовать Ñффективнее!" msgid "username" msgstr "Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ" +msgid "uses Kubernetes clusters to deploy your code!" +msgstr "" + diff --git a/locale/uk/gitlab.po b/locale/uk/gitlab.po index 0f20f0c9ceb..f775a511780 100644 --- a/locale/uk/gitlab.po +++ b/locale/uk/gitlab.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: gitlab-ee\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-12-12 18:31+0000\n" -"PO-Revision-Date: 2018-01-05 06:39-0500\n" +"POT-Creation-Date: 2018-02-07 11:38-0600\n" +"PO-Revision-Date: 2018-02-12 06:15-0500\n" "Last-Translator: gitlab <mbartlett+crowdin@gitlab.com>\n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" @@ -16,25 +16,46 @@ msgstr "" "X-Crowdin-Language: uk\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" +msgid " and" +msgstr " Ñ–" + msgid "%d commit" msgid_plural "%d commits" msgstr[0] "%d коміт" msgstr[1] "%d коміта" msgstr[2] "%d комітів" +msgid "%d commit behind" +msgid_plural "%d commits behind" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "%d issue" +msgid_plural "%d issues" +msgstr[0] "%d проблема" +msgstr[1] "%d проблеми" +msgstr[2] "%d проблем" + msgid "%d layer" msgid_plural "%d layers" msgstr[0] "%d шар" msgstr[1] "%d шари" msgstr[2] "%d шарів" +msgid "%d merge request" +msgid_plural "%d merge requests" +msgstr[0] "%d запит на злиттÑ" +msgstr[1] "%d запита на злиттÑ" +msgstr[2] "%d запитів на злиттÑ" + msgid "%s additional commit has been omitted to prevent performance issues." msgid_plural "%s additional commits have been omitted to prevent performance issues." msgstr[0] "%s доданий коміт був виключений Ð´Ð»Ñ Ð·Ð°Ð¿Ð¾Ð±Ñ–Ð³Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼ із швидкодією." msgstr[1] "%s доданих коміта були виключені Ð´Ð»Ñ Ð·Ð°Ð¿Ð¾Ð±Ñ–Ð³Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼ із швидкодією." msgstr[2] "%s доданих комітів були виключені Ð´Ð»Ñ Ð·Ð°Ð¿Ð¾Ð±Ñ–Ð³Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼ із швидкодією." -msgid "%{commit_author_link} committed %{commit_timeago}" +msgid "%{commit_author_link} authored %{commit_timeago}" msgstr "%{commit_author_link} закомітив %{commit_timeago}" msgid "%{count} participant" @@ -49,9 +70,6 @@ msgstr "на %{number_commits_behind} комітів позаду %{default_bran msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt." msgstr "%{number_of_failures} від %{maximum_failures} невдач. GitLab надаÑÑ‚ÑŒ доÑтуп на наÑтупну Ñпробу." -msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will block access for %{number_of_seconds} seconds." -msgstr "%{number_of_failures} із %{maximum_failures} невдач. GitLab заблокує доÑтуп на %{number_of_seconds} Ñекунд." - msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will not retry automatically. Reset storage information when the problem is resolved." msgstr "%{number_of_failures} від %{maximum_failures} невдач. GitLab автоматично не повторюватиме Ñпробу. Скиньте інформацію Ñховища при уÑуненні проблеми." @@ -113,13 +131,13 @@ msgid "Add" msgstr "Додати" msgid "Add Changelog" -msgstr "Додати ÑпиÑок змін (Changelog)" +msgstr "Додати ÑпиÑок змін" msgid "Add Contribution guide" -msgstr "" +msgstr "Додати керівництво Ð´Ð»Ñ ÑƒÑ‡Ð°Ñників" msgid "Add Group Webhooks and GitLab Enterprise Edition." -msgstr "" +msgstr "Додайте групові веб-гуки та GitLab Enterprise Edition." msgid "Add License" msgstr "Додати ліцензію" @@ -127,24 +145,81 @@ msgstr "Додати ліцензію" msgid "Add new directory" msgstr "Додати новий каталог" +msgid "Add todo" +msgstr "Додати задачу" + +msgid "AdminArea|Stop all jobs" +msgstr "Зупинити вÑÑ– завданнÑ" + +msgid "AdminArea|Stop all jobs?" +msgstr "Зупинити вÑÑ– завданнÑ?" + +msgid "AdminArea|Stop jobs" +msgstr "Зупинити завданнÑ" + +msgid "AdminArea|Stopping jobs failed" +msgstr "Зупинка завдань пройшла невдало" + +msgid "AdminArea|You’re about to stop all jobs. This will halt all current jobs that are running." +msgstr "" + msgid "AdminHealthPageLink|health page" msgstr "Ñторінка ÑтатуÑу" +msgid "Advanced" +msgstr "Розширений" + msgid "Advanced settings" msgstr "Додаткові параметри" msgid "All" msgstr "Ð’ÑÑ–" +msgid "All changes are committed" +msgstr "" + +msgid "Allows you to add and manage Kubernetes clusters." +msgstr "" + +msgid "An error occurred previewing the blob" +msgstr "" + msgid "An error occurred when toggling the notification subscription" msgstr "Виникла помилка під Ñ‡Ð°Ñ Ð·Ð¼Ñ–Ð½Ð¸ підпиÑки на ÑповіщеннÑ" msgid "An error occurred when updating the issue weight" msgstr "Збій під Ñ‡Ð°Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ð°Ð³Ð¸ проблеми" +msgid "An error occurred while dismissing the feature highlight. Refresh the page and try dismissing again." +msgstr "" + +msgid "An error occurred while fetching markdown preview" +msgstr "" + msgid "An error occurred while fetching sidebar data" msgstr "Виникла помилка під Ñ‡Ð°Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… Ð´Ð»Ñ Ð±Ñ–Ñ‡Ð½Ð¾Ñ— панелі" +msgid "An error occurred while getting projects" +msgstr "" + +msgid "An error occurred while loading filenames" +msgstr "" + +msgid "An error occurred while rendering KaTeX" +msgstr "" + +msgid "An error occurred while rendering preview broadcast message" +msgstr "" + +msgid "An error occurred while retrieving calendar activity" +msgstr "" + +msgid "An error occurred while retrieving diff" +msgstr "" + +msgid "An error occurred while validating username" +msgstr "" + msgid "An error occurred. Please try again." msgstr "СталаÑÑŒ помилка. Спробуйте ще раз." @@ -152,7 +227,7 @@ msgid "Appearance" msgstr "Зовнішній виглÑд" msgid "Applications" -msgstr "Додатки" +msgstr "ЗаÑтоÑунки" msgid "Apr" msgstr "квіт." @@ -164,14 +239,11 @@ msgid "Archived project! Repository is read-only" msgstr "Заархівований проект! Репозиторій доÑтупний лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ" msgid "Are you sure you want to delete this pipeline schedule?" -msgstr "" +msgstr "Ви впевнені, що хочете видалити цей розклад Ð´Ð»Ñ ÐºÐ¾Ð½Ð²ÐµÑ”Ñ€Ð°?" msgid "Are you sure you want to discard your changes?" msgstr "Ви впевнені, що бажаєте ÑкаÑувати ваші зміни?" -msgid "Are you sure you want to leave this group?" -msgstr "Ви впевнені що хочете залишити цю групу?" - msgid "Are you sure you want to reset registration token?" msgstr "Ви впевнені, що бажаєте Ñкинути реєÑтраційний токен?" @@ -184,6 +256,21 @@ msgstr "Ви впевнені?" msgid "Artifacts" msgstr "Ðртефакти" +msgid "Assign custom color like #FF0000" +msgstr "Призначити влаÑний колір типу #FF0000" + +msgid "Assign labels" +msgstr "Призначити мітку" + +msgid "Assign milestone" +msgstr "Призначити етап" + +msgid "Assign to" +msgstr "Призначити" + +msgid "Assignee" +msgstr "Виконавець" + msgid "Attach a file by drag & drop or %{upload_link}" msgstr "Прикріпити файл за допомогою перетÑÐ³ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ %{upload_link}" @@ -199,15 +286,18 @@ msgstr "Журнал автентифікації" msgid "Author" msgstr "Ðвтор" -msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly." -msgstr "Ð”Ð»Ñ ÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¾Ñ— роботи Auto Review Apps та Auto Deploy необхідно вказати доменне Ñ–Ð¼â€™Ñ Ñ‚Ð° %{kubernetes}." +msgid "Authors: %{authors}" +msgstr "Ðвтори: %{authors}" + +msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly." +msgstr "" + +msgid "Auto Review Apps and Auto Deploy need a domain name and a %{kubernetes} to work correctly." +msgstr "" msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly." msgstr "Ð”Ð»Ñ ÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¾Ñ— роботи Auto Review Apps та Auto Deploy необхідно вказати доменне ім’Ñ." -msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly." -msgstr "Ð”Ð»Ñ ÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¾Ñ— роботи Auto Review Apps та Auto Deploy необхіден %{kubernetes}." - msgid "AutoDevOps|Auto DevOps (Beta)" msgstr "Auto DevOps (бета)" @@ -218,7 +308,7 @@ msgid "AutoDevOps|Enable in settings" msgstr "Включити в налаштуваннÑÑ…" msgid "AutoDevOps|It will automatically build, test, and deploy your application based on a predefined CI/CD configuration." -msgstr "AutoDevOps буде автоматично збирати, теÑтувати та розгортати вашу програму на оÑнові визначеної CI/CD конфігурації." +msgstr "AutoDevOps буде автоматично збирати, теÑтувати та розгортати ваш заÑтоÑунок на оÑнові визначеної CI/CD конфігурації." msgid "AutoDevOps|Learn more in the %{link_to_documentation}" msgstr "ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ в %{link_to_documentation}" @@ -229,6 +319,12 @@ msgstr "Ви можете активувати %{link_to_settings} Ð´Ð»Ñ Ñ†ÑŒÐ¾ msgid "Available" msgstr "ДоÑтупний" +msgid "Avatar will be removed. Are you sure?" +msgstr "Ðватар буде видалено. Ви впевнені?" + +msgid "Average per day: %{average}" +msgstr "Ð’ Ñередньому за день: %{average}" + msgid "Billing" msgstr "Білінг" @@ -281,6 +377,9 @@ msgid "BillingPlans|paid annually at %{price_per_year}" msgstr "ОплачуєтьÑÑ Ñ‰Ð¾Ñ€Ñ–Ñ‡Ð½Ð¾ %{price_per_year}" msgid "BillingPlans|per user" +msgstr "за кориÑтувача" + +msgid "Begin with the selected commit" msgstr "" msgid "Branch" @@ -305,7 +404,7 @@ msgid "BranchSwitcherPlaceholder|Search branches" msgstr "Пошук гілок" msgid "BranchSwitcherTitle|Switch branch" -msgstr "" +msgstr "Перейти в гілку" msgid "Branches" msgstr "Гілки" @@ -412,8 +511,8 @@ msgstr "від" msgid "CI / CD" msgstr "CI / CD" -msgid "CI configuration" -msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ CI" +msgid "CI/CD configuration" +msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ CI/CD" msgid "CICD|Jobs" msgstr "ЗавданнÑ" @@ -424,6 +523,9 @@ msgstr "СкаÑувати" msgid "Cancel edit" msgstr "Відмінити правку" +msgid "Cannot modify managed Kubernetes cluster" +msgstr "" + msgid "Change Weight" msgstr "Вага зміни" @@ -434,13 +536,19 @@ msgid "ChangeTypeActionLabel|Revert in branch" msgstr "Ðнулювати у гілці" msgid "ChangeTypeAction|Cherry-pick" -msgstr "" +msgstr "Вибрати (cherry-pick)" msgid "ChangeTypeAction|Revert" msgstr "Ðнулювати коміт" +msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes." +msgstr "" + msgid "Changelog" -msgstr "СпиÑок змін (Changelog)" +msgstr "СпиÑок змін" + +msgid "Changes are shown as if the <b>source</b> revision was being merged into the <b>target</b> revision." +msgstr "" msgid "Charts" msgstr "Графіки" @@ -448,6 +556,9 @@ msgstr "Графіки" msgid "Chat" msgstr "Чат" +msgid "Check interval" +msgstr "Інтервал перевірки" + msgid "Checking %{text} availability…" msgstr "Перевірка доÑтупноÑÑ‚Ñ– %{text}…" @@ -455,12 +566,24 @@ msgid "Checking branch availability..." msgstr "Перевірка доÑтупноÑÑ‚Ñ– гілки..." msgid "Cherry-pick this commit" -msgstr "" +msgstr "Вибрати (cherry-pick) цей коміт" msgid "Cherry-pick this merge request" +msgstr "Вибрати (cherry-pick) цей запит на злиттÑ" + +msgid "Choose File ..." +msgstr "Виберіть файл ..." + +msgid "Choose a branch/tag (e.g. %{master}) or enter a commit (e.g. %{sha}) to see what's changed or to create a merge request." +msgstr "" + +msgid "Choose file..." +msgstr "Виберіть файл..." + +msgid "Choose which groups you wish to synchronize to this secondary node." msgstr "" -msgid "Choose which groups you wish to replicate to this secondary node. Leave blank to replicate all." +msgid "Choose which shards you wish to synchronize to this secondary node." msgstr "" msgid "CiStatusLabel|canceled" @@ -517,41 +640,77 @@ msgstr "пропущено" msgid "CiStatus|running" msgstr "виконуєтьÑÑ" +msgid "CiVariables|Input variable key" +msgstr "Ключ вхідної змінної" + +msgid "CiVariables|Input variable value" +msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ñ…Ñ–Ð´Ð½Ð¾Ñ— змінної" + +msgid "CiVariables|Remove variable row" +msgstr "" + +msgid "CiVariable|* (All environments)" +msgstr "* (Ð’ÑÑ– Ñередовища)" + +msgid "CiVariable|All environments" +msgstr "Ð’ÑÑ– Ñередовища" + +msgid "CiVariable|Create wildcard" +msgstr "" + +msgid "CiVariable|Error occured while saving variables" +msgstr "" + +msgid "CiVariable|New environment" +msgstr "Ðове Ñередовище" + +msgid "CiVariable|Protected" +msgstr "Захищений" + +msgid "CiVariable|Search environments" +msgstr "" + +msgid "CiVariable|Toggle protected" +msgstr "" + +msgid "CiVariable|Validation failed" +msgstr "Перевірка невдала" + msgid "CircuitBreakerApiLink|circuitbreaker api" msgstr "circuitbreaker api" +msgid "Click to expand text" +msgstr "ÐатиÑніть, щоб розгорнути текÑÑ‚" + msgid "Clone repository" msgstr "Клонувати репозиторій" msgid "Close" msgstr "Закрити" -msgid "Cluster" -msgstr "КлаÑтер" - -msgid "ClusterIntegration|%{appList} was successfully installed on your cluster" -msgstr "%{appList} уÑпішно вÑтановлені на вашому клаÑтері" +msgid "Closed" +msgstr "Закрито" -msgid "ClusterIntegration|%{boldNotice} This will add some extra resources like a load balancer, which incur additional costs. See %{pricingLink}" -msgstr "%{boldNotice} Це додаÑÑ‚ÑŒ реÑурÑи (наприклад баланÑер навантаженнÑ), що Ñпричинить додаткові витрати. ПереглÑньте %{pricingLink}" +msgid "ClusterIntegration|%{appList} was successfully installed on your Kubernetes cluster" +msgstr "%{appList} були уÑпішно вÑтановлені на ваш Kubernetes-клаÑтер" msgid "ClusterIntegration|API URL" msgstr "API URL" -msgid "ClusterIntegration|Active" -msgstr "Ðктивний" - -msgid "ClusterIntegration|Add an existing cluster" -msgstr "Додати Ñ–Ñнуючий клаÑтер" +msgid "ClusterIntegration|Add Kubernetes cluster" +msgstr "Додати Kubernetes клаÑтер" -msgid "ClusterIntegration|Add cluster" -msgstr "Додати клаÑтер" +msgid "ClusterIntegration|Add an existing Kubernetes cluster" +msgstr "Додати Ñ–Ñнуючий Kubernetes-клаÑтер" -msgid "ClusterIntegration|All" -msgstr "Ð’ÑÑ–" +msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration" +msgstr "Детальні Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ñ–Ñ— із цим Kubernetes-клаÑтером" msgid "ClusterIntegration|Applications" -msgstr "Додатки" +msgstr "ЗаÑтоÑунки" + +msgid "ClusterIntegration|Are you sure you want to remove this Kubernetes cluster's integration? This will not delete your actual Kubernetes cluster." +msgstr "Ви впевнені, що хочете видалити інтеграцію із цим Kubernetes-клаÑтером? Це не призведе до Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ñамого клаÑтера." msgid "ClusterIntegration|CA Certificate" msgstr "Сертифікат центру Ñертифікації" @@ -559,38 +718,14 @@ msgstr "Сертифікат центру Ñертифікації" msgid "ClusterIntegration|Certificate Authority bundle (PEM format)" msgstr "Ðабір Ñертифікатів (формат PEM)" -msgid "ClusterIntegration|Choose how to set up cluster integration" -msgstr "Виберіть ÑпоÑіб Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ñ–Ñ— з клаÑтером" - -msgid "ClusterIntegration|Cluster" -msgstr "КлаÑтер" - -msgid "ClusterIntegration|Cluster details" -msgstr "Параметри клаÑтера" - -msgid "ClusterIntegration|Cluster integration" -msgstr "Ð†Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ñ–Ñ Ñ–Ð· клаÑтером" - -msgid "ClusterIntegration|Cluster integration is disabled for this project." -msgstr "Ð†Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ñ–Ñ Ñ–Ð· клаÑтером вимкнена Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ проекту." +msgid "ClusterIntegration|Choose how to set up Kubernetes cluster integration" +msgstr "Виберіть ÑпоÑіб Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ñ–Ñ— із Kubernetes-клаÑтером" -msgid "ClusterIntegration|Cluster integration is enabled for this project." -msgstr "Ð†Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ñ–Ñ Ñ–Ð· клаÑтером увімкнена Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ проекту." +msgid "ClusterIntegration|Choose which of your project's environments will use this Kubernetes cluster." +msgstr "Виберіть Ñкі з Ñередовищ вашого проекту викориÑтовуватимуть цей Kubernetes-клаÑтер." -msgid "ClusterIntegration|Cluster integration is enabled for this project. Disabling this integration will not affect your cluster, it will only temporarily turn off GitLab's connection to it." -msgstr "" - -msgid "ClusterIntegration|Cluster is being created on Google Kubernetes Engine..." -msgstr "СтворюєтьÑÑ ÐºÐ»Ð°Ñтер в Google Kubernetes Engine..." - -msgid "ClusterIntegration|Cluster name" -msgstr "Ім'Ñ ÐºÐ»Ð°Ñтера" - -msgid "ClusterIntegration|Cluster was successfully created on Google Kubernetes Engine. Refresh the page to see cluster's details" -msgstr "КлаÑтер був уÑпішно Ñтворено в Google Kubernetes Engine. Оновіть Ñторінку, щоб переглÑнути додатову інформацію" - -msgid "ClusterIntegration|Clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" -msgstr "КлаÑтери дозволÑÑŽÑ‚ÑŒ вам викориÑтовувати Review Apps, розгортати ваші програми, запуÑкати ваші конвеєри Ñ– багато іншого проÑтим ÑпоÑобом. %{link_to_help_page}" +msgid "ClusterIntegration|Control how your Kubernetes cluster integrates with GitLab" +msgstr "Керуйте ÑпоÑобом інтеграції вашого Kubernetes-клаÑтера з GitLab" msgid "ClusterIntegration|Copy API URL" msgstr "Скопіювати URL API" @@ -598,38 +733,35 @@ msgstr "Скопіювати URL API" msgid "ClusterIntegration|Copy CA Certificate" msgstr "Скопіювати Ñертифікат центру Ñертифікації" +msgid "ClusterIntegration|Copy Kubernetes cluster name" +msgstr "Скопіювати Ñ–Ð¼â€™Ñ Kubernetes-клаÑтера" + msgid "ClusterIntegration|Copy Token" msgstr "Скопіювати Токен" -msgid "ClusterIntegration|Copy cluster name" -msgstr "Копіювати назву клаÑтера" +msgid "ClusterIntegration|Create Kubernetes cluster" +msgstr "Створити Kubernetes-клаÑтер" -msgid "ClusterIntegration|Create a new cluster on Google Engine right from GitLab" -msgstr "Створити новий клаÑтер у Google Engine прÑмо з GitLab" +msgid "ClusterIntegration|Create Kubernetes cluster on Google Kubernetes Engine" +msgstr "Створити Kubernetes-клаÑтер на Google Kubernetes Engine" -msgid "ClusterIntegration|Create cluster" -msgstr "Створити клаÑтер" - -msgid "ClusterIntegration|Create cluster on Google Kubernetes Engine" -msgstr "Створити клаÑтер в Google Kubernetes Engine" +msgid "ClusterIntegration|Create a new Kubernetes cluster on Google Kubernetes Engine right from GitLab" +msgstr "Створити Kubernetes-клаÑтер на Google Kubernetes Engine прÑмо із GitLab" msgid "ClusterIntegration|Create on GKE" msgstr "Створити в GKE" -msgid "ClusterIntegration|Enable cluster integration" -msgstr "Увімкнути інтеграцію із клаÑтерами" - msgid "ClusterIntegration|Enter the details for an existing Kubernetes cluster" msgstr "Вкажіть параметри Ñ–Ñнуючого клаÑтера Kubernetes" -msgid "ClusterIntegration|Enter the details for your cluster" -msgstr "Введіть докладний Ð¾Ð¿Ð¸Ñ Ð²Ð°ÑˆÐ¾Ð³Ð¾ клаÑтера" +msgid "ClusterIntegration|Enter the details for your Kubernetes cluster" +msgstr "Введіть параметри вашого Kubernetes-клаÑтера" -msgid "ClusterIntegration|Environment pattern" -msgstr "Шаблон Ñередовища" +msgid "ClusterIntegration|Environment scope" +msgstr "" -msgid "ClusterIntegration|GKE pricing" -msgstr "ВартіÑÑ‚ÑŒ GKE" +msgid "ClusterIntegration|GitLab Integration" +msgstr "Ð†Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ñ–Ñ Ð· GitLab" msgid "ClusterIntegration|GitLab Runner" msgstr "GitLab Runner" @@ -646,47 +778,83 @@ msgstr "Проект Google Kubernetes Engine" msgid "ClusterIntegration|Helm Tiller" msgstr "Helm Tiller" -msgid "ClusterIntegration|Inactive" -msgstr "Ðеактивні" - msgid "ClusterIntegration|Ingress" msgstr "Ingress" msgid "ClusterIntegration|Install" msgstr "Ð’Ñтановити" -msgid "ClusterIntegration|Install applications on your cluster. Read more about %{helpLink}" -msgstr "Ð’Ñтановіть додатки у ваш клаÑтер. Докладніше про %{helpLink}" - msgid "ClusterIntegration|Installed" msgstr "Ð’Ñтановлений" msgid "ClusterIntegration|Installing" msgstr "Ð’ÑтановленнÑ" -msgid "ClusterIntegration|Integrate cluster automation" -msgstr "Ð†Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ñ–Ñ ÐºÐ»Ð°Ñтерної автоматизації" +msgid "ClusterIntegration|Integrate Kubernetes cluster automation" +msgstr "" + +msgid "ClusterIntegration|Integration status" +msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ñ–Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ñ–Ñ—" + +msgid "ClusterIntegration|Kubernetes cluster" +msgstr "Kubernetes-клаÑтер" + +msgid "ClusterIntegration|Kubernetes cluster details" +msgstr "Параметри Kubernetes-клаÑтера" + +msgid "ClusterIntegration|Kubernetes cluster integration" +msgstr "Ð†Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ñ–Ñ Ñ–Ð· Kubernetes-клаÑтером" + +msgid "ClusterIntegration|Kubernetes cluster integration is disabled for this project." +msgstr "Ð†Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ñ–Ñ Ñ–Ð· Kubernetes-клаÑтером вимкнена Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ проекту." + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project." +msgstr "Ð†Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ñ–Ñ Ñ–Ð· Kubernetes-клаÑтером увімкнена Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ проекту." + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project. Disabling this integration will not affect your Kubernetes cluster, it will only temporarily turn off GitLab's connection to it." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster is being created on Google Kubernetes Engine..." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster name" +msgstr "Ð†Ð¼â€™Ñ Kubernetes-клаÑтера" + +msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters can be used to deploy applications and to provide Review Apps for this project" +msgstr "" msgid "ClusterIntegration|Learn more about %{link_to_documentation}" msgstr "ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про %{link_to_documentation}" -msgid "ClusterIntegration|Learn more about Clusters" -msgstr "ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про клаÑтери" +msgid "ClusterIntegration|Learn more about Kubernetes" +msgstr "ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про Kubernetes" + +msgid "ClusterIntegration|Learn more about environments" +msgstr "ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про Ñередовища" msgid "ClusterIntegration|Machine type" msgstr "Тип машини" -msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create clusters" -msgstr "ПереконайтеÑÑ, що ваш обліковий Ð·Ð°Ð¿Ð¸Ñ %{link_to_requirements} Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ»Ð°Ñтерів" +msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create Kubernetes clusters" +msgstr "" + +msgid "ClusterIntegration|Manage" +msgstr "УправліннÑ" -msgid "ClusterIntegration|Manage cluster integration on your GitLab project" -msgstr "Ð£Ð¿Ñ€Ð°Ð²Ð»Ñ–Ð½Ð½Ñ Ñ–Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ñ–Ñ”ÑŽ із клаÑтером у вашому Gitlab-проекті" +msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}" +msgstr "" -msgid "ClusterIntegration|Manage your cluster by visiting %{link_gke}" -msgstr "Ð”Ð»Ñ ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñвоїм клаÑтером перейдіть на %{link_gke}" +msgid "ClusterIntegration|More information" +msgstr "Додаткова інформаціÑ" -msgid "ClusterIntegration|Multiple clusters are available in GitLab Entreprise Edition Premium and Ultimate" -msgstr "Кілька клаÑтерів доÑтупні в GitLab Enterprise Edition Premium Ñ– Ultimate" +msgid "ClusterIntegration|Multiple Kubernetes clusters are available in GitLab Enterprise Edition Premium and Ultimate" +msgstr "" msgid "ClusterIntegration|Note:" msgstr "Примітка:" @@ -694,38 +862,35 @@ msgstr "Примітка:" msgid "ClusterIntegration|Number of nodes" msgstr "КількіÑÑ‚ÑŒ вузлів" -msgid "ClusterIntegration|Please enter access information for your cluster. If you need help, you can read our %{link_to_help_page} on clusters" -msgstr "Введіть інформацію про доÑтуп до Ñвого клаÑтера. Якщо вам потрібна допомога, ви можете прочитати наші %{link_to_help_page} по клаÑтерам" - -msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:" +msgid "ClusterIntegration|Please enter access information for your Kubernetes cluster. If you need help, you can read our %{link_to_help_page} on Kubernetes" msgstr "" -msgid "ClusterIntegration|Problem setting up the cluster" -msgstr "Проблема Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ»Ð°Ñтера" - -msgid "ClusterIntegration|Problem setting up the clusters list" -msgstr "Проблема Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÑпиÑку клаÑтерів" +msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:" +msgstr "Будь-лаÑка впевнітьÑÑ, що ваш обліковий Ð·Ð°Ð¿Ð¸Ñ Google задовольнÑÑ” наÑтупним вимогам:" msgid "ClusterIntegration|Project ID" -msgstr "" +msgstr "Ідентифікатор проекту" msgid "ClusterIntegration|Project namespace" -msgstr "" +msgstr "ПроÑÑ‚Ñ–Ñ€ імен проекту" msgid "ClusterIntegration|Project namespace (optional, unique)" -msgstr "" +msgstr "ПроÑÑ‚Ñ–Ñ€ імен проекту (не обов’Ñзковий, унікальний)" -msgid "ClusterIntegration|Read our %{link_to_help_page} on cluster integration." -msgstr "Прочитайте нашу документацію %{link_to_help_page} по інтеграції із клаÑтером." +msgid "ClusterIntegration|Prometheus" +msgstr "Prometheus" -msgid "ClusterIntegration|Remove cluster integration" -msgstr "Видалити інтеграцію з клаÑтером" +msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration." +msgstr "" + +msgid "ClusterIntegration|Remove Kubernetes cluster integration" +msgstr "Відалити інтеграцію із Kubernetes-клаÑтером" msgid "ClusterIntegration|Remove integration" msgstr "Видалити інтеграцію" -msgid "ClusterIntegration|Removing cluster integration will remove the cluster configuration you have added to this project. It will not delete your cluster on Google Kubernetes Engine." -msgstr "Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ ÐºÐ»Ð°Ñтерної інтеграції призведе до Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ— клаÑтера, Ñку ви додали до цього проекту. Ð¦Ñ Ð´Ñ–Ñ Ð½Ðµ буде видалÑти ваш клаÑтер у Google Kubernetes Engine." +msgid "ClusterIntegration|Remove this Kubernetes cluster's configuration from this project. This will not delete your actual Kubernetes cluster." +msgstr "" msgid "ClusterIntegration|Request to begin installing failed" msgstr "Запит про початок вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ðµ виконано" @@ -733,8 +898,8 @@ msgstr "Запит про початок вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ðµ викоРmsgid "ClusterIntegration|Save changes" msgstr "Зберегти зміни" -msgid "ClusterIntegration|See and edit the details for your cluster" -msgstr "ПереглÑнути та редагувати параметри вашого клаÑтера" +msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster" +msgstr "" msgid "ClusterIntegration|See machine types" msgstr "ПереглÑнути типи машин" @@ -754,26 +919,26 @@ msgstr "Показати" msgid "ClusterIntegration|Something went wrong on our end." msgstr "ЩоÑÑŒ пішло не так з нашого боку." -msgid "ClusterIntegration|Something went wrong while creating your cluster on Google Kubernetes Engine" -msgstr "ЩоÑÑŒ пішло не так під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ»Ð°Ñтера в Google Kubernetes Engine" +msgid "ClusterIntegration|Something went wrong while creating your Kubernetes cluster on Google Kubernetes Engine" +msgstr "" msgid "ClusterIntegration|Something went wrong while installing %{title}" msgstr "Під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ %{title} ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°" -msgid "ClusterIntegration|There are no clusters to show" -msgstr "Ðемає клаÑтерів Ð´Ð»Ñ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ" +msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below" +msgstr "" -msgid "ClusterIntegration|This account must have permissions to create a cluster in the %{link_to_container_project} specified below" -msgstr "Цей обліковий Ð·Ð°Ð¿Ð¸Ñ Ð¼Ð°Ñ” мати дозволи Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ»Ð°Ñтера в %{link_to_container_project}, зазначеному нижче" +msgid "ClusterIntegration|Toggle Kubernetes Cluster" +msgstr "Увімкнути/вимкнути Kubernetes-клаÑтер" -msgid "ClusterIntegration|Toggle Cluster" -msgstr "Переключити КлаÑтер" +msgid "ClusterIntegration|Toggle Kubernetes cluster" +msgstr "Увімкнути/вимкнути Kubernetes-клаÑтер" msgid "ClusterIntegration|Token" msgstr "Токен" -msgid "ClusterIntegration|With a cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." -msgstr "За допомогою підключеного до цього проекту клаÑтера, ви можете викориÑтовувати Review Apps, розгортати ваші проекти, запуÑкати конвеєри збірки та багато іншого." +msgid "ClusterIntegration|With a Kubernetes cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." +msgstr "" msgid "ClusterIntegration|Your account must have %{link_to_kubernetes_engine}" msgstr "Ваш обліковий Ð·Ð°Ð¿Ð¸Ñ Ð¿Ð¾Ð²Ð¸Ð½ÐµÐ½ мати %{link_to_kubernetes_engine}" @@ -784,17 +949,17 @@ msgstr "Зона" msgid "ClusterIntegration|access to Google Kubernetes Engine" msgstr "доÑтуп до Google Kubernetes Engine" -msgid "ClusterIntegration|cluster" -msgstr "клаÑтер" +msgid "ClusterIntegration|check the pricing here" +msgstr "" msgid "ClusterIntegration|documentation" -msgstr "документаціÑ" +msgstr "документації" msgid "ClusterIntegration|help page" msgstr "Ñторінка допомоги" msgid "ClusterIntegration|installing applications" -msgstr "вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÑ–Ð²" +msgstr "вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð°ÑтоÑунків" msgid "ClusterIntegration|meets the requirements" msgstr "задовольнÑÑ” вимогам" @@ -802,6 +967,9 @@ msgstr "задовольнÑÑ” вимогам" msgid "ClusterIntegration|properly configured" msgstr "правильно налаштований" +msgid "Collapse" +msgstr "Згорнути" + msgid "Comments" msgstr "Коментарі" @@ -820,6 +988,9 @@ msgstr "ТриваліÑÑ‚ÑŒ оÑтанніх 30 комітів у хвилинРmsgid "Commit message" msgstr "Коміт-повідомленнÑ" +msgid "Commit statistics for %{ref} %{start_time} - %{end_time}" +msgstr "" + msgid "CommitBoxTitle|Commit" msgstr "Коміт" @@ -832,15 +1003,57 @@ msgstr "Коміти" msgid "Commits feed" msgstr "Канал комітів" +msgid "Commits per day hour (UTC)" +msgstr "" + +msgid "Commits per day of month" +msgstr "" + +msgid "Commits per weekday" +msgstr "" + +msgid "Commits|An error occurred while fetching merge requests data." +msgstr "" + +msgid "Commits|Commit: %{commitText}" +msgstr "Коміт: %{commitText}" + msgid "Commits|History" msgstr "ІÑторіÑ" +msgid "Commits|No related merge requests found" +msgstr "" + msgid "Committed by" msgstr "Коміт від" msgid "Compare" msgstr "ПорівнÑти" +msgid "Compare Git revisions" +msgstr "" + +msgid "Compare Revisions" +msgstr "ПорівнÑÐ½Ð½Ñ Ñ€ÐµÐ´Ð°ÐºÑ†Ñ–Ð¹" + +msgid "CompareBranches|%{source_branch} and %{target_branch} are the same." +msgstr "" + +msgid "CompareBranches|Compare" +msgstr "ПорівнÑти" + +msgid "CompareBranches|Source" +msgstr "Джерело" + +msgid "CompareBranches|Target" +msgstr "" + +msgid "CompareBranches|There isn't anything to compare." +msgstr "" + +msgid "Confidentiality" +msgstr "КонфіденційніÑÑ‚ÑŒ" + msgid "Container Registry" msgstr "РеєÑÑ‚Ñ€ Контейнерів" @@ -878,7 +1091,7 @@ msgid "ContainerRegistry|Tag" msgstr "Тег" msgid "ContainerRegistry|Tag ID" -msgstr "" +msgstr "Ідентифікатор тегу" msgid "ContainerRegistry|Use different image names" msgstr "ВикориÑтовуйте різні імена образів" @@ -887,13 +1100,16 @@ msgid "ContainerRegistry|With the Docker Container Registry integrated into GitL msgstr "За допомогою вбудованого в GitLab реєÑтру Docker контейнерів кожен проект може мати влаÑне міÑце Ð´Ð»Ñ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Docker образів." msgid "Contribution guide" -msgstr "" +msgstr "ІнÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Ð´Ð»Ñ ÑƒÑ‡Ð°Ñників" msgid "Contributors" msgstr "Контриб’ютори" +msgid "ContributorsPage|%{startDate} – %{endDate}" +msgstr "%{startDate} – %{endDate}" + msgid "ContributorsPage|Building repository graph." -msgstr "" +msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñхеми репозиторію." msgid "ContributorsPage|Commits to %{branch_name}, excluding merge commits. Limited to 6,000 commits." msgstr "Коміти в %{branch_name}, за винÑтком комітів злиттÑ. Обмежено 6000 комітів." @@ -913,14 +1129,23 @@ msgstr "Скопіюйте відкритий SSH-ключ в буфер Ð¾Ð±Ð¼Ñ msgid "Copy URL to clipboard" msgstr "Скопіювати URL в буфер обміну" +msgid "Copy branch name to clipboard" +msgstr "Скопіювати назву гілки в буфер обміну" + msgid "Copy commit SHA to clipboard" msgstr "Скопіювати ідентифікатор в буфер обміну" +msgid "Copy reference to clipboard" +msgstr "" + +msgid "Create" +msgstr "Створити" + msgid "Create New Directory" msgstr "Створити новий каталог" msgid "Create a personal access token on your account to pull or push via %{protocol}." -msgstr "" +msgstr "Створіть токен доÑтупу Ð´Ð»Ñ Ð²Ð°ÑˆÐ¾Ð³Ð¾ аккаунта, щоб відправлÑти та отримувати через %{protocol}." msgid "Create directory" msgstr "Створити каталог" @@ -934,6 +1159,9 @@ msgstr "Створити епік" msgid "Create file" msgstr "Створити файл" +msgid "Create lists from labels. Issues with that label appear in that list." +msgstr "" + msgid "Create merge request" msgstr "Створити запит на злиттÑ" @@ -946,6 +1174,9 @@ msgstr "Створити новий каталог" msgid "Create new file" msgstr "Створити новий файл" +msgid "Create new label" +msgstr "Створити нову мітку" + msgid "Create new..." msgstr "Створити..." @@ -967,6 +1198,9 @@ msgstr "ЧаÑовий поÑÑ Cron" msgid "Cron syntax" msgstr "СинтакÑÐ¸Ñ Cron" +msgid "Current node" +msgstr "Поточний вузол" + msgid "Custom notification events" msgstr "КориÑтувацькі Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½ÑŒ про події" @@ -976,11 +1210,8 @@ msgstr "Спеціальні рівні Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ ÑпівпадРmsgid "Cycle Analytics" msgstr "Ðналіз циклу" -msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project." -msgstr "" - msgid "CycleAnalyticsStage|Code" -msgstr "" +msgstr "ÐапиÑÐ°Ð½Ð½Ñ ÐºÐ¾Ð´Ñƒ" msgid "CycleAnalyticsStage|Issue" msgstr "Проблема" @@ -989,7 +1220,7 @@ msgid "CycleAnalyticsStage|Plan" msgstr "ПлануваннÑ" msgid "CycleAnalyticsStage|Production" -msgstr "" +msgstr "Production" msgid "CycleAnalyticsStage|Review" msgstr "ЗатвердженнÑ" @@ -1025,23 +1256,32 @@ msgstr[1] "РозгортаннÑ" msgstr[2] "Розгортань" msgid "Deploy Keys" -msgstr "" +msgstr "Ключі Ð´Ð»Ñ Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ" msgid "Description" msgstr "ОпиÑ" msgid "Description templates allow you to define context-specific templates for issue and merge request description fields for your project." -msgstr "" +msgstr "Шаблони опиÑу дозволÑÑŽÑ‚ÑŒ визначити конкретні шаблони обговорень проблем та запитів на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð´Ð»Ñ Ð²Ð°ÑˆÐ¾Ð³Ð¾ проекту." msgid "Details" msgstr "Деталі" +msgid "Diffs|No file name available" +msgstr "" + msgid "Directory name" msgstr "Ім'Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ" +msgid "Disable" +msgstr "Вимкнути" + msgid "Discard changes" msgstr "СкаÑувати зміни" +msgid "Discover GitLab Geo." +msgstr "" + msgid "Dismiss Cycle Analytics introduction box" msgstr "Відмінити блок вÑтупу до Ðналитики Циклу" @@ -1073,20 +1313,29 @@ msgid "DownloadCommit|Email Patches" msgstr "Email-патчи" msgid "DownloadCommit|Plain Diff" -msgstr "" +msgstr "ПроÑте порівнÑÐ½Ð½Ñ (diff)" msgid "DownloadSource|Download" msgstr "Завантажити" +msgid "Due date" +msgstr "Запланована дата завершеннÑ" + msgid "Edit" msgstr "Редагувати" msgid "Edit Pipeline Schedule %{id}" msgstr "Редагувати Розклад Конвеєра %{id}" +msgid "Edit files in the editor and commit changes here" +msgstr "" + msgid "Emails" msgstr "ÐдреÑи електронної пошти" +msgid "Enable" +msgstr "Увімкнути" + msgid "Environments|An error occurred while fetching the environments." msgstr "Виникла помилка при завантаженні Ñередовищ." @@ -1105,9 +1354,6 @@ msgstr "Середовище" msgid "Environments|Environments" msgstr "Середовища" -msgid "Environments|Environments are places where code gets deployed, such as staging or production." -msgstr "" - msgid "Environments|Job" msgstr "ЗавданнÑ" @@ -1150,9 +1396,33 @@ msgstr "Епіки дозволÑÑŽÑ‚ÑŒ керувати вашим портфе msgid "Error creating epic" msgstr "Помилка при Ñтворенні епіку" +msgid "Error fetching contributors data." +msgstr "" + +msgid "Error fetching labels." +msgstr "Помилка Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¼Ñ–Ñ‚Ð¾Ðº." + +msgid "Error fetching network graph." +msgstr "" + +msgid "Error fetching refs" +msgstr "" + +msgid "Error fetching usage ping data." +msgstr "" + msgid "Error occurred when toggling the notification subscription" msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° під Ñ‡Ð°Ñ Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð¿Ñ–Ð´Ð¿Ð¸Ñки на ÑповіщеннÑ" +msgid "Error saving label update." +msgstr "" + +msgid "Error updating status for all todos." +msgstr "Помилка Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑтатуÑу Ð´Ð»Ñ Ð²ÑÑ–Ñ… задач." + +msgid "Error updating todo status." +msgstr "Помилка при оновленні ÑтатуÑу задачі." + msgid "EventFilterBy|Filter by all" msgstr "Фільтрувати по вÑім" @@ -1166,7 +1436,7 @@ msgid "EventFilterBy|Filter by merge events" msgstr "Фільтрувати по запитам на злиттÑ" msgid "EventFilterBy|Filter by push events" -msgstr "" +msgstr "Фільтрувати за подіÑми Ð²Ñ–Ð´Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ (push)" msgid "EventFilterBy|Filter by team" msgstr "Фільтрувати по команді" @@ -1180,6 +1450,9 @@ msgstr "Кожен міÑÑць (1-го чиÑла о 4:00 ранку)" msgid "Every week (Sundays at 4:00am)" msgstr "Ð©Ð¾Ñ‚Ð¸Ð¶Ð½Ñ (в неділю о 4:00 ранку)" +msgid "Expand" +msgstr "Розгорнути" + msgid "Explore projects" msgstr "ОглÑд проектів" @@ -1190,7 +1463,7 @@ msgid "Failed to change the owner" msgstr "Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ влаÑника" msgid "Failed to remove the pipeline schedule" -msgstr "" +msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ розклад конвеєра" msgid "Feb" msgstr "лют." @@ -1198,6 +1471,9 @@ msgstr "лют." msgid "February" msgstr "лютий" +msgid "Fields on this page are now uneditable, you can configure" +msgstr "" + msgid "File name" msgstr "Ім'Ñ Ñ„Ð°Ð¹Ð»Ñƒ" @@ -1217,7 +1493,7 @@ msgid "FirstPushedBy|First" msgstr "Перший" msgid "FirstPushedBy|pushed by" -msgstr "" +msgstr "відправлено" msgid "Fork" msgid_plural "Forks" @@ -1235,37 +1511,121 @@ msgid "Format" msgstr "Формат" msgid "From issue creation until deploy to production" -msgstr "" +msgstr "З моменту ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð¸ до Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ð½Ð° production" msgid "From merge request merge until deploy to production" -msgstr "" +msgstr "Від Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñƒ на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð´Ð¾ Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ð½Ð° production" msgid "GPG Keys" msgstr "GPG ключі" +msgid "Generate a default set of labels" +msgstr "" + msgid "Geo Nodes" msgstr "Гео-Вузли" -msgid "GeoNodeSyncStatus|Failed" -msgstr "Ðевдало" - msgid "GeoNodeSyncStatus|Node is failing or broken." msgstr "Вузол не працює або зламаний." msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage." msgstr "Вузол працює повільно, перевантажений або тільки що відновивÑÑ Ð¿Ñ–ÑÐ»Ñ Ð·Ð±Ð¾ÑŽ." -msgid "GeoNodeSyncStatus|Out of sync" -msgstr "ÐеÑинхронізовано" +msgid "GeoNodes|Database replication lag:" +msgstr "" + +msgid "GeoNodes|Disabling a node stops the sync process. Are you sure?" +msgstr "" + +msgid "GeoNodes|Does not match the primary storage configuration" +msgstr "" + +msgid "GeoNodes|Failed" +msgstr "Ðевдало" + +msgid "GeoNodes|Full" +msgstr "Повний" + +msgid "GeoNodes|GitLab version does not match the primary node version" +msgstr "" + +msgid "GeoNodes|GitLab version:" +msgstr "" + +msgid "GeoNodes|Health status:" +msgstr "" + +msgid "GeoNodes|Last event ID processed by cursor:" +msgstr "" + +msgid "GeoNodes|Last event ID seen from primary:" +msgstr "" + +msgid "GeoNodes|Loading nodes" +msgstr "" + +msgid "GeoNodes|Local Attachments:" +msgstr "" + +msgid "GeoNodes|Local LFS objects:" +msgstr "" -msgid "GeoNodeSyncStatus|Synced" -msgstr "Синхронізовано" +msgid "GeoNodes|Local job artifacts:" +msgstr "" + +msgid "GeoNodes|New node" +msgstr "" + +msgid "GeoNodes|Out of sync" +msgstr "" + +msgid "GeoNodes|Replication slot WAL:" +msgstr "" + +msgid "GeoNodes|Replication slots:" +msgstr "" + +msgid "GeoNodes|Repositories:" +msgstr "" + +msgid "GeoNodes|Selective" +msgstr "" + +msgid "GeoNodes|Storage config:" +msgstr "" + +msgid "GeoNodes|Sync settings:" +msgstr "" + +msgid "GeoNodes|Synced" +msgstr "" + +msgid "GeoNodes|Unused slots" +msgstr "" + +msgid "GeoNodes|Used slots" +msgstr "" + +msgid "GeoNodes|Wikis:" +msgstr "" + +msgid "GeoNodes|You have configured Geo nodes using an insecure HTTP connection. We recommend the use of HTTPS." +msgstr "" + +msgid "Geo|All projects" +msgstr "" msgid "Geo|File sync capacity" msgstr "ПропуÑкна здатніÑÑ‚ÑŒ Ñинхронізації файлів" -msgid "Geo|Groups to replicate" -msgstr "Групи Ð´Ð»Ñ Ñ€ÐµÐ¿Ð»Ñ–ÐºÐ°Ñ†Ñ–Ñ—" +msgid "Geo|Groups to synchronize" +msgstr "" + +msgid "Geo|Projects in certain groups" +msgstr "" + +msgid "Geo|Projects in certain storage shards" +msgstr "" msgid "Geo|Repository sync capacity" msgstr "ПропуÑкна здатніÑÑ‚ÑŒ Ñинхронізації репозиторіїв" @@ -1273,12 +1633,24 @@ msgstr "ПропуÑкна здатніÑÑ‚ÑŒ Ñинхронізації репРmsgid "Geo|Select groups to replicate." msgstr "Виберіть групи Ð´Ð»Ñ Ñ€ÐµÐ¿Ð»Ñ–ÐºÐ°Ñ†Ñ–Ñ—." +msgid "Geo|Shards to synchronize" +msgstr "" + +msgid "Git revision" +msgstr "" + msgid "Git storage health information has been reset" msgstr "Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ ÑÑ‚Ð°Ñ‚ÑƒÑ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Git була Ñкинута" +msgid "Git version" +msgstr "" + msgid "GitLab Runner section" msgstr "Розділ GitLab Runner" +msgid "Gitaly Servers" +msgstr "" + msgid "Go to your fork" msgstr "Перейти до вашого форку" @@ -1288,6 +1660,9 @@ msgstr "Форк" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "ÐÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Google не %{link_to_documentation}. ПопроÑÑ–Ñ‚ÑŒ Ñвого адмініÑтратора GitLab, Ñкщо ви хочете ÑкориÑтатиÑÑ Ñ†Ð¸Ð¼ ÑервіÑом." +msgid "Got it!" +msgstr "" + msgid "GroupSettings|Prevent sharing a project within %{group} with other groups" msgstr "Заборонити Ñпільний доÑтуп до проекту в рамках %{group} з іншими групами" @@ -1324,8 +1699,8 @@ msgstr "Групи не знайдені" msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group." msgstr "Ви можете керувати правами доÑтупу членів групи мати доÑтуп до кожного проекту в ній." -msgid "GroupsTree|Are you sure you want to leave the \"${this.group.fullName}\" group?" -msgstr "Ви впевнені, що хочете залишити групу \"${this.group.fullName}\"?" +msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?" +msgstr "" msgid "GroupsTree|Create a project in this group." msgstr "Створити проект у групі." @@ -1358,22 +1733,28 @@ msgid "Have your users email" msgstr "Електронна пошта Ð´Ð»Ñ Ð·Ð²ÐµÑ€Ñ‚Ð°Ð½ÑŒ кориÑтувачів" msgid "Health Check" -msgstr "Перевірки працездатноÑÑ‚Ñ–" +msgstr "Перевірка ПрацездатноÑÑ‚Ñ–" msgid "Health information can be retrieved from the following endpoints. More information is available" msgstr "Інформацію про працездатніÑÑ‚ÑŒ можна отримати з наÑтупних ендпойнтів. Більше інформації доÑтупно" msgid "HealthCheck|Access token is" -msgstr "Токен доÑтупу Ñ”" +msgstr "Токен доÑтупу" msgid "HealthCheck|Healthy" msgstr "Здоровий" msgid "HealthCheck|No Health Problems Detected" -msgstr "Жодних проблем із здоров'Ñм не виÑвлено" +msgstr "Проблем із здоров'Ñм не виÑвлено" msgid "HealthCheck|Unhealthy" -msgstr "Ðездорові" +msgstr "Ðездоровий" + +msgid "Hide value" +msgid_plural "Hide values" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" msgid "History" msgstr "ІÑторіÑ" @@ -1382,10 +1763,10 @@ msgid "Housekeeping successfully started" msgstr "ÐžÑ‡Ð¸Ñ‰ÐµÐ½Ð½Ñ ÑƒÑпішно розпочато" msgid "Import repository" -msgstr "" +msgstr "Імпорт репозиторію" msgid "Improve Issue boards with GitLab Enterprise Edition." -msgstr "" +msgstr "Покращити дошки обговорень проблем за допомогою верÑÑ–Ñ— GitLab Enterprise Edition." msgid "Improve issues management with Issue weight and GitLab Enterprise Edition." msgstr "Покращити ÑƒÐ¿Ñ€Ð°Ð²Ð»Ñ–Ð½Ð½Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð°Ð¼Ð¸ з можливіÑÑ‚ÑŽ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð°Ð³Ð¸ проблеми за допомогою GitLab Enterprise Edition." @@ -1402,6 +1783,12 @@ msgstr[0] "ІнÑтанÑ" msgstr[1] "IнÑтанÑи" msgstr[2] "ІнÑтанÑів" +msgid "Instance does not support multiple Kubernetes clusters" +msgstr "" + +msgid "Interested parties can even contribute by pushing commits if they want to." +msgstr "" + msgid "Internal - The group and any internal projects can be viewed by any logged in user." msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ â€” будь-Ñкий автентифікований кориÑтувач має доÑтуп до цієї групи та уÑÑ–Ñ… Ñ—Ñ— внутрішніх проектів." @@ -1429,6 +1816,9 @@ msgstr "Дошки" msgid "Issues" msgstr "Проблеми" +msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable." +msgstr "" + msgid "Jan" msgstr "Ñіч." @@ -1447,6 +1837,27 @@ msgstr "чер." msgid "June" msgstr "червень" +msgid "Kubernetes" +msgstr "Kubernetes" + +msgid "Kubernetes Cluster" +msgstr "КлаÑтер Kubernetes" + +msgid "Kubernetes cluster creation time exceeds timeout; %{timeout}" +msgstr "" + +msgid "Kubernetes cluster integration was not removed." +msgstr "" + +msgid "Kubernetes cluster integration was successfully removed." +msgstr "" + +msgid "Kubernetes cluster was successfully updated." +msgstr "" + +msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page" +msgstr "" + msgid "LFSStatus|Disabled" msgstr "Вимкнено" @@ -1456,6 +1867,9 @@ msgstr "Увімкнено" msgid "Labels" msgstr "Мітки" +msgid "Labels can be applied to issues and merge requests to categorize them." +msgstr "" + msgid "Last %d day" msgid_plural "Last %d days" msgstr[0] "ОÑтанній %d день" @@ -1481,11 +1895,14 @@ msgid "Last updated" msgstr "ВоÑтаннє оновленно" msgid "LastPushEvent|You pushed to" -msgstr "" +msgstr "Ви відправили зміни до" msgid "LastPushEvent|at" msgstr "в" +msgid "Learn more" +msgstr "ДізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ" + msgid "Learn more in the" msgstr "ДізнайтеÑÑŒ більше" @@ -1504,15 +1921,18 @@ msgstr "Залишити проект" msgid "License" msgstr "ЛіцензіÑ" -msgid "Limited to showing %d event at most" -msgid_plural "Limited to showing %d events at most" -msgstr[0] "ÐžÐ±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ %d події" -msgstr[1] "ÐžÐ±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ %d подій" -msgstr[2] "ÐžÐ±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ %d подій" +msgid "Loading the GitLab IDE..." +msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ IDE GitLab..." msgid "Lock" msgstr "БлокуваннÑ" +msgid "Lock %{issuableDisplayName}" +msgstr "Заблокувати %{issuableDisplayName}" + +msgid "Lock this %{issuableDisplayName}? Only <strong>project members</strong> will be able to comment." +msgstr "" + msgid "Locked" msgstr "Заблоковано" @@ -1522,12 +1942,21 @@ msgstr "Заблоковані файли" msgid "Login" msgstr "Вхід" +msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos." +msgstr "" + +msgid "Manage labels" +msgstr "Керувати мітками" + msgid "Mar" msgstr "бер." msgid "March" msgstr "березень" +msgid "Mark done" +msgstr "" + msgid "Maximum git storage failures" msgstr "МакÑимальна кількіÑÑ‚ÑŒ невдач в Ñховищі даних git" @@ -1540,18 +1969,42 @@ msgstr "Медіана" msgid "Members" msgstr "КориÑтувачі" +msgid "Merge Request" +msgstr "Запит на злиттÑ" + msgid "Merge Requests" msgstr "Запити на злиттÑ" msgid "Merge events" -msgstr "" +msgstr "Події злиттÑ" msgid "Merge request" msgstr "Запит на злиттÑ" +msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others" +msgstr "" + +msgid "Merged" +msgstr "" + msgid "Messages" msgstr "ПовідомленнÑ" +msgid "Milestone" +msgstr "Етап" + +msgid "Milestones|Delete milestone" +msgstr "Видалити етап" + +msgid "Milestones|Delete milestone %{milestoneTitle}?" +msgstr "Видалити етап %{milestoneTitle}?" + +msgid "Milestones|Failed to delete milestone %{milestoneTitle}" +msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ етап %{milestoneTitle}" + +msgid "Milestones|Milestone %{milestoneTitle} was not found" +msgstr "Етап %{milestoneTitle} не знайдено" + msgid "MissingSSHKeyWarningLink|add an SSH key" msgstr "не додаÑте SSH ключ" @@ -1561,11 +2014,17 @@ msgstr "Моніторинг" msgid "More information is available|here" msgstr "тут" +msgid "Move" +msgstr "ПереміÑтити" + +msgid "Move issue" +msgstr "ПереміÑтити проблему" + msgid "Multiple issue boards" msgstr "Кілька дошок обговореннÑ" -msgid "New Cluster" -msgstr "Ðовий клаÑтер" +msgid "Name new label" +msgstr "" msgid "New Issue" msgid_plural "New Issues" @@ -1573,6 +2032,12 @@ msgstr[0] "Ðова проблема" msgstr[1] "Ðові проблеми" msgstr[2] "Ðових проблем" +msgid "New Kubernetes Cluster" +msgstr "" + +msgid "New Kubernetes cluster" +msgstr "" + msgid "New Pipeline Schedule" msgstr "Ðовий розклад Конвеєра" @@ -1597,6 +2062,9 @@ msgstr "Ðова група" msgid "New issue" msgstr "Ðова проблема" +msgid "New label" +msgstr "Ðова мітка" + msgid "New merge request" msgstr "Ðовий запит на злиттÑ" @@ -1607,7 +2075,7 @@ msgid "New schedule" msgstr "Ðовий Розклад" msgid "New snippet" -msgstr "" +msgstr "Ðовий Ñніпет" msgid "New subgroup" msgstr "Ðова підгрупа" @@ -1615,12 +2083,27 @@ msgstr "Ðова підгрупа" msgid "New tag" msgstr "Ðовий тег" -msgid "No container images stored for this project. Add one by following the instructions above." -msgstr "Ð’ цьому проекті немає жодного образа контейнера. Додайте його за інÑтрукціÑми вище." +msgid "No assignee" +msgstr "Ðемає виконавцÑ" -msgid "No repository" +msgid "No changes" +msgstr "Ðемає змін" + +msgid "No connection could be made to a Gitaly Server, please check your logs!" msgstr "" +msgid "No due date" +msgstr "Ðемає запланованої дати завершеннÑ" + +msgid "No estimate or time spent" +msgstr "" + +msgid "No file chosen" +msgstr "Файл не вибрано" + +msgid "No repository" +msgstr "Ðемає репозиторію" + msgid "No schedules" msgstr "немає Розкладів" @@ -1630,9 +2113,15 @@ msgstr "Ðемає витраченого чаÑу" msgid "None" msgstr "Жоден" +msgid "Not allowed to merge" +msgstr "" + msgid "Not available" msgstr "ÐедоÑтупний" +msgid "Not confidential" +msgstr "Ðе конфіденційно" + msgid "Not enough data" msgstr "ÐедоÑтатньо даних" @@ -1643,13 +2132,13 @@ msgid "NotificationEvent|Close issue" msgstr "Проблема закрита" msgid "NotificationEvent|Close merge request" -msgstr "" +msgstr "Запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ð¸Ð¹" msgid "NotificationEvent|Failed pipeline" msgstr "Ðевдача в конвеєрі" msgid "NotificationEvent|Merge merge request" -msgstr "" +msgstr "Запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð¾" msgid "NotificationEvent|New issue" msgstr "Ðова проблема" @@ -1664,7 +2153,7 @@ msgid "NotificationEvent|Reassign issue" msgstr "Перепризначити проблему" msgid "NotificationEvent|Reassign merge request" -msgstr "" +msgstr "Запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð¿ÐµÑ€ÐµÐ¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾" msgid "NotificationEvent|Reopen issue" msgstr "Повторне Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ñƒ" @@ -1693,6 +2182,12 @@ msgstr "ВідÑтежувати" msgid "Notifications" msgstr "СповіщеннÑ" +msgid "Notifications off" +msgstr "Ð¡Ð¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð¾" + +msgid "Notifications on" +msgstr "Ð¡Ð¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð¾" + msgid "Nov" msgstr "лиÑÑ‚." @@ -1702,8 +2197,8 @@ msgstr "лиÑтопад" msgid "Number of access attempts" msgstr "КількіÑÑ‚ÑŒ Ñпроб доÑтупу" -msgid "Number of failures before backing off" -msgstr "КількіÑÑ‚ÑŒ помилок до призупиненнÑ" +msgid "OK" +msgstr "OK" msgid "Oct" msgstr "жовт." @@ -1717,6 +2212,9 @@ msgstr "Фільтр" msgid "Only project members can comment." msgstr "Тільки учаÑники проекту можуть залишати коментарі." +msgid "Open" +msgstr "Відкрити" + msgid "Opened" msgstr "Відкрито" @@ -1750,9 +2248,6 @@ msgstr "« Перша" msgid "Password" msgstr "Пароль" -msgid "People without permission will never get a notification and won\\'t be able to comment." -msgstr "Люди без дозволу ніколи не отримуватимуть Ñповіщень Ñ– не зможуть коментувати." - msgid "Pipeline" msgstr "Конвеєр" @@ -1769,7 +2264,7 @@ msgid "Pipeline quota" msgstr "Квота на конвеєри" msgid "PipelineCharts|Failed:" -msgstr "Ðе вдалоÑÑ:" +msgstr "Ðевдалі:" msgid "PipelineCharts|Overall statistics" msgstr "Загальна ÑтатиÑтика" @@ -1795,12 +2290,6 @@ msgstr "Ð’ÑÑ–" msgid "PipelineSchedules|Inactive" msgstr "Ðеактивні" -msgid "PipelineSchedules|Input variable key" -msgstr "Введіть ім'Ñ Ð·Ð¼Ñ–Ð½Ð½Ð¾Ñ—" - -msgid "PipelineSchedules|Input variable value" -msgstr "" - msgid "PipelineSchedules|Next Run" msgstr "ÐаÑтупний запуÑк" @@ -1808,10 +2297,7 @@ msgid "PipelineSchedules|None" msgstr "Ðемає" msgid "PipelineSchedules|Provide a short description for this pipeline" -msgstr "" - -msgid "PipelineSchedules|Remove variable row" -msgstr "Видалити змінні" +msgstr "Задайте короткий Ð¾Ð¿Ð¸Ñ Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ конвеєру" msgid "PipelineSchedules|Take ownership" msgstr "Стати влаÑником" @@ -1823,7 +2309,7 @@ msgid "PipelineSchedules|Variables" msgstr "Змінні" msgid "PipelineSheduleIntervalPattern|Custom" -msgstr "" +msgstr "Спеціальні" msgid "Pipelines" msgstr "Конвеєри" @@ -1840,6 +2326,12 @@ msgstr "Конвеєри за оÑтанній тиждень" msgid "Pipelines for last year" msgstr "Конвеєри за оÑтанній рік" +msgid "Pipelines|Build with confidence" +msgstr "" + +msgid "Pipelines|Get started with Pipelines" +msgstr "" + msgid "Pipeline|all" msgstr "вÑÑ–" @@ -1852,15 +2344,24 @@ msgstr "зі Ñтадією" msgid "Pipeline|with stages" msgstr "зі ÑтадіÑми" +msgid "Play" +msgstr "Відтворити" + +msgid "Please <a href=%{link_to_billing} target=\"_blank\" rel=\"noopener noreferrer\">enable billing for one of your projects to be able to create a Kubernetes cluster</a>, then try again." +msgstr "" + msgid "Please solve the reCAPTCHA" msgstr "Будь лаÑка, пройдіть reCAPTCHA" msgid "Preferences" msgstr "ÐалаштуваннÑ" -msgid "Private - Project access must be granted explicitly to each user." +msgid "Primary" msgstr "" +msgid "Private - Project access must be granted explicitly to each user." +msgstr "Приватний — доÑтуп до проекту повинен надаватиÑÑ ÐºÐ¾Ð¶Ð½Ð¾Ð¼Ñƒ кориÑтувачеві." + msgid "Private - The group and its projects can only be viewed by members." msgstr "Приватна — цю групу та Ñ—Ñ— проекти можуть бачити тільки Ñ—Ñ— кориÑтувачі." @@ -1903,6 +2404,9 @@ msgstr "Ваш обліковий Ð·Ð°Ð¿Ð¸Ñ Ñ” влаÑником в цих Ð³Ñ msgid "Profiles|your account" msgstr "ваш обліковий запиÑ" +msgid "Programming languages used in this repository" +msgstr "" + msgid "Project '%{project_name}' is in the process of being deleted." msgstr "Проект '%{project_name}' перебуває в процеÑÑ– видаленнÑ." @@ -1916,8 +2420,17 @@ msgid "Project '%{project_name}' was successfully updated." msgstr "Проект '%{project_name}' уÑпішно оновлено." msgid "Project access must be granted explicitly to each user." +msgstr "ДоÑтуп до проекту повинен надаватиÑÑ ÐºÐ¾Ð¶Ð½Ð¾Ð¼Ñƒ кориÑтувачеві." + +msgid "Project avatar" +msgstr "Ðватар проекту" + +msgid "Project avatar in repository: %{link}" msgstr "" +msgid "Project cache successfully reset." +msgstr "Кеш проекту уÑпішно Ñкинуто." + msgid "Project details" msgstr "Деталі проекту" @@ -1936,11 +2449,26 @@ msgstr "Розпочато екÑпорт проекту. ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð msgid "ProjectActivityRSS|Subscribe" msgstr "ПідпиÑатиÑÑ" +msgid "ProjectCreationLevel|Allowed to create projects" +msgstr "" + +msgid "ProjectCreationLevel|Default project creation protection" +msgstr "" + +msgid "ProjectCreationLevel|Developers + Masters" +msgstr "" + +msgid "ProjectCreationLevel|Masters" +msgstr "Керівники" + +msgid "ProjectCreationLevel|No one" +msgstr "Ðіхто" + msgid "ProjectFeature|Disabled" msgstr "Вимкнено" msgid "ProjectFeature|Everyone with access" -msgstr "" +msgstr "Ð’ÑÑ– із доÑтупом" msgid "ProjectFeature|Only team members" msgstr "Тільки члени команди" @@ -1960,15 +2488,9 @@ msgstr "ІÑторіÑ" msgid "ProjectSettings|Contact an admin to change this setting." msgstr "ЗвернітьÑÑ Ð´Ð¾ адмініÑтратора, щоб змінити це налаштуваннÑ." -msgid "ProjectSettings|Immediately run a pipeline on the default branch" -msgstr "Зразу запуÑкати конвеєр у гілкці за замовчуваннÑм" - msgid "ProjectSettings|Only signed commits can be pushed to this repository." msgstr "Тільки підпиÑані коміти можуть бути надіÑлані в цей репозиторій." -msgid "ProjectSettings|Problem setting up the CI/CD settings JavaScript" -msgstr "Проблема Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð² CI / CD JavaScript" - msgid "ProjectSettings|This setting is applied on the server level and can be overridden by an admin." msgstr "Цей параметр заÑтоÑовуєтьÑÑ Ð½Ð° рівні Ñервера та може бути перевизначений адмініÑтратором." @@ -1979,7 +2501,7 @@ msgid "ProjectSettings|This setting will be applied to all projects unless overr msgstr "Цей параметр буде заÑтоÑовано до вÑÑ–Ñ… проектів, Ñкщо адмініÑтратор не змінить його." msgid "ProjectSettings|Users can only push commits to this repository that were committed with one of their own verified emails." -msgstr "" +msgstr "КориÑтувачі можуть відправлÑти в цей репозиторій лише Ñ‚Ñ– коміти, Ñкі міÑÑ‚ÑÑ‚ÑŒ одну із їхніх підтверджених Ð°Ð´Ñ€ÐµÑ ÐµÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð¾Ñ— пошти." msgid "Projects" msgstr "Проекти" @@ -2033,11 +2555,14 @@ msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example msgstr "Базова адреÑа Prometheus API, наприклад http://prometheus.example.com/" msgid "PrometheusService|Time-series monitoring service" -msgstr "Моніторинг Prometheus" +msgstr "" msgid "PrometheusService|View environments" msgstr "ПереглÑд Ñередовищ" +msgid "Protip:" +msgstr "Підказка:" + msgid "Public - The group and any public projects can be viewed without any authentication." msgstr "Публічна — група та вÑÑ– публічні проекти можуть переглÑдатиÑÑ Ð±ÐµÐ· автентифікації." @@ -2045,14 +2570,17 @@ msgid "Public - The project can be accessed without any authentication." msgstr "Публічний — проект может переглÑдатиÑÑ Ð±ÐµÐ· автентифікації." msgid "Push Rules" -msgstr "" +msgstr "Правила відправленнÑ" msgid "Push events" -msgstr "" +msgstr "Події Ð²Ñ–Ð´Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ (push)" msgid "PushRule|Committer restriction" msgstr "ÐžÐ±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð´Ð»Ñ ÐºÐ¾Ð¼Ñ–Ñ‚Ñ‚ÐµÑ€Ð°" +msgid "Quick actions can be used in the issues description and comment boxes." +msgstr "" + msgid "Read more" msgstr "Докладніше" @@ -2065,6 +2593,12 @@ msgstr "Гілки" msgid "RefSwitcher|Tags" msgstr "Теги" +msgid "Reference:" +msgstr "" + +msgid "Register / Sign In" +msgstr "ЗареєÑтруватиÑÑ / Увійти" + msgid "Registry" msgstr "РеєÑÑ‚Ñ€" @@ -2084,14 +2618,23 @@ msgid "Related Merge Requests" msgstr "Пов'Ñзані запити на злиттÑ" msgid "Related Merged Requests" -msgstr "" +msgstr "Пов'Ñзані виконані запити" msgid "Remind later" msgstr "Ðагадати пізніше" +msgid "Remove" +msgstr "Видалити" + +msgid "Remove avatar" +msgstr "Видалити аватар" + msgid "Remove project" msgstr "Видалити проект" +msgid "Repair authentication" +msgstr "" + msgid "Repository" msgstr "Репозиторій" @@ -2107,6 +2650,12 @@ msgstr "Оновити токен доÑтупу Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ¸ прРmsgid "Reset runners registration token" msgstr "Скинути реєÑтраційний токен runner-ів" +msgid "Reveal value" +msgid_plural "Reveal values" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + msgid "Revert this commit" msgstr "Ðнулювати цей коміт" @@ -2116,13 +2665,13 @@ msgstr "Ðнулювати цей запит на злиттÑ" msgid "SSH Keys" msgstr "Ключі SSH" -msgid "Save" -msgstr "Зберегти" - msgid "Save changes" msgstr "Зберегти зміни" msgid "Save pipeline schedule" +msgstr "Зберегти розклад конвеєра" + +msgid "Save variables" msgstr "" msgid "Schedule a new pipeline" @@ -2140,44 +2689,65 @@ msgstr "Тематичні дошки проблем" msgid "Search branches and tags" msgstr "Пошук гілок та тегів" +msgid "Search milestones" +msgstr "Пошук етапів" + +msgid "Search project" +msgstr "" + +msgid "Search users" +msgstr "Пошук кориÑтувачів" + msgid "Seconds before reseting failure information" msgstr "КількіÑÑ‚ÑŒ Ñекунд до ÑÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ— про збої" -msgid "Seconds to wait after a storage failure" -msgstr "Скільки Ñекунд очікувати піÑÐ»Ñ Ð·Ð±Ð¾ÑŽ в Ñховищі даних" - msgid "Seconds to wait for a storage access attempt" msgstr "КількіÑÑ‚ÑŒ Ñекунд Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ´ повторною Ñпробою доÑтупу до Ñховища даних" +msgid "Secret variables" +msgstr "" + msgid "Select Archive Format" msgstr "Виберіть формат архіву" msgid "Select a timezone" msgstr "Вибрати чаÑовий поÑÑ" +msgid "Select assignee" +msgstr "Виберіть виконавцÑ" + +msgid "Select branch/tag" +msgstr "Виберіть гілку або тег" + msgid "Select target branch" msgstr "Вибір цільової гілки" +msgid "Selective synchronization" +msgstr "" + msgid "Sep" msgstr "вер." msgid "September" msgstr "вереÑень" +msgid "Server version" +msgstr "ВерÑÑ–Ñ Ñервера" + msgid "Service Templates" msgstr "Ð¡ÐµÑ€Ð²Ñ–Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ñ–Ð²" msgid "Set a password on your account to pull or push via %{protocol}." -msgstr "" +msgstr "Ð’Ñтановіть пароль Ð´Ð»Ñ Ñвого облікового запиÑу, щоб мати можливіÑÑ‚ÑŒ відправлÑти та отримувати через %{protocol}." -msgid "Set up CI" -msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ CI" +msgid "Set up CI/CD" +msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ CI/CD" msgid "Set up Koding" msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Koding" msgid "Set up auto deploy" -msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡Ð½Ðµ розгортаннÑ" +msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ розгортаннÑ" msgid "SetPasswordToCloneLink|set a password" msgstr "вÑтановити пароль" @@ -2185,6 +2755,15 @@ msgstr "вÑтановити пароль" msgid "Settings" msgstr "ÐалаштуваннÑ" +msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero." +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset pipeline minutes" +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset used pipeline minutes" +msgstr "" + msgid "Show parent pages" msgstr "Показати батьківÑькі Ñторінки" @@ -2200,9 +2779,6 @@ msgstr[2] "Показано %d подій" msgid "Sidebar|Change weight" msgstr "Змінити вагу" -msgid "Sidebar|Edit" -msgstr "Редагувати" - msgid "Sidebar|No" msgstr "ÐÑ–" @@ -2213,20 +2789,32 @@ msgid "Sidebar|Weight" msgstr "Вага" msgid "Snippets" +msgstr "Сніпети" + +msgid "Something went wrong on our end" msgstr "" msgid "Something went wrong on our end." msgstr "ЩоÑÑŒ пішло не так з нашого боку" +msgid "Something went wrong trying to change the confidentiality of this issue" +msgstr "" + msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}" msgstr "ЩоÑÑŒ пішло не так, при Ñпробі зміни Ñтану Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ ${this.issuableDisplayName}" +msgid "Something went wrong when toggling the button" +msgstr "" + msgid "Something went wrong while fetching the projects." msgstr "ЩоÑÑŒ пішло не так під Ñ‡Ð°Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ñ–Ð²" msgid "Something went wrong while fetching the registry list." msgstr "ЩоÑÑŒ пішло не так при отриманні ÑпиÑку із реєÑтру." +msgid "Something went wrong. Please try again." +msgstr "" + msgid "Sort by" msgstr "Сортувати за" @@ -2342,10 +2930,10 @@ msgid "Specify the following URL during the Runner setup:" msgstr "Зазначте наÑтупний URL під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Runner-а:" msgid "StarProject|Star" -msgstr "ПідпиÑатиÑÑ" +msgstr "Ð’ обрані" msgid "Starred projects" -msgstr "Відмічені проекти" +msgstr "Обрані проекти" msgid "Start a %{new_merge_request} with these changes" msgstr "Почати %{new_merge_request} з цими змінами" @@ -2356,17 +2944,17 @@ msgstr "ЗапуÑÑ‚Ñ–Ñ‚ÑŒ Runner!" msgid "Stopped" msgstr "Зупинено" +msgid "Storage" +msgstr "" + msgid "Subgroups" msgstr "Підгрупи" -msgid "Subscribe" -msgstr "ПідпиÑатиÑÑ" - msgid "Switch branch/tag" -msgstr "" +msgstr "Перейти в гілку/тег" msgid "System Hooks" -msgstr "" +msgstr "СиÑтемні гуки" msgid "Tag" msgid_plural "Tags" @@ -2417,7 +3005,7 @@ msgid "TagsPage|Optionally, add a message to the tag." msgstr "При бажанні Ви можете додати Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð² тег." msgid "TagsPage|Optionally, add release notes to the tag. They will be stored in the GitLab database and displayed on the tags page." -msgstr "" +msgstr "При бажанні, додайте Ð¾Ð¿Ð¸Ñ Ñ€ÐµÐ»Ñ–Ð·Ñƒ до тегу. Він буде збережений в базі даних GitLab Ñ– відображатиметьÑÑ Ð½Ð° Ñторінці тегів." msgid "TagsPage|Release notes" msgstr "ÐžÐ¿Ð¸Ñ Ñ€ÐµÐ»Ñ–Ð·Ñƒ" @@ -2438,7 +3026,7 @@ msgid "TagsPage|This tag has no release notes." msgstr "Цей тег не міÑтить опиÑу релізу." msgid "TagsPage|Use git tag command to add a new one:" -msgstr "ВикориÑтовуйте команду git tag, щоб додати новий:" +msgstr "ВикориÑтовуйте команду git tag, щоб додати новий тег:" msgid "TagsPage|Write your release notes or drag files here..." msgstr "Ðапишіть Ñвій Ð¾Ð¿Ð¸Ñ Ñ€ÐµÐ»Ñ–Ð·Ñƒ або перетÑгніть файли Ñюди..." @@ -2458,41 +3046,41 @@ msgstr "ДÑкую! Більше не показувати це повідомл msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project." msgstr "Розширений глобальний пошук в GitLab - це потужний інÑтрумент Ñкий заощаджує ваш чаÑ. ЗаміÑÑ‚ÑŒ Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð´Ñƒ Ñ– витрати чаÑу, ви можете шукати код інших команд, Ñкий може допомогти у вашому проекті." -msgid "The circuitbreaker backoff threshold should be lower than the failure count threshold" -msgstr "Поріг Ð¿Ñ€Ð¸Ð·ÑƒÐ¿Ð¸Ð½ÐµÐ½Ð½Ñ circuitbreaker має бути нижчий за поріг повного відключеннÑ" +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project" +msgstr "" -msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request." +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project." msgstr "" +msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request." +msgstr "Ð¡Ñ‚Ð°Ð´Ñ–Ñ \"ÐапиÑÐ°Ð½Ð½Ñ ÐºÐ¾Ð´Ñƒ\" показує Ñ‡Ð°Ñ Ð²Ñ–Ð´ першого коміту до ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñƒ на злиттÑ. Дані будуть автоматично додані піÑÐ»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð²Ð°ÑˆÐ¾Ð³Ð¾ першого запиту на злиттÑ." + msgid "The collection of events added to the data gathered for that stage." -msgstr "" +msgstr "ÐšÐ¾Ð»ÐµÐºÑ†Ñ–Ñ Ð¿Ð¾Ð´Ñ–Ð¹ додана до даних, зібраних Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— Ñтадії." msgid "The fork relationship has been removed." -msgstr "" +msgstr "Зв'Ñзок форку видалено." msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage." +msgstr "Ð¡Ñ‚Ð°Ð´Ñ–Ñ \"Проблема\" показує, Ñкільки чаÑу потрібно від ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð¸ до Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ñ—Ñ— до ÑкогоÑÑŒ етапу, або Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð¸ на дошку. Почніть Ñтворювати проблеми, щоб переглÑдати дані Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— Ñтадії." + +msgid "The maximum file size allowed is 200KB." msgstr "" msgid "The number of attempts GitLab will make to access a storage." msgstr "КількіÑÑ‚ÑŒ Ñпроб, Ñкі зробить GitLab Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð¾Ñтупу до Ñховища даних." -msgid "The number of failures after which GitLab will start temporarily disabling access to a storage shard on a host" -msgstr "КількіÑÑ‚ÑŒ невдач, піÑÐ»Ñ Ñ‡Ð¾Ð³Ð¾ GitLab почне тимчаÑово блокувати доÑтуп до Ñховища на хоÑÑ‚Ñ–" - msgid "The number of failures of after which GitLab will completely prevent access to the storage. The number of failures can be reset in the admin interface: %{link_to_health_page} or using the %{api_documentation_link}." msgstr "КількіÑÑ‚ÑŒ збоїв піÑÐ»Ñ Ñкої Gitlab повніÑÑ‚ÑŽ заблокує доÑтуп до Ñховища данних. Лічильник кількоÑÑ‚Ñ– збоїв може бути Ñкинутий в інтерфейÑÑ– адмініÑтратора (%{link_to_health_page}), або через %{api_documentation_link}." msgid "The phase of the development lifecycle." msgstr "Фаза життєвого циклу розробки." -msgid "The pipelines schedule runs pipelines in the future, repeatedly, for specific branches or tags. Those scheduled pipelines will inherit limited project access based on their associated user." -msgstr "Розклад конвеєрів запуÑкає в майбутньому конвеєри, Ð´Ð»Ñ Ð¿ÐµÐ²Ð½Ð¸Ñ… гілок або тегів. Заплановані конвеєри уÑпадковують Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð½Ð° доÑтуп до проекту на оÑнові пов'Ñзаного з ними кориÑтувача." - msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit." -msgstr "" +msgstr "Ð¡Ñ‚Ð°Ð´Ñ–Ñ \"ПлануваннÑ\" відображаєтьÑÑ Ñ‡Ð°Ñ Ð²Ñ–Ð´ попереднього кроку до першого коміту. ДодаєтьÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾, Ñк тільки відправитьÑÑ Ð¿ÐµÑ€ÑˆÐ¸Ð¹ коміт." msgid "The production stage shows the total time it takes between creating an issue and deploying the code to production. The data will be automatically added once you have completed the full idea to production cycle." -msgstr "" +msgstr "Ð¡Ñ‚Ð°Ð´Ñ–Ñ \"Production\" показує загальний Ñ‡Ð°Ñ Ð¼Ñ–Ð¶ ÑтвореннÑм проблеми та розгортаннÑм коду у production. Дані будуть автоматично додані піÑÐ»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð¿Ð¾Ð²Ð½Ð¾Ñ— ідеї до production циклу." msgid "The project can be accessed by any logged in user." msgstr "ДоÑтуп до проекту можливий будь-Ñким зареєÑтрованим кориÑтувачем." @@ -2504,13 +3092,13 @@ msgid "The repository for this project does not exist." msgstr "Репозиторій Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ проекту не Ñ–Ñнує." msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request." -msgstr "" +msgstr "Ð¡Ñ‚Ð°Ð´Ñ–Ñ \"ЗатвердженнÑ\" показує Ñ‡Ð°Ñ Ð²Ñ–Ð´ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñƒ про об'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð´Ð¾ його виконаннÑ. Дані будуть автоматично додані піÑÐ»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÑˆÐ¾Ð³Ð¾ запиту на злиттÑ." msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time." -msgstr "" +msgstr "Ð¡Ñ‚Ð°Ð´Ñ–Ñ \"Staging\" показує Ñ‡Ð°Ñ Ð¼Ñ–Ð¶ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñƒ на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ñ‚Ð° розгортаннÑм коду у production. Дані автоматично додаютьÑÑ Ð¿Ñ–ÑÐ»Ñ Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ñƒ production вперше." msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running." -msgstr "" +msgstr "Ð¡Ñ‚Ð°Ð´Ñ–Ñ \"ТеÑтуваннÑ\" показує чаÑ, Ñкий GitLab CI витрачає Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ конвеєра Ð´Ð»Ñ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ð¾Ð³Ð¾ запиту злиттÑ. Дані будуть автоматично додані піÑÐ»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÑˆÐ¾Ð³Ð¾ конвеєра." msgid "The time in seconds GitLab will keep failure information. When no failures occur during this time, information about the mount is reset." msgstr "КількіÑÑ‚ÑŒ Ñекунд, протÑгом Ñкої GitLab зберігає інформацію про збої. Якщо протÑгом цього періоду жодних збоїв не відбуваєтьÑÑ, Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ точку Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÑкидаєтьÑÑ." @@ -2518,20 +3106,47 @@ msgstr "КількіÑÑ‚ÑŒ Ñекунд, протÑгом Ñкої GitLab збе msgid "The time in seconds GitLab will try to access storage. After this time a timeout error will be raised." msgstr "КількіÑÑ‚ÑŒ Ñекунд, протÑгом Ñкої GitLab намагатиметьÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ доÑтуп до Ñховища даних. По завершенню цього періоду буде згенерована помилка про Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð»Ñ–Ð¼Ñ–Ñ‚Ñƒ чаÑу." -msgid "The time taken by each data entry gathered by that stage." +msgid "The time in seconds between storage checks. When a previous check did complete yet, GitLab will skip a check." msgstr "" +msgid "The time taken by each data entry gathered by that stage." +msgstr "ЧаÑ, витрачений на кожен елемент, зібраний на цій Ñтадії." + msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6." msgstr "Середнє Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð² Ñ€Ñдку. Приклад: між 3, 5, 9, Ñередніми 5, між 3, 5, 7, 8, Ñередніми (5 + 7) / 2 = 6." +msgid "There are no issues to show" +msgstr "" + +msgid "There are no merge requests to show" +msgstr "" + msgid "There are problems accessing Git storage: " +msgstr "Є проблеми з доÑтупом до Ñховища git: " + +msgid "There was an error loading users activity calendar." +msgstr "" + +msgid "There was an error saving your notification settings." +msgstr "" + +msgid "There was an error subscribing to this label." +msgstr "" + +msgid "There was an error when reseting email token." +msgstr "" + +msgid "There was an error when subscribing to this label." +msgstr "" + +msgid "There was an error when unsubscribing from this label." msgstr "" msgid "This board\\'s scope is reduced" msgstr "ВидиміÑÑ‚ÑŒ цієї дошки обмежена" -msgid "This branch has changed since you started editing. Would you like to create a new branch?" -msgstr "Ð¦Ñ Ð³Ñ–Ð»ÐºÐ° була змінена піÑÐ»Ñ Ñ‚Ð¾Ð³Ð¾ моменту, коли ви почали Ñ—Ñ— редагувати. Ви хотіли б Ñтворити нову?" +msgid "This directory" +msgstr "Цей каталог" msgid "This is a confidential issue." msgstr "Це конфіденційна проблема." @@ -2539,20 +3154,47 @@ msgstr "Це конфіденційна проблема." msgid "This is the author's first Merge Request to this project." msgstr "Це перший запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð²Ñ–Ð´ цього автора Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ проекту." +msgid "This issue is confidential" +msgstr "Ð¦Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð° Ñ” конфіденційною" + msgid "This issue is confidential and locked." msgstr "Ð¦Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð° конфіденційна Ñ– заблокована." msgid "This issue is locked." msgstr "Ð¦Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð° заблокована." -msgid "This means you can not push code until you create an empty repository or import existing one." +msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments" +msgstr "" + +msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered" msgstr "" +msgid "This job has not been triggered yet" +msgstr "" + +msgid "This job has not started yet" +msgstr "" + +msgid "This job is in pending state and is waiting to be picked by a runner" +msgstr "" + +msgid "This job requires a manual action" +msgstr "" + +msgid "This means you can not push code until you create an empty repository or import existing one." +msgstr "Це означає, що ви не можете відправлÑти код, поки не Ñтворите порожній репозиторій або не імпортуєте Ñ–Ñнуючий." + msgid "This merge request is locked." msgstr "Цей запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¾Ð²Ð°Ð½Ð¾." +msgid "This project" +msgstr "Цей проект" + +msgid "This repository" +msgstr "Цей репозиторій" + msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here." -msgstr "" +msgstr "Ці Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ ÐµÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð¾Ñ— пошти автоматично Ñтануть обговореннÑми проблем, Ñкі відображатимутьÑÑ Ñ‚ÑƒÑ‚ (причому коментарі Ñтануть чаÑтиною перепиÑки)." msgid "Time before an issue gets scheduled" msgstr "Ð§Ð°Ñ Ð´Ð¾ початку потраплÑÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð¸ в планувальник" @@ -2561,11 +3203,23 @@ msgid "Time before an issue starts implementation" msgstr "Ð§Ð°Ñ Ð´Ð¾ початку роботи над проблемою" msgid "Time between merge request creation and merge/close" -msgstr "" +msgstr "Ð§Ð°Ñ Ð¼Ñ–Ð¶ ÑтвореннÑм запиту Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ñ– його виконаннÑм або закриттÑм" + +msgid "Time tracking" +msgstr "ВідÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ñ‡Ð°Ñу" msgid "Time until first merge request" msgstr "Ð§Ð°Ñ Ð´Ð¾ першого запиту на злиттÑ" +msgid "TimeTrackingEstimated|Est" +msgstr "" + +msgid "TimeTracking|Estimated:" +msgstr "" + +msgid "TimeTracking|Spent" +msgstr "" + msgid "Timeago|%s days ago" msgstr "%s днів тому" @@ -2707,6 +3361,18 @@ msgstr "Ñекунд(а)" msgid "Title" msgstr "Ðазва" +msgid "Todo" +msgstr "Задача" + +msgid "Toggle sidebar" +msgstr "Перемикач бічної панелі" + +msgid "ToggleButton|Toggle Status: OFF" +msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð¿ÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ñ‡Ð°: ВИМКÐЕÐО" + +msgid "ToggleButton|Toggle Status: ON" +msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð¿ÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ñ‡Ð°: УВІМКÐЕÐО" + msgid "Total Time" msgstr "Загальний чаÑ" @@ -2717,40 +3383,61 @@ msgid "Total test time for all commits/merges" msgstr "Загальний чаÑ, щоб перевірити вÑÑ– коміти/злиттÑ" msgid "Track activity with Contribution Analytics." -msgstr "" +msgstr "ВідÑтежувати активніÑÑ‚ÑŒ за допомогою Ðналітики учаÑників." msgid "Track groups of issues that share a theme, across projects and milestones" msgstr "ВідÑтежуйте групи проблем зі Ñпільною темою з різних проектів та етапів" +msgid "Total: %{total}" +msgstr "" + +msgid "Track time with quick actions" +msgstr "" + +msgid "Trigger this manual action" +msgstr "" + msgid "Turn on Service Desk" msgstr "Ввімкнути Service Desk" +msgid "Type %{value} to confirm:" +msgstr "" + +msgid "Unable to reset project cache." +msgstr "" + +msgid "Unknown" +msgstr "Ðевідомо" + msgid "Unlock" msgstr "Розблокувати" +msgid "Unlock this %{issuableDisplayName}? <strong>Everyone</strong> will be able to comment." +msgstr "" + msgid "Unlocked" msgstr "Розблоковано" msgid "Unstar" -msgstr "ВідпиÑатиÑÑŒ" +msgstr "Видалити із обраних" -msgid "Unsubscribe" -msgstr "ВідпиÑатиÑÑ" +msgid "Up to date" +msgstr "" msgid "Upgrade your plan to activate Advanced Global Search." msgstr "Перейдіть на вищий тарифний план щоб активувати Покращений Глобальний Пошук." msgid "Upgrade your plan to activate Contribution Analytics." -msgstr "" +msgstr "Перейдіть на вищий тарифний план Ð´Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ— Ðналітики учаÑників." msgid "Upgrade your plan to activate Group Webhooks." -msgstr "" +msgstr "Перейдіть на вищий тарифний план щоб активувати групові веб-гуки." msgid "Upgrade your plan to activate Issue weight." -msgstr "" +msgstr "Перейдіть на вищий тарифний план щоб активувати вагу обговорень проблем." msgid "Upgrade your plan to improve Issue boards." -msgstr "" +msgstr "Перейдіть на вищий тарифний план щоб покращити дошки обговорень." msgid "Upload New File" msgstr "Завантажити новий файл" @@ -2758,6 +3445,9 @@ msgstr "Завантажити новий файл" msgid "Upload file" msgstr "Завантажити файл" +msgid "Upload new avatar" +msgstr "" + msgid "UploadLink|click to upload" msgstr "ÐатиÑніть, щоб завантажити" @@ -2770,9 +3460,15 @@ msgstr "ВикориÑтовувати токен під Ñ‡Ð°Ñ ÑƒÑтановк msgid "Use your global notification setting" msgstr "ВикориÑтовуютьÑÑ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ– Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½ÑŒ" +msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want." +msgstr "" + msgid "View file @ " msgstr "ПереглÑд файла @ " +msgid "View labels" +msgstr "" + msgid "View open merge request" msgstr "ПереглÑд відкритих запитів на злиттÑ" @@ -2794,21 +3490,21 @@ msgstr "Ðевідомий" msgid "Want to see the data? Please ask an administrator for access." msgstr "Хочете побачити дані? Будь лаÑка, попроÑить у адмініÑтратора доÑтуп." -msgid "We don't have enough data to show this stage." +msgid "We could not verify that one of your projects on GCP has billing enabled. Please try again." msgstr "" +msgid "We don't have enough data to show this stage." +msgstr "Ми не маємо доÑтатньо даних Ð´Ð»Ñ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— Ñтадії." + msgid "We want to be sure it is you, please confirm you are not a robot." msgstr "Ми хочемо бути впевнені, що це ви, будь лаÑка, підтвердіть, що ви не робот." msgid "Webhooks allow you to trigger a URL if, for example, new code is pushed or a new issue is created. You can configure webhooks to listen for specific events like pushes, issues or merge requests. Group webhooks will apply to all projects in a group, allowing you to standardize webhook functionality across your entire group." -msgstr "" +msgstr "Веб-гук дозволÑÑ” вам викликати URL Ñкщо, наприклад, був відправлений новий код або Ñтворено нову проблему. Ви можете налаштувати його так, щоб він реагував на певні події (відправки коду, проблеми або запити на злиттÑ). Групові веб-гуки заÑтоÑовуютьÑÑ Ð´Ð¾ вÑÑ–Ñ… проектів в групі Ñ– дозволÑÑŽÑ‚ÑŒ вам Ñтандартизувати Ñ—Ñ… Ð´Ð»Ñ Ð²Ñієї вашої групи." msgid "Weight" msgstr "Вага" -msgid "When access to a storage fails. GitLab will prevent access to the storage for the time specified here. This allows the filesystem to recover. Repositories on failing shards are temporarly unavailable" -msgstr "Коли відбуваєтьÑÑ Ð·Ð±Ñ–Ð¹ при доÑтупі до Ñховища даних, GitLab блокує доÑуп до нього протÑгом періоду чаÑу, заданому тут. Це дає можливіÑÑ‚ÑŒ файловій ÑиÑтемі відновитиÑÑ. Репозиторії на шардах (shards) зі збоÑми тимчаÑово не доÑтупні" - msgid "Wiki" msgstr "Wiki" @@ -2827,9 +3523,15 @@ msgstr "РекомендуєтьÑÑ Ð²Ñтановити %{markdown}, з тим msgid "WikiClone|Start Gollum and edit locally" msgstr "ЗапуÑÑ‚Ñ–Ñ‚ÑŒ Gollum Ñ– редагуйте локально" -msgid "WikiEmptyPageError|You are not allowed to create wiki pages" +msgid "WikiEditPageTip|Tip: You can move this page by adding the path to the beginning of the title." msgstr "" +msgid "WikiEdit|There is already a page with the same title in that path." +msgstr "" + +msgid "WikiEmptyPageError|You are not allowed to create wiki pages" +msgstr "Ви не можете Ñтворювати wiki-Ñторінки" + msgid "WikiHistoricalPage|This is an old version of this page." msgstr "Це — Ñтара верÑÑ–Ñ Ñторінки." @@ -2846,7 +3548,7 @@ msgid "WikiMarkdownDocs|More examples are in the %{docs_link}" msgstr "Більше прикладів знаходитьÑÑ Ð² %{docs_link}" msgid "WikiMarkdownDocs|documentation" -msgstr "документаціÑ" +msgstr "документації" msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}" msgstr "Ð”Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° (нову) Ñторінку, проÑто введіть %{link_example}" @@ -2858,7 +3560,7 @@ msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We wi msgstr "Порада: можна вказати повний шлÑÑ… до нового файлу. Ми автоматично Ñтворимо вÑÑ– відÑутні каталоги." msgid "WikiNewPageTitle|New Wiki Page" -msgstr "" +msgstr "Ðова wiki-Ñторінка" msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?" msgstr "Ви дійÑно бажаєте видалити цю Ñторінку?" @@ -2909,10 +3611,10 @@ msgid "Wiki|Pages" msgstr "Сторінки" msgid "Wiki|Wiki Pages" -msgstr "" +msgstr "Wiki-Ñторінки" msgid "With contribution analytics you can have an overview for the activity of issues, merge requests and push events of your organization and its members." -msgstr "" +msgstr "З аналітикою учаÑників ви може вивчати активніÑÑ‚ÑŒ в обговореннÑÑ…, запитах на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ñ– змінах у коді Ð´Ð»Ñ Ð²Ð°ÑˆÐ¾Ñ— організації та Ñ—Ñ— учаÑників." msgid "Withdraw Access Request" msgstr "СкаÑувати запит доÑтупу" @@ -2929,7 +3631,19 @@ msgstr "Ви збираєтеÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ зв'Ñзок з форка Ð msgid "You are going to transfer %{project_name_with_namespace} to another owner. Are you ABSOLUTELY sure?" msgstr "Ви збираєтеÑÑ Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‚Ð¸ проект %{project_name_with_namespace} іншому влаÑнику. Ви ÐБСОЛЮТÐО впевнені?" +msgid "You can also star a label to make it a priority label." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + msgid "You can only add files when you are on a branch" +msgstr "Ви можете додавати файли тільки коли перебуваєте в гілці" + +msgid "You can only edit files when you are on a branch" msgstr "" msgid "You cannot write to a read-only secondary GitLab Geo instance. Please use %{link_to_primary_node} instead." @@ -2963,12 +3677,18 @@ msgid "You will receive notifications only for comments in which you were @menti msgstr "Ви будете отримувати Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‚Ñ–Ð»ÑŒÐºÐ¸ Ð´Ð»Ñ ÐºÐ¾Ð¼ÐµÐ½Ñ‚Ð°Ñ€Ñ–Ð², в Ñких ви були @згадані" msgid "You won't be able to pull or push project code via %{protocol} until you %{set_password_link} on your account" -msgstr "" +msgstr "Ви не зможете відправлÑти та отримувати код проекту через %{protocol} поки не %{set_password_link} Ð´Ð»Ñ Ð²Ð°ÑˆÐ¾Ð³Ð¾ облікового запиÑу" msgid "You won't be able to pull or push project code via SSH until you %{add_ssh_key_link} to your profile" -msgstr "" +msgstr "Ви не зможете відправлÑти та отримувати код проекту через SSH поки не %{add_ssh_key_link} до вашого профілю" msgid "You won't be able to pull or push project code via SSH until you add an SSH key to your profile" +msgstr "Ви не зможете відправлÑти та отримувати код проекту через SSH, поки не додаÑте в Ñвій профіль SSH ключ" + +msgid "You'll need to use different branch names to get a valid comparison." +msgstr "" + +msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure" msgstr "" msgid "Your comment will not be visible to the public." @@ -2983,32 +3703,227 @@ msgstr "Ваше ім'Ñ" msgid "Your projects" msgstr "Ваші проекти" +msgid "assign yourself" +msgstr "призначити Ñебе" + msgid "branch name" msgstr "ім'Ñ Ð³Ñ–Ð»ÐºÐ¸" msgid "by" msgstr "від" +msgid "ciReport|Code quality" +msgstr "ЯкіÑÑ‚ÑŒ коду" + +msgid "ciReport|DAST detected no alerts by analyzing the review app" +msgstr "" + +msgid "ciReport|Failed to load ${type} report" +msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð²Ñ–Ñ‚Ñƒ ${type} пройшло невдало" + +msgid "ciReport|Fixed:" +msgstr "" + +msgid "ciReport|Instances" +msgstr "ІнÑтанÑи" + +msgid "ciReport|Learn more about whitelisting" +msgstr "" + +msgid "ciReport|Loading ${type} report" +msgstr "" + +msgid "ciReport|No changes to code quality" +msgstr "" + +msgid "ciReport|No changes to performance metrics" +msgstr "" + +msgid "ciReport|Performance metrics" +msgstr "" + +msgid "ciReport|SAST" +msgstr "SAST" + +msgid "ciReport|SAST detected no security vulnerabilities" +msgstr "" + +msgid "ciReport|SAST:container no vulnerabilities were found" +msgstr "" + +msgid "ciReport|Show complete code vulnerabilities report" +msgstr "" + +msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}" +msgstr "" + msgid "commit" msgstr "коміт" +msgid "confidentiality|You are going to turn off the confidentiality. This means <strong>everyone</strong> will be able to see and leave a comment on this issue." +msgstr "" + +msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with <strong>at least Reporter access</strong> are able to see and leave comments on the issue." +msgstr "" + msgid "day" msgid_plural "days" msgstr[0] "день" msgstr[1] "дні" msgstr[2] "днів" +msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command." +msgstr "" + +msgid "merge request" +msgid_plural "merge requests" +msgstr[0] "запит на злиттÑ" +msgstr[1] "запити на злиттÑ" +msgstr[2] "запитів на злиттÑ" + +msgid "mrWidget|Cancel automatic merge" +msgstr "СкаÑувати автоматичне злиттÑ" + +msgid "mrWidget|Check out branch" +msgstr "" + +msgid "mrWidget|Checking ability to merge automatically" +msgstr "" + +msgid "mrWidget|Cherry-pick" +msgstr "" + +msgid "mrWidget|Cherry-pick this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Closed" +msgstr "" + +msgid "mrWidget|Closed by" +msgstr "" + +msgid "mrWidget|Closes" +msgstr "" + +msgid "mrWidget|Did not close" +msgstr "" + +msgid "mrWidget|Email patches" +msgstr "" + +msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|Mentions" +msgstr "" + +msgid "mrWidget|Merge" +msgstr "ЗлиттÑ" + +msgid "mrWidget|Merge failed." +msgstr "Ð—Ð»Ð¸Ñ‚Ñ‚Ñ Ð¿Ñ€Ð¾Ð¹ÑˆÐ»Ð¾ невдало." + +msgid "mrWidget|Merge locally" +msgstr "" + +msgid "mrWidget|Merged by" +msgstr "" + +msgid "mrWidget|Plain diff" +msgstr "" + +msgid "mrWidget|Refresh" +msgstr "Оновити" + +msgid "mrWidget|Refresh now" +msgstr "Оновити зараз" + +msgid "mrWidget|Refreshing now" +msgstr "" + +msgid "mrWidget|Remove Source Branch" +msgstr "" + +msgid "mrWidget|Remove source branch" +msgstr "" + +msgid "mrWidget|Request to merge" +msgstr "" + +msgid "mrWidget|Resolve conflicts" +msgstr "" + +msgid "mrWidget|Revert" +msgstr "" + +msgid "mrWidget|Revert this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Set by" +msgstr "" + +msgid "mrWidget|The changes were merged into" +msgstr "" + +msgid "mrWidget|The changes were not merged into" +msgstr "" + +msgid "mrWidget|The changes will be merged into" +msgstr "" + +msgid "mrWidget|The source branch has been removed" +msgstr "" + +msgid "mrWidget|The source branch is being removed" +msgstr "" + +msgid "mrWidget|The source branch will be removed" +msgstr "" + +msgid "mrWidget|The source branch will not be removed" +msgstr "" + +msgid "mrWidget|There are merge conflicts" +msgstr "" + +msgid "mrWidget|This merge request failed to be merged automatically" +msgstr "ВідбулаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° при автоматичному злитті цього запиту" + +msgid "mrWidget|This merge request is in the process of being merged" +msgstr "" + +msgid "mrWidget|This project is archived, write access has been disabled" +msgstr "" + +msgid "mrWidget|You can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|You can remove source branch now" +msgstr "" + +msgid "mrWidget|command line" +msgstr "" + +msgid "mrWidget|into" +msgstr "" + +msgid "mrWidget|to be merged automatically when the pipeline succeeds" +msgstr "" + msgid "new merge request" msgstr "Ðовий запит на злиттÑ" msgid "notification emails" msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ ÐµÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð¾ÑŽ поштою" +msgid "or" +msgstr "або" + msgid "parent" msgid_plural "parents" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "батьківÑький об’єкт" +msgstr[1] "батьківÑькі об’єкти" +msgstr[2] "батьківÑький об’єктів" msgid "password" msgstr "пароль" @@ -3016,12 +3931,21 @@ msgstr "пароль" msgid "personal access token" msgstr "оÑобиÑтий токен доÑтупу" +msgid "remove due date" +msgstr "видалити заплановану дату завершеннÑ" + msgid "source" msgstr "джерело" -msgid "to help your contributors communicate effectively!" +msgid "spendCommand|%{slash_command} will update the sum of the time spent." msgstr "" +msgid "to help your contributors communicate effectively!" +msgstr "щоб допомогти учаÑникам ефективно ÑпілкуватиÑÑ!" + msgid "username" msgstr "ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача" +msgid "uses Kubernetes clusters to deploy your code!" +msgstr "" + diff --git a/locale/zh_CN/gitlab.po b/locale/zh_CN/gitlab.po index 9c0d8dd5ddc..441f080596c 100644 --- a/locale/zh_CN/gitlab.po +++ b/locale/zh_CN/gitlab.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: gitlab-ee\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-12-12 18:31+0000\n" -"PO-Revision-Date: 2018-01-05 04:42-0500\n" +"POT-Creation-Date: 2018-02-07 11:38-0600\n" +"PO-Revision-Date: 2018-02-12 03:58-0500\n" "Last-Translator: gitlab <mbartlett+crowdin@gitlab.com>\n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -16,20 +16,35 @@ msgstr "" "X-Crowdin-Language: zh-CN\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" +msgid " and" +msgstr "" + msgid "%d commit" msgid_plural "%d commits" msgstr[0] "%d 次æ交" +msgid "%d commit behind" +msgid_plural "%d commits behind" +msgstr[0] "" + +msgid "%d issue" +msgid_plural "%d issues" +msgstr[0] "" + msgid "%d layer" msgid_plural "%d layers" msgstr[0] "%d 层" +msgid "%d merge request" +msgid_plural "%d merge requests" +msgstr[0] "" + msgid "%s additional commit has been omitted to prevent performance issues." msgid_plural "%s additional commits have been omitted to prevent performance issues." msgstr[0] "为æ高页é¢åŠ 载速度åŠæ€§èƒ½ï¼Œå·²çœç•¥äº† %s 次æ交。" -msgid "%{commit_author_link} committed %{commit_timeago}" -msgstr "ç”± %{commit_author_link} æ交于 %{commit_timeago}" +msgid "%{commit_author_link} authored %{commit_timeago}" +msgstr "" msgid "%{count} participant" msgid_plural "%{count} participants" @@ -41,9 +56,6 @@ msgstr "%{number_commits_behind} 个è½åŽ %{default_branch} 分支的æ交, %{ msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt." msgstr "已失败 %{number_of_failures} 次/最多å…许失败失败 %{maximum_failures} 次,GitLab 将继ç»é‡è¯•ã€‚" -msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will block access for %{number_of_seconds} seconds." -msgstr "已失败 %{number_of_failures} 次/最多å…许失败 %{maximum_failures} 次,GitLab 将在 %{number_of_seconds} 秒åŽé‡è¯•ã€‚" - msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will not retry automatically. Reset storage information when the problem is resolved." msgstr "已失败 %{number_of_failures} 次/最多å…许失败 %{maximum_failures} 次,GitLab ä¸ä¼šç»§ç»è‡ªåŠ¨é‡è¯•ã€‚请在问题解决åŽé‡ç½®å˜å‚¨å¥åº·ä¿¡æ¯ã€‚" @@ -115,24 +127,81 @@ msgstr "æ·»åŠ è®¸å¯è¯" msgid "Add new directory" msgstr "æ·»åŠ ç›®å½•" +msgid "Add todo" +msgstr "" + +msgid "AdminArea|Stop all jobs" +msgstr "" + +msgid "AdminArea|Stop all jobs?" +msgstr "" + +msgid "AdminArea|Stop jobs" +msgstr "" + +msgid "AdminArea|Stopping jobs failed" +msgstr "" + +msgid "AdminArea|You’re about to stop all jobs. This will halt all current jobs that are running." +msgstr "" + msgid "AdminHealthPageLink|health page" msgstr "å¥åº·é¡µé¢" +msgid "Advanced" +msgstr "" + msgid "Advanced settings" msgstr "高级设置" msgid "All" msgstr "全部" +msgid "All changes are committed" +msgstr "" + +msgid "Allows you to add and manage Kubernetes clusters." +msgstr "" + +msgid "An error occurred previewing the blob" +msgstr "" + msgid "An error occurred when toggling the notification subscription" msgstr "切æ¢é€šçŸ¥è®¢é˜…æ—¶å‘生错误" msgid "An error occurred when updating the issue weight" msgstr "更新议题æƒé‡æ—¶å‘生错误" +msgid "An error occurred while dismissing the feature highlight. Refresh the page and try dismissing again." +msgstr "" + +msgid "An error occurred while fetching markdown preview" +msgstr "" + msgid "An error occurred while fetching sidebar data" msgstr "获å–侧边æ æ•°æ®æ—¶å‘生错误" +msgid "An error occurred while getting projects" +msgstr "" + +msgid "An error occurred while loading filenames" +msgstr "" + +msgid "An error occurred while rendering KaTeX" +msgstr "" + +msgid "An error occurred while rendering preview broadcast message" +msgstr "" + +msgid "An error occurred while retrieving calendar activity" +msgstr "" + +msgid "An error occurred while retrieving diff" +msgstr "" + +msgid "An error occurred while validating username" +msgstr "" + msgid "An error occurred. Please try again." msgstr "å‘生了错误,请å†è¯•ä¸€æ¬¡ã€‚" @@ -157,9 +226,6 @@ msgstr "确定è¦åˆ 除æ¤æµæ°´çº¿è®¡åˆ’å—?" msgid "Are you sure you want to discard your changes?" msgstr "确定è¦æ”¾å¼ƒä¿®æ”¹å—?" -msgid "Are you sure you want to leave this group?" -msgstr "确定è¦ç¦»å¼€è¿™ä¸ªç¾¤ç»„å—?" - msgid "Are you sure you want to reset registration token?" msgstr "确定è¦é‡ç½®æ³¨å†Œä»¤ç‰Œå—?" @@ -172,6 +238,21 @@ msgstr "确定å—?" msgid "Artifacts" msgstr "产物" +msgid "Assign custom color like #FF0000" +msgstr "" + +msgid "Assign labels" +msgstr "" + +msgid "Assign milestone" +msgstr "" + +msgid "Assign to" +msgstr "" + +msgid "Assignee" +msgstr "" + msgid "Attach a file by drag & drop or %{upload_link}" msgstr "拖放文件到æ¤å¤„或者 %{upload_link}" @@ -187,15 +268,18 @@ msgstr "认è¯æ—¥å¿—" msgid "Author" msgstr "作者" -msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly." -msgstr "自动审查程åºå’Œè‡ªåŠ¨éƒ¨ç½²ç¨‹åºéœ€è¦ä¸€ä¸ªåŸŸåå’Œ %{kubernetes} æ‰èƒ½æ£å¸¸å·¥ä½œã€‚" +msgid "Authors: %{authors}" +msgstr "" + +msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly." +msgstr "" + +msgid "Auto Review Apps and Auto Deploy need a domain name and a %{kubernetes} to work correctly." +msgstr "" msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly." msgstr "自动审查程åºå’Œè‡ªåŠ¨éƒ¨ç½²ç¨‹åºéœ€è¦ä¸€ä¸ªåŸŸåæ‰èƒ½æ£å¸¸å·¥ä½œã€‚" -msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly." -msgstr "自动审查程åºå’Œè‡ªåŠ¨éƒ¨ç½²ç¨‹åºéœ€è¦ %{kubernetes} æ‰èƒ½æ£å¸¸å·¥ä½œã€‚" - msgid "AutoDevOps|Auto DevOps (Beta)" msgstr "DevOps 自动化(测试版)" @@ -217,6 +301,12 @@ msgstr "您å¯ä»¥ä¸ºæ¤é¡¹ç›®æ¿€æ´» %{link_to_settings}。" msgid "Available" msgstr "å¯ç”¨çš„" +msgid "Avatar will be removed. Are you sure?" +msgstr "" + +msgid "Average per day: %{average}" +msgstr "" + msgid "Billing" msgstr "è´¦å•" @@ -271,6 +361,9 @@ msgstr "æ¯å¹´æ”¯ä»˜ %{price_per_year}" msgid "BillingPlans|per user" msgstr "æ¯ç”¨æˆ·" +msgid "Begin with the selected commit" +msgstr "" + msgid "Branch" msgid_plural "Branches" msgstr[0] "分支" @@ -398,8 +491,8 @@ msgstr "作者:" msgid "CI / CD" msgstr "CI / CD" -msgid "CI configuration" -msgstr "CI é…ç½®" +msgid "CI/CD configuration" +msgstr "" msgid "CICD|Jobs" msgstr "作业" @@ -410,6 +503,9 @@ msgstr "å–消" msgid "Cancel edit" msgstr "å–消编辑" +msgid "Cannot modify managed Kubernetes cluster" +msgstr "" + msgid "Change Weight" msgstr "改å˜æƒé‡" @@ -425,15 +521,24 @@ msgstr "优选" msgid "ChangeTypeAction|Revert" msgstr "还原" +msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes." +msgstr "" + msgid "Changelog" msgstr "更新日志" +msgid "Changes are shown as if the <b>source</b> revision was being merged into the <b>target</b> revision." +msgstr "" + msgid "Charts" msgstr "统计图" msgid "Chat" msgstr "å³æ—¶é€šè®¯" +msgid "Check interval" +msgstr "" + msgid "Checking %{text} availability…" msgstr "æ£åœ¨æ£€æŸ¥%{text}çš„å¯ç”¨æ€§..." @@ -446,8 +551,20 @@ msgstr "优选æ¤æ交" msgid "Cherry-pick this merge request" msgstr "优选æ¤åˆå¹¶è¯·æ±‚" -msgid "Choose which groups you wish to replicate to this secondary node. Leave blank to replicate all." -msgstr "选择è¦å¤åˆ¶åˆ°æ¤èŠ‚点的群组。留空则å¤åˆ¶æ‰€æœ‰ã€‚" +msgid "Choose File ..." +msgstr "" + +msgid "Choose a branch/tag (e.g. %{master}) or enter a commit (e.g. %{sha}) to see what's changed or to create a merge request." +msgstr "" + +msgid "Choose file..." +msgstr "" + +msgid "Choose which groups you wish to synchronize to this secondary node." +msgstr "" + +msgid "Choose which shards you wish to synchronize to this secondary node." +msgstr "" msgid "CiStatusLabel|canceled" msgstr "å·²å–消" @@ -503,80 +620,92 @@ msgstr "已跳过" msgid "CiStatus|running" msgstr "è¿è¡Œä¸" +msgid "CiVariables|Input variable key" +msgstr "" + +msgid "CiVariables|Input variable value" +msgstr "" + +msgid "CiVariables|Remove variable row" +msgstr "" + +msgid "CiVariable|* (All environments)" +msgstr "" + +msgid "CiVariable|All environments" +msgstr "" + +msgid "CiVariable|Create wildcard" +msgstr "" + +msgid "CiVariable|Error occured while saving variables" +msgstr "" + +msgid "CiVariable|New environment" +msgstr "" + +msgid "CiVariable|Protected" +msgstr "" + +msgid "CiVariable|Search environments" +msgstr "" + +msgid "CiVariable|Toggle protected" +msgstr "" + +msgid "CiVariable|Validation failed" +msgstr "" + msgid "CircuitBreakerApiLink|circuitbreaker api" msgstr "æ–路器 API" +msgid "Click to expand text" +msgstr "" + msgid "Clone repository" msgstr "克隆å˜å‚¨åº“" msgid "Close" msgstr "å…³é—" -msgid "Cluster" -msgstr "集群" - -msgid "ClusterIntegration|%{appList} was successfully installed on your cluster" -msgstr "%{appList}å·²æˆåŠŸå®‰è£…在您的群集上" +msgid "Closed" +msgstr "" -msgid "ClusterIntegration|%{boldNotice} This will add some extra resources like a load balancer, which incur additional costs. See %{pricingLink}" -msgstr "%{boldNotice}è¿™ä¼šå¢žåŠ ä¸€äº›é¢å¤–的资æºï¼Œå¦‚è´Ÿè½½å‡è¡¡å™¨ï¼Œè¿™ä¼šäº§ç”Ÿé¢å¤–çš„æˆæœ¬ã€‚请å‚阅%{pricingLink}" +msgid "ClusterIntegration|%{appList} was successfully installed on your Kubernetes cluster" +msgstr "" msgid "ClusterIntegration|API URL" msgstr "API地å€" -msgid "ClusterIntegration|Active" -msgstr "å¯ç”¨" - -msgid "ClusterIntegration|Add an existing cluster" -msgstr "æ·»åŠ ä¸€ä¸ªçŽ°æœ‰çš„é›†ç¾¤" +msgid "ClusterIntegration|Add Kubernetes cluster" +msgstr "" -msgid "ClusterIntegration|Add cluster" -msgstr "æ·»åŠ é›†ç¾¤" +msgid "ClusterIntegration|Add an existing Kubernetes cluster" +msgstr "" -msgid "ClusterIntegration|All" -msgstr "所有" +msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration" +msgstr "" msgid "ClusterIntegration|Applications" msgstr "应用程åº" +msgid "ClusterIntegration|Are you sure you want to remove this Kubernetes cluster's integration? This will not delete your actual Kubernetes cluster." +msgstr "" + msgid "ClusterIntegration|CA Certificate" msgstr "CAè¯ä¹¦" msgid "ClusterIntegration|Certificate Authority bundle (PEM format)" msgstr "è¯ä¹¦æŽˆæƒåŒ…(PEMæ ¼å¼)" -msgid "ClusterIntegration|Choose how to set up cluster integration" -msgstr "选择如何设置集群集æˆ" - -msgid "ClusterIntegration|Cluster" -msgstr "集群" - -msgid "ClusterIntegration|Cluster details" -msgstr "集群详情" - -msgid "ClusterIntegration|Cluster integration" -msgstr "集群集æˆ" - -msgid "ClusterIntegration|Cluster integration is disabled for this project." -msgstr "æ¤é¡¹ç›®å·²ç¦ç”¨é›†ç¾¤é›†æˆã€‚" - -msgid "ClusterIntegration|Cluster integration is enabled for this project." -msgstr "æ¤é¡¹ç›®å·²å¯ç”¨é›†ç¾¤é›†æˆã€‚" - -msgid "ClusterIntegration|Cluster integration is enabled for this project. Disabling this integration will not affect your cluster, it will only temporarily turn off GitLab's connection to it." -msgstr "æ¤é¡¹ç›®å·²å¯ç”¨é›†ç¾¤é›†æˆã€‚ç¦ç”¨æ¤é›†æˆä¸ä¼šå½±å“您的集群,它åªä¼šæš‚æ—¶å…³é— GitLab 的连接。" - -msgid "ClusterIntegration|Cluster is being created on Google Kubernetes Engine..." -msgstr "群集æ£åœ¨Google Kubernetes Engine上创建..." - -msgid "ClusterIntegration|Cluster name" -msgstr "集群å称" +msgid "ClusterIntegration|Choose how to set up Kubernetes cluster integration" +msgstr "" -msgid "ClusterIntegration|Cluster was successfully created on Google Kubernetes Engine. Refresh the page to see cluster's details" -msgstr "集群已在Google Kubernetes Engine上æˆåŠŸåˆ›å»ºã€‚刷新页é¢ä»¥æŸ¥çœ‹é›†ç¾¤çš„详细信æ¯" +msgid "ClusterIntegration|Choose which of your project's environments will use this Kubernetes cluster." +msgstr "" -msgid "ClusterIntegration|Clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" -msgstr "集群å…许您使用审阅应用程åºã€éƒ¨ç½²åº”用程åºã€è¿è¡Œæµæ°´çº¿ç‰ç‰ã€‚%{link_to_help_page}" +msgid "ClusterIntegration|Control how your Kubernetes cluster integrates with GitLab" +msgstr "" msgid "ClusterIntegration|Copy API URL" msgstr "å¤åˆ¶API地å€" @@ -584,38 +713,35 @@ msgstr "å¤åˆ¶API地å€" msgid "ClusterIntegration|Copy CA Certificate" msgstr "å¤åˆ¶CAè¯ä¹¦" +msgid "ClusterIntegration|Copy Kubernetes cluster name" +msgstr "" + msgid "ClusterIntegration|Copy Token" msgstr "å¤åˆ¶ä»¤ç‰Œ" -msgid "ClusterIntegration|Copy cluster name" -msgstr "å¤åˆ¶é›†ç¾¤å称" - -msgid "ClusterIntegration|Create a new cluster on Google Engine right from GitLab" -msgstr "在 GitLab 上创建一个 Google Engine 集群" +msgid "ClusterIntegration|Create Kubernetes cluster" +msgstr "" -msgid "ClusterIntegration|Create cluster" -msgstr "创建集群" +msgid "ClusterIntegration|Create Kubernetes cluster on Google Kubernetes Engine" +msgstr "" -msgid "ClusterIntegration|Create cluster on Google Kubernetes Engine" -msgstr "在 Google Kubernetes Engine 上创建集群" +msgid "ClusterIntegration|Create a new Kubernetes cluster on Google Kubernetes Engine right from GitLab" +msgstr "" msgid "ClusterIntegration|Create on GKE" msgstr "在GKEä¸åˆ›å»º" -msgid "ClusterIntegration|Enable cluster integration" -msgstr "å¯ç”¨é›†ç¾¤é›†æˆ" - msgid "ClusterIntegration|Enter the details for an existing Kubernetes cluster" msgstr "输入现有的 Kubernetes 集群详细信æ¯" -msgid "ClusterIntegration|Enter the details for your cluster" -msgstr "输入您的集群详细信æ¯" +msgid "ClusterIntegration|Enter the details for your Kubernetes cluster" +msgstr "" -msgid "ClusterIntegration|Environment pattern" -msgstr "环境模å¼" +msgid "ClusterIntegration|Environment scope" +msgstr "" -msgid "ClusterIntegration|GKE pricing" -msgstr "GKEä»·æ ¼" +msgid "ClusterIntegration|GitLab Integration" +msgstr "" msgid "ClusterIntegration|GitLab Runner" msgstr "GitLab Runner" @@ -632,47 +758,83 @@ msgstr "Google Kubernetes Engine 项目" msgid "ClusterIntegration|Helm Tiller" msgstr "Helm Tiller" -msgid "ClusterIntegration|Inactive" -msgstr "待用" - msgid "ClusterIntegration|Ingress" msgstr "å…¥å£" msgid "ClusterIntegration|Install" msgstr "安装" -msgid "ClusterIntegration|Install applications on your cluster. Read more about %{helpLink}" -msgstr "在集群上安装应用程åºã€‚阅读更多关于%{helpLink}" - msgid "ClusterIntegration|Installed" msgstr "已安装" msgid "ClusterIntegration|Installing" msgstr "安装ä¸" -msgid "ClusterIntegration|Integrate cluster automation" -msgstr "集群自动化集æˆ" +msgid "ClusterIntegration|Integrate Kubernetes cluster automation" +msgstr "" + +msgid "ClusterIntegration|Integration status" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster details" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is disabled for this project." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project. Disabling this integration will not affect your Kubernetes cluster, it will only temporarily turn off GitLab's connection to it." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster is being created on Google Kubernetes Engine..." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster name" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters can be used to deploy applications and to provide Review Apps for this project" +msgstr "" msgid "ClusterIntegration|Learn more about %{link_to_documentation}" msgstr "了解详细%{link_to_documentation}" -msgid "ClusterIntegration|Learn more about Clusters" -msgstr "了解更多集群的信æ¯" +msgid "ClusterIntegration|Learn more about Kubernetes" +msgstr "" + +msgid "ClusterIntegration|Learn more about environments" +msgstr "" msgid "ClusterIntegration|Machine type" msgstr "机器类型" -msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create clusters" -msgstr "ç¡®ä¿æ‚¨çš„å¸æˆ·ç¬¦åˆåˆ›å»ºé›†ç¾¤çš„%{link_to_requirements}" +msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create Kubernetes clusters" +msgstr "" -msgid "ClusterIntegration|Manage cluster integration on your GitLab project" -msgstr "在 GitLab 项目上管ç†é›†ç¾¤é›†æˆ" +msgid "ClusterIntegration|Manage" +msgstr "" -msgid "ClusterIntegration|Manage your cluster by visiting %{link_gke}" -msgstr "访问%{link_gke}æ¥ç®¡ç†æ‚¨çš„集群" +msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}" +msgstr "" -msgid "ClusterIntegration|Multiple clusters are available in GitLab Entreprise Edition Premium and Ultimate" -msgstr "GitLabä¼ä¸šé«˜çº§ç‰ˆå’Œæ——舰版æ供了多个集群" +msgid "ClusterIntegration|More information" +msgstr "" + +msgid "ClusterIntegration|Multiple Kubernetes clusters are available in GitLab Enterprise Edition Premium and Ultimate" +msgstr "" msgid "ClusterIntegration|Note:" msgstr "注æ„:" @@ -680,18 +842,12 @@ msgstr "注æ„:" msgid "ClusterIntegration|Number of nodes" msgstr "节点数é‡" -msgid "ClusterIntegration|Please enter access information for your cluster. If you need help, you can read our %{link_to_help_page} on clusters" -msgstr "请为您的群集输入访问信æ¯ã€‚如果您需è¦å¸®åŠ©ï¼Œå¯ä»¥é˜…读我们关于集群的 %{link_to_help_page}" +msgid "ClusterIntegration|Please enter access information for your Kubernetes cluster. If you need help, you can read our %{link_to_help_page} on Kubernetes" +msgstr "" msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:" msgstr "请确ä¿æ‚¨çš„ Google å¸æˆ·ç¬¦åˆä»¥ä¸‹è¦æ±‚:" -msgid "ClusterIntegration|Problem setting up the cluster" -msgstr "设置集群时出现问题" - -msgid "ClusterIntegration|Problem setting up the clusters list" -msgstr "设置集群列表时出现问题" - msgid "ClusterIntegration|Project ID" msgstr "项目 ID" @@ -701,17 +857,20 @@ msgstr "项目命å空间" msgid "ClusterIntegration|Project namespace (optional, unique)" msgstr "项目命å空间(å¯é€‰ï¼Œå”¯ä¸€)" -msgid "ClusterIntegration|Read our %{link_to_help_page} on cluster integration." -msgstr "请阅读关于集群集æˆçš„%{link_to_help_page}。" +msgid "ClusterIntegration|Prometheus" +msgstr "" -msgid "ClusterIntegration|Remove cluster integration" -msgstr "åˆ é™¤é›†ç¾¤é›†æˆ" +msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration." +msgstr "" + +msgid "ClusterIntegration|Remove Kubernetes cluster integration" +msgstr "" msgid "ClusterIntegration|Remove integration" msgstr "åˆ é™¤é›†æˆ" -msgid "ClusterIntegration|Removing cluster integration will remove the cluster configuration you have added to this project. It will not delete your cluster on Google Kubernetes Engine." -msgstr "åˆ é™¤é›†ç¾¤é›†æˆå°†åˆ é™¤å·²æ·»åŠ åˆ°æ¤é¡¹ç›®çš„集群é…置。它ä¸ä¼šåˆ 除 Google Kubernetes Engine 上的集群。" +msgid "ClusterIntegration|Remove this Kubernetes cluster's configuration from this project. This will not delete your actual Kubernetes cluster." +msgstr "" msgid "ClusterIntegration|Request to begin installing failed" msgstr "请求安装失败" @@ -719,8 +878,8 @@ msgstr "请求安装失败" msgid "ClusterIntegration|Save changes" msgstr "ä¿å˜æ›´æ”¹" -msgid "ClusterIntegration|See and edit the details for your cluster" -msgstr "查看并编辑集群的详细信æ¯" +msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster" +msgstr "" msgid "ClusterIntegration|See machine types" msgstr "å‚è§æœºå™¨ç±»åž‹" @@ -740,26 +899,26 @@ msgstr "显示" msgid "ClusterIntegration|Something went wrong on our end." msgstr "å‘生了内部错误" -msgid "ClusterIntegration|Something went wrong while creating your cluster on Google Kubernetes Engine" -msgstr "在 Google Kubernetes Engine 上创建集群时å‘生错误" +msgid "ClusterIntegration|Something went wrong while creating your Kubernetes cluster on Google Kubernetes Engine" +msgstr "" msgid "ClusterIntegration|Something went wrong while installing %{title}" msgstr "安装 %{title} æ—¶å‘生故障" -msgid "ClusterIntegration|There are no clusters to show" -msgstr "没有è¦æ˜¾ç¤ºçš„集群" +msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below" +msgstr "" -msgid "ClusterIntegration|This account must have permissions to create a cluster in the %{link_to_container_project} specified below" -msgstr "æ¤å¸æˆ·å¿…须有æƒåœ¨ä¸‹é¢æŒ‡å®šçš„%{link_to_container_project}ä¸åˆ›å»ºé›†ç¾¤" +msgid "ClusterIntegration|Toggle Kubernetes Cluster" +msgstr "" -msgid "ClusterIntegration|Toggle Cluster" -msgstr "切æ¢é›†ç¾¤" +msgid "ClusterIntegration|Toggle Kubernetes cluster" +msgstr "" msgid "ClusterIntegration|Token" msgstr "令牌" -msgid "ClusterIntegration|With a cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." -msgstr "使用与æ¤é¡¹ç›®å…³è”的集群,您å¯ä»¥ä½¿ç”¨å®¡é˜…应用程åºï¼Œéƒ¨ç½²åº”用程åºï¼Œè¿è¡Œæµæ°´çº¿ç‰ç‰ã€‚" +msgid "ClusterIntegration|With a Kubernetes cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." +msgstr "" msgid "ClusterIntegration|Your account must have %{link_to_kubernetes_engine}" msgstr "您的å¸æˆ·å¿…须拥有%{link_to_kubernetes_engine}" @@ -770,8 +929,8 @@ msgstr "区域" msgid "ClusterIntegration|access to Google Kubernetes Engine" msgstr "访问 Google Kubernetes Engine" -msgid "ClusterIntegration|cluster" -msgstr "集群" +msgid "ClusterIntegration|check the pricing here" +msgstr "" msgid "ClusterIntegration|documentation" msgstr "文档" @@ -788,6 +947,9 @@ msgstr "符åˆè¦æ±‚" msgid "ClusterIntegration|properly configured" msgstr "æ£ç¡®é…ç½®" +msgid "Collapse" +msgstr "" + msgid "Comments" msgstr "评论" @@ -804,6 +966,9 @@ msgstr "最近30次æ交相应æŒç»é›†æˆèŠ±è´¹çš„时间(分钟)" msgid "Commit message" msgstr "æ交信æ¯" +msgid "Commit statistics for %{ref} %{start_time} - %{end_time}" +msgstr "" + msgid "CommitBoxTitle|Commit" msgstr "æ交" @@ -816,15 +981,57 @@ msgstr "æ交" msgid "Commits feed" msgstr "æ交动æ€" +msgid "Commits per day hour (UTC)" +msgstr "" + +msgid "Commits per day of month" +msgstr "" + +msgid "Commits per weekday" +msgstr "" + +msgid "Commits|An error occurred while fetching merge requests data." +msgstr "" + +msgid "Commits|Commit: %{commitText}" +msgstr "" + msgid "Commits|History" msgstr "历å²" +msgid "Commits|No related merge requests found" +msgstr "" + msgid "Committed by" msgstr "æ交者:" msgid "Compare" msgstr "比较" +msgid "Compare Git revisions" +msgstr "" + +msgid "Compare Revisions" +msgstr "" + +msgid "CompareBranches|%{source_branch} and %{target_branch} are the same." +msgstr "" + +msgid "CompareBranches|Compare" +msgstr "" + +msgid "CompareBranches|Source" +msgstr "" + +msgid "CompareBranches|Target" +msgstr "" + +msgid "CompareBranches|There isn't anything to compare." +msgstr "" + +msgid "Confidentiality" +msgstr "" + msgid "Container Registry" msgstr "容器注册" @@ -876,6 +1083,9 @@ msgstr "贡献指å—" msgid "Contributors" msgstr "贡献者" +msgid "ContributorsPage|%{startDate} – %{endDate}" +msgstr "" + msgid "ContributorsPage|Building repository graph." msgstr "构建å˜å‚¨åº“å›¾æ ‡ã€‚" @@ -897,9 +1107,18 @@ msgstr "å¤åˆ¶ SSH 公钥到剪贴æ¿" msgid "Copy URL to clipboard" msgstr "å¤åˆ¶ URL 到剪贴æ¿" +msgid "Copy branch name to clipboard" +msgstr "" + msgid "Copy commit SHA to clipboard" msgstr "å¤åˆ¶æ交 SHA 的值到剪贴æ¿" +msgid "Copy reference to clipboard" +msgstr "" + +msgid "Create" +msgstr "" + msgid "Create New Directory" msgstr "创建新目录" @@ -918,6 +1137,9 @@ msgstr "创建EPIC" msgid "Create file" msgstr "创建文件" +msgid "Create lists from labels. Issues with that label appear in that list." +msgstr "" + msgid "Create merge request" msgstr "创建åˆå¹¶è¯·æ±‚" @@ -930,6 +1152,9 @@ msgstr "创建新目录" msgid "Create new file" msgstr "创建新文件" +msgid "Create new label" +msgstr "" + msgid "Create new..." msgstr "创建..." @@ -951,6 +1176,9 @@ msgstr "Cron 时区" msgid "Cron syntax" msgstr "Cron è¯æ³•" +msgid "Current node" +msgstr "" + msgid "Custom notification events" msgstr "自定义通知事件" @@ -960,9 +1188,6 @@ msgstr "自定义通知级别继承自å‚与级别。使用自定义通知级别 msgid "Cycle Analytics" msgstr "周期分æž" -msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project." -msgstr "周期分æžæ¦‚述了项目从想法到产å“实现的å„阶段所需的时间。" - msgid "CycleAnalyticsStage|Code" msgstr "ç¼–ç " @@ -1018,12 +1243,21 @@ msgstr "æ述模æ¿å…许您为项目的问题和åˆå¹¶è¯·æ±‚定义æè¿°å—段 msgid "Details" msgstr "详情" +msgid "Diffs|No file name available" +msgstr "" + msgid "Directory name" msgstr "目录å称" +msgid "Disable" +msgstr "" + msgid "Discard changes" msgstr "放弃更改" +msgid "Discover GitLab Geo." +msgstr "" + msgid "Dismiss Cycle Analytics introduction box" msgstr "å…³é—循环分æžä»‹ç»æ¡†" @@ -1060,15 +1294,24 @@ msgstr "差异文件" msgid "DownloadSource|Download" msgstr "下载" +msgid "Due date" +msgstr "" + msgid "Edit" msgstr "编辑" msgid "Edit Pipeline Schedule %{id}" msgstr "编辑 %{id} æµæ°´çº¿è®¡åˆ’" +msgid "Edit files in the editor and commit changes here" +msgstr "" + msgid "Emails" msgstr "电å邮件" +msgid "Enable" +msgstr "" + msgid "Environments|An error occurred while fetching the environments." msgstr "获å–环境时å‘生错误。" @@ -1087,9 +1330,6 @@ msgstr "环境" msgid "Environments|Environments" msgstr "环境" -msgid "Environments|Environments are places where code gets deployed, such as staging or production." -msgstr "环境是部署代ç 的地方,例如预生产或生产。" - msgid "Environments|Job" msgstr "作业" @@ -1132,9 +1372,33 @@ msgstr "EPICè®©ä½ æ›´æœ‰æ•ˆçŽ‡åœ°ç®¡ç†ä½ 的项目组åˆï¼Œè€Œä¸”ä¸è´¹å¹ç°ä¹ msgid "Error creating epic" msgstr "创建EPIC时出错" +msgid "Error fetching contributors data." +msgstr "" + +msgid "Error fetching labels." +msgstr "" + +msgid "Error fetching network graph." +msgstr "" + +msgid "Error fetching refs" +msgstr "" + +msgid "Error fetching usage ping data." +msgstr "" + msgid "Error occurred when toggling the notification subscription" msgstr "切æ¢é€šçŸ¥è®¢é˜…æ—¶å‘生错误" +msgid "Error saving label update." +msgstr "" + +msgid "Error updating status for all todos." +msgstr "" + +msgid "Error updating todo status." +msgstr "" + msgid "EventFilterBy|Filter by all" msgstr "全部" @@ -1162,6 +1426,9 @@ msgstr "æ¯æœˆæ‰§è¡Œï¼ˆæ¯æœˆ 1 日凌晨 4 点)" msgid "Every week (Sundays at 4:00am)" msgstr "æ¯å‘¨æ‰§è¡Œï¼ˆå‘¨æ—¥å‡Œæ™¨ 4 点)" +msgid "Expand" +msgstr "" + msgid "Explore projects" msgstr "查看项目" @@ -1180,6 +1447,9 @@ msgstr "二" msgid "February" msgstr "二月" +msgid "Fields on this page are now uneditable, you can configure" +msgstr "" + msgid "File name" msgstr "文件å" @@ -1223,29 +1493,113 @@ msgstr "从åˆå¹¶è¯·æ±‚被åˆå¹¶åŽåˆ°éƒ¨ç½²è‡³ç”Ÿäº§çŽ¯å¢ƒ" msgid "GPG Keys" msgstr "GPG 密钥" +msgid "Generate a default set of labels" +msgstr "" + msgid "Geo Nodes" msgstr "Geo 节点" -msgid "GeoNodeSyncStatus|Failed" -msgstr "失败" - msgid "GeoNodeSyncStatus|Node is failing or broken." msgstr "节点出现故障或æŸå。" msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage." msgstr "节点è¿è¡Œç¼“æ…¢ã€è¶…è½½, 或者在åœæœºåŽåˆšåˆšæ¢å¤ã€‚" -msgid "GeoNodeSyncStatus|Out of sync" -msgstr "未åŒæ¥" +msgid "GeoNodes|Database replication lag:" +msgstr "" -msgid "GeoNodeSyncStatus|Synced" -msgstr "å·²åŒæ¥" +msgid "GeoNodes|Disabling a node stops the sync process. Are you sure?" +msgstr "" + +msgid "GeoNodes|Does not match the primary storage configuration" +msgstr "" + +msgid "GeoNodes|Failed" +msgstr "" + +msgid "GeoNodes|Full" +msgstr "" + +msgid "GeoNodes|GitLab version does not match the primary node version" +msgstr "" + +msgid "GeoNodes|GitLab version:" +msgstr "" + +msgid "GeoNodes|Health status:" +msgstr "" + +msgid "GeoNodes|Last event ID processed by cursor:" +msgstr "" + +msgid "GeoNodes|Last event ID seen from primary:" +msgstr "" + +msgid "GeoNodes|Loading nodes" +msgstr "" + +msgid "GeoNodes|Local Attachments:" +msgstr "" + +msgid "GeoNodes|Local LFS objects:" +msgstr "" + +msgid "GeoNodes|Local job artifacts:" +msgstr "" + +msgid "GeoNodes|New node" +msgstr "" + +msgid "GeoNodes|Out of sync" +msgstr "" + +msgid "GeoNodes|Replication slot WAL:" +msgstr "" + +msgid "GeoNodes|Replication slots:" +msgstr "" + +msgid "GeoNodes|Repositories:" +msgstr "" + +msgid "GeoNodes|Selective" +msgstr "" + +msgid "GeoNodes|Storage config:" +msgstr "" + +msgid "GeoNodes|Sync settings:" +msgstr "" + +msgid "GeoNodes|Synced" +msgstr "" + +msgid "GeoNodes|Unused slots" +msgstr "" + +msgid "GeoNodes|Used slots" +msgstr "" + +msgid "GeoNodes|Wikis:" +msgstr "" + +msgid "GeoNodes|You have configured Geo nodes using an insecure HTTP connection. We recommend the use of HTTPS." +msgstr "" + +msgid "Geo|All projects" +msgstr "" msgid "Geo|File sync capacity" msgstr "文件åŒæ¥é‡" -msgid "Geo|Groups to replicate" -msgstr "å¤åˆ¶ç¾¤ç»„" +msgid "Geo|Groups to synchronize" +msgstr "" + +msgid "Geo|Projects in certain groups" +msgstr "" + +msgid "Geo|Projects in certain storage shards" +msgstr "" msgid "Geo|Repository sync capacity" msgstr "å˜å‚¨åº“åŒæ¥é‡" @@ -1253,12 +1607,24 @@ msgstr "å˜å‚¨åº“åŒæ¥é‡" msgid "Geo|Select groups to replicate." msgstr "选择è¦å¤åˆ¶çš„群组。" +msgid "Geo|Shards to synchronize" +msgstr "" + +msgid "Git revision" +msgstr "" + msgid "Git storage health information has been reset" msgstr "Git å˜å‚¨å¥åº·ä¿¡æ¯å·²é‡ç½®" +msgid "Git version" +msgstr "" + msgid "GitLab Runner section" msgstr "GitLab Runner" +msgid "Gitaly Servers" +msgstr "" + msgid "Go to your fork" msgstr "跳转到派生项目" @@ -1268,6 +1634,9 @@ msgstr "跳转到派生项目" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "Google 身份验è¯ä¸æ˜¯%{link_to_documentation}。如果您想使用æ¤æœåŠ¡ï¼Œè¯·å’¨è¯¢æ‚¨çš„ GitLab 管ç†å‘˜ã€‚" +msgid "Got it!" +msgstr "" + msgid "GroupSettings|Prevent sharing a project within %{group} with other groups" msgstr "ç¦æ¢ä¸Žå…¶ä»–群组共享 %{group} ä¸çš„项目" @@ -1304,8 +1673,8 @@ msgstr "找ä¸åˆ°ç¾¤ç»„" msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group." msgstr "您å¯ä»¥ç®¡ç†ç¾¤ç»„æˆå‘˜çš„æƒé™å¹¶è®¿é—®ç¾¤ç»„ä¸çš„æ¯ä¸ªé¡¹ç›®ã€‚" -msgid "GroupsTree|Are you sure you want to leave the \"${this.group.fullName}\" group?" -msgstr "您确定è¦ç¦»å¼€ç¾¤ç»„“${this.group.fullName}â€å—?" +msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?" +msgstr "" msgid "GroupsTree|Create a project in this group." msgstr "在æ¤ç¾¤ç»„ä¸åˆ›å»ºä¸€ä¸ªé¡¹ç›®ã€‚" @@ -1355,6 +1724,10 @@ msgstr "没有检测到å¥åº·é—®é¢˜" msgid "HealthCheck|Unhealthy" msgstr "éžå¥åº·" +msgid "Hide value" +msgid_plural "Hide values" +msgstr[0] "" + msgid "History" msgstr "历å²" @@ -1380,6 +1753,12 @@ msgid "Instance" msgid_plural "Instances" msgstr[0] "例å" +msgid "Instance does not support multiple Kubernetes clusters" +msgstr "" + +msgid "Interested parties can even contribute by pushing commits if they want to." +msgstr "" + msgid "Internal - The group and any internal projects can be viewed by any logged in user." msgstr "内部 - 任何登录的用户都å¯ä»¥æŸ¥çœ‹è¯¥ç¾¤ç»„和任何内部项目。" @@ -1407,6 +1786,9 @@ msgstr "看æ¿" msgid "Issues" msgstr "议题" +msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable." +msgstr "" + msgid "Jan" msgstr "一" @@ -1425,6 +1807,27 @@ msgstr "å…" msgid "June" msgstr "å…月" +msgid "Kubernetes" +msgstr "" + +msgid "Kubernetes Cluster" +msgstr "" + +msgid "Kubernetes cluster creation time exceeds timeout; %{timeout}" +msgstr "" + +msgid "Kubernetes cluster integration was not removed." +msgstr "" + +msgid "Kubernetes cluster integration was successfully removed." +msgstr "" + +msgid "Kubernetes cluster was successfully updated." +msgstr "" + +msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page" +msgstr "" + msgid "LFSStatus|Disabled" msgstr "åœç”¨" @@ -1434,6 +1837,9 @@ msgstr "å¯ç”¨" msgid "Labels" msgstr "æ ‡ç¾" +msgid "Labels can be applied to issues and merge requests to categorize them." +msgstr "" + msgid "Last %d day" msgid_plural "Last %d days" msgstr[0] "最近 %d 天" @@ -1462,6 +1868,9 @@ msgstr "您推é€äº†" msgid "LastPushEvent|at" msgstr "于" +msgid "Learn more" +msgstr "" + msgid "Learn more in the" msgstr "了解更多" @@ -1480,13 +1889,18 @@ msgstr "退出项目" msgid "License" msgstr "许å¯åè®®" -msgid "Limited to showing %d event at most" -msgid_plural "Limited to showing %d events at most" -msgstr[0] "最多显示 %d 个事件" +msgid "Loading the GitLab IDE..." +msgstr "" msgid "Lock" msgstr "é”定" +msgid "Lock %{issuableDisplayName}" +msgstr "" + +msgid "Lock this %{issuableDisplayName}? Only <strong>project members</strong> will be able to comment." +msgstr "" + msgid "Locked" msgstr "å·²é”定" @@ -1496,12 +1910,21 @@ msgstr "å·²é”定文件" msgid "Login" msgstr "登录" +msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos." +msgstr "" + +msgid "Manage labels" +msgstr "" + msgid "Mar" msgstr "三" msgid "March" msgstr "三月" +msgid "Mark done" +msgstr "" + msgid "Maximum git storage failures" msgstr "最大 git å˜å‚¨å¤±è´¥" @@ -1514,6 +1937,9 @@ msgstr "ä¸ä½æ•°" msgid "Members" msgstr "æˆå‘˜" +msgid "Merge Request" +msgstr "" + msgid "Merge Requests" msgstr "åˆå¹¶è¯·æ±‚" @@ -1523,9 +1949,30 @@ msgstr "åˆå¹¶äº‹ä»¶" msgid "Merge request" msgstr "åˆå¹¶è¯·æ±‚" +msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others" +msgstr "" + +msgid "Merged" +msgstr "" + msgid "Messages" msgstr "消æ¯" +msgid "Milestone" +msgstr "" + +msgid "Milestones|Delete milestone" +msgstr "" + +msgid "Milestones|Delete milestone %{milestoneTitle}?" +msgstr "" + +msgid "Milestones|Failed to delete milestone %{milestoneTitle}" +msgstr "" + +msgid "Milestones|Milestone %{milestoneTitle} was not found" +msgstr "" + msgid "MissingSSHKeyWarningLink|add an SSH key" msgstr "新建 SSH 公钥" @@ -1535,16 +1982,28 @@ msgstr "监控" msgid "More information is available|here" msgstr "帮助文档" +msgid "Move" +msgstr "" + +msgid "Move issue" +msgstr "" + msgid "Multiple issue boards" msgstr "多个议题看æ¿" -msgid "New Cluster" -msgstr "新集群" +msgid "Name new label" +msgstr "" msgid "New Issue" msgid_plural "New Issues" msgstr[0] "新建议题" +msgid "New Kubernetes Cluster" +msgstr "" + +msgid "New Kubernetes cluster" +msgstr "" + msgid "New Pipeline Schedule" msgstr "创建æµæ°´çº¿è®¡åˆ’" @@ -1569,6 +2028,9 @@ msgstr "新群组" msgid "New issue" msgstr "新建议题" +msgid "New label" +msgstr "" + msgid "New merge request" msgstr "新建åˆå¹¶è¯·æ±‚" @@ -1587,8 +2049,23 @@ msgstr "æ–°å群组" msgid "New tag" msgstr "æ–°å»ºæ ‡ç¾" -msgid "No container images stored for this project. Add one by following the instructions above." -msgstr "æ¤é¡¹ç›®å½“å‰æœªå˜å‚¨å®¹å™¨é•œåƒã€‚如需使用,请å‚照上述说明新建容器镜åƒã€‚" +msgid "No assignee" +msgstr "" + +msgid "No changes" +msgstr "" + +msgid "No connection could be made to a Gitaly Server, please check your logs!" +msgstr "" + +msgid "No due date" +msgstr "" + +msgid "No estimate or time spent" +msgstr "" + +msgid "No file chosen" +msgstr "" msgid "No repository" msgstr "没有å˜å‚¨åº“" @@ -1602,9 +2079,15 @@ msgstr "没有花费时间" msgid "None" msgstr "æ— " +msgid "Not allowed to merge" +msgstr "" + msgid "Not available" msgstr "æ•°æ®ä¸è¶³" +msgid "Not confidential" +msgstr "" + msgid "Not enough data" msgstr "æ•°æ®ä¸è¶³" @@ -1665,6 +2148,12 @@ msgstr "关注" msgid "Notifications" msgstr "通知" +msgid "Notifications off" +msgstr "" + +msgid "Notifications on" +msgstr "" + msgid "Nov" msgstr "å一" @@ -1674,8 +2163,8 @@ msgstr "å一月" msgid "Number of access attempts" msgstr "å°è¯•è®¿é—®æ¬¡æ•°" -msgid "Number of failures before backing off" -msgstr "退出å‰çš„失败次数" +msgid "OK" +msgstr "" msgid "Oct" msgstr "å" @@ -1689,6 +2178,9 @@ msgstr "ç›é€‰" msgid "Only project members can comment." msgstr "åªæœ‰é¡¹ç›®æˆå‘˜å¯ä»¥å‘表评论。" +msgid "Open" +msgstr "" + msgid "Opened" msgstr "已打开" @@ -1722,9 +2214,6 @@ msgstr "« 首页" msgid "Password" msgstr "密ç " -msgid "People without permission will never get a notification and won\\'t be able to comment." -msgstr "未ç»è®¸å¯çš„人将永远ä¸ä¼šæ”¶åˆ°é€šçŸ¥å¹¶ä¸”æ— æ³•è¯„è®ºã€‚" - msgid "Pipeline" msgstr "æµæ°´çº¿" @@ -1767,12 +2256,6 @@ msgstr "所有" msgid "PipelineSchedules|Inactive" msgstr "未å¯ç”¨" -msgid "PipelineSchedules|Input variable key" -msgstr "输入å˜é‡å" - -msgid "PipelineSchedules|Input variable value" -msgstr "输入å˜é‡å€¼" - msgid "PipelineSchedules|Next Run" msgstr "下次è¿è¡Œæ—¶é—´" @@ -1782,9 +2265,6 @@ msgstr "æ— " msgid "PipelineSchedules|Provide a short description for this pipeline" msgstr "为æ¤æµæ°´çº¿æ供简çŸæè¿°" -msgid "PipelineSchedules|Remove variable row" -msgstr "åˆ é™¤å˜é‡" - msgid "PipelineSchedules|Take ownership" msgstr "å–得所有æƒ" @@ -1812,6 +2292,12 @@ msgstr "上周的æµæ°´çº¿" msgid "Pipelines for last year" msgstr "去年的æµæ°´çº¿" +msgid "Pipelines|Build with confidence" +msgstr "" + +msgid "Pipelines|Get started with Pipelines" +msgstr "" + msgid "Pipeline|all" msgstr "所有" @@ -1824,12 +2310,21 @@ msgstr "于阶段" msgid "Pipeline|with stages" msgstr "于阶段" +msgid "Play" +msgstr "" + +msgid "Please <a href=%{link_to_billing} target=\"_blank\" rel=\"noopener noreferrer\">enable billing for one of your projects to be able to create a Kubernetes cluster</a>, then try again." +msgstr "" + msgid "Please solve the reCAPTCHA" msgstr "请填写验è¯ç 。" msgid "Preferences" msgstr "å好设置" +msgid "Primary" +msgstr "" + msgid "Private - Project access must be granted explicitly to each user." msgstr "ç§äºº - å¿…é¡»å‘æ¯ä¸ªç”¨æˆ·æ˜Žç¡®æŽˆäºˆé¡¹ç›®è®¿é—®æƒé™ã€‚" @@ -1875,6 +2370,9 @@ msgstr "您的å¸æˆ·ç›®å‰æ˜¯è¿™äº›ç¾¤ç»„的所有者:" msgid "Profiles|your account" msgstr "您的å¸æˆ·" +msgid "Programming languages used in this repository" +msgstr "" + msgid "Project '%{project_name}' is in the process of being deleted." msgstr "项目 “%{project_name}†æ£åœ¨è¢«åˆ 除。" @@ -1890,6 +2388,15 @@ msgstr "项目 '%{project_name}' 已更新完æˆã€‚" msgid "Project access must be granted explicitly to each user." msgstr "项目访问æƒé™å¿…须明确授æƒç»™æ¯ä¸ªç”¨æˆ·ã€‚" +msgid "Project avatar" +msgstr "" + +msgid "Project avatar in repository: %{link}" +msgstr "" + +msgid "Project cache successfully reset." +msgstr "" + msgid "Project details" msgstr "项目详情" @@ -1908,6 +2415,21 @@ msgstr "项目导出已开始。下载链接将通过电å邮件å‘é€ã€‚" msgid "ProjectActivityRSS|Subscribe" msgstr "订阅" +msgid "ProjectCreationLevel|Allowed to create projects" +msgstr "" + +msgid "ProjectCreationLevel|Default project creation protection" +msgstr "" + +msgid "ProjectCreationLevel|Developers + Masters" +msgstr "" + +msgid "ProjectCreationLevel|Masters" +msgstr "" + +msgid "ProjectCreationLevel|No one" +msgstr "" + msgid "ProjectFeature|Disabled" msgstr "åœç”¨" @@ -1932,15 +2454,9 @@ msgstr "分支图" msgid "ProjectSettings|Contact an admin to change this setting." msgstr "è”系管ç†å‘˜æ›´æ”¹æ¤è®¾ç½®ã€‚" -msgid "ProjectSettings|Immediately run a pipeline on the default branch" -msgstr "ç«‹å³åœ¨é»˜è®¤åˆ†æ”¯ä¸Šè¿è¡Œæµæ°´çº¿" - msgid "ProjectSettings|Only signed commits can be pushed to this repository." msgstr "åªæœ‰å·²ç¾ç½²æ交æ‰å¯ä»¥æŽ¨é€åˆ°æ¤å˜å‚¨åº“。" -msgid "ProjectSettings|Problem setting up the CI/CD settings JavaScript" -msgstr "设置CI/CD时出现JavaScript问题" - msgid "ProjectSettings|This setting is applied on the server level and can be overridden by an admin." msgstr "æ¤è®¾ç½®å·²åº”用于æœåŠ¡å™¨çº§åˆ«ï¼Œå¯ç”±ç®¡ç†å‘˜è¦†ç›–。" @@ -2005,11 +2521,14 @@ msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example msgstr "Prometheus API 地å€ï¼Œä¾‹å¦‚ http://prometheus.example.com/" msgid "PrometheusService|Time-series monitoring service" -msgstr "Prometheus 监测" +msgstr "" msgid "PrometheusService|View environments" msgstr "查看环境" +msgid "Protip:" +msgstr "" + msgid "Public - The group and any public projects can be viewed without any authentication." msgstr "公开 - 群组和任何公共项目å¯ä»¥åœ¨æ²¡æœ‰ä»»ä½•èº«ä»½éªŒè¯çš„情况下查看。" @@ -2025,6 +2544,9 @@ msgstr "推é€äº‹ä»¶" msgid "PushRule|Committer restriction" msgstr "æ交é™åˆ¶" +msgid "Quick actions can be used in the issues description and comment boxes." +msgstr "" + msgid "Read more" msgstr "了解更多" @@ -2037,6 +2559,12 @@ msgstr "分支" msgid "RefSwitcher|Tags" msgstr "æ ‡ç¾" +msgid "Reference:" +msgstr "" + +msgid "Register / Sign In" +msgstr "" + msgid "Registry" msgstr "注册表" @@ -2061,9 +2589,18 @@ msgstr "相关已åˆå¹¶çš„åˆå¹¶è¯·æ±‚" msgid "Remind later" msgstr "ç¨åŽæ醒" +msgid "Remove" +msgstr "" + +msgid "Remove avatar" +msgstr "" + msgid "Remove project" msgstr "åˆ é™¤é¡¹ç›®" +msgid "Repair authentication" +msgstr "" + msgid "Repository" msgstr "å˜å‚¨åº“" @@ -2079,6 +2616,10 @@ msgstr "é‡ç½®å¥åº·æ£€æŸ¥è®¿é—®ä»¤ç‰Œ" msgid "Reset runners registration token" msgstr "é‡ç½® Runner 注册令牌" +msgid "Reveal value" +msgid_plural "Reveal values" +msgstr[0] "" + msgid "Revert this commit" msgstr "还原æ¤æ交" @@ -2088,15 +2629,15 @@ msgstr "还原æ¤åˆå¹¶è¯·æ±‚" msgid "SSH Keys" msgstr "SSH 密钥" -msgid "Save" -msgstr "ä¿å˜" - msgid "Save changes" msgstr "ä¿å˜ä¿®æ”¹" msgid "Save pipeline schedule" msgstr "ä¿å˜æµæ°´çº¿è®¡åˆ’" +msgid "Save variables" +msgstr "" + msgid "Schedule a new pipeline" msgstr "新建æµæ°´çº¿è®¡åˆ’" @@ -2112,38 +2653,59 @@ msgstr "议题看æ¿èŒƒå›´" msgid "Search branches and tags" msgstr "æœç´¢åˆ†æ”¯å’Œæ ‡ç¾" +msgid "Search milestones" +msgstr "" + +msgid "Search project" +msgstr "" + +msgid "Search users" +msgstr "" + msgid "Seconds before reseting failure information" msgstr "é‡ç½®å¤±è´¥ä¿¡æ¯ç‰å¾…时间(秒)" -msgid "Seconds to wait after a storage failure" -msgstr "å˜å‚¨å¤±è´¥åŽç‰å¾…时间(秒)" - msgid "Seconds to wait for a storage access attempt" msgstr "ç‰å¾…å˜å‚¨è®¿é—®å°è¯•æ—¶é—´(秒)" +msgid "Secret variables" +msgstr "" + msgid "Select Archive Format" msgstr "é€‰æ‹©ä¸‹è½½æ ¼å¼" msgid "Select a timezone" msgstr "选择时区" +msgid "Select assignee" +msgstr "" + +msgid "Select branch/tag" +msgstr "" + msgid "Select target branch" msgstr "é€‰æ‹©ç›®æ ‡åˆ†æ”¯" +msgid "Selective synchronization" +msgstr "" + msgid "Sep" msgstr "ä¹" msgid "September" msgstr "ä¹æœˆ" +msgid "Server version" +msgstr "" + msgid "Service Templates" msgstr "æœåŠ¡æ¨¡æ¿" msgid "Set a password on your account to pull or push via %{protocol}." msgstr "为账å·åˆ›å»ºä¸€ä¸ªç”¨äºŽæŽ¨é€æˆ–拉å–çš„ %{protocol} 密ç 。" -msgid "Set up CI" -msgstr "设置 CI" +msgid "Set up CI/CD" +msgstr "" msgid "Set up Koding" msgstr "设置 Koding" @@ -2157,6 +2719,15 @@ msgstr "设置密ç " msgid "Settings" msgstr "设置" +msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero." +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset pipeline minutes" +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset used pipeline minutes" +msgstr "" + msgid "Show parent pages" msgstr "查看上级页é¢" @@ -2168,10 +2739,7 @@ msgid_plural "Showing %d events" msgstr[0] "显示 %d 个事件" msgid "Sidebar|Change weight" -msgstr "编辑宽度" - -msgid "Sidebar|Edit" -msgstr "编辑" +msgstr "编辑æƒé‡" msgid "Sidebar|No" msgstr "æ— " @@ -2185,18 +2753,30 @@ msgstr "宽度" msgid "Snippets" msgstr "代ç 片段" +msgid "Something went wrong on our end" +msgstr "" + msgid "Something went wrong on our end." msgstr "å‘生了错误。" +msgid "Something went wrong trying to change the confidentiality of this issue" +msgstr "" + msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}" msgstr "è¯•å›¾æ”¹å˜ ${this.issuableDisplayName} çš„é”定状æ€æ—¶å‡ºé”™äº†" +msgid "Something went wrong when toggling the button" +msgstr "" + msgid "Something went wrong while fetching the projects." msgstr "拉å–项目时å‘生错误。" msgid "Something went wrong while fetching the registry list." msgstr "拉å–注册表列表时å‘生错误。" +msgid "Something went wrong. Please try again." +msgstr "" + msgid "Sort by" msgstr "排åº" @@ -2326,12 +2906,12 @@ msgstr "å¯åŠ¨ Runner!" msgid "Stopped" msgstr "å·²åœæ¢" +msgid "Storage" +msgstr "" + msgid "Subgroups" msgstr "å群组" -msgid "Subscribe" -msgstr "订阅" - msgid "Switch branch/tag" msgstr "切æ¢åˆ†æ”¯/æ ‡ç¾" @@ -2426,8 +3006,11 @@ msgstr "谢谢 ! 请ä¸è¦å†æ˜¾ç¤º" msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project." msgstr "GitLab ä¸çš„高级全局æœç´¢åŠŸèƒ½æ˜¯éžå¸¸å¼ºå¤§çš„æœç´¢æœåŠ¡ã€‚您å¯ä»¥æœç´¢å…¶ä»–团队的代ç 以帮助您完善自己项目ä¸çš„代ç 。从而é¿å…创建é‡å¤çš„代ç 和浪费时间。" -msgid "The circuitbreaker backoff threshold should be lower than the failure count threshold" -msgstr "æ–路器关é—阈值应该低于故障计数阈值" +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project" +msgstr "" + +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project." +msgstr "" msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request." msgstr "ç¼–ç 阶段概述了从第一次æ交到创建åˆå¹¶è¯·æ±‚的时间。创建第一个åˆå¹¶è¯·æ±‚åŽï¼Œæ•°æ®å°†è‡ªåŠ¨æ·»åŠ 到æ¤å¤„。" @@ -2441,21 +3024,18 @@ msgstr "æ´¾ç”Ÿå…³ç³»å·²è¢«åˆ é™¤ã€‚" msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage." msgstr "è®®é¢˜é˜¶æ®µæ¦‚è¿°äº†ä»Žåˆ›å»ºè®®é¢˜åˆ°å°†è®®é¢˜æ·»åŠ åˆ°é‡Œç¨‹ç¢‘æˆ–è®®é¢˜çœ‹æ¿æ‰€èŠ±è´¹çš„时间。创建第一个议题åŽï¼Œæ•°æ®å°†è‡ªåŠ¨æ·»åŠ 到æ¤å¤„.。" +msgid "The maximum file size allowed is 200KB." +msgstr "" + msgid "The number of attempts GitLab will make to access a storage." msgstr "GitLab 访问å˜å‚¨çš„次数。" -msgid "The number of failures after which GitLab will start temporarily disabling access to a storage shard on a host" -msgstr "GitLab 将临时ç¦ç”¨å¯¹ä¸»å˜å‚¨åˆ†ç‰‡çš„访问" - msgid "The number of failures of after which GitLab will completely prevent access to the storage. The number of failures can be reset in the admin interface: %{link_to_health_page} or using the %{api_documentation_link}." msgstr "GitLab 将完全阻æ¢è®¿é—®å˜å‚¨çš„故障次数。å¯ä»¥åœ¨ç®¡ç†ç•Œé¢%{link_to_health_page}或使用%{api_documentation_link}é‡ç½®æ•…障次数。" msgid "The phase of the development lifecycle." msgstr "项目生命周期ä¸çš„å„个阶段。" -msgid "The pipelines schedule runs pipelines in the future, repeatedly, for specific branches or tags. Those scheduled pipelines will inherit limited project access based on their associated user." -msgstr "æµæ°´çº¿è®¡åˆ’会周期性é‡å¤è¿è¡ŒæŒ‡å®šåˆ†æ”¯æˆ–æ ‡ç¾çš„æµæ°´çº¿ã€‚这些æµæ°´çº¿å°†æ ¹æ®å…¶å…³è”用户继承有é™çš„项目访问æƒé™ã€‚" - msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit." msgstr "è®¡åˆ’é˜¶æ®µæ¦‚è¿°äº†ä»Žè®®é¢˜æ·»åŠ åˆ°æ—¥ç¨‹åˆ°æŽ¨é€é¦–次æ交的时间。当首次推é€æ交åŽï¼Œæ•°æ®å°†è‡ªåŠ¨æ·»åŠ 到æ¤å¤„。" @@ -2486,20 +3066,47 @@ msgstr "GitLab å°†ä¿æŒå¤±è´¥ä¿¡æ¯çš„时间(秒)。在æ¤æœŸé—´ä¸å‘生故障 msgid "The time in seconds GitLab will try to access storage. After this time a timeout error will be raised." msgstr "GitLab å°†å°è¯•è®¿é—®å˜å‚¨çš„时间(秒)。在æ¤æ—¶é—´ä¹‹åŽå°†å¼•å‘超时错误。" +msgid "The time in seconds between storage checks. When a previous check did complete yet, GitLab will skip a check." +msgstr "" + msgid "The time taken by each data entry gathered by that stage." msgstr "该阶段æ¯æ¡æ•°æ®æ‰€èŠ±çš„时间" msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6." msgstr "ä¸ä½æ•°æ˜¯ä¸€ä¸ªæ•°åˆ—ä¸æœ€ä¸é—´çš„值。例如在 3ã€5ã€9 之间,ä¸ä½æ•°æ˜¯ 5。在 3ã€5ã€7ã€8 之间,ä¸ä½æ•°æ˜¯ (5 + 7)/ 2 = 6。" +msgid "There are no issues to show" +msgstr "" + +msgid "There are no merge requests to show" +msgstr "" + msgid "There are problems accessing Git storage: " msgstr "访问 Git å˜å‚¨æ—¶å‡ºçŽ°é—®é¢˜ï¼š" +msgid "There was an error loading users activity calendar." +msgstr "" + +msgid "There was an error saving your notification settings." +msgstr "" + +msgid "There was an error subscribing to this label." +msgstr "" + +msgid "There was an error when reseting email token." +msgstr "" + +msgid "There was an error when subscribing to this label." +msgstr "" + +msgid "There was an error when unsubscribing from this label." +msgstr "" + msgid "This board\\'s scope is reduced" msgstr "这个看æ¿çš„范围缩å°äº†" -msgid "This branch has changed since you started editing. Would you like to create a new branch?" -msgstr "自您开始编辑åŽ, æ¤åˆ†æ”¯å·²æ›´æ”¹ã€‚您想创建一个新的分支å—?" +msgid "This directory" +msgstr "" msgid "This is a confidential issue." msgstr "这是一个机密议题。" @@ -2507,18 +3114,45 @@ msgstr "这是一个机密议题。" msgid "This is the author's first Merge Request to this project." msgstr "这是作者为项目贡献的第一个åˆå¹¶è¯·æ±‚。" +msgid "This issue is confidential" +msgstr "" + msgid "This issue is confidential and locked." msgstr "这个是机密且已é”定的议题。" msgid "This issue is locked." msgstr "æ¤è®®é¢˜å·²é”定。" +msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments" +msgstr "" + +msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered" +msgstr "" + +msgid "This job has not been triggered yet" +msgstr "" + +msgid "This job has not started yet" +msgstr "" + +msgid "This job is in pending state and is waiting to be picked by a runner" +msgstr "" + +msgid "This job requires a manual action" +msgstr "" + msgid "This means you can not push code until you create an empty repository or import existing one." msgstr "在创建一个空的å˜å‚¨åº“或导入现有å˜å‚¨åº“之å‰ï¼Œå°†æ— 法推é€ä»£ç 。" msgid "This merge request is locked." msgstr "æ¤åˆå¹¶è¯·æ±‚å·²é”定。" +msgid "This project" +msgstr "" + +msgid "This repository" +msgstr "" + msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here." msgstr "这些电å邮件自动生æˆä¸ºé—®é¢˜(评论生æˆä¸ºç”µå邮件对è¯)在这里列出。" @@ -2531,9 +3165,21 @@ msgstr "开始进行编ç å‰çš„时间" msgid "Time between merge request creation and merge/close" msgstr "从创建åˆå¹¶è¯·æ±‚到被åˆå¹¶æˆ–å…³é—的时间" +msgid "Time tracking" +msgstr "" + msgid "Time until first merge request" msgstr "创建第一个åˆå¹¶è¯·æ±‚之å‰çš„时间" +msgid "TimeTrackingEstimated|Est" +msgstr "" + +msgid "TimeTracking|Estimated:" +msgstr "" + +msgid "TimeTracking|Spent" +msgstr "" + msgid "Timeago|%s days ago" msgstr " %s 天å‰" @@ -2671,6 +3317,18 @@ msgstr "秒" msgid "Title" msgstr "æ ‡é¢˜" +msgid "Todo" +msgstr "" + +msgid "Toggle sidebar" +msgstr "" + +msgid "ToggleButton|Toggle Status: OFF" +msgstr "" + +msgid "ToggleButton|Toggle Status: ON" +msgstr "" + msgid "Total Time" msgstr "总时间" @@ -2686,20 +3344,41 @@ msgstr "跟踪活动与贡献的分æžã€‚" msgid "Track groups of issues that share a theme, across projects and milestones" msgstr "在项目和里程碑之间跟踪共享主题的议题组" +msgid "Total: %{total}" +msgstr "" + +msgid "Track time with quick actions" +msgstr "" + +msgid "Trigger this manual action" +msgstr "" + msgid "Turn on Service Desk" msgstr "打开æœåŠ¡å°" +msgid "Type %{value} to confirm:" +msgstr "" + +msgid "Unable to reset project cache." +msgstr "" + +msgid "Unknown" +msgstr "" + msgid "Unlock" msgstr "解é”" +msgid "Unlock this %{issuableDisplayName}? <strong>Everyone</strong> will be able to comment." +msgstr "" + msgid "Unlocked" msgstr "已解é”" msgid "Unstar" msgstr "å–æ¶ˆæ˜Ÿæ ‡" -msgid "Unsubscribe" -msgstr "退订" +msgid "Up to date" +msgstr "" msgid "Upgrade your plan to activate Advanced Global Search." msgstr "å‡çº§æ‚¨çš„方案以å¯ç”¨é«˜çº§å…¨å±€æœç´¢ã€‚" @@ -2722,6 +3401,9 @@ msgstr "ä¸Šä¼ æ–°æ–‡ä»¶" msgid "Upload file" msgstr "ä¸Šä¼ æ–‡ä»¶" +msgid "Upload new avatar" +msgstr "" + msgid "UploadLink|click to upload" msgstr "ç‚¹å‡»ä¸Šä¼ " @@ -2734,9 +3416,15 @@ msgstr "在安装过程ä¸ä½¿ç”¨ä»¥ä¸‹æ³¨å†Œä»¤ç‰Œï¼š" msgid "Use your global notification setting" msgstr "使用全局通知设置" +msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want." +msgstr "" + msgid "View file @ " msgstr "æµè§ˆæ–‡ä»¶ @ " +msgid "View labels" +msgstr "" + msgid "View open merge request" msgstr "查看待处ç†çš„åˆå¹¶è¯·æ±‚" @@ -2758,6 +3446,9 @@ msgstr "未知" msgid "Want to see the data? Please ask an administrator for access." msgstr "æƒé™ä¸è¶³ã€‚如需查看相关数æ®ï¼Œè¯·å‘管ç†å‘˜ç”³è¯·æƒé™ã€‚" +msgid "We could not verify that one of your projects on GCP has billing enabled. Please try again." +msgstr "" + msgid "We don't have enough data to show this stage." msgstr "该阶段的数æ®ä¸è¶³ï¼Œæ— 法显示。" @@ -2770,9 +3461,6 @@ msgstr "如果有新的推é€æˆ–新的议题,Webhook将自动触å‘您设置UR msgid "Weight" msgstr "æƒé‡" -msgid "When access to a storage fails. GitLab will prevent access to the storage for the time specified here. This allows the filesystem to recover. Repositories on failing shards are temporarly unavailable" -msgstr "访问å˜å‚¨å¤±è´¥æ—¶ã€‚ GitLab 将在æ¤å¤„指定的时间内阻æ¢å¯¹å˜å‚¨çš„访问。这å…许文件系统æ¢å¤ã€‚故障分片上的å˜å‚¨åº“æš‚æ—¶æ— æ³•ä½¿ç”¨" - msgid "Wiki" msgstr "Wiki" @@ -2791,6 +3479,12 @@ msgstr "建议安装 %{markdown},以便 GFM 功能在本地渲染:" msgid "WikiClone|Start Gollum and edit locally" msgstr "å¯åŠ¨ Gollum 并在本地编辑" +msgid "WikiEditPageTip|Tip: You can move this page by adding the path to the beginning of the title." +msgstr "" + +msgid "WikiEdit|There is already a page with the same title in that path." +msgstr "" + msgid "WikiEmptyPageError|You are not allowed to create wiki pages" msgstr "您ä¸èƒ½åˆ›å»º wiki 页é¢" @@ -2893,9 +3587,21 @@ msgstr "å³å°†åˆ 除与æºé¡¹ç›® %{forked_from_project} 的派生关系。确定 msgid "You are going to transfer %{project_name_with_namespace} to another owner. Are you ABSOLUTELY sure?" msgstr "å³å°† %{project_name_with_namespace} 转移给å¦ä¸€ä¸ªæ‰€æœ‰è€…。确定继ç»å—?" +msgid "You can also star a label to make it a priority label." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + msgid "You can only add files when you are on a branch" msgstr "åªèƒ½åœ¨åˆ†æ”¯ä¸Šæ·»åŠ 文件" +msgid "You can only edit files when you are on a branch" +msgstr "" + msgid "You cannot write to a read-only secondary GitLab Geo instance. Please use %{link_to_primary_node} instead." msgstr "您ä¸èƒ½å†™å…¥åªè¯»çš„辅助 GitLab Geo 实例。请改用%{link_to_primary_node}。" @@ -2935,6 +3641,12 @@ msgstr "在账å·ä¸ %{add_ssh_key_link} 之å‰å°†æ— 法通过 SSH 拉å–或推é msgid "You won't be able to pull or push project code via SSH until you add an SSH key to your profile" msgstr "在您的个人资料ä¸æ·»åŠ SSH密钥之å‰ï¼Œæ‚¨ä¸èƒ½é€šè¿‡SSHæ¥æ‹‰å–或推é€é¡¹ç›®ä»£ç 。" +msgid "You'll need to use different branch names to get a valid comparison." +msgstr "" + +msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure" +msgstr "" + msgid "Your comment will not be visible to the public." msgstr "您的评论将ä¸ä¼šå…¬å¼€æ˜¾ç¤ºã€‚" @@ -2947,25 +3659,218 @@ msgstr "您的åå—" msgid "Your projects" msgstr "您的项目" +msgid "assign yourself" +msgstr "" + msgid "branch name" msgstr "分支å称" msgid "by" msgstr "æ¥è‡ª" +msgid "ciReport|Code quality" +msgstr "" + +msgid "ciReport|DAST detected no alerts by analyzing the review app" +msgstr "" + +msgid "ciReport|Failed to load ${type} report" +msgstr "" + +msgid "ciReport|Fixed:" +msgstr "" + +msgid "ciReport|Instances" +msgstr "" + +msgid "ciReport|Learn more about whitelisting" +msgstr "" + +msgid "ciReport|Loading ${type} report" +msgstr "" + +msgid "ciReport|No changes to code quality" +msgstr "" + +msgid "ciReport|No changes to performance metrics" +msgstr "" + +msgid "ciReport|Performance metrics" +msgstr "" + +msgid "ciReport|SAST" +msgstr "" + +msgid "ciReport|SAST detected no security vulnerabilities" +msgstr "" + +msgid "ciReport|SAST:container no vulnerabilities were found" +msgstr "" + +msgid "ciReport|Show complete code vulnerabilities report" +msgstr "" + +msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}" +msgstr "" + msgid "commit" msgstr "æ交" +msgid "confidentiality|You are going to turn off the confidentiality. This means <strong>everyone</strong> will be able to see and leave a comment on this issue." +msgstr "" + +msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with <strong>at least Reporter access</strong> are able to see and leave comments on the issue." +msgstr "" + msgid "day" msgid_plural "days" msgstr[0] "天" +msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command." +msgstr "" + +msgid "merge request" +msgid_plural "merge requests" +msgstr[0] "" + +msgid "mrWidget|Cancel automatic merge" +msgstr "" + +msgid "mrWidget|Check out branch" +msgstr "" + +msgid "mrWidget|Checking ability to merge automatically" +msgstr "" + +msgid "mrWidget|Cherry-pick" +msgstr "" + +msgid "mrWidget|Cherry-pick this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Closed" +msgstr "" + +msgid "mrWidget|Closed by" +msgstr "" + +msgid "mrWidget|Closes" +msgstr "" + +msgid "mrWidget|Did not close" +msgstr "" + +msgid "mrWidget|Email patches" +msgstr "" + +msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|Mentions" +msgstr "" + +msgid "mrWidget|Merge" +msgstr "" + +msgid "mrWidget|Merge failed." +msgstr "" + +msgid "mrWidget|Merge locally" +msgstr "" + +msgid "mrWidget|Merged by" +msgstr "" + +msgid "mrWidget|Plain diff" +msgstr "" + +msgid "mrWidget|Refresh" +msgstr "" + +msgid "mrWidget|Refresh now" +msgstr "" + +msgid "mrWidget|Refreshing now" +msgstr "" + +msgid "mrWidget|Remove Source Branch" +msgstr "" + +msgid "mrWidget|Remove source branch" +msgstr "" + +msgid "mrWidget|Request to merge" +msgstr "" + +msgid "mrWidget|Resolve conflicts" +msgstr "" + +msgid "mrWidget|Revert" +msgstr "" + +msgid "mrWidget|Revert this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Set by" +msgstr "" + +msgid "mrWidget|The changes were merged into" +msgstr "" + +msgid "mrWidget|The changes were not merged into" +msgstr "" + +msgid "mrWidget|The changes will be merged into" +msgstr "" + +msgid "mrWidget|The source branch has been removed" +msgstr "" + +msgid "mrWidget|The source branch is being removed" +msgstr "" + +msgid "mrWidget|The source branch will be removed" +msgstr "" + +msgid "mrWidget|The source branch will not be removed" +msgstr "" + +msgid "mrWidget|There are merge conflicts" +msgstr "" + +msgid "mrWidget|This merge request failed to be merged automatically" +msgstr "" + +msgid "mrWidget|This merge request is in the process of being merged" +msgstr "" + +msgid "mrWidget|This project is archived, write access has been disabled" +msgstr "" + +msgid "mrWidget|You can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|You can remove source branch now" +msgstr "" + +msgid "mrWidget|command line" +msgstr "" + +msgid "mrWidget|into" +msgstr "" + +msgid "mrWidget|to be merged automatically when the pipeline succeeds" +msgstr "" + msgid "new merge request" msgstr "新建åˆå¹¶è¯·æ±‚" msgid "notification emails" msgstr "通知邮件" +msgid "or" +msgstr "" + msgid "parent" msgid_plural "parents" msgstr[0] "上级" @@ -2976,12 +3881,21 @@ msgstr "密ç " msgid "personal access token" msgstr "个人访问令牌" +msgid "remove due date" +msgstr "" + msgid "source" msgstr "æº" +msgid "spendCommand|%{slash_command} will update the sum of the time spent." +msgstr "" + msgid "to help your contributors communicate effectively!" msgstr "帮助您的贡献者进行有效沟通ï¼" msgid "username" msgstr "用户å" +msgid "uses Kubernetes clusters to deploy your code!" +msgstr "" + diff --git a/locale/zh_HK/gitlab.po b/locale/zh_HK/gitlab.po index 99024ee527c..c79a46c93f7 100644 --- a/locale/zh_HK/gitlab.po +++ b/locale/zh_HK/gitlab.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: gitlab-ee\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-12-12 18:31+0000\n" -"PO-Revision-Date: 2018-01-05 04:42-0500\n" +"POT-Creation-Date: 2018-02-07 11:38-0600\n" +"PO-Revision-Date: 2018-02-12 03:58-0500\n" "Last-Translator: gitlab <mbartlett+crowdin@gitlab.com>\n" "Language-Team: Chinese Traditional, Hong Kong\n" "Language: zh_HK\n" @@ -16,20 +16,35 @@ msgstr "" "X-Crowdin-Language: zh-HK\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" +msgid " and" +msgstr "" + msgid "%d commit" msgid_plural "%d commits" msgstr[0] " %d 次æ交" +msgid "%d commit behind" +msgid_plural "%d commits behind" +msgstr[0] "" + +msgid "%d issue" +msgid_plural "%d issues" +msgstr[0] "" + msgid "%d layer" msgid_plural "%d layers" msgstr[0] "" +msgid "%d merge request" +msgid_plural "%d merge requests" +msgstr[0] "" + msgid "%s additional commit has been omitted to prevent performance issues." msgid_plural "%s additional commits have been omitted to prevent performance issues." msgstr[0] "為æ高é é¢åŠ 載速度åŠæ€§èƒ½ï¼Œå·²çœç•¥äº† %s 次æ交。" -msgid "%{commit_author_link} committed %{commit_timeago}" -msgstr "ç”± %{commit_author_link} æ交於 %{commit_timeago}" +msgid "%{commit_author_link} authored %{commit_timeago}" +msgstr "" msgid "%{count} participant" msgid_plural "%{count} participants" @@ -41,9 +56,6 @@ msgstr "" msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt." msgstr "已失敗 %{number_of_failures} 次,最大失敗 %{maximum_failures} 次,GitLab å°‡é‡è©¦ã€‚" -msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will block access for %{number_of_seconds} seconds." -msgstr "已失敗 %{number_of_failures} 次,最大失敗 %{maximum_failures} 次,GitLab 將在 %{number_of_seconds} 秒後é‡è©¦ã€‚" - msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will not retry automatically. Reset storage information when the problem is resolved." msgstr "已失敗 %{number_of_failures} 次,最大失敗 %{maximum_failures} 次,GitLabä¸æœƒé‡è©¦ã€‚當å•é¡Œè§£æ±ºæ™‚é‡ç½®å˜å„²ä¿¡æ¯ã€‚" @@ -115,24 +127,81 @@ msgstr "æ·»åŠ è¨±å¯è‰" msgid "Add new directory" msgstr "æ·»åŠ æ–°ç›®éŒ„" +msgid "Add todo" +msgstr "" + +msgid "AdminArea|Stop all jobs" +msgstr "" + +msgid "AdminArea|Stop all jobs?" +msgstr "" + +msgid "AdminArea|Stop jobs" +msgstr "" + +msgid "AdminArea|Stopping jobs failed" +msgstr "" + +msgid "AdminArea|You’re about to stop all jobs. This will halt all current jobs that are running." +msgstr "" + msgid "AdminHealthPageLink|health page" msgstr "" +msgid "Advanced" +msgstr "" + msgid "Advanced settings" msgstr "" msgid "All" msgstr "全部" +msgid "All changes are committed" +msgstr "" + +msgid "Allows you to add and manage Kubernetes clusters." +msgstr "" + +msgid "An error occurred previewing the blob" +msgstr "" + msgid "An error occurred when toggling the notification subscription" msgstr "" msgid "An error occurred when updating the issue weight" msgstr "" +msgid "An error occurred while dismissing the feature highlight. Refresh the page and try dismissing again." +msgstr "" + +msgid "An error occurred while fetching markdown preview" +msgstr "" + msgid "An error occurred while fetching sidebar data" msgstr "" +msgid "An error occurred while getting projects" +msgstr "" + +msgid "An error occurred while loading filenames" +msgstr "" + +msgid "An error occurred while rendering KaTeX" +msgstr "" + +msgid "An error occurred while rendering preview broadcast message" +msgstr "" + +msgid "An error occurred while retrieving calendar activity" +msgstr "" + +msgid "An error occurred while retrieving diff" +msgstr "" + +msgid "An error occurred while validating username" +msgstr "" + msgid "An error occurred. Please try again." msgstr "" @@ -157,9 +226,6 @@ msgstr "確定è¦åˆªé™¤æ¤æµæ°´ç·šè¨ˆåŠƒå—Žï¼Ÿ" msgid "Are you sure you want to discard your changes?" msgstr "確定è¦æ”¾æ£„修改嗎?" -msgid "Are you sure you want to leave this group?" -msgstr "" - msgid "Are you sure you want to reset registration token?" msgstr "確定è¦é‡ç½®è¨»å†Šä»¤ç‰Œå—Žï¼Ÿ" @@ -172,6 +238,21 @@ msgstr "確定嗎?" msgid "Artifacts" msgstr "" +msgid "Assign custom color like #FF0000" +msgstr "" + +msgid "Assign labels" +msgstr "" + +msgid "Assign milestone" +msgstr "" + +msgid "Assign to" +msgstr "" + +msgid "Assignee" +msgstr "" + msgid "Attach a file by drag & drop or %{upload_link}" msgstr "拖放文件到æ¤è™•æˆ–者 %{upload_link}" @@ -187,13 +268,16 @@ msgstr "" msgid "Author" msgstr "" -msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly." +msgid "Authors: %{authors}" msgstr "" -msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly." +msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly." msgstr "" -msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly." +msgid "Auto Review Apps and Auto Deploy need a domain name and a %{kubernetes} to work correctly." +msgstr "" + +msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly." msgstr "" msgid "AutoDevOps|Auto DevOps (Beta)" @@ -217,6 +301,12 @@ msgstr "" msgid "Available" msgstr "" +msgid "Avatar will be removed. Are you sure?" +msgstr "" + +msgid "Average per day: %{average}" +msgstr "" + msgid "Billing" msgstr "" @@ -271,6 +361,9 @@ msgstr "" msgid "BillingPlans|per user" msgstr "" +msgid "Begin with the selected commit" +msgstr "" + msgid "Branch" msgid_plural "Branches" msgstr[0] "分支" @@ -398,8 +491,8 @@ msgstr "作者:" msgid "CI / CD" msgstr "" -msgid "CI configuration" -msgstr "CI é…ç½®" +msgid "CI/CD configuration" +msgstr "" msgid "CICD|Jobs" msgstr "" @@ -410,6 +503,9 @@ msgstr "å–消" msgid "Cancel edit" msgstr "å–消编辑" +msgid "Cannot modify managed Kubernetes cluster" +msgstr "" + msgid "Change Weight" msgstr "" @@ -425,15 +521,24 @@ msgstr "優é¸" msgid "ChangeTypeAction|Revert" msgstr "還原" +msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes." +msgstr "" + msgid "Changelog" msgstr "更新日誌" +msgid "Changes are shown as if the <b>source</b> revision was being merged into the <b>target</b> revision." +msgstr "" + msgid "Charts" msgstr "統計圖" msgid "Chat" msgstr "" +msgid "Check interval" +msgstr "" + msgid "Checking %{text} availability…" msgstr "" @@ -446,7 +551,19 @@ msgstr "優é¸æ¤æ交" msgid "Cherry-pick this merge request" msgstr "優é¸æ¤åˆä½µè«‹æ±‚" -msgid "Choose which groups you wish to replicate to this secondary node. Leave blank to replicate all." +msgid "Choose File ..." +msgstr "" + +msgid "Choose a branch/tag (e.g. %{master}) or enter a commit (e.g. %{sha}) to see what's changed or to create a merge request." +msgstr "" + +msgid "Choose file..." +msgstr "" + +msgid "Choose which groups you wish to synchronize to this secondary node." +msgstr "" + +msgid "Choose which shards you wish to synchronize to this secondary node." msgstr "" msgid "CiStatusLabel|canceled" @@ -503,79 +620,91 @@ msgstr "已跳éŽ" msgid "CiStatus|running" msgstr "é‹è¡Œä¸" -msgid "CircuitBreakerApiLink|circuitbreaker api" +msgid "CiVariables|Input variable key" msgstr "" -msgid "Clone repository" +msgid "CiVariables|Input variable value" msgstr "" -msgid "Close" +msgid "CiVariables|Remove variable row" msgstr "" -msgid "Cluster" +msgid "CiVariable|* (All environments)" msgstr "" -msgid "ClusterIntegration|%{appList} was successfully installed on your cluster" +msgid "CiVariable|All environments" msgstr "" -msgid "ClusterIntegration|%{boldNotice} This will add some extra resources like a load balancer, which incur additional costs. See %{pricingLink}" +msgid "CiVariable|Create wildcard" msgstr "" -msgid "ClusterIntegration|API URL" +msgid "CiVariable|Error occured while saving variables" msgstr "" -msgid "ClusterIntegration|Active" +msgid "CiVariable|New environment" msgstr "" -msgid "ClusterIntegration|Add an existing cluster" +msgid "CiVariable|Protected" msgstr "" -msgid "ClusterIntegration|Add cluster" +msgid "CiVariable|Search environments" msgstr "" -msgid "ClusterIntegration|All" +msgid "CiVariable|Toggle protected" msgstr "" -msgid "ClusterIntegration|Applications" +msgid "CiVariable|Validation failed" msgstr "" -msgid "ClusterIntegration|CA Certificate" +msgid "CircuitBreakerApiLink|circuitbreaker api" msgstr "" -msgid "ClusterIntegration|Certificate Authority bundle (PEM format)" +msgid "Click to expand text" +msgstr "" + +msgid "Clone repository" +msgstr "" + +msgid "Close" msgstr "" -msgid "ClusterIntegration|Choose how to set up cluster integration" +msgid "Closed" msgstr "" -msgid "ClusterIntegration|Cluster" +msgid "ClusterIntegration|%{appList} was successfully installed on your Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Cluster details" +msgid "ClusterIntegration|API URL" msgstr "" -msgid "ClusterIntegration|Cluster integration" +msgid "ClusterIntegration|Add Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Cluster integration is disabled for this project." +msgid "ClusterIntegration|Add an existing Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Cluster integration is enabled for this project." +msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration" msgstr "" -msgid "ClusterIntegration|Cluster integration is enabled for this project. Disabling this integration will not affect your cluster, it will only temporarily turn off GitLab's connection to it." +msgid "ClusterIntegration|Applications" msgstr "" -msgid "ClusterIntegration|Cluster is being created on Google Kubernetes Engine..." +msgid "ClusterIntegration|Are you sure you want to remove this Kubernetes cluster's integration? This will not delete your actual Kubernetes cluster." msgstr "" -msgid "ClusterIntegration|Cluster name" +msgid "ClusterIntegration|CA Certificate" msgstr "" -msgid "ClusterIntegration|Cluster was successfully created on Google Kubernetes Engine. Refresh the page to see cluster's details" +msgid "ClusterIntegration|Certificate Authority bundle (PEM format)" msgstr "" -msgid "ClusterIntegration|Clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" +msgid "ClusterIntegration|Choose how to set up Kubernetes cluster integration" +msgstr "" + +msgid "ClusterIntegration|Choose which of your project's environments will use this Kubernetes cluster." +msgstr "" + +msgid "ClusterIntegration|Control how your Kubernetes cluster integrates with GitLab" msgstr "" msgid "ClusterIntegration|Copy API URL" @@ -584,37 +713,34 @@ msgstr "" msgid "ClusterIntegration|Copy CA Certificate" msgstr "" -msgid "ClusterIntegration|Copy Token" +msgid "ClusterIntegration|Copy Kubernetes cluster name" msgstr "" -msgid "ClusterIntegration|Copy cluster name" +msgid "ClusterIntegration|Copy Token" msgstr "" -msgid "ClusterIntegration|Create a new cluster on Google Engine right from GitLab" +msgid "ClusterIntegration|Create Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Create cluster" +msgid "ClusterIntegration|Create Kubernetes cluster on Google Kubernetes Engine" msgstr "" -msgid "ClusterIntegration|Create cluster on Google Kubernetes Engine" +msgid "ClusterIntegration|Create a new Kubernetes cluster on Google Kubernetes Engine right from GitLab" msgstr "" msgid "ClusterIntegration|Create on GKE" msgstr "" -msgid "ClusterIntegration|Enable cluster integration" -msgstr "" - msgid "ClusterIntegration|Enter the details for an existing Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Enter the details for your cluster" +msgid "ClusterIntegration|Enter the details for your Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Environment pattern" +msgid "ClusterIntegration|Environment scope" msgstr "" -msgid "ClusterIntegration|GKE pricing" +msgid "ClusterIntegration|GitLab Integration" msgstr "" msgid "ClusterIntegration|GitLab Runner" @@ -632,64 +758,94 @@ msgstr "" msgid "ClusterIntegration|Helm Tiller" msgstr "" -msgid "ClusterIntegration|Inactive" -msgstr "" - msgid "ClusterIntegration|Ingress" msgstr "" msgid "ClusterIntegration|Install" msgstr "" -msgid "ClusterIntegration|Install applications on your cluster. Read more about %{helpLink}" -msgstr "" - msgid "ClusterIntegration|Installed" msgstr "" msgid "ClusterIntegration|Installing" msgstr "" -msgid "ClusterIntegration|Integrate cluster automation" +msgid "ClusterIntegration|Integrate Kubernetes cluster automation" +msgstr "" + +msgid "ClusterIntegration|Integration status" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster details" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is disabled for this project." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project. Disabling this integration will not affect your Kubernetes cluster, it will only temporarily turn off GitLab's connection to it." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster is being created on Google Kubernetes Engine..." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster name" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters can be used to deploy applications and to provide Review Apps for this project" msgstr "" msgid "ClusterIntegration|Learn more about %{link_to_documentation}" msgstr "" -msgid "ClusterIntegration|Learn more about Clusters" +msgid "ClusterIntegration|Learn more about Kubernetes" msgstr "" -msgid "ClusterIntegration|Machine type" +msgid "ClusterIntegration|Learn more about environments" msgstr "" -msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create clusters" +msgid "ClusterIntegration|Machine type" msgstr "" -msgid "ClusterIntegration|Manage cluster integration on your GitLab project" +msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create Kubernetes clusters" msgstr "" -msgid "ClusterIntegration|Manage your cluster by visiting %{link_gke}" +msgid "ClusterIntegration|Manage" msgstr "" -msgid "ClusterIntegration|Multiple clusters are available in GitLab Entreprise Edition Premium and Ultimate" +msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}" msgstr "" -msgid "ClusterIntegration|Note:" +msgid "ClusterIntegration|More information" msgstr "" -msgid "ClusterIntegration|Number of nodes" +msgid "ClusterIntegration|Multiple Kubernetes clusters are available in GitLab Enterprise Edition Premium and Ultimate" msgstr "" -msgid "ClusterIntegration|Please enter access information for your cluster. If you need help, you can read our %{link_to_help_page} on clusters" +msgid "ClusterIntegration|Note:" msgstr "" -msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:" +msgid "ClusterIntegration|Number of nodes" msgstr "" -msgid "ClusterIntegration|Problem setting up the cluster" +msgid "ClusterIntegration|Please enter access information for your Kubernetes cluster. If you need help, you can read our %{link_to_help_page} on Kubernetes" msgstr "" -msgid "ClusterIntegration|Problem setting up the clusters list" +msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:" msgstr "" msgid "ClusterIntegration|Project ID" @@ -701,16 +857,19 @@ msgstr "" msgid "ClusterIntegration|Project namespace (optional, unique)" msgstr "" -msgid "ClusterIntegration|Read our %{link_to_help_page} on cluster integration." +msgid "ClusterIntegration|Prometheus" msgstr "" -msgid "ClusterIntegration|Remove cluster integration" +msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration." +msgstr "" + +msgid "ClusterIntegration|Remove Kubernetes cluster integration" msgstr "" msgid "ClusterIntegration|Remove integration" msgstr "" -msgid "ClusterIntegration|Removing cluster integration will remove the cluster configuration you have added to this project. It will not delete your cluster on Google Kubernetes Engine." +msgid "ClusterIntegration|Remove this Kubernetes cluster's configuration from this project. This will not delete your actual Kubernetes cluster." msgstr "" msgid "ClusterIntegration|Request to begin installing failed" @@ -719,7 +878,7 @@ msgstr "" msgid "ClusterIntegration|Save changes" msgstr "" -msgid "ClusterIntegration|See and edit the details for your cluster" +msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster" msgstr "" msgid "ClusterIntegration|See machine types" @@ -740,25 +899,25 @@ msgstr "" msgid "ClusterIntegration|Something went wrong on our end." msgstr "" -msgid "ClusterIntegration|Something went wrong while creating your cluster on Google Kubernetes Engine" +msgid "ClusterIntegration|Something went wrong while creating your Kubernetes cluster on Google Kubernetes Engine" msgstr "" msgid "ClusterIntegration|Something went wrong while installing %{title}" msgstr "" -msgid "ClusterIntegration|There are no clusters to show" +msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below" msgstr "" -msgid "ClusterIntegration|This account must have permissions to create a cluster in the %{link_to_container_project} specified below" +msgid "ClusterIntegration|Toggle Kubernetes Cluster" msgstr "" -msgid "ClusterIntegration|Toggle Cluster" +msgid "ClusterIntegration|Toggle Kubernetes cluster" msgstr "" msgid "ClusterIntegration|Token" msgstr "" -msgid "ClusterIntegration|With a cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." +msgid "ClusterIntegration|With a Kubernetes cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." msgstr "" msgid "ClusterIntegration|Your account must have %{link_to_kubernetes_engine}" @@ -770,7 +929,7 @@ msgstr "" msgid "ClusterIntegration|access to Google Kubernetes Engine" msgstr "" -msgid "ClusterIntegration|cluster" +msgid "ClusterIntegration|check the pricing here" msgstr "" msgid "ClusterIntegration|documentation" @@ -788,6 +947,9 @@ msgstr "" msgid "ClusterIntegration|properly configured" msgstr "" +msgid "Collapse" +msgstr "" + msgid "Comments" msgstr "è©•è«–" @@ -804,6 +966,9 @@ msgstr "最近30次æ交花費的時間(分é˜ï¼‰" msgid "Commit message" msgstr "æ交信æ¯" +msgid "Commit statistics for %{ref} %{start_time} - %{end_time}" +msgstr "" + msgid "CommitBoxTitle|Commit" msgstr "æ交" @@ -816,15 +981,57 @@ msgstr "æ交" msgid "Commits feed" msgstr "æ交動態" +msgid "Commits per day hour (UTC)" +msgstr "" + +msgid "Commits per day of month" +msgstr "" + +msgid "Commits per weekday" +msgstr "" + +msgid "Commits|An error occurred while fetching merge requests data." +msgstr "" + +msgid "Commits|Commit: %{commitText}" +msgstr "" + msgid "Commits|History" msgstr "æ·å²" +msgid "Commits|No related merge requests found" +msgstr "" + msgid "Committed by" msgstr "æ交者:" msgid "Compare" msgstr "比較" +msgid "Compare Git revisions" +msgstr "" + +msgid "Compare Revisions" +msgstr "" + +msgid "CompareBranches|%{source_branch} and %{target_branch} are the same." +msgstr "" + +msgid "CompareBranches|Compare" +msgstr "" + +msgid "CompareBranches|Source" +msgstr "" + +msgid "CompareBranches|Target" +msgstr "" + +msgid "CompareBranches|There isn't anything to compare." +msgstr "" + +msgid "Confidentiality" +msgstr "" + msgid "Container Registry" msgstr "" @@ -876,6 +1083,9 @@ msgstr "è²¢ç»æŒ‡å—" msgid "Contributors" msgstr "è²¢ç»è€…" +msgid "ContributorsPage|%{startDate} – %{endDate}" +msgstr "" + msgid "ContributorsPage|Building repository graph." msgstr "" @@ -897,9 +1107,18 @@ msgstr "" msgid "Copy URL to clipboard" msgstr "複製URL到剪貼æ¿" +msgid "Copy branch name to clipboard" +msgstr "" + msgid "Copy commit SHA to clipboard" msgstr "複製æ交 SHA 到剪貼æ¿" +msgid "Copy reference to clipboard" +msgstr "" + +msgid "Create" +msgstr "" + msgid "Create New Directory" msgstr "創建新目錄" @@ -918,6 +1137,9 @@ msgstr "" msgid "Create file" msgstr "" +msgid "Create lists from labels. Issues with that label appear in that list." +msgstr "" + msgid "Create merge request" msgstr "創建åˆä½µè«‹æ±‚" @@ -930,6 +1152,9 @@ msgstr "" msgid "Create new file" msgstr "" +msgid "Create new label" +msgstr "" + msgid "Create new..." msgstr "創建..." @@ -951,6 +1176,9 @@ msgstr "Cron 時å€" msgid "Cron syntax" msgstr "Cron 語法" +msgid "Current node" +msgstr "" + msgid "Custom notification events" msgstr "自定義通知事件" @@ -960,9 +1188,6 @@ msgstr "自定義通知級別繼承自åƒèˆ‡ç´šåˆ¥ã€‚使用自定義通知級別 msgid "Cycle Analytics" msgstr "週期分æž" -msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project." -msgstr "週期分æžæ¦‚è¿°äº†é …ç›®å¾žæƒ³æ³•åˆ°ç”¢å“實ç¾çš„å„階段所需的時間。" - msgid "CycleAnalyticsStage|Code" msgstr "編碼" @@ -1018,12 +1243,21 @@ msgstr "" msgid "Details" msgstr "詳情" +msgid "Diffs|No file name available" +msgstr "" + msgid "Directory name" msgstr "目錄å稱" +msgid "Disable" +msgstr "" + msgid "Discard changes" msgstr "放棄更改" +msgid "Discover GitLab Geo." +msgstr "" + msgid "Dismiss Cycle Analytics introduction box" msgstr "" @@ -1060,15 +1294,24 @@ msgstr "差異文件" msgid "DownloadSource|Download" msgstr "下載" +msgid "Due date" +msgstr "" + msgid "Edit" msgstr "編輯" msgid "Edit Pipeline Schedule %{id}" msgstr "編輯 %{id} æµæ°´ç·šè¨ˆåŠƒ" +msgid "Edit files in the editor and commit changes here" +msgstr "" + msgid "Emails" msgstr "" +msgid "Enable" +msgstr "" + msgid "Environments|An error occurred while fetching the environments." msgstr "" @@ -1087,9 +1330,6 @@ msgstr "" msgid "Environments|Environments" msgstr "" -msgid "Environments|Environments are places where code gets deployed, such as staging or production." -msgstr "" - msgid "Environments|Job" msgstr "" @@ -1132,9 +1372,33 @@ msgstr "" msgid "Error creating epic" msgstr "" +msgid "Error fetching contributors data." +msgstr "" + +msgid "Error fetching labels." +msgstr "" + +msgid "Error fetching network graph." +msgstr "" + +msgid "Error fetching refs" +msgstr "" + +msgid "Error fetching usage ping data." +msgstr "" + msgid "Error occurred when toggling the notification subscription" msgstr "" +msgid "Error saving label update." +msgstr "" + +msgid "Error updating status for all todos." +msgstr "" + +msgid "Error updating todo status." +msgstr "" + msgid "EventFilterBy|Filter by all" msgstr "全部" @@ -1162,6 +1426,9 @@ msgstr "æ¯æœˆåŸ·è¡Œï¼ˆæ¯æœˆ 1 日淩晨 4 點)" msgid "Every week (Sundays at 4:00am)" msgstr "æ¯é€±åŸ·è¡Œï¼ˆå‘¨æ—¥æ·©æ™¨ 4 點)" +msgid "Expand" +msgstr "" + msgid "Explore projects" msgstr "" @@ -1180,6 +1447,9 @@ msgstr "" msgid "February" msgstr "" +msgid "Fields on this page are now uneditable, you can configure" +msgstr "" + msgid "File name" msgstr "" @@ -1223,10 +1493,10 @@ msgstr "從åˆä½µè«‹æ±‚çš„åˆä½µåˆ°éƒ¨ç½²è‡³ç”Ÿç”¢ç’°å¢ƒ" msgid "GPG Keys" msgstr "" -msgid "Geo Nodes" +msgid "Generate a default set of labels" msgstr "" -msgid "GeoNodeSyncStatus|Failed" +msgid "Geo Nodes" msgstr "" msgid "GeoNodeSyncStatus|Node is failing or broken." @@ -1235,16 +1505,100 @@ msgstr "" msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage." msgstr "" -msgid "GeoNodeSyncStatus|Out of sync" +msgid "GeoNodes|Database replication lag:" +msgstr "" + +msgid "GeoNodes|Disabling a node stops the sync process. Are you sure?" +msgstr "" + +msgid "GeoNodes|Does not match the primary storage configuration" +msgstr "" + +msgid "GeoNodes|Failed" +msgstr "" + +msgid "GeoNodes|Full" +msgstr "" + +msgid "GeoNodes|GitLab version does not match the primary node version" +msgstr "" + +msgid "GeoNodes|GitLab version:" +msgstr "" + +msgid "GeoNodes|Health status:" +msgstr "" + +msgid "GeoNodes|Last event ID processed by cursor:" +msgstr "" + +msgid "GeoNodes|Last event ID seen from primary:" +msgstr "" + +msgid "GeoNodes|Loading nodes" +msgstr "" + +msgid "GeoNodes|Local Attachments:" +msgstr "" + +msgid "GeoNodes|Local LFS objects:" +msgstr "" + +msgid "GeoNodes|Local job artifacts:" +msgstr "" + +msgid "GeoNodes|New node" +msgstr "" + +msgid "GeoNodes|Out of sync" +msgstr "" + +msgid "GeoNodes|Replication slot WAL:" +msgstr "" + +msgid "GeoNodes|Replication slots:" +msgstr "" + +msgid "GeoNodes|Repositories:" +msgstr "" + +msgid "GeoNodes|Selective" +msgstr "" + +msgid "GeoNodes|Storage config:" +msgstr "" + +msgid "GeoNodes|Sync settings:" msgstr "" -msgid "GeoNodeSyncStatus|Synced" +msgid "GeoNodes|Synced" +msgstr "" + +msgid "GeoNodes|Unused slots" +msgstr "" + +msgid "GeoNodes|Used slots" +msgstr "" + +msgid "GeoNodes|Wikis:" +msgstr "" + +msgid "GeoNodes|You have configured Geo nodes using an insecure HTTP connection. We recommend the use of HTTPS." +msgstr "" + +msgid "Geo|All projects" msgstr "" msgid "Geo|File sync capacity" msgstr "" -msgid "Geo|Groups to replicate" +msgid "Geo|Groups to synchronize" +msgstr "" + +msgid "Geo|Projects in certain groups" +msgstr "" + +msgid "Geo|Projects in certain storage shards" msgstr "" msgid "Geo|Repository sync capacity" @@ -1253,12 +1607,24 @@ msgstr "" msgid "Geo|Select groups to replicate." msgstr "" +msgid "Geo|Shards to synchronize" +msgstr "" + +msgid "Git revision" +msgstr "" + msgid "Git storage health information has been reset" msgstr "Git å˜å„²å¥åº·ä¿¡æ¯å·²é‡ç½®" +msgid "Git version" +msgstr "" + msgid "GitLab Runner section" msgstr "GitLab Runner 介紹" +msgid "Gitaly Servers" +msgstr "" + msgid "Go to your fork" msgstr "è·³è½‰åˆ°æ´¾ç”Ÿé …ç›®" @@ -1268,6 +1634,9 @@ msgstr "è·³è½‰åˆ°æ´¾ç”Ÿé …ç›®" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it!" +msgstr "" + msgid "GroupSettings|Prevent sharing a project within %{group} with other groups" msgstr "" @@ -1304,7 +1673,7 @@ msgstr "" msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group." msgstr "" -msgid "GroupsTree|Are you sure you want to leave the \"${this.group.fullName}\" group?" +msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?" msgstr "" msgid "GroupsTree|Create a project in this group." @@ -1355,6 +1724,10 @@ msgstr "沒有檢測到å¥åº·å•é¡Œ" msgid "HealthCheck|Unhealthy" msgstr "ä¸è‰¯" +msgid "Hide value" +msgid_plural "Hide values" +msgstr[0] "" + msgid "History" msgstr "" @@ -1380,6 +1753,12 @@ msgid "Instance" msgid_plural "Instances" msgstr[0] "" +msgid "Instance does not support multiple Kubernetes clusters" +msgstr "" + +msgid "Interested parties can even contribute by pushing commits if they want to." +msgstr "" + msgid "Internal - The group and any internal projects can be viewed by any logged in user." msgstr "" @@ -1407,6 +1786,9 @@ msgstr "" msgid "Issues" msgstr "" +msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable." +msgstr "" + msgid "Jan" msgstr "" @@ -1425,6 +1807,27 @@ msgstr "" msgid "June" msgstr "" +msgid "Kubernetes" +msgstr "" + +msgid "Kubernetes Cluster" +msgstr "" + +msgid "Kubernetes cluster creation time exceeds timeout; %{timeout}" +msgstr "" + +msgid "Kubernetes cluster integration was not removed." +msgstr "" + +msgid "Kubernetes cluster integration was successfully removed." +msgstr "" + +msgid "Kubernetes cluster was successfully updated." +msgstr "" + +msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page" +msgstr "" + msgid "LFSStatus|Disabled" msgstr "åœç”¨" @@ -1434,6 +1837,9 @@ msgstr "啟用" msgid "Labels" msgstr "" +msgid "Labels can be applied to issues and merge requests to categorize them." +msgstr "" + msgid "Last %d day" msgid_plural "Last %d days" msgstr[0] "最近 %d 天" @@ -1462,6 +1868,9 @@ msgstr "您推é€äº†" msgid "LastPushEvent|at" msgstr "在" +msgid "Learn more" +msgstr "" + msgid "Learn more in the" msgstr "了解更多" @@ -1480,13 +1889,18 @@ msgstr "é€€å‡ºé …ç›®" msgid "License" msgstr "" -msgid "Limited to showing %d event at most" -msgid_plural "Limited to showing %d events at most" -msgstr[0] "最多顯示 %d 個事件" +msgid "Loading the GitLab IDE..." +msgstr "" msgid "Lock" msgstr "" +msgid "Lock %{issuableDisplayName}" +msgstr "" + +msgid "Lock this %{issuableDisplayName}? Only <strong>project members</strong> will be able to comment." +msgstr "" + msgid "Locked" msgstr "" @@ -1496,12 +1910,21 @@ msgstr "" msgid "Login" msgstr "" +msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos." +msgstr "" + +msgid "Manage labels" +msgstr "" + msgid "Mar" msgstr "" msgid "March" msgstr "" +msgid "Mark done" +msgstr "" + msgid "Maximum git storage failures" msgstr "" @@ -1514,6 +1937,9 @@ msgstr "ä¸ä½æ•¸" msgid "Members" msgstr "" +msgid "Merge Request" +msgstr "" + msgid "Merge Requests" msgstr "" @@ -1523,9 +1949,30 @@ msgstr "åˆä½µäº‹ä»¶ (merge event)" msgid "Merge request" msgstr "" +msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others" +msgstr "" + +msgid "Merged" +msgstr "" + msgid "Messages" msgstr "" +msgid "Milestone" +msgstr "" + +msgid "Milestones|Delete milestone" +msgstr "" + +msgid "Milestones|Delete milestone %{milestoneTitle}?" +msgstr "" + +msgid "Milestones|Failed to delete milestone %{milestoneTitle}" +msgstr "" + +msgid "Milestones|Milestone %{milestoneTitle} was not found" +msgstr "" + msgid "MissingSSHKeyWarningLink|add an SSH key" msgstr "æ·»åŠ å£¹å€‹ SSH 公鑰" @@ -1535,16 +1982,28 @@ msgstr "" msgid "More information is available|here" msgstr "幫助文檔" +msgid "Move" +msgstr "" + +msgid "Move issue" +msgstr "" + msgid "Multiple issue boards" msgstr "" -msgid "New Cluster" +msgid "Name new label" msgstr "" msgid "New Issue" msgid_plural "New Issues" msgstr[0] "新建è°é¡Œ" +msgid "New Kubernetes Cluster" +msgstr "" + +msgid "New Kubernetes cluster" +msgstr "" + msgid "New Pipeline Schedule" msgstr "創建æµæ°´ç·šè¨ˆåŠƒ" @@ -1569,6 +2028,9 @@ msgstr "" msgid "New issue" msgstr "æ–°è°é¡Œ" +msgid "New label" +msgstr "" + msgid "New merge request" msgstr "新增åˆä½µè«‹æ±‚" @@ -1587,7 +2049,22 @@ msgstr "" msgid "New tag" msgstr "新增標籤" -msgid "No container images stored for this project. Add one by following the instructions above." +msgid "No assignee" +msgstr "" + +msgid "No changes" +msgstr "" + +msgid "No connection could be made to a Gitaly Server, please check your logs!" +msgstr "" + +msgid "No due date" +msgstr "" + +msgid "No estimate or time spent" +msgstr "" + +msgid "No file chosen" msgstr "" msgid "No repository" @@ -1602,9 +2079,15 @@ msgstr "" msgid "None" msgstr "" +msgid "Not allowed to merge" +msgstr "" + msgid "Not available" msgstr "ä¸å¯ç”¨" +msgid "Not confidential" +msgstr "" + msgid "Not enough data" msgstr "數據ä¸è¶³" @@ -1665,6 +2148,12 @@ msgstr "關注" msgid "Notifications" msgstr "" +msgid "Notifications off" +msgstr "" + +msgid "Notifications on" +msgstr "" + msgid "Nov" msgstr "" @@ -1674,7 +2163,7 @@ msgstr "" msgid "Number of access attempts" msgstr "" -msgid "Number of failures before backing off" +msgid "OK" msgstr "" msgid "Oct" @@ -1689,6 +2178,9 @@ msgstr "篩é¸" msgid "Only project members can comment." msgstr "" +msgid "Open" +msgstr "" + msgid "Opened" msgstr "" @@ -1722,9 +2214,6 @@ msgstr "" msgid "Password" msgstr "" -msgid "People without permission will never get a notification and won\\'t be able to comment." -msgstr "" - msgid "Pipeline" msgstr "æµæ°´ç·š" @@ -1767,12 +2256,6 @@ msgstr "所有" msgid "PipelineSchedules|Inactive" msgstr "未啟用" -msgid "PipelineSchedules|Input variable key" -msgstr "輸入變é‡å" - -msgid "PipelineSchedules|Input variable value" -msgstr "輸入變é‡å€¼" - msgid "PipelineSchedules|Next Run" msgstr "下次é‹è¡Œæ™‚é–“" @@ -1782,9 +2265,6 @@ msgstr "ç„¡" msgid "PipelineSchedules|Provide a short description for this pipeline" msgstr "為æ¤æµæ°´ç·šæ供簡çŸæè¿°" -msgid "PipelineSchedules|Remove variable row" -msgstr "刪除變é‡" - msgid "PipelineSchedules|Take ownership" msgstr "å–得所有權" @@ -1812,6 +2292,12 @@ msgstr "" msgid "Pipelines for last year" msgstr "" +msgid "Pipelines|Build with confidence" +msgstr "" + +msgid "Pipelines|Get started with Pipelines" +msgstr "" + msgid "Pipeline|all" msgstr "所有" @@ -1824,12 +2310,21 @@ msgstr "於階段" msgid "Pipeline|with stages" msgstr "於階段" +msgid "Play" +msgstr "" + +msgid "Please <a href=%{link_to_billing} target=\"_blank\" rel=\"noopener noreferrer\">enable billing for one of your projects to be able to create a Kubernetes cluster</a>, then try again." +msgstr "" + msgid "Please solve the reCAPTCHA" msgstr "" msgid "Preferences" msgstr "" +msgid "Primary" +msgstr "" + msgid "Private - Project access must be granted explicitly to each user." msgstr "" @@ -1875,6 +2370,9 @@ msgstr "" msgid "Profiles|your account" msgstr "" +msgid "Programming languages used in this repository" +msgstr "" + msgid "Project '%{project_name}' is in the process of being deleted." msgstr "" @@ -1890,6 +2388,15 @@ msgstr "é …ç›® '%{project_name}' 已更新完æˆã€‚" msgid "Project access must be granted explicitly to each user." msgstr "é …ç›®è¨ªå•æ¬Šé™å¿…é ˆæ˜Žç¢ºæŽˆæ¬Šçµ¦æ¯å€‹ç”¨æˆ¶ã€‚" +msgid "Project avatar" +msgstr "" + +msgid "Project avatar in repository: %{link}" +msgstr "" + +msgid "Project cache successfully reset." +msgstr "" + msgid "Project details" msgstr "專案詳情" @@ -1908,6 +2415,21 @@ msgstr "é …ç›®å°Žå‡ºå·²é–‹å§‹ã€‚ä¸‹è¼‰éˆæŽ¥å°‡é€šéŽé›»å郵件發é€ã€‚" msgid "ProjectActivityRSS|Subscribe" msgstr "訂閱" +msgid "ProjectCreationLevel|Allowed to create projects" +msgstr "" + +msgid "ProjectCreationLevel|Default project creation protection" +msgstr "" + +msgid "ProjectCreationLevel|Developers + Masters" +msgstr "" + +msgid "ProjectCreationLevel|Masters" +msgstr "" + +msgid "ProjectCreationLevel|No one" +msgstr "" + msgid "ProjectFeature|Disabled" msgstr "åœç”¨" @@ -1932,15 +2454,9 @@ msgstr "分支圖" msgid "ProjectSettings|Contact an admin to change this setting." msgstr "" -msgid "ProjectSettings|Immediately run a pipeline on the default branch" -msgstr "" - msgid "ProjectSettings|Only signed commits can be pushed to this repository." msgstr "" -msgid "ProjectSettings|Problem setting up the CI/CD settings JavaScript" -msgstr "" - msgid "ProjectSettings|This setting is applied on the server level and can be overridden by an admin." msgstr "" @@ -2010,6 +2526,9 @@ msgstr "" msgid "PrometheusService|View environments" msgstr "" +msgid "Protip:" +msgstr "" + msgid "Public - The group and any public projects can be viewed without any authentication." msgstr "" @@ -2025,6 +2544,9 @@ msgstr "推é€äº‹ä»¶ (push event) " msgid "PushRule|Committer restriction" msgstr "" +msgid "Quick actions can be used in the issues description and comment boxes." +msgstr "" + msgid "Read more" msgstr "了解更多" @@ -2037,6 +2559,12 @@ msgstr "分支" msgid "RefSwitcher|Tags" msgstr "標籤" +msgid "Reference:" +msgstr "" + +msgid "Register / Sign In" +msgstr "" + msgid "Registry" msgstr "" @@ -2061,9 +2589,18 @@ msgstr "相關已åˆä½µçš„åˆä½µè«‹æ±‚" msgid "Remind later" msgstr "ç¨å¾Œæ醒" +msgid "Remove" +msgstr "" + +msgid "Remove avatar" +msgstr "" + msgid "Remove project" msgstr "åˆªé™¤é …ç›®" +msgid "Repair authentication" +msgstr "" + msgid "Repository" msgstr "å˜å„²åº«" @@ -2079,6 +2616,10 @@ msgstr "é‡ç½®å¥åº·æª¢æŸ¥è¨ªå•ä»¤ç‰Œ" msgid "Reset runners registration token" msgstr "é‡ç½® Runner 註冊令牌" +msgid "Reveal value" +msgid_plural "Reveal values" +msgstr[0] "" + msgid "Revert this commit" msgstr "還原æ¤æ交" @@ -2088,15 +2629,15 @@ msgstr "還原æ¤åˆä½µè«‹æ±‚" msgid "SSH Keys" msgstr "" -msgid "Save" -msgstr "" - msgid "Save changes" msgstr "" msgid "Save pipeline schedule" msgstr "ä¿å˜æµæ°´ç·šè¨ˆåŠƒ" +msgid "Save variables" +msgstr "" + msgid "Schedule a new pipeline" msgstr "新建æµæ°´ç·šè¨ˆåŠƒ" @@ -2112,38 +2653,59 @@ msgstr "" msgid "Search branches and tags" msgstr "æœç´¢åˆ†æ”¯å’Œæ¨™ç±¤" -msgid "Seconds before reseting failure information" +msgid "Search milestones" msgstr "" -msgid "Seconds to wait after a storage failure" +msgid "Search project" +msgstr "" + +msgid "Search users" +msgstr "" + +msgid "Seconds before reseting failure information" msgstr "" msgid "Seconds to wait for a storage access attempt" msgstr "" +msgid "Secret variables" +msgstr "" + msgid "Select Archive Format" msgstr "é¸æ“‡ä¸‹è¼‰æ ¼å¼" msgid "Select a timezone" msgstr "é¸æ“‡æ™‚å€" +msgid "Select assignee" +msgstr "" + +msgid "Select branch/tag" +msgstr "" + msgid "Select target branch" msgstr "é¸æ“‡ç›®æ¨™åˆ†æ”¯" +msgid "Selective synchronization" +msgstr "" + msgid "Sep" msgstr "" msgid "September" msgstr "" +msgid "Server version" +msgstr "" + msgid "Service Templates" msgstr "" msgid "Set a password on your account to pull or push via %{protocol}." msgstr "ç‚ºè³¬è™Ÿæ·»åŠ å£¹å€‹ç”¨æ–¼æŽ¨é€æˆ–拉å–çš„ %{protocol} 密碼。" -msgid "Set up CI" -msgstr "è¨ç½® CI" +msgid "Set up CI/CD" +msgstr "" msgid "Set up Koding" msgstr "è¨ç½® Koding" @@ -2157,6 +2719,15 @@ msgstr "è¨ç½®å¯†ç¢¼" msgid "Settings" msgstr "" +msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero." +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset pipeline minutes" +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset used pipeline minutes" +msgstr "" + msgid "Show parent pages" msgstr "" @@ -2170,9 +2741,6 @@ msgstr[0] "顯示 %d 個事件" msgid "Sidebar|Change weight" msgstr "" -msgid "Sidebar|Edit" -msgstr "" - msgid "Sidebar|No" msgstr "" @@ -2185,18 +2753,30 @@ msgstr "" msgid "Snippets" msgstr "" +msgid "Something went wrong on our end" +msgstr "" + msgid "Something went wrong on our end." msgstr "" +msgid "Something went wrong trying to change the confidentiality of this issue" +msgstr "" + msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}" msgstr "" +msgid "Something went wrong when toggling the button" +msgstr "" + msgid "Something went wrong while fetching the projects." msgstr "" msgid "Something went wrong while fetching the registry list." msgstr "" +msgid "Something went wrong. Please try again." +msgstr "" + msgid "Sort by" msgstr "" @@ -2326,10 +2906,10 @@ msgstr "é‹ä½œ Runner!" msgid "Stopped" msgstr "" -msgid "Subgroups" +msgid "Storage" msgstr "" -msgid "Subscribe" +msgid "Subgroups" msgstr "" msgid "Switch branch/tag" @@ -2426,7 +3006,10 @@ msgstr "" msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project." msgstr "" -msgid "The circuitbreaker backoff threshold should be lower than the failure count threshold" +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project" +msgstr "" + +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project." msgstr "" msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request." @@ -2441,10 +3024,10 @@ msgstr "派生關係已被刪除。" msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage." msgstr "è°é¡ŒéšŽæ®µæ¦‚述了從創建è°é¡Œåˆ°å°‡è°é¡Œæ·»åŠ 到è£ç¨‹ç¢‘或è°é¡Œçœ‹æ¿æ‰€èŠ±è²»çš„時間。創建第壹個è°é¡Œå¾Œï¼Œæ•¸æ“šå°‡è‡ªå‹•æ·»åŠ 到æ¤è™•.。" -msgid "The number of attempts GitLab will make to access a storage." +msgid "The maximum file size allowed is 200KB." msgstr "" -msgid "The number of failures after which GitLab will start temporarily disabling access to a storage shard on a host" +msgid "The number of attempts GitLab will make to access a storage." msgstr "" msgid "The number of failures of after which GitLab will completely prevent access to the storage. The number of failures can be reset in the admin interface: %{link_to_health_page} or using the %{api_documentation_link}." @@ -2453,9 +3036,6 @@ msgstr "" msgid "The phase of the development lifecycle." msgstr "é …ç›®ç”Ÿå‘½é€±æœŸä¸çš„å„個階段。" -msgid "The pipelines schedule runs pipelines in the future, repeatedly, for specific branches or tags. Those scheduled pipelines will inherit limited project access based on their associated user." -msgstr "æµæ°´ç·šè¨ˆåŠƒæœƒé€±æœŸæ€§é‡è¤‡é‹è¡ŒæŒ‡å®šåˆ†æ”¯æˆ–標籤的æµæ°´ç·šã€‚這些æµæ°´ç·šå°‡æ ¹æ“šå…¶é—œè¯ç”¨æˆ¶ç¹¼æ‰¿æœ‰é™çš„é …ç›®è¨ªå•æ¬Šé™ã€‚" - msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit." msgstr "計劃階段概述了從è°é¡Œæ·»åŠ 到日程到推é€é¦–次æ交的時間。當首次推é€æäº¤å¾Œï¼Œæ•¸æ“šå°‡è‡ªå‹•æ·»åŠ åˆ°æ¤è™•ã€‚" @@ -2486,19 +3066,46 @@ msgstr "" msgid "The time in seconds GitLab will try to access storage. After this time a timeout error will be raised." msgstr "" +msgid "The time in seconds between storage checks. When a previous check did complete yet, GitLab will skip a check." +msgstr "" + msgid "The time taken by each data entry gathered by that stage." msgstr "該階段æ¯æ¢æ•¸æ“šæ‰€èŠ±çš„時間" msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6." msgstr "ä¸ä½æ•¸æ˜¯å£¹å€‹æ•¸åˆ—ä¸æœ€ä¸é–“的值。例如在 3ã€5ã€9 之間,ä¸ä½æ•¸æ˜¯ 5。在 3ã€5ã€7ã€8 之間,ä¸ä½æ•¸æ˜¯ (5 + 7)/ 2 = 6。" +msgid "There are no issues to show" +msgstr "" + +msgid "There are no merge requests to show" +msgstr "" + msgid "There are problems accessing Git storage: " msgstr "è¨ªå• Git å˜å„²æ™‚出ç¾å•é¡Œï¼š" +msgid "There was an error loading users activity calendar." +msgstr "" + +msgid "There was an error saving your notification settings." +msgstr "" + +msgid "There was an error subscribing to this label." +msgstr "" + +msgid "There was an error when reseting email token." +msgstr "" + +msgid "There was an error when subscribing to this label." +msgstr "" + +msgid "There was an error when unsubscribing from this label." +msgstr "" + msgid "This board\\'s scope is reduced" msgstr "" -msgid "This branch has changed since you started editing. Would you like to create a new branch?" +msgid "This directory" msgstr "" msgid "This is a confidential issue." @@ -2507,18 +3114,45 @@ msgstr "" msgid "This is the author's first Merge Request to this project." msgstr "" +msgid "This issue is confidential" +msgstr "" + msgid "This issue is confidential and locked." msgstr "" msgid "This issue is locked." msgstr "" +msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments" +msgstr "" + +msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered" +msgstr "" + +msgid "This job has not been triggered yet" +msgstr "" + +msgid "This job has not started yet" +msgstr "" + +msgid "This job is in pending state and is waiting to be picked by a runner" +msgstr "" + +msgid "This job requires a manual action" +msgstr "" + msgid "This means you can not push code until you create an empty repository or import existing one." msgstr "在創建壹個空的å˜å„²åº«æˆ–å°Žå…¥ç¾æœ‰å˜å„²åº«ä¹‹å‰ï¼Œæ‚¨å°‡ç„¡æ³•æŽ¨é€ä»£ç¢¼ã€‚" msgid "This merge request is locked." msgstr "" +msgid "This project" +msgstr "" + +msgid "This repository" +msgstr "" + msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here." msgstr "" @@ -2531,9 +3165,21 @@ msgstr "開始進行編碼å‰çš„時間" msgid "Time between merge request creation and merge/close" msgstr "從創建åˆä½µè«‹æ±‚到被åˆä½µæˆ–關閉的時間" +msgid "Time tracking" +msgstr "" + msgid "Time until first merge request" msgstr "創建第壹個åˆä½µè«‹æ±‚之å‰çš„時間" +msgid "TimeTrackingEstimated|Est" +msgstr "" + +msgid "TimeTracking|Estimated:" +msgstr "" + +msgid "TimeTracking|Spent" +msgstr "" + msgid "Timeago|%s days ago" msgstr " %s 天å‰" @@ -2671,6 +3317,18 @@ msgstr "秒" msgid "Title" msgstr "" +msgid "Todo" +msgstr "" + +msgid "Toggle sidebar" +msgstr "" + +msgid "ToggleButton|Toggle Status: OFF" +msgstr "" + +msgid "ToggleButton|Toggle Status: ON" +msgstr "" + msgid "Total Time" msgstr "總時間" @@ -2686,19 +3344,40 @@ msgstr "" msgid "Track groups of issues that share a theme, across projects and milestones" msgstr "" +msgid "Total: %{total}" +msgstr "" + +msgid "Track time with quick actions" +msgstr "" + +msgid "Trigger this manual action" +msgstr "" + msgid "Turn on Service Desk" msgstr "" +msgid "Type %{value} to confirm:" +msgstr "" + +msgid "Unable to reset project cache." +msgstr "" + +msgid "Unknown" +msgstr "" + msgid "Unlock" msgstr "" +msgid "Unlock this %{issuableDisplayName}? <strong>Everyone</strong> will be able to comment." +msgstr "" + msgid "Unlocked" msgstr "" msgid "Unstar" msgstr "å–消星標" -msgid "Unsubscribe" +msgid "Up to date" msgstr "" msgid "Upgrade your plan to activate Advanced Global Search." @@ -2722,6 +3401,9 @@ msgstr "上傳新文件" msgid "Upload file" msgstr "上傳文件" +msgid "Upload new avatar" +msgstr "" + msgid "UploadLink|click to upload" msgstr "點擊上傳" @@ -2734,9 +3416,15 @@ msgstr "在安è£éŽç¨‹ä¸ä½¿ç”¨ä»¥ä¸‹è¨»å†Šä»¤ç‰Œï¼š" msgid "Use your global notification setting" msgstr "使用全局通知è¨ç½®" +msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want." +msgstr "" + msgid "View file @ " msgstr "" +msgid "View labels" +msgstr "" + msgid "View open merge request" msgstr "查看開啟的åˆä¸¦è«‹æ±‚" @@ -2758,6 +3446,9 @@ msgstr "未知" msgid "Want to see the data? Please ask an administrator for access." msgstr "權é™ä¸è¶³ã€‚如需查看相關數據,請å‘管ç†å“¡ç”³è«‹æ¬Šé™ã€‚" +msgid "We could not verify that one of your projects on GCP has billing enabled. Please try again." +msgstr "" + msgid "We don't have enough data to show this stage." msgstr "該階段的數據ä¸è¶³ï¼Œç„¡æ³•é¡¯ç¤ºã€‚" @@ -2770,9 +3461,6 @@ msgstr "" msgid "Weight" msgstr "" -msgid "When access to a storage fails. GitLab will prevent access to the storage for the time specified here. This allows the filesystem to recover. Repositories on failing shards are temporarly unavailable" -msgstr "" - msgid "Wiki" msgstr "" @@ -2791,6 +3479,12 @@ msgstr "" msgid "WikiClone|Start Gollum and edit locally" msgstr "" +msgid "WikiEditPageTip|Tip: You can move this page by adding the path to the beginning of the title." +msgstr "" + +msgid "WikiEdit|There is already a page with the same title in that path." +msgstr "" + msgid "WikiEmptyPageError|You are not allowed to create wiki pages" msgstr "" @@ -2893,9 +3587,21 @@ msgstr "å³å°‡åˆªé™¤èˆ‡æºé …ç›® %{forked_from_project} 的派生關系。確定 msgid "You are going to transfer %{project_name_with_namespace} to another owner. Are you ABSOLUTELY sure?" msgstr "å³å°‡ %{project_name_with_namespace} 轉義給å¦å£¹å€‹æ‰€æœ‰è€…。確定繼續嗎?" +msgid "You can also star a label to make it a priority label." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + msgid "You can only add files when you are on a branch" msgstr "åªèƒ½åœ¨åˆ†æ”¯ä¸Šæ·»åŠ 文件" +msgid "You can only edit files when you are on a branch" +msgstr "" + msgid "You cannot write to a read-only secondary GitLab Geo instance. Please use %{link_to_primary_node} instead." msgstr "" @@ -2935,6 +3641,12 @@ msgstr "åœ¨è³¬è™Ÿä¸ %{add_ssh_key_link} 之å‰å°‡ç„¡æ³•é€šéŽ SSH 拉å–或推é msgid "You won't be able to pull or push project code via SSH until you add an SSH key to your profile" msgstr "" +msgid "You'll need to use different branch names to get a valid comparison." +msgstr "" + +msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure" +msgstr "" + msgid "Your comment will not be visible to the public." msgstr "" @@ -2947,25 +3659,218 @@ msgstr "您的åå—" msgid "Your projects" msgstr "" +msgid "assign yourself" +msgstr "" + msgid "branch name" msgstr "" msgid "by" msgstr "" +msgid "ciReport|Code quality" +msgstr "" + +msgid "ciReport|DAST detected no alerts by analyzing the review app" +msgstr "" + +msgid "ciReport|Failed to load ${type} report" +msgstr "" + +msgid "ciReport|Fixed:" +msgstr "" + +msgid "ciReport|Instances" +msgstr "" + +msgid "ciReport|Learn more about whitelisting" +msgstr "" + +msgid "ciReport|Loading ${type} report" +msgstr "" + +msgid "ciReport|No changes to code quality" +msgstr "" + +msgid "ciReport|No changes to performance metrics" +msgstr "" + +msgid "ciReport|Performance metrics" +msgstr "" + +msgid "ciReport|SAST" +msgstr "" + +msgid "ciReport|SAST detected no security vulnerabilities" +msgstr "" + +msgid "ciReport|SAST:container no vulnerabilities were found" +msgstr "" + +msgid "ciReport|Show complete code vulnerabilities report" +msgstr "" + +msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}" +msgstr "" + msgid "commit" msgstr "" +msgid "confidentiality|You are going to turn off the confidentiality. This means <strong>everyone</strong> will be able to see and leave a comment on this issue." +msgstr "" + +msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with <strong>at least Reporter access</strong> are able to see and leave comments on the issue." +msgstr "" + msgid "day" msgid_plural "days" msgstr[0] "天" +msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command." +msgstr "" + +msgid "merge request" +msgid_plural "merge requests" +msgstr[0] "" + +msgid "mrWidget|Cancel automatic merge" +msgstr "" + +msgid "mrWidget|Check out branch" +msgstr "" + +msgid "mrWidget|Checking ability to merge automatically" +msgstr "" + +msgid "mrWidget|Cherry-pick" +msgstr "" + +msgid "mrWidget|Cherry-pick this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Closed" +msgstr "" + +msgid "mrWidget|Closed by" +msgstr "" + +msgid "mrWidget|Closes" +msgstr "" + +msgid "mrWidget|Did not close" +msgstr "" + +msgid "mrWidget|Email patches" +msgstr "" + +msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|Mentions" +msgstr "" + +msgid "mrWidget|Merge" +msgstr "" + +msgid "mrWidget|Merge failed." +msgstr "" + +msgid "mrWidget|Merge locally" +msgstr "" + +msgid "mrWidget|Merged by" +msgstr "" + +msgid "mrWidget|Plain diff" +msgstr "" + +msgid "mrWidget|Refresh" +msgstr "" + +msgid "mrWidget|Refresh now" +msgstr "" + +msgid "mrWidget|Refreshing now" +msgstr "" + +msgid "mrWidget|Remove Source Branch" +msgstr "" + +msgid "mrWidget|Remove source branch" +msgstr "" + +msgid "mrWidget|Request to merge" +msgstr "" + +msgid "mrWidget|Resolve conflicts" +msgstr "" + +msgid "mrWidget|Revert" +msgstr "" + +msgid "mrWidget|Revert this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Set by" +msgstr "" + +msgid "mrWidget|The changes were merged into" +msgstr "" + +msgid "mrWidget|The changes were not merged into" +msgstr "" + +msgid "mrWidget|The changes will be merged into" +msgstr "" + +msgid "mrWidget|The source branch has been removed" +msgstr "" + +msgid "mrWidget|The source branch is being removed" +msgstr "" + +msgid "mrWidget|The source branch will be removed" +msgstr "" + +msgid "mrWidget|The source branch will not be removed" +msgstr "" + +msgid "mrWidget|There are merge conflicts" +msgstr "" + +msgid "mrWidget|This merge request failed to be merged automatically" +msgstr "" + +msgid "mrWidget|This merge request is in the process of being merged" +msgstr "" + +msgid "mrWidget|This project is archived, write access has been disabled" +msgstr "" + +msgid "mrWidget|You can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|You can remove source branch now" +msgstr "" + +msgid "mrWidget|command line" +msgstr "" + +msgid "mrWidget|into" +msgstr "" + +msgid "mrWidget|to be merged automatically when the pipeline succeeds" +msgstr "" + msgid "new merge request" msgstr "新建åˆä½µè«‹æ±‚" msgid "notification emails" msgstr "通知郵件" +msgid "or" +msgstr "" + msgid "parent" msgid_plural "parents" msgstr[0] "父級" @@ -2976,12 +3881,21 @@ msgstr "" msgid "personal access token" msgstr "" +msgid "remove due date" +msgstr "" + msgid "source" msgstr "" +msgid "spendCommand|%{slash_command} will update the sum of the time spent." +msgstr "" + msgid "to help your contributors communicate effectively!" msgstr "" msgid "username" msgstr "" +msgid "uses Kubernetes clusters to deploy your code!" +msgstr "" + diff --git a/locale/zh_TW/gitlab.po b/locale/zh_TW/gitlab.po index 14bc24c0e08..635f5c6c449 100644 --- a/locale/zh_TW/gitlab.po +++ b/locale/zh_TW/gitlab.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: gitlab-ee\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-12-12 18:31+0000\n" -"PO-Revision-Date: 2018-01-05 04:42-0500\n" +"POT-Creation-Date: 2018-02-07 11:38-0600\n" +"PO-Revision-Date: 2018-02-12 03:58-0500\n" "Last-Translator: gitlab <mbartlett+crowdin@gitlab.com>\n" "Language-Team: Chinese Traditional\n" "Language: zh_TW\n" @@ -16,20 +16,35 @@ msgstr "" "X-Crowdin-Language: zh-TW\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" +msgid " and" +msgstr "" + msgid "%d commit" msgid_plural "%d commits" msgstr[0] "%d 個更動 (commit)" +msgid "%d commit behind" +msgid_plural "%d commits behind" +msgstr[0] "" + +msgid "%d issue" +msgid_plural "%d issues" +msgstr[0] "" + msgid "%d layer" msgid_plural "%d layers" msgstr[0] "%d 個圖層" +msgid "%d merge request" +msgid_plural "%d merge requests" +msgstr[0] "" + msgid "%s additional commit has been omitted to prevent performance issues." msgid_plural "%s additional commits have been omitted to prevent performance issues." msgstr[0] "å› æ•ˆèƒ½è€ƒé‡ï¼Œå·²éš±è— %s 個更動 (commit)。" -msgid "%{commit_author_link} committed %{commit_timeago}" -msgstr "%{commit_author_link} 在 %{commit_timeago} é€äº¤" +msgid "%{commit_author_link} authored %{commit_timeago}" +msgstr "" msgid "%{count} participant" msgid_plural "%{count} participants" @@ -41,9 +56,6 @@ msgstr "" msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt." msgstr "ç›®å‰å·²å¤±æ•— %{number_of_failures} 次。GitLab å…許在 %{maximum_failures} 次之內å¯å†å˜—è©¦è®€å– ã€‚" -msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will block access for %{number_of_seconds} seconds." -msgstr "已失敗 %{number_of_failures} 次,在失敗 %{maximum_failures} æ¬¡å‰ GitLab 會在 %{number_of_seconds} 秒後é‡è©¦ã€‚" - msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will not retry automatically. Reset storage information when the problem is resolved." msgstr "已失敗 %{number_of_failures} / %{maximum_failures} 次,GitLab å°‡ä¸å†è‡ªå‹•é‡è©¦ã€‚請在確èªå•é¡Œè§£æ±ºå¾Œæ‰‹å‹•é‡ç½®å„²å˜ç©ºé–“資訊。" @@ -115,24 +127,81 @@ msgstr "新增授權æ¢æ¬¾" msgid "Add new directory" msgstr "新增目錄" +msgid "Add todo" +msgstr "" + +msgid "AdminArea|Stop all jobs" +msgstr "" + +msgid "AdminArea|Stop all jobs?" +msgstr "" + +msgid "AdminArea|Stop jobs" +msgstr "" + +msgid "AdminArea|Stopping jobs failed" +msgstr "" + +msgid "AdminArea|You’re about to stop all jobs. This will halt all current jobs that are running." +msgstr "" + msgid "AdminHealthPageLink|health page" msgstr "系統狀態" +msgid "Advanced" +msgstr "" + msgid "Advanced settings" msgstr "進階è¨å®š" msgid "All" msgstr "全部" +msgid "All changes are committed" +msgstr "" + +msgid "Allows you to add and manage Kubernetes clusters." +msgstr "" + +msgid "An error occurred previewing the blob" +msgstr "" + msgid "An error occurred when toggling the notification subscription" msgstr "" msgid "An error occurred when updating the issue weight" msgstr "" +msgid "An error occurred while dismissing the feature highlight. Refresh the page and try dismissing again." +msgstr "" + +msgid "An error occurred while fetching markdown preview" +msgstr "" + msgid "An error occurred while fetching sidebar data" msgstr "" +msgid "An error occurred while getting projects" +msgstr "" + +msgid "An error occurred while loading filenames" +msgstr "" + +msgid "An error occurred while rendering KaTeX" +msgstr "" + +msgid "An error occurred while rendering preview broadcast message" +msgstr "" + +msgid "An error occurred while retrieving calendar activity" +msgstr "" + +msgid "An error occurred while retrieving diff" +msgstr "" + +msgid "An error occurred while validating username" +msgstr "" + msgid "An error occurred. Please try again." msgstr "發生錯誤,請å†è©¦ä¸€æ¬¡ã€‚" @@ -157,9 +226,6 @@ msgstr "確定è¦åˆªé™¤æ¤æµæ°´ç·š (pipeline) 排程嗎?" msgid "Are you sure you want to discard your changes?" msgstr "確定è¦æ”¾æ£„修改嗎?" -msgid "Are you sure you want to leave this group?" -msgstr "確定è¦é›¢é–‹é€™å€‹ç¾¤çµ„嗎?" - msgid "Are you sure you want to reset registration token?" msgstr "確定è¦é‡ç½®è¨»å†Šæ†‘è‰ (registration token) 嗎?" @@ -172,6 +238,21 @@ msgstr "確定嗎?" msgid "Artifacts" msgstr "" +msgid "Assign custom color like #FF0000" +msgstr "" + +msgid "Assign labels" +msgstr "" + +msgid "Assign milestone" +msgstr "" + +msgid "Assign to" +msgstr "" + +msgid "Assignee" +msgstr "" + msgid "Attach a file by drag & drop or %{upload_link}" msgstr "拖放檔案到æ¤è™•æˆ–者 %{upload_link}" @@ -187,15 +268,18 @@ msgstr "登入紀錄" msgid "Author" msgstr "作者" -msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly." -msgstr "自動複閱應用 (review apps) 與自動部署需è¦ç¶²åŸŸå’Œ %{kubernetes} æ‰èƒ½é‹ä½œã€‚" +msgid "Authors: %{authors}" +msgstr "" + +msgid "Auto Review Apps and Auto Deploy need a %{kubernetes} to work correctly." +msgstr "" + +msgid "Auto Review Apps and Auto Deploy need a domain name and a %{kubernetes} to work correctly." +msgstr "" msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly." msgstr "自動複閱應用 (review apps) 與自動部署需è¦ç¶²åŸŸæ‰èƒ½é‹ä½œã€‚" -msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly." -msgstr "自動複閱應用 (review apps) èˆ‡è‡ªå‹•éƒ¨ç½²éœ€è¦ %{kubernetes} æ‰èƒ½é‹ä½œã€‚" - msgid "AutoDevOps|Auto DevOps (Beta)" msgstr "DevOps 自動化(beta)" @@ -217,6 +301,12 @@ msgstr "ä½ å¯ä»¥ç‚ºæ¤å°ˆæ¡ˆå•Ÿå‹• %{link_to_settings}" msgid "Available" msgstr "" +msgid "Avatar will be removed. Are you sure?" +msgstr "" + +msgid "Average per day: %{average}" +msgstr "" + msgid "Billing" msgstr "" @@ -271,6 +361,9 @@ msgstr "" msgid "BillingPlans|per user" msgstr "" +msgid "Begin with the selected commit" +msgstr "" + msgid "Branch" msgid_plural "Branches" msgstr[0] "分支 (branch) " @@ -398,8 +491,8 @@ msgstr "作者:" msgid "CI / CD" msgstr "CI / CD" -msgid "CI configuration" -msgstr "CI 組態" +msgid "CI/CD configuration" +msgstr "" msgid "CICD|Jobs" msgstr "作æ¥" @@ -410,6 +503,9 @@ msgstr "å–消" msgid "Cancel edit" msgstr "å–消編輯" +msgid "Cannot modify managed Kubernetes cluster" +msgstr "" + msgid "Change Weight" msgstr "" @@ -425,15 +521,24 @@ msgstr "挑é¸" msgid "ChangeTypeAction|Revert" msgstr "還原" +msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes." +msgstr "" + msgid "Changelog" msgstr "更新日誌" +msgid "Changes are shown as if the <b>source</b> revision was being merged into the <b>target</b> revision." +msgstr "" + msgid "Charts" msgstr "統計圖" msgid "Chat" msgstr "å³æ™‚通訊" +msgid "Check interval" +msgstr "" + msgid "Checking %{text} availability…" msgstr "" @@ -446,7 +551,19 @@ msgstr "挑é¸æ¤æ›´å‹•è¨˜éŒ„ (commit) " msgid "Cherry-pick this merge request" msgstr "挑é¸æ¤åˆä½µè«‹æ±‚ (merge request) " -msgid "Choose which groups you wish to replicate to this secondary node. Leave blank to replicate all." +msgid "Choose File ..." +msgstr "" + +msgid "Choose a branch/tag (e.g. %{master}) or enter a commit (e.g. %{sha}) to see what's changed or to create a merge request." +msgstr "" + +msgid "Choose file..." +msgstr "" + +msgid "Choose which groups you wish to synchronize to this secondary node." +msgstr "" + +msgid "Choose which shards you wish to synchronize to this secondary node." msgstr "" msgid "CiStatusLabel|canceled" @@ -503,79 +620,91 @@ msgstr "已略éŽ" msgid "CiStatus|running" msgstr "執行ä¸" -msgid "CircuitBreakerApiLink|circuitbreaker api" -msgstr "斷路器 (circuitbreaker) API" +msgid "CiVariables|Input variable key" +msgstr "" -msgid "Clone repository" -msgstr "複製(clone)檔案庫(repository)" +msgid "CiVariables|Input variable value" +msgstr "" -msgid "Close" +msgid "CiVariables|Remove variable row" msgstr "" -msgid "Cluster" -msgstr "å¢é›†" +msgid "CiVariable|* (All environments)" +msgstr "" -msgid "ClusterIntegration|%{appList} was successfully installed on your cluster" +msgid "CiVariable|All environments" msgstr "" -msgid "ClusterIntegration|%{boldNotice} This will add some extra resources like a load balancer, which incur additional costs. See %{pricingLink}" +msgid "CiVariable|Create wildcard" msgstr "" -msgid "ClusterIntegration|API URL" +msgid "CiVariable|Error occured while saving variables" msgstr "" -msgid "ClusterIntegration|Active" +msgid "CiVariable|New environment" msgstr "" -msgid "ClusterIntegration|Add an existing cluster" +msgid "CiVariable|Protected" msgstr "" -msgid "ClusterIntegration|Add cluster" +msgid "CiVariable|Search environments" msgstr "" -msgid "ClusterIntegration|All" +msgid "CiVariable|Toggle protected" msgstr "" -msgid "ClusterIntegration|Applications" +msgid "CiVariable|Validation failed" msgstr "" -msgid "ClusterIntegration|CA Certificate" +msgid "CircuitBreakerApiLink|circuitbreaker api" +msgstr "斷路器 (circuitbreaker) API" + +msgid "Click to expand text" msgstr "" -msgid "ClusterIntegration|Certificate Authority bundle (PEM format)" +msgid "Clone repository" +msgstr "複製(clone)檔案庫(repository)" + +msgid "Close" msgstr "" -msgid "ClusterIntegration|Choose how to set up cluster integration" +msgid "Closed" msgstr "" -msgid "ClusterIntegration|Cluster" +msgid "ClusterIntegration|%{appList} was successfully installed on your Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Cluster details" -msgstr "å¢é›†è©³æƒ…" +msgid "ClusterIntegration|API URL" +msgstr "" -msgid "ClusterIntegration|Cluster integration" -msgstr "å¢é›†æ•´åˆ" +msgid "ClusterIntegration|Add Kubernetes cluster" +msgstr "" -msgid "ClusterIntegration|Cluster integration is disabled for this project." -msgstr "æ¤å°ˆæ¡ˆå·²ç¶“ç¦ç”¨å¢é›†æ•´åˆ" +msgid "ClusterIntegration|Add an existing Kubernetes cluster" +msgstr "" + +msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration" +msgstr "" + +msgid "ClusterIntegration|Applications" +msgstr "" -msgid "ClusterIntegration|Cluster integration is enabled for this project." -msgstr "æ¤å°ˆæ¡ˆå·²ç¶“啟用å¢é›†æ•´åˆ" +msgid "ClusterIntegration|Are you sure you want to remove this Kubernetes cluster's integration? This will not delete your actual Kubernetes cluster." +msgstr "" -msgid "ClusterIntegration|Cluster integration is enabled for this project. Disabling this integration will not affect your cluster, it will only temporarily turn off GitLab's connection to it." -msgstr "æ¤å°ˆæ¡ˆå·²å•Ÿç”¨å¢é›†æ•´åˆã€‚ç¦æ¢å¢é›†æ•´åˆä¸æœƒå½±éŸ¿æ‚¨çš„å¢é›†ï¼Œå®ƒåªæ˜¯æš«æ™‚關閉 GitLab 的連接。" +msgid "ClusterIntegration|CA Certificate" +msgstr "" -msgid "ClusterIntegration|Cluster is being created on Google Kubernetes Engine..." +msgid "ClusterIntegration|Certificate Authority bundle (PEM format)" msgstr "" -msgid "ClusterIntegration|Cluster name" -msgstr "å¢é›†å稱" +msgid "ClusterIntegration|Choose how to set up Kubernetes cluster integration" +msgstr "" -msgid "ClusterIntegration|Cluster was successfully created on Google Kubernetes Engine. Refresh the page to see cluster's details" +msgid "ClusterIntegration|Choose which of your project's environments will use this Kubernetes cluster." msgstr "" -msgid "ClusterIntegration|Clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" +msgid "ClusterIntegration|Control how your Kubernetes cluster integrates with GitLab" msgstr "" msgid "ClusterIntegration|Copy API URL" @@ -584,37 +713,34 @@ msgstr "" msgid "ClusterIntegration|Copy CA Certificate" msgstr "" -msgid "ClusterIntegration|Copy Token" +msgid "ClusterIntegration|Copy Kubernetes cluster name" msgstr "" -msgid "ClusterIntegration|Copy cluster name" -msgstr "複製å¢é›†å稱" +msgid "ClusterIntegration|Copy Token" +msgstr "" -msgid "ClusterIntegration|Create a new cluster on Google Engine right from GitLab" +msgid "ClusterIntegration|Create Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Create cluster" -msgstr "建立å¢é›†" +msgid "ClusterIntegration|Create Kubernetes cluster on Google Kubernetes Engine" +msgstr "" -msgid "ClusterIntegration|Create cluster on Google Kubernetes Engine" +msgid "ClusterIntegration|Create a new Kubernetes cluster on Google Kubernetes Engine right from GitLab" msgstr "" msgid "ClusterIntegration|Create on GKE" msgstr "" -msgid "ClusterIntegration|Enable cluster integration" -msgstr "å•Ÿå‹•å¢é›†æ•´åˆ" - msgid "ClusterIntegration|Enter the details for an existing Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Enter the details for your cluster" +msgid "ClusterIntegration|Enter the details for your Kubernetes cluster" msgstr "" -msgid "ClusterIntegration|Environment pattern" +msgid "ClusterIntegration|Environment scope" msgstr "" -msgid "ClusterIntegration|GKE pricing" +msgid "ClusterIntegration|GitLab Integration" msgstr "" msgid "ClusterIntegration|GitLab Runner" @@ -632,46 +758,82 @@ msgstr "" msgid "ClusterIntegration|Helm Tiller" msgstr "" -msgid "ClusterIntegration|Inactive" -msgstr "" - msgid "ClusterIntegration|Ingress" msgstr "" msgid "ClusterIntegration|Install" msgstr "" -msgid "ClusterIntegration|Install applications on your cluster. Read more about %{helpLink}" -msgstr "" - msgid "ClusterIntegration|Installed" msgstr "" msgid "ClusterIntegration|Installing" msgstr "" -msgid "ClusterIntegration|Integrate cluster automation" +msgid "ClusterIntegration|Integrate Kubernetes cluster automation" +msgstr "" + +msgid "ClusterIntegration|Integration status" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster details" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is disabled for this project." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster integration is enabled for this project. Disabling this integration will not affect your Kubernetes cluster, it will only temporarily turn off GitLab's connection to it." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster is being created on Google Kubernetes Engine..." +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster name" +msgstr "" + +msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way. %{link_to_help_page}" +msgstr "" + +msgid "ClusterIntegration|Kubernetes clusters can be used to deploy applications and to provide Review Apps for this project" msgstr "" msgid "ClusterIntegration|Learn more about %{link_to_documentation}" msgstr "å¸ç¿’更多有關於%{link_to_documentation}" -msgid "ClusterIntegration|Learn more about Clusters" +msgid "ClusterIntegration|Learn more about Kubernetes" +msgstr "" + +msgid "ClusterIntegration|Learn more about environments" msgstr "" msgid "ClusterIntegration|Machine type" msgstr "機器型別" -msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create clusters" -msgstr "請確èªæ‚¨çš„帳戶ä¸%{link_to_requirements} 是å¦å»ºç«‹å¢é›†" +msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create Kubernetes clusters" +msgstr "" -msgid "ClusterIntegration|Manage cluster integration on your GitLab project" +msgid "ClusterIntegration|Manage" msgstr "" -msgid "ClusterIntegration|Manage your cluster by visiting %{link_gke}" -msgstr "請至 %{link_gke} 管ç†ä½ çš„å¢é›†" +msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}" +msgstr "" -msgid "ClusterIntegration|Multiple clusters are available in GitLab Entreprise Edition Premium and Ultimate" +msgid "ClusterIntegration|More information" +msgstr "" + +msgid "ClusterIntegration|Multiple Kubernetes clusters are available in GitLab Enterprise Edition Premium and Ultimate" msgstr "" msgid "ClusterIntegration|Note:" @@ -680,18 +842,12 @@ msgstr "" msgid "ClusterIntegration|Number of nodes" msgstr "所有的端點數é‡" -msgid "ClusterIntegration|Please enter access information for your cluster. If you need help, you can read our %{link_to_help_page} on clusters" +msgid "ClusterIntegration|Please enter access information for your Kubernetes cluster. If you need help, you can read our %{link_to_help_page} on Kubernetes" msgstr "" msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:" msgstr "請確èªä½ çš„ Google 帳號是å¦ç¬¦åˆé€™äº›æ¢ä»¶" -msgid "ClusterIntegration|Problem setting up the cluster" -msgstr "" - -msgid "ClusterIntegration|Problem setting up the clusters list" -msgstr "" - msgid "ClusterIntegration|Project ID" msgstr "" @@ -701,16 +857,19 @@ msgstr "" msgid "ClusterIntegration|Project namespace (optional, unique)" msgstr "專案命å空間(é¸å¡«ï¼Œä¸å¯é‡è¤‡ï¼‰" -msgid "ClusterIntegration|Read our %{link_to_help_page} on cluster integration." +msgid "ClusterIntegration|Prometheus" msgstr "" -msgid "ClusterIntegration|Remove cluster integration" -msgstr "刪除å¢é›†æ•´åˆ" +msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration." +msgstr "" + +msgid "ClusterIntegration|Remove Kubernetes cluster integration" +msgstr "" msgid "ClusterIntegration|Remove integration" msgstr "刪除整åˆ" -msgid "ClusterIntegration|Removing cluster integration will remove the cluster configuration you have added to this project. It will not delete your cluster on Google Kubernetes Engine." +msgid "ClusterIntegration|Remove this Kubernetes cluster's configuration from this project. This will not delete your actual Kubernetes cluster." msgstr "" msgid "ClusterIntegration|Request to begin installing failed" @@ -719,8 +878,8 @@ msgstr "" msgid "ClusterIntegration|Save changes" msgstr "" -msgid "ClusterIntegration|See and edit the details for your cluster" -msgstr "æŸ¥çœ‹èˆ‡ç·¨è¼¯ä½ çš„å¢é›†å…§å®¹" +msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster" +msgstr "" msgid "ClusterIntegration|See machine types" msgstr "查看機器型別" @@ -740,26 +899,26 @@ msgstr "" msgid "ClusterIntegration|Something went wrong on our end." msgstr "內部發生了錯誤" -msgid "ClusterIntegration|Something went wrong while creating your cluster on Google Kubernetes Engine" +msgid "ClusterIntegration|Something went wrong while creating your Kubernetes cluster on Google Kubernetes Engine" msgstr "" msgid "ClusterIntegration|Something went wrong while installing %{title}" msgstr "" -msgid "ClusterIntegration|There are no clusters to show" +msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below" msgstr "" -msgid "ClusterIntegration|This account must have permissions to create a cluster in the %{link_to_container_project} specified below" +msgid "ClusterIntegration|Toggle Kubernetes Cluster" msgstr "" -msgid "ClusterIntegration|Toggle Cluster" -msgstr "å¢é›†é–‹é—œ" +msgid "ClusterIntegration|Toggle Kubernetes cluster" +msgstr "" msgid "ClusterIntegration|Token" msgstr "" -msgid "ClusterIntegration|With a cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." -msgstr "當å¢é›†é€£çµåˆ°æ¤å°ˆæ¡ˆï¼Œä½ å¯ä»¥ä½¿ç”¨è¤‡é–±æ‡‰ç”¨ (review apps)ï¼Œéƒ¨ç½²ä½ çš„æ‡‰ç”¨ç¨‹å¼ï¼ŒåŸ·è¡Œä½ çš„æµæ°´ç·š (pipelines),還有更多容易上手的方å¼å¯ä»¥ä½¿ç”¨ã€‚" +msgid "ClusterIntegration|With a Kubernetes cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way." +msgstr "" msgid "ClusterIntegration|Your account must have %{link_to_kubernetes_engine}" msgstr "" @@ -770,8 +929,8 @@ msgstr "å€åŸŸ" msgid "ClusterIntegration|access to Google Kubernetes Engine" msgstr "" -msgid "ClusterIntegration|cluster" -msgstr "å¢é›†" +msgid "ClusterIntegration|check the pricing here" +msgstr "" msgid "ClusterIntegration|documentation" msgstr "" @@ -788,6 +947,9 @@ msgstr "符åˆéœ€æ±‚" msgid "ClusterIntegration|properly configured" msgstr "è¨å®šæ£ç¢º" +msgid "Collapse" +msgstr "" + msgid "Comments" msgstr "留言" @@ -804,6 +966,9 @@ msgstr "最近 30 次更動所花費的時間(分é˜ï¼‰" msgid "Commit message" msgstr "更動說明 (commit) " +msgid "Commit statistics for %{ref} %{start_time} - %{end_time}" +msgstr "" + msgid "CommitBoxTitle|Commit" msgstr "é€äº¤" @@ -816,15 +981,57 @@ msgstr "更動記錄 (commit) " msgid "Commits feed" msgstr "æ›´å‹•æ‘˜è¦ (commit feed)" +msgid "Commits per day hour (UTC)" +msgstr "" + +msgid "Commits per day of month" +msgstr "" + +msgid "Commits per weekday" +msgstr "" + +msgid "Commits|An error occurred while fetching merge requests data." +msgstr "" + +msgid "Commits|Commit: %{commitText}" +msgstr "" + msgid "Commits|History" msgstr "更動紀錄 (commit)" +msgid "Commits|No related merge requests found" +msgstr "" + msgid "Committed by" msgstr "é€äº¤è€…為 " msgid "Compare" msgstr "比較" +msgid "Compare Git revisions" +msgstr "" + +msgid "Compare Revisions" +msgstr "" + +msgid "CompareBranches|%{source_branch} and %{target_branch} are the same." +msgstr "" + +msgid "CompareBranches|Compare" +msgstr "" + +msgid "CompareBranches|Source" +msgstr "" + +msgid "CompareBranches|Target" +msgstr "" + +msgid "CompareBranches|There isn't anything to compare." +msgstr "" + +msgid "Confidentiality" +msgstr "" + msgid "Container Registry" msgstr "Container Registry" @@ -876,6 +1083,9 @@ msgstr "å”作指å—" msgid "Contributors" msgstr "å”作者" +msgid "ContributorsPage|%{startDate} – %{endDate}" +msgstr "" + msgid "ContributorsPage|Building repository graph." msgstr "" @@ -897,9 +1107,18 @@ msgstr "" msgid "Copy URL to clipboard" msgstr "複製網å€åˆ°å‰ªè²¼ç°¿" +msgid "Copy branch name to clipboard" +msgstr "" + msgid "Copy commit SHA to clipboard" msgstr "複製更動記錄 (commit) çš„ SHA 值到剪貼簿" +msgid "Copy reference to clipboard" +msgstr "" + +msgid "Create" +msgstr "" + msgid "Create New Directory" msgstr "建立新目錄" @@ -918,6 +1137,9 @@ msgstr "" msgid "Create file" msgstr "新增檔案" +msgid "Create lists from labels. Issues with that label appear in that list." +msgstr "" + msgid "Create merge request" msgstr "發出åˆä½µè«‹æ±‚ (merge request) " @@ -930,6 +1152,9 @@ msgstr "新增資料夾" msgid "Create new file" msgstr "新增檔案" +msgid "Create new label" +msgstr "" + msgid "Create new..." msgstr "建立..." @@ -951,6 +1176,9 @@ msgstr "Cron 時å€" msgid "Cron syntax" msgstr "Cron 語法" +msgid "Current node" +msgstr "" + msgid "Custom notification events" msgstr "自訂事件通知" @@ -960,9 +1188,6 @@ msgstr "自訂通知的ç‰ç´šèˆ‡åƒèˆ‡åº¦è¨å®šç›¸åŒã€‚ä½¿ç”¨è‡ªè¨‚é€šçŸ¥è®“ä½ msgid "Cycle Analytics" msgstr "週期分æž" -msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project." -msgstr "週期分æžè®“ä½ å¯ä»¥æœ‰æ•ˆåœ°é‡æ¸…專案從發想到產å“推出所花費的時間。" - msgid "CycleAnalyticsStage|Code" msgstr "程å¼é–‹ç™¼" @@ -1018,12 +1243,21 @@ msgstr "" msgid "Details" msgstr "細節" +msgid "Diffs|No file name available" +msgstr "" + msgid "Directory name" msgstr "目錄å稱" +msgid "Disable" +msgstr "" + msgid "Discard changes" msgstr "放棄修改" +msgid "Discover GitLab Geo." +msgstr "" + msgid "Dismiss Cycle Analytics introduction box" msgstr "關閉循環分æžä»‹ç´¹è¦–窗" @@ -1060,15 +1294,24 @@ msgstr "差異檔 (diff)" msgid "DownloadSource|Download" msgstr "下載原始碼" +msgid "Due date" +msgstr "" + msgid "Edit" msgstr "編輯" msgid "Edit Pipeline Schedule %{id}" msgstr "編輯 %{id} æµæ°´ç·š (pipeline) 排程" +msgid "Edit files in the editor and commit changes here" +msgstr "" + msgid "Emails" msgstr "é›»å郵件" +msgid "Enable" +msgstr "" + msgid "Environments|An error occurred while fetching the environments." msgstr "" @@ -1087,9 +1330,6 @@ msgstr "" msgid "Environments|Environments" msgstr "" -msgid "Environments|Environments are places where code gets deployed, such as staging or production." -msgstr "" - msgid "Environments|Job" msgstr "" @@ -1132,9 +1372,33 @@ msgstr "" msgid "Error creating epic" msgstr "" +msgid "Error fetching contributors data." +msgstr "" + +msgid "Error fetching labels." +msgstr "" + +msgid "Error fetching network graph." +msgstr "" + +msgid "Error fetching refs" +msgstr "" + +msgid "Error fetching usage ping data." +msgstr "" + msgid "Error occurred when toggling the notification subscription" msgstr "" +msgid "Error saving label update." +msgstr "" + +msgid "Error updating status for all todos." +msgstr "" + +msgid "Error updating todo status." +msgstr "" + msgid "EventFilterBy|Filter by all" msgstr "顯示全部" @@ -1162,6 +1426,9 @@ msgstr "æ¯æœˆåŸ·è¡Œï¼ˆæ¯æœˆä¸€æ—¥æ·©æ™¨å››é»žï¼‰" msgid "Every week (Sundays at 4:00am)" msgstr "æ¯é€±åŸ·è¡Œï¼ˆé€±æ—¥æ·©æ™¨ 四點)" +msgid "Expand" +msgstr "" + msgid "Explore projects" msgstr "ç€è¦½å°ˆæ¡ˆ" @@ -1180,6 +1447,9 @@ msgstr "" msgid "February" msgstr "" +msgid "Fields on this page are now uneditable, you can configure" +msgstr "" + msgid "File name" msgstr "檔案å稱" @@ -1223,10 +1493,10 @@ msgstr "從請求被åˆä½µå¾Œ (merge request merged) 直到部署至營é‹ç’°å¢ƒ msgid "GPG Keys" msgstr "GPG 金鑰" -msgid "Geo Nodes" +msgid "Generate a default set of labels" msgstr "" -msgid "GeoNodeSyncStatus|Failed" +msgid "Geo Nodes" msgstr "" msgid "GeoNodeSyncStatus|Node is failing or broken." @@ -1235,16 +1505,100 @@ msgstr "" msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage." msgstr "" -msgid "GeoNodeSyncStatus|Out of sync" +msgid "GeoNodes|Database replication lag:" +msgstr "" + +msgid "GeoNodes|Disabling a node stops the sync process. Are you sure?" +msgstr "" + +msgid "GeoNodes|Does not match the primary storage configuration" +msgstr "" + +msgid "GeoNodes|Failed" +msgstr "" + +msgid "GeoNodes|Full" +msgstr "" + +msgid "GeoNodes|GitLab version does not match the primary node version" +msgstr "" + +msgid "GeoNodes|GitLab version:" +msgstr "" + +msgid "GeoNodes|Health status:" +msgstr "" + +msgid "GeoNodes|Last event ID processed by cursor:" +msgstr "" + +msgid "GeoNodes|Last event ID seen from primary:" +msgstr "" + +msgid "GeoNodes|Loading nodes" +msgstr "" + +msgid "GeoNodes|Local Attachments:" msgstr "" -msgid "GeoNodeSyncStatus|Synced" +msgid "GeoNodes|Local LFS objects:" +msgstr "" + +msgid "GeoNodes|Local job artifacts:" +msgstr "" + +msgid "GeoNodes|New node" +msgstr "" + +msgid "GeoNodes|Out of sync" +msgstr "" + +msgid "GeoNodes|Replication slot WAL:" +msgstr "" + +msgid "GeoNodes|Replication slots:" +msgstr "" + +msgid "GeoNodes|Repositories:" +msgstr "" + +msgid "GeoNodes|Selective" +msgstr "" + +msgid "GeoNodes|Storage config:" +msgstr "" + +msgid "GeoNodes|Sync settings:" +msgstr "" + +msgid "GeoNodes|Synced" +msgstr "" + +msgid "GeoNodes|Unused slots" +msgstr "" + +msgid "GeoNodes|Used slots" +msgstr "" + +msgid "GeoNodes|Wikis:" +msgstr "" + +msgid "GeoNodes|You have configured Geo nodes using an insecure HTTP connection. We recommend the use of HTTPS." +msgstr "" + +msgid "Geo|All projects" msgstr "" msgid "Geo|File sync capacity" msgstr "" -msgid "Geo|Groups to replicate" +msgid "Geo|Groups to synchronize" +msgstr "" + +msgid "Geo|Projects in certain groups" +msgstr "" + +msgid "Geo|Projects in certain storage shards" msgstr "" msgid "Geo|Repository sync capacity" @@ -1253,12 +1607,24 @@ msgstr "" msgid "Geo|Select groups to replicate." msgstr "" +msgid "Geo|Shards to synchronize" +msgstr "" + +msgid "Git revision" +msgstr "" + msgid "Git storage health information has been reset" msgstr "Git 儲å˜ç©ºé–“å¥åº·æŒ‡æ•¸å·²é‡ç½®" +msgid "Git version" +msgstr "" + msgid "GitLab Runner section" msgstr "GitLab Runner" +msgid "Gitaly Servers" +msgstr "" + msgid "Go to your fork" msgstr "å‰å¾€æ‚¨çš„分支 (fork) " @@ -1268,6 +1634,9 @@ msgstr "å‰å¾€æ‚¨çš„分支 (fork) " msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "Google 身份驗è‰ä¸æ˜¯ %{link_to_documentation}。如果您想使用æ¤æœå‹™ï¼Œè«‹è«®è©¢ç®¡ç†å“¡ã€‚" +msgid "Got it!" +msgstr "" + msgid "GroupSettings|Prevent sharing a project within %{group} with other groups" msgstr "ç¦æ¢èˆ‡å…¶ä»–群組共享 %{group} ä¸çš„專案" @@ -1304,8 +1673,8 @@ msgstr "找ä¸åˆ°ç¾¤çµ„" msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group." msgstr "ä½ å¯ä»¥ç®¡ç†ç¾¤çµ„內所有æˆå“¡çš„æ¯å€‹å°ˆæ¡ˆçš„å˜å–權é™" -msgid "GroupsTree|Are you sure you want to leave the \"${this.group.fullName}\" group?" -msgstr "ä½ ç¢ºå®šè¦é›¢é–‹ç¾¤çµ„ \"${this.group.fullName}\" 嗎?" +msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?" +msgstr "" msgid "GroupsTree|Create a project in this group." msgstr "在æ¤ç¾¤çµ„建立新的專案" @@ -1355,6 +1724,10 @@ msgstr "沒有檢測到å¥åº·å•é¡Œ" msgid "HealthCheck|Unhealthy" msgstr "ä¸è‰¯" +msgid "Hide value" +msgid_plural "Hide values" +msgstr[0] "" + msgid "History" msgstr "æ·å²" @@ -1380,6 +1753,12 @@ msgid "Instance" msgid_plural "Instances" msgstr[0] "" +msgid "Instance does not support multiple Kubernetes clusters" +msgstr "" + +msgid "Interested parties can even contribute by pushing commits if they want to." +msgstr "" + msgid "Internal - The group and any internal projects can be viewed by any logged in user." msgstr "內部 - 任何登入的使用者都å¯ä»¥æŸ¥çœ‹è©²ç¾¤çµ„åŠå…¶å°ˆæ¡ˆ" @@ -1407,6 +1786,9 @@ msgstr "" msgid "Issues" msgstr "è°é¡Œ" +msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable." +msgstr "" + msgid "Jan" msgstr "" @@ -1425,6 +1807,27 @@ msgstr "" msgid "June" msgstr "" +msgid "Kubernetes" +msgstr "" + +msgid "Kubernetes Cluster" +msgstr "" + +msgid "Kubernetes cluster creation time exceeds timeout; %{timeout}" +msgstr "" + +msgid "Kubernetes cluster integration was not removed." +msgstr "" + +msgid "Kubernetes cluster integration was successfully removed." +msgstr "" + +msgid "Kubernetes cluster was successfully updated." +msgstr "" + +msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page" +msgstr "" + msgid "LFSStatus|Disabled" msgstr "åœç”¨" @@ -1434,6 +1837,9 @@ msgstr "啟用" msgid "Labels" msgstr "標籤" +msgid "Labels can be applied to issues and merge requests to categorize them." +msgstr "" + msgid "Last %d day" msgid_plural "Last %d days" msgstr[0] "最近 %d 天" @@ -1462,6 +1868,9 @@ msgstr "您上傳 (push) 了" msgid "LastPushEvent|at" msgstr "æ–¼" +msgid "Learn more" +msgstr "" + msgid "Learn more in the" msgstr "了解更多" @@ -1480,13 +1889,18 @@ msgstr "退出專案" msgid "License" msgstr "" -msgid "Limited to showing %d event at most" -msgid_plural "Limited to showing %d events at most" -msgstr[0] "é™åˆ¶æœ€å¤šé¡¯ç¤º %d 個事件" +msgid "Loading the GitLab IDE..." +msgstr "" msgid "Lock" msgstr "鎖定" +msgid "Lock %{issuableDisplayName}" +msgstr "" + +msgid "Lock this %{issuableDisplayName}? Only <strong>project members</strong> will be able to comment." +msgstr "" + msgid "Locked" msgstr "鎖定" @@ -1496,12 +1910,21 @@ msgstr "" msgid "Login" msgstr "登入" +msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos." +msgstr "" + +msgid "Manage labels" +msgstr "" + msgid "Mar" msgstr "" msgid "March" msgstr "" +msgid "Mark done" +msgstr "" + msgid "Maximum git storage failures" msgstr "最大 git 儲å˜å¤±æ•—" @@ -1514,6 +1937,9 @@ msgstr "ä¸ä½æ•¸" msgid "Members" msgstr "æˆå“¡" +msgid "Merge Request" +msgstr "" + msgid "Merge Requests" msgstr "åˆä½µè«‹æ±‚ (merge request)" @@ -1523,9 +1949,30 @@ msgstr "åˆä½µ (merge) 事件" msgid "Merge request" msgstr "åˆä½µè«‹æ±‚" +msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others" +msgstr "" + +msgid "Merged" +msgstr "" + msgid "Messages" msgstr "公告" +msgid "Milestone" +msgstr "" + +msgid "Milestones|Delete milestone" +msgstr "" + +msgid "Milestones|Delete milestone %{milestoneTitle}?" +msgstr "" + +msgid "Milestones|Failed to delete milestone %{milestoneTitle}" +msgstr "" + +msgid "Milestones|Milestone %{milestoneTitle} was not found" +msgstr "" + msgid "MissingSSHKeyWarningLink|add an SSH key" msgstr "新增 SSH 金鑰" @@ -1535,16 +1982,28 @@ msgstr "監控" msgid "More information is available|here" msgstr "å¥åº·æª¢æŸ¥" +msgid "Move" +msgstr "" + +msgid "Move issue" +msgstr "" + msgid "Multiple issue boards" msgstr "" -msgid "New Cluster" -msgstr "æ–°å¢é›†" +msgid "Name new label" +msgstr "" msgid "New Issue" msgid_plural "New Issues" msgstr[0] "建立è°é¡Œ (issue) " +msgid "New Kubernetes Cluster" +msgstr "" + +msgid "New Kubernetes cluster" +msgstr "" + msgid "New Pipeline Schedule" msgstr "建立æµæ°´ç·š (pipeline) 排程" @@ -1569,6 +2028,9 @@ msgstr "新群組" msgid "New issue" msgstr "新增è°é¡Œ (issue) " +msgid "New label" +msgstr "" + msgid "New merge request" msgstr "新增åˆä½µè«‹æ±‚ (merge request) " @@ -1587,7 +2049,22 @@ msgstr "æ–°å群組" msgid "New tag" msgstr "新增標籤" -msgid "No container images stored for this project. Add one by following the instructions above." +msgid "No assignee" +msgstr "" + +msgid "No changes" +msgstr "" + +msgid "No connection could be made to a Gitaly Server, please check your logs!" +msgstr "" + +msgid "No due date" +msgstr "" + +msgid "No estimate or time spent" +msgstr "" + +msgid "No file chosen" msgstr "" msgid "No repository" @@ -1602,9 +2079,15 @@ msgstr "" msgid "None" msgstr "ç„¡" +msgid "Not allowed to merge" +msgstr "" + msgid "Not available" msgstr "無法使用" +msgid "Not confidential" +msgstr "" + msgid "Not enough data" msgstr "資料ä¸è¶³" @@ -1665,6 +2148,12 @@ msgstr "關注" msgid "Notifications" msgstr "通知" +msgid "Notifications off" +msgstr "" + +msgid "Notifications on" +msgstr "" + msgid "Nov" msgstr "" @@ -1674,7 +2163,7 @@ msgstr "" msgid "Number of access attempts" msgstr "嘗試å˜å–的次數" -msgid "Number of failures before backing off" +msgid "OK" msgstr "" msgid "Oct" @@ -1689,6 +2178,9 @@ msgstr "篩é¸" msgid "Only project members can comment." msgstr "åªæœ‰ç¾¤çµ„æˆå“¡æ‰èƒ½ç•™è¨€ã€‚" +msgid "Open" +msgstr "" + msgid "Opened" msgstr "" @@ -1722,9 +2214,6 @@ msgstr "« 第一é " msgid "Password" msgstr "密碼" -msgid "People without permission will never get a notification and won\\'t be able to comment." -msgstr "沒有權é™çš„使用者將ä¸æœƒæ”¶åˆ°é€šçŸ¥ï¼Œä¹Ÿç„¡æ³•ç•™è¨€ã€‚" - msgid "Pipeline" msgstr "æµæ°´ç·š (pipeline) " @@ -1767,12 +2256,6 @@ msgstr "所有" msgid "PipelineSchedules|Inactive" msgstr "未啟用" -msgid "PipelineSchedules|Input variable key" -msgstr "變數å稱" - -msgid "PipelineSchedules|Input variable value" -msgstr "變數值" - msgid "PipelineSchedules|Next Run" msgstr "下次執行時間" @@ -1782,9 +2265,6 @@ msgstr "ç„¡" msgid "PipelineSchedules|Provide a short description for this pipeline" msgstr "請簡單說明æ¤æµæ°´ç·š (pipeline) " -msgid "PipelineSchedules|Remove variable row" -msgstr "刪除變數" - msgid "PipelineSchedules|Take ownership" msgstr "å–得所有權" @@ -1812,6 +2292,12 @@ msgstr "上週的æµæ°´ç·š" msgid "Pipelines for last year" msgstr "去年的æµæ°´ç·š" +msgid "Pipelines|Build with confidence" +msgstr "" + +msgid "Pipelines|Get started with Pipelines" +msgstr "" + msgid "Pipeline|all" msgstr "所有" @@ -1824,12 +2310,21 @@ msgstr "於階段" msgid "Pipeline|with stages" msgstr "於階段" +msgid "Play" +msgstr "" + +msgid "Please <a href=%{link_to_billing} target=\"_blank\" rel=\"noopener noreferrer\">enable billing for one of your projects to be able to create a Kubernetes cluster</a>, then try again." +msgstr "" + msgid "Please solve the reCAPTCHA" msgstr "" msgid "Preferences" msgstr "å好è¨å®š" +msgid "Primary" +msgstr "" + msgid "Private - Project access must be granted explicitly to each user." msgstr "ç§æœ‰ - 專案權é™å¿…é ˆä¸€ä¸€æŒ‡æ´¾çµ¦æ¯å€‹ä½¿ç”¨è€…" @@ -1875,6 +2370,9 @@ msgstr "ä½ çš„å¸³è™Ÿç›®å‰æ“有這些群組:" msgid "Profiles|your account" msgstr "ä½ çš„å¸³è™Ÿ" +msgid "Programming languages used in this repository" +msgstr "" + msgid "Project '%{project_name}' is in the process of being deleted." msgstr "專案 \"%{project_name}\" æ£åœ¨è¢«åˆªé™¤ã€‚" @@ -1890,6 +2388,15 @@ msgstr "專案 '%{project_name}' 更新完æˆã€‚" msgid "Project access must be granted explicitly to each user." msgstr "專案權é™å¿…é ˆä¸€ä¸€æŒ‡æ´¾çµ¦æ¯å€‹ä½¿ç”¨è€…。" +msgid "Project avatar" +msgstr "" + +msgid "Project avatar in repository: %{link}" +msgstr "" + +msgid "Project cache successfully reset." +msgstr "" + msgid "Project details" msgstr "專案細節" @@ -1908,6 +2415,21 @@ msgstr "專案導出已開始。完æˆå¾Œä¸‹è¼‰é€£çµæœƒé€åˆ°æ‚¨çš„信箱。" msgid "ProjectActivityRSS|Subscribe" msgstr "訂閱" +msgid "ProjectCreationLevel|Allowed to create projects" +msgstr "" + +msgid "ProjectCreationLevel|Default project creation protection" +msgstr "" + +msgid "ProjectCreationLevel|Developers + Masters" +msgstr "" + +msgid "ProjectCreationLevel|Masters" +msgstr "" + +msgid "ProjectCreationLevel|No one" +msgstr "" + msgid "ProjectFeature|Disabled" msgstr "åœç”¨" @@ -1932,15 +2454,9 @@ msgstr "分支圖" msgid "ProjectSettings|Contact an admin to change this setting." msgstr "" -msgid "ProjectSettings|Immediately run a pipeline on the default branch" -msgstr "" - msgid "ProjectSettings|Only signed commits can be pushed to this repository." msgstr "" -msgid "ProjectSettings|Problem setting up the CI/CD settings JavaScript" -msgstr "" - msgid "ProjectSettings|This setting is applied on the server level and can be overridden by an admin." msgstr "" @@ -2010,6 +2526,9 @@ msgstr "" msgid "PrometheusService|View environments" msgstr "" +msgid "Protip:" +msgstr "" + msgid "Public - The group and any public projects can be viewed without any authentication." msgstr "公開 - 未登入的情æ³ä¸‹ä¾ç„¶å¯ä»¥æŸ¥çœ‹ä»»ä½•å…¬é–‹å°ˆæ¡ˆ" @@ -2025,6 +2544,9 @@ msgstr "æŽ¨é€ (push) 事件" msgid "PushRule|Committer restriction" msgstr "" +msgid "Quick actions can be used in the issues description and comment boxes." +msgstr "" + msgid "Read more" msgstr "çžè§£æ›´å¤š" @@ -2037,6 +2559,12 @@ msgstr "分支 (branch) " msgid "RefSwitcher|Tags" msgstr "標籤" +msgid "Reference:" +msgstr "" + +msgid "Register / Sign In" +msgstr "" + msgid "Registry" msgstr "" @@ -2061,9 +2589,18 @@ msgstr "相關已åˆä½µçš„請求" msgid "Remind later" msgstr "ç¨å¾Œæ醒" +msgid "Remove" +msgstr "" + +msgid "Remove avatar" +msgstr "" + msgid "Remove project" msgstr "刪除專案" +msgid "Repair authentication" +msgstr "" + msgid "Repository" msgstr "檔案庫 (repository)" @@ -2079,6 +2616,10 @@ msgstr "é‡ç½®å¥åº·æª¢æŸ¥å˜å–æ†‘è‰ (access token)" msgid "Reset runners registration token" msgstr "é‡ç½® Runner è¨»å†Šæ†‘è‰ (registration token)" +msgid "Reveal value" +msgid_plural "Reveal values" +msgstr[0] "" + msgid "Revert this commit" msgstr "還原æ¤æ›´å‹•è¨˜éŒ„ (commit)" @@ -2088,15 +2629,15 @@ msgstr "還原æ¤åˆä½µè«‹æ±‚ (merge request) " msgid "SSH Keys" msgstr "SSH 金鑰" -msgid "Save" -msgstr "儲å˜" - msgid "Save changes" msgstr "儲å˜è®Šæ›´" msgid "Save pipeline schedule" msgstr "儲å˜æµæ°´ç·š (pipeline) 排程" +msgid "Save variables" +msgstr "" + msgid "Schedule a new pipeline" msgstr "建立æµæ°´ç·š (pipeline) 排程" @@ -2112,38 +2653,59 @@ msgstr "" msgid "Search branches and tags" msgstr "æœå°‹åˆ†æ”¯ (branch) 和標籤" +msgid "Search milestones" +msgstr "" + +msgid "Search project" +msgstr "" + +msgid "Search users" +msgstr "" + msgid "Seconds before reseting failure information" msgstr "é‡ç½®å¤±æ•—訊æ¯ç‰å¾…時間(秒)" -msgid "Seconds to wait after a storage failure" -msgstr "儲å˜å¤±æ•—後ç‰å¾…時間(秒)" - msgid "Seconds to wait for a storage access attempt" msgstr "ç‰å¾…å˜å–儲å˜ç©ºé–“的嘗試時間(秒)" +msgid "Secret variables" +msgstr "" + msgid "Select Archive Format" msgstr "é¸æ“‡ä¸‹è¼‰æ ¼å¼" msgid "Select a timezone" msgstr "é¸æ“‡æ™‚å€" +msgid "Select assignee" +msgstr "" + +msgid "Select branch/tag" +msgstr "" + msgid "Select target branch" msgstr "é¸æ“‡ç›®æ¨™åˆ†æ”¯ (branch) " +msgid "Selective synchronization" +msgstr "" + msgid "Sep" msgstr "" msgid "September" msgstr "" +msgid "Server version" +msgstr "" + msgid "Service Templates" msgstr "æœå‹™ç¯„本" msgid "Set a password on your account to pull or push via %{protocol}." msgstr "è«‹å…ˆè¨å®šå¯†ç¢¼ï¼Œæ‰èƒ½ä½¿ç”¨ %{protocol} 來上傳 (push) 或下載 (pull) 。" -msgid "Set up CI" -msgstr "è¨å®š CI" +msgid "Set up CI/CD" +msgstr "" msgid "Set up Koding" msgstr "è¨å®š Koding" @@ -2157,6 +2719,15 @@ msgstr "è¨å®šå¯†ç¢¼" msgid "Settings" msgstr "è¨å®š" +msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero." +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset pipeline minutes" +msgstr "" + +msgid "SharedRunnersMinutesSettings|Reset used pipeline minutes" +msgstr "" + msgid "Show parent pages" msgstr "顯示上層é é¢" @@ -2170,9 +2741,6 @@ msgstr[0] "顯示 %d 個事件" msgid "Sidebar|Change weight" msgstr "" -msgid "Sidebar|Edit" -msgstr "" - msgid "Sidebar|No" msgstr "" @@ -2185,18 +2753,30 @@ msgstr "" msgid "Snippets" msgstr "æ–‡å—片段" +msgid "Something went wrong on our end" +msgstr "" + msgid "Something went wrong on our end." msgstr "發生了錯誤。" +msgid "Something went wrong trying to change the confidentiality of this issue" +msgstr "" + msgid "Something went wrong trying to change the locked state of this ${this.issuableDisplayName}" msgstr "" +msgid "Something went wrong when toggling the button" +msgstr "" + msgid "Something went wrong while fetching the projects." msgstr "讀å–專案時發生錯誤。" msgid "Something went wrong while fetching the registry list." msgstr "讀å–註冊列表時發生錯誤。" +msgid "Something went wrong. Please try again." +msgstr "" + msgid "Sort by" msgstr "排åº" @@ -2326,12 +2906,12 @@ msgstr "å•Ÿå‹• Runner!" msgid "Stopped" msgstr "" +msgid "Storage" +msgstr "" + msgid "Subgroups" msgstr "å群組" -msgid "Subscribe" -msgstr "訂閱" - msgid "Switch branch/tag" msgstr "切æ›åˆ†æ”¯ (branch) 或標籤" @@ -2426,8 +3006,11 @@ msgstr "" msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project." msgstr "" -msgid "The circuitbreaker backoff threshold should be lower than the failure count threshold" -msgstr "é™æµé˜»æ–·å…ƒä»¶çš„觸發門檻應低於計數錯誤門檻" +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project" +msgstr "" + +msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project." +msgstr "" msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request." msgstr "程å¼é–‹ç™¼éšŽæ®µé¡¯ç¤ºå¾žç¬¬ä¸€æ¬¡æ›´å‹•è¨˜éŒ„ (commit) 到建立åˆä½µè«‹æ±‚ (merge request) 的時間。建立第一個åˆä½µè«‹æ±‚後,資料將自動填入。" @@ -2441,21 +3024,18 @@ msgstr "åˆ†æ”¯èˆ‡ä¸»å¹¹é–“çš„é—œè¯ (fork relationship) 已被刪除。" msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage." msgstr "è°é¡Œ (issue) 階段顯示從è°é¡Œå»ºç«‹åˆ°è¨å®šé‡Œç¨‹ç¢‘所花的時間,或是è°é¡Œè¢«åˆ†é¡žåˆ°è°é¡Œçœ‹æ¿ (issue board) ä¸æ‰€èŠ±çš„時間。建立第一個è°é¡Œå¾Œï¼Œè³‡æ–™å°‡è‡ªå‹•å¡«å…¥ã€‚" +msgid "The maximum file size allowed is 200KB." +msgstr "" + msgid "The number of attempts GitLab will make to access a storage." msgstr "GitLab å˜å–儲å˜ç©ºé–“的嘗試次數。" -msgid "The number of failures after which GitLab will start temporarily disabling access to a storage shard on a host" -msgstr "" - msgid "The number of failures of after which GitLab will completely prevent access to the storage. The number of failures can be reset in the admin interface: %{link_to_health_page} or using the %{api_documentation_link}." msgstr "GitLab 將阻擋å˜å–失敗的次數。在管ç†è€…介é¢ä¸å¯ä»¥é‡ç½®å¤±æ•—次數: %{link_to_health_page} 或使用 %{api_documentation_link}。" msgid "The phase of the development lifecycle." msgstr "專案開發週期的å„個階段。" -msgid "The pipelines schedule runs pipelines in the future, repeatedly, for specific branches or tags. Those scheduled pipelines will inherit limited project access based on their associated user." -msgstr "在指定了特定分支 (branch) 或標籤後,æ¤è™•çš„æµæ°´ç·š (pipeline) 排程會ä¸æ–·åœ°é‡è¤‡åŸ·è¡Œã€‚æµæ°´ç·šæŽ’程的å˜å–權é™èˆ‡å°ˆæ¡ˆæœ¬èº«ç›¸åŒã€‚" - msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit." msgstr "計劃階段顯示從更動記錄 (commit) 被排程至第一個推é€çš„時間。第一次推é€ä¹‹å¾Œï¼Œè³‡æ–™å°‡è‡ªå‹•å¡«å…¥ã€‚" @@ -2486,20 +3066,47 @@ msgstr "GitLab ä¿å˜å¤±æ•—訊æ¯çš„時間(秒)。在æ¤æ™‚間內若沒有發生 msgid "The time in seconds GitLab will try to access storage. After this time a timeout error will be raised." msgstr "GitLab 嘗試å˜å–檔案庫 (repository) 的時間 (秒)。超éŽæ¤æ™‚間將會引發逾時錯誤。" +msgid "The time in seconds between storage checks. When a previous check did complete yet, GitLab will skip a check." +msgstr "" + msgid "The time taken by each data entry gathered by that stage." msgstr "該階段ä¸æ¯ä¸€å€‹è³‡æ–™é …目所花的時間。" msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6." msgstr "ä¸ä½æ•¸æ˜¯ä¸€å€‹æ•¸åˆ—ä¸æœ€ä¸é–“的值。例如在 3ã€5ã€9 之間,ä¸ä½æ•¸æ˜¯ 5。在 3ã€5ã€7ã€8 之間,ä¸ä½æ•¸æ˜¯ (5 + 7)/ 2 = 6。" +msgid "There are no issues to show" +msgstr "" + +msgid "There are no merge requests to show" +msgstr "" + msgid "There are problems accessing Git storage: " msgstr "å˜å– Git 儲å˜ç©ºé–“時出ç¾å•é¡Œï¼š" +msgid "There was an error loading users activity calendar." +msgstr "" + +msgid "There was an error saving your notification settings." +msgstr "" + +msgid "There was an error subscribing to this label." +msgstr "" + +msgid "There was an error when reseting email token." +msgstr "" + +msgid "There was an error when subscribing to this label." +msgstr "" + +msgid "There was an error when unsubscribing from this label." +msgstr "" + msgid "This board\\'s scope is reduced" msgstr "" -msgid "This branch has changed since you started editing. Would you like to create a new branch?" -msgstr "在您編輯後,æ¤åˆ†æ”¯å·²è¢«æ›´æ”¹ï¼Œæ‚¨æƒ³è¦å»ºç«‹ä¸€å€‹æ–°çš„分支嗎?" +msgid "This directory" +msgstr "" msgid "This is a confidential issue." msgstr "這是個隱密å•é¡Œã€‚" @@ -2507,18 +3114,45 @@ msgstr "這是個隱密å•é¡Œã€‚" msgid "This is the author's first Merge Request to this project." msgstr "這是作者第一次åˆä½µè«‹æ±‚至本專案。" +msgid "This issue is confidential" +msgstr "" + msgid "This issue is confidential and locked." msgstr "這個å•é¡Œæ˜¯ä¿å¯†ä¸”鎖定的。" msgid "This issue is locked." msgstr "這個å•é¡Œå·²è¢«éŽ–定。" +msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments" +msgstr "" + +msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered" +msgstr "" + +msgid "This job has not been triggered yet" +msgstr "" + +msgid "This job has not started yet" +msgstr "" + +msgid "This job is in pending state and is waiting to be picked by a runner" +msgstr "" + +msgid "This job requires a manual action" +msgstr "" + msgid "This means you can not push code until you create an empty repository or import existing one." msgstr "這代表在您建立一個空的檔案庫 (repository) 或是匯入一個ç¾å˜çš„檔案庫之å‰ï¼Œæ‚¨å°‡ç„¡æ³•ä¸Šå‚³æ›´æ–° (push) 。" msgid "This merge request is locked." msgstr "這個åˆä½µè«‹æ±‚已被鎖定。" +msgid "This project" +msgstr "" + +msgid "This repository" +msgstr "" + msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here." msgstr "" @@ -2531,9 +3165,21 @@ msgstr "è°é¡Œ (issue) ç‰å¾…開始實作的時間" msgid "Time between merge request creation and merge/close" msgstr "åˆä½µè«‹æ±‚ (merge request) 從建立到被åˆä½µæˆ–是關閉的時間" +msgid "Time tracking" +msgstr "" + msgid "Time until first merge request" msgstr "第一個åˆä½µè«‹æ±‚ (merge request) 被建立å‰çš„時間" +msgid "TimeTrackingEstimated|Est" +msgstr "" + +msgid "TimeTracking|Estimated:" +msgstr "" + +msgid "TimeTracking|Spent" +msgstr "" + msgid "Timeago|%s days ago" msgstr " %s 天å‰" @@ -2671,6 +3317,18 @@ msgstr "秒" msgid "Title" msgstr "" +msgid "Todo" +msgstr "" + +msgid "Toggle sidebar" +msgstr "" + +msgid "ToggleButton|Toggle Status: OFF" +msgstr "" + +msgid "ToggleButton|Toggle Status: ON" +msgstr "" + msgid "Total Time" msgstr "總時間" @@ -2686,20 +3344,41 @@ msgstr "" msgid "Track groups of issues that share a theme, across projects and milestones" msgstr "" +msgid "Total: %{total}" +msgstr "" + +msgid "Track time with quick actions" +msgstr "" + +msgid "Trigger this manual action" +msgstr "" + msgid "Turn on Service Desk" msgstr "" +msgid "Type %{value} to confirm:" +msgstr "" + +msgid "Unable to reset project cache." +msgstr "" + +msgid "Unknown" +msgstr "" + msgid "Unlock" msgstr "解鎖" +msgid "Unlock this %{issuableDisplayName}? <strong>Everyone</strong> will be able to comment." +msgstr "" + msgid "Unlocked" msgstr "已解鎖" msgid "Unstar" msgstr "å–消收è—" -msgid "Unsubscribe" -msgstr "å–消訂閱" +msgid "Up to date" +msgstr "" msgid "Upgrade your plan to activate Advanced Global Search." msgstr "" @@ -2722,6 +3401,9 @@ msgstr "上傳新檔案" msgid "Upload file" msgstr "上傳檔案" +msgid "Upload new avatar" +msgstr "" + msgid "UploadLink|click to upload" msgstr "點擊上傳" @@ -2734,9 +3416,15 @@ msgstr "在安è£éŽç¨‹ä¸ä½¿ç”¨æ¤è¨»å†Šæ†‘è‰ (registration token):" msgid "Use your global notification setting" msgstr "使用全域通知è¨å®š" +msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want." +msgstr "" + msgid "View file @ " msgstr "ç€è¦½æª”案 @ " +msgid "View labels" +msgstr "" + msgid "View open merge request" msgstr "查看æ¤åˆ†æ”¯çš„åˆä½µè«‹æ±‚ (merge request)" @@ -2758,6 +3446,9 @@ msgstr "ä¸æ˜Ž" msgid "Want to see the data? Please ask an administrator for access." msgstr "權é™ä¸è¶³ã€‚如需查看相關資料,請å‘管ç†å“¡ç”³è«‹æ¬Šé™ã€‚" +msgid "We could not verify that one of your projects on GCP has billing enabled. Please try again." +msgstr "" + msgid "We don't have enough data to show this stage." msgstr "å› è©²éšŽæ®µçš„è³‡æ–™ä¸è¶³è€Œç„¡æ³•é¡¯ç¤ºç›¸é—œè³‡è¨Š" @@ -2770,9 +3461,6 @@ msgstr "" msgid "Weight" msgstr "" -msgid "When access to a storage fails. GitLab will prevent access to the storage for the time specified here. This allows the filesystem to recover. Repositories on failing shards are temporarly unavailable" -msgstr "當å˜å–檔案庫 (repository) 失敗時, GitLab 將在æ¤è™•æŒ‡å®šçš„時間內防æ¢æª”案庫的å˜å–,以æ¤ç‰å¾…檔案系統æ¢å¾©ã€‚å¤±æ•—çš„æª”æ¡ˆåº«åˆ†æµ (shard) 會暫時無法使用。" - msgid "Wiki" msgstr "Wiki" @@ -2791,6 +3479,12 @@ msgstr "å®ƒè¢«æŽ¨è–¦å®‰è£ %{markdown} 所以那 GFM 功能在本機呈ç¾ï¼š" msgid "WikiClone|Start Gollum and edit locally" msgstr "é–‹å§‹ä½ çš„ Gollum 並在本機編輯。" +msgid "WikiEditPageTip|Tip: You can move this page by adding the path to the beginning of the title." +msgstr "" + +msgid "WikiEdit|There is already a page with the same title in that path." +msgstr "" + msgid "WikiEmptyPageError|You are not allowed to create wiki pages" msgstr "ä½ æ²’æœ‰æ¬Šé™å»ºç«‹ Wiki é é¢" @@ -2893,9 +3587,21 @@ msgstr "å°‡è¦åˆªé™¤æœ¬åˆ†æ”¯å°ˆæ¡ˆèˆ‡ä¸»å¹¹ %{forked_from_project} 的所有關 msgid "You are going to transfer %{project_name_with_namespace} to another owner. Are you ABSOLUTELY sure?" msgstr "å°‡è¦æŠŠ %{project_name_with_namespace} 的所有權轉移給å¦ä¸€å€‹äººã€‚真的「確定ã€è¦é€™éº¼åšå—Žï¼Ÿ" +msgid "You can also star a label to make it a priority label." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + +msgid "You can move around the graph by using the arrow keys." +msgstr "" + msgid "You can only add files when you are on a branch" msgstr "åªèƒ½åœ¨åˆ†æ”¯ (branch) 上建立檔案" +msgid "You can only edit files when you are on a branch" +msgstr "" + msgid "You cannot write to a read-only secondary GitLab Geo instance. Please use %{link_to_primary_node} instead." msgstr "" @@ -2935,6 +3641,12 @@ msgstr "åœ¨å€‹äººå¸³è™Ÿä¸ %{add_ssh_key_link} 之å‰ï¼Œ 將無法使用 SSH 上 msgid "You won't be able to pull or push project code via SSH until you add an SSH key to your profile" msgstr "" +msgid "You'll need to use different branch names to get a valid comparison." +msgstr "" + +msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure" +msgstr "" + msgid "Your comment will not be visible to the public." msgstr "ä½ çš„ç•™è¨€å°‡ä¸æœƒè¢«å…¬é–‹ã€‚" @@ -2947,25 +3659,218 @@ msgstr "您的åå—" msgid "Your projects" msgstr "ä½ çš„è¨ˆåŠƒ" +msgid "assign yourself" +msgstr "" + msgid "branch name" msgstr "" msgid "by" msgstr "" +msgid "ciReport|Code quality" +msgstr "" + +msgid "ciReport|DAST detected no alerts by analyzing the review app" +msgstr "" + +msgid "ciReport|Failed to load ${type} report" +msgstr "" + +msgid "ciReport|Fixed:" +msgstr "" + +msgid "ciReport|Instances" +msgstr "" + +msgid "ciReport|Learn more about whitelisting" +msgstr "" + +msgid "ciReport|Loading ${type} report" +msgstr "" + +msgid "ciReport|No changes to code quality" +msgstr "" + +msgid "ciReport|No changes to performance metrics" +msgstr "" + +msgid "ciReport|Performance metrics" +msgstr "" + +msgid "ciReport|SAST" +msgstr "" + +msgid "ciReport|SAST detected no security vulnerabilities" +msgstr "" + +msgid "ciReport|SAST:container no vulnerabilities were found" +msgstr "" + +msgid "ciReport|Show complete code vulnerabilities report" +msgstr "" + +msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}" +msgstr "" + msgid "commit" msgstr "" +msgid "confidentiality|You are going to turn off the confidentiality. This means <strong>everyone</strong> will be able to see and leave a comment on this issue." +msgstr "" + +msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with <strong>at least Reporter access</strong> are able to see and leave comments on the issue." +msgstr "" + msgid "day" msgid_plural "days" msgstr[0] "天" +msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command." +msgstr "" + +msgid "merge request" +msgid_plural "merge requests" +msgstr[0] "" + +msgid "mrWidget|Cancel automatic merge" +msgstr "" + +msgid "mrWidget|Check out branch" +msgstr "" + +msgid "mrWidget|Checking ability to merge automatically" +msgstr "" + +msgid "mrWidget|Cherry-pick" +msgstr "" + +msgid "mrWidget|Cherry-pick this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Closed" +msgstr "" + +msgid "mrWidget|Closed by" +msgstr "" + +msgid "mrWidget|Closes" +msgstr "" + +msgid "mrWidget|Did not close" +msgstr "" + +msgid "mrWidget|Email patches" +msgstr "" + +msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|Mentions" +msgstr "" + +msgid "mrWidget|Merge" +msgstr "" + +msgid "mrWidget|Merge failed." +msgstr "" + +msgid "mrWidget|Merge locally" +msgstr "" + +msgid "mrWidget|Merged by" +msgstr "" + +msgid "mrWidget|Plain diff" +msgstr "" + +msgid "mrWidget|Refresh" +msgstr "" + +msgid "mrWidget|Refresh now" +msgstr "" + +msgid "mrWidget|Refreshing now" +msgstr "" + +msgid "mrWidget|Remove Source Branch" +msgstr "" + +msgid "mrWidget|Remove source branch" +msgstr "" + +msgid "mrWidget|Request to merge" +msgstr "" + +msgid "mrWidget|Resolve conflicts" +msgstr "" + +msgid "mrWidget|Revert" +msgstr "" + +msgid "mrWidget|Revert this merge request in a new merge request" +msgstr "" + +msgid "mrWidget|Set by" +msgstr "" + +msgid "mrWidget|The changes were merged into" +msgstr "" + +msgid "mrWidget|The changes were not merged into" +msgstr "" + +msgid "mrWidget|The changes will be merged into" +msgstr "" + +msgid "mrWidget|The source branch has been removed" +msgstr "" + +msgid "mrWidget|The source branch is being removed" +msgstr "" + +msgid "mrWidget|The source branch will be removed" +msgstr "" + +msgid "mrWidget|The source branch will not be removed" +msgstr "" + +msgid "mrWidget|There are merge conflicts" +msgstr "" + +msgid "mrWidget|This merge request failed to be merged automatically" +msgstr "" + +msgid "mrWidget|This merge request is in the process of being merged" +msgstr "" + +msgid "mrWidget|This project is archived, write access has been disabled" +msgstr "" + +msgid "mrWidget|You can merge this merge request manually using the" +msgstr "" + +msgid "mrWidget|You can remove source branch now" +msgstr "" + +msgid "mrWidget|command line" +msgstr "" + +msgid "mrWidget|into" +msgstr "" + +msgid "mrWidget|to be merged automatically when the pipeline succeeds" +msgstr "" + msgid "new merge request" msgstr "建立åˆä½µè«‹æ±‚" msgid "notification emails" msgstr "通知信" +msgid "or" +msgstr "" + msgid "parent" msgid_plural "parents" msgstr[0] "上層" @@ -2976,12 +3881,21 @@ msgstr "密碼" msgid "personal access token" msgstr "ç§äººå˜å–æ†‘è‰ (access token)" +msgid "remove due date" +msgstr "" + msgid "source" msgstr "" +msgid "spendCommand|%{slash_command} will update the sum of the time spent." +msgstr "" + msgid "to help your contributors communicate effectively!" msgstr "" msgid "username" msgstr "使用者å稱" +msgid "uses Kubernetes clusters to deploy your code!" +msgstr "" + diff --git a/package.json b/package.json index c508a6e9931..4eccd51a3a6 100644 --- a/package.json +++ b/package.json @@ -52,9 +52,11 @@ "jed": "^1.1.1", "jquery": "^2.2.4", "jquery-ujs": "1.2.2", + "jquery.waitforimages": "^2.2.0", "js-cookie": "^2.1.3", "jszip": "^3.1.3", "jszip-utils": "^0.0.2", + "katex": "^0.8.3", "marked": "^0.3.12", "monaco-editor": "0.10.0", "mousetrap": "^1.4.6", @@ -68,6 +70,7 @@ "sanitize-html": "^1.16.1", "select2": "3.5.2-browserify", "sql.js": "^0.4.0", + "style-loader": "^0.19.1", "svg4everybody": "2.1.9", "three": "^0.84.0", "three-orbit-controls": "^82.1.0", diff --git a/qa/README.md b/qa/README.md index 3c1b61900d9..3a99a30d379 100644 --- a/qa/README.md +++ b/qa/README.md @@ -70,6 +70,30 @@ If you need to authenticate as a different user, you can provide the GITLAB_USERNAME=jsmith GITLAB_PASSWORD=password bin/qa Test::Instance https://gitlab.example.com ``` +If your user doesn't have permission to default sandbox group +`gitlab-qa-sandbox`, you could also use another sandbox group by giving +`GITLAB_SANDBOX_NAME`: + +``` +GITLAB_USERNAME=jsmith GITLAB_PASSWORD=password GITLAB_SANDBOX_NAME=jsmith-qa-sandbox bin/qa Test::Instance https://gitlab.example.com +``` + +In addition, the `GITLAB_USER_TYPE` can be set to "ldap" to sign in as an LDAP user: + +``` +GITLAB_USER_TYPE=ldap GITLAB_USERNAME=jsmith GITLAB_PASSWORD=password GITLAB_SANDBOX_NAME=jsmith-qa-sandbox bin/qa Test::Instance https://gitlab.example.com +``` + All [supported environment variables are here](https://gitlab.com/gitlab-org/gitlab-qa#supported-environment-variables). +### Building a Docker image to test + +Once you have made changes to the CE/EE repositories, you may want to build a +Docker image to test locally instead of waiting for the `gitlab-ce-qa` or +`gitlab-ee-qa` nightly builds. To do that, you can run from this directory: + +```sh +docker build -t gitlab/gitlab-ce-qa:nightly . +``` + [GDK]: https://gitlab.com/gitlab-org/gitlab-development-kit/ diff --git a/qa/qa/page/main/login.rb b/qa/qa/page/main/login.rb index fd49b27cb1a..a8a5601dbe6 100644 --- a/qa/qa/page/main/login.rb +++ b/qa/qa/page/main/login.rb @@ -39,6 +39,14 @@ module QA end end + def sign_in_using_credentials + if Runtime::User.ldap_user? + sign_in_using_ldap_credentials + else + sign_in_using_gitlab_credentials + end + end + def sign_in_using_ldap_credentials using_wait_time 0 do set_initial_password_if_present @@ -51,7 +59,7 @@ module QA end end - def sign_in_using_credentials + def sign_in_using_gitlab_credentials using_wait_time 0 do set_initial_password_if_present diff --git a/qa/qa/runtime/env.rb b/qa/qa/runtime/env.rb index 56944e8b641..5401372e225 100644 --- a/qa/qa/runtime/env.rb +++ b/qa/qa/runtime/env.rb @@ -16,6 +16,28 @@ module QA def personal_access_token ENV['PERSONAL_ACCESS_TOKEN'] end + + # By default, "standard" denotes a standard GitLab user login. + # Set this to "ldap" if the user should be logged in via LDAP. + def user_type + (ENV['GITLAB_USER_TYPE'] || 'standard').tap do |type| + unless %w(ldap standard).include?(type) + raise ArgumentError.new("Invalid user type '#{type}': must be 'ldap' or 'standard'") + end + end + end + + def user_username + ENV['GITLAB_USERNAME'] + end + + def user_password + ENV['GITLAB_PASSWORD'] + end + + def sandbox_name + ENV['GITLAB_SANDBOX_NAME'] + end end end end diff --git a/qa/qa/runtime/namespace.rb b/qa/qa/runtime/namespace.rb index a72c2d21898..8d05b387416 100644 --- a/qa/qa/runtime/namespace.rb +++ b/qa/qa/runtime/namespace.rb @@ -16,7 +16,7 @@ module QA end def sandbox_name - 'gitlab-qa-sandbox' + Runtime::Env.sandbox_name || 'gitlab-qa-sandbox' end end end diff --git a/qa/qa/runtime/user.rb b/qa/qa/runtime/user.rb index 60027c89ab1..39e6adf9522 100644 --- a/qa/qa/runtime/user.rb +++ b/qa/qa/runtime/user.rb @@ -4,11 +4,15 @@ module QA extend self def name - ENV['GITLAB_USERNAME'] || 'root' + Runtime::Env.user_username || 'root' end def password - ENV['GITLAB_PASSWORD'] || '5iveL!fe' + Runtime::Env.user_password || '5iveL!fe' + end + + def ldap_user? + Runtime::Env.user_type == 'ldap' end end end diff --git a/qa/qa/service/runner.rb b/qa/qa/service/runner.rb index d0ee33c69f2..c0352e0467a 100644 --- a/qa/qa/service/runner.rb +++ b/qa/qa/service/runner.rb @@ -15,6 +15,14 @@ module QA @tags = %w[qa test] end + def network + shell "docker network inspect #{@network}" + rescue CommandError + 'bridge' + else + @network + end + def pull shell "docker pull #{@image}" end @@ -22,7 +30,7 @@ module QA def register! shell <<~CMD.tr("\n", ' ') docker run -d --rm --entrypoint=/bin/sh - --network #{@network} --name #{@name} + --network #{network} --name #{@name} -e CI_SERVER_URL=#{@address} -e REGISTER_NON_INTERACTIVE=true -e REGISTRATION_TOKEN=#{@token} diff --git a/qa/qa/service/shellout.rb b/qa/qa/service/shellout.rb index 898febde63c..76fb2af6319 100644 --- a/qa/qa/service/shellout.rb +++ b/qa/qa/service/shellout.rb @@ -3,6 +3,8 @@ require 'open3' module QA module Service module Shellout + CommandError = Class.new(StandardError) + ## # TODO, make it possible to use generic QA framework classes # as a library - gitlab-org/gitlab-qa#94 @@ -14,7 +16,7 @@ module QA out.each { |line| puts line } if wait.value.exited? && wait.value.exitstatus.nonzero? - raise "Command `#{command}` failed!" + raise CommandError, "Command `#{command}` failed!" end end end diff --git a/qa/qa/specs/features/project/pipelines_spec.rb b/qa/qa/specs/features/project/pipelines_spec.rb index 1bb7730e06c..74f6474443d 100644 --- a/qa/qa/specs/features/project/pipelines_spec.rb +++ b/qa/qa/specs/features/project/pipelines_spec.rb @@ -69,7 +69,7 @@ module QA tags: - qa - test - script: echo "CONTENTS" > my-artifacts/artifact.txt + script: mkdir my-artifacts; echo "CONTENTS" > my-artifacts/artifact.txt artifacts: paths: - my-artifacts/ @@ -95,7 +95,7 @@ module QA expect(pipeline).to have_build('test-success', status: :success) expect(pipeline).to have_build('test-failure', status: :failed) expect(pipeline).to have_build('test-tags', status: :pending) - expect(pipeline).to have_build('test-artifacts', status: :failed) + expect(pipeline).to have_build('test-artifacts', status: :success) end end end diff --git a/qa/spec/runtime/env_spec.rb b/qa/spec/runtime/env_spec.rb index 103573db6be..2b6365dbc41 100644 --- a/qa/spec/runtime/env_spec.rb +++ b/qa/spec/runtime/env_spec.rb @@ -55,4 +55,25 @@ describe QA::Runtime::Env do end end end + + describe '.user_type' do + it 'returns standard if not defined' do + expect(described_class.user_type).to eq('standard') + end + + it 'returns standard as defined' do + stub_env('GITLAB_USER_TYPE', 'standard') + expect(described_class.user_type).to eq('standard') + end + + it 'returns ldap as defined' do + stub_env('GITLAB_USER_TYPE', 'ldap') + expect(described_class.user_type).to eq('ldap') + end + + it 'returns an error if invalid user type' do + stub_env('GITLAB_USER_TYPE', 'foobar') + expect { described_class.user_type }.to raise_error(ArgumentError) + end + end end diff --git a/spec/controllers/import/bitbucket_controller_spec.rb b/spec/controllers/import/bitbucket_controller_spec.rb index e8707760a5a..2be46049aab 100644 --- a/spec/controllers/import/bitbucket_controller_spec.rb +++ b/spec/controllers/import/bitbucket_controller_spec.rb @@ -84,20 +84,42 @@ describe Import::BitbucketController do double(slug: "vim", owner: bitbucket_username, name: 'vim') end + let(:project) { create(:project) } + before do allow_any_instance_of(Bitbucket::Client).to receive(:repo).and_return(bitbucket_repo) allow_any_instance_of(Bitbucket::Client).to receive(:user).and_return(bitbucket_user) assign_session_tokens end + it 'returns 200 response when the project is imported successfully' do + allow(Gitlab::BitbucketImport::ProjectCreator) + .to receive(:new).with(bitbucket_repo, bitbucket_repo.name, user.namespace, user, access_params) + .and_return(double(execute: project)) + + post :create, format: :json + + expect(response).to have_gitlab_http_status(200) + end + + it 'returns 422 response when the project could not be imported' do + allow(Gitlab::BitbucketImport::ProjectCreator) + .to receive(:new).with(bitbucket_repo, bitbucket_repo.name, user.namespace, user, access_params) + .and_return(double(execute: build(:project))) + + post :create, format: :json + + expect(response).to have_gitlab_http_status(422) + end + context "when the repository owner is the Bitbucket user" do context "when the Bitbucket user and GitLab user's usernames match" do it "takes the current user's namespace" do expect(Gitlab::BitbucketImport::ProjectCreator) .to receive(:new).with(bitbucket_repo, bitbucket_repo.name, user.namespace, user, access_params) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, format: :js + post :create, format: :json end end @@ -107,9 +129,9 @@ describe Import::BitbucketController do it "takes the current user's namespace" do expect(Gitlab::BitbucketImport::ProjectCreator) .to receive(:new).with(bitbucket_repo, bitbucket_repo.name, user.namespace, user, access_params) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, format: :js + post :create, format: :json end end @@ -120,7 +142,7 @@ describe Import::BitbucketController do allow(controller).to receive(:current_user).and_return(user) allow(user).to receive(:can?).and_return(false) - post :create, format: :js + post :create, format: :json end end end @@ -143,9 +165,9 @@ describe Import::BitbucketController do it "takes the existing namespace" do expect(Gitlab::BitbucketImport::ProjectCreator) .to receive(:new).with(bitbucket_repo, bitbucket_repo.name, existing_namespace, user, access_params) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, format: :js + post :create, format: :json end end @@ -154,7 +176,7 @@ describe Import::BitbucketController do expect(Gitlab::BitbucketImport::ProjectCreator) .not_to receive(:new) - post :create, format: :js + post :create, format: :json end end end @@ -163,17 +185,17 @@ describe Import::BitbucketController do context "when current user can create namespaces" do it "creates the namespace" do expect(Gitlab::BitbucketImport::ProjectCreator) - .to receive(:new).and_return(double(execute: true)) + .to receive(:new).and_return(double(execute: project)) - expect { post :create, format: :js }.to change(Namespace, :count).by(1) + expect { post :create, format: :json }.to change(Namespace, :count).by(1) end it "takes the new namespace" do expect(Gitlab::BitbucketImport::ProjectCreator) .to receive(:new).with(bitbucket_repo, bitbucket_repo.name, an_instance_of(Group), user, access_params) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, format: :js + post :create, format: :json end end @@ -184,23 +206,23 @@ describe Import::BitbucketController do it "doesn't create the namespace" do expect(Gitlab::BitbucketImport::ProjectCreator) - .to receive(:new).and_return(double(execute: true)) + .to receive(:new).and_return(double(execute: project)) - expect { post :create, format: :js }.not_to change(Namespace, :count) + expect { post :create, format: :json }.not_to change(Namespace, :count) end it "takes the current user's namespace" do expect(Gitlab::BitbucketImport::ProjectCreator) .to receive(:new).with(bitbucket_repo, bitbucket_repo.name, user.namespace, user, access_params) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, format: :js + post :create, format: :json end end end end - context 'user has chosen an existing nested namespace and name for the project' do + context 'user has chosen an existing nested namespace and name for the project', :postgresql do let(:parent_namespace) { create(:group, name: 'foo', owner: user) } let(:nested_namespace) { create(:group, name: 'bar', parent: parent_namespace) } let(:test_name) { 'test_name' } @@ -212,63 +234,77 @@ describe Import::BitbucketController do it 'takes the selected namespace and name' do expect(Gitlab::BitbucketImport::ProjectCreator) .to receive(:new).with(bitbucket_repo, test_name, nested_namespace, user, access_params) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, { target_namespace: nested_namespace.full_path, new_name: test_name, format: :js } + post :create, { target_namespace: nested_namespace.full_path, new_name: test_name, format: :json } end end - context 'user has chosen a non-existent nested namespaces and name for the project' do + context 'user has chosen a non-existent nested namespaces and name for the project', :postgresql do let(:test_name) { 'test_name' } it 'takes the selected namespace and name' do expect(Gitlab::BitbucketImport::ProjectCreator) .to receive(:new).with(bitbucket_repo, test_name, kind_of(Namespace), user, access_params) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, { target_namespace: 'foo/bar', new_name: test_name, format: :js } + post :create, { target_namespace: 'foo/bar', new_name: test_name, format: :json } end it 'creates the namespaces' do allow(Gitlab::BitbucketImport::ProjectCreator) .to receive(:new).with(bitbucket_repo, test_name, kind_of(Namespace), user, access_params) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - expect { post :create, { target_namespace: 'foo/bar', new_name: test_name, format: :js } } + expect { post :create, { target_namespace: 'foo/bar', new_name: test_name, format: :json } } .to change { Namespace.count }.by(2) end it 'new namespace has the right parent' do allow(Gitlab::BitbucketImport::ProjectCreator) .to receive(:new).with(bitbucket_repo, test_name, kind_of(Namespace), user, access_params) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, { target_namespace: 'foo/bar', new_name: test_name, format: :js } + post :create, { target_namespace: 'foo/bar', new_name: test_name, format: :json } expect(Namespace.find_by_path_or_name('bar').parent.path).to eq('foo') end end - context 'user has chosen existent and non-existent nested namespaces and name for the project' do + context 'user has chosen existent and non-existent nested namespaces and name for the project', :postgresql do let(:test_name) { 'test_name' } let!(:parent_namespace) { create(:group, name: 'foo', owner: user) } + before do + parent_namespace.add_owner(user) + end + it 'takes the selected namespace and name' do expect(Gitlab::BitbucketImport::ProjectCreator) .to receive(:new).with(bitbucket_repo, test_name, kind_of(Namespace), user, access_params) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, { target_namespace: 'foo/foobar/bar', new_name: test_name, format: :js } + post :create, { target_namespace: 'foo/foobar/bar', new_name: test_name, format: :json } end it 'creates the namespaces' do allow(Gitlab::BitbucketImport::ProjectCreator) .to receive(:new).with(bitbucket_repo, test_name, kind_of(Namespace), user, access_params) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - expect { post :create, { target_namespace: 'foo/foobar/bar', new_name: test_name, format: :js } } + expect { post :create, { target_namespace: 'foo/foobar/bar', new_name: test_name, format: :json } } .to change { Namespace.count }.by(2) end end + + context 'when user can not create projects in the chosen namespace' do + it 'returns 422 response' do + other_namespace = create(:group, name: 'other_namespace') + + post :create, { target_namespace: other_namespace.name, format: :json } + + expect(response).to have_gitlab_http_status(422) + end + end end end diff --git a/spec/controllers/import/gitlab_controller_spec.rb b/spec/controllers/import/gitlab_controller_spec.rb index faf1e6f63ea..e958be077c2 100644 --- a/spec/controllers/import/gitlab_controller_spec.rb +++ b/spec/controllers/import/gitlab_controller_spec.rb @@ -57,6 +57,7 @@ describe Import::GitlabController do end describe "POST create" do + let(:project) { create(:project) } let(:gitlab_username) { user.username } let(:gitlab_user) do { username: gitlab_username }.with_indifferent_access @@ -75,14 +76,34 @@ describe Import::GitlabController do assign_session_token end + it 'returns 200 response when the project is imported successfully' do + allow(Gitlab::GitlabImport::ProjectCreator) + .to receive(:new).with(gitlab_repo, user.namespace, user, access_params) + .and_return(double(execute: project)) + + post :create, format: :json + + expect(response).to have_gitlab_http_status(200) + end + + it 'returns 422 response when the project could not be imported' do + allow(Gitlab::GitlabImport::ProjectCreator) + .to receive(:new).with(gitlab_repo, user.namespace, user, access_params) + .and_return(double(execute: build(:project))) + + post :create, format: :json + + expect(response).to have_gitlab_http_status(422) + end + context "when the repository owner is the GitLab.com user" do context "when the GitLab.com user and GitLab server user's usernames match" do it "takes the current user's namespace" do expect(Gitlab::GitlabImport::ProjectCreator) .to receive(:new).with(gitlab_repo, user.namespace, user, access_params) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, format: :js + post :create, format: :json end end @@ -92,9 +113,9 @@ describe Import::GitlabController do it "takes the current user's namespace" do expect(Gitlab::GitlabImport::ProjectCreator) .to receive(:new).with(gitlab_repo, user.namespace, user, access_params) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, format: :js + post :create, format: :json end end end @@ -118,9 +139,9 @@ describe Import::GitlabController do it "takes the existing namespace" do expect(Gitlab::GitlabImport::ProjectCreator) .to receive(:new).with(gitlab_repo, existing_namespace, user, access_params) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, format: :js + post :create, format: :json end end @@ -129,7 +150,7 @@ describe Import::GitlabController do expect(Gitlab::GitlabImport::ProjectCreator) .not_to receive(:new) - post :create, format: :js + post :create, format: :json end end end @@ -138,17 +159,17 @@ describe Import::GitlabController do context "when current user can create namespaces" do it "creates the namespace" do expect(Gitlab::GitlabImport::ProjectCreator) - .to receive(:new).and_return(double(execute: true)) + .to receive(:new).and_return(double(execute: project)) - expect { post :create, format: :js }.to change(Namespace, :count).by(1) + expect { post :create, format: :json }.to change(Namespace, :count).by(1) end it "takes the new namespace" do expect(Gitlab::GitlabImport::ProjectCreator) .to receive(:new).with(gitlab_repo, an_instance_of(Group), user, access_params) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, format: :js + post :create, format: :json end end @@ -159,22 +180,22 @@ describe Import::GitlabController do it "doesn't create the namespace" do expect(Gitlab::GitlabImport::ProjectCreator) - .to receive(:new).and_return(double(execute: true)) + .to receive(:new).and_return(double(execute: project)) - expect { post :create, format: :js }.not_to change(Namespace, :count) + expect { post :create, format: :json }.not_to change(Namespace, :count) end it "takes the current user's namespace" do expect(Gitlab::GitlabImport::ProjectCreator) .to receive(:new).with(gitlab_repo, user.namespace, user, access_params) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, format: :js + post :create, format: :json end end end - context 'user has chosen an existing nested namespace for the project' do + context 'user has chosen an existing nested namespace for the project', :postgresql do let(:parent_namespace) { create(:group, name: 'foo', owner: user) } let(:nested_namespace) { create(:group, name: 'bar', parent: parent_namespace) } @@ -185,64 +206,78 @@ describe Import::GitlabController do it 'takes the selected namespace and name' do expect(Gitlab::GitlabImport::ProjectCreator) .to receive(:new).with(gitlab_repo, nested_namespace, user, access_params) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, { target_namespace: nested_namespace.full_path, format: :js } + post :create, { target_namespace: nested_namespace.full_path, format: :json } end end - context 'user has chosen a non-existent nested namespaces for the project' do + context 'user has chosen a non-existent nested namespaces for the project', :postgresql do let(:test_name) { 'test_name' } it 'takes the selected namespace and name' do expect(Gitlab::GitlabImport::ProjectCreator) .to receive(:new).with(gitlab_repo, kind_of(Namespace), user, access_params) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, { target_namespace: 'foo/bar', format: :js } + post :create, { target_namespace: 'foo/bar', format: :json } end it 'creates the namespaces' do allow(Gitlab::GitlabImport::ProjectCreator) .to receive(:new).with(gitlab_repo, kind_of(Namespace), user, access_params) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - expect { post :create, { target_namespace: 'foo/bar', format: :js } } + expect { post :create, { target_namespace: 'foo/bar', format: :json } } .to change { Namespace.count }.by(2) end it 'new namespace has the right parent' do allow(Gitlab::GitlabImport::ProjectCreator) .to receive(:new).with(gitlab_repo, kind_of(Namespace), user, access_params) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, { target_namespace: 'foo/bar', format: :js } + post :create, { target_namespace: 'foo/bar', format: :json } expect(Namespace.find_by_path_or_name('bar').parent.path).to eq('foo') end end - context 'user has chosen existent and non-existent nested namespaces and name for the project' do + context 'user has chosen existent and non-existent nested namespaces and name for the project', :postgresql do let(:test_name) { 'test_name' } let!(:parent_namespace) { create(:group, name: 'foo', owner: user) } + before do + parent_namespace.add_owner(user) + end + it 'takes the selected namespace and name' do expect(Gitlab::GitlabImport::ProjectCreator) .to receive(:new).with(gitlab_repo, kind_of(Namespace), user, access_params) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, { target_namespace: 'foo/foobar/bar', format: :js } + post :create, { target_namespace: 'foo/foobar/bar', format: :json } end it 'creates the namespaces' do allow(Gitlab::GitlabImport::ProjectCreator) .to receive(:new).with(gitlab_repo, kind_of(Namespace), user, access_params) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - expect { post :create, { target_namespace: 'foo/foobar/bar', format: :js } } + expect { post :create, { target_namespace: 'foo/foobar/bar', format: :json } } .to change { Namespace.count }.by(2) end end + + context 'when user can not create projects in the chosen namespace' do + it 'returns 422 response' do + other_namespace = create(:group, name: 'other_namespace') + + post :create, { target_namespace: other_namespace.name, format: :json } + + expect(response).to have_gitlab_http_status(422) + end + end end end end diff --git a/spec/factories/keys.rb b/spec/factories/keys.rb index 23a98a899f1..f0c43f3d6f5 100644 --- a/spec/factories/keys.rb +++ b/spec/factories/keys.rb @@ -5,10 +5,6 @@ FactoryBot.define do title key { Spec::Support::Helpers::KeyGeneratorHelper.new(1024).generate + ' dummy@gitlab.com' } - factory :key_without_comment do - key { Spec::Support::Helpers::KeyGeneratorHelper.new(1024).generate } - end - factory :deploy_key, class: 'DeployKey' factory :personal_key do diff --git a/spec/features/copy_as_gfm_spec.rb b/spec/features/markdown/copy_as_gfm_spec.rb index f82ed6300cc..f82ed6300cc 100644 --- a/spec/features/copy_as_gfm_spec.rb +++ b/spec/features/markdown/copy_as_gfm_spec.rb diff --git a/spec/features/gitlab_flavored_markdown_spec.rb b/spec/features/markdown/gitlab_flavored_markdown_spec.rb index 3c2186b3598..3c2186b3598 100644 --- a/spec/features/gitlab_flavored_markdown_spec.rb +++ b/spec/features/markdown/gitlab_flavored_markdown_spec.rb diff --git a/spec/features/markdown_spec.rb b/spec/features/markdown/markdown_spec.rb index f13d78d24e3..f13d78d24e3 100644 --- a/spec/features/markdown_spec.rb +++ b/spec/features/markdown/markdown_spec.rb diff --git a/spec/features/markdown/math_spec.rb b/spec/features/markdown/math_spec.rb new file mode 100644 index 00000000000..6a23d6b78ab --- /dev/null +++ b/spec/features/markdown/math_spec.rb @@ -0,0 +1,22 @@ +require 'spec_helper' + +describe 'Math rendering', :js do + it 'renders inline and display math correctly' do + description = <<~MATH + This math is inline $`a^2+b^2=c^2`$. + + This is on a separate line + ```math + a^2+b^2=c^2 + ``` + MATH + + project = create(:project, :public) + issue = create(:issue, project: project, description: description) + + visit project_issue_path(project, issue) + + expect(page).to have_selector('.katex .mord.mathit', text: 'b') + expect(page).to have_selector('.katex-display .mord.mathit', text: 'b') + end +end diff --git a/spec/features/markdown/mermaid_spec.rb b/spec/features/markdown/mermaid_spec.rb new file mode 100644 index 00000000000..a25d701ee35 --- /dev/null +++ b/spec/features/markdown/mermaid_spec.rb @@ -0,0 +1,24 @@ +require 'spec_helper' + +describe 'Mermaid rendering', :js do + it 'renders Mermaid diagrams correctly' do + description = <<~MERMAID + ```mermaid + graph TD; + A-->B; + A-->C; + B-->D; + C-->D; + ``` + MERMAID + + project = create(:project, :public) + issue = create(:issue, project: project, description: description) + + visit project_issue_path(project, issue) + + %w[A B C D].each do |label| + expect(page).to have_selector('svg foreignObject', text: label) + end + end +end diff --git a/spec/finders/snippets_finder_spec.rb b/spec/finders/snippets_finder_spec.rb index 0a018d2b417..54a07eccaba 100644 --- a/spec/finders/snippets_finder_spec.rb +++ b/spec/finders/snippets_finder_spec.rb @@ -1,57 +1,8 @@ require 'spec_helper' describe SnippetsFinder do - let(:user) { create :user } - let(:user1) { create :user } - let(:group) { create :group, :public } - - let(:project1) { create(:project, :public, group: group) } - let(:project2) { create(:project, :private, group: group) } - - context 'all snippets visible to a user' do - let!(:snippet1) { create(:personal_snippet, :private) } - let!(:snippet2) { create(:personal_snippet, :internal) } - let!(:snippet3) { create(:personal_snippet, :public) } - let!(:project_snippet1) { create(:project_snippet, :private) } - let!(:project_snippet2) { create(:project_snippet, :internal) } - let!(:project_snippet3) { create(:project_snippet, :public) } - - it "returns all private and internal snippets" do - snippets = described_class.new(user, scope: :all).execute - expect(snippets).to include(snippet2, snippet3, project_snippet2, project_snippet3) - expect(snippets).not_to include(snippet1, project_snippet1) - end - - it "returns all public snippets" do - snippets = described_class.new(nil, scope: :all).execute - expect(snippets).to include(snippet3, project_snippet3) - expect(snippets).not_to include(snippet1, snippet2, project_snippet1, project_snippet2) - end - - it "returns all public and internal snippets for normal user" do - snippets = described_class.new(user).execute - - expect(snippets).to include(snippet2, snippet3, project_snippet2, project_snippet3) - expect(snippets).not_to include(snippet1, project_snippet1) - end - - it "returns all public snippets for non authorized user" do - snippets = described_class.new(nil).execute - - expect(snippets).to include(snippet3, project_snippet3) - expect(snippets).not_to include(snippet1, snippet2, project_snippet1, project_snippet2) - end - - it "returns all public and authored snippets for external user" do - external_user = create(:user, :external) - authored_snippet = create(:personal_snippet, :internal, author: external_user) - - snippets = described_class.new(external_user).execute - - expect(snippets).to include(snippet3, project_snippet3, authored_snippet) - expect(snippets).not_to include(snippet1, snippet2, project_snippet1, project_snippet2) - end - end + include Gitlab::Allowable + using RSpec::Parameterized::TableSyntax context 'filter by visibility' do let!(:snippet1) { create(:personal_snippet, :private) } @@ -67,6 +18,7 @@ describe SnippetsFinder do end context 'filter by scope' do + let(:user) { create :user } let!(:snippet1) { create(:personal_snippet, :private, author: user) } let!(:snippet2) { create(:personal_snippet, :internal, author: user) } let!(:snippet3) { create(:personal_snippet, :public, author: user) } @@ -84,7 +36,7 @@ describe SnippetsFinder do expect(snippets).not_to include(snippet2, snippet3) end - it "returns all snippets for 'are_interna;' scope" do + it "returns all snippets for 'are_internal' scope" do snippets = described_class.new(user, scope: :are_internal).execute expect(snippets).to include(snippet2) @@ -100,6 +52,8 @@ describe SnippetsFinder do end context 'filter by author' do + let(:user) { create :user } + let(:user1) { create :user } let!(:snippet1) { create(:personal_snippet, :private, author: user) } let!(:snippet2) { create(:personal_snippet, :internal, author: user) } let!(:snippet3) { create(:personal_snippet, :public, author: user) } @@ -147,6 +101,10 @@ describe SnippetsFinder do end context 'filter by project' do + let(:user) { create :user } + let(:group) { create :group, :public } + let(:project1) { create(:project, :public, group: group) } + before do @snippet1 = create(:project_snippet, :private, project: project1) @snippet2 = create(:project_snippet, :internal, project: project1) @@ -203,4 +161,9 @@ describe SnippetsFinder do expect(snippets).to include(@snippet1) end end + + describe "#execute" do + # Snippet visibility scenarios are included in more details in spec/support/snippet_visibility.rb + include_examples 'snippet visibility', described_class + end end diff --git a/spec/javascripts/ci_variable_list/ci_variable_list_spec.js b/spec/javascripts/ci_variable_list/ci_variable_list_spec.js index 6ab7b50e035..8acb346901f 100644 --- a/spec/javascripts/ci_variable_list/ci_variable_list_spec.js +++ b/spec/javascripts/ci_variable_list/ci_variable_list_spec.js @@ -126,7 +126,7 @@ describe('VariableList', () => { // Check for the correct default in the new row const $protectedInput = $wrapper.find('.js-row:last-child').find('.js-ci-variable-input-protected'); - expect($protectedInput.val()).toBe('true'); + expect($protectedInput.val()).toBe('false'); }) .then(done) .catch(done.fail); diff --git a/spec/javascripts/droplab/drop_down_spec.js b/spec/javascripts/droplab/drop_down_spec.js index 1225fe2cb66..896a04a1a07 100644 --- a/spec/javascripts/droplab/drop_down_spec.js +++ b/spec/javascripts/droplab/drop_down_spec.js @@ -1,8 +1,8 @@ import DropDown from '~/droplab/drop_down'; import utils from '~/droplab/utils'; -import { SELECTED_CLASS, IGNORE_CLASS } from '~/droplab/constants'; +import { SELECTED_CLASS } from '~/droplab/constants'; -describe('DropDown', function () { +describe('DropLab DropDown', function () { describe('class constructor', function () { beforeEach(function () { spyOn(DropDown.prototype, 'getItems'); @@ -128,93 +128,131 @@ describe('DropDown', function () { beforeEach(function () { this.classList = jasmine.createSpyObj('classList', ['contains']); this.list = { dispatchEvent: () => {} }; - this.dropdown = { hide: () => {}, list: this.list, addSelectedClass: () => {} }; - this.event = { preventDefault: () => {}, target: { classList: this.classList } }; + this.dropdown = { + hideOnClick: true, + hide: () => {}, + list: this.list, + addSelectedClass: () => {}, + }; + this.event = { + preventDefault: () => {}, + target: { + classList: this.classList, + closest: () => null, + }, + }; this.customEvent = {}; - this.closestElement = {}; + this.dummyListItem = document.createElement('li'); + spyOn(this.event.target, 'closest').and.callFake((selector) => { + if (selector === 'li') { + return this.dummyListItem; + } + + return null; + }); spyOn(this.dropdown, 'hide'); spyOn(this.dropdown, 'addSelectedClass'); spyOn(this.list, 'dispatchEvent'); spyOn(this.event, 'preventDefault'); spyOn(window, 'CustomEvent').and.returnValue(this.customEvent); - spyOn(utils, 'closest').and.returnValues(this.closestElement, undefined); this.classList.contains.and.returnValue(false); + }); + it('should call event.target.closest', function () { DropDown.prototype.clickEvent.call(this.dropdown, this.event); - }); - it('should call utils.closest', function () { - expect(utils.closest).toHaveBeenCalledWith(this.event.target, 'LI'); + expect(this.event.target.closest).toHaveBeenCalledWith('.droplab-item-ignore'); + expect(this.event.target.closest).toHaveBeenCalledWith('li'); }); it('should call addSelectedClass', function () { - expect(this.dropdown.addSelectedClass).toHaveBeenCalledWith(this.closestElement); + DropDown.prototype.clickEvent.call(this.dropdown, this.event); + + expect(this.dropdown.addSelectedClass).toHaveBeenCalledWith(this.dummyListItem); }); it('should call .preventDefault', function () { + DropDown.prototype.clickEvent.call(this.dropdown, this.event); + expect(this.event.preventDefault).toHaveBeenCalled(); }); it('should call .hide', function () { + DropDown.prototype.clickEvent.call(this.dropdown, this.event); + expect(this.dropdown.hide).toHaveBeenCalled(); }); it('should construct CustomEvent', function () { - expect(window.CustomEvent).toHaveBeenCalledWith('click.dl', jasmine.any(Object)); - }); + DropDown.prototype.clickEvent.call(this.dropdown, this.event); - it('should call .classList.contains checking for IGNORE_CLASS', function () { - expect(this.classList.contains).toHaveBeenCalledWith(IGNORE_CLASS); + expect(window.CustomEvent).toHaveBeenCalledWith('click.dl', jasmine.any(Object)); }); it('should call .dispatchEvent with the customEvent', function () { + DropDown.prototype.clickEvent.call(this.dropdown, this.event); + expect(this.list.dispatchEvent).toHaveBeenCalledWith(this.customEvent); }); describe('if the target is a UL element', function () { beforeEach(function () { - this.event = { preventDefault: () => {}, target: { tagName: 'UL', classList: this.classList } }; - - spyOn(this.event, 'preventDefault'); - utils.closest.calls.reset(); + this.event.target = document.createElement('ul'); - DropDown.prototype.clickEvent.call(this.dropdown, this.event); + spyOn(this.event.target, 'closest'); }); it('should return immediately', function () { - expect(utils.closest).not.toHaveBeenCalled(); + DropDown.prototype.clickEvent.call(this.dropdown, this.event); + + expect(this.event.target.closest).not.toHaveBeenCalled(); + expect(this.dropdown.addSelectedClass).not.toHaveBeenCalled(); }); }); - describe('if the target has the IGNORE_CLASS class', function () { + describe('if the target has the droplab-item-ignore class', function () { beforeEach(function () { - this.event = { preventDefault: () => {}, target: { tagName: 'LI', classList: this.classList } }; + this.ignoredButton = document.createElement('button'); + this.ignoredButton.classList.add('droplab-item-ignore'); + this.event.target = this.ignoredButton; - spyOn(this.event, 'preventDefault'); - this.classList.contains.and.returnValue(true); - utils.closest.calls.reset(); + spyOn(this.ignoredButton, 'closest').and.callThrough(); + }); + it('does not select element', function () { DropDown.prototype.clickEvent.call(this.dropdown, this.event); - }); - it('should return immediately', function () { - expect(utils.closest).not.toHaveBeenCalled(); + expect(this.ignoredButton.closest.calls.count()).toBe(1); + expect(this.ignoredButton.closest).toHaveBeenCalledWith('.droplab-item-ignore'); + expect(this.dropdown.addSelectedClass).not.toHaveBeenCalled(); }); }); describe('if no selected element exists', function () { beforeEach(function () { this.event.preventDefault.calls.reset(); - this.clickEvent = DropDown.prototype.clickEvent.call(this.dropdown, this.event); - }); - - it('should return undefined', function () { - expect(this.clickEvent).toBe(undefined); + this.dummyListItem = null; }); it('should return before .preventDefault is called', function () { + DropDown.prototype.clickEvent.call(this.dropdown, this.event); + expect(this.event.preventDefault).not.toHaveBeenCalled(); + expect(this.dropdown.addSelectedClass).not.toHaveBeenCalled(); + }); + }); + + describe('if hideOnClick is false', () => { + beforeEach(function () { + this.dropdown.hideOnClick = false; + this.dropdown.hide.calls.reset(); + }); + + it('should not call .hide', function () { + DropDown.prototype.clickEvent.call(this.dropdown, this.event); + + expect(this.dropdown.hide).not.toHaveBeenCalled(); }); }); }); @@ -278,20 +316,23 @@ describe('DropDown', function () { describe('addEvents', function () { beforeEach(function () { - this.list = { addEventListener: () => {} }; + this.list = { + addEventListener: () => {}, + querySelectorAll: () => [], + }; this.dropdown = { list: this.list, clickEvent: () => {}, closeDropdown: () => {}, eventWrapper: {}, }; + }); + it('should call .addEventListener', function () { spyOn(this.list, 'addEventListener'); DropDown.prototype.addEvents.call(this.dropdown); - }); - it('should call .addEventListener', function () { expect(this.list.addEventListener).toHaveBeenCalledWith('click', jasmine.any(Function)); expect(this.list.addEventListener).toHaveBeenCalledWith('keyup', jasmine.any(Function)); }); diff --git a/spec/javascripts/gpg_badges_spec.js b/spec/javascripts/gpg_badges_spec.js index 7a826487bf9..5decb5e6bbd 100644 --- a/spec/javascripts/gpg_badges_spec.js +++ b/spec/javascripts/gpg_badges_spec.js @@ -1,6 +1,9 @@ +import MockAdapter from 'axios-mock-adapter'; +import axios from '~/lib/utils/axios_utils'; import GpgBadges from '~/gpg_badges'; describe('GpgBadges', () => { + let mock; const dummyCommitSha = 'n0m0rec0ffee'; const dummyBadgeHtml = 'dummy html'; const dummyResponse = { @@ -11,38 +14,43 @@ describe('GpgBadges', () => { }; beforeEach(() => { + mock = new MockAdapter(axios); setFixtures(` + <form + class="commits-search-form" data-signatures-path="/hello" action="/hello" + method="get"> + <input name="utf8" type="hidden" value="✓"> + <input type="search" name="search" id="commits-search"class="form-control search-text-input input-short"> + </form> <div class="parent-container"> <div class="js-loading-gpg-badge" data-commit-sha="${dummyCommitSha}"></div> </div> `); }); - it('displays a loading spinner', () => { - spyOn($, 'get').and.returnValue({ - done() { - // intentionally left blank - }, - }); + afterEach(() => { + mock.restore(); + }); - GpgBadges.fetch(); + it('displays a loading spinner', (done) => { + mock.onGet('/hello').reply(200); - expect(document.querySelector('.js-loading-gpg-badge:empty')).toBe(null); - const spinners = document.querySelectorAll('.js-loading-gpg-badge i.fa.fa-spinner.fa-spin'); - expect(spinners.length).toBe(1); + GpgBadges.fetch().then(() => { + expect(document.querySelector('.js-loading-gpg-badge:empty')).toBe(null); + const spinners = document.querySelectorAll('.js-loading-gpg-badge i.fa.fa-spinner.fa-spin'); + expect(spinners.length).toBe(1); + done(); + }).catch(done.fail); }); - it('replaces the loading spinner', () => { - spyOn($, 'get').and.returnValue({ - done(callback) { - callback(dummyResponse); - }, - }); - - GpgBadges.fetch(); + it('replaces the loading spinner', (done) => { + mock.onGet('/hello').reply(200, dummyResponse); - expect(document.querySelector('.js-loading-gpg-badge')).toBe(null); - const parentContainer = document.querySelector('.parent-container'); - expect(parentContainer.innerHTML.trim()).toEqual(dummyBadgeHtml); + GpgBadges.fetch().then(() => { + expect(document.querySelector('.js-loading-gpg-badge')).toBe(null); + const parentContainer = document.querySelector('.parent-container'); + expect(parentContainer.innerHTML.trim()).toEqual(dummyBadgeHtml); + done(); + }).catch(done.fail); }); }); diff --git a/spec/javascripts/importer_status_spec.js b/spec/javascripts/importer_status_spec.js new file mode 100644 index 00000000000..bb49c576e91 --- /dev/null +++ b/spec/javascripts/importer_status_spec.js @@ -0,0 +1,47 @@ +import { ImporterStatus } from '~/importer_status'; +import axios from '~/lib/utils/axios_utils'; +import MockAdapter from 'axios-mock-adapter'; + +describe('Importer Status', () => { + describe('addToImport', () => { + let instance; + let mock; + const importUrl = '/import_url'; + + beforeEach(() => { + setFixtures(` + <tr id="repo_123"> + <td class="import-target"></td> + <td class="import-actions job-status"> + <button name="button" type="submit" class="btn btn-import js-add-to-import"> + </button> + </td> + </tr> + `); + spyOn(ImporterStatus.prototype, 'initStatusPage').and.callFake(() => {}); + spyOn(ImporterStatus.prototype, 'setAutoUpdate').and.callFake(() => {}); + instance = new ImporterStatus('', importUrl); + mock = new MockAdapter(axios); + }); + + afterEach(() => { + mock.restore(); + }); + + it('sets table row to active after post request', (done) => { + mock.onPost(importUrl).reply(200, { + id: 1, + full_path: '/full_path', + }); + + instance.addToImport({ + currentTarget: document.querySelector('.js-add-to-import'), + }) + .then(() => { + expect(document.querySelector('tr').classList.contains('active')).toEqual(true); + done(); + }) + .catch(done.fail); + }); + }); +}); diff --git a/spec/javascripts/issuable_time_tracker_spec.js b/spec/javascripts/issuable_time_tracker_spec.js index 8ff93c4f918..365e9fe6a4b 100644 --- a/spec/javascripts/issuable_time_tracker_spec.js +++ b/spec/javascripts/issuable_time_tracker_spec.js @@ -2,7 +2,7 @@ import Vue from 'vue'; -import timeTracker from '~/sidebar/components/time_tracking/time_tracker'; +import timeTracker from '~/sidebar/components/time_tracking/time_tracker.vue'; function initTimeTrackingComponent(opts) { setFixtures(` diff --git a/spec/javascripts/notebook/cells/markdown_spec.js b/spec/javascripts/notebook/cells/markdown_spec.js index 02304bf5d7d..8f8ba231ae8 100644 --- a/spec/javascripts/notebook/cells/markdown_spec.js +++ b/spec/javascripts/notebook/cells/markdown_spec.js @@ -1,6 +1,6 @@ import Vue from 'vue'; import MarkdownComponent from '~/notebook/cells/markdown.vue'; -import katex from 'vendor/katex'; +import katex from 'katex'; const Component = Vue.extend(MarkdownComponent); diff --git a/spec/javascripts/notes/helpers.js b/spec/javascripts/notes/helpers.js new file mode 100644 index 00000000000..a7663710a56 --- /dev/null +++ b/spec/javascripts/notes/helpers.js @@ -0,0 +1,12 @@ +// eslint-disable-next-line import/prefer-default-export +export const resetStore = (store) => { + store.replaceState({ + notes: [], + targetNoteHash: null, + lastFetchedAt: null, + + notesData: {}, + userData: {}, + noteableData: {}, + }); +}; diff --git a/spec/javascripts/notes/mock_data.js b/spec/javascripts/notes/mock_data.js index f0c800c759d..ccf4bd070c2 100644 --- a/spec/javascripts/notes/mock_data.js +++ b/spec/javascripts/notes/mock_data.js @@ -7,6 +7,8 @@ export const notesDataMock = { notesPath: '/gitlab-org/gitlab-ce/noteable/issue/98/notes', quickActionsDocsPath: '/help/user/project/quick_actions', registerPath: '/users/sign_in?redirect_to_referer=yes#register-pane', + closeIssuePath: '/twitter/flight/issues/9.json?issue%5Bstate_event%5D=close', + reopenIssuePath: '/twitter/flight/issues/9.json?issue%5Bstate_event%5D=reopen', }; export const userDataMock = { diff --git a/spec/javascripts/notes/stores/actions_spec.js b/spec/javascripts/notes/stores/actions_spec.js index e092320f9a3..ab80ed7bbfb 100644 --- a/spec/javascripts/notes/stores/actions_spec.js +++ b/spec/javascripts/notes/stores/actions_spec.js @@ -1,8 +1,16 @@ +import Vue from 'vue'; +import _ from 'underscore'; import * as actions from '~/notes/stores/actions'; +import store from '~/notes/stores'; import testAction from '../../helpers/vuex_action_helper'; +import { resetStore } from '../helpers'; import { discussionMock, notesDataMock, userDataMock, noteableDataMock, individualNote } from '../mock_data'; describe('Actions Notes Store', () => { + afterEach(() => { + resetStore(store); + }); + describe('setNotesData', () => { it('should set received notes data', (done) => { testAction(actions.setNotesData, null, { notesData: {} }, [ @@ -58,4 +66,67 @@ describe('Actions Notes Store', () => { ], done); }); }); + + describe('async methods', () => { + const interceptor = (request, next) => { + next(request.respondWith(JSON.stringify({}), { + status: 200, + })); + }; + + beforeEach(() => { + Vue.http.interceptors.push(interceptor); + }); + + afterEach(() => { + Vue.http.interceptors = _.without(Vue.http.interceptors, interceptor); + }); + + describe('closeIssue', () => { + it('sets state as closed', (done) => { + store.dispatch('closeIssue', { notesData: { closeIssuePath: '' } }) + .then(() => { + expect(store.state.noteableData.state).toEqual('closed'); + done(); + }) + .catch(done.fail); + }); + }); + + describe('reopenIssue', () => { + it('sets state as reopened', (done) => { + store.dispatch('reopenIssue', { notesData: { reopenIssuePath: '' } }) + .then(() => { + expect(store.state.noteableData.state).toEqual('reopened'); + done(); + }) + .catch(done.fail); + }); + }); + }); + + describe('emitStateChangedEvent', () => { + it('emits an event on the document', () => { + document.addEventListener('issuable_vue_app:change', (event) => { + expect(event.detail.data).toEqual({ id: '1', state: 'closed' }); + expect(event.detail.isClosed).toEqual(false); + }); + + store.dispatch('emitStateChangedEvent', { id: '1', state: 'closed' }); + }); + }); + + describe('toggleIssueLocalState', () => { + it('sets issue state as closed', (done) => { + testAction(actions.toggleIssueLocalState, 'closed', {}, [ + { type: 'CLOSE_ISSUE', payload: 'closed' }, + ], done); + }); + + it('sets issue state as reopened', (done) => { + testAction(actions.toggleIssueLocalState, 'reopened', {}, [ + { type: 'REOPEN_ISSUE', payload: 'reopened' }, + ], done); + }); + }); }); diff --git a/spec/javascripts/notes/stores/getters_spec.js b/spec/javascripts/notes/stores/getters_spec.js index c5a84b71788..919ffbfdef0 100644 --- a/spec/javascripts/notes/stores/getters_spec.js +++ b/spec/javascripts/notes/stores/getters_spec.js @@ -55,4 +55,10 @@ describe('Getters Notes Store', () => { expect(getters.getCurrentUserLastNote(state)).toEqual(individualNote.notes[0]); }); }); + + describe('issueState', () => { + it('should return the issue state', () => { + expect(getters.issueState(state)).toEqual(noteableDataMock.state); + }); + }); }); diff --git a/spec/javascripts/vue_mr_widget/components/states/mr_widget_missing_branch_spec.js b/spec/javascripts/vue_mr_widget/components/states/mr_widget_missing_branch_spec.js index 720effb5c1c..3d7f4abd420 100644 --- a/spec/javascripts/vue_mr_widget/components/states/mr_widget_missing_branch_spec.js +++ b/spec/javascripts/vue_mr_widget/components/states/mr_widget_missing_branch_spec.js @@ -1,38 +1,22 @@ import Vue from 'vue'; -import missingBranchComponent from '~/vue_merge_request_widget/components/states/mr_widget_missing_branch'; - -const createComponent = () => { - const Component = Vue.extend(missingBranchComponent); - const mr = { - sourceBranchRemoved: true, - }; - - return new Component({ - el: document.createElement('div'), - propsData: { mr }, - }); -}; +import missingBranchComponent from '~/vue_merge_request_widget/components/states/mr_widget_missing_branch.vue'; +import mountComponent from '../../../helpers/vue_mount_component_helper'; describe('MRWidgetMissingBranch', () => { - describe('props', () => { - it('should have props', () => { - const mrProp = missingBranchComponent.props.mr; + let vm; - expect(mrProp.type instanceof Object).toBeTruthy(); - expect(mrProp.required).toBeTruthy(); - }); + beforeEach(() => { + const Component = Vue.extend(missingBranchComponent); + vm = mountComponent(Component, { mr: { sourceBranchRemoved: true } }); }); - describe('components', () => { - it('should have components added', () => { - expect(missingBranchComponent.components['mr-widget-merge-help']).toBeDefined(); - }); + afterEach(() => { + vm.$destroy(); }); describe('computed', () => { describe('missingBranchName', () => { it('should return proper branch name', () => { - const vm = createComponent(); expect(vm.missingBranchName).toEqual('source'); vm.mr.sourceBranchRemoved = false; @@ -43,7 +27,7 @@ describe('MRWidgetMissingBranch', () => { describe('template', () => { it('should have correct elements', () => { - const el = createComponent().$el; + const el = vm.$el; const content = el.textContent.replace(/\n(\s)+/g, ' ').trim(); expect(el.classList.contains('mr-widget-body')).toBeTruthy(); diff --git a/spec/javascripts/vue_shared/components/confirmation_input_spec.js b/spec/javascripts/vue_shared/components/confirmation_input_spec.js deleted file mode 100644 index a6a12614e77..00000000000 --- a/spec/javascripts/vue_shared/components/confirmation_input_spec.js +++ /dev/null @@ -1,63 +0,0 @@ -import Vue from 'vue'; -import confirmationInput from '~/vue_shared/components/confirmation_input.vue'; -import mountComponent from '../../helpers/vue_mount_component_helper'; - -describe('Confirmation input component', () => { - const Component = Vue.extend(confirmationInput); - const props = { - inputId: 'dummy-id', - confirmationKey: 'confirmation-key', - confirmationValue: 'confirmation-value', - }; - let vm; - - afterEach(() => { - vm.$destroy(); - }); - - describe('props', () => { - beforeEach(() => { - vm = mountComponent(Component, props); - }); - - it('sets id of the input field to inputId', () => { - expect(vm.$refs.enteredValue.id).toBe(props.inputId); - }); - - it('sets name of the input field to confirmationKey', () => { - expect(vm.$refs.enteredValue.name).toBe(props.confirmationKey); - }); - }); - - describe('computed', () => { - describe('inputLabel', () => { - it('escapes confirmationValue by default', () => { - vm = mountComponent(Component, { ...props, confirmationValue: 'n<e></e>ds escap"ng' }); - expect(vm.inputLabel).toBe('Type <code>n<e></e>ds escap"ng</code> to confirm:'); - }); - - it('does not escape confirmationValue if escapeValue is false', () => { - vm = mountComponent(Component, { ...props, confirmationValue: 'n<e></e>ds escap"ng', shouldEscapeConfirmationValue: false }); - expect(vm.inputLabel).toBe('Type <code>n<e></e>ds escap"ng</code> to confirm:'); - }); - }); - }); - - describe('methods', () => { - describe('hasCorrectValue', () => { - beforeEach(() => { - vm = mountComponent(Component, props); - }); - - it('returns false if entered value is incorrect', () => { - vm.$refs.enteredValue.value = 'incorrect'; - expect(vm.hasCorrectValue()).toBe(false); - }); - - it('returns true if entered value is correct', () => { - vm.$refs.enteredValue.value = props.confirmationValue; - expect(vm.hasCorrectValue()).toBe(true); - }); - }); - }); -}); diff --git a/spec/lib/banzai/filter/syntax_highlight_filter_spec.rb b/spec/lib/banzai/filter/syntax_highlight_filter_spec.rb index 9f2efa05a01..ef52c572898 100644 --- a/spec/lib/banzai/filter/syntax_highlight_filter_spec.rb +++ b/spec/lib/banzai/filter/syntax_highlight_filter_spec.rb @@ -3,35 +3,86 @@ require 'spec_helper' describe Banzai::Filter::SyntaxHighlightFilter do include FilterSpecHelper + shared_examples "XSS prevention" do |lang| + it "escapes HTML tags" do + # This is how a script tag inside a code block is presented to this filter + # after Markdown rendering. + result = filter(%{<pre lang="#{lang}"><code><script>alert(1)</script></code></pre>}) + + expect(result.to_html).not_to include("<script>alert(1)</script>") + expect(result.to_html).to include("alert(1)") + end + end + context "when no language is specified" do it "highlights as plaintext" do result = filter('<pre><code>def fun end</code></pre>') + expect(result.to_html).to eq('<pre class="code highlight js-syntax-highlight plaintext" lang="plaintext" v-pre="true"><code><span id="LC1" class="line" lang="plaintext">def fun end</span></code></pre>') end + + include_examples "XSS prevention", "" end context "when a valid language is specified" do it "highlights as that language" do result = filter('<pre><code lang="ruby">def fun end</code></pre>') + expect(result.to_html).to eq('<pre class="code highlight js-syntax-highlight ruby" lang="ruby" v-pre="true"><code><span id="LC1" class="line" lang="ruby"><span class="k">def</span> <span class="nf">fun</span> <span class="k">end</span></span></code></pre>') end + + include_examples "XSS prevention", "ruby" end context "when an invalid language is specified" do it "highlights as plaintext" do result = filter('<pre><code lang="gnuplot">This is a test</code></pre>') + expect(result.to_html).to eq('<pre class="code highlight js-syntax-highlight plaintext" lang="plaintext" v-pre="true"><code><span id="LC1" class="line" lang="plaintext">This is a test</span></code></pre>') end + + include_examples "XSS prevention", "gnuplot" end - context "when Rouge formatting fails" do + context "languages that should be passed through" do + %w(math mermaid plantuml).each do |lang| + context "when #{lang} is specified" do + it "highlights as plaintext but with the correct language attribute and class" do + result = filter(%{<pre><code lang="#{lang}">This is a test</code></pre>}) + + expect(result.to_html).to eq(%{<pre class="code highlight js-syntax-highlight #{lang}" lang="#{lang}" v-pre="true"><code><span id="LC1" class="line" lang="#{lang}">This is a test</span></code></pre>}) + end + + include_examples "XSS prevention", lang + end + end + end + + context "when Rouge lexing fails" do before do - allow_any_instance_of(Rouge::Formatter).to receive(:format).and_raise(StandardError) + allow_any_instance_of(Rouge::Lexers::Ruby).to receive(:stream_tokens).and_raise(StandardError) end it "highlights as plaintext" do result = filter('<pre><code lang="ruby">This is a test</code></pre>') - expect(result.to_html).to eq('<pre class="code highlight js-syntax-highlight" lang="" v-pre="true"><code>This is a test</code></pre>') + + expect(result.to_html).to eq('<pre class="code highlight js-syntax-highlight" lang="" v-pre="true"><code><span id="LC1" class="line" lang="">This is a test</span></code></pre>') + end + + include_examples "XSS prevention", "ruby" + end + + context "when Rouge lexing fails after a retry" do + before do + allow_any_instance_of(Rouge::Lexers::PlainText).to receive(:stream_tokens).and_raise(StandardError) + end + + it "does not add highlighting classes" do + result = filter('<pre><code>This is a test</code></pre>') + + expect(result.to_html).to eq('<pre><code>This is a test</code></pre>') end + + include_examples "XSS prevention", "ruby" end end diff --git a/spec/lib/gitlab/background_migration/populate_untracked_uploads_spec.rb b/spec/lib/gitlab/background_migration/populate_untracked_uploads_spec.rb index 8590522f3ef..fb3f29ff4c9 100644 --- a/spec/lib/gitlab/background_migration/populate_untracked_uploads_spec.rb +++ b/spec/lib/gitlab/background_migration/populate_untracked_uploads_spec.rb @@ -1,6 +1,11 @@ require 'spec_helper' -describe Gitlab::BackgroundMigration::PopulateUntrackedUploads, :sidekiq do +# This migration is using UploadService, which sets uploads.secret that is only +# added to the DB schema in 20180129193323. Since the test isn't isolated, we +# just use the latest schema when testing this migration. +# Ideally, the test should not use factories nor UploadService, and rely on the +# `table` helper instead. +describe Gitlab::BackgroundMigration::PopulateUntrackedUploads, :sidekiq, :migration, schema: 20180129193323 do include TrackUntrackedUploadsHelpers subject { described_class.new } diff --git a/spec/lib/gitlab/background_migration/prepare_untracked_uploads_spec.rb b/spec/lib/gitlab/background_migration/prepare_untracked_uploads_spec.rb index 48204114ae8..43f3548eadc 100644 --- a/spec/lib/gitlab/background_migration/prepare_untracked_uploads_spec.rb +++ b/spec/lib/gitlab/background_migration/prepare_untracked_uploads_spec.rb @@ -8,8 +8,6 @@ describe Gitlab::BackgroundMigration::PrepareUntrackedUploads, :sidekiq do before do DatabaseCleaner.clean - - drop_temp_table_if_exists end after do @@ -23,57 +21,7 @@ describe Gitlab::BackgroundMigration::PrepareUntrackedUploads, :sidekiq do end end - # E.g. The installation is in use at the time of migration, and someone has - # just uploaded a file - shared_examples 'does not add files in /uploads/tmp' do - let(:tmp_file) { Rails.root.join(described_class::ABSOLUTE_UPLOAD_DIR, 'tmp', 'some_file.jpg') } - - before do - FileUtils.mkdir(File.dirname(tmp_file)) - FileUtils.touch(tmp_file) - end - - after do - FileUtils.rm(tmp_file) - end - - it 'does not add files from /uploads/tmp' do - described_class.new.perform - - expect(untracked_files_for_uploads.count).to eq(5) - end - end - - it 'ensures the untracked_files_for_uploads table exists' do - expect do - described_class.new.perform - end.to change { ActiveRecord::Base.connection.table_exists?(:untracked_files_for_uploads) }.from(false).to(true) - end - - it 'has a path field long enough for really long paths' do - described_class.new.perform - - component = 'a' * 255 - - long_path = [ - 'uploads', - component, # project.full_path - component # filename - ].flatten.join('/') - - record = untracked_files_for_uploads.create!(path: long_path) - expect(record.reload.path.size).to eq(519) - end - - context "test bulk insert with ON CONFLICT DO NOTHING or IGNORE" do - around do |example| - # If this is CI, we use Postgres 9.2 so this whole context should be - # skipped since we're unable to use ON CONFLICT DO NOTHING or IGNORE. - if described_class.new.send(:can_bulk_insert_and_ignore_duplicates?) - example.run - end - end - + shared_examples 'prepares the untracked_files_for_uploads table' do context 'when files were uploaded before and after hashed storage was enabled' do let!(:appearance) { create_or_update_appearance(logo: uploaded_file, header_logo: uploaded_file) } let!(:user) { create(:user, :with_avatar) } @@ -90,6 +38,21 @@ describe Gitlab::BackgroundMigration::PrepareUntrackedUploads, :sidekiq do UploadService.new(project2, uploaded_file, FileUploader).execute end + it 'has a path field long enough for really long paths' do + described_class.new.perform + + component = 'a' * 255 + + long_path = [ + 'uploads', + component, # project.full_path + component # filename + ].flatten.join('/') + + record = untracked_files_for_uploads.create!(path: long_path) + expect(record.reload.path.size).to eq(519) + end + it 'adds unhashed files to the untracked_files_for_uploads table' do described_class.new.perform @@ -130,91 +93,66 @@ describe Gitlab::BackgroundMigration::PrepareUntrackedUploads, :sidekiq do end end + # E.g. The installation is in use at the time of migration, and someone has + # just uploaded a file context 'when there are files in /uploads/tmp' do - it_behaves_like 'does not add files in /uploads/tmp' - end - end - end - - context 'test bulk insert without ON CONFLICT DO NOTHING or IGNORE' do - before do - # If this is CI, we use Postgres 9.2 so this stub has no effect. - # - # If this is being run on Postgres 9.5+ or MySQL, then this stub allows us - # to test the bulk insert functionality without ON CONFLICT DO NOTHING or - # IGNORE. - allow_any_instance_of(described_class).to receive(:postgresql_pre_9_5?).and_return(true) - end - - context 'when files were uploaded before and after hashed storage was enabled' do - let!(:appearance) { create_or_update_appearance(logo: uploaded_file, header_logo: uploaded_file) } - let!(:user) { create(:user, :with_avatar) } - let!(:project1) { create(:project, :with_avatar, :legacy_storage) } - let(:project2) { create(:project) } # instantiate after enabling hashed_storage - - before do - # Markdown upload before enabling hashed_storage - UploadService.new(project1, uploaded_file, FileUploader).execute + let(:tmp_file) { Rails.root.join(described_class::ABSOLUTE_UPLOAD_DIR, 'tmp', 'some_file.jpg') } - stub_application_setting(hashed_storage_enabled: true) - - # Markdown upload after enabling hashed_storage - UploadService.new(project2, uploaded_file, FileUploader).execute - end - - it 'adds unhashed files to the untracked_files_for_uploads table' do - described_class.new.perform - - expect(untracked_files_for_uploads.count).to eq(5) - end - - it 'adds files with paths relative to CarrierWave.root' do - described_class.new.perform - untracked_files_for_uploads.all.each do |file| - expect(file.path.start_with?('uploads/')).to be_truthy + before do + FileUtils.mkdir(File.dirname(tmp_file)) + FileUtils.touch(tmp_file) end - end - - it 'does not add hashed files to the untracked_files_for_uploads table' do - described_class.new.perform - hashed_file_path = project2.uploads.where(uploader: 'FileUploader').first.path - expect(untracked_files_for_uploads.where("path like '%#{hashed_file_path}%'").exists?).to be_falsey - end + after do + FileUtils.rm(tmp_file) + end - it 'correctly schedules the follow-up background migration jobs' do - described_class.new.perform + it 'does not add files from /uploads/tmp' do + described_class.new.perform - expect(described_class::FOLLOW_UP_MIGRATION).to be_scheduled_migration(1, 5) - expect(BackgroundMigrationWorker.jobs.size).to eq(1) + expect(untracked_files_for_uploads.count).to eq(5) + end end - # E.g. from a previous failed run of this background migration - context 'when there is existing data in untracked_files_for_uploads' do - before do - described_class.new.perform - end + context 'when the last batch size exactly matches the max batch size' do + it 'does not raise error' do + stub_const("#{described_class}::FIND_BATCH_SIZE", 5) - it 'does not error or produce duplicates of existing data' do expect do described_class.new.perform - end.not_to change { untracked_files_for_uploads.count }.from(5) + end.not_to raise_error + + expect(untracked_files_for_uploads.count).to eq(5) end end + end + end - context 'when there are files in /uploads/tmp' do - it_behaves_like 'does not add files in /uploads/tmp' - end + # If running on Postgres 9.2 (like on CI), this whole context is skipped + # since we're unable to use ON CONFLICT DO NOTHING or IGNORE. + context "test bulk insert with ON CONFLICT DO NOTHING or IGNORE", if: described_class.new.send(:can_bulk_insert_and_ignore_duplicates?) do + it_behaves_like 'prepares the untracked_files_for_uploads table' + end + + # If running on Postgres 9.2 (like on CI), the stubbed method has no effect. + # + # If running on Postgres 9.5+ or MySQL, then this context effectively tests + # the bulk insert functionality without ON CONFLICT DO NOTHING or IGNORE. + context 'test bulk insert without ON CONFLICT DO NOTHING or IGNORE' do + before do + allow_any_instance_of(described_class).to receive(:postgresql_pre_9_5?).and_return(true) end + + it_behaves_like 'prepares the untracked_files_for_uploads table' end # Very new or lightly-used installations that are running this migration # may not have an upload directory because they have no uploads. context 'when no files were ever uploaded' do - it 'does not add to the untracked_files_for_uploads table (and does not raise error)' do + it 'deletes the `untracked_files_for_uploads` table (and does not raise error)' do described_class.new.perform - expect(untracked_files_for_uploads.count).to eq(0) + expect(untracked_files_for_uploads.connection.table_exists?(:untracked_files_for_uploads)).to be_falsey end end end diff --git a/spec/lib/gitlab/encoding_helper_spec.rb b/spec/lib/gitlab/encoding_helper_spec.rb index 4e9367323cb..83d431a7458 100644 --- a/spec/lib/gitlab/encoding_helper_spec.rb +++ b/spec/lib/gitlab/encoding_helper_spec.rb @@ -24,6 +24,11 @@ describe Gitlab::EncodingHelper do 'removes invalid bytes from ASCII-8bit encoded multibyte string. This can occur when a git diff match line truncates in the middle of a multibyte character. This occurs after the second word in this example. The test string is as short as we can get while still triggering the error condition when not looking at `detect[:confidence]`.', "mu ns\xC3\n Lorem ipsum dolor sit amet, consectetur adipisicing ut\xC3\xA0y\xC3\xB9abcd\xC3\xB9efg kia elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non p\n {: .normal_pn}\n \n-Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in\n# *Lorem ipsum\xC3\xB9l\xC3\xB9l\xC3\xA0 dolor\xC3\xB9k\xC3\xB9 sit\xC3\xA8b\xC3\xA8 N\xC3\xA8 amet b\xC3\xA0d\xC3\xAC*\n+# *consectetur\xC3\xB9l\xC3\xB9l\xC3\xA0 adipisicing\xC3\xB9k\xC3\xB9 elit\xC3\xA8b\xC3\xA8 N\xC3\xA8 sed do\xC3\xA0d\xC3\xAC*{: .italic .smcaps}\n \n \xEF\x9B\xA1 eiusmod tempor incididunt, ut\xC3\xAAn\xC3\xB9 labore et dolore. Tw\xC4\x83nj\xC3\xAC magna aliqua. Ut enim ad minim veniam\n {: .normal}\n@@ -9,5 +9,5 @@ quis nostrud\xC3\xAAt\xC3\xB9 exercitiation ullamco laboris m\xC3\xB9s\xC3\xB9k\xC3\xB9abc\xC3\xB9 nisi ".force_encoding('ASCII-8BIT'), "mu ns\n Lorem ipsum dolor sit amet, consectetur adipisicing ut\xC3\xA0y\xC3\xB9abcd\xC3\xB9efg kia elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non p\n {: .normal_pn}\n \n-Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in\n# *Lorem ipsum\xC3\xB9l\xC3\xB9l\xC3\xA0 dolor\xC3\xB9k\xC3\xB9 sit\xC3\xA8b\xC3\xA8 N\xC3\xA8 amet b\xC3\xA0d\xC3\xAC*\n+# *consectetur\xC3\xB9l\xC3\xB9l\xC3\xA0 adipisicing\xC3\xB9k\xC3\xB9 elit\xC3\xA8b\xC3\xA8 N\xC3\xA8 sed do\xC3\xA0d\xC3\xAC*{: .italic .smcaps}\n \n \xEF\x9B\xA1 eiusmod tempor incididunt, ut\xC3\xAAn\xC3\xB9 labore et dolore. Tw\xC4\x83nj\xC3\xAC magna aliqua. Ut enim ad minim veniam\n {: .normal}\n@@ -9,5 +9,5 @@ quis nostrud\xC3\xAAt\xC3\xB9 exercitiation ullamco laboris m\xC3\xB9s\xC3\xB9k\xC3\xB9abc\xC3\xB9 nisi " + ], + [ + 'string with detected encoding that is not supported in Ruby', + "\xFFe,i\xFF,\xB8oi,'\xB8,\xFF,-", + "--broken encoding: IBM420_ltr" ] ].each do |description, test_string, xpect| it description do diff --git a/spec/lib/gitlab/import_export/wiki_restorer_spec.rb b/spec/lib/gitlab/import_export/wiki_restorer_spec.rb new file mode 100644 index 00000000000..81b654e9c5f --- /dev/null +++ b/spec/lib/gitlab/import_export/wiki_restorer_spec.rb @@ -0,0 +1,45 @@ +require 'spec_helper' + +describe Gitlab::ImportExport::WikiRestorer do + describe 'restore a wiki Git repo' do + let!(:project_with_wiki) { create(:project, :wiki_repo) } + let!(:project_without_wiki) { create(:project) } + let!(:project) { create(:project) } + let(:export_path) { "#{Dir.tmpdir}/project_tree_saver_spec" } + let(:shared) { Gitlab::ImportExport::Shared.new(relative_path: project.full_path) } + let(:bundler) { Gitlab::ImportExport::WikiRepoSaver.new(project: project_with_wiki, shared: shared) } + let(:bundle_path) { File.join(shared.export_path, Gitlab::ImportExport.project_bundle_filename) } + let(:restorer) do + described_class.new(path_to_bundle: bundle_path, + shared: shared, + project: project.wiki, + wiki_enabled: true) + end + + before do + allow(Gitlab::ImportExport).to receive(:storage_path).and_return(export_path) + + bundler.save + end + + after do + FileUtils.rm_rf(export_path) + Gitlab::Shell.new.remove_repository(project_with_wiki.wiki.repository_storage_path, project_with_wiki.wiki.disk_path) + Gitlab::Shell.new.remove_repository(project.wiki.repository_storage_path, project.wiki.disk_path) + end + + it 'restores the wiki repo successfully' do + expect(restorer.restore).to be true + end + + describe "no wiki in the bundle" do + let(:bundler) { Gitlab::ImportExport::WikiRepoSaver.new(project: project_without_wiki, shared: shared) } + + it 'creates an empty wiki' do + expect(restorer.restore).to be true + + expect(project.wiki_repository_exists?).to be true + end + end + end +end diff --git a/spec/lib/gitlab/middleware/multipart_spec.rb b/spec/lib/gitlab/middleware/multipart_spec.rb index 8d925460f01..a2ba91dae80 100644 --- a/spec/lib/gitlab/middleware/multipart_spec.rb +++ b/spec/lib/gitlab/middleware/multipart_spec.rb @@ -5,15 +5,17 @@ require 'tempfile' describe Gitlab::Middleware::Multipart do let(:app) { double(:app) } let(:middleware) { described_class.new(app) } + let(:original_filename) { 'filename' } it 'opens top-level files' do Tempfile.open('top-level') do |tempfile| - env = post_env({ 'file' => tempfile.path }, { 'file.name' => 'filename' }, Gitlab::Workhorse.secret, 'gitlab-workhorse') + env = post_env({ 'file' => tempfile.path }, { 'file.name' => original_filename }, Gitlab::Workhorse.secret, 'gitlab-workhorse') expect(app).to receive(:call) do |env| file = Rack::Request.new(env).params['file'] expect(file).to be_a(::UploadedFile) expect(file.path).to eq(tempfile.path) + expect(file.original_filename).to eq(original_filename) end middleware.call(env) @@ -34,13 +36,14 @@ describe Gitlab::Middleware::Multipart do it 'opens files one level deep' do Tempfile.open('one-level') do |tempfile| - in_params = { 'user' => { 'avatar' => { '.name' => 'filename' } } } + in_params = { 'user' => { 'avatar' => { '.name' => original_filename } } } env = post_env({ 'user[avatar]' => tempfile.path }, in_params, Gitlab::Workhorse.secret, 'gitlab-workhorse') expect(app).to receive(:call) do |env| file = Rack::Request.new(env).params['user']['avatar'] expect(file).to be_a(::UploadedFile) expect(file.path).to eq(tempfile.path) + expect(file.original_filename).to eq(original_filename) end middleware.call(env) @@ -49,13 +52,14 @@ describe Gitlab::Middleware::Multipart do it 'opens files two levels deep' do Tempfile.open('two-levels') do |tempfile| - in_params = { 'project' => { 'milestone' => { 'themesong' => { '.name' => 'filename' } } } } + in_params = { 'project' => { 'milestone' => { 'themesong' => { '.name' => original_filename } } } } env = post_env({ 'project[milestone][themesong]' => tempfile.path }, in_params, Gitlab::Workhorse.secret, 'gitlab-workhorse') expect(app).to receive(:call) do |env| file = Rack::Request.new(env).params['project']['milestone']['themesong'] expect(file).to be_a(::UploadedFile) expect(file.path).to eq(tempfile.path) + expect(file.original_filename).to eq(original_filename) end middleware.call(env) diff --git a/spec/lib/gitlab/query_limiting_spec.rb b/spec/lib/gitlab/query_limiting_spec.rb index 2eddab0b8c3..42877b1e2dd 100644 --- a/spec/lib/gitlab/query_limiting_spec.rb +++ b/spec/lib/gitlab/query_limiting_spec.rb @@ -12,14 +12,16 @@ describe Gitlab::QueryLimiting do expect(described_class.enable?).to eq(true) end - it 'returns true on GitLab.com' do + it 'returns false on GitLab.com' do + expect(Rails.env).to receive(:development?).and_return(false) + expect(Rails.env).to receive(:test?).and_return(false) allow(Gitlab).to receive(:com?).and_return(true) - expect(described_class.enable?).to eq(true) + expect(described_class.enable?).to eq(false) end - it 'returns true in a non GitLab.com' do - expect(Gitlab).to receive(:com?).and_return(false) + it 'returns false in a non GitLab.com' do + allow(Gitlab).to receive(:com?).and_return(false) expect(Rails.env).to receive(:development?).and_return(false) expect(Rails.env).to receive(:test?).and_return(false) diff --git a/spec/lib/gitlab/ssh_public_key_spec.rb b/spec/lib/gitlab/ssh_public_key_spec.rb index c15e29774b6..93d538141ce 100644 --- a/spec/lib/gitlab/ssh_public_key_spec.rb +++ b/spec/lib/gitlab/ssh_public_key_spec.rb @@ -37,41 +37,6 @@ describe Gitlab::SSHPublicKey, lib: true do end end - describe '.sanitize(key_content)' do - let(:content) { build(:key).key } - - context 'when key has blank space characters' do - it 'removes the extra blank space characters' do - unsanitized = content.insert(100, "\n") - .insert(40, "\r\n") - .insert(30, ' ') - - sanitized = described_class.sanitize(unsanitized) - _, body = sanitized.split - - expect(sanitized).not_to eq(unsanitized) - expect(body).not_to match(/\s/) - end - end - - context "when key doesn't have blank space characters" do - it "doesn't modify the content" do - sanitized = described_class.sanitize(content) - - expect(sanitized).to eq(content) - end - end - - context "when key is invalid" do - it 'returns the original content' do - unsanitized = "ssh-foo any content==" - sanitized = described_class.sanitize(unsanitized) - - expect(sanitized).to eq(unsanitized) - end - end - end - describe '#valid?' do subject { public_key } diff --git a/spec/migrations/rename_reserved_project_names_spec.rb b/spec/migrations/rename_reserved_project_names_spec.rb index e6555b1fe6b..34336d705b1 100644 --- a/spec/migrations/rename_reserved_project_names_spec.rb +++ b/spec/migrations/rename_reserved_project_names_spec.rb @@ -3,10 +3,14 @@ require 'spec_helper' require Rails.root.join('db', 'post_migrate', '20161221153951_rename_reserved_project_names.rb') -# This migration uses multiple threads, and thus different transactions. This -# means data created in this spec may not be visible to some threads. To work -# around this we use the DELETE cleaning strategy. -describe RenameReservedProjectNames, :delete do +# This migration is using factories, which set fields that don't actually +# exist in the DB schema previous to 20161221153951. Thus we just use the +# latest schema when testing this migration. +# This is ok-ish because: +# 1. This migration is a data migration +# 2. It only relies on very stable DB fields: routes.id, routes.path, namespaces.id, projects.namespace_id +# Ideally, the test should not use factories and rely on the `table` helper instead. +describe RenameReservedProjectNames, :migration, schema: :latest do let(:migration) { described_class.new } let!(:project) { create(:project) } diff --git a/spec/models/ci/build_spec.rb b/spec/models/ci/build_spec.rb index 9e159c3f1fe..2b6b6a61182 100644 --- a/spec/models/ci/build_spec.rb +++ b/spec/models/ci/build_spec.rb @@ -1413,7 +1413,7 @@ describe Ci::Build do [ { key: 'CI', value: 'true', public: true }, { key: 'GITLAB_CI', value: 'true', public: true }, - { key: 'GITLAB_FEATURES', value: '', public: true }, + { key: 'GITLAB_FEATURES', value: project.namespace.features.join(','), public: true }, { key: 'CI_SERVER_NAME', value: 'GitLab', public: true }, { key: 'CI_SERVER_VERSION', value: Gitlab::VERSION, public: true }, { key: 'CI_SERVER_REVISION', value: Gitlab::REVISION, public: true }, @@ -1590,7 +1590,7 @@ describe Ci::Build do context 'when the branch is protected' do before do - create(:protected_branch, project: build.project, name: build.ref) + allow(build.project).to receive(:protected_for?).with(build.ref).and_return(true) end it { is_expected.to include(protected_variable) } @@ -1598,7 +1598,7 @@ describe Ci::Build do context 'when the tag is protected' do before do - create(:protected_tag, project: build.project, name: build.ref) + allow(build.project).to receive(:protected_for?).with(build.ref).and_return(true) end it { is_expected.to include(protected_variable) } @@ -1635,7 +1635,7 @@ describe Ci::Build do context 'when the branch is protected' do before do - create(:protected_branch, project: build.project, name: build.ref) + allow(build.project).to receive(:protected_for?).with(build.ref).and_return(true) end it { is_expected.to include(protected_variable) } @@ -1643,7 +1643,7 @@ describe Ci::Build do context 'when the tag is protected' do before do - create(:protected_tag, project: build.project, name: build.ref) + allow(build.project).to receive(:protected_for?).with(build.ref).and_return(true) end it { is_expected.to include(protected_variable) } diff --git a/spec/models/group_spec.rb b/spec/models/group_spec.rb index 338fb314ee9..4f16b73ef38 100644 --- a/spec/models/group_spec.rb +++ b/spec/models/group_spec.rb @@ -549,7 +549,7 @@ describe Group do context 'when the ref is a protected branch' do before do - create(:protected_branch, name: 'ref', project: project) + allow(project).to receive(:protected_for?).with('ref').and_return(true) end it_behaves_like 'ref is protected' @@ -557,7 +557,7 @@ describe Group do context 'when the ref is a protected tag' do before do - create(:protected_tag, name: 'ref', project: project) + allow(project).to receive(:protected_for?).with('ref').and_return(true) end it_behaves_like 'ref is protected' @@ -571,6 +571,10 @@ describe Group do let(:variable_child_2) { create(:ci_group_variable, group: group_child_2) } let(:variable_child_3) { create(:ci_group_variable, group: group_child_3) } + before do + allow(project).to receive(:protected_for?).with('ref').and_return(true) + end + it 'returns all variables belong to the group and parent groups' do expected_array1 = [protected_variable, secret_variable] expected_array2 = [variable_child, variable_child_2, variable_child_3] diff --git a/spec/models/key_spec.rb b/spec/models/key_spec.rb index bf5703ac986..7398fd25aa8 100644 --- a/spec/models/key_spec.rb +++ b/spec/models/key_spec.rb @@ -72,52 +72,15 @@ describe Key, :mailer do expect(build(:key)).to be_valid end - it 'rejects the unfingerprintable key (not a key)' do - expect(build(:key, key: 'ssh-rsa an-invalid-key==')).not_to be_valid - end - - where(:factory, :chars, :expected_sections) do - [ - [:key, ["\n", "\r\n"], 3], - [:key, [' ', ' '], 3], - [:key_without_comment, [' ', ' '], 2] - ] - end - - with_them do - let!(:key) { create(factory) } - let!(:original_fingerprint) { key.fingerprint } - - it 'accepts a key with blank space characters after stripping them' do - modified_key = key.key.insert(100, chars.first).insert(40, chars.last) - _, content = modified_key.split - - key.update!(key: modified_key) - - expect(key).to be_valid - expect(key.key.split.size).to eq(expected_sections) - - expect(content).not_to match(/\s/) - expect(original_fingerprint).to eq(key.fingerprint) - end - end - end - - context 'validate size' do - where(:key_content, :result) do - [ - [Spec::Support::Helpers::KeyGeneratorHelper.new(512).generate, false], - [Spec::Support::Helpers::KeyGeneratorHelper.new(8192).generate, false], - [Spec::Support::Helpers::KeyGeneratorHelper.new(1024).generate, true] - ] + it 'accepts a key with newline charecters after stripping them' do + key = build(:key) + key.key = key.key.insert(100, "\n") + key.key = key.key.insert(40, "\r\n") + expect(key).to be_valid end - with_them do - it 'validates the size of the key' do - key = build(:key, key: key_content) - - expect(key.valid?).to eq(result) - end + it 'rejects the unfingerprintable key (not a key)' do + expect(build(:key, key: 'ssh-rsa an-invalid-key==')).not_to be_valid end end diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index 50b8bb7acb3..ee04d74d848 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -2092,7 +2092,7 @@ describe Project do context 'when the ref is a protected branch' do before do - create(:protected_branch, name: 'ref', project: project) + allow(project).to receive(:protected_for?).with('ref').and_return(true) end it_behaves_like 'ref is protected' @@ -2100,7 +2100,7 @@ describe Project do context 'when the ref is a protected tag' do before do - create(:protected_tag, name: 'ref', project: project) + allow(project).to receive(:protected_for?).with('ref').and_return(true) end it_behaves_like 'ref is protected' @@ -2125,6 +2125,8 @@ describe Project do context 'when the ref is a protected branch' do before do + allow(project).to receive(:repository).and_call_original + allow(project).to receive_message_chain(:repository, :branch_exists?).and_return(true) create(:protected_branch, name: 'ref', project: project) end @@ -2135,6 +2137,8 @@ describe Project do context 'when the ref is a protected tag' do before do + allow(project).to receive_message_chain(:repository, :branch_exists?).and_return(false) + allow(project).to receive_message_chain(:repository, :tag_exists?).and_return(true) create(:protected_tag, name: 'ref', project: project) end diff --git a/spec/policies/personal_snippet_policy_spec.rb b/spec/policies/personal_snippet_policy_spec.rb index b70c8646a3d..50bb0899eba 100644 --- a/spec/policies/personal_snippet_policy_spec.rb +++ b/spec/policies/personal_snippet_policy_spec.rb @@ -1,5 +1,6 @@ require 'spec_helper' +# Snippet visibility scenarios are included in more details in spec/support/snippet_visibility.rb describe PersonalSnippetPolicy do let(:regular_user) { create(:user) } let(:external_user) { create(:user, :external) } diff --git a/spec/policies/project_snippet_policy_spec.rb b/spec/policies/project_snippet_policy_spec.rb index cdba1b09fc1..4d32e06b553 100644 --- a/spec/policies/project_snippet_policy_spec.rb +++ b/spec/policies/project_snippet_policy_spec.rb @@ -1,5 +1,6 @@ require 'spec_helper' +# Snippet visibility scenarios are included in more details in spec/support/snippet_visibility.rb describe ProjectSnippetPolicy do let(:regular_user) { create(:user) } let(:external_user) { create(:user, :external) } diff --git a/spec/requests/api/search_spec.rb b/spec/requests/api/search_spec.rb index a0026c6e11c..ddda5752f0c 100644 --- a/spec/requests/api/search_spec.rb +++ b/spec/requests/api/search_spec.rb @@ -180,6 +180,18 @@ describe API::Search do it_behaves_like 'response is correct', schema: 'public_api/v4/milestones' end + + context 'for milestones scope with group path as id' do + before do + another_project = create(:project, :public) + create(:milestone, project: project, title: 'awesome milestone') + create(:milestone, project: another_project, title: 'awesome milestone other project') + + get api("/groups/#{CGI.escape(group.full_path)}/-/search", user), scope: 'milestones', search: 'awesome' + end + + it_behaves_like 'response is correct', schema: 'public_api/v4/milestones' + end end end @@ -286,6 +298,14 @@ describe API::Search do it_behaves_like 'response is correct', schema: 'public_api/v4/commits' end + context 'for commits scope with project path as id' do + before do + get api("/projects/#{CGI.escape(repo_project.full_path)}/-/search", user), scope: 'commits', search: '498214de67004b1da3d820901307bed2a68a8ef6' + end + + it_behaves_like 'response is correct', schema: 'public_api/v4/commits' + end + context 'for blobs scope' do before do get api("/projects/#{repo_project.id}/-/search", user), scope: 'blobs', search: 'monitors' diff --git a/spec/requests/api/snippets_spec.rb b/spec/requests/api/snippets_spec.rb index 74198c8eb4f..b3e253befc6 100644 --- a/spec/requests/api/snippets_spec.rb +++ b/spec/requests/api/snippets_spec.rb @@ -32,6 +32,27 @@ describe API::Snippets do expect(json_response).to be_an Array expect(json_response.size).to eq(0) end + + it 'returns 404 for non-authenticated' do + create(:personal_snippet, :internal) + + get api("/snippets/") + + expect(response).to have_gitlab_http_status(401) + end + + it 'does not return snippets related to a project with disable feature visibility' do + project = create(:project) + create(:project_member, project: project, user: user) + public_snippet = create(:personal_snippet, :public, author: user, project: project) + project.project_feature.update_attribute(:snippets_access_level, 0) + + get api("/snippets/", user) + + json_response.each do |snippet| + expect(snippet["id"]).not_to eq(public_snippet.id) + end + end end describe 'GET /snippets/public' do diff --git a/spec/requests/api/todos_spec.rb b/spec/requests/api/todos_spec.rb index fb3a33cadff..2ee8d150dc8 100644 --- a/spec/requests/api/todos_spec.rb +++ b/spec/requests/api/todos_spec.rb @@ -129,6 +129,12 @@ describe API::Todos do post api("/todos/#{pending_1.id}/mark_as_done", john_doe) end + + it 'returns 404 if the todo does not belong to the current user' do + post api("/todos/#{pending_1.id}/mark_as_done", author_1) + + expect(response.status).to eq(404) + end end end diff --git a/spec/requests/api/v3/todos_spec.rb b/spec/requests/api/v3/todos_spec.rb index 53fd962272a..ea648e3917f 100644 --- a/spec/requests/api/v3/todos_spec.rb +++ b/spec/requests/api/v3/todos_spec.rb @@ -38,6 +38,12 @@ describe API::V3::Todos do delete v3_api("/todos/#{pending_1.id}", john_doe) end + + it 'returns 404 if the todo does not belong to the current user' do + delete v3_api("/todos/#{pending_1.id}", author_1) + + expect(response.status).to eq(404) + end end end diff --git a/spec/services/issues/fetch_referenced_merge_requests_service_spec.rb b/spec/services/issues/fetch_referenced_merge_requests_service_spec.rb new file mode 100644 index 00000000000..4e58179f45f --- /dev/null +++ b/spec/services/issues/fetch_referenced_merge_requests_service_spec.rb @@ -0,0 +1,35 @@ +require 'spec_helper.rb' + +describe Issues::FetchReferencedMergeRequestsService do + let(:project) { create(:project) } + let(:issue) { create(:issue, project: project) } + let(:other_project) { create(:project) } + + let(:mr) { create(:merge_request, source_project: project, target_project: project, id: 2)} + let(:other_mr) { create(:merge_request, source_project: other_project, target_project: other_project, id: 1)} + + let(:user) { create(:user) } + let(:service) { described_class.new(project, user) } + + context 'with mentioned merge requests' do + it 'returns a list of sorted merge requests' do + allow(issue).to receive(:referenced_merge_requests).with(user).and_return([other_mr, mr]) + + mrs, closed_by_mrs = service.execute(issue) + + expect(mrs).to match_array([mr, other_mr]) + expect(closed_by_mrs).to match_array([]) + end + end + + context 'with closed-by merge requests' do + it 'returns a list of sorted merge requests' do + allow(issue).to receive(:closed_by_merge_requests).with(user).and_return([other_mr, mr]) + + mrs, closed_by_mrs = service.execute(issue) + + expect(mrs).to match_array([]) + expect(closed_by_mrs).to match_array([mr, other_mr]) + end + end +end diff --git a/spec/services/merge_requests/build_service_spec.rb b/spec/services/merge_requests/build_service_spec.rb index e56d335a7d6..a0d0a4fd81b 100644 --- a/spec/services/merge_requests/build_service_spec.rb +++ b/spec/services/merge_requests/build_service_spec.rb @@ -286,33 +286,43 @@ describe MergeRequests::BuildService do end end - context 'branch starts with JIRA-formatted external issue IID' do - let(:source_branch) { 'EXMPL-12345' } - + describe 'with JIRA enabled' do before do allow(project).to receive(:external_issue_tracker).and_return(true) allow(project).to receive(:issues_enabled?).and_return(false) allow(project).to receive(:external_issue_reference_pattern).and_return(IssueTrackerService.reference_pattern) end - it 'sets the title to the humanized branch title' do - expect(merge_request.title).to eq('Resolve EXMPL-12345') - end + context 'branch does not start with JIRA-formatted external issue IID' do + let(:source_branch) { 'test-branch' } - it 'appends the closes text' do - expect(merge_request.description).to eq('Closes EXMPL-12345') + it 'sets the title to the humanized branch title' do + expect(merge_request.title).to eq('Test branch') + end end - context 'followed by hyphenated text' do - let(:source_branch) { 'EXMPL-12345-fix-issue' } + context 'branch starts with JIRA-formatted external issue IID' do + let(:source_branch) { 'EXMPL-12345' } it 'sets the title to the humanized branch title' do - expect(merge_request.title).to eq('Resolve EXMPL-12345 "Fix issue"') + expect(merge_request.title).to eq('Resolve EXMPL-12345') end it 'appends the closes text' do expect(merge_request.description).to eq('Closes EXMPL-12345') end + + context 'followed by hyphenated text' do + let(:source_branch) { 'EXMPL-12345-fix-issue' } + + it 'sets the title to the humanized branch title' do + expect(merge_request.title).to eq('Resolve EXMPL-12345 "Fix issue"') + end + + it 'appends the closes text' do + expect(merge_request.description).to eq('Closes EXMPL-12345') + end + end end end end diff --git a/spec/services/search/snippet_service_spec.rb b/spec/services/search/snippet_service_spec.rb index bc7885b03d9..8ad162ad66e 100644 --- a/spec/services/search/snippet_service_spec.rb +++ b/spec/services/search/snippet_service_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' describe Search::SnippetService do let(:author) { create(:author) } - let(:project) { create(:project) } + let(:project) { create(:project, :public) } let!(:public_snippet) { create(:snippet, :public, content: 'password: XXX') } let!(:internal_snippet) { create(:snippet, :internal, content: 'password: XXX') } diff --git a/spec/support/controllers/githubish_import_controller_shared_examples.rb b/spec/support/controllers/githubish_import_controller_shared_examples.rb index a0839eefe6c..3321f920666 100644 --- a/spec/support/controllers/githubish_import_controller_shared_examples.rb +++ b/spec/support/controllers/githubish_import_controller_shared_examples.rb @@ -92,6 +92,7 @@ end shared_examples 'a GitHub-ish import controller: POST create' do let(:user) { create(:user) } + let(:project) { create(:project) } let(:provider_username) { user.username } let(:provider_user) { OpenStruct.new(login: provider_username) } let(:provider_repo) do @@ -107,14 +108,34 @@ shared_examples 'a GitHub-ish import controller: POST create' do assign_session_token(provider) end + it 'returns 200 response when the project is imported successfully' do + allow(Gitlab::LegacyGithubImport::ProjectCreator) + .to receive(:new).with(provider_repo, provider_repo.name, user.namespace, user, access_params, type: provider) + .and_return(double(execute: project)) + + post :create, format: :json + + expect(response).to have_gitlab_http_status(200) + end + + it 'returns 422 response when the project could not be imported' do + allow(Gitlab::LegacyGithubImport::ProjectCreator) + .to receive(:new).with(provider_repo, provider_repo.name, user.namespace, user, access_params, type: provider) + .and_return(double(execute: build(:project))) + + post :create, format: :json + + expect(response).to have_gitlab_http_status(422) + end + context "when the repository owner is the provider user" do context "when the provider user and GitLab user's usernames match" do it "takes the current user's namespace" do expect(Gitlab::LegacyGithubImport::ProjectCreator) .to receive(:new).with(provider_repo, provider_repo.name, user.namespace, user, access_params, type: provider) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, format: :js + post :create, format: :json end end @@ -124,9 +145,9 @@ shared_examples 'a GitHub-ish import controller: POST create' do it "takes the current user's namespace" do expect(Gitlab::LegacyGithubImport::ProjectCreator) .to receive(:new).with(provider_repo, provider_repo.name, user.namespace, user, access_params, type: provider) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, format: :js + post :create, format: :json end end end @@ -151,9 +172,9 @@ shared_examples 'a GitHub-ish import controller: POST create' do it "takes the existing namespace" do expect(Gitlab::LegacyGithubImport::ProjectCreator) .to receive(:new).with(provider_repo, provider_repo.name, existing_namespace, user, access_params, type: provider) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, format: :js + post :create, format: :json end end @@ -163,9 +184,9 @@ shared_examples 'a GitHub-ish import controller: POST create' do expect(Gitlab::LegacyGithubImport::ProjectCreator) .to receive(:new).with(provider_repo, provider_repo.name, user.namespace, user, access_params, type: provider) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, format: :js + post :create, format: :json end end end @@ -174,17 +195,17 @@ shared_examples 'a GitHub-ish import controller: POST create' do context "when current user can create namespaces" do it "creates the namespace" do expect(Gitlab::LegacyGithubImport::ProjectCreator) - .to receive(:new).and_return(double(execute: true)) + .to receive(:new).and_return(double(execute: project)) - expect { post :create, target_namespace: provider_repo.name, format: :js }.to change(Namespace, :count).by(1) + expect { post :create, target_namespace: provider_repo.name, format: :json }.to change(Namespace, :count).by(1) end it "takes the new namespace" do expect(Gitlab::LegacyGithubImport::ProjectCreator) .to receive(:new).with(provider_repo, provider_repo.name, an_instance_of(Group), user, access_params, type: provider) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, target_namespace: provider_repo.name, format: :js + post :create, target_namespace: provider_repo.name, format: :json end end @@ -195,17 +216,17 @@ shared_examples 'a GitHub-ish import controller: POST create' do it "doesn't create the namespace" do expect(Gitlab::LegacyGithubImport::ProjectCreator) - .to receive(:new).and_return(double(execute: true)) + .to receive(:new).and_return(double(execute: project)) - expect { post :create, format: :js }.not_to change(Namespace, :count) + expect { post :create, format: :json }.not_to change(Namespace, :count) end it "takes the current user's namespace" do expect(Gitlab::LegacyGithubImport::ProjectCreator) .to receive(:new).with(provider_repo, provider_repo.name, user.namespace, user, access_params, type: provider) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, format: :js + post :create, format: :json end end end @@ -221,21 +242,21 @@ shared_examples 'a GitHub-ish import controller: POST create' do it 'takes the selected namespace and name' do expect(Gitlab::LegacyGithubImport::ProjectCreator) .to receive(:new).with(provider_repo, test_name, test_namespace, user, access_params, type: provider) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, { target_namespace: test_namespace.name, new_name: test_name, format: :js } + post :create, { target_namespace: test_namespace.name, new_name: test_name, format: :json } end it 'takes the selected name and default namespace' do expect(Gitlab::LegacyGithubImport::ProjectCreator) .to receive(:new).with(provider_repo, test_name, user.namespace, user, access_params, type: provider) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, { new_name: test_name, format: :js } + post :create, { new_name: test_name, format: :json } end end - context 'user has chosen an existing nested namespace and name for the project' do + context 'user has chosen an existing nested namespace and name for the project', :postgresql do let(:parent_namespace) { create(:group, name: 'foo', owner: user) } let(:nested_namespace) { create(:group, name: 'bar', parent: parent_namespace) } let(:test_name) { 'test_name' } @@ -247,63 +268,124 @@ shared_examples 'a GitHub-ish import controller: POST create' do it 'takes the selected namespace and name' do expect(Gitlab::LegacyGithubImport::ProjectCreator) .to receive(:new).with(provider_repo, test_name, nested_namespace, user, access_params, type: provider) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, { target_namespace: nested_namespace.full_path, new_name: test_name, format: :js } + post :create, { target_namespace: nested_namespace.full_path, new_name: test_name, format: :json } end end - context 'user has chosen a non-existent nested namespaces and name for the project' do + context 'user has chosen a non-existent nested namespaces and name for the project', :postgresql do let(:test_name) { 'test_name' } it 'takes the selected namespace and name' do expect(Gitlab::LegacyGithubImport::ProjectCreator) .to receive(:new).with(provider_repo, test_name, kind_of(Namespace), user, access_params, type: provider) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, { target_namespace: 'foo/bar', new_name: test_name, format: :js } + post :create, { target_namespace: 'foo/bar', new_name: test_name, format: :json } end it 'creates the namespaces' do allow(Gitlab::LegacyGithubImport::ProjectCreator) .to receive(:new).with(provider_repo, test_name, kind_of(Namespace), user, access_params, type: provider) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - expect { post :create, { target_namespace: 'foo/bar', new_name: test_name, format: :js } } + expect { post :create, { target_namespace: 'foo/bar', new_name: test_name, format: :json } } .to change { Namespace.count }.by(2) end it 'new namespace has the right parent' do allow(Gitlab::LegacyGithubImport::ProjectCreator) .to receive(:new).with(provider_repo, test_name, kind_of(Namespace), user, access_params, type: provider) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, { target_namespace: 'foo/bar', new_name: test_name, format: :js } + post :create, { target_namespace: 'foo/bar', new_name: test_name, format: :json } expect(Namespace.find_by_path_or_name('bar').parent.path).to eq('foo') end end - context 'user has chosen existent and non-existent nested namespaces and name for the project' do + context 'user has chosen existent and non-existent nested namespaces and name for the project', :postgresql do let(:test_name) { 'test_name' } let!(:parent_namespace) { create(:group, name: 'foo', owner: user) } + before do + parent_namespace.add_owner(user) + end + it 'takes the selected namespace and name' do expect(Gitlab::LegacyGithubImport::ProjectCreator) .to receive(:new).with(provider_repo, test_name, kind_of(Namespace), user, access_params, type: provider) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - post :create, { target_namespace: 'foo/foobar/bar', new_name: test_name, format: :js } + post :create, { target_namespace: 'foo/foobar/bar', new_name: test_name, format: :json } end it 'creates the namespaces' do allow(Gitlab::LegacyGithubImport::ProjectCreator) .to receive(:new).with(provider_repo, test_name, kind_of(Namespace), user, access_params, type: provider) - .and_return(double(execute: true)) + .and_return(double(execute: project)) - expect { post :create, { target_namespace: 'foo/foobar/bar', new_name: test_name, format: :js } } + expect { post :create, { target_namespace: 'foo/foobar/bar', new_name: test_name, format: :json } } .to change { Namespace.count }.by(2) end + + it 'does not create a new namespace under the user namespace' do + expect(Gitlab::LegacyGithubImport::ProjectCreator) + .to receive(:new).with(provider_repo, test_name, user.namespace, user, access_params, type: provider) + .and_return(double(execute: build_stubbed(:project))) + + expect { post :create, { target_namespace: "#{user.namespace_path}/test_group", new_name: test_name, format: :js } } + .not_to change { Namespace.count } + end + end + + context 'user cannot create a subgroup inside a group is not a member of' do + let(:test_name) { 'test_name' } + let!(:parent_namespace) { create(:group, name: 'foo') } + + it 'does not take the selected namespace and name' do + expect(Gitlab::LegacyGithubImport::ProjectCreator) + .to receive(:new).with(provider_repo, test_name, user.namespace, user, access_params, type: provider) + .and_return(double(execute: build_stubbed(:project))) + + post :create, { target_namespace: 'foo/foobar/bar', new_name: test_name, format: :js } + end + + it 'does not create the namespaces' do + allow(Gitlab::LegacyGithubImport::ProjectCreator) + .to receive(:new).with(provider_repo, test_name, kind_of(Namespace), user, access_params, type: provider) + .and_return(double(execute: build_stubbed(:project))) + + expect { post :create, { target_namespace: 'foo/foobar/bar', new_name: test_name, format: :js } } + .not_to change { Namespace.count } + end + end + + context 'user can use a group without having permissions to create a group' do + let(:test_name) { 'test_name' } + let!(:group) { create(:group, name: 'foo') } + + it 'takes the selected namespace and name' do + group.add_owner(user) + user.update!(can_create_group: false) + + expect(Gitlab::LegacyGithubImport::ProjectCreator) + .to receive(:new).with(provider_repo, test_name, group, user, access_params, type: provider) + .and_return(double(execute: build_stubbed(:project))) + + post :create, { target_namespace: 'foo', new_name: test_name, format: :js } + end + end + + context 'when user can not create projects in the chosen namespace' do + it 'returns 422 response' do + other_namespace = create(:group, name: 'other_namespace') + + post :create, { target_namespace: other_namespace.name, format: :json } + + expect(response).to have_gitlab_http_status(422) + end end end end diff --git a/spec/support/features/variable_list_shared_examples.rb b/spec/support/features/variable_list_shared_examples.rb index 83bf06b6727..4315bf5d037 100644 --- a/spec/support/features/variable_list_shared_examples.rb +++ b/spec/support/features/variable_list_shared_examples.rb @@ -41,13 +41,13 @@ shared_examples 'variable list' do end end - it 'adds new unprotected variable' do + it 'adds new protected variable' do page.within('.js-ci-variable-list-section .js-row:last-child') do find('.js-ci-variable-input-key').set('key') find('.js-ci-variable-input-value').set('key value') find('.ci-variable-protected-item .js-project-feature-toggle').click - expect(find('.js-ci-variable-input-protected', visible: false).value).to eq('false') + expect(find('.js-ci-variable-input-protected', visible: false).value).to eq('true') end click_button('Save variables') @@ -59,7 +59,7 @@ shared_examples 'variable list' do page.within('.js-ci-variable-list-section .js-row:nth-child(1)') do expect(find('.js-ci-variable-input-key').value).to eq('key') expect(find('.js-ci-variable-input-value', visible: false).value).to eq('key value') - expect(find('.js-ci-variable-input-protected', visible: false).value).to eq('false') + expect(find('.js-ci-variable-input-protected', visible: false).value).to eq('true') end end @@ -143,7 +143,6 @@ shared_examples 'variable list' do page.within('.js-ci-variable-list-section .js-row:last-child') do find('.js-ci-variable-input-key').set('unprotected_key') find('.js-ci-variable-input-value').set('unprotected_value') - find('.ci-variable-protected-item .js-project-feature-toggle').click expect(find('.js-ci-variable-input-protected', visible: false).value).to eq('false') end @@ -178,6 +177,7 @@ shared_examples 'variable list' do page.within('.js-ci-variable-list-section .js-row:last-child') do find('.js-ci-variable-input-key').set('protected_key') find('.js-ci-variable-input-value').set('protected_value') + find('.ci-variable-protected-item .js-project-feature-toggle').click expect(find('.js-ci-variable-input-protected', visible: false).value).to eq('true') end diff --git a/spec/support/migrations_helpers.rb b/spec/support/migrations_helpers.rb index 06322aa0586..6bf976a2cf9 100644 --- a/spec/support/migrations_helpers.rb +++ b/spec/support/migrations_helpers.rb @@ -45,7 +45,13 @@ module MigrationsHelpers end def migration_schema_version - self.class.metadata[:schema] || previous_migration.version + metadata_schema = self.class.metadata[:schema] + + if metadata_schema == :latest + migrations.last.version + else + metadata_schema || previous_migration.version + end end def schema_migrate_down! @@ -58,6 +64,8 @@ module MigrationsHelpers end def schema_migrate_up! + reset_column_in_all_models + disable_migrations_output do ActiveRecord::Migrator.migrate(migrations_paths) end diff --git a/spec/support/snippet_visibility.rb b/spec/support/snippet_visibility.rb new file mode 100644 index 00000000000..1cb904823d2 --- /dev/null +++ b/spec/support/snippet_visibility.rb @@ -0,0 +1,304 @@ +RSpec.shared_examples 'snippet visibility' do + let!(:author) { create(:user) } + let!(:member) { create(:user) } + let!(:external) { create(:user, :external) } + + let!(:snippet_type_visibilities) do + { + public: Snippet::PUBLIC, + internal: Snippet::INTERNAL, + private: Snippet::PRIVATE + } + end + + context "For project snippets" do + let!(:users) do + { + unauthenticated: nil, + external: external, + non_member: create(:user), + member: member, + author: author + } + end + + let!(:project_type_visibilities) do + { + public: Gitlab::VisibilityLevel::PUBLIC, + internal: Gitlab::VisibilityLevel::INTERNAL, + private: Gitlab::VisibilityLevel::PRIVATE + } + end + + let(:project_feature_visibilities) do + { + enabled: ProjectFeature::ENABLED, + private: ProjectFeature::PRIVATE, + disabled: ProjectFeature::DISABLED + } + end + + where(:project_type, :feature_visibility, :user_type, :snippet_type, :outcome) do + [ + # Public projects + [:public, :enabled, :unauthenticated, :public, true], + [:public, :enabled, :unauthenticated, :internal, false], + [:public, :enabled, :unauthenticated, :private, false], + + [:public, :enabled, :external, :public, true], + [:public, :enabled, :external, :internal, false], + [:public, :enabled, :external, :private, false], + + [:public, :enabled, :non_member, :public, true], + [:public, :enabled, :non_member, :internal, true], + [:public, :enabled, :non_member, :private, false], + + [:public, :enabled, :member, :public, true], + [:public, :enabled, :member, :internal, true], + [:public, :enabled, :member, :private, true], + + [:public, :enabled, :author, :public, true], + [:public, :enabled, :author, :internal, true], + [:public, :enabled, :author, :private, true], + + [:public, :private, :unauthenticated, :public, false], + [:public, :private, :unauthenticated, :internal, false], + [:public, :private, :unauthenticated, :private, false], + + [:public, :private, :external, :public, false], + [:public, :private, :external, :internal, false], + [:public, :private, :external, :private, false], + + [:public, :private, :non_member, :public, false], + [:public, :private, :non_member, :internal, false], + [:public, :private, :non_member, :private, false], + + [:public, :private, :member, :public, true], + [:public, :private, :member, :internal, true], + [:public, :private, :member, :private, true], + + [:public, :private, :author, :public, true], + [:public, :private, :author, :internal, true], + [:public, :private, :author, :private, true], + + [:public, :disabled, :unauthenticated, :public, false], + [:public, :disabled, :unauthenticated, :internal, false], + [:public, :disabled, :unauthenticated, :private, false], + + [:public, :disabled, :external, :public, false], + [:public, :disabled, :external, :internal, false], + [:public, :disabled, :external, :private, false], + + [:public, :disabled, :non_member, :public, false], + [:public, :disabled, :non_member, :internal, false], + [:public, :disabled, :non_member, :private, false], + + [:public, :disabled, :member, :public, false], + [:public, :disabled, :member, :internal, false], + [:public, :disabled, :member, :private, false], + + [:public, :disabled, :author, :public, false], + [:public, :disabled, :author, :internal, false], + [:public, :disabled, :author, :private, false], + + # Internal projects + [:internal, :enabled, :unauthenticated, :public, false], + [:internal, :enabled, :unauthenticated, :internal, false], + [:internal, :enabled, :unauthenticated, :private, false], + + [:internal, :enabled, :external, :public, false], + [:internal, :enabled, :external, :internal, false], + [:internal, :enabled, :external, :private, false], + + [:internal, :enabled, :non_member, :public, true], + [:internal, :enabled, :non_member, :internal, true], + [:internal, :enabled, :non_member, :private, false], + + [:internal, :enabled, :member, :public, true], + [:internal, :enabled, :member, :internal, true], + [:internal, :enabled, :member, :private, true], + + [:internal, :enabled, :author, :public, true], + [:internal, :enabled, :author, :internal, true], + [:internal, :enabled, :author, :private, true], + + [:internal, :private, :unauthenticated, :public, false], + [:internal, :private, :unauthenticated, :internal, false], + [:internal, :private, :unauthenticated, :private, false], + + [:internal, :private, :external, :public, false], + [:internal, :private, :external, :internal, false], + [:internal, :private, :external, :private, false], + + [:internal, :private, :non_member, :public, false], + [:internal, :private, :non_member, :internal, false], + [:internal, :private, :non_member, :private, false], + + [:internal, :private, :member, :public, true], + [:internal, :private, :member, :internal, true], + [:internal, :private, :member, :private, true], + + [:internal, :private, :author, :public, true], + [:internal, :private, :author, :internal, true], + [:internal, :private, :author, :private, true], + + [:internal, :disabled, :unauthenticated, :public, false], + [:internal, :disabled, :unauthenticated, :internal, false], + [:internal, :disabled, :unauthenticated, :private, false], + + [:internal, :disabled, :external, :public, false], + [:internal, :disabled, :external, :internal, false], + [:internal, :disabled, :external, :private, false], + + [:internal, :disabled, :non_member, :public, false], + [:internal, :disabled, :non_member, :internal, false], + [:internal, :disabled, :non_member, :private, false], + + [:internal, :disabled, :member, :public, false], + [:internal, :disabled, :member, :internal, false], + [:internal, :disabled, :member, :private, false], + + [:internal, :disabled, :author, :public, false], + [:internal, :disabled, :author, :internal, false], + [:internal, :disabled, :author, :private, false], + + # Private projects + [:private, :enabled, :unauthenticated, :public, false], + [:private, :enabled, :unauthenticated, :internal, false], + [:private, :enabled, :unauthenticated, :private, false], + + [:private, :enabled, :external, :public, true], + [:private, :enabled, :external, :internal, true], + [:private, :enabled, :external, :private, true], + + [:private, :enabled, :non_member, :public, false], + [:private, :enabled, :non_member, :internal, false], + [:private, :enabled, :non_member, :private, false], + + [:private, :enabled, :member, :public, true], + [:private, :enabled, :member, :internal, true], + [:private, :enabled, :member, :private, true], + + [:private, :enabled, :author, :public, true], + [:private, :enabled, :author, :internal, true], + [:private, :enabled, :author, :private, true], + + [:private, :private, :unauthenticated, :public, false], + [:private, :private, :unauthenticated, :internal, false], + [:private, :private, :unauthenticated, :private, false], + + [:private, :private, :external, :public, true], + [:private, :private, :external, :internal, true], + [:private, :private, :external, :private, true], + + [:private, :private, :non_member, :public, false], + [:private, :private, :non_member, :internal, false], + [:private, :private, :non_member, :private, false], + + [:private, :private, :member, :public, true], + [:private, :private, :member, :internal, true], + [:private, :private, :member, :private, true], + + [:private, :private, :author, :public, true], + [:private, :private, :author, :internal, true], + [:private, :private, :author, :private, true], + + [:private, :disabled, :unauthenticated, :public, false], + [:private, :disabled, :unauthenticated, :internal, false], + [:private, :disabled, :unauthenticated, :private, false], + + [:private, :disabled, :external, :public, false], + [:private, :disabled, :external, :internal, false], + [:private, :disabled, :external, :private, false], + + [:private, :disabled, :non_member, :public, false], + [:private, :disabled, :non_member, :internal, false], + [:private, :disabled, :non_member, :private, false], + + [:private, :disabled, :member, :public, false], + [:private, :disabled, :member, :internal, false], + [:private, :disabled, :member, :private, false], + + [:private, :disabled, :author, :public, false], + [:private, :disabled, :author, :internal, false], + [:private, :disabled, :author, :private, false] + ] + end + + with_them do + let!(:project) { create(:project, visibility_level: project_type_visibilities[project_type]) } + let!(:project_feature) { project.project_feature.update_column(:snippets_access_level, project_feature_visibilities[feature_visibility]) } + let!(:user) { users[user_type] } + let!(:snippet) { create(:project_snippet, visibility_level: snippet_type_visibilities[snippet_type], project: project, author: author) } + let!(:members) do + project.add_developer(author) + project.add_developer(member) + project.add_developer(external) if project.private? + end + + context "For #{params[:project_type]} project and #{params[:user_type]} users" do + it 'should agree with the read_project_snippet policy' do + expect(can?(user, :read_project_snippet, snippet)).to eq(outcome) + end + + it 'should return proper outcome' do + results = described_class.new(user, project: project).execute + expect(results.include?(snippet)).to eq(outcome) + end + end + + context "Without a given project and #{params[:user_type]} users" do + it 'should return proper outcome' do + results = described_class.new(user).execute + expect(results.include?(snippet)).to eq(outcome) + end + end + end + end + + context 'For personal snippets' do + let!(:users) do + { + unauthenticated: nil, + external: external, + non_member: create(:user), + author: author + } + end + + where(:snippet_visibility, :user_type, :outcome) do + [ + [:public, :unauthenticated, true], + [:public, :external, true], + [:public, :non_member, true], + [:public, :author, true], + + [:internal, :unauthenticated, false], + [:internal, :external, false], + [:internal, :non_member, true], + [:internal, :author, true], + + [:private, :unauthenticated, false], + [:private, :external, false], + [:private, :non_member, false], + [:private, :author, true] + ] + end + + with_them do + let!(:user) { users[user_type] } + let!(:snippet) { create(:personal_snippet, visibility_level: snippet_type_visibilities[snippet_visibility], author: author) } + + context "For personal and #{params[:snippet_visibility]} snippets with #{params[:user_type]} user" do + it 'should agree with read_personal_snippet policy' do + expect(can?(user, :read_personal_snippet, snippet)).to eq(outcome) + end + + it 'should return proper outcome' do + results = described_class.new(user).execute + expect(results.include?(snippet)).to eq(outcome) + end + end + end + end +end diff --git a/vendor/assets/fonts/KaTeX_AMS-Regular.eot b/vendor/assets/fonts/KaTeX_AMS-Regular.eot Binary files differdeleted file mode 100644 index 784276a3cbf..00000000000 --- a/vendor/assets/fonts/KaTeX_AMS-Regular.eot +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_AMS-Regular.ttf b/vendor/assets/fonts/KaTeX_AMS-Regular.ttf Binary files differdeleted file mode 100644 index 6f1e0be2028..00000000000 --- a/vendor/assets/fonts/KaTeX_AMS-Regular.ttf +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_AMS-Regular.woff b/vendor/assets/fonts/KaTeX_AMS-Regular.woff Binary files differdeleted file mode 100644 index 4dded4733b3..00000000000 --- a/vendor/assets/fonts/KaTeX_AMS-Regular.woff +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_AMS-Regular.woff2 b/vendor/assets/fonts/KaTeX_AMS-Regular.woff2 Binary files differdeleted file mode 100644 index ea81079c4e2..00000000000 --- a/vendor/assets/fonts/KaTeX_AMS-Regular.woff2 +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Caligraphic-Bold.eot b/vendor/assets/fonts/KaTeX_Caligraphic-Bold.eot Binary files differdeleted file mode 100644 index 1a0db0c568e..00000000000 --- a/vendor/assets/fonts/KaTeX_Caligraphic-Bold.eot +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Caligraphic-Bold.ttf b/vendor/assets/fonts/KaTeX_Caligraphic-Bold.ttf Binary files differdeleted file mode 100644 index b94907dad11..00000000000 --- a/vendor/assets/fonts/KaTeX_Caligraphic-Bold.ttf +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Caligraphic-Bold.woff b/vendor/assets/fonts/KaTeX_Caligraphic-Bold.woff Binary files differdeleted file mode 100644 index 799fa8122ca..00000000000 --- a/vendor/assets/fonts/KaTeX_Caligraphic-Bold.woff +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Caligraphic-Bold.woff2 b/vendor/assets/fonts/KaTeX_Caligraphic-Bold.woff2 Binary files differdeleted file mode 100644 index 73bb5422878..00000000000 --- a/vendor/assets/fonts/KaTeX_Caligraphic-Bold.woff2 +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Caligraphic-Regular.eot b/vendor/assets/fonts/KaTeX_Caligraphic-Regular.eot Binary files differdeleted file mode 100644 index 6cc83d0922c..00000000000 --- a/vendor/assets/fonts/KaTeX_Caligraphic-Regular.eot +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Caligraphic-Regular.ttf b/vendor/assets/fonts/KaTeX_Caligraphic-Regular.ttf Binary files differdeleted file mode 100644 index cf51e2021e4..00000000000 --- a/vendor/assets/fonts/KaTeX_Caligraphic-Regular.ttf +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Caligraphic-Regular.woff b/vendor/assets/fonts/KaTeX_Caligraphic-Regular.woff Binary files differdeleted file mode 100644 index f5e5c623577..00000000000 --- a/vendor/assets/fonts/KaTeX_Caligraphic-Regular.woff +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Caligraphic-Regular.woff2 b/vendor/assets/fonts/KaTeX_Caligraphic-Regular.woff2 Binary files differdeleted file mode 100644 index dd76d3488d5..00000000000 --- a/vendor/assets/fonts/KaTeX_Caligraphic-Regular.woff2 +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Fraktur-Bold.eot b/vendor/assets/fonts/KaTeX_Fraktur-Bold.eot Binary files differdeleted file mode 100644 index 1960b106656..00000000000 --- a/vendor/assets/fonts/KaTeX_Fraktur-Bold.eot +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Fraktur-Bold.ttf b/vendor/assets/fonts/KaTeX_Fraktur-Bold.ttf Binary files differdeleted file mode 100644 index 7b0790f1ae8..00000000000 --- a/vendor/assets/fonts/KaTeX_Fraktur-Bold.ttf +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Fraktur-Bold.woff b/vendor/assets/fonts/KaTeX_Fraktur-Bold.woff Binary files differdeleted file mode 100644 index dc325713291..00000000000 --- a/vendor/assets/fonts/KaTeX_Fraktur-Bold.woff +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Fraktur-Bold.woff2 b/vendor/assets/fonts/KaTeX_Fraktur-Bold.woff2 Binary files differdeleted file mode 100644 index fdc429227ad..00000000000 --- a/vendor/assets/fonts/KaTeX_Fraktur-Bold.woff2 +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Fraktur-Regular.eot b/vendor/assets/fonts/KaTeX_Fraktur-Regular.eot Binary files differdeleted file mode 100644 index e4e73796aea..00000000000 --- a/vendor/assets/fonts/KaTeX_Fraktur-Regular.eot +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Fraktur-Regular.ttf b/vendor/assets/fonts/KaTeX_Fraktur-Regular.ttf Binary files differdeleted file mode 100644 index 063bc0263eb..00000000000 --- a/vendor/assets/fonts/KaTeX_Fraktur-Regular.ttf +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Fraktur-Regular.woff b/vendor/assets/fonts/KaTeX_Fraktur-Regular.woff Binary files differdeleted file mode 100644 index c4b18d863f3..00000000000 --- a/vendor/assets/fonts/KaTeX_Fraktur-Regular.woff +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Fraktur-Regular.woff2 b/vendor/assets/fonts/KaTeX_Fraktur-Regular.woff2 Binary files differdeleted file mode 100644 index 4318d938e26..00000000000 --- a/vendor/assets/fonts/KaTeX_Fraktur-Regular.woff2 +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Main-Bold.eot b/vendor/assets/fonts/KaTeX_Main-Bold.eot Binary files differdeleted file mode 100644 index 80fbd022363..00000000000 --- a/vendor/assets/fonts/KaTeX_Main-Bold.eot +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Main-Bold.ttf b/vendor/assets/fonts/KaTeX_Main-Bold.ttf Binary files differdeleted file mode 100644 index 8e10722afae..00000000000 --- a/vendor/assets/fonts/KaTeX_Main-Bold.ttf +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Main-Bold.woff b/vendor/assets/fonts/KaTeX_Main-Bold.woff Binary files differdeleted file mode 100644 index 43b361a6005..00000000000 --- a/vendor/assets/fonts/KaTeX_Main-Bold.woff +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Main-Bold.woff2 b/vendor/assets/fonts/KaTeX_Main-Bold.woff2 Binary files differdeleted file mode 100644 index af57a96c148..00000000000 --- a/vendor/assets/fonts/KaTeX_Main-Bold.woff2 +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Main-Italic.eot b/vendor/assets/fonts/KaTeX_Main-Italic.eot Binary files differdeleted file mode 100644 index fc770166b5e..00000000000 --- a/vendor/assets/fonts/KaTeX_Main-Italic.eot +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Main-Italic.ttf b/vendor/assets/fonts/KaTeX_Main-Italic.ttf Binary files differdeleted file mode 100644 index d124495d7b6..00000000000 --- a/vendor/assets/fonts/KaTeX_Main-Italic.ttf +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Main-Italic.woff b/vendor/assets/fonts/KaTeX_Main-Italic.woff Binary files differdeleted file mode 100644 index e623236bc44..00000000000 --- a/vendor/assets/fonts/KaTeX_Main-Italic.woff +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Main-Italic.woff2 b/vendor/assets/fonts/KaTeX_Main-Italic.woff2 Binary files differdeleted file mode 100644 index 944e9740bdf..00000000000 --- a/vendor/assets/fonts/KaTeX_Main-Italic.woff2 +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Main-Regular.eot b/vendor/assets/fonts/KaTeX_Main-Regular.eot Binary files differdeleted file mode 100644 index dc60c090c7a..00000000000 --- a/vendor/assets/fonts/KaTeX_Main-Regular.eot +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Main-Regular.ttf b/vendor/assets/fonts/KaTeX_Main-Regular.ttf Binary files differdeleted file mode 100644 index da5797ffcce..00000000000 --- a/vendor/assets/fonts/KaTeX_Main-Regular.ttf +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Main-Regular.woff b/vendor/assets/fonts/KaTeX_Main-Regular.woff Binary files differdeleted file mode 100644 index 37db672e821..00000000000 --- a/vendor/assets/fonts/KaTeX_Main-Regular.woff +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Main-Regular.woff2 b/vendor/assets/fonts/KaTeX_Main-Regular.woff2 Binary files differdeleted file mode 100644 index 48820424893..00000000000 --- a/vendor/assets/fonts/KaTeX_Main-Regular.woff2 +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Math-BoldItalic.eot b/vendor/assets/fonts/KaTeX_Math-BoldItalic.eot Binary files differdeleted file mode 100644 index 52c8b8c6b40..00000000000 --- a/vendor/assets/fonts/KaTeX_Math-BoldItalic.eot +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Math-BoldItalic.ttf b/vendor/assets/fonts/KaTeX_Math-BoldItalic.ttf Binary files differdeleted file mode 100644 index a8b527c7ef6..00000000000 --- a/vendor/assets/fonts/KaTeX_Math-BoldItalic.ttf +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Math-BoldItalic.woff b/vendor/assets/fonts/KaTeX_Math-BoldItalic.woff Binary files differdeleted file mode 100644 index 8940e0b5801..00000000000 --- a/vendor/assets/fonts/KaTeX_Math-BoldItalic.woff +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Math-BoldItalic.woff2 b/vendor/assets/fonts/KaTeX_Math-BoldItalic.woff2 Binary files differdeleted file mode 100644 index 15cf56d3408..00000000000 --- a/vendor/assets/fonts/KaTeX_Math-BoldItalic.woff2 +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Math-Italic.eot b/vendor/assets/fonts/KaTeX_Math-Italic.eot Binary files differdeleted file mode 100644 index 64c8992c477..00000000000 --- a/vendor/assets/fonts/KaTeX_Math-Italic.eot +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Math-Italic.ttf b/vendor/assets/fonts/KaTeX_Math-Italic.ttf Binary files differdeleted file mode 100644 index 06f39d3a299..00000000000 --- a/vendor/assets/fonts/KaTeX_Math-Italic.ttf +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Math-Italic.woff b/vendor/assets/fonts/KaTeX_Math-Italic.woff Binary files differdeleted file mode 100644 index cf3b4b79e5b..00000000000 --- a/vendor/assets/fonts/KaTeX_Math-Italic.woff +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Math-Italic.woff2 b/vendor/assets/fonts/KaTeX_Math-Italic.woff2 Binary files differdeleted file mode 100644 index 5f8c4bfa455..00000000000 --- a/vendor/assets/fonts/KaTeX_Math-Italic.woff2 +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Math-Regular.eot b/vendor/assets/fonts/KaTeX_Math-Regular.eot Binary files differdeleted file mode 100644 index 5521e6a564d..00000000000 --- a/vendor/assets/fonts/KaTeX_Math-Regular.eot +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Math-Regular.ttf b/vendor/assets/fonts/KaTeX_Math-Regular.ttf Binary files differdeleted file mode 100644 index 73127082370..00000000000 --- a/vendor/assets/fonts/KaTeX_Math-Regular.ttf +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Math-Regular.woff b/vendor/assets/fonts/KaTeX_Math-Regular.woff Binary files differdeleted file mode 100644 index 0e2ebdf18af..00000000000 --- a/vendor/assets/fonts/KaTeX_Math-Regular.woff +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Math-Regular.woff2 b/vendor/assets/fonts/KaTeX_Math-Regular.woff2 Binary files differdeleted file mode 100644 index ebe3d028a34..00000000000 --- a/vendor/assets/fonts/KaTeX_Math-Regular.woff2 +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_SansSerif-Bold.eot b/vendor/assets/fonts/KaTeX_SansSerif-Bold.eot Binary files differdeleted file mode 100644 index 1660e76a2b6..00000000000 --- a/vendor/assets/fonts/KaTeX_SansSerif-Bold.eot +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_SansSerif-Bold.ttf b/vendor/assets/fonts/KaTeX_SansSerif-Bold.ttf Binary files differdeleted file mode 100644 index dbeb7b92ab5..00000000000 --- a/vendor/assets/fonts/KaTeX_SansSerif-Bold.ttf +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_SansSerif-Bold.woff b/vendor/assets/fonts/KaTeX_SansSerif-Bold.woff Binary files differdeleted file mode 100644 index 8f144a8bb31..00000000000 --- a/vendor/assets/fonts/KaTeX_SansSerif-Bold.woff +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_SansSerif-Bold.woff2 b/vendor/assets/fonts/KaTeX_SansSerif-Bold.woff2 Binary files differdeleted file mode 100644 index 329e85557fa..00000000000 --- a/vendor/assets/fonts/KaTeX_SansSerif-Bold.woff2 +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_SansSerif-Italic.eot b/vendor/assets/fonts/KaTeX_SansSerif-Italic.eot Binary files differdeleted file mode 100644 index 289ae3ff8b7..00000000000 --- a/vendor/assets/fonts/KaTeX_SansSerif-Italic.eot +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_SansSerif-Italic.ttf b/vendor/assets/fonts/KaTeX_SansSerif-Italic.ttf Binary files differdeleted file mode 100644 index b3a2f38f224..00000000000 --- a/vendor/assets/fonts/KaTeX_SansSerif-Italic.ttf +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_SansSerif-Italic.woff b/vendor/assets/fonts/KaTeX_SansSerif-Italic.woff Binary files differdeleted file mode 100644 index bddf7ea6579..00000000000 --- a/vendor/assets/fonts/KaTeX_SansSerif-Italic.woff +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_SansSerif-Italic.woff2 b/vendor/assets/fonts/KaTeX_SansSerif-Italic.woff2 Binary files differdeleted file mode 100644 index 5fa767bddd6..00000000000 --- a/vendor/assets/fonts/KaTeX_SansSerif-Italic.woff2 +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_SansSerif-Regular.eot b/vendor/assets/fonts/KaTeX_SansSerif-Regular.eot Binary files differdeleted file mode 100644 index 1b38b98a180..00000000000 --- a/vendor/assets/fonts/KaTeX_SansSerif-Regular.eot +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_SansSerif-Regular.ttf b/vendor/assets/fonts/KaTeX_SansSerif-Regular.ttf Binary files differdeleted file mode 100644 index e4712f84775..00000000000 --- a/vendor/assets/fonts/KaTeX_SansSerif-Regular.ttf +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_SansSerif-Regular.woff b/vendor/assets/fonts/KaTeX_SansSerif-Regular.woff Binary files differdeleted file mode 100644 index 33be368048f..00000000000 --- a/vendor/assets/fonts/KaTeX_SansSerif-Regular.woff +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_SansSerif-Regular.woff2 b/vendor/assets/fonts/KaTeX_SansSerif-Regular.woff2 Binary files differdeleted file mode 100644 index 4fcb2e29a05..00000000000 --- a/vendor/assets/fonts/KaTeX_SansSerif-Regular.woff2 +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Script-Regular.eot b/vendor/assets/fonts/KaTeX_Script-Regular.eot Binary files differdeleted file mode 100644 index 7870d7f319b..00000000000 --- a/vendor/assets/fonts/KaTeX_Script-Regular.eot +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Script-Regular.ttf b/vendor/assets/fonts/KaTeX_Script-Regular.ttf Binary files differdeleted file mode 100644 index da4d11308ae..00000000000 --- a/vendor/assets/fonts/KaTeX_Script-Regular.ttf +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Script-Regular.woff b/vendor/assets/fonts/KaTeX_Script-Regular.woff Binary files differdeleted file mode 100644 index d6ae79f998a..00000000000 --- a/vendor/assets/fonts/KaTeX_Script-Regular.woff +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Script-Regular.woff2 b/vendor/assets/fonts/KaTeX_Script-Regular.woff2 Binary files differdeleted file mode 100644 index 1b43deb45a8..00000000000 --- a/vendor/assets/fonts/KaTeX_Script-Regular.woff2 +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Size1-Regular.eot b/vendor/assets/fonts/KaTeX_Size1-Regular.eot Binary files differdeleted file mode 100644 index 29950f95ff6..00000000000 --- a/vendor/assets/fonts/KaTeX_Size1-Regular.eot +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Size1-Regular.ttf b/vendor/assets/fonts/KaTeX_Size1-Regular.ttf Binary files differdeleted file mode 100644 index 194466a655d..00000000000 --- a/vendor/assets/fonts/KaTeX_Size1-Regular.ttf +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Size1-Regular.woff b/vendor/assets/fonts/KaTeX_Size1-Regular.woff Binary files differdeleted file mode 100644 index 237f271edd1..00000000000 --- a/vendor/assets/fonts/KaTeX_Size1-Regular.woff +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Size1-Regular.woff2 b/vendor/assets/fonts/KaTeX_Size1-Regular.woff2 Binary files differdeleted file mode 100644 index 39b6f8f746c..00000000000 --- a/vendor/assets/fonts/KaTeX_Size1-Regular.woff2 +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Size2-Regular.eot b/vendor/assets/fonts/KaTeX_Size2-Regular.eot Binary files differdeleted file mode 100644 index b8b0536f967..00000000000 --- a/vendor/assets/fonts/KaTeX_Size2-Regular.eot +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Size2-Regular.ttf b/vendor/assets/fonts/KaTeX_Size2-Regular.ttf Binary files differdeleted file mode 100644 index b41b66a638f..00000000000 --- a/vendor/assets/fonts/KaTeX_Size2-Regular.ttf +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Size2-Regular.woff b/vendor/assets/fonts/KaTeX_Size2-Regular.woff Binary files differdeleted file mode 100644 index 4a3055854ed..00000000000 --- a/vendor/assets/fonts/KaTeX_Size2-Regular.woff +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Size2-Regular.woff2 b/vendor/assets/fonts/KaTeX_Size2-Regular.woff2 Binary files differdeleted file mode 100644 index 3facec1ab89..00000000000 --- a/vendor/assets/fonts/KaTeX_Size2-Regular.woff2 +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Size3-Regular.eot b/vendor/assets/fonts/KaTeX_Size3-Regular.eot Binary files differdeleted file mode 100644 index 576b864fae6..00000000000 --- a/vendor/assets/fonts/KaTeX_Size3-Regular.eot +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Size3-Regular.ttf b/vendor/assets/fonts/KaTeX_Size3-Regular.ttf Binary files differdeleted file mode 100644 index 790ddbbc55f..00000000000 --- a/vendor/assets/fonts/KaTeX_Size3-Regular.ttf +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Size3-Regular.woff b/vendor/assets/fonts/KaTeX_Size3-Regular.woff Binary files differdeleted file mode 100644 index 3a6d062e660..00000000000 --- a/vendor/assets/fonts/KaTeX_Size3-Regular.woff +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Size3-Regular.woff2 b/vendor/assets/fonts/KaTeX_Size3-Regular.woff2 Binary files differdeleted file mode 100644 index 2cffafe5018..00000000000 --- a/vendor/assets/fonts/KaTeX_Size3-Regular.woff2 +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Size4-Regular.eot b/vendor/assets/fonts/KaTeX_Size4-Regular.eot Binary files differdeleted file mode 100644 index c2b045fc3db..00000000000 --- a/vendor/assets/fonts/KaTeX_Size4-Regular.eot +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Size4-Regular.ttf b/vendor/assets/fonts/KaTeX_Size4-Regular.ttf Binary files differdeleted file mode 100644 index ce660aa7ff9..00000000000 --- a/vendor/assets/fonts/KaTeX_Size4-Regular.ttf +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Size4-Regular.woff b/vendor/assets/fonts/KaTeX_Size4-Regular.woff Binary files differdeleted file mode 100644 index 7826c6c97a1..00000000000 --- a/vendor/assets/fonts/KaTeX_Size4-Regular.woff +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Size4-Regular.woff2 b/vendor/assets/fonts/KaTeX_Size4-Regular.woff2 Binary files differdeleted file mode 100644 index c92189812d9..00000000000 --- a/vendor/assets/fonts/KaTeX_Size4-Regular.woff2 +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Typewriter-Regular.eot b/vendor/assets/fonts/KaTeX_Typewriter-Regular.eot Binary files differdeleted file mode 100644 index 4c178f484a8..00000000000 --- a/vendor/assets/fonts/KaTeX_Typewriter-Regular.eot +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Typewriter-Regular.ttf b/vendor/assets/fonts/KaTeX_Typewriter-Regular.ttf Binary files differdeleted file mode 100644 index b0427ad0a56..00000000000 --- a/vendor/assets/fonts/KaTeX_Typewriter-Regular.ttf +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Typewriter-Regular.woff b/vendor/assets/fonts/KaTeX_Typewriter-Regular.woff Binary files differdeleted file mode 100644 index 78e990488a9..00000000000 --- a/vendor/assets/fonts/KaTeX_Typewriter-Regular.woff +++ /dev/null diff --git a/vendor/assets/fonts/KaTeX_Typewriter-Regular.woff2 b/vendor/assets/fonts/KaTeX_Typewriter-Regular.woff2 Binary files differdeleted file mode 100644 index 618de99d480..00000000000 --- a/vendor/assets/fonts/KaTeX_Typewriter-Regular.woff2 +++ /dev/null diff --git a/vendor/assets/javascripts/jquery.waitforimages.js b/vendor/assets/javascripts/jquery.waitforimages.js deleted file mode 100644 index 95b39c2e074..00000000000 --- a/vendor/assets/javascripts/jquery.waitforimages.js +++ /dev/null @@ -1,144 +0,0 @@ -/* - * waitForImages 1.4 - * ----------------- - * Provides a callback when all images have loaded in your given selector. - * http://www.alexanderdickson.com/ - * - * - * Copyright (c) 2011 Alex Dickson - * Licensed under the MIT licenses. - * See website for more info. - * - */ - -;(function($) { - // Namespace all events. - var eventNamespace = 'waitForImages'; - - // CSS properties which contain references to images. - $.waitForImages = { - hasImageProperties: [ - 'backgroundImage', - 'listStyleImage', - 'borderImage', - 'borderCornerImage' - ] - }; - - // Custom selector to find `img` elements that have a valid `src` attribute and have not already loaded. - $.expr[':'].uncached = function(obj) { - // Ensure we are dealing with an `img` element with a valid `src` attribute. - if ( ! $(obj).is('img[src!=""]')) { - return false; - } - - // Firefox's `complete` property will always be`true` even if the image has not been downloaded. - // Doing it this way works in Firefox. - var img = document.createElement('img'); - img.src = obj.src; - return ! img.complete; - }; - - $.fn.waitForImages = function(finishedCallback, eachCallback, waitForAll) { - - // Handle options object. - if ($.isPlainObject(arguments[0])) { - eachCallback = finishedCallback.each; - waitForAll = finishedCallback.waitForAll; - finishedCallback = finishedCallback.finished; - } - - // Handle missing callbacks. - finishedCallback = finishedCallback || $.noop; - eachCallback = eachCallback || $.noop; - - // Convert waitForAll to Boolean - waitForAll = !! waitForAll; - - // Ensure callbacks are functions. - if (!$.isFunction(finishedCallback) || !$.isFunction(eachCallback)) { - throw new TypeError('An invalid callback was supplied.'); - }; - - return this.each(function() { - // Build a list of all imgs, dependent on what images will be considered. - var obj = $(this), - allImgs = []; - - if (waitForAll) { - // CSS properties which may contain an image. - var hasImgProperties = $.waitForImages.hasImageProperties || [], - matchUrl = /url\((['"]?)(.*?)\1\)/g; - - // Get all elements, as any one of them could have a background image. - obj.find('*').each(function() { - var element = $(this); - - // If an `img` element, add it. But keep iterating in case it has a background image too. - if (element.is('img:uncached')) { - allImgs.push({ - src: element.attr('src'), - element: element[0] - }); - } - - $.each(hasImgProperties, function(i, property) { - var propertyValue = element.css(property); - // If it doesn't contain this property, skip. - if ( ! propertyValue) { - return true; - } - - // Get all url() of this element. - var match; - while (match = matchUrl.exec(propertyValue)) { - allImgs.push({ - src: match[2], - element: element[0] - }); - }; - }); - }); - } else { - // For images only, the task is simpler. - obj - .find('img:uncached') - .each(function() { - allImgs.push({ - src: this.src, - element: this - }); - }); - }; - - var allImgsLength = allImgs.length, - allImgsLoaded = 0; - - // If no images found, don't bother. - if (allImgsLength == 0) { - finishedCallback.call(obj[0]); - }; - - $.each(allImgs, function(i, img) { - - var image = new Image; - - // Handle the image loading and error with the same callback. - $(image).bind('load.' + eventNamespace + ' error.' + eventNamespace, function(event) { - allImgsLoaded++; - - // If an error occurred with loading the image, set the third argument accordingly. - eachCallback.call(img.element, allImgsLoaded, allImgsLength, event.type == 'load'); - - if (allImgsLoaded == allImgsLength) { - finishedCallback.call(obj[0]); - return false; - }; - - }); - - image.src = img.src; - }); - }); - }; -})(jQuery); diff --git a/vendor/assets/javascripts/katex.js b/vendor/assets/javascripts/katex.js deleted file mode 100644 index 6b59a3477a7..00000000000 --- a/vendor/assets/javascripts/katex.js +++ /dev/null @@ -1,8685 +0,0 @@ -/* - The MIT License (MIT) - - Copyright (c) 2015 Khan Academy - - This software also uses portions of the underscore.js project, which is - MIT licensed with the following copyright: - - Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative - Reporters & Editors - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - */ - -/* - Here is how to build a version of KaTeX that works with gitlab. - - The problem is that the standard procedure for changing font location doesn't work for the empty string. - - 1. Clone KaTeX. Anything later than 4fb9445a9 (is merged into master) will do. - 2. make (requires node) - 3. sed -e 's,fonts/,,' -e 's/url\(([^)]*)\)/url(font-path\1)/g' build/katex.css > build/katex.scss - 4. Copy build/katex.js to gitlab/vendor/assets/javascripts/katex.js, - build/katex.scss to gitlab/vendor/assets/stylesheets/katex.scss and - fonts/* to gitlab/vendor/assets/fonts/. -*/ - -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.katex = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ -/* eslint no-console:0 */ -/** - * This is the main entry point for KaTeX. Here, we expose functions for - * rendering expressions either to DOM nodes or to markup strings. - * - * We also expose the ParseError class to check if errors thrown from KaTeX are - * errors in the expression, or errors in javascript handling. - */ - -var ParseError = require("./src/ParseError"); -var Settings = require("./src/Settings"); - -var buildTree = require("./src/buildTree"); -var parseTree = require("./src/parseTree"); -var utils = require("./src/utils"); - -/** - * Parse and build an expression, and place that expression in the DOM node - * given. - */ -var render = function(expression, baseNode, options) { - utils.clearNode(baseNode); - - var settings = new Settings(options); - - var tree = parseTree(expression, settings); - var node = buildTree(tree, expression, settings).toNode(); - - baseNode.appendChild(node); -}; - -// KaTeX's styles don't work properly in quirks mode. Print out an error, and -// disable rendering. -if (typeof document !== "undefined") { - if (document.compatMode !== "CSS1Compat") { - typeof console !== "undefined" && console.warn( - "Warning: KaTeX doesn't work in quirks mode. Make sure your " + - "website has a suitable doctype."); - - render = function() { - throw new ParseError("KaTeX doesn't work in quirks mode."); - }; - } -} - -/** - * Parse and build an expression, and return the markup for that. - */ -var renderToString = function(expression, options) { - var settings = new Settings(options); - - var tree = parseTree(expression, settings); - return buildTree(tree, expression, settings).toMarkup(); -}; - -/** - * Parse an expression and return the parse tree. - */ -var generateParseTree = function(expression, options) { - var settings = new Settings(options); - return parseTree(expression, settings); -}; - -module.exports = { - render: render, - renderToString: renderToString, - /** - * NOTE: This method is not currently recommended for public use. - * The internal tree representation is unstable and is very likely - * to change. Use at your own risk. - */ - __parse: generateParseTree, - ParseError: ParseError, -}; - -},{"./src/ParseError":6,"./src/Settings":8,"./src/buildTree":13,"./src/parseTree":22,"./src/utils":25}],2:[function(require,module,exports){ -/** @flow */ - -"use strict"; - -function getRelocatable(re) { - // In the future, this could use a WeakMap instead of an expando. - if (!re.__matchAtRelocatable) { - // Disjunctions are the lowest-precedence operator, so we can make any - // pattern match the empty string by appending `|()` to it: - // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-patterns - var source = re.source + "|()"; - - // We always make the new regex global. - var flags = "g" + (re.ignoreCase ? "i" : "") + (re.multiline ? "m" : "") + (re.unicode ? "u" : "") - // sticky (/.../y) doesn't make sense in conjunction with our relocation - // logic, so we ignore it here. - ; - - re.__matchAtRelocatable = new RegExp(source, flags); - } - return re.__matchAtRelocatable; -} - -function matchAt(re, str, pos) { - if (re.global || re.sticky) { - throw new Error("matchAt(...): Only non-global regexes are supported"); - } - var reloc = getRelocatable(re); - reloc.lastIndex = pos; - var match = reloc.exec(str); - // Last capturing group is our sentinel that indicates whether the regex - // matched at the given location. - if (match[match.length - 1] == null) { - // Original regex matched. - match.length = match.length - 1; - return match; - } else { - return null; - } -} - -module.exports = matchAt; -},{}],3:[function(require,module,exports){ -/** - * The Lexer class handles tokenizing the input in various ways. Since our - * parser expects us to be able to backtrack, the lexer allows lexing from any - * given starting point. - * - * Its main exposed function is the `lex` function, which takes a position to - * lex from and a type of token to lex. It defers to the appropriate `_innerLex` - * function. - * - * The various `_innerLex` functions perform the actual lexing of different - * kinds. - */ - -var matchAt = require("match-at"); - -var ParseError = require("./ParseError"); - -// The main lexer class -function Lexer(input) { - this.input = input; - this.pos = 0; -} - -/** - * The resulting token returned from `lex`. - * - * It consists of the token text plus some position information. - * The position information is essentially a range in an input string, - * but instead of referencing the bare input string, we refer to the lexer. - * That way it is possible to attach extra metadata to the input string, - * like for example a file name or similar. - * - * The position information (all three parameters) is optional, - * so it is OK to construct synthetic tokens if appropriate. - * Not providing available position information may lead to - * degraded error reporting, though. - * - * @param {string} text the text of this token - * @param {number=} start the start offset, zero-based inclusive - * @param {number=} end the end offset, zero-based exclusive - * @param {Lexer=} lexer the lexer which in turn holds the input string - */ -function Token(text, start, end, lexer) { - this.text = text; - this.start = start; - this.end = end; - this.lexer = lexer; -} - -/** - * Given a pair of tokens (this and endToken), compute a “Token†encompassing - * the whole input range enclosed by these two. - * - * @param {Token} endToken last token of the range, inclusive - * @param {string} text the text of the newly constructed token - */ -Token.prototype.range = function(endToken, text) { - if (endToken.lexer !== this.lexer) { - return new Token(text); // sorry, no position information available - } - return new Token(text, this.start, endToken.end, this.lexer); -}; - -/* The following tokenRegex - * - matches typical whitespace (but not NBSP etc.) using its first group - * - does not match any control character \x00-\x1f except whitespace - * - does not match a bare backslash - * - matches any ASCII character except those just mentioned - * - does not match the BMP private use area \uE000-\uF8FF - * - does not match bare surrogate code units - * - matches any BMP character except for those just described - * - matches any valid Unicode surrogate pair - * - matches a backslash followed by one or more letters - * - matches a backslash followed by any BMP character, including newline - * Just because the Lexer matches something doesn't mean it's valid input: - * If there is no matching function or symbol definition, the Parser will - * still reject the input. - */ -var tokenRegex = new RegExp( - "([ \r\n\t]+)|" + // whitespace - "([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]" + // single codepoint - "|[\uD800-\uDBFF][\uDC00-\uDFFF]" + // surrogate pair - "|\\\\(?:[a-zA-Z]+|[^\uD800-\uDFFF])" + // function name - ")" -); - -/** - * This function lexes a single token. - */ -Lexer.prototype.lex = function() { - var input = this.input; - var pos = this.pos; - if (pos === input.length) { - return new Token("EOF", pos, pos, this); - } - var match = matchAt(tokenRegex, input, pos); - if (match === null) { - throw new ParseError( - "Unexpected character: '" + input[pos] + "'", - new Token(input[pos], pos, pos + 1, this)); - } - var text = match[2] || " "; - var start = this.pos; - this.pos += match[0].length; - var end = this.pos; - return new Token(text, start, end, this); -}; - -module.exports = Lexer; - -},{"./ParseError":6,"match-at":2}],4:[function(require,module,exports){ -/** - * This file contains the “gullet†where macros are expanded - * until only non-macro tokens remain. - */ - -var Lexer = require("./Lexer"); - -function MacroExpander(input, macros) { - this.lexer = new Lexer(input); - this.macros = macros; - this.stack = []; // contains tokens in REVERSE order - this.discardedWhiteSpace = []; -} - -/** - * Recursively expand first token, then return first non-expandable token. - */ -MacroExpander.prototype.nextToken = function() { - for (;;) { - if (this.stack.length === 0) { - this.stack.push(this.lexer.lex()); - } - var topToken = this.stack.pop(); - var name = topToken.text; - if (!(name.charAt(0) === "\\" && this.macros.hasOwnProperty(name))) { - return topToken; - } - var expansion = this.macros[name]; - if (typeof expansion === "string") { - var bodyLexer = new Lexer(expansion); - expansion = []; - var tok = bodyLexer.lex(); - while (tok.text !== "EOF") { - expansion.push(tok); - tok = bodyLexer.lex(); - } - expansion.reverse(); // to fit in with stack using push and pop - this.macros[name] = expansion; - } - this.stack = this.stack.concat(expansion); - } -}; - -MacroExpander.prototype.get = function(ignoreSpace) { - this.discardedWhiteSpace = []; - var token = this.nextToken(); - if (ignoreSpace) { - while (token.text === " ") { - this.discardedWhiteSpace.push(token); - token = this.nextToken(); - } - } - return token; -}; - -/** - * Undo the effect of the preceding call to the get method. - * A call to this method MUST be immediately preceded and immediately followed - * by a call to get. Only used during mode switching, i.e. after one token - * was got in the old mode but should get got again in a new mode - * with possibly different whitespace handling. - */ -MacroExpander.prototype.unget = function(token) { - this.stack.push(token); - while (this.discardedWhiteSpace.length !== 0) { - this.stack.push(this.discardedWhiteSpace.pop()); - } -}; - -module.exports = MacroExpander; - -},{"./Lexer":3}],5:[function(require,module,exports){ -/** - * This file contains information about the options that the Parser carries - * around with it while parsing. Data is held in an `Options` object, and when - * recursing, a new `Options` object can be created with the `.with*` and - * `.reset` functions. - */ - -/** - * This is the main options class. It contains the style, size, color, and font - * of the current parse level. It also contains the style and size of the parent - * parse level, so size changes can be handled efficiently. - * - * Each of the `.with*` and `.reset` functions passes its current style and size - * as the parentStyle and parentSize of the new options class, so parent - * handling is taken care of automatically. - */ -function Options(data) { - this.style = data.style; - this.color = data.color; - this.size = data.size; - this.phantom = data.phantom; - this.font = data.font; - - if (data.parentStyle === undefined) { - this.parentStyle = data.style; - } else { - this.parentStyle = data.parentStyle; - } - - if (data.parentSize === undefined) { - this.parentSize = data.size; - } else { - this.parentSize = data.parentSize; - } -} - -/** - * Returns a new options object with the same properties as "this". Properties - * from "extension" will be copied to the new options object. - */ -Options.prototype.extend = function(extension) { - var data = { - style: this.style, - size: this.size, - color: this.color, - parentStyle: this.style, - parentSize: this.size, - phantom: this.phantom, - font: this.font, - }; - - for (var key in extension) { - if (extension.hasOwnProperty(key)) { - data[key] = extension[key]; - } - } - - return new Options(data); -}; - -/** - * Create a new options object with the given style. - */ -Options.prototype.withStyle = function(style) { - return this.extend({ - style: style, - }); -}; - -/** - * Create a new options object with the given size. - */ -Options.prototype.withSize = function(size) { - return this.extend({ - size: size, - }); -}; - -/** - * Create a new options object with the given color. - */ -Options.prototype.withColor = function(color) { - return this.extend({ - color: color, - }); -}; - -/** - * Create a new options object with "phantom" set to true. - */ -Options.prototype.withPhantom = function() { - return this.extend({ - phantom: true, - }); -}; - -/** - * Create a new options objects with the give font. - */ -Options.prototype.withFont = function(font) { - return this.extend({ - font: font, - }); -}; - -/** - * Create a new options object with the same style, size, and color. This is - * used so that parent style and size changes are handled correctly. - */ -Options.prototype.reset = function() { - return this.extend({}); -}; - -/** - * A map of color names to CSS colors. - * TODO(emily): Remove this when we have real macros - */ -var colorMap = { - "katex-blue": "#6495ed", - "katex-orange": "#ffa500", - "katex-pink": "#ff00af", - "katex-red": "#df0030", - "katex-green": "#28ae7b", - "katex-gray": "gray", - "katex-purple": "#9d38bd", - "katex-blueA": "#ccfaff", - "katex-blueB": "#80f6ff", - "katex-blueC": "#63d9ea", - "katex-blueD": "#11accd", - "katex-blueE": "#0c7f99", - "katex-tealA": "#94fff5", - "katex-tealB": "#26edd5", - "katex-tealC": "#01d1c1", - "katex-tealD": "#01a995", - "katex-tealE": "#208170", - "katex-greenA": "#b6ffb0", - "katex-greenB": "#8af281", - "katex-greenC": "#74cf70", - "katex-greenD": "#1fab54", - "katex-greenE": "#0d923f", - "katex-goldA": "#ffd0a9", - "katex-goldB": "#ffbb71", - "katex-goldC": "#ff9c39", - "katex-goldD": "#e07d10", - "katex-goldE": "#a75a05", - "katex-redA": "#fca9a9", - "katex-redB": "#ff8482", - "katex-redC": "#f9685d", - "katex-redD": "#e84d39", - "katex-redE": "#bc2612", - "katex-maroonA": "#ffbde0", - "katex-maroonB": "#ff92c6", - "katex-maroonC": "#ed5fa6", - "katex-maroonD": "#ca337c", - "katex-maroonE": "#9e034e", - "katex-purpleA": "#ddd7ff", - "katex-purpleB": "#c6b9fc", - "katex-purpleC": "#aa87ff", - "katex-purpleD": "#7854ab", - "katex-purpleE": "#543b78", - "katex-mintA": "#f5f9e8", - "katex-mintB": "#edf2df", - "katex-mintC": "#e0e5cc", - "katex-grayA": "#f6f7f7", - "katex-grayB": "#f0f1f2", - "katex-grayC": "#e3e5e6", - "katex-grayD": "#d6d8da", - "katex-grayE": "#babec2", - "katex-grayF": "#888d93", - "katex-grayG": "#626569", - "katex-grayH": "#3b3e40", - "katex-grayI": "#21242c", - "katex-kaBlue": "#314453", - "katex-kaGreen": "#71B307", -}; - -/** - * Gets the CSS color of the current options object, accounting for the - * `colorMap`. - */ -Options.prototype.getColor = function() { - if (this.phantom) { - return "transparent"; - } else { - return colorMap[this.color] || this.color; - } -}; - -module.exports = Options; - -},{}],6:[function(require,module,exports){ -/** - * This is the ParseError class, which is the main error thrown by KaTeX - * functions when something has gone wrong. This is used to distinguish internal - * errors from errors in the expression that the user provided. - * - * If possible, a caller should provide a Token or ParseNode with information - * about where in the source string the problem occurred. - * - * @param {string} message The error message - * @param {(Token|ParseNode)=} token An object providing position information - */ -function ParseError(message, token) { - var error = "KaTeX parse error: " + message; - var start; - var end; - - if (token && token.lexer && token.start <= token.end) { - // If we have the input and a position, make the error a bit fancier - - // Get the input - var input = token.lexer.input; - - // Prepend some information - start = token.start; - end = token.end; - if (start === input.length) { - error += " at end of input: "; - } else { - error += " at position " + (start + 1) + ": "; - } - - // Underline token in question using combining underscores - var underlined = input.slice(start, end).replace(/[^]/g, "$&\u0332"); - - // Extract some context from the input and add it to the error - var left; - if (start > 15) { - left = "…" + input.slice(start - 15, start); - } else { - left = input.slice(0, start); - } - var right; - if (end + 15 < input.length) { - right = input.slice(end, end + 15) + "…"; - } else { - right = input.slice(end); - } - error += left + underlined + right; - } - - // Some hackery to make ParseError a prototype of Error - // See http://stackoverflow.com/a/8460753 - var self = new Error(error); - self.name = "ParseError"; - self.__proto__ = ParseError.prototype; - - self.position = start; - return self; -} - -// More hackery -ParseError.prototype.__proto__ = Error.prototype; - -module.exports = ParseError; - -},{}],7:[function(require,module,exports){ -/* eslint no-constant-condition:0 */ -var functions = require("./functions"); -var environments = require("./environments"); -var MacroExpander = require("./MacroExpander"); -var symbols = require("./symbols"); -var utils = require("./utils"); -var cjkRegex = require("./unicodeRegexes").cjkRegex; - -var parseData = require("./parseData"); -var ParseError = require("./ParseError"); - -/** - * This file contains the parser used to parse out a TeX expression from the - * input. Since TeX isn't context-free, standard parsers don't work particularly - * well. - * - * The strategy of this parser is as such: - * - * The main functions (the `.parse...` ones) take a position in the current - * parse string to parse tokens from. The lexer (found in Lexer.js, stored at - * this.lexer) also supports pulling out tokens at arbitrary places. When - * individual tokens are needed at a position, the lexer is called to pull out a - * token, which is then used. - * - * The parser has a property called "mode" indicating the mode that - * the parser is currently in. Currently it has to be one of "math" or - * "text", which denotes whether the current environment is a math-y - * one or a text-y one (e.g. inside \text). Currently, this serves to - * limit the functions which can be used in text mode. - * - * The main functions then return an object which contains the useful data that - * was parsed at its given point, and a new position at the end of the parsed - * data. The main functions can call each other and continue the parsing by - * using the returned position as a new starting point. - * - * There are also extra `.handle...` functions, which pull out some reused - * functionality into self-contained functions. - * - * The earlier functions return ParseNodes. - * The later functions (which are called deeper in the parse) sometimes return - * ParseFuncOrArgument, which contain a ParseNode as well as some data about - * whether the parsed object is a function which is missing some arguments, or a - * standalone object which can be used as an argument to another function. - */ - -/** - * Main Parser class - */ -function Parser(input, settings) { - // Create a new macro expander (gullet) and (indirectly via that) also a - // new lexer (mouth) for this parser (stomach, in the language of TeX) - this.gullet = new MacroExpander(input, settings.macros); - // Store the settings for use in parsing - this.settings = settings; -} - -var ParseNode = parseData.ParseNode; - -/** - * An initial function (without its arguments), or an argument to a function. - * The `result` argument should be a ParseNode. - */ -function ParseFuncOrArgument(result, isFunction, token) { - this.result = result; - // Is this a function (i.e. is it something defined in functions.js)? - this.isFunction = isFunction; - this.token = token; -} - -/** - * Checks a result to make sure it has the right type, and throws an - * appropriate error otherwise. - * - * @param {boolean=} consume whether to consume the expected token, - * defaults to true - */ -Parser.prototype.expect = function(text, consume) { - if (this.nextToken.text !== text) { - throw new ParseError( - "Expected '" + text + "', got '" + this.nextToken.text + "'", - this.nextToken - ); - } - if (consume !== false) { - this.consume(); - } -}; - -/** - * Considers the current look ahead token as consumed, - * and fetches the one after that as the new look ahead. - */ -Parser.prototype.consume = function() { - this.nextToken = this.gullet.get(this.mode === "math"); -}; - -Parser.prototype.switchMode = function(newMode) { - this.gullet.unget(this.nextToken); - this.mode = newMode; - this.consume(); -}; - -/** - * Main parsing function, which parses an entire input. - * - * @return {?Array.<ParseNode>} - */ -Parser.prototype.parse = function() { - // Try to parse the input - this.mode = "math"; - this.consume(); - var parse = this.parseInput(); - return parse; -}; - -/** - * Parses an entire input tree. - */ -Parser.prototype.parseInput = function() { - // Parse an expression - var expression = this.parseExpression(false); - // If we succeeded, make sure there's an EOF at the end - this.expect("EOF", false); - return expression; -}; - -var endOfExpression = ["}", "\\end", "\\right", "&", "\\\\", "\\cr"]; - -/** - * Parses an "expression", which is a list of atoms. - * - * @param {boolean} breakOnInfix Should the parsing stop when we hit infix - * nodes? This happens when functions have higher precendence - * than infix nodes in implicit parses. - * - * @param {?string} breakOnTokenText The text of the token that the expression - * should end with, or `null` if something else should end the - * expression. - * - * @return {ParseNode} - */ -Parser.prototype.parseExpression = function(breakOnInfix, breakOnTokenText) { - var body = []; - // Keep adding atoms to the body until we can't parse any more atoms (either - // we reached the end, a }, or a \right) - while (true) { - var lex = this.nextToken; - if (endOfExpression.indexOf(lex.text) !== -1) { - break; - } - if (breakOnTokenText && lex.text === breakOnTokenText) { - break; - } - if (breakOnInfix && functions[lex.text] && functions[lex.text].infix) { - break; - } - var atom = this.parseAtom(); - if (!atom) { - if (!this.settings.throwOnError && lex.text[0] === "\\") { - var errorNode = this.handleUnsupportedCmd(); - body.push(errorNode); - continue; - } - - break; - } - body.push(atom); - } - return this.handleInfixNodes(body); -}; - -/** - * Rewrites infix operators such as \over with corresponding commands such - * as \frac. - * - * There can only be one infix operator per group. If there's more than one - * then the expression is ambiguous. This can be resolved by adding {}. - * - * @returns {Array} - */ -Parser.prototype.handleInfixNodes = function(body) { - var overIndex = -1; - var funcName; - - for (var i = 0; i < body.length; i++) { - var node = body[i]; - if (node.type === "infix") { - if (overIndex !== -1) { - throw new ParseError( - "only one infix operator per group", - node.value.token); - } - overIndex = i; - funcName = node.value.replaceWith; - } - } - - if (overIndex !== -1) { - var numerNode; - var denomNode; - - var numerBody = body.slice(0, overIndex); - var denomBody = body.slice(overIndex + 1); - - if (numerBody.length === 1 && numerBody[0].type === "ordgroup") { - numerNode = numerBody[0]; - } else { - numerNode = new ParseNode("ordgroup", numerBody, this.mode); - } - - if (denomBody.length === 1 && denomBody[0].type === "ordgroup") { - denomNode = denomBody[0]; - } else { - denomNode = new ParseNode("ordgroup", denomBody, this.mode); - } - - var value = this.callFunction( - funcName, [numerNode, denomNode], null); - return [new ParseNode(value.type, value, this.mode)]; - } else { - return body; - } -}; - -// The greediness of a superscript or subscript -var SUPSUB_GREEDINESS = 1; - -/** - * Handle a subscript or superscript with nice errors. - */ -Parser.prototype.handleSupSubscript = function(name) { - var symbolToken = this.nextToken; - var symbol = symbolToken.text; - this.consume(); - var group = this.parseGroup(); - - if (!group) { - if (!this.settings.throwOnError && this.nextToken.text[0] === "\\") { - return this.handleUnsupportedCmd(); - } else { - throw new ParseError( - "Expected group after '" + symbol + "'", - symbolToken - ); - } - } else if (group.isFunction) { - // ^ and _ have a greediness, so handle interactions with functions' - // greediness - var funcGreediness = functions[group.result].greediness; - if (funcGreediness > SUPSUB_GREEDINESS) { - return this.parseFunction(group); - } else { - throw new ParseError( - "Got function '" + group.result + "' with no arguments " + - "as " + name, symbolToken); - } - } else { - return group.result; - } -}; - -/** - * Converts the textual input of an unsupported command into a text node - * contained within a color node whose color is determined by errorColor - */ -Parser.prototype.handleUnsupportedCmd = function() { - var text = this.nextToken.text; - var textordArray = []; - - for (var i = 0; i < text.length; i++) { - textordArray.push(new ParseNode("textord", text[i], "text")); - } - - var textNode = new ParseNode( - "text", - { - body: textordArray, - type: "text", - }, - this.mode); - - var colorNode = new ParseNode( - "color", - { - color: this.settings.errorColor, - value: [textNode], - type: "color", - }, - this.mode); - - this.consume(); - return colorNode; -}; - -/** - * Parses a group with optional super/subscripts. - * - * @return {?ParseNode} - */ -Parser.prototype.parseAtom = function() { - // The body of an atom is an implicit group, so that things like - // \left(x\right)^2 work correctly. - var base = this.parseImplicitGroup(); - - // In text mode, we don't have superscripts or subscripts - if (this.mode === "text") { - return base; - } - - // Note that base may be empty (i.e. null) at this point. - - var superscript; - var subscript; - while (true) { - // Lex the first token - var lex = this.nextToken; - - if (lex.text === "\\limits" || lex.text === "\\nolimits") { - // We got a limit control - if (!base || base.type !== "op") { - throw new ParseError( - "Limit controls must follow a math operator", - lex); - } else { - var limits = lex.text === "\\limits"; - base.value.limits = limits; - base.value.alwaysHandleSupSub = true; - } - this.consume(); - } else if (lex.text === "^") { - // We got a superscript start - if (superscript) { - throw new ParseError("Double superscript", lex); - } - superscript = this.handleSupSubscript("superscript"); - } else if (lex.text === "_") { - // We got a subscript start - if (subscript) { - throw new ParseError("Double subscript", lex); - } - subscript = this.handleSupSubscript("subscript"); - } else if (lex.text === "'") { - // We got a prime - var prime = new ParseNode("textord", "\\prime", this.mode); - - // Many primes can be grouped together, so we handle this here - var primes = [prime]; - this.consume(); - // Keep lexing tokens until we get something that's not a prime - while (this.nextToken.text === "'") { - // For each one, add another prime to the list - primes.push(prime); - this.consume(); - } - // Put them into an ordgroup as the superscript - superscript = new ParseNode("ordgroup", primes, this.mode); - } else { - // If it wasn't ^, _, or ', stop parsing super/subscripts - break; - } - } - - if (superscript || subscript) { - // If we got either a superscript or subscript, create a supsub - return new ParseNode("supsub", { - base: base, - sup: superscript, - sub: subscript, - }, this.mode); - } else { - // Otherwise return the original body - return base; - } -}; - -// A list of the size-changing functions, for use in parseImplicitGroup -var sizeFuncs = [ - "\\tiny", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", - "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge", -]; - -// A list of the style-changing functions, for use in parseImplicitGroup -var styleFuncs = [ - "\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle", -]; - -/** - * Parses an implicit group, which is a group that starts at the end of a - * specified, and ends right before a higher explicit group ends, or at EOL. It - * is used for functions that appear to affect the current style, like \Large or - * \textrm, where instead of keeping a style we just pretend that there is an - * implicit grouping after it until the end of the group. E.g. - * small text {\Large large text} small text again - * It is also used for \left and \right to get the correct grouping. - * - * @return {?ParseNode} - */ -Parser.prototype.parseImplicitGroup = function() { - var start = this.parseSymbol(); - - if (start == null) { - // If we didn't get anything we handle, fall back to parseFunction - return this.parseFunction(); - } - - var func = start.result; - var body; - - if (func === "\\left") { - // If we see a left: - // Parse the entire left function (including the delimiter) - var left = this.parseFunction(start); - // Parse out the implicit body - body = this.parseExpression(false); - // Check the next token - this.expect("\\right", false); - var right = this.parseFunction(); - return new ParseNode("leftright", { - body: body, - left: left.value.value, - right: right.value.value, - }, this.mode); - } else if (func === "\\begin") { - // begin...end is similar to left...right - var begin = this.parseFunction(start); - var envName = begin.value.name; - if (!environments.hasOwnProperty(envName)) { - throw new ParseError( - "No such environment: " + envName, begin.value.nameGroup); - } - // Build the environment object. Arguments and other information will - // be made available to the begin and end methods using properties. - var env = environments[envName]; - var args = this.parseArguments("\\begin{" + envName + "}", env); - var context = { - mode: this.mode, - envName: envName, - parser: this, - positions: args.pop(), - }; - var result = env.handler(context, args); - this.expect("\\end", false); - var endNameToken = this.nextToken; - var end = this.parseFunction(); - if (end.value.name !== envName) { - throw new ParseError( - "Mismatch: \\begin{" + envName + "} matched " + - "by \\end{" + end.value.name + "}", - endNameToken); - } - result.position = end.position; - return result; - } else if (utils.contains(sizeFuncs, func)) { - // If we see a sizing function, parse out the implict body - body = this.parseExpression(false); - return new ParseNode("sizing", { - // Figure out what size to use based on the list of functions above - size: "size" + (utils.indexOf(sizeFuncs, func) + 1), - value: body, - }, this.mode); - } else if (utils.contains(styleFuncs, func)) { - // If we see a styling function, parse out the implict body - body = this.parseExpression(true); - return new ParseNode("styling", { - // Figure out what style to use by pulling out the style from - // the function name - style: func.slice(1, func.length - 5), - value: body, - }, this.mode); - } else { - // Defer to parseFunction if it's not a function we handle - return this.parseFunction(start); - } -}; - -/** - * Parses an entire function, including its base and all of its arguments. - * The base might either have been parsed already, in which case - * it is provided as an argument, or it's the next group in the input. - * - * @param {ParseFuncOrArgument=} baseGroup optional as described above - * @return {?ParseNode} - */ -Parser.prototype.parseFunction = function(baseGroup) { - if (!baseGroup) { - baseGroup = this.parseGroup(); - } - - if (baseGroup) { - if (baseGroup.isFunction) { - var func = baseGroup.result; - var funcData = functions[func]; - if (this.mode === "text" && !funcData.allowedInText) { - throw new ParseError( - "Can't use function '" + func + "' in text mode", - baseGroup.token); - } - - var args = this.parseArguments(func, funcData); - var token = baseGroup.token; - var result = this.callFunction(func, args, args.pop(), token); - return new ParseNode(result.type, result, this.mode); - } else { - return baseGroup.result; - } - } else { - return null; - } -}; - -/** - * Call a function handler with a suitable context and arguments. - */ -Parser.prototype.callFunction = function(name, args, positions, token) { - var context = { - funcName: name, - parser: this, - positions: positions, - token: token, - }; - return functions[name].handler(context, args); -}; - -/** - * Parses the arguments of a function or environment - * - * @param {string} func "\name" or "\begin{name}" - * @param {{numArgs:number,numOptionalArgs:number|undefined}} funcData - * @return the array of arguments, with the list of positions as last element - */ -Parser.prototype.parseArguments = function(func, funcData) { - var totalArgs = funcData.numArgs + funcData.numOptionalArgs; - if (totalArgs === 0) { - return [[this.pos]]; - } - - var baseGreediness = funcData.greediness; - var positions = [this.pos]; - var args = []; - - for (var i = 0; i < totalArgs; i++) { - var nextToken = this.nextToken; - var argType = funcData.argTypes && funcData.argTypes[i]; - var arg; - if (i < funcData.numOptionalArgs) { - if (argType) { - arg = this.parseGroupOfType(argType, true); - } else { - arg = this.parseGroup(true); - } - if (!arg) { - args.push(null); - positions.push(this.pos); - continue; - } - } else { - if (argType) { - arg = this.parseGroupOfType(argType); - } else { - arg = this.parseGroup(); - } - if (!arg) { - if (!this.settings.throwOnError && - this.nextToken.text[0] === "\\") { - arg = new ParseFuncOrArgument( - this.handleUnsupportedCmd(this.nextToken.text), - false); - } else { - throw new ParseError( - "Expected group after '" + func + "'", nextToken); - } - } - } - var argNode; - if (arg.isFunction) { - var argGreediness = - functions[arg.result].greediness; - if (argGreediness > baseGreediness) { - argNode = this.parseFunction(arg); - } else { - throw new ParseError( - "Got function '" + arg.result + "' as " + - "argument to '" + func + "'", nextToken); - } - } else { - argNode = arg.result; - } - args.push(argNode); - positions.push(this.pos); - } - - args.push(positions); - - return args; -}; - - -/** - * Parses a group when the mode is changing. - * - * @return {?ParseFuncOrArgument} - */ -Parser.prototype.parseGroupOfType = function(innerMode, optional) { - var outerMode = this.mode; - // Handle `original` argTypes - if (innerMode === "original") { - innerMode = outerMode; - } - - if (innerMode === "color") { - return this.parseColorGroup(optional); - } - if (innerMode === "size") { - return this.parseSizeGroup(optional); - } - - this.switchMode(innerMode); - if (innerMode === "text") { - // text mode is special because it should ignore the whitespace before - // it - while (this.nextToken.text === " ") { - this.consume(); - } - } - // By the time we get here, innerMode is one of "text" or "math". - // We switch the mode of the parser, recurse, then restore the old mode. - var res = this.parseGroup(optional); - this.switchMode(outerMode); - return res; -}; - -/** - * Parses a group, essentially returning the string formed by the - * brace-enclosed tokens plus some position information. - * - * @param {string} modeName Used to describe the mode in error messages - * @param {boolean=} optional Whether the group is optional or required - */ -Parser.prototype.parseStringGroup = function(modeName, optional) { - if (optional && this.nextToken.text !== "[") { - return null; - } - var outerMode = this.mode; - this.mode = "text"; - this.expect(optional ? "[" : "{"); - var str = ""; - var firstToken = this.nextToken; - var lastToken = firstToken; - while (this.nextToken.text !== (optional ? "]" : "}")) { - if (this.nextToken.text === "EOF") { - throw new ParseError( - "Unexpected end of input in " + modeName, - firstToken.range(this.nextToken, str)); - } - lastToken = this.nextToken; - str += lastToken.text; - this.consume(); - } - this.mode = outerMode; - this.expect(optional ? "]" : "}"); - return firstToken.range(lastToken, str); -}; - -/** - * Parses a color description. - */ -Parser.prototype.parseColorGroup = function(optional) { - var res = this.parseStringGroup("color", optional); - if (!res) { - return null; - } - var match = (/^(#[a-z0-9]+|[a-z]+)$/i).exec(res.text); - if (!match) { - throw new ParseError("Invalid color: '" + res.text + "'", res); - } - return new ParseFuncOrArgument( - new ParseNode("color", match[0], this.mode), - false); -}; - -/** - * Parses a size specification, consisting of magnitude and unit. - */ -Parser.prototype.parseSizeGroup = function(optional) { - var res = this.parseStringGroup("size", optional); - if (!res) { - return null; - } - var match = (/(-?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/).exec(res.text); - if (!match) { - throw new ParseError("Invalid size: '" + res.text + "'", res); - } - var data = { - number: +(match[1] + match[2]), // sign + magnitude, cast to number - unit: match[3], - }; - if (data.unit !== "em" && data.unit !== "ex") { - throw new ParseError("Invalid unit: '" + data.unit + "'", res); - } - return new ParseFuncOrArgument( - new ParseNode("color", data, this.mode), - false); -}; - -/** - * If the argument is false or absent, this parses an ordinary group, - * which is either a single nucleus (like "x") or an expression - * in braces (like "{x+y}"). - * If the argument is true, it parses either a bracket-delimited expression - * (like "[x+y]") or returns null to indicate the absence of a - * bracket-enclosed group. - * - * @param {boolean=} optional Whether the group is optional or required - * @return {?ParseFuncOrArgument} - */ -Parser.prototype.parseGroup = function(optional) { - var firstToken = this.nextToken; - // Try to parse an open brace - if (this.nextToken.text === (optional ? "[" : "{")) { - // If we get a brace, parse an expression - this.consume(); - var expression = this.parseExpression(false, optional ? "]" : null); - var lastToken = this.nextToken; - // Make sure we get a close brace - this.expect(optional ? "]" : "}"); - if (this.mode === "text") { - this.formLigatures(expression); - } - return new ParseFuncOrArgument( - new ParseNode("ordgroup", expression, this.mode, - firstToken, lastToken), - false); - } else { - // Otherwise, just return a nucleus, or nothing for an optional group - return optional ? null : this.parseSymbol(); - } -}; - -/** - * Form ligature-like combinations of characters for text mode. - * This includes inputs like "--", "---", "``" and "''". - * The result will simply replace multiple textord nodes with a single - * character in each value by a single textord node having multiple - * characters in its value. The representation is still ASCII source. - * - * @param {Array.<ParseNode>} group the nodes of this group, - * list will be moified in place - */ -Parser.prototype.formLigatures = function(group) { - var i; - var n = group.length - 1; - for (i = 0; i < n; ++i) { - var a = group[i]; - var v = a.value; - if (v === "-" && group[i + 1].value === "-") { - if (i + 1 < n && group[i + 2].value === "-") { - group.splice(i, 3, new ParseNode( - "textord", "---", "text", a, group[i + 2])); - n -= 2; - } else { - group.splice(i, 2, new ParseNode( - "textord", "--", "text", a, group[i + 1])); - n -= 1; - } - } - if ((v === "'" || v === "`") && group[i + 1].value === v) { - group.splice(i, 2, new ParseNode( - "textord", v + v, "text", a, group[i + 1])); - n -= 1; - } - } -}; - -/** - * Parse a single symbol out of the string. Here, we handle both the functions - * we have defined, as well as the single character symbols - * - * @return {?ParseFuncOrArgument} - */ -Parser.prototype.parseSymbol = function() { - var nucleus = this.nextToken; - - if (functions[nucleus.text]) { - this.consume(); - // If there exists a function with this name, we return the function and - // say that it is a function. - return new ParseFuncOrArgument( - nucleus.text, - true, nucleus); - } else if (symbols[this.mode][nucleus.text]) { - this.consume(); - // Otherwise if this is a no-argument function, find the type it - // corresponds to in the symbols map - return new ParseFuncOrArgument( - new ParseNode(symbols[this.mode][nucleus.text].group, - nucleus.text, this.mode, nucleus), - false, nucleus); - } else if (this.mode === "text" && cjkRegex.test(nucleus.text)) { - this.consume(); - return new ParseFuncOrArgument( - new ParseNode("textord", nucleus.text, this.mode, nucleus), - false, nucleus); - } else { - return null; - } -}; - -Parser.prototype.ParseNode = ParseNode; - -module.exports = Parser; - -},{"./MacroExpander":4,"./ParseError":6,"./environments":16,"./functions":19,"./parseData":21,"./symbols":23,"./unicodeRegexes":24,"./utils":25}],8:[function(require,module,exports){ -/** - * This is a module for storing settings passed into KaTeX. It correctly handles - * default settings. - */ - -/** - * Helper function for getting a default value if the value is undefined - */ -function get(option, defaultValue) { - return option === undefined ? defaultValue : option; -} - -/** - * The main Settings object - * - * The current options stored are: - * - displayMode: Whether the expression should be typeset by default in - * textstyle or displaystyle (default false) - */ -function Settings(options) { - // allow null options - options = options || {}; - this.displayMode = get(options.displayMode, false); - this.throwOnError = get(options.throwOnError, true); - this.errorColor = get(options.errorColor, "#cc0000"); - this.macros = options.macros || {}; -} - -module.exports = Settings; - -},{}],9:[function(require,module,exports){ -/** - * This file contains information and classes for the various kinds of styles - * used in TeX. It provides a generic `Style` class, which holds information - * about a specific style. It then provides instances of all the different kinds - * of styles possible, and provides functions to move between them and get - * information about them. - */ - -/** - * The main style class. Contains a unique id for the style, a size (which is - * the same for cramped and uncramped version of a style), a cramped flag, and a - * size multiplier, which gives the size difference between a style and - * textstyle. - */ -function Style(id, size, multiplier, cramped) { - this.id = id; - this.size = size; - this.cramped = cramped; - this.sizeMultiplier = multiplier; -} - -/** - * Get the style of a superscript given a base in the current style. - */ -Style.prototype.sup = function() { - return styles[sup[this.id]]; -}; - -/** - * Get the style of a subscript given a base in the current style. - */ -Style.prototype.sub = function() { - return styles[sub[this.id]]; -}; - -/** - * Get the style of a fraction numerator given the fraction in the current - * style. - */ -Style.prototype.fracNum = function() { - return styles[fracNum[this.id]]; -}; - -/** - * Get the style of a fraction denominator given the fraction in the current - * style. - */ -Style.prototype.fracDen = function() { - return styles[fracDen[this.id]]; -}; - -/** - * Get the cramped version of a style (in particular, cramping a cramped style - * doesn't change the style). - */ -Style.prototype.cramp = function() { - return styles[cramp[this.id]]; -}; - -/** - * HTML class name, like "displaystyle cramped" - */ -Style.prototype.cls = function() { - return sizeNames[this.size] + (this.cramped ? " cramped" : " uncramped"); -}; - -/** - * HTML Reset class name, like "reset-textstyle" - */ -Style.prototype.reset = function() { - return resetNames[this.size]; -}; - -// IDs of the different styles -var D = 0; -var Dc = 1; -var T = 2; -var Tc = 3; -var S = 4; -var Sc = 5; -var SS = 6; -var SSc = 7; - -// String names for the different sizes -var sizeNames = [ - "displaystyle textstyle", - "textstyle", - "scriptstyle", - "scriptscriptstyle", -]; - -// Reset names for the different sizes -var resetNames = [ - "reset-textstyle", - "reset-textstyle", - "reset-scriptstyle", - "reset-scriptscriptstyle", -]; - -// Instances of the different styles -var styles = [ - new Style(D, 0, 1.0, false), - new Style(Dc, 0, 1.0, true), - new Style(T, 1, 1.0, false), - new Style(Tc, 1, 1.0, true), - new Style(S, 2, 0.7, false), - new Style(Sc, 2, 0.7, true), - new Style(SS, 3, 0.5, false), - new Style(SSc, 3, 0.5, true), -]; - -// Lookup tables for switching from one style to another -var sup = [S, Sc, S, Sc, SS, SSc, SS, SSc]; -var sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc]; -var fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc]; -var fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc]; -var cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc]; - -// We only export some of the styles. Also, we don't export the `Style` class so -// no more styles can be generated. -module.exports = { - DISPLAY: styles[D], - TEXT: styles[T], - SCRIPT: styles[S], - SCRIPTSCRIPT: styles[SS], -}; - -},{}],10:[function(require,module,exports){ -/* eslint no-console:0 */ -/** - * This module contains general functions that can be used for building - * different kinds of domTree nodes in a consistent manner. - */ - -var domTree = require("./domTree"); -var fontMetrics = require("./fontMetrics"); -var symbols = require("./symbols"); -var utils = require("./utils"); - -var greekCapitals = [ - "\\Gamma", - "\\Delta", - "\\Theta", - "\\Lambda", - "\\Xi", - "\\Pi", - "\\Sigma", - "\\Upsilon", - "\\Phi", - "\\Psi", - "\\Omega", -]; - -// The following have to be loaded from Main-Italic font, using class mainit -var mainitLetters = [ - "\u0131", // dotless i, \imath - "\u0237", // dotless j, \jmath - "\u00a3", // \pounds -]; - -/** - * Makes a symbolNode after translation via the list of symbols in symbols.js. - * Correctly pulls out metrics for the character, and optionally takes a list of - * classes to be attached to the node. - */ -var makeSymbol = function(value, style, mode, color, classes) { - // Replace the value with its replaced value from symbol.js - if (symbols[mode][value] && symbols[mode][value].replace) { - value = symbols[mode][value].replace; - } - - var metrics = fontMetrics.getCharacterMetrics(value, style); - - var symbolNode; - if (metrics) { - symbolNode = new domTree.symbolNode( - value, metrics.height, metrics.depth, metrics.italic, metrics.skew, - classes); - } else { - // TODO(emily): Figure out a good way to only print this in development - typeof console !== "undefined" && console.warn( - "No character metrics for '" + value + "' in style '" + - style + "'"); - symbolNode = new domTree.symbolNode(value, 0, 0, 0, 0, classes); - } - - if (color) { - symbolNode.style.color = color; - } - - return symbolNode; -}; - -/** - * Makes a symbol in Main-Regular or AMS-Regular. - * Used for rel, bin, open, close, inner, and punct. - */ -var mathsym = function(value, mode, color, classes) { - // Decide what font to render the symbol in by its entry in the symbols - // table. - // Have a special case for when the value = \ because the \ is used as a - // textord in unsupported command errors but cannot be parsed as a regular - // text ordinal and is therefore not present as a symbol in the symbols - // table for text - if (value === "\\" || symbols[mode][value].font === "main") { - return makeSymbol(value, "Main-Regular", mode, color, classes); - } else { - return makeSymbol( - value, "AMS-Regular", mode, color, classes.concat(["amsrm"])); - } -}; - -/** - * Makes a symbol in the default font for mathords and textords. - */ -var mathDefault = function(value, mode, color, classes, type) { - if (type === "mathord") { - return mathit(value, mode, color, classes); - } else if (type === "textord") { - return makeSymbol( - value, "Main-Regular", mode, color, classes.concat(["mathrm"])); - } else { - throw new Error("unexpected type: " + type + " in mathDefault"); - } -}; - -/** - * Makes a symbol in the italic math font. - */ -var mathit = function(value, mode, color, classes) { - if (/[0-9]/.test(value.charAt(0)) || - // glyphs for \imath and \jmath do not exist in Math-Italic so we - // need to use Main-Italic instead - utils.contains(mainitLetters, value) || - utils.contains(greekCapitals, value)) { - return makeSymbol( - value, "Main-Italic", mode, color, classes.concat(["mainit"])); - } else { - return makeSymbol( - value, "Math-Italic", mode, color, classes.concat(["mathit"])); - } -}; - -/** - * Makes either a mathord or textord in the correct font and color. - */ -var makeOrd = function(group, options, type) { - var mode = group.mode; - var value = group.value; - if (symbols[mode][value] && symbols[mode][value].replace) { - value = symbols[mode][value].replace; - } - - var classes = ["mord"]; - var color = options.getColor(); - - var font = options.font; - if (font) { - if (font === "mathit" || utils.contains(mainitLetters, value)) { - return mathit(value, mode, color, classes); - } else { - var fontName = fontMap[font].fontName; - if (fontMetrics.getCharacterMetrics(value, fontName)) { - return makeSymbol( - value, fontName, mode, color, classes.concat([font])); - } else { - return mathDefault(value, mode, color, classes, type); - } - } - } else { - return mathDefault(value, mode, color, classes, type); - } -}; - -/** - * Calculate the height, depth, and maxFontSize of an element based on its - * children. - */ -var sizeElementFromChildren = function(elem) { - var height = 0; - var depth = 0; - var maxFontSize = 0; - - if (elem.children) { - for (var i = 0; i < elem.children.length; i++) { - if (elem.children[i].height > height) { - height = elem.children[i].height; - } - if (elem.children[i].depth > depth) { - depth = elem.children[i].depth; - } - if (elem.children[i].maxFontSize > maxFontSize) { - maxFontSize = elem.children[i].maxFontSize; - } - } - } - - elem.height = height; - elem.depth = depth; - elem.maxFontSize = maxFontSize; -}; - -/** - * Makes a span with the given list of classes, list of children, and color. - */ -var makeSpan = function(classes, children, color) { - var span = new domTree.span(classes, children); - - sizeElementFromChildren(span); - - if (color) { - span.style.color = color; - } - - return span; -}; - -/** - * Makes a document fragment with the given list of children. - */ -var makeFragment = function(children) { - var fragment = new domTree.documentFragment(children); - - sizeElementFromChildren(fragment); - - return fragment; -}; - -/** - * Makes an element placed in each of the vlist elements to ensure that each - * element has the same max font size. To do this, we create a zero-width space - * with the correct font size. - */ -var makeFontSizer = function(options, fontSize) { - var fontSizeInner = makeSpan([], [new domTree.symbolNode("\u200b")]); - fontSizeInner.style.fontSize = - (fontSize / options.style.sizeMultiplier) + "em"; - - var fontSizer = makeSpan( - ["fontsize-ensurer", "reset-" + options.size, "size5"], - [fontSizeInner]); - - return fontSizer; -}; - -/** - * Makes a vertical list by stacking elements and kerns on top of each other. - * Allows for many different ways of specifying the positioning method. - * - * Arguments: - * - children: A list of child or kern nodes to be stacked on top of each other - * (i.e. the first element will be at the bottom, and the last at - * the top). Element nodes are specified as - * {type: "elem", elem: node} - * while kern nodes are specified as - * {type: "kern", size: size} - * - positionType: The method by which the vlist should be positioned. Valid - * values are: - * - "individualShift": The children list only contains elem - * nodes, and each node contains an extra - * "shift" value of how much it should be - * shifted (note that shifting is always - * moving downwards). positionData is - * ignored. - * - "top": The positionData specifies the topmost point of - * the vlist (note this is expected to be a height, - * so positive values move up) - * - "bottom": The positionData specifies the bottommost point - * of the vlist (note this is expected to be a - * depth, so positive values move down - * - "shift": The vlist will be positioned such that its - * baseline is positionData away from the baseline - * of the first child. Positive values move - * downwards. - * - "firstBaseline": The vlist will be positioned such that - * its baseline is aligned with the - * baseline of the first child. - * positionData is ignored. (this is - * equivalent to "shift" with - * positionData=0) - * - positionData: Data used in different ways depending on positionType - * - options: An Options object - * - */ -var makeVList = function(children, positionType, positionData, options) { - var depth; - var currPos; - var i; - if (positionType === "individualShift") { - var oldChildren = children; - children = [oldChildren[0]]; - - // Add in kerns to the list of children to get each element to be - // shifted to the correct specified shift - depth = -oldChildren[0].shift - oldChildren[0].elem.depth; - currPos = depth; - for (i = 1; i < oldChildren.length; i++) { - var diff = -oldChildren[i].shift - currPos - - oldChildren[i].elem.depth; - var size = diff - - (oldChildren[i - 1].elem.height + - oldChildren[i - 1].elem.depth); - - currPos = currPos + diff; - - children.push({type: "kern", size: size}); - children.push(oldChildren[i]); - } - } else if (positionType === "top") { - // We always start at the bottom, so calculate the bottom by adding up - // all the sizes - var bottom = positionData; - for (i = 0; i < children.length; i++) { - if (children[i].type === "kern") { - bottom -= children[i].size; - } else { - bottom -= children[i].elem.height + children[i].elem.depth; - } - } - depth = bottom; - } else if (positionType === "bottom") { - depth = -positionData; - } else if (positionType === "shift") { - depth = -children[0].elem.depth - positionData; - } else if (positionType === "firstBaseline") { - depth = -children[0].elem.depth; - } else { - depth = 0; - } - - // Make the fontSizer - var maxFontSize = 0; - for (i = 0; i < children.length; i++) { - if (children[i].type === "elem") { - maxFontSize = Math.max(maxFontSize, children[i].elem.maxFontSize); - } - } - var fontSizer = makeFontSizer(options, maxFontSize); - - // Create a new list of actual children at the correct offsets - var realChildren = []; - currPos = depth; - for (i = 0; i < children.length; i++) { - if (children[i].type === "kern") { - currPos += children[i].size; - } else { - var child = children[i].elem; - - var shift = -child.depth - currPos; - currPos += child.height + child.depth; - - var childWrap = makeSpan([], [fontSizer, child]); - childWrap.height -= shift; - childWrap.depth += shift; - childWrap.style.top = shift + "em"; - - realChildren.push(childWrap); - } - } - - // Add in an element at the end with no offset to fix the calculation of - // baselines in some browsers (namely IE, sometimes safari) - var baselineFix = makeSpan( - ["baseline-fix"], [fontSizer, new domTree.symbolNode("\u200b")]); - realChildren.push(baselineFix); - - var vlist = makeSpan(["vlist"], realChildren); - // Fix the final height and depth, in case there were kerns at the ends - // since the makeSpan calculation won't take that in to account. - vlist.height = Math.max(currPos, vlist.height); - vlist.depth = Math.max(-depth, vlist.depth); - return vlist; -}; - -// A table of size -> font size for the different sizing functions -var sizingMultiplier = { - size1: 0.5, - size2: 0.7, - size3: 0.8, - size4: 0.9, - size5: 1.0, - size6: 1.2, - size7: 1.44, - size8: 1.73, - size9: 2.07, - size10: 2.49, -}; - -// A map of spacing functions to their attributes, like size and corresponding -// CSS class -var spacingFunctions = { - "\\qquad": { - size: "2em", - className: "qquad", - }, - "\\quad": { - size: "1em", - className: "quad", - }, - "\\enspace": { - size: "0.5em", - className: "enspace", - }, - "\\;": { - size: "0.277778em", - className: "thickspace", - }, - "\\:": { - size: "0.22222em", - className: "mediumspace", - }, - "\\,": { - size: "0.16667em", - className: "thinspace", - }, - "\\!": { - size: "-0.16667em", - className: "negativethinspace", - }, -}; - -/** - * Maps TeX font commands to objects containing: - * - variant: string used for "mathvariant" attribute in buildMathML.js - * - fontName: the "style" parameter to fontMetrics.getCharacterMetrics - */ -// A map between tex font commands an MathML mathvariant attribute values -var fontMap = { - // styles - "mathbf": { - variant: "bold", - fontName: "Main-Bold", - }, - "mathrm": { - variant: "normal", - fontName: "Main-Regular", - }, - - // "mathit" is missing because it requires the use of two fonts: Main-Italic - // and Math-Italic. This is handled by a special case in makeOrd which ends - // up calling mathit. - - // families - "mathbb": { - variant: "double-struck", - fontName: "AMS-Regular", - }, - "mathcal": { - variant: "script", - fontName: "Caligraphic-Regular", - }, - "mathfrak": { - variant: "fraktur", - fontName: "Fraktur-Regular", - }, - "mathscr": { - variant: "script", - fontName: "Script-Regular", - }, - "mathsf": { - variant: "sans-serif", - fontName: "SansSerif-Regular", - }, - "mathtt": { - variant: "monospace", - fontName: "Typewriter-Regular", - }, -}; - -module.exports = { - fontMap: fontMap, - makeSymbol: makeSymbol, - mathsym: mathsym, - makeSpan: makeSpan, - makeFragment: makeFragment, - makeVList: makeVList, - makeOrd: makeOrd, - sizingMultiplier: sizingMultiplier, - spacingFunctions: spacingFunctions, -}; - -},{"./domTree":15,"./fontMetrics":17,"./symbols":23,"./utils":25}],11:[function(require,module,exports){ -/* eslint no-console:0 */ -/** - * This file does the main work of building a domTree structure from a parse - * tree. The entry point is the `buildHTML` function, which takes a parse tree. - * Then, the buildExpression, buildGroup, and various groupTypes functions are - * called, to produce a final HTML tree. - */ - -var ParseError = require("./ParseError"); -var Style = require("./Style"); - -var buildCommon = require("./buildCommon"); -var delimiter = require("./delimiter"); -var domTree = require("./domTree"); -var fontMetrics = require("./fontMetrics"); -var utils = require("./utils"); - -var makeSpan = buildCommon.makeSpan; - -/** - * Take a list of nodes, build them in order, and return a list of the built - * nodes. This function handles the `prev` node correctly, and passes the - * previous element from the list as the prev of the next element. - */ -var buildExpression = function(expression, options, prev) { - var groups = []; - for (var i = 0; i < expression.length; i++) { - var group = expression[i]; - groups.push(buildGroup(group, options, prev)); - prev = group; - } - return groups; -}; - -// List of types used by getTypeOfGroup, -// see https://github.com/Khan/KaTeX/wiki/Examining-TeX#group-types -var groupToType = { - mathord: "mord", - textord: "mord", - bin: "mbin", - rel: "mrel", - text: "mord", - open: "mopen", - close: "mclose", - inner: "minner", - genfrac: "mord", - array: "mord", - spacing: "mord", - punct: "mpunct", - ordgroup: "mord", - op: "mop", - katex: "mord", - overline: "mord", - underline: "mord", - rule: "mord", - leftright: "minner", - sqrt: "mord", - accent: "mord", -}; - -/** - * Gets the final math type of an expression, given its group type. This type is - * used to determine spacing between elements, and affects bin elements by - * causing them to change depending on what types are around them. This type - * must be attached to the outermost node of an element as a CSS class so that - * spacing with its surrounding elements works correctly. - * - * Some elements can be mapped one-to-one from group type to math type, and - * those are listed in the `groupToType` table. - * - * Others (usually elements that wrap around other elements) often have - * recursive definitions, and thus call `getTypeOfGroup` on their inner - * elements. - */ -var getTypeOfGroup = function(group) { - if (group == null) { - // Like when typesetting $^3$ - return groupToType.mathord; - } else if (group.type === "supsub") { - return getTypeOfGroup(group.value.base); - } else if (group.type === "llap" || group.type === "rlap") { - return getTypeOfGroup(group.value); - } else if (group.type === "color") { - return getTypeOfGroup(group.value.value); - } else if (group.type === "sizing") { - return getTypeOfGroup(group.value.value); - } else if (group.type === "styling") { - return getTypeOfGroup(group.value.value); - } else if (group.type === "delimsizing") { - return groupToType[group.value.delimType]; - } else { - return groupToType[group.type]; - } -}; - -/** - * Sometimes, groups perform special rules when they have superscripts or - * subscripts attached to them. This function lets the `supsub` group know that - * its inner element should handle the superscripts and subscripts instead of - * handling them itself. - */ -var shouldHandleSupSub = function(group, options) { - if (!group) { - return false; - } else if (group.type === "op") { - // Operators handle supsubs differently when they have limits - // (e.g. `\displaystyle\sum_2^3`) - return group.value.limits && - (options.style.size === Style.DISPLAY.size || - group.value.alwaysHandleSupSub); - } else if (group.type === "accent") { - return isCharacterBox(group.value.base); - } else { - return null; - } -}; - -/** - * Sometimes we want to pull out the innermost element of a group. In most - * cases, this will just be the group itself, but when ordgroups and colors have - * a single element, we want to pull that out. - */ -var getBaseElem = function(group) { - if (!group) { - return false; - } else if (group.type === "ordgroup") { - if (group.value.length === 1) { - return getBaseElem(group.value[0]); - } else { - return group; - } - } else if (group.type === "color") { - if (group.value.value.length === 1) { - return getBaseElem(group.value.value[0]); - } else { - return group; - } - } else if (group.type === "font") { - return getBaseElem(group.value.body); - } else { - return group; - } -}; - -/** - * TeXbook algorithms often reference "character boxes", which are simply groups - * with a single character in them. To decide if something is a character box, - * we find its innermost group, and see if it is a single character. - */ -var isCharacterBox = function(group) { - var baseElem = getBaseElem(group); - - // These are all they types of groups which hold single characters - return baseElem.type === "mathord" || - baseElem.type === "textord" || - baseElem.type === "bin" || - baseElem.type === "rel" || - baseElem.type === "inner" || - baseElem.type === "open" || - baseElem.type === "close" || - baseElem.type === "punct"; -}; - -var makeNullDelimiter = function(options) { - return makeSpan([ - "sizing", "reset-" + options.size, "size5", - options.style.reset(), Style.TEXT.cls(), - "nulldelimiter", - ]); -}; - -/** - * This is a map of group types to the function used to handle that type. - * Simpler types come at the beginning, while complicated types come afterwards. - */ -var groupTypes = {}; - -groupTypes.mathord = function(group, options, prev) { - return buildCommon.makeOrd(group, options, "mathord"); -}; - -groupTypes.textord = function(group, options, prev) { - return buildCommon.makeOrd(group, options, "textord"); -}; - -groupTypes.bin = function(group, options, prev) { - var className = "mbin"; - // Pull out the most recent element. Do some special handling to find - // things at the end of a \color group. Note that we don't use the same - // logic for ordgroups (which count as ords). - var prevAtom = prev; - while (prevAtom && prevAtom.type === "color") { - var atoms = prevAtom.value.value; - prevAtom = atoms[atoms.length - 1]; - } - // See TeXbook pg. 442-446, Rules 5 and 6, and the text before Rule 19. - // Here, we determine whether the bin should turn into an ord. We - // currently only apply Rule 5. - if (!prev || utils.contains(["mbin", "mopen", "mrel", "mop", "mpunct"], - getTypeOfGroup(prevAtom))) { - group.type = "textord"; - className = "mord"; - } - - return buildCommon.mathsym( - group.value, group.mode, options.getColor(), [className]); -}; - -groupTypes.rel = function(group, options, prev) { - return buildCommon.mathsym( - group.value, group.mode, options.getColor(), ["mrel"]); -}; - -groupTypes.open = function(group, options, prev) { - return buildCommon.mathsym( - group.value, group.mode, options.getColor(), ["mopen"]); -}; - -groupTypes.close = function(group, options, prev) { - return buildCommon.mathsym( - group.value, group.mode, options.getColor(), ["mclose"]); -}; - -groupTypes.inner = function(group, options, prev) { - return buildCommon.mathsym( - group.value, group.mode, options.getColor(), ["minner"]); -}; - -groupTypes.punct = function(group, options, prev) { - return buildCommon.mathsym( - group.value, group.mode, options.getColor(), ["mpunct"]); -}; - -groupTypes.ordgroup = function(group, options, prev) { - return makeSpan( - ["mord", options.style.cls()], - buildExpression(group.value, options.reset()) - ); -}; - -groupTypes.text = function(group, options, prev) { - return makeSpan(["text", "mord", options.style.cls()], - buildExpression(group.value.body, options.reset())); -}; - -groupTypes.color = function(group, options, prev) { - var elements = buildExpression( - group.value.value, - options.withColor(group.value.color), - prev - ); - - // \color isn't supposed to affect the type of the elements it contains. - // To accomplish this, we wrap the results in a fragment, so the inner - // elements will be able to directly interact with their neighbors. For - // example, `\color{red}{2 +} 3` has the same spacing as `2 + 3` - return new buildCommon.makeFragment(elements); -}; - -groupTypes.supsub = function(group, options, prev) { - // Superscript and subscripts are handled in the TeXbook on page - // 445-446, rules 18(a-f). - - // Here is where we defer to the inner group if it should handle - // superscripts and subscripts itself. - if (shouldHandleSupSub(group.value.base, options)) { - return groupTypes[group.value.base.type](group, options, prev); - } - - var base = buildGroup(group.value.base, options.reset()); - var supmid; - var submid; - var sup; - var sub; - - if (group.value.sup) { - sup = buildGroup(group.value.sup, - options.withStyle(options.style.sup())); - supmid = makeSpan( - [options.style.reset(), options.style.sup().cls()], [sup]); - } - - if (group.value.sub) { - sub = buildGroup(group.value.sub, - options.withStyle(options.style.sub())); - submid = makeSpan( - [options.style.reset(), options.style.sub().cls()], [sub]); - } - - // Rule 18a - var supShift; - var subShift; - if (isCharacterBox(group.value.base)) { - supShift = 0; - subShift = 0; - } else { - supShift = base.height - fontMetrics.metrics.supDrop; - subShift = base.depth + fontMetrics.metrics.subDrop; - } - - // Rule 18c - var minSupShift; - if (options.style === Style.DISPLAY) { - minSupShift = fontMetrics.metrics.sup1; - } else if (options.style.cramped) { - minSupShift = fontMetrics.metrics.sup3; - } else { - minSupShift = fontMetrics.metrics.sup2; - } - - // scriptspace is a font-size-independent size, so scale it - // appropriately - var multiplier = Style.TEXT.sizeMultiplier * - options.style.sizeMultiplier; - var scriptspace = - (0.5 / fontMetrics.metrics.ptPerEm) / multiplier + "em"; - - var supsub; - if (!group.value.sup) { - // Rule 18b - subShift = Math.max( - subShift, fontMetrics.metrics.sub1, - sub.height - 0.8 * fontMetrics.metrics.xHeight); - - supsub = buildCommon.makeVList([ - {type: "elem", elem: submid}, - ], "shift", subShift, options); - - supsub.children[0].style.marginRight = scriptspace; - - // Subscripts shouldn't be shifted by the base's italic correction. - // Account for that by shifting the subscript back the appropriate - // amount. Note we only do this when the base is a single symbol. - if (base instanceof domTree.symbolNode) { - supsub.children[0].style.marginLeft = -base.italic + "em"; - } - } else if (!group.value.sub) { - // Rule 18c, d - supShift = Math.max(supShift, minSupShift, - sup.depth + 0.25 * fontMetrics.metrics.xHeight); - - supsub = buildCommon.makeVList([ - {type: "elem", elem: supmid}, - ], "shift", -supShift, options); - - supsub.children[0].style.marginRight = scriptspace; - } else { - supShift = Math.max( - supShift, minSupShift, - sup.depth + 0.25 * fontMetrics.metrics.xHeight); - subShift = Math.max(subShift, fontMetrics.metrics.sub2); - - var ruleWidth = fontMetrics.metrics.defaultRuleThickness; - - // Rule 18e - if ((supShift - sup.depth) - (sub.height - subShift) < - 4 * ruleWidth) { - subShift = 4 * ruleWidth - (supShift - sup.depth) + sub.height; - var psi = 0.8 * fontMetrics.metrics.xHeight - - (supShift - sup.depth); - if (psi > 0) { - supShift += psi; - subShift -= psi; - } - } - - supsub = buildCommon.makeVList([ - {type: "elem", elem: submid, shift: subShift}, - {type: "elem", elem: supmid, shift: -supShift}, - ], "individualShift", null, options); - - // See comment above about subscripts not being shifted - if (base instanceof domTree.symbolNode) { - supsub.children[0].style.marginLeft = -base.italic + "em"; - } - - supsub.children[0].style.marginRight = scriptspace; - supsub.children[1].style.marginRight = scriptspace; - } - - // We ensure to wrap the supsub vlist in a span.msupsub to reset text-align - return makeSpan([getTypeOfGroup(group.value.base)], - [base, makeSpan(["msupsub"], [supsub])]); -}; - -groupTypes.genfrac = function(group, options, prev) { - // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e). - // Figure out what style this fraction should be in based on the - // function used - var fstyle = options.style; - if (group.value.size === "display") { - fstyle = Style.DISPLAY; - } else if (group.value.size === "text") { - fstyle = Style.TEXT; - } - - var nstyle = fstyle.fracNum(); - var dstyle = fstyle.fracDen(); - - var numer = buildGroup(group.value.numer, options.withStyle(nstyle)); - var numerreset = makeSpan([fstyle.reset(), nstyle.cls()], [numer]); - - var denom = buildGroup(group.value.denom, options.withStyle(dstyle)); - var denomreset = makeSpan([fstyle.reset(), dstyle.cls()], [denom]); - - var ruleWidth; - if (group.value.hasBarLine) { - ruleWidth = fontMetrics.metrics.defaultRuleThickness / - options.style.sizeMultiplier; - } else { - ruleWidth = 0; - } - - // Rule 15b - var numShift; - var clearance; - var denomShift; - if (fstyle.size === Style.DISPLAY.size) { - numShift = fontMetrics.metrics.num1; - if (ruleWidth > 0) { - clearance = 3 * ruleWidth; - } else { - clearance = 7 * fontMetrics.metrics.defaultRuleThickness; - } - denomShift = fontMetrics.metrics.denom1; - } else { - if (ruleWidth > 0) { - numShift = fontMetrics.metrics.num2; - clearance = ruleWidth; - } else { - numShift = fontMetrics.metrics.num3; - clearance = 3 * fontMetrics.metrics.defaultRuleThickness; - } - denomShift = fontMetrics.metrics.denom2; - } - - var frac; - if (ruleWidth === 0) { - // Rule 15c - var candiateClearance = - (numShift - numer.depth) - (denom.height - denomShift); - if (candiateClearance < clearance) { - numShift += 0.5 * (clearance - candiateClearance); - denomShift += 0.5 * (clearance - candiateClearance); - } - - frac = buildCommon.makeVList([ - {type: "elem", elem: denomreset, shift: denomShift}, - {type: "elem", elem: numerreset, shift: -numShift}, - ], "individualShift", null, options); - } else { - // Rule 15d - var axisHeight = fontMetrics.metrics.axisHeight; - - if ((numShift - numer.depth) - (axisHeight + 0.5 * ruleWidth) < - clearance) { - numShift += - clearance - ((numShift - numer.depth) - - (axisHeight + 0.5 * ruleWidth)); - } - - if ((axisHeight - 0.5 * ruleWidth) - (denom.height - denomShift) < - clearance) { - denomShift += - clearance - ((axisHeight - 0.5 * ruleWidth) - - (denom.height - denomShift)); - } - - var mid = makeSpan( - [options.style.reset(), Style.TEXT.cls(), "frac-line"]); - // Manually set the height of the line because its height is - // created in CSS - mid.height = ruleWidth; - - var midShift = -(axisHeight - 0.5 * ruleWidth); - - frac = buildCommon.makeVList([ - {type: "elem", elem: denomreset, shift: denomShift}, - {type: "elem", elem: mid, shift: midShift}, - {type: "elem", elem: numerreset, shift: -numShift}, - ], "individualShift", null, options); - } - - // Since we manually change the style sometimes (with \dfrac or \tfrac), - // account for the possible size change here. - frac.height *= fstyle.sizeMultiplier / options.style.sizeMultiplier; - frac.depth *= fstyle.sizeMultiplier / options.style.sizeMultiplier; - - // Rule 15e - var delimSize; - if (fstyle.size === Style.DISPLAY.size) { - delimSize = fontMetrics.metrics.delim1; - } else { - delimSize = fontMetrics.metrics.getDelim2(fstyle); - } - - var leftDelim; - var rightDelim; - if (group.value.leftDelim == null) { - leftDelim = makeNullDelimiter(options); - } else { - leftDelim = delimiter.customSizedDelim( - group.value.leftDelim, delimSize, true, - options.withStyle(fstyle), group.mode); - } - if (group.value.rightDelim == null) { - rightDelim = makeNullDelimiter(options); - } else { - rightDelim = delimiter.customSizedDelim( - group.value.rightDelim, delimSize, true, - options.withStyle(fstyle), group.mode); - } - - return makeSpan( - ["mord", options.style.reset(), fstyle.cls()], - [leftDelim, makeSpan(["mfrac"], [frac]), rightDelim], - options.getColor()); -}; - -groupTypes.array = function(group, options, prev) { - var r; - var c; - var nr = group.value.body.length; - var nc = 0; - var body = new Array(nr); - - // Horizontal spacing - var pt = 1 / fontMetrics.metrics.ptPerEm; - var arraycolsep = 5 * pt; // \arraycolsep in article.cls - - // Vertical spacing - var baselineskip = 12 * pt; // see size10.clo - // Default \arraystretch from lttab.dtx - // TODO(gagern): may get redefined once we have user-defined macros - var arraystretch = utils.deflt(group.value.arraystretch, 1); - var arrayskip = arraystretch * baselineskip; - var arstrutHeight = 0.7 * arrayskip; // \strutbox in ltfsstrc.dtx and - var arstrutDepth = 0.3 * arrayskip; // \@arstrutbox in lttab.dtx - - var totalHeight = 0; - for (r = 0; r < group.value.body.length; ++r) { - var inrow = group.value.body[r]; - var height = arstrutHeight; // \@array adds an \@arstrut - var depth = arstrutDepth; // to each tow (via the template) - - if (nc < inrow.length) { - nc = inrow.length; - } - - var outrow = new Array(inrow.length); - for (c = 0; c < inrow.length; ++c) { - var elt = buildGroup(inrow[c], options); - if (depth < elt.depth) { - depth = elt.depth; - } - if (height < elt.height) { - height = elt.height; - } - outrow[c] = elt; - } - - var gap = 0; - if (group.value.rowGaps[r]) { - gap = group.value.rowGaps[r].value; - switch (gap.unit) { - case "em": - gap = gap.number; - break; - case "ex": - gap = gap.number * fontMetrics.metrics.emPerEx; - break; - default: - console.error("Can't handle unit " + gap.unit); - gap = 0; - } - if (gap > 0) { // \@argarraycr - gap += arstrutDepth; - if (depth < gap) { - depth = gap; // \@xargarraycr - } - gap = 0; - } - } - - outrow.height = height; - outrow.depth = depth; - totalHeight += height; - outrow.pos = totalHeight; - totalHeight += depth + gap; // \@yargarraycr - body[r] = outrow; - } - - var offset = totalHeight / 2 + fontMetrics.metrics.axisHeight; - var colDescriptions = group.value.cols || []; - var cols = []; - var colSep; - var colDescrNum; - for (c = 0, colDescrNum = 0; - // Continue while either there are more columns or more column - // descriptions, so trailing separators don't get lost. - c < nc || colDescrNum < colDescriptions.length; - ++c, ++colDescrNum) { - - var colDescr = colDescriptions[colDescrNum] || {}; - - var firstSeparator = true; - while (colDescr.type === "separator") { - // If there is more than one separator in a row, add a space - // between them. - if (!firstSeparator) { - colSep = makeSpan(["arraycolsep"], []); - colSep.style.width = - fontMetrics.metrics.doubleRuleSep + "em"; - cols.push(colSep); - } - - if (colDescr.separator === "|") { - var separator = makeSpan( - ["vertical-separator"], - []); - separator.style.height = totalHeight + "em"; - separator.style.verticalAlign = - -(totalHeight - offset) + "em"; - - cols.push(separator); - } else { - throw new ParseError( - "Invalid separator type: " + colDescr.separator); - } - - colDescrNum++; - colDescr = colDescriptions[colDescrNum] || {}; - firstSeparator = false; - } - - if (c >= nc) { - continue; - } - - var sepwidth; - if (c > 0 || group.value.hskipBeforeAndAfter) { - sepwidth = utils.deflt(colDescr.pregap, arraycolsep); - if (sepwidth !== 0) { - colSep = makeSpan(["arraycolsep"], []); - colSep.style.width = sepwidth + "em"; - cols.push(colSep); - } - } - - var col = []; - for (r = 0; r < nr; ++r) { - var row = body[r]; - var elem = row[c]; - if (!elem) { - continue; - } - var shift = row.pos - offset; - elem.depth = row.depth; - elem.height = row.height; - col.push({type: "elem", elem: elem, shift: shift}); - } - - col = buildCommon.makeVList(col, "individualShift", null, options); - col = makeSpan( - ["col-align-" + (colDescr.align || "c")], - [col]); - cols.push(col); - - if (c < nc - 1 || group.value.hskipBeforeAndAfter) { - sepwidth = utils.deflt(colDescr.postgap, arraycolsep); - if (sepwidth !== 0) { - colSep = makeSpan(["arraycolsep"], []); - colSep.style.width = sepwidth + "em"; - cols.push(colSep); - } - } - } - body = makeSpan(["mtable"], cols); - return makeSpan(["mord"], [body], options.getColor()); -}; - -groupTypes.spacing = function(group, options, prev) { - if (group.value === "\\ " || group.value === "\\space" || - group.value === " " || group.value === "~") { - // Spaces are generated by adding an actual space. Each of these - // things has an entry in the symbols table, so these will be turned - // into appropriate outputs. - return makeSpan( - ["mord", "mspace"], - [buildCommon.mathsym(group.value, group.mode)] - ); - } else { - // Other kinds of spaces are of arbitrary width. We use CSS to - // generate these. - return makeSpan( - ["mord", "mspace", - buildCommon.spacingFunctions[group.value].className]); - } -}; - -groupTypes.llap = function(group, options, prev) { - var inner = makeSpan( - ["inner"], [buildGroup(group.value.body, options.reset())]); - var fix = makeSpan(["fix"], []); - return makeSpan( - ["llap", options.style.cls()], [inner, fix]); -}; - -groupTypes.rlap = function(group, options, prev) { - var inner = makeSpan( - ["inner"], [buildGroup(group.value.body, options.reset())]); - var fix = makeSpan(["fix"], []); - return makeSpan( - ["rlap", options.style.cls()], [inner, fix]); -}; - -groupTypes.op = function(group, options, prev) { - // Operators are handled in the TeXbook pg. 443-444, rule 13(a). - var supGroup; - var subGroup; - var hasLimits = false; - if (group.type === "supsub" ) { - // If we have limits, supsub will pass us its group to handle. Pull - // out the superscript and subscript and set the group to the op in - // its base. - supGroup = group.value.sup; - subGroup = group.value.sub; - group = group.value.base; - hasLimits = true; - } - - // Most operators have a large successor symbol, but these don't. - var noSuccessor = [ - "\\smallint", - ]; - - var large = false; - if (options.style.size === Style.DISPLAY.size && - group.value.symbol && - !utils.contains(noSuccessor, group.value.body)) { - - // Most symbol operators get larger in displaystyle (rule 13) - large = true; - } - - var base; - var baseShift = 0; - var slant = 0; - if (group.value.symbol) { - // If this is a symbol, create the symbol. - var style = large ? "Size2-Regular" : "Size1-Regular"; - base = buildCommon.makeSymbol( - group.value.body, style, "math", options.getColor(), - ["op-symbol", large ? "large-op" : "small-op", "mop"]); - - // Shift the symbol so its center lies on the axis (rule 13). It - // appears that our fonts have the centers of the symbols already - // almost on the axis, so these numbers are very small. Note we - // don't actually apply this here, but instead it is used either in - // the vlist creation or separately when there are no limits. - baseShift = (base.height - base.depth) / 2 - - fontMetrics.metrics.axisHeight * - options.style.sizeMultiplier; - - // The slant of the symbol is just its italic correction. - slant = base.italic; - } else { - // Otherwise, this is a text operator. Build the text from the - // operator's name. - // TODO(emily): Add a space in the middle of some of these - // operators, like \limsup - var output = []; - for (var i = 1; i < group.value.body.length; i++) { - output.push(buildCommon.mathsym(group.value.body[i], group.mode)); - } - base = makeSpan(["mop"], output, options.getColor()); - } - - if (hasLimits) { - // IE 8 clips \int if it is in a display: inline-block. We wrap it - // in a new span so it is an inline, and works. - base = makeSpan([], [base]); - - var supmid; - var supKern; - var submid; - var subKern; - // We manually have to handle the superscripts and subscripts. This, - // aside from the kern calculations, is copied from supsub. - if (supGroup) { - var sup = buildGroup( - supGroup, options.withStyle(options.style.sup())); - supmid = makeSpan( - [options.style.reset(), options.style.sup().cls()], [sup]); - - supKern = Math.max( - fontMetrics.metrics.bigOpSpacing1, - fontMetrics.metrics.bigOpSpacing3 - sup.depth); - } - - if (subGroup) { - var sub = buildGroup( - subGroup, options.withStyle(options.style.sub())); - submid = makeSpan( - [options.style.reset(), options.style.sub().cls()], - [sub]); - - subKern = Math.max( - fontMetrics.metrics.bigOpSpacing2, - fontMetrics.metrics.bigOpSpacing4 - sub.height); - } - - // Build the final group as a vlist of the possible subscript, base, - // and possible superscript. - var finalGroup; - var top; - var bottom; - if (!supGroup) { - top = base.height - baseShift; - - finalGroup = buildCommon.makeVList([ - {type: "kern", size: fontMetrics.metrics.bigOpSpacing5}, - {type: "elem", elem: submid}, - {type: "kern", size: subKern}, - {type: "elem", elem: base}, - ], "top", top, options); - - // Here, we shift the limits by the slant of the symbol. Note - // that we are supposed to shift the limits by 1/2 of the slant, - // but since we are centering the limits adding a full slant of - // margin will shift by 1/2 that. - finalGroup.children[0].style.marginLeft = -slant + "em"; - } else if (!subGroup) { - bottom = base.depth + baseShift; - - finalGroup = buildCommon.makeVList([ - {type: "elem", elem: base}, - {type: "kern", size: supKern}, - {type: "elem", elem: supmid}, - {type: "kern", size: fontMetrics.metrics.bigOpSpacing5}, - ], "bottom", bottom, options); - - // See comment above about slants - finalGroup.children[1].style.marginLeft = slant + "em"; - } else if (!supGroup && !subGroup) { - // This case probably shouldn't occur (this would mean the - // supsub was sending us a group with no superscript or - // subscript) but be safe. - return base; - } else { - bottom = fontMetrics.metrics.bigOpSpacing5 + - submid.height + submid.depth + - subKern + - base.depth + baseShift; - - finalGroup = buildCommon.makeVList([ - {type: "kern", size: fontMetrics.metrics.bigOpSpacing5}, - {type: "elem", elem: submid}, - {type: "kern", size: subKern}, - {type: "elem", elem: base}, - {type: "kern", size: supKern}, - {type: "elem", elem: supmid}, - {type: "kern", size: fontMetrics.metrics.bigOpSpacing5}, - ], "bottom", bottom, options); - - // See comment above about slants - finalGroup.children[0].style.marginLeft = -slant + "em"; - finalGroup.children[2].style.marginLeft = slant + "em"; - } - - return makeSpan(["mop", "op-limits"], [finalGroup]); - } else { - if (group.value.symbol) { - base.style.top = baseShift + "em"; - } - - return base; - } -}; - -groupTypes.katex = function(group, options, prev) { - // The KaTeX logo. The offsets for the K and a were chosen to look - // good, but the offsets for the T, E, and X were taken from the - // definition of \TeX in TeX (see TeXbook pg. 356) - var k = makeSpan( - ["k"], [buildCommon.mathsym("K", group.mode)]); - var a = makeSpan( - ["a"], [buildCommon.mathsym("A", group.mode)]); - - a.height = (a.height + 0.2) * 0.75; - a.depth = (a.height - 0.2) * 0.75; - - var t = makeSpan( - ["t"], [buildCommon.mathsym("T", group.mode)]); - var e = makeSpan( - ["e"], [buildCommon.mathsym("E", group.mode)]); - - e.height = (e.height - 0.2155); - e.depth = (e.depth + 0.2155); - - var x = makeSpan( - ["x"], [buildCommon.mathsym("X", group.mode)]); - - return makeSpan( - ["katex-logo", "mord"], [k, a, t, e, x], options.getColor()); -}; - -groupTypes.overline = function(group, options, prev) { - // Overlines are handled in the TeXbook pg 443, Rule 9. - - // Build the inner group in the cramped style. - var innerGroup = buildGroup(group.value.body, - options.withStyle(options.style.cramp())); - - var ruleWidth = fontMetrics.metrics.defaultRuleThickness / - options.style.sizeMultiplier; - - // Create the line above the body - var line = makeSpan( - [options.style.reset(), Style.TEXT.cls(), "overline-line"]); - line.height = ruleWidth; - line.maxFontSize = 1.0; - - // Generate the vlist, with the appropriate kerns - var vlist = buildCommon.makeVList([ - {type: "elem", elem: innerGroup}, - {type: "kern", size: 3 * ruleWidth}, - {type: "elem", elem: line}, - {type: "kern", size: ruleWidth}, - ], "firstBaseline", null, options); - - return makeSpan(["overline", "mord"], [vlist], options.getColor()); -}; - -groupTypes.underline = function(group, options, prev) { - // Underlines are handled in the TeXbook pg 443, Rule 10. - - // Build the inner group. - var innerGroup = buildGroup(group.value.body, options); - - var ruleWidth = fontMetrics.metrics.defaultRuleThickness / - options.style.sizeMultiplier; - - // Create the line above the body - var line = makeSpan( - [options.style.reset(), Style.TEXT.cls(), "underline-line"]); - line.height = ruleWidth; - line.maxFontSize = 1.0; - - // Generate the vlist, with the appropriate kerns - var vlist = buildCommon.makeVList([ - {type: "kern", size: ruleWidth}, - {type: "elem", elem: line}, - {type: "kern", size: 3 * ruleWidth}, - {type: "elem", elem: innerGroup}, - ], "top", innerGroup.height, options); - - return makeSpan(["underline", "mord"], [vlist], options.getColor()); -}; - -groupTypes.sqrt = function(group, options, prev) { - // Square roots are handled in the TeXbook pg. 443, Rule 11. - - // First, we do the same steps as in overline to build the inner group - // and line - var inner = buildGroup(group.value.body, - options.withStyle(options.style.cramp())); - - var ruleWidth = fontMetrics.metrics.defaultRuleThickness / - options.style.sizeMultiplier; - - var line = makeSpan( - [options.style.reset(), Style.TEXT.cls(), "sqrt-line"], [], - options.getColor()); - line.height = ruleWidth; - line.maxFontSize = 1.0; - - var phi = ruleWidth; - if (options.style.id < Style.TEXT.id) { - phi = fontMetrics.metrics.xHeight; - } - - // Calculate the clearance between the body and line - var lineClearance = ruleWidth + phi / 4; - - var innerHeight = - (inner.height + inner.depth) * options.style.sizeMultiplier; - var minDelimiterHeight = innerHeight + lineClearance + ruleWidth; - - // Create a \surd delimiter of the required minimum size - var delim = makeSpan(["sqrt-sign"], [ - delimiter.customSizedDelim("\\surd", minDelimiterHeight, - false, options, group.mode)], - options.getColor()); - - var delimDepth = (delim.height + delim.depth) - ruleWidth; - - // Adjust the clearance based on the delimiter size - if (delimDepth > inner.height + inner.depth + lineClearance) { - lineClearance = - (lineClearance + delimDepth - inner.height - inner.depth) / 2; - } - - // Shift the delimiter so that its top lines up with the top of the line - var delimShift = -(inner.height + lineClearance + ruleWidth) + delim.height; - delim.style.top = delimShift + "em"; - delim.height -= delimShift; - delim.depth += delimShift; - - // We add a special case here, because even when `inner` is empty, we - // still get a line. So, we use a simple heuristic to decide if we - // should omit the body entirely. (note this doesn't work for something - // like `\sqrt{\rlap{x}}`, but if someone is doing that they deserve for - // it not to work. - var body; - if (inner.height === 0 && inner.depth === 0) { - body = makeSpan(); - } else { - body = buildCommon.makeVList([ - {type: "elem", elem: inner}, - {type: "kern", size: lineClearance}, - {type: "elem", elem: line}, - {type: "kern", size: ruleWidth}, - ], "firstBaseline", null, options); - } - - if (!group.value.index) { - return makeSpan(["sqrt", "mord"], [delim, body]); - } else { - // Handle the optional root index - - // The index is always in scriptscript style - var root = buildGroup( - group.value.index, - options.withStyle(Style.SCRIPTSCRIPT)); - var rootWrap = makeSpan( - [options.style.reset(), Style.SCRIPTSCRIPT.cls()], - [root]); - - // Figure out the height and depth of the inner part - var innerRootHeight = Math.max(delim.height, body.height); - var innerRootDepth = Math.max(delim.depth, body.depth); - - // The amount the index is shifted by. This is taken from the TeX - // source, in the definition of `\r@@t`. - var toShift = 0.6 * (innerRootHeight - innerRootDepth); - - // Build a VList with the superscript shifted up correctly - var rootVList = buildCommon.makeVList( - [{type: "elem", elem: rootWrap}], - "shift", -toShift, options); - // Add a class surrounding it so we can add on the appropriate - // kerning - var rootVListWrap = makeSpan(["root"], [rootVList]); - - return makeSpan(["sqrt", "mord"], [rootVListWrap, delim, body]); - } -}; - -groupTypes.sizing = function(group, options, prev) { - // Handle sizing operators like \Huge. Real TeX doesn't actually allow - // these functions inside of math expressions, so we do some special - // handling. - var inner = buildExpression(group.value.value, - options.withSize(group.value.size), prev); - - var span = makeSpan(["mord"], - [makeSpan(["sizing", "reset-" + options.size, group.value.size, - options.style.cls()], - inner)]); - - // Calculate the correct maxFontSize manually - var fontSize = buildCommon.sizingMultiplier[group.value.size]; - span.maxFontSize = fontSize * options.style.sizeMultiplier; - - return span; -}; - -groupTypes.styling = function(group, options, prev) { - // Style changes are handled in the TeXbook on pg. 442, Rule 3. - - // Figure out what style we're changing to. - var style = { - "display": Style.DISPLAY, - "text": Style.TEXT, - "script": Style.SCRIPT, - "scriptscript": Style.SCRIPTSCRIPT, - }; - - var newStyle = style[group.value.style]; - - // Build the inner expression in the new style. - var inner = buildExpression( - group.value.value, options.withStyle(newStyle), prev); - - return makeSpan([options.style.reset(), newStyle.cls()], inner); -}; - -groupTypes.font = function(group, options, prev) { - var font = group.value.font; - return buildGroup(group.value.body, options.withFont(font), prev); -}; - -groupTypes.delimsizing = function(group, options, prev) { - var delim = group.value.value; - - if (delim === ".") { - // Empty delimiters still count as elements, even though they don't - // show anything. - return makeSpan([groupToType[group.value.delimType]]); - } - - // Use delimiter.sizedDelim to generate the delimiter. - return makeSpan( - [groupToType[group.value.delimType]], - [delimiter.sizedDelim( - delim, group.value.size, options, group.mode)]); -}; - -groupTypes.leftright = function(group, options, prev) { - // Build the inner expression - var inner = buildExpression(group.value.body, options.reset()); - - var innerHeight = 0; - var innerDepth = 0; - - // Calculate its height and depth - for (var i = 0; i < inner.length; i++) { - innerHeight = Math.max(inner[i].height, innerHeight); - innerDepth = Math.max(inner[i].depth, innerDepth); - } - - // The size of delimiters is the same, regardless of what style we are - // in. Thus, to correctly calculate the size of delimiter we need around - // a group, we scale down the inner size based on the size. - innerHeight *= options.style.sizeMultiplier; - innerDepth *= options.style.sizeMultiplier; - - var leftDelim; - if (group.value.left === ".") { - // Empty delimiters in \left and \right make null delimiter spaces. - leftDelim = makeNullDelimiter(options); - } else { - // Otherwise, use leftRightDelim to generate the correct sized - // delimiter. - leftDelim = delimiter.leftRightDelim( - group.value.left, innerHeight, innerDepth, options, - group.mode); - } - // Add it to the beginning of the expression - inner.unshift(leftDelim); - - var rightDelim; - // Same for the right delimiter - if (group.value.right === ".") { - rightDelim = makeNullDelimiter(options); - } else { - rightDelim = delimiter.leftRightDelim( - group.value.right, innerHeight, innerDepth, options, - group.mode); - } - // Add it to the end of the expression. - inner.push(rightDelim); - - return makeSpan( - ["minner", options.style.cls()], inner, options.getColor()); -}; - -groupTypes.rule = function(group, options, prev) { - // Make an empty span for the rule - var rule = makeSpan(["mord", "rule"], [], options.getColor()); - - // Calculate the shift, width, and height of the rule, and account for units - var shift = 0; - if (group.value.shift) { - shift = group.value.shift.number; - if (group.value.shift.unit === "ex") { - shift *= fontMetrics.metrics.xHeight; - } - } - - var width = group.value.width.number; - if (group.value.width.unit === "ex") { - width *= fontMetrics.metrics.xHeight; - } - - var height = group.value.height.number; - if (group.value.height.unit === "ex") { - height *= fontMetrics.metrics.xHeight; - } - - // The sizes of rules are absolute, so make it larger if we are in a - // smaller style. - shift /= options.style.sizeMultiplier; - width /= options.style.sizeMultiplier; - height /= options.style.sizeMultiplier; - - // Style the rule to the right size - rule.style.borderRightWidth = width + "em"; - rule.style.borderTopWidth = height + "em"; - rule.style.bottom = shift + "em"; - - // Record the height and width - rule.width = width; - rule.height = height + shift; - rule.depth = -shift; - - return rule; -}; - -groupTypes.kern = function(group, options, prev) { - // Make an empty span for the rule - var rule = makeSpan(["mord", "rule"], [], options.getColor()); - - var dimension = 0; - if (group.value.dimension) { - dimension = group.value.dimension.number; - if (group.value.dimension.unit === "ex") { - dimension *= fontMetrics.metrics.xHeight; - } - } - - dimension /= options.style.sizeMultiplier; - - rule.style.marginLeft = dimension + "em"; - - return rule; -}; - -groupTypes.accent = function(group, options, prev) { - // Accents are handled in the TeXbook pg. 443, rule 12. - var base = group.value.base; - - var supsubGroup; - if (group.type === "supsub") { - // If our base is a character box, and we have superscripts and - // subscripts, the supsub will defer to us. In particular, we want - // to attach the superscripts and subscripts to the inner body (so - // that the position of the superscripts and subscripts won't be - // affected by the height of the accent). We accomplish this by - // sticking the base of the accent into the base of the supsub, and - // rendering that, while keeping track of where the accent is. - - // The supsub group is the group that was passed in - var supsub = group; - // The real accent group is the base of the supsub group - group = supsub.value.base; - // The character box is the base of the accent group - base = group.value.base; - // Stick the character box into the base of the supsub group - supsub.value.base = base; - - // Rerender the supsub group with its new base, and store that - // result. - supsubGroup = buildGroup( - supsub, options.reset(), prev); - } - - // Build the base group - var body = buildGroup( - base, options.withStyle(options.style.cramp())); - - // Calculate the skew of the accent. This is based on the line "If the - // nucleus is not a single character, let s = 0; otherwise set s to the - // kern amount for the nucleus followed by the \skewchar of its font." - // Note that our skew metrics are just the kern between each character - // and the skewchar. - var skew; - if (isCharacterBox(base)) { - // If the base is a character box, then we want the skew of the - // innermost character. To do that, we find the innermost character: - var baseChar = getBaseElem(base); - // Then, we render its group to get the symbol inside it - var baseGroup = buildGroup( - baseChar, options.withStyle(options.style.cramp())); - // Finally, we pull the skew off of the symbol. - skew = baseGroup.skew; - // Note that we now throw away baseGroup, because the layers we - // removed with getBaseElem might contain things like \color which - // we can't get rid of. - // TODO(emily): Find a better way to get the skew - } else { - skew = 0; - } - - // calculate the amount of space between the body and the accent - var clearance = Math.min(body.height, fontMetrics.metrics.xHeight); - - // Build the accent - var accent = buildCommon.makeSymbol( - group.value.accent, "Main-Regular", "math", options.getColor()); - // Remove the italic correction of the accent, because it only serves to - // shift the accent over to a place we don't want. - accent.italic = 0; - - // The \vec character that the fonts use is a combining character, and - // thus shows up much too far to the left. To account for this, we add a - // specific class which shifts the accent over to where we want it. - // TODO(emily): Fix this in a better way, like by changing the font - var vecClass = group.value.accent === "\\vec" ? "accent-vec" : null; - - var accentBody = makeSpan(["accent-body", vecClass], [ - makeSpan([], [accent])]); - - accentBody = buildCommon.makeVList([ - {type: "elem", elem: body}, - {type: "kern", size: -clearance}, - {type: "elem", elem: accentBody}, - ], "firstBaseline", null, options); - - // Shift the accent over by the skew. Note we shift by twice the skew - // because we are centering the accent, so by adding 2*skew to the left, - // we shift it to the right by 1*skew. - accentBody.children[1].style.marginLeft = 2 * skew + "em"; - - var accentWrap = makeSpan(["mord", "accent"], [accentBody]); - - if (supsubGroup) { - // Here, we replace the "base" child of the supsub with our newly - // generated accent. - supsubGroup.children[0] = accentWrap; - - // Since we don't rerun the height calculation after replacing the - // accent, we manually recalculate height. - supsubGroup.height = Math.max(accentWrap.height, supsubGroup.height); - - // Accents should always be ords, even when their innards are not. - supsubGroup.classes[0] = "mord"; - - return supsubGroup; - } else { - return accentWrap; - } -}; - -groupTypes.phantom = function(group, options, prev) { - var elements = buildExpression( - group.value.value, - options.withPhantom(), - prev - ); - - // \phantom isn't supposed to affect the elements it contains. - // See "color" for more details. - return new buildCommon.makeFragment(elements); -}; - -/** - * buildGroup is the function that takes a group and calls the correct groupType - * function for it. It also handles the interaction of size and style changes - * between parents and children. - */ -var buildGroup = function(group, options, prev) { - if (!group) { - return makeSpan(); - } - - if (groupTypes[group.type]) { - // Call the groupTypes function - var groupNode = groupTypes[group.type](group, options, prev); - var multiplier; - - // If the style changed between the parent and the current group, - // account for the size difference - if (options.style !== options.parentStyle) { - multiplier = options.style.sizeMultiplier / - options.parentStyle.sizeMultiplier; - - groupNode.height *= multiplier; - groupNode.depth *= multiplier; - } - - // If the size changed between the parent and the current group, account - // for that size difference. - if (options.size !== options.parentSize) { - multiplier = buildCommon.sizingMultiplier[options.size] / - buildCommon.sizingMultiplier[options.parentSize]; - - groupNode.height *= multiplier; - groupNode.depth *= multiplier; - } - - return groupNode; - } else { - throw new ParseError( - "Got group of unknown type: '" + group.type + "'"); - } -}; - -/** - * Take an entire parse tree, and build it into an appropriate set of HTML - * nodes. - */ -var buildHTML = function(tree, options) { - // buildExpression is destructive, so we need to make a clone - // of the incoming tree so that it isn't accidentally changed - tree = JSON.parse(JSON.stringify(tree)); - - // Build the expression contained in the tree - var expression = buildExpression(tree, options); - var body = makeSpan(["base", options.style.cls()], expression); - - // Add struts, which ensure that the top of the HTML element falls at the - // height of the expression, and the bottom of the HTML element falls at the - // depth of the expression. - var topStrut = makeSpan(["strut"]); - var bottomStrut = makeSpan(["strut", "bottom"]); - - topStrut.style.height = body.height + "em"; - bottomStrut.style.height = (body.height + body.depth) + "em"; - // We'd like to use `vertical-align: top` but in IE 9 this lowers the - // baseline of the box to the bottom of this strut (instead staying in the - // normal place) so we use an absolute value for vertical-align instead - bottomStrut.style.verticalAlign = -body.depth + "em"; - - // Wrap the struts and body together - var htmlNode = makeSpan(["katex-html"], [topStrut, bottomStrut, body]); - - htmlNode.setAttribute("aria-hidden", "true"); - - return htmlNode; -}; - -module.exports = buildHTML; - -},{"./ParseError":6,"./Style":9,"./buildCommon":10,"./delimiter":14,"./domTree":15,"./fontMetrics":17,"./utils":25}],12:[function(require,module,exports){ -/** - * This file converts a parse tree into a cooresponding MathML tree. The main - * entry point is the `buildMathML` function, which takes a parse tree from the - * parser. - */ - -var buildCommon = require("./buildCommon"); -var fontMetrics = require("./fontMetrics"); -var mathMLTree = require("./mathMLTree"); -var ParseError = require("./ParseError"); -var symbols = require("./symbols"); -var utils = require("./utils"); - -var makeSpan = buildCommon.makeSpan; -var fontMap = buildCommon.fontMap; - -/** - * Takes a symbol and converts it into a MathML text node after performing - * optional replacement from symbols.js. - */ -var makeText = function(text, mode) { - if (symbols[mode][text] && symbols[mode][text].replace) { - text = symbols[mode][text].replace; - } - - return new mathMLTree.TextNode(text); -}; - -/** - * Returns the math variant as a string or null if none is required. - */ -var getVariant = function(group, options) { - var font = options.font; - if (!font) { - return null; - } - - var mode = group.mode; - if (font === "mathit") { - return "italic"; - } - - var value = group.value; - if (utils.contains(["\\imath", "\\jmath"], value)) { - return null; - } - - if (symbols[mode][value] && symbols[mode][value].replace) { - value = symbols[mode][value].replace; - } - - var fontName = fontMap[font].fontName; - if (fontMetrics.getCharacterMetrics(value, fontName)) { - return fontMap[options.font].variant; - } - - return null; -}; - -/** - * Functions for handling the different types of groups found in the parse - * tree. Each function should take a parse group and return a MathML node. - */ -var groupTypes = {}; - -groupTypes.mathord = function(group, options) { - var node = new mathMLTree.MathNode( - "mi", - [makeText(group.value, group.mode)]); - - var variant = getVariant(group, options); - if (variant) { - node.setAttribute("mathvariant", variant); - } - return node; -}; - -groupTypes.textord = function(group, options) { - var text = makeText(group.value, group.mode); - - var variant = getVariant(group, options) || "normal"; - - var node; - if (/[0-9]/.test(group.value)) { - // TODO(kevinb) merge adjacent <mn> nodes - // do it as a post processing step - node = new mathMLTree.MathNode("mn", [text]); - if (options.font) { - node.setAttribute("mathvariant", variant); - } - } else { - node = new mathMLTree.MathNode("mi", [text]); - node.setAttribute("mathvariant", variant); - } - - return node; -}; - -groupTypes.bin = function(group) { - var node = new mathMLTree.MathNode( - "mo", [makeText(group.value, group.mode)]); - - return node; -}; - -groupTypes.rel = function(group) { - var node = new mathMLTree.MathNode( - "mo", [makeText(group.value, group.mode)]); - - return node; -}; - -groupTypes.open = function(group) { - var node = new mathMLTree.MathNode( - "mo", [makeText(group.value, group.mode)]); - - return node; -}; - -groupTypes.close = function(group) { - var node = new mathMLTree.MathNode( - "mo", [makeText(group.value, group.mode)]); - - return node; -}; - -groupTypes.inner = function(group) { - var node = new mathMLTree.MathNode( - "mo", [makeText(group.value, group.mode)]); - - return node; -}; - -groupTypes.punct = function(group) { - var node = new mathMLTree.MathNode( - "mo", [makeText(group.value, group.mode)]); - - node.setAttribute("separator", "true"); - - return node; -}; - -groupTypes.ordgroup = function(group, options) { - var inner = buildExpression(group.value, options); - - var node = new mathMLTree.MathNode("mrow", inner); - - return node; -}; - -groupTypes.text = function(group, options) { - var inner = buildExpression(group.value.body, options); - - var node = new mathMLTree.MathNode("mtext", inner); - - return node; -}; - -groupTypes.color = function(group, options) { - var inner = buildExpression(group.value.value, options); - - var node = new mathMLTree.MathNode("mstyle", inner); - - node.setAttribute("mathcolor", group.value.color); - - return node; -}; - -groupTypes.supsub = function(group, options) { - var children = [buildGroup(group.value.base, options)]; - - if (group.value.sub) { - children.push(buildGroup(group.value.sub, options)); - } - - if (group.value.sup) { - children.push(buildGroup(group.value.sup, options)); - } - - var nodeType; - if (!group.value.sub) { - nodeType = "msup"; - } else if (!group.value.sup) { - nodeType = "msub"; - } else { - nodeType = "msubsup"; - } - - var node = new mathMLTree.MathNode(nodeType, children); - - return node; -}; - -groupTypes.genfrac = function(group, options) { - var node = new mathMLTree.MathNode( - "mfrac", - [buildGroup(group.value.numer, options), - buildGroup(group.value.denom, options)]); - - if (!group.value.hasBarLine) { - node.setAttribute("linethickness", "0px"); - } - - if (group.value.leftDelim != null || group.value.rightDelim != null) { - var withDelims = []; - - if (group.value.leftDelim != null) { - var leftOp = new mathMLTree.MathNode( - "mo", [new mathMLTree.TextNode(group.value.leftDelim)]); - - leftOp.setAttribute("fence", "true"); - - withDelims.push(leftOp); - } - - withDelims.push(node); - - if (group.value.rightDelim != null) { - var rightOp = new mathMLTree.MathNode( - "mo", [new mathMLTree.TextNode(group.value.rightDelim)]); - - rightOp.setAttribute("fence", "true"); - - withDelims.push(rightOp); - } - - var outerNode = new mathMLTree.MathNode("mrow", withDelims); - - return outerNode; - } - - return node; -}; - -groupTypes.array = function(group, options) { - return new mathMLTree.MathNode( - "mtable", group.value.body.map(function(row) { - return new mathMLTree.MathNode( - "mtr", row.map(function(cell) { - return new mathMLTree.MathNode( - "mtd", [buildGroup(cell, options)]); - })); - })); -}; - -groupTypes.sqrt = function(group, options) { - var node; - if (group.value.index) { - node = new mathMLTree.MathNode( - "mroot", [ - buildGroup(group.value.body, options), - buildGroup(group.value.index, options), - ]); - } else { - node = new mathMLTree.MathNode( - "msqrt", [buildGroup(group.value.body, options)]); - } - - return node; -}; - -groupTypes.leftright = function(group, options) { - var inner = buildExpression(group.value.body, options); - - if (group.value.left !== ".") { - var leftNode = new mathMLTree.MathNode( - "mo", [makeText(group.value.left, group.mode)]); - - leftNode.setAttribute("fence", "true"); - - inner.unshift(leftNode); - } - - if (group.value.right !== ".") { - var rightNode = new mathMLTree.MathNode( - "mo", [makeText(group.value.right, group.mode)]); - - rightNode.setAttribute("fence", "true"); - - inner.push(rightNode); - } - - var outerNode = new mathMLTree.MathNode("mrow", inner); - - return outerNode; -}; - -groupTypes.accent = function(group, options) { - var accentNode = new mathMLTree.MathNode( - "mo", [makeText(group.value.accent, group.mode)]); - - var node = new mathMLTree.MathNode( - "mover", - [buildGroup(group.value.base, options), - accentNode]); - - node.setAttribute("accent", "true"); - - return node; -}; - -groupTypes.spacing = function(group) { - var node; - - if (group.value === "\\ " || group.value === "\\space" || - group.value === " " || group.value === "~") { - node = new mathMLTree.MathNode( - "mtext", [new mathMLTree.TextNode("\u00a0")]); - } else { - node = new mathMLTree.MathNode("mspace"); - - node.setAttribute( - "width", buildCommon.spacingFunctions[group.value].size); - } - - return node; -}; - -groupTypes.op = function(group) { - var node; - - // TODO(emily): handle big operators using the `largeop` attribute - - if (group.value.symbol) { - // This is a symbol. Just add the symbol. - node = new mathMLTree.MathNode( - "mo", [makeText(group.value.body, group.mode)]); - } else { - // This is a text operator. Add all of the characters from the - // operator's name. - // TODO(emily): Add a space in the middle of some of these - // operators, like \limsup. - node = new mathMLTree.MathNode( - "mi", [new mathMLTree.TextNode(group.value.body.slice(1))]); - } - - return node; -}; - -groupTypes.katex = function(group) { - var node = new mathMLTree.MathNode( - "mtext", [new mathMLTree.TextNode("KaTeX")]); - - return node; -}; - -groupTypes.font = function(group, options) { - var font = group.value.font; - return buildGroup(group.value.body, options.withFont(font)); -}; - -groupTypes.delimsizing = function(group) { - var children = []; - - if (group.value.value !== ".") { - children.push(makeText(group.value.value, group.mode)); - } - - var node = new mathMLTree.MathNode("mo", children); - - if (group.value.delimType === "open" || - group.value.delimType === "close") { - // Only some of the delimsizing functions act as fences, and they - // return "open" or "close" delimTypes. - node.setAttribute("fence", "true"); - } else { - // Explicitly disable fencing if it's not a fence, to override the - // defaults. - node.setAttribute("fence", "false"); - } - - return node; -}; - -groupTypes.styling = function(group, options) { - var inner = buildExpression(group.value.value, options); - - var node = new mathMLTree.MathNode("mstyle", inner); - - var styleAttributes = { - "display": ["0", "true"], - "text": ["0", "false"], - "script": ["1", "false"], - "scriptscript": ["2", "false"], - }; - - var attr = styleAttributes[group.value.style]; - - node.setAttribute("scriptlevel", attr[0]); - node.setAttribute("displaystyle", attr[1]); - - return node; -}; - -groupTypes.sizing = function(group, options) { - var inner = buildExpression(group.value.value, options); - - var node = new mathMLTree.MathNode("mstyle", inner); - - // TODO(emily): This doesn't produce the correct size for nested size - // changes, because we don't keep state of what style we're currently - // in, so we can't reset the size to normal before changing it. Now - // that we're passing an options parameter we should be able to fix - // this. - node.setAttribute( - "mathsize", buildCommon.sizingMultiplier[group.value.size] + "em"); - - return node; -}; - -groupTypes.overline = function(group, options) { - var operator = new mathMLTree.MathNode( - "mo", [new mathMLTree.TextNode("\u203e")]); - operator.setAttribute("stretchy", "true"); - - var node = new mathMLTree.MathNode( - "mover", - [buildGroup(group.value.body, options), - operator]); - node.setAttribute("accent", "true"); - - return node; -}; - -groupTypes.underline = function(group, options) { - var operator = new mathMLTree.MathNode( - "mo", [new mathMLTree.TextNode("\u203e")]); - operator.setAttribute("stretchy", "true"); - - var node = new mathMLTree.MathNode( - "munder", - [buildGroup(group.value.body, options), - operator]); - node.setAttribute("accentunder", "true"); - - return node; -}; - -groupTypes.rule = function(group) { - // TODO(emily): Figure out if there's an actual way to draw black boxes - // in MathML. - var node = new mathMLTree.MathNode("mrow"); - - return node; -}; - -groupTypes.kern = function(group) { - // TODO(kevin): Figure out if there's a way to add space in MathML - var node = new mathMLTree.MathNode("mrow"); - - return node; -}; - -groupTypes.llap = function(group, options) { - var node = new mathMLTree.MathNode( - "mpadded", [buildGroup(group.value.body, options)]); - - node.setAttribute("lspace", "-1width"); - node.setAttribute("width", "0px"); - - return node; -}; - -groupTypes.rlap = function(group, options) { - var node = new mathMLTree.MathNode( - "mpadded", [buildGroup(group.value.body, options)]); - - node.setAttribute("width", "0px"); - - return node; -}; - -groupTypes.phantom = function(group, options, prev) { - var inner = buildExpression(group.value.value, options); - return new mathMLTree.MathNode("mphantom", inner); -}; - -/** - * Takes a list of nodes, builds them, and returns a list of the generated - * MathML nodes. A little simpler than the HTML version because we don't do any - * previous-node handling. - */ -var buildExpression = function(expression, options) { - var groups = []; - for (var i = 0; i < expression.length; i++) { - var group = expression[i]; - groups.push(buildGroup(group, options)); - } - return groups; -}; - -/** - * Takes a group from the parser and calls the appropriate groupTypes function - * on it to produce a MathML node. - */ -var buildGroup = function(group, options) { - if (!group) { - return new mathMLTree.MathNode("mrow"); - } - - if (groupTypes[group.type]) { - // Call the groupTypes function - return groupTypes[group.type](group, options); - } else { - throw new ParseError( - "Got group of unknown type: '" + group.type + "'"); - } -}; - -/** - * Takes a full parse tree and settings and builds a MathML representation of - * it. In particular, we put the elements from building the parse tree into a - * <semantics> tag so we can also include that TeX source as an annotation. - * - * Note that we actually return a domTree element with a `<math>` inside it so - * we can do appropriate styling. - */ -var buildMathML = function(tree, texExpression, options) { - var expression = buildExpression(tree, options); - - // Wrap up the expression in an mrow so it is presented in the semantics - // tag correctly. - var wrapper = new mathMLTree.MathNode("mrow", expression); - - // Build a TeX annotation of the source - var annotation = new mathMLTree.MathNode( - "annotation", [new mathMLTree.TextNode(texExpression)]); - - annotation.setAttribute("encoding", "application/x-tex"); - - var semantics = new mathMLTree.MathNode( - "semantics", [wrapper, annotation]); - - var math = new mathMLTree.MathNode("math", [semantics]); - - // You can't style <math> nodes, so we wrap the node in a span. - return makeSpan(["katex-mathml"], [math]); -}; - -module.exports = buildMathML; - -},{"./ParseError":6,"./buildCommon":10,"./fontMetrics":17,"./mathMLTree":20,"./symbols":23,"./utils":25}],13:[function(require,module,exports){ -var buildHTML = require("./buildHTML"); -var buildMathML = require("./buildMathML"); -var buildCommon = require("./buildCommon"); -var Options = require("./Options"); -var Settings = require("./Settings"); -var Style = require("./Style"); - -var makeSpan = buildCommon.makeSpan; - -var buildTree = function(tree, expression, settings) { - settings = settings || new Settings({}); - - var startStyle = Style.TEXT; - if (settings.displayMode) { - startStyle = Style.DISPLAY; - } - - // Setup the default options - var options = new Options({ - style: startStyle, - size: "size5", - }); - - // `buildHTML` sometimes messes with the parse tree (like turning bins -> - // ords), so we build the MathML version first. - var mathMLNode = buildMathML(tree, expression, options); - var htmlNode = buildHTML(tree, options); - - var katexNode = makeSpan(["katex"], [ - mathMLNode, htmlNode, - ]); - - if (settings.displayMode) { - return makeSpan(["katex-display"], [katexNode]); - } else { - return katexNode; - } -}; - -module.exports = buildTree; - -},{"./Options":5,"./Settings":8,"./Style":9,"./buildCommon":10,"./buildHTML":11,"./buildMathML":12}],14:[function(require,module,exports){ -/** - * This file deals with creating delimiters of various sizes. The TeXbook - * discusses these routines on page 441-442, in the "Another subroutine sets box - * x to a specified variable delimiter" paragraph. - * - * There are three main routines here. `makeSmallDelim` makes a delimiter in the - * normal font, but in either text, script, or scriptscript style. - * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1, - * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of - * smaller pieces that are stacked on top of one another. - * - * The functions take a parameter `center`, which determines if the delimiter - * should be centered around the axis. - * - * Then, there are three exposed functions. `sizedDelim` makes a delimiter in - * one of the given sizes. This is used for things like `\bigl`. - * `customSizedDelim` makes a delimiter with a given total height+depth. It is - * called in places like `\sqrt`. `leftRightDelim` makes an appropriate - * delimiter which surrounds an expression of a given height an depth. It is - * used in `\left` and `\right`. - */ - -var ParseError = require("./ParseError"); -var Style = require("./Style"); - -var buildCommon = require("./buildCommon"); -var fontMetrics = require("./fontMetrics"); -var symbols = require("./symbols"); -var utils = require("./utils"); - -var makeSpan = buildCommon.makeSpan; - -/** - * Get the metrics for a given symbol and font, after transformation (i.e. - * after following replacement from symbols.js) - */ -var getMetrics = function(symbol, font) { - if (symbols.math[symbol] && symbols.math[symbol].replace) { - return fontMetrics.getCharacterMetrics( - symbols.math[symbol].replace, font); - } else { - return fontMetrics.getCharacterMetrics( - symbol, font); - } -}; - -/** - * Builds a symbol in the given font size (note size is an integer) - */ -var mathrmSize = function(value, size, mode) { - return buildCommon.makeSymbol(value, "Size" + size + "-Regular", mode); -}; - -/** - * Puts a delimiter span in a given style, and adds appropriate height, depth, - * and maxFontSizes. - */ -var styleWrap = function(delim, toStyle, options) { - var span = makeSpan( - ["style-wrap", options.style.reset(), toStyle.cls()], [delim]); - - var multiplier = toStyle.sizeMultiplier / options.style.sizeMultiplier; - - span.height *= multiplier; - span.depth *= multiplier; - span.maxFontSize = toStyle.sizeMultiplier; - - return span; -}; - -/** - * Makes a small delimiter. This is a delimiter that comes in the Main-Regular - * font, but is restyled to either be in textstyle, scriptstyle, or - * scriptscriptstyle. - */ -var makeSmallDelim = function(delim, style, center, options, mode) { - var text = buildCommon.makeSymbol(delim, "Main-Regular", mode); - - var span = styleWrap(text, style, options); - - if (center) { - var shift = - (1 - options.style.sizeMultiplier / style.sizeMultiplier) * - fontMetrics.metrics.axisHeight; - - span.style.top = shift + "em"; - span.height -= shift; - span.depth += shift; - } - - return span; -}; - -/** - * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2, - * Size3, or Size4 fonts. It is always rendered in textstyle. - */ -var makeLargeDelim = function(delim, size, center, options, mode) { - var inner = mathrmSize(delim, size, mode); - - var span = styleWrap( - makeSpan(["delimsizing", "size" + size], - [inner], options.getColor()), - Style.TEXT, options); - - if (center) { - var shift = (1 - options.style.sizeMultiplier) * - fontMetrics.metrics.axisHeight; - - span.style.top = shift + "em"; - span.height -= shift; - span.depth += shift; - } - - return span; -}; - -/** - * Make an inner span with the given offset and in the given font. This is used - * in `makeStackedDelim` to make the stacking pieces for the delimiter. - */ -var makeInner = function(symbol, font, mode) { - var sizeClass; - // Apply the correct CSS class to choose the right font. - if (font === "Size1-Regular") { - sizeClass = "delim-size1"; - } else if (font === "Size4-Regular") { - sizeClass = "delim-size4"; - } - - var inner = makeSpan( - ["delimsizinginner", sizeClass], - [makeSpan([], [buildCommon.makeSymbol(symbol, font, mode)])]); - - // Since this will be passed into `makeVList` in the end, wrap the element - // in the appropriate tag that VList uses. - return {type: "elem", elem: inner}; -}; - -/** - * Make a stacked delimiter out of a given delimiter, with the total height at - * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook. - */ -var makeStackedDelim = function(delim, heightTotal, center, options, mode) { - // There are four parts, the top, an optional middle, a repeated part, and a - // bottom. - var top; - var middle; - var repeat; - var bottom; - top = repeat = bottom = delim; - middle = null; - // Also keep track of what font the delimiters are in - var font = "Size1-Regular"; - - // We set the parts and font based on the symbol. Note that we use - // '\u23d0' instead of '|' and '\u2016' instead of '\\|' for the - // repeats of the arrows - if (delim === "\\uparrow") { - repeat = bottom = "\u23d0"; - } else if (delim === "\\Uparrow") { - repeat = bottom = "\u2016"; - } else if (delim === "\\downarrow") { - top = repeat = "\u23d0"; - } else if (delim === "\\Downarrow") { - top = repeat = "\u2016"; - } else if (delim === "\\updownarrow") { - top = "\\uparrow"; - repeat = "\u23d0"; - bottom = "\\downarrow"; - } else if (delim === "\\Updownarrow") { - top = "\\Uparrow"; - repeat = "\u2016"; - bottom = "\\Downarrow"; - } else if (delim === "[" || delim === "\\lbrack") { - top = "\u23a1"; - repeat = "\u23a2"; - bottom = "\u23a3"; - font = "Size4-Regular"; - } else if (delim === "]" || delim === "\\rbrack") { - top = "\u23a4"; - repeat = "\u23a5"; - bottom = "\u23a6"; - font = "Size4-Regular"; - } else if (delim === "\\lfloor") { - repeat = top = "\u23a2"; - bottom = "\u23a3"; - font = "Size4-Regular"; - } else if (delim === "\\lceil") { - top = "\u23a1"; - repeat = bottom = "\u23a2"; - font = "Size4-Regular"; - } else if (delim === "\\rfloor") { - repeat = top = "\u23a5"; - bottom = "\u23a6"; - font = "Size4-Regular"; - } else if (delim === "\\rceil") { - top = "\u23a4"; - repeat = bottom = "\u23a5"; - font = "Size4-Regular"; - } else if (delim === "(") { - top = "\u239b"; - repeat = "\u239c"; - bottom = "\u239d"; - font = "Size4-Regular"; - } else if (delim === ")") { - top = "\u239e"; - repeat = "\u239f"; - bottom = "\u23a0"; - font = "Size4-Regular"; - } else if (delim === "\\{" || delim === "\\lbrace") { - top = "\u23a7"; - middle = "\u23a8"; - bottom = "\u23a9"; - repeat = "\u23aa"; - font = "Size4-Regular"; - } else if (delim === "\\}" || delim === "\\rbrace") { - top = "\u23ab"; - middle = "\u23ac"; - bottom = "\u23ad"; - repeat = "\u23aa"; - font = "Size4-Regular"; - } else if (delim === "\\lgroup") { - top = "\u23a7"; - bottom = "\u23a9"; - repeat = "\u23aa"; - font = "Size4-Regular"; - } else if (delim === "\\rgroup") { - top = "\u23ab"; - bottom = "\u23ad"; - repeat = "\u23aa"; - font = "Size4-Regular"; - } else if (delim === "\\lmoustache") { - top = "\u23a7"; - bottom = "\u23ad"; - repeat = "\u23aa"; - font = "Size4-Regular"; - } else if (delim === "\\rmoustache") { - top = "\u23ab"; - bottom = "\u23a9"; - repeat = "\u23aa"; - font = "Size4-Regular"; - } else if (delim === "\\surd") { - top = "\ue001"; - bottom = "\u23b7"; - repeat = "\ue000"; - font = "Size4-Regular"; - } - - // Get the metrics of the four sections - var topMetrics = getMetrics(top, font); - var topHeightTotal = topMetrics.height + topMetrics.depth; - var repeatMetrics = getMetrics(repeat, font); - var repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth; - var bottomMetrics = getMetrics(bottom, font); - var bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth; - var middleHeightTotal = 0; - var middleFactor = 1; - if (middle !== null) { - var middleMetrics = getMetrics(middle, font); - middleHeightTotal = middleMetrics.height + middleMetrics.depth; - middleFactor = 2; // repeat symmetrically above and below middle - } - - // Calcuate the minimal height that the delimiter can have. - // It is at least the size of the top, bottom, and optional middle combined. - var minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal; - - // Compute the number of copies of the repeat symbol we will need - var repeatCount = Math.ceil( - (heightTotal - minHeight) / (middleFactor * repeatHeightTotal)); - - // Compute the total height of the delimiter including all the symbols - var realHeightTotal = - minHeight + repeatCount * middleFactor * repeatHeightTotal; - - // The center of the delimiter is placed at the center of the axis. Note - // that in this context, "center" means that the delimiter should be - // centered around the axis in the current style, while normally it is - // centered around the axis in textstyle. - var axisHeight = fontMetrics.metrics.axisHeight; - if (center) { - axisHeight *= options.style.sizeMultiplier; - } - // Calculate the depth - var depth = realHeightTotal / 2 - axisHeight; - - // Now, we start building the pieces that will go into the vlist - - // Keep a list of the inner pieces - var inners = []; - - // Add the bottom symbol - inners.push(makeInner(bottom, font, mode)); - - var i; - if (middle === null) { - // Add that many symbols - for (i = 0; i < repeatCount; i++) { - inners.push(makeInner(repeat, font, mode)); - } - } else { - // When there is a middle bit, we need the middle part and two repeated - // sections - for (i = 0; i < repeatCount; i++) { - inners.push(makeInner(repeat, font, mode)); - } - inners.push(makeInner(middle, font, mode)); - for (i = 0; i < repeatCount; i++) { - inners.push(makeInner(repeat, font, mode)); - } - } - - // Add the top symbol - inners.push(makeInner(top, font, mode)); - - // Finally, build the vlist - var inner = buildCommon.makeVList(inners, "bottom", depth, options); - - return styleWrap( - makeSpan(["delimsizing", "mult"], [inner], options.getColor()), - Style.TEXT, options); -}; - -// There are three kinds of delimiters, delimiters that stack when they become -// too large -var stackLargeDelimiters = [ - "(", ")", "[", "\\lbrack", "]", "\\rbrack", - "\\{", "\\lbrace", "\\}", "\\rbrace", - "\\lfloor", "\\rfloor", "\\lceil", "\\rceil", - "\\surd", -]; - -// delimiters that always stack -var stackAlwaysDelimiters = [ - "\\uparrow", "\\downarrow", "\\updownarrow", - "\\Uparrow", "\\Downarrow", "\\Updownarrow", - "|", "\\|", "\\vert", "\\Vert", - "\\lvert", "\\rvert", "\\lVert", "\\rVert", - "\\lgroup", "\\rgroup", "\\lmoustache", "\\rmoustache", -]; - -// and delimiters that never stack -var stackNeverDelimiters = [ - "<", ">", "\\langle", "\\rangle", "/", "\\backslash", "\\lt", "\\gt", -]; - -// Metrics of the different sizes. Found by looking at TeX's output of -// $\bigl| // \Bigl| \biggl| \Biggl| \showlists$ -// Used to create stacked delimiters of appropriate sizes in makeSizedDelim. -var sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0]; - -/** - * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4. - */ -var makeSizedDelim = function(delim, size, options, mode) { - // < and > turn into \langle and \rangle in delimiters - if (delim === "<" || delim === "\\lt") { - delim = "\\langle"; - } else if (delim === ">" || delim === "\\gt") { - delim = "\\rangle"; - } - - // Sized delimiters are never centered. - if (utils.contains(stackLargeDelimiters, delim) || - utils.contains(stackNeverDelimiters, delim)) { - return makeLargeDelim(delim, size, false, options, mode); - } else if (utils.contains(stackAlwaysDelimiters, delim)) { - return makeStackedDelim( - delim, sizeToMaxHeight[size], false, options, mode); - } else { - throw new ParseError("Illegal delimiter: '" + delim + "'"); - } -}; - -/** - * There are three different sequences of delimiter sizes that the delimiters - * follow depending on the kind of delimiter. This is used when creating custom - * sized delimiters to decide whether to create a small, large, or stacked - * delimiter. - * - * In real TeX, these sequences aren't explicitly defined, but are instead - * defined inside the font metrics. Since there are only three sequences that - * are possible for the delimiters that TeX defines, it is easier to just encode - * them explicitly here. - */ - -// Delimiters that never stack try small delimiters and large delimiters only -var stackNeverDelimiterSequence = [ - {type: "small", style: Style.SCRIPTSCRIPT}, - {type: "small", style: Style.SCRIPT}, - {type: "small", style: Style.TEXT}, - {type: "large", size: 1}, - {type: "large", size: 2}, - {type: "large", size: 3}, - {type: "large", size: 4}, -]; - -// Delimiters that always stack try the small delimiters first, then stack -var stackAlwaysDelimiterSequence = [ - {type: "small", style: Style.SCRIPTSCRIPT}, - {type: "small", style: Style.SCRIPT}, - {type: "small", style: Style.TEXT}, - {type: "stack"}, -]; - -// Delimiters that stack when large try the small and then large delimiters, and -// stack afterwards -var stackLargeDelimiterSequence = [ - {type: "small", style: Style.SCRIPTSCRIPT}, - {type: "small", style: Style.SCRIPT}, - {type: "small", style: Style.TEXT}, - {type: "large", size: 1}, - {type: "large", size: 2}, - {type: "large", size: 3}, - {type: "large", size: 4}, - {type: "stack"}, -]; - -/** - * Get the font used in a delimiter based on what kind of delimiter it is. - */ -var delimTypeToFont = function(type) { - if (type.type === "small") { - return "Main-Regular"; - } else if (type.type === "large") { - return "Size" + type.size + "-Regular"; - } else if (type.type === "stack") { - return "Size4-Regular"; - } -}; - -/** - * Traverse a sequence of types of delimiters to decide what kind of delimiter - * should be used to create a delimiter of the given height+depth. - */ -var traverseSequence = function(delim, height, sequence, options) { - // Here, we choose the index we should start at in the sequences. In smaller - // sizes (which correspond to larger numbers in style.size) we start earlier - // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts - // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2 - var start = Math.min(2, 3 - options.style.size); - for (var i = start; i < sequence.length; i++) { - if (sequence[i].type === "stack") { - // This is always the last delimiter, so we just break the loop now. - break; - } - - var metrics = getMetrics(delim, delimTypeToFont(sequence[i])); - var heightDepth = metrics.height + metrics.depth; - - // Small delimiters are scaled down versions of the same font, so we - // account for the style change size. - - if (sequence[i].type === "small") { - heightDepth *= sequence[i].style.sizeMultiplier; - } - - // Check if the delimiter at this size works for the given height. - if (heightDepth > height) { - return sequence[i]; - } - } - - // If we reached the end of the sequence, return the last sequence element. - return sequence[sequence.length - 1]; -}; - -/** - * Make a delimiter of a given height+depth, with optional centering. Here, we - * traverse the sequences, and create a delimiter that the sequence tells us to. - */ -var makeCustomSizedDelim = function(delim, height, center, options, mode) { - if (delim === "<" || delim === "\\lt") { - delim = "\\langle"; - } else if (delim === ">" || delim === "\\gt") { - delim = "\\rangle"; - } - - // Decide what sequence to use - var sequence; - if (utils.contains(stackNeverDelimiters, delim)) { - sequence = stackNeverDelimiterSequence; - } else if (utils.contains(stackLargeDelimiters, delim)) { - sequence = stackLargeDelimiterSequence; - } else { - sequence = stackAlwaysDelimiterSequence; - } - - // Look through the sequence - var delimType = traverseSequence(delim, height, sequence, options); - - // Depending on the sequence element we decided on, call the appropriate - // function. - if (delimType.type === "small") { - return makeSmallDelim(delim, delimType.style, center, options, mode); - } else if (delimType.type === "large") { - return makeLargeDelim(delim, delimType.size, center, options, mode); - } else if (delimType.type === "stack") { - return makeStackedDelim(delim, height, center, options, mode); - } -}; - -/** - * Make a delimiter for use with `\left` and `\right`, given a height and depth - * of an expression that the delimiters surround. - */ -var makeLeftRightDelim = function(delim, height, depth, options, mode) { - // We always center \left/\right delimiters, so the axis is always shifted - var axisHeight = - fontMetrics.metrics.axisHeight * options.style.sizeMultiplier; - - // Taken from TeX source, tex.web, function make_left_right - var delimiterFactor = 901; - var delimiterExtend = 5.0 / fontMetrics.metrics.ptPerEm; - - var maxDistFromAxis = Math.max( - height - axisHeight, depth + axisHeight); - - var totalHeight = Math.max( - // In real TeX, calculations are done using integral values which are - // 65536 per pt, or 655360 per em. So, the division here truncates in - // TeX but doesn't here, producing different results. If we wanted to - // exactly match TeX's calculation, we could do - // Math.floor(655360 * maxDistFromAxis / 500) * - // delimiterFactor / 655360 - // (To see the difference, compare - // x^{x^{\left(\rule{0.1em}{0.68em}\right)}} - // in TeX and KaTeX) - maxDistFromAxis / 500 * delimiterFactor, - 2 * maxDistFromAxis - delimiterExtend); - - // Finally, we defer to `makeCustomSizedDelim` with our calculated total - // height - return makeCustomSizedDelim(delim, totalHeight, true, options, mode); -}; - -module.exports = { - sizedDelim: makeSizedDelim, - customSizedDelim: makeCustomSizedDelim, - leftRightDelim: makeLeftRightDelim, -}; - -},{"./ParseError":6,"./Style":9,"./buildCommon":10,"./fontMetrics":17,"./symbols":23,"./utils":25}],15:[function(require,module,exports){ -/** - * These objects store the data about the DOM nodes we create, as well as some - * extra data. They can then be transformed into real DOM nodes with the - * `toNode` function or HTML markup using `toMarkup`. They are useful for both - * storing extra properties on the nodes, as well as providing a way to easily - * work with the DOM. - * - * Similar functions for working with MathML nodes exist in mathMLTree.js. - */ -var unicodeRegexes = require("./unicodeRegexes"); -var utils = require("./utils"); - -/** - * Create an HTML className based on a list of classes. In addition to joining - * with spaces, we also remove null or empty classes. - */ -var createClass = function(classes) { - classes = classes.slice(); - for (var i = classes.length - 1; i >= 0; i--) { - if (!classes[i]) { - classes.splice(i, 1); - } - } - - return classes.join(" "); -}; - -/** - * This node represents a span node, with a className, a list of children, and - * an inline style. It also contains information about its height, depth, and - * maxFontSize. - */ -function span(classes, children, height, depth, maxFontSize, style) { - this.classes = classes || []; - this.children = children || []; - this.height = height || 0; - this.depth = depth || 0; - this.maxFontSize = maxFontSize || 0; - this.style = style || {}; - this.attributes = {}; -} - -/** - * Sets an arbitrary attribute on the span. Warning: use this wisely. Not all - * browsers support attributes the same, and having too many custom attributes - * is probably bad. - */ -span.prototype.setAttribute = function(attribute, value) { - this.attributes[attribute] = value; -}; - -/** - * Convert the span into an HTML node - */ -span.prototype.toNode = function() { - var span = document.createElement("span"); - - // Apply the class - span.className = createClass(this.classes); - - // Apply inline styles - for (var style in this.style) { - if (Object.prototype.hasOwnProperty.call(this.style, style)) { - span.style[style] = this.style[style]; - } - } - - // Apply attributes - for (var attr in this.attributes) { - if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { - span.setAttribute(attr, this.attributes[attr]); - } - } - - // Append the children, also as HTML nodes - for (var i = 0; i < this.children.length; i++) { - span.appendChild(this.children[i].toNode()); - } - - return span; -}; - -/** - * Convert the span into an HTML markup string - */ -span.prototype.toMarkup = function() { - var markup = "<span"; - - // Add the class - if (this.classes.length) { - markup += " class=\""; - markup += utils.escape(createClass(this.classes)); - markup += "\""; - } - - var styles = ""; - - // Add the styles, after hyphenation - for (var style in this.style) { - if (this.style.hasOwnProperty(style)) { - styles += utils.hyphenate(style) + ":" + this.style[style] + ";"; - } - } - - if (styles) { - markup += " style=\"" + utils.escape(styles) + "\""; - } - - // Add the attributes - for (var attr in this.attributes) { - if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { - markup += " " + attr + "=\""; - markup += utils.escape(this.attributes[attr]); - markup += "\""; - } - } - - markup += ">"; - - // Add the markup of the children, also as markup - for (var i = 0; i < this.children.length; i++) { - markup += this.children[i].toMarkup(); - } - - markup += "</span>"; - - return markup; -}; - -/** - * This node represents a document fragment, which contains elements, but when - * placed into the DOM doesn't have any representation itself. Thus, it only - * contains children and doesn't have any HTML properties. It also keeps track - * of a height, depth, and maxFontSize. - */ -function documentFragment(children, height, depth, maxFontSize) { - this.children = children || []; - this.height = height || 0; - this.depth = depth || 0; - this.maxFontSize = maxFontSize || 0; -} - -/** - * Convert the fragment into a node - */ -documentFragment.prototype.toNode = function() { - // Create a fragment - var frag = document.createDocumentFragment(); - - // Append the children - for (var i = 0; i < this.children.length; i++) { - frag.appendChild(this.children[i].toNode()); - } - - return frag; -}; - -/** - * Convert the fragment into HTML markup - */ -documentFragment.prototype.toMarkup = function() { - var markup = ""; - - // Simply concatenate the markup for the children together - for (var i = 0; i < this.children.length; i++) { - markup += this.children[i].toMarkup(); - } - - return markup; -}; - -var iCombinations = { - 'î': '\u0131\u0302', - 'ï': '\u0131\u0308', - 'Ã': '\u0131\u0301', - // 'Ä«': '\u0131\u0304', // enable when we add Extended Latin - 'ì': '\u0131\u0300', -}; - -/** - * A symbol node contains information about a single symbol. It either renders - * to a single text node, or a span with a single text node in it, depending on - * whether it has CSS classes, styles, or needs italic correction. - */ -function symbolNode(value, height, depth, italic, skew, classes, style) { - this.value = value || ""; - this.height = height || 0; - this.depth = depth || 0; - this.italic = italic || 0; - this.skew = skew || 0; - this.classes = classes || []; - this.style = style || {}; - this.maxFontSize = 0; - - // Mark CJK characters with specific classes so that we can specify which - // fonts to use. This allows us to render these characters with a serif - // font in situations where the browser would either default to a sans serif - // or render a placeholder character. - if (unicodeRegexes.cjkRegex.test(value)) { - // I couldn't find any fonts that contained Hangul as well as all of - // the other characters we wanted to test there for it gets its own - // CSS class. - if (unicodeRegexes.hangulRegex.test(value)) { - this.classes.push('hangul_fallback'); - } else { - this.classes.push('cjk_fallback'); - } - } - - if (/[îïÃì]/.test(this.value)) { // add Ä« when we add Extended Latin - this.value = iCombinations[this.value]; - } -} - -/** - * Creates a text node or span from a symbol node. Note that a span is only - * created if it is needed. - */ -symbolNode.prototype.toNode = function() { - var node = document.createTextNode(this.value); - var span = null; - - if (this.italic > 0) { - span = document.createElement("span"); - span.style.marginRight = this.italic + "em"; - } - - if (this.classes.length > 0) { - span = span || document.createElement("span"); - span.className = createClass(this.classes); - } - - for (var style in this.style) { - if (this.style.hasOwnProperty(style)) { - span = span || document.createElement("span"); - span.style[style] = this.style[style]; - } - } - - if (span) { - span.appendChild(node); - return span; - } else { - return node; - } -}; - -/** - * Creates markup for a symbol node. - */ -symbolNode.prototype.toMarkup = function() { - // TODO(alpert): More duplication than I'd like from - // span.prototype.toMarkup and symbolNode.prototype.toNode... - var needsSpan = false; - - var markup = "<span"; - - if (this.classes.length) { - needsSpan = true; - markup += " class=\""; - markup += utils.escape(createClass(this.classes)); - markup += "\""; - } - - var styles = ""; - - if (this.italic > 0) { - styles += "margin-right:" + this.italic + "em;"; - } - for (var style in this.style) { - if (this.style.hasOwnProperty(style)) { - styles += utils.hyphenate(style) + ":" + this.style[style] + ";"; - } - } - - if (styles) { - needsSpan = true; - markup += " style=\"" + utils.escape(styles) + "\""; - } - - var escaped = utils.escape(this.value); - if (needsSpan) { - markup += ">"; - markup += escaped; - markup += "</span>"; - return markup; - } else { - return escaped; - } -}; - -module.exports = { - span: span, - documentFragment: documentFragment, - symbolNode: symbolNode, -}; - -},{"./unicodeRegexes":24,"./utils":25}],16:[function(require,module,exports){ -/* eslint no-constant-condition:0 */ -var fontMetrics = require("./fontMetrics"); -var parseData = require("./parseData"); -var ParseError = require("./ParseError"); - -var ParseNode = parseData.ParseNode; - -/** - * Parse the body of the environment, with rows delimited by \\ and - * columns delimited by &, and create a nested list in row-major order - * with one group per cell. - */ -function parseArray(parser, result) { - var row = []; - var body = [row]; - var rowGaps = []; - while (true) { - var cell = parser.parseExpression(false, null); - row.push(new ParseNode("ordgroup", cell, parser.mode)); - var next = parser.nextToken.text; - if (next === "&") { - parser.consume(); - } else if (next === "\\end") { - break; - } else if (next === "\\\\" || next === "\\cr") { - var cr = parser.parseFunction(); - rowGaps.push(cr.value.size); - row = []; - body.push(row); - } else { - throw new ParseError("Expected & or \\\\ or \\end", - parser.nextToken); - } - } - result.body = body; - result.rowGaps = rowGaps; - return new ParseNode(result.type, result, parser.mode); -} - -/* - * An environment definition is very similar to a function definition: - * it is declared with a name or a list of names, a set of properties - * and a handler containing the actual implementation. - * - * The properties include: - * - numArgs: The number of arguments after the \begin{name} function. - * - argTypes: (optional) Just like for a function - * - allowedInText: (optional) Whether or not the environment is allowed inside - * text mode (default false) (not enforced yet) - * - numOptionalArgs: (optional) Just like for a function - * A bare number instead of that object indicates the numArgs value. - * - * The handler function will receive two arguments - * - context: information and references provided by the parser - * - args: an array of arguments passed to \begin{name} - * The context contains the following properties: - * - envName: the name of the environment, one of the listed names. - * - parser: the parser object - * - lexer: the lexer object - * - positions: the positions associated with these arguments from args. - * The handler must return a ParseResult. - */ - -function defineEnvironment(names, props, handler) { - if (typeof names === "string") { - names = [names]; - } - if (typeof props === "number") { - props = { numArgs: props }; - } - // Set default values of environments - var data = { - numArgs: props.numArgs || 0, - argTypes: props.argTypes, - greediness: 1, - allowedInText: !!props.allowedInText, - numOptionalArgs: props.numOptionalArgs || 0, - handler: handler, - }; - for (var i = 0; i < names.length; ++i) { - module.exports[names[i]] = data; - } -} - -// Arrays are part of LaTeX, defined in lttab.dtx so its documentation -// is part of the source2e.pdf file of LaTeX2e source documentation. -defineEnvironment("array", { - numArgs: 1, -}, function(context, args) { - var colalign = args[0]; - colalign = colalign.value.map ? colalign.value : [colalign]; - var cols = colalign.map(function(node) { - var ca = node.value; - if ("lcr".indexOf(ca) !== -1) { - return { - type: "align", - align: ca, - }; - } else if (ca === "|") { - return { - type: "separator", - separator: "|", - }; - } - throw new ParseError( - "Unknown column alignment: " + node.value, - node); - }); - var res = { - type: "array", - cols: cols, - hskipBeforeAndAfter: true, // \@preamble in lttab.dtx - }; - res = parseArray(context.parser, res); - return res; -}); - -// The matrix environments of amsmath builds on the array environment -// of LaTeX, which is discussed above. -defineEnvironment([ - "matrix", - "pmatrix", - "bmatrix", - "Bmatrix", - "vmatrix", - "Vmatrix", -], { -}, function(context) { - var delimiters = { - "matrix": null, - "pmatrix": ["(", ")"], - "bmatrix": ["[", "]"], - "Bmatrix": ["\\{", "\\}"], - "vmatrix": ["|", "|"], - "Vmatrix": ["\\Vert", "\\Vert"], - }[context.envName]; - var res = { - type: "array", - hskipBeforeAndAfter: false, // \hskip -\arraycolsep in amsmath - }; - res = parseArray(context.parser, res); - if (delimiters) { - res = new ParseNode("leftright", { - body: [res], - left: delimiters[0], - right: delimiters[1], - }, context.mode); - } - return res; -}); - -// A cases environment (in amsmath.sty) is almost equivalent to -// \def\arraystretch{1.2}% -// \left\{\begin{array}{@{}l@{\quad}l@{}} … \end{array}\right. -defineEnvironment("cases", { -}, function(context) { - var res = { - type: "array", - arraystretch: 1.2, - cols: [{ - type: "align", - align: "l", - pregap: 0, - postgap: fontMetrics.metrics.quad, - }, { - type: "align", - align: "l", - pregap: 0, - postgap: 0, - }], - }; - res = parseArray(context.parser, res); - res = new ParseNode("leftright", { - body: [res], - left: "\\{", - right: ".", - }, context.mode); - return res; -}); - -// An aligned environment is like the align* environment -// except it operates within math mode. -// Note that we assume \nomallineskiplimit to be zero, -// so that \strut@ is the same as \strut. -defineEnvironment("aligned", { -}, function(context) { - var res = { - type: "array", - cols: [], - }; - res = parseArray(context.parser, res); - var emptyGroup = new ParseNode("ordgroup", [], context.mode); - var numCols = 0; - res.value.body.forEach(function(row) { - var i; - for (i = 1; i < row.length; i += 2) { - row[i].value.unshift(emptyGroup); - } - if (numCols < row.length) { - numCols = row.length; - } - }); - for (var i = 0; i < numCols; ++i) { - var align = "r"; - var pregap = 0; - if (i % 2 === 1) { - align = "l"; - } else if (i > 0) { - pregap = 2; // one \qquad between columns - } - res.value.cols[i] = { - type: "align", - align: align, - pregap: pregap, - postgap: 0, - }; - } - return res; -}); - -},{"./ParseError":6,"./fontMetrics":17,"./parseData":21}],17:[function(require,module,exports){ -/* eslint no-unused-vars:0 */ - -var Style = require("./Style"); -var cjkRegex = require("./unicodeRegexes").cjkRegex; - -/** - * This file contains metrics regarding fonts and individual symbols. The sigma - * and xi variables, as well as the metricMap map contain data extracted from - * TeX, TeX font metrics, and the TTF files. These data are then exposed via the - * `metrics` variable and the getCharacterMetrics function. - */ - -// These font metrics are extracted from TeX by using -// \font\a=cmmi10 -// \showthe\fontdimenX\a -// where X is the corresponding variable number. These correspond to the font -// parameters of the symbol fonts. In TeX, there are actually three sets of -// dimensions, one for each of textstyle, scriptstyle, and scriptscriptstyle, -// but we only use the textstyle ones, and scale certain dimensions accordingly. -// See the TeXbook, page 441. -var sigma1 = 0.025; -var sigma2 = 0; -var sigma3 = 0; -var sigma4 = 0; -var sigma5 = 0.431; -var sigma6 = 1; -var sigma7 = 0; -var sigma8 = 0.677; -var sigma9 = 0.394; -var sigma10 = 0.444; -var sigma11 = 0.686; -var sigma12 = 0.345; -var sigma13 = 0.413; -var sigma14 = 0.363; -var sigma15 = 0.289; -var sigma16 = 0.150; -var sigma17 = 0.247; -var sigma18 = 0.386; -var sigma19 = 0.050; -var sigma20 = 2.390; -var sigma21 = 1.01; -var sigma21Script = 0.81; -var sigma21ScriptScript = 0.71; -var sigma22 = 0.250; - -// These font metrics are extracted from TeX by using -// \font\a=cmex10 -// \showthe\fontdimenX\a -// where X is the corresponding variable number. These correspond to the font -// parameters of the extension fonts (family 3). See the TeXbook, page 441. -var xi1 = 0; -var xi2 = 0; -var xi3 = 0; -var xi4 = 0; -var xi5 = 0.431; -var xi6 = 1; -var xi7 = 0; -var xi8 = 0.04; -var xi9 = 0.111; -var xi10 = 0.166; -var xi11 = 0.2; -var xi12 = 0.6; -var xi13 = 0.1; - -// This value determines how large a pt is, for metrics which are defined in -// terms of pts. -// This value is also used in katex.less; if you change it make sure the values -// match. -var ptPerEm = 10.0; - -// The space between adjacent `|` columns in an array definition. From -// `\showthe\doublerulesep` in LaTeX. -var doubleRuleSep = 2.0 / ptPerEm; - -/** - * This is just a mapping from common names to real metrics - */ -var metrics = { - xHeight: sigma5, - quad: sigma6, - num1: sigma8, - num2: sigma9, - num3: sigma10, - denom1: sigma11, - denom2: sigma12, - sup1: sigma13, - sup2: sigma14, - sup3: sigma15, - sub1: sigma16, - sub2: sigma17, - supDrop: sigma18, - subDrop: sigma19, - axisHeight: sigma22, - defaultRuleThickness: xi8, - bigOpSpacing1: xi9, - bigOpSpacing2: xi10, - bigOpSpacing3: xi11, - bigOpSpacing4: xi12, - bigOpSpacing5: xi13, - ptPerEm: ptPerEm, - emPerEx: sigma5 / sigma6, - doubleRuleSep: doubleRuleSep, - - // TODO(alpert): Missing parallel structure here. We should probably add - // style-specific metrics for all of these. - delim1: sigma20, - getDelim2: function(style) { - if (style.size === Style.TEXT.size) { - return sigma21; - } else if (style.size === Style.SCRIPT.size) { - return sigma21Script; - } else if (style.size === Style.SCRIPTSCRIPT.size) { - return sigma21ScriptScript; - } - throw new Error("Unexpected style size: " + style.size); - }, -}; - -// This map contains a mapping from font name and character code to character -// metrics, including height, depth, italic correction, and skew (kern from the -// character to the corresponding \skewchar) -// This map is generated via `make metrics`. It should not be changed manually. -var metricMap = require("./fontMetricsData"); - -// These are very rough approximations. We default to Times New Roman which -// should have Latin-1 and Cyrillic characters, but may not depending on the -// operating system. The metrics do not account for extra height from the -// accents. In the case of Cyrillic characters which have both ascenders and -// descenders we prefer approximations with ascenders, primarily to prevent -// the fraction bar or root line from intersecting the glyph. -// TODO(kevinb) allow union of multiple glyph metrics for better accuracy. -var extraCharacterMap = { - // Latin-1 - 'À': 'A', - 'Ã': 'A', - 'Â': 'A', - 'Ã': 'A', - 'Ä': 'A', - 'Ã…': 'A', - 'Æ': 'A', - 'Ç': 'C', - 'È': 'E', - 'É': 'E', - 'Ê': 'E', - 'Ë': 'E', - 'ÃŒ': 'I', - 'Ã': 'I', - 'ÃŽ': 'I', - 'Ã': 'I', - 'Ã': 'D', - 'Ñ': 'N', - 'Ã’': 'O', - 'Ó': 'O', - 'Ô': 'O', - 'Õ': 'O', - 'Ö': 'O', - 'Ø': 'O', - 'Ù': 'U', - 'Ú': 'U', - 'Û': 'U', - 'Ãœ': 'U', - 'Ã': 'Y', - 'Þ': 'o', - 'ß': 'B', - 'à ': 'a', - 'á': 'a', - 'â': 'a', - 'ã': 'a', - 'ä': 'a', - 'Ã¥': 'a', - 'æ': 'a', - 'ç': 'c', - 'è': 'e', - 'é': 'e', - 'ê': 'e', - 'ë': 'e', - 'ì': 'i', - 'Ã': 'i', - 'î': 'i', - 'ï': 'i', - 'ð': 'd', - 'ñ': 'n', - 'ò': 'o', - 'ó': 'o', - 'ô': 'o', - 'õ': 'o', - 'ö': 'o', - 'ø': 'o', - 'ù': 'u', - 'ú': 'u', - 'û': 'u', - 'ü': 'u', - 'ý': 'y', - 'þ': 'o', - 'ÿ': 'y', - - // Cyrillic - 'Ð': 'A', - 'Б': 'B', - 'Ð’': 'B', - 'Г': 'F', - 'Д': 'A', - 'Е': 'E', - 'Ж': 'K', - 'З': '3', - 'И': 'N', - 'Й': 'N', - 'К': 'K', - 'Л': 'N', - 'Ðœ': 'M', - 'Ð': 'H', - 'О': 'O', - 'П': 'N', - 'Ð ': 'P', - 'С': 'C', - 'Т': 'T', - 'У': 'y', - 'Ф': 'O', - 'Ð¥': 'X', - 'Ц': 'U', - 'Ч': 'h', - 'Ш': 'W', - 'Щ': 'W', - 'Ъ': 'B', - 'Ы': 'X', - 'Ь': 'B', - 'Ð': '3', - 'Ю': 'X', - 'Я': 'R', - 'а': 'a', - 'б': 'b', - 'в': 'a', - 'г': 'r', - 'д': 'y', - 'е': 'e', - 'ж': 'm', - 'з': 'e', - 'и': 'n', - 'й': 'n', - 'к': 'n', - 'л': 'n', - 'м': 'm', - 'н': 'n', - 'о': 'o', - 'п': 'n', - 'Ñ€': 'p', - 'Ñ': 'c', - 'Ñ‚': 'o', - 'у': 'y', - 'Ñ„': 'b', - 'Ñ…': 'x', - 'ц': 'n', - 'ч': 'n', - 'ш': 'w', - 'щ': 'w', - 'ÑŠ': 'a', - 'Ñ‹': 'm', - 'ÑŒ': 'a', - 'Ñ': 'e', - 'ÑŽ': 'm', - 'Ñ': 'r', -}; - -/** - * This function is a convenience function for looking up information in the - * metricMap table. It takes a character as a string, and a style. - * - * Note: the `width` property may be undefined if fontMetricsData.js wasn't - * built using `Make extended_metrics`. - */ -var getCharacterMetrics = function(character, style) { - var ch = character.charCodeAt(0); - if (character[0] in extraCharacterMap) { - ch = extraCharacterMap[character[0]].charCodeAt(0); - } else if (cjkRegex.test(character[0])) { - ch = 'M'.charCodeAt(0); - } - var metrics = metricMap[style][ch]; - if (metrics) { - return { - depth: metrics[0], - height: metrics[1], - italic: metrics[2], - skew: metrics[3], - width: metrics[4], - }; - } -}; - -module.exports = { - metrics: metrics, - getCharacterMetrics: getCharacterMetrics, -}; - -},{"./Style":9,"./fontMetricsData":18,"./unicodeRegexes":24}],18:[function(require,module,exports){ -module.exports = { - "AMS-Regular": { - "65": [0, 0.68889, 0, 0], - "66": [0, 0.68889, 0, 0], - "67": [0, 0.68889, 0, 0], - "68": [0, 0.68889, 0, 0], - "69": [0, 0.68889, 0, 0], - "70": [0, 0.68889, 0, 0], - "71": [0, 0.68889, 0, 0], - "72": [0, 0.68889, 0, 0], - "73": [0, 0.68889, 0, 0], - "74": [0.16667, 0.68889, 0, 0], - "75": [0, 0.68889, 0, 0], - "76": [0, 0.68889, 0, 0], - "77": [0, 0.68889, 0, 0], - "78": [0, 0.68889, 0, 0], - "79": [0.16667, 0.68889, 0, 0], - "80": [0, 0.68889, 0, 0], - "81": [0.16667, 0.68889, 0, 0], - "82": [0, 0.68889, 0, 0], - "83": [0, 0.68889, 0, 0], - "84": [0, 0.68889, 0, 0], - "85": [0, 0.68889, 0, 0], - "86": [0, 0.68889, 0, 0], - "87": [0, 0.68889, 0, 0], - "88": [0, 0.68889, 0, 0], - "89": [0, 0.68889, 0, 0], - "90": [0, 0.68889, 0, 0], - "107": [0, 0.68889, 0, 0], - "165": [0, 0.675, 0.025, 0], - "174": [0.15559, 0.69224, 0, 0], - "240": [0, 0.68889, 0, 0], - "295": [0, 0.68889, 0, 0], - "710": [0, 0.825, 0, 0], - "732": [0, 0.9, 0, 0], - "770": [0, 0.825, 0, 0], - "771": [0, 0.9, 0, 0], - "989": [0.08167, 0.58167, 0, 0], - "1008": [0, 0.43056, 0.04028, 0], - "8245": [0, 0.54986, 0, 0], - "8463": [0, 0.68889, 0, 0], - "8487": [0, 0.68889, 0, 0], - "8498": [0, 0.68889, 0, 0], - "8502": [0, 0.68889, 0, 0], - "8503": [0, 0.68889, 0, 0], - "8504": [0, 0.68889, 0, 0], - "8513": [0, 0.68889, 0, 0], - "8592": [-0.03598, 0.46402, 0, 0], - "8594": [-0.03598, 0.46402, 0, 0], - "8602": [-0.13313, 0.36687, 0, 0], - "8603": [-0.13313, 0.36687, 0, 0], - "8606": [0.01354, 0.52239, 0, 0], - "8608": [0.01354, 0.52239, 0, 0], - "8610": [0.01354, 0.52239, 0, 0], - "8611": [0.01354, 0.52239, 0, 0], - "8619": [0, 0.54986, 0, 0], - "8620": [0, 0.54986, 0, 0], - "8621": [-0.13313, 0.37788, 0, 0], - "8622": [-0.13313, 0.36687, 0, 0], - "8624": [0, 0.69224, 0, 0], - "8625": [0, 0.69224, 0, 0], - "8630": [0, 0.43056, 0, 0], - "8631": [0, 0.43056, 0, 0], - "8634": [0.08198, 0.58198, 0, 0], - "8635": [0.08198, 0.58198, 0, 0], - "8638": [0.19444, 0.69224, 0, 0], - "8639": [0.19444, 0.69224, 0, 0], - "8642": [0.19444, 0.69224, 0, 0], - "8643": [0.19444, 0.69224, 0, 0], - "8644": [0.1808, 0.675, 0, 0], - "8646": [0.1808, 0.675, 0, 0], - "8647": [0.1808, 0.675, 0, 0], - "8648": [0.19444, 0.69224, 0, 0], - "8649": [0.1808, 0.675, 0, 0], - "8650": [0.19444, 0.69224, 0, 0], - "8651": [0.01354, 0.52239, 0, 0], - "8652": [0.01354, 0.52239, 0, 0], - "8653": [-0.13313, 0.36687, 0, 0], - "8654": [-0.13313, 0.36687, 0, 0], - "8655": [-0.13313, 0.36687, 0, 0], - "8666": [0.13667, 0.63667, 0, 0], - "8667": [0.13667, 0.63667, 0, 0], - "8669": [-0.13313, 0.37788, 0, 0], - "8672": [-0.064, 0.437, 0, 0], - "8674": [-0.064, 0.437, 0, 0], - "8705": [0, 0.825, 0, 0], - "8708": [0, 0.68889, 0, 0], - "8709": [0.08167, 0.58167, 0, 0], - "8717": [0, 0.43056, 0, 0], - "8722": [-0.03598, 0.46402, 0, 0], - "8724": [0.08198, 0.69224, 0, 0], - "8726": [0.08167, 0.58167, 0, 0], - "8733": [0, 0.69224, 0, 0], - "8736": [0, 0.69224, 0, 0], - "8737": [0, 0.69224, 0, 0], - "8738": [0.03517, 0.52239, 0, 0], - "8739": [0.08167, 0.58167, 0, 0], - "8740": [0.25142, 0.74111, 0, 0], - "8741": [0.08167, 0.58167, 0, 0], - "8742": [0.25142, 0.74111, 0, 0], - "8756": [0, 0.69224, 0, 0], - "8757": [0, 0.69224, 0, 0], - "8764": [-0.13313, 0.36687, 0, 0], - "8765": [-0.13313, 0.37788, 0, 0], - "8769": [-0.13313, 0.36687, 0, 0], - "8770": [-0.03625, 0.46375, 0, 0], - "8774": [0.30274, 0.79383, 0, 0], - "8776": [-0.01688, 0.48312, 0, 0], - "8778": [0.08167, 0.58167, 0, 0], - "8782": [0.06062, 0.54986, 0, 0], - "8783": [0.06062, 0.54986, 0, 0], - "8785": [0.08198, 0.58198, 0, 0], - "8786": [0.08198, 0.58198, 0, 0], - "8787": [0.08198, 0.58198, 0, 0], - "8790": [0, 0.69224, 0, 0], - "8791": [0.22958, 0.72958, 0, 0], - "8796": [0.08198, 0.91667, 0, 0], - "8806": [0.25583, 0.75583, 0, 0], - "8807": [0.25583, 0.75583, 0, 0], - "8808": [0.25142, 0.75726, 0, 0], - "8809": [0.25142, 0.75726, 0, 0], - "8812": [0.25583, 0.75583, 0, 0], - "8814": [0.20576, 0.70576, 0, 0], - "8815": [0.20576, 0.70576, 0, 0], - "8816": [0.30274, 0.79383, 0, 0], - "8817": [0.30274, 0.79383, 0, 0], - "8818": [0.22958, 0.72958, 0, 0], - "8819": [0.22958, 0.72958, 0, 0], - "8822": [0.1808, 0.675, 0, 0], - "8823": [0.1808, 0.675, 0, 0], - "8828": [0.13667, 0.63667, 0, 0], - "8829": [0.13667, 0.63667, 0, 0], - "8830": [0.22958, 0.72958, 0, 0], - "8831": [0.22958, 0.72958, 0, 0], - "8832": [0.20576, 0.70576, 0, 0], - "8833": [0.20576, 0.70576, 0, 0], - "8840": [0.30274, 0.79383, 0, 0], - "8841": [0.30274, 0.79383, 0, 0], - "8842": [0.13597, 0.63597, 0, 0], - "8843": [0.13597, 0.63597, 0, 0], - "8847": [0.03517, 0.54986, 0, 0], - "8848": [0.03517, 0.54986, 0, 0], - "8858": [0.08198, 0.58198, 0, 0], - "8859": [0.08198, 0.58198, 0, 0], - "8861": [0.08198, 0.58198, 0, 0], - "8862": [0, 0.675, 0, 0], - "8863": [0, 0.675, 0, 0], - "8864": [0, 0.675, 0, 0], - "8865": [0, 0.675, 0, 0], - "8872": [0, 0.69224, 0, 0], - "8873": [0, 0.69224, 0, 0], - "8874": [0, 0.69224, 0, 0], - "8876": [0, 0.68889, 0, 0], - "8877": [0, 0.68889, 0, 0], - "8878": [0, 0.68889, 0, 0], - "8879": [0, 0.68889, 0, 0], - "8882": [0.03517, 0.54986, 0, 0], - "8883": [0.03517, 0.54986, 0, 0], - "8884": [0.13667, 0.63667, 0, 0], - "8885": [0.13667, 0.63667, 0, 0], - "8888": [0, 0.54986, 0, 0], - "8890": [0.19444, 0.43056, 0, 0], - "8891": [0.19444, 0.69224, 0, 0], - "8892": [0.19444, 0.69224, 0, 0], - "8901": [0, 0.54986, 0, 0], - "8903": [0.08167, 0.58167, 0, 0], - "8905": [0.08167, 0.58167, 0, 0], - "8906": [0.08167, 0.58167, 0, 0], - "8907": [0, 0.69224, 0, 0], - "8908": [0, 0.69224, 0, 0], - "8909": [-0.03598, 0.46402, 0, 0], - "8910": [0, 0.54986, 0, 0], - "8911": [0, 0.54986, 0, 0], - "8912": [0.03517, 0.54986, 0, 0], - "8913": [0.03517, 0.54986, 0, 0], - "8914": [0, 0.54986, 0, 0], - "8915": [0, 0.54986, 0, 0], - "8916": [0, 0.69224, 0, 0], - "8918": [0.0391, 0.5391, 0, 0], - "8919": [0.0391, 0.5391, 0, 0], - "8920": [0.03517, 0.54986, 0, 0], - "8921": [0.03517, 0.54986, 0, 0], - "8922": [0.38569, 0.88569, 0, 0], - "8923": [0.38569, 0.88569, 0, 0], - "8926": [0.13667, 0.63667, 0, 0], - "8927": [0.13667, 0.63667, 0, 0], - "8928": [0.30274, 0.79383, 0, 0], - "8929": [0.30274, 0.79383, 0, 0], - "8934": [0.23222, 0.74111, 0, 0], - "8935": [0.23222, 0.74111, 0, 0], - "8936": [0.23222, 0.74111, 0, 0], - "8937": [0.23222, 0.74111, 0, 0], - "8938": [0.20576, 0.70576, 0, 0], - "8939": [0.20576, 0.70576, 0, 0], - "8940": [0.30274, 0.79383, 0, 0], - "8941": [0.30274, 0.79383, 0, 0], - "8994": [0.19444, 0.69224, 0, 0], - "8995": [0.19444, 0.69224, 0, 0], - "9416": [0.15559, 0.69224, 0, 0], - "9484": [0, 0.69224, 0, 0], - "9488": [0, 0.69224, 0, 0], - "9492": [0, 0.37788, 0, 0], - "9496": [0, 0.37788, 0, 0], - "9585": [0.19444, 0.68889, 0, 0], - "9586": [0.19444, 0.74111, 0, 0], - "9632": [0, 0.675, 0, 0], - "9633": [0, 0.675, 0, 0], - "9650": [0, 0.54986, 0, 0], - "9651": [0, 0.54986, 0, 0], - "9654": [0.03517, 0.54986, 0, 0], - "9660": [0, 0.54986, 0, 0], - "9661": [0, 0.54986, 0, 0], - "9664": [0.03517, 0.54986, 0, 0], - "9674": [0.11111, 0.69224, 0, 0], - "9733": [0.19444, 0.69224, 0, 0], - "10003": [0, 0.69224, 0, 0], - "10016": [0, 0.69224, 0, 0], - "10731": [0.11111, 0.69224, 0, 0], - "10846": [0.19444, 0.75583, 0, 0], - "10877": [0.13667, 0.63667, 0, 0], - "10878": [0.13667, 0.63667, 0, 0], - "10885": [0.25583, 0.75583, 0, 0], - "10886": [0.25583, 0.75583, 0, 0], - "10887": [0.13597, 0.63597, 0, 0], - "10888": [0.13597, 0.63597, 0, 0], - "10889": [0.26167, 0.75726, 0, 0], - "10890": [0.26167, 0.75726, 0, 0], - "10891": [0.48256, 0.98256, 0, 0], - "10892": [0.48256, 0.98256, 0, 0], - "10901": [0.13667, 0.63667, 0, 0], - "10902": [0.13667, 0.63667, 0, 0], - "10933": [0.25142, 0.75726, 0, 0], - "10934": [0.25142, 0.75726, 0, 0], - "10935": [0.26167, 0.75726, 0, 0], - "10936": [0.26167, 0.75726, 0, 0], - "10937": [0.26167, 0.75726, 0, 0], - "10938": [0.26167, 0.75726, 0, 0], - "10949": [0.25583, 0.75583, 0, 0], - "10950": [0.25583, 0.75583, 0, 0], - "10955": [0.28481, 0.79383, 0, 0], - "10956": [0.28481, 0.79383, 0, 0], - "57350": [0.08167, 0.58167, 0, 0], - "57351": [0.08167, 0.58167, 0, 0], - "57352": [0.08167, 0.58167, 0, 0], - "57353": [0, 0.43056, 0.04028, 0], - "57356": [0.25142, 0.75726, 0, 0], - "57357": [0.25142, 0.75726, 0, 0], - "57358": [0.41951, 0.91951, 0, 0], - "57359": [0.30274, 0.79383, 0, 0], - "57360": [0.30274, 0.79383, 0, 0], - "57361": [0.41951, 0.91951, 0, 0], - "57366": [0.25142, 0.75726, 0, 0], - "57367": [0.25142, 0.75726, 0, 0], - "57368": [0.25142, 0.75726, 0, 0], - "57369": [0.25142, 0.75726, 0, 0], - "57370": [0.13597, 0.63597, 0, 0], - "57371": [0.13597, 0.63597, 0, 0], - }, - "Caligraphic-Regular": { - "48": [0, 0.43056, 0, 0], - "49": [0, 0.43056, 0, 0], - "50": [0, 0.43056, 0, 0], - "51": [0.19444, 0.43056, 0, 0], - "52": [0.19444, 0.43056, 0, 0], - "53": [0.19444, 0.43056, 0, 0], - "54": [0, 0.64444, 0, 0], - "55": [0.19444, 0.43056, 0, 0], - "56": [0, 0.64444, 0, 0], - "57": [0.19444, 0.43056, 0, 0], - "65": [0, 0.68333, 0, 0.19445], - "66": [0, 0.68333, 0.03041, 0.13889], - "67": [0, 0.68333, 0.05834, 0.13889], - "68": [0, 0.68333, 0.02778, 0.08334], - "69": [0, 0.68333, 0.08944, 0.11111], - "70": [0, 0.68333, 0.09931, 0.11111], - "71": [0.09722, 0.68333, 0.0593, 0.11111], - "72": [0, 0.68333, 0.00965, 0.11111], - "73": [0, 0.68333, 0.07382, 0], - "74": [0.09722, 0.68333, 0.18472, 0.16667], - "75": [0, 0.68333, 0.01445, 0.05556], - "76": [0, 0.68333, 0, 0.13889], - "77": [0, 0.68333, 0, 0.13889], - "78": [0, 0.68333, 0.14736, 0.08334], - "79": [0, 0.68333, 0.02778, 0.11111], - "80": [0, 0.68333, 0.08222, 0.08334], - "81": [0.09722, 0.68333, 0, 0.11111], - "82": [0, 0.68333, 0, 0.08334], - "83": [0, 0.68333, 0.075, 0.13889], - "84": [0, 0.68333, 0.25417, 0], - "85": [0, 0.68333, 0.09931, 0.08334], - "86": [0, 0.68333, 0.08222, 0], - "87": [0, 0.68333, 0.08222, 0.08334], - "88": [0, 0.68333, 0.14643, 0.13889], - "89": [0.09722, 0.68333, 0.08222, 0.08334], - "90": [0, 0.68333, 0.07944, 0.13889], - }, - "Fraktur-Regular": { - "33": [0, 0.69141, 0, 0], - "34": [0, 0.69141, 0, 0], - "38": [0, 0.69141, 0, 0], - "39": [0, 0.69141, 0, 0], - "40": [0.24982, 0.74947, 0, 0], - "41": [0.24982, 0.74947, 0, 0], - "42": [0, 0.62119, 0, 0], - "43": [0.08319, 0.58283, 0, 0], - "44": [0, 0.10803, 0, 0], - "45": [0.08319, 0.58283, 0, 0], - "46": [0, 0.10803, 0, 0], - "47": [0.24982, 0.74947, 0, 0], - "48": [0, 0.47534, 0, 0], - "49": [0, 0.47534, 0, 0], - "50": [0, 0.47534, 0, 0], - "51": [0.18906, 0.47534, 0, 0], - "52": [0.18906, 0.47534, 0, 0], - "53": [0.18906, 0.47534, 0, 0], - "54": [0, 0.69141, 0, 0], - "55": [0.18906, 0.47534, 0, 0], - "56": [0, 0.69141, 0, 0], - "57": [0.18906, 0.47534, 0, 0], - "58": [0, 0.47534, 0, 0], - "59": [0.12604, 0.47534, 0, 0], - "61": [-0.13099, 0.36866, 0, 0], - "63": [0, 0.69141, 0, 0], - "65": [0, 0.69141, 0, 0], - "66": [0, 0.69141, 0, 0], - "67": [0, 0.69141, 0, 0], - "68": [0, 0.69141, 0, 0], - "69": [0, 0.69141, 0, 0], - "70": [0.12604, 0.69141, 0, 0], - "71": [0, 0.69141, 0, 0], - "72": [0.06302, 0.69141, 0, 0], - "73": [0, 0.69141, 0, 0], - "74": [0.12604, 0.69141, 0, 0], - "75": [0, 0.69141, 0, 0], - "76": [0, 0.69141, 0, 0], - "77": [0, 0.69141, 0, 0], - "78": [0, 0.69141, 0, 0], - "79": [0, 0.69141, 0, 0], - "80": [0.18906, 0.69141, 0, 0], - "81": [0.03781, 0.69141, 0, 0], - "82": [0, 0.69141, 0, 0], - "83": [0, 0.69141, 0, 0], - "84": [0, 0.69141, 0, 0], - "85": [0, 0.69141, 0, 0], - "86": [0, 0.69141, 0, 0], - "87": [0, 0.69141, 0, 0], - "88": [0, 0.69141, 0, 0], - "89": [0.18906, 0.69141, 0, 0], - "90": [0.12604, 0.69141, 0, 0], - "91": [0.24982, 0.74947, 0, 0], - "93": [0.24982, 0.74947, 0, 0], - "94": [0, 0.69141, 0, 0], - "97": [0, 0.47534, 0, 0], - "98": [0, 0.69141, 0, 0], - "99": [0, 0.47534, 0, 0], - "100": [0, 0.62119, 0, 0], - "101": [0, 0.47534, 0, 0], - "102": [0.18906, 0.69141, 0, 0], - "103": [0.18906, 0.47534, 0, 0], - "104": [0.18906, 0.69141, 0, 0], - "105": [0, 0.69141, 0, 0], - "106": [0, 0.69141, 0, 0], - "107": [0, 0.69141, 0, 0], - "108": [0, 0.69141, 0, 0], - "109": [0, 0.47534, 0, 0], - "110": [0, 0.47534, 0, 0], - "111": [0, 0.47534, 0, 0], - "112": [0.18906, 0.52396, 0, 0], - "113": [0.18906, 0.47534, 0, 0], - "114": [0, 0.47534, 0, 0], - "115": [0, 0.47534, 0, 0], - "116": [0, 0.62119, 0, 0], - "117": [0, 0.47534, 0, 0], - "118": [0, 0.52396, 0, 0], - "119": [0, 0.52396, 0, 0], - "120": [0.18906, 0.47534, 0, 0], - "121": [0.18906, 0.47534, 0, 0], - "122": [0.18906, 0.47534, 0, 0], - "8216": [0, 0.69141, 0, 0], - "8217": [0, 0.69141, 0, 0], - "58112": [0, 0.62119, 0, 0], - "58113": [0, 0.62119, 0, 0], - "58114": [0.18906, 0.69141, 0, 0], - "58115": [0.18906, 0.69141, 0, 0], - "58116": [0.18906, 0.47534, 0, 0], - "58117": [0, 0.69141, 0, 0], - "58118": [0, 0.62119, 0, 0], - "58119": [0, 0.47534, 0, 0], - }, - "Main-Bold": { - "33": [0, 0.69444, 0, 0], - "34": [0, 0.69444, 0, 0], - "35": [0.19444, 0.69444, 0, 0], - "36": [0.05556, 0.75, 0, 0], - "37": [0.05556, 0.75, 0, 0], - "38": [0, 0.69444, 0, 0], - "39": [0, 0.69444, 0, 0], - "40": [0.25, 0.75, 0, 0], - "41": [0.25, 0.75, 0, 0], - "42": [0, 0.75, 0, 0], - "43": [0.13333, 0.63333, 0, 0], - "44": [0.19444, 0.15556, 0, 0], - "45": [0, 0.44444, 0, 0], - "46": [0, 0.15556, 0, 0], - "47": [0.25, 0.75, 0, 0], - "48": [0, 0.64444, 0, 0], - "49": [0, 0.64444, 0, 0], - "50": [0, 0.64444, 0, 0], - "51": [0, 0.64444, 0, 0], - "52": [0, 0.64444, 0, 0], - "53": [0, 0.64444, 0, 0], - "54": [0, 0.64444, 0, 0], - "55": [0, 0.64444, 0, 0], - "56": [0, 0.64444, 0, 0], - "57": [0, 0.64444, 0, 0], - "58": [0, 0.44444, 0, 0], - "59": [0.19444, 0.44444, 0, 0], - "60": [0.08556, 0.58556, 0, 0], - "61": [-0.10889, 0.39111, 0, 0], - "62": [0.08556, 0.58556, 0, 0], - "63": [0, 0.69444, 0, 0], - "64": [0, 0.69444, 0, 0], - "65": [0, 0.68611, 0, 0], - "66": [0, 0.68611, 0, 0], - "67": [0, 0.68611, 0, 0], - "68": [0, 0.68611, 0, 0], - "69": [0, 0.68611, 0, 0], - "70": [0, 0.68611, 0, 0], - "71": [0, 0.68611, 0, 0], - "72": [0, 0.68611, 0, 0], - "73": [0, 0.68611, 0, 0], - "74": [0, 0.68611, 0, 0], - "75": [0, 0.68611, 0, 0], - "76": [0, 0.68611, 0, 0], - "77": [0, 0.68611, 0, 0], - "78": [0, 0.68611, 0, 0], - "79": [0, 0.68611, 0, 0], - "80": [0, 0.68611, 0, 0], - "81": [0.19444, 0.68611, 0, 0], - "82": [0, 0.68611, 0, 0], - "83": [0, 0.68611, 0, 0], - "84": [0, 0.68611, 0, 0], - "85": [0, 0.68611, 0, 0], - "86": [0, 0.68611, 0.01597, 0], - "87": [0, 0.68611, 0.01597, 0], - "88": [0, 0.68611, 0, 0], - "89": [0, 0.68611, 0.02875, 0], - "90": [0, 0.68611, 0, 0], - "91": [0.25, 0.75, 0, 0], - "92": [0.25, 0.75, 0, 0], - "93": [0.25, 0.75, 0, 0], - "94": [0, 0.69444, 0, 0], - "95": [0.31, 0.13444, 0.03194, 0], - "96": [0, 0.69444, 0, 0], - "97": [0, 0.44444, 0, 0], - "98": [0, 0.69444, 0, 0], - "99": [0, 0.44444, 0, 0], - "100": [0, 0.69444, 0, 0], - "101": [0, 0.44444, 0, 0], - "102": [0, 0.69444, 0.10903, 0], - "103": [0.19444, 0.44444, 0.01597, 0], - "104": [0, 0.69444, 0, 0], - "105": [0, 0.69444, 0, 0], - "106": [0.19444, 0.69444, 0, 0], - "107": [0, 0.69444, 0, 0], - "108": [0, 0.69444, 0, 0], - "109": [0, 0.44444, 0, 0], - "110": [0, 0.44444, 0, 0], - "111": [0, 0.44444, 0, 0], - "112": [0.19444, 0.44444, 0, 0], - "113": [0.19444, 0.44444, 0, 0], - "114": [0, 0.44444, 0, 0], - "115": [0, 0.44444, 0, 0], - "116": [0, 0.63492, 0, 0], - "117": [0, 0.44444, 0, 0], - "118": [0, 0.44444, 0.01597, 0], - "119": [0, 0.44444, 0.01597, 0], - "120": [0, 0.44444, 0, 0], - "121": [0.19444, 0.44444, 0.01597, 0], - "122": [0, 0.44444, 0, 0], - "123": [0.25, 0.75, 0, 0], - "124": [0.25, 0.75, 0, 0], - "125": [0.25, 0.75, 0, 0], - "126": [0.35, 0.34444, 0, 0], - "168": [0, 0.69444, 0, 0], - "172": [0, 0.44444, 0, 0], - "175": [0, 0.59611, 0, 0], - "176": [0, 0.69444, 0, 0], - "177": [0.13333, 0.63333, 0, 0], - "180": [0, 0.69444, 0, 0], - "215": [0.13333, 0.63333, 0, 0], - "247": [0.13333, 0.63333, 0, 0], - "305": [0, 0.44444, 0, 0], - "567": [0.19444, 0.44444, 0, 0], - "710": [0, 0.69444, 0, 0], - "711": [0, 0.63194, 0, 0], - "713": [0, 0.59611, 0, 0], - "714": [0, 0.69444, 0, 0], - "715": [0, 0.69444, 0, 0], - "728": [0, 0.69444, 0, 0], - "729": [0, 0.69444, 0, 0], - "730": [0, 0.69444, 0, 0], - "732": [0, 0.69444, 0, 0], - "768": [0, 0.69444, 0, 0], - "769": [0, 0.69444, 0, 0], - "770": [0, 0.69444, 0, 0], - "771": [0, 0.69444, 0, 0], - "772": [0, 0.59611, 0, 0], - "774": [0, 0.69444, 0, 0], - "775": [0, 0.69444, 0, 0], - "776": [0, 0.69444, 0, 0], - "778": [0, 0.69444, 0, 0], - "779": [0, 0.69444, 0, 0], - "780": [0, 0.63194, 0, 0], - "824": [0.19444, 0.69444, 0, 0], - "915": [0, 0.68611, 0, 0], - "916": [0, 0.68611, 0, 0], - "920": [0, 0.68611, 0, 0], - "923": [0, 0.68611, 0, 0], - "926": [0, 0.68611, 0, 0], - "928": [0, 0.68611, 0, 0], - "931": [0, 0.68611, 0, 0], - "933": [0, 0.68611, 0, 0], - "934": [0, 0.68611, 0, 0], - "936": [0, 0.68611, 0, 0], - "937": [0, 0.68611, 0, 0], - "8211": [0, 0.44444, 0.03194, 0], - "8212": [0, 0.44444, 0.03194, 0], - "8216": [0, 0.69444, 0, 0], - "8217": [0, 0.69444, 0, 0], - "8220": [0, 0.69444, 0, 0], - "8221": [0, 0.69444, 0, 0], - "8224": [0.19444, 0.69444, 0, 0], - "8225": [0.19444, 0.69444, 0, 0], - "8242": [0, 0.55556, 0, 0], - "8407": [0, 0.72444, 0.15486, 0], - "8463": [0, 0.69444, 0, 0], - "8465": [0, 0.69444, 0, 0], - "8467": [0, 0.69444, 0, 0], - "8472": [0.19444, 0.44444, 0, 0], - "8476": [0, 0.69444, 0, 0], - "8501": [0, 0.69444, 0, 0], - "8592": [-0.10889, 0.39111, 0, 0], - "8593": [0.19444, 0.69444, 0, 0], - "8594": [-0.10889, 0.39111, 0, 0], - "8595": [0.19444, 0.69444, 0, 0], - "8596": [-0.10889, 0.39111, 0, 0], - "8597": [0.25, 0.75, 0, 0], - "8598": [0.19444, 0.69444, 0, 0], - "8599": [0.19444, 0.69444, 0, 0], - "8600": [0.19444, 0.69444, 0, 0], - "8601": [0.19444, 0.69444, 0, 0], - "8636": [-0.10889, 0.39111, 0, 0], - "8637": [-0.10889, 0.39111, 0, 0], - "8640": [-0.10889, 0.39111, 0, 0], - "8641": [-0.10889, 0.39111, 0, 0], - "8656": [-0.10889, 0.39111, 0, 0], - "8657": [0.19444, 0.69444, 0, 0], - "8658": [-0.10889, 0.39111, 0, 0], - "8659": [0.19444, 0.69444, 0, 0], - "8660": [-0.10889, 0.39111, 0, 0], - "8661": [0.25, 0.75, 0, 0], - "8704": [0, 0.69444, 0, 0], - "8706": [0, 0.69444, 0.06389, 0], - "8707": [0, 0.69444, 0, 0], - "8709": [0.05556, 0.75, 0, 0], - "8711": [0, 0.68611, 0, 0], - "8712": [0.08556, 0.58556, 0, 0], - "8715": [0.08556, 0.58556, 0, 0], - "8722": [0.13333, 0.63333, 0, 0], - "8723": [0.13333, 0.63333, 0, 0], - "8725": [0.25, 0.75, 0, 0], - "8726": [0.25, 0.75, 0, 0], - "8727": [-0.02778, 0.47222, 0, 0], - "8728": [-0.02639, 0.47361, 0, 0], - "8729": [-0.02639, 0.47361, 0, 0], - "8730": [0.18, 0.82, 0, 0], - "8733": [0, 0.44444, 0, 0], - "8734": [0, 0.44444, 0, 0], - "8736": [0, 0.69224, 0, 0], - "8739": [0.25, 0.75, 0, 0], - "8741": [0.25, 0.75, 0, 0], - "8743": [0, 0.55556, 0, 0], - "8744": [0, 0.55556, 0, 0], - "8745": [0, 0.55556, 0, 0], - "8746": [0, 0.55556, 0, 0], - "8747": [0.19444, 0.69444, 0.12778, 0], - "8764": [-0.10889, 0.39111, 0, 0], - "8768": [0.19444, 0.69444, 0, 0], - "8771": [0.00222, 0.50222, 0, 0], - "8776": [0.02444, 0.52444, 0, 0], - "8781": [0.00222, 0.50222, 0, 0], - "8801": [0.00222, 0.50222, 0, 0], - "8804": [0.19667, 0.69667, 0, 0], - "8805": [0.19667, 0.69667, 0, 0], - "8810": [0.08556, 0.58556, 0, 0], - "8811": [0.08556, 0.58556, 0, 0], - "8826": [0.08556, 0.58556, 0, 0], - "8827": [0.08556, 0.58556, 0, 0], - "8834": [0.08556, 0.58556, 0, 0], - "8835": [0.08556, 0.58556, 0, 0], - "8838": [0.19667, 0.69667, 0, 0], - "8839": [0.19667, 0.69667, 0, 0], - "8846": [0, 0.55556, 0, 0], - "8849": [0.19667, 0.69667, 0, 0], - "8850": [0.19667, 0.69667, 0, 0], - "8851": [0, 0.55556, 0, 0], - "8852": [0, 0.55556, 0, 0], - "8853": [0.13333, 0.63333, 0, 0], - "8854": [0.13333, 0.63333, 0, 0], - "8855": [0.13333, 0.63333, 0, 0], - "8856": [0.13333, 0.63333, 0, 0], - "8857": [0.13333, 0.63333, 0, 0], - "8866": [0, 0.69444, 0, 0], - "8867": [0, 0.69444, 0, 0], - "8868": [0, 0.69444, 0, 0], - "8869": [0, 0.69444, 0, 0], - "8900": [-0.02639, 0.47361, 0, 0], - "8901": [-0.02639, 0.47361, 0, 0], - "8902": [-0.02778, 0.47222, 0, 0], - "8968": [0.25, 0.75, 0, 0], - "8969": [0.25, 0.75, 0, 0], - "8970": [0.25, 0.75, 0, 0], - "8971": [0.25, 0.75, 0, 0], - "8994": [-0.13889, 0.36111, 0, 0], - "8995": [-0.13889, 0.36111, 0, 0], - "9651": [0.19444, 0.69444, 0, 0], - "9657": [-0.02778, 0.47222, 0, 0], - "9661": [0.19444, 0.69444, 0, 0], - "9667": [-0.02778, 0.47222, 0, 0], - "9711": [0.19444, 0.69444, 0, 0], - "9824": [0.12963, 0.69444, 0, 0], - "9825": [0.12963, 0.69444, 0, 0], - "9826": [0.12963, 0.69444, 0, 0], - "9827": [0.12963, 0.69444, 0, 0], - "9837": [0, 0.75, 0, 0], - "9838": [0.19444, 0.69444, 0, 0], - "9839": [0.19444, 0.69444, 0, 0], - "10216": [0.25, 0.75, 0, 0], - "10217": [0.25, 0.75, 0, 0], - "10815": [0, 0.68611, 0, 0], - "10927": [0.19667, 0.69667, 0, 0], - "10928": [0.19667, 0.69667, 0, 0], - }, - "Main-Italic": { - "33": [0, 0.69444, 0.12417, 0], - "34": [0, 0.69444, 0.06961, 0], - "35": [0.19444, 0.69444, 0.06616, 0], - "37": [0.05556, 0.75, 0.13639, 0], - "38": [0, 0.69444, 0.09694, 0], - "39": [0, 0.69444, 0.12417, 0], - "40": [0.25, 0.75, 0.16194, 0], - "41": [0.25, 0.75, 0.03694, 0], - "42": [0, 0.75, 0.14917, 0], - "43": [0.05667, 0.56167, 0.03694, 0], - "44": [0.19444, 0.10556, 0, 0], - "45": [0, 0.43056, 0.02826, 0], - "46": [0, 0.10556, 0, 0], - "47": [0.25, 0.75, 0.16194, 0], - "48": [0, 0.64444, 0.13556, 0], - "49": [0, 0.64444, 0.13556, 0], - "50": [0, 0.64444, 0.13556, 0], - "51": [0, 0.64444, 0.13556, 0], - "52": [0.19444, 0.64444, 0.13556, 0], - "53": [0, 0.64444, 0.13556, 0], - "54": [0, 0.64444, 0.13556, 0], - "55": [0.19444, 0.64444, 0.13556, 0], - "56": [0, 0.64444, 0.13556, 0], - "57": [0, 0.64444, 0.13556, 0], - "58": [0, 0.43056, 0.0582, 0], - "59": [0.19444, 0.43056, 0.0582, 0], - "61": [-0.13313, 0.36687, 0.06616, 0], - "63": [0, 0.69444, 0.1225, 0], - "64": [0, 0.69444, 0.09597, 0], - "65": [0, 0.68333, 0, 0], - "66": [0, 0.68333, 0.10257, 0], - "67": [0, 0.68333, 0.14528, 0], - "68": [0, 0.68333, 0.09403, 0], - "69": [0, 0.68333, 0.12028, 0], - "70": [0, 0.68333, 0.13305, 0], - "71": [0, 0.68333, 0.08722, 0], - "72": [0, 0.68333, 0.16389, 0], - "73": [0, 0.68333, 0.15806, 0], - "74": [0, 0.68333, 0.14028, 0], - "75": [0, 0.68333, 0.14528, 0], - "76": [0, 0.68333, 0, 0], - "77": [0, 0.68333, 0.16389, 0], - "78": [0, 0.68333, 0.16389, 0], - "79": [0, 0.68333, 0.09403, 0], - "80": [0, 0.68333, 0.10257, 0], - "81": [0.19444, 0.68333, 0.09403, 0], - "82": [0, 0.68333, 0.03868, 0], - "83": [0, 0.68333, 0.11972, 0], - "84": [0, 0.68333, 0.13305, 0], - "85": [0, 0.68333, 0.16389, 0], - "86": [0, 0.68333, 0.18361, 0], - "87": [0, 0.68333, 0.18361, 0], - "88": [0, 0.68333, 0.15806, 0], - "89": [0, 0.68333, 0.19383, 0], - "90": [0, 0.68333, 0.14528, 0], - "91": [0.25, 0.75, 0.1875, 0], - "93": [0.25, 0.75, 0.10528, 0], - "94": [0, 0.69444, 0.06646, 0], - "95": [0.31, 0.12056, 0.09208, 0], - "97": [0, 0.43056, 0.07671, 0], - "98": [0, 0.69444, 0.06312, 0], - "99": [0, 0.43056, 0.05653, 0], - "100": [0, 0.69444, 0.10333, 0], - "101": [0, 0.43056, 0.07514, 0], - "102": [0.19444, 0.69444, 0.21194, 0], - "103": [0.19444, 0.43056, 0.08847, 0], - "104": [0, 0.69444, 0.07671, 0], - "105": [0, 0.65536, 0.1019, 0], - "106": [0.19444, 0.65536, 0.14467, 0], - "107": [0, 0.69444, 0.10764, 0], - "108": [0, 0.69444, 0.10333, 0], - "109": [0, 0.43056, 0.07671, 0], - "110": [0, 0.43056, 0.07671, 0], - "111": [0, 0.43056, 0.06312, 0], - "112": [0.19444, 0.43056, 0.06312, 0], - "113": [0.19444, 0.43056, 0.08847, 0], - "114": [0, 0.43056, 0.10764, 0], - "115": [0, 0.43056, 0.08208, 0], - "116": [0, 0.61508, 0.09486, 0], - "117": [0, 0.43056, 0.07671, 0], - "118": [0, 0.43056, 0.10764, 0], - "119": [0, 0.43056, 0.10764, 0], - "120": [0, 0.43056, 0.12042, 0], - "121": [0.19444, 0.43056, 0.08847, 0], - "122": [0, 0.43056, 0.12292, 0], - "126": [0.35, 0.31786, 0.11585, 0], - "163": [0, 0.69444, 0, 0], - "305": [0, 0.43056, 0, 0.02778], - "567": [0.19444, 0.43056, 0, 0.08334], - "768": [0, 0.69444, 0, 0], - "769": [0, 0.69444, 0.09694, 0], - "770": [0, 0.69444, 0.06646, 0], - "771": [0, 0.66786, 0.11585, 0], - "772": [0, 0.56167, 0.10333, 0], - "774": [0, 0.69444, 0.10806, 0], - "775": [0, 0.66786, 0.11752, 0], - "776": [0, 0.66786, 0.10474, 0], - "778": [0, 0.69444, 0, 0], - "779": [0, 0.69444, 0.1225, 0], - "780": [0, 0.62847, 0.08295, 0], - "915": [0, 0.68333, 0.13305, 0], - "916": [0, 0.68333, 0, 0], - "920": [0, 0.68333, 0.09403, 0], - "923": [0, 0.68333, 0, 0], - "926": [0, 0.68333, 0.15294, 0], - "928": [0, 0.68333, 0.16389, 0], - "931": [0, 0.68333, 0.12028, 0], - "933": [0, 0.68333, 0.11111, 0], - "934": [0, 0.68333, 0.05986, 0], - "936": [0, 0.68333, 0.11111, 0], - "937": [0, 0.68333, 0.10257, 0], - "8211": [0, 0.43056, 0.09208, 0], - "8212": [0, 0.43056, 0.09208, 0], - "8216": [0, 0.69444, 0.12417, 0], - "8217": [0, 0.69444, 0.12417, 0], - "8220": [0, 0.69444, 0.1685, 0], - "8221": [0, 0.69444, 0.06961, 0], - "8463": [0, 0.68889, 0, 0], - }, - "Main-Regular": { - "32": [0, 0, 0, 0], - "33": [0, 0.69444, 0, 0], - "34": [0, 0.69444, 0, 0], - "35": [0.19444, 0.69444, 0, 0], - "36": [0.05556, 0.75, 0, 0], - "37": [0.05556, 0.75, 0, 0], - "38": [0, 0.69444, 0, 0], - "39": [0, 0.69444, 0, 0], - "40": [0.25, 0.75, 0, 0], - "41": [0.25, 0.75, 0, 0], - "42": [0, 0.75, 0, 0], - "43": [0.08333, 0.58333, 0, 0], - "44": [0.19444, 0.10556, 0, 0], - "45": [0, 0.43056, 0, 0], - "46": [0, 0.10556, 0, 0], - "47": [0.25, 0.75, 0, 0], - "48": [0, 0.64444, 0, 0], - "49": [0, 0.64444, 0, 0], - "50": [0, 0.64444, 0, 0], - "51": [0, 0.64444, 0, 0], - "52": [0, 0.64444, 0, 0], - "53": [0, 0.64444, 0, 0], - "54": [0, 0.64444, 0, 0], - "55": [0, 0.64444, 0, 0], - "56": [0, 0.64444, 0, 0], - "57": [0, 0.64444, 0, 0], - "58": [0, 0.43056, 0, 0], - "59": [0.19444, 0.43056, 0, 0], - "60": [0.0391, 0.5391, 0, 0], - "61": [-0.13313, 0.36687, 0, 0], - "62": [0.0391, 0.5391, 0, 0], - "63": [0, 0.69444, 0, 0], - "64": [0, 0.69444, 0, 0], - "65": [0, 0.68333, 0, 0], - "66": [0, 0.68333, 0, 0], - "67": [0, 0.68333, 0, 0], - "68": [0, 0.68333, 0, 0], - "69": [0, 0.68333, 0, 0], - "70": [0, 0.68333, 0, 0], - "71": [0, 0.68333, 0, 0], - "72": [0, 0.68333, 0, 0], - "73": [0, 0.68333, 0, 0], - "74": [0, 0.68333, 0, 0], - "75": [0, 0.68333, 0, 0], - "76": [0, 0.68333, 0, 0], - "77": [0, 0.68333, 0, 0], - "78": [0, 0.68333, 0, 0], - "79": [0, 0.68333, 0, 0], - "80": [0, 0.68333, 0, 0], - "81": [0.19444, 0.68333, 0, 0], - "82": [0, 0.68333, 0, 0], - "83": [0, 0.68333, 0, 0], - "84": [0, 0.68333, 0, 0], - "85": [0, 0.68333, 0, 0], - "86": [0, 0.68333, 0.01389, 0], - "87": [0, 0.68333, 0.01389, 0], - "88": [0, 0.68333, 0, 0], - "89": [0, 0.68333, 0.025, 0], - "90": [0, 0.68333, 0, 0], - "91": [0.25, 0.75, 0, 0], - "92": [0.25, 0.75, 0, 0], - "93": [0.25, 0.75, 0, 0], - "94": [0, 0.69444, 0, 0], - "95": [0.31, 0.12056, 0.02778, 0], - "96": [0, 0.69444, 0, 0], - "97": [0, 0.43056, 0, 0], - "98": [0, 0.69444, 0, 0], - "99": [0, 0.43056, 0, 0], - "100": [0, 0.69444, 0, 0], - "101": [0, 0.43056, 0, 0], - "102": [0, 0.69444, 0.07778, 0], - "103": [0.19444, 0.43056, 0.01389, 0], - "104": [0, 0.69444, 0, 0], - "105": [0, 0.66786, 0, 0], - "106": [0.19444, 0.66786, 0, 0], - "107": [0, 0.69444, 0, 0], - "108": [0, 0.69444, 0, 0], - "109": [0, 0.43056, 0, 0], - "110": [0, 0.43056, 0, 0], - "111": [0, 0.43056, 0, 0], - "112": [0.19444, 0.43056, 0, 0], - "113": [0.19444, 0.43056, 0, 0], - "114": [0, 0.43056, 0, 0], - "115": [0, 0.43056, 0, 0], - "116": [0, 0.61508, 0, 0], - "117": [0, 0.43056, 0, 0], - "118": [0, 0.43056, 0.01389, 0], - "119": [0, 0.43056, 0.01389, 0], - "120": [0, 0.43056, 0, 0], - "121": [0.19444, 0.43056, 0.01389, 0], - "122": [0, 0.43056, 0, 0], - "123": [0.25, 0.75, 0, 0], - "124": [0.25, 0.75, 0, 0], - "125": [0.25, 0.75, 0, 0], - "126": [0.35, 0.31786, 0, 0], - "160": [0, 0, 0, 0], - "168": [0, 0.66786, 0, 0], - "172": [0, 0.43056, 0, 0], - "175": [0, 0.56778, 0, 0], - "176": [0, 0.69444, 0, 0], - "177": [0.08333, 0.58333, 0, 0], - "180": [0, 0.69444, 0, 0], - "215": [0.08333, 0.58333, 0, 0], - "247": [0.08333, 0.58333, 0, 0], - "305": [0, 0.43056, 0, 0], - "567": [0.19444, 0.43056, 0, 0], - "710": [0, 0.69444, 0, 0], - "711": [0, 0.62847, 0, 0], - "713": [0, 0.56778, 0, 0], - "714": [0, 0.69444, 0, 0], - "715": [0, 0.69444, 0, 0], - "728": [0, 0.69444, 0, 0], - "729": [0, 0.66786, 0, 0], - "730": [0, 0.69444, 0, 0], - "732": [0, 0.66786, 0, 0], - "768": [0, 0.69444, 0, 0], - "769": [0, 0.69444, 0, 0], - "770": [0, 0.69444, 0, 0], - "771": [0, 0.66786, 0, 0], - "772": [0, 0.56778, 0, 0], - "774": [0, 0.69444, 0, 0], - "775": [0, 0.66786, 0, 0], - "776": [0, 0.66786, 0, 0], - "778": [0, 0.69444, 0, 0], - "779": [0, 0.69444, 0, 0], - "780": [0, 0.62847, 0, 0], - "824": [0.19444, 0.69444, 0, 0], - "915": [0, 0.68333, 0, 0], - "916": [0, 0.68333, 0, 0], - "920": [0, 0.68333, 0, 0], - "923": [0, 0.68333, 0, 0], - "926": [0, 0.68333, 0, 0], - "928": [0, 0.68333, 0, 0], - "931": [0, 0.68333, 0, 0], - "933": [0, 0.68333, 0, 0], - "934": [0, 0.68333, 0, 0], - "936": [0, 0.68333, 0, 0], - "937": [0, 0.68333, 0, 0], - "8211": [0, 0.43056, 0.02778, 0], - "8212": [0, 0.43056, 0.02778, 0], - "8216": [0, 0.69444, 0, 0], - "8217": [0, 0.69444, 0, 0], - "8220": [0, 0.69444, 0, 0], - "8221": [0, 0.69444, 0, 0], - "8224": [0.19444, 0.69444, 0, 0], - "8225": [0.19444, 0.69444, 0, 0], - "8230": [0, 0.12, 0, 0], - "8242": [0, 0.55556, 0, 0], - "8407": [0, 0.71444, 0.15382, 0], - "8463": [0, 0.68889, 0, 0], - "8465": [0, 0.69444, 0, 0], - "8467": [0, 0.69444, 0, 0.11111], - "8472": [0.19444, 0.43056, 0, 0.11111], - "8476": [0, 0.69444, 0, 0], - "8501": [0, 0.69444, 0, 0], - "8592": [-0.13313, 0.36687, 0, 0], - "8593": [0.19444, 0.69444, 0, 0], - "8594": [-0.13313, 0.36687, 0, 0], - "8595": [0.19444, 0.69444, 0, 0], - "8596": [-0.13313, 0.36687, 0, 0], - "8597": [0.25, 0.75, 0, 0], - "8598": [0.19444, 0.69444, 0, 0], - "8599": [0.19444, 0.69444, 0, 0], - "8600": [0.19444, 0.69444, 0, 0], - "8601": [0.19444, 0.69444, 0, 0], - "8614": [0.011, 0.511, 0, 0], - "8617": [0.011, 0.511, 0, 0], - "8618": [0.011, 0.511, 0, 0], - "8636": [-0.13313, 0.36687, 0, 0], - "8637": [-0.13313, 0.36687, 0, 0], - "8640": [-0.13313, 0.36687, 0, 0], - "8641": [-0.13313, 0.36687, 0, 0], - "8652": [0.011, 0.671, 0, 0], - "8656": [-0.13313, 0.36687, 0, 0], - "8657": [0.19444, 0.69444, 0, 0], - "8658": [-0.13313, 0.36687, 0, 0], - "8659": [0.19444, 0.69444, 0, 0], - "8660": [-0.13313, 0.36687, 0, 0], - "8661": [0.25, 0.75, 0, 0], - "8704": [0, 0.69444, 0, 0], - "8706": [0, 0.69444, 0.05556, 0.08334], - "8707": [0, 0.69444, 0, 0], - "8709": [0.05556, 0.75, 0, 0], - "8711": [0, 0.68333, 0, 0], - "8712": [0.0391, 0.5391, 0, 0], - "8715": [0.0391, 0.5391, 0, 0], - "8722": [0.08333, 0.58333, 0, 0], - "8723": [0.08333, 0.58333, 0, 0], - "8725": [0.25, 0.75, 0, 0], - "8726": [0.25, 0.75, 0, 0], - "8727": [-0.03472, 0.46528, 0, 0], - "8728": [-0.05555, 0.44445, 0, 0], - "8729": [-0.05555, 0.44445, 0, 0], - "8730": [0.2, 0.8, 0, 0], - "8733": [0, 0.43056, 0, 0], - "8734": [0, 0.43056, 0, 0], - "8736": [0, 0.69224, 0, 0], - "8739": [0.25, 0.75, 0, 0], - "8741": [0.25, 0.75, 0, 0], - "8743": [0, 0.55556, 0, 0], - "8744": [0, 0.55556, 0, 0], - "8745": [0, 0.55556, 0, 0], - "8746": [0, 0.55556, 0, 0], - "8747": [0.19444, 0.69444, 0.11111, 0], - "8764": [-0.13313, 0.36687, 0, 0], - "8768": [0.19444, 0.69444, 0, 0], - "8771": [-0.03625, 0.46375, 0, 0], - "8773": [-0.022, 0.589, 0, 0], - "8776": [-0.01688, 0.48312, 0, 0], - "8781": [-0.03625, 0.46375, 0, 0], - "8784": [-0.133, 0.67, 0, 0], - "8800": [0.215, 0.716, 0, 0], - "8801": [-0.03625, 0.46375, 0, 0], - "8804": [0.13597, 0.63597, 0, 0], - "8805": [0.13597, 0.63597, 0, 0], - "8810": [0.0391, 0.5391, 0, 0], - "8811": [0.0391, 0.5391, 0, 0], - "8826": [0.0391, 0.5391, 0, 0], - "8827": [0.0391, 0.5391, 0, 0], - "8834": [0.0391, 0.5391, 0, 0], - "8835": [0.0391, 0.5391, 0, 0], - "8838": [0.13597, 0.63597, 0, 0], - "8839": [0.13597, 0.63597, 0, 0], - "8846": [0, 0.55556, 0, 0], - "8849": [0.13597, 0.63597, 0, 0], - "8850": [0.13597, 0.63597, 0, 0], - "8851": [0, 0.55556, 0, 0], - "8852": [0, 0.55556, 0, 0], - "8853": [0.08333, 0.58333, 0, 0], - "8854": [0.08333, 0.58333, 0, 0], - "8855": [0.08333, 0.58333, 0, 0], - "8856": [0.08333, 0.58333, 0, 0], - "8857": [0.08333, 0.58333, 0, 0], - "8866": [0, 0.69444, 0, 0], - "8867": [0, 0.69444, 0, 0], - "8868": [0, 0.69444, 0, 0], - "8869": [0, 0.69444, 0, 0], - "8872": [0.249, 0.75, 0, 0], - "8900": [-0.05555, 0.44445, 0, 0], - "8901": [-0.05555, 0.44445, 0, 0], - "8902": [-0.03472, 0.46528, 0, 0], - "8904": [0.005, 0.505, 0, 0], - "8942": [0.03, 0.9, 0, 0], - "8943": [-0.19, 0.31, 0, 0], - "8945": [-0.1, 0.82, 0, 0], - "8968": [0.25, 0.75, 0, 0], - "8969": [0.25, 0.75, 0, 0], - "8970": [0.25, 0.75, 0, 0], - "8971": [0.25, 0.75, 0, 0], - "8994": [-0.14236, 0.35764, 0, 0], - "8995": [-0.14236, 0.35764, 0, 0], - "9136": [0.244, 0.744, 0, 0], - "9137": [0.244, 0.744, 0, 0], - "9651": [0.19444, 0.69444, 0, 0], - "9657": [-0.03472, 0.46528, 0, 0], - "9661": [0.19444, 0.69444, 0, 0], - "9667": [-0.03472, 0.46528, 0, 0], - "9711": [0.19444, 0.69444, 0, 0], - "9824": [0.12963, 0.69444, 0, 0], - "9825": [0.12963, 0.69444, 0, 0], - "9826": [0.12963, 0.69444, 0, 0], - "9827": [0.12963, 0.69444, 0, 0], - "9837": [0, 0.75, 0, 0], - "9838": [0.19444, 0.69444, 0, 0], - "9839": [0.19444, 0.69444, 0, 0], - "10216": [0.25, 0.75, 0, 0], - "10217": [0.25, 0.75, 0, 0], - "10222": [0.244, 0.744, 0, 0], - "10223": [0.244, 0.744, 0, 0], - "10229": [0.011, 0.511, 0, 0], - "10230": [0.011, 0.511, 0, 0], - "10231": [0.011, 0.511, 0, 0], - "10232": [0.024, 0.525, 0, 0], - "10233": [0.024, 0.525, 0, 0], - "10234": [0.024, 0.525, 0, 0], - "10236": [0.011, 0.511, 0, 0], - "10815": [0, 0.68333, 0, 0], - "10927": [0.13597, 0.63597, 0, 0], - "10928": [0.13597, 0.63597, 0, 0], - }, - "Math-BoldItalic": { - "47": [0.19444, 0.69444, 0, 0], - "65": [0, 0.68611, 0, 0], - "66": [0, 0.68611, 0.04835, 0], - "67": [0, 0.68611, 0.06979, 0], - "68": [0, 0.68611, 0.03194, 0], - "69": [0, 0.68611, 0.05451, 0], - "70": [0, 0.68611, 0.15972, 0], - "71": [0, 0.68611, 0, 0], - "72": [0, 0.68611, 0.08229, 0], - "73": [0, 0.68611, 0.07778, 0], - "74": [0, 0.68611, 0.10069, 0], - "75": [0, 0.68611, 0.06979, 0], - "76": [0, 0.68611, 0, 0], - "77": [0, 0.68611, 0.11424, 0], - "78": [0, 0.68611, 0.11424, 0], - "79": [0, 0.68611, 0.03194, 0], - "80": [0, 0.68611, 0.15972, 0], - "81": [0.19444, 0.68611, 0, 0], - "82": [0, 0.68611, 0.00421, 0], - "83": [0, 0.68611, 0.05382, 0], - "84": [0, 0.68611, 0.15972, 0], - "85": [0, 0.68611, 0.11424, 0], - "86": [0, 0.68611, 0.25555, 0], - "87": [0, 0.68611, 0.15972, 0], - "88": [0, 0.68611, 0.07778, 0], - "89": [0, 0.68611, 0.25555, 0], - "90": [0, 0.68611, 0.06979, 0], - "97": [0, 0.44444, 0, 0], - "98": [0, 0.69444, 0, 0], - "99": [0, 0.44444, 0, 0], - "100": [0, 0.69444, 0, 0], - "101": [0, 0.44444, 0, 0], - "102": [0.19444, 0.69444, 0.11042, 0], - "103": [0.19444, 0.44444, 0.03704, 0], - "104": [0, 0.69444, 0, 0], - "105": [0, 0.69326, 0, 0], - "106": [0.19444, 0.69326, 0.0622, 0], - "107": [0, 0.69444, 0.01852, 0], - "108": [0, 0.69444, 0.0088, 0], - "109": [0, 0.44444, 0, 0], - "110": [0, 0.44444, 0, 0], - "111": [0, 0.44444, 0, 0], - "112": [0.19444, 0.44444, 0, 0], - "113": [0.19444, 0.44444, 0.03704, 0], - "114": [0, 0.44444, 0.03194, 0], - "115": [0, 0.44444, 0, 0], - "116": [0, 0.63492, 0, 0], - "117": [0, 0.44444, 0, 0], - "118": [0, 0.44444, 0.03704, 0], - "119": [0, 0.44444, 0.02778, 0], - "120": [0, 0.44444, 0, 0], - "121": [0.19444, 0.44444, 0.03704, 0], - "122": [0, 0.44444, 0.04213, 0], - "915": [0, 0.68611, 0.15972, 0], - "916": [0, 0.68611, 0, 0], - "920": [0, 0.68611, 0.03194, 0], - "923": [0, 0.68611, 0, 0], - "926": [0, 0.68611, 0.07458, 0], - "928": [0, 0.68611, 0.08229, 0], - "931": [0, 0.68611, 0.05451, 0], - "933": [0, 0.68611, 0.15972, 0], - "934": [0, 0.68611, 0, 0], - "936": [0, 0.68611, 0.11653, 0], - "937": [0, 0.68611, 0.04835, 0], - "945": [0, 0.44444, 0, 0], - "946": [0.19444, 0.69444, 0.03403, 0], - "947": [0.19444, 0.44444, 0.06389, 0], - "948": [0, 0.69444, 0.03819, 0], - "949": [0, 0.44444, 0, 0], - "950": [0.19444, 0.69444, 0.06215, 0], - "951": [0.19444, 0.44444, 0.03704, 0], - "952": [0, 0.69444, 0.03194, 0], - "953": [0, 0.44444, 0, 0], - "954": [0, 0.44444, 0, 0], - "955": [0, 0.69444, 0, 0], - "956": [0.19444, 0.44444, 0, 0], - "957": [0, 0.44444, 0.06898, 0], - "958": [0.19444, 0.69444, 0.03021, 0], - "959": [0, 0.44444, 0, 0], - "960": [0, 0.44444, 0.03704, 0], - "961": [0.19444, 0.44444, 0, 0], - "962": [0.09722, 0.44444, 0.07917, 0], - "963": [0, 0.44444, 0.03704, 0], - "964": [0, 0.44444, 0.13472, 0], - "965": [0, 0.44444, 0.03704, 0], - "966": [0.19444, 0.44444, 0, 0], - "967": [0.19444, 0.44444, 0, 0], - "968": [0.19444, 0.69444, 0.03704, 0], - "969": [0, 0.44444, 0.03704, 0], - "977": [0, 0.69444, 0, 0], - "981": [0.19444, 0.69444, 0, 0], - "982": [0, 0.44444, 0.03194, 0], - "1009": [0.19444, 0.44444, 0, 0], - "1013": [0, 0.44444, 0, 0], - }, - "Math-Italic": { - "47": [0.19444, 0.69444, 0, 0], - "65": [0, 0.68333, 0, 0.13889], - "66": [0, 0.68333, 0.05017, 0.08334], - "67": [0, 0.68333, 0.07153, 0.08334], - "68": [0, 0.68333, 0.02778, 0.05556], - "69": [0, 0.68333, 0.05764, 0.08334], - "70": [0, 0.68333, 0.13889, 0.08334], - "71": [0, 0.68333, 0, 0.08334], - "72": [0, 0.68333, 0.08125, 0.05556], - "73": [0, 0.68333, 0.07847, 0.11111], - "74": [0, 0.68333, 0.09618, 0.16667], - "75": [0, 0.68333, 0.07153, 0.05556], - "76": [0, 0.68333, 0, 0.02778], - "77": [0, 0.68333, 0.10903, 0.08334], - "78": [0, 0.68333, 0.10903, 0.08334], - "79": [0, 0.68333, 0.02778, 0.08334], - "80": [0, 0.68333, 0.13889, 0.08334], - "81": [0.19444, 0.68333, 0, 0.08334], - "82": [0, 0.68333, 0.00773, 0.08334], - "83": [0, 0.68333, 0.05764, 0.08334], - "84": [0, 0.68333, 0.13889, 0.08334], - "85": [0, 0.68333, 0.10903, 0.02778], - "86": [0, 0.68333, 0.22222, 0], - "87": [0, 0.68333, 0.13889, 0], - "88": [0, 0.68333, 0.07847, 0.08334], - "89": [0, 0.68333, 0.22222, 0], - "90": [0, 0.68333, 0.07153, 0.08334], - "97": [0, 0.43056, 0, 0], - "98": [0, 0.69444, 0, 0], - "99": [0, 0.43056, 0, 0.05556], - "100": [0, 0.69444, 0, 0.16667], - "101": [0, 0.43056, 0, 0.05556], - "102": [0.19444, 0.69444, 0.10764, 0.16667], - "103": [0.19444, 0.43056, 0.03588, 0.02778], - "104": [0, 0.69444, 0, 0], - "105": [0, 0.65952, 0, 0], - "106": [0.19444, 0.65952, 0.05724, 0], - "107": [0, 0.69444, 0.03148, 0], - "108": [0, 0.69444, 0.01968, 0.08334], - "109": [0, 0.43056, 0, 0], - "110": [0, 0.43056, 0, 0], - "111": [0, 0.43056, 0, 0.05556], - "112": [0.19444, 0.43056, 0, 0.08334], - "113": [0.19444, 0.43056, 0.03588, 0.08334], - "114": [0, 0.43056, 0.02778, 0.05556], - "115": [0, 0.43056, 0, 0.05556], - "116": [0, 0.61508, 0, 0.08334], - "117": [0, 0.43056, 0, 0.02778], - "118": [0, 0.43056, 0.03588, 0.02778], - "119": [0, 0.43056, 0.02691, 0.08334], - "120": [0, 0.43056, 0, 0.02778], - "121": [0.19444, 0.43056, 0.03588, 0.05556], - "122": [0, 0.43056, 0.04398, 0.05556], - "915": [0, 0.68333, 0.13889, 0.08334], - "916": [0, 0.68333, 0, 0.16667], - "920": [0, 0.68333, 0.02778, 0.08334], - "923": [0, 0.68333, 0, 0.16667], - "926": [0, 0.68333, 0.07569, 0.08334], - "928": [0, 0.68333, 0.08125, 0.05556], - "931": [0, 0.68333, 0.05764, 0.08334], - "933": [0, 0.68333, 0.13889, 0.05556], - "934": [0, 0.68333, 0, 0.08334], - "936": [0, 0.68333, 0.11, 0.05556], - "937": [0, 0.68333, 0.05017, 0.08334], - "945": [0, 0.43056, 0.0037, 0.02778], - "946": [0.19444, 0.69444, 0.05278, 0.08334], - "947": [0.19444, 0.43056, 0.05556, 0], - "948": [0, 0.69444, 0.03785, 0.05556], - "949": [0, 0.43056, 0, 0.08334], - "950": [0.19444, 0.69444, 0.07378, 0.08334], - "951": [0.19444, 0.43056, 0.03588, 0.05556], - "952": [0, 0.69444, 0.02778, 0.08334], - "953": [0, 0.43056, 0, 0.05556], - "954": [0, 0.43056, 0, 0], - "955": [0, 0.69444, 0, 0], - "956": [0.19444, 0.43056, 0, 0.02778], - "957": [0, 0.43056, 0.06366, 0.02778], - "958": [0.19444, 0.69444, 0.04601, 0.11111], - "959": [0, 0.43056, 0, 0.05556], - "960": [0, 0.43056, 0.03588, 0], - "961": [0.19444, 0.43056, 0, 0.08334], - "962": [0.09722, 0.43056, 0.07986, 0.08334], - "963": [0, 0.43056, 0.03588, 0], - "964": [0, 0.43056, 0.1132, 0.02778], - "965": [0, 0.43056, 0.03588, 0.02778], - "966": [0.19444, 0.43056, 0, 0.08334], - "967": [0.19444, 0.43056, 0, 0.05556], - "968": [0.19444, 0.69444, 0.03588, 0.11111], - "969": [0, 0.43056, 0.03588, 0], - "977": [0, 0.69444, 0, 0.08334], - "981": [0.19444, 0.69444, 0, 0.08334], - "982": [0, 0.43056, 0.02778, 0], - "1009": [0.19444, 0.43056, 0, 0.08334], - "1013": [0, 0.43056, 0, 0.05556], - }, - "Math-Regular": { - "65": [0, 0.68333, 0, 0.13889], - "66": [0, 0.68333, 0.05017, 0.08334], - "67": [0, 0.68333, 0.07153, 0.08334], - "68": [0, 0.68333, 0.02778, 0.05556], - "69": [0, 0.68333, 0.05764, 0.08334], - "70": [0, 0.68333, 0.13889, 0.08334], - "71": [0, 0.68333, 0, 0.08334], - "72": [0, 0.68333, 0.08125, 0.05556], - "73": [0, 0.68333, 0.07847, 0.11111], - "74": [0, 0.68333, 0.09618, 0.16667], - "75": [0, 0.68333, 0.07153, 0.05556], - "76": [0, 0.68333, 0, 0.02778], - "77": [0, 0.68333, 0.10903, 0.08334], - "78": [0, 0.68333, 0.10903, 0.08334], - "79": [0, 0.68333, 0.02778, 0.08334], - "80": [0, 0.68333, 0.13889, 0.08334], - "81": [0.19444, 0.68333, 0, 0.08334], - "82": [0, 0.68333, 0.00773, 0.08334], - "83": [0, 0.68333, 0.05764, 0.08334], - "84": [0, 0.68333, 0.13889, 0.08334], - "85": [0, 0.68333, 0.10903, 0.02778], - "86": [0, 0.68333, 0.22222, 0], - "87": [0, 0.68333, 0.13889, 0], - "88": [0, 0.68333, 0.07847, 0.08334], - "89": [0, 0.68333, 0.22222, 0], - "90": [0, 0.68333, 0.07153, 0.08334], - "97": [0, 0.43056, 0, 0], - "98": [0, 0.69444, 0, 0], - "99": [0, 0.43056, 0, 0.05556], - "100": [0, 0.69444, 0, 0.16667], - "101": [0, 0.43056, 0, 0.05556], - "102": [0.19444, 0.69444, 0.10764, 0.16667], - "103": [0.19444, 0.43056, 0.03588, 0.02778], - "104": [0, 0.69444, 0, 0], - "105": [0, 0.65952, 0, 0], - "106": [0.19444, 0.65952, 0.05724, 0], - "107": [0, 0.69444, 0.03148, 0], - "108": [0, 0.69444, 0.01968, 0.08334], - "109": [0, 0.43056, 0, 0], - "110": [0, 0.43056, 0, 0], - "111": [0, 0.43056, 0, 0.05556], - "112": [0.19444, 0.43056, 0, 0.08334], - "113": [0.19444, 0.43056, 0.03588, 0.08334], - "114": [0, 0.43056, 0.02778, 0.05556], - "115": [0, 0.43056, 0, 0.05556], - "116": [0, 0.61508, 0, 0.08334], - "117": [0, 0.43056, 0, 0.02778], - "118": [0, 0.43056, 0.03588, 0.02778], - "119": [0, 0.43056, 0.02691, 0.08334], - "120": [0, 0.43056, 0, 0.02778], - "121": [0.19444, 0.43056, 0.03588, 0.05556], - "122": [0, 0.43056, 0.04398, 0.05556], - "915": [0, 0.68333, 0.13889, 0.08334], - "916": [0, 0.68333, 0, 0.16667], - "920": [0, 0.68333, 0.02778, 0.08334], - "923": [0, 0.68333, 0, 0.16667], - "926": [0, 0.68333, 0.07569, 0.08334], - "928": [0, 0.68333, 0.08125, 0.05556], - "931": [0, 0.68333, 0.05764, 0.08334], - "933": [0, 0.68333, 0.13889, 0.05556], - "934": [0, 0.68333, 0, 0.08334], - "936": [0, 0.68333, 0.11, 0.05556], - "937": [0, 0.68333, 0.05017, 0.08334], - "945": [0, 0.43056, 0.0037, 0.02778], - "946": [0.19444, 0.69444, 0.05278, 0.08334], - "947": [0.19444, 0.43056, 0.05556, 0], - "948": [0, 0.69444, 0.03785, 0.05556], - "949": [0, 0.43056, 0, 0.08334], - "950": [0.19444, 0.69444, 0.07378, 0.08334], - "951": [0.19444, 0.43056, 0.03588, 0.05556], - "952": [0, 0.69444, 0.02778, 0.08334], - "953": [0, 0.43056, 0, 0.05556], - "954": [0, 0.43056, 0, 0], - "955": [0, 0.69444, 0, 0], - "956": [0.19444, 0.43056, 0, 0.02778], - "957": [0, 0.43056, 0.06366, 0.02778], - "958": [0.19444, 0.69444, 0.04601, 0.11111], - "959": [0, 0.43056, 0, 0.05556], - "960": [0, 0.43056, 0.03588, 0], - "961": [0.19444, 0.43056, 0, 0.08334], - "962": [0.09722, 0.43056, 0.07986, 0.08334], - "963": [0, 0.43056, 0.03588, 0], - "964": [0, 0.43056, 0.1132, 0.02778], - "965": [0, 0.43056, 0.03588, 0.02778], - "966": [0.19444, 0.43056, 0, 0.08334], - "967": [0.19444, 0.43056, 0, 0.05556], - "968": [0.19444, 0.69444, 0.03588, 0.11111], - "969": [0, 0.43056, 0.03588, 0], - "977": [0, 0.69444, 0, 0.08334], - "981": [0.19444, 0.69444, 0, 0.08334], - "982": [0, 0.43056, 0.02778, 0], - "1009": [0.19444, 0.43056, 0, 0.08334], - "1013": [0, 0.43056, 0, 0.05556], - }, - "SansSerif-Regular": { - "33": [0, 0.69444, 0, 0], - "34": [0, 0.69444, 0, 0], - "35": [0.19444, 0.69444, 0, 0], - "36": [0.05556, 0.75, 0, 0], - "37": [0.05556, 0.75, 0, 0], - "38": [0, 0.69444, 0, 0], - "39": [0, 0.69444, 0, 0], - "40": [0.25, 0.75, 0, 0], - "41": [0.25, 0.75, 0, 0], - "42": [0, 0.75, 0, 0], - "43": [0.08333, 0.58333, 0, 0], - "44": [0.125, 0.08333, 0, 0], - "45": [0, 0.44444, 0, 0], - "46": [0, 0.08333, 0, 0], - "47": [0.25, 0.75, 0, 0], - "48": [0, 0.65556, 0, 0], - "49": [0, 0.65556, 0, 0], - "50": [0, 0.65556, 0, 0], - "51": [0, 0.65556, 0, 0], - "52": [0, 0.65556, 0, 0], - "53": [0, 0.65556, 0, 0], - "54": [0, 0.65556, 0, 0], - "55": [0, 0.65556, 0, 0], - "56": [0, 0.65556, 0, 0], - "57": [0, 0.65556, 0, 0], - "58": [0, 0.44444, 0, 0], - "59": [0.125, 0.44444, 0, 0], - "61": [-0.13, 0.37, 0, 0], - "63": [0, 0.69444, 0, 0], - "64": [0, 0.69444, 0, 0], - "65": [0, 0.69444, 0, 0], - "66": [0, 0.69444, 0, 0], - "67": [0, 0.69444, 0, 0], - "68": [0, 0.69444, 0, 0], - "69": [0, 0.69444, 0, 0], - "70": [0, 0.69444, 0, 0], - "71": [0, 0.69444, 0, 0], - "72": [0, 0.69444, 0, 0], - "73": [0, 0.69444, 0, 0], - "74": [0, 0.69444, 0, 0], - "75": [0, 0.69444, 0, 0], - "76": [0, 0.69444, 0, 0], - "77": [0, 0.69444, 0, 0], - "78": [0, 0.69444, 0, 0], - "79": [0, 0.69444, 0, 0], - "80": [0, 0.69444, 0, 0], - "81": [0.125, 0.69444, 0, 0], - "82": [0, 0.69444, 0, 0], - "83": [0, 0.69444, 0, 0], - "84": [0, 0.69444, 0, 0], - "85": [0, 0.69444, 0, 0], - "86": [0, 0.69444, 0.01389, 0], - "87": [0, 0.69444, 0.01389, 0], - "88": [0, 0.69444, 0, 0], - "89": [0, 0.69444, 0.025, 0], - "90": [0, 0.69444, 0, 0], - "91": [0.25, 0.75, 0, 0], - "93": [0.25, 0.75, 0, 0], - "94": [0, 0.69444, 0, 0], - "95": [0.35, 0.09444, 0.02778, 0], - "97": [0, 0.44444, 0, 0], - "98": [0, 0.69444, 0, 0], - "99": [0, 0.44444, 0, 0], - "100": [0, 0.69444, 0, 0], - "101": [0, 0.44444, 0, 0], - "102": [0, 0.69444, 0.06944, 0], - "103": [0.19444, 0.44444, 0.01389, 0], - "104": [0, 0.69444, 0, 0], - "105": [0, 0.67937, 0, 0], - "106": [0.19444, 0.67937, 0, 0], - "107": [0, 0.69444, 0, 0], - "108": [0, 0.69444, 0, 0], - "109": [0, 0.44444, 0, 0], - "110": [0, 0.44444, 0, 0], - "111": [0, 0.44444, 0, 0], - "112": [0.19444, 0.44444, 0, 0], - "113": [0.19444, 0.44444, 0, 0], - "114": [0, 0.44444, 0.01389, 0], - "115": [0, 0.44444, 0, 0], - "116": [0, 0.57143, 0, 0], - "117": [0, 0.44444, 0, 0], - "118": [0, 0.44444, 0.01389, 0], - "119": [0, 0.44444, 0.01389, 0], - "120": [0, 0.44444, 0, 0], - "121": [0.19444, 0.44444, 0.01389, 0], - "122": [0, 0.44444, 0, 0], - "126": [0.35, 0.32659, 0, 0], - "305": [0, 0.44444, 0, 0], - "567": [0.19444, 0.44444, 0, 0], - "768": [0, 0.69444, 0, 0], - "769": [0, 0.69444, 0, 0], - "770": [0, 0.69444, 0, 0], - "771": [0, 0.67659, 0, 0], - "772": [0, 0.60889, 0, 0], - "774": [0, 0.69444, 0, 0], - "775": [0, 0.67937, 0, 0], - "776": [0, 0.67937, 0, 0], - "778": [0, 0.69444, 0, 0], - "779": [0, 0.69444, 0, 0], - "780": [0, 0.63194, 0, 0], - "915": [0, 0.69444, 0, 0], - "916": [0, 0.69444, 0, 0], - "920": [0, 0.69444, 0, 0], - "923": [0, 0.69444, 0, 0], - "926": [0, 0.69444, 0, 0], - "928": [0, 0.69444, 0, 0], - "931": [0, 0.69444, 0, 0], - "933": [0, 0.69444, 0, 0], - "934": [0, 0.69444, 0, 0], - "936": [0, 0.69444, 0, 0], - "937": [0, 0.69444, 0, 0], - "8211": [0, 0.44444, 0.02778, 0], - "8212": [0, 0.44444, 0.02778, 0], - "8216": [0, 0.69444, 0, 0], - "8217": [0, 0.69444, 0, 0], - "8220": [0, 0.69444, 0, 0], - "8221": [0, 0.69444, 0, 0], - }, - "Script-Regular": { - "65": [0, 0.7, 0.22925, 0], - "66": [0, 0.7, 0.04087, 0], - "67": [0, 0.7, 0.1689, 0], - "68": [0, 0.7, 0.09371, 0], - "69": [0, 0.7, 0.18583, 0], - "70": [0, 0.7, 0.13634, 0], - "71": [0, 0.7, 0.17322, 0], - "72": [0, 0.7, 0.29694, 0], - "73": [0, 0.7, 0.19189, 0], - "74": [0.27778, 0.7, 0.19189, 0], - "75": [0, 0.7, 0.31259, 0], - "76": [0, 0.7, 0.19189, 0], - "77": [0, 0.7, 0.15981, 0], - "78": [0, 0.7, 0.3525, 0], - "79": [0, 0.7, 0.08078, 0], - "80": [0, 0.7, 0.08078, 0], - "81": [0, 0.7, 0.03305, 0], - "82": [0, 0.7, 0.06259, 0], - "83": [0, 0.7, 0.19189, 0], - "84": [0, 0.7, 0.29087, 0], - "85": [0, 0.7, 0.25815, 0], - "86": [0, 0.7, 0.27523, 0], - "87": [0, 0.7, 0.27523, 0], - "88": [0, 0.7, 0.26006, 0], - "89": [0, 0.7, 0.2939, 0], - "90": [0, 0.7, 0.24037, 0], - }, - "Size1-Regular": { - "40": [0.35001, 0.85, 0, 0], - "41": [0.35001, 0.85, 0, 0], - "47": [0.35001, 0.85, 0, 0], - "91": [0.35001, 0.85, 0, 0], - "92": [0.35001, 0.85, 0, 0], - "93": [0.35001, 0.85, 0, 0], - "123": [0.35001, 0.85, 0, 0], - "125": [0.35001, 0.85, 0, 0], - "710": [0, 0.72222, 0, 0], - "732": [0, 0.72222, 0, 0], - "770": [0, 0.72222, 0, 0], - "771": [0, 0.72222, 0, 0], - "8214": [-0.00099, 0.601, 0, 0], - "8593": [1e-05, 0.6, 0, 0], - "8595": [1e-05, 0.6, 0, 0], - "8657": [1e-05, 0.6, 0, 0], - "8659": [1e-05, 0.6, 0, 0], - "8719": [0.25001, 0.75, 0, 0], - "8720": [0.25001, 0.75, 0, 0], - "8721": [0.25001, 0.75, 0, 0], - "8730": [0.35001, 0.85, 0, 0], - "8739": [-0.00599, 0.606, 0, 0], - "8741": [-0.00599, 0.606, 0, 0], - "8747": [0.30612, 0.805, 0.19445, 0], - "8748": [0.306, 0.805, 0.19445, 0], - "8749": [0.306, 0.805, 0.19445, 0], - "8750": [0.30612, 0.805, 0.19445, 0], - "8896": [0.25001, 0.75, 0, 0], - "8897": [0.25001, 0.75, 0, 0], - "8898": [0.25001, 0.75, 0, 0], - "8899": [0.25001, 0.75, 0, 0], - "8968": [0.35001, 0.85, 0, 0], - "8969": [0.35001, 0.85, 0, 0], - "8970": [0.35001, 0.85, 0, 0], - "8971": [0.35001, 0.85, 0, 0], - "9168": [-0.00099, 0.601, 0, 0], - "10216": [0.35001, 0.85, 0, 0], - "10217": [0.35001, 0.85, 0, 0], - "10752": [0.25001, 0.75, 0, 0], - "10753": [0.25001, 0.75, 0, 0], - "10754": [0.25001, 0.75, 0, 0], - "10756": [0.25001, 0.75, 0, 0], - "10758": [0.25001, 0.75, 0, 0], - }, - "Size2-Regular": { - "40": [0.65002, 1.15, 0, 0], - "41": [0.65002, 1.15, 0, 0], - "47": [0.65002, 1.15, 0, 0], - "91": [0.65002, 1.15, 0, 0], - "92": [0.65002, 1.15, 0, 0], - "93": [0.65002, 1.15, 0, 0], - "123": [0.65002, 1.15, 0, 0], - "125": [0.65002, 1.15, 0, 0], - "710": [0, 0.75, 0, 0], - "732": [0, 0.75, 0, 0], - "770": [0, 0.75, 0, 0], - "771": [0, 0.75, 0, 0], - "8719": [0.55001, 1.05, 0, 0], - "8720": [0.55001, 1.05, 0, 0], - "8721": [0.55001, 1.05, 0, 0], - "8730": [0.65002, 1.15, 0, 0], - "8747": [0.86225, 1.36, 0.44445, 0], - "8748": [0.862, 1.36, 0.44445, 0], - "8749": [0.862, 1.36, 0.44445, 0], - "8750": [0.86225, 1.36, 0.44445, 0], - "8896": [0.55001, 1.05, 0, 0], - "8897": [0.55001, 1.05, 0, 0], - "8898": [0.55001, 1.05, 0, 0], - "8899": [0.55001, 1.05, 0, 0], - "8968": [0.65002, 1.15, 0, 0], - "8969": [0.65002, 1.15, 0, 0], - "8970": [0.65002, 1.15, 0, 0], - "8971": [0.65002, 1.15, 0, 0], - "10216": [0.65002, 1.15, 0, 0], - "10217": [0.65002, 1.15, 0, 0], - "10752": [0.55001, 1.05, 0, 0], - "10753": [0.55001, 1.05, 0, 0], - "10754": [0.55001, 1.05, 0, 0], - "10756": [0.55001, 1.05, 0, 0], - "10758": [0.55001, 1.05, 0, 0], - }, - "Size3-Regular": { - "40": [0.95003, 1.45, 0, 0], - "41": [0.95003, 1.45, 0, 0], - "47": [0.95003, 1.45, 0, 0], - "91": [0.95003, 1.45, 0, 0], - "92": [0.95003, 1.45, 0, 0], - "93": [0.95003, 1.45, 0, 0], - "123": [0.95003, 1.45, 0, 0], - "125": [0.95003, 1.45, 0, 0], - "710": [0, 0.75, 0, 0], - "732": [0, 0.75, 0, 0], - "770": [0, 0.75, 0, 0], - "771": [0, 0.75, 0, 0], - "8730": [0.95003, 1.45, 0, 0], - "8968": [0.95003, 1.45, 0, 0], - "8969": [0.95003, 1.45, 0, 0], - "8970": [0.95003, 1.45, 0, 0], - "8971": [0.95003, 1.45, 0, 0], - "10216": [0.95003, 1.45, 0, 0], - "10217": [0.95003, 1.45, 0, 0], - }, - "Size4-Regular": { - "40": [1.25003, 1.75, 0, 0], - "41": [1.25003, 1.75, 0, 0], - "47": [1.25003, 1.75, 0, 0], - "91": [1.25003, 1.75, 0, 0], - "92": [1.25003, 1.75, 0, 0], - "93": [1.25003, 1.75, 0, 0], - "123": [1.25003, 1.75, 0, 0], - "125": [1.25003, 1.75, 0, 0], - "710": [0, 0.825, 0, 0], - "732": [0, 0.825, 0, 0], - "770": [0, 0.825, 0, 0], - "771": [0, 0.825, 0, 0], - "8730": [1.25003, 1.75, 0, 0], - "8968": [1.25003, 1.75, 0, 0], - "8969": [1.25003, 1.75, 0, 0], - "8970": [1.25003, 1.75, 0, 0], - "8971": [1.25003, 1.75, 0, 0], - "9115": [0.64502, 1.155, 0, 0], - "9116": [1e-05, 0.6, 0, 0], - "9117": [0.64502, 1.155, 0, 0], - "9118": [0.64502, 1.155, 0, 0], - "9119": [1e-05, 0.6, 0, 0], - "9120": [0.64502, 1.155, 0, 0], - "9121": [0.64502, 1.155, 0, 0], - "9122": [-0.00099, 0.601, 0, 0], - "9123": [0.64502, 1.155, 0, 0], - "9124": [0.64502, 1.155, 0, 0], - "9125": [-0.00099, 0.601, 0, 0], - "9126": [0.64502, 1.155, 0, 0], - "9127": [1e-05, 0.9, 0, 0], - "9128": [0.65002, 1.15, 0, 0], - "9129": [0.90001, 0, 0, 0], - "9130": [0, 0.3, 0, 0], - "9131": [1e-05, 0.9, 0, 0], - "9132": [0.65002, 1.15, 0, 0], - "9133": [0.90001, 0, 0, 0], - "9143": [0.88502, 0.915, 0, 0], - "10216": [1.25003, 1.75, 0, 0], - "10217": [1.25003, 1.75, 0, 0], - "57344": [-0.00499, 0.605, 0, 0], - "57345": [-0.00499, 0.605, 0, 0], - "57680": [0, 0.12, 0, 0], - "57681": [0, 0.12, 0, 0], - "57682": [0, 0.12, 0, 0], - "57683": [0, 0.12, 0, 0], - }, - "Typewriter-Regular": { - "33": [0, 0.61111, 0, 0], - "34": [0, 0.61111, 0, 0], - "35": [0, 0.61111, 0, 0], - "36": [0.08333, 0.69444, 0, 0], - "37": [0.08333, 0.69444, 0, 0], - "38": [0, 0.61111, 0, 0], - "39": [0, 0.61111, 0, 0], - "40": [0.08333, 0.69444, 0, 0], - "41": [0.08333, 0.69444, 0, 0], - "42": [0, 0.52083, 0, 0], - "43": [-0.08056, 0.53055, 0, 0], - "44": [0.13889, 0.125, 0, 0], - "45": [-0.08056, 0.53055, 0, 0], - "46": [0, 0.125, 0, 0], - "47": [0.08333, 0.69444, 0, 0], - "48": [0, 0.61111, 0, 0], - "49": [0, 0.61111, 0, 0], - "50": [0, 0.61111, 0, 0], - "51": [0, 0.61111, 0, 0], - "52": [0, 0.61111, 0, 0], - "53": [0, 0.61111, 0, 0], - "54": [0, 0.61111, 0, 0], - "55": [0, 0.61111, 0, 0], - "56": [0, 0.61111, 0, 0], - "57": [0, 0.61111, 0, 0], - "58": [0, 0.43056, 0, 0], - "59": [0.13889, 0.43056, 0, 0], - "60": [-0.05556, 0.55556, 0, 0], - "61": [-0.19549, 0.41562, 0, 0], - "62": [-0.05556, 0.55556, 0, 0], - "63": [0, 0.61111, 0, 0], - "64": [0, 0.61111, 0, 0], - "65": [0, 0.61111, 0, 0], - "66": [0, 0.61111, 0, 0], - "67": [0, 0.61111, 0, 0], - "68": [0, 0.61111, 0, 0], - "69": [0, 0.61111, 0, 0], - "70": [0, 0.61111, 0, 0], - "71": [0, 0.61111, 0, 0], - "72": [0, 0.61111, 0, 0], - "73": [0, 0.61111, 0, 0], - "74": [0, 0.61111, 0, 0], - "75": [0, 0.61111, 0, 0], - "76": [0, 0.61111, 0, 0], - "77": [0, 0.61111, 0, 0], - "78": [0, 0.61111, 0, 0], - "79": [0, 0.61111, 0, 0], - "80": [0, 0.61111, 0, 0], - "81": [0.13889, 0.61111, 0, 0], - "82": [0, 0.61111, 0, 0], - "83": [0, 0.61111, 0, 0], - "84": [0, 0.61111, 0, 0], - "85": [0, 0.61111, 0, 0], - "86": [0, 0.61111, 0, 0], - "87": [0, 0.61111, 0, 0], - "88": [0, 0.61111, 0, 0], - "89": [0, 0.61111, 0, 0], - "90": [0, 0.61111, 0, 0], - "91": [0.08333, 0.69444, 0, 0], - "92": [0.08333, 0.69444, 0, 0], - "93": [0.08333, 0.69444, 0, 0], - "94": [0, 0.61111, 0, 0], - "95": [0.09514, 0, 0, 0], - "96": [0, 0.61111, 0, 0], - "97": [0, 0.43056, 0, 0], - "98": [0, 0.61111, 0, 0], - "99": [0, 0.43056, 0, 0], - "100": [0, 0.61111, 0, 0], - "101": [0, 0.43056, 0, 0], - "102": [0, 0.61111, 0, 0], - "103": [0.22222, 0.43056, 0, 0], - "104": [0, 0.61111, 0, 0], - "105": [0, 0.61111, 0, 0], - "106": [0.22222, 0.61111, 0, 0], - "107": [0, 0.61111, 0, 0], - "108": [0, 0.61111, 0, 0], - "109": [0, 0.43056, 0, 0], - "110": [0, 0.43056, 0, 0], - "111": [0, 0.43056, 0, 0], - "112": [0.22222, 0.43056, 0, 0], - "113": [0.22222, 0.43056, 0, 0], - "114": [0, 0.43056, 0, 0], - "115": [0, 0.43056, 0, 0], - "116": [0, 0.55358, 0, 0], - "117": [0, 0.43056, 0, 0], - "118": [0, 0.43056, 0, 0], - "119": [0, 0.43056, 0, 0], - "120": [0, 0.43056, 0, 0], - "121": [0.22222, 0.43056, 0, 0], - "122": [0, 0.43056, 0, 0], - "123": [0.08333, 0.69444, 0, 0], - "124": [0.08333, 0.69444, 0, 0], - "125": [0.08333, 0.69444, 0, 0], - "126": [0, 0.61111, 0, 0], - "127": [0, 0.61111, 0, 0], - "305": [0, 0.43056, 0, 0], - "567": [0.22222, 0.43056, 0, 0], - "768": [0, 0.61111, 0, 0], - "769": [0, 0.61111, 0, 0], - "770": [0, 0.61111, 0, 0], - "771": [0, 0.61111, 0, 0], - "772": [0, 0.56555, 0, 0], - "774": [0, 0.61111, 0, 0], - "776": [0, 0.61111, 0, 0], - "778": [0, 0.61111, 0, 0], - "780": [0, 0.56597, 0, 0], - "915": [0, 0.61111, 0, 0], - "916": [0, 0.61111, 0, 0], - "920": [0, 0.61111, 0, 0], - "923": [0, 0.61111, 0, 0], - "926": [0, 0.61111, 0, 0], - "928": [0, 0.61111, 0, 0], - "931": [0, 0.61111, 0, 0], - "933": [0, 0.61111, 0, 0], - "934": [0, 0.61111, 0, 0], - "936": [0, 0.61111, 0, 0], - "937": [0, 0.61111, 0, 0], - "2018": [0, 0.61111, 0, 0], - "2019": [0, 0.61111, 0, 0], - "8242": [0, 0.61111, 0, 0], - }, -}; - -},{}],19:[function(require,module,exports){ -var utils = require("./utils"); -var ParseError = require("./ParseError"); - -/* This file contains a list of functions that we parse, identified by - * the calls to defineFunction. - * - * The first argument to defineFunction is a single name or a list of names. - * All functions named in such a list will share a single implementation. - * - * Each declared function can have associated properties, which - * include the following: - * - * - numArgs: The number of arguments the function takes. - * If this is the only property, it can be passed as a number - * instead of an element of a properties object. - * - argTypes: (optional) An array corresponding to each argument of the - * function, giving the type of argument that should be parsed. Its - * length should be equal to `numArgs + numOptionalArgs`. Valid - * types: - * - "size": A size-like thing, such as "1em" or "5ex" - * - "color": An html color, like "#abc" or "blue" - * - "original": The same type as the environment that the - * function being parsed is in (e.g. used for the - * bodies of functions like \color where the first - * argument is special and the second argument is - * parsed normally) - * Other possible types (probably shouldn't be used) - * - "text": Text-like (e.g. \text) - * - "math": Normal math - * If undefined, this will be treated as an appropriate length - * array of "original" strings - * - greediness: (optional) The greediness of the function to use ungrouped - * arguments. - * - * E.g. if you have an expression - * \sqrt \frac 1 2 - * since \frac has greediness=2 vs \sqrt's greediness=1, \frac - * will use the two arguments '1' and '2' as its two arguments, - * then that whole function will be used as the argument to - * \sqrt. On the other hand, the expressions - * \frac \frac 1 2 3 - * and - * \frac \sqrt 1 2 - * will fail because \frac and \frac have equal greediness - * and \sqrt has a lower greediness than \frac respectively. To - * make these parse, we would have to change them to: - * \frac {\frac 1 2} 3 - * and - * \frac {\sqrt 1} 2 - * - * The default value is `1` - * - allowedInText: (optional) Whether or not the function is allowed inside - * text mode (default false) - * - numOptionalArgs: (optional) The number of optional arguments the function - * should parse. If the optional arguments aren't found, - * `null` will be passed to the handler in their place. - * (default 0) - * - infix: (optional) Must be true if the function is an infix operator. - * - * The last argument is that implementation, the handler for the function(s). - * It is called to handle these functions and their arguments. - * It receives two arguments: - * - context contains information and references provided by the parser - * - args is an array of arguments obtained from TeX input - * The context contains the following properties: - * - funcName: the text (i.e. name) of the function, including \ - * - parser: the parser object - * - lexer: the lexer object - * - positions: the positions in the overall string of the function - * and the arguments. - * The latter three should only be used to produce error messages. - * - * The function should return an object with the following keys: - * - type: The type of element that this is. This is then used in - * buildHTML/buildMathML to determine which function - * should be called to build this node into a DOM node - * Any other data can be added to the object, which will be passed - * in to the function in buildHTML/buildMathML as `group.value`. - */ - -function defineFunction(names, props, handler) { - if (typeof names === "string") { - names = [names]; - } - if (typeof props === "number") { - props = { numArgs: props }; - } - // Set default values of functions - var data = { - numArgs: props.numArgs, - argTypes: props.argTypes, - greediness: (props.greediness === undefined) ? 1 : props.greediness, - allowedInText: !!props.allowedInText, - numOptionalArgs: props.numOptionalArgs || 0, - infix: !!props.infix, - handler: handler, - }; - for (var i = 0; i < names.length; ++i) { - module.exports[names[i]] = data; - } -} - -// A normal square root -defineFunction("\\sqrt", { - numArgs: 1, - numOptionalArgs: 1, -}, function(context, args) { - var index = args[0]; - var body = args[1]; - return { - type: "sqrt", - body: body, - index: index, - }; -}); - -// Some non-mathy text -defineFunction("\\text", { - numArgs: 1, - argTypes: ["text"], - greediness: 2, -}, function(context, args) { - var body = args[0]; - // Since the corresponding buildHTML/buildMathML function expects a - // list of elements, we normalize for different kinds of arguments - // TODO(emily): maybe this should be done somewhere else - var inner; - if (body.type === "ordgroup") { - inner = body.value; - } else { - inner = [body]; - } - - return { - type: "text", - body: inner, - }; -}); - -// A two-argument custom color -defineFunction("\\color", { - numArgs: 2, - allowedInText: true, - greediness: 3, - argTypes: ["color", "original"], -}, function(context, args) { - var color = args[0]; - var body = args[1]; - // Normalize the different kinds of bodies (see \text above) - var inner; - if (body.type === "ordgroup") { - inner = body.value; - } else { - inner = [body]; - } - - return { - type: "color", - color: color.value, - value: inner, - }; -}); - -// An overline -defineFunction("\\overline", { - numArgs: 1, -}, function(context, args) { - var body = args[0]; - return { - type: "overline", - body: body, - }; -}); - -// An underline -defineFunction("\\underline", { - numArgs: 1, -}, function(context, args) { - var body = args[0]; - return { - type: "underline", - body: body, - }; -}); - -// A box of the width and height -defineFunction("\\rule", { - numArgs: 2, - numOptionalArgs: 1, - argTypes: ["size", "size", "size"], -}, function(context, args) { - var shift = args[0]; - var width = args[1]; - var height = args[2]; - return { - type: "rule", - shift: shift && shift.value, - width: width.value, - height: height.value, - }; -}); - -defineFunction("\\kern", { - numArgs: 1, - argTypes: ["size"], -}, function(context, args) { - return { - type: "kern", - dimension: args[0].value, - }; -}); - -// A KaTeX logo -defineFunction("\\KaTeX", { - numArgs: 0, -}, function(context) { - return { - type: "katex", - }; -}); - -defineFunction("\\phantom", { - numArgs: 1, -}, function(context, args) { - var body = args[0]; - var inner; - if (body.type === "ordgroup") { - inner = body.value; - } else { - inner = [body]; - } - - return { - type: "phantom", - value: inner, - }; -}); - -// Extra data needed for the delimiter handler down below -var delimiterSizes = { - "\\bigl" : {type: "open", size: 1}, - "\\Bigl" : {type: "open", size: 2}, - "\\biggl": {type: "open", size: 3}, - "\\Biggl": {type: "open", size: 4}, - "\\bigr" : {type: "close", size: 1}, - "\\Bigr" : {type: "close", size: 2}, - "\\biggr": {type: "close", size: 3}, - "\\Biggr": {type: "close", size: 4}, - "\\bigm" : {type: "rel", size: 1}, - "\\Bigm" : {type: "rel", size: 2}, - "\\biggm": {type: "rel", size: 3}, - "\\Biggm": {type: "rel", size: 4}, - "\\big" : {type: "textord", size: 1}, - "\\Big" : {type: "textord", size: 2}, - "\\bigg" : {type: "textord", size: 3}, - "\\Bigg" : {type: "textord", size: 4}, -}; - -var delimiters = [ - "(", ")", "[", "\\lbrack", "]", "\\rbrack", - "\\{", "\\lbrace", "\\}", "\\rbrace", - "\\lfloor", "\\rfloor", "\\lceil", "\\rceil", - "<", ">", "\\langle", "\\rangle", "\\lt", "\\gt", - "\\lvert", "\\rvert", "\\lVert", "\\rVert", - "\\lgroup", "\\rgroup", "\\lmoustache", "\\rmoustache", - "/", "\\backslash", - "|", "\\vert", "\\|", "\\Vert", - "\\uparrow", "\\Uparrow", - "\\downarrow", "\\Downarrow", - "\\updownarrow", "\\Updownarrow", - ".", -]; - -var fontAliases = { - "\\Bbb": "\\mathbb", - "\\bold": "\\mathbf", - "\\frak": "\\mathfrak", -}; - -// Single-argument color functions -defineFunction([ - "\\blue", "\\orange", "\\pink", "\\red", - "\\green", "\\gray", "\\purple", - "\\blueA", "\\blueB", "\\blueC", "\\blueD", "\\blueE", - "\\tealA", "\\tealB", "\\tealC", "\\tealD", "\\tealE", - "\\greenA", "\\greenB", "\\greenC", "\\greenD", "\\greenE", - "\\goldA", "\\goldB", "\\goldC", "\\goldD", "\\goldE", - "\\redA", "\\redB", "\\redC", "\\redD", "\\redE", - "\\maroonA", "\\maroonB", "\\maroonC", "\\maroonD", "\\maroonE", - "\\purpleA", "\\purpleB", "\\purpleC", "\\purpleD", "\\purpleE", - "\\mintA", "\\mintB", "\\mintC", - "\\grayA", "\\grayB", "\\grayC", "\\grayD", "\\grayE", - "\\grayF", "\\grayG", "\\grayH", "\\grayI", - "\\kaBlue", "\\kaGreen", -], { - numArgs: 1, - allowedInText: true, - greediness: 3, -}, function(context, args) { - var body = args[0]; - var atoms; - if (body.type === "ordgroup") { - atoms = body.value; - } else { - atoms = [body]; - } - - return { - type: "color", - color: "katex-" + context.funcName.slice(1), - value: atoms, - }; -}); - -// There are 2 flags for operators; whether they produce limits in -// displaystyle, and whether they are symbols and should grow in -// displaystyle. These four groups cover the four possible choices. - -// No limits, not symbols -defineFunction([ - "\\arcsin", "\\arccos", "\\arctan", "\\arg", "\\cos", "\\cosh", - "\\cot", "\\coth", "\\csc", "\\deg", "\\dim", "\\exp", "\\hom", - "\\ker", "\\lg", "\\ln", "\\log", "\\sec", "\\sin", "\\sinh", - "\\tan", "\\tanh", -], { - numArgs: 0, -}, function(context) { - return { - type: "op", - limits: false, - symbol: false, - body: context.funcName, - }; -}); - -// Limits, not symbols -defineFunction([ - "\\det", "\\gcd", "\\inf", "\\lim", "\\liminf", "\\limsup", "\\max", - "\\min", "\\Pr", "\\sup", -], { - numArgs: 0, -}, function(context) { - return { - type: "op", - limits: true, - symbol: false, - body: context.funcName, - }; -}); - -// No limits, symbols -defineFunction([ - "\\int", "\\iint", "\\iiint", "\\oint", -], { - numArgs: 0, -}, function(context) { - return { - type: "op", - limits: false, - symbol: true, - body: context.funcName, - }; -}); - -// Limits, symbols -defineFunction([ - "\\coprod", "\\bigvee", "\\bigwedge", "\\biguplus", "\\bigcap", - "\\bigcup", "\\intop", "\\prod", "\\sum", "\\bigotimes", - "\\bigoplus", "\\bigodot", "\\bigsqcup", "\\smallint", -], { - numArgs: 0, -}, function(context) { - return { - type: "op", - limits: true, - symbol: true, - body: context.funcName, - }; -}); - -// Fractions -defineFunction([ - "\\dfrac", "\\frac", "\\tfrac", - "\\dbinom", "\\binom", "\\tbinom", -], { - numArgs: 2, - greediness: 2, -}, function(context, args) { - var numer = args[0]; - var denom = args[1]; - var hasBarLine; - var leftDelim = null; - var rightDelim = null; - var size = "auto"; - - switch (context.funcName) { - case "\\dfrac": - case "\\frac": - case "\\tfrac": - hasBarLine = true; - break; - case "\\dbinom": - case "\\binom": - case "\\tbinom": - hasBarLine = false; - leftDelim = "("; - rightDelim = ")"; - break; - default: - throw new Error("Unrecognized genfrac command"); - } - - switch (context.funcName) { - case "\\dfrac": - case "\\dbinom": - size = "display"; - break; - case "\\tfrac": - case "\\tbinom": - size = "text"; - break; - } - - return { - type: "genfrac", - numer: numer, - denom: denom, - hasBarLine: hasBarLine, - leftDelim: leftDelim, - rightDelim: rightDelim, - size: size, - }; -}); - -// Left and right overlap functions -defineFunction(["\\llap", "\\rlap"], { - numArgs: 1, - allowedInText: true, -}, function(context, args) { - var body = args[0]; - return { - type: context.funcName.slice(1), - body: body, - }; -}); - -// Delimiter functions -defineFunction([ - "\\bigl", "\\Bigl", "\\biggl", "\\Biggl", - "\\bigr", "\\Bigr", "\\biggr", "\\Biggr", - "\\bigm", "\\Bigm", "\\biggm", "\\Biggm", - "\\big", "\\Big", "\\bigg", "\\Bigg", - "\\left", "\\right", -], { - numArgs: 1, -}, function(context, args) { - var delim = args[0]; - if (!utils.contains(delimiters, delim.value)) { - throw new ParseError( - "Invalid delimiter: '" + delim.value + "' after '" + - context.funcName + "'", delim); - } - - // \left and \right are caught somewhere in Parser.js, which is - // why this data doesn't match what is in buildHTML. - if (context.funcName === "\\left" || context.funcName === "\\right") { - return { - type: "leftright", - value: delim.value, - }; - } else { - return { - type: "delimsizing", - size: delimiterSizes[context.funcName].size, - delimType: delimiterSizes[context.funcName].type, - value: delim.value, - }; - } -}); - -// Sizing functions (handled in Parser.js explicitly, hence no handler) -defineFunction([ - "\\tiny", "\\scriptsize", "\\footnotesize", "\\small", - "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge", -], 0, null); - -// Style changing functions (handled in Parser.js explicitly, hence no -// handler) -defineFunction([ - "\\displaystyle", "\\textstyle", "\\scriptstyle", - "\\scriptscriptstyle", -], 0, null); - -defineFunction([ - // styles - "\\mathrm", "\\mathit", "\\mathbf", - - // families - "\\mathbb", "\\mathcal", "\\mathfrak", "\\mathscr", "\\mathsf", - "\\mathtt", - - // aliases - "\\Bbb", "\\bold", "\\frak", -], { - numArgs: 1, - greediness: 2, -}, function(context, args) { - var body = args[0]; - var func = context.funcName; - if (func in fontAliases) { - func = fontAliases[func]; - } - return { - type: "font", - font: func.slice(1), - body: body, - }; -}); - -// Accents -defineFunction([ - "\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", - "\\check", "\\hat", "\\vec", "\\dot", - // We don't support expanding accents yet - // "\\widetilde", "\\widehat" -], { - numArgs: 1, -}, function(context, args) { - var base = args[0]; - return { - type: "accent", - accent: context.funcName, - base: base, - }; -}); - -// Infix generalized fractions -defineFunction(["\\over", "\\choose"], { - numArgs: 0, - infix: true, -}, function(context) { - var replaceWith; - switch (context.funcName) { - case "\\over": - replaceWith = "\\frac"; - break; - case "\\choose": - replaceWith = "\\binom"; - break; - default: - throw new Error("Unrecognized infix genfrac command"); - } - return { - type: "infix", - replaceWith: replaceWith, - token: context.token, - }; -}); - -// Row breaks for aligned data -defineFunction(["\\\\", "\\cr"], { - numArgs: 0, - numOptionalArgs: 1, - argTypes: ["size"], -}, function(context, args) { - var size = args[0]; - return { - type: "cr", - size: size, - }; -}); - -// Environment delimiters -defineFunction(["\\begin", "\\end"], { - numArgs: 1, - argTypes: ["text"], -}, function(context, args) { - var nameGroup = args[0]; - if (nameGroup.type !== "ordgroup") { - throw new ParseError("Invalid environment name", nameGroup); - } - var name = ""; - for (var i = 0; i < nameGroup.value.length; ++i) { - name += nameGroup.value[i].value; - } - return { - type: "environment", - name: name, - nameGroup: nameGroup, - }; -}); - -},{"./ParseError":6,"./utils":25}],20:[function(require,module,exports){ -/** - * These objects store data about MathML nodes. This is the MathML equivalent - * of the types in domTree.js. Since MathML handles its own rendering, and - * since we're mainly using MathML to improve accessibility, we don't manage - * any of the styling state that the plain DOM nodes do. - * - * The `toNode` and `toMarkup` functions work simlarly to how they do in - * domTree.js, creating namespaced DOM nodes and HTML text markup respectively. - */ - -var utils = require("./utils"); - -/** - * This node represents a general purpose MathML node of any type. The - * constructor requires the type of node to create (for example, `"mo"` or - * `"mspace"`, corresponding to `<mo>` and `<mspace>` tags). - */ -function MathNode(type, children) { - this.type = type; - this.attributes = {}; - this.children = children || []; -} - -/** - * Sets an attribute on a MathML node. MathML depends on attributes to convey a - * semantic content, so this is used heavily. - */ -MathNode.prototype.setAttribute = function(name, value) { - this.attributes[name] = value; -}; - -/** - * Converts the math node into a MathML-namespaced DOM element. - */ -MathNode.prototype.toNode = function() { - var node = document.createElementNS( - "http://www.w3.org/1998/Math/MathML", this.type); - - for (var attr in this.attributes) { - if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { - node.setAttribute(attr, this.attributes[attr]); - } - } - - for (var i = 0; i < this.children.length; i++) { - node.appendChild(this.children[i].toNode()); - } - - return node; -}; - -/** - * Converts the math node into an HTML markup string. - */ -MathNode.prototype.toMarkup = function() { - var markup = "<" + this.type; - - // Add the attributes - for (var attr in this.attributes) { - if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { - markup += " " + attr + "=\""; - markup += utils.escape(this.attributes[attr]); - markup += "\""; - } - } - - markup += ">"; - - for (var i = 0; i < this.children.length; i++) { - markup += this.children[i].toMarkup(); - } - - markup += "</" + this.type + ">"; - - return markup; -}; - -/** - * This node represents a piece of text. - */ -function TextNode(text) { - this.text = text; -} - -/** - * Converts the text node into a DOM text node. - */ -TextNode.prototype.toNode = function() { - return document.createTextNode(this.text); -}; - -/** - * Converts the text node into HTML markup (which is just the text itself). - */ -TextNode.prototype.toMarkup = function() { - return utils.escape(this.text); -}; - -module.exports = { - MathNode: MathNode, - TextNode: TextNode, -}; - -},{"./utils":25}],21:[function(require,module,exports){ -/** - * The resulting parse tree nodes of the parse tree. - * - * It is possible to provide position information, so that a ParseNode can - * fulfil a role similar to a Token in error reporting. - * For details on the corresponding properties see Token constructor. - * Providing such information can lead to better error reporting. - * - * @param {string} type type of node, like e.g. "ordgroup" - * @param {?object} value type-specific representation of the node - * @param {string} mode parse mode in action for this node, - * "math" or "text" - * @param {Token=} firstToken first token of the input for this node, - * will omit position information if unset - * @param {Token=} lastToken last token of the input for this node, - * will default to firstToken if unset - */ -function ParseNode(type, value, mode, firstToken, lastToken) { - this.type = type; - this.value = value; - this.mode = mode; - if (firstToken && (!lastToken || lastToken.lexer === firstToken.lexer)) { - this.lexer = firstToken.lexer; - this.start = firstToken.start; - this.end = (lastToken || firstToken).end; - } -} - -module.exports = { - ParseNode: ParseNode, -}; - - -},{}],22:[function(require,module,exports){ -/** - * Provides a single function for parsing an expression using a Parser - * TODO(emily): Remove this - */ - -var Parser = require("./Parser"); - -/** - * Parses an expression using a Parser, then returns the parsed result. - */ -var parseTree = function(toParse, settings) { - if (!(typeof toParse === 'string' || toParse instanceof String)) { - throw new TypeError('KaTeX can only parse string typed expression'); - } - var parser = new Parser(toParse, settings); - - return parser.parse(); -}; - -module.exports = parseTree; - -},{"./Parser":7}],23:[function(require,module,exports){ -/** - * This file holds a list of all no-argument functions and single-character - * symbols (like 'a' or ';'). - * - * For each of the symbols, there are three properties they can have: - * - font (required): the font to be used for this symbol. Either "main" (the - normal font), or "ams" (the ams fonts). - * - group (required): the ParseNode group type the symbol should have (i.e. - "textord", "mathord", etc). - See https://github.com/Khan/KaTeX/wiki/Examining-TeX#group-types - * - replace: the character that this symbol or function should be - * replaced with (i.e. "\phi" has a replace value of "\u03d5", the phi - * character in the main font). - * - * The outermost map in the table indicates what mode the symbols should be - * accepted in (e.g. "math" or "text"). - */ - -module.exports = { - math: {}, - text: {}, -}; - -function defineSymbol(mode, font, group, replace, name) { - module.exports[mode][name] = { - font: font, - group: group, - replace: replace, - }; -} - -// Some abbreviations for commonly used strings. -// This helps minify the code, and also spotting typos using jshint. - -// modes: -var math = "math"; -var text = "text"; - -// fonts: -var main = "main"; -var ams = "ams"; - -// groups: -var accent = "accent"; -var bin = "bin"; -var close = "close"; -var inner = "inner"; -var mathord = "mathord"; -var op = "op"; -var open = "open"; -var punct = "punct"; -var rel = "rel"; -var spacing = "spacing"; -var textord = "textord"; - -// Now comes the symbol table - -// Relation Symbols -defineSymbol(math, main, rel, "\u2261", "\\equiv"); -defineSymbol(math, main, rel, "\u227a", "\\prec"); -defineSymbol(math, main, rel, "\u227b", "\\succ"); -defineSymbol(math, main, rel, "\u223c", "\\sim"); -defineSymbol(math, main, rel, "\u22a5", "\\perp"); -defineSymbol(math, main, rel, "\u2aaf", "\\preceq"); -defineSymbol(math, main, rel, "\u2ab0", "\\succeq"); -defineSymbol(math, main, rel, "\u2243", "\\simeq"); -defineSymbol(math, main, rel, "\u2223", "\\mid"); -defineSymbol(math, main, rel, "\u226a", "\\ll"); -defineSymbol(math, main, rel, "\u226b", "\\gg"); -defineSymbol(math, main, rel, "\u224d", "\\asymp"); -defineSymbol(math, main, rel, "\u2225", "\\parallel"); -defineSymbol(math, main, rel, "\u22c8", "\\bowtie"); -defineSymbol(math, main, rel, "\u2323", "\\smile"); -defineSymbol(math, main, rel, "\u2291", "\\sqsubseteq"); -defineSymbol(math, main, rel, "\u2292", "\\sqsupseteq"); -defineSymbol(math, main, rel, "\u2250", "\\doteq"); -defineSymbol(math, main, rel, "\u2322", "\\frown"); -defineSymbol(math, main, rel, "\u220b", "\\ni"); -defineSymbol(math, main, rel, "\u221d", "\\propto"); -defineSymbol(math, main, rel, "\u22a2", "\\vdash"); -defineSymbol(math, main, rel, "\u22a3", "\\dashv"); -defineSymbol(math, main, rel, "\u220b", "\\owns"); - -// Punctuation -defineSymbol(math, main, punct, "\u002e", "\\ldotp"); -defineSymbol(math, main, punct, "\u22c5", "\\cdotp"); - -// Misc Symbols -defineSymbol(math, main, textord, "\u0023", "\\#"); -defineSymbol(math, main, textord, "\u0026", "\\&"); -defineSymbol(math, main, textord, "\u2135", "\\aleph"); -defineSymbol(math, main, textord, "\u2200", "\\forall"); -defineSymbol(math, main, textord, "\u210f", "\\hbar"); -defineSymbol(math, main, textord, "\u2203", "\\exists"); -defineSymbol(math, main, textord, "\u2207", "\\nabla"); -defineSymbol(math, main, textord, "\u266d", "\\flat"); -defineSymbol(math, main, textord, "\u2113", "\\ell"); -defineSymbol(math, main, textord, "\u266e", "\\natural"); -defineSymbol(math, main, textord, "\u2663", "\\clubsuit"); -defineSymbol(math, main, textord, "\u2118", "\\wp"); -defineSymbol(math, main, textord, "\u266f", "\\sharp"); -defineSymbol(math, main, textord, "\u2662", "\\diamondsuit"); -defineSymbol(math, main, textord, "\u211c", "\\Re"); -defineSymbol(math, main, textord, "\u2661", "\\heartsuit"); -defineSymbol(math, main, textord, "\u2111", "\\Im"); -defineSymbol(math, main, textord, "\u2660", "\\spadesuit"); - -// Math and Text -defineSymbol(math, main, textord, "\u2020", "\\dag"); -defineSymbol(math, main, textord, "\u2021", "\\ddag"); - -// Large Delimiters -defineSymbol(math, main, close, "\u23b1", "\\rmoustache"); -defineSymbol(math, main, open, "\u23b0", "\\lmoustache"); -defineSymbol(math, main, close, "\u27ef", "\\rgroup"); -defineSymbol(math, main, open, "\u27ee", "\\lgroup"); - -// Binary Operators -defineSymbol(math, main, bin, "\u2213", "\\mp"); -defineSymbol(math, main, bin, "\u2296", "\\ominus"); -defineSymbol(math, main, bin, "\u228e", "\\uplus"); -defineSymbol(math, main, bin, "\u2293", "\\sqcap"); -defineSymbol(math, main, bin, "\u2217", "\\ast"); -defineSymbol(math, main, bin, "\u2294", "\\sqcup"); -defineSymbol(math, main, bin, "\u25ef", "\\bigcirc"); -defineSymbol(math, main, bin, "\u2219", "\\bullet"); -defineSymbol(math, main, bin, "\u2021", "\\ddagger"); -defineSymbol(math, main, bin, "\u2240", "\\wr"); -defineSymbol(math, main, bin, "\u2a3f", "\\amalg"); - -// Arrow Symbols -defineSymbol(math, main, rel, "\u27f5", "\\longleftarrow"); -defineSymbol(math, main, rel, "\u21d0", "\\Leftarrow"); -defineSymbol(math, main, rel, "\u27f8", "\\Longleftarrow"); -defineSymbol(math, main, rel, "\u27f6", "\\longrightarrow"); -defineSymbol(math, main, rel, "\u21d2", "\\Rightarrow"); -defineSymbol(math, main, rel, "\u27f9", "\\Longrightarrow"); -defineSymbol(math, main, rel, "\u2194", "\\leftrightarrow"); -defineSymbol(math, main, rel, "\u27f7", "\\longleftrightarrow"); -defineSymbol(math, main, rel, "\u21d4", "\\Leftrightarrow"); -defineSymbol(math, main, rel, "\u27fa", "\\Longleftrightarrow"); -defineSymbol(math, main, rel, "\u21a6", "\\mapsto"); -defineSymbol(math, main, rel, "\u27fc", "\\longmapsto"); -defineSymbol(math, main, rel, "\u2197", "\\nearrow"); -defineSymbol(math, main, rel, "\u21a9", "\\hookleftarrow"); -defineSymbol(math, main, rel, "\u21aa", "\\hookrightarrow"); -defineSymbol(math, main, rel, "\u2198", "\\searrow"); -defineSymbol(math, main, rel, "\u21bc", "\\leftharpoonup"); -defineSymbol(math, main, rel, "\u21c0", "\\rightharpoonup"); -defineSymbol(math, main, rel, "\u2199", "\\swarrow"); -defineSymbol(math, main, rel, "\u21bd", "\\leftharpoondown"); -defineSymbol(math, main, rel, "\u21c1", "\\rightharpoondown"); -defineSymbol(math, main, rel, "\u2196", "\\nwarrow"); -defineSymbol(math, main, rel, "\u21cc", "\\rightleftharpoons"); - -// AMS Negated Binary Relations -defineSymbol(math, ams, rel, "\u226e", "\\nless"); -defineSymbol(math, ams, rel, "\ue010", "\\nleqslant"); -defineSymbol(math, ams, rel, "\ue011", "\\nleqq"); -defineSymbol(math, ams, rel, "\u2a87", "\\lneq"); -defineSymbol(math, ams, rel, "\u2268", "\\lneqq"); -defineSymbol(math, ams, rel, "\ue00c", "\\lvertneqq"); -defineSymbol(math, ams, rel, "\u22e6", "\\lnsim"); -defineSymbol(math, ams, rel, "\u2a89", "\\lnapprox"); -defineSymbol(math, ams, rel, "\u2280", "\\nprec"); -defineSymbol(math, ams, rel, "\u22e0", "\\npreceq"); -defineSymbol(math, ams, rel, "\u22e8", "\\precnsim"); -defineSymbol(math, ams, rel, "\u2ab9", "\\precnapprox"); -defineSymbol(math, ams, rel, "\u2241", "\\nsim"); -defineSymbol(math, ams, rel, "\ue006", "\\nshortmid"); -defineSymbol(math, ams, rel, "\u2224", "\\nmid"); -defineSymbol(math, ams, rel, "\u22ac", "\\nvdash"); -defineSymbol(math, ams, rel, "\u22ad", "\\nvDash"); -defineSymbol(math, ams, rel, "\u22ea", "\\ntriangleleft"); -defineSymbol(math, ams, rel, "\u22ec", "\\ntrianglelefteq"); -defineSymbol(math, ams, rel, "\u228a", "\\subsetneq"); -defineSymbol(math, ams, rel, "\ue01a", "\\varsubsetneq"); -defineSymbol(math, ams, rel, "\u2acb", "\\subsetneqq"); -defineSymbol(math, ams, rel, "\ue017", "\\varsubsetneqq"); -defineSymbol(math, ams, rel, "\u226f", "\\ngtr"); -defineSymbol(math, ams, rel, "\ue00f", "\\ngeqslant"); -defineSymbol(math, ams, rel, "\ue00e", "\\ngeqq"); -defineSymbol(math, ams, rel, "\u2a88", "\\gneq"); -defineSymbol(math, ams, rel, "\u2269", "\\gneqq"); -defineSymbol(math, ams, rel, "\ue00d", "\\gvertneqq"); -defineSymbol(math, ams, rel, "\u22e7", "\\gnsim"); -defineSymbol(math, ams, rel, "\u2a8a", "\\gnapprox"); -defineSymbol(math, ams, rel, "\u2281", "\\nsucc"); -defineSymbol(math, ams, rel, "\u22e1", "\\nsucceq"); -defineSymbol(math, ams, rel, "\u22e9", "\\succnsim"); -defineSymbol(math, ams, rel, "\u2aba", "\\succnapprox"); -defineSymbol(math, ams, rel, "\u2246", "\\ncong"); -defineSymbol(math, ams, rel, "\ue007", "\\nshortparallel"); -defineSymbol(math, ams, rel, "\u2226", "\\nparallel"); -defineSymbol(math, ams, rel, "\u22af", "\\nVDash"); -defineSymbol(math, ams, rel, "\u22eb", "\\ntriangleright"); -defineSymbol(math, ams, rel, "\u22ed", "\\ntrianglerighteq"); -defineSymbol(math, ams, rel, "\ue018", "\\nsupseteqq"); -defineSymbol(math, ams, rel, "\u228b", "\\supsetneq"); -defineSymbol(math, ams, rel, "\ue01b", "\\varsupsetneq"); -defineSymbol(math, ams, rel, "\u2acc", "\\supsetneqq"); -defineSymbol(math, ams, rel, "\ue019", "\\varsupsetneqq"); -defineSymbol(math, ams, rel, "\u22ae", "\\nVdash"); -defineSymbol(math, ams, rel, "\u2ab5", "\\precneqq"); -defineSymbol(math, ams, rel, "\u2ab6", "\\succneqq"); -defineSymbol(math, ams, rel, "\ue016", "\\nsubseteqq"); -defineSymbol(math, ams, bin, "\u22b4", "\\unlhd"); -defineSymbol(math, ams, bin, "\u22b5", "\\unrhd"); - -// AMS Negated Arrows -defineSymbol(math, ams, rel, "\u219a", "\\nleftarrow"); -defineSymbol(math, ams, rel, "\u219b", "\\nrightarrow"); -defineSymbol(math, ams, rel, "\u21cd", "\\nLeftarrow"); -defineSymbol(math, ams, rel, "\u21cf", "\\nRightarrow"); -defineSymbol(math, ams, rel, "\u21ae", "\\nleftrightarrow"); -defineSymbol(math, ams, rel, "\u21ce", "\\nLeftrightarrow"); - -// AMS Misc -defineSymbol(math, ams, rel, "\u25b3", "\\vartriangle"); -defineSymbol(math, ams, textord, "\u210f", "\\hslash"); -defineSymbol(math, ams, textord, "\u25bd", "\\triangledown"); -defineSymbol(math, ams, textord, "\u25ca", "\\lozenge"); -defineSymbol(math, ams, textord, "\u24c8", "\\circledS"); -defineSymbol(math, ams, textord, "\u00ae", "\\circledR"); -defineSymbol(math, ams, textord, "\u2221", "\\measuredangle"); -defineSymbol(math, ams, textord, "\u2204", "\\nexists"); -defineSymbol(math, ams, textord, "\u2127", "\\mho"); -defineSymbol(math, ams, textord, "\u2132", "\\Finv"); -defineSymbol(math, ams, textord, "\u2141", "\\Game"); -defineSymbol(math, ams, textord, "\u006b", "\\Bbbk"); -defineSymbol(math, ams, textord, "\u2035", "\\backprime"); -defineSymbol(math, ams, textord, "\u25b2", "\\blacktriangle"); -defineSymbol(math, ams, textord, "\u25bc", "\\blacktriangledown"); -defineSymbol(math, ams, textord, "\u25a0", "\\blacksquare"); -defineSymbol(math, ams, textord, "\u29eb", "\\blacklozenge"); -defineSymbol(math, ams, textord, "\u2605", "\\bigstar"); -defineSymbol(math, ams, textord, "\u2222", "\\sphericalangle"); -defineSymbol(math, ams, textord, "\u2201", "\\complement"); -defineSymbol(math, ams, textord, "\u00f0", "\\eth"); -defineSymbol(math, ams, textord, "\u2571", "\\diagup"); -defineSymbol(math, ams, textord, "\u2572", "\\diagdown"); -defineSymbol(math, ams, textord, "\u25a1", "\\square"); -defineSymbol(math, ams, textord, "\u25a1", "\\Box"); -defineSymbol(math, ams, textord, "\u25ca", "\\Diamond"); -defineSymbol(math, ams, textord, "\u00a5", "\\yen"); -defineSymbol(math, ams, textord, "\u2713", "\\checkmark"); - -// AMS Hebrew -defineSymbol(math, ams, textord, "\u2136", "\\beth"); -defineSymbol(math, ams, textord, "\u2138", "\\daleth"); -defineSymbol(math, ams, textord, "\u2137", "\\gimel"); - -// AMS Greek -defineSymbol(math, ams, textord, "\u03dd", "\\digamma"); -defineSymbol(math, ams, textord, "\u03f0", "\\varkappa"); - -// AMS Delimiters -defineSymbol(math, ams, open, "\u250c", "\\ulcorner"); -defineSymbol(math, ams, close, "\u2510", "\\urcorner"); -defineSymbol(math, ams, open, "\u2514", "\\llcorner"); -defineSymbol(math, ams, close, "\u2518", "\\lrcorner"); - -// AMS Binary Relations -defineSymbol(math, ams, rel, "\u2266", "\\leqq"); -defineSymbol(math, ams, rel, "\u2a7d", "\\leqslant"); -defineSymbol(math, ams, rel, "\u2a95", "\\eqslantless"); -defineSymbol(math, ams, rel, "\u2272", "\\lesssim"); -defineSymbol(math, ams, rel, "\u2a85", "\\lessapprox"); -defineSymbol(math, ams, rel, "\u224a", "\\approxeq"); -defineSymbol(math, ams, bin, "\u22d6", "\\lessdot"); -defineSymbol(math, ams, rel, "\u22d8", "\\lll"); -defineSymbol(math, ams, rel, "\u2276", "\\lessgtr"); -defineSymbol(math, ams, rel, "\u22da", "\\lesseqgtr"); -defineSymbol(math, ams, rel, "\u2a8b", "\\lesseqqgtr"); -defineSymbol(math, ams, rel, "\u2251", "\\doteqdot"); -defineSymbol(math, ams, rel, "\u2253", "\\risingdotseq"); -defineSymbol(math, ams, rel, "\u2252", "\\fallingdotseq"); -defineSymbol(math, ams, rel, "\u223d", "\\backsim"); -defineSymbol(math, ams, rel, "\u22cd", "\\backsimeq"); -defineSymbol(math, ams, rel, "\u2ac5", "\\subseteqq"); -defineSymbol(math, ams, rel, "\u22d0", "\\Subset"); -defineSymbol(math, ams, rel, "\u228f", "\\sqsubset"); -defineSymbol(math, ams, rel, "\u227c", "\\preccurlyeq"); -defineSymbol(math, ams, rel, "\u22de", "\\curlyeqprec"); -defineSymbol(math, ams, rel, "\u227e", "\\precsim"); -defineSymbol(math, ams, rel, "\u2ab7", "\\precapprox"); -defineSymbol(math, ams, rel, "\u22b2", "\\vartriangleleft"); -defineSymbol(math, ams, rel, "\u22b4", "\\trianglelefteq"); -defineSymbol(math, ams, rel, "\u22a8", "\\vDash"); -defineSymbol(math, ams, rel, "\u22aa", "\\Vvdash"); -defineSymbol(math, ams, rel, "\u2323", "\\smallsmile"); -defineSymbol(math, ams, rel, "\u2322", "\\smallfrown"); -defineSymbol(math, ams, rel, "\u224f", "\\bumpeq"); -defineSymbol(math, ams, rel, "\u224e", "\\Bumpeq"); -defineSymbol(math, ams, rel, "\u2267", "\\geqq"); -defineSymbol(math, ams, rel, "\u2a7e", "\\geqslant"); -defineSymbol(math, ams, rel, "\u2a96", "\\eqslantgtr"); -defineSymbol(math, ams, rel, "\u2273", "\\gtrsim"); -defineSymbol(math, ams, rel, "\u2a86", "\\gtrapprox"); -defineSymbol(math, ams, bin, "\u22d7", "\\gtrdot"); -defineSymbol(math, ams, rel, "\u22d9", "\\ggg"); -defineSymbol(math, ams, rel, "\u2277", "\\gtrless"); -defineSymbol(math, ams, rel, "\u22db", "\\gtreqless"); -defineSymbol(math, ams, rel, "\u2a8c", "\\gtreqqless"); -defineSymbol(math, ams, rel, "\u2256", "\\eqcirc"); -defineSymbol(math, ams, rel, "\u2257", "\\circeq"); -defineSymbol(math, ams, rel, "\u225c", "\\triangleq"); -defineSymbol(math, ams, rel, "\u223c", "\\thicksim"); -defineSymbol(math, ams, rel, "\u2248", "\\thickapprox"); -defineSymbol(math, ams, rel, "\u2ac6", "\\supseteqq"); -defineSymbol(math, ams, rel, "\u22d1", "\\Supset"); -defineSymbol(math, ams, rel, "\u2290", "\\sqsupset"); -defineSymbol(math, ams, rel, "\u227d", "\\succcurlyeq"); -defineSymbol(math, ams, rel, "\u22df", "\\curlyeqsucc"); -defineSymbol(math, ams, rel, "\u227f", "\\succsim"); -defineSymbol(math, ams, rel, "\u2ab8", "\\succapprox"); -defineSymbol(math, ams, rel, "\u22b3", "\\vartriangleright"); -defineSymbol(math, ams, rel, "\u22b5", "\\trianglerighteq"); -defineSymbol(math, ams, rel, "\u22a9", "\\Vdash"); -defineSymbol(math, ams, rel, "\u2223", "\\shortmid"); -defineSymbol(math, ams, rel, "\u2225", "\\shortparallel"); -defineSymbol(math, ams, rel, "\u226c", "\\between"); -defineSymbol(math, ams, rel, "\u22d4", "\\pitchfork"); -defineSymbol(math, ams, rel, "\u221d", "\\varpropto"); -defineSymbol(math, ams, rel, "\u25c0", "\\blacktriangleleft"); -defineSymbol(math, ams, rel, "\u2234", "\\therefore"); -defineSymbol(math, ams, rel, "\u220d", "\\backepsilon"); -defineSymbol(math, ams, rel, "\u25b6", "\\blacktriangleright"); -defineSymbol(math, ams, rel, "\u2235", "\\because"); -defineSymbol(math, ams, rel, "\u22d8", "\\llless"); -defineSymbol(math, ams, rel, "\u22d9", "\\gggtr"); -defineSymbol(math, ams, bin, "\u22b2", "\\lhd"); -defineSymbol(math, ams, bin, "\u22b3", "\\rhd"); -defineSymbol(math, ams, rel, "\u2242", "\\eqsim"); -defineSymbol(math, main, rel, "\u22c8", "\\Join"); -defineSymbol(math, ams, rel, "\u2251", "\\Doteq"); - -// AMS Binary Operators -defineSymbol(math, ams, bin, "\u2214", "\\dotplus"); -defineSymbol(math, ams, bin, "\u2216", "\\smallsetminus"); -defineSymbol(math, ams, bin, "\u22d2", "\\Cap"); -defineSymbol(math, ams, bin, "\u22d3", "\\Cup"); -defineSymbol(math, ams, bin, "\u2a5e", "\\doublebarwedge"); -defineSymbol(math, ams, bin, "\u229f", "\\boxminus"); -defineSymbol(math, ams, bin, "\u229e", "\\boxplus"); -defineSymbol(math, ams, bin, "\u22c7", "\\divideontimes"); -defineSymbol(math, ams, bin, "\u22c9", "\\ltimes"); -defineSymbol(math, ams, bin, "\u22ca", "\\rtimes"); -defineSymbol(math, ams, bin, "\u22cb", "\\leftthreetimes"); -defineSymbol(math, ams, bin, "\u22cc", "\\rightthreetimes"); -defineSymbol(math, ams, bin, "\u22cf", "\\curlywedge"); -defineSymbol(math, ams, bin, "\u22ce", "\\curlyvee"); -defineSymbol(math, ams, bin, "\u229d", "\\circleddash"); -defineSymbol(math, ams, bin, "\u229b", "\\circledast"); -defineSymbol(math, ams, bin, "\u22c5", "\\centerdot"); -defineSymbol(math, ams, bin, "\u22ba", "\\intercal"); -defineSymbol(math, ams, bin, "\u22d2", "\\doublecap"); -defineSymbol(math, ams, bin, "\u22d3", "\\doublecup"); -defineSymbol(math, ams, bin, "\u22a0", "\\boxtimes"); - -// AMS Arrows -defineSymbol(math, ams, rel, "\u21e2", "\\dashrightarrow"); -defineSymbol(math, ams, rel, "\u21e0", "\\dashleftarrow"); -defineSymbol(math, ams, rel, "\u21c7", "\\leftleftarrows"); -defineSymbol(math, ams, rel, "\u21c6", "\\leftrightarrows"); -defineSymbol(math, ams, rel, "\u21da", "\\Lleftarrow"); -defineSymbol(math, ams, rel, "\u219e", "\\twoheadleftarrow"); -defineSymbol(math, ams, rel, "\u21a2", "\\leftarrowtail"); -defineSymbol(math, ams, rel, "\u21ab", "\\looparrowleft"); -defineSymbol(math, ams, rel, "\u21cb", "\\leftrightharpoons"); -defineSymbol(math, ams, rel, "\u21b6", "\\curvearrowleft"); -defineSymbol(math, ams, rel, "\u21ba", "\\circlearrowleft"); -defineSymbol(math, ams, rel, "\u21b0", "\\Lsh"); -defineSymbol(math, ams, rel, "\u21c8", "\\upuparrows"); -defineSymbol(math, ams, rel, "\u21bf", "\\upharpoonleft"); -defineSymbol(math, ams, rel, "\u21c3", "\\downharpoonleft"); -defineSymbol(math, ams, rel, "\u22b8", "\\multimap"); -defineSymbol(math, ams, rel, "\u21ad", "\\leftrightsquigarrow"); -defineSymbol(math, ams, rel, "\u21c9", "\\rightrightarrows"); -defineSymbol(math, ams, rel, "\u21c4", "\\rightleftarrows"); -defineSymbol(math, ams, rel, "\u21a0", "\\twoheadrightarrow"); -defineSymbol(math, ams, rel, "\u21a3", "\\rightarrowtail"); -defineSymbol(math, ams, rel, "\u21ac", "\\looparrowright"); -defineSymbol(math, ams, rel, "\u21b7", "\\curvearrowright"); -defineSymbol(math, ams, rel, "\u21bb", "\\circlearrowright"); -defineSymbol(math, ams, rel, "\u21b1", "\\Rsh"); -defineSymbol(math, ams, rel, "\u21ca", "\\downdownarrows"); -defineSymbol(math, ams, rel, "\u21be", "\\upharpoonright"); -defineSymbol(math, ams, rel, "\u21c2", "\\downharpoonright"); -defineSymbol(math, ams, rel, "\u21dd", "\\rightsquigarrow"); -defineSymbol(math, ams, rel, "\u21dd", "\\leadsto"); -defineSymbol(math, ams, rel, "\u21db", "\\Rrightarrow"); -defineSymbol(math, ams, rel, "\u21be", "\\restriction"); - -defineSymbol(math, main, textord, "\u2018", "`"); -defineSymbol(math, main, textord, "$", "\\$"); -defineSymbol(math, main, textord, "%", "\\%"); -defineSymbol(math, main, textord, "_", "\\_"); -defineSymbol(math, main, textord, "\u2220", "\\angle"); -defineSymbol(math, main, textord, "\u221e", "\\infty"); -defineSymbol(math, main, textord, "\u2032", "\\prime"); -defineSymbol(math, main, textord, "\u25b3", "\\triangle"); -defineSymbol(math, main, textord, "\u0393", "\\Gamma"); -defineSymbol(math, main, textord, "\u0394", "\\Delta"); -defineSymbol(math, main, textord, "\u0398", "\\Theta"); -defineSymbol(math, main, textord, "\u039b", "\\Lambda"); -defineSymbol(math, main, textord, "\u039e", "\\Xi"); -defineSymbol(math, main, textord, "\u03a0", "\\Pi"); -defineSymbol(math, main, textord, "\u03a3", "\\Sigma"); -defineSymbol(math, main, textord, "\u03a5", "\\Upsilon"); -defineSymbol(math, main, textord, "\u03a6", "\\Phi"); -defineSymbol(math, main, textord, "\u03a8", "\\Psi"); -defineSymbol(math, main, textord, "\u03a9", "\\Omega"); -defineSymbol(math, main, textord, "\u00ac", "\\neg"); -defineSymbol(math, main, textord, "\u00ac", "\\lnot"); -defineSymbol(math, main, textord, "\u22a4", "\\top"); -defineSymbol(math, main, textord, "\u22a5", "\\bot"); -defineSymbol(math, main, textord, "\u2205", "\\emptyset"); -defineSymbol(math, ams, textord, "\u2205", "\\varnothing"); -defineSymbol(math, main, mathord, "\u03b1", "\\alpha"); -defineSymbol(math, main, mathord, "\u03b2", "\\beta"); -defineSymbol(math, main, mathord, "\u03b3", "\\gamma"); -defineSymbol(math, main, mathord, "\u03b4", "\\delta"); -defineSymbol(math, main, mathord, "\u03f5", "\\epsilon"); -defineSymbol(math, main, mathord, "\u03b6", "\\zeta"); -defineSymbol(math, main, mathord, "\u03b7", "\\eta"); -defineSymbol(math, main, mathord, "\u03b8", "\\theta"); -defineSymbol(math, main, mathord, "\u03b9", "\\iota"); -defineSymbol(math, main, mathord, "\u03ba", "\\kappa"); -defineSymbol(math, main, mathord, "\u03bb", "\\lambda"); -defineSymbol(math, main, mathord, "\u03bc", "\\mu"); -defineSymbol(math, main, mathord, "\u03bd", "\\nu"); -defineSymbol(math, main, mathord, "\u03be", "\\xi"); -defineSymbol(math, main, mathord, "o", "\\omicron"); -defineSymbol(math, main, mathord, "\u03c0", "\\pi"); -defineSymbol(math, main, mathord, "\u03c1", "\\rho"); -defineSymbol(math, main, mathord, "\u03c3", "\\sigma"); -defineSymbol(math, main, mathord, "\u03c4", "\\tau"); -defineSymbol(math, main, mathord, "\u03c5", "\\upsilon"); -defineSymbol(math, main, mathord, "\u03d5", "\\phi"); -defineSymbol(math, main, mathord, "\u03c7", "\\chi"); -defineSymbol(math, main, mathord, "\u03c8", "\\psi"); -defineSymbol(math, main, mathord, "\u03c9", "\\omega"); -defineSymbol(math, main, mathord, "\u03b5", "\\varepsilon"); -defineSymbol(math, main, mathord, "\u03d1", "\\vartheta"); -defineSymbol(math, main, mathord, "\u03d6", "\\varpi"); -defineSymbol(math, main, mathord, "\u03f1", "\\varrho"); -defineSymbol(math, main, mathord, "\u03c2", "\\varsigma"); -defineSymbol(math, main, mathord, "\u03c6", "\\varphi"); -defineSymbol(math, main, bin, "\u2217", "*"); -defineSymbol(math, main, bin, "+", "+"); -defineSymbol(math, main, bin, "\u2212", "-"); -defineSymbol(math, main, bin, "\u22c5", "\\cdot"); -defineSymbol(math, main, bin, "\u2218", "\\circ"); -defineSymbol(math, main, bin, "\u00f7", "\\div"); -defineSymbol(math, main, bin, "\u00b1", "\\pm"); -defineSymbol(math, main, bin, "\u00d7", "\\times"); -defineSymbol(math, main, bin, "\u2229", "\\cap"); -defineSymbol(math, main, bin, "\u222a", "\\cup"); -defineSymbol(math, main, bin, "\u2216", "\\setminus"); -defineSymbol(math, main, bin, "\u2227", "\\land"); -defineSymbol(math, main, bin, "\u2228", "\\lor"); -defineSymbol(math, main, bin, "\u2227", "\\wedge"); -defineSymbol(math, main, bin, "\u2228", "\\vee"); -defineSymbol(math, main, textord, "\u221a", "\\surd"); -defineSymbol(math, main, open, "(", "("); -defineSymbol(math, main, open, "[", "["); -defineSymbol(math, main, open, "\u27e8", "\\langle"); -defineSymbol(math, main, open, "\u2223", "\\lvert"); -defineSymbol(math, main, open, "\u2225", "\\lVert"); -defineSymbol(math, main, close, ")", ")"); -defineSymbol(math, main, close, "]", "]"); -defineSymbol(math, main, close, "?", "?"); -defineSymbol(math, main, close, "!", "!"); -defineSymbol(math, main, close, "\u27e9", "\\rangle"); -defineSymbol(math, main, close, "\u2223", "\\rvert"); -defineSymbol(math, main, close, "\u2225", "\\rVert"); -defineSymbol(math, main, rel, "=", "="); -defineSymbol(math, main, rel, "<", "<"); -defineSymbol(math, main, rel, ">", ">"); -defineSymbol(math, main, rel, ":", ":"); -defineSymbol(math, main, rel, "\u2248", "\\approx"); -defineSymbol(math, main, rel, "\u2245", "\\cong"); -defineSymbol(math, main, rel, "\u2265", "\\ge"); -defineSymbol(math, main, rel, "\u2265", "\\geq"); -defineSymbol(math, main, rel, "\u2190", "\\gets"); -defineSymbol(math, main, rel, ">", "\\gt"); -defineSymbol(math, main, rel, "\u2208", "\\in"); -defineSymbol(math, main, rel, "\u2209", "\\notin"); -defineSymbol(math, main, rel, "\u2282", "\\subset"); -defineSymbol(math, main, rel, "\u2283", "\\supset"); -defineSymbol(math, main, rel, "\u2286", "\\subseteq"); -defineSymbol(math, main, rel, "\u2287", "\\supseteq"); -defineSymbol(math, ams, rel, "\u2288", "\\nsubseteq"); -defineSymbol(math, ams, rel, "\u2289", "\\nsupseteq"); -defineSymbol(math, main, rel, "\u22a8", "\\models"); -defineSymbol(math, main, rel, "\u2190", "\\leftarrow"); -defineSymbol(math, main, rel, "\u2264", "\\le"); -defineSymbol(math, main, rel, "\u2264", "\\leq"); -defineSymbol(math, main, rel, "<", "\\lt"); -defineSymbol(math, main, rel, "\u2260", "\\ne"); -defineSymbol(math, main, rel, "\u2260", "\\neq"); -defineSymbol(math, main, rel, "\u2192", "\\rightarrow"); -defineSymbol(math, main, rel, "\u2192", "\\to"); -defineSymbol(math, ams, rel, "\u2271", "\\ngeq"); -defineSymbol(math, ams, rel, "\u2270", "\\nleq"); -defineSymbol(math, main, spacing, null, "\\!"); -defineSymbol(math, main, spacing, "\u00a0", "\\ "); -defineSymbol(math, main, spacing, "\u00a0", "~"); -defineSymbol(math, main, spacing, null, "\\,"); -defineSymbol(math, main, spacing, null, "\\:"); -defineSymbol(math, main, spacing, null, "\\;"); -defineSymbol(math, main, spacing, null, "\\enspace"); -defineSymbol(math, main, spacing, null, "\\qquad"); -defineSymbol(math, main, spacing, null, "\\quad"); -defineSymbol(math, main, spacing, "\u00a0", "\\space"); -defineSymbol(math, main, punct, ",", ","); -defineSymbol(math, main, punct, ";", ";"); -defineSymbol(math, main, punct, ":", "\\colon"); -defineSymbol(math, ams, bin, "\u22bc", "\\barwedge"); -defineSymbol(math, ams, bin, "\u22bb", "\\veebar"); -defineSymbol(math, main, bin, "\u2299", "\\odot"); -defineSymbol(math, main, bin, "\u2295", "\\oplus"); -defineSymbol(math, main, bin, "\u2297", "\\otimes"); -defineSymbol(math, main, textord, "\u2202", "\\partial"); -defineSymbol(math, main, bin, "\u2298", "\\oslash"); -defineSymbol(math, ams, bin, "\u229a", "\\circledcirc"); -defineSymbol(math, ams, bin, "\u22a1", "\\boxdot"); -defineSymbol(math, main, bin, "\u25b3", "\\bigtriangleup"); -defineSymbol(math, main, bin, "\u25bd", "\\bigtriangledown"); -defineSymbol(math, main, bin, "\u2020", "\\dagger"); -defineSymbol(math, main, bin, "\u22c4", "\\diamond"); -defineSymbol(math, main, bin, "\u22c6", "\\star"); -defineSymbol(math, main, bin, "\u25c3", "\\triangleleft"); -defineSymbol(math, main, bin, "\u25b9", "\\triangleright"); -defineSymbol(math, main, open, "{", "\\{"); -defineSymbol(math, main, close, "}", "\\}"); -defineSymbol(math, main, open, "{", "\\lbrace"); -defineSymbol(math, main, close, "}", "\\rbrace"); -defineSymbol(math, main, open, "[", "\\lbrack"); -defineSymbol(math, main, close, "]", "\\rbrack"); -defineSymbol(math, main, open, "\u230a", "\\lfloor"); -defineSymbol(math, main, close, "\u230b", "\\rfloor"); -defineSymbol(math, main, open, "\u2308", "\\lceil"); -defineSymbol(math, main, close, "\u2309", "\\rceil"); -defineSymbol(math, main, textord, "\\", "\\backslash"); -defineSymbol(math, main, textord, "\u2223", "|"); -defineSymbol(math, main, textord, "\u2223", "\\vert"); -defineSymbol(math, main, textord, "\u2225", "\\|"); -defineSymbol(math, main, textord, "\u2225", "\\Vert"); -defineSymbol(math, main, rel, "\u2191", "\\uparrow"); -defineSymbol(math, main, rel, "\u21d1", "\\Uparrow"); -defineSymbol(math, main, rel, "\u2193", "\\downarrow"); -defineSymbol(math, main, rel, "\u21d3", "\\Downarrow"); -defineSymbol(math, main, rel, "\u2195", "\\updownarrow"); -defineSymbol(math, main, rel, "\u21d5", "\\Updownarrow"); -defineSymbol(math, math, op, "\u2210", "\\coprod"); -defineSymbol(math, math, op, "\u22c1", "\\bigvee"); -defineSymbol(math, math, op, "\u22c0", "\\bigwedge"); -defineSymbol(math, math, op, "\u2a04", "\\biguplus"); -defineSymbol(math, math, op, "\u22c2", "\\bigcap"); -defineSymbol(math, math, op, "\u22c3", "\\bigcup"); -defineSymbol(math, math, op, "\u222b", "\\int"); -defineSymbol(math, math, op, "\u222b", "\\intop"); -defineSymbol(math, math, op, "\u222c", "\\iint"); -defineSymbol(math, math, op, "\u222d", "\\iiint"); -defineSymbol(math, math, op, "\u220f", "\\prod"); -defineSymbol(math, math, op, "\u2211", "\\sum"); -defineSymbol(math, math, op, "\u2a02", "\\bigotimes"); -defineSymbol(math, math, op, "\u2a01", "\\bigoplus"); -defineSymbol(math, math, op, "\u2a00", "\\bigodot"); -defineSymbol(math, math, op, "\u222e", "\\oint"); -defineSymbol(math, math, op, "\u2a06", "\\bigsqcup"); -defineSymbol(math, math, op, "\u222b", "\\smallint"); -defineSymbol(math, main, inner, "\u2026", "\\ldots"); -defineSymbol(math, main, inner, "\u22ef", "\\cdots"); -defineSymbol(math, main, inner, "\u22f1", "\\ddots"); -defineSymbol(math, main, textord, "\u22ee", "\\vdots"); -defineSymbol(math, main, accent, "\u00b4", "\\acute"); -defineSymbol(math, main, accent, "\u0060", "\\grave"); -defineSymbol(math, main, accent, "\u00a8", "\\ddot"); -defineSymbol(math, main, accent, "\u007e", "\\tilde"); -defineSymbol(math, main, accent, "\u00af", "\\bar"); -defineSymbol(math, main, accent, "\u02d8", "\\breve"); -defineSymbol(math, main, accent, "\u02c7", "\\check"); -defineSymbol(math, main, accent, "\u005e", "\\hat"); -defineSymbol(math, main, accent, "\u20d7", "\\vec"); -defineSymbol(math, main, accent, "\u02d9", "\\dot"); -defineSymbol(math, main, mathord, "\u0131", "\\imath"); -defineSymbol(math, main, mathord, "\u0237", "\\jmath"); - -defineSymbol(text, main, textord, "\u2013", "--"); -defineSymbol(text, main, textord, "\u2014", "---"); -defineSymbol(text, main, textord, "\u2018", "`"); -defineSymbol(text, main, textord, "\u2019", "'"); -defineSymbol(text, main, textord, "\u201c", "``"); -defineSymbol(text, main, textord, "\u201d", "''"); -defineSymbol(math, main, textord, "\u00b0", "\\degree"); -defineSymbol(text, main, textord, "\u00b0", "\\degree"); -defineSymbol(math, main, mathord, "\u00a3", "\\pounds"); -defineSymbol(math, ams, textord, "\u2720", "\\maltese"); -defineSymbol(text, ams, textord, "\u2720", "\\maltese"); - -defineSymbol(text, main, spacing, "\u00a0", "\\ "); -defineSymbol(text, main, spacing, "\u00a0", " "); -defineSymbol(text, main, spacing, "\u00a0", "~"); - -// There are lots of symbols which are the same, so we add them in afterwards. -var i; -var ch; - -// All of these are textords in math mode -var mathTextSymbols = "0123456789/@.\""; -for (i = 0; i < mathTextSymbols.length; i++) { - ch = mathTextSymbols.charAt(i); - defineSymbol(math, main, textord, ch, ch); -} - -// All of these are textords in text mode -var textSymbols = "0123456789!@*()-=+[]\";:?/.,"; -for (i = 0; i < textSymbols.length; i++) { - ch = textSymbols.charAt(i); - defineSymbol(text, main, textord, ch, ch); -} - -// All of these are textords in text mode, and mathords in math mode -var letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; -for (i = 0; i < letters.length; i++) { - ch = letters.charAt(i); - defineSymbol(math, main, mathord, ch, ch); - defineSymbol(text, main, textord, ch, ch); -} - -// Latin-1 letters -for (i = 0x00C0; i <= 0x00D6; i++) { - ch = String.fromCharCode(i); - defineSymbol(text, main, textord, ch, ch); -} - -for (i = 0x00D8; i <= 0x00F6; i++) { - ch = String.fromCharCode(i); - defineSymbol(text, main, textord, ch, ch); -} - -for (i = 0x00F8; i <= 0x00FF; i++) { - ch = String.fromCharCode(i); - defineSymbol(text, main, textord, ch, ch); -} - -// Cyrillic -for (i = 0x0410; i <= 0x044F; i++) { - ch = String.fromCharCode(i); - defineSymbol(text, main, textord, ch, ch); -} - -},{}],24:[function(require,module,exports){ -var hangulRegex = /[\uAC00-\uD7AF]/; - -// This regex combines -// - Hiragana: [\u3040-\u309F] -// - Katakana: [\u30A0-\u30FF] -// - CJK ideograms: [\u4E00-\u9FAF] -// - Hangul syllables: [\uAC00-\uD7AF] -// Notably missing are halfwidth Katakana and Romanji glyphs. -var cjkRegex = - /[\u3040-\u309F]|[\u30A0-\u30FF]|[\u4E00-\u9FAF]|[\uAC00-\uD7AF]/; - -module.exports = { - cjkRegex: cjkRegex, - hangulRegex: hangulRegex, -}; - -},{}],25:[function(require,module,exports){ -/** - * This file contains a list of utility functions which are useful in other - * files. - */ - -/** - * Provide an `indexOf` function which works in IE8, but defers to native if - * possible. - */ -var nativeIndexOf = Array.prototype.indexOf; -var indexOf = function(list, elem) { - if (list == null) { - return -1; - } - if (nativeIndexOf && list.indexOf === nativeIndexOf) { - return list.indexOf(elem); - } - var i = 0; - var l = list.length; - for (; i < l; i++) { - if (list[i] === elem) { - return i; - } - } - return -1; -}; - -/** - * Return whether an element is contained in a list - */ -var contains = function(list, elem) { - return indexOf(list, elem) !== -1; -}; - -/** - * Provide a default value if a setting is undefined - */ -var deflt = function(setting, defaultIfUndefined) { - return setting === undefined ? defaultIfUndefined : setting; -}; - -// hyphenate and escape adapted from Facebook's React under Apache 2 license - -var uppercase = /([A-Z])/g; -var hyphenate = function(str) { - return str.replace(uppercase, "-$1").toLowerCase(); -}; - -var ESCAPE_LOOKUP = { - "&": "&", - ">": ">", - "<": "<", - "\"": """, - "'": "'", -}; - -var ESCAPE_REGEX = /[&><"']/g; - -function escaper(match) { - return ESCAPE_LOOKUP[match]; -} - -/** - * Escapes text to prevent scripting attacks. - * - * @param {*} text Text value to escape. - * @return {string} An escaped string. - */ -function escape(text) { - return ("" + text).replace(ESCAPE_REGEX, escaper); -} - -/** - * A function to set the text content of a DOM element in all supported - * browsers. Note that we don't define this if there is no document. - */ -var setTextContent; -if (typeof document !== "undefined") { - var testNode = document.createElement("span"); - if ("textContent" in testNode) { - setTextContent = function(node, text) { - node.textContent = text; - }; - } else { - setTextContent = function(node, text) { - node.innerText = text; - }; - } -} - -/** - * A function to clear a node. - */ -function clearNode(node) { - setTextContent(node, ""); -} - -module.exports = { - contains: contains, - deflt: deflt, - escape: escape, - hyphenate: hyphenate, - indexOf: indexOf, - setTextContent: setTextContent, - clearNode: clearNode, -}; - -},{}]},{},[1])(1) -});
\ No newline at end of file diff --git a/vendor/assets/stylesheets/katex.scss b/vendor/assets/stylesheets/katex.scss deleted file mode 100644 index b45836716f2..00000000000 --- a/vendor/assets/stylesheets/katex.scss +++ /dev/null @@ -1,977 +0,0 @@ -/* -The MIT License (MIT) - -Copyright (c) 2015 Khan Academy - -This software also uses portions of the underscore.js project, which is -MIT licensed with the following copyright: - -Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative -Reporters & Editors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -/* - Here is how to build a version of KaTeX that works with gitlab. - - The problem is that the standard procedure for changing font location doesn't work for the empty string. - - 1. Clone KaTeX. Anything later than 4fb9445a9 (is merged into master) will do. - 2. make (requires node) - 3. sed -e 's,fonts/,,' -e 's/url\(([^)]*)\)/url(font-path\1)/g' build/katex.css > build/katex.scss - 4. Copy build/katex.js to gitlab/vendor/assets/javascripts/katex.js, - build/katex.scss to gitlab/vendor/assets/stylesheets/katex.scss and - fonts/* to gitlab/vendor/assets/fonts/. -*/ - -@font-face { - font-family: 'KaTeX_AMS'; - src: url(font-path('KaTeX_AMS-Regular.eot')); - src: url(font-path('KaTeX_AMS-Regular.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_AMS-Regular.woff2')) format('woff2'), url(font-path('KaTeX_AMS-Regular.woff')) format('woff'), url(font-path('KaTeX_AMS-Regular.ttf')) format('truetype'); - font-weight: 400; - font-style: normal; -} -@font-face { - font-family: 'KaTeX_Caligraphic'; - src: url(font-path('KaTeX_Caligraphic-Bold.eot')); - src: url(font-path('KaTeX_Caligraphic-Bold.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_Caligraphic-Bold.woff2')) format('woff2'), url(font-path('KaTeX_Caligraphic-Bold.woff')) format('woff'), url(font-path('KaTeX_Caligraphic-Bold.ttf')) format('truetype'); - font-weight: 600; - font-style: normal; -} -@font-face { - font-family: 'KaTeX_Caligraphic'; - src: url(font-path('KaTeX_Caligraphic-Regular.eot')); - src: url(font-path('KaTeX_Caligraphic-Regular.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_Caligraphic-Regular.woff2')) format('woff2'), url(font-path('KaTeX_Caligraphic-Regular.woff')) format('woff'), url(font-path('KaTeX_Caligraphic-Regular.ttf')) format('truetype'); - font-weight: 400; - font-style: normal; -} -@font-face { - font-family: 'KaTeX_Fraktur'; - src: url(font-path('KaTeX_Fraktur-Bold.eot')); - src: url(font-path('KaTeX_Fraktur-Bold.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_Fraktur-Bold.woff2')) format('woff2'), url(font-path('KaTeX_Fraktur-Bold.woff')) format('woff'), url(font-path('KaTeX_Fraktur-Bold.ttf')) format('truetype'); - font-weight: 600; - font-style: normal; -} -@font-face { - font-family: 'KaTeX_Fraktur'; - src: url(font-path('KaTeX_Fraktur-Regular.eot')); - src: url(font-path('KaTeX_Fraktur-Regular.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_Fraktur-Regular.woff2')) format('woff2'), url(font-path('KaTeX_Fraktur-Regular.woff')) format('woff'), url(font-path('KaTeX_Fraktur-Regular.ttf')) format('truetype'); - font-weight: 400; - font-style: normal; -} -@font-face { - font-family: 'KaTeX_Main'; - src: url(font-path('KaTeX_Main-Bold.eot')); - src: url(font-path('KaTeX_Main-Bold.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_Main-Bold.woff2')) format('woff2'), url(font-path('KaTeX_Main-Bold.woff')) format('woff'), url(font-path('KaTeX_Main-Bold.ttf')) format('truetype'); - font-weight: 600; - font-style: normal; -} -@font-face { - font-family: 'KaTeX_Main'; - src: url(font-path('KaTeX_Main-Italic.eot')); - src: url(font-path('KaTeX_Main-Italic.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_Main-Italic.woff2')) format('woff2'), url(font-path('KaTeX_Main-Italic.woff')) format('woff'), url(font-path('KaTeX_Main-Italic.ttf')) format('truetype'); - font-weight: 400; - font-style: italic; -} -@font-face { - font-family: 'KaTeX_Main'; - src: url(font-path('KaTeX_Main-Regular.eot')); - src: url(font-path('KaTeX_Main-Regular.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_Main-Regular.woff2')) format('woff2'), url(font-path('KaTeX_Main-Regular.woff')) format('woff'), url(font-path('KaTeX_Main-Regular.ttf')) format('truetype'); - font-weight: 400; - font-style: normal; -} -@font-face { - font-family: 'KaTeX_Math'; - src: url(font-path('KaTeX_Math-Italic.eot')); - src: url(font-path('KaTeX_Math-Italic.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_Math-Italic.woff2')) format('woff2'), url(font-path('KaTeX_Math-Italic.woff')) format('woff'), url(font-path('KaTeX_Math-Italic.ttf')) format('truetype'); - font-weight: 400; - font-style: italic; -} -@font-face { - font-family: 'KaTeX_SansSerif'; - src: url(font-path('KaTeX_SansSerif-Regular.eot')); - src: url(font-path('KaTeX_SansSerif-Regular.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_SansSerif-Regular.woff2')) format('woff2'), url(font-path('KaTeX_SansSerif-Regular.woff')) format('woff'), url(font-path('KaTeX_SansSerif-Regular.ttf')) format('truetype'); - font-weight: 400; - font-style: normal; -} -@font-face { - font-family: 'KaTeX_Script'; - src: url(font-path('KaTeX_Script-Regular.eot')); - src: url(font-path('KaTeX_Script-Regular.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_Script-Regular.woff2')) format('woff2'), url(font-path('KaTeX_Script-Regular.woff')) format('woff'), url(font-path('KaTeX_Script-Regular.ttf')) format('truetype'); - font-weight: 400; - font-style: normal; -} -@font-face { - font-family: 'KaTeX_Size1'; - src: url(font-path('KaTeX_Size1-Regular.eot')); - src: url(font-path('KaTeX_Size1-Regular.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_Size1-Regular.woff2')) format('woff2'), url(font-path('KaTeX_Size1-Regular.woff')) format('woff'), url(font-path('KaTeX_Size1-Regular.ttf')) format('truetype'); - font-weight: 400; - font-style: normal; -} -@font-face { - font-family: 'KaTeX_Size2'; - src: url(font-path('KaTeX_Size2-Regular.eot')); - src: url(font-path('KaTeX_Size2-Regular.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_Size2-Regular.woff2')) format('woff2'), url(font-path('KaTeX_Size2-Regular.woff')) format('woff'), url(font-path('KaTeX_Size2-Regular.ttf')) format('truetype'); - font-weight: 400; - font-style: normal; -} -@font-face { - font-family: 'KaTeX_Size3'; - src: url(font-path('KaTeX_Size3-Regular.eot')); - src: url(font-path('KaTeX_Size3-Regular.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_Size3-Regular.woff2')) format('woff2'), url(font-path('KaTeX_Size3-Regular.woff')) format('woff'), url(font-path('KaTeX_Size3-Regular.ttf')) format('truetype'); - font-weight: 400; - font-style: normal; -} -@font-face { - font-family: 'KaTeX_Size4'; - src: url(font-path('KaTeX_Size4-Regular.eot')); - src: url(font-path('KaTeX_Size4-Regular.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_Size4-Regular.woff2')) format('woff2'), url(font-path('KaTeX_Size4-Regular.woff')) format('woff'), url(font-path('KaTeX_Size4-Regular.ttf')) format('truetype'); - font-weight: 400; - font-style: normal; -} -@font-face { - font-family: 'KaTeX_Typewriter'; - src: url(font-path('KaTeX_Typewriter-Regular.eot')); - src: url(font-path('KaTeX_Typewriter-Regular.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_Typewriter-Regular.woff2')) format('woff2'), url(font-path('KaTeX_Typewriter-Regular.woff')) format('woff'), url(font-path('KaTeX_Typewriter-Regular.ttf')) format('truetype'); - font-weight: 400; - font-style: normal; -} -.katex-display { - display: block; - margin: 1em 0; - text-align: center; -} -.katex-display > .katex { - display: inline-block; - text-align: initial; -} -.katex { - font: normal 1.21em KaTeX_Main, Times New Roman, serif; - line-height: 1.2; - white-space: nowrap; - text-indent: 0; -} -.katex .katex-html { - display: inline-block; -} -.katex .katex-mathml { - position: absolute; - clip: rect(1px, 1px, 1px, 1px); - padding: 0; - border: 0; - height: 1px; - width: 1px; - overflow: hidden; -} -.katex .base { - display: inline-block; -} -.katex .strut { - display: inline-block; -} -.katex .mathit { - font-family: KaTeX_Math; - font-style: italic; -} -.katex .mathbf { - font-family: KaTeX_Main; - font-weight: 600; -} -.katex .amsrm { - font-family: KaTeX_AMS; -} -.katex .mathbb { - font-family: KaTeX_AMS; -} -.katex .mathcal { - font-family: KaTeX_Caligraphic; -} -.katex .mathfrak { - font-family: KaTeX_Fraktur; -} -.katex .mathtt { - font-family: KaTeX_Typewriter; -} -.katex .mathscr { - font-family: KaTeX_Script; -} -.katex .mathsf { - font-family: KaTeX_SansSerif; -} -.katex .mainit { - font-family: KaTeX_Main; - font-style: italic; -} -.katex .textstyle > .mord + .mop { - margin-left: 0.16667em; -} -.katex .textstyle > .mord + .mbin { - margin-left: 0.22222em; -} -.katex .textstyle > .mord + .mrel { - margin-left: 0.27778em; -} -.katex .textstyle > .mord + .minner { - margin-left: 0.16667em; -} -.katex .textstyle > .mop + .mord { - margin-left: 0.16667em; -} -.katex .textstyle > .mop + .mop { - margin-left: 0.16667em; -} -.katex .textstyle > .mop + .mrel { - margin-left: 0.27778em; -} -.katex .textstyle > .mop + .minner { - margin-left: 0.16667em; -} -.katex .textstyle > .mbin + .mord { - margin-left: 0.22222em; -} -.katex .textstyle > .mbin + .mop { - margin-left: 0.22222em; -} -.katex .textstyle > .mbin + .mopen { - margin-left: 0.22222em; -} -.katex .textstyle > .mbin + .minner { - margin-left: 0.22222em; -} -.katex .textstyle > .mrel + .mord { - margin-left: 0.27778em; -} -.katex .textstyle > .mrel + .mop { - margin-left: 0.27778em; -} -.katex .textstyle > .mrel + .mopen { - margin-left: 0.27778em; -} -.katex .textstyle > .mrel + .minner { - margin-left: 0.27778em; -} -.katex .textstyle > .mclose + .mop { - margin-left: 0.16667em; -} -.katex .textstyle > .mclose + .mbin { - margin-left: 0.22222em; -} -.katex .textstyle > .mclose + .mrel { - margin-left: 0.27778em; -} -.katex .textstyle > .mclose + .minner { - margin-left: 0.16667em; -} -.katex .textstyle > .mpunct + .mord { - margin-left: 0.16667em; -} -.katex .textstyle > .mpunct + .mop { - margin-left: 0.16667em; -} -.katex .textstyle > .mpunct + .mrel { - margin-left: 0.16667em; -} -.katex .textstyle > .mpunct + .mopen { - margin-left: 0.16667em; -} -.katex .textstyle > .mpunct + .mclose { - margin-left: 0.16667em; -} -.katex .textstyle > .mpunct + .mpunct { - margin-left: 0.16667em; -} -.katex .textstyle > .mpunct + .minner { - margin-left: 0.16667em; -} -.katex .textstyle > .minner + .mord { - margin-left: 0.16667em; -} -.katex .textstyle > .minner + .mop { - margin-left: 0.16667em; -} -.katex .textstyle > .minner + .mbin { - margin-left: 0.22222em; -} -.katex .textstyle > .minner + .mrel { - margin-left: 0.27778em; -} -.katex .textstyle > .minner + .mopen { - margin-left: 0.16667em; -} -.katex .textstyle > .minner + .mpunct { - margin-left: 0.16667em; -} -.katex .textstyle > .minner + .minner { - margin-left: 0.16667em; -} -.katex .mord + .mop { - margin-left: 0.16667em; -} -.katex .mop + .mord { - margin-left: 0.16667em; -} -.katex .mop + .mop { - margin-left: 0.16667em; -} -.katex .mclose + .mop { - margin-left: 0.16667em; -} -.katex .minner + .mop { - margin-left: 0.16667em; -} -.katex .reset-textstyle.textstyle { - font-size: 1em; -} -.katex .reset-textstyle.scriptstyle { - font-size: 0.7em; -} -.katex .reset-textstyle.scriptscriptstyle { - font-size: 0.5em; -} -.katex .reset-scriptstyle.textstyle { - font-size: 1.42857em; -} -.katex .reset-scriptstyle.scriptstyle { - font-size: 1em; -} -.katex .reset-scriptstyle.scriptscriptstyle { - font-size: 0.71429em; -} -.katex .reset-scriptscriptstyle.textstyle { - font-size: 2em; -} -.katex .reset-scriptscriptstyle.scriptstyle { - font-size: 1.4em; -} -.katex .reset-scriptscriptstyle.scriptscriptstyle { - font-size: 1em; -} -.katex .style-wrap { - position: relative; -} -.katex .vlist { - display: inline-block; -} -.katex .vlist > span { - display: block; - height: 0; - position: relative; -} -.katex .vlist > span > span { - display: inline-block; -} -.katex .vlist .baseline-fix { - display: inline-table; - table-layout: fixed; -} -.katex .msupsub { - text-align: left; -} -.katex .mfrac > span > span { - text-align: center; -} -.katex .mfrac .frac-line { - width: 100%; -} -.katex .mfrac .frac-line:before { - border-bottom-style: solid; - border-bottom-width: 1px; - content: ""; - display: block; -} -.katex .mfrac .frac-line:after { - border-bottom-style: solid; - border-bottom-width: 0.04em; - content: ""; - display: block; - margin-top: -1px; -} -.katex .mspace { - display: inline-block; -} -.katex .mspace.negativethinspace { - margin-left: -0.16667em; -} -.katex .mspace.thinspace { - width: 0.16667em; -} -.katex .mspace.mediumspace { - width: 0.22222em; -} -.katex .mspace.thickspace { - width: 0.27778em; -} -.katex .mspace.enspace { - width: 0.5em; -} -.katex .mspace.quad { - width: 1em; -} -.katex .mspace.qquad { - width: 2em; -} -.katex .llap, -.katex .rlap { - width: 0; - position: relative; -} -.katex .llap > .inner, -.katex .rlap > .inner { - position: absolute; -} -.katex .llap > .fix, -.katex .rlap > .fix { - display: inline-block; -} -.katex .llap > .inner { - right: 0; -} -.katex .rlap > .inner { - left: 0; -} -.katex .katex-logo .a { - font-size: 0.75em; - margin-left: -0.32em; - position: relative; - top: -0.2em; -} -.katex .katex-logo .t { - margin-left: -0.23em; -} -.katex .katex-logo .e { - margin-left: -0.1667em; - position: relative; - top: 0.2155em; -} -.katex .katex-logo .x { - margin-left: -0.125em; -} -.katex .rule { - display: inline-block; - border: solid 0; - position: relative; -} -.katex .overline .overline-line, -.katex .underline .underline-line { - width: 100%; -} -.katex .overline .overline-line:before, -.katex .underline .underline-line:before { - border-bottom-style: solid; - border-bottom-width: 1px; - content: ""; - display: block; -} -.katex .overline .overline-line:after, -.katex .underline .underline-line:after { - border-bottom-style: solid; - border-bottom-width: 0.04em; - content: ""; - display: block; - margin-top: -1px; -} -.katex .sqrt > .sqrt-sign { - position: relative; -} -.katex .sqrt .sqrt-line { - width: 100%; -} -.katex .sqrt .sqrt-line:before { - border-bottom-style: solid; - border-bottom-width: 1px; - content: ""; - display: block; -} -.katex .sqrt .sqrt-line:after { - border-bottom-style: solid; - border-bottom-width: 0.04em; - content: ""; - display: block; - margin-top: -1px; -} -.katex .sqrt > .root { - margin-left: 0.27777778em; - margin-right: -0.55555556em; -} -.katex .sizing, -.katex .fontsize-ensurer { - display: inline-block; -} -.katex .sizing.reset-size1.size1, -.katex .fontsize-ensurer.reset-size1.size1 { - font-size: 1em; -} -.katex .sizing.reset-size1.size2, -.katex .fontsize-ensurer.reset-size1.size2 { - font-size: 1.4em; -} -.katex .sizing.reset-size1.size3, -.katex .fontsize-ensurer.reset-size1.size3 { - font-size: 1.6em; -} -.katex .sizing.reset-size1.size4, -.katex .fontsize-ensurer.reset-size1.size4 { - font-size: 1.8em; -} -.katex .sizing.reset-size1.size5, -.katex .fontsize-ensurer.reset-size1.size5 { - font-size: 2em; -} -.katex .sizing.reset-size1.size6, -.katex .fontsize-ensurer.reset-size1.size6 { - font-size: 2.4em; -} -.katex .sizing.reset-size1.size7, -.katex .fontsize-ensurer.reset-size1.size7 { - font-size: 2.88em; -} -.katex .sizing.reset-size1.size8, -.katex .fontsize-ensurer.reset-size1.size8 { - font-size: 3.46em; -} -.katex .sizing.reset-size1.size9, -.katex .fontsize-ensurer.reset-size1.size9 { - font-size: 4.14em; -} -.katex .sizing.reset-size1.size10, -.katex .fontsize-ensurer.reset-size1.size10 { - font-size: 4.98em; -} -.katex .sizing.reset-size2.size1, -.katex .fontsize-ensurer.reset-size2.size1 { - font-size: 0.71428571em; -} -.katex .sizing.reset-size2.size2, -.katex .fontsize-ensurer.reset-size2.size2 { - font-size: 1em; -} -.katex .sizing.reset-size2.size3, -.katex .fontsize-ensurer.reset-size2.size3 { - font-size: 1.14285714em; -} -.katex .sizing.reset-size2.size4, -.katex .fontsize-ensurer.reset-size2.size4 { - font-size: 1.28571429em; -} -.katex .sizing.reset-size2.size5, -.katex .fontsize-ensurer.reset-size2.size5 { - font-size: 1.42857143em; -} -.katex .sizing.reset-size2.size6, -.katex .fontsize-ensurer.reset-size2.size6 { - font-size: 1.71428571em; -} -.katex .sizing.reset-size2.size7, -.katex .fontsize-ensurer.reset-size2.size7 { - font-size: 2.05714286em; -} -.katex .sizing.reset-size2.size8, -.katex .fontsize-ensurer.reset-size2.size8 { - font-size: 2.47142857em; -} -.katex .sizing.reset-size2.size9, -.katex .fontsize-ensurer.reset-size2.size9 { - font-size: 2.95714286em; -} -.katex .sizing.reset-size2.size10, -.katex .fontsize-ensurer.reset-size2.size10 { - font-size: 3.55714286em; -} -.katex .sizing.reset-size3.size1, -.katex .fontsize-ensurer.reset-size3.size1 { - font-size: 0.625em; -} -.katex .sizing.reset-size3.size2, -.katex .fontsize-ensurer.reset-size3.size2 { - font-size: 0.875em; -} -.katex .sizing.reset-size3.size3, -.katex .fontsize-ensurer.reset-size3.size3 { - font-size: 1em; -} -.katex .sizing.reset-size3.size4, -.katex .fontsize-ensurer.reset-size3.size4 { - font-size: 1.125em; -} -.katex .sizing.reset-size3.size5, -.katex .fontsize-ensurer.reset-size3.size5 { - font-size: 1.25em; -} -.katex .sizing.reset-size3.size6, -.katex .fontsize-ensurer.reset-size3.size6 { - font-size: 1.5em; -} -.katex .sizing.reset-size3.size7, -.katex .fontsize-ensurer.reset-size3.size7 { - font-size: 1.8em; -} -.katex .sizing.reset-size3.size8, -.katex .fontsize-ensurer.reset-size3.size8 { - font-size: 2.1625em; -} -.katex .sizing.reset-size3.size9, -.katex .fontsize-ensurer.reset-size3.size9 { - font-size: 2.5875em; -} -.katex .sizing.reset-size3.size10, -.katex .fontsize-ensurer.reset-size3.size10 { - font-size: 3.1125em; -} -.katex .sizing.reset-size4.size1, -.katex .fontsize-ensurer.reset-size4.size1 { - font-size: 0.55555556em; -} -.katex .sizing.reset-size4.size2, -.katex .fontsize-ensurer.reset-size4.size2 { - font-size: 0.77777778em; -} -.katex .sizing.reset-size4.size3, -.katex .fontsize-ensurer.reset-size4.size3 { - font-size: 0.88888889em; -} -.katex .sizing.reset-size4.size4, -.katex .fontsize-ensurer.reset-size4.size4 { - font-size: 1em; -} -.katex .sizing.reset-size4.size5, -.katex .fontsize-ensurer.reset-size4.size5 { - font-size: 1.11111111em; -} -.katex .sizing.reset-size4.size6, -.katex .fontsize-ensurer.reset-size4.size6 { - font-size: 1.33333333em; -} -.katex .sizing.reset-size4.size7, -.katex .fontsize-ensurer.reset-size4.size7 { - font-size: 1.6em; -} -.katex .sizing.reset-size4.size8, -.katex .fontsize-ensurer.reset-size4.size8 { - font-size: 1.92222222em; -} -.katex .sizing.reset-size4.size9, -.katex .fontsize-ensurer.reset-size4.size9 { - font-size: 2.3em; -} -.katex .sizing.reset-size4.size10, -.katex .fontsize-ensurer.reset-size4.size10 { - font-size: 2.76666667em; -} -.katex .sizing.reset-size5.size1, -.katex .fontsize-ensurer.reset-size5.size1 { - font-size: 0.5em; -} -.katex .sizing.reset-size5.size2, -.katex .fontsize-ensurer.reset-size5.size2 { - font-size: 0.7em; -} -.katex .sizing.reset-size5.size3, -.katex .fontsize-ensurer.reset-size5.size3 { - font-size: 0.8em; -} -.katex .sizing.reset-size5.size4, -.katex .fontsize-ensurer.reset-size5.size4 { - font-size: 0.9em; -} -.katex .sizing.reset-size5.size5, -.katex .fontsize-ensurer.reset-size5.size5 { - font-size: 1em; -} -.katex .sizing.reset-size5.size6, -.katex .fontsize-ensurer.reset-size5.size6 { - font-size: 1.2em; -} -.katex .sizing.reset-size5.size7, -.katex .fontsize-ensurer.reset-size5.size7 { - font-size: 1.44em; -} -.katex .sizing.reset-size5.size8, -.katex .fontsize-ensurer.reset-size5.size8 { - font-size: 1.73em; -} -.katex .sizing.reset-size5.size9, -.katex .fontsize-ensurer.reset-size5.size9 { - font-size: 2.07em; -} -.katex .sizing.reset-size5.size10, -.katex .fontsize-ensurer.reset-size5.size10 { - font-size: 2.49em; -} -.katex .sizing.reset-size6.size1, -.katex .fontsize-ensurer.reset-size6.size1 { - font-size: 0.41666667em; -} -.katex .sizing.reset-size6.size2, -.katex .fontsize-ensurer.reset-size6.size2 { - font-size: 0.58333333em; -} -.katex .sizing.reset-size6.size3, -.katex .fontsize-ensurer.reset-size6.size3 { - font-size: 0.66666667em; -} -.katex .sizing.reset-size6.size4, -.katex .fontsize-ensurer.reset-size6.size4 { - font-size: 0.75em; -} -.katex .sizing.reset-size6.size5, -.katex .fontsize-ensurer.reset-size6.size5 { - font-size: 0.83333333em; -} -.katex .sizing.reset-size6.size6, -.katex .fontsize-ensurer.reset-size6.size6 { - font-size: 1em; -} -.katex .sizing.reset-size6.size7, -.katex .fontsize-ensurer.reset-size6.size7 { - font-size: 1.2em; -} -.katex .sizing.reset-size6.size8, -.katex .fontsize-ensurer.reset-size6.size8 { - font-size: 1.44166667em; -} -.katex .sizing.reset-size6.size9, -.katex .fontsize-ensurer.reset-size6.size9 { - font-size: 1.725em; -} -.katex .sizing.reset-size6.size10, -.katex .fontsize-ensurer.reset-size6.size10 { - font-size: 2.075em; -} -.katex .sizing.reset-size7.size1, -.katex .fontsize-ensurer.reset-size7.size1 { - font-size: 0.34722222em; -} -.katex .sizing.reset-size7.size2, -.katex .fontsize-ensurer.reset-size7.size2 { - font-size: 0.48611111em; -} -.katex .sizing.reset-size7.size3, -.katex .fontsize-ensurer.reset-size7.size3 { - font-size: 0.55555556em; -} -.katex .sizing.reset-size7.size4, -.katex .fontsize-ensurer.reset-size7.size4 { - font-size: 0.625em; -} -.katex .sizing.reset-size7.size5, -.katex .fontsize-ensurer.reset-size7.size5 { - font-size: 0.69444444em; -} -.katex .sizing.reset-size7.size6, -.katex .fontsize-ensurer.reset-size7.size6 { - font-size: 0.83333333em; -} -.katex .sizing.reset-size7.size7, -.katex .fontsize-ensurer.reset-size7.size7 { - font-size: 1em; -} -.katex .sizing.reset-size7.size8, -.katex .fontsize-ensurer.reset-size7.size8 { - font-size: 1.20138889em; -} -.katex .sizing.reset-size7.size9, -.katex .fontsize-ensurer.reset-size7.size9 { - font-size: 1.4375em; -} -.katex .sizing.reset-size7.size10, -.katex .fontsize-ensurer.reset-size7.size10 { - font-size: 1.72916667em; -} -.katex .sizing.reset-size8.size1, -.katex .fontsize-ensurer.reset-size8.size1 { - font-size: 0.28901734em; -} -.katex .sizing.reset-size8.size2, -.katex .fontsize-ensurer.reset-size8.size2 { - font-size: 0.40462428em; -} -.katex .sizing.reset-size8.size3, -.katex .fontsize-ensurer.reset-size8.size3 { - font-size: 0.46242775em; -} -.katex .sizing.reset-size8.size4, -.katex .fontsize-ensurer.reset-size8.size4 { - font-size: 0.52023121em; -} -.katex .sizing.reset-size8.size5, -.katex .fontsize-ensurer.reset-size8.size5 { - font-size: 0.57803468em; -} -.katex .sizing.reset-size8.size6, -.katex .fontsize-ensurer.reset-size8.size6 { - font-size: 0.69364162em; -} -.katex .sizing.reset-size8.size7, -.katex .fontsize-ensurer.reset-size8.size7 { - font-size: 0.83236994em; -} -.katex .sizing.reset-size8.size8, -.katex .fontsize-ensurer.reset-size8.size8 { - font-size: 1em; -} -.katex .sizing.reset-size8.size9, -.katex .fontsize-ensurer.reset-size8.size9 { - font-size: 1.19653179em; -} -.katex .sizing.reset-size8.size10, -.katex .fontsize-ensurer.reset-size8.size10 { - font-size: 1.43930636em; -} -.katex .sizing.reset-size9.size1, -.katex .fontsize-ensurer.reset-size9.size1 { - font-size: 0.24154589em; -} -.katex .sizing.reset-size9.size2, -.katex .fontsize-ensurer.reset-size9.size2 { - font-size: 0.33816425em; -} -.katex .sizing.reset-size9.size3, -.katex .fontsize-ensurer.reset-size9.size3 { - font-size: 0.38647343em; -} -.katex .sizing.reset-size9.size4, -.katex .fontsize-ensurer.reset-size9.size4 { - font-size: 0.43478261em; -} -.katex .sizing.reset-size9.size5, -.katex .fontsize-ensurer.reset-size9.size5 { - font-size: 0.48309179em; -} -.katex .sizing.reset-size9.size6, -.katex .fontsize-ensurer.reset-size9.size6 { - font-size: 0.57971014em; -} -.katex .sizing.reset-size9.size7, -.katex .fontsize-ensurer.reset-size9.size7 { - font-size: 0.69565217em; -} -.katex .sizing.reset-size9.size8, -.katex .fontsize-ensurer.reset-size9.size8 { - font-size: 0.83574879em; -} -.katex .sizing.reset-size9.size9, -.katex .fontsize-ensurer.reset-size9.size9 { - font-size: 1em; -} -.katex .sizing.reset-size9.size10, -.katex .fontsize-ensurer.reset-size9.size10 { - font-size: 1.20289855em; -} -.katex .sizing.reset-size10.size1, -.katex .fontsize-ensurer.reset-size10.size1 { - font-size: 0.20080321em; -} -.katex .sizing.reset-size10.size2, -.katex .fontsize-ensurer.reset-size10.size2 { - font-size: 0.2811245em; -} -.katex .sizing.reset-size10.size3, -.katex .fontsize-ensurer.reset-size10.size3 { - font-size: 0.32128514em; -} -.katex .sizing.reset-size10.size4, -.katex .fontsize-ensurer.reset-size10.size4 { - font-size: 0.36144578em; -} -.katex .sizing.reset-size10.size5, -.katex .fontsize-ensurer.reset-size10.size5 { - font-size: 0.40160643em; -} -.katex .sizing.reset-size10.size6, -.katex .fontsize-ensurer.reset-size10.size6 { - font-size: 0.48192771em; -} -.katex .sizing.reset-size10.size7, -.katex .fontsize-ensurer.reset-size10.size7 { - font-size: 0.57831325em; -} -.katex .sizing.reset-size10.size8, -.katex .fontsize-ensurer.reset-size10.size8 { - font-size: 0.69477912em; -} -.katex .sizing.reset-size10.size9, -.katex .fontsize-ensurer.reset-size10.size9 { - font-size: 0.8313253em; -} -.katex .sizing.reset-size10.size10, -.katex .fontsize-ensurer.reset-size10.size10 { - font-size: 1em; -} -.katex .delimsizing.size1 { - font-family: KaTeX_Size1; -} -.katex .delimsizing.size2 { - font-family: KaTeX_Size2; -} -.katex .delimsizing.size3 { - font-family: KaTeX_Size3; -} -.katex .delimsizing.size4 { - font-family: KaTeX_Size4; -} -.katex .delimsizing.mult .delim-size1 > span { - font-family: KaTeX_Size1; -} -.katex .delimsizing.mult .delim-size4 > span { - font-family: KaTeX_Size4; -} -.katex .nulldelimiter { - display: inline-block; - width: 0.12em; -} -.katex .op-symbol { - position: relative; -} -.katex .op-symbol.small-op { - font-family: KaTeX_Size1; -} -.katex .op-symbol.large-op { - font-family: KaTeX_Size2; -} -.katex .op-limits > .vlist > span { - text-align: center; -} -.katex .accent > .vlist > span { - text-align: center; -} -.katex .accent .accent-body > span { - width: 0; -} -.katex .accent .accent-body.accent-vec > span { - position: relative; - left: 0.326em; -} -.katex .mtable .vertical-separator { - display: inline-block; - margin: 0 -0.025em; - border-right: 0.05em solid black; -} -.katex .mtable .arraycolsep { - display: inline-block; -} -.katex .mtable .col-align-c > .vlist { - text-align: center; -} -.katex .mtable .col-align-l > .vlist { - text-align: left; -} -.katex .mtable .col-align-r > .vlist { - text-align: right; -} diff --git a/yarn.lock b/yarn.lock index bc5c19464fb..3285fdae331 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4203,6 +4203,10 @@ jquery-ujs@1.2.2: dependencies: jquery ">=1.8.0" +jquery.waitforimages@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/jquery.waitforimages/-/jquery.waitforimages-2.2.0.tgz#63f23131055a1b060dc913e6d874bcc9b9e6b16b" + "jquery@>= 1.9.1", jquery@>=1.8.0, jquery@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/jquery/-/jquery-2.2.4.tgz#2c89d6889b5eac522a7eea32c14521559c6cbf02" @@ -4397,6 +4401,12 @@ karma@^2.0.0: tmp "0.0.33" useragent "^2.1.12" +katex@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/katex/-/katex-0.8.3.tgz#909d99864baf964c3ccae39c4a99a8e0fb9a1bd0" + dependencies: + match-at "^0.1.0" + kind-of@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" @@ -4787,6 +4797,10 @@ marked@^0.3.12: version "0.3.12" resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.12.tgz#7cf25ff2252632f3fe2406bde258e94eee927519" +match-at@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/match-at/-/match-at-0.1.1.tgz#25d040d291777704d5e6556bbb79230ec2de0540" + math-expression-evaluator@^1.2.14: version "1.2.16" resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.16.tgz#b357fa1ca9faefb8e48d10c14ef2bcb2d9f0a7c9" @@ -7079,6 +7093,13 @@ strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" +style-loader@^0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.19.1.tgz#591ffc80bcefe268b77c5d9ebc0505d772619f85" + dependencies: + loader-utils "^1.0.2" + schema-utils "^0.3.0" + subarg@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" |