Merge branch 'master' into follow_track
This commit is contained in:
commit
fde90d40d4
37 changed files with 462 additions and 267 deletions
|
@ -39,6 +39,7 @@ public class Amenity extends MapObject {
|
|||
public static final String CONTENT = "content";
|
||||
public static final String CUISINE = "cuisine";
|
||||
public static final String WIKIDATA = "wikidata";
|
||||
public static final String WIKIMEDIA_COMMONS = "wikimedia_commons";
|
||||
public static final String DISH = "dish";
|
||||
public static final String REF = "ref";
|
||||
public static final String OSM_DELETE_VALUE = "delete";
|
||||
|
|
|
@ -32,6 +32,8 @@ public interface ITileSource {
|
|||
|
||||
public String getReferer();
|
||||
|
||||
public String getUserAgent();
|
||||
|
||||
public void deleteTiles(String path);
|
||||
|
||||
public int getAvgSize();
|
||||
|
|
|
@ -90,6 +90,7 @@ public class MapTileDownloader {
|
|||
public final int yTile;
|
||||
public String url;
|
||||
public String referer = null;
|
||||
public String userAgent = null;
|
||||
public boolean error;
|
||||
|
||||
public DownloadRequest(String url, File fileToSave, int xTile, int yTile, int zoom) {
|
||||
|
@ -266,7 +267,7 @@ public class MapTileDownloader {
|
|||
request.setError(false);
|
||||
try {
|
||||
URLConnection connection = NetworkUtils.getHttpURLConnection(request.url);
|
||||
connection.setRequestProperty("User-Agent", USER_AGENT); //$NON-NLS-1$
|
||||
connection.setRequestProperty("User-Agent", Algorithms.isEmpty(request.userAgent) ? USER_AGENT : request.userAgent); //$NON-NLS-1$
|
||||
if (request.referer != null)
|
||||
connection.setRequestProperty("Referer", request.referer); //$NON-NLS-1$
|
||||
connection.setConnectTimeout(CONNECTION_TIMEOUT);
|
||||
|
|
|
@ -68,6 +68,7 @@ public class TileSourceManager {
|
|||
private String[] randomsArray;
|
||||
private String rule;
|
||||
private String referer;
|
||||
private String userAgent;
|
||||
private boolean hidden; // if hidden in configure map settings, for example mapillary sources
|
||||
|
||||
private boolean isRuleAcceptable = true;
|
||||
|
@ -261,6 +262,14 @@ public class TileSourceManager {
|
|||
this.referer = referer;
|
||||
}
|
||||
|
||||
public String getUserAgent() {
|
||||
return userAgent;
|
||||
}
|
||||
|
||||
public void setUserAgent(String userAgent) {
|
||||
this.userAgent = userAgent;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTileSize() {
|
||||
return tileSize;
|
||||
|
@ -484,6 +493,9 @@ public class TileSourceManager {
|
|||
if (!Algorithms.isEmpty(tm.getReferer())) {
|
||||
properties.put("referer", tm.getReferer());
|
||||
}
|
||||
if (!Algorithms.isEmpty(tm.getUserAgent())) {
|
||||
properties.put("user_agent", tm.getUserAgent());
|
||||
}
|
||||
|
||||
properties.put("ext", tm.getTileFormat());
|
||||
properties.put("min_zoom", tm.getMinimumZoomSupported() + "");
|
||||
|
@ -708,6 +720,12 @@ public class TileSourceManager {
|
|||
}
|
||||
String randoms = attributes.get("randoms");
|
||||
TileSourceTemplate templ = new TileSourceTemplate(name, urlTemplate, ext, maxZoom, minZoom, tileSize, bitDensity, avgTileSize);
|
||||
if (attributes.get("referer") != null) {
|
||||
templ.setReferer(attributes.get("referer"));
|
||||
}
|
||||
if (attributes.get("user_agent") != null) {
|
||||
templ.setUserAgent(attributes.get("user_agent"));
|
||||
}
|
||||
if(expirationTime >= 0) {
|
||||
templ.setExpirationTimeMinutes(expirationTime);
|
||||
}
|
||||
|
|
|
@ -221,8 +221,8 @@
|
|||
<string name="yard">ヤード</string>
|
||||
<string name="foot">フィート</string>
|
||||
<string name="mile">マイル</string>
|
||||
<string name="km">キロメートル</string>
|
||||
<string name="m">メートル</string>
|
||||
<string name="km">km</string>
|
||||
<string name="m">m</string>
|
||||
<string name="nm">海里</string>
|
||||
<string name="min_mile">min/m</string>
|
||||
<string name="min_km">min/km</string>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<resources>
|
||||
<string name="searching_for_gps">Posicionando…</string>
|
||||
<string name="si_nm_h">Milhas náuticas por hora (nó)</string>
|
||||
<string name="install_osmand_dialog_message">Você precisa instalar a versão gratuita ou paga do OsmAnd primeiro</string>
|
||||
<string name="install_osmand_dialog_message">Precisa instalar a versão gratuita ou paga do OsmAnd primeiro</string>
|
||||
<string name="shared_string_telegram">Telegram</string>
|
||||
<string name="shared_string_login">Entrar</string>
|
||||
<string name="start_end_date">Data de início - fim</string>
|
||||
|
@ -10,7 +10,7 @@
|
|||
<string name="gps_not_available">Por favor, ligue \"Localização\" nas configurações do sistema</string>
|
||||
<string name="timeline_no_data">Sem dados</string>
|
||||
<string name="sending_location_messages">enviando localização</string>
|
||||
<string name="location_sharing_description">Selecione os contatos e grupos com os quais você deseja compartilhar sua localização.</string>
|
||||
<string name="location_sharing_description">Selecione os contactos e grupos com os quais deseja compartilhar sua localização.</string>
|
||||
<string name="waiting_for_response_from_telegram">Aguardando resposta do Telegram</string>
|
||||
<string name="connected_account">Conta conectada</string>
|
||||
<string name="osmand_privacy_policy">Política de privacidade do OsmAnd</string>
|
||||
|
@ -33,7 +33,7 @@
|
|||
<string name="last_updated_location">Última localização atualizada:</string>
|
||||
<string name="stale_location">Parado</string>
|
||||
<string name="show_gps_points_descr">Mostrar quantidade de pontos de GPS coletados e enviados.</string>
|
||||
<string name="already_registered_in_telegram">Você precisa de uma conta e número de telefone registrados no Telegram</string>
|
||||
<string name="already_registered_in_telegram">Precisa de uma conta e número de telefone registados no Telegram</string>
|
||||
<string name="min_logging_speed_descr">Filtro: sem registro abaixo da velocidade selecionada</string>
|
||||
<string name="shared_string_sort_by">Ordenar por</string>
|
||||
<string name="shared_string_sent">Enviado</string>
|
||||
|
@ -42,7 +42,7 @@
|
|||
<string name="successfully_sent_and_updated">Enviado e atualizado com sucesso</string>
|
||||
<string name="send_location_as_descr">Escolha como as mensagens com sua localização serão exibidas.</string>
|
||||
<string name="shared_string_connection">Conexão</string>
|
||||
<string name="share_location_as_description">Se você deseja conectar vários aparelhos a uma conta de telegrama, é necessário usar um aparelho diferente para compartilhar sua localização.</string>
|
||||
<string name="share_location_as_description">Se deseja conectar vários aparelhos a uma conta de telegrama, é necessário usar um aparelho diferente para compartilhar a sua localização.</string>
|
||||
<string name="proxy_password">Palavra-passe</string>
|
||||
<string name="shared_string_authorization">Autorização</string>
|
||||
<string name="shared_string_select">Selecionar</string>
|
||||
|
@ -51,7 +51,7 @@
|
|||
<string name="shared_string_bot">Robô</string>
|
||||
<string name="average_altitude">Altitude média</string>
|
||||
<string name="start_date">Data de início</string>
|
||||
<string name="live_now_description">Contatos e grupos compartilhando o local para você.</string>
|
||||
<string name="live_now_description">Contatos e grupos compartilhando o local consigo.</string>
|
||||
<string name="shared_string_all">Todos</string>
|
||||
<string name="received_gps_points">Pontos GPX recebidos: %1$s</string>
|
||||
<string name="shared_string_appearance">Aparência</string>
|
||||
|
@ -59,7 +59,7 @@
|
|||
<string name="by_distance">Pela distância</string>
|
||||
<string name="turn_off_location_sharing">Desativar o compartilhamento de local</string>
|
||||
<string name="shared_string_collected">Coletado</string>
|
||||
<string name="enter_another_device_name">Escolha um nome que você ainda não usou</string>
|
||||
<string name="enter_another_device_name">Escolha um nome que ainda não usou</string>
|
||||
<string name="shared_string_add">Adicionar</string>
|
||||
<string name="show_users_on_map">Mostrar utilitadoes no mapa</string>
|
||||
<string name="enter_authentication_code">Digite o código de autenticação</string>
|
||||
|
@ -81,8 +81,8 @@
|
|||
<string name="proxy_connected">Conectado</string>
|
||||
<string name="m">m</string>
|
||||
<string name="stop_sharing_all">O compartilhamento está ativado (desativado)</string>
|
||||
<string name="do_not_have_telegram">Eu não tenho conta Telegram</string>
|
||||
<string name="get_telegram_account_first">Você precisa de uma conta do Telegram para usar o compartilhamento de local.</string>
|
||||
<string name="do_not_have_telegram">Não tenho uma conta do Telegram</string>
|
||||
<string name="get_telegram_account_first">Precisa de uma conta do Telegram para usar o compartilhamento de local.</string>
|
||||
<string name="disable_all_sharing">Desativar todo o compartilhamento</string>
|
||||
<string name="sharing_status">Status de compartilhamento</string>
|
||||
<string name="shared_string_end">Fim</string>
|
||||
|
@ -92,11 +92,11 @@
|
|||
<string name="shared_string_later">Mais tarde</string>
|
||||
<string name="my_location">Minha localização</string>
|
||||
<string name="install_osmand">Instalar OsmAnd</string>
|
||||
<string name="privacy_policy_use_telegram">Telegrama (a app de mensagens) é usado para conectar e se comunicar com as pessoas.</string>
|
||||
<string name="privacy_policy_use_telegram">Telegram (a app de mensagens) é usado para conectar e comunicar com as pessoas.</string>
|
||||
<string name="not_possible_to_send_to_telegram_chats">Não é possível enviar para bate-papo do Telegram:</string>
|
||||
<string name="not_sent_yet">Ainda não enviado</string>
|
||||
<string name="points_size">%1$d pontos</string>
|
||||
<string name="welcome_descr"><b>OsmAnd Tracker</b> permite que partilhe a sua localização e veja a dos outros no OsmAnd.<br/> <br/>O app usa a API Telegram e você precisa de uma conta do Telegram.</string>
|
||||
<string name="welcome_descr"><b>OsmAnd Tracker</b> permite que partilhe a sua localização e veja a dos outros no OsmAnd.<br/> <br/>O app usa a API Telegram e precisa de uma conta do Telegram.</string>
|
||||
<string name="min_logging_distance_descr">Filtro: distância mínima para registrar um novo ponto</string>
|
||||
<string name="device_name_cannot_be_empty">O nome do aparelho não pode estar vazio</string>
|
||||
<string name="yard">yd</string>
|
||||
|
@ -152,7 +152,7 @@
|
|||
<string name="hours_and_minutes_format">%1$d h %2$d m</string>
|
||||
<string name="device_name_is_too_long">Nome do aparelho muito longo</string>
|
||||
<string name="gps_points">Pontos de GPS</string>
|
||||
<string name="timeline_description">Ative o monitoramento para salvar todos os locais no histórico.</string>
|
||||
<string name="timeline_description">Ative o monitoramento para gravar todos os locais no histórico.</string>
|
||||
<string name="show_on_map">Mostrar no mapa</string>
|
||||
<string name="send_my_location">Enviar minha localização</string>
|
||||
<string name="share_location_as">Compartilhar localização como</string>
|
||||
|
@ -160,7 +160,7 @@
|
|||
<string name="mile_per_hour">mph</string>
|
||||
<string name="si_min_m">Minutos por milha</string>
|
||||
<string name="last_update_from_telegram">Última atualização do Telegram</string>
|
||||
<string name="logout_from_osmand_telegram_descr">Tem certeza de que deseja sair do OsmAnd Tracker para que você não possa compartilhar o local ou ver a localização de outras pessoas\?</string>
|
||||
<string name="logout_from_osmand_telegram_descr">Tem certeza de que deseja sair do OsmAnd Tracker para que não possa compartilhar o local ou ver a localização de outras pessoas\?</string>
|
||||
<string name="proxy_server">Servidor</string>
|
||||
<string name="si_m_s">Metros por segundo</string>
|
||||
<string name="location_sharing_status">Compartilhamento: %1$s</string>
|
||||
|
@ -199,7 +199,7 @@
|
|||
<string name="shared_string_authorization_descr">Por favor, insira o número de telefone do seu Telegram em formato internacional</string>
|
||||
<string name="set_visible_time_for_all">Definir tempo visível para todos</string>
|
||||
<string name="phone_number_title">Número de telefone</string>
|
||||
<string name="privacy_policy_agree">Ao clicar em \"Continuar\" você concorda com as condições da política de privacidade do Telegram e OsmAnd.</string>
|
||||
<string name="privacy_policy_agree">Ao clicar em \"Continuar\" concorda com as condições da política de privacidade do Telegram e OsmAnd.</string>
|
||||
<string name="si_mi_feet">Milhas/pés</string>
|
||||
<string name="monitoring_is_enabled">Monitoramento está ativado</string>
|
||||
<string name="osmand_connect_desc">Escolha a versão OsmAnd que OsmAnd Tracker usa para exibir posições.</string>
|
||||
|
|
|
@ -57,10 +57,10 @@
|
|||
<string name="timeline_available_for_free_now">Linha do tempo é um recurso disponível agora gratuitamente.</string>
|
||||
<string name="disable_monitoring">Desativar monitoramento</string>
|
||||
<string name="location_recording_enabled">Gravação de localização ativada</string>
|
||||
<string name="timeline_description">Ative o monitoramento para salvar todos os locais no histórico.</string>
|
||||
<string name="privacy_policy_use_telegram">Telegrama (a app de mensagens) é usado para conectar e se comunicar com as pessoas.</string>
|
||||
<string name="timeline_description">Ative o monitoramento para gravar todos os locais no histórico.</string>
|
||||
<string name="privacy_policy_use_telegram">Telegram (a app de mensagens) é usado para conectar e comunicar com as pessoas.</string>
|
||||
<string name="privacy_policy_telegram_client">OsmAnd tracker é um dos clientes que usam a Plataforma aberta do Telegram . Seus contatos podem usar qualquer outro cliente Telegram.</string>
|
||||
<string name="privacy_policy_agree">Ao clicar em \"Continuar\" você concorda com as condições da política de privacidade do Telegram e OsmAnd.</string>
|
||||
<string name="privacy_policy_agree">Ao clicar em \"Continuar\" concorda com as condições da política de privacidade do Telegram e OsmAnd.</string>
|
||||
<string name="shared_string_accept">Aceitar</string>
|
||||
<string name="telegram_privacy_policy">Política de privacidade do Telegram</string>
|
||||
<string name="osmand_privacy_policy">Política de privacidade do OsmAnd</string>
|
||||
|
@ -82,7 +82,7 @@
|
|||
<string name="send_location_as_descr">Escolha como as mensagens com sua localização serão exibidas.</string>
|
||||
<string name="map_and_text">Mapa e texto</string>
|
||||
<string name="last_update_from_telegram">Última atualização do Telegram</string>
|
||||
<string name="enter_another_device_name">Escolha um nome que você ainda não usou</string>
|
||||
<string name="enter_another_device_name">Escolha um nome que ainda não usou</string>
|
||||
<string name="device_added_successfully">%1$s adicionado.</string>
|
||||
<string name="error_adding_new_device">Não foi possível adicionar novo aparelho</string>
|
||||
<string name="enter_device_name_description">Nomeie seu novo aparelho no máximo 200 símbolos.</string>
|
||||
|
@ -90,7 +90,7 @@
|
|||
<string name="device_name_cannot_be_empty">O nome do aparelho não pode estar vazio</string>
|
||||
<string name="device_name">Nome do aparelho</string>
|
||||
<string name="share_location_as_description_second_line">Pode criar e visualizar o ID do aparelho no cliente de telegrama usando o bot de bate-papo %1$s. %2$s</string>
|
||||
<string name="share_location_as_description">Se você deseja conectar vários aparelhos a uma conta de telegrama, é necessário usar um aparelho diferente para compartilhar sua localização.</string>
|
||||
<string name="share_location_as_description">Se deseja conectar vários aparelhos a uma conta de telegrama, é necessário usar um aparelho diferente para compartilhar a sua localização.</string>
|
||||
<string name="last_updated_location">Última localização atualizada:</string>
|
||||
<string name="successfully_sent_and_updated">Enviado e atualizado com sucesso</string>
|
||||
<string name="not_possible_to_send_to_telegram_chats">Não é possível enviar para bate-papo do Telegram:</string>
|
||||
|
@ -117,8 +117,8 @@
|
|||
<string name="shared_string_save">Gravar</string>
|
||||
<string name="add_device">Adicionar aparelho</string>
|
||||
<string name="share_location_as">Compartilhar localização como</string>
|
||||
<string name="live_now_description">Contatos e grupos compartilhando o local para você.</string>
|
||||
<string name="logout_from_osmand_telegram_descr">Tem certeza de que deseja sair do OsmAnd Tracker para que você não possa compartilhar o local ou ver a localização de outras pessoas\?</string>
|
||||
<string name="live_now_description">Contatos e grupos compartilhando o local consigo.</string>
|
||||
<string name="logout_from_osmand_telegram_descr">Tem certeza de que deseja sair do OsmAnd Tracker para que não possa compartilhar o local ou ver a localização de outras pessoas\?</string>
|
||||
<string name="logout_from_osmand_telegram">Sair do OsmAnd Tracker\?</string>
|
||||
<string name="shared_string_name">Nome</string>
|
||||
<string name="by_distance">Pela distância</string>
|
||||
|
@ -159,13 +159,13 @@
|
|||
<string name="shared_string_live">Vivo</string>
|
||||
<string name="shared_string_bot">Robô</string>
|
||||
<string name="get_telegram_title">Registro no Telegram</string>
|
||||
<string name="get_telegram_account_first">Você precisa de uma conta do Telegram para usar o compartilhamento de local.</string>
|
||||
<string name="get_telegram_account_first">Precisa de uma conta do Telegram para usar o compartilhamento de local.</string>
|
||||
<string name="get_telegram_description_continue">Por favor, instale o Telegram e configure uma conta.</string>
|
||||
<string name="get_telegram_after_creating_account">Então pode usar esta app.</string>
|
||||
<string name="shared_string_all">Todos</string>
|
||||
<string name="shared_string_off">Desligado</string>
|
||||
<string name="already_registered_in_telegram">Você precisa de uma conta e número de telefone registrados no Telegram</string>
|
||||
<string name="do_not_have_telegram">Eu não tenho conta Telegram</string>
|
||||
<string name="shared_string_off">Desativado</string>
|
||||
<string name="already_registered_in_telegram">Precisa de uma conta e número de telefone registados no Telegram</string>
|
||||
<string name="do_not_have_telegram">Não tenho uma conta do Telegram</string>
|
||||
<string name="enter_phone_number">Digite o número de telefone</string>
|
||||
<string name="enter_authentication_code">Digite o código de autenticação</string>
|
||||
<string name="set_visible_time_for_all">Definir tempo visível para todos</string>
|
||||
|
@ -173,12 +173,12 @@
|
|||
<string name="minutes_format">%1$d m</string>
|
||||
<string name="hours_format">%1$d h</string>
|
||||
<string name="shared_string_install">Instalar</string>
|
||||
<string name="shared_string_share">Partilhar</string>
|
||||
<string name="shared_string_share">Compartilhar</string>
|
||||
<string name="shared_string_back">Voltar</string>
|
||||
<string name="visible_time_for_all">Hora visível para todos</string>
|
||||
<string name="set_time_description">Defina a hora em que seus contatos e grupos selecionados verão sua localização em tempo real.</string>
|
||||
<string name="set_time">Definir tempo</string>
|
||||
<string name="location_sharing_description">Selecione os contatos e grupos com os quais você deseja compartilhar sua localização.</string>
|
||||
<string name="location_sharing_description">Selecione os contactos e grupos com os quais deseja compartilhar sua localização.</string>
|
||||
<string name="my_location_search_hint">Pesquisa: Grupo ou contato</string>
|
||||
<string name="start_location_sharing">Compartilhar localização</string>
|
||||
<string name="show_on_map">Mostrar no mapa</string>
|
||||
|
@ -190,7 +190,7 @@
|
|||
<string name="authentication_code">Código de Autenticação</string>
|
||||
<string name="authentication_code_descr">Uma faixa GPX é salva automaticamente durante a navegação.</string>
|
||||
<string name="enter_password">Digite a palavra-passe</string>
|
||||
<string name="password_descr">Palavra-passe do Telegram</string>
|
||||
<string name="password_descr">Palavra-passe do telegrama</string>
|
||||
<string name="shared_string_login">Entrar</string>
|
||||
<string name="shared_string_logout">Sair</string>
|
||||
<string name="initialization">Iniciando</string>
|
||||
|
@ -204,14 +204,14 @@
|
|||
<string name="no_location_permission">A app não tem permissão para acessar os dados de localização.</string>
|
||||
<string name="gps_not_available">Por favor, ligue \"Localização\" nas configurações do sistema</string>
|
||||
<string name="location_service_no_gps_available">Selecione um dos provedores de localização para compartilhar sua localização.</string>
|
||||
<string name="osmand_service">Modo de fundo</string>
|
||||
<string name="osmand_service">Modo em segundo plano</string>
|
||||
<string name="osmand_service_descr">OsmAnd Tracker é executado em segundo plano com o ecrã desligado.</string>
|
||||
<string name="shared_string_distance">Distância</string>
|
||||
<string name="share_location">Compartilhar localização</string>
|
||||
<string name="sharing_location">Compartilhando localização</string>
|
||||
<string name="process_service">Serviço OsmAnd Tracker</string>
|
||||
<string name="osmand_logo">Logotipo do OsmAnd</string>
|
||||
<string name="install_osmand_dialog_message">Você precisa instalar a versão gratuita ou paga do OsmAnd primeiro</string>
|
||||
<string name="install_osmand_dialog_message">Precisa instalar a versão gratuita ou paga do OsmAnd primeiro</string>
|
||||
<string name="install_osmand">Instalar OsmAnd</string>
|
||||
<string name="show_users_on_map">Mostrar utilitadoes no mapa</string>
|
||||
<string name="active_chats">Bate-papos ativos</string>
|
||||
|
@ -230,30 +230,29 @@
|
|||
<string name="m_s">m/s</string>
|
||||
<string name="km_h">km/h</string>
|
||||
<string name="mile_per_hour">mph</string>
|
||||
<string name="si_kmh">Quilómetros por hora</string>
|
||||
<string name="si_kmh">Quilômetros por hora</string>
|
||||
<string name="si_mph">Milhas por hora</string>
|
||||
<string name="si_m_s">Metros por segundo</string>
|
||||
<string name="si_min_km">Minutos por quilómetro</string>
|
||||
<string name="si_min_km">Minutos por quilômetro</string>
|
||||
<string name="si_min_m">Minutos por milha</string>
|
||||
<string name="si_nm_h">Milhas náuticas por hora (nó)</string>
|
||||
<string name="si_mi_feet">Milhas/pés</string>
|
||||
<string name="si_mi_yard">Milhas/jardas</string>
|
||||
<string name="si_km_m">Quilómetros/metros</string>
|
||||
<string name="si_km_m">Quilômetros/metros</string>
|
||||
<string name="si_nm">Milhas náuticas</string>
|
||||
<string name="si_mi_meters">Milhas/metros</string>
|
||||
<string name="shared_string_hour_short">h</string>
|
||||
<string name="shared_string_minute_short">min</string>
|
||||
<string name="shared_string_second_short">seg</string>
|
||||
<string name="welcome_descr">O <b>OsmAnd Tracker</b> permite que partilhe sua localização e veja a dos outros no OsmAnd.<br/>
|
||||
<br/>O app usa a API Telegram e você precisa de uma conta da Telegram.</string>
|
||||
<string name="welcome_descr"><b>OsmAnd Tracker</b> permite que partilhe a sua localização e veja a dos outros no OsmAnd.<br/> <br/>O app usa a API Telegram e precisa de uma conta do Telegram.</string>
|
||||
<string name="my_location">Minha localização</string>
|
||||
<string name="live_now">Ao vivo agora</string>
|
||||
<string name="timeline">Cronologia</string>
|
||||
<string name="saved_messages">Mensagens gravadas</string>
|
||||
<string name="time_zone_descr">Selecione o fuso horário para mostrar nas suas mensagens de localização.</string>
|
||||
<string name="time_zone_descr">Selecione o fuso horário a mostrar nas suas mensagens de localização.</string>
|
||||
<string name="time_zone">Fuso horário</string>
|
||||
<string name="units_and_formats">Unidades e formatos</string>
|
||||
<string name="unit_of_length_descr">Alterar unidade de medida de distância.</string>
|
||||
<string name="unit_of_length_descr">Alterar unidade de distância.</string>
|
||||
<string name="unit_of_length">Unidades de comprimento</string>
|
||||
<string name="unit_of_speed_system_descr">Definir unidade de velocidade.</string>
|
||||
<string name="unit_of_speed_system">Unidade de velocidade</string>
|
||||
|
|
|
@ -122,7 +122,7 @@
|
|||
<string name="osmand_connect_desc">Выберите версию OsmAnd которую OsmAnd Tracker использует для отображения положений на карте.</string>
|
||||
<string name="osmand_connect">OsmAnd подключение</string>
|
||||
<string name="connected_account">Связанная учетная запись</string>
|
||||
<string name="shared_string_account">Учетная запись</string>
|
||||
<string name="shared_string_account">Учётная запись</string>
|
||||
<string name="start_location_sharing">Начать отправку локации</string>
|
||||
<string name="install_osmand_dialog_message">Вам необходимо сначала установить бесплатную или платную версию OsmAnd</string>
|
||||
<string name="disconnect_from_telegram">Как отключить OsmAnd Tracker от Telegram</string>
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:minHeight="@dimen/bottom_sheet_selected_item_title_height"
|
||||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingRight="@dimen/content_padding"
|
||||
android:paddingTop="@dimen/measurement_tool_menu_title_padding_top"
|
||||
android:orientation="vertical"
|
||||
android:paddingEnd="@dimen/content_padding"
|
||||
android:paddingStart="@dimen/content_padding">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:ellipsize="end"
|
||||
android:gravity="center_vertical"
|
||||
android:maxLines="1"
|
||||
android:paddingBottom="@dimen/measurement_tool_menu_title_padding_bottom"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
android:textSize="@dimen/default_list_text_size"
|
||||
osmand:typeface="@string/font_roboto_medium"
|
||||
tools:text="Some title" />
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/description"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:lineSpacingMultiplier="@dimen/bottom_sheet_text_spacing_multiplier"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
android:textSize="@dimen/default_desc_text_size"
|
||||
osmand:typeface="@string/font_roboto_regular"
|
||||
tools:text="Some description" />
|
||||
|
||||
</LinearLayout>
|
|
@ -14,8 +14,8 @@
|
|||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingEnd="@dimen/content_padding"
|
||||
android:paddingRight="@dimen/content_padding"
|
||||
android:paddingTop="@dimen/multi_selection_menu_padding_top"
|
||||
android:paddingBottom="@dimen/bottom_sheet_title_padding_bottom"
|
||||
android:paddingTop="@dimen/measurement_tool_menu_title_padding_top"
|
||||
android:paddingBottom="@dimen/measurement_tool_menu_title_padding_bottom"
|
||||
android:text="@string/plan_route_open_existing_track"
|
||||
android:textAppearance="@style/TextAppearance.ListItemTitle"
|
||||
osmand:typeface="@string/font_roboto_medium" />
|
||||
|
|
|
@ -304,7 +304,7 @@
|
|||
android:paddingLeft="@dimen/measurement_tool_button_padding"
|
||||
android:paddingRight="@dimen/measurement_tool_button_padding"
|
||||
android:text="@string/shared_string_apply"
|
||||
android:textColor="?attr/color_dialog_buttons"
|
||||
android:textColor="@color/color_white"
|
||||
android:textAllCaps="false"
|
||||
android:paddingEnd="@dimen/measurement_tool_button_padding"
|
||||
android:paddingStart="@dimen/measurement_tool_button_padding" />
|
||||
|
|
|
@ -20,8 +20,10 @@
|
|||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/choose_navigation_title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/bottom_sheet_title_height"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingTop="@dimen/measurement_tool_menu_title_padding_top"
|
||||
android:paddingBottom="@dimen/measurement_tool_menu_title_padding_bottom"
|
||||
android:paddingEnd="@dimen/content_padding"
|
||||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingRight="@dimen/content_padding"
|
||||
|
@ -42,7 +44,6 @@
|
|||
android:textColor="?android:textColorPrimary"
|
||||
android:lineSpacingMultiplier="@dimen/bottom_sheet_text_spacing_multiplier"
|
||||
osmand:typeface="@string/font_roboto_regular"
|
||||
android:letterSpacing="@dimen/description_letter_spacing"
|
||||
android:textSize="@dimen/default_desc_text_size" />
|
||||
|
||||
<include layout="@layout/custom_radio_buttons" />
|
||||
|
@ -61,7 +62,6 @@
|
|||
android:textColor="?android:textColorPrimary"
|
||||
android:lineSpacingMultiplier="@dimen/bottom_sheet_text_spacing_multiplier"
|
||||
osmand:typeface="@string/font_roboto_regular"
|
||||
android:letterSpacing="@dimen/description_letter_spacing"
|
||||
android:textSize="@dimen/default_desc_text_size" />
|
||||
</LinearLayout>
|
||||
|
||||
|
|
|
@ -3480,4 +3480,22 @@ Zobrazená oblast: %1$s x %2$s</string>
|
|||
<string name="tiles_storage_descr">Zvolte způsob uložení stažených dlaždic.</string>
|
||||
<string name="export_import_quick_actions_with_profiles_promo">Rychlé akce můžete importovat nebo exportovat prostřednictvím profilů.</string>
|
||||
<string name="shared_string_delete_all_q">Odstranit vše\?</string>
|
||||
<string name="app_mode_go_cart">Motokára</string>
|
||||
<string name="osm_edit_closed_note">Uzavřená OSM poznámka</string>
|
||||
<string name="set_working_days_to_continue">Pro pokračování je potřeba nastavit pracovní dny</string>
|
||||
<string name="route_between_points">Trasa mezi body</string>
|
||||
<string name="plan_a_route">Naplánovat trasu</string>
|
||||
<string name="add_to_a_track">Přidat k trase</string>
|
||||
<string name="track_show_start_finish_icons">Zobrazit ikony startu a cíle</string>
|
||||
<string name="select_track_width">Zvolte šířku</string>
|
||||
<string name="gpx_split_interval_descr">Vyberte interval pro zobrazování značek na trase se vzdáleností nebo časem.</string>
|
||||
<string name="gpx_split_interval_none_descr">Vyberte požadované dělení: podle času nebo podle vzdálenosti.</string>
|
||||
<string name="shared_string_custom">Vlastní</string>
|
||||
<string name="gpx_direction_arrows">Směrové šipky</string>
|
||||
<string name="plan_route_last_edited">Naposledy upraveno</string>
|
||||
<string name="plan_route_import_track">Importovat trasu</string>
|
||||
<string name="plan_route_open_existing_track">Otevřít existující trasu</string>
|
||||
<string name="plan_route_create_new_route">Vytvořit novou trasu</string>
|
||||
<string name="plan_route_select_track_file_for_open">Vyberte trasu k otevření.</string>
|
||||
<string name="shared_string_done">Hotovo</string>
|
||||
</resources>
|
|
@ -1117,7 +1117,7 @@
|
|||
<string name="routing_attr_weight_description">Indiquez le poids du véhicule à respecter sur les routes.</string>
|
||||
<string name="select_gpx">Sélectionner GPX…</string>
|
||||
<string name="route_descr_select_destination">Définissez l\'arrivée</string>
|
||||
<string name="shared_string_select_on_map">Sélectionner sur la carte</string>
|
||||
<string name="shared_string_select_on_map">Sélectionnez sur la carte</string>
|
||||
<string name="shared_string_favorite">Favori</string>
|
||||
<string name="route_preferences">Préférences d\'itinéraire</string>
|
||||
<string name="route_info">Informations sur l\'itinéraire</string>
|
||||
|
|
|
@ -88,9 +88,9 @@
|
|||
<string name="indexing_poi">POIを索引中…</string>
|
||||
<string name="indexing_transport">交通機関を索引化…</string>
|
||||
<string name="shared_string_io_error">I/Oエラーです</string>
|
||||
<string name="km">キロメートル</string>
|
||||
<string name="km">km</string>
|
||||
<string name="km_h">km/h</string>
|
||||
<string name="m">メートル</string>
|
||||
<string name="m">m</string>
|
||||
<string name="old_map_index_is_not_supported">重複したマップ
|
||||
データ形式 \'\'{0}\'\' はサポートされていません</string>
|
||||
<string name="poi_filter_car_aid">自動車用施設</string>
|
||||
|
@ -3737,4 +3737,41 @@ POIの更新は利用できません</string>
|
|||
<string name="turn_screen_on_power_button">電源ボタン</string>
|
||||
<string name="use_volume_buttons_as_zoom_descr">端末の音量ボタンでマップのズームレベルを変更できるようにします。</string>
|
||||
<string name="use_volume_buttons_as_zoom">音量ボタンでズーム</string>
|
||||
<string name="track_show_start_finish_icons">出発・目的地アイコンを表示</string>
|
||||
<string name="select_track_width">幅の選択</string>
|
||||
<string name="gpx_split_interval_descr">距離または時間のマーカーが経路に表示される間隔を選択します。</string>
|
||||
<string name="gpx_split_interval_none_descr">時間または距離で、必要な分割オプションを選択します。</string>
|
||||
<string name="shared_string_custom">カスタム</string>
|
||||
<string name="gpx_direction_arrows">方向矢印</string>
|
||||
<string name="plan_route_last_edited">最終編集日時</string>
|
||||
<string name="plan_route_import_track">経路のインポート</string>
|
||||
<string name="plan_route_open_existing_track">既存の経路を開く</string>
|
||||
<string name="plan_route_create_new_route">新しいルートの作成</string>
|
||||
<string name="plan_route_select_track_file_for_open">開きたい経路ファイルを選択します。</string>
|
||||
<string name="shared_string_done">完了</string>
|
||||
<string name="overwrite_track">経路を上書き</string>
|
||||
<string name="save_as_new_track">新しい経路として保存</string>
|
||||
<string name="reverse_route">ルート反転</string>
|
||||
<string name="rourte_between_points_next_segment_button_desc">選択したプロファイルを使用して、次のセグメントのみ再計算します。</string>
|
||||
<string name="rourte_between_points_whole_track_button_desc">選択したプロファイルを使用して、経路全体が再計算されます。</string>
|
||||
<string name="rourte_between_points_desc">直線で地点間をつなげる方法をとるか、選択したプロファイルで地点間のルートを計算します。</string>
|
||||
<string name="whole_track">全経路</string>
|
||||
<string name="next_segment">次のセグメント</string>
|
||||
<string name="rourte_between_points_warning_desc">このオプションを使用するには、OsmAndで経路をマップ上の道路にスナップする必要があります。
|
||||
\n
|
||||
\n次にナビゲーションプロファイルを選択して、利用予定の道路(一般道、高速道路)と、道路を追跡するおおよその距離を検出する必要があります。</string>
|
||||
<string name="threshold_distance">限界距離</string>
|
||||
<string name="navigation_profile">ナビゲーションプロファイル</string>
|
||||
<string name="rourte_between_points_add_track_desc">新しいセグメントを追加するための経路ファイルを選択します。</string>
|
||||
<string name="street_level_imagery">ストリート画像</string>
|
||||
<string name="plan_route_exit_dialog_descr">保存せずにルート計画を終了した場合すべての変更が失われます。よろしいですか?</string>
|
||||
<string name="app_mode_enduro_motorcycle">エンデューロバイク</string>
|
||||
<string name="app_mode_motor_scooter">電動スクーター</string>
|
||||
<string name="app_mode_wheelchair">車椅子</string>
|
||||
<string name="app_mode_go_cart">ゴーカート</string>
|
||||
<string name="osm_edit_closed_note">OSMのメモを閉じました</string>
|
||||
<string name="set_working_days_to_continue">続けるには営業日を設定する必要があります</string>
|
||||
<string name="route_between_points">地点間のルート</string>
|
||||
<string name="plan_a_route">ルートを計画</string>
|
||||
<string name="add_to_a_track">経路に追加</string>
|
||||
</resources>
|
|
@ -304,7 +304,7 @@
|
|||
<string name="poi_city_gate">Brama miasta</string>
|
||||
<string name="poi_fort">Fort</string>
|
||||
<string name="poi_fountain">Fontanna</string>
|
||||
<string name="poi_historic_ruins">Zabytkowe ruiny</string>
|
||||
<string name="poi_historic_ruins">Ruiny o znaczeniu historycznym</string>
|
||||
<string name="poi_rune_stone">Kamień runiczny</string>
|
||||
<string name="poi_wreck">Wrak statku</string>
|
||||
<string name="poi_historic_ship">Zabytkowy statek</string>
|
||||
|
|
|
@ -62,9 +62,8 @@
|
|||
<string name="waypoint_visit_before">Passar antes</string>
|
||||
<string name="simulate_your_location">Simular rota</string>
|
||||
<string name="drawer">Lista simples</string>
|
||||
<string name="short_location_on_map">Lat %1$s
|
||||
\n
|
||||
\nLon %2$s</string>
|
||||
<string name="short_location_on_map">Latitude %1$s
|
||||
\nLongitude %2$s</string>
|
||||
<string name="tips_and_tricks_descr">Respostas às perguntas frequentes, mudanças recentes e outras.</string>
|
||||
<string name="routing_settings_2">Configurações de navegação</string>
|
||||
<string name="general_settings_2">Configurações gerais</string>
|
||||
|
@ -780,7 +779,7 @@
|
|||
<string name="osmand_parking_minutes">Minutos</string>
|
||||
<string name="osmand_parking_position_description_add_time">O carro foi estacionado em</string>
|
||||
<string name="index_settings">Gerenciar mapas</string>
|
||||
<string name="context_menu_item_search">Pesquise nas proximidades</string>
|
||||
<string name="context_menu_item_search">Pesquise por perto</string>
|
||||
<string name="local_index_descr_title">Gerenciar mapas.</string>
|
||||
<string name="show_point_options">Usar posição…</string>
|
||||
<string name="only_show">Exibir rota</string>
|
||||
|
@ -1364,7 +1363,7 @@
|
|||
<string name="route_tsll">Vire levemente à esquerda e siga</string>
|
||||
<string name="search_poi_location">Aguardando sinal…</string>
|
||||
<string name="search_near_map">Pesquisar próximo ao centro do mapa</string>
|
||||
<string name="search_nearby">Pesquise nas proximidades</string>
|
||||
<string name="search_nearby">Pesquise por perto</string>
|
||||
<string name="map_orientation_default">Mesma do aparelho</string>
|
||||
<string name="map_orientation_portrait">Vertical</string>
|
||||
<string name="map_orientation_landscape">Horizontal</string>
|
||||
|
@ -1812,7 +1811,7 @@
|
|||
<string name="update">Atualizar</string>
|
||||
<string name="only_download_over_wifi">Somente baixar via Wi-Fi</string>
|
||||
<string name="live_update">Atualização ao vivo</string>
|
||||
<string name="update_now">Atualizar agora</string>
|
||||
<string name="update_now">Atualizar</string>
|
||||
<string name="route_distance">Distância:</string>
|
||||
<string name="route_duration">Tempo:</string>
|
||||
<string name="missing_write_external_storage_permission">OsmAnd não tem permissão para usar o cartão de memória</string>
|
||||
|
@ -1835,7 +1834,7 @@
|
|||
<string name="rec_split_clip_length_desc">Limite de tempo máximo para clipes gravados.</string>
|
||||
<string name="rec_split_storage_size">Limite de armazenamento</string>
|
||||
<string name="rec_split_storage_size_desc">Quantidade de espaço que pode ser ocupado por todos os clipes gravados.</string>
|
||||
<string name="last_map_change">Última alteração no mapa: %s</string>
|
||||
<string name="last_map_change">Última alteração: %s</string>
|
||||
<string name="hourly">A cada hora</string>
|
||||
<string name="daily">Diariamente</string>
|
||||
<string name="weekly">Semanalmente</string>
|
||||
|
@ -2087,7 +2086,7 @@
|
|||
<string name="routing_attr_avoid_ice_roads_fords_name">Sem estradas de gelo ou vaus</string>
|
||||
<string name="routing_attr_avoid_ice_roads_fords_description">Evitar estradas de gelo e vaus.</string>
|
||||
<string name="map_orientation_change_in_accordance_with_speed">Limite para orientação do mapa</string>
|
||||
<string name="quick_action_show_navigation_finish_dialog">Exibir notificação \'Navegação finalizada\'</string>
|
||||
<string name="quick_action_show_navigation_finish_dialog">Exibir notif. \'Navegação finalizada\'</string>
|
||||
<string name="mapillary_menu_title_tile_cache">Cache de quadrícula</string>
|
||||
<string name="map_widget_ruler_control">Régua de raio</string>
|
||||
<string name="show_from_zoom_level">Exibir a partir do nível de zoom</string>
|
||||
|
@ -2463,34 +2462,22 @@
|
|||
\n • Opção de gravação GPX permite-lhe gravar a sua viagem e compartilhá-la
|
||||
\n • Através de plugin adicionais, você pode ativar curvas de nível e sombreamento de relevo</string>
|
||||
<string name="osmand_extended_description_part6">Passeio, caminhada, turismo pela cidade
|
||||
\n
|
||||
\n• O mapa mostra caminhos para passeios e caminhadas
|
||||
\n
|
||||
\n• A Wikipédia no seu idioma preferido pode dizer muito durante um turismo pela cidade
|
||||
\n
|
||||
\n• Paradas de transportes públicos (ônibus, troleibus, trem) incluindo nomes de linha, ajuda a navegar em uma nova cidade
|
||||
\n
|
||||
\n• Navegação GPS em modo pedestre constrói a sua rota usando caminhos para pedestres
|
||||
\n
|
||||
\n• Fazer upload e seguir uma rota GPX ou gravar e compartilhar a sua própria rota
|
||||
\n • O mapa mostra caminhos para passeios e caminhadas
|
||||
\n • A Wikipédia no seu idioma preferido pode dizer muito durante um turismo pela cidade
|
||||
\n • Paradas de transportes públicos (ônibus, troleibus, trem) incluindo nomes de linha, ajuda a navegar em uma nova cidade
|
||||
\n • Navegação GPS em modo pedestre constrói a sua rota usando caminhos para pedestres
|
||||
\n • Fazer upload e seguir uma rota GPX ou gravar e compartilhar a sua própria rota
|
||||
\n</string>
|
||||
<string name="osmand_extended_description_part7">Contribua para o OSM
|
||||
\n
|
||||
\n• Comunique falha de dados
|
||||
\n
|
||||
\n• Carregue trilhas GPX diretamente do app
|
||||
\n
|
||||
\n• Adicione POIs e carregue-os diretamente ao OSM (ou mais tarde se off-line)
|
||||
\n • Comunique falha de dados
|
||||
\n • Carregue trilhas GPX diretamente do app
|
||||
\n • Adicione POIs e carregue-os diretamente ao OSM (ou mais tarde se off-line)
|
||||
\n</string>
|
||||
<string name="osmand_plus_extended_description_part5">Recursos de segurança
|
||||
\n
|
||||
\n• Alternância de exibição dia/noite automatizada opcional
|
||||
\n
|
||||
\n• Exibição de limite de velocidade opcional, com lembrete se você ultrapassá-lo
|
||||
\n
|
||||
\n• Zoom dependente da velocidade opcional
|
||||
\n
|
||||
\n• Compartilhe sua localização para que seus amigos possam encontrar você
|
||||
\n • Alternância de exibição dia/noite automatizada opcional
|
||||
\n • Exibição de limite de velocidade opcional, com lembrete se você ultrapassá-lo
|
||||
\n • Zoom dependente da velocidade opcional
|
||||
\n • Compartilhe sua localização para que seus amigos possam encontrar você
|
||||
\n</string>
|
||||
<string name="live_monitoring_max_interval_to_send_desrc">Especificar um buffer de tempo para manter locais para enviar sem conexão</string>
|
||||
<string name="quick_action_take_audio_note_descr">Um botão para adicionar uma nota de áudio no meio da tela.</string>
|
||||
|
@ -2559,18 +2546,12 @@
|
|||
<string name="move_point">Mover Ponto</string>
|
||||
<string name="osm_recipients_label">Destinatários OSM</string>
|
||||
<string name="osmand_plus_extended_description_part6">Recursos de Ciclismo e Pedestre
|
||||
\n
|
||||
\n• Visualização de caminhos a pé, pistas de caminhadas e ciclovias, ideal para atividades ao ar livre
|
||||
\n
|
||||
\n• Roteamento e modos de exibição especiais para bicicleta e pedestres
|
||||
\n
|
||||
\n• Paradas de transporte público opcionais (ônibus, troleibus, trem) incluindo nomes de linhas
|
||||
\n
|
||||
\n• Gravação opcional de viagem para arquivo GPX local ou serviço on-line
|
||||
\n
|
||||
\n• Exibição opcional de velocidade e altitudes
|
||||
\n
|
||||
\n• Exibição de curvas de nível e sombreamento de relevo (via plugin adicional)</string>
|
||||
\n • Visualização de caminhos a pé, pistas de caminhadas e ciclovias, ideal para atividades ao ar livre
|
||||
\n • Roteamento e modos de exibição especiais para bicicleta e pedestres
|
||||
\n • Paradas de transporte público opcionais (ônibus, troleibus, trem) incluindo nomes de linhas
|
||||
\n • Gravação opcional de viagem para arquivo GPX local ou serviço on-line
|
||||
\n • Exibição opcional de velocidade e altitudes
|
||||
\n • Exibição de curvas de nível e sombreamento de relevo (via plugin adicional)</string>
|
||||
<string name="shared_string_without_name">Sem nome</string>
|
||||
<string name="osmand_plus_extended_description_part8">Cobertura de mapa e qualidade aproximada:
|
||||
\n• Europa Ocidental: ****
|
||||
|
@ -2646,18 +2627,12 @@
|
|||
<string name="waypoints_removed_from_map_markers">Pontos de passagem removidos dos marcadores de mapa</string>
|
||||
<string name="shared_string_result">Resultado</string>
|
||||
<string name="osmand_plus_extended_description_part2">Navegação
|
||||
\n
|
||||
\n• Funciona on-line (rápido) ou offline (sem custo de roaming quando estiver no exterior)
|
||||
\n
|
||||
\n• Orientação por voz passo-a-passo (vozes gravadas e sintetizadas)
|
||||
\n
|
||||
\n• Orientação de faixas opcional, exibição do nome da rua e tempo estimado de chegada
|
||||
\n
|
||||
\n• Suporta pontos intermediários do seu itinerário
|
||||
\n
|
||||
\n• Correção de rota automático sempre que você sair da rota
|
||||
\n
|
||||
\n• Busque lugares por endereço, pelo tipo (ex.: restaurante, hotel, posto de gasolina, museu), ou por coordenadas geográficas
|
||||
\n • Funciona on-line (rápido) ou offline (sem custo de roaming quando estiver no exterior)
|
||||
\n • Orientação por voz passo-a-passo (vozes gravadas e sintetizadas)
|
||||
\n • Orientação de faixas opcional, exibição do nome da rua e tempo estimado de chegada
|
||||
\n • Suporta pontos intermediários do seu itinerário
|
||||
\n • Correção de rota automático sempre que você sair da rota
|
||||
\n • Busque lugares por endereço, pelo tipo (ex.: restaurante, hotel, posto de gasolina, museu), ou por coordenadas geográficas
|
||||
\n</string>
|
||||
<string name="osmand_plus_extended_description_part3">Visualização de mapa
|
||||
\n• Exiba sua posição e orientação
|
||||
|
@ -2668,19 +2643,13 @@
|
|||
\n• Opcionalmente exiba nomes de lugares em inglês, língua local ou fonético
|
||||
\n</string>
|
||||
<string name="osmand_plus_extended_description_part4">Use dados OSM e da Wikipédia
|
||||
\n • Informações de alta qualidade dos melhores projetos colaborativos do mundo
|
||||
\n • Dados OSM disponíveis por país ou região
|
||||
\n • POIs da Wikipédia, ótimo para visitas turísticas
|
||||
\n • Downloads grátis ilimitados, diretamente do aplicativo
|
||||
\n • Mapas vetoriais offline compactos e atualizados mensalmente
|
||||
\n
|
||||
\n• Informações de alta qualidade dos melhores projetos colaborativos do mundo
|
||||
\n
|
||||
\n• Dados OSM disponíveis por país ou região
|
||||
\n
|
||||
\n• POIs da Wikipédia, ótimo para visitas turísticas
|
||||
\n
|
||||
\n• Downloads grátis ilimitados, diretamente do aplicativo
|
||||
\n
|
||||
\n• Mapas vetoriais offline compactos e atualizados mensalmente
|
||||
\n
|
||||
\n
|
||||
\n• Escolha entre região completa ou apenas rede rodoviária (Exemplo: Japão inteiro tem 700 MB ou apenas 200 MB para rede rodoviária)</string>
|
||||
\n • Escolha entre região completa ou apenas rede rodoviária (Exemplo: Japão inteiro tem 700 MB ou apenas 200 MB para rede rodoviária)</string>
|
||||
<string name="online_webpage_warning">Página disponível só online. Abrir num navegador web?</string>
|
||||
<string name="images_cache">Cache de imagens</string>
|
||||
<string name="delete_search_history">Apagar histórico de pesquisa</string>
|
||||
|
@ -2817,16 +2786,11 @@
|
|||
\n
|
||||
\nAlgumas das principais características:</string>
|
||||
<string name="osmand_plus_extended_description_part7">Contribua diretamente para o OSM
|
||||
\n
|
||||
\n• Avisar erros de dados
|
||||
\n
|
||||
\n• Fazer upload de trilhas GPX para o OSM diretamente do app
|
||||
\n
|
||||
\n• Adicionar POIs e fazer o upload diretamente para OSM (ou mais tarde se offline)
|
||||
\n
|
||||
\n• Gravação de viagem opcional também em modo background (enquanto o dispositivo está no modo sleep)
|
||||
\n
|
||||
\nOsmAnd é um software de código aberto desenvolvido ativamente. Todos podem contribuir para o app, reportando bugs, melhorando as traduções ou programando novas funcionalidades. Além disso, o projeto conta com as contribuições financeiras para financiar o desenvolvimento e testes de novas funcionalidades.
|
||||
\n • Avisar erros de dados
|
||||
\n • Fazer upload de trilhas GPX para o OSM diretamente do app
|
||||
\n • Adicionar POIs e fazer o upload diretamente para OSM (ou mais tarde se offline)
|
||||
\n • Gravação de viagem opcional também em modo background (enquanto o dispositivo está no modo sleep)
|
||||
\n OsmAnd é um software de código aberto desenvolvido ativamente. Todos podem contribuir para o app, reportando bugs, melhorando as traduções ou programando novas funcionalidades. Além disso, o projeto conta com as contribuições financeiras para financiar o desenvolvimento e testes de novas funcionalidades.
|
||||
\n</string>
|
||||
<string name="point_deleted">Ponto %1$s foi excluído</string>
|
||||
<string name="shared_string_world">Mundo</string>
|
||||
|
|
|
@ -326,7 +326,7 @@
|
|||
<string name="poi_pharmacy">Аптека</string>
|
||||
<string name="poi_hospital">Больница</string>
|
||||
<string name="poi_doctors">Врач;Доктор</string>
|
||||
<string name="poi_clinic">Поликлиника, клиника</string>
|
||||
<string name="poi_clinic">Поликлиника;Клиника</string>
|
||||
<string name="poi_first_aid">Первая помощь</string>
|
||||
<string name="poi_dentist">Стоматология;Лечение зубов;Зубной врач</string>
|
||||
<string name="poi_nursing_home">Дом престарелых</string>
|
||||
|
@ -1937,7 +1937,7 @@
|
|||
<string name="poi_clothes_leather">Кожаная</string>
|
||||
<string name="poi_clothes_costumes">Карнавальные костюмы</string>
|
||||
<string name="poi_clothes_traditional">Традиционная</string>
|
||||
<string name="poi_clothes_suits">Костюмы, смокинги</string>
|
||||
<string name="poi_clothes_suits">Костюмы;Смокинги</string>
|
||||
<string name="poi_clothes_maternity">Для беременных</string>
|
||||
<string name="poi_clothes_vintage">Старинная</string>
|
||||
<string name="poi_clothes_oversize">Для больших людей</string>
|
||||
|
@ -3308,8 +3308,8 @@
|
|||
<string name="poi_climbing_rock_quartzite">Тип камня: кварцит</string>
|
||||
<string name="poi_climbing_rock_gneiss">Тип камня: гнейс</string>
|
||||
<string name="poi_climbing_rock_porphyry">Тип камня: порфир</string>
|
||||
<string name="poi_climbing_quality_solid">Надежность камней: прочно</string>
|
||||
<string name="poi_climbing_quality_fragile">Надежность камней: ненадёжно</string>
|
||||
<string name="poi_climbing_quality_solid">Надёжность камней: надёжно</string>
|
||||
<string name="poi_climbing_quality_fragile">Надёжность камней: ненадёжно</string>
|
||||
<string name="poi_climbing_bolted_yes">Фиксированные зацепы: есть</string>
|
||||
<string name="poi_climbing_bolted_no">Фиксированные зацепы: нет</string>
|
||||
<string name="poi_climbing_orientation_n">Ориентация стены: С</string>
|
||||
|
|
|
@ -297,8 +297,8 @@
|
|||
<string name="lang_fy">Западнофризский</string>
|
||||
<string name="lang_als">Албанский (тоскский)</string>
|
||||
<string name="rendering_attr_hideProposed_name">Планируемые объекты</string>
|
||||
<string name="srtm_plugin_description">Этот плагин обеспечивает как наложение контурных линий, так и отображения затеняющего слоя рельефа поверх стандартных карт OsmAnd. Эта функция высоко оценится спортсменами, туристами, путешественниками и всеми, кто заинтересован в рельефной структуре ландшафта.
|
||||
\n
|
||||
<string name="srtm_plugin_description">Обеспечивает как наложение контурных линий, так и отображения затеняющего слоя рельефа поверх стандартных карт OsmAnd. Эта функция высоко оценится спортсменами, туристами, путешественниками и всеми, кто заинтересован в рельефной структуре ландшафта.
|
||||
\n
|
||||
\nГлобальные данные (между 70° на севере и 70° на юге) основываются на измерениях SRTM (Shuttle Radar Topography Mission) и ASTER (Advanced Spaceborne Thermal Emission and Reflection Radiometer) — инструментом визуализации Terra, флагманского спутника Системы Наблюдения Земли NASA. ASTER является результатом совместных усилий NASA, министерства экономики Японии, торговли и промышленности (METI), а также Космических Систем Японии (J-spacesystems).</string>
|
||||
<string name="srtm_paid_version_msg">Рассмотрите возможность покупки плагина «Линии высот» в Google Play, чтобы поддержать последующую разработку.</string>
|
||||
<string name="srtm_paid_version_title">Линии высот</string>
|
||||
|
@ -327,7 +327,7 @@
|
|||
<string name="recording_description">Запись %1$s %3$s %2$s</string>
|
||||
<string name="recording_default_name">Запись</string>
|
||||
<string name="map_widget_av_notes">Аудиозаметки</string>
|
||||
<string name="osmand_srtm_short_description_80_chars">OsmAnd плагин для линий высот</string>
|
||||
<string name="osmand_srtm_short_description_80_chars">OsmAnd-плагин для линий высот</string>
|
||||
<string name="map_widget_distancemeasurement">Измерение расстояний</string>
|
||||
<string name="audionotes_location_not_defined">Нажмите «Использовать местоположение…» чтобы добавить заметку к данному местоположению.</string>
|
||||
<string name="map_widget_audionotes">Аудиозаметки</string>
|
||||
|
@ -346,11 +346,11 @@
|
|||
<string name="download_roads_only_item">Только дороги</string>
|
||||
<string name="download_regular_maps">Стандартная карта</string>
|
||||
<string name="download_roads_only_maps">Карта дорог</string>
|
||||
<string name="safe_mode_description">Запустить приложение в безопасном режиме (замедляет работу приложения, используя только Android функции).</string>
|
||||
<string name="safe_mode_description">Запустить приложение в безопасном режиме (замедляет работу приложения, используя только функции Android).</string>
|
||||
<string name="safe_mode">Безопасный режим</string>
|
||||
<string name="native_library_not_running">Приложение работает в безопасном режиме (отключите его в разделе «Настройки»).</string>
|
||||
<string name="background_service_is_enabled_question">Фоновая служба OsmAnd всё ещё работает. Остановите её тоже\?</string>
|
||||
<string name="close_changeset">Закрыть changeset</string>
|
||||
<string name="close_changeset">Закрыть пакет правок</string>
|
||||
<string name="zxing_barcode_scanner_not_found">Приложение ZXing Barcode Scanner не найдено. Искать в Google Play?</string>
|
||||
<string name="non_optimal_route_calculation">Быстрое построение маршрута (возможно неоптимально)</string>
|
||||
<string name="oclock">ч.</string>
|
||||
|
@ -413,7 +413,7 @@
|
|||
<string name="live_monitoring_interval">Интервал онлайн-слежения</string>
|
||||
<string name="live_monitoring_url_descr">Укажите веб-адрес со следующими параметрами: lat={0}, lon={1}, timestamp={2}, hdop={3}, altitude={4}, speed={5}, bearing={6}.</string>
|
||||
<string name="live_monitoring_url">Web адрес онлайн-слежения</string>
|
||||
<string name="gpx_monitoring_disabled_warn">Записать трек можно с помощью виджета GPX или выбрав «Запись поездки» в Настройках.</string>
|
||||
<string name="gpx_monitoring_disabled_warn">Записать трек можно с помощью виджета GPX или выбрав «Запись поездки» в настройках.</string>
|
||||
<string name="show_current_gpx_title">Показывать текущий путь</string>
|
||||
<string name="free_version_message">Вы можете скачать или обновить карты %1$s.</string>
|
||||
<string name="free_version_title">Бесплатная версия</string>
|
||||
|
@ -748,7 +748,7 @@
|
|||
<string name="map_orientation_landscape">Ландшафт</string>
|
||||
<string name="map_screen_orientation">Ориентация экрана</string>
|
||||
<string name="map_screen_orientation_descr">Выберите ориентацию экрана.</string>
|
||||
<string name="opening_hours_not_supported">Не могу изменить формат часов работы.</string>
|
||||
<string name="opening_hours_not_supported">Невозможно изменить формат часов работы.</string>
|
||||
<string name="add_new_rule">Новое правило</string>
|
||||
<string name="transport_Routes">Маршруты</string>
|
||||
<string name="transport_Stop">Остановка</string>
|
||||
|
@ -1104,7 +1104,7 @@
|
|||
<string name="avoid_unpaved">Без грунтовых дорог</string>
|
||||
<string name="avoid_ferries">Без паромов</string>
|
||||
<string name="avoid_in_routing_title">Избегать…</string>
|
||||
<string name="show_warnings_descr">Установка оповещений дорожного движения (ограничения скорости, вынужденные остановки, искусственные неровности, тоннели), камер скорости, информации о полосах.</string>
|
||||
<string name="show_warnings_descr">Установка оповещений дорожного движения (ограничения скорости, вынужденные остановки, искусственные неровности, туннели), камер скорости, информации о полосах.</string>
|
||||
<string name="map_widget_fluorescent">Флуоресцентные маршруты</string>
|
||||
<string name="show_warnings_title">Показывать сигналы…</string>
|
||||
<string name="map_widget_show_ruler">Линейка</string>
|
||||
|
@ -1184,7 +1184,7 @@
|
|||
<string name="context_menu_item_last_intermediate_point">Добавить последним промежуточным пунктом</string>
|
||||
<string name="context_menu_item_first_intermediate_point">Добавить первым промежуточным пунктом</string>
|
||||
<string name="add_as_last_destination_point">Добавить последним промежуточным пунктом</string>
|
||||
<string name="add_as_first_destination_point">Добавить как первый промежуточный пункт</string>
|
||||
<string name="add_as_first_destination_point">Добавить первым промежуточным пунктом</string>
|
||||
<string name="replace_destination_point">Заменить пункт назначения</string>
|
||||
<string name="new_destination_point_dialog">Пункт назначения уже установлен:</string>
|
||||
<string name="target_point">Пункт %1$s</string>
|
||||
|
@ -1379,7 +1379,7 @@
|
|||
<string name="app_modes_choose_descr">Выберите отображаемые профили.</string>
|
||||
<string name="app_modes_choose">Профили приложения</string>
|
||||
<string name="edit_tilesource_choose_existing">Выберите существующий…</string>
|
||||
<string name="maps_define_edit">Задать/отредактировать …</string>
|
||||
<string name="maps_define_edit">Задать/редактировать…</string>
|
||||
<string name="android_19_location_disabled">В Android 4.4 (KitKat) и выше прежнее хранилище (%s) объявлено устаревшим. Скопировать все файлы OsmAnd в новое хранилище\?
|
||||
\n Примечание 1: ваши старые файлы останутся нетронутыми (но могут быть удалены вручную).
|
||||
\n Примечание 2: в новом хранилище совместное использование файлов OsmAnd и OsmAnd+ невозможно.</string>
|
||||
|
@ -1422,7 +1422,7 @@
|
|||
<string name="lang_lv">Латышский</string>
|
||||
<string name="lang_lt">Литовский</string>
|
||||
<string name="lang_mr">Маратхи</string>
|
||||
<string name="lang_no">Норвежский Букмол</string>
|
||||
<string name="lang_no">Норвежский букмол</string>
|
||||
<string name="lang_pl">Польский</string>
|
||||
<string name="lang_pt">Португальский</string>
|
||||
<string name="lang_ro">Румынский</string>
|
||||
|
@ -1577,8 +1577,8 @@
|
|||
<string name="save_track_to_gpx_globally">Запись трека в файл GPX</string>
|
||||
<string name="save_track_interval_globally">Интервал записи</string>
|
||||
<string name="save_track_to_gpx_globally_descr">Ведение записи местоположений в файл GPX можно включить или выключить с помощью виджета записи GPX на карте.</string>
|
||||
<string name="record_plugin_description">Плагин активирует функции для записи и сохранения ваших треков вручную нажатием на виджет записи GPX на карте, или также автоматически записывает все ваши маршруты навигации в файл GPX.
|
||||
\n
|
||||
<string name="record_plugin_description">Активирует функции для записи и сохранения ваших треков вручную нажатием на виджет записи GPX на карте, или также автоматически записывает все ваши маршруты навигации в файл GPX.
|
||||
\n
|
||||
\nЗаписанными треками можно поделиться с вашими друзьями или использовать их для вклада в OSM. Спортсмены могут использовать записанные треки для контроля за тренировками. Некоторый базовый анализ треков может быть выполнен непосредственно в OsmAnd, например, время прохождения круга, средняя скорость и т.д., треки, конечно, позднее также могут быть проанализированы в специальных инструментах анализа сторонних производителей.</string>
|
||||
<string name="create_poi_link_to_osm_doc"><u>Онлайн OSM</u> классификация карт с изображениями.</string>
|
||||
<string name="confirm_every_run">Всегда спрашивать</string>
|
||||
|
@ -1767,7 +1767,7 @@
|
|||
<string name="action_delete">Удалить действие</string>
|
||||
<string name="action_modify">Изменить действие</string>
|
||||
<string name="action_create">Создать действие</string>
|
||||
<string name="osm_edits">OSM правки</string>
|
||||
<string name="osm_edits">Правки OSM</string>
|
||||
<string name="osmand_parking_hour">ч.</string>
|
||||
<string name="osmand_parking_minute">м.</string>
|
||||
<string name="osmand_parking_time_left">осталось</string>
|
||||
|
@ -1780,15 +1780,15 @@
|
|||
<string name="delay_to_start_navigation_descr">Укажите время задержки на экране планирования маршрута.</string>
|
||||
<string name="delay_to_start_navigation">Начать пошаговое ведение через…</string>
|
||||
<string name="shared_string_go">Поехали</string>
|
||||
<string name="plugin_nautical_descr">Плагин расширяет возможности OsmAnd, делая доступными морские карты для катания на лодках, парусного спорта и других видов спорта.
|
||||
\n
|
||||
\nСпециальная дополнительная карта для OsmAnd добавляет морские навигационные и условные знаки как для внутренней, так и для прибрежной навигации. Описание навигационных отметок содержит информацию, необходимую для их идентификации, а также их характеристики (категория, форма, цвет, последовательность мерцания огней и т.д.).
|
||||
\n
|
||||
<string name="plugin_nautical_descr">Расширяет возможности OsmAnd, делая доступными морские карты для катания на лодках, парусного спорта и других видов спорта.
|
||||
\n
|
||||
\nСпециальная дополнительная карта для OsmAnd добавляет морские навигационные и условные знаки как для внутренней, так и для прибрежной навигации. Описание навигационных отметок содержит информацию, необходимую для их идентификации, а также их характеристики (категория, форма, цвет, последовательность мерцания огней и т.д.).
|
||||
\n
|
||||
\nЧтобы вернуться к одному из традиционных стилей карт в OsmAnd, просто деактивируйте этот плагин или измените на желаемый «Стиль карты» в разделе «Настройки карты».</string>
|
||||
<string name="local_osm_changes_upload_all_confirm">Вы уверены, что хотите отправить %1$d изменений в OSM\?</string>
|
||||
<string name="confirmation_to_clear_history">Очистить историю?</string>
|
||||
<string name="plugin_ski_descr">Плагин обеспечивает вам доступ к данным о горнолыжных трассах, маршрутах для беговых лыж, альпийских спусках, фуникулёрах и горнолыжных подъёмниках. Маршруты и спуски отмечены разными цветами в зависимости от их сложности и изображены с использованием специального «зимнего» стиля карты, который заключается в том, что используются «снежные» цвета зимнего пейзажа.
|
||||
\n
|
||||
<string name="plugin_ski_descr">Обеспечивает вам доступ к данным о горнолыжных трассах, маршрутах для беговых лыж, альпийских спусках, фуникулёрах и горнолыжных подъёмниках. Маршруты и спуски отмечены разными цветами в зависимости от их сложности и изображены с использованием специального «зимнего» стиля карты, который заключается в том, что используются «снежные» цвета зимнего пейзажа.
|
||||
\n
|
||||
\nВ случае активации этого вида, стиль карты меняется на «Зимний/лыжный», показывая все детали пейзажа так, как они выглядят зимой. Такой (зимний) вид может быть отменён либо путём деактивации здесь, либо если вы поменяете «Стиль карты» в меню «Настройки карты» на желаемый вид.</string>
|
||||
<string name="current_route">Текущий маршрут</string>
|
||||
<string name="welmode_download_maps">Скачать карты</string>
|
||||
|
@ -1999,7 +1999,7 @@
|
|||
<string name="application_dir_description">Выберите, где вы хотите хранить файлы карт и другие данные.</string>
|
||||
<string name="show_on_start_description">При выключении сразу открывается карта.</string>
|
||||
<string name="map_downloaded">Карта загружена</string>
|
||||
<string name="shared_string_qr_code">QR код</string>
|
||||
<string name="shared_string_qr_code">QR-код</string>
|
||||
<string name="go_to_map">Показать карту</string>
|
||||
<string name="world_map_download_descr">Мировая обзорная карта (охватывающая весь мир при низком уровне масштабирования) отсутствует или устарела. Пожалуйста, загрузите её для глобального обзора.</string>
|
||||
<string name="map_downloaded_descr">Карта %1$s готова к использованию.</string>
|
||||
|
@ -2066,7 +2066,7 @@
|
|||
<string name="impassable_road_desc">Выберите дороги, которых следует избегать при навигации.</string>
|
||||
<string name="shared_string_undo_all">Отменить все</string>
|
||||
<string name="shared_string_type">Тип</string>
|
||||
<string name="share_osm_edits_subject">OSM правки отправлены через OsmAnd</string>
|
||||
<string name="share_osm_edits_subject">Правки OSM отправлены через OsmAnd</string>
|
||||
<string name="update_time">Время обновления</string>
|
||||
<string name="number_of_contributors">Количество участников</string>
|
||||
<string name="number_of_edits">Количество правок</string>
|
||||
|
@ -2135,7 +2135,7 @@
|
|||
\nНеобходимо {3} МБ временного хранилища и {1} МБ постоянного.
|
||||
\n(Доступно только {2} МБ)</string>
|
||||
<string name="upload_osm_note_description">Отправьте свою заметку OSM анонимно или используя свой профиль OpenStreetMap.org.</string>
|
||||
<string name="upload_osm_note">Отправить OSM заметку</string>
|
||||
<string name="upload_osm_note">Отправить заметку OSM</string>
|
||||
<string name="use_drawer_btn">Использовать меню</string>
|
||||
<string name="use_dashboard_btn">Использовать панель управления</string>
|
||||
<string name="dashboard_or_drawer_title">Панель управления или меню</string>
|
||||
|
@ -2247,7 +2247,7 @@
|
|||
<string name="get_for">Получить за %1$s</string>
|
||||
<string name="get_it">Получить</string>
|
||||
<string name="osm_live_banner_desc">Получайте неограниченное количество загрузок карт, вдобавок к еженедельным, ежедневным и даже почасовым обновлениям.</string>
|
||||
<string name="osmand_plus_banner_desc">Неограниченный доступ к картам, обновлениям и плагину Wikipedia.</string>
|
||||
<string name="osmand_plus_banner_desc">Неограниченный доступ к картам, обновлениям и плагину «Википедия».</string>
|
||||
<string name="select_voice_provider">Выберите голосовое сопровождение</string>
|
||||
<string name="osm_live_payment_desc">Абонентская плата взимается за выбранный период. Отменить подписку можно в Google Play в любой момент.</string>
|
||||
<string name="donation_to_osm">Пожертвование для сообщества OSM</string>
|
||||
|
@ -2308,7 +2308,7 @@
|
|||
<string name="mapillary_widget">Виджет Mapillary</string>
|
||||
<string name="mapillary_widget_descr">Позволяет быстро внести свой вклад в Mapillary.</string>
|
||||
<string name="mapillary_descr">Фото с улиц онлайн для каждого. Открывайте для себя места, сотрудничайте, снимайте мир.</string>
|
||||
<string name="mapillary">Mapillary</string>
|
||||
<string name="mapillary">Изображения на уровне улиц</string>
|
||||
<string name="plugin_mapillary_descr">Уличные фотографии для всех. Открывайте для себя места, сотрудничайте, снимайте мир.</string>
|
||||
<string name="save_poi_too_many_uppercase">Название содержит слишком много заглавных букв. Вы хотите продолжить?</string>
|
||||
<string name="quick_action_resume_pause_navigation_descr">Переключатель, чтобы приостановить или возобновить навигацию.</string>
|
||||
|
@ -2544,8 +2544,8 @@
|
|||
\n• Позволяет вам выбрать как отображать названия на карте: на английском, местным или с фонетическим написанием
|
||||
\n• Отображает специальные онлайн-тайлы, спутниковые снимки (с Bing), различные метки, как туристические/навигационные треки GPX и дополнительные слои с настраиваемой прозрачностью
|
||||
\n</string>
|
||||
<string name="osmand_extended_description_part4">Катание на лыжах
|
||||
\n• OsmAnd плагин лыжные карты позволяет видеть лыжные трассы с уровнем сложности и некоторой дополнительной информацией, как расположение подъёмников и других объектов.</string>
|
||||
<string name="osmand_extended_description_part4">Катание на лыжах
|
||||
\n• OsmAnd-плагин лыжные карты позволяет видеть лыжные трассы с уровнем сложности и некоторой дополнительной информацией, как расположение подъёмников и других объектов.</string>
|
||||
<string name="osmand_extended_description_part5">Езда на велосипеде
|
||||
\n• Поиск велосипедных дорожек на карте
|
||||
\n• GPS навигация в велосипедном режиме строит маршрут используя велосипедные дорожки
|
||||
|
@ -2633,7 +2633,7 @@
|
|||
\n • Возможность записи путешествие в фоновом режиме (в то время, как устройство находится в спящем режиме)
|
||||
\n OsmAnd это активно развивающееся программное обеспечение с открытым исходным кодом. Каждый может внести свой вклад в приложение, сообщая об ошибках, улучшая переводы или кодируя новые функции. Кроме того, проект опирается на финансовые взносы для финансирования разработки и тестирования новых функциональных возможностей.
|
||||
\n</string>
|
||||
<string name="empty_state_osm_edits">Создать или изменить OSM объекты</string>
|
||||
<string name="empty_state_osm_edits">Создать или изменить объекты OSM</string>
|
||||
<string name="empty_state_osm_edits_descr">Создавайте или изменяйте OSM POI, открывайте или комментируйте заметки OSM, а также отправляйте записанные файлы GPX.</string>
|
||||
<string name="shared_string_deleted">Удалено</string>
|
||||
<string name="shared_string_edited">Отредактировано</string>
|
||||
|
@ -2699,7 +2699,7 @@
|
|||
<string name="osm_edits_export_desc">Экспортировать как: заметки OSM, POI или оба.</string>
|
||||
<string name="all_data">Все данные</string>
|
||||
<string name="osm_notes">Заметки OSM</string>
|
||||
<string name="tunnel_warning">Впереди тоннель</string>
|
||||
<string name="tunnel_warning">Впереди туннель</string>
|
||||
<string name="show_tunnels">Туннели</string>
|
||||
<string name="make_as_start_point">Сделать отправной точкой</string>
|
||||
<string name="enter_the_file_name">Введите имя файла.</string>
|
||||
|
@ -3236,7 +3236,7 @@
|
|||
<string name="manage_profiles">Управление профилями приложения…</string>
|
||||
<string name="utm_format_descr">OsmAnd использует формат UTM Standard, который похож, но не идентичен формату UTM NATO.</string>
|
||||
<string name="navigate_point_format_utm">UTM Стандарт</string>
|
||||
<string name="navigate_point_format_olc">Open Location Code</string>
|
||||
<string name="navigate_point_format_olc">Открытый код местоположения (OLC)</string>
|
||||
<string name="coordinates_format_info">Выбранный формат будет применён во всём приложении.</string>
|
||||
<string name="pref_selected_by_default_for_profiles">Параметр выбран по умолчанию для профилей: %s</string>
|
||||
<string name="route_parameters_info">Настройки для маршрутизации в выбранном профиле «%1$s».</string>
|
||||
|
@ -3847,10 +3847,11 @@
|
|||
<string name="rourte_between_points_next_segment_button_desc">Только следующий сегмент будет перестроен с использованием выбранного профиля.</string>
|
||||
<string name="next_segment">Следующий сегмент</string>
|
||||
<string name="whole_track">Весь трек</string>
|
||||
<string name="rourte_between_points_warning_desc">Для использования данной опции OsmAnd проложет ваш трек по дорогам.
|
||||
<string name="rourte_between_points_warning_desc">Для использования данной возможности OsmAnd проложит ваш трек по дорогам.
|
||||
\n
|
||||
\nДалее вам следует выбрать профиль для построения маршрута с учётом ограничений этого профиля.</string>
|
||||
<string name="rourte_between_points_desc">Выберите как соединять точки: по прямой линии или построением маршрута.</string>
|
||||
<string name="in_case_of_reverse_direction">В случае обратного направления</string>
|
||||
<string name="plan_route_exit_dialog_descr">Закрыть план маршрута без сохранения\? Все изменения будут потеряны.</string>
|
||||
<string name="street_level_imagery">Изображения на уровне улиц</string>
|
||||
</resources>
|
|
@ -3556,4 +3556,15 @@
|
|||
<string name="poi_sms">SMS</string>
|
||||
<string name="poi_climbing_crag_filter">Lezecká stena</string>
|
||||
<string name="poi_cellar_entrance">Vstup do pivnice</string>
|
||||
<string name="poi_surface_artificial_turf">Umelý trávnik</string>
|
||||
<string name="poi_atm_yes">Bankomat: áno</string>
|
||||
<string name="poi_health_specialty_naturopathy_yes">Prírodná medicína</string>
|
||||
<string name="poi_health_specialty_manual_therapy_yes">Manuálna terapia</string>
|
||||
<string name="poi_health_specialty_optometry_yes">Optometria</string>
|
||||
<string name="poi_health_specialty_obstetrics_caesarean_section_yes">Pôrodníctvo (cisársky rez)</string>
|
||||
<string name="poi_cooperative">Družstevná kancelária</string>
|
||||
<string name="poi_wetland_bog">Močiar</string>
|
||||
<string name="poi_traffic_signals_arrow">Šípka</string>
|
||||
<string name="poi_traffic_signals_vibration">Vibrácie</string>
|
||||
<string name="poi_fire_hydrant_pressure_filter">Tlak</string>
|
||||
</resources>
|
|
@ -248,6 +248,8 @@
|
|||
<dimen name="content_padding_small">12dp</dimen>
|
||||
<dimen name="content_padding_half">8dp</dimen>
|
||||
<dimen name="bottom_sheet_content_padding_small">8dp</dimen>
|
||||
<dimen name="measurement_tool_menu_title_padding_top">13dp</dimen>
|
||||
<dimen name="measurement_tool_menu_title_padding_bottom">5dp</dimen>
|
||||
<dimen name="measurement_tool_divider_margin">8dp</dimen>
|
||||
<dimen name="measurement_tool_content_padding_medium">12dp</dimen>
|
||||
<dimen name="text_margin_small">4dp</dimen>
|
||||
|
|
|
@ -39,6 +39,7 @@ public class SQLiteTileSource implements ITileSource {
|
|||
private static final String ELLIPSOID = "ellipsoid";
|
||||
private static final String INVERTED_Y = "inverted_y";
|
||||
private static final String REFERER = "referer";
|
||||
private static final String USER_AGENT = "useragent";
|
||||
private static final String TIME_COLUMN = "timecolumn";
|
||||
private static final String EXPIRE_MINUTES = "expireminutes";
|
||||
private static final String RULE = "rule";
|
||||
|
@ -62,6 +63,7 @@ public class SQLiteTileSource implements ITileSource {
|
|||
private String[] randomsArray;
|
||||
private String rule = null;
|
||||
private String referer = null;
|
||||
private String userAgent = null;
|
||||
|
||||
int tileSize = 256;
|
||||
boolean tileSizeSpecified = false;
|
||||
|
@ -93,7 +95,7 @@ public class SQLiteTileSource implements ITileSource {
|
|||
}
|
||||
|
||||
public SQLiteTileSource(OsmandApplication ctx, String name, int minZoom, int maxZoom, String urlTemplate,
|
||||
String randoms, boolean isEllipsoid, boolean invertedY, String referer,
|
||||
String randoms, boolean isEllipsoid, boolean invertedY, String referer, String userAgent,
|
||||
boolean timeSupported, long expirationTimeMillis, boolean inversiveZoom, String rule) {
|
||||
this.ctx = ctx;
|
||||
this.name = name;
|
||||
|
@ -104,6 +106,7 @@ public class SQLiteTileSource implements ITileSource {
|
|||
this.expirationTimeMillis = expirationTimeMillis;
|
||||
this.randoms = randoms;
|
||||
this.referer = referer;
|
||||
this.userAgent = userAgent;
|
||||
this.rule = rule;
|
||||
this.invertedY = invertedY;
|
||||
this.timeSupported = timeSupported;
|
||||
|
@ -120,6 +123,7 @@ public class SQLiteTileSource implements ITileSource {
|
|||
this.expirationTimeMillis = tileSource.getExpirationTimeMillis();
|
||||
this.randoms = tileSource.getRandoms();
|
||||
this.referer = tileSource.getReferer();
|
||||
this.userAgent = tileSource.getUserAgent();
|
||||
this.invertedY = tileSource.isInvertedYTile();
|
||||
this.timeSupported = tileSource.isTimeSupported();
|
||||
this.inversiveZoom = tileSource.getInversiveZoom();
|
||||
|
@ -139,6 +143,7 @@ public class SQLiteTileSource implements ITileSource {
|
|||
addInfoColumn(db, ELLIPSOID, isEllipsoid ? "1" : "0");
|
||||
addInfoColumn(db, INVERTED_Y, invertedY ? "1" : "0");
|
||||
addInfoColumn(db, REFERER, referer);
|
||||
addInfoColumn(db, USER_AGENT, userAgent);
|
||||
addInfoColumn(db, TIME_COLUMN, timeSupported ? "yes" : "no");
|
||||
addInfoColumn(db, EXPIRE_MINUTES, String.valueOf(getExpirationTimeMinutes()));
|
||||
|
||||
|
@ -264,6 +269,10 @@ public class SQLiteTileSource implements ITileSource {
|
|||
if(refererId != -1) {
|
||||
referer = cursor.getString(refererId);
|
||||
}
|
||||
int userAgentId = list.indexOf(USER_AGENT);
|
||||
if(userAgentId != -1) {
|
||||
userAgent = cursor.getString(userAgentId);
|
||||
}
|
||||
int tnumbering = list.indexOf(TILENUMBERING);
|
||||
if(tnumbering != -1) {
|
||||
inversiveZoom = BIG_PLANET_TILE_NUMBERING.equalsIgnoreCase(cursor.getString(tnumbering));
|
||||
|
@ -673,4 +682,8 @@ public class SQLiteTileSource implements ITileSource {
|
|||
return referer;
|
||||
}
|
||||
|
||||
public String getUserAgent() {
|
||||
return userAgent;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -343,7 +343,7 @@ public class MapActivityActions implements DialogProvider {
|
|||
final double longitude,
|
||||
final ContextMenuAdapter adapter,
|
||||
Object selectedObj,
|
||||
boolean all) {
|
||||
boolean configureMenu) {
|
||||
ItemBuilder itemBuilder = new ItemBuilder();
|
||||
|
||||
adapter.addItem(itemBuilder
|
||||
|
@ -400,7 +400,7 @@ public class MapActivityActions implements DialogProvider {
|
|||
|
||||
ContextMenuItem editGpxItem = new ItemBuilder()
|
||||
.setTitleId(R.string.context_menu_item_edit_waypoint, mapActivity)
|
||||
.setId(MAP_CONTEXT_MENU_EDIT_GPX_WP)
|
||||
.setId(MAP_CONTEXT_MENU_ADD_GPX_WAYPOINT)
|
||||
.setIcon(R.drawable.ic_action_edit_dark)
|
||||
.setOrder(EDIT_GPX_WAYPOINT_ITEM_ORDER)
|
||||
.setListener(listener).createItem();
|
||||
|
@ -411,8 +411,7 @@ public class MapActivityActions implements DialogProvider {
|
|||
.setOrder(ADD_GPX_WAYPOINT_ITEM_ORDER)
|
||||
.setListener(listener).createItem();
|
||||
|
||||
if (all) {
|
||||
adapter.addItem(editGpxItem);
|
||||
if (configureMenu) {
|
||||
adapter.addItem(addGpxItem);
|
||||
} else if (selectedObj instanceof WptPt
|
||||
&& getMyApplication().getSelectedGpxHelper().getSelectedGPXFile((WptPt) selectedObj) != null) {
|
||||
|
|
|
@ -1062,7 +1062,7 @@ public class MapContextMenu extends MenuTitleController implements StateChangedL
|
|||
}
|
||||
}
|
||||
|
||||
public ContextMenuAdapter getActionsContextMenuAdapter(boolean all) {
|
||||
public ContextMenuAdapter getActionsContextMenuAdapter(boolean configure) {
|
||||
MapActivity mapActivity = getMapActivity();
|
||||
final ContextMenuAdapter menuAdapter = new ContextMenuAdapter(getMyApplication());
|
||||
if (mapActivity != null) {
|
||||
|
@ -1070,7 +1070,7 @@ public class MapContextMenu extends MenuTitleController implements StateChangedL
|
|||
for (OsmandMapLayer layer : mapActivity.getMapView().getLayers()) {
|
||||
layer.populateObjectContextMenu(latLon, getObject(), menuAdapter, mapActivity);
|
||||
}
|
||||
mapActivity.getMapActions().addActionsToAdapter(all ? 0 : latLon.getLatitude(), all ? 0 : latLon.getLongitude(), menuAdapter, getObject(), all);
|
||||
mapActivity.getMapActions().addActionsToAdapter(configure ? 0 : latLon.getLatitude(), configure ? 0 : latLon.getLongitude(), menuAdapter, getObject(), configure);
|
||||
}
|
||||
return menuAdapter;
|
||||
}
|
||||
|
|
|
@ -471,7 +471,9 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
|||
}
|
||||
textPrefix = app.getString(R.string.poi_cuisine);
|
||||
vl = sb.toString();
|
||||
} else if (key.contains(Amenity.ROUTE) || key.equals(Amenity.WIKIDATA)) {
|
||||
} else if (key.contains(Amenity.ROUTE)
|
||||
|| key.equals(Amenity.WIKIDATA)
|
||||
|| key.equals(Amenity.WIKIMEDIA_COMMONS)) {
|
||||
continue;
|
||||
} else {
|
||||
if (key.contains(Amenity.DESCRIPTION)) {
|
||||
|
@ -784,7 +786,8 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
|||
Map<String, String> additionalInfo = amenity.getAdditionalInfo();
|
||||
String imageValue = additionalInfo.get("image");
|
||||
String mapillaryValue = additionalInfo.get("mapillary");
|
||||
String wikidataValue = additionalInfo.get("wikidata");
|
||||
String wikidataValue = additionalInfo.get(Amenity.WIKIDATA);
|
||||
String wikimediaValue = additionalInfo.get(Amenity.WIKIMEDIA_COMMONS);
|
||||
if (!Algorithms.isEmpty(imageValue)) {
|
||||
params.put("osm_image", imageValue);
|
||||
}
|
||||
|
@ -792,7 +795,10 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
|||
params.put("osm_mapillary_key", mapillaryValue);
|
||||
}
|
||||
if (!Algorithms.isEmpty(wikidataValue)) {
|
||||
params.put("wikidata_id", wikidataValue);
|
||||
params.put(Amenity.WIKIDATA, wikidataValue);
|
||||
}
|
||||
if (!Algorithms.isEmpty(wikimediaValue)) {
|
||||
params.put(Amenity.WIKIMEDIA_COMMONS, wikimediaValue);
|
||||
}
|
||||
return params;
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@ import androidx.appcompat.widget.AppCompatButton;
|
|||
import net.osmand.AndroidNetworkUtils;
|
||||
import net.osmand.AndroidUtils;
|
||||
import net.osmand.Location;
|
||||
import net.osmand.data.Amenity;
|
||||
import net.osmand.data.LatLon;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
|
@ -438,10 +439,15 @@ public abstract class ImageCard extends AbstractCard {
|
|||
pms.put("lang", preferredLang);
|
||||
}
|
||||
if (this.params != null) {
|
||||
String wikidataId = this.params.get("wikidata_id");
|
||||
String wikidataId = this.params.get(Amenity.WIKIDATA);
|
||||
if (wikidataId != null) {
|
||||
this.params.remove("wikidata_id");
|
||||
WikiImageHelper.fillWikiMediaCards(mapActivity, wikidataId, result);
|
||||
this.params.remove(Amenity.WIKIDATA);
|
||||
WikiImageHelper.addWikidataImageCards(mapActivity, wikidataId, result);
|
||||
}
|
||||
String wikimediaContent = this.params.get(Amenity.WIKIMEDIA_COMMONS);
|
||||
if (wikimediaContent != null) {
|
||||
this.params.remove(Amenity.WIKIMEDIA_COMMONS);
|
||||
WikiImageHelper.addWikimediaImageCards(mapActivity, wikimediaContent, result);
|
||||
}
|
||||
pms.putAll(this.params);
|
||||
}
|
||||
|
|
|
@ -392,7 +392,7 @@ public class EditMapSourceDialogFragment extends BaseOsmAndDialogFragment
|
|||
SQLiteTileSource sqLiteTileSource =
|
||||
new SQLiteTileSource(app, newName, minZoom,
|
||||
maxZoom, urlToLoad, "",
|
||||
elliptic, false, "", expireTimeMinutes > 0,
|
||||
elliptic, false, "", "", expireTimeMinutes > 0,
|
||||
expireTimeMinutes * 60 * 1000L, false, ""
|
||||
);
|
||||
sqLiteTileSource.createDataBase();
|
||||
|
|
|
@ -14,7 +14,6 @@ import net.osmand.plus.base.MenuBottomSheetDialogFragment;
|
|||
import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemButton;
|
||||
import net.osmand.plus.base.bottomsheetmenu.simpleitems.DividerSpaceItem;
|
||||
import net.osmand.plus.base.bottomsheetmenu.simpleitems.ShortDescriptionItem;
|
||||
import net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleItem;
|
||||
|
||||
public class ExitBottomSheetDialogFragment extends MenuBottomSheetDialogFragment {
|
||||
|
||||
|
@ -27,12 +26,10 @@ public class ExitBottomSheetDialogFragment extends MenuBottomSheetDialogFragment
|
|||
@Override
|
||||
public void createMenuItems(Bundle savedInstanceState) {
|
||||
|
||||
items.add(new TitleItem(getString(R.string.exit_without_saving)));
|
||||
|
||||
items.add(new ShortDescriptionItem.Builder()
|
||||
.setDescription(getString(R.string.plan_route_exit_dialog_descr))
|
||||
.setDescriptionColorId(nightMode ? R.color.text_color_primary_dark : R.color.text_color_primary_light)
|
||||
.setLayoutId(R.layout.bottom_sheet_item_description_long)
|
||||
.setTitle(getString(R.string.exit_without_saving))
|
||||
.setLayoutId(R.layout.bottom_sheet_item_list_title_with_descr)
|
||||
.create());
|
||||
|
||||
items.add(new DividerSpaceItem(getContext(),
|
||||
|
@ -75,7 +72,7 @@ public class ExitBottomSheetDialogFragment extends MenuBottomSheetDialogFragment
|
|||
|
||||
@Override
|
||||
protected int getDismissButtonTextId() {
|
||||
return R.string.shared_string_close;
|
||||
return R.string.shared_string_cancel;
|
||||
}
|
||||
|
||||
public static void showInstance(@NonNull FragmentManager fragmentManager, @Nullable Fragment targetFragment) {
|
||||
|
|
|
@ -37,6 +37,7 @@ import java.util.List;
|
|||
import static net.osmand.plus.UiUtilities.CustomRadioButtonType.*;
|
||||
import static net.osmand.plus.measurementtool.MeasurementEditingContext.CalculationMode.NEXT_SEGMENT;
|
||||
import static net.osmand.plus.measurementtool.MeasurementEditingContext.CalculationMode.WHOLE_TRACK;
|
||||
import static net.osmand.plus.measurementtool.MeasurementEditingContext.DEFAULT_APP_MODE;
|
||||
|
||||
public class RouteBetweenPointsBottomSheetDialogFragment extends BottomSheetDialogFragment {
|
||||
|
||||
|
@ -70,8 +71,9 @@ public class RouteBetweenPointsBottomSheetDialogFragment extends BottomSheetDial
|
|||
nightMode = app.getDaynightHelper().isNightModeForMapControls();
|
||||
FragmentActivity activity = requireActivity();
|
||||
portrait = AndroidUiHelper.isOrientationPortrait(activity);
|
||||
final View mainView = inflater.inflate(R.layout.fragment_route_between_points_bottom_sheet_dialog,
|
||||
container, false);
|
||||
final View mainView = UiUtilities.getInflater(getContext(), nightMode)
|
||||
.inflate(R.layout.fragment_route_between_points_bottom_sheet_dialog,
|
||||
container, false);
|
||||
AndroidUtils.setBackground(activity, mainView, nightMode,
|
||||
portrait ? R.drawable.bg_bottom_menu_light : R.drawable.bg_bottom_sheet_topsides_landscape_light,
|
||||
portrait ? R.drawable.bg_bottom_menu_dark : R.drawable.bg_bottom_sheet_topsides_landscape_dark);
|
||||
|
@ -101,7 +103,7 @@ public class RouteBetweenPointsBottomSheetDialogFragment extends BottomSheetDial
|
|||
@Override
|
||||
public void onClick(View view) {
|
||||
snapToRoadEnabled = false;
|
||||
ApplicationMode mode = null;
|
||||
ApplicationMode mode = DEFAULT_APP_MODE;
|
||||
if ((int) view.getTag() != STRAIGHT_LINE_TAG) {
|
||||
mode = modes.get((int) view.getTag());
|
||||
snapToRoadEnabled = true;
|
||||
|
@ -116,7 +118,7 @@ public class RouteBetweenPointsBottomSheetDialogFragment extends BottomSheetDial
|
|||
|
||||
Drawable icon = app.getUIUtilities().getIcon(R.drawable.ic_action_split_interval, nightMode);
|
||||
addProfileView(navigationType, onClickListener, STRAIGHT_LINE_TAG, icon,
|
||||
app.getText(R.string.routing_profile_straightline), snapToRoadAppMode == null);
|
||||
app.getText(R.string.routing_profile_straightline), snapToRoadAppMode == DEFAULT_APP_MODE);
|
||||
addDelimiterView(navigationType);
|
||||
|
||||
for (int i = 0; i < modes.size(); i++) {
|
||||
|
|
|
@ -8,14 +8,12 @@ import androidx.fragment.app.Fragment;
|
|||
import androidx.fragment.app.FragmentManager;
|
||||
|
||||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
|
||||
import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem;
|
||||
import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemWithDescription;
|
||||
import net.osmand.plus.base.bottomsheetmenu.simpleitems.DividerSpaceItem;
|
||||
import net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleItem;
|
||||
import net.osmand.plus.helpers.GpxTrackAdapter;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
|
@ -38,15 +36,13 @@ public class SnapTrackWarningBottomSheet extends MenuBottomSheetDialogFragment {
|
|||
if (activity instanceof MapActivity) {
|
||||
activity.findViewById(R.id.snap_to_road_image_button).setVisibility(View.GONE);
|
||||
}
|
||||
OsmandApplication app = requiredMyApplication();
|
||||
items.add(new TitleItem(getString(R.string.route_between_points)));
|
||||
BaseBottomSheetItem description = new BottomSheetItemWithDescription.Builder()
|
||||
.setDescription(app.getString(R.string.rourte_between_points_warning_desc))
|
||||
.setDescriptionColorId(R.color.text_color_primary_light)
|
||||
.setLayoutId(R.layout.bottom_sheet_item_description_long)
|
||||
.setDescription(getString(R.string.rourte_between_points_warning_desc))
|
||||
.setTitle(getString(R.string.route_between_points))
|
||||
.setLayoutId(R.layout.bottom_sheet_item_list_title_with_descr)
|
||||
.create();
|
||||
items.add(description);
|
||||
items.add(new DividerSpaceItem(app, app.getResources().getDimensionPixelSize(R.dimen.content_padding_half)));
|
||||
items.add(new DividerSpaceItem(getContext(), getResources().getDimensionPixelSize(R.dimen.content_padding_half)));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -265,14 +265,14 @@ public class OsmEditingPlugin extends OsmandPlugin {
|
|||
}
|
||||
if (isEditable) {
|
||||
adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.poi_context_menu_modify, mapActivity)
|
||||
.setId(MAP_CONTEXT_MENU_MODIFY_POI)
|
||||
.setId(MAP_CONTEXT_MENU_CREATE_POI)
|
||||
.setIcon(R.drawable.ic_action_edit_dark)
|
||||
.setOrder(MODIFY_POI_ITEM_ORDER)
|
||||
.setListener(listener)
|
||||
.createItem());
|
||||
} else if (selectedObj instanceof OpenstreetmapPoint && ((OpenstreetmapPoint) selectedObj).getAction() != Action.DELETE) {
|
||||
adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.poi_context_menu_modify_osm_change, mapActivity)
|
||||
.setId(MAP_CONTEXT_MENU_MODIFY_OSM_CHANGE)
|
||||
.setId(MAP_CONTEXT_MENU_CREATE_POI)
|
||||
.setIcon(R.drawable.ic_action_edit_dark)
|
||||
.setOrder(MODIFY_OSM_CHANGE_ITEM_ORDER)
|
||||
.setListener(listener)
|
||||
|
@ -287,7 +287,7 @@ public class OsmEditingPlugin extends OsmandPlugin {
|
|||
}
|
||||
if (selectedObj instanceof OsmNotesPoint) {
|
||||
adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.context_menu_item_modify_note, mapActivity)
|
||||
.setId(MAP_CONTEXT_MENU_MODIFY_OSM_NOTE)
|
||||
.setId(MAP_CONTEXT_MENU_OPEN_OSM_NOTE)
|
||||
.setIcon(R.drawable.ic_action_edit_dark)
|
||||
.setOrder(MODIFY_OSM_NOTE_ITEM_ORDER)
|
||||
.setListener(listener)
|
||||
|
|
|
@ -105,12 +105,13 @@ public class AsyncLoadingThread extends Thread {
|
|||
}
|
||||
|
||||
public TileLoadDownloadRequest(File dirWithTiles, String url, File fileToSave, String tileId, ITileSource source, int tileX,
|
||||
int tileY, int zoom, String referer) {
|
||||
int tileY, int zoom, String referer, String userAgent) {
|
||||
super(url, fileToSave, tileX, tileY, zoom);
|
||||
this.dirWithTiles = dirWithTiles;
|
||||
this.tileSource = source;
|
||||
this.tileId = tileId;
|
||||
this.referer = referer;
|
||||
this.userAgent = userAgent;
|
||||
}
|
||||
|
||||
public void saveTile(InputStream inputStream) throws IOException {
|
||||
|
|
|
@ -144,7 +144,7 @@ public abstract class TilesCache<T> {
|
|||
}
|
||||
}
|
||||
TileLoadDownloadRequest req = new TileLoadDownloadRequest(dirWithTiles, url, toSave,
|
||||
tileId, map, x, y, zoom, map.getReferer());
|
||||
tileId, map, x, y, zoom, map.getReferer(), map.getUserAgent());
|
||||
if (sync) {
|
||||
return getRequestedTile(req);
|
||||
} else {
|
||||
|
|
|
@ -2035,6 +2035,7 @@ public class SettingsHelper {
|
|||
boolean ellipsoid = object.optBoolean("ellipsoid", false);
|
||||
boolean invertedY = object.optBoolean("inverted_y", false);
|
||||
String referer = object.optString("referer");
|
||||
String userAgent = object.optString("userAgent");
|
||||
boolean timeSupported = object.optBoolean("timesupported", false);
|
||||
long expire = object.optLong("expire", -1);
|
||||
boolean inversiveZoom = object.optBoolean("inversiveZoom", false);
|
||||
|
@ -2054,13 +2055,14 @@ public class SettingsHelper {
|
|||
tileSourceTemplate.setRule(rule);
|
||||
tileSourceTemplate.setRandoms(randoms);
|
||||
tileSourceTemplate.setReferer(referer);
|
||||
tileSourceTemplate.setUserAgent(userAgent);
|
||||
tileSourceTemplate.setEllipticYTile(ellipsoid);
|
||||
tileSourceTemplate.setInvertedYTile(invertedY);
|
||||
tileSourceTemplate.setExpirationTimeMillis(timeSupported ? expire : -1);
|
||||
|
||||
template = tileSourceTemplate;
|
||||
} else {
|
||||
template = new SQLiteTileSource(app, name, minZoom, maxZoom, url, randoms, ellipsoid, invertedY, referer, timeSupported, expire, inversiveZoom, rule);
|
||||
template = new SQLiteTileSource(app, name, minZoom, maxZoom, url, randoms, ellipsoid, invertedY, referer, userAgent, timeSupported, expire, inversiveZoom, rule);
|
||||
}
|
||||
items.add(template);
|
||||
}
|
||||
|
@ -2087,6 +2089,7 @@ public class SettingsHelper {
|
|||
jsonObject.put("ellipsoid", template.isEllipticYTile());
|
||||
jsonObject.put("inverted_y", template.isInvertedYTile());
|
||||
jsonObject.put("referer", template.getReferer());
|
||||
jsonObject.put("userAgent", template.getUserAgent());
|
||||
jsonObject.put("timesupported", template.isTimeSupported());
|
||||
jsonObject.put("expire", template.getExpirationTimeMinutes());
|
||||
jsonObject.put("inversiveZoom", template.getInversiveZoom());
|
||||
|
|
|
@ -574,11 +574,21 @@ public class ContextMenuLayer extends OsmandMapLayer {
|
|||
applyingMarkerLatLon = null;
|
||||
}
|
||||
|
||||
public boolean showContextMenuForMyLocation() {
|
||||
PointLocationLayer provider = view.getLayerByClass(PointLocationLayer.class);
|
||||
if (provider != null) {
|
||||
LatLon ll = provider.getObjectLocation(null);
|
||||
if (ll != null) {
|
||||
PointDescription pointDescription = provider.getObjectName(null);
|
||||
return showContextMenu(ll, pointDescription, ll, provider);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean showContextMenu(double latitude, double longitude, boolean showUnknownLocation) {
|
||||
RotatedTileBox cp = activity.getMapView().getCurrentRotatedTileBox();
|
||||
float x = cp.getPixXFromLatLon(latitude, longitude);
|
||||
float y = cp.getPixYFromLatLon(latitude, longitude);
|
||||
return showContextMenu(new PointF(x, y), activity.getMapView().getCurrentRotatedTileBox(), showUnknownLocation);
|
||||
return showContextMenu(getPointFromLatLon(latitude, longitude),
|
||||
activity.getMapView().getCurrentRotatedTileBox(), showUnknownLocation);
|
||||
}
|
||||
|
||||
public boolean showContextMenu(@NonNull LatLon latLon,
|
||||
|
@ -803,6 +813,13 @@ public class ContextMenuLayer extends OsmandMapLayer {
|
|||
return false;
|
||||
}
|
||||
|
||||
private PointF getPointFromLatLon(double latitude, double longitude) {
|
||||
RotatedTileBox cp = activity.getMapView().getCurrentRotatedTileBox();
|
||||
float x = cp.getPixXFromLatLon(latitude, longitude);
|
||||
float y = cp.getPixYFromLatLon(latitude, longitude);
|
||||
return new PointF(x, y);
|
||||
}
|
||||
|
||||
private List<String> getValues(@Nullable QStringStringHash set) {
|
||||
List<String> res = new ArrayList<>();
|
||||
if (set != null) {
|
||||
|
|
|
@ -439,15 +439,9 @@ public class MapControlsLayer extends OsmandMapLayer {
|
|||
}
|
||||
|
||||
private void showContextMenuForMyLocation() {
|
||||
OsmAndLocationProvider lp = app.getLocationProvider();
|
||||
Location lastKnownLocation = lp.getLastKnownLocation();
|
||||
Location lastStaleKnownLocation = lp.getLastStaleKnownLocation();
|
||||
Location location = lastKnownLocation != null ? lastKnownLocation : lastStaleKnownLocation;
|
||||
if (location != null) {
|
||||
ContextMenuLayer cml = mapActivity.getMapView().getLayerByClass(ContextMenuLayer.class);
|
||||
if (cml != null) {
|
||||
cml.showContextMenu(location.getLatitude(), location.getLongitude(), true);
|
||||
}
|
||||
ContextMenuLayer cml = mapActivity.getMapView().getLayerByClass(ContextMenuLayer.class);
|
||||
if (cml != null) {
|
||||
cml.showContextMenuForMyLocation();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -23,63 +23,111 @@ import java.util.List;
|
|||
|
||||
public class WikiImageHelper {
|
||||
private static final String WIKIDATA_API_ENDPOINT = "https://www.wikidata.org/w/api.php";
|
||||
private static final String ACTION = "?action=wbgetclaims&property=P18&entity=";
|
||||
private static final String WIKIMEDIA_API_ENDPOINT = "https://commons.wikimedia.org/w/api.php";
|
||||
private static final String WIKIDATA_ACTION = "?action=wbgetclaims&property=P18&entity=";
|
||||
private static final String WIKIMEDIA_ACTION = "?action=query&list=categorymembers&cmtitle=";
|
||||
private static final String CM_LIMIT = "&cmlimit=500";
|
||||
private static final String FORMAT_JSON = "&format=json";
|
||||
private static final String IMAGE_BASE_URL = "https://upload.wikimedia.org/wikipedia/commons/";
|
||||
|
||||
private static final String WIKIDATA_PREFIX = "Q";
|
||||
private static final String WIKIMEDIA_FILE = "File:";
|
||||
private static final String WIKIMEDIA_CATEGORY = "Category:";
|
||||
|
||||
private static final int THUMB_SIZE = 500;
|
||||
private static final Log LOG = PlatformUtil.getLog(WikiImageHelper.class);
|
||||
|
||||
public static void fillWikiMediaCards(@NonNull MapActivity mapActivity, @NonNull String wikidata,
|
||||
List<ImageCard> images) {
|
||||
if (wikidata.startsWith(WIKIDATA_PREFIX)) {
|
||||
StringBuilder rawResponse = new StringBuilder();
|
||||
String url = WIKIDATA_API_ENDPOINT + ACTION + wikidata + FORMAT_JSON;
|
||||
String error = NetworkUtils.sendGetRequest(url, null, rawResponse);
|
||||
if (error == null) {
|
||||
try {
|
||||
Gson gson = new Gson();
|
||||
WikipediaResponse response = gson.fromJson(rawResponse.toString(), WikipediaResponse.class);
|
||||
for (WikiImage img : getImageData(response)) {
|
||||
images.add(new WikiImageCard(mapActivity, img));
|
||||
public static void addWikidataImageCards(@NonNull MapActivity mapActivity, @NonNull String wikidataId,
|
||||
@NonNull List<ImageCard> imageCards) {
|
||||
if (wikidataId.startsWith(WIKIDATA_PREFIX)) {
|
||||
String url = WIKIDATA_API_ENDPOINT + WIKIDATA_ACTION + wikidataId + FORMAT_JSON;
|
||||
WikidataResponse response = sendWikipediaApiRequest(url, WikidataResponse.class);
|
||||
if (response != null) {
|
||||
for (P18 p18 : response.claims.p18) {
|
||||
String imageFileName = p18.mainsnak.datavalue.value;
|
||||
if (imageFileName != null) {
|
||||
addImageCard(mapActivity, imageCards, imageFileName);
|
||||
}
|
||||
return;
|
||||
} catch (JsonSyntaxException e) {
|
||||
error = e.getLocalizedMessage();
|
||||
}
|
||||
}
|
||||
LOG.error(error);
|
||||
} else {
|
||||
LOG.error("Wrong WikiMedia ID");
|
||||
LOG.error("Wrong Wikidata ID");
|
||||
}
|
||||
}
|
||||
|
||||
private static List<WikiImage> getImageData(WikipediaResponse response) {
|
||||
List<WikiImage> images = new ArrayList<>();
|
||||
for (P18 p18 : response.claims.p18) {
|
||||
String imageFileName = p18.mainsnak.datavalue.value;
|
||||
if (imageFileName != null) {
|
||||
try {
|
||||
String imageName = URLDecoder.decode(imageFileName, "UTF-8");
|
||||
imageFileName = imageName.replace(" ", "_");
|
||||
imageName = imageName.substring(0, imageName.lastIndexOf("."));
|
||||
String[] urlHashParts = getHash(imageFileName);
|
||||
|
||||
String imageHiResUrl = IMAGE_BASE_URL +
|
||||
urlHashParts[0] + "/" + urlHashParts[1] + "/" +
|
||||
imageFileName;
|
||||
String imageStubUrl = IMAGE_BASE_URL + "thumb/" +
|
||||
urlHashParts[0] + "/" + urlHashParts[1] + "/" +
|
||||
imageFileName + "/" + THUMB_SIZE + "px-" +
|
||||
imageFileName;
|
||||
images.add(new WikiImage(imageName, imageStubUrl, imageHiResUrl));
|
||||
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
LOG.error(e.getLocalizedMessage());
|
||||
public static void addWikimediaImageCards(@NonNull MapActivity mapActivity, @NonNull String wikiMediaTagContent,
|
||||
@NonNull List<ImageCard> imageCards) {
|
||||
if (wikiMediaTagContent.startsWith(WIKIMEDIA_FILE)) {
|
||||
String fileName = wikiMediaTagContent.substring(WIKIMEDIA_FILE.length());
|
||||
addImageCard(mapActivity, imageCards, fileName);
|
||||
} else if (wikiMediaTagContent.startsWith(WIKIMEDIA_CATEGORY)) {
|
||||
String url = WIKIMEDIA_API_ENDPOINT + WIKIMEDIA_ACTION + wikiMediaTagContent + CM_LIMIT + FORMAT_JSON;
|
||||
WikimediaResponse response = sendWikipediaApiRequest(url, WikimediaResponse.class);
|
||||
if (response != null) {
|
||||
List<String> subCategories = new ArrayList<>();
|
||||
for (Categorymember cm : response.query.categorymembers) {
|
||||
String memberTitle = cm.title;
|
||||
if (memberTitle != null) {
|
||||
if (memberTitle.startsWith(WIKIMEDIA_CATEGORY)) {
|
||||
subCategories.add(memberTitle);
|
||||
} else {
|
||||
addWikimediaImageCards(mapActivity, memberTitle, imageCards);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (String subCategory : subCategories) {
|
||||
addWikimediaImageCards(mapActivity, subCategory, imageCards);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
LOG.error("Wrong Wikimedia category member");
|
||||
}
|
||||
return images;
|
||||
}
|
||||
|
||||
private static <T> T sendWikipediaApiRequest(@NonNull String url, @NonNull Class<T> responseClass) {
|
||||
StringBuilder rawResponse = new StringBuilder();
|
||||
String errorMessage = NetworkUtils.sendGetRequest(url, null, rawResponse);
|
||||
if (errorMessage == null) {
|
||||
try {
|
||||
return new Gson().fromJson(rawResponse.toString(), responseClass);
|
||||
} catch (JsonSyntaxException e) {
|
||||
errorMessage = e.getLocalizedMessage();
|
||||
}
|
||||
}
|
||||
LOG.error(errorMessage);
|
||||
return null;
|
||||
}
|
||||
|
||||
private static void addImageCard(@NonNull MapActivity mapActivity, @NonNull List<ImageCard> images,
|
||||
@NonNull String fileName) {
|
||||
WikiImage img = getImageData(fileName);
|
||||
if (img != null) {
|
||||
images.add(new WikiImageCard(mapActivity, img));
|
||||
}
|
||||
}
|
||||
|
||||
private static WikiImage getImageData(@NonNull String imageFileName) {
|
||||
try {
|
||||
String imageName = URLDecoder.decode(imageFileName, "UTF-8");
|
||||
imageFileName = imageName.replace(" ", "_");
|
||||
imageName = imageName.substring(0, imageName.lastIndexOf("."));
|
||||
String[] urlHashParts = getHash(imageFileName);
|
||||
|
||||
String imageHiResUrl = IMAGE_BASE_URL +
|
||||
urlHashParts[0] + "/" + urlHashParts[1] + "/" +
|
||||
imageFileName;
|
||||
|
||||
String imageStubUrl = IMAGE_BASE_URL + "thumb/" +
|
||||
urlHashParts[0] + "/" + urlHashParts[1] + "/" +
|
||||
imageFileName + "/" + THUMB_SIZE + "px-" +
|
||||
imageFileName;
|
||||
|
||||
return new WikiImage(imageName, imageStubUrl, imageHiResUrl);
|
||||
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
LOG.error(e.getLocalizedMessage());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
|
@ -88,19 +136,23 @@ public class WikiImageHelper {
|
|||
return new String[]{md5.substring(0, 1), md5.substring(0, 2)};
|
||||
}
|
||||
|
||||
// Wikidata response classes
|
||||
private static class WikidataResponse {
|
||||
@SerializedName("claims")
|
||||
@Expose
|
||||
private Claims claims;
|
||||
}
|
||||
|
||||
private static class Claims {
|
||||
@SerializedName("P18")
|
||||
@Expose
|
||||
private List<P18> p18 = null;
|
||||
}
|
||||
|
||||
private static class Datavalue {
|
||||
@SerializedName("value")
|
||||
private static class P18 {
|
||||
@SerializedName("mainsnak")
|
||||
@Expose
|
||||
private String value;
|
||||
@SerializedName("type")
|
||||
@Expose
|
||||
private String type;
|
||||
private Mainsnak mainsnak;
|
||||
}
|
||||
|
||||
private static class Mainsnak {
|
||||
|
@ -112,15 +164,31 @@ public class WikiImageHelper {
|
|||
private String datatype;
|
||||
}
|
||||
|
||||
private static class P18 {
|
||||
@SerializedName("mainsnak")
|
||||
private static class Datavalue {
|
||||
@SerializedName("value")
|
||||
@Expose
|
||||
private Mainsnak mainsnak;
|
||||
private String value;
|
||||
@SerializedName("type")
|
||||
@Expose
|
||||
private String type;
|
||||
}
|
||||
|
||||
private static class WikipediaResponse {
|
||||
@SerializedName("claims")
|
||||
// Wikimedia response classes
|
||||
private static class WikimediaResponse {
|
||||
@SerializedName("query")
|
||||
@Expose
|
||||
private Claims claims;
|
||||
private Query query;
|
||||
}
|
||||
|
||||
private static class Query {
|
||||
@SerializedName("categorymembers")
|
||||
@Expose
|
||||
private List<Categorymember> categorymembers;
|
||||
}
|
||||
|
||||
private static class Categorymember {
|
||||
@SerializedName("title")
|
||||
@Expose
|
||||
private String title;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue