diff --git a/MyTracks/res/values-ca/strings.xml b/MyTracks/res/values-ca/strings.xml
index 3f92a445a..f78a48027 100644
--- a/MyTracks/res/values-ca/strings.xml
+++ b/MyTracks/res/values-ca/strings.xml
@@ -197,20 +197,9 @@ limitations under the License.
No es pot iniciar l\'enregistrament. Proveu de nou.
S\'està enregistrant la ruta...
Ara s\'està enregistrant una ruta nova.
- hora
- hores
- kilòmetres per hora
- kilòmetres
- milles per hora
- milles
- minut
- minuts
- Sense distància My Tracks
+ Sense distància My Tracks
per kilòmetre
per milla
- segon
- segons
- My Tracks %1$.2f %2$s en %3$s at %4$s %5$s
Quant a My Tracks
Benvingut
diff --git a/MyTracks/res/values-de/strings.xml b/MyTracks/res/values-de/strings.xml
index 861080237..c41e32754 100644
--- a/MyTracks/res/values-de/strings.xml
+++ b/MyTracks/res/values-de/strings.xml
@@ -208,20 +208,9 @@ limitations under the License.
Fuß
Std
Min
- Stunde
- Stunden
- Kilometer pro Stunde
- Kilometer
- Meilen pro Stunde
- Meilen
- Minute
- Minuten
- My Tracks keine Entfernung
+ My Tracks keine Entfernung
pro Kilometer
pro Meile
- Sekunde
- Sekunden
- My Tracks %1$.2f %2$s in %3$s mit %4$s %5$s
Über My Tracks
Willkommen
diff --git a/MyTracks/res/values-es/strings.xml b/MyTracks/res/values-es/strings.xml
index b6a093e87..da4485502 100644
--- a/MyTracks/res/values-es/strings.xml
+++ b/MyTracks/res/values-es/strings.xml
@@ -41,7 +41,6 @@ limitations under the License.
Esperando una ubicación mas exacta del GPS. Asegúrese que el cielo sea visible.
Error importando el archivo %s
No se encontraron archivos GPX en %s. Es posible que la tarjeta SD no sea accesible o que el directorio no contenga archivos GPX.
- Importados %1$d de %2$d archivos GPX de %3$s
Descripción de señal
Nombre de señal
Tipo de señal (por ejemplo, edificio, bache, atracción...)
@@ -250,20 +249,9 @@ limitations under the License.
Grabando su recorrido...
Grabando un nuevo recorrido.
pies
- hora
- horas
- kilómetros por hora
- kilómetros
- millas por hora
- millas
- minuto
- minutos
- My Tracks sin distancia
+ My Tracks sin distancia
por kilómetro
por milla
- segundo
- segundos
- My Tracks %1$.2f %2$s en %3$s a %4$s %5$s
Sobre My Tracks
Bienvenido
diff --git a/MyTracks/res/values-fi/strings.xml b/MyTracks/res/values-fi/strings.xml
index 53f85482c..115c4e849 100644
--- a/MyTracks/res/values-fi/strings.xml
+++ b/MyTracks/res/values-fi/strings.xml
@@ -44,7 +44,6 @@ limitations under the License.
Odotetaan parempaa GPS-yhteyttä. Varmista että taivas on näkyvissä.
Virhe tuotaessa tiedostoa %s
Lähteestä %s ei löytynyt GPX-tiedostoja. SD-kortti saattaa olla lukukelvoton tai hakemistossa ei ole GPX-tiedostoja.
- Tuotu %1$d GPX-tiedostoa %2$d:sta lähteestä %3$s
Merkinnän kuvaus
Merkinnän nimi
Merkinnän tyyppi (esim. rakennus, kuoppa, nähtävyys...)
@@ -250,20 +249,9 @@ limitations under the License.
min/mi
rpm
W
- tunti
- tuntia
- kilometriä tunnissa
- kilometriä
- mailia tunnissa
- mailia
- minuutti
- minuuttia
- My Tracks ei etäisyyttä
+ My Tracks ei etäisyyttä
per kilometri
per maili
- sekunti
- sekuntia
- My Tracks %1$.2f %2$s ajassa %3$s nopeudella %4$s %5$s
Tietoa My Tracksista
Tervetuloa
diff --git a/MyTracks/res/values-fr/strings.xml b/MyTracks/res/values-fr/strings.xml
index 162c25ee0..7ae9959b3 100644
--- a/MyTracks/res/values-fr/strings.xml
+++ b/MyTracks/res/values-fr/strings.xml
@@ -198,18 +198,9 @@ limitations under the License.
pied
km/h
mi/h
- heure
- heures
- kilomètres/heure
- kilomètres
- miles/heure
- milles
- My Tracks pas de distance disponible
+ My Tracks pas de distance disponible
par kilomètre
per mile
- seconde
- secondes
- My Tracks %1$.2f %2$s en %3$s at %4$s %5$s
À propos de My Tracks
Bienvenue
diff --git a/MyTracks/res/values-it/strings.xml b/MyTracks/res/values-it/strings.xml
index 131e275a3..78bb7d0f5 100644
--- a/MyTracks/res/values-it/strings.xml
+++ b/MyTracks/res/values-it/strings.xml
@@ -170,20 +170,9 @@ limitations under the License.
min
min/km
min/mi
- ora
- ore
- chilometri orari
- chilometri
- miglia orarie
- miglia
- minuto
- minuti
- Mai Tracks Distanza non disponibile
+ Mai Tracks Distanza non disponibile
per chilometro
per miglio
- secondo
- secondi
- Mai Tracks %1$.2f %2$s in %3$s a %4$s %5$s
Informazioni su My Tracks
Benvenuto
diff --git a/MyTracks/res/values-ja/strings.xml b/MyTracks/res/values-ja/strings.xml
index f736cde23..398dcccae 100644
--- a/MyTracks/res/values-ja/strings.xml
+++ b/MyTracks/res/values-ja/strings.xml
@@ -42,7 +42,6 @@ limitations under the License.
GPS位置精度がよくなるまで待機しています.空が見えるところにいて下さい.
ファイル %s のインポートエラー
%s ではGPXファイルがありません.SDカードを読み込めないかディレクトリにGPXファイルが無いかも知れません.
- %3$s からGPXファイル %2$d件のうち %1$d件をインポートしました
マーカー説明
マーカー名
マーカータイプ(建物、洞穴、名所...)
@@ -226,20 +225,9 @@ limitations under the License.
新しいトラックを記録中です.
時
分
- 時
- 時
- キロメータ毎時
- キロメータ
- マイル毎時
- マイル
- 分
- 分
- My Tracks 移動していません
+ My Tracks 移動していません
毎キロメータ
毎マイル
- 秒
- 秒
- My Tracks %1$.2f %2$s 時間 %3$s 速度/ペース %4$s %5$s
My Tracksについて
ようこそ
diff --git a/MyTracks/res/values-pl/strings.xml b/MyTracks/res/values-pl/strings.xml
index 8b769797c..03bac3213 100644
--- a/MyTracks/res/values-pl/strings.xml
+++ b/MyTracks/res/values-pl/strings.xml
@@ -199,20 +199,9 @@ limitations under the License.
min
min/km
min/mi
- godzina
- godziny
- kilometry na godzinę
- kilometerów
- mile na godzinę
- mil
- minuta
- minuty
- My Tracks brak odległości
+ My Tracks brak odległości
na kilometr
na milę
- sekunda
- sekundy
- My Tracks %1$.2f %2$s w %3$s w tempie %4$s %5$s
O My Tracks
Witamy
diff --git a/MyTracks/res/values-pt-rBR/strings.xml b/MyTracks/res/values-pt-rBR/strings.xml
index 62740a36e..874d29622 100644
--- a/MyTracks/res/values-pt-rBR/strings.xml
+++ b/MyTracks/res/values-pt-rBR/strings.xml
@@ -159,20 +159,9 @@ limitations under the License.
Gravando um novo caminho.
pés
h
- hora
- horas
- kilômetros por hora
- kilômetros
- milhas por hora
- milhas
- minuto
- minutos
- My Tracks sem distância
+ My Tracks sem distância
por kilômetro
por milha
- segundo
- segundos
- My Tracks %1$.2f %2$s em %3$s a %4$s %5$s
Sobre My Tracks
Bem-vindo
diff --git a/MyTracks/res/values-ru/strings.xml b/MyTracks/res/values-ru/strings.xml
index 186f57e87..dbaee87ae 100644
--- a/MyTracks/res/values-ru/strings.xml
+++ b/MyTracks/res/values-ru/strings.xml
@@ -43,7 +43,6 @@ limitations under the License.
Ожидание сигнала GPS. Убедитесь в том, что вы находитесь под открытым небом.
Ошибка импорта файла %s
GPX файлы не найденны в %s. Возможно не читается SD-карта или каталог не содержит GPX файлы.
- Импортировано %1$d из %2$d GPX файлов с %3$s
Описание маркера
Имя маркера
Тип маркера (например: здание, выбоина, достопримечательность...)
@@ -246,20 +245,9 @@ limitations under the License.
мин/миля
об/мин
Вт
- час
- часов
- километров в час
- километров
- миль в час
- мили
- минута
- минут
- My Tracks нет расстояния
+ My Tracks нет расстояния
за километр
за милю
- секунда
- секунд
- Мои треки %1$.2f %2$s в %3$s на %4$s %5$s
О My Tracks
Добро пожаловать
diff --git a/MyTracks/res/values-sv/strings.xml b/MyTracks/res/values-sv/strings.xml
index 123d4df31..532248b47 100644
--- a/MyTracks/res/values-sv/strings.xml
+++ b/MyTracks/res/values-sv/strings.xml
@@ -169,20 +169,9 @@ limitations under the License.
min
min/km
min/mi
- timme
- timmar
- kilometer i timmen
- kilometer
- miles i timmen
- miles
- minut
- minuter
- My Tracks ingen distans
+ My Tracks ingen distans
per kilometer
per mile
- sekund
- sekunder
- My Tracks %1$.2f %2$s på %3$s i %4$s %5$s
Om My Tracks
Välkommen
diff --git a/MyTracks/res/values-zh-rCN/strings.xml b/MyTracks/res/values-zh-rCN/strings.xml
index 05765b4e1..4f92f43fc 100644
--- a/MyTracks/res/values-zh-rCN/strings.xml
+++ b/MyTracks/res/values-zh-rCN/strings.xml
@@ -44,7 +44,6 @@ limitations under the License.
等待更准确的 GPS 定位. 请确定可以看见天空.
导入文件 %s 出错.
在 %s 中未找到 GPX 文件. SD 存储卡不可用或者目录中没有 GPX 文件.
- 已从 %3$s 导入 %1$d 个 GPX 文件, 共 %2$d 个.
标记描述
标记名称
标记类型 (例如: 建筑, 陷坑, 景点...)
@@ -227,20 +226,9 @@ limitations under the License.
现在开始记录新的轨迹.
时
分
- 小时
- 小时
- 千米每小时
- 千米
- 英里每小时
- 英里
- 分钟
- 分钟
- My Tracks 无距离
+ My Tracks 无距离
每千米
每英里
- 秒
- 秒
- My Tracks %1$.2f %2$s 用时 %3$s 速度 %4$s %5$s
关于 My Tracks
欢迎
diff --git a/MyTracks/res/values/strings.xml b/MyTracks/res/values/strings.xml
index 71f617dda..3337251e8 100644
--- a/MyTracks/res/values/strings.xml
+++ b/MyTracks/res/values/strings.xml
@@ -348,14 +348,14 @@ limitations under the License.
My Tracks is run by volunteers and Googlers in their 20% time. If you would like to contribute,
please visit:\n
\n
- http://mytracks.googlecode.com\n
+ http://mytracks.googlecode.com\n
My Tracks allows you to record and share your GPS tracks, including statistics.
-
+
+ %1$s: the track's file path on the SD card. E.g., '/mnt/sdcard/MyTacks/gpx/1.gpx'.">
Import error for file %1$s.
+
+ %1$d GPX files
+
+
+ %1$d GPX files
+
+
+ 1 GPX file
+
+
+ %1$d GPX files
+
+
+ 2 GPX files
+
+
+ 0 GPX files
+
+ %1$s: the SD card directory path. E.g., '/mnt/sdcard/MyTracks/gpx/'.">
No GPX file found in %1$s. The SD card may be unreadable or the directory may not contain any
GPX file.
@@ -618,10 +648,10 @@ limitations under the License.
translation_description="After importing all the tracks from the SD card, the alert message
indicating success.
- %1$d the number of successfully imported tracks. E.g., '5'.
- %2$d the number of total tracks to be imported. E.g., '6'.
- %3$s the directory path. E.g., '/mnt/sdcard/MyTracks/gpx/'.">
- Imported to My Tracks %1$d of %2$d GPX files from %3$s.
+ %1$d the number of successfully imported tracks. E.g., '1'.
+ %2$s the number of GPX files in the SD card. E.g., '1 GPX file' or '2 GPX files'.
+ %3$s the SD card directory path. E.g., '/mnt/sdcard/MyTracks/gpx/'.">
+ My Tracks: Imported %1$d of %2$s from %3$s.
@@ -1995,73 +2025,239 @@ limitations under the License.
-
- hour
+
+ %1$d hours
-
- hours
+
+ %1$d hours
-
- kilometers per hour
+
+ 1 hour
-
- kilometers
+
+ %1$d hours
-
- miles per hour
+
+ 2 hours
-
- miles
+
+ 0 hours
-
- minute
+
+ %1$d minutes
-
- minutes
+
+ %1$d minutes
-
- My Tracks no distance.
+
+ 1 minute
+
+
+ %1$d minutes
+
+
+ 2 minutes
+
+
+ 0 minutes
+ hours 2 minutes per kilometer'.">
per kilometer
+ translation_description="For voice announcement, to say 'per mile' for pace like 'two hours 2
+ minutes per mile'.">
per mile
-
- second
+
+ %1$d seconds
-
- seconds
+
+ %1$d seconds
+
+
+ 1 second
+
+
+ %1$d seconds
+
+
+ 2 seconds
+
+
+ 0 seconds
+
+
+ %1$.1f kilometers per hour
+
+
+ %1$.1f kilometers per hour
+
+
+ 1 kilometer per hour
+
+
+ %1$.1f kilometers per hour
+
+
+ 2 kilometers per hour
+
+
+ 0 kilometers per hour
+
+
+ %1$.1f miles per hour
+
+
+ %1$.1f miles per hour
+
+
+ 1 mile per hour
+
+
+ %1$.1f miles per hour
+
+
+ 2 miles per hour
+
+
+ 0 miles per hour
- My Tracks total distance %1$.2f %2$s in %3$s at %4$s %5$s.
+ %1$s: distance string. E.g., '1 mile' or '1.2 miles', '1 kilometer', '2.2 kilometers'
+ %2$s: time string. E.g., '1 hour and 30 minutes' or '20 minutes 1 second'
+ %3$s: speed/pace string. For speed, e.g., '2.2 miles per hour', '1 kilometer per hour'. For
+ pace, e.g., '2 hours 1 minute per mile', '30 minutes 1 second per kilometer'.">
+ My Tracks total distance %1$s in %2$s at %3$s.
+
+
+ total distance %1$.2f kilometers
+
+
+ total distance %1$.2f kilometers
+
+
+ total distance 1 kilometer
+
+
+ total distance %1$.2f kilometers
+
+
+ total distance 2 kilometers
+
+
+ total distance 0 kilometers
+
+
+ total distance %1$.2f miles
+
+
+ total distance %1$.2f miles
+
+
+ total distance 1 mile
+
+
+ total distance %1$.2f miles
+
+
+ total distance 2 miles
+
+
+ total distance 0 miles
+
+
+ My Tracks total distance zero.
@@ -2292,7 +2488,7 @@ limitations under the License.
statistics, and graphs view.
+ translation_description="In the 'Welcome' page, the help content question on app navigation.">
How do I see the map, statistics, and graphs view?
Recording -> GPS accuracy. If the precision is too low,
- at the top of the screen, you will see the message \"Waiting for a better GPS fix.\".
+ at the top of the screen, you will see the message \"Waiting for a better GPS fix.\".
Tracks on Google My Maps and Google Fusion Tables are limited to certain sizes.
diff --git a/MyTracks/src/com/google/android/apps/mytracks/ImportAllTracks.java b/MyTracks/src/com/google/android/apps/mytracks/ImportAllTracks.java
index 4bd2aefbe..7c20f22e4 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/ImportAllTracks.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/ImportAllTracks.java
@@ -128,8 +128,10 @@ public class ImportAllTracks {
if (gpxFileCount == 0) {
builder.setMessage(activity.getString(R.string.import_no_file, gpxPath));
} else {
+ String totalFiles = activity.getResources().getQuantityString(
+ R.plurals.importGpxFiles, gpxFileCount, gpxFileCount);
builder.setMessage(
- activity.getString(R.string.import_success, importSuccessCount, gpxFileCount, gpxPath));
+ activity.getString(R.string.import_success, importSuccessCount, totalFiles, gpxPath));
}
builder.setPositiveButton(R.string.generic_ok, new DialogInterface.OnClickListener() {
@Override
diff --git a/MyTracks/src/com/google/android/apps/mytracks/services/tasks/StatusAnnouncerTask.java b/MyTracks/src/com/google/android/apps/mytracks/services/tasks/StatusAnnouncerTask.java
index d3b1691aa..086403649 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/services/tasks/StatusAnnouncerTask.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/services/tasks/StatusAnnouncerTask.java
@@ -150,66 +150,72 @@ public class StatusAnnouncerTask implements PeriodicTask {
*/
// @VisibleForTesting
protected String getAnnouncement(TripStatistics stats) {
- SharedPreferences preferences =
- context.getSharedPreferences(Constants.SETTINGS_NAME, 0);
boolean metricUnits = true;
boolean reportSpeed = true;
+ SharedPreferences preferences = context.getSharedPreferences(Constants.SETTINGS_NAME, 0);
if (preferences != null) {
- metricUnits =
- preferences.getBoolean(context.getString(R.string.metric_units_key),
- true);
- reportSpeed =
- preferences.getBoolean(context.getString(R.string.report_speed_key),
- true);
+ metricUnits = preferences.getBoolean(context.getString(R.string.metric_units_key), true);
+ reportSpeed = preferences.getBoolean(context.getString(R.string.report_speed_key), true);
}
- double d = stats.getTotalDistance() / 1000;
- double s = stats.getAverageMovingSpeed() * 3.6;
+ double d = stats.getTotalDistance() / 1000; // d is in kilometers
+ double s = stats.getAverageMovingSpeed() * 3.6; // s is in kilometers per hour
+
if (d == 0) {
- return context.getString(R.string.voice_no_distance);
+ return context.getString(R.string.voice_total_distance_zero);
}
- int speedLabel;
- if (metricUnits) {
- if (reportSpeed) {
- speedLabel = R.string.voice_kilometer_per_hour;
- } else {
- speedLabel = R.string.voice_per_kilometer;
- }
- } else {
- s *= UnitConversions.KMH_TO_MPH;
+ if (!metricUnits) {
d *= UnitConversions.KM_TO_MI;
- if (reportSpeed) {
- speedLabel = R.string.voice_mile_per_hour;
- } else {
- speedLabel = R.string.voice_per_mile;
- }
+ s *= UnitConversions.KMH_TO_MPH;
}
- String speed = null;
- if ((s == 0) || Double.isNaN(s)) {
- speed = context.getString(R.string.value_unknown);
+ if (!reportSpeed) {
+ s = 3600000.0 / s; // converts from speed to pace
+ }
+
+ // Makes sure s is not NaN.
+ if (Double.isNaN(s)) {
+ s = 0;
+ }
+
+ String speed;
+ if (reportSpeed) {
+ int speedId = metricUnits ? R.plurals.voiceSpeedKilometersPerHour
+ : R.plurals.voiceSpeedMilesPerHour;
+ speed = context.getResources().getQuantityString(speedId, getQuantityCount(s), s);
} else {
- if (reportSpeed) {
- speed = String.format("%.1f", s);
- } else {
- double pace = 3600000.0 / s;
- Log.w(Constants.TAG,
- "Converted speed: " + s + " to pace: " + pace);
- speed = getAnnounceTime((long) pace);
- }
+ int perDistancelId = metricUnits ? R.string.voice_per_kilometer : R.string.voice_per_mile;
+ speed = getAnnounceTime((long) s) + " " + context.getString(perDistancelId);
}
- return context.getString(R.string.voice_template,
- d,
- context.getString(metricUnits
- ? R.string.voice_kilometers
- : R.string.voice_miles),
- getAnnounceTime(stats.getMovingTime()),
- speed,
- context.getString(speedLabel));
- }
+ int totalDistanceId = metricUnits ? R.plurals.voiceTotalDistanceKilometers
+ : R.plurals.voiceTotalDistanceMiles;
+ String totalDistance = context.getResources().getQuantityString(
+ totalDistanceId, getQuantityCount(d), d);
+ return context.getString(
+ R.string.voice_template, totalDistance, getAnnounceTime(stats.getMovingTime()), speed);
+ }
+
+ /**
+ * Gets the plural count to be used by getQuantityString.
+ *
+ * @param d the double value
+ */
+ private int getQuantityCount(double d) {
+ if (d == 0) {
+ return 0;
+ } else if (d == 1) {
+ return 1;
+ } else if (d == 2) {
+ return 2;
+ } else {
+ int count = (int) d;
+ return count < 3 ? 3 : count;
+ }
+ }
+
@Override
public void start() {
Log.i(Constants.TAG, "Starting TTS");
@@ -331,30 +337,22 @@ public class StatusAnnouncerTask implements PeriodicTask {
@VisibleForTesting
String getAnnounceTime(long time) {
int[] parts = StringUtils.getTimeParts(time);
- String secLabel =
- context.getString(parts[0] == 1 ? R.string.voice_second : R.string.voice_seconds);
- String minLabel =
- context.getString(parts[1] == 1 ? R.string.voice_minute : R.string.voice_minutes);
- String hourLabel =
- context.getString(parts[2] == 1 ? R.string.voice_hour : R.string.voice_hours);
+ String seconds = context.getResources().getQuantityString(
+ R.plurals.voiceSeconds, parts[0], parts[0]);
+ String minutes = context.getResources().getQuantityString(
+ R.plurals.voiceMinutes, parts[1], parts[1]);
+ String hours = context.getResources().getQuantityString(
+ R.plurals.voiceHours, parts[2], parts[2]);
StringBuilder sb = new StringBuilder();
if (parts[2] != 0) {
- sb.append(parts[2]);
+ sb.append(hours);
sb.append(" ");
- sb.append(hourLabel);
- sb.append(" ");
- sb.append(parts[1]);
- sb.append(" ");
- sb.append(minLabel);
+ sb.append(minutes);
} else {
- sb.append(parts[1]);
+ sb.append(minutes);
sb.append(" ");
- sb.append(minLabel);
- sb.append(" ");
- sb.append(parts[0]);
- sb.append(" ");
- sb.append(secLabel);
+ sb.append(seconds);
}
return sb.toString();
}