Semi-automated Text Translator for Websites and Apps

Overview

attranslate - Semi-automated Text Translator for Websites and Apps

macOS/Ubuntu/Windows: Actions Status

attranslate is a semi-automated tool for "synchronizing" translation-files. attranslate is optimized for fast and smooth rollouts in hectic project environments, even if you already have many translations. Optionally, attranslate works with automated translation-services. For example, let's say that a translation-service achieves 80% correct translations. Thanks to attranslate, a quick fix of the remaining 20% may be faster than doing everything by hand. Other than that, attranslate supports purely manual translations and even file-format-conversions without changing the language.

Why attranslate?

In contrast to paid services, a single developer can integrate attranslate in a matter of minutes. In contrast to many other tools, attranslate can operate on the very same translations-files that you are already using. This is possible because attranslate operates on your file in a surgical way, with as little changes as possible. See tools comparison for an overview about translation-tools.

Features

Cross-platform Support

attranslate is designed to translate any website or app with any toolchain. attranslate works for i18n/JavaScript-frameworks/Android/iOS/Flutter/Ruby/Jekyll/Symfony/Django/WordPress and many other platforms. To make this possible, attranslate supports the following file formats:

  • Flat or nested JSON
  • Flat or nested YAML
  • PO/POT-files
  • Android-XML or any other XMLs with text-contents
  • iOS-Strings
  • Flutter-ARB
  • CSV (e.g. for Google Docs or Microsoft Excel)

Preserve Manual Translations

attranslate recognizes that automated translations are not perfect. Therefore, whenever you are unhappy with the produced results, attranslate allows you to simply overwrite texts in your target-files. attranslate will never ever overwrite a manual correction in subsequent runs.

Optionally Overwrite Outdated Translations

attranslate is capable of detecting outdated translations. Normally, overwriting outdated translations helps to ensure the freshness of translations. However, in hectic project environments, it might be easier to leave outdated translations as-is. Therefore, attranslate leaves outdated translations as-is unless you explicitly configure it to overwrite them.

Available Services

attranslate supports the following translation-services:

  • manual: Translate texts manually by entering them into attranslate.
  • Google Cloud Translate
  • sync-without-translate: Does not change the language. This can be useful for converting between file formats, or for maintaining region-specific differences.

High Performance

If some texts have already been translated, then attranslate won't translate them again. This does not only speedup your workflow, but also saves cost for paid translation-services.

Detect Common Mistakes

Although (some) humans have excellent translation-skills, humans are notoriously bad at detecting "trivial" mistakes like outdated, missing, stale or duplicate translations. In contrast, attranslate detects such "trivial" mistakes with 100% reliability.

Usage Examples

Translating a single file is as simple as the following line:

attranslate --srcFile=json-simple/en.json --srcLng=en --srcFormat=nested-json --targetFile=json-simple/de.json --targetLng=de --targetFormat=nested-json --service=manual

If you have multiple target-languages, then you will need multiple calls to attranslate. You can write something like the following script to avoid unnecessary duplication:

# This example translates an english JSON-file into spanish, chinese and german. It uses Google Cloud Translate.
BASE_DIR="json-advanced"
SERVICE_ACCOUNT_KEY="gcloud/gcloud_service_account.json"
COMMON_ARGS=( "--srcLng=en" "--srcFormat=nested-json" "--targetFormat=nested-json" "--service=google-translate" "--serviceConfig=$SERVICE_ACCOUNT_KEY" "--cacheDir=$BASE_DIR" "--matcher=i18next" )

# Run "npm install --global attranslate" before you try this example.

# Use "--overwriteOutdated=false" if you introduce attranslate into a hectic project-environment,
# or if you expect that some project collaborators won't even use attranslate because they have no time for "learning" it.
attranslate --overwriteOutdated=false --srcFile=$BASE_DIR/en/fruits.json --targetFile=$BASE_DIR/es/fruits.json --targetLng=es "${COMMON_ARGS[@]}"

# Use "--overwriteOutdated=true" if you want to prevent outdated translations.
attranslate --overwriteOutdated=true --srcFile=$BASE_DIR/en/fruits.json --targetFile=$BASE_DIR/zh/fruits.json --targetLng=zh "${COMMON_ARGS[@]}"

# Use "--overwriteOutdated=true" if you have no clue about the target-language and no capacity for manual reviews.
attranslate --overwriteOutdated=true --srcFile=$BASE_DIR/en/fruits.json --targetFile=$BASE_DIR/de/fruits.json --targetLng=de "${COMMON_ARGS[@]}"

Similarly, you can use attranslate to convert between file-formats. See sample scripts for more examples.

