From 74a0b78aeb6773efeab2785b2ea4b7726457773e Mon Sep 17 00:00:00 2001 From: hexlianine <1669264+hexlianine@users.noreply.github.com> Date: Sun, 8 Mar 2026 23:12:08 +0800 Subject: [PATCH 1/6] feat: complete Spanish translation and add Chinese language support - Complete missing keys in Spanish translations (MFALoginAction, MFAUserProperty) - Add Simplified Chinese translations for all UI components - Support locale files for MFAGlobalConfiguration, MFALoginAction, MFAManagementLink, MFASetupAction, and MFAUserProperty Co-Authored-By: Claude Opus 4.6 --- .../config_zh_CN.properties | 4 ++ .../MFALoginAction/index_es.properties | 4 ++ .../MFALoginAction/index_zh_CN.properties | 18 +++++++ .../MFAManagementLink/index_zh_CN.properties | 48 +++++++++++++++++++ .../MFASetupAction/index_zh_CN.properties | 31 ++++++++++++ .../MFAUserProperty/config_es.properties | 3 +- .../MFAUserProperty/config_zh_CN.properties | 8 ++++ 7 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/io/jenkins/plugins/openmfa/MFAGlobalConfiguration/config_zh_CN.properties create mode 100644 src/main/resources/io/jenkins/plugins/openmfa/MFALoginAction/index_zh_CN.properties create mode 100644 src/main/resources/io/jenkins/plugins/openmfa/MFAManagementLink/index_zh_CN.properties create mode 100644 src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/index_zh_CN.properties create mode 100644 src/main/resources/io/jenkins/plugins/openmfa/MFAUserProperty/config_zh_CN.properties diff --git a/src/main/resources/io/jenkins/plugins/openmfa/MFAGlobalConfiguration/config_zh_CN.properties b/src/main/resources/io/jenkins/plugins/openmfa/MFAGlobalConfiguration/config_zh_CN.properties new file mode 100644 index 0000000..2a660ad --- /dev/null +++ b/src/main/resources/io/jenkins/plugins/openmfa/MFAGlobalConfiguration/config_zh_CN.properties @@ -0,0 +1,4 @@ +config.section.title=OpenMFA \u914D\u7F6E +config.requireMFA.title=\u8981\u6C42\u6240\u6709\u7528\u6237\u542F\u7528 MFA +config.issuer.title=\u53D1\u884C\u8005\u540D\u79F0 +config.mfaManagement.title=MFA \u7528\u6237\u7BA1\u7406 diff --git a/src/main/resources/io/jenkins/plugins/openmfa/MFALoginAction/index_es.properties b/src/main/resources/io/jenkins/plugins/openmfa/MFALoginAction/index_es.properties index d07569d..6e6196d 100644 --- a/src/main/resources/io/jenkins/plugins/openmfa/MFALoginAction/index_es.properties +++ b/src/main/resources/io/jenkins/plugins/openmfa/MFALoginAction/index_es.properties @@ -10,5 +10,9 @@ please.login=Por favor inicie sesión primero. error.invalid.code=Código de verificación inválido. Por favor, intente de nuevo. error.locked.title=Cuenta Bloqueada Temporalmente error.locked.message=Demasiados intentos fallidos. Por favor, intente de nuevo en +mfa.enabled.info=La autenticación multifactor está habilitada en su cuenta. +mfa.already.verified=Ya ha completado la verificación MFA para esta sesión. Puede continuar usando Jenkins con seguridad. +continue.button=Continuar a Jenkins +redirect.in.seconds=Redirigiendo en {0} segundos... mfa.not.enabled.title=MFA no está habilitado mfa.not.enabled.message=No ha habilitado MFA. Habilite MFA ahora para mejorar la seguridad de su cuenta. diff --git a/src/main/resources/io/jenkins/plugins/openmfa/MFALoginAction/index_zh_CN.properties b/src/main/resources/io/jenkins/plugins/openmfa/MFALoginAction/index_zh_CN.properties new file mode 100644 index 0000000..e7ee3f1 --- /dev/null +++ b/src/main/resources/io/jenkins/plugins/openmfa/MFALoginAction/index_zh_CN.properties @@ -0,0 +1,18 @@ +# MFA Login Action Messages (Chinese Simplified) + +title=\u591A\u56E0\u7D20\u8BA4\u8BC1 +security.alt=\u5B89\u5168 +prompt=\u8BF7\u8F93\u5165\u60A8\u8BA4\u8BC1\u5668\u5E94\u7528\u4E2D\u7684 6 \u4F4D\u6570\u4EE3\u7801 +submit.button=\u9A8C\u8BC1 +lost.device=\u4E22\u5931\u4E86\u8BBE\u5907\uff1F\u8BF7\u8054\u7CFB\u60A8\u7684 Jenkins \u7BA1\u7406\u5458\u3002 +no.pending.auth=\u6CA1\u6709\u5F85\u5904\u7406\u7684\u8BA4\u8BC1 +please.login=\u8BF7\u5148\u767B\u5F55\u3002 +error.invalid.code=\u9A8C\u8BC1\u7801\u65E0\u6548\u3002\u8BF7\u91CD\u8BD5\u3002 +error.locked.title=\u8D26\u6237\u6682\u65F6\u88AB\u9501 +error.locked.message=\u5931\u8D25\u5C1D\u8BD5\u6B21\u6570\u8FC7\u591A\u3002\u8BF7\u5728\u4EE5\u4E0B\u65F6\u95F4\u540E\u91CD\u8BD5 +mfa.enabled.info=\u60A8\u7684\u8D26\u6237\u5DF2\u542F\u7528\u591A\u56E0\u7D20\u8BA4\u8BC1\u3002 +mfa.already.verified=\u60A8\u5DF2\u5B8C\u6210\u672C\u4F1A\u8BDD\u7684 MFA \u9A8C\u8BC1\u3002\u60A8\u53EF\u4EE5\u5B89\u5168\u5730\u7EE7\u7EED\u4F7F\u7528 Jenkins\u3002 +continue.button=\u7EE7\u7EED\u8BBF\u95EE Jenkins +redirect.in.seconds={0} \u79D2\u540E\u8DF3\u8F6C... +mfa.not.enabled.title=MFA \u672A\u542F\u7528 +mfa.not.enabled.message=\u60A8\u5C1A\u672A\u542F\u7528 MFA\u3002\u8BF7\u7ACB\u5373\u542F\u7528 MFA\u4EE5\u63D0\u9AD8\u8D26\u6237\u5B89\u5168\u6027\u3002 diff --git a/src/main/resources/io/jenkins/plugins/openmfa/MFAManagementLink/index_zh_CN.properties b/src/main/resources/io/jenkins/plugins/openmfa/MFAManagementLink/index_zh_CN.properties new file mode 100644 index 0000000..d4a4a1d --- /dev/null +++ b/src/main/resources/io/jenkins/plugins/openmfa/MFAManagementLink/index_zh_CN.properties @@ -0,0 +1,48 @@ +# MFA Management Dashboard - Chinese Simplified + +config.link=MFA \u63D2\u4EF6\u8BBE\u7F6E + +title=MFA \u7528\u6237\u7BA1\u7406 +subtitle=\u7BA1\u7406\u6240\u6709\u7528\u6237\u7684\u591A\u56E0\u7D20\u8BA4\u8BC1\u914D\u7F6E + +stats.total=\u7528\u6237\u603B\u6570 +stats.enabled=MFA \u5DF2\u542F\u7528 +stats.not.enabled=\u672A\u542F\u7528 + +users.title=\u7528\u6237 MFA \u72B6\u6001 +no.users=\u672A\u627E\u5230\u7CFB\u7EDF\u4E2D\u7684\u7528\u6237\u3002 + +table.user=\u7528\u6237 ID +table.fullname=\u59D3\u540D +table.status=MFA \u72B6\u6001 +table.status.disabled=\u672A\u542F\u7528 +table.actions=\u64CD\u4F5C + +reset.button=\u91CD\u7F6E MFA +reset.confirm.title=\u91CD\u7F6E MFA\uff1F +reset.confirm.messagePrefix=\u60A8\u786E\u5B9A\u8981\u4E3A\u7528\u6237 +reset.confirm.messageSuffix=\u91CD\u7F6E MFA \u5417\uFF1F\u8FD9\u5C06\u5220\u9664\u5176\u5F53\u524D\u7684 MFA \u914D\u7F6E\uFF0C\u4ED6\u4EEC\u9700\u8981\u91CD\u65B0\u8BBE\u7F6E MFA\u3002 +reset.confirm.cancel=\u53D6\u6D88 +reset.toast.title=\u6210\u529F +reset.toast.theUser=\u7528\u6237 +reset.toast.sSuffix=\u7684 +reset.success=MFA \u5DF2\u6210\u529F\u91CD\u7F6E\u3002 +reset.error.default=\u91CD\u7F6E MFA \u5931\u8D25\u3002 +set.button=\u542F\u7528 MFA + +notes.title=\u91CD\u8981\u6CE8\u610F\u4E8B\u9879 +notes.reset.warning=\u91CD\u7F6E MFA \u5C06\u5220\u9664\u7528\u6237\u7684\u5F53\u524D\u8BA4\u8BC1\u5668\u914D\u7F6E\u3002\u4ED6\u4EEC\u9700\u8981\u91CD\u65B0\u8BBE\u7F6E MFA\u3002 +notes.user.setup=\u7528\u6237\u53EF\u4EE5\u4ECE\u5176\u7528\u6237\u914D\u7F6E\u9875\u9762\u81EA\u884C\u914D\u7F6E MFA\u3002 + +search.placeholder=\u6309\u7528\u6237 ID \u6216\u59D3\u540D\u641C\u7D22 + +pagination.show=\u663E\u793A +pagination.entries=\u6761\u8BB0\u5F55 +pagination.showing=\u663E\u793A +pagination.to=\u81F3 +pagination.of=\u7684 +pagination.entries.label=\u6761\u8BB0\u5F55 +pagination.first=\u9996\u9875 +pagination.previous=\u4E0A\u4E00\u9875 +pagination.next=\u4E0B\u4E00\u9875 +pagination.last=\u672B\u9875 diff --git a/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/index_zh_CN.properties b/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/index_zh_CN.properties new file mode 100644 index 0000000..bd3bb95 --- /dev/null +++ b/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/index_zh_CN.properties @@ -0,0 +1,31 @@ +# MFA Setup Action Messages (Chinese Simplified) + +title=\u914D\u7F6E\u591A\u56E0\u7D20\u8BA4\u8BC1 +enabled.title=\u591A\u56E0\u7D20\u8BA4\u8BC1\u5DF2\u542F\u7528 +enabled.message=\u60A8\u7684\u8D26\u6237\u5DF2\u53D7 TOTP \u57FA\u7840\u7684 MFA \u4FDD\u62A4\u3002 +disable.button=\u7981\u7528 MFA +disable.confirm.title=\u7981\u7528 MFA\uff1F +disable.confirm.message=\u60A8\u786E\u5B9A\u8981\u7981\u7528 MFA \u5417\uFF1F\u8FD9\u5C06\u5220\u9664\u60A8\u7684\u5F53\u524D MFA \u914D\u7F6E\uFF0C\u60A8\u9700\u8981\u91CD\u65B0\u8BBE\u7F6E MFA\u3002 +disable.confirm.cancel=\u53D6\u6D88 +setup.title=\u591A\u56E0\u7D20\u8BA4\u8BC1\u914D\u7F6E +setup.message=\u901A\u8FC7\u542F\u7528 MFA \u4E3A\u60A8\u7684 Jenkins \u8D26\u6237\u6DFB\u52A0\u4E00\u5C42\u5B89\u5168\u9632\u62A4\u3002 +step1.title=\u6B65\u9AA4 1\uff1A\u626B\u63CF\u4E8C\u7EF4\u7801 +step1.message=\u4F7F\u7528\u60A8\u7684\u8BA4\u8BC1\u5668\u5E94\u7528\uFF08Google Authenticator\u3001Authy \u7B49\uFF09\u626B\u63CF\u6B64\u4E8C\u7EF4\u7801 +step1.qrcode.alt=\u4E8C\u7EF4\u7801 +step2.title=\u6B65\u9AA4 2\uff1A\u9A8C\u8BC1\u5E76\u542F\u7528 +step2.message=\u8F93\u5165\u60A8\u8BA4\u8BC1\u5668\u5E94\u7528\u4E2D\u7684 6 \u4F4D\u6570\u4EE3\u7801\u4EE5\u9A8C\u8BC1\u5E76\u542F\u7528 MFA\uff1A +verification.code=\u9A8C\u8BC1\u7801\uFF1A +verification.placeholder=000000 +enable.button=\u9A8C\u8BC1\u5E76\u542F\u7528 MFA +notes.title=\u91CD\u8981\u6CE8\u610F\u4E8B\u9879\uFF1A +notes.required=\u60A8\u6BCF\u6B21\u767B\u5F55\u65F6\u90FD\u9700\u8981\u4F7F\u7528\u8BA4\u8BC1\u5668\u5E94\u7528 +notes.lost=\u5982\u679C\u60A8\u65E0\u6CD5\u8BBF\u95EE\u8BA4\u8BC1\u5668\uFF0C\u8BF7\u8054\u7CFB\u60A8\u7684 Jenkins \u7BA1\u7406\u5458 +notes.expiry=TOTP \u4EE3\u7801\u57FA\u4E8E\u65F6\u95F4\uFF0C\u6BCF 30 \u79D2\u8FC7\u671F\u4E00\u6B21 +success.toast.title=MFA \u5DF2\u6210\u529F\u542F\u7528\uFF01 +success.toast.message=\u60A8\u7684\u8D26\u6237\u73B0\u5728\u5DF2\u53D7\u591A\u56E0\u7D20\u8BA4\u8BC1\u4FDD\u62A4\u3002 +success.toast.disabled.title=MFA \u5DF2\u7981\u7528 +success.toast.disabled.message=\u591A\u56E0\u7D20\u8BA4\u8BC1\u5DF2\u4E3A\u60A8\u7684\u8D26\u6237\u5173\u95ED\u3002 +error.toast.invalid_code.title=\u9A8C\u8BC1\u7801\u65E0\u6548 +error.toast.invalid_code.message=\u60A8\u8F93\u5165\u7684\u4EE3\u7801\u4E0D\u6B63\u786E\u6216\u5DF2\u8FC7\u671F\u3002\u8BF7\u91CD\u8BD5\u3002 +error.toast.require_mfa.title=\u9700\u8981 MFA +error.toast.require_mfa.message=\u60A8\u5FC5\u987B\u542F\u7528 MFA \u624D\u80FD\u8BBF\u95EE\u6B64\u8D44\u6E90\u3002 diff --git a/src/main/resources/io/jenkins/plugins/openmfa/MFAUserProperty/config_es.properties b/src/main/resources/io/jenkins/plugins/openmfa/MFAUserProperty/config_es.properties index 985ebf4..e0beaca 100644 --- a/src/main/resources/io/jenkins/plugins/openmfa/MFAUserProperty/config_es.properties +++ b/src/main/resources/io/jenkins/plugins/openmfa/MFAUserProperty/config_es.properties @@ -4,4 +4,5 @@ config.status.title=Estado de configuración config.status.enabled=Habilitado config.status.disabled=Deshabilitado -config.setup.linkHelp=Ver estado de MFA +config.setup.linkHelp=Gestionar MFA +config.setup.linkHelpNotEnabled=Configurar MFA diff --git a/src/main/resources/io/jenkins/plugins/openmfa/MFAUserProperty/config_zh_CN.properties b/src/main/resources/io/jenkins/plugins/openmfa/MFAUserProperty/config_zh_CN.properties new file mode 100644 index 0000000..564a365 --- /dev/null +++ b/src/main/resources/io/jenkins/plugins/openmfa/MFAUserProperty/config_zh_CN.properties @@ -0,0 +1,8 @@ +# MFA User Property Messages (Chinese Simplified) + +config.status.title=\u5F53\u524D\u72B6\u6001 +config.status.enabled=\u5DF2\u542F\u7528 +config.status.disabled=\u672A\u542F\u7528 + +config.setup.linkHelp=\u7BA1\u7406 MFA +config.setup.linkHelpNotEnabled=\u8BBE\u7F6E MFA From 691f4c9a586a68b9d3052037d6b933a86dbc68d2 Mon Sep 17 00:00:00 2001 From: hexlianine <1669264+hexlianine@users.noreply.github.com> Date: Sun, 8 Mar 2026 23:47:01 +0800 Subject: [PATCH 2/6] feat: add i18n support for Java display names and complete translations - Add Messages.properties with English, Spanish, and Chinese translations - Localize DisplayNames constants (CONFIGURE_MFA, MFA_LOGIN, MFA_SECURITY_REALM, MFA_USER_MANAGEMENT, MULTI_FACTOR_AUTHENTICATION, OPENMFA_GLOBAL_CONFIGURATION) - Localize MFAManagementLink description - Update Java classes to use generated Messages class for localization - JS files already use localized strings from DOM data attributes Fixes https://github.com/jenkinsci/openmfa-plugin/issues/3 Co-Authored-By: Claude Opus 4.6 --- .../plugins/openmfa/MFAGlobalConfiguration.java | 2 +- .../jenkins/plugins/openmfa/MFAManagementLink.java | 4 ++-- .../plugins/openmfa/MFAUserPropertyDescriptor.java | 3 +-- .../io/jenkins/plugins/openmfa/Messages.properties | 12 ++++++++++++ .../jenkins/plugins/openmfa/Messages_es.properties | 12 ++++++++++++ .../plugins/openmfa/Messages_zh_CN.properties | 12 ++++++++++++ .../plugins/openmfa/MFAManagementLinkTest.java | 2 +- 7 files changed, 41 insertions(+), 6 deletions(-) create mode 100644 src/main/resources/io/jenkins/plugins/openmfa/Messages.properties create mode 100644 src/main/resources/io/jenkins/plugins/openmfa/Messages_es.properties create mode 100644 src/main/resources/io/jenkins/plugins/openmfa/Messages_zh_CN.properties diff --git a/src/main/java/io/jenkins/plugins/openmfa/MFAGlobalConfiguration.java b/src/main/java/io/jenkins/plugins/openmfa/MFAGlobalConfiguration.java index f1f133a..e04477e 100644 --- a/src/main/java/io/jenkins/plugins/openmfa/MFAGlobalConfiguration.java +++ b/src/main/java/io/jenkins/plugins/openmfa/MFAGlobalConfiguration.java @@ -67,7 +67,7 @@ public String getDefaultIssuer() { @NonNull @Override public String getDisplayName() { - return UIConstants.DisplayNames.OPENMFA_GLOBAL_CONFIGURATION; + return Messages.DisplayNames_OPENMFA_GLOBAL_CONFIGURATION(); } @DataBoundSetter diff --git a/src/main/java/io/jenkins/plugins/openmfa/MFAManagementLink.java b/src/main/java/io/jenkins/plugins/openmfa/MFAManagementLink.java index 9309ff0..5d7c858 100644 --- a/src/main/java/io/jenkins/plugins/openmfa/MFAManagementLink.java +++ b/src/main/java/io/jenkins/plugins/openmfa/MFAManagementLink.java @@ -133,12 +133,12 @@ public Category getCategory() { @Override public String getDescription() { - return "View and manage MFA status for all users"; + return Messages.MFAManagementLink_description(); } @Override public String getDisplayName() { - return UIConstants.DisplayNames.MFA_USER_MANAGEMENT; + return Messages.DisplayNames_MFA_USER_MANAGEMENT(); } /** diff --git a/src/main/java/io/jenkins/plugins/openmfa/MFAUserPropertyDescriptor.java b/src/main/java/io/jenkins/plugins/openmfa/MFAUserPropertyDescriptor.java index 7218533..36fec47 100644 --- a/src/main/java/io/jenkins/plugins/openmfa/MFAUserPropertyDescriptor.java +++ b/src/main/java/io/jenkins/plugins/openmfa/MFAUserPropertyDescriptor.java @@ -5,7 +5,6 @@ import hudson.model.User; import hudson.model.UserPropertyDescriptor; import hudson.model.userproperty.UserPropertyCategory; -import io.jenkins.plugins.openmfa.constant.UIConstants; /** * Descriptor for {@link MFAUserProperty}. @@ -20,7 +19,7 @@ public MFAUserPropertyDescriptor() { @NonNull @Override public String getDisplayName() { - return UIConstants.DisplayNames.MULTI_FACTOR_AUTHENTICATION; + return Messages.DisplayNames_MULTI_FACTOR_AUTHENTICATION(); } @NonNull diff --git a/src/main/resources/io/jenkins/plugins/openmfa/Messages.properties b/src/main/resources/io/jenkins/plugins/openmfa/Messages.properties new file mode 100644 index 0000000..2ec718f --- /dev/null +++ b/src/main/resources/io/jenkins/plugins/openmfa/Messages.properties @@ -0,0 +1,12 @@ +# MFA Plugin Display Names - Default (English) + +# Display names for UI components +DisplayNames.CONFIGURE_MFA=Configure MFA +DisplayNames.MFA_LOGIN=MFA Login +DisplayNames.MFA_SECURITY_REALM=MFA Security Realm (wraps existing realm) +DisplayNames.MFA_USER_MANAGEMENT=MFA User Management +DisplayNames.MULTI_FACTOR_AUTHENTICATION=Multi-Factor Authentication (MFA) +DisplayNames.OPENMFA_GLOBAL_CONFIGURATION=OpenMFA + +# Management link description +MFAManagementLink.description=View and manage MFA status for all users diff --git a/src/main/resources/io/jenkins/plugins/openmfa/Messages_es.properties b/src/main/resources/io/jenkins/plugins/openmfa/Messages_es.properties new file mode 100644 index 0000000..e2f217e --- /dev/null +++ b/src/main/resources/io/jenkins/plugins/openmfa/Messages_es.properties @@ -0,0 +1,12 @@ +# MFA Plugin Display Names - Spanish + +# Display names for UI components +DisplayNames.CONFIGURE_MFA=Configurar MFA +DisplayNames.MFA_LOGIN=Inicio de sesi\u00f3n MFA +DisplayNames.MFA_SECURITY_REALM=\u00c1mbito de seguridad MFA (envuelve el \u00e1mbito existente) +DisplayNames.MFA_USER_MANAGEMENT=Gesti\u00f3n de usuarios MFA +DisplayNames.MULTI_FACTOR_AUTHENTICATION=Autenticaci\u00f3n Multifactor (MFA) +DisplayNames.OPENMFA_GLOBAL_CONFIGURATION=OpenMFA + +# Management link description +MFAManagementLink.description=Ver y gestionar el estado de MFA para todos los usuarios diff --git a/src/main/resources/io/jenkins/plugins/openmfa/Messages_zh_CN.properties b/src/main/resources/io/jenkins/plugins/openmfa/Messages_zh_CN.properties new file mode 100644 index 0000000..f96fad1 --- /dev/null +++ b/src/main/resources/io/jenkins/plugins/openmfa/Messages_zh_CN.properties @@ -0,0 +1,12 @@ +# MFA Plugin Display Names - Chinese Simplified + +# Display names for UI components +DisplayNames.CONFIGURE_MFA=\u914D\u7F6E MFA +DisplayNames.MFA_LOGIN=MFA \u767B\u5F55 +DisplayNames.MFA_SECURITY_REALM=MFA \u5B89\u5168\u57DF (\u5305\u88F9\u73B0\u6709\u57DF) +DisplayNames.MFA_USER_MANAGEMENT=MFA \u7528\u6237\u7BA1\u7406 +DisplayNames.MULTI_FACTOR_AUTHENTICATION=\u591A\u56E0\u7D20\u8BA4\u8BC1 (MFA) +DisplayNames.OPENMFA_GLOBAL_CONFIGURATION=OpenMFA \u5168\u5C40\u914D\u7F6E + +# Management link description +MFAManagementLink.description=\u67E5\u770B\u5E76\u7BA1\u7406\u6240\u6709\u7528\u6237\u7684 MFA \u72B6\u6001 diff --git a/src/test/java/io/jenkins/plugins/openmfa/MFAManagementLinkTest.java b/src/test/java/io/jenkins/plugins/openmfa/MFAManagementLinkTest.java index 0559116..87367cf 100644 --- a/src/test/java/io/jenkins/plugins/openmfa/MFAManagementLinkTest.java +++ b/src/test/java/io/jenkins/plugins/openmfa/MFAManagementLinkTest.java @@ -93,7 +93,7 @@ void testGetAllUsersWithoutAdminPermission(JenkinsRule j) throws Exception { @Test void testGetDisplayName(JenkinsRule j) { - assertEquals("MFA User Management", action.getDisplayName()); + assertEquals("MFA User Management", Messages.DisplayNames_MFA_USER_MANAGEMENT()); } @Test From ca7e8c0f7a30dfba7dda63a66a126e55829f6fb2 Mon Sep 17 00:00:00 2001 From: hexlianine <1669264+hexlianine@users.noreply.github.com> Date: Mon, 9 Mar 2026 23:34:36 +0800 Subject: [PATCH 3/6] feat: clean escapes and improve UI --- .../config_zh_CN.properties | 8 +- .../MFALoginAction/index_zh_CN.properties | 32 +++---- .../MFAManagementLink/index_zh_CN.properties | 92 +++++++++---------- .../MFAManagementLink/mfa-mgmt-pagi.css | 4 + .../openmfa/MFASetupAction/index.jelly | 1 + .../openmfa/MFASetupAction/index.properties | 1 + .../MFASetupAction/index_es.properties | 1 + .../MFASetupAction/index_zh_CN.properties | 57 ++++++------ .../openmfa/MFASetupAction/mfa-setup.js | 13 ++- .../MFAUserProperty/config_zh_CN.properties | 10 +- .../plugins/openmfa/Messages_zh_CN.properties | 14 +-- 11 files changed, 122 insertions(+), 111 deletions(-) diff --git a/src/main/resources/io/jenkins/plugins/openmfa/MFAGlobalConfiguration/config_zh_CN.properties b/src/main/resources/io/jenkins/plugins/openmfa/MFAGlobalConfiguration/config_zh_CN.properties index 2a660ad..d0462f8 100644 --- a/src/main/resources/io/jenkins/plugins/openmfa/MFAGlobalConfiguration/config_zh_CN.properties +++ b/src/main/resources/io/jenkins/plugins/openmfa/MFAGlobalConfiguration/config_zh_CN.properties @@ -1,4 +1,4 @@ -config.section.title=OpenMFA \u914D\u7F6E -config.requireMFA.title=\u8981\u6C42\u6240\u6709\u7528\u6237\u542F\u7528 MFA -config.issuer.title=\u53D1\u884C\u8005\u540D\u79F0 -config.mfaManagement.title=MFA \u7528\u6237\u7BA1\u7406 +config.section.title=OpenMFA 配置 +config.requireMFA.title=要求所有用户启用 MFA +config.issuer.title=发行者名称 +config.mfaManagement.title=MFA 用户管理 diff --git a/src/main/resources/io/jenkins/plugins/openmfa/MFALoginAction/index_zh_CN.properties b/src/main/resources/io/jenkins/plugins/openmfa/MFALoginAction/index_zh_CN.properties index e7ee3f1..fa2e678 100644 --- a/src/main/resources/io/jenkins/plugins/openmfa/MFALoginAction/index_zh_CN.properties +++ b/src/main/resources/io/jenkins/plugins/openmfa/MFALoginAction/index_zh_CN.properties @@ -1,18 +1,18 @@ # MFA Login Action Messages (Chinese Simplified) -title=\u591A\u56E0\u7D20\u8BA4\u8BC1 -security.alt=\u5B89\u5168 -prompt=\u8BF7\u8F93\u5165\u60A8\u8BA4\u8BC1\u5668\u5E94\u7528\u4E2D\u7684 6 \u4F4D\u6570\u4EE3\u7801 -submit.button=\u9A8C\u8BC1 -lost.device=\u4E22\u5931\u4E86\u8BBE\u5907\uff1F\u8BF7\u8054\u7CFB\u60A8\u7684 Jenkins \u7BA1\u7406\u5458\u3002 -no.pending.auth=\u6CA1\u6709\u5F85\u5904\u7406\u7684\u8BA4\u8BC1 -please.login=\u8BF7\u5148\u767B\u5F55\u3002 -error.invalid.code=\u9A8C\u8BC1\u7801\u65E0\u6548\u3002\u8BF7\u91CD\u8BD5\u3002 -error.locked.title=\u8D26\u6237\u6682\u65F6\u88AB\u9501 -error.locked.message=\u5931\u8D25\u5C1D\u8BD5\u6B21\u6570\u8FC7\u591A\u3002\u8BF7\u5728\u4EE5\u4E0B\u65F6\u95F4\u540E\u91CD\u8BD5 -mfa.enabled.info=\u60A8\u7684\u8D26\u6237\u5DF2\u542F\u7528\u591A\u56E0\u7D20\u8BA4\u8BC1\u3002 -mfa.already.verified=\u60A8\u5DF2\u5B8C\u6210\u672C\u4F1A\u8BDD\u7684 MFA \u9A8C\u8BC1\u3002\u60A8\u53EF\u4EE5\u5B89\u5168\u5730\u7EE7\u7EED\u4F7F\u7528 Jenkins\u3002 -continue.button=\u7EE7\u7EED\u8BBF\u95EE Jenkins -redirect.in.seconds={0} \u79D2\u540E\u8DF3\u8F6C... -mfa.not.enabled.title=MFA \u672A\u542F\u7528 -mfa.not.enabled.message=\u60A8\u5C1A\u672A\u542F\u7528 MFA\u3002\u8BF7\u7ACB\u5373\u542F\u7528 MFA\u4EE5\u63D0\u9AD8\u8D26\u6237\u5B89\u5168\u6027\u3002 +title=多因素认证 +security.alt=安全 +prompt=请输入您 Authenticator App 中的 6 位数代码 +submit.button=验证 +lost.device=丢失了设备?请联系您的 Jenkins 管理员。 +no.pending.auth=没有待处理的认证 +please.login=请先登录。 +error.invalid.code=验证码无效。请重试。 +error.locked.title=账户暂时被锁 +error.locked.message=失败尝试次数过多。请在以下时间后重试 +mfa.enabled.info=您的账户已启用多因素认证。 +mfa.already.verified=您已完成本次会话的 MFA 验证。您可以安全地继续使用 Jenkins。 +continue.button=继续访问 Jenkins +redirect.in.seconds={0} 秒后跳转... +mfa.not.enabled.title=MFA 未启用 +mfa.not.enabled.message=您尚未启用 MFA。请立即启用 MFA以提高账户安全性。 diff --git a/src/main/resources/io/jenkins/plugins/openmfa/MFAManagementLink/index_zh_CN.properties b/src/main/resources/io/jenkins/plugins/openmfa/MFAManagementLink/index_zh_CN.properties index d4a4a1d..b41b58d 100644 --- a/src/main/resources/io/jenkins/plugins/openmfa/MFAManagementLink/index_zh_CN.properties +++ b/src/main/resources/io/jenkins/plugins/openmfa/MFAManagementLink/index_zh_CN.properties @@ -1,48 +1,48 @@ # MFA Management Dashboard - Chinese Simplified -config.link=MFA \u63D2\u4EF6\u8BBE\u7F6E - -title=MFA \u7528\u6237\u7BA1\u7406 -subtitle=\u7BA1\u7406\u6240\u6709\u7528\u6237\u7684\u591A\u56E0\u7D20\u8BA4\u8BC1\u914D\u7F6E - -stats.total=\u7528\u6237\u603B\u6570 -stats.enabled=MFA \u5DF2\u542F\u7528 -stats.not.enabled=\u672A\u542F\u7528 - -users.title=\u7528\u6237 MFA \u72B6\u6001 -no.users=\u672A\u627E\u5230\u7CFB\u7EDF\u4E2D\u7684\u7528\u6237\u3002 - -table.user=\u7528\u6237 ID -table.fullname=\u59D3\u540D -table.status=MFA \u72B6\u6001 -table.status.disabled=\u672A\u542F\u7528 -table.actions=\u64CD\u4F5C - -reset.button=\u91CD\u7F6E MFA -reset.confirm.title=\u91CD\u7F6E MFA\uff1F -reset.confirm.messagePrefix=\u60A8\u786E\u5B9A\u8981\u4E3A\u7528\u6237 -reset.confirm.messageSuffix=\u91CD\u7F6E MFA \u5417\uFF1F\u8FD9\u5C06\u5220\u9664\u5176\u5F53\u524D\u7684 MFA \u914D\u7F6E\uFF0C\u4ED6\u4EEC\u9700\u8981\u91CD\u65B0\u8BBE\u7F6E MFA\u3002 -reset.confirm.cancel=\u53D6\u6D88 -reset.toast.title=\u6210\u529F -reset.toast.theUser=\u7528\u6237 -reset.toast.sSuffix=\u7684 -reset.success=MFA \u5DF2\u6210\u529F\u91CD\u7F6E\u3002 -reset.error.default=\u91CD\u7F6E MFA \u5931\u8D25\u3002 -set.button=\u542F\u7528 MFA - -notes.title=\u91CD\u8981\u6CE8\u610F\u4E8B\u9879 -notes.reset.warning=\u91CD\u7F6E MFA \u5C06\u5220\u9664\u7528\u6237\u7684\u5F53\u524D\u8BA4\u8BC1\u5668\u914D\u7F6E\u3002\u4ED6\u4EEC\u9700\u8981\u91CD\u65B0\u8BBE\u7F6E MFA\u3002 -notes.user.setup=\u7528\u6237\u53EF\u4EE5\u4ECE\u5176\u7528\u6237\u914D\u7F6E\u9875\u9762\u81EA\u884C\u914D\u7F6E MFA\u3002 - -search.placeholder=\u6309\u7528\u6237 ID \u6216\u59D3\u540D\u641C\u7D22 - -pagination.show=\u663E\u793A -pagination.entries=\u6761\u8BB0\u5F55 -pagination.showing=\u663E\u793A -pagination.to=\u81F3 -pagination.of=\u7684 -pagination.entries.label=\u6761\u8BB0\u5F55 -pagination.first=\u9996\u9875 -pagination.previous=\u4E0A\u4E00\u9875 -pagination.next=\u4E0B\u4E00\u9875 -pagination.last=\u672B\u9875 +config.link=MFA 插件设置 + +title=MFA 用户管理 +subtitle=管理所有用户的多因素认证配置 + +stats.total=用户总数 +stats.enabled=MFA 已启用 +stats.not.enabled=未启用 + +users.title=用户 MFA 状态 +no.users=未找到系统中的用户。 + +table.user=用户 ID +table.fullname=姓名 +table.status=MFA 状态 +table.status.disabled=未启用 +table.actions=操作 + +reset.button=重置 MFA +reset.confirm.title=重置 MFA? +reset.confirm.messagePrefix=您确定要为用户 +reset.confirm.messageSuffix=重置 MFA 吗?这将删除其当前的 MFA 配置,他们需要重新设置 MFA。 +reset.confirm.cancel=取消 +reset.toast.title=成功 +reset.toast.theUser=用户 +reset.toast.sSuffix=的 +reset.success=MFA 已成功重置。 +reset.error.default=重置 MFA 失败。 +set.button=启用 MFA + +notes.title=重要注意事项 +notes.reset.warning=重置 MFA 将删除用户的当前 Authenticator 配置。他们需要重新设置 MFA。 +notes.user.setup=用户可以从其用户配置页面自行配置 MFA。 + +search.placeholder=按用户 ID 或姓名搜索 + +pagination.show=展示 +pagination.entries=行 +pagination.showing=展示 +pagination.to=至 +pagination.of=的 +pagination.entries.label=行记录 +pagination.first=首页 +pagination.previous=上一页 +pagination.next=下一页 +pagination.last=末页 diff --git a/src/main/resources/io/jenkins/plugins/openmfa/MFAManagementLink/mfa-mgmt-pagi.css b/src/main/resources/io/jenkins/plugins/openmfa/MFAManagementLink/mfa-mgmt-pagi.css index 04f3f97..0a7cc7e 100644 --- a/src/main/resources/io/jenkins/plugins/openmfa/MFAManagementLink/mfa-mgmt-pagi.css +++ b/src/main/resources/io/jenkins/plugins/openmfa/MFAManagementLink/mfa-mgmt-pagi.css @@ -17,6 +17,10 @@ color: var(--text-color-secondary, #6b7280); } +.mfa-mgmt-page-size label { + width: 3.5em; +} + .mfa-mgmt-page-size select { min-width: 70px; } diff --git a/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/index.jelly b/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/index.jelly index 50da520..e73defc 100644 --- a/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/index.jelly +++ b/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/index.jelly @@ -58,6 +58,7 @@ data-message="${%disable.confirm.message}" data-cancel-text="${%disable.confirm.cancel}" data-ok-text="${%disable.button}" + data-copy-feedback="${%copy.feedback}" > diff --git a/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/index.properties b/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/index.properties index 2561245..1bd8276 100644 --- a/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/index.properties +++ b/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/index.properties @@ -29,3 +29,4 @@ error.toast.invalid_code.title=Invalid verification code error.toast.invalid_code.message=The code you entered is incorrect or expired. Please try again. error.toast.require_mfa.title=MFA required error.toast.require_mfa.message=You must enable MFA to access this resource. +copy.feedback=Copied! diff --git a/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/index_es.properties b/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/index_es.properties index 2253c9c..cedef08 100644 --- a/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/index_es.properties +++ b/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/index_es.properties @@ -29,3 +29,4 @@ error.toast.invalid_code.title=Código de verificación inválido error.toast.invalid_code.message=El código ingresado es incorrecto o ha expirado. Intente de nuevo. error.toast.require_mfa.title=MFA requerido error.toast.require_mfa.message=Debe habilitar MFA para acceder a este recurso. +copy.feedback=¡Copiado! diff --git a/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/index_zh_CN.properties b/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/index_zh_CN.properties index bd3bb95..a1bfba7 100644 --- a/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/index_zh_CN.properties +++ b/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/index_zh_CN.properties @@ -1,31 +1,32 @@ # MFA Setup Action Messages (Chinese Simplified) -title=\u914D\u7F6E\u591A\u56E0\u7D20\u8BA4\u8BC1 -enabled.title=\u591A\u56E0\u7D20\u8BA4\u8BC1\u5DF2\u542F\u7528 -enabled.message=\u60A8\u7684\u8D26\u6237\u5DF2\u53D7 TOTP \u57FA\u7840\u7684 MFA \u4FDD\u62A4\u3002 -disable.button=\u7981\u7528 MFA -disable.confirm.title=\u7981\u7528 MFA\uff1F -disable.confirm.message=\u60A8\u786E\u5B9A\u8981\u7981\u7528 MFA \u5417\uFF1F\u8FD9\u5C06\u5220\u9664\u60A8\u7684\u5F53\u524D MFA \u914D\u7F6E\uFF0C\u60A8\u9700\u8981\u91CD\u65B0\u8BBE\u7F6E MFA\u3002 -disable.confirm.cancel=\u53D6\u6D88 -setup.title=\u591A\u56E0\u7D20\u8BA4\u8BC1\u914D\u7F6E -setup.message=\u901A\u8FC7\u542F\u7528 MFA \u4E3A\u60A8\u7684 Jenkins \u8D26\u6237\u6DFB\u52A0\u4E00\u5C42\u5B89\u5168\u9632\u62A4\u3002 -step1.title=\u6B65\u9AA4 1\uff1A\u626B\u63CF\u4E8C\u7EF4\u7801 -step1.message=\u4F7F\u7528\u60A8\u7684\u8BA4\u8BC1\u5668\u5E94\u7528\uFF08Google Authenticator\u3001Authy \u7B49\uFF09\u626B\u63CF\u6B64\u4E8C\u7EF4\u7801 -step1.qrcode.alt=\u4E8C\u7EF4\u7801 -step2.title=\u6B65\u9AA4 2\uff1A\u9A8C\u8BC1\u5E76\u542F\u7528 -step2.message=\u8F93\u5165\u60A8\u8BA4\u8BC1\u5668\u5E94\u7528\u4E2D\u7684 6 \u4F4D\u6570\u4EE3\u7801\u4EE5\u9A8C\u8BC1\u5E76\u542F\u7528 MFA\uff1A -verification.code=\u9A8C\u8BC1\u7801\uFF1A +title=配置多因素认证 +enabled.title=多因素认证已启用 +enabled.message=您的账户已受 TOTP 基础的 MFA 保护。 +disable.button=禁用 MFA +disable.confirm.title=禁用 MFA? +disable.confirm.message=您确定要禁用 MFA 吗?这将删除您当前 MFA 配置,您需要重新设置 MFA。 +disable.confirm.cancel=取消 +setup.title=多因素认证配置 +setup.message=通过启用 MFA 为您的 Jenkins 账户添加一层安全防护。 +step1.title=步骤 1:扫描二维码 +step1.message=使用您的 Authenticator App(Google Authenticator、Authy 等)扫描此二维码 +step1.qrcode.alt=二维码 +step2.title=步骤 2:验证并启用 +step2.message=输入您 Authenticator App 中的 6 位数代码以验证并启用 MFA: +verification.code=验证码: verification.placeholder=000000 -enable.button=\u9A8C\u8BC1\u5E76\u542F\u7528 MFA -notes.title=\u91CD\u8981\u6CE8\u610F\u4E8B\u9879\uFF1A -notes.required=\u60A8\u6BCF\u6B21\u767B\u5F55\u65F6\u90FD\u9700\u8981\u4F7F\u7528\u8BA4\u8BC1\u5668\u5E94\u7528 -notes.lost=\u5982\u679C\u60A8\u65E0\u6CD5\u8BBF\u95EE\u8BA4\u8BC1\u5668\uFF0C\u8BF7\u8054\u7CFB\u60A8\u7684 Jenkins \u7BA1\u7406\u5458 -notes.expiry=TOTP \u4EE3\u7801\u57FA\u4E8E\u65F6\u95F4\uFF0C\u6BCF 30 \u79D2\u8FC7\u671F\u4E00\u6B21 -success.toast.title=MFA \u5DF2\u6210\u529F\u542F\u7528\uFF01 -success.toast.message=\u60A8\u7684\u8D26\u6237\u73B0\u5728\u5DF2\u53D7\u591A\u56E0\u7D20\u8BA4\u8BC1\u4FDD\u62A4\u3002 -success.toast.disabled.title=MFA \u5DF2\u7981\u7528 -success.toast.disabled.message=\u591A\u56E0\u7D20\u8BA4\u8BC1\u5DF2\u4E3A\u60A8\u7684\u8D26\u6237\u5173\u95ED\u3002 -error.toast.invalid_code.title=\u9A8C\u8BC1\u7801\u65E0\u6548 -error.toast.invalid_code.message=\u60A8\u8F93\u5165\u7684\u4EE3\u7801\u4E0D\u6B63\u786E\u6216\u5DF2\u8FC7\u671F\u3002\u8BF7\u91CD\u8BD5\u3002 -error.toast.require_mfa.title=\u9700\u8981 MFA -error.toast.require_mfa.message=\u60A8\u5FC5\u987B\u542F\u7528 MFA \u624D\u80FD\u8BBF\u95EE\u6B64\u8D44\u6E90\u3002 +enable.button=验证并启用 MFA +notes.title=重要注意事项: +notes.required=您每次登录时都需要使用 Authenticator App +notes.lost=如果您无法访问 Authenticator,请联系您的 Jenkins 管理员 +notes.expiry=TOTP 代码基于时间,每 30 秒过期一次 +success.toast.title=MFA 已成功启用! +success.toast.message=您的账户现在已受多因素认证保护。 +success.toast.disabled.title=MFA 已禁用 +success.toast.disabled.message=多因素认证已为您的账户关闭。 +error.toast.invalid_code.title=验证码无效 +error.toast.invalid_code.message=您输入的代码不正确或已过期。请重试。 +error.toast.require_mfa.title=需要 MFA +error.toast.require_mfa.message=您必须启用 MFA 才能访问此资源。 +copy.feedback=已复制! diff --git a/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/mfa-setup.js b/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/mfa-setup.js index 1f85c22..275b697 100644 --- a/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/mfa-setup.js +++ b/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/mfa-setup.js @@ -11,6 +11,7 @@ function _getDisableDialogLabels() { message: el.getAttribute('data-message') || '', okText: el.getAttribute('data-ok-text') || '', cancelText: el.getAttribute('data-cancel-text') || '', + copyFeedback: el.getAttribute('data-copy-feedback') || 'Copied!', }; } @@ -64,12 +65,14 @@ function initNotification() { function copySecret(button) { const input = button.previousElementSibling; const secret = input.value; + const labels = _getDisableDialogLabels() || {}; + const feedbackText = labels.copyFeedback || 'Copied!'; if (navigator.clipboard && navigator.clipboard.writeText) { navigator.clipboard .writeText(secret) .then(function () { const originalText = button.textContent; - button.textContent = 'Copied!'; + button.textContent = feedbackText; button.classList.add('copied'); setTimeout(function () { button.textContent = originalText; @@ -78,14 +81,14 @@ function copySecret(button) { }) .catch(function (err) { console.error('Failed to copy:', err); - fallbackCopy(secret, button); + fallbackCopy(secret, button, feedbackText); }); } else { - fallbackCopy(secret, button); + fallbackCopy(secret, button, feedbackText); } } -function fallbackCopy(text, button) { +function fallbackCopy(text, button, feedbackText) { const textArea = document.createElement('textarea'); textArea.value = text; textArea.style.position = 'fixed'; @@ -95,7 +98,7 @@ function fallbackCopy(text, button) { try { document.execCommand('copy'); const originalText = button.textContent; - button.textContent = 'Copied!'; + button.textContent = feedbackText; button.classList.add('copied'); setTimeout(function () { button.textContent = originalText; diff --git a/src/main/resources/io/jenkins/plugins/openmfa/MFAUserProperty/config_zh_CN.properties b/src/main/resources/io/jenkins/plugins/openmfa/MFAUserProperty/config_zh_CN.properties index 564a365..5ed85fb 100644 --- a/src/main/resources/io/jenkins/plugins/openmfa/MFAUserProperty/config_zh_CN.properties +++ b/src/main/resources/io/jenkins/plugins/openmfa/MFAUserProperty/config_zh_CN.properties @@ -1,8 +1,8 @@ # MFA User Property Messages (Chinese Simplified) -config.status.title=\u5F53\u524D\u72B6\u6001 -config.status.enabled=\u5DF2\u542F\u7528 -config.status.disabled=\u672A\u542F\u7528 +config.status.title=当前状态 +config.status.enabled=已启用 +config.status.disabled=未启用 -config.setup.linkHelp=\u7BA1\u7406 MFA -config.setup.linkHelpNotEnabled=\u8BBE\u7F6E MFA +config.setup.linkHelp=管理 MFA +config.setup.linkHelpNotEnabled=设置 MFA diff --git a/src/main/resources/io/jenkins/plugins/openmfa/Messages_zh_CN.properties b/src/main/resources/io/jenkins/plugins/openmfa/Messages_zh_CN.properties index f96fad1..3f074bd 100644 --- a/src/main/resources/io/jenkins/plugins/openmfa/Messages_zh_CN.properties +++ b/src/main/resources/io/jenkins/plugins/openmfa/Messages_zh_CN.properties @@ -1,12 +1,12 @@ # MFA Plugin Display Names - Chinese Simplified # Display names for UI components -DisplayNames.CONFIGURE_MFA=\u914D\u7F6E MFA -DisplayNames.MFA_LOGIN=MFA \u767B\u5F55 -DisplayNames.MFA_SECURITY_REALM=MFA \u5B89\u5168\u57DF (\u5305\u88F9\u73B0\u6709\u57DF) -DisplayNames.MFA_USER_MANAGEMENT=MFA \u7528\u6237\u7BA1\u7406 -DisplayNames.MULTI_FACTOR_AUTHENTICATION=\u591A\u56E0\u7D20\u8BA4\u8BC1 (MFA) -DisplayNames.OPENMFA_GLOBAL_CONFIGURATION=OpenMFA \u5168\u5C40\u914D\u7F6E +DisplayNames.CONFIGURE_MFA=配置 MFA +DisplayNames.MFA_LOGIN=MFA 登录 +DisplayNames.MFA_SECURITY_REALM=MFA 安全域 (包裹现有域) +DisplayNames.MFA_USER_MANAGEMENT=MFA 用户管理 +DisplayNames.MULTI_FACTOR_AUTHENTICATION=多因素认证 (MFA) +DisplayNames.OPENMFA_GLOBAL_CONFIGURATION=OpenMFA 全局配置 # Management link description -MFAManagementLink.description=\u67E5\u770B\u5E76\u7BA1\u7406\u6240\u6709\u7528\u6237\u7684 MFA \u72B6\u6001 +MFAManagementLink.description=查看并管理所有用户的 MFA 状态 From 42ecd9627a31895744e6198bb430fdb5f617f9ec Mon Sep 17 00:00:00 2001 From: hexlianine <1669264+hexlianine@users.noreply.github.com> Date: Mon, 9 Mar 2026 23:45:10 +0800 Subject: [PATCH 4/6] chore: correct language name --- .../plugins/openmfa/MFALoginAction/index_zh_CN.properties | 2 +- .../plugins/openmfa/MFAManagementLink/index_zh_CN.properties | 2 +- .../plugins/openmfa/MFASetupAction/index_zh_CN.properties | 2 +- .../plugins/openmfa/MFAUserProperty/config_zh_CN.properties | 2 +- .../io/jenkins/plugins/openmfa/Messages_zh_CN.properties | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/resources/io/jenkins/plugins/openmfa/MFALoginAction/index_zh_CN.properties b/src/main/resources/io/jenkins/plugins/openmfa/MFALoginAction/index_zh_CN.properties index fa2e678..c60aed3 100644 --- a/src/main/resources/io/jenkins/plugins/openmfa/MFALoginAction/index_zh_CN.properties +++ b/src/main/resources/io/jenkins/plugins/openmfa/MFALoginAction/index_zh_CN.properties @@ -1,4 +1,4 @@ -# MFA Login Action Messages (Chinese Simplified) +# MFA Login Action Messages (Simplified Chinese) title=多因素认证 security.alt=安全 diff --git a/src/main/resources/io/jenkins/plugins/openmfa/MFAManagementLink/index_zh_CN.properties b/src/main/resources/io/jenkins/plugins/openmfa/MFAManagementLink/index_zh_CN.properties index b41b58d..6a2396b 100644 --- a/src/main/resources/io/jenkins/plugins/openmfa/MFAManagementLink/index_zh_CN.properties +++ b/src/main/resources/io/jenkins/plugins/openmfa/MFAManagementLink/index_zh_CN.properties @@ -1,4 +1,4 @@ -# MFA Management Dashboard - Chinese Simplified +# MFA Management Dashboard - Simplified Chinese config.link=MFA 插件设置 diff --git a/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/index_zh_CN.properties b/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/index_zh_CN.properties index a1bfba7..f6f441a 100644 --- a/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/index_zh_CN.properties +++ b/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/index_zh_CN.properties @@ -1,4 +1,4 @@ -# MFA Setup Action Messages (Chinese Simplified) +# MFA Setup Action Messages (Simplified Chinese) title=配置多因素认证 enabled.title=多因素认证已启用 diff --git a/src/main/resources/io/jenkins/plugins/openmfa/MFAUserProperty/config_zh_CN.properties b/src/main/resources/io/jenkins/plugins/openmfa/MFAUserProperty/config_zh_CN.properties index 5ed85fb..db52537 100644 --- a/src/main/resources/io/jenkins/plugins/openmfa/MFAUserProperty/config_zh_CN.properties +++ b/src/main/resources/io/jenkins/plugins/openmfa/MFAUserProperty/config_zh_CN.properties @@ -1,4 +1,4 @@ -# MFA User Property Messages (Chinese Simplified) +# MFA User Property Messages (Simplified Chinese) config.status.title=当前状态 config.status.enabled=已启用 diff --git a/src/main/resources/io/jenkins/plugins/openmfa/Messages_zh_CN.properties b/src/main/resources/io/jenkins/plugins/openmfa/Messages_zh_CN.properties index 3f074bd..328b0dd 100644 --- a/src/main/resources/io/jenkins/plugins/openmfa/Messages_zh_CN.properties +++ b/src/main/resources/io/jenkins/plugins/openmfa/Messages_zh_CN.properties @@ -1,4 +1,4 @@ -# MFA Plugin Display Names - Chinese Simplified +# MFA Plugin Display Names - Simplified Chinese # Display names for UI components DisplayNames.CONFIGURE_MFA=配置 MFA From 229f38ae674925a82d24808a93597c057d0b06ea Mon Sep 17 00:00:00 2001 From: hexlianine <1669264+hexlianine@users.noreply.github.com> Date: Tue, 10 Mar 2026 22:41:23 +0800 Subject: [PATCH 5/6] refactor: remove unused class --- .../plugins/openmfa/constant/UIConstants.java | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/src/main/java/io/jenkins/plugins/openmfa/constant/UIConstants.java b/src/main/java/io/jenkins/plugins/openmfa/constant/UIConstants.java index a73fc63..8573713 100644 --- a/src/main/java/io/jenkins/plugins/openmfa/constant/UIConstants.java +++ b/src/main/java/io/jenkins/plugins/openmfa/constant/UIConstants.java @@ -23,24 +23,6 @@ private Defaults() { } } - /** - * Display names for UI components - */ - public static final class DisplayNames { - - public static final String CONFIGURE_MFA = "Configure MFA"; - public static final String MFA_LOGIN = "MFA Login"; - public static final String MFA_SECURITY_REALM = - "MFA Security Realm (wraps existing realm)"; - public static final String MFA_USER_MANAGEMENT = "MFA User Management"; - public static final String MULTI_FACTOR_AUTHENTICATION = - "Multi-Factor Authentication (MFA)"; - public static final String OPENMFA_GLOBAL_CONFIGURATION = "OpenMFA"; - - private DisplayNames() { - } - } - /** * HTTP response codes */ From 59d13bb35c9e2b51f98a9296e2ce5da40edef4b0 Mon Sep 17 00:00:00 2001 From: hexlianine <1669264+hexlianine@users.noreply.github.com> Date: Tue, 10 Mar 2026 22:59:11 +0800 Subject: [PATCH 6/6] fix: chinese expression --- .../plugins/openmfa/MFALoginAction/index_zh_CN.properties | 4 ++-- .../openmfa/MFAManagementLink/index_zh_CN.properties | 2 +- .../plugins/openmfa/MFASetupAction/index_zh_CN.properties | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/resources/io/jenkins/plugins/openmfa/MFALoginAction/index_zh_CN.properties b/src/main/resources/io/jenkins/plugins/openmfa/MFALoginAction/index_zh_CN.properties index c60aed3..f6f40b3 100644 --- a/src/main/resources/io/jenkins/plugins/openmfa/MFALoginAction/index_zh_CN.properties +++ b/src/main/resources/io/jenkins/plugins/openmfa/MFALoginAction/index_zh_CN.properties @@ -2,9 +2,9 @@ title=多因素认证 security.alt=安全 -prompt=请输入您 Authenticator App 中的 6 位数代码 +prompt=请输入您身份验证应用中的 6 位数代码 submit.button=验证 -lost.device=丢失了设备?请联系您的 Jenkins 管理员。 +lost.device=无法访问您的身份验证应用?请联系您的 Jenkins 管理员。 no.pending.auth=没有待处理的认证 please.login=请先登录。 error.invalid.code=验证码无效。请重试。 diff --git a/src/main/resources/io/jenkins/plugins/openmfa/MFAManagementLink/index_zh_CN.properties b/src/main/resources/io/jenkins/plugins/openmfa/MFAManagementLink/index_zh_CN.properties index 6a2396b..b758459 100644 --- a/src/main/resources/io/jenkins/plugins/openmfa/MFAManagementLink/index_zh_CN.properties +++ b/src/main/resources/io/jenkins/plugins/openmfa/MFAManagementLink/index_zh_CN.properties @@ -31,7 +31,7 @@ reset.error.default=重置 MFA 失败。 set.button=启用 MFA notes.title=重要注意事项 -notes.reset.warning=重置 MFA 将删除用户的当前 Authenticator 配置。他们需要重新设置 MFA。 +notes.reset.warning=重置 MFA 将删除用户的当前身份验证应用配置。他们需要重新设置 MFA。 notes.user.setup=用户可以从其用户配置页面自行配置 MFA。 search.placeholder=按用户 ID 或姓名搜索 diff --git a/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/index_zh_CN.properties b/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/index_zh_CN.properties index f6f441a..b457dc0 100644 --- a/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/index_zh_CN.properties +++ b/src/main/resources/io/jenkins/plugins/openmfa/MFASetupAction/index_zh_CN.properties @@ -10,16 +10,16 @@ disable.confirm.cancel=取消 setup.title=多因素认证配置 setup.message=通过启用 MFA 为您的 Jenkins 账户添加一层安全防护。 step1.title=步骤 1:扫描二维码 -step1.message=使用您的 Authenticator App(Google Authenticator、Authy 等)扫描此二维码 +step1.message=使用您的身份验证应用(Google Authenticator、Authy 等)扫描此二维码 step1.qrcode.alt=二维码 step2.title=步骤 2:验证并启用 -step2.message=输入您 Authenticator App 中的 6 位数代码以验证并启用 MFA: +step2.message=输入您身份验证应用中的 6 位数代码以验证并启用 MFA: verification.code=验证码: verification.placeholder=000000 enable.button=验证并启用 MFA notes.title=重要注意事项: -notes.required=您每次登录时都需要使用 Authenticator App -notes.lost=如果您无法访问 Authenticator,请联系您的 Jenkins 管理员 +notes.required=您每次登录时都需要使用身份验证应用 +notes.lost=如果您无法访问身份验证应用,请联系您的 Jenkins 管理员 notes.expiry=TOTP 代码基于时间,每 30 秒过期一次 success.toast.title=MFA 已成功启用! success.toast.message=您的账户现在已受多因素认证保护。