feat(i18n): localize ViewModel-built strings via ambient Loc accessor
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using ClaudeDo.Data.Models;
|
||||
using ClaudeDo.Ui.Localization;
|
||||
using TaskStatus = ClaudeDo.Data.Models.TaskStatus;
|
||||
|
||||
namespace ClaudeDo.Ui.ViewModels.Islands;
|
||||
@@ -31,7 +32,7 @@ public sealed partial class TaskRowViewModel : ViewModelBase
|
||||
[ObservableProperty] private bool _parentFinalized;
|
||||
|
||||
public DateTime CreatedAt { get; init; }
|
||||
public string CreatedAtFormatted => CreatedAt == default ? "—" : $"Created {CreatedAt:MMM d}";
|
||||
public string CreatedAtFormatted => CreatedAt == default ? "—" : Loc.T("vm.taskRow.createdPrefix", CreatedAt.ToString("MMM d"));
|
||||
|
||||
public int StepsCount { get; init; }
|
||||
public int StepsCompleted { get; init; }
|
||||
@@ -50,8 +51,8 @@ public sealed partial class TaskRowViewModel : ViewModelBase
|
||||
|
||||
public string? PlanningBadge => PlanningPhase switch
|
||||
{
|
||||
PlanningPhase.Active => "PLANNING",
|
||||
PlanningPhase.Finalized => "PLANNED",
|
||||
PlanningPhase.Active => Loc.T("vm.planningBadge.active"),
|
||||
PlanningPhase.Finalized => Loc.T("vm.planningBadge.finalized"),
|
||||
_ => null,
|
||||
};
|
||||
|
||||
@@ -77,9 +78,19 @@ public sealed partial class TaskRowViewModel : ViewModelBase
|
||||
|
||||
public string DiffAdditionsText => $"+{DiffAdditions}";
|
||||
public string DiffDeletionsText => $"−{DiffDeletions}";
|
||||
public string StepsText => $"{StepsCompleted}/{StepsCount} steps";
|
||||
public string StepsText => Loc.T("vm.taskRow.stepsText", StepsCompleted, StepsCount);
|
||||
|
||||
public string StatusLabel => Status == TaskStatus.WaitingForReview ? "Waiting for Review" : Status.ToString();
|
||||
public string StatusLabel => Status switch
|
||||
{
|
||||
TaskStatus.Idle => Loc.T("vm.taskStatus.idle"),
|
||||
TaskStatus.Queued => Loc.T("vm.taskStatus.queued"),
|
||||
TaskStatus.Running => Loc.T("vm.taskStatus.running"),
|
||||
TaskStatus.WaitingForReview => Loc.T("vm.taskStatus.waitingForReview"),
|
||||
TaskStatus.Done => Loc.T("vm.taskStatus.done"),
|
||||
TaskStatus.Failed => Loc.T("vm.taskStatus.failed"),
|
||||
TaskStatus.Cancelled => Loc.T("vm.taskStatus.cancelled"),
|
||||
_ => Status.ToString(),
|
||||
};
|
||||
|
||||
public string StatusChipClass => (Status, IsBlocked: !string.IsNullOrEmpty(BlockedByTaskId)) switch
|
||||
{
|
||||
@@ -164,6 +175,14 @@ public sealed partial class TaskRowViewModel : ViewModelBase
|
||||
partial void OnDiffAdditionsChanged(int value) { OnPropertyChanged(nameof(HasDiff)); OnPropertyChanged(nameof(DiffAdditionsText)); }
|
||||
partial void OnDiffDeletionsChanged(int value) { OnPropertyChanged(nameof(HasDiff)); OnPropertyChanged(nameof(DiffDeletionsText)); }
|
||||
|
||||
public void RefreshLocalized()
|
||||
{
|
||||
OnPropertyChanged(nameof(StatusLabel));
|
||||
OnPropertyChanged(nameof(PlanningBadge));
|
||||
OnPropertyChanged(nameof(CreatedAtFormatted));
|
||||
OnPropertyChanged(nameof(StepsText));
|
||||
}
|
||||
|
||||
public static TaskRowViewModel FromEntity(TaskEntity t)
|
||||
{
|
||||
var row = new TaskRowViewModel { Id = t.Id, CreatedAt = t.CreatedAt };
|
||||
|
||||
Reference in New Issue
Block a user