diff --git a/src/pages/api-keys/components/add-apikey-modal/form.tsx b/src/pages/api-keys/components/add-apikey-modal/form.tsx
index 9f905b8a..911203a7 100644
--- a/src/pages/api-keys/components/add-apikey-modal/form.tsx
+++ b/src/pages/api-keys/components/add-apikey-modal/form.tsx
@@ -45,7 +45,10 @@ const APIKeyForm: React.FC<{
>
-
+
name="expires_in"
diff --git a/src/plugins/locale-merger.ts b/src/plugins/locale-merger.ts
index 71a1450d..6dcc28fd 100644
--- a/src/plugins/locale-merger.ts
+++ b/src/plugins/locale-merger.ts
@@ -1,32 +1,27 @@
import { addLocale } from '@umijs/max';
-const mergedLocales = new Set();
-
/**
- * Merge enterprise plugin locales into the main application
+ * Merge enterprise plugin locales into the main application.
+ *
+ * `addLocale` is idempotent: re-calling with the latest message dict
+ * overwrites previous entries, so we always pass the freshest plugin
+ * locales through. A previous version deduped via a module-level Set
+ * and that broke HMR — newly added keys in plugin locale files were
+ * skipped on the second merge, leaving the placeholder/validation
+ * strings unresolved until a full server restart.
*/
export function mergeEnterpriseLocales(locales: Record = {}) {
if (!locales) {
return;
}
- console.log('Merging enterprise plugin locales:', Object.keys(locales));
-
- // Iterate over all locale configurations of the enterprise plugin
Object.entries(locales).forEach(([locale, messages]) => {
try {
- if (mergedLocales.has(locale)) {
- return;
- }
-
- // Merge the enterprise locale into the main application
addLocale(locale, messages, {
momentLocale: '',
// @ts-ignore
antd: locale
});
- mergedLocales.add(locale);
- console.log(`✓ Merged enterprise locale: ${locale}`, messages);
} catch (error) {
console.error(`Failed to merge enterprise locale ${locale}:`, error);
}