From c2a3e38194c7bb4ca1ea62f033e633e597e09be4 Mon Sep 17 00:00:00 2001
From: wxiaoguang <wxiaoguang@gmail.com>
Date: Mon, 7 Feb 2022 15:43:53 +0800
Subject: [PATCH] Fix the missing i18n key for update checker (#18646)

---
 modules/translation/translation.go | 12 ++++++++++++
 options/locale/locale_en-US.ini    |  1 +
 services/cron/tasks.go             |  7 +++++++
 3 files changed, 20 insertions(+)

diff --git a/modules/translation/translation.go b/modules/translation/translation.go
index 2dce6e16b9..977f2cdc23 100644
--- a/modules/translation/translation.go
+++ b/modules/translation/translation.go
@@ -39,6 +39,18 @@ func AllLangs() []LangType {
 	return allLangs
 }
 
+// TryTr tries to do the translation, if no translation, it returns (format, false)
+func TryTr(lang, format string, args ...interface{}) (string, bool) {
+	s := i18n.Tr(lang, format, args...)
+	// now the i18n library is not good enough and we can only use this hacky method to detect whether the transaction exists
+	idx := strings.IndexByte(format, '.')
+	defaultText := format
+	if idx > 0 {
+		defaultText = format[idx+1:]
+	}
+	return s, s != defaultText
+}
+
 // InitLocales loads the locales
 func InitLocales() {
 	i18n.Reset()
diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini
index 7a291cd75c..e91016bdc0 100644
--- a/options/locale/locale_en-US.ini
+++ b/options/locale/locale_en-US.ini
@@ -2436,6 +2436,7 @@ dashboard.last_gc_pause = Last GC Pause
 dashboard.gc_times = GC Times
 dashboard.delete_old_actions = Delete all old actions from database
 dashboard.delete_old_actions.started = Delete all old actions from database started.
+dashboard.update_checker = Update checker
 
 users.user_manage_panel = User Account Management
 users.new_account = Create User Account
diff --git a/services/cron/tasks.go b/services/cron/tasks.go
index 07da2fe8d6..070fb6e9e1 100644
--- a/services/cron/tasks.go
+++ b/services/cron/tasks.go
@@ -17,6 +17,7 @@ import (
 	"code.gitea.io/gitea/modules/log"
 	"code.gitea.io/gitea/modules/process"
 	"code.gitea.io/gitea/modules/setting"
+	"code.gitea.io/gitea/modules/translation"
 )
 
 var (
@@ -121,6 +122,12 @@ func GetTask(name string) *Task {
 // RegisterTask allows a task to be registered with the cron service
 func RegisterTask(name string, config Config, fun func(context.Context, *user_model.User, Config) error) error {
 	log.Debug("Registering task: %s", name)
+
+	i18nKey := "admin.dashboard." + name
+	if _, ok := translation.TryTr("en-US", i18nKey); !ok {
+		return fmt.Errorf("translation is missing for task %q, please add translation for %q", name, i18nKey)
+	}
+
 	_, err := setting.GetCronSettings(name, config)
 	if err != nil {
 		log.Error("Unable to register cron task with name: %s Error: %v", name, err)