Usage Options

Run attranslate --help to see a list of available options:

Usage: attranslate [options]

Options:
  --srcFile <sourceFile>              The source file to be translated
  --srcLng <sourceLanguage>           A language code for the source language
  --srcFormat <sourceFileFormat>      One of "flat-json", "nested-json",
                                      "yaml", "po", "xml", "ios-strings",
                                      "arb", "csv"
  --targetFile <targetFile>           The target file for the translations
  --targetLng <targetLanguage>        A language code for the target language
  --targetFormat <targetFileFormat>   One of "flat-json", "nested-json",
                                      "yaml", "po", "xml", "ios-strings",
                                      "arb", "csv"
  --service <translationService>      One of "manual",
                                      "sync-without-translate",
                                      "google-translate"
  --serviceConfig <serviceKey>        supply configuration for a translation
                                      service (either a path to a key-file or
                                      an API-key)
  --cacheDir <cacheDir>               The directory where a translation-cache
                                      is expected to be found (default: ".")
  --matcher <matcher>                 One of "none", "icu", "i18next",
                                      "sprintf" (default: "none")
  --overwriteOutdated <true | false>  If true, overwrite outdated translations
                                      in subsequent runs (default: "false")
  --keySearch <regExp>                A regular expression to replace
                                      translation-keys (can be used for
                                      file-format conversions) (default: "x")
  --keyReplace <string>               The replacement for occurrences of
                                      keySearch (default: "x")
  -v, --version                       output the version number
  -h, --help                          display help for command

Integration Guide

Firstly, ensure that nodejs is installed on your machine. Once you have nodejs, you can install attranslate via:

npm install --global attranslate

Alternatively, if you are a JavaScript-developer, then you should install attranslate via:

npm install --save-dev attranslate

Next, you should write a project-specific script that invokes attranslate for your specific files. See sample scripts for guidance on how to translate your project-specific files.

Service Configuration

If you use attranslate with an automated translation-service, then you need to configure an API-key. API-keys can be obtained for free, but you might need to register an account. See service config for guidance on how to obtain API-keys for specific services.

Once you have an API-key, pass your API-key to attranslate via the --serviceConfig flag.

Interpolations and Matchers

⚠️ For many projects, attranslate works out of the box without configuring any matchers. Therefore, we recommend skipping this section unless you encounter unexpected problems that are hard to fix manually.

Many websites/apps use interpolations to insert dynamic values into translations. For example, an interpolation like Your name is {{name}} might be replaced with Your name is Felix.

To help with interpolations, attranslate provides so-called matchers. A matcher replaces interpolations with placeholders before they are sent to a translation service. attranslate offers the following matchers for different styles of interpolations:

  • ICU: Matches ICU interpolations like {name}.
  • i18n: Matches i18next interpolations like {{name}}.
  • sprintf: Matches sprintf-style interpolations like %s.
  • None: Doesn't match any interpolations.

You can select a matcher with the --matcher option.

Translation Cache

⚠️ If --overwriteOutdated is set to false, then attranslate does not generate any translation-cache.

The purpose of the translation-cache is to detect outdated translations, such that outdated translations can be overwritten in subsequent runs. The translation-cache consists of attranslate-cache-*-files. It is allowed to delete a translation-cache at any time. However, to make it work smoothly, you should put your attranslate-cache-*-files under version control.

Continuous Integration

To detect common mistakes like missing translations, it is advisable to run attranslate via continuous integration (CI). For example, the command git diff --exit-code can be used to trigger a CI failure whenever a file has been modified by attranslate.

