[space] i18n cleanup to fix tests

GitOrigin-RevId: 97a99cce64be4cc2ab74f9c3fbf5a950b700a230
This commit is contained in:
Aleksandr Krasilnikov
2020-11-03 18:13:08 +03:00
committed by intellij-monorepo-bot
parent 5a48e0cee6
commit f00aef98eb
26 changed files with 69 additions and 57 deletions

View File

@@ -108,7 +108,7 @@ class SpaceMainToolBarAction : DumbAwareAction() {
val serverUrl = cleanupUrl(host)
val menuItems: MutableList<AccountMenuItem> = mutableListOf()
menuItems += AccountMenuItem.Account(
workspace.me.value.englishFullName(),
workspace.me.value.englishFullName(), // NON-NLS
serverUrl,
resizeIcon(icon, VcsCloneDialogUiSpec.Components.popupMenuAvatarSize),
listOf(browseAction(SpaceBundle.message("main.toolbar.open.server", serverUrl), host, true)))

View File

@@ -167,7 +167,8 @@ internal class SpaceWorkspaceComponent : WorkspaceManagerHost(), LifetimedDispos
}
when (val response = signIn(connectLt, serverName)) {
is OAuthTokenResponse.Error -> {
loginState.value = SpaceLoginState.Disconnected(serverName, response.description)
val error = response.description // NON-NLS
loginState.value = SpaceLoginState.Disconnected(serverName, error)
}
}
}

View File

