@xivdyetools/core 1.3.7
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.
- package/LICENSE +37 -0
- package/README.md +400 -0
- package/dist/constants/index.d.ts +56 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +103 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/data/colors_xiv.json +3130 -0
- package/dist/data/locales/de.json +231 -0
- package/dist/data/locales/en.json +231 -0
- package/dist/data/locales/fr.json +231 -0
- package/dist/data/locales/ja.json +231 -0
- package/dist/data/locales/ko.json +233 -0
- package/dist/data/locales/zh.json +233 -0
- package/dist/data/presets.json +390 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/services/APIService.d.ts +246 -0
- package/dist/services/APIService.d.ts.map +1 -0
- package/dist/services/APIService.js +499 -0
- package/dist/services/APIService.js.map +1 -0
- package/dist/services/ColorService.d.ts +146 -0
- package/dist/services/ColorService.d.ts.map +1 -0
- package/dist/services/ColorService.js +209 -0
- package/dist/services/ColorService.js.map +1 -0
- package/dist/services/DyeService.d.ts +230 -0
- package/dist/services/DyeService.d.ts.map +1 -0
- package/dist/services/DyeService.js +326 -0
- package/dist/services/DyeService.js.map +1 -0
- package/dist/services/LocalizationService.d.ts +338 -0
- package/dist/services/LocalizationService.d.ts.map +1 -0
- package/dist/services/LocalizationService.js +449 -0
- package/dist/services/LocalizationService.js.map +1 -0
- package/dist/services/PaletteService.d.ts +137 -0
- package/dist/services/PaletteService.d.ts.map +1 -0
- package/dist/services/PaletteService.js +349 -0
- package/dist/services/PaletteService.js.map +1 -0
- package/dist/services/PresetService.d.ts +196 -0
- package/dist/services/PresetService.d.ts.map +1 -0
- package/dist/services/PresetService.js +261 -0
- package/dist/services/PresetService.js.map +1 -0
- package/dist/services/color/ColorAccessibility.d.ts +39 -0
- package/dist/services/color/ColorAccessibility.d.ts.map +1 -0
- package/dist/services/color/ColorAccessibility.js +71 -0
- package/dist/services/color/ColorAccessibility.js.map +1 -0
- package/dist/services/color/ColorConverter.d.ts +146 -0
- package/dist/services/color/ColorConverter.d.ts.map +1 -0
- package/dist/services/color/ColorConverter.js +393 -0
- package/dist/services/color/ColorConverter.js.map +1 -0
- package/dist/services/color/ColorManipulator.d.ts +36 -0
- package/dist/services/color/ColorManipulator.d.ts.map +1 -0
- package/dist/services/color/ColorManipulator.js +56 -0
- package/dist/services/color/ColorManipulator.js.map +1 -0
- package/dist/services/color/ColorblindnessSimulator.d.ts +35 -0
- package/dist/services/color/ColorblindnessSimulator.d.ts.map +1 -0
- package/dist/services/color/ColorblindnessSimulator.js +110 -0
- package/dist/services/color/ColorblindnessSimulator.js.map +1 -0
- package/dist/services/dye/DyeDatabase.d.ts +131 -0
- package/dist/services/dye/DyeDatabase.d.ts.map +1 -0
- package/dist/services/dye/DyeDatabase.js +367 -0
- package/dist/services/dye/DyeDatabase.js.map +1 -0
- package/dist/services/dye/DyeSearch.d.ts +55 -0
- package/dist/services/dye/DyeSearch.d.ts.map +1 -0
- package/dist/services/dye/DyeSearch.js +196 -0
- package/dist/services/dye/DyeSearch.js.map +1 -0
- package/dist/services/dye/HarmonyGenerator.d.ts +110 -0
- package/dist/services/dye/HarmonyGenerator.d.ts.map +1 -0
- package/dist/services/dye/HarmonyGenerator.js +221 -0
- package/dist/services/dye/HarmonyGenerator.js.map +1 -0
- package/dist/services/localization/LocaleLoader.d.ts +38 -0
- package/dist/services/localization/LocaleLoader.d.ts.map +1 -0
- package/dist/services/localization/LocaleLoader.js +83 -0
- package/dist/services/localization/LocaleLoader.js.map +1 -0
- package/dist/services/localization/LocaleRegistry.d.ts +73 -0
- package/dist/services/localization/LocaleRegistry.d.ts.map +1 -0
- package/dist/services/localization/LocaleRegistry.js +84 -0
- package/dist/services/localization/LocaleRegistry.js.map +1 -0
- package/dist/services/localization/TranslationProvider.d.ts +157 -0
- package/dist/services/localization/TranslationProvider.d.ts.map +1 -0
- package/dist/services/localization/TranslationProvider.js +289 -0
- package/dist/services/localization/TranslationProvider.js.map +1 -0
- package/dist/types/index.d.ts +409 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +87 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/logger.d.ts +84 -0
- package/dist/types/logger.d.ts.map +1 -0
- package/dist/types/logger.js +54 -0
- package/dist/types/logger.js.map +1 -0
- package/dist/utils/index.d.ts +441 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +577 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/kd-tree.d.ts +76 -0
- package/dist/utils/kd-tree.d.ts.map +1 -0
- package/dist/utils/kd-tree.js +195 -0
- package/dist/utils/kd-tree.js.map +1 -0
- package/dist/version.d.ts +11 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +11 -0
- package/dist/version.js.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocaleLoader.js","sourceRoot":"","sources":["../../../src/services/localization/LocaleLoader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAE3D,2DAA2D;AAC3D,OAAO,QAAQ,MAAM,4BAA4B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACxE,OAAO,QAAQ,MAAM,4BAA4B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACxE,OAAO,QAAQ,MAAM,4BAA4B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACxE,OAAO,QAAQ,MAAM,4BAA4B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACxE,OAAO,QAAQ,MAAM,4BAA4B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACxE,OAAO,QAAQ,MAAM,4BAA4B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAExE,yCAAyC;AACzC,MAAM,SAAS,GAAgC;IAC7C,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;CACb,CAAC;AAEF;;GAEG;AACH,MAAM,OAAO,YAAY;IACvB;;;;;;;;;;;;;OAaG;IACH,UAAU,CAAC,MAAkB;QAC3B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;YAE/B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,gCAAgC,CAAC,CAAC;YACrE,CAAC;YAED,qBAAqB;YACrB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CAAC,qCAAqC,MAAM,EAAE,CAAC,CAAC;YACjE,CAAC;YAED,OAAO,IAAkB,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,kBAAkB,EAC5B,0BAA0B,MAAM,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,EAChG,OAAO,CACR,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACK,iBAAiB,CAAC,IAAa;QACrC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,UAAU,GAAG,IAA+B,CAAC;QAEnD,OAAO,CACL,OAAO,UAAU,CAAC,MAAM,KAAK,QAAQ;YACrC,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ;YACnC,OAAO,UAAU,CAAC,MAAM,KAAK,QAAQ;YACrC,OAAO,UAAU,CAAC,QAAQ,KAAK,QAAQ;YACvC,OAAO,UAAU,CAAC,UAAU,KAAK,QAAQ;YACzC,OAAO,UAAU,CAAC,YAAY,KAAK,QAAQ;YAC3C,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;YACxC,OAAO,UAAU,CAAC,YAAY,KAAK,QAAQ;YAC3C,OAAO,UAAU,CAAC,WAAW,KAAK,QAAQ,CAC3C,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LocaleRegistry - Manages loaded locale data cache
|
|
3
|
+
*
|
|
4
|
+
* Per R-4: Single Responsibility - caching loaded locales only
|
|
5
|
+
* Per R-5: Uses Map for O(1) lookup performance
|
|
6
|
+
*
|
|
7
|
+
* @module services/localization
|
|
8
|
+
*/
|
|
9
|
+
import type { LocaleCode, LocaleData } from '../../types/index.js';
|
|
10
|
+
/**
|
|
11
|
+
* Registry for loaded locale data with caching
|
|
12
|
+
*/
|
|
13
|
+
export declare class LocaleRegistry {
|
|
14
|
+
private locales;
|
|
15
|
+
/**
|
|
16
|
+
* Register a loaded locale in the cache
|
|
17
|
+
*
|
|
18
|
+
* @param data - Locale data to register
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* const registry = new LocaleRegistry();
|
|
23
|
+
* registry.registerLocale(jaData);
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
registerLocale(data: LocaleData): void;
|
|
27
|
+
/**
|
|
28
|
+
* Check if locale is already loaded
|
|
29
|
+
*
|
|
30
|
+
* @param locale - Locale code to check
|
|
31
|
+
* @returns true if locale is cached
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```typescript
|
|
35
|
+
* if (!registry.hasLocale('ja')) {
|
|
36
|
+
* await loadJapanese();
|
|
37
|
+
* }
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
hasLocale(locale: LocaleCode): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Get loaded locale data
|
|
43
|
+
*
|
|
44
|
+
* @param locale - Locale code to retrieve
|
|
45
|
+
* @returns Locale data if cached, null otherwise
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```typescript
|
|
49
|
+
* const jaData = registry.getLocale('ja');
|
|
50
|
+
* if (jaData) {
|
|
51
|
+
* console.log(jaData.labels.dye);
|
|
52
|
+
* }
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
getLocale(locale: LocaleCode): LocaleData | null;
|
|
56
|
+
/**
|
|
57
|
+
* Clear all loaded locales from cache
|
|
58
|
+
* Useful for memory management or testing
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```typescript
|
|
62
|
+
* registry.clear(); // Free memory
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
clear(): void;
|
|
66
|
+
/**
|
|
67
|
+
* Get number of loaded locales
|
|
68
|
+
*
|
|
69
|
+
* @returns Count of cached locales
|
|
70
|
+
*/
|
|
71
|
+
get size(): number;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=LocaleRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocaleRegistry.d.ts","sourceRoot":"","sources":["../../../src/services/localization/LocaleRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEnE;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAA0C;IAEzD;;;;;;;;;;OAUG;IACH,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAItC;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO;IAItC;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI;IAIhD;;;;;;;;OAQG;IACH,KAAK,IAAI,IAAI;IAIb;;;;OAIG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LocaleRegistry - Manages loaded locale data cache
|
|
3
|
+
*
|
|
4
|
+
* Per R-4: Single Responsibility - caching loaded locales only
|
|
5
|
+
* Per R-5: Uses Map for O(1) lookup performance
|
|
6
|
+
*
|
|
7
|
+
* @module services/localization
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Registry for loaded locale data with caching
|
|
11
|
+
*/
|
|
12
|
+
export class LocaleRegistry {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.locales = new Map();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Register a loaded locale in the cache
|
|
18
|
+
*
|
|
19
|
+
* @param data - Locale data to register
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* const registry = new LocaleRegistry();
|
|
24
|
+
* registry.registerLocale(jaData);
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
registerLocale(data) {
|
|
28
|
+
this.locales.set(data.locale, data);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Check if locale is already loaded
|
|
32
|
+
*
|
|
33
|
+
* @param locale - Locale code to check
|
|
34
|
+
* @returns true if locale is cached
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* if (!registry.hasLocale('ja')) {
|
|
39
|
+
* await loadJapanese();
|
|
40
|
+
* }
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
hasLocale(locale) {
|
|
44
|
+
return this.locales.has(locale);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get loaded locale data
|
|
48
|
+
*
|
|
49
|
+
* @param locale - Locale code to retrieve
|
|
50
|
+
* @returns Locale data if cached, null otherwise
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```typescript
|
|
54
|
+
* const jaData = registry.getLocale('ja');
|
|
55
|
+
* if (jaData) {
|
|
56
|
+
* console.log(jaData.labels.dye);
|
|
57
|
+
* }
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
getLocale(locale) {
|
|
61
|
+
return this.locales.get(locale) || null;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Clear all loaded locales from cache
|
|
65
|
+
* Useful for memory management or testing
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```typescript
|
|
69
|
+
* registry.clear(); // Free memory
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
clear() {
|
|
73
|
+
this.locales.clear();
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get number of loaded locales
|
|
77
|
+
*
|
|
78
|
+
* @returns Count of cached locales
|
|
79
|
+
*/
|
|
80
|
+
get size() {
|
|
81
|
+
return this.locales.size;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=LocaleRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocaleRegistry.js","sourceRoot":"","sources":["../../../src/services/localization/LocaleRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;GAEG;AACH,MAAM,OAAO,cAAc;IAA3B;QACU,YAAO,GAAgC,IAAI,GAAG,EAAE,CAAC;IAyE3D,CAAC;IAvEC;;;;;;;;;;OAUG;IACH,cAAc,CAAC,IAAgB;QAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,MAAkB;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,MAAkB;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;IAC1C,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;CACF"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TranslationProvider - Provides translations with fallback logic
|
|
3
|
+
*
|
|
4
|
+
* Per R-4: Single Responsibility - translation retrieval only
|
|
5
|
+
* Fallback chain: requested locale → English → formatted key
|
|
6
|
+
*
|
|
7
|
+
* @module services/localization
|
|
8
|
+
*/
|
|
9
|
+
import type { LocaleCode, TranslationKey, HarmonyTypeKey, VisionType, JobKey, GrandCompanyKey } from '../../types/index.js';
|
|
10
|
+
import type { LocaleRegistry } from './LocaleRegistry.js';
|
|
11
|
+
/**
|
|
12
|
+
* Provides translations with automatic fallback to English
|
|
13
|
+
*/
|
|
14
|
+
export declare class TranslationProvider {
|
|
15
|
+
private registry;
|
|
16
|
+
constructor(registry: LocaleRegistry);
|
|
17
|
+
/**
|
|
18
|
+
* Get UI label with fallback chain
|
|
19
|
+
*
|
|
20
|
+
* @param key - Translation key
|
|
21
|
+
* @param locale - Requested locale
|
|
22
|
+
* @returns Translated label or formatted key
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* const label = provider.getLabel('dye', 'ja');
|
|
27
|
+
* // Returns "カララント:" (ja) or "Dye" (en fallback)
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
getLabel(key: TranslationKey, locale: LocaleCode): string;
|
|
31
|
+
/**
|
|
32
|
+
* Get dye name with fallback
|
|
33
|
+
*
|
|
34
|
+
* @param itemID - Dye item ID
|
|
35
|
+
* @param locale - Requested locale
|
|
36
|
+
* @returns Localized dye name or null if not found
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* const name = provider.getDyeName(5729, 'ja');
|
|
41
|
+
* // Returns "スノウホワイト" (ja) or "Snow White" (en fallback)
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
getDyeName(itemID: number, locale: LocaleCode): string | null;
|
|
45
|
+
/**
|
|
46
|
+
* Get category name with fallback
|
|
47
|
+
*
|
|
48
|
+
* @param category - Category key (e.g., "Reds", "Blues")
|
|
49
|
+
* @param locale - Requested locale
|
|
50
|
+
* @returns Localized category name
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```typescript
|
|
54
|
+
* const category = provider.getCategory('Reds', 'ja');
|
|
55
|
+
* // Returns "赤系" (ja) or "Reds" (en fallback)
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
getCategory(category: string, locale: LocaleCode): string;
|
|
59
|
+
/**
|
|
60
|
+
* Get acquisition method with fallback
|
|
61
|
+
*
|
|
62
|
+
* @param acquisition - Acquisition key (e.g., "Dye Vendor", "Crafting")
|
|
63
|
+
* @param locale - Requested locale
|
|
64
|
+
* @returns Localized acquisition method
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```typescript
|
|
68
|
+
* const acq = provider.getAcquisition('Dye Vendor', 'ja');
|
|
69
|
+
* // Returns "染料販売業者" (ja) or "Dye Vendor" (en fallback)
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
getAcquisition(acquisition: string, locale: LocaleCode): string;
|
|
73
|
+
/**
|
|
74
|
+
* Get metallic dye IDs (locale-independent)
|
|
75
|
+
*
|
|
76
|
+
* @param locale - Current locale (for consistency)
|
|
77
|
+
* @returns Array of metallic dye item IDs
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* ```typescript
|
|
81
|
+
* const metallicIds = provider.getMetallicDyeIds('fr');
|
|
82
|
+
* // Returns [13116, 13117, ...] for any locale
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
getMetallicDyeIds(locale: LocaleCode): number[];
|
|
86
|
+
/**
|
|
87
|
+
* Get harmony type with fallback
|
|
88
|
+
*
|
|
89
|
+
* @param key - Harmony type key
|
|
90
|
+
* @param locale - Requested locale
|
|
91
|
+
* @returns Localized harmony type name
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```typescript
|
|
95
|
+
* const harmony = provider.getHarmonyType('triadic', 'ja');
|
|
96
|
+
* // Returns "三色配色" (ja) or "Triadic" (en fallback)
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
99
|
+
getHarmonyType(key: HarmonyTypeKey, locale: LocaleCode): string;
|
|
100
|
+
/**
|
|
101
|
+
* Get vision type with fallback
|
|
102
|
+
*
|
|
103
|
+
* @param key - Vision type key
|
|
104
|
+
* @param locale - Requested locale
|
|
105
|
+
* @returns Localized vision type name
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* ```typescript
|
|
109
|
+
* const vision = provider.getVisionType('deuteranopia', 'ja');
|
|
110
|
+
* // Returns "2型色覚(赤緑色盲)" (ja) or English fallback
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
getVisionType(key: VisionType, locale: LocaleCode): string;
|
|
114
|
+
/**
|
|
115
|
+
* Get job name with fallback
|
|
116
|
+
*
|
|
117
|
+
* @param key - Job key
|
|
118
|
+
* @param locale - Requested locale
|
|
119
|
+
* @returns Localized job name
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* ```typescript
|
|
123
|
+
* const job = provider.getJobName('darkKnight', 'ja');
|
|
124
|
+
* // Returns "暗黒騎士" (ja) or "Dark Knight" (en fallback)
|
|
125
|
+
* ```
|
|
126
|
+
*/
|
|
127
|
+
getJobName(key: JobKey, locale: LocaleCode): string;
|
|
128
|
+
/**
|
|
129
|
+
* Get Grand Company name with fallback
|
|
130
|
+
*
|
|
131
|
+
* @param key - Grand Company key
|
|
132
|
+
* @param locale - Requested locale
|
|
133
|
+
* @returns Localized Grand Company name
|
|
134
|
+
*
|
|
135
|
+
* @example
|
|
136
|
+
* ```typescript
|
|
137
|
+
* const gc = provider.getGrandCompanyName('maelstrom', 'ja');
|
|
138
|
+
* // Returns "黒渦団" (ja) or "The Maelstrom" (en fallback)
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
141
|
+
getGrandCompanyName(key: GrandCompanyKey, locale: LocaleCode): string;
|
|
142
|
+
/**
|
|
143
|
+
* Format camelCase/PascalCase key to Title Case
|
|
144
|
+
*
|
|
145
|
+
* @param key - Key to format
|
|
146
|
+
* @returns Formatted string
|
|
147
|
+
* @private
|
|
148
|
+
*
|
|
149
|
+
* @example
|
|
150
|
+
* ```typescript
|
|
151
|
+
* formatKey('splitComplementary') // "Split Complementary"
|
|
152
|
+
* formatKey('cosmicExploration') // "Cosmic Exploration"
|
|
153
|
+
* ```
|
|
154
|
+
*/
|
|
155
|
+
private formatKey;
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=TranslationProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TranslationProvider.d.ts","sourceRoot":"","sources":["../../../src/services/localization/TranslationProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,cAAc,EACd,UAAU,EACV,MAAM,EACN,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;GAEG;AACH,qBAAa,mBAAmB;IAClB,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,cAAc;IAE5C;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM;IAoBzD;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI;IAoB7D;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM;IAoBzD;;;;;;;;;;;;OAYG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM;IAoB/D;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,EAAE;IAY/C;;;;;;;;;;;;OAYG;IACH,cAAc,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM;IAoB/D;;;;;;;;;;;;OAYG;IACH,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM;IAoB1D;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM;IAoBnD;;;;;;;;;;;;OAYG;IACH,mBAAmB,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM;IAoBrE;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,SAAS;CAMlB"}
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TranslationProvider - Provides translations with fallback logic
|
|
3
|
+
*
|
|
4
|
+
* Per R-4: Single Responsibility - translation retrieval only
|
|
5
|
+
* Fallback chain: requested locale → English → formatted key
|
|
6
|
+
*
|
|
7
|
+
* @module services/localization
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Provides translations with automatic fallback to English
|
|
11
|
+
*/
|
|
12
|
+
export class TranslationProvider {
|
|
13
|
+
constructor(registry) {
|
|
14
|
+
this.registry = registry;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Get UI label with fallback chain
|
|
18
|
+
*
|
|
19
|
+
* @param key - Translation key
|
|
20
|
+
* @param locale - Requested locale
|
|
21
|
+
* @returns Translated label or formatted key
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const label = provider.getLabel('dye', 'ja');
|
|
26
|
+
* // Returns "カララント:" (ja) or "Dye" (en fallback)
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
getLabel(key, locale) {
|
|
30
|
+
const localeData = this.registry.getLocale(locale);
|
|
31
|
+
// Try requested locale
|
|
32
|
+
if (localeData?.labels[key]) {
|
|
33
|
+
return localeData.labels[key];
|
|
34
|
+
}
|
|
35
|
+
// Fallback to English
|
|
36
|
+
if (locale !== 'en') {
|
|
37
|
+
const englishData = this.registry.getLocale('en');
|
|
38
|
+
if (englishData?.labels[key]) {
|
|
39
|
+
return englishData.labels[key];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Final fallback: format key (camelCase → Title Case)
|
|
43
|
+
return this.formatKey(key);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get dye name with fallback
|
|
47
|
+
*
|
|
48
|
+
* @param itemID - Dye item ID
|
|
49
|
+
* @param locale - Requested locale
|
|
50
|
+
* @returns Localized dye name or null if not found
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```typescript
|
|
54
|
+
* const name = provider.getDyeName(5729, 'ja');
|
|
55
|
+
* // Returns "スノウホワイト" (ja) or "Snow White" (en fallback)
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
getDyeName(itemID, locale) {
|
|
59
|
+
const localeData = this.registry.getLocale(locale);
|
|
60
|
+
const idStr = String(itemID);
|
|
61
|
+
// Try requested locale
|
|
62
|
+
if (localeData?.dyeNames[idStr]) {
|
|
63
|
+
return localeData.dyeNames[idStr];
|
|
64
|
+
}
|
|
65
|
+
// Fallback to English
|
|
66
|
+
if (locale !== 'en') {
|
|
67
|
+
const englishData = this.registry.getLocale('en');
|
|
68
|
+
if (englishData?.dyeNames[idStr]) {
|
|
69
|
+
return englishData.dyeNames[idStr];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Get category name with fallback
|
|
76
|
+
*
|
|
77
|
+
* @param category - Category key (e.g., "Reds", "Blues")
|
|
78
|
+
* @param locale - Requested locale
|
|
79
|
+
* @returns Localized category name
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```typescript
|
|
83
|
+
* const category = provider.getCategory('Reds', 'ja');
|
|
84
|
+
* // Returns "赤系" (ja) or "Reds" (en fallback)
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
getCategory(category, locale) {
|
|
88
|
+
const localeData = this.registry.getLocale(locale);
|
|
89
|
+
// Try requested locale
|
|
90
|
+
if (localeData?.categories[category]) {
|
|
91
|
+
return localeData.categories[category];
|
|
92
|
+
}
|
|
93
|
+
// Fallback to English
|
|
94
|
+
if (locale !== 'en') {
|
|
95
|
+
const englishData = this.registry.getLocale('en');
|
|
96
|
+
if (englishData?.categories[category]) {
|
|
97
|
+
return englishData.categories[category];
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Final fallback: return original category
|
|
101
|
+
return category;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get acquisition method with fallback
|
|
105
|
+
*
|
|
106
|
+
* @param acquisition - Acquisition key (e.g., "Dye Vendor", "Crafting")
|
|
107
|
+
* @param locale - Requested locale
|
|
108
|
+
* @returns Localized acquisition method
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* ```typescript
|
|
112
|
+
* const acq = provider.getAcquisition('Dye Vendor', 'ja');
|
|
113
|
+
* // Returns "染料販売業者" (ja) or "Dye Vendor" (en fallback)
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
getAcquisition(acquisition, locale) {
|
|
117
|
+
const localeData = this.registry.getLocale(locale);
|
|
118
|
+
// Try requested locale
|
|
119
|
+
if (localeData?.acquisitions[acquisition]) {
|
|
120
|
+
return localeData.acquisitions[acquisition];
|
|
121
|
+
}
|
|
122
|
+
// Fallback to English
|
|
123
|
+
if (locale !== 'en') {
|
|
124
|
+
const englishData = this.registry.getLocale('en');
|
|
125
|
+
if (englishData?.acquisitions[acquisition]) {
|
|
126
|
+
return englishData.acquisitions[acquisition];
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// Final fallback: return original acquisition
|
|
130
|
+
return acquisition;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Get metallic dye IDs (locale-independent)
|
|
134
|
+
*
|
|
135
|
+
* @param locale - Current locale (for consistency)
|
|
136
|
+
* @returns Array of metallic dye item IDs
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```typescript
|
|
140
|
+
* const metallicIds = provider.getMetallicDyeIds('fr');
|
|
141
|
+
* // Returns [13116, 13117, ...] for any locale
|
|
142
|
+
* ```
|
|
143
|
+
*/
|
|
144
|
+
getMetallicDyeIds(locale) {
|
|
145
|
+
const localeData = this.registry.getLocale(locale);
|
|
146
|
+
if (localeData?.metallicDyeIds) {
|
|
147
|
+
return localeData.metallicDyeIds;
|
|
148
|
+
}
|
|
149
|
+
// Fallback to English
|
|
150
|
+
const englishData = this.registry.getLocale('en');
|
|
151
|
+
return englishData?.metallicDyeIds || [];
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Get harmony type with fallback
|
|
155
|
+
*
|
|
156
|
+
* @param key - Harmony type key
|
|
157
|
+
* @param locale - Requested locale
|
|
158
|
+
* @returns Localized harmony type name
|
|
159
|
+
*
|
|
160
|
+
* @example
|
|
161
|
+
* ```typescript
|
|
162
|
+
* const harmony = provider.getHarmonyType('triadic', 'ja');
|
|
163
|
+
* // Returns "三色配色" (ja) or "Triadic" (en fallback)
|
|
164
|
+
* ```
|
|
165
|
+
*/
|
|
166
|
+
getHarmonyType(key, locale) {
|
|
167
|
+
const localeData = this.registry.getLocale(locale);
|
|
168
|
+
// Try requested locale
|
|
169
|
+
if (localeData?.harmonyTypes[key]) {
|
|
170
|
+
return localeData.harmonyTypes[key];
|
|
171
|
+
}
|
|
172
|
+
// Fallback to English
|
|
173
|
+
if (locale !== 'en') {
|
|
174
|
+
const englishData = this.registry.getLocale('en');
|
|
175
|
+
if (englishData?.harmonyTypes[key]) {
|
|
176
|
+
return englishData.harmonyTypes[key];
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
// Final fallback: format key
|
|
180
|
+
return this.formatKey(key);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Get vision type with fallback
|
|
184
|
+
*
|
|
185
|
+
* @param key - Vision type key
|
|
186
|
+
* @param locale - Requested locale
|
|
187
|
+
* @returns Localized vision type name
|
|
188
|
+
*
|
|
189
|
+
* @example
|
|
190
|
+
* ```typescript
|
|
191
|
+
* const vision = provider.getVisionType('deuteranopia', 'ja');
|
|
192
|
+
* // Returns "2型色覚(赤緑色盲)" (ja) or English fallback
|
|
193
|
+
* ```
|
|
194
|
+
*/
|
|
195
|
+
getVisionType(key, locale) {
|
|
196
|
+
const localeData = this.registry.getLocale(locale);
|
|
197
|
+
// Try requested locale
|
|
198
|
+
if (localeData?.visionTypes[key]) {
|
|
199
|
+
return localeData.visionTypes[key];
|
|
200
|
+
}
|
|
201
|
+
// Fallback to English
|
|
202
|
+
if (locale !== 'en') {
|
|
203
|
+
const englishData = this.registry.getLocale('en');
|
|
204
|
+
if (englishData?.visionTypes[key]) {
|
|
205
|
+
return englishData.visionTypes[key];
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
// Final fallback: format key
|
|
209
|
+
return this.formatKey(key);
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Get job name with fallback
|
|
213
|
+
*
|
|
214
|
+
* @param key - Job key
|
|
215
|
+
* @param locale - Requested locale
|
|
216
|
+
* @returns Localized job name
|
|
217
|
+
*
|
|
218
|
+
* @example
|
|
219
|
+
* ```typescript
|
|
220
|
+
* const job = provider.getJobName('darkKnight', 'ja');
|
|
221
|
+
* // Returns "暗黒騎士" (ja) or "Dark Knight" (en fallback)
|
|
222
|
+
* ```
|
|
223
|
+
*/
|
|
224
|
+
getJobName(key, locale) {
|
|
225
|
+
const localeData = this.registry.getLocale(locale);
|
|
226
|
+
// Try requested locale
|
|
227
|
+
if (localeData?.jobNames[key]) {
|
|
228
|
+
return localeData.jobNames[key];
|
|
229
|
+
}
|
|
230
|
+
// Fallback to English
|
|
231
|
+
if (locale !== 'en') {
|
|
232
|
+
const englishData = this.registry.getLocale('en');
|
|
233
|
+
if (englishData?.jobNames[key]) {
|
|
234
|
+
return englishData.jobNames[key];
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
// Final fallback: format key
|
|
238
|
+
return this.formatKey(key);
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Get Grand Company name with fallback
|
|
242
|
+
*
|
|
243
|
+
* @param key - Grand Company key
|
|
244
|
+
* @param locale - Requested locale
|
|
245
|
+
* @returns Localized Grand Company name
|
|
246
|
+
*
|
|
247
|
+
* @example
|
|
248
|
+
* ```typescript
|
|
249
|
+
* const gc = provider.getGrandCompanyName('maelstrom', 'ja');
|
|
250
|
+
* // Returns "黒渦団" (ja) or "The Maelstrom" (en fallback)
|
|
251
|
+
* ```
|
|
252
|
+
*/
|
|
253
|
+
getGrandCompanyName(key, locale) {
|
|
254
|
+
const localeData = this.registry.getLocale(locale);
|
|
255
|
+
// Try requested locale
|
|
256
|
+
if (localeData?.grandCompanyNames[key]) {
|
|
257
|
+
return localeData.grandCompanyNames[key];
|
|
258
|
+
}
|
|
259
|
+
// Fallback to English
|
|
260
|
+
if (locale !== 'en') {
|
|
261
|
+
const englishData = this.registry.getLocale('en');
|
|
262
|
+
if (englishData?.grandCompanyNames[key]) {
|
|
263
|
+
return englishData.grandCompanyNames[key];
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
// Final fallback: format key
|
|
267
|
+
return this.formatKey(key);
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Format camelCase/PascalCase key to Title Case
|
|
271
|
+
*
|
|
272
|
+
* @param key - Key to format
|
|
273
|
+
* @returns Formatted string
|
|
274
|
+
* @private
|
|
275
|
+
*
|
|
276
|
+
* @example
|
|
277
|
+
* ```typescript
|
|
278
|
+
* formatKey('splitComplementary') // "Split Complementary"
|
|
279
|
+
* formatKey('cosmicExploration') // "Cosmic Exploration"
|
|
280
|
+
* ```
|
|
281
|
+
*/
|
|
282
|
+
formatKey(key) {
|
|
283
|
+
return key
|
|
284
|
+
.replace(/([A-Z])/g, ' $1')
|
|
285
|
+
.replace(/^./, (str) => str.toUpperCase())
|
|
286
|
+
.trim();
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
//# sourceMappingURL=TranslationProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TranslationProvider.js","sourceRoot":"","sources":["../../../src/services/localization/TranslationProvider.ts"],"names":[],"mappings":"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"}
|