soneta-programming - redukcja duplikatów i mapa skilla

SKILL.md odchudzony z 493 do 333 linii: sekcje Serwisy, Tłumaczenia
i Log wyciągnięte do nowych referencji, sekcja Session skrócona do
fundamentów (szczegóły w session-login.md), dodana Mapa skilla.
W examples.md usunięte duplikaty z context.md i datapack-guidedrow.md,
dodane spisy treści do dużych referencji.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Marcin Wojas
2026-05-16 22:55:21 +02:00
parent 4576f3135b
commit 20a45e06cd
8 changed files with 287 additions and 390 deletions
@@ -0,0 +1,70 @@
# Tłumaczenia i logowanie
Soneta dostarcza dwa fundamenty obserwowalności i lokalizacji, które działają razem - tłumaczenia napisów oraz log zmian / śledzenie czasu wykonania.
## Tłumaczenie i formatowanie napisów
Biblioteka obsługuje słowniki tłumaczące napisy w aplikacji Soneta.
- Tłumaczone napisy muszą używać metody string-extender: `"napis do tłumaczenia".Translate()`.
- Tłumaczenie tekstów formatowanych: `"napis {0} z wartością {1}".TranslateFormat(arg0, arg1)`.
- Gdy string ma być **zignorowany** przez tłumacza, MUSISZ oznaczyć go metodą `"nie tłumaczymy".TranslateIgnore()` - inaczej błąd kompilacji.
- Jeśli w metodzie lub klasie jest wiele napisów do zignorowania, użyj atrybutu `[TranslateIgnore]` na metodzie / klasie.
- Parametr metody ignorowany przez tłumacza - atrybut `[TranslateIgnore]` na parametrze.
## Log zmian i obserwowalność
Używaj standardowych narzędzi do logowania `ILogger<T>`. Użyj `[TranslateIgnore]` w metodzie wywołującej log (komunikaty logu nie są tłumaczone). Używaj `logger.IsEnabled(LogLevel)` kiedy parametry wymagają dodatkowych operacji.
### Użycie `ILogger` oraz exception log
```csharp
class Test
{
private readonly ILogger<Test> logger =
BusApplication.Instance.GetRequiredService<ILogger<Test>>();
public decimal Kwota;
[TranslateIgnore]
public void Metoda()
{
try
{
logger.LogInformation("Wywołanie metody {nazwa}", nameof(Metoda));
if (Kwota < 0)
logger.LogWarning("Kwota {kwota} nie może być ujemna w metodzie '{metoda}'", Kwota, nameof(Metoda));
}
catch (Exception ex)
{
// Sposób na wrzucenie exception do trace
ex.Log<Test>();
throw;
}
}
}
```
### Śledzenie czasu wykonania z obsługą exception
```csharp
class Test
{
private static readonly ActSource actSource = new(nameof(Test), ActSource.TraceLevel.Default);
public void Action()
{
using var activity = actSource.Start();
try
{
// Algorytm do śledzenia
}
catch (Exception ex)
{
activity.AddExceptionWithError(ex);
throw;
}
}
}
```