om / potrans
Command line tool for translate Gettext with Google Translator API or Deepl API
Installs: 4 331
Dependents: 1
Suggesters: 0
Security: 0
Stars: 90
Watchers: 8
Forks: 31
Open Issues: 3
Requires
- deeplcom/deepl-php: ^1.2
- gettext/gettext: ^5.6
- google/cloud-translate: ^1.12
- symfony/cache: ^6.0
- symfony/console: ^6.0
- vlucas/phpdotenv: ^5.6
Requires (Dev)
- nette/tester: ^2.4
README
PO file translator
Potrans it's PHP command line tool for automatic translation of Gettext PO file with Google Translator or DeepL Translator.
Google Translator
bin/potrans google --help
Description:
Translate PO file with Google Translator API
Usage:
google [options] [--] <input> [<output>]
Arguments:
input Input PO file path
output Output PO, MO files directory [default: "~/Downloads"]
Options:
--from=FROM Source language (default: en) [default: "en"]
--to=TO Target language (default: cs) [default: "cs"]
--force Force re-translate including translated sentences
--wait=WAIT Wait between translations in milliseconds [default: false]
--credentials=CREDENTIALS Path to Google Credentials file [default: "./credentials.json"]
--project=PROJECT Google Cloud Project ID [default: project_id from credentials.json]
--location=LOCATION Google Cloud Location [default: "global"]
--translator[=TRANSLATOR] Path to custom translator instance
--cache|--no-cache Load from cache or not
-h, --help Display help for the given command. When no command is given display help for the list command
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi|--no-ansi Force (or disable --no-ansi) ANSI output
-n, --no-interaction Do not ask any interactive question
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Example commands
Follow command will translate whole content of tests/example-cs_CZ.po
from English (default) to Czech language (default):
bin/potrans google tests/example-cs_CZ.po ~/Downloads \
--credentials=your-credentials-file.json
You can also change source and target language with --form
and --to
parametters:
bin/potrans google tests/example-cs_CZ.po ~/Downloads \
--credentials=your-credentials-file.json \
--from=en \
--to=de
Google Translate API Pricing
Google Translate API pricing is based on usage. Translation usage is calculated in millions of characters (M), where 1 M = 10^6 characters. For more information, see the Pricing FAQ.
Getting Google Translation Credentials
- Open Google Cloud Console website
- Create a new Project (or select existing one)
- Search for translate API and enable it then
- Go to IAM & Admin > Service Accounts and click to + Create service account
- Chose Service account name and Service account ID and click to Create and continue
- Grant this service account access to project and add follow roles Cloud Translation API Editor, AutoML Editor
- Create new Keys and download credentials JSON file
You can watch it here:
DeepL Translator
bin/potrans deepl --help
Description:
Translate PO file with DeepL Translator API
Usage:
deepl [options] [--] <input> [<output>]
Arguments:
input Input PO file path
output Output PO, MO files directory [default: "~/Downloads"]
Options:
--from=FROM Source language (default: en) [default: "en"]
--to=TO Target language (default: cs) [default: "cs"]
--force Force re-translate including translated sentences
--wait=WAIT Wait between translations in milliseconds [default: false]
--apikey=APIKEY Deepl API Key
--translator[=TRANSLATOR] Path to custom translator instance
--cache|--no-cache Load from cache or not
-h, --help Display help for the given command. When no command is given display help for the list command
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi|--no-ansi Force (or disable --no-ansi) ANSI output
-n, --no-interaction Do not ask any interactive question
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Example commands
bin/potrans deepl tests/example-cs_CZ.po ~/Downloads --apikey=123456
DeepL Translator API pricing
DeepL translator API pricing is based on monthly subscription. There is max. 500,000 characters/month for free.
For more information visit https://www.deepl.com/pro-api
Getting Api Key
- Register free Account
- Visit Account summary
- Search for Authentication Key for DeepL API
Environment variables
You can use environment variables to set DeepL API key.
DEEPL_API_KEY=your-deepl-api-key
Install
You can add om/potrans
to you PHP project like follow:
composer require --dev om/potrans
or you can clone this repository and then run ./bin/potrans
Custom translator
If you need to use a custom translator that behaves differently than the original translator.
You have the option to use the --translator
parameter like follow:
./bin/potrans deepl ./tests/example-cs_CZ.po ~/Downloads \
--translator=path/to/my/CustomTranslator.php \
--apikey=123456
PHP file should contain implementation of Translator
interface and should return new instance:
<?php class CustomTranslator implements \potrans\translator\Translator { // TODO add your code } return new CustomTranslator();
You can find an example custom translator in the file DeepLTranslatorEscaped.php
Potrans development
- Install composer
curl -s http://getcomposer.org/installer | php
- Run
composer install
for install all dependencies - Install PHP Curl extension (curl and json PHP extensions)
For more information about Composer visit: https://getcomposer.org
If you had "command not found: potrans"
return, just run the command like this: php bin/potrans
and will run without problems.
Troubleshooting
cURL error: SSL certificate issue (Google Translate only)
You may encounter a problem caused by cURL like follow:
cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html)
There is missing issuer certificate cacert.pem
file and curl won't verify SSL requests:
- Download http://curl.haxx.se/ca/cacert.pem
- Save is somewhere e.g.
/usr/local/etc/cacert.pem
- Update your
php.ini
with following:
curl.cainfo = "/usr/local/etc/cacert.pem" openssl.cafile = "/usr/local/etc/cacert.pem"
You can verify it with phpinfo()
or php --info
. Read more detailed instruction here.