Sistema di registrazione indipendente dalla lingua

4

Ho un software che registra vari eventi in un database (SQLite). Attualmente i dati memorizzati sono:

  • Messaggio
  • Data
  • Categoria
  • Criticità

I log sono scritti nella lingua corrente del software. Il che significa che il messaggio:

User "admin" logged in

può diventare

L'utilisateur "admin" est connecté

se il software è in francese.

Questo è perfetto per l'utente, ma a volte gli utenti ci inviano il loro file di log per l'analisi e questo diventa improvvisamente molto complicato se è una lingua che nessuno nel team può capire.

Che portano alla mia domanda, quale strategia dovremmo utilizzare per poter visualizzare i log in qualsiasi lingua supportata dal nostro software indipendentemente dalla lingua originale ? sapendo che:

  • L'utilizzo di un database è obbligatorio
  • Il numero di parametri in un messaggio di log può passare da 0 a un lotto
  • Il messaggio dei log dovrebbe essere comprensibile nel codice
  • L'esportazione o la visualizzazione dei log dovrebbero essere veloci

Attualmente per scrivere un messaggio di log stiamo facendo qualcosa di simile (C ++)

std::string message = translate("User %s logged in"); // using Gettext
message = String::Format(message,userName);
LogsManager::Info(message);

Grazie

Modifica Il problema non è sapere se dobbiamo o non tradurre il messaggio dei registri, ma come renderli indipendenti dalla lingua. Significa che se l'utente cambia lingua durante l'uso del software, i messaggi dovrebbero essere visualizzati / esportati nella lingua corrente e non nella precedente.

    
posta grunk 03.02.2017 - 14:59
fonte

1 risposta

4

Quindi hai scritto che hai

  • registra i messaggi nel database

  • così come un file di registro che può essere visualizzato e inviato per posta

Ciò significa che esiste un processo che consiste nel richiamare i messaggi dal database nel file, ad esempio un pulsante o una funzione di menu Mostra registro (o almeno, è possibile aggiungere una funzione di questo tipo) .

La soluzione al tuo problema è eseguire la traduzione lì, non prima. Quindi l'utente può ottenere un file di registro nella sua lingua preferita e produrre lo stesso file di registro in seguito in una lingua diversa (ad esempio, in inglese), prima di inviarti il registro.

Ovviamente, ciò significa anche che è necessario memorizzare

  • i modelli di messaggi in inglese nel database (anziché i messaggi finali)
  • i parametri di ciascun messaggio di registro nel database (per questo caso d'uso sarà sufficiente una colonna con un aggregato di parametri separati da virgole).

Quindi la tabella di registrazione ha bisogno di una colonna aggiuntiva Parameters , e il tuo codice di registrazione sarà simile a questo

  LogsManager::Info("User %s logged in", userName);

dove la funzione "Info" ha un elenco di parametri variabili, proprio come String::Format . Le prime chiamate a translate o String::Format dovrebbero invece essere spostate nella funzione "ShowLog" e tale caratteristica può quindi ottenere un'opzione aggiuntiva "lingua di output".

Abbiamo fatto qualcosa di simile in uno strumento di segnalazione in cui i dati di input erano un file XML complesso, contenente una sezione di registro. I report sono prodotti in PDF e la lingua di output può essere successivamente modificata in qualsiasi momento. Tutti i messaggi di log testuali sono archiviati come modelli + parametri e vengono tradotti e combinati come parte del processo di generazione di PDF - funziona come un fascino.

    
risposta data 03.02.2017 - 15:39
fonte

Leggi altre domande sui tag