mirror of
https://github.com/dz0ny/meshcore-sar.git
synced 2026-08-11 16:30:28 +00:00
Add multilingual localization
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -145,24 +145,24 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
String get appName => 'Nome do app';
|
||||
|
||||
@override
|
||||
String get aboutMeshCoreSar => 'About MeshCore SAR';
|
||||
String get aboutMeshCoreSar => 'Sobre o MeshCore SAR';
|
||||
|
||||
@override
|
||||
String get aboutDescription =>
|
||||
'A Search & Rescue application designed for emergency response teams. Features include:\n\n• BLE mesh networking for device-to-device communication\n• Offline maps with multiple layer options\n• Real-time team member tracking\n• SAR tactical markers (found person, fire, staging)\n• Contact management and messaging\n• GPS tracking with compass heading\n• Map tile caching for offline use';
|
||||
'Um aplicativo de Busca e Resgate projetado para equipes de resposta a emergências. Os recursos incluem:\n\n• Rede mesh BLE para comunicação entre dispositivos\n• Mapas offline com múltiplas opções de camadas\n• Rastreamento em tempo real dos membros da equipe\n• Marcadores táticos SAR (pessoa encontrada, incêndio, área de apoio)\n• Gerenciamento de contatos e mensagens\n• Rastreamento GPS com rumo da bússola\n• Cache de blocos de mapa para uso offline';
|
||||
|
||||
@override
|
||||
String get technologiesUsed => 'Technologies Used:';
|
||||
String get technologiesUsed => 'Tecnologias utilizadas:';
|
||||
|
||||
@override
|
||||
String get technologiesList =>
|
||||
'• Flutter for cross-platform development\n• BLE (Bluetooth Low Energy) for mesh networking\n• OpenStreetMap for mapping\n• Provider for state management\n• SharedPreferences for local storage';
|
||||
'• Flutter para desenvolvimento multiplataforma\n• BLE (Bluetooth Low Energy) para rede mesh\n• OpenStreetMap para mapas\n• Provider para gerenciamento de estado\n• SharedPreferences para armazenamento local';
|
||||
|
||||
@override
|
||||
String get moreInfo => 'Mais informações';
|
||||
|
||||
@override
|
||||
String get packageName => 'Package Name';
|
||||
String get packageName => 'Nome do pacote';
|
||||
|
||||
@override
|
||||
String get sampleData => 'Dados de exemplo';
|
||||
@@ -194,7 +194,7 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
int sarCount,
|
||||
int messageCount,
|
||||
) {
|
||||
return 'Loaded $teamCount team members, $channelCount channels, $sarCount SAR markers, $messageCount messages';
|
||||
return 'Carregados $teamCount membros da equipe, $channelCount canais, $sarCount marcadores SAR, $messageCount mensagens';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -216,7 +216,7 @@ class AppLocalizationsPt 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.';
|
||||
'O PIN padrão para dispositivos sem tela é 123456. Problemas ao parear? Esqueça o dispositivo Bluetooth nas configurações do sistema.';
|
||||
|
||||
@override
|
||||
String get noMessagesYet => 'Ainda não há mensagens';
|
||||
@@ -325,7 +325,7 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get longPressToStartNewMeasurement =>
|
||||
'Long press to start new measurement';
|
||||
'Pressione e segure para iniciar uma nova medição';
|
||||
|
||||
@override
|
||||
String get shareDrawings => 'Compartilhar desenhos';
|
||||
@@ -338,17 +338,17 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String broadcastDrawingsToTeam(int count, String plural) {
|
||||
return 'Broadcast $count drawing$plural to team';
|
||||
return 'Transmitir $count desenho$plural para a equipe';
|
||||
}
|
||||
|
||||
@override
|
||||
String removeAllDrawings(int count, String plural) {
|
||||
return 'Remove all $count drawing$plural';
|
||||
return 'Remover todos os $count desenho$plural';
|
||||
}
|
||||
|
||||
@override
|
||||
String deleteAllDrawingsConfirm(int count, String plural) {
|
||||
return 'Delete all $count drawing$plural from the map?';
|
||||
return 'Excluir todos os $count desenho$plural do mapa?';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -356,7 +356,7 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String shareDrawingsCount(int count, String plural) {
|
||||
return 'Share $count Drawing$plural';
|
||||
return 'Compartilhar $count desenho$plural';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -412,11 +412,11 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get ephemeralBroadcastInfo =>
|
||||
'Ephemeral: Broadcast over-the-air only. Not stored - nodes must be online.';
|
||||
'Efêmero: transmitido apenas pelo ar. Não é armazenado; os nós precisam estar online.';
|
||||
|
||||
@override
|
||||
String get persistentRoomInfo =>
|
||||
'Persistent: Stored immutably in room. Synced automatically and preserved offline.';
|
||||
'Persistente: armazenado de forma imutável na sala. Sincronizado automaticamente e preservado offline.';
|
||||
|
||||
@override
|
||||
String get location => 'Localização';
|
||||
@@ -449,7 +449,7 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String lowAccuracyWarning(int accuracy) {
|
||||
return 'Location accuracy is ±${accuracy}m. This may not be accurate enough for SAR operations.\n\nContinue anyway?';
|
||||
return 'A precisão da localização é ±${accuracy}m. Isso pode não ser preciso o suficiente para operações SAR.\n\nDeseja continuar mesmo assim?';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -457,7 +457,7 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get enterPasswordInfo =>
|
||||
'Enter the password to access this room. The password will be saved for future use.';
|
||||
'Digite a senha para acessar esta sala. A senha será salva para uso futuro.';
|
||||
|
||||
@override
|
||||
String get password => 'Senha';
|
||||
@@ -473,7 +473,7 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String failedToAddRoom(String error) {
|
||||
return 'Failed to add room to device: $error\n\nThe room may not have advertised yet.\nTry waiting for the room to broadcast.';
|
||||
return 'Falha ao adicionar a sala ao dispositivo: $error\n\nA sala talvez ainda não tenha sido anunciada.\nTente esperar a sala começar a transmitir.';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -493,7 +493,7 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String directPingTimeout(String name) {
|
||||
return 'Direct ping timeout - retrying $name with flooding...';
|
||||
return 'Tempo limite do ping direto - tentando novamente $name com flooding...';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -503,7 +503,7 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String deleteContactConfirmation(String name) {
|
||||
return 'Are you sure you want to delete \"$name\"?\n\nThis will remove the contact from both the app and the companion radio device.';
|
||||
return 'Tem certeza de que deseja excluir \"$name\"?\n\nIsso removerá o contato tanto do aplicativo quanto do dispositivo de rádio associado.';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -573,7 +573,7 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String pathResetInfo(String name) {
|
||||
return 'Path reset for $name. Next message will find a new route.';
|
||||
return 'Rota redefinida para $name. A próxima mensagem encontrará um novo caminho.';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -598,7 +598,7 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
String get filterMarkers => 'Filtrar marcadores';
|
||||
|
||||
@override
|
||||
String get filterMarkersTooltip => 'Filter markers';
|
||||
String get filterMarkersTooltip => 'Filtrar marcadores';
|
||||
|
||||
@override
|
||||
String get contactsFilter => 'Contatos';
|
||||
@@ -639,7 +639,7 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String latLonFormat(String latitude, String longitude) {
|
||||
return 'Lat: $latitude Lon: $longitude';
|
||||
return 'Lat.: $latitude Lon.: $longitude';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -703,22 +703,23 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get cannotReplySenderMissing =>
|
||||
'Cannot reply: sender information missing';
|
||||
'Não é possível responder: faltam informações do remetente';
|
||||
|
||||
@override
|
||||
String get cannotReplyContactNotFound => 'Cannot reply: contact not found';
|
||||
String get cannotReplyContactNotFound =>
|
||||
'Não é possível responder: contato não encontrado';
|
||||
|
||||
@override
|
||||
String get copyText => 'Copiar texto';
|
||||
|
||||
@override
|
||||
String get saveAsTemplate => 'Save as Template';
|
||||
String get saveAsTemplate => 'Salvar como modelo';
|
||||
|
||||
@override
|
||||
String get templateSaved => 'Template saved successfully';
|
||||
String get templateSaved => 'Modelo salvo com sucesso';
|
||||
|
||||
@override
|
||||
String get templateAlreadyExists => 'Template with this emoji already exists';
|
||||
String get templateAlreadyExists => 'Já existe um modelo com este emoji';
|
||||
|
||||
@override
|
||||
String get deleteMessage => 'Excluir mensagem';
|
||||
@@ -737,7 +738,7 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
String lon,
|
||||
String url,
|
||||
) {
|
||||
return '$markerInfo\n\nCoordinates: $lat, $lon\n\nGoogle Maps: $url';
|
||||
return '$markerInfo\n\nCoordenadas: $lat, $lon\n\nGoogle Maps: $url';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -788,29 +789,29 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String deliveredToContacts(int delivered, int total) {
|
||||
return 'Delivered to $delivered/$total contacts';
|
||||
return 'Entregue a $delivered/$total contatos';
|
||||
}
|
||||
|
||||
@override
|
||||
String get allDelivered => 'All delivered';
|
||||
String get allDelivered => 'Todos entregues';
|
||||
|
||||
@override
|
||||
String get recipientDetails => 'Recipient Details';
|
||||
String get recipientDetails => 'Detalhes do destinatário';
|
||||
|
||||
@override
|
||||
String get pending => 'Pendente';
|
||||
|
||||
@override
|
||||
String get sarMarkerFoundPerson => 'Found Person';
|
||||
String get sarMarkerFoundPerson => 'Pessoa encontrada';
|
||||
|
||||
@override
|
||||
String get sarMarkerFire => 'Fire Location';
|
||||
String get sarMarkerFire => 'Local do incêndio';
|
||||
|
||||
@override
|
||||
String get sarMarkerStagingArea => 'Staging Area';
|
||||
String get sarMarkerStagingArea => 'Área de apoio';
|
||||
|
||||
@override
|
||||
String get sarMarkerObject => 'Object Found';
|
||||
String get sarMarkerObject => 'Objeto encontrado';
|
||||
|
||||
@override
|
||||
String get from => 'De';
|
||||
@@ -828,7 +829,7 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
String get frequencyMHz => 'Frequência (MHz)';
|
||||
|
||||
@override
|
||||
String get frequencyExample => 'e.g., 869.618';
|
||||
String get frequencyExample => 'ex.: 869.618';
|
||||
|
||||
@override
|
||||
String get bandwidth => 'Largura de banda';
|
||||
@@ -916,7 +917,7 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String showingTrailsForContacts(int count) {
|
||||
return 'Showing trails for $count contacts';
|
||||
return 'Mostrando trilhas de $count contatos';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -966,10 +967,10 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
'Telemetria e compartilhamento de localização';
|
||||
|
||||
@override
|
||||
String get lat => 'Lat';
|
||||
String get lat => 'Lat.';
|
||||
|
||||
@override
|
||||
String get lon => 'Lon';
|
||||
String get lon => 'Lon.';
|
||||
|
||||
@override
|
||||
String get useCurrentLocation => 'Usar localização atual';
|
||||
@@ -988,7 +989,7 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String typeNumber(int number) {
|
||||
return 'Type $number';
|
||||
return 'Tipo $number';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -1010,7 +1011,7 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
String get sarTemplates => 'Modelos SAR';
|
||||
|
||||
@override
|
||||
String get manageSarTemplates => 'Manage cursor on target templates';
|
||||
String get manageSarTemplates => 'Gerenciar modelos SAR';
|
||||
|
||||
@override
|
||||
String get addTemplate => 'Adicionar modelo';
|
||||
@@ -1073,9 +1074,9 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'Imported $count templates',
|
||||
one: 'Imported 1 template',
|
||||
zero: 'No templates imported',
|
||||
other: '$count modelos importados',
|
||||
one: '1 modelo importado',
|
||||
zero: 'Nenhum modelo importado',
|
||||
);
|
||||
return '$_temp0';
|
||||
}
|
||||
@@ -1085,8 +1086,8 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'Exported $count templates to clipboard',
|
||||
one: 'Exported 1 template to clipboard',
|
||||
other: '$count modelos exportados para a área de transferência',
|
||||
one: '1 modelo exportado para a área de transferência',
|
||||
);
|
||||
return '$_temp0';
|
||||
}
|
||||
@@ -1188,28 +1189,28 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
String get channel => 'Canal';
|
||||
|
||||
@override
|
||||
String get samplePoliceLead => 'Police Lead';
|
||||
String get samplePoliceLead => 'Chefe da polícia';
|
||||
|
||||
@override
|
||||
String get sampleDroneOperator => 'Drone Operator';
|
||||
String get sampleDroneOperator => 'Operador de drone';
|
||||
|
||||
@override
|
||||
String get sampleFirefighterAlpha => 'Firefighter';
|
||||
String get sampleFirefighterAlpha => 'Bombeiro';
|
||||
|
||||
@override
|
||||
String get sampleMedicCharlie => 'Medic';
|
||||
String get sampleMedicCharlie => 'Paramédico';
|
||||
|
||||
@override
|
||||
String get sampleCommandDelta => 'Command';
|
||||
String get sampleCommandDelta => 'Comando';
|
||||
|
||||
@override
|
||||
String get sampleFireEngine => 'Fire Engine';
|
||||
String get sampleFireEngine => 'Caminhão de bombeiros';
|
||||
|
||||
@override
|
||||
String get sampleAirSupport => 'Air Support';
|
||||
String get sampleAirSupport => 'Apoio aéreo';
|
||||
|
||||
@override
|
||||
String get sampleBaseCoordinator => 'Base Coordinator';
|
||||
String get sampleBaseCoordinator => 'Coordenador da base';
|
||||
|
||||
@override
|
||||
String get channelEmergency => 'Emergência';
|
||||
@@ -1221,127 +1222,138 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
String get channelUpdates => 'Atualizações';
|
||||
|
||||
@override
|
||||
String get sampleTeamMember => 'Sample Team Member';
|
||||
String get sampleTeamMember => 'Membro de equipe de exemplo';
|
||||
|
||||
@override
|
||||
String get sampleScout => 'Sample Scout';
|
||||
String get sampleScout => 'Batedor de exemplo';
|
||||
|
||||
@override
|
||||
String get sampleBase => 'Sample Base';
|
||||
String get sampleBase => 'Base de exemplo';
|
||||
|
||||
@override
|
||||
String get sampleSearcher => 'Sample Searcher';
|
||||
String get sampleSearcher => 'Buscador de exemplo';
|
||||
|
||||
@override
|
||||
String get sampleObjectBackpack => ' Backpack found - blue color';
|
||||
String get sampleObjectBackpack => ' Mochila encontrada - cor azul';
|
||||
|
||||
@override
|
||||
String get sampleObjectVehicle => ' Vehicle abandoned - check for owner';
|
||||
String get sampleObjectVehicle =>
|
||||
' Veículo abandonado - verificar proprietário';
|
||||
|
||||
@override
|
||||
String get sampleObjectCamping => ' Camping equipment discovered';
|
||||
String get sampleObjectCamping => ' Equipamento de camping encontrado';
|
||||
|
||||
@override
|
||||
String get sampleObjectTrailMarker => ' Trail marker found off-path';
|
||||
String get sampleObjectTrailMarker =>
|
||||
' Marco de trilha encontrado fora da rota';
|
||||
|
||||
@override
|
||||
String get sampleMsgAllTeamsCheckIn => 'All teams check in';
|
||||
String get sampleMsgAllTeamsCheckIn => 'Todas as equipes, façam check-in';
|
||||
|
||||
@override
|
||||
String get sampleMsgWeatherUpdate => 'Weather update: Clear skies, temp 18°C';
|
||||
String get sampleMsgWeatherUpdate =>
|
||||
'Atualização do tempo: céu limpo, temp. 18°C';
|
||||
|
||||
@override
|
||||
String get sampleMsgBaseCamp => 'Base camp established at staging area';
|
||||
String get sampleMsgBaseCamp => 'Base estabelecida na área de apoio';
|
||||
|
||||
@override
|
||||
String get sampleMsgTeamAlpha => 'Team moving to sector 2';
|
||||
String get sampleMsgTeamAlpha => 'Equipe deslocando-se para o setor 2';
|
||||
|
||||
@override
|
||||
String get sampleMsgRadioCheck => 'Radio check - all stations respond';
|
||||
String get sampleMsgRadioCheck =>
|
||||
'Teste de rádio - todas as estações respondam';
|
||||
|
||||
@override
|
||||
String get sampleMsgWaterSupply => 'Water supply available at checkpoint 3';
|
||||
String get sampleMsgWaterSupply =>
|
||||
'Abastecimento de água disponível no ponto de controle 3';
|
||||
|
||||
@override
|
||||
String get sampleMsgTeamBravo => 'Team reporting: sector 1 clear';
|
||||
String get sampleMsgTeamBravo => 'Equipe informa: setor 1 livre';
|
||||
|
||||
@override
|
||||
String get sampleMsgEtaRallyPoint => 'ETA to rally point: 15 minutes';
|
||||
String get sampleMsgEtaRallyPoint =>
|
||||
'ETA para o ponto de reunião: 15 minutos';
|
||||
|
||||
@override
|
||||
String get sampleMsgSupplyDrop => 'Supply drop confirmed for 14:00';
|
||||
String get sampleMsgSupplyDrop =>
|
||||
'Entrega de suprimentos confirmada para 14:00';
|
||||
|
||||
@override
|
||||
String get sampleMsgDroneSurvey => 'Drone survey completed - no findings';
|
||||
String get sampleMsgDroneSurvey =>
|
||||
'Levantamento com drone concluído - nada encontrado';
|
||||
|
||||
@override
|
||||
String get sampleMsgTeamCharlie => 'Team requesting backup';
|
||||
String get sampleMsgTeamCharlie => 'Equipe solicitando reforço';
|
||||
|
||||
@override
|
||||
String get sampleMsgRadioDiscipline => 'All units: maintain radio discipline';
|
||||
String get sampleMsgRadioDiscipline =>
|
||||
'Todas as unidades: mantenham disciplina de rádio';
|
||||
|
||||
@override
|
||||
String get sampleMsgUrgentMedical =>
|
||||
'URGENT: Medical assistance needed at sector 4';
|
||||
'URGENTE: assistência médica necessária no setor 4';
|
||||
|
||||
@override
|
||||
String get sampleMsgAdultMale => ' Adult male, conscious';
|
||||
String get sampleMsgAdultMale => ' Homem adulto, consciente';
|
||||
|
||||
@override
|
||||
String get sampleMsgFireSpotted => 'Fire spotted - coordinates incoming';
|
||||
String get sampleMsgFireSpotted => 'Incêndio avistado - coordenadas a seguir';
|
||||
|
||||
@override
|
||||
String get sampleMsgSpreadingRapidly => ' Spreading rapidly!';
|
||||
String get sampleMsgSpreadingRapidly => ' Se espalhando rapidamente!';
|
||||
|
||||
@override
|
||||
String get sampleMsgPriorityHelicopter => 'PRIORITY: Need helicopter support';
|
||||
String get sampleMsgPriorityHelicopter =>
|
||||
'PRIORIDADE: necessidade de apoio de helicóptero';
|
||||
|
||||
@override
|
||||
String get sampleMsgMedicalTeamEnRoute =>
|
||||
'Medical team en route to your location';
|
||||
'Equipe médica a caminho da sua localização';
|
||||
|
||||
@override
|
||||
String get sampleMsgEvacHelicopter => 'Evac helicopter ETA 10 minutes';
|
||||
String get sampleMsgEvacHelicopter =>
|
||||
'ETA do helicóptero de evacuação: 10 minutos';
|
||||
|
||||
@override
|
||||
String get sampleMsgEmergencyResolved => 'Emergency resolved - all clear';
|
||||
String get sampleMsgEmergencyResolved => 'Emergência resolvida - tudo limpo';
|
||||
|
||||
@override
|
||||
String get sampleMsgEmergencyStagingArea => ' Emergency staging area';
|
||||
String get sampleMsgEmergencyStagingArea => ' Área de apoio de emergência';
|
||||
|
||||
@override
|
||||
String get sampleMsgEmergencyServices =>
|
||||
'Emergency services notified and responding';
|
||||
'Serviços de emergência notificados e em deslocamento';
|
||||
|
||||
@override
|
||||
String get sampleAlphaTeamLead => 'Team Lead';
|
||||
String get sampleAlphaTeamLead => 'Líder da equipe';
|
||||
|
||||
@override
|
||||
String get sampleBravoScout => 'Scout';
|
||||
String get sampleBravoScout => 'Batedor';
|
||||
|
||||
@override
|
||||
String get sampleCharlieMedic => 'Medic';
|
||||
String get sampleCharlieMedic => 'Paramédico';
|
||||
|
||||
@override
|
||||
String get sampleDeltaNavigator => 'Navigator';
|
||||
String get sampleDeltaNavigator => 'Navegador';
|
||||
|
||||
@override
|
||||
String get sampleEchoSupport => 'Support';
|
||||
String get sampleEchoSupport => 'Apoio';
|
||||
|
||||
@override
|
||||
String get sampleBaseCommand => 'Base Command';
|
||||
String get sampleBaseCommand => 'Comando da base';
|
||||
|
||||
@override
|
||||
String get sampleFieldCoordinator => 'Field Coordinator';
|
||||
String get sampleFieldCoordinator => 'Coordenador de campo';
|
||||
|
||||
@override
|
||||
String get sampleMedicalTeam => 'Medical Team';
|
||||
String get sampleMedicalTeam => 'Equipe médica';
|
||||
|
||||
@override
|
||||
String get mapDrawing => 'Desenho do mapa';
|
||||
|
||||
@override
|
||||
String get navigateToDrawing => 'Navigate to Drawing';
|
||||
String get navigateToDrawing => 'Navegar até o desenho';
|
||||
|
||||
@override
|
||||
String get copyCoordinates => 'Copiar coordenadas';
|
||||
@@ -1368,7 +1380,7 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
String get longitudeLabel => 'Longitude';
|
||||
|
||||
@override
|
||||
String get exampleCoordinates => 'Example: 46.0569, 14.5058';
|
||||
String get exampleCoordinates => 'Exemplo: 46.0569, 14.5058';
|
||||
|
||||
@override
|
||||
String get shareDrawing => 'Compartilhar desenho';
|
||||
@@ -1393,7 +1405,7 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String yourDrawingsCount(int count) {
|
||||
return 'Your Drawings ($count)';
|
||||
return 'Seus desenhos ($count)';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -1421,43 +1433,43 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
String get updateLater => 'Mais tarde';
|
||||
|
||||
@override
|
||||
String get cadastralParcels => 'Cadastral Parcels';
|
||||
String get cadastralParcels => 'Parcelas cadastrais';
|
||||
|
||||
@override
|
||||
String get forestRoads => 'Forest Roads';
|
||||
String get forestRoads => 'Estradas florestais';
|
||||
|
||||
@override
|
||||
String get wmsOverlays => 'WMS Overlays';
|
||||
String get wmsOverlays => 'Sobreposições WMS';
|
||||
|
||||
@override
|
||||
String get hikingTrails => 'Hiking Trails';
|
||||
String get hikingTrails => 'Trilhas de caminhada';
|
||||
|
||||
@override
|
||||
String get mainRoads => 'Main Roads';
|
||||
String get mainRoads => 'Estradas principais';
|
||||
|
||||
@override
|
||||
String get houseNumbers => 'House Numbers';
|
||||
String get houseNumbers => 'Números de porta';
|
||||
|
||||
@override
|
||||
String get fireHazardZones => 'Fire Hazard Zones';
|
||||
String get fireHazardZones => 'Zonas de risco de incêndio';
|
||||
|
||||
@override
|
||||
String get historicalFires => 'Historical Fires';
|
||||
String get historicalFires => 'Incêndios históricos';
|
||||
|
||||
@override
|
||||
String get firebreaks => 'Firebreaks';
|
||||
String get firebreaks => 'Aceiros';
|
||||
|
||||
@override
|
||||
String get krasFireZones => 'Kras Fire Zones';
|
||||
String get krasFireZones => 'Zonas de incêndio do Karst';
|
||||
|
||||
@override
|
||||
String get placeNames => 'Place Names';
|
||||
String get placeNames => 'Topônimos';
|
||||
|
||||
@override
|
||||
String get municipalityBorders => 'Municipality Borders';
|
||||
String get municipalityBorders => 'Limites municipais';
|
||||
|
||||
@override
|
||||
String get topographicMap => 'Topographic Map 1:25000';
|
||||
String get topographicMap => 'Mapa topográfico 1:25000';
|
||||
|
||||
@override
|
||||
String get recentMessages => 'Mensagens recentes';
|
||||
@@ -1479,28 +1491,29 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get channelSecretHelp =>
|
||||
'This secret must be shared with all team members who need access to this channel';
|
||||
'Este segredo deve ser compartilhado com todos os membros da equipe que precisam de acesso a este canal';
|
||||
|
||||
@override
|
||||
String get channelTypesInfo =>
|
||||
'Hash channels (#team): Secret auto-generated from name. Same name = same channel across devices.\n\nPrivate channels: Use explicit secret. Only those with the secret can join.';
|
||||
'Canais hash (#team): o segredo é gerado automaticamente a partir do nome. Mesmo nome = mesmo canal em todos os dispositivos.\n\nCanais privados: use um segredo explícito. Somente quem tiver o segredo poderá entrar.';
|
||||
|
||||
@override
|
||||
String get hashChannelInfo =>
|
||||
'Hash channel: Secret will be auto-generated from the channel name. Anyone using the same name will join the same channel.';
|
||||
'Canal hash: o segredo será gerado automaticamente a partir do nome do canal. Qualquer pessoa usando o mesmo nome entrará no mesmo canal.';
|
||||
|
||||
@override
|
||||
String get channelNameRequired => 'O nome do canal é obrigatório';
|
||||
|
||||
@override
|
||||
String get channelNameTooLong => 'Channel name must be 31 characters or less';
|
||||
String get channelNameTooLong =>
|
||||
'O nome do canal deve ter no máximo 31 caracteres';
|
||||
|
||||
@override
|
||||
String get channelSecretRequired => 'O segredo do canal é obrigatório';
|
||||
|
||||
@override
|
||||
String get channelSecretTooLong =>
|
||||
'Channel secret must be 32 characters or less';
|
||||
'O segredo do canal deve ter no máximo 32 caracteres';
|
||||
|
||||
@override
|
||||
String get invalidAsciiCharacters =>
|
||||
@@ -1519,7 +1532,7 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String deleteChannelConfirmation(String channelName) {
|
||||
return 'Are you sure you want to delete channel \"$channelName\"? This action cannot be undone.';
|
||||
return 'Tem certeza de que deseja excluir o canal \"$channelName\"? Esta ação não pode ser desfeita.';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -1550,79 +1563,84 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get wizardWelcomeDescription =>
|
||||
'A powerful off-grid communication tool for search and rescue operations. Connect with your team using mesh radio technology when traditional networks are unavailable.';
|
||||
'Uma poderosa ferramenta de comunicação off-grid para operações de busca e resgate. Conecte-se com sua equipe usando tecnologia de rádio mesh quando as redes tradicionais não estiverem disponíveis.';
|
||||
|
||||
@override
|
||||
String get wizardConnectingTitle => 'Conectando ao seu rádio';
|
||||
|
||||
@override
|
||||
String get wizardConnectingDescription =>
|
||||
'Connect your smartphone to a MeshCore radio device via Bluetooth to start communicating off-grid.';
|
||||
'Conecte seu smartphone a um dispositivo de rádio MeshCore via Bluetooth para começar a se comunicar off-grid.';
|
||||
|
||||
@override
|
||||
String get wizardConnectingFeature1 => 'Scan for nearby MeshCore devices';
|
||||
String get wizardConnectingFeature1 =>
|
||||
'Procure dispositivos MeshCore próximos';
|
||||
|
||||
@override
|
||||
String get wizardConnectingFeature2 => 'Pair with your radio via Bluetooth';
|
||||
String get wizardConnectingFeature2 =>
|
||||
'Emparelhe com seu rádio via Bluetooth';
|
||||
|
||||
@override
|
||||
String get wizardConnectingFeature3 =>
|
||||
'Works completely offline - no internet required';
|
||||
'Funciona totalmente offline - internet não é necessária';
|
||||
|
||||
@override
|
||||
String get wizardChannelTitle => 'Canais';
|
||||
|
||||
@override
|
||||
String get wizardChannelDescription =>
|
||||
'Broadcast messages to everyone on a channel, perfect for team-wide announcements and coordination.';
|
||||
'Transmita mensagens para todos em um canal, ideal para anúncios e coordenação de toda a equipe.';
|
||||
|
||||
@override
|
||||
String get wizardChannelFeature1 =>
|
||||
'Public Channel for general team communication';
|
||||
'Canal público para comunicação geral da equipe';
|
||||
|
||||
@override
|
||||
String get wizardChannelFeature2 =>
|
||||
'Create custom channels for specific groups';
|
||||
'Crie canais personalizados para grupos específicos';
|
||||
|
||||
@override
|
||||
String get wizardChannelFeature3 =>
|
||||
'Messages are automatically relayed by the mesh';
|
||||
'As mensagens são retransmitidas automaticamente pela malha';
|
||||
|
||||
@override
|
||||
String get wizardContactsTitle => 'Contatos';
|
||||
|
||||
@override
|
||||
String get wizardContactsDescription =>
|
||||
'Your team members appear automatically as they join the mesh network. Send them direct messages or view their location.';
|
||||
'Os membros da sua equipe aparecem automaticamente à medida que entram na rede mesh. Envie mensagens diretas ou veja a localização deles.';
|
||||
|
||||
@override
|
||||
String get wizardContactsFeature1 => 'Contacts discovered automatically';
|
||||
String get wizardContactsFeature1 => 'Contatos descobertos automaticamente';
|
||||
|
||||
@override
|
||||
String get wizardContactsFeature2 => 'Send private direct messages';
|
||||
String get wizardContactsFeature2 => 'Envie mensagens diretas privadas';
|
||||
|
||||
@override
|
||||
String get wizardContactsFeature3 => 'View battery level and last seen time';
|
||||
String get wizardContactsFeature3 =>
|
||||
'Veja o nível de bateria e o horário da última visualização';
|
||||
|
||||
@override
|
||||
String get wizardMapTitle => 'Mapa e localização';
|
||||
|
||||
@override
|
||||
String get wizardMapDescription =>
|
||||
'Track your team in real-time and mark important locations for search and rescue operations.';
|
||||
'Acompanhe sua equipe em tempo real e marque locais importantes para operações de busca e resgate.';
|
||||
|
||||
@override
|
||||
String get wizardMapFeature1 =>
|
||||
'SAR markers for found persons, fires, and staging areas';
|
||||
'Marcadores SAR para pessoas encontradas, incêndios e áreas de apoio';
|
||||
|
||||
@override
|
||||
String get wizardMapFeature2 => 'Real-time GPS tracking of team members';
|
||||
String get wizardMapFeature2 =>
|
||||
'Rastreamento GPS em tempo real dos membros da equipe';
|
||||
|
||||
@override
|
||||
String get wizardMapFeature3 => 'Download offline maps for remote areas';
|
||||
String get wizardMapFeature3 => 'Baixe mapas offline para áreas remotas';
|
||||
|
||||
@override
|
||||
String get wizardMapFeature4 => 'Draw shapes and share tactical information';
|
||||
String get wizardMapFeature4 =>
|
||||
'Desenhe formas e compartilhe informações táticas';
|
||||
|
||||
@override
|
||||
String get viewWelcomeTutorial => 'Ver tutorial de boas-vindas';
|
||||
@@ -1632,12 +1650,12 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String directMessagesInfo(int count) {
|
||||
return 'Direct messages with ACKs. Sent to $count team members.';
|
||||
return 'Mensagens diretas com ACKs. Enviadas para $count membros da equipe.';
|
||||
}
|
||||
|
||||
@override
|
||||
String sarMarkerSentToContacts(int count) {
|
||||
return 'SAR marker sent to $count contacts';
|
||||
return 'Marcador SAR enviado para $count contatos';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -1650,72 +1668,72 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
String get technicalDetails => 'Detalhes técnicos';
|
||||
|
||||
@override
|
||||
String get messageTechnicalDetails => 'Message technical details';
|
||||
String get messageTechnicalDetails => 'Detalhes técnicos da mensagem';
|
||||
|
||||
@override
|
||||
String get linkQuality => 'Link quality';
|
||||
String get linkQuality => 'Qualidade do link';
|
||||
|
||||
@override
|
||||
String get delivery => 'Delivery';
|
||||
String get delivery => 'Entrega';
|
||||
|
||||
@override
|
||||
String get status => 'Status';
|
||||
|
||||
@override
|
||||
String get expectedAckTag => 'Expected ACK tag';
|
||||
String get expectedAckTag => 'Tag ACK esperada';
|
||||
|
||||
@override
|
||||
String get roundTrip => 'Round-trip';
|
||||
String get roundTrip => 'Ida e volta';
|
||||
|
||||
@override
|
||||
String get retryAttempt => 'Retry attempt';
|
||||
String get retryAttempt => 'Tentativa de repetição';
|
||||
|
||||
@override
|
||||
String get floodFallback => 'Flood fallback';
|
||||
String get floodFallback => 'Fallback de flooding';
|
||||
|
||||
@override
|
||||
String get identity => 'Identity';
|
||||
String get identity => 'Identidade';
|
||||
|
||||
@override
|
||||
String get messageId => 'Message ID';
|
||||
String get messageId => 'ID da mensagem';
|
||||
|
||||
@override
|
||||
String get sender => 'Sender';
|
||||
String get sender => 'Remetente';
|
||||
|
||||
@override
|
||||
String get senderKey => 'Sender key';
|
||||
String get senderKey => 'Chave do remetente';
|
||||
|
||||
@override
|
||||
String get recipient => 'Recipient';
|
||||
String get recipient => 'Destinatário';
|
||||
|
||||
@override
|
||||
String get recipientKey => 'Recipient key';
|
||||
String get recipientKey => 'Chave do destinatário';
|
||||
|
||||
@override
|
||||
String get voice => 'Voz';
|
||||
|
||||
@override
|
||||
String get voiceId => 'Voice ID';
|
||||
String get voiceId => 'ID de voz';
|
||||
|
||||
@override
|
||||
String get envelope => 'Envelope';
|
||||
|
||||
@override
|
||||
String get sessionProgress => 'Session progress';
|
||||
String get sessionProgress => 'Progresso da sessão';
|
||||
|
||||
@override
|
||||
String get complete => 'Concluído';
|
||||
|
||||
@override
|
||||
String get rawDump => 'Raw dump';
|
||||
String get rawDump => 'Dump bruto';
|
||||
|
||||
@override
|
||||
String get cannotRetryMissingRecipient =>
|
||||
'Cannot retry: recipient information missing';
|
||||
'Não é possível repetir: faltam informações do destinatário';
|
||||
|
||||
@override
|
||||
String get voiceUnavailable => 'A voz não está disponível no momento';
|
||||
|
||||
@override
|
||||
String get requestingVoice => 'Requesting voice';
|
||||
String get requestingVoice => 'Solicitando voz';
|
||||
}
|
||||
|
||||
@@ -145,31 +145,31 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
String get appName => 'Uygulama adı';
|
||||
|
||||
@override
|
||||
String get aboutMeshCoreSar => 'About MeshCore SAR';
|
||||
String get aboutMeshCoreSar => 'MeshCore SAR hakkında';
|
||||
|
||||
@override
|
||||
String get aboutDescription =>
|
||||
'A Search & Rescue application designed for emergency response teams. Features include:\n\n• BLE mesh networking for device-to-device communication\n• Offline maps with multiple layer options\n• Real-time team member tracking\n• SAR tactical markers (found person, fire, staging)\n• Contact management and messaging\n• GPS tracking with compass heading\n• Map tile caching for offline use';
|
||||
'Acil durum müdahale ekipleri için tasarlanmış bir Arama ve Kurtarma uygulaması. Özellikler:\n\n• Cihazdan cihaza iletişim için BLE mesh ağı\n• Birden çok katman seçeneğiyle çevrimdışı haritalar\n• Ekip üyelerinin gerçek zamanlı takibi\n• SAR taktik işaretleri (bulunan kişi, yangın, toplanma alanı)\n• Kişi yönetimi ve mesajlaşma\n• Pusula yönüyle GPS takibi\n• Çevrimdışı kullanım için harita karo önbelleği';
|
||||
|
||||
@override
|
||||
String get technologiesUsed => 'Technologies Used:';
|
||||
String get technologiesUsed => 'Kullanılan teknolojiler:';
|
||||
|
||||
@override
|
||||
String get technologiesList =>
|
||||
'• Flutter for cross-platform development\n• BLE (Bluetooth Low Energy) for mesh networking\n• OpenStreetMap for mapping\n• Provider for state management\n• SharedPreferences for local storage';
|
||||
'• Çok platformlu geliştirme için Flutter\n• Mesh ağı için BLE (Bluetooth Low Energy)\n• Haritalama için OpenStreetMap\n• Durum yönetimi için Provider\n• Yerel depolama için SharedPreferences';
|
||||
|
||||
@override
|
||||
String get moreInfo => 'Daha fazla bilgi';
|
||||
|
||||
@override
|
||||
String get packageName => 'Package Name';
|
||||
String get packageName => 'Paket adı';
|
||||
|
||||
@override
|
||||
String get sampleData => 'Örnek veriler';
|
||||
|
||||
@override
|
||||
String get sampleDataDescription =>
|
||||
'Load or clear sample contacts, channel messages, and SAR markers for testing';
|
||||
'Test için örnek kişiler, kanal mesajları ve SAR işaretleri yükleyin veya temizleyin';
|
||||
|
||||
@override
|
||||
String get loadSampleData => 'Örnek verileri yükle';
|
||||
@@ -194,7 +194,7 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
int sarCount,
|
||||
int messageCount,
|
||||
) {
|
||||
return 'Loaded $teamCount team members, $channelCount channels, $sarCount SAR markers, $messageCount messages';
|
||||
return '$teamCount ekip üyesi, $channelCount kanal, $sarCount SAR işareti, $messageCount mesaj yüklendi';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -207,16 +207,16 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get failedToStartBackgroundTracking =>
|
||||
'Failed to start background tracking. Check permissions and BLE connection.';
|
||||
'Arka plan takibi başlatılamadı. İzinleri ve BLE bağlantısını kontrol edin.';
|
||||
|
||||
@override
|
||||
String locationBroadcast(String latitude, String longitude) {
|
||||
return 'Location broadcast: $latitude, $longitude';
|
||||
return 'Konum yayını: $latitude, $longitude';
|
||||
}
|
||||
|
||||
@override
|
||||
String get defaultPinInfo =>
|
||||
'The default pin for devices without a screen is 123456. Trouble pairing? Forget the bluetooth device in system settings.';
|
||||
'Ekranı olmayan cihazlar için varsayılan PIN 123456’dır. Eşleştirme sorunu mu yaşıyorsunuz? Sistem ayarlarından Bluetooth cihazını unutun.';
|
||||
|
||||
@override
|
||||
String get noMessagesYet => 'Henüz mesaj yok';
|
||||
@@ -237,7 +237,7 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
String get refresh => 'Yenile';
|
||||
|
||||
@override
|
||||
String get resetPath => 'Reset Path (Re-route)';
|
||||
String get resetPath => 'Yolu sıfırla (yeniden yönlendir)';
|
||||
|
||||
@override
|
||||
String get publicKeyCopied => 'Genel anahtar panoya kopyalandı';
|
||||
@@ -314,14 +314,15 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
}
|
||||
|
||||
@override
|
||||
String get longPressForSecondPoint => 'Long press for second point';
|
||||
String get longPressForSecondPoint => 'İkinci nokta için uzun basın';
|
||||
|
||||
@override
|
||||
String get longPressToStartMeasurement => 'Long press to set first point';
|
||||
String get longPressToStartMeasurement =>
|
||||
'İlk noktayı ayarlamak için uzun basın';
|
||||
|
||||
@override
|
||||
String get longPressToStartNewMeasurement =>
|
||||
'Long press to start new measurement';
|
||||
'Yeni ölçüm başlatmak için uzun basın';
|
||||
|
||||
@override
|
||||
String get shareDrawings => 'Çizimleri paylaş';
|
||||
@@ -330,21 +331,21 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
String get clearAllDrawings => 'Tüm çizimleri temizle';
|
||||
|
||||
@override
|
||||
String get completeLine => 'Complete Line';
|
||||
String get completeLine => 'Çizgiyi tamamla';
|
||||
|
||||
@override
|
||||
String broadcastDrawingsToTeam(int count, String plural) {
|
||||
return 'Broadcast $count drawing$plural to team';
|
||||
return '$count çizim$plural ekibe yayınla';
|
||||
}
|
||||
|
||||
@override
|
||||
String removeAllDrawings(int count, String plural) {
|
||||
return 'Remove all $count drawing$plural';
|
||||
return 'Tüm $count çizim$plural kaldır';
|
||||
}
|
||||
|
||||
@override
|
||||
String deleteAllDrawingsConfirm(int count, String plural) {
|
||||
return 'Delete all $count drawing$plural from the map?';
|
||||
return 'Haritadaki tüm $count çizim$plural silinsin mi?';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -352,7 +353,7 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String shareDrawingsCount(int count, String plural) {
|
||||
return 'Share $count Drawing$plural';
|
||||
return '$count çizim$plural paylaş';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -381,7 +382,7 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
String get publicChannel => 'Genel kanal';
|
||||
|
||||
@override
|
||||
String get broadcastToAll => 'Broadcast to all nearby nodes (ephemeral)';
|
||||
String get broadcastToAll => 'Yakındaki tüm düğümlere yayınla (geçici)';
|
||||
|
||||
@override
|
||||
String get storedPermanently => 'Odada kalıcı olarak saklanır';
|
||||
@@ -409,11 +410,11 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get ephemeralBroadcastInfo =>
|
||||
'Ephemeral: Broadcast over-the-air only. Not stored - nodes must be online.';
|
||||
'Geçici: yalnızca havadan yayınlanır. Saklanmaz; düğümlerin çevrimiçi olması gerekir.';
|
||||
|
||||
@override
|
||||
String get persistentRoomInfo =>
|
||||
'Persistent: Stored immutably in room. Synced automatically and preserved offline.';
|
||||
'Kalıcı: odada değişmez şekilde saklanır. Otomatik olarak eşitlenir ve çevrimdışı korunur.';
|
||||
|
||||
@override
|
||||
String get location => 'Konum';
|
||||
@@ -446,7 +447,7 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String lowAccuracyWarning(int accuracy) {
|
||||
return 'Location accuracy is ±${accuracy}m. This may not be accurate enough for SAR operations.\n\nContinue anyway?';
|
||||
return 'Konum doğruluğu ±${accuracy}m. Bu, SAR operasyonları için yeterince doğru olmayabilir.\n\nYine de devam edilsin mi?';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -454,7 +455,7 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get enterPasswordInfo =>
|
||||
'Enter the password to access this room. The password will be saved for future use.';
|
||||
'Bu odaya erişmek için parolayı girin. Parola daha sonra kullanılmak üzere kaydedilecektir.';
|
||||
|
||||
@override
|
||||
String get password => 'Parola';
|
||||
@@ -470,14 +471,14 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String failedToAddRoom(String error) {
|
||||
return 'Failed to add room to device: $error\n\nThe room may not have advertised yet.\nTry waiting for the room to broadcast.';
|
||||
return 'Oda cihaza eklenemedi: $error\n\nOda henüz yayın yapmamış olabilir.\nYayın yapmasını beklemeyi deneyin.';
|
||||
}
|
||||
|
||||
@override
|
||||
String get direct => 'Doğrudan';
|
||||
|
||||
@override
|
||||
String get flood => 'Flood';
|
||||
String get flood => 'Yayılım';
|
||||
|
||||
@override
|
||||
String get loggedIn => 'Giriş yapıldı';
|
||||
@@ -490,7 +491,7 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String directPingTimeout(String name) {
|
||||
return 'Direct ping timeout - retrying $name with flooding...';
|
||||
return 'Doğrudan ping zaman aşımına uğradı - $name flooding ile yeniden deneniyor...';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -500,7 +501,7 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String deleteContactConfirmation(String name) {
|
||||
return 'Are you sure you want to delete \"$name\"?\n\nThis will remove the contact from both the app and the companion radio device.';
|
||||
return '\"$name\" kişisini silmek istediğinizden emin misiniz?\n\nBu işlem kişiyi hem uygulamadan hem de bağlı radyo cihazından kaldıracaktır.';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -570,7 +571,7 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String pathResetInfo(String name) {
|
||||
return 'Path reset for $name. Next message will find a new route.';
|
||||
return '$name için yol sıfırlandı. Sonraki mesaj yeni bir rota bulacak.';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -595,7 +596,7 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
String get filterMarkers => 'İşaretleri filtrele';
|
||||
|
||||
@override
|
||||
String get filterMarkersTooltip => 'Filter markers';
|
||||
String get filterMarkersTooltip => 'İşaretleri filtrele';
|
||||
|
||||
@override
|
||||
String get contactsFilter => 'Kişiler';
|
||||
@@ -636,7 +637,7 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String latLonFormat(String latitude, String longitude) {
|
||||
return 'Lat: $latitude Lon: $longitude';
|
||||
return 'Enl: $latitude Boy: $longitude';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -699,22 +700,22 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get cannotReplySenderMissing =>
|
||||
'Cannot reply: sender information missing';
|
||||
'Yanıtlanamıyor: gönderen bilgisi eksik';
|
||||
|
||||
@override
|
||||
String get cannotReplyContactNotFound => 'Cannot reply: contact not found';
|
||||
String get cannotReplyContactNotFound => 'Yanıtlanamıyor: kişi bulunamadı';
|
||||
|
||||
@override
|
||||
String get copyText => 'Metni kopyala';
|
||||
|
||||
@override
|
||||
String get saveAsTemplate => 'Save as Template';
|
||||
String get saveAsTemplate => 'Şablon olarak kaydet';
|
||||
|
||||
@override
|
||||
String get templateSaved => 'Template saved successfully';
|
||||
String get templateSaved => 'Şablon başarıyla kaydedildi';
|
||||
|
||||
@override
|
||||
String get templateAlreadyExists => 'Template with this emoji already exists';
|
||||
String get templateAlreadyExists => 'Bu emoji ile bir şablon zaten var';
|
||||
|
||||
@override
|
||||
String get deleteMessage => 'Mesajı sil';
|
||||
@@ -733,7 +734,7 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
String lon,
|
||||
String url,
|
||||
) {
|
||||
return '$markerInfo\n\nCoordinates: $lat, $lon\n\nGoogle Maps: $url';
|
||||
return '$markerInfo\n\nKoordinatlar: $lat, $lon\n\nGoogle Maps: $url';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -784,29 +785,29 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String deliveredToContacts(int delivered, int total) {
|
||||
return 'Delivered to $delivered/$total contacts';
|
||||
return '$delivered/$total kişiye teslim edildi';
|
||||
}
|
||||
|
||||
@override
|
||||
String get allDelivered => 'All delivered';
|
||||
String get allDelivered => 'Hepsi teslim edildi';
|
||||
|
||||
@override
|
||||
String get recipientDetails => 'Recipient Details';
|
||||
String get recipientDetails => 'Alıcı ayrıntıları';
|
||||
|
||||
@override
|
||||
String get pending => 'Bekliyor';
|
||||
|
||||
@override
|
||||
String get sarMarkerFoundPerson => 'Found Person';
|
||||
String get sarMarkerFoundPerson => 'Bulunan kişi';
|
||||
|
||||
@override
|
||||
String get sarMarkerFire => 'Fire Location';
|
||||
String get sarMarkerFire => 'Yangın konumu';
|
||||
|
||||
@override
|
||||
String get sarMarkerStagingArea => 'Staging Area';
|
||||
String get sarMarkerStagingArea => 'Toplanma alanı';
|
||||
|
||||
@override
|
||||
String get sarMarkerObject => 'Object Found';
|
||||
String get sarMarkerObject => 'Bulunan nesne';
|
||||
|
||||
@override
|
||||
String get from => 'Kimden';
|
||||
@@ -824,7 +825,7 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
String get frequencyMHz => 'Frekans (MHz)';
|
||||
|
||||
@override
|
||||
String get frequencyExample => 'e.g., 869.618';
|
||||
String get frequencyExample => 'örn. 869.618';
|
||||
|
||||
@override
|
||||
String get bandwidth => 'Bant genişliği';
|
||||
@@ -888,7 +889,7 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get clearTrailConfirmation =>
|
||||
'Are you sure you want to clear the current location trail? This action cannot be undone.';
|
||||
'Geçerli konum izini temizlemek istediğinizden emin misiniz? Bu işlem geri alınamaz.';
|
||||
|
||||
@override
|
||||
String get noTrailRecorded => 'Henüz iz kaydedilmedi';
|
||||
@@ -911,11 +912,11 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String showingTrailsForContacts(int count) {
|
||||
return 'Showing trails for $count contacts';
|
||||
return '$count kişi için izler gösteriliyor';
|
||||
}
|
||||
|
||||
@override
|
||||
String get individualContactTrails => 'Individual Contact Trails';
|
||||
String get individualContactTrails => 'Tek tek kişi izleri';
|
||||
|
||||
@override
|
||||
String get deviceInformation => 'Cihaz bilgileri';
|
||||
@@ -954,7 +955,7 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
String get meshNetworkName => 'Mesh ağ adı';
|
||||
|
||||
@override
|
||||
String get nameBroadcastInMesh => 'Name broadcast in mesh advertisements';
|
||||
String get nameBroadcastInMesh => 'Mesh duyurularında yayınlanan ad';
|
||||
|
||||
@override
|
||||
String get telemetryAndLocationSharing => 'Telemetri ve konum paylaşımı';
|
||||
@@ -982,12 +983,12 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String typeNumber(int number) {
|
||||
return 'Type $number';
|
||||
return 'Tür $number';
|
||||
}
|
||||
|
||||
@override
|
||||
String copiedToClipboardShort(String label) {
|
||||
return 'Copied $label to clipboard';
|
||||
return '$label panoya kopyalandı';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -1004,7 +1005,7 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
String get sarTemplates => 'SAR şablonları';
|
||||
|
||||
@override
|
||||
String get manageSarTemplates => 'Manage cursor on target templates';
|
||||
String get manageSarTemplates => 'SAR şablonlarını yönet';
|
||||
|
||||
@override
|
||||
String get addTemplate => 'Şablon ekle';
|
||||
@@ -1067,9 +1068,9 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'Imported $count templates',
|
||||
one: 'Imported 1 template',
|
||||
zero: 'No templates imported',
|
||||
other: '$count şablon içe aktarıldı',
|
||||
one: '1 şablon içe aktarıldı',
|
||||
zero: 'Şablon içe aktarılmadı',
|
||||
);
|
||||
return '$_temp0';
|
||||
}
|
||||
@@ -1079,8 +1080,8 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'Exported $count templates to clipboard',
|
||||
one: 'Exported 1 template to clipboard',
|
||||
other: '$count şablon panoya aktarıldı',
|
||||
one: '1 şablon panoya aktarıldı',
|
||||
);
|
||||
return '$_temp0';
|
||||
}
|
||||
@@ -1090,7 +1091,7 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get resetToDefaultsConfirmation =>
|
||||
'This will delete all custom templates and restore the 4 default templates. Continue?';
|
||||
'Bu işlem tüm özel şablonları silecek ve 4 varsayılan şablonu geri yükleyecek. Devam edilsin mi?';
|
||||
|
||||
@override
|
||||
String get reset => 'Sıfırla';
|
||||
@@ -1134,7 +1135,7 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get locationPermissionDialogContent =>
|
||||
'Location permission is permanently denied. Please enable it in your device settings to use GPS tracking and location sharing features.';
|
||||
'Konum izni kalıcı olarak reddedildi. GPS takibi ve konum paylaşımını kullanmak için lütfen cihaz ayarlarından etkinleştirin.';
|
||||
|
||||
@override
|
||||
String get openSettings => 'Ayarları aç';
|
||||
@@ -1150,16 +1151,16 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
String get locationPermissionAlreadyGranted => 'Konum izni zaten verilmiş.';
|
||||
|
||||
@override
|
||||
String get sarNavyBlue => 'SAR Navy Blue';
|
||||
String get sarNavyBlue => 'SAR Lacivert';
|
||||
|
||||
@override
|
||||
String get sarNavyBlueDescription => 'Professional/Operations Mode';
|
||||
String get sarNavyBlueDescription => 'Profesyonel/Operasyon modu';
|
||||
|
||||
@override
|
||||
String get selectRecipient => 'Alıcı seç';
|
||||
|
||||
@override
|
||||
String get broadcastToAllNearby => 'Broadcast to all nearby';
|
||||
String get broadcastToAllNearby => 'Yakındaki herkese yayınla';
|
||||
|
||||
@override
|
||||
String get searchRecipients => 'Alıcı ara...';
|
||||
@@ -1183,28 +1184,28 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
String get channel => 'Kanal';
|
||||
|
||||
@override
|
||||
String get samplePoliceLead => 'Police Lead';
|
||||
String get samplePoliceLead => 'Polis lideri';
|
||||
|
||||
@override
|
||||
String get sampleDroneOperator => 'Drone Operator';
|
||||
String get sampleDroneOperator => 'Drone operatörü';
|
||||
|
||||
@override
|
||||
String get sampleFirefighterAlpha => 'Firefighter';
|
||||
String get sampleFirefighterAlpha => 'İtfaiyeci';
|
||||
|
||||
@override
|
||||
String get sampleMedicCharlie => 'Medic';
|
||||
String get sampleMedicCharlie => 'Sağlık görevlisi';
|
||||
|
||||
@override
|
||||
String get sampleCommandDelta => 'Command';
|
||||
String get sampleCommandDelta => 'Komuta';
|
||||
|
||||
@override
|
||||
String get sampleFireEngine => 'Fire Engine';
|
||||
String get sampleFireEngine => 'İtfaiye aracı';
|
||||
|
||||
@override
|
||||
String get sampleAirSupport => 'Air Support';
|
||||
String get sampleAirSupport => 'Hava desteği';
|
||||
|
||||
@override
|
||||
String get sampleBaseCoordinator => 'Base Coordinator';
|
||||
String get sampleBaseCoordinator => 'Üs koordinatörü';
|
||||
|
||||
@override
|
||||
String get channelEmergency => 'Acil durum';
|
||||
@@ -1216,127 +1217,131 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
String get channelUpdates => 'Güncellemeler';
|
||||
|
||||
@override
|
||||
String get sampleTeamMember => 'Sample Team Member';
|
||||
String get sampleTeamMember => 'Örnek ekip üyesi';
|
||||
|
||||
@override
|
||||
String get sampleScout => 'Sample Scout';
|
||||
String get sampleScout => 'Örnek keşifçi';
|
||||
|
||||
@override
|
||||
String get sampleBase => 'Sample Base';
|
||||
String get sampleBase => 'Örnek üs';
|
||||
|
||||
@override
|
||||
String get sampleSearcher => 'Sample Searcher';
|
||||
String get sampleSearcher => 'Örnek arayıcı';
|
||||
|
||||
@override
|
||||
String get sampleObjectBackpack => ' Backpack found - blue color';
|
||||
String get sampleObjectBackpack => ' Sırt çantası bulundu - mavi renk';
|
||||
|
||||
@override
|
||||
String get sampleObjectVehicle => ' Vehicle abandoned - check for owner';
|
||||
String get sampleObjectVehicle => ' Terk edilmiş araç - sahibi kontrol edin';
|
||||
|
||||
@override
|
||||
String get sampleObjectCamping => ' Camping equipment discovered';
|
||||
String get sampleObjectCamping => ' Kamp ekipmanı bulundu';
|
||||
|
||||
@override
|
||||
String get sampleObjectTrailMarker => ' Trail marker found off-path';
|
||||
String get sampleObjectTrailMarker => ' Yol dışında patika işareti bulundu';
|
||||
|
||||
@override
|
||||
String get sampleMsgAllTeamsCheckIn => 'All teams check in';
|
||||
String get sampleMsgAllTeamsCheckIn => 'Tüm ekipler durum bildirimi yapsın';
|
||||
|
||||
@override
|
||||
String get sampleMsgWeatherUpdate => 'Weather update: Clear skies, temp 18°C';
|
||||
String get sampleMsgWeatherUpdate =>
|
||||
'Hava durumu: açık gökyüzü, sıcaklık 18°C';
|
||||
|
||||
@override
|
||||
String get sampleMsgBaseCamp => 'Base camp established at staging area';
|
||||
String get sampleMsgBaseCamp => 'Üs kampı toplanma alanında kuruldu';
|
||||
|
||||
@override
|
||||
String get sampleMsgTeamAlpha => 'Team moving to sector 2';
|
||||
String get sampleMsgTeamAlpha => 'Ekip sektör 2’ye ilerliyor';
|
||||
|
||||
@override
|
||||
String get sampleMsgRadioCheck => 'Radio check - all stations respond';
|
||||
String get sampleMsgRadioCheck =>
|
||||
'Telsiz kontrolü - tüm istasyonlar yanıt versin';
|
||||
|
||||
@override
|
||||
String get sampleMsgWaterSupply => 'Water supply available at checkpoint 3';
|
||||
String get sampleMsgWaterSupply =>
|
||||
'Su ikmali 3 numaralı kontrol noktasında mevcut';
|
||||
|
||||
@override
|
||||
String get sampleMsgTeamBravo => 'Team reporting: sector 1 clear';
|
||||
String get sampleMsgTeamBravo => 'Ekip raporu: sektör 1 temiz';
|
||||
|
||||
@override
|
||||
String get sampleMsgEtaRallyPoint => 'ETA to rally point: 15 minutes';
|
||||
String get sampleMsgEtaRallyPoint =>
|
||||
'Toplanma noktasına tahmini varış: 15 dakika';
|
||||
|
||||
@override
|
||||
String get sampleMsgSupplyDrop => 'Supply drop confirmed for 14:00';
|
||||
String get sampleMsgSupplyDrop => 'İkmal bırakma 14:00 için onaylandı';
|
||||
|
||||
@override
|
||||
String get sampleMsgDroneSurvey => 'Drone survey completed - no findings';
|
||||
String get sampleMsgDroneSurvey => 'Drone taraması tamamlandı - bulgu yok';
|
||||
|
||||
@override
|
||||
String get sampleMsgTeamCharlie => 'Team requesting backup';
|
||||
String get sampleMsgTeamCharlie => 'Ekip takviye istiyor';
|
||||
|
||||
@override
|
||||
String get sampleMsgRadioDiscipline => 'All units: maintain radio discipline';
|
||||
String get sampleMsgRadioDiscipline =>
|
||||
'Tüm birimler: telsiz disiplinini koruyun';
|
||||
|
||||
@override
|
||||
String get sampleMsgUrgentMedical =>
|
||||
'URGENT: Medical assistance needed at sector 4';
|
||||
String get sampleMsgUrgentMedical => 'ACİL: sektör 4’te tıbbi yardım gerekli';
|
||||
|
||||
@override
|
||||
String get sampleMsgAdultMale => ' Adult male, conscious';
|
||||
String get sampleMsgAdultMale => ' Yetişkin erkek, bilinci açık';
|
||||
|
||||
@override
|
||||
String get sampleMsgFireSpotted => 'Fire spotted - coordinates incoming';
|
||||
String get sampleMsgFireSpotted => 'Yangın görüldü - koordinatlar geliyor';
|
||||
|
||||
@override
|
||||
String get sampleMsgSpreadingRapidly => ' Spreading rapidly!';
|
||||
String get sampleMsgSpreadingRapidly => ' Hızla yayılıyor!';
|
||||
|
||||
@override
|
||||
String get sampleMsgPriorityHelicopter => 'PRIORITY: Need helicopter support';
|
||||
String get sampleMsgPriorityHelicopter =>
|
||||
'ÖNCELİK: helikopter desteği gerekli';
|
||||
|
||||
@override
|
||||
String get sampleMsgMedicalTeamEnRoute =>
|
||||
'Medical team en route to your location';
|
||||
String get sampleMsgMedicalTeamEnRoute => 'Tıbbi ekip konumunuza geliyor';
|
||||
|
||||
@override
|
||||
String get sampleMsgEvacHelicopter => 'Evac helicopter ETA 10 minutes';
|
||||
String get sampleMsgEvacHelicopter => 'Tahliye helikopteri ETA 10 dakika';
|
||||
|
||||
@override
|
||||
String get sampleMsgEmergencyResolved => 'Emergency resolved - all clear';
|
||||
String get sampleMsgEmergencyResolved => 'Acil durum çözüldü - tehlike yok';
|
||||
|
||||
@override
|
||||
String get sampleMsgEmergencyStagingArea => ' Emergency staging area';
|
||||
String get sampleMsgEmergencyStagingArea => ' Acil durum toplanma alanı';
|
||||
|
||||
@override
|
||||
String get sampleMsgEmergencyServices =>
|
||||
'Emergency services notified and responding';
|
||||
'Acil servisler bilgilendirildi ve müdahale ediyor';
|
||||
|
||||
@override
|
||||
String get sampleAlphaTeamLead => 'Team Lead';
|
||||
String get sampleAlphaTeamLead => 'Ekip lideri';
|
||||
|
||||
@override
|
||||
String get sampleBravoScout => 'Scout';
|
||||
String get sampleBravoScout => 'Keşifçi';
|
||||
|
||||
@override
|
||||
String get sampleCharlieMedic => 'Medic';
|
||||
String get sampleCharlieMedic => 'Sağlık görevlisi';
|
||||
|
||||
@override
|
||||
String get sampleDeltaNavigator => 'Navigator';
|
||||
String get sampleDeltaNavigator => 'Navigatör';
|
||||
|
||||
@override
|
||||
String get sampleEchoSupport => 'Support';
|
||||
String get sampleEchoSupport => 'Destek';
|
||||
|
||||
@override
|
||||
String get sampleBaseCommand => 'Base Command';
|
||||
String get sampleBaseCommand => 'Üs komutası';
|
||||
|
||||
@override
|
||||
String get sampleFieldCoordinator => 'Field Coordinator';
|
||||
String get sampleFieldCoordinator => 'Saha koordinatörü';
|
||||
|
||||
@override
|
||||
String get sampleMedicalTeam => 'Medical Team';
|
||||
String get sampleMedicalTeam => 'Tıbbi ekip';
|
||||
|
||||
@override
|
||||
String get mapDrawing => 'Harita çizimi';
|
||||
|
||||
@override
|
||||
String get navigateToDrawing => 'Navigate to Drawing';
|
||||
String get navigateToDrawing => 'Çizime git';
|
||||
|
||||
@override
|
||||
String get copyCoordinates => 'Koordinatları kopyala';
|
||||
@@ -1363,7 +1368,7 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
String get longitudeLabel => 'Boylam';
|
||||
|
||||
@override
|
||||
String get exampleCoordinates => 'Example: 46.0569, 14.5058';
|
||||
String get exampleCoordinates => 'Örnek: 46.0569, 14.5058';
|
||||
|
||||
@override
|
||||
String get shareDrawing => 'Çizimi paylaş';
|
||||
@@ -1379,14 +1384,14 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get deleteDrawingConfirm =>
|
||||
'Are you sure you want to delete this drawing?';
|
||||
'Bu çizimi silmek istediğinizden emin misiniz?';
|
||||
|
||||
@override
|
||||
String get drawingDeleted => 'Çizim silindi';
|
||||
|
||||
@override
|
||||
String yourDrawingsCount(int count) {
|
||||
return 'Your Drawings ($count)';
|
||||
return 'Çizimleriniz ($count)';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -1414,43 +1419,43 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
String get updateLater => 'Daha sonra';
|
||||
|
||||
@override
|
||||
String get cadastralParcels => 'Cadastral Parcels';
|
||||
String get cadastralParcels => 'Kadastro parselleri';
|
||||
|
||||
@override
|
||||
String get forestRoads => 'Forest Roads';
|
||||
String get forestRoads => 'Orman yolları';
|
||||
|
||||
@override
|
||||
String get wmsOverlays => 'WMS Overlays';
|
||||
String get wmsOverlays => 'WMS katmanları';
|
||||
|
||||
@override
|
||||
String get hikingTrails => 'Hiking Trails';
|
||||
String get hikingTrails => 'Yürüyüş parkurları';
|
||||
|
||||
@override
|
||||
String get mainRoads => 'Main Roads';
|
||||
String get mainRoads => 'Ana yollar';
|
||||
|
||||
@override
|
||||
String get houseNumbers => 'House Numbers';
|
||||
String get houseNumbers => 'Kapı numaraları';
|
||||
|
||||
@override
|
||||
String get fireHazardZones => 'Fire Hazard Zones';
|
||||
String get fireHazardZones => 'Yangın tehlike bölgeleri';
|
||||
|
||||
@override
|
||||
String get historicalFires => 'Historical Fires';
|
||||
String get historicalFires => 'Geçmiş yangınlar';
|
||||
|
||||
@override
|
||||
String get firebreaks => 'Firebreaks';
|
||||
String get firebreaks => 'Yangın şeritleri';
|
||||
|
||||
@override
|
||||
String get krasFireZones => 'Kras Fire Zones';
|
||||
String get krasFireZones => 'Kras yangın bölgeleri';
|
||||
|
||||
@override
|
||||
String get placeNames => 'Place Names';
|
||||
String get placeNames => 'Yer adları';
|
||||
|
||||
@override
|
||||
String get municipalityBorders => 'Municipality Borders';
|
||||
String get municipalityBorders => 'Belediye sınırları';
|
||||
|
||||
@override
|
||||
String get topographicMap => 'Topographic Map 1:25000';
|
||||
String get topographicMap => 'Topoğrafik harita 1:25000';
|
||||
|
||||
@override
|
||||
String get recentMessages => 'Son mesajlar';
|
||||
@@ -1472,28 +1477,28 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get channelSecretHelp =>
|
||||
'This secret must be shared with all team members who need access to this channel';
|
||||
'Bu sır, bu kanala erişmesi gereken tüm ekip üyeleriyle paylaşılmalıdır';
|
||||
|
||||
@override
|
||||
String get channelTypesInfo =>
|
||||
'Hash channels (#team): Secret auto-generated from name. Same name = same channel across devices.\n\nPrivate channels: Use explicit secret. Only those with the secret can join.';
|
||||
'Hash kanallar (#team): sır, isimden otomatik üretilir. Aynı isim = tüm cihazlarda aynı kanal.\n\nÖzel kanallar: açık bir sır kullanın. Yalnızca sırrı bilenler katılabilir.';
|
||||
|
||||
@override
|
||||
String get hashChannelInfo =>
|
||||
'Hash channel: Secret will be auto-generated from the channel name. Anyone using the same name will join the same channel.';
|
||||
'Hash kanal: sır kanal adından otomatik üretilecektir. Aynı adı kullanan herkes aynı kanala katılır.';
|
||||
|
||||
@override
|
||||
String get channelNameRequired => 'Kanal adı gerekli';
|
||||
|
||||
@override
|
||||
String get channelNameTooLong => 'Channel name must be 31 characters or less';
|
||||
String get channelNameTooLong => 'Kanal adı en fazla 31 karakter olabilir';
|
||||
|
||||
@override
|
||||
String get channelSecretRequired => 'Kanal sırrı gerekli';
|
||||
|
||||
@override
|
||||
String get channelSecretTooLong =>
|
||||
'Channel secret must be 32 characters or less';
|
||||
'Kanal sırrı en fazla 32 karakter olabilir';
|
||||
|
||||
@override
|
||||
String get invalidAsciiCharacters =>
|
||||
@@ -1512,7 +1517,7 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String deleteChannelConfirmation(String channelName) {
|
||||
return 'Are you sure you want to delete channel \"$channelName\"? This action cannot be undone.';
|
||||
return '\"$channelName\" kanalını silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -1543,79 +1548,83 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get wizardWelcomeDescription =>
|
||||
'A powerful off-grid communication tool for search and rescue operations. Connect with your team using mesh radio technology when traditional networks are unavailable.';
|
||||
'Arama ve kurtarma operasyonları için güçlü bir şebeke dışı iletişim aracı. Geleneksel ağlar kullanılamadığında ekibinizle mesh radyo teknolojisi üzerinden bağlantı kurun.';
|
||||
|
||||
@override
|
||||
String get wizardConnectingTitle => 'Radyonuza bağlanma';
|
||||
|
||||
@override
|
||||
String get wizardConnectingDescription =>
|
||||
'Connect your smartphone to a MeshCore radio device via Bluetooth to start communicating off-grid.';
|
||||
'Şebeke dışı iletişime başlamak için akıllı telefonunuzu Bluetooth üzerinden bir MeshCore radyo cihazına bağlayın.';
|
||||
|
||||
@override
|
||||
String get wizardConnectingFeature1 => 'Scan for nearby MeshCore devices';
|
||||
String get wizardConnectingFeature1 =>
|
||||
'Yakındaki MeshCore cihazlarını tarayın';
|
||||
|
||||
@override
|
||||
String get wizardConnectingFeature2 => 'Pair with your radio via Bluetooth';
|
||||
String get wizardConnectingFeature2 =>
|
||||
'Radyonuzla Bluetooth üzerinden eşleşin';
|
||||
|
||||
@override
|
||||
String get wizardConnectingFeature3 =>
|
||||
'Works completely offline - no internet required';
|
||||
'Tamamen çevrimdışı çalışır - internet gerekmez';
|
||||
|
||||
@override
|
||||
String get wizardChannelTitle => 'Kanallar';
|
||||
|
||||
@override
|
||||
String get wizardChannelDescription =>
|
||||
'Broadcast messages to everyone on a channel, perfect for team-wide announcements and coordination.';
|
||||
'Bir kanaldaki herkese mesaj yayınlayın; ekip genelindeki duyurular ve koordinasyon için idealdir.';
|
||||
|
||||
@override
|
||||
String get wizardChannelFeature1 =>
|
||||
'Public Channel for general team communication';
|
||||
'Genel ekip iletişimi için herkese açık kanal';
|
||||
|
||||
@override
|
||||
String get wizardChannelFeature2 =>
|
||||
'Create custom channels for specific groups';
|
||||
'Belirli gruplar için özel kanallar oluşturun';
|
||||
|
||||
@override
|
||||
String get wizardChannelFeature3 =>
|
||||
'Messages are automatically relayed by the mesh';
|
||||
'Mesajlar mesh tarafından otomatik iletilir';
|
||||
|
||||
@override
|
||||
String get wizardContactsTitle => 'Kişiler';
|
||||
|
||||
@override
|
||||
String get wizardContactsDescription =>
|
||||
'Your team members appear automatically as they join the mesh network. Send them direct messages or view their location.';
|
||||
'Ekip üyeleriniz mesh ağına katıldıkça otomatik olarak görünür. Onlara doğrudan mesaj gönderin veya konumlarını görüntüleyin.';
|
||||
|
||||
@override
|
||||
String get wizardContactsFeature1 => 'Contacts discovered automatically';
|
||||
String get wizardContactsFeature1 => 'Kişiler otomatik bulunur';
|
||||
|
||||
@override
|
||||
String get wizardContactsFeature2 => 'Send private direct messages';
|
||||
String get wizardContactsFeature2 => 'Özel doğrudan mesaj gönderin';
|
||||
|
||||
@override
|
||||
String get wizardContactsFeature3 => 'View battery level and last seen time';
|
||||
String get wizardContactsFeature3 =>
|
||||
'Pil seviyesini ve son görülme zamanını görüntüleyin';
|
||||
|
||||
@override
|
||||
String get wizardMapTitle => 'Harita ve konum';
|
||||
|
||||
@override
|
||||
String get wizardMapDescription =>
|
||||
'Track your team in real-time and mark important locations for search and rescue operations.';
|
||||
'Ekibinizi gerçek zamanlı izleyin ve arama kurtarma operasyonları için önemli konumları işaretleyin.';
|
||||
|
||||
@override
|
||||
String get wizardMapFeature1 =>
|
||||
'SAR markers for found persons, fires, and staging areas';
|
||||
'Bulunan kişiler, yangınlar ve toplanma alanları için SAR işaretleri';
|
||||
|
||||
@override
|
||||
String get wizardMapFeature2 => 'Real-time GPS tracking of team members';
|
||||
String get wizardMapFeature2 => 'Ekip üyelerinin gerçek zamanlı GPS takibi';
|
||||
|
||||
@override
|
||||
String get wizardMapFeature3 => 'Download offline maps for remote areas';
|
||||
String get wizardMapFeature3 =>
|
||||
'Uzak bölgeler için çevrimdışı haritalar indirin';
|
||||
|
||||
@override
|
||||
String get wizardMapFeature4 => 'Draw shapes and share tactical information';
|
||||
String get wizardMapFeature4 => 'Şekiller çizin ve taktik bilgileri paylaşın';
|
||||
|
||||
@override
|
||||
String get viewWelcomeTutorial => 'Karşılama eğitimini görüntüle';
|
||||
@@ -1625,12 +1634,12 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String directMessagesInfo(int count) {
|
||||
return 'Direct messages with ACKs. Sent to $count team members.';
|
||||
return 'ACK’li doğrudan mesajlar. $count ekip üyesine gönderildi.';
|
||||
}
|
||||
|
||||
@override
|
||||
String sarMarkerSentToContacts(int count) {
|
||||
return 'SAR marker sent to $count contacts';
|
||||
return 'SAR işareti $count kişiye gönderildi';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -1643,72 +1652,72 @@ class AppLocalizationsTr extends AppLocalizations {
|
||||
String get technicalDetails => 'Teknik ayrıntılar';
|
||||
|
||||
@override
|
||||
String get messageTechnicalDetails => 'Message technical details';
|
||||
String get messageTechnicalDetails => 'Mesaj teknik ayrıntıları';
|
||||
|
||||
@override
|
||||
String get linkQuality => 'Link quality';
|
||||
String get linkQuality => 'Bağlantı kalitesi';
|
||||
|
||||
@override
|
||||
String get delivery => 'Delivery';
|
||||
String get delivery => 'Teslimat';
|
||||
|
||||
@override
|
||||
String get status => 'Durum';
|
||||
|
||||
@override
|
||||
String get expectedAckTag => 'Expected ACK tag';
|
||||
String get expectedAckTag => 'Beklenen ACK etiketi';
|
||||
|
||||
@override
|
||||
String get roundTrip => 'Round-trip';
|
||||
String get roundTrip => 'Gidiş dönüş';
|
||||
|
||||
@override
|
||||
String get retryAttempt => 'Retry attempt';
|
||||
String get retryAttempt => 'Yeniden deneme sayısı';
|
||||
|
||||
@override
|
||||
String get floodFallback => 'Flood fallback';
|
||||
String get floodFallback => 'Flood yedeği';
|
||||
|
||||
@override
|
||||
String get identity => 'Identity';
|
||||
String get identity => 'Kimlik';
|
||||
|
||||
@override
|
||||
String get messageId => 'Message ID';
|
||||
String get messageId => 'Mesaj kimliği';
|
||||
|
||||
@override
|
||||
String get sender => 'Sender';
|
||||
String get sender => 'Gönderen';
|
||||
|
||||
@override
|
||||
String get senderKey => 'Sender key';
|
||||
String get senderKey => 'Gönderen anahtarı';
|
||||
|
||||
@override
|
||||
String get recipient => 'Recipient';
|
||||
String get recipient => 'Alıcı';
|
||||
|
||||
@override
|
||||
String get recipientKey => 'Recipient key';
|
||||
String get recipientKey => 'Alıcı anahtarı';
|
||||
|
||||
@override
|
||||
String get voice => 'Ses';
|
||||
|
||||
@override
|
||||
String get voiceId => 'Voice ID';
|
||||
String get voiceId => 'Ses kimliği';
|
||||
|
||||
@override
|
||||
String get envelope => 'Envelope';
|
||||
String get envelope => 'Zarf';
|
||||
|
||||
@override
|
||||
String get sessionProgress => 'Session progress';
|
||||
String get sessionProgress => 'Oturum ilerlemesi';
|
||||
|
||||
@override
|
||||
String get complete => 'Tamamlandı';
|
||||
|
||||
@override
|
||||
String get rawDump => 'Raw dump';
|
||||
String get rawDump => 'Ham döküm';
|
||||
|
||||
@override
|
||||
String get cannotRetryMissingRecipient =>
|
||||
'Cannot retry: recipient information missing';
|
||||
'Yeniden denenemiyor: alıcı bilgisi eksik';
|
||||
|
||||
@override
|
||||
String get voiceUnavailable => 'Ses şu anda kullanılamıyor';
|
||||
|
||||
@override
|
||||
String get requestingVoice => 'Requesting voice';
|
||||
String get requestingVoice => 'Ses isteniyor';
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -177,19 +177,19 @@
|
||||
"@appName": {
|
||||
"description": "App name label"
|
||||
},
|
||||
"aboutMeshCoreSar": "About MeshCore SAR",
|
||||
"aboutMeshCoreSar": "Sobre o MeshCore SAR",
|
||||
"@aboutMeshCoreSar": {
|
||||
"description": "About dialog title"
|
||||
},
|
||||
"aboutDescription": "A Search & Rescue application designed for emergency response teams. Features include:\n\n• BLE mesh networking for device-to-device communication\n• Offline maps with multiple layer options\n• Real-time team member tracking\n• SAR tactical markers (found person, fire, staging)\n• Contact management and messaging\n• GPS tracking with compass heading\n• Map tile caching for offline use",
|
||||
"aboutDescription": "Um aplicativo de Busca e Resgate projetado para equipes de resposta a emergências. Os recursos incluem:\n\n• Rede mesh BLE para comunicação entre dispositivos\n• Mapas offline com múltiplas opções de camadas\n• Rastreamento em tempo real dos membros da equipe\n• Marcadores táticos SAR (pessoa encontrada, incêndio, área de apoio)\n• Gerenciamento de contatos e mensagens\n• Rastreamento GPS com rumo da bússola\n• Cache de blocos de mapa para uso offline",
|
||||
"@aboutDescription": {
|
||||
"description": "About dialog description"
|
||||
},
|
||||
"technologiesUsed": "Technologies Used:",
|
||||
"technologiesUsed": "Tecnologias utilizadas:",
|
||||
"@technologiesUsed": {
|
||||
"description": "Technologies used section title"
|
||||
},
|
||||
"technologiesList": "• Flutter for cross-platform development\n• BLE (Bluetooth Low Energy) for mesh networking\n• OpenStreetMap for mapping\n• Provider for state management\n• SharedPreferences for local storage",
|
||||
"technologiesList": "• Flutter para desenvolvimento multiplataforma\n• BLE (Bluetooth Low Energy) para rede mesh\n• OpenStreetMap para mapas\n• Provider para gerenciamento de estado\n• SharedPreferences para armazenamento local",
|
||||
"@technologiesList": {
|
||||
"description": "List of technologies used"
|
||||
},
|
||||
@@ -197,7 +197,7 @@
|
||||
"@moreInfo": {
|
||||
"description": "More info button label"
|
||||
},
|
||||
"packageName": "Package Name",
|
||||
"packageName": "Nome do pacote",
|
||||
"@packageName": {
|
||||
"description": "Package name label"
|
||||
},
|
||||
@@ -229,7 +229,7 @@
|
||||
"@clear": {
|
||||
"description": "Clear button label"
|
||||
},
|
||||
"loadedSampleData": "Loaded {teamCount} team members, {channelCount} channels, {sarCount} SAR markers, {messageCount} messages",
|
||||
"loadedSampleData": "Carregados {teamCount} membros da equipe, {channelCount} canais, {sarCount} marcadores SAR, {messageCount} mensagens",
|
||||
"@loadedSampleData": {
|
||||
"description": "Success message after loading sample data",
|
||||
"placeholders": {
|
||||
@@ -276,7 +276,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"defaultPinInfo": "The default pin for devices without a screen is 123456. Trouble pairing? Forget the bluetooth device in system settings.",
|
||||
"defaultPinInfo": "O PIN padrão para dispositivos sem tela é 123456. Problemas ao parear? Esqueça o dispositivo Bluetooth nas configurações do sistema.",
|
||||
"@defaultPinInfo": {
|
||||
"description": "Information about default PIN for pairing"
|
||||
},
|
||||
@@ -425,7 +425,7 @@
|
||||
"@longPressToStartMeasurement": {
|
||||
"description": "Instruction to start measurement"
|
||||
},
|
||||
"longPressToStartNewMeasurement": "Long press to start new measurement",
|
||||
"longPressToStartNewMeasurement": "Pressione e segure para iniciar uma nova medição",
|
||||
"@longPressToStartNewMeasurement": {
|
||||
"description": "Instruction to restart measurement after completion"
|
||||
},
|
||||
@@ -441,7 +441,7 @@
|
||||
"@completeLine": {
|
||||
"description": "Tooltip to complete drawing a line"
|
||||
},
|
||||
"broadcastDrawingsToTeam": "Broadcast {count} drawing{plural} to team",
|
||||
"broadcastDrawingsToTeam": "Transmitir {count} desenho{plural} para a equipe",
|
||||
"@broadcastDrawingsToTeam": {
|
||||
"description": "Subtitle showing how many drawings will be broadcast",
|
||||
"placeholders": {
|
||||
@@ -453,7 +453,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"removeAllDrawings": "Remove all {count} drawing{plural}",
|
||||
"removeAllDrawings": "Remover todos os {count} desenho{plural}",
|
||||
"@removeAllDrawings": {
|
||||
"description": "Subtitle for remove all drawings action",
|
||||
"placeholders": {
|
||||
@@ -465,7 +465,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"deleteAllDrawingsConfirm": "Delete all {count} drawing{plural} from the map?",
|
||||
"deleteAllDrawingsConfirm": "Excluir todos os {count} desenho{plural} do mapa?",
|
||||
"@deleteAllDrawingsConfirm": {
|
||||
"description": "Confirmation dialog message for deleting all drawings",
|
||||
"placeholders": {
|
||||
@@ -481,7 +481,7 @@
|
||||
"@drawing": {
|
||||
"description": "Generic drawing label"
|
||||
},
|
||||
"shareDrawingsCount": "Share {count} Drawing{plural}",
|
||||
"shareDrawingsCount": "Compartilhar {count} desenho{plural}",
|
||||
"@shareDrawingsCount": {
|
||||
"description": "Title for share drawings dialog",
|
||||
"placeholders": {
|
||||
@@ -561,11 +561,11 @@
|
||||
"@selectDestination": {
|
||||
"description": "Placeholder for destination dropdown"
|
||||
},
|
||||
"ephemeralBroadcastInfo": "Ephemeral: Broadcast over-the-air only. Not stored - nodes must be online.",
|
||||
"ephemeralBroadcastInfo": "Efêmero: transmitido apenas pelo ar. Não é armazenado; os nós precisam estar online.",
|
||||
"@ephemeralBroadcastInfo": {
|
||||
"description": "Information about ephemeral channel broadcasts"
|
||||
},
|
||||
"persistentRoomInfo": "Persistent: Stored immutably in room. Synced automatically and preserved offline.",
|
||||
"persistentRoomInfo": "Persistente: armazenado de forma imutável na sala. Sincronizado automaticamente e preservado offline.",
|
||||
"@persistentRoomInfo": {
|
||||
"description": "Information about persistent room storage"
|
||||
},
|
||||
@@ -610,7 +610,7 @@
|
||||
"@addAdditionalInformation": {
|
||||
"description": "Placeholder for notes field"
|
||||
},
|
||||
"lowAccuracyWarning": "Location accuracy is ±{accuracy}m. This may not be accurate enough for SAR operations.\n\nContinue anyway?",
|
||||
"lowAccuracyWarning": "A precisão da localização é ±{accuracy}m. Isso pode não ser preciso o suficiente para operações SAR.\n\nDeseja continuar mesmo assim?",
|
||||
"@lowAccuracyWarning": {
|
||||
"description": "Warning dialog content for low GPS accuracy",
|
||||
"placeholders": {
|
||||
@@ -623,7 +623,7 @@
|
||||
"@loginToRoom": {
|
||||
"description": "Title for room login dialog"
|
||||
},
|
||||
"enterPasswordInfo": "Enter the password to access this room. The password will be saved for future use.",
|
||||
"enterPasswordInfo": "Digite a senha para acessar esta sala. A senha será salva para uso futuro.",
|
||||
"@enterPasswordInfo": {
|
||||
"description": "Information about room password"
|
||||
},
|
||||
@@ -643,7 +643,7 @@
|
||||
"@login": {
|
||||
"description": "Login button label"
|
||||
},
|
||||
"failedToAddRoom": "Failed to add room to device: {error}\n\nThe room may not have advertised yet.\nTry waiting for the room to broadcast.",
|
||||
"failedToAddRoom": "Falha ao adicionar a sala ao dispositivo: {error}\n\nA sala talvez ainda não tenha sido anunciada.\nTente esperar a sala começar a transmitir.",
|
||||
"@failedToAddRoom": {
|
||||
"description": "Error message when adding room fails",
|
||||
"placeholders": {
|
||||
@@ -672,7 +672,7 @@
|
||||
"@distance": {
|
||||
"description": "Distance label"
|
||||
},
|
||||
"directPingTimeout": "Direct ping timeout - retrying {name} with flooding...",
|
||||
"directPingTimeout": "Tempo limite do ping direto - tentando novamente {name} com flooding...",
|
||||
"@directPingTimeout": {
|
||||
"description": "Warning when direct ping times out",
|
||||
"placeholders": {
|
||||
@@ -690,7 +690,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"deleteContactConfirmation": "Are you sure you want to delete \"{name}\"?\n\nThis will remove the contact from both the app and the companion radio device.",
|
||||
"deleteContactConfirmation": "Tem certeza de que deseja excluir \"{name}\"?\n\nIsso removerá o contato tanto do aplicativo quanto do dispositivo de rádio associado.",
|
||||
"@deleteContactConfirmation": {
|
||||
"description": "Confirmation message for deleting contact",
|
||||
"placeholders": {
|
||||
@@ -788,7 +788,7 @@
|
||||
"@updated": {
|
||||
"description": "Updated timestamp label"
|
||||
},
|
||||
"pathResetInfo": "Path reset for {name}. Next message will find a new route.",
|
||||
"pathResetInfo": "Rota redefinida para {name}. A próxima mensagem encontrará um novo caminho.",
|
||||
"@pathResetInfo": {
|
||||
"description": "Info message after path reset",
|
||||
"placeholders": {
|
||||
@@ -825,7 +825,7 @@
|
||||
"@filterMarkers": {
|
||||
"description": "Title for filter markers dialog"
|
||||
},
|
||||
"filterMarkersTooltip": "Filter markers",
|
||||
"filterMarkersTooltip": "Filtrar marcadores",
|
||||
"@filterMarkersTooltip": {
|
||||
"description": "Tooltip for filter button"
|
||||
},
|
||||
@@ -883,7 +883,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"latLonFormat": "Lat: {latitude} Lon: {longitude}",
|
||||
"latLonFormat": "Lat.: {latitude} Lon.: {longitude}",
|
||||
"@latLonFormat": {
|
||||
"description": "Latitude and longitude display format",
|
||||
"placeholders": {
|
||||
@@ -971,11 +971,11 @@
|
||||
"@textCopiedToClipboard": {
|
||||
"description": "Success message when text is copied"
|
||||
},
|
||||
"cannotReplySenderMissing": "Cannot reply: sender information missing",
|
||||
"cannotReplySenderMissing": "Não é possível responder: faltam informações do remetente",
|
||||
"@cannotReplySenderMissing": {
|
||||
"description": "Error when sender info is missing for reply"
|
||||
},
|
||||
"cannotReplyContactNotFound": "Cannot reply: contact not found",
|
||||
"cannotReplyContactNotFound": "Não é possível responder: contato não encontrado",
|
||||
"@cannotReplyContactNotFound": {
|
||||
"description": "Error when contact not found for reply"
|
||||
},
|
||||
@@ -983,15 +983,15 @@
|
||||
"@copyText": {
|
||||
"description": "Option to copy message text to clipboard"
|
||||
},
|
||||
"saveAsTemplate": "Save as Template",
|
||||
"saveAsTemplate": "Salvar como modelo",
|
||||
"@saveAsTemplate": {
|
||||
"description": "Option to save SAR message as a reusable template"
|
||||
},
|
||||
"templateSaved": "Template saved successfully",
|
||||
"templateSaved": "Modelo salvo com sucesso",
|
||||
"@templateSaved": {
|
||||
"description": "Success message when SAR template is saved"
|
||||
},
|
||||
"templateAlreadyExists": "Template with this emoji already exists",
|
||||
"templateAlreadyExists": "Já existe um modelo com este emoji",
|
||||
"@templateAlreadyExists": {
|
||||
"description": "Error message when trying to save duplicate template"
|
||||
},
|
||||
@@ -1007,7 +1007,7 @@
|
||||
"@shareLocation": {
|
||||
"description": "Option to share SAR marker location"
|
||||
},
|
||||
"shareLocationText": "{markerInfo}\n\nCoordinates: {lat}, {lon}\n\nGoogle Maps: {url}",
|
||||
"shareLocationText": "{markerInfo}\n\nCoordenadas: {lat}, {lon}\n\nGoogle Maps: {url}",
|
||||
"@shareLocationText": {
|
||||
"description": "Formatted text for sharing SAR marker location",
|
||||
"placeholders": {
|
||||
@@ -1098,7 +1098,7 @@
|
||||
"@broadcast": {
|
||||
"description": "Delivery status for channel messages (no echoes yet)"
|
||||
},
|
||||
"deliveredToContacts": "Delivered to {delivered}/{total} contacts",
|
||||
"deliveredToContacts": "Entregue a {delivered}/{total} contatos",
|
||||
"@deliveredToContacts": {
|
||||
"description": "Grouped message delivery count",
|
||||
"placeholders": {
|
||||
@@ -1110,11 +1110,11 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"allDelivered": "All delivered",
|
||||
"allDelivered": "Todos entregues",
|
||||
"@allDelivered": {
|
||||
"description": "Status when all recipients received the message"
|
||||
},
|
||||
"recipientDetails": "Recipient Details",
|
||||
"recipientDetails": "Detalhes do destinatário",
|
||||
"@recipientDetails": {
|
||||
"description": "Header for expandable recipient list"
|
||||
},
|
||||
@@ -1122,19 +1122,19 @@
|
||||
"@pending": {
|
||||
"description": "Delivery status: pending/waiting"
|
||||
},
|
||||
"sarMarkerFoundPerson": "Found Person",
|
||||
"sarMarkerFoundPerson": "Pessoa encontrada",
|
||||
"@sarMarkerFoundPerson": {
|
||||
"description": "SAR marker type: found person"
|
||||
},
|
||||
"sarMarkerFire": "Fire Location",
|
||||
"sarMarkerFire": "Local do incêndio",
|
||||
"@sarMarkerFire": {
|
||||
"description": "SAR marker type: fire"
|
||||
},
|
||||
"sarMarkerStagingArea": "Staging Area",
|
||||
"sarMarkerStagingArea": "Área de apoio",
|
||||
"@sarMarkerStagingArea": {
|
||||
"description": "SAR marker type: staging area"
|
||||
},
|
||||
"sarMarkerObject": "Object Found",
|
||||
"sarMarkerObject": "Objeto encontrado",
|
||||
"@sarMarkerObject": {
|
||||
"description": "SAR marker type: object"
|
||||
},
|
||||
@@ -1158,7 +1158,7 @@
|
||||
"@frequencyMHz": {
|
||||
"description": "Label for radio frequency field"
|
||||
},
|
||||
"frequencyExample": "e.g., 869.618",
|
||||
"frequencyExample": "ex.: 869.618",
|
||||
"@frequencyExample": {
|
||||
"description": "Helper text example for frequency"
|
||||
},
|
||||
@@ -1277,7 +1277,7 @@
|
||||
"@noContactsWithLocationHistory": {
|
||||
"description": "Subtitle when no contacts have trails"
|
||||
},
|
||||
"showingTrailsForContacts": "Showing trails for {count} contacts",
|
||||
"showingTrailsForContacts": "Mostrando trilhas de {count} contatos",
|
||||
"@showingTrailsForContacts": {
|
||||
"description": "Subtitle showing number of contacts with trails",
|
||||
"placeholders": {
|
||||
@@ -1346,11 +1346,11 @@
|
||||
"@telemetryAndLocationSharing": {
|
||||
"description": "Telemetry and location sharing toggle label"
|
||||
},
|
||||
"lat": "Lat",
|
||||
"lat": "Lat.",
|
||||
"@lat": {
|
||||
"description": "Latitude field label (short form)"
|
||||
},
|
||||
"lon": "Lon",
|
||||
"lon": "Lon.",
|
||||
"@lon": {
|
||||
"description": "Longitude field label (short form)"
|
||||
},
|
||||
@@ -1374,7 +1374,7 @@
|
||||
"@roomChannel": {
|
||||
"description": "Device type: room or channel"
|
||||
},
|
||||
"typeNumber": "Type {number}",
|
||||
"typeNumber": "Tipo {number}",
|
||||
"@typeNumber": {
|
||||
"description": "Generic device type with number",
|
||||
"placeholders": {
|
||||
@@ -1414,7 +1414,7 @@
|
||||
"@sarTemplates": {
|
||||
"description": "SAR templates menu title"
|
||||
},
|
||||
"manageSarTemplates": "Manage cursor on target templates",
|
||||
"manageSarTemplates": "Gerenciar modelos SAR",
|
||||
"@manageSarTemplates": {
|
||||
"description": "Subtitle for SAR templates settings"
|
||||
},
|
||||
@@ -1495,7 +1495,7 @@
|
||||
"@templateDeleted": {
|
||||
"description": "Success message when template is deleted"
|
||||
},
|
||||
"templatesImported": "{count, plural, =0{No templates imported} =1{Imported 1 template} other{Imported {count} templates}}",
|
||||
"templatesImported": "{count, plural, =0{Nenhum modelo importado} =1{1 modelo importado} other{{count} modelos importados}}",
|
||||
"@templatesImported": {
|
||||
"description": "Success message after importing templates",
|
||||
"placeholders": {
|
||||
@@ -1504,7 +1504,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"templatesExported": "{count, plural, =1{Exported 1 template to clipboard} other{Exported {count} templates to clipboard}}",
|
||||
"templatesExported": "{count, plural, =1{1 modelo exportado para a área de transferência} other{{count} modelos exportados para a área de transferência}}",
|
||||
"@templatesExported": {
|
||||
"description": "Success message after exporting templates",
|
||||
"placeholders": {
|
||||
@@ -1633,35 +1633,35 @@
|
||||
"@channel": {
|
||||
"description": "Channel label in notifications"
|
||||
},
|
||||
"samplePoliceLead": "Police Lead",
|
||||
"samplePoliceLead": "Chefe da polícia",
|
||||
"@samplePoliceLead": {
|
||||
"description": "Sample team member name"
|
||||
},
|
||||
"sampleDroneOperator": "Drone Operator",
|
||||
"sampleDroneOperator": "Operador de drone",
|
||||
"@sampleDroneOperator": {
|
||||
"description": "Sample team member name"
|
||||
},
|
||||
"sampleFirefighterAlpha": "Firefighter",
|
||||
"sampleFirefighterAlpha": "Bombeiro",
|
||||
"@sampleFirefighterAlpha": {
|
||||
"description": "Sample team member name"
|
||||
},
|
||||
"sampleMedicCharlie": "Medic",
|
||||
"sampleMedicCharlie": "Paramédico",
|
||||
"@sampleMedicCharlie": {
|
||||
"description": "Sample team member name"
|
||||
},
|
||||
"sampleCommandDelta": "Command",
|
||||
"sampleCommandDelta": "Comando",
|
||||
"@sampleCommandDelta": {
|
||||
"description": "Sample team member name"
|
||||
},
|
||||
"sampleFireEngine": "Fire Engine",
|
||||
"sampleFireEngine": "Caminhão de bombeiros",
|
||||
"@sampleFireEngine": {
|
||||
"description": "Sample team member name"
|
||||
},
|
||||
"sampleAirSupport": "Air Support",
|
||||
"sampleAirSupport": "Apoio aéreo",
|
||||
"@sampleAirSupport": {
|
||||
"description": "Sample team member name"
|
||||
},
|
||||
"sampleBaseCoordinator": "Base Coordinator",
|
||||
"sampleBaseCoordinator": "Coordenador da base",
|
||||
"@sampleBaseCoordinator": {
|
||||
"description": "Sample team member name"
|
||||
},
|
||||
@@ -1677,155 +1677,155 @@
|
||||
"@channelUpdates": {
|
||||
"description": "Updates channel name"
|
||||
},
|
||||
"sampleTeamMember": "Sample Team Member",
|
||||
"sampleTeamMember": "Membro de equipe de exemplo",
|
||||
"@sampleTeamMember": {
|
||||
"description": "Sample sender name"
|
||||
},
|
||||
"sampleScout": "Sample Scout",
|
||||
"sampleScout": "Batedor de exemplo",
|
||||
"@sampleScout": {
|
||||
"description": "Sample sender name"
|
||||
},
|
||||
"sampleBase": "Sample Base",
|
||||
"sampleBase": "Base de exemplo",
|
||||
"@sampleBase": {
|
||||
"description": "Sample sender name"
|
||||
},
|
||||
"sampleSearcher": "Sample Searcher",
|
||||
"sampleSearcher": "Buscador de exemplo",
|
||||
"@sampleSearcher": {
|
||||
"description": "Sample sender name"
|
||||
},
|
||||
"sampleObjectBackpack": " Backpack found - blue color",
|
||||
"sampleObjectBackpack": " Mochila encontrada - cor azul",
|
||||
"@sampleObjectBackpack": {
|
||||
"description": "Sample object note"
|
||||
},
|
||||
"sampleObjectVehicle": " Vehicle abandoned - check for owner",
|
||||
"sampleObjectVehicle": " Veículo abandonado - verificar proprietário",
|
||||
"@sampleObjectVehicle": {
|
||||
"description": "Sample object note"
|
||||
},
|
||||
"sampleObjectCamping": " Camping equipment discovered",
|
||||
"sampleObjectCamping": " Equipamento de camping encontrado",
|
||||
"@sampleObjectCamping": {
|
||||
"description": "Sample object note"
|
||||
},
|
||||
"sampleObjectTrailMarker": " Trail marker found off-path",
|
||||
"sampleObjectTrailMarker": " Marco de trilha encontrado fora da rota",
|
||||
"@sampleObjectTrailMarker": {
|
||||
"description": "Sample object note"
|
||||
},
|
||||
"sampleMsgAllTeamsCheckIn": "All teams check in",
|
||||
"sampleMsgAllTeamsCheckIn": "Todas as equipes, façam check-in",
|
||||
"@sampleMsgAllTeamsCheckIn": {
|
||||
"description": "Sample channel message"
|
||||
},
|
||||
"sampleMsgWeatherUpdate": "Weather update: Clear skies, temp 18°C",
|
||||
"sampleMsgWeatherUpdate": "Atualização do tempo: céu limpo, temp. 18°C",
|
||||
"@sampleMsgWeatherUpdate": {
|
||||
"description": "Sample channel message"
|
||||
},
|
||||
"sampleMsgBaseCamp": "Base camp established at staging area",
|
||||
"sampleMsgBaseCamp": "Base estabelecida na área de apoio",
|
||||
"@sampleMsgBaseCamp": {
|
||||
"description": "Sample channel message"
|
||||
},
|
||||
"sampleMsgTeamAlpha": "Team moving to sector 2",
|
||||
"sampleMsgTeamAlpha": "Equipe deslocando-se para o setor 2",
|
||||
"@sampleMsgTeamAlpha": {
|
||||
"description": "Sample channel message"
|
||||
},
|
||||
"sampleMsgRadioCheck": "Radio check - all stations respond",
|
||||
"sampleMsgRadioCheck": "Teste de rádio - todas as estações respondam",
|
||||
"@sampleMsgRadioCheck": {
|
||||
"description": "Sample channel message"
|
||||
},
|
||||
"sampleMsgWaterSupply": "Water supply available at checkpoint 3",
|
||||
"sampleMsgWaterSupply": "Abastecimento de água disponível no ponto de controle 3",
|
||||
"@sampleMsgWaterSupply": {
|
||||
"description": "Sample channel message"
|
||||
},
|
||||
"sampleMsgTeamBravo": "Team reporting: sector 1 clear",
|
||||
"sampleMsgTeamBravo": "Equipe informa: setor 1 livre",
|
||||
"@sampleMsgTeamBravo": {
|
||||
"description": "Sample channel message"
|
||||
},
|
||||
"sampleMsgEtaRallyPoint": "ETA to rally point: 15 minutes",
|
||||
"sampleMsgEtaRallyPoint": "ETA para o ponto de reunião: 15 minutos",
|
||||
"@sampleMsgEtaRallyPoint": {
|
||||
"description": "Sample channel message"
|
||||
},
|
||||
"sampleMsgSupplyDrop": "Supply drop confirmed for 14:00",
|
||||
"sampleMsgSupplyDrop": "Entrega de suprimentos confirmada para 14:00",
|
||||
"@sampleMsgSupplyDrop": {
|
||||
"description": "Sample channel message"
|
||||
},
|
||||
"sampleMsgDroneSurvey": "Drone survey completed - no findings",
|
||||
"sampleMsgDroneSurvey": "Levantamento com drone concluído - nada encontrado",
|
||||
"@sampleMsgDroneSurvey": {
|
||||
"description": "Sample channel message"
|
||||
},
|
||||
"sampleMsgTeamCharlie": "Team requesting backup",
|
||||
"sampleMsgTeamCharlie": "Equipe solicitando reforço",
|
||||
"@sampleMsgTeamCharlie": {
|
||||
"description": "Sample channel message"
|
||||
},
|
||||
"sampleMsgRadioDiscipline": "All units: maintain radio discipline",
|
||||
"sampleMsgRadioDiscipline": "Todas as unidades: mantenham disciplina de rádio",
|
||||
"@sampleMsgRadioDiscipline": {
|
||||
"description": "Sample channel message"
|
||||
},
|
||||
"sampleMsgUrgentMedical": "URGENT: Medical assistance needed at sector 4",
|
||||
"sampleMsgUrgentMedical": "URGENTE: assistência médica necessária no setor 4",
|
||||
"@sampleMsgUrgentMedical": {
|
||||
"description": "Sample emergency message"
|
||||
},
|
||||
"sampleMsgAdultMale": " Adult male, conscious",
|
||||
"sampleMsgAdultMale": " Homem adulto, consciente",
|
||||
"@sampleMsgAdultMale": {
|
||||
"description": "Sample emergency message note"
|
||||
},
|
||||
"sampleMsgFireSpotted": "Fire spotted - coordinates incoming",
|
||||
"sampleMsgFireSpotted": "Incêndio avistado - coordenadas a seguir",
|
||||
"@sampleMsgFireSpotted": {
|
||||
"description": "Sample emergency message"
|
||||
},
|
||||
"sampleMsgSpreadingRapidly": " Spreading rapidly!",
|
||||
"sampleMsgSpreadingRapidly": " Se espalhando rapidamente!",
|
||||
"@sampleMsgSpreadingRapidly": {
|
||||
"description": "Sample emergency message note"
|
||||
},
|
||||
"sampleMsgPriorityHelicopter": "PRIORITY: Need helicopter support",
|
||||
"sampleMsgPriorityHelicopter": "PRIORIDADE: necessidade de apoio de helicóptero",
|
||||
"@sampleMsgPriorityHelicopter": {
|
||||
"description": "Sample emergency message"
|
||||
},
|
||||
"sampleMsgMedicalTeamEnRoute": "Medical team en route to your location",
|
||||
"sampleMsgMedicalTeamEnRoute": "Equipe médica a caminho da sua localização",
|
||||
"@sampleMsgMedicalTeamEnRoute": {
|
||||
"description": "Sample emergency message"
|
||||
},
|
||||
"sampleMsgEvacHelicopter": "Evac helicopter ETA 10 minutes",
|
||||
"sampleMsgEvacHelicopter": "ETA do helicóptero de evacuação: 10 minutos",
|
||||
"@sampleMsgEvacHelicopter": {
|
||||
"description": "Sample emergency message"
|
||||
},
|
||||
"sampleMsgEmergencyResolved": "Emergency resolved - all clear",
|
||||
"sampleMsgEmergencyResolved": "Emergência resolvida - tudo limpo",
|
||||
"@sampleMsgEmergencyResolved": {
|
||||
"description": "Sample emergency message"
|
||||
},
|
||||
"sampleMsgEmergencyStagingArea": " Emergency staging area",
|
||||
"sampleMsgEmergencyStagingArea": " Área de apoio de emergência",
|
||||
"@sampleMsgEmergencyStagingArea": {
|
||||
"description": "Sample emergency message note"
|
||||
},
|
||||
"sampleMsgEmergencyServices": "Emergency services notified and responding",
|
||||
"sampleMsgEmergencyServices": "Serviços de emergência notificados e em deslocamento",
|
||||
"@sampleMsgEmergencyServices": {
|
||||
"description": "Sample emergency message"
|
||||
},
|
||||
"sampleAlphaTeamLead": "Team Lead",
|
||||
"sampleAlphaTeamLead": "Líder da equipe",
|
||||
"@sampleAlphaTeamLead": {
|
||||
"description": "Sample team name"
|
||||
},
|
||||
"sampleBravoScout": "Scout",
|
||||
"sampleBravoScout": "Batedor",
|
||||
"@sampleBravoScout": {
|
||||
"description": "Sample team name"
|
||||
},
|
||||
"sampleCharlieMedic": "Medic",
|
||||
"sampleCharlieMedic": "Paramédico",
|
||||
"@sampleCharlieMedic": {
|
||||
"description": "Sample team name"
|
||||
},
|
||||
"sampleDeltaNavigator": "Navigator",
|
||||
"sampleDeltaNavigator": "Navegador",
|
||||
"@sampleDeltaNavigator": {
|
||||
"description": "Sample team name"
|
||||
},
|
||||
"sampleEchoSupport": "Support",
|
||||
"sampleEchoSupport": "Apoio",
|
||||
"@sampleEchoSupport": {
|
||||
"description": "Sample team name"
|
||||
},
|
||||
"sampleBaseCommand": "Base Command",
|
||||
"sampleBaseCommand": "Comando da base",
|
||||
"@sampleBaseCommand": {
|
||||
"description": "Sample team name"
|
||||
},
|
||||
"sampleFieldCoordinator": "Field Coordinator",
|
||||
"sampleFieldCoordinator": "Coordenador de campo",
|
||||
"@sampleFieldCoordinator": {
|
||||
"description": "Sample team name"
|
||||
},
|
||||
"sampleMedicalTeam": "Medical Team",
|
||||
"sampleMedicalTeam": "Equipe médica",
|
||||
"@sampleMedicalTeam": {
|
||||
"description": "Sample team name"
|
||||
},
|
||||
@@ -1833,7 +1833,7 @@
|
||||
"@mapDrawing": {
|
||||
"description": "Label for map drawing messages"
|
||||
},
|
||||
"navigateToDrawing": "Navigate to Drawing",
|
||||
"navigateToDrawing": "Navegar até o desenho",
|
||||
"@navigateToDrawing": {
|
||||
"description": "Option to navigate to drawing on map"
|
||||
},
|
||||
@@ -1869,7 +1869,7 @@
|
||||
"@longitudeLabel": {
|
||||
"description": "Label for longitude input field"
|
||||
},
|
||||
"exampleCoordinates": "Example: 46.0569, 14.5058",
|
||||
"exampleCoordinates": "Exemplo: 46.0569, 14.5058",
|
||||
"@exampleCoordinates": {
|
||||
"description": "Example coordinate format hint"
|
||||
},
|
||||
@@ -1897,7 +1897,7 @@
|
||||
"@drawingDeleted": {
|
||||
"description": "Success message after deleting a drawing"
|
||||
},
|
||||
"yourDrawingsCount": "Your Drawings ({count})",
|
||||
"yourDrawingsCount": "Seus desenhos ({count})",
|
||||
"@yourDrawingsCount": {
|
||||
"description": "Header showing count of user's drawings",
|
||||
"placeholders": {
|
||||
@@ -1938,55 +1938,55 @@
|
||||
"@updateLater": {
|
||||
"description": "Button to dismiss update dialog"
|
||||
},
|
||||
"cadastralParcels": "Cadastral Parcels",
|
||||
"cadastralParcels": "Parcelas cadastrais",
|
||||
"@cadastralParcels": {
|
||||
"description": "Label for cadastral parcels WMS overlay layer"
|
||||
},
|
||||
"forestRoads": "Forest Roads",
|
||||
"forestRoads": "Estradas florestais",
|
||||
"@forestRoads": {
|
||||
"description": "Label for forest roads WMS overlay layer"
|
||||
},
|
||||
"wmsOverlays": "WMS Overlays",
|
||||
"wmsOverlays": "Sobreposições WMS",
|
||||
"@wmsOverlays": {
|
||||
"description": "Section header for WMS overlay layers in layer selector"
|
||||
},
|
||||
"hikingTrails": "Hiking Trails",
|
||||
"hikingTrails": "Trilhas de caminhada",
|
||||
"@hikingTrails": {
|
||||
"description": "Label for hiking/mountain trails WMS overlay layer"
|
||||
},
|
||||
"mainRoads": "Main Roads",
|
||||
"mainRoads": "Estradas principais",
|
||||
"@mainRoads": {
|
||||
"description": "Label for main roads WMS overlay layer"
|
||||
},
|
||||
"houseNumbers": "House Numbers",
|
||||
"houseNumbers": "Números de porta",
|
||||
"@houseNumbers": {
|
||||
"description": "Label for house numbers WMS overlay layer"
|
||||
},
|
||||
"fireHazardZones": "Fire Hazard Zones",
|
||||
"fireHazardZones": "Zonas de risco de incêndio",
|
||||
"@fireHazardZones": {
|
||||
"description": "Label for fire hazard risk zones WMS overlay layer"
|
||||
},
|
||||
"historicalFires": "Historical Fires",
|
||||
"historicalFires": "Incêndios históricos",
|
||||
"@historicalFires": {
|
||||
"description": "Label for historical forest fires WMS overlay layer"
|
||||
},
|
||||
"firebreaks": "Firebreaks",
|
||||
"firebreaks": "Aceiros",
|
||||
"@firebreaks": {
|
||||
"description": "Label for firebreaks WMS overlay layer"
|
||||
},
|
||||
"krasFireZones": "Kras Fire Zones",
|
||||
"krasFireZones": "Zonas de incêndio do Karst",
|
||||
"@krasFireZones": {
|
||||
"description": "Label for Kras fire zones WMS overlay layer"
|
||||
},
|
||||
"placeNames": "Place Names",
|
||||
"placeNames": "Topônimos",
|
||||
"@placeNames": {
|
||||
"description": "Label for geographic place names WMS overlay layer"
|
||||
},
|
||||
"municipalityBorders": "Municipality Borders",
|
||||
"municipalityBorders": "Limites municipais",
|
||||
"@municipalityBorders": {
|
||||
"description": "Label for municipality borders WMS overlay layer"
|
||||
},
|
||||
"topographicMap": "Topographic Map 1:25000",
|
||||
"topographicMap": "Mapa topográfico 1:25000",
|
||||
"@topographicMap": {
|
||||
"description": "Label for DTK25 topographic base map layer"
|
||||
},
|
||||
@@ -2014,15 +2014,15 @@
|
||||
"@channelSecretHint": {
|
||||
"description": "Hint for channel secret field"
|
||||
},
|
||||
"channelSecretHelp": "This secret must be shared with all team members who need access to this channel",
|
||||
"channelSecretHelp": "Este segredo deve ser compartilhado com todos os membros da equipe que precisam de acesso a este canal",
|
||||
"@channelSecretHelp": {
|
||||
"description": "Help text explaining channel secret"
|
||||
},
|
||||
"channelTypesInfo": "Hash channels (#team): Secret auto-generated from name. Same name = same channel across devices.\n\nPrivate channels: Use explicit secret. Only those with the secret can join.",
|
||||
"channelTypesInfo": "Canais hash (#team): o segredo é gerado automaticamente a partir do nome. Mesmo nome = mesmo canal em todos os dispositivos.\n\nCanais privados: use um segredo explícito. Somente quem tiver o segredo poderá entrar.",
|
||||
"@channelTypesInfo": {
|
||||
"description": "Information banner explaining hash and private channel types"
|
||||
},
|
||||
"hashChannelInfo": "Hash channel: Secret will be auto-generated from the channel name. Anyone using the same name will join the same channel.",
|
||||
"hashChannelInfo": "Canal hash: o segredo será gerado automaticamente a partir do nome do canal. Qualquer pessoa usando o mesmo nome entrará no mesmo canal.",
|
||||
"@hashChannelInfo": {
|
||||
"description": "Help text for hash channels (# prefix)"
|
||||
},
|
||||
@@ -2030,7 +2030,7 @@
|
||||
"@channelNameRequired": {
|
||||
"description": "Validation error for empty channel name"
|
||||
},
|
||||
"channelNameTooLong": "Channel name must be 31 characters or less",
|
||||
"channelNameTooLong": "O nome do canal deve ter no máximo 31 caracteres",
|
||||
"@channelNameTooLong": {
|
||||
"description": "Validation error for channel name too long"
|
||||
},
|
||||
@@ -2038,7 +2038,7 @@
|
||||
"@channelSecretRequired": {
|
||||
"description": "Validation error for empty channel secret"
|
||||
},
|
||||
"channelSecretTooLong": "Channel secret must be 32 characters or less",
|
||||
"channelSecretTooLong": "O segredo do canal deve ter no máximo 32 caracteres",
|
||||
"@channelSecretTooLong": {
|
||||
"description": "Validation error for channel secret too long"
|
||||
},
|
||||
@@ -2063,7 +2063,7 @@
|
||||
"@deleteChannel": {
|
||||
"description": "Delete channel button/menu item"
|
||||
},
|
||||
"deleteChannelConfirmation": "Are you sure you want to delete channel \"{channelName}\"? This action cannot be undone.",
|
||||
"deleteChannelConfirmation": "Tem certeza de que deseja excluir o canal \"{channelName}\"? Esta ação não pode ser desfeita.",
|
||||
"@deleteChannelConfirmation": {
|
||||
"description": "Confirmation dialog when deleting a channel",
|
||||
"placeholders": {
|
||||
@@ -2109,7 +2109,7 @@
|
||||
"@wizardWelcomeTitle": {
|
||||
"description": "Welcome wizard first page title"
|
||||
},
|
||||
"wizardWelcomeDescription": "A powerful off-grid communication tool for search and rescue operations. Connect with your team using mesh radio technology when traditional networks are unavailable.",
|
||||
"wizardWelcomeDescription": "Uma poderosa ferramenta de comunicação off-grid para operações de busca e resgate. Conecte-se com sua equipe usando tecnologia de rádio mesh quando as redes tradicionais não estiverem disponíveis.",
|
||||
"@wizardWelcomeDescription": {
|
||||
"description": "Welcome wizard first page description"
|
||||
},
|
||||
@@ -2117,19 +2117,19 @@
|
||||
"@wizardConnectingTitle": {
|
||||
"description": "Wizard connecting page title"
|
||||
},
|
||||
"wizardConnectingDescription": "Connect your smartphone to a MeshCore radio device via Bluetooth to start communicating off-grid.",
|
||||
"wizardConnectingDescription": "Conecte seu smartphone a um dispositivo de rádio MeshCore via Bluetooth para começar a se comunicar off-grid.",
|
||||
"@wizardConnectingDescription": {
|
||||
"description": "Wizard connecting page description"
|
||||
},
|
||||
"wizardConnectingFeature1": "Scan for nearby MeshCore devices",
|
||||
"wizardConnectingFeature1": "Procure dispositivos MeshCore próximos",
|
||||
"@wizardConnectingFeature1": {
|
||||
"description": "Wizard connecting feature 1"
|
||||
},
|
||||
"wizardConnectingFeature2": "Pair with your radio via Bluetooth",
|
||||
"wizardConnectingFeature2": "Emparelhe com seu rádio via Bluetooth",
|
||||
"@wizardConnectingFeature2": {
|
||||
"description": "Wizard connecting feature 2"
|
||||
},
|
||||
"wizardConnectingFeature3": "Works completely offline - no internet required",
|
||||
"wizardConnectingFeature3": "Funciona totalmente offline - internet não é necessária",
|
||||
"@wizardConnectingFeature3": {
|
||||
"description": "Wizard connecting feature 3"
|
||||
},
|
||||
@@ -2137,19 +2137,19 @@
|
||||
"@wizardChannelTitle": {
|
||||
"description": "Wizard channel page title"
|
||||
},
|
||||
"wizardChannelDescription": "Broadcast messages to everyone on a channel, perfect for team-wide announcements and coordination.",
|
||||
"wizardChannelDescription": "Transmita mensagens para todos em um canal, ideal para anúncios e coordenação de toda a equipe.",
|
||||
"@wizardChannelDescription": {
|
||||
"description": "Wizard channel page description"
|
||||
},
|
||||
"wizardChannelFeature1": "Public Channel for general team communication",
|
||||
"wizardChannelFeature1": "Canal público para comunicação geral da equipe",
|
||||
"@wizardChannelFeature1": {
|
||||
"description": "Wizard channel feature 1"
|
||||
},
|
||||
"wizardChannelFeature2": "Create custom channels for specific groups",
|
||||
"wizardChannelFeature2": "Crie canais personalizados para grupos específicos",
|
||||
"@wizardChannelFeature2": {
|
||||
"description": "Wizard channel feature 2"
|
||||
},
|
||||
"wizardChannelFeature3": "Messages are automatically relayed by the mesh",
|
||||
"wizardChannelFeature3": "As mensagens são retransmitidas automaticamente pela malha",
|
||||
"@wizardChannelFeature3": {
|
||||
"description": "Wizard channel feature 3"
|
||||
},
|
||||
@@ -2157,19 +2157,19 @@
|
||||
"@wizardContactsTitle": {
|
||||
"description": "Wizard contacts page title"
|
||||
},
|
||||
"wizardContactsDescription": "Your team members appear automatically as they join the mesh network. Send them direct messages or view their location.",
|
||||
"wizardContactsDescription": "Os membros da sua equipe aparecem automaticamente à medida que entram na rede mesh. Envie mensagens diretas ou veja a localização deles.",
|
||||
"@wizardContactsDescription": {
|
||||
"description": "Wizard contacts page description"
|
||||
},
|
||||
"wizardContactsFeature1": "Contacts discovered automatically",
|
||||
"wizardContactsFeature1": "Contatos descobertos automaticamente",
|
||||
"@wizardContactsFeature1": {
|
||||
"description": "Wizard contacts feature 1"
|
||||
},
|
||||
"wizardContactsFeature2": "Send private direct messages",
|
||||
"wizardContactsFeature2": "Envie mensagens diretas privadas",
|
||||
"@wizardContactsFeature2": {
|
||||
"description": "Wizard contacts feature 2"
|
||||
},
|
||||
"wizardContactsFeature3": "View battery level and last seen time",
|
||||
"wizardContactsFeature3": "Veja o nível de bateria e o horário da última visualização",
|
||||
"@wizardContactsFeature3": {
|
||||
"description": "Wizard contacts feature 3"
|
||||
},
|
||||
@@ -2177,23 +2177,23 @@
|
||||
"@wizardMapTitle": {
|
||||
"description": "Wizard map page title"
|
||||
},
|
||||
"wizardMapDescription": "Track your team in real-time and mark important locations for search and rescue operations.",
|
||||
"wizardMapDescription": "Acompanhe sua equipe em tempo real e marque locais importantes para operações de busca e resgate.",
|
||||
"@wizardMapDescription": {
|
||||
"description": "Wizard map page description"
|
||||
},
|
||||
"wizardMapFeature1": "SAR markers for found persons, fires, and staging areas",
|
||||
"wizardMapFeature1": "Marcadores SAR para pessoas encontradas, incêndios e áreas de apoio",
|
||||
"@wizardMapFeature1": {
|
||||
"description": "Wizard map feature 1"
|
||||
},
|
||||
"wizardMapFeature2": "Real-time GPS tracking of team members",
|
||||
"wizardMapFeature2": "Rastreamento GPS em tempo real dos membros da equipe",
|
||||
"@wizardMapFeature2": {
|
||||
"description": "Wizard map feature 2"
|
||||
},
|
||||
"wizardMapFeature3": "Download offline maps for remote areas",
|
||||
"wizardMapFeature3": "Baixe mapas offline para áreas remotas",
|
||||
"@wizardMapFeature3": {
|
||||
"description": "Wizard map feature 3"
|
||||
},
|
||||
"wizardMapFeature4": "Draw shapes and share tactical information",
|
||||
"wizardMapFeature4": "Desenhe formas e compartilhe informações táticas",
|
||||
"@wizardMapFeature4": {
|
||||
"description": "Wizard map feature 4"
|
||||
},
|
||||
@@ -2205,7 +2205,7 @@
|
||||
"@allTeamContacts": {
|
||||
"description": "Destination option to send SAR marker to all team contacts"
|
||||
},
|
||||
"directMessagesInfo": "Direct messages with ACKs. Sent to {count} team members.",
|
||||
"directMessagesInfo": "Mensagens diretas com ACKs. Enviadas para {count} membros da equipe.",
|
||||
"@directMessagesInfo": {
|
||||
"description": "Information about sending to all contacts",
|
||||
"placeholders": {
|
||||
@@ -2214,7 +2214,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"sarMarkerSentToContacts": "SAR marker sent to {count} contacts",
|
||||
"sarMarkerSentToContacts": "Marcador SAR enviado para {count} contatos",
|
||||
"@sarMarkerSentToContacts": {
|
||||
"description": "Success message after sending SAR marker to all contacts",
|
||||
"placeholders": {
|
||||
@@ -2231,50 +2231,50 @@
|
||||
"@reply": {},
|
||||
"technicalDetails": "Detalhes técnicos",
|
||||
"@technicalDetails": {},
|
||||
"messageTechnicalDetails": "Message technical details",
|
||||
"messageTechnicalDetails": "Detalhes técnicos da mensagem",
|
||||
"@messageTechnicalDetails": {},
|
||||
"linkQuality": "Link quality",
|
||||
"linkQuality": "Qualidade do link",
|
||||
"@linkQuality": {},
|
||||
"delivery": "Delivery",
|
||||
"delivery": "Entrega",
|
||||
"@delivery": {},
|
||||
"status": "Status",
|
||||
"@status": {},
|
||||
"expectedAckTag": "Expected ACK tag",
|
||||
"expectedAckTag": "Tag ACK esperada",
|
||||
"@expectedAckTag": {},
|
||||
"roundTrip": "Round-trip",
|
||||
"roundTrip": "Ida e volta",
|
||||
"@roundTrip": {},
|
||||
"retryAttempt": "Retry attempt",
|
||||
"retryAttempt": "Tentativa de repetição",
|
||||
"@retryAttempt": {},
|
||||
"floodFallback": "Flood fallback",
|
||||
"floodFallback": "Fallback de flooding",
|
||||
"@floodFallback": {},
|
||||
"identity": "Identity",
|
||||
"identity": "Identidade",
|
||||
"@identity": {},
|
||||
"messageId": "Message ID",
|
||||
"messageId": "ID da mensagem",
|
||||
"@messageId": {},
|
||||
"sender": "Sender",
|
||||
"sender": "Remetente",
|
||||
"@sender": {},
|
||||
"senderKey": "Sender key",
|
||||
"senderKey": "Chave do remetente",
|
||||
"@senderKey": {},
|
||||
"recipient": "Recipient",
|
||||
"recipient": "Destinatário",
|
||||
"@recipient": {},
|
||||
"recipientKey": "Recipient key",
|
||||
"recipientKey": "Chave do destinatário",
|
||||
"@recipientKey": {},
|
||||
"voice": "Voz",
|
||||
"@voice": {},
|
||||
"voiceId": "Voice ID",
|
||||
"voiceId": "ID de voz",
|
||||
"@voiceId": {},
|
||||
"envelope": "Envelope",
|
||||
"@envelope": {},
|
||||
"sessionProgress": "Session progress",
|
||||
"sessionProgress": "Progresso da sessão",
|
||||
"@sessionProgress": {},
|
||||
"complete": "Concluído",
|
||||
"@complete": {},
|
||||
"rawDump": "Raw dump",
|
||||
"rawDump": "Dump bruto",
|
||||
"@rawDump": {},
|
||||
"cannotRetryMissingRecipient": "Cannot retry: recipient information missing",
|
||||
"cannotRetryMissingRecipient": "Não é possível repetir: faltam informações do destinatário",
|
||||
"@cannotRetryMissingRecipient": {},
|
||||
"voiceUnavailable": "A voz não está disponível no momento",
|
||||
"@voiceUnavailable": {},
|
||||
"requestingVoice": "Requesting voice",
|
||||
"requestingVoice": "Solicitando voz",
|
||||
"@requestingVoice": {}
|
||||
}
|
||||
|
||||
@@ -177,19 +177,19 @@
|
||||
"@appName": {
|
||||
"description": "App name label"
|
||||
},
|
||||
"aboutMeshCoreSar": "About MeshCore SAR",
|
||||
"aboutMeshCoreSar": "MeshCore SAR hakkında",
|
||||
"@aboutMeshCoreSar": {
|
||||
"description": "About dialog title"
|
||||
},
|
||||
"aboutDescription": "A Search & Rescue application designed for emergency response teams. Features include:\n\n• BLE mesh networking for device-to-device communication\n• Offline maps with multiple layer options\n• Real-time team member tracking\n• SAR tactical markers (found person, fire, staging)\n• Contact management and messaging\n• GPS tracking with compass heading\n• Map tile caching for offline use",
|
||||
"aboutDescription": "Acil durum müdahale ekipleri için tasarlanmış bir Arama ve Kurtarma uygulaması. Özellikler:\n\n• Cihazdan cihaza iletişim için BLE mesh ağı\n• Birden çok katman seçeneğiyle çevrimdışı haritalar\n• Ekip üyelerinin gerçek zamanlı takibi\n• SAR taktik işaretleri (bulunan kişi, yangın, toplanma alanı)\n• Kişi yönetimi ve mesajlaşma\n• Pusula yönüyle GPS takibi\n• Çevrimdışı kullanım için harita karo önbelleği",
|
||||
"@aboutDescription": {
|
||||
"description": "About dialog description"
|
||||
},
|
||||
"technologiesUsed": "Technologies Used:",
|
||||
"technologiesUsed": "Kullanılan teknolojiler:",
|
||||
"@technologiesUsed": {
|
||||
"description": "Technologies used section title"
|
||||
},
|
||||
"technologiesList": "• Flutter for cross-platform development\n• BLE (Bluetooth Low Energy) for mesh networking\n• OpenStreetMap for mapping\n• Provider for state management\n• SharedPreferences for local storage",
|
||||
"technologiesList": "• Çok platformlu geliştirme için Flutter\n• Mesh ağı için BLE (Bluetooth Low Energy)\n• Haritalama için OpenStreetMap\n• Durum yönetimi için Provider\n• Yerel depolama için SharedPreferences",
|
||||
"@technologiesList": {
|
||||
"description": "List of technologies used"
|
||||
},
|
||||
@@ -197,7 +197,7 @@
|
||||
"@moreInfo": {
|
||||
"description": "More info button label"
|
||||
},
|
||||
"packageName": "Package Name",
|
||||
"packageName": "Paket adı",
|
||||
"@packageName": {
|
||||
"description": "Package name label"
|
||||
},
|
||||
@@ -205,7 +205,7 @@
|
||||
"@sampleData": {
|
||||
"description": "Sample data section header"
|
||||
},
|
||||
"sampleDataDescription": "Load or clear sample contacts, channel messages, and SAR markers for testing",
|
||||
"sampleDataDescription": "Test için örnek kişiler, kanal mesajları ve SAR işaretleri yükleyin veya temizleyin",
|
||||
"@sampleDataDescription": {
|
||||
"description": "Sample data section description"
|
||||
},
|
||||
@@ -229,7 +229,7 @@
|
||||
"@clear": {
|
||||
"description": "Clear button label"
|
||||
},
|
||||
"loadedSampleData": "Loaded {teamCount} team members, {channelCount} channels, {sarCount} SAR markers, {messageCount} messages",
|
||||
"loadedSampleData": "{teamCount} ekip üyesi, {channelCount} kanal, {sarCount} SAR işareti, {messageCount} mesaj yüklendi",
|
||||
"@loadedSampleData": {
|
||||
"description": "Success message after loading sample data",
|
||||
"placeholders": {
|
||||
@@ -260,11 +260,11 @@
|
||||
"@allDataCleared": {
|
||||
"description": "Success message after clearing all data"
|
||||
},
|
||||
"failedToStartBackgroundTracking": "Failed to start background tracking. Check permissions and BLE connection.",
|
||||
"failedToStartBackgroundTracking": "Arka plan takibi başlatılamadı. İzinleri ve BLE bağlantısını kontrol edin.",
|
||||
"@failedToStartBackgroundTracking": {
|
||||
"description": "Error message when background tracking fails to start"
|
||||
},
|
||||
"locationBroadcast": "Location broadcast: {latitude}, {longitude}",
|
||||
"locationBroadcast": "Konum yayını: {latitude}, {longitude}",
|
||||
"@locationBroadcast": {
|
||||
"description": "Success message for location broadcast",
|
||||
"placeholders": {
|
||||
@@ -276,7 +276,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"defaultPinInfo": "The default pin for devices without a screen is 123456. Trouble pairing? Forget the bluetooth device in system settings.",
|
||||
"defaultPinInfo": "Ekranı olmayan cihazlar için varsayılan PIN 123456’dır. Eşleştirme sorunu mu yaşıyorsunuz? Sistem ayarlarından Bluetooth cihazını unutun.",
|
||||
"@defaultPinInfo": {
|
||||
"description": "Information about default PIN for pairing"
|
||||
},
|
||||
@@ -304,7 +304,7 @@
|
||||
"@refresh": {
|
||||
"description": "Refresh button label"
|
||||
},
|
||||
"resetPath": "Reset Path (Re-route)",
|
||||
"resetPath": "Yolu sıfırla (yeniden yönlendir)",
|
||||
"@resetPath": {
|
||||
"description": "Action to reset contact path for re-routing"
|
||||
},
|
||||
@@ -417,15 +417,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"longPressForSecondPoint": "Long press for second point",
|
||||
"longPressForSecondPoint": "İkinci nokta için uzun basın",
|
||||
"@longPressForSecondPoint": {
|
||||
"description": "Instruction when first measurement point is set"
|
||||
},
|
||||
"longPressToStartMeasurement": "Long press to set first point",
|
||||
"longPressToStartMeasurement": "İlk noktayı ayarlamak için uzun basın",
|
||||
"@longPressToStartMeasurement": {
|
||||
"description": "Instruction to start measurement"
|
||||
},
|
||||
"longPressToStartNewMeasurement": "Long press to start new measurement",
|
||||
"longPressToStartNewMeasurement": "Yeni ölçüm başlatmak için uzun basın",
|
||||
"@longPressToStartNewMeasurement": {
|
||||
"description": "Instruction to restart measurement after completion"
|
||||
},
|
||||
@@ -437,11 +437,11 @@
|
||||
"@clearAllDrawings": {
|
||||
"description": "Action to clear all local drawings"
|
||||
},
|
||||
"completeLine": "Complete Line",
|
||||
"completeLine": "Çizgiyi tamamla",
|
||||
"@completeLine": {
|
||||
"description": "Tooltip to complete drawing a line"
|
||||
},
|
||||
"broadcastDrawingsToTeam": "Broadcast {count} drawing{plural} to team",
|
||||
"broadcastDrawingsToTeam": "{count} çizim{plural} ekibe yayınla",
|
||||
"@broadcastDrawingsToTeam": {
|
||||
"description": "Subtitle showing how many drawings will be broadcast",
|
||||
"placeholders": {
|
||||
@@ -453,7 +453,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"removeAllDrawings": "Remove all {count} drawing{plural}",
|
||||
"removeAllDrawings": "Tüm {count} çizim{plural} kaldır",
|
||||
"@removeAllDrawings": {
|
||||
"description": "Subtitle for remove all drawings action",
|
||||
"placeholders": {
|
||||
@@ -465,7 +465,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"deleteAllDrawingsConfirm": "Delete all {count} drawing{plural} from the map?",
|
||||
"deleteAllDrawingsConfirm": "Haritadaki tüm {count} çizim{plural} silinsin mi?",
|
||||
"@deleteAllDrawingsConfirm": {
|
||||
"description": "Confirmation dialog message for deleting all drawings",
|
||||
"placeholders": {
|
||||
@@ -481,7 +481,7 @@
|
||||
"@drawing": {
|
||||
"description": "Generic drawing label"
|
||||
},
|
||||
"shareDrawingsCount": "Share {count} Drawing{plural}",
|
||||
"shareDrawingsCount": "{count} çizim{plural} paylaş",
|
||||
"@shareDrawingsCount": {
|
||||
"description": "Title for share drawings dialog",
|
||||
"placeholders": {
|
||||
@@ -525,7 +525,7 @@
|
||||
"@publicChannel": {
|
||||
"description": "Public channel option for sharing"
|
||||
},
|
||||
"broadcastToAll": "Broadcast to all nearby nodes (ephemeral)",
|
||||
"broadcastToAll": "Yakındaki tüm düğümlere yayınla (geçici)",
|
||||
"@broadcastToAll": {
|
||||
"description": "Description for public channel broadcast"
|
||||
},
|
||||
@@ -561,11 +561,11 @@
|
||||
"@selectDestination": {
|
||||
"description": "Placeholder for destination dropdown"
|
||||
},
|
||||
"ephemeralBroadcastInfo": "Ephemeral: Broadcast over-the-air only. Not stored - nodes must be online.",
|
||||
"ephemeralBroadcastInfo": "Geçici: yalnızca havadan yayınlanır. Saklanmaz; düğümlerin çevrimiçi olması gerekir.",
|
||||
"@ephemeralBroadcastInfo": {
|
||||
"description": "Information about ephemeral channel broadcasts"
|
||||
},
|
||||
"persistentRoomInfo": "Persistent: Stored immutably in room. Synced automatically and preserved offline.",
|
||||
"persistentRoomInfo": "Kalıcı: odada değişmez şekilde saklanır. Otomatik olarak eşitlenir ve çevrimdışı korunur.",
|
||||
"@persistentRoomInfo": {
|
||||
"description": "Information about persistent room storage"
|
||||
},
|
||||
@@ -610,7 +610,7 @@
|
||||
"@addAdditionalInformation": {
|
||||
"description": "Placeholder for notes field"
|
||||
},
|
||||
"lowAccuracyWarning": "Location accuracy is ±{accuracy}m. This may not be accurate enough for SAR operations.\n\nContinue anyway?",
|
||||
"lowAccuracyWarning": "Konum doğruluğu ±{accuracy}m. Bu, SAR operasyonları için yeterince doğru olmayabilir.\n\nYine de devam edilsin mi?",
|
||||
"@lowAccuracyWarning": {
|
||||
"description": "Warning dialog content for low GPS accuracy",
|
||||
"placeholders": {
|
||||
@@ -623,7 +623,7 @@
|
||||
"@loginToRoom": {
|
||||
"description": "Title for room login dialog"
|
||||
},
|
||||
"enterPasswordInfo": "Enter the password to access this room. The password will be saved for future use.",
|
||||
"enterPasswordInfo": "Bu odaya erişmek için parolayı girin. Parola daha sonra kullanılmak üzere kaydedilecektir.",
|
||||
"@enterPasswordInfo": {
|
||||
"description": "Information about room password"
|
||||
},
|
||||
@@ -643,7 +643,7 @@
|
||||
"@login": {
|
||||
"description": "Login button label"
|
||||
},
|
||||
"failedToAddRoom": "Failed to add room to device: {error}\n\nThe room may not have advertised yet.\nTry waiting for the room to broadcast.",
|
||||
"failedToAddRoom": "Oda cihaza eklenemedi: {error}\n\nOda henüz yayın yapmamış olabilir.\nYayın yapmasını beklemeyi deneyin.",
|
||||
"@failedToAddRoom": {
|
||||
"description": "Error message when adding room fails",
|
||||
"placeholders": {
|
||||
@@ -656,7 +656,7 @@
|
||||
"@direct": {
|
||||
"description": "Direct routing indicator"
|
||||
},
|
||||
"flood": "Flood",
|
||||
"flood": "Yayılım",
|
||||
"@flood": {
|
||||
"description": "Flood routing indicator"
|
||||
},
|
||||
@@ -672,7 +672,7 @@
|
||||
"@distance": {
|
||||
"description": "Distance label"
|
||||
},
|
||||
"directPingTimeout": "Direct ping timeout - retrying {name} with flooding...",
|
||||
"directPingTimeout": "Doğrudan ping zaman aşımına uğradı - {name} flooding ile yeniden deneniyor...",
|
||||
"@directPingTimeout": {
|
||||
"description": "Warning when direct ping times out",
|
||||
"placeholders": {
|
||||
@@ -690,7 +690,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"deleteContactConfirmation": "Are you sure you want to delete \"{name}\"?\n\nThis will remove the contact from both the app and the companion radio device.",
|
||||
"deleteContactConfirmation": "\"{name}\" kişisini silmek istediğinizden emin misiniz?\n\nBu işlem kişiyi hem uygulamadan hem de bağlı radyo cihazından kaldıracaktır.",
|
||||
"@deleteContactConfirmation": {
|
||||
"description": "Confirmation message for deleting contact",
|
||||
"placeholders": {
|
||||
@@ -788,7 +788,7 @@
|
||||
"@updated": {
|
||||
"description": "Updated timestamp label"
|
||||
},
|
||||
"pathResetInfo": "Path reset for {name}. Next message will find a new route.",
|
||||
"pathResetInfo": "{name} için yol sıfırlandı. Sonraki mesaj yeni bir rota bulacak.",
|
||||
"@pathResetInfo": {
|
||||
"description": "Info message after path reset",
|
||||
"placeholders": {
|
||||
@@ -825,7 +825,7 @@
|
||||
"@filterMarkers": {
|
||||
"description": "Title for filter markers dialog"
|
||||
},
|
||||
"filterMarkersTooltip": "Filter markers",
|
||||
"filterMarkersTooltip": "İşaretleri filtrele",
|
||||
"@filterMarkersTooltip": {
|
||||
"description": "Tooltip for filter button"
|
||||
},
|
||||
@@ -883,7 +883,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"latLonFormat": "Lat: {latitude} Lon: {longitude}",
|
||||
"latLonFormat": "Enl: {latitude} Boy: {longitude}",
|
||||
"@latLonFormat": {
|
||||
"description": "Latitude and longitude display format",
|
||||
"placeholders": {
|
||||
@@ -971,11 +971,11 @@
|
||||
"@textCopiedToClipboard": {
|
||||
"description": "Success message when text is copied"
|
||||
},
|
||||
"cannotReplySenderMissing": "Cannot reply: sender information missing",
|
||||
"cannotReplySenderMissing": "Yanıtlanamıyor: gönderen bilgisi eksik",
|
||||
"@cannotReplySenderMissing": {
|
||||
"description": "Error when sender info is missing for reply"
|
||||
},
|
||||
"cannotReplyContactNotFound": "Cannot reply: contact not found",
|
||||
"cannotReplyContactNotFound": "Yanıtlanamıyor: kişi bulunamadı",
|
||||
"@cannotReplyContactNotFound": {
|
||||
"description": "Error when contact not found for reply"
|
||||
},
|
||||
@@ -983,15 +983,15 @@
|
||||
"@copyText": {
|
||||
"description": "Option to copy message text to clipboard"
|
||||
},
|
||||
"saveAsTemplate": "Save as Template",
|
||||
"saveAsTemplate": "Şablon olarak kaydet",
|
||||
"@saveAsTemplate": {
|
||||
"description": "Option to save SAR message as a reusable template"
|
||||
},
|
||||
"templateSaved": "Template saved successfully",
|
||||
"templateSaved": "Şablon başarıyla kaydedildi",
|
||||
"@templateSaved": {
|
||||
"description": "Success message when SAR template is saved"
|
||||
},
|
||||
"templateAlreadyExists": "Template with this emoji already exists",
|
||||
"templateAlreadyExists": "Bu emoji ile bir şablon zaten var",
|
||||
"@templateAlreadyExists": {
|
||||
"description": "Error message when trying to save duplicate template"
|
||||
},
|
||||
@@ -1007,7 +1007,7 @@
|
||||
"@shareLocation": {
|
||||
"description": "Option to share SAR marker location"
|
||||
},
|
||||
"shareLocationText": "{markerInfo}\n\nCoordinates: {lat}, {lon}\n\nGoogle Maps: {url}",
|
||||
"shareLocationText": "{markerInfo}\n\nKoordinatlar: {lat}, {lon}\n\nGoogle Maps: {url}",
|
||||
"@shareLocationText": {
|
||||
"description": "Formatted text for sharing SAR marker location",
|
||||
"placeholders": {
|
||||
@@ -1098,7 +1098,7 @@
|
||||
"@broadcast": {
|
||||
"description": "Delivery status for channel messages (no echoes yet)"
|
||||
},
|
||||
"deliveredToContacts": "Delivered to {delivered}/{total} contacts",
|
||||
"deliveredToContacts": "{delivered}/{total} kişiye teslim edildi",
|
||||
"@deliveredToContacts": {
|
||||
"description": "Grouped message delivery count",
|
||||
"placeholders": {
|
||||
@@ -1110,11 +1110,11 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"allDelivered": "All delivered",
|
||||
"allDelivered": "Hepsi teslim edildi",
|
||||
"@allDelivered": {
|
||||
"description": "Status when all recipients received the message"
|
||||
},
|
||||
"recipientDetails": "Recipient Details",
|
||||
"recipientDetails": "Alıcı ayrıntıları",
|
||||
"@recipientDetails": {
|
||||
"description": "Header for expandable recipient list"
|
||||
},
|
||||
@@ -1122,19 +1122,19 @@
|
||||
"@pending": {
|
||||
"description": "Delivery status: pending/waiting"
|
||||
},
|
||||
"sarMarkerFoundPerson": "Found Person",
|
||||
"sarMarkerFoundPerson": "Bulunan kişi",
|
||||
"@sarMarkerFoundPerson": {
|
||||
"description": "SAR marker type: found person"
|
||||
},
|
||||
"sarMarkerFire": "Fire Location",
|
||||
"sarMarkerFire": "Yangın konumu",
|
||||
"@sarMarkerFire": {
|
||||
"description": "SAR marker type: fire"
|
||||
},
|
||||
"sarMarkerStagingArea": "Staging Area",
|
||||
"sarMarkerStagingArea": "Toplanma alanı",
|
||||
"@sarMarkerStagingArea": {
|
||||
"description": "SAR marker type: staging area"
|
||||
},
|
||||
"sarMarkerObject": "Object Found",
|
||||
"sarMarkerObject": "Bulunan nesne",
|
||||
"@sarMarkerObject": {
|
||||
"description": "SAR marker type: object"
|
||||
},
|
||||
@@ -1158,7 +1158,7 @@
|
||||
"@frequencyMHz": {
|
||||
"description": "Label for radio frequency field"
|
||||
},
|
||||
"frequencyExample": "e.g., 869.618",
|
||||
"frequencyExample": "örn. 869.618",
|
||||
"@frequencyExample": {
|
||||
"description": "Helper text example for frequency"
|
||||
},
|
||||
@@ -1249,7 +1249,7 @@
|
||||
"@clearTrailQuestion": {
|
||||
"description": "Confirmation dialog title"
|
||||
},
|
||||
"clearTrailConfirmation": "Are you sure you want to clear the current location trail? This action cannot be undone.",
|
||||
"clearTrailConfirmation": "Geçerli konum izini temizlemek istediğinizden emin misiniz? Bu işlem geri alınamaz.",
|
||||
"@clearTrailConfirmation": {
|
||||
"description": "Confirmation dialog message"
|
||||
},
|
||||
@@ -1277,7 +1277,7 @@
|
||||
"@noContactsWithLocationHistory": {
|
||||
"description": "Subtitle when no contacts have trails"
|
||||
},
|
||||
"showingTrailsForContacts": "Showing trails for {count} contacts",
|
||||
"showingTrailsForContacts": "{count} kişi için izler gösteriliyor",
|
||||
"@showingTrailsForContacts": {
|
||||
"description": "Subtitle showing number of contacts with trails",
|
||||
"placeholders": {
|
||||
@@ -1286,7 +1286,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"individualContactTrails": "Individual Contact Trails",
|
||||
"individualContactTrails": "Tek tek kişi izleri",
|
||||
"@individualContactTrails": {
|
||||
"description": "Expansion tile title for individual contact trails"
|
||||
},
|
||||
@@ -1338,7 +1338,7 @@
|
||||
"@meshNetworkName": {
|
||||
"description": "Mesh network name field label"
|
||||
},
|
||||
"nameBroadcastInMesh": "Name broadcast in mesh advertisements",
|
||||
"nameBroadcastInMesh": "Mesh duyurularında yayınlanan ad",
|
||||
"@nameBroadcastInMesh": {
|
||||
"description": "Helper text for mesh network name field"
|
||||
},
|
||||
@@ -1374,7 +1374,7 @@
|
||||
"@roomChannel": {
|
||||
"description": "Device type: room or channel"
|
||||
},
|
||||
"typeNumber": "Type {number}",
|
||||
"typeNumber": "Tür {number}",
|
||||
"@typeNumber": {
|
||||
"description": "Generic device type with number",
|
||||
"placeholders": {
|
||||
@@ -1383,7 +1383,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"copiedToClipboardShort": "Copied {label} to clipboard",
|
||||
"copiedToClipboardShort": "{label} panoya kopyalandı",
|
||||
"@copiedToClipboardShort": {
|
||||
"description": "Short success message when copying to clipboard",
|
||||
"placeholders": {
|
||||
@@ -1414,7 +1414,7 @@
|
||||
"@sarTemplates": {
|
||||
"description": "SAR templates menu title"
|
||||
},
|
||||
"manageSarTemplates": "Manage cursor on target templates",
|
||||
"manageSarTemplates": "SAR şablonlarını yönet",
|
||||
"@manageSarTemplates": {
|
||||
"description": "Subtitle for SAR templates settings"
|
||||
},
|
||||
@@ -1495,7 +1495,7 @@
|
||||
"@templateDeleted": {
|
||||
"description": "Success message when template is deleted"
|
||||
},
|
||||
"templatesImported": "{count, plural, =0{No templates imported} =1{Imported 1 template} other{Imported {count} templates}}",
|
||||
"templatesImported": "{count, plural, =0{Şablon içe aktarılmadı} =1{1 şablon içe aktarıldı} other{{count} şablon içe aktarıldı}}",
|
||||
"@templatesImported": {
|
||||
"description": "Success message after importing templates",
|
||||
"placeholders": {
|
||||
@@ -1504,7 +1504,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"templatesExported": "{count, plural, =1{Exported 1 template to clipboard} other{Exported {count} templates to clipboard}}",
|
||||
"templatesExported": "{count, plural, =1{1 şablon panoya aktarıldı} other{{count} şablon panoya aktarıldı}}",
|
||||
"@templatesExported": {
|
||||
"description": "Success message after exporting templates",
|
||||
"placeholders": {
|
||||
@@ -1517,7 +1517,7 @@
|
||||
"@resetToDefaults": {
|
||||
"description": "Action to reset templates to defaults"
|
||||
},
|
||||
"resetToDefaultsConfirmation": "This will delete all custom templates and restore the 4 default templates. Continue?",
|
||||
"resetToDefaultsConfirmation": "Bu işlem tüm özel şablonları silecek ve 4 varsayılan şablonu geri yükleyecek. Devam edilsin mi?",
|
||||
"@resetToDefaultsConfirmation": {
|
||||
"description": "Confirmation message for reset to defaults"
|
||||
},
|
||||
@@ -1569,7 +1569,7 @@
|
||||
"@locationPermissionPermanentlyDeniedOpenSettings": {
|
||||
"description": "Location permission status: permanently denied"
|
||||
},
|
||||
"locationPermissionDialogContent": "Location permission is permanently denied. Please enable it in your device settings to use GPS tracking and location sharing features.",
|
||||
"locationPermissionDialogContent": "Konum izni kalıcı olarak reddedildi. GPS takibi ve konum paylaşımını kullanmak için lütfen cihaz ayarlarından etkinleştirin.",
|
||||
"@locationPermissionDialogContent": {
|
||||
"description": "Content for location permission dialog when permanently denied"
|
||||
},
|
||||
@@ -1589,11 +1589,11 @@
|
||||
"@locationPermissionAlreadyGranted": {
|
||||
"description": "Info message when permission is already granted"
|
||||
},
|
||||
"sarNavyBlue": "SAR Navy Blue",
|
||||
"sarNavyBlue": "SAR Lacivert",
|
||||
"@sarNavyBlue": {
|
||||
"description": "SAR Navy Blue theme name"
|
||||
},
|
||||
"sarNavyBlueDescription": "Professional/Operations Mode",
|
||||
"sarNavyBlueDescription": "Profesyonel/Operasyon modu",
|
||||
"@sarNavyBlueDescription": {
|
||||
"description": "Description for SAR Navy Blue theme"
|
||||
},
|
||||
@@ -1601,7 +1601,7 @@
|
||||
"@selectRecipient": {
|
||||
"description": "Title for recipient selector sheet"
|
||||
},
|
||||
"broadcastToAllNearby": "Broadcast to all nearby",
|
||||
"broadcastToAllNearby": "Yakındaki herkese yayınla",
|
||||
"@broadcastToAllNearby": {
|
||||
"description": "Subtitle for public channel option"
|
||||
},
|
||||
@@ -1633,35 +1633,35 @@
|
||||
"@channel": {
|
||||
"description": "Channel label in notifications"
|
||||
},
|
||||
"samplePoliceLead": "Police Lead",
|
||||
"samplePoliceLead": "Polis lideri",
|
||||
"@samplePoliceLead": {
|
||||
"description": "Sample team member name"
|
||||
},
|
||||
"sampleDroneOperator": "Drone Operator",
|
||||
"sampleDroneOperator": "Drone operatörü",
|
||||
"@sampleDroneOperator": {
|
||||
"description": "Sample team member name"
|
||||
},
|
||||
"sampleFirefighterAlpha": "Firefighter",
|
||||
"sampleFirefighterAlpha": "İtfaiyeci",
|
||||
"@sampleFirefighterAlpha": {
|
||||
"description": "Sample team member name"
|
||||
},
|
||||
"sampleMedicCharlie": "Medic",
|
||||
"sampleMedicCharlie": "Sağlık görevlisi",
|
||||
"@sampleMedicCharlie": {
|
||||
"description": "Sample team member name"
|
||||
},
|
||||
"sampleCommandDelta": "Command",
|
||||
"sampleCommandDelta": "Komuta",
|
||||
"@sampleCommandDelta": {
|
||||
"description": "Sample team member name"
|
||||
},
|
||||
"sampleFireEngine": "Fire Engine",
|
||||
"sampleFireEngine": "İtfaiye aracı",
|
||||
"@sampleFireEngine": {
|
||||
"description": "Sample team member name"
|
||||
},
|
||||
"sampleAirSupport": "Air Support",
|
||||
"sampleAirSupport": "Hava desteği",
|
||||
"@sampleAirSupport": {
|
||||
"description": "Sample team member name"
|
||||
},
|
||||
"sampleBaseCoordinator": "Base Coordinator",
|
||||
"sampleBaseCoordinator": "Üs koordinatörü",
|
||||
"@sampleBaseCoordinator": {
|
||||
"description": "Sample team member name"
|
||||
},
|
||||
@@ -1677,155 +1677,155 @@
|
||||
"@channelUpdates": {
|
||||
"description": "Updates channel name"
|
||||
},
|
||||
"sampleTeamMember": "Sample Team Member",
|
||||
"sampleTeamMember": "Örnek ekip üyesi",
|
||||
"@sampleTeamMember": {
|
||||
"description": "Sample sender name"
|
||||
},
|
||||
"sampleScout": "Sample Scout",
|
||||
"sampleScout": "Örnek keşifçi",
|
||||
"@sampleScout": {
|
||||
"description": "Sample sender name"
|
||||
},
|
||||
"sampleBase": "Sample Base",
|
||||
"sampleBase": "Örnek üs",
|
||||
"@sampleBase": {
|
||||
"description": "Sample sender name"
|
||||
},
|
||||
"sampleSearcher": "Sample Searcher",
|
||||
"sampleSearcher": "Örnek arayıcı",
|
||||
"@sampleSearcher": {
|
||||
"description": "Sample sender name"
|
||||
},
|
||||
"sampleObjectBackpack": " Backpack found - blue color",
|
||||
"sampleObjectBackpack": " Sırt çantası bulundu - mavi renk",
|
||||
"@sampleObjectBackpack": {
|
||||
"description": "Sample object note"
|
||||
},
|
||||
"sampleObjectVehicle": " Vehicle abandoned - check for owner",
|
||||
"sampleObjectVehicle": " Terk edilmiş araç - sahibi kontrol edin",
|
||||
"@sampleObjectVehicle": {
|
||||
"description": "Sample object note"
|
||||
},
|
||||
"sampleObjectCamping": " Camping equipment discovered",
|
||||
"sampleObjectCamping": " Kamp ekipmanı bulundu",
|
||||
"@sampleObjectCamping": {
|
||||
"description": "Sample object note"
|
||||
},
|
||||
"sampleObjectTrailMarker": " Trail marker found off-path",
|
||||
"sampleObjectTrailMarker": " Yol dışında patika işareti bulundu",
|
||||
"@sampleObjectTrailMarker": {
|
||||
"description": "Sample object note"
|
||||
},
|
||||
"sampleMsgAllTeamsCheckIn": "All teams check in",
|
||||
"sampleMsgAllTeamsCheckIn": "Tüm ekipler durum bildirimi yapsın",
|
||||
"@sampleMsgAllTeamsCheckIn": {
|
||||
"description": "Sample channel message"
|
||||
},
|
||||
"sampleMsgWeatherUpdate": "Weather update: Clear skies, temp 18°C",
|
||||
"sampleMsgWeatherUpdate": "Hava durumu: açık gökyüzü, sıcaklık 18°C",
|
||||
"@sampleMsgWeatherUpdate": {
|
||||
"description": "Sample channel message"
|
||||
},
|
||||
"sampleMsgBaseCamp": "Base camp established at staging area",
|
||||
"sampleMsgBaseCamp": "Üs kampı toplanma alanında kuruldu",
|
||||
"@sampleMsgBaseCamp": {
|
||||
"description": "Sample channel message"
|
||||
},
|
||||
"sampleMsgTeamAlpha": "Team moving to sector 2",
|
||||
"sampleMsgTeamAlpha": "Ekip sektör 2’ye ilerliyor",
|
||||
"@sampleMsgTeamAlpha": {
|
||||
"description": "Sample channel message"
|
||||
},
|
||||
"sampleMsgRadioCheck": "Radio check - all stations respond",
|
||||
"sampleMsgRadioCheck": "Telsiz kontrolü - tüm istasyonlar yanıt versin",
|
||||
"@sampleMsgRadioCheck": {
|
||||
"description": "Sample channel message"
|
||||
},
|
||||
"sampleMsgWaterSupply": "Water supply available at checkpoint 3",
|
||||
"sampleMsgWaterSupply": "Su ikmali 3 numaralı kontrol noktasında mevcut",
|
||||
"@sampleMsgWaterSupply": {
|
||||
"description": "Sample channel message"
|
||||
},
|
||||
"sampleMsgTeamBravo": "Team reporting: sector 1 clear",
|
||||
"sampleMsgTeamBravo": "Ekip raporu: sektör 1 temiz",
|
||||
"@sampleMsgTeamBravo": {
|
||||
"description": "Sample channel message"
|
||||
},
|
||||
"sampleMsgEtaRallyPoint": "ETA to rally point: 15 minutes",
|
||||
"sampleMsgEtaRallyPoint": "Toplanma noktasına tahmini varış: 15 dakika",
|
||||
"@sampleMsgEtaRallyPoint": {
|
||||
"description": "Sample channel message"
|
||||
},
|
||||
"sampleMsgSupplyDrop": "Supply drop confirmed for 14:00",
|
||||
"sampleMsgSupplyDrop": "İkmal bırakma 14:00 için onaylandı",
|
||||
"@sampleMsgSupplyDrop": {
|
||||
"description": "Sample channel message"
|
||||
},
|
||||
"sampleMsgDroneSurvey": "Drone survey completed - no findings",
|
||||
"sampleMsgDroneSurvey": "Drone taraması tamamlandı - bulgu yok",
|
||||
"@sampleMsgDroneSurvey": {
|
||||
"description": "Sample channel message"
|
||||
},
|
||||
"sampleMsgTeamCharlie": "Team requesting backup",
|
||||
"sampleMsgTeamCharlie": "Ekip takviye istiyor",
|
||||
"@sampleMsgTeamCharlie": {
|
||||
"description": "Sample channel message"
|
||||
},
|
||||
"sampleMsgRadioDiscipline": "All units: maintain radio discipline",
|
||||
"sampleMsgRadioDiscipline": "Tüm birimler: telsiz disiplinini koruyun",
|
||||
"@sampleMsgRadioDiscipline": {
|
||||
"description": "Sample channel message"
|
||||
},
|
||||
"sampleMsgUrgentMedical": "URGENT: Medical assistance needed at sector 4",
|
||||
"sampleMsgUrgentMedical": "ACİL: sektör 4’te tıbbi yardım gerekli",
|
||||
"@sampleMsgUrgentMedical": {
|
||||
"description": "Sample emergency message"
|
||||
},
|
||||
"sampleMsgAdultMale": " Adult male, conscious",
|
||||
"sampleMsgAdultMale": " Yetişkin erkek, bilinci açık",
|
||||
"@sampleMsgAdultMale": {
|
||||
"description": "Sample emergency message note"
|
||||
},
|
||||
"sampleMsgFireSpotted": "Fire spotted - coordinates incoming",
|
||||
"sampleMsgFireSpotted": "Yangın görüldü - koordinatlar geliyor",
|
||||
"@sampleMsgFireSpotted": {
|
||||
"description": "Sample emergency message"
|
||||
},
|
||||
"sampleMsgSpreadingRapidly": " Spreading rapidly!",
|
||||
"sampleMsgSpreadingRapidly": " Hızla yayılıyor!",
|
||||
"@sampleMsgSpreadingRapidly": {
|
||||
"description": "Sample emergency message note"
|
||||
},
|
||||
"sampleMsgPriorityHelicopter": "PRIORITY: Need helicopter support",
|
||||
"sampleMsgPriorityHelicopter": "ÖNCELİK: helikopter desteği gerekli",
|
||||
"@sampleMsgPriorityHelicopter": {
|
||||
"description": "Sample emergency message"
|
||||
},
|
||||
"sampleMsgMedicalTeamEnRoute": "Medical team en route to your location",
|
||||
"sampleMsgMedicalTeamEnRoute": "Tıbbi ekip konumunuza geliyor",
|
||||
"@sampleMsgMedicalTeamEnRoute": {
|
||||
"description": "Sample emergency message"
|
||||
},
|
||||
"sampleMsgEvacHelicopter": "Evac helicopter ETA 10 minutes",
|
||||
"sampleMsgEvacHelicopter": "Tahliye helikopteri ETA 10 dakika",
|
||||
"@sampleMsgEvacHelicopter": {
|
||||
"description": "Sample emergency message"
|
||||
},
|
||||
"sampleMsgEmergencyResolved": "Emergency resolved - all clear",
|
||||
"sampleMsgEmergencyResolved": "Acil durum çözüldü - tehlike yok",
|
||||
"@sampleMsgEmergencyResolved": {
|
||||
"description": "Sample emergency message"
|
||||
},
|
||||
"sampleMsgEmergencyStagingArea": " Emergency staging area",
|
||||
"sampleMsgEmergencyStagingArea": " Acil durum toplanma alanı",
|
||||
"@sampleMsgEmergencyStagingArea": {
|
||||
"description": "Sample emergency message note"
|
||||
},
|
||||
"sampleMsgEmergencyServices": "Emergency services notified and responding",
|
||||
"sampleMsgEmergencyServices": "Acil servisler bilgilendirildi ve müdahale ediyor",
|
||||
"@sampleMsgEmergencyServices": {
|
||||
"description": "Sample emergency message"
|
||||
},
|
||||
"sampleAlphaTeamLead": "Team Lead",
|
||||
"sampleAlphaTeamLead": "Ekip lideri",
|
||||
"@sampleAlphaTeamLead": {
|
||||
"description": "Sample team name"
|
||||
},
|
||||
"sampleBravoScout": "Scout",
|
||||
"sampleBravoScout": "Keşifçi",
|
||||
"@sampleBravoScout": {
|
||||
"description": "Sample team name"
|
||||
},
|
||||
"sampleCharlieMedic": "Medic",
|
||||
"sampleCharlieMedic": "Sağlık görevlisi",
|
||||
"@sampleCharlieMedic": {
|
||||
"description": "Sample team name"
|
||||
},
|
||||
"sampleDeltaNavigator": "Navigator",
|
||||
"sampleDeltaNavigator": "Navigatör",
|
||||
"@sampleDeltaNavigator": {
|
||||
"description": "Sample team name"
|
||||
},
|
||||
"sampleEchoSupport": "Support",
|
||||
"sampleEchoSupport": "Destek",
|
||||
"@sampleEchoSupport": {
|
||||
"description": "Sample team name"
|
||||
},
|
||||
"sampleBaseCommand": "Base Command",
|
||||
"sampleBaseCommand": "Üs komutası",
|
||||
"@sampleBaseCommand": {
|
||||
"description": "Sample team name"
|
||||
},
|
||||
"sampleFieldCoordinator": "Field Coordinator",
|
||||
"sampleFieldCoordinator": "Saha koordinatörü",
|
||||
"@sampleFieldCoordinator": {
|
||||
"description": "Sample team name"
|
||||
},
|
||||
"sampleMedicalTeam": "Medical Team",
|
||||
"sampleMedicalTeam": "Tıbbi ekip",
|
||||
"@sampleMedicalTeam": {
|
||||
"description": "Sample team name"
|
||||
},
|
||||
@@ -1833,7 +1833,7 @@
|
||||
"@mapDrawing": {
|
||||
"description": "Label for map drawing messages"
|
||||
},
|
||||
"navigateToDrawing": "Navigate to Drawing",
|
||||
"navigateToDrawing": "Çizime git",
|
||||
"@navigateToDrawing": {
|
||||
"description": "Option to navigate to drawing on map"
|
||||
},
|
||||
@@ -1869,7 +1869,7 @@
|
||||
"@longitudeLabel": {
|
||||
"description": "Label for longitude input field"
|
||||
},
|
||||
"exampleCoordinates": "Example: 46.0569, 14.5058",
|
||||
"exampleCoordinates": "Örnek: 46.0569, 14.5058",
|
||||
"@exampleCoordinates": {
|
||||
"description": "Example coordinate format hint"
|
||||
},
|
||||
@@ -1889,7 +1889,7 @@
|
||||
"@sendToPersistentStorage": {
|
||||
"description": "Subtitle for room sharing option"
|
||||
},
|
||||
"deleteDrawingConfirm": "Are you sure you want to delete this drawing?",
|
||||
"deleteDrawingConfirm": "Bu çizimi silmek istediğinizden emin misiniz?",
|
||||
"@deleteDrawingConfirm": {
|
||||
"description": "Confirmation message for deleting a single drawing"
|
||||
},
|
||||
@@ -1897,7 +1897,7 @@
|
||||
"@drawingDeleted": {
|
||||
"description": "Success message after deleting a drawing"
|
||||
},
|
||||
"yourDrawingsCount": "Your Drawings ({count})",
|
||||
"yourDrawingsCount": "Çizimleriniz ({count})",
|
||||
"@yourDrawingsCount": {
|
||||
"description": "Header showing count of user's drawings",
|
||||
"placeholders": {
|
||||
@@ -1938,55 +1938,55 @@
|
||||
"@updateLater": {
|
||||
"description": "Button to dismiss update dialog"
|
||||
},
|
||||
"cadastralParcels": "Cadastral Parcels",
|
||||
"cadastralParcels": "Kadastro parselleri",
|
||||
"@cadastralParcels": {
|
||||
"description": "Label for cadastral parcels WMS overlay layer"
|
||||
},
|
||||
"forestRoads": "Forest Roads",
|
||||
"forestRoads": "Orman yolları",
|
||||
"@forestRoads": {
|
||||
"description": "Label for forest roads WMS overlay layer"
|
||||
},
|
||||
"wmsOverlays": "WMS Overlays",
|
||||
"wmsOverlays": "WMS katmanları",
|
||||
"@wmsOverlays": {
|
||||
"description": "Section header for WMS overlay layers in layer selector"
|
||||
},
|
||||
"hikingTrails": "Hiking Trails",
|
||||
"hikingTrails": "Yürüyüş parkurları",
|
||||
"@hikingTrails": {
|
||||
"description": "Label for hiking/mountain trails WMS overlay layer"
|
||||
},
|
||||
"mainRoads": "Main Roads",
|
||||
"mainRoads": "Ana yollar",
|
||||
"@mainRoads": {
|
||||
"description": "Label for main roads WMS overlay layer"
|
||||
},
|
||||
"houseNumbers": "House Numbers",
|
||||
"houseNumbers": "Kapı numaraları",
|
||||
"@houseNumbers": {
|
||||
"description": "Label for house numbers WMS overlay layer"
|
||||
},
|
||||
"fireHazardZones": "Fire Hazard Zones",
|
||||
"fireHazardZones": "Yangın tehlike bölgeleri",
|
||||
"@fireHazardZones": {
|
||||
"description": "Label for fire hazard risk zones WMS overlay layer"
|
||||
},
|
||||
"historicalFires": "Historical Fires",
|
||||
"historicalFires": "Geçmiş yangınlar",
|
||||
"@historicalFires": {
|
||||
"description": "Label for historical forest fires WMS overlay layer"
|
||||
},
|
||||
"firebreaks": "Firebreaks",
|
||||
"firebreaks": "Yangın şeritleri",
|
||||
"@firebreaks": {
|
||||
"description": "Label for firebreaks WMS overlay layer"
|
||||
},
|
||||
"krasFireZones": "Kras Fire Zones",
|
||||
"krasFireZones": "Kras yangın bölgeleri",
|
||||
"@krasFireZones": {
|
||||
"description": "Label for Kras fire zones WMS overlay layer"
|
||||
},
|
||||
"placeNames": "Place Names",
|
||||
"placeNames": "Yer adları",
|
||||
"@placeNames": {
|
||||
"description": "Label for geographic place names WMS overlay layer"
|
||||
},
|
||||
"municipalityBorders": "Municipality Borders",
|
||||
"municipalityBorders": "Belediye sınırları",
|
||||
"@municipalityBorders": {
|
||||
"description": "Label for municipality borders WMS overlay layer"
|
||||
},
|
||||
"topographicMap": "Topographic Map 1:25000",
|
||||
"topographicMap": "Topoğrafik harita 1:25000",
|
||||
"@topographicMap": {
|
||||
"description": "Label for DTK25 topographic base map layer"
|
||||
},
|
||||
@@ -2014,15 +2014,15 @@
|
||||
"@channelSecretHint": {
|
||||
"description": "Hint for channel secret field"
|
||||
},
|
||||
"channelSecretHelp": "This secret must be shared with all team members who need access to this channel",
|
||||
"channelSecretHelp": "Bu sır, bu kanala erişmesi gereken tüm ekip üyeleriyle paylaşılmalıdır",
|
||||
"@channelSecretHelp": {
|
||||
"description": "Help text explaining channel secret"
|
||||
},
|
||||
"channelTypesInfo": "Hash channels (#team): Secret auto-generated from name. Same name = same channel across devices.\n\nPrivate channels: Use explicit secret. Only those with the secret can join.",
|
||||
"channelTypesInfo": "Hash kanallar (#team): sır, isimden otomatik üretilir. Aynı isim = tüm cihazlarda aynı kanal.\n\nÖzel kanallar: açık bir sır kullanın. Yalnızca sırrı bilenler katılabilir.",
|
||||
"@channelTypesInfo": {
|
||||
"description": "Information banner explaining hash and private channel types"
|
||||
},
|
||||
"hashChannelInfo": "Hash channel: Secret will be auto-generated from the channel name. Anyone using the same name will join the same channel.",
|
||||
"hashChannelInfo": "Hash kanal: sır kanal adından otomatik üretilecektir. Aynı adı kullanan herkes aynı kanala katılır.",
|
||||
"@hashChannelInfo": {
|
||||
"description": "Help text for hash channels (# prefix)"
|
||||
},
|
||||
@@ -2030,7 +2030,7 @@
|
||||
"@channelNameRequired": {
|
||||
"description": "Validation error for empty channel name"
|
||||
},
|
||||
"channelNameTooLong": "Channel name must be 31 characters or less",
|
||||
"channelNameTooLong": "Kanal adı en fazla 31 karakter olabilir",
|
||||
"@channelNameTooLong": {
|
||||
"description": "Validation error for channel name too long"
|
||||
},
|
||||
@@ -2038,7 +2038,7 @@
|
||||
"@channelSecretRequired": {
|
||||
"description": "Validation error for empty channel secret"
|
||||
},
|
||||
"channelSecretTooLong": "Channel secret must be 32 characters or less",
|
||||
"channelSecretTooLong": "Kanal sırrı en fazla 32 karakter olabilir",
|
||||
"@channelSecretTooLong": {
|
||||
"description": "Validation error for channel secret too long"
|
||||
},
|
||||
@@ -2063,7 +2063,7 @@
|
||||
"@deleteChannel": {
|
||||
"description": "Delete channel button/menu item"
|
||||
},
|
||||
"deleteChannelConfirmation": "Are you sure you want to delete channel \"{channelName}\"? This action cannot be undone.",
|
||||
"deleteChannelConfirmation": "\"{channelName}\" kanalını silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.",
|
||||
"@deleteChannelConfirmation": {
|
||||
"description": "Confirmation dialog when deleting a channel",
|
||||
"placeholders": {
|
||||
@@ -2109,7 +2109,7 @@
|
||||
"@wizardWelcomeTitle": {
|
||||
"description": "Welcome wizard first page title"
|
||||
},
|
||||
"wizardWelcomeDescription": "A powerful off-grid communication tool for search and rescue operations. Connect with your team using mesh radio technology when traditional networks are unavailable.",
|
||||
"wizardWelcomeDescription": "Arama ve kurtarma operasyonları için güçlü bir şebeke dışı iletişim aracı. Geleneksel ağlar kullanılamadığında ekibinizle mesh radyo teknolojisi üzerinden bağlantı kurun.",
|
||||
"@wizardWelcomeDescription": {
|
||||
"description": "Welcome wizard first page description"
|
||||
},
|
||||
@@ -2117,19 +2117,19 @@
|
||||
"@wizardConnectingTitle": {
|
||||
"description": "Wizard connecting page title"
|
||||
},
|
||||
"wizardConnectingDescription": "Connect your smartphone to a MeshCore radio device via Bluetooth to start communicating off-grid.",
|
||||
"wizardConnectingDescription": "Şebeke dışı iletişime başlamak için akıllı telefonunuzu Bluetooth üzerinden bir MeshCore radyo cihazına bağlayın.",
|
||||
"@wizardConnectingDescription": {
|
||||
"description": "Wizard connecting page description"
|
||||
},
|
||||
"wizardConnectingFeature1": "Scan for nearby MeshCore devices",
|
||||
"wizardConnectingFeature1": "Yakındaki MeshCore cihazlarını tarayın",
|
||||
"@wizardConnectingFeature1": {
|
||||
"description": "Wizard connecting feature 1"
|
||||
},
|
||||
"wizardConnectingFeature2": "Pair with your radio via Bluetooth",
|
||||
"wizardConnectingFeature2": "Radyonuzla Bluetooth üzerinden eşleşin",
|
||||
"@wizardConnectingFeature2": {
|
||||
"description": "Wizard connecting feature 2"
|
||||
},
|
||||
"wizardConnectingFeature3": "Works completely offline - no internet required",
|
||||
"wizardConnectingFeature3": "Tamamen çevrimdışı çalışır - internet gerekmez",
|
||||
"@wizardConnectingFeature3": {
|
||||
"description": "Wizard connecting feature 3"
|
||||
},
|
||||
@@ -2137,19 +2137,19 @@
|
||||
"@wizardChannelTitle": {
|
||||
"description": "Wizard channel page title"
|
||||
},
|
||||
"wizardChannelDescription": "Broadcast messages to everyone on a channel, perfect for team-wide announcements and coordination.",
|
||||
"wizardChannelDescription": "Bir kanaldaki herkese mesaj yayınlayın; ekip genelindeki duyurular ve koordinasyon için idealdir.",
|
||||
"@wizardChannelDescription": {
|
||||
"description": "Wizard channel page description"
|
||||
},
|
||||
"wizardChannelFeature1": "Public Channel for general team communication",
|
||||
"wizardChannelFeature1": "Genel ekip iletişimi için herkese açık kanal",
|
||||
"@wizardChannelFeature1": {
|
||||
"description": "Wizard channel feature 1"
|
||||
},
|
||||
"wizardChannelFeature2": "Create custom channels for specific groups",
|
||||
"wizardChannelFeature2": "Belirli gruplar için özel kanallar oluşturun",
|
||||
"@wizardChannelFeature2": {
|
||||
"description": "Wizard channel feature 2"
|
||||
},
|
||||
"wizardChannelFeature3": "Messages are automatically relayed by the mesh",
|
||||
"wizardChannelFeature3": "Mesajlar mesh tarafından otomatik iletilir",
|
||||
"@wizardChannelFeature3": {
|
||||
"description": "Wizard channel feature 3"
|
||||
},
|
||||
@@ -2157,19 +2157,19 @@
|
||||
"@wizardContactsTitle": {
|
||||
"description": "Wizard contacts page title"
|
||||
},
|
||||
"wizardContactsDescription": "Your team members appear automatically as they join the mesh network. Send them direct messages or view their location.",
|
||||
"wizardContactsDescription": "Ekip üyeleriniz mesh ağına katıldıkça otomatik olarak görünür. Onlara doğrudan mesaj gönderin veya konumlarını görüntüleyin.",
|
||||
"@wizardContactsDescription": {
|
||||
"description": "Wizard contacts page description"
|
||||
},
|
||||
"wizardContactsFeature1": "Contacts discovered automatically",
|
||||
"wizardContactsFeature1": "Kişiler otomatik bulunur",
|
||||
"@wizardContactsFeature1": {
|
||||
"description": "Wizard contacts feature 1"
|
||||
},
|
||||
"wizardContactsFeature2": "Send private direct messages",
|
||||
"wizardContactsFeature2": "Özel doğrudan mesaj gönderin",
|
||||
"@wizardContactsFeature2": {
|
||||
"description": "Wizard contacts feature 2"
|
||||
},
|
||||
"wizardContactsFeature3": "View battery level and last seen time",
|
||||
"wizardContactsFeature3": "Pil seviyesini ve son görülme zamanını görüntüleyin",
|
||||
"@wizardContactsFeature3": {
|
||||
"description": "Wizard contacts feature 3"
|
||||
},
|
||||
@@ -2177,23 +2177,23 @@
|
||||
"@wizardMapTitle": {
|
||||
"description": "Wizard map page title"
|
||||
},
|
||||
"wizardMapDescription": "Track your team in real-time and mark important locations for search and rescue operations.",
|
||||
"wizardMapDescription": "Ekibinizi gerçek zamanlı izleyin ve arama kurtarma operasyonları için önemli konumları işaretleyin.",
|
||||
"@wizardMapDescription": {
|
||||
"description": "Wizard map page description"
|
||||
},
|
||||
"wizardMapFeature1": "SAR markers for found persons, fires, and staging areas",
|
||||
"wizardMapFeature1": "Bulunan kişiler, yangınlar ve toplanma alanları için SAR işaretleri",
|
||||
"@wizardMapFeature1": {
|
||||
"description": "Wizard map feature 1"
|
||||
},
|
||||
"wizardMapFeature2": "Real-time GPS tracking of team members",
|
||||
"wizardMapFeature2": "Ekip üyelerinin gerçek zamanlı GPS takibi",
|
||||
"@wizardMapFeature2": {
|
||||
"description": "Wizard map feature 2"
|
||||
},
|
||||
"wizardMapFeature3": "Download offline maps for remote areas",
|
||||
"wizardMapFeature3": "Uzak bölgeler için çevrimdışı haritalar indirin",
|
||||
"@wizardMapFeature3": {
|
||||
"description": "Wizard map feature 3"
|
||||
},
|
||||
"wizardMapFeature4": "Draw shapes and share tactical information",
|
||||
"wizardMapFeature4": "Şekiller çizin ve taktik bilgileri paylaşın",
|
||||
"@wizardMapFeature4": {
|
||||
"description": "Wizard map feature 4"
|
||||
},
|
||||
@@ -2205,7 +2205,7 @@
|
||||
"@allTeamContacts": {
|
||||
"description": "Destination option to send SAR marker to all team contacts"
|
||||
},
|
||||
"directMessagesInfo": "Direct messages with ACKs. Sent to {count} team members.",
|
||||
"directMessagesInfo": "ACK’li doğrudan mesajlar. {count} ekip üyesine gönderildi.",
|
||||
"@directMessagesInfo": {
|
||||
"description": "Information about sending to all contacts",
|
||||
"placeholders": {
|
||||
@@ -2214,7 +2214,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"sarMarkerSentToContacts": "SAR marker sent to {count} contacts",
|
||||
"sarMarkerSentToContacts": "SAR işareti {count} kişiye gönderildi",
|
||||
"@sarMarkerSentToContacts": {
|
||||
"description": "Success message after sending SAR marker to all contacts",
|
||||
"placeholders": {
|
||||
@@ -2231,50 +2231,50 @@
|
||||
"@reply": {},
|
||||
"technicalDetails": "Teknik ayrıntılar",
|
||||
"@technicalDetails": {},
|
||||
"messageTechnicalDetails": "Message technical details",
|
||||
"messageTechnicalDetails": "Mesaj teknik ayrıntıları",
|
||||
"@messageTechnicalDetails": {},
|
||||
"linkQuality": "Link quality",
|
||||
"linkQuality": "Bağlantı kalitesi",
|
||||
"@linkQuality": {},
|
||||
"delivery": "Delivery",
|
||||
"delivery": "Teslimat",
|
||||
"@delivery": {},
|
||||
"status": "Durum",
|
||||
"@status": {},
|
||||
"expectedAckTag": "Expected ACK tag",
|
||||
"expectedAckTag": "Beklenen ACK etiketi",
|
||||
"@expectedAckTag": {},
|
||||
"roundTrip": "Round-trip",
|
||||
"roundTrip": "Gidiş dönüş",
|
||||
"@roundTrip": {},
|
||||
"retryAttempt": "Retry attempt",
|
||||
"retryAttempt": "Yeniden deneme sayısı",
|
||||
"@retryAttempt": {},
|
||||
"floodFallback": "Flood fallback",
|
||||
"floodFallback": "Flood yedeği",
|
||||
"@floodFallback": {},
|
||||
"identity": "Identity",
|
||||
"identity": "Kimlik",
|
||||
"@identity": {},
|
||||
"messageId": "Message ID",
|
||||
"messageId": "Mesaj kimliği",
|
||||
"@messageId": {},
|
||||
"sender": "Sender",
|
||||
"sender": "Gönderen",
|
||||
"@sender": {},
|
||||
"senderKey": "Sender key",
|
||||
"senderKey": "Gönderen anahtarı",
|
||||
"@senderKey": {},
|
||||
"recipient": "Recipient",
|
||||
"recipient": "Alıcı",
|
||||
"@recipient": {},
|
||||
"recipientKey": "Recipient key",
|
||||
"recipientKey": "Alıcı anahtarı",
|
||||
"@recipientKey": {},
|
||||
"voice": "Ses",
|
||||
"@voice": {},
|
||||
"voiceId": "Voice ID",
|
||||
"voiceId": "Ses kimliği",
|
||||
"@voiceId": {},
|
||||
"envelope": "Envelope",
|
||||
"envelope": "Zarf",
|
||||
"@envelope": {},
|
||||
"sessionProgress": "Session progress",
|
||||
"sessionProgress": "Oturum ilerlemesi",
|
||||
"@sessionProgress": {},
|
||||
"complete": "Tamamlandı",
|
||||
"@complete": {},
|
||||
"rawDump": "Raw dump",
|
||||
"rawDump": "Ham döküm",
|
||||
"@rawDump": {},
|
||||
"cannotRetryMissingRecipient": "Cannot retry: recipient information missing",
|
||||
"cannotRetryMissingRecipient": "Yeniden denenemiyor: alıcı bilgisi eksik",
|
||||
"@cannotRetryMissingRecipient": {},
|
||||
"voiceUnavailable": "Ses şu anda kullanılamıyor",
|
||||
"@voiceUnavailable": {},
|
||||
"requestingVoice": "Requesting voice",
|
||||
"requestingVoice": "Ses isteniyor",
|
||||
"@requestingVoice": {}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -267,6 +267,7 @@ class _MessagesTabState extends State<MessagesTab> {
|
||||
/// Show recipient selector bottom sheet
|
||||
void _showRecipientSelector() {
|
||||
final contactsProvider = context.read<ContactsProvider>();
|
||||
final messagesProvider = context.read<MessagesProvider>();
|
||||
|
||||
// Filter contacts by type
|
||||
final contacts = contactsProvider.contacts
|
||||
@@ -287,6 +288,13 @@ class _MessagesTabState extends State<MessagesTab> {
|
||||
contacts: contacts,
|
||||
rooms: rooms,
|
||||
channels: channels,
|
||||
unreadCount: messagesProvider.unreadCount,
|
||||
unreadCountsByPublicKey: {
|
||||
for (final contact in [...contacts, ...rooms, ...channels])
|
||||
contact.publicKeyHex: messagesProvider.getUnreadCountForDestination(
|
||||
contact,
|
||||
),
|
||||
},
|
||||
currentDestinationType: _destinationType,
|
||||
currentRecipientPublicKey: _selectedRecipient?.publicKeyHex,
|
||||
onSelect: _onRecipientSelected,
|
||||
|
||||
@@ -8,6 +8,8 @@ class RecipientSelectorSheet extends StatefulWidget {
|
||||
final List<Contact> contacts;
|
||||
final List<Contact> rooms;
|
||||
final List<Contact> channels;
|
||||
final int unreadCount;
|
||||
final Map<String, int> unreadCountsByPublicKey;
|
||||
final String? currentDestinationType;
|
||||
final String? currentRecipientPublicKey;
|
||||
final Function(String type, Contact? recipient) onSelect;
|
||||
@@ -17,6 +19,8 @@ class RecipientSelectorSheet extends StatefulWidget {
|
||||
required this.contacts,
|
||||
required this.rooms,
|
||||
required this.channels,
|
||||
required this.unreadCount,
|
||||
required this.unreadCountsByPublicKey,
|
||||
this.currentDestinationType,
|
||||
this.currentRecipientPublicKey,
|
||||
required this.onSelect,
|
||||
@@ -143,6 +147,7 @@ class _RecipientSelectorSheetState extends State<RecipientSelectorSheet> {
|
||||
icon: Icons.all_inbox,
|
||||
title: l10n.showAll,
|
||||
subtitle: 'All messages',
|
||||
unreadCount: widget.unreadCount,
|
||||
isSelected: _isSelected('all', null),
|
||||
onTap: () {
|
||||
widget.onSelect('all', null);
|
||||
@@ -186,6 +191,9 @@ class _RecipientSelectorSheetState extends State<RecipientSelectorSheet> {
|
||||
subtitle: channel.isPublicChannel
|
||||
? l10n.broadcastToAllNearby
|
||||
: '${l10n.channel} ${channel.publicKey[1]}', // Show slot number
|
||||
unreadCount:
|
||||
widget.unreadCountsByPublicKey[channel.publicKeyHex] ??
|
||||
0,
|
||||
isSelected: _isSelected('channel', channel),
|
||||
onTap: () {
|
||||
widget.onSelect('channel', channel);
|
||||
@@ -231,6 +239,9 @@ class _RecipientSelectorSheetState extends State<RecipientSelectorSheet> {
|
||||
contact: contact,
|
||||
title: contact.displayName,
|
||||
subtitle: contact.publicKeyShort,
|
||||
unreadCount:
|
||||
widget.unreadCountsByPublicKey[contact.publicKeyHex] ??
|
||||
0,
|
||||
isSelected: _isSelected('contact', contact),
|
||||
onTap: () {
|
||||
widget.onSelect('contact', contact);
|
||||
@@ -276,6 +287,8 @@ class _RecipientSelectorSheetState extends State<RecipientSelectorSheet> {
|
||||
contact: room,
|
||||
title: room.displayName,
|
||||
subtitle: room.publicKeyShort,
|
||||
unreadCount:
|
||||
widget.unreadCountsByPublicKey[room.publicKeyHex] ?? 0,
|
||||
isSelected: _isSelected('room', room),
|
||||
onTap: () {
|
||||
widget.onSelect('room', room);
|
||||
@@ -326,6 +339,7 @@ class _RecipientSelectorSheetState extends State<RecipientSelectorSheet> {
|
||||
required Contact contact,
|
||||
required String title,
|
||||
required String subtitle,
|
||||
required int unreadCount,
|
||||
required bool isSelected,
|
||||
required VoidCallback onTap,
|
||||
}) {
|
||||
@@ -351,12 +365,11 @@ class _RecipientSelectorSheetState extends State<RecipientSelectorSheet> {
|
||||
).textTheme.bodySmall?.color?.withValues(alpha: 0.6),
|
||||
),
|
||||
),
|
||||
trailing: isSelected
|
||||
? Icon(
|
||||
Icons.check_circle,
|
||||
color: Theme.of(context).colorScheme.primary,
|
||||
)
|
||||
: null,
|
||||
trailing: _buildTrailing(
|
||||
context,
|
||||
unreadCount: unreadCount,
|
||||
isSelected: isSelected,
|
||||
),
|
||||
onTap: onTap,
|
||||
);
|
||||
}
|
||||
@@ -366,6 +379,7 @@ class _RecipientSelectorSheetState extends State<RecipientSelectorSheet> {
|
||||
required IconData icon,
|
||||
required String title,
|
||||
required String subtitle,
|
||||
required int unreadCount,
|
||||
required bool isSelected,
|
||||
required VoidCallback onTap,
|
||||
}) {
|
||||
@@ -395,13 +409,51 @@ class _RecipientSelectorSheetState extends State<RecipientSelectorSheet> {
|
||||
).textTheme.bodySmall?.color?.withValues(alpha: 0.6),
|
||||
),
|
||||
),
|
||||
trailing: isSelected
|
||||
? Icon(
|
||||
Icons.check_circle,
|
||||
color: Theme.of(context).colorScheme.primary,
|
||||
)
|
||||
: null,
|
||||
trailing: _buildTrailing(
|
||||
context,
|
||||
unreadCount: unreadCount,
|
||||
isSelected: isSelected,
|
||||
),
|
||||
onTap: onTap,
|
||||
);
|
||||
}
|
||||
|
||||
Widget? _buildTrailing(
|
||||
BuildContext context, {
|
||||
required int unreadCount,
|
||||
required bool isSelected,
|
||||
}) {
|
||||
if (unreadCount <= 0 && !isSelected) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
if (unreadCount > 0)
|
||||
Container(
|
||||
key: Key('unread-badge-$unreadCount'),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
|
||||
decoration: BoxDecoration(
|
||||
color: Theme.of(context).colorScheme.primary,
|
||||
borderRadius: BorderRadius.circular(999),
|
||||
),
|
||||
child: Text(
|
||||
unreadCount > 99 ? '99+' : '$unreadCount',
|
||||
style: TextStyle(
|
||||
color: Theme.of(context).colorScheme.onPrimary,
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.w700,
|
||||
),
|
||||
),
|
||||
),
|
||||
if (unreadCount > 0 && isSelected) const SizedBox(width: 8),
|
||||
if (isSelected)
|
||||
Icon(
|
||||
Icons.check_circle,
|
||||
color: Theme.of(context).colorScheme.primary,
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user