Commit a795c13a authored by Bob Van Landuyt's avatar Bob Van Landuyt

Merge branch '346194-refactor-non-i18n-ui-components' into 'master'

Fix: refactor some non-i18n components in issue page

See merge request gitlab-org/gitlab!74955
parents adddc040 07c9af46
...@@ -54,8 +54,7 @@ export default { ...@@ -54,8 +54,7 @@ export default {
data() { data() {
return { return {
email: this.initialEmail, email: this.initialEmail,
// eslint-disable-next-line @gitlab/require-i18n-strings issuableName: this.issuableType === 'issue' ? __('issue') : __('merge request'),
issuableName: this.issuableType === 'issue' ? 'issue' : 'merge request',
}; };
}, },
computed: { computed: {
......
...@@ -7,7 +7,7 @@ import { IssuableType } from '~/issuable_show/constants'; ...@@ -7,7 +7,7 @@ import { IssuableType } from '~/issuable_show/constants';
import { IssuableStatus, IssueStateEvent } from '~/issue_show/constants'; import { IssuableStatus, IssueStateEvent } from '~/issue_show/constants';
import { capitalizeFirstCharacter } from '~/lib/utils/text_utility'; import { capitalizeFirstCharacter } from '~/lib/utils/text_utility';
import { visitUrl } from '~/lib/utils/url_utility'; import { visitUrl } from '~/lib/utils/url_utility';
import { __, sprintf } from '~/locale'; import { s__, __, sprintf } from '~/locale';
import eventHub from '~/notes/event_hub'; import eventHub from '~/notes/event_hub';
import promoteToEpicMutation from '../queries/promote_to_epic.mutation.graphql'; import promoteToEpicMutation from '../queries/promote_to_epic.mutation.graphql';
import updateIssueMutation from '../queries/update_issue.mutation.graphql'; import updateIssueMutation from '../queries/update_issue.mutation.graphql';
...@@ -78,10 +78,18 @@ export default { ...@@ -78,10 +78,18 @@ export default {
isClosed() { isClosed() {
return this.openState === IssuableStatus.Closed; return this.openState === IssuableStatus.Closed;
}, },
issueTypeText() {
const issueTypeTexts = {
[IssuableType.Issue]: s__('HeaderAction|issue'),
[IssuableType.Incident]: s__('HeaderAction|incident'),
};
return issueTypeTexts[this.issueType] ?? this.issueType;
},
buttonText() { buttonText() {
return this.isClosed return this.isClosed
? sprintf(__('Reopen %{issueType}'), { issueType: this.issueType }) ? sprintf(__('Reopen %{issueType}'), { issueType: this.issueTypeText })
: sprintf(__('Close %{issueType}'), { issueType: this.issueType }); : sprintf(__('Close %{issueType}'), { issueType: this.issueTypeText });
}, },
qaSelector() { qaSelector() {
return this.isClosed ? 'reopen_issue_button' : 'close_issue_button'; return this.isClosed ? 'reopen_issue_button' : 'close_issue_button';
......
...@@ -11,7 +11,6 @@ import httpStatusCodes from '~/lib/utils/http_status'; ...@@ -11,7 +11,6 @@ import httpStatusCodes from '~/lib/utils/http_status';
import { import {
capitalizeFirstCharacter, capitalizeFirstCharacter,
convertToCamelCase, convertToCamelCase,
splitCamelCase,
slugifyWithUnderscore, slugifyWithUnderscore,
} from '~/lib/utils/text_utility'; } from '~/lib/utils/text_utility';
import { sprintf } from '~/locale'; import { sprintf } from '~/locale';
...@@ -77,7 +76,15 @@ export default { ...@@ -77,7 +76,15 @@ export default {
]), ]),
...mapState(['isToggleStateButtonLoading']), ...mapState(['isToggleStateButtonLoading']),
noteableDisplayName() { noteableDisplayName() {
return splitCamelCase(this.noteableType).toLowerCase(); const displayNameMap = {
[constants.ISSUE_NOTEABLE_TYPE]: this.$options.i18n.issue,
[constants.EPIC_NOTEABLE_TYPE]: this.$options.i18n.epic,
[constants.MERGE_REQUEST_NOTEABLE_TYPE]: this.$options.i18n.mergeRequest,
};
const noteableTypeKey =
constants.NOTEABLE_TYPE_MAPPING[this.noteableType] || constants.ISSUE_NOTEABLE_TYPE;
return displayNameMap[noteableTypeKey];
}, },
isLoggedIn() { isLoggedIn() {
return this.getUserData.id; return this.getUserData.id;
...@@ -103,15 +110,13 @@ export default { ...@@ -103,15 +110,13 @@ export default {
const openOrClose = this.isOpen ? 'close' : 'reopen'; const openOrClose = this.isOpen ? 'close' : 'reopen';
if (this.note.length) { if (this.note.length) {
return sprintf(this.$options.i18n.actionButtonWithNote, { return sprintf(this.$options.i18n.actionButton.withNote[openOrClose], {
actionText: this.commentButtonTitle, actionText: this.commentButtonTitle,
openOrClose,
noteable: this.noteableDisplayName, noteable: this.noteableDisplayName,
}); });
} }
return sprintf(this.$options.i18n.actionButton, { return sprintf(this.$options.i18n.actionButton.withoutNote[openOrClose], {
openOrClose: capitalizeFirstCharacter(openOrClose),
noteable: this.noteableDisplayName, noteable: this.noteableDisplayName,
}); });
}, },
...@@ -151,13 +156,8 @@ export default { ...@@ -151,13 +156,8 @@ export default {
draftEndpoint() { draftEndpoint() {
return this.getNotesData.draftsPath; return this.getNotesData.draftsPath;
}, },
issuableTypeTitle() {
return this.noteableType === constants.MERGE_REQUEST_NOTEABLE_TYPE
? this.$options.i18n.mergeRequest
: this.$options.i18n.issue;
},
isIssue() { isIssue() {
return this.noteableDisplayName === constants.ISSUE_NOTEABLE_TYPE; return constants.NOTEABLE_TYPE_MAPPING[this.noteableType] === constants.ISSUE_NOTEABLE_TYPE;
}, },
trackingLabel() { trackingLabel() {
return slugifyWithUnderscore(`${this.commentButtonTitle} button`); return slugifyWithUnderscore(`${this.commentButtonTitle} button`);
...@@ -329,7 +329,7 @@ export default { ...@@ -329,7 +329,7 @@ export default {
<template> <template>
<div> <div>
<note-signed-out-widget v-if="!isLoggedIn" /> <note-signed-out-widget v-if="!isLoggedIn" />
<discussion-locked-widget v-else-if="!canCreateNote" :issuable-type="issuableTypeTitle" /> <discussion-locked-widget v-else-if="!canCreateNote" :issuable-type="noteableDisplayName" />
<ul v-else-if="canCreateNote" class="notes notes-form timeline"> <ul v-else-if="canCreateNote" class="notes notes-form timeline">
<timeline-entry-item class="note-form"> <timeline-entry-item class="note-form">
<gl-alert <gl-alert
......
...@@ -9,6 +9,7 @@ export const COMMENT_FORM = { ...@@ -9,6 +9,7 @@ export const COMMENT_FORM = {
issue: __('issue'), issue: __('issue'),
startThread: __('Start thread'), startThread: __('Start thread'),
mergeRequest: __('merge request'), mergeRequest: __('merge request'),
epic: __('epic'),
bodyPlaceholder: __('Write a comment or drag your files here…'), bodyPlaceholder: __('Write a comment or drag your files here…'),
confidential: s__('Notes|Make this comment confidential'), confidential: s__('Notes|Make this comment confidential'),
confidentialVisibility: s__('Notes|Confidential comments are only visible to project members'), confidentialVisibility: s__('Notes|Confidential comments are only visible to project members'),
...@@ -17,7 +18,16 @@ export const COMMENT_FORM = { ...@@ -17,7 +18,16 @@ export const COMMENT_FORM = {
), ),
discussion: __('Discuss a specific suggestion or question.'), discussion: __('Discuss a specific suggestion or question.'),
actionButtonWithNote: __('%{actionText} & %{openOrClose} %{noteable}'), actionButtonWithNote: __('%{actionText} & %{openOrClose} %{noteable}'),
actionButton: __('%{openOrClose} %{noteable}'), actionButton: {
withNote: {
reopen: __('%{actionText} & reopen %{noteable}'),
close: __('%{actionText} & close %{noteable}'),
},
withoutNote: {
reopen: __('Reopen %{noteable}'),
close: __('Close %{noteable}'),
},
},
submitButton: { submitButton: {
startThread: __('Start thread'), startThread: __('Start thread'),
comment: __('Comment'), comment: __('Comment'),
......
...@@ -35,7 +35,7 @@ module FormHelper ...@@ -35,7 +35,7 @@ module FormHelper
def assignees_dropdown_options(issuable_type) def assignees_dropdown_options(issuable_type)
dropdown_data = { dropdown_data = {
toggle_class: 'js-user-search js-assignee-search js-multiselect js-save-user-data', toggle_class: 'js-user-search js-assignee-search js-multiselect js-save-user-data',
title: 'Select assignee', title: _('Select assignee'),
filter: true, filter: true,
dropdown_class: 'dropdown-menu-user dropdown-menu-selectable dropdown-menu-assignee', dropdown_class: 'dropdown-menu-user dropdown-menu-selectable dropdown-menu-assignee',
placeholder: _('Search users'), placeholder: _('Search users'),
...@@ -45,9 +45,9 @@ module FormHelper ...@@ -45,9 +45,9 @@ module FormHelper
current_user: true, current_user: true,
project_id: (@target_project || @project)&.id, project_id: (@target_project || @project)&.id,
field_name: "#{issuable_type}[assignee_ids][]", field_name: "#{issuable_type}[assignee_ids][]",
default_label: 'Unassigned', default_label: _('Unassigned'),
'max-select': 1, 'max-select': 1,
'dropdown-header': 'Assignee', 'dropdown-header': _('Assignee'),
multi_select: true, multi_select: true,
'input-meta': 'name', 'input-meta': 'name',
'always-show-selectbox': true, 'always-show-selectbox': true,
...@@ -123,7 +123,7 @@ module FormHelper ...@@ -123,7 +123,7 @@ module FormHelper
def multiple_assignees_dropdown_options(options) def multiple_assignees_dropdown_options(options)
new_options = options.dup new_options = options.dup
new_options[:title] = 'Select assignee(s)' new_options[:title] = _('Select assignee(s)')
new_options[:data][:'dropdown-header'] = 'Assignee(s)' new_options[:data][:'dropdown-header'] = 'Assignee(s)'
new_options[:data].delete(:'max-select') new_options[:data].delete(:'max-select')
......
...@@ -6,7 +6,7 @@ module IssuablesDescriptionTemplatesHelper ...@@ -6,7 +6,7 @@ module IssuablesDescriptionTemplatesHelper
def template_dropdown_tag(issuable, &block) def template_dropdown_tag(issuable, &block)
selected_template = selected_template(issuable) selected_template = selected_template(issuable)
title = selected_template || "Choose a template" title = selected_template || _('Choose a template')
options = { options = {
toggle_class: 'js-issuable-selector', toggle_class: 'js-issuable-selector',
title: title, title: title,
......
...@@ -80,7 +80,7 @@ module IssuablesHelper ...@@ -80,7 +80,7 @@ module IssuablesHelper
def users_dropdown_label(selected_users) def users_dropdown_label(selected_users)
case selected_users.length case selected_users.length
when 0 when 0
"Unassigned" _('Unassigned')
when 1 when 1
selected_users[0].name selected_users[0].name
else else
...@@ -133,7 +133,7 @@ module IssuablesHelper ...@@ -133,7 +133,7 @@ module IssuablesHelper
end end
# rubocop: enable CodeReuse/ActiveRecord # rubocop: enable CodeReuse/ActiveRecord
def milestone_dropdown_label(milestone_title, default_label = "Milestone") def milestone_dropdown_label(milestone_title, default_label = _('Milestone'))
title = title =
case milestone_title case milestone_title
when Milestone::Upcoming.name then Milestone::Upcoming.title when Milestone::Upcoming.name then Milestone::Upcoming.title
...@@ -188,7 +188,12 @@ module IssuablesHelper ...@@ -188,7 +188,12 @@ module IssuablesHelper
end end
def issuables_state_counter_text(issuable_type, state, display_count) def issuables_state_counter_text(issuable_type, state, display_count)
titles = { opened: "Open" } titles = {
opened: _("Open"),
closed: _("Closed"),
merged: _("Merged"),
all: _("All")
}
state_title = titles[state] || state.to_s.humanize state_title = titles[state] || state.to_s.humanize
html = content_tag(:span, state_title) html = content_tag(:span, state_title)
......
...@@ -25,10 +25,10 @@ ...@@ -25,10 +25,10 @@
#{issuable_reference(issue)} #{issuable_reference(issue)}
%span.issuable-authored.d-none.d-sm-inline-block %span.issuable-authored.d-none.d-sm-inline-block
&middot; &middot;
created #{time_ago_with_tooltip(issue.created_at, placement: 'bottom')} by
- if issue.service_desk_reply_to - if issue.service_desk_reply_to
#{issue.service_desk_reply_to} via #{_('created %{timeAgoString} by %{email} via %{user}').html_safe % { timeAgoString: time_ago_with_tooltip(issue.created_at, placement: 'bottom'), email: issue.service_desk_reply_to, user: link_to_member(@project, issue.author, avatar: false) }}
#{link_to_member(@project, issue.author, avatar: false)} - else
#{s_('IssueList|created %{timeAgoString} by %{user}').html_safe % { timeAgoString: time_ago_with_tooltip(issue.created_at, placement: 'bottom'), user: link_to_member(@project, issue.author, avatar: false) }}
= render_if_exists 'shared/issuable/gitlab_team_member_badge', author: issue.author = render_if_exists 'shared/issuable/gitlab_team_member_badge', author: issue.author
- if issue.milestone - if issue.milestone
%span.issuable-milestone.d-none.d-sm-inline-block %span.issuable-milestone.d-none.d-sm-inline-block
......
- if can?(current_user, :push_code, @project) - if can?(current_user, :push_code, @project)
- can_create_merge_request = can?(current_user, :create_merge_request_in, @project) - can_create_merge_request = can?(current_user, :create_merge_request_in, @project)
- data_action = can_create_merge_request ? 'create-mr' : 'create-branch' - data_action = can_create_merge_request ? 'create-mr' : 'create-branch'
- value = can_create_merge_request ? 'Create merge request' : 'Create branch' - value = can_create_merge_request ? _('Create merge request') : _('Create branch')
- value = can_create_confidential_merge_request? ? _('Create confidential merge request') : value - value = can_create_confidential_merge_request? ? _('Create confidential merge request') : value
- create_mr_text = can_create_confidential_merge_request? ? _('Create confidential merge request') : _('Create merge request') - create_mr_text = can_create_confidential_merge_request? ? _('Create confidential merge request') : _('Create merge request')
......
...@@ -20,8 +20,7 @@ ...@@ -20,8 +20,7 @@
#{issuable_reference(merge_request)} #{issuable_reference(merge_request)}
%span.issuable-authored.d-none.d-sm-inline-block %span.issuable-authored.d-none.d-sm-inline-block
&middot; &middot;
created #{time_ago_with_tooltip(merge_request.created_at, placement: 'bottom')} #{s_('IssueList|created %{timeAgoString} by %{user}').html_safe % { timeAgoString: time_ago_with_tooltip(merge_request.created_at, placement: 'bottom'), user: link_to_member(@project, merge_request.author, avatar: false) }}
by #{link_to_member(@project, merge_request.author, avatar: false)}
= render_if_exists 'shared/issuable/gitlab_team_member_badge', author: merge_request.author = render_if_exists 'shared/issuable/gitlab_team_member_badge', author: merge_request.author
- if merge_request.milestone - if merge_request.milestone
%span.issuable-milestone.d-none.d-sm-inline-block %span.issuable-milestone.d-none.d-sm-inline-block
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
- preview_url = preview_markdown_path(project, target_type: model.class.name) - preview_url = preview_markdown_path(project, target_type: model.class.name)
.form-group.row.detail-page-description .form-group.row.detail-page-description
= form.label :description, 'Description', class: 'col-form-label col-sm-2' = form.label :description, _('Description'), class: 'col-form-label col-sm-2'
.col-sm-10 .col-sm-10
- if model.is_a?(MergeRequest) - if model.is_a?(MergeRequest)
= hidden_field_tag :merge_request_diff_head_sha, model.diff_head_sha = hidden_field_tag :merge_request_diff_head_sha, model.diff_head_sha
......
...@@ -64,7 +64,7 @@ ...@@ -64,7 +64,7 @@
for this project. for this project.
- if issuable.new_record? - if issuable.new_record?
= form.submit "Create #{issuable.class.model_name.human.downcase}", class: 'gl-button btn btn-confirm gl-mr-2', data: { qa_selector: 'issuable_create_button' } = form.submit "#{_('Create')} #{issuable.class.model_name.human.downcase}", class: 'gl-button btn btn-confirm gl-mr-2', data: { qa_selector: 'issuable_create_button' }
- else - else
= form.submit _('Save changes'), class: 'gl-button btn btn-confirm gl-mr-2' = form.submit _('Save changes'), class: 'gl-button btn btn-confirm gl-mr-2'
......
...@@ -4,20 +4,20 @@ ...@@ -4,20 +4,20 @@
- selected = local_assigns.fetch(:selected, nil) - selected = local_assigns.fetch(:selected, nil)
- selected_text = selected.try(:title) || params[:milestone_title] - selected_text = selected.try(:title) || params[:milestone_title]
- dropdown_title = local_assigns.fetch(:dropdown_title, "Filter by milestone") - dropdown_title = local_assigns.fetch(:dropdown_title, _('Filter by milestone'))
- if selected.present? || params[:milestone_title].present? - if selected.present? || params[:milestone_title].present?
= hidden_field_tag(name, name == :milestone_title ? selected_text : selected.id) = hidden_field_tag(name, name == :milestone_title ? selected_text : selected.id)
= dropdown_tag(milestone_dropdown_label(selected_text), options: { title: dropdown_title, toggle_class: "qa-issuable-milestone-dropdown js-milestone-select js-filter-submit #{extra_class}", filter: true, dropdown_class: "qa-issuable-dropdown-menu-milestone dropdown-menu-selectable dropdown-menu-milestone", = dropdown_tag(milestone_dropdown_label(selected_text), options: { title: dropdown_title, toggle_class: "qa-issuable-milestone-dropdown js-milestone-select js-filter-submit #{extra_class}", filter: true, dropdown_class: "qa-issuable-dropdown-menu-milestone dropdown-menu-selectable dropdown-menu-milestone",
placeholder: "Search milestones", footer_content: project.present?, data: { show_no: true, show_menu_above: show_menu_above, show_any: show_any, show_upcoming: show_upcoming, show_started: show_started, field_name: name, selected: selected_text, project_id: project.try(:id), default_label: "Milestone" } }) do placeholder: _('Search milestones'), footer_content: project.present?, data: { show_no: true, show_menu_above: show_menu_above, show_any: show_any, show_upcoming: show_upcoming, show_started: show_started, field_name: name, selected: selected_text, project_id: project.try(:id), default_label: _('Milestone') } }) do
- if project - if project
%ul.dropdown-footer-list %ul.dropdown-footer-list
- if can? current_user, :admin_milestone, project - if can? current_user, :admin_milestone, project
%li %li
= link_to new_project_milestone_path(project), title: "New Milestone" do = link_to new_project_milestone_path(project), title: _('New Milestone') do
Create new = _('Create new')
%li %li
= link_to project_milestones_path(project) do = link_to project_milestones_path(project) do
- if can? current_user, :admin_milestone, project - if can? current_user, :admin_milestone, project
Manage milestones = _('Manage milestones')
- else - else
View milestones = _('View milestones')
%p.form-text.text-muted %p.form-text.text-muted
Add - template_link_url = help_page_path('user/project/description_templates')
= link_to 'description templates', help_page_path('user/project/description_templates') - template_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: template_link_url }
to help your contributors communicate effectively! = s_('Promotions|Add %{link_start} description templates %{link_end} to help your contributors to communicate effectively!').html_safe % { link_start: template_link_start, link_end: '</a>'.html_safe }
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
.form-check .form-check
= form.check_box :confidential, class: 'form-check-input' = form.check_box :confidential, class: 'form-check-input'
= form.label :confidential, class: 'form-check-label' do = form.label :confidential, class: 'form-check-label' do
This issue is confidential and should only be visible to team members with at least Reporter access. #{_('This issue is confidential and should only be visible to team members with at least Reporter access.')}
- if can?(current_user, :"set_#{issuable.to_ability_name}_metadata", issuable) - if can?(current_user, :"set_#{issuable.to_ability_name}_metadata", issuable)
%hr %hr
...@@ -27,13 +27,13 @@ ...@@ -27,13 +27,13 @@
- if issuable.supports_milestone? - if issuable.supports_milestone?
.form-group.row.issue-milestone .form-group.row.issue-milestone
= form.label :milestone_id, "Milestone", class: "col-form-label #{has_due_date ? "col-md-2 col-lg-4" : "col-sm-2"}" = form.label :milestone_id, _('Milestone'), class: "col-form-label #{has_due_date ? "col-md-2 col-lg-4" : "col-sm-2"}"
.col-sm-10{ class: ("col-md-8" if has_due_date) } .col-sm-10{ class: ("col-md-8" if has_due_date) }
.issuable-form-select-holder .issuable-form-select-holder
= render "shared/issuable/milestone_dropdown", selected: issuable.milestone, name: "#{issuable.class.model_name.param_key}[milestone_id]", show_any: false, show_upcoming: false, show_started: false, extra_class: "qa-issuable-milestone-dropdown js-issuable-form-dropdown js-dropdown-keep-input", dropdown_title: "Select milestone" = render "shared/issuable/milestone_dropdown", selected: issuable.milestone, name: "#{issuable.class.model_name.param_key}[milestone_id]", show_any: false, show_upcoming: false, show_started: false, extra_class: "qa-issuable-milestone-dropdown js-issuable-form-dropdown js-dropdown-keep-input", dropdown_title: _('Select milestone')
.form-group.row .form-group.row
= form.label :label_ids, "Labels", class: "col-form-label #{has_due_date ? "col-md-2 col-lg-4" : "col-sm-2"}" = form.label :label_ids, _('Labels'), class: "col-form-label #{has_due_date ? "col-md-2 col-lg-4" : "col-sm-2"}"
= form.hidden_field :label_ids, multiple: true, value: '' = form.hidden_field :label_ids, multiple: true, value: ''
.col-sm-10{ class: "#{"col-md-8" if has_due_date}" } .col-sm-10{ class: "#{"col-md-8" if has_due_date}" }
.issuable-form-select-holder .issuable-form-select-holder
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
.col-lg-6 .col-lg-6
= render_if_exists "shared/issuable/form/weight", issuable: issuable, form: form = render_if_exists "shared/issuable/form/weight", issuable: issuable, form: form
.form-group.row .form-group.row
= form.label :due_date, "Due date", class: "col-form-label col-md-2 col-lg-4" = form.label :due_date, _('Due date'), class: "col-form-label col-md-2 col-lg-4"
.col-8 .col-8
.issuable-form-select-holder .issuable-form-select-holder
= form.text_field :due_date, id: "issuable-due-date", class: "datepicker form-control", placeholder: "Select due date", autocomplete: 'off' = form.text_field :due_date, id: "issuable-due-date", class: "datepicker form-control", placeholder: _('Select due date'), autocomplete: 'off'
...@@ -8,4 +8,4 @@ ...@@ -8,4 +8,4 @@
= hidden_field_tag "#{issuable.to_ability_name}[assignee_ids][]", 0, id: nil, data: { meta: '' } = hidden_field_tag "#{issuable.to_ability_name}[assignee_ids][]", 0, id: nil, data: { meta: '' }
= dropdown_tag(users_dropdown_label(issuable.assignees), options: assignees_dropdown_options(issuable.to_ability_name)) = dropdown_tag(users_dropdown_label(issuable.assignees), options: assignees_dropdown_options(issuable.to_ability_name))
= link_to 'Assign to me', '#', class: "assign-to-me-link qa-assign-to-me-link #{'hide' if issuable.assignees.include?(current_user)}" = link_to _('Assign to me'), '#', class: "assign-to-me-link qa-assign-to-me-link #{'hide' if issuable.assignees.include?(current_user)}"
- return unless issuable.supports_issue_type? && can?(current_user, :create_issue, @project) - return unless issuable.supports_issue_type? && can?(current_user, :create_issue, @project)
.form-group.row.gl-mb-0 .form-group.row.gl-mb-0
= form.label :type, 'Type', class: 'col-form-label col-sm-2' = form.label :type, _('Type'), class: 'col-form-label col-sm-2'
.col-sm-10 .col-sm-10
.gl-display-flex.gl-align-items-center .gl-display-flex.gl-align-items-center
.issuable-form-select-holder.selectbox.form-group.gl-mb-0 .issuable-form-select-holder.selectbox.form-group.gl-mb-0
......
...@@ -7,10 +7,10 @@ ...@@ -7,10 +7,10 @@
.form-group.row .form-group.row
= form.label :label_ids, class: "col-form-label col-md-2 #{"col-lg-4" if has_due_date}" do = form.label :label_ids, class: "col-form-label col-md-2 #{"col-lg-4" if has_due_date}" do
Weight #{_('Weight')}
.col-md-10{ class: ("col-lg-8" if has_due_date) } .col-md-10{ class: ("col-lg-8" if has_due_date) }
.issuable-form-select-holder .issuable-form-select-holder
- if issuable.weight - if issuable.weight
= form.hidden_field :weight = form.hidden_field :weight
= form.text_field :weight, class: "datepicker form-control qa-issuable-weight-input", placeholder: "Enter a number", autocomplete: "off", type: "text" = form.text_field :weight, class: "datepicker form-control qa-issuable-weight-input", placeholder: _('Enter a number'), autocomplete: "off", type: "text"
...@@ -419,6 +419,12 @@ msgstr[1] "" ...@@ -419,6 +419,12 @@ msgstr[1] ""
msgid "%{actionText} & %{openOrClose} %{noteable}" msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr "" msgstr ""
msgid "%{actionText} & close %{noteable}"
msgstr ""
msgid "%{actionText} & reopen %{noteable}"
msgstr ""
msgid "%{address} is an invalid IP address range" msgid "%{address} is an invalid IP address range"
msgstr "" msgstr ""
...@@ -811,9 +817,6 @@ msgstr "" ...@@ -811,9 +817,6 @@ msgstr ""
msgid "%{oneYearAgo} - %{today}" msgid "%{oneYearAgo} - %{today}"
msgstr "" msgstr ""
msgid "%{openOrClose} %{noteable}"
msgstr ""
msgid "%{openedEpics} open, %{closedEpics} closed" msgid "%{openedEpics} open, %{closedEpics} closed"
msgstr "" msgstr ""
...@@ -4724,6 +4727,9 @@ msgstr "" ...@@ -4724,6 +4727,9 @@ msgstr ""
msgid "Assign to commenting user" msgid "Assign to commenting user"
msgstr "" msgstr ""
msgid "Assign to me"
msgstr ""
msgid "Assign yourself to these issues" msgid "Assign yourself to these issues"
msgstr "" msgstr ""
...@@ -7308,6 +7314,9 @@ msgstr "" ...@@ -7308,6 +7314,9 @@ msgstr ""
msgid "Close %{issueType}" msgid "Close %{issueType}"
msgstr "" msgstr ""
msgid "Close %{noteable}"
msgstr ""
msgid "Close %{tabname}" msgid "Close %{tabname}"
msgstr "" msgstr ""
...@@ -14898,6 +14907,9 @@ msgstr "" ...@@ -14898,6 +14907,9 @@ msgstr ""
msgid "Filter by merge requests that are currently merged." msgid "Filter by merge requests that are currently merged."
msgstr "" msgstr ""
msgid "Filter by milestone"
msgstr ""
msgid "Filter by milestone name" msgid "Filter by milestone name"
msgstr "" msgstr ""
...@@ -17109,6 +17121,12 @@ msgstr "" ...@@ -17109,6 +17121,12 @@ msgstr ""
msgid "Header message" msgid "Header message"
msgstr "" msgstr ""
msgid "HeaderAction|incident"
msgstr ""
msgid "HeaderAction|issue"
msgstr ""
msgid "Headers" msgid "Headers"
msgstr "" msgstr ""
...@@ -19431,6 +19449,9 @@ msgstr "" ...@@ -19431,6 +19449,9 @@ msgstr ""
msgid "IssueBoards|Switch board" msgid "IssueBoards|Switch board"
msgstr "" msgstr ""
msgid "IssueList|created %{timeAgoString} by %{user}"
msgstr ""
msgid "IssueTracker|Custom issue tracker" msgid "IssueTracker|Custom issue tracker"
msgstr "" msgstr ""
...@@ -27968,6 +27989,9 @@ msgstr "" ...@@ -27968,6 +27989,9 @@ msgstr ""
msgid "Promotion is not supported." msgid "Promotion is not supported."
msgstr "" msgstr ""
msgid "Promotions|Add %{link_start} description templates %{link_end} to help your contributors to communicate effectively!"
msgstr ""
msgid "Promotions|Add Group Webhooks and GitLab Enterprise Edition." msgid "Promotions|Add Group Webhooks and GitLab Enterprise Edition."
msgstr "" msgstr ""
...@@ -29145,6 +29169,9 @@ msgstr "" ...@@ -29145,6 +29169,9 @@ msgstr ""
msgid "Reopen %{issueType}" msgid "Reopen %{issueType}"
msgstr "" msgstr ""
msgid "Reopen %{noteable}"
msgstr ""
msgid "Reopen epic" msgid "Reopen epic"
msgstr "" msgstr ""
...@@ -31400,6 +31427,9 @@ msgstr "" ...@@ -31400,6 +31427,9 @@ msgstr ""
msgid "Select assignee" msgid "Select assignee"
msgstr "" msgstr ""
msgid "Select assignee(s)"
msgstr ""
msgid "Select branch" msgid "Select branch"
msgstr "" msgstr ""
...@@ -35591,6 +35621,9 @@ msgstr "" ...@@ -35591,6 +35621,9 @@ msgstr ""
msgid "This is your current session" msgid "This is your current session"
msgstr "" msgstr ""
msgid "This issue is confidential and should only be visible to team members with at least Reporter access."
msgstr ""
msgid "This issue is currently blocked by the following issues:" msgid "This issue is currently blocked by the following issues:"
msgstr "" msgstr ""
...@@ -38451,6 +38484,9 @@ msgstr "" ...@@ -38451,6 +38484,9 @@ msgstr ""
msgid "View merge request" msgid "View merge request"
msgstr "" msgstr ""
msgid "View milestones"
msgstr ""
msgid "View on %{url}" msgid "View on %{url}"
msgstr "" msgstr ""
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment