Summary
The resx pipeline exists (Localization/Resources.resx, Resources.ru.resx, #69) and menus/dialog AXAML use it, but a whole class of user-facing strings is hardcoded English. A Russian-locale user gets a mixed-language UI precisely on the paths where clarity matters — errors and status reports.
Hardcoded sites
Clipboard/ClipboardViewModel.cs:58,63,68,142 — "Copy failed:", "Cut failed:", "Paste failed:"
RecipeFile/RecipeFileViewModel.cs:39,44,49,106,112,132 — "Save failed:", "Failed to save recipe", "Saved: ...", "Loaded: ..."
MainWindow/MainWindowViewModel.cs:67,72,219,297 — "Sync toggle failed:", "Style editor failed:", "Failed to show PLC conflict dialog", window-title format
MainWindow/MainWindow.axaml.cs:249,266 — file-picker titles "Open Recipe", "Save Recipe" and filter names
Coordinator/RecipeCoordinator.cs:378 — save-rejection message shown in the panel
RecipeGrid/RecipeGridViewModel.cs:203,232,258,480 — "Step {n}: ..." error strings
Suggested fix
Move these format strings into Resources.resx/Resources.ru.resx; the MessagePanelViewModel formatting helpers (231-239) already show the intended pattern. Grep for remaining string literals passed to the message panel after the pass to catch stragglers.
Out of scope: Core-produced validation/Result messages (English by design, logged); this issue is about strings composed in the UI layer.
Summary
The resx pipeline exists (
Localization/Resources.resx,Resources.ru.resx, #69) and menus/dialog AXAML use it, but a whole class of user-facing strings is hardcoded English. A Russian-locale user gets a mixed-language UI precisely on the paths where clarity matters — errors and status reports.Hardcoded sites
Clipboard/ClipboardViewModel.cs:58,63,68,142— "Copy failed:", "Cut failed:", "Paste failed:"RecipeFile/RecipeFileViewModel.cs:39,44,49,106,112,132— "Save failed:", "Failed to save recipe", "Saved: ...", "Loaded: ..."MainWindow/MainWindowViewModel.cs:67,72,219,297— "Sync toggle failed:", "Style editor failed:", "Failed to show PLC conflict dialog", window-title formatMainWindow/MainWindow.axaml.cs:249,266— file-picker titles "Open Recipe", "Save Recipe" and filter namesCoordinator/RecipeCoordinator.cs:378— save-rejection message shown in the panelRecipeGrid/RecipeGridViewModel.cs:203,232,258,480— "Step {n}: ..." error stringsSuggested fix
Move these format strings into
Resources.resx/Resources.ru.resx; theMessagePanelViewModelformatting helpers (231-239) already show the intended pattern. Grep for remaining string literals passed to the message panel after the pass to catch stragglers.Out of scope: Core-produced validation/
Resultmessages (English by design, logged); this issue is about strings composed in the UI layer.