You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2015/03/21 12:09:43 UTC

[1/3] isis git commit: ISIS-1105: deprecate container(), service(Class) and wrapperFactory() from IntegrationTestAbstract

Repository: isis
Updated Branches:
  refs/heads/master e6551bc46 -> ee64b2919


ISIS-1105: deprecate container(), service(Class<T>) and wrapperFactory() from IntegrationTestAbstract

... should simply inject these services instead.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/67ce86b3
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/67ce86b3
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/67ce86b3

Branch: refs/heads/master
Commit: 67ce86b30cbb0c5e0b79226899315f84de15a74a
Parents: e6551bc
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sat Mar 21 11:02:44 2015 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Sat Mar 21 11:02:44 2015 +0000

----------------------------------------------------------------------
 .../IntegrationTestAbstract.java                | 29 +++++++++++++-------
 .../scenarios/ScenarioExecution.java            |  4 +++
 .../modules/simple/SimpleObjectIntegTest.java   | 16 ++++++-----
 3 files changed, 32 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/67ce86b3/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract.java
----------------------------------------------------------------------
diff --git a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract.java b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract.java
index 4d7b9a0..8000ebc 100644
--- a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract.java
+++ b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract.java
@@ -119,48 +119,57 @@ public abstract class IntegrationTestAbstract {
     /**
      * Convenience method
      */
-    public Object getVar(String type, String id) {
+    public Object getVar(final String type, final String id) {
         return scenarioExecution().getVar(type, id);
     }
 
     /**
      * Convenience method
      */
-    public <X> X getVar(String type, String id, Class<X> cls) {
+    public <X> X getVar(final String type, final String id, final Class<X> cls) {
         return scenarioExecution().getVar(type, id ,cls);
     }
 
     /**
      * Convenience method
      */
-    public void putVar(String type, String id, Object value) {
+    public void putVar(final String type, final String id, final Object value) {
         scenarioExecution().putVar(type, id, value);
     }
     
     /**
      * Convenience method
      */
-    public void removeVar(String type, String id) {
+    public void removeVar(final String type, final String id) {
         scenarioExecution().removeVar(type, id);
     }
 
     /**
      * Convenience method
+     *
+     * @deprecated - instead just inject service into test.
      */
-    protected <T> T service(Class<T> cls) {
+    @Deprecated
+    protected <T> T service(final Class<T> cls) {
         return scenarioExecution().service(cls);
     }
     
     /**
      * Convenience method
+     *
+     * @deprecated - instead just inject {@link org.apache.isis.applib.DomainObjectContainer} into test.
      */
+    @Deprecated
     protected DomainObjectContainer container() {
         return scenarioExecution().container();
     }
     
     /**
      * Convenience method
+     *
+     * @deprecated - instead just inject {@link org.apache.isis.applib.services.wrapper.WrapperFactory} into test.
      */
+    @Deprecated
     protected WrapperFactory wrapperFactory() {
         return scenarioExecution().wrapperFactory();
     }
@@ -168,14 +177,14 @@ public abstract class IntegrationTestAbstract {
     /**
      * Convenience method
      */
-    protected <T> T wrap(T obj) {
+    protected <T> T wrap(final T obj) {
         return scenarioExecution().wrapperFactory().wrap(obj);
     }
 
     /**
      * Convenience method
      */
-    protected <T> T unwrap(T obj) {
+    protected <T> T unwrap(final T obj) {
         return scenarioExecution().wrapperFactory().unwrap(obj);
     }
 
@@ -204,11 +213,11 @@ public abstract class IntegrationTestAbstract {
                     try {
                         base.evaluate();
                         isft.endTran();
-                    } catch(Throwable e) {
+                    } catch(final Throwable e) {
                         isft.bounceSystem();
                         final List<Throwable> causalChain = Throwables.getCausalChain(e);
                         // if underlying cause is an applib-defined exception, throw that rather than Isis' wrapper exception
-                        for (Throwable cause : causalChain) {
+                        for (final Throwable cause : causalChain) {
                             if(cause instanceof RecoverableException ||
                                cause instanceof NonRecoverableException) {
                                 throw cause;
@@ -231,7 +240,7 @@ public abstract class IntegrationTestAbstract {
      * @deprecated  - just inject {@link org.apache.isis.applib.fixturescripts.FixtureScripts} service for your application, and call.  If multiple fixture scripts, create an anonymous subclass of {@link org.apache.isis.applib.fixturescripts.FixtureScript} and override {@link org.apache.isis.applib.fixturescripts.FixtureScript#execute(org.apache.isis.applib.fixturescripts.FixtureScript.ExecutionContext)} execute.
      */
     @Deprecated
-    protected static void runScript(FixtureScript... fixtureScripts) {
+    protected static void runScript(final FixtureScript... fixtureScripts) {
         scenarioExecution().install(fixtureScripts);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/67ce86b3/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/ScenarioExecution.java
----------------------------------------------------------------------
diff --git a/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/ScenarioExecution.java b/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/ScenarioExecution.java
index 92e5234..c9ce6a0 100644
--- a/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/ScenarioExecution.java
+++ b/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/ScenarioExecution.java
@@ -130,6 +130,10 @@ public abstract class ScenarioExecution {
      * <p>
      * Because integration tests cache services in the session, this method should typically be followed by
      * calls to {@link #closeSession() close} the current session and then to re-{@link #openSession() open} a new one.
+     *
+     * <p>
+     *     TODO: I'm not convinced this works reliably...
+     * </p>
      */
     public <T> void replaceService(T original, T replacement) {
         dsp.replaceService(original, replacement);

http://git-wip-us.apache.org/repos/asf/isis/blob/67ce86b3/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectIntegTest.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectIntegTest.java b/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectIntegTest.java
index 12d65c7..9991e3c 100644
--- a/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectIntegTest.java
+++ b/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectIntegTest.java
@@ -18,21 +18,20 @@
  */
 package domainapp.integtests.tests.modules.simple;
 
-import domainapp.dom.modules.simple.SimpleObject;
-import domainapp.dom.modules.simple.SimpleObjects;
-import domainapp.fixture.scenarios.RecreateSimpleObjects;
-import domainapp.integtests.tests.SimpleAppIntegTest;
-
 import javax.inject.Inject;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
+import org.apache.isis.applib.DomainObjectContainer;
 import org.apache.isis.applib.fixturescripts.FixtureScripts;
 import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.applib.services.wrapper.DisabledException;
 import org.apache.isis.applib.services.wrapper.InvalidException;
-
+import domainapp.dom.modules.simple.SimpleObject;
+import domainapp.dom.modules.simple.SimpleObjects;
+import domainapp.fixture.scenarios.RecreateSimpleObjects;
+import domainapp.integtests.tests.SimpleAppIntegTest;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.CoreMatchers.nullValue;
@@ -116,6 +115,9 @@ public class SimpleObjectIntegTest extends SimpleAppIntegTest {
 
     public static class Title extends SimpleObjectIntegTest {
 
+        @Inject
+        DomainObjectContainer container;
+
         @Test
         public void interpolatesName() throws Exception {
 
@@ -123,7 +125,7 @@ public class SimpleObjectIntegTest extends SimpleAppIntegTest {
             final String name = simpleObjectWrapped.getName();
 
             // when
-            final String title = container().titleOf(simpleObjectWrapped);
+            final String title = container.titleOf(simpleObjectWrapped);
 
             // then
             assertThat(title, is("Object: " + name));


[3/3] isis git commit: ISIS-1052: recreating simpleapp archetype

Posted by da...@apache.org.
ISIS-1052: recreating simpleapp archetype


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/ee64b291
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/ee64b291
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/ee64b291

Branch: refs/heads/master
Commit: ee64b29197c7c85072dfe085fd5caf3f6a7bc12f
Parents: c3ed13d
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sat Mar 21 11:05:45 2015 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Sat Mar 21 11:05:45 2015 +0000

----------------------------------------------------------------------
 .../dom/modules/simple/SimpleObject.java        |  10 +-
 .../dom/modules/simple/SimpleObjects.java       |   7 +
 .../modules/simple/SimpleObjectsTearDown.java   |   2 +-
 .../modules/simple/SimpleObjectIntegTest.java   |  16 +-
 .../modules/simple/SimpleObjectsIntegTest.java  |  44 ++++-
 .../src/main/webapp/WEB-INF/translations-en.po  | 194 +++++++++++++++++++
 .../main/webapp/WEB-INF/translations-en_GB.po   | 155 ---------------
 .../src/main/webapp/WEB-INF/translations-es.po  | 194 +++++++++++++++++++
 .../src/main/webapp/WEB-INF/translations-nl.po  | 194 +++++++++++++++++++
 .../src/main/webapp/WEB-INF/translations.po     |  53 ++++-
 .../projects/basic/archetype.properties         |   2 +-
 11 files changed, 689 insertions(+), 182 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/ee64b291/example/archetype/simpleapp/src/main/resources/archetype-resources/dom/src/main/java/domainapp/dom/modules/simple/SimpleObject.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/dom/src/main/java/domainapp/dom/modules/simple/SimpleObject.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/dom/src/main/java/domainapp/dom/modules/simple/SimpleObject.java
index 9b6a444..48d456b 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/dom/src/main/java/domainapp/dom/modules/simple/SimpleObject.java
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/dom/src/main/java/domainapp/dom/modules/simple/SimpleObject.java
@@ -38,7 +38,11 @@ import org.apache.isis.applib.services.eventbus.ActionDomainEvent;
 import org.apache.isis.applib.services.i18n.TranslatableString;
 import org.apache.isis.applib.util.ObjectContracts;
 
-@javax.jdo.annotations.PersistenceCapable(identityType=IdentityType.DATASTORE)
+@javax.jdo.annotations.PersistenceCapable(
+        identityType=IdentityType.DATASTORE,
+        schema = "simple",
+        table = "SimpleObject"
+)
 @javax.jdo.annotations.DatastoreIdentity(
         strategy=javax.jdo.annotations.IdGeneratorStrategy.IDENTITY,
          column="id")
@@ -57,9 +61,7 @@ import org.apache.isis.applib.util.ObjectContracts;
                         + "WHERE name.indexOf(:name) >= 0 ")
 })
 @javax.jdo.annotations.Unique(name="SimpleObject_name_UNQ", members = {"name"})
-@DomainObject(
-        objectType = "SIMPLE"
-)
+@DomainObject
 @DomainObjectLayout(
         bookmarking = BookmarkPolicy.AS_ROOT
 )

http://git-wip-us.apache.org/repos/asf/isis/blob/ee64b291/example/archetype/simpleapp/src/main/resources/archetype-resources/dom/src/main/java/domainapp/dom/modules/simple/SimpleObjects.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/dom/src/main/java/domainapp/dom/modules/simple/SimpleObjects.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/dom/src/main/java/domainapp/dom/modules/simple/SimpleObjects.java
index 4458905..049f292 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/dom/src/main/java/domainapp/dom/modules/simple/SimpleObjects.java
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/dom/src/main/java/domainapp/dom/modules/simple/SimpleObjects.java
@@ -34,11 +34,18 @@ import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.query.QueryDefault;
 import org.apache.isis.applib.services.eventbus.ActionDomainEvent;
+import org.apache.isis.applib.services.i18n.TranslatableString;
 
 @DomainService(repositoryFor = SimpleObject.class)
 @DomainServiceLayout(menuOrder = "10")
 public class SimpleObjects {
 
+    //region > title
+    public TranslatableString title() {
+        return TranslatableString.tr("Simple Objects");
+    }
+    //endregion
+
     //region > listAll (action)
     @Action(
             semantics = SemanticsOf.SAFE

http://git-wip-us.apache.org/repos/asf/isis/blob/ee64b291/example/archetype/simpleapp/src/main/resources/archetype-resources/fixture/src/main/java/domainapp/fixture/modules/simple/SimpleObjectsTearDown.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/fixture/src/main/java/domainapp/fixture/modules/simple/SimpleObjectsTearDown.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/fixture/src/main/java/domainapp/fixture/modules/simple/SimpleObjectsTearDown.java
index 1d4d7d0..32b739f 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/fixture/src/main/java/domainapp/fixture/modules/simple/SimpleObjectsTearDown.java
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/fixture/src/main/java/domainapp/fixture/modules/simple/SimpleObjectsTearDown.java
@@ -29,7 +29,7 @@ public class SimpleObjectsTearDown extends FixtureScript {
 
     @Override
     protected void execute(ExecutionContext executionContext) {
-        isisJdoSupport.executeUpdate("delete from ${symbol_escape}"SimpleObject${symbol_escape}"");
+        isisJdoSupport.executeUpdate("delete from simple.${symbol_escape}"SimpleObject${symbol_escape}"");
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/ee64b291/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectIntegTest.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectIntegTest.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectIntegTest.java
index 622f56d..9659479 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectIntegTest.java
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectIntegTest.java
@@ -21,21 +21,20 @@
  */
 package domainapp.integtests.tests.modules.simple;
 
-import domainapp.dom.modules.simple.SimpleObject;
-import domainapp.dom.modules.simple.SimpleObjects;
-import domainapp.fixture.scenarios.RecreateSimpleObjects;
-import domainapp.integtests.tests.SimpleAppIntegTest;
-
 import javax.inject.Inject;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
+import org.apache.isis.applib.DomainObjectContainer;
 import org.apache.isis.applib.fixturescripts.FixtureScripts;
 import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.applib.services.wrapper.DisabledException;
 import org.apache.isis.applib.services.wrapper.InvalidException;
-
+import domainapp.dom.modules.simple.SimpleObject;
+import domainapp.dom.modules.simple.SimpleObjects;
+import domainapp.fixture.scenarios.RecreateSimpleObjects;
+import domainapp.integtests.tests.SimpleAppIntegTest;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.CoreMatchers.nullValue;
@@ -119,6 +118,9 @@ public class SimpleObjectIntegTest extends SimpleAppIntegTest {
 
     public static class Title extends SimpleObjectIntegTest {
 
+        @Inject
+        DomainObjectContainer container;
+
         @Test
         public void interpolatesName() throws Exception {
 
@@ -126,7 +128,7 @@ public class SimpleObjectIntegTest extends SimpleAppIntegTest {
             final String name = simpleObjectWrapped.getName();
 
             // when
-            final String title = container().titleOf(simpleObjectWrapped);
+            final String title = container.titleOf(simpleObjectWrapped);
 
             // then
             assertThat(title, is("Object: " + name));

http://git-wip-us.apache.org/repos/asf/isis/blob/ee64b291/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectsIntegTest.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectsIntegTest.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectsIntegTest.java
index 8ab392d..75b9f96 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectsIntegTest.java
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectsIntegTest.java
@@ -21,12 +21,6 @@
  */
 package domainapp.integtests.tests.modules.simple;
 
-import domainapp.dom.modules.simple.SimpleObject;
-import domainapp.dom.modules.simple.SimpleObjects;
-import domainapp.fixture.modules.simple.SimpleObjectsTearDown;
-import domainapp.fixture.scenarios.RecreateSimpleObjects;
-import domainapp.integtests.tests.SimpleAppIntegTest;
-
 import java.sql.SQLIntegrityConstraintViolationException;
 import java.util.List;
 import javax.inject.Inject;
@@ -37,9 +31,15 @@ import org.hamcrest.TypeSafeMatcher;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
+import org.apache.isis.applib.DomainObjectContainer;
 import org.apache.isis.applib.fixturescripts.FixtureScript;
 import org.apache.isis.applib.fixturescripts.FixtureScripts;
-
+import domainapp.dom.modules.simple.SimpleObject;
+import domainapp.dom.modules.simple.SimpleObjects;
+import domainapp.fixture.modules.simple.SimpleObjectsTearDown;
+import domainapp.fixture.scenarios.RecreateSimpleObjects;
+import domainapp.integtests.tests.SimpleAppIntegTest;
+import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 
@@ -52,6 +52,36 @@ public class SimpleObjectsIntegTest extends SimpleAppIntegTest {
     FixtureScripts fixtureScripts;
     @Inject
     SimpleObjects simpleObjects;
+    @Inject
+    DomainObjectContainer container;
+
+    public static class Title extends SimpleObjectsIntegTest {
+
+        @Test
+        public void happyCase() throws Exception {
+
+            // when
+            final String title = container.titleOf(wrap(simpleObjects));
+
+            // then
+            assertThat(title, equalTo("Simple Objects"));
+        }
+
+        @Test
+        public void whenNone() throws Exception {
+
+            // given
+            FixtureScript fs = new SimpleObjectsTearDown();
+            fixtureScripts.runFixtureScript(fs, null);
+            nextTransaction();
+
+            // when
+            final List<SimpleObject> all = wrap(simpleObjects).listAll();
+
+            // then
+            assertThat(all.size(), is(0));
+        }
+    }
 
     public static class ListAll extends SimpleObjectsIntegTest {
 

http://git-wip-us.apache.org/repos/asf/isis/blob/ee64b291/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/translations-en.po
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/translations-en.po b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/translations-en.po
new file mode 100644
index 0000000..6f5a4a4
--- /dev/null
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/translations-en.po
@@ -0,0 +1,194 @@
+##############################################################################
+#
+# .pot file
+#
+# Translate this file to each required language and place in WEB-INF, eg:
+#
+#     /WEB-INF/translations-en_US.po
+#     /WEB-INF/translations-en.po
+#     /WEB-INF/translations-fr_FR.po
+#     /WEB-INF/translations-fr.po
+#     /WEB-INF/translations.po
+#
+# If the app uses TranslatableString (eg for internationalized validation
+# messages), or if the app calls the TranslationService directly, then ensure
+# that all text to be translated has been captured by running a full
+# integration test suite that exercises all relevant behaviour
+#
+##############################################################################
+
+#: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#downloadTranslations(java.lang.String)
+msgid ".pot file name"
+msgstr ".pot file name"
+
+
+#: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#resetTranslationCache()
+msgid "Clear translation cache"
+msgstr "Clear translation cache"
+
+
+#: domainapp.dom.modules.simple.SimpleObjects#create()
+msgid "Create"
+msgstr "Create"
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureScript#discoverable
+msgid "Discoverable"
+msgstr "Discoverable"
+
+
+#: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#downloadTranslations()
+msgid "Download Translations"
+msgstr "Download Translations"
+
+
+#: domainapp.dom.modules.simple.SimpleObject#updateName()
+msgid "Exclamation mark is not allowed"
+msgstr "Exclamation mark is not allowed"
+
+
+#: domainapp.dom.modules.simple.SimpleObjects#findByName()
+msgid "Find By Name"
+msgstr "Find By Name"
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureResult#fixtureScriptClassName
+msgid "Fixture script"
+msgstr "Fixture script"
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureScript#friendlyName
+msgid "Friendly Name"
+msgstr "Friendly Name"
+
+
+#: domainapp.dom.app.homepage.HomePageService#homePage()
+msgid "Home Page"
+msgstr "Home Page"
+
+
+#: domainapp.dom.modules.simple.SimpleObjects#listAll()
+msgid "List All"
+msgstr "List All"
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureScript#localName
+msgid "Local Name"
+msgstr "Local Name"
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureScript#lookup()
+#: org.apache.isis.applib.services.bookmark.BookmarkHolderActionContributions#lookup()
+msgid "Lookup"
+msgstr "Lookup"
+
+
+#: domainapp.dom.modules.simple.SimpleObject#name
+#: domainapp.dom.modules.simple.SimpleObjects#create(java.lang.String)
+#: domainapp.dom.modules.simple.SimpleObjects#findByName(java.lang.String)
+msgid "Name"
+msgstr "Name"
+
+
+#: domainapp.dom.modules.simple.SimpleObject#updateName(java.lang.String)
+msgid "New name"
+msgstr "New name"
+
+
+#: org.apache.isis.applib.services.bookmark.BookmarkHolderAssociationContributions#object()
+msgid "Object"
+msgstr "Object"
+
+
+#: domainapp.dom.modules.simple.SimpleObject#title()
+msgid "Object: {name}"
+msgstr "Object: {name}"
+
+
+#: domainapp.dom.app.homepage.HomePageViewModel#objects
+msgid "Objects"
+msgstr "Objects"
+
+
+#: domainapp.fixture.DomainAppFixturesService#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
+#: org.apache.isis.applib.fixturescripts.FixtureScripts#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
+msgid "Parameters"
+msgstr "Parameters"
+
+
+#: domainapp.fixture.DomainAppFixturesService
+#: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu
+msgid "Prototyping"
+msgstr "Prototyping"
+
+
+#: domainapp.fixture.DomainAppFixturesService#recreateObjectsAndReturnFirst()
+msgid "Recreate Objects And Return First"
+msgstr "Recreate Objects And Return First"
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureResult#object
+msgid "Result"
+msgstr "Result"
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureResult#className
+msgid "Result class"
+msgstr "Result class"
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureResult#key
+msgid "Result key"
+msgstr "Result key"
+
+
+#: domainapp.fixture.DomainAppFixturesService#runFixtureScript()
+#: org.apache.isis.applib.fixturescripts.FixtureScripts#runFixtureScript()
+msgid "Run Fixture Script"
+msgstr "Run Fixture Script"
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureScript
+msgid "Script"
+msgstr "Script"
+
+
+#: domainapp.fixture.DomainAppFixturesService#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
+#: org.apache.isis.applib.fixturescripts.FixtureScripts#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
+msgid "Script-specific parameters (if any).  The format depends on the script implementation (eg key=value, CSV, JSON, XML etc)"
+msgstr "Script-specific parameters (if any).  The format depends on the script implementation (eg key=value, CSV, JSON, XML etc)"
+
+
+#: domainapp.dom.modules.simple.SimpleObjects#title()
+msgid "Simple Objects"
+msgstr "Simple Objects"
+
+
+#: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#switchToReadingTranslations()
+msgid "Switch To Reading Translations"
+msgstr "Switch To Reading Translations"
+
+
+#: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#switchToWritingTranslations()
+msgid "Switch To Writing Translations"
+msgstr "Switch To Writing Translations"
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureScript#type
+msgid "Type"
+msgstr "Type"
+
+
+#: domainapp.dom.modules.simple.SimpleObject#updateName()
+msgid "Update Name"
+msgstr "Update Name"
+
+
+
+
+
+
+##############################################################################
+# end of .pot file
+##############################################################################
+

http://git-wip-us.apache.org/repos/asf/isis/blob/ee64b291/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/translations-en_GB.po
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/translations-en_GB.po b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/translations-en_GB.po
deleted file mode 100644
index 4e2c823..0000000
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/translations-en_GB.po
+++ /dev/null
@@ -1,155 +0,0 @@
-##############################################################################
-#
-# .pot file
-#
-# Translate this file to each required language and place in WEB-INF, eg:
-#
-#     /WEB-INF/translations_en-US.po
-#     /WEB-INF/translations_en.po
-#     /WEB-INF/translations_fr-FR.po
-#     /WEB-INF/translations_fr.po
-#     /WEB-INF/translations.po
-#
-##############################################################################
-
-#: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#downloadTranslations(java.lang.String)
-msgid ".pot file name"
-msgstr ""
-
-
-#: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#resetTranslationCache()
-msgid "Clear translation cache"
-msgstr "Reload .po files"
-
-
-#: domainapp.dom.modules.simple.SimpleObjects#create()
-msgid "Create"
-msgstr ""
-
-
-#: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#downloadTranslations()
-msgid "Download Translations"
-msgstr "Download .pot file"
-
-
-#: domainapp.dom.modules.simple.SimpleObject#updateName()
-msgid "Exclamation mark is not allowed"
-msgstr "No exclamation marks, chum!"
-
-
-#: domainapp.dom.modules.simple.SimpleObjects#findByName()
-msgid "Find By Name"
-msgstr ""
-
-
-#: org.apache.isis.applib.fixturescripts.FixtureResult#fixtureScriptClassName
-msgid "Fixture script"
-msgstr ""
-
-
-#: domainapp.dom.app.homepage.HomePageService#homePage()
-msgid "Home Page"
-msgstr ""
-
-
-#: domainapp.dom.modules.simple.SimpleObjects#listAll()
-msgid "List All"
-msgstr ""
-
-
-#: domainapp.fixture.scenarios.RecreateSimpleObjects#lookup()
-#: org.apache.isis.applib.fixturescripts.FixtureScript#lookup()
-#: org.apache.isis.applib.services.bookmark.BookmarkHolderActionContributions#lookup()
-msgid "Lookup"
-msgstr ""
-
-
-#: domainapp.dom.modules.simple.SimpleObjects#create(java.lang.String)
-#: domainapp.dom.modules.simple.SimpleObjects#findByName(java.lang.String)
-msgid "Name"
-msgstr ""
-
-
-#: domainapp.dom.modules.simple.SimpleObject#updateName(java.lang.String)
-msgid "New name"
-msgstr ""
-
-
-#: org.apache.isis.applib.services.bookmark.BookmarkHolderAssociationContributions#object()
-msgid "Object"
-msgstr ""
-
-
-#: domainapp.dom.modules.simple.SimpleObject#title()
-msgid "Object: {name}"
-msgstr ""
-
-
-#: domainapp.fixture.DomainAppFixturesService#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
-#: org.apache.isis.applib.fixturescripts.FixtureScripts#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
-msgid "Parameters"
-msgstr ""
-
-
-#: domainapp.fixture.DomainAppFixturesService
-#: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu
-msgid "Prototyping"
-msgstr ""
-
-
-#: domainapp.fixture.DomainAppFixturesService#recreateObjectsAndReturnFirst()
-msgid "Recreate Objects And Return First"
-msgstr ""
-
-
-#: org.apache.isis.applib.fixturescripts.FixtureResult#object
-msgid "Result"
-msgstr ""
-
-
-#: org.apache.isis.applib.fixturescripts.FixtureResult#className
-msgid "Result class"
-msgstr ""
-
-
-#: org.apache.isis.applib.fixturescripts.FixtureResult#key
-msgid "Result key"
-msgstr ""
-
-
-#: domainapp.fixture.DomainAppFixturesService#runFixtureScript()
-#: org.apache.isis.applib.fixturescripts.FixtureScripts#runFixtureScript()
-msgid "Run Fixture Script"
-msgstr ""
-
-
-#: domainapp.fixture.scenarios.RecreateSimpleObjects
-#: org.apache.isis.applib.fixturescripts.FixtureScript
-msgid "Script"
-msgstr ""
-
-
-#: domainapp.fixture.DomainAppFixturesService#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
-#: org.apache.isis.applib.fixturescripts.FixtureScripts#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
-msgid "Script-specific parameters (if any).  The format depends on the script implementation (eg key=value, CSV, JSON, XML etc)"
-msgstr ""
-
-
-#: domainapp.dom.modules.simple.SimpleObject#updateName()
-msgid "Update Name"
-msgstr ""
-
-
-#: domainapp.fixture.scenarios.RecreateSimpleObjects#withDiscoverability()
-#: org.apache.isis.applib.fixturescripts.FixtureScript#withDiscoverability()
-msgid "With Discoverability"
-msgstr ""
-
-
-
-
-
-##############################################################################
-# end of .pot file
-##############################################################################
-

http://git-wip-us.apache.org/repos/asf/isis/blob/ee64b291/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/translations-es.po
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/translations-es.po b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/translations-es.po
new file mode 100644
index 0000000..92b8bdb
--- /dev/null
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/translations-es.po
@@ -0,0 +1,194 @@
+##############################################################################
+#
+# .pot file
+#
+# Translate this file to each required language and place in WEB-INF, eg:
+#
+#     /WEB-INF/translations-en_US.po
+#     /WEB-INF/translations-en.po
+#     /WEB-INF/translations-fr_FR.po
+#     /WEB-INF/translations-fr.po
+#     /WEB-INF/translations.po
+#
+# If the app uses TranslatableString (eg for internationalized validation
+# messages), or if the app calls the TranslationService directly, then ensure
+# that all text to be translated has been captured by running a full
+# integration test suite that exercises all relevant behaviour
+#
+##############################################################################
+
+#: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#downloadTranslations(java.lang.String)
+msgid ".pot file name"
+msgstr ""
+
+
+#: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#resetTranslationCache()
+msgid "Clear translation cache"
+msgstr ""
+
+
+#: domainapp.dom.modules.simple.SimpleObjects#create()
+msgid "Create"
+msgstr "Crear"
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureScript#discoverable
+msgid "Discoverable"
+msgstr ""
+
+
+#: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#downloadTranslations()
+msgid "Download Translations"
+msgstr ""
+
+
+#: domainapp.dom.modules.simple.SimpleObject#updateName()
+msgid "Exclamation mark is not allowed"
+msgstr ""
+
+
+#: domainapp.dom.modules.simple.SimpleObjects#findByName()
+msgid "Find By Name"
+msgstr "Buscar por Nombre"
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureResult#fixtureScriptClassName
+msgid "Fixture script"
+msgstr ""
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureScript#friendlyName
+msgid "Friendly Name"
+msgstr ""
+
+
+#: domainapp.dom.app.homepage.HomePageService#homePage()
+msgid "Home Page"
+msgstr ""
+
+
+#: domainapp.dom.modules.simple.SimpleObjects#listAll()
+msgid "List All"
+msgstr "Lista de Todos"
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureScript#localName
+msgid "Local Name"
+msgstr ""
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureScript#lookup()
+#: org.apache.isis.applib.services.bookmark.BookmarkHolderActionContributions#lookup()
+msgid "Lookup"
+msgstr ""
+
+
+#: domainapp.dom.modules.simple.SimpleObject#name
+#: domainapp.dom.modules.simple.SimpleObjects#create(java.lang.String)
+#: domainapp.dom.modules.simple.SimpleObjects#findByName(java.lang.String)
+msgid "Name"
+msgstr "Nombre"
+
+
+#: domainapp.dom.modules.simple.SimpleObject#updateName(java.lang.String)
+msgid "New name"
+msgstr "Nuevo nombre"
+
+
+#: org.apache.isis.applib.services.bookmark.BookmarkHolderAssociationContributions#object()
+msgid "Object"
+msgstr ""
+
+
+#: domainapp.dom.modules.simple.SimpleObject#title()
+msgid "Object: {name}"
+msgstr ""
+
+
+#: domainapp.dom.app.homepage.HomePageViewModel#objects
+msgid "Objects"
+msgstr ""
+
+
+#: domainapp.fixture.DomainAppFixturesService#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
+#: org.apache.isis.applib.fixturescripts.FixtureScripts#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
+msgid "Parameters"
+msgstr ""
+
+
+#: domainapp.fixture.DomainAppFixturesService
+#: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu
+msgid "Prototyping"
+msgstr ""
+
+
+#: domainapp.fixture.DomainAppFixturesService#recreateObjectsAndReturnFirst()
+msgid "Recreate Objects And Return First"
+msgstr ""
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureResult#object
+msgid "Result"
+msgstr ""
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureResult#className
+msgid "Result class"
+msgstr ""
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureResult#key
+msgid "Result key"
+msgstr ""
+
+
+#: domainapp.fixture.DomainAppFixturesService#runFixtureScript()
+#: org.apache.isis.applib.fixturescripts.FixtureScripts#runFixtureScript()
+msgid "Run Fixture Script"
+msgstr ""
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureScript
+msgid "Script"
+msgstr ""
+
+
+#: domainapp.fixture.DomainAppFixturesService#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
+#: org.apache.isis.applib.fixturescripts.FixtureScripts#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
+msgid "Script-specific parameters (if any).  The format depends on the script implementation (eg key=value, CSV, JSON, XML etc)"
+msgstr ""
+
+
+#: domainapp.dom.modules.simple.SimpleObjects#title()
+msgid "Simple Objects"
+msgstr "Objetos básicos"
+
+
+#: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#switchToReadingTranslations()
+msgid "Switch To Reading Translations"
+msgstr ""
+
+
+#: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#switchToWritingTranslations()
+msgid "Switch To Writing Translations"
+msgstr ""
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureScript#type
+msgid "Type"
+msgstr ""
+
+
+#: domainapp.dom.modules.simple.SimpleObject#updateName()
+msgid "Update Name"
+msgstr "Nombre de la Actualización"
+
+
+
+
+
+
+##############################################################################
+# end of .pot file
+##############################################################################
+

http://git-wip-us.apache.org/repos/asf/isis/blob/ee64b291/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/translations-nl.po
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/translations-nl.po b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/translations-nl.po
new file mode 100644
index 0000000..68c6776
--- /dev/null
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/translations-nl.po
@@ -0,0 +1,194 @@
+##############################################################################
+#
+# .pot file
+#
+# Translate this file to each required language and place in WEB-INF, eg:
+#
+#     /WEB-INF/translations-en_US.po
+#     /WEB-INF/translations-en.po
+#     /WEB-INF/translations-fr_FR.po
+#     /WEB-INF/translations-fr.po
+#     /WEB-INF/translations.po
+#
+# If the app uses TranslatableString (eg for internationalized validation
+# messages), or if the app calls the TranslationService directly, then ensure
+# that all text to be translated has been captured by running a full
+# integration test suite that exercises all relevant behaviour
+#
+##############################################################################
+
+#: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#downloadTranslations(java.lang.String)
+msgid ".pot file name"
+msgstr ""
+
+
+#: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#resetTranslationCache()
+msgid "Clear translation cache"
+msgstr ""
+
+
+#: domainapp.dom.modules.simple.SimpleObjects#create()
+msgid "Create"
+msgstr "Creëren"
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureScript#discoverable
+msgid "Discoverable"
+msgstr ""
+
+
+#: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#downloadTranslations()
+msgid "Download Translations"
+msgstr ""
+
+
+#: domainapp.dom.modules.simple.SimpleObject#updateName()
+msgid "Exclamation mark is not allowed"
+msgstr ""
+
+
+#: domainapp.dom.modules.simple.SimpleObjects#findByName()
+msgid "Find By Name"
+msgstr "Zoek op Naam"
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureResult#fixtureScriptClassName
+msgid "Fixture script"
+msgstr ""
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureScript#friendlyName
+msgid "Friendly Name"
+msgstr ""
+
+
+#: domainapp.dom.app.homepage.HomePageService#homePage()
+msgid "Home Page"
+msgstr ""
+
+
+#: domainapp.dom.modules.simple.SimpleObjects#listAll()
+msgid "List All"
+msgstr "Lijst Alle"
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureScript#localName
+msgid "Local Name"
+msgstr ""
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureScript#lookup()
+#: org.apache.isis.applib.services.bookmark.BookmarkHolderActionContributions#lookup()
+msgid "Lookup"
+msgstr ""
+
+
+#: domainapp.dom.modules.simple.SimpleObject#name
+#: domainapp.dom.modules.simple.SimpleObjects#create(java.lang.String)
+#: domainapp.dom.modules.simple.SimpleObjects#findByName(java.lang.String)
+msgid "Name"
+msgstr "Naam"
+
+
+#: domainapp.dom.modules.simple.SimpleObject#updateName(java.lang.String)
+msgid "New name"
+msgstr "Nieuwe naam"
+
+
+#: org.apache.isis.applib.services.bookmark.BookmarkHolderAssociationContributions#object()
+msgid "Object"
+msgstr ""
+
+
+#: domainapp.dom.modules.simple.SimpleObject#title()
+msgid "Object: {name}"
+msgstr ""
+
+
+#: domainapp.dom.app.homepage.HomePageViewModel#objects
+msgid "Objects"
+msgstr ""
+
+
+#: domainapp.fixture.DomainAppFixturesService#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
+#: org.apache.isis.applib.fixturescripts.FixtureScripts#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
+msgid "Parameters"
+msgstr ""
+
+
+#: domainapp.fixture.DomainAppFixturesService
+#: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu
+msgid "Prototyping"
+msgstr ""
+
+
+#: domainapp.fixture.DomainAppFixturesService#recreateObjectsAndReturnFirst()
+msgid "Recreate Objects And Return First"
+msgstr ""
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureResult#object
+msgid "Result"
+msgstr ""
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureResult#className
+msgid "Result class"
+msgstr ""
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureResult#key
+msgid "Result key"
+msgstr ""
+
+
+#: domainapp.fixture.DomainAppFixturesService#runFixtureScript()
+#: org.apache.isis.applib.fixturescripts.FixtureScripts#runFixtureScript()
+msgid "Run Fixture Script"
+msgstr ""
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureScript
+msgid "Script"
+msgstr ""
+
+
+#: domainapp.fixture.DomainAppFixturesService#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
+#: org.apache.isis.applib.fixturescripts.FixtureScripts#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
+msgid "Script-specific parameters (if any).  The format depends on the script implementation (eg key=value, CSV, JSON, XML etc)"
+msgstr ""
+
+
+#: domainapp.dom.modules.simple.SimpleObjects#title()
+msgid "Simple Objects"
+msgstr "Eenvoudige Objecten"
+
+
+#: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#switchToReadingTranslations()
+msgid "Switch To Reading Translations"
+msgstr ""
+
+
+#: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#switchToWritingTranslations()
+msgid "Switch To Writing Translations"
+msgstr ""
+
+
+#: org.apache.isis.applib.fixturescripts.FixtureScript#type
+msgid "Type"
+msgstr ""
+
+
+#: domainapp.dom.modules.simple.SimpleObject#updateName()
+msgid "Update Name"
+msgstr "Updaten Naam"
+
+
+
+
+
+
+##############################################################################
+# end of .pot file
+##############################################################################
+

http://git-wip-us.apache.org/repos/asf/isis/blob/ee64b291/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/translations.po
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/translations.po b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/translations.po
index bf9281a..181c68c 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/translations.po
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/translations.po
@@ -10,6 +10,11 @@
 #     /WEB-INF/translations-fr.po
 #     /WEB-INF/translations.po
 #
+# If the app uses TranslatableString (eg for internationalized validation
+# messages), or if the app calls the TranslationService directly, then ensure
+# that all text to be translated has been captured by running a full
+# integration test suite that exercises all relevant behaviour
+#
 ##############################################################################
 
 #: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#downloadTranslations(java.lang.String)
@@ -27,6 +32,11 @@ msgid "Create"
 msgstr ""
 
 
+#: org.apache.isis.applib.fixturescripts.FixtureScript#discoverable
+msgid "Discoverable"
+msgstr ""
+
+
 #: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#downloadTranslations()
 msgid "Download Translations"
 msgstr ""
@@ -47,6 +57,11 @@ msgid "Fixture script"
 msgstr ""
 
 
+#: org.apache.isis.applib.fixturescripts.FixtureScript#friendlyName
+msgid "Friendly Name"
+msgstr ""
+
+
 #: domainapp.dom.app.homepage.HomePageService#homePage()
 msgid "Home Page"
 msgstr ""
@@ -57,13 +72,18 @@ msgid "List All"
 msgstr ""
 
 
-#: domainapp.fixture.scenarios.RecreateSimpleObjects#lookup()
+#: org.apache.isis.applib.fixturescripts.FixtureScript#localName
+msgid "Local Name"
+msgstr ""
+
+
 #: org.apache.isis.applib.fixturescripts.FixtureScript#lookup()
 #: org.apache.isis.applib.services.bookmark.BookmarkHolderActionContributions#lookup()
 msgid "Lookup"
 msgstr ""
 
 
+#: domainapp.dom.modules.simple.SimpleObject#name
 #: domainapp.dom.modules.simple.SimpleObjects#create(java.lang.String)
 #: domainapp.dom.modules.simple.SimpleObjects#findByName(java.lang.String)
 msgid "Name"
@@ -85,6 +105,11 @@ msgid "Object: {name}"
 msgstr ""
 
 
+#: domainapp.dom.app.homepage.HomePageViewModel#objects
+msgid "Objects"
+msgstr ""
+
+
 #: domainapp.fixture.DomainAppFixturesService#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
 #: org.apache.isis.applib.fixturescripts.FixtureScripts#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
 msgid "Parameters"
@@ -123,7 +148,6 @@ msgid "Run Fixture Script"
 msgstr ""
 
 
-#: domainapp.fixture.scenarios.RecreateSimpleObjects
 #: org.apache.isis.applib.fixturescripts.FixtureScript
 msgid "Script"
 msgstr ""
@@ -135,17 +159,32 @@ msgid "Script-specific parameters (if any).  The format depends on the script im
 msgstr ""
 
 
-#: domainapp.dom.modules.simple.SimpleObject#updateName()
-msgid "Update Name"
+#: domainapp.dom.modules.simple.SimpleObjects#title()
+msgid "Simple Objects"
+msgstr ""
+
+
+#: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#switchToReadingTranslations()
+msgid "Switch To Reading Translations"
+msgstr ""
+
+
+#: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#switchToWritingTranslations()
+msgid "Switch To Writing Translations"
 msgstr ""
 
 
-#: domainapp.fixture.scenarios.RecreateSimpleObjects#withDiscoverability()
-#: org.apache.isis.applib.fixturescripts.FixtureScript#withDiscoverability()
-msgid "With Discoverability"
+#: org.apache.isis.applib.fixturescripts.FixtureScript#type
+msgid "Type"
 msgstr ""
 
 
+#: domainapp.dom.modules.simple.SimpleObject#updateName()
+msgid "Update Name"
+msgstr ""
+
+
+
 
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/ee64b291/example/archetype/simpleapp/src/test/resources/projects/basic/archetype.properties
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/test/resources/projects/basic/archetype.properties b/example/archetype/simpleapp/src/test/resources/projects/basic/archetype.properties
index 78c7aae..345f323 100644
--- a/example/archetype/simpleapp/src/test/resources/projects/basic/archetype.properties
+++ b/example/archetype/simpleapp/src/test/resources/projects/basic/archetype.properties
@@ -1,4 +1,4 @@
-#Thu Mar 12 12:32:07 GMT 2015
+#Sat Mar 21 11:05:38 GMT 2015
 package=it.pkg
 version=0.1-SNAPSHOT
 groupId=archetype.it


[2/3] isis git commit: ISIS-1104: change to PoReader so that does not log WARN if there are no translations for specified locale.

Posted by da...@apache.org.
ISIS-1104: change to PoReader so that does not log WARN if there are no translations for specified locale.

in addition:
- don't contribute actions or associations to value types such as java.lang.String (were appearing in translations)
- marked certain methods of FixtureScript and TranslatableString as @Programmatic so that they don't turn up in translations
- updated translations.po for simpleapp
- partial translations for ES, NL for simpleapp


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/c3ed13d2
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/c3ed13d2
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/c3ed13d2

Branch: refs/heads/master
Commit: c3ed13d2bbf68f305f84f1b227a7865a0e6aa881
Parents: 67ce86b
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sat Mar 21 11:05:12 2015 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Sat Mar 21 11:05:12 2015 +0000

----------------------------------------------------------------------
 .../applib/fixturescripts/FixtureScript.java    |  5 +-
 .../services/i18n/TranslatableString.java       |  2 +
 .../specimpl/ObjectSpecificationAbstract.java   |  2 +-
 .../core/runtime/services/i18n/po/PoReader.java | 42 ++++++++--
 .../services/TranslationsResolverWicket.java    |  2 +-
 .../dom/modules/simple/SimpleObjects.java       |  7 ++
 .../modules/simple/SimpleObjectsIntegTest.java  | 44 +++++++++--
 .../src/main/webapp/WEB-INF/translations-en.po  | 82 ++++++++++----------
 .../src/main/webapp/WEB-INF/translations-es.po  | 20 ++---
 .../src/main/webapp/WEB-INF/translations-nl.po  | 20 ++---
 .../src/main/webapp/WEB-INF/translations.po     | 20 ++---
 11 files changed, 157 insertions(+), 89 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/c3ed13d2/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java
index 99a3d1b..35a5661 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java
@@ -188,10 +188,11 @@ public abstract class FixtureScript
     /**
      * Path of the parent of this script (if any), with trailing {@value #PATH_SEPARATOR}.
      */
-    @PropertyLayout(hidden = Where.EVERYWHERE)
+    @Programmatic
     public String getParentPath() {
         return parentPath;
     }
+    @Programmatic
     public void setParentPath(final String parentPath) {
         this.parentPath = parentPath;
     }
@@ -233,6 +234,8 @@ public abstract class FixtureScript
     public boolean isDiscoverable() {
         return discoverability == Discoverability.DISCOVERABLE;
     }
+
+    @Programmatic
     public FixtureScript withDiscoverability(final Discoverability discoverability) {
         this.discoverability = discoverability;
         return this;

http://git-wip-us.apache.org/repos/asf/isis/blob/c3ed13d2/core/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslatableString.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslatableString.java b/core/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslatableString.java
index ec328dd..2d473c6 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslatableString.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslatableString.java
@@ -24,6 +24,7 @@ import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import com.google.common.collect.Lists;
+import org.apache.isis.applib.annotation.Programmatic;
 
 public final class TranslatableString {
 
@@ -177,6 +178,7 @@ public final class TranslatableString {
      * @param context
      * @return
      */
+    @Programmatic
     public String translate(final TranslationService translationService, final String context) {
         final String translatedText =
                 !isPluralForm()

http://git-wip-us.apache.org/repos/asf/isis/blob/c3ed13d2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index 7de5520..040de6b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -926,7 +926,7 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
     // //////////////////////////////////////////////////////////////////////
 
     private List<ObjectAssociation> createContributeeAssociations() {
-        if (isService()) {
+        if (isService() || isValue()) {
             return Collections.emptyList();
         }
         

http://git-wip-us.apache.org/repos/asf/isis/blob/c3ed13d2/core/runtime/src/main/java/org/apache/isis/core/runtime/services/i18n/po/PoReader.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/i18n/po/PoReader.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/i18n/po/PoReader.java
index 3054965..cc91ac4 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/i18n/po/PoReader.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/i18n/po/PoReader.java
@@ -27,17 +27,18 @@ import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.apache.isis.applib.services.i18n.LocaleProvider;
 import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.applib.services.i18n.TranslationsResolver;
 
 class PoReader extends PoAbstract {
 
-    public static final String LOCATION_BASE_URL = "isis.services.translation.po.locationBaseUrl";
     public static final String DASH = "-";
     public static final String UNDERSCORE = "_";
     public static Logger LOG = LoggerFactory.getLogger(PoReader.class);
 
     private final Map<Locale, Map<ContextAndMsgId, String>> translationByKeyByLocale = Maps.newHashMap();
+    private final Map<Locale, Boolean> usesFallbackByLocale = Maps.newHashMap();
 
     /**
      * The basename of the translations file, hard-coded to <tt>translations</tt>.
@@ -54,11 +55,18 @@ class PoReader extends PoAbstract {
      * </p>
      */
     private final String basename = "translations";
+    private final TranslationsResolver translationsResolver;
+    private final LocaleProvider localeProvider;
 
     private List<String> fallback;
 
     public PoReader(final TranslationServicePo translationServicePo) {
         super(translationServicePo, TranslationService.Mode.READ);
+        translationsResolver = translationServicePo.getTranslationsResolver();
+        if(translationsResolver == null) {
+            LOG.warn("No translationsResolver available");
+        }
+        localeProvider = translationServicePo.getLocaleProvider();
     }
 
     //region > init, shutdown
@@ -69,7 +77,7 @@ class PoReader extends PoAbstract {
     void init() {
         fallback = readUrl(basename + ".po");
         if(fallback == null) {
-            LOG.warn("No fallback translations found");
+            LOG.info("No fallback translations found; i18n is in effect disabled for this application");
             fallback = Collections.emptyList();
         }
     }
@@ -80,6 +88,10 @@ class PoReader extends PoAbstract {
     //endregion
 
     public String translate(final String context, final String msgId) {
+        if(translationsResolver == null) {
+            // already logged as WARN (in constructor) if null.
+            return msgId;
+        }
         return translate(context, msgId, ContextAndMsgId.Type.REGULAR);
     }
 
@@ -101,6 +113,7 @@ class PoReader extends PoAbstract {
 
     void clearCache() {
         translationByKeyByLocale.clear();
+        usesFallbackByLocale.clear();
         init();
     }
 
@@ -109,7 +122,7 @@ class PoReader extends PoAbstract {
 
         final Locale targetLocale;
         try {
-            targetLocale = translationServicePo.getLocaleProvider().getLocale();
+            targetLocale = localeProvider.getLocale();
             if(targetLocale == null) {
                 // eg if request from RO viewer and the (default) LocaleProviderWicket is being used.
                 return msgId;
@@ -119,23 +132,34 @@ class PoReader extends PoAbstract {
             return msgId;
         }
 
+
         final Map<ContextAndMsgId, String> translationsByKey = readAndCacheTranslationsIfRequired(targetLocale);
 
+        // search for translation with a context
         final ContextAndMsgId key = new ContextAndMsgId(context, msgId, type);
         final String translation = lookupTranslation(translationsByKey, key);
         if (!Strings.isNullOrEmpty(translation)) {
             return translation;
         }
 
+        // else search for translation without a context
         final ContextAndMsgId keyNoContext = new ContextAndMsgId("", msgId, type);
         final String translationNoContext = lookupTranslation(translationsByKey, keyNoContext);
         if (!Strings.isNullOrEmpty(translationNoContext)) {
             return translationNoContext;
         }
 
-        if(translation == null && translationNoContext == null) {
+        // to avoid chattiness in the log, we only log if there are ANY translations at all for the target locale.
+        // the algorithm for searching for translations looks for:
+        // 1. language_country
+        // 2. language
+        // 3. fallback
+        // so this message is only ever displayed if the locale isn't using fallback (ie a translation is genuinely missing)
+        final Boolean usesFallback = usesFallbackByLocale.get(targetLocale);
+        if(!usesFallback) {
             LOG.warn("No translation found for: " + key);
         }
+
         return msgId;
     }
 
@@ -174,12 +198,18 @@ class PoReader extends PoAbstract {
     protected List<String> readPo(final Locale locale) {
         final List<String> lines = readPoElseNull(locale);
         if(lines != null) {
+            usesFallbackByLocale.put(locale, false);
             return lines;
         }
+
+        // this is only ever logged the first time that a user using this particular locale is encountered
         LOG.warn("Could not locate translations for locale: " + locale + ", using fallback");
+
+        usesFallbackByLocale.put(locale, true);
         return fallback;
     }
 
+
     private List<String> readPoElseNull(final Locale locale) {
         final String country = locale.getCountry().toUpperCase(Locale.ROOT);
         final String language = locale.getLanguage().toLowerCase(Locale.ROOT);
@@ -206,10 +236,6 @@ class PoReader extends PoAbstract {
     }
 
     private List<String> readUrl(final String candidate) {
-        final TranslationsResolver translationsResolver = translationServicePo.getTranslationsResolver();
-        if(translationsResolver == null) {
-            return null;
-        }
         return translationsResolver.readLines(candidate);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/c3ed13d2/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/TranslationsResolverWicket.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/TranslationsResolverWicket.java b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/TranslationsResolverWicket.java
index e6045a3..0cf5e5a 100644
--- a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/TranslationsResolverWicket.java
+++ b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/TranslationsResolverWicket.java
@@ -84,7 +84,7 @@ public class TranslationsResolverWicket implements TranslationsResolver {
         return getIsisWicketApplication().getServletContext();
     }
 
-    private static Pattern nonEmpty = Pattern.compile("^(#:|msgid|msgstr).+$");
+    private static final Pattern nonEmpty = Pattern.compile("^(#:|msgid|msgstr).+$");
     private static List<String> readLines(final URL url) throws IOException {
         if(url == null) {
             return null;

http://git-wip-us.apache.org/repos/asf/isis/blob/c3ed13d2/example/application/simpleapp/dom/src/main/java/domainapp/dom/modules/simple/SimpleObjects.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/dom/src/main/java/domainapp/dom/modules/simple/SimpleObjects.java b/example/application/simpleapp/dom/src/main/java/domainapp/dom/modules/simple/SimpleObjects.java
index 7674717..d0841ae 100644
--- a/example/application/simpleapp/dom/src/main/java/domainapp/dom/modules/simple/SimpleObjects.java
+++ b/example/application/simpleapp/dom/src/main/java/domainapp/dom/modules/simple/SimpleObjects.java
@@ -31,11 +31,18 @@ import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.query.QueryDefault;
 import org.apache.isis.applib.services.eventbus.ActionDomainEvent;
+import org.apache.isis.applib.services.i18n.TranslatableString;
 
 @DomainService(repositoryFor = SimpleObject.class)
 @DomainServiceLayout(menuOrder = "10")
 public class SimpleObjects {
 
+    //region > title
+    public TranslatableString title() {
+        return TranslatableString.tr("Simple Objects");
+    }
+    //endregion
+
     //region > listAll (action)
     @Action(
             semantics = SemanticsOf.SAFE

http://git-wip-us.apache.org/repos/asf/isis/blob/c3ed13d2/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectsIntegTest.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectsIntegTest.java b/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectsIntegTest.java
index 4a6e71d..04bbbd7 100644
--- a/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectsIntegTest.java
+++ b/example/application/simpleapp/integtests/src/test/java/domainapp/integtests/tests/modules/simple/SimpleObjectsIntegTest.java
@@ -18,12 +18,6 @@
  */
 package domainapp.integtests.tests.modules.simple;
 
-import domainapp.dom.modules.simple.SimpleObject;
-import domainapp.dom.modules.simple.SimpleObjects;
-import domainapp.fixture.modules.simple.SimpleObjectsTearDown;
-import domainapp.fixture.scenarios.RecreateSimpleObjects;
-import domainapp.integtests.tests.SimpleAppIntegTest;
-
 import java.sql.SQLIntegrityConstraintViolationException;
 import java.util.List;
 import javax.inject.Inject;
@@ -34,9 +28,15 @@ import org.hamcrest.TypeSafeMatcher;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
+import org.apache.isis.applib.DomainObjectContainer;
 import org.apache.isis.applib.fixturescripts.FixtureScript;
 import org.apache.isis.applib.fixturescripts.FixtureScripts;
-
+import domainapp.dom.modules.simple.SimpleObject;
+import domainapp.dom.modules.simple.SimpleObjects;
+import domainapp.fixture.modules.simple.SimpleObjectsTearDown;
+import domainapp.fixture.scenarios.RecreateSimpleObjects;
+import domainapp.integtests.tests.SimpleAppIntegTest;
+import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 
@@ -49,6 +49,36 @@ public class SimpleObjectsIntegTest extends SimpleAppIntegTest {
     FixtureScripts fixtureScripts;
     @Inject
     SimpleObjects simpleObjects;
+    @Inject
+    DomainObjectContainer container;
+
+    public static class Title extends SimpleObjectsIntegTest {
+
+        @Test
+        public void happyCase() throws Exception {
+
+            // when
+            final String title = container.titleOf(wrap(simpleObjects));
+
+            // then
+            assertThat(title, equalTo("Simple Objects"));
+        }
+
+        @Test
+        public void whenNone() throws Exception {
+
+            // given
+            FixtureScript fs = new SimpleObjectsTearDown();
+            fixtureScripts.runFixtureScript(fs, null);
+            nextTransaction();
+
+            // when
+            final List<SimpleObject> all = wrap(simpleObjects).listAll();
+
+            // then
+            assertThat(all.size(), is(0));
+        }
+    }
 
     public static class ListAll extends SimpleObjectsIntegTest {
 

http://git-wip-us.apache.org/repos/asf/isis/blob/c3ed13d2/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-en.po
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-en.po b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-en.po
index b6aa415..6f5a4a4 100644
--- a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-en.po
+++ b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-en.po
@@ -10,179 +10,179 @@
 #     /WEB-INF/translations-fr.po
 #     /WEB-INF/translations.po
 #
+# If the app uses TranslatableString (eg for internationalized validation
+# messages), or if the app calls the TranslationService directly, then ensure
+# that all text to be translated has been captured by running a full
+# integration test suite that exercises all relevant behaviour
+#
 ##############################################################################
 
 #: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#downloadTranslations(java.lang.String)
 msgid ".pot file name"
-msgstr ""
+msgstr ".pot file name"
 
 
 #: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#resetTranslationCache()
 msgid "Clear translation cache"
-msgstr ""
+msgstr "Clear translation cache"
 
 
 #: domainapp.dom.modules.simple.SimpleObjects#create()
 msgid "Create"
-msgstr ""
+msgstr "Create"
 
 
 #: org.apache.isis.applib.fixturescripts.FixtureScript#discoverable
 msgid "Discoverable"
-msgstr ""
+msgstr "Discoverable"
 
 
 #: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#downloadTranslations()
 msgid "Download Translations"
-msgstr ""
+msgstr "Download Translations"
 
 
 #: domainapp.dom.modules.simple.SimpleObject#updateName()
 msgid "Exclamation mark is not allowed"
-msgstr ""
+msgstr "Exclamation mark is not allowed"
 
 
 #: domainapp.dom.modules.simple.SimpleObjects#findByName()
-#: java.lang.String#findByName()
 msgid "Find By Name"
-msgstr ""
+msgstr "Find By Name"
 
 
 #: org.apache.isis.applib.fixturescripts.FixtureResult#fixtureScriptClassName
 msgid "Fixture script"
-msgstr ""
+msgstr "Fixture script"
 
 
 #: org.apache.isis.applib.fixturescripts.FixtureScript#friendlyName
 msgid "Friendly Name"
-msgstr ""
+msgstr "Friendly Name"
 
 
 #: domainapp.dom.app.homepage.HomePageService#homePage()
 msgid "Home Page"
-msgstr ""
+msgstr "Home Page"
 
 
 #: domainapp.dom.modules.simple.SimpleObjects#listAll()
 msgid "List All"
-msgstr ""
+msgstr "List All"
 
 
 #: org.apache.isis.applib.fixturescripts.FixtureScript#localName
 msgid "Local Name"
-msgstr ""
+msgstr "Local Name"
 
 
 #: org.apache.isis.applib.fixturescripts.FixtureScript#lookup()
 #: org.apache.isis.applib.services.bookmark.BookmarkHolderActionContributions#lookup()
 msgid "Lookup"
-msgstr ""
+msgstr "Lookup"
 
 
 #: domainapp.dom.modules.simple.SimpleObject#name
 #: domainapp.dom.modules.simple.SimpleObjects#create(java.lang.String)
 #: domainapp.dom.modules.simple.SimpleObjects#findByName(java.lang.String)
 msgid "Name"
-msgstr ""
+msgstr "Name"
 
 
 #: domainapp.dom.modules.simple.SimpleObject#updateName(java.lang.String)
 msgid "New name"
-msgstr ""
+msgstr "New name"
 
 
 #: org.apache.isis.applib.services.bookmark.BookmarkHolderAssociationContributions#object()
 msgid "Object"
-msgstr ""
+msgstr "Object"
 
 
 #: domainapp.dom.modules.simple.SimpleObject#title()
 msgid "Object: {name}"
-msgstr ""
+msgstr "Object: {name}"
 
 
 #: domainapp.dom.app.homepage.HomePageViewModel#objects
 msgid "Objects"
-msgstr ""
+msgstr "Objects"
 
 
 #: domainapp.fixture.DomainAppFixturesService#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
 #: org.apache.isis.applib.fixturescripts.FixtureScripts#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
 msgid "Parameters"
-msgstr ""
-
-
-#: org.apache.isis.applib.fixturescripts.FixtureScript#parentPath
-msgid "Parent Path"
-msgstr ""
+msgstr "Parameters"
 
 
 #: domainapp.fixture.DomainAppFixturesService
 #: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu
 msgid "Prototyping"
-msgstr ""
+msgstr "Prototyping"
 
 
 #: domainapp.fixture.DomainAppFixturesService#recreateObjectsAndReturnFirst()
 msgid "Recreate Objects And Return First"
-msgstr ""
+msgstr "Recreate Objects And Return First"
 
 
 #: org.apache.isis.applib.fixturescripts.FixtureResult#object
 msgid "Result"
-msgstr ""
+msgstr "Result"
 
 
 #: org.apache.isis.applib.fixturescripts.FixtureResult#className
 msgid "Result class"
-msgstr ""
+msgstr "Result class"
 
 
 #: org.apache.isis.applib.fixturescripts.FixtureResult#key
 msgid "Result key"
-msgstr ""
+msgstr "Result key"
 
 
 #: domainapp.fixture.DomainAppFixturesService#runFixtureScript()
 #: org.apache.isis.applib.fixturescripts.FixtureScripts#runFixtureScript()
 msgid "Run Fixture Script"
-msgstr ""
+msgstr "Run Fixture Script"
 
 
 #: org.apache.isis.applib.fixturescripts.FixtureScript
 msgid "Script"
-msgstr ""
+msgstr "Script"
 
 
 #: domainapp.fixture.DomainAppFixturesService#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
 #: org.apache.isis.applib.fixturescripts.FixtureScripts#runFixtureScript(org.apache.isis.applib.fixturescripts.FixtureScript,java.lang.String)
 msgid "Script-specific parameters (if any).  The format depends on the script implementation (eg key=value, CSV, JSON, XML etc)"
-msgstr ""
+msgstr "Script-specific parameters (if any).  The format depends on the script implementation (eg key=value, CSV, JSON, XML etc)"
+
+
+#: domainapp.dom.modules.simple.SimpleObjects#title()
+msgid "Simple Objects"
+msgstr "Simple Objects"
 
 
 #: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#switchToReadingTranslations()
 msgid "Switch To Reading Translations"
-msgstr ""
+msgstr "Switch To Reading Translations"
 
 
 #: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#switchToWritingTranslations()
 msgid "Switch To Writing Translations"
-msgstr ""
+msgstr "Switch To Writing Translations"
 
 
 #: org.apache.isis.applib.fixturescripts.FixtureScript#type
 msgid "Type"
-msgstr ""
+msgstr "Type"
 
 
 #: domainapp.dom.modules.simple.SimpleObject#updateName()
 msgid "Update Name"
-msgstr ""
-
+msgstr "Update Name"
 
-#: org.apache.isis.applib.fixturescripts.FixtureScript#withDiscoverability()
-msgid "With Discoverability"
-msgstr ""
 
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/c3ed13d2/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-es.po
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-es.po b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-es.po
index 40c24f0..92b8bdb 100644
--- a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-es.po
+++ b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-es.po
@@ -10,6 +10,11 @@
 #     /WEB-INF/translations-fr.po
 #     /WEB-INF/translations.po
 #
+# If the app uses TranslatableString (eg for internationalized validation
+# messages), or if the app calls the TranslationService directly, then ensure
+# that all text to be translated has been captured by running a full
+# integration test suite that exercises all relevant behaviour
+#
 ##############################################################################
 
 #: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#downloadTranslations(java.lang.String)
@@ -43,7 +48,6 @@ msgstr ""
 
 
 #: domainapp.dom.modules.simple.SimpleObjects#findByName()
-#: java.lang.String#findByName()
 msgid "Find By Name"
 msgstr "Buscar por Nombre"
 
@@ -112,11 +116,6 @@ msgid "Parameters"
 msgstr ""
 
 
-#: org.apache.isis.applib.fixturescripts.FixtureScript#parentPath
-msgid "Parent Path"
-msgstr ""
-
-
 #: domainapp.fixture.DomainAppFixturesService
 #: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu
 msgid "Prototyping"
@@ -160,6 +159,11 @@ msgid "Script-specific parameters (if any).  The format depends on the script im
 msgstr ""
 
 
+#: domainapp.dom.modules.simple.SimpleObjects#title()
+msgid "Simple Objects"
+msgstr "Objetos básicos"
+
+
 #: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#switchToReadingTranslations()
 msgid "Switch To Reading Translations"
 msgstr ""
@@ -180,10 +184,6 @@ msgid "Update Name"
 msgstr "Nombre de la Actualización"
 
 
-#: org.apache.isis.applib.fixturescripts.FixtureScript#withDiscoverability()
-msgid "With Discoverability"
-msgstr ""
-
 
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/c3ed13d2/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-nl.po
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-nl.po b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-nl.po
index db50ca5..68c6776 100644
--- a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-nl.po
+++ b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-nl.po
@@ -10,6 +10,11 @@
 #     /WEB-INF/translations-fr.po
 #     /WEB-INF/translations.po
 #
+# If the app uses TranslatableString (eg for internationalized validation
+# messages), or if the app calls the TranslationService directly, then ensure
+# that all text to be translated has been captured by running a full
+# integration test suite that exercises all relevant behaviour
+#
 ##############################################################################
 
 #: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#downloadTranslations(java.lang.String)
@@ -43,7 +48,6 @@ msgstr ""
 
 
 #: domainapp.dom.modules.simple.SimpleObjects#findByName()
-#: java.lang.String#findByName()
 msgid "Find By Name"
 msgstr "Zoek op Naam"
 
@@ -112,11 +116,6 @@ msgid "Parameters"
 msgstr ""
 
 
-#: org.apache.isis.applib.fixturescripts.FixtureScript#parentPath
-msgid "Parent Path"
-msgstr ""
-
-
 #: domainapp.fixture.DomainAppFixturesService
 #: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu
 msgid "Prototyping"
@@ -160,6 +159,11 @@ msgid "Script-specific parameters (if any).  The format depends on the script im
 msgstr ""
 
 
+#: domainapp.dom.modules.simple.SimpleObjects#title()
+msgid "Simple Objects"
+msgstr "Eenvoudige Objecten"
+
+
 #: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#switchToReadingTranslations()
 msgid "Switch To Reading Translations"
 msgstr ""
@@ -180,10 +184,6 @@ msgid "Update Name"
 msgstr "Updaten Naam"
 
 
-#: org.apache.isis.applib.fixturescripts.FixtureScript#withDiscoverability()
-msgid "With Discoverability"
-msgstr ""
-
 
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/c3ed13d2/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations.po
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations.po b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations.po
index b6aa415..181c68c 100644
--- a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations.po
+++ b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations.po
@@ -10,6 +10,11 @@
 #     /WEB-INF/translations-fr.po
 #     /WEB-INF/translations.po
 #
+# If the app uses TranslatableString (eg for internationalized validation
+# messages), or if the app calls the TranslationService directly, then ensure
+# that all text to be translated has been captured by running a full
+# integration test suite that exercises all relevant behaviour
+#
 ##############################################################################
 
 #: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#downloadTranslations(java.lang.String)
@@ -43,7 +48,6 @@ msgstr ""
 
 
 #: domainapp.dom.modules.simple.SimpleObjects#findByName()
-#: java.lang.String#findByName()
 msgid "Find By Name"
 msgstr ""
 
@@ -112,11 +116,6 @@ msgid "Parameters"
 msgstr ""
 
 
-#: org.apache.isis.applib.fixturescripts.FixtureScript#parentPath
-msgid "Parent Path"
-msgstr ""
-
-
 #: domainapp.fixture.DomainAppFixturesService
 #: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu
 msgid "Prototyping"
@@ -160,6 +159,11 @@ msgid "Script-specific parameters (if any).  The format depends on the script im
 msgstr ""
 
 
+#: domainapp.dom.modules.simple.SimpleObjects#title()
+msgid "Simple Objects"
+msgstr ""
+
+
 #: org.apache.isis.core.runtime.services.i18n.po.TranslationServicePoMenu#switchToReadingTranslations()
 msgid "Switch To Reading Translations"
 msgstr ""
@@ -180,10 +184,6 @@ msgid "Update Name"
 msgstr ""
 
 
-#: org.apache.isis.applib.fixturescripts.FixtureScript#withDiscoverability()
-msgid "With Discoverability"
-msgstr ""
-