/**
 * The built in i18n is a trivial translation mechanism which translates keys (words)
 * a method for pluralized keys (words with numbers) is available but not implemented.
 *
 * You can override the builtin methods in your init file, as long you keep *i18n.t* and *i18n.n*
 *
 *
 * ## Usage
 * After you have registered a translation file, you can use **i18n** in your components.
 *
 *
 * ```javascript
 * // import i18n
 * import {i18n} from "@furo/framework/src/i18n"
 *
 * // use it in your source
 *  let label = i18n.t("key");
 *
 * // use it in your template like this
 *   render() {
 *     // language=HTML
 *     return html` <div>${i18n.t("key")}</div>`;
 *  }
 *
 * ```
 *
 * ## Register a translation file and use custom translation methods
 * Register i18n in the init phase of your application.
 *
 *```javascript
 *import {Init, i18n, Env, Iconset} from "@furo/framework/src/furo.js";
 *
 * // import your translations
 *import {Translations} from "./translations";
 *
 * // register your translations
 * i18n.registerResBundle(Translations);
 *
 * // Apply custom Intl methods
 * i18n.t = (key) => {
 *    let b = i18n.resbundle[Env.locale.toLowerCase().replace("-", "_")] || i18n.resbundle['de_ch'];
 *
 *    if (b === undefined) {
 *        console.warn('No resource bundle with locale ' + Env.locale + ' exists.');
 *        return
 *    }
 *
 *    const res = key.split('.').reduce((acc, part) => acc && acc[part], b);
 *    return  (res ? res : key + '**');
 *};
 * // Apply custom Intl methods for pluralized keys
 * i18n.n = (key, num) => {
 *    let t = i18n.resbundle[Env.locale.toLowerCase().replace("-", "_")] || i18n.resbundle['de_ch'];
 *
 *    if (t === undefined) {
 *        console.warn('No resource bundle with locale ' + Env.locale + ' exists.');
 *        return
 *    }
 *
 *    let p = key.split(".");
 *    for (let i = 0; i < p.length; i++) {
 *        if (t[p[i]]) {
 *            t = t[p[i]];
 *        } else {
 *            console.warn("key does not exist", key);
 *            return;
 *        }
 *    }
 *
 *    if (t) {
 *        if (num === 1) {
 *            if (t.one) {
 *                return t.one(num);
 *            } else {
 *                console.warn("key does not exist", key + ".one");
 *                return num;
 *            }
 *        }
 *        if (num > 1) {
 *            if (t.many) {
 *                return t.many(num);
 *            } else {
 *                console.warn("key does not exist", key + ".many");
 *                return num;
 *            }
 *        }
 *        if (t.none) {
 *            return t.none(num);
 *        } else {
 *            console.warn("key does not exist", key + ".none");
 *            return num;
 *        }
 *
 *    }
 *};
 *
 *```
 */
export class i18n {
    static registerResBundle(bundle: any): void;
    static t(key: any): any;
    static n(key: any, num: any): string;
}
