From 63783e1d49f63d48f47b5af95d7a65e4680ff63a Mon Sep 17 00:00:00 2001 From: Kseniia Date: Wed, 14 Apr 2021 11:03:31 +0300 Subject: [PATCH 01/18] fix search result for interpolation, 11346 --- .../net/osmand/search/core/SearchCoreFactory.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/search/core/SearchCoreFactory.java b/OsmAnd-java/src/main/java/net/osmand/search/core/SearchCoreFactory.java index d00bf9ffb2..d720dc51ec 100644 --- a/OsmAnd-java/src/main/java/net/osmand/search/core/SearchCoreFactory.java +++ b/OsmAnd-java/src/main/java/net/osmand/search/core/SearchCoreFactory.java @@ -1317,7 +1317,13 @@ public class SearchCoreFactory { || !phrase.isSearchTypeAllowed(ObjectType.HOUSE)) { continue; } - res.localeName = b.getName(phrase.getSettings().getLang(), phrase.getSettings().isTransliterate()); + if(interpolation) { + res.localeName = lw; + res.location = b.getLocation(b.interpolation(lw)); + } else { + res.localeName = b.getName(phrase.getSettings().getLang(), phrase.getSettings().isTransliterate()); + res.location = b.getLocation(); + } res.otherNames = b.getAllNames(true); res.object = b; res.file = file; @@ -1328,12 +1334,6 @@ public class SearchCoreFactory { res.relatedObject = s; res.localeRelatedObjectName = s.getName(phrase.getSettings().getLang(), phrase.getSettings().isTransliterate()); res.objectType = ObjectType.HOUSE; - if(interpolation) { - res.location = b.getLocation(b.interpolation(lw)); - res.localeName = lw; - } else { - res.location = b.getLocation(); - } res.preferredZoom = 17; resultMatcher.publish(res); From 69e983df146b1c86fc6c4a323577c13f4bb43f9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Morais?= Date: Tue, 13 Apr 2021 15:49:07 +0000 Subject: [PATCH 02/18] Translated using Weblate (Portuguese) Currently translated at 100.0% (3717 of 3717 strings) --- OsmAnd/res/values-pt/strings.xml | 290 +++++++++++++++---------------- 1 file changed, 145 insertions(+), 145 deletions(-) diff --git a/OsmAnd/res/values-pt/strings.xml b/OsmAnd/res/values-pt/strings.xml index eaa5dd4833..a01b42c27c 100644 --- a/OsmAnd/res/values-pt/strings.xml +++ b/OsmAnd/res/values-pt/strings.xml @@ -20,11 +20,11 @@ Desporto Alimentação Turismo - Transporte - Indexando endereço… - Indexando mapa… - Indexando POI… - Indexando transporte… + Transportes públicos + A indexar endereços… + A indexar o mapa… + A indexar POI… + A indexar transportes… Erro de entrada/saída km km/h @@ -96,7 +96,7 @@ Não foi possível ler os dados de GPX. Mapas vetoriais offline Procurar transporte na paragem - Alterar POI + Alterar POI OSM Eliminar POI Direção da bússola Direção do movimento @@ -120,7 +120,7 @@ Favoritos Notas OSM (online) Camada superior de POI… - Origem dos mapas… + Repositório de mapas… Camada de mapa Busca por POI Utilizar um dispositivo trackball para mover o mapa. @@ -264,7 +264,7 @@ A carregar dados… A ler dados locais… O OsmAnd foi interrompido inesperadamente. O ficheiro de registo encontra-se em {0}. Por favor, relate o problema e inclua o ficheiro de registo. - A gravar o ficheiro GPX… + A guardar o ficheiro GPX… Concluído Utilizar a Internet para calcular uma rota. Utilizar navegação online @@ -341,7 +341,7 @@ Edifício Rua transversal Atualizar mapa - Criar POI OSM + Criar POI Sim Cancelar Aplicar @@ -646,7 +646,7 @@ Pesquisa por localização geográfica Sistema Idioma de visualização da aplicação (após reinicialização do OsmAnd). - Linguagem + Idioma Seguinte Anterior Alterar a unidade de medida de distância. @@ -689,9 +689,9 @@ Mostrar curvas de nível Aumentar o nível de detalhe do mapa. Ver mais detalhes no mapa - Rotunda: saia na saída %1$d para - Mantenha-se à esquerda e continue - Mantenha-se à direita e continue + Rotunda: saia na %1$dª saída para + Mantenha-se à esquerda e continue em + Mantenha-se à direita e continue em Assim que possível Público Identificável @@ -706,7 +706,7 @@ Selecione o tipo de estacionamento Tempo limitado Sem limite de tempo - Adicionar uma notificação à aplicação Calendário + Adicionar notificação ao Calendário Estacionamento com limite de tempo Estacionamento sem limite de tempo A localização do seu veículo estacionado. %1$s @@ -717,7 +717,7 @@ Permite gravar onde o seu carro foi estacionado e quanto tempo de estacionamento resta (se houver um limite de tempo). \nA localização e o tempo ficam visíveis no painel de controlo do OsmAnd e num widget no ecrã do mapa. Um alarme pode ser adicionado ao calendário Android como lembrete. Local de estacionamento - Marcar como local de estacionamento + Marcar local de estacionamento Eliminar um marcador de estacionamento Ponto de partida demasiado distante da estrada mais próxima. Local partilhado @@ -866,7 +866,7 @@ Eliminar este item\? Gravar nota de áudio Gravar nota de vídeo - Camada de gravação + Camada trilhos gravados Não foi possível reproduzir a gravação. Eliminar a gravação Reproduzir @@ -985,7 +985,7 @@ Lat. %1$.3f, Lon. %2$.3f Para: Via: - Desde: + De: Destino %1$s Definir como destino Selecione primeiro a cidade ou rua @@ -1226,7 +1226,7 @@ \n \nToque longo para ver no mapa" Iniciar a orientação passo a passo automaticamente - selecionado + selecionado(s) Intervalo de divisão Ponto de rota: %1$s Distância: %1$s (%2$s pontos ) @@ -1287,9 +1287,9 @@ Descarregar novo mapa Idioma do mapa Zona - Todos os descarregamentos + Disponíveis Atualizações - Local + Descarregados Não é possível descarregar. Verifique se tem ligação à Internet. Todos os ficheiros foram atualizados Usar o renderizador OpenGL @@ -1324,7 +1324,7 @@ Copiar Filtrar por nome Digite para pesquisar tudo - Abrir + Aberto agora Assistente de mapeador OSM Informação A-GPS Gerir @@ -1348,7 +1348,7 @@ Descarregar compilações noturnas. Especifique um servidor proxy. Gerir - Transporte + Transportes públicos Rotas de elétricos e comboios Iluminação pública Predefinido @@ -1385,7 +1385,7 @@ Desativar Ativado Desativado - Selecionado + Selecionado(s) Desmarcar Desmarcar tudo Exportar @@ -1493,7 +1493,7 @@ Taxa de bits do áudio Escolha a taxa de bits do áudio. POI do OSM eliminado - Abrir nota OSM + Criar nota OSM Reabrir nota OSM Nota do OSM comentada Nota do OSM adicionada @@ -1523,7 +1523,7 @@ Mostrar mapa Define o sinalizador que indica a primeira inicialização da aplicação, mantém todas as outras configurações inalteradas. Simular arranque inicial da aplicação - geo: + Outras aplicações de mapas Partilhar localização Enviar Executar em segundo plano @@ -1626,7 +1626,7 @@ \n- Sincronizar grupos e dispositivos com o servidor; \n- Gerir grupos e dispositivos num painel de controlo pessoal no site web. Utilizador anónimo - Conectado como %1$s + Sessão iniciada como %1$s Não selecionado Mês e país: Tamanho das atualizações @@ -1675,7 +1675,7 @@ Número de destinatários Edições %1$s, posição %2$s, total de edições %3$s Classificação de editores do OSM - Assinatura do OsmAnd Live + Subscrição do OsmAnd Live Subscrever Necessário para o informar sobre as suas contribuições. Nome público @@ -1706,7 +1706,7 @@ Inserir nome do país Nova versão Primeiros passos com o OsmAnd - Escolha onde pretende guardar os ficheiros de mapas e de outros dados. + Escolha onde pretende guardar os ficheiros de mapas e outros dados. Outros Ativar a navegação para mudanças do OsmAnd Live. Navegação OsmAnd Live @@ -1725,10 +1725,10 @@ Obrigado por apoiar o OsmAnd! \nPara ativar todos os novos recursos tem que reiniciar o OsmAnd. Parte da sua doação será enviada aos utilizadores OSM que submetem alterações ao mapa nessa região. - Configurações da assinatura - Por favor primeiro compre a assinatura do OsmAnd Live - Esta assinatura permite atualizações hora a hora de todos os mapas à volta do mundo. -\nParte da renda regressa à comunidade do OpenStreetMap e paga-se para cada contribuição no OpenStreetMap. + Configurações da subscrição + Por favor primeiro compre a subscrição do OsmAnd Live + Esta subscrição permite atualizações hora a hora de todos os mapas à volta do mundo. +\nParte da renda regressa à comunidade do OpenStreetMap e é paga para cada contribuição no OpenStreetMap. \nSe gosta do OsmAnd e do OpenStreetMap e quer apoiar e ser apoiado por eles, esta é a maneira perfeita para o fazer. Selecione o marcador do mapa Outros marcadores @@ -1751,7 +1751,7 @@ Remover todos os marcadores ativos\? Limpar o histórico dos marcadores de mapa\? Marcadores ativos - Marcadores de mapa + Marcadores Marcador de mapa É recomendável desativar a renderização de polígono. Mostrar trilhos de bicicletas de montanha @@ -1764,7 +1764,7 @@ Remover Ler mais Remover atualizações descarregadas e voltar à edição do mapa original - Adicionar intervalo de tempo + Adicionar intervalo de tempo adicional Estrada bloqueada Selecionar Inverter ponto de partida e destino @@ -1802,9 +1802,9 @@ Siga-nos Ignorar o descarregamento de mapas - Obter direções e descobrir novos lugares sem ligação à Internet + Obtenha direções e descubra novos lugares sem ser necessário estar ligado à Internet Ignorar - Selecione outra região + Selecionar outra região Alterar Cartão de memória Não tem nenhum mapa off-line instalado. Pode escolher um mapa na lista ou descarregar mapas mais tarde através do \'menu - %1$s\'. @@ -1903,7 +1903,7 @@ Fotos on-line Adicionar fotos Não há fotos aqui. - Partilhe a sua vista ao nível da rua através do Mapillary. + Partilhe as suas imagens ao nível do solo no Mapillary. Widget Mapillary Permite contribuir rapidamente para o Mapillary. Fotos on-line ao nível da rua para todos. Descubra locais, colabore, capture o mundo. @@ -1925,7 +1925,7 @@ Compre e instale a extensão \'Curvas de nível\' para mostrar as áreas verticais graduadas. Esquema de cores Mostrar a partir do nível de ampliação - Permitir acesso privado + Ativar acesso a vias privadas Permitir acesso a áreas privadas. Mostrar nível de zoom: %1$s Nome do grupo @@ -2076,10 +2076,10 @@ Eliminar filtro Novo filtro Por favor introduza o nome do novo filtro, este vai ser adicionado ao separador \'Categorias\'. - A assinatura é cobrada no período selecionado. Cancele a assinatura no Google Play a qualquer altura. + A subscrição é debitada no período selecionado. Cancele a subscrição no Google Play a qualquer altura. Doação para a comunidade OpenStreetMap - Parte da sua doação é enviada aos colaboradores do OSM. O custo da assinatura permanece o mesmo. - A subscrição permite atualizações a cada hora, diárias, semanais e descarregamentos ilimitados de todos os mapas globalmente. + Parte do seu donativo é enviado aos colaboradores do OpenStreetMap. O custo da subscrição permanece o mesmo. + A subscrição permite atualizações a cada hora, dia ou semana e descarregamentos ilimitados de todos os mapas globalmente. Obter Comprar por %1$s Obter descarregamentos ilimitados de mapas, adicionando atualizações semanais, diárias e a cada hora. @@ -2102,7 +2102,7 @@ Tem a certeza que quer substituir o favorito %1$s\? Objetos à superfície Começar - %1$s paragens antes + %1$s paragens anteriores Pesquisa de coordenadas Pesquisa avançada de coordenadas Retroceder para pesquisa @@ -2126,7 +2126,7 @@ Editar ações Adquira o OsmAnd Live para desbloquear todas as funcionalidades: atualizações diárias de mapas com descarregamentos ilimitados, todas as extensões pagas e gratuitas, Wikipédia, Wikivoyage e muito mais. Alteração do estilo padrão para aumentar o contraste de caminhos pedestres e ciclovias. Usa cores clássicas do Mapnik. - Marcador + Favorito Esconder descrição completa Mostrar a descrição completa Obrigado pelos seus comentários @@ -2139,7 +2139,7 @@ Eliminar o marcador de mapa \'%s\'\? Editar marcador de mapa Aplicação de terceiros - Primeiro especificar cidade/sítio/localidade + Pesquisa progressiva cidade>vila>aldeia Planos e preços Mensalmente A cada três meses @@ -2147,7 +2147,7 @@ %1$s / mês %1$.2f %2$s / mês Poupe %1$s - Assinatura atual + Subscrição atual Renova mensalmente Renova trimestralmente Renova anualmente @@ -2164,15 +2164,15 @@ Estilo de propósito geral. Renderização simplificada e limpa em cidades densamente povoadas. Características principais: curvas de nível, rotas, qualidade de superfície, restrições de acesso, escudos rodoviários, caminhos de renderização de acordo com a escala SAC, características desportivas Whitewater. Abrir página da Wikipédia na Internet A hiperligação será aberta no navegador de Internet. - Obtenha uma assinatura do OsmAnd Live para ler artigos da Wikipédia e da Wikivoyage desligado da Internet. + Obtenha uma subscrição do OsmAnd Live para ler artigos da Wikipédia e da Wikivoyage desligado da Internet. Como abrir a hiperligação\? Ler a Wikipédia desligado da Internet Descarregar tudo Reiniciar a aplicação Mostrar imagens - Cancelou a sua assinatura do OsmAnd Live - Renovar assinatura para continuar a utilizar todas as funcionalidades: - Com base nos artigos que marcou, sugerimos que descarregue os seguintes mapas: + Cancelou a sua subscrição do OsmAnd Live + Renovar a subscrição para continuar a utilizar todas as funcionalidades: + Com base nos artigos que marcou como favoritos, sugerimos que descarregue os seguintes mapas: Mapas que precisa Equipa do OsmAnd Destinos populares @@ -2187,7 +2187,7 @@ Pode e deve editar qualquer artigo no Wikivoyage. Partilhe saber, experiência, talento e a sua atenção. Começar a editar Obter acesso ilimitado - Bem-vindo ao beta aberto + Bem-vindo à versão beta aberta Guias de viagem Guias para os lugares mais interessantes do mundo dentro do OsmAnd, sem uma conexão com a Internet. Atualizações de mapas mensais @@ -2209,7 +2209,7 @@ Apenas em Wi-Fi Descarregar imagens As imagens do artigo podem ser descarregadas para uso offline. -\nSempre disponível em \'Explorar\' → \' Opções \'. +\nConfigure em \'Explorar\' → \' Opções \'. Apenas em Wi-Fi Selecione um livro de viagem Livro de viagens @@ -2222,7 +2222,7 @@ Artigo removido Pesquisar por país, cidade ou província Ler - Artigos marcados + Artigos favoritos Explorar Conteúdo Resultado @@ -2250,7 +2250,7 @@ S N Nome do ponto (opcional) - Rotas próximas dentro de + Rotas próximas a menos de A menos de Digite o nome do ficheiro. Erro ao importar mapa @@ -2280,8 +2280,8 @@ Ler o artigo completo Ler o artigo Todos os pontos do grupo - Aberto desde as - Aberto até às + Abre às + Fecha às Fecha às Abre às Abre às @@ -2292,7 +2292,7 @@ Ações Marcador Criar ou alterar objetos OSM - Criar ou alterar POIs do OSM, abrir ou comentar notas do OSM e contribuir com ficheiros de GPX gravados. + Criar ou alterar POIs do OSM, criar ou comentar notas do OSM e contribuir com ficheiros de GPX gravados. Eliminado Editado Adicionado @@ -2350,8 +2350,8 @@ Ida e volta Tem de adicionar pelo menos um marcador para usar esta função. Não foi possível alterar a nota. - Alterar nota - Alterar nota do OSM + Alterar nota do OpenStreetMap + Alterar nota Adicionar cópia do ponto de partida como destino. Fazer viagem de ida e volta Artigos Wikivoyage mundiais @@ -2363,7 +2363,7 @@ Distrito Bairro Procurar - Aberto 24/7 + Sempre aberto (24/7) Formato de coordenadas Formato para as coordenadas geográficas. Autocarro @@ -2391,13 +2391,13 @@ Laociano Osseta Espanhol (americano) - Espanhol (Argentina) + Espanhol (argentino) Norueguês Bokmål Volapuque Tailandês Telugu - Norueguês (Nynorsk) - Neuari / Nepalbhasa + Novo norueguês + Neuari Malásio Haitiano Galego @@ -2406,7 +2406,7 @@ Asturiano Alto sorábio Cabila - Berberes + Berber Impedir a gravação autónoma Esta extensão enriquece o mapa do OsmAnd para também produzir mapas náuticos para passeios de barco, vela e outros tipos de desportos aquáticos. \n @@ -2661,7 +2661,7 @@ Enviar POI Básico Avançado - Número de edifício + Número de porta Próximo Abre às Fecha às @@ -2791,7 +2791,7 @@ Toque num botão e ouça a mensagem de voz dele correspondente para ouvir se está ausente ou avariado Por OsmAnd Código de localização aberto (OLC) - Assinaturas + Subscrições Mostrar apenas imagens de 360° Lançar Guarani @@ -2842,7 +2842,7 @@ Não pavimentado Areia Relva - Blocos cimento perfurados + Blocos de cimento perfurados Terra Terra (lodosa) Lama @@ -2931,23 +2931,23 @@ Tente alterar a configuração. Calcular a rota pedestre Tipo de transporte - Procurando GPS + A procurar GPS Widget de coordenadas Por favor envie os seus comentários e avalie o nosso trabalho no Google Play. Política de privacidade Ajude-nos a melhorar o OsmAnd - Permitir que OsmAnd recolha e processe dados anónimos de utilização da aplicação. Nenhuns dados sobre a sua posição, nem sobre as localizações que visualiza no mapa são recolhidos. + Permitir que OsmAnd recolha e processe dados anónimos de utilização da aplicação. Não são recolhidos nenhuns dados sobre a sua posição, nem sobre as localizações que visualiza no mapa. \n -\nConfigure a qualquer momento em \'Configurações\' → \'Privacidade e Segurança\'. +\nConfigure a qualquer momento em \'Configurações\' → \'Privacidade e segurança\'. Escolha o tipo de dados que pretende partilhar: Mapas descarregados - Ecrãs vistos - Define quais os dados que permite que OsmAnd partilhe. - Ajuda-nos a compreender a popularidade de mapas de países e regiões. - Ajuda-nos a entender a popularidade dos recursos no OsmAnd. + Ecrãs visualizados + Define que dados que permite o OsmAnd partilhar. + Permite-nos compreender a popularidade dos mapas de países e regiões. + Permite-nos entender a popularidade dos recursos no OsmAnd. Toque em \"Permitir\" se concordar com %1$s Privacidade e segurança - Escolha que dados partilha + Escolha os dados que quer partilhar Não, obrigado Permitir Nome do perfil @@ -2986,8 +2986,8 @@ Bicicleta de montanha, ciclomotor, cavalo Andar, caminhar, correr Categorias de transportes públicos - Navio, remar, navegar - Avião, asa-delta + Barco, remo, vela + Avião, parapente Geocodificação Linha reta BRouter (offline) @@ -3028,7 +3028,7 @@ Velocidade mínima Velocidade máxima Velocidade predefinida - Alterar as predefinições de velocidade + Alterar as velocidades predefinidas Definir a velocidade mínima/máxima Novo perfil Encravou @@ -3066,8 +3066,8 @@ Selecione as opções de mapa para o perfil Selecionar opções de ecrã para o perfil Selecione as configurações de navegação para o perfil - Especificar o limite máximo de alterações - Quantidade de transferências + Especificar o limite máximo de transbordos + Número de transbordos Despertar na curva Ajuste por quanto tempo o ecrã deve ficar ligado. Utilizar sensor de proximidade @@ -3097,7 +3097,7 @@ Abrir trilho O trilho %s está guardado Mostrar zonas de baixas emissões (proibida circulação de veículos poluentes) no mapa. Não afeta o roteamento. - Mostrar zonas de baixas emissões + Mostrar zonas de baixas emissões poluentes Considerar limitações temporárias Padrão Rota: distância %1$s, tempo do roteador %2$s \nCálculo: %3$.1f seg, %4$d estradas, %5$d telhas) @@ -3137,7 +3137,7 @@ Aplicar só a \"%1$s\" Aplicar a todos os perfis Mensagem de inicialização - Análises + Enviar dados anónimos Mostrar mapa no ecrã de bloqueio durante a navegação. Configurações de roteamento no perfil selecionado \"%1$s\". Tempo limite após despertar @@ -3180,7 +3180,7 @@ \n%1$s > %2$s Insira o caminho para a pasta Pasta… - Colar caminho para a pasta com dados OsmAnd + Colar caminho para a pasta com dados do OsmAnd Alterar a pasta de dados OsmAnd\? Mover para o novo destino Armazenamento interno para OsmAnd (oculto aos utilizadores e outras aplicações). @@ -3250,7 +3250,7 @@ \n - Outras correções de erros \n \n - Pode aplicar esta alteração a todos ou apenas ao perfil atualmente selecionado. + Pode aplicar esta alteração a todos os perfis ou apenas ao atualmente selecionado. Partilhado Preferir estradas não pavimentadas Preferir estradas não pavimentadas sobre as pavimentadas para o roteamento. @@ -3262,7 +3262,7 @@ %1$s • %2$s %1$s, %2$s Pessoal - Descarregando %s + A descarregar %s Grosso Para desertos e outras áreas pouco povoadas. Mais detalhado. Ícone de posição durante a movimentação @@ -3284,7 +3284,7 @@ O perfil \'%1$s\' já existe. Substituir\? Não foi possível exportar o perfil. Importar perfil - Adicione um perfil abrindo o seu ficheiro com OsmAnd. + Adicione um perfil abrindo o seu ficheiro com o OsmAnd. %1$s erro de importação: %2$s %1$s importado(s). Trocar %1$s por %2$s @@ -3352,8 +3352,8 @@ A importar dados de %1$s Tem a certeza que quer limpar os dados gravados\? Não foi possível fazer a cópia de segurança do perfil. - Gravando novo perfil - Restaurar todas as configurações de perfil\? + A guardar o novo perfil + Restaurar todas as configurações do perfil\? Todas as configurações do perfil serão restauradas para o seu estado original após a criação/importação deste perfil. Importar ficheiro de renderização Estilo de renderização @@ -3372,8 +3372,8 @@ Nada selecionado Tipos de POI A preparar - Ângulo mínimo entre minha localização e rota - Segmento reto adicional entre a minha localização e a rota calculada será mostrada até que a rota seja recalculada + Ângulo mínimo entre a minha localização e a rota + Será mostrado o segmento reto adicional entre a minha localização e a rota calculada até que a rota seja recalculada Ângulo Ângulo: %s° Perfil personalizado @@ -3393,7 +3393,7 @@ \nA extensão permanecerá no dispositivo após remover o OsmAnd. Extensão desativada Abrir configurações - Forneça um nome para o perfil + Atribua um nome ao perfil Classificar por categoria Direto ao ponto Copiar coordenadas @@ -3435,9 +3435,9 @@ Todas as configurações da extensão foram repostas para os valores de origem. Adicionar categoria personalizada Disponível - \'Restaurar valores predefinidos\' redefinirá a ordem de ordenação para os valores de origem. + \'Restaurar valores predefinidos\' irá repor a ordenação de origem. Pode adicionar uma nova categoria personalizada selecionando uma ou mais categorias. - Altere a ordem de ordenação da lista, oculte categorias. Pode importar ou exportar todas as alterações com perfis. + Altere a ordenação da lista e oculte categorias. Pode importar ou exportar todas as alterações com perfis. Reorganizar categorias Autorização bem sucedida Som do obturador da câmara @@ -3453,8 +3453,8 @@ Intervalo de rastreamento Memória intermédia Recomendação: uma configuração de 5 metros pode funcionar bem se não precisar capturar detalhes mais refinados do que isso e não quer capturar dados explicitamente enquanto estiver parado. - Efeitos colaterais: os períodos em que está parado não são registados em absoluto ou em apenas um ponto cada. Pequenos movimentos (do mundo real) (por exemplo, de lado, para marcar um possível desvio na sua viagem) podem ser filtrados. O seu ficheiro contém menos informações para pós-processamento e possui estatísticas piores ao filtrar pontos obviamente redundantes no tempo de gravação, mantendo potencialmente artefactos causados por má receção ou efeitos de chipset GPS. - Este filtro evita que pontos duplicados sejam gravados onde muito pouco movimento real possa ter ocorrido, cria uma aparência espacial mais agradável dos trilhos que não são processados posteriormente. + Efeitos colaterais: os períodos em que está parado não são registados em absoluto ou em apenas um ponto cada. Pequenos movimentos (no mundo real, por exemplo de lado, para marcar um possível desvio na sua viagem) podem ser filtrados. O seu ficheiro contém menos informações para pós-processamento e possui estatísticas piores ao filtrar pontos obviamente redundantes no tempo de gravação, mantendo potencialmente os artefactos causados por má receção ou efeitos do chipset GPS. + Este filtro evita que sejam gravados pontos duplicados onde ocorrer muito pouco movimento real, cria uma aparência espacial mais agradável dos trilhos que não são processados posteriormente. Observação: se o GPS estava desligado imediatamente antes de uma gravação, o primeiro ponto medido pode ter uma precisão diminuída; portanto, no nosso código, podemos esperar um segundo antes da gravação de um ponto (ou gravar o melhor de três pontos consecutivos, etc.), mas isso ainda não foi implementado. Recomendação: é difícil prever o que será gravado e o que não será, talvez seja melhor desativar este filtro. Efeito colateral: como resultado da filtragem por precisão, os pontos podem estar totalmente ausentes por ex. debaixo de pontes, sob árvores, entre prédios altos ou com certas condições climáticas. @@ -3468,7 +3468,7 @@ Verifique e partilhe registos detalhados da aplicação Ícone mostrado quando parado. Ícone mostrado ao navegar ou mover. - Veja todas as suas edições ainda não enviadas ou bugs OSM em %1$s. Os pontos enviados não vão aparecer no OsmAnd. + Veja todas as suas edições ainda não enviadas ou notas do OpenStreetMap em %1$s. Os pontos enviados deixarão de aparecer nessa lista. Edição OSM Estas configurações da extensão são globais e aplicam-se a todos os perfis Utilizador e palavra-passe @@ -3476,12 +3476,12 @@ Recálculo da rota Notas fotográficas Notas de vídeo - Pode encontrar todas as suas notas em %1$s. + Pode encontrar todas as suas notas OSM em %1$s. Pode encontrar todos os seus trilhos gravados em %1$s ou na pasta OsmAnd. Precisão de registo Rastreamento online Permite partilhar a localização atual usando a gravação de viagem. - Escolha ícone, cor e nome + Escolha o ícone, cor e nome Utilizador, palavra-passe, edição offline Tamanho da imagem, qualidade de áudio e vídeo Navegação, precisão de registo @@ -3529,9 +3529,9 @@ Régua radial Medir distância Viagem (Wikivoyage e Wikipédia) - Marcadores de mapa + Marcadores Favoritos - Assinatura - OsmAnd Live + Subscrição - OsmAnd Live Compras de OsmAnd O guia para a simbologia de um mapa. Perfis de navegação @@ -3539,9 +3539,9 @@ %1$s / %2$s O pagamento será debitado na sua conta Google Play na confirmação da compra. \n -\n A assinatura é renovada automaticamente, a menos que seja cancelada antes da data de renovação. A sua conta será cobrada pelo período de renovação (mês/três meses/ano) apenas na data de renovação. +\nA subscrição é renovada automaticamente, a não ser que seja cancelada antes da data de renovação. A sua conta será cobrada pelo período de renovação (mês/três meses/ano) apenas na data de renovação. \n -\n Pode gerir e cancelar as suas subscrições, indo às suas definições do Google Play. +\nPode gerir e cancelar as suas subscrições, indo às suas definições do Google Play. Ação %1$s não suportada Mapas adicionais Alguns artigos da Wikipédia podem não estar disponíveis no seu idioma. @@ -3566,7 +3566,7 @@ Cazaque Javanês Guzerate - Tchuvache + Chuvache Checheno Bávaro Basquires @@ -3605,7 +3605,7 @@ Um ficheiro de imagem por mosaico Ficheiro SQLiteDB Forneça um nome para a origem do mapa on-line. - Insira ou cole a URL para a origem on-line. + Introduza ou cole o URL para a origem on-line. Editar origem on-line Tempo de validade Projeção de Mercator @@ -3638,7 +3638,7 @@ Kart Os alertas de radares de velocidade em alguns países são proibidos por lei. Manter ativo - Forneça um nome para o ponto + Atribua um nome ao ponto A aplicação dessas alterações limpará os dados temporários desta origem de mosaicos Este dispositivo não tem instalado o recurso de câmaras de velocidade. Em alguns países ou regiões, o uso de aplicações com avisos de radares é proibido por lei. @@ -3647,7 +3647,7 @@ \n \nSelecione %1$s e receberá alertas e avisos sobre radares de velocidade. \n -\nSelecione %2$s. Todos os dados relacionados a radares de velocidade: alertas, notificações, POIs serão apagados até que o OsmAnd seja completamente reinstalado. +\nSelecione %2$s e yodos os dados relacionados a radares de velocidade: alertas, notificações, POIs serão eliminados até que o OsmAnd seja completamente reinstalado. Obter informações sobre pontos de interesse da Wikipédia. Um guia de bolso off-line para ver artigos sobre locais e destinos. Scooter Eliminar o ponto de destino mais próximo @@ -3655,10 +3655,10 @@ Pode aceder a essas ações tocando no botão “%1$s”. Desinstalar Forneça o comprimento do seu veículo, podem ser aplicadas algumas restrições de rota a veículos longos. - Botões de volume como zoom + Botões de volume mudam o zoom Reinicie a aplicação para eliminar os dados da câmara de velocidade. %1$s eliminado - Se tocar neste botão de ação, mostra ou oculta a camada Mapillary no mapa. + Um botão que alterna entre mostrar ou ocultar a camada Mapillary no mapa. Definir altura da embarcação Motorizada de enduro Patins em linha @@ -3701,7 +3701,7 @@ Defina dias úteis para continuar Rota entre pontos Planear uma rota - Adicionar ao trilho + Adicionar a um trilho O ponto adicionado não será visível no mapa, já que o grupo selecionado está escondido, pode encontrá-lo em \"%s\". Mostrar ícones de início e fim Selecionar a largura @@ -3740,8 +3740,8 @@ Eliminar endereço Adicionar endereço Insira o endereço - Aparecer antes - Aparecer depois + Recortar antes + Recortar depois Alterar o tipo de rota antes Alterar o tipo de rota após Imagens ao nível das ruas @@ -3770,7 +3770,7 @@ Todos os segmentos anteriores Apenas o segmento selecionado será recalculado a usar o perfil selecionado. Todos os segmentos subsequentes serão recalculados a utilizar o perfil selecionado. - Todos os segmentos anteriores serão recalculados a usar o perfil selecionado. + Todos os segmentos anteriores serão recalculados usando o perfil selecionado. Abrir trilho guardado está guardado Adicione pelo menos dois pontos. @@ -3800,14 +3800,14 @@ Nome: A – Z Ícones de início e fim Obrigado por comprar \'Curvas de nível\' - A assinatura é cobrada pelo período selecionado. Cancele-a na sua AppGallery a qualquer momento. + A subscrição é cobrada pelo período selecionado. Cancele-a na sua AppGallery a qualquer momento. Ao confirmar a sua subscrição, será debitado na sua conta AppGallery. \n -\nA assinatura é renovada automaticamente, a não ser que seja cancelada antes da data de renovação. A sua conta será cobrada pelo período de renovação (mês/três meses/ano) apenas na data de renovação. +\nA subscrição é renovada automaticamente, a não ser que seja cancelada antes da data de renovação. A sua conta será cobrada pelo período de renovação (mês/três meses/ano) apenas na data de renovação. \n -\nPode gerir e cancelar as suas subscrições a ir às definições da sua AppGallery. - Evitar passeios - Evitar passeios +\nPode gerir e cancelar as suas subscrições nas definições da sua AppGallery. + Evitar vias pedonais + Evitar vias pedonais Novidades Desenvolvimento Dados do OsmAnd Live @@ -3818,12 +3818,12 @@ Inicie sessão com o OAuth para usar os recursos de edição OpenStreetMap Iniciar sessão com OAuth Limpar token do OpenStreetMap OAuth - Saiu + Sessão terminada O ficheiro já foi importado para o OsmAnd Usar algoritmo de roteamento de 2 fases A* Para a condução de motos de neve com estradas e pistas dedicadas. Gráfico - Dados de %1$s disponíveis apenas em estradas, calcule uma rota a usar \"Rota entre pontos\" para ver os gráficos. + Dados de %1$s disponíveis apenas em estradas, calcule uma rota usando \"Rota entre pontos\" para ver os gráficos. Por favor aguarde. \nO gráfico estará disponível após o recálculo da rota. %1$s — %2$s @@ -3841,34 +3841,34 @@ Emergência Viagem Adicione pelo menos dois pontos - Gerir a assinatura - Toque no botão para ir às definições de assinatura do Google Play para corrigir a sua assinatura. - A assinatura do OsmAnd Live expirou - A assinatura do OsmAnd Live foi pausada - A assinatura do OsmAnd Live está em espera + Gerir a subscrição + Toque no botão para ir às definições de assinatura do Google Play para corrigir a sua subscrição. + A subscrição do OsmAnd Live expirou + A subscrição do OsmAnd Live foi pausada + A subscrição do OsmAnd Live está em espera Tem de iniciar sessão para enviar alterações. \n \nPode iniciar sessão usando o método seguro OAuth ou usar o seu nome de utilizador e a sua palavra-passe. Iniciar sessão no OpenStreetMap Iniciar sessão no OpenStreetMap.org - Entrar com OpenStreetMap + Iniciar sessão com OpenStreetMap Usar o nome do utilizador e palavra-passe Conta Utilizador Histórico de marcadores Enviar ficheiro de GPX para o OpenStreetMap Introduza etiquetas separadas por vírgula. - \"Público\" significa que o rastreamento é mostrado publicamente em Seus traços de GPS e em listas públicas de rastreamento de GPS, e na lista pública de rastreamento com carimbos de data e hora na forma bruta. Os dados servidos através da API não fazem referência à sua página de rastreamento. Os marcadores de ponto de rastreamento não estão disponíveis através da API de GPS pública, e os pontos de rastreamento não estão ordenados cronologicamente. + \"Público\" significa que o rastreamento é mostrado publicamente nos seus traços de GPS, em listas públicas de rastreamento de GPS e na lista pública de rastreamento com carimbos de data e hora na forma bruta. Os dados servidos através da API não fazem referência à sua página de rastreamento. Os marcadores de ponto de rastreamento não estão disponíveis através da API de GPS pública, e os pontos de rastreamento não estão ordenados cronologicamente. \"Privado\" significa que o rastreamento não aparece em nenhuma listagem pública, mas os pontos de rastreamento dela em ordem não cronológica estão disponíveis através da API pública do GPS sem carimbos de tempo. \"Identificável\" significa que o rastreamento será mostrado publicamente nos seus traços de GPS e nas listas públicas de rastreamento de GPS, ou seja, outros utilizadores serão capazes de descarregar o rastreamento bruto e associá-lo ao seu nome de utilizador. Os dados públicos de pontos de rastreamento marcados com a hora da API do GPS servidos através da API de pontos de rastreamento farão referência à sua página de rastreamento original. - \"Rastreável\" significa que o rastreamento não aparece em nenhuma listagem pública, mas pontos de rastreamento processados com carimbos de tempo a partir dele (que não podem ser associados diretamente a si) fazem através de descarregadas da API pública do GPS. + \"Rastreável\" significa que o rastreamento não aparece em nenhuma listagem pública, mas pontos de rastreamento processados com carimbos de tempo a partir dele (que não podem ser associados diretamente a si) estarão disponíveis através da API pública de GPS. Fechar nota do OSM Comentário de nota do OSM Pode iniciar sessão pelo método seguro OAuth ou use o seu nome de utilizador e a palavra-passe. - Adicionar fotos - Cadastre-se em + Adicionar foto + Crie uma conta em \nOpenPlaceReviews.org - As fotos são fornecidas pelo projeto de dados abertos OpenPlaceReviews.org. Para enviar as suas fotos precisa cadastrar-se no site. + As fotos são fornecidas pelo projeto de dados abertos OpenPlaceReviews.org. Para enviar as suas fotos tem de criar uma conta no site. Criar uma conta Já tenho uma conta Histórico de pesquisa @@ -3878,14 +3878,14 @@ Tamanho aproximado do ficheiro Selecione os dados a serem exportados para o ficheiro. Necessário para a importação - O seu dispositivo só tem %1$s livres. Por favor, liberte algum espaço ou desmarque alguns itens para exportar. + O seu dispositivo só tem disponível %1$s. Liberte algum espaço ou desmarque alguns itens para exportar. Não há espaço suficiente Adicionar ao Mapillary Adicionar ao OpenPlaceReviews - OsmAnd mostra fotos de várias origens: -\nOpenPlaceReviews - fotos de POI; -\nMapillary - imagens ao nível da rua; -\nWeb / Wikimedia - fotos de POI como nos dados do OpenStreetMap. + OsmAnd mostra fotografias de várias origens: +\nOpenPlaceReviews - fotografias de POI; +\nMapillary - fotografias ao nível do solo; +\nWeb / Wikimedia - fotografias de POI definidas no OpenStreetMap. Selecionar os grupos que serão importados. Selecionar os objetos que serão importados. Utilizar dev.openstreetmap.org @@ -3894,7 +3894,7 @@ Mude para usar dev.openstreetmap.org ao invés de openstreetmap.org para testar enviar uma OSM Nota / POI / GPX. %1$s * %2$s Alemão (casual) - Aeronaves ligeiras + Aeronave ligeira Unir segmentos Dividir antes Dividir após @@ -3915,10 +3915,10 @@ URL do servidor Digite o parâmetro Mantenha-o vazio se não - O URL com todos os parâmetros parecerá-se assim: - Cálculo da rota de teste + O URL com todos os parâmetros será assim: + Testar cálculo de rota Condução - + A pé Bicicleta Carro Erro, verifique novamente os parâmetros @@ -4021,7 +4021,7 @@ Última verificação: %s Frequência da atualização Necessário reiniciar a aplicação para aplicar algumas configurações. - Período de tempo do intervalo de registo em que o OsmAnd perguntará pelos dados da posição atual. + Frequência em que o OsmAnd irá registar a localização caso o sinal GPS esteja disponível. Não tem compras Se tiver alguma dúvida, contacte-nos em %1$s. Intervalos de tempo e distância @@ -4039,7 +4039,7 @@ Permitir ribeiros e valas Perfil OsmAnd Perfil do utilizador - Permitir vias aquáticas intermitentes + Permitir cursos de água intermitentes Bicicleta de corrida BTT Segmento %1$d @@ -4075,15 +4075,15 @@ Especificar cor para o modo mapa: %1$s. Novo dispositivo / nova conta Resolução de problemas - Assinatura anual - Assinatura mensal - Assinatura de 3 meses + Subscrição anual + Subscrição mensal + Subscrição de 3 meses Próxima faturação: %1$s Em período experimental Em espera - Permitir hidrovias sazonais + Permitir cursos de água sazonais Cancelada - Renovar assinatura + Renovar subscrição Expirou Número da saída Anunciar quando ultrapassado From 189ff617041a2c41eb1323676dcaa2a29d0c4761 Mon Sep 17 00:00:00 2001 From: Ldm Public Date: Tue, 13 Apr 2021 09:59:06 +0000 Subject: [PATCH 03/18] Translated using Weblate (French) Currently translated at 100.0% (3717 of 3717 strings) --- OsmAnd/res/values-fr/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-fr/strings.xml b/OsmAnd/res/values-fr/strings.xml index 22ec8f53c2..d0249d93b8 100644 --- a/OsmAnd/res/values-fr/strings.xml +++ b/OsmAnd/res/values-fr/strings.xml @@ -301,8 +301,8 @@ Impossible de lire les données GPX. Cartes vectorielles OSM Recherche de transport pour cet arrêt - Modifier point d\'intérêt - Supprimer point d\'intérêt + Modifier le point d\'intérêt + Supprimer le point d\'intérêt D\'après la boussole Dans la direction du déplacement Aucune rotation (nord toujours en haut) From 4ff17ba467fbf804549da8c7a3aac89dbc285221 Mon Sep 17 00:00:00 2001 From: Evgenii Martynenko Date: Tue, 13 Apr 2021 17:49:08 +0000 Subject: [PATCH 04/18] Translated using Weblate (Russian) Currently translated at 100.0% (3717 of 3717 strings) --- OsmAnd/res/values-ru/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index dc63a9788a..dd9c8f6526 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -4073,7 +4073,7 @@ Обновить все карты, добавленные в %1$s\? Настройка линии маршрута Линия маршрута - Линия маршрута будет использовать %1$s, указанный в выбранном стиле карты: %2$s. + Линия маршрута будет использовать %1$s из выбранного стиля карты: %2$s. Укажите цвет для режима карты: %1$s. У вас нет покупок Новое устройство / новый аккаунт From cd3445ab394293d868f12acb8e696d9746ed4b08 Mon Sep 17 00:00:00 2001 From: Franco Date: Tue, 13 Apr 2021 14:12:17 +0000 Subject: [PATCH 05/18] Translated using Weblate (Spanish (Argentina)) Currently translated at 100.0% (3717 of 3717 strings) --- OsmAnd/res/values-es-rAR/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-es-rAR/strings.xml b/OsmAnd/res/values-es-rAR/strings.xml index 193189aa46..a994d3f430 100644 --- a/OsmAnd/res/values-es-rAR/strings.xml +++ b/OsmAnd/res/values-es-rAR/strings.xml @@ -3126,7 +3126,7 @@ Cancelar suscripción %1$s • Ahorra %2$s Ajustes para el perfil: - OsmAnd utiliza el formato UTM Estándar, similar pero no idéntico al formato UTM NATO. + OsmAnd usa el formato UTM Estándar, similar pero no idéntico al formato UTM de la OTAN. Ejemplo UTM Estándar Código de Ubicación Abierto From 61e1680c8b2bcf1364049c385e3301da86746ba1 Mon Sep 17 00:00:00 2001 From: Franco Date: Tue, 13 Apr 2021 14:12:01 +0000 Subject: [PATCH 06/18] Translated using Weblate (Spanish (American)) Currently translated at 100.0% (3717 of 3717 strings) --- OsmAnd/res/values-es-rUS/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-es-rUS/strings.xml b/OsmAnd/res/values-es-rUS/strings.xml index 80780e72e8..3fb411ea12 100644 --- a/OsmAnd/res/values-es-rUS/strings.xml +++ b/OsmAnd/res/values-es-rUS/strings.xml @@ -3125,7 +3125,7 @@ Cancelar suscripción %1$s • Ahorra %2$s Ajustes para el perfil: - OsmAnd utiliza el formato UTM Estándar, similar pero no idéntico al formato UTM NATO. + OsmAnd usa el formato UTM Estándar, similar pero no idéntico al formato UTM de la OTAN. Ejemplo UTM Estándar Código de Ubicación Abierto From 6803f77e09dadb6ffc89dcd45c2e75e2565c7eb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Morais?= Date: Tue, 13 Apr 2021 15:42:06 +0000 Subject: [PATCH 07/18] Translated using Weblate (Portuguese) Currently translated at 100.0% (3925 of 3925 strings) --- OsmAnd/res/values-pt/phrases.xml | 250 +++++++++++++++---------------- 1 file changed, 125 insertions(+), 125 deletions(-) diff --git a/OsmAnd/res/values-pt/phrases.xml b/OsmAnd/res/values-pt/phrases.xml index 0d47393185..ed7298f704 100644 --- a/OsmAnd/res/values-pt/phrases.xml +++ b/OsmAnd/res/values-pt/phrases.xml @@ -49,7 +49,7 @@ Queijaria Loja de chocolates Loja de cafés - Loja de conveniência + Loja de conveniência/minimercado Centro comercial Loja de bebidas Talho @@ -247,7 +247,7 @@ Tipo Tipo Tipo - Posição + Localização Fonte de água Forma de pagamento Som @@ -284,9 +284,9 @@ Pago Fumar Entrega ao domicílio - Serviço ao volante - Serviço ao volante - Serviço de take-away + Serviço no carro parado + Serviço a conduzir + Comida para levar Cocktails Microcervejaria Serviço @@ -967,7 +967,7 @@ Montagem de computadores Salão de beleza Manicura - Cabeleireiro + Cabeleireiro/a Salão de massagens Estúdio de tatuagem Limpeza de roupa a seco @@ -1257,7 +1257,7 @@ Outono Inverno Com semáforos - Não controlado (sem semáforo e barreira) + Não controlado (sem semáforo nem barreira) Não sinalizado (sem marcas nem semáforo) Data de início/inauguração Acesso de cadeiras de rodas @@ -1389,7 +1389,7 @@ Painel Mapa Posto de turismo - Sinalização de rota + Baliza de caminho Terminal eletrónico de informação Sinalização de rota Mapa de caminhadas @@ -1555,7 +1555,7 @@ Não aceita cheque PIKEPASS Não aceita PIKEPASS - PIKEPASS (designado) + PIKEPASS (assinalado) Cartão Visa Débito Não aceita cartão Visa Débito Não aceita criptomoedas @@ -1663,11 +1663,11 @@ Apenas livre de glúten Livre de glúten Dieta livre de glúten: não - Kosher + Kosher (judaica) Apenas kosher Kosher Dieta kosher: não - Halal + Halal (árabe) Apenas halal Halal Dieta halal: não @@ -1675,11 +1675,11 @@ Apenas livre de lactose Livre de lactose Dieta livre de lactose: não - Piscitariana + Piscitariana (peixes e vegetais) Sim - Serviço ao volante: não + Serviço a conduzir: não Sim - Serviço ao volante: não + Serviço a conduzir: não Nome da cervejaria Sim Sem microcervejaria @@ -1704,7 +1704,7 @@ Produtos usados: não Produtos usados: unicamente Peças - Representante + Representante de marca Reparação Sem reparação Reparação de veículos elétricos @@ -2022,7 +2022,7 @@ Formação: ioga Formação: arte marcial Formação: aviação - Formação: cabeleireiro + Formação: cabeleireiro/a Estrutura monumental Tipo: indústria petrolífera Tipo: poço @@ -2439,7 +2439,7 @@ Cirurgia maxilofacial Radiologia diagnóstica Gastroenterologia - Odontologia + Medicina dentária (odontologia) Nefrologia (doenças renais) Neurocirurgia Neuropsiquiatria @@ -2460,7 +2460,7 @@ Toxicologia clínica Optometria Patologia clínica - Fonoaudiologia + Fonoaudiologia (terapia da fala) Terapia manual Medicina do desporto Podologia @@ -2764,7 +2764,7 @@ Profundidade Sal Sal: não - Designado + Assinalado Rejeito de mineração Acampamento de verão Centro de recreativo @@ -2908,28 +2908,28 @@ Hambúrguer Café Sanduíches - Kebab - Döner kebab (shawarma) + Kebab (Médio Oriente) + Döner kebab (turco) Frango Gelados Sushi Peixe e batatas fritas - Frutos do mar + Marisco Churrascos - Noodles + Noodles (asiático) Donuts - Ramen + Ramen (japonês) Crepes Café da manhã - Gyudon + Gyudon (japonês) Bifes Tapas - Gastropub - Heuriger + Gastropub (inglês) + Heuriger (austríaco e alemão) Caril - Buschenschank + Buschenschank (austríaco e alemão) Grelhados - Bagel + Bagel (polaco) Café-restaurante Linguiças Bolos @@ -2949,26 +2949,26 @@ Iogurtes gelados Comida frita Panquecas salgadas - Bistrô + Bistrô (francês) Padaria Cuscuz Frango frito Sobremesas Cantina - Tacos - Piadina - Falafel + Tacos (mexicano) + Piadina (italiano) + Falafel (Médio Oriente) Batidos de frutas - Souvlaki + Souvlaki (grego) Salgados Iogurtes - Gyros + Gyros (grego) Empanadas Crepes - Yakiniku + Yakiniku (japonês) Suki tailandês Udon (japonês) - Brasserie + Brasserie (francês) Chá de bolhas Yakitori (japonês) Sagardotegia (basco) @@ -2978,11 +2978,11 @@ Chocolates Vinhos Batatas - Brunch + Brunch (inglês e norte-americano) Sandes - Pita - Fondue - Baguetes + Pita (judaico) + Fondue (suíço) + Baguetes (francês) Pastéis Burritos Teriyaki (japonês) @@ -3040,7 +3040,7 @@ Latino-americana Nepalesa Mongol - Oriente Médio + Médio Oriente Ucraniana Afegã Belga @@ -3181,7 +3181,7 @@ Lanchas: não Casas-barco: sim Casas-barco: não - Gaivota: sim + Gaivotas a pedais: sim Gaivota: não Motas de água: sim Motas de água: não @@ -3249,69 +3249,69 @@ Comunidade Família Várias famílias - Tomada: CEE azul - Tomada: CEE azul: corrente - Tomada: CEE azul: saída - Tomada: CEE vermelha 16A - Tomada: CEE vermelha 16A: corrente - Tomada: CEE vermelha 16A: saída - Tomada: CEE vermelha 32A - Tomada: CEE vermelha 32A: corrente - Tomada: CEE vermelha 32A: saída - Tomada: CEE vermelha 64A - Tomada: CEE vermelha 64A: corrente - Tomada: CEE vermelha 64A: saída - Tomada: CEE vermelha 125A - Tomada: CEE vermelha 125A: corrente - Tomada: CEE vermelha 125A: saída - Tomada: Tipo 1 - Tomada: Tipo 1: corrente - Tomada: Tipo 1: saída - Tomada: Tipo 1 combo - Tomada: Tipo 1 combo: corrente - Tomada: Tipo 1 combo: saída - Tomada: Tipo 2 - Tomada: Tipo 2: corrente - Tomada: Tipo 2: saída - Tomada: Tipo 2 combo - Tomada: Tipo 2 combo: corrente - Tomada: Tipo 2 combo: saída - Tomada: Tipo 3 - Tomada: Tipo 3: corrente - Tomada: Tipo 3: saída - Tomada: CHAdeMO - Tomada: CHAdeMO: corrente - Tomada: CHAdeMO: saída - Tomada: Padrão Tesla - Tomada: Padrão Tesla: corrente - Tomada: Padrão Tesla: saída - Tomada: Tesla Supercharger - Tomada: Tesla Supercharger: corrente - Tomada: Tesla Supercharger: saída - Tomada: Tesla Roadster - Tomada: Tesla Roadster: corrente - Tomada: Tesla Roadster: saída - Tomada: NEMA 5-15R - Tomada: NEMA 5-15R: corrente - Tomada: NEMA 5-15R: saída - Tomada: NEMA 5-20 - Tomada: NEMA 5-20: corrente - Tomada: NEMA 5-20: saída - Tomada: NEMA 14-30 - Tomada: NEMA 14-30: corrente - Tomada: NEMA 14-30: saída - Tomada: NEMA 14-50 - Tomada: NEMA 14-50: corrente - Tomada: NEMA 14-50: saída - Tomada: Schuko - Tomada: Schuko: corrente - Tomada: Schuko: saída - Tomada: BS 1363 - Tomada: BS 1363: corrente - Tomada: BS 1363: saída - Tomada: AS/NZS 3112 - Tomada: AS/NZS 3112: corrente - Tomada: AS/NZS 3112: saída + Tomadas: CEE azul + Tomadas: CEE azul: amperes + Tomadas: CEE azul: watts + Tomadas: CEE vermelha 16A + Tomadas: CEE vermelha 16A: amperes + Tomadas: CEE vermelha 16A: watts + Tomadas: CEE vermelha 32A + Tomadas: CEE vermelha 32A: amperes + Tomadas: CEE vermelha 32A: watts + Tomadas: CEE vermelha 64A + Tomadas: CEE vermelha 64A: amperes + Tomadas: CEE vermelha 64A: watts + Tomadas: CEE vermelha 125A + Tomadas: CEE vermelha 125A: amperes + Tomadas: CEE vermelha 125A: watts + Tomadas: Tipo 1 + Tomadas: Tipo 1: amperes + Tomadas: Tipo 1: watts + Tomadas: Tipo 1 combo + Tomadas: Tipo 1 combo: amperes + Tomadas: Tipo 1 combo: watts + Tomadas: Tipo 2 + Tomadas: Tipo 2: amperes + Tomadas: Tipo 2: watts + Tomadas: Tipo 2 combo + Tomadas: Tipo 2 combo: amperes + Tomadas: Tipo 2 combo: watts + Tomadas: Tipo 3 + Tomadas: Tipo 3: amperes + Tomadas: Tipo 3: watts + Tomadas: CHAdeMO + Tomadas: CHAdeMO: amperes + Tomadas: CHAdeMO: watts + Tomadas: Padrão Tesla + Tomadas: Padrão Tesla: amperes + Tomadas: Padrão Tesla: watts + Tomadas: Tesla Supercharger + Tomadas: Tesla Supercharger: amperes + Tomadas: Tesla Supercharger: watts + Tomadas: Tesla Roadster + Tomadas: Tesla Roadster: amperes + Tomadas: Tesla Roadster: watts + Tomadas: NEMA 5-15R + Tomadas: NEMA 5-15R: amperes + Tomadas: NEMA 5-15R: watts + Tomadas: NEMA 5-20 + Tomadas: NEMA 5-20: amperes + Tomadas: NEMA 5-20: watts + Tomadas: NEMA 14-30 + Tomads: NEMA 14-30: amperes + Tomadas: NEMA 14-30: watts + Tomadas: NEMA 14-50 + Tomadas: NEMA 14-50: amperes + Tomadas: NEMA 14-50: watts + Tomadas: Schuko + Tomadas: Schuko: amperes + Tomadas: Schuko: watts + Tomadas: BS 1363 + Tomadas: BS 1363: amperes + Tomadas: BS 1363: watts + Tomadas: AS/NZS 3112 + Tomadas: AS/NZS 3112: amperes + Tomadas: AS/NZS 3112: watts Carro: sim Carro: não Bicicleta: sim @@ -3539,7 +3539,7 @@ Comboio Autocarro Metropolitano - Via para veículos com alta ocupação + Veículos com alta ocupação Elétrico Balsa/ferry sem categoria @@ -3650,11 +3650,11 @@ Acesso a autocaravanas: não Acesso a reboques: não Acesso a transportes públicos: sim - Acesso a transportes públicos: designado + Acesso a transportes públicos: assinalado Acesso a transportes públicos: não Acesso a autocarros: não Acesso a autocarros turísticos: sim - Acesso a autocarros turísticos: designado + Acesso a autocarros turísticos: assinalado Acesso a autocarros turísticos: não Acesso a autocarros de longa distância: sim Acesso a autocarros de longa distância: não @@ -3665,37 +3665,37 @@ Acesso a veículos agrícolas: sim Acesso a veículos agrícolas: não Acesso a táxis: sim - Acesso a táxis: designado + Acesso a táxis: assinalado Acesso a táxis: não Acesso a deficientes: não Sim - Designado + Assinalado Tolerado Sim - Designado + Assinalado Sim - Designado + Assinalado Sim - Designado + Assinalado Sim - Designado + Assinalado Sim Tolerado Destino - Designado + Assinalado Sim - Designado + Assinalado Sim - Designado + Assinalado Sim Destino Tolerado - Designado + Assinalado Entregas Sim - Designado + Assinalado Sim - Designado + Assinalado Entrada da adega Alimentação saudável Construtor @@ -3779,7 +3779,7 @@ Incorreto Primitivo Contrastado - Apenas quando é permitido caminhar + Apenas quando é permitido atravessar Acesso à Internet: só clientes Não Sim @@ -3813,8 +3813,8 @@ Caixa livre;Caixa de donativos;Give-box Seta: não Elevador - Calendário - Tempo real + Horário + Atualizado em tempo real Atraso Sim Quadro de partidas: não @@ -3922,7 +3922,7 @@ Nome da pista Salto com esqui Passagem de vida selvagem - Lavadoiro público + Lavadouro público Poço Gabinete diplomático Tipo de baía From ef4984f3ee9c80775b0f03ba5b847ebb8905b23d Mon Sep 17 00:00:00 2001 From: Kseniia Date: Wed, 14 Apr 2021 15:46:11 +0300 Subject: [PATCH 08/18] fix case sensitivity for wiki links,9708 --- OsmAnd/src/net/osmand/plus/wikipedia/WikiArticleHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/src/net/osmand/plus/wikipedia/WikiArticleHelper.java b/OsmAnd/src/net/osmand/plus/wikipedia/WikiArticleHelper.java index 02f31efe8e..b21ca8527b 100644 --- a/OsmAnd/src/net/osmand/plus/wikipedia/WikiArticleHelper.java +++ b/OsmAnd/src/net/osmand/plus/wikipedia/WikiArticleHelper.java @@ -142,7 +142,7 @@ public class WikiArticleHelper { public boolean publish(Amenity amenity) { List allNames = amenity.getAllNames(false); for (String amenityName : allNames) { - if (name.equalsIgnoreCase(amenityName)) { + if (name.equals(amenityName)) { results.add(amenity); break; } From d9baad56441eac7ae0217e69bee128f90a720231 Mon Sep 17 00:00:00 2001 From: max-klaus Date: Wed, 14 Apr 2021 19:38:46 +0300 Subject: [PATCH 09/18] Fix subscriptions new UI --- .../plus/inapp/InAppPurchaseHelperImpl.java | 32 ++- .../plus/inapp/InAppPurchaseHelperImpl.java | 8 +- .../plus/inapp/InAppPurchaseHelper.java | 58 ++-- .../net/osmand/plus/inapp/InAppPurchases.java | 271 +++++++++++++++--- .../fragments/SubscriptionsListCard.java | 43 +-- 5 files changed, 309 insertions(+), 103 deletions(-) diff --git a/OsmAnd/src-google/net/osmand/plus/inapp/InAppPurchaseHelperImpl.java b/OsmAnd/src-google/net/osmand/plus/inapp/InAppPurchaseHelperImpl.java index df05570f57..f1a07a1d3d 100644 --- a/OsmAnd/src-google/net/osmand/plus/inapp/InAppPurchaseHelperImpl.java +++ b/OsmAnd/src-google/net/osmand/plus/inapp/InAppPurchaseHelperImpl.java @@ -18,11 +18,12 @@ import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandPlugin; import net.osmand.plus.R; import net.osmand.plus.inapp.InAppPurchases.InAppPurchase; +import net.osmand.plus.inapp.InAppPurchases.InAppPurchase.PurchaseState; import net.osmand.plus.inapp.InAppPurchases.InAppSubscription; import net.osmand.plus.inapp.InAppPurchases.InAppSubscription.SubscriptionState; +import net.osmand.plus.inapp.InAppPurchases.PurchaseInfo; import net.osmand.plus.inapp.InAppPurchasesImpl.InAppPurchaseLiveUpdatesOldSubscription; import net.osmand.plus.inapp.util.BillingManager; -import net.osmand.plus.settings.backend.CommonPreference; import net.osmand.plus.settings.backend.OsmandSettings; import net.osmand.plus.srtmplugin.SRTMPlugin; import net.osmand.util.Algorithms; @@ -310,8 +311,8 @@ public class InAppPurchaseHelperImpl extends InAppPurchaseHelper { } } } - for (Entry entry : subscriptionStateMap.entrySet()) { - SubscriptionState state = entry.getValue(); + for (Entry entry : subscriptionStateMap.entrySet()) { + SubscriptionState state = entry.getValue().state; if (state == SubscriptionState.PAUSED || state == SubscriptionState.ON_HOLD) { String sku = entry.getKey(); if (!result.contains(sku)) { @@ -492,15 +493,17 @@ public class InAppPurchaseHelperImpl extends InAppPurchaseHelper { } private PurchaseInfo getPurchaseInfo(Purchase purchase) { - return new PurchaseInfo(purchase.getSku(), purchase.getOrderId(), purchase.getPurchaseToken()); + return new PurchaseInfo(purchase.getSku(), purchase.getOrderId(), purchase.getPurchaseToken(), + purchase.getPurchaseTime(), purchase.getPurchaseState(), purchase.isAcknowledged(), purchase.isAutoRenewing()); } private void fetchInAppPurchase(@NonNull InAppPurchase inAppPurchase, @NonNull SkuDetails skuDetails, @Nullable Purchase purchase) { if (purchase != null) { - inAppPurchase.setPurchaseState(InAppPurchase.PurchaseState.PURCHASED); - inAppPurchase.setPurchaseTime(purchase.getPurchaseTime()); + inAppPurchase.setPurchaseState(PurchaseState.PURCHASED); + inAppPurchase.setPurchaseInfo(ctx, getPurchaseInfo(purchase)); } else { - inAppPurchase.setPurchaseState(InAppPurchase.PurchaseState.NOT_PURCHASED); + inAppPurchase.setPurchaseState(PurchaseState.NOT_PURCHASED); + inAppPurchase.restorePurchaseInfo(ctx); } inAppPurchase.setPrice(skuDetails.getPrice()); inAppPurchase.setPriceCurrencyCode(skuDetails.getPriceCurrencyCode()); @@ -519,18 +522,17 @@ public class InAppPurchaseHelperImpl extends InAppPurchaseHelper { } if (inAppPurchase instanceof InAppSubscription) { InAppSubscription s = (InAppSubscription) inAppPurchase; - - SubscriptionState state = subscriptionStateMap.get(inAppPurchase.getSku()); - s.setState(state == null ? SubscriptionState.UNDEFINED : state); - CommonPreference statePref = ctx.getSettings().registerStringPreference( - s.getSku() + "_state", SubscriptionState.UNDEFINED.getStateStr()).makeGlobal(); - s.setPrevState(SubscriptionState.getByStateStr(statePref.get())); - statePref.set(s.getState().getStateStr()); + s.restoreState(ctx); + s.restoreExpireTime(ctx); + SubscriptionStateHolder stateHolder = subscriptionStateMap.get(s.getSku()); + if (stateHolder != null) { + s.setState(ctx, stateHolder.state); + s.setExpireTime(ctx, stateHolder.expireTime); + } if (s.getState().isGone() && s.hasStateChanged()) { ctx.getSettings().LIVE_UPDATES_EXPIRED_FIRST_DLG_SHOWN_TIME.set(0L); ctx.getSettings().LIVE_UPDATES_EXPIRED_SECOND_DLG_SHOWN_TIME.set(0L); } - String introductoryPrice = skuDetails.getIntroductoryPrice(); String introductoryPricePeriod = skuDetails.getIntroductoryPricePeriod(); int introductoryPriceCycles = skuDetails.getIntroductoryPriceCycles(); diff --git a/OsmAnd/src-huawei/net/osmand/plus/inapp/InAppPurchaseHelperImpl.java b/OsmAnd/src-huawei/net/osmand/plus/inapp/InAppPurchaseHelperImpl.java index 6f930fec1d..704c086f47 100644 --- a/OsmAnd/src-huawei/net/osmand/plus/inapp/InAppPurchaseHelperImpl.java +++ b/OsmAnd/src-huawei/net/osmand/plus/inapp/InAppPurchaseHelperImpl.java @@ -29,6 +29,7 @@ import net.osmand.plus.OsmandApplication; import net.osmand.plus.inapp.InAppPurchases.InAppPurchase; import net.osmand.plus.inapp.InAppPurchases.InAppSubscription; import net.osmand.plus.inapp.InAppPurchases.InAppSubscriptionIntroductoryInfo; +import net.osmand.plus.inapp.InAppPurchases.PurchaseInfo; import net.osmand.plus.inapp.InAppPurchasesImpl.InAppPurchaseLiveUpdatesOldSubscription; import net.osmand.plus.settings.backend.OsmandSettings; import net.osmand.util.Algorithms; @@ -48,7 +49,7 @@ public class InAppPurchaseHelperImpl extends InAppPurchaseHelper { private List productInfos; private OwnedPurchasesResult ownedSubscriptions; - private List ownedInApps = new ArrayList<>(); + private final List ownedInApps = new ArrayList<>(); public InAppPurchaseHelperImpl(OsmandApplication ctx) { super(ctx); @@ -233,15 +234,18 @@ public class InAppPurchaseHelperImpl extends InAppPurchaseHelper { } private PurchaseInfo getPurchaseInfo(InAppPurchaseData purchase) { - return new PurchaseInfo(purchase.getProductId(), purchase.getSubscriptionId(), purchase.getPurchaseToken()); + return new PurchaseInfo(purchase.getProductId(), purchase.getSubscriptionId(), purchase.getPurchaseToken(), + purchase.getPurchaseTime(), purchase.getPurchaseState(), true, purchase.isAutoRenewing()); } private void fetchInAppPurchase(@NonNull InAppPurchase inAppPurchase, @NonNull ProductInfo productInfo, @Nullable InAppPurchaseData purchaseData) { if (purchaseData != null) { inAppPurchase.setPurchaseState(InAppPurchase.PurchaseState.PURCHASED); inAppPurchase.setPurchaseTime(purchaseData.getPurchaseTime()); + inAppPurchase.setPurchaseInfo(ctx, getPurchaseInfo(purchaseData)); } else { inAppPurchase.setPurchaseState(InAppPurchase.PurchaseState.NOT_PURCHASED); + inAppPurchase.restorePurchaseInfo(ctx); } inAppPurchase.setPrice(productInfo.getPrice()); inAppPurchase.setPriceCurrencyCode(productInfo.getCurrency()); diff --git a/OsmAnd/src/net/osmand/plus/inapp/InAppPurchaseHelper.java b/OsmAnd/src/net/osmand/plus/inapp/InAppPurchaseHelper.java index 5136cd1f73..1a36558b87 100644 --- a/OsmAnd/src/net/osmand/plus/inapp/InAppPurchaseHelper.java +++ b/OsmAnd/src/net/osmand/plus/inapp/InAppPurchaseHelper.java @@ -21,6 +21,7 @@ import net.osmand.plus.inapp.InAppPurchases.InAppPurchase.PurchaseState; import net.osmand.plus.inapp.InAppPurchases.InAppSubscription; import net.osmand.plus.inapp.InAppPurchases.InAppSubscription.SubscriptionState; import net.osmand.plus.inapp.InAppPurchases.InAppSubscriptionList; +import net.osmand.plus.inapp.InAppPurchases.PurchaseInfo; import net.osmand.plus.liveupdates.CountrySelectionFragment; import net.osmand.plus.liveupdates.CountrySelectionFragment.CountryItem; import net.osmand.plus.settings.backend.OsmandSettings; @@ -52,7 +53,7 @@ public abstract class InAppPurchaseHelper { protected InAppPurchases purchases; protected long lastValidationCheckTime; protected boolean inventoryRequested; - protected Map subscriptionStateMap = new HashMap<>(); + protected Map subscriptionStateMap = new HashMap<>(); private static final long PURCHASE_VALIDATION_PERIOD_MSEC = 1000 * 60 * 60 * 24; // daily @@ -85,6 +86,11 @@ public abstract class InAppPurchaseHelper { void onFail(); } + static class SubscriptionStateHolder { + SubscriptionState state = SubscriptionState.UNDEFINED; + long expireTime = 0; + } + public enum InAppPurchaseTaskType { REQUEST_INVENTORY, PURCHASE_FULL_VERSION, @@ -112,30 +118,6 @@ public abstract class InAppPurchaseHelper { void onCommandDone(@NonNull InAppCommand command); } - public static class PurchaseInfo { - private String sku; - private String orderId; - private String purchaseToken; - - public PurchaseInfo(String sku, String orderId, String purchaseToken) { - this.sku = sku; - this.orderId = orderId; - this.purchaseToken = purchaseToken; - } - - public String getSku() { - return sku; - } - - public String getOrderId() { - return orderId; - } - - public String getPurchaseToken() { - return purchaseToken; - } - } - public String getToken() { return token; } @@ -193,6 +175,11 @@ public abstract class InAppPurchaseHelper { return purchases.getPurchasedMonthlyLiveUpdates(); } + @Nullable + public InAppSubscription getAnyPurchasedSubscription() { + return purchases.getAnyPurchasedSubscription(); + } + public InAppPurchaseHelper(OsmandApplication ctx) { this.ctx = ctx; isDeveloperVersion = Version.isDeveloperVersion(ctx); @@ -202,8 +189,7 @@ public abstract class InAppPurchaseHelper { public List getEverMadeSubscriptions() { List subscriptions = new ArrayList<>(); for (InAppSubscription subscription : getLiveUpdates().getVisibleSubscriptions()) { - SubscriptionState state = subscription.getState(); - if (state != SubscriptionState.UNDEFINED) { + if (subscription.isPurchased() || subscription.getState() != SubscriptionState.UNDEFINED) { subscriptions.add(subscription); } } @@ -448,15 +434,22 @@ public abstract class InAppPurchaseHelper { } if (subscriptionsStateJson != null) { inventoryRequested = true; - Map subscriptionStateMap = new HashMap<>(); + Map subscriptionStateMap = new HashMap<>(); try { JSONArray subArrJson = new JSONArray(subscriptionsStateJson); for (int i = 0; i < subArrJson.length(); i++) { JSONObject subObj = subArrJson.getJSONObject(i); String sku = subObj.getString("sku"); String state = subObj.getString("state"); + long expireTime = 0; + if (subObj.has("expire_time")) { + expireTime = subObj.getLong("expire_time"); + } if (!Algorithms.isEmpty(sku) && !Algorithms.isEmpty(state)) { - subscriptionStateMap.put(sku, SubscriptionState.getByStateStr(state)); + SubscriptionStateHolder stateHolder = new SubscriptionStateHolder(); + stateHolder.state = SubscriptionState.getByStateStr(state); + stateHolder.expireTime = expireTime; + subscriptionStateMap.put(sku, stateHolder); } } } catch (JSONException e) { @@ -500,12 +493,14 @@ public abstract class InAppPurchaseHelper { protected void onPurchaseDone(PurchaseInfo info) { logDebug("Purchase successful."); - InAppPurchase liveUpdatesPurchase = getLiveUpdates().getSubscriptionBySku(info.getSku()); + InAppSubscription liveUpdatesPurchase = getLiveUpdates().getSubscriptionBySku(info.getSku()); if (liveUpdatesPurchase != null) { // bought live updates logDebug("Live updates subscription purchased."); final String sku = liveUpdatesPurchase.getSku(); liveUpdatesPurchase.setPurchaseState(PurchaseState.PURCHASED); + liveUpdatesPurchase.setPurchaseInfo(ctx, info); + liveUpdatesPurchase.setState(ctx, SubscriptionState.UNDEFINED); sendTokens(Collections.singletonList(info), new OnRequestResultListener() { @Override public void onResult(String result) { @@ -525,6 +520,7 @@ public abstract class InAppPurchaseHelper { } else if (info.getSku().equals(getFullVersion().getSku())) { // bought full version getFullVersion().setPurchaseState(PurchaseState.PURCHASED); + getFullVersion().setPurchaseInfo(ctx, info); logDebug("Full version purchased."); showToast(ctx.getString(R.string.full_version_thanks)); ctx.getSettings().FULL_VERSION_PURCHASED.set(true); @@ -536,6 +532,7 @@ public abstract class InAppPurchaseHelper { } else if (info.getSku().equals(getDepthContours().getSku())) { // bought sea depth contours getDepthContours().setPurchaseState(PurchaseState.PURCHASED); + getDepthContours().setPurchaseInfo(ctx, info); logDebug("Sea depth contours purchased."); showToast(ctx.getString(R.string.sea_depth_thanks)); ctx.getSettings().DEPTH_CONTOURS_PURCHASED.set(true); @@ -548,6 +545,7 @@ public abstract class InAppPurchaseHelper { } else if (info.getSku().equals(getContourLines().getSku())) { // bought contour lines getContourLines().setPurchaseState(PurchaseState.PURCHASED); + getContourLines().setPurchaseInfo(ctx, info); logDebug("Contours lines purchased."); showToast(ctx.getString(R.string.contour_lines_thanks)); ctx.getSettings().CONTOUR_LINES_PURCHASED.set(true); diff --git a/OsmAnd/src/net/osmand/plus/inapp/InAppPurchases.java b/OsmAnd/src/net/osmand/plus/inapp/InAppPurchases.java index 27d359630e..61dae8f0e8 100644 --- a/OsmAnd/src/net/osmand/plus/inapp/InAppPurchases.java +++ b/OsmAnd/src/net/osmand/plus/inapp/InAppPurchases.java @@ -7,33 +7,41 @@ import android.text.Spannable; import android.text.SpannableStringBuilder; import android.text.style.ForegroundColorSpan; +import androidx.annotation.ColorInt; +import androidx.annotation.DrawableRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; + import net.osmand.AndroidUtils; import net.osmand.Period; import net.osmand.Period.PeriodUnit; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.helpers.FontCache; +import net.osmand.plus.settings.backend.CommonPreference; +import net.osmand.plus.settings.backend.OsmandSettings; import net.osmand.plus.widgets.style.CustomTypefaceSpan; import net.osmand.util.Algorithms; +import org.json.JSONException; +import org.json.JSONObject; + import java.text.NumberFormat; import java.text.ParseException; import java.util.ArrayList; import java.util.Arrays; +import java.util.Calendar; import java.util.Collections; import java.util.Comparator; import java.util.Currency; +import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import androidx.annotation.ColorInt; -import androidx.annotation.DrawableRes; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.annotation.StringRes; - public abstract class InAppPurchases { protected InAppPurchase fullVersion; @@ -47,6 +55,10 @@ public abstract class InAppPurchases { protected InAppPurchases(OsmandApplication ctx) { } + private static OsmandSettings getSettings(@NonNull Context ctx) { + return ((OsmandApplication) ctx.getApplicationContext()).getSettings(); + } + public InAppPurchase getFullVersion() { return fullVersion; } @@ -83,6 +95,17 @@ public abstract class InAppPurchases { return null; } + @Nullable + public InAppSubscription getAnyPurchasedSubscription() { + List allSubscriptions = liveUpdates.getAllSubscriptions(); + for (InAppSubscription subscription : allSubscriptions) { + if (subscription.isAnyPurchased()) { + return subscription; + } + } + return null; + } + public InAppSubscriptionList getLiveUpdates() { return liveUpdates; } @@ -231,7 +254,7 @@ public abstract class InAppPurchases { private double priceValue; private String priceCurrencyCode; private PurchaseState purchaseState = PurchaseState.UNKNOWN; - private long purchaseTime; + private PurchaseInfo purchaseInfo; double monthlyPriceValue; boolean donationSupported = false; @@ -253,6 +276,37 @@ public abstract class InAppPurchases { return sku; } + @Nullable + public String getOrderId() { + return purchaseInfo != null ? purchaseInfo.getOrderId() : null; + } + + private CommonPreference getPurchaseInfoPref(@NonNull Context ctx) { + return getSettings(ctx).registerStringPreference(sku + "_purchase_info", "").makeGlobal(); + } + + public boolean storePurchaseInfo(@NonNull Context ctx) { + PurchaseInfo purchaseInfo = this.purchaseInfo; + if (purchaseInfo != null) { + getPurchaseInfoPref(ctx).set(purchaseInfo.toJson()); + return true; + } + return false; + } + + public boolean restorePurchaseInfo(@NonNull Context ctx) { + String json = getPurchaseInfoPref(ctx).get(); + if (!Algorithms.isEmpty(json)) { + try { + purchaseInfo = new PurchaseInfo(json); + } catch (JSONException e) { + // ignore + } + return true; + } + return false; + } + public String getPrice(Context ctx) { if (!Algorithms.isEmpty(price)) { return price; @@ -266,11 +320,16 @@ public abstract class InAppPurchases { } public long getPurchaseTime() { - return purchaseTime; + return purchaseInfo != null ? purchaseInfo.getPurchaseTime() : 0; } - public void setPurchaseTime(long purchaseTime) { - this.purchaseTime = purchaseTime; + public PurchaseInfo getPurchaseInfo() { + return purchaseInfo; + } + + void setPurchaseInfo(@NonNull Context ctx, PurchaseInfo purchaseInfo) { + this.purchaseInfo = purchaseInfo; + storePurchaseInfo(ctx); } public String getDefaultPrice(Context ctx) { @@ -571,35 +630,33 @@ public abstract class InAppPurchases { public static abstract class InAppSubscription extends InAppPurchase { - private Map upgrades = new ConcurrentHashMap<>(); - private String skuNoVersion; + private final Map upgrades = new ConcurrentHashMap<>(); + private final String skuNoVersion; private String subscriptionPeriodString; private Period subscriptionPeriod; private boolean upgrade = false; private SubscriptionState state = SubscriptionState.UNDEFINED; - private SubscriptionState prevState = SubscriptionState.UNDEFINED; + private SubscriptionState previousState = SubscriptionState.UNDEFINED; + private long expireTime = 0; private InAppSubscriptionIntroductoryInfo introductoryInfo; public enum SubscriptionState { - UNDEFINED("undefined", 0, 0), - ACTIVE("active", R.string.osm_live_active, R.drawable.bg_osmand_live_active), - CANCELLED("cancelled", R.string.osmand_live_cancelled, R.drawable.bg_osmand_live_cancelled), - IN_GRACE_PERIOD("in_grace_period", R.string.in_grace_period, R.drawable.bg_osmand_live_active), - ON_HOLD("on_hold", R.string.on_hold, R.drawable.bg_osmand_live_cancelled), - PAUSED("paused", R.string.shared_string_paused, R.drawable.bg_osmand_live_cancelled), - EXPIRED("expired", R.string.expired, R.drawable.bg_osmand_live_cancelled); + UNDEFINED("undefined", R.string.shared_string_undefined), + ACTIVE("active", R.string.osm_live_active), + CANCELLED("cancelled", R.string.osmand_live_cancelled), + IN_GRACE_PERIOD("in_grace_period", R.string.in_grace_period), + ON_HOLD("on_hold", R.string.on_hold), + PAUSED("paused", R.string.shared_string_paused), + EXPIRED("expired", R.string.expired); private final String stateStr; @StringRes private final int stringRes; - @DrawableRes - private final int backgroundRes; - SubscriptionState(@NonNull String stateStr, @StringRes int stringRes, @DrawableRes int backgroundRes) { + SubscriptionState(@NonNull String stateStr, @StringRes int stringRes) { this.stateStr = stateStr; this.stringRes = stringRes; - this.backgroundRes = backgroundRes; } public String getStateStr() { @@ -611,11 +668,6 @@ public abstract class InAppPurchases { return stringRes; } - @DrawableRes - public int getBackgroundRes() { - return backgroundRes; - } - @NonNull public static SubscriptionState getByStateStr(@NonNull String stateStr) { for (SubscriptionState state : SubscriptionState.values()) { @@ -678,21 +730,76 @@ public abstract class InAppPurchases { return state; } - public void setState(@NonNull SubscriptionState state) { + public void setState(@NonNull Context ctx, @NonNull SubscriptionState state) { this.state = state; + storeState(ctx, state); } @NonNull - public SubscriptionState getPrevState() { - return prevState; - } - - public void setPrevState(@NonNull SubscriptionState prevState) { - this.prevState = prevState; + public SubscriptionState getPreviousState() { + return previousState; } public boolean hasStateChanged() { - return state != prevState; + return state != previousState; + } + + private CommonPreference getStatePref(@NonNull Context ctx) { + return getSettings(ctx).registerStringPreference(getSku() + "_state", "").makeGlobal(); + } + + void storeState(@NonNull Context ctx, @NonNull SubscriptionState state) { + getStatePref(ctx).set(state.getStateStr()); + } + + boolean restoreState(@NonNull Context ctx) { + String stateStr = getStatePref(ctx).get(); + if (!Algorithms.isEmpty(stateStr)) { + SubscriptionState state = SubscriptionState.getByStateStr(stateStr); + this.previousState = state; + this.state = state; + return true; + } + return false; + } + + public long getCalculatedExpiredTime() { + long purchaseTime = getPurchaseTime(); + Period period = getSubscriptionPeriod(); + if (purchaseTime == 0 || period == null || period.getUnit() == null) { + return 0; + } + Date date = new Date(purchaseTime); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.add(period.getUnit().getCalendarIdx(), period.getNumberOfUnits()); + return calendar.getTimeInMillis(); + } + + public long getExpireTime() { + return expireTime; + } + + public void setExpireTime(@NonNull Context ctx, long expireTime) { + this.expireTime = expireTime; + storeExpireTime(ctx, expireTime); + } + + private CommonPreference getExpireTimePref(@NonNull Context ctx) { + return getSettings(ctx).registerLongPreference(getSku() + "_expire_time", 0L).makeGlobal(); + } + + boolean restoreExpireTime(@NonNull Context ctx) { + Long expireTime = getExpireTimePref(ctx).get(); + if (expireTime != null) { + this.expireTime = expireTime; + return true; + } + return false; + } + + void storeExpireTime(@NonNull Context ctx, long expireTime) { + getExpireTimePref(ctx).set(expireTime); } public boolean isAnyPurchased() { @@ -999,5 +1106,95 @@ public abstract class InAppPurchases { return null; } } + + public static class PurchaseInfo { + private String sku; + private String orderId; + private String purchaseToken; + private long purchaseTime; + private int purchaseState; + private boolean acknowledged; + private boolean autoRenewing; + + PurchaseInfo(String sku, String orderId, String purchaseToken, long purchaseTime, + int purchaseState, boolean acknowledged, boolean autoRenewing) { + this.sku = sku; + this.orderId = orderId; + this.purchaseToken = purchaseToken; + this.purchaseTime = purchaseTime; + this.purchaseState = purchaseState; + this.acknowledged = acknowledged; + this.autoRenewing = autoRenewing; + } + + PurchaseInfo(@NonNull String json) throws JSONException { + parseJson(json); + } + + public String getSku() { + return sku; + } + + public String getOrderId() { + return orderId; + } + + public String getPurchaseToken() { + return purchaseToken; + } + + public long getPurchaseTime() { + return purchaseTime; + } + + public int getPurchaseState() { + return purchaseState; + } + + public boolean isAcknowledged() { + return acknowledged; + } + + public boolean isAutoRenewing() { + return autoRenewing; + } + + public String toJson() { + Map jsonMap = new HashMap<>(); + jsonMap.put("sku", sku); + jsonMap.put("orderId", orderId); + jsonMap.put("purchaseToken", purchaseToken); + jsonMap.put("purchaseTime", purchaseTime); + jsonMap.put("purchaseState", purchaseState); + jsonMap.put("acknowledged", acknowledged); + jsonMap.put("autoRenewing", autoRenewing); + return new JSONObject(jsonMap).toString(); + } + + public void parseJson(@NonNull String json) throws JSONException { + JSONObject jsonObj = new JSONObject(json); + if (jsonObj.has("sku")) { + this.sku = jsonObj.getString("sku"); + } + if (jsonObj.has("orderId")) { + this.orderId = jsonObj.getString("orderId"); + } + if (jsonObj.has("purchaseToken")) { + this.purchaseToken = jsonObj.getString("purchaseToken"); + } + if (jsonObj.has("purchaseTime")) { + this.purchaseTime = jsonObj.getLong("purchaseTime"); + } + if (jsonObj.has("purchaseState")) { + this.purchaseState = jsonObj.getInt("purchaseState"); + } + if (jsonObj.has("acknowledged")) { + this.acknowledged = jsonObj.getBoolean("acknowledged"); + } + if (jsonObj.has("autoRenewing")) { + this.autoRenewing = jsonObj.getBoolean("autoRenewing"); + } + } + } } diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/SubscriptionsListCard.java b/OsmAnd/src/net/osmand/plus/settings/fragments/SubscriptionsListCard.java index 645a68b037..d4f56cdc76 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/SubscriptionsListCard.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/SubscriptionsListCard.java @@ -7,7 +7,6 @@ import android.view.ViewGroup; import android.widget.TextView; import net.osmand.AndroidUtils; -import net.osmand.Period; import net.osmand.plus.R; import net.osmand.plus.UiUtilities; import net.osmand.plus.activities.MapActivity; @@ -20,11 +19,10 @@ import net.osmand.plus.routepreparationmenu.cards.BaseCard; import net.osmand.util.Algorithms; import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Date; import java.util.List; import java.util.Locale; +import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; public class SubscriptionsListCard extends BaseCard { @@ -60,7 +58,13 @@ public class SubscriptionsListCard extends BaseCard { for (int i = 0; i < subscriptions.size(); i++) { InAppSubscription subscription = subscriptions.get(i); SubscriptionState state = subscription.getState(); - boolean autoRenewed = state == SubscriptionState.ACTIVE || state == SubscriptionState.IN_GRACE_PERIOD; + boolean autoRenewing = false; + if (subscription.isPurchased() && subscription.getPurchaseInfo() != null) { + autoRenewing = subscription.getPurchaseInfo().isAutoRenewing(); + state = SubscriptionState.ACTIVE; + } else if (state != SubscriptionState.UNDEFINED) { + autoRenewing = state == SubscriptionState.ACTIVE || state == SubscriptionState.IN_GRACE_PERIOD; + } View card = inflater.inflate(R.layout.subscription_layout, null, false); ((ViewGroup) view).addView(card); @@ -72,11 +76,18 @@ public class SubscriptionsListCard extends BaseCard { AndroidUiHelper.updateVisibility(subscriptionPeriod, true); } - if (autoRenewed) { + if (autoRenewing) { TextView nextBillingDate = card.findViewById(R.id.next_billing_date); - String date = getHumanDate(subscription.getPurchaseTime(), subscription.getSubscriptionPeriod()); - if (!Algorithms.isEmpty(date)) { - nextBillingDate.setText(app.getString(R.string.next_billing_date, date)); + String expiredTimeStr = null; + long expiredTime = subscription.getExpireTime(); + if (expiredTime == 0) { + expiredTime = subscription.getCalculatedExpiredTime(); + } + if (expiredTime > 0) { + expiredTimeStr = dateFormat.format(expiredTime); + } + if (!Algorithms.isEmpty(expiredTimeStr)) { + nextBillingDate.setText(app.getString(R.string.next_billing_date, expiredTimeStr)); AndroidUiHelper.updateVisibility(nextBillingDate, true); } } else { @@ -102,7 +113,7 @@ public class SubscriptionsListCard extends BaseCard { TextView status = card.findViewById(R.id.status); status.setText(app.getString(state.getStringRes())); - AndroidUtils.setBackground(status, app.getUIUtilities().getIcon(state.getBackgroundRes())); + AndroidUtils.setBackground(status, app.getUIUtilities().getIcon(getBackgroundRes(state))); int dividerLayout = i + 1 == subscriptions.size() ? R.layout.simple_divider_item : R.layout.divider_half_item; View divider = inflater.inflate(dividerLayout, (ViewGroup) view, false); @@ -110,15 +121,9 @@ public class SubscriptionsListCard extends BaseCard { } } - private String getHumanDate(long time, Period period) { - if (period == null || period.getUnit() == null) { - return ""; - } - Date date = new Date(time); - Calendar calendar = Calendar.getInstance(); - calendar.setTime(date); - calendar.add(period.getUnit().getCalendarIdx(), period.getNumberOfUnits()); - date = calendar.getTime(); - return dateFormat.format(date); + @DrawableRes + private int getBackgroundRes(@NonNull SubscriptionState state) { + return state == SubscriptionState.ACTIVE || state == SubscriptionState.IN_GRACE_PERIOD + ? R.drawable.bg_osmand_live_active : R.drawable.bg_osmand_live_cancelled; } } \ No newline at end of file From e7da52098a6714b5947843e20da0273642a62df4 Mon Sep 17 00:00:00 2001 From: max-klaus Date: Wed, 14 Apr 2021 21:09:41 +0300 Subject: [PATCH 10/18] Fix resubscribe --- .../net/osmand/plus/inapp/InAppPurchaseHelperImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/OsmAnd/src-google/net/osmand/plus/inapp/InAppPurchaseHelperImpl.java b/OsmAnd/src-google/net/osmand/plus/inapp/InAppPurchaseHelperImpl.java index f1a07a1d3d..32597863d1 100644 --- a/OsmAnd/src-google/net/osmand/plus/inapp/InAppPurchaseHelperImpl.java +++ b/OsmAnd/src-google/net/osmand/plus/inapp/InAppPurchaseHelperImpl.java @@ -175,7 +175,8 @@ public class InAppPurchaseHelperImpl extends InAppPurchaseHelper { }); } for (Purchase purchase : purchases) { - if (!purchase.isAcknowledged()) { + InAppSubscription subscription = getLiveUpdates().getSubscriptionBySku(purchase.getSku()); + if (!purchase.isAcknowledged() || (subscription != null && !subscription.isPurchased())) { onPurchaseFinished(purchase); } } From 273f9c1c348b858ce1e9c606502689314828cc8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Morais?= Date: Wed, 14 Apr 2021 20:47:27 +0000 Subject: [PATCH 11/18] Translated using Weblate (Portuguese) Currently translated at 100.0% (3717 of 3717 strings) --- OsmAnd/res/values-pt/strings.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/OsmAnd/res/values-pt/strings.xml b/OsmAnd/res/values-pt/strings.xml index a01b42c27c..dbdfdef7bf 100644 --- a/OsmAnd/res/values-pt/strings.xml +++ b/OsmAnd/res/values-pt/strings.xml @@ -160,10 +160,10 @@ A descomprimir o ficheiro… Vire à direita e continue em Vire fortemente à direita e continue em - Vire levemente à direita e continue em + Vire ligeiramente à direita e continue em Vire à esquerda e continue em Vire fortemente à esquerda e continue em - Vire levemente à esquerda e continue em + Vire ligeiramente à esquerda e continue em Inverta o sentido da marcha e continue em Comece em Continuar @@ -1884,7 +1884,7 @@ Ficheiros temporários dos mosaicos Nome de utilizador errado Para - A partir de + De Ver apenas imagens adicionadas Data Introduza nome de utilizador @@ -2031,7 +2031,7 @@ Permitir autoestradas. Artigos da Wikipédia próximos Cidade ou região - Use a saída %1$d e continue + Saia na %1$d saída para Enviar pontos de interesse (POI) Cálculo da rota Ainda não tem nenhuns ficheiros de trilhos @@ -2424,7 +2424,7 @@ \nRepresenta área: %1$s x %2$s Tolerância do limite de velocidade Selecione a margem de tolerância de limite de velocidade, acima do qual receberá um aviso de voz. - O nome do favorito foi alterado para %1$s para facilitar guardar corretamente a cadeia de caracteres com emoticons num ficheiro. + O nome do favorito foi alterado para %1$s para poder guardar corretamente o texto com emoticons num ficheiro. Imprimir rota Nome de favorito duplicado O nome do favorito especificado já está a ser utilizado, foi alterado para %1$s para evitar a duplicação. @@ -3118,7 +3118,7 @@ Anos Três meses Grátis - Obter %1$d %2$s com %3$s de desconto. + Obtenha %1$d %2$s com %3$s de desconto. depois %1$s Cancelar subscrição %1$s - Poupe %2$s From b2bf760db1f7620f144fb2ca59144b20efc44b8b Mon Sep 17 00:00:00 2001 From: ace shadow Date: Wed, 14 Apr 2021 20:35:23 +0000 Subject: [PATCH 12/18] Translated using Weblate (Slovak) Currently translated at 100.0% (3717 of 3717 strings) --- OsmAnd/res/values-sk/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-sk/strings.xml b/OsmAnd/res/values-sk/strings.xml index b644da49d4..995426c282 100644 --- a/OsmAnd/res/values-sk/strings.xml +++ b/OsmAnd/res/values-sk/strings.xml @@ -1494,7 +1494,7 @@ Naozaj chcete odoslať %1$d zmien do OSM\? Vymazať históriu? prekročený čas - Vo viacerých krajinách (ako Nemecko, Francúzsko, Taliansko) je použitie varovaní pred rýchlostnými radarmi/kamerami zakázané zákonom (nelegálne). OsmAnd nepreberá žiadnu zodpovednosť ak porušíte zákon. Stlačte \"Áno\" len ak ste na to oprávnený použiť túto funkciu. + Vo viacerých krajinách (ako Nemecko, Francúzsko, Taliansko) je použitie varovaní pred rýchlostnými radarmi/kamerami zakázané zákonom. OsmAnd nepreberá žiadnu zodpovednosť ak porušíte zákon. Stlačte \"Áno\" len ak ste oprávnený použiť túto funkciu. Stiahnuť mapy Vyberte svoj región, aby bolo možné správne nastaviť dopravné predpisy: OsmAnd poskytuje celosvetové offline mapy a offline navigáciu. @@ -2729,7 +2729,7 @@ Wikipédia offline Vrstevnice & tieňované svahy Odomknite všetky funkcie OsmAnd - Stiahnite články Wikipédie pre %1$s pre ich čítanie offline. + Stiahnite články Wikipédie pre %1$s na ich čítanie offline. Stiahnuť údaje Wikipédie Otvoriť článok online Zobraziť článok vo webovom prehliadači. From 4796a68d57903e25dc5e6959da30882e4f8400fb Mon Sep 17 00:00:00 2001 From: Ajeje Brazorf Date: Wed, 14 Apr 2021 15:59:51 +0000 Subject: [PATCH 13/18] Translated using Weblate (Sardinian) Currently translated at 99.4% (3696 of 3717 strings) --- OsmAnd/res/values-sc/strings.xml | 39 +++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/values-sc/strings.xml b/OsmAnd/res/values-sc/strings.xml index c11864da5a..d5eef9a6b6 100644 --- a/OsmAnd/res/values-sc/strings.xml +++ b/OsmAnd/res/values-sc/strings.xml @@ -1769,7 +1769,7 @@ Imbia PDI OSM modificadu PDI OSM iscantzelladu - Copiadu in sos apuntos + Copiadu in punta de billete Sarva in sa memòria (impreu chene lìnia) Colore GPX Largària GPX @@ -4046,4 +4046,41 @@ Totu sos datos non sarvados s\'ant a pèrdere. Ammustra su diàlogu de incumintzu Dislinda unu colore pro sa modalidade pro sa mapa: %1$s. + • Agiornamentos de OsmAnd Live (OSmAnd in direta) tramudados cara a \"Iscarrigamentos > Agiornamentos\" +\n +\n • Sas rastas como si podent colorizare pro artària, lestresa, o pendèntzia. +\n +\n • Annanghidura de s\'optzione pro mudare s\'aparèntzia de sa lìnia de navigatzione de s\'àndala +\n +\n • Agiornamentu de sa ventanedda de diàlogu \"Registratzione de su biàgiu\" +\n +\n + In perìodu de gràtzia + OsmAnd in direta + Divàriu + S\'intervallu de registratzione impostat sa frecuèntzia cun sa cale OsmAnd at a pedire sos datos de sa positzione atuale. + Si est disabilitadu sa registratzione at a incumintzare a pustis de su tocu in subra de su widget o de s\'elementu de su menù, brinchende sa ventanedda de diàlogu de cunfirma. + Personaliza sa lìnia de s\'àndala + Lìnia de s\'àndala + Pro sa lìnia de s\'àndala s\'at a impreare su %1$s dislindadu in s\'istile de sa mapa ischertadu: %2$s. + Non tenes còmpora peruna + Dispositivu nou / contu nou + Si tenes preguntas cuntata·nos a su %1$s. + Si sa còmpora tua non benit ammustrada inoghe toca in “%1$s” o cuntata su grupu de suportu nostru. + Cuntata su suportu + Risolutzione de problemas + Si tenes problemas cun sa còmpora sighi custu ligàmene, pro praghere. + Abbonamentu annuale + Abbonamentu mensile + Abbonamentu trimestrale + Data de addèbitu imbeniente: %1$s + Annulladu + Rinnova s\'abbonamentu + In isetu + Iscadidu + Agiornare totu sas mapas annànghidas a %1$s\? + Nùmeru de essida + Avisa in casu de barigamentu + Puntos de s\'impreadore + Essida \ No newline at end of file From a2cc187623700d9c4e934a971f635d7435d006d6 Mon Sep 17 00:00:00 2001 From: Ajeje Brazorf Date: Wed, 14 Apr 2021 16:56:23 +0000 Subject: [PATCH 14/18] Translated using Weblate (Sardinian) Currently translated at 99.4% (3905 of 3925 strings) --- OsmAnd/res/values-sc/phrases.xml | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/OsmAnd/res/values-sc/phrases.xml b/OsmAnd/res/values-sc/phrases.xml index ce6674505d..7d9420b4f3 100644 --- a/OsmAnd/res/values-sc/phrases.xml +++ b/OsmAnd/res/values-sc/phrases.xml @@ -3894,4 +3894,36 @@ Riferimentu locale Geodesista Tzentru pro cunferèntzias + Wakeboard + Ultimate + Pista pro mototziclismu + Tiru de ferros de caddu + Polo in bitzicleta + Curling + Crossfit + Lutas de puddos + Imbèrghidas dae sos iscameddos + Bob + Biathlon + Iscì de abba + Polo de abba + Zurkhaneh + Luta + Artziada de pesos + Ufìtziu diplomàticu + Kickboxing + Ischerma + Corrida + Aikido + Taekwondo + Biliardinu + Sumo + Snooker + Tiru de su pesu + Pilates + Jiu-jitsu + Karatè + Canisteddos + Pratzola de acampamentu + Casta de baia \ No newline at end of file From 6db150b4e539b42df1d7df8031a80eded58a113e Mon Sep 17 00:00:00 2001 From: xmd5a Date: Thu, 15 Apr 2021 12:05:33 +0300 Subject: [PATCH 15/18] Add phrase --- OsmAnd/res/values/phrases.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OsmAnd/res/values/phrases.xml b/OsmAnd/res/values/phrases.xml index 2089642add..30f5e2a4f6 100644 --- a/OsmAnd/res/values/phrases.xml +++ b/OsmAnd/res/values/phrases.xml @@ -4381,4 +4381,6 @@ Diplomatic office + Plateau + From 8bbd650a9bf014c1082d28fabf450f129c347b77 Mon Sep 17 00:00:00 2001 From: solokot Date: Thu, 15 Apr 2021 10:57:19 +0000 Subject: [PATCH 16/18] Translated using Weblate (Russian) Currently translated at 100.0% (3717 of 3717 strings) --- OsmAnd/res/values-ru/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index dd9c8f6526..10686a043a 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -4086,5 +4086,5 @@ Точки пользователя Вывод %1$s → … - Номер съезда + Номер выезда \ No newline at end of file From 09631d27b8e4f9669c1dd000d1beb98bf695ee25 Mon Sep 17 00:00:00 2001 From: Evgenii Martynenko Date: Thu, 15 Apr 2021 10:57:47 +0000 Subject: [PATCH 17/18] Translated using Weblate (Russian) Currently translated at 100.0% (3717 of 3717 strings) --- OsmAnd/res/values-ru/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index 10686a043a..dd9c8f6526 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -4086,5 +4086,5 @@ Точки пользователя Вывод %1$s → … - Номер выезда + Номер съезда \ No newline at end of file From dd1354cf3bf2ebf6d0843e6674604a02aa18a47c Mon Sep 17 00:00:00 2001 From: xmd5a Date: Thu, 15 Apr 2021 16:20:25 +0300 Subject: [PATCH 18/18] Add phrase --- OsmAnd/res/values/phrases.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OsmAnd/res/values/phrases.xml b/OsmAnd/res/values/phrases.xml index 30f5e2a4f6..ba5a5dfe4b 100644 --- a/OsmAnd/res/values/phrases.xml +++ b/OsmAnd/res/values/phrases.xml @@ -4383,4 +4383,6 @@ Plateau + Social club +