You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/04/07 08:47:01 UTC

[isis] branch 2595_transl.ctx updated: ISIS-2595: post merge refactoring - 1st iteration

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

ahuber pushed a commit to branch 2595_transl.ctx
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/2595_transl.ctx by this push:
     new 616541c  ISIS-2595: post merge refactoring - 1st iteration
616541c is described below

commit 616541c1cd086be237850382e12118763aaec528
Author: ahuber@apache.org <ah...@luna>
AuthorDate: Wed Apr 7 10:46:11 2021 +0200

    ISIS-2595: post merge refactoring - 1st iteration
---
 .../java/org/apache/isis/applib/Identifier.java    |   9 +-
 .../applib/exceptions/RecoverableException.java    |  34 ++---
 .../applib/exceptions/TranslatableException.java   |   9 +-
 .../applib/exceptions/UnrecoverableException.java  |  34 ++---
 .../exceprecog/ExceptionRecognizerAbstract.java    |  12 +-
 .../applib/services/exceprecog/Recognition.java    |  12 +-
 .../services/i18n/HasTranslationContext.java       |  31 ++++
 .../applib/services/i18n/TranslationContext.java   | 161 +++++++++++++--------
 .../services/i18n/TranslatableStringTest.java      |   6 +-
 .../invocation/ActionDomainEventFacetAbstract.java |   3 +-
 .../ActionValidationFacetViaMethodFactory.java     |   2 +-
 .../facets/all/i18n/TranslationFacetFactory.java   |  57 ++++----
 .../DisableForContextFacetViaMethodFactory.java    |   9 +-
 .../order/annotprop/MemberOrderFacetFactory.java   |   3 +-
 .../choices/enums/EnumValueSemanticsProvider.java  |  11 +-
 .../DisabledObjectFacetViaMethodFactory.java       |   4 +-
 ...ainObjectLayoutAnnotationUsingTitleUiEvent.java |   5 +-
 .../title/methods/TitleFacetViaMethodsFactory.java |  15 +-
 .../method/ValidateObjectFacetMethodFactory.java   |   3 +-
 .../MustSatisfySpecificationFacetAbstract.java     |   3 +-
 ...tionParameterDisabledFacetViaMethodFactory.java |   2 +-
 ...onParameterValidationFacetViaMethodFactory.java |   4 +-
 .../modify/PropertyDomainEventFacetAbstract.java   |   3 +-
 .../PropertyValidateFacetViaMethodFactory.java     |   2 +-
 .../services/grid/GridSystemServiceAbstract.java   |   7 +-
 .../title/TitlesAndTranslationsValidator.java      |  10 +-
 .../ordering/memberorder/DeweyOrderSetTest.java    |   2 +-
 .../memberorder/MemberOrderComparatorTest.java     |   2 +-
 .../core/runtimeservices/i18n/po/PoReader.java     |   2 +-
 .../core/runtimeservices/i18n/po/PoWriter.java     |   4 +-
 .../message/MessageServiceDefault.java             |   6 +-
 .../core/runtimeservices/i18n/po/PoReaderTest.java |  34 ++---
 .../model/decorator/confirm/ConfirmUiModel.java    |   2 +-
 .../components/layout/bs3/tabs/TabGroupPanel.java  |  14 +-
 .../viewer/integration/LocalizerForIsis.java       |   2 +-
 .../viewer/integration/WebRequestCycleForIsis.java |   2 +-
 36 files changed, 292 insertions(+), 229 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/Identifier.java b/api/applib/src/main/java/org/apache/isis/applib/Identifier.java
index bd287be..eda9641 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/Identifier.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/Identifier.java
@@ -25,6 +25,8 @@ import java.util.stream.Collectors;
 
 import org.apache.isis.applib.id.HasLogicalType;
 import org.apache.isis.applib.id.LogicalType;
+import org.apache.isis.applib.services.i18n.HasTranslationContext;
+import org.apache.isis.applib.services.i18n.TranslationContext;
 import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal.base._Strings;
@@ -47,6 +49,7 @@ public class Identifier
 implements 
     Comparable<Identifier>,
     HasLogicalType,
+    HasTranslationContext,
     Serializable {
 
     private static final long serialVersionUID = 1L;
@@ -114,7 +117,7 @@ implements
      * Context to be used for i18n translation.
      * @see TranslationService
      */
-    @Getter private final String translationContext;
+    @Getter(onMethod_ = {@Override}) private final TranslationContext translationContext;
 
     // -- CONSTRUCTOR
 
@@ -135,8 +138,8 @@ implements
                         ? "(" + memberParameterClassNames.stream().collect(Collectors.joining(",")) + ")" 
                         : "");
         
-        this.translationContext = 
-                className + "#" + memberName + (type.isAction() ? "()" : "");
+        this.translationContext = TranslationContext.ofName(
+                className + "#" + memberName + (type.isAction() ? "()" : ""));
 
         this.fullIdentityString = _Strings.isEmpty(memberName) 
                 ? className
diff --git a/api/applib/src/main/java/org/apache/isis/applib/exceptions/RecoverableException.java b/api/applib/src/main/java/org/apache/isis/applib/exceptions/RecoverableException.java
index 5496d85..5fc68da 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/exceptions/RecoverableException.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/exceptions/RecoverableException.java
@@ -20,9 +20,12 @@
 package org.apache.isis.applib.exceptions;
 
 import org.apache.isis.applib.services.i18n.TranslatableString;
+import org.apache.isis.applib.services.i18n.TranslationContext;
 import org.apache.isis.applib.services.message.MessageService;
 import org.apache.isis.commons.internal.base._Strings;
 
+import lombok.Getter;
+
 /**
  * Indicates that an exceptional condition/problem has occurred within the application's domain logic.
  * <p>
@@ -45,8 +48,11 @@ implements TranslatableException {
 
     private static final long serialVersionUID = 1L;
 
+    @Getter(onMethod_ = {@Override})
     private final TranslatableString translatableMessage;
-    private final String translationContext;
+    
+    @Getter(onMethod_ = {@Override}) 
+    private final TranslationContext translationContext;
 
     public RecoverableException(final String msg) {
         this(msg, null, null, null, null);
@@ -83,32 +89,20 @@ implements TranslatableException {
             final Throwable cause) {
         super(message, cause);
         this.translatableMessage = translatableMessage;
-        this.translationContext =
-                translationContextClass != null
-                ? (translationContextClass.getName() +
-                        (!_Strings.isNullOrEmpty(translationContextMethod)
+        this.translationContext = translationContextClass != null
+                ? TranslationContext.ofName(
+                        translationContextClass.getName() 
+                        + (_Strings.isNotEmpty(translationContextMethod)
                                 ? "#" + translationContextMethod
-                                        : "")
-                        )
-                        : null;
+                                : ""))
+                : TranslationContext.empty();
     }
 
     @Override
     public String getMessage() {
         return getTranslatableMessage() != null
                 ? getTranslatableMessage().getPattern()
-                        : super.getMessage();
-    }
-
-    @Override
-    public TranslatableString getTranslatableMessage() {
-        return translatableMessage;
+                : super.getMessage();
     }
 
-    @Override
-    public String getTranslationContext() {
-        return translationContext;
-    }
-
-
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/exceptions/TranslatableException.java b/api/applib/src/main/java/org/apache/isis/applib/exceptions/TranslatableException.java
index ab3e490..afa8f7c 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/exceptions/TranslatableException.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/exceptions/TranslatableException.java
@@ -18,6 +18,7 @@
  */
 package org.apache.isis.applib.exceptions;
 
