---
title: utils.mergeI18n()
---
The `utils.mergeI18n()` function merges translation files from different designs.
When your design re-uses parts from other designs, it should provide
translation for those parts and any strings or options they use. Rather than
re-creating this content in your own design, you can pull it out of of the
design you are using the part from by importing the `i18n` named export, and
then use this function to merge it with your own translations.
## Signature
```js
Object mergeI18n({
Array designs,
Object options
})
```
## Use
In its simplest form, this function will receive an Array of translation data
(typically the `i18n` named export of a design) and merge them:
```js
import { i18n as brianI18n } from '@freesewing/brian'
import { i18n as simonI18n } from '../i18n/index.mjs'
// Merge translations
const i18n = mergeI18n([brianI18n, simonI18n])
```
This simple approach is typically what you want when you are extending a design
and you are keeping all the parts and options of the design you are extending.
In the example above, Simon extends Brian in this way.
## Configuration
If you don't want to keep all options or parts, you can further control how the
translation data will be merged by passing in a second parameter which is an
object holding the configuration that describes how to merge the translation
data.
The configuration object takes 3 top-level properties:
- `s`: Specifies configuration for how to merge the translation of strings (under `s` in the translation files)
- `p`: Specifies configuration for how to merge the part name translations (under `p` in the translation files)
- `o`: Specifies configuration for how to merge the option translations (under `p` in the translation files)
For **each of the `s`, `p`, and `o` keys** you can specify the following properties:
- `drop`: An Array with the keys of entries to not merge (drop). Keys that are not in this array will be merged.
- `keep`: An Array with the keys of entries to merge (keep). Keys that are not in this array will not be merged.
### Example
```js
import { i18n as brianI18n } from '@freesewing/brian'
import { i18n as otherI18n } from '../i18n/index.mjs'
// Merge translations
const i18n = mergeI18n(
[brianI18n, otherI18n],
{
p: {
keep: ['sleevecap'],
},
o: {
drop: ['waistEase', 'chestEase']
}
}
}
)
```
The function will check each key under the `s`, `p`, and `o` top-level keys in the translation files.
For each it will:
- Check whether there is a `drop` array configured. If there is, it will remove the entry if its key is included in the `drop` Array.
- Check whether there is a `keep` array configured. If there is, it will remove the entry if its key is not included in the `keep` Array.
If the entry is not explicitly removed by including it in `drop` or excluding it from a list set in `keep` it will be kept.