Comments
  • Arrays are converted to objects

    Arrays are converted to objects

    Describe the bug Currently when translating JSON files from source to target, it converts any arrays inside the source JSON files to object representations of such like so from:

    "address": {
        "lines": [
            "Line 1",
            "Line 2",
            "Line 3"
        ]
    },
    

    to

    "address": {
      "lines": {
        "0": "Line 1",
        "1": "Line 2",
        "2": "Line 3"
      }
    },
    

    To Reproduce

    1. Create a new source JSON file containing an array
    2. Convert the JSON file to another language

    Expected behavior The expected behavior would be that the datatype stays the same.

    Files This could be done using any simple JSON file containing the above example content.

    Additional context N/A

    opened by dwknippers 14
  • Azure Info

    Azure Info

    Great project!

    I'm trying to configure attranslate to work with the Azure translator. Unfortunately, I'm not getting very far and I can't find any documentation that explains how to configure it.

    Any pointers / documentation would be appreciated.

    Thanks!

    opened by MuchoDart 14
  • Bump lodash from 4.17.20 to 4.17.21

    Bump lodash from 4.17.20 to 4.17.21

    Bumps lodash from 4.17.20 to 4.17.21.

    Commits
    • f299b52 Bump to v4.17.21
    • c4847eb Improve performance of toNumber, trim and trimEnd on large input strings
    • 3469357 Prevent command injection through _.template's variable option
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the Security Alerts page.
    dependencies 
    opened by dependabot[bot] 4
  • Bump prettier from 2.1.2 to 2.2.1

    Bump prettier from 2.1.2 to 2.2.1

    Bumps prettier from 2.1.2 to 2.2.1.

    Release notes

    Sourced from prettier's releases.

    2.2.1

    🔗 Changelog

    2.2.0

    diff

    🔗 Release Notes

    Changelog

    Sourced from prettier's changelog.

    2.2.1

    diff

    Fix formatting for AssignmentExpression with ClassExpression (#9741 by @sosukesuzuki)

    // Input
    module.exports = class A extends B {
      method() {
        console.log("foo");
      }
    };
    

    // Prettier 2.2.0 module.exports = class A extends ( B ) { method() { console.log("foo"); } };

    // Prettier 2.2.1 module.exports = class A extends B { method() { console.log("foo"); } };

    2.2.0

    diff

    🔗 Release Notes

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 4
  • Preserve XML comments and XML multi-line-breaks

    Preserve XML comments and XML multi-line-breaks

    This does not work with our fork of https://github.com/Leonidas-from-XIV/node-xml2js. It might be doable to add this functionality to the fork. However, perhaps it would be better to migrate to a well-maintained XML-library.

    opened by fkirc 4
  • Bump @types/node from 14.14.0 to 14.14.2

    Bump @types/node from 14.14.0 to 14.14.2

    Bumps @types/node from 14.14.0 to 14.14.2.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 3
  • Bump node-fetch from 2.6.5 to 3.2.3

    Bump node-fetch from 2.6.5 to 3.2.3

    Bumps node-fetch from 2.6.5 to 3.2.3.

    Release notes

    Sourced from node-fetch's releases.

    v3.2.3

    3.2.3 (2022-03-11)

    Bug Fixes

    v3.2.1

    3.2.1 (2022-03-01)

    Bug Fixes

    v3.2.0

    3.2.0 (2022-01-20)

    Features

    • export Blob, File and FormData + utilities (#1463) (81b1378)

    v3.1.1

    Security patch release

    Recommended to upgrade, to not leak sensitive cookie and authentication header information to 3th party host while a redirect occurred

    What's Changed

    New Contributors

    ... (truncated)

    Commits
    Maintainer changes

    This version was pushed to npm by node-fetch-bot, a new releaser for node-fetch since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 2
  • Bump @types/inquirer from 7.3.3 to 8.1.3

    Bump @types/inquirer from 7.3.3 to 8.1.3

    Bumps @types/inquirer from 7.3.3 to 8.1.3.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 2
  • Bump tmpl from 1.0.4 to 1.0.5

    Bump tmpl from 1.0.4 to 1.0.5

    Bumps tmpl from 1.0.4 to 1.0.5.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the Security Alerts page.
    dependencies 
    opened by dependabot[bot] 2
  • Bump @types/jest from 26.0.15 to 27.0.2

    Bump @types/jest from 26.0.15 to 27.0.2

    Bumps @types/jest from 26.0.15 to 27.0.2.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 2
  • Bump @types/node-fetch from 2.5.7 to 3.0.3

    Bump @types/node-fetch from 2.5.7 to 3.0.3

    Bumps @types/node-fetch from 2.5.7 to 3.0.3.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 2
  • Error 16 UNAUTHENTICATED when invoking Google Cloud Translate

    Error 16 UNAUTHENTICATED when invoking Google Cloud Translate

    Describe the bug I get an UNAUTHENTICATED error, despite having registered for Google Cloud Translate API and getting a key. I suspect my json file has the wrong structure.

    To Reproduce A description of what the bug is. When I attempt to run the script below

    #!/bin/bash
    set -e # abort on errors
    
    # This example translates an english JSON-file into spanish, chinese and german. It uses Google Cloud Translate.
    BASE_DIR="static/locales"
    SERVICE_ACCOUNT_KEY="gcloud_translation_key.json"
    COMMON_ARGS=( "--srcLng=en" "--srcFormat=nested-json" "--targetFormat=nested-json" "--service=google-translate" "--serviceConfig=$SERVICE_ACCOUNT_KEY" )
    
    # install attranslate if it is not installed yet
    attranslate --version || npm install -g attranslate
    
    attranslate --srcFile=$BASE_DIR/en/translation.json --targetFile=$BASE_DIR/de/translation.json --targetLng=de "${COMMON_ARGS[@]}"
    

    I get the following error

    1.8.1
    Invoke 'google-translate' from 'en' to 'de' with 8 inputs...
    An error occurred:
    16 UNAUTHENTICATED: Failed to retrieve auth metadata with error: key must be a string, a buffer or an object
    Error: 16 UNAUTHENTICATED: Failed to retrieve auth metadata with error: key must be a string, a buffer or an object
    

    I suspect it is because my gcloud_translation_key.json file is malformed

    {
      "key": "<the key I got from 'Enable APIs and services' on GCloud for translation>",
      "project_id": "<my project id>"
    }
    

    Expected behavior I expect the translated files to be output.

    Files I've added the script and config I use inline.

    Additional context Nothing else.

    Thank you in advance for your help.

    opened by Jan-Jan 1
  • Double quotes in Localizable.strings

    Double quotes in Localizable.strings

    Describe the bug If I run script to convert android xml to iOS Localizable.strings I have double quotes:

    Android source: "Incorrect id"

    Actual results: "incorrect_id" = ""Incorrect id.";

    Expect results: "incorrect_id" = "Incorrect id. ";

    To Reproduce

    ANDROID_EN="app/src/main/res/external/strings/values/strings.xml"
    iOS_EN="/Base.lproj/Localizable.strings"
    
    ANDROID_TO_iOS=( "--srcFormat=xml" "--targetFormat=ios-strings" "--service=sync-without-translate" "--cacheDir=android")
    
    attranslate "${ANDROID_TO_iOS[@]}" --srcFile=$ANDROID_EN --targetFile=$iOS_EN --srcLng="en" --targetLng="en"
    
    

    Expected behavior Expect results: "incorrect_id" = "Incorrect id. ";

    opened by yoman07 1
  • cant translate pot file en to es?

    cant translate pot file en to es?

    https://gist.github.com/0b4ecd4380f47794c6f5a04f54d85325

    attranslate --srcFile=wp-erp/i18n/languages/erp.pot --srcLng=en --srcFormat=po --targetFile=wp-erp/i18n/languages/erp-es.pot --targetLng=es --targetFormat=po --service=google-translate --serviceConfig=traducciones-352415-79659df1c6f1.json

    and show me this

    Bypass 7129 strings because they are empty...
    Invoke 'google-translate' from 'en' to 'es' with 11 inputs...
    Add 7140 new translations
    Write target '/root/attranslate/wp-erp/i18n/languages/erp-es.pot'
    
    

    https://gist.github.com/1b715430007ff5aec99af3594a3b7010

    tnks for your help in this one

    im using before this one https://github.com/sourcecodeit/po-gtranslator

    opened by johnfelipe 1
  • xml translate not works with specific type of xml file

    xml translate not works with specific type of xml file

    https://github.com/statisticssweden/PxWeb/blob/master/PXWeb/Resources/Languages/pxlang.xml

    attranslate --srcFile=pxlang.xml --srcLng=en --srcFormat=xml --targetFile=pxlang-es.xml --targetLng=es --targetFormat=xml --service=google-translate --serviceConfig=traducciones-352415-79659df1c6f1.json
    
    
    Bypass 1285 strings because they are empty...
    Add 1285 new translations
    Write target '/root/attranslate/pxlang-es.xml'
    

    how can solve this?

    opened by johnfelipe 5
  • NOT BUG: how can translate all folder with yml files to other folder with another lang?

    NOT BUG: how can translate all folder with yml files to other folder with another lang?

    SNAG-0095

    al files is in en folder then i need all files to es folder

    with will be command for google and azure?

    GOOGLE WORKS:

    attranslate --srcFile=general.yml --srcLng=en --srcFormat=yaml --targetFile=general-es.yml --targetLng=es --targetFormat=yaml --service=google-translate --serviceConfig=traducciones-352415-79659df1c6f1.json

    opened by johnfelipe 6
Owner
Felix Kirchengast
Cross-Platform App Developer https://gist.github.com/fkirc
Felix Kirchengast
A Translator App Which is Build using Flutter, Speech To Text, Google ML Kit, Google Translator and Text To Speech.

AI Translator This is a Translator App Which is Build using Flutter, Speech To Text, Google ML Kit, Google Translator and Text To Speech. Download App

null 4 Jul 16, 2022
Flying Fish is full-stack Dart framework - a semi-opinionated framework for building applications exclusively using Dart and Flutter

Flying Fish is full-stack Dart framework - a semi-opinionated framework for building applications exclusively using Dart and Flutter.

Flutter Fish 3 Dec 27, 2022
Utils and widgets to make your flutter apps and websites fully responsive.

Super Responsive A responsive library for Flutter that is easy to use and easy to read makes your app look great on all devices makes your app more re

Gustavo Guzmán 5 Sep 12, 2022
Data Migrator - provide a universal translator for data by being portable, diverse, and efficient in migrating and converting data across discrete schemas

Data Migrator - provide a universal translator for data by being portable, diverse, and efficient in migrating and converting data across discrete schemas

Tanner Meade 77 Jan 2, 2023
Multi Translator build with Flutter, It developed with DDD (Domain Driven Design) principles.

Multi Translator App An app utilizes to translate any text to multiple languages. Features Localization Multiple Translation Single Translation Deep L

Selim Üstel 7 Dec 27, 2022
Automated blinds system using Raspberry PI and Flutter

Sunrise An automated blinds system using Raspberry PI controlled by an UI-friendly mobile application. This product will help the user be more comfort

Zoghlami Khalil 0 May 14, 2022
Chance Dart is a free Open Source project that lets you create random strings, integers, and other things to help with tiresome tasks, especially when building automated tests or wherever else you require anything random.

Chance Dart Random generator helper for Dart Homepage • Documentation Overview Chance Dart is a free Open Source project that lets you create random s

Ayotomide 55 Dec 27, 2022
Auto is a Flutter automated testing framework developed for testers.

Auto Auto-A simpler Flutter UI automation test solution. No need to write any code Recording test scripts is very simple Mult

null 19 Oct 12, 2022
Generate gherkin automated tests

flutter_gherkin_automated Generate gherkin automated tests Preliminary: integration tests performance vs. development Original flutter_gherkin BDD tes

Vladimir E. Koltunov 5 Jul 7, 2022
A flutter app for a wordpress websites with clean and elegant design. This app is available in free and pro version. You can choose to use the one you need.

?? Get Flutter for Wordpress Flutter for wordpress is currently available in free and pro version: Flutter for Wordpress Flutter for Wordpress Pro Bea

mcyos118 18 Dec 13, 2022
Masked text field - A flutter package for masked text field for formet your text and good UI

Masked Text Field Masked Text Field Features A package for masked text field for

Alok Dubey 7 Sep 4, 2022
Text analyzer that extracts tokens from text for use in full-text search queries and indexes.

Tokenize text, compute document readbility and compare terms in Natural Language Processing. THIS PACKAGE IS PRE-RELEASE, and SUBJECT TO DAILY BREAKIN

GM Consult Pty Ltd 5 Dec 12, 2022
A Dart package to web scraping data from websites easily and faster using less code lines.

Chaleno A flutter package to webscraping data from websites This package contains a set of high-level functions that make it easy to webscrap websites

António Nicolau 30 Dec 29, 2022
A powerful extended official text for Flutter, which supports Speical Text(Image,@somebody), Custom Background, Custom overFlow, Text Selection.

Extended official text to build special text like inline image or @somebody quickly,it also support custom background,custom over flow and custom selection toolbar and handles.

FlutterCandies 509 Jan 4, 2023
A cross-platform Flutter widget for displaying websites. Optional navigation buttons.

Overview Gives you a cross-platform Flutter widget for displaying websites and other web content. Licensed under the Apache License 2.0. Links Github

Dint 11 Oct 23, 2022
Link-extractor - A Simple utility for extracting media urls from different websites

Link Extractor A Simple utility for extracting media urls from differennt social

Zain Ul Hassan 1 Feb 5, 2022
A Flutter package to parse text and make them into linkified text widget

?? Flutter Parsed text A Flutter package to parse text and extract parts using predefined types like url, phone and email and also supports Regex. Usa

Fayeed Pawaskar 213 Dec 27, 2022
Rich Text renderer that parses Contentful Rich Text JSON object and returns a renderable Flutter widget

Contentful Rich Text Renderer for Flutter Rich Text renderer that parses Contentful Rich Text field JSON output and produces a Flutter Widget tree tha

Kumanu 45 Nov 10, 2022
A Flutter application implementing AR core, Text-to-speech, and Speech-to-text technologies.

ar_x_ai A Flutter application implementing AR core, Text to speech and Speech to text technologies. Getting Started This project is a starting point f

Alston Fernandes 1 Dec 17, 2021
LinkWell is a Text widget that highlight all the links in the text which then navigates the user to the URL when tapped

LinkWell LinkWell is Text Plugin that detects URLs and Emails in a String and when tapped opens in user browsers, linkwell GitHub ScreenShots Basic Us

Samuel Ezedi 31 Sep 27, 2022