Add localization support for various UI elements and messages

- Integrated localization for alert dialogs, snack bars, and button labels in PacketLogScreen and SettingsScreen.
- Updated location tracking service messages to use localized strings.
- Enhanced ContactTile and DirectMessageSheet with localized text for user interactions.
- Implemented localization in DrawingLayer and DrawingToolbar for map-related actions.
- Updated SAR Update Sheet to utilize localized strings for user prompts and actions.
- Ensured consistent use of localization across all relevant widgets and screens.
This commit is contained in:
Janez T
2025-10-16 15:19:05 +02:00
parent 9def8daf0c
commit 1056380f3a
24 changed files with 1246 additions and 236 deletions

View File

@@ -457,5 +457,225 @@
"defaultPinInfo": "The default pin for devices without a screen is 123456. Trouble pairing? Forget the bluetooth device in system settings.",
"@defaultPinInfo": {
"description": "Information about default PIN for pairing"
},
"noMessagesYet": "No messages yet",
"@noMessagesYet": {
"description": "Empty state message when there are no messages"
},
"pullDownToSync": "Pull down to sync messages",
"@pullDownToSync": {
"description": "Instruction to pull down to refresh messages"
},
"deleteContact": "Delete Contact",
"@deleteContact": {
"description": "Delete contact action label"
},
"delete": "Delete",
"@delete": {
"description": "Delete button label"
},
"viewOnMap": "View on Map",
"@viewOnMap": {
"description": "Action to view contact location on map"
},
"refresh": "Refresh",
"@refresh": {
"description": "Refresh button label"
},
"sendDirectMessage": "Send Direct Message",
"@sendDirectMessage": {
"description": "Action to send direct message to contact"
},
"resetPath": "Reset Path (Re-route)",
"@resetPath": {
"description": "Action to reset contact path for re-routing"
},
"publicKeyCopied": "Public key copied to clipboard",
"@publicKeyCopied": {
"description": "Success message when public key is copied"
},
"copiedToClipboard": "{label} copied to clipboard",
"@copiedToClipboard": {
"description": "Success message when a value is copied to clipboard",
"placeholders": {
"label": {
"type": "String"
}
}
},
"pleaseEnterPassword": "Please enter a password",
"@pleaseEnterPassword": {
"description": "Validation message for empty password field"
},
"failedToSyncContacts": "Failed to sync contacts: {error}",
"@failedToSyncContacts": {
"description": "Error message when contact sync fails",
"placeholders": {
"error": {
"type": "String"
}
}
},
"loggedInSuccessfully": "Logged in successfully! Waiting for room messages...",
"@loggedInSuccessfully": {
"description": "Success message after successful room login"
},
"loginFailed": "Login failed - incorrect password",
"@loginFailed": {
"description": "Error message when room login fails"
},
"loggingIn": "Logging in to {roomName}...",
"@loggingIn": {
"description": "Status message during room login process",
"placeholders": {
"roomName": {
"type": "String"
}
}
},
"failedToSendLogin": "Failed to send login: {error}",
"@failedToSendLogin": {
"description": "Error message when login command fails to send",
"placeholders": {
"error": {
"type": "String"
}
}
},
"lowLocationAccuracy": "Low Location Accuracy",
"@lowLocationAccuracy": {
"description": "Warning title for low GPS accuracy"
},
"continue_": "Continue",
"@continue_": {
"description": "Continue button label"
},
"sendSarMarker": "Send SAR marker",
"@sendSarMarker": {
"description": "Action to send SAR marker"
},
"deleteDrawing": "Delete Drawing",
"@deleteDrawing": {
"description": "Action to delete a map drawing"
},
"drawLine": "Draw Line",
"@drawLine": {
"description": "Map drawing mode: line"
},
"drawLineDesc": "Draw a freehand line on the map",
"@drawLineDesc": {
"description": "Description for line drawing mode"
},
"drawRectangle": "Draw Rectangle",
"@drawRectangle": {
"description": "Map drawing mode: rectangle"
},
"drawRectangleDesc": "Draw a rectangular area on the map",
"@drawRectangleDesc": {
"description": "Description for rectangle drawing mode"
},
"shareDrawings": "Share Drawings",
"@shareDrawings": {
"description": "Action to share drawings to network"
},
"clearAllDrawings": "Clear All Drawings",
"@clearAllDrawings": {
"description": "Action to clear all local drawings"
},
"clearAll": "Clear All",
"@clearAll": {
"description": "Clear all button label"
},
"noLocalDrawings": "No local drawings to share",
"@noLocalDrawings": {
"description": "Message when there are no drawings to share"
},
"publicChannel": "Public Channel",
"@publicChannel": {
"description": "Public channel option for sharing"
},
"broadcastToAll": "Broadcast to all nearby nodes (ephemeral)",
"@broadcastToAll": {
"description": "Description for public channel broadcast"
},
"storedPermanently": "Stored permanently in room",
"@storedPermanently": {
"description": "Description for room storage permanence"
},
"notConnectedToDevice": "Not connected to device",
"@notConnectedToDevice": {
"description": "Error message when device is not connected for direct messaging"
},
"directMessage": "Direct Message",
"@directMessage": {
"description": "Title for direct message sheet"
},
"directMessageSentTo": "Direct message sent to {contactName}",
"@directMessageSentTo": {
"description": "Success message after sending direct message",
"placeholders": {
"contactName": {
"type": "String"
}
}
},
"failedToSend": "Failed to send: {error}",
"@failedToSend": {
"description": "Error message when sending direct message fails",
"placeholders": {
"error": {
"type": "String"
}
}
},
"directMessageInfo": "This message will be sent directly to {contactName}. It will also appear in the main messages feed.",
"@directMessageInfo": {
"description": "Information about direct messaging behavior",
"placeholders": {
"contactName": {
"type": "String"
}
}
},
"typeYourMessage": "Type your message...",
"@typeYourMessage": {
"description": "Placeholder text for message input field"
}
}

View File

@@ -157,5 +157,79 @@
"locationBroadcast": "Emitiranje lokacije: {latitude}, {longitude}",
"defaultPinInfo": "Zadani PIN za uređaje bez zaslona je 123456. Problemi s uparivanjem? Zaboravite bluetooth uređaj u postavkama sustava."
"defaultPinInfo": "Zadani PIN za uređaje bez zaslona je 123456. Problemi s uparivanjem? Zaboravite bluetooth uređaj u postavkama sustava.",
"noMessagesYet": "Još nema poruka",
"pullDownToSync": "Povucite prema dolje za sinkronizaciju",
"deleteContact": "Izbriši kontakt",
"delete": "Izbriši",
"viewOnMap": "Prikaži na karti",
"refresh": "Osvježi",
"sendDirectMessage": "Pošalji izravnu poruku",
"resetPath": "Resetiraj put (preusmjeri)",
"publicKeyCopied": "Javni ključ kopiran u međuspremnik",
"copiedToClipboard": "{label} kopirano u međuspremnik",
"pleaseEnterPassword": "Molimo unesite lozinku",
"failedToSyncContacts": "Neuspjela sinkronizacija kontakata: {error}",
"loggedInSuccessfully": "Uspješno prijavljen! Čekanje na poruke sobe...",
"loginFailed": "Prijava neuspjela - netočna lozinka",
"loggingIn": "Prijavljivanje u {roomName}...",
"failedToSendLogin": "Neuspjelo slanje prijave: {error}",
"lowLocationAccuracy": "Niska točnost lokacije",
"continue_": "Nastavi",
"sendSarMarker": "Pošalji SAR marker",
"deleteDrawing": "Izbriši crtež",
"drawLine": "Nacrtaj liniju",
"drawLineDesc": "Nacrtaj slobodnu liniju na karti",
"drawRectangle": "Nacrtaj pravokutnik",
"drawRectangleDesc": "Nacrtaj pravokutno područje na karti",
"shareDrawings": "Podijeli crteže",
"clearAllDrawings": "Očisti sve crteže",
"clearAll": "Očisti sve",
"noLocalDrawings": "Nema lokalnih crteža za dijeljenje",
"publicChannel": "Javni kanal",
"broadcastToAll": "Emitiraj svim obližnjim čvorovima (privremeno)",
"storedPermanently": "Trajno pohranjeno u sobi",
"notConnectedToDevice": "Nije povezano s uređajem",
"directMessage": "Izravna poruka",
"directMessageSentTo": "Izravna poruka poslana {contactName}",
"failedToSend": "Neuspjelo slanje: {error}",
"directMessageInfo": "Ova poruka će biti poslana izravno {contactName}. Također će se prikazati u glavnom feedu poruka.",
"typeYourMessage": "Upišite svoju poruku..."
}

