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/01/12 22:07:03 UTC

[GitHub] houshengbo closed pull request #687: Phase 3 of i18n readiness and conversion to IDs

houshengbo closed pull request #687: Phase 3 of i18n readiness and conversion to IDs
URL: https://github.com/apache/incubator-openwhisk-wskdeploy/pull/687
 
 
   

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 39d15790..b382af5c 100644
--- a/deployers/servicedeployer.go
+++ b/deployers/servicedeployer.go
@@ -143,7 +143,7 @@ func (deployer *ServiceDeployer) ConstructDeploymentPlan() error {
 		// Project Name in manifest/deployment file is mandatory for managed deployments
 		if deployer.ProjectName == "" {
 			errmsg := wski18n.T(wski18n.ID_ERR_MISSING_MANDATORY_KEY_X_key_X,
-				map[string]interface{}{"key": "project name"})
+				map[string]interface{}{"key": parsers.PROJECT_NAME})
 
 			return wskderrors.NewYAMLFileFormatError(manifest.Filepath, errmsg)
 		}
@@ -179,8 +179,11 @@ func (deployer *ServiceDeployer) ConstructDeploymentPlan() error {
 
 	// (TODO) delete this warning after deprecating application in manifest file
 	if manifest.Application.Name != "" {
-		wskprint.PrintOpenWhiskWarning(wski18n.T(wski18n.ID_WARN_DEPRECATED_KEY_REPLACED,
-			map[string]interface{}{"oldkey": "application", "newkey": "project", "filetype": "manifest"}))
+		wskprint.PrintOpenWhiskWarning(wski18n.T(wski18n.ID_WARN_DEPRECATED_KEY_REPLACED_X_oldkey_X_filetype_X_newkey_X,
+			map[string]interface{}{
+				"oldkey": parsers.YAML_KEY_APPLICATION,
+				"newkey": parsers.YAML_KEY_PROJECT,
+				"filetype": "manifest"}))
 	}
 
 	// process deployment file
@@ -194,8 +197,11 @@ func (deployer *ServiceDeployer) ConstructDeploymentPlan() error {
 
 		// (TODO) delete this warning after deprecating application in deployment file
 		if deploymentReader.DeploymentDescriptor.Application.Name != "" {
-			wskprint.PrintOpenWhiskWarning(wski18n.T(wski18n.ID_WARN_DEPRECATED_KEY_REPLACED,
-				map[string]interface{}{"oldkey": "application", "newkey": "project", "filetype": "deployment"}))
+			wskprint.PrintOpenWhiskWarning(wski18n.T(wski18n.ID_WARN_DEPRECATED_KEY_REPLACED_X_oldkey_X_filetype_X_newkey_X,
+				map[string]interface{}{
+					"oldkey": parsers.YAML_KEY_APPLICATION,
+					"newkey": parsers.YAML_KEY_PROJECT,
+					"filetype": "deployment"}))
 		}
 
 		// compare the name of the project
@@ -204,7 +210,7 @@ func (deployer *ServiceDeployer) ConstructDeploymentPlan() error {
 			if projectNameDeploy != projectName {
 				errorString := wski18n.T(wski18n.ID_ERR_MISMATCH_NAME_X_key_X_dname_X_dpath_X_mname_X_moath_X,
 					map[string]interface{}{
-						"key": "project",
+						"key": parsers.YAML_KEY_PROJECT,
 						"dname": projectNameDeploy,
 						"dpath": deployer.DeploymentPath,
 						"mname": projectName,
@@ -261,8 +267,11 @@ func (deployer *ServiceDeployer) ConstructUnDeploymentPlan() (*DeploymentProject
 
 	// (TODO) delete this warning after deprecating application in manifest file
 	if manifest.Application.Name != "" {
-		wskprint.PrintOpenWhiskWarning(wski18n.T(wski18n.ID_WARN_DEPRECATED_KEY_REPLACED,
-			map[string]interface{}{"oldkey": "application", "newkey": "project", "filetype": "manifest"}))
+		wskprint.PrintOpenWhiskWarning(wski18n.T(wski18n.ID_WARN_DEPRECATED_KEY_REPLACED_X_oldkey_X_filetype_X_newkey_X,
+			map[string]interface{}{
+				"oldkey": parsers.YAML_KEY_APPLICATION,
+				"newkey": parsers.YAML_KEY_PROJECT,
+				"filetype": "manifest"}))
 	}
 
 	// process deployment file
@@ -275,8 +284,11 @@ func (deployer *ServiceDeployer) ConstructUnDeploymentPlan() (*DeploymentProject
 
 		// (TODO) delete this warning after deprecating application in deployment file
 		if deploymentReader.DeploymentDescriptor.Application.Name != "" {
-			wskprint.PrintOpenWhiskWarning(wski18n.T(wski18n.ID_WARN_DEPRECATED_KEY_REPLACED,
-				map[string]interface{}{"oldkey": "application", "newkey": "project", "filetype": "deployment"}))
+			wskprint.PrintOpenWhiskWarning(wski18n.T(wski18n.ID_WARN_DEPRECATED_KEY_REPLACED_X_oldkey_X_filetype_X_newkey_X,
+				map[string]interface{}{
+					"oldkey": parsers.YAML_KEY_APPLICATION,
+					"newkey": parsers.YAML_KEY_PROJECT,
+					"filetype": "deployment"}))
 		}
 
 		// compare the name of the application
@@ -285,7 +297,7 @@ func (deployer *ServiceDeployer) ConstructUnDeploymentPlan() (*DeploymentProject
 			if projectNameDeploy != projectName {
 				errorString := wski18n.T(wski18n.ID_ERR_MISMATCH_NAME_X_key_X_dname_X_dpath_X_mname_X_moath_X,
 					map[string]interface{}{
-						"key": "project",
+						"key": parsers.YAML_KEY_PROJECT,
 						"dname": projectNameDeploy,
 						"dpath": deployer.DeploymentPath,
 						"mname": projectName,
@@ -530,9 +542,9 @@ func (deployer *ServiceDeployer) RefreshManagedActions(packageName string, ma ma
 
 				output := wski18n.T(wski18n.ID_MSG_MANAGED_FOUND_DELETED_X_key_X_name_X_project_X,
 					map[string]interface{}{
-						"key": "action",
-						"name": actionName,
-						"project": aa[utils.OW_PROJECT_NAME]})
+						wski18n.KEY_KEY: parsers.YAML_KEY_ACTION,
+						wski18n.KEY_NAME: actionName,
+						wski18n.KEY_PROJECT: aa[utils.OW_PROJECT_NAME]})
 				wskprint.PrintOpenWhiskWarning(output)
 
 				var err error
@@ -571,7 +583,7 @@ func (deployer *ServiceDeployer) RefreshManagedTriggers(ma map[string]interface{
 				// we have found a trigger which was earlier part of the current project
 				output := wski18n.T(wski18n.ID_MSG_MANAGED_FOUND_DELETED_X_key_X_name_X_project_X,
 					map[string]interface{}{
-						"key": "trigger",
+						"key": parsers.YAML_KEY_TRIGGER,
 						"name": trigger.Name,
 						"project": ma[utils.OW_PROJECT_NAME]})
 				wskprint.PrintOpenWhiskWarning(output)
@@ -623,7 +635,7 @@ func (deployer *ServiceDeployer) RefreshManagedPackages(ma map[string]interface{
 			if pa[utils.OW_PROJECT_NAME] == ma[utils.OW_PROJECT_NAME] && pa[utils.OW_PROJECT_HASH] != ma[utils.OW_PROJECT_HASH] {
 				output := wski18n.T(wski18n.ID_MSG_MANAGED_FOUND_DELETED_X_key_X_name_X_project_X,
 					map[string]interface{}{
-						"key": "package",
+						"key": parsers.YAML_KEY_PACKAGE,
 						"name": pkg.Name,
 						"project": pa[utils.OW_PROJECT_NAME]})
 				wskprint.PrintOpenWhiskWarning(output)
@@ -739,13 +751,13 @@ func (deployer *ServiceDeployer) createBinding(packa *whisk.BindingPackage) erro
 		return createWhiskClientError(err.(*whisk.WskError), response, "package binding", true)
 	}
 
-	displayPostprocessingInfo("package binding", packa.Name, true)
+	displayPostprocessingInfo(parsers.PACKAGE_BINDING, packa.Name, true)
 	return nil
 }
 
 func (deployer *ServiceDeployer) createPackage(packa *whisk.Package) error {
 
-	displayPreprocessingInfo("package", packa.Name, true)
+	displayPreprocessingInfo(parsers.YAML_KEY_PACKAGE, packa.Name, true)
 
 	var err error
 	var response *http.Response
@@ -754,16 +766,16 @@ func (deployer *ServiceDeployer) createPackage(packa *whisk.Package) error {
 		return err
 	})
 	if err != nil {
-		return createWhiskClientError(err.(*whisk.WskError), response, "package", true)
+		return createWhiskClientError(err.(*whisk.WskError), response, parsers.YAML_KEY_PACKAGE, true)
 	}
 
-	displayPostprocessingInfo("package", packa.Name, true)
+	displayPostprocessingInfo(parsers.YAML_KEY_PACKAGE, packa.Name, true)
 	return nil
 }
 
 func (deployer *ServiceDeployer) createTrigger(trigger *whisk.Trigger) error {
 
-	displayPreprocessingInfo("trigger", trigger.Name, true)
+	displayPreprocessingInfo(parsers.YAML_KEY_TRIGGER, trigger.Name, true)
 
 	var err error
 	var response *http.Response
@@ -772,16 +784,16 @@ func (deployer *ServiceDeployer) createTrigger(trigger *whisk.Trigger) error {
 		return err
 	})
 	if err != nil {
-		return createWhiskClientError(err.(*whisk.WskError), response, "trigger", true)
+		return createWhiskClientError(err.(*whisk.WskError), response, parsers.YAML_KEY_TRIGGER, true)
 	}
 
-	displayPostprocessingInfo("trigger", trigger.Name, true)
+	displayPostprocessingInfo(parsers.YAML_KEY_TRIGGER, trigger.Name, true)
 	return nil
 }
 
 func (deployer *ServiceDeployer) createFeedAction(trigger *whisk.Trigger, feedName string) error {
 
-	displayPreprocessingInfo("trigger feed", trigger.Name, true)
+	displayPreprocessingInfo(parsers.TRIGGER_FEED, trigger.Name, true)
 
 	// to hold and modify trigger parameters, not passed by ref?
 	params := make(map[string]interface{})
@@ -791,6 +803,7 @@ func (deployer *ServiceDeployer) createFeedAction(trigger *whisk.Trigger, feedNa
 		params[keyVal.Key] = keyVal.Value
 	}
 
+	// TODO() defone keys and lifecylce operation names as const
 	params["authKey"] = deployer.ClientConfig.AuthToken
 	params["lifecycleEvent"] = "CREATE"
 	params["triggerName"] = "/" + deployer.Client.Namespace + "/" + trigger.Name
@@ -821,7 +834,7 @@ func (deployer *ServiceDeployer) createFeedAction(trigger *whisk.Trigger, feedNa
 		return err
 	})
 	if err != nil {
-		return createWhiskClientError(err.(*whisk.WskError), response, "trigger feed", true)
+		return createWhiskClientError(err.(*whisk.WskError), response, parsers.TRIGGER_FEED, true)
 	} else {
 
 		qName, err := utils.ParseQualifiedName(feedName, deployer.ClientConfig.Namespace)
@@ -846,16 +859,16 @@ func (deployer *ServiceDeployer) createFeedAction(trigger *whisk.Trigger, feedNa
 				return err
 			})
 
-			return createWhiskClientError(err.(*whisk.WskError), response, "trigger feed", false)
+			return createWhiskClientError(err.(*whisk.WskError), response, parsers.TRIGGER_FEED, false)
 		}
 	}
 
-	displayPostprocessingInfo("trigger feed", trigger.Name, true)
+	displayPostprocessingInfo(parsers.TRIGGER_FEED, trigger.Name, true)
 	return nil
 }
 
 func (deployer *ServiceDeployer) createRule(rule *whisk.Rule) error {
-	displayPreprocessingInfo("rule", rule.Name, true)
+	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)
@@ -879,10 +892,10 @@ func (deployer *ServiceDeployer) createRule(rule *whisk.Rule) error {
 	})
 
 	if err != nil {
-		return createWhiskClientError(err.(*whisk.WskError), response, "rule", true)
+		return createWhiskClientError(err.(*whisk.WskError), response, parsers.YAML_KEY_RULE, true)
 	}
 
-	displayPostprocessingInfo("rule", rule.Name, true)
+	displayPostprocessingInfo(parsers.YAML_KEY_RULE, rule.Name, true)
 	return nil
 }
 
@@ -894,7 +907,7 @@ func (deployer *ServiceDeployer) createAction(pkgname string, action *whisk.Acti
 		action.Name = strings.Join([]string{pkgname, action.Name}, "/")
 	}
 
-	displayPreprocessingInfo("action", action.Name, true)
+	displayPreprocessingInfo(parsers.YAML_KEY_ACTION, action.Name, true)
 
 	var err error
 	var response *http.Response
@@ -904,17 +917,17 @@ func (deployer *ServiceDeployer) createAction(pkgname string, action *whisk.Acti
 	})
 
 	if err != nil {
-		return createWhiskClientError(err.(*whisk.WskError), response, "action", true)
+		return createWhiskClientError(err.(*whisk.WskError), response, parsers.YAML_KEY_ACTION, true)
 	}
 
-	displayPostprocessingInfo("action", action.Name, true)
+	displayPostprocessingInfo(parsers.YAML_KEY_ACTION, action.Name, true)
 	return nil
 }
 
 // create api (API Gateway functionality)
 func (deployer *ServiceDeployer) createApi(api *whisk.ApiCreateRequest) error {
 
-	displayPreprocessingInfo("api", api.ApiDoc.ApiName, true)
+	displayPreprocessingInfo(parsers.YAML_KEY_API, api.ApiDoc.ApiName, true)
 
 	var err error
 	var response *http.Response
@@ -926,10 +939,10 @@ func (deployer *ServiceDeployer) createApi(api *whisk.ApiCreateRequest) error {
 	})
 
 	if err != nil {
-		return createWhiskClientError(err.(*whisk.WskError), response, "api", true)
+		return createWhiskClientError(err.(*whisk.WskError), response, parsers.YAML_KEY_API, true)
 	}
 
-	displayPostprocessingInfo("api", api.ApiDoc.ApiName, true)
+	displayPostprocessingInfo(parsers.YAML_KEY_API, api.ApiDoc.ApiName, true)
 	return nil
 }
 
@@ -1043,7 +1056,7 @@ func (deployer *ServiceDeployer) UnDeployDependencies() error {
 							return err
 						})
 						if err != nil {
-							return createWhiskClientError(err.(*whisk.WskError), response, "package binding", false)
+							return createWhiskClientError(err.(*whisk.WskError), response, parsers.PACKAGE_BINDING, false)
 						}
 					}
 				}
@@ -1136,7 +1149,7 @@ func (deployer *ServiceDeployer) UnDeployRules(deployment *DeploymentProject) er
 
 func (deployer *ServiceDeployer) deletePackage(packa *whisk.Package) error {
 
-	displayPreprocessingInfo("package", packa.Name, false)
+	displayPreprocessingInfo(parsers.YAML_KEY_PACKAGE, packa.Name, false)
 
 	if _, _, ok := deployer.Client.Packages.Get(packa.Name); ok == nil {
 		var err error
@@ -1147,16 +1160,16 @@ func (deployer *ServiceDeployer) deletePackage(packa *whisk.Package) error {
 		})
 
 		if err != nil {
-			return createWhiskClientError(err.(*whisk.WskError), response, "package", false)
+			return createWhiskClientError(err.(*whisk.WskError), response, parsers.YAML_KEY_PACKAGE, false)
 		}
 	}
-	displayPostprocessingInfo("package", packa.Name, false)
+	displayPostprocessingInfo(parsers.YAML_KEY_PACKAGE, packa.Name, false)
 	return nil
 }
 
 func (deployer *ServiceDeployer) deleteTrigger(trigger *whisk.Trigger) error {
 
-	displayPreprocessingInfo("trigger", trigger.Name, false)
+	displayPreprocessingInfo(parsers.YAML_KEY_TRIGGER, trigger.Name, false)
 
 	var err error
 	var response *http.Response
@@ -1166,16 +1179,17 @@ func (deployer *ServiceDeployer) deleteTrigger(trigger *whisk.Trigger) error {
 	})
 
 	if err != nil {
-		return createWhiskClientError(err.(*whisk.WskError), response, "trigger", false)
+		return createWhiskClientError(err.(*whisk.WskError), response, parsers.YAML_KEY_TRIGGER, false)
 	}
 
