Commit 9f7e523c authored by Eugenia Grieff's avatar Eugenia Grieff

Add internationalization support to error messages

- Add internationalization support to errors found
in models
- Update PO files
parent 044aa114
......@@ -38,7 +38,7 @@ class Appearance < ApplicationRecord
def single_appearance_row
if self.class.any?
errors.add(:single_appearance_row, 'Only 1 appearances row can exist')
errors.add(:single_appearance_row, _('Only 1 appearances row can exist'))
end
end
......
......@@ -148,7 +148,7 @@ module Ci
def valid_file_format?
unless TYPE_AND_FORMAT_PAIRS[self.file_type&.to_sym] == self.file_format&.to_sym
errors.add(:file_format, 'Invalid file format with specified file type')
errors.add(:file_format, _('Invalid file format with specified file type'))
end
end
......
......@@ -447,7 +447,7 @@ module Ci
def valid_commit_sha
if self.sha == Gitlab::Git::BLANK_SHA
self.errors.add(:sha, " cant be 00000000 (branch removal)")
self.errors.add(:sha, _(" cant be 00000000 (branch removal)"))
end
end
......
......@@ -299,7 +299,7 @@ module Ci
def tag_constraints
unless has_tags? || run_untagged?
errors.add(:tags_list,
'can not be empty when runner is not allowed to pick untagged jobs')
_('can not be empty when runner is not allowed to pick untagged jobs'))
end
end
......@@ -309,25 +309,25 @@ module Ci
def no_projects
if projects.any?
errors.add(:runner, 'cannot have projects assigned')
errors.add(:runner, _('cannot have projects assigned'))
end
end
def no_groups
if groups.any?
errors.add(:runner, 'cannot have groups assigned')
errors.add(:runner, _('cannot have groups assigned'))
end
end
def any_project
unless projects.any?
errors.add(:runner, 'needs to be assigned to at least one project')
errors.add(:runner, _('needs to be assigned to at least one project'))
end
end
def exactly_one_group
unless groups.one?
errors.add(:runner, 'needs to be assigned to exactly one group')
errors.add(:runner, _('needs to be assigned to exactly one group'))
end
end
......
......@@ -306,7 +306,7 @@ module Clusters
.where.not(id: id)
if duplicate_management_clusters.any?
errors.add(:environment_scope, "cannot add duplicated environment scope")
errors.add(:environment_scope, _('cannot add duplicated environment scope'))
end
end
......@@ -380,7 +380,7 @@ module Clusters
def restrict_modification
if provider&.on_creation?
errors.add(:base, "cannot modify during creation")
errors.add(:base, _('cannot modify during creation'))
return false
end
......@@ -389,13 +389,13 @@ module Clusters
def no_groups
if groups.any?
errors.add(:cluster, 'cannot have groups assigned')
errors.add(:cluster, _('cannot have groups assigned'))
end
end
def no_projects
if projects.any?
errors.add(:cluster, 'cannot have projects assigned')
errors.add(:cluster, _('cannot have projects assigned'))
end
end
end
......
......@@ -188,7 +188,7 @@ module Clusters
def no_namespace
if namespace
errors.add(:namespace, 'only allowed for project cluster')
errors.add(:namespace, _('only allowed for project cluster'))
end
end
......
......@@ -77,6 +77,6 @@ module DiffPositionableNote
def diff_refs_match_commit
return if self.original_position.diff_refs == commit&.diff_refs
errors.add(:commit_id, 'does not match the diff refs')
errors.add(:commit_id, _('does not match the diff refs'))
end
end
......@@ -37,7 +37,7 @@ module Milestoneable
private
def milestone_is_valid
errors.add(:milestone_id, message: "is invalid") if respond_to?(:milestone_id) && milestone_id.present? && !milestone_available?
errors.add(:milestone_id, message: _('is invalid')) if respond_to?(:milestone_id) && milestone_id.present? && !milestone_available?
end
end
......
......@@ -77,7 +77,7 @@ module TimeTrackable
return if time_spent.nil? || time_spent == :reset
if time_spent < 0 && (time_spent.abs > original_total_time_spent)
errors.add(:time_spent, 'Time to subtract exceeds the total time spent')
errors.add(:time_spent, _('Time to subtract exceeds the total time spent'))
end
end
......
......@@ -105,7 +105,7 @@ class DeployToken < ApplicationRecord
end
def ensure_at_least_one_scope
errors.add(:base, "Scopes can't be blank") unless read_repository || read_registry
errors.add(:base, _("Scopes can't be blank")) unless read_repository || read_registry
end
def default_username
......@@ -113,10 +113,10 @@ class DeployToken < ApplicationRecord
end
def no_groups
errors.add(:deploy_token, 'cannot have groups assigned') if group_deploy_tokens.any?
errors.add(:deploy_token, _('cannot have groups assigned')) if group_deploy_tokens.any?
end
def no_projects
errors.add(:deploy_token, 'cannot have projects assigned') if project_deploy_tokens.any?
errors.add(:deploy_token, _('cannot have projects assigned')) if project_deploy_tokens.any?
end
end
......@@ -155,13 +155,13 @@ class DiffNote < Note
def verify_supported
return if supported?
errors.add(:noteable, "doesn't support new-style diff notes")
errors.add(:noteable, _("doesn't support new-style diff notes"))
end
def positions_complete
return if self.original_position.complete? && self.position.complete?
errors.add(:position, "is incomplete")
errors.add(:position, _("is incomplete"))
end
def keep_around_commits
......
......@@ -23,7 +23,7 @@ class Email < ApplicationRecord
end
def unique_email
self.errors.add(:email, 'has already been taken') if User.exists?(email: self.email)
self.errors.add(:email, _('has already been taken')) if User.exists?(email: self.email)
end
def accept_pending_invitations!
......
......@@ -217,11 +217,11 @@ module ErrorTracking
return if api_url.blank?
unless api_url_slug(:prefix)
return errors.add(:api_url, 'is invalid')
return errors.add(:api_url, _('is invalid'))
end
unless api_url_slug(:organization)
errors.add(:project, 'is a required field')
errors.add(:project, _('is a required field'))
end
end
end
......
......@@ -78,7 +78,7 @@ class ExternalPullRequest < ApplicationRecord
def not_from_fork
if from_fork?
errors.add(:base, 'Pull requests from fork are not supported')
errors.add(:base, _('Pull requests from fork are not supported'))
end
end
......
......@@ -23,7 +23,7 @@ module IncidentManagement
def issue_template_exists
return unless issue_template_key.present?
errors.add(:issue_template_key, 'not found') unless issue_template
errors.add(:issue_template_key, _('not found')) unless issue_template
end
def issue_template
......
......@@ -11,6 +11,6 @@ class MilestoneRelease < ApplicationRecord
def same_project_between_milestone_and_release
return if milestone&.project_id == release&.project_id
errors.add(:base, 'does not have the same project as the milestone')
errors.add(:base, _('does not have the same project as the milestone'))
end
end
......@@ -376,7 +376,7 @@ class Namespace < ApplicationRecord
def nesting_level_allowed
if ancestors.count > Group::NUMBER_OF_ANCESTORS_ALLOWED
errors.add(:parent_id, "has too deep level of nesting")
errors.add(:parent_id, _('has too deep level of nesting'))
end
end
......
......@@ -257,13 +257,13 @@ class PagesDomain < ApplicationRecord
def validate_matching_key
unless has_matching_key?
self.errors.add(:key, "doesn't match the certificate")
self.errors.add(:key, _("doesn't match the certificate"))
end
end
def validate_intermediates
unless has_intermediates?
self.errors.add(:certificate, 'misses intermediates')
self.errors.add(:certificate, _('misses intermediates'))
end
end
......
......@@ -79,7 +79,7 @@ class IrkerService < Service
map_recipients
errors.add(:recipients, 'are all invalid') if channels.empty?
errors.add(:recipients, _('are all invalid')) if channels.empty?
true
end
......
......@@ -168,7 +168,7 @@ class IssueTrackerService < Service
return if project.blank?
if project.services.external_issue_trackers.where.not(id: id).any?
errors.add(:base, 'Another issue tracker is already in use. Only one issue tracker service can be active at a time')
errors.add(:base, _('Another issue tracker is already in use. Only one issue tracker service can be active at a time'))
end
end
end
......
......@@ -69,13 +69,13 @@ class PrometheusAlert < ApplicationRecord
def require_valid_environment_project!
return if project == environment&.project
errors.add(:environment, "invalid project")
errors.add(:environment, _('invalid project'))
end
def require_valid_metric_project!
return if prometheus_metric&.common?
return if project == prometheus_metric&.project
errors.add(:prometheus_metric, "invalid project")
errors.add(:prometheus_metric, _('invalid project'))
end
end
......@@ -28,9 +28,9 @@ class Timelog < ApplicationRecord
def issuable_id_is_present
if issue_id && merge_request_id
errors.add(:base, 'Only Issue ID or Merge Request ID is required')
errors.add(:base, _('Only Issue ID or Merge Request ID is required'))
elsif issuable.nil?
errors.add(:base, 'Issue or Merge Request ID is required')
errors.add(:base, _('Issue or Merge Request ID is required'))
end
end
......
......@@ -142,7 +142,7 @@ class ApprovalMergeRequestRule < ApplicationRecord
return if approval_project_rule.blank?
return if merge_request.project == approval_project_rule.project
errors.add(:approval_project_rule, 'must be for the same project')
errors.add(:approval_project_rule, _('must be for the same project'))
end
def refresh_license_management_approvals(project_approval_rule)
......
......@@ -89,7 +89,7 @@ module EE
return unless group
unless project.project_group_links.where(group: group).exists?
self.errors.add(:group, 'does not have access to the project')
self.errors.add(:group, _('does not have access to the project'))
end
end
......@@ -97,7 +97,7 @@ module EE
return unless user
unless project.team.member?(user)
self.errors.add(:user, 'is not a member of the project')
self.errors.add(:user, _('is not a member of the project'))
end
end
end
......
......@@ -108,13 +108,13 @@ module DesignManagement
return if id_a == id_b
errors.add(:issue, "must be the same on design and version")
errors.add(:issue, _('must be the same on design and version'))
end
def design_and_version_have_issue_id
return if [design, version].all? { |obj| obj.try(:issue_id).present? }
errors.add(:issue, "must be present on both design and version")
errors.add(:issue, _('must be present on both design and version'))
end
end
end
......@@ -281,7 +281,7 @@ module EE
return unless mirror_max_capacity && mirror_capacity_threshold
if mirror_capacity_threshold > mirror_max_capacity
errors.add(:mirror_capacity_threshold, "Project's mirror capacity threshold can't be higher than it's maximum capacity")
errors.add(:mirror_capacity_threshold, _("Project's mirror capacity threshold can't be higher than it's maximum capacity"))
end
end
......
......@@ -20,7 +20,7 @@ module EE
def unique_environment_scope
if clusterable.present? && clusterable.clusters.where(environment_scope: environment_scope).where.not(id: id).exists?
errors.add(:environment_scope, 'cannot add duplicated environment scope')
errors.add(:environment_scope, _('cannot add duplicated environment scope'))
end
end
end
......
......@@ -310,7 +310,7 @@ module EE
return if custom_project_templates_group_id.blank?
return if children.exists?(id: custom_project_templates_group_id)
errors.add(:custom_project_templates_group_id, "has to be a subgroup of the group")
errors.add(:custom_project_templates_group_id, _('has to be a subgroup of the group'))
end
def billed_group_members
......
......@@ -71,7 +71,7 @@ module EE
def validate_managing_group
return unless saml_provider&.enforced_group_managed_accounts?
errors.add(:base, 'Group requires separate account') if saml_provider.group != user.managing_group
errors.add(:base, _('Group requires separate account')) if saml_provider.group != user.managing_group
end
end
end
......@@ -30,7 +30,7 @@ module EE
def sso_enforcement
unless ::Gitlab::Auth::GroupSaml::MembershipEnforcer.new(group).can_add_user?(user)
errors.add(:user, 'is not linked to a SAML account')
errors.add(:user, _('is not linked to a SAML account'))
end
end
end
......
......@@ -399,7 +399,7 @@ module EE
def validate_plan_name
if defined?(@plan_name) && @plan_name.present? && PLANS.exclude?(@plan_name) # rubocop:disable Gitlab/ModuleWithInstanceVariables
errors.add(:plan, 'is not included in the list')
errors.add(:plan, _('is not included in the list'))
end
end
......@@ -407,7 +407,7 @@ module EE
return if shared_runner_minutes_supported?
if shared_runners_minutes_limit_changed?
errors.add(:shared_runners_minutes_limit, 'is not supported for this namespace')
errors.add(:shared_runners_minutes_limit, _('is not supported for this namespace'))
end
end
......
......@@ -131,13 +131,13 @@ module EE
def cannot_be_admin_and_auditor
if admin? && auditor?
errors.add(:admin, "user cannot also be an Auditor.")
errors.add(:admin, _('user cannot also be an Auditor.'))
end
end
def auditor_requires_license_add_on
unless license_allows_auditor_user?
errors.add(:auditor, 'user cannot be created without the "GitLab_Auditor_User" addon')
errors.add(:auditor, _('user cannot be created without the "GitLab_Auditor_User" addon'))
end
end
......
......@@ -330,14 +330,14 @@ class GeoNode < ApplicationRecord
# Prevent locking yourself out
def require_current_node_to_be_primary
if name == self.class.current_node_name
errors.add(:base, 'Current node must be the primary node or you will be locking yourself out')
errors.add(:base, _('Current node must be the primary node or you will be locking yourself out'))
end
end
# Prevent creating a Geo Node unless Hashed Storage is enabled
def require_hashed_storage
unless Gitlab::CurrentSettings.hashed_storage_enabled?
errors.add(:base, 'Hashed Storage must be enabled to use Geo')
errors.add(:base, _('Hashed Storage must be enabled to use Geo'))
end
end
......
......@@ -59,7 +59,7 @@ class IssueLink < ApplicationRecord
return unless source && target
if source == target
errors.add(:source, 'cannot be related to itself')
errors.add(:source, _('cannot be related to itself'))
end
end
end
......@@ -476,7 +476,7 @@ class License < ApplicationRecord
def valid_license
return if license?
self.errors.add(:base, "The license key is invalid. Make sure it is exactly as you received it from GitLab Inc.")
self.errors.add(:base, _('The license key is invalid. Make sure it is exactly as you received it from GitLab Inc.'))
end
def prior_historical_max
......@@ -542,6 +542,6 @@ class License < ApplicationRecord
def not_expired
return unless self.license? && self.expired?
self.errors.add(:base, "This license has already expired.")
self.errors.add(:base, _('This license has already expired.'))
end
end
......@@ -64,7 +64,7 @@ module Operations
def first_default_scope
unless scopes.first.environment_scope == '*'
errors.add(:default_scope, 'has to be the first element')
errors.add(:default_scope, _('has to be the first element'))
end
end
......
......@@ -35,7 +35,7 @@ class Packages::ConanMetadatum < ApplicationRecord
def conan_package_type
unless package && package.conan?
errors.add(:base, 'Package type must be Conan')
errors.add(:base, _('Package type must be Conan'))
end
end
end
......@@ -22,7 +22,7 @@ class Packages::MavenMetadatum < ApplicationRecord
def maven_package_type
unless package && package.maven?
errors.add(:base, 'Package type must be Maven')
errors.add(:base, _('Package type must be Maven'))
end
end
end
......@@ -125,14 +125,14 @@ class Packages::Package < ApplicationRecord
.id_not_in(id)
.exists?
errors.add(:base, 'Package recipe already exists') if recipe_exists
errors.add(:base, _('Package recipe already exists')) if recipe_exists
end
def valid_npm_package_name
return unless project&.root_namespace
unless name =~ %r{\A@#{project.root_namespace.path}/[^/]+\z}
errors.add(:name, 'is not valid')
errors.add(:name, _('is not valid'))
end
end
......@@ -140,7 +140,7 @@ class Packages::Package < ApplicationRecord
return unless project
if project.package_already_taken?(name)
errors.add(:base, 'Package already exists')
errors.add(:base, _('Package already exists'))
end
end
end
......@@ -25,7 +25,7 @@ class ServiceDeskSetting < ApplicationRecord
def valid_issue_template
if issue_template_missing?
errors.add(:issue_template_key, "is empty or does not exist")
errors.add(:issue_template_key, _('is empty or does not exist'))
end
end
end
......@@ -40,6 +40,9 @@ msgstr ""
msgid " and %{sliced}"
msgstr ""
msgid " cant be 00000000 (branch removal)"
msgstr ""
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
......@@ -2009,6 +2012,9 @@ msgstr ""
msgid "Anonymous"
msgstr ""
msgid "Another issue tracker is already in use. Only one issue tracker service can be active at a time"
msgstr ""
msgid "Anti-spam verification"
msgstr ""
......@@ -5811,6 +5817,9 @@ msgstr ""
msgid "Current node"
msgstr ""
msgid "Current node must be the primary node or you will be locking yourself out"
msgstr ""
msgid "Current password"
msgstr ""
......@@ -9767,6 +9776,9 @@ msgstr ""
msgid "Group pipeline minutes were successfully reset."
msgstr ""
msgid "Group requires separate account"
msgstr ""
msgid "Group variables (inherited)"
msgstr ""
......@@ -10112,6 +10124,9 @@ msgstr ""
msgid "HTTP Basic: Access denied\\nYou must use a personal access token with 'api' scope for Git over HTTP.\\nYou can generate one at %{profile_personal_access_tokens_url}"
msgstr ""
msgid "Hashed Storage must be enabled to use Geo"
msgstr ""
msgid "Hashed repository storage paths"
msgstr ""
......@@ -10746,6 +10761,9 @@ msgstr ""
msgid "Invalid field"
msgstr ""
msgid "Invalid file format with specified file type"
msgstr ""
msgid "Invalid file."
msgstr ""
......@@ -10839,6 +10857,9 @@ msgstr ""
msgid "Issue events"
msgstr ""
msgid "Issue or Merge Request ID is required"
msgstr ""
msgid "Issue template (optional)"
msgstr ""
......@@ -13365,6 +13386,12 @@ msgstr ""
msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Value Stream Analytics."
msgstr ""
msgid "Only 1 appearances row can exist"
msgstr ""
msgid "Only Issue ID or Merge Request ID is required"
msgstr ""
msgid "Only Project Members"
msgstr ""
......@@ -13539,12 +13566,24 @@ msgstr ""
msgid "Package Registry"
msgstr ""
msgid "Package already exists"
msgstr ""
msgid "Package deleted successfully"
msgstr ""
msgid "Package information"
msgstr ""
msgid "Package recipe already exists"
msgstr ""
msgid "Package type must be Conan"
msgstr ""
msgid "Package type must be Maven"
msgstr ""
msgid "Package was removed"
msgstr ""
......@@ -14961,6 +15000,9 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
msgid "Project's mirror capacity threshold can't be higher than it's maximum capacity"
msgstr ""
msgid "Project: %{name}"
msgstr ""
......@@ -15744,7 +15786,17 @@ msgstr ""
msgid "Pull"
msgstr ""
<<<<<<< HEAD
msgid "Puma is running with a thread count above 1 and the Rugged service is enabled. This may decrease performance in some environments. See our %{link_start}documentation%{link_end} for details of this issue."
=======
msgid "Pull requests from fork are not supported"
msgstr ""
msgid "Puma is running with a thread count above 1 and the rugged service is enabled. This may decrease performance in some environments. See our %{link_start}documentation%{link_end} for details of this issue."
msgstr ""
msgid "Puma is running with a thread count above 1. Information on deprecated GitLab features in this configuration is available in the %{link_start}documentation%{link_end}."
>>>>>>> Add internationalization support to error messages
msgstr ""
msgid "Purchase more minutes"
......@@ -16825,6 +16877,9 @@ msgstr ""
msgid "Scopes"
msgstr ""
msgid "Scopes can't be blank"
msgstr ""
msgid "Scroll down"
msgstr ""
......@@ -19340,6 +19395,9 @@ 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 license key is invalid. Make sure it is exactly as you received it from GitLab Inc."
msgstr ""
msgid "The license was removed. GitLab has fallen back on the previous license."
msgstr ""
......@@ -19994,6 +20052,9 @@ msgstr ""
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
msgid "This license has already expired."
msgstr ""
msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
msgstr ""
......@@ -20201,6 +20262,9 @@ msgstr ""
msgid "Time to merge"
msgstr ""
msgid "Time to subtract exceeds the total time spent"
msgstr ""
msgid "Time tracking"
msgstr ""
......@@ -22881,6 +22945,9 @@ msgstr ""
msgid "archived"
msgstr ""
msgid "are all invalid"
msgstr ""
msgid "assign yourself"
msgstr ""
......@@ -22902,6 +22969,12 @@ msgstr ""
msgid "by %{user}"
msgstr ""
msgid "can not be empty when runner is not allowed to pick untagged jobs"
msgstr ""
msgid "cannot add duplicated environment scope"
msgstr ""
msgid "cannot be changed if a personal project has container registry tags."
msgstr ""
......@@ -22911,9 +22984,18 @@ msgstr ""
msgid "cannot be modified"
msgstr ""
msgid "cannot be related to itself"
msgstr ""
msgid "cannot block others"
msgstr ""
msgid "cannot have groups assigned"
msgstr ""
msgid "cannot have projects assigned"
msgstr ""
msgid "cannot include leading slash or directory traversal."
msgstr ""
......@@ -22923,6 +23005,9 @@ msgstr ""
msgid "cannot merge"
msgstr ""
msgid "cannot modify during creation"
msgstr ""
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
......@@ -23186,6 +23271,21 @@ msgstr ""
msgid "does not have a supported extension. Only %{extension_list} are supported"
msgstr ""
msgid "does not have access to the project"
msgstr ""
msgid "does not have the same project as the milestone"
msgstr ""
msgid "does not match the diff refs"
msgstr ""
msgid "doesn't match the certificate"
msgstr ""
msgid "doesn't support new-style diff notes"
msgstr ""
msgid "done"
msgstr ""
......@@ -23289,6 +23389,15 @@ msgstr ""
msgid "has already been taken"
msgstr ""
msgid "has to be a subgroup of the group"
msgstr ""
msgid "has to be the first element"
msgstr ""
msgid "has too deep level of nesting"
msgstr ""
msgid "help"
msgstr ""
......@@ -23324,9 +23433,15 @@ msgstr[1] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
msgid "invalid project"
msgstr ""
msgid "is"
msgstr ""
msgid "is a required field"
msgstr ""
msgid "is already associated to a GitLab Issue. New issue will not be associated."
msgstr ""
......@@ -23336,9 +23451,18 @@ msgstr ""
msgid "is blocked by"
msgstr ""
msgid "is empty or does not exist"
msgstr ""
msgid "is enabled."
msgstr ""
msgid "is incomplete"
msgstr ""
msgid "is invalid"
msgstr ""
msgid "is invalid because there is downstream lock"
msgstr ""
......@@ -23351,6 +23475,9 @@ msgstr ""
msgid "is not a descendant of the Group owning the template"
msgstr ""
msgid "is not a member of the project"
msgstr ""
msgid "is not a valid X509 certificate."
msgstr ""
......@@ -23363,6 +23490,18 @@ msgstr ""
msgid "is not an email you own"
msgstr ""
msgid "is not included in the list"
msgstr ""
msgid "is not linked to a SAML account"
msgstr ""
msgid "is not supported for this namespace"
msgstr ""
msgid "is not valid"
msgstr ""
msgid "is too long (%{current_value}). The maximum size is %{max_size}."
msgstr ""
......@@ -23434,6 +23573,9 @@ msgstr ""
msgid "milestone should belong either to a project or a group."
msgstr ""
msgid "misses intermediates"
msgstr ""
msgid "missing"
msgstr ""
......@@ -23749,12 +23891,27 @@ msgstr ""
msgid "mrWidget|to start a merge train when the pipeline succeeds"
msgstr ""
msgid "must be for the same project"
msgstr ""
msgid "must be greater than start date"
msgstr ""
msgid "must be present on both design and version"
msgstr ""
msgid "must be the same on design and version"
msgstr ""
msgid "n/a"
msgstr ""
msgid "needs to be assigned to at least one project"
msgstr ""
msgid "needs to be assigned to exactly one group"
msgstr ""
msgid "needs to be between 10 minutes and 1 month"
msgstr ""
......@@ -23788,6 +23945,9 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
msgid "only allowed for project cluster"
msgstr ""
msgid "opened %{timeAgoString} by %{user}"
msgstr ""
......@@ -24010,6 +24170,12 @@ msgstr ""
msgid "user avatar"
msgstr ""
msgid "user cannot also be an Auditor."
msgstr ""
msgid "user cannot be created without the \"GitLab_Auditor_User\" addon"
msgstr ""
msgid "username"
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