matrix-react-sdk
Version:
SDK for matrix.org using React
116 lines (115 loc) • 5.77 kB
TypeScript
import React from "react";
import { TranslationKey as _TranslationKey } from "matrix-web-i18n";
import { TranslationStringsObject } from "@matrix-org/react-sdk-module-api";
import type Translations from "./i18n/strings/en_EN.json";
export { normalizeLanguageKey, getNormalizedLanguageKeys } from "matrix-web-i18n";
export interface ErrorOptions {
cause: unknown | undefined;
}
/**
* Used to rethrow an error with a user-friendly translatable message while maintaining
* access to that original underlying error. Downstream consumers can display the
* `translatedMessage` property in the UI and inspect the underlying error with the
* `cause` property.
*
* The error message will display as English in the console and logs so Element
* developers can easily understand the error and find the source in the code. It also
* helps tools like Sentry deduplicate the error, or just generally searching in
* rageshakes to find all instances regardless of the users locale.
*
* @param message - The untranslated error message text, e.g "Something went wrong with %(foo)s".
* @param substitutionVariablesAndCause - Variable substitutions for the translation and
* original cause of the error. If there is no cause, just pass `undefined`, e.g { foo:
* 'bar', cause: err || undefined }
*/
export declare class UserFriendlyError extends Error {
readonly translatedMessage: string;
constructor(message: TranslationKey, substitutionVariablesAndCause?: Omit<IVariables, keyof ErrorOptions> | ErrorOptions);
}
export declare function getUserLanguage(): string;
/**
* A type representing the union of possible keys into the translation file using `|` delimiter to access nested fields.
* @example `common|error` to access `error` within the `common` sub-object.
* {
* "common": {
* "error": "Error"
* }
* }
*/
export type TranslationKey = _TranslationKey<typeof Translations>;
export declare function _td(s: TranslationKey): TranslationKey;
/**
* The value a variable or tag can take for a translation interpolation.
*/
type SubstitutionValue = number | string | React.ReactNode | ((sub: string) => React.ReactNode);
export interface IVariables {
count?: number;
[key: string]: SubstitutionValue;
}
export type Tags = Record<string, SubstitutionValue>;
export type TranslatedString = string | React.ReactNode;
export declare function _t(text: TranslationKey, variables?: IVariables): string;
export declare function _t(text: TranslationKey, variables: IVariables | undefined, tags: Tags): React.ReactNode;
/**
* Utility function to look up a string by its translation key without resolving variables & tags
* @param key - the translation key to return the value for
*/
export declare function lookupString(key: TranslationKey): string;
export declare function _tDom(text: TranslationKey, variables?: IVariables): TranslatedString;
export declare function _tDom(text: TranslationKey, variables: IVariables, tags: Tags): React.ReactNode;
/**
* Sanitizes unsafe text for the sanitizer, ensuring references to variables will not be considered
* replaceable by the translation functions.
* @param {string} text The text to sanitize.
* @returns {string} The sanitized text.
*/
export declare function sanitizeForTranslation(text: string): string;
export declare function substitute(text: string, variables?: IVariables): string;
export declare function substitute(text: string, variables: IVariables | undefined, tags: Tags | undefined): string;
/**
* Replace parts of a text using regular expressions
* @param text - The text on which to perform substitutions
* @param mapping - A mapping from regular expressions in string form to replacement string or a
* function which will receive as the argument the capture groups defined in the regexp. E.g.
* { 'Hello (.?) World': (sub) => sub.toUpperCase() }
*
* @return a React <span> component if any non-strings were used in substitutions, otherwise a string
*/
export declare function replaceByRegexes(text: string, mapping: IVariables): string;
export declare function replaceByRegexes(text: string, mapping: Tags): React.ReactNode;
export declare function setMissingEntryGenerator(f: (value: string) => void): void;
export declare function setLanguage(preferredLangs: string | string[]): Promise<void>;
type Language = {
value: string;
label: string;
labelInTargetLanguage: string;
};
export declare function getAllLanguagesFromJson(): Promise<string[]>;
export declare function getAllLanguagesWithLabels(): Promise<Language[]>;
export declare function getLanguagesFromBrowser(): readonly string[];
export declare function getLanguageFromBrowser(): string;
export declare function getCurrentLanguage(): string;
/**
* Given a list of language codes, pick the most appropriate one
* given the current language (ie. getCurrentLanguage())
* English is assumed to be a reasonable default.
*
* @param {string[]} langs List of language codes to pick from
* @returns {string} The most appropriate language code from langs
*/
export declare function pickBestLanguage(langs: string[]): string;
export declare class CustomTranslationOptions {
static lookupFn?: (url: string) => TranslationStringsObject;
private constructor();
}
/**
* Any custom modules with translations to load are parsed first, followed by an
* optionally defined translations file in the config. If no customization is made,
* or the file can't be parsed, no action will be taken.
*
* This function should be called *after* registering other translations data to
* ensure it overrides strings properly.
*/
export declare function registerCustomTranslations({ testOnlyIgnoreCustomTranslationsCache, }?: {
testOnlyIgnoreCustomTranslationsCache?: boolean;
}): Promise<void>;