From 2037ea615fd5860a9867c728e2734a12d46eb9af Mon Sep 17 00:00:00 2001 From: "Dmitry.Krasilschikov" Date: Tue, 9 Jun 2020 19:01:43 +0300 Subject: [PATCH] properly localize pluralized "usages" word GitOrigin-RevId: f334d43eba51f4f47d8b63533ffb51a16571e117 --- .../actions/FindUnusedTestDataAction.java | 2 +- .../messages/ExecutionBundle.properties | 1 + .../messages/UsageViewBundle.properties | 2 +- .../com/intellij/usages/UsageLimitUtil.java | 3 +- .../usages/UsageViewPresentation.java | 40 ++++++++++++++----- 5 files changed, 34 insertions(+), 14 deletions(-) diff --git a/java/execution/impl/src/com/intellij/execution/testDiscovery/actions/FindUnusedTestDataAction.java b/java/execution/impl/src/com/intellij/execution/testDiscovery/actions/FindUnusedTestDataAction.java index 5339cc1c5c43..4a750c2a07db 100644 --- a/java/execution/impl/src/com/intellij/execution/testDiscovery/actions/FindUnusedTestDataAction.java +++ b/java/execution/impl/src/com/intellij/execution/testDiscovery/actions/FindUnusedTestDataAction.java @@ -86,7 +86,7 @@ public class FindUnusedTestDataAction extends DumbAwareAction { "Unused Test Data", p -> { p.setCodeUsages(false); - p.setUsagesWord("file"); + p.setUsagesWord(count -> ExecutionBundle.message("label.usages.word.file", count)); }, project)); } }); diff --git a/platform/lang-api/resources/messages/ExecutionBundle.properties b/platform/lang-api/resources/messages/ExecutionBundle.properties index 31e80613e60f..f9a6aeea338f 100644 --- a/platform/lang-api/resources/messages/ExecutionBundle.properties +++ b/platform/lang-api/resources/messages/ExecutionBundle.properties @@ -540,3 +540,4 @@ popup.title.select.process.to.update=Select Process to Update dialog.message.working.directory.null.for.project.module=Working directory is null for project ''{0}'' ({1}), module {2} dialog.message.working.directory.doesn.t.exist=Working directory ''{0}'' doesn''t exist do.not.build.before.run=Do not build before run +label.usages.word.file={0, choice, 1#file|2#files} diff --git a/platform/usageView/resources/messages/UsageViewBundle.properties b/platform/usageView/resources/messages/UsageViewBundle.properties index 0ad913fb2670..629b317d5fba 100644 --- a/platform/usageView/resources/messages/UsageViewBundle.properties +++ b/platform/usageView/resources/messages/UsageViewBundle.properties @@ -2,7 +2,7 @@ node.targets=Targets node.non.code.usages=Non-code usages node.usages.in.generated.code=Usages in generated code node.found.usages=Found usages -usage.name=usage +usage.name={0, choice, 1#usage|2#usages} usages.title=Usages usages.n={0,choice, 0#no usages|1#1 usage|2#{0,number} usages} found action.show.import.statements=Show import statements diff --git a/platform/usageView/src/com/intellij/usages/UsageLimitUtil.java b/platform/usageView/src/com/intellij/usages/UsageLimitUtil.java index de3d1d643c0e..51dbe51a5bf0 100644 --- a/platform/usageView/src/com/intellij/usages/UsageLimitUtil.java +++ b/platform/usageView/src/com/intellij/usages/UsageLimitUtil.java @@ -4,7 +4,6 @@ package com.intellij.usages; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.Computable; -import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.GuiUtils; import com.intellij.usageView.UsageViewBundle; import org.jetbrains.annotations.NotNull; @@ -21,7 +20,7 @@ public final class UsageLimitUtil { @NotNull final String message, @NotNull final UsageViewPresentation usageViewPresentation) { int result = runOrInvokeAndWait(() -> { - String title = UsageViewBundle.message("find.excessive.usages.title", StringUtil.capitalize(StringUtil.pluralize(usageViewPresentation.getUsagesWord()))); + String title = UsageViewBundle.message("find.excessive.usages.title", usageViewPresentation.getUsagesWord(2)); return Messages.showOkCancelDialog(project, message, title, UsageViewBundle.message("button.text.continue"), UsageViewBundle.message("button.text.abort"), Messages.getWarningIcon()); diff --git a/platform/usageView/src/com/intellij/usages/UsageViewPresentation.java b/platform/usageView/src/com/intellij/usages/UsageViewPresentation.java index b138ac074120..ba5226938421 100644 --- a/platform/usageView/src/com/intellij/usages/UsageViewPresentation.java +++ b/platform/usageView/src/com/intellij/usages/UsageViewPresentation.java @@ -1,17 +1,19 @@ // 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.usages; -import static org.jetbrains.annotations.Nls.Capitalization.Title; - import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.text.StringUtil; import com.intellij.usageView.UsageViewBundle; -import java.util.Objects; -import java.util.regex.Pattern; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Objects; +import java.util.function.Function; +import java.util.regex.Pattern; + +import static org.jetbrains.annotations.Nls.Capitalization.Title; + public class UsageViewPresentation { private static final Logger LOG = Logger.getInstance(UsageViewPresentation.class); @@ -29,7 +31,7 @@ public class UsageViewPresentation { private boolean myOpenInNewTab = true; private boolean myCodeUsages = true; private boolean myUsageTypeFilteringAvailable; - private String myUsagesWord = UsageViewBundle.message("usage.name"); + private Function myUsagesWordSupplier = count -> UsageViewBundle.message("usage.name", count); private String myTabName; private String myToolwindowTitle; @@ -151,13 +153,29 @@ public class UsageViewPresentation { myCodeUsages = codeUsages; } + /** + * Use {@link #getUsagesWord(int)} instead + */ + @Deprecated @NotNull public String getUsagesWord() { - return myUsagesWord; + return myUsagesWordSupplier.apply(1); } + /** + * Use {@link #setUsagesWord(Function)} instead + */ + @Deprecated public void setUsagesWord(@NotNull String usagesWord) { - myUsagesWord = usagesWord; + myUsagesWordSupplier = count -> usagesWord; + } + + public String getUsagesWord(int count) { + return myUsagesWordSupplier.apply(count); + } + + public void setUsagesWord(@NotNull Function usagesWordSupplier) { + myUsagesWordSupplier = usagesWordSupplier; } public String getTabName() { @@ -274,7 +292,8 @@ public class UsageViewPresentation { && Objects.equals(myUsagesInGeneratedCodeString, that.myUsagesInGeneratedCodeString) && Objects.equals(myUsagesString, that.myUsagesString) && Objects.equals(mySearchString, that.mySearchString) - && Objects.equals(myUsagesWord, that.myUsagesWord) + && Objects.equals(myUsagesWordSupplier.apply(1), that.myUsagesWordSupplier.apply(1)) + && Objects.equals(myUsagesWordSupplier.apply(2), that.myUsagesWordSupplier.apply(2)) && arePatternsEqual(mySearchPattern, that.mySearchPattern) && arePatternsEqual(myReplacePattern, that.myReplacePattern); } @@ -308,7 +327,8 @@ public class UsageViewPresentation { myCodeUsages, myUsageTypeFilteringAvailable, myExcludeAvailable, - myUsagesWord, + myUsagesWordSupplier.apply(1), + myUsagesWordSupplier.apply(2), myTabName, myToolwindowTitle, myDetachedMode, @@ -336,7 +356,7 @@ public class UsageViewPresentation { copyInstance.myOpenInNewTab = myOpenInNewTab; copyInstance.myCodeUsages = myCodeUsages; copyInstance.myUsageTypeFilteringAvailable = myUsageTypeFilteringAvailable; - copyInstance.myUsagesWord = myUsagesWord; + copyInstance.myUsagesWordSupplier = myUsagesWordSupplier; copyInstance.myTabName = myTabName; copyInstance.myToolwindowTitle = myToolwindowTitle; copyInstance.myDetachedMode = myDetachedMode;