View File

@@ -578,6 +578,228 @@ abstract class AppLocalizations {
/// In en, this message translates to:
/// **'The default pin for devices without a screen is 123456. Trouble pairing? Forget the bluetooth device in system settings.'**
String get defaultPinInfo;
/// Empty state message when there are no messages
///
/// In en, this message translates to:
/// **'No messages yet'**
String get noMessagesYet;
/// Instruction to pull down to refresh messages
///
/// In en, this message translates to:
/// **'Pull down to sync messages'**
String get pullDownToSync;
/// Delete contact action label
///
/// In en, this message translates to:
/// **'Delete Contact'**
String get deleteContact;
/// Delete button label
///
/// In en, this message translates to:
/// **'Delete'**
String get delete;
/// Action to view contact location on map
///
/// In en, this message translates to:
/// **'View on Map'**
String get viewOnMap;
/// Refresh button label
///
/// In en, this message translates to:
/// **'Refresh'**
String get refresh;
/// Action to send direct message to contact
///
/// In en, this message translates to:
/// **'Send Direct Message'**
String get sendDirectMessage;
/// Action to reset contact path for re-routing
///
/// In en, this message translates to:
/// **'Reset Path (Re-route)'**
String get resetPath;
/// Success message when public key is copied
///
/// In en, this message translates to:
/// **'Public key copied to clipboard'**
String get publicKeyCopied;
/// Success message when a value is copied to clipboard
///
/// In en, this message translates to:
/// **'{label} copied to clipboard'**
String copiedToClipboard(String label);
/// Validation message for empty password field
///
/// In en, this message translates to:
/// **'Please enter a password'**
String get pleaseEnterPassword;
/// Error message when contact sync fails
///
/// In en, this message translates to:
/// **'Failed to sync contacts: {error}'**
String failedToSyncContacts(String error);
/// Success message after successful room login
///
/// In en, this message translates to:
/// **'Logged in successfully! Waiting for room messages...'**
String get loggedInSuccessfully;
/// Error message when room login fails
///
/// In en, this message translates to:
/// **'Login failed - incorrect password'**
String get loginFailed;
/// Status message during room login process
///
/// In en, this message translates to:
/// **'Logging in to {roomName}...'**
String loggingIn(String roomName);
/// Error message when login command fails to send
///
/// In en, this message translates to:
/// **'Failed to send login: {error}'**
String failedToSendLogin(String error);
/// Warning title for low GPS accuracy
///
/// In en, this message translates to:
/// **'Low Location Accuracy'**
String get lowLocationAccuracy;
/// Continue button label
///
/// In en, this message translates to:
/// **'Continue'**
String get continue_;
/// Action to send SAR marker
///
/// In en, this message translates to:
/// **'Send SAR marker'**
String get sendSarMarker;
/// Action to delete a map drawing
///
/// In en, this message translates to:
/// **'Delete Drawing'**
String get deleteDrawing;
/// Map drawing mode: line
///
/// In en, this message translates to:
/// **'Draw Line'**
String get drawLine;
/// Description for line drawing mode
///
/// In en, this message translates to:
/// **'Draw a freehand line on the map'**
String get drawLineDesc;
/// Map drawing mode: rectangle
///
/// In en, this message translates to:
/// **'Draw Rectangle'**
String get drawRectangle;
/// Description for rectangle drawing mode
///
/// In en, this message translates to:
/// **'Draw a rectangular area on the map'**
String get drawRectangleDesc;
/// Action to share drawings to network
///
/// In en, this message translates to:
/// **'Share Drawings'**
String get shareDrawings;
/// Action to clear all local drawings
///
/// In en, this message translates to:
/// **'Clear All Drawings'**
String get clearAllDrawings;
/// Clear all button label
///
/// In en, this message translates to:
/// **'Clear All'**
String get clearAll;
/// Message when there are no drawings to share
///
/// In en, this message translates to:
/// **'No local drawings to share'**
String get noLocalDrawings;
/// Public channel option for sharing
///
/// In en, this message translates to:
/// **'Public Channel'**
String get publicChannel;
/// Description for public channel broadcast
///
/// In en, this message translates to:
/// **'Broadcast to all nearby nodes (ephemeral)'**
String get broadcastToAll;
/// Description for room storage permanence
///
/// In en, this message translates to:
/// **'Stored permanently in room'**
String get storedPermanently;
/// Error message when device is not connected for direct messaging
///
/// In en, this message translates to:
/// **'Not connected to device'**
String get notConnectedToDevice;
/// Title for direct message sheet
///
/// In en, this message translates to:
/// **'Direct Message'**
String get directMessage;
/// Success message after sending direct message
///
/// In en, this message translates to:
/// **'Direct message sent to {contactName}'**
String directMessageSentTo(String contactName);
/// Error message when sending direct message fails
///
/// In en, this message translates to:
/// **'Failed to send: {error}'**
String failedToSend(String error);
/// Information about direct messaging behavior
///
/// In en, this message translates to:
/// **'This message will be sent directly to {contactName}. It will also appear in the main messages feed.'**
String directMessageInfo(String contactName);
/// Placeholder text for message input field
///
/// In en, this message translates to:
/// **'Type your message...'**
String get typeYourMessage;
}
class _AppLocalizationsDelegate

