mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-03-24 00:58:22 +03:00
52 lines
1.6 KiB
TypeScript
52 lines
1.6 KiB
TypeScript
|
|
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()],
|
||
|
|
});
|