# Namespaces

Namespaces are a feature in i18next internationalization framework which allows you to separate translations that get loaded into multiple files.

While in a smaller project it might be reasonable to just put everything in one file you might get at a point where you want to break translations into multiple files. Reasons might be:

* You start loosing the overview having more than 300 segments in a file
* Not every translation needs to be loaded on the first page, speed up load time

> We recommend you to create multiple smaller namespaces.

## Semantic reasons

Often you wish to separate some segments out because they belong together. We do this in most of our projects, eg.:

* **common.json** -> Things that are reused everywhere, eg. Button labels 'save', 'cancel'
* **validation.json** -> All validation texts
* **glossary.json** -> Words we want to be reused consistent inside texts [sample usage](http://i18next.com/translate/nesting/)

## Technical / editoral reasons

More often you don't want to load all the translations upfront or at least reduce the amount loaded. This reason often goes hand in hand with the one translation file gets to large and you start loosing the overview scrolling through hundred of text fragments.

* namespace per view/page
* namespace per application section / feature set (admin area, ...)
* namespace per module which gets lazy loaded (single page applications)

## Configuration / Usage:

### locize / i18next

```javascript
i18next.init({
  ns: ['common', 'moduleA', 'moduleB'],
  defaultNS: 'moduleA'
}, (err, t) => {
  i18next.t('myKey'); // key in moduleA namespace (defined default)
  i18next.t('myKey', { ns: 'common' }); // key in common namespace
  i18next.t('common:myKey'); // key in common namespace
});

// load additional namespaces after initialization
i18next.loadNamespaces('myNamespace', (err, t) => { /* ... */ });
```

There are advanced options like:

* calling t function with multiple namespaces to look a key up
* default fallback namespaces to lookup keys in

more details: [locize / i18next](https://www.i18next.com/principles/namespaces)

### locizify

```javascript
locizify.init({
  namespace: 'myNamespace'
  ns: ['common', 'myNamespace'] // -> add additional namespaces to load
});
```

You can access a different namespace by setting the attribute i18next-options:

```markup
<div i18next-options='{"ns": "common"}'>
  <p>different namespace common is used</p>
  <p>all the way down</p>
</div>
```

Optionally you can set locizify to create a namespace per location/route.

```javascript
locizify.init({
  namespaceFromPath: true
});
```

more details: [locizify](https://github.com/locize/locizify#set-different-namespaces)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs-old.locize.com/more/namespaces.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
