i18n-ai-translate
Version:
AI-powered localization CLI, Node library, and GitHub Action. Translate i18next JSON, Gettext PO, Java .properties, and iOS .strings with ChatGPT, Claude, Gemini, or local Ollama models.
60 lines • 2.3 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getAdapterByName = getAdapterByName;
exports.getAdapterByExtension = getAdapterByExtension;
exports.getAdapterForFile = getAdapterForFile;
exports.listFormatNames = listFormatNames;
const json_adapter_1 = __importDefault(require("./json_adapter"));
const po_adapter_1 = __importDefault(require("./po_adapter"));
const properties_adapter_1 = __importDefault(require("./properties_adapter"));
const strings_adapter_1 = __importDefault(require("./strings_adapter"));
const path_1 = __importDefault(require("path"));
// Sidecar types are adapter-private; the registry holds adapters with
// the sidecar type erased so we can dispatch on extension or name
// without leaking each format's internal shape.
const ADAPTERS = [
json_adapter_1.default,
po_adapter_1.default,
properties_adapter_1.default,
strings_adapter_1.default,
];
/**
* Look up an adapter by its `--format <name>` identifier.
* @param name - adapter name (e.g. `"json"`)
* @returns the matching adapter, or undefined
*/
function getAdapterByName(name) {
return ADAPTERS.find((a) => a.name === name);
}
/**
* Look up an adapter by file extension (leading dot included or not).
* @param ext - the file extension, case-insensitive
* @returns the matching adapter, or undefined
*/
function getAdapterByExtension(ext) {
const normalized = ext.startsWith(".")
? ext.toLowerCase()
: `.${ext.toLowerCase()}`;
return ADAPTERS.find((a) => a.extensions.includes(normalized));
}
/**
* Resolve an adapter from a filename, or fall back to the default
* JSON adapter. Used by the file wrappers when the caller hasn't
* passed `--format` explicitly.
* @param filename - the filename to inspect
* @returns the matching adapter, or the JSON default
*/
function getAdapterForFile(filename) {
const ext = path_1.default.extname(filename);
return getAdapterByExtension(ext) ?? json_adapter_1.default;
}
/**
* @returns the names of every registered adapter
*/
function listFormatNames() {
return ADAPTERS.map((a) => a.name);
}
//# sourceMappingURL=registry.js.map