npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

nuxt-i18n-easy

v1.5.1

Published

Automated multilingual text translator for Nuxt i18n module

Downloads

488

Readme

nuxt-i18n-easy

npm version npm downloads Github Actions CI Codecov Codacy Badge DeepScan grade License

Automatic multilingual translator for nuxt-i18n

Introduction

The I18n is great.

But what about translating an existing project with hundreds of buttons, prompts and tips in multiple languages?

:scream: Looks intimidating?

:angel: No need to be afraid, nuxt-i18n-easy will save us.

Features

  • Based on nuxt-i18n lazy-load translations
  • Uses existing strings as object properties
  • Recursively scans the source code directories in the project
  • Finds the strings that need translation
  • Translates found strings using Google translate API
  • Checks that the found strings and properties of the i18n config match
  • Writes found values to i18n configuration files
  • Adds syntactic sugar
  • In general, makes life much easier :bath::zzz:

short demo

Setup

1. Add nuxt-i18n-easy module to your project

npm install nuxt-i18n-easy # or yarn add nuxt-i18n-easy

2. Add nuxt-i18n & nuxt-i18n-easy to the modules section of nuxt.config.js

  modules: [
    'nuxt-i18n',
    'nuxt-i18n-easy',
  ]

3. Add i18n & i18nEasy to the root of nuxt.config.js

export default {
  i18n: {
    locales: [
      {
        code: 'en',
        name: 'English',
        file: 'en.js'
      },
      {
        code: 'ru',
        name: 'Русский',
        file: 'ru.js'
      }
    ],
    lazy: true,
    langDir: 'lang/',
    defaultLocale: 'en'
  },
  i18nEasy: {
    directories: [                         // default directories for search
      './layouts',
      './pages',
      './components'
    ],
    files: ['*.vue', '*.js'],              // default files
    sourceLanguage: 'en',                  // default source language
  },
...

4. Create a directory i18n.langDir and configuration files

mkdir lang
touch lang/en.js
touch lang/ru.js

5. Buy me a coffee :coffee:


Usage

1. Strings to be translated may be designated as follows:

classic:

$t('Welcome')

with String.prototype extension:

'Inspire'.tr()

or with directive v-rt

<p v-tr> I will be translated </p>

:sparkles: Remember syntactic sugar, right?

2. Then run the translate script

npx translate # or yarn run translate

By default script will process all i18n.locales defined in nuxt.config.js To select a specific locale, send its code as the first parameter

npx translate ru # or yarn run translate ru

3. As a result, we will get ready-to-use localization files in the i18n.langDir directory

cat lang/ru.js

export default {
  Welcome: 'Добро пожаловать'
  Inspire: 'Вдохновлять',
  'I will be translated': 'Я буду переведен',
}

Something needs to be fixed here, but in general this is what we need to start

:trollface: Give it to content managers, and go to rest

4. If for some reason the code parameter is not suitable for specifying the target language, use translationCode instead

  i18n: {
    locales: [
      {
        code: 'ua',
        name: 'Українська',
        file: 'ua.js',
        translationCode: uk
      },

:u6709: A complete list of supported codes is here

5. Build you project

npm run dev # or yarn run dev

6. Launch your favorite browser, follow the link given by NUXT + one of specified locale.code. For example

http://localhost:3000/ru

:blue_book: For more details refer to nuxt-i18n module documentation

7. Buy me coffee with doughnut :coffee::doughnut:


Q&A

Q. And what we see in the original localization file?

cat lang/en.js

export default {
  Welcome: 'Welcome'
  Inspire: 'Inspire',
  'I will be translated': 'I will be translated',
}

:lotus_position: Looks like some kind of Bhagavad Gita... I am that I am... Hoommm... Stop! We need to go on

A. It should be so. This is because we are not using slug variables.

Q. What about the inevitable changes in the source files?

sed -i 's/I will be translated/I will be translated again/' pages/index.vue
npx translate
cat lang/en.js

export default {
  Welcome: 'Welcome',
  Inspire: 'Inspire',
  'I will be translated': 'I will be translated', // unused
  'I will be translated again': 'I will be translated again'
}
A. As we can see, the key-value pair is in the same place, just marked as unused in the comment

Q. What about data loss in the event of a terrible crash?

ls lang/
en.js  en.js.2020-09-10-15-49  ru.js  ru.js.2020-09-10-15-49
A. Dont worry, everything is as it should be here too. Before changing the configuration files, a backup is made.

:broom: Dont forget to clean there at least sometimes

Q. Why are you drinking so much coffee?

A. I drink not only coffee. Also, you can buy me a beer :beer::beer:

Google Translation API

By default, the app uses Google translation API V1. It's free, but undocumented and has traffic restrictions. To switch to the official V2 version of the API, you need to specify your project identifier googleProjectId in i18nEasy section

Development

  • Setup this repository
git clone https://github.com/sergey-demidov/nuxt-i18n-easy.git
cd nuxt-i18n-easy
npm install # or yarn
npm link
cd ../amazing-nuxt-project
npm link nuxt-i18n-easy

:nut_and_bolt::hammer: Enjoy


Known Issues

  • The v-tr directive does not support nested tags
  • Google translate API v1 has a limit on the number of requests.

If you see something like this

 ERROR Request failed with status code 429

just try again later


If you really read up to here

There, under the hood is one more feature. You may use String.lp() as shortcut to nuxt-i18n's localePath()

For example

<nuxt-link :to="'/app/profile'.lp()">Profile</nuxt-link>
// equal to
<nuxt-link :to="localePath('/app/profile')">Profile</nuxt-link>

License

MIT License

Copyright (c) Sergey Demidov [email protected]