# subtag

> Language tag parser

Latest version **0.5.0** (published 2017-07-30) · ISC license · 0 weekly downloads

## Install

```sh
npm install subtag
pnpm add subtag
yarn add subtag
bun add subtag
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.5.0 |
| Published | 2017-07-30 |
| First published | 2017-04-30 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 7 |
| Author | Ryan Van Etten |
| Maintainers | ryanve |
| Keywords | i18n, lang, parser, region, subtag, subtags, language, languages, javascript, translation, localization, localisation, internationalization, internationalisation |

## Links

- npm: https://www.npmjs.com/package/subtag
- Repository: https://github.com/ryanve/subtag
- Issues: https://github.com/ryanve/subtag/issues
- npm.io page: https://npm.io/package/subtag

## Alternatives

- [messageformat](https://npm.io/package/messageformat.md) — 329.7K weekly downloads
- [@mintlify/scraping](https://npm.io/package/@mintlify/scraping.md) — 294.8K weekly downloads
- [@mintlify/previewing](https://npm.io/package/@mintlify/previewing.md) — 209.5K weekly downloads
- [@mintlify/prebuild](https://npm.io/package/@mintlify/prebuild.md) — 209.5K weekly downloads
- [@mintlify/link-rot](https://npm.io/package/@mintlify/link-rot.md) — 206.3K weekly downloads

## Recent versions

- 0.5.0 (latest) — 2017-07-30
- 0.4.0 — 2017-06-10
- 0.3.0 — 2017-05-01
- 0.2.0 — 2017-05-01
- 0.1.0 — 2017-04-30

## README

# subtag
[Language tag](https://www.w3.org/International/articles/language-tags/) parser. Parse language tags into subtags.

## api
- <b>`subtag(tag)`</b> parse tag into [subtags object](#objects)
- <b>`subtag.split(tag)`</b> split tag into [subtags array](#arrays)
- <b>`subtag.language(tag)`</b> get [primary language subtag](https://www.w3.org/International/articles/language-tags/#language)
- <b>`subtag.extlang(tag)`</b> get [extended language subtag](https://www.w3.org/International/articles/language-tags/#extlang)
- <b>`subtag.script(tag)`</b> get [script subtag](https://www.w3.org/International/articles/language-tags/#script)
- <b>`subtag.region(tag)`</b> get [region subtag](https://www.w3.org/International/articles/language-tags/#region)

### notes
- parsing is done via regex
- unpresent subtags will be an empty string
- separator can be dashes (standard) or underscores

## setup
### install via npm or yarn
```
npm install subtag --save
```

```
yarn add subtag
```

## usage
### `require` usage
```js
var subtag = require('subtag')
```

### `import` usage
```js
import subtag from 'subtag'
```

### examples

#### objects

```js
subtag('ja-JP') // {language: 'ja', extlang: '', script: '', region: 'JP'}
subtag('es-AR') // {language: 'es', extlang: '', script: '', region: 'AR'}
```

#### arrays

```js
subtag.split('yue') // ["yue"]
subtag.split('es-419') // ["es", "419"]
subtag.split('zh-Hant-HK') // ["zh", "Hant", "HK"]
subtag.split('en-90210') // ["en"] because 90210 is fake
```

#### subtags

```js
subtag.language('en') // 'en'
subtag.extlang('en') // ''
subtag.script('en') // ''
subtag.region('en') // ''

subtag.language('en-US') // 'en'
subtag.extlang('en-US') // ''
subtag.script('en-US') // ''
subtag.region('en-US') // 'US'

subtag.language('zh-yue') // 'zh'
subtag.extlang('zh-yue') // 'yue'
subtag.script('zh-yue') // ''
subtag.region('zh-yue') // ''

subtag.language('zh-Hans') // 'zh'
subtag.extlang('zh-Hans') // ''
subtag.script('zh-Hans') // 'Hans'
subtag.region('zh-Hans') // ''
```

## structure
[language<b>-</b>extlang<b>-</b>script<b>-</b>region<b>-</b>variant<b>-</b>extension<b>-</b>privateuse](https://www.w3.org/International/articles/language-tags/#rfc)

<table>
<tr>
  <th scope="col">type</th>
  <th scope="col">pattern</th>
  <th scope="col">convention</th>
</tr>
<tr>
  <td>language</td>
  <td>2-letter or 3-letter</td>
  <td>lowercase</td>
</tr>
<tr>
  <td>extlang</td>
  <td>3-letter</td>
  <td>lowercase</td>
</tr>
<tr>
  <td>script</td>
  <td>4-letter</td>
  <td>titlecase</td>
</tr>
<tr>
  <td>region</td>
  <td>2-letter or 3-number</td>
  <td>uppercase</td>
</tr>
</table>

### `.pattern`
Regex patterns are exposed for validation

```js
subtag.language.pattern.test('en') // true
subtag.language.pattern.test('ast') // true
subtag.language.pattern.test('fake') // false
subtag.extlang.pattern.test('yue') // true
subtag.script.pattern.test('Hans') // true
subtag.region.pattern.test('US') // true
subtag.region.pattern.test('005') // true
subtag.region.pattern.test('90210') // false
```

## compatibility
Works in Node.js and ES5+ browsers

---
_Source: https://npm.io/package/subtag · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