View File

@@ -278,4 +278,130 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get defaultPinInfo =>
'The default pin for devices without a screen is 123456. Trouble pairing? Forget the bluetooth device in system settings.';
@override
String get noMessagesYet => 'No messages yet';
@override
String get pullDownToSync => 'Pull down to sync messages';
@override
String get deleteContact => 'Delete Contact';
@override
String get delete => 'Delete';
@override
String get viewOnMap => 'View on Map';
@override
String get refresh => 'Refresh';
@override
String get sendDirectMessage => 'Send Direct Message';
@override
String get resetPath => 'Reset Path (Re-route)';
@override
String get publicKeyCopied => 'Public key copied to clipboard';
@override
String copiedToClipboard(String label) {
return '$label copied to clipboard';
}
@override
String get pleaseEnterPassword => 'Please enter a password';
@override
String failedToSyncContacts(String error) {
return 'Failed to sync contacts: $error';
}
@override
String get loggedInSuccessfully =>
'Logged in successfully! Waiting for room messages...';
@override
String get loginFailed => 'Login failed - incorrect password';
@override
String loggingIn(String roomName) {
return 'Logging in to $roomName...';
}
@override
String failedToSendLogin(String error) {
return 'Failed to send login: $error';
}
@override
String get lowLocationAccuracy => 'Low Location Accuracy';
@override
String get continue_ => 'Continue';
@override
String get sendSarMarker => 'Send SAR marker';
@override
String get deleteDrawing => 'Delete Drawing';
@override
String get drawLine => 'Draw Line';
@override
String get drawLineDesc => 'Draw a freehand line on the map';
@override
String get drawRectangle => 'Draw Rectangle';
@override
String get drawRectangleDesc => 'Draw a rectangular area on the map';
@override
String get shareDrawings => 'Share Drawings';
@override
String get clearAllDrawings => 'Clear All Drawings';
@override
String get clearAll => 'Clear All';
@override
String get noLocalDrawings => 'No local drawings to share';
@override
String get publicChannel => 'Public Channel';
@override
String get broadcastToAll => 'Broadcast to all nearby nodes (ephemeral)';
@override
String get storedPermanently => 'Stored permanently in room';
@override
String get notConnectedToDevice => 'Not connected to device';
@override
String get directMessage => 'Direct Message';
@override
String directMessageSentTo(String contactName) {
return 'Direct message sent to $contactName';
}
@override
String failedToSend(String error) {
return 'Failed to send: $error';
}
@override
String directMessageInfo(String contactName) {
return 'This message will be sent directly to $contactName. It will also appear in the main messages feed.';
}
@override
String get typeYourMessage => 'Type your message...';
}

View File

