# How to make metadata changes

## Introduction

These steps outline how to edit the metadata for the phone number library to fix
problems with validation or formatting.

Note that we are currently not accepting validation, formatting, or timezone
metadata pull requests, but you may use these guidelines to create changes in
your own fork until we fix issues upstream. Please [file a corresponding
issue](CONTRIBUTING.md#checklist-before-filing-an-issue) with us.

You can read more about the pull request [contribution
guidelines](CONTRIBUTING.md#pull-requests).

## Details

### Edit the data

Edit the appropriate files:

*   `resources/PhoneNumberMetadata.xml` for normal validation / formatting
    issues
*   `resources/ShortNumberMetadata.xml` for short-code data
*   `resources/PhoneNumberAlternateFormats.xml` for alternate patterns for phone
    number matching
*   `resources/geocoding/xx` for geocoding data (where `xx` is the language code
    you wish to edit)
*   `resources/carrier/xx` for carrier mapping data

Note:

*   To track provenance for your own maintenance needs, consider including
    sources for data where appropriate
*   If multiple countries share a country calling code, check all of them are
    updated. Formatting rules will only be listed by the country with
    `mainCountryForCode` set to `true`.
*   Details on each field in the xml file can be found at the top of the file
    and in `resources/phonemetadata.proto`.

### Generate data files

#### Java

```
ant -f java/build.xml junit
```

This will generate new binary files under
`java/libphonenumber/src/com/google/i18n/phonenumbers/data`,
`geocoder/src/com/google/i18n/phonenumbers/carrier/data`, and
`geocoder/src/com/google/i18n/phonenumbers/geocoding/data`.

#### Javascript

```
ant -f java/build.xml build-js-metadata
```

This will generate new js metadata files; you should also now compile the
changes, as per the instructions in `javascript/README`.

#### C++

See the [C++
README](http://github.com/googlei18n/libphonenumber/blob/master/cpp/README)
instructions for how to build and run C++. You should build it with
`USE_LITE_METADATA` set to `ON` as well as `OFF`, which will generate both a
`metadata.cc` and a `metadata_lite.cc` file.

### Test changes

#### Java

Build a jar:

```
ant -f java/build.xml jar
```

Then [run your own demo](run-java-demo.md) and test your changes are as
expected.

#### Javascript

See `javascript/README` for how to run the demo page in your browser.
