houshengbo closed pull request #684: Update WhiskClient.go to use i18n IDs.
URL: https://github.com/apache/incubator-openwhisk-wskdeploy/pull/684
 
 
   

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 65545391..39d15790 100644
--- a/deployers/servicedeployer.go
+++ b/deployers/servicedeployer.go
@@ -27,13 +27,12 @@ import (
        "strings"
        "sync"
        "time"
-
+       "net/http"
        "github.com/apache/incubator-openwhisk-client-go/whisk"
        "github.com/apache/incubator-openwhisk-wskdeploy/parsers"
        "github.com/apache/incubator-openwhisk-wskdeploy/utils"
        "github.com/apache/incubator-openwhisk-wskdeploy/wskderrors"
        "github.com/apache/incubator-openwhisk-wskdeploy/wski18n"
-       "net/http"
        "github.com/apache/incubator-openwhisk-wskdeploy/wskprint"
 )
 
@@ -143,14 +142,15 @@ func (deployer *ServiceDeployer) 
ConstructDeploymentPlan() error {
                // OpenWhisk entities are annotated with Project Name and 
therefore
                // Project Name in manifest/deployment file is mandatory for 
managed deployments
                if deployer.ProjectName == "" {
-                       // TODO see if we can move string to translation file.
-                       return 
wskderrors.NewYAMLFileFormatError(manifest.Filepath, "Project name in manifest 
file is mandatory for managed deployments")
+                       errmsg := 
wski18n.T(wski18n.ID_ERR_MISSING_MANDATORY_KEY_X_key_X,
+                               map[string]interface{}{"key": "project name"})
+
+                       return 
wskderrors.NewYAMLFileFormatError(manifest.Filepath, errmsg)
                }
                // Every OpenWhisk entity in the manifest file will be 
annotated with:
                //managed: '{"__OW__PROJECT__NAME": <name>, 
"__OW__PROJECT_HASH": <hash>, "__OW__FILE": <path>}'
                deployer.ManagedAnnotation, err = 
utils.GenerateManagedAnnotation(deployer.ProjectName, manifest.Filepath)
                if err != nil {
-                       // TODO see if we can pass in the YAML file path on 
first parameter
                        return 
wskderrors.NewYAMLFileFormatError(manifest.Filepath, err.Error())
                }
        }