@@ -278,4 +278,130 @@ class AppLocalizationsHr extends AppLocalizations {
@override
String get defaultPinInfo =>
'Zadani PIN za uređaje bez zaslona je 123456. Problemi s uparivanjem? Zaboravite bluetooth uređaj u postavkama sustava.';
@override
String get noMessagesYet => 'Još nema poruka';
@override
String get pullDownToSync => 'Povucite prema dolje za sinkronizaciju';
@override
String get deleteContact => 'Izbriši kontakt';
@override
String get delete => 'Izbriši';
@override
String get viewOnMap => 'Prikaži na karti';
@override
String get refresh => 'Osvježi';
@override
String get sendDirectMessage => 'Pošalji izravnu poruku';
@override
String get resetPath => 'Resetiraj put (preusmjeri)';
@override
String get publicKeyCopied => 'Javni ključ kopiran u međuspremnik';
@override
String copiedToClipboard(String label) {
return '$label kopirano u međuspremnik';
}
@override
String get pleaseEnterPassword => 'Molimo unesite lozinku';
@override
String failedToSyncContacts(String error) {
return 'Neuspjela sinkronizacija kontakata: $error';
}
@override
String get loggedInSuccessfully =>
'Uspješno prijavljen! Čekanje na poruke sobe...';
@override
String get loginFailed => 'Prijava neuspjela - netočna lozinka';
@override
String loggingIn(String roomName) {
return 'Prijavljivanje u $roomName...';
}
@override
String failedToSendLogin(String error) {
return 'Neuspjelo slanje prijave: $error';
}
@override
String get lowLocationAccuracy => 'Niska točnost lokacije';
@override
String get continue_ => 'Nastavi';
@override
String get sendSarMarker => 'Pošalji SAR marker';
@override
String get deleteDrawing => 'Izbriši crtež';
@override
String get drawLine => 'Nacrtaj liniju';
@override
String get drawLineDesc => 'Nacrtaj slobodnu liniju na karti';
@override
String get drawRectangle => 'Nacrtaj pravokutnik';
@override
String get drawRectangleDesc => 'Nacrtaj pravokutno područje na karti';
@override
String get shareDrawings => 'Podijeli crteže';
@override
String get clearAllDrawings => 'Očisti sve crteže';
@override
String get clearAll => 'Očisti sve';
@override
String get noLocalDrawings => 'Nema lokalnih crteža za dijeljenje';
@override
String get publicChannel => 'Javni kanal';
@override
String get broadcastToAll => 'Emitiraj svim obližnjim čvorovima (privremeno)';
@override
String get storedPermanently => 'Trajno pohranjeno u sobi';
@override
String get notConnectedToDevice => 'Nije povezano s uređajem';
@override
String get directMessage => 'Izravna poruka';
@override
String directMessageSentTo(String contactName) {
return 'Izravna poruka poslana $contactName';
}
@override
String failedToSend(String error) {
return 'Neuspjelo slanje: $error';
}
@override
String directMessageInfo(String contactName) {
return 'Ova poruka će biti poslana izravno $contactName. Također će se prikazati u glavnom feedu poruka.';
}
@override
String get typeYourMessage => 'Upišite svoju poruku...';
}

View File

@@ -278,4 +278,130 @@ class AppLocalizationsSl extends AppLocalizations {
@override
String get defaultPinInfo =>
'Privzeta PIN koda za naprave brez zaslona je 123456. Težave s seznanitvijo? Pozabite napravo bluetooth v sistemskih nastavitvah.';
@override
String get noMessagesYet => 'Še ni sporočil';
@override
String get pullDownToSync => 'Potegnite navzdol za sinhronizacijo';
@override
String get deleteContact => 'Izbriši stik';
@override
String get delete => 'Izbriši';
@override
String get viewOnMap => 'Poglej na zemljevidu';
@override
String get refresh => 'Osveži';
@override
String get sendDirectMessage => 'Pošlji neposredno sporočilo';
@override
String get resetPath => 'Ponastavi pot (preusmeri)';
@override
String get publicKeyCopied => 'Javni ključ kopiran v odložišče';
@override
String copiedToClipboard(String label) {
return '$label kopirano v odložišče';
}
@override
String get pleaseEnterPassword => 'Prosimo, vnesite geslo';
@override
String failedToSyncContacts(String error) {
return 'Sinhronizacija stikov ni uspela: $error';
}
@override
String get loggedInSuccessfully =>
'Uspešno prijavljen! Čakanje na sporočila sobe...';
@override
String get loginFailed => 'Prijava ni uspela - nepravilno geslo';
@override
String loggingIn(String roomName) {
return 'Prijavljanje v $roomName...';
}
@override
String failedToSendLogin(String error) {
return 'Pošiljanje prijave ni uspelo: $error';
}
@override
String get lowLocationAccuracy => 'Nizka natančnost lokacije';
@override
String get continue_ => 'Nadaljuj';
@override
String get sendSarMarker => 'Pošlji SAR označevalec';
@override
String get deleteDrawing => 'Izbriši risbo';
@override
String get drawLine => 'Nariši črto';
@override
String get drawLineDesc => 'Nariši prosto črto na zemljevidu';
@override
String get drawRectangle => 'Nariši pravokotnik';
@override
String get drawRectangleDesc => 'Nariši pravokotno področje na zemljevidu';
@override
String get shareDrawings => 'Deli risbe';
@override
String get clearAllDrawings => 'Počisti vse risbe';
@override
String get clearAll => 'Počisti vse';
@override
String get noLocalDrawings => 'Ni lokalnih risb za deljenje';
@override
String get publicChannel => 'Javni kanal';
@override
String get broadcastToAll => 'Oddajaj vsem bližnjim vozliščem (začasno)';
@override
String get storedPermanently => 'Trajno shranjeno v sobi';
@override
String get notConnectedToDevice => 'Ni povezano z napravo';
@override
String get directMessage => 'Neposredno sporočilo';
@override
String directMessageSentTo(String contactName) {
return 'Neposredno sporočilo poslano $contactName';
}
@override
String failedToSend(String error) {
return 'Pošiljanje ni uspelo: $error';
}
@override
String directMessageInfo(String contactName) {
return 'To sporočilo bo poslano neposredno $contactName. Prikazalo se bo tudi v glavnem viru sporočil.';
}
@override
String get typeYourMessage => 'Vnesite svoje sporočilo...';
}

