mirror of
https://github.com/ev-map/EVMap.git
synced 2025-12-27 09:07:46 -05:00
Compare commits
22 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d472be1676 | ||
|
|
24fa85929e | ||
|
|
4a67ffd956 | ||
|
|
fab66d1f84 | ||
|
|
0783c6c272 | ||
|
|
c5714c8592 | ||
|
|
cb4b571721 | ||
|
|
0bfa80bbe0 | ||
|
|
d77f13682d | ||
|
|
0c19eb5833 | ||
|
|
a5abedae55 | ||
|
|
8405f4f4fa | ||
|
|
f435180c03 | ||
|
|
c2c3e96e97 | ||
|
|
9100a6f442 | ||
|
|
5403549e0a | ||
|
|
c95f1e7c24 | ||
|
|
f8d5b78112 | ||
|
|
246d456851 | ||
|
|
3d303b6535 | ||
|
|
135fce43c3 | ||
|
|
ee354d2cd1 |
@@ -9,7 +9,7 @@ apply plugin: 'kotlin-kapt'
|
||||
apply plugin: 'androidx.navigation.safeargs.kotlin'
|
||||
apply plugin: 'com.mikepenz.aboutlibraries.plugin'
|
||||
|
||||
def supportedLocales = "en,de,fr,nb-rNO,nl"
|
||||
def supportedLocales = "en,de,fr,nb-rNO,nl,pt,ro"
|
||||
|
||||
android {
|
||||
compileSdkVersion 33
|
||||
@@ -20,8 +20,8 @@ android {
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 33
|
||||
// NOTE: always increase versionCode by 2 since automotive flavor uses versionCode + 1
|
||||
versionCode 164
|
||||
versionName "1.4.8"
|
||||
versionCode 168
|
||||
versionName "1.4.10"
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
resConfigs supportedLocales.split(',')
|
||||
|
||||
6
app/src/foss/res/values-pt/strings.xml
Normal file
6
app/src/foss/res/values-pt/strings.xml
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="data_sources_hint">Os dados do mapa são fornecidos pelo OpenStreetMap (Mapbox).</string>
|
||||
<string name="donate_paypal">Doar com o PayPal</string>
|
||||
<string name="donations_info" formatted="false">Acha que o EVMap é útil\? Apoie a manutenção e desenvolvimento com uma doação para o desenvolvedor da app.</string>
|
||||
</resources>
|
||||
6
app/src/foss/res/values-ro/strings.xml
Normal file
6
app/src/foss/res/values-ro/strings.xml
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="donations_info" formatted="false">Crezi ca EVMap este util? Sprijina dezvoltarea printr-o donatie pentru dezvoltator.</string>
|
||||
<string name="donate_paypal">Doneaza cu PayPal</string>
|
||||
<string name="data_sources_hint">Hartile din aplicatie sunt furnizate de OpenStreetMap (Mapbox).</string>
|
||||
</resources>
|
||||
@@ -8,6 +8,9 @@ package net.vonforst.evmap.auto
|
||||
private val models = mapOf(
|
||||
"Audi" to mapOf(
|
||||
"516 (G4x)" to "e-tron"
|
||||
),
|
||||
"Renault" to mapOf(
|
||||
"BCB" to "Megane E-Tech"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -352,7 +352,7 @@ class ChargepriceScreen(ctx: CarContext, val charger: ChargeLocation) : Screen(c
|
||||
} else if (vehicles.size > 1) {
|
||||
if (modelName != null) {
|
||||
vehicles = vehicles.filter {
|
||||
it.name.startsWith(modelName)
|
||||
it.name.lowercase().startsWith(modelName.lowercase())
|
||||
}
|
||||
if (vehicles.isEmpty()) {
|
||||
throw VehicleUnknownException()
|
||||
|
||||
@@ -86,6 +86,7 @@ abstract class MultiSelectSearchScreen<T>(ctx: CarContext) : Screen(ctx),
|
||||
addItem(
|
||||
Row.Builder()
|
||||
.setTitle(getLabel(item))
|
||||
.apply { getDetails(item)?.let { addText(it) } }
|
||||
.setImage(if (isSelected(item)) checkedIcon else uncheckedIcon)
|
||||
.setOnClickListener {
|
||||
toggleSelected(item)
|
||||
@@ -130,5 +131,7 @@ abstract class MultiSelectSearchScreen<T>(ctx: CarContext) : Screen(ctx),
|
||||
|
||||
abstract fun getLabel(it: T): String
|
||||
|
||||
open fun getDetails(it: T): String? = null
|
||||
|
||||
abstract suspend fun loadData(): List<T>
|
||||
}
|
||||
@@ -390,6 +390,8 @@ class SelectVehiclesScreen(ctx: CarContext) : MultiSelectSearchScreen<Chargepric
|
||||
|
||||
override fun getLabel(it: ChargepriceCar) = "${it.brand} ${it.name}"
|
||||
|
||||
override fun getDetails(it: ChargepriceCar) = it.formatSpecs()
|
||||
|
||||
override suspend fun loadData(): List<ChargepriceCar> {
|
||||
return api.getVehicles()
|
||||
}
|
||||
|
||||
@@ -35,4 +35,6 @@
|
||||
<string name="settings_android_auto_chargeprice_range">Plage de charge pour la comparaison des prix</string>
|
||||
<string name="welcome_android_auto_detail">Vous pouvez également utiliser EVMap à partir d\'Android Auto sur les voitures prises en charge. Il suffit de sélectionner l\'application EVMap dans le menu Android Auto.</string>
|
||||
<string name="loading">Chargement…</string>
|
||||
<string name="auto_multipage_goto">Page %d</string>
|
||||
<string name="auto_multipage">(%d/%d)</string>
|
||||
</resources>
|
||||
41
app/src/google/res/values-pt/strings.xml
Normal file
41
app/src/google/res/values-pt/strings.xml
Normal file
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="auto_no_chargers_found">Não foram encontrados carregadores próximo de si</string>
|
||||
<string name="auto_no_favorites_found">Nenhum favorito encontrado</string>
|
||||
<string name="opened_on_phone">Aberto no telefone</string>
|
||||
<string name="auto_location_permission_needed">Para usar o EVMap no Android Auto, permita o acesso à sua localização.</string>
|
||||
<string name="open_in_app">Abrir na app</string>
|
||||
<string name="auto_vehicle_data_permission_needed">Para esta funcionalidade, o EVMap precisa de aceder aos dados do seu veículo.</string>
|
||||
<string name="auto_chargers_closeby">Carregadores próximos</string>
|
||||
<string name="grant_on_phone">Conceda permissões no telefone</string>
|
||||
<string name="auto_chargers_near_location">Perto de %s</string>
|
||||
<string name="auto_favorites">Favoritos</string>
|
||||
<string name="auto_chargeprice_vehicle_ambiguous">Vários veículos selecionados na app correspondem a este veículo (%1$s %2$s).</string>
|
||||
<string name="selecting_none">todos os items desmarcados</string>
|
||||
<string name="data_sources_hint">Também pode mudar entre o Google Maps e OpenStreetMap (Mapbox) nas definições da app.</string>
|
||||
<string name="selecting_all">todos os items selecionados</string>
|
||||
<string name="loading">Carregando…</string>
|
||||
<string name="auto_multipage_goto">Página %d</string>
|
||||
<string name="auto_multipage">(%d/%d)</string>
|
||||
<string name="settings_android_auto_chargeprice_range">Escala de carregamento para comparação de preços</string>
|
||||
<string name="donations_info" formatted="false">Acha que o EVMap é útil\? Apoie a manutenção e desenvolvimento com uma doação para o desenvolvedor da app.
|
||||
\n
|
||||
\nA Google cobra 15% de cada doação.</string>
|
||||
<string name="auto_location_service">O EVMap está a funcionar no Android Auto e usando a sua localização.</string>
|
||||
<string name="auto_fault_report_date">⚠️ Problemas (%s)</string>
|
||||
<string name="auto_no_refresh_possible">Não é possível atualizar. Por favor volte atrás e reinicie.</string>
|
||||
<string name="auto_prices">Preços</string>
|
||||
<string name="auto_vehicle_data">Dados do veículo</string>
|
||||
<string name="auto_charging_level">Nível de carregamento</string>
|
||||
<string name="auto_no_data">Não disponível</string>
|
||||
<string name="auto_speed">Velocidade</string>
|
||||
<string name="auto_heading">Direção</string>
|
||||
<string name="auto_settings">Definições</string>
|
||||
<string name="welcome_android_auto">Suporte para Android Auto</string>
|
||||
<string name="auto_range">Alcance</string>
|
||||
<string name="welcome_android_auto_detail">Também pode usar o EVMap no Android Auto em carros compatíveis. Basta selecionar a app EVMap no menu do Android Auto.</string>
|
||||
<string name="auto_chargeprice_vehicle_unavailable">O EVMap não pôde determinar o modelo do seu veículo.</string>
|
||||
<string name="auto_chargeprice_vehicle_unknown">Nenhum dos veículos selecionados na app corresponde a este veículo (%1$s %2$s).</string>
|
||||
<string name="auto_chargers_ahead">Apenas carregadores na direção do destino</string>
|
||||
<string name="sounds_cool">Continuar</string>
|
||||
</resources>
|
||||
2
app/src/google/res/values-ro/strings.xml
Normal file
2
app/src/google/res/values-ro/strings.xml
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
5
app/src/googleAutomotive/res/values-pt/strings.xml
Normal file
5
app/src/googleAutomotive/res/values-pt/strings.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="grant_on_phone">Permitir</string>
|
||||
<string name="auto_location_permission_needed">Para usar o EVMap no seu carro, permita o acesso à sua localização.</string>
|
||||
</resources>
|
||||
2
app/src/googleAutomotive/res/values-ro/strings.xml
Normal file
2
app/src/googleAutomotive/res/values-ro/strings.xml
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
@@ -61,7 +61,8 @@ fun buildDetails(
|
||||
if (loc.network != null) DetailsAdapter.Detail(
|
||||
R.drawable.ic_network,
|
||||
R.string.network,
|
||||
loc.network
|
||||
loc.network,
|
||||
clickable = loc.networkUrl != null
|
||||
) else null,
|
||||
if (loc.faultReport != null) DetailsAdapter.Detail(
|
||||
R.drawable.ic_fault_report,
|
||||
|
||||
@@ -5,14 +5,13 @@ import android.content.Context
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.ViewTreeObserver.OnGlobalLayoutListener
|
||||
import android.widget.ImageView
|
||||
import androidx.recyclerview.widget.DiffUtil
|
||||
import androidx.recyclerview.widget.ListAdapter
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import coil.load
|
||||
import coil.memory.MemoryCache
|
||||
import coil.size.OriginalSize
|
||||
import coil.size.SizeResolver
|
||||
import net.vonforst.evmap.R
|
||||
import net.vonforst.evmap.model.ChargerPhoto
|
||||
|
||||
@@ -37,27 +36,42 @@ class GalleryAdapter(context: Context, val itemClickListener: ItemClickListener?
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
||||
val id = getItem(position).id
|
||||
val url = getItem(position).getUrl(height = holder.view.height)
|
||||
val item = getItem(position)
|
||||
|
||||
holder.view.load(
|
||||
url
|
||||
) {
|
||||
size(SizeResolver(OriginalSize))
|
||||
allowHardware(false)
|
||||
listener(
|
||||
onSuccess = { _, metadata ->
|
||||
memoryKeys[id] = metadata.memoryCacheKey
|
||||
if (holder.view.height == 0) {
|
||||
holder.view.viewTreeObserver.addOnGlobalLayoutListener(object : OnGlobalLayoutListener {
|
||||
override fun onGlobalLayout() {
|
||||
holder.view.viewTreeObserver.removeOnGlobalLayoutListener(this)
|
||||
loadImage(item, holder)
|
||||
}
|
||||
)
|
||||
})
|
||||
} else {
|
||||
loadImage(item, holder)
|
||||
}
|
||||
|
||||
if (itemClickListener != null) {
|
||||
holder.view.setOnClickListener {
|
||||
itemClickListener.onItemClick(holder.view, position, memoryKeys[id])
|
||||
itemClickListener.onItemClick(holder.view, position, memoryKeys[item.id])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun loadImage(
|
||||
item: ChargerPhoto,
|
||||
holder: ViewHolder
|
||||
) {
|
||||
val url = item.getUrl(height = holder.view.height)
|
||||
|
||||
holder.view.load(
|
||||
url
|
||||
) {
|
||||
listener(
|
||||
onSuccess = { _, metadata ->
|
||||
memoryKeys[item.id] = metadata.memoryCacheKey
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class ChargerPhotoDiffCallback : DiffUtil.ItemCallback<ChargerPhoto>() {
|
||||
|
||||
@@ -203,29 +203,45 @@ class EnBwAvailabilityDetector(client: OkHttpClient, baseUrl: String? = null) :
|
||||
val country = charger.chargepriceData?.country
|
||||
?: charger.address?.country ?: return false
|
||||
return when (charger.dataSource) {
|
||||
// list of countries as of 2021/06/30, according to
|
||||
// https://www.electrive.net/2021/06/30/enbw-expandiert-mit-ladenetz-in-drei-weitere-laender/
|
||||
// list of countries as of 2023/04/14, according to
|
||||
// https://www.enbw.com/elektromobilitaet/produkte/ladetarife
|
||||
"goingelectric" -> country in listOf(
|
||||
"Deutschland",
|
||||
"Österreich",
|
||||
"Schweiz",
|
||||
"Frankreich",
|
||||
"Belgien",
|
||||
"Niederlande",
|
||||
"Luxemburg",
|
||||
"Liechtenstein",
|
||||
"Dänemark",
|
||||
"Frankreich",
|
||||
"Italien",
|
||||
"Kroatien",
|
||||
"Liechtenstein",
|
||||
"Luxemburg",
|
||||
"Niederlande",
|
||||
"Polen",
|
||||
"Schweden",
|
||||
"Slowakei",
|
||||
"Slowenien",
|
||||
"Spanien",
|
||||
"Tschechien"
|
||||
)
|
||||
"openchargemap" -> country in listOf(
|
||||
"DE",
|
||||
"AT",
|
||||
"CH",
|
||||
"FR",
|
||||
"BE",
|
||||
"NE",
|
||||
"LU",
|
||||
"DK",
|
||||
"FR",
|
||||
"IT",
|
||||
"HR",
|
||||
"LI",
|
||||
"IT"
|
||||
"LU",
|
||||
"NE",
|
||||
"PL",
|
||||
"SE",
|
||||
"SK",
|
||||
"SI",
|
||||
"ES",
|
||||
"CZ"
|
||||
)
|
||||
else -> false
|
||||
}
|
||||
|
||||
@@ -114,8 +114,26 @@ data class ChargepriceCar(
|
||||
val brand: String,
|
||||
|
||||
@Json(name = "dc_charge_ports")
|
||||
val dcChargePorts: List<String>
|
||||
val dcChargePorts: List<String>,
|
||||
|
||||
@Json(name = "usable_battery_size")
|
||||
val usableBatterySize: Float,
|
||||
|
||||
@Json(name = "ac_max_power")
|
||||
val acMaxPower: Float,
|
||||
|
||||
@Json(name = "dc_max_power")
|
||||
val dcMaxPower: Float?
|
||||
) : Equatable, Parcelable {
|
||||
fun formatSpecs(): String = buildString {
|
||||
append("%.0f kWh".format(usableBatterySize))
|
||||
append(" | ")
|
||||
append("AC %.0f kW".format(acMaxPower))
|
||||
dcMaxPower?.let {
|
||||
append(" | ")
|
||||
append("DC %.0f kW".format(it))
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val acConnectors = listOf(
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.squareup.moshi.*
|
||||
import java.lang.reflect.Type
|
||||
import java.time.Instant
|
||||
import java.time.LocalTime
|
||||
import java.time.format.DateTimeParseException
|
||||
|
||||
|
||||
internal class ChargepointListItemJsonAdapterFactory : JsonAdapter.Factory {
|
||||
@@ -138,7 +139,12 @@ internal class HoursAdapter {
|
||||
val end = if (match.groupValues[2] == "24:00") {
|
||||
LocalTime.MAX
|
||||
} else {
|
||||
LocalTime.parse(match.groupValues[2])
|
||||
try {
|
||||
LocalTime.parse(match.groupValues[2])
|
||||
} catch (e: DateTimeParseException) {
|
||||
// got a rare bug report where the value is 24:0000
|
||||
LocalTime.MIN
|
||||
}
|
||||
}
|
||||
return GEHours(start, end)
|
||||
} else {
|
||||
|
||||
@@ -77,6 +77,8 @@ data class GEChargeLocation(
|
||||
cost?.convert(),
|
||||
null,
|
||||
ChargepriceData(address.country, network, chargepoints.map { it.type }),
|
||||
null,
|
||||
null,
|
||||
Instant.now(),
|
||||
isDetailed
|
||||
)
|
||||
@@ -147,7 +149,7 @@ data class GEChargerPhoto(val id: String) {
|
||||
@JsonClass(generateAdapter = true)
|
||||
class GEChargerPhotoAdapter(override val id: String, val apikey: String) :
|
||||
ChargerPhoto(id) {
|
||||
override fun getUrl(height: Int?, width: Int?, size: Int?): String {
|
||||
override fun getUrl(height: Int?, width: Int?, size: Int?, allowOriginal: Boolean): String {
|
||||
return "https://api.goingelectric.de/chargepoints/photo/?key=${apikey}&id=$id" +
|
||||
when {
|
||||
size != null -> "&size=$size"
|
||||
|
||||
@@ -148,8 +148,7 @@ class OpenChargeMapApiWrapper(
|
||||
),
|
||||
minPower = minPower,
|
||||
plugs = connectors,
|
||||
operators = operators,
|
||||
statusType = if (excludeFaults == true) noFaultStatuses.joinToString(",") else null
|
||||
operators = operators
|
||||
)
|
||||
if (!response.isSuccessful) {
|
||||
return Resource.error(response.message(), null)
|
||||
@@ -160,6 +159,7 @@ class OpenChargeMapApiWrapper(
|
||||
minPower,
|
||||
connectorsVal,
|
||||
minConnectors,
|
||||
excludeFaults,
|
||||
refData,
|
||||
zoom
|
||||
)
|
||||
@@ -202,8 +202,7 @@ class OpenChargeMapApiWrapper(
|
||||
radius.toDouble(),
|
||||
minPower = minPower,
|
||||
plugs = connectors,
|
||||
operators = operators,
|
||||
statusType = if (excludeFaults == true) noFaultStatuses.joinToString(",") else null
|
||||
operators = operators
|
||||
)
|
||||
if (!response.isSuccessful) {
|
||||
return Resource.error(response.message(), null)
|
||||
@@ -214,6 +213,7 @@ class OpenChargeMapApiWrapper(
|
||||
minPower,
|
||||
connectorsVal,
|
||||
minConnectors,
|
||||
excludeFaults,
|
||||
refData,
|
||||
zoom
|
||||
)
|
||||
@@ -228,6 +228,7 @@ class OpenChargeMapApiWrapper(
|
||||
minPower: Double?,
|
||||
connectorsVal: MultipleChoiceFilterValue?,
|
||||
minConnectors: Int?,
|
||||
excludeFaults: Boolean?,
|
||||
referenceData: OCMReferenceData,
|
||||
zoom: Float
|
||||
): List<ChargepointListItem> {
|
||||
@@ -237,6 +238,8 @@ class OpenChargeMapApiWrapper(
|
||||
.filter { it.power == null || it.power >= (minPower ?: 0.0) }
|
||||
.filter { if (connectorsVal != null && !connectorsVal.all) it.connectionTypeId in connectorsVal.values.map { it.toLong() } else true }
|
||||
.sumOf { it.quantity ?: 1 } >= (minConnectors ?: 0)
|
||||
}.filter {
|
||||
it.statusTypeId == null || (it.statusTypeId !in removedStatuses && if (excludeFaults == true) it.statusTypeId !in faultStatuses else true)
|
||||
}.map { it.convert(referenceData, false) }.distinct() as List<ChargepointListItem>
|
||||
|
||||
// apply clustering
|
||||
|
||||
@@ -11,12 +11,15 @@ import java.time.Instant
|
||||
import java.time.ZonedDateTime
|
||||
|
||||
// Unknown, Currently Available, Currently In Use, Operational
|
||||
val noFaultStatuses = listOf(0, 10, 20, 50)
|
||||
val noFaultStatuses = listOf(0L, 10L, 20L, 50L)
|
||||
|
||||
// Temporarily Unavailable, Partly Operational, Not Operational, Planned For Future Date, Removed (Decommissioned)
|
||||
val faultStatuses = listOf(30L, 75L, 100L, 150L, 200L)
|
||||
// Temporarily Unavailable, Partly Operational, Not Operational, Planned For Future Date
|
||||
val faultStatuses = listOf(30L, 75L, 100L, 150L)
|
||||
val faultReportCommentType = 1000L
|
||||
|
||||
// Removed (Decommissioned), Removed (Duplicate Listing)
|
||||
val removedStatuses = listOf(200L, 210L)
|
||||
|
||||
data class OCMBoundingBox(
|
||||
val sw_lat: Double, val sw_lng: Double,
|
||||
val ne_lat: Double, val ne_lng: Double
|
||||
@@ -71,10 +74,16 @@ data class OCMChargepoint(
|
||||
addressInfo.countryISOCode(refData),
|
||||
operatorId?.toString(),
|
||||
connections.map { "${it.connectionTypeId},${it.currentTypeId}" }),
|
||||
operatorInfo?.websiteUrl,
|
||||
if (operatorInfo?.websiteUrl?.withoutTrailingSlash() != addressInfo.relatedUrl?.withoutTrailingSlash()) addressInfo.relatedUrl else null,
|
||||
Instant.now(),
|
||||
isDetailed
|
||||
)
|
||||
|
||||
private fun String.withoutTrailingSlash(): String {
|
||||
return this.replace(Regex("/$"), "")
|
||||
}
|
||||
|
||||
private fun convertFaultReport(): FaultReport? {
|
||||
if (statusTypeId in faultStatuses || connections.any { it.statusTypeId in faultStatuses }) {
|
||||
if (userComments != null) {
|
||||
@@ -251,14 +260,13 @@ class OCMChargerPhotoAdapter(
|
||||
val largeUrl: String,
|
||||
val thumbUrl: String
|
||||
) : ChargerPhoto(id) {
|
||||
override fun getUrl(height: Int?, width: Int?, size: Int?): String {
|
||||
override fun getUrl(height: Int?, width: Int?, size: Int?, allowOriginal: Boolean): String {
|
||||
val maxSize = size ?: max(height, width)
|
||||
val mediumUrl = thumbUrl.replace(".thmb.", ".medi.")
|
||||
return when (maxSize) {
|
||||
0 -> mediumUrl
|
||||
in 1..100 -> thumbUrl
|
||||
in 0..100 -> thumbUrl
|
||||
in 101..400 -> mediumUrl
|
||||
else -> largeUrl
|
||||
else -> if (allowOriginal) largeUrl else mediumUrl
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -105,6 +105,8 @@ data class OSMChargingStation(
|
||||
getCost(),
|
||||
"© OpenStreetMap contributors",
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
dataFetchTimestamp,
|
||||
true,
|
||||
)
|
||||
|
||||
@@ -377,6 +377,10 @@ class MapFragment : Fragment(), OnMapReadyCallback, MapsActivity.FragmentCallbac
|
||||
null, extras
|
||||
)
|
||||
}
|
||||
binding.detailView.btnChargerWebsite.setOnClickListener {
|
||||
val charger = vm.charger.value?.data ?: return@setOnClickListener
|
||||
charger.chargerUrl?.let { (activity as? MapsActivity)?.openUrl(it) }
|
||||
}
|
||||
binding.detailView.imgPredictionSource.setOnClickListener {
|
||||
(activity as? MapsActivity)?.openUrl(getString(R.string.fronyx_url))
|
||||
}
|
||||
@@ -753,12 +757,10 @@ class MapFragment : Fragment(), OnMapReadyCallback, MapsActivity.FragmentCallbac
|
||||
val photos = vm.charger.value?.data?.photos ?: return
|
||||
|
||||
viewer = StfalconImageViewer.Builder(context, photos) { imageView, photo ->
|
||||
imageView.load(photo.getUrl(size = 1000)) {
|
||||
imageView.load(photo.getUrl(size = 1000, allowOriginal = true)) {
|
||||
if (photo == photos[position] && imageCacheKey != null) {
|
||||
placeholderMemoryCacheKey(imageCacheKey)
|
||||
}
|
||||
size(SizeResolver(OriginalSize))
|
||||
allowHardware(false)
|
||||
}
|
||||
}
|
||||
.withTransitionFrom(view as ImageView)
|
||||
@@ -810,6 +812,9 @@ class MapFragment : Fragment(), OnMapReadyCallback, MapsActivity.FragmentCallbac
|
||||
R.drawable.ic_payment -> {
|
||||
showPaymentMethodsDialog(charger)
|
||||
}
|
||||
R.drawable.ic_network -> {
|
||||
charger.networkUrl?.let { (activity as? MapsActivity)?.openUrl(it) }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ class MultiSelectDialog : MaterialDialogFragment() {
|
||||
companion object {
|
||||
fun getInstance(
|
||||
title: String,
|
||||
data: Map<String, String>,
|
||||
data: Map<String, CharSequence>,
|
||||
selected: Set<String>,
|
||||
commonChoices: Set<String>?,
|
||||
showAllButton: Boolean = true
|
||||
@@ -55,7 +55,7 @@ class MultiSelectDialog : MaterialDialogFragment() {
|
||||
|
||||
override fun initView(view: View, savedInstanceState: Bundle?) {
|
||||
val args = requireArguments()
|
||||
val data = args.getSerializable("data") as HashMap<String, String>
|
||||
val data = args.getSerializable("data") as HashMap<String, CharSequence>
|
||||
val selected = args.getSerializable("selected") as HashSet<String>
|
||||
val title = args.getString("title")
|
||||
val commonChoices = if (args.containsKey("commonChoices")) {
|
||||
@@ -71,7 +71,7 @@ class MultiSelectDialog : MaterialDialogFragment() {
|
||||
binding.btnAll.visibility = if (showAllButton) View.VISIBLE else View.INVISIBLE
|
||||
|
||||
items = data.entries.toList()
|
||||
.sortedBy { it.value.lowercase(Locale.getDefault()) }
|
||||
.sortedBy { it.value.toString().lowercase(Locale.getDefault()) }
|
||||
.sortedBy {
|
||||
when {
|
||||
selected.contains(it.key) && commonChoices?.contains(it.key) == true -> 0
|
||||
@@ -117,7 +117,7 @@ private fun search(
|
||||
): List<MultiSelectItem> {
|
||||
return items.filter { item ->
|
||||
// search for string within name
|
||||
text.lowercase(Locale.getDefault()) in item.name.lowercase(Locale.getDefault())
|
||||
text.lowercase(Locale.getDefault()) in item.name.toString().lowercase(Locale.getDefault())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -125,4 +125,5 @@ class Adapter() : DataBindingAdapter<MultiSelectItem>({ it.key }) {
|
||||
override fun getItemViewType(position: Int) = R.layout.dialog_multi_select_item
|
||||
}
|
||||
|
||||
data class MultiSelectItem(val key: String, val name: String, var selected: Boolean) : Equatable
|
||||
data class MultiSelectItem(val key: String, val name: CharSequence, var selected: Boolean) :
|
||||
Equatable
|
||||
@@ -2,13 +2,19 @@ package net.vonforst.evmap.fragment.preference
|
||||
|
||||
import android.content.SharedPreferences
|
||||
import android.os.Bundle
|
||||
import android.text.SpannableStringBuilder
|
||||
import android.text.Spanned
|
||||
import android.text.style.ImageSpan
|
||||
import android.text.style.RelativeSizeSpan
|
||||
import android.view.View
|
||||
import androidx.appcompat.content.res.AppCompatResources
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.preference.MultiSelectListPreference
|
||||
import net.vonforst.evmap.R
|
||||
import net.vonforst.evmap.ui.MultiSelectDialogPreference
|
||||
import net.vonforst.evmap.viewmodel.SettingsViewModel
|
||||
import net.vonforst.evmap.viewmodel.viewModelFactory
|
||||
|
||||
|
||||
class ChargepriceSettingsFragment : BaseSettingsFragment() {
|
||||
override val isTopLevel = false
|
||||
|
||||
@@ -22,8 +28,8 @@ class ChargepriceSettingsFragment : BaseSettingsFragment() {
|
||||
}
|
||||
})
|
||||
|
||||
private lateinit var myVehiclePreference: MultiSelectListPreference
|
||||
private lateinit var myTariffsPreference: MultiSelectListPreference
|
||||
private lateinit var myVehiclePreference: MultiSelectDialogPreference
|
||||
private lateinit var myTariffsPreference: MultiSelectDialogPreference
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
@@ -34,8 +40,16 @@ class ChargepriceSettingsFragment : BaseSettingsFragment() {
|
||||
res.data?.let { cars ->
|
||||
val sortedCars = cars.sortedBy { it.brand }
|
||||
myVehiclePreference.entryValues = sortedCars.map { it.id }.toTypedArray()
|
||||
myVehiclePreference.entries =
|
||||
sortedCars.map { "${it.brand} ${it.name}" }.toTypedArray()
|
||||
myVehiclePreference.entries = sortedCars.map {
|
||||
SpannableStringBuilder().apply {
|
||||
appendLine("${it.brand} ${it.name}")
|
||||
append(
|
||||
it.formatSpecs(),
|
||||
RelativeSizeSpan(0.86f),
|
||||
Spanned.SPAN_INCLUSIVE_EXCLUSIVE
|
||||
)
|
||||
}
|
||||
}.toTypedArray()
|
||||
myVehiclePreference.isEnabled = true
|
||||
updateMyVehiclesSummary()
|
||||
}
|
||||
|
||||
@@ -62,8 +62,8 @@ data class ChargeLocation(
|
||||
@Embedded val address: Address?,
|
||||
val chargepoints: List<Chargepoint>,
|
||||
val network: String?,
|
||||
val url: String,
|
||||
val editUrl: String?,
|
||||
val url: String, // URL of this charger at the data source
|
||||
val editUrl: String?, // URL to edit this charger at the data source
|
||||
@Embedded(prefix = "fault_report_") val faultReport: FaultReport?,
|
||||
val verified: Boolean,
|
||||
val barrierFree: Boolean?,
|
||||
@@ -78,6 +78,8 @@ data class ChargeLocation(
|
||||
@Embedded val cost: Cost?,
|
||||
val license: String?,
|
||||
@Embedded(prefix = "chargeprice") val chargepriceData: ChargepriceData?,
|
||||
val networkUrl: String?, // Website of the network
|
||||
val chargerUrl: String?, // Website for this specific charging site. Might be an ad-hoc payment page.
|
||||
val timeRetrieved: Instant,
|
||||
val isDetailed: Boolean
|
||||
) : ChargepointListItem(), Equatable, Parcelable {
|
||||
@@ -332,7 +334,19 @@ data class Hours(
|
||||
}
|
||||
|
||||
abstract class ChargerPhoto(open val id: String) : Parcelable {
|
||||
abstract fun getUrl(height: Int? = null, width: Int? = null, size: Int? = null): String
|
||||
/**
|
||||
* Gets a URL of the image corresponding to a given size.
|
||||
*
|
||||
* If the data source supports accessing the image in its original (potentially unlimited) size,
|
||||
* this size will only be returned if allowOriginal is set to true. Otherwise, only scaled
|
||||
* versions of the images will be returned.
|
||||
*/
|
||||
abstract fun getUrl(
|
||||
height: Int? = null,
|
||||
width: Int? = null,
|
||||
size: Int? = null,
|
||||
allowOriginal: Boolean = false
|
||||
): String
|
||||
}
|
||||
|
||||
data class ChargeLocationCluster(
|
||||
|
||||
@@ -32,7 +32,7 @@ import net.vonforst.evmap.model.*
|
||||
OCMConnectionType::class,
|
||||
OCMCountry::class,
|
||||
OCMOperator::class
|
||||
], version = 18
|
||||
], version = 19
|
||||
)
|
||||
@TypeConverters(Converters::class)
|
||||
abstract class AppDatabase : RoomDatabase() {
|
||||
@@ -56,7 +56,7 @@ abstract class AppDatabase : RoomDatabase() {
|
||||
MIGRATION_2, MIGRATION_3, MIGRATION_4, MIGRATION_5, MIGRATION_6,
|
||||
MIGRATION_7, MIGRATION_8, MIGRATION_9, MIGRATION_10, MIGRATION_11,
|
||||
MIGRATION_12, MIGRATION_13, MIGRATION_14, MIGRATION_15, MIGRATION_16,
|
||||
MIGRATION_17, MIGRATION_18
|
||||
MIGRATION_17, MIGRATION_18, MIGRATION_19
|
||||
)
|
||||
.addCallback(object : Callback() {
|
||||
override fun onCreate(db: SupportSQLiteDatabase) {
|
||||
@@ -376,5 +376,12 @@ abstract class AppDatabase : RoomDatabase() {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private val MIGRATION_19 = object : Migration(18, 19) {
|
||||
override fun migrate(db: SupportSQLiteDatabase) {
|
||||
db.execSQL("ALTER TABLE `ChargeLocation` ADD `networkUrl` TEXT")
|
||||
db.execSQL("ALTER TABLE `ChargeLocation` ADD `chargerUrl` TEXT")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -38,7 +38,7 @@ class MultiSelectDialogPreference(ctx: Context, attrs: AttributeSet) :
|
||||
val dialog =
|
||||
MultiSelectDialog.getInstance(
|
||||
title.toString(),
|
||||
entryValues.map { it.toString() }.zip(entries.map { it.toString() }).toMap(),
|
||||
entryValues.map { it.toString() }.zip(entries).toMap(),
|
||||
if (all) entryValues.map { it.toString() }.toSet() else values,
|
||||
emptySet(),
|
||||
showAllButton
|
||||
|
||||
10
app/src/main/res/drawable/ic_link.xml
Normal file
10
app/src/main/res/drawable/ic_link.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<vector android:height="24dp"
|
||||
android:tint="#000000"
|
||||
android:viewportHeight="24"
|
||||
android:viewportWidth="24"
|
||||
android:width="24dp"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M3.9,12c0,-1.71 1.39,-3.1 3.1,-3.1h4L11,7L7,7c-2.76,0 -5,2.24 -5,5s2.24,5 5,5h4v-1.9L7,15.1c-1.71,0 -3.1,-1.39 -3.1,-3.1zM8,13h8v-2L8,11v2zM17,7h-4v1.9h4c1.71,0 3.1,1.39 3.1,3.1s-1.39,3.1 -3.1,3.1h-4L13,17h4c2.76,0 5,-2.24 5,-5s-2.24,-5 -5,-5z" />
|
||||
</vector>
|
||||
@@ -330,20 +330,6 @@
|
||||
app:layout_constraintStart_toStartOf="@+id/guideline"
|
||||
app:layout_constraintTop_toTopOf="@+id/txtName" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btnChargeprice"
|
||||
style="@style/Widget.Material3.Button.TonalButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="8dp"
|
||||
android:text="@string/go_to_chargeprice"
|
||||
android:transitionName="@string/shared_element_chargeprice"
|
||||
app:goneUnless="@{charger.data != null && ChargepriceApi.isChargerSupported(charger.data)}"
|
||||
app:icon="@drawable/ic_chargeprice"
|
||||
app:layout_constraintEnd_toStartOf="@+id/guideline2"
|
||||
app:layout_constraintStart_toStartOf="@+id/guideline"
|
||||
app:layout_constraintTop_toBottomOf="@+id/divider1" />
|
||||
|
||||
<View
|
||||
android:id="@+id/divider2"
|
||||
android:layout_width="match_parent"
|
||||
@@ -359,7 +345,7 @@
|
||||
android:layout_marginTop="8dp"
|
||||
android:background="?android:attr/listDivider"
|
||||
app:goneUnless="@{charger.data != null && ChargepriceApi.isChargerSupported(charger.data)}"
|
||||
app:layout_constraintTop_toBottomOf="@+id/btnChargeprice" />
|
||||
app:layout_constraintTop_toBottomOf="@+id/buttonsScroller" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView8"
|
||||
@@ -501,6 +487,45 @@
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="@+id/textView7" />
|
||||
|
||||
<HorizontalScrollView
|
||||
android:id="@+id/buttonsScroller"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="8dp"
|
||||
app:layout_constraintEnd_toStartOf="@+id/guideline2"
|
||||
app:layout_constraintStart_toStartOf="@+id/guideline"
|
||||
app:layout_constraintTop_toBottomOf="@+id/divider1"
|
||||
app:layout_constrainedWidth="true"
|
||||
android:fillViewport="true">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<Button
|
||||
android:id="@+id/btnChargeprice"
|
||||
style="@style/Widget.Material3.Button.TonalButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/go_to_chargeprice"
|
||||
android:transitionName="@string/shared_element_chargeprice"
|
||||
app:goneUnless="@{charger.data != null && ChargepriceApi.isChargerSupported(charger.data)}"
|
||||
app:icon="@drawable/ic_chargeprice" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btnChargerWebsite"
|
||||
style="@style/Widget.Material3.Button.OutlinedButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="8dp"
|
||||
android:text="@string/charger_website"
|
||||
app:goneUnless="@{charger.data != null && charger.data.chargerUrl != null}"
|
||||
app:icon="@drawable/ic_link" />
|
||||
|
||||
</LinearLayout>
|
||||
</HorizontalScrollView>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
|
||||
@@ -158,7 +158,7 @@
|
||||
<string name="welcome_2">Die Farbe einer Ladestation zeigt dir die maximale Ladeleistung</string>
|
||||
<string name="welcome_2_detail">Die Farben kannst du unter “Über EVMap → Häufig gestellte Fragen” erneut ansehen</string>
|
||||
<string name="donation_dialog_title">Danke, dass du EVMap nutzt!</string>
|
||||
<string name="donation_dialog_detail">EVMap ist kostenlos und Open Source. Über GitHub kann jeder zur Weiterentwicklung der App beitragen. Um die laufenden Kosten für den für die Datenquellen zu decken, freue ich mich auch über Spenden in der App oder über GitHub Sponsors.</string>
|
||||
<string name="donation_dialog_detail">EVMap ist kostenlos und Open Source. Über GitHub kann jeder zur Weiterentwicklung der App beitragen. Um die laufenden Kosten für die Datenquellen zu decken, freut sich der Entwickler über Spenden mit einem Betrag deiner Wahl.</string>
|
||||
<string name="chargeprice_donation_dialog_title">Du bist ein richtiger Sparfuchs!</string>
|
||||
<string name="chargeprice_donation_dialog_detail">Anscheinend nutzt du den Preisvergleich sehr gern. Mit einer Spende für EVMap kannst du helfen, die Kosten für den Datenzugriff zu decken.</string>
|
||||
<string name="deleted_filterprofile">„%s” gelöscht</string>
|
||||
@@ -295,4 +295,5 @@
|
||||
<string name="developer_mode_disabled">Entwicklermodus deaktiviert</string>
|
||||
<string name="gps">GPS</string>
|
||||
<string name="compass">Kompass</string>
|
||||
<string name="charger_website">Website</string>
|
||||
</resources>
|
||||
@@ -273,4 +273,30 @@
|
||||
<string name="charging_free">gratuite</string>
|
||||
<string name="about_contributors">Contributeurs</string>
|
||||
<string name="about_contributors_text">Merci à tous les contributeurs pour leur contribution au codage et à la traduction d\'EVMap :</string>
|
||||
<string name="location_error">Localisation non détectée. Veuillez vérifier les paramètres du système</string>
|
||||
<string name="developer_mode_enabled">Mode développeur activé</string>
|
||||
<string name="pref_prediction_enabled">Afficher les prévisions d\'utilisation</string>
|
||||
<string name="pref_prediction_enabled_summary">pour les chargeurs pris en charge
|
||||
\n(actuellement seulement chargeurs rapides en Allemagne)</string>
|
||||
<string name="pref_applink_associate">Ouvrir les liens pris en charge</string>
|
||||
<string name="pref_applink_associate_summary">de goingelectric.de et openchargemap.org</string>
|
||||
<string name="chargeprice_header_my_tariffs">Mes tarifs</string>
|
||||
<string name="chargeprice_header_other_tariffs">Autres tarifs</string>
|
||||
<string name="disable_developer_mode">Désactiver le mode développeur</string>
|
||||
<string name="developer_mode_disabled">Mode développeur désactivé</string>
|
||||
<string name="gps">GPS</string>
|
||||
<string name="compass">Boussole</string>
|
||||
<string name="prediction_dc_plugs_only">Prises DC</string>
|
||||
<string name="data_source_switched_to">Source de données basculée vers %s</string>
|
||||
<string name="menu_reset">Réinitialiser le filtre</string>
|
||||
<string name="chargeprice_price_not_available">Prix non disponible</string>
|
||||
<string name="utilization_prediction">Prévision d\'utilisation</string>
|
||||
<string name="prediction_help">La prédiction est basée sur des facteurs tels que le jour de la semaine, l\'heure de la journée et l\'utilisation passée, ce qui vous permet d\'éviter les chargeurs surchargés. Pas de garantie.</string>
|
||||
<plurals name="prediction_number_available">
|
||||
<item quantity="one">%1$d/%2$d disponible</item>
|
||||
<item quantity="many">%1$d/%2$d disponibles</item>
|
||||
<item quantity="other">%1$d/%2$d disponibles</item>
|
||||
</plurals>
|
||||
<string name="developer_options">Paramètres développeur</string>
|
||||
<string name="prediction_time_colon">%s :</string>
|
||||
</resources>
|
||||
299
app/src/main/res/values-pt/strings.xml
Normal file
299
app/src/main/res/values-pt/strings.xml
Normal file
@@ -0,0 +1,299 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="copyright_summary">©2020–2023 Johan von Forstner</string>
|
||||
<string name="menu_reset">Repor filtros</string>
|
||||
<string name="filter_custom">Filtro modificado</string>
|
||||
<string name="filter_favorites">Favoritos</string>
|
||||
<string name="reorder">reordenar</string>
|
||||
<string name="delete">Apagar</string>
|
||||
<string name="welcome_2_detail">Também pode encontrar esta informação em \"Sobre\" → \"Questões frequentes\"</string>
|
||||
<string name="chargeprice_donation_dialog_title">Você é um verdadeiro caçador de pechinchas!</string>
|
||||
<string name="donation_dialog_title">Obrigado por usar o EVMap</string>
|
||||
<string name="deleted_filterprofile">“%s” removido</string>
|
||||
<string name="undo">Refazer</string>
|
||||
<string name="rename">Renomear</string>
|
||||
<string name="chargeprice_donation_dialog_detail">Você faz grande uso da comparação de preços. Ajude a cobrir os custos de acesso à informação apoiando o EVMap com uma doação.</string>
|
||||
<string name="verified">verificado</string>
|
||||
<string name="chargeprice_select_connector">Escolhe o conector</string>
|
||||
<string name="verified_desc">O carregador foi marcado como funcional por um membro da comunidade %s</string>
|
||||
<string name="charge_price_format">%2$s%1$.2f</string>
|
||||
<string name="charge_price_average_format">⌀ %2$s%1$.2f/kWh</string>
|
||||
<string name="charge_price_kwh_format">%2$s%1$.2f/kWh</string>
|
||||
<string name="percent_format">%.0f%%</string>
|
||||
<string name="pref_my_vehicle">Os meus veículos</string>
|
||||
<string name="pref_chargeprice_show_provider_customer_tariffs_summary">As empresas de serviços públicos às vezes oferecem planos especiais para os seus clientes</string>
|
||||
<plurals name="chargeprice_some_tariffs_selected">
|
||||
<item quantity="one">%d plano selecionado</item>
|
||||
<item quantity="other">%d planos selecionados</item>
|
||||
</plurals>
|
||||
<string name="data_sources_description">Escolha uma fonte de informação para as estações de carregamento. Pode alterar mais tarde nas definições da app.</string>
|
||||
<string name="about_contributors_text">Obrigado a todos os contribuidores de código e traduções para o EVMap:</string>
|
||||
<string name="utilization_prediction">Previsão de utilização</string>
|
||||
<string name="prediction_time_colon">%s:</string>
|
||||
<string name="pref_applink_associate_summary">de goingelectric.de e openchargemap.org</string>
|
||||
<string name="none">nenhum</string>
|
||||
<string name="donate">Doar</string>
|
||||
<string name="show_less">menos…</string>
|
||||
<string name="all">todos</string>
|
||||
<string name="show_more">mais…</string>
|
||||
<string name="filters_deactivated">Filtros desativados</string>
|
||||
<string name="favorites_empty_state">Carregadores guardados aparecem aqui</string>
|
||||
<string name="donation_successful">Obrigado ❤️</string>
|
||||
<string name="category_car_dealership">Stand de carros</string>
|
||||
<string name="map_traffic">Trânsito</string>
|
||||
<string name="faq">Questões frequentes</string>
|
||||
<string name="menu_filters_active">Filtros ativos</string>
|
||||
<string name="menu_edit_filters">Editar filtros</string>
|
||||
<string name="filters_activated">Filtros ativados</string>
|
||||
<string name="menu_manage_filter_profiles">Gerir perfis de filtros</string>
|
||||
<string name="go_to_chargeprice">Comparar preços</string>
|
||||
<string name="filter_operators">Operadores</string>
|
||||
<string name="location_error">Localização não encontrada. Verifique se a app tem permissão para usar aceder à sua localização</string>
|
||||
<string name="filter_networks">Redes</string>
|
||||
<string name="fault_report">Com problemas</string>
|
||||
<string name="number_selected">%d selecionados</string>
|
||||
<string name="cancel">Cancelar</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="filter_barrierfree">Não necessita de registo</string>
|
||||
<string name="fault_report_date">Com problemas (atualizado: %s)</string>
|
||||
<string name="filter_chargecards">Formas de pagamento</string>
|
||||
<string name="pref_language">Língua da app</string>
|
||||
<string name="all_selected">Todos selecionados</string>
|
||||
<string name="edit">editar</string>
|
||||
<string name="pref_darkmode">Modo escuro</string>
|
||||
<string name="connection_error">Não foi possível carregar a lista de carregadores</string>
|
||||
<string name="retry">Tentar novamente</string>
|
||||
<string name="filter_open_247">Disponível 24/7</string>
|
||||
<string name="filter_exclude_faults">Excluir carregadores com relatos de falhas</string>
|
||||
<string name="charge_cards">Formas de pagamento</string>
|
||||
<string name="and_n_others">e %d outros</string>
|
||||
<string name="goingelectric_forum">Tópico no fórum GoingElectric.de</string>
|
||||
<string name="contact">Contato</string>
|
||||
<string name="menu_report_new_charger">Novo carregador</string>
|
||||
<string name="category_holiday_home">Casa de férias</string>
|
||||
<string name="pref_map_provider">Provedor do mapa</string>
|
||||
<string name="twitter">Twitter</string>
|
||||
<string name="category_public_authorities">Autoridades públicas</string>
|
||||
<string name="category_private_charger">Carregador privado</string>
|
||||
<string name="category_rest_area">Área de descanso</string>
|
||||
<string name="edit_at_datasource">editado em %s</string>
|
||||
<string name="categories">Categorias</string>
|
||||
<string name="category_service_on_motorway">Área de serviço (autoestrada)</string>
|
||||
<string name="category_service_off_motorway">Área de serviço (fora da autoestrada)</string>
|
||||
<string name="category_railway_station">Estação de comboio</string>
|
||||
<string name="category_shopping_mall">Centro comercial</string>
|
||||
<string name="category_amusement_park">Parque de diversões</string>
|
||||
<string name="category_airport">Aeroporto</string>
|
||||
<string name="category_parking_multi">Garagem de estacionamento</string>
|
||||
<string name="category_camping">Parque de campismo</string>
|
||||
<string name="category_cinema">Cinema</string>
|
||||
<string name="category_hotel">Hotel</string>
|
||||
<string name="category_church">Igreja</string>
|
||||
<string name="category_hospital">Hospital</string>
|
||||
<string name="category_museum">Museu</string>
|
||||
<string name="category_parking">Parque de estacionamento</string>
|
||||
<string name="category_restaurant">Restaurante</string>
|
||||
<string name="save_profile_enter_name">Insira o nome do perfil com este filtro:</string>
|
||||
<string name="save_as_profile">Guardar como perfil</string>
|
||||
<string name="filterprofiles_empty_state">Não existem filtros guardados</string>
|
||||
<string name="welcome_2">Cada cor corresponde à uma potência máxima</string>
|
||||
<string name="welcome_to_evmap">Bem-vindo ao EVMap</string>
|
||||
<string name="pref_darkmode_always_off">sempre desligado</string>
|
||||
<string name="welcome_2_title">Escolha a potência</string>
|
||||
<string name="navigate">Navegar</string>
|
||||
<string name="donation_dialog_detail">O EVMap é gratuito e de código aberto. Contribuições de código no GitHub são bem-vindas. Para ajudar a cobrir os custos de operação, por favor considere fazer uma doação ao criador da app.</string>
|
||||
<string name="charging_barrierfree">Não necessita de registo</string>
|
||||
<plurals name="charge_cards_compatible_num">
|
||||
<item quantity="one">%d forma de pagamento compatível</item>
|
||||
<item quantity="other">%d formas de pagamento compatíveis</item>
|
||||
</plurals>
|
||||
<string name="chargeprice_session_fee">custo da sessão</string>
|
||||
<string name="edit_on_goingelectric_info">Por favor faça o login em GoingElectric.de se esta página estiver vazia</string>
|
||||
<string name="chargeprice_blocking_fee">Taxa de bloqueio %s</string>
|
||||
<string name="chargeprice_per_kwh">por kWh</string>
|
||||
<string name="chargeprice_per_minute">por minuto</string>
|
||||
<string name="pref_chargeprice_no_base_fee">Excluir planos com taxas mensais</string>
|
||||
<string name="chargeprice_no_tariffs_found">O Chargeprice.app não encontrou planos de carregamento para este carregador</string>
|
||||
<string name="chargeprice_min_spend">Gasto mínimo: %2$s%1$.2f/mês</string>
|
||||
<string name="powered_by_chargeprice">informação da Chargeprice</string>
|
||||
<string name="chargeprice_base_fee">Taxa base: %2$s%1$.2f/mês</string>
|
||||
<string name="settings_chargeprice">Comparação de preços</string>
|
||||
<string name="chargeprice_provider_customer_tariff">Apenas para clientes com subscrição</string>
|
||||
<string name="chargeprice_battery_range">Carregar de %1$.0f%% até %2$.0f%%</string>
|
||||
<string name="chargeprice_battery_range_from">Carregar de</string>
|
||||
<string name="pref_chargeprice_show_provider_customer_tariffs">Incluir planos de subscrição</string>
|
||||
<string name="chargeprice_select_car_first">Por favor escolha o modelo do seu carro nas definições primeiro</string>
|
||||
<string name="chargeprice_battery_range_to">até</string>
|
||||
<string name="chargeprice_stats">(%1$.0f kWh, %2$s aprox., ⌀ %3$.0f kW)</string>
|
||||
<string name="chargeprice_connection_error">Não foi possível carregar os preços</string>
|
||||
<string name="chargeprice_vehicle">Veículo</string>
|
||||
<string name="chargeprice_title">Preços</string>
|
||||
<string name="chargeprice_no_compatible_connectors">Não existem conectores compatíveis nesta estação de carregamento</string>
|
||||
<string name="pref_chargeprice_currency">Moeda</string>
|
||||
<string name="got_it">Continuar</string>
|
||||
<string name="chargeprice_price_not_available">Preço não disponível</string>
|
||||
<string name="pref_my_tariffs">Os meus planos de carregamento</string>
|
||||
<plurals name="pref_my_tariffs_summary">
|
||||
<item quantity="one" tools:ignore="ImpliedQuantity">(será destacado na comparação de preços)</item>
|
||||
<item quantity="other">(serão destacados na comparação de preços)</item>
|
||||
</plurals>
|
||||
<string name="data_source_goingelectric">GoingElectric.de</string>
|
||||
<string name="chargeprice_all_tariffs_selected">todos os planos selecionados</string>
|
||||
<string name="license">Licença</string>
|
||||
<string name="unknown_operator">Operador desconhecido</string>
|
||||
<string name="settings_charger_data">Estações de carregamento</string>
|
||||
<string name="data_source_goingelectric_desc">Boa escolha para países de lingua alemã. Descrições em alemão. Mantido pela comunidade.</string>
|
||||
<string name="pref_data_source">Fonte da informação</string>
|
||||
<string name="data_source_openchargemap">Open Charge Map</string>
|
||||
<string name="next">próximo</string>
|
||||
<string name="data_source_openchargemap_desc">Mundial, com vários níveis de qualidade. Descrições em inglês ou lingua local. Mantido pela comunidade e usa informação governamental publica em alguns países (ex: América do Norte, Reino Unido, França, Noruega, etc).</string>
|
||||
<string name="get_started">Começar</string>
|
||||
<string name="lets_go">Vamos lá</string>
|
||||
<string name="crash_report_text">O EVMap encontrou um problema. Por favor envie um relatório do erro para o criador da app.</string>
|
||||
<string name="crash_report_comment_prompt">Pode adicionar um comentário abaixo:</string>
|
||||
<string name="pref_search_provider">Fornecedor da pesquisa</string>
|
||||
<string name="powered_by_mapbox">via Mapbox</string>
|
||||
<string name="github_sponsors">Patrocinadores no GitHub</string>
|
||||
<string name="donate_desc">Apoie o desenvolvimento do EVMap com uma única doação</string>
|
||||
<string name="pref_map_rotate_gestures_on">Use dois dedos para girar o mapa</string>
|
||||
<string name="pref_map_rotate_gestures_off">Rotação desligada (norte sempre para cima)</string>
|
||||
<string name="refresh_live_data">atualizar estado em tempo real</string>
|
||||
<string name="pref_search_provider_info">As pesquisas são caras, especialmente quando o Google Maps é usado. Por favor considere doar através de \"Sobre\" → \"Doar\".</string>
|
||||
<string name="github_sponsors_desc">Apoie o EVMap no GitHub Sponsors</string>
|
||||
<string name="unnamed_filter_profile">Filtro sem nome</string>
|
||||
<string name="deleted_recent_search_results">As pesquisas recentes foram eliminadas</string>
|
||||
<string name="help">Ajuda</string>
|
||||
<string name="privacy_link">https://evmap.vonforst.net/en/privacy.html</string>
|
||||
<string name="faq_link">https://evmap.vonforst.net/en/faq.html</string>
|
||||
<string name="chargeprice_faq_link">https://evmap.vonforst.net/en/chargeprice_faq.html</string>
|
||||
<string name="pref_search_delete_recent">Apagar pesquisas recentes</string>
|
||||
<string name="required">obrigatório</string>
|
||||
<string name="settings_data_sources">Fontes de informação</string>
|
||||
<string name="settings_android_auto">Android Auto</string>
|
||||
<string name="pref_map_rotate_gestures_enabled">Rotação do mapa</string>
|
||||
<string name="autocomplete_connection_error">Não foi possível carregar as sugestões</string>
|
||||
<string name="pref_language_device_default">Língua do dispositivo</string>
|
||||
<string name="pref_darkmode_device_default">Padrão do dispositivo</string>
|
||||
<string name="pref_darkmode_always_on">sempre ligado</string>
|
||||
<string name="pref_chargeprice_currency_chf">Franco suíço (CHF)</string>
|
||||
<string name="pref_chargeprice_currency_czk">Coroa checa (CZK)</string>
|
||||
<string name="pref_chargeprice_currency_dkk">Coroa dinamarquesa (DKK)</string>
|
||||
<string name="pref_chargeprice_currency_eur">Euro (EUR)</string>
|
||||
<string name="pref_chargeprice_currency_gbp">Libra esterlina (GBP)</string>
|
||||
<string name="chargeprice_header_my_tariffs">Os meus planos</string>
|
||||
<string name="chargeprice_header_other_tariffs">Outros planos</string>
|
||||
<string name="developer_options">Opções de desenvolvedor</string>
|
||||
<string name="prediction_help">A previsão é baseada em fatores como dia da semana, hora do dia e uso anterior para que você evite carregadores superlotados. Sem garantias de estar correta.</string>
|
||||
<string name="disable_developer_mode">Desativar o modo de desenvolvedor</string>
|
||||
<string name="compass">Compasso</string>
|
||||
<plurals name="prediction_number_available">
|
||||
<item quantity="one">%1$d/%2$d disponível</item>
|
||||
<item quantity="other">%1$d/%2$d disponíveis</item>
|
||||
</plurals>
|
||||
<string name="pref_prediction_enabled">Mostrar previsões de utilização</string>
|
||||
<string name="developer_mode_enabled">Modo de desenvolvedor ativado</string>
|
||||
<string name="pref_prediction_enabled_summary">para carregadores suportados
|
||||
\n(atualmente apenas CC/DC na Alemanha)</string>
|
||||
<string name="prediction_only">(apenas %s)</string>
|
||||
<string name="prediction_dc_plugs_only">Conectores CC/DC</string>
|
||||
<string name="pref_applink_associate">Abrir links suportados</string>
|
||||
<string name="data_source_switched_to">Fonte de dados alterada para %s</string>
|
||||
<string name="developer_mode_disabled">Modo de desenvolvedor desativado</string>
|
||||
<string name="gps">GPS</string>
|
||||
<string name="no_maps_app_found">Instale a app de navegação primeiro</string>
|
||||
<string name="no_browser_app_found">Instale um navegador web primeiro</string>
|
||||
<string name="connectors">Conectores</string>
|
||||
<string name="address">Endereço</string>
|
||||
<string name="operator">Operador</string>
|
||||
<string name="network">Rede</string>
|
||||
<string name="hours">Horário de abertura</string>
|
||||
<string name="open_247"><b>Aberto 24/7</b></string>
|
||||
<string name="closed"><b>Fechado</b></string>
|
||||
<string name="open_closesat"><b>Aberto</b> · Fecha às %s</string>
|
||||
<string name="closed_opensat"><b>Fechado</b> · Abre às %s</string>
|
||||
<string name="app_name">EVMap</string>
|
||||
<string name="title_activity_maps">EVMap</string>
|
||||
<string name="closed_unfmt">Fechado</string>
|
||||
<string name="holiday">Feriado</string>
|
||||
<string name="cost">Custo</string>
|
||||
<string name="cost_detail"><b>Carregamento:</b> %1$s · <b>Parque:</b> %2$s</string>
|
||||
<string name="cost_detail_charging"><b>Carregamento %s</b></string>
|
||||
<string name="cost_detail_parking"><b>Parque %s</b></string>
|
||||
<string name="charging_free">Gratuito</string>
|
||||
<string name="charging_paid">Pago</string>
|
||||
<string name="parking_free">Gratuito</string>
|
||||
<string name="parking_paid">Pago</string>
|
||||
<string name="amenities">Facilidades</string>
|
||||
<string name="general_info">Informação geral</string>
|
||||
<string name="realtime_data_unavailable">Estado em tempo real não disponível</string>
|
||||
<string name="realtime_data_loading">Verificado estado em tempo real…</string>
|
||||
<string name="realtime_data_source">Fonte do estado em tempo real (beta) %s</string>
|
||||
<string name="source">Fonte: %s</string>
|
||||
<string name="search">Pesquisa</string>
|
||||
<string name="menu_map">Mapa</string>
|
||||
<string name="menu_favs">Favoritos</string>
|
||||
<string name="menu_filter">Filtro</string>
|
||||
<string name="not_implemented">ainda não implementado</string>
|
||||
<string name="about">Sobre</string>
|
||||
<string name="version">Versão</string>
|
||||
<string name="github_link_title">Código-fonte</string>
|
||||
<string name="oss_licenses">Licenças</string>
|
||||
<string name="settings_ui">Interface</string>
|
||||
<string name="settings_map">Mapa</string>
|
||||
<string name="copyright">Direitos de autor</string>
|
||||
<string name="other">Outro</string>
|
||||
<string name="privacy">Privacidade</string>
|
||||
<string name="settings">Definições</string>
|
||||
<string name="fav_add">Guardar como favorito</string>
|
||||
<string name="fav_remove">Remover dos favoritos</string>
|
||||
<string name="pref_navigate_use_maps">Navegar agora</string>
|
||||
<string name="pref_navigate_use_maps_on">O botão de navegação inicia a navegação com o Google Maps</string>
|
||||
<string name="pref_navigate_use_maps_off">O botão de navegação abre a app dos mapas com a localização do carregador</string>
|
||||
<string name="coordinates">Coordenadas</string>
|
||||
<string name="share">Partilhar</string>
|
||||
<string name="filter_free">Apenas carregadores gratuitos</string>
|
||||
<string name="filter_min_power">Potência minima</string>
|
||||
<string name="filter_free_parking">Apenas carregadores com parque gratuito</string>
|
||||
<string name="filter_min_connectors">Número mínimo de conectores</string>
|
||||
<string name="filter_connectors">Conectores</string>
|
||||
<string name="plug_type_1">Tipo 1</string>
|
||||
<string name="plug_type_2">Tipo 2</string>
|
||||
<string name="plug_type_3">Tipo 3A</string>
|
||||
<string name="plug_ccs">CCS</string>
|
||||
<string name="plug_schuko">Schuko</string>
|
||||
<string name="plug_chademo">CHAdeMO</string>
|
||||
<string name="plug_cee_blau">CEE Azul</string>
|
||||
<string name="plug_cee_rot">CEE Vermelho</string>
|
||||
<string name="plug_roadster_hpc">Tesla Roadster (2008) HPC</string>
|
||||
<string name="plug_supercharger">Supercarregador Tesla</string>
|
||||
<string name="donation_failed">Algo correu mal 😕</string>
|
||||
<string name="map_type_satellite">Satélite</string>
|
||||
<string name="map_type_terrain">Terreno</string>
|
||||
<string name="map_type">Tipo de mapa</string>
|
||||
<string name="map_details">Detalhes do mapa</string>
|
||||
<string name="map_type_normal">Padrão</string>
|
||||
<string name="category_swimming_pool">Piscina</string>
|
||||
<string name="category_supermarket">Supermercado</string>
|
||||
<string name="category_petrol_station">Posto de combustível</string>
|
||||
<string name="category_parking_underground">Parque de estacionamento subterrâneo</string>
|
||||
<string name="category_zoo">Zoo</string>
|
||||
<string name="category_caravan_site">Caravanas</string>
|
||||
<string name="menu_apply">Aplicar filtros</string>
|
||||
<string name="menu_save_profile">Guardar como perfil</string>
|
||||
<string name="no_filters">Sem filtros</string>
|
||||
<string name="welcome_1">Encontre carregadores elétricos perto de si</string>
|
||||
<string name="close">Fechar</string>
|
||||
<string name="edit_filter_profile">Editar “%s”</string>
|
||||
<string name="pref_chargeprice_currency_hrk">Cuna croata (HRK)</string>
|
||||
<string name="pref_chargeprice_currency_huf">Florim húngaro (HUF)</string>
|
||||
<string name="pref_chargeprice_currency_isk">Coroa islandesa (ISK)</string>
|
||||
<string name="pref_chargeprice_currency_nok">Coroa norueguesa (NOK)</string>
|
||||
<string name="pref_chargeprice_currency_pln">Złoty polaco (PLN)</string>
|
||||
<string name="pref_chargeprice_currency_sek">Coroa sueca (SEK)</string>
|
||||
<string name="pref_chargeprice_currency_usd">Dólar americano (USD)</string>
|
||||
<string name="pref_provider_google_maps">Google Maps</string>
|
||||
<string name="pref_provider_osm_mapbox">OpenStreetMap (Mapbox)</string>
|
||||
<string name="about_contributors">Contribuidores</string>
|
||||
<string name="pref_chargeprice_allow_unbalanced_load">Permitir carga não balanceada</string>
|
||||
<string name="pref_chargeprice_allow_unbalanced_load_summary">Permitir carregamento CA/AC monofásico (1 fase) com mais de 4.5 kW</string>
|
||||
</resources>
|
||||
302
app/src/main/res/values-ro/strings.xml
Normal file
302
app/src/main/res/values-ro/strings.xml
Normal file
@@ -0,0 +1,302 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">EVMap</string>
|
||||
<string name="title_activity_maps">EVMap</string>
|
||||
<string name="connectors">Conectori</string>
|
||||
<string name="no_maps_app_found">Instalati o aplicatie de navigatie</string>
|
||||
<string name="no_browser_app_found">Instalati un browser web</string>
|
||||
<string name="address">Adresa</string>
|
||||
<string name="operator">Operator</string>
|
||||
<string name="network">Retea</string>
|
||||
<string name="hours">Program</string>
|
||||
<string name="open_247"><![CDATA[<b>Deschis nonstop</b>]]></string>
|
||||
<string name="closed"><![CDATA[<b>Inchis</b>]]></string>
|
||||
<string name="open_closesat"><![CDATA[<b>Deschis</b> · Inchide la %s]]></string>
|
||||
<string name="closed_opensat"><![CDATA[<b>Inchis</b> · Deschide la %s]]></string>
|
||||
<string name="closed_unfmt">Inchis</string>
|
||||
<string name="holiday">Sarbatoare</string>
|
||||
<string name="cost">Cost</string>
|
||||
<string name="cost_detail"><![CDATA[<b>Incarcare:</b> %1$s · <b>Parcare:</b> %2$s]]></string>
|
||||
<string name="cost_detail_charging"><![CDATA[<b>%s incarcare</b>]]></string>
|
||||
<string name="cost_detail_parking"><![CDATA[<b>%s parcare</b>]]></string>
|
||||
<string name="charging_free">Gratuit</string>
|
||||
<string name="charging_paid">Cu plata</string>
|
||||
<string name="parking_free">Gratuit</string>
|
||||
<string name="parking_paid">Cu plata</string>
|
||||
<string name="amenities">Facilitati</string>
|
||||
<string name="general_info">Informatii generale</string>
|
||||
<string name="realtime_data_unavailable">Stare in tip real indisponibila</string>
|
||||
<string name="realtime_data_loading">Verificare stare in timp real…</string>
|
||||
<string name="realtime_data_source">Sursa verificare in timp real (beta): %s</string>
|
||||
<string name="source">Sursa: %s</string>
|
||||
<string name="search">Cautare</string>
|
||||
<string name="menu_map">Harta</string>
|
||||
<string name="menu_favs">Favorite</string>
|
||||
<string name="menu_filter">Fitru</string>
|
||||
<string name="not_implemented">indisponibil momentan</string>
|
||||
<string name="about">Despre </string>
|
||||
<string name="version">Versiune</string>
|
||||
<string name="github_link_title">Cod sursa</string>
|
||||
<string name="oss_licenses">Licente</string>
|
||||
<string name="settings">Setari</string>
|
||||
<string name="settings_ui">Interfata</string>
|
||||
<string name="settings_map">Harta</string>
|
||||
<string name="copyright">Copyright</string>
|
||||
<string name="copyright_summary">©2020–2023 Johan von Forstner</string>
|
||||
<string name="other">Altele</string>
|
||||
<string name="privacy">Confidentialitate</string>
|
||||
<string name="fav_add">Salveaza ca favorit</string>
|
||||
<string name="fav_remove">Sterge din favorite</string>
|
||||
<string name="pref_navigate_use_maps">Indicatii navigare</string>
|
||||
<string name="pref_navigate_use_maps_on">Butonul de navigare porneste cu Google Maps</string>
|
||||
<string name="pref_navigate_use_maps_off">Butonul de navigare deschide aplicatia de harti cu locatia statiei</string>
|
||||
<string name="coordinates">Coordonate</string>
|
||||
<string name="share">Distribuie</string>
|
||||
<string name="filter_free">Doar statii gratuite</string>
|
||||
<string name="filter_min_power">Putere minima</string>
|
||||
<string name="filter_free_parking">Doar statii cu parcare gratuita</string>
|
||||
<string name="filter_min_connectors">Numar minim de conectori</string>
|
||||
<string name="filter_connectors">Conectori</string>
|
||||
<string name="plug_type_1">Type 1</string>
|
||||
<string name="plug_type_2">Type 2</string>
|
||||
<string name="plug_type_3">Type 3A</string>
|
||||
<string name="plug_ccs">CCS</string>
|
||||
<string name="plug_schuko">Schuko</string>
|
||||
<string name="plug_chademo">CHAdeMO</string>
|
||||
<string name="plug_supercharger">Tesla Supercharger</string>
|
||||
<string name="plug_cee_blau">CEE Blue</string>
|
||||
<string name="plug_cee_rot">CEE Red</string>
|
||||
<string name="plug_roadster_hpc">Tesla Roadster (2008) HPC</string>
|
||||
<string name="all">toate</string>
|
||||
<string name="none">niciunul</string>
|
||||
<string name="show_more">mai mult…</string>
|
||||
<string name="show_less">mai putin…</string>
|
||||
<string name="favorites_empty_state">Statiile salvate apar aici</string>
|
||||
<string name="donate">Doneaza</string>
|
||||
<string name="donation_successful">Multumesc ❤️</string>
|
||||
<string name="donation_failed">A aparut o eroare 😕</string>
|
||||
<string name="map_type_normal">Implicit</string>
|
||||
<string name="map_type_satellite">Satelit</string>
|
||||
<string name="map_type_terrain">Teren</string>
|
||||
<string name="map_type">Tip harta</string>
|
||||
<string name="map_details">Detalii harta</string>
|
||||
<string name="map_traffic">Trafic</string>
|
||||
<string name="faq">Intrebari frecvente</string>
|
||||
<string name="menu_filters_active">Filtre active</string>
|
||||
<string name="filters_activated">Filtre activate</string>
|
||||
<string name="filters_deactivated">Filtre dezactivate</string>
|
||||
<string name="menu_edit_filters">Modificare filtre</string>
|
||||
<string name="menu_manage_filter_profiles">Modifica profile filtre</string>
|
||||
<string name="go_to_chargeprice">Compara preturi</string>
|
||||
<string name="fault_report">Raport defectiune</string>
|
||||
<string name="fault_report_date">raport defectiune (ultima actualizare: %s)</string>
|
||||
<string name="filter_networks">Retele</string>
|
||||
<string name="filter_operators">Operatori</string>
|
||||
<string name="filter_chargecards">Metode de plata</string>
|
||||
<string name="all_selected">Selectate toate</string>
|
||||
<string name="number_selected">%d selectate</string>
|
||||
<string name="edit">modifica</string>
|
||||
<string name="cancel">Anulare</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="pref_language">Limba aplicatie</string>
|
||||
<string name="pref_darkmode">Mod intunecat</string>
|
||||
<string name="connection_error">Eroare conexiune</string>
|
||||
<string name="location_error">Locatia nu a putut fi detectata. Verificati setarile</string>
|
||||
<string name="retry">Reincearca</string>
|
||||
<string name="filter_open_247">Disponibile nonstop</string>
|
||||
<string name="filter_barrierfree">Disponibile fara inregistrare</string>
|
||||
<string name="filter_exclude_faults">Exclude statiile raportate defecte</string>
|
||||
<string name="charge_cards">Metode de plata</string>
|
||||
<string name="and_n_others">si %d altele</string>
|
||||
<string name="pref_map_provider">Furnizor harta</string>
|
||||
<string name="twitter">Twitter</string>
|
||||
<string name="goingelectric_forum">Forum conversatii pe GoingElectric.de</string>
|
||||
<string name="contact">Contact</string>
|
||||
<string name="menu_report_new_charger">Statie noua</string>
|
||||
<string name="edit_at_datasource">modificat la %s</string>
|
||||
<string name="categories">Categorii</string>
|
||||
<string name="category_car_dealership">Reprezentanta auto</string>
|
||||
<string name="category_service_on_motorway">Zona servicii (autostrada)</string>
|
||||
<string name="category_service_off_motorway">Zona servicii (in afara autostrazii)</string>
|
||||
<string name="category_railway_station">Statie tren</string>
|
||||
<string name="category_public_authorities">Autoritati locale</string>
|
||||
<string name="category_camping">Camping</string>
|
||||
<string name="category_shopping_mall">Mall</string>
|
||||
<string name="category_holiday_home">Casa de vacanta</string>
|
||||
<string name="category_airport">Aerport</string>
|
||||
<string name="category_amusement_park">Parc de distractii</string>
|
||||
<string name="category_hotel">Hotel</string>
|
||||
<string name="category_cinema">Cinema</string>
|
||||
<string name="category_church">Biserica</string>
|
||||
<string name="category_hospital">Spital</string>
|
||||
<string name="category_museum">Museu</string>
|
||||
<string name="category_parking_multi">Parcare etajata</string>
|
||||
<string name="category_parking">Parcare</string>
|
||||
<string name="category_private_charger">Statie de incarcare privata</string>
|
||||
<string name="category_rest_area">Zona de odihna</string>
|
||||
<string name="category_restaurant">Restaurant</string>
|
||||
<string name="category_swimming_pool">Piscina</string>
|
||||
<string name="category_supermarket">Supermarket</string>
|
||||
<string name="category_petrol_station">Benzinarie</string>
|
||||
<string name="category_parking_underground">Parcare subterana</string>
|
||||
<string name="category_zoo">Gradina Zoo</string>
|
||||
<string name="category_caravan_site">Camping rulote</string>
|
||||
<string name="menu_apply">Aplica filtre</string>
|
||||
<string name="menu_save_profile">Salveaza profil</string>
|
||||
<string name="menu_reset">Sterge setari filtre</string>
|
||||
<string name="no_filters">Fara filtre</string>
|
||||
<string name="filter_custom">Filtre personalizate</string>
|
||||
<string name="filter_favorites">Favorite</string>
|
||||
<string name="reorder">reordonare</string>
|
||||
<string name="delete">Sterge</string>
|
||||
<string name="save_as_profile">Salveaza ca profil</string>
|
||||
<string name="save_profile_enter_name">Completati nume profil:</string>
|
||||
<string name="filterprofiles_empty_state">Nu sunt profile salvate</string>
|
||||
<string name="welcome_to_evmap">Bine ati venit la EVMap</string>
|
||||
<string name="welcome_1">Cauta statii de incarcare in apropiere</string>
|
||||
<string name="welcome_2_title">Esti mereu la curent</string>
|
||||
<string name="welcome_2">Fiecare culoare a statiei corespunde puterii maxime de incarcare</string>
|
||||
<string name="welcome_2_detail">Puteti gasi si in sectiunea “Despre” → “Intrebari frecvente”</string>
|
||||
<string name="donation_dialog_title">Multumim ca utilizati EVMap</string>
|
||||
<string name="donation_dialog_detail">EVMap este libera si gratuita. Contributiile pe GitHub sunt apreciate. Pentru a acoperi costurile pentru acces la date, va rugam sa donati orice suma pentru dezvoltator.</string>
|
||||
<string name="chargeprice_donation_dialog_title">Stii sa cauti ofertele cele mai bune!</string>
|
||||
<string name="chargeprice_donation_dialog_detail">Stii sa folosesti optiunea de comparare preturi. Puteti ajuta pentru a acoperi costurile pentru accesul la aceste date donand pentru EVMap.</string>
|
||||
<string name="deleted_filterprofile">“%s” a fost sters</string>
|
||||
<string name="undo">Anuleaza</string>
|
||||
<string name="rename">Redenumeste</string>
|
||||
<string name="charging_barrierfree">Utilizabile fara inregistrare</string>
|
||||
<plurals name="charge_cards_compatible_num">
|
||||
<item quantity="one">%d metoda de plata compatibila</item>
|
||||
<item quantity="other">%d metode de plata compatibile</item>
|
||||
<item quantity="few">%d metode de plata compatibile</item>
|
||||
</plurals>
|
||||
<string name="navigate">Navigare</string>
|
||||
<string name="verified">verificat</string>
|
||||
<string name="verified_desc">Statia de incarcare a fost confirmata functionala de un mebru din comunitatea %s</string>
|
||||
<string name="charge_price_format">%2$s%1$.2f</string>
|
||||
<string name="charge_price_average_format">⌀ %2$s%1$.2f/kWh</string>
|
||||
<string name="charge_price_kwh_format">%2$s%1$.2f/kWh</string>
|
||||
<string name="chargeprice_select_connector">Alege conector</string>
|
||||
<string name="chargeprice_provider_customer_tariff">Doar pentru clienti</string>
|
||||
<string name="edit_on_goingelectric_info">Va rugam autentificati-va la GoingElectric.de daca pagina e goala</string>
|
||||
<string name="percent_format">%.0f%%</string>
|
||||
<string name="chargeprice_session_fee">taxa sesiune</string>
|
||||
<string name="chargeprice_per_kwh">pe kWh</string>
|
||||
<string name="chargeprice_per_minute">pe min</string>
|
||||
<string name="chargeprice_blocking_fee">Taxa blocare >%s</string>
|
||||
<string name="chargeprice_no_tariffs_found">Fara pret pentru aceasta statie in Chargeprice.app</string>
|
||||
<string name="powered_by_chargeprice">oferit de Chargeprice</string>
|
||||
<string name="chargeprice_base_fee">Pret de baza: %2$s%1$.2f/luna</string>
|
||||
<string name="chargeprice_min_spend">Suma minima: %2$s%1$.2f/luna</string>
|
||||
<string name="settings_chargeprice">Comparatie preturi</string>
|
||||
<string name="pref_my_vehicle">Masinile mele</string>
|
||||
<string name="pref_chargeprice_no_base_fee">Exclude abonamente cu plata lunara</string>
|
||||
<string name="pref_chargeprice_show_provider_customer_tariffs">Include abonament clienti</string>
|
||||
<string name="chargeprice_select_car_first">Configurati modelul masinii in setari</string>
|
||||
<string name="chargeprice_battery_range">Incarcare de la %1$.0f%% la %2$.0f%%</string>
|
||||
<string name="chargeprice_battery_range_from">Incarcare de la</string>
|
||||
<string name="chargeprice_battery_range_to">la</string>
|
||||
<string name="chargeprice_stats">(%1$.0f kWh, aprox. %2$s, ⌀ %3$.0f kW)</string>
|
||||
<string name="chargeprice_vehicle">Masina</string>
|
||||
<string name="chargeprice_price_not_available">Pret indisponibil</string>
|
||||
<string name="pref_chargeprice_show_provider_customer_tariffs_summary">Furnizorii de utilitati ofera uneori abonamente speciale pentru clientii lor</string>
|
||||
<string name="close">Inchidere</string>
|
||||
<string name="chargeprice_title">Preturi</string>
|
||||
<string name="chargeprice_connection_error">Preturi nu au putut fi incarcate</string>
|
||||
<string name="chargeprice_no_compatible_connectors">Nu sunt conectori compatibili la aceasta statie</string>
|
||||
<string name="pref_chargeprice_currency">Moneda</string>
|
||||
<string name="pref_my_tariffs">Abonamentele mele</string>
|
||||
<plurals name="pref_my_tariffs_summary">
|
||||
<item quantity="one">(va fi evidentiat in comparatia preturilor)</item>
|
||||
<item quantity="other">(vor fi evidentiate in comparatia preturilor)</item>
|
||||
<item quantity="few">(vor fi evidentiate in comparatia preturilor)</item>
|
||||
</plurals>
|
||||
<string name="chargeprice_all_tariffs_selected">toate abonamentele selectate</string>
|
||||
<string name="license">Licenta</string>
|
||||
<string name="settings_charger_data">Statii de incarcare</string>
|
||||
<string name="pref_data_source">Sursa date</string>
|
||||
<plurals name="chargeprice_some_tariffs_selected">
|
||||
<item quantity="one">%d abonament selectat</item>
|
||||
<item quantity="other">%d abonamente selectate</item>
|
||||
<item quantity="few">%d abonamente selectate</item>
|
||||
</plurals>
|
||||
<string name="unknown_operator">Operator necunoscut</string>
|
||||
<string name="data_sources_description">Alegeti o sursa pentru statiile de incarcare. Puteti modifica ulterior in setarile aplicatiei.</string>
|
||||
<string name="data_source_goingelectric">GoingElectric.de</string>
|
||||
<string name="data_source_openchargemap">Open Charge Map</string>
|
||||
<string name="data_source_goingelectric_desc">Recomandat in tarile vorbitaore de limba germana. Descrieri in limba germana. Actualizat de comunitate.</string>
|
||||
<string name="data_source_openchargemap_desc"><![CDATA[International, calitate variata. Descrieri in engleza sau in limba locala. Actualizat de comunitate si de autoritati in unele tari (ex. America de Nord, UK, Franta, Norvegia).]]></string>
|
||||
<string name="next">urmatorul</string>
|
||||
<string name="get_started">Incepe</string>
|
||||
<string name="got_it">Am inteles</string>
|
||||
<string name="lets_go">Sa incepem</string>
|
||||
<string name="crash_report_text">Eroare EVMap. Trimiteti raportul de eroare la dezvoltator.</string>
|
||||
<string name="crash_report_comment_prompt">Puteti adauga un comentariu aici:</string>
|
||||
<string name="powered_by_mapbox">furnizat de Mapbox</string>
|
||||
<string name="pref_search_provider">Furnizor cautare</string>
|
||||
<string name="pref_search_provider_info"><![CDATA[Datele de cautare sunt costisitoare, in special de la Google Maps. Va rugam sa luati in considerare o donatie in sectiunea “Despre” → “Doneaza”.]]></string>
|
||||
<string name="github_sponsors">Sponsori GitHub</string>
|
||||
<string name="donate_desc">Sprijina dezvoltarea EVMap\'s cu o donatie</string>
|
||||
<string name="github_sponsors_desc">Sprijina EVMap pe GitHub</string>
|
||||
<string name="unnamed_filter_profile">Profile filtre fara nume</string>
|
||||
<string name="privacy_link">https://evmap.vonforst.net/en/privacy.html</string>
|
||||
<string name="faq_link">https://evmap.vonforst.net/en/faq.html</string>
|
||||
<string name="chargeprice_faq_link">https://evmap.vonforst.net/en/chargeprice_faq.html</string>
|
||||
<string name="required">obligatoriu</string>
|
||||
<string name="edit_filter_profile">Modifica “%s”</string>
|
||||
<string name="pref_search_delete_recent">Sterge rezultate cautare recenta</string>
|
||||
<string name="deleted_recent_search_results">Rezultate cautare recenta au fost sterse</string>
|
||||
<string name="settings_data_sources">Surse date</string>
|
||||
<string name="help">Ajutor</string>
|
||||
<string name="settings_android_auto">Android Auto</string>
|
||||
<string name="pref_chargeprice_allow_unbalanced_load">Include incarcare nebalansata</string>
|
||||
<string name="pref_chargeprice_allow_unbalanced_load_summary">Include incarcare monofazata AC cu mai mult de 4.5 kW</string>
|
||||
<string name="pref_map_rotate_gestures_enabled">Rotire harta</string>
|
||||
<string name="pref_map_rotate_gestures_on">Foloseste doua degete pentru a roti harta</string>
|
||||
<string name="pref_map_rotate_gestures_off">Rotire dezactivata (nordul mereu sus)</string>
|
||||
<string name="refresh_live_data">actualizare stare in timp real</string>
|
||||
<string name="autocomplete_connection_error">Sugestiile nu au putut fi incarcate</string>
|
||||
<string name="pref_language_device_default">Implicit dispozitiv</string>
|
||||
<string name="pref_darkmode_device_default">Implicit dispozitiv</string>
|
||||
<string name="pref_darkmode_always_on">permanent</string>
|
||||
<string name="pref_darkmode_always_off">dezactivat</string>
|
||||
<string name="pref_chargeprice_currency_chf">Franci elvetieni (CHF)</string>
|
||||
<string name="pref_chargeprice_currency_czk">Coroane cehe (CZK)</string>
|
||||
<string name="pref_chargeprice_currency_dkk">Coroane daneze (DKK)</string>
|
||||
<string name="pref_chargeprice_currency_eur">Euro (EUR)</string>
|
||||
<string name="pref_chargeprice_currency_gbp">Lire sterline (GBP)</string>
|
||||
<string name="pref_chargeprice_currency_hrk">Croatian kuna (HRK)</string>
|
||||
<string name="pref_chargeprice_currency_huf">Forinti maghiari (HUF)</string>
|
||||
<string name="pref_chargeprice_currency_isk">Coroane islandeze (ISK)</string>
|
||||
<string name="pref_chargeprice_currency_nok">Coroane norvegiene (NOK)</string>
|
||||
<string name="pref_chargeprice_currency_pln">Zloti polonezi (PLN)</string>
|
||||
<string name="pref_chargeprice_currency_sek">Coroane suedeze (SEK)</string>
|
||||
<string name="pref_chargeprice_currency_usd">Dolari americani (USD)</string>
|
||||
<string name="pref_provider_google_maps">Google Maps</string>
|
||||
<string name="pref_provider_osm_mapbox">OpenStreetMap (Mapbox)</string>
|
||||
<string name="about_contributors">Contribuitori</string>
|
||||
<string name="about_contributors_text">Multumiri contribuitorilor pentru cod si traduceri pentru EVMap:</string>
|
||||
<string name="utilization_prediction">Estimare utilizare</string>
|
||||
<string name="prediction_help">Estimarea se bazeaza pe diversi factori cum ar fi ziua saptamanii, ora, utilizarile anterioare, astfel incat sa se evite supra aglomerarea. Fara garantie.</string>
|
||||
<string name="prediction_time_colon">%s:</string>
|
||||
<plurals name="prediction_number_available">
|
||||
<item quantity="one">%1$d/%2$d disponibil</item>
|
||||
<item quantity="other">%1$d/%2$d disponibile</item>
|
||||
<item quantity="few">%1$d/%2$d disponibile</item>
|
||||
</plurals>
|
||||
<string name="pref_prediction_enabled">Arata estimare utilizare</string>
|
||||
<string name="pref_prediction_enabled_summary">pentru statiile de incarcare suportate\n(momentan doar DC in Germania)</string>
|
||||
<string name="prediction_only">(doar %s)</string>
|
||||
<string name="prediction_dc_plugs_only">prize DC</string>
|
||||
<string name="data_source_switched_to">Sursa date schimbat la %s</string>
|
||||
<string name="pref_applink_associate">Linkuri suportate</string>
|
||||
<string name="pref_applink_associate_summary">de la goingelectric.de si openchargemap.org</string>
|
||||
<string name="chargeprice_header_my_tariffs">Abonamentele mele</string>
|
||||
<string name="chargeprice_header_other_tariffs">Alte abonamente</string>
|
||||
<string name="developer_mode_enabled">Activat mod dezvoltator</string>
|
||||
<string name="developer_options">Optiuni dezvoltator</string>
|
||||
<string name="disable_developer_mode">Dezactivare mod dezvoltator</string>
|
||||
<string name="developer_mode_disabled">Mod dezvoltator dezactivat</string>
|
||||
<string name="gps">GPS</string>
|
||||
<string name="compass">Busola</string>
|
||||
</resources>
|
||||
@@ -7,6 +7,8 @@
|
||||
<item>@string/pref_language_fr</item>
|
||||
<item>@string/pref_language_nb_rNO</item>
|
||||
<item>@string/pref_language_nl</item>
|
||||
<item>@string/pref_language_pt</item>
|
||||
<item>@string/pref_language_ro</item>
|
||||
</string-array>
|
||||
<string-array name="pref_language_values" translatable="false">
|
||||
<item>default</item>
|
||||
@@ -15,6 +17,8 @@
|
||||
<item>fr</item>
|
||||
<item>nb-NO</item>
|
||||
<item>nl</item>
|
||||
<item>pt</item>
|
||||
<item>ro</item>
|
||||
</string-array>
|
||||
<string-array name="pref_darkmode_names">
|
||||
<item>@string/pref_darkmode_device_default</item>
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
<string name="pref_language_fr">Français</string>
|
||||
<string name="pref_language_nb_rNO">Norsk Bokmål</string>
|
||||
<string name="pref_language_nl">Nederlands</string>
|
||||
<string name="pref_language_pt">Português</string>
|
||||
<string name="pref_language_ro">Romana</string>
|
||||
<string name="about_contributors_list">
|
||||
Danilo Bargen\n
|
||||
Altonss\n
|
||||
@@ -21,8 +23,10 @@
|
||||
Maximilian Goldschmidt\n
|
||||
Wim Lamotte\n
|
||||
Licaon_Kter\n
|
||||
Celso Azevedo\n
|
||||
pt2121\n
|
||||
nautilusx
|
||||
nautilusx\n
|
||||
Bobby Galati
|
||||
</string>
|
||||
<string name="hide_on_scroll_fab_behavior">net.vonforst.evmap.ui.HideOnScrollFabBehavior</string>
|
||||
<string name="paypal_link" translatable="false">https://paypal.me/johan98</string>
|
||||
|
||||
@@ -295,4 +295,5 @@
|
||||
<string name="developer_mode_disabled">Developer mode disabled</string>
|
||||
<string name="gps">GPS</string>
|
||||
<string name="compass">Compass</string>
|
||||
<string name="charger_website">Website</string>
|
||||
</resources>
|
||||
7
fastlane/metadata/android/de-DE/changelogs/166.txt
Normal file
7
fastlane/metadata/android/de-DE/changelogs/166.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
Verbesserungen:
|
||||
- Fahrzeugauswahl für Preisvergleich: Details der Fahrzeuge hinzugefügt
|
||||
- Übersetzungen aktualisiert
|
||||
|
||||
Fehler behoben:
|
||||
- Abstürze behoben
|
||||
- Open Charge Map: Laden von Bildern verbessert
|
||||
7
fastlane/metadata/android/de-DE/changelogs/168.txt
Normal file
7
fastlane/metadata/android/de-DE/changelogs/168.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
Verbesserungen:
|
||||
- Neue Übersetzungen: Portugiesisch, Rumänisch
|
||||
- Open Charge Map: Links zu Betreiber hinzugefügt
|
||||
|
||||
Fehler behoben:
|
||||
- Open Charge Map: Gelöschte Ladestationen nicht anzeigen
|
||||
- Open Charge Map: Filter "Störung ausschließen" korrigiert
|
||||
7
fastlane/metadata/android/en-US/changelogs/166.txt
Normal file
7
fastlane/metadata/android/en-US/changelogs/166.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
Improvements:
|
||||
- Vehicle selection for price comparison: Added vehicle details
|
||||
- Updated translations
|
||||
|
||||
Bugfixes:
|
||||
- Fixed crashes
|
||||
- Open Charge Map: Improved loading of images
|
||||
7
fastlane/metadata/android/en-US/changelogs/168.txt
Normal file
7
fastlane/metadata/android/en-US/changelogs/168.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
Improvements:
|
||||
- New translations: Portuguese, Romanian
|
||||
- Open Charge Map: Added links to operators
|
||||
|
||||
Bugfixes:
|
||||
- Open Charge Map: Do not show deleted chargers
|
||||
- Open Charge Map: Fixed filter "Exclude faults"
|
||||
18
fastlane/metadata/android/pt/full_description.txt
Normal file
18
fastlane/metadata/android/pt/full_description.txt
Normal file
@@ -0,0 +1,18 @@
|
||||
Com o EVMap pode encontrar carregadores para veículos elétricos fácilmente usando o seu dispositivo. Esta app usa a informação de provedores como o Open Charge Map e GoingElectric.de, contendo informações sobre locais de carregamento em todo o mundo. Em muitos pontos de carregamento na Europa pode também ver, em tempo real, se o carregador está livre.
|
||||
|
||||
Destaques:
|
||||
- Design material
|
||||
- Mostra todas as estações de carregamento dos diretórios GoingElectric.de e Open Charge Map mantidos pela comunidade
|
||||
- Informação de disponibilidade em tempo real (apenas na Europa)
|
||||
- Comparação de preços integrada usando o Chargeprice.app (apenas na Europa)
|
||||
- Informação do mapa via OpenStreetMap (Mapbox)
|
||||
- Pesquise lugares
|
||||
- Opções de filtragem avançadas, incluindo filtros de pesquisa que podem ser guardados
|
||||
- Lista de favoritos, também com informações de disponibilidade
|
||||
- Sem publicidade e de código aberto
|
||||
|
||||
O EVMap é um projeto de código aberto e pode ser encontrado em https://github.com/ev-map/EVMap.
|
||||
|
||||
Esta aplicação não é um produto oficial do GoingElectric.de ou Open Charge Map, apenas usam as APIs públicas de cada serviço.
|
||||
|
||||
Uma lista e explicação das permissões necessárias está disponível aqui: https://evmap.vonforst.net/en/permissions.html
|
||||
1
fastlane/metadata/android/pt/short_description.txt
Normal file
1
fastlane/metadata/android/pt/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Encontre estações de carregamento para veículos elétricos
|
||||
1
fastlane/metadata/android/pt/title.txt
Normal file
1
fastlane/metadata/android/pt/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
EVMap - Carregadores Elétricos
|
||||
Reference in New Issue
Block a user