@digitaldefiance/i18n-lib 1.0.15 → 1.0.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,29 @@
1
+ import { LanguageContext } from './types';
2
+ import { Timezone } from './timezone';
3
+ import { CurrencyCode } from './currency-code';
4
+ export interface IActiveContext<TLanguage extends string> {
5
+ /**
6
+ * The default language for the user facing application
7
+ */
8
+ language: TLanguage;
9
+ /**
10
+ * The default language for the admin interface
11
+ */
12
+ adminLanguage: TLanguage;
13
+ /**
14
+ * The default currency code for the user facing application
15
+ */
16
+ currencyCode: CurrencyCode;
17
+ /**
18
+ * The default language context for the current context
19
+ */
20
+ currentContext: LanguageContext;
21
+ /**
22
+ * The default timezone for the user facing application
23
+ */
24
+ timezone: Timezone;
25
+ /**
26
+ * The default timezone for the admin interface
27
+ */
28
+ adminTimezone: Timezone;
29
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/dist/context.d.ts CHANGED
@@ -1,5 +1,43 @@
1
+ import { CurrencyCode } from './currency-code';
2
+ import { Timezone } from './timezone';
1
3
  import { I18nContext, LanguageContext } from './types';
2
- export declare function createContext<TLanguage extends string, TContext extends string = LanguageContext>(defaultLanguage: TLanguage, defaultContext: TContext): I18nContext<TLanguage, TContext>;
4
+ /**
5
+ * Creates a new I18n context with default values.
6
+ * @param defaultLanguage - The default language for the context
7
+ * @param defaultContext - The default language context
8
+ * @param defaultCurrencyCode - The default currency code (defaults to USD)
9
+ * @param defaultTimezone - The default timezone (defaults to UTC)
10
+ * @param defaultAdminTimezone - The default admin timezone (defaults to UTC)
11
+ * @returns A new I18nContext instance
12
+ */
13
+ export declare function createContext<TLanguage extends string, TContext extends string = LanguageContext>(defaultLanguage: TLanguage, defaultContext: TContext, defaultCurrencyCode?: CurrencyCode, defaultTimezone?: Timezone, defaultAdminTimezone?: Timezone): I18nContext<TLanguage, TContext>;
14
+ /**
15
+ * Sets the language for the given I18n context.
16
+ * @param context - The I18n context to modify
17
+ * @param language - The language to set
18
+ */
3
19
  export declare function setLanguage<TLanguage extends string, TContext extends string = LanguageContext>(context: I18nContext<TLanguage, TContext>, language: TLanguage): void;
20
+ /**
21
+ * Sets the admin language for the given I18n context.
22
+ * @param context - The I18n context to modify
23
+ * @param language - The admin language to set
24
+ */
4
25
  export declare function setAdminLanguage<TLanguage extends string, TContext extends string = LanguageContext>(context: I18nContext<TLanguage, TContext>, language: TLanguage): void;
26
+ /**
27
+ * Sets the current context for the given I18n context.
28
+ * @param context - The I18n context to modify
29
+ * @param languageContext - The language context to set
30
+ */
5
31
  export declare function setContext<TLanguage extends string, TContext extends string = LanguageContext>(context: I18nContext<TLanguage, TContext>, languageContext: TContext): void;
32
+ /**
33
+ * Sets the timezone for the given I18n context.
34
+ * @param context - The I18n context to modify
35
+ * @param timezone - The timezone to set
36
+ */
37
+ export declare function setTimezone<TLanguage extends string, TContext extends string = LanguageContext>(context: I18nContext<TLanguage, TContext>, timezone: Timezone): void;
38
+ /**
39
+ * Sets the admin timezone for the given I18n context.
40
+ * @param context - The I18n context to modify
41
+ * @param timezone - The admin timezone to set
42
+ */
43
+ export declare function setAdminTimezone<TLanguage extends string, TContext extends string = LanguageContext>(context: I18nContext<TLanguage, TContext>, timezone: Timezone): void;
package/dist/context.js CHANGED
@@ -4,19 +4,66 @@ exports.createContext = createContext;
4
4
  exports.setLanguage = setLanguage;
5
5
  exports.setAdminLanguage = setAdminLanguage;
6
6
  exports.setContext = setContext;
7
- function createContext(defaultLanguage, defaultContext) {
7
+ exports.setTimezone = setTimezone;
8
+ exports.setAdminTimezone = setAdminTimezone;
9
+ const currency_code_1 = require("./currency-code");
10
+ const timezone_1 = require("./timezone");
11
+ /**
12
+ * Creates a new I18n context with default values.
13
+ * @param defaultLanguage - The default language for the context
14
+ * @param defaultContext - The default language context
15
+ * @param defaultCurrencyCode - The default currency code (defaults to USD)
16
+ * @param defaultTimezone - The default timezone (defaults to UTC)
17
+ * @param defaultAdminTimezone - The default admin timezone (defaults to UTC)
18
+ * @returns A new I18nContext instance
19
+ */
20
+ function createContext(defaultLanguage, defaultContext, defaultCurrencyCode = new currency_code_1.CurrencyCode('USD'), defaultTimezone = new timezone_1.Timezone('UTC'), defaultAdminTimezone = new timezone_1.Timezone('UTC')) {
8
21
  return {
9
22
  language: defaultLanguage,
10
23
  adminLanguage: defaultLanguage,
24
+ currencyCode: defaultCurrencyCode,
11
25
  currentContext: defaultContext,
26
+ timezone: defaultTimezone,
27
+ adminTimezone: defaultAdminTimezone,
12
28
  };
13
29
  }
30
+ /**
31
+ * Sets the language for the given I18n context.
32
+ * @param context - The I18n context to modify
33
+ * @param language - The language to set
34
+ */
14
35
  function setLanguage(context, language) {
15
36
  context.language = language;
16
37
  }
38
+ /**
39
+ * Sets the admin language for the given I18n context.
40
+ * @param context - The I18n context to modify
41
+ * @param language - The admin language to set
42
+ */
17
43
  function setAdminLanguage(context, language) {
18
44
  context.adminLanguage = language;
19
45
  }
46
+ /**
47
+ * Sets the current context for the given I18n context.
48
+ * @param context - The I18n context to modify
49
+ * @param languageContext - The language context to set
50
+ */
20
51
  function setContext(context, languageContext) {
21
52
  context.currentContext = languageContext;
22
53
  }
54
+ /**
55
+ * Sets the timezone for the given I18n context.
56
+ * @param context - The I18n context to modify
57
+ * @param timezone - The timezone to set
58
+ */
59
+ function setTimezone(context, timezone) {
60
+ context.timezone = timezone;
61
+ }
62
+ /**
63
+ * Sets the admin timezone for the given I18n context.
64
+ * @param context - The I18n context to modify
65
+ * @param timezone - The admin timezone to set
66
+ */
67
+ function setAdminTimezone(context, timezone) {
68
+ context.adminTimezone = timezone;
69
+ }
@@ -0,0 +1,7 @@
1
+ export declare class CurrencyCode {
2
+ private _value;
3
+ get value(): string;
4
+ set value(value: string);
5
+ static get values(): string[];
6
+ constructor(value?: string);
7
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CurrencyCode = void 0;
4
+ const currency_codes_1 = require("currency-codes");
5
+ const types_1 = require("./types");
6
+ class CurrencyCode {
7
+ get value() {
8
+ return this._value;
9
+ }
10
+ set value(value) {
11
+ if (!CurrencyCode.values.includes(value)) {
12
+ throw new Error('Invalid currency code');
13
+ }
14
+ this._value = value;
15
+ }
16
+ static get values() {
17
+ return (0, currency_codes_1.codes)();
18
+ }
19
+ constructor(value = types_1.DefaultCurrencyCode) {
20
+ this._value = types_1.DefaultCurrencyCode;
21
+ this.value = value;
22
+ }
23
+ }
24
+ exports.CurrencyCode = CurrencyCode;
@@ -0,0 +1,7 @@
1
+ import { CurrencyPosition } from './types';
2
+ export interface CurrencyFormat {
3
+ symbol: string;
4
+ position: CurrencyPosition;
5
+ groupSeparator: string;
6
+ decimalSeparator: string;
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,11 +1,5 @@
1
1
  /**
2
2
  * Currency formatting utilities
3
3
  */
4
- export type CurrencyPosition = 'prefix' | 'postfix' | 'infix';
5
- export interface CurrencyFormat {
6
- symbol: string;
7
- position: CurrencyPosition;
8
- groupSeparator: string;
9
- decimalSeparator: string;
10
- }
4
+ import { CurrencyFormat } from './currency-format';
11
5
  export declare function getCurrencyFormat(locale: string, currencyCode: string): CurrencyFormat;
@@ -0,0 +1,22 @@
1
+ import { StringLanguage } from './enumerations/string-language';
2
+ import { IActiveContext } from './interfaces/active-context';
3
+ import { CurrencyCode } from './interfaces/currency-code';
4
+ import { LanguageContext } from './shared-types';
5
+ import { Timezone } from '@digitaldefiance/i18n-lib';
6
+ export declare const GlobalActiveContext: IActiveContext;
7
+ export declare function setUserLanguage(language: StringLanguage): void;
8
+ export declare function setCurrencyCode(code: CurrencyCode): void;
9
+ /**
10
+ * Sets the admin language for console operations
11
+ * @param language The language to set for admin operations
12
+ */
13
+ export declare function setAdminLanguage(language: StringLanguage): void;
14
+ /**
15
+ * Sets the language context for the current context
16
+ * @param context The language context to set
17
+ */
18
+ export declare function setLanguageContext(context: LanguageContext): void;
19
+ export declare function setSystemContext(): void;
20
+ export declare function setApiContext(): void;
21
+ export declare function setUserTimezone(tz: Timezone): void;
22
+ export declare function setAdminTimezone(tz: Timezone): void;
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GlobalActiveContext = void 0;
4
+ exports.setUserLanguage = setUserLanguage;
5
+ exports.setCurrencyCode = setCurrencyCode;
6
+ exports.setAdminLanguage = setAdminLanguage;
7
+ exports.setLanguageContext = setLanguageContext;
8
+ exports.setSystemContext = setSystemContext;
9
+ exports.setApiContext = setApiContext;
10
+ exports.setUserTimezone = setUserTimezone;
11
+ exports.setAdminTimezone = setAdminTimezone;
12
+ const currency_code_1 = require("./interfaces/currency-code");
13
+ const shared_types_1 = require("./shared-types");
14
+ const i18n_lib_1 = require("@digitaldefiance/i18n-lib");
15
+ // Create the base context
16
+ const baseContext = {
17
+ /**
18
+ * The language to use for translations in the user facing ui
19
+ */
20
+ language: shared_types_1.DefaultLanguage,
21
+ /**
22
+ * The language to use for console/admin logs
23
+ */
24
+ adminLanguage: shared_types_1.DefaultLanguage,
25
+ currencyCode: new currency_code_1.CurrencyCode(shared_types_1.DefaultCurrencyCode),
26
+ /**
27
+ * The current default context for language translations
28
+ */
29
+ currentContext: 'user',
30
+ /**
31
+ * The timezone for the user facing UI
32
+ */
33
+ timezone: new i18n_lib_1.Timezone('UTC'),
34
+ /**
35
+ * The timezone for the admin console
36
+ */
37
+ adminTimezone: new i18n_lib_1.Timezone('UTC'),
38
+ };
39
+ // Export the context (can be proxied for change detection)
40
+ exports.GlobalActiveContext = baseContext;
41
+ function setUserLanguage(language) {
42
+ exports.GlobalActiveContext.language = language;
43
+ }
44
+ function setCurrencyCode(code) {
45
+ exports.GlobalActiveContext.currencyCode = code;
46
+ }
47
+ /**
48
+ * Sets the admin language for console operations
49
+ * @param language The language to set for admin operations
50
+ */
51
+ function setAdminLanguage(language) {
52
+ exports.GlobalActiveContext.adminLanguage = language;
53
+ }
54
+ /**
55
+ * Sets the language context for the current context
56
+ * @param context The language context to set
57
+ */
58
+ function setLanguageContext(context) {
59
+ exports.GlobalActiveContext.currentContext = context;
60
+ }
61
+ // Helper functions for new contexts
62
+ function setSystemContext() {
63
+ setLanguageContext('system');
64
+ }
65
+ function setApiContext() {
66
+ setLanguageContext('api');
67
+ }
68
+ function setUserTimezone(tz) {
69
+ exports.GlobalActiveContext.timezone = tz;
70
+ }
71
+ function setAdminTimezone(tz) {
72
+ exports.GlobalActiveContext.adminTimezone = tz;
73
+ }
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.I18nEngine = void 0;
4
+ const context_1 = require("./context");
4
5
  const enum_registry_1 = require("./enum-registry");
5
6
  const template_1 = require("./template");
6
7
  const utils_1 = require("./utils");
@@ -14,11 +15,7 @@ class I18nEngine {
14
15
  constructor(config, key) {
15
16
  this.config = config;
16
17
  this.enumRegistry = new enum_registry_1.EnumTranslationRegistry();
17
- this._context = {
18
- language: config.defaultLanguage,
19
- adminLanguage: config.defaultLanguage,
20
- currentContext: config.defaultContext,
21
- };
18
+ this._context = (0, context_1.createContext)(config.defaultLanguage, config.defaultTranslationContext, config.defaultCurrencyCode, config.timezone, config.adminTimezone);
22
19
  const instanceKey = key || I18nEngine.DefaultInstanceKey;
23
20
  if (I18nEngine._instances.has(instanceKey)) {
24
21
  const existing = I18nEngine._instances.get(instanceKey);
package/dist/index.d.ts CHANGED
@@ -1,9 +1,13 @@
1
+ export * from './active-context';
1
2
  export * from './context';
2
3
  export * from './context-manager';
3
4
  export * from './currency';
5
+ export * from './currency-code';
6
+ export * from './currency-format';
4
7
  export * from './enum-registry';
5
8
  export * from './i18n-engine';
6
9
  export * from './template';
10
+ export * from './timezone';
7
11
  export * from './types';
8
12
  export * from './utils';
9
13
  export { I18nEngine as I18n } from './i18n-engine';
package/dist/index.js CHANGED
@@ -15,12 +15,16 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.I18n = void 0;
18
+ __exportStar(require("./active-context"), exports);
18
19
  __exportStar(require("./context"), exports);
19
20
  __exportStar(require("./context-manager"), exports);
20
21
  __exportStar(require("./currency"), exports);
22
+ __exportStar(require("./currency-code"), exports);
23
+ __exportStar(require("./currency-format"), exports);
21
24
  __exportStar(require("./enum-registry"), exports);
22
25
  __exportStar(require("./i18n-engine"), exports);
23
26
  __exportStar(require("./template"), exports);
27
+ __exportStar(require("./timezone"), exports);
24
28
  __exportStar(require("./types"), exports);
25
29
  __exportStar(require("./utils"), exports);
26
30
  // Re-export for convenience
@@ -0,0 +1,5 @@
1
+ export declare class Timezone {
2
+ private readonly _timezone;
3
+ constructor(timezone: string);
4
+ get value(): string;
5
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Timezone = void 0;
4
+ const utils_1 = require("./utils");
5
+ class Timezone {
6
+ constructor(timezone) {
7
+ if (!(0, utils_1.isValidTimezone)(timezone)) {
8
+ throw new Error(`Invalid timezone: ${timezone}`);
9
+ }
10
+ this._timezone = timezone;
11
+ }
12
+ get value() {
13
+ return this._timezone;
14
+ }
15
+ }
16
+ exports.Timezone = Timezone;
package/dist/types.d.ts CHANGED
@@ -1,24 +1,34 @@
1
- export type LanguageContext = 'admin' | 'user';
1
+ import { CurrencyCode } from './currency-code';
2
+ import { Timezone } from './timezone';
3
+ export type LanguageContext = 'admin' | 'user' | 'system' | 'api';
4
+ export declare const DefaultCurrencyCode: string;
5
+ export type CurrencyPosition = 'prefix' | 'postfix' | 'infix';
2
6
  export type CustomLanguageContext<T extends string = LanguageContext> = T;
3
7
  export type StringsCollection<TStringKey extends string> = Partial<Record<TStringKey, string>>;
4
8
  export type MasterStringsCollection<TStringKey extends string, TLanguage extends string> = Partial<Record<TLanguage, StringsCollection<TStringKey>>>;
5
9
  export type LanguageCodeCollection<TLanguage extends string> = Partial<Record<TLanguage, string>>;
6
10
  export type EnumTranslationMap<TEnum extends string | number, TLanguage extends string> = Partial<Record<TLanguage, Partial<Record<TEnum, string>>>>;
7
- export interface I18nConfig<TStringKey extends string, TLanguage extends string, TConstants extends Record<string, any> = Record<string, any>, TContext extends string = LanguageContext> {
11
+ export interface I18nConfig<TStringKey extends string, TLanguage extends string, TConstants extends Record<string, any> = Record<string, any>, TTranslationContext extends string = LanguageContext> {
8
12
  stringNames: TStringKey[];
9
13
  strings: MasterStringsCollection<TStringKey, TLanguage>;
10
14
  defaultLanguage: TLanguage;
11
- defaultContext: TContext;
15
+ defaultTranslationContext: TTranslationContext;
16
+ defaultCurrencyCode: CurrencyCode;
12
17
  languageCodes: LanguageCodeCollection<TLanguage>;
13
18
  languages: TLanguage[];
14
19
  constants?: TConstants;
15
20
  enumName?: string;
16
21
  enumObj?: Record<string, TStringKey>;
22
+ timezone: Timezone;
23
+ adminTimezone: Timezone;
17
24
  }
18
- export interface I18nContext<TLanguage extends string, TContext extends string = LanguageContext> {
25
+ export interface I18nContext<TLanguage extends string, TTranslationContext extends string = LanguageContext> {
19
26
  language: TLanguage;
20
27
  adminLanguage: TLanguage;
21
- currentContext: TContext;
28
+ currencyCode: CurrencyCode;
29
+ currentContext: TTranslationContext;
30
+ timezone: Timezone;
31
+ adminTimezone: Timezone;
22
32
  }
23
33
  /**
24
34
  * Generic translation type for any enumeration
package/dist/types.js CHANGED
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DefaultCurrencyCode = void 0;
3
4
  exports.createTranslations = createTranslations;
5
+ exports.DefaultCurrencyCode = 'USD';
4
6
  /**
5
7
  * Helper function to create typed translations for an enumeration
6
8
  */
package/dist/utils.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export declare function replaceVariables(str: string, vars?: Record<string, string | number>, constants?: any): string;
2
2
  export declare function isTemplate(key: string): boolean;
3
+ export declare function isValidTimezone(timezone: string): boolean;
package/dist/utils.js CHANGED
@@ -1,7 +1,12 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.replaceVariables = replaceVariables;
4
7
  exports.isTemplate = isTemplate;
8
+ exports.isValidTimezone = isValidTimezone;
9
+ const moment_timezone_1 = __importDefault(require("moment-timezone"));
5
10
  function replaceVariables(str, vars, constants) {
6
11
  const variables = str.match(/\{(.+?)\}/g);
7
12
  if (!variables)
@@ -25,3 +30,6 @@ function replaceVariables(str, vars, constants) {
25
30
  function isTemplate(key) {
26
31
  return key.toLowerCase().endsWith('template');
27
32
  }
33
+ function isValidTimezone(timezone) {
34
+ return moment_timezone_1.default.tz.zone(timezone) !== null;
35
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digitaldefiance/i18n-lib",
3
- "version": "1.0.15",
3
+ "version": "1.0.17",
4
4
  "description": "Generic i18n library with enum translation support",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -43,5 +43,9 @@
43
43
  ],
44
44
  "author": "Digital Defiance",
45
45
  "license": "MIT",
46
- "packageManager": "yarn@4.10.3"
46
+ "packageManager": "yarn@4.10.3",
47
+ "dependencies": {
48
+ "moment": "^2.30.1",
49
+ "moment-timezone": "^0.6.0"
50
+ }
47
51
  }