View File

@@ -157,5 +157,79 @@
"locationBroadcast": "Oddajanje lokacije: {latitude}, {longitude}",
"defaultPinInfo": "Privzeta PIN koda za naprave brez zaslona je 123456. Težave s seznanitvijo? Pozabite napravo bluetooth v sistemskih nastavitvah."
"defaultPinInfo": "Privzeta PIN koda za naprave brez zaslona je 123456. Težave s seznanitvijo? Pozabite napravo bluetooth v sistemskih nastavitvah.",
"noMessagesYet": "Še ni sporočil",
"pullDownToSync": "Potegnite navzdol za sinhronizacijo",
"deleteContact": "Izbriši stik",
"delete": "Izbriši",
"viewOnMap": "Poglej na zemljevidu",
"refresh": "Osveži",
"sendDirectMessage": "Pošlji neposredno sporočilo",
"resetPath": "Ponastavi pot (preusmeri)",
"publicKeyCopied": "Javni ključ kopiran v odložišče",
"copiedToClipboard": "{label} kopirano v odložišče",
"pleaseEnterPassword": "Prosimo, vnesite geslo",
"failedToSyncContacts": "Sinhronizacija stikov ni uspela: {error}",
"loggedInSuccessfully": "Uspešno prijavljen! Čakanje na sporočila sobe...",
"loginFailed": "Prijava ni uspela - nepravilno geslo",
"loggingIn": "Prijavljanje v {roomName}...",
"failedToSendLogin": "Pošiljanje prijave ni uspelo: {error}",
"lowLocationAccuracy": "Nizka natančnost lokacije",
"continue_": "Nadaljuj",
"sendSarMarker": "Pošlji SAR označevalec",
"deleteDrawing": "Izbriši risbo",
"drawLine": "Nariši črto",
"drawLineDesc": "Nariši prosto črto na zemljevidu",
"drawRectangle": "Nariši pravokotnik",
"drawRectangleDesc": "Nariši pravokotno področje na zemljevidu",
"shareDrawings": "Deli risbe",
"clearAllDrawings": "Počisti vse risbe",
"clearAll": "Počisti vse",
"noLocalDrawings": "Ni lokalnih risb za deljenje",
"publicChannel": "Javni kanal",
"broadcastToAll": "Oddajaj vsem bližnjim vozliščem (začasno)",
"storedPermanently": "Trajno shranjeno v sobi",
"notConnectedToDevice": "Ni povezano z napravo",
"directMessage": "Neposredno sporočilo",
"directMessageSentTo": "Neposredno sporočilo poslano {contactName}",
"failedToSend": "Pošiljanje ni uspelo: {error}",
"directMessageInfo": "To sporočilo bo poslano neposredno {contactName}. Prikazalo se bo tudi v glavnem viru sporočil.",
"typeYourMessage": "Vnesite svoje sporočilo..."
}