-
+
+
{{ .strings.expiry }}
+
+
diff --git a/lang.go b/lang.go
index 1cf3fcd..f3fbe4b 100644
--- a/lang.go
+++ b/lang.go
@@ -26,9 +26,10 @@ func (ls *adminLangs) getOptions() [][2]string {
type commonLangs map[string]commonLang
type commonLang struct {
- Meta langMeta `json:"meta"`
- Strings langSection `json:"strings"`
- Notifications langSection `json:"notifications"`
+ Meta langMeta `json:"meta"`
+ Strings langSection `json:"strings"`
+ Notifications langSection `json:"notifications"`
+ QuantityStrings map[string]quantityString `json:"quantityStrings"`
}
type adminLang struct {
@@ -58,6 +59,7 @@ type userLang struct {
notificationsJSON string
ValidationStrings map[string]quantityString `json:"validationStrings"`
validationStringsJSON string
+ QuantityStrings map[string]quantityString `json:"quantityStrings"`
JSON string
}
diff --git a/lang/admin/da-dk.json b/lang/admin/da-dk.json
index 9170563..ce1de62 100644
--- a/lang/admin/da-dk.json
+++ b/lang/admin/da-dk.json
@@ -30,7 +30,6 @@
"lastActiveTime": "Sidst Aktiv",
"from": "Fra",
"user": "Bruger",
- "expiry": "Udløb",
"userExpiry": "Brugerens Udløb",
"userExpiryDescription": "En specificeret tid efter hver tilmelding, sletter/deaktiverer jfa-go kontoen. Du kan ændre denne adfærd i indstillingerne.",
"aboutProgram": "Om",
diff --git a/lang/admin/de-de.json b/lang/admin/de-de.json
index 4b59b80..1c4de83 100644
--- a/lang/admin/de-de.json
+++ b/lang/admin/de-de.json
@@ -81,7 +81,6 @@
"download": "Herunterladen",
"update": "Aktualisieren",
"updates": "Aktualisierungen",
- "expiry": "Ablaufdatum",
"extendExpiry": "Ablaufdatum verlängern",
"donate": "Spenden",
"conditionals": "Bedingungen",
diff --git a/lang/admin/el-gr.json b/lang/admin/el-gr.json
index 3700829..3b97023 100644
--- a/lang/admin/el-gr.json
+++ b/lang/admin/el-gr.json
@@ -75,7 +75,6 @@
"download": "Λήψη",
"search": "Αναζήτηση",
"inviteDuration": "Διάρκεια Πρόσκλησης",
- "expiry": "Λήξη",
"userExpiry": "Λήξη Χρήστη",
"userExpiryDescription": "Μετά απο ένα καθορισμένο χρόνο μετά απο κάθε εγγραφή, το jfa-go θα διαγράφει/απενεργοποιεί τον λογαριασμό. Μπορείτε να αλλάξετε αυτή την συμπεριφορά στις ρυθμίσεις.",
"announce": "Ανακοίνωση",
diff --git a/lang/admin/en-gb.json b/lang/admin/en-gb.json
index 2597713..01cca19 100644
--- a/lang/admin/en-gb.json
+++ b/lang/admin/en-gb.json
@@ -71,7 +71,6 @@
"apply": "Apply",
"delete": "Delete",
"updates": "Updates",
- "expiry": "Expiry",
"variables": "Variables",
"preview": "Preview",
"markdownSupported": "Markdown is supported.",
diff --git a/lang/admin/en-us.json b/lang/admin/en-us.json
index 911ae84..7174ea8 100644
--- a/lang/admin/en-us.json
+++ b/lang/admin/en-us.json
@@ -33,7 +33,6 @@
"after": "After",
"before": "Before",
"user": "User",
- "expiry": "Expiry",
"userExpiry": "User Expiry",
"userExpiryDescription": "A specified amount of time after each signup, jfa-go will delete/disable the account. You can change this behaviour in settings.",
"aboutProgram": "About",
diff --git a/lang/admin/es-es.json b/lang/admin/es-es.json
index de45bb2..3a57fb3 100644
--- a/lang/admin/es-es.json
+++ b/lang/admin/es-es.json
@@ -28,7 +28,6 @@
"lastActiveTime": "Último activo",
"from": "De",
"user": "Usuario",
- "expiry": "Expiración",
"userExpiry": "Caducidad del usuario",
"userExpiryDescription": "Una cantidad de tiempo específica después de cada registro, jfa-go eliminará / deshabilitará la cuenta. Puede cambiar este comportamiento en la configuración.",
"aboutProgram": "Acerca de",
diff --git a/lang/admin/fr-fr.json b/lang/admin/fr-fr.json
index 9f57f7c..c7937d0 100644
--- a/lang/admin/fr-fr.json
+++ b/lang/admin/fr-fr.json
@@ -76,7 +76,6 @@
"edit": "Éditer",
"customizeMessages": "Personnaliser les e-mails",
"inviteDuration": "Durée de l'invitation",
- "expiry": "Expiration",
"advancedSettings": "Paramètres avancés",
"userExpiry": "Expiration de l'utilisateur",
"updates": "Mises à jour",
diff --git a/lang/admin/hu-hu.json b/lang/admin/hu-hu.json
index 3f83575..d6e5470 100644
--- a/lang/admin/hu-hu.json
+++ b/lang/admin/hu-hu.json
@@ -31,7 +31,6 @@
"lastActiveTime": "Utoljára aktív",
"from": "Feladó",
"user": "Felhasználó",
- "expiry": "Lejárat",
"userExpiry": "Felhasználói lejárat",
"userExpiryDescription": "Egy meghatározott idő után minden regisztrációt töröl, vagy felfüggeszt a jfa-go. Ezt a működést megváltoztathatod a beállításokban.",
"aboutProgram": "Névjegy",
diff --git a/lang/admin/nl-nl.json b/lang/admin/nl-nl.json
index 62b859a..910202c 100644
--- a/lang/admin/nl-nl.json
+++ b/lang/admin/nl-nl.json
@@ -75,7 +75,6 @@
"customizeMessages": "E-mails aanpassen",
"inviteDuration": "Geldigheidsduur uitnodiging",
"userExpiryDescription": "Een bepaalde tijd na elke aanmelding, wordt de account verwijderd/uitgeschakeld door jfa-go. Dit kan aangepast worden in de instellingen.",
- "expiry": "Verloop",
"userExpiry": "Gebruikersverloop",
"extendExpiry": "Verleng verloop",
"updates": "Updates",
diff --git a/lang/admin/pl-pl.json b/lang/admin/pl-pl.json
index e229017..b3957de 100644
--- a/lang/admin/pl-pl.json
+++ b/lang/admin/pl-pl.json
@@ -31,7 +31,6 @@
"lastActiveTime": "Ostatnia aktywność",
"from": "Od",
"user": "Użytkownik",
- "expiry": "Wygasa",
"userExpiry": "Użytkownik wygasa",
"userExpiryDescription": "",
"aboutProgram": "O",
diff --git a/lang/admin/pt-br.json b/lang/admin/pt-br.json
index 5b4149d..f84c2b9 100644
--- a/lang/admin/pt-br.json
+++ b/lang/admin/pt-br.json
@@ -75,7 +75,6 @@
"customizeMessages": "Customizar Emails",
"userExpiryDescription": "Após um determinado período de tempo de cada inscrição, o jfa-go apagará/desabilitará a conta. Você pode alterar essa opção nas configurações.",
"inviteDuration": "Duração do Convite",
- "expiry": "Expira",
"userExpiry": "Vencimento do Usuário",
"extendExpiry": "Extender o vencimento",
"updates": "Atualizações",
diff --git a/lang/admin/sv-se.json b/lang/admin/sv-se.json
index f16995f..f57d37e 100644
--- a/lang/admin/sv-se.json
+++ b/lang/admin/sv-se.json
@@ -74,7 +74,6 @@
"notifyInviteExpiry": "Vid utgång",
"notifyUserCreation": "Vid användarskapande",
"inviteDuration": "Varaktighet för inbjudan",
- "expiry": "Löper ut",
"userExpiry": "Användarutgång",
"userExpiryDescription": "Efter en angiven tid efter varje registrering så tar jfa-go bort/inaktiverar kontot. Du kan ändra detta beteende i inställningarna.",
"extendExpiry": "Förläng utgång"
diff --git a/lang/admin/vi-vn.json b/lang/admin/vi-vn.json
index 358e1cb..cb058f4 100644
--- a/lang/admin/vi-vn.json
+++ b/lang/admin/vi-vn.json
@@ -31,7 +31,6 @@
"lastActiveTime": "Lần cuối Hoạt động",
"from": "Từ",
"user": "Người dùng",
- "expiry": "Hết hạn",
"userExpiry": "Hết hạn Người dùng",
"userExpiryDescription": "Sau một khoảng thời gian nhất định sau khi mỗi đăng ký, jfa-go sẽ xóa/vô hiệu hóa tài khoản. Bạn có thể chỉnh sửa chế độ này trong cài đặt.",
"aboutProgram": "Thông tin",
diff --git a/lang/admin/zh-hans.json b/lang/admin/zh-hans.json
index cbe051e..97561a2 100644
--- a/lang/admin/zh-hans.json
+++ b/lang/admin/zh-hans.json
@@ -30,7 +30,6 @@
"lastActiveTime": "上次活动",
"from": "从",
"user": "用户",
- "expiry": "到期",
"userExpiry": "用户到期",
"userExpiryDescription": "每次注册后的指定时间,jfa-go 将删除/禁用该帐户。您可以在设置中更改此行为。",
"aboutProgram": "关于",
diff --git a/lang/admin/zh-hant.json b/lang/admin/zh-hant.json
index c4d24d4..a4b318f 100644
--- a/lang/admin/zh-hant.json
+++ b/lang/admin/zh-hant.json
@@ -31,7 +31,6 @@
"lastActiveTime": "上次啟用時間",
"from": "從",
"user": "帳戶",
- "expiry": "到期",
"userExpiry": "帳戶到期",
"userExpiryDescription": "每次註冊后指定的時間,jfa-go 將刪除/禁用該帳戶。您可以在設定中更改此行為。",
"aboutProgram": "關於",
diff --git a/lang/common/ar-aa.json b/lang/common/ar-aa.json
index b472463..6d8988a 100644
--- a/lang/common/ar-aa.json
+++ b/lang/common/ar-aa.json
@@ -3,5 +3,6 @@
"name": "العربية (AR)"
},
"strings": {},
- "notifications": {}
+ "notifications": {},
+ "quantityStrings": {}
}
\ No newline at end of file
diff --git a/lang/common/da-dk.json b/lang/common/da-dk.json
index 8a89fd6..8155ca8 100644
--- a/lang/common/da-dk.json
+++ b/lang/common/da-dk.json
@@ -31,7 +31,8 @@
"enabled": "Aktiveret",
"disabled": "Deaktiveret",
"reEnable": "Genaktiver",
- "disable": "Deaktiver"
+ "disable": "Deaktiver",
+ "expiry": "Udløb"
},
"notifications": {
"errorLoginBlank": "Brugernavnet og/eller adgangskoden blev efterladt tomme.",
@@ -39,5 +40,6 @@
"errorUnknown": "Ukendt fejl.",
"error401Unauthorized": "Adgang nægtet. Prøv at genindlæse siden.",
"errorSaveSettings": "Kunne ikke gemme indstillingerne."
- }
+ },
+ "quantityStrings": {}
}
\ No newline at end of file
diff --git a/lang/common/de-de.json b/lang/common/de-de.json
index da17b61..9b10ccd 100644
--- a/lang/common/de-de.json
+++ b/lang/common/de-de.json
@@ -31,7 +31,8 @@
"enabled": "Aktiviert",
"disabled": "Deaktiviert",
"reEnable": "Wieder aktivieren",
- "disable": "Deaktivieren"
+ "disable": "Deaktivieren",
+ "expiry": "Ablaufdatum"
},
"notifications": {
"errorLoginBlank": "Der Benutzername und/oder das Passwort wurden nicht ausgefüllt.",
@@ -39,5 +40,6 @@
"errorUnknown": "Unbekannter Fehler.",
"error401Unauthorized": "Unberechtigt. Versuch, die Seite zu aktualisieren.",
"errorSaveSettings": "Einstellungen konnten nicht gespeichert werden."
- }
+ },
+ "quantityStrings": {}
}
\ No newline at end of file
diff --git a/lang/common/el-gr.json b/lang/common/el-gr.json
index 33031b9..1a1a0d6 100644
--- a/lang/common/el-gr.json
+++ b/lang/common/el-gr.json
@@ -22,7 +22,8 @@
"enabled": "Ενεργοποιημένο",
"disabled": "Απενεργοποιημένο",
"reEnable": "Επανα-ενεργοποίηση",
- "disable": "Απενεργοποίηση"
+ "disable": "Απενεργοποίηση",
+ "expiry": "Λήξη"
},
"notifications": {
"errorLoginBlank": "Το όνομα χρήστη και/ή ο κωδικός ήταν κενά.",
@@ -30,5 +31,6 @@
"errorUnknown": "Άγνωστο σφάλμα.",
"error401Unauthorized": "Ανεξουσιοδότητος. Προσπαθήστε να κάνετε επαναφόρτωση την σελίδα.",
"errorSaveSettings": "Αποτυχία αποθήκευσης ρυθμίσεων."
- }
+ },
+ "quantityStrings": {}
}
\ No newline at end of file
diff --git a/lang/common/en-gb.json b/lang/common/en-gb.json
index c4451e6..799d4bf 100644
--- a/lang/common/en-gb.json
+++ b/lang/common/en-gb.json
@@ -31,7 +31,8 @@
"enabled": "Enabled",
"disabled": "Disabled",
"reEnable": "Re-enable",
- "disable": "Disable"
+ "disable": "Disable",
+ "expiry": "Expiry"
},
"notifications": {
"errorLoginBlank": "The username and/or password was left blank.",
@@ -39,5 +40,6 @@
"errorUnknown": "Unknown error.",
"error401Unauthorized": "Unauthorised. Try refreshing the page.",
"errorSaveSettings": "Couldn't save settings."
- }
+ },
+ "quantityStrings": {}
}
\ No newline at end of file
diff --git a/lang/common/en-us.json b/lang/common/en-us.json
index b8bb943..de53a29 100644
--- a/lang/common/en-us.json
+++ b/lang/common/en-us.json
@@ -32,7 +32,10 @@
"disabled": "Disabled",
"reEnable": "Re-enable",
"disable": "Disable",
- "contactMethods": "Contact Methods"
+ "contactMethods": "Contact Methods",
+ "accountStatus": "Account Status",
+ "notSet": "Not set",
+ "expiry": "Expiry"
},
"notifications": {
"errorLoginBlank": "The username and/or password were left blank.",
@@ -40,5 +43,19 @@
"errorUnknown": "Unknown error.",
"error401Unauthorized": "Unauthorized. Try refreshing the page.",
"errorSaveSettings": "Couldn't save settings."
+ },
+ "quantityStrings": {
+ "year": {
+ "singular": "{n} Year",
+ "plural": "{n} Years"
+ },
+ "month": {
+ "singular": "{n} Month",
+ "plural": "{n} Months"
+ },
+ "day": {
+ "singular": "{n} Day",
+ "plural": "{n} Days"
+ }
}
-}
+}
\ No newline at end of file
diff --git a/lang/common/es-es.json b/lang/common/es-es.json
index fdc7cde..261b22e 100644
--- a/lang/common/es-es.json
+++ b/lang/common/es-es.json
@@ -31,7 +31,8 @@
"enabled": "Activado",
"disabled": "Desactivado",
"reEnable": "Reactivar",
- "disable": "Desactivar"
+ "disable": "Desactivar",
+ "expiry": "Expiración"
},
"notifications": {
"errorLoginBlank": "El nombre de usuario y/o la contraseña se dejaron en blanco.",
@@ -39,5 +40,6 @@
"errorUnknown": "Error desconocido.",
"error401Unauthorized": "No autorizado. Intente actualizar la página.",
"errorSaveSettings": "No se pudo guardar la configuración."
- }
+ },
+ "quantityStrings": {}
}
\ No newline at end of file
diff --git a/lang/common/fa-ir.json b/lang/common/fa-ir.json
index 612fc27..cc096c5 100644
--- a/lang/common/fa-ir.json
+++ b/lang/common/fa-ir.json
@@ -24,5 +24,6 @@
"contactDiscord": "از طریق دیسکورد تماس بگیرید",
"theme": "موضوع"
},
- "notifications": {}
+ "notifications": {},
+ "quantityStrings": {}
}
\ No newline at end of file
diff --git a/lang/common/fr-fr.json b/lang/common/fr-fr.json
index c97561d..9a31d3d 100644
--- a/lang/common/fr-fr.json
+++ b/lang/common/fr-fr.json
@@ -31,7 +31,8 @@
"enabled": "Activé",
"disabled": "Désactivé",
"reEnable": "Ré-activé",
- "disable": "Désactivé"
+ "disable": "Désactivé",
+ "expiry": "Expiration"
},
"notifications": {
"errorLoginBlank": "Le nom d'utilisateur et/ou le mot de passe sont vides.",
@@ -39,5 +40,6 @@
"errorUnknown": "Erreur inconnue.",
"error401Unauthorized": "Non autorisé. Essayez d'actualiser la page.",
"errorSaveSettings": "Impossible d'enregistrer les paramètres."
- }
+ },
+ "quantityStrings": {}
}
\ No newline at end of file
diff --git a/lang/common/hu-hu.json b/lang/common/hu-hu.json
index 0c934a4..367dcec 100644
--- a/lang/common/hu-hu.json
+++ b/lang/common/hu-hu.json
@@ -9,7 +9,9 @@
"enabled": "Engedélyezve",
"disabled": "Tiltva",
"reEnable": "Újra engedélyezés",
- "disable": "Letiltás"
+ "disable": "Letiltás",
+ "expiry": "Lejárat"
},
- "notifications": {}
+ "notifications": {},
+ "quantityStrings": {}
}
\ No newline at end of file
diff --git a/lang/common/id-id.json b/lang/common/id-id.json
index 8c5f511..b517b8d 100644
--- a/lang/common/id-id.json
+++ b/lang/common/id-id.json
@@ -25,5 +25,6 @@
"errorUnknown": "Kesalahan yang tidak diketahui.",
"error401Unauthorized": "Tidak ter-otorisasi. Coba segarkan halaman.",
"errorSaveSettings": "Tidak dapat menyimpan pengaturan."
- }
+ },
+ "quantityStrings": {}
}
\ No newline at end of file
diff --git a/lang/common/it-it.json b/lang/common/it-it.json
index 1576a7b..452585f 100644
--- a/lang/common/it-it.json
+++ b/lang/common/it-it.json
@@ -26,5 +26,6 @@
"refresh": "Aggiorna",
"required": "Richiesto"
},
- "notifications": {}
+ "notifications": {},
+ "quantityStrings": {}
}
\ No newline at end of file
diff --git a/lang/common/nl-nl.json b/lang/common/nl-nl.json
index 3ba8c08..9dbddee 100644
--- a/lang/common/nl-nl.json
+++ b/lang/common/nl-nl.json
@@ -31,7 +31,8 @@
"enabled": "Ingeschakeld",
"disabled": "Uitgeschakeld",
"reEnable": "Opnieuw inschakelen",
- "disable": "Uitschakelen"
+ "disable": "Uitschakelen",
+ "expiry": "Verloop"
},
"notifications": {
"errorLoginBlank": "De gebruikersnaam en/of wachtwoord is leeg.",
@@ -39,5 +40,6 @@
"errorUnknown": "Onbekende fout.",
"error401Unauthorized": "Geen toegang. Probeer de pagina te vernieuwen.",
"errorSaveSettings": "Opslaan van instellingen mislukt."
- }
+ },
+ "quantityStrings": {}
}
\ No newline at end of file
diff --git a/lang/common/pl-pl.json b/lang/common/pl-pl.json
index 530fda0..8d042fa 100644
--- a/lang/common/pl-pl.json
+++ b/lang/common/pl-pl.json
@@ -28,11 +28,13 @@
"admin": "Admin",
"enabled": "Włączone",
"disabled": "Wyłączone",
- "disable": "Wyłączone"
+ "disable": "Wyłączone",
+ "expiry": "Wygasa"
},
"notifications": {
"errorConnection": "Nie udało się połączyć z jfa-go.",
"errorUnknown": "Nieznany błąd.",
"error401Unauthorized": "Nieautoryzowany. Spróbuj odświeżyć stronę."
- }
+ },
+ "quantityStrings": {}
}
\ No newline at end of file
diff --git a/lang/common/pt-br.json b/lang/common/pt-br.json
index 16a0bae..e4f6191 100644
--- a/lang/common/pt-br.json
+++ b/lang/common/pt-br.json
@@ -31,7 +31,8 @@
"enabled": "Habilitado",
"disabled": "Desativado",
"reEnable": "Reativar",
- "disable": "Desativar"
+ "disable": "Desativar",
+ "expiry": "Expira"
},
"notifications": {
"errorLoginBlank": "O nome de usuário e/ou senha foram deixados em branco.",
@@ -39,5 +40,6 @@
"errorUnknown": "Erro desconhecido.",
"error401Unauthorized": "Não autorizado. Tente atualizar a página.",
"errorSaveSettings": "Não foi possível salvar as configurações."
- }
+ },
+ "quantityStrings": {}
}
\ No newline at end of file
diff --git a/lang/common/ro-ro.json b/lang/common/ro-ro.json
index 8bf759e..3571c19 100644
--- a/lang/common/ro-ro.json
+++ b/lang/common/ro-ro.json
@@ -3,5 +3,6 @@
"name": "Română (ROU)"
},
"strings": {},
- "notifications": {}
+ "notifications": {},
+ "quantityStrings": {}
}
\ No newline at end of file
diff --git a/lang/common/sl-si.json b/lang/common/sl-si.json
index 5980f6a..d99631b 100644
--- a/lang/common/sl-si.json
+++ b/lang/common/sl-si.json
@@ -26,5 +26,6 @@
"refresh": "Osveži",
"required": "Obvezno"
},
- "notifications": {}
+ "notifications": {},
+ "quantityStrings": {}
}
\ No newline at end of file
diff --git a/lang/common/sv-se.json b/lang/common/sv-se.json
index 674198f..25d5962 100644
--- a/lang/common/sv-se.json
+++ b/lang/common/sv-se.json
@@ -19,7 +19,8 @@
"logout": "Logga ut",
"admin": "Admin",
"enabled": "Aktiverad",
- "disabled": "Inaktiverad"
+ "disabled": "Inaktiverad",
+ "expiry": "Löper ut"
},
"notifications": {
"errorLoginBlank": "Användarnamnet och/eller lösenordet lämnades tomt.",
@@ -27,5 +28,6 @@
"errorUnknown": "Okänt fel.",
"error401Unauthorized": "Obehörig. Prova att uppdatera sidan.",
"errorSaveSettings": "Det gick inte att spara inställningarna."
- }
+ },
+ "quantityStrings": {}
}
\ No newline at end of file
diff --git a/lang/common/vi-vn.json b/lang/common/vi-vn.json
index 6122823..4464173 100644
--- a/lang/common/vi-vn.json
+++ b/lang/common/vi-vn.json
@@ -9,10 +9,12 @@
"enabled": "Mở",
"disabled": "Tắt",
"reEnable": "Mở lại",
- "disable": "Tắt"
+ "disable": "Tắt",
+ "expiry": "Hết hạn"
},
"notifications": {
"errorConnection": "Không thể kết nối với jfa-go.",
"error401Unauthorized": "Không được phép. Hãy thử làm mới trang."
- }
+ },
+ "quantityStrings": {}
}
\ No newline at end of file
diff --git a/lang/common/zh-hans.json b/lang/common/zh-hans.json
index 2f90602..17e7354 100644
--- a/lang/common/zh-hans.json
+++ b/lang/common/zh-hans.json
@@ -31,7 +31,8 @@
"enabled": "已启用",
"disabled": "已禁用",
"reEnable": "重新启用",
- "disable": "禁用"
+ "disable": "禁用",
+ "expiry": "到期"
},
"notifications": {
"errorLoginBlank": "用户名/密码留空。",
@@ -39,5 +40,6 @@
"errorUnknown": "未知错误。",
"error401Unauthorized": "无授权。尝试刷新页面。",
"errorSaveSettings": "无法保存设置。"
- }
+ },
+ "quantityStrings": {}
}
\ No newline at end of file
diff --git a/lang/common/zh-hant.json b/lang/common/zh-hant.json
index 9d69d0d..f82182c 100644
--- a/lang/common/zh-hant.json
+++ b/lang/common/zh-hant.json
@@ -31,7 +31,8 @@
"enabled": "已啟用",
"disabled": "已禁用",
"reEnable": "重新啟用",
- "disable": "禁用"
+ "disable": "禁用",
+ "expiry": "到期"
},
"notifications": {
"errorLoginBlank": "帳戶名稱和/或密碼留空。",
@@ -39,5 +40,6 @@
"errorUnknown": "未知的錯誤。",
"error401Unauthorized": "未經授權。嘗試重新整理頁面。",
"errorSaveSettings": "無法儲存設置。"
- }
+ },
+ "quantityStrings": {}
}
\ No newline at end of file
diff --git a/scripts/langmover/common.json b/scripts/langmover/common.json
new file mode 100644
index 0000000..76eb632
--- /dev/null
+++ b/scripts/langmover/common.json
@@ -0,0 +1,52 @@
+{
+ "meta": {
+ "name": "English (US)"
+ },
+ "strings": {
+ "username": "common",
+ "password": "common",
+ "emailAddress": "common",
+ "name": "common",
+ "submit": "common",
+ "send": "common",
+ "success": "common",
+ "continue": "common",
+ "error": "common",
+ "copy": "common",
+ "copied": "common",
+ "time24h": "common",
+ "time12h": "common",
+ "linkTelegram": "common",
+ "contactEmail": "common",
+ "contactTelegram": "common",
+ "linkDiscord": "common",
+ "linkMatrix": "common",
+ "contactDiscord": "common",
+ "theme": "common",
+ "refresh": "common",
+ "required": "common",
+ "login": "common",
+ "logout": "common",
+ "admin": "common",
+ "enabled": "common",
+ "disabled": "common",
+ "reEnable": "common",
+ "disable": "common",
+ "contactMethods": "common",
+ "accountStatus": "common",
+ "notSet": "common",
+ "expiry": "admin"
+ },
+ "notifications": {
+ "errorLoginBlank": "common",
+ "errorConnection": "common",
+ "errorUnknown": "common",
+ "error401Unauthorized": "common",
+ "errorSaveSettings": "common"
+ },
+ "quantityStrings": {
+ "year": "common",
+ "month": "common",
+ "day": "common"
+ }
+}
diff --git a/storage.go b/storage.go
index 16d179c..38d76c7 100644
--- a/storage.go
+++ b/storage.go
@@ -202,6 +202,25 @@ func (common *commonLangs) patchCommonNotifications(to *langSection, from ...str
}
}
+func (common *commonLangs) patchCommonQuantityStrings(to *map[string]quantityString, from ...string) {
+ if *to == nil {
+ *to = map[string]quantityString{}
+ }
+ for n, ev := range (*common)[from[len(from)-1]].QuantityStrings {
+ if v, ok := (*to)[n]; !ok || (v.Singular == "" && v.Plural == "") {
+ i := 0
+ for i < len(from)-1 {
+ ev, ok = (*common)[from[i]].QuantityStrings[n]
+ if ok && ev.Singular != "" && ev.Plural != "" {
+ break
+ }
+ i++
+ }
+ (*to)[n] = ev
+ }
+ }
+}
+
func patchLang(to *langSection, from ...*langSection) {
if *to == nil {
*to = langSection{}
@@ -283,10 +302,14 @@ func (st *Storage) loadLangCommon(filesystems ...fs.FS) error {
if err == nil {
loadedLangs[fsIndex][lang.Meta.Fallback+".json"] = true
patchLang(&lang.Strings, &fallback.Strings, &english.Strings)
+ patchLang(&lang.Notifications, &fallback.Notifications, &english.Notifications)
+ patchQuantityStrings(&lang.QuantityStrings, &fallback.QuantityStrings, &english.QuantityStrings)
}
}
if (lang.Meta.Fallback != "" && err != nil) || lang.Meta.Fallback == "" {
patchLang(&lang.Strings, &english.Strings)
+ patchLang(&lang.Notifications, &english.Notifications)
+ patchQuantityStrings(&lang.QuantityStrings, &english.QuantityStrings)
}
}
st.lang.Common[index] = lang
@@ -437,6 +460,7 @@ func (st *Storage) loadLangUser(filesystems ...fs.FS) error {
}
st.lang.Common.patchCommonStrings(&lang.Strings, index)
st.lang.Common.patchCommonNotifications(&lang.Notifications, index)
+ st.lang.Common.patchCommonQuantityStrings(&lang.QuantityStrings, index)
// turns out, a lot of email strings are useful on the user page.
emailLang := []langSection{st.lang.Email[index].WelcomeEmail, st.lang.Email[index].UserDisabled, st.lang.Email[index].UserExpired}
for _, v := range emailLang {
diff --git a/ts/user.ts b/ts/user.ts
index 68af79c..ca526e4 100644
--- a/ts/user.ts
+++ b/ts/user.ts
@@ -1,7 +1,7 @@
import { ThemeManager } from "./modules/theme.js";
import { lang, LangFile, loadLangSelector } from "./modules/lang.js";
import { Modal } from "./modules/modal.js";
-import { _get, _post, notificationBox, whichAnimationEvent } from "./modules/common.js";
+import { _get, _post, notificationBox, whichAnimationEvent, toDateString } from "./modules/common.js";
import { Login } from "./modules/login.js";
interface userWindow extends Window {
@@ -31,6 +31,7 @@ window.notifications = new notificationBox(document.getElementById('notification
var rootCard = document.getElementById("card-user");
var contactCard = document.getElementById("card-contact");
+var statusCard = document.getElementById("card-status");
interface MyDetailsContactMethod {
value: string;
@@ -58,15 +59,17 @@ interface ContactDTO {
class ContactMethods {
private _card: HTMLElement;
+ private _content: HTMLElement;
private _buttons: { [name: string]: { element: HTMLElement, details: MyDetailsContactMethod } };
constructor (card: HTMLElement) {
this._card = card;
+ this._content = this._card.querySelector(".content");
this._buttons = {};
}
clear = () => {
- this._card.textContent = "";
+ this._content.textContent = "";
this._buttons = {};
}
@@ -80,7 +83,7 @@ class ContactMethods {
${icon}
-
${details.value}
+
${(details.value == "") ? window.lang.strings("notSet") : details.value}