@langapi/mcp-server 1.0.6 → 1.1.0
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/dist/handlers/index.d.ts +7 -0
- package/dist/handlers/index.d.ts.map +1 -0
- package/dist/handlers/index.js +7 -0
- package/dist/handlers/index.js.map +1 -0
- package/dist/handlers/xcstrings-sync-handler.d.ts +72 -0
- package/dist/handlers/xcstrings-sync-handler.d.ts.map +1 -0
- package/dist/handlers/xcstrings-sync-handler.js +126 -0
- package/dist/handlers/xcstrings-sync-handler.js.map +1 -0
- package/dist/locale-detection/index.d.ts.map +1 -1
- package/dist/locale-detection/index.js +80 -7
- package/dist/locale-detection/index.js.map +1 -1
- package/dist/locale-detection/patterns.d.ts.map +1 -1
- package/dist/locale-detection/patterns.js +45 -0
- package/dist/locale-detection/patterns.js.map +1 -1
- package/dist/tools/get-translation-status.d.ts.map +1 -1
- package/dist/tools/get-translation-status.js +34 -6
- package/dist/tools/get-translation-status.js.map +1 -1
- package/dist/tools/list-local-locales.d.ts +1 -1
- package/dist/tools/list-local-locales.js +2 -2
- package/dist/tools/list-local-locales.js.map +1 -1
- package/dist/tools/sync-translations.d.ts.map +1 -1
- package/dist/tools/sync-translations.js +228 -42
- package/dist/tools/sync-translations.js.map +1 -1
- package/dist/utils/apple-common.d.ts +63 -0
- package/dist/utils/apple-common.d.ts.map +1 -0
- package/dist/utils/apple-common.js +118 -0
- package/dist/utils/apple-common.js.map +1 -0
- package/dist/utils/apple-common.test.d.ts +2 -0
- package/dist/utils/apple-common.test.d.ts.map +1 -0
- package/dist/utils/apple-common.test.js +108 -0
- package/dist/utils/apple-common.test.js.map +1 -0
- package/dist/utils/arb-parser.d.ts +77 -0
- package/dist/utils/arb-parser.d.ts.map +1 -0
- package/dist/utils/arb-parser.js +142 -0
- package/dist/utils/arb-parser.js.map +1 -0
- package/dist/utils/arb-parser.test.d.ts +2 -0
- package/dist/utils/arb-parser.test.d.ts.map +1 -0
- package/dist/utils/arb-parser.test.js +243 -0
- package/dist/utils/arb-parser.test.js.map +1 -0
- package/dist/utils/strings-parser.d.ts +62 -0
- package/dist/utils/strings-parser.d.ts.map +1 -0
- package/dist/utils/strings-parser.js +276 -0
- package/dist/utils/strings-parser.js.map +1 -0
- package/dist/utils/strings-parser.test.d.ts +2 -0
- package/dist/utils/strings-parser.test.d.ts.map +1 -0
- package/dist/utils/strings-parser.test.js +143 -0
- package/dist/utils/strings-parser.test.js.map +1 -0
- package/dist/utils/stringsdict-parser.d.ts +106 -0
- package/dist/utils/stringsdict-parser.d.ts.map +1 -0
- package/dist/utils/stringsdict-parser.js +473 -0
- package/dist/utils/stringsdict-parser.js.map +1 -0
- package/dist/utils/stringsdict-parser.test.d.ts +2 -0
- package/dist/utils/stringsdict-parser.test.d.ts.map +1 -0
- package/dist/utils/stringsdict-parser.test.js +244 -0
- package/dist/utils/stringsdict-parser.test.js.map +1 -0
- package/dist/utils/xcstrings-parser.d.ts +128 -0
- package/dist/utils/xcstrings-parser.d.ts.map +1 -0
- package/dist/utils/xcstrings-parser.js +216 -0
- package/dist/utils/xcstrings-parser.js.map +1 -0
- package/dist/utils/xcstrings-parser.test.d.ts +2 -0
- package/dist/utils/xcstrings-parser.test.d.ts.map +1 -0
- package/dist/utils/xcstrings-parser.test.js +157 -0
- package/dist/utils/xcstrings-parser.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handlers module
|
|
3
|
+
*
|
|
4
|
+
* Format-specific sync handlers for the sync_translations tool.
|
|
5
|
+
*/
|
|
6
|
+
export { parseXCStringsSource, getXCStringsExistingKeys, xcstringsHasMissingKeys, getXCStringsContentToSync, writeXCStringsTranslations, type XCStringsSourceData, } from "./xcstrings-sync-handler.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,EACzB,0BAA0B,EAC1B,KAAK,mBAAmB,GACzB,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handlers module
|
|
3
|
+
*
|
|
4
|
+
* Format-specific sync handlers for the sync_translations tool.
|
|
5
|
+
*/
|
|
6
|
+
export { parseXCStringsSource, getXCStringsExistingKeys, xcstringsHasMissingKeys, getXCStringsContentToSync, writeXCStringsTranslations, } from "./xcstrings-sync-handler.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,EACzB,0BAA0B,GAE3B,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* XCStrings Sync Handler
|
|
3
|
+
*
|
|
4
|
+
* Encapsulates xcstrings-specific sync logic for the sync_translations tool.
|
|
5
|
+
* XCStrings files are unique because all languages are stored in a single file.
|
|
6
|
+
*/
|
|
7
|
+
import type { LocaleFile } from "../locale-detection/index.js";
|
|
8
|
+
import type { KeyValue } from "../api/types.js";
|
|
9
|
+
import { type XCStringsFile } from "../utils/xcstrings-parser.js";
|
|
10
|
+
/**
|
|
11
|
+
* Parsed xcstrings source data for use in sync operations
|
|
12
|
+
*/
|
|
13
|
+
export interface XCStringsSourceData {
|
|
14
|
+
file: LocaleFile;
|
|
15
|
+
flatContent: KeyValue[];
|
|
16
|
+
xcstringsData: XCStringsFile;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Parse an xcstrings source file
|
|
20
|
+
*
|
|
21
|
+
* @param file LocaleFile metadata
|
|
22
|
+
* @param content Raw file content
|
|
23
|
+
* @returns Parsed data or null if invalid
|
|
24
|
+
*/
|
|
25
|
+
export declare function parseXCStringsSource(file: LocaleFile, content: string): XCStringsSourceData | null;
|
|
26
|
+
/**
|
|
27
|
+
* Get the set of keys that exist in a target language within xcstrings
|
|
28
|
+
*
|
|
29
|
+
* @param xcstringsData Parsed xcstrings data
|
|
30
|
+
* @param targetLang Target language code
|
|
31
|
+
* @returns Set of keys that have non-empty translations
|
|
32
|
+
*/
|
|
33
|
+
export declare function getXCStringsExistingKeys(xcstringsData: XCStringsFile, targetLang: string): Set<string>;
|
|
34
|
+
/**
|
|
35
|
+
* Check if a target language has any missing keys compared to source
|
|
36
|
+
*
|
|
37
|
+
* @param xcstringsData Parsed xcstrings data
|
|
38
|
+
* @param targetLang Target language code
|
|
39
|
+
* @param sourceContent Source language content
|
|
40
|
+
* @returns true if any source keys are missing in target
|
|
41
|
+
*/
|
|
42
|
+
export declare function xcstringsHasMissingKeys(xcstringsData: XCStringsFile, targetLang: string, sourceContent: KeyValue[]): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Determine what content needs to be synced for xcstrings
|
|
45
|
+
*
|
|
46
|
+
* @param sourceData Parsed xcstrings source data
|
|
47
|
+
* @param targetLang Target language code
|
|
48
|
+
* @param cachedContent Cached content from previous sync (null if no cache)
|
|
49
|
+
* @param deltaContent Content that changed since last sync
|
|
50
|
+
* @param isMissingLang Whether the target language is completely missing
|
|
51
|
+
* @param hasMissingKeys Whether target has any missing keys
|
|
52
|
+
* @param skipKeys Set of keys to skip for this language
|
|
53
|
+
* @returns Content to sync (after filtering skip keys)
|
|
54
|
+
*/
|
|
55
|
+
export declare function getXCStringsContentToSync(sourceData: XCStringsSourceData, targetLang: string, cachedContent: Record<string, string> | null, deltaContent: KeyValue[], isMissingLang: boolean, hasMissingKeys: boolean, skipKeys: Set<string>): {
|
|
56
|
+
contentToSync: KeyValue[];
|
|
57
|
+
skippedKeys: string[];
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Write translations to an xcstrings file
|
|
61
|
+
*
|
|
62
|
+
* Reads the current file state, updates the target language, and writes back.
|
|
63
|
+
* Returns the updated xcstrings data for subsequent language updates.
|
|
64
|
+
*
|
|
65
|
+
* @param filePath Path to the xcstrings file
|
|
66
|
+
* @param currentData Current xcstrings data (may be stale if file was modified)
|
|
67
|
+
* @param targetLang Target language code
|
|
68
|
+
* @param translations Translations to write
|
|
69
|
+
* @returns Updated xcstrings data
|
|
70
|
+
*/
|
|
71
|
+
export declare function writeXCStringsTranslations(filePath: string, currentData: XCStringsFile, targetLang: string, translations: KeyValue[]): Promise<XCStringsFile>;
|
|
72
|
+
//# sourceMappingURL=xcstrings-sync-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xcstrings-sync-handler.d.ts","sourceRoot":"","sources":["../../src/handlers/xcstrings-sync-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAKL,KAAK,aAAa,EACnB,MAAM,8BAA8B,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,EAAE,QAAQ,EAAE,CAAC;IACxB,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,MAAM,GACd,mBAAmB,GAAG,IAAI,CAW5B;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,MAAM,GACjB,GAAG,CAAC,MAAM,CAAC,CAWb;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,QAAQ,EAAE,GACxB,OAAO,CAIT;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,mBAAmB,EAC/B,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,EAC5C,YAAY,EAAE,QAAQ,EAAE,EACxB,aAAa,EAAE,OAAO,EACtB,cAAc,EAAE,OAAO,EACvB,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,GACpB;IAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,CA+BtD;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,aAAa,EAC1B,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,QAAQ,EAAE,GACvB,OAAO,CAAC,aAAa,CAAC,CAqBxB"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* XCStrings Sync Handler
|
|
3
|
+
*
|
|
4
|
+
* Encapsulates xcstrings-specific sync logic for the sync_translations tool.
|
|
5
|
+
* XCStrings files are unique because all languages are stored in a single file.
|
|
6
|
+
*/
|
|
7
|
+
import { readFile, writeFile } from "fs/promises";
|
|
8
|
+
import { parseXCStringsContent, updateXCStringsLocale, reconstructXCStringsContent, extractLocaleFromXCStrings, } from "../utils/xcstrings-parser.js";
|
|
9
|
+
/**
|
|
10
|
+
* Parse an xcstrings source file
|
|
11
|
+
*
|
|
12
|
+
* @param file LocaleFile metadata
|
|
13
|
+
* @param content Raw file content
|
|
14
|
+
* @returns Parsed data or null if invalid
|
|
15
|
+
*/
|
|
16
|
+
export function parseXCStringsSource(file, content) {
|
|
17
|
+
const parsed = parseXCStringsContent(content);
|
|
18
|
+
if (!parsed) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
file,
|
|
23
|
+
flatContent: parsed.entries,
|
|
24
|
+
xcstringsData: parsed.metadata,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Get the set of keys that exist in a target language within xcstrings
|
|
29
|
+
*
|
|
30
|
+
* @param xcstringsData Parsed xcstrings data
|
|
31
|
+
* @param targetLang Target language code
|
|
32
|
+
* @returns Set of keys that have non-empty translations
|
|
33
|
+
*/
|
|
34
|
+
export function getXCStringsExistingKeys(xcstringsData, targetLang) {
|
|
35
|
+
const targetEntries = extractLocaleFromXCStrings(xcstringsData, targetLang);
|
|
36
|
+
const existingKeys = new Set();
|
|
37
|
+
for (const entry of targetEntries) {
|
|
38
|
+
if (entry.value && entry.value.trim() !== "") {
|
|
39
|
+
existingKeys.add(entry.key);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return existingKeys;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Check if a target language has any missing keys compared to source
|
|
46
|
+
*
|
|
47
|
+
* @param xcstringsData Parsed xcstrings data
|
|
48
|
+
* @param targetLang Target language code
|
|
49
|
+
* @param sourceContent Source language content
|
|
50
|
+
* @returns true if any source keys are missing in target
|
|
51
|
+
*/
|
|
52
|
+
export function xcstringsHasMissingKeys(xcstringsData, targetLang, sourceContent) {
|
|
53
|
+
const existingTargetKeys = getXCStringsExistingKeys(xcstringsData, targetLang);
|
|
54
|
+
return sourceContent.some((item) => !existingTargetKeys.has(item.key));
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Determine what content needs to be synced for xcstrings
|
|
58
|
+
*
|
|
59
|
+
* @param sourceData Parsed xcstrings source data
|
|
60
|
+
* @param targetLang Target language code
|
|
61
|
+
* @param cachedContent Cached content from previous sync (null if no cache)
|
|
62
|
+
* @param deltaContent Content that changed since last sync
|
|
63
|
+
* @param isMissingLang Whether the target language is completely missing
|
|
64
|
+
* @param hasMissingKeys Whether target has any missing keys
|
|
65
|
+
* @param skipKeys Set of keys to skip for this language
|
|
66
|
+
* @returns Content to sync (after filtering skip keys)
|
|
67
|
+
*/
|
|
68
|
+
export function getXCStringsContentToSync(sourceData, targetLang, cachedContent, deltaContent, isMissingLang, hasMissingKeys, skipKeys) {
|
|
69
|
+
let contentToSync;
|
|
70
|
+
if (isMissingLang) {
|
|
71
|
+
// New language: sync all source content
|
|
72
|
+
contentToSync = sourceData.flatContent;
|
|
73
|
+
}
|
|
74
|
+
else if (!cachedContent || hasMissingKeys) {
|
|
75
|
+
// No cache OR target has missing translations: sync missing keys
|
|
76
|
+
const existingTargetKeys = getXCStringsExistingKeys(sourceData.xcstringsData, targetLang);
|
|
77
|
+
contentToSync = sourceData.flatContent.filter((item) => !existingTargetKeys.has(item.key));
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
// Has cache: use delta
|
|
81
|
+
contentToSync = deltaContent;
|
|
82
|
+
}
|
|
83
|
+
// Apply skip_keys filter
|
|
84
|
+
const skippedKeys = [];
|
|
85
|
+
const filteredContent = contentToSync.filter((item) => {
|
|
86
|
+
if (skipKeys.has(item.key)) {
|
|
87
|
+
skippedKeys.push(item.key);
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
return true;
|
|
91
|
+
});
|
|
92
|
+
return { contentToSync: filteredContent, skippedKeys };
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Write translations to an xcstrings file
|
|
96
|
+
*
|
|
97
|
+
* Reads the current file state, updates the target language, and writes back.
|
|
98
|
+
* Returns the updated xcstrings data for subsequent language updates.
|
|
99
|
+
*
|
|
100
|
+
* @param filePath Path to the xcstrings file
|
|
101
|
+
* @param currentData Current xcstrings data (may be stale if file was modified)
|
|
102
|
+
* @param targetLang Target language code
|
|
103
|
+
* @param translations Translations to write
|
|
104
|
+
* @returns Updated xcstrings data
|
|
105
|
+
*/
|
|
106
|
+
export async function writeXCStringsTranslations(filePath, currentData, targetLang, translations) {
|
|
107
|
+
// Read current state of the file (may have been updated by previous language)
|
|
108
|
+
let xcstringsData = currentData;
|
|
109
|
+
try {
|
|
110
|
+
const currentContent = await readFile(filePath, "utf-8");
|
|
111
|
+
const parsed = parseXCStringsContent(currentContent);
|
|
112
|
+
if (parsed) {
|
|
113
|
+
xcstringsData = parsed.metadata;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
// Use provided data if file can't be read
|
|
118
|
+
}
|
|
119
|
+
// Update the target language
|
|
120
|
+
const updatedData = updateXCStringsLocale(xcstringsData, targetLang, translations);
|
|
121
|
+
// Write back to file
|
|
122
|
+
const fileContent = reconstructXCStringsContent(updatedData);
|
|
123
|
+
await writeFile(filePath, fileContent, "utf-8");
|
|
124
|
+
return updatedData;
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=xcstrings-sync-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xcstrings-sync-handler.js","sourceRoot":"","sources":["../../src/handlers/xcstrings-sync-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/locale-detection/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/locale-detection/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAsBH,MAAM,WAAW,UAAU;IACzB,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,uBAAuB;IACvB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,2CAA2C;IAC3C,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,+BAA+B;IAC/B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,2BAA2B;IAC3B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,wCAAwC;IACxC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,eAAe,UAAO,GACrB,OAAO,CAAC,qBAAqB,CAAC,CAgChC"}
|
|
@@ -8,6 +8,11 @@ import { join, basename, dirname, relative } from "path";
|
|
|
8
8
|
import { existsSync } from "fs";
|
|
9
9
|
import { FRAMEWORK_PATTERNS, isLikelyLanguageCode, } from "./patterns.js";
|
|
10
10
|
import { countKeys, parseJsonSafe } from "../utils/json-parser.js";
|
|
11
|
+
import { getLocaleFileExtension } from "../utils/arb-parser.js";
|
|
12
|
+
import { detectAppleFileType, extractLanguageFromLproj, isXCStringsFile, } from "../utils/apple-common.js";
|
|
13
|
+
import { parseStringsContent } from "../utils/strings-parser.js";
|
|
14
|
+
import { parseXCStringsContent } from "../utils/xcstrings-parser.js";
|
|
15
|
+
import { parseStringsDictContent } from "../utils/stringsdict-parser.js";
|
|
11
16
|
/**
|
|
12
17
|
* Detect i18n framework and locale files in a project
|
|
13
18
|
*/
|
|
@@ -100,6 +105,44 @@ async function findLocaleFiles(projectPath, pattern) {
|
|
|
100
105
|
async function groupByLanguage(projectPath, files, includeKeyCount) {
|
|
101
106
|
const languageMap = new Map();
|
|
102
107
|
for (const filePath of files) {
|
|
108
|
+
// Handle xcstrings specially - contains multiple languages in one file
|
|
109
|
+
if (isXCStringsFile(filePath)) {
|
|
110
|
+
try {
|
|
111
|
+
const content = await readFile(filePath, "utf-8");
|
|
112
|
+
const parsed = parseXCStringsContent(content);
|
|
113
|
+
if (parsed) {
|
|
114
|
+
const relativePath = relative(projectPath, filePath);
|
|
115
|
+
const keyCount = includeKeyCount ? parsed.entries.length : 0;
|
|
116
|
+
// Add an entry for each language in the xcstrings file
|
|
117
|
+
for (const [lang, entries] of parsed.allLocalizations) {
|
|
118
|
+
const localeFile = {
|
|
119
|
+
path: filePath,
|
|
120
|
+
relativePath,
|
|
121
|
+
namespace: null,
|
|
122
|
+
keyCount: includeKeyCount ? entries.length : 0,
|
|
123
|
+
};
|
|
124
|
+
if (!languageMap.has(lang)) {
|
|
125
|
+
languageMap.set(lang, []);
|
|
126
|
+
}
|
|
127
|
+
languageMap.get(lang).push(localeFile);
|
|
128
|
+
}
|
|
129
|
+
// Also add source language if not already present
|
|
130
|
+
if (!languageMap.has(parsed.sourceLanguage)) {
|
|
131
|
+
const localeFile = {
|
|
132
|
+
path: filePath,
|
|
133
|
+
relativePath,
|
|
134
|
+
namespace: null,
|
|
135
|
+
keyCount,
|
|
136
|
+
};
|
|
137
|
+
languageMap.set(parsed.sourceLanguage, [localeFile]);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
// Ignore read errors
|
|
143
|
+
}
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
103
146
|
const lang = extractLanguageFromPath(filePath);
|
|
104
147
|
if (!lang)
|
|
105
148
|
continue;
|
|
@@ -107,9 +150,23 @@ async function groupByLanguage(projectPath, files, includeKeyCount) {
|
|
|
107
150
|
if (includeKeyCount) {
|
|
108
151
|
try {
|
|
109
152
|
const content = await readFile(filePath, "utf-8");
|
|
110
|
-
const
|
|
111
|
-
if (
|
|
112
|
-
|
|
153
|
+
const appleType = detectAppleFileType(filePath);
|
|
154
|
+
if (appleType === "strings") {
|
|
155
|
+
const parsed = parseStringsContent(content);
|
|
156
|
+
keyCount = parsed.entries.length;
|
|
157
|
+
}
|
|
158
|
+
else if (appleType === "stringsdict") {
|
|
159
|
+
const parsed = parseStringsDictContent(content);
|
|
160
|
+
if (parsed) {
|
|
161
|
+
keyCount = parsed.entries.length;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
// JSON or ARB files
|
|
166
|
+
const parsed = parseJsonSafe(content);
|
|
167
|
+
if (parsed) {
|
|
168
|
+
keyCount = countKeys(parsed);
|
|
169
|
+
}
|
|
113
170
|
}
|
|
114
171
|
}
|
|
115
172
|
catch {
|
|
@@ -118,7 +175,9 @@ async function groupByLanguage(projectPath, files, includeKeyCount) {
|
|
|
118
175
|
}
|
|
119
176
|
const relativePath = relative(projectPath, filePath);
|
|
120
177
|
const dirName = basename(dirname(filePath));
|
|
121
|
-
|
|
178
|
+
// For .lproj directories, the dir name includes .lproj suffix
|
|
179
|
+
const cleanDirName = dirName.replace(/\.lproj$/i, "");
|
|
180
|
+
const namespace = cleanDirName !== lang && !isLikelyLanguageCode(cleanDirName) ? cleanDirName : null;
|
|
122
181
|
const localeFile = {
|
|
123
182
|
path: filePath,
|
|
124
183
|
relativePath,
|
|
@@ -139,15 +198,29 @@ async function groupByLanguage(projectPath, files, includeKeyCount) {
|
|
|
139
198
|
}
|
|
140
199
|
/**
|
|
141
200
|
* Extract language code from file path
|
|
142
|
-
* Supports patterns like:
|
|
201
|
+
* Supports patterns like:
|
|
202
|
+
* - /locales/en.json, /messages/en/common.json, /public/locales/en/translation.json
|
|
203
|
+
* - /lib/l10n/app_en.arb (Flutter underscore pattern)
|
|
204
|
+
* - /en.lproj/Localizable.strings (iOS/macOS .lproj directory pattern)
|
|
143
205
|
*/
|
|
144
206
|
function extractLanguageFromPath(filePath) {
|
|
207
|
+
// Check for iOS/macOS .lproj directory pattern first
|
|
208
|
+
const lprojLang = extractLanguageFromLproj(filePath);
|
|
209
|
+
if (lprojLang) {
|
|
210
|
+
return lprojLang;
|
|
211
|
+
}
|
|
145
212
|
const parts = filePath.split("/");
|
|
146
|
-
const
|
|
147
|
-
|
|
213
|
+
const ext = getLocaleFileExtension(filePath);
|
|
214
|
+
const fileName = basename(filePath, ext);
|
|
215
|
+
// Check if filename is a language code (e.g., en.json, en.arb)
|
|
148
216
|
if (isLikelyLanguageCode(fileName)) {
|
|
149
217
|
return fileName;
|
|
150
218
|
}
|
|
219
|
+
// Check Flutter-style underscore pattern (e.g., app_en.arb, intl_de.arb)
|
|
220
|
+
const underscoreMatch = fileName.match(/_([a-z]{2}(?:-[A-Z]{2})?)$/);
|
|
221
|
+
if (underscoreMatch && isLikelyLanguageCode(underscoreMatch[1])) {
|
|
222
|
+
return underscoreMatch[1];
|
|
223
|
+
}
|
|
151
224
|
// Check parent directories for language code
|
|
152
225
|
for (let i = parts.length - 2; i >= 0; i--) {
|
|
153
226
|
if (isLikelyLanguageCode(parts[i])) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/locale-detection/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,GAErB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/locale-detection/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../src/locale-detection/patterns.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,qCAAqC;IACrC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../src/locale-detection/patterns.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,qCAAqC;IACrC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAgH/D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,UAoDjC,CAAC;AAEF;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOzD"}
|
|
@@ -52,6 +52,43 @@ export const FRAMEWORK_PATTERNS = {
|
|
|
52
52
|
],
|
|
53
53
|
configPattern: /react-intl|IntlProvider|formatMessage/,
|
|
54
54
|
},
|
|
55
|
+
flutter: {
|
|
56
|
+
configFiles: ["pubspec.yaml", "l10n.yaml", "lib/l10n.dart"],
|
|
57
|
+
localeGlobs: [
|
|
58
|
+
"lib/l10n/*.arb",
|
|
59
|
+
"l10n/*.arb",
|
|
60
|
+
"assets/l10n/*.arb",
|
|
61
|
+
"assets/translations/*.arb",
|
|
62
|
+
"lib/src/l10n/*.arb",
|
|
63
|
+
],
|
|
64
|
+
configPattern: /flutter_localizations|intl|flutter_gen/,
|
|
65
|
+
},
|
|
66
|
+
"ios-macos": {
|
|
67
|
+
configFiles: [
|
|
68
|
+
"*.xcodeproj/project.pbxproj",
|
|
69
|
+
"*.xcworkspace/contents.xcworkspacedata",
|
|
70
|
+
"Package.swift",
|
|
71
|
+
"Info.plist",
|
|
72
|
+
],
|
|
73
|
+
localeGlobs: [
|
|
74
|
+
// .lproj directory structure
|
|
75
|
+
"*.lproj/Localizable.strings",
|
|
76
|
+
"*.lproj/Localizable.stringsdict",
|
|
77
|
+
"*.lproj/*.strings",
|
|
78
|
+
"*.lproj/*.stringsdict",
|
|
79
|
+
// Nested in Resources or Sources
|
|
80
|
+
"Resources/*.lproj/*.strings",
|
|
81
|
+
"Resources/*.lproj/*.stringsdict",
|
|
82
|
+
"**/Resources/*.lproj/*.strings",
|
|
83
|
+
"**/Resources/*.lproj/*.stringsdict",
|
|
84
|
+
"Sources/**/*.lproj/*.strings",
|
|
85
|
+
// String Catalogs (single file with all languages)
|
|
86
|
+
"*.xcstrings",
|
|
87
|
+
"**/Localizable.xcstrings",
|
|
88
|
+
"**/*.xcstrings",
|
|
89
|
+
],
|
|
90
|
+
configPattern: /import\s+(UIKit|AppKit|SwiftUI|Foundation)|NSLocalizedString/,
|
|
91
|
+
},
|
|
55
92
|
generic: {
|
|
56
93
|
configFiles: [],
|
|
57
94
|
localeGlobs: [
|
|
@@ -66,6 +103,14 @@ export const FRAMEWORK_PATTERNS = {
|
|
|
66
103
|
"src/lang/*.json",
|
|
67
104
|
"src/messages/*.json",
|
|
68
105
|
"public/locales/*.json",
|
|
106
|
+
// ARB files (Flutter)
|
|
107
|
+
"lib/l10n/*.arb",
|
|
108
|
+
"l10n/*.arb",
|
|
109
|
+
"locales/*.arb",
|
|
110
|
+
// iOS/macOS files
|
|
111
|
+
"*.lproj/*.strings",
|
|
112
|
+
"*.lproj/*.stringsdict",
|
|
113
|
+
"*.xcstrings",
|
|
69
114
|
],
|
|
70
115
|
},
|
|
71
116
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/locale-detection/patterns.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,MAAM,CAAC,MAAM,kBAAkB,GAAqC;IAClE,WAAW,EAAE;QACX,WAAW,EAAE;YACX,gBAAgB;YAChB,iBAAiB;YACjB,gBAAgB;YAChB,SAAS;YACT,SAAS;YACT,aAAa;YACb,aAAa;SACd;QACD,WAAW,EAAE;YACX,iBAAiB;YACjB,mBAAmB;YACnB,gBAAgB;YAChB,kBAAkB;YAClB,qBAAqB;YACrB,oBAAoB;SACrB;QACD,aAAa,EAAE,uDAAuD;KACvE;IACD,OAAO,EAAE;QACP,WAAW,EAAE;YACX,SAAS;YACT,SAAS;YACT,mBAAmB;YACnB,mBAAmB;YACnB,wBAAwB;YACxB,mBAAmB;YACnB,mBAAmB;SACpB;QACD,WAAW,EAAE;YACX,yBAAyB;YACzB,kBAAkB;YAClB,sBAAsB;YACtB,yBAAyB;YACzB,2BAA2B;YAC3B,uBAAuB;SACxB;QACD,aAAa,EAAE,oCAAoC;KACpD;IACD,YAAY,EAAE;QACZ,WAAW,EAAE,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,aAAa,CAAC;QACtE,WAAW,EAAE;YACX,iBAAiB;YACjB,oBAAoB;YACpB,aAAa;YACb,sBAAsB;SACvB;QACD,aAAa,EAAE,uCAAuC;KACvD;IACD,OAAO,EAAE;QACP,WAAW,EAAE,EAAE;QACf,WAAW,EAAE;YACX,gBAAgB;YAChB,qBAAqB;YACrB,aAAa;YACb,aAAa;YACb,iBAAiB;YACjB,oBAAoB;YACpB,yBAAyB;YACzB,iBAAiB;YACjB,iBAAiB;YACjB,qBAAqB;YACrB,uBAAuB;
|
|
1
|
+
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/locale-detection/patterns.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-translation-status.d.ts","sourceRoot":"","sources":["../../src/tools/get-translation-status.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"get-translation-status.d.ts","sourceRoot":"","sources":["../../src/tools/get-translation-status.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,QAAA,MAAM,0BAA0B;;;;;;;;;;;;EAY9B,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAGnF,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;IAC1C,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,KAAK,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC;CACH;AAED,UAAU,YAAY;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,aAAa,EAAE,YAAY,GAAG,IAAI,CAAC;CACpC;AAkBD;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8MpE"}
|
|
@@ -7,6 +7,8 @@ import { readFile } from "fs/promises";
|
|
|
7
7
|
import { detectLocales } from "../locale-detection/index.js";
|
|
8
8
|
import { getAllKeys, parseJsonSafe, flattenJson } from "../utils/json-parser.js";
|
|
9
9
|
import { LangAPIClient } from "../api/client.js";
|
|
10
|
+
import { isXCStringsFile } from "../utils/apple-common.js";
|
|
11
|
+
import { parseXCStringsContent, extractLocaleFromXCStrings } from "../utils/xcstrings-parser.js";
|
|
10
12
|
import { languageCodeSchema } from "../utils/validation.js";
|
|
11
13
|
// Input schema
|
|
12
14
|
const GetTranslationStatusSchema = z.object({
|
|
@@ -52,9 +54,22 @@ export function registerGetTranslationStatus(server) {
|
|
|
52
54
|
const sourceContent = {};
|
|
53
55
|
for (const file of sourceLocale.files) {
|
|
54
56
|
const content = await readFile(file.path, "utf-8");
|
|
55
|
-
|
|
56
|
-
if (
|
|
57
|
-
|
|
57
|
+
// Handle xcstrings files specially
|
|
58
|
+
if (isXCStringsFile(file.path)) {
|
|
59
|
+
const parsed = parseXCStringsContent(content);
|
|
60
|
+
if (parsed) {
|
|
61
|
+
// Extract the user-specified source language translations
|
|
62
|
+
const entries = extractLocaleFromXCStrings(parsed.metadata, input.source_lang);
|
|
63
|
+
for (const entry of entries) {
|
|
64
|
+
sourceContent[entry.key] = entry.value;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
const parsed = parseJsonSafe(content);
|
|
70
|
+
if (parsed) {
|
|
71
|
+
Object.assign(sourceContent, parsed);
|
|
72
|
+
}
|
|
58
73
|
}
|
|
59
74
|
}
|
|
60
75
|
const sourceKeys = getAllKeys(sourceContent);
|
|
@@ -90,9 +105,22 @@ export function registerGetTranslationStatus(server) {
|
|
|
90
105
|
for (const file of targetLocale.files) {
|
|
91
106
|
try {
|
|
92
107
|
const content = await readFile(file.path, "utf-8");
|
|
93
|
-
|
|
94
|
-
if (
|
|
95
|
-
|
|
108
|
+
// Handle xcstrings files specially
|
|
109
|
+
if (isXCStringsFile(file.path)) {
|
|
110
|
+
const parsed = parseXCStringsContent(content);
|
|
111
|
+
if (parsed) {
|
|
112
|
+
// Extract only the target language translations
|
|
113
|
+
const entries = extractLocaleFromXCStrings(parsed.metadata, targetLang);
|
|
114
|
+
for (const entry of entries) {
|
|
115
|
+
targetContent[entry.key] = entry.value;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
const parsed = parseJsonSafe(content);
|
|
121
|
+
if (parsed) {
|
|
122
|
+
Object.assign(targetContent, parsed);
|
|
123
|
+
}
|
|
96
124
|
}
|
|
97
125
|
}
|
|
98
126
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-translation-status.js","sourceRoot":"","sources":["../../src/tools/get-translation-status.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,eAAe;AACf,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,WAAW,EAAE,kBAAkB,CAAC,QAAQ,CAAC,4CAA4C,CAAC;IACtF,YAAY,EAAE,CAAC;SACZ,KAAK,CAAC,kBAAkB,CAAC;SACzB,QAAQ,EAAE;SACV,QAAQ,CACP,0FAA0F,CAC3F;IACH,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,kEAAkE,CAAC;CAChF,CAAC,CAAC;AA6BH;;GAEG;AACH,SAAS,UAAU,CAAC,IAAY;IAC9B,mEAAmE;IACnE,MAAM,OAAO,GAAG,IAAI;SACjB,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;SAC7B,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;SACzB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAE/B,cAAc;IACd,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtE,OAAO,KAAK,CAAC,MAAM,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAAiB;IAC5D,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,gHAAgH,EAChH,0BAA0B,CAAC,KAAK,EAChC,KAAK,EAAE,IAAI,EAA+D,EAAE;QAC1E,MAAM,KAAK,GAAG,0BAA0B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAExD,iBAAiB;QACjB,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAEzD,qBAAqB;QACrB,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CACzC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,WAAW,CACpC,CAAC;QACF,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,oBAAoB,KAAK,CAAC,WAAW,wBAAwB,CAAC,CAAC;QACjF,CAAC;QAED,8BAA8B;QAC9B,MAAM,aAAa,GAA4B,EAAE,CAAC;QAClD,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;YACtC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"get-translation-status.js","sourceRoot":"","sources":["../../src/tools/get-translation-status.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* list_local_locales MCP Tool
|
|
3
|
-
* Scans project for locale JSON
|
|
3
|
+
* Scans project for locale files (JSON, ARB, .strings, .xcstrings, .stringsdict) and detects i18n framework
|
|
4
4
|
*/
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* list_local_locales MCP Tool
|
|
3
|
-
* Scans project for locale JSON
|
|
3
|
+
* Scans project for locale files (JSON, ARB, .strings, .xcstrings, .stringsdict) and detects i18n framework
|
|
4
4
|
*/
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
import { detectLocales } from "../locale-detection/index.js";
|
|
@@ -19,7 +19,7 @@ const ListLocalLocalesSchema = z.object({
|
|
|
19
19
|
* Register the list_local_locales tool with the MCP server
|
|
20
20
|
*/
|
|
21
21
|
export function registerListLocalLocales(server) {
|
|
22
|
-
server.tool("list_local_locales", "Scan project for locale JSON
|
|
22
|
+
server.tool("list_local_locales", "Scan project for locale files (JSON, ARB, .strings, .xcstrings, .stringsdict), detect i18n framework (next-intl, i18next, react-intl, flutter, ios-macos, generic), and return structured information about available translations.", ListLocalLocalesSchema.shape, async (args) => {
|
|
23
23
|
const input = ListLocalLocalesSchema.parse(args);
|
|
24
24
|
const projectPath = input.project_path || process.cwd();
|
|
25
25
|
const result = await detectLocales(projectPath, input.include_key_count);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-local-locales.js","sourceRoot":"","sources":["../../src/tools/list-local-locales.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,eAAe;AACf,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,0EAA0E,CAC3E;IACH,iBAAiB,EAAE,CAAC;SACjB,OAAO,EAAE;SACT,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,2CAA2C,CAAC;CACzD,CAAC,CAAC;AAsBH;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,
|
|
1
|
+
{"version":3,"file":"list-local-locales.js","sourceRoot":"","sources":["../../src/tools/list-local-locales.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,eAAe;AACf,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,0EAA0E,CAC3E;IACH,iBAAiB,EAAE,CAAC;SACjB,OAAO,EAAE;SACT,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,2CAA2C,CAAC;CACzD,CAAC,CAAC;AAsBH;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,qOAAqO,EACrO,sBAAsB,CAAC,KAAK,EAC5B,KAAK,EAAE,IAAI,EAA+D,EAAE;QAC1E,MAAM,KAAK,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAExD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAEzE,MAAM,MAAM,GAA2B;YACrC,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,WAAW,EAAE,MAAM,CAAC,UAAU;YAC9B,YAAY,EAAE,MAAM,CAAC,WAAW;YAChC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACvC,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBACjC,IAAI,EAAE,IAAI,CAAC,YAAY;oBACvB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,SAAS,EAAE,IAAI,CAAC,QAAQ;iBACzB,CAAC,CAAC;gBACH,UAAU,EAAE,MAAM,CAAC,SAAS;aAC7B,CAAC,CAAC;YACH,WAAW,EAAE,MAAM,CAAC,UAAU;SAC/B,CAAC;QAEF,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;iBACtC;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-translations.d.ts","sourceRoot":"","sources":["../../src/tools/sync-translations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-translations.d.ts","sourceRoot":"","sources":["../../src/tools/sync-translations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAwDzE,QAAA,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;EAqB1B,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AA8N3E;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAk1BhE"}
|