This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/causeway.git


The following commit(s) were added to refs/heads/master by this push:
     new cc41b69830 CAUSEWAY-3321: adds translation support to tiles of any 
cardinality
cc41b69830 is described below

commit cc41b69830701e0fc2e2051013be28c386a9eb81
Author: Andi Huber <[email protected]>
AuthorDate: Tue Feb 7 08:56:06 2023 +0100

    CAUSEWAY-3321: adds translation support to tiles of any cardinality
---
 .../core/metamodel/object/MmTitleUtil.java         | 25 ++++++++++++++++-----
 .../core/metamodel/object/_InternalTitleUtil.java  | 26 +++++++++++++---------
 ...entNegotiationServiceForRestfulObjectsV1_0.java |  2 +-
 3 files changed, 36 insertions(+), 17 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmTitleUtil.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmTitleUtil.java
index 8995f626fa..607057a737 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmTitleUtil.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmTitleUtil.java
@@ -18,10 +18,16 @@
  */
 package org.apache.causeway.core.metamodel.object;
 
+import java.util.Optional;
 import java.util.function.Predicate;
 
+import org.springframework.lang.Nullable;
+
+import org.apache.causeway.applib.services.i18n.TranslationContext;
+import org.apache.causeway.applib.services.i18n.TranslationService;
 import 
org.apache.causeway.core.metamodel.facets.object.title.TitleRenderRequest;
 
+import lombok.val;
 import lombok.experimental.UtilityClass;
 
 @UtilityClass
@@ -52,15 +58,24 @@ public class MmTitleUtil {
     }
 
     public static String formatAnyCardinalityAsTitle(
-            int cardinality, // number of items 
-            String singularName) {
+            final int cardinality, // number of items
+            final String singularName,
+            final @Nullable TranslationService translationService) {
+
+        val nounTranslated = Optional.ofNullable(translationService)
+                .map(ts->ts.translate(TranslationContext.empty(), 
singularName))
+                .orElse(singularName);
+        val entriesOfTranslated = Optional.ofNullable(translationService)
+                .map(ts->ts.translate(TranslationContext.empty(), "entries 
of"))
+                .orElse("entries of");
+
         switch (cardinality) {
         case 0:
-            return "No " + singularName;
+            return "No " + nounTranslated;
         case 1:
-            return "1 " + singularName;
+            return "1 " + nounTranslated;
         default:
-            return "" + cardinality + " entries of " + singularName;
+            return "" + cardinality + " " + entriesOfTranslated + " " + 
nounTranslated;
         }
     }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_InternalTitleUtil.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_InternalTitleUtil.java
index b5b776338e..1c8c97dd13 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_InternalTitleUtil.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_InternalTitleUtil.java
@@ -20,8 +20,7 @@ package org.apache.causeway.core.metamodel.object;
 
 import java.util.Optional;
 
-import org.springframework.lang.Nullable;
-
+import org.apache.causeway.applib.services.i18n.TranslationContext;
 import org.apache.causeway.core.metamodel.facets.collections.CollectionFacet;
 import 
org.apache.causeway.core.metamodel.facets.object.title.TitleRenderRequest;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
@@ -43,12 +42,12 @@ final class _InternalTitleUtil {
             return managedObject.getTitle();
         }
 
-        return managedObject.getSpecification().isSingular()
+        val objSpec = managedObject.getSpecification();
+
+        return objSpec.isSingular()
             ? objectTitleString(titleRenderRequest)
                     .trim()
-            : formatAnyCardinalityAsTitle(
-                    
managedObject.getSpecification().getFacet(CollectionFacet.class).size(managedObject),
-                    managedObject.getElementSpecification().orElse(null));
+            : formatAnyCardinalityAsTitle(objSpec, managedObject);
     }
 
     // -- HELPER
@@ -71,15 +70,20 @@ final class _InternalTitleUtil {
                 .orElseGet(()->getDefaultTitle(managedObject));
     }
 
-    private String formatAnyCardinalityAsTitle(final int size, final @Nullable 
ObjectSpecification elementSpec) {
+    private String getDefaultTitle(final ManagedObject managedObject) {
+        return "A" + (" " + 
managedObject.getSpecification().getSingularName()).toLowerCase();
+    }
+
+    private String formatAnyCardinalityAsTitle(@NonNull final 
ObjectSpecification objSpec, @NonNull final ManagedObject managedObject) {
+        final int size = 
objSpec.getFacet(CollectionFacet.class).size(managedObject);
+        val elementSpec = objSpec.getElementSpecification().orElse(null);
+        
objSpec.getTranslationService().translate(TranslationContext.forClassName(objSpec.getCorrespondingClass()),
 null);
+
         final String noun = (elementSpec == null
                 || 
elementSpec.getFullIdentifier().equals(Object.class.getName()))
                     ? "object"
                     : elementSpec.getSingularName();
-        return MmTitleUtil.formatAnyCardinalityAsTitle(size, noun);
+        return MmTitleUtil.formatAnyCardinalityAsTitle(size, noun, 
objSpec.getTranslationService());
     }
 
-    private String getDefaultTitle(final ManagedObject managedObject) {
-        return "A" + (" " + 
managedObject.getSpecification().getSingularName()).toLowerCase();
-    }
 }
\ No newline at end of file
diff --git 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
index e5d8f93bf2..e353dbb8e9 100644
--- 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
+++ 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
@@ -321,7 +321,7 @@ implements ContentNegotiationService {
             final Collection<ManagedObject> collectionAdapters,
             final ObjectSpecification elementSpec) {
         final String singularName = elementSpec.getSingularName();
-        return 
MmTitleUtil.formatAnyCardinalityAsTitle(collectionAdapters.size(), 
singularName);
+        return 
MmTitleUtil.formatAnyCardinalityAsTitle(collectionAdapters.size(), 
singularName, elementSpec.getTranslationService());
     }
 
     /**

Reply via email to