@@ -179,8 +179,8 @@ func (deployer *ServiceDeployer) ConstructDeploymentPlan() 
error {
 
        // (TODO) delete this warning after deprecating application in manifest 
file
        if manifest.Application.Name != "" {
-               warningString := wski18n.T("WARNING: application in manifest 
file will soon be deprecated, please use project instead.\n")
-               whisk.Debug(whisk.DbgWarn, warningString)
+               
wskprint.PrintOpenWhiskWarning(wski18n.T(wski18n.ID_WARN_DEPRECATED_KEY_REPLACED,
+                       map[string]interface{}{"oldkey": "application", 
"newkey": "project", "filetype": "manifest"}))
        }
 
        // process deployment file
@@ -194,17 +194,21 @@ func (deployer *ServiceDeployer) 
ConstructDeploymentPlan() error {
 
                // (TODO) delete this warning after deprecating application in 
deployment file
                if deploymentReader.DeploymentDescriptor.Application.Name != "" 
{
-                       warningString := wski18n.T("WARNING: application in 
deployment file will soon be deprecated, please use project instead.\n")
-                       whisk.Debug(whisk.DbgWarn, warningString)
+                       
wskprint.PrintOpenWhiskWarning(wski18n.T(wski18n.ID_WARN_DEPRECATED_KEY_REPLACED,
+                               map[string]interface{}{"oldkey": "application", 
"newkey": "project", "filetype": "deployment"}))
                }
 
-               // compare the name of the project/application
+               // compare the name of the project
                if 
len(deploymentReader.DeploymentDescriptor.GetProject().Packages) != 0 && 
len(projectName) != 0 {
                        projectNameDeploy := 
deploymentReader.DeploymentDescriptor.GetProject().Name
                        if projectNameDeploy != projectName {
-                               errorString := wski18n.T("The name of the 
project/application {{.projectNameDeploy}} in deployment file at 
[{{.deploymentFile}}] does not match the name of the project/application 
{{.projectNameManifest}}} in manifest file at [{{.manifestFile}}].",
-                                       
map[string]interface{}{"projectNameDeploy": projectNameDeploy, 
"deploymentFile": deployer.DeploymentPath,
-                                               "projectNameManifest": 
projectName, "manifestFile": deployer.ManifestPath})
+                               errorString := 
wski18n.T(wski18n.ID_ERR_MISMATCH_NAME_X_key_X_dname_X_dpath_X_mname_X_moath_X,
+                                       map[string]interface{}{
+                                               "key": "project",
+                                               "dname": projectNameDeploy,
+                                               "dpath": 
deployer.DeploymentPath,
+                                               "mname": projectName,
+                                               "mpath": deployer.ManifestPath})
                                return 
wskderrors.NewYAMLFileFormatError(manifest.Filepath, errorString)
                        }
                }
@@ -257,8 +261,8 @@ func (deployer *ServiceDeployer) 
ConstructUnDeploymentPlan() (*DeploymentProject
 
        // (TODO) delete this warning after deprecating application in manifest 
file
        if manifest.Application.Name != "" {
-               warningString := wski18n.T("WARNING: application in manifest 
file will soon be deprecated, please use project instead.\n")
-               whisk.Debug(whisk.DbgWarn, warningString)
+               
wskprint.PrintOpenWhiskWarning(wski18n.T(wski18n.ID_WARN_DEPRECATED_KEY_REPLACED,
+                       map[string]interface{}{"oldkey": "application", 
"newkey": "project", "filetype": "manifest"}))
        }
 
        // process deployment file
@@ -271,16 +275,21 @@ func (deployer *ServiceDeployer) 
ConstructUnDeploymentPlan() (*DeploymentProject
 
                // (TODO) delete this warning after deprecating application in 
deployment file
                if deploymentReader.DeploymentDescriptor.Application.Name != "" 
{
-                       warningString := wski18n.T("WARNING: application in 
deployment file will soon be deprecated, please use project instead.\n")
-                       whisk.Debug(whisk.DbgWarn, warningString)
+                       
wskprint.PrintOpenWhiskWarning(wski18n.T(wski18n.ID_WARN_DEPRECATED_KEY_REPLACED,
+                               map[string]interface{}{"oldkey": "application", 
"newkey": "project", "filetype": "deployment"}))
                }
+
                // compare the name of the application
                if 
len(deploymentReader.DeploymentDescriptor.GetProject().Packages) != 0 && 
len(projectName) != 0 {
                        projectNameDeploy := 
deploymentReader.DeploymentDescriptor.GetProject().Name
                        if projectNameDeploy != projectName {
-                               errorString := wski18n.T("The name of the 
project/application {{.projectNameDeploy}} in deployment file at 
[{{.deploymentFile}}] does not match the name of the application 
{{.projectNameManifest}}} in manifest file at [{{.manifestFile}}].",
-                                       
map[string]interface{}{"projectNameDeploy": projectNameDeploy, 
"deploymentFile": deployer.DeploymentPath,
-                                               "projectNameManifest": 
projectName, "manifestFile": deployer.ManifestPath})
+                               errorString := 
wski18n.T(wski18n.ID_ERR_MISMATCH_NAME_X_key_X_dname_X_dpath_X_mname_X_moath_X,
+                                       map[string]interface{}{
+                                               "key": "project",
+                                               "dname": projectNameDeploy,
+                                               "dpath": 
deployer.DeploymentPath,
+                                               "mname": projectName,
+                                               "mpath": deployer.ManifestPath})
                                return deployer.Deployment, 
wskderrors.NewYAMLFileFormatError(manifest.Filepath, errorString)
                        }
                }
@@ -301,9 +310,10 @@ func (deployer *ServiceDeployer) Deploy() error {
 
        if deployer.IsInteractive == true {
                deployer.printDeploymentAssets(deployer.Deployment)
-               reader := bufio.NewReader(os.Stdin)
-               fmt.Print("Do you really want to deploy this? (y/N): ")
 
+               // TODO() See if we can use the promptForValue() function in 
whiskclient.go
+               reader := bufio.NewReader(os.Stdin)
+               fmt.Print(wski18n.T(wski18n.ID_MSG_PROMPT_DEPLOY))
                text, _ := reader.ReadString('\n')
                text = strings.TrimSpace(text)
 
@@ -311,32 +321,34 @@ func (deployer *ServiceDeployer) Deploy() error {
                        text = "n"
                }
 
+               // TODO() make possible responses constants (enum?) and create 
"No" corallary
                if strings.EqualFold(text, "y") || strings.EqualFold(text, 
"yes") {
                        deployer.InteractiveChoice = true
                        if err := deployer.deployAssets(); err != nil {
-                               errString := wski18n.T("Deployment did not 
complete sucessfully. Run `wskdeploy undeploy` to remove partially deployed 
assets.\n")
-                               whisk.Debug(whisk.DbgError, errString)
+                               
wskprint.PrintOpenWhiskError(wski18n.T(wski18n.ID_MSG_DEPLOYMENT_FAILED))
                                return err
                        }
 
-                       wskprint.PrintOpenWhiskSuccess(wski18n.T("Deployment 
completed successfully.\n"))
+                       
wskprint.PrintOpenWhiskSuccess(wski18n.T(wski18n.ID_MSG_DEPLOYMENT_SUCCEEDED))
                        return nil
 
                } else {
+                       // TODO() Should acknowledge if user typed (No/N/n) and 
if not still exit, but
+                       // indicate we took the response to mean "No", 
typically by displaying interpolated
+                       // response in parenthesis
                        deployer.InteractiveChoice = false
-                       wskprint.PrintOpenWhiskSuccess(wski18n.T("OK. 
Cancelling deployment.\n"))
+                       
wskprint.PrintOpenWhiskSuccess(wski18n.T(wski18n.ID_MSG_DEPLOYMENT_CANCELLED))
                        return nil
                }
        }
 
        // non-interactive
        if err := deployer.deployAssets(); err != nil {
-               errString := wski18n.T("Deployment did not complete 
sucessfully. Run `wskdeploy undeploy` to remove partially deployed assets.\n")
-               whisk.Debug(whisk.DbgError, errString)
+               
wskprint.PrintOpenWhiskError(wski18n.T(wski18n.ID_MSG_DEPLOYMENT_FAILED))
                return err
        }
 
-       wskprint.PrintOpenWhiskSuccess(wski18n.T("Deployment completed 
successfully.\n"))
+       
wskprint.PrintOpenWhiskSuccess(wski18n.T(wski18n.T(wski18n.ID_MSG_DEPLOYMENT_SUCCEEDED)))
        return nil
 
 }
@@ -377,7 +389,7 @@ func (deployer *ServiceDeployer) deployAssets() error {
        // from the manifest file must result in undeployment of those deleted 
entities
        if utils.Flags.Managed {
                if err := 
deployer.RefreshManagedEntities(deployer.ManagedAnnotation); err != nil {
-                       errString := wski18n.T("Undeployment of deleted 
entities did not complete sucessfully during managed deployment. Run `wskdeploy 
undeploy` to remove partially deployed assets.\n")
+                       errString := 
wski18n.T(wski18n.ID_MSG_MANAGED_UNDEPLOYMENT_FAILED)
                        whisk.Debug(whisk.DbgError, errString)
                        return err
                }
@@ -389,8 +401,8 @@ func (deployer *ServiceDeployer) deployAssets() error {
 func (deployer *ServiceDeployer) DeployDependencies() error {
        for _, pack := range deployer.Deployment.Packages {
                for depName, depRecord := range pack.Dependencies {
-                       output := wski18n.T("Deploying dependency {{.output}} 
...",
-                               map[string]interface{}{"output": depName})
+                       output := 
wski18n.T(wski18n.ID_MSG_DEPENDENCY_DEPLOYING_X_name_X,
+                               map[string]interface{}{"name": depName})
                        whisk.Debug(whisk.DbgInfo, output)
 
                        if depRecord.IsBinding {
@@ -413,8 +425,8 @@ func (deployer *ServiceDeployer) DeployDependencies() error 
{
                                if error != nil {
                                        return error
                                } else {
-                                       output := wski18n.T("Dependency 
{{.output}} has been successfully deployed.\n",
-                                               
map[string]interface{}{"output": depName})
+                                       output := 
wski18n.T(wski18n.ID_MSG_DEPENDENCY_DEPLOYMENT_SUCCESS_X_name_X,
+                                               map[string]interface{}{"name": 
depName})
                                        whisk.Debug(whisk.DbgInfo, output)
                                }
 
@@ -430,8 +442,8 @@ func (deployer *ServiceDeployer) DeployDependencies() error 
{
                                }
 
                                if err := depServiceDeployer.deployAssets(); 
err != nil {
-                                       errString := wski18n.T("Deployment of 
dependency {{.depName}} did not complete sucessfully. Run `wskdeploy undeploy` 
to remove partially deployed assets.\n",
-                                               
map[string]interface{}{"depName": depName})
+                                       errString := 
wski18n.T(wski18n.ID_MSG_DEPENDENCY_DEPLOYMENT_FAILURE_X_name_X,
+                                               map[string]interface{}{"name": 
depName})
                                        wskprint.PrintOpenWhiskError(errString)
                                        return err
                                }
@@ -459,8 +471,8 @@ func (deployer *ServiceDeployer) DeployDependencies() error 
{
                                        if err != nil {
                                                return err
                                        } else {
-                                               output := wski18n.T("Dependency 
{{.output}} has been successfully deployed.\n",
-                                                       
map[string]interface{}{"output": depName})
+                                               output := 
wski18n.T(wski18n.ID_MSG_DEPENDENCY_DEPLOYMENT_SUCCESS_X_name_X,
+                                                       
map[string]interface{}{"name": depName})
                                                whisk.Debug(whisk.DbgInfo, 
output)
                                        }
                                }
@@ -471,6 +483,7 @@ func (deployer *ServiceDeployer) DeployDependencies() error 
{
        return nil
 }
 
+// TODO() display "update" | "synced" messages pre/post
 func (deployer *ServiceDeployer) RefreshManagedEntities(maValue 
whisk.KeyValue) error {
 
        ma := maValue.Value.(map[string]interface{})
@@ -489,6 +502,8 @@ func (deployer *ServiceDeployer) 
RefreshManagedEntities(maValue whisk.KeyValue)
        return nil
 
 }
+
+// TODO() display "update" | "synced" messages pre/post
 func (deployer *ServiceDeployer) RefreshManagedActions(packageName string, ma 
map[string]interface{}) error {
        options := whisk.ActionListOptions{}
        // get a list of actions in your namespace
@@ -512,10 +527,14 @@ func (deployer *ServiceDeployer) 
RefreshManagedActions(packageName string, ma ma
                        // that this action is deleted from the project in 
manifest file
                        if aa[utils.OW_PROJECT_NAME] == 
ma[utils.OW_PROJECT_NAME] && aa[utils.OW_PROJECT_HASH] != 
ma[utils.OW_PROJECT_HASH] {
                                actionName := 
strings.Join([]string{packageName, action.Name}, "/")
-                               output := wski18n.T("Found the action 
{{.action}} which is deleted"+
-                                       " from the current project {{.project}} 
in manifest file which is being undeployed.\n",
-                                       map[string]interface{}{"action": 
actionName, "project": aa[utils.OW_PROJECT_NAME]})
-                               whisk.Debug(whisk.DbgInfo, output)
+
+                               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]})
+                               wskprint.PrintOpenWhiskWarning(output)
+
                                var err error
                                err = retry(DEFAULT_ATTEMPTS, DEFAULT_INTERVAL, 
func() error {
                                        _, err := 
deployer.Client.Actions.Delete(actionName)
@@ -531,6 +550,7 @@ func (deployer *ServiceDeployer) 
RefreshManagedActions(packageName string, ma ma
        return nil
 }
 
+// TODO() display "update" | "synced" messages pre/post
 func (deployer *ServiceDeployer) RefreshManagedTriggers(ma 
map[string]interface{}) error {
        options := whisk.TriggerListOptions{}
        // Get list of triggers in your namespace
@@ -549,10 +569,13 @@ func (deployer *ServiceDeployer) 
RefreshManagedTriggers(ma map[string]interface{
                        ta := a.(map[string]interface{})
                        if ta[utils.OW_PROJECT_NAME] == 
ma[utils.OW_PROJECT_NAME] && ta[utils.OW_PROJECT_HASH] != 
ma[utils.OW_PROJECT_HASH] {
                                // we have found a trigger which was earlier 
part of the current project
-                               output := wski18n.T("Found the trigger 
{{.trigger}} which is deleted"+
-                                       " from the current project {{.project}} 
in manifest file which is being undeployed.\n",
-                                       map[string]interface{}{"trigger": 
trigger.Name, "project": ma[utils.OW_PROJECT_NAME]})
-                               whisk.Debug(whisk.DbgInfo, output)
+                               output := 
wski18n.T(wski18n.ID_MSG_MANAGED_FOUND_DELETED_X_key_X_name_X_project_X,
+                                       map[string]interface{}{
+                                               "key": "trigger",
+                                               "name": trigger.Name,
+                                               "project": 
ma[utils.OW_PROJECT_NAME]})
+                               wskprint.PrintOpenWhiskWarning(output)
+
                                var err error
                                err = retry(DEFAULT_ATTEMPTS, DEFAULT_INTERVAL, 
func() error {
                                        _, _, err := 
deployer.Client.Triggers.Delete(trigger.Name)
@@ -568,10 +591,13 @@ func (deployer *ServiceDeployer) 
RefreshManagedTriggers(ma map[string]interface{
        return nil
 }
 
+// TODO() engage community to allow metadata (annotations) on Rules
+// TODO() display "update" | "synced" messages pre/post
 func (deployer *ServiceDeployer) RefreshManagedRules(ma 
map[string]interface{}) error {
        return nil
 }
 
+// TODO() display "update" | "synced" messages pre/post
 func (deployer *ServiceDeployer) RefreshManagedPackages(ma 
map[string]interface{}) error {
        options := whisk.PackageListOptions{}
        // Get the list of packages in your namespace
@@ -595,10 +621,13 @@ func (deployer *ServiceDeployer) 
RefreshManagedPackages(ma map[string]interface{
                        }
                        // we have found a package which was earlier part of 
the current project
                        if pa[utils.OW_PROJECT_NAME] == 
ma[utils.OW_PROJECT_NAME] && pa[utils.OW_PROJECT_HASH] != 
ma[utils.OW_PROJECT_HASH] {
-                               output := wski18n.T("Found the package 
{{.package}} which is deleted"+
-                                       " from the current project {{.project}} 
in manifest file which is being undeployed.\n",
-                                       map[string]interface{}{"package": 
pkg.Name, "project": pa[utils.OW_PROJECT_NAME]})
-                               whisk.Debug(whisk.DbgInfo, output)
+                               output := 
wski18n.T(wski18n.ID_MSG_MANAGED_FOUND_DELETED_X_key_X_name_X_project_X,
+                                       map[string]interface{}{
+                                               "key": "package",
+                                               "name": pkg.Name,
+                                               "project": 
pa[utils.OW_PROJECT_NAME]})
+                               wskprint.PrintOpenWhiskWarning(output)
+
                                var err error
                                err = retry(DEFAULT_ATTEMPTS, DEFAULT_INTERVAL, 
func() error {
                                        _, err := 
deployer.Client.Packages.Delete(pkg.Name)
@@ -629,9 +658,9 @@ func (deployer *ServiceDeployer) DeploySequences() error {
 
        for _, pack := range deployer.Deployment.Packages {
                for _, action := range pack.Sequences {
-                       error := deployer.createAction(pack.Package.Name, 
action.Action)
-                       if error != nil {
-                               return error
+                       err := deployer.createAction(pack.Package.Name, 
action.Action)
+                       if err != nil {
+                               return err
                        }
                }
        }
@@ -657,14 +686,14 @@ func (deployer *ServiceDeployer) DeployTriggers() error {
        for _, trigger := range deployer.Deployment.Triggers {
 
                if feedname, isFeed := utils.IsFeedAction(trigger); isFeed {
-                       error := deployer.createFeedAction(trigger, feedname)
-                       if error != nil {
-                               return error
+                       err := deployer.createFeedAction(trigger, feedname)
+                       if err != nil {
+                               return err
                        }
                } else {
-                       error := deployer.createTrigger(trigger)
-                       if error != nil {
-                               return error
+                       err := deployer.createTrigger(trigger)
+                       if err != nil {
+                               return err
                        }
                }
 
@@ -676,9 +705,9 @@ func (deployer *ServiceDeployer) DeployTriggers() error {
 // Deploy Rules into OpenWhisk
 func (deployer *ServiceDeployer) DeployRules() error {
        for _, rule := range deployer.Deployment.Rules {
-               error := deployer.createRule(rule)
-               if error != nil {
-                       return error
+               err := deployer.createRule(rule)
+               if err != nil {
+                       return err
                }
        }
        return nil
@@ -687,20 +716,19 @@ func (deployer *ServiceDeployer) DeployRules() error {
 // Deploy Apis into OpenWhisk
 func (deployer *ServiceDeployer) DeployApis() error {
        for _, api := range deployer.Deployment.Apis {
-               error := deployer.createApi(api)
-               if error != nil {
-                       return error
+               err := deployer.createApi(api)
+               if err != nil {
+                       return err
                }
        }
        return nil
 }
 
 func (deployer *ServiceDeployer) createBinding(packa *whisk.BindingPackage) 
error {
-       output := wski18n.T("Deploying package binding {{.output}} ...",
-               map[string]interface{}{"output": packa.Name})
-       whisk.Debug(whisk.DbgInfo, output)
-       var err error
 
+       displayPreprocessingInfo("package binding", packa.Name, true)
+
+       var err error
        var response *http.Response
        err = retry(DEFAULT_ATTEMPTS, DEFAULT_INTERVAL, func() error {
                _, response, err = deployer.Client.Packages.Insert(packa, true)
@@ -708,23 +736,17 @@ func (deployer *ServiceDeployer) createBinding(packa 
*whisk.BindingPackage) erro
        })
 
        if err != nil {
-               wskErr := err.(*whisk.WskError)
-               errString := wski18n.T("Got error creating package binding with 
error message: {{.err}} and error code: {{.code}}.\n",
-                       map[string]interface{}{"err": wskErr.Error(), "code": 
strconv.Itoa(wskErr.ExitCode)})
-               whisk.Debug(whisk.DbgError, errString)
-               return wskderrors.NewWhiskClientError(wskErr.Error(), 
wskErr.ExitCode, response)
-       } else {
-               output := wski18n.T("Package binding {{.output}} has been 
successfully deployed.\n",
-                       map[string]interface{}{"output": packa.Name})
-               whisk.Debug(whisk.DbgInfo, output)
+               return createWhiskClientError(err.(*whisk.WskError), response, 
"package binding", true)
        }
+
+       displayPostprocessingInfo("package binding", packa.Name, true)
        return nil
 }
 
 func (deployer *ServiceDeployer) createPackage(packa *whisk.Package) error {
-       output := wski18n.T("Deploying package {{.output}} ...",
-               map[string]interface{}{"output": packa.Name})
-       whisk.Debug(whisk.DbgInfo, output)
+
+       displayPreprocessingInfo("package", packa.Name, true)
+
        var err error
        var response *http.Response
        err = retry(DEFAULT_ATTEMPTS, DEFAULT_INTERVAL, func() error {
@@ -732,23 +754,17 @@ func (deployer *ServiceDeployer) createPackage(packa 
*whisk.Package) error {
                return err
        })
        if err != nil {
-               wskErr := err.(*whisk.WskError)
-               errString := wski18n.T("Got error creating package with error 
message: {{.err}} and error code: {{.code}}.\n",
-                       map[string]interface{}{"err": wskErr.Error(), "code": 
strconv.Itoa(wskErr.ExitCode)})
-               whisk.Debug(whisk.DbgError, errString)
-               return wskderrors.NewWhiskClientError(wskErr.Error(), 
wskErr.ExitCode, response)
-       } else {
-               output := wski18n.T("Package {{.output}} has been successfully 
deployed.\n",
-                       map[string]interface{}{"output": packa.Name})
-               whisk.Debug(whisk.DbgInfo, output)
+               return createWhiskClientError(err.(*whisk.WskError), response, 
"package", true)
        }
+
+       displayPostprocessingInfo("package", packa.Name, true)
        return nil
 }
 
 func (deployer *ServiceDeployer) createTrigger(trigger *whisk.Trigger) error {
-       output := wski18n.T("Deploying trigger {{.output}} ...",
-               map[string]interface{}{"output": trigger.Name})
-       whisk.Debug(whisk.DbgInfo, output)
+
+       displayPreprocessingInfo("trigger", trigger.Name, true)
+
        var err error
        var response *http.Response
        err = retry(DEFAULT_ATTEMPTS, DEFAULT_INTERVAL, func() error {
@@ -756,23 +772,17 @@ func (deployer *ServiceDeployer) createTrigger(trigger 
*whisk.Trigger) error {
                return err
        })
        if err != nil {
-               wskErr := err.(*whisk.WskError)
-               errString := wski18n.T("Got error creating trigger with error 
message: {{.err}} and error code: {{.code}}.\n",
-                       map[string]interface{}{"err": wskErr.Error(), "code": 
strconv.Itoa(wskErr.ExitCode)})
-               whisk.Debug(whisk.DbgError, errString)
-               return wskderrors.NewWhiskClientError(wskErr.Error(), 
wskErr.ExitCode, response)
-       } else {
-               output := wski18n.T("Trigger {{.output}} has been successfully 
deployed.\n",
-                       map[string]interface{}{"output": trigger.Name})
-               whisk.Debug(whisk.DbgInfo, output)
+               return createWhiskClientError(err.(*whisk.WskError), response, 
"trigger", true)
        }
+
+       displayPostprocessingInfo("trigger", trigger.Name, true)
        return nil
 }
 
 func (deployer *ServiceDeployer) createFeedAction(trigger *whisk.Trigger, 
feedName string) error {
-       output := wski18n.T("Deploying trigger feed {{.output}} ...",
-               map[string]interface{}{"output": trigger.Name})
-       whisk.Debug(whisk.DbgInfo, output)
+
+       displayPreprocessingInfo("trigger feed", trigger.Name, true)
+
        // to hold and modify trigger parameters, not passed by ref?
        params := make(map[string]interface{})
 
@@ -811,11 +821,7 @@ func (deployer *ServiceDeployer) createFeedAction(trigger 
*whisk.Trigger, feedNa
                return err
        })
        if err != nil {
-               wskErr := err.(*whisk.WskError)
-               errString := wski18n.T("Got error creating trigger with error 
message: {{.err}} and error code: {{.code}}.\n",
-                       map[string]interface{}{"err": wskErr.Error(), "code": 
strconv.Itoa(wskErr.ExitCode)})
-               whisk.Debug(whisk.DbgError, errString)
-               return wskderrors.NewWhiskClientError(wskErr.Error(), 
wskErr.ExitCode, response)
+               return createWhiskClientError(err.(*whisk.WskError), response, 
"trigger feed", true)
        } else {
 
                qName, err := utils.ParseQualifiedName(feedName, 
deployer.ClientConfig.Namespace)
@@ -840,20 +846,17 @@ func (deployer *ServiceDeployer) createFeedAction(trigger 
*whisk.Trigger, feedNa
                                return err
                        })
 
-                       wskErr := err.(*whisk.WskError)
-                       errString := wski18n.T("Got error creating trigger feed 
with error message: {{.err}} and error code: {{.code}}.\n",
-                               map[string]interface{}{"err": wskErr.Error(), 
"code": strconv.Itoa(wskErr.ExitCode)})
-                       whisk.Debug(whisk.DbgError, errString)
-                       return wskderrors.NewWhiskClientError(wskErr.Error(), 
wskErr.ExitCode, response)
+                       return createWhiskClientError(err.(*whisk.WskError), 
response, "trigger feed", false)
                }
        }
-       output = wski18n.T("Trigger feed {{.output}} has been successfully 
deployed.\n",
-               map[string]interface{}{"output": trigger.Name})
-       whisk.Debug(whisk.DbgInfo, output)
+
+       displayPostprocessingInfo("trigger feed", trigger.Name, true)
        return nil
 }
 
 func (deployer *ServiceDeployer) createRule(rule *whisk.Rule) error {
+       displayPreprocessingInfo("rule", rule.Name, true)
+
        // The rule's trigger should include the namespace with pattern 
/namespace/trigger
        rule.Trigger = deployer.getQualifiedName(rule.Trigger.(string), 
deployer.ClientConfig.Namespace)
        // The rule's action should include the namespace and package
@@ -867,9 +870,6 @@ func (deployer *ServiceDeployer) createRule(rule 
*whisk.Rule) error {
                // if not, we assume the action is inside the root package
                rule.Action = 
deployer.getQualifiedName(strings.Join([]string{deployer.RootPackageName, 
rule.Action.(string)}, "/"), deployer.ClientConfig.Namespace)
        }
-       output := wski18n.T("Deploying rule {{.output}} ...",
-               map[string]interface{}{"output": rule.Name})
-       whisk.Debug(whisk.DbgInfo, output)
 
        var err error
        var response *http.Response
@@ -879,16 +879,10 @@ func (deployer *ServiceDeployer) createRule(rule 
*whisk.Rule) error {
        })
 
        if err != nil {
-               wskErr := err.(*whisk.WskError)
-               errString := wski18n.T("Got error creating rule with error 
message: {{.err}} and error code: {{.code}}.\n",
-                       map[string]interface{}{"err": wskErr.Error(), "code": 
strconv.Itoa(wskErr.ExitCode)})
-               whisk.Debug(whisk.DbgError, errString)
-               return wskderrors.NewWhiskClientError(wskErr.Error(), 
wskErr.ExitCode, response)
+               return createWhiskClientError(err.(*whisk.WskError), response, 
"rule", true)
        }
 
-       output = wski18n.T("Rule {{.output}} has been successfully deployed.\n",
-               map[string]interface{}{"output": rule.Name})
-       whisk.Debug(whisk.DbgInfo, output)
+       displayPostprocessingInfo("rule", rule.Name, true)
        return nil
 }
 
@@ -899,9 +893,8 @@ func (deployer *ServiceDeployer) createAction(pkgname 
string, action *whisk.Acti
                // the action will be created under package with pattern 
'packagename/actionname'
                action.Name = strings.Join([]string{pkgname, action.Name}, "/")
        }
-       output := wski18n.T("Deploying action {{.output}} ...",
-               map[string]interface{}{"output": action.Name})
-       whisk.Debug(whisk.DbgInfo, output)
+
+       displayPreprocessingInfo("action", action.Name, true)
 
        var err error
        var response *http.Response
@@ -911,45 +904,42 @@ func (deployer *ServiceDeployer) createAction(pkgname 
string, action *whisk.Acti
        })
 
        if err != nil {
-               wskErr := err.(*whisk.WskError)
-               errString := wski18n.T("Got error creating action with error 
message: {{.err}} and error code: {{.code}}.\n",
-                       map[string]interface{}{"err": wskErr.Error(), "code": 
strconv.Itoa(wskErr.ExitCode)})
-               whisk.Debug(whisk.DbgError, errString)
-               return wskderrors.NewWhiskClientError(wskErr.Error(), 
wskErr.ExitCode, response)
-       } else {
-               output := wski18n.T("Action {{.output}} has been successfully 
deployed.\n",
-                       map[string]interface{}{"output": action.Name})
-               whisk.Debug(whisk.DbgInfo, output)
+               return createWhiskClientError(err.(*whisk.WskError), response, 
"action", true)
        }
+
+       displayPostprocessingInfo("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)
+
        var err error
        var response *http.Response
+
+       // TODO() Is there an api delete function? could not find it
        err = retry(DEFAULT_ATTEMPTS, DEFAULT_INTERVAL, func() error {
                _, response, err = deployer.Client.Apis.Insert(api, nil, true)
                return err
        })
 
        if err != nil {
-               wskErr := err.(*whisk.WskError)
-               errString := wski18n.T("Got error creating api with error 
message: {{.err}} and error code: {{.code}}.\n",
-                       map[string]interface{}{"err": wskErr.Error(), "code": 
strconv.Itoa(wskErr.ExitCode)})
-               whisk.Debug(whisk.DbgError, errString)
-               return wskderrors.NewWhiskClientError(wskErr.Error(), 
wskErr.ExitCode, response)
+               return createWhiskClientError(err.(*whisk.WskError), response, 
"api", true)
        }
+
+       displayPostprocessingInfo("api", api.ApiDoc.ApiName, true)
        return nil
 }
 
 func (deployer *ServiceDeployer) UnDeploy(verifiedPlan *DeploymentProject) 
error {
        if deployer.IsInteractive == true {
                deployer.printDeploymentAssets(verifiedPlan)
-               reader := bufio.NewReader(os.Stdin)
-
-               fmt.Print("Do you really want to undeploy this? (y/N): ")
 
+               // TODO() See if we can use the promptForValue() function in 
whiskclient.go
+               reader := bufio.NewReader(os.Stdin)
+               fmt.Print(wski18n.T(wski18n.ID_MSG_PROMPT_UNDEPLOY))
                text, _ := reader.ReadString('\n')
                text = strings.TrimSpace(text)
 
@@ -957,34 +947,33 @@ func (deployer *ServiceDeployer) UnDeploy(verifiedPlan 
*DeploymentProject) error
                        text = "n"
                }
 
+               // TODO() Use constants for possible return values y/N/yes/No 
etc.
                if strings.EqualFold(text, "y") || strings.EqualFold(text, 
"yes") {
                        deployer.InteractiveChoice = true
 
                        if err := deployer.unDeployAssets(verifiedPlan); err != 
nil {
-                               
wskprint.PrintOpenWhiskError(wski18n.T("Undeployment did not complete 
sucessfully.\n"))
+                               
wskprint.PrintOpenWhiskError(wski18n.T(wski18n.T(wski18n.ID_MSG_UNDEPLOYMENT_FAILED)))
                                return err
                        }
 
-                       wskprint.PrintOpenWhiskSuccess(wski18n.T("Deployment 
removed successfully.\n"))
+                       
wskprint.PrintOpenWhiskSuccess(wski18n.T(wski18n.T(wski18n.ID_MSG_UNDEPLOYMENT_SUCCEEDED)))
                        return nil
 
                } else {
                        deployer.InteractiveChoice = false
-                       wskprint.PrintOpenWhiskSuccess(wski18n.T("OK. Canceling 
undeployment.\n"))
+                       
wskprint.PrintOpenWhiskSuccess(wski18n.T(wski18n.T(wski18n.ID_MSG_UNDEPLOYMENT_CANCELLED)))
                        return nil
                }
        }
 
        // non-interactive
        if err := deployer.unDeployAssets(verifiedPlan); err != nil {
-               errString := wski18n.T("Undeployment did not complete 
sucessfully.\n")
-               whisk.Debug(whisk.DbgError, errString)
+               
wskprint.PrintOpenWhiskError(wski18n.T(wski18n.T(wski18n.ID_MSG_UNDEPLOYMENT_FAILED)))
                return err
        }
 
-       wskprint.PrintOpenWhiskSuccess(wski18n.T("Deployment removed 
successfully.\n"))
+       
wskprint.PrintOpenWhiskSuccess(wski18n.T(wski18n.T(wski18n.ID_MSG_UNDEPLOYMENT_SUCCEEDED)))
        return nil
-
 }
 
 func (deployer *ServiceDeployer) unDeployAssets(verifiedPlan 
*DeploymentProject) error {
@@ -1014,14 +1003,13 @@ func (deployer *ServiceDeployer) 
unDeployAssets(verifiedPlan *DeploymentProject)
        }
 
        return nil
-
 }
 
 func (deployer *ServiceDeployer) UnDeployDependencies() error {
        for _, pack := range deployer.Deployment.Packages {
                for depName, depRecord := range pack.Dependencies {
-                       output := wski18n.T("Undeploying dependency 
{{.depName}} ...",
-                               map[string]interface{}{"depName": depName})
+                       output := 
wski18n.T(wski18n.ID_MSG_DEPENDENCY_UNDEPLOYING_X_name_X,
+                               map[string]interface{}{"name": depName})
                        whisk.Debug(whisk.DbgInfo, output)
 
                        if depRecord.IsBinding {
@@ -1055,24 +1043,20 @@ func (deployer *ServiceDeployer) UnDeployDependencies() 
error {
                                                        return err
                                                })
                                                if err != nil {
-                                                       wskErr := 
err.(*whisk.WskError)
-                                                       errString := 
wski18n.T("Got error deleting binding package with error message: {{.err}} and 
error code: {{.code}}.\n",
-                                                               
map[string]interface{}{"err": wskErr.Error(), "code": 
strconv.Itoa(wskErr.ExitCode)})
-                                                       
whisk.Debug(whisk.DbgError, errString)
-                                                       return 
wskderrors.NewWhiskClientError(wskErr.Error(), wskErr.ExitCode, response)
+                                                       return 
createWhiskClientError(err.(*whisk.WskError), response, "package binding", 
false)
                                                }
                                        }
                                }
 
                                if err := 
depServiceDeployer.unDeployAssets(plan); err != nil {
-                                       errString := wski18n.T("Undeployment of 
dependency {{.depName}} did not complete sucessfully.\n",
-                                               
map[string]interface{}{"depName": depName})
+                                       errString := 
wski18n.T(wski18n.ID_MSG_DEPENDENCY_UNDEPLOYMENT_FAILURE_X_name_X,
+                                               map[string]interface{}{"name": 
depName})
                                        whisk.Debug(whisk.DbgError, errString)
                                        return err
                                }
                        }
-                       output = wski18n.T("Dependency {{.depName}} has been 
successfully undeployed.\n",
-                               map[string]interface{}{"depName": depName})
+                       output = 
wski18n.T(wski18n.ID_MSG_DEPENDENCY_UNDEPLOYMENT_SUCCESS_X_name_X,
+                               map[string]interface{}{"name": depName})
                        whisk.Debug(whisk.DbgInfo, output)
                }
        }
@@ -1151,9 +1135,9 @@ func (deployer *ServiceDeployer) UnDeployRules(deployment 
*DeploymentProject) er
 }
 
 func (deployer *ServiceDeployer) deletePackage(packa *whisk.Package) error {
-       output := wski18n.T("Removing package {{.package}} ...",
-               map[string]interface{}{"package": packa.Name})
-       whisk.Debug(whisk.DbgInfo, output)
+
+       displayPreprocessingInfo("package", packa.Name, false)
+
        if _, _, ok := deployer.Client.Packages.Get(packa.Name); ok == nil {
                var err error
                var response *http.Response
@@ -1163,20 +1147,16 @@ func (deployer *ServiceDeployer) deletePackage(packa 
*whisk.Package) error {
                })
 
                if err != nil {
-                       wskErr := err.(*whisk.WskError)
-                       errString := wski18n.T("Got error deleting package with 
error message: {{.err}} and error code: {{.code}}.\n",
-                               map[string]interface{}{"err": wskErr.Error(), 
"code": strconv.Itoa(wskErr.ExitCode)})
-                       whisk.Debug(whisk.DbgError, errString)
-                       return wskderrors.NewWhiskClientError(wskErr.Error(), 
wskErr.ExitCode, response)
+                       return createWhiskClientError(err.(*whisk.WskError), 
response, "package", false)
                }
        }
+       displayPostprocessingInfo("package", packa.Name, false)
        return nil
 }
 
 func (deployer *ServiceDeployer) deleteTrigger(trigger *whisk.Trigger) error {
-       output := wski18n.T("Removing trigger {{.trigger}} ...",
-               map[string]interface{}{"trigger": trigger.Name})
-       whisk.Debug(whisk.DbgInfo, output)
+
+       displayPreprocessingInfo("trigger", trigger.Name, false)
 
        var err error
        var response *http.Response
@@ -1186,16 +1166,10 @@ func (deployer *ServiceDeployer) deleteTrigger(trigger 
*whisk.Trigger) error {
        })
 
        if err != nil {
-               wskErr := err.(*whisk.WskError)
-               errString := wski18n.T("Got error deleting trigger with error 
message: {{.err}} and error code: {{.code}}.\n",
-                       map[string]interface{}{"err": wskErr.Error(), "code": 
strconv.Itoa(wskErr.ExitCode)})
-               whisk.Debug(whisk.DbgError, errString)
-               return wskderrors.NewWhiskClientError(wskErr.Error(), 
wskErr.ExitCode, response)
-       } else {
-               output := wski18n.T("Trigger {{.trigger}} has been removed.\n",
-                       map[string]interface{}{"trigger": trigger.Name})
-               whisk.Debug(whisk.DbgInfo, output)
+               return createWhiskClientError(err.(*whisk.WskError), response, 
"trigger", false)
        }
+
+       displayPostprocessingInfo("trigger", trigger.Name, false)
        return nil
 }
 
@@ -1242,11 +1216,7 @@ func (deployer *ServiceDeployer) 
deleteFeedAction(trigger *whisk.Trigger, feedNa
                })
 
                if err != nil {
-                       wskErr := err.(*whisk.WskError)
-                       errString := wski18n.T("Got error deleting trigger with 
error message: {{.err}} and error code: {{.code}}.\n",
-                               map[string]interface{}{"err": wskErr.Error(), 
"code": strconv.Itoa(wskErr.ExitCode)})
-                       whisk.Debug(whisk.DbgError, errString)
-                       return wskderrors.NewWhiskClientError(wskErr.Error(), 
wskErr.ExitCode, response)
+                       return createWhiskClientError(err.(*whisk.WskError), 
response, "trigger", false)
                }
        }
 
@@ -1254,9 +1224,8 @@ func (deployer *ServiceDeployer) deleteFeedAction(trigger 
*whisk.Trigger, feedNa
 }
 
 func (deployer *ServiceDeployer) deleteRule(rule *whisk.Rule) error {
-       output := wski18n.T("Removing rule {{.rule}} ...",
-               map[string]interface{}{"rule": rule.Name})
-       whisk.Debug(whisk.DbgInfo, output)
+
+       displayPreprocessingInfo("rule", rule.Name, false)
 
        var err error
        var response *http.Response
@@ -1266,29 +1235,21 @@ func (deployer *ServiceDeployer) deleteRule(rule 
*whisk.Rule) error {
        })
 
        if err != nil {
-               wskErr := err.(*whisk.WskError)
-               errString := wski18n.T("Got error deleting rule with error 
message: {{.err}} and error code: {{.code}}.\n",
-                       map[string]interface{}{"err": wskErr.Error(), "code": 
strconv.Itoa(wskErr.ExitCode)})
-               whisk.Debug(whisk.DbgError, errString)
-               return wskderrors.NewWhiskClientError(wskErr.Error(), 
wskErr.ExitCode, response)
+               return createWhiskClientError(err.(*whisk.WskError), response, 
"rule", false)
        }
-       output = wski18n.T("Rule {{.rule}} has been removed.\n",
-               map[string]interface{}{"rule": rule.Name})
-       whisk.Debug(whisk.DbgInfo, output)
+       displayPostprocessingInfo("rule", rule.Name, false)
        return nil
 }
 
 // Utility function to call go-whisk framework to make action
 func (deployer *ServiceDeployer) deleteAction(pkgname string, action 
*whisk.Action) error {
-       // call ActionService Thru Client
+       // call ActionService through Client
        if deployer.DeployActionInPackage {
                // the action will be deleted under package with pattern 
'packagename/actionname'
                action.Name = strings.Join([]string{pkgname, action.Name}, "/")
        }
 
-       output := wski18n.T("Removing action {{.action}} ...",
-               map[string]interface{}{"action": action.Name})
-       whisk.Debug(whisk.DbgInfo, output)
+       displayPreprocessingInfo("action", action.Name, false)
 
        if _, _, ok := deployer.Client.Actions.Get(action.Name); ok == nil {
                var err error
@@ -1299,17 +1260,11 @@ func (deployer *ServiceDeployer) deleteAction(pkgname 
string, action *whisk.Acti
                })
 
                if err != nil {
-                       wskErr := err.(*whisk.WskError)
-                       errString := wski18n.T("Got error deleting action with 
error message: {{.err}} and error code: {{.code}}.\n",
-                               map[string]interface{}{"err": wskErr.Error(), 
"code": strconv.Itoa(wskErr.ExitCode)})
-                       whisk.Debug(whisk.DbgError, errString)
-                       return wskderrors.NewWhiskClientError(wskErr.Error(), 
wskErr.ExitCode, response)
+                       return createWhiskClientError(err.(*whisk.WskError), 
response, "action", false)
 
                }
-               output = wski18n.T("Action {{.action}} has been removed.\n",
-                       map[string]interface{}{"action": action.Name})
-               whisk.Debug(whisk.DbgInfo, output)
        }
+       displayPostprocessingInfo("action", action.Name, false)
        return nil
 }
 
@@ -1324,6 +1279,7 @@ func retry(attempts int, sleep time.Duration, callback 
func() error) error {
                        wskErr := err.(*whisk.WskError)
                        if wskErr.ExitCode == CONFLICT_CODE && 
strings.Contains(wskErr.Error(), CONFLICT_MESSAGE) {
                                time.Sleep(sleep)
+                               // TODO() i18n
                                whisk.Debug(whisk.DbgError, "Retrying [%s] 
after error: %s\n", strconv.Itoa(i+1), err)
                        } else {
                                return err
@@ -1478,3 +1434,52 @@ func (deployer *ServiceDeployer) 
getDependentDeployer(depName string, depRecord
 
        return depServiceDeployer, nil
 }
+
+func displayPreprocessingInfo(entity string, name string, onDeploy bool){
+
+       var msgKey string
+       if onDeploy{
+               msgKey = wski18n.ID_MSG_ENTITY_DEPLOYING_X_key_X_name_X
+       } else {
+               msgKey = wski18n.ID_MSG_ENTITY_UNDEPLOYING_X_key_X_name_X
+       }
+       msg := wski18n.T(msgKey,
+               map[string]interface{}{
+                       "key": entity,
+                       "name": name})
+       whisk.Debug(whisk.DbgInfo, msg)
+}
+
+func displayPostprocessingInfo(entity string, name string, onDeploy bool){
+
+       var msgKey string
+       if onDeploy{
+               msgKey = wski18n.ID_MSG_ENTITY_DEPLOYED_SUCCESS_X_key_X_name_X
+       } else {
+               msgKey = wski18n.ID_MSG_ENTITY_UNDEPLOYED_SUCCESS_X_key_X_name_X
+       }
+       errString := wski18n.T(msgKey,
+               map[string]interface{}{
+                       "key": entity,
+                       "name": name})
+       whisk.Debug(whisk.DbgInfo, errString)
+}
+
+func createWhiskClientError(err *whisk.WskError, response *http.Response, 
entity string, onCreate bool)(*wskderrors.WhiskClientError){
+
+       var msgKey string
+       if onCreate{
+               msgKey = wski18n.ID_ERR_CREATE_ENTITY_X_key_X_err_X_code_X
+       } else {
+               msgKey = wski18n.ID_ERR_DELETE_ENTITY_X_key_X_err_X_code_X
+       }
+       errString := wski18n.T(msgKey,
+               map[string]interface{}{
+                       "key": entity,
+                       "err": err.Error(),
+                       "code": strconv.Itoa(err.ExitCode)})
+       whisk.Debug(whisk.DbgError, errString)
+
+       // TODO() add errString as an AppendDetail() to WhiskClientError
+       return wskderrors.NewWhiskClientError(err.Error(), err.ExitCode, 
response)
+}
diff --git a/deployers/whiskclient.go b/deployers/whiskclient.go
index c5a5df58..64dba3d1 100644
--- a/deployers/whiskclient.go
+++ b/deployers/whiskclient.go
@@ -30,16 +30,16 @@ import (
        "github.com/apache/incubator-openwhisk-wskdeploy/parsers"
        "github.com/apache/incubator-openwhisk-wskdeploy/utils"
        "github.com/apache/incubator-openwhisk-wskdeploy/wski18n"
-       "github.com/apache/incubator-openwhisk-wskdeploy/wskderrors"
        "github.com/apache/incubator-openwhisk-wskdeploy/wskprint"
+       "github.com/apache/incubator-openwhisk-wskdeploy/wskderrors"
 )
 
 const (
-       COMMANDLINE  = "wskdeploy command line"
+       COMMANDLINE = "wskdeploy command line"
        DEFAULTVALUE = "default value"
-       WSKPROPS     = ".wskprops"
+       WSKPROPS = ".wskprops"
        WHISKPROPERTY = "whisk.properties"
-       INTERINPUT   = "interactve input"
+       INTERINPUT = "interactve input"
 )
 
 type PropertyValue struct {
@@ -67,7 +67,7 @@ var GetCommandLineFlags = func() (string, string, string, 
string, string) {
        return utils.Flags.ApiHost, utils.Flags.Auth, utils.Flags.Namespace, 
utils.Flags.Key, utils.Flags.Cert
 }
 
-var CreateNewClient = func (config_input *whisk.Config) (*whisk.Client, error) 
{
+var CreateNewClient = func(config_input *whisk.Config) (*whisk.Client, error) {
        var netClient = &http.Client{
                Timeout: time.Second * utils.DEFAULT_HTTP_TIMEOUT,
        }
@@ -85,16 +85,16 @@ func NewWhiskConfig(proppath string, deploymentPath string, 
manifestPath string,
        credential := PropertyValue{}
        namespace := PropertyValue{}
        apiHost := PropertyValue{}
-    key := PropertyValue{}
-    cert := PropertyValue{}
+       key := PropertyValue{}
+       cert := PropertyValue{}
 
        // read credentials from command line
        apihost, auth, ns, keyfile, certfile := GetCommandLineFlags()
        credential = GetPropertyValue(credential, auth, COMMANDLINE)
        namespace = GetPropertyValue(namespace, ns, COMMANDLINE)
        apiHost = GetPropertyValue(apiHost, apihost, COMMANDLINE)
-    key = GetPropertyValue(key, keyfile, COMMANDLINE)
-    cert = GetPropertyValue(cert, certfile, COMMANDLINE)
+       key = GetPropertyValue(key, keyfile, COMMANDLINE)
+       cert = GetPropertyValue(cert, certfile, COMMANDLINE)
 
        // now, read them from deployment file if not found on command line
        if len(credential.Value) == 0 || len(namespace.Value) == 0 || 
len(apiHost.Value) == 0 {
@@ -138,29 +138,33 @@ func NewWhiskConfig(proppath string, deploymentPath 
string, manifestPath string,
        credential = GetPropertyValue(credential, wskprops.AuthKey, WSKPROPS)
        namespace = GetPropertyValue(namespace, wskprops.Namespace, WSKPROPS)
        apiHost = GetPropertyValue(apiHost, wskprops.APIHost, WSKPROPS)
-    key = GetPropertyValue(key, wskprops.Key, WSKPROPS)
-    cert = GetPropertyValue(cert, wskprops.Cert, WSKPROPS)
+       key = GetPropertyValue(key, wskprops.Key, WSKPROPS)
+       cert = GetPropertyValue(cert, wskprops.Cert, WSKPROPS)
 
+       // TODO() see if we can split the following whisk prop logic into a 
separate function
        // now, read credentials from whisk.properties but this is only 
acceptable within Travis
        // whisk.properties will soon be deprecated and should not be used for 
any production deployment
        whiskproperty, _ := GetWskPropFromWhiskProperty(pi)
+
+       var warnmsg string
+
        credential = GetPropertyValue(credential, whiskproperty.AuthKey, 
WHISKPROPERTY)
        if credential.Source == WHISKPROPERTY {
-               // TODO() i18n
-               wskprint.PrintlnOpenWhiskWarning("The authentication key was 
retrieved from whisk.properties " +
-                       "which will soon be deprecated please do not use it 
outside of Travis builds.")
+               warnmsg = wski18n.T(wski18n.ID_WARN_WHISK_PROPS_DEPRECATED,
+                       map[string]interface{}{"key": "authenticaton key"})
+               wskprint.PrintlnOpenWhiskWarning(warnmsg)
        }
        namespace = GetPropertyValue(namespace, whiskproperty.Namespace, 
WHISKPROPERTY)
        if namespace.Source == WHISKPROPERTY {
-               // TODO() i18n
-               wskprint.PrintlnOpenWhiskWarning("The namespace was retrieved 
from whisk.properties " +
-                       "which will soon be deprecated please do not use it 
outside of Travis builds.")
+               warnmsg = wski18n.T(wski18n.ID_WARN_WHISK_PROPS_DEPRECATED,
+                       map[string]interface{}{"key": "namespace"})
+               wskprint.PrintlnOpenWhiskWarning(warnmsg)
        }
        apiHost = GetPropertyValue(apiHost, whiskproperty.APIHost, 
WHISKPROPERTY)
        if apiHost.Source == WHISKPROPERTY {
-               // TODO() i18n
-               wskprint.PrintlnOpenWhiskWarning("The API host was retrieved 
from whisk.properties " +
-                       "which will soon be deprecated please do not use it 
outside of Travis builds.")
+               warnmsg = wski18n.T(wski18n.ID_WARN_WHISK_PROPS_DEPRECATED,
+                       map[string]interface{}{"key": "API host"})
+               wskprint.PrintlnOpenWhiskWarning(warnmsg)
        }
 
        // set namespace to default namespace if not yet found
@@ -169,14 +173,15 @@ func NewWhiskConfig(proppath string, deploymentPath 
string, manifestPath string,
                namespace.Source = DEFAULTVALUE
        }
 
+       // TODO() See if we can split off the interactive logic into a separate 
function
        // If we still can not find the values we need, check if it is 
interactive mode.
        // If so, we prompt users for the input.
        // The namespace is set to a default value at this point if not 
provided.
        if len(apiHost.Value) == 0 && isInteractive == true {
-               // TODO() i18n
-               host := promptForValue("\nPlease provide the hostname for 
OpenWhisk [default value is openwhisk.ng.bluemix.net]: ")
+               host := promptForValue(wski18n.T(wski18n.ID_MSG_PROMPT_APIHOST))
                if host == "" {
-                       // TODO() tell caller that we are using this default, 
look to make a const at top of file
+                       // TODO() programmatically tell caller that we are 
using this default
+                       // TODO() make this configurable or remove
                        host = "openwhisk.ng.bluemix.net"
                }
                apiHost.Value = host
@@ -184,83 +189,83 @@ func NewWhiskConfig(proppath string, deploymentPath 
string, manifestPath string,
        }
 
        if len(credential.Value) == 0 && isInteractive == true {
-               // TODO() i18n
-               cred := promptForValue("\nPlease provide an authentication 
token: ")
+               cred := promptForValue(wski18n.T(wski18n.ID_MSG_PROMPT_AUTHKEY))
                credential.Value = cred
                credential.Source = INTERINPUT
 
                // The namespace is always associated with the credential. Both 
of them should be picked up from the same source.
                if len(namespace.Value) == 0 || namespace.Value == 
whisk.DEFAULT_NAMESPACE {
-                       // TODO() i18n
-                       ns := promptForValue("\nPlease provide a namespace 
[default value is guest]: ")
+                       tempNamespace := 
promptForValue(wski18n.T(wski18n.ID_MSG_PROMPT_NAMESPACE))
                        source := INTERINPUT
 
-                       if ns == "" {
-                               ns = whisk.DEFAULT_NAMESPACE
+                       if tempNamespace == "" {
+                               tempNamespace = whisk.DEFAULT_NAMESPACE
                                source = DEFAULTVALUE
                        }
 
-                       namespace.Value = ns
+                       namespace.Value = tempNamespace
                        namespace.Source = source
                }
        }
 
-    mode := true
-    if (len(cert.Value) != 0 && len(key.Value) != 0) {
-        mode = false
-    }
+       mode := true
+       if (len(cert.Value) != 0 && len(key.Value) != 0) {
+               mode = false
+       }
 
-       clientConfig = &whisk.Config {
+       clientConfig = &whisk.Config{
                AuthToken: credential.Value, //Authtoken
-               Namespace: namespace.Value,  //Namespace
+               Namespace: namespace.Value, //Namespace
                Host:      apiHost.Value,
                Version:   "v1",
-        Cert:      cert.Value,
-        Key:       key.Value,
+               Cert:      cert.Value,
+               Key:       key.Value,
                Insecure:  mode, // true if you want to ignore certificate 
signing
        }
 
+       // validate we have credential, apihost and namespace
+       err := validateClientConfig(credential, apiHost, namespace)
+
+       return clientConfig, err
+}
+
+func validateClientConfig(credential PropertyValue, apiHost PropertyValue, 
namespace PropertyValue) (error) {
+
+       // Display error message based upon which config value was missing
        if len(credential.Value) == 0 || len(apiHost.Value) == 0 || 
len(namespace.Value) == 0 {
-               var errStr string
+               var errmsg string
                if len(credential.Value) == 0 {
-                       errStr += wski18n.T("The authentication key is not 
configured.\n")
-               } else {
-                       errStr += wski18n.T("The authenitcation key is set from 
{{.authsource}}.\n",
-                               map[string]interface{}{"authsource": 
credential.Source})
+                       errmsg = 
wski18n.T(wski18n.ID_MSG_CONFIG_MISSING_AUTHKEY)
                }
 
                if len(apiHost.Value) == 0 {
-                       errStr += wski18n.T("The API host is not configured.\n")
-               } else {
-                       errStr += wski18n.T("The API host is {{.apihost}}, from 
{{.apisource}}.\n",
-                               map[string]interface{}{"apihost": 
apiHost.Value, "apisource": apiHost.Source})
+                       errmsg = 
wski18n.T(wski18n.ID_MSG_CONFIG_MISSING_APIHOST)
                }
 
                if len(namespace.Value) == 0 {
-                       errStr += wski18n.T("The namespace is not 
configured.\n")
-               } else {
-                       errStr += wski18n.T("The namespace is {{.namespace}}, 
from {{.namespacesource}}.\n",
-                               map[string]interface{}{"namespace": 
namespace.Value, "namespacesource": namespace.Source})
-
+                       errmsg = 
wski18n.T(wski18n.ID_MSG_CONFIG_MISSING_NAMESPACE)
                }
-               whisk.Debug(whisk.DbgError, errStr)
-               return clientConfig, 
wskderrors.NewWhiskClientInvalidConfigError(errStr)
+
+               return wskderrors.NewWhiskClientInvalidConfigError(errmsg)
        }
 
-       stdout := wski18n.T("The API host is {{.apihost}}, from 
{{.apisource}}.\n",
-               map[string]interface{}{"apihost": apiHost.Value, "apisource": 
apiHost.Source})
-       whisk.Debug(whisk.DbgInfo, stdout)
+       // Show caller what final values we used for credential, apihost and 
namespace
+       stdout := 
wski18n.T(wski18n.ID_MSG_CONFIG_INFO_APIHOST_X_host_X_source_X,
+               map[string]interface{}{"host": apiHost.Value, "source": 
apiHost.Source})
+       wskprint.PrintOpenWhiskStatus(stdout)
+
+       stdout = wski18n.T(wski18n.ID_MSG_CONFIG_INFO_AUTHKEY_X_source_X,
+               map[string]interface{}{"source": credential.Source})
+       wskprint.PrintOpenWhiskStatus(stdout)
 
-       stdout = wski18n.T("The auth key is set, from {{.authsource}}.\n",
-               map[string]interface{}{"authsource": credential.Source})
-       whisk.Debug(whisk.DbgInfo, stdout)
+       stdout = 
wski18n.T(wski18n.ID_MSG_CONFIG_INFO_NAMESPACE_X_namespace_X_source_X,
+               map[string]interface{}{"namespace": namespace.Value, "source": 
namespace.Source})
+       wskprint.PrintOpenWhiskStatus(stdout)
 
-       stdout = wski18n.T("The namespace is {{.namespace}}, from 
{{.namespacesource}}.\n",
-               map[string]interface{}{"namespace": namespace.Value, 
"namespacesource": namespace.Source})
-       whisk.Debug(whisk.DbgInfo, stdout)
-       return clientConfig, nil
+       return nil
 }
 
+// TODO() move into its own package "wskread" and add support for passing in 
default value
 var promptForValue = func(msg string) (string) {
        reader := bufio.NewReader(os.Stdin)
        fmt.Print(msg)
diff --git a/utils/runtimes.go b/utils/runtimes.go
index e39d027c..bacc54dc 100644
--- a/utils/runtimes.go
+++ b/utils/runtimes.go
@@ -74,6 +74,7 @@ var DefaultRunTimes map[string]string
 // `curl -k https://openwhisk.ng.bluemix.net`
 // hard coding it here in case of network unavailable or failure.
 func ParseOpenWhisk(apiHost string) (op OpenWhiskInfo, err error) {
+       // TODO() create HTTP header constants and use them
        ct := "application/json; charset=UTF-8"
        req, _ := http.NewRequest("GET", "https://"+apiHost, nil)
        req.Header.Set("Content-Type", ct)
@@ -92,7 +93,8 @@ func ParseOpenWhisk(apiHost string) (op OpenWhiskInfo, err 
error) {
 
        res, err := netClient.Do(req)
        if err != nil {
-               errString := wski18n.T("Failed to get the supported runtimes 
from OpenWhisk service: {{.err}}.\n",
+               // TODO() create an error
+               errString := wski18n.T(wski18n.ID_ERR_GET_RUNTIMES_X_err_X,
                        map[string]interface{}{"err": err.Error()})
                whisk.Debug(whisk.DbgWarn, errString)
        }
@@ -102,14 +104,15 @@ func ParseOpenWhisk(apiHost string) (op OpenWhiskInfo, 
err error) {
        }
 
        // Local openwhisk deployment sometimes only returns "application/json" 
as the content type
+       // TODO() create HTTP header constants and use them
        if err != nil || !strings.Contains(ct, res.Header.Get("Content-Type")) {
-               stdout := wski18n.T("Start to unmarshal Openwhisk info from 
local values.\n")
+               stdout := wski18n.T(wski18n.ID_MSG_UNMARSHAL_LOCAL)
                whisk.Debug(whisk.DbgInfo, stdout)
                err = json.Unmarshal(RUNTIME_DETAILS, &op)
        } else {
                b, _ := ioutil.ReadAll(res.Body)
                if b != nil && len(b) > 0 {
-                       stdout := wski18n.T("Unmarshal Openwhisk info from 
internet.\n")
+                       stdout := wski18n.T(wski18n.ID_MSG_UNMARSHAL_NETWORK)
                        whisk.Debug(whisk.DbgInfo, stdout)
                        err = json.Unmarshal(b, &op)
                }
diff --git a/wskderrors/wskdeployerror.go b/wskderrors/wskdeployerror.go
index 461b356a..c7d5e83a 100644
--- a/wskderrors/wskdeployerror.go
+++ b/wskderrors/wskdeployerror.go
@@ -121,6 +121,10 @@ func (e *WskDeployBaseErr) SetMessage(message interface{}) 
{
        }
 }
 
+func (e *WskDeployBaseErr) AppendDetail(detail string){
+       e.appendDetail(detail)
+}
+
 func (e *WskDeployBaseErr) appendDetail(detail string){
        fmt := fmt.Sprintf("\n%s %s", STR_INDENT_1, detail)
        e.Message = e.Message + fmt
diff --git a/wski18n/i18n_ids.go b/wski18n/i18n_ids.go
index 6f6a3699..cbd75197 100644
--- a/wski18n/i18n_ids.go
+++ b/wski18n/i18n_ids.go
@@ -35,307 +35,130 @@ const(
        ID_CMD_FLAG_KEY_FILE    = "msg_cmd_flag_key_file"       // "path of the 
.key file"
        ID_CMD_FLAG_CERT_FILE   = "msg_cmd_flag_cert_file"      // "path of the 
.cert file"
 
+       // Configuration messages
+       ID_MSG_CONFIG_MISSING_AUTHKEY                           = 
"msg_config_missing_authkey"
+       ID_MSG_CONFIG_MISSING_APIHOST                           = 
"msg_config_missing_apihost"
+       ID_MSG_CONFIG_MISSING_NAMESPACE                         = 
"msg_config_missing_namespace"
+
+       ID_MSG_CONFIG_INFO_APIHOST_X_host_X_source_X            = 
"msg_config_apihost_info"
+       ID_MSG_CONFIG_INFO_AUTHKEY_X_source_X                   = 
"msg_config_authkey_info"
+       ID_MSG_CONFIG_INFO_NAMESPACE_X_namespace_X_source_X     = 
"msg_config_namespace_info"
+
+       // YAML marshall / unmarshall
+       ID_MSG_UNMARSHAL_LOCAL                                  = 
"msg_unmarshall_local"
+       ID_MSG_UNMARSHAL_NETWORK                                = 
"msg_unmarshall_network"
+
        // Informational
-       ID_MSG_MANIFEST_DEPLOY_X_path_X                         = 
"msg_using_manifest_deploy"   // "Using {{.path}} for deployment.\n"
-       ID_MSG_MANIFEST_UNDEPLOY_X_path_X                       = 
"msg_using_manifest_undeploy" // "Using {{.path}} for undeployment.\n"
        ID_MSG_MANIFEST_FILE_NOT_FOUND_X_path_X                 = 
"msg_manifest_not_found"
        ID_MSG_RUNTIME_MISMATCH_X_runtime_X_ext_X_action_X      = 
"msg_runtime_mismatch"
        ID_MSG_RUNTIME_CHANGED_X_runtime_X_action_X             = 
"msg_runtime_changed"
        ID_MSG_RUNTIME_UNSUPPORTED_X_runtime_X_action_X         = 
"msg_runtime_unsupported"
 
-       // Action Limits
-       ID_MSG_ACTION_LIMIT_IGNORED_X_limit_X                   = 
"msg_action_limit_ignored"    // for timeout, memorySize, logSize
+       ID_MSG_MANIFEST_DEPLOY_X_path_X                         = 
"msg_using_manifest_deploy"   // "Using {{.path}} for deployment.\n"
+       ID_MSG_MANIFEST_UNDEPLOY_X_path_X                       = 
"msg_using_manifest_undeploy" // "Using {{.path}} for undeployment.\n"
 
-)
+       ID_MSG_DEPLOYMENT_SUCCEEDED                             = 
"msg_deployment_succeeded"
+       ID_MSG_DEPLOYMENT_FAILED                                = 
"msg_deployment_failed"
+       ID_MSG_DEPLOYMENT_CANCELLED                             = 
"msg_deployment_cancelled"
 
-//"id": "WARNING: Invalid limitation 'timeout' of action in manifest is 
ignored. Please check errors.\n",
-//"translation": "WARNING: Invalid limitation 'timeout' of action in manifest 
is ignored. Please check errors.\n"
-//},
-//{
-//"id": "WARNING: Invalid limitation 'memorySize' of action in manifest is 
ignored. Please check errors.\n",
-//"translation": "WARNING: Invalid limitation 'memorySize' of action in 
manifest is ignored. Please check errors.\n"
-//},
-//{
-//"id": "WARNING: Invalid limitation 'logSize' of action in manifest is 
ignored. Please check errors.\n",
-//"translation": "WARNING: Invalid limitation 'logSize' of action in manifest 
is ignored. Please check errors.\n"
-//},
+       ID_MSG_ENTITY_DEPLOYING_X_key_X_name_X                  = 
"msg_entity_deploying"
+       ID_MSG_ENTITY_UNDEPLOYING_X_key_X_name_X                = 
"msg_entity_undeploying"
+       ID_MSG_ENTITY_DEPLOYED_SUCCESS_X_key_X_name_X           = 
"msg_entity_deployed_success"
+       ID_MSG_ENTITY_UNDEPLOYED_SUCCESS_X_key_X_name_X         = 
"msg_entity_undeployed_success"
 
-//{
-//"id": "Unsupported runtime type, set to nodejs",
-//"translation": "Unsupported runtime type, set to nodejs"
-//},
-//{
-//"id": "The authentication key is not configured.\n",
-//"translation": "The authentication key is not configured.\n"
-//},
-//{
-//"id": "The API host is not configured.\n",
-//"translation": "The API host is not configured.\n"
-//},
-//{
-//"id": "The namespace is not configured.\n",
-//"translation": "The namespace is not configured.\n"
-//},
-//{
-//"id": "The API host is {{.apihost}}, from {{.apisource}}.\n",
-//"translation": "The API host is {{.apihost}}, from {{.apisource}}.\n"
-//},
-//{
-//"id": "The auth key is set, from {{.authsource}}.\n",
-//"translation": "The auth key is set, from {{.authsource}}.\n"
-//},
-//{
-//"id": "The namespace is {{.namespace}}, from {{.namespacesource}}.\n",
-//"translation": "The namespace is {{.namespace}}, from 
{{.namespacesource}}.\n"
-//},
-//{
-//"id": "Failed to get the supported runtimes from OpenWhisk service: 
{{.err}}.\n",
-//"translation": "Failed to get the supported runtimes from OpenWhisk service: 
{{.err}}.\n"
-//},
-//{
-//"id": "Start to unmarshal Openwhisk info from local values.\n",
-//"translation": "Start to unmarshal Openwhisk info from local values.\n"
-//},
-//{
-//"id": "Unmarshal Openwhisk info from internet.\n",
-//"translation": "Unmarshal Openwhisk info from internet.\n"
-//},
-//{
-//"id": "Deployment completed successfully.\n",
-//"translation": "Deployment completed successfully.\n"
-//},
-//{
-//"id": "Got error creating package with error message: {{.err}} and error 
code: {{.code}}.\n",
-//"translation": "Got error creating package with error message: {{.err}} and 
error code: {{.code}}.\n"
-//},
-//{
-//"id": "Got error creating action with error message: {{.err}} and error 
code: {{.code}}.\n",
-//"translation": "Got error creating package with error message: {{.err}} and 
error code: {{.code}}.\n"
-//},
-//{
-//"id": "Got error creating api with error message: {{.err}} and error code: 
{{.code}}.\n",
-//"translation": "Got error creating api with error message: {{.err}} and 
error code: {{.code}}.\n"
-//},
-//{
-//"id": "Got error creating rule with error message: {{.err}} and error code: 
{{.code}}.\n",
-//"translation": "Got error creating rule with error message: {{.err}} and 
error code: {{.code}}.\n"
-//},
-//{
-//"id": "Got error setting the status of rule with error message: {{.err}} and 
error code: {{.code}}.\n",
-//"translation": "Got error setting the status of rule with error message: 
{{.err}} and error code: {{.code}}.\n"
-//},
-//{
-//"id": "Got error creating trigger with error message: {{.err}} and error 
code: {{.code}}.\n",
-//"translation": "Got error creating trigger with error message: {{.err}} and 
error code: {{.code}}.\n"
-//},
-//{
-//"id": "Got error creating trigger feed with error message: {{.err}} and 
error code: {{.code}}.\n",
-//"translation": "Got error creating trigger feed with error message: {{.err}} 
and error code: {{.code}}.\n"
-//},
-//{
-//"id": "Got error creating package binding with error message: {{.err}} and 
error code: {{.code}}.\n",
-//"translation": "Got error creating package binding with error message: 
{{.err}} and error code: {{.code}}.\n"
-//},
-//{
-//"id": "Deployment of dependency {{.depName}} did not complete sucessfully. 
Run `wskdeploy undeploy` to remove partially deployed assets.\n",
-//"translation": "Deployment of dependency {{.depName}} did not complete 
sucessfully. Run `wskdeploy undeploy` to remove partially deployed assets.\n"
-//},
-//{
-//"id": "Deploying action {{.output}} ...",
-//"translation": "Deploying action {{.output}} ..."
-//},
-//{
-//"id": "Deploying rule {{.output}} ...",
-//"translation": "Deploying rule {{.output}} ..."
-//},
-//{
-//"id": "Deploying trigger feed {{.output}} ...",
-//"translation": "Deploying trigger feed {{.output}} ..."
-//},
-//{
-//"id": "Deploying package {{.output}} ...",
-//"translation": "Deploying package {{.output}} ..."
-//},
-//{
-//"id": "Deploying package binding {{.output}} ...",
-//"translation": "Deploying package binding {{.output}} ..."
-//},
-//{
-//"id": "Deploying dependency {{.output}} ...",
-//"translation": "Deploying dependency {{.output}} ..."
-//},
-//{
-//"id": "OK. Cancelling deployment.\n",
-//"translation": "OK. Cancelling deployment.\n"
-//},
-//{
-//"id": "OK. Canceling undeployment.\n",
-//"translation": "OK. Canceling undeployment.\n"
-//},
-//{
-//"id": "Undeployment did not complete sucessfully.\n",
-//"translation": "Undeployment did not complete sucessfully.\n"
-//},
-//{
-//"id": "Deployment removed successfully.\n",
-//"translation": "Deployment removed successfully.\n"
-//},
-//{
-//"id": "Undeployment did not complete sucessfully.\n",
-//"translation": "Undeployment did not complete sucessfully.\n"
-//},
-//{
-//"id": "Undeploying dependency {{.depName}} ...",
-//"translation": "Undeploying dependency {{.depName}} ..."
-//},
-//{
-//"id": "Undeployment of dependency {{.depName}} did not complete 
sucessfully.\n",
-//"translation": "Undeployment of dependency {{.depName}} did not complete 
sucessfully.\n"
-//},
-//{
-//"id": "Got error deleting action with error message: {{.err}} and error 
code: {{.code}}.\n",
-//"translation": "Got error deleting action with error message: {{.err}} and 
error code: {{.code}}.\n"
-//},
-//{
-//"id": "Got error deleting rule with error message: {{.err}} and error code: 
{{.code}}.\n",
-//"translation": "Got error deleting rule with error message: {{.err}} and 
error code: {{.code}}.\n"
-//},
-//{
-//"id": "Got error setting the status of rule with error message: {{.err}} and 
error code: {{.code}}.\n",
-//"translation": "Got error setting the status of rule with error message: 
{{.err}} and error code: {{.code}}.\n"
-//},
-//{
-//"id": "Got error deleting trigger with error message: {{.err}} and error 
code: {{.code}}.\n",
-//"translation": "Got error deleting trigger with error message: {{.err}} and 
error code: {{.code}}.\n"
-//},
-//{
-//"id": "Got error deleting trigger feed with error message: {{.err}} and 
error code: {{.code}}.\n",
-//"translation": "Got error deleting trigger feed with error message: {{.err}} 
and error code: {{.code}}.\n"
-//},
-//{
-//"id": "Got error deleting package with error message: {{.err}} and error 
code: {{.code}}.\n",
-//"translation": "Got error deleting package with error message: {{.err}} and 
error code: {{.code}}.\n"
-//},
-//{
-//"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": "Got error deleting binding package with error message: {{.err}} and 
error code: {{.code}}.\n",
-//"translation": "Got error deleting binding package with error message: 
{{.err}} and error code: {{.code}}.\n"
-//},
-//{
-//"id": "Dependency {{.output}} has been successfully deployed.\n",
-//"translation": "Dependency {{.output}} has been successfully deployed.\n"
-//},
-//{
-//"id": "Package binding {{.output}} has been successfully deployed.\n",
-//"translation": "Package binding {{.output}} has been successfully 
deployed.\n"
-//},
-//{
-//"id": "Package {{.output}} has been successfully deployed.\n",
-//"translation": "Package {{.output}} has been successfully deployed.\n"
-//},
-//{
-//"id": "Trigger {{.output}} has been successfully deployed.\n",
-//"translation": "Trigger {{.output}} has been successfully deployed.\n"
-//},
-//{
-//"id": "Trigger feed {{.output}} has been successfully deployed.\n",
-//"translation": "Trigger feed {{.output}} has been successfully deployed.\n"
-//},
-//{
-//"id": "Rule {{.output}} has been successfully deployed.\n",
-//"translation": "Rule {{.output}} has been successfully deployed.\n"
-//},
-//{
-//"id": "Action {{.output}} has been successfully deployed.\n",
-//"translation": "Action {{.output}} has been successfully deployed.\n"
-//},
-//{
-//"id": "Dependency {{.depName}} has been successfully undeployed.\n",
-//"translation": "Dependency {{.depName}} has been successfully undeployed.\n"
-//},
-//{
-//"id": "Trigger {{.trigger}} has been removed.\n",
-//"translation": "Trigger {{.trigger}} has been removed.\n"
-//},
-//{
-//"id": "Rule {{.rule}} has been removed.\n",
-//"translation": "Rule {{.rule}} has been removed.\n"
-//},
-//{
-//"id": "Action {{.action}} has been removed.\n",
-//"translation": "Action {{.action}} has been removed.\n"
-//},
-//{
-//"id": "Failed to invoke the feed when deleting trigger feed with error 
message: {{.err}} and error code: {{.code}}.\n",
-//"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": "WARNING: Mandatory field Package License must be set.\n",
-//"translation": "WARNING: Mandatory field Package License must be set.\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",
-//"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",
-//"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",
-//"translation": "logSize of limits in manifest should be an integer between 0 
and 10.\n"
-//},
-//{
+       ID_MSG_UNDEPLOYMENT_SUCCEEDED                           = 
"msg_undeployment_succeeded"
+       ID_MSG_UNDEPLOYMENT_FAILED                              = 
"msg_undeployment_failed"
+       ID_MSG_UNDEPLOYMENT_CANCELLED                           = 
"msg_undeployment_cancelled"
 
-//{
-//"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_MSG_DEPENDENCY_DEPLOYING_X_name_X                    = 
"msg_deploying_dependency"
+       ID_MSG_DEPENDENCY_UNDEPLOYING_X_name_X                  = 
"msg_undeploying_dependency"
+       ID_MSG_DEPENDENCY_DEPLOYMENT_SUCCESS_X_name_X           = 
"msg_dependency_deployment_success"
+       ID_MSG_DEPENDENCY_DEPLOYMENT_FAILURE_X_name_X           = 
"msg_dependency_deployment_failure"
+       ID_MSG_DEPENDENCY_UNDEPLOYMENT_SUCCESS_X_name_X         = 
"msg_dependency_undeployment_success"
+       ID_MSG_DEPENDENCY_UNDEPLOYMENT_FAILURE_X_name_X         = 
"msg_dependency_undeployment_failure"
+
+       // Managed deployments
+       ID_MSG_MANAGED_UNDEPLOYMENT_FAILED                      = 
"msg_undeployment_managed_failed"
+       ID_MSG_MANAGED_FOUND_DELETED_X_key_X_name_X_project_X   = 
"msg_managed_found_deleted_entity"
+
+       // Interactive (prompts)
+       ID_MSG_PROMPT_DEPLOY                                    = 
"msg_prompt_deploy"
+       ID_MSG_PROMPT_UNDEPLOY                                  = 
"msg_prompt_undeploy"
+       ID_MSG_PROMPT_AUTHKEY                                   = 
"msg_prompt_authkey"
+       ID_MSG_PROMPT_APIHOST                                   = 
"msg_prompt_apihost"
+       ID_MSG_PROMPT_NAMESPACE                                 = 
"msg_prompt_namespace"
+
+       // Action Limits
+       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_WHISK_PROPS_DEPRECATED                          = 
"msg_warn_whisk_properties"
+
+       // Errors
+       ID_ERR_GET_RUNTIMES_X_err_X                             = 
"msg_err_get_runtimes"
+       ID_ERR_MISSING_MANDATORY_KEY_X_key_X                    = 
"msg_err_missing_mandatory_key"
+        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": "The name of the application {{.appNameDeploy}} in deployment file at 
[{{.deploymentFile}}] does not match the name of the application 
{{.appNameManifest}}} in manifest file at [{{.manifestFile}}].",
-//"translation": "The name of the application {{.appNameDeploy}} in deployment 
file at [{{.deploymentFile}}] does not match the name of the application 
{{.appNameManifest}}} in manifest file at [{{.manifestFile}}]."
-//},
-//{
-//"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": "WARNING: application in manifest file will soon be deprecated, please 
use project instead.\n",
-//"translation": "WARNING: application in manifest file will soon be 
deprecated, please use project instead.\n"
-//},
-//{
-//"id": "Undeployment of deleted entities did not complete sucessfully during 
managed deployment. Run `wskdeploy undeploy` to remove partially deployed 
assets.\n",
-//"translation": "Undeployment of deleted entities did not complete 
sucessfully during managed deployment. Run `wskdeploy undeploy` to remove 
partially deployed assets.\n"
-//},
-//{
-//"id": "Found the action {{.action}} which is deleted from the current 
project {{.project}} in manifest file which is being undeployed.\n",
-//"translation": "Found the action {{.action}} which is deleted from the 
current project {{.project}} in manifest file which is being undeployed.\n"
-//},
-//{
-//"id": "Found the trigger {{.trigger}} which is deleted from the current 
project {{.project}} in manifest file which is being undeployed.\n",
-//"translation": "Found the trigger {{.trigger}} which is deleted from the 
current project {{.project}} in manifest file which is being undeployed.\n"
-//},
-//{
-//"id": "Found the package {{.package}} which is deleted from the current 
project {{.project}} in manifest file which is being undeployed.\n",
-//"translation": "Found the package {{.package}} which is deleted from the 
current project {{.project}} in manifest file which is being undeployed.\n"
-//}
\ No newline at end of file
+var I18N_ID_SET = [](string){
+       ID_MSG_PREFIX_ERROR,
+       ID_MSG_PREFIX_SUCCESS,
+       ID_MSG_PREFIX_WARNING,
+       ID_MSG_PREFIX_INFO,
+       ID_JSON_MISSING_KEY_CMD,
+       ID_CMD_FLAG_AUTH_KEY,
+       ID_CMD_FLAG_NAMESPACE,
+       ID_CMD_FLAG_API_HOST,
+       ID_CMD_FLAG_API_VERSION,
+       ID_CMD_FLAG_KEY_FILE,
+       ID_CMD_FLAG_CERT_FILE,
+       ID_MSG_CONFIG_MISSING_AUTHKEY,
+       ID_MSG_CONFIG_MISSING_APIHOST,
+       ID_MSG_CONFIG_MISSING_NAMESPACE,
+       ID_MSG_CONFIG_INFO_APIHOST_X_host_X_source_X,
+       ID_MSG_CONFIG_INFO_AUTHKEY_X_source_X,
+       ID_MSG_CONFIG_INFO_NAMESPACE_X_namespace_X_source_X,
+       ID_MSG_UNMARSHAL_LOCAL,
+       ID_MSG_UNMARSHAL_NETWORK,
+       ID_MSG_MANIFEST_FILE_NOT_FOUND_X_path_X,
+       ID_MSG_RUNTIME_MISMATCH_X_runtime_X_ext_X_action_X,
+       ID_MSG_RUNTIME_CHANGED_X_runtime_X_action_X,
+       ID_MSG_RUNTIME_UNSUPPORTED_X_runtime_X_action_X,
+       ID_MSG_MANIFEST_DEPLOY_X_path_X,
+       ID_MSG_MANIFEST_UNDEPLOY_X_path_X,
+       ID_MSG_DEPLOYMENT_SUCCEEDED,
+       ID_MSG_DEPLOYMENT_FAILED,
+       ID_MSG_DEPLOYMENT_CANCELLED,
+       ID_MSG_ENTITY_DEPLOYING_X_key_X_name_X,
+       ID_MSG_ENTITY_UNDEPLOYING_X_key_X_name_X,
+       ID_MSG_ENTITY_DEPLOYED_SUCCESS_X_key_X_name_X,
+       ID_MSG_ENTITY_UNDEPLOYED_SUCCESS_X_key_X_name_X,
+       ID_MSG_UNDEPLOYMENT_SUCCEEDED,
+       ID_MSG_UNDEPLOYMENT_FAILED,
+       ID_MSG_UNDEPLOYMENT_CANCELLED,
+       ID_MSG_DEPENDENCY_DEPLOYING_X_name_X,
+       ID_MSG_DEPENDENCY_UNDEPLOYING_X_name_X,
+       ID_MSG_DEPENDENCY_DEPLOYMENT_SUCCESS_X_name_X,
+       ID_MSG_DEPENDENCY_DEPLOYMENT_FAILURE_X_name_X,
+       ID_MSG_DEPENDENCY_UNDEPLOYMENT_SUCCESS_X_name_X,
+       ID_MSG_DEPENDENCY_UNDEPLOYMENT_FAILURE_X_name_X,
+       ID_MSG_MANAGED_UNDEPLOYMENT_FAILED,
+       ID_MSG_MANAGED_FOUND_DELETED_X_key_X_name_X_project_X,
+       ID_MSG_PROMPT_DEPLOY,
+       ID_MSG_PROMPT_UNDEPLOY,
+       ID_MSG_PROMPT_AUTHKEY,
+       ID_MSG_PROMPT_APIHOST,
+       ID_MSG_PROMPT_NAMESPACE,
+       ID_MSG_ACTION_LIMIT_IGNORED_X_limit_X,
+       ID_WARN_DEPRECATED_KEY_REPLACED,
+       ID_WARN_WHISK_PROPS_DEPRECATED,
+       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,
+       ID_ERR_CREATE_ENTITY_X_key_X_err_X_code_X,
+       ID_ERR_DELETE_ENTITY_X_key_X_err_X_code_X,
+}
diff --git a/wski18n/i18n_ids_test.go b/wski18n/i18n_ids_test.go
new file mode 100644
index 00000000..dd2f07be
--- /dev/null
+++ b/wski18n/i18n_ids_test.go
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package wski18n
+
+import (
+       "testing"
+       "github.com/stretchr/testify/assert"
+)
+
+/*
+ * TestValueNotEqualKey
+ */
+func TestValueNotEqualKey(t *testing.T) {
+
+       var value string
+       for _, key := range I18N_ID_SET {
+               value = T(key)
+               assert.NotEqual(t, key, value)
+               // NOTE: uncomment the following lines to see the i18n keys and 
values
+               //{
+               //      u := int(math.Min(20, float64(len(value))))
+               //      b := value[0:u]
+               //      fmt.Printf("Info: [%s] != [%s]\n", key, b)
+               //}
+       }
+}
diff --git a/wski18n/i18n_resources.go b/wski18n/i18n_resources.go
index f95adedd..13178951 100644
--- a/wski18n/i18n_resources.go
+++ b/wski18n/i18n_resources.go
@@ -97,7 +97,7 @@ func wski18nResourcesDe_deAllJson() (*asset, error) {
        return a, nil
 }
 
-var _wski18nResourcesEn_usAllJson = 
[]byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5b\x4f\x6f\xdb\x3e\x12\xbd\xe7\x53\x0c\x72\xc9\x25\x30\xda\xdf\x62\x81\x45\x6f\xc1\xf6\xcf\x66\xdb\x24\x45\x92\xb6\x28\xba\x85\x43\x4b\x63\x89\x8d\x44\x0a\x24\x95\xd4\x35\xfc\xdd\x17\x24\x25\x5b\x49\x45\x8a\x92\x65\x27\x28\x7e\x3d\x29\x96\xe6\xbd\x37\xd4\x90\x9c\xa1\xa6\xdf\x0e\x00\x96\x07\x00\x00\x87\x34\x3e\x7c\x05\x87\xb9\x4c\xa6\x85\xc0\x39\xfd\x39\x45\x21\xb8\x38\x3c\xb6\x77\x95\x20\x4c\x66\x44\x51\xce\xf4\x63\x6f\xcc\xbd\x03\x80\xd5\xb1\x07\xe1\x9e\x08\x46\x59\xe2\xc0\xf8\x52\xdd\xed\x42\x91\x65\x14\xa1\x94\x0e\x94\xab\xea\x6e\x17\x0a\x65\x73\xee\x80\x38\xd5\xb7\x9c\xf6\x3f\x24\x67\xd3\x9c\x4a\x49\x59\x32\x8d\xf2\x78\x7a\x8b\x0b\x07\xd0\x7f\xaf\x2e\xce\x81\xb2\xa2\x54\x10\x13\x45\xe0\xcc\x5a\xc1\x51\x94\xc7\x47\xa0\xed\x9c\x2c\x1a\x78\x9e\x91\x64\xca\x48\x8e\xb2\x20\x11\x3a\x38\x36\xf7\xbb\xb1\x48\xa9\x52\x8f\x5c\x7d\x9b\x0b\xfa\xcb\xfc\x00\x37\xef\xdf\x7c\xbd\x09\x01\x2d\xe8\x34\xe5\x52\x39\x40\xef\x53\x2a\x6f\xe1\xe4\xe3\x29\xdc\xfc\xe7\xe2\xea\x3a\x14\xf1\x0e\x85\xd4\x08\x9d\xa0\x9f\xdf\x5c\x5e\x9d\x5e\x9c\x87\xe0\xde\xe2\x62\x3a\xa7\x99\x6b\x24\x0b\xa2\x52\xe0\x73\x50\x29\xc2\xe4\x16\x17\x60\x9e\xed\x86\x8d\x50\xa8\x60\x5c\xfd\x70\x07\x70\x4e\x18\x9d\xa3\x54\x53\xc6\xd5\x74\xce\x4b\x16\x3b\x80\xcf\xaa\x07\x0d\x1e\x30\xae\xc0\x3c\x0d\x44\x81\xe1\xfc\xb6\x5c\x4e\xf4\xc5\x6a\xf5\x7d\xf2\x3f\xe6\x26\x2c\x4d\x28\xaf\x69\x63\x2c\x32\xee\x8a\x91\x4f\x26\x80\x1b\xc8\x30\xe7\x02\xac\x49\x8e\x4c\xf5\x21\x2a\xd9\x00\xaa\xda\xa8\x93\x4c\x94\x4c\xd1\x1c\xf5\x54\xcd\x89\x8a\x52\x07\xcb\xa5\x7d\xcc\xf0\x54\x26\x9a\x4a\x16\x18\xd1\x39\xc5\x18\x28\x83\x5a\x31\xc4\x1c\xa5\x19\x68\x83\x08\xf7\x54\xa5\x40\x22\x33\x5d\x24\x2f\x45\x84\xf6\x55\xe0\x4f\x85\x4c\x87\xaf\x41\xc5\x9f\xaa\x16\x5f\x3d\xab\x7f\xb5\x97\x5d\xaf\xa6\x76\x22\x4a\x09\x4b\xd0\x15\x08\xb5\x0f\xd5\x53\xa0\xf8\x63\x77\x66\x44\x62\x0c\x9c\x99\x20\xf4\x2a\xde\x4a\x66\xc9\x64\x59\x14\x5c\xa8\x4e\xa9\x41\xc3\x4d\xed\x60\xaf\x31\x8d\xb8\x86\x07\xe1\x02\xed\x53\xd3\x8c\xe6\x54\x4d\x69\xc2\xb8\x70\x2a\x3c\x65\x77\x24\xa3\x71\xcd\x61\x4c\x0c\x93\xb9\xd2\x62\x1f\x49\xac\xe0\x9c\xfc\xd7\x5a\x70\xa9\x52\x64\x8a\x46\x76\x6d\xd5\xab\x4b\xe5\x5c\xc4\xd9\x9c\x26\x65\x05\xd0\x2e\xa9\x0f\x82\x53\x82\x5e\x2d\xf5\x3a\xdd\x97\xd8\x6f\xe7\xa4\x5b\xef\x4b\x7d\xf9\x3a\x0c\x83\xfc\xd3\x71\x51\x50\xfd\xd7\x6a\x75\x0c\x73\xc1\xf3\xea\x27\x1b\xf3\xab\x55\xb8\xcb\x41\x50\xde\xf7\x5e\xbf\x2b\x89\xaa\x01\x50\xaa\x34\x4c\x4c\x30\x44\xd8\xab\x58\x2e\x27\xeb\xbf\x9b\x1e\xad\x7f\x0c\x53\x35\x1c\xb3\x55\xe6\x5b\x42\x33\xbb\x70\x25\xa8\xcc\x14\xdf\x4c\xfa\x6a\x99\x90\x16\xf6\xa2\x40\xf6\xc5\x6c\xff\x12\xc5\x1d\x8d\xf0\x95\x66\x42\x21\x7c\x8a\x47\x83\x6f\x15\x7f\xa5\x88\x50\x1a\xbc\x64\x39\x11\x32\x25\x99\x81\xb1\x49\x8a\xce\x33\x2d\x74\xc6\x23\x92\xc1\x1d\xc9\x4a\x94\x6e\xa9\x03\xc1\x5a\x85\x7d\xf2\x42\x50\xa6\x50\x30\x54\x6e\x2d\xe1\xf6\xad\xf4\xaf\xd7\x1b\x35\x44\x3c\x2f\x32\xd4\xc3\x5d\x65\xef\xf3\x32\xcb\x16\x6e\xe6\x20\xd3\x56\xd2\x77\x5c\x81\xa9\x54\x20\x12\x48\x94\x4e\x21\x0a\x12\xdd\x92\x04\xed\x76\x6d\xef\xe5\x28\x25\x49\x1a\x2f\x17\x08\x8b\x6b\x3b\x1e\xdb\x1b\xfa\xc2\x17\x55\x3b\xa1\x0a\x75\xaa\xda\x9e\xfe\x2c\x9f\x0a\xba\x0f\x87\xb6\xa3\x09\x75\x46\x94\xd9\x5e\x42\x6e\x4b\x9e\x0e\x77\x24\x2a\xc3\x62\xd6\x4c\x45\x54\x29\x75\x29\xb3\x63\xdf\x76\x42\x1a\xfa\xde\x94\xa0\x49\x82\x62\x1f\xaf\x6e\x7b\xaa\xbe\x4e\xcd\x11\xe3\x7d\x7a\xb6\x25\x5f\xdf\x15\x7e\x46\x59\xac\xff\xde\xe3\xaa\xb8\x3d\x65\xd7\xde\xc9\xe7\xba\xbe\x46\x16\x23\x8b\x16\xda\x34\xc6\xe2\x9c\xe8\xba\x09\x62\x1a\x57\x29\xb2\xdd\x23\xf5\x16\xb9\xde\x21\xe1\xb2\x64\x70\x73\x2f\x6f\x6d\xc1\xbc\xae\x9c\x6f\x74\x76\x21\x30\xe7\x77\x08\x05\x11\x8a\x92\x2c\x5b\x54\x25\x3c\xc6\x40\xa4\x44\xe5\x49\x50\x9e\x83\x32\xcf\x90\x35\xf6\xc6\xe5\x72\xc2\x4b\x55\x94\x6a\xb5\x82\xc9\x64\xe2\xf5\xc7\x63\xd6\x41\x66\x96\xa5\xbe\x54\xad\x46\x1d\x44\x0f\xe6\x54\x5f\x42\xaf\x71\x07\x71\x1d\xea\x7d\x39\x5d\x76\x81\x74\xf5\xcc\x1a\x4a\xeb\xb2\xef\xa0\x7f\x18\xd1\xbd\x98\x3d\xa6\xad\xa4\x17\xef\x27\xf0\x6f\xc2\x22\xcc\xb2\xca\xbc\x71\xb0\xd5\x4e\xe6\x35\xe9\x20\xd1\x06\x8f\x8f\xcf\xba\x58\xda\x6c\x1c\xb5\xc6\xe6\x21\xff\xec\xf7\x94\x1b\x3d\x20\xba\x56\x4d\xbb\x8c\x0c\xa8\x37\x5c\x86\xcf\xd7\xeb\x1a\xe1\xf7\x10\xdc\xac\xc7\xee\xf0\x0d\xb5\xee\xf6\x7f\xe8\x76\x10\x36\x34\x5b\xa0\x77\xa4\x11\x31\x66\xb8\x9f\x9a\x6a\x3c\xa6\x50\x97\x76\x9c\xa9\x8f\xc5\xf3\x77\x15\xf2\x68\x3c\x77\x5f\x85\x8c\x48\xd5\xd7\xa9\x1d\x57\x21\x63\xf3\x85\xba\xb7\xfb\x73\xa6\x11\xa9\x5a\x9d\xfa\x72\x72\x79\x7e\x7a\xfe\xee\x15\x5c\xa7\x08\x47\xf6\xd4\xf6\x08\xbe\x9e\x9c\x7d\xb0\x27\xd0\x6c\x3d\xa4\xc8\x14\x55\xe6\x4c\x3a\xc6\x42\x60\x44\x14\xc6\x13\xf8\x98\x21\x91\x08\xa5\x44\x38\xd2\x83\x7e\x04\x94\x49\x85\x44\xe7\xee\x10\xa3\x8c\x04\x9d\xd9\x6f\x3c\xd5\x07\x1f\xfb\x35\xc3\x53\x6d\x3c\xa5\xa2\xd0\xf7\x5e\x27\x9a\x7b\x7c\xff\xe3\x51\xba\xf2\xa8\xb6\x44\x36\x25\x12\x66\x88\xec\x41\x6e\xb4\xae\xcf\xbc\xd9\xd5\x30\xb8\x56\x71\x1f\x3d\xf9\xfd\x50\x85\xdb\x61\x7a\x65\x8e\x29\x6f\x04\x59\xd7\xd5\x74\x19\x43\xd6\x30\x2c\xaf\xac\xdf\xea\xd3\x6d\xb5\x0d\x00\x6c\x15\x78\xf9\xb8\x62\x1f\x2a\x6c\x00\x50\xab\xa0\x93\xdf\x4f\x2b\x86\x4a\x1a\x04\x15\xb0\x70\x6c\x32\xf4\x76\xb8\xba\xb0\x0c\x5f\x3b\xfa\x21\x76\x4d\x80\x6a\xeb\x68\xa2\x55\xd5\x5f\x50\xcc\xfb\xcd\xbd\x51\xa4\xb3\xc8\x5e\xb4\x01\x86\x1d\x51\x52\x37\x4a\xf4\x20\x0d\x34\xee\xf8\xa2\x4b\xd9\x1d\xbf\x45\x93\x46\xdb\x44\x2c\x45\xb6\xa7\x9c\x70\xcf\x22\xfc\x39\xd5\x19\x61\x31\x51\x5c\x2c\x60\x4e\x31\x8b\xa1\x5e\xd4\x3f\xdb\x56\x37\xc8\x4b\xa9\x60\x86\xba\xee\x08\xc8\x87\x7a\xa2\xf9\xa5\x3d\x36\xae\x1b\x6f\xc8\x9d\xcd\x8d\xf4\xb0\x45\xa5\x10\xba\x0e\xdf\x1c\xdb\x56\x3d\x7a\x01\x62\xb7\xc6\x1f\x36\xb2\x1f\x68\x84\x4c\xe2\x48\x23\xeb\x40\x0b\x1b\xd9\xda\x78\x57\x23\x3b\x18\xdf\x2f\xbf\x86\x35\xed\x4f\xe6\xf2\xf4\xf5\x6a\x55\xb3\x10\xb0\xad\x52\x9c\x61\x80\xd4\x5e\x58\xed\x9d\x5c\x98\x73\xb1\xb8\xa2\xbf\x50\x57\xe2\xa6\x1f\x4b\x3e\xe8\xc6\x92\x29\x2f\xb3\x58\xbf\x1c\xc2\x4c\x7f\x82\x9e\xd4\x33\x54\xf7\x7a\xc5\x7a\xf9\xd7\xbf\xcc\xf4\xfd\xe7\xcb\xbf\xdc\x6a\x47\xa5\x68\x75\x42\xd1\x1c\x79\xa9\x06\xc1\xbf\x78\x61\xe0\xff\xf1\x42\xff\x73\x3b\x31\x2a\x45\xab\x13\x19\x4f\x86\x8e\x91\xc5\x7f\xe9\x91\x3f\x12\x78\x57\x64\x1b\x64\xa8\x1b\xfb\x98\x4d\x2b\xd6\x4d\x67\x29\x61\x09\x99\x65\xa8\xeb\x44\xc5\x81\xf1\xfb\x63\xb8\x4f\xa9\xe9\xfa\xcc\x32\x4d\xdf\xe8\xfb\xeb\x8c\xfc\x11\xb9\xbc\x6d\x5e\x75\x9f\x31\x29\x8a\xac\x6e\x15\x34\xed\x6a\x26\x6d\xb2\xa7\xdc\x7a\xce\xb1\xc6\x97\x03\xdb\x01\x4a\x6c\x93\xe3\xe6\xe7\xb7\x34\x33\xad\x99\x8f\x7a\x5e\x55\x10\x53\xdd\x9a\xbc\xb2\x64\xf9\x83\x4e\xe5\x8a\xaa\xfe\xb1\x22\x72\x9d\x4f\xff\x11\xae\xf9\x63\xb1\x49\xd4\xa2\xdf\x04\x81\xe4\x9c\xe9\x48\xd8\x1c\x6e\x1c\x43\xb1\x39\xdc\x28\x04\xff\x81\x91\xaa\x4f\x37\x02\x82\x72\x37\xa4\xbd\x1c\x7d\x38\x76\x7b\x71\x73\x14\xca\xc0\x4f\x21\xb6\x6b\xcd\x9c\x4b\x51\x94\xde\xaf\x14\x10\x97\x42\x27\xa2\x39\x61\x24\xc1\xb8\xf9\x5d\x6f\x47\x9f\xf1\x9f\xad\xdc\xf6\x6a\xc2\xfc\xc7\x86\x46\xeb\x77\xb3\x26\xb1\x4b\xa5\x39\xf8\xb3\x3e\x98\xf6\xc4\x66\xe6\x53\xbf\xc3\xe5\x72\x52\x5d\xb6\x4d\xde\x35\xce\x0c\x9b\x9f\x3d\x7d\x4b\xfc\xd3\xeb\xea\x18\x2e\xd5\x56\xae\x3e\x8b\x01\x7b\x3a\x65\x1d\x43\xd6\x68\x5b\xa8\x2e\x9f\xcb\x90\x3d\x9d\x32\x3d\x64\x07\x07\xdf\x0f\xfe\x1f\x00\x00\xff\xff\x94\x9f\xee\x21\x20\x38\x00\x00")
+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\x72\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\x6a\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\x6a\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\xe0\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")
 
 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: 
14368, mode: os.FileMode(420), modTime: time.Unix(1515166936, 0)}
+       info := bindataFileInfo{name: "wski18n/resources/en_US.all.json", size: 
9436, mode: os.FileMode(420), modTime: time.Unix(1515552461, 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 dcdd75e2..eafe7bdf 100644
--- a/wski18n/resources/en_US.all.json
+++ b/wski18n/resources/en_US.all.json
@@ -43,6 +43,26 @@
     "id": "msg_cmd_flag_cert_file",
     "translation": "path of the .cert file"
   },
+  {
+    "id": "msg_prompt_deploy",
+    "translation": "Do you really want to deploy this? (y/N): "
+  },
+  {
+    "id": "msg_prompt_undeploy",
+    "translation": "Do you really want to undeploy this? (y/N): "
+  },
+  {
+    "id": "msg_prompt_authkey",
+    "translation": "\nPlease provide an authentication token: "
+  },
+  {
+    "id": "msg_prompt_apihost",
+    "translation": "\nPlease provide the hostname for OpenWhisk: "
+  },
+  {
+    "id": "msg_prompt_namespace",
+    "translation": "\nPlease provide a namespace [default value is guest]: "
+  },
   {
     "id": "msg_manifest_not_found",
     "translation": "Manifest file not found at path [{{.path}}].\n"
@@ -72,208 +92,143 @@
     "translation": "Invalid action limit [{{.limit}}] in manifest is 
ignored.\n"
   },
   {
-    "id": "The authentication key is not configured.\n",
+    "id": "msg_config_missing_authkey",
     "translation": "The authentication key is not configured.\n"
   },
   {
-    "id": "The API host is not configured.\n",
+    "id": "msg_config_missing_apihost",
     "translation": "The API host is not configured.\n"
   },
   {
-    "id": "The namespace is not configured.\n",
+    "id": "msg_config_missing_namespace",
     "translation": "The namespace is not configured.\n"
   },
   {
-    "id": "The API host is {{.apihost}}, from {{.apisource}}.\n",
-    "translation": "The API host is {{.apihost}}, from {{.apisource}}.\n"
+    "id": "msg_config_apihost_info",
+    "translation": "The API host is {{.host}}, from {{.source}}.\n"
   },
   {
-    "id": "The auth key is set, from {{.authsource}}.\n",
-    "translation": "The auth key is set, from {{.authsource}}.\n"
+    "id": "msg_config_authkey_info",
+    "translation": "The auth key is set, from {{.source}}.\n"
   },
   {
-    "id": "The namespace is {{.namespace}}, from {{.namespacesource}}.\n",
-    "translation": "The namespace is {{.namespace}}, from 
{{.namespacesource}}.\n"
+    "id": "msg_config_namespace_info",
+    "translation": "The namespace is {{.namespace}}, from {{.source}}.\n"
   },
   {
-    "id": "Failed to get the supported runtimes from OpenWhisk service: 
{{.err}}.\n",
+    "id": "msg_err_get_runtimes",
     "translation": "Failed to get the supported runtimes from OpenWhisk 
service: {{.err}}.\n"
   },
   {
-    "id": "Start to unmarshal Openwhisk info from local values.\n",
-    "translation": "Start to unmarshal Openwhisk info from local values.\n"
+    "id": "msg_unmarshall_local",
+    "translation": "Unmarshal OpenWhisk info from local values.\n"
   },
   {
-    "id": "Unmarshal Openwhisk info from internet.\n",
-    "translation": "Unmarshal Openwhisk info from internet.\n"
+    "id": "msg_unmarshall_network",
+    "translation": "Unmarshal OpenWhisk info from internet.\n"
   },
   {
-    "id": "Deployment completed successfully.\n",
+    "id": "msg_deployment_succeeded",
     "translation": "Deployment completed successfully.\n"
   },
   {
-    "id": "Got error creating package with error message: {{.err}} and error 
code: {{.code}}.\n",
-    "translation": "Got error creating package with error message: {{.err}} 
and error code: {{.code}}.\n"
-  },
-  {
-    "id": "Got error creating action with error message: {{.err}} and error 
code: {{.code}}.\n",
-    "translation": "Got error creating package with error message: {{.err}} 
and error code: {{.code}}.\n"
-  },
-  {
-    "id": "Got error creating api with error message: {{.err}} and error code: 
{{.code}}.\n",
-    "translation": "Got error creating api with error message: {{.err}} and 
error code: {{.code}}.\n"
-  },
-  {
-    "id": "Got error creating rule with error message: {{.err}} and error 
code: {{.code}}.\n",
-    "translation": "Got error creating rule with error message: {{.err}} and 
error code: {{.code}}.\n"
-  },
-  {
-    "id": "Got error setting the status of rule with error message: {{.err}} 
and error code: {{.code}}.\n",
-    "translation": "Got error setting the status of rule with error message: 
{{.err}} and error code: {{.code}}.\n"
-  },
-  {
-    "id": "Got error creating trigger with error message: {{.err}} and error 
code: {{.code}}.\n",
-    "translation": "Got error creating trigger with error message: {{.err}} 
and error code: {{.code}}.\n"
-  },
-  {
-    "id": "Got error creating trigger feed with error message: {{.err}} and 
error code: {{.code}}.\n",
-    "translation": "Got error creating trigger feed with error message: 
{{.err}} and error code: {{.code}}.\n"
-  },
-  {
-    "id": "Got error creating package binding with error message: {{.err}} and 
error code: {{.code}}.\n",
-    "translation": "Got error creating package binding with error message: 
{{.err}} and error code: {{.code}}.\n"
-  },
-  {
-    "id": "Deployment of dependency {{.depName}} did not complete sucessfully. 
Run `wskdeploy undeploy` to remove partially deployed assets.\n",
-    "translation": "Deployment of dependency {{.depName}} did not complete 
sucessfully. Run `wskdeploy undeploy` to remove partially deployed assets.\n"
-  },
-  {
-    "id": "Deploying action {{.output}} ...",
-    "translation": "Deploying action {{.output}} ..."
-  },
-  {
-    "id": "Deploying rule {{.output}} ...",
-    "translation": "Deploying rule {{.output}} ..."
-  },
-  {
-    "id": "Deploying trigger feed {{.output}} ...",
-    "translation": "Deploying trigger feed {{.output}} ..."
-  },
-  {
-    "id": "Deploying package {{.output}} ...",
-    "translation": "Deploying package {{.output}} ..."
-  },
-  {
-    "id": "Deploying package binding {{.output}} ...",
-    "translation": "Deploying package binding {{.output}} ..."
-  },
-  {
-    "id": "Deploying dependency {{.output}} ...",
-    "translation": "Deploying dependency {{.output}} ..."
+    "id": "msg_deployment_failed",
+    "translation": "Deployment did not complete sucessfully. Run `wskdeploy 
undeploy` to remove partially deployed assets.\n"
   },
   {
-    "id": "OK. Cancelling deployment.\n",
+    "id": "msg_deployment_cancelled",
     "translation": "OK. Cancelling deployment.\n"
   },
   {
-    "id": "OK. Canceling undeployment.\n",
-    "translation": "OK. Canceling undeployment.\n"
-  },
-  {
-    "id": "Undeployment did not complete sucessfully.\n",
-    "translation": "Undeployment did not complete sucessfully.\n"
-  },
-  {
-    "id": "Deployment removed successfully.\n",
-    "translation": "Deployment removed successfully.\n"
+    "id": "msg_undeployment_succeeded",
+    "translation": "Undeployment completed successfully.\n"
   },
   {
-    "id": "Undeployment did not complete sucessfully.\n",
+    "id": "msg_undeployment_failed",
     "translation": "Undeployment did not complete sucessfully.\n"
   },
   {
-    "id": "Undeploying dependency {{.depName}} ...",
-    "translation": "Undeploying dependency {{.depName}} ..."
+    "id": "msg_undeployment_cancelled",
+    "translation": "OK. Cancelling undeployment.\n"
   },
   {
-    "id": "Undeployment of dependency {{.depName}} did not complete 
sucessfully.\n",
-    "translation": "Undeployment of dependency {{.depName}} did not complete 
sucessfully.\n"
+    "id": "msg_undeployment_managed_failed",
+    "translation": "Undeployment of deleted entities did not complete 
sucessfully during managed deployment. Run `wskdeploy undeploy` to remove 
partially deployed assets.\n"
   },
   {
-    "id": "Got error deleting action with error message: {{.err}} and error 
code: {{.code}}.\n",
-    "translation": "Got error deleting action with error message: {{.err}} and 
error code: {{.code}}.\n"
+    "id": "msg_warn_whisk_properties",
+    "translation": "The [{{.key}}] key was retrieved from whisk.properties 
which will soon be deprecated please do not use it outside of Travis builds.\n"
   },
   {
-    "id": "Got error deleting rule with error message: {{.err}} and error 
code: {{.code}}.\n",
-    "translation": "Got error deleting rule with error message: {{.err}} and 
error code: {{.code}}.\n"
+    "id": "msg_warn_key_deprecated_replaced",
+    "translation": "The [{{.oldkey}}] key in the {{.filetype}} file will soon 
be deprecated, please use the [{{.newkey}}] key instead.\n"
   },
-  {
-    "id": "Got error setting the status of rule with error message: {{.err}} 
and error code: {{.code}}.\n",
-    "translation": "Got error setting the status of rule with error message: 
{{.err}} and error code: {{.code}}.\n"
+  { "id": "msg_err_missing_mandatory_key",
+    "translation": "The mandatory key [{{.key}}] is missing."
   },
   {
-    "id": "Got error deleting trigger with error message: {{.err}} and error 
code: {{.code}}.\n",
-    "translation": "Got error deleting trigger with error message: {{.err}} 
and error code: {{.code}}.\n"
+    "id": "msg_err_mismatch_name_project",
+    "translation": "The {{.key}} named [{{.dname}}] in deployment file 
[{{.dpath}}] does not match the name [{{.mname}}] in manifest file 
[{{.mpath}}]."
   },
   {
-    "id": "Got error deleting trigger feed with error message: {{.err}} and 
error code: {{.code}}.\n",
-    "translation": "Got error deleting trigger feed with error message: 
{{.err}} and error code: {{.code}}.\n"
+    "id": "msg_deploying_dependency",
+    "translation": "Deploying dependency [{{.name}}]..."
   },
   {
-    "id": "Got error deleting package with error message: {{.err}} and error 
code: {{.code}}.\n",
-    "translation": "Got error deleting package with error message: {{.err}} 
and error code: {{.code}}.\n"
+    "id": "msg_undeploying_dependency",
+    "translation": "Undeploying dependency [{{.name}}]..."
   },
   {
-    "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": "msg_dependency_deployment_success",
+    "translation": "Dependency [{{.name}}] has been successfully deployed.\n"
   },
   {
-    "id": "Got error deleting binding package with error message: {{.err}} and 
error code: {{.code}}.\n",
-    "translation": "Got error deleting binding package with error message: 
{{.err}} and error code: {{.code}}.\n"
+    "id": "msg_dependency_deployment_failure",
+    "translation": "Deployment of dependency [{{.name}}] did not complete 
sucessfully. Run `wskdeploy undeploy` to remove partially deployed assets.\n"
   },
   {
-    "id": "Dependency {{.output}} has been successfully deployed.\n",
-    "translation": "Dependency {{.output}} has been successfully deployed.\n"
+    "id": "msg_dependency_undeployment_success",
+    "translation": "Dependency [{{.name}}] has been successfully undeployed.\n"
   },
   {
-    "id": "Package binding {{.output}} has been successfully deployed.\n",
-    "translation": "Package binding {{.output}} has been successfully 
deployed.\n"
+    "id": "msg_dependency_undeployment_failure",
+    "translation": "Undeployment of dependency [{{.name}}] did not complete 
sucessfully.\n"
   },
   {
-    "id": "Package {{.output}} has been successfully deployed.\n",
-    "translation": "Package {{.output}} has been successfully deployed.\n"
+    "id": "msg_managed_found_deleted_entity",
+    "translation": "Deleting {{.key}} [{{.name}}] which was removed from the 
current managed project [{{.project}}] as part of undeployment.\n"
   },
   {
-    "id": "Trigger {{.output}} has been successfully deployed.\n",
-    "translation": "Trigger {{.output}} has been successfully deployed.\n"
+    "id": "msg_err_create_entity",
+    "translation": "Error creating {{.key}} with error message: {{.err}} and 
error code: {{.code}}.\n"
   },
   {
-    "id": "Trigger feed {{.output}} has been successfully deployed.\n",
-    "translation": "Trigger feed {{.output}} has been successfully deployed.\n"
+    "id": "msg_err_delete_entity",
+    "translation": "Error deleting {{.key}} with error message: {{.err}} and 
error code: {{.code}}.\n"
   },
   {
-    "id": "Rule {{.output}} has been successfully deployed.\n",
-    "translation": "Rule {{.output}} has been successfully deployed.\n"
+    "id": "msg_entity_deploying",
+    "translation": "Deploying {{.key}} [{{.name}}] ..."
   },
   {
-    "id": "Action {{.output}} has been successfully deployed.\n",
-    "translation": "Action {{.output}} has been successfully deployed.\n"
+    "id": "msg_entity_undeploying",
+    "translation": "Undeploying {{.key}} [{{.name}}] ..."
   },
   {
-    "id": "Dependency {{.depName}} has been successfully undeployed.\n",
-    "translation": "Dependency {{.depName}} has been successfully 
undeployed.\n"
+    "id": "msg_entity_deployed_success",
+    "translation": "{{.key}} [{{.name}}] has been successfully deployed.\n"
   },
   {
-    "id": "Trigger {{.trigger}} has been removed.\n",
-    "translation": "Trigger {{.trigger}} has been removed.\n"
+    "id": "msg_entity_undeployed_success",
+    "translation": "{{.key}} [{{.name}}] has been successfully undeployed.\n"
   },
   {
-    "id": "Rule {{.rule}} has been removed.\n",
-    "translation": "Rule {{.rule}} has been removed.\n"
+    "id": "SEPARATOR",
+    "translation": "====================== Entries below this line are not 
verified ==================================="
   },
   {
-    "id": "Action {{.action}} has been removed.\n",
-    "translation": "Action {{.action}} has been removed.\n"
+    "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",
@@ -315,33 +270,8 @@
     "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": "The name of the application {{.appNameDeploy}} in deployment file 
at [{{.deploymentFile}}] does not match the name of the application 
{{.appNameManifest}}} in manifest file at [{{.manifestFile}}].",
-    "translation": "The name of the application {{.appNameDeploy}} in 
deployment file at [{{.deploymentFile}}] does not match the name of the 
application {{.appNameManifest}}} in manifest file at [{{.manifestFile}}]."
-  },
   {
     "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": "WARNING: application in manifest file will soon be deprecated, 
please use project instead.\n",
-    "translation": "WARNING: application in manifest file will soon be 
deprecated, please use project instead.\n"
-  },
-  {
-    "id": "Undeployment of deleted entities did not complete sucessfully 
during managed deployment. Run `wskdeploy undeploy` to remove partially 
deployed assets.\n",
-    "translation": "Undeployment of deleted entities did not complete 
sucessfully during managed deployment. Run `wskdeploy undeploy` to remove 
partially deployed assets.\n"
-  },
-  {
-    "id": "Found the action {{.action}} which is deleted from the current 
project {{.project}} in manifest file which is being undeployed.\n",
-    "translation": "Found the action {{.action}} which is deleted from the 
current project {{.project}} in manifest file which is being undeployed.\n"
-  },
-  {
-    "id": "Found the trigger {{.trigger}} which is deleted from the current 
project {{.project}} in manifest file which is being undeployed.\n",
-    "translation": "Found the trigger {{.trigger}} which is deleted from the 
current project {{.project}} in manifest file which is being undeployed.\n"
-  },
-  {
-    "id": "Found the package {{.package}} which is deleted from the current 
project {{.project}} in manifest file which is being undeployed.\n",
-    "translation": "Found the package {{.package}} which is deleted from the 
current project {{.project}} in manifest file which is being undeployed.\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:
[email protected]


With regards,
Apache Git Services

Reply via email to