@bemedev/i18n
Version:
Internationalization library for Bemedev projects, providing utilities for managing translations and locale-specific content.
1 lines • 7.25 kB
Source Map (JSON)
{"version":3,"file":"class.cjs","sources":["../src/class.ts"],"sourcesContent":["import { typings } from '@bemedev/types';\nimport { addFn, defineTranslation, getTranslation } from './helpers';\nimport type {\n _Translations,\n KeyU,\n LanguageMessages,\n Paths,\n Translate_F,\n} from './types';\n\nclass I18n<\n const R extends LanguageMessages,\n const Keys extends string[],\n Tr extends Partial<_Translations<R>> = Partial<_Translations<R>>,\n> {\n get config() {\n return this._config;\n }\n\n get translations() {\n return this.#translations as Record<Keys[number], Tr>;\n }\n\n get keys() {\n return Object.keys(this.#translations) as Keys[number][];\n }\n\n /**\n * @deprecated Used only for typing (TypeScript). Do not use this property at runtime.\n */\n get __key() {\n return typings.commons<Keys[number]>();\n }\n\n /**\n * @deprecated Used only for typing (TypeScript). Do not use this property at runtime.\n */\n get __translation() {\n return typings.commons<Tr>();\n }\n\n constructor(\n private _config: R,\n ...initials: Keys\n ) {\n this.#initials = initials;\n for (const initial of this.#initials) {\n this.#translations[initial] = _config as unknown as Tr;\n }\n }\n\n #translations: Record<string, Tr> = {};\n\n #initials: Keys;\n\n #addTranslation = <K extends string, const V extends Tr>(\n key: K,\n func: ((define: typeof defineTranslation) => V) | V,\n ) => {\n const isFunction = typeof func === 'function';\n if (isFunction)\n this.#translations[key] = (func as any)(defineTranslation);\n else this.#translations[key] = func;\n };\n\n provideTranslation = <K extends string, V extends Tr>(\n key: K,\n func: ((define: typeof defineTranslation) => V) | V,\n ) => {\n const out = new I18n<R, [...Keys, K]>(\n this._config,\n ...(this.#initials as any),\n );\n\n out.#translations = { ...this.#translations };\n\n out.#addTranslation(key, func);\n\n return out;\n };\n\n #getOrderedLocaleAndParentLocales = (locale?: string) => {\n const locales: string[] = [];\n if (typeof locale !== 'string') return locales;\n let parentLocale = locale;\n while (parentLocale !== '') {\n locales.push(parentLocale);\n parentLocale = parentLocale.replace(/-?[^-]+$/, '');\n }\n return locales;\n };\n\n translateWithLocale = (locale: Keys[number], values: Paths<R>) => {\n const orderedLocales = new Set([\n ...this.#getOrderedLocaleAndParentLocales(locale),\n ...Object.keys(this.#translations).flatMap(\n this.#getOrderedLocaleAndParentLocales,\n ),\n ]);\n\n let out1 = '';\n\n for (const locale of orderedLocales) {\n const translationFile = this.#translations[locale];\n if (translationFile == null) continue;\n const __values: any = values;\n const _values: any =\n typeof __values === 'string'\n ? { key: __values, args: {} }\n : __values;\n\n const translation = getTranslation(\n locale,\n translationFile as any,\n _values.key,\n _values.args,\n );\n if (translation) {\n out1 = translation;\n break;\n }\n }\n\n return out1;\n };\n\n //@ts-expect-error for build\n translate: Translate_F<R, Keys[number]> = (key, args) => {\n const _args = {\n key,\n args,\n } as any;\n\n const to = (locale: Keys[number]) =>\n this.translateWithLocale(locale, _args);\n\n return addFn(to, { to });\n };\n}\n\n// #region types\nexport { type I18n };\n\nexport type ConfigFrom<T extends KeyU<'config'>> = T['config'];\n\nexport type KeysFrom<T extends KeyU<'keys'>> = T['keys'];\n\nexport type KeyFrom<T extends KeyU<'__key'>> = T['__key'];\n\nexport type TranslationsFrom<T extends KeyU<'translations'>> =\n T['translations'];\n\nexport type TranslationFrom<T extends KeyU<'__translation'>> =\n T['__translation'];\n// #endregion\n\nexport const create = <\n const K extends [string, ...string[]],\n const R extends LanguageMessages,\n>(\n func: ((define: typeof defineTranslation) => R) | R,\n ...fallbacks: K\n) => {\n const isFunction = typeof func === 'function';\n let config: R;\n if (isFunction) config = func(defineTranslation);\n else config = func;\n\n const out = new (I18n as any)(config, ...fallbacks);\n return out as I18n<R, K>;\n};\n"],"names":["typings","defineTranslation","getTranslation","addFn"],"mappings":"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"}