+import org.apache.isis.applib.services.i18n.HasTranslationContext;
 import org.apache.isis.applib.services.i18n.TranslatableString;
 
 /**
@@ -31,7 +32,7 @@ import org.apache.isis.applib.services.i18n.TranslatableString;
  * </p>
  * @since 1.x {@index}
  */
-public interface TranslatableException {
+public interface TranslatableException extends HasTranslationContext {
 
     /**
      * In the spirit of {@link Exception#getLocalizedMessage()}, but using {@link org.apache.isis.applib.services.i18n.TranslatableString} instead.
@@ -45,10 +46,4 @@ public interface TranslatableException {
      */
     TranslatableString getTranslatableMessage();
 
-    /**
-     * The context to use when translating the {@link #getTranslatableMessage() translatable message},
-     * as ultimately passed through to {@link org.apache.isis.applib.services.i18n.TranslationService#translate(String, String)}.
-     */
-    String getTranslationContext();
-
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/exceptions/UnrecoverableException.java b/api/applib/src/main/java/org/apache/isis/applib/exceptions/UnrecoverableException.java
index 2a3a015..f8fe89f 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/exceptions/UnrecoverableException.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/exceptions/UnrecoverableException.java
@@ -20,8 +20,11 @@
 package org.apache.isis.applib.exceptions;
 
 import org.apache.isis.applib.services.i18n.TranslatableString;
+import org.apache.isis.applib.services.i18n.TranslationContext;
 import org.apache.isis.commons.internal.base._Strings;
 
+import lombok.Getter;
+
 /**
  * Indicates that an unexpected, non-recoverable (fatal) exception has occurred within
  * the application logic.
@@ -38,9 +41,12 @@ implements TranslatableException {
 
     private static final long serialVersionUID = 1L;
 
+    @Getter(onMethod_ = {@Override})
     private final TranslatableString translatableMessage;
-    private final String translationContext;
-
+    
+    @Getter(onMethod_ = {@Override}) 
+    private final TranslationContext translationContext;
+    
     public UnrecoverableException(final String msg) {
         this(msg, null, null, null, null);
     }
@@ -76,14 +82,13 @@ implements TranslatableException {
             final Throwable cause) {
         super(message, cause);
         this.translatableMessage = translatableMessage;
-        this.translationContext =
-                translationContextClass != null
-                ? (translationContextClass.getName() +
-                        (!_Strings.isNullOrEmpty(translationContextMethod)
+        this.translationContext = translationContextClass != null
+                ? TranslationContext.ofName(
+                        translationContextClass.getName() 
+                        + (_Strings.isNotEmpty(translationContextMethod)
                                 ? "#" + translationContextMethod
-                                : "")
-                        )
-                : null;
+                                : ""))
+                : TranslationContext.empty();
     }
 
     @Override
@@ -93,15 +98,4 @@ implements TranslatableException {
                 : super.getMessage();
     }
 
-    @Override
-    public TranslatableString getTranslatableMessage() {
-        return translatableMessage;
-    }
-
-    @Override
-    public String getTranslationContext() {
-        return translationContext;
-    }
-
-
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java b/api/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java
index fb3d891..95f59ac 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java
@@ -26,14 +26,13 @@ import java.util.function.Predicate;
 import javax.inject.Inject;
 
 import org.apache.isis.applib.exceptions.TranslatableException;
-import org.apache.isis.applib.services.i18n.TranslatableString;
-import org.apache.isis.applib.services.i18n.TranslationContext;
 import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 
 import lombok.Getter;
 import lombok.Setter;
+import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
 /**
@@ -116,10 +115,11 @@ public abstract class ExceptionRecognizerAbstract implements ExceptionRecognizer
                 log.info("Recognized exception, stacktrace : ", throwable);
             }
             if(ex instanceof TranslatableException) {
-                final TranslatableException translatableException = (TranslatableException) ex;
-                final TranslatableString translatableMessage = translatableException.getTranslatableMessage();
-                final TranslationContext translationContext = TranslationContext.ofTrEx(translatableException);
-                if(translatableMessage != null && translationContext != null) {
+                val translatableException = (TranslatableException) ex;
+                val translatableMessage = translatableException.getTranslatableMessage();
+                val translationContext = translatableException.getTranslationContext();
+                if(translatableMessage != null 
+                        && translationContext != null) {
                     return translatableMessage.translate(translationService, translationContext);
                 }
             }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/exceprecog/Recognition.java b/api/applib/src/main/java/org/apache/isis/applib/services/exceprecog/Recognition.java
index 60101bf..cf57025 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/exceprecog/Recognition.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/exceprecog/Recognition.java
@@ -127,14 +127,14 @@ public class Recognition {
     }
 
     private static String translate(
-            @Nullable String x,
+            @Nullable String text,
             @Nullable TranslationService translationService) {
-        if (x == null || translationService == null) {
-            return x;
+        if (text == null 
+                || translationService == null) {
+            return text;
         }
-        TranslationContext context = TranslationContext.ofClass(Recognition.class);
-        return translationService.translate(
-        		context, x);
+        val context = TranslationContext.forClassName(Recognition.class);
+        return translationService.translate(context, text);
     }
 
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/i18n/HasTranslationContext.java b/api/applib/src/main/java/org/apache/isis/applib/services/i18n/HasTranslationContext.java
new file mode 100644
index 0000000..f44649d
--- /dev/null
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/i18n/HasTranslationContext.java
@@ -0,0 +1,31 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.applib.services.i18n;
+
+/**
+ * @since 2.x {@index}
+ */
+public interface HasTranslationContext {
+
+    /**
+     * The context to use when translating text, as ultimately passed through to 
+     * {@link org.apache.isis.applib.services.i18n.TranslationService#translate(TranslationContext, String)}.
+     */
+    TranslationContext getTranslationContext();
+}
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslationContext.java b/api/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslationContext.java
index d92cbe7..9e31f6f 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslationContext.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslationContext.java
@@ -1,72 +1,119 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
 package org.apache.isis.applib.services.i18n;
 
+import java.io.Serializable;
 import java.lang.reflect.Method;
 
+import javax.annotation.Nullable;
+
 import org.apache.isis.applib.Identifier;
-import org.apache.isis.applib.exceptions.TranslatableException;
-import org.apache.isis.applib.spec.AbstractSpecification;
-import org.apache.isis.applib.spec.Specification;
+import org.apache.isis.commons.internal.base._Strings;
 
-public interface TranslationContext {
+import lombok.Getter;
+import lombok.Value;
+import lombok.val;
 
-	String stringify();
-	
-	static class DefaultTranslationContext implements TranslationContext {
-		final String ctx;
-		DefaultTranslationContext(String ctx) {
-			this.ctx = ctx;
-		}
-		@Override
-		public String stringify() {
-			return ctx;
-		}		
-	}
-	
-	static TranslationContext ofSimpleStringIdentifier(String simple) {
-		return new DefaultTranslationContext(simple);
-	}	
-	
-	static TranslationContext ofClass(Class<?> contextClass) {
-		return new DefaultTranslationContext(contextClass.getName());
-	}
+/**
+ * @since 2.x {@index}
+ */
+@Value(staticConstructor = "ofName")
+public final class TranslationContext 
+implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    
+    @Getter private final String name;
+    
+    //XXX this guard could be removed if non-null is guaranteed
+    public static TranslationContext forTranslationContextHolder(
+            final @Nullable HasTranslationContext hasTranslationContext) {
+        
+        return hasTranslationContext!=null
+                ? hasTranslationContext.getTranslationContext()
+                : EMPTY;
+    }
+    
+    //XXX no logical type name supported
+    public static TranslationContext forClassName(
+            final @Nullable Class<?> contextClass) {
+        
+        return contextClass!=null
+                ? ofName(contextClass.getName())
+                : EMPTY;
+    }
+    
+    //XXX no logical type name supported
+    public static TranslationContext forMethod(
+            final @Nullable Class<?> contextClass, 
+            final @Nullable String contextMethodName) {
+        
+        val classContext = forClassName(contextClass);
+        return _Strings.isNullOrEmpty(contextMethodName)
+                ? classContext
+                : ofName(classContext.getName() + "#" + contextMethodName + "()");
+    }
+    
+    //XXX no logical type name supported
+    public static TranslationContext forMethod(
+            final @Nullable Method method) {
+        
+        return method!=null
+                ? ofName(method.getDeclaringClass().getName() + "#" + method.getName() + "()")
+                : EMPTY;
+    }
+    
+    //XXX no logical type name supported
+    public static TranslationContext forEnum(
+            final @Nullable Enum<?> objectAsEnum) {
+        
+        return objectAsEnum!=null
+                ? ofName(objectAsEnum.getClass().getName() + "#" + objectAsEnum.name())
+                : EMPTY;
+    }
 	
-	static TranslationContext ofClassAndMethodName(Class<?> contextClass, String methodName) {
-		return new DefaultTranslationContext(contextClass.getName() + "#" + methodName);
-	}	
+	// -- EMPTY
 	
-	static TranslationContext ofTrEx(TranslatableException translatableException) {
-		return new DefaultTranslationContext(translatableException.getTranslationContext());
-	}
+	private final static TranslationContext EMPTY = TranslationContext.ofName("default");
 
-	static TranslationContext ofIdentifier(Identifier identifier) {
-		return new DefaultTranslationContext(identifier.getTranslationContext());
-	}
+    public static TranslationContext empty() {
+        return EMPTY;
+    }
 
-	static TranslationContext ofIdentifierFullIdentity(Identifier identifier) {
-		return new DefaultTranslationContext(identifier.getFullIdentityString());
-	}
+    // -- DEPRECATIONS
+    
+    @Deprecated // just a refactoring step
+    public static TranslationContext forTabIdentifier(Identifier identifier) {
+        return ofName(identifier.getTranslationContext() + "~tabName");
+    }
+    
+    @Deprecated // just a refactoring step
+    public static TranslationContext forMemberOrderNameIdentifier(Identifier identifier) {
+        return ofName(identifier.getTranslationContext() + "~memberOrderName");
+    }   
 
-	static TranslationContext ofTitleMethod(Method titleMethod) {
-		return new DefaultTranslationContext(titleMethod.getDeclaringClass().getName() + "#" + titleMethod.getName() + "()");
-	}
+    @Deprecated // just a refactoring step
+    public static TranslationContext forMemberOrderNameClass(Class<?> cls) {
+        return ofName(cls.getName() + "~memberOrderName");
+    }
 
-	static TranslationContext ofEnum(Enum<?> objectAsEnum) {
-		return new DefaultTranslationContext(objectAsEnum.getClass().getName() + "#" + objectAsEnum.name());
-	}
-
-	static TranslationContext ofDisabledObjectMethod(Method disabledObjectMethod) {
-		return new DefaultTranslationContext(disabledObjectMethod.getDeclaringClass().getName() + "#" + disabledObjectMethod.getName() + "()");
-	}
-
-	static TranslationContext ofIdentifierForTab(Identifier identifier) {
-		return new DefaultTranslationContext(identifier.getTranslationContext() + "~tabName");
-	}
+    
+	
 	
-	static TranslationContext ofIdentifierForMemberOrderName(Identifier identifier) {
-		return new DefaultTranslationContext(identifier.getTranslationContext() + "~memberOrderName");
-	}	
-
-	static TranslationContext ofClassForMemberOrderName(Class<?> class1) {
-		return new DefaultTranslationContext(class1.getName() + "~memberOrderName");
-	}
 }
diff --git a/api/applib/src/test/java/org/apache/isis/applib/services/i18n/TranslatableStringTest.java b/api/applib/src/test/java/org/apache/isis/applib/services/i18n/TranslatableStringTest.java
index 225c131..09100ee 100644
--- a/api/applib/src/test/java/org/apache/isis/applib/services/i18n/TranslatableStringTest.java
+++ b/api/applib/src/test/java/org/apache/isis/applib/services/i18n/TranslatableStringTest.java
@@ -88,7 +88,7 @@ public class TranslatableStringTest {
         public void singularForm() throws Exception {
             // given
             final String simpleText = "text to translate";
-            final TranslationContext someContext = TranslationContext.ofSimpleStringIdentifier("someContext");
+            final TranslationContext someContext = TranslationContext.ofName("someContext");
             final String translation = "the translation";
 
             final TranslatableString ts = TranslatableString.tr(simpleText);
@@ -109,7 +109,7 @@ public class TranslatableStringTest {
             // given
             final String singularText = "singular text to translate";
             final String pluralText = "plural text to translate";
-            final TranslationContext someContext = TranslationContext.ofSimpleStringIdentifier("someContext");
+            final TranslationContext someContext = TranslationContext.ofName("someContext");
             final String translation = "the translation";
 
             final TranslatableString ts = TranslatableString.trn(singularText, pluralText, 1);
@@ -130,7 +130,7 @@ public class TranslatableStringTest {
             // given
             final String singularText = "singular text to translate";
             final String pluralText = "plural text to translate";
-            final TranslationContext someContext = TranslationContext.ofSimpleStringIdentifier("someContext");
+            final TranslationContext someContext = TranslationContext.ofName("someContext");
             final String translation = "the translation";
             final int number = 2; // != 1
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java
index 0224941..998371f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java
@@ -60,7 +60,8 @@ implements ActionDomainEventFacet {
 
         this.translationService = getTranslationService();
         // sadness: same as in TranslationFactory
-        this.translationContext = TranslationContext.ofIdentifier(((IdentifiedHolder)holder).getIdentifier());
+        this.translationContext = TranslationContext.forTranslationContextHolder(
+                ((IdentifiedHolder)holder).getIdentifier());
 
         domainEventHelper = DomainEventHelper.ofServiceRegistry(getServiceRegistry());
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/validate/method/ActionValidationFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/validate/method/ActionValidationFacetViaMethodFactory.java
index cdd6f95..f0256a6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/validate/method/ActionValidationFacetViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/validate/method/ActionValidationFacetViaMethodFactory.java
@@ -76,7 +76,7 @@ extends MethodPrefixBasedFacetFactoryAbstract  {
 
             val ppmFactory = searchResult.getPpmFactory();
             val translationService = getTranslationService();
-            TranslationContext translationContext = TranslationContext.ofIdentifier(facetHolder.getIdentifier());
+            val translationContext = TranslationContext.forTranslationContextHolder(facetHolder.getIdentifier());
             super.addFacet(
                     new ActionValidationFacetViaMethod(
                             validateMethod, translationService, translationContext, ppmFactory, facetHolder));
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/i18n/TranslationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/i18n/TranslationFacetFactory.java
index 1875101..760ea4d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/i18n/TranslationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/i18n/TranslationFacetFactory.java
@@ -20,7 +20,6 @@ package org.apache.isis.core.metamodel.facets.all.i18n;
 
 
 import org.apache.isis.applib.services.i18n.TranslationContext;
-import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -29,6 +28,8 @@ import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
 import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet;
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
 
+import lombok.val;
+
 public class TranslationFacetFactory
 extends FacetFactoryAbstract {
 
@@ -38,36 +39,36 @@ extends FacetFactoryAbstract {
 
     @Override
     public void process(final ProcessClassContext processClassContext) {
-        final FacetHolder facetHolder = processClassContext.getFacetHolder();
+        val facetHolder = processClassContext.getFacetHolder();
         if(facetHolder instanceof IdentifiedHolder) {
-            final IdentifiedHolder holder = (IdentifiedHolder) facetHolder;
-            final TranslationContext context = TranslationContext.ofIdentifier(holder.getIdentifier()); // .getClassName();
-            translateName(holder, context);
-            translateDescription(holder, context);
+            val identifiedHolder = (IdentifiedHolder) facetHolder;
+            val translationContext = TranslationContext.forTranslationContextHolder(identifiedHolder.getIdentifier());
+            translateName(identifiedHolder, translationContext);
+            translateDescription(identifiedHolder, translationContext);
         }
     }
 
     @Override
     public void process(final ProcessMethodContext processMethodContext) {
-        final IdentifiedHolder holder = processMethodContext.getFacetHolder();
+        val identifiedHolder = processMethodContext.getFacetHolder();
 
-        final TranslationContext context = TranslationContext.ofIdentifier(holder.getIdentifier()); // .getTranslationContext();
-        translateName(holder, context);
-        translateDescription(holder, context);
+        val translationContext = TranslationContext.forTranslationContextHolder(identifiedHolder.getIdentifier());
+        translateName(identifiedHolder, translationContext);
+        translateDescription(identifiedHolder, translationContext);
     }
 
     @Override
     public void processParams(final ProcessParameterContext processParameterContext) {
-        final IdentifiedHolder holder = processParameterContext.getFacetHolder();
+        val identifiedHolder = processParameterContext.getFacetHolder();
 
-        final TranslationContext context = TranslationContext.ofIdentifierFullIdentity(holder.getIdentifier()); // .getFullIdentityString();
-        translateName(holder, context);
-        translateDescription(holder, context);
+        val translationContext = TranslationContext.forTranslationContextHolder(identifiedHolder.getIdentifier());
+        translateName(identifiedHolder, translationContext);
+        translateDescription(identifiedHolder, translationContext);
     }
 
-    // //////////////////////////////////////
+    // -- HELPER
 
-    void translateName(final IdentifiedHolder facetHolder, final TranslationContext context) {
+    void translateName(final IdentifiedHolder facetHolder, final TranslationContext translationContext) {
         final NamedFacet facet = facetHolder.getFacet(NamedFacet.class);
         if(facet == null) {
             // not expected...
@@ -79,26 +80,28 @@ extends FacetFactoryAbstract {
             return;
         }
 
-        final TranslationService translationService = getTranslationService();
-        NamedFacetTranslated facetTranslated = new NamedFacetTranslated(context, originalText, translationService, facetHolder);
-        facetTranslated.setUnderlyingFacet(facet);
-        super.addFacet(facetTranslated);
+        val translationService = getTranslationService();
+        val namedFacetTranslated 
+            = new NamedFacetTranslated(translationContext, originalText, translationService, facetHolder);
+        namedFacetTranslated.setUnderlyingFacet(facet);
+        super.addFacet(namedFacetTranslated);
     }
 
-    void translateDescription(final FacetHolder facetHolder, final TranslationContext context) {
+    void translateDescription(final FacetHolder facetHolder, final TranslationContext translationContext) {
 
-        final IdentifiedHolder holder = (IdentifiedHolder) facetHolder;
-        final DescribedAsFacet facet = facetHolder.getFacet(DescribedAsFacet.class);
-        if(facet == null) {
+        val identifiedHolder = (IdentifiedHolder) facetHolder;
+        val describedAsFacet = facetHolder.getFacet(DescribedAsFacet.class);
+        if(describedAsFacet == null) {
             return;
         }
-        final String originalText = facet.value();
+        final String originalText = describedAsFacet.value();
         if (isNullOrEmptyWhenTrimmed(originalText)) {
             return;
         }
 
-        final TranslationService translationService = getTranslationService();
-        super.addFacet(new DescribedAsFacetTranslated(context, originalText, translationService, holder));
+        val translationService = getTranslationService();
+        super.addFacet(new DescribedAsFacetTranslated(
+                translationContext, originalText, translationService, identifiedHolder));
 
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethodFactory.java
index 65afcd2..e58458a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethodFactory.java
@@ -22,9 +22,7 @@ package org.apache.isis.core.metamodel.facets.members.disabled.method;
 import java.lang.reflect.Method;
 
 import org.apache.isis.applib.services.i18n.TranslationContext;
-import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.commons.collections.Can;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
 import org.apache.isis.core.metamodel.facets.MethodFinder2;
@@ -83,10 +81,11 @@ extends MethodPrefixBasedFacetFactoryAbstract  {
 
         processMethodContext.removeMethod(disableMethod);
 
-        final FacetHolder facetHolder = processMethodContext.getFacetHolder();
-        final TranslationService translationService = getTranslationService();
+        val facetHolder = processMethodContext.getFacetHolder();
+        val translationService = getTranslationService();
         // sadness: same logic as in I18nFacetFactory
-        final TranslationContext translationContext = TranslationContext.ofIdentifier(((IdentifiedHolder)facetHolder).getIdentifier()); // .getTranslationContext();
+        val translationContext = TranslationContext
+                .forTranslationContextHolder(((IdentifiedHolder)facetHolder).getIdentifier());
         super.addFacet(new DisableForContextFacetViaMethod(disableMethod, translationService, translationContext, facetHolder));
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/order/annotprop/MemberOrderFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/order/annotprop/MemberOrderFacetFactory.java
index 4597946..0386727 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/order/annotprop/MemberOrderFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/order/annotprop/MemberOrderFacetFactory.java
@@ -20,7 +20,6 @@
 package org.apache.isis.core.metamodel.facets.members.order.annotprop;
 
 import org.apache.isis.applib.annotation.MemberOrder;
-import org.apache.isis.applib.services.i18n.TranslationContext;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
@@ -52,7 +51,7 @@ extends FacetFactoryAbstract  {
         
         if (annotation != null) {        	
             return new MemberOrderFacetAnnotation(
-            		TranslationContext.ofIdentifier(processMethodContext.getFacetHolder().getIdentifier()),
+            		processMethodContext.getFacetHolder().getIdentifier().getTranslationContext(),
                     annotation.name(),
                     annotation.sequence(),
                     getTranslationService(),
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumValueSemanticsProvider.java
index f457a36..59fea43 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumValueSemanticsProvider.java
@@ -27,7 +27,6 @@ import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.applib.exceptions.recoverable.TextEntryParseException;
 import org.apache.isis.applib.services.i18n.TranslatableString;
 import org.apache.isis.applib.services.i18n.TranslationContext;
-import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.applib.util.Enums;
 import org.apache.isis.core.metamodel.commons.MethodExtensions;
 import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -35,6 +34,8 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.MethodFinderUtils;
 import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
 
+import lombok.val;
+
 public class EnumValueSemanticsProvider<T extends Enum<T>> extends ValueSemanticsProviderAndFacetAbstract<T> implements EnumFacet {
 
 
@@ -113,11 +114,11 @@ public class EnumValueSemanticsProvider<T extends Enum<T>> extends ValueSemantic
 
     @Override
     protected String titleString(final Object object) {
-        final TranslationService translationService = getTranslationService();
+        val translationService = getTranslationService();
 
         if (titleMethod != null) {
             // sadness: same as in TranslationFactory
-            final TranslationContext translationContext = TranslationContext.ofTitleMethod(titleMethod);
+            val translationContext = TranslationContext.forMethod(titleMethod);
 
             try {
                 final Object returnValue = MethodExtensions.invoke(titleMethod, object);
@@ -135,8 +136,8 @@ public class EnumValueSemanticsProvider<T extends Enum<T>> extends ValueSemantic
         }
 
         // simply translate the enum constant's name
-        Enum<?> objectAsEnum = (Enum<?>) object;
-        final TranslationContext translationContext = TranslationContext.ofEnum(objectAsEnum); // object.getClass().getName() + "#" + objectAsEnum.name();
+        val objectAsEnum = (Enum<?>) object;
+        val translationContext = TranslationContext.forEnum(objectAsEnum);
         final String friendlyNameOfEnum = Enums.getFriendlyNameOf(objectAsEnum.name());
         return translationService.translate(translationContext, friendlyNameOfEnum);
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/disabled/method/DisabledObjectFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/disabled/method/DisabledObjectFacetViaMethodFactory.java
index 5782a25..19d112c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/disabled/method/DisabledObjectFacetViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/disabled/method/DisabledObjectFacetViaMethodFactory.java
@@ -24,7 +24,6 @@ import org.apache.isis.applib.services.i18n.TranslationContext;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
 import org.apache.isis.core.metamodel.facets.FacetFactory;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
 import org.apache.isis.core.metamodel.facets.MethodFinderUtils;
@@ -70,8 +69,7 @@ public class DisabledObjectFacetViaMethodFactory extends MethodPrefixBasedFacetF
 
         val translationService = getTranslationService();
         // sadness: same logic as in I18nFacetFactory
-        // val translationContext = ((IdentifiedHolder)facetHolder).getIdentifier().getClassName();
-        TranslationContext translationContext = TranslationContext.ofDisabledObjectMethod(method);
+        val translationContext = TranslationContext.forMethod(method);
         
         FacetUtil.addFacet(new DisabledObjectFacetViaMethod(method, translationService, translationContext, facetHolder));
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java
index 4fda6b0..c4d0889 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java
@@ -133,9 +133,8 @@ public class TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent extends
 
     private static TranslationContext translationContextFor(final FacetHolder facetHolder) {
         if(facetHolder instanceof ObjectSpecification) {        	
-            val facetHolderAsSpec = (ObjectSpecification) facetHolder; // bit naughty...
-            // return facetHolderAsSpec.getCorrespondingClass().getCanonicalName();
-            return TranslationContext.ofIdentifier(facetHolderAsSpec.getIdentifier());
+            val facetHolderAsSpec = (ObjectSpecification) facetHolder;
+            return TranslationContext.forTranslationContextHolder(facetHolderAsSpec.getIdentifier());
         } 
         return null;
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/methods/TitleFacetViaMethodsFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/methods/TitleFacetViaMethodsFactory.java
index 42a03ec..3bbce81 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/methods/TitleFacetViaMethodsFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/methods/TitleFacetViaMethodsFactory.java
@@ -19,10 +19,12 @@
 
 package org.apache.isis.core.metamodel.facets.object.title.methods;
 
+import static org.apache.isis.core.metamodel.facets.MethodLiteralConstants.TITLE;
+import static org.apache.isis.core.metamodel.facets.MethodLiteralConstants.TO_STRING;
+
 import java.lang.reflect.Method;
 
 import org.apache.isis.applib.services.i18n.TranslationContext;
-import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.metamodel.commons.ClassExtensions;
@@ -34,8 +36,7 @@ import org.apache.isis.core.metamodel.facets.MethodPrefixBasedFacetFactoryAbstra
 import org.apache.isis.core.metamodel.facets.fallback.FallbackFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
 
-import static org.apache.isis.core.metamodel.facets.MethodLiteralConstants.TITLE;
-import static org.apache.isis.core.metamodel.facets.MethodLiteralConstants.TO_STRING;
+import lombok.val;
 
 public class TitleFacetViaMethodsFactory extends MethodPrefixBasedFacetFactoryAbstract {
 
@@ -62,12 +63,12 @@ public class TitleFacetViaMethodsFactory extends MethodPrefixBasedFacetFactoryAb
                 NO_ARG);
         if (method != null) {
             processClassContext.removeMethod(method);
-            final TranslationService translationService = getTranslationService();
+            val translationService = getTranslationService();
             // sadness: same as in TranslationFactory
-            final TranslationContext translationContext = TranslationContext.ofTitleMethod(method); // .getDeclaringClass().getName() + "#" + method.getName() + "()";
+            val translationContext = TranslationContext.forMethod(method);
 
-            final TitleFacetViaTitleMethod facet = new TitleFacetViaTitleMethod(method, translationService, translationContext, facetHolder);
-            FacetUtil.addFacet(facet);
+            val titleFacet = new TitleFacetViaTitleMethod(method, translationService, translationContext, facetHolder);
+            FacetUtil.addFacet(titleFacet);
             return;
         }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/validating/validateobject/method/ValidateObjectFacetMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/validating/validateobject/method/ValidateObjectFacetMethodFactory.java
index 6b008bd..91f23b5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/validating/validateobject/method/ValidateObjectFacetMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/validating/validateobject/method/ValidateObjectFacetMethodFactory.java
@@ -53,7 +53,8 @@ public class ValidateObjectFacetMethodFactory extends MethodPrefixBasedFacetFact
         if (method != null) {
             val translationService = getTranslationService();
             // sadness: same as in TranslationFactory
-            TranslationContext translationContext = TranslationContext.ofIdentifier(((IdentifiedHolder)facetHolder).getIdentifier()); // .getClassName();
+            val translationContext = TranslationContext.forTranslationContextHolder(
+                    ((IdentifiedHolder)facetHolder).getIdentifier());
             FacetUtil.addFacet(new ValidateObjectFacetMethod(method, translationService, translationContext, facetHolder));
             processClassContext.removeMethod(method);
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/mustsatisfyspec/MustSatisfySpecificationFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/mustsatisfyspec/MustSatisfySpecificationFacetAbstract.java
index 17e776c..7b07e8f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/mustsatisfyspec/MustSatisfySpecificationFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/mustsatisfyspec/MustSatisfySpecificationFacetAbstract.java
@@ -64,7 +64,8 @@ public abstract class MustSatisfySpecificationFacetAbstract extends FacetAbstrac
 
         final TranslationService translationService = getTranslationService();
         // sadness: same as in TranslationFactory
-        final TranslationContext translationContext = TranslationContext.ofIdentifier(((IdentifiedHolder) holder).getIdentifier()); // .getTranslationContext();
+        final TranslationContext translationContext = TranslationContext.forTranslationContextHolder(
+                ((IdentifiedHolder) holder).getIdentifier()); // .getTranslationContext();
 
         specificationEvaluator = new SpecificationEvaluator(translationService, translationContext);
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethodFactory.java
index d9be520..7b91f8d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethodFactory.java
@@ -82,7 +82,7 @@ extends MethodPrefixBasedFacetFactoryAbstract  {
             
             // add facets directly to parameters, not to actions
             val paramAsHolder = parameters.get(paramNum);
-            TranslationContext translationContext = TranslationContext.ofIdentifierFullIdentity(paramAsHolder.getIdentifier()); // .getFullIdentityString();
+            val translationContext = TranslationContext.forTranslationContextHolder(paramAsHolder.getIdentifier());
             val ppmFactory = searchResult.getPpmFactory();
             val translationService = getMetaModelContext().getTranslationService();
             
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validate/method/ActionParameterValidationFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validate/method/ActionParameterValidationFacetViaMethodFactory.java
index 82e52cc..c8ca037 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validate/method/ActionParameterValidationFacetViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validate/method/ActionParameterValidationFacetViaMethodFactory.java
@@ -28,8 +28,8 @@ import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.MethodLiteralConstants;
 import org.apache.isis.core.metamodel.facets.MethodPrefixBasedFacetFactoryAbstract;
 import org.apache.isis.core.metamodel.facets.ParameterSupport;
-import org.apache.isis.core.metamodel.facets.ParameterSupport.SearchAlgorithm;
 import org.apache.isis.core.metamodel.facets.ParameterSupport.ParamSupportingMethodSearchRequest.ReturnType;
+import org.apache.isis.core.metamodel.facets.ParameterSupport.SearchAlgorithm;
 import org.apache.isis.core.metamodel.facets.param.validate.ActionParameterValidationFacet;
 
 import lombok.val;
@@ -82,7 +82,7 @@ public class ActionParameterValidationFacetViaMethodFactory extends MethodPrefix
             
             // add facets directly to parameters, not to actions
             val paramAsHolder = parameters.get(paramNum);
-            val translationContext = TranslationContext.ofIdentifierFullIdentity(paramAsHolder.getIdentifier());
+            val translationContext = TranslationContext.forTranslationContextHolder(paramAsHolder.getIdentifier());
             val ppmFactory = searchResult.getPpmFactory();
             val translationService = getMetaModelContext().getTranslationService();
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java
index 1a8c587..25dc605 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java
@@ -63,7 +63,8 @@ extends SingleClassValueFacetAbstract implements PropertyDomainEventFacet {
 
         this.translationService = getTranslationService();
         // sadness: same as in TranslationFactory
-        this.translationContext = TranslationContext.ofIdentifier(((IdentifiedHolder)holder).getIdentifier()); // .getTranslationContext();
+        this.translationContext = TranslationContext.forTranslationContextHolder(
+                ((IdentifiedHolder)holder).getIdentifier());
 
         domainEventHelper = DomainEventHelper.ofServiceRegistry(getServiceRegistry());
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/method/PropertyValidateFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/method/PropertyValidateFacetViaMethodFactory.java
index ce3ad44..67706bc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/method/PropertyValidateFacetViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/method/PropertyValidateFacetViaMethodFactory.java
@@ -64,7 +64,7 @@ public class PropertyValidateFacetViaMethodFactory extends MethodPrefixBasedFace
         val facetHolder = processMethodContext.getFacetHolder();
         val translationService = getTranslationService();
         // sadness: same as in TranslationFactory
-        val translationContext = TranslationContext.ofIdentifier(facetHolder.getIdentifier()); // .getTranslationContext();
+        val translationContext = TranslationContext.forTranslationContextHolder(facetHolder.getIdentifier());
         super.addFacet(
                 new PropertyValidateFacetViaMethod(
                         validateMethod, translationService, translationContext, facetHolder));
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
index 34856a2..b394b68 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
@@ -213,7 +213,6 @@ implements GridSystemService<G> {
                 }
 
                 String memberOrderName = null;
-                TranslationContext translationContext = TranslationContext.ofIdentifierForMemberOrderName(objectAction.getIdentifier());
                 int memberOrderSequence;
                 if(actionLayoutDataOwner instanceof FieldSet) {
                     final FieldSet fieldSet = (FieldSet) actionLayoutDataOwner;
@@ -238,10 +237,10 @@ implements GridSystemService<G> {
                 } else {
                     // don't add: any existing metadata should be preserved
                     memberOrderName = null;
-                    translationContext = null;
                     memberOrderSequence = actionDomainObjectSequence++;
                 }
                 if(memberOrderName != null) {
+                    val translationContext = TranslationContext.forMemberOrderNameIdentifier(objectAction.getIdentifier());
                     addOrReplaceFacet(
                             new MemberOrderFacetXml(translationContext, memberOrderName, "" + memberOrderSequence, translationService, objectAction));
                 }
@@ -308,7 +307,7 @@ implements GridSystemService<G> {
                 final String groupName = fieldSet.getName();
                                 
                 final IdentifiedHolder identifiedHolder = (IdentifiedHolder) oneToOneAssociation;
-                final TranslationContext translationContext = TranslationContext.ofIdentifierForMemberOrderName(identifiedHolder.getIdentifier());
+                val translationContext = TranslationContext.forMemberOrderNameIdentifier(identifiedHolder.getIdentifier());
                 // TranslationContext translationContext = TranslationContext.ofIdentifierForMemberOrderName(oneToOneAssociation.getIdentifier());
                 final String sequence = "" + (propertySequence.incrementAndGet());
                 addOrReplaceFacet(
@@ -336,7 +335,7 @@ implements GridSystemService<G> {
 
                 // @MemberOrder#name based on the collection's id (so that each has a single "member group")
                 final String groupName = collectionLayoutData.getId();
-                TranslationContext translationContext = TranslationContext.ofIdentifierForMemberOrderName(oneToManyAssociation.getIdentifier());
+                val translationContext = TranslationContext.forMemberOrderNameIdentifier(oneToManyAssociation.getIdentifier());
                 final String sequence = "" + collectionSequence++;
                 addOrReplaceFacet(
                         new MemberOrderFacetXml(translationContext, groupName, sequence, translationService, oneToManyAssociation));
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/title/TitlesAndTranslationsValidator.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/title/TitlesAndTranslationsValidator.java
index fde69d7..0f055d6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/title/TitlesAndTranslationsValidator.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/title/TitlesAndTranslationsValidator.java
@@ -21,7 +21,6 @@ package org.apache.isis.core.metamodel.services.title;
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.applib.services.i18n.TranslationContext;
-import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.applib.services.title.TitleService;
 import org.apache.isis.commons.internal.base._Blackhole;
 import org.apache.isis.core.config.messages.MessageRegistry;
@@ -139,22 +138,21 @@ public class TitlesAndTranslationsValidator extends MetaModelValidatorAbstract {
         
     private void validateRegisteredMessageTranslation() {
         
-        val serviceRegistry = super.getMetaModelContext().getServiceRegistry();
         val specificationLoader = super.getMetaModelContext().getSpecificationLoader();
-        val translationService = serviceRegistry.lookupServiceElseFail(TranslationService.class);
+        val translationService = super.getMetaModelContext().getTranslationService();
         
         // as used by the Wicket UI?
         // final TranslationContext context = "org.apache.isis.core.interaction.session.InteractionFactory";
         
         // see @ConfirmUiModel#translate()
-        final TranslationContext context = TranslationContext.ofClass(MessageRegistry.class);
+        val translationContext = TranslationContext.forClassName(MessageRegistry.class);
         
-        final MessageRegistry messageRegistry = new MessageRegistry();
+        val messageRegistry = new MessageRegistry();
         for (String message : messageRegistry.listMessages()) {
         	
             try {
 
-                val translatedMessage = translationService.translate(context, message);
+                val translatedMessage = translationService.translate(translationContext, message);
                 _Blackhole.consume(translatedMessage);
 
             } catch (Exception e) {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/DeweyOrderSetTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/DeweyOrderSetTest.java
index 1cb7490..7d34cba 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/DeweyOrderSetTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/DeweyOrderSetTest.java
@@ -88,7 +88,7 @@ public class DeweyOrderSetTest extends TestCase {
     @Rule
     public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(JUnitRuleMockery2.Mode.INTERFACES_AND_CLASSES);
     
-	static TranslationContext ctx = TranslationContext.ofSimpleStringIdentifier("test");
+	static TranslationContext ctx = TranslationContext.ofName("test");
 
     @Override
     protected void setUp() {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/MemberOrderComparatorTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/MemberOrderComparatorTest.java
index 056e08e..73bf7c7 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/MemberOrderComparatorTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/MemberOrderComparatorTest.java
@@ -60,7 +60,7 @@ public class MemberOrderComparatorTest extends TestCase {
     @Rule
     public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(JUnitRuleMockery2.Mode.INTERFACES_AND_CLASSES);
 
-	static TranslationContext ctx = TranslationContext.ofSimpleStringIdentifier("test");
+	static TranslationContext ctx = TranslationContext.ofName("test");
     
     @Override
     protected void setUp() {
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/i18n/po/PoReader.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/i18n/po/PoReader.java
index 30b2f69..19efe38 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/i18n/po/PoReader.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/i18n/po/PoReader.java
@@ -142,7 +142,7 @@ class PoReader extends PoAbstract {
         final Map<ContextAndMsgId, String> translationsByKey = readAndCacheTranslationsIfRequired(targetLocale);
 
         // search for translation with a context
-        final ContextAndMsgId key = new ContextAndMsgId(context.stringify(), msgId, type);
+        final ContextAndMsgId key = new ContextAndMsgId(context.getName(), msgId, type);
         final String translation = lookupTranslation(translationsByKey, key);
         if (!_Strings.isNullOrEmpty(translation)) {
             return translation;
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/i18n/po/PoWriter.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/i18n/po/PoWriter.java
index 7dbec6c..eaa4fb5 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/i18n/po/PoWriter.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/i18n/po/PoWriter.java
@@ -113,7 +113,7 @@ class PoWriter extends PoAbstract {
         }
         final Block block = blockFor(msgId);
         synchronized(block) {
-            block.contexts.add(context.stringify());
+            block.contexts.add(context.getName());
         }
 
         return msgId;
@@ -127,7 +127,7 @@ class PoWriter extends PoAbstract {
         }
         final Block block = blockFor(msgId);
         synchronized(block) {
-            block.contexts.add(context.stringify());
+            block.contexts.add(context.getName());
             block.msgIdPlural = msgIdPlural;
         }
 
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/message/MessageServiceDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/message/MessageServiceDefault.java
index 40f4173..dc98fe2 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/message/MessageServiceDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/message/MessageServiceDefault.java
@@ -118,8 +118,10 @@ public class MessageServiceDefault implements MessageService {
         return translatedMessage;
     }
 
-    private static TranslationContext context(final Class<?> contextClass, final String contextMethod) {
-        return TranslationContext.ofClassAndMethodName(contextClass, contextMethod);
+    // -- HELPER
+    
+    private static TranslationContext context(final Class<?> contextClass, final String contextMethodName) {
+        return TranslationContext.forMethod(contextClass, contextMethodName);
     }
 
     private Optional<MessageBroker> currentMessageBroker() {
diff --git a/core/runtimeservices/src/test/java/org/apache/isis/core/runtimeservices/i18n/po/PoReaderTest.java b/core/runtimeservices/src/test/java/org/apache/isis/core/runtimeservices/i18n/po/PoReaderTest.java
index 46397fe..6b6b6ca 100644
--- a/core/runtimeservices/src/test/java/org/apache/isis/core/runtimeservices/i18n/po/PoReaderTest.java
+++ b/core/runtimeservices/src/test/java/org/apache/isis/core/runtimeservices/i18n/po/PoReaderTest.java
@@ -18,6 +18,10 @@
  */
 package org.apache.isis.core.runtimeservices.i18n.po;
 
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
 import java.util.List;
 import java.util.Locale;
 
@@ -28,10 +32,6 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 
-import static org.hamcrest.CoreMatchers.equalTo;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-
 import org.apache.isis.applib.services.i18n.LocaleProvider;
 import org.apache.isis.applib.services.i18n.TranslationContext;
 import org.apache.isis.applib.services.i18n.TranslationsResolver;
@@ -81,7 +81,7 @@ public class PoReaderTest {
         public void singleContext() throws Exception {
 
             // given
-            final TranslationContext context = TranslationContext.ofSimpleStringIdentifier(
+            final TranslationContext context = TranslationContext.ofName(
                     "org.apache.isis.applib.services.bookmark.BookmarkHolderAssociationContributions#object()");
             final String msgId = "Work of art";
             final String msgStr = "Objet d'art";
@@ -90,7 +90,7 @@ public class PoReaderTest {
                 @Override
                 protected List<String> readPo(final Locale locale) {
                     final List<String> lines = _Lists.newArrayList();
-                    lines.add(String.format("#: %s", context.stringify()));
+                    lines.add(String.format("#: %s", context.getName()));
                     lines.add(String.format("msgid \"%s\"", msgId));
                     lines.add(String.format("msgstr \"%s\"", msgStr));
                     return lines;
@@ -108,9 +108,9 @@ public class PoReaderTest {
         public void multipleContext() throws Exception {
 
             // given
-            final TranslationContext context1 = TranslationContext.ofSimpleStringIdentifier(
+            final TranslationContext context1 = TranslationContext.ofName(
                     "fixture.simple.SimpleObjectsFixturesService#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)");
-            final TranslationContext context2 = TranslationContext.ofSimpleStringIdentifier(
+            final TranslationContext context2 = TranslationContext.ofName(
                     "org.apache.isis.applib.fixturescripts.FixtureScripts#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)");
             final String msgId = "Parameters";
             final String msgStr = "Paramètres";
@@ -119,8 +119,8 @@ public class PoReaderTest {
                 @Override
                 protected List<String> readPo(final Locale locale) {
                     final List<String> lines = _Lists.newArrayList();
-                    lines.add(String.format("#: %s", context1.stringify()));
-                    lines.add(String.format("#: %s", context2.stringify()));
+                    lines.add(String.format("#: %s", context1.getName()));
+                    lines.add(String.format("#: %s", context2.getName()));
                     lines.add(String.format("msgid \"%s\"", msgId));
                     lines.add(String.format("msgstr \"%s\"", msgStr));
                     return lines;
@@ -143,12 +143,12 @@ public class PoReaderTest {
         public void multipleBlocks() throws Exception {
 
             // given
-            final TranslationContext context1 = TranslationContext.ofSimpleStringIdentifier(
+            final TranslationContext context1 = TranslationContext.ofName(
                     "org.apache.isis.applib.services.bookmark.BookmarkHolderAssociationContributions#object()");
             final String msgid1 = "Work of art";
             final String msgstr1 = "Objet d'art";
 
-            final TranslationContext context2 = TranslationContext.ofSimpleStringIdentifier(
+            final TranslationContext context2 = TranslationContext.ofName(
                     "org.apache.isis.applib.services.bookmark.BookmarkHolderAssociationContributions#lookup()");
             final String msgid2 = "Lookup";
             final String msgstr2 = "Look up";
@@ -157,14 +157,14 @@ public class PoReaderTest {
                 @Override
                 protected List<String> readPo(final Locale locale) {
                     final List<String> lines = _Lists.newArrayList();
-                    lines.add(String.format("#: %s", context1.stringify()));
+                    lines.add(String.format("#: %s", context1.getName()));
                     lines.add(String.format("msgid \"%s\"", msgid1));
                     lines.add(String.format("msgstr \"%s\"", msgstr1));
 
                     lines.add(String.format(""));
                     lines.add(String.format("# "));
 
-                    lines.add(String.format("#: %s", context2.stringify()));
+                    lines.add(String.format("#: %s", context2.getName()));
                     lines.add(String.format("msgid \"%s\"", msgid2));
                     lines.add(String.format("msgstr \"%s\"", msgstr2));
 
@@ -190,7 +190,7 @@ public class PoReaderTest {
         public void withPlurals() throws Exception {
 
             // given
-            final TranslationContext context = TranslationContext.ofSimpleStringIdentifier(
+            final TranslationContext context = TranslationContext.ofName(
                     "org.apache.isis.applib.services.bookmark.BookmarkHolderAssociationContributions#object()");
             final String msgid = "Work of art";
             final String msgid_plural = "Works of art";
@@ -201,7 +201,7 @@ public class PoReaderTest {
                 @Override
                 protected List<String> readPo(final Locale locale) {
                     final List<String> lines = _Lists.newArrayList();
-                    lines.add(String.format("#: %s", context.stringify()));
+                    lines.add(String.format("#: %s", context.getName()));
                     lines.add(String.format("msgid \"%s\"", msgid));
                     lines.add(String.format("msgid_plural \"%s\"", msgid_plural));
                     lines.add(String.format("msgstr[0] \"%s\"", msgstr$0));
@@ -237,7 +237,7 @@ public class PoReaderTest {
                 }
             };
             
-            TranslationContext context = TranslationContext.ofSimpleStringIdentifier("someContext");
+            TranslationContext context = TranslationContext.ofName("someContext");
 
             // when
             final String translated = poReader.translate(context, "Something to translate");
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/decorator/confirm/ConfirmUiModel.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/decorator/confirm/ConfirmUiModel.java
index aad71b1..e89d990 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/decorator/confirm/ConfirmUiModel.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/decorator/confirm/ConfirmUiModel.java
@@ -48,7 +48,7 @@ public class ConfirmUiModel implements Serializable {
     
     public static ConfirmUiModel ofAreYouSure(TranslationService translationService, Placement placement) {
         
-    	TranslationContext context = TranslationContext.ofClass(MessageRegistry.class);
+    	val context = TranslationContext.forClassName(MessageRegistry.class);
     	
         val areYouSure = translate(translationService, context, MessageRegistry.MSG_ARE_YOU_SURE); 
         val confirm = translate(translationService, context, MessageRegistry.MSG_CONFIRM);
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/tabs/TabGroupPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/tabs/TabGroupPanel.java
index 74a74f3..5b2d327 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/tabs/TabGroupPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/tabs/TabGroupPanel.java
@@ -34,12 +34,10 @@ import org.apache.isis.applib.services.i18n.TranslationContext;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.util.ComponentHintKey;
-import org.apache.isis.viewer.wicket.ui.components.layout.bs3.col.RepeatingViewWithDynamicallyVisibleContent;
 import org.apache.isis.viewer.wicket.ui.panels.HasDynamicallyVisibleContent;
 
-import lombok.val;
-
 import de.agilecoders.wicket.core.markup.html.bootstrap.tabs.AjaxBootstrapTabbedPanel;
+import lombok.val;
 
 // hmmm... not sure how to make this implement HasDynamicallyVisibleContent
 public class TabGroupPanel 
@@ -64,10 +62,8 @@ implements HasDynamicallyVisibleContent {
         val translationService = entityModel.getCommonContext().getTranslationService();
 
         for (val bs3Tab : tablist) {
-            final RepeatingViewWithDynamicallyVisibleContent rv = TabPanel.newRows(entityModel, bs3Tab);
-            
-            TranslationContext translateContext = TranslationContext.ofIdentifierForTab(entityModel.getTypeOfSpecification().getIdentifier());
-            // String translateContext = entityModel.getTypeOfSpecification().getFullIdentifier();
+            val repeatingViewWithDynamicallyVisibleContent = TabPanel.newRows(entityModel, bs3Tab);
+            val translateContext = TranslationContext.forTabIdentifier(entityModel.getTypeOfSpecification().getIdentifier());
             
             String bs3TabName = bs3Tab.getName();
             String tabName = translationService.translate(translateContext, bs3TabName);
@@ -76,12 +72,12 @@ implements HasDynamicallyVisibleContent {
 
                 @Override
                 public Panel getPanel(String panelId) {
-                    return new TabPanel(panelId, entityModel, bs3Tab, rv);
+                    return new TabPanel(panelId, entityModel, bs3Tab, repeatingViewWithDynamicallyVisibleContent);
                 }
 
                 @Override
                 public boolean isVisible() {
-                    return rv.isVisible();
+                    return repeatingViewWithDynamicallyVisibleContent.isVisible();
                 }
             });
         }
diff --git a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/LocalizerForIsis.java b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/LocalizerForIsis.java
index 42e01c7..ce6eec3 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/LocalizerForIsis.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/LocalizerForIsis.java
@@ -75,7 +75,7 @@ public class LocalizerForIsis extends Localizer {
 
     protected String translate(final String key, final Component component) {
         final Class<?> contextClass = determineContextClassElse(component, IsisWicketApplication.class);
-        final TranslationContext context = TranslationContext.ofClass(contextClass);
+        final TranslationContext context = TranslationContext.forClassName(contextClass);
         if(isisInteractionTracker.isInInteraction()) {
             return translate(key, context);
         } else {
diff --git a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/WebRequestCycleForIsis.java b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/WebRequestCycleForIsis.java
index c02f25c..41fe163 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/WebRequestCycleForIsis.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/WebRequestCycleForIsis.java
@@ -359,7 +359,7 @@ public class WebRequestCycleForIsis implements IRequestCycleListener {
         }
         return getCommonContext().getTranslationService()
                 .translate(
-                		TranslationContext.ofClass(WebRequestCycleForIsis.class), 
+                		TranslationContext.forClassName(WebRequestCycleForIsis.class), 
                 		text);
     }