# FAQ

## Misc

### **i18next is awesome. How can I support the project?**

*There are a lot of ways to support us. Make a PR for a feature requested. Improve the documentation. Help others to get started. Spread the word.*

*You can support the future of i18next by using* [*Locize*](https://www.locize.com/?utm_source=i18next_com\&utm_medium=gitbook\&utm_campaign=how_to_faq)*. It’s our 'Localization as a Service' offering that funds the development of this open-source ecosystem. With our **Free plan**, you can now support the project even on smaller hobby sites at no cost, while benefiting from a professional translation workflow.*

## Loading issues

### **I don't see my translations!!!**

*Try setting* `debug: true` *on init and check the console log. There is rather sure a warning for unable to resolve the loadPath or invalid json. Check if the translation files are accessible via browser.*

## Translation

### **How to translate the resource files?**

<figure><img src="/files/I5hbvJu1jSArxeU9S1e8" alt=""><figcaption><p><a href="https://translate.i18next.com/">https://translate.i18next.com</a></p></figcaption></figure>

For a quick and dirty machine translation you may have a look at [this free translator](https://translate.i18next.com).\
But in general we suggest to use a smart Translation Management Service like [locize](https://www.locize.com?utm_source=i18next_com\&utm_medium=gitbook\&utm_campaign=how_to_faq) to translate your i18next resources.

For professional translations we advice you to work with [human translators](https://www.locize.com/docs/guides/working-with-translators?utm_source=i18next_com\&utm_medium=gitbook\&utm_campaign=how_to_faq). Or at least proofread the results coming from machine translations.

### **How do i know which plural suffix i have to use?**

*On the* [*plural page*](/translation-function/plurals.md) *there is a tool to get them.*

*Or try* [*translation-check*](https://github.com/locize/translation-check)*, it shows an overview of your translations in a nice UI. It shows also the appropriate plural forms.*

*Or you use a smart translation management system, like* [*locize*](https://www.locize.com?utm_source=i18next_com\&utm_medium=gitbook\&utm_campaign=how_to_faq)*.*

![](/files/-MX2s2PKNH3dqXxCShCx)

### **Why are my plural keys not working?**

*Are you seeing this warning in the development console?*

> i18next::pluralResolver: Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.

*With v21 we* streamlined the suffix with the one used in the [Intl API](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/PluralRules/PluralRules).

*In environments where the* [*Intl.PluralRules*](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules) *API is not available (like older Android devices), you may need to* [*polyfill*](https://github.com/eemeli/intl-pluralrules) *the* [*Intl.PluralRules*](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules) *API.*\
\&#xNAN;*In case it is not available it will fallback to the* [*i18next JSON format v3*](/misc/json-format.md#i-18-next-json-v3) *plural handling. And if your json is already using the new suffixes, your plural keys will probably not be shown.*

*tldr;*

```shell
npm install intl-pluralrules
```

```javascript
import 'intl-pluralrules'
```

### How should the language codes be formatted?

*Theoretically, you're not bound to any specific language code format, but if you want to make use of all the in built language features, like proper* [*pluralization*](/translation-function/plurals.md) *and correct* [*fallback resolution*](/principles/fallback.md#language-fallback)*, we strongly suggest to use the following iso norm (BCP 47 language tag):*

`lng-(script)-REGION-(extensions)`\
\
\&#xNAN;*i.e.*

* *en, en-US or en-GB*
* *zh, zh-HK or zh-Hant-HK*

*Other examples are listed here:* [*https://www.iana.org/assignments/language-tags/language-tags.xhtml*](https://www.iana.org/assignments/language-tags/language-tags.xhtml)

*And more information about the format can be found here:* [*https://www.w3.org/International/articles/language-tags/*](https://www.w3.org/International/articles/language-tags/)

{% hint style="info" %}
As soon as you use the dash character `-` the language codes are tried to be formatted with `Intl.getCanonicalLocales`.
{% endhint %}

## Process

### **How do I keep overview over my translation progress?**

*Try* [*translation-check*](https://github.com/locize/translation-check)*, it shows an overview of your translations in a nice UI. Check which keys are not yet translated.*

*If you need more, it might be time to use a* [*translation management tool*](https://www.locize.com?utm_source=i18next_com\&utm_medium=gitbook\&utm_campaign=how_to_faq)*.*

### **How to handle with changes in e2e tests?**

*For e2e tests a good tactic is to set language to* `cimode` *on init. This will set i18next to always return the key on calling* `i18next.t`*. Want to add the namespace to returned value change* `appendNamespaceToCIMode: true` *on init.*

### **How to use i18next in serverless environments?**

Due to how serverless functions work, you cannot guarantee that a cached version of your data is available. Serverless functions are short-lived, and can shut down at any time, purging any in-memory or filesystem cache. This may be an acceptable trade-off, but sometimes it isn't acceptable.

Because of this we suggest to not use a remote backend and to download the translations and package them with your serverless function.

{% hint style="success" %}
Read more about this topic, [here](https://www.locize.com/blog/i18n-serverless/?utm_source=i18next_com\&utm_medium=gitbook\&utm_campaign=how_to_faq).[<br>](https://www.locize.com/blog/how-does-server-side-internationalization-look-like/?utm_source=i18next_com\&utm_medium=gitbook\&utm_campaign=how_to_faq)[![](/files/G8IhXaGAAY4PMgUBvNfe)](https://www.locize.com/blog/i18n-serverless/?utm_source=i18next_com\&utm_medium=gitbook\&utm_campaign=how_to_faq)
{% endhint %}


---

# 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://www.i18next.com/how-to/faq.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.
