@langapi/mcp-server 1.0.7 → 1.1.1
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 +68 -4
- 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 +30 -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 +199 -40
- 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/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 +2 -3
|
@@ -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":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,2BAA2B,EAC3B,0BAA0B,GAE3B,MAAM,8BAA8B,CAAC;AAWtC;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAgB,EAChB,OAAe;IAEf,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,IAAI;QACJ,WAAW,EAAE,MAAM,CAAC,OAAO;QAC3B,aAAa,EAAE,MAAM,CAAC,QAAQ;KAC/B,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CACtC,aAA4B,EAC5B,UAAkB;IAElB,MAAM,aAAa,GAAG,0BAA0B,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAC5E,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IAEvC,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC7C,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CACrC,aAA4B,EAC5B,UAAkB,EAClB,aAAyB;IAEzB,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAE/E,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACzE,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,yBAAyB,CACvC,UAA+B,EAC/B,UAAkB,EAClB,aAA4C,EAC5C,YAAwB,EACxB,aAAsB,EACtB,cAAuB,EACvB,QAAqB;IAErB,IAAI,aAAyB,CAAC;IAE9B,IAAI,aAAa,EAAE,CAAC;QAClB,wCAAwC;QACxC,aAAa,GAAG,UAAU,CAAC,WAAW,CAAC;IACzC,CAAC;SAAM,IAAI,CAAC,aAAa,IAAI,cAAc,EAAE,CAAC;QAC5C,iEAAiE;QACjE,MAAM,kBAAkB,GAAG,wBAAwB,CACjD,UAAU,CAAC,aAAa,EACxB,UAAU,CACX,CAAC;QACF,aAAa,GAAG,UAAU,CAAC,WAAW,CAAC,MAAM,CAC3C,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAC5C,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,uBAAuB;QACvB,aAAa,GAAG,YAAY,CAAC;IAC/B,CAAC;IAED,yBAAyB;IACzB,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACpD,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC;AACzD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,QAAgB,EAChB,WAA0B,EAC1B,UAAkB,EAClB,YAAwB;IAExB,8EAA8E;IAC9E,IAAI,aAAa,GAAG,WAAW,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,qBAAqB,CAAC,cAAc,CAAC,CAAC;QACrD,IAAI,MAAM,EAAE,CAAC;YACX,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC;QAClC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,0CAA0C;IAC5C,CAAC;IAED,6BAA6B;IAC7B,MAAM,WAAW,GAAG,qBAAqB,CAAC,aAAa,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;IAEnF,qBAAqB;IACrB,MAAM,WAAW,GAAG,2BAA2B,CAAC,WAAW,CAAC,CAAC;IAC7D,MAAM,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAEhD,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
@@ -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"}
|
|
@@ -9,6 +9,10 @@ import { existsSync } from "fs";
|
|
|
9
9
|
import { FRAMEWORK_PATTERNS, isLikelyLanguageCode, } from "./patterns.js";
|
|
10
10
|
import { countKeys, parseJsonSafe } from "../utils/json-parser.js";
|
|
11
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";
|
|
12
16
|
/**
|
|
13
17
|
* Detect i18n framework and locale files in a project
|
|
14
18
|
*/
|
|
@@ -101,6 +105,44 @@ async function findLocaleFiles(projectPath, pattern) {
|
|
|
101
105
|
async function groupByLanguage(projectPath, files, includeKeyCount) {
|
|
102
106
|
const languageMap = new Map();
|
|
103
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
|
+
}
|
|
104
146
|
const lang = extractLanguageFromPath(filePath);
|
|
105
147
|
if (!lang)
|
|
106
148
|
continue;
|
|
@@ -108,9 +150,23 @@ async function groupByLanguage(projectPath, files, includeKeyCount) {
|
|
|
108
150
|
if (includeKeyCount) {
|
|
109
151
|
try {
|
|
110
152
|
const content = await readFile(filePath, "utf-8");
|
|
111
|
-
const
|
|
112
|
-
if (
|
|
113
|
-
|
|
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
|
+
}
|
|
114
170
|
}
|
|
115
171
|
}
|
|
116
172
|
catch {
|
|
@@ -119,7 +175,9 @@ async function groupByLanguage(projectPath, files, includeKeyCount) {
|
|
|
119
175
|
}
|
|
120
176
|
const relativePath = relative(projectPath, filePath);
|
|
121
177
|
const dirName = basename(dirname(filePath));
|
|
122
|
-
|
|
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;
|
|
123
181
|
const localeFile = {
|
|
124
182
|
path: filePath,
|
|
125
183
|
relativePath,
|
|
@@ -143,8 +201,14 @@ async function groupByLanguage(projectPath, files, includeKeyCount) {
|
|
|
143
201
|
* Supports patterns like:
|
|
144
202
|
* - /locales/en.json, /messages/en/common.json, /public/locales/en/translation.json
|
|
145
203
|
* - /lib/l10n/app_en.arb (Flutter underscore pattern)
|
|
204
|
+
* - /en.lproj/Localizable.strings (iOS/macOS .lproj directory pattern)
|
|
146
205
|
*/
|
|
147
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
|
+
}
|
|
148
212
|
const parts = filePath.split("/");
|
|
149
213
|
const ext = getLocaleFileExtension(filePath);
|
|
150
214
|
const fileName = basename(filePath, ext);
|
|
@@ -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;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,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"}
|
|
@@ -63,6 +63,32 @@ export const FRAMEWORK_PATTERNS = {
|
|
|
63
63
|
],
|
|
64
64
|
configPattern: /flutter_localizations|intl|flutter_gen/,
|
|
65
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
|
+
},
|
|
66
92
|
generic: {
|
|
67
93
|
configFiles: [],
|
|
68
94
|
localeGlobs: [
|
|
@@ -81,6 +107,10 @@ export const FRAMEWORK_PATTERNS = {
|
|
|
81
107
|
"lib/l10n/*.arb",
|
|
82
108
|
"l10n/*.arb",
|
|
83
109
|
"locales/*.arb",
|
|
110
|
+
// iOS/macOS files
|
|
111
|
+
"*.lproj/*.strings",
|
|
112
|
+
"*.lproj/*.stringsdict",
|
|
113
|
+
"*.xcstrings",
|
|
84
114
|
],
|
|
85
115
|
},
|
|
86
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,CAAC,cAAc,EAAE,WAAW,EAAE,eAAe,CAAC;QAC3D,WAAW,EAAE;YACX,gBAAgB;YAChB,YAAY;YACZ,mBAAmB;YACnB,2BAA2B;YAC3B,oBAAoB;SACrB;QACD,aAAa,EAAE,wCAAwC;KACxD;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;YACvB,sBAAsB;YACtB,gBAAgB;YAChB,YAAY;YACZ,eAAe;
|
|
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,CAAC,cAAc,EAAE,WAAW,EAAE,eAAe,CAAC;QAC3D,WAAW,EAAE;YACX,gBAAgB;YAChB,YAAY;YACZ,mBAAmB;YACnB,2BAA2B;YAC3B,oBAAoB;SACrB;QACD,aAAa,EAAE,wCAAwC;KACxD;IACD,WAAW,EAAE;QACX,WAAW,EAAE;YACX,6BAA6B;YAC7B,wCAAwC;YACxC,eAAe;YACf,YAAY;SACb;QACD,WAAW,EAAE;YACX,6BAA6B;YAC7B,6BAA6B;YAC7B,iCAAiC;YACjC,mBAAmB;YACnB,uBAAuB;YACvB,iCAAiC;YACjC,6BAA6B;YAC7B,iCAAiC;YACjC,gCAAgC;YAChC,oCAAoC;YACpC,8BAA8B;YAC9B,mDAAmD;YACnD,aAAa;YACb,0BAA0B;YAC1B,gBAAgB;SACjB;QACD,aAAa,EAAE,8DAA8D;KAC9E;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;YACvB,sBAAsB;YACtB,gBAAgB;YAChB,YAAY;YACZ,eAAe;YACf,kBAAkB;YAClB,mBAAmB;YACnB,uBAAuB;YACvB,aAAa;SACd;KACF;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,eAAe;IACf,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;CACR,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,0BAA0B;IAC1B,IAAI,qBAAqB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,wEAAwE;IACxE,OAAO,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -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 files (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 files (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 files (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"}
|