frigate/web/i18next.config.ts

52 lines
1.6 KiB
TypeScript
Raw Normal View History

import { defineConfig, type Plugin } from "i18next-cli";
/**
* Plugin to remove false positive keys generated by dynamic namespace patterns
* like useTranslation([i18nLibrary]) and t("key", { ns: configNamespace }).
* These keys already exist in their correct runtime namespaces.
*/
function ignoreDynamicNamespaceKeys(): Plugin {
// Keys that the extractor misattributes to the wrong namespace
// because it can't resolve dynamic ns values at build time.
const falsePositiveKeys = new Set([
// From useTranslation([i18nLibrary]) in ClassificationCard.tsx
// Already in views/classificationModel and views/faceLibrary
"details.unknown",
"details.none",
// From t("key", { ns: configNamespace }) in DetectorHardwareField.tsx
// Already in config/global
"detectors.type.label",
// From t(`${prefix}`) template literals producing empty/partial keys
"",
"_one",
"_other",
]);
return {
name: "ignore-dynamic-namespace-keys",
onEnd: async (keys) => {
for (const key of keys.keys()) {
// Each map key is "ns:actualKey" format
const separatorIndex = key.indexOf(":");
const actualKey =
separatorIndex >= 0 ? key.slice(separatorIndex + 1) : key;
if (falsePositiveKeys.has(actualKey)) {
keys.delete(key);
}
}
},
};
}
export default defineConfig({
locales: ["en"],
extract: {
input: ["src/**/*.{ts,tsx}"],
output: "public/locales/{{language}}/{{namespace}}.json",
defaultNS: "common",
removeUnusedKeys: false,
sort: false,
},
plugins: [ignoreDynamicNamespaceKeys()],
});