ru-RU was missing most AI-chat keys, so the chat/typing widgets rendered mixed-language (some keys fell back to en-US). Fill the full AI-chat string set in ru-RU and document the maintenance policy. - ru-RU/translation.json: add the 24 missing AI-chat keys (labels, typing indicator, Ask-AI widget, public-share, error messages); keep the typing keys grouped; existing translations untouched. - i18n.ts: add a policy comment near fallbackLng — en-US is the source of truth; en-US + ru-RU are fully maintained; the other 10 locales intentionally rely on the en-US fallback until contributed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
38 lines
1.5 KiB
TypeScript
38 lines
1.5 KiB
TypeScript
import i18n from "i18next";
|
|
import { initReactI18next } from "react-i18next";
|
|
import Backend from "i18next-http-backend";
|
|
|
|
i18n
|
|
// load translation using http -> see /public/locales (i.e. https://github.com/i18next/react-i18next/tree/master/example/react/public/locales)
|
|
// learn more: https://github.com/i18next/i18next-http-backend
|
|
// want your translations to be loaded from a professional CDN? => https://github.com/locize/react-tutorial#step-2---use-the-locize-cdn
|
|
.use(Backend)
|
|
// pass the i18n instance to react-i18next.
|
|
.use(initReactI18next)
|
|
// init i18next
|
|
// for all options read: https://www.i18next.com/overview/configuration-options
|
|
.init({
|
|
// i18n maintenance policy:
|
|
// - en-US is the source of truth for all UI strings (keys are the English text).
|
|
// - en-US and ru-RU are the fully-maintained locales; in particular, the
|
|
// AI-chat string set is kept complete in both so the UI never renders
|
|
// mixed-language (no per-key en-US fallback within a single widget).
|
|
// - The other 10 locales (fr-FR, de-DE, es-ES, nl-NL, ja-JP, zh-CN, ko-KR,
|
|
// pt-BR, it-IT, uk-UA) are partial and intentionally rely on the
|
|
// `fallbackLng: "en-US"` fallback below until translations are
|
|
// contributed (e.g. via Crowdin).
|
|
fallbackLng: "en-US",
|
|
debug: false,
|
|
showSupportNotice: false,
|
|
load: 'currentOnly',
|
|
|
|
interpolation: {
|
|
escapeValue: false, // not needed for react as it escapes by default
|
|
},
|
|
react: {
|
|
useSuspense: false,
|
|
}
|
|
});
|
|
|
|
export default i18n;
|