Uploading source content to Transifex
After the strings have been marked for translation in the code, you can push them to Transifex. Strings can be pushed for translation by:
- using a CLI tool that will scan the code and extract strings wrapped using the Native SDK
- programmatically, making use of the SDK itself in order to push arbitrary strings, e.g. database content
Pushing from source code using the CLI tool
First make sure that @transifex/cli library is installed either locally using the command
$ npm install @transifex/cli --save
or globally using
$ npm install -g @transifex/cli
Then call the command line using:
$ npx txjs-cli push <SRC_FOLDER> --token=<PROJECT_TOKEN> --secret=<PROJECT_SECRET>
or for global installation
$ txjs-cli push <SRC_FOLDER> --token=<PROJECT_TOKEN> --secret=<PROJECT_SECRET>
Apart from passing credentials to the command line, you can also set them as environment variables:
$ export TRANSIFEX_TOKEN=<PROJECT_TOKEN>
$ export TRANSIFEX_SECRET=<PROJECT_SECRET>
$ txjs-cli push <SRC_FOLDER>
This command works in two phases:
- First, it goes through all the files of the current directory (and subdirectories) and collects all translatable strings in memory
- Then, it contacts Transifex and pushes the strings with all the metadata to the project (and resource) that is associated with the token you have given during setup
This way, the source strings reach Transifex and become available for translation.
Push command options
Here is a full list of command line options:
USAGE
$ txjs-cli push [PATTERN] [--dry-run] [--fake] [-v] [--purge] [--no-wait] [--token <value>] [--secret <value>] [--append-tags <value>] [--with-tags-only <value>]
[--without-tags-only <value>] [--cds-host <value>] [--do-not-keep-translations] [--override-tags] [--parser auto|i18next|txnativejson] [--key-generator source|hash]
ARGUMENTS
PATTERN [default: **/*.{js,jsx,ts,tsx,html,vue,pug,ejs}] file pattern to scan for strings
FLAGS
-v, --verbose verbose output
--append-tags=<value> append tags to strings
--cds-host=<value> CDS host URL
--do-not-keep-translations remove translations when source strings change
--dry-run dry run, do not apply changes in Transifex
--fake do not push content to remote server
--key-generator=<option> [default: source] use hashed or source based keys
<options: source|hash>
--no-wait disable polling for upload results
--override-tags override tags when pushing content
--parser=<option> [default: auto] file parser to use
<options: auto|i18next|txnativejson>
--purge purge content on Transifex
--secret=<value> native project secret
--token=<value> native project public token
--with-tags-only=<value> push strings with specific tags
--without-tags-only=<value> push strings without specific tags
DESCRIPTION
Detect and push source content to Transifex
Parse .js, .ts, .jsx, .tsx and .html files and detect phrases marked for
translation by Transifex Native toolkit for Javascript and
upload them to Transifex for translation.
To push content some environment variables must be set:
TRANSIFEX_TOKEN=<Transifex Native Project Token>
TRANSIFEX_SECRET=<Transifex Native Project Secret>
(optional) TRANSIFEX_CDS_HOST=<CDS HOST>
or passed as --token=<TOKEN> --secret=<SECRET> parameters
Default CDS Host is https://cds.svc.transifex.net
Examples:
txjs-cli push -v
txjs-cli push src/
txjs-cli push /home/repo/src
txjs-cli push "*.js"
txjs-cli push --dry-run
txjs-cli push --fake -v
txjs-cli push --no-wait
txjs-cli push --key-generator=hash
txjs-cli push --append-tags="master,release:2.5"
txjs-cli push --with-tags-only="home,error"
txjs-cli push --without-tags-only="custom"
txjs-cli push --token=mytoken --secret=mysecret
txjs-cli push en.json --parser=i18next
txjs-cli push en.json --parser=txnativejson
TRANSIFEX_TOKEN=mytoken TRANSIFEX_SECRET=mysecret txjs-cli push
Pushing content using the SDK
The @transifex/native
library can be used to push any content that could be coming from various sources, such as custom files, database etc.
Here is an example on how this can be done:
const { tx } = require('@transifex/native');
tx.init({
token: 'token',
secret: 'secret',
});
await tx.pushSource({
'mykey': {
string: 'My string',
meta: {
context: 'content', // optional
developer_comment: 'developer comment', // optional
character_limit: 10, // optional
tags: ['tag1', 'tag2'], // optional
occurrences: ['file.jsx', 'file2.js'], // optional
},
}
});
In case you are managing multiple Native projects, you can create multiple instances, for example:
const { createNativeInstance } = require('@transifex/native');
const tx = createNativeInstance({
token: 'token',
secret: 'secret',
});
await tx.pushSource({
'mykey': {
string: 'My string',
meta: {
context: 'content', // optional
developer_comment: 'developer comment', // optional
character_limit: 10, // optional
tags: ['tag1', 'tag2'], // optional
occurrences: ['file.jsx', 'file2.js'], // optional
},
}
});
Updated almost 2 years ago