Skip to content
Strict and Simple Translation Solution for typescript
TypeScript
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github/workflows
src
tests
.gitignore
LICENSE
README.md
package-lock.json
package.json
tsconfig.json

README.md

ss-translations

Strict and Simple Translation Solution for typescript

Install

Use GitHub registry - details

> npm install @travelport-czech/ss-translations

Usage

import { translate } from './translate'
import { TranslationKeysBase } from './TranslationKeysBase'

enum TranslationEnum {
  Cat = 'Cat',
  Dog = 'Dog'
}

interface TranslationKeys extends TranslationKeysBase {
  readonly [TranslationEnum.Cat]: string,
  readonly [TranslationEnum.Dog]: string
}

const enTranslation: TranslationKeys = {
  Cat: 'cat',
  Dog: 'dog {?} {?}'
}

const csTranslation: TranslationKeys = {
  Cat: 'kočka',
  Dog: 'pes {?} {?}'
}

const translations = {
  en: enTranslation,
  cs: csTranslation
}

const t = (key: TranslationEnum, params: string[], language: string) => {
  return translate(key, params, language, translations)
}

const translationKey = TranslationEnum.Dog
const translationParams = ['Dr.', 'Jack']
const language = 'en'

const result = t(translationKey, translationParams, language)
// result: 'dog Dr. Jack'

Number of params {?} is checked:

const translationKey = TranslationEnum.Dog
const translationParams = ['Dr.']
const language = 'en'

const result = t(translationKey, translationParams, language)
// throws `Bad number of params for message 'dog {?} {?}'`

All translations must have all keys:

const skTranslation: TranslationKeys = {
  Cat: 'mačka'
}
// Property '[TranslationEnum.Dog]' is missing in type

No fails in translation key name:

const translationKey = 'Dok'
const translationParams = ['Dr.']
const language = 'en'

const result = t(translationKey, translationParams, language)
// Typescript parser: Argument of type '"Dok"' is not assignable to parameter of type 'TranslationEnum'.

No typing errors:

const skTranslation: TranslationKeys = {
  Cat: 'mačka',
  Dok: 'pes'
}
// Typescript parser: Property '[TranslationEnum.Dog]' is missing in type

No character collisions:

const skTranslation: TranslationKeys = {
  Cat: 'mačka',
  Dog: 'pe's'
}
// Typescript parser: ',' expected.

Usage with React

import { TranslatedText } from './TranslatedText'
import { TranslationKeysBase } from './TranslationKeysBase'
import * as React from 'react'

enum TranslationEnum {
  Cat = 'Cat',
  Dog = 'Dog'
}

interface TranslationKeys extends TranslationKeysBase {
  readonly [TranslationEnum.Cat]: string,
  readonly [TranslationEnum.Dog]: string
}

const enTranslation: TranslationKeys = {
  Cat: 'cat',
  Dog: 'dog {?} {?}'
}

const csTranslation: TranslationKeys = {
  Cat: 'kočka',
  Dog: 'pes {?} {?}'
}

const translations = {
  en: enTranslation,
  cs: csTranslation
}

interface Props {
  name: TranslationEnum,
  language: string
}

const Text: React.FunctionComponent<Props> = (props) => {
  const newProps = {
    ...props,
    translations
  }
  return TranslatedText(newProps)
}

<Text name={TranslationEnum.Dog} language="en">
    <span>Dr.</span>
    <span>Jack</span>
</Text>

// after render: dog <span>Dr.</span> <span>Jack</span>

Placeholders

  • {?} - parameter
  • {_} - fixed space

Export and Import to/from Excel

use tools repo ss-translations-tools

Prepare development environment

Authenticating to GitHub Packages see there

Clone project

> git clone ...

Install dependencies

> npm install

Run tests

> npm run test

Version release workflow

Version is automatically changed if the master branch is changed

  • Based on the commit messages, increment the version from the lastest release. If the string "BREAKING CHANGE" is found anywhere in any of the commit messages or descriptions the major version will be incremented.
  • If a commit message begins with the string "feat" then the minor version will be increased. This works for most common commit metadata for feature additions: "feat: new API" and "feature: new API".
  • All other changes will increment the patch version.
You can’t perform that action at this time.