-	displayPostprocessingInfo("trigger", trigger.Name, false)
+	displayPostprocessingInfo(parsers.YAML_KEY_TRIGGER, trigger.Name, false)
 	return nil
 }
 
 func (deployer *ServiceDeployer) deleteFeedAction(trigger *whisk.Trigger, feedName string) error {
 
 	params := make(whisk.KeyValueArr, 0)
+	// TODO() define keys and operations as const
 	params = append(params, whisk.KeyValue{Key: "authKey", Value: deployer.ClientConfig.AuthToken})
 	params = append(params, whisk.KeyValue{Key: "lifecycleEvent", Value: "DELETE"})
 	params = append(params, whisk.KeyValue{Key: "triggerName", Value: "/" + deployer.Client.Namespace + "/" + trigger.Name})
@@ -1202,7 +1216,7 @@ func (deployer *ServiceDeployer) deleteFeedAction(trigger *whisk.Trigger, feedNa
 
 	if err != nil {
 		wskErr := err.(*whisk.WskError)
-		errString := wski18n.T("Failed to invoke the feed when deleting trigger feed with error message: {{.err}} and error code: {{.code}}.\n",
+		errString := wski18n.T(wski18n.ID_ERR_FEED_INVOKE_X_err_X_code_X,
 			map[string]interface{}{"err": wskErr.Error(), "code": strconv.Itoa(wskErr.ExitCode)})
 		whisk.Debug(whisk.DbgError, errString)
 		return wskderrors.NewWhiskClientError(wskErr.Error(), wskErr.ExitCode, response)
@@ -1216,7 +1230,7 @@ func (deployer *ServiceDeployer) deleteFeedAction(trigger *whisk.Trigger, feedNa
 		})
 
 		if err != nil {
-			return createWhiskClientError(err.(*whisk.WskError), response, "trigger", false)
+			return createWhiskClientError(err.(*whisk.WskError), response, parsers.YAML_KEY_TRIGGER, false)
 		}
 	}
 
@@ -1225,7 +1239,7 @@ func (deployer *ServiceDeployer) deleteFeedAction(trigger *whisk.Trigger, feedNa
 
 func (deployer *ServiceDeployer) deleteRule(rule *whisk.Rule) error {
 
-	displayPreprocessingInfo("rule", rule.Name, false)
+	displayPreprocessingInfo(parsers.YAML_KEY_RULE, rule.Name, false)
 
 	var err error
 	var response *http.Response
@@ -1235,9 +1249,9 @@ func (deployer *ServiceDeployer) deleteRule(rule *whisk.Rule) error {
 	})
 
 	if err != nil {
-		return createWhiskClientError(err.(*whisk.WskError), response, "rule", false)
+		return createWhiskClientError(err.(*whisk.WskError), response, parsers.YAML_KEY_RULE, false)
 	}
-	displayPostprocessingInfo("rule", rule.Name, false)
+	displayPostprocessingInfo(parsers.YAML_KEY_RULE, rule.Name, false)
 	return nil
 }
 
@@ -1249,7 +1263,7 @@ func (deployer *ServiceDeployer) deleteAction(pkgname string, action *whisk.Acti
 		action.Name = strings.Join([]string{pkgname, action.Name}, "/")
 	}
 
-	displayPreprocessingInfo("action", action.Name, false)
+	displayPreprocessingInfo(parsers.YAML_KEY_ACTION, action.Name, false)
 
 	if _, _, ok := deployer.Client.Actions.Get(action.Name); ok == nil {
 		var err error
@@ -1260,11 +1274,11 @@ func (deployer *ServiceDeployer) deleteAction(pkgname string, action *whisk.Acti
 		})
 
 		if err != nil {
-			return createWhiskClientError(err.(*whisk.WskError), response, "action", false)
+			return createWhiskClientError(err.(*whisk.WskError), response, parsers.YAML_KEY_ACTION, false)
 
 		}
 	}
-	displayPostprocessingInfo("action", action.Name, false)
+	displayPostprocessingInfo(parsers.YAML_KEY_ACTION, action.Name, false)
 	return nil
 }
 
