Metadata-Version: 2.1
Name: python-bcp47
Version: 0.0.4
Summary: Parser and validator for language codes (bcp47). Also exposes the IANA language code database
Home-page: https://github.com/phlax/bcp47
Author: Ryan Northey
Author-email: ryan@synca.io
License: GPL3
Project-URL: Source, https://github.com/phlax/python-bcp47/
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Description-Content-Type: text/markdown
Provides-Extra: test
Requires-Dist: flake8 (==2.4.1) ; extra == 'test'
Requires-Dist: pytest ; extra == 'test'
Requires-Dist: pytest-cov ; extra == 'test'
Requires-Dist: codecov ; extra == 'test'


[![Build Status](https://travis-ci.org/phlax/python-bcp47.svg?branch=master)](https://travis-ci.org/phlax/python-bcp47)
[![codecov](https://codecov.io/gh/phlax/python-bcp47/branch/master/graph/badge.svg)](https://codecov.io/gh/phlax/python-bcp47)


## python-bcp47


A validating parser for bcp47 language codes

Data taken from IANA http://www.iana.org/assignments/language-subtag-registry/language-subtag-registry

bcp47 spec https://tools.ietf.org/html/bcp47

useful reading: https://www.w3.org/International/articles/language-tags/index.en

`extension` and `private-use` tag types are not currently supported


### Python example

You can read the `languages`, `extlangs`, `scripts`, `variants`, `regions`, `grandfathereds`, and `redundants` language tag parts from `dicts` on the `bcp47` object.

They return `OrderedDicts` containing the IANA database information

```
>>> from bcp47 import bcp47

>>> list(bcp47["languages"].items())[:2]
[('aa', {'Subtag': 'aa', 'Description': ['Afar'], 'Added': '2005-10-16'}), ('ab', {'Subtag': 'ab', 'Description': ['Abkhazian'], 'Added': '2005-10-16', 'Suppress-Script': 'Cyrl'})]

>>>  list(bcp47["regions"].items())[:2]
[('AA', {'Subtag': 'AA', 'Description': ['Private use'], 'Added': '2005-10-16'}), ('AC', {'Subtag': 'AC', 'Description': ['Ascension Island'], 'Added': '2009-07-29'})]
`
```

You can create a language code tag as follows

```
>>> tag = bcp47(language="en", region="GB")
>>> tag
<bcp47.code.BCP47Code 'en-GB' />

>>> tag.language
'en'
>>> tag.region
'GB'
>>> str(tag)
'en-GB'

```

You can also pass a `string` or `list`  of `args` to create a tag

```
>>> bcp47("en-GB")
<bcp47.code.BCP47Code 'en-GB' />

>>> bcp47("en", "GB")
<bcp47.code.BCP47Code 'en-GB' />

```

Creating a tag with invalid or unrecognized parameters raises an `BCP47Exception`

```
>>> tag = bcp47(language="NOTALANGUAGE", region="GB")
Traceback (most recent call last):
...
BCP47Exception: Language 'NOTALANGUAGE' not recognized

>>> tag = bcp47("en-NOTAREGION")
Traceback (most recent call last):
...
BCP47Exception: Unrecognized tag part 'NOTAREGION'

```