@@ -214,7 +214,7 @@ class SpaceKtsModelBuilder(val project: Project) : LifetimedDisposable by Lifeti
val validationResult = scriptConfig.validate()
if (validationResult is ProjectConfigValidationResult.Failed) {
val message = validationResult.errorMessage()
val message = validationResult.errorMessage() // NON-NLS
logData.error(message)
_config.value = null
_error.value = message

View File

@@ -12,7 +12,7 @@ import platform.common.ProductName
class SpaceRunConfigurationType : SimpleConfigurationType(
"SpaceRunConfiguration",
"$ProductName Task",
SpaceBundle.message("space.task.run.configuration.name"),
SpaceBundle.message("run.configuration.description", ProductName),
NotNullLazyValue.createValue { SpaceIcons.Main }
) {

View File

@@ -1,12 +1,12 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.space.plugins.pipelines.services.run
import com.intellij.space.plugins.pipelines.services.execution.SpaceTaskRunner
import com.intellij.execution.ExecutionException
import com.intellij.execution.configurations.CommandLineState
import com.intellij.execution.process.ProcessHandler
import com.intellij.execution.runners.ExecutionEnvironment
import com.intellij.openapi.components.service
import com.intellij.space.plugins.pipelines.services.execution.SpaceTaskRunner
class SpaceRunTaskState(private val settings: SpaceRunTaskConfigurationOptions, environment: ExecutionEnvironment) : CommandLineState(
environment) {
@@ -16,7 +16,7 @@ class SpaceRunTaskState(private val settings: SpaceRunTaskConfigurationOptions,
val runner = project.service<SpaceTaskRunner>()
val taskName = settings.taskName
if (taskName == null) {
throw ExecutionException("TaskName is null")
throw ExecutionException("TaskName is null") // NON-NLS
}
else {
return runner.run(taskName)

View File

@@ -3,6 +3,7 @@ package com.intellij.space.plugins.pipelines.viewmodel
import circlet.pipelines.config.api.ScriptConfig
import com.intellij.build.events.BuildEvent
import com.intellij.build.events.BuildEventsNls
import com.intellij.build.events.impl.OutputBuildEventImpl
import libraries.coroutines.extra.LifetimeSource
import libraries.coroutines.extra.assertNotTerminated
@@ -31,12 +32,12 @@ class LogData {
private val _buildLifetime = LifetimeSource()
fun message(message: String) {
fun message(@BuildEventsNls.Message message: String) {
_buildLifetime.assertNotTerminated()
messages.add(OutputBuildEventImpl(buildId, message + "\n", true))
}
fun error(message: String) {
fun error(@BuildEventsNls.Message message: String) {
_buildLifetime.assertNotTerminated()
messages.add(OutputBuildEventImpl(buildId, message + "\n", false))
}

View File

@@ -25,7 +25,6 @@ import com.intellij.util.ui.GridBag
import com.intellij.util.ui.UIUtil
import libraries.coroutines.extra.LifetimeSource
import libraries.klogging.logger
import platform.common.ProductName
import java.awt.BorderLayout
import java.awt.GridBagLayout
import javax.swing.*
@@ -33,7 +32,7 @@ import javax.swing.*
val log = logger<SpaceSettingsPanel>()
class SpaceSettingsPanel :
BoundConfigurable(ProductName, null),
BoundConfigurable(SpaceBundle.message("configurable.name"), null),
SearchableConfigurable,
Disposable {
@@ -104,7 +103,7 @@ class SpaceSettingsPanel :
}
val namePanel = JPanel(VerticalLayout(UIUtil.DEFAULT_VGAP)).apply {
add(JLabel(st.workspace.me.value.englishFullName()))
add(JLabel(st.workspace.me.value.englishFullName())) // NON-NLS
add(serverComponent)
}

View File

@@ -18,7 +18,7 @@ internal fun buildLoginPanel(st: SpaceLoginState.Disconnected,
loginAction: (String) -> Unit
): DialogPanel {
return panel {
val serverField = JTextField(st.server, 30)
val serverField = JTextField(st.server, 30) // NON-NLS
val loginButton = JButton(SpaceBundle.message("login.panel.log.in.button")).apply {
addActionListener {

View File

@@ -1,13 +1,13 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.space.tools
import com.intellij.space.plugins.pipelines.ui.SpaceToolWindowService
import com.intellij.space.utils.computeSafe
import com.intellij.openapi.components.service
import com.intellij.openapi.project.DumbAware
import com.intellij.openapi.project.Project
import com.intellij.openapi.wm.ToolWindow
import com.intellij.openapi.wm.ToolWindowFactory
import com.intellij.space.plugins.pipelines.ui.SpaceToolWindowService
import com.intellij.space.utils.computeSafe
class SpaceToolWindowFactory : ToolWindowFactory, DumbAware {
@@ -25,7 +25,7 @@ class SpaceToolWindowFactory : ToolWindowFactory, DumbAware {
}
companion object {
const val TOOL_WINDOW_ID = "Space Automation"
const val TOOL_WINDOW_ID = "Space Automation" // NON-NLS
}
}

View File

@@ -11,6 +11,7 @@ import com.intellij.openapi.components.service
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Computable
import com.intellij.openapi.util.NlsContexts
import com.intellij.space.messages.SpaceBundle
import com.intellij.xml.util.XmlStringUtil
import libraries.coroutines.extra.Lifetime
import libraries.coroutines.extra.LifetimeSource
@@ -45,7 +46,7 @@ inline fun <T : Any, C : ComponentManager> C.computeSafe(crossinline compute: C.
fun notify(@NlsContexts.NotificationContent text: String, actions: List<AnAction> = listOf()) {
val notification = Notification(
ProductName,
ProductName,
SpaceBundle.message("product.name"),
XmlStringUtil.wrapInHtml(text),
NotificationType.INFORMATION
)

View File

@@ -100,7 +100,7 @@ internal class SpaceSetGitHttpPasswordDialog(
}
catch (e: RpcException) {
log.error(e, e.failure.message())
setErrorText(e.failure.message())
setErrorText(e.failure.message()) // NON-NLS
}
catch (e: Exception) {
log.error(e, "Unable to set password")
@@ -113,9 +113,9 @@ internal class SpaceSetGitHttpPasswordDialog(
}
}
override fun createCenterPanel(): JComponent? = panel {
override fun createCenterPanel(): JComponent = panel {
row(SpaceBundle.message("set.http.password.dialog.username.label")) {
JBTextField(me.username)().component.apply {
JBTextField(me.username)().component.apply { // NON-NLS
isEditable = false
}
}

View File

@@ -148,8 +148,8 @@ private class CloneView(
val fcd = FileChooserDescriptorFactory.createSingleFolderDescriptor()
fcd.isShowFileSystemRoots = true
fcd.isHideIgnored = false
addBrowseFolderListener(DvcsBundle.getString("clone.destination.directory.browser.title"),
DvcsBundle.getString("clone.destination.directory.browser.description"),
addBrowseFolderListener(DvcsBundle.message("clone.destination.directory.browser.title"),
DvcsBundle.message("clone.destination.directory.browser.description"),
project,
fcd)
}
@@ -195,7 +195,7 @@ private class CloneView(
}
cloneViewModel.me.forEach(lifetime) { profile ->
accountLabel.toolTipText = profile.englishFullName()
accountLabel.toolTipText = profile.englishFullName() // NON-NLS
}
cloneViewModel.repos.batches.forEach(lifetime) { batchResult ->
@@ -250,7 +250,7 @@ private class CloneView(
val host = st.server
val serverUrl = cleanupUrl(st.server)
val menuItems: MutableList<AccountMenuItem> = mutableListOf()
menuItems += AccountMenuItem.Account(st.workspace.me.value.englishFullName(),
menuItems += AccountMenuItem.Account(st.workspace.me.value.englishFullName(), // NON-NLS
serverUrl,
resizeIcon(SpaceUserAvatarProvider.getInstance().avatars.value.circle,
VcsCloneDialogUiSpec.Components.popupMenuAvatarSize),

View File

@@ -1,16 +1,15 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.space.vcs.clone
import com.intellij.space.settings.SpaceSettings
import com.intellij.space.ui.cleanupUrl
import com.intellij.openapi.application.ModalityState
import com.intellij.openapi.project.Project
import com.intellij.openapi.vcs.ui.cloneDialog.VcsCloneDialogExtension
import com.intellij.openapi.vcs.ui.cloneDialog.VcsCloneDialogExtensionComponent
import com.intellij.openapi.vcs.ui.cloneDialog.VcsCloneDialogExtensionStatusLine
import com.intellij.space.messages.SpaceBundle
import com.intellij.space.settings.SpaceSettings
import com.intellij.space.ui.cleanupUrl
import icons.SpaceIcons
import platform.common.ProductName
import javax.swing.Icon
class SpaceCloneExtension : VcsCloneDialogExtension {
@@ -20,7 +19,7 @@ class SpaceCloneExtension : VcsCloneDialogExtension {
override fun getIcon(): Icon = SpaceIcons.Main
override fun getName(): String = ProductName
override fun getName(): String = SpaceBundle.message("product.name")
override fun getAdditionalStatusLines(): List<VcsCloneDialogExtensionStatusLine> {
val server = cleanupUrl(SpaceSettings.getInstance().serverSettings.server)

View File

@@ -10,11 +10,12 @@ import com.intellij.ui.SimpleTextAttributes
import com.intellij.ui.components.panels.VerticalLayout
import com.intellij.util.ui.*
import libraries.io.FileUtil
import org.jetbrains.annotations.Nls
import java.awt.GridBagLayout
import javax.swing.*
internal class SpaceCloneListItemRenderer : ListCellRenderer<SpaceCloneListItem> {
private val starIcon: Icon = AllIcons.Nodes.Favorite as Icon
private val starIcon: Icon = AllIcons.Nodes.Favorite
private val insetsLeft: JBInsets = JBUI.insetsLeft(30)
private val smallLeftInset: JBInsets = JBUI.insetsLeft(3)
@@ -64,7 +65,7 @@ internal class SpaceCloneListItemRenderer : ListCellRenderer<SpaceCloneListItem>
selected: Boolean,
focused: Boolean): JComponent {
repoNameComponent.clear()
repoNameComponent.append(value.repoInfo.name)
repoNameComponent.append(value.repoInfo.name) // NON-NLS
repoDetailsComponent.clear()
val details = value.repoDetails.value?.let { buildDetailsString(it, value.repoInfo) }
@@ -88,7 +89,7 @@ internal class SpaceCloneListItemRenderer : ListCellRenderer<SpaceCloneListItem>
projectNameComponent.clear()
val spaceProject = value.project
projectNameComponent.append(spaceProject.name, SimpleTextAttributes.REGULAR_BOLD_ATTRIBUTES)
projectNameComponent.append(spaceProject.name, SimpleTextAttributes.REGULAR_BOLD_ATTRIBUTES) // NON-NLS
starLabel.icon = if (value.starred) starIcon else EmptyIcon.ICON_13
val projectDescription = spaceProject.description
@@ -108,6 +109,7 @@ internal class SpaceCloneListItemRenderer : ListCellRenderer<SpaceCloneListItem>
}
}
@Nls
private fun buildDetailsString(repoDetails: RepoDetails, repo: PR_RepositoryInfo) = with(repoDetails) {
SpaceBundle.message(
"clone.dialog.projects.list.repository.description",

View File

@@ -78,7 +78,7 @@ internal class SpaceCodeReviewTabContentManager(private val project: Project, pr
val lifeTime = LifetimeSource()
val factory = ContentFactory.SERVICE.getInstance()
return factory.createContent(null, spaceProjectInfo.project.name, false).apply {
return factory.createContent(null, spaceProjectInfo.project.name, false).apply { // NON-NLS
val disposable = Disposable {
lifeTime.terminate()
}
@@ -87,7 +87,7 @@ internal class SpaceCodeReviewTabContentManager(private val project: Project, pr
icon = SpaceIcons.Main
component = ReviewLoginComponent(lifetime, project, spaceProjectInfo, projectRepos).view
description = spaceProjectInfo.key.key
description = spaceProjectInfo.key.key // NON-NLS
}
}
}

View File

@@ -8,6 +8,7 @@ import com.intellij.ide.plugins.newui.VerticalLayout
import com.intellij.openapi.roots.ui.componentsList.components.ScrollablePanel
import com.intellij.openapi.ui.VerticalFlowLayout
import com.intellij.openapi.vcs.changes.ui.CurrentBranchComponent
import com.intellij.space.messages.SpaceBundle
import com.intellij.space.utils.formatAbsolute
import com.intellij.space.utils.toLocalDateTime
import com.intellij.space.vcs.review.HtmlEditorPane
@@ -41,7 +42,7 @@ internal class DetailedInfoPanel(detailsVm: CrDetailsVm<out CodeReviewRecord>) {
}
detailsVm.createdBy.forEach(detailsVm.lifetime) {
infoLabel.text = "created by ${it!!.englishFullName()} ${detailsVm.createdAt.value.toLocalDateTime().formatAbsolute()}"
infoLabel.text = SpaceBundle.message("review.label.created.by.user.at.time", it!!.englishFullName(), detailsVm.createdAt.value.toLocalDateTime().formatAbsolute())
}
detailsVm.title.forEach(detailsVm.lifetime) {
@@ -56,7 +57,7 @@ internal class DetailedInfoPanel(detailsVm: CrDetailsVm<out CodeReviewRecord>) {
val projectKeyComponent = SimpleColoredComponent().apply {
ipad = JBUI.insetsLeft(0)
append(detailsVm.projectKey.key)
append(detailsVm.projectKey.key) // NON-NLS
append(" / ", SimpleTextAttributes.GRAYED_ATTRIBUTES)
}
@@ -132,8 +133,8 @@ internal class DetailedInfoPanel(detailsVm: CrDetailsVm<out CodeReviewRecord>) {
)
return NonOpaquePanel(layout).apply {
val repo = detailsVm.repository.value
val target = detailsVm.targetBranchInfo.value?.displayName
val source = detailsVm.sourceBranchInfo.value?.displayName
val target = detailsVm.targetBranchInfo.value?.displayName // NON-NLS
val source = detailsVm.sourceBranchInfo.value?.displayName // NON-NLS
add(JLabel("$repo: "))
add(JLabel(target), CC())

View File

@@ -95,7 +95,7 @@ internal open class ParticipantsComponent(
users?.forEach { codeReviewParticipant ->
val memberProfile = codeReviewParticipant.user.resolve()
val fullName = memberProfile.englishFullName()
val fullName = memberProfile.englishFullName() // NON-NLS
val reviewerLabel = JLabel(avatarProvider.getIcon(memberProfile)).apply {
toolTipText = fullName
text = fullName

View File

@@ -43,12 +43,12 @@ class SpaceCommitRenderer : ListCellRenderer<ReviewCommitListItem> {
if (value.inCurrentProject) SimpleTextAttributes.REGULAR_BOLD_ATTRIBUTES
else SimpleTextAttributes.GRAYED_ATTRIBUTES
repositorySeparator.append(value.repositoryInReview.name, attr)
repositorySeparator.append(value.repositoryInReview.name, attr) // NON-NLS
panel.addToTop(repositorySeparator)
}
messageComponent.clear()
messageComponent.append(value.commitWithGraph.commit.message,
messageComponent.append(value.commitWithGraph.commit.message, // NON-NLS
SimpleTextAttributes(SimpleTextAttributes.STYLE_PLAIN, UIUtil.getListForeground(isSelected, true)))
SpeedSearchUtil.applySpeedSearchHighlighting(list, messageComponent, true, isSelected)

View File

@@ -37,7 +37,7 @@ internal class ReviewersSelectorListRenderer(private val avatarProvider: SpaceAv
label.apply {
clear()
append(value.reviewer.englishFullName())
append(value.reviewer.englishFullName()) // NON-NLS
icon = avatarProvider.getIcon(value.reviewer)
foreground = primaryTextColor
}

View File

@@ -51,7 +51,7 @@ class SpaceReviewAuthorActionGroup : ActionGroup() {
// TODO: fix review created by Space service
val profile = review.createdBy!!.resolve()
e.presentation.text = profile.englishFullName()
e.presentation.text = profile.englishFullName() // NON-NLS
}
override fun getChildren(e: AnActionEvent?): Array<AnAction> {
@@ -74,7 +74,7 @@ class SpaceReviewAuthorActionGroup : ActionGroup() {
}
override fun update(e: AnActionEvent) {
e.presentation.text = profile.englishFullName()
e.presentation.text = profile.englishFullName() // NON-NLS
}
override fun getChildren(e: AnActionEvent?): Array<AnAction> {

View File

@@ -7,6 +7,7 @@ import circlet.code.api.CodeReviewParticipantRole
import circlet.code.api.CodeReviewWithCount
import circlet.platform.client.resolve
import com.intellij.icons.AllIcons
import com.intellij.space.messages.SpaceBundle
import com.intellij.space.ui.SpaceAvatarProvider
import com.intellij.space.utils.formatAbsolute
import com.intellij.space.utils.toLocalDateTime
@@ -144,7 +145,7 @@ internal class SpaceReviewListCellRenderer(
val author = review.createdBy!!.resolve()
val key = review.key ?: ""
val localDateTime = review.createdAt.toLocalDateTime()
val info = "$key by ${author.englishFullName()} ${localDateTime.formatAbsolute()}"
val info = SpaceBundle.message("review.by.author.at.time", key, author.englishFullName(), localDateTime.formatAbsolute())
val fullToolTipText = StringBuilder().apply {
append(title).append(BR)
@@ -152,19 +153,19 @@ internal class SpaceReviewListCellRenderer(
authors?.let {
append(BR)
append("Authors: ").append(BR)
append(SpaceBundle.message("review.details.authors.label")).append(BR)
authors.forEach {
append(it.user.resolve().englishFullName()).append(BR)
}
}
reviewers?.let {
append(BR)
append("Reviewers: ").append(BR)
append(SpaceBundle.message("review.details.reviewers.label")).append(BR)
reviewers.forEach {
append(it.user.resolve().englishFullName()).append(BR)
}
}
}.toString().let { XmlStringUtil.wrapInHtml(it) }
}.toString().let { XmlStringUtil.wrapInHtml(it) } // NON-NLS
titleLabel.apply {
text = title
@@ -207,7 +208,7 @@ internal class SpaceReviewListCellRenderer(
label.icon = emptyAvatar
profile?.let {
label.icon = avatarProvider.getIcon(it)
label.toolTipText = it.englishFullName()
label.toolTipText = it.englishFullName() // NON-NLS
}
}
}

View File

@@ -82,7 +82,7 @@ internal class SpaceCreateProjectDialog(parent: JComponent) : DialogWrapper(pare
throw e
}
catch (e: RpcException) {
setErrorText(e.failure.message())
setErrorText(e.failure.message()) // NON-NLS
}
catch (e: Exception) {
setErrorText(SpaceBundle.message("create.project.dialog.error.unable.to.create.text", e.message ?: e.javaClass.simpleName))

View File

@@ -14,7 +14,7 @@ class SpaceProjectListComboRenderer : ColoredListCellRenderer<PR_Project>() {
selected: Boolean,
hasFocus: Boolean) {
project ?: return
append(project.name)
append(project.name) // NON-NLS
append(" ")
append(SpaceBundle.message("project.list.project.key.description", project.key.key), SimpleTextAttributes.GRAY_SMALL_ATTRIBUTES)
}

View File

@@ -142,7 +142,7 @@ class SpaceShareProjectAction : DumbAwareAction() {
VcsNotifier.getInstance(project).notifySuccess(
"space.project.shared.successfully",
SpaceBundle.message("share.project.success.notification.title"),
formatLink(url, repoInfo.name),
formatLink(url, repoInfo.name), // NON-NLS
NotificationListener.URL_OPENING_LISTENER
)
}
@@ -187,7 +187,7 @@ class SpaceShareProjectAction : DumbAwareAction() {
val result = Git.getInstance().init(project, root)
if (!result.success()) {
VcsNotifier.getInstance(project).notifyError("space.git.repo.init.error",
GitBundle.getString("initializing.title"),
GitBundle.message("initializing.title"),
result.errorOutputAsHtmlString)
log.info { "Failed to create empty git repo: " + result.errorOutputAsJoinedString }
return false
@@ -264,8 +264,8 @@ class SpaceShareProjectAction : DumbAwareAction() {
}
catch (e: VcsException) {
log.warn(e)
val repositoryLink = formatLink(url, "'$name'")
notifyError(project, wrapInHtmlLines(
val repositoryLink = formatLink(url, "'$name'") // NON-NLS
notifyError(project, wrapInHtmlLines( // NON-NLS
SpaceBundle.message("share.project.error.notification.initial.commit.failed.message", repositoryLink),
*e.messages
))
@@ -307,14 +307,14 @@ class SpaceShareProjectAction : DumbAwareAction() {
indicator.text = SpaceBundle.message("share.project.action.progress.title.pushing.title")
val currentBranch = repository.currentBranch
val repositoryLink = formatLink(url, "'$name'")
val repositoryLink = formatLink(url, "'$name'") // NON-NLS
if (currentBranch == null) {
notifyError(project, SpaceBundle.message("share.project.error.notification.no.current.branch.message", repositoryLink))
return false
}
val result = git.push(repository, remoteName, remoteUrl, currentBranch.name, true)
if (!result.success()) {
notifyError(project, wrapInHtmlLines(
notifyError(project, wrapInHtmlLines( // NON-NLS
SpaceBundle.message("share.project.error.notification.push.failed.message", repositoryLink),
result.errorOutputAsHtmlString
))

View File

@@ -121,7 +121,7 @@ class SpaceShareProjectDialog(project: Project) : DialogWrapper(project, true) {
throw e
}
catch (e: RpcException) {
setErrorText(e.failure.message())
setErrorText(e.failure.message()) // NON-NLS
}
catch (e: Exception) {
setErrorText(SpaceBundle.message("share.project.dialog.error.unable.to.create.repository", e.message ?: e.javaClass.simpleName))
@@ -164,7 +164,7 @@ class SpaceShareProjectDialog(project: Project) : DialogWrapper(project, true) {
if (projectComboBoxModel.selectedItem == null) {
list.add(ValidationInfo(SpaceBundle.message("share.project.dialog.validation.text.project.should.be.specified"), projectComboBox))
}
val nameError = repositoryNameValid(repoNameField.text).second
val nameError = repositoryNameValid(repoNameField.text).second // NON-NLS
if (nameError != null) {
list.addIfNotNull(ValidationInfo(nameError, repoNameField))
}

View File

@@ -1,3 +1,4 @@
product.name=Space
configurable.name=Space
action.com.intellij.space.actions.SpaceLoginAction.text=Log In to Space...
@@ -196,3 +197,9 @@ toolwindow.stripe.Space_Code_Reviews=Space Code Reviews
review.diff.filetype.description=Space review diff
review.diff.tab.title=Diff for {0}
review.diff.editor.name=Space Diff Editor
review.label.created.by.user.at.time=created by {0} {1}
review.by.author.at.time={0} by {1} {2}
review.details.authors.label=Authors:
review.details.reviewers.label=Reviewers:
space.task.run.configuration.name=Space Task