@cometchat/chat-uikit-react-native
Version:
Ready-to-use Chat UI Components for React Native
99 lines (78 loc) • 2.73 kB
text/typescript
import de from './resources/de/translation.json';
import en from './resources/en/translation.json';
import es from './resources/es/translation.json';
import fr from './resources/fr/translation.json';
import hi from './resources/hi/translation.json';
import hu from './resources/hu/translation.json';
import lt from './resources/lt/translation.json';
import ms from './resources/ms/translation.json';
import pt from './resources/pt/translation.json';
import ru from './resources/ru/translation.json';
import sv from './resources/sv/translation.json';
import zh from './resources/zh/translation.json';
import zhTw from './resources/zh-tw/translation.json';
import ja from './resources/ja/translation.json';
import ko from './resources/ko/translation.json';
import tr from './resources/tr/translation.json';
import nl from './resources/nl/translation.json';
import it from './resources/it/translation.json';
import { Language } from './type';
export type TranslationKey = keyof typeof en;
const defaultTranslations = {
de,
en,
es,
fr,
hi,
hu,
lt,
ms,
pt,
ru,
sv,
zh,
ja,
ko,
tr,
nl,
it,
"zh-tw":zhTw,
"en-IN" : en,
"en-GB" : en,
"en-US" : en,
} as const;
export type SupportedLanguage = keyof typeof defaultTranslations;
export interface CustomTranslations {
[languageCode: string]: {
[key: string]: string;
};
}
export const translate = (
language: Language,
key: string,
customTranslations?: CustomTranslations,
fallbackLanguage: Language = 'en'
): string => {
if (customTranslations?.[language]?.[key]) {
return customTranslations[language][key];
}
const defaultTranslation: { [key: string]: string } = defaultTranslations[language as SupportedLanguage] as { [key: string]: string };
if (defaultTranslation && key in defaultTranslation) {
return defaultTranslation[key];
}
if (language !== fallbackLanguage && customTranslations?.[fallbackLanguage]?.[key]) {
return customTranslations[fallbackLanguage][key];
}
if (language !== fallbackLanguage) {
const fallbackTranslation: { [key: string]: string } = defaultTranslations[fallbackLanguage as SupportedLanguage] as { [key: string]: string };
if (fallbackTranslation && key in fallbackTranslation) {
return fallbackTranslation[key];
}
}
console.warn(`Missing translation for key: ${key} in language: ${language} and fallback: ${fallbackLanguage}`);
return key;
};
export const getAvailableLanguages = (): SupportedLanguage[] => {
return Object.keys(defaultTranslations) as SupportedLanguage[];
};
export default defaultTranslations;