You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwhisk.apache.org by ho...@apache.org on 2018/01/12 22:07:00 UTC

[incubator-openwhisk-wskdeploy] branch master updated: Phase 3 of i18n readiness and conversion to IDs (#687)

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

houshengbo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-openwhisk-wskdeploy.git


The following commit(s) were added to refs/heads/master by this push:
     new 9840db4  Phase 3 of i18n readiness and conversion to IDs (#687)
9840db4 is described below

commit 9840db4e50118a3a980d0cfb142dc73c5f266f8f
Author: Matt Rutkowski <mr...@us.ibm.com>
AuthorDate: Fri Jan 12 16:06:58 2018 -0600

    Phase 3 of i18n readiness and conversion to IDs (#687)
    
    * Use constant strings for OpenWhisk YAML keys in i18n strings.
    
    * Update manifest_parser.go to use i18n IDs.
    
    * Convert i18n warnings for pkg version/license to IDs.
    
    * Limit warnings in manifest_parser.go need to use i18n string.
    
    * Limit warnings in validation.go need to use i18n strings.
---
 deployers/servicedeployer.go     | 117 ++++++++++++++++++++++-----------------
 parsers/manifest_parser.go       |  91 +++++++++++++++++++++---------
 parsers/yamlparser.go            |  61 +++++++++++++++++++-
 utils/validation.go              |  27 +++++----
 wski18n/i18n_ids.go              |  43 +++++++++++++-
 wski18n/i18n_ids_test.go         |   2 +
 wski18n/i18n_resources.go        |  22 ++++----
 wski18n/resources/en_US.all.json |  49 +++++-----------
 8 files changed, 273 insertions(+), 139 deletions(-)

diff --git a/deployers/servicedeployer.go b/deployers/servicedeployer.go
index 39d1579..b382af5 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 5aac11f..82a4b52 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 58cd46b..fd7a24c 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 1aaef6a..9e17088 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 cbd7519..af599fa 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 dd2f07b..ac8c828 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 1317895..1a04185 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 [...]
+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 [...]
 
 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 eafe7bd..46e9f6a 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"
   }
 ]

-- 
To stop receiving notification emails like this one, please contact
['"commits@openwhisk.apache.org" <co...@openwhisk.apache.org>'].