You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@openwhisk.apache.org by GitBox <gi...@apache.org> on 2018/02/28 00:45:08 UTC

[GitHub] mrutkows closed pull request #754: Adding support for default package

mrutkows closed pull request #754: Adding support for default package
URL: https://github.com/apache/incubator-openwhisk-wskdeploy/pull/754
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/deployers/servicedeployer.go b/deployers/servicedeployer.go
index 69f0baed..2f43b105 100644
--- a/deployers/servicedeployer.go
+++ b/deployers/servicedeployer.go
@@ -91,11 +91,10 @@ type ServiceDeployer struct {
 	ProjectPath    string
 	DeploymentPath string
 	// whether to deploy the action under the package
-	DeployActionInPackage bool
-	InteractiveChoice     bool
-	ClientConfig          *whisk.Config
-	DependencyMaster      map[string]utils.DependencyRecord
-	ManagedAnnotation     whisk.KeyValue
+	InteractiveChoice bool
+	ClientConfig      *whisk.Config
+	DependencyMaster  map[string]utils.DependencyRecord
+	ManagedAnnotation whisk.KeyValue
 }
 
 // NewServiceDeployer is a Factory to create a new ServiceDeployer
@@ -103,7 +102,6 @@ func NewServiceDeployer() *ServiceDeployer {
 	var dep ServiceDeployer
 	dep.Deployment = NewDeploymentProject()
 	dep.IsInteractive = true
-	dep.DeployActionInPackage = true
 	dep.DependencyMaster = make(map[string]utils.DependencyRecord)
 
 	return &dep
@@ -703,9 +701,16 @@ func (deployer *ServiceDeployer) RefreshManagedPackages(ma map[string]interface{
 
 func (deployer *ServiceDeployer) DeployPackages() error {
 	for _, pack := range deployer.Deployment.Packages {
-		err := deployer.createPackage(pack.Package)
-		if err != nil {
-			return err
+		// "default" package is a reserved package name
+		// all openwhisk entities will be deployed under
+		// /<namespace> instead of /<namespace>/<package> and
+		// therefore skip creating a new package and set
+		// deployer.DeployActionInPackage to false which is set to true by default
+		if strings.ToLower(pack.Package.Name) != parsers.DEFAULT_PACKAGE {
+			err := deployer.createPackage(pack.Package)
+			if err != nil {
+				return err
+			}
 		}
 	}
 	return nil
@@ -917,15 +922,11 @@ func (deployer *ServiceDeployer) createRule(rule *whisk.Rule) error {
 	displayPreprocessingInfo(parsers.YAML_KEY_RULE, rule.Name, true)
 
 	// The rule's trigger should include the namespace with pattern /namespace/trigger
-	rule.Trigger = deployer.getQualifiedName(rule.Trigger.(string), deployer.ClientConfig.Namespace)
-	// The rule's action should include the namespace and package
-	// with pattern /namespace/package/action
-	// TODO(TBD): please refer https://github.com/openwhisk/openwhisk/issues/1577
-
-	// if it contains a slash, then the action is qualified by a package name
-	if strings.Contains(rule.Action.(string), "/") {
-		rule.Action = deployer.getQualifiedName(rule.Action.(string), deployer.ClientConfig.Namespace)
-	}
+	rule.Trigger = deployer.getQualifiedName(rule.Trigger.(string))
+	// The rule's action should include the namespace and package with pattern
+	// /namespace/package/action if that action was created under a package
+	// otherwise action should include the namespace with pattern /namespace/action
+	rule.Action = deployer.getQualifiedName(rule.Action.(string))
 
 	var err error
 	var response *http.Response
@@ -945,7 +946,7 @@ func (deployer *ServiceDeployer) createRule(rule *whisk.Rule) error {
 // Utility function to call go-whisk framework to make action
 func (deployer *ServiceDeployer) createAction(pkgname string, action *whisk.Action) error {
 	// call ActionService through the Client
-	if deployer.DeployActionInPackage {
+	if strings.ToLower(pkgname) != parsers.DEFAULT_PACKAGE {
 		// the action will be created under package with pattern 'packagename/actionname'
 		action.Name = strings.Join([]string{pkgname, action.Name}, "/")
 	}
@@ -1136,9 +1137,15 @@ func (deployer *ServiceDeployer) UnDeployDependencies() error {
 
 func (deployer *ServiceDeployer) UnDeployPackages(deployment *DeploymentProject) error {
 	for _, pack := range deployment.Packages {
-		err := deployer.deletePackage(pack.Package)
-		if err != nil {
-			return err
+		// "default" package is a reserved package name
+		// all openwhisk entities were deployed under
+		// /<namespace> instead of /<namespace>/<package> and
+		// therefore skip deleting default package during undeployment
+		if strings.ToLower(pack.Package.Name) != parsers.DEFAULT_PACKAGE {
+			err := deployer.deletePackage(pack.Package)
+			if err != nil {
+				return err
+			}
 		}
 	}
 	return nil
@@ -1375,10 +1382,10 @@ func (deployer *ServiceDeployer) deleteApi(api *whisk.ApiCreateRequest) error {
 	return nil
 }
 
-// Utility function to call go-whisk framework to make action
+// Utility function to call go-whisk framework to delete action
 func (deployer *ServiceDeployer) deleteAction(pkgname string, action *whisk.Action) error {
 	// call ActionService through Client
-	if deployer.DeployActionInPackage {
+	if pkgname != parsers.DEFAULT_PACKAGE {
 		// the action will be deleted under package with pattern 'packagename/actionname'
 		action.Name = strings.Join([]string{pkgname, action.Name}, "/")
 	}
@@ -1428,18 +1435,21 @@ func retry(attempts int, sleep time.Duration, callback func() error) error {
 	return err
 }
 
-// from whisk go client
-func (deployer *ServiceDeployer) getQualifiedName(name string, namespace string) string {
+//  getQualifiedName(name) returns a fully qualified name given a
+//      (possibly fully qualified) resource name.
+//
+//  Examples:
+//      (foo) => /ns/foo
+//      (pkg/foo) => /ns/pkg/foo
+//      (/ns/pkg/foo) => /ns/pkg/foo
+func (deployer *ServiceDeployer) getQualifiedName(name string) string {
+	namespace := deployer.ClientConfig.Namespace
 	if strings.HasPrefix(name, "/") {
 		return name
 	} else if strings.HasPrefix(namespace, "/") {
 		return fmt.Sprintf("%s/%s", namespace, name)
-	} else {
-		if len(namespace) == 0 {
-			namespace = deployer.ClientConfig.Namespace
-		}
-		return fmt.Sprintf("/%s/%s", namespace, name)
 	}
+	return fmt.Sprintf("/%s/%s", namespace, name)
 }
 
 func (deployer *ServiceDeployer) printDeploymentAssets(assets *DeploymentProject) {
diff --git a/parsers/manifest_parser.go b/parsers/manifest_parser.go
index ab7a3c20..56b500c0 100644
--- a/parsers/manifest_parser.go
+++ b/parsers/manifest_parser.go
@@ -35,12 +35,13 @@ import (
 )
 
 const (
-	PATH_SEPERATOR = "/"
-	API            = "API"
-	HTTPS          = "https"
-	HTTP           = "http"
-	API_VERSION    = "v1"
-	WEB            = "web"
+	PATH_SEPERATOR  = "/"
+	API             = "API"
+	HTTPS           = "https"
+	HTTP            = "http"
+	API_VERSION     = "v1"
+	WEB             = "web"
+	DEFAULT_PACKAGE = "default"
 )
 
 // Read existing manifest file or create new if none exists
@@ -322,6 +323,13 @@ func (dm *YAMLParser) ComposePackage(pkg Package, packageName string, filePath s
 		pag.Annotations = append(pag.Annotations, ma)
 	}
 
+	// "default" package is a reserved package name
+	// and in this case wskdeploy deploys openwhisk entities under
+	// /namespace instead of /namespace/package
+	if strings.ToLower(pag.Name) == DEFAULT_PACKAGE {
+		wskprint.PrintlnOpenWhiskInfo(wski18n.T(wski18n.ID_MSG_DEFAULT_PACKAGE))
+	}
+
 	return pag, nil
 }
 
@@ -359,7 +367,8 @@ func (dm *YAMLParser) ComposeSequences(namespace string, sequences map[string]Se
 		var components []string
 		for _, a := range actionList {
 			act := strings.TrimSpace(a)
-			if !strings.ContainsRune(act, '/') && !strings.HasPrefix(act, packageName+"/") {
+			if !strings.ContainsRune(act, '/') && !strings.HasPrefix(act, packageName+"/") &&
+				strings.ToLower(packageName) != DEFAULT_PACKAGE {
 				act = path.Join(packageName, act)
 			}
 			components = append(components, path.Join("/"+namespace, act))
@@ -849,7 +858,8 @@ func (dm *YAMLParser) ComposeRules(pkg Package, packageName string, ma whisk.Key
 		wskrule.Trigger = wskenv.ConvertSingleName(rule.Trigger)
 		wskrule.Action = wskenv.ConvertSingleName(rule.Action)
 		act := strings.TrimSpace(wskrule.Action.(string))
-		if !strings.ContainsRune(act, '/') && !strings.HasPrefix(act, packageName+"/") {
+		if !strings.ContainsRune(act, '/') && !strings.HasPrefix(act, packageName+"/") &&
+			strings.ToLower(packageName) != DEFAULT_PACKAGE {
 			act = path.Join(packageName, act)
 		}
 		wskrule.Action = act
@@ -981,10 +991,14 @@ func (dm *YAMLParser) ComposeApiRecords(client *whisk.Config, packageName string
 							request.ApiDoc.Id = strings.Join([]string{API, request.ApiDoc.Namespace, request.ApiDoc.GatewayRelPath}, ":")
 							// set action of an API Doc
 							request.ApiDoc.Action = new(whisk.ApiAction)
-							request.ApiDoc.Action.Name = packageName + PATH_SEPERATOR + actionName
-							request.ApiDoc.Action.Namespace = client.Namespace
+							if packageName == DEFAULT_PACKAGE {
+								request.ApiDoc.Action.Name = actionName
+							} else {
+								request.ApiDoc.Action.Name = packageName + PATH_SEPERATOR + actionName
+							}
 							url := []string{HTTPS + ":" + PATH_SEPERATOR, client.Host, strings.ToLower(API),
 								API_VERSION, WEB, client.Namespace, packageName, actionName + "." + HTTP}
+							request.ApiDoc.Action.Namespace = client.Namespace
 							request.ApiDoc.Action.BackendUrl = strings.Join(url, PATH_SEPERATOR)
 							request.ApiDoc.Action.BackendMethod = gatewayMethod
 							request.ApiDoc.Action.Auth = client.AuthToken
diff --git a/tests/src/integration/alarmtrigger/deployment.yaml b/tests/src/integration/alarmtrigger/deployment.yaml
index c7dc5eb4..9fa96238 100644
--- a/tests/src/integration/alarmtrigger/deployment.yaml
+++ b/tests/src/integration/alarmtrigger/deployment.yaml
@@ -27,3 +27,14 @@ project:
                 Every12Hours:
                     inputs:
                         cron: "0 */12 * * *"
+        default:
+            actions:
+                helloworldInDefault:
+                    inputs:
+                        name: Bob
+                        place: London
+            triggers:
+                Every12HoursInDefault:
+                    inputs:
+                        cron: "0 */12 * * *"
+
diff --git a/tests/src/integration/alarmtrigger/manifest.yaml b/tests/src/integration/alarmtrigger/manifest.yaml
index 6055d78f..de99908e 100644
--- a/tests/src/integration/alarmtrigger/manifest.yaml
+++ b/tests/src/integration/alarmtrigger/manifest.yaml
@@ -38,3 +38,27 @@ packages:
             helloworldEvery12Hours:
                 action: helloworld
                 trigger: Every12Hours
+    default:
+        actions:
+            helloworldInDefault:
+                function: actions/hello.js
+                runtime: nodejs:6
+                inputs:
+                    name:
+                        type: string
+                        description: name of a person
+                    place:
+                        type: string
+                        description: location of a person
+                outputs:
+                    payload:
+                        type: string
+                        description: a simple greeting message, Hello World!
+        triggers:
+            Every12HoursInDefault:
+                feed: /whisk.system/alarms/alarm
+        rules:
+            helloworldEvery12HoursInDefault:
+                action: helloworldInDefault
+                trigger: Every12HoursInDefault
+
diff --git a/tests/src/integration/common/wskdeploy.go b/tests/src/integration/common/wskdeploy.go
index eff1920a..623fcffb 100644
--- a/tests/src/integration/common/wskdeploy.go
+++ b/tests/src/integration/common/wskdeploy.go
@@ -170,6 +170,10 @@ func (Wskdeploy *Wskdeploy) ManagedDeployment(manifestPath string, deploymentPat
 	return Wskdeploy.RunCommand("-m", manifestPath, "-d", deploymentPath, "--managed")
 }
 
+func (Wskdeploy *Wskdeploy) ManagedUndeployment(manifestPath string, deploymentPath string) (string, error) {
+	return Wskdeploy.RunCommand("undeploy", "-m", manifestPath, "-d", deploymentPath, "--managed")
+}
+
 // This method is only for testing
 // This method will mock a construction of deployment plan, creating all the memory objects
 // This method CANNOT be used for real deployment!
diff --git a/tests/src/integration/defaultpackage/actions/hello.js b/tests/src/integration/defaultpackage/actions/hello.js
new file mode 100644
index 00000000..b1357b33
--- /dev/null
+++ b/tests/src/integration/defaultpackage/actions/hello.js
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Return a simple greeting message for the whole world.
+ */
+function main(params) {
+    msg = "Hello, " + params.name + " from " + params.place;
+    console.log(msg)
+    return { payload:  msg };
+}
diff --git a/tests/src/integration/defaultpackage/defaultpackage_test.go b/tests/src/integration/defaultpackage/defaultpackage_test.go
new file mode 100644
index 00000000..12e9c640
--- /dev/null
+++ b/tests/src/integration/defaultpackage/defaultpackage_test.go
@@ -0,0 +1,47 @@
+// +build integration
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package tests
+
+import (
+	"github.com/apache/incubator-openwhisk-wskdeploy/tests/src/integration/common"
+	"github.com/stretchr/testify/assert"
+	"os"
+	"testing"
+	"time"
+)
+
+func TestDefaultPackage(t *testing.T) {
+	path := "/src/github.com/apache/incubator-openwhisk-wskdeploy/tests/src/integration/defaultpackage/"
+	manifestPath := os.Getenv("GOPATH") + path + "manifest.yaml"
+	wskdeploy := common.NewWskdeploy()
+	_, err := wskdeploy.DeployManifestPathOnly(manifestPath)
+	assert.Equal(t, nil, err, "Failed to deploy based on the manifest file.")
+	_, err = wskdeploy.UndeployManifestPathOnly(manifestPath)
+	assert.Equal(t, nil, err, "Failed to undeploy based on the manifest file.")
+
+	time.Sleep(10 * time.Second)
+
+	manifestPath = os.Getenv("GOPATH") + path + "manifest-with-project.yaml"
+	_, err = wskdeploy.DeployManifestPathOnly(manifestPath)
+	assert.Equal(t, nil, err, "Failed to deploy based on the manifest file.")
+	_, err = wskdeploy.UndeployManifestPathOnly(manifestPath)
+	assert.Equal(t, nil, err, "Failed to undeploy based on the manifest file.")
+
+}
diff --git a/tests/src/integration/defaultpackage/manifest-with-project.yaml b/tests/src/integration/defaultpackage/manifest-with-project.yaml
new file mode 100644
index 00000000..536a1c84
--- /dev/null
+++ b/tests/src/integration/defaultpackage/manifest-with-project.yaml
@@ -0,0 +1,110 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more contributor
+# license agreements.  See the NOTICE file distributed with this work for additional
+# information regarding copyright ownership.  The ASF licenses this file to you
+# under the Apache License, Version 2.0 (the # "License"); you may not use this
+# file except in compliance with the License.  You may obtain a copy of the License
+# at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software distributed
+# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+# CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations under the License.
+#
+
+project:
+    name: ProjectUnderDefaultPackage
+    packages:
+        default:
+            actions:
+                helloInDefaultPackage:
+                    function: actions/hello.js
+                    runtime: nodejs:6
+                    web-export: true
+                    inputs:
+                        name:
+                            type: string
+                            description: name of a person
+                        place:
+                            type: string
+                            description: location of a person
+                    outputs:
+                        payload:
+                            type: string
+                            description: a simple greeting message, Hello World!
+                greetingInDefaultPackage:
+                    function: actions/hello.js
+                    runtime: nodejs:6
+                    inputs:
+                        name:
+                            type: string
+                            description: name of a person
+                        place:
+                            type: string
+                            description: location of a person
+                    outputs:
+                        payload:
+                            type: string
+                            description: a simple greeting message, Hello World!
+            sequences:
+                hello-world-series:
+                    actions: helloInDefaultPackage, greetingInDefaultPackage
+            triggers:
+                triggerInDefaultPackage:
+            rules:
+                ruleInDefaultPackage:
+                    trigger: triggerInDefaultPackage
+                    action: hello-world-series
+#            apis:
+#                hello-world:
+#                    hello:
+#                        world:
+#                            helloInDefaultPackage: GET
+        package-with-default:
+            actions:
+                helloInsidePackage:
+                    function: actions/hello.js
+                    runtime: nodejs:6
+                    inputs:
+                        name:
+                            type: string
+                            description: name of a person
+                        place:
+                            type: string
+                            description: location of a person
+                    outputs:
+                        payload:
+                            type: string
+                            description: a simple greeting message, Hello World!
+                greetingInsidePackage:
+                    function: actions/hello.js
+                    runtime: nodejs:6
+                    web-export: true
+                    inputs:
+                        name:
+                            type: string
+                            description: name of a person
+                        place:
+                            type: string
+                            description: location of a person
+                    outputs:
+                        payload:
+                            type: string
+                            description: a simple greeting message, Hello World!
+            sequences:
+                hello-world-series:
+                    actions: helloInsidePackage, greetingInsidePackage
+            triggers:
+                triggerInsidePackage:
+            rules:
+                ruleInsidePackage:
+                    trigger: triggerInsidePackage
+                    action: hello-world-series
+#            apis:
+#                greeting-world:
+#                    greeting:
+#                        world:
+#                            greetingInsidePackage: GET
+
diff --git a/tests/src/integration/defaultpackage/manifest.yaml b/tests/src/integration/defaultpackage/manifest.yaml
new file mode 100644
index 00000000..6b574597
--- /dev/null
+++ b/tests/src/integration/defaultpackage/manifest.yaml
@@ -0,0 +1,108 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more contributor
+# license agreements.  See the NOTICE file distributed with this work for additional
+# information regarding copyright ownership.  The ASF licenses this file to you
+# under the Apache License, Version 2.0 (the # "License"); you may not use this
+# file except in compliance with the License.  You may obtain a copy of the License
+# at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software distributed
+# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+# CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations under the License.
+#
+
+packages:
+    default:
+        actions:
+            helloInDefaultPackage:
+                function: actions/hello.js
+                runtime: nodejs:6
+                web-export: true
+                inputs:
+                    name:
+                        type: string
+                        description: name of a person
+                    place:
+                        type: string
+                        description: location of a person
+                outputs:
+                    payload:
+                        type: string
+                        description: a simple greeting message, Hello World!
+            greetingInDefaultPackage:
+                function: actions/hello.js
+                runtime: nodejs:6
+                inputs:
+                    name:
+                        type: string
+                        description: name of a person
+                    place:
+                        type: string
+                        description: location of a person
+                outputs:
+                    payload:
+                        type: string
+                        description: a simple greeting message, Hello World!
+        sequences:
+            hello-world-series:
+                actions: helloInDefaultPackage, greetingInDefaultPackage
+        triggers:
+            triggerInDefaultPackage:
+        rules:
+            ruleInDefaultPackage:
+                trigger: triggerInDefaultPackage
+                action: hello-world-series
+#        apis:
+#            hello-world:
+#                hello:
+#                    world:
+#                        helloInDefaultPackage: GET
+    package-with-default:
+        actions:
+            helloInsidePackage:
+                function: actions/hello.js
+                runtime: nodejs:6
+                inputs:
+                    name:
+                        type: string
+                        description: name of a person
+                    place:
+                        type: string
+                        description: location of a person
+                outputs:
+                    payload:
+                        type: string
+                        description: a simple greeting message, Hello World!
+            greetingInsidePackage:
+                function: actions/hello.js
+                runtime: nodejs:6
+                web-export: true
+                inputs:
+                    name:
+                        type: string
+                        description: name of a person
+                    place:
+                        type: string
+                        description: location of a person
+                outputs:
+                    payload:
+                        type: string
+                        description: a simple greeting message, Hello World!
+        sequences:
+            hello-world-series:
+                actions: helloInsidePackage, greetingInsidePackage
+        triggers:
+            triggerInsidePackage:
+        rules:
+            ruleInsidePackage:
+                trigger: triggerInsidePackage
+                action: hello-world-series
+#        apis:
+#            greeting-world:
+#                greeting:
+#                    world:
+#                        greetingInsidePackage: GET
+
diff --git a/wski18n/i18n_ids.go b/wski18n/i18n_ids.go
index 7b4fc8b7..564ef274 100644
--- a/wski18n/i18n_ids.go
+++ b/wski18n/i18n_ids.go
@@ -128,6 +128,8 @@ const (
 	ID_MSG_DEPENDENCY_UNDEPLOYMENT_FAILURE_X_name_X = "msg_dependency_undeployment_failure"
 	ID_MSG_DEPENDENCY_UNDEPLOYMENT_SUCCESS_X_name_X = "msg_dependency_undeployment_success"
 
+	ID_MSG_DEFAULT_PACKAGE = "msg_default_package"
+
 	// Managed deployments
 	ID_MSG_MANAGED_UNDEPLOYMENT_FAILED                    = "msg_managed_undeployment_failed"
 	ID_MSG_MANAGED_FOUND_DELETED_X_key_X_name_X_project_X = "msg_managed_found_deleted_entity"
diff --git a/wski18n/i18n_resources.go b/wski18n/i18n_resources.go
index d7bd32d0..9d3620dc 100644
--- a/wski18n/i18n_resources.go
+++ b/wski18n/i18n_resources.go
@@ -92,12 +92,12 @@ func wski18nResourcesDe_deAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/de_DE.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/de_DE.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1518211603, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
 
-var _wski18nResourcesEn_usAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x5a\x7b\x8f\x1b\xb7\x11\xff\xdf\x9f\x62\x60\x14\x70\x02\x9c\x65\x27\x45\x81\xc2\xc0\xa1\x70\x6b\x37\xb9\x26\xf6\x19\xf7\x48\x10\x38\x87\x35\xb5\x1c\x49\x8c\xb8\xe4\x82\xe4\x4a\x56\x0e\xea\x67\x2f\x86\x5c\xae\x56\xba\xe3\x2e\x25\x27\x68\xfe\x89\x7c\x1c\xce\x6f\x1e\xe4\xbc\xb8\x1f\x9f\x00\xdc\x3f\x01\x00\x78\x2a\xf8\xd3\x57\xf0\xb4\xb2\xf3\xa2\x36\x38\x13\x9f\x0b\x34\x46\x9b\xa7\x67\x61\xd5\x19\xa6\xac\x64\x4e\x68\x45\x64\x6f\xfd\xda\x13\x80\xed\xd9\x00\x07\xa1\x66\x3a\xc1\xe0\x82\x96\xc6\xf6\xdb\xa6\x2c\xd1\xda\x04\x8b\xeb\x76\x75\x8c\xcb\x9a\x19\x25\xd4\x3c\xc1\xe5\xe7\x76\x35\xc9\xa5\xac\x78\xc1\xd1\x96\x85\xd4\x6a\x5e\xd4\xcd\x54\x0a\xbb\x48\x30\xfb\x10\x56\x81\x41\xcd\xca\x25\x9b\x23\x38\x0d\x6e\x81\x60\x70\x2e\xac\x33\x1b\xb0\xe8\x40\x28\xf8\xef\x8b\xc9\xda\x2e\x6b\xa3\x6b\x3b\xc9\x85\x36\x58\x6b\xe3\x12\xc8\x57\x7e\xd1\x82\x56\xc0\xb1\x96\x7a\x83\x1c\x50\x39\xe1\x04\x5a\xf8\x4a\x4c\x70\x72\x06\x1f\x82\x4c\xf6\x0c\x5e\x97\xb4\xcf\x9e\xc1\x8d\x11\xf3\x39\x1a\x7b\x06\x57\x8d\xa4\x15\x74\xe5\xe4\x6b\x60\x16\xd6\x28\x25\xfd\xdf\x60\x89\xca\xf9\x1d\x2b\x8f\x66\x49\x7e\xd2\xc9\xd6\x58\x8a\x99\x40\x0e\x8a\x55\x68\x6b\x56\x62\xbe\x2e\x5a\xa7\x34\x79\x0d\x4e\x6b\x49\x86\x0b\x8a\x9c\x41\xa3\xc2\x2f\x60\x8a\x83\xdd\xa8\x12\x74\x8d\x6a\xbd\x10\x76\x19\xed\x6c\xa1\xb1\x42\xcd\x81\x41\xc5\x94\x98\xa1\x75\x9e\x58\xd7\xc4\x95\xc9\x96\x55\x45\x9a\xcc\x84\xec\xc8\x7f\x79\xfd\xee\xc7\x1c\x99\xed\x42\x1b\x77\x8a\xef\x59\xe7\xf9\x7c\x98\x41\x3f\x7f\x30\x7a\x25\x38\x5a\x60\x60\x9b\xaa\x62\x66\x03\x81\x1e\xf4\x0c\xd6\x0b\xe6\x9e\x59\x98\x22\xf6\x4e\xc1\x97\x79\xab\x15\x69\xd4\x5d\x74\xae\x9d\x86\x05\xca\xba\x85\x86\x8d\x6e\x4c\x96\xa7\xc8\x23\xf9\xb2\x30\xce\x53\xa2\x70\x0e\x4c\x01\xf3\x87\xfb\x0c\x66\x88\xfc\x0c\x5c\x38\xe1\xa0\x0d\x98\x46\x76\x17\x32\x82\x1f\x03\x5b\xf8\x0b\xb5\x19\x42\x7f\xc1\x14\xdc\xdf\x4f\x96\xb8\xd9\x6e\x0f\xa1\xbc\x9e\xd9\x78\x2b\x34\x96\x38\xa7\x8e\x81\x50\xce\x73\x6f\xe9\x40\x35\xd5\x94\xd4\x9c\xc1\xda\x2e\x83\x07\x86\xb1\x66\x92\xcd\x0b\x56\x8b\x62\xa1\x6d\xca\xb9\xc1\x73\xaf\x3f\x5c\xc0\xa7\xef\x2f\xaf\x6f\x3e\x65\x72\x1c\x96\xbd\xc7\xf4\xa7\xb7\x57\xd7\x17\x97\xef\xb3\xf8\x36\x6e\x51\x2c\x31\x65\x7d\x5a\xd6\x46\xfc\xee\xff\x00\x9f\x7e\x78\xfb\x4b\x0e\xd3\x12\x8d\x2b\xbc\x5b\x1e\xe7\x5a\x33\xb7\x20\x93\x92\xa1\x27\x44\x9c\xe1\xc3\xc0\x58\xab\x99\x48\xa5\x9c\xb0\xe8\x59\xc1\x57\x1c\x67\xac\x91\x0e\x84\x85\xbf\x7c\x7f\xf9\xee\xed\x2e\x31\x7c\x9d\x63\x15\x29\xf5\xba\x68\x79\xa4\x12\xa5\x27\x82\x8e\x68\x9c\xeb\x2e\x5a\x0e\xd9\xa5\x8b\xd0\x5d\x58\xcd\x60\x2d\x94\x43\x43\x37\x74\x95\xb2\x79\x90\xb6\x47\x07\xb5\xd1\x55\x9d\x25\xf8\x12\x37\xd9\xee\x5c\xe2\x26\x57\xe8\x60\xe5\x8a\x29\x36\xc7\x54\xf0\x09\x62\xd7\x46\xff\x86\xa5\xdb\xa5\x5e\xa7\x61\x4a\x21\xc0\x2c\x91\x43\xe4\x30\x8e\xd8\x85\xa7\x61\xfb\x1f\x11\x5a\x3c\xdb\x2e\xf4\x27\xf8\xee\xd6\xc7\x79\xb5\xaa\x8e\x48\x68\xd1\xac\xd0\x48\xb4\x36\xda\x26\x83\xb5\x75\x46\x24\x39\x07\x43\x37\x16\x0d\x1d\x69\xa1\x90\x83\x69\x94\x13\x55\x17\x0b\x33\x10\x9c\x9e\xcf\x25\x16\x94\xae\x12\x30\x37\x9e\x02\xbe\xa7\x84\x56\xa1\xb5\x6c\x9e\x7f\x52\x56\x68\xa6\xda\xa6\x8c\xdc\xae\x82\x6e\x5c\xdd\x0c\x99\xc3\x87\x89\xa2\x12\x96\x12\xa6\x0f\x80\xe9\xf8\x77\xb3\x40\x20\x0a\x3a\x78\x65\x08\x82\x74\xc0\x85\x05\xa5\x1d\x04\x56\x8d\x41\x3e\xf9\x75\xc8\x3c\x07\x88\xb5\x18\xc8\x0d\x84\x48\x41\x9c\x48\xbe\x0c\x67\xec\x54\x12\x52\x47\x73\x1a\x54\xab\xca\x50\x47\x72\xa8\xcf\xc7\xfb\xfb\x09\xfd\xde\x6e\xef\xce\x60\x66\x74\x45\x89\xdd\xea\xc6\x94\xb8\xdd\x66\x61\x06\x87\x8d\x61\x12\x59\xf4\x95\x45\x77\x1a\x56\x67\x9e\x31\xb4\x3d\x3b\x92\x8a\xdd\x1f\x4e\xd7\xb3\x16\xf3\x75\xc1\x7c\x33\x56\x38\xbd\x44\x35\xaa\x32\xed\x80\xb0\x03\xfc\x8e\xd3\x94\x6f\x54\xc5\x8c\x5d\x30\x59\x48\x5d\x32\x99\x40\xbc\x8d\x54\x70\x59\xa3\xfa\xd9\x57\x1f\x6d\xc4\xb0\x01\xcf\xef\x86\x15\x93\x0d\xda\x4c\x40\x85\x6e\xad\xcd\xf2\x64\x48\x9f\xdf\x14\x3a\x60\x8e\xd4\x6d\x8c\x1c\xd1\x75\x97\x6a\x8b\x92\xa9\x12\xa5\x4c\xa6\xa2\xcb\x1f\x26\xf0\xaf\x40\x43\x95\xf6\x6e\x67\x2e\xc0\x8c\x89\x34\xf7\x37\xbb\x9c\xcf\x05\x6f\xef\x62\x55\x4b\x74\x08\xb6\x21\x97\xce\x1a\x29\x37\x13\xb8\x6a\x14\x7c\xea\x8a\xd1\xae\x8b\xfb\x44\x69\xc1\x60\xa5\x29\xb3\x33\xe3\x04\x93\x72\xb3\x6b\x57\x98\xb5\xe8\x86\xbd\xd0\x93\x34\xf4\x3e\x85\x75\xcc\x35\xa9\xf2\xe7\xf9\xf3\xe7\xcf\xcf\xcf\xcf\xcf\x7b\xbe\xe8\xe9\x70\xed\xb7\x02\x11\x10\x61\x16\xaa\x9f\x4b\x20\xcf\x31\x51\x34\x0d\x87\x76\x98\x11\x8c\x33\x7c\xc8\x4e\xf7\x75\x7f\x6f\x3e\xc8\xa0\xbf\x6f\x7b\x94\xc3\x1e\xcf\xc6\x1b\xb3\xdf\x1e\xe4\x09\x16\x8c\x65\x51\xe1\x5b\xcd\xf1\x72\xf6\xd6\x77\xa4\x14\x0d\xa9\x6c\xd9\x6e\xef\x60\xa6\x4d\xee\xbd\x39\x00\xeb\x2b\x7a\x14\x5c\xb6\xeb\x42\x17\x5a\xc4\x1b\x33\x32\x25\xeb\xba\xd1\x18\xec\x09\x6f\xc1\xda\x29\x41\xdf\xa4\xdd\x1d\xcc\x47\x4f\x8f\xd5\xde\xc4\x75\x78\x54\x80\xc9\x64\xa0\xe1\x6f\x21\xa2\x41\xfe\x48\x15\x77\x3c\x73\x94\x8c\xd4\x69\x35\x6f\x77\x14\x27\x28\xca\xb1\x46\xc5\x51\x95\xc7\xd8\x73\xb7\xa9\x0f\x74\x1c\xce\xee\x16\x26\x8d\xfa\xe6\x51\x98\x2f\x39\x39\x8f\x4b\x41\xb1\xa7\x31\xa9\xd2\xaf\x17\x49\xf5\x2c\xa1\xfa\xff\x31\x0d\x45\x7d\x8e\x3b\x28\x5f\xe6\xc1\x87\x91\xf4\x8f\xf1\x61\xe6\xd5\x48\x49\x32\xec\xc7\xbd\x88\x7e\xa2\x27\x47\x82\x30\x75\xd6\xa7\xa6\x35\x2f\x51\x48\x32\x5d\xe7\x3e\x24\x0b\xf0\xc6\x90\x27\x5b\xd8\x7e\xaa\xf8\xf3\xce\x5b\xd4\x71\xa6\x1b\xc5\x8b\x56\xde\xe1\x99\xe4\x1b\x22\x4a\xc6\xa6\xf5\x42\x94\x0b\x58\xfb\x21\x3f\xc9\xc5\x43\x69\xea\x16\x08\x65\x63\x0c\x19\x26\x2a\x18\xe7\x1a\x3e\x69\x85\xdf\xc4\x81\x59\xaf\x0b\xd9\x2f\x3b\x7d\x85\x69\xce\x48\x73\xf9\xab\xfa\x20\x91\x59\x3f\xfb\x59\x09\x8e\x5e\x28\xa2\x27\xd9\x7d\xba\xec\x8a\xb9\x57\x30\x8e\x35\xd8\x3a\x3f\xc0\x62\xea\xb0\x95\xf6\x3d\x4a\x06\x50\x3b\x77\x4d\x38\x43\xc3\x46\x37\x60\xd0\x7b\x7e\xcd\x94\xdb\x8d\xd0\xc0\x2d\x84\xfd\x07\x7c\xb5\x79\xf1\xfe\xeb\x0c\x9c\xb1\x8e\xf9\xa1\x4a\xbd\xc6\xef\x63\x1c\x39\xfa\x86\x87\x3a\xaf\x79\x83\xd6\xdd\x65\xe0\x46\x27\x1f\xa5\x61\xf7\x7c\x93\xa1\xe3\xdb\xab\xab\xcb\xab\xeb\x04\xfb\xf3\xc3\xff\x20\x90\xc3\x83\x85\xf3\xf3\x81\xdc\x6e\xcc\x7e\x10\x5b\x2a\xbd\x56\x85\xdb\xd4\x03\x49\x28\x06\x2b\xa2\x22\x8b\xb5\xbb\x26\xb0\x9b\xb6\x83\x56\x72\x03\xb6\xa9\xc3\x43\xdc\x0b\x3f\xe6\x9e\xd8\x8d\x75\x58\xc1\x54\x28\x2e\xd4\xdc\x82\x36\x30\x17\x6e\xd1\x4c\x27\xa5\xae\xba\x37\x91\xe1\x62\x24\x08\x1c\xa3\x1a\x39\xb2\x50\xda\x85\x38\x30\xd0\x65\x3f\x7a\xe7\x85\x3a\x1c\xda\xfa\x20\xe7\x79\xd1\xe2\xfe\xa3\xcc\x98\x58\x6d\x9d\x54\x1a\x64\x2e\x65\x3d\xff\x54\x0c\x9e\x64\x2f\x12\xad\x85\x5b\x80\x7f\x63\x8e\xf3\xb5\x57\xb4\x88\xc6\x6c\xb7\xfe\xf1\x2e\xac\x95\x9a\x87\x05\xfa\x31\xd2\x23\xf7\x44\x0a\xe1\x71\x50\x24\xfe\x20\x38\xfe\x49\x22\xcd\x10\x79\x21\xd4\x4a\x2f\x53\x02\xfd\xdb\x67\x2a\xba\x2c\x81\xcc\x87\x3b\xda\x06\xeb\x85\x7f\xcb\x6b\x25\x8d\x8f\x59\x61\xe9\xcf\x91\x76\x89\x9b\x6e\x32\x57\x31\xc5\x99\xd3\x66\x68\xea\xd8\xd1\xf8\x21\xd6\xc7\x68\xcc\x3b\xba\x26\x2d\x9f\x51\xcc\xae\x87\x1a\x3b\xd7\xef\xfa\xc7\xb3\x77\x72\x99\x03\x3f\x71\xee\x35\x55\xa3\xa0\xfe\x22\x55\xc2\x56\xcc\x95\xa9\x47\xdd\xbd\x7b\x44\x1b\xb8\x87\xe0\x03\xd7\xc9\xaf\xc7\xc6\x8e\x6b\x0c\xe3\x4a\x0f\xe2\xdd\xea\x33\x18\x11\x55\x3d\x26\x7b\xd7\x2e\xac\x46\x35\x86\x95\x68\xa7\x4a\x74\xbc\x98\x14\x29\xb3\x5d\x84\x55\x8a\x3e\xad\x4b\xba\x99\x39\x61\xb5\xbf\x49\x96\xdd\x33\xf1\x9e\x54\xda\x78\xd9\xc3\xd3\xaa\xdf\x13\x7e\xe6\xd8\x39\x8a\x38\x62\xea\xab\x63\x04\x3a\xb0\xab\xbf\x0a\x41\xa2\x67\x16\xc2\xec\x30\x98\x12\x3f\x3b\x54\x36\x0a\x8d\x9f\x5d\x6c\xb7\xbf\x44\x15\x5b\xcc\x31\x55\xb9\xec\xae\xf2\x1c\xc3\x0b\x6d\x9b\x12\x76\xef\x14\xed\x08\x70\x37\x8e\xb2\x68\x56\xa2\xec\x5d\xdf\x51\x41\x1a\x23\x8f\x77\x79\x98\x33\x52\x0a\xdb\x6e\xe1\xf6\xea\x47\xaf\xbc\x9f\x3c\xfa\x33\x48\xff\x22\x9b\x05\x82\xbb\xbc\x0c\x40\x82\x54\x4c\xce\xb4\xa9\x92\xa5\xf6\xbb\xb8\x3e\x24\xc1\x04\x6e\xcc\x06\xd8\x9c\x09\x35\x99\x8c\xc2\xfe\x66\xb5\xea\xa2\x54\x59\xf1\x81\x97\xe1\xff\x5c\x5f\xbe\x07\xa1\xea\xc6\x01\x67\x8e\xc1\xbb\xd6\x1a\xcf\xca\x8a\x3f\xa3\x98\x35\x8c\xc4\x6a\xd1\x01\xad\x71\x5a\x84\xc3\x92\xfa\x06\xe0\x91\x43\x15\x1f\x2c\x18\xac\x71\xda\x7d\x9c\xf0\xfa\xc3\x45\x20\xab\x05\xd1\x94\x4c\x85\xfa\x61\x8a\x21\x55\x22\x6f\xbf\x93\xd8\x6d\x9a\x40\x5b\xd4\x35\x35\x67\xee\xe0\xbb\x02\x3a\x70\xa5\x56\x2b\x34\xee\x00\xde\xe9\x3e\x8f\x31\xc3\xf6\xd5\x3d\x49\xd5\x78\xd8\xfc\x11\xdf\x13\x31\x4b\xe9\x29\xb3\xc8\x41\xab\x7e\xb8\x79\xc8\x6a\xd4\x14\x42\x95\xb2\xe1\x78\x20\x1e\xb3\x7b\x5e\x48\x1a\xe3\xe7\xd7\x57\xef\x2f\xde\x7f\x97\x5f\x87\xc6\x0d\xc7\x55\xa2\x6b\x66\x54\x51\xea\x8a\x32\x68\x61\xd0\x25\xd3\xec\x15\xad\xc5\x99\x61\x59\x71\xaf\xcb\xcc\xa1\x09\x29\xfe\x55\x88\x6d\x14\x38\xee\x86\xfc\xdb\xe2\xf9\x47\x9b\xa3\x83\x47\xff\xa3\x85\xfe\xe8\x92\xa3\xc3\xd2\x8d\x0c\x0d\x3c\x32\x15\x16\x1c\x6b\x83\x25\x79\xba\x30\x58\x4b\x56\x26\x83\x06\x65\x5e\xc2\xd1\x92\xb7\xf5\x84\x7f\x23\x0b\x07\x63\x2f\x52\x05\x99\xd6\x42\x4a\xb0\x5a\x2b\x3a\x4d\x3b\x98\x33\xa8\xdb\x93\x62\x43\x55\xe5\x8b\x61\x5c\xef\xf1\xb4\x0e\x59\xa6\x02\xad\x39\x4e\xa9\x87\xec\x42\x37\x92\x93\x78\x16\xdd\x04\xc2\x14\x78\xbf\x17\x23\x6a\xff\x2b\xcc\x83\xb2\x24\xf2\xf4\x23\xfe\x24\xb9\x02\x02\xa5\xbe\x87\x75\x1a\xc5\x27\xbf\xff\x18\x48\xaa\xd5\x2c\x5b\x0d\x7a\x70\x0c\xd4\xef\x8f\x5e\x8d\x43\x87\xf8\x49\x53\xff\x5b\xa6\x71\xc1\xa4\xa8\x84\x2b\xc4\x5c\x69\x93\x14\x29\x9e\xeb\x36\xb0\xf8\x2d\x5e\x2a\xff\xeb\xb0\x16\x13\x16\x5a\x76\xb9\xe8\xe5\x82\xa9\x39\xb2\x69\xf2\x0b\x94\x1f\x3b\xc4\xae\xf8\xb3\x51\x6f\xb9\x09\xf3\xa6\x8e\xc7\x04\x2e\x08\x9e\x0a\xe8\x8c\xb3\xe0\x25\xb0\x85\xd4\xf3\xc2\x8a\xdf\x53\x02\x48\x3d\xbf\x16\xbf\x23\xd9\x36\x6c\xd8\xd3\x78\x77\x44\x99\xf2\x4f\x94\xd4\x6c\x4c\xd1\xad\x11\x15\xbc\xf4\x4d\xc5\x37\x2f\xb3\x45\xa9\xb0\xd2\x66\x33\x24\x4d\xa0\x38\x55\xa0\x6f\xbe\xfd\xbb\x17\xe9\x6f\xdf\x7c\x9b\x2d\x13\xd5\x5f\xba\x49\x15\x6f\xed\xea\x49\xc2\xbc\x0c\xf6\xf9\xeb\x4b\xfa\x6f\x5c\x1e\x3f\x1e\x28\x6a\xa3\x6b\x34\x4e\x60\x6a\x84\x1b\xc3\x60\x2f\x5e\x85\x81\x9d\x33\x02\xbb\x91\x5d\x98\x35\xec\x98\xc5\xd1\xde\xe3\x31\x31\x86\x44\xae\xfd\x81\xa3\xc8\x28\x1c\xe8\xc6\x59\xc1\xbd\x23\x6e\x0c\x5b\x09\x0b\xd3\x46\x48\x3e\x3c\x9b\xf0\xaa\x84\x70\x60\xe8\xd8\x66\x85\x82\xee\xf4\xef\x05\x04\x75\x10\xd5\x5b\x6b\xfb\x89\xcb\xfd\xfd\xa4\xfd\x6b\x34\x37\x75\x48\x42\xb5\x8d\x2e\xfd\x83\x95\x23\x65\xb3\x17\x35\xf6\x22\xe1\x92\xa5\xc2\x44\x6c\x45\x5a\x2a\x2a\x28\x0e\xba\x92\x47\xca\x94\x64\xe3\x71\x52\xb7\xe1\xa5\x6d\x67\x19\xbe\x51\xc5\xcf\xc2\x26\xbf\xf0\x7b\xd0\xa6\xee\x85\x18\x26\x0d\x32\xbe\x81\xc0\xa2\xab\x9d\x2c\x4a\x2c\x1d\x30\xa5\xdd\x02\x8d\xdf\x36\x2e\x52\x9c\x58\x65\x4d\xa0\x1e\x76\xb5\xb1\x6a\x28\xb5\x72\xcc\x7f\xbb\xa5\xf4\xf8\x14\xec\xcd\xdb\x7f\xde\x7e\x97\x5d\x8c\x79\xea\xe3\x2a\x31\x3e\x0d\xdf\x0e\xae\xd0\x88\x59\xaa\x0a\xfb\xc9\x2f\xb6\x8d\xd4\xc3\x03\xdc\x5a\x77\x38\x52\x13\x50\xf7\x10\x14\x5e\x8c\x47\x1f\xfc\x3c\xd5\xab\x31\xae\xbd\x27\xa8\x41\xbe\xfd\x87\xa8\x3c\xce\x16\x99\x29\x17\xc4\xb7\x9d\xfc\x17\x5c\x18\x2c\x07\xc6\x42\xd7\x71\x47\xf7\x6e\xd0\xed\x78\xf0\xec\xbd\xb3\xe0\xce\x74\x4f\xee\x9e\xfc\x2f\x00\x00\xff\xff\x9e\x0a\x2f\xc8\x99\x32\x00\x00")
+var _wski18nResourcesEn_usAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x1a\x6b\x8f\x1b\xb7\xf1\xbb\x7f\xc5\xc0\x28\xe0\x04\x38\xcb\x4e\x8a\x02\x85\x81\x43\xe1\xd6\x6e\x72\x4d\xec\x33\xee\xec\x04\x81\x73\x58\x53\xcb\x91\xc4\x68\x97\x5c\x90\xdc\x93\x95\x83\xfa\xdb\x8b\xe1\x63\x77\xa5\x3b\xee\x52\x72\x82\xe6\x4b\xe4\xe3\x70\xde\x9c\xe7\x7e\x7c\x04\x70\xf7\x08\x00\xe0\xb1\xe0\x8f\x5f\xc0\xe3\xda\x2c\x8b\x46\xe3\x42\x7c\x2e\x50\x6b\xa5\x1f\x9f\xf9\x53\xab\x99\x34\x15\xb3\x42\x49\x02\x7b\xed\xce\x1e\x01\xec\xce\x46\x30\x08\xb9\x50\x09\x04\x17\x74\x34\x75\xdf\xb4\x65\x89\xc6\x24\x50\x5c\x87\xd3\x29\x2c\x1b\xa6\xa5\x90\xcb\x04\x96\x9f\xc3\x69\x12\x4b\x59\xf3\x82\xa3\x29\x8b\x4a\xc9\x65\xd1\xb4\xf3\x4a\x98\x55\x02\xd9\x3b\x7f\x0a\x0c\x1a\x56\xae\xd9\x12\xc1\x2a\xb0\x2b\x04\x8d\x4b\x61\xac\xde\x82\x41\x0b\x42\xc2\x7f\x9f\xcd\x36\x66\xdd\x68\xd5\x98\x59\x2e\x69\x8d\x8d\xd2\x36\x41\xf9\xca\x1d\x1a\x50\x12\x38\x36\x95\xda\x22\x07\x94\x56\x58\x81\x06\xbe\x12\x33\x9c\x9d\xc1\x3b\xcf\x93\x39\x83\x97\x25\xdd\x33\x67\xf0\x5e\x8b\xe5\x12\xb5\x39\x83\xab\xb6\xa2\x13\xb4\xe5\xec\x6b\x60\x06\x36\x58\x55\xf4\x7f\x8d\x25\x4a\xeb\x6e\xdc\x3a\x6a\x86\xf8\x27\x99\x4c\x83\xa5\x58\x08\xe4\x20\x59\x8d\xa6\x61\x25\xe6\xcb\xa2\x54\x4a\x92\x97\x60\x95\xaa\x48\x71\x5e\x90\x33\x68\xa5\xff\x05\x4c\x72\x30\x5b\x59\x82\x6a\x50\x6e\x56\xc2\xac\xa3\x9e\x0d\xb4\x46\xc8\x25\x30\xa8\x99\x14\x0b\x34\xd6\x01\xab\x86\xb0\xb2\x2a\xa0\xaa\x49\x92\x85\xa8\x3a\xf0\x5f\x5e\xbe\xf9\x31\x87\x67\xb3\x52\xda\x9e\x62\x7b\xd6\x59\x3e\x9f\xcc\xa8\x9d\xdf\x69\x75\x2b\x38\x1a\x60\x60\xda\xba\x66\x7a\x0b\x1e\x1e\xd4\x02\x36\x2b\x66\x9f\x18\x98\x23\x0e\xbc\xe0\xcb\xac\x15\x58\x9a\x34\x17\xf9\xb5\x55\xb0\xc2\xaa\x09\xa4\x61\xab\x5a\x9d\x65\x29\xb2\x48\x3e\x2f\x8c\xf3\x14\x2b\x9c\x03\x93\xc0\x9c\x73\x9f\xc1\x02\x91\x9f\x81\xf5\x1e\x0e\x4a\x83\x6e\xab\xee\x41\x46\xe2\xc7\x90\x2d\xdc\x83\xda\x8e\x51\x7f\xc6\x24\xdc\xdd\xcd\xd6\xb8\xdd\xed\x0e\x49\x39\x39\xb3\xe9\xdd\xa2\x36\x84\x39\xe5\x06\x42\x5a\x87\x3d\xc0\x81\x6c\xeb\x39\x89\xb9\x80\x8d\x59\x7b\x0b\x8c\xd3\x5a\x54\x6c\x59\xb0\x46\x14\x2b\x65\x52\xc6\xf5\x96\x7b\xf9\xee\x02\x3e\x7d\x7f\x79\xfd\xfe\x53\x26\xc6\x71\xde\x07\x48\x7f\x7a\x7d\x75\x7d\x71\xf9\x36\x0b\x6f\x6b\x57\xc5\x1a\x53\xda\xa7\x63\xa5\xc5\xef\xee\x0f\xf0\xe9\x87\xd7\xbf\xe4\x20\x2d\x51\xdb\xc2\x99\xe5\x61\xac\x0d\xb3\x2b\x52\x29\x29\x7a\x46\xc0\x19\x36\xf4\x88\x95\x5c\x88\x54\xca\xf1\x87\x0e\x15\x7c\xc5\x71\xc1\xda\xca\x82\x30\xf0\x97\xef\x2f\xdf\xbc\xee\x13\xc3\xd7\x39\x5a\xa9\x2a\xb5\x29\x02\x8e\x54\xa2\x74\x40\xd0\x01\x4d\x63\xed\xa3\xe5\x98\x5e\xba\x08\xdd\x85\xd5\x0c\xd4\x42\x5a\xd4\xf4\x42\x6f\x53\x3a\xf7\xdc\x0e\xe0\xa0\xd1\xaa\x6e\xb2\x18\x5f\xe3\x36\xdb\x9c\x6b\xdc\xe6\x32\xed\xb5\x5c\x33\xc9\x96\x98\x0a\x3e\x9e\xed\x46\xab\xdf\xb0\xb4\x7d\xea\xb5\x0a\xe6\x14\x02\xf4\x1a\x39\x44\x0c\xd3\x14\xbb\xf0\x34\xae\xff\x23\x42\x8b\x43\xdb\x85\xfe\x04\xde\xfe\x7c\x1a\x57\x10\x75\x82\x43\x83\xfa\x16\x75\x85\xc6\x44\xdd\x64\xa0\x36\x56\x8b\x24\x66\xaf\xe8\xd6\xa0\x26\x97\x16\x12\x39\xe8\x56\x5a\x51\x77\xb1\x30\x83\x82\x55\xcb\x65\x85\x05\xa5\xab\x04\x99\xf7\x0e\x02\xbe\xa7\x84\x56\xa3\x31\x6c\x99\xef\x29\xb7\xa8\xe7\xca\xa4\x94\x1c\x4e\x41\xb5\xb6\x69\xc7\xd4\xe1\xc2\x44\x51\x0b\x43\x09\xd3\x05\xc0\x74\xfc\x7b\xbf\x42\x20\x08\x72\xbc\xd2\x07\x41\x72\x70\x61\x40\x2a\x0b\x1e\x55\xab\x91\xcf\x7e\x1d\x53\xcf\x01\xc5\x46\x8c\xe4\x06\xa2\x48\x41\x9c\x40\xbe\x8c\xce\x94\x57\x12\xa5\x0e\xe6\x34\x52\x41\x94\xb1\x8e\xe4\x50\x9e\x8f\x77\x77\x33\xfa\xbd\xdb\xdd\x9c\xc1\x42\xab\x9a\x12\xbb\x51\xad\x2e\x71\xb7\xcb\xa2\xe9\x0d\x36\x45\x93\xc0\xa2\xad\x0c\xda\xd3\x68\x75\xea\x99\xa2\xb6\xa7\x47\x12\xb1\xfb\xc3\xe9\x72\x36\x62\xb9\x29\x98\x6b\xc6\x0a\xab\xd6\x28\x27\x45\xa6\x1b\xe0\x6f\x80\xbb\x71\x9a\xf0\xad\xac\x99\x36\x2b\x56\x15\x95\x2a\x59\x95\xa0\xf8\x21\x42\xc1\x65\x83\xf2\x67\x57\x7d\x84\x88\x61\x3c\x3d\x77\x1b\x6e\x59\xd5\xa2\xc9\x24\x28\xd1\x6e\x94\x5e\x9f\x4c\xd2\xe5\x37\x89\x16\x98\x25\x71\x5b\x5d\x4d\xc8\xda\xa7\xda\xa2\x64\xb2\xc4\xaa\x4a\xa6\xa2\xcb\x1f\x66\xf0\x2f\x0f\x43\x95\x76\x7f\x33\x97\xc0\x82\x89\x34\xf6\x57\x7d\xce\xe7\x82\x87\xb7\x58\x37\x15\x5a\x04\xd3\x92\x49\x17\x6d\x55\x6d\x67\x70\xd5\x4a\xf8\xd4\x15\xa3\x5d\x17\xf7\x89\xd2\x82\xc6\x5a\x51\x66\x67\xda\x0a\x56\x55\xdb\xbe\x5d\x61\xc6\xa0\x1d\xb7\xc2\x80\x53\xdf\xfb\x14\xc6\x32\xdb\xa6\xca\x9f\xa7\x4f\x9f\x3e\x3d\x3f\x3f\x3f\x1f\xd8\x62\x20\xc3\xb5\xbb\x0a\x04\x40\x80\x59\x54\xdd\x5c\x02\x79\x8e\x8a\xa2\x6a\x38\x84\x61\x86\x57\xce\xb8\x93\x9d\x6e\xeb\xe1\xdd\x7c\x22\xa3\xf6\xfe\x30\x80\x1c\xb7\x78\x36\xbd\x29\xfd\xed\x91\x3c\x41\x83\xb1\x2c\x2a\x5c\xab\x39\x5d\xce\x7e\x70\x1d\x29\x45\x43\x2a\x5b\x76\xbb\x1b\x58\x28\x9d\xfb\x6e\x0e\x88\x0d\x05\x3d\x8a\x5c\xb6\xe9\x7c\x17\x5a\xc4\x17\x33\x31\x25\xeb\xba\xd1\x18\xec\x89\xde\x8a\x85\x29\xc1\x50\xa5\xdd\x1b\xcc\xa7\x9e\x1e\xab\xbd\x8a\xe7\xf0\x20\x03\xb3\xd9\x48\xc3\x1f\x48\x44\x85\xfc\x91\x22\xf6\x38\x73\x84\x8c\xd0\x69\x31\x3f\xf4\x10\x27\x08\xca\xb1\x41\xc9\x51\x96\xc7\xe8\xb3\xbf\x34\x24\x74\x1c\x9d\xfe\x15\x26\x95\xfa\xea\x41\x32\x5f\xe2\x39\x0f\x73\x41\xb1\xa7\xd5\xa9\xd2\x6f\x10\x49\xd5\x22\x21\xfa\xff\x31\x0d\x45\x79\x8e\x73\x94\x2f\xb3\xe0\xfd\x48\xfa\xc7\xd8\x30\xf3\x69\xa4\x38\x19\xb7\xe3\x5e\x44\x3f\xd1\x92\x13\x41\x98\x3a\xeb\x53\xd3\x9a\xe3\xc8\x27\x99\xae\x73\x1f\xe3\x05\x78\xab\xc9\x92\x81\xec\x30\x55\xfc\x79\xfe\x16\x65\x5c\xa8\x56\xf2\x22\xf0\x3b\x3e\x93\x7c\x45\x40\xc9\xd8\xb4\x59\x89\x72\x05\x1b\x37\xe4\x27\xbe\xb8\x2f\x4d\xed\x0a\xa1\x6c\xb5\x26\xc5\x44\x01\xe3\x5c\xc3\x25\x2d\xff\x9b\x30\x30\xe3\x64\x21\xfd\x65\xa7\x2f\x3f\xcd\x99\x68\x2e\x7f\x95\xef\x2a\x64\xc6\xcd\x7e\x6e\x05\x47\xc7\x14\xc1\x13\xef\x2e\x5d\x76\xc5\xdc\x0b\x98\xa6\x35\xda\x3a\xdf\xa3\xc5\xe4\x61\x2b\xed\x7a\x94\x0c\x42\x61\xee\x9a\x30\x86\x82\xad\x6a\x41\xa3\xb3\xfc\x86\x49\xdb\x8f\xd0\xc0\xae\x84\xf9\x07\x7c\xb5\x7d\xf6\xf6\xeb\x0c\x3a\x53\x1d\xf3\x7d\x91\x06\x8d\xdf\xc7\x38\x72\x74\x0d\x0f\x75\x5e\xcb\x16\x8d\xbd\xc9\xa0\x1b\x8d\x7c\x94\x84\xdd\xfa\x26\x53\xc6\xc0\x5e\x11\x16\x06\xa9\x09\x78\x58\xb2\x38\x87\x18\x0c\x51\x35\xba\x91\x13\x3f\x03\x56\x0d\xdb\xaf\xee\x5d\x13\x3b\xba\xbb\x11\x77\x35\x4c\x63\xf7\x18\x9f\xf5\xa1\x10\xb8\xd0\x58\xda\x10\x1e\xb5\xdf\x69\x4c\x2d\x50\x5e\x5f\x5d\x5d\x5e\x5d\x27\xf8\x3e\x3f\xfc\x0f\x3c\x38\xdc\x3b\x38\x3f\x1f\x29\x50\xb4\xde\x8f\xc4\x6b\xa9\x36\xb2\xb0\xdb\x66\x24\x93\xc6\x88\x4b\x50\xa4\xaa\x70\x6b\x06\xfd\xca\x00\x94\xac\xb6\x60\xda\xc6\x6f\x13\x9f\xb9\x59\xfd\xcc\x6c\x8d\xc5\x1a\xe6\x42\x72\x21\x97\x06\x94\x86\xa5\xb0\xab\x76\x3e\x2b\x55\xdd\x2d\x76\xc6\x2b\x2a\xcf\x70\x0c\xcd\xa4\xc2\x42\x2a\xeb\x83\xd9\xc8\xa8\xe0\xc1\xc0\x25\xe4\xe1\xe4\xd9\x45\x6a\x87\x8b\x0e\xf7\x37\x4b\x53\x6c\x85\x62\xaf\xd4\xc8\x6c\x4a\x7b\x6e\xdf\x0d\x0e\x64\x2f\x9c\x6e\x84\x5d\x81\x5b\x94\xc7\x21\xe1\x0b\x3a\x44\xad\x77\x3b\xb7\x81\xf4\x67\xa5\xe2\xfe\x80\x7e\x4c\x34\xfa\x03\x96\x7c\x8c\x1f\x65\x89\xdf\x8b\xf0\x7f\x12\x4b\x0b\x44\x5e\x08\x79\xab\xd6\x29\x86\xfe\xed\xd2\x2d\xbd\x78\x0f\xe6\x62\x36\x5d\x83\xcd\xca\x2d\x24\x03\xa7\x71\x23\xe7\x8f\xfe\x1c\x6e\xd7\xb8\xed\xc6\x8b\x35\x93\x9c\x59\xa5\xc7\x46\xa7\x1d\x8c\x9b\xc4\x7d\x8c\xca\xbc\xa1\x67\x12\xf0\x4c\xd2\xec\x1a\xc1\x29\xbf\x7e\x33\x74\xcf\x81\xe7\x32\x0a\x47\x76\x35\xec\x0c\x27\x89\xba\x87\x54\x0b\x53\x33\x5b\xa6\x36\xd3\x7b\xef\x88\x2e\x70\x47\x82\x8f\x3c\x27\x77\x1e\xbb\x53\xae\xd0\xcf\x5c\x1d\x11\x67\x56\x17\x75\x09\xa8\x1e\x20\xd9\x7b\x76\xfe\x34\x8a\x31\x2e\x44\x18\x8d\x91\x7b\xb1\x4a\xa4\xd4\x76\xe1\x4f\x29\xfa\x04\x93\x74\x83\x7f\xa2\x15\x7e\x13\x2f\xfd\xae\x7b\x8f\x2b\xa5\x1d\xef\x7e\x3f\xec\xee\xf8\x9f\x39\x7a\x8e\x2c\x4e\xa8\xfa\xea\x18\x86\x0e\xf4\xea\x9e\x82\xe7\xe8\x89\x01\x3f\x00\xf5\xaa\xc4\xcf\x16\xa5\x89\x4c\xe3\x67\x1b\x67\x06\x5f\x22\x8a\x29\x96\x98\x2a\xbf\xfa\xa7\xbc\x44\xbf\x66\x0e\x29\xa1\x5f\xb6\x84\x39\x66\x9f\x60\x29\xed\x8a\x72\xf0\x7c\x27\x19\x69\x75\x75\xbc\xc9\xfd\xb0\x94\x52\xd8\x6e\x07\x1f\xae\x7e\x74\xc2\xbb\xf1\xa9\xf3\x41\xfa\x17\xe9\xcc\x03\xdc\xe4\x65\x00\x62\xa4\x66\xd5\x42\xe9\x3a\xd9\x2f\xbc\x89\xe7\x63\x1c\xcc\xe0\xbd\xde\x02\x5b\x32\x21\x67\xb3\x49\xb2\xbf\x19\x25\xbb\x28\x55\xd6\x7c\x64\xbd\xfd\x9f\xeb\xcb\xb7\x20\x64\xd3\x5a\xe0\xcc\x32\x78\x13\xb4\xf1\xa4\xac\xf9\x13\x8a\x59\xe3\x94\x58\x23\x3a\x42\x1b\x9c\x17\xde\x59\x52\x1f\x32\x3c\xe0\x54\x71\xeb\xc2\x60\x83\xf3\xee\x0b\x8b\x97\xef\x2e\x3c\x58\x23\x08\xa6\x64\xd2\xd7\x0f\x73\xf4\xa9\x12\x79\xf8\xd8\xa3\xbf\x34\x83\x50\x99\xb6\x0d\x67\xf6\xe0\xe3\x08\x72\xb8\x52\xc9\x5b\xd4\xf6\x80\xbc\x55\x43\x1c\x53\x8a\x1d\x8a\x7b\x92\xa8\xd1\xd9\x9c\x8b\xef\xb1\x98\x25\xf4\x9c\x19\xe4\xa0\xe4\x30\xdc\xdc\x47\x35\xa9\x0a\x21\xcb\xaa\xe5\x78\xc0\x1e\x33\x7b\x56\x48\x2a\xe3\xe7\x97\x57\x6f\x2f\xde\x7e\x97\x5f\x87\xc6\x0b\xc7\x55\xa2\x1b\xa6\x65\x51\xaa\x9a\x32\x68\xa1\xd1\x26\xd3\xec\x15\x9d\xc5\xc1\x67\x59\x73\x27\xcb\xc2\xa2\xf6\x29\xfe\x85\x8f\x6d\x14\x38\x6e\xc6\xec\x1b\xe8\xb9\xcd\xd3\xd1\xc1\x63\xf8\xe5\xc5\x70\xfe\xca\xd1\x62\x69\x27\x26\x1f\x8e\x32\x15\x16\x1c\x1b\x8d\x25\x59\xba\xd0\xd8\x54\xac\x4c\x06\x0d\xca\xbc\x44\x47\x55\x3c\xd4\x13\x6e\xd1\xe7\x1d\x63\x2f\x52\x79\x9e\x36\xa2\xaa\xc0\x28\x25\xc9\x9b\x7a\x32\x67\xd0\x04\x4f\x31\xbe\xaa\x72\xc5\x30\x6e\xf6\x70\x1a\x8b\x2c\x53\x80\xa0\x8e\x53\xea\x21\xb3\x52\x6d\xc5\x89\x3d\x83\x76\x06\x7e\x94\xbd\xdf\x50\x12\xb4\xfb\xe5\x87\x5a\x59\x1c\x39\xf8\x09\x7b\x12\x5f\x9e\x02\xa5\xbe\xfb\x75\x1a\xc5\x27\x77\xff\x18\x92\x54\xab\x19\x76\x3b\x6a\xc1\x29\xa2\xee\x7e\xb4\x6a\x9c\x9c\xc4\xef\xb2\x86\x1f\x64\x4d\x33\x56\x89\x5a\xd8\x42\x2c\xa5\xd2\x49\x96\xa2\x5f\x87\xc0\xe2\xae\x38\xae\xdc\xaf\xc3\x5a\x4c\x18\x08\xe8\x72\xa9\x97\x2b\x26\x97\xc8\xe6\xc9\xcf\x68\x7e\xec\x28\x76\xc5\x9f\x89\x72\x57\x5b\x3f\x34\xeb\x70\xcc\xe0\x82\xc8\x53\x01\x9d\xe1\x0b\x8e\x03\x53\x54\x6a\x59\x18\xf1\x7b\x8a\x81\x4a\x2d\xaf\xc5\xef\x48\xba\xf5\x17\xf6\x24\xee\x5d\x94\x49\xb7\x67\xa5\x66\x63\x8e\x76\x83\x28\xe1\xb9\x6b\x2a\xbe\x79\x9e\xcd\x4a\x8d\xb5\xd2\xdb\x31\x6e\x3c\xc4\xa9\x0c\x7d\xf3\xed\xdf\x1d\x4b\x7f\xfb\xe6\xdb\x6c\x9e\xa8\xfe\x52\x6d\xaa\x78\x0b\xa7\x27\x31\xf3\xdc\xeb\xe7\xaf\xcf\xe9\xbf\x69\x7e\xdc\x78\xa0\x68\xb4\x6a\x50\x5b\x81\xa9\x39\x74\x0c\x83\x83\x78\xe5\xa7\x8e\x56\x0b\xec\xe6\x8e\x7e\xd6\xd0\x23\x8b\xf3\xc9\x87\x63\x62\x0c\x89\x5c\x39\x87\xa3\xc8\x28\x2c\xa8\xd6\x1a\xc1\x9d\x21\xde\x6b\x76\x2b\x0c\xcc\x5b\x51\xf1\xf1\xd9\x84\x13\xc5\x87\x03\x4d\x6e\x9b\x15\x0a\x3a\xef\xdf\x0b\x08\xf2\x20\xaa\x07\x6d\xbb\x89\xcb\xdd\xdd\x2c\xfc\x35\xaa\x9b\x3a\x24\x21\x43\xa3\x4b\xff\x60\xe5\x44\xd9\xec\x58\x8d\xbd\x88\x7f\x64\xa9\x30\x11\x5b\x91\x00\x45\x05\xc5\x41\x57\xf2\x40\x99\x92\x6c\x3c\x4e\xea\x36\x1c\xb7\x61\x96\xe1\x1a\x55\xfc\x2c\x4c\xf2\x33\xc5\x7b\x6d\xea\x5e\x88\x61\x95\x46\xc6\xb7\xe0\x51\x74\xb5\x93\xc1\x0a\x4b\x0b\x4c\x2a\xbb\x42\x3f\x9a\x9b\x66\x29\x4e\xac\xb2\x26\x50\xf7\xbb\xda\x58\x35\x94\x4a\x5a\xe6\x3e\x40\x93\x6a\x7a\x0a\xf6\xea\xf5\x3f\x3f\x7c\x97\x5d\x8c\x39\xe8\xe3\x2a\x31\x3e\xf7\x1f\x40\xde\xa2\x16\x8b\x54\x15\xf6\x93\x3b\x0c\x8d\xd4\x7d\x07\x0e\xda\x1d\x8f\xd4\x44\xa8\xdb\x66\xf9\xb5\xf7\xe4\xd6\xd2\x41\xbd\x98\xc2\x3a\xd8\xa3\x8d\xe2\x1d\x6e\xd3\xf2\x30\x1b\x64\xba\x5c\x11\xde\xb0\xbe\x28\xfc\x64\x37\x3d\x16\xba\x8e\x37\xba\xe5\x47\x77\xe3\xde\xee\xbe\xd7\x60\xaf\xba\x47\x37\x8f\xfe\x17\x00\x00\xff\xff\xfc\x20\x12\xb6\x5e\x33\x00\x00")
 
 func wski18nResourcesEn_usAllJsonBytes() ([]byte, error) {
 	return bindataRead(
@@ -112,7 +112,7 @@ func wski18nResourcesEn_usAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/en_US.all.json", size: 12953, mode: os.FileMode(420), modTime: time.Unix(1519054009, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/en_US.all.json", size: 13150, mode: os.FileMode(420), modTime: time.Unix(1519437986, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -132,7 +132,7 @@ func wski18nResourcesEs_esAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/es_ES.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/es_ES.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1518211603, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -152,7 +152,7 @@ func wski18nResourcesFr_frAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/fr_FR.all.json", size: 101, mode: os.FileMode(420), modTime: time.Unix(1515697090, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/fr_FR.all.json", size: 101, mode: os.FileMode(420), modTime: time.Unix(1518211603, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -172,7 +172,7 @@ func wski18nResourcesIt_itAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/it_IT.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/it_IT.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1518211603, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -192,7 +192,7 @@ func wski18nResourcesJa_jaAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/ja_JA.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/ja_JA.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1518211603, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -212,7 +212,7 @@ func wski18nResourcesKo_krAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/ko_KR.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/ko_KR.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1518211603, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -232,7 +232,7 @@ func wski18nResourcesPt_brAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/pt_BR.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/pt_BR.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1518211603, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -252,7 +252,7 @@ func wski18nResourcesZh_hansAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/zh_Hans.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/zh_Hans.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1518211603, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -272,7 +272,7 @@ func wski18nResourcesZh_hantAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/zh_Hant.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/zh_Hant.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1518211603, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
diff --git a/wski18n/resources/en_US.all.json b/wski18n/resources/en_US.all.json
index f9681e4c..b98062ad 100644
--- a/wski18n/resources/en_US.all.json
+++ b/wski18n/resources/en_US.all.json
@@ -255,6 +255,10 @@
     "id": "msg_prompt_undeploy",
     "translation": "Do you really want to undeploy this? (y/N): "
   },
+  {
+    "id": "msg_default_package",
+    "translation": "Package name default is reserved, all OpenWhisk entities under default package are deployed/undeployed directly under your namespace."
+  },
   {
     "id": "ERRORS",
     "translation": "================= ERRORS ==================="


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services