@@ -1311,6 +1325,7 @@ func (deployer *ServiceDeployer) printDeploymentAssets(assets *DeploymentProject
 	// TODO() move to separate function and suppress using some flag
 	wskprint.PrintlnOpenWhiskOutput("         ____      ___                   _    _ _     _     _\n        /\\   \\    / _ \\ _ __   ___ _ __ | |  | | |__ (_)___| | __\n   /\\  /__\\   \\  | | | | '_ \\ / _ \\ '_ \\| |  | | '_ \\| / __| |/ /\n  /  \\____ \\  /  | |_| | |_) |  __/ | | | |/\\| | | | | \\__ \\   <\n  \\   \\  /  \\/    \\___/| .__/ \\___|_| |_|__/\\__|_| |_|_|___/_|\\_\\ \n   \\___\\/              |_|\n")
 
+	// TODO() review format
 	wskprint.PrintlnOpenWhiskOutput("Packages:")
 	for _, pack := range assets.Packages {
 		wskprint.PrintlnOpenWhiskOutput("Name: " + pack.Package.Name)
diff --git a/parsers/manifest_parser.go b/parsers/manifest_parser.go
index 5aac11fe..82a4b526 100644
--- a/parsers/manifest_parser.go
+++ b/parsers/manifest_parser.go
@@ -23,14 +23,13 @@ import (
 	"os"
 	"path"
 	"strings"
-
 	"encoding/base64"
-
 	"fmt"
+	"gopkg.in/yaml.v2"
+
 	"github.com/apache/incubator-openwhisk-client-go/whisk"
 	"github.com/apache/incubator-openwhisk-wskdeploy/utils"
 	"github.com/apache/incubator-openwhisk-wskdeploy/wski18n"
-	"gopkg.in/yaml.v2"
 	"github.com/apache/incubator-openwhisk-wskdeploy/wskderrors"
 	"github.com/apache/incubator-openwhisk-wskdeploy/wskenv"
 	"github.com/apache/incubator-openwhisk-wskdeploy/wskprint"
@@ -78,6 +77,7 @@ func (dm *YAMLParser) Unmarshal(input []byte, manifest *YAML) error {
 func (dm *YAMLParser) marshal(manifest *YAML) (output []byte, err error) {
 	data, err := yaml.Marshal(manifest)
 	if err != nil {
+		// TODO() i18n
 		fmt.Printf("err happened during marshal :%v", err)
 		return nil, err
 	}
@@ -136,7 +136,8 @@ func (dm *YAMLParser) ComposeDependencies(pkg Package, projectPath string, fileP
 	for key, dependency := range pkg.Dependencies {
 		version := dependency.Version
 		if version == "" {
-			version = "master"
+			// TODO() interactive ask for branch, AND consider YAML specification to allow key for branch
+			version = YAML_VALUE_BRANCH_MASTER
 		}
 
 		location := dependency.Location
@@ -151,6 +152,7 @@ func (dm *YAMLParser) ComposeDependencies(pkg Package, projectPath string, fileP
 			isBinding = true
 		} else if utils.LocationIsGithub(location) {
 
+			// TODO() define const for the protocol prefix, etc.
 			if !strings.HasPrefix(location, "https://") && !strings.HasPrefix(location, "http://") {
 				location = "https://" + dependency.Location
 			}
@@ -240,23 +242,42 @@ func (dm *YAMLParser) ComposePackage(pkg Package, packageName string, filePath s
 	//Version is a mandatory value
 	//If it is an empty string, it will be set to default value
 	//And print an warning message
+	// TODO(#673) implement STRICT flag
 	if pkg.Version == "" {
-		warningString := wski18n.T("WARNING: Mandatory field Package Version must be set.\n")
-		whisk.Debug(whisk.DbgWarn, warningString)
-		warningString = wski18n.T("WARNING: Package Version is not saved in the current wskdeploy version.\n")
-		whisk.Debug(whisk.DbgWarn, warningString)
-		pkg.Version = "0.0.1"
+		warningString := wski18n.T(
+			wski18n.ID_WARN_MISSING_MANDATORY_KEY_X_key_X_value_X,
+			map[string]interface{}{
+				wski18n.KEY_KEY: PACKAGE_VERSION,
+				wski18n.KEY_VALUE: DEFAULT_PACKAGE_VERSION})
+		wskprint.PrintOpenWhiskWarning(warningString)
+
+		warningString = wski18n.T(
+			wski18n.ID_WARN_KEYVALUE_NOT_SAVED_X_key_X,
+			map[string]interface{}{wski18n.KEY_KEY: PACKAGE_VERSION})
+
+		wskprint.PrintOpenWhiskWarning(warningString)
+		pkg.Version = DEFAULT_PACKAGE_VERSION
 	}
 
 	//License is a mandatory value
 	//set license to unknown if it is an empty string
 	//And print an warning message
+	// TODO(#673) implement STRICT flag
 	if pkg.License == "" {
-		warningString := wski18n.T("WARNING: Mandatory field Package License must be set.\n")
-		whisk.Debug(whisk.DbgWarn, warningString)
-		warningString = wski18n.T("WARNING: Package License is not saved in the current wskdeploy version.\n")
-		whisk.Debug(whisk.DbgWarn, warningString)
-		pkg.License = "unlicensed"
+		warningString := wski18n.T(
+			wski18n.ID_WARN_MISSING_MANDATORY_KEY_X_key_X_value_X,
+			map[string]interface{}{
+				wski18n.KEY_KEY: PACKAGE_LICENSE,
+				wski18n.KEY_VALUE: DEFAULT_PACKAGE_LICENSE})
+		wskprint.PrintOpenWhiskWarning(warningString)
+
+		warningString = wski18n.T(
+			wski18n.ID_WARN_KEYVALUE_NOT_SAVED_X_key_X,
+			map[string]interface{}{wski18n.KEY_KEY: PACKAGE_VERSION})
+
+		wskprint.PrintOpenWhiskWarning(warningString)
+
+		pkg.License = DEFAULT_PACKAGE_LICENSE
 	} else {
 		utils.CheckLicense(pkg.License)
 	}
@@ -334,7 +355,7 @@ func (dm *YAMLParser) ComposeSequences(namespace string, sequences map[string]Se
 	for key, sequence := range sequences {
 		wskaction := new(whisk.Action)
 		wskaction.Exec = new(whisk.Exec)
-		wskaction.Exec.Kind = "sequence"
+		wskaction.Exec.Kind = YAML_KEY_SEQUENCE
 		actionList := strings.Split(sequence.Actions, ",")
 
 		var components []string
@@ -402,6 +423,7 @@ func (dm *YAMLParser) ComposeActionsFromAllPackages(manifest *YAML, filePath str
 
 func (dm *YAMLParser) ComposeActions(filePath string, actions map[string]Action, packageName string, ma whisk.KeyValue) ([]utils.ActionRecord, error) {
 
+	// TODO() i18n
 	const RUNTIME_ERR_MESSAGE = "Please specify any of the supported runtime for zip actions in manifest YAML."
 	var errorParser error
 	var ext string
@@ -431,6 +453,7 @@ func (dm *YAMLParser) ComposeActions(filePath string, actions map[string]Action,
 			filePath := strings.TrimRight(filePath, splitFilePath[len(splitFilePath)-1]) + action.Function
 
 			if utils.IsDirectory(filePath) {
+				// TODO() define ext as const
 				zipName := filePath + ".zip"
 				err := utils.NewZipWritter(filePath, zipName).Zip()
 				if err != nil {
@@ -459,6 +482,7 @@ func (dm *YAMLParser) ComposeActions(filePath string, actions map[string]Action,
 				// and its not explicitly specified in the manifest YAML file
 				// and action source is not a zip file
 				if len(kind) == 0 && len(action.Runtime) == 0 && ext != utils.ZIP_FILE_EXTENSION {
+					// TODO() i18n
 					errMessage := "ERROR: Failed to discover runtime from the action source files. " + RUNTIME_ERR_MESSAGE
 					return nil, wskderrors.NewInvalidRuntimeError(errMessage, splitFilePath[len(splitFilePath)-1], action.Name, "Not Specified in Manifest YAML", utils.ListOfSupportedRuntimes(utils.SupportedRunTimes))
 				}
@@ -475,6 +499,7 @@ func (dm *YAMLParser) ComposeActions(filePath string, actions map[string]Action,
 					code = base64.StdEncoding.EncodeToString([]byte(dat))
 				}
 				if ext == utils.ZIP_FILE_EXTENSION && len(action.Runtime) == 0 {
+					// TODO() i18n
 					errMessage := "ERROR: Runtime is missing for zip action. " + RUNTIME_ERR_MESSAGE
 					return nil, wskderrors.NewInvalidRuntimeError(errMessage, splitFilePath[len(splitFilePath)-1], action.Name, "Not Specified in Manifest YAML", utils.ListOfSupportedRuntimes(utils.SupportedRunTimes))
 				}
@@ -581,6 +606,7 @@ func (dm *YAMLParser) ComposeActions(filePath string, actions map[string]Action,
 
 		// TODO{} add outputs as annotations (work to discuss officially supporting for compositions)
 		if len(keyValArr) > 0 {
+			// TODO() ?
 			//wskaction.Annotations  // TBD
 		}
 
@@ -605,6 +631,7 @@ func (dm *YAMLParser) ComposeActions(filePath string, actions map[string]Action,
 		/*
   		 *  Web Export
   		 */
+		// TODO() add boolean value const
 		if action.Webexport == "true" {
 			wskaction.Annotations, errorParser = utils.WebAction("yes", listOfAnnotations, false)
 			if errorParser != nil {
@@ -617,36 +644,40 @@ func (dm *YAMLParser) ComposeActions(filePath string, actions map[string]Action,
  		 */
 		if action.Limits!=nil {
 			wsklimits :=  new(whisk.Limits)
+
+			// TODO() use LIMITS_SUPPORTED in yamlparser to enumerata through instead of hardcoding
+			// perhaps change into a tuple
 			if utils.LimitsTimeoutValidation(action.Limits.Timeout) {
 				wsklimits.Timeout = action.Limits.Timeout
 			} else {
 				warningString := wski18n.T(wski18n.ID_MSG_ACTION_LIMIT_IGNORED_X_limit_X,
-					map[string]interface{}{"limit": "timeout"})
+					map[string]interface{}{wski18n.KEY_LIMIT: LIMIT_VALUE_TIMEOUT})
 				wskprint.PrintOpenWhiskWarning(warningString)
 			}
 			if utils.LimitsMemoryValidation(action.Limits.Memory) {
 				wsklimits.Memory = action.Limits.Memory
 			} else {
 				warningString := wski18n.T(wski18n.ID_MSG_ACTION_LIMIT_IGNORED_X_limit_X,
-					map[string]interface{}{"limit": "memorySize"})
+					map[string]interface{}{wski18n.KEY_LIMIT: LIMIT_VALUE_MEMORY_SIZE})
 				wskprint.PrintOpenWhiskWarning(warningString)
 			}
 			if utils.LimitsLogsizeValidation(action.Limits.Logsize) {
 				wsklimits.Logsize = action.Limits.Logsize
 			} else {
 				warningString := wski18n.T(wski18n.ID_MSG_ACTION_LIMIT_IGNORED_X_limit_X,
-					map[string]interface{}{"limit": "logSize"})
+					map[string]interface{}{wski18n.KEY_LIMIT: LIMIT_VALUE_LOG_SIZE})
 				wskprint.PrintOpenWhiskWarning(warningString)
 			}
 			if wsklimits.Timeout!=nil || wsklimits.Memory!=nil || wsklimits.Logsize!=nil {
 				wskaction.Limits = wsklimits
 			}
 
-			//emit warning errors if these limits are not nil
-			utils.NotSupportLimits(action.Limits.ConcurrentActivations,"concurrentActivations")
-			utils.NotSupportLimits(action.Limits.UserInvocationRate,"userInvocationRate")
-			utils.NotSupportLimits(action.Limits.CodeSize,"codeSize")
-			utils.NotSupportLimits(action.Limits.ParameterSize,"parameterSize")
+			// TODO() use LIMITS_UNSUPPORTED in yamlparser to enumerata through instead of hardcoding
+			// emit warning errors if these limits are not nil
+			utils.NotSupportLimits(action.Limits.ConcurrentActivations, LIMIT_VALUE_CONCURRENT_ACTIVATIONS)
+			utils.NotSupportLimits(action.Limits.UserInvocationRate, LIMIT_VALUE_USER_INVOCATION_RATE)
+			utils.NotSupportLimits(action.Limits.CodeSize, LIMIT_VALUE_CODE_SIZE)
+			utils.NotSupportLimits(action.Limits.ParameterSize, LIMIT_VALUE_PARAMETER_SIZE)
 		}
 
 		wskaction.Name = key
@@ -696,10 +727,16 @@ func (dm *YAMLParser) ComposeTriggers(filePath string, pkg Package, ma whisk.Key
 		pub := false
 		wsktrigger.Publish = &pub
 
-		//print warning information when .Source is not empty
+		// print warning information when .Source key's value is not empty
 		if trigger.Source != "" {
-			warningString := wski18n.T("WARNING: The 'source' YAML key in trigger entity is deprecated. Please use 'feed' instead as described in specifications.\n")
-			whisk.Debug(whisk.DbgWarn, warningString)
+			// TODO() i18n use const for keys and values on string
+			warningString := wski18n.T(
+				wski18n.ID_WARN_DEPRECATED_KEY_REPLACED_X_oldkey_X_filetype_X_newkey_X,
+				map[string]interface{}{
+					wski18n.KEY_OLD: "source",
+					wski18n.KEY_NEW: YAML_KEY_FEED,
+					wski18n.KEY_FILE_TYPE: "manifest"})
+			wskprint.PrintOpenWhiskWarning(warningString)
 		}
 		if trigger.Feed == "" {
 			trigger.Feed = trigger.Source
@@ -709,7 +746,7 @@ func (dm *YAMLParser) ComposeTriggers(filePath string, pkg Package, ma whisk.Key
 		if trigger.Feed != "" {
 			var keyVal whisk.KeyValue
 
-			keyVal.Key = "feed"
+			keyVal.Key = YAML_KEY_FEED
 			keyVal.Value = trigger.Feed
 
 			keyValArr = append(keyValArr, keyVal)
diff --git a/parsers/yamlparser.go b/parsers/yamlparser.go
index 58cd46be..fd7a24c0 100644
--- a/parsers/yamlparser.go
+++ b/parsers/yamlparser.go
@@ -22,7 +22,66 @@ import (
 	"github.com/apache/incubator-openwhisk-wskdeploy/wskenv"
 )
 
-// structs that denotes the sample manifest.yaml, wrapped yaml.v2
+// YAML schema key names
+const(
+	YAML_KEY_PROJECT 	= "project"
+	YAML_KEY_APPLICATION 	= "application"	// deprecated
+	YAML_KEY_PACKAGE 	= "package"
+	YAML_KEY_ACTION 	= "action"
+	YAML_KEY_TRIGGER 	= "trigger"
+	YAML_KEY_RULE 		= "rule"
+	YAML_KEY_FEED 		= "feed"
+	YAML_KEY_API 		= "api"
+	YAML_KEY_SEQUENCE 	= "sequence"
+)
+
+// descriptive key names
+const (
+	PROJECT_NAME	= "project name"
+	PACKAGE_BINDING = "package binding"
+	PACKAGE_VERSION = "package version"
+	PACKAGE_LICENSE = "package license"
+	TRIGGER_FEED	= "trigger feed"
+)
+
+// YAML schema key values
+const(
+	YAML_VALUE_BRANCH_MASTER	= "master"
+)
+
+// default values
+const(
+	DEFAULT_PACKAGE_LICENSE	= "unlicensed"
+	DEFAULT_PACKAGE_VERSION	= "0.0.1"
+)
+
+// Known Limit values
+const(
+	// supported
+	LIMIT_VALUE_TIMEOUT			= "timeout"
+	LIMIT_VALUE_MEMORY_SIZE			= "memorySize"
+	LIMIT_VALUE_LOG_SIZE			= "logSize"
+	// unsupported
+	LIMIT_VALUE_CONCURRENT_ACTIVATIONS	= "concurrentActivations"
+	LIMIT_VALUE_USER_INVOCATION_RATE	= "userInvocationRate"
+	LIMIT_VALUE_CODE_SIZE			= "codeSize"
+	LIMIT_VALUE_PARAMETER_SIZE		= "parameterSize"
+)
+
+var LIMITS_SUPPORTED = [](string){
+	LIMIT_VALUE_TIMEOUT,
+	LIMIT_VALUE_MEMORY_SIZE,
+	LIMIT_VALUE_LOG_SIZE,
+}
+
+var LIMITS_UNSUPPORTED = [](string){
+	LIMIT_VALUE_CONCURRENT_ACTIVATIONS,
+	LIMIT_VALUE_USER_INVOCATION_RATE,
+	LIMIT_VALUE_CODE_SIZE,
+	LIMIT_VALUE_PARAMETER_SIZE,
+}
+
+// structs that denote the sample manifest.yaml, wrapped yaml.v2
 func NewYAMLParser() *YAMLParser {
 	return &YAMLParser{}
 }
diff --git a/utils/validation.go b/utils/validation.go
index 1aaef6a7..9e17088c 100644
--- a/utils/validation.go
+++ b/utils/validation.go
@@ -19,10 +19,11 @@
 package utils
 
 import (
+	"strings"
 	"encoding/json"
 	"github.com/apache/incubator-openwhisk-client-go/whisk"
 	"github.com/apache/incubator-openwhisk-wskdeploy/wski18n"
-	"strings"
+	"github.com/apache/incubator-openwhisk-wskdeploy/wskprint"
 )
 
 var LocalLicenseRecords = map[string][]string{
@@ -61,10 +62,13 @@ var license_json = LicenseJSON{}
 //Check local data record at first
 //Then check remote json data
 func CheckLicense(license string) bool {
+	// TODO(#673) Strict flag should cause an error to be generatd
 	if !LicenseLocalValidation(license) && !LicenseRemoteValidation(license) {
-		warningString := wski18n.T("WARNING: License {{.licenseID}} is not a valid one.\n",
-			map[string]interface{}{"licenseID": license})
-		whisk.Debug(whisk.DbgWarn, warningString)
+		warningString := wski18n.T(
+			wski18n.ID_WARN_KEYVALUE_INVALID,
+			map[string]interface{}{
+				wski18n.KEY_KEY: license})
+		wskprint.PrintlnOpenWhiskWarning(warningString)
 		return false
 	}
 	return true
@@ -135,8 +139,7 @@ func LimitsTimeoutValidation(timeout *int) bool {
 		return true
 	}
 	if *timeout < 100 || *timeout > 300000 {
-		errString := wski18n.T("timeout of limits in manifest should be an integer between 100 and 300000.\n")
-		whisk.Debug(whisk.DbgError, errString)
+		wskprint.PrintlnOpenWhiskWarning(wski18n.T(wski18n.ID_WARN_LIMITS_TIMEOUT))
 		return false
 	}
 	return true
@@ -149,8 +152,7 @@ func LimitsMemoryValidation(memory *int) bool {
 		return true
 	}
 	if *memory < 128 || *memory > 512 {
-		errString := wski18n.T("memorySize of limits in manifest should be an integer between 128 and 512.\n")
-		whisk.Debug(whisk.DbgError, errString)
+		wskprint.PrintlnOpenWhiskWarning(wski18n.T(wski18n.ID_WARN_LIMITS_MEMORY_SIZE))
 		return false
 	}
 	return true
@@ -163,8 +165,7 @@ func LimitsLogsizeValidation(logsize *int) bool {
 		return true
 	}
 	if *logsize < 0 || *logsize > 10 {
-		errString := wski18n.T("logSize of limits in manifest should be an integer between 0 and 10.\n")
-		whisk.Debug(whisk.DbgError, errString)
+		wskprint.PrintlnOpenWhiskWarning(wski18n.T(wski18n.ID_WARN_LIMITS_LOG_SIZE))
 		return false
 	}
 	return true
@@ -172,7 +173,9 @@ func LimitsLogsizeValidation(logsize *int) bool {
 
 func NotSupportLimits(value *int, name string) {
 	if value != nil {
-		warningString := wski18n.T("WARNING: Limits {{.limitname}} is not changable, which will be ignored.\n", map[string]interface{}{"limitname": name})
-		whisk.Debug(whisk.DbgWarn, warningString)
+		warningString := wski18n.T(
+			wski18n.ID_WARN_LIMIT_UNCHANGEABLE_X_name_X,
+			map[string]interface{}{wski18n.KEY_NAME: name})
+		wskprint.PrintlnOpenWhiskWarning(warningString)
 	}
 }
diff --git a/wski18n/i18n_ids.go b/wski18n/i18n_ids.go
index cbd75197..af599fae 100644
--- a/wski18n/i18n_ids.go
+++ b/wski18n/i18n_ids.go
@@ -92,8 +92,15 @@ const(
 	ID_MSG_ACTION_LIMIT_IGNORED_X_limit_X			= "msg_action_limit_ignored"	// timeout, memorySize, logSize
 
 	// warnings
-	ID_WARN_DEPRECATED_KEY_REPLACED				= "msg_warn_key_deprecated_replaced"
+	ID_WARN_DEPRECATED_KEY_REPLACED_X_oldkey_X_filetype_X_newkey_X = "msg_warn_key_deprecated_replaced"
 	ID_WARN_WHISK_PROPS_DEPRECATED				= "msg_warn_whisk_properties"
+	ID_WARN_MISSING_MANDATORY_KEY_X_key_X_value_X		= "msg_warn_missing_mandatory_key"
+	ID_WARN_KEYVALUE_NOT_SAVED_X_key_X			= "msg_warn_key_value_not_saved"
+	ID_WARN_KEYVALUE_INVALID				= "msg_warn_invalid_key_value"
+	ID_WARN_LIMITS_TIMEOUT					= "msg_warn_limits_timeout"
+	ID_WARN_LIMITS_MEMORY_SIZE				= "msg_warn_limits_memory_size"
+	ID_WARN_LIMITS_LOG_SIZE					= "msg_warn_limits_memory_log_size"
+	ID_WARN_LIMIT_UNCHANGEABLE_X_name_X			= "msg_warn_limit_changeable"
 
 	// Errors
 	ID_ERR_GET_RUNTIMES_X_err_X 				= "msg_err_get_runtimes"
@@ -101,7 +108,32 @@ const(
         ID_ERR_MISMATCH_NAME_X_key_X_dname_X_dpath_X_mname_X_moath_X = "msg_err_mismatch_name_project"
 	ID_ERR_CREATE_ENTITY_X_key_X_err_X_code_X		= "msg_err_create_entity"
 	ID_ERR_DELETE_ENTITY_X_key_X_err_X_code_X		= "msg_err_delete_entity"
+	ID_ERR_FEED_INVOKE_X_err_X_code_X			= "msg_err_feed_invoke"
+)
 
+// Known keys used for text replacement in i18n translated strings
+const(
+	KEY_KEY			= "key"
+	KEY_VALUE		= "value"
+	KEY_NAME		= "name"
+	KEY_CODE		= "code"
+	KEY_ERR			= "err"
+	KEY_PROJECT		= "project"
+	KEY_ACTION		= "action"
+	KEY_LIMIT		= "limit"
+	KEY_HOST		= "host"
+	KEY_SOURCE		= "source"
+	KEY_NAMESPACE		= "namespace"
+	KEY_PATH		= "path"
+	KEY_EXTENTION		= "ext"
+	KEY_RUNTIME		= "runtime"
+	KEY_DEPLOYMENT_NAME	= "dname"
+	KEY_DEPLOYMENT_PATH	= "dpath"
+	KEY_MANIFEST_NAME	= "mname"
+	KEY_MANIFEST_PATH	= "mpath"
+	KEY_OLD			= "oldkey"
+	KEY_NEW			= "newkey"
+	KEY_FILE_TYPE		= "filetype"
 )
 
 var I18N_ID_SET = [](string){
@@ -154,8 +186,15 @@ var I18N_ID_SET = [](string){
 	ID_MSG_PROMPT_APIHOST,
 	ID_MSG_PROMPT_NAMESPACE,
 	ID_MSG_ACTION_LIMIT_IGNORED_X_limit_X,
-	ID_WARN_DEPRECATED_KEY_REPLACED,
+	ID_WARN_DEPRECATED_KEY_REPLACED_X_oldkey_X_filetype_X_newkey_X,
 	ID_WARN_WHISK_PROPS_DEPRECATED,
+	ID_WARN_MISSING_MANDATORY_KEY_X_key_X_value_X,
+	ID_WARN_KEYVALUE_NOT_SAVED_X_key_X,
+	ID_WARN_KEYVALUE_INVALID,
+	ID_WARN_LIMITS_TIMEOUT,
+	ID_WARN_LIMITS_MEMORY_SIZE,
+	ID_WARN_LIMITS_LOG_SIZE,
+	ID_WARN_LIMIT_UNCHANGEABLE_X_name_X,
 	ID_ERR_GET_RUNTIMES_X_err_X,
 	ID_ERR_MISSING_MANDATORY_KEY_X_key_X,
 	ID_ERR_MISMATCH_NAME_X_key_X_dname_X_dpath_X_mname_X_moath_X,
diff --git a/wski18n/i18n_ids_test.go b/wski18n/i18n_ids_test.go
index dd2f07be..ac8c8284 100644
--- a/wski18n/i18n_ids_test.go
+++ b/wski18n/i18n_ids_test.go
@@ -1,3 +1,5 @@
+// +build unit
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
diff --git a/wski18n/i18n_resources.go b/wski18n/i18n_resources.go
index 13178951..1a041853 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(1505354770, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/de_DE.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 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\x59\x51\x6f\x1b\xb9\x11\x7e\xf7\xaf\x18\xe4\xc5\x2d\x60\xa8\xc9\x15\x05\x8a\x00\x45\x61\xd4\x6e\xeb\xde\xc5\x36\xec\xe4\x82\x43\x2e\x58\xd3\xcb\xd9\x15\x4f\x5c\x72\x41\x72\xa5\xe8\x04\xfd\xf7\x62\xc8\xa5\xb4\xb2\xc5\xdd\x95\xe2\x5c\xfc\xb4\x16\x87\xdf\x37\x33\x24\x67\x86\xc3\x4f\x27\x00\xab\x13\x00\x80\x57\x82\xbf\x7a\x0b\xaf\x2a\x5b\x66\xb5\xc1\x42\x7c\xc9\xd0\x18\x6d\x5e\x9d\x85\x51\x67\x98\xb2\x92\x39\xa1\x15\x89\x5d\xfa\xb1\x13\x80\xf5\x59\x0f\xc2\x82\x19\x25\x54\x99\xc0\xf8\xd8\x8e\x0e\xa1\xd8\x26\xcf\xd1\xda\x04\xca\x7d\x3b\x3a\x84\x22\x54\xa1\x13\x10\x57\x34\x94\x9c\xff\x9b\xd5\x2a\xab\x84\xb5\x42\x95\x59\x5e\xf1\x6c\x86\xcb\x04\xd0\xff\xee\x6f\xae\x41\xa8\xba\x71\xc0\x99\x63\xf0\x2e\xcc\x82\xd3\xbc\xe2\xa7\x40\xf3\x92\x2c\x04\x5c\x48\x56\x66\x8a\x55\x68\x6b\x96\x63\x82\x63\x3b\x3e\x8c\xc5\x1a\x37\xed\x51\x97\x86\xb5\x11\xbf\xfb\x1f\xe0\xe1\xc7\xcb\x5f\x1e\xc6\x80\xd6\x22\x9b\x6a\xeb\x12\
 xa0\x8b\xa9\xb0\x33\x38\xbf\xbd\x82\x87\xff\xde\xdc\xbf\x1f\x8b\x38\x47\x63\x09\x61\x10\xf4\xe7\xcb\xbb\xfb\xab\x9b\xeb\x31\xb8\x33\x5c\x66\x85\x90\x29\x4f\xd6\xcc\x4d\x41\x17\xe0\xa6\x08\x93\x19\x2e\xc1\xcb\x0e\xc3\xe6\x68\xdc\x68\x5c\x12\x1e\x00\xae\x8d\xae\x6a\x97\x71\xac\xa5\x4e\x2d\xd5\x85\x86\xa5\x6e\xc0\x20\x93\x72\x09\x0b\xa6\x1c\x38\x0d\x61\x0a\xb8\xa9\xb0\xff\x84\x3f\x2d\xff\x72\xfd\xe7\xb7\x30\xc8\xd3\xa8\x23\x98\xe2\xa4\x03\xb9\x68\x87\xa5\xf7\xdf\xaf\xea\x56\x22\xb3\x08\xb5\xd1\x73\xc1\x11\x98\x02\x9a\x81\xca\x89\x3c\x6c\x4a\xa7\x67\xa8\xc6\x10\xd5\xa2\x67\x4f\x3e\x23\xa2\xa5\x21\x79\x3a\x4c\x50\x68\x03\x37\x35\xaa\x8f\xb4\xc9\x46\x70\x0d\x9d\xd0\xe7\x66\xc1\x66\x0a\x7c\xe2\x58\xb0\x46\x3a\x98\x33\xd9\x20\x08\x0b\x65\x83\xd6\x7d\xee\xe3\xad\x98\x12\x05\x5a\x97\x29\xed\xb2\x42\x37\x8a\x27\x98\xdf\xb5\x82\x7e\xc3\x81\xd2\x0e\xbc\x34\x30\x07\x7e\x53\x7e\x5a\xad\x26\xf4\xb1\x5e\x7f\x9e\xfc\xaa\xd2\x84\x8d\x8f\x75\x1b\xda\xde\xfd\xf2\xc1\x47\xb8\x0e\xb2\xf7\x67\x98\x52\xa1\x
 72\x87\x10\x0d\x6c\xcd\xfd\x54\x71\xd2\x20\x99\x69\x94\x13\x15\x52\x2c\xaf\x98\xcb\xa7\x09\x96\xbb\x20\xe6\x79\xda\x29\x44\x65\x6b\xcc\x45\x21\x90\x83\x50\x10\x35\x06\xae\xd1\x7a\x47\x7b\x44\x58\x08\x37\x05\x96\xfb\xad\x6b\x75\x63\x72\x0c\x4b\x81\x5f\x1c\x2a\x8a\x6f\x1e\x15\xbf\xb8\xa8\x7c\x2b\x4b\xbf\x86\xcf\xa1\xa5\x89\x46\xe4\x53\xa6\x4a\x4c\x6d\x84\x68\x43\x2b\x45\x27\xf8\x89\x39\x8f\xcc\x22\x07\x3a\x61\x53\xec\xd7\xf8\xab\xd4\x6c\x94\x6d\xea\x5a\x1b\x37\xa8\xea\x28\x77\x8b\xe0\xec\x0d\xa6\x57\xae\x63\xc1\x78\x05\x83\x54\x26\x45\x25\x5c\x26\x4a\xa5\x4d\x52\xc3\x2b\x35\x67\x52\xf0\xc8\xe1\xa7\x78\x26\xff\x45\xca\x3e\x51\xb1\x85\xeb\xe5\xcf\xb5\x2a\x44\xb9\xa9\x2b\xfa\x03\xe5\x7b\xb2\x70\x37\x30\x52\xbe\x6a\xbd\x11\xa0\x9a\x43\x19\x7b\x23\x26\x31\x52\xba\x25\x91\xaf\xe3\x19\x8a\x96\xc4\xb4\x0d\x8f\x47\x51\xb5\xa6\xf4\x95\x78\x4f\xed\x59\xad\x26\xf4\xb9\x5e\x9f\x41\x61\x74\x45\xff\x87\xdd\xbf\x5e\x8f\x62\x0c\xcb\x35\xc4\x48\x62\x71\xa5\x2c\xba\xe3\xb8\x36\xce\x19\x62\xdb\xf1\xe2\x6
 a\x35\xd9\xfc\x7f\xb0\x95\x68\x4c\x56\xa2\x8b\xa7\x38\x55\x7a\xff\x9b\x09\x19\x82\x4b\x89\xce\x1f\xc3\xed\xc1\x8c\x53\x03\xf1\x26\xbd\x82\x45\x33\x17\x39\xbe\x25\x5d\xd0\x98\x01\x45\x1a\x55\x31\x63\xa7\x4c\xca\x4c\xea\x9c\xc9\x54\x62\x88\x62\x1d\x22\x72\x56\x20\xf7\x33\x43\xbe\xb5\x63\xd9\x14\xba\x85\x36\xb3\xa3\xf8\x84\x72\x68\x14\xf6\x27\xa3\x6d\xce\x0a\xf7\x1b\xe4\xc9\xf8\x73\xb1\x11\x85\x5c\x57\xb5\x44\xf2\x6f\x7b\x29\x2a\x1a\x29\x97\x63\x89\x0a\xbf\x5e\xc3\x2c\x5c\xf0\xf6\x14\x06\x36\x22\xdb\x70\xc1\x5d\xa3\xe0\x61\x61\x67\x6d\x41\x18\xd3\xef\x03\xed\x03\x83\x95\x9e\x23\xd4\xcc\x38\xe1\xeb\xc7\x30\x86\x1c\x98\xb5\xe8\xfa\xdd\xdf\xd1\x34\x67\x2a\x47\x99\x56\xf6\xe6\xc7\x09\xfc\x2b\xc8\x50\x49\x30\xb6\xda\x50\x07\x78\xfd\x43\x47\xf8\x18\xbf\xef\x90\xf5\x7a\x7e\x87\xa9\xd7\xf7\xa3\xf9\x0e\xf4\xdf\xe8\x12\x6a\x87\xa4\x62\x8a\x95\xc8\x0f\x30\x4e\x17\xc0\x31\xf8\x91\x52\x99\x13\x68\x7b\x0d\x06\xde\x18\xd2\xaf\x65\xea\xae\xf3\xb7\xdb\x86\x0b\x66\x54\xe6\x2f\x9c\x54\xf0\xd7\x68\x48\xcd
 \x9e\xb0\x4b\x95\xc0\x0c\x97\x54\x07\x50\xa8\x5f\x30\x0b\x06\x9d\x11\x38\xa7\xfa\x84\x02\x82\x07\x9b\x6c\xc1\xe8\x07\x5f\x2c\x4a\x09\x56\x6b\x05\x8f\x48\x1a\x1a\xcc\x19\xb9\xa6\x0e\xb7\x07\xae\xbd\x5f\x1a\x8b\x20\x1c\xe8\xc6\x59\xba\x4b\xe8\x02\xde\x1b\x36\x17\x16\x1e\x1b\x21\xf9\x08\x53\x28\x4f\x6d\xd1\x33\x83\xb5\x64\x79\x72\xbd\xa2\x45\x5a\xf2\x8e\x51\x22\xd4\x89\xab\xd5\x84\x8a\x43\xb7\xac\x71\xbd\x0e\x75\x62\xc2\x88\xb3\x68\x05\xa9\xef\x5a\x4c\x85\x8b\x1d\x4c\xeb\x90\xed\x26\xf8\xa7\x49\x28\x16\x11\x15\x53\x9c\x39\x6d\x96\x3d\xdd\x0c\xd2\x7c\x23\xe7\x19\x3a\x2b\x23\x2c\xb4\x58\x93\xfe\xb4\x17\x2f\x07\x3e\xed\xd2\x06\xf8\x0d\xf3\xbe\x22\x29\x52\xf8\xec\xcb\x3d\x25\xa7\xcf\xb6\x2c\xec\x6c\x7e\xef\x2e\x3f\x1e\x6f\x2f\x4f\x2e\x0f\xae\xcd\xe1\x5e\xa8\xea\x80\x54\x3b\xd7\x3a\x3f\x1a\x6f\x71\x43\xd1\x94\x9c\xc7\xb1\x46\xc5\x51\xe5\xc9\x2b\x7f\x14\x85\xad\x68\x58\xb0\xa0\xc3\x64\xd2\xc3\x13\x0f\xde\x28\xa6\x0f\x5b\xe1\x63\xb8\xb6\x53\x9e\xe5\xcf\x64\x7f\xf0\x62\x2f\x0d\x4c\x99\x85\x47\
 x44\xb5\x13\xd0\x37\x71\x62\x28\x4f\xed\xd1\x82\xa2\x60\x63\x52\x55\xee\xc5\x93\x20\xb8\x57\xa7\xef\x97\x77\xa3\x3d\xcf\x33\xe4\xcb\xf8\x35\xe2\x8e\xf7\xec\xb3\xf4\x99\xf6\xed\xf3\x14\x73\xb8\x77\xfb\xb4\xda\xe4\x39\xdd\x28\x9e\xb5\x09\x2c\xf3\x09\x2c\x7d\xa2\x24\x3a\xda\xe4\x9b\xf0\xd0\xd5\xa4\x0d\xff\x3e\x51\xd0\xba\xb5\x69\x82\xce\x7f\xde\x18\x43\x66\xc4\x8c\xd7\x06\xa0\xd0\xf4\x08\xdf\x84\xc0\xac\x5f\x6b\xb2\x76\x74\xee\xa6\xe8\x96\x1b\x64\x0e\xfb\x75\xf7\xad\x7d\xf0\x92\x3b\x16\xf8\xde\x86\x7f\x13\x80\x0a\xad\x65\x65\xa7\x88\x07\xa6\x78\x3b\x96\x6b\x1e\x06\xe8\x63\xc4\x3d\x23\xf8\x73\x8c\x4a\xfc\x99\x53\xbf\x85\x4a\x5e\x8f\x6d\xf4\x1c\x0c\x99\x7b\x57\xb8\x37\x8a\xb5\x14\x9d\xc0\x39\x22\x5a\x1e\x4d\x13\x0f\xde\xc0\x71\xde\x8b\xff\x15\x41\xf2\x89\x91\x2f\xc9\x3f\x22\x98\xdc\x5f\xde\x9e\xdf\x9d\xbf\xbf\xb9\x4b\xb0\xfd\x63\xef\x1f\x5c\x2a\xaa\xdb\x88\x53\xea\x85\x6f\x75\x83\x14\x0a\x81\x99\xd0\x4d\x9d\xa3\x09\x3d\xa9\xfd\xf3\x77\xfe\xf6\x2b\xf6\xf1\xfc\xee\xfa\xea\xfa\x3f\x6f\x81\x
 6a\x87\xd3\x70\x19\x3f\x85\x5f\xce\xdf\xfd\xb4\xa9\xb3\x8c\x28\x4b\x34\xa1\x40\xf6\x9d\x83\x6d\x55\x35\x81\xdb\x6d\x55\x75\x5a\x20\xf2\xd3\x58\x46\x51\x48\xe0\x68\x73\x23\x1e\x43\xcf\xac\x6d\xa0\x85\x76\x91\x4f\x00\x89\x57\xb8\xef\xa8\xd1\x5e\x17\x6d\xbb\x0a\x42\xcd\xf5\x2c\x94\x8f\x84\x0c\x8b\x29\xaa\x6d\x14\x88\x6a\x85\xa1\xa3\x23\xc1\x50\x6b\xe3\x0f\x51\xa2\x7f\xaf\xbc\xdb\x54\xb5\x85\x40\xc9\xe1\x96\xe5\x33\x56\x22\xfc\x1c\xde\xcc\xa0\x6a\xac\xa3\xf2\xdb\x86\x9e\xc3\xc0\x3a\x1f\x88\xd6\xaf\xda\xd3\xc9\xb1\x41\xcb\xe6\x61\xcd\xbb\x39\x6d\x5b\xbb\xb4\x8f\x7d\x23\x94\xfd\x6a\xfc\xe3\x3c\xfb\x93\xc8\x51\x59\x7c\x21\xcf\x26\xd0\xc6\x79\x36\x4e\xfe\x56\x9e\x3d\x1a\xbf\x5f\xfd\x08\xeb\xdb\xe4\xfe\xf3\xea\x62\xbd\x8e\x2c\x0c\x42\x4b\x5d\x2b\x1c\xa1\xea\x41\x58\xfb\x33\x12\x56\xda\x2c\xef\xc5\xef\xfe\x02\xed\xfb\xf6\x76\xe7\x66\x65\xa7\xba\x91\x9c\x16\x87\x29\xdf\xc0\xa3\x43\xfd\x88\x6e\x41\xd9\xe7\xcd\x0f\x7f\xf7\xc7\xf7\x6f\x6f\x7e\x48\x6b\xfb\xa2\x14\x7b\x8d\x70\xa2\x42\xdd\xb8\xa3\xe
 0\x5f\xbf\xf6\xf0\x7f\x7d\x4d\x7f\x69\x23\x5e\x94\x62\xaf\x11\x52\x97\xc7\xfa\x28\xe0\xbf\xe9\x51\xff\x85\xc0\x87\x76\xb6\x47\x86\xf8\x00\x14\x8a\x15\xd8\x3c\x5d\x4c\x99\x2a\xd9\xa3\x44\xca\x7f\x4e\x83\xd2\x8b\xb3\x6e\xc3\xe7\x11\xbb\xef\x43\x83\x3b\xff\x05\xb9\xfa\xcd\x62\x75\x2d\xe3\xe3\xd2\x9e\xc6\xc5\x98\x3e\x4f\xbc\xac\x74\x3a\x3b\x03\xf6\x7d\x1b\x52\x32\xf4\xe4\xf3\xc9\xff\x03\x00\x00\xff\xff\xd0\x41\x36\x4c\xdc\x24\x00\x00")
+var _wski18nResourcesEn_usAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x59\x51\x6f\xdb\x38\x12\x7e\xcf\xaf\x18\xe4\xa5\x77\x40\xe0\x6b\x7b\x38\xe0\xd0\x97\xc5\x62\xd3\xc5\x66\xbb\x6d\x8a\xa6\xdd\x62\xd1\x16\x0a\x23\x8e\x64\xd6\x14\x29\x90\x94\x5d\xd7\xf0\x7f\x5f\x0c\x29\x4a\x76\x12\x4a\xb2\x93\x62\xf3\xc4\x98\xc3\xf9\x66\x86\xc3\x99\x8f\xd4\xa7\x13\x80\xcd\x09\x00\xc0\xa9\xe0\xa7\x2f\xe0\xb4\xb2\x65\x56\x1b\x2c\xc4\xb7\x0c\x8d\xd1\xe6\xf4\x2c\xcc\x3a\xc3\x94\x95\xcc\x09\xad\x48\xec\xa5\x9f\x3b\x01\xd8\x9e\x0d\x68\x58\x31\xa3\x84\x2a\x13\x3a\x3e\xb6\xb3\x63\x5a\x6c\x93\xe7\x68\x6d\x42\xcb\x55\x3b\x3b\xa6\x45\xa8\x42\x27\x54\x5c\xd0\x54\x72\xfd\x57\xab\x55\x56\x09\x6b\x85\x2a\xb3\xbc\xe2\xd9\x02\xd7\x09\x45\xbf\x5f\x5d\xbe\x01\xa1\xea\xc6\x01\x67\x8e\xc1\xeb\xb0\x0a\x9e\xe4\x15\x7f\x02\xb4\x2e\x89\x42\x8a\x0b\xc9\xca\x4c\xb1\x0a\x6d\xcd\x72\x4c\x60\xf4\xf3\xe3\xba\x58\xe3\xe6\x03\xe6\xd2\xb4\x36\xe2\xbb\xff\x01\xae\x5f\xbd\xfc\xeb\x7a\x8a\xd2\x5a\x64\x73\x6d\x5d\x42\
 xe9\x6a\x2e\xec\x02\x7e\x7e\x7b\x01\xd7\xbf\x5d\x5e\xbd\x9f\xaa\x71\x89\xc6\x92\x86\x51\xa5\x7f\xbe\x7c\x77\x75\x71\xf9\x66\x8a\xde\x05\xae\xb3\x42\xc8\x54\x24\x6b\xe6\xe6\xa0\x0b\x70\x73\x84\xd9\x02\xd7\xe0\x65\xc7\xd5\xe6\x68\xdc\x64\xbd\x24\x3c\xa2\xb8\x36\xba\xaa\x5d\xc6\xb1\x96\x3a\xb5\x55\xe7\x1a\xd6\xba\x01\x83\x4c\xca\x35\xac\x98\x72\xe0\x34\x84\x25\xe0\xe6\xc2\xfe\x04\xff\x5a\xff\xe7\xcd\xbf\x5f\xc0\x28\x4e\xa3\x8e\x40\x8a\x8b\x0e\xc4\xa2\x0c\x4b\xe7\xdf\x67\xf5\x56\x22\xb3\x08\xb5\xd1\x4b\xc1\x11\x98\x02\x5a\x81\xca\x89\x3c\x24\xa5\xd3\x0b\x54\x53\x80\x6a\x31\x90\x93\x77\x80\x68\x6b\x48\x9e\x0e\x13\x14\xda\xc0\x65\x8d\xea\x23\x25\xd9\x04\xac\xb1\x13\x7a\xd7\x2d\xe8\x96\xc0\x27\x8e\x05\x6b\xa4\x83\x25\x93\x0d\x82\xb0\x50\x36\x68\xdd\x97\x21\xdc\x8a\x29\x51\xa0\x75\x99\xd2\x2e\x2b\x74\xa3\x78\x02\xf9\x75\x2b\xe8\x13\x0e\x94\x76\xe0\xa5\x81\x39\xf0\x49\xf9\x69\xb3\x99\xd1\x60\xbb\xfd\x32\xfb\xac\xd2\x80\x8d\xaf\x75\x1d\xec\x60\xbe\x7c\xf0\x15\x6e\x47\xb3\x8f\x67\x58\x52\xa1\x
 72\x87\x00\x8d\xa4\xe6\xfd\x50\x71\xd1\x28\x98\x69\x94\x13\x15\x52\x2d\xaf\x98\xcb\xe7\x09\x94\x77\x41\xcc\xe3\xb4\x4b\x08\xca\xd6\x98\x8b\x42\x20\x07\xa1\x20\x5a\x0c\x5c\xa3\xf5\x81\xf6\x1a\x61\x25\xdc\x1c\x58\xee\x53\xd7\xea\xc6\xe4\x18\xb6\x02\xbf\x39\x54\x54\xdf\xbc\x56\xfc\xe6\xa2\xf1\xad\x2c\xfd\x1a\x86\x63\x5b\x13\x9d\xc8\xe7\x4c\x95\x98\x4a\x84\xe8\x43\x2b\x45\x27\xf8\x96\x3b\x37\xcc\x22\x07\x3a\x61\x73\x1c\xb6\xf8\x41\x66\x36\xca\x36\x75\xad\x8d\x1b\x35\x75\x52\xb8\x45\x08\x76\xa7\xd3\x1b\xb7\xe3\xc1\x74\x03\x83\x54\x26\x45\x25\x5c\x26\x4a\xa5\x4d\xd2\xc2\x0b\xb5\x64\x52\xf0\x88\xe1\x97\x78\x24\x3f\x22\x63\x6f\x99\xd8\xaa\x1b\xc4\xcf\xb5\x2a\x44\xd9\xf1\x8a\xe1\x42\xf9\x9e\x3c\xdc\x2f\x8c\xd4\xaf\xda\x68\x04\x55\xcd\xa1\x88\x83\x15\x93\x10\xa9\xdd\x92\xc8\xc3\x70\xc6\xaa\x25\x21\xf5\xe5\xf1\x28\xa8\xd6\x95\x21\x8a\x77\xdb\x9f\xcd\x66\x46\xc3\xed\xf6\x0c\x0a\xa3\x2b\xfa\x3f\x64\xff\x76\x3b\x09\x31\x6c\xd7\x18\x22\x89\xc5\x9d\xb2\xe8\x8e\xc3\xea\x82\x33\x86\xb6\x17\xc5\xcd\x6
 6\xd6\xfd\x7f\xb0\x97\x68\x4c\x56\xa2\x8b\xa7\x38\x45\xbd\x7f\x65\x42\x86\xe2\x52\xa2\xf3\xc7\xb0\x3f\x98\x71\x69\x00\xee\xda\x2b\x58\x34\x4b\x91\xe3\x0b\xb2\x05\x8d\x19\x31\xa4\x51\x15\x33\x76\xce\xa4\xcc\xa4\xce\x99\x4c\x35\x86\x28\xb6\x03\x44\xc1\x0a\xe0\x7e\x65\xe8\xb7\x76\x2a\x9a\x42\xb7\xd2\x66\x71\x14\x9e\x50\x0e\x8d\xc2\xe1\x66\xd4\xf7\xac\x70\xbf\x41\x9e\xac\x3f\xe7\x9d\x28\xe4\xba\xaa\x25\x52\x7c\xdb\x4b\x51\xd1\x48\xb9\x9e\x0a\x54\xf8\xfd\x1a\x47\xe1\x82\xb7\xa7\x30\xa0\x11\x58\x87\x05\xef\x1a\x05\xd7\x2b\xbb\x68\x09\x61\x6c\xbf\xd7\x94\x07\x06\x2b\xbd\x44\xa8\x99\x71\xc2\xf3\xc7\x30\x87\x1c\x98\xb5\xe8\x86\xc3\xbf\x63\x69\xce\x54\x8e\x32\x6d\xec\xe5\xab\x19\xfc\x12\x64\x88\x12\x4c\x65\x1b\xea\x80\xa8\x7f\xd8\x11\x3e\x26\xee\x7b\x60\x83\x91\xdf\x43\x1a\x8c\xfd\x64\xbc\x03\xe3\x37\x99\x42\xed\x81\x54\x4c\xb1\x12\xf9\x01\xce\xe9\x02\x38\x86\x38\x52\x2b\x73\x02\xed\xa0\xc3\xc0\x1b\x43\xf6\xb5\x48\xbb\xfb\xfc\xe3\xd2\x70\xc5\x8c\xca\xfc\x85\x93\x08\x7f\x8d\x86\xcc\x1c\x28\xbb
 \xc4\x04\x16\xb8\x26\x1e\x40\xa5\x7e\xc5\x2c\x18\x74\x46\xe0\x92\xf8\x09\x15\x04\xaf\x6c\xd6\x2b\xa3\x1f\x3c\x59\x94\x12\xac\xd6\x0a\x6e\x90\x2c\x34\x98\x33\x0a\x4d\x1d\x6e\x0f\x5c\xfb\xb8\x34\x16\x41\x38\xd0\x8d\xb3\x74\x97\xd0\x05\xbc\x37\x6c\x29\x2c\xdc\x34\x42\xf2\x09\xae\x50\x9f\xea\xb5\x67\x06\x6b\xc9\xf2\xe4\x7e\x45\x8f\xb4\xe4\x3b\x4e\x89\xc0\x13\x37\x9b\x19\x91\x43\xb7\xae\x71\xbb\x0d\x3c\x31\xe1\xc4\x59\xf4\x82\xcc\x77\xad\x4e\x85\xab\x3d\x9d\xd6\x21\xdb\x6f\xf0\xb7\x9b\x50\x24\x11\x15\x53\x9c\x39\x6d\xd6\x03\xaf\x19\x64\x79\x27\xe7\x11\x76\x76\x46\x58\x68\x75\x25\xf1\x7c\xb0\x1e\x0d\xd0\xce\x75\x23\x39\x05\xc5\xa2\x9b\x41\xb8\xba\xec\xdf\xfd\x48\xda\x8f\x88\xab\xce\x46\x1b\x72\xbc\xb6\x78\x42\x40\xa9\xf9\x15\xf3\x21\xfa\x16\x6d\xf1\xbc\x80\x7b\x34\x4e\xc3\x96\xb0\xee\x1c\x4b\xbf\x91\x7e\x3e\xde\xab\x6e\x5d\x6b\x5c\xcb\x2e\xbc\x50\xb5\xa3\xa4\xda\xbb\x70\xfa\xd9\x78\xbf\x1c\xab\xf3\x14\x65\x8e\x35\x2a\x8e\x2a\x4f\x3e\x46\x44\x51\xe8\x45\x43\x2a\x05\x1b\x66\xb3\x01\x9c\x58\
 x12\x26\x21\x7d\xe8\x85\x8f\xc1\xea\x97\xdc\xe9\xec\xc9\x97\xcb\xf3\x7b\x61\x60\xce\x2c\xdc\x20\xaa\xbd\x56\xd3\x55\xb0\xb1\x0e\x7a\x8f\x15\x54\x9f\x1b\x93\xe2\xdf\xe7\xb7\xca\xf3\xbd\x36\xfd\x73\x8c\x20\xfa\x73\xb7\x77\x3f\x4e\x5c\xa3\xde\xe9\x91\xbd\xd3\xd8\xd3\xb1\xbd\xdb\xfc\x0e\x8f\xee\x90\x55\x5d\x07\xd6\x8d\xe2\x59\xdb\x5a\x33\xdf\x5a\xd3\x27\x4a\xa2\xa3\x24\xef\xca\xc3\xae\x25\x6d\x63\xf2\x2d\x8c\xf6\xad\x6d\x60\x74\xfe\xf3\xc6\x18\x72\x23\xf6\xe2\xb6\x00\x85\xe7\x98\x30\x26\x0d\xcc\xfa\xbd\x26\x6f\x27\xb3\x0a\xaa\x6e\xb9\x41\xe6\x70\xd8\x76\xff\xd1\x01\xbc\xe4\x9e\x07\xfe\xd5\xc5\x7f\xad\x80\x0a\xad\x65\xe5\xce\xf5\x02\x98\xe2\xed\x5c\xae\x79\x98\xa0\xc1\x84\x1b\x50\x88\xe7\x14\x93\xf8\x9d\xa0\xfe\x08\x93\xbc\x1d\x7d\xf5\x1c\x2d\x99\xf7\xee\xf0\x60\x15\x6b\x21\x76\x0a\xe7\x84\x6a\x79\x34\x4c\x3c\x78\x23\xc7\xf9\x5e\xfd\x0f\x28\x92\xb7\x9c\x7c\x4c\xfc\x89\xc5\x84\x92\xab\x40\xe4\x99\x50\x4b\xbd\x48\x15\x8f\xfe\x76\x1d\xc4\xfc\x29\xa4\x65\xb0\x9a\xa3\xea\x73\xce\x19\x51\x96\x
 68\xda\xa9\xc7\xcf\xbb\x8e\x44\x7a\xae\xe2\xdf\xa0\x2d\x5b\x0e\x12\xc8\xc0\x6f\x0a\x6d\xee\xa1\x61\xfe\xfd\x8e\xd6\x47\x52\x19\x0b\x4b\xfb\x05\x88\x2a\x47\xd7\x4b\xc6\x0d\x13\xe1\x71\xae\x37\xf0\x01\x66\x79\x4d\xe3\x90\xfe\xd9\xcf\x66\x15\x56\xc4\x0f\xad\xf8\x9e\xc2\x0c\x12\x57\xe2\xbb\xa7\xed\x61\xd9\x1e\x6b\xea\x49\x22\x53\xfe\xd9\x80\xf6\xf1\x06\xdd\x8a\x32\xeb\xd9\xf3\xff\xfb\x1d\xfb\xdf\xb3\xe7\x93\x6d\x72\xa2\x42\xdd\xa4\x58\x61\x3b\x7b\x94\x31\x4f\x9f\x7a\x63\xfe\xfb\x94\xfe\x0e\x8d\x91\xd4\xe5\x50\x9c\xa4\x2e\x8f\x0d\x52\xb0\xea\xd9\x54\x8b\xda\x67\x73\x76\x93\xfc\x78\xf7\x47\xf7\xba\xdb\xd1\x5c\x1b\x53\x54\xae\x43\x9b\xee\x74\xcc\xe0\xa2\x54\xda\x5f\x51\x29\xab\x94\x5e\xcd\x7a\x22\x7f\xf2\xe5\xe4\xef\x00\x00\x00\xff\xff\x29\x1e\x68\xe0\x5e\x1f\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: 9436, mode: os.FileMode(420), modTime: time.Unix(1515552461, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/en_US.all.json", size: 8030, mode: os.FileMode(420), modTime: time.Unix(1515789236, 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(1505354770, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/es_ES.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 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(1505354770, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/fr_FR.all.json", size: 101, mode: os.FileMode(420), modTime: time.Unix(1515697090, 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(1505354770, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/it_IT.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 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(1505354770, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/ja_JA.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 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(1505354770, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/ko_KR.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 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(1505354770, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/pt_BR.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 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(1505354770, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/zh_Hans.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 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(1505354770, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/zh_Hant.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 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 eafe7bdf..46e9f6a0 100644
--- a/wski18n/resources/en_US.all.json
+++ b/wski18n/resources/en_US.all.json
@@ -164,7 +164,10 @@
     "translation": "The [{{.oldkey}}] key in the {{.filetype}} file will soon be deprecated, please use the [{{.newkey}}] key instead.\n"
   },
   { "id": "msg_err_missing_mandatory_key",
-    "translation": "The mandatory key [{{.key}}] is missing."
+    "translation": "The mandatory key [{{.key}}] is missing.\n"
+  },
+  { "id": "msg_warn_missing_mandatory_key",
+    "translation": "The mandatory key [{{.key}}] should be set. Using default value [{{.value}}]...\n"
   },
   {
     "id": "msg_err_mismatch_name_project",
@@ -223,55 +226,31 @@
     "translation": "{{.key}} [{{.name}}] has been successfully undeployed.\n"
   },
   {
-    "id": "SEPARATOR",
-    "translation": "====================== Entries below this line are not verified ==================================="
-  },
-  {
-    "id": "WARNING: The 'source' YAML key in trigger entity is deprecated. Please use 'feed' instead as described in specifications.\n",
-    "translation": "WARNING: The 'source' YAML key in trigger entity is deprecated. Please use 'feed' instead as described in specifications.\n"
-  },
-  {
-    "id": "Failed to invoke the feed when deleting trigger feed with error message: {{.err}} and error code: {{.code}}.\n",
+    "id": "msg_err_feed_invoke",
     "translation": "Failed to invoke the feed when deleting trigger feed with error message: {{.err}} and error code: {{.code}}.\n"
   },
   {
-    "id": "WARNING: Mandatory field Package Version must be set.\n",
-    "translation": "WARNING: Mandatory field Package Version must be set.\n"
-  },
-  {
-    "id": "WARNING: Package Version is not saved in the current wskdeploy version.\n",
-    "translation": "WARNING: Package Version is not saved in the current wskdeploy version.\n"
+    "id": "msg_warn_key_value_not_saved",
+    "translation": "The value for key [{{.key}}] is not saved in the current version of wskdeploy.\n"
   },
   {
-    "id": "WARNING: Mandatory field Package License must be set.\n",
-    "translation": "WARNING: Mandatory field Package License must be set.\n"
+    "id": "msg_warn_invalid_key_value",
+    "translation": "The value for key [{{.key}}] is not valid.\n"
   },
   {
-    "id": "WARNING: Package License is not saved in the current wskdeploy version.\n",
-    "translation": "WARNING: Package License is not saved in the current wskdeploy version.\n"
-  },
-  {
-    "id": "WARNING: License {{.licenseID}} is not a valid one.\n",
-    "translation": "WARNING: License {{.licenseID}} is not a valid one.\n"
-  },
-  {
-    "id": "memorySize of limits in manifest should be an integer between 128 and 512.\n",
+    "id": "msg_warn_limits_memory_size",
     "translation": "memorySize of limits in manifest should be an integer between 128 and 512.\n"
   },
   {
-    "id": "timeout of limits in manifest should be an integer between 100 and 300000.\n",
+    "id": "msg_warn_limits_timeout",
     "translation": "timeout of limits in manifest should be an integer between 100 and 300000.\n"
   },
   {
-    "id": "logSize of limits in manifest should be an integer between 0 and 10.\n",
+    "id": "msg_warn_limits_memory_log_size",
     "translation": "logSize of limits in manifest should be an integer between 0 and 10.\n"
   },
   {
-    "id": "WARNING: Limits  {{.limitname}}  is not changable as to now, which will be ignored.\n",
-    "translation": "WARNING: Limits  {{.limitname}}  is not changable as to now, which will be ignored.\n"
-  },
-  {
-    "id": "WARNING: application in deployment file will soon be deprecated, please use project instead.\n",
-    "translation": "WARNING: application in deployment file will soon be deprecated, please use project instead.\n"
+    "id": "msg_warn_limit_changeable",
+    "translation": "Limit [{{.name}}] is currently not changeable. Ignoring for now....\n"
   }
 ]


 

----------------------------------------------------------------
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