diff --git a/pom.xml b/pom.xml
index c050335a39..f65eb4178b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -727,6 +727,14 @@
jcabi-mysql-maven-plugin0.4
+
+ org.codehaus.gmaven
+ gmaven-plugin
+ 1.5
+
+ 2.0
+
+
diff --git a/zanata-war/.gitignore b/zanata-war/.gitignore
new file mode 100644
index 0000000000..7b94252c6c
--- /dev/null
+++ b/zanata-war/.gitignore
@@ -0,0 +1 @@
+.zanata-cache
diff --git a/zanata-war/pom.xml b/zanata-war/pom.xml
index 3c78059d48..9a9e02b918 100644
--- a/zanata-war/pom.xml
+++ b/zanata-war/pom.xml
@@ -418,6 +418,19 @@
+
+
+ org.zanata
+
+ .
+ .
+ src/main/resources/org/zanata/webtrans/client/resources/*.properties
+ src/main/resources/org/zanata/webtrans/client/resources/*_default.properties
+
+ zanata-maven-plugin
+ 3.3.0-SNAPSHOT
+
+
maven-surefire-plugin
@@ -1031,6 +1044,64 @@
+
+ gwt-i18n
+
+
+ gwt-i18n
+
+
+
+
+
+ org.codehaus.mojo
+ gwt-maven-plugin
+
+
+ generate-i18n
+
+ compile
+
+
+ generate-test-resources
+
+ org.zanata.webtrans.ApplicationI18n
+ ${project.build.directory}/gwt-extra
+ true
+
+
+
+
+
+ org.codehaus.gmaven
+ gmaven-plugin
+
+
+
+
+
+
+
+ generate-test-resources
+
+ execute
+
+
+
+
+ com.google.guava
+ guava
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zanata-war/src/etc/CopyGWTDefaultProperties.groovy b/zanata-war/src/etc/CopyGWTDefaultProperties.groovy
new file mode 100644
index 0000000000..fc78287ea9
--- /dev/null
+++ b/zanata-war/src/etc/CopyGWTDefaultProperties.groovy
@@ -0,0 +1,29 @@
+import com.google.common.io.Files
+
+// This script will copy GWT generated *_default.properties source file to
+// follow java convention. i.e. without the _default in file name.
+// It's used in zanata.xml as command hook
+File pomBase = pom.basedir
+def baseDir = new File(pomBase.absolutePath + "/src/main/resources/org/zanata/webtrans/client/resources/")
+
+assert baseDir.isDirectory()
+
+def nameFilter = { dir, name ->
+ name.endsWith("_default.properties")
+} as FilenameFilter
+
+def properties = baseDir.listFiles(nameFilter)
+
+
+if (!properties) {
+ log.info "no *_default.properties found. quit."
+ return
+}
+
+properties.each {
+ // we need a no locale file name for java properties file convention
+ def noLocaleFileName = it.name.replace("_default", "")
+ def noLocaleDestFile = new File(baseDir, noLocaleFileName)
+ log.debug " copy $it.name to: $noLocaleDestFile"
+ Files.copy(it, noLocaleDestFile)
+}
\ No newline at end of file
diff --git a/zanata-war/src/etc/RemoveJavaDefaultProperties.groovy b/zanata-war/src/etc/RemoveJavaDefaultProperties.groovy
new file mode 100644
index 0000000000..07fb96abd5
--- /dev/null
+++ b/zanata-war/src/etc/RemoveJavaDefaultProperties.groovy
@@ -0,0 +1,19 @@
+// This script will remove java default locale properties file so that GWT can compile.
+// GWT only expect *_default.properties as default locale file.
+// It's used in zanata.xml as command hook
+
+File pomBase = pom.basedir
+def baseDir = new File(pomBase.absolutePath + "/src/main/resources/org/zanata/webtrans/client/resources/")
+
+assert baseDir.isDirectory()
+
+// find properties file without underscore
+def nameFilter = { dir, name ->
+ !name.contains("_")
+} as FilenameFilter
+
+def properties = baseDir.listFiles(nameFilter)
+
+properties.each {
+ it.delete()
+}
diff --git a/zanata-war/src/etc/SyncGWTI18NProperties.groovy b/zanata-war/src/etc/SyncGWTI18NProperties.groovy
new file mode 100644
index 0000000000..062acbb286
--- /dev/null
+++ b/zanata-war/src/etc/SyncGWTI18NProperties.groovy
@@ -0,0 +1,54 @@
+import com.google.common.io.Files
+
+// This script will be executed by gmaven plugin.
+// Although gmaven supports inline scripting in pom, it will escape / in the
+// regex and the script therefore won't work.
+log.info "===== Synchronize GWT generated properties files ====="
+
+def baseDir = new File(project.build.directory + "/gwt-extra/webtrans")
+
+assert baseDir.isDirectory()
+
+def nameFilter = { dir, name ->
+ name.endsWith(".properties")
+} as FilenameFilter
+
+def properties = baseDir.listFiles(nameFilter)
+
+
+if (!properties) {
+ log.info "no properties found. quit."
+ return
+}
+// scrip off the file name part to get packge name
+def packageName = properties[0].name.replaceAll(/\.\w+\.properties/, "")
+def packagePath = packageName.replaceAll(/\./, "/")
+def destDir = new File(pom.basedir.absolutePath + "/src/main/resources/$packagePath")
+destDir.mkdirs()
+
+int sourceCount = 0
+int targetCount = 0
+
+properties.each {
+ def fileName = (it.name - "$packageName.")
+ def destFile = new File(destDir, fileName)
+ if (it.name.endsWith("_default.properties")) {
+ log.debug " * found source: $it.name"
+ // we always copy over source file
+ log.debug " copy over to: $destFile"
+ // copy the file with _default to make GWT happy
+ Files.copy(it, destFile)
+ sourceCount++
+ } else {
+ log.debug " * found target: $it.name"
+ // we ALWAYS copy generated target skeleton to make sure target is in sync if source has changed.
+ // It rely on zanata's merge auto feature.
+ // Merge type import will override everything!!
+ log.debug " copy over to :$destFile"
+ Files.copy(it, destFile);
+ targetCount++
+ }
+}
+
+log.info "Copied $sourceCount source(s) and $targetCount target(s) in $baseDir"
+log.info "===== Synchronize GWT generated properties files ====="
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/Application.gwt.xml b/zanata-war/src/main/java/org/zanata/webtrans/Application.gwt.xml
index 6cbce0723a..fa892f85a2 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/Application.gwt.xml
+++ b/zanata-war/src/main/java/org/zanata/webtrans/Application.gwt.xml
@@ -49,6 +49,8 @@
-
+
+
+
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/ApplicationI18n.gwt.xml b/zanata-war/src/main/java/org/zanata/webtrans/ApplicationI18n.gwt.xml
new file mode 100644
index 0000000000..665836212d
--- /dev/null
+++ b/zanata-war/src/main/java/org/zanata/webtrans/ApplicationI18n.gwt.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/EnumMessages_default.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/EnumMessages_default.properties
new file mode 100644
index 0000000000..06dd13ad79
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/EnumMessages_default.properties
@@ -0,0 +1,34 @@
+# Generated from org.zanata.webtrans.client.resources.EnumMessages
+# for locale default
+
+approvedStatus=Translated
+
+contentStateApproved=Approved
+
+contentStateFuzzy=Fuzzy
+
+contentStateRejected=Rejected
+
+contentStateTranslated=Translated
+
+contentStateUnsaved=Unsaved
+
+contentStateUntranslated=Untranslated
+
+downgradeToFuzzy=Copy as Fuzzy
+
+ignoreDifference=Next Condition
+
+nextDraft=Next Fuzzy or Rejected
+
+nextIncomplete=Next Fuzzy/Rejected/Untranslated
+
+nextUntranslated=Next Untranslated
+
+rejectMerge=Don''t Copy
+
+searchTypeExact=Phrase
+
+searchTypeFuzzy=Fuzzy
+
+searchTypeRaw=Lucene
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/EnumMessages_en.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/EnumMessages_en.properties
new file mode 100644
index 0000000000..453f82f756
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/EnumMessages_en.properties
@@ -0,0 +1,34 @@
+# Generated from org.zanata.webtrans.client.resources.EnumMessages
+# for locale en
+
+approvedStatus=Translated
+
+contentStateApproved=Approved
+
+contentStateFuzzy=Fuzzy
+
+contentStateRejected=Rejected
+
+contentStateTranslated=Translated
+
+contentStateUnsaved=Unsaved
+
+contentStateUntranslated=Untranslated
+
+downgradeToFuzzy=Copy as Fuzzy
+
+ignoreDifference=Next Condition
+
+nextDraft=Next Fuzzy or Rejected
+
+nextIncomplete=Next Fuzzy/Rejected/Untranslated
+
+nextUntranslated=Next Untranslated
+
+rejectMerge=Don''t Copy
+
+searchTypeExact=Phrase
+
+searchTypeFuzzy=Fuzzy
+
+searchTypeRaw=Lucene
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/EnumMessages_ja.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/EnumMessages_ja.properties
new file mode 100644
index 0000000000..22ef45499e
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/EnumMessages_ja.properties
@@ -0,0 +1,34 @@
+# Generated from org.zanata.webtrans.client.resources.EnumMessages
+# for locale ja
+
+approvedStatus=Translated
+
+contentStateApproved=Approved
+
+contentStateFuzzy=Fuzzy
+
+contentStateRejected=Rejected
+
+contentStateTranslated=Translated
+
+contentStateUnsaved=Unsaved
+
+contentStateUntranslated=Untranslated
+
+downgradeToFuzzy=Copy as Fuzzy
+
+ignoreDifference=Next Condition
+
+nextDraft=Next Fuzzy or Rejected
+
+nextIncomplete=Next Fuzzy/Rejected/Untranslated
+
+nextUntranslated=Next Untranslated
+
+rejectMerge=Don''t Copy
+
+searchTypeExact=Phrase
+
+searchTypeFuzzy=Fuzzy
+
+searchTypeRaw=Lucene
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/EnumMessages_uk.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/EnumMessages_uk.properties
new file mode 100644
index 0000000000..1a2b083e49
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/EnumMessages_uk.properties
@@ -0,0 +1,34 @@
+# Generated from org.zanata.webtrans.client.resources.EnumMessages
+# for locale uk
+
+approvedStatus=Translated
+
+contentStateApproved=Approved
+
+contentStateFuzzy=Fuzzy
+
+contentStateRejected=Rejected
+
+contentStateTranslated=Translated
+
+contentStateUnsaved=Unsaved
+
+contentStateUntranslated=Untranslated
+
+downgradeToFuzzy=Copy as Fuzzy
+
+ignoreDifference=Next Condition
+
+nextDraft=Next Fuzzy or Rejected
+
+nextIncomplete=Next Fuzzy/Rejected/Untranslated
+
+nextUntranslated=Next Untranslated
+
+rejectMerge=Don''t Copy
+
+searchTypeExact=Phrase
+
+searchTypeFuzzy=Fuzzy
+
+searchTypeRaw=Lucene
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/EnumMessages_zh_Hant_TW.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/EnumMessages_zh_Hant_TW.properties
new file mode 100644
index 0000000000..ec22009a37
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/EnumMessages_zh_Hant_TW.properties
@@ -0,0 +1,34 @@
+# Generated from org.zanata.webtrans.client.resources.EnumMessages
+# for locale zh_Hant_TW
+
+approvedStatus=Translated
+
+contentStateApproved=Approved
+
+contentStateFuzzy=Fuzzy
+
+contentStateRejected=Rejected
+
+contentStateTranslated=Translated
+
+contentStateUnsaved=Unsaved
+
+contentStateUntranslated=Untranslated
+
+downgradeToFuzzy=Copy as Fuzzy
+
+ignoreDifference=Next Condition
+
+nextDraft=Next Fuzzy or Rejected
+
+nextIncomplete=Next Fuzzy/Rejected/Untranslated
+
+nextUntranslated=Next Untranslated
+
+rejectMerge=Don''t Copy
+
+searchTypeExact=Phrase
+
+searchTypeFuzzy=Fuzzy
+
+searchTypeRaw=Lucene
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/NavigationMessages_default.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/NavigationMessages_default.properties
new file mode 100644
index 0000000000..3786efd976
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/NavigationMessages_default.properties
@@ -0,0 +1,32 @@
+# Generated from org.zanata.webtrans.client.resources.NavigationMessages
+# for locale default
+
+# 0=actionName, 1=shortcut
+actionToolTip={0} ({1})
+
+firstEntry=First Entry
+
+lastEntry=Last Entry
+
+nextEntryShortcut=Alt+Down
+
+nextFuzzy=Next Fuzzy or Rejected
+
+nextFuzzyOrUntranslated=Next Fuzzy/Rejected/Untranslated
+
+nextFuzzyOrUntranslatedShortcut=Alt+PageDown
+
+nextUntranslated=Next Untranslated
+
+prevEntry=Prev Entry
+
+prevFuzzy=Prev Fuzzy or Rejected
+
+prevFuzzyOrUntranslated=Prev Fuzzy/Rejected/Untranslated
+
+prevFuzzyOrUntranslatedShortcut=Alt+PageUp
+
+prevUntranslated=Prev Untranslated
+
+# 0=comment
+sourceCommentLabel=Source comment\: {0}
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/NavigationMessages_en.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/NavigationMessages_en.properties
new file mode 100644
index 0000000000..aa6e9d6e16
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/NavigationMessages_en.properties
@@ -0,0 +1,32 @@
+# Generated from org.zanata.webtrans.client.resources.NavigationMessages
+# for locale en
+
+# 0=actionName, 1=shortcut
+actionToolTip={0} ({1})
+
+firstEntry=First Entry
+
+lastEntry=Last Entry
+
+nextEntryShortcut=Alt+Down
+
+nextFuzzy=Next Fuzzy or Rejected
+
+nextFuzzyOrUntranslated=Next Fuzzy/Rejected/Untranslated
+
+nextFuzzyOrUntranslatedShortcut=Alt+PageDown
+
+nextUntranslated=Next Untranslated
+
+prevEntry=Prev Entry
+
+prevFuzzy=Prev Fuzzy or Rejected
+
+prevFuzzyOrUntranslated=Prev Fuzzy/Rejected/Untranslated
+
+prevFuzzyOrUntranslatedShortcut=Alt+PageUp
+
+prevUntranslated=Prev Untranslated
+
+# 0=comment
+sourceCommentLabel=Source comment\: {0}
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/NavigationMessages_ja.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/NavigationMessages_ja.properties
new file mode 100644
index 0000000000..376bb67dd0
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/NavigationMessages_ja.properties
@@ -0,0 +1,32 @@
+# Generated from org.zanata.webtrans.client.resources.NavigationMessages
+# for locale ja
+
+# 0=actionName, 1=shortcut
+actionToolTip={0} ({1})
+
+firstEntry=First Entry
+
+lastEntry=Last Entry
+
+nextEntryShortcut=Alt+Down
+
+nextFuzzy=Next Fuzzy or Rejected
+
+nextFuzzyOrUntranslated=Next Fuzzy/Rejected/Untranslated
+
+nextFuzzyOrUntranslatedShortcut=Alt+PageDown
+
+nextUntranslated=Next Untranslated
+
+prevEntry=Prev Entry
+
+prevFuzzy=Prev Fuzzy or Rejected
+
+prevFuzzyOrUntranslated=Prev Fuzzy/Rejected/Untranslated
+
+prevFuzzyOrUntranslatedShortcut=Alt+PageUp
+
+prevUntranslated=Prev Untranslated
+
+# 0=comment
+sourceCommentLabel=Source comment\: {0}
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/NavigationMessages_uk.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/NavigationMessages_uk.properties
new file mode 100644
index 0000000000..b85e4e8464
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/NavigationMessages_uk.properties
@@ -0,0 +1,32 @@
+# Generated from org.zanata.webtrans.client.resources.NavigationMessages
+# for locale uk
+
+# 0=actionName, 1=shortcut
+actionToolTip={0} ({1})
+
+firstEntry=First Entry
+
+lastEntry=Last Entry
+
+nextEntryShortcut=Alt+Down
+
+nextFuzzy=Next Fuzzy or Rejected
+
+nextFuzzyOrUntranslated=Next Fuzzy/Rejected/Untranslated
+
+nextFuzzyOrUntranslatedShortcut=Alt+PageDown
+
+nextUntranslated=Next Untranslated
+
+prevEntry=Prev Entry
+
+prevFuzzy=Prev Fuzzy or Rejected
+
+prevFuzzyOrUntranslated=Prev Fuzzy/Rejected/Untranslated
+
+prevFuzzyOrUntranslatedShortcut=Alt+PageUp
+
+prevUntranslated=Prev Untranslated
+
+# 0=comment
+sourceCommentLabel=Source comment\: {0}
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/NavigationMessages_zh_Hant_TW.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/NavigationMessages_zh_Hant_TW.properties
new file mode 100644
index 0000000000..99ea465d3e
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/NavigationMessages_zh_Hant_TW.properties
@@ -0,0 +1,32 @@
+# Generated from org.zanata.webtrans.client.resources.NavigationMessages
+# for locale zh_Hant_TW
+
+# 0=actionName, 1=shortcut
+actionToolTip={0} ({1})
+
+firstEntry=First Entry
+
+lastEntry=Last Entry
+
+nextEntryShortcut=Alt+Down
+
+nextFuzzy=Next Fuzzy or Rejected
+
+nextFuzzyOrUntranslated=Next Fuzzy/Rejected/Untranslated
+
+nextFuzzyOrUntranslatedShortcut=Alt+PageDown
+
+nextUntranslated=Next Untranslated
+
+prevEntry=Prev Entry
+
+prevFuzzy=Prev Fuzzy or Rejected
+
+prevFuzzyOrUntranslated=Prev Fuzzy/Rejected/Untranslated
+
+prevFuzzyOrUntranslatedShortcut=Alt+PageUp
+
+prevUntranslated=Prev Untranslated
+
+# 0=comment
+sourceCommentLabel=Source comment\: {0}
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/RpcMessages_default.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/RpcMessages_default.properties
new file mode 100644
index 0000000000..329f722681
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/RpcMessages_default.properties
@@ -0,0 +1,6 @@
+# Generated from org.zanata.webtrans.client.resources.RpcMessages
+# for locale default
+
+dispatcherSetupFailed=Dispatcher not set up to delegate WorkspaceContext and Identity.
+
+noResponseFromServer=No response from server. Please refresh your page and make sure server is still up.
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/RpcMessages_en.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/RpcMessages_en.properties
new file mode 100644
index 0000000000..fb8807555d
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/RpcMessages_en.properties
@@ -0,0 +1,6 @@
+# Generated from org.zanata.webtrans.client.resources.RpcMessages
+# for locale en
+
+dispatcherSetupFailed=Dispatcher not set up to delegate WorkspaceContext and Identity.
+
+noResponseFromServer=No response from server. Please refresh your page and make sure server is still up.
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/RpcMessages_ja.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/RpcMessages_ja.properties
new file mode 100644
index 0000000000..a153fc156d
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/RpcMessages_ja.properties
@@ -0,0 +1,6 @@
+# Generated from org.zanata.webtrans.client.resources.RpcMessages
+# for locale ja
+
+dispatcherSetupFailed=Dispatcher not set up to delegate WorkspaceContext and Identity.
+
+noResponseFromServer=No response from server. Please refresh your page and make sure server is still up.
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/RpcMessages_uk.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/RpcMessages_uk.properties
new file mode 100644
index 0000000000..27589c6f23
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/RpcMessages_uk.properties
@@ -0,0 +1,6 @@
+# Generated from org.zanata.webtrans.client.resources.RpcMessages
+# for locale uk
+
+dispatcherSetupFailed=Dispatcher not set up to delegate WorkspaceContext and Identity.
+
+noResponseFromServer=No response from server. Please refresh your page and make sure server is still up.
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/RpcMessages_zh_Hant_TW.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/RpcMessages_zh_Hant_TW.properties
new file mode 100644
index 0000000000..19b6bf2ba8
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/RpcMessages_zh_Hant_TW.properties
@@ -0,0 +1,6 @@
+# Generated from org.zanata.webtrans.client.resources.RpcMessages
+# for locale zh_Hant_TW
+
+dispatcherSetupFailed=Dispatcher not set up to delegate WorkspaceContext and Identity.
+
+noResponseFromServer=No response from server. Please refresh your page and make sure server is still up.
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/TableEditorMessages_default.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/TableEditorMessages_default.properties
new file mode 100644
index 0000000000..f91fd0ac71
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/TableEditorMessages_default.properties
@@ -0,0 +1,92 @@
+# Generated from org.zanata.webtrans.client.resources.TableEditorMessages
+# for locale default
+
+cancel=Cancel
+
+cancelChanges=Cancel changes
+
+cancelFilter=Cancel filter
+
+comment=Comment
+
+copyFromSource=Copy message from source language.
+
+# 0=index
+copyFromTM=Copy from translation memory match result no.{0}
+
+discardChanges=Discard Changes
+
+dontShowThisAgain=Don''t show this warning again.
+
+editCancelShortcut=Cancel
+
+editSaveAsFuzzyShortcut=Save as Fuzzy (Ctrl+S)
+
+editSaveShortcut=Save as Translated (Ctrl+Enter)
+
+errorMessage=Error message
+
+history=History
+
+moveToNextRow=Move to next row
+
+moveToPreviousRow=Move to previous row
+
+nextDraft=Move to next Fuzzy or Rejected
+
+nextIncomplete=Move to next Fuzzy/Rejected/Untranslated
+
+nextUntranslated=Move to next Untranslated
+
+notifyCopied=Message has been copied to the target.
+
+notifyLoadFailed=Failed to load data from server
+
+# 0=id, 1=errorMessage
+notifyUpdateFailed=Save FAILED\: {0}, messages\: {1}
+
+# 0=rowIndex, 1=id
+notifyUpdateSaved=Row {0} (Id {1}) Saved
+
+notifyValidationError=Validation error - See validation message
+
+prevDraft=Move to prev Fuzzy or Rejected
+
+prevIncomplete=Move to prev Fuzzy/Rejected/Untranslated
+
+prevUntranslated=Move to prev Untranslated
+
+returnToEditor=Return to editor
+
+reviewAccept=Accept translation
+
+reviewReject=Reject translation
+
+saveAsApprovedDialogInfo1=For navigation only, please use\:
+
+saveAsApprovedDialogInfo2=ALT+Up or ALT+J\: Move to previous row
+
+saveAsApprovedDialogInfo3=ALT+Down or ALT+K\: Move to next row
+
+saveAsFuzzy=Save as Fuzzy
+
+saveAsTranslated=Save as Translated
+
+saveAsTranslatedDialogWarning1=Warning\! Saving a ''Fuzzy'' translation as ''Translated'' without changes.
+
+saveChangesConfirmationMessage=Save changes before filtering view?
+
+saving=Saving...
+
+# 0=rowIndex, 1=info
+transUnitDetailsHeadingWithInfo=\#{0}; {1}
+
+translation=Translation
+
+validationErrorMessage=You are trying to save an invalid translation
+
+# 0=warningCount (Plural Count), 1=errorCount (Plural Count)
+# - Default plural form
+validationNotificationHeading=Warnings\: {0}, Errors\: {1}
+# - plural form 'one': Count is 1
+validationNotificationHeading[one]=
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/TableEditorMessages_en.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/TableEditorMessages_en.properties
new file mode 100644
index 0000000000..70a6e3c16f
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/TableEditorMessages_en.properties
@@ -0,0 +1,89 @@
+# Generated from org.zanata.webtrans.client.resources.TableEditorMessages
+# for locale en
+
+cancel=Cancel
+
+cancelChanges=Cancel changes
+
+cancelFilter=Cancel filter
+
+comment=Comment
+
+copyFromSource=Copy message from source language.
+
+# 0=index
+copyFromTM=Copy from translation memory match result no.{0}
+
+discardChanges=Discard Changes
+
+dontShowThisAgain=Don''t show this warning again.
+
+editCancelShortcut=Cancel
+
+editSaveAsFuzzyShortcut=Save as Fuzzy (Ctrl+S)
+
+editSaveShortcut=Save as Translated (Ctrl+Enter)
+
+errorMessage=Error message
+
+history=History
+
+moveToNextRow=Move to next row
+
+moveToPreviousRow=Move to previous row
+
+nextDraft=Move to next Fuzzy or Rejected
+
+nextIncomplete=Move to next Fuzzy/Rejected/Untranslated
+
+nextUntranslated=Move to next Untranslated
+
+notifyCopied=Message has been copied to the target.
+
+notifyLoadFailed=Failed to load data from server
+
+# 0=id, 1=errorMessage
+notifyUpdateFailed=Save FAILED\: {0}, messages\: {1}
+
+# 0=rowIndex, 1=id
+notifyUpdateSaved=Row {0} (Id {1}) Saved
+
+notifyValidationError=Validation error - See validation message
+
+prevDraft=Move to prev Fuzzy or Rejected
+
+prevIncomplete=Move to prev Fuzzy/Rejected/Untranslated
+
+prevUntranslated=Move to prev Untranslated
+
+returnToEditor=Return to editor
+
+reviewAccept=Accept translation
+
+reviewReject=Reject translation
+
+saveAsApprovedDialogInfo1=For navigation only, please use\:
+
+saveAsApprovedDialogInfo2=ALT+Up or ALT+J\: Move to previous row
+
+saveAsApprovedDialogInfo3=ALT+Down or ALT+K\: Move to next row
+
+saveAsFuzzy=Save as Fuzzy
+
+saveAsTranslated=Save as Translated
+
+saveAsTranslatedDialogWarning1=Warning\! Saving a ''Fuzzy'' translation as ''Translated'' without changes.
+
+saveChangesConfirmationMessage=Save changes before filtering view?
+
+saving=Saving...
+
+# 0=rowIndex, 1=info
+transUnitDetailsHeadingWithInfo=\#{0}; {1}
+
+translation=Translation
+
+validationErrorMessage=You are trying to save an invalid translation
+
+# 0=warningCount (Plural Count), 1=errorCount (Plural Count)
+validationNotificationHeading=Warnings\: {0}, Errors\: {1}
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/TableEditorMessages_ja.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/TableEditorMessages_ja.properties
new file mode 100644
index 0000000000..55ccae3c38
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/TableEditorMessages_ja.properties
@@ -0,0 +1,90 @@
+# Generated from org.zanata.webtrans.client.resources.TableEditorMessages
+# for locale ja
+
+cancel=Cancel
+
+cancelChanges=Cancel changes
+
+cancelFilter=Cancel filter
+
+comment=Comment
+
+copyFromSource=Copy message from source language.
+
+# 0=index
+copyFromTM=Copy from translation memory match result no.{0}
+
+discardChanges=Discard Changes
+
+dontShowThisAgain=Don''t show this warning again.
+
+editCancelShortcut=Cancel
+
+editSaveAsFuzzyShortcut=Save as Fuzzy (Ctrl+S)
+
+editSaveShortcut=Save as Translated (Ctrl+Enter)
+
+errorMessage=Error message
+
+history=History
+
+moveToNextRow=Move to next row
+
+moveToPreviousRow=Move to previous row
+
+nextDraft=Move to next Fuzzy or Rejected
+
+nextIncomplete=Move to next Fuzzy/Rejected/Untranslated
+
+nextUntranslated=Move to next Untranslated
+
+notifyCopied=Message has been copied to the target.
+
+notifyLoadFailed=Failed to load data from server
+
+# 0=id, 1=errorMessage
+notifyUpdateFailed=Save FAILED\: {0}, messages\: {1}
+
+# 0=rowIndex, 1=id
+notifyUpdateSaved=Row {0} (Id {1}) Saved
+
+notifyValidationError=Validation error - See validation message
+
+prevDraft=Move to prev Fuzzy or Rejected
+
+prevIncomplete=Move to prev Fuzzy/Rejected/Untranslated
+
+prevUntranslated=Move to prev Untranslated
+
+returnToEditor=Return to editor
+
+reviewAccept=Accept translation
+
+reviewReject=Reject translation
+
+saveAsApprovedDialogInfo1=For navigation only, please use\:
+
+saveAsApprovedDialogInfo2=ALT+Up or ALT+J\: Move to previous row
+
+saveAsApprovedDialogInfo3=ALT+Down or ALT+K\: Move to next row
+
+saveAsFuzzy=Save as Fuzzy
+
+saveAsTranslated=Save as Translated
+
+saveAsTranslatedDialogWarning1=Warning\! Saving a ''Fuzzy'' translation as ''Translated'' without changes.
+
+saveChangesConfirmationMessage=Save changes before filtering view?
+
+saving=Saving...
+
+# 0=rowIndex, 1=info
+transUnitDetailsHeadingWithInfo=\#{0}; {1}
+
+translation=Translation
+
+validationErrorMessage=You are trying to save an invalid translation
+
+# 0=warningCount (Plural Count), 1=errorCount (Plural Count)
+# - Default plural form
+validationNotificationHeading=Warnings\: {0}, Errors\: {1}
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/TableEditorMessages_uk.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/TableEditorMessages_uk.properties
new file mode 100644
index 0000000000..49550906b7
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/TableEditorMessages_uk.properties
@@ -0,0 +1,94 @@
+# Generated from org.zanata.webtrans.client.resources.TableEditorMessages
+# for locale uk
+
+cancel=Cancel
+
+cancelChanges=Cancel changes
+
+cancelFilter=Cancel filter
+
+comment=Comment
+
+copyFromSource=Copy message from source language.
+
+# 0=index
+copyFromTM=Copy from translation memory match result no.{0}
+
+discardChanges=Discard Changes
+
+dontShowThisAgain=Don''t show this warning again.
+
+editCancelShortcut=Cancel
+
+editSaveAsFuzzyShortcut=Save as Fuzzy (Ctrl+S)
+
+editSaveShortcut=Save as Translated (Ctrl+Enter)
+
+errorMessage=Error message
+
+history=History
+
+moveToNextRow=Move to next row
+
+moveToPreviousRow=Move to previous row
+
+nextDraft=Move to next Fuzzy or Rejected
+
+nextIncomplete=Move to next Fuzzy/Rejected/Untranslated
+
+nextUntranslated=Move to next Untranslated
+
+notifyCopied=Message has been copied to the target.
+
+notifyLoadFailed=Failed to load data from server
+
+# 0=id, 1=errorMessage
+notifyUpdateFailed=Save FAILED\: {0}, messages\: {1}
+
+# 0=rowIndex, 1=id
+notifyUpdateSaved=Row {0} (Id {1}) Saved
+
+notifyValidationError=Validation error - See validation message
+
+prevDraft=Move to prev Fuzzy or Rejected
+
+prevIncomplete=Move to prev Fuzzy/Rejected/Untranslated
+
+prevUntranslated=Move to prev Untranslated
+
+returnToEditor=Return to editor
+
+reviewAccept=Accept translation
+
+reviewReject=Reject translation
+
+saveAsApprovedDialogInfo1=For navigation only, please use\:
+
+saveAsApprovedDialogInfo2=ALT+Up or ALT+J\: Move to previous row
+
+saveAsApprovedDialogInfo3=ALT+Down or ALT+K\: Move to next row
+
+saveAsFuzzy=Save as Fuzzy
+
+saveAsTranslated=Save as Translated
+
+saveAsTranslatedDialogWarning1=Warning\! Saving a ''Fuzzy'' translation as ''Translated'' without changes.
+
+saveChangesConfirmationMessage=Save changes before filtering view?
+
+saving=Saving...
+
+# 0=rowIndex, 1=info
+transUnitDetailsHeadingWithInfo=\#{0}; {1}
+
+translation=Translation
+
+validationErrorMessage=You are trying to save an invalid translation
+
+# 0=warningCount (Plural Count), 1=errorCount (Plural Count)
+# - Default plural form
+validationNotificationHeading=Warnings\: {0}, Errors\: {1}
+# - plural form 'one': Count ends in 1 but not 11
+validationNotificationHeading[one]=
+# - plural form 'few': Count ends in 2-4 but not 12-14
+validationNotificationHeading[few]=
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/TableEditorMessages_zh_Hant_TW.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/TableEditorMessages_zh_Hant_TW.properties
new file mode 100644
index 0000000000..001e88085f
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/TableEditorMessages_zh_Hant_TW.properties
@@ -0,0 +1,92 @@
+# Generated from org.zanata.webtrans.client.resources.TableEditorMessages
+# for locale zh_Hant_TW
+
+cancel=Cancel
+
+cancelChanges=Cancel changes
+
+cancelFilter=Cancel filter
+
+comment=Comment
+
+copyFromSource=Copy message from source language.
+
+# 0=index
+copyFromTM=Copy from translation memory match result no.{0}
+
+discardChanges=Discard Changes
+
+dontShowThisAgain=Don''t show this warning again.
+
+editCancelShortcut=Cancel
+
+editSaveAsFuzzyShortcut=Save as Fuzzy (Ctrl+S)
+
+editSaveShortcut=Save as Translated (Ctrl+Enter)
+
+errorMessage=Error message
+
+history=History
+
+moveToNextRow=Move to next row
+
+moveToPreviousRow=Move to previous row
+
+nextDraft=Move to next Fuzzy or Rejected
+
+nextIncomplete=Move to next Fuzzy/Rejected/Untranslated
+
+nextUntranslated=Move to next Untranslated
+
+notifyCopied=Message has been copied to the target.
+
+notifyLoadFailed=Failed to load data from server
+
+# 0=id, 1=errorMessage
+notifyUpdateFailed=Save FAILED\: {0}, messages\: {1}
+
+# 0=rowIndex, 1=id
+notifyUpdateSaved=Row {0} (Id {1}) Saved
+
+notifyValidationError=Validation error - See validation message
+
+prevDraft=Move to prev Fuzzy or Rejected
+
+prevIncomplete=Move to prev Fuzzy/Rejected/Untranslated
+
+prevUntranslated=Move to prev Untranslated
+
+returnToEditor=Return to editor
+
+reviewAccept=Accept translation
+
+reviewReject=Reject translation
+
+saveAsApprovedDialogInfo1=For navigation only, please use\:
+
+saveAsApprovedDialogInfo2=ALT+Up or ALT+J\: Move to previous row
+
+saveAsApprovedDialogInfo3=ALT+Down or ALT+K\: Move to next row
+
+saveAsFuzzy=Save as Fuzzy
+
+saveAsTranslated=Save as Translated
+
+saveAsTranslatedDialogWarning1=Warning\! Saving a ''Fuzzy'' translation as ''Translated'' without changes.
+
+saveChangesConfirmationMessage=Save changes before filtering view?
+
+saving=Saving...
+
+# 0=rowIndex, 1=info
+transUnitDetailsHeadingWithInfo=\#{0}; {1}
+
+translation=Translation
+
+validationErrorMessage=You are trying to save an invalid translation
+
+# 0=warningCount (Plural Count), 1=errorCount (Plural Count)
+# - Default plural form
+validationNotificationHeading=Warnings\: {0}, Errors\: {1}
+# - plural form 'one': Count is 1 (optional)
+validationNotificationHeading[one]=
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/UiMessages_default.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/UiMessages_default.properties
new file mode 100644
index 0000000000..28da4114be
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/UiMessages_default.properties
@@ -0,0 +1,128 @@
+# Generated from org.zanata.webtrans.client.resources.UiMessages
+# for locale default
+
+action=Action
+
+changeSourceLangDescription=Show reference translations from
+
+chooseRefLang=None
+
+clearButtonLabel=Clear
+
+colorLegend=Color legend
+
+condition=Condition
+
+copy=Copy
+
+copyTooltip=Copy text and paste into editor
+
+detailsLabel=Details
+
+diffModeAsDiff=Show as Diff
+
+diffModeAsHighlight=Highlight matches
+
+differentContent=On Content mismatch\:
+
+differentContext=On Context mismatch (resId, msgctxt)\:
+
+differentDocument=On Document Id mismatch (Document name and path)\:
+
+differentProjectSlug=On Project Name mismatch\:
+
+dismiss=Dismiss
+
+# 0=count
+entriesLabel=Entry \#{0}
+
+findSourceOrTargetString=Search Source or Target content
+
+foundNoGlossaryResults=Found no glossary results
+
+foundNoTMResults=Found no translation memory results
+
+glossaryDetails=Glossary Details
+
+glossaryHeading=Glossary
+
+# 0=locale
+glossarySourceTermLabel=Source Term [{0}]\:
+
+# 0=locale
+glossaryTargetTermLabel=Target Term [{0}]\:
+
+hash=\#
+
+identical=100% (Identical)
+
+importedMatch=On match from Imported Translation Memory\:
+
+inLocale=In
+
+invalidTooltip=Translation that contained validation warning or error.
+
+# 0=date, 1=by
+lastModified=Last modified on {0} by {1}
+
+# 0=date
+lastModifiedOn=Last modified on {0}
+
+matchCountHeaderTooltip=Number of times translation has been used
+
+# 0=matchCount (Plural Count)
+# - Default plural form
+matchCountTooltip=This translation has been used {0} times
+# - plural form 'one': Count is 1
+matchCountTooltip[one]=This translation has been used once
+
+matchThreshold=Match percentage threshold
+
+mergeTMButtonLabel=TM merge
+
+mergeTMCancel=Cancel
+
+mergeTMCaption=Select TM match percentage to pre-fill translations. All the conditions will be checked to determine final state.
+
+mergeTMConfirm=Proceed to auto-fill
+
+mergeTMFailed=TM merge failed
+
+# 0=rowIndices
+mergeTMSuccess=TM merge success on following rows\: {0,list,string}
+
+mergeTMTooltip=Merge translation from Translation Memory for untranslated and fuzzy text flows on current page
+
+noReferenceFoundText=No reference found
+
+noTranslationToMerge=No text can be TM merged
+
+originLabel=Origin
+
+otherwise=If not Rejected or downgraded to Fuzzy\:
+
+processing=Processing
+
+save=Save
+
+saveGlossaryFailed=Glossary save fail
+
+searchButtonLabel=Search
+
+searching=Searching...
+
+sendLabel=Send
+
+similarityLabel=Similarity
+
+sourceLabel=Source
+
+srcTermLabel=Source Term
+
+targetLabel=Target
+
+targetTermLabel=Target Term
+
+translationMemoryDetails=Translation Memory Details
+
+translationMemoryHeading=Translation Memory
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/UiMessages_en.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/UiMessages_en.properties
new file mode 100644
index 0000000000..c62925fece
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/UiMessages_en.properties
@@ -0,0 +1,125 @@
+# Generated from org.zanata.webtrans.client.resources.UiMessages
+# for locale en
+
+action=Action
+
+changeSourceLangDescription=Show reference translations from
+
+chooseRefLang=None
+
+clearButtonLabel=Clear
+
+colorLegend=Color legend
+
+condition=Condition
+
+copy=Copy
+
+copyTooltip=Copy text and paste into editor
+
+detailsLabel=Details
+
+diffModeAsDiff=Show as Diff
+
+diffModeAsHighlight=Highlight matches
+
+differentContent=On Content mismatch\:
+
+differentContext=On Context mismatch (resId, msgctxt)\:
+
+differentDocument=On Document Id mismatch (Document name and path)\:
+
+differentProjectSlug=On Project Name mismatch\:
+
+dismiss=Dismiss
+
+# 0=count
+entriesLabel=Entry \#{0}
+
+findSourceOrTargetString=Search Source or Target content
+
+foundNoGlossaryResults=Found no glossary results
+
+foundNoTMResults=Found no translation memory results
+
+glossaryDetails=Glossary Details
+
+glossaryHeading=Glossary
+
+# 0=locale
+glossarySourceTermLabel=Source Term [{0}]\:
+
+# 0=locale
+glossaryTargetTermLabel=Target Term [{0}]\:
+
+hash=\#
+
+identical=100% (Identical)
+
+importedMatch=On match from Imported Translation Memory\:
+
+inLocale=In
+
+invalidTooltip=Translation that contained validation warning or error.
+
+# 0=date, 1=by
+lastModified=Last modified on {0} by {1}
+
+# 0=date
+lastModifiedOn=Last modified on {0}
+
+matchCountHeaderTooltip=Number of times translation has been used
+
+# 0=matchCount (Plural Count)
+matchCountTooltip=This translation has been used {0} times
+
+matchThreshold=Match percentage threshold
+
+mergeTMButtonLabel=TM merge
+
+mergeTMCancel=Cancel
+
+mergeTMCaption=Select TM match percentage to pre-fill translations. All the conditions will be checked to determine final state.
+
+mergeTMConfirm=Proceed to auto-fill
+
+mergeTMFailed=TM merge failed
+
+# 0=rowIndices
+mergeTMSuccess=TM merge success on following rows\: {0,list,string}
+
+mergeTMTooltip=Merge translation from Translation Memory for untranslated and fuzzy text flows on current page
+
+noReferenceFoundText=No reference found
+
+noTranslationToMerge=No text can be TM merged
+
+originLabel=Origin
+
+otherwise=If not Rejected or downgraded to Fuzzy\:
+
+processing=Processing
+
+save=Save
+
+saveGlossaryFailed=Glossary save fail
+
+searchButtonLabel=Search
+
+searching=Searching...
+
+sendLabel=Send
+
+similarityLabel=Similarity
+
+sourceLabel=Source
+
+srcTermLabel=Source Term
+
+targetLabel=Target
+
+targetTermLabel=Target Term
+
+translationMemoryDetails=Translation Memory Details
+
+translationMemoryHeading=Translation Memory
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/UiMessages_ja.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/UiMessages_ja.properties
new file mode 100644
index 0000000000..1ae2a24f5f
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/UiMessages_ja.properties
@@ -0,0 +1,126 @@
+# Generated from org.zanata.webtrans.client.resources.UiMessages
+# for locale ja
+
+action=Action
+
+changeSourceLangDescription=Show reference translations from
+
+chooseRefLang=None
+
+clearButtonLabel=Clear
+
+colorLegend=Color legend
+
+condition=Condition
+
+copy=Copy
+
+copyTooltip=Copy text and paste into editor
+
+detailsLabel=Details
+
+diffModeAsDiff=Show as Diff
+
+diffModeAsHighlight=Highlight matches
+
+differentContent=On Content mismatch\:
+
+differentContext=On Context mismatch (resId, msgctxt)\:
+
+differentDocument=On Document Id mismatch (Document name and path)\:
+
+differentProjectSlug=On Project Name mismatch\:
+
+dismiss=Dismiss
+
+# 0=count
+entriesLabel=Entry \#{0}
+
+findSourceOrTargetString=Search Source or Target content
+
+foundNoGlossaryResults=Found no glossary results
+
+foundNoTMResults=Found no translation memory results
+
+glossaryDetails=Glossary Details
+
+glossaryHeading=Glossary
+
+# 0=locale
+glossarySourceTermLabel=Source Term [{0}]\:
+
+# 0=locale
+glossaryTargetTermLabel=Target Term [{0}]\:
+
+hash=\#
+
+identical=100% (Identical)
+
+importedMatch=On match from Imported Translation Memory\:
+
+inLocale=In
+
+invalidTooltip=Translation that contained validation warning or error.
+
+# 0=date, 1=by
+lastModified=Last modified on {0} by {1}
+
+# 0=date
+lastModifiedOn=Last modified on {0}
+
+matchCountHeaderTooltip=Number of times translation has been used
+
+# 0=matchCount (Plural Count)
+# - Default plural form
+matchCountTooltip=This translation has been used {0} times
+
+matchThreshold=Match percentage threshold
+
+mergeTMButtonLabel=TM merge
+
+mergeTMCancel=Cancel
+
+mergeTMCaption=Select TM match percentage to pre-fill translations. All the conditions will be checked to determine final state.
+
+mergeTMConfirm=Proceed to auto-fill
+
+mergeTMFailed=TM merge failed
+
+# 0=rowIndices
+mergeTMSuccess=TM merge success on following rows\: {0,list,string}
+
+mergeTMTooltip=Merge translation from Translation Memory for untranslated and fuzzy text flows on current page
+
+noReferenceFoundText=No reference found
+
+noTranslationToMerge=No text can be TM merged
+
+originLabel=Origin
+
+otherwise=If not Rejected or downgraded to Fuzzy\:
+
+processing=Processing
+
+save=Save
+
+saveGlossaryFailed=Glossary save fail
+
+searchButtonLabel=Search
+
+searching=Searching...
+
+sendLabel=Send
+
+similarityLabel=Similarity
+
+sourceLabel=Source
+
+srcTermLabel=Source Term
+
+targetLabel=Target
+
+targetTermLabel=Target Term
+
+translationMemoryDetails=Translation Memory Details
+
+translationMemoryHeading=Translation Memory
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/UiMessages_uk.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/UiMessages_uk.properties
new file mode 100644
index 0000000000..75993734db
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/UiMessages_uk.properties
@@ -0,0 +1,130 @@
+# Generated from org.zanata.webtrans.client.resources.UiMessages
+# for locale uk
+
+action=Action
+
+changeSourceLangDescription=Show reference translations from
+
+chooseRefLang=None
+
+clearButtonLabel=Clear
+
+colorLegend=Color legend
+
+condition=Condition
+
+copy=Copy
+
+copyTooltip=Copy text and paste into editor
+
+detailsLabel=Details
+
+diffModeAsDiff=Show as Diff
+
+diffModeAsHighlight=Highlight matches
+
+differentContent=On Content mismatch\:
+
+differentContext=On Context mismatch (resId, msgctxt)\:
+
+differentDocument=On Document Id mismatch (Document name and path)\:
+
+differentProjectSlug=On Project Name mismatch\:
+
+dismiss=Dismiss
+
+# 0=count
+entriesLabel=Entry \#{0}
+
+findSourceOrTargetString=Search Source or Target content
+
+foundNoGlossaryResults=Found no glossary results
+
+foundNoTMResults=Found no translation memory results
+
+glossaryDetails=Glossary Details
+
+glossaryHeading=Glossary
+
+# 0=locale
+glossarySourceTermLabel=Source Term [{0}]\:
+
+# 0=locale
+glossaryTargetTermLabel=Target Term [{0}]\:
+
+hash=\#
+
+identical=100% (Identical)
+
+importedMatch=On match from Imported Translation Memory\:
+
+inLocale=In
+
+invalidTooltip=Translation that contained validation warning or error.
+
+# 0=date, 1=by
+lastModified=Last modified on {0} by {1}
+
+# 0=date
+lastModifiedOn=Last modified on {0}
+
+matchCountHeaderTooltip=Number of times translation has been used
+
+# 0=matchCount (Plural Count)
+# - Default plural form
+matchCountTooltip=This translation has been used {0} times
+# - plural form 'one': Count ends in 1 but not 11
+matchCountTooltip[one]=This translation has been used once
+# - plural form 'few': Count ends in 2-4 but not 12-14
+matchCountTooltip[few]=
+
+matchThreshold=Match percentage threshold
+
+mergeTMButtonLabel=TM merge
+
+mergeTMCancel=Cancel
+
+mergeTMCaption=Select TM match percentage to pre-fill translations. All the conditions will be checked to determine final state.
+
+mergeTMConfirm=Proceed to auto-fill
+
+mergeTMFailed=TM merge failed
+
+# 0=rowIndices
+mergeTMSuccess=TM merge success on following rows\: {0,list,string}
+
+mergeTMTooltip=Merge translation from Translation Memory for untranslated and fuzzy text flows on current page
+
+noReferenceFoundText=No reference found
+
+noTranslationToMerge=No text can be TM merged
+
+originLabel=Origin
+
+otherwise=If not Rejected or downgraded to Fuzzy\:
+
+processing=Processing
+
+save=Save
+
+saveGlossaryFailed=Glossary save fail
+
+searchButtonLabel=Search
+
+searching=Searching...
+
+sendLabel=Send
+
+similarityLabel=Similarity
+
+sourceLabel=Source
+
+srcTermLabel=Source Term
+
+targetLabel=Target
+
+targetTermLabel=Target Term
+
+translationMemoryDetails=Translation Memory Details
+
+translationMemoryHeading=Translation Memory
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/UiMessages_zh_Hant_TW.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/UiMessages_zh_Hant_TW.properties
new file mode 100644
index 0000000000..4fe7b1ef91
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/UiMessages_zh_Hant_TW.properties
@@ -0,0 +1,128 @@
+# Generated from org.zanata.webtrans.client.resources.UiMessages
+# for locale zh_Hant_TW
+
+action=Action
+
+changeSourceLangDescription=Show reference translations from
+
+chooseRefLang=None
+
+clearButtonLabel=Clear
+
+colorLegend=Color legend
+
+condition=Condition
+
+copy=Copy
+
+copyTooltip=Copy text and paste into editor
+
+detailsLabel=Details
+
+diffModeAsDiff=Show as Diff
+
+diffModeAsHighlight=Highlight matches
+
+differentContent=On Content mismatch\:
+
+differentContext=On Context mismatch (resId, msgctxt)\:
+
+differentDocument=On Document Id mismatch (Document name and path)\:
+
+differentProjectSlug=On Project Name mismatch\:
+
+dismiss=Dismiss
+
+# 0=count
+entriesLabel=Entry \#{0}
+
+findSourceOrTargetString=Search Source or Target content
+
+foundNoGlossaryResults=Found no glossary results
+
+foundNoTMResults=Found no translation memory results
+
+glossaryDetails=Glossary Details
+
+glossaryHeading=Glossary
+
+# 0=locale
+glossarySourceTermLabel=Source Term [{0}]\:
+
+# 0=locale
+glossaryTargetTermLabel=Target Term [{0}]\:
+
+hash=\#
+
+identical=100% (Identical)
+
+importedMatch=On match from Imported Translation Memory\:
+
+inLocale=In
+
+invalidTooltip=Translation that contained validation warning or error.
+
+# 0=date, 1=by
+lastModified=Last modified on {0} by {1}
+
+# 0=date
+lastModifiedOn=Last modified on {0}
+
+matchCountHeaderTooltip=Number of times translation has been used
+
+# 0=matchCount (Plural Count)
+# - Default plural form
+matchCountTooltip=This translation has been used {0} times
+# - plural form 'one': Count is 1 (optional)
+matchCountTooltip[one]=This translation has been used once
+
+matchThreshold=Match percentage threshold
+
+mergeTMButtonLabel=TM merge
+
+mergeTMCancel=Cancel
+
+mergeTMCaption=Select TM match percentage to pre-fill translations. All the conditions will be checked to determine final state.
+
+mergeTMConfirm=Proceed to auto-fill
+
+mergeTMFailed=TM merge failed
+
+# 0=rowIndices
+mergeTMSuccess=TM merge success on following rows\: {0,list,string}
+
+mergeTMTooltip=Merge translation from Translation Memory for untranslated and fuzzy text flows on current page
+
+noReferenceFoundText=No reference found
+
+noTranslationToMerge=No text can be TM merged
+
+originLabel=Origin
+
+otherwise=If not Rejected or downgraded to Fuzzy\:
+
+processing=Processing
+
+save=Save
+
+saveGlossaryFailed=Glossary save fail
+
+searchButtonLabel=Search
+
+searching=Searching...
+
+sendLabel=Send
+
+similarityLabel=Similarity
+
+sourceLabel=Source
+
+srcTermLabel=Source Term
+
+targetLabel=Target
+
+targetTermLabel=Target Term
+
+translationMemoryDetails=Translation Memory Details
+
+translationMemoryHeading=Translation Memory
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/ValidationMessages_default.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/ValidationMessages_default.properties
new file mode 100644
index 0000000000..0bf49483b0
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/ValidationMessages_default.properties
@@ -0,0 +1,108 @@
+# Generated from org.zanata.webtrans.client.resources.ValidationMessages
+# for locale default
+
+differentApostropheCount=Number of apostrophes ('') in source does not match number in translation. This may lead to other warnings.
+
+# Description: Lists variables that appear a different number of times between source and target strings
+# 0=vars (Plural Count)
+# - Default plural form
+differentVarCount=Inconsistent count for variables\: {0,list,string}
+# - plural form 'one': Count is 1
+differentVarCount[one]=Inconsistent count for variable\: {0,list,string}
+
+# 0=entity
+invalidXMLEntity=Invalid XML entity [ {0} ]
+
+javaVariablesValidatorDesc=Check that java style ('{x}') variables are consistent
+
+leadingNewlineAdded=Unexpected leading newline (\\n)
+
+leadingNewlineMissing=Leading newline (\\n) is missing
+
+# 0=expected, 1=actual
+linesAdded=Too many lines in translation (expected {0}, found {1})
+
+# 0=expected, 1=actual
+linesRemoved=Not enough lines in translation (expected {0}, found {1})
+
+mixVarFormats=Numbered arguments cannot mix with unnumbered arguments
+
+newLineValidatorDesc=Check for consistent leading and trailing newline (\\n)
+
+notifyValidationError=Validation error - See validation message
+
+printfVariablesValidatorDesc=Check that printf style (%x) variables are consistent
+
+printfXSIExtensionValidationDesc=Check that positional printf style (%n\$x) variables are consistent
+
+quotedCharsAdded=Quoted characters found in translation but not in source text. Apostrophe character ('') must be doubled ('''') to prevent quoting when it is used in Java MessageFormat strings.
+
+tabValidatorDesc=Check whether source and target have the same number of tabs
+
+# Description: Lists the xml or html tags that are in the target but are not in the original string
+# 0=tags (Plural Count)
+# - Default plural form
+tagsAdded=Unexpected tags\: {0,list,string}
+# - plural form 'one': Count is 1
+tagsAdded[one]=Unexpected tag\: {0,list,string}
+
+# Description: Lists the xml or html tags that are in the original string but have not been included in the target
+# 0=tags (Plural Count)
+# - Default plural form
+tagsMissing=Missing tags\: {0,list,string}
+# - plural form 'one': Count is 1
+tagsMissing[one]=Missing tag\: {0,list,string}
+
+# 0=tags (Plural Count)
+# - Default plural form
+tagsWrongOrder=Tags in unexpected position\: {0,list,string}
+# - plural form 'one': Count is 1
+tagsWrongOrder[one]=Tag in unexpected position\: {0,list,string}
+
+# 0=sourceTabs, 1=targetTabs
+targetHasFewerTabs=Target has fewer tabs (\\t) than source (source\: {0}, target\: {1})
+
+# 0=sourceTabs, 1=targetTabs
+targetHasMoreTabs=Target has more tabs (\\t) than source (source\: {0}, target\: {1})
+
+trailingNewlineAdded=Unexpected trailing newline (\\n)
+
+trailingNewlineMissing=Trailing newline (\\n) is missing
+
+# 0=vars
+varPositionDuplicated=Variables have same position\: {0,collection,string}
+
+# 0=var
+varPositionOutOfRange=Variable {0} position is out of range
+
+# Description: Lists the variables that are in the target but are not in the original string
+# 0=vars (Plural Count)
+# - Default plural form
+varsAdded=Unexpected variables\: {0,list,string}
+# - plural form 'one': Count is 1
+varsAdded[one]=Unexpected variable\: {0,list,string}
+
+# Description: Lists the variables that are in the target and are present but quoted in the original string
+# 0=vars (Plural Count)
+# - Default plural form
+varsAddedQuoted=Variables not quoted\: {0,list,string}
+# - plural form 'one': Count is 1
+varsAddedQuoted[one]=Variable not quoted\: {0,list,string}
+
+# Description: Lists the variables that are in the original string but have not been included in the target
+# 0=vars (Plural Count)
+# - Default plural form
+varsMissing=Missing variables\: {0,list,string}
+# - plural form 'one': Count is 1
+varsMissing[one]=Missing variable\: {0,list,string}
+
+# Description: Lists the variables that are in the original string and are present but quoted in the target
+# 0=vars (Plural Count)
+# - Default plural form
+varsMissingQuoted=Unexpected quoting of variables\: {0,list,string}
+# - plural form 'one': Count is 1
+varsMissingQuoted[one]=Unexpected quoting of variable\: {0,list,string}
+
+xmlEntityValidatorDesc=Check that XML entity are complete
+
+xmlHtmlValidatorDesc=Check that XML/HTML tags are consistent
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/ValidationMessages_en.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/ValidationMessages_en.properties
new file mode 100644
index 0000000000..7f9d8c70f6
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/ValidationMessages_en.properties
@@ -0,0 +1,84 @@
+# Generated from org.zanata.webtrans.client.resources.ValidationMessages
+# for locale en
+
+differentApostropheCount=Number of apostrophes ('') in source does not match number in translation. This may lead to other warnings.
+
+# Description: Lists variables that appear a different number of times between source and target strings
+# 0=vars (Plural Count)
+differentVarCount=Inconsistent count for variables\: {0,list,string}
+
+# 0=entity
+invalidXMLEntity=Invalid XML entity [ {0} ]
+
+javaVariablesValidatorDesc=Check that java style ('{x}') variables are consistent
+
+leadingNewlineAdded=Unexpected leading newline (\\n)
+
+leadingNewlineMissing=Leading newline (\\n) is missing
+
+# 0=expected, 1=actual
+linesAdded=Too many lines in translation (expected {0}, found {1})
+
+# 0=expected, 1=actual
+linesRemoved=Not enough lines in translation (expected {0}, found {1})
+
+mixVarFormats=Numbered arguments cannot mix with unnumbered arguments
+
+newLineValidatorDesc=Check for consistent leading and trailing newline (\\n)
+
+notifyValidationError=Validation error - See validation message
+
+printfVariablesValidatorDesc=Check that printf style (%x) variables are consistent
+
+printfXSIExtensionValidationDesc=Check that positional printf style (%n\$x) variables are consistent
+
+quotedCharsAdded=Quoted characters found in translation but not in source text. Apostrophe character ('') must be doubled ('''') to prevent quoting when it is used in Java MessageFormat strings.
+
+tabValidatorDesc=Check whether source and target have the same number of tabs
+
+# Description: Lists the xml or html tags that are in the target but are not in the original string
+# 0=tags (Plural Count)
+tagsAdded=Unexpected tags\: {0,list,string}
+
+# Description: Lists the xml or html tags that are in the original string but have not been included in the target
+# 0=tags (Plural Count)
+tagsMissing=Missing tags\: {0,list,string}
+
+# 0=tags (Plural Count)
+tagsWrongOrder=Tags in unexpected position\: {0,list,string}
+
+# 0=sourceTabs, 1=targetTabs
+targetHasFewerTabs=Target has fewer tabs (\\t) than source (source\: {0}, target\: {1})
+
+# 0=sourceTabs, 1=targetTabs
+targetHasMoreTabs=Target has more tabs (\\t) than source (source\: {0}, target\: {1})
+
+trailingNewlineAdded=Unexpected trailing newline (\\n)
+
+trailingNewlineMissing=Trailing newline (\\n) is missing
+
+# 0=vars
+varPositionDuplicated=Variables have same position\: {0,collection,string}
+
+# 0=var
+varPositionOutOfRange=Variable {0} position is out of range
+
+# Description: Lists the variables that are in the target but are not in the original string
+# 0=vars (Plural Count)
+varsAdded=Unexpected variables\: {0,list,string}
+
+# Description: Lists the variables that are in the target and are present but quoted in the original string
+# 0=vars (Plural Count)
+varsAddedQuoted=Variables not quoted\: {0,list,string}
+
+# Description: Lists the variables that are in the original string but have not been included in the target
+# 0=vars (Plural Count)
+varsMissing=Missing variables\: {0,list,string}
+
+# Description: Lists the variables that are in the original string and are present but quoted in the target
+# 0=vars (Plural Count)
+varsMissingQuoted=Unexpected quoting of variables\: {0,list,string}
+
+xmlEntityValidatorDesc=Check that XML entity are complete
+
+xmlHtmlValidatorDesc=Check that XML/HTML tags are consistent
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/ValidationMessages_ja.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/ValidationMessages_ja.properties
new file mode 100644
index 0000000000..6c43a3bad7
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/ValidationMessages_ja.properties
@@ -0,0 +1,92 @@
+# Generated from org.zanata.webtrans.client.resources.ValidationMessages
+# for locale ja
+
+differentApostropheCount=Number of apostrophes ('') in source does not match number in translation. This may lead to other warnings.
+
+# Description: Lists variables that appear a different number of times between source and target strings
+# 0=vars (Plural Count)
+# - Default plural form
+differentVarCount=Inconsistent count for variables\: {0,list,string}
+
+# 0=entity
+invalidXMLEntity=Invalid XML entity [ {0} ]
+
+javaVariablesValidatorDesc=Check that java style ('{x}') variables are consistent
+
+leadingNewlineAdded=Unexpected leading newline (\\n)
+
+leadingNewlineMissing=Leading newline (\\n) is missing
+
+# 0=expected, 1=actual
+linesAdded=Too many lines in translation (expected {0}, found {1})
+
+# 0=expected, 1=actual
+linesRemoved=Not enough lines in translation (expected {0}, found {1})
+
+mixVarFormats=Numbered arguments cannot mix with unnumbered arguments
+
+newLineValidatorDesc=Check for consistent leading and trailing newline (\\n)
+
+notifyValidationError=Validation error - See validation message
+
+printfVariablesValidatorDesc=Check that printf style (%x) variables are consistent
+
+printfXSIExtensionValidationDesc=Check that positional printf style (%n\$x) variables are consistent
+
+quotedCharsAdded=Quoted characters found in translation but not in source text. Apostrophe character ('') must be doubled ('''') to prevent quoting when it is used in Java MessageFormat strings.
+
+tabValidatorDesc=Check whether source and target have the same number of tabs
+
+# Description: Lists the xml or html tags that are in the target but are not in the original string
+# 0=tags (Plural Count)
+# - Default plural form
+tagsAdded=Unexpected tags\: {0,list,string}
+
+# Description: Lists the xml or html tags that are in the original string but have not been included in the target
+# 0=tags (Plural Count)
+# - Default plural form
+tagsMissing=Missing tags\: {0,list,string}
+
+# 0=tags (Plural Count)
+# - Default plural form
+tagsWrongOrder=Tags in unexpected position\: {0,list,string}
+
+# 0=sourceTabs, 1=targetTabs
+targetHasFewerTabs=Target has fewer tabs (\\t) than source (source\: {0}, target\: {1})
+
+# 0=sourceTabs, 1=targetTabs
+targetHasMoreTabs=Target has more tabs (\\t) than source (source\: {0}, target\: {1})
+
+trailingNewlineAdded=Unexpected trailing newline (\\n)
+
+trailingNewlineMissing=Trailing newline (\\n) is missing
+
+# 0=vars
+varPositionDuplicated=Variables have same position\: {0,collection,string}
+
+# 0=var
+varPositionOutOfRange=Variable {0} position is out of range
+
+# Description: Lists the variables that are in the target but are not in the original string
+# 0=vars (Plural Count)
+# - Default plural form
+varsAdded=Unexpected variables\: {0,list,string}
+
+# Description: Lists the variables that are in the target and are present but quoted in the original string
+# 0=vars (Plural Count)
+# - Default plural form
+varsAddedQuoted=Variables not quoted\: {0,list,string}
+
+# Description: Lists the variables that are in the original string but have not been included in the target
+# 0=vars (Plural Count)
+# - Default plural form
+varsMissing=Missing variables\: {0,list,string}
+
+# Description: Lists the variables that are in the original string and are present but quoted in the target
+# 0=vars (Plural Count)
+# - Default plural form
+varsMissingQuoted=Unexpected quoting of variables\: {0,list,string}
+
+xmlEntityValidatorDesc=Check that XML entity are complete
+
+xmlHtmlValidatorDesc=Check that XML/HTML tags are consistent
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/ValidationMessages_uk.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/ValidationMessages_uk.properties
new file mode 100644
index 0000000000..1d83c6d94f
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/ValidationMessages_uk.properties
@@ -0,0 +1,124 @@
+# Generated from org.zanata.webtrans.client.resources.ValidationMessages
+# for locale uk
+
+differentApostropheCount=Number of apostrophes ('') in source does not match number in translation. This may lead to other warnings.
+
+# Description: Lists variables that appear a different number of times between source and target strings
+# 0=vars (Plural Count)
+# - Default plural form
+differentVarCount=Inconsistent count for variables\: {0,list,string}
+# - plural form 'one': Count ends in 1 but not 11
+differentVarCount[one]=Inconsistent count for variable\: {0,list,string}
+# - plural form 'few': Count ends in 2-4 but not 12-14
+differentVarCount[few]=
+
+# 0=entity
+invalidXMLEntity=Invalid XML entity [ {0} ]
+
+javaVariablesValidatorDesc=Check that java style ('{x}') variables are consistent
+
+leadingNewlineAdded=Unexpected leading newline (\\n)
+
+leadingNewlineMissing=Leading newline (\\n) is missing
+
+# 0=expected, 1=actual
+linesAdded=Too many lines in translation (expected {0}, found {1})
+
+# 0=expected, 1=actual
+linesRemoved=Not enough lines in translation (expected {0}, found {1})
+
+mixVarFormats=Numbered arguments cannot mix with unnumbered arguments
+
+newLineValidatorDesc=Check for consistent leading and trailing newline (\\n)
+
+notifyValidationError=Validation error - See validation message
+
+printfVariablesValidatorDesc=Check that printf style (%x) variables are consistent
+
+printfXSIExtensionValidationDesc=Check that positional printf style (%n\$x) variables are consistent
+
+quotedCharsAdded=Quoted characters found in translation but not in source text. Apostrophe character ('') must be doubled ('''') to prevent quoting when it is used in Java MessageFormat strings.
+
+tabValidatorDesc=Check whether source and target have the same number of tabs
+
+# Description: Lists the xml or html tags that are in the target but are not in the original string
+# 0=tags (Plural Count)
+# - Default plural form
+tagsAdded=Unexpected tags\: {0,list,string}
+# - plural form 'one': Count ends in 1 but not 11
+tagsAdded[one]=Unexpected tag\: {0,list,string}
+# - plural form 'few': Count ends in 2-4 but not 12-14
+tagsAdded[few]=
+
+# Description: Lists the xml or html tags that are in the original string but have not been included in the target
+# 0=tags (Plural Count)
+# - Default plural form
+tagsMissing=Missing tags\: {0,list,string}
+# - plural form 'one': Count ends in 1 but not 11
+tagsMissing[one]=Missing tag\: {0,list,string}
+# - plural form 'few': Count ends in 2-4 but not 12-14
+tagsMissing[few]=
+
+# 0=tags (Plural Count)
+# - Default plural form
+tagsWrongOrder=Tags in unexpected position\: {0,list,string}
+# - plural form 'one': Count ends in 1 but not 11
+tagsWrongOrder[one]=Tag in unexpected position\: {0,list,string}
+# - plural form 'few': Count ends in 2-4 but not 12-14
+tagsWrongOrder[few]=
+
+# 0=sourceTabs, 1=targetTabs
+targetHasFewerTabs=Target has fewer tabs (\\t) than source (source\: {0}, target\: {1})
+
+# 0=sourceTabs, 1=targetTabs
+targetHasMoreTabs=Target has more tabs (\\t) than source (source\: {0}, target\: {1})
+
+trailingNewlineAdded=Unexpected trailing newline (\\n)
+
+trailingNewlineMissing=Trailing newline (\\n) is missing
+
+# 0=vars
+varPositionDuplicated=Variables have same position\: {0,collection,string}
+
+# 0=var
+varPositionOutOfRange=Variable {0} position is out of range
+
+# Description: Lists the variables that are in the target but are not in the original string
+# 0=vars (Plural Count)
+# - Default plural form
+varsAdded=Unexpected variables\: {0,list,string}
+# - plural form 'one': Count ends in 1 but not 11
+varsAdded[one]=Unexpected variable\: {0,list,string}
+# - plural form 'few': Count ends in 2-4 but not 12-14
+varsAdded[few]=
+
+# Description: Lists the variables that are in the target and are present but quoted in the original string
+# 0=vars (Plural Count)
+# - Default plural form
+varsAddedQuoted=Variables not quoted\: {0,list,string}
+# - plural form 'one': Count ends in 1 but not 11
+varsAddedQuoted[one]=Variable not quoted\: {0,list,string}
+# - plural form 'few': Count ends in 2-4 but not 12-14
+varsAddedQuoted[few]=
+
+# Description: Lists the variables that are in the original string but have not been included in the target
+# 0=vars (Plural Count)
+# - Default plural form
+varsMissing=Missing variables\: {0,list,string}
+# - plural form 'one': Count ends in 1 but not 11
+varsMissing[one]=Missing variable\: {0,list,string}
+# - plural form 'few': Count ends in 2-4 but not 12-14
+varsMissing[few]=
+
+# Description: Lists the variables that are in the original string and are present but quoted in the target
+# 0=vars (Plural Count)
+# - Default plural form
+varsMissingQuoted=Unexpected quoting of variables\: {0,list,string}
+# - plural form 'one': Count ends in 1 but not 11
+varsMissingQuoted[one]=Unexpected quoting of variable\: {0,list,string}
+# - plural form 'few': Count ends in 2-4 but not 12-14
+varsMissingQuoted[few]=
+
+xmlEntityValidatorDesc=Check that XML entity are complete
+
+xmlHtmlValidatorDesc=Check that XML/HTML tags are consistent
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/ValidationMessages_zh_Hant_TW.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/ValidationMessages_zh_Hant_TW.properties
new file mode 100644
index 0000000000..18c9efe46d
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/ValidationMessages_zh_Hant_TW.properties
@@ -0,0 +1,108 @@
+# Generated from org.zanata.webtrans.client.resources.ValidationMessages
+# for locale zh_Hant_TW
+
+differentApostropheCount=Number of apostrophes ('') in source does not match number in translation. This may lead to other warnings.
+
+# Description: Lists variables that appear a different number of times between source and target strings
+# 0=vars (Plural Count)
+# - Default plural form
+differentVarCount=Inconsistent count for variables\: {0,list,string}
+# - plural form 'one': Count is 1 (optional)
+differentVarCount[one]=Inconsistent count for variable\: {0,list,string}
+
+# 0=entity
+invalidXMLEntity=Invalid XML entity [ {0} ]
+
+javaVariablesValidatorDesc=Check that java style ('{x}') variables are consistent
+
+leadingNewlineAdded=Unexpected leading newline (\\n)
+
+leadingNewlineMissing=Leading newline (\\n) is missing
+
+# 0=expected, 1=actual
+linesAdded=Too many lines in translation (expected {0}, found {1})
+
+# 0=expected, 1=actual
+linesRemoved=Not enough lines in translation (expected {0}, found {1})
+
+mixVarFormats=Numbered arguments cannot mix with unnumbered arguments
+
+newLineValidatorDesc=Check for consistent leading and trailing newline (\\n)
+
+notifyValidationError=Validation error - See validation message
+
+printfVariablesValidatorDesc=Check that printf style (%x) variables are consistent
+
+printfXSIExtensionValidationDesc=Check that positional printf style (%n\$x) variables are consistent
+
+quotedCharsAdded=Quoted characters found in translation but not in source text. Apostrophe character ('') must be doubled ('''') to prevent quoting when it is used in Java MessageFormat strings.
+
+tabValidatorDesc=Check whether source and target have the same number of tabs
+
+# Description: Lists the xml or html tags that are in the target but are not in the original string
+# 0=tags (Plural Count)
+# - Default plural form
+tagsAdded=Unexpected tags\: {0,list,string}
+# - plural form 'one': Count is 1 (optional)
+tagsAdded[one]=Unexpected tag\: {0,list,string}
+
+# Description: Lists the xml or html tags that are in the original string but have not been included in the target
+# 0=tags (Plural Count)
+# - Default plural form
+tagsMissing=Missing tags\: {0,list,string}
+# - plural form 'one': Count is 1 (optional)
+tagsMissing[one]=Missing tag\: {0,list,string}
+
+# 0=tags (Plural Count)
+# - Default plural form
+tagsWrongOrder=Tags in unexpected position\: {0,list,string}
+# - plural form 'one': Count is 1 (optional)
+tagsWrongOrder[one]=Tag in unexpected position\: {0,list,string}
+
+# 0=sourceTabs, 1=targetTabs
+targetHasFewerTabs=Target has fewer tabs (\\t) than source (source\: {0}, target\: {1})
+
+# 0=sourceTabs, 1=targetTabs
+targetHasMoreTabs=Target has more tabs (\\t) than source (source\: {0}, target\: {1})
+
+trailingNewlineAdded=Unexpected trailing newline (\\n)
+
+trailingNewlineMissing=Trailing newline (\\n) is missing
+
+# 0=vars
+varPositionDuplicated=Variables have same position\: {0,collection,string}
+
+# 0=var
+varPositionOutOfRange=Variable {0} position is out of range
+
+# Description: Lists the variables that are in the target but are not in the original string
+# 0=vars (Plural Count)
+# - Default plural form
+varsAdded=Unexpected variables\: {0,list,string}
+# - plural form 'one': Count is 1 (optional)
+varsAdded[one]=Unexpected variable\: {0,list,string}
+
+# Description: Lists the variables that are in the target and are present but quoted in the original string
+# 0=vars (Plural Count)
+# - Default plural form
+varsAddedQuoted=Variables not quoted\: {0,list,string}
+# - plural form 'one': Count is 1 (optional)
+varsAddedQuoted[one]=Variable not quoted\: {0,list,string}
+
+# Description: Lists the variables that are in the original string but have not been included in the target
+# 0=vars (Plural Count)
+# - Default plural form
+varsMissing=Missing variables\: {0,list,string}
+# - plural form 'one': Count is 1 (optional)
+varsMissing[one]=Missing variable\: {0,list,string}
+
+# Description: Lists the variables that are in the original string and are present but quoted in the target
+# 0=vars (Plural Count)
+# - Default plural form
+varsMissingQuoted=Unexpected quoting of variables\: {0,list,string}
+# - plural form 'one': Count is 1 (optional)
+varsMissingQuoted[one]=Unexpected quoting of variable\: {0,list,string}
+
+xmlEntityValidatorDesc=Check that XML entity are complete
+
+xmlHtmlValidatorDesc=Check that XML/HTML tags are consistent
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/WebTransMessages_default.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/WebTransMessages_default.properties
new file mode 100644
index 0000000000..dca7a746cb
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/WebTransMessages_default.properties
@@ -0,0 +1,411 @@
+# Generated from org.zanata.webtrans.client.resources.WebTransMessages
+# for locale default
+
+actions=Actions
+
+applicationScope=Application
+
+availableKeyShortcutsTitle=Available Keyboard Shortcuts
+
+blueColor=Blue color
+
+byMessage=Messages
+
+byWords=Words
+
+cancel=Cancel
+
+cannotUndoInReadOnlyMode=Undo not possible in read-only workspace
+
+chatRoom=Chat room
+
+chatScope=Chat
+
+close=Close
+
+closeShortcutView=Close keyboard shortcuts list
+
+colorLegend=Color legend
+
+columnHeaderAction=Actions
+
+columnHeaderComplete=Complete
+
+columnHeaderDocument=Document
+
+columnHeaderIncomplete=Incomplete
+
+columnHeaderLastTranslated=Last Translated
+
+columnHeaderLastUpload=Last Upload
+
+columnHeaderPath=Path
+
+columnHeaderRemaining=Remaining hours
+
+columnHeaderStatistic=Statistic
+
+compare=Compare
+
+concurrentEdit=Concurrent edit detected. Reset value for current row.
+
+concurrentEditTitle=Other user has saved a newer version (Latest) while you are editing (Unsaved). Please resolve conflicts.
+
+confirmRejection=Confirm rejection (ctrl + enter)
+
+description=Description
+
+displayConfiguration=Display configuration
+
+displayConfigurationTooltip=Configure how you want your editor to look like
+
+docListFilterCaseSensitiveDescription=Only show documents that contain the search text with matching case
+
+docListFilterDescription=Enter text to filter the document list. Use commas (,) to separate multiple searches
+
+docListFilterExactMatchDescription=Only show documents with full path and name in the search text
+
+documentListTitle=Document List
+
+documentValidationTitle=Run validation on documents in this page
+
+downloadAllAsOfflinePoZip=Download files (offline po zip)
+
+downloadAllAsOfflinePoZipDescription=Download all translated files in po format for offline translation.
+
+downloadAllAsZip=Download files (zip)
+
+downloadAllAsZipDescription=Download all translated files.
+
+downloadAllFiles=Download All Files
+
+# 0=key
+downloadFileTitle=Download document with extension {0}
+
+editScope=Editing text
+
+editor=Editor
+
+editorButtons=Editor Buttons
+
+editorOptions=Editor options
+
+enableReferenceForSourceLang=Enable Reference for Source Language
+
+enabledSpellCheck=Enable Spell Check
+
+enterKeySaves='Enter' key saves immediately
+
+fetchPreview=Preview
+
+fetchedPreview=Fetched preview
+
+fetchingPreview=Previewing
+
+firstPage=First Page
+
+flipComparingEntries=Flip entries
+
+focusReplacementPhraseKeyShortcut=Focus replacement phrase
+
+focusSearchPhraseKeyShortcut=Focus search phrase
+
+glossaryScope=Glossary
+
+goToThisEntry=Go to this entry
+
+# 0=user
+hasJoinedWorkspace={0} has joined workspace
+
+# 0=user
+hasQuitWorkspace={0} has quit workspace
+
+# 0=docName
+hasValidationErrors=Has validation errors - {0}
+
+hidePreview=Hide preview
+
+hideSouthPanel=Hide Translation Memory and Glossary
+
+hrefHelpLink=http\://zanata.org/
+
+lastPage=Last Page
+
+# 0=completeTime
+lastValidationRun=Last run\: {0}
+
+# Description: latest version in translation history
+latest=Latest
+
+load=Load
+
+loadDocFailed=Failed to load document from Server
+
+loading=Loading
+
+modifiedBy=User
+
+modifiedDate=Date
+
+moreDetais=More details
+
+navOption=Navigation key/button
+
+navigateToNextRow=Navigate to next row
+
+navigateToPreviousRow=Navigate to previous row
+
+navigationScope=Editor navigation
+
+nextPage=Next Page
+
+noContent=(No Content)
+
+noDocumentSelected=No document selected
+
+noReplacementPhraseEntered=No replacement text has been entered
+
+noReplacementsToMake=No replacements to make
+
+noSearchResults=There are no search results to display
+
+noTextFlowsSelected=No text flows selected
+
+notification=Notification
+
+notifyEditableWorkspace=Workspace is set to edit mode
+
+notifyReadOnlyWorkspace=Workspace is set to read only
+
+# 0=selectedFlows (Plural Count)
+# - Default plural form
+numTextFlowsSelected={0} text flows selected
+# - plural form 'one': Count is 1
+numTextFlowsSelected[one]=1 text flow selected
+
+ok=OK
+
+openEditorInSelectedRow=Open editor in selected row
+
+options=Options
+
+otherConfiguration=Advanced user configuration
+
+pageSize=Page size
+
+pasteIntoEditor=Paste into Editor
+
+plainText=Plain text
+
+prepareDownloadConfirmation=Your download will be prepared and may take a few minutes to complete. Is this ok?
+
+prevPage=Previous Page
+
+previewFailed=Failed to fetch preview
+
+previewRequiredBeforeReplace=Preview is required before replacing text
+
+previewSelectedDescription=Preview replacement in all selected text flows.
+
+previewSelectedDisabledDescription=Select text flows to enable preview.
+
+projectTypeNotSet=The project type for this iteration has not been set. Contact the project maintainer.
+
+projectWideSearchAndReplace=Project-wide Search & Replace
+
+publishChatContent=Publish chat content
+
+readOnly=Read only
+
+redColorCrossedOut=Red color + crossed out
+
+refreshCurrentPage=Refresh current page
+
+rejectCommentTitle=Why is this translation rejected?
+
+removeFromComparison=Remove from comparison
+
+replace=Replace
+
+replaceSelectedDescription=Replace text in all selected text flows.
+
+replaceSelectedDisabledDescription=Select text flows and view preview to enable replace.
+
+replaceSelectedKeyShortcut=Replace text in selected rows
+
+replaceTextFailure=Replace text failed
+
+# 0=id, 1=errorMessage
+replaceTextFailureWithMessage=Replace text failed in text flow {0}, error message\: {1}
+
+replaced=Replaced
+
+# 0=searchText, 1=replacement, 2=numFlows (Plural Count)
+# - Default plural form
+replacedTextInMultipleTextFlows=Replaced "{0}" with "{1}" in {2} text flows
+# - plural form 'one': Count is 1
+replacedTextInMultipleTextFlows[one]=Replaced "{0}" with "{1}" in 1 text flow
+
+# 0=searchText, 1=replacement, 2=docName, 3=oneBasedRowIndex, 4=truncatedText
+replacedTextInOneTextFlow=Replaced "{0}" with "{1}" in {2} row {3} ("{4}...")
+
+replacedTextSuccess=Successfully replaced text
+
+replacing=Replacing
+
+requirePreviewDescription=Disable 'Replace' button until previews have been generated for all selected text flows
+
+restoreDefaults=Restore Defaults
+
+restoreSouthPanel=Restore Translation Memory and Glossary
+
+reviewComment=Comment
+
+rowIndex=Index
+
+runValidation=Run validation
+
+save=Save
+
+searchDocInEditor=Search document in editor
+
+searchDocInEditorDetailed=Show this document in the editor with the current search active
+
+searchFailed=Search failed
+
+# 0=searchString
+searchForPhraseReturnedNoResults=Search "{0}" returned no results
+
+# 0=numDocs (Plural Count)
+# - Default plural form
+searchFoundResultsInDocuments=Search found results in {0} documents
+# - plural form 'one': Count is 1
+searchFoundResultsInDocuments[one]=Search found results in 1 document
+
+searchGlossary=Search glossary
+
+searchReplaceDelTagDesc=Old text to be replaced
+
+searchReplaceInsertTagDesc=New replacement text
+
+searchReplacePlainTextDesc=No changes
+
+searchTM=Search translation memory
+
+searching=Searching
+
+selectAllInDocument=Select entire document
+
+selectAllInDocumentDetailed=Select or deselect all matching text flows in this document
+
+selectAllTextFlowsKeyShortcut=Select text flows in all documents
+
+showAvailableKeyShortcuts=Show available shortcuts
+
+showDocumentListKeyShortcut=Show document list
+
+showEditorKeyShortcut=Show editor view
+
+showErrorsTooltip=When unexpected error happens, a popup window will display and show it
+
+showGlossaryPanel=Show Glossary Suggestions
+
+showProjectWideSearch=Show project-wide search view
+
+showSaveApproveWarning=Show 'Save as Approved' warning
+
+showSaveApprovedWarningTooltip=Show warning when 'Save as Approved' triggered via keyboard shortcut
+
+showSystemErrors=Show System Errors
+
+showTransUnitDetails=Display optional Trans Unit Details
+
+showTransUnitDetailsTooltip=Only display Translation Unit Details when there is meta data otherwise hide it
+
+showTranslationMemoryPanel=Show Translation Suggestions
+
+# 0=searchString, 1=textFlows (Plural Count), 2=documents (Plural Count)
+# - Default plural form
+showingResultsForProjectWideSearch=Showing results for search "{0}" ({1} text flows in {2} documents)
+# - plural form 'one': Count is 1
+showingResultsForProjectWideSearch[one]=
+
+source=Source
+
+spellCheckTooltip=Enable spell check in editor (Firefox only)
+
+# 0=remainingHours
+statusBarLabelHours={0}
+
+# 0=approved, 1=remainingHours, 2=by
+statusBarPercentageHrs={0}% ({1}hrs) {2}
+
+style=Style
+
+target=Target
+
+thisIsAPublicChannel=Warning\! This is a public channel
+
+tmDelTagDesc=Text contain in search term but not in result
+
+tmInsertTagDesc=Text contain in result but not in search term
+
+tmPlainTextDesc=Text contain in both search term and result
+
+tmScope=Translation memory
+
+toggleRowActionButtons=Toggle individual row action buttons (changes for next search)
+
+transMemoryOption=Translation Memory (TM) options
+
+translationHistory=Translation History
+
+# Description: Tab text for translation history comparison
+# 0=versionOne, 1=versionTwo
+translationHistoryComparison=Compare ver. {0} and {1}
+
+translationHistoryComparisonTitle=Select 2 entries to compare
+
+undo=Undo
+
+undoFailure=Undo failed
+
+undoInProgress=Undoing
+
+undoReplacementFailure=Undo replacement failed
+
+undoSuccess=Undo successful
+
+# Description: Message for unsuccessful undo
+# 0=unsuccessfulCount (Plural Count), 1=successfulCount (Plural Count)
+# - Default plural form
+undoUnsuccessful={0} items can not be undone. {1} items are reverted
+# - plural form 'one': Count is 1
+undoUnsuccessful[one]=
+
+# Description: current unsaved value in editor for translation history display
+unsaved=Unsaved
+
+uploadButtonTitle=Upload document to merge/override translation
+
+useCodeMirrorEditorTooltip=Switch between syntax highlightable Editor and plain textarea (no syntax highlight but support spell check in all browser)
+
+useSyntaxHighlight=Use syntax highlighting Editor
+
+validationOptions=Validation options
+
+versionNumber=Version
+
+viewDocInEditor=View in editor
+
+viewDocInEditorDetailed=Show this document in editor view
+
+# 0=workspaceName, 1=localeName
+windowTitle={0} to {1} - Zanata Web Translation
+
+# 0=workspaceName, 1=localeName, 2=title
+windowTitle2={0} to {1} - {2}
+
+you=You
+
+youAreNotAllowedToModifyTranslations=You have no access to modify translations
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/WebTransMessages_en.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/WebTransMessages_en.properties
new file mode 100644
index 0000000000..3d7e4e1b43
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/WebTransMessages_en.properties
@@ -0,0 +1,396 @@
+# Generated from org.zanata.webtrans.client.resources.WebTransMessages
+# for locale en
+
+actions=Actions
+
+applicationScope=Application
+
+availableKeyShortcutsTitle=Available Keyboard Shortcuts
+
+blueColor=Blue color
+
+byMessage=Messages
+
+byWords=Words
+
+cancel=Cancel
+
+cannotUndoInReadOnlyMode=Undo not possible in read-only workspace
+
+chatRoom=Chat room
+
+chatScope=Chat
+
+close=Close
+
+closeShortcutView=Close keyboard shortcuts list
+
+colorLegend=Color legend
+
+columnHeaderAction=Actions
+
+columnHeaderComplete=Complete
+
+columnHeaderDocument=Document
+
+columnHeaderIncomplete=Incomplete
+
+columnHeaderLastTranslated=Last Translated
+
+columnHeaderLastUpload=Last Upload
+
+columnHeaderPath=Path
+
+columnHeaderRemaining=Remaining hours
+
+columnHeaderStatistic=Statistic
+
+compare=Compare
+
+concurrentEdit=Concurrent edit detected. Reset value for current row.
+
+concurrentEditTitle=Other user has saved a newer version (Latest) while you are editing (Unsaved). Please resolve conflicts.
+
+confirmRejection=Confirm rejection (ctrl + enter)
+
+description=Description
+
+displayConfiguration=Display configuration
+
+displayConfigurationTooltip=Configure how you want your editor to look like
+
+docListFilterCaseSensitiveDescription=Only show documents that contain the search text with matching case
+
+docListFilterDescription=Enter text to filter the document list. Use commas (,) to separate multiple searches
+
+docListFilterExactMatchDescription=Only show documents with full path and name in the search text
+
+documentListTitle=Document List
+
+documentValidationTitle=Run validation on documents in this page
+
+downloadAllAsOfflinePoZip=Download files (offline po zip)
+
+downloadAllAsOfflinePoZipDescription=Download all translated files in po format for offline translation.
+
+downloadAllAsZip=Download files (zip)
+
+downloadAllAsZipDescription=Download all translated files.
+
+downloadAllFiles=Download All Files
+
+# 0=key
+downloadFileTitle=Download document with extension {0}
+
+editScope=Editing text
+
+editor=Editor
+
+editorButtons=Editor Buttons
+
+editorOptions=Editor options
+
+enableReferenceForSourceLang=Enable Reference for Source Language
+
+enabledSpellCheck=Enable Spell Check
+
+enterKeySaves='Enter' key saves immediately
+
+fetchPreview=Preview
+
+fetchedPreview=Fetched preview
+
+fetchingPreview=Previewing
+
+firstPage=First Page
+
+flipComparingEntries=Flip entries
+
+focusReplacementPhraseKeyShortcut=Focus replacement phrase
+
+focusSearchPhraseKeyShortcut=Focus search phrase
+
+glossaryScope=Glossary
+
+goToThisEntry=Go to this entry
+
+# 0=user
+hasJoinedWorkspace={0} has joined workspace
+
+# 0=user
+hasQuitWorkspace={0} has quit workspace
+
+# 0=docName
+hasValidationErrors=Has validation errors - {0}
+
+hidePreview=Hide preview
+
+hideSouthPanel=Hide Translation Memory and Glossary
+
+hrefHelpLink=http\://zanata.org/
+
+lastPage=Last Page
+
+# 0=completeTime
+lastValidationRun=Last run\: {0}
+
+# Description: latest version in translation history
+latest=Latest
+
+load=Load
+
+loadDocFailed=Failed to load document from Server
+
+loading=Loading
+
+modifiedBy=User
+
+modifiedDate=Date
+
+moreDetais=More details
+
+navOption=Navigation key/button
+
+navigateToNextRow=Navigate to next row
+
+navigateToPreviousRow=Navigate to previous row
+
+navigationScope=Editor navigation
+
+nextPage=Next Page
+
+noContent=(No Content)
+
+noDocumentSelected=No document selected
+
+noReplacementPhraseEntered=No replacement text has been entered
+
+noReplacementsToMake=No replacements to make
+
+noSearchResults=There are no search results to display
+
+noTextFlowsSelected=No text flows selected
+
+notification=Notification
+
+notifyEditableWorkspace=Workspace is set to edit mode
+
+notifyReadOnlyWorkspace=Workspace is set to read only
+
+# 0=selectedFlows (Plural Count)
+numTextFlowsSelected={0} text flows selected
+
+ok=OK
+
+openEditorInSelectedRow=Open editor in selected row
+
+options=Options
+
+otherConfiguration=Advanced user configuration
+
+pageSize=Page size
+
+pasteIntoEditor=Paste into Editor
+
+plainText=Plain text
+
+prepareDownloadConfirmation=Your download will be prepared and may take a few minutes to complete. Is this ok?
+
+prevPage=Previous Page
+
+previewFailed=Failed to fetch preview
+
+previewRequiredBeforeReplace=Preview is required before replacing text
+
+previewSelectedDescription=Preview replacement in all selected text flows.
+
+previewSelectedDisabledDescription=Select text flows to enable preview.
+
+projectTypeNotSet=The project type for this iteration has not been set. Contact the project maintainer.
+
+projectWideSearchAndReplace=Project-wide Search & Replace
+
+publishChatContent=Publish chat content
+
+readOnly=Read only
+
+redColorCrossedOut=Red color + crossed out
+
+refreshCurrentPage=Refresh current page
+
+rejectCommentTitle=Why is this translation rejected?
+
+removeFromComparison=Remove from comparison
+
+replace=Replace
+
+replaceSelectedDescription=Replace text in all selected text flows.
+
+replaceSelectedDisabledDescription=Select text flows and view preview to enable replace.
+
+replaceSelectedKeyShortcut=Replace text in selected rows
+
+replaceTextFailure=Replace text failed
+
+# 0=id, 1=errorMessage
+replaceTextFailureWithMessage=Replace text failed in text flow {0}, error message\: {1}
+
+replaced=Replaced
+
+# 0=searchText, 1=replacement, 2=numFlows (Plural Count)
+replacedTextInMultipleTextFlows=Replaced "{0}" with "{1}" in {2} text flows
+
+# 0=searchText, 1=replacement, 2=docName, 3=oneBasedRowIndex, 4=truncatedText
+replacedTextInOneTextFlow=Replaced "{0}" with "{1}" in {2} row {3} ("{4}...")
+
+replacedTextSuccess=Successfully replaced text
+
+replacing=Replacing
+
+requirePreviewDescription=Disable 'Replace' button until previews have been generated for all selected text flows
+
+restoreDefaults=Restore Defaults
+
+restoreSouthPanel=Restore Translation Memory and Glossary
+
+reviewComment=Comment
+
+rowIndex=Index
+
+runValidation=Run validation
+
+save=Save
+
+searchDocInEditor=Search document in editor
+
+searchDocInEditorDetailed=Show this document in the editor with the current search active
+
+searchFailed=Search failed
+
+# 0=searchString
+searchForPhraseReturnedNoResults=Search "{0}" returned no results
+
+# 0=numDocs (Plural Count)
+searchFoundResultsInDocuments=Search found results in {0} documents
+
+searchGlossary=Search glossary
+
+searchReplaceDelTagDesc=Old text to be replaced
+
+searchReplaceInsertTagDesc=New replacement text
+
+searchReplacePlainTextDesc=No changes
+
+searchTM=Search translation memory
+
+searching=Searching
+
+selectAllInDocument=Select entire document
+
+selectAllInDocumentDetailed=Select or deselect all matching text flows in this document
+
+selectAllTextFlowsKeyShortcut=Select text flows in all documents
+
+showAvailableKeyShortcuts=Show available shortcuts
+
+showDocumentListKeyShortcut=Show document list
+
+showEditorKeyShortcut=Show editor view
+
+showErrorsTooltip=When unexpected error happens, a popup window will display and show it
+
+showGlossaryPanel=Show Glossary Suggestions
+
+showProjectWideSearch=Show project-wide search view
+
+showSaveApproveWarning=Show 'Save as Approved' warning
+
+showSaveApprovedWarningTooltip=Show warning when 'Save as Approved' triggered via keyboard shortcut
+
+showSystemErrors=Show System Errors
+
+showTransUnitDetails=Display optional Trans Unit Details
+
+showTransUnitDetailsTooltip=Only display Translation Unit Details when there is meta data otherwise hide it
+
+showTranslationMemoryPanel=Show Translation Suggestions
+
+# 0=searchString, 1=textFlows (Plural Count), 2=documents (Plural Count)
+showingResultsForProjectWideSearch=Showing results for search "{0}" ({1} text flows in {2} documents)
+
+source=Source
+
+spellCheckTooltip=Enable spell check in editor (Firefox only)
+
+# 0=remainingHours
+statusBarLabelHours={0}
+
+# 0=approved, 1=remainingHours, 2=by
+statusBarPercentageHrs={0}% ({1}hrs) {2}
+
+style=Style
+
+target=Target
+
+thisIsAPublicChannel=Warning\! This is a public channel
+
+tmDelTagDesc=Text contain in search term but not in result
+
+tmInsertTagDesc=Text contain in result but not in search term
+
+tmPlainTextDesc=Text contain in both search term and result
+
+tmScope=Translation memory
+
+toggleRowActionButtons=Toggle individual row action buttons (changes for next search)
+
+transMemoryOption=Translation Memory (TM) options
+
+translationHistory=Translation History
+
+# Description: Tab text for translation history comparison
+# 0=versionOne, 1=versionTwo
+translationHistoryComparison=Compare ver. {0} and {1}
+
+translationHistoryComparisonTitle=Select 2 entries to compare
+
+undo=Undo
+
+undoFailure=Undo failed
+
+undoInProgress=Undoing
+
+undoReplacementFailure=Undo replacement failed
+
+undoSuccess=Undo successful
+
+# Description: Message for unsuccessful undo
+# 0=unsuccessfulCount (Plural Count), 1=successfulCount (Plural Count)
+undoUnsuccessful={0} items can not be undone. {1} items are reverted
+
+# Description: current unsaved value in editor for translation history display
+unsaved=Unsaved
+
+uploadButtonTitle=Upload document to merge/override translation
+
+useCodeMirrorEditorTooltip=Switch between syntax highlightable Editor and plain textarea (no syntax highlight but support spell check in all browser)
+
+useSyntaxHighlight=Use syntax highlighting Editor
+
+validationOptions=Validation options
+
+versionNumber=Version
+
+viewDocInEditor=View in editor
+
+viewDocInEditorDetailed=Show this document in editor view
+
+# 0=workspaceName, 1=localeName
+windowTitle={0} to {1} - Zanata Web Translation
+
+# 0=workspaceName, 1=localeName, 2=title
+windowTitle2={0} to {1} - {2}
+
+you=You
+
+youAreNotAllowedToModifyTranslations=You have no access to modify translations
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/WebTransMessages_ja.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/WebTransMessages_ja.properties
new file mode 100644
index 0000000000..bbc53799c3
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/WebTransMessages_ja.properties
@@ -0,0 +1,401 @@
+# Generated from org.zanata.webtrans.client.resources.WebTransMessages
+# for locale ja
+
+actions=Actions
+
+applicationScope=Application
+
+availableKeyShortcutsTitle=Available Keyboard Shortcuts
+
+blueColor=Blue color
+
+byMessage=Messages
+
+byWords=Words
+
+cancel=Cancel
+
+cannotUndoInReadOnlyMode=Undo not possible in read-only workspace
+
+chatRoom=Chat room
+
+chatScope=Chat
+
+close=Close
+
+closeShortcutView=Close keyboard shortcuts list
+
+colorLegend=Color legend
+
+columnHeaderAction=Actions
+
+columnHeaderComplete=Complete
+
+columnHeaderDocument=Document
+
+columnHeaderIncomplete=Incomplete
+
+columnHeaderLastTranslated=Last Translated
+
+columnHeaderLastUpload=Last Upload
+
+columnHeaderPath=Path
+
+columnHeaderRemaining=Remaining hours
+
+columnHeaderStatistic=Statistic
+
+compare=Compare
+
+concurrentEdit=Concurrent edit detected. Reset value for current row.
+
+concurrentEditTitle=Other user has saved a newer version (Latest) while you are editing (Unsaved). Please resolve conflicts.
+
+confirmRejection=Confirm rejection (ctrl + enter)
+
+description=Description
+
+displayConfiguration=Display configuration
+
+displayConfigurationTooltip=Configure how you want your editor to look like
+
+docListFilterCaseSensitiveDescription=Only show documents that contain the search text with matching case
+
+docListFilterDescription=Enter text to filter the document list. Use commas (,) to separate multiple searches
+
+docListFilterExactMatchDescription=Only show documents with full path and name in the search text
+
+documentListTitle=Document List
+
+documentValidationTitle=Run validation on documents in this page
+
+downloadAllAsOfflinePoZip=Download files (offline po zip)
+
+downloadAllAsOfflinePoZipDescription=Download all translated files in po format for offline translation.
+
+downloadAllAsZip=Download files (zip)
+
+downloadAllAsZipDescription=Download all translated files.
+
+downloadAllFiles=Download All Files
+
+# 0=key
+downloadFileTitle=Download document with extension {0}
+
+editScope=Editing text
+
+editor=Editor
+
+editorButtons=Editor Buttons
+
+editorOptions=Editor options
+
+enableReferenceForSourceLang=Enable Reference for Source Language
+
+enabledSpellCheck=Enable Spell Check
+
+enterKeySaves='Enter' key saves immediately
+
+fetchPreview=Preview
+
+fetchedPreview=Fetched preview
+
+fetchingPreview=Previewing
+
+firstPage=First Page
+
+flipComparingEntries=Flip entries
+
+focusReplacementPhraseKeyShortcut=Focus replacement phrase
+
+focusSearchPhraseKeyShortcut=Focus search phrase
+
+glossaryScope=Glossary
+
+goToThisEntry=Go to this entry
+
+# 0=user
+hasJoinedWorkspace={0} has joined workspace
+
+# 0=user
+hasQuitWorkspace={0} has quit workspace
+
+# 0=docName
+hasValidationErrors=Has validation errors - {0}
+
+hidePreview=Hide preview
+
+hideSouthPanel=Hide Translation Memory and Glossary
+
+hrefHelpLink=http\://zanata.org/
+
+lastPage=Last Page
+
+# 0=completeTime
+lastValidationRun=Last run\: {0}
+
+# Description: latest version in translation history
+latest=Latest
+
+load=Load
+
+loadDocFailed=Failed to load document from Server
+
+loading=Loading
+
+modifiedBy=User
+
+modifiedDate=Date
+
+moreDetais=More details
+
+navOption=Navigation key/button
+
+navigateToNextRow=Navigate to next row
+
+navigateToPreviousRow=Navigate to previous row
+
+navigationScope=Editor navigation
+
+nextPage=Next Page
+
+noContent=(No Content)
+
+noDocumentSelected=No document selected
+
+noReplacementPhraseEntered=No replacement text has been entered
+
+noReplacementsToMake=No replacements to make
+
+noSearchResults=There are no search results to display
+
+noTextFlowsSelected=No text flows selected
+
+notification=Notification
+
+notifyEditableWorkspace=Workspace is set to edit mode
+
+notifyReadOnlyWorkspace=Workspace is set to read only
+
+# 0=selectedFlows (Plural Count)
+# - Default plural form
+numTextFlowsSelected={0} text flows selected
+
+ok=OK
+
+openEditorInSelectedRow=Open editor in selected row
+
+options=Options
+
+otherConfiguration=Advanced user configuration
+
+pageSize=Page size
+
+pasteIntoEditor=Paste into Editor
+
+plainText=Plain text
+
+prepareDownloadConfirmation=Your download will be prepared and may take a few minutes to complete. Is this ok?
+
+prevPage=Previous Page
+
+previewFailed=Failed to fetch preview
+
+previewRequiredBeforeReplace=Preview is required before replacing text
+
+previewSelectedDescription=Preview replacement in all selected text flows.
+
+previewSelectedDisabledDescription=Select text flows to enable preview.
+
+projectTypeNotSet=The project type for this iteration has not been set. Contact the project maintainer.
+
+projectWideSearchAndReplace=Project-wide Search & Replace
+
+publishChatContent=Publish chat content
+
+readOnly=Read only
+
+redColorCrossedOut=Red color + crossed out
+
+refreshCurrentPage=Refresh current page
+
+rejectCommentTitle=Why is this translation rejected?
+
+removeFromComparison=Remove from comparison
+
+replace=Replace
+
+replaceSelectedDescription=Replace text in all selected text flows.
+
+replaceSelectedDisabledDescription=Select text flows and view preview to enable replace.
+
+replaceSelectedKeyShortcut=Replace text in selected rows
+
+replaceTextFailure=Replace text failed
+
+# 0=id, 1=errorMessage
+replaceTextFailureWithMessage=Replace text failed in text flow {0}, error message\: {1}
+
+replaced=Replaced
+
+# 0=searchText, 1=replacement, 2=numFlows (Plural Count)
+# - Default plural form
+replacedTextInMultipleTextFlows=Replaced "{0}" with "{1}" in {2} text flows
+
+# 0=searchText, 1=replacement, 2=docName, 3=oneBasedRowIndex, 4=truncatedText
+replacedTextInOneTextFlow=Replaced "{0}" with "{1}" in {2} row {3} ("{4}...")
+
+replacedTextSuccess=Successfully replaced text
+
+replacing=Replacing
+
+requirePreviewDescription=Disable 'Replace' button until previews have been generated for all selected text flows
+
+restoreDefaults=Restore Defaults
+
+restoreSouthPanel=Restore Translation Memory and Glossary
+
+reviewComment=Comment
+
+rowIndex=Index
+
+runValidation=Run validation
+
+save=Save
+
+searchDocInEditor=Search document in editor
+
+searchDocInEditorDetailed=Show this document in the editor with the current search active
+
+searchFailed=Search failed
+
+# 0=searchString
+searchForPhraseReturnedNoResults=Search "{0}" returned no results
+
+# 0=numDocs (Plural Count)
+# - Default plural form
+searchFoundResultsInDocuments=Search found results in {0} documents
+
+searchGlossary=Search glossary
+
+searchReplaceDelTagDesc=Old text to be replaced
+
+searchReplaceInsertTagDesc=New replacement text
+
+searchReplacePlainTextDesc=No changes
+
+searchTM=Search translation memory
+
+searching=Searching
+
+selectAllInDocument=Select entire document
+
+selectAllInDocumentDetailed=Select or deselect all matching text flows in this document
+
+selectAllTextFlowsKeyShortcut=Select text flows in all documents
+
+showAvailableKeyShortcuts=Show available shortcuts
+
+showDocumentListKeyShortcut=Show document list
+
+showEditorKeyShortcut=Show editor view
+
+showErrorsTooltip=When unexpected error happens, a popup window will display and show it
+
+showGlossaryPanel=Show Glossary Suggestions
+
+showProjectWideSearch=Show project-wide search view
+
+showSaveApproveWarning=Show 'Save as Approved' warning
+
+showSaveApprovedWarningTooltip=Show warning when 'Save as Approved' triggered via keyboard shortcut
+
+showSystemErrors=Show System Errors
+
+showTransUnitDetails=Display optional Trans Unit Details
+
+showTransUnitDetailsTooltip=Only display Translation Unit Details when there is meta data otherwise hide it
+
+showTranslationMemoryPanel=Show Translation Suggestions
+
+# 0=searchString, 1=textFlows (Plural Count), 2=documents (Plural Count)
+# - Default plural form
+showingResultsForProjectWideSearch=Showing results for search "{0}" ({1} text flows in {2} documents)
+
+source=Source
+
+spellCheckTooltip=Enable spell check in editor (Firefox only)
+
+# 0=remainingHours
+statusBarLabelHours={0}
+
+# 0=approved, 1=remainingHours, 2=by
+statusBarPercentageHrs={0}% ({1}hrs) {2}
+
+style=Style
+
+target=Target
+
+thisIsAPublicChannel=Warning\! This is a public channel
+
+tmDelTagDesc=Text contain in search term but not in result
+
+tmInsertTagDesc=Text contain in result but not in search term
+
+tmPlainTextDesc=Text contain in both search term and result
+
+tmScope=Translation memory
+
+toggleRowActionButtons=Toggle individual row action buttons (changes for next search)
+
+transMemoryOption=Translation Memory (TM) options
+
+translationHistory=Translation History
+
+# Description: Tab text for translation history comparison
+# 0=versionOne, 1=versionTwo
+translationHistoryComparison=Compare ver. {0} and {1}
+
+translationHistoryComparisonTitle=Select 2 entries to compare
+
+undo=Undo
+
+undoFailure=Undo failed
+
+undoInProgress=Undoing
+
+undoReplacementFailure=Undo replacement failed
+
+undoSuccess=Undo successful
+
+# Description: Message for unsuccessful undo
+# 0=unsuccessfulCount (Plural Count), 1=successfulCount (Plural Count)
+# - Default plural form
+undoUnsuccessful={0} items can not be undone. {1} items are reverted
+
+# Description: current unsaved value in editor for translation history display
+unsaved=Unsaved
+
+uploadButtonTitle=Upload document to merge/override translation
+
+useCodeMirrorEditorTooltip=Switch between syntax highlightable Editor and plain textarea (no syntax highlight but support spell check in all browser)
+
+useSyntaxHighlight=Use syntax highlighting Editor
+
+validationOptions=Validation options
+
+versionNumber=Version
+
+viewDocInEditor=View in editor
+
+viewDocInEditorDetailed=Show this document in editor view
+
+# 0=workspaceName, 1=localeName
+windowTitle={0} to {1} - Zanata Web Translation
+
+# 0=workspaceName, 1=localeName, 2=title
+windowTitle2={0} to {1} - {2}
+
+you=You
+
+youAreNotAllowedToModifyTranslations=You have no access to modify translations
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/WebTransMessages_uk.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/WebTransMessages_uk.properties
new file mode 100644
index 0000000000..9b82656e32
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/WebTransMessages_uk.properties
@@ -0,0 +1,421 @@
+# Generated from org.zanata.webtrans.client.resources.WebTransMessages
+# for locale uk
+
+actions=Actions
+
+applicationScope=Application
+
+availableKeyShortcutsTitle=Available Keyboard Shortcuts
+
+blueColor=Blue color
+
+byMessage=Messages
+
+byWords=Words
+
+cancel=Cancel
+
+cannotUndoInReadOnlyMode=Undo not possible in read-only workspace
+
+chatRoom=Chat room
+
+chatScope=Chat
+
+close=Close
+
+closeShortcutView=Close keyboard shortcuts list
+
+colorLegend=Color legend
+
+columnHeaderAction=Actions
+
+columnHeaderComplete=Complete
+
+columnHeaderDocument=Document
+
+columnHeaderIncomplete=Incomplete
+
+columnHeaderLastTranslated=Last Translated
+
+columnHeaderLastUpload=Last Upload
+
+columnHeaderPath=Path
+
+columnHeaderRemaining=Remaining hours
+
+columnHeaderStatistic=Statistic
+
+compare=Compare
+
+concurrentEdit=Concurrent edit detected. Reset value for current row.
+
+concurrentEditTitle=Other user has saved a newer version (Latest) while you are editing (Unsaved). Please resolve conflicts.
+
+confirmRejection=Confirm rejection (ctrl + enter)
+
+description=Description
+
+displayConfiguration=Display configuration
+
+displayConfigurationTooltip=Configure how you want your editor to look like
+
+docListFilterCaseSensitiveDescription=Only show documents that contain the search text with matching case
+
+docListFilterDescription=Enter text to filter the document list. Use commas (,) to separate multiple searches
+
+docListFilterExactMatchDescription=Only show documents with full path and name in the search text
+
+documentListTitle=Document List
+
+documentValidationTitle=Run validation on documents in this page
+
+downloadAllAsOfflinePoZip=Download files (offline po zip)
+
+downloadAllAsOfflinePoZipDescription=Download all translated files in po format for offline translation.
+
+downloadAllAsZip=Download files (zip)
+
+downloadAllAsZipDescription=Download all translated files.
+
+downloadAllFiles=Download All Files
+
+# 0=key
+downloadFileTitle=Download document with extension {0}
+
+editScope=Editing text
+
+editor=Editor
+
+editorButtons=Editor Buttons
+
+editorOptions=Editor options
+
+enableReferenceForSourceLang=Enable Reference for Source Language
+
+enabledSpellCheck=Enable Spell Check
+
+enterKeySaves='Enter' key saves immediately
+
+fetchPreview=Preview
+
+fetchedPreview=Fetched preview
+
+fetchingPreview=Previewing
+
+firstPage=First Page
+
+flipComparingEntries=Flip entries
+
+focusReplacementPhraseKeyShortcut=Focus replacement phrase
+
+focusSearchPhraseKeyShortcut=Focus search phrase
+
+glossaryScope=Glossary
+
+goToThisEntry=Go to this entry
+
+# 0=user
+hasJoinedWorkspace={0} has joined workspace
+
+# 0=user
+hasQuitWorkspace={0} has quit workspace
+
+# 0=docName
+hasValidationErrors=Has validation errors - {0}
+
+hidePreview=Hide preview
+
+hideSouthPanel=Hide Translation Memory and Glossary
+
+hrefHelpLink=http\://zanata.org/
+
+lastPage=Last Page
+
+# 0=completeTime
+lastValidationRun=Last run\: {0}
+
+# Description: latest version in translation history
+latest=Latest
+
+load=Load
+
+loadDocFailed=Failed to load document from Server
+
+loading=Loading
+
+modifiedBy=User
+
+modifiedDate=Date
+
+moreDetais=More details
+
+navOption=Navigation key/button
+
+navigateToNextRow=Navigate to next row
+
+navigateToPreviousRow=Navigate to previous row
+
+navigationScope=Editor navigation
+
+nextPage=Next Page
+
+noContent=(No Content)
+
+noDocumentSelected=No document selected
+
+noReplacementPhraseEntered=No replacement text has been entered
+
+noReplacementsToMake=No replacements to make
+
+noSearchResults=There are no search results to display
+
+noTextFlowsSelected=No text flows selected
+
+notification=Notification
+
+notifyEditableWorkspace=Workspace is set to edit mode
+
+notifyReadOnlyWorkspace=Workspace is set to read only
+
+# 0=selectedFlows (Plural Count)
+# - Default plural form
+numTextFlowsSelected={0} text flows selected
+# - plural form 'one': Count ends in 1 but not 11
+numTextFlowsSelected[one]=1 text flow selected
+# - plural form 'few': Count ends in 2-4 but not 12-14
+numTextFlowsSelected[few]=
+
+ok=OK
+
+openEditorInSelectedRow=Open editor in selected row
+
+options=Options
+
+otherConfiguration=Advanced user configuration
+
+pageSize=Page size
+
+pasteIntoEditor=Paste into Editor
+
+plainText=Plain text
+
+prepareDownloadConfirmation=Your download will be prepared and may take a few minutes to complete. Is this ok?
+
+prevPage=Previous Page
+
+previewFailed=Failed to fetch preview
+
+previewRequiredBeforeReplace=Preview is required before replacing text
+
+previewSelectedDescription=Preview replacement in all selected text flows.
+
+previewSelectedDisabledDescription=Select text flows to enable preview.
+
+projectTypeNotSet=The project type for this iteration has not been set. Contact the project maintainer.
+
+projectWideSearchAndReplace=Project-wide Search & Replace
+
+publishChatContent=Publish chat content
+
+readOnly=Read only
+
+redColorCrossedOut=Red color + crossed out
+
+refreshCurrentPage=Refresh current page
+
+rejectCommentTitle=Why is this translation rejected?
+
+removeFromComparison=Remove from comparison
+
+replace=Replace
+
+replaceSelectedDescription=Replace text in all selected text flows.
+
+replaceSelectedDisabledDescription=Select text flows and view preview to enable replace.
+
+replaceSelectedKeyShortcut=Replace text in selected rows
+
+replaceTextFailure=Replace text failed
+
+# 0=id, 1=errorMessage
+replaceTextFailureWithMessage=Replace text failed in text flow {0}, error message\: {1}
+
+replaced=Replaced
+
+# 0=searchText, 1=replacement, 2=numFlows (Plural Count)
+# - Default plural form
+replacedTextInMultipleTextFlows=Replaced "{0}" with "{1}" in {2} text flows
+# - plural form 'one': Count ends in 1 but not 11
+replacedTextInMultipleTextFlows[one]=Replaced "{0}" with "{1}" in 1 text flow
+# - plural form 'few': Count ends in 2-4 but not 12-14
+replacedTextInMultipleTextFlows[few]=
+
+# 0=searchText, 1=replacement, 2=docName, 3=oneBasedRowIndex, 4=truncatedText
+replacedTextInOneTextFlow=Replaced "{0}" with "{1}" in {2} row {3} ("{4}...")
+
+replacedTextSuccess=Successfully replaced text
+
+replacing=Replacing
+
+requirePreviewDescription=Disable 'Replace' button until previews have been generated for all selected text flows
+
+restoreDefaults=Restore Defaults
+
+restoreSouthPanel=Restore Translation Memory and Glossary
+
+reviewComment=Comment
+
+rowIndex=Index
+
+runValidation=Run validation
+
+save=Save
+
+searchDocInEditor=Search document in editor
+
+searchDocInEditorDetailed=Show this document in the editor with the current search active
+
+searchFailed=Search failed
+
+# 0=searchString
+searchForPhraseReturnedNoResults=Search "{0}" returned no results
+
+# 0=numDocs (Plural Count)
+# - Default plural form
+searchFoundResultsInDocuments=Search found results in {0} documents
+# - plural form 'one': Count ends in 1 but not 11
+searchFoundResultsInDocuments[one]=Search found results in 1 document
+# - plural form 'few': Count ends in 2-4 but not 12-14
+searchFoundResultsInDocuments[few]=
+
+searchGlossary=Search glossary
+
+searchReplaceDelTagDesc=Old text to be replaced
+
+searchReplaceInsertTagDesc=New replacement text
+
+searchReplacePlainTextDesc=No changes
+
+searchTM=Search translation memory
+
+searching=Searching
+
+selectAllInDocument=Select entire document
+
+selectAllInDocumentDetailed=Select or deselect all matching text flows in this document
+
+selectAllTextFlowsKeyShortcut=Select text flows in all documents
+
+showAvailableKeyShortcuts=Show available shortcuts
+
+showDocumentListKeyShortcut=Show document list
+
+showEditorKeyShortcut=Show editor view
+
+showErrorsTooltip=When unexpected error happens, a popup window will display and show it
+
+showGlossaryPanel=Show Glossary Suggestions
+
+showProjectWideSearch=Show project-wide search view
+
+showSaveApproveWarning=Show 'Save as Approved' warning
+
+showSaveApprovedWarningTooltip=Show warning when 'Save as Approved' triggered via keyboard shortcut
+
+showSystemErrors=Show System Errors
+
+showTransUnitDetails=Display optional Trans Unit Details
+
+showTransUnitDetailsTooltip=Only display Translation Unit Details when there is meta data otherwise hide it
+
+showTranslationMemoryPanel=Show Translation Suggestions
+
+# 0=searchString, 1=textFlows (Plural Count), 2=documents (Plural Count)
+# - Default plural form
+showingResultsForProjectWideSearch=Showing results for search "{0}" ({1} text flows in {2} documents)
+# - plural form 'one': Count ends in 1 but not 11
+showingResultsForProjectWideSearch[one]=
+# - plural form 'few': Count ends in 2-4 but not 12-14
+showingResultsForProjectWideSearch[few]=
+
+source=Source
+
+spellCheckTooltip=Enable spell check in editor (Firefox only)
+
+# 0=remainingHours
+statusBarLabelHours={0}
+
+# 0=approved, 1=remainingHours, 2=by
+statusBarPercentageHrs={0}% ({1}hrs) {2}
+
+style=Style
+
+target=Target
+
+thisIsAPublicChannel=Warning\! This is a public channel
+
+tmDelTagDesc=Text contain in search term but not in result
+
+tmInsertTagDesc=Text contain in result but not in search term
+
+tmPlainTextDesc=Text contain in both search term and result
+
+tmScope=Translation memory
+
+toggleRowActionButtons=Toggle individual row action buttons (changes for next search)
+
+transMemoryOption=Translation Memory (TM) options
+
+translationHistory=Translation History
+
+# Description: Tab text for translation history comparison
+# 0=versionOne, 1=versionTwo
+translationHistoryComparison=Compare ver. {0} and {1}
+
+translationHistoryComparisonTitle=Select 2 entries to compare
+
+undo=Undo
+
+undoFailure=Undo failed
+
+undoInProgress=Undoing
+
+undoReplacementFailure=Undo replacement failed
+
+undoSuccess=Undo successful
+
+# Description: Message for unsuccessful undo
+# 0=unsuccessfulCount (Plural Count), 1=successfulCount (Plural Count)
+# - Default plural form
+undoUnsuccessful={0} items can not be undone. {1} items are reverted
+# - plural form 'one': Count ends in 1 but not 11
+undoUnsuccessful[one]=
+# - plural form 'few': Count ends in 2-4 but not 12-14
+undoUnsuccessful[few]=
+
+# Description: current unsaved value in editor for translation history display
+unsaved=Unsaved
+
+uploadButtonTitle=Upload document to merge/override translation
+
+useCodeMirrorEditorTooltip=Switch between syntax highlightable Editor and plain textarea (no syntax highlight but support spell check in all browser)
+
+useSyntaxHighlight=Use syntax highlighting Editor
+
+validationOptions=Validation options
+
+versionNumber=Version
+
+viewDocInEditor=View in editor
+
+viewDocInEditorDetailed=Show this document in editor view
+
+# 0=workspaceName, 1=localeName
+windowTitle={0} to {1} - Zanata Web Translation
+
+# 0=workspaceName, 1=localeName, 2=title
+windowTitle2={0} to {1} - {2}
+
+you=You
+
+youAreNotAllowedToModifyTranslations=You have no access to modify translations
diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/WebTransMessages_zh_Hant_TW.properties b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/WebTransMessages_zh_Hant_TW.properties
new file mode 100644
index 0000000000..cc105cc513
--- /dev/null
+++ b/zanata-war/src/main/resources/org/zanata/webtrans/client/resources/WebTransMessages_zh_Hant_TW.properties
@@ -0,0 +1,411 @@
+# Generated from org.zanata.webtrans.client.resources.WebTransMessages
+# for locale zh_Hant_TW
+
+actions=Actions
+
+applicationScope=Application
+
+availableKeyShortcutsTitle=Available Keyboard Shortcuts
+
+blueColor=Blue color
+
+byMessage=Messages
+
+byWords=Words
+
+cancel=Cancel
+
+cannotUndoInReadOnlyMode=Undo not possible in read-only workspace
+
+chatRoom=Chat room
+
+chatScope=Chat
+
+close=Close
+
+closeShortcutView=Close keyboard shortcuts list
+
+colorLegend=Color legend
+
+columnHeaderAction=Actions
+
+columnHeaderComplete=Complete
+
+columnHeaderDocument=Document
+
+columnHeaderIncomplete=Incomplete
+
+columnHeaderLastTranslated=Last Translated
+
+columnHeaderLastUpload=Last Upload
+
+columnHeaderPath=Path
+
+columnHeaderRemaining=Remaining hours
+
+columnHeaderStatistic=Statistic
+
+compare=Compare
+
+concurrentEdit=Concurrent edit detected. Reset value for current row.
+
+concurrentEditTitle=Other user has saved a newer version (Latest) while you are editing (Unsaved). Please resolve conflicts.
+
+confirmRejection=Confirm rejection (ctrl + enter)
+
+description=Description
+
+displayConfiguration=Display configuration
+
+displayConfigurationTooltip=Configure how you want your editor to look like
+
+docListFilterCaseSensitiveDescription=Only show documents that contain the search text with matching case
+
+docListFilterDescription=Enter text to filter the document list. Use commas (,) to separate multiple searches
+
+docListFilterExactMatchDescription=Only show documents with full path and name in the search text
+
+documentListTitle=Document List
+
+documentValidationTitle=Run validation on documents in this page
+
+downloadAllAsOfflinePoZip=Download files (offline po zip)
+
+downloadAllAsOfflinePoZipDescription=Download all translated files in po format for offline translation.
+
+downloadAllAsZip=Download files (zip)
+
+downloadAllAsZipDescription=Download all translated files.
+
+downloadAllFiles=Download All Files
+
+# 0=key
+downloadFileTitle=Download document with extension {0}
+
+editScope=Editing text
+
+editor=Editor
+
+editorButtons=Editor Buttons
+
+editorOptions=Editor options
+
+enableReferenceForSourceLang=Enable Reference for Source Language
+
+enabledSpellCheck=Enable Spell Check
+
+enterKeySaves='Enter' key saves immediately
+
+fetchPreview=Preview
+
+fetchedPreview=Fetched preview
+
+fetchingPreview=Previewing
+
+firstPage=First Page
+
+flipComparingEntries=Flip entries
+
+focusReplacementPhraseKeyShortcut=Focus replacement phrase
+
+focusSearchPhraseKeyShortcut=Focus search phrase
+
+glossaryScope=Glossary
+
+goToThisEntry=Go to this entry
+
+# 0=user
+hasJoinedWorkspace={0} has joined workspace
+
+# 0=user
+hasQuitWorkspace={0} has quit workspace
+
+# 0=docName
+hasValidationErrors=Has validation errors - {0}
+
+hidePreview=Hide preview
+
+hideSouthPanel=Hide Translation Memory and Glossary
+
+hrefHelpLink=http\://zanata.org/
+
+lastPage=Last Page
+
+# 0=completeTime
+lastValidationRun=Last run\: {0}
+
+# Description: latest version in translation history
+latest=Latest
+
+load=Load
+
+loadDocFailed=Failed to load document from Server
+
+loading=Loading
+
+modifiedBy=User
+
+modifiedDate=Date
+
+moreDetais=More details
+
+navOption=Navigation key/button
+
+navigateToNextRow=Navigate to next row
+
+navigateToPreviousRow=Navigate to previous row
+
+navigationScope=Editor navigation
+
+nextPage=Next Page
+
+noContent=(No Content)
+
+noDocumentSelected=No document selected
+
+noReplacementPhraseEntered=No replacement text has been entered
+
+noReplacementsToMake=No replacements to make
+
+noSearchResults=There are no search results to display
+
+noTextFlowsSelected=No text flows selected
+
+notification=Notification
+
+notifyEditableWorkspace=Workspace is set to edit mode
+
+notifyReadOnlyWorkspace=Workspace is set to read only
+
+# 0=selectedFlows (Plural Count)
+# - Default plural form
+numTextFlowsSelected={0} text flows selected
+# - plural form 'one': Count is 1 (optional)
+numTextFlowsSelected[one]=1 text flow selected
+
+ok=OK
+
+openEditorInSelectedRow=Open editor in selected row
+
+options=Options
+
+otherConfiguration=Advanced user configuration
+
+pageSize=Page size
+
+pasteIntoEditor=Paste into Editor
+
+plainText=Plain text
+
+prepareDownloadConfirmation=Your download will be prepared and may take a few minutes to complete. Is this ok?
+
+prevPage=Previous Page
+
+previewFailed=Failed to fetch preview
+
+previewRequiredBeforeReplace=Preview is required before replacing text
+
+previewSelectedDescription=Preview replacement in all selected text flows.
+
+previewSelectedDisabledDescription=Select text flows to enable preview.
+
+projectTypeNotSet=The project type for this iteration has not been set. Contact the project maintainer.
+
+projectWideSearchAndReplace=Project-wide Search & Replace
+
+publishChatContent=Publish chat content
+
+readOnly=Read only
+
+redColorCrossedOut=Red color + crossed out
+
+refreshCurrentPage=Refresh current page
+
+rejectCommentTitle=Why is this translation rejected?
+
+removeFromComparison=Remove from comparison
+
+replace=Replace
+
+replaceSelectedDescription=Replace text in all selected text flows.
+
+replaceSelectedDisabledDescription=Select text flows and view preview to enable replace.
+
+replaceSelectedKeyShortcut=Replace text in selected rows
+
+replaceTextFailure=Replace text failed
+
+# 0=id, 1=errorMessage
+replaceTextFailureWithMessage=Replace text failed in text flow {0}, error message\: {1}
+
+replaced=Replaced
+
+# 0=searchText, 1=replacement, 2=numFlows (Plural Count)
+# - Default plural form
+replacedTextInMultipleTextFlows=Replaced "{0}" with "{1}" in {2} text flows
+# - plural form 'one': Count is 1 (optional)
+replacedTextInMultipleTextFlows[one]=Replaced "{0}" with "{1}" in 1 text flow
+
+# 0=searchText, 1=replacement, 2=docName, 3=oneBasedRowIndex, 4=truncatedText
+replacedTextInOneTextFlow=Replaced "{0}" with "{1}" in {2} row {3} ("{4}...")
+
+replacedTextSuccess=Successfully replaced text
+
+replacing=Replacing
+
+requirePreviewDescription=Disable 'Replace' button until previews have been generated for all selected text flows
+
+restoreDefaults=Restore Defaults
+
+restoreSouthPanel=Restore Translation Memory and Glossary
+
+reviewComment=Comment
+
+rowIndex=Index
+
+runValidation=Run validation
+
+save=Save
+
+searchDocInEditor=Search document in editor
+
+searchDocInEditorDetailed=Show this document in the editor with the current search active
+
+searchFailed=Search failed
+
+# 0=searchString
+searchForPhraseReturnedNoResults=Search "{0}" returned no results
+
+# 0=numDocs (Plural Count)
+# - Default plural form
+searchFoundResultsInDocuments=Search found results in {0} documents
+# - plural form 'one': Count is 1 (optional)
+searchFoundResultsInDocuments[one]=Search found results in 1 document
+
+searchGlossary=Search glossary
+
+searchReplaceDelTagDesc=Old text to be replaced
+
+searchReplaceInsertTagDesc=New replacement text
+
+searchReplacePlainTextDesc=No changes
+
+searchTM=Search translation memory
+
+searching=Searching
+
+selectAllInDocument=Select entire document
+
+selectAllInDocumentDetailed=Select or deselect all matching text flows in this document
+
+selectAllTextFlowsKeyShortcut=Select text flows in all documents
+
+showAvailableKeyShortcuts=Show available shortcuts
+
+showDocumentListKeyShortcut=Show document list
+
+showEditorKeyShortcut=Show editor view
+
+showErrorsTooltip=When unexpected error happens, a popup window will display and show it
+
+showGlossaryPanel=Show Glossary Suggestions
+
+showProjectWideSearch=Show project-wide search view
+
+showSaveApproveWarning=Show 'Save as Approved' warning
+
+showSaveApprovedWarningTooltip=Show warning when 'Save as Approved' triggered via keyboard shortcut
+
+showSystemErrors=Show System Errors
+
+showTransUnitDetails=Display optional Trans Unit Details
+
+showTransUnitDetailsTooltip=Only display Translation Unit Details when there is meta data otherwise hide it
+
+showTranslationMemoryPanel=Show Translation Suggestions
+
+# 0=searchString, 1=textFlows (Plural Count), 2=documents (Plural Count)
+# - Default plural form
+showingResultsForProjectWideSearch=Showing results for search "{0}" ({1} text flows in {2} documents)
+# - plural form 'one': Count is 1 (optional)
+showingResultsForProjectWideSearch[one]=
+
+source=Source
+
+spellCheckTooltip=Enable spell check in editor (Firefox only)
+
+# 0=remainingHours
+statusBarLabelHours={0}
+
+# 0=approved, 1=remainingHours, 2=by
+statusBarPercentageHrs={0}% ({1}hrs) {2}
+
+style=Style
+
+target=Target
+
+thisIsAPublicChannel=Warning\! This is a public channel
+
+tmDelTagDesc=Text contain in search term but not in result
+
+tmInsertTagDesc=Text contain in result but not in search term
+
+tmPlainTextDesc=Text contain in both search term and result
+
+tmScope=Translation memory
+
+toggleRowActionButtons=Toggle individual row action buttons (changes for next search)
+
+transMemoryOption=Translation Memory (TM) options
+
+translationHistory=Translation History
+
+# Description: Tab text for translation history comparison
+# 0=versionOne, 1=versionTwo
+translationHistoryComparison=Compare ver. {0} and {1}
+
+translationHistoryComparisonTitle=Select 2 entries to compare
+
+undo=Undo
+
+undoFailure=Undo failed
+
+undoInProgress=Undoing
+
+undoReplacementFailure=Undo replacement failed
+
+undoSuccess=Undo successful
+
+# Description: Message for unsuccessful undo
+# 0=unsuccessfulCount (Plural Count), 1=successfulCount (Plural Count)
+# - Default plural form
+undoUnsuccessful={0} items can not be undone. {1} items are reverted
+# - plural form 'one': Count is 1 (optional)
+undoUnsuccessful[one]=
+
+# Description: current unsaved value in editor for translation history display
+unsaved=Unsaved
+
+uploadButtonTitle=Upload document to merge/override translation
+
+useCodeMirrorEditorTooltip=Switch between syntax highlightable Editor and plain textarea (no syntax highlight but support spell check in all browser)
+
+useSyntaxHighlight=Use syntax highlighting Editor
+
+validationOptions=Validation options
+
+versionNumber=Version
+
+viewDocInEditor=View in editor
+
+viewDocInEditorDetailed=Show this document in editor view
+
+# 0=workspaceName, 1=localeName
+windowTitle={0} to {1} - Zanata Web Translation
+
+# 0=workspaceName, 1=localeName, 2=title
+windowTitle2={0} to {1} - {2}
+
+you=You
+
+youAreNotAllowedToModifyTranslations=You have no access to modify translations
diff --git a/zanata-war/zanata.xml b/zanata-war/zanata.xml
new file mode 100644
index 0000000000..6881bfdf63
--- /dev/null
+++ b/zanata-war/zanata.xml
@@ -0,0 +1,22 @@
+
+
+ https://translate.zanata.org/zanata/
+ zanata-editor
+ master
+ utf8properties
+
+
+ uk
+ ja
+ en
+ zh-Hant-TW
+
+
+
+
+ mvn -Dgwt-i18n groovy:execute -Dgroovy.script=CopyGWTDefaultProperties.groovy
+ mvn -Dgwt-i18n groovy:execute -Dgroovy.script=RemoveJavaDefaultProperties.groovy
+
+
+
+