diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index 5e40e727a..520bf84f3 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -3,7 +3,7 @@ "isRoot": true, "tools": { "AXSharp.ixc": { - "version": "0.47.0-alpha.392", + "version": "0.47.0-alpha.394", "commands": [ "ixc" ], @@ -17,14 +17,14 @@ "rollForward": false }, "AXSharp.ixd": { - "version": "0.47.0-alpha.392", + "version": "0.47.0-alpha.394", "commands": [ "ixd" ], "rollForward": false }, "AXSharp.ixr": { - "version": "0.47.0-alpha.392", + "version": "0.47.0-alpha.394", "commands": [ "ixr" ], @@ -59,3 +59,4 @@ + diff --git a/COMPONENTS_MATURITY.md b/COMPONENTS_MATURITY.md index 63987e687..c65d1d649 100644 --- a/COMPONENTS_MATURITY.md +++ b/COMPONENTS_MATURITY.md @@ -60,32 +60,16 @@ This document tracks the maturity state of all AXOpen components across differen ### Implemented - [ ] Core functionality working -- [ ] Public API stable - [ ] Basic documentation exists - [ ] Compiles without errors - [ ] Basic manual testing completed ### Tested -- [ ] Unit tests cover >80% of public methods - [ ] Integration tests exist where applicable - [ ] CI/CD pipeline runs tests -- [ ] Test results consistently pass -- [ ] Performance benchmarks defined ### Battle Tested - [ ] Deployed in production environment -- [ ] Proven reliable over extended period (>6 months) +- [ ] Proven reliable over extended period - [ ] Performance validated under load -- [ ] Support & maintenance processes established -- [ ] Customer feedback incorporated - -## Update Process - -This matrix should be updated when: -- New components are added -- Components reach new maturity milestones -- Production deployments are completed -- Major issues are discovered/resolved - -**Last Updated**: November 7, 2025 -**Next Review**: December 2025 +- [ ] Support & maintenance processes established \ No newline at end of file diff --git a/Directory.Packages.props b/Directory.Packages.props index b01d9b1f3..a7d365077 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -11,11 +11,11 @@ - - - - - + + + + + @@ -97,3 +97,4 @@ + diff --git a/README.md b/README.md index f9ecef5be..c4b9d10c1 100644 --- a/README.md +++ b/README.md @@ -46,64 +46,11 @@ Moreover, AXOpen comprises powerful tools that expedite the development of HMI/U # Library Overview -AXOpen provides a comprehensive set of libraries and components for industrial automation. Here's a detailed overview of the main libraries: - -## Core Libraries - -- **Core**: Contains fundamental components and base functionality for the AXOpen framework -- **Abstractions**: Provides interfaces and abstract classes that define the framework's architecture -- **Utils**: Utility functions and helper classes for common operations -- **Timers**: Time-related functionality and timing operations -- **Data**: Data management and handling subsystem for controller data -- **IO**: Input/Output operations and communications - -## Component Libraries - -### Robotics -- **components.robotics**: Base robotics functionality and common interfaces -- **components.abb.robotics**: Integration with ABB robots -- **components.kuka.robotics**: Integration with KUKA robots -- **components.ur.robotics**: Integration with Universal Robots -- **components.mitsubishi.robotics**: Integration with Mitsubishi robots - -### Vision and Identification -- **components.cognex.vision**: Integration with Cognex vision systems -- **components.keyence.vision**: Integration with Keyence vision systems -- **components.balluff.identification**: Balluff identification systems integration -- **components.siem.identification**: Siemens identification systems integration - -### Motion and Control -- **components.drives**: Base functionality for drive systems -- **components.festo.drives**: Integration with Festo drive systems -- **components.rexroth.drives**: Integration with Rexroth drive systems -- **components.rexroth.press**: Specialized integration for Rexroth press systems -- **components.desoutter.tightening**: Integration with Desoutter tightening systems -- **components.pneumatics**: Pneumatic system controls and operations - -### Base Components -- **components.abstractions**: Base abstractions for all components -- **components.elements**: Basic control elements and building blocks - -## Testing and Development -- **inspectors**: Tools for system inspection and diagnostics -- **probers**: Testing and probing functionality -- **toolbox**: Collection of development tools and utilities -- **tools**: Additional development tools and helpers - -## Integration and Platform -- **simatic1500**: Specific integration for Siemens SIMATIC S7-1500 controllers -- **sdk-ax**: Software Development Kit for AX integration -- **traversals**: System traversal and navigation utilities -- **Security**: Security-related functionality and access control - -Each library is designed with modularity in mind, allowing you to use only the components you need for your specific automation project. All components come with built-in support for: -- Automated UI generation -- Integrated alarm handling -- Diagnostic capabilities -- Documentation -- Example implementations - -## Tasks +AXOpen provides a comprehensive set of libraries and components for industrial automation. For an up-to-date list of available packages, their maturity, and intended usage, see [COMPONENTS_MATURITY](COMPONENTS_MATURITY.md). + +## Notable features + +### Tasks The task provides a simple coordination primitive to execute actions. Tasks provide additional benefits regarding handling and observability of executed actions. @@ -162,6 +109,12 @@ We are planning the first pilot project using `AXOpen` in the coming months. Onc In parallel with the project's advancement, we are incrementally building the [documentation](https://inxton.github.io/AXOpen/). We invite you to visit the link if you wish to learn more about AXOpen. + ## About the Repository More about how the repository is organized and structured, see [here](src/README.md). + + +## Important remarks + +**Localization**: AXOpen projects come with pre-scaffolded localization resources for multiple languages. These resources are meant as a starting point: not all translations are complete or production-ready, and some texts may still fall back to English. Before deploying, review and adjust the localized strings relevant to your target languages. diff --git a/src/core/src/AXOpen.Core.Blazor/AxoArrays/AxoBoolArrayView.razor b/src/core/src/AXOpen.Core.Blazor/AxoArrays/AxoBoolArrayView.razor index 1806d0769..a7f1812bd 100644 --- a/src/core/src/AXOpen.Core.Blazor/AxoArrays/AxoBoolArrayView.razor +++ b/src/core/src/AXOpen.Core.Blazor/AxoArrays/AxoBoolArrayView.razor @@ -5,12 +5,15 @@ @using Operon.Icons @using System.Globalization @using AXSharp.Connector.Localizations +@using Microsoft.Extensions.Localization +@using AXOpen.Core.Blazor.Properties +@inject IStringLocalizer Localizer @* @using AXSharp.Presentation.Blazor.Controls.Layouts.TabControlComponents; *@ @inherits RenderableComplexComponentBase;
- +

@Component.GetAttributeName(CultureInfo.CurrentUICulture)

diff --git a/src/core/src/AXOpen.Core.Blazor/AxoArrays/AxoByteArrayView.razor b/src/core/src/AXOpen.Core.Blazor/AxoArrays/AxoByteArrayView.razor index 1251e7d66..b6156d41c 100644 --- a/src/core/src/AXOpen.Core.Blazor/AxoArrays/AxoByteArrayView.razor +++ b/src/core/src/AXOpen.Core.Blazor/AxoArrays/AxoByteArrayView.razor @@ -8,11 +8,14 @@ @using Operon.Icons @using System.Globalization @using AXSharp.Connector.Localizations +@using Microsoft.Extensions.Localization +@using AXOpen.Core.Blazor.Properties +@inject IStringLocalizer Localizer @inherits RenderableComplexComponentBase;
- +

@Component.GetAttributeName(CultureInfo.CurrentUICulture)

diff --git a/src/core/src/AXOpen.Core.Blazor/AxoComponent/AxoCompnentsBase/AxoComponentContainerView.razor b/src/core/src/AXOpen.Core.Blazor/AxoComponent/AxoCompnentsBase/AxoComponentContainerView.razor index c8ff5e23b..b559f22c2 100644 --- a/src/core/src/AXOpen.Core.Blazor/AxoComponent/AxoCompnentsBase/AxoComponentContainerView.razor +++ b/src/core/src/AXOpen.Core.Blazor/AxoComponent/AxoCompnentsBase/AxoComponentContainerView.razor @@ -3,6 +3,9 @@ @using AXOpen.Messaging.Static @using System.Globalization @using AXSharp.Connector.Localizations +@using Microsoft.Extensions.Localization +@using AXOpen.Core.Blazor.Properties +@inject IStringLocalizer Localizer @inherits RenderableComponentBase
- @ActiveAlarmCount Active Alarm@(ActiveAlarmCount != 1 ? "s" : "") + title="@ActiveAlarmCount @(ActiveAlarmCount != 1 ? Localizer["Alarms"] : Localizer["Alarm"]) @Localizer["Active"]"> + @ActiveAlarmCount @Localizer["Active"] @(ActiveAlarmCount != 1 ? Localizer["Alarms"] : Localizer["Alarm"]) }
@@ -71,7 +74,7 @@ if (Component._isManuallyControllable.Cyclic == true) {
-

CONFIGURATION

+

@Localizer["CONFIGURATION"]

@if(ConfigContent is not null) { @@ -89,7 +92,7 @@ else {
-

STATE

+

@Localizer["STATE"]

@ConfigAndStateViewContent
diff --git a/src/core/src/AXOpen.Core.Blazor/AxoCoordination/AxoStep/AxoStepView.razor b/src/core/src/AXOpen.Core.Blazor/AxoCoordination/AxoStep/AxoStepView.razor index 7068fe923..4c85c4754 100644 --- a/src/core/src/AXOpen.Core.Blazor/AxoCoordination/AxoStep/AxoStepView.razor +++ b/src/core/src/AXOpen.Core.Blazor/AxoCoordination/AxoStep/AxoStepView.razor @@ -2,6 +2,9 @@ @using AXOpen.Core.Blazor.Culture; @using AXSharp.Connector.ValueTypes; @using AXSharp.Connector; +@using Microsoft.Extensions.Localization +@using AXOpen.Core.Blazor.Properties +@inject IStringLocalizer Localizer @inherits RenderableComplexComponentBase
@@ -31,7 +34,7 @@
@if (_stepState == eStepState.Active || _stepState == eStepState.Done) { - + @_durationText diff --git a/src/core/src/AXOpen.Core.Blazor/AxoMessenger/Static/AxoMessengerView.razor b/src/core/src/AXOpen.Core.Blazor/AxoMessenger/Static/AxoMessengerView.razor index 072f5284f..04fa94053 100644 --- a/src/core/src/AXOpen.Core.Blazor/AxoMessenger/Static/AxoMessengerView.razor +++ b/src/core/src/AXOpen.Core.Blazor/AxoMessenger/Static/AxoMessengerView.razor @@ -9,13 +9,13 @@
-
+
@ConvertToInternalSeverityName((eAxoMessageCategory)Component.Category.LastValue)
@if (!string.IsNullOrWhiteSpace(Component.GetMessageText())) { - @Component.GetMessageText() + @Component.GetMessageText() }
@StateLabel
diff --git a/src/core/src/AXOpen.Core.Blazor/AxoObject/AxoObjectDiagnosticsView.razor b/src/core/src/AXOpen.Core.Blazor/AxoObject/AxoObjectDiagnosticsView.razor index 5093978b6..969e71e3b 100644 --- a/src/core/src/AXOpen.Core.Blazor/AxoObject/AxoObjectDiagnosticsView.razor +++ b/src/core/src/AXOpen.Core.Blazor/AxoObject/AxoObjectDiagnosticsView.razor @@ -18,12 +18,12 @@ {
- +
- Severity + @Localizer["Severity"] @foreach (var severity in SeverityOptions) {
@@ -61,16 +61,16 @@ - - - - - - - + + + + + + + @if (HasActionsColumn) { - + } @@ -78,7 +78,7 @@ @if (Rows.Count == 0) { - + } else @@ -92,7 +92,7 @@ role="@RowRole" tabindex="@RowTabIndex"> @@ -126,7 +126,7 @@ { } @@ -137,26 +137,26 @@
SeverityTitleEquipmentStateRaisedAcknowledgedDuration@Localizer["Severity"]@Localizer["Title"]@Localizer["Equipment"]@Localizer["State"]@Localizer["Raised"]@Localizer["Acknowledged"]@Localizer["Duration"]Actions@Localizer["Actions"]
No alarms to display.@Localizer["NoAlarmsToDisplay"]
- @@ -115,9 +115,9 @@ @if (alarm.State == (eAxoMessengerState.ActiveAcknowledgeRequired)) { - }
-

Ack

+

@Localizer["Ack"]

- Suggestion: + @Localizer["Suggestion"]: @DisplayOrDash(alarm.GetHelpText())
- Symbol: + @Localizer["Symbol"]: @DisplayOrDash(alarm.Component.Symbol)
- Human Readable: + @Localizer["HumanReadable"]: @DisplayOrDash(alarm.Component.HumanReadable)
- Alarm ID: + @Localizer["AlarmId"]: @DisplayOrDash(alarm.Identity.LastValue.ToString())
- Restore: - + @Localizer["Restore"]: +
@@ -178,23 +178,23 @@ } private static string DisplayOrDash(string? value) => string.IsNullOrWhiteSpace(value) ? "—" : value; - private static string SeverityLabel(eAxoMessageCategory category) => ConvertToSeverityName(category); - private static string StateLabel(AxoMessenger alarm) + private string SeverityLabel(eAxoMessageCategory category) => ConvertToSeverityName(category); + private string StateLabel(AxoMessenger alarm) { if (!alarm.IsActive) { - return "Cleared"; + return Localizer["Cleared"]; } - return alarm.IsAcknowledged ? "Active · Ack" : "Active"; + return alarm.IsAcknowledged ? Localizer["ActiveAck"] : Localizer["Active"]; } private static string FormatTimestamp(DateTime? timestamp) => timestamp?.ToLocalTime().ToString("g") ?? "—"; - private static string FormatAcknowledged(AxoMessenger Component) + private string FormatAcknowledged(AxoMessenger Component) { if (!Component.IsAcknowledged) { - return Component.IsActive ? "Pending" : "—"; + return Component.IsActive ? Localizer["Pending"] : "—"; } return FormatTimestamp(Component.Acknowledged.LastValue); @@ -266,24 +266,17 @@ } } - private static string ConvertToSeverityName(eAxoMessageCategory category) + private string ConvertToSeverityName(eAxoMessageCategory category) { - switch (category) + return category switch { - case eAxoMessageCategory.Info: - return "info"; - case eAxoMessageCategory.Warning: - return "warning"; - case eAxoMessageCategory.Error: - return "error"; - case eAxoMessageCategory.ProgrammingError: - return "system"; - case eAxoMessageCategory.Critical: - return "fatal"; - - } - - return string.Empty; + eAxoMessageCategory.Info => Localizer["SeverityInfo"], + eAxoMessageCategory.Warning => Localizer["SeverityWarning"], + eAxoMessageCategory.Error => Localizer["SeverityError"], + eAxoMessageCategory.ProgrammingError => Localizer["SeverityProgrammingError"], + eAxoMessageCategory.Critical => Localizer["SeverityCritical"], + _ => string.Empty + }; } private static string ConvertToInternalBadgeSeverityName(eAxoMessageCategory category) diff --git a/src/core/src/AXOpen.Core.Blazor/AxoTask/AxoTaskView.razor b/src/core/src/AXOpen.Core.Blazor/AxoTask/AxoTaskView.razor index 6d9e49aef..b2491733b 100644 --- a/src/core/src/AXOpen.Core.Blazor/AxoTask/AxoTaskView.razor +++ b/src/core/src/AXOpen.Core.Blazor/AxoTask/AxoTaskView.razor @@ -36,7 +36,7 @@ - @Description + @Description.ToUpper() @if (!HideRestoreButton) diff --git a/src/core/src/AXOpen.Core.Blazor/AxoTask/AxoTaskView.razor.cs b/src/core/src/AXOpen.Core.Blazor/AxoTask/AxoTaskView.razor.cs index 1a84f3460..8f3a78386 100644 --- a/src/core/src/AXOpen.Core.Blazor/AxoTask/AxoTaskView.razor.cs +++ b/src/core/src/AXOpen.Core.Blazor/AxoTask/AxoTaskView.razor.cs @@ -123,7 +123,11 @@ private string ButtonClass public bool IsDisabled => Disable || Component.IsDisabled.Cyclic || !Enabled; - public string Description => string.IsNullOrEmpty(Text) ? string.IsNullOrEmpty(Component.AttributeName) ? Component.GetSymbolTail() : Component.GetAttributeName(CultureInfo.CurrentUICulture) : Text; + public string Description => string.IsNullOrEmpty(Text) + ? string.IsNullOrEmpty(Component.AttributeName) + ? Component.GetSymbolTail() + : Component.GetAttributeName(CultureInfo.CurrentUICulture) + : Text; } public class AxoTaskCommandView : AxoTaskView diff --git a/src/core/src/AXOpen.Core.Blazor/Properties/AxOpenCoreResources.de-DE.resx b/src/core/src/AXOpen.Core.Blazor/Properties/AxOpenCoreResources.de-DE.resx index 2f7da86b4..15db6ae52 100644 --- a/src/core/src/AXOpen.Core.Blazor/Properties/AxOpenCoreResources.de-DE.resx +++ b/src/core/src/AXOpen.Core.Blazor/Properties/AxOpenCoreResources.de-DE.resx @@ -201,6 +201,12 @@ Major Fault + + Fehler + + + Systemfehler + Kritisch @@ -225,4 +231,87 @@ aktiv + + + Schweregrad + + + Titel + + + Zustand + + + Aktionen + + + + Alarme suchen + + + Titel oder Ausrüstung suchen + + + Aktualisieren + + + Nachrichten aktualisieren + + + Keine Alarme anzuzeigen. + + + Details ausblenden + + + Details anzeigen + + + Alarm bestätigen + + + BESTÄT + + + Best + + + Ausstehend + + + Aktiv · Best + + + + Alarme + + + Alarm + + + Service-Ansicht umschalten + + + Normal + + + Service + + + KONFIGURATION + + + ZUSTAND + + + + Daten + + + + Schweregrad + + + Alarmcode + \ No newline at end of file diff --git a/src/core/src/AXOpen.Core.Blazor/Properties/AxOpenCoreResources.es-ES.resx b/src/core/src/AXOpen.Core.Blazor/Properties/AxOpenCoreResources.es-ES.resx index 327b56858..5fa26fad3 100644 --- a/src/core/src/AXOpen.Core.Blazor/Properties/AxOpenCoreResources.es-ES.resx +++ b/src/core/src/AXOpen.Core.Blazor/Properties/AxOpenCoreResources.es-ES.resx @@ -201,6 +201,12 @@ Fallo grave + + Error + + + Error del sistema + Crítica @@ -225,4 +231,87 @@ activo + + + Gravedad + + + Título + + + Estado + + + Acciones + + + + Buscar alarmas + + + Buscar título o equipo + + + Actualizar + + + Actualizar mensajes + + + No hay alarmas para mostrar. + + + Ocultar detalles + + + Mostrar detalles + + + Confirmar alarma + + + CONF + + + Conf + + + Pendiente + + + Activo · Conf + + + + alarmas + + + alarma + + + Alternar vista de servicio + + + Normal + + + Servicio + + + CONFIGURACIÓN + + + ESTADO + + + + Datos + + + + Gravedad + + + Código de alarma + \ No newline at end of file diff --git a/src/core/src/AXOpen.Core.Blazor/Properties/AxOpenCoreResources.hu-HU.resx b/src/core/src/AXOpen.Core.Blazor/Properties/AxOpenCoreResources.hu-HU.resx index 023e01319..64eb644c1 100644 --- a/src/core/src/AXOpen.Core.Blazor/Properties/AxOpenCoreResources.hu-HU.resx +++ b/src/core/src/AXOpen.Core.Blazor/Properties/AxOpenCoreResources.hu-HU.resx @@ -201,6 +201,12 @@ Fő hiba + + Hiba + + + Rendszerhiba + Kritikus @@ -225,4 +231,87 @@ aktív + + + Súlyosság + + + Cím + + + Állapot + + + Műveletek + + + + Riasztások keresése + + + Cím vagy berendezés keresése + + + Frissítés + + + Üzenetek frissítése + + + Nincsenek megjelenítendő riasztások. + + + Részletek elrejtése + + + Részletek megjelenítése + + + Riasztás nyugtázása + + + NYUGT + + + Nyugt + + + Függőben + + + Aktív · Nyugt + + + + riasztások + + + riasztás + + + Szerviz nézet váltása + + + Normál + + + Szerviz + + + KONFIGURÁCIÓ + + + ÁLLAPOT + + + + Adatok + + + + Súlyosság + + + Riasztási kód + \ No newline at end of file diff --git a/src/core/src/AXOpen.Core.Blazor/Properties/AxOpenCoreResources.pl-PL.resx b/src/core/src/AXOpen.Core.Blazor/Properties/AxOpenCoreResources.pl-PL.resx index 1dfebb2b4..473578a71 100644 --- a/src/core/src/AXOpen.Core.Blazor/Properties/AxOpenCoreResources.pl-PL.resx +++ b/src/core/src/AXOpen.Core.Blazor/Properties/AxOpenCoreResources.pl-PL.resx @@ -201,6 +201,12 @@ Główny błąd + + Błąd + + + Błąd systemu + Krytyczny @@ -225,4 +231,87 @@ aktywny + + + Ważność + + + Tytuł + + + Stan + + + Działania + + + + Szukaj alarmów + + + Wyszukaj tytuł lub sprzęt + + + Odśwież + + + Odśwież wiadomości + + + Brak alarmów do wyświetlenia. + + + Ukryj szczegóły + + + Pokaż szczegóły + + + Potwierdź alarm + + + POTW + + + Potw + + + Oczekujący + + + Aktywny · Potw + + + + alarmy + + + alarm + + + Przełącz widok serwisowy + + + Normalny + + + Serwis + + + KONFIGURACJA + + + STAN + + + + Dane + + + + Ważność + + + Kod alarmu + \ No newline at end of file diff --git a/src/core/src/AXOpen.Core.Blazor/Properties/AxOpenCoreResources.resx b/src/core/src/AXOpen.Core.Blazor/Properties/AxOpenCoreResources.resx index 0812c76c7..a1870407a 100644 --- a/src/core/src/AXOpen.Core.Blazor/Properties/AxOpenCoreResources.resx +++ b/src/core/src/AXOpen.Core.Blazor/Properties/AxOpenCoreResources.resx @@ -145,6 +145,12 @@ Major Fault + + Error + + + System Error + Critical @@ -171,4 +177,87 @@ active + + + Severity + + + Title + + + State + + + Actions + + + + Search alarms + + + Search title or equipment + + + Refresh + + + Refresh messages + + + No alarms to display. + + + Hide details + + + Show details + + + Acknowledge alarm + + + ACKN + + + Ack + + + Pending + + + Active · Ack + + + + alarms + + + alarm + + + Toggle service view + + + Normal + + + Service + + + CONFIGURATION + + + STATE + + + + Data + + + + Severity + + + Alarm code + \ No newline at end of file diff --git a/src/core/src/AXOpen.Core.Blazor/Properties/AxOpenCoreResources.sk-SK.resx b/src/core/src/AXOpen.Core.Blazor/Properties/AxOpenCoreResources.sk-SK.resx index f6b146558..3c7f02390 100644 --- a/src/core/src/AXOpen.Core.Blazor/Properties/AxOpenCoreResources.sk-SK.resx +++ b/src/core/src/AXOpen.Core.Blazor/Properties/AxOpenCoreResources.sk-SK.resx @@ -201,6 +201,12 @@ Hlavná porucha + + Chyba + + + Chyba systému + Kritické @@ -225,4 +231,87 @@ aktívny + + + Závažnosť + + + Názov + + + Stav + + + Akcie + + + + Hľadať alarmy + + + Hľadať názov alebo zariadenie + + + Obnoviť + + + Obnoviť správy + + + Žiadne alarmy na zobrazenie. + + + Skryť podrobnosti + + + Zobraziť podrobnosti + + + Potvrdiť alarm + + + POTV + + + Potv + + + Čakajúci + + + Aktívny · Potv + + + + alarmy + + + alarm + + + Prepnúť servisné zobrazenie + + + Normálny + + + Servis + + + KONFIGURÁCIA + + + STAV + + + + Údaje + + + + Závažnosť + + + Kód alarmu + \ No newline at end of file diff --git a/src/inspectors/src/AXOpen.Inspectors.blazor/AxoInspectorDataSpotView.razor b/src/inspectors/src/AXOpen.Inspectors.blazor/AxoInspectorDataSpotView.razor index a9e9c97d6..97f32768e 100644 --- a/src/inspectors/src/AXOpen.Inspectors.blazor/AxoInspectorDataSpotView.razor +++ b/src/inspectors/src/AXOpen.Inspectors.blazor/AxoInspectorDataSpotView.razor @@ -42,14 +42,14 @@ private string GetResultText() => ResultValue switch { - eInspectorResult.NoAction => "No Action", - eInspectorResult.Running => "Running", - eInspectorResult.Passed => "Passed", - eInspectorResult.Failed => "Failed", - eInspectorResult.Inconclusive => "Inconclusive", - eInspectorResult.Excluded => "Excluded", - eInspectorResult.Bypassed => "Bypassed", - _ => "Unknown" + eInspectorResult.NoAction => Localizer["NoAction"], + eInspectorResult.Running => Localizer["Running"], + eInspectorResult.Passed => Localizer["Passed"], + eInspectorResult.Failed => Localizer["Failed"], + eInspectorResult.Inconclusive => Localizer["Inconclusive"], + eInspectorResult.Excluded => Localizer["Excluded"], + eInspectorResult.Bypassed => Localizer["Bypassed"], + _ => Localizer["Unknown"] }; /// diff --git a/src/inspectors/src/AXOpen.Inspectors.blazor/Resources/Strings.cs b/src/inspectors/src/AXOpen.Inspectors.blazor/Resources/Strings.cs new file mode 100644 index 000000000..827e86838 --- /dev/null +++ b/src/inspectors/src/AXOpen.Inspectors.blazor/Resources/Strings.cs @@ -0,0 +1,10 @@ +namespace AXOpen.Inspectors.Resources +{ + /// + /// Placeholder class for resource strings. + /// The actual implementation is auto-generated by the .resx file. + /// + public class Strings + { + } +} diff --git a/src/inspectors/src/AXOpen.Inspectors.blazor/Resources/Strings.de-DE.resx b/src/inspectors/src/AXOpen.Inspectors.blazor/Resources/Strings.de-DE.resx new file mode 100644 index 000000000..a6d7e084a --- /dev/null +++ b/src/inspectors/src/AXOpen.Inspectors.blazor/Resources/Strings.de-DE.resx @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Keine Aktion + + + Läuft + + + Bestanden + + + Fehlgeschlagen + + + Unschlüssig + + + Ausgeschlossen + + + Umgangen + + + Unbekannt + + + Kann nicht rendern, nicht spezifizierter Inspektortyp + + + Überprüfung erkannt + + + Sie sind nicht autorisiert, bitte + + + Anmelden + + + Wiederholen + + + Beenden + + + Override + + \ No newline at end of file diff --git a/src/inspectors/src/AXOpen.Inspectors.blazor/Resources/Strings.es-ES.resx b/src/inspectors/src/AXOpen.Inspectors.blazor/Resources/Strings.es-ES.resx new file mode 100644 index 000000000..b9fec9941 --- /dev/null +++ b/src/inspectors/src/AXOpen.Inspectors.blazor/Resources/Strings.es-ES.resx @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Sin acción + + + Ejecutando + + + Aprobado + + + Fallido + + + No concluyente + + + Excluido + + + Omitido + + + Desconocido + + + + No se puede renderizar, tipo de inspector no especificado + + + Sobreinspección detectada + + + + No está autorizado, por favor + + + Iniciar sesión + + + + Reintentar + + + Terminar + + + Anular + + diff --git a/src/inspectors/src/AXOpen.Inspectors.blazor/Resources/Strings.hu-HU.resx b/src/inspectors/src/AXOpen.Inspectors.blazor/Resources/Strings.hu-HU.resx new file mode 100644 index 000000000..538fa47f2 --- /dev/null +++ b/src/inspectors/src/AXOpen.Inspectors.blazor/Resources/Strings.hu-HU.resx @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Nincs művelet + + + Fut + + + Sikeres + + + Sikertelen + + + Nem meggyőző + + + Kizárt + + + Átugrott + + + Ismeretlen + + + + Nem lehet megjeleníteni, meghatározatlan ellenőr típus + + + Túlellenőrzés észlelve + + + + Ön nincs jogosultságával, kérem + + + Bejelentkezés + + + + Újra + + + Befejezés + + + Felülírás + + diff --git a/src/inspectors/src/AXOpen.Inspectors.blazor/Resources/Strings.pl-PL.resx b/src/inspectors/src/AXOpen.Inspectors.blazor/Resources/Strings.pl-PL.resx new file mode 100644 index 000000000..08ea66ecd --- /dev/null +++ b/src/inspectors/src/AXOpen.Inspectors.blazor/Resources/Strings.pl-PL.resx @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Brak akcji + + + Uruchomiony + + + Zaliczony + + + Nieudany + + + Niejednoznaczny + + + Wykluczony + + + Pominięty + + + Nieznany + + + Nie można renderować, nieokreślony typ inspektora + + + Wykryto nadmierną inspekcję + + + Nie jesteś autoryzowany, proszę + + + Zaloguj się + + + Ponów + + + Zakończ + + + Ignoruj + + \ No newline at end of file diff --git a/src/inspectors/src/AXOpen.Inspectors.blazor/Resources/Strings.resx b/src/inspectors/src/AXOpen.Inspectors.blazor/Resources/Strings.resx new file mode 100644 index 000000000..e76947cef --- /dev/null +++ b/src/inspectors/src/AXOpen.Inspectors.blazor/Resources/Strings.resx @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + No Action + + + Running + + + Passed + + + Failed + + + Inconclusive + + + Excluded + + + Bypassed + + + Unknown + + + + Cannot render, unspecified inspector type + + + Over-inspection detected + + + + You are not authorized, please + + + Log In + + + + Retry + + + Terminate + + + Override + + diff --git a/src/inspectors/src/AXOpen.Inspectors.blazor/Resources/Strings.sk-SK.resx b/src/inspectors/src/AXOpen.Inspectors.blazor/Resources/Strings.sk-SK.resx new file mode 100644 index 000000000..286b3b9c4 --- /dev/null +++ b/src/inspectors/src/AXOpen.Inspectors.blazor/Resources/Strings.sk-SK.resx @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Žiadna akcia + + + Beží + + + Úspešné + + + Neúspešné + + + Nepriekazné + + + Vylúčené + + + Obídené + + + Neznáme + + + Nie je možné vykresliť, nešpecifikovaný typ inšpektora + + + Detekovaná nadmerná inšpekcia + + + Nie ste autorizovaný, prosím + + + Prihlásiť sa + + + Opakovať + + + Ukončiť + + + Ignorovať + + \ No newline at end of file diff --git a/src/inspectors/src/AXOpen.Inspectors/Resources/PlcStringResources.sk-SK.resx b/src/inspectors/src/AXOpen.Inspectors/Resources/PlcStringResources.sk-SK.resx index fda683a4c..11329c545 100644 --- a/src/inspectors/src/AXOpen.Inspectors/Resources/PlcStringResources.sk-SK.resx +++ b/src/inspectors/src/AXOpen.Inspectors/Resources/PlcStringResources.sk-SK.resx @@ -98,7 +98,7 @@ Pokusy - ErrorCode + Kód chyby Popis zlyhania diff --git a/src/inspectors/src/AXOpen.Inspectors/Resources/PlcStringResources.sk.resx b/src/inspectors/src/AXOpen.Inspectors/Resources/PlcStringResources.sk.resx index 7afa152c9..2295e4fc3 100644 --- a/src/inspectors/src/AXOpen.Inspectors/Resources/PlcStringResources.sk.resx +++ b/src/inspectors/src/AXOpen.Inspectors/Resources/PlcStringResources.sk.resx @@ -157,7 +157,7 @@ Pokusy - ErrorCode + Kód chyby Popis zlyhania diff --git a/src/inspectors/src/AxOpen.Inspectors.Blazor/AxoInspectorDialog/AxoInspectorDialogDialogView.razor b/src/inspectors/src/AxOpen.Inspectors.Blazor/AxoInspectorDialog/AxoInspectorDialogDialogView.razor index 45f6e3dd8..ac31b4da5 100644 --- a/src/inspectors/src/AxOpen.Inspectors.Blazor/AxoInspectorDialog/AxoInspectorDialogDialogView.razor +++ b/src/inspectors/src/AxOpen.Inspectors.Blazor/AxoInspectorDialog/AxoInspectorDialogDialogView.razor @@ -4,13 +4,14 @@ @using AXSharp.Connector.Localizations @using Microsoft.AspNetCore.Components.Authorization; @using Microsoft.AspNetCore.Components.Routing +@using AXSharp.Presentation.Blazor.Controls.RenderableContent @inherits AxoDialogBaseView @inject AuthenticationStateProvider _asp @inject NavigationManager NavigationManager
-

@InspectionDescription

+

@InspectionDescription

@switch (InspectorType) @@ -29,17 +30,17 @@
- + - + - +
@@ -48,8 +49,8 @@ @if (!_asp.GetAuthenticationStateAsync().Result.User.Identity.IsAuthenticated) {
-

You are not authorized, please Log In.

- Log in +

@Localizer["NotAuthorizedPleaseLogIn"] @Localizer["LogIn"].

+ @Localizer["LogIn"]
}
@@ -72,8 +73,7 @@ currentUrl = NavigationManager.ToBaseRelativePath(NavigationManager.Uri); NavigationManager.LocationChanged += OnLocationChanged; - InspectionDescription = await Component._inspectionDetails.GetAsync(); - InspectionDescription = Component.GetConnector().Translate(InspectionDescription, CultureInfo.CurrentCulture); + InspectionDescription = await Component._inspectionDetails.GetAsync(CultureInfo.CurrentCulture); InspectorType = await GetInspectorType(); return base.OnInitializedAsync(); } diff --git a/src/inspectors/src/AxOpen.Inspectors.Blazor/GenericIconView.razor b/src/inspectors/src/AxOpen.Inspectors.Blazor/GenericIconView.razor index 4c399e3cd..b00f6592a 100644 --- a/src/inspectors/src/AxOpen.Inspectors.Blazor/GenericIconView.razor +++ b/src/inspectors/src/AxOpen.Inspectors.Blazor/GenericIconView.razor @@ -32,25 +32,25 @@ @switch (@Result) { case 0: -

No Action

+

@Localizer["NoAction"]

break; case 10: -

Running

+

@Localizer["Running"]

break; case 20: -

Passed

+

@Localizer["Passed"]

break; case 30: -

Failed

+

@Localizer["Failed"]

break; case 35: -

Inconclusive

+

@Localizer["Inconclusive"]

break; case 40: -

Excluded

+

@Localizer["Excluded"]

break; case 50: -

Bypassed

+

@Localizer["Bypassed"]

break; }
diff --git a/src/inspectors/src/AxOpen.Inspectors.Blazor/InspectorViewTemplate.razor b/src/inspectors/src/AxOpen.Inspectors.Blazor/InspectorViewTemplate.razor index bcde10423..adfe90ad5 100644 --- a/src/inspectors/src/AxOpen.Inspectors.Blazor/InspectorViewTemplate.razor +++ b/src/inspectors/src/AxOpen.Inspectors.Blazor/InspectorViewTemplate.razor @@ -27,7 +27,7 @@ } else { -

Cannot render, unspecified inspector type

+

@Localizer["CannotRenderUnspecifiedInspectorType"]

}
@@ -37,7 +37,7 @@ @if (IsOverInspected()) { -

Over-inspection detected

+

@Localizer["OverInspectionDetected"]

} @if (_accordionOpen) diff --git a/src/inspectors/src/AxOpen.Inspectors.Blazor/_Imports.razor b/src/inspectors/src/AxOpen.Inspectors.Blazor/_Imports.razor index 061398d16..3495f4a93 100644 --- a/src/inspectors/src/AxOpen.Inspectors.Blazor/_Imports.razor +++ b/src/inspectors/src/AxOpen.Inspectors.Blazor/_Imports.razor @@ -1,3 +1,7 @@ @using Microsoft.AspNetCore.Components.Web @using AXSharp.Presentation.Blazor.Controls.RenderableContent -@using Microsoft.AspNetCore.Components.Authorization \ No newline at end of file +@using Microsoft.AspNetCore.Components.Authorization +@using Microsoft.Extensions.Localization +@using AXOpen.Inspectors.Resources + +@inject IStringLocalizer Localizer \ No newline at end of file diff --git a/translation-plan.md b/translation-plan.md deleted file mode 100644 index 3e895bad1..000000000 --- a/translation-plan.md +++ /dev/null @@ -1,97 +0,0 @@ -# Translation Plan - String Resource Files - -**Date Created:** January 27, 2026 -**Target Languages:** sk-SK, de-DE, es-ES, pl-PL, hu-HU - -## Summary - -Ran `dotnet ixr` in all **35 ctrl folders** in the src directory. - -**Results:** -- ✓ 32 libraries successfully processed -- ✗ 3 libraries failed (missing src directory): ax.axopen.app, ax.axopen.hwlibrary, ax.axopen.min - -## Libraries Processed - -**Ctrl folders with ix/Resources output (Translation files created):** -1. **simatic1500** - `src/simatic1500/ctrl/ix/Resources/` -2. **sdk-ax** - `src/sdk-ax/ctrl/ix/Resources/` - -**Ctrl folders that output to main src (Already have translations):** -3. abstractions → `src/abstractions/src/AXOpen.Abstractions/Resources/` -4. core → `src/core/src/AXOpen.Core/Resources/` -5. data → `src/data/src/AXOpen.Data/Resources/` -6. io → `src/io/src/AXOpen.Io/Resources/` -7. timers → `src/timers/src/AXOpen.Timers/Resources/` -8. utils → `src/utils/src/AXOpen.Utils/Resources/` -9. probers → `src/probers/src/AXOpen.Probers/Resources/` -10. inspectors → `src/inspectors/src/AXOpen.Inspectors/Resources/` -11. components.abstractions → `src/components.abstractions/src/AXOpen.Components.Abstractions/Resources/` -12. components.abb.robotics → `src/components.abb.robotics/src/AXOpen.Components.Abb.Robotics/Resources/` -13. components.balluff.identification → `src/components.balluff.identification/src/AXOpen.Components.Balluff.Identification/Resources/` -14. components.cognex.vision → `src/components.cognex.vision/src/AXOpen.Components.Cognex.Vision/Resources/` -15. components.desoutter.tightening → `src/components.desoutter.tightening/src/AXOpen.Components.Desoutter.Tightening/Resources/` -16. components.drives → `src/components.drives/src/AXOpen.Components.Drives/Resources/` -17. components.dukane.welders → `src/components.dukane.welders/src/AXOpen.Components.Dukane.Welders/Resources/` -18. components.elements → `src/components.elements/src/AXOpen.Components.Elements/Resources/` -19. components.festo.drives → `src/components.festo.drives/src/AXOpen.Components.Festo.Drives/Resources/` -20. components.keyence.vision → `src/components.keyence.vision/src/AXOpen.Components.Keyence.Vision/Resources/` -21. components.kuka.robotics → `src/components.kuka.robotics/src/AXOpen.Components.Kuka.Robotics/Resources/` -22. components.mitsubishi.robotics → `src/components.mitsubishi.robotics/src/AXOpen.Components.Mitsubishi.Robotics/Resources/` -23. components.pneumatics → `src/components.pneumatics/src/AXOpen.Components.Pneumatics/Resources/` -24. components.rexroth.drives → `src/components.rexroth.drives/src/AXOpen.Components.Rexroth.Drives/Resources/` -25. components.rexroth.press → `src/components.rexroth.press/src/AXOpen.Components.Rexroth.Press/Resources/` -26. components.rexroth.tightening → `src/components.rexroth.tightening/src/AXOpen.Components.Rexroth.Tightening/Resources/` -27. components.robotics → `src/components.robotics/src/AXOpen.Components.Robotics/Resources/` -28. components.siem.communication → `src/components.siem.communication/src/AXOpen.Components.Siem.Communication/Resources/` -29. components.siem.identification → `src/components.siem.identification/src/AXOpen.Components.Siem.Identification/Resources/` -30. components.ur.robotics → `src/components.ur.robotics/src/AXOpen.Components.Ur.Robotics/Resources/` -31. components.zebra.vision → `src/components.zebra.vision/src/AXOpen.Components.Zebra.Vision/Resources/` -32. template.axolibrary → `src/template.axolibrary/src/projname/Resources/` - -## Tasks Status - -### ✓ Completed -- [x] Ran `dotnet ixr` in all 35 ctrl directories -- [x] Generated base PlcStringResources.resx files where applicable -- [x] Created translation files (sk-SK, de-DE, es-ES, pl-PL, hu-HU) for simatic1500 and sdk-ax -- [x] Verified existing translation files in other libraries - -### Notes -- Most libraries (30 of 32) already had translation files in their main src folders -- Only simatic1500 and sdk-ax needed new translation files created (in ctrl/ix/Resources) -- All translation files follow the naming pattern: `PlcStringResources.{culture}.resx` - ---- - -## Notes - -- Each library will have resource files generated by `dotnet ixr` -- Translations will be created for 5 languages -- Total translation files expected: 2 libraries × 5 languages = 10 files - -## Files Created - -### simatic1500 Library -- Base: `src/simatic1500/ctrl/ix/Resources/PlcStringResources.resx` -- Slovak: `src/simatic1500/ctrl/ix/Resources/PlcStringResources.sk-SK.resx` -- German: `src/simatic1500/ctrl/ix/Resources/PlcStringResources.de-DE.resx` -- Spanish: `src/simatic1500/ctrl/ix/Resources/PlcStringResources.es-ES.resx` -- Polish: `src/simatic1500/ctrl/ix/Resources/PlcStringResources.pl-PL.resx` -- Hungarian: `src/simatic1500/ctrl/ix/Resources/PlcStringResources.hu-HU.resx` - -### sdk-ax Library -- Base: `src/sdk-ax/ctrl/ix/Resources/PlcStringResources.resx` -- Slovak: `src/sdk-ax/ctrl/ix/Resources/PlcStringResources.sk-SK.resx` -- German: `src/sdk-ax/ctrl/ix/Resources/PlcStringResources.de-DE.resx` -- Spanish: `src/sdk-ax/ctrl/ix/Resources/PlcStringResources.es-ES.resx` -- Polish: `src/sdk-ax/ctrl/ix/Resources/PlcStringResources.pl-PL.resx` -- Hungarian: `src/sdk-ax/ctrl/ix/Resources/PlcStringResources.hu-HU.resx` - -## Next Steps - -When string resources are added to the PLC code: -1. Run `dotnet ixr` again in the respective ctrl directories -2. The base `.resx` files will be populated with new strings -3. Manually translate the new entries in each language-specific `.resx` file -4. Follow the existing pattern from other libraries (e.g., `src/core/src/AXOpen.Core/Resources/PlcStringResources.*.resx`)