Skip to content
Language detector that works universally (browser + server) - Meant to be used with a universal framework, such as Next.js
TypeScript JavaScript
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.idea Add badges + configure CC test reporter id Dec 30, 2019
examples/with-next Demo now use v2.0.0 + improve demo and specify which version of @unly… Jan 9, 2020
src Resolve best allowed (instead of using fallback lang when most prefer… Jan 9, 2020
.codeclimate.yml Initial commit Dec 29, 2019
.eslintignore Initial commit Dec 29, 2019
.eslintrc.yml Initial commit Dec 29, 2019
.gitignore Initial commit Dec 29, 2019
.nvmrc Initial commit Dec 29, 2019
.travis.yml Initial commit Dec 29, 2019
CHANGELOG.md release v2.0.0 Jan 9, 2020
LICENSE Initial commit Dec 29, 2019
README.md Fix doc typo (summary) Jan 9, 2020
babel.config.js Initial commit Dec 29, 2019
buildspec.yml Add badges + configure CC test reporter id Dec 30, 2019
jest.config.js Initial commit Dec 29, 2019
package.json release v2.0.0 Jan 9, 2020
tsconfig.json Fix TS compilation output (/lib) Dec 30, 2019
yarn.lock

README.md

Maintainability Test Coverage

Universal Language Detector

Language detector that works universally (browser + server)

  • On the server, will rely on "cookies > accept-language header"
  • On the browser, will rely on "cookies > navigator settings"

Meant to be used with a universal framework, such as Next.js

Note that this lib helps resolving the language (fr, en, es, etc.), not the locale (fr-FR, en-US, etc.)

It is not out of scope though, PR are welcome to support universal locale detection.



Demo

Live demo with the Next.js example

Getting started

yarn install @unly/universal-language-detector

Use:

import universalLanguageDetect from '@unly/universal-language-detector';

OR

import { universalLanguageDetect } from '@unly/universal-language-detector';

Examples

See our example featuring the Next.js framework


API

Extensive API documentation can be found in the source code documentation

Only the most useful API methods are documented here, the other aren't meant to be used, even though they may be

universalLanguageDetect

Detects the language used, universally.

Parameters:

  • supportedLanguages: string[];
  • fallbackLanguage: string;
  • acceptLanguageHeader?: string | undefined;
  • serverCookies?: object | undefined;
  • errorHandler?: ErrorHandler | undefined;

Example:

const lang = universalLanguageDetect({
  supportedLanguages: SUPPORTED_LANGUAGES, // Whitelist of supported languages, will be used to filter out languages that aren't supported
  fallbackLanguage: FALLBACK_LANG, // Fallback language in case the user's language cannot be resolved
  acceptLanguageHeader: get(req, 'headers.accept-language'), // Optional - Accept-language header will be used when resolving the language on the server side
  serverCookies: cookies, // Optional - Cookie "i18next" takes precedence over navigator configuration (ex: "i18next: fr"), will only be used on the server side
  errorHandler: (error) => { // Optional - Use you own logger here, Sentry, etc.
    console.log('Custom error handler:');
    console.error(error);
  },
});

Contributing

We gladly accept PRs, but please open an issue first so we can discuss it beforehand.

Working locally

yarn start # Shortcut - Runs linter + build + tests in concurrent mode (watch mode)

OR run each process separately for finer control

yarn lint
yarn build
yarn test

Test

yarn test # Run all tests, interactive and watch mode
yarn test:once
yarn test:coverage

Versions

SemVer

We use Semantic Versioning for this project: https://semver.org/. (vMAJOR.MINOR.PATCH: v1.0.1)

  • Major version: Must be changed when Breaking Changes are made (public API isn't backward compatible).
    • A function has been renamed/removed from the public API
    • Something has changed that will cause the app to behave differently with the same configuration
  • Minor version: Must be changed when a new feature is added or updated (without breaking change nor behavioral change)
  • Patch version: Must be changed when any change is made that isn't either Major nor Minor. (Misc, doc, etc.)

Releasing and publishing

yarn releaseAndPublish # Shortcut - Will prompt for bump version, commit, create git tag, push commit/tag and publish to NPM

yarn release # Will prompt for bump version, commit, create git tag, push commit/tag
npm publish # Will publish to NPM

Don't forget we are using SemVer, please follow our SemVer rules.

Pro hint: use beta tag if you're in a work-in-progress (or unsure) to avoid releasing WIP versions that looks legit


Changelog

Our API change (including breaking changes and "how to migrate") are documented in the Changelog.

See changelog


License

MIT


This project was generated using https://github.com/UnlyEd/boilerplate-generator/tree/master/templates/typescript-OSS

You can’t perform that action at this time.