Giter Site home page Giter Site logo

ladjs / mandarin Goto Github PK

View Code? Open in Web Editor NEW
13.0 2.0 1.0 593 KB

Automatic i18n phrase translation using Google Translate

License: MIT License

JavaScript 98.83% Shell 1.17%
i18n translate translation mandarin i10n localization localize google api service

mandarin's Introduction

mandarin

build status code style styled with prettier made with lass license

Automatic i18n markdown translation and i18n phrase translation using Google Translate

Table of Contents

Install

npm:

npm install mandarin

Requirements

Redis

You will need to have Redis installed in order for caching to work properly.

If you do not plan to use Redis, then set redis: false as an option.

Google Application Credentials

You will also need Google Application Credentials, and you will need to set them as environment variables (e.g. GOOGLE_APPLICATION_CREDENTIALS=/home/user/Downloads/service-account-file.json).

For more information on Google Application credentials, see https://cloud.google.com/docs/authentication/getting-started#setting_the_environment_variable.

Usage

  1. Implement Mandarin and pass it an instance of i18n

    const Mandarin = require('mandarin');
    const I18N = require('@ladjs/i18n');
    
    const i18n = new I18N();
    
    // you can also pass a custom `logger` option (it defaults to `console`)
    const mandarin = new Mandarin({
    
     // REQUIRED:
     i18n
    
     // OPTIONAL:
     // logger: console,
    
     // OPTIONAL (see index.js for defaults):
     // redis: ...
    
     // OPTIONAL (see index.js for defaults):
     // redisMonitor: ...
    
     // OPTIONAL:
     // see all commented options from this following link:
     // <https://googleapis.dev/nodejs/translate/5.0.1/v2_index.js.html>
     //
     // clientConfig: {},
    
     // OPTIONAL (see index.js for defaults):
     // Files to convert from `index.md` to `index-es.md`
     // Or `README.md` to `README-ZH.md` for example
     // <https://github.com/sindresorhus/globby>
     //
     // markdown: ... (note we expose `Mandarin.DEFAULT_PATTERNS` for you)
    });
    
    //
    // Translate Phrases
    //
    // with async/await
    (async () => {
      try {
        await mandarin.translate();
      } catch (err) {
        console.log(err);
      }
    })();
    
    // with promises and then/catch
    mandarin
      .translate()
      .then(() => {
        console.log('done');
      })
      .catch(console.error);
    
    // with callbacks
    mandarin.translate(err => {
      if (err) throw err;
      console.log('done');
    });
    
    //
    // Translate Markdown Files
    //
    // with async/await
    (async () => {
      try {
        await mandarin.markdown();
      } catch (err) {
        console.log(err);
      }
    })();
    
    // with promises and then/catch
    mandarin
      .markdown()
      .then(() => {
        console.log('done');
      })
      .catch(console.error);
    
    // with callbacks
    mandarin.markdown(err => {
      if (err) throw err;
      console.log('done');
    });
  2. This assumes that you have locale files already and a default locale file (e.g. ./locales/en.json with phrases that need translated to other languages you support). Based off the defaults from i18n, you would automatically get your en.json file translated to the locales es (Spanish) and zh (Chinese).

  3. Follow the "Before you begin" steps here https://cloud.google.com/translate/docs/basic/setup-basic (basically you download a JSON file after creating a Google Cloud Project with Cloud Translation API enabled).

  4. Specify the path to the JSON file and run your script that uses mandarin:

GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/[FILE_NAME].json" node app.js

Contributors

Name Website
Nick Baugh http://niftylettuce.com/

License

MIT © Nick Baugh

mandarin's People

Contributors

niftylettuce avatar shaunwarman avatar titanism avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

shaunwarman

mandarin's Issues

Add IORedis caching support

Caching should occur using ioredis with simple get and set approach.

Prefix should be mandarin_, and rev-hash could be used to create hashes for long strings.

This would prevent unnecessary API requests to Google Translate (and save a ton of money).

Improve remark parsing for Markdown

Right now it parses all individual nodes, but we should probably parse paragraphs, headers, links, and blocks of text instead to properly respond with a formatted translation string to use. Otherwise translations aren't too accurate right now because of context.

Google translate written over manual corrections

Thanks for creating 'mandarin', it's been super to get a quick translation of .json files.

The ability to use the redis cache is also great. I'm seeing the following and not sure if it's part of the expected behaviour or not:

When I run mandarin the first time everything is correctly generated, then I make manually modifications in the results produced by Google Translate (fr.json...), then run mandarin again and it writes over the manual modifications.

My set up may be stale so I can try again with a fresh installation of Redis, but some clarification around that would be great. I'll be happy to add anything to the README or code through a PR if needed.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.