houshengbo closed pull request #679: Use proper IDs when referencing i18n 
strings. (Base changes + phase 1 conversions)
URL: https://github.com/apache/incubator-openwhisk-wskdeploy/pull/679
 
 
   

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/cmd/root.go b/cmd/root.go
index 0edf6f33..25ccc300 100644
--- a/cmd/root.go
+++ b/cmd/root.go
@@ -37,6 +37,8 @@ import (
 
 var stderr = ""
 var stdout = ""
+
+// TODO(#683) short and long desc. should be translated for i18n
 var RootCmd = &cobra.Command{
        Use:           "wskdeploy",
        SilenceErrors: true,
@@ -72,11 +74,14 @@ func Execute() {
                os.Exit(-1)
        } else {
                if utils.Flags.WithinOpenWhisk {
+                       // TODO() i18n
                        fmt.Print(`{"deploy":"success"}`) // maybe return 
report of what has been deployed.
                }
        }
 }
 
+// This function is only used when wskdeploy is being called as an Action and 
its input
+// (i.e., command and arguments) is JSON data (map).
 func substCmdArgs() error {
        // Extract arguments from input JSON string
 
@@ -93,7 +98,7 @@ func substCmdArgs() error {
                regex, _ := regexp.Compile("[ ]+")
                os.Args = regex.Split("wskdeploy "+strings.TrimSpace(v), -1)
        } else {
-               return errors.New(wski18n.T("Missing cmd key"))
+               return errors.New(wski18n.T(wski18n.ID_JSON_MISSING_KEY_CMD))
        }
        return nil
 }
@@ -106,6 +111,8 @@ func init() {
        // Here you will define your flags and configuration settings.
        // Cobra supports Persistent Flags, which, if defined here,
        // will be global for your application.
+
+       // TODO(#682) add in-line descriptions to i18n resource file
        RootCmd.PersistentFlags().StringVar(&utils.Flags.CfgFile, "config", "", 
"config file (default is $HOME/.wskprops)")
        // Cobra also supports local flags, which will only run
        // when this action is called directly.
@@ -117,12 +124,12 @@ func init() {
        RootCmd.PersistentFlags().BoolVarP(&utils.Flags.UseInteractive, 
"allow-interactive", "i", false, "allow interactive prompts")
        RootCmd.PersistentFlags().BoolVarP(&utils.Flags.UseDefaults, 
"allow-defaults", "a", false, "allow defaults")
        RootCmd.PersistentFlags().BoolVarP(&utils.Flags.Verbose, "verbose", 
"v", false, "verbose output")
-       RootCmd.PersistentFlags().StringVarP(&utils.Flags.ApiHost, "apihost", 
"", "", wski18n.T("whisk API HOST"))
-       RootCmd.PersistentFlags().StringVarP(&utils.Flags.Namespace, 
"namespace", "n", "", wski18n.T("namespace"))
-       RootCmd.PersistentFlags().StringVarP(&utils.Flags.Auth, "auth", "u", 
"", wski18n.T("authorization `KEY`"))
-       RootCmd.PersistentFlags().StringVar(&utils.Flags.ApiVersion, 
"apiversion", "", wski18n.T("whisk API `VERSION`"))
-       RootCmd.PersistentFlags().StringVarP(&utils.Flags.Key, "key", "k", "", 
wski18n.T("path of the .key file"))
-       RootCmd.PersistentFlags().StringVarP(&utils.Flags.Cert, "cert", "c", 
"", wski18n.T("path of the .cert file"))
+       RootCmd.PersistentFlags().StringVarP(&utils.Flags.ApiHost, "apihost", 
"", "", wski18n.T(wski18n.ID_CMD_FLAG_API_HOST))
+       RootCmd.PersistentFlags().StringVarP(&utils.Flags.Namespace, 
"namespace", "n", "", wski18n.T(wski18n.ID_CMD_FLAG_NAMESPACE))
+       RootCmd.PersistentFlags().StringVarP(&utils.Flags.Auth, "auth", "u", 
"", wski18n.T(wski18n.ID_CMD_FLAG_AUTH_KEY))
+       RootCmd.PersistentFlags().StringVar(&utils.Flags.ApiVersion, 
"apiversion", "", wski18n.T(wski18n.ID_CMD_FLAG_API_VERSION))
+       RootCmd.PersistentFlags().StringVarP(&utils.Flags.Key, "key", "k", "", 
wski18n.T(wski18n.ID_CMD_FLAG_KEY_FILE))
+       RootCmd.PersistentFlags().StringVarP(&utils.Flags.Cert, "cert", "c", 
"", wski18n.T(wski18n.ID_CMD_FLAG_CERT_FILE))
        RootCmd.PersistentFlags().BoolVarP(&utils.Flags.Managed, "managed", "", 
false, "mark project entities as managed")
 }
 
@@ -136,6 +143,7 @@ func initConfig() {
                _, err := whisk.ReadProps(utils.Flags.CfgFile)
                if err != nil {
                        utils.Flags.CfgFile = defaultPath
+                       // TODO() i18n
                        wskprint.PrintOpenWhiskWarning("Invalid config file 
detected, so by default it is set to " + utils.Flags.CfgFile + "\n")
                }
 
@@ -169,22 +177,16 @@ func Deploy() error {
        if utils.Flags.ManifestPath == "" {
                if _, err := os.Stat(path.Join(projectPath, 
utils.ManifestFileNameYaml)); err == nil {
                        utils.Flags.ManifestPath = path.Join(projectPath, 
utils.ManifestFileNameYaml)
-                       stdout = wski18n.T("Using {{.manifestPath}} for 
deployment.\n",
-                               map[string]interface{}{"manifestPath": 
utils.Flags.ManifestPath})
+                       stdout = 
wski18n.T(wski18n.ID_MSG_MANIFEST_DEPLOY_X_path_X,
+                               map[string]interface{}{"path": 
utils.Flags.ManifestPath})
                } else if _, err := os.Stat(path.Join(projectPath, 
utils.ManifestFileNameYml)); err == nil {
                        utils.Flags.ManifestPath = path.Join(projectPath, 
utils.ManifestFileNameYml)
-                       stdout = wski18n.T("Using {{.manifestPath}} for 
deployment.\n",
-                               map[string]interface{}{"manifestPath": 
utils.Flags.ManifestPath})
+                       stdout = 
wski18n.T(wski18n.ID_MSG_MANIFEST_DEPLOY_X_path_X,
+                               map[string]interface{}{"path": 
utils.Flags.ManifestPath})
                } else {
-                       stderr = wski18n.T("Manifest file not found at path 
{{.projectPath}}.\n",
-                               map[string]interface{}{"projectPath": 
projectPath})
-                       whisk.Debug(whisk.DbgError, stderr)
-                       errString := wski18n.T("Missing {{.yaml}}/{{.yml}} 
file. Manifest file not found at path {{.projectPath}}.\n",
-                               map[string]interface{}{"yaml": 
utils.ManifestFileNameYaml, "yml": utils.ManifestFileNameYml,
-                                       "projectPath": projectPath})
-
-                       // TODO() print help on error
-                       return 
wskderrors.NewErrorManifestFileNotFound(projectPath, errString)
+                       stderr = 
wski18n.T(wski18n.ID_MSG_MANIFEST_FILE_NOT_FOUND_X_path_X,
+                               map[string]interface{}{"path": projectPath})
+                       return 
wskderrors.NewErrorManifestFileNotFound(projectPath, stderr)
                }
                whisk.Debug(whisk.DbgInfo, stdout)
        }
@@ -241,8 +243,8 @@ func Deploy() error {
                }
 
        } else {
-               errString := wski18n.T("Manifest file is not found at the path 
[{{.filePath}}].\n",
-                       map[string]interface{}{"filePath": 
utils.Flags.ManifestPath})
+               errString := 
wski18n.T(wski18n.ID_MSG_MANIFEST_FILE_NOT_FOUND_X_path_X,
+                       map[string]interface{}{"path": 
utils.Flags.ManifestPath})
                whisk.Debug(whisk.DbgError, errString)
                return 
wskderrors.NewErrorManifestFileNotFound(utils.Flags.ManifestPath, errString)
        }
@@ -265,20 +267,16 @@ func Undeploy() error {
        if utils.Flags.ManifestPath == "" {
                if _, err := os.Stat(path.Join(projectPath, 
utils.ManifestFileNameYaml)); err == nil {
                        utils.Flags.ManifestPath = path.Join(projectPath, 
utils.ManifestFileNameYaml)
-                       stdout = wski18n.T("Using {{.manifestPath}} for 
undeployment.\n",
-                               map[string]interface{}{"manifestPath": 
utils.Flags.ManifestPath})
+                       stdout = 
wski18n.T(wski18n.ID_MSG_MANIFEST_UNDEPLOY_X_path_X,
+                               map[string]interface{}{"path": 
utils.Flags.ManifestPath})
                } else if _, err := os.Stat(path.Join(projectPath, 
utils.ManifestFileNameYml)); err == nil {
                        utils.Flags.ManifestPath = path.Join(projectPath, 
utils.ManifestFileNameYml)
-                       stdout = wski18n.T("Using {{.manifestPath}} for 
undeployment.\n",
-                               map[string]interface{}{"manifestPath": 
utils.Flags.ManifestPath})
+                       stdout = 
wski18n.T(wski18n.ID_MSG_MANIFEST_UNDEPLOY_X_path_X,
+                               map[string]interface{}{"path": 
utils.Flags.ManifestPath})
                } else {
-                       stderr = wski18n.T("Manifest file not found at path 
{{.projectPath}}.\n",
-                               map[string]interface{}{"projectPath": 
projectPath})
-                       whisk.Debug(whisk.DbgError, stderr)
-                       errString := wski18n.T("Missing {{.yaml}}/{{.yml}} 
file. Manifest file not found at path {{.projectPath}}.\n",
-                               map[string]interface{}{"yaml": 
utils.ManifestFileNameYaml, "yml": utils.ManifestFileNameYml,
-                                       "projectPath": projectPath})
-                       return 
wskderrors.NewErrorManifestFileNotFound(projectPath, errString)
+                       stderr = 
wski18n.T(wski18n.ID_MSG_MANIFEST_FILE_NOT_FOUND_X_path_X,
+                               map[string]interface{}{"path": projectPath})
+                       return 
wskderrors.NewErrorManifestFileNotFound(projectPath, stderr)
                }
                whisk.Debug(whisk.DbgInfo, stdout)
        }
@@ -332,9 +330,8 @@ func Undeploy() error {
                }
 
        } else {
-               errString := wski18n.T("Manifest file is not found at the path 
[{{.filePath}}].\n",
-                       map[string]interface{}{"filePath": 
utils.Flags.ManifestPath})
-               whisk.Debug(whisk.DbgError, errString)
+               errString := 
wski18n.T(wski18n.ID_MSG_MANIFEST_FILE_NOT_FOUND_X_path_X,
+                       map[string]interface{}{"path": 
utils.Flags.ManifestPath})
                return 
wskderrors.NewErrorManifestFileNotFound(utils.Flags.ManifestPath, errString)
        }
 }
diff --git a/deployers/verifier.go b/deployers/verifier.go
index 116453f4..a956ee9a 100644
--- a/deployers/verifier.go
+++ b/deployers/verifier.go
@@ -60,6 +60,7 @@ func (vf *Verifier) Filter(deployer *ServiceDeployer, target 
*DeploymentProject)
        }
 
        depApp := NewDeploymentProject()
+       // TODO() i18n
        fmt.Printf("Target Packages are %#v\n", target.Packages)
        depApp.Packages = target.Packages
        return depApp, nil
diff --git a/parsers/manifest_parser.go b/parsers/manifest_parser.go
index 8403b47e..84b63a57 100644
--- a/parsers/manifest_parser.go
+++ b/parsers/manifest_parser.go
@@ -33,6 +33,7 @@ import (
        "gopkg.in/yaml.v2"
        "github.com/apache/incubator-openwhisk-wskdeploy/wskderrors"
        "github.com/apache/incubator-openwhisk-wskdeploy/wskenv"
+       "github.com/apache/incubator-openwhisk-wskdeploy/wskprint"
 )
 
 // Read existing manifest file or create new if none exists
@@ -156,6 +157,7 @@ func (dm *YAMLParser) ComposeDependencies(pkg Package, 
projectPath string, fileP
 
                        isBinding = false
                } else {
+                       // TODO() i18n
                        return nil, errors.New("Dependency type is unknown.  
wskdeploy only supports /whisk.system bindings or github.com packages.")
                }
 
@@ -197,6 +199,7 @@ func (dm *YAMLParser) ComposeAllPackages(manifest *YAML, 
filePath string, ma whi
        manifestPackages := make(map[string]Package)
 
        if manifest.Package.Packagename != "" {
+               // TODO() i18n
                fmt.Println("WARNING: using package inside of manifest file 
will soon be deprecated, please use packages instead.")
                s, err := dm.ComposePackage(manifest.Package, 
manifest.Package.Packagename, filePath, ma)
                if err == nil {
@@ -497,37 +500,31 @@ func (dm *YAMLParser) ComposeActions(filePath string, 
actions map[string]Action,
                                        if 
utils.CheckRuntimeConsistencyWithFileExtension(ext, action.Runtime) {
                                                wskaction.Exec.Kind = 
action.Runtime
                                        } else {
-                                               errStr := wski18n.T("WARNING: 
Runtime specified in manifest " +
-                                                       "YAML {{.runtime}} does 
not match with action source " +
-                                                       "file extension 
{{.ext}} for action {{.action}}.\n",
+                                               errStr := 
wski18n.T(wski18n.ID_MSG_RUNTIME_MISMATCH_X_runtime_X_ext_X_action_X,
                                                        
map[string]interface{}{"runtime": action.Runtime, "ext": ext, "action": 
action.Name})
-                                               whisk.Debug(whisk.DbgWarn, 
errStr)
+                                               
wskprint.PrintOpenWhiskWarning(errStr)
+
                                                // even if runtime is not 
consistent with file extension, deploy action with specified runtime in strict 
mode
                                                if utils.Flags.Strict {
                                                        wskaction.Exec.Kind = 
action.Runtime
                                                } else {
-                                                       errStr := 
wski18n.T("WARNING: Whisk Deploy has chosen appropriate " +
-                                                               "runtime 
{{.runtime}} based on the action source file " +
-                                                               "extension for 
that action {{.action}}.\n",
+                                                       errStr := 
wski18n.T(wski18n.ID_MSG_RUNTIME_CHANGED_X_runtime_X_action_X,
                                                                
map[string]interface{}{"runtime": wskaction.Exec.Kind, "action": action.Name})
-                                                       
whisk.Debug(whisk.DbgWarn, errStr)
+                                                       
wskprint.PrintOpenWhiskWarning(errStr)
                                                }
                                        }
                                }
                        } else {
-                               errStr := wski18n.T("WARNING: Runtime specified 
in manifest " +
-                                       "YAML {{.runtime}} is not supported by 
OpenWhisk server " +
-                                       "for the action {{.action}}.\n",
+                               errStr := 
wski18n.T(wski18n.ID_MSG_RUNTIME_UNSUPPORTED_X_runtime_X_action_X,
                                        map[string]interface{}{"runtime": 
action.Runtime, "action": action.Name})
                                whisk.Debug(whisk.DbgWarn, errStr)
                                if ext == utils.ZIP_FILE_EXTENSION {
+                                       // TODO() i18n
                                        // for zip action, error out if 
specified runtime is not supported by OpenWhisk server
                                        errMessage := "ERROR: Given runtime for 
a zip action is not supported by OpenWhisk server. " + RUNTIME_ERR_MESSAGE
                                        return nil, 
wskderrors.NewInvalidRuntimeError(errMessage, 
splitFilePath[len(splitFilePath)-1], action.Name, action.Runtime, 
utils.ListOfSupportedRuntimes(utils.SupportedRunTimes))
                                } else {
-                                       errStr = wski18n.T("WARNING: Whisk 
Deploy has chosen appropriate " +
-                                               "runtime {{.runtime}} based on 
the action source file " +
-                                               "extension for that action 
{{.action}}.\n",
+                                       errStr = 
wski18n.T(wski18n.ID_MSG_RUNTIME_CHANGED_X_runtime_X_action_X,
                                                
map[string]interface{}{"runtime": wskaction.Exec.Kind, "action": action.Name})
                                        whisk.Debug(whisk.DbgWarn, errStr)
                                }
@@ -623,20 +620,23 @@ func (dm *YAMLParser) ComposeActions(filePath string, 
actions map[string]Action,
                        if utils.LimitsTimeoutValidation(action.Limits.Timeout) 
{
                                wsklimits.Timeout = action.Limits.Timeout
                        } else {
-                               warningString := wski18n.T("WARNING: Invalid 
limitation 'timeout' of action in manifest is ignored. Please check errors.\n")
-                               whisk.Debug(whisk.DbgWarn, warningString)
+                               warningString := 
wski18n.T(wski18n.ID_MSG_ACTION_LIMIT_IGNORED_X_limit_X,
+                                       map[string]interface{}{"limit": 
"timeout"})
+                               wskprint.PrintOpenWhiskWarning(warningString)
                        }
                        if utils.LimitsMemoryValidation(action.Limits.Memory) {
                                wsklimits.Memory = action.Limits.Memory
                        } else {
-                               warningString := wski18n.T("WARNING: Invalid 
limitation 'memorySize' of action in manifest is ignored. Please check 
errors.\n")
-                               whisk.Debug(whisk.DbgWarn, warningString)
+                               warningString := 
wski18n.T(wski18n.ID_MSG_ACTION_LIMIT_IGNORED_X_limit_X,
+                                       map[string]interface{}{"limit": 
"memorySize"})
+                               wskprint.PrintOpenWhiskWarning(warningString)
                        }
                        if utils.LimitsLogsizeValidation(action.Limits.Logsize) 
{
                                wsklimits.Logsize = action.Limits.Logsize
                        } else {
-                               warningString := wski18n.T("WARNING: Invalid 
limitation 'logSize' of action in manifest is ignored. Please check errors.\n")
-                               whisk.Debug(whisk.DbgWarn, warningString)
+                               warningString := 
wski18n.T(wski18n.ID_MSG_ACTION_LIMIT_IGNORED_X_limit_X,
+                                       map[string]interface{}{"limit": 
"logSize"})
+                               wskprint.PrintOpenWhiskWarning(warningString)
                        }
                        if wsklimits.Timeout!=nil || wsklimits.Memory!=nil || 
wsklimits.Logsize!=nil {
                                wskaction.Limits = wsklimits
diff --git a/wski18n/i18n.go b/wski18n/i18n.go
index 245dc3b4..38c41720 100644
--- a/wski18n/i18n.go
+++ b/wski18n/i18n.go
@@ -43,10 +43,12 @@ var SUPPORTED_LOCALES = []string{
 
 var resourcePath = filepath.Join("wski18n", "resources")
 
+// TODO() when are these used?
 func GetResourcePath() string {
     return resourcePath
 }
 
+// TODO() when are these used?
 func SetResourcePath(path string) {
     resourcePath = path
 }
@@ -58,10 +60,12 @@ func init() {
     curLocale = Init(new(JibberJabberDetector))
 }
 
+// TODO() when are these used?
 func CurLocale() string {
     return curLocale
 }
 
+// TODO() when are these used?
 func Locale(detector Detector) string {
 
     // Use default locale until strings are translated
@@ -103,6 +107,7 @@ func loadFromAsset(locale string) (err error) {
     return
 }
 
+// TODO() when are these used?
 func normalize(locale string) string {
     locale = strings.ToLower(strings.Replace(locale, "-", "_", 1))
     for _, l := range SUPPORTED_LOCALES {
@@ -119,6 +124,7 @@ func normalize(locale string) string {
     return locale
 }
 
+// TODO() when are these used?
 func isSupported(locale string) bool {
     for _, l := range SUPPORTED_LOCALES {
         if strings.EqualFold(locale, l) {
@@ -128,6 +134,7 @@ func isSupported(locale string) bool {
     return false
 }
 
+// TODO() when are these used?
 func defaultLocaleForLang(lang string) string {
     if lang != "" {
         lang = strings.ToLower(lang)
diff --git a/wski18n/i18n_ids.go b/wski18n/i18n_ids.go
new file mode 100644
index 00000000..6f6a3699
--- /dev/null
+++ b/wski18n/i18n_ids.go
@@ -0,0 +1,341 @@
+/*
+ * 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
+
+const(
+       // Debug / trace message prefixes
+       ID_MSG_PREFIX_ERROR     = "msg_prefix_error"    // "Error"
+       ID_MSG_PREFIX_SUCCESS   = "msg_prefix_success"  // "Success"
+       ID_MSG_PREFIX_WARNING   = "msg_prefix_warning"  // "Warning"
+       ID_MSG_PREFIX_INFO      = "msg_prefix_info"     // "Info"
+
+       // wskdeploy (as an Action) JSON messages
+       ID_JSON_MISSING_KEY_CMD = "msg_json_missing_cmd_key"    // "Missing 
'cmd' input key"
+
+       // wskdeploy Command messages
+       ID_CMD_FLAG_AUTH_KEY    = "msg_cmd_flag_auth_key"       // 
"authorization `KEY`"
+       ID_CMD_FLAG_NAMESPACE   = "msg_cmd_flag_namespace"      // "namespace"
+       ID_CMD_FLAG_API_HOST    = "msg_cmd_flag_api_host"       // "whisk API 
`HOST`"
+       ID_CMD_FLAG_API_VERSION = "msg_cmd_flag_api_version"    // "whisk API 
`VERSION`"
+       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"
+
+       // 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": "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": "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": "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"
+//}
\ No newline at end of file
diff --git a/wski18n/i18n_resources.go b/wski18n/i18n_resources.go
index 540039fa..f95adedd 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\x4d\x6f\xdc\x38\x12\xbd\xfb\x57\x14\x72\xe9\x8b\xa1\x4d\x66\xb1\xc0\x22\xb7\x60\x93\x99\x35\x66\x62\x1b\xb6\x77\x82\xc1\x6c\x30\x66\x4b\xa5\x16\xa7\x25\x52\x20\x29\x3b\x3d\x42\xff\xf7\x05\x49\xa9\x3f\x6c\x8a\xa2\xd4\xea\xb6\x11\xac\x4f\x72\x4b\xf5\xde\xab\xe2\x57\x15\x45\xfd\x7e\x06\x50\x9f\x01\x00\xbc\xa1\xc9\x9b\xf7\xf0\xa6\x90\x8b\x3f\x4a\x81\x29\xfd\xf6\x07\x0a\xc1\xc5\x9b\x73\x7b\x57\x09\xc2\x64\x4e\x14\xe5\x4c\x3f\xf6\xc9\xdc\x3b\x03\x58\x9f\x7b\x10\x1e\x89\x60\x94\x2d\x3a\x30\xbe\x34\x77\xfb\x50\x64\x15\xc7\x28\x65\x07\xca\x6d\x73\xb7\x0f\x85\xb2\x94\x77\x40\x5c\xe8\x5b\x4e\xfb\xcf\x54\x4a\xca\x16\x10\x17\x09\x2c\x71\xd5\x61\xdf\x3e\x35\x8b\x8b\x64\x06\x94\x95\x95\x32\x4f\x3b\x21\x49\xa5\x32\x2e\xe8\x5f\xc6\x1a\xee\x7f\xfe\xf4\xdb\x7d\x07\xac\xeb\x49\x27\xe4\x63\x46\xe5\x12\x3e\x5c\x5f\xc0\xfd\xbf\xaf\x6e\xef\xba\xf0\x9e\x3d\xe6\x04\x63\xa4\x40\x59\x92\x18\x3b\x50\xb6\xf7\xfb\xb4\xfc\xfa\xe9\xe6\xf6\xe2\xea\x32\x40\xce\xe6\x49\x77\x23\x10\x46\x53\x94\x0a\x52\x9a\x23\x30\xae\x20\xe5\x15\x4b\x80\x28\x28\x89\xca\xa0\xae\xa3\x52\xf0\x3f\x31\x56\xd7\x44\x65\xeb\x75\xf4\x5f\xd6\xd5\x50\x23\x90\xbc\xfd\xa2\xae\xa3\x15\x29\xf2\xf5\xfa\x6f\xfa\x4a\x5f\x18\xe8\x08\x26\xd4\x7c\x0c\xaa\x80\x38\x53\xb9\x8f\xa5\x32\xb4\x78\xbf\xd7\x75\xa4\x9f\xb0\x68\x5f\x43\xa3\x3d\x04\xcf\x29\xef\x3f\x6d\x18\x8a\x06\xd7\x1a\x40\xca\x05\x24\x58\xe6\x7c\x55\x20\x53\xdd\x72\xc2\xed\x07\xd3\x57\xec\x50\x01\x4f\x11\x9c\x12\x74\xc8\x44\xc5\x14\x2d\x36\xe1\x94\x55\x59\x72\xa1\x30\x81\xf9\x0a\xae\x4a\x64\x76\x54\x95\x39\x51\x29\x17\x45\xb7\x98\x71\x58\x4e\x59\x5f\x3e\xdc\x5c\x5e\x5c\xfe\xf4\x1e\x6e\x1a\x3c\x59\x62\x4c\x53\x8a\x09\x50\x06\xad\xb3\xf0\xdb\x87\xcf\xbf\x68\xef\x1b\xd6\xf5\x1a\x12\x8e\x96\xb9\x20\x2a\xce\xe0\x91\xaa\x0c\x48\x6c\x66\x3b\xc9\x2b\x11\xa3\xed\x39\xf8\x4d\x21\x93\xfa\xd7\xba\x8e\xf0\x9b\x6a\x42\xd6\x3c\x59\xd7\x91\xbd\xf2\x0d\xa2\x57\x25\xd1\x1f\xc4\x2f\x26\xe8\x1f\x4d\x6f\x80\x8c\x48\x88\x33\x2e\x91\x01\x29\x4b\xc1\x4b\x41\x89\xda\x36\xdc\x9e\xd4\x39\x91\x98\x00\x67\x66\x64\x79\x35\x6a\x69\x2a\x23\x6a\x5c\x08\x5f\x5e\xe0\xb4\xbd\xb0\xab\xf7\x5b\x3f\x25\x8a\x07\x14\x8d\x22\x3c\x4d\xa7\x9b\x40\x91\x7b\x0a\x63\x5b\xc8\xb6\x85\xd4\xaa\xc4\x73\x90\xa8\x40\x71\x60\x3c\xc1\x3f\xbb\x12\xad\x50\x6b\x27\xf5\x9d\x56\x5a\xa9\x0c\x99\xa2\xb1\x4d\x68\x96\xb8\x6a\x3d\x8d\x39\x4b\xe9\xa2\x12\x98\x74\x47\x73\x08\x42\xa7\x04\x9d\x6d\x64\x5c\xaa\xa1\xc4\x7e\xbb\x4e\xba\x4d\xae\x34\x94\xaf\xc7\x30\xc8\x3f\xdd\x23\x4a\xaa\xff\x5b\xaf\xcf\x21\x15\xbc\x68\x7e\xb2\x63\xce\xd7\x73\x47\x41\x79\xdb\xbd\x6d\x2b\x89\x6a\x07\xa0\x52\x59\x98\x98\x60\x88\xb0\xa6\xa8\xeb\x68\xf3\xff\xae\x47\x9b\x1f\xc3\x54\x8d\xc7\x74\xca\xfc\x91\xd0\x1c\x13\x3d\x92\x16\x68\xf3\xa3\x67\x03\x4e\x5a\xd8\xfd\xc9\x80\xc6\xf8\xde\xac\x3b\x42\xf8\x14\x4f\x06\xef\x14\x7f\xab\x88\x30\xb3\x40\xc5\x0a\x22\x64\x46\xf2\x9d\x14\x42\xd7\x5e\x16\x3a\xe7\x31\xc9\xe1\x81\xe4\x15\xca\x6e\xa9\x23\xc1\x3a\x26\x3d\x1f\x04\x65\x0a\x05\x43\x5f\xd6\x16\x6c\xef\xa4\xff\xb8\x49\xeb\x20\xe6\x45\x99\xa3\x0e\x77\x53\xd1\xa6\x55\x9e\xaf\xba\x99\x83\x4c\x9d\xa4\x3f\x71\x05\xa6\x7a\x87\x58\x20\x51\x3a\xed\x2c\x49\xbc\x24\x0b\xb4\x19\x8c\xbd\x57\xa0\x94\x64\xb1\xd3\xb8\x40\x58\xd2\xda\xf1\xc4\xde\xd0\x17\xbe\x5e\x75\x14\xaa\x50\xa7\x9a\xb5\xef\xfb\xf2\xa9\xa4\xa7\x70\xe8\x30\x9a\x50\x67\x44\x95\x9f\xa4\xcb\x1d\xc8\xd3\xe3\x8e\x44\x65\x58\xcc\x9c\xa9\x88\xaa\x24\xf0\xf4\xd8\xbe\x1d\x85\x34\xb4\xdd\x94\xa0\x8b\x05\x8a\x53\x34\xdd\xe1\x54\x43\x9d\x4a\x11\x93\x53\x7a\x76\x20\xdf\xd0\x19\x7e\x4e\x59\xa2\xff\x3f\xe1\xac\x78\x38\x65\xdf\xda\xc9\x53\x48\xb0\x44\x96\x20\x8b\x57\xda\x34\xc1\xf2\x92\xd8\x12\x9d\x26\x4d\x8a\x6c\xd7\x48\xbd\x44\x6e\x56\x48\x5d\x7b\xc1\xfd\xa3\x5c\xda\xed\x95\xcd\x3e\xcb\xbd\xce\x2e\x04\x16\xfc\x01\xa1\x24\x42\x51\x92\xe7\xab\x66\x1b\x08\x13\x20\x52\xa2\xf2\x24\x28\xaf\x41\x99\x27\x64\x3b\x6b\x63\x5d\x47\xbc\x52\x65\xa5\xd6\x6b\x88\xa2\xc8\xeb\x8f\xc7\xac\x87\xcc\x4c\x4b\x43\xa9\x9c\x46\x3d\x44\x7b\x63\x6a\x28\xa1\xd7\xb8\x87\xb8\xed\xea\x43\x39\xbb\xec\x02\xe9\xda\x91\x35\x96\xb6\xcb\xbe\x87\x7e\xbf\x47\x0f\x62\xf6\x98\x3a\x49\xaf\x7e\x8e\xe0\x5f\x84\xc5\x98\xe7\x8d\x79\xef\x46\xaa\xd7\xa4\x87\x44\x1b\x84\x6d\xd7\xfa\x6d\x3a\x6a\x8d\xed\x43\xfe\xd1\xef\x29\x37\x06\x40\xf4\xcd\x9a\x76\x1a\x19\x51\x6f\x74\x19\xbe\x5e\xaf\x5b\x84\xe7\x5d\x70\x3b\x1f\x77\x77\xdf\x50\xeb\x7e\xff\xc7\x2e\x07\x61\xa1\x39\x00\xbd\x27\x8d\x48\x30\xc7\xd3\xd4\x54\xd3\x31\x85\xba\x74\xe4\x4c\x7d\x2a\x9e\xff\x57\x21\x4f\xe2\x79\xfc\x2a\x64\x42\xaa\xa1\x4e\x1d\xb9\x0a\x99\x9a\x2f\xd4\xbd\xe3\xef\x33\x4d\x48\xe5\x7f\x91\x74\x97\x21\xcc\xec\xae\xed\xcc\xbe\xa5\x31\x3b\xd0\x6c\x13\x52\x64\x8a\x2a\xb3\x27\x9d\x60\x29\x30\x26\x0a\x93\x08\xae\x73\x24\x12\xa1\x92\x08\x33\x1d\xf4\x19\x50\x26\x15\x12\x9d\xbb\x43\x82\x32\x16\x74\x6e\x5f\x01\x35\xef\x83\xec\xdb\x0c\x4f\xb5\xf1\x92\x8a\x42\xdb\xbd\x4d\x34\x4f\xd8\xfe\xd3\x51\x76\xe5\x51\xae\x44\x36\x23\x12\xe6\x88\x6c\x2f\x37\xda\xd4\x67\xde\xec\x6a\x1c\x9c\x53\xdc\xb5\x27\xbf\x1f\xab\xf0\x30\x4c\xaf\xcc\x29\xe5\x4d\x20\xeb\xae\x19\x2e\x53\xc8\x1a\x87\xe5\x95\xf5\xac\x3e\x3d\x54\xdb\x08\x40\xa7\xc0\x9b\xa7\x15\xfb\x58\x61\x23\x80\x9c\x82\x3e\x3c\xdf\xad\x18\x2b\x69\x14\x54\xc0\xc4\xb1\xcd\xd0\xdd\x70\x6d\x61\x19\x3e\x77\x0c\x43\xec\x1b\x00\xcd\xd2\xb1\x8b\xd6\x54\x7f\x41\x7d\xde\x6f\xee\xed\x45\x3a\x8b\x1c\x44\x1b\x60\xd8\xd3\x4b\xda\x23\x12\x03\x48\x03\x8d\x7b\xde\xe8\x52\xf6\xc0\x97\x68\xd2\x68\x9b\x88\x65\xc8\x4e\x94\x13\x9e\x58\x84\x3f\xa7\xfa\x4c\x58\x42\x14\x17\x2b\x48\x29\xe6\x09\xb4\x93\xfa\xaf\x28\xcc\xc9\x9f\xa2\x92\x0a\xe6\xa8\xeb\x8e\x80\x7c\x68\x20\x9a\x5f\xda\x53\xe3\xf6\x14\x0e\x79\xb0\xb9\x91\x0e\x5b\x5c\x09\xa1\xeb\xf0\xed\xb6\xed\x83\x7d\x3a\x40\xec\xc1\xf8\xe3\x22\xfb\x0b\x8d\x91\x49\x9c\x28\xb2\x1d\x68\x61\x91\x6d\x8d\x8f\x15\xd9\xd1\xf8\x7e\xf9\x2d\x6c\x5d\x47\xb9\xbd\xbc\xf8\xb8\x3d\xa5\x45\xe0\x81\xe4\x34\x01\xce\x30\x40\xea\x20\x2c\xf7\x91\x76\x2c\xb8\x58\xdd\xd2\xbf\x50\x57\xe2\x39\x2d\xa8\x92\x7b\xe7\xc9\x64\xc6\xab\x3c\xd1\x8d\x43\x98\x39\x9f\xa0\x07\xf5\x1c\xd5\xa3\x9e\xb1\xde\xfd\xf0\x4f\x33\x7c\xff\xf1\xee\x87\x6e\xb5\x93\x52\xb8\x4f\xb2\xd2\x02\x79\xa5\x46\xc1\xbf\x7d\x6b\xe0\xff\xfe\x56\xff\x79\x0e\xb8\x4e\x49\xe1\x74\x22\xe7\x8b\xb1\x31\xb2\xf8\xef\x3c\xf2\x27\x02\xf7\xf7\xec\x0b\x66\xfb\x9b\x61\xb0\x67\xea\x66\x4d\xdc\x66\x9a\xb9\xd9\xa1\xdb\x65\xa6\x12\xe8\x82\x71\xb1\x53\x57\xc6\x19\xc6\x4b\xbb\x20\x84\x14\xb1\xc7\x21\x1d\xee\xe8\xb6\x97\x9f\xd6\xd7\x49\x78\x87\xbb\xdb\x74\xa8\xd3\xfa\x7a\x38\x69\xdf\xd4\x6c\x86\x86\x9d\x4e\x0b\xaa\x98\xcd\x8b\x37\xa7\x26\x33\xc2\x16\x64\x9e\x23\x10\x69\x4f\xa8\x3e\x9e\xc3\x63\x46\xcd\x49\xee\x3c\xd7\xe3\xa7\xe5\x0f\x99\xba\x27\xe4\x72\xba\x65\x3e\x87\xe0\xa9\x59\xaf\xa2\x25\xae\xcc\xb1\xe8\x0e\x59\xee\x67\xfb\x61\x63\x14\x2a\x18\x77\xfb\xb0\xf7\x5c\x65\xfb\x3c\x29\xcb\xbc\x3d\x9b\x6b\xce\x87\x9a\x3a\xc5\xbe\x56\xd2\x8b\x1c\xdb\x79\x55\x67\x8f\x7c\x13\x65\x3e\xff\xd8\xfe\xfc\x23\xd5\xa9\xfd\xd7\xa7\xe7\xee\x55\x10\x53\xfb\xc1\xc9\xda\x92\x15\x7b\xdf\x9f\x34\x54\xed\x8f\x0d\x51\xd7\x0b\xa1\xef\xc2\x35\xff\xd8\xd9\x25\x72\xe8\x37\x9d\x56\x72\xce\x74\xcf\xdd\xee\x26\x9e\x43\xb9\xdd\x4d\x6c\xbe\x2b\x6a\xb7\x13\x03\x06\xd1\x71\x48\x07\x39\xba\x1f\xbb\x93\xb8\x39\x09\x65\xe0\xbb\x47\x7b\x4c\xd4\x6c\x04\x53\x94\xde\xd7\x82\x90\x54\x42\x57\x7e\x05\x61\x64\x81\xc9\xee\x8b\xf4\x23\x9d\x9b\x79\xb5\x72\xdd\xe5\xbb\xf9\x56\xcd\xfd\x91\x45\x33\xb5\x9b\x9d\x76\xeb\x83\x39\x0f\xbc\x5b\x6a\xb4\x6d\xb8\xfd\x00\xcf\x35\x78\x37\x38\x73\xdc\x3d\x67\xe0\x5b\x92\x5e\x5e\x57\x4f\xb8\x94\x6b\x7f\xe8\x55\x04\xec\xe5\x94\xf5\x84\x6c\xe7\x9c\x50\x73\xf9\x5a\x42\xf6\x72\xca\x74\xc8\xce\xce\xbe\x9e\xfd\x2f\x00\x00\xff\xff\xa6\x69\x1e\xd2\xa5\x3e\x00\x00")
+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")
 
 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: 
16037, mode: os.FileMode(420), modTime: time.Unix(1514922051, 0)}
+       info := bindataFileInfo{name: "wski18n/resources/en_US.all.json", size: 
14368, mode: os.FileMode(420), modTime: time.Unix(1515166936, 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 62caf09e..dcdd75e2 100644
--- a/wski18n/resources/en_US.all.json
+++ b/wski18n/resources/en_US.all.json
@@ -16,64 +16,60 @@
     "translation": "Info"
   },
   {
-    "id": "Missing cmd key",
-    "translation": "Missing 'cmd' input key"
+    "id": "msg_json_missing_cmd_key",
+    "translation": "JSON input data Missing 'cmd' key"
   },
   {
-    "id": "authorization `KEY`",
-    "translation": "authorization `KEY`"
+    "id": "msg_cmd_flag_namespace",
+    "translation": "namespace"
   },
   {
-    "id": "whisk API `HOST`",
-    "translation": "whisk API `HOST`"
+    "id": "msg_cmd_flag_auth_key",
+    "translation": "authorization `KEY`"
   },
   {
-    "id": "namespace",
-    "translation": "namespace"
+    "id": "msg_cmd_flag_api_host",
+    "translation": "whisk API `HOST`"
   },
   {
-    "id": "whisk API `VERSION`",
+    "id": "msg_cmd_flag_api_version",
     "translation": "whisk API `VERSION`"
   },
   {
-    "id": "Manifest file not found at path {{.projectPath}}.\n",
-    "translation": "Manifest file not found at path {{.projectPath}}.\n"
-  },
-  {
-    "id": "Missing {{.yaml}}/{{.yml}} file. Manifest file not found at path 
{{.projectPath}}.\n",
-    "translation": "Missing {{.yaml}}/{{.yml}} file. Manifest file not found 
at path {{.projectPath}}.\n"
+    "id": "msg_cmd_flag_key_file",
+    "translation": "path of the .key file"
   },
   {
-    "id": "Manifest file is not found at the path [{{.filePath}}].\n",
-    "translation": "Manifest file is not found at the path [{{.filePath}}].\n"
+    "id": "msg_cmd_flag_cert_file",
+    "translation": "path of the .cert file"
   },
   {
-    "id": "Using {{.manifestPath}} for deployment.\n",
-    "translation": "Using {{.manifestPath}} for deployment.\n"
+    "id": "msg_manifest_not_found",
+    "translation": "Manifest file not found at path [{{.path}}].\n"
   },
   {
-    "id": "Using {{.manifestPath}} for undeployment.\n",
-    "translation": "Using {{.manifestPath}} for undeployment.\n"
+    "id": "msg_using_manifest_deploy",
+    "translation": "Using [{{.path}}] for deployment.\n"
   },
   {
-    "id": "the runtime is not supported by Openwhisk platform.\n",
-    "translation": "the runtime is not supported by Openwhisk platform.\n"
+    "id": "msg_using_manifest_undeploy",
+    "translation": "Using [{{.path}}] for undeployment.\n"
   },
   {
-    "id": "WARNING: Runtime specified in manifest YAML {{.runtime}} does not 
match with action source file extension {{.ext}} for action {{.action}}.\n",
-    "translation": "WARNING: Runtime specified in manifest YAML {{.runtime}} 
does not match with action source file extension {{.ext}} for action 
{{.action}}.\n"
+    "id": "msg_runtime_mismatch",
+    "translation": "Runtime [{{.runtime}}] specified in manifest does not 
match with action source file extension [{{.ext}}] for action [{{.action}}].\n"
   },
   {
-    "id": "WARNING: Whisk Deploy has chosen appropriate runtime {{.runtime}} 
based on the action source file extension for that action {{.action}}.\n",
-    "translation": "WARNING: Whisk Deploy has chosen appropriate runtime 
{{.runtime}} based on the action source file extension for that action 
{{.action}}.\n"
+    "id": "msg_runtime_changed",
+    "translation": "Runtime changed to [{{.runtime}}] based on the action 
source file extension for action [{{.action}}].\n"
   },
   {
-    "id": "WARNING: Runtime specified in manifest YAML {{.runtime}} is not 
supported by OpenWhisk server for the action {{.action}}.\n",
-    "translation": "WARNING: Runtime specified in manifest YAML {{.runtime}} 
is not supported by OpenWhisk server for the action {{.action}}.\n"
+    "id": "msg_runtime_unsupported",
+    "translation": "Runtime [{{.runtime}}] specified in manifest is not 
supported for the action [{{.action}}].\n"
   },
   {
-    "id": "Unsupported runtime type, set to nodejs",
-    "translation": "Unsupported runtime type, set to nodejs"
+    "id": "msg_action_limit_ignored",
+    "translation": "Invalid action limit [{{.limit}}] in manifest is 
ignored.\n"
   },
   {
     "id": "The authentication key is not configured.\n",
@@ -315,30 +311,10 @@
     "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": "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": "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": "path of the .key file",
-    "translation": "path of the .key file"
-  },
-  {
-    "id": "path of the .cert file",
-    "translation": "path of the .cert file"
-  },
   {
     "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}}]."
diff --git a/wskprint/console.go b/wskprint/console.go
index 284827b0..ccf66539 100644
--- a/wskprint/console.go
+++ b/wskprint/console.go
@@ -19,6 +19,7 @@ package wskprint
 
 import (
        "fmt"
+       "github.com/apache/incubator-openwhisk-client-go/whisk"
        "github.com/apache/incubator-openwhisk-wskdeploy/wski18n"
        "github.com/fatih/color"
        "github.com/mattn/go-colorable"
@@ -26,17 +27,11 @@ import (
 
 const(
        STR_PREFIXED_MESSAGE = "%s: %s"
-
-       // IDs match those used to look up i18n strings from en_US.all.json
-       ID_I18B_PREFIX_ERROR    = "msg_prefix_error"
-       ID_I18B_PREFIX_WARNING  = "msg_prefix_warning"
-       ID_I18B_PREFIX_SUCCESS  = "msg_prefix_success"
-       ID_I18B_PREFIX_INFO     = "msg_prefix_info"
 )
 
 func PrintOpenWhiskError(message string) {
        outputStream := colorable.NewColorableStderr()
-       fmsg := fmt.Sprintf( STR_PREFIXED_MESSAGE, 
wski18n.T(ID_I18B_PREFIX_ERROR), message)
+       fmsg := fmt.Sprintf( STR_PREFIXED_MESSAGE, 
wski18n.T(wski18n.ID_MSG_PREFIX_ERROR), message)
        fmt.Fprintf(outputStream, color.RedString(fmsg))
 }
 
@@ -50,7 +45,7 @@ func PrintOpenWhiskFromError(err error) {
 
 func PrintOpenWhiskWarning(message string) {
        outputStream := colorable.NewColorableStdout()
-       fmsg := fmt.Sprintf( STR_PREFIXED_MESSAGE, 
wski18n.T(ID_I18B_PREFIX_WARNING), message)
+       fmsg := fmt.Sprintf( STR_PREFIXED_MESSAGE, 
wski18n.T(wski18n.ID_MSG_PREFIX_WARNING), message)
        fmt.Fprintf(outputStream, color.YellowString(fmsg))
 }
 
@@ -60,7 +55,7 @@ func PrintlnOpenWhiskWarning(message string) {
 
 func PrintOpenWhiskSuccess(message string) {
        outputStream := colorable.NewColorableStdout()
-       fmsg := fmt.Sprintf( STR_PREFIXED_MESSAGE, 
wski18n.T(ID_I18B_PREFIX_SUCCESS), message)
+       fmsg := fmt.Sprintf( STR_PREFIXED_MESSAGE, 
wski18n.T(wski18n.ID_MSG_PREFIX_SUCCESS), message)
        fmt.Fprintf(outputStream, color.GreenString(fmsg))
 }
 
@@ -70,7 +65,7 @@ func PrintlnOpenWhiskSuccess(message string) {
 
 func PrintOpenWhiskStatus(message string) {
        outputStream := colorable.NewColorableStdout()
-       fmsg := fmt.Sprintf( STR_PREFIXED_MESSAGE, 
wski18n.T(ID_I18B_PREFIX_INFO), message)
+       fmsg := fmt.Sprintf( STR_PREFIXED_MESSAGE, 
wski18n.T(wski18n.ID_MSG_PREFIX_INFO), message)
        fmt.Fprintf(outputStream, color.CyanString(fmsg))
 }
 
@@ -81,3 +76,7 @@ func PrintlnOpenWhiskStatus(message string) {
 func PrintlnOpenWhiskOutput(message string) {
        fmt.Println(message)
 }
+
+func PrintOpenWhiskDebugInfo(message string) {
+       whisk.Debug(whisk.DbgInfo, message)
+}


 

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