As you can learn in Command-Line Options, it’s possible to provide additional parameters using the -p option.

Such parameters can be used the same way as any other parameter (${parameter_name}), but they are evaluated statically before the configuration JSON is parsed. Therefore, it’s possible to use them to alter the behavior signifficantly.

Dynamic Upload & Download 🔗

E.g., you can re-use the same configuration to upload different sources:

{ 

  "upload": { 
    "files": "${uploadPath}/src/locales/**/translations.json",
    "path": "${uploadPath}", 
    // ... 
  } 
  
}

Now, you can just invoke our CLI like this:

localazy upload -p uploadPath:app
localazy upload -p uploadPath:library1
localazy upload -p uploadPath:library2

Similar approach can be applied to the download section to select on where to store the resulting files or how to filter them based on specific parameters.

In a way, using additional parameters like this is similar to using groups, but you don’t need to define the corresponding section beforehand.

Changing Parameters Dynamically 🔗

From the latest CLI version (1.6.5+), it’s possible to define parameters as strings even for boolean and numberic ones allowing to use a construction like this:

{

  "upload": {
    "folder": "${folder}",
    "deprecate": "${deprecate}",
    "filterSource": "${filterSource}",
    "features": ["${feature1}", "${feature2}"],
    // ...
  }

}

Now, you can just invoke our CLI:

localazy upload -p folder:. -p deprecate:none -p filterSource:true -p feature1:filter_untranslated -p feature2:

Please note that empty items in features are filtered out and not evaluated allowing to use additional parameters in described way.

Whole JSON Blocks 🔗

As additional parameters are evaluated before the JSON is parsed, you can use them for an ugly hacks like this one:

{

  "upload": {
    ${json1}
    "type": "json",
    "files": "locales/*.json"
  }

}

Now, by invoking our CLI with the command below, you can provide a part of the configuration JSON dynamically.

localazy upload -p 'json1:"importAsNew": true,'

However, this approach means that the input configuration file is no longer a valid JSON.

Default Values 🔗

To specify default value for the external parameter, use the ${paramName|Default value} format.

{ 
  "download": { 
    "includeSourceLang": "${includeSourceLang|false}" 
  } 
}

You can invoke the CLI as localazy download to download translations only, or as localazy download -p includeSourceLang:true to download also the source language.