77670eb369
* Add Actions to ViewModel utility types and specify `this: void` signature Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Add https://typescript-eslint.io/rules/unbound-method/ linter to shared-components also fix stray lint config which doesn't apply to SC Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Add https://typescript-eslint.io/rules/unbound-method/ linter to element-web Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Fix genuine issues identified by the linter Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Specify this:void on i18napi Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Update Module API Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Add comment for MapToVoidThis Added utility type to map VM actions to unbound functions. --------- Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
51 lines
1.7 KiB
TypeScript
51 lines
1.7 KiB
TypeScript
/*
|
|
Copyright 2025 New Vector Ltd.
|
|
|
|
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
|
|
Please see LICENSE files in the repository root for full details.
|
|
*/
|
|
|
|
import { type I18nApi as II18nApi, type Variables, type Translations } from "@element-hq/element-web-module-api";
|
|
|
|
import { humanizeTime } from "./humanize";
|
|
import { _t, getLocale, registerTranslations } from "./i18n";
|
|
|
|
export class I18nApi implements II18nApi {
|
|
/**
|
|
* Read the current language of the user in IETF Language Tag format
|
|
*/
|
|
public get language(): string {
|
|
return getLocale();
|
|
}
|
|
|
|
/**
|
|
* Register translations for the module, may override app's existing translations
|
|
*/
|
|
public register(this: void, translations: Partial<Translations>): void {
|
|
const langs: Record<string, Record<string, string>> = {};
|
|
|
|
for (const key in translations) {
|
|
for (const lang in translations[key as keyof Translations]) {
|
|
langs[lang] = langs[lang] || {};
|
|
langs[lang][key] = translations[key as keyof Translations]![lang];
|
|
}
|
|
}
|
|
|
|
// Finally, tell counterpart about our translations
|
|
for (const lang in langs) {
|
|
registerTranslations(lang, langs[lang]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Perform a translation, with optional variables
|
|
* @param key - The key to translate
|
|
* @param variables - Optional variables to interpolate into the translation
|
|
*/
|
|
public translate(this: void, key: TranslationKey, variables?: Variables): string {
|
|
return _t(key, variables);
|
|
}
|
|
|
|
public humanizeTime = (timeMillis: number): string => humanizeTime(timeMillis, this);
|
|
}
|