mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-18 02:00:58 +00:00
Merge branch 'master' into bug4032
This commit is contained in:
commit
62d95cfa18
60 files changed
+856
-203
No files matched your search
+6
-5
@@ -24,7 +24,8 @@ LegSailingDomainRetrieverChain=Tramos
|
||||
GPSFixSailingDomainRetrieverChain=Puntos de GPS
|
||||
BravoFixSailingDomainRetrieverChain=Puntos de Bravo
|
||||
BravoFixTrackSailingDomainRetrieverChain=Seguimientos Bravo
|
||||
FoilingSegmentsSailingDomainRetrieverChain=Segmentos laminados
|
||||
FoilingSegmentsSailingDomainRetrieverChain=Apéndices de foil
|
||||
FoilingSegmentName=Nombre de apéndice de foil
|
||||
WindFixSailingDomainRetrieverChain=Puntos de viento
|
||||
MarkPassingSailingDomainRetrieverChain=Superaciones de marca
|
||||
RaceResultSailingDomainRetrieverChain=Resultados de la carrera
|
||||
@@ -100,16 +101,16 @@ windSpeedKnots=Velocidad del viento real (nudos)
|
||||
speedInKnots=Velocidad (nudos)
|
||||
bearing=Dirección (°T)
|
||||
WindTrack=Seguimiento del viento
|
||||
timeSpentFoiling=Tiempo empleado en laminado
|
||||
timeSpentFoiling=Tiempo empleado con foils
|
||||
yaw=Guiñada
|
||||
pitch=Paso
|
||||
heel=Escora
|
||||
rideHeight=Altura de circulación
|
||||
rideHeightPort=Altura de circulación del casco a babor
|
||||
rideHeightStarboard=Altura de circulación del casco a estribor
|
||||
IsFoiling=Se está laminando
|
||||
FoilingDuration=Duración del laminado
|
||||
FoilingDistance=Distancia laminada
|
||||
IsFoiling=Con foils
|
||||
FoilingDuration=Duración con foils
|
||||
FoilingDistance=Distancia con foils
|
||||
TakeoffSpeedInKnotsInKnots=Velocidad de despegue en nudos
|
||||
LandingSpeedInKnots=Velocidad de aterrizaje en nudos
|
||||
AbsoluteTrueWindAngleAtTakeoff=Ángulo absoluto del viento real (TWA) en despegue
|
||||
|
||||
+1
@@ -25,6 +25,7 @@ GPSFixSailingDomainRetrieverChain=Positions GPS
|
||||
BravoFixSailingDomainRetrieverChain=Positions Bravo
|
||||
BravoFixTrackSailingDomainRetrieverChain=Enregistrements Bravo
|
||||
FoilingSegmentsSailingDomainRetrieverChain=Tronçons en planing
|
||||
FoilingSegmentName=Nom du tronçon en planing
|
||||
WindFixSailingDomainRetrieverChain=Points vent
|
||||
MarkPassingSailingDomainRetrieverChain=Passages des marques
|
||||
RaceResultSailingDomainRetrieverChain=Résultats de course
|
||||
|
||||
+1
@@ -25,6 +25,7 @@ GPSFixSailingDomainRetrieverChain=GPS フィックス
|
||||
BravoFixSailingDomainRetrieverChain=Bravo フィックス
|
||||
BravoFixTrackSailingDomainRetrieverChain=Bravo トラック
|
||||
FoilingSegmentsSailingDomainRetrieverChain=フォイリングしたセグメント
|
||||
FoilingSegmentName=フォイリングしたセグメント名
|
||||
WindFixSailingDomainRetrieverChain=風フィックス
|
||||
MarkPassingSailingDomainRetrieverChain=マーク通過
|
||||
RaceResultSailingDomainRetrieverChain=レース結果
|
||||
|
||||
+1
@@ -25,6 +25,7 @@ GPSFixSailingDomainRetrieverChain=Pontos fixos de GPS
|
||||
BravoFixSailingDomainRetrieverChain=Pontos fixos Bravo
|
||||
BravoFixTrackSailingDomainRetrieverChain=Pistas Bravo
|
||||
FoilingSegmentsSailingDomainRetrieverChain=Segmentos com hidrofólio
|
||||
FoilingSegmentName=Nome do segmento com hidrofólio
|
||||
WindFixSailingDomainRetrieverChain=Pontos fixos de vento
|
||||
MarkPassingSailingDomainRetrieverChain=Passagens na marca
|
||||
RaceResultSailingDomainRetrieverChain=Resultados da corrida
|
||||
|
||||
+1
@@ -25,6 +25,7 @@ GPSFixSailingDomainRetrieverChain=Замеры GPS
|
||||
BravoFixSailingDomainRetrieverChain=Замеры Bravo
|
||||
BravoFixTrackSailingDomainRetrieverChain=Отслеживания Bravo
|
||||
FoilingSegmentsSailingDomainRetrieverChain=Сегменты в крыльевом режиме
|
||||
FoilingSegmentName=Имя сегмента в крыльевом режиме
|
||||
WindFixSailingDomainRetrieverChain=Замеры ветра
|
||||
MarkPassingSailingDomainRetrieverChain=Прохождения отметок
|
||||
RaceResultSailingDomainRetrieverChain=Результаты гонки
|
||||
|
||||
+1
@@ -25,6 +25,7 @@ GPSFixSailingDomainRetrieverChain=GPS 修复
|
||||
BravoFixSailingDomainRetrieverChain=Bravo 修复
|
||||
BravoFixTrackSailingDomainRetrieverChain=Bravo 跟踪
|
||||
FoilingSegmentsSailingDomainRetrieverChain=水翼腾空段
|
||||
FoilingSegmentName=水翼腾空段名称
|
||||
WindFixSailingDomainRetrieverChain=风力修复
|
||||
MarkPassingSailingDomainRetrieverChain=绕标
|
||||
RaceResultSailingDomainRetrieverChain=比赛轮次结果
|
||||
|
||||
+48
-21
@@ -1,8 +1,6 @@
|
||||
package com.sap.sailing.domain.common.sensordata;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
@@ -22,26 +20,51 @@ import com.sap.sailing.domain.common.tracking.DoubleVectorFix;
|
||||
* into the {@link DoubleVectorFix}.
|
||||
*/
|
||||
public enum BravoExtendedSensorDataMetadata implements ColumnMetadata {
|
||||
RIDE_HEIGHT_PORT_HULL("RideHeightPort"), //
|
||||
RIDE_HEIGHT_STBD_HULL("RideHeightStbd"), //
|
||||
HEEL("Heel"), //
|
||||
PITCH("PitchRate"),
|
||||
DB_RAKE_PORT("DaggerBoardRakeAnglePort"), //
|
||||
DB_RAKE_STBD("DaggerBoardRakeAngleStbd"), //
|
||||
RUDDER_RAKE_PORT("RudderRakeAnglePort"), //
|
||||
RUDDER_RAKE_STBD("RudderRakeAngleStbd"), //
|
||||
MAST_ROTATION("MastRotation");
|
||||
RIDE_HEIGHT_PORT_HULL("RideHeightPort", /* expectedInLogfile */ true), //
|
||||
RIDE_HEIGHT_STBD_HULL("RideHeightStbd", /* expectedInLogfile */ true), //
|
||||
HEEL("Heel", /* expectedInLogfile */ true), //
|
||||
PITCH("PitchRate", /* expectedInLogfile */ true), //
|
||||
DB_RAKE_PORT("DaggerBoardRakeAnglePort", /* expectedInLogfile */ true), //
|
||||
DB_RAKE_STBD("DaggerBoardRakeAngleStbd", /* expectedInLogfile */ true), //
|
||||
RUDDER_RAKE_PORT("RudderRakeAnglePort", /* expectedInLogfile */ true), //
|
||||
RUDDER_RAKE_STBD("RudderRakeAngleStbd", /* expectedInLogfile */ true), //
|
||||
MAST_ROTATION("MastRotation", /* expectedInLogfile */ true), //
|
||||
LEEWAY(null, /* expectedInLogfile */ false), //
|
||||
SET(null, /* expectedInLogfile */ false), //
|
||||
DRIFT(null, /* expectedInLogfile */ false), //
|
||||
DEPTH(null, /* expectedInLogfile */ false), //
|
||||
RUDDER(null, /* expectedInLogfile */ false), //
|
||||
FORESTAY_LOAD(null, /* expectedInLogfile */ false), //
|
||||
TACK_ANGLE(null, /* expectedInLogfile */ false), //
|
||||
RAKE_DEG(null, /* expectedInLogfile */ false), //
|
||||
DEFLECTOR_PERCENTAGE(null, /* expectedInLogfile */ false), //
|
||||
TARGET_HEEL(null, /* expectedInLogfile */ false), //
|
||||
DEFLECTOR_MILLIMETERS(null, /* expectedInLogfile */ false), //
|
||||
TARGET_BOATSPEED_P(null, /* expectedInLogfile */ false), //
|
||||
;
|
||||
|
||||
private final String columnName;
|
||||
|
||||
private BravoExtendedSensorDataMetadata(String columnName) {
|
||||
/**
|
||||
* Some values seem to only appear in the UDP stream but so far not in the log file. Therefore,
|
||||
* those columns shall not be part of the response to {@link #getColumnNamesToIndexInDoubleFix()},
|
||||
* indicated by this field being {@code false} for those attributes.
|
||||
*/
|
||||
private final boolean expectedInLogFile;
|
||||
|
||||
private BravoExtendedSensorDataMetadata(String columnName, boolean expectedInLogfile) {
|
||||
this.columnName = columnName;
|
||||
this.expectedInLogFile = expectedInLogfile;
|
||||
}
|
||||
|
||||
public String getColumnName() {
|
||||
return columnName;
|
||||
}
|
||||
|
||||
public boolean isExpectedInLogFile() {
|
||||
return expectedInLogFile;
|
||||
}
|
||||
|
||||
/**
|
||||
* The index in the {@link DoubleVectorFix} where this data item will be stored
|
||||
*/
|
||||
@@ -62,21 +85,25 @@ public enum BravoExtendedSensorDataMetadata implements ColumnMetadata {
|
||||
}
|
||||
|
||||
public static int getTrackColumnCount() {
|
||||
return BravoExtendedSensorDataMetadata.values().length;
|
||||
}
|
||||
|
||||
public static List<String> getTrackColumnNames() {
|
||||
ArrayList<String> colNames = new ArrayList<>(getTrackColumnCount());
|
||||
for (BravoExtendedSensorDataMetadata item : BravoExtendedSensorDataMetadata.values()) {
|
||||
colNames.add(item.getColumnName());
|
||||
int result = 0;
|
||||
for (final BravoExtendedSensorDataMetadata m : BravoExtendedSensorDataMetadata.values()) {
|
||||
if (m.isExpectedInLogFile()) {
|
||||
result++;
|
||||
}
|
||||
}
|
||||
return colNames;
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return namens of those columns with {@link #isExpectedInLogFile()} being {@code true}, mapped to their
|
||||
* {@link #getColumnIndex() column index}
|
||||
*/
|
||||
public static Map<String, Integer> getColumnNamesToIndexInDoubleFix() {
|
||||
final Map<String, Integer> columnNamesToIndexInDoubleFix = new HashMap<>();
|
||||
for (final BravoExtendedSensorDataMetadata column : BravoExtendedSensorDataMetadata.values()) {
|
||||
columnNamesToIndexInDoubleFix.put(column.getColumnName(), column.getColumnIndex());
|
||||
if (column.isExpectedInLogFile()) {
|
||||
columnNamesToIndexInDoubleFix.put(column.getColumnName(), column.getColumnIndex());
|
||||
}
|
||||
}
|
||||
return columnNamesToIndexInDoubleFix;
|
||||
}
|
||||
|
||||
-2
@@ -14,13 +14,11 @@ import java.util.Objects;
|
||||
* The current implementation only stores a subset of the information available during the import.
|
||||
*/
|
||||
public enum BravoSensorDataMetadata implements ColumnMetadata {
|
||||
|
||||
RIDE_HEIGHT_PORT_HULL("RideHeightPortHull"), //
|
||||
RIDE_HEIGHT_STBD_HULL("RideHeightStbdHull"), //
|
||||
HEEL("Heel"), //
|
||||
PITCH("ImuSensor_Pitch");
|
||||
|
||||
|
||||
private String columnName;
|
||||
|
||||
private BravoSensorDataMetadata(String columnName) {
|
||||
|
||||
+24
-4
@@ -16,8 +16,22 @@ import com.sap.sailing.domain.common.tracking.DoubleVectorFix;
|
||||
* The first columns need to be consistent with {@link BravoSensorDataMetadata}.
|
||||
*/
|
||||
public enum ExpeditionExtendedSensorDataMetadata {
|
||||
HEEL("Heel", BravoExtendedSensorDataMetadata.HEEL),
|
||||
TRIM("TRIM", BravoExtendedSensorDataMetadata.PITCH);
|
||||
HEEL("Heel", BravoExtendedSensorDataMetadata.HEEL), //
|
||||
TRIM("TRIM", BravoExtendedSensorDataMetadata.PITCH), //
|
||||
LEEWAY(null, BravoExtendedSensorDataMetadata.LEEWAY), //
|
||||
SET(null, BravoExtendedSensorDataMetadata.SET), //
|
||||
DRIFT(null, BravoExtendedSensorDataMetadata.DRIFT), //
|
||||
DEPTH(null, BravoExtendedSensorDataMetadata.DEPTH), //
|
||||
RUDDER(null, BravoExtendedSensorDataMetadata.RUDDER), //
|
||||
FORESTAY_LOAD(null, BravoExtendedSensorDataMetadata.FORESTAY_LOAD), //
|
||||
TACK_ANGLE(null, BravoExtendedSensorDataMetadata.TACK_ANGLE), //
|
||||
RAKE_DEG(null, BravoExtendedSensorDataMetadata.RAKE_DEG), //
|
||||
DEFLECTOR_PERCENTAGE(null, BravoExtendedSensorDataMetadata.DEFLECTOR_PERCENTAGE), //
|
||||
TARGET_HEEL(null, BravoExtendedSensorDataMetadata.TARGET_HEEL), //
|
||||
DEFLECTOR_MILLIMETERS(null, BravoExtendedSensorDataMetadata.DEFLECTOR_MILLIMETERS), //
|
||||
TARGET_BOATSPEED_P(null, BravoExtendedSensorDataMetadata.TARGET_BOATSPEED_P), //
|
||||
|
||||
;
|
||||
|
||||
private String columnName;
|
||||
|
||||
@@ -29,7 +43,7 @@ public enum ExpeditionExtendedSensorDataMetadata {
|
||||
* the ordinals of this enum's literals insignificant; the position is taken solely from
|
||||
* the Bravo metadata.
|
||||
*/
|
||||
private BravoExtendedSensorDataMetadata mappedToBravoField;
|
||||
private final BravoExtendedSensorDataMetadata mappedToBravoField;
|
||||
|
||||
private ExpeditionExtendedSensorDataMetadata(String columnName, BravoExtendedSensorDataMetadata mappedToBravoField) {
|
||||
this.columnName = columnName;
|
||||
@@ -47,6 +61,10 @@ public enum ExpeditionExtendedSensorDataMetadata {
|
||||
return mappedToBravoField.getColumnIndex();
|
||||
}
|
||||
|
||||
public boolean isExpectedInLogFile() {
|
||||
return mappedToBravoField.isExpectedInLogFile();
|
||||
}
|
||||
|
||||
public static ExpeditionExtendedSensorDataMetadata byColumnName(String valueName) {
|
||||
ExpeditionExtendedSensorDataMetadata[] values = ExpeditionExtendedSensorDataMetadata.values();
|
||||
for (ExpeditionExtendedSensorDataMetadata item : values) {
|
||||
@@ -72,7 +90,9 @@ public enum ExpeditionExtendedSensorDataMetadata {
|
||||
public static Map<String, Integer> getColumnNamesToIndexInDoubleFix() {
|
||||
final Map<String, Integer> columnNamesToIndexInDoubleFix = new HashMap<>();
|
||||
for (final ExpeditionExtendedSensorDataMetadata column : ExpeditionExtendedSensorDataMetadata.values()) {
|
||||
columnNamesToIndexInDoubleFix.put(column.getColumnName(), column.getColumnIndex());
|
||||
if (column.isExpectedInLogFile()) {
|
||||
columnNamesToIndexInDoubleFix.put(column.getColumnName(), column.getColumnIndex());
|
||||
}
|
||||
}
|
||||
return columnNamesToIndexInDoubleFix;
|
||||
}
|
||||
|
||||
+13
@@ -1,6 +1,7 @@
|
||||
package com.sap.sailing.domain.common.tracking;
|
||||
|
||||
import com.sap.sailing.domain.common.Bearing;
|
||||
import com.sap.sailing.domain.common.Distance;
|
||||
|
||||
/**
|
||||
* Extended version of {@link BravoFix} that provides access to more measures found in the extended data format.
|
||||
@@ -11,4 +12,16 @@ public interface BravoExtendedFix extends BravoFix {
|
||||
Double getPortRudderRake();
|
||||
Double getStbdRudderRake();
|
||||
Bearing getMastRotation();
|
||||
Double getLeeway();
|
||||
Double getSet();
|
||||
Double getDrift();
|
||||
Distance getDepth();
|
||||
Bearing getRudder();
|
||||
Double getForestayLoad();
|
||||
Bearing getTackAngle();
|
||||
Bearing getRake();
|
||||
Double getDeflectorPercentage();
|
||||
Bearing getTargetHeel();
|
||||
Distance getDeflector();
|
||||
Double getTargetBoatspeedP();
|
||||
}
|
||||
+67
@@ -1,7 +1,9 @@
|
||||
package com.sap.sailing.domain.common.tracking.impl;
|
||||
|
||||
import com.sap.sailing.domain.common.Bearing;
|
||||
import com.sap.sailing.domain.common.Distance;
|
||||
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
|
||||
import com.sap.sailing.domain.common.impl.MeterDistance;
|
||||
import com.sap.sailing.domain.common.sensordata.BravoExtendedSensorDataMetadata;
|
||||
import com.sap.sailing.domain.common.sensordata.ColumnMetadata;
|
||||
import com.sap.sailing.domain.common.tracking.BravoExtendedFix;
|
||||
@@ -49,4 +51,69 @@ public class BravoExtendedFixImpl extends BravoFixImpl implements BravoExtendedF
|
||||
return bearingDeg == null ? null : new DegreeBearingImpl(bearingDeg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double getLeeway() {
|
||||
return fix.get(BravoExtendedSensorDataMetadata.LEEWAY.getColumnIndex());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double getSet() {
|
||||
return fix.get(BravoExtendedSensorDataMetadata.SET.getColumnIndex());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double getDrift() {
|
||||
return fix.get(BravoExtendedSensorDataMetadata.DRIFT.getColumnIndex());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Distance getDepth() {
|
||||
final Double depthInMeters = fix.get(BravoExtendedSensorDataMetadata.DEPTH.getColumnIndex());
|
||||
return depthInMeters == null ? null : new MeterDistance(depthInMeters);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Bearing getRudder() {
|
||||
final Double rudderAngleDeg = fix.get(BravoExtendedSensorDataMetadata.RUDDER.getColumnIndex());
|
||||
return rudderAngleDeg == null ? null : new DegreeBearingImpl(rudderAngleDeg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double getForestayLoad() {
|
||||
return fix.get(BravoExtendedSensorDataMetadata.FORESTAY_LOAD.getColumnIndex());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Bearing getTackAngle() {
|
||||
final Double tackAngleDeg = fix.get(BravoExtendedSensorDataMetadata.TACK_ANGLE.getColumnIndex());
|
||||
return tackAngleDeg == null ? null : new DegreeBearingImpl(tackAngleDeg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Bearing getRake() {
|
||||
final Double rakeDeg = fix.get(BravoExtendedSensorDataMetadata.RAKE_DEG.getColumnIndex());
|
||||
return rakeDeg == null ? null : new DegreeBearingImpl(rakeDeg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double getDeflectorPercentage() {
|
||||
return fix.get(BravoExtendedSensorDataMetadata.DEFLECTOR_PERCENTAGE.getColumnIndex());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Bearing getTargetHeel() {
|
||||
final Double targetHeelDeg = fix.get(BravoExtendedSensorDataMetadata.TARGET_HEEL.getColumnIndex());
|
||||
return targetHeelDeg == null ? null : new DegreeBearingImpl(targetHeelDeg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Distance getDeflector() {
|
||||
final Double deflectorMillimeters = fix.get(BravoExtendedSensorDataMetadata.DEFLECTOR_MILLIMETERS.getColumnIndex());
|
||||
return deflectorMillimeters == null ? null : new MeterDistance(deflectorMillimeters / 1000.);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double getTargetBoatspeedP() {
|
||||
return fix.get(BravoExtendedSensorDataMetadata.TARGET_BOATSPEED_P.getColumnIndex());
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -75,7 +75,7 @@ public class MarkPassingCalculatorPerformanceTest extends AbstractMockedRaceMark
|
||||
final long time = timeToAddCandidatesToChooser(500, 1, 25);
|
||||
System.out.println(time);
|
||||
result.put("ChooserPerformance", time);
|
||||
assertTrue(time < 15000);
|
||||
assertTrue("time needs to be less than 15s but was "+time+"ms", time < 15000);
|
||||
}
|
||||
|
||||
private long timeToAddCandidatesToChooser(int numberOfTimesAdding, int numberToAddEachTime, int numberOfRepititions) {
|
||||
|
||||
@@ -225,11 +225,11 @@ enum ExChannels
|
||||
ExLeadStbd, // #170
|
||||
ExBackstay,
|
||||
|
||||
ExUser0, // user channels must be consecutive
|
||||
ExUser1,
|
||||
ExUser2,
|
||||
ExUser3,
|
||||
ExUser4,
|
||||
ExUser0, // #172: RakeDeg (Rake in degrees) // user channels must be consecutive
|
||||
ExUser1, // #173: DflectrPP (Deflector percentage)
|
||||
ExUser2, // #174: TG Heel (Target Heel)
|
||||
ExUser3, // #175: ForestayPres (Forestay Pressure)
|
||||
ExUser4, // #176: DflectrMM (Deflector in mm)
|
||||
ExUser5,
|
||||
ExUser6,
|
||||
ExUser7,
|
||||
|
||||
+21
-2
@@ -17,12 +17,14 @@ import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.TimeZone;
|
||||
import java.util.UUID;
|
||||
@@ -31,7 +33,9 @@ import java.util.function.Consumer;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.rules.Timeout;
|
||||
|
||||
import com.sap.sailing.declination.Declination;
|
||||
import com.sap.sailing.declination.DeclinationService;
|
||||
@@ -40,7 +44,11 @@ import com.sap.sailing.domain.common.Wind;
|
||||
import com.sap.sailing.domain.common.WindSource;
|
||||
import com.sap.sailing.domain.common.impl.DegreePosition;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
|
||||
import com.sap.sailing.domain.common.tracking.BravoExtendedFix;
|
||||
import com.sap.sailing.domain.common.tracking.DoubleVectorFix;
|
||||
import com.sap.sailing.domain.common.tracking.GPSFix;
|
||||
import com.sap.sailing.domain.common.tracking.GPSFixMoving;
|
||||
import com.sap.sailing.domain.common.tracking.impl.BravoExtendedFixImpl;
|
||||
import com.sap.sailing.domain.racelog.tracking.FixReceivedListener;
|
||||
import com.sap.sailing.domain.racelog.tracking.SensorFixStore;
|
||||
import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
|
||||
@@ -63,7 +71,7 @@ import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
public class UDPExpeditionReceiverTest {
|
||||
// @Rule public Timeout TestTimeout = new Timeout(60 * 1000);
|
||||
@Rule public Timeout TestTimeout = new Timeout(60 * 1000);
|
||||
|
||||
private String[] validLines;
|
||||
private String[] someValidWithFourInvalidLines;
|
||||
@@ -177,7 +185,13 @@ public class UDPExpeditionReceiverTest {
|
||||
@Override
|
||||
public <FixT extends Timed> Map<DeviceIdentifier, FixT> getLastFix(Iterable<DeviceIdentifier> forDevices)
|
||||
throws TransformationException, NoCorrespondingServiceRegisteredException {
|
||||
return null;
|
||||
final Map<DeviceIdentifier, FixT> result = new HashMap<>();
|
||||
for (final Entry<DeviceIdentifier, List<Timed>> fixes : fixesReceived.entrySet()) {
|
||||
@SuppressWarnings("unchecked")
|
||||
final List<FixT> fixList = (List<FixT>) fixes.getValue();
|
||||
result.put(fixes.getKey(), fixList.get(fixList.size()-1));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -331,7 +345,12 @@ public class UDPExpeditionReceiverTest {
|
||||
final ExpeditionGpsDeviceIdentifier gpsDevice = deviceRegistry.getGpsDeviceIdentifier(0);
|
||||
final ExpeditionSensorDeviceIdentifier sensorDevice = deviceRegistry.getSensorDeviceIdentifier(0);
|
||||
assertTrue(sensorFixStore.getNumberOfFixes(gpsDevice) > 0);
|
||||
assertEquals(-33.907350, ((GPSFixMoving) sensorFixStore.getLastFix(Collections.singleton(gpsDevice)).get(gpsDevice)).getPosition().getLatDeg(), 0.0001);
|
||||
assertEquals(18.419951, ((GPSFixMoving) sensorFixStore.getLastFix(Collections.singleton(gpsDevice)).get(gpsDevice)).getPosition().getLngDeg(), 0.0001);
|
||||
assertTrue(sensorFixStore.getNumberOfFixes(sensorDevice) > 0);
|
||||
final BravoExtendedFix sensorFix = new BravoExtendedFixImpl((DoubleVectorFix) sensorFixStore.getLastFix(Collections.singleton(sensorDevice)).get(sensorDevice));
|
||||
assertEquals(1.872, sensorFix.getRake().getDegrees(), 0.000001);
|
||||
assertEquals(18.4, sensorFix.getRudder().getDegrees(), 0.05);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
+25
@@ -172,6 +172,31 @@ public interface ExpeditionMessage extends UDPMessage {
|
||||
*/
|
||||
final int ID_TACK_ANGLE = 152;
|
||||
|
||||
/**
|
||||
* variable ID for rake in degrees
|
||||
*/
|
||||
final int ID_RAKE_DEG = 172;
|
||||
|
||||
/**
|
||||
* variable ID for deflector percentage
|
||||
*/
|
||||
final int ID_DFLCTR_PP = 173;
|
||||
|
||||
/**
|
||||
* variable ID for target heel angle
|
||||
*/
|
||||
final int ID_TG_HEEL = 174;
|
||||
|
||||
/**
|
||||
* variable ID for forestay pressure
|
||||
*/
|
||||
final int ID_FORESTAY_PRES = 175;
|
||||
|
||||
/**
|
||||
* variable ID for deflector in millimeters
|
||||
*/
|
||||
final int ID_DFLECTR_MM = 176;
|
||||
|
||||
/**
|
||||
* variable ID for target boat speed (P?), presumably in knots
|
||||
*/
|
||||
|
||||
+25
-6
@@ -4,6 +4,7 @@ import java.io.IOException;
|
||||
import java.net.SocketException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import com.sap.sailing.domain.common.sensordata.ExpeditionExtendedSensorDataMetadata;
|
||||
import com.sap.sailing.domain.common.tracking.DoubleVectorFix;
|
||||
@@ -100,12 +101,30 @@ public class UDPExpeditionReceiver extends UDPReceiver<ExpeditionMessage, Expedi
|
||||
* store in the {@link DeviceRegistry#getSensorFixStore() sensor fix store}.
|
||||
*/
|
||||
private void tryToProduceAndStoreSensorFix(ExpeditionMessage msg, ExpeditionSensorDeviceIdentifier sensorDeviceIdentifier) {
|
||||
final Double heelInDegrees = msg.hasValue(ExpeditionMessage.ID_ROLL) ? msg.getValue(ExpeditionMessage.ID_ROLL) : null;
|
||||
final Double trimInDegrees = msg.hasValue(ExpeditionMessage.ID_PITCH) ? msg.getValue(ExpeditionMessage.ID_PITCH) : null;
|
||||
final Double[] vector = new Double[Math.max(ExpeditionExtendedSensorDataMetadata.HEEL.getColumnIndex(),
|
||||
ExpeditionExtendedSensorDataMetadata.TRIM.getColumnIndex())+1];
|
||||
vector[ExpeditionExtendedSensorDataMetadata.HEEL.getColumnIndex()] = heelInDegrees;
|
||||
vector[ExpeditionExtendedSensorDataMetadata.TRIM.getColumnIndex()] = trimInDegrees;
|
||||
final Map<Integer, ExpeditionExtendedSensorDataMetadata> mapExpeditionMessageFieldIdToMetadata = new HashMap<>();
|
||||
mapExpeditionMessageFieldIdToMetadata.put(ExpeditionMessage.ID_ROLL, ExpeditionExtendedSensorDataMetadata.HEEL);
|
||||
mapExpeditionMessageFieldIdToMetadata.put(ExpeditionMessage.ID_PITCH, ExpeditionExtendedSensorDataMetadata.TRIM);
|
||||
mapExpeditionMessageFieldIdToMetadata.put(ExpeditionMessage.ID_RUDDER, ExpeditionExtendedSensorDataMetadata.RUDDER);
|
||||
mapExpeditionMessageFieldIdToMetadata.put(ExpeditionMessage.ID_TACK_ANGLE, ExpeditionExtendedSensorDataMetadata.TACK_ANGLE);
|
||||
mapExpeditionMessageFieldIdToMetadata.put(ExpeditionMessage.ID_RAKE_DEG, ExpeditionExtendedSensorDataMetadata.RAKE_DEG);
|
||||
mapExpeditionMessageFieldIdToMetadata.put(ExpeditionMessage.ID_DFLCTR_PP, ExpeditionExtendedSensorDataMetadata.DEFLECTOR_PERCENTAGE);
|
||||
mapExpeditionMessageFieldIdToMetadata.put(ExpeditionMessage.ID_TG_HEEL, ExpeditionExtendedSensorDataMetadata.TARGET_HEEL);
|
||||
mapExpeditionMessageFieldIdToMetadata.put(ExpeditionMessage.ID_FORESTAY_LOAD, ExpeditionExtendedSensorDataMetadata.FORESTAY_LOAD);
|
||||
mapExpeditionMessageFieldIdToMetadata.put(ExpeditionMessage.ID_DFLECTR_MM, ExpeditionExtendedSensorDataMetadata.DEFLECTOR_MILLIMETERS);
|
||||
mapExpeditionMessageFieldIdToMetadata.put(ExpeditionMessage.ID_TARG_BSP_P, ExpeditionExtendedSensorDataMetadata.TARGET_BOATSPEED_P);
|
||||
|
||||
int maxColumnIndex = -1;
|
||||
final Map<Integer, Double> valuesPerDoubleVectorFixColumnIndices = new HashMap<>();
|
||||
for (final Entry<Integer, ExpeditionExtendedSensorDataMetadata> mapEntry : mapExpeditionMessageFieldIdToMetadata.entrySet()) {
|
||||
if (msg.hasValue(mapEntry.getKey())) {
|
||||
valuesPerDoubleVectorFixColumnIndices.put(mapEntry.getValue().getColumnIndex(), msg.getValue(mapEntry.getKey()));
|
||||
maxColumnIndex = Math.max(maxColumnIndex, mapEntry.getValue().getColumnIndex());
|
||||
}
|
||||
}
|
||||
final Double[] vector = new Double[maxColumnIndex+1];
|
||||
for (final Entry<Integer, Double> valuesPerDoubleVectorFixColumnIndex : valuesPerDoubleVectorFixColumnIndices.entrySet()) {
|
||||
vector[valuesPerDoubleVectorFixColumnIndex.getKey()] = valuesPerDoubleVectorFixColumnIndex.getValue();
|
||||
}
|
||||
final DoubleVectorFix fix = new DoubleVectorFixImpl(msg.getTimePoint(), vector);
|
||||
if (fix != null && fix.hasValidData()) {
|
||||
deviceRegistry.getSensorFixStore().storeFix(sensorDeviceIdentifier, fix);
|
||||
|
||||
+1
-1
@@ -88,7 +88,7 @@ public class DesktopActivityMapper implements ActivityMapper {
|
||||
} else if (place instanceof ImprintPlace) {
|
||||
return new ImprintActivityProxy((ImprintPlace) place);
|
||||
} else if (place instanceof MoreLoginInformationPlace) {
|
||||
return new MoreLoginInformationActivity(place);
|
||||
return new MoreLoginInformationActivity(place, clientFactory);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
+1
-2
@@ -35,7 +35,6 @@ import com.sap.sse.security.ui.authentication.AuthenticationClientFactoryImpl;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationManager;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationManagerImpl;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationPlaceManagementController;
|
||||
import com.sap.sse.security.ui.authentication.WrappedPlaceManagementController;
|
||||
import com.sap.sse.security.ui.authentication.info.LoggedInUserInfoPlace;
|
||||
import com.sap.sse.security.ui.authentication.view.FlyoutAuthenticationPresenter;
|
||||
import com.sap.sse.security.ui.client.i18n.StringMessages;
|
||||
@@ -43,7 +42,7 @@ import com.sap.sse.security.ui.client.i18n.StringMessages;
|
||||
|
||||
public class TabletAndDesktopApplicationClientFactory extends AbstractApplicationClientFactory<DesktopApplicationTopLevelView> implements DesktopClientFactory {
|
||||
private final SailingDispatchSystem dispatch = new SailingDispatchSystemImpl();
|
||||
private final WrappedPlaceManagementController userManagementWizardController;
|
||||
private final AuthenticationPlaceManagementController userManagementWizardController;
|
||||
private final AuthenticationManager authenticationManager;
|
||||
|
||||
public TabletAndDesktopApplicationClientFactory(boolean isStandaloneServer) {
|
||||
|
||||
+8
-12
@@ -5,7 +5,7 @@ import java.util.Collection;
|
||||
import com.google.gwt.event.dom.client.ClickEvent;
|
||||
import com.google.gwt.event.dom.client.ClickHandler;
|
||||
import com.google.gwt.user.client.Window;
|
||||
import com.google.gwt.user.client.ui.Button;
|
||||
import com.google.gwt.user.client.ui.Anchor;
|
||||
import com.google.gwt.user.client.ui.Image;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent;
|
||||
import com.sap.sailing.gwt.common.client.SharedResources;
|
||||
@@ -28,7 +28,7 @@ public class SailingFullscreenViewer extends FullscreenContainer<SailingGalleryP
|
||||
private static final String IS_AUTOPLAYING_STYLE = SailingFullscreenViewerResources.INSTANCE.css().is_autoplaying();
|
||||
|
||||
private final EventNavigationHandler eventNavigationHandler;
|
||||
private final Button eventLinkControl = new Button();
|
||||
private final Anchor eventLinkControl = new Anchor();
|
||||
private final Image autoRefreshControl = new Image("images/home/reload.svg");
|
||||
private SailingGalleryPlayer player = null;
|
||||
|
||||
@@ -52,17 +52,12 @@ public class SailingFullscreenViewer extends FullscreenContainer<SailingGalleryP
|
||||
SailingFullscreenViewerResources.INSTANCE.css().ensureInjected();
|
||||
eventNavigationHandler = new EventNavigationHandler(navigator);
|
||||
if (eventNavigationHandler.isNavigationConfigured()) {
|
||||
eventLinkControl.addClickHandler(eventNavigationHandler);
|
||||
eventLinkControl.addStyleName(SharedResources.INSTANCE.mainCss().buttonarrowrightwhite());
|
||||
eventLinkControl.setTabIndex(-1);
|
||||
eventLinkControl.setTarget("_blank");
|
||||
addToolbarAction(eventLinkControl);
|
||||
}
|
||||
autoRefreshControl.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
SailingFullscreenViewer.this.toggleAutoplay();
|
||||
}
|
||||
});
|
||||
autoRefreshControl.addClickHandler(event -> SailingFullscreenViewer.this.toggleAutoplay());
|
||||
addToolbarAction(autoRefreshControl);
|
||||
}
|
||||
|
||||
@@ -94,10 +89,11 @@ public class SailingFullscreenViewer extends FullscreenContainer<SailingGalleryP
|
||||
|
||||
@Override
|
||||
public void onSelectionChange(SelectionChangeEvent event) {
|
||||
EventLinkDTO eventLink = player.getSelectedImage().getEventLink();
|
||||
eventLinkControl.setText(eventLink.getDisplayName());
|
||||
String evnetId = String.valueOf(eventLink.getId()), baseURL = eventLink.getBaseURL();
|
||||
final EventLinkDTO eventLink = player.getSelectedImage().getEventLink();
|
||||
final String evnetId = String.valueOf(eventLink.getId()), baseURL = eventLink.getBaseURL();
|
||||
eventNavigation = navigator.getEventNavigation(evnetId, baseURL, eventLink.isOnRemoteServer());
|
||||
eventLinkControl.setText(eventLink.getDisplayName());
|
||||
eventLinkControl.setHref(eventNavigation.getSafeTargetUrl());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+8
-25
@@ -1,33 +1,16 @@
|
||||
package com.sap.sailing.gwt.home.desktop.places.morelogininformation;
|
||||
|
||||
import com.google.gwt.activity.shared.Activity;
|
||||
import com.google.gwt.event.shared.EventBus;
|
||||
import com.google.gwt.place.shared.Place;
|
||||
import com.google.gwt.user.client.ui.AcceptsOneWidget;
|
||||
import com.sap.sailing.gwt.home.desktop.app.DesktopClientFactory;
|
||||
import com.sap.sailing.gwt.home.shared.places.morelogininformation.AbstractMoreLoginInformationActivity;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationPlaces;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationRequestEvent;
|
||||
|
||||
public class MoreLoginInformationActivity implements Activity {
|
||||
public class MoreLoginInformationActivity extends AbstractMoreLoginInformationActivity {
|
||||
|
||||
public MoreLoginInformationActivity(Place place) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String mayStop() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCancel() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void start(AcceptsOneWidget panel, EventBus eventBus) {
|
||||
panel.setWidget(new MoreLoginInformation());
|
||||
public MoreLoginInformationActivity(Place place, DesktopClientFactory clientFactory) {
|
||||
super(clientFactory, new MoreLoginInformationDesktop(() -> clientFactory.getEventBus()
|
||||
.fireEvent(new AuthenticationRequestEvent(AuthenticationPlaces.CREATE_ACCOUNT))));
|
||||
}
|
||||
|
||||
}
|
||||
+5
-5
@@ -2,21 +2,21 @@ package com.sap.sailing.gwt.home.desktop.places.morelogininformation;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.uibinder.client.UiBinder;
|
||||
import com.google.gwt.user.client.ui.Composite;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.gwt.home.shared.places.morelogininformation.AbstractMoreLoginInformation;
|
||||
|
||||
/**
|
||||
* Desktop page that shows the benefits of logging in on sapsailing.com.
|
||||
*/
|
||||
public class MoreLoginInformation extends Composite {
|
||||
public class MoreLoginInformationDesktop extends AbstractMoreLoginInformation {
|
||||
|
||||
private static MoreLoginInformationUiBinder uiBinder = GWT.create(MoreLoginInformationUiBinder.class);
|
||||
|
||||
interface MoreLoginInformationUiBinder extends UiBinder<Widget, MoreLoginInformation> {
|
||||
interface MoreLoginInformationUiBinder extends UiBinder<Widget, AbstractMoreLoginInformation> {
|
||||
}
|
||||
|
||||
public MoreLoginInformation() {
|
||||
initWidget(uiBinder.createAndBindUi(this));
|
||||
public MoreLoginInformationDesktop(Runnable registerCallback) {
|
||||
super(uiBinder, registerCallback);
|
||||
}
|
||||
|
||||
}
|
||||
+12
-1
@@ -9,12 +9,23 @@
|
||||
.clear {
|
||||
clear: both;
|
||||
}
|
||||
.registerContainer {
|
||||
text-align: center;
|
||||
}
|
||||
.register {
|
||||
cursor: pointer;
|
||||
}
|
||||
</ui:style>
|
||||
<g:HTMLPanel addStyleNames="{res.mediaCss.grid}">
|
||||
<h1 class="{res.mediaCss.small12} {res.mediaCss.columns}"><ui:text from="{i18n.moreLoginInformationHeadline}" /></h1>
|
||||
<p class="{res.mediaCss.small12} {res.mediaCss.columns}"><ui:text from="{i18n.moreLoginInformationIntroduction}" /></p>
|
||||
<login:MoreLoginInformationContent addStyleNames="{style.clear}" title="{i18n.moreLoginInformationSectionUserSettingsHeading}" image="{local_res.settings}" imageOnLeft="true" content="{i18n.moreLoginInformationSectionUserSettingsDescription}" />
|
||||
<login:MoreLoginInformationContent title="{i18n.strategySimulator}" image="{local_res.simulator}" imageOnLeft="false" content="{i18n.moreLoginInformationSectionStrategySimulatorDescription}" />
|
||||
<login:MoreLoginInformationContent addStyleNames="{res.mainCss.spacermarginbottommedium}" title="{i18n.moreLoginInformationSectionUserNotificationsHeading}" image="{local_res.notifications}" imageOnLeft="true" content="{i18n.moreLoginInformationSectionUserNotificationsDescription}" />
|
||||
<login:MoreLoginInformationContent title="{i18n.moreLoginInformationSectionUserNotificationsHeading}" image="{local_res.notifications}" imageOnLeft="true" content="{i18n.moreLoginInformationSectionUserNotificationsDescription}" />
|
||||
<div class="{res.mainCss.spacermargintopmediumsmall} {res.mainCss.spacermarginbottommedium} {style.registerContainer}">
|
||||
<a ui:field="registerControl" class="{res.mainCss.button} {style.register}">
|
||||
<ui:text from="{i18n.moreLoginInformationRegisterControlText}"/>
|
||||
</a>
|
||||
</div>
|
||||
</g:HTMLPanel>
|
||||
</ui:UiBinder>
|
||||
+2
-1
@@ -17,6 +17,7 @@ import com.sap.sailing.gwt.home.shared.places.fakeseries.AbstractSeriesPlace;
|
||||
import com.sap.sailing.gwt.home.shared.places.start.StartPlace;
|
||||
import com.sap.sailing.gwt.home.shared.places.user.profile.AbstractUserProfilePlace;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationContextEvent;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationPlaces;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationRequestEvent;
|
||||
import com.sap.sse.security.ui.client.i18n.StringMessages;
|
||||
|
||||
@@ -91,7 +92,7 @@ public class UserProfileActivity extends AbstractActivity implements UserProfile
|
||||
|
||||
@Override
|
||||
public void doTriggerLoginForm() {
|
||||
clientFactory.getEventBus().fireEvent(new AuthenticationRequestEvent());
|
||||
clientFactory.getEventBus().fireEvent(new AuthenticationRequestEvent(AuthenticationPlaces.SIGN_IN));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+1
-3
@@ -78,8 +78,6 @@ public class MobileActivityMapper implements ActivityMapper {
|
||||
return new PasswordResetActivityProxy((PasswordResetPlace) place, clientFactory);
|
||||
} else if (place instanceof AbstractUserProfilePlace) {
|
||||
return new UserProfileActivityProxy((AbstractUserProfilePlace) place, clientFactory);
|
||||
} else if (place instanceof AuthenticationPlace) {
|
||||
return new AuthenticationActivityProxy((AuthenticationPlace) place, clientFactory);
|
||||
} else if (place instanceof ConfirmationPlace) {
|
||||
return new ConfirmationActivityProxy((ConfirmationPlace) place, clientFactory);
|
||||
} else if (place instanceof PasswordResetPlace) {
|
||||
@@ -87,7 +85,7 @@ public class MobileActivityMapper implements ActivityMapper {
|
||||
} else if (place instanceof ImprintPlace) {
|
||||
return new ImprintActivityProxy((ImprintPlace) place);
|
||||
} else if (place instanceof MoreLoginInformationPlace) {
|
||||
return new MoreLoginInformationActivity(place);
|
||||
return new MoreLoginInformationActivity(place, clientFactory);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
+7
-1
@@ -9,6 +9,7 @@ import com.sap.sailing.gwt.home.mobile.places.user.authentication.Authentication
|
||||
import com.sap.sailing.gwt.home.shared.app.HomePlacesNavigator;
|
||||
import com.sap.sailing.gwt.home.shared.app.PlaceNavigation;
|
||||
import com.sap.sailing.gwt.home.shared.places.event.EventContext;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationPlaces;
|
||||
|
||||
public class MobilePlacesNavigator extends HomePlacesNavigator {
|
||||
|
||||
@@ -23,6 +24,11 @@ public class MobilePlacesNavigator extends HomePlacesNavigator {
|
||||
}
|
||||
|
||||
public PlaceNavigation<AuthenticationPlace> getSignInNavigation() {
|
||||
return createLocalPlaceNavigation(new AuthenticationPlace());
|
||||
return createLocalPlaceNavigation(new AuthenticationPlace(AuthenticationPlaces.SIGN_IN));
|
||||
}
|
||||
|
||||
public PlaceNavigation<AuthenticationPlace> getCreateAccountNavigation() {
|
||||
return createLocalPlaceNavigation(new AuthenticationPlace(AuthenticationPlaces.CREATE_ACCOUNT));
|
||||
}
|
||||
|
||||
}
|
||||
+1
-1
@@ -68,7 +68,7 @@ public class Header extends Composite {
|
||||
signInNavigationItem = addNavigation(com.sap.sse.security.ui.client.i18n.StringMessages.INSTANCE.signIn(), new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
placeNavigator.getSignInNavigation().goToPlace();
|
||||
placeNavigator.getSignInNavigation().goToPlace();
|
||||
}
|
||||
});
|
||||
userDetailsNavigationItem = addNavigation(placeNavigator.getUserProfileNavigation(), com.sap.sse.security.ui.client.i18n.StringMessages.INSTANCE.userDetails());
|
||||
|
||||
+6
-25
@@ -1,33 +1,14 @@
|
||||
package com.sap.sailing.gwt.home.mobile.places.morelogininformation;
|
||||
|
||||
import com.google.gwt.activity.shared.Activity;
|
||||
import com.google.gwt.event.shared.EventBus;
|
||||
import com.google.gwt.place.shared.Place;
|
||||
import com.google.gwt.user.client.ui.AcceptsOneWidget;
|
||||
import com.sap.sailing.gwt.home.mobile.app.MobileApplicationClientFactory;
|
||||
import com.sap.sailing.gwt.home.shared.places.morelogininformation.AbstractMoreLoginInformationActivity;
|
||||
|
||||
public class MoreLoginInformationActivity implements Activity {
|
||||
public class MoreLoginInformationActivity extends AbstractMoreLoginInformationActivity {
|
||||
|
||||
public MoreLoginInformationActivity(Place place) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String mayStop() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCancel() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void start(AcceptsOneWidget panel, EventBus eventBus) {
|
||||
panel.setWidget(new MoreLoginInformationMobile());
|
||||
public MoreLoginInformationActivity(Place place, MobileApplicationClientFactory clientFactory) {
|
||||
super(clientFactory, new MoreLoginInformationMobile(
|
||||
() -> clientFactory.getNavigator().getCreateAccountNavigation().goToPlace()));
|
||||
}
|
||||
|
||||
}
|
||||
+5
-5
@@ -2,21 +2,21 @@ package com.sap.sailing.gwt.home.mobile.places.morelogininformation;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.uibinder.client.UiBinder;
|
||||
import com.google.gwt.user.client.ui.Composite;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.gwt.home.shared.places.morelogininformation.AbstractMoreLoginInformation;
|
||||
|
||||
/**
|
||||
* Mobile page that shows the benefits of logging in on sapsailing.com.
|
||||
*/
|
||||
public class MoreLoginInformationMobile extends Composite {
|
||||
public class MoreLoginInformationMobile extends AbstractMoreLoginInformation {
|
||||
|
||||
private static MoreLoginInformationUiBinder uiBinder = GWT.create(MoreLoginInformationUiBinder.class);
|
||||
|
||||
interface MoreLoginInformationUiBinder extends UiBinder<Widget, MoreLoginInformationMobile> {
|
||||
interface MoreLoginInformationUiBinder extends UiBinder<Widget, AbstractMoreLoginInformation> {
|
||||
}
|
||||
|
||||
public MoreLoginInformationMobile() {
|
||||
initWidget(uiBinder.createAndBindUi(this));
|
||||
public MoreLoginInformationMobile(Runnable registerCallback) {
|
||||
super(uiBinder, registerCallback);
|
||||
}
|
||||
|
||||
}
|
||||
+7
-7
@@ -4,6 +4,7 @@
|
||||
xmlns:login="urn:import:com.sap.sailing.gwt.home.mobile.places.morelogininformation"
|
||||
xmlns:a="urn:import:com.sap.sailing.gwt.home.mobile.partials.accordion">
|
||||
<ui:with field="i18n" type="com.sap.sailing.gwt.ui.client.StringMessages" />
|
||||
<ui:with field="i18nsec" type="com.sap.sse.security.ui.client.i18n.StringMessages" />
|
||||
<ui:with field="res" type="com.sap.sailing.gwt.common.client.SharedResources" />
|
||||
<ui:with field="local_res" type="com.sap.sailing.gwt.home.shared.places.morelogininformation.MoreLoginInformationResources" />
|
||||
<ui:style>
|
||||
@@ -11,13 +12,12 @@
|
||||
font-size: 1.5em;
|
||||
}
|
||||
.register {
|
||||
border-radius: .3846154em;
|
||||
border-radius: .384615384615385em;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.buttonContainer {
|
||||
padding: 1em 0.625em;
|
||||
margin-top: 1em;
|
||||
}
|
||||
</ui:style>
|
||||
<a:Accordion>
|
||||
@@ -47,13 +47,13 @@
|
||||
image="{local_res.notifications}"
|
||||
content="{i18n.moreLoginInformationSectionUserNotificationsDescription}" />
|
||||
</a:item>
|
||||
<!--
|
||||
<a:footer>
|
||||
<g:HTMLPanel addStyleNames="{style.buttonContainer}">
|
||||
<a
|
||||
class="{style.register} {res.mainCss.button} {res.mainCss.buttonstrong} {res.mainCss.buttonarrowrightwhite}">TODO: register</a>
|
||||
<a ui:field="registerControl" class="{style.register} {res.mainCss.button} {res.mainCss.buttonstrong}
|
||||
{res.mainCss.buttonarrowrightwhite}">
|
||||
<ui:text from="{i18n.moreLoginInformationRegisterControlText}"/>
|
||||
</a>
|
||||
</g:HTMLPanel>
|
||||
</a:footer>
|
||||
-->
|
||||
</a:Accordion>
|
||||
</ui:UiBinder>
|
||||
+6
-12
@@ -10,33 +10,27 @@ import com.sap.sailing.gwt.home.shared.usermanagement.AuthenticationCallbackImpl
|
||||
import com.sap.sailing.gwt.home.shared.usermanagement.view.AuthenticationViewMobile;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationClientFactoryImpl;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationPlaceManagementController;
|
||||
import com.sap.sse.security.ui.authentication.WrappedPlaceManagementController;
|
||||
import com.sap.sse.security.ui.authentication.view.AuthenticationView;
|
||||
|
||||
public class AuthenticationActivity extends AbstractActivity {
|
||||
private final MobileApplicationClientFactory clientFactory;
|
||||
private final AuthenticationView userManagementView = new AuthenticationViewMobile();
|
||||
private final AuthenticationPlace place;
|
||||
|
||||
public AuthenticationActivity(AuthenticationPlace place, MobileApplicationClientFactory clientFactory) {
|
||||
this.clientFactory = clientFactory;
|
||||
this.place = place;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void start(final AcceptsOneWidget panel, EventBus eventBus) {
|
||||
panel.setWidget(userManagementView);
|
||||
WrappedPlaceManagementController userManagementController = new AuthenticationPlaceManagementController(
|
||||
final AuthenticationPlaceManagementController userManagementController = new AuthenticationPlaceManagementController(
|
||||
new AuthenticationClientFactoryImpl(clientFactory.getAuthenticationManager(), SharedResources.INSTANCE),
|
||||
new AuthenticationCallbackImpl(clientFactory.getNavigator().getUserProfileNavigation(),
|
||||
new SignInSuccessfulNavigationMobile()),
|
||||
() -> History.back()),
|
||||
userManagementView, eventBus);
|
||||
userManagementController.start();
|
||||
userManagementController.goTo(place.getRequestedPlace());
|
||||
}
|
||||
|
||||
private class SignInSuccessfulNavigationMobile implements Runnable {
|
||||
@Override
|
||||
public void run() {
|
||||
History.back();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+12
-1
@@ -6,14 +6,25 @@ import com.google.gwt.place.shared.Prefix;
|
||||
import com.sap.sailing.gwt.home.shared.app.HasLocationTitle;
|
||||
import com.sap.sailing.gwt.home.shared.app.HasMobileVersion;
|
||||
import com.sap.sailing.gwt.home.shared.places.PlaceTokenPrefixes;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationPlaces;
|
||||
import com.sap.sse.security.ui.client.i18n.StringMessages;
|
||||
|
||||
public class AuthenticationPlace extends Place implements HasMobileVersion, HasLocationTitle {
|
||||
|
||||
private final AuthenticationPlaces requestedPlace;
|
||||
|
||||
public AuthenticationPlace(AuthenticationPlaces requestedPlace) {
|
||||
this.requestedPlace = requestedPlace;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLocationTitle() {
|
||||
return StringMessages.INSTANCE.user();
|
||||
}
|
||||
|
||||
public AuthenticationPlaces getRequestedPlace() {
|
||||
return requestedPlace;
|
||||
}
|
||||
|
||||
@Prefix(PlaceTokenPrefixes.UserAuthentication)
|
||||
public static class Tokenizer implements PlaceTokenizer<AuthenticationPlace> {
|
||||
@@ -24,7 +35,7 @@ public class AuthenticationPlace extends Place implements HasMobileVersion, HasL
|
||||
|
||||
@Override
|
||||
public AuthenticationPlace getPlace(String token) {
|
||||
return new AuthenticationPlace();
|
||||
return new AuthenticationPlace(AuthenticationPlaces.SIGN_IN);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+10
-2
@@ -50,11 +50,19 @@
|
||||
padding: 10px;
|
||||
vertical-align: top;
|
||||
}
|
||||
button.toolbarAction {
|
||||
background-color: transparent;
|
||||
a.toolbarAction, button.toolbarAction {
|
||||
border-radius: initial;
|
||||
font-size: 1.25em;
|
||||
}
|
||||
a.toolbarAction {
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
outline: none;
|
||||
padding-top: 0.666666666666667em
|
||||
}
|
||||
button.toolbarAction {
|
||||
background-color: transparent;
|
||||
}
|
||||
.toolbarBusyIndicator {
|
||||
display: inline-block;
|
||||
height: 50px;
|
||||
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
package com.sap.sailing.gwt.home.shared.places.morelogininformation;
|
||||
|
||||
import com.google.gwt.dom.client.Element;
|
||||
import com.google.gwt.uibinder.client.UiBinder;
|
||||
import com.google.gwt.uibinder.client.UiField;
|
||||
import com.google.gwt.user.client.DOM;
|
||||
import com.google.gwt.user.client.Event;
|
||||
import com.google.gwt.user.client.ui.Composite;
|
||||
import com.google.gwt.user.client.ui.UIObject;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
|
||||
public class AbstractMoreLoginInformation extends Composite implements MoreLoginInformationView {
|
||||
|
||||
@UiField
|
||||
public Element registerControl;
|
||||
|
||||
protected AbstractMoreLoginInformation(UiBinder<Widget, AbstractMoreLoginInformation> uiBinder,
|
||||
Runnable registerCallback) {
|
||||
initWidget(uiBinder.createAndBindUi(this));
|
||||
DOM.sinkEvents(registerControl, Event.ONCLICK);
|
||||
Event.setEventListener(registerControl, event -> registerCallback.run());
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void setRegisterControlVisible(boolean visible) {
|
||||
UIObject.setVisible(registerControl, visible);
|
||||
}
|
||||
|
||||
}
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
package com.sap.sailing.gwt.home.shared.places.morelogininformation;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
import com.google.gwt.activity.shared.AbstractActivity;
|
||||
import com.google.gwt.activity.shared.Activity;
|
||||
import com.google.gwt.event.shared.EventBus;
|
||||
import com.google.gwt.user.client.ui.AcceptsOneWidget;
|
||||
import com.sap.sse.security.ui.authentication.WithUserService;
|
||||
import com.sap.sse.security.ui.client.UserService;
|
||||
import com.sap.sse.security.ui.client.UserStatusEventHandler;
|
||||
|
||||
/**
|
||||
* Abstract {@link Activity activity} implementation for {@link MoreLoginInformationView}s.
|
||||
*/
|
||||
public class AbstractMoreLoginInformationActivity extends AbstractActivity {
|
||||
|
||||
private final WithUserService clientFactory;
|
||||
private final MoreLoginInformationView view;
|
||||
|
||||
/**
|
||||
* Creates new {@link AbstractMoreLoginInformationActivity} instance for the provided view using the given factory.
|
||||
*
|
||||
* @param clientFactory
|
||||
* {@link WithUserService client factory} providing access to the {@link UserService}
|
||||
* @param view
|
||||
* the {@link MoreLoginInformationView} to show
|
||||
*/
|
||||
protected AbstractMoreLoginInformationActivity(WithUserService clientFactory, MoreLoginInformationView view) {
|
||||
this.clientFactory = clientFactory;
|
||||
this.view = view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void start(AcceptsOneWidget panel, EventBus eventBus) {
|
||||
final UserStatusEventHandler handler = user -> view.setRegisterControlVisible(Objects.isNull(user));
|
||||
this.clientFactory.getUserService().addUserStatusEventHandler(handler, true);
|
||||
panel.setWidget(view);
|
||||
}
|
||||
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
package com.sap.sailing.gwt.home.shared.places.morelogininformation;
|
||||
|
||||
import com.google.gwt.user.client.ui.IsWidget;
|
||||
|
||||
/**
|
||||
* Interface for views containing information about benefits of signing in on SAP Sailing Analytics.
|
||||
*/
|
||||
public interface MoreLoginInformationView extends IsWidget {
|
||||
|
||||
/**
|
||||
* Show or hide the control leading to register form (usually based on login state).
|
||||
*
|
||||
* @param visible
|
||||
* <code>true</code> to show register control, <code>false</code> to hide
|
||||
*/
|
||||
void setRegisterControlVisible(boolean visible);
|
||||
}
|
||||
+1
@@ -12,6 +12,7 @@ public class AuthenticationViewDesktop extends AbstractFlyoutAuthenticationView
|
||||
}
|
||||
|
||||
public void show() {
|
||||
getPresenter().onVisibilityChanged(true);
|
||||
popupPanel.show();
|
||||
popupPanel.getElement().getStyle().clearLeft();
|
||||
popupPanel.getElement().getStyle().clearTop();
|
||||
|
||||
+2
-2
@@ -679,8 +679,8 @@ public interface SailingService extends RemoteService, FileStorageManagementGwtS
|
||||
void setEliminatedCompetitors(String leaderboardName, Set<CompetitorDTO> eliminatedCompetitors);
|
||||
|
||||
/**
|
||||
* Used to determine for a Chart the available Detailtypes. This is for example used, to only show the RideHeight as
|
||||
* an option for charts, if it actually recorded for the race.
|
||||
* Used to determine for a Chart the available Detailtypes. This is for example used to only show the RideHeight as
|
||||
* an option for charts if it actually recorded for the race.
|
||||
*/
|
||||
List<DetailType> determineDetailTypes(String leaderboardGroupName, RegattaAndRaceIdentifier identifier);
|
||||
|
||||
|
||||
+1
@@ -1897,6 +1897,7 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
|
||||
String moreLoginInformationSectionStrategySimulatorDescription();
|
||||
String moreLoginInformationSectionUserNotificationsHeading();
|
||||
String moreLoginInformationSectionUserNotificationsDescription();
|
||||
String moreLoginInformationRegisterControlText();
|
||||
String anniversaryUnitText(@Optional @PluralCount(DefaultRule_1_0n.class) int count);
|
||||
String anniversaryMajorCountdownTeaser(@PluralCount(DefaultRule_1_0n.class) int countdown, int anniversary);
|
||||
String anniversaryMajorCountdownDescription(int anniversary);
|
||||
|
||||
+1
@@ -1879,6 +1879,7 @@ moreLoginInformationSectionUserSettingsDescription=Many parts of the user interf
|
||||
moreLoginInformationSectionStrategySimulatorDescription=The simulator enables sailors to simulate strategies for legs based on configurable wind conditions. The simulator is based on all the historical data available in SAP Sailing Analytics to provide simulations on the accurate behavior of specific boat classes.
|
||||
moreLoginInformationSectionUserNotificationsHeading=User Notifications
|
||||
moreLoginInformationSectionUserNotificationsDescription=User notifications are an easy way to keep you up to date about your favorite competitor/team or boat class. You can subscribe for mail-based notifications about new results for your favorite sailor/team or boat class as well as upcoming races of specific boat classes.
|
||||
moreLoginInformationRegisterControlText=Sign up now
|
||||
anniversaryUnitText=Races
|
||||
anniversaryUnitText[one]=Race
|
||||
anniversaryMajorCountdownTeaser=Countdown! Only {0,number,#,###} races left until the {1,number,#,###}th race.
|
||||
|
||||
+1
@@ -1883,6 +1883,7 @@ moreLoginInformationSectionUserSettingsDescription=Viele Teile der Benutzeroberf
|
||||
moreLoginInformationSectionStrategySimulatorDescription=Der Simulator ermöglicht es Seglern, Strategien für die Bewältigung von Bahnschenkeln anhand einer einstellbaren Windsituation zu simulieren. Die Simulation basiert auf den historischen Daten, über welche die SAP Sailing Analytics verfügt und ermöglich damit realitätsnahe Analysen auf Basis spezifischer Bootsklassen.
|
||||
moreLoginInformationSectionUserNotificationsHeading=Benachrichtigungen
|
||||
moreLoginInformationSectionUserNotificationsDescription=Benachrichtigungen sind eine einfache Möglichkeit, über einen Teilnehmer/ein Team oder eine Bootsklasse auf dem Laufenden zu bleiben. Mail-Benachrichtigungen für neue Ergebnisse von Lieblings-Seglern oder Bootsklassen sowie demnächst startende Rennen spezifischer Bootsklassen können abonniert werden.
|
||||
moreLoginInformationRegisterControlText=Jetzt registrieren
|
||||
anniversaryUnitText=Rennen
|
||||
anniversaryUnitText[one]=Rennen
|
||||
anniversaryMajorCountdownTeaser=Countdown! Noch {0,number,#,###} Rennen bis zum {1,number,#,###}. Rennen.
|
||||
|
||||
+54
-4
@@ -448,7 +448,8 @@ scoringSchemeLowPointForLeagueOverallLeaderboardDescription=En lugar del sistema
|
||||
scoringSchemeLowPointTieBreakBasedOnLastSeriesOnly=Puntuación baja, los empates se resuelven por la última serie
|
||||
scoringSchemeLowPointTieBreakBasedOnLastSeriesOnlyDescription=En lugar del sistema habitual de recuento para los esquemas de puntuación baja para romper empates, se tiene en cuenta la puntuación de la serie final sin regatas excluidas si dos competidores tienen los mismos puntos.
|
||||
scoringSchemeLowPointWithAutomaticRdg=Sistema de puntuación baja, RDG obtiene una puntuación por defecto basada en la media de todas las puntuaciones que no sean de RDG
|
||||
scoringSchemeHighPointFirstGetsOne=Puntuación alta, el ganador obtiene 1 punto
|
||||
scoringSchemeHighPointFirstGetsOne=Puntuación alta, el ganador obtiene 1 punto; el perdedor, 0
|
||||
scoringSchemeHighPointFirstGetsOneDescription=Puntuación alta, el ganador obtiene 1 punto; el perdedor, 0; los empates se han resuelto basándose en la comparación directa con la última comparación directa resolviendo otro empate; si se producen ciclos en la comparación directa, los competidores se han tratado por igual; los competidores que no hayan competido entre sí (aún) se clasificarán basándose en su posición en el gráfico de victorias/derrotas.
|
||||
scoringSchemeHighPointFirstGetsTen=Puntuación alta, el ganador obtiene 10 puntos
|
||||
scoringSchemeHighPointFirstGetsTenOrEight=Puntuación alta, el ganador obtiene 10 puntos (u 8)
|
||||
scoringSchemeHighPointFirstGetsTenOrEightDescription=Calificación en puntos. El ganador obtiene 10 puntos; el segundo, 9 puntos, etc. Si hay un empate, se resuelve a favor del competidor que ha ganado la mayoría de carreras. Si aún persiste el empate, se resuelve mediante la posición obtenida en la última carrera puntuada.
|
||||
@@ -571,6 +572,7 @@ knotsValue={0,number,#0.0} kts
|
||||
knotsRange={0,number,#0.0} - {1,number,#0.0} kts
|
||||
generatePolarSheet=Generar hoja polar
|
||||
polars=Diagramas polares
|
||||
foilingSegments=Apéndices de foil
|
||||
polarSheetChart=Hoja polar
|
||||
polarSheetMinimumDataSizePerGraph=Puntos de datos mínimos por gráfico
|
||||
polarSheetMinimumDataSizePerGraphTooltip=No se muestran visualmente los gráficos con menos puntos de datos subyacentes.\nDe este modo no se muestran diagramas innecesarios para\nlas velocidades de viento que no tienen suficientes datos.
|
||||
@@ -902,6 +904,7 @@ windImport_ResultEntry=Carrera: {0} ({1}) - {2} correcciones de: {3} a: {4}
|
||||
windImport_ResultError=Error: {0}
|
||||
gribWindImport_Title=Importar viento desde archivos GRIB
|
||||
nmeaWindImport_Title=Importar viento desde ficheros NMEA
|
||||
bravoWindImport_Title=Importar viento desde ficheros Bravo
|
||||
showWindSpeedSeriesTooltip=Alterna la visibilidad de la velocidad del viento para todas las fuentes de datos
|
||||
showWindDirectionSeriesTooltip=Alterna la visibilidad de la dirección del viento para todas las fuentes de datos
|
||||
combinedWindSourceTypeTooltip=Combina todas las demás fuentes de vientos en un conjunto de datos
|
||||
@@ -1428,6 +1431,7 @@ runAQuery=Realice una consulta
|
||||
latestRegattaStandings=Últimas posiciones de la regata
|
||||
plainText=Texto sin formato
|
||||
columnChart=Gráfico de columnas
|
||||
columnChartWithErrorBars=Gráfico de columnas con barras de error
|
||||
choosePresentation=Seleccionar presentación
|
||||
cantDisplayDataOfType=No se pueden mostrar datos del tipo {0}
|
||||
shownDecimals=Decimales mostrados
|
||||
@@ -1543,8 +1547,8 @@ playstoreCampaign=utm_source=sapsailing&utm_medium=solutions&utm_content=2016.02
|
||||
playstoreInsightApp=https://play.google.com/store/apps/details?id=com.sap.sailing.android.tracking.app
|
||||
playstoreRacecommitteeApp=https://play.google.com/store/apps/details?id=com.sap.sailing.racecommittee.app
|
||||
playStoreBuoyPingerApp=https://play.google.com/store/apps/details?id=com.sap.sailing.android.buoy.positioning.app
|
||||
playstoreBadge=https://play.google.com/intl/en/badges/images/badge_new.png
|
||||
appstoreSapSailInsight=http://appstore.com/sapsailinsight
|
||||
playstoreBadge=https://developer.android.com/images/brand/en_generic_rgb_wo_60.png
|
||||
appstoreSapSailInsight=https://itunes.apple.com/us/app/sap-sail-insight/id1087154208
|
||||
appstoreBadgeSuffix=_en
|
||||
distanceFromAveragePosition=Distancia desde la posición promedio
|
||||
useATouchOptimizedUI=Utilice un IU optimizado táctil para desplazar la fijación
|
||||
@@ -1638,7 +1642,7 @@ currentHeelInDegree=Escora
|
||||
currentHeelInDegreeTooltip=La escora actual en grados
|
||||
currentPitchInDegree=Paso
|
||||
currentPitchDegreeTooltip=La paso actual en grados
|
||||
currentRideHeightInMeters=Altura de circulación
|
||||
currentRideHeightInMeters=Altura de marcha
|
||||
currentRideHeightInMetersTooltip=Actual altura de marcha de foil
|
||||
currentOrAverageRideHeightInMeters=Altura de marcha (∅ al final)
|
||||
currentOrAverageRideHeightInMetersTooltip=La altura de marcha de foil actual en metros en el tramo todavía está en carrera; altura de marcha media al concluir el tramo
|
||||
@@ -1864,3 +1868,49 @@ errorLoadingEvent=Error al cargar el evento con ID {0} : {1}
|
||||
errorLoadingRegattaStructure=Error al intentar cargar regatas para el evento con ID {0} : {1}
|
||||
showEstimatedDuration=Mostrar duración estimada
|
||||
estimatedDuration=Duración estimada:
|
||||
countDown=Evento comienza en {0} {1}
|
||||
countDownEnd=El evento comenzará en pocos segundos
|
||||
moreLoginInformationHeadline=Ventajas de registrarse en SAP Sailing Analytics
|
||||
moreLoginInformationIntroduction=Como usuario registrado de SAP Sailing Analytics dispone de acceso a la funcionalidad que no está disponible para usuarios anónimos. Simplemente regístrese para acceder a las funciones que se muestras más abajo.
|
||||
moreLoginInformationSectionUserSettingsHeading=Opciones de usuario
|
||||
moreLoginInformationSectionUserSettingsDescription=Muchos elementos de la interfase de usuario están habilitados para proporcionar opciones de usuario modificables. Mientras que la funcionalidad básica está disponible para todos, las opciones de usuarios autenticados se almacenan en el perfil de usuario y están disponibles en cualquier dispositivo simplemente registrándose.
|
||||
moreLoginInformationSectionStrategySimulatorDescription=El simulador permite a los navegantes simular estrategias para tramos basados en condiciones de viento configurables. El simulador se basa en todos los datos históricos disponibles en SAP Sailing Analytics para proporcionar simulaciones en el comportamiento exacto de clases de embarcación específicas.
|
||||
moreLoginInformationSectionUserNotificationsHeading=Notificaciones de usuario
|
||||
moreLoginInformationSectionUserNotificationsDescription=Las notificaciones de usuario son una forma sencilla de mantenerle al tanto de su competidor/equipo o clase de embarcación favorita. Puede suscribirse a notificaciones basadas en e-mail sobre resultados nuevos para su navegante/equipo o clase de embarcación favorita, así como para próximas carreras de clases de embarcación específicas.
|
||||
anniversaryUnitText=Carreras
|
||||
anniversaryUnitText[one]=Carrera
|
||||
anniversaryMajorCountdownTeaser=Cuenta atrás. Solo faltan {0,number,#,###} carreras hasta la {1,number,#,###} carrera.
|
||||
anniversaryMajorCountdownTeaser[one]=Cuenta atrás. Solo falta {0,number,#,###} carrera hasta la {1,number,#,###} carrera.
|
||||
anniversaryMajorCountdownDescription=Estamos celebrando nuestra {0,number,#,###} carrera en www.sapsailing.com. ¿Qué carrera batirá la marca? El organizador de esta carrera de aniversario recibirá un total de 10 000 euros para fines benéficos. El ganador se anunciará en este sitio web. Estén atentos y cuenten con nosotros.
|
||||
anniversaryRepdigitCountdownTeaser=Cuenta atrás. Solo faltan {0,number,#,###} carreras hasta la {1,number,#,###} carrera.
|
||||
anniversaryRepdigitCountdownTeaser[one]=Cuenta atrás. Solo falta {0,number,#,###} carrera hasta la {1,number,#,###} carrera.
|
||||
anniversaryRepdigitCountdownDescription=Celebramos nuestra carrera del número afortunado. ¿Quién realizará la {0,number, #,###} carrera en www.sapsailing.com? Los participantes de esta carrera obtendrán un festival de verano gratuito de primera clase por parte de SAP. Los ganadores se anunciarán en este sitio web. Estén atentos y cuenten con nosotros.
|
||||
anniversaryAnnouncementTeaser=Misión cumplida. {0,number,#,###} Carreras con SAP Sailing Analytics
|
||||
anniversaryAnnouncementDescription=3,2,1... Felicitamos a los participantes de la carrera {0}. ¡Lo conseguísteis! Os agradecemos vuestra confianza en SAP Sailing Analytics y esperamos continuar navegando más de 10 000 carreras con vosotros.
|
||||
anniversaryRaceLinkText=Mostrar carrera de aniversario
|
||||
minimumFoilingSegmentsDurationInSeconds=Duración mínima de apéndice de foil (s)
|
||||
minimumFoilingSegmentsDurationInSecondsTooltip=Deje en blanco o indique 0 si no desea restringir la duración mínima. No se notificarán los apéndices de foil más cortos.
|
||||
maximumSpeedNotFoilingInKnots=Velocidad máxima sobre fondo sin foils (kts)
|
||||
maximumSpeedNotFoilingInKnotsTooltip=Velocidad máxima sobre fondo en nudos que una embarcación puede alcanzar sin foils. Cualquier velocidad más rápida se notificará como con foils, sin importar lo que muestre el sensor de altura de la marcha. Déjelo en blanco si desea basarse en el sensor de altura de la marcha también para grandes velocidades.
|
||||
minimumSpeedForFoilingInKnots=Velocidad mínima sobre fondo con foils (kts)
|
||||
minimumSpeedForFoilingInKnotsTooltip=Velocidad mínima sobre fondo en nudos que una embarcación alcanza para utilizar foils. A velocidad inferior se ignorará la altura de la marcha y la embarcación se considerará sin foils. Déjelo en blanco o indique 0 si desea basarse en el sensor de altura de marcha también a velocidades bajas.
|
||||
minimumRideHeightInMeters=Altura mínima de marcha (m)
|
||||
minimumRideHeightInMetersTooltip=La altura de marcha mínima en metros requerida para que una embarcación se considere con foils
|
||||
minimumDurationBetweenAdjacentFoilingSegmentsInSeconds=Duración mínima entre apéndice(s) de foil
|
||||
minimumDurationBetweenAdjacentFoilingSegmentsInSecondsTooltip=Si no está en blanco y el tiempo entre dos apéndices de foil adyacentes es inferior, aquellos apéndices de foil adyacentes se fusionarán en uno solo.
|
||||
needToProvideValidMinimumRideHeight=Requiere proporcionar un valor de altura de marcha mínimo válido en metros.
|
||||
dataMiningErrorMargins=Márgenes de error
|
||||
elements={0} elementos
|
||||
chooseDifferentDimensionTitle=Seleccione una dimensión diferente
|
||||
chooseDifferentDimensionMessage=Seleccione una dimensión diferente para agrupar resultados
|
||||
pleaseSelectADimension=Seleccione una dimensión
|
||||
currentPortDaggerboardRake=Inclinación de la orza de babor
|
||||
currentPortDaggerboardRakeTooltip=La inclinación actual de la orza de babor
|
||||
currentStbdDaggerboardRake=Inclinación de la orza de estribor
|
||||
currentStbdDaggerboardRakeTooltip=La inclinación actual de la orza de estribor
|
||||
currentPortRudderRake=Inclinación del timón a babor
|
||||
currentPortRudderRakeTooltip=La inclinación actual del timón a babor
|
||||
currentStbdRudderRake=Inclinación del timón a estribor
|
||||
currentStbdRudderRakeTooltip=La inclinación actual del timón a estribor
|
||||
currentMastRotationInDegree=Rotación del mástil
|
||||
currentMastRotationInDegreeTooltip=La rotación actual del mástil en grados
|
||||
+65
-15
@@ -448,7 +448,8 @@ scoringSchemeLowPointForLeagueOverallLeaderboardDescription=À la place du syst
|
||||
scoringSchemeLowPointTieBreakBasedOnLastSeriesOnly=Système de points a minima, en cas d''égalité, seule la dernière série compte
|
||||
scoringSchemeLowPointTieBreakBasedOnLastSeriesOnlyDescription=À la place du système habituel de comptage pour schémas à minima en cas d''égalité, le score de la dernière série sans exclusion de course est pris en compte si deux concurrents sont à égalité.
|
||||
scoringSchemeLowPointWithAutomaticRdg=Système de points a minima, reclassement à une manche avec score par défaut basé sur la moyenne de tous les scores non reclassés.
|
||||
scoringSchemeHighPointFirstGetsOne=Système de points avec bonus, le vainqueur obtient 1 point
|
||||
scoringSchemeHighPointFirstGetsOne=Système de points avec bonus, le vainqueur obtient 1 point, le perdant 0
|
||||
scoringSchemeHighPointFirstGetsOneDescription=Système de points avec bonus, le vainqueur obtient 1 point, le perdant 0. En cas d''égalité, l''égalité est départagée par comparaison directe avec la dernière comparaison directe où des concurrents à égalité ont été départagés. Si des cycles avec comparaison directe existent, les concurrents sont traités à égalités ; les concurrents qui ne se sont pas (encore) affrontés sont classés en fonction de leur position dans le classement des courses gagnées/perdues.
|
||||
scoringSchemeHighPointFirstGetsTen=Système de points avec bonus, le vainqueur obtient 10 points
|
||||
scoringSchemeHighPointFirstGetsTenOrEight=Système de points avec bonus, le vainqueur obtient 10 points (ou 8)
|
||||
scoringSchemeHighPointFirstGetsTenOrEightDescription=Score en points. Le vainqueur totalise 10 points, le deuxième 9, etc. En cas d''égalité, la victoire est accordée au concurrent qui a gagné le plus de courses. Si l''égalité persiste, la victoire est accordée en fonction du classement dans la dernière course.
|
||||
@@ -571,6 +572,7 @@ knotsValue={0,number,#0.0} nds
|
||||
knotsRange={0,number,#0.0} - {1,number,#0.0} nds
|
||||
generatePolarSheet=Générer fiche polaire
|
||||
polars=Diagrammes polaire
|
||||
foilingSegments=Tronçons en planing
|
||||
polarSheetChart=Fiche polaire
|
||||
polarSheetMinimumDataSizePerGraph=Nombre minimum de points de données par diagramme.
|
||||
polarSheetMinimumDataSizePerGraphTooltip=Les diagrammes comportant moins de points de données sous-jacents ne sont pas affichés visuellement.\nDe cette façon, aucun diagramme inutile n''est affiché pour \nla vitesse du vent s''il n''y a pas suffisamment de données.
|
||||
@@ -902,6 +904,7 @@ windImport_ResultEntry=Course : {0} ({1}) - {2} points de : {3} à : {4}
|
||||
windImport_ResultError=Erreur : {0}
|
||||
gribWindImport_Title=Importer données de vent à partir de fichiers GRIB
|
||||
nmeaWindImport_Title=Importer données de vent à partir de fichiers NMEA
|
||||
bravoWindImport_Title=Importer données de vent à partir de fichiers Bravo
|
||||
showWindSpeedSeriesTooltip=Bascule la visibilité de la vitesse du vent pour toutes les sources de données
|
||||
showWindDirectionSeriesTooltip=Bascule la visibilité de la direction du vent pour toutes les sources de données
|
||||
combinedWindSourceTypeTooltip=Combine toutes les autres sources de vent en un ensemble de données
|
||||
@@ -973,7 +976,7 @@ rrs26Start=Départ RRS26
|
||||
sailingWorldCupStart=Départ coupe du monde de la voile
|
||||
setConfiguration=Activer configuration
|
||||
classFlag=Pavillon de classe
|
||||
classFlagHelpText=Active le pavillon de la classe utilisée pour {0}. Sélectionnez ''''Ne pas écraser'''' pour activer le pavillon par défaut pour ces instructions.
|
||||
classFlagHelpText=Active le pavillon de la classe utilisée pour {0}. Sélectionnez "Ne pas écraser" pour activer le pavillon par défaut pour ces instructions.
|
||||
individualRecallHelpText=Si cette option est activée, l''officiel de course a la possibilité d''appeler pour un rappel individuel.
|
||||
resultEntryHelpText=Si cette option est activée, l''officiel de course a la possibilité d''entrer des résultats pendant et après la phase d''arrivée.
|
||||
startmodeFlags=Pavillons de types de départ
|
||||
@@ -1014,12 +1017,12 @@ eMailMustNotBeEmpty=L''adresse e-mail ne doit pas être vide.
|
||||
emailAddress=Adresse e-mail
|
||||
password=Mot de passe
|
||||
searchTag=Balise de recherche
|
||||
doYouReallyWantToRemoveLeaderboard=Voulez-vous vraiment supprimer le palmarès ''''{0}'''' ?
|
||||
doYouReallyWantToRemoveLeaderboard=Voulez-vous vraiment supprimer le palmarès "{0}" ?
|
||||
metaLeaderboardCannotBeChanged=Ce palmarès est de type méta. Vous ne pouvez pas le modifier ici.
|
||||
failedToSetNewStartTime=Définition de la nouvelle heure de départ échouée. Cela peut arriver lorsque la même heure de départ existe déjà dans le journal de course ou lorsque quelqu''un d''autre a ajouté une heure de départ plus récente (sous forme d''ID de passage et d''heure logique) que celle que vous venez d''ajouter.
|
||||
doYouReallyWantToRemoveIgtimiAccount=Souhaitez-vous réellement supprimer le compte Igtimi qui permet à l''utilisateur {0} d''accéder aux données ?
|
||||
igtimiWindImport=Importer le vent depuis Igtimi
|
||||
seeIgtimiTabForAccountSettings=Afficher l''onglet ''''Igtimi'''' pour voir les options de compte qui déterminent quelles données Igtimi seront prises en compte.
|
||||
seeIgtimiTabForAccountSettings=Afficher l''onglet "Igtimi" pour voir les options de compte qui déterminent quelles données Igtimi seront prises en compte.
|
||||
importWindFromIgtimi=Importer le vent depuis Igtimi
|
||||
errorImportingIgtimiWind=Erreur lors de l''importation des données du vent depuis Igtimi : {0}
|
||||
resultFromIgtimiWindImport=Le nombre suivant de points vent ont été importés pour les courses référencées : {0}
|
||||
@@ -1401,7 +1404,7 @@ numberWindFixes=Points vent
|
||||
sailedMiles=Milles nautiques navigués
|
||||
millionValue={0,number,#0.0} mil
|
||||
billionValue={0,number,#0.0} bil
|
||||
noResults=Aucun résultat disponible. Vous pouvez consulter les ''Informations concurrents''.
|
||||
noResults=Aucun résultat disponible. Vous pouvez consulter les "Informations concurrents".
|
||||
noNews=Aucune actualité disponible.
|
||||
pointsValue={0,number,#0.00}
|
||||
openLeaderboard=Ouvrir palmarès
|
||||
@@ -1428,6 +1431,7 @@ runAQuery=Exécuter une requête
|
||||
latestRegattaStandings=Classement de régate le plus récent
|
||||
plainText=Texte brut
|
||||
columnChart=Diagramme à colonnes
|
||||
columnChartWithErrorBars=Diagramme à colonnes avec barres d''erreur
|
||||
choosePresentation=Sélectionner la présentation
|
||||
cantDisplayDataOfType=Affichage des données du type {0} impossible
|
||||
shownDecimals=Nombre de décimales
|
||||
@@ -1464,8 +1468,8 @@ groupAverageAscending=Moyenne du groupe (ascendant)
|
||||
groupAverageDescending=Moyenne du groupe (descendant)
|
||||
groupMedianAscending=Médiane du groupe (ascendant)
|
||||
groupMedianDescending=Médiane du groupe (descendant)
|
||||
resultsFoundForSearch={0,number} résultats trouvés pour ''''{1}''''
|
||||
resultsFoundForSearch[one]={0,number} résultat trouvé pour ''''{1}''''
|
||||
resultsFoundForSearch={0,number} résultats trouvés pour "{1}"
|
||||
resultsFoundForSearch[one]={0,number} résultat trouvé pour "{1}"
|
||||
runPredefinedQuery=Exécuter requête prédéfinie
|
||||
selectPredefinedQuery=Sélectionner requête prédéfinie
|
||||
predefinedQueryRunner=Outil d''exécution de requêtes prédéfinies
|
||||
@@ -1543,8 +1547,8 @@ playstoreCampaign=utm_source=sapsailing&utm_medium=solutions&utm_content=2016.02
|
||||
playstoreInsightApp=https://play.google.com/store/apps/details?id=com.sap.sailing.android.tracking.app
|
||||
playstoreRacecommitteeApp=https://play.google.com/store/apps/details?id=com.sap.sailing.racecommittee.app
|
||||
playStoreBuoyPingerApp=https://play.google.com/store/apps/details?id=com.sap.sailing.android.buoy.positioning.app
|
||||
playstoreBadge=https://play.google.com/intl/en/badges/images/badge_new.png
|
||||
appstoreSapSailInsight=http://appstore.com/sapsailinsight
|
||||
playstoreBadge=https://developer.android.com/images/brand/en_generic_rgb_wo_60.png
|
||||
appstoreSapSailInsight=https://itunes.apple.com/us/app/sap-sail-insight/id1087154208
|
||||
appstoreBadgeSuffix=_fr
|
||||
distanceFromAveragePosition=Distance de la position moyenne
|
||||
useATouchOptimizedUI=Utilisez une interface utilisateur tactile optimisée pour déplacer le point.
|
||||
@@ -1651,11 +1655,11 @@ winningLanes=Voies gagnantes
|
||||
maximumNumberOfDiscards=Nombre maximal d''éliminations
|
||||
externalLinks=Liens externes
|
||||
urlForAllLanguages=URL pour toutes les langues
|
||||
urlForLanguage=URL pour la langue ''''{0}''''
|
||||
urlForLanguage=URL pour la langue "{0}"
|
||||
notificationRegattaConfigurationUpdatedUsingByMarks=Configuration de régate active définie, en utilisant le concepteur de course « Par marques ».
|
||||
warningOverrideRegattaConfigurationCourseDesignerToByMarks=La configuration de régate active existe déjà, mais avec l''option de concepteur de course erronée.\nSouhaitez-vous écraser l''option de concepteur de course et valider "Par marques" ?
|
||||
allRacesHaveBeenDenoted=Toutes les courses ont été marquées pour un suivi par journal de course.
|
||||
chartSelectionHint=Astuce : Vous pouvez également utiliser le palmarès (sur l''onglet PALMARÈS) pour sélectionner les concurrents affichés dans le graphique.
|
||||
chartSelectionHint=Astuce : vous pouvez également utiliser le palmarès (sur l''onglet PALMARÈS) pour sélectionner les concurrents affichés dans le graphique.
|
||||
chooseALanguage=Sélectionner une langue
|
||||
solutions=Solutions
|
||||
blog=Blog
|
||||
@@ -1811,7 +1815,7 @@ noUpcomingRaceDataAvailable=Aucune donnée concernant la prochaine course n''est
|
||||
reallyRemoveSeries=Voulez-vous vraiment supprimer la série "{0}" ? Note : tous les journaux de la course seront également supprimés de manière permanente pour cette course.
|
||||
settingsId=ID d''options
|
||||
documentSettingsId=ID d''options du document
|
||||
settingsForId=Options pour l''ID ''''{0}''''
|
||||
settingsForId=Options pour l''ID "{0}"
|
||||
userProfileSettingsTabDescription=Les options utilisateur sont générées dans des boîtes de dialogues pour options que vous trouverez à de nombreux endroits sur la page. Cette vue montre toutes vos options regroupées pour les mettre techniquement à disposition des utilisateurs de référence. Soyez prudent : les entrées supprimées ne peuvent pas être restaurées.
|
||||
resetToDefault=Réinitialiser sur les valeurs par défaut
|
||||
resetToDefaultInProgress=Réinitialisation en cours...
|
||||
@@ -1859,8 +1863,54 @@ errorLoadingRegattas=Erreur lors de la tentative de chargement des régates {0}
|
||||
errorUpdatingRegatta=Erreur lors de la tentative de mise à jour des régates {0} : {1}
|
||||
errorLoadingRaceLog=Marquage pour suivi par journal de la course impossible : {0}
|
||||
errorStartingTracking=Échec du lancement du suivi {0} : {1}
|
||||
errorLoadingLeaderBoardByEvent=Erreur lors de la tentative de chargement du palmarès. Soit l''événement n''a pas pu être associé à la régate, soit aucune course suivie n''existe.
|
||||
errorLoadingEvent=Erreur lors de la tentative de chargement de l''événement ayant l''ID {0} : {1}
|
||||
errorLoadingRegattaStructure=Erreur lors de la tentative de chargement de régates pour l''événement ayant l''ID {0} : {1}
|
||||
errorLoadingLeaderBoardByEvent=Erreur lors de la tentative de chargement du palmarès. Soit la manifestation n''a pas pu être associée à la régate, soit aucune course suivie n''existe.
|
||||
errorLoadingEvent=Erreur lors de la tentative de chargement de la manifestation ayant l''ID {0} : {1}
|
||||
errorLoadingRegattaStructure=Erreur lors de la tentative de chargement de régates pour la manifestation ayant l''ID {0} : {1}
|
||||
showEstimatedDuration=Afficher la durée estimée
|
||||
estimatedDuration=Durée estimée :
|
||||
countDown=La manifestation commence dans {0} {1}
|
||||
countDownEnd=La manifestation commencera dans quelques secondes.
|
||||
moreLoginInformationHeadline=Avantages de SAP Sailing Analytics
|
||||
moreLoginInformationIntroduction=Si vous êtes un utilisateur inscrit sur SAP Sailing Analytics, vous avez accès à des fonctionnalités qui ne sont pas disponibles pour les utilisateurs anonymes. Inscrivez-vous pour accéder à toutes les fonctionnalités indiquées ci-dessous.
|
||||
moreLoginInformationSectionUserSettingsHeading=Options utilisateur
|
||||
moreLoginInformationSectionUserSettingsDescription=Certaines éléments de l''interface utilisateur peuvent être personnalisés. Les fonctionnalités de base sont accessibles à tous les utilisateurs, mais les utilisateurs authentifiés ont la possibilité de modifier leurs options. Celles-ci sont conservées dans leur profil utilisateur et disponibles sur n''importe quel appareil dès que l''utilisateur se connecte.
|
||||
moreLoginInformationSectionStrategySimulatorDescription=Le simulateur permet aux navigateurs de simuler des stratégies sur des portions de parcours grâce à des conditions de vent configurables. Le simulateur se base sur l''ensemble des données historiques disponibles dans SAP Sailing Analytics pour fournir des simulations de comportements de catégories de bateaux spécifiques les plus précises possibles.
|
||||
moreLoginInformationSectionUserNotificationsHeading=Notifications utilisateur
|
||||
moreLoginInformationSectionUserNotificationsDescription=Grâce aux notifications utilisateur, vous pouvez rester informé sur votre catégorie de bateau, votre équipe ou votre concurrent favoris. Vous avez la possibilité de vous abonner afin de recevoir des notifications par e-mail sur votre catégorie de bateau, votre équipe ou votre concurrent favoris, ainsi que sur les différentes courses à venir.
|
||||
anniversaryUnitText=Courses
|
||||
anniversaryUnitText[one]=Course
|
||||
anniversaryMajorCountdownTeaser=Attention ! Plus que {0,number,#,###} courses avant la {1,number,#,###}e course.
|
||||
anniversaryMajorCountdownTeaser[one]=Attention ! Plus qu''{0,number,#,###} course avant la {1,number,#,###}e course.
|
||||
anniversaryMajorCountdownDescription=Nous célébrons notre {0,number,#,###}e course sur www.sapsailing.com ! Quelle sera cette course ? L''organisateur de cette course anniversaire recevra 10 000 euros au profit de l''association caritative de son choix. Le gagnant sera annoncé sur ce site Web. Restez connecté et ne ratez pas le compte à rebours !
|
||||
anniversaryRepdigitCountdownTeaser=Attention ! Plus que {0,number,#,###} courses avant la {1,number,#,###}e course.
|
||||
anniversaryRepdigitCountdownTeaser[one]=Attention ! Plus qu''{0,number,#,###} course avant la {1,number,#,###}e course.
|
||||
anniversaryRepdigitCountdownDescription=Nous célébrons notre numéro de course porte-bonheur ! Qui effectuera la {0,number, #,###}e course sur www.sapsailing.com ? Les participants de cette course seront invités à un festival d''été de haut niveau par SAP. Les gagnants seront annoncés sur ce site Web. Restez connecté et ne ratez pas le compte à rebours !
|
||||
anniversaryAnnouncementTeaser=Mission accomplie ! {0,number,#,###} courses avec SAP Sailing Analytics !
|
||||
anniversaryAnnouncementDescription=3, 2, 1... Félicitation aux participants de la course {0}. Vous avez gagné ! Nous vous remercions pour la confiance que vous accordez à SAP Sailing Analytics et nous espérons partager encore de nombreuses courses avec vous !
|
||||
anniversaryRaceLinkText=Afficher la course anniversaire
|
||||
minimumFoilingSegmentsDurationInSeconds=Durée minimum du tronçon en planing (s)
|
||||
minimumFoilingSegmentsDurationInSecondsTooltip=Laissez vide ou indiquez 0 si vous ne voulez pas que la durée minimum soit limitée. Les tronçons de planing dont la durée est inférieure à celle-ci ne seront pas reportés.
|
||||
maximumSpeedNotFoilingInKnots=Vitesse fond maximale sans déjauger (nds)
|
||||
maximumSpeedNotFoilingInKnotsTooltip=Vitesse fond maximale en nœuds qu''un bateau peut atteindre sans déjauger. Toute vitesse supérieure à celle-ci sera reportée comme du déjaugeage, quelles que soient les données indiquées par le capteur de hauteur de planing. Laissez vide si vous souhaitez également vous référer au capteur de hauteur de planing pour les vitesses élevées.
|
||||
minimumSpeedForFoilingInKnots=Vitesse fond minimale pour déjauger (nds)
|
||||
minimumSpeedForFoilingInKnotsTooltip=Vitesse fond minimale en nœuds qu''un bateau doit atteindre pour pouvoir déjauger. Si la vitesse est inférieure à celle-ci, la hauteur de planing sera ignorée et le bateau ne sera pas considéré comme étant en déjaugeage. Laissez vide ou indiquez 0 si vous souhaitez également vous référer au capteur de hauteur de planing pour les vitesses faibles.
|
||||
minimumRideHeightInMeters=Hauteur de planing minimale (m)
|
||||
minimumRideHeightInMetersTooltip=Hauteur de planing minimale requise en mètres pour qu''une bateau soit considéré comme étant en état de déjaugeage.
|
||||
minimumDurationBetweenAdjacentFoilingSegmentsInSeconds=Durée minimum (s) entre deux tronçons en planing adjacents
|
||||
minimumDurationBetweenAdjacentFoilingSegmentsInSecondsTooltip=Si cette valeur est renseignée et que la durée entre deux tronçons de planing adjacents est inférieure à celle-ci, ces tronçons de planing adjacents seront combinés en un seul.
|
||||
needToProvideValidMinimumRideHeight=Vous devez fournir une valeur de hauteur de planing minimale valide en mètres.
|
||||
dataMiningErrorMargins=Marges d''erreur
|
||||
elements={0} éléments
|
||||
chooseDifferentDimensionTitle=Sélectionnez une dimension différente.
|
||||
chooseDifferentDimensionMessage=Sélectionnez une dimension différente pour regrouper les résultats.
|
||||
pleaseSelectADimension=Sélectionnez une dimension.
|
||||
currentPortDaggerboardRake=Inclinaison de la dérive bâbord
|
||||
currentPortDaggerboardRakeTooltip=Inclinaison actuelle de la dérive bâbord
|
||||
currentStbdDaggerboardRake=Inclinaison de la dérive tribord
|
||||
currentStbdDaggerboardRakeTooltip=Inclinaison actuelle de la dérive tribord
|
||||
currentPortRudderRake=Inclinaison du gouvernail bâbord
|
||||
currentPortRudderRakeTooltip=Inclinaison actuelle du gouvernail bâbord
|
||||
currentStbdRudderRake=Inclinaison du gouvernail tribord
|
||||
currentStbdRudderRakeTooltip=Inclinaison actuelle du gouvernail tribord
|
||||
currentMastRotationInDegree=Rotation du mât
|
||||
currentMastRotationInDegreeTooltip=Rotation actuelle du mât en degrés
|
||||
+53
-3
@@ -448,7 +448,8 @@ scoringSchemeLowPointForLeagueOverallLeaderboardDescription=順位決定のた
|
||||
scoringSchemeLowPointTieBreakBasedOnLastSeriesOnly=低得点方式、最終シリーズのみに基づいて順位を決定
|
||||
scoringSchemeLowPointTieBreakBasedOnLastSeriesOnlyDescription=順序を決定するための低得点方式の通常のカウントダウン方式ではなく、2 艇の競技者の得点が同一の場合に、除外するレースなしに最終シリーズの得点を考慮します。
|
||||
scoringSchemeLowPointWithAutomaticRdg=低得点方式、RDG (救済を受けた艇) はすべての非 RDG (Redress give) スコアの平均に基づくデフォルトスコアを獲得
|
||||
scoringSchemeHighPointFirstGetsOne=高得点方式、1 位が 1 点
|
||||
scoringSchemeHighPointFirstGetsOne=高得点方式、勝者が 1 点、敗者が 0 点を獲得
|
||||
scoringSchemeHighPointFirstGetsOneDescription=高得点方式、勝者が 1 点、敗者が 0 点を獲得します。順位の決定は、同順位が崩れた最終の直接比較に基づいて行われます。直接比較が繰り返されている場合、競技者は対等に扱われます。(まだ) 直接対戦していない競技者は勝敗グラフにおける位置に基づいて並べられます。
|
||||
scoringSchemeHighPointFirstGetsTen=高得点方式、1 位が 10 点
|
||||
scoringSchemeHighPointFirstGetsTenOrEight=高得点方式、1 位が 10 点 (または 8 点)
|
||||
scoringSchemeHighPointFirstGetsTenOrEightDescription=得点数によるスコアです。1 位が 10 点、2 位が 9 点などと得点します。同点となった場合は、より多くのレースで勝者となった競技者を上位とします。それでも同順位となる場合には、最終レースでの得点でのランクで順位を決定します。
|
||||
@@ -571,6 +572,7 @@ knotsValue={0,number,#0.0} kt
|
||||
knotsRange={0,number,#0.0} - {1,number,#0.0} kt
|
||||
generatePolarSheet=ポーラーシート生成
|
||||
polars=ポーラーダイアグラム
|
||||
foilingSegments=フォイリングしたセグメント
|
||||
polarSheetChart=ポーラーシート
|
||||
polarSheetMinimumDataSizePerGraph=グラフ別の最小データポイント数
|
||||
polarSheetMinimumDataSizePerGraphTooltip=基礎となるデータポイントが少ないグラフはすべては表示されません。\nこのようにして、十分なデータ量を欠いている\n風速で注意を逸らすダイアグラムは表示されません。
|
||||
@@ -902,6 +904,7 @@ windImport_ResultEntry=レース: {0} ({1}) - {2} フィックス 開始: {3}
|
||||
windImport_ResultError=エラー: {0}
|
||||
gribWindImport_Title=風を GRIB ファイルからインポート
|
||||
nmeaWindImport_Title=風を NMEA ファイルからインポート
|
||||
bravoWindImport_Title=風を Bravo ファイルからインポート
|
||||
showWindSpeedSeriesTooltip=すべてのデータソースに対する風速の表示を切替
|
||||
showWindDirectionSeriesTooltip=すべてのデータソースに対する風向の表示を切替
|
||||
combinedWindSourceTypeTooltip=他のすべての風源を 1 つのデータセットに結合
|
||||
@@ -1428,6 +1431,7 @@ runAQuery=クエリを実行
|
||||
latestRegattaStandings=レガッタ最新順位表
|
||||
plainText=プレーンテキスト
|
||||
columnChart=縦棒グラフ
|
||||
columnChartWithErrorBars=縦棒グラフ (エラーバーあり)
|
||||
choosePresentation=プレゼンテーション選択
|
||||
cantDisplayDataOfType={0} タイプのデータは表示できません。
|
||||
shownDecimals=小数点表示
|
||||
@@ -1543,8 +1547,8 @@ playstoreCampaign=utm_source=sapsailing&utm_medium=solutions&utm_content=2016.02
|
||||
playstoreInsightApp=https://play.google.com/store/apps/details?id=com.sap.sailing.android.tracking.app
|
||||
playstoreRacecommitteeApp=https://play.google.com/store/apps/details?id=com.sap.sailing.racecommittee.app
|
||||
playStoreBuoyPingerApp=https://play.google.com/store/apps/details?id=com.sap.sailing.android.buoy.positioning.app
|
||||
playstoreBadge=https://play.google.com/intl/en/badges/images/badge_new.png
|
||||
appstoreSapSailInsight=http://appstore.com/sapsailinsight
|
||||
playstoreBadge=https://developer.android.com/images/brand/en_generic_rgb_wo_60.png
|
||||
appstoreSapSailInsight=https://itunes.apple.com/us/app/sap-sail-insight/id1087154208
|
||||
appstoreBadgeSuffix=_en
|
||||
distanceFromAveragePosition=平均位置からの距離
|
||||
useATouchOptimizedUI=タッチ最適化 UI を使用してフィックスを移動
|
||||
@@ -1864,3 +1868,49 @@ errorLoadingEvent=ID {0} のイベントをロードしようとしてエラー
|
||||
errorLoadingRegattaStructure=ID {0} のイベントに対してレガッタをロードしようとしてエラーが発生: {1}
|
||||
showEstimatedDuration=推定持続時間の表示
|
||||
estimatedDuration=推定持続時間:
|
||||
countDown=イベントは {0} {1} に開始
|
||||
countDownEnd=このイベントはあと数秒で開始します
|
||||
moreLoginInformationHeadline=SAP Sailing Analytics にサインインする利点
|
||||
moreLoginInformationIntroduction=SAP Sailing Analytics の登録ユーザーには、匿名ユーザーに許されていない機能へのアクセス権限があります。登録を行って、下記の機能にアクセスしてください。
|
||||
moreLoginInformationSectionUserSettingsHeading=ユーザー設定
|
||||
moreLoginInformationSectionUserSettingsDescription=ユーザーインタフェースの多くの部分は、ユーザーが設定を変更できるようになっています。基本的な機能は全ユーザーに共通ですが、認証ユーザーの設定はユーザープロファイルに保存されているため、サインインするだけでどのデバイスでも利用することができます。
|
||||
moreLoginInformationSectionStrategySimulatorDescription=シミュレータにより、セーラーは設定可能な風況に基づいて各レグの戦略をシミュレートすることが可能です。このシミュレータは SAP Sailing Analytics で利用可能なすべての履歴データに基づいており、特定の艇種の動作について正確なシミュレーションが提供されます。
|
||||
moreLoginInformationSectionUserNotificationsHeading=ユーザー通知
|
||||
moreLoginInformationSectionUserNotificationsDescription=ユーザー通知は、お気に入りの競技者/チームまたは艇種についての最新情報を得るための簡単な方法です。お気に入りのセーラー/チームまたは艇種についての新しい結果、特定の艇種で予定されているレースに関するメールベースの通知を購読できます。
|
||||
anniversaryUnitText=レース
|
||||
anniversaryUnitText[one]=レース
|
||||
anniversaryMajorCountdownTeaser=カウントダウン情報です。{1,number,#,###} 番目のレースまでもうわずか {0,number,#,###} レースです。
|
||||
anniversaryMajorCountdownTeaser[one]=カウントダウン情報です。{1,number,#,###} 番目のレースまでもうわずか {0,number,#,###} レースです。
|
||||
anniversaryMajorCountdownDescription=SAP では、www.sapsailing.com における {0,number,#,###} 番目のレースを祝うことにしています。どのレースがゴールテープを切るでしょうか。その記念レースの主催者には、義援目的で合計で 10,000 ユーロが贈呈されます。当選者はこの Web サイトで発表されます。引き続きご注目いただき、一緒にカウントダウンしていきましょう。
|
||||
anniversaryRepdigitCountdownTeaser=カウントダウン情報です。{1,number,#,###} 番目のレースまでもうわずか {0,number,#,###} レースです。
|
||||
anniversaryRepdigitCountdownTeaser[one]=カウントダウン情報です。{1,number,#,###} 番目のレースまでもうわずか {0,number,#,###} レースです。
|
||||
anniversaryRepdigitCountdownDescription=SAP では、縁起のいい番号のレースを祝うことにしています。www.sapsailing.com における {0,number, #,###} 番目のレースは誰が行うことになるでしょうか。そのレースの参加者には、SAP から最上級のサマーフェスティバルが無料で提供されます。当選者はこの Web サイトで発表されます。引き続きご注目いただき、一緒にカウントダウンしていきましょう。
|
||||
anniversaryAnnouncementTeaser=SAP Sailing Analytics で {0,number,#,###} レースというミッションが達成されました。
|
||||
anniversaryAnnouncementDescription=3、2、1...。レース {0} の参加者のみなさん、おめでとうございます。当選をお知らせします。SAP Sailing Analytics をご信頼いただきありがとうございます。さらに 10,000 レースをご一緒に帆走できることを願っております。
|
||||
anniversaryRaceLinkText=記念レース表示
|
||||
minimumFoilingSegmentsDurationInSeconds=フォイリングセグメントの最短時間 (秒)
|
||||
minimumFoilingSegmentsDurationInSecondsTooltip=最短時間で制限しない場合は、空白にするか、0 に設定してください。これより短いフォイリングセグメントはレポートされません。
|
||||
maximumSpeedNotFoilingInKnots=フォイリングなし最大対地速力 (kt)
|
||||
maximumSpeedNotFoilingInKnotsTooltip=フォイリング状態にならずに艇が帆走できる最大対地速力。これより速力が速ければ、浮上高さセンサーの値に関係なくフォイリングとしてレポートされます。速力が速くても浮上高さセンサーに依存する場合は空白のままにします。
|
||||
minimumSpeedForFoilingInKnots=フォイリング最小対地速力 (kt)
|
||||
minimumSpeedForFoilingInKnotsTooltip=フォイリングが可能となるために艇が帆走しなければならない最小対地速力 (kt)。これより遅い場合、浮上高さは無視され、艇はフォイリングしていないとみなされます。速力が低くても浮上高さセンサーに依存するには、空白のままにするか、0 に設定します。
|
||||
minimumRideHeightInMeters=最小浮上高さ (m)
|
||||
minimumRideHeightInMetersTooltip=艇がフォイリング状態にあるとみなされるために必要な最小浮上高さ (m)
|
||||
minimumDurationBetweenAdjacentFoilingSegmentsInSeconds=隣り合ったフォイリングセグメント間の最小時間 (秒)
|
||||
minimumDurationBetweenAdjacentFoilingSegmentsInSecondsTooltip=空白でなく、隣り合った 2 つのフォイリングセグメント間の時間がこの値より小さい場合、隣り合ったこれらのフォイリングセグメントは 1 つにマージされます。
|
||||
needToProvideValidMinimumRideHeight=浮上高さの有効な値をメートル単位で指定する必要があります。
|
||||
dataMiningErrorMargins=エラーマージン
|
||||
elements={0} 要素
|
||||
chooseDifferentDimensionTitle=異なる次元の選択
|
||||
chooseDifferentDimensionMessage=結果をグルーピングするための異なる次元を選択してください
|
||||
pleaseSelectADimension=次元を選択してください
|
||||
currentPortDaggerboardRake=左舷ダガーボード傾斜角
|
||||
currentPortDaggerboardRakeTooltip=現在の左舷ダガーボード傾斜角
|
||||
currentStbdDaggerboardRake=右舷ダガーボード傾斜角
|
||||
currentStbdDaggerboardRakeTooltip=現在の右舷ダガーボード傾斜角
|
||||
currentPortRudderRake=左舷ラダー傾斜角
|
||||
currentPortRudderRakeTooltip=現在の左舷ラダー傾斜角
|
||||
currentStbdRudderRake=右舷ラダー傾斜角
|
||||
currentStbdRudderRakeTooltip=現在の右舷ラダー傾斜角
|
||||
currentMastRotationInDegree=マスト回転
|
||||
currentMastRotationInDegreeTooltip=現在のマスト回転 (度)
|
||||
+53
-3
@@ -448,7 +448,8 @@ scoringSchemeLowPointForLeagueOverallLeaderboardDescription=Em vez do habitual s
|
||||
scoringSchemeLowPointTieBreakBasedOnLastSeriesOnly=Sistema linear, desempates só com base na última série
|
||||
scoringSchemeLowPointTieBreakBasedOnLastSeriesOnlyDescription=Em vez do habitual sistema de contagem regressiva para esquemas lineares para efetuar os desempates, a pontuação da série final sem corridas excluídas é considerada se dois competidores tiverem pontuações iguais.
|
||||
scoringSchemeLowPointWithAutomaticRdg=Sistema linear, a RDG recebe a pontuação padrão com base na média de todas as pontuações não RDG
|
||||
scoringSchemeHighPointFirstGetsOne=Sistema de bônus, o vencedor recebe 1 ponto
|
||||
scoringSchemeHighPointFirstGetsOne=Sistema de bônus, o vencedor recebe 1 ponto, o perdedor 0
|
||||
scoringSchemeHighPointFirstGetsOneDescription=Sistema de bônus, o vencedor recebe 1 ponto, o perdedor 0; os desempates são efetuados com base na comparação direta com a última comparação direta de outro desempate; se ocorrerem ciclos nas comparações diretas, os competidores são tratados da mesma forma; os competidores que (ainda) não competiram uns com os outros são ordenados com base na sua posição no diagrama de vitórias/derrotas.
|
||||
scoringSchemeHighPointFirstGetsTen=Sistema de bônus, o vencedor recebe 10 pontos
|
||||
scoringSchemeHighPointFirstGetsTenOrEight=Sistema de bônus, o vencedor recebe 10 pontos (ou 8)
|
||||
scoringSchemeHighPointFirstGetsTenOrEightDescription=Pontuação em pontos. O vencedor pontua 10 pontos, o 2º - 9 pontos, .... Um desempate é efetuado a favor do competidor que ganhou o maior número de corridas, se o empate continuar, então o desempate é efetuado pela posição na última corrida pontuada.
|
||||
@@ -571,6 +572,7 @@ knotsValue={0,number,#0.0} nós
|
||||
knotsRange={0,number,#0.0} - {1,number,#0.0} nós
|
||||
generatePolarSheet=Gerar folha de carta polar
|
||||
polars=Diagramas da carta polar
|
||||
foilingSegments=Segmentos com hidrofólio
|
||||
polarSheetChart=Folha de carta polar
|
||||
polarSheetMinimumDataSizePerGraph=Pontos de dados mínimos por diagrama
|
||||
polarSheetMinimumDataSizePerGraphTooltip=Todos os diagramas com menos pontos de dados subjacentes não são exibidos visualmente.\nDessa forma, não existem distrações com diagramas para\nvelocidades do vento sem dados suficientes.
|
||||
@@ -902,6 +904,7 @@ windImport_ResultEntry=Corrida: {0} ({1}) - {2} pontos fixos de: {3} para: {4}
|
||||
windImport_ResultError=Erro: {0}
|
||||
gribWindImport_Title=Importar vento de arquivos GRIB
|
||||
nmeaWindImport_Title=Importar vento de arquivos NMEA
|
||||
bravoWindImport_Title=Importar vento de arquivos Bravo
|
||||
showWindSpeedSeriesTooltip=Comuta a visibilidade da velocidade do vento para todas as fontes de dados
|
||||
showWindDirectionSeriesTooltip=Comuta a visibilidade da direção do vento para todas as fontes de dados
|
||||
combinedWindSourceTypeTooltip=Combina todas as outras origens do vento em um conjunto de dados
|
||||
@@ -1428,6 +1431,7 @@ runAQuery=Executar uma consulta
|
||||
latestRegattaStandings=Posições da última regata
|
||||
plainText=Texto simples
|
||||
columnChart=Diagrama de colunas
|
||||
columnChartWithErrorBars=Diagrama de colunas com barras de erros
|
||||
choosePresentation=Selecionar apresentação
|
||||
cantDisplayDataOfType=Não é possível exibir dados do tipo {0}
|
||||
shownDecimals=Decimais exibidos
|
||||
@@ -1543,8 +1547,8 @@ playstoreCampaign=utm_source=sapsailing&utm_medium=solutions&utm_content=2016.02
|
||||
playstoreInsightApp=https://play.google.com/store/apps/details?id=com.sap.sailing.android.tracking.app
|
||||
playstoreRacecommitteeApp=https://play.google.com/store/apps/details?id=com.sap.sailing.racecommittee.app
|
||||
playStoreBuoyPingerApp=https://play.google.com/store/apps/details?id=com.sap.sailing.android.buoy.positioning.app
|
||||
playstoreBadge=https://play.google.com/intl/en/badges/images/badge_new.png
|
||||
appstoreSapSailInsight=http://appstore.com/sapsailinsight
|
||||
playstoreBadge=https://developer.android.com/images/brand/en_generic_rgb_wo_60.png
|
||||
appstoreSapSailInsight=https://itunes.apple.com/us/app/sap-sail-insight/id1087154208
|
||||
appstoreBadgeSuffix=_en
|
||||
distanceFromAveragePosition=Distância da posição média
|
||||
useATouchOptimizedUI=Utilizar uma IU otimizada para toque para reposicionar o ponto fixo
|
||||
@@ -1864,3 +1868,49 @@ errorLoadingEvent=Erro ao tentar carregar evento com o ID {0}: {1}
|
||||
errorLoadingRegattaStructure=Erro ao tentar carregar regatas para evento com o ID {0}: {1}
|
||||
showEstimatedDuration=Exibir duração estimada
|
||||
estimatedDuration=duração estimada:
|
||||
countDown=O evento começa em {0} {1}
|
||||
countDownEnd=O evento irá começar dentro de alguns segundos
|
||||
moreLoginInformationHeadline=Benefícios da conexão ao SAP Sailing Analytics
|
||||
moreLoginInformationIntroduction=Como usuário registrado do SAP Sailing Analytics, você tem acesso a funções que não estão abertas para usuários anônimos. Registre-se simplesmente para ter acesso às funcionalidades exibidas embaixo.
|
||||
moreLoginInformationSectionUserSettingsHeading=Configurações do usuário
|
||||
moreLoginInformationSectionUserSettingsDescription=Muitas partes da interface do usuário estão ativadas para fornecer configurações modificáveis pelo usuário. Enquanto a funcionalidade básica está disponível para todos, as configurações de usuários autenticados estão armazenadas no perfil do usuário e estão disponíveis em qualquer dispositivo estabelecendo a conexão.
|
||||
moreLoginInformationSectionStrategySimulatorDescription=O simulador permite que os velejadores simulem estratégias para pernas com base em condições do vento configuráveis. O simulador se baseia em todos os dados históricos disponíveis no SAP Sailing Analytics para fornecer simulações do comportamento exato de classes de barcos específicas.
|
||||
moreLoginInformationSectionUserNotificationsHeading=Notificações do usuário
|
||||
moreLoginInformationSectionUserNotificationsDescription=As notificações do usuário são uma forma fácil de manter você atualizado em relação a seu competidor/equipe ou classe de barcos favoritos. Você pode assinar notificações com base no e-mail sobre novos resultados para seu velejador/equipe ou classe de barcos favoritos e sobre as próximas corridas de classes de barcos específicas.
|
||||
anniversaryUnitText=Corridas
|
||||
anniversaryUnitText[one]=Corrida
|
||||
anniversaryMajorCountdownTeaser=Contagem regressiva! Só restam {0,number,#,###} corridas até a {1,number,#,###}ª corrida.
|
||||
anniversaryMajorCountdownTeaser[one]=Contagem regressiva! Só resta {0,number,#,###} corrida até a {1,number,#,###}ª corrida.
|
||||
anniversaryMajorCountdownDescription=Estamos celebrando nossa {0,number,#,###}ª corrida em www.sapsailing.com! Que corrida ultrapassará a marca? O organizador desta corrida de comemoração receberá um total de 10.000 Euros para fins beneficentes. O vencedor será anunciado neste site. Fique atento e conte conosco.
|
||||
anniversaryRepdigitCountdownTeaser=Contagem regressiva! Só restam {0,number,#,###} corridas até a {1,number,#,###}ª corrida.
|
||||
anniversaryRepdigitCountdownTeaser[one]=Contagem regressiva! Só resta {0,number,#,###} corrida até a {1,number,#,###}ª corrida.
|
||||
anniversaryRepdigitCountdownDescription=Estamos celebrando a corrida do nosso número da sorte! Quem fará parte da {0,number, #,###}ª corrida em www.sapsailing.com? Os participantes desta corrida receberão entradas gratuitas no festival de verão de topo da SAP. Os vencedores serão anunciados neste site. Fique atento e conte conosco.
|
||||
anniversaryAnnouncementTeaser=Missão cumprida! {0,number,#,###} corridas com o SAP Sailing Analytics!
|
||||
anniversaryAnnouncementDescription=3,2,1... Felicitamos os participantes da corrida {0}. Você conseguiu! Agradecemos sua confiança no SAP Sailing Analytics e esperamos continuar velejando mais 10.000 corridas com você!
|
||||
anniversaryRaceLinkText=Exibir corrida de comemoração
|
||||
minimumFoilingSegmentsDurationInSeconds=Duração mínima de segmento de navegação com hidrofólio (s)
|
||||
minimumFoilingSegmentsDurationInSecondsTooltip=Deixe em branco ou defina como 0 se você não quiser restringir a duração mínima. Os segmentos de navegação com hidrofólio inferiores a este não serão reportados.
|
||||
maximumSpeedNotFoilingInKnots=Velocidade máxima no fundo sem navegação com hidrofólio (nós)
|
||||
maximumSpeedNotFoilingInKnotsTooltip=Velocidade máxima no fundo em nós que um barco pode velejar sem estar no estado de navegação com hidrofólio. Qualquer velocidade superior a esta será reportada como navegação com hidrofólio, independentemente da indicação do sensor de altura de flutuação. Deixe em branco se você também quiser confiar no sensor de altura de flutuação para velocidades elevadas.
|
||||
minimumSpeedForFoilingInKnots=Velocidade mínima no fundo para navegação com hidrofólio (nós)
|
||||
minimumSpeedForFoilingInKnotsTooltip=Velocidade mínima no fundo em nós a que um barco deve velejar para conseguir navegar com hidrofólio. Se tiver uma velocidade inferior a esta, a altura da flutuação será ignorada e o barco será considerado como não estando em navegação com hidrofólio. Deixe em branco ou defina como 0 para também confiar no sensor de altura de flutuação para velocidades baixas.
|
||||
minimumRideHeightInMeters=Altura mínima de flutuação (m)
|
||||
minimumRideHeightInMetersTooltip=A altura mínima de flutuação em metros necessária para que um barco seja considerado como estando no estado de navegação com hidrofólio.
|
||||
minimumDurationBetweenAdjacentFoilingSegmentsInSeconds=Duração mínima entre segmentos adjacentes de navegação com hidrofólio (s)
|
||||
minimumDurationBetweenAdjacentFoilingSegmentsInSecondsTooltip=Se não estiver em branco e o tempo entre dois segmentos adjacentes de navegação com hidrofólio for inferior a este, esses segmentos adjacentes de navegação com hidrofólio serão consolidados em um.
|
||||
needToProvideValidMinimumRideHeight=Você precisa fornecer um valor válido da altura mínima de flutuação em metros.
|
||||
dataMiningErrorMargins=Margens de erro
|
||||
elements={0} elementos
|
||||
chooseDifferentDimensionTitle=Selecionar dimensão diferente
|
||||
chooseDifferentDimensionMessage=Selecionar uma dimensão diferente para os resultados do agrupamento
|
||||
pleaseSelectADimension=Selecione uma dimensão
|
||||
currentPortDaggerboardRake=Inclinação bolina bombordo
|
||||
currentPortDaggerboardRakeTooltip=A inclinação atual da bolina para bombordo
|
||||
currentStbdDaggerboardRake=Inclinação bolina boreste
|
||||
currentStbdDaggerboardRakeTooltip=A inclinação atual da bolina para boreste
|
||||
currentPortRudderRake=Inclinação leme bombordo
|
||||
currentPortRudderRakeTooltip=A inclinação atual do leme para bombordo
|
||||
currentStbdRudderRake=Inclinação leme boreste
|
||||
currentStbdRudderRakeTooltip=A inclinação atual do leme para boreste
|
||||
currentMastRotationInDegree=Rotação do mastro
|
||||
currentMastRotationInDegreeTooltip=A rotação atual do mastro em graus
|
||||
+54
-4
@@ -448,7 +448,8 @@ scoringSchemeLowPointForLeagueOverallLeaderboardDescription=Вместо обы
|
||||
scoringSchemeLowPointTieBreakBasedOnLastSeriesOnly=Низкий балл, равенство разрешается только по последней серии
|
||||
scoringSchemeLowPointTieBreakBasedOnLastSeriesOnlyDescription=Вместо обычной системы обратного отсчета, используемой для разрешения равенства в системах низких баллов, при равенстве оценок двух участников учитывается оценка последней серии без исключенных гонок.
|
||||
scoringSchemeLowPointWithAutomaticRdg=Система низких баллов, RDG получает оценку по умолчанию на основе среднего всех оценок без RDG
|
||||
scoringSchemeHighPointFirstGetsOne=Высокий балл, победитель получает 1 балл
|
||||
scoringSchemeHighPointFirstGetsOne=Высокий балл, победитель получает 1 балл, проигравший получает 0 баллов
|
||||
scoringSchemeHighPointFirstGetsOneDescription=Высокий балл, победитель получает 1 балл, проигравший получает 0 баллов; равенство разрешается путем прямого сравнения с последним прямым сравнением при разрешении другого равенства; если в прямом сравнении обнаружен цикл, участники считаются равными; участники, (еще) не соревновавшиеся друг против друга, располагаются согласно позициям в графе побед/поражений.
|
||||
scoringSchemeHighPointFirstGetsTen=Высокий балл, победитель получает 10 баллов
|
||||
scoringSchemeHighPointFirstGetsTenOrEight=Высокий балл, победитель получает 10 баллов (или 8)
|
||||
scoringSchemeHighPointFirstGetsTenOrEightDescription=Оценка в баллах. Победитель получает 10 баллов, 2-й — 9 баллов, .... Равенство разрешается в пользу участника, имеющего больше побед в гонках. Если равенство сохраняется, оно разрешается по рангу в последней гонке.
|
||||
@@ -571,6 +572,7 @@ knotsValue={0,number,#0.0} уз
|
||||
knotsRange={0,number,#0.0}-{1,number,#0.0} уз
|
||||
generatePolarSheet=Генерировать полярные данные
|
||||
polars=Полярные диаграммы
|
||||
foilingSegments=Сегменты в крыльевом режиме
|
||||
polarSheetChart=Полярные данные
|
||||
polarSheetMinimumDataSizePerGraph=Минимум точек данных на граф
|
||||
polarSheetMinimumDataSizePerGraphTooltip=Все графы с меньшим объемом базовых данных не визуализируются.\nЭто устраняет отображение диаграмм\nпо скоростям ветра с недостаточным объемом данных.
|
||||
@@ -902,6 +904,7 @@ windImport_ResultEntry=Гонка: {0} ({1}) – {2} зам. из: {3} в: {4}
|
||||
windImport_ResultError=Ошибка: {0}
|
||||
gribWindImport_Title=Импорт ветра из файлов GRIB
|
||||
nmeaWindImport_Title=Импорт ветра из файлов NMEA
|
||||
bravoWindImport_Title=Импорт ветра из файлов Bravo
|
||||
showWindSpeedSeriesTooltip=Переключает видимость скорости ветра для всех источников данных
|
||||
showWindDirectionSeriesTooltip=Переключает видимость направления ветра для всех источников данных
|
||||
combinedWindSourceTypeTooltip=Объединяет все другие источники ветра в один набор данных
|
||||
@@ -1428,6 +1431,7 @@ runAQuery=Выполнить запрос
|
||||
latestRegattaStandings=Позиции в последней регате
|
||||
plainText=Простой текст
|
||||
columnChart=Столбчатая диаграмма
|
||||
columnChartWithErrorBars=Столбчатая диаграмма с планками погрешностей
|
||||
choosePresentation=Выберите представление
|
||||
cantDisplayDataOfType=Невозможно отобразить данные типа {0}
|
||||
shownDecimals=Отображаемые десятичные разряды
|
||||
@@ -1464,7 +1468,7 @@ groupAverageAscending=Среднее группы (по возрастанию)
|
||||
groupAverageDescending=Среднее группы (по убыванию)
|
||||
groupMedianAscending=Медиана группы (по возрастанию)
|
||||
groupMedianDescending=Медиана группы (по убыванию)
|
||||
resultsFoundForSearch=Найдено{0,number} результатов для ''{1}''
|
||||
resultsFoundForSearch=Найдено {0,number} результатов для ''{1}''
|
||||
resultsFoundForSearch[one]=Найден {0,number} результат для ''{1}''
|
||||
runPredefinedQuery=Выполнить готовый запрос
|
||||
selectPredefinedQuery=Выбрать готовый запрос
|
||||
@@ -1543,8 +1547,8 @@ playstoreCampaign=utm_source=sapsailing&utm_medium=solutions&utm_content=2016.02
|
||||
playstoreInsightApp=https://play.google.com/store/apps/details?id=com.sap.sailing.android.tracking.app
|
||||
playstoreRacecommitteeApp=https://play.google.com/store/apps/details?id=com.sap.sailing.racecommittee.app
|
||||
playStoreBuoyPingerApp=https://play.google.com/store/apps/details?id=com.sap.sailing.android.buoy.positioning.app
|
||||
playstoreBadge=https://play.google.com/intl/en/badges/images/badge_new.png
|
||||
appstoreSapSailInsight=http://appstore.com/sapsailinsight
|
||||
playstoreBadge=https://developer.android.com/images/brand/en_generic_rgb_wo_60.png
|
||||
appstoreSapSailInsight=https://itunes.apple.com/us/app/sap-sail-insight/id1087154208
|
||||
appstoreBadgeSuffix=_en
|
||||
distanceFromAveragePosition=Дистанция от средней позиции
|
||||
useATouchOptimizedUI=Используйте сенсорный UI для перемещения замера
|
||||
@@ -1864,3 +1868,49 @@ errorLoadingEvent=Ошибка при попытке загрузить собы
|
||||
errorLoadingRegattaStructure=Ошибка при попытке загрузить регаты для события с ид. {0} : {1}
|
||||
showEstimatedDuration=Показать оценку длительности
|
||||
estimatedDuration=оценка длительности:
|
||||
countDown=Начало события в {0} {1}
|
||||
countDownEnd=Событие начнется через несколько секунд
|
||||
moreLoginInformationHeadline=Преимущества регистрации в SAP Sailing Analytics
|
||||
moreLoginInformationIntroduction=Зарегистрированные пользователи SAP Sailing Analytics имеют доступ к функциям, которые закрыты для анонимных пользователей. Зарегистрируйтесь, чтобы получить доступ к перечисленным ниже функциям.
|
||||
moreLoginInformationSectionUserSettingsHeading=Настройки пользователя
|
||||
moreLoginInformationSectionUserSettingsDescription=Пользователи могут изменять многие настройки в своем интерфейсе. Базовые функции доступны всем пользователям, однако зарегистрированные пользователи могут хранить свои настройки в профиле и получать к ним доступ на любом устройстве.
|
||||
moreLoginInformationSectionStrategySimulatorDescription=Симулятор позволяет мореходам моделировать стратегии для разных отрезков на основе настраиваемых атмосферных условий. Симулятор основан на исторических данных SAP Sailing Analytics и позволяет точно предсказать поведение лодок разных классов.
|
||||
moreLoginInformationSectionUserNotificationsHeading=Уведомления для пользователя
|
||||
moreLoginInformationSectionUserNotificationsDescription=Уведомления — это удобный способ вовремя получать информацию о любимых участниках, командах и классах лодок. Подпишитесь на рассылку по электронной почте, чтобы следить за результатами нужных участников, команд или лодок определенного класса, а также о будущих гонках в определенном классе.
|
||||
anniversaryUnitText=Гонки
|
||||
anniversaryUnitText[one]=Гонка
|
||||
anniversaryMajorCountdownTeaser=Обратный отсчет! До {1,number,#,###} гонки осталось всего {0,number,#,###} гонки(ок).
|
||||
anniversaryMajorCountdownTeaser[one]=Обратный отсчет! До {1,number,#,###} гонки осталась всего {0,number,#,###} гонка.
|
||||
anniversaryMajorCountdownDescription={0,number,#,###}-ая гонка на сайте www.sapsailing.com! Какая из них станет юбилейной? Организатор юбилейной гонки получит 10 000 евро, которые сможет потратить в благотворительных целях. Победитель будет объявлен на нашем сайте, оставайтесь с нами.
|
||||
anniversaryRepdigitCountdownTeaser=Обратный отсчет! До {1,number,#,###} гонки осталось всего {0,number,#,###} гонки(ок).
|
||||
anniversaryRepdigitCountdownTeaser[one]=Обратный отсчет! До {1,number,#,###} гонки осталась всего {0,number,#,###} гонка.
|
||||
anniversaryRepdigitCountdownDescription=Ждем гонку под счастливым номером! Чья гонка станет {0,number, #,###}-ой на сайте www.sapsailing.com? Участники этой гонки получат право на участие в бесплатном высококлассном летнем фестивале от SAP Победитель будет объявлен на нашем сайте, оставайтесь с нами.
|
||||
anniversaryAnnouncementTeaser=Миссия выполнена! Проведено {0,number,#,###} гонок с SAP Sailing Analytics!
|
||||
anniversaryAnnouncementDescription=3, 2, 1... Поздравляем участников гонк {0}. Вы победили! Спасибо, что пользуетесь SAP Sailing Analytics. Надеюсь, нас с вами ждет еще множество гонок!
|
||||
anniversaryRaceLinkText=Показать юбилейную гонку
|
||||
minimumFoilingSegmentsDurationInSeconds=Минимальная продолжительность сегмента в крыльевом режиме (сек)
|
||||
minimumFoilingSegmentsDurationInSecondsTooltip=Укажите 0 или оставьте поле пустым, чтобы не ограничивать минимальную длительность. Сегменты в крыльевом режиме длительностью меньше указанного значения не будут учитываться.
|
||||
maximumSpeedNotFoilingInKnots=Максимальная скорость относительно грунта без перехода в крыльевой режим (уз)
|
||||
maximumSpeedNotFoilingInKnotsTooltip=Максимальная скорость относительно грунта (в узлах), на которой может идти лодка без перехода в крыльевой режим. Скорость, превышающая это значение, будет сообщена как переход в крыльевой режим вне зависимости от показаний датчика высоты просвета. Оставьте поле пустым, чтобы учитывать показания датчика высоты просвета на высокой скорости.
|
||||
minimumSpeedForFoilingInKnots=Минимальная скорость относительно грунта для перехода в крыльевой режим (уз)
|
||||
minimumSpeedForFoilingInKnotsTooltip=Минимальная скорость относительно грунта (в узлах), на которой должна идти лодка для перехода в крыльевой режим. Если скорость не превышает это значение, высота просвета будет проигнорирована, и лодка считается идущей не в крыльевом режиме. Укажите 0 или оставьте поле пустым, чтобы учитывать показания датчика высоты просвета на низкой скорости.
|
||||
minimumRideHeightInMeters=Минимальная высота просвета (м)
|
||||
minimumRideHeightInMetersTooltip=Минимальная высота просвета (в метрах), по достижении которой лодка считается идущей в крыльевом режиме
|
||||
minimumDurationBetweenAdjacentFoilingSegmentsInSeconds=Минимальная продолжительность между двумя сегментами в крыльевом режиме (сек)
|
||||
minimumDurationBetweenAdjacentFoilingSegmentsInSecondsTooltip=Если поле не является пустым, и время между двумя смежными сегментами в крыльевом режиме не превышает указанное значение, смежные сегменты в крыльевом режиме считаются одним сегментом.
|
||||
needToProvideValidMinimumRideHeight=Укажите действительное значение минимальной высоты просвета в метрах.
|
||||
dataMiningErrorMargins=Пределы погрешности
|
||||
elements={0} элем.
|
||||
chooseDifferentDimensionTitle=Выберите другое измерение
|
||||
chooseDifferentDimensionMessage=Выберите другое измерение для группирования результатов
|
||||
pleaseSelectADimension=Выберите измерение
|
||||
currentPortDaggerboardRake=Скос киля на левый борт
|
||||
currentPortDaggerboardRakeTooltip=Текущий скос выдвижного киля на левый борт
|
||||
currentStbdDaggerboardRake=Скос киля на правый борт
|
||||
currentStbdDaggerboardRakeTooltip=Текущий скос выдвижного киля на правый борт
|
||||
currentPortRudderRake=Скос задней кромки руля на левый борт
|
||||
currentPortRudderRakeTooltip=Текущий скос задней кромки руля на левый борт
|
||||
currentStbdRudderRake=Скос задней кромки руля на правый борт
|
||||
currentStbdRudderRakeTooltip=Текущий скос задней кромки руля на правый борт
|
||||
currentMastRotationInDegree=Вращение мачты
|
||||
currentMastRotationInDegreeTooltip=Текущее значение вращения мачты в градусах
|
||||
+54
-4
@@ -23,7 +23,7 @@ races=比赛轮次
|
||||
tracked=跟踪
|
||||
linkedRaces=链接的比赛轮次
|
||||
time=时间
|
||||
timeTooltip=参赛队在此航段航行的时间。 第一航段的时间从参赛队越过起航线算起。
|
||||
timeTooltip=参赛队在此航段航行的时间。第一航段的时间从参赛队越过起航线算起。
|
||||
playSpeed=播放速度
|
||||
playSpeedHelp=使用 "1" 以正常回放速度播放,"2" 以倍速回放等
|
||||
playModeLive=实时
|
||||
@@ -448,7 +448,8 @@ scoringSchemeLowPointForLeagueOverallLeaderboardDescription=与用于低分记
|
||||
scoringSchemeLowPointTieBreakBasedOnLastSeriesOnly=低分,仅根据上一系列赛打破平局。
|
||||
scoringSchemeLowPointTieBreakBasedOnLastSeriesOnlyDescription=与用于低分记分系统打破平局的常规倒算系统不同,如果两支参赛队的得分相同,则考虑不排除比赛轮次的总决赛系列赛的得分。
|
||||
scoringSchemeLowPointWithAutomaticRdg=低分系统,RDG 根据所有非 RDG 得分的平均值获得默认得分
|
||||
scoringSchemeHighPointFirstGetsOne=高分,获胜者得 1 分
|
||||
scoringSchemeHighPointFirstGetsOne=高分,获胜者得 1 分,败者 0 分
|
||||
scoringSchemeHighPointFirstGetsOneDescription=高分,获胜者得 1 分,败者 0 分;根据与打破其他平局的上次直接比较进行直接比较打破平局;如果直接比较中出现循环赛,公平对待参赛队;根据输赢图中的位置将(尚未)互相比赛的参赛队排序。
|
||||
scoringSchemeHighPointFirstGetsTen=高分,获胜者得 10 分
|
||||
scoringSchemeHighPointFirstGetsTenOrEight=高分,获胜者得 10 分(或 8 分)
|
||||
scoringSchemeHighPointFirstGetsTenOrEightDescription=得分。 获胜者得 10 分、第 2 名 9 分、.... 以赢得最多比赛轮次的参赛队取得胜利,如果仍有平局,则以最后一个比赛轮次的名次打破平局。
|
||||
@@ -571,6 +572,7 @@ knotsValue={0,number,#0.0} kts
|
||||
knotsRange={0,number,#0.0} - {1,number,#0.0} kts
|
||||
generatePolarSheet=生成极坐标表
|
||||
polars=极坐标图
|
||||
foilingSegments=水翼腾空段
|
||||
polarSheetChart=极坐标表
|
||||
polarSheetMinimumDataSizePerGraph=各图形的最小数据点
|
||||
polarSheetMinimumDataSizePerGraphTooltip=不显示基础数据点较少的所有图形。\n这样就不会为数据量不足的风速\n显示分散图。
|
||||
@@ -902,6 +904,7 @@ windImport_ResultEntry=比赛轮次: {0} ({1}) - {2} 修复自: {3}至: {4
|
||||
windImport_ResultError=错误: {0}
|
||||
gribWindImport_Title=从 GRIB 文件导入风力数据
|
||||
nmeaWindImport_Title=从 NMEA 文件导入风力数据
|
||||
bravoWindImport_Title=从 Bravo 文件导入风力数据
|
||||
showWindSpeedSeriesTooltip=切换所有数据源的风速的可见性
|
||||
showWindDirectionSeriesTooltip=切换所有数据源的风向的可见性
|
||||
combinedWindSourceTypeTooltip=将所有其他风源组合到一个数据集中
|
||||
@@ -1428,6 +1431,7 @@ runAQuery=运行查询
|
||||
latestRegattaStandings=最新比赛排名
|
||||
plainText=纯文本
|
||||
columnChart=柱状图
|
||||
columnChartWithErrorBars=含误差线的柱状图
|
||||
choosePresentation=选择介绍
|
||||
cantDisplayDataOfType=无法显示类型为{0}的数据
|
||||
shownDecimals=显示小数
|
||||
@@ -1543,8 +1547,8 @@ playstoreCampaign=utm_source=sapsailing&utm_medium=solutions&utm_content=2016.02
|
||||
playstoreInsightApp=https://play.google.com/store/apps/details?id=com.sap.sailing.android.tracking.app
|
||||
playstoreRacecommitteeApp=https://play.google.com/store/apps/details?id=com.sap.sailing.racecommittee.app
|
||||
playStoreBuoyPingerApp=https://play.google.com/store/apps/details?id=com.sap.sailing.android.buoy.positioning.app
|
||||
playstoreBadge=https://play.google.com/intl/en/badges/images/badge_new.png
|
||||
appstoreSapSailInsight=http://appstore.com/sapsailinsight
|
||||
playstoreBadge=https://developer.android.com/images/brand/en_generic_rgb_wo_60.png
|
||||
appstoreSapSailInsight=https://itunes.apple.com/us/app/sap-sail-insight/id1087154208
|
||||
appstoreBadgeSuffix=_en
|
||||
distanceFromAveragePosition=与平均位置的距离
|
||||
useATouchOptimizedUI=使用触摸优化的 UI 移动修复
|
||||
@@ -1864,3 +1868,49 @@ errorLoadingEvent=尝试加载编号为{0}的活动出错:{1}
|
||||
errorLoadingRegattaStructure=尝试为编号为{0}的活动加载比赛出错:{1}
|
||||
showEstimatedDuration=显示预计持续时间
|
||||
estimatedDuration=预计持续时间:
|
||||
countDown=活动于{0} {1}开始
|
||||
countDownEnd=活动将在数秒后开始
|
||||
moreLoginInformationHeadline=注册 SAP Sailing Analytics 的优势
|
||||
moreLoginInformationIntroduction=作为 SAP Sailing Analytics 的注册用户,您可以访问尚未对匿名用户开放的功能。注册即可访问以下显示的功能。
|
||||
moreLoginInformationSectionUserSettingsHeading=用户设置
|
||||
moreLoginInformationSectionUserSettingsDescription=用户界面的许多部分提供用户可更改的设置。虽然每个人都可以使用基本功能,但经过身份验证的用户的设置存储在用户参数文件中,只需登录就可以在任何设备上使用。
|
||||
moreLoginInformationSectionStrategySimulatorDescription=水手可以使用模拟器根据可配置的风力条件模拟航段策略。此模拟器基于 SAP Sailing Analytics 中可用的所有历史数据,以提供有关特定船只级别准确行为的模拟。
|
||||
moreLoginInformationSectionUserNotificationsHeading=用户通知
|
||||
moreLoginInformationSectionUserNotificationsDescription=用户通知是让您及时了解最喜欢的参赛队/船队或船只级别最新动态的简单方法。您可以订阅基于邮件的通知,了解最喜爱的水手/船队或船只级别的新结果,以及即将进行的特定船只级别的比赛。
|
||||
anniversaryUnitText=比赛轮次
|
||||
anniversaryUnitText[one]=比赛轮次
|
||||
anniversaryMajorCountdownTeaser=倒计时!距离第{1,number,#,###}轮比赛仅剩{0,number,#,###}轮比赛。
|
||||
anniversaryMajorCountdownTeaser[one]=倒计时!距离第{1,number,#,###}轮比赛仅剩{0,number,#,###}轮比赛。
|
||||
anniversaryMajorCountdownDescription=我们正在 www.sapsailing.com 上庆祝第{0,number,#,###}轮比赛!哪轮比赛会打破记录?本周年纪念赛的主办机构将获得共计 10,000 欧元作为慈善用途。获胜者将在本网站上公布。敬请关注,让我们拭目以待。
|
||||
anniversaryRepdigitCountdownTeaser=倒计时!距离第{1,number,#,###}轮比赛仅剩{0,number,#,###}轮比赛。
|
||||
anniversaryRepdigitCountdownTeaser[one]=倒计时!距离第{1,number,#,###}轮比赛仅剩{0,number,#,###}轮比赛。
|
||||
anniversaryRepdigitCountdownDescription=我们正在庆祝幸运号码赛!谁将在 www.sapsailing.com 上进行的第{0,number, #,###}轮比赛中获胜?这次比赛的参赛者将获得 SAP 提供的免费一流夏日嘉年华活动。获胜者将在本网站上公布。敬请关注,让我们拭目以待。
|
||||
anniversaryAnnouncementTeaser=任务圆满完成!使用 SAP Sailing Analytics 完成{0,number,#,###}轮比赛!
|
||||
anniversaryAnnouncementDescription=3,2,1...我们祝贺{0}比赛的参赛者。你们做到了!我们感谢您对 SAP Sailing Analytics 的信任,并希望与你们在以后的 10,000 多场比赛中继续并肩作战!
|
||||
anniversaryRaceLinkText=显示周年纪念赛
|
||||
minimumFoilingSegmentsDurationInSeconds=最短水翼腾空段持续时间 (s)
|
||||
minimumFoilingSegmentsDurationInSecondsTooltip=如果不限制最短持续时间,则留空或设为 0。将不报告短于此值的水翼腾空段。
|
||||
maximumSpeedNotFoilingInKnots=无水翼腾空的最大实际速度 (kts)
|
||||
maximumSpeedNotFoilingInKnotsTooltip=船只在非水翼腾空状态下可以航行的最大实际速度(节)。不论行驶高度感应器显示什么内容,都会将快于此速度的任何速度报告为水翼腾空。如果希望行驶高度感应器也用于高速,则留空。
|
||||
minimumSpeedForFoilingInKnots=水翼腾空的最小实际速度 (kts)
|
||||
minimumSpeedForFoilingInKnotsTooltip=船只实现水翼腾空必须航行的最小实际速度(节)。如果慢于此值,将忽略行驶高度,并将船只视为水翼未腾空。留空或设为 0,以将行驶高度感应器也用于低速。
|
||||
minimumRideHeightInMeters=最小行驶高度 (m)
|
||||
minimumRideHeightInMetersTooltip=将船只视为处于水翼腾空状态所需的最小行驶高度(米)
|
||||
minimumDurationBetweenAdjacentFoilingSegmentsInSeconds=相邻水翼腾空段之间的最短持续时间 (s)
|
||||
minimumDurationBetweenAdjacentFoilingSegmentsInSecondsTooltip=如果不为空,并且两个相邻水翼腾空段之间的时间短于此值,会将这些相邻的水翼腾空段合并成一个。
|
||||
needToProvideValidMinimumRideHeight=您需要提供有效的最小行驶高度值(米)。
|
||||
dataMiningErrorMargins=误差容限
|
||||
elements={0}元素
|
||||
chooseDifferentDimensionTitle=选择不同的维度
|
||||
chooseDifferentDimensionMessage=为分组结果选择不同的维度
|
||||
pleaseSelectADimension=请选择维度
|
||||
currentPortDaggerboardRake=左舷活动披水板倾斜度
|
||||
currentPortDaggerboardRakeTooltip=当前左舷活动披水板倾斜度
|
||||
currentStbdDaggerboardRake=右舷活动披水板倾斜度
|
||||
currentStbdDaggerboardRakeTooltip=当前右舷活动披水板倾斜度
|
||||
currentPortRudderRake=左舵倾斜度
|
||||
currentPortRudderRakeTooltip=当前左舵倾斜度
|
||||
currentStbdRudderRake=右舵倾斜度
|
||||
currentStbdRudderRakeTooltip=当前右舵倾斜度
|
||||
currentMastRotationInDegree=桅杆旋转度
|
||||
currentMastRotationInDegreeTooltip=当前桅杆旋转度数
|
||||
-1
@@ -29,7 +29,6 @@ public class MultiCompetitorRaceChartSettingsComponent extends
|
||||
private final DetailType initialFirstDetailType;
|
||||
private final DetailType initialSecondDetailType;
|
||||
private final List<DetailType> availableDetailsTypes;
|
||||
|
||||
|
||||
public MultiCompetitorRaceChartSettingsComponent(MultiCompetitorRaceChartSettings settings,
|
||||
StringMessages stringMessages, List<DetailType> availableDetailTypes) {
|
||||
|
||||
+1
-1
@@ -176,7 +176,7 @@ public class AuthenticationManagerImpl implements AuthenticationManager {
|
||||
@Override
|
||||
public void logout() {
|
||||
userService.logout();
|
||||
eventBus.fireEvent(new AuthenticationRequestEvent());
|
||||
eventBus.fireEvent(new AuthenticationRequestEvent(AuthenticationPlaces.SIGN_IN));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+20
-7
@@ -24,6 +24,8 @@ import com.sap.sse.security.ui.authentication.view.AuthenticationView;
|
||||
*/
|
||||
public class AuthenticationPlaceManagementController extends WrappedPlaceManagementController {
|
||||
|
||||
private final AuthenticationClientFactory clientFactory;
|
||||
|
||||
/**
|
||||
* Creates a new {@link AuthenticationPlaceManagementController} instance with the given parameters.
|
||||
*
|
||||
@@ -35,14 +37,25 @@ public class AuthenticationPlaceManagementController extends WrappedPlaceManagem
|
||||
public AuthenticationPlaceManagementController(AuthenticationClientFactory clientFactory,
|
||||
AuthenticationCallback callback, AuthenticationView authenticationView, EventBus globalEventBus) {
|
||||
super(new Configuration(clientFactory, callback, authenticationView));
|
||||
globalEventBus.addHandler(AuthenticationContextEvent.TYPE, new AuthenticationContextEvent.Handler() {
|
||||
@Override
|
||||
public void onUserChangeEvent(AuthenticationContextEvent event) {
|
||||
AuthenticationPlaceManagementController.this.fireEvent(event);
|
||||
}
|
||||
});
|
||||
this.clientFactory = clientFactory;
|
||||
globalEventBus.addHandler(AuthenticationContextEvent.TYPE, this::fireEvent);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Tells the wrapped framework to go to the {@link Place} represented by the given {@link AuthenticationPlaces}
|
||||
* instance is no user is logged in. Otherwise the wrapped framework will go to the {@link LoggedInUserInfoPlace
|
||||
* user info} page.
|
||||
*
|
||||
* @param authPlace
|
||||
* {@link AuthenticationPlaces} instance representing a {@link Place} instance to go to
|
||||
*
|
||||
* @see #goTo(Place)
|
||||
*/
|
||||
public void goTo(AuthenticationPlaces authPlace) {
|
||||
final boolean isLoggedIn = clientFactory.getAuthenticationManager().getAuthenticationContext().isLoggedIn();
|
||||
super.goTo(isLoggedIn ? new LoggedInUserInfoPlace() : authPlace.getPlace());
|
||||
}
|
||||
|
||||
private static class Configuration implements PlaceManagementConfiguration {
|
||||
private final AuthenticationClientFactory clientFactory;
|
||||
private final AuthenticationCallback callback;
|
||||
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
package com.sap.sse.security.ui.authentication;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import com.sap.sse.security.ui.authentication.create.CreateAccountPlace;
|
||||
import com.sap.sse.security.ui.authentication.signin.SignInPlace;
|
||||
|
||||
/**
|
||||
* Enumeration to specify a requested {@link AbstractAuthenticationPlace authentication places}.
|
||||
*/
|
||||
public enum AuthenticationPlaces {
|
||||
|
||||
/** {@link AuthenticationPlaces} representation for {@link SignInPlace} */
|
||||
SIGN_IN(SignInPlace::new),
|
||||
/** {@link AuthenticationPlaces} representation for {@link CreateAccountPlace} */
|
||||
CREATE_ACCOUNT(CreateAccountPlace::new);
|
||||
|
||||
private final Supplier<? extends AbstractAuthenticationPlace> placeSupplier;
|
||||
|
||||
private AuthenticationPlaces(Supplier<? extends AbstractAuthenticationPlace> placeSupplier) {
|
||||
this.placeSupplier = placeSupplier;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return new instance of the {@link AbstractAuthenticationPlace} represented by this {@link AuthenticationPlaces}
|
||||
*/
|
||||
public AbstractAuthenticationPlace getPlace() {
|
||||
return this.placeSupplier.get();
|
||||
}
|
||||
|
||||
}
|
||||
+10
-1
@@ -9,10 +9,19 @@ import com.google.gwt.event.shared.GwtEvent;
|
||||
public class AuthenticationRequestEvent extends GwtEvent<AuthenticationRequestEvent.Handler> {
|
||||
public static final Type<Handler> TYPE = new Type<AuthenticationRequestEvent.Handler>();
|
||||
|
||||
private final AuthenticationPlaces requestedPlace;
|
||||
|
||||
public AuthenticationRequestEvent(AuthenticationPlaces requestedPlace) {
|
||||
this.requestedPlace = requestedPlace;
|
||||
}
|
||||
|
||||
public interface Handler extends EventHandler {
|
||||
void onUserManagementRequestEvent(AuthenticationRequestEvent event);
|
||||
}
|
||||
|
||||
|
||||
public AuthenticationPlaces getRequestedPlace() {
|
||||
return requestedPlace;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type<Handler> getAssociatedType() {
|
||||
|
||||
+2
-1
@@ -1,6 +1,7 @@
|
||||
package com.sap.sse.security.ui.authentication.decorator;
|
||||
|
||||
import com.google.web.bindery.event.shared.EventBus;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationPlaces;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationRequestEvent;
|
||||
|
||||
/**
|
||||
@@ -19,6 +20,6 @@ public class FlyoutNotLoggedInPresenter implements NotLoggedInPresenter {
|
||||
|
||||
@Override
|
||||
public void doTriggerLoginForm() {
|
||||
eventBus.fireEvent(new AuthenticationRequestEvent());
|
||||
eventBus.fireEvent(new AuthenticationRequestEvent(AuthenticationPlaces.SIGN_IN));
|
||||
}
|
||||
}
|
||||
+2
-1
@@ -7,6 +7,7 @@ import com.google.gwt.user.client.ui.AcceptsOneWidget;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationCallback;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationClientFactory;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationContextEvent;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationPlaces;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationRequestEvent;
|
||||
import com.sap.sse.security.ui.authentication.signin.SignInPlace;
|
||||
|
||||
@@ -45,7 +46,7 @@ public class LoggedInUserInfoActivity extends AbstractActivity implements Logged
|
||||
|
||||
@Override
|
||||
public void gotoProfileUi() {
|
||||
eventBus.fireEvent(new AuthenticationRequestEvent());
|
||||
eventBus.fireEvent(new AuthenticationRequestEvent(AuthenticationPlaces.SIGN_IN));
|
||||
callback.handleUserProfileNavigation();
|
||||
}
|
||||
|
||||
|
||||
+14
-6
@@ -2,9 +2,11 @@ package com.sap.sse.security.ui.authentication.view;
|
||||
|
||||
import com.google.web.bindery.event.shared.EventBus;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationContextEvent;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationPlaceManagementController;
|
||||
import com.sap.sse.security.ui.authentication.AuthenticationRequestEvent;
|
||||
import com.sap.sse.security.ui.authentication.WrappedPlaceManagementController;
|
||||
import com.sap.sse.security.ui.authentication.app.AuthenticationContext;
|
||||
import com.sap.sse.security.ui.authentication.create.CreateAccountPlace;
|
||||
|
||||
/**
|
||||
* Default implementation of {@link AuthenticationMenuView.Presenter} and {@link FlyoutAuthenticationView.Presenter} to
|
||||
@@ -33,7 +35,7 @@ public class FlyoutAuthenticationPresenter implements AuthenticationMenuView.Pre
|
||||
*/
|
||||
public FlyoutAuthenticationPresenter(final FlyoutAuthenticationView flyoutAuthenticationView,
|
||||
final AuthenticationMenuView authenticationMenuView,
|
||||
WrappedPlaceManagementController authenticationPlaceManagementController,
|
||||
AuthenticationPlaceManagementController authenticationPlaceManagementController,
|
||||
EventBus eventBus, AuthenticationContext initialAuthentication) {
|
||||
this.flyoutAuthenticationView = flyoutAuthenticationView;
|
||||
this.authenticationMenuView = authenticationMenuView;
|
||||
@@ -44,11 +46,9 @@ public class FlyoutAuthenticationPresenter implements AuthenticationMenuView.Pre
|
||||
authenticationMenuView.setPresenter(this);
|
||||
flyoutAuthenticationView.setAutoHidePartner(authenticationMenuView);
|
||||
|
||||
eventBus.addHandler(AuthenticationRequestEvent.TYPE, new AuthenticationRequestEvent.Handler() {
|
||||
@Override
|
||||
public void onUserManagementRequestEvent(AuthenticationRequestEvent event) {
|
||||
toggleFlyout();
|
||||
}
|
||||
eventBus.addHandler(AuthenticationRequestEvent.TYPE, event -> {
|
||||
flyoutAuthenticationView.show();
|
||||
authenticationPlaceManagementController.goTo(event.getRequestedPlace());
|
||||
});
|
||||
|
||||
eventBus.addHandler(AuthenticationContextEvent.TYPE, new AuthenticationContextEvent.Handler() {
|
||||
@@ -60,6 +60,14 @@ public class FlyoutAuthenticationPresenter implements AuthenticationMenuView.Pre
|
||||
authenticationMenuView.setAuthenticated(initialAuthentication.isLoggedIn());
|
||||
}
|
||||
|
||||
public void showRegister() {
|
||||
if (!flyoutAuthenticationView.isShowing()) {
|
||||
flyoutAuthenticationView.show();
|
||||
authenticationPlaceManagementController.start();
|
||||
authenticationPlaceManagementController.goTo(new CreateAccountPlace());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void toggleFlyout() {
|
||||
if (flyoutAuthenticationView.isShowing()) {
|
||||
|
||||
+3
@@ -105,3 +105,6 @@ resetToDefault=Reinicializar los valores predeterminados
|
||||
resetToDefaultInProgress=Reinicializando...
|
||||
settingsRemoved=Parametrizaciones por defecto restablecidas
|
||||
settingsRemovedError=No se han podido restablecer las parametrizaciones por defecto
|
||||
showMoreInfoLogin=Regístrese para acceder a más funciones
|
||||
dismiss=Más tarde
|
||||
moreInfo=Más info
|
||||
+3
@@ -105,3 +105,6 @@ resetToDefault=Réinitialiser sur les valeurs par défaut
|
||||
resetToDefaultInProgress=Réinitialisation en cours...
|
||||
settingsRemoved=Options par défaut restaurées
|
||||
settingsRemovedError=Impossible de restaurer les options par défaut
|
||||
showMoreInfoLogin=Connectez-vous pour accéder à davantage de fonctionnalités
|
||||
dismiss=Plus tard
|
||||
moreInfo=Plus d''infos
|
||||
+3
@@ -105,3 +105,6 @@ resetToDefault=デフォルトに戻す
|
||||
resetToDefaultInProgress=リセット中です...
|
||||
settingsRemoved=デフォルト設定が復元されました
|
||||
settingsRemovedError=デフォルト設定を復元できませんでした
|
||||
showMoreInfoLogin=サインインして追加機能へのアクセス権限を取得してください
|
||||
dismiss=後で
|
||||
moreInfo=追加情報
|
||||
+3
@@ -105,3 +105,6 @@ resetToDefault=Reinicializar para padrão
|
||||
resetToDefaultInProgress=Na reinicialização...
|
||||
settingsRemoved=Configurações padrão restauradas
|
||||
settingsRemovedError=Não foi possível restaurar configurações padrão
|
||||
showMoreInfoLogin=Efetue o logon para obter acesso a mais funcionalidades
|
||||
dismiss=Mais tarde
|
||||
moreInfo=Mais informação
|
||||
+3
@@ -105,3 +105,6 @@ resetToDefault=Сбросить на значения по умолчанию
|
||||
resetToDefaultInProgress=Выполняется сброс...
|
||||
settingsRemoved=Настройки по умолчанию восстановлены
|
||||
settingsRemovedError=Не удалось восстановить настройки по умолчанию
|
||||
showMoreInfoLogin=Выполните вход, чтобы получить доступ к дополнительным функциям
|
||||
dismiss=Позже
|
||||
moreInfo=Дополнительная информация
|
||||
+3
@@ -105,3 +105,6 @@ resetToDefault=重置为默认值
|
||||
resetToDefaultInProgress=正在重置...
|
||||
settingsRemoved=默认设置已恢复
|
||||
settingsRemovedError=无法恢复默认设置
|
||||
showMoreInfoLogin=请登录,以访问更多功能
|
||||
dismiss=稍后
|
||||
moreInfo=更多信息
|
||||
Reference in new issue
Block a user