Вы, кажется, делаете тяжелую погоду.
Я понимаю, что есть сложность перевода, но наиболее простой задачей является просто применить принцип KISS и добавить вычисленное поле в набор данных, который предоставляет текстовое представление статуса членства.
Для обработки перевода самым чистым способом было бы, конечно, иметь отдельную таблицу текстов статуса членства для разных языков и выбрать язык для использования во время выполнения. Если вы не хотите, чтобы вас это беспокоило, просто используйте Values
свойство a TStringList
для поиска переводов в событии OnCalcFields сетки DataSet.
Обновление Неправильно утверждать, что вы можете добавлять расчетные поля в FDQuery, но не в FDMemtable. Следующий код работает нормально:
procedure TForm1.FDMemTable1CalcFields(DataSet: TDataSet);
begin
DataSet.FieldByName('Description').AsString := IntToStr(DataSet.FieldByName('ID').AsInteger);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
F : TField;
begin
F := TIntegerField.Create(Self);
F.FieldName := 'ID';
F.FieldKind := fkData;
F.DataSet := FDMemTable1;
F := TStringField.Create(Self);
F.Size := 80;
F.FieldName := 'Description';
F.FieldKind := fkInternalCalc;
F.DataSet := FDMemTable1;
FDMemTable1.CreateDataSet;
FDMemTable1.InsertRecord([1]);
FDMemTable1.InsertRecord([2]);
end;
и корректно отображает как столбцы, ID, так и описание в строковой привязке в реальном времени.