diff --git a/pkg/cloudcommon/db/db_dispatcher.go b/pkg/cloudcommon/db/db_dispatcher.go index a085b9cc0a..40ce99439c 100644 --- a/pkg/cloudcommon/db/db_dispatcher.go +++ b/pkg/cloudcommon/db/db_dispatcher.go @@ -928,6 +928,12 @@ func (dispatcher *DBModelDispatcher) Get(ctx context.Context, idStr string, quer if err != nil { return nil, err } else if data != nil { + if dataDict, ok := data.(*jsonutils.JSONDict); ok { + i18nDict := dispatcher.modelManager.GetI18N(ctx, idStr, data) + if i18nDict != nil { + dataDict.Set("_i18n", i18nDict) + } + } return data, nil } diff --git a/pkg/cloudcommon/db/interface.go b/pkg/cloudcommon/db/interface.go index 93fe02d8a4..b9a169befa 100644 --- a/pkg/cloudcommon/db/interface.go +++ b/pkg/cloudcommon/db/interface.go @@ -127,6 +127,8 @@ type IModelManager interface { QueryDistinctExtraField(q *sqlchemy.SQuery, field string) (*sqlchemy.SQuery, error) GetPagingConfig() *SPagingConfig + + GetI18N(ctx context.Context, idstr string, resObj jsonutils.JSONObject) *jsonutils.JSONDict } type IModel interface { diff --git a/pkg/cloudcommon/db/modelbase.go b/pkg/cloudcommon/db/modelbase.go index 75cd5f17eb..010a5c5631 100644 --- a/pkg/cloudcommon/db/modelbase.go +++ b/pkg/cloudcommon/db/modelbase.go @@ -359,14 +359,15 @@ func (manager *SModelBaseManager) GetPropertyDistinctField(ctx context.Context, } } - var res = jsonutils.NewDict() q := im.Query() q, err = ListItemQueryFilters(im, ctx, q, userCred, query, policy.PolicyActionList) if err != nil { return nil, err } - var backupQuery = *q - + var ( + backupQuery = *q + res = jsonutils.NewDict() + ) // query field for i := 0; i < len(fields); i++ { var nq = backupQuery @@ -424,6 +425,10 @@ func (manager *SModelBaseManager) OnCreateFailed(ctx context.Context, userCred m return nil } +func (manager *SModelBaseManager) GetI18N(ctx context.Context, idstr string, resObj jsonutils.JSONObject) *jsonutils.JSONDict { + return nil +} + func (model *SModelBase) GetId() string { return "" } diff --git a/pkg/logger/models/actionlog.go b/pkg/logger/models/actionlog.go index 86bd5aa58b..fa60126ba8 100644 --- a/pkg/logger/models/actionlog.go +++ b/pkg/logger/models/actionlog.go @@ -76,10 +76,30 @@ func (action *SActionlog) CustomizeCreate(ctx context.Context, userCred mcclient func (action *SActionlog) GetI18N(ctx context.Context) *jsonutils.JSONDict { r := jsonutils.NewDict() - r.Set("action", jsonutils.NewString(logclient.OpsActionI18nTable.Lookup(ctx, action.Action))) + act18 := logclient.OpsActionI18nTable.Lookup(ctx, action.Action) + r.Set("action", jsonutils.NewString(act18)) return r } +func (man *SActionlogManager) GetI18N(ctx context.Context, idstr string, resObj jsonutils.JSONObject) *jsonutils.JSONDict { + if idstr != "distinct-field" { + return nil + } + res := &struct { + Action []string `json:"action"` + }{} + if err := resObj.Unmarshal(res); err != nil { + return nil + } + for i, act := range res.Action { + act18 := logclient.OpsActionI18nTable.Lookup(ctx, act) + res.Action[i] = act18 + } + robj := jsonutils.Marshal(res) + rdict := robj.(*jsonutils.JSONDict) + return rdict +} + // Websockets 不再拉取 ActionLog 的消息,因此注释掉如下代码 // 可以保留,以便有需求时,再次打开 // func (manager *SActionlogManager) OnCreateComplete(ctx context.Context, items []db.IModel, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) {