diff --git a/OsmAnd/res/values-be/strings.xml b/OsmAnd/res/values-be/strings.xml index 02f27972a2..3330a5e06c 100644 --- a/OsmAnd/res/values-be/strings.xml +++ b/OsmAnd/res/values-be/strings.xml @@ -1,4 +1,4 @@ - + Без аўтаматычнага масштабіраваньня Зачыніць Для сярэдняга масштаба @@ -1906,4 +1906,11 @@ OsmAnd мае адкрыты зыходны код і актыўна разві Спыніць адсочваньне праз Інтэрнэт Адсочваньне праз Інтэрнэт (патрабуецца GPX) Адсылаць месцазнаходжаньне на пазначаны вэб сэрвіс пры ўключаным запісе GPX. - + альбанская + арабская + сэрбская + кітайская спрошчаная + кітайская традыцыйная + сардынская + Рэжым метро + diff --git a/OsmAnd/res/values-ca/strings.xml b/OsmAnd/res/values-ca/strings.xml index e4190a5d7a..738d3e6a32 100644 --- a/OsmAnd/res/values-ca/strings.xml +++ b/OsmAnd/res/values-ca/strings.xml @@ -1915,4 +1915,5 @@ La llista de països inclosos (bàsicament tot el món!): Afganistan, Albània, Serbi Xinès simplificat Xinès tradicional - + Mode subsol + diff --git a/OsmAnd/res/values-cs/strings.xml b/OsmAnd/res/values-cs/strings.xml index 1e6a078cb1..a3cdecc98d 100644 --- a/OsmAnd/res/values-cs/strings.xml +++ b/OsmAnd/res/values-cs/strings.xml @@ -1646,7 +1646,7 @@ s často kladenými otázkami. Skrýt lesy a křoviny Ukázat povrchy cest Prosím čtěte před vytvářením skupiny! - " - Všechny vytvořené skupiny jsou veřejné! Pokud chcete být anonymní, připojte zařízení přímo přes ID\n - Do skupiny se může registrovat až 16 lidí. + " - Všechny vytvořené skupiny jsou veřejné! Pokud chcete být anonymní, připojte zařízení přímo přes ID.\n - Do skupiny se může registrovat až 16 lidí. \n - V případě neaktivity nebo aktivity pouze jedné osoby v průběhu dvou týdnů, bude skupina zrušena.\n - Můžete omezit vstup do skupiny pozvánkami, ale pro ovládání skupiny musíte použít administrátorskou konzoli.\n - Pokud potřebujete vytvořit skupinu s jinými podmínkami prosím kontaktujte http://osmo.mobi" Chyba při autorizaci OsMo: %1$s.\n Služba může být dočasně nedostupná nebo vám vypršela registrace. \n Chcete pokračovat v nové registraci. @@ -1654,4 +1654,27 @@ s často kladenými otázkami. Zobrazit cyklostezky Vpřed Domů + Ponechat + Zastavit + Zapnout režim spánku + Interval probouzení GPS + Udržovat GPS zapnutou? + Preferovaný jazyk pro nápisy na mapě (pokud není dostupný budou použité anglické nebo lokální názvy) + Preferovaný jazyk mapy + Lokální názvy + Pokud je zapnutý záznam GPX trasy, odesílat trasování určené webové službě. + Online záznam trasy (nutné GPX) + Zapnout online záznam trasy + Zastavit online záznam trasy + Zapnout záznam GPX + Zastavit záznam GPX + Začít nový segment + Skrýt cesty které nejsou pro vozidla + Budovy při přiblížení 15 + Více detailů + Méně detailů + Skrýt typ přístupu + Zobrazit typ přístupu + Zobrazit kvalitu cest + Vstoupit na pozvánku diff --git a/OsmAnd/res/values-da/strings.xml b/OsmAnd/res/values-da/strings.xml index 12a53cd043..e4a2d5e178 100644 --- a/OsmAnd/res/values-da/strings.xml +++ b/OsmAnd/res/values-da/strings.xml @@ -1,4 +1,4 @@ - + Overvej at købe Højdekurve udvidelsen (\'Contour lines\') på Google Play for at støtte den videre udvikling. Optag video Optag audio @@ -1939,4 +1939,5 @@ Afghanistan, Albanien, Algeriet, Andorra, Angola, Anguilla, Antigua og Barbuda, Kinesisk, forenklet Kinesisk, traditionelt Sardisk - + Undergrundsbanetilstand + diff --git a/OsmAnd/res/values-de/strings.xml b/OsmAnd/res/values-de/strings.xml index ef5550efcf..8fcbc70be0 100644 --- a/OsmAnd/res/values-de/strings.xml +++ b/OsmAnd/res/values-de/strings.xml @@ -1,4 +1,5 @@ -Die Route ist wahrscheinlich zu lang um vom OsmAnd-Offline-Router berechnet zu werden. Offline-Routing ist bis ungefähr 200 km Abstand zwischen einzelnen Punkten möglich. Bitte einen oder mehrere Zwischenpunkte setzen um die Route berechnen zu können. + +Die Route ist wahrscheinlich zu lang um vom OsmAnd-Offline-Router berechnet zu werden. Offline-Routing ist bis ungefähr 200 km Abstand zwischen einzelnen Punkten möglich. Bitte einen oder mehrere Zwischenpunkte setzen um die Route berechnen zu können. Kein Auto-Zoom Auf Nahbereich Auf Mittelbereich @@ -1905,4 +1906,22 @@ Afghanistan, Ägypten, Albanien, Algerien, Andorra, Angola, Anguilla, Antigua an Stunden her Minuten her Sekunden her - + Chinesisch (vereinfacht) + Chinesisch (traditionell) + Serbisch + Persisch + Arabisch + Albanisch + Suaheli + Bevorzugte Sprache für Beschriftungen auf der Karte (ist diese nicht verfügbar, wird auf Englisch oder lokale Namen gewechselt) + Bevorzugte Sprache für Karten-Beschriftung + Lokale Namen + Hebräisch + Sende Verfolgungsdaten zu einem festgelegten Internet Dienst, wenn GPX-Aufzeichnung aktiviert ist. + Online Verfolgung (benötigt GPX) + Starte online Verfolgung + Starte GPX-Aufzeichnung + Stoppe GPX-Aufzeichnung + Starte neues Segment + Sardinisch + diff --git a/OsmAnd/res/values-es/strings.xml b/OsmAnd/res/values-es/strings.xml index 448fbfa6da..4819f3fa09 100644 --- a/OsmAnd/res/values-es/strings.xml +++ b/OsmAnd/res/values-es/strings.xml @@ -1828,4 +1828,5 @@ Afganistán, Albania, Alemania, Andorra, Angola, Anguila, Antigua y Barbuda, Ant Serbio Chino Simplificado Chino Tradicional - + Modo subterráneo + diff --git a/OsmAnd/res/values-it/strings.xml b/OsmAnd/res/values-it/strings.xml index 0eaf24ad4e..2e8a52aa8e 100644 --- a/OsmAnd/res/values-it/strings.xml +++ b/OsmAnd/res/values-it/strings.xml @@ -1,4 +1,4 @@ - + Sovrapposizioni fluorescenti Usa colori fluorescenti per visualizzare tracce e percorsi Modifiche offline @@ -1938,4 +1938,5 @@ Si consiglia di aggiungere uno o più punti intermedi per migliorarne le prestaz Serbo Cinese semplificato Cinese tradizionale - + Modalità metro + diff --git a/OsmAnd/res/values-ja/strings.xml b/OsmAnd/res/values-ja/strings.xml index e2e71a3587..94d8d573d3 100644 --- a/OsmAnd/res/values-ja/strings.xml +++ b/OsmAnd/res/values-ja/strings.xml @@ -1858,4 +1858,64 @@ OsmAndはオープンソースであり、活発に開発が進められいま \n\nマップ上に表示するには長押ししてください ターン・バイ・ターン形式誘導を自動起動 選択済み + "サブトラック: %1$s " + "経由点: %1$s " + "距離: %1$s (%2$s 地点) " + "出発時間: %1$tF, %1$tT " + "到着時間: %1$tF, %1$tT " + "平均速度: %1$s " + "最高速度: %1$s " + 平均標高: %1$s + 標高差: %1$s + 上昇/下降: %1$s + 移動時間: %1$s + 全長時間: %1$s + セグメント + " %1$s 地点" + 地点 %1$s + 記録中 + %1$s ↵\nルート地点 %2$s + %1$s ↵\n地点 + %1$s ↵\nトラック %2$s + 現在記録中トラック + GPSトラックは空です + 選択されたトラック + 全てのトラック + お気に入り + お気に入り + お気に入り + ユーザー %1$sはグループ %2$sに参加しました + ユーザー %1$sはグループ %2$sから離れました + グループに関する通知を表示 + ユーザーがグループに参加もしくは離れると簡易メッセージを表示 + フォロー + サインイン + グループを作成するためには、OsMoの登録ユーザである必要があります。 + お使いのOsMoの登録情報が有効ではありません。 + あなたの個人IDを再作成してよろしいですか?再作成した場合接続されたすべてのデバイスは、あなたを追跡することができません。 + ユーザーIDを再作成する + 移動する目標をキャンセル + 画面上の中央 + 目標が移動すると設定する + 登録名 + ニックネーム + ユーザー + レッド + ピンク + オレンジ + ブラウン + イエロー + ライトブルー + ブルー + グリーン + + ユーザープロパティの変更 + 表示色 + インフォメーション + OsMoグループ + グループ %2$sに接続するには、グループID(%1$s)を指定するか %3$sをクリックして下さい。 + このデバイスをフォローしてみましょう + ブラウザで現在のセッションを共有する + セッションはが利用できません「送信場所」がオンになっていることを確認してください。 + セッションの共有 diff --git a/OsmAnd/res/values-ko/strings.xml b/OsmAnd/res/values-ko/strings.xml index 644956a992..0d6039b1f6 100644 --- a/OsmAnd/res/values-ko/strings.xml +++ b/OsmAnd/res/values-ko/strings.xml @@ -2067,4 +2067,5 @@ Vanuatu, Venezuela, Vietnam, Wallis and Futuna, Western Sahara, Yemen, Zambia, Z 세르비아어 중국어 간체 중국어 번체 - + 지하철 모드 + diff --git a/OsmAnd/res/values-lt/strings.xml b/OsmAnd/res/values-lt/strings.xml index 76d8b058db..4f58b86e06 100644 --- a/OsmAnd/res/values-lt/strings.xml +++ b/OsmAnd/res/values-lt/strings.xml @@ -1,4 +1,4 @@ - + Pradžios taškas yra per toli nuo artimiausio kelio. Bendrinta vieta Dėmesio @@ -1791,4 +1791,5 @@ OsmAnd yra aktyviai tobulinama ir mūsų projektas bei jo tolesnis progresas pri Tradicinė kinų Sardinų Supaprastinta kinų - + Metro režimas + diff --git a/OsmAnd/res/values-nl/strings.xml b/OsmAnd/res/values-nl/strings.xml index 9da74f8adc..378e0317f6 100644 --- a/OsmAnd/res/values-nl/strings.xml +++ b/OsmAnd/res/values-nl/strings.xml @@ -1,4 +1,4 @@ - + Configureer scherm @@ -1920,4 +1920,5 @@ Afghanistan, Albanie, Algerije, Andorra, Angola, Anguilla, Antigua en Barbuda, A Servisch Vereenvoudigd Chinees Traditioneel Chinees - + Tunnel stand + diff --git a/OsmAnd/res/values-pl/strings.xml b/OsmAnd/res/values-pl/strings.xml index dea7407490..61a9e7de0f 100644 --- a/OsmAnd/res/values-pl/strings.xml +++ b/OsmAnd/res/values-pl/strings.xml @@ -1,4 +1,5 @@ -"Zmiany w 0.6.9: \n\t- poprawiono renderowanie map offline \n\t- szybkie renderowanie natywne (wersja eksperymentalna - może nie działać na niektórych urządzeniach) \n\t- poprawki w interfejsie \n\t- dodano wyświetlanie informacji o wysokości (altitude) \n\t- nowe tłumaczenia (polskie, wietnamskie) \n\t- inne, mniejsze poprawki " + +"Zmiany w 0.6.9: \n\t- poprawiono renderowanie map offline \n\t- szybkie renderowanie natywne (wersja eksperymentalna - może nie działać na niektórych urządzeniach) \n\t- poprawki w interfejsie \n\t- dodano wyświetlanie informacji o wysokości (altitude) \n\t- nowe tłumaczenia (polskie, wietnamskie) \n\t- inne, mniejsze poprawki " Przezroczysty styl Biblioteka renderowania natywnego nie jest obsługiwana na tym urządzeniu. @@ -730,7 +731,7 @@ Wyświetl linijkę Informacja - Powróć do lokacji + Powróć do pozycji Pomoc Pokaż szczegóły Rozszerzenia ułatwienia dostępu dla starych wersji Androida @@ -764,7 +765,7 @@ Prawy przód Prawy Tylny przód - Tył + Wstecz Lewy tył Lewy Lewy przód @@ -1252,10 +1253,10 @@ Motyw aplikacji Opcje ułatwień dostępu Wybierz motyw aplikacji - Usługi śledzenia i tryb uśpienia + Usługi śledzenia Skonfiguruj opcje zapisywania wycieczek oraz włącz tryb uśpienia Włącz śledzenie i nawigację w trybie uśpienia (zablokowany ekran) poprzez okresowe wybudzanie urządzenia GPS. Wyświetl ustawienia dotyczące nagrywania wycieczek do plików GPX lub usługi sieciowej. - Usługi śledzenia i tryb uśpienia + Usługi śledzenia Zmiany w 1.3: \n\t* Ponowna implementacja wsparcia dla tabletów i dużych ekranów \n\t* Motyw Holo (dostosowywanie) @@ -1700,11 +1701,7 @@ Afganistan, Afryka Południowa, Albania, Algieria, Andora, Angola, Anguilla, Ant Nieprawidłowy format: %s Unikatowy identyfikator urządzenia Skonfiguruj monitorowanie i ustaw osobisty kanał monitorowania - OpenStreetMap-Monitoring - Zaawansowany Monitoring na Żywo. Daje możliwość śledzenia innych urządzeń i vice versa. - Twórz anonimowe grupy, dziel się lokalizacją i prowadź komunikację. System ma wiele ustawień dla śledzenia w sesji lub stałego śledzenia. - Grupy anonimowe mają ograniczenia czasowe i funkcjonalne, np. nie ma zdalnej kontroli i administratora grupy. - W pełni funkcjonalne grupy powinny być tworzone przez witrynę, a dostęp zarezerwowany tylko dla zarejestrowanych użytkowników. - Więcej na http://osmo.mobi. + "OpenStreetMap zaawansowany monitoring na żywo - zobacz http://osmo.mobi. Daje możliwość śledzenia innych urządzeń i vice versa. Twórz anonimowe grupy, dziel się lokalizacją i prowadź komunikację. System ma wiele ustawień dla śledzenia w sesji lub stałego śledzenia. Grupy anonimowe mają ograniczenia czasowe i funkcjonalne, np. nie ma zdalnej kontroli i administratora grupy. W pełni funkcjonalne grupy powinny być tworzone przez witrynę, a dostęp zarezerwowany tylko dla zarejestrowanych użytkowników. " OsMo (Zaawansowany Monitoring na Żywo) OsMo Monitoring OpenStreetMap (beta) Nigdy @@ -1851,14 +1848,53 @@ Afganistan, Afryka Południowa, Albania, Algieria, Andora, Angola, Anguilla, Ant Wybierz aby wyświetlić Wpisz przez zaproszenie " - Wszystkie grupy są publiczne! Jeśli chcesz być anonimowy, podłącz urządzeń bezpośrednio poprzez identyfikator Tracker ids.↵\n - Grupa może posiadać do 16 zarejestrowanych osób.↵\n - W przypadku bezczynności lub aktywności tylko 1 osoby przez okres 2 tygodnie, grupa zostanie usunięta.↵\n - Można ograniczyć dostęp grupy, i zapraszać tylko wybrane osoby. Do kontroli potrzebujesz konsoli administracyjnej.↵\n - Jeśli trzeba utworzyć grupę, ale z innymi warunkami, prosimy o kontakt http://osmo.mobi" - Proszę przeczytać przed założeniem grupy! + Przeczytaj przed założeniem grupy! Nie powiodło się logowanie do OsMo - OsMo pobrano %1$s punktów. + Pobrano %1$s punktów OsMo. Automatycznie połącz to serwisu po uruchomieniu aplikacji Auto-podłączenie Serwis OsMo Pobrano %1$s ścieżek OsMo. Brak danych do pobrania, proszę sprawdź połączenie internetowe. Błąd autoryzacji - Wystąpił błąd autoryzacji : %1$s.↵\n Być może tymczasowy serwis jest zatrzymany lub straciła ważność twoja rejestracja.↵\n Chcesz kontynuować z nową rejestracją. - \ No newline at end of file + Wystąpił błąd autoryzacji : %1$s.\n Być może tymczasowy serwis jest zatrzymany lub straciła ważność twoja rejestracja.\n Chcesz kontynuować z nową rejestracją. + Utrzymuj + Stop + Włącz tryb uśpienia + Odstęp czasu wybudzania GPS + Czy trzymać włączony GPS? + Preferowany język dla etykiet na mapie (jeśli niedostępny, zostanie wybrany język angielski lub lokalna nazwa) + Preferowany język map + Nazwy lokalne + Suahili + Hebrajski + Do przodu + Dom + Wysyłaj aktualną pozycję do określonej usługi internetowej, jeśli nagrywanie GPX jest włączone. + Śledzenie online (wymagane GPX) + Uruchom śledzenie online + Zatrzymaj śledzenie online + Uruchom nagrywanie GPX + Zatrzymaj nagrywanie GPX + Zacznij nowy segment + Ukryj budynki + Ukryj trasy niedostępne dla aut + Ukryj opisy + Ukryj drewna i zarośla + Budynki na przybliżeniu 15 + Więcej szczegółów + Mniej szczegółów + Ukryj typ dostępu + Pokaż typ dostępu + Pokaż jakość dróg + Pokaż nawierzchnię dróg + Pokaż ścieżki rowerowe + Albański + Arabski + Perski + Sardyński + Serbski + Chiński uproszczony + Chiński tradycyjny + Tryb metra + diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index 62e181e777..94dd6b2c56 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -1773,4 +1773,5 @@ OsmAnd - открытый источник и активно развается. Сербский Упрощенный китайский Традиционный китайский + Режим метро diff --git a/OsmAnd/res/values-sl/strings.xml b/OsmAnd/res/values-sl/strings.xml index f21e94411f..460f7f446f 100644 --- a/OsmAnd/res/values-sl/strings.xml +++ b/OsmAnd/res/values-sl/strings.xml @@ -1,4 +1,4 @@ - + Iskanje Iskanje Nastavitve @@ -1887,4 +1887,5 @@ Seznam držav (praktično ves svet!): Afganistan, Albanija, Alžirija, Andora, A Poenostavljena kitajščina Tradicionalna kitajščina Sardinščina - + Način podzemne železnice + diff --git a/OsmAnd/res/values-sv/strings.xml b/OsmAnd/res/values-sv/strings.xml index ec23292d9a..625ebcad7c 100644 --- a/OsmAnd/res/values-sv/strings.xml +++ b/OsmAnd/res/values-sv/strings.xml @@ -1494,7 +1494,7 @@ Sessions-URL för att spåra enhet (%1$s) För att ansluta till målenheten %2$s, klicka på länken %3$s eller ange tracker-id (%1$s) Loggningsintervall - Välj tidsintervall för skickande av platsen + Välj tidsintervall för inskickande av din position dagar Anslut Förfaller om diff --git a/OsmAnd/res/values-zh-rTW/strings.xml b/OsmAnd/res/values-zh-rTW/strings.xml index b1d46497f4..355028bb4b 100644 --- a/OsmAnd/res/values-zh-rTW/strings.xml +++ b/OsmAnd/res/values-zh-rTW/strings.xml @@ -464,7 +464,7 @@ 檔名: 已有同檔名存在。 儲存 - 儲存指引 + 儲存導引 上傳 GPX 到 OSM 社群,這些將有助於改善地圖。 %2$d 項中的 %1$d 項已上傳成功。 傳送到 OSM @@ -574,22 +574,20 @@ \n\n您可透過地圖畫面左下角的設定檔按鈕(汽車、自行車、步行三種圖示)更改使用設定檔 ,或是作路線規劃。 導航 - 為了取得指引到一個地方,可以直接在地圖上長按它,然然後再點選其敘述框\'指引到\',或著選擇\'指引\'後在查尋結果清單或是我的最愛清單點選進入。 - \n\n目的地標點以橙色旗標在地圖上,同時 OsmAnd 會顯示達到目的地的距離與它的方位(橙色三角形)。 - \n\n您可以選擇到任何一個\'隨行\'的路線,這意味著 OsmAnd 將實地引導您,給您語音指示(如果有啟用語音),或者您可以選擇\'只顯示\'路線在地圖上,它會產生一個靜態的路線不會有任何實地引導或隨著您的移動而調整。 - \n\n顯示從非您目前的位置中,選擇任意標點到目的地的路線,接著在地圖上選擇\'指引來自\'。 - \n\n如果您選擇\'指引來自\'連同\'隨行\',只要它發現則 OsmAnd 將切換到您的實際位置(所以這個可以用於在快速啟動路線之前找到位置),當\'指引來自\'在與\'只顯示\'結合,只是告訴您從任意標點的路線,您可選擇不包括後續的更新。 - + "需要導引到一個地點,可以直接在地圖上選擇並長按該地點,(然後再點選快顯功能表單的\'導引到\'),或著選擇\'導引\'後,在查尋結果清單或是我的最愛清單點選進入。 +\n\n目的地標點以橙色旗標在地圖上,同時 OsmAnd 會顯示達到目的地的距離與它的方位(橙色三角形)。 +\n\n您可以選擇到任何一個\'隨行\'的路線,這意味著 OsmAnd 將實地引導您,給您語音指示(如果有啟用語音),或者您可以選擇\'只顯示\'路線在地圖上,它會產生一個靜態的路線不會有任何實地引導或隨著您的移動而調整。 +\n\n顯示從非您目前的位置中,選擇任意標點到目的地的路線,接著在地圖上選擇\'從此導引\'。 +\n\n如果您選擇\'從此導引\'連同\'開始導航\',只要它發現則 OsmAnd 將切換到您的實際位置(所以這個可以用於在快速啟動路線之前找到位置),當\'從此導引\'在與\'只顯示\'結合,只是告訴您從任意標點的路線,您可選擇不包括隨後的更新。 " 查尋 - 您可以在地圖上直接查尋地點,經由 \'使用位置 \' → \'附近查尋\',或是透過 \'選單 \'→ \'查尋 \'。 - \n\n在查尋畫面上有提供查尋範本 - \n\t*經由地址 - \n\t*透過坐標 - \n\t*興趣點(按類型或名稱) - \n\t*透過您的查尋履歷 - \n\t*或透過您事先定義的我的最愛 - \n\n在主畫面上按\'查尋\'進行查尋的動作。所有在快顯功能表中或動作列被點選中的,都提供有例如\'指引\'或\'在地圖上顯示\'等等的選項。 - + "您可以在地圖上直接查尋地點,經由 \'使用位置 \' → \'附近查尋\',或是透過 \'選單 \'→ \'查尋 \'。 +\n\n在查尋畫面上有提供查尋範本 +\n\t*經由地址 +\n\t*透過坐標 +\n\t*興趣點(按類型或名稱) +\n\t*透過您的查尋履歷 +\n\t*或透過您事先定義的我的最愛 +\n\n在主畫面上按\'查尋\'進行查尋的動作。所有在快顯功能表中或動作列被點選中的,都提供有例如\'導引\'或\'在地圖上顯示\'等等的選項。 " \'使用位置\'選單 地圖快顯功能表(\'使用位置\'),包含了所有操作的參考點(位置)。 \n\n它可長按地圖上的任何一點(然後輕點其標記),或按軌跡球的按鈕,或者選擇由\'選單\' → \'使用位置\'(最後兩種方式以地圖中心作為參考)。 @@ -866,7 +864,7 @@ 顯示路線 開始導航 請先設定目的地 - 指引 + 導引 顯示 GPS 狀態 營業時間 正在開啟異動清單… @@ -1522,7 +1520,7 @@ OsmAnd 是開放原始碼,而且正在積極的開發。應用程式從報告 保留中間點 您已經有中間點設定。 導引到 - 導引來自 + 從此導引 地圖: 到: 經過: @@ -1922,4 +1920,5 @@ OsmAnd 是開放原始碼,而且正在積極的開發。應用程式從報告 塞爾維亞 簡體中文 正體中文 - + 地鐵模式 + diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 5529870c52..04cb748e20 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -9,7 +9,8 @@ 3. All your modified/created strings are in the top of the file (to make easier find what\'s translated). PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy --> - Keep + Subway mode + Keep Stop Enable sleep mode GPS wake up interval diff --git a/OsmAnd/src/net/osmand/plus/sherpafy/SherpafyFavoriteFragment.java b/OsmAnd/src/net/osmand/plus/sherpafy/SherpafyFavoriteFragment.java new file mode 100644 index 0000000000..3949608194 --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/sherpafy/SherpafyFavoriteFragment.java @@ -0,0 +1,64 @@ +package net.osmand.plus.sherpafy; + +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuInflater; +import com.actionbarsherlock.view.MenuItem; + +import net.osmand.plus.R; +import net.osmand.plus.sherpafy.TourInformation.StageFavorite; +import android.app.Activity; +import android.view.View; +import android.webkit.WebView; +import android.widget.ImageView; +import android.widget.TextView; + +public class SherpafyFavoriteFragment extends SherpafyStageInfoFragment { + private static final int SHOW_ON_MAP = 10; + public static final String FAV_PARAM = null; + private StageFavorite fav; + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + int k = getArguments().getInt(FAV_PARAM); + if(stage != null) { + fav = (StageFavorite) stage.getFavorites().get(k); + getSherlockActivity().getSupportActionBar().setTitle(fav.getName()); + } + } + + protected void updateView(WebView description, ImageView icon, TextView additional, TextView text, TextView header) { + if (fav.getImage() != null) { + icon.setImageBitmap(fav.getImage()); + } else { + icon.setVisibility(View.GONE); + } + additional.setVisibility(View.GONE); + header.setText(fav.getName()); + text.setText(fav.getShortDescription()); + description.loadData("" + fav.getFullDescription() + " k) { + stage = tour.getStageInformation().get(k); + } + setHasOptionsMenu(true); + } + + @Override + public void onResume() { + super.onResume(); + if(tour != null) { + getSherlockActivity().getSupportActionBar().setTitle(tour.getName()); + } + } + + @Override + public void onListItemClick(ListView l, View v, int position, long id) { + Object item = getListAdapter().getItem(position); + if (item instanceof StageFavorite) { + ((TourViewActivity) getSherlockActivity()).showFavoriteFragment(stage, (StageFavorite) item); + } + } + + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == android.R.id.home) { + ((TourViewActivity) getSherlockActivity()).showSelectedItem(); + return true; + } + return super.onOptionsItemSelected(item); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View v = super.onCreateView(inflater, container, savedInstanceState); + imageView = new ImageView(getActivity()); + imageView.setLayoutParams(new AbsListView.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); + imageView.setScaleType(ScaleType.CENTER_CROP); + return v; + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + favAdapter = new FavoriteAdapter(stage.getFavorites()); + setListAdapter(favAdapter); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + setListAdapter(null); + } + + class FavoriteAdapter extends ArrayAdapter { + + public FavoriteAdapter(List list) { + super(getActivity(), R.layout.sherpafy_stage_list_item, list); + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + View row = convertView; + if (row == null) { + LayoutInflater inflater = getActivity().getLayoutInflater(); + row = inflater.inflate(R.layout.sherpafy_stage_list_item, parent, false); + } + Object ti = getItem(position); + TextView header = (TextView) row.findViewById(R.id.HeaderText); + ImageView img = (ImageView) row.findViewById(R.id.Icon); + TextView text = (TextView) row.findViewById(R.id.Text); + TextView addtext = (TextView) row.findViewById(R.id.AdditionalText); + + if (ti instanceof StageFavoriteGroup) { + addtext.setText(""); + text.setTextColor(((StageFavoriteGroup)ti).getColor()); + text.setText(((StageFavoriteGroup)ti).getName()); + header.setVisibility(View.GONE); + img.setVisibility(View.GONE); + img.setImageDrawable(null); + } else if(ti instanceof StageFavorite){ + StageFavorite sf = ((StageFavorite)ti); + if(stage.startPoint != null && sf.location != null) { + double d = MapUtils.getDistance(stage.startPoint, sf.location); + addtext.setText(OsmAndFormatter.getFormattedDistance((float) d, getMyApplication())); + } else { + addtext.setText(""); + } + header.setVisibility(View.VISIBLE); + header.setText(sf.getName()); + text.setTextColor(StageImageDrawable.MENU_COLOR); + text.setText(sf.getShortDescription()); + img.setVisibility(View.VISIBLE); + img.setImageDrawable(new StageImageDrawable(getActivity(), sf.getGroup().getColor(), sf + .getName().substring(0, 1), 0)); + + } + return row; + } + } + + private OsmandApplication getMyApplication() { + return (OsmandApplication) getActivity().getApplication(); + } + +} \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/sherpafy/SherpafyStageFragment.java b/OsmAnd/src/net/osmand/plus/sherpafy/SherpafyStageFragment.java index 8bfcc6eb2e..ccd296bf6b 100644 --- a/OsmAnd/src/net/osmand/plus/sherpafy/SherpafyStageFragment.java +++ b/OsmAnd/src/net/osmand/plus/sherpafy/SherpafyStageFragment.java @@ -1,5 +1,6 @@ package net.osmand.plus.sherpafy; +import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; @@ -9,6 +10,7 @@ import net.osmand.plus.GPXUtilities.WptPt; import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; +import net.osmand.plus.sherpafy.TourInformation.StageFavoriteGroup; import net.osmand.plus.sherpafy.TourInformation.StageInformation; import android.app.Activity; import android.content.Context; @@ -18,7 +20,7 @@ import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.text.Html; @@ -72,8 +74,8 @@ public class SherpafyStageFragment extends SherlockFragment { int k = getArguments().getInt(STAGE_PARAM); if(tour != null && tour.getStageInformation().size() > k) { stage = tour.getStageInformation().get(k); - getSherlockActivity().getSupportActionBar().setTitle(getString(R.string.tab_stage) + " " + (k+1)); } + getSherlockActivity().getSupportActionBar().setTitle(getString(R.string.tab_stage) + " " + (k+1)); } @@ -111,18 +113,49 @@ public class SherpafyStageFragment extends SherlockFragment { tabHost.setup(); ViewPager mViewPager = (ViewPager) view.findViewById(R.id.pager); - mTabsAdapter = new TabsAdapter(getSherlockActivity(), tabHost, mViewPager); - mTabsAdapter.addTab(tabHost.newTabSpec("INFO").setIndicator(getString(R.string.sherpafy_stage_tab_info)), - SherpafyStageInfoFragment.class, null); - mTabsAdapter.addTab(tabHost.newTabSpec("ROUTE").setIndicator(getString(R.string.sherpafy_stage_tab_route)), - SherpafyStageItineraryFragment.class, null); - mTabsAdapter.addTab(tabHost.newTabSpec("FAV").setIndicator(getString(R.string.sherpafy_stage_tab_fav)), - SherpafyStageInfoFragment.class, null); - mTabsAdapter.addTab(tabHost.newTabSpec("TARGET").setIndicator(getString(R.string.sherpafy_stage_tab_target)), - SherpafyStageItineraryFragment.class, null); + + mTabsAdapter = new TabsAdapter(getChildFragmentManager(), getSherlockActivity(), tabHost, mViewPager, stage); + if (stage != null) { + mTabsAdapter.addTab(tabHost.newTabSpec("INFO").setIndicator(getString(R.string.sherpafy_stage_tab_info)), + SherpafyStageInfoFragment.class); + if (!stage.getItinerary().equals("")) { + mTabsAdapter.addTab( + tabHost.newTabSpec("ROUTE").setIndicator(getString(R.string.sherpafy_stage_tab_route)), + SherpafyStageItineraryFragment.class); + } + if (stage.getFavorites().size() > 0) { + mTabsAdapter.addTab(tabHost.newTabSpec("FAV").setIndicator(getString(R.string.sherpafy_stage_tab_fav)), + SherpafyFavoritesListFragment.class); + } + StageFavoriteGroup group = stage.getGroupById("destination"); + if (group != null && group.getFavorites().size() > 0) { + int o = group.getFavorites().get(0).getOrder(); + Bundle bl = new Bundle(); + bl.putInt(SherpafyFavoriteFragment.FAV_PARAM, o); + mTabsAdapter.addTab( + tabHost.newTabSpec("TARGET").setIndicator(getString(R.string.sherpafy_stage_tab_target)), + SherpafyFavoriteFragment.class, bl); + } + } return view; } + @Override + public void onDetach() { + super.onDetach(); + + try { + Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager"); + childFragmentManager.setAccessible(true); + childFragmentManager.set(this, null); + + } catch (NoSuchFieldException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + ///////// private ImageGetter getImageGetter(final View v) { return new Html.ImageGetter() { @@ -222,6 +255,7 @@ public class SherpafyStageFragment extends SherlockFragment { private final TabHost mTabHost; private final ViewPager mViewPager; private final ArrayList mTabs = new ArrayList(); + private StageInformation stage; static final class TabInfo { private final String tag; @@ -251,19 +285,27 @@ public class SherpafyStageFragment extends SherlockFragment { } } - public TabsAdapter(FragmentActivity activity, TabHost tabHost,ViewPager pager) { - super(activity.getSupportFragmentManager()); - mContext = activity; + public TabsAdapter(FragmentManager fm, Context ui, TabHost tabHost, ViewPager pager, + StageInformation stage) { + super(fm); + mContext = ui; mTabHost = tabHost; mViewPager = pager; + this.stage = stage; mTabHost.setOnTabChangedListener(this); mViewPager.setAdapter(this); mViewPager.setOnPageChangeListener(this); } + public TabSpec addTab(TabHost.TabSpec tabSpec, Class clss) { + return addTab(tabSpec, clss, new Bundle()); + } + public TabSpec addTab(TabHost.TabSpec tabSpec, Class clss, Bundle args) { tabSpec.setContent(new DummyTabFactory(mContext)); String tag = tabSpec.getTag(); + args.putInt(STAGE_PARAM, stage.getOrder()); + args.putString(TOUR_PARAM, stage.getTour().getId()); TabInfo info = new TabInfo(tag, clss, args); mTabs.add(info); @@ -293,6 +335,7 @@ public class SherpafyStageFragment extends SherlockFragment { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } + @Override public void onPageSelected(int position) { diff --git a/OsmAnd/src/net/osmand/plus/sherpafy/SherpafyStageInfoFragment.java b/OsmAnd/src/net/osmand/plus/sherpafy/SherpafyStageInfoFragment.java index 08162eb503..29d4590fa2 100644 --- a/OsmAnd/src/net/osmand/plus/sherpafy/SherpafyStageInfoFragment.java +++ b/OsmAnd/src/net/osmand/plus/sherpafy/SherpafyStageInfoFragment.java @@ -22,7 +22,7 @@ public class SherpafyStageInfoFragment extends SherlockFragment { OsmandApplication app; private SherpafyCustomization customization; protected StageInformation stage; - private TourInformation tour; + protected TourInformation tour; private View view; public SherpafyStageInfoFragment() { @@ -40,7 +40,6 @@ public class SherpafyStageInfoFragment extends SherlockFragment { for(TourInformation ti : customization.getTourInformations()) { if(ti.getId().equals(id)) { tour = ti; - getSherlockActivity().getSupportActionBar().setTitle(tour.getName()); break; } } @@ -60,7 +59,6 @@ public class SherpafyStageInfoFragment extends SherlockFragment { TextView additional = (TextView) view.findViewById(R.id.AdditionalText); TextView text = (TextView) view.findViewById(R.id.Text); TextView header = (TextView) view.findViewById(R.id.HeaderText); - updateView(description, icon, additional, text, header); return view; } diff --git a/OsmAnd/src/net/osmand/plus/sherpafy/SherpafyStageItineraryFragment.java b/OsmAnd/src/net/osmand/plus/sherpafy/SherpafyStageItineraryFragment.java index e8ef9077a8..6c98e2ac1c 100644 --- a/OsmAnd/src/net/osmand/plus/sherpafy/SherpafyStageItineraryFragment.java +++ b/OsmAnd/src/net/osmand/plus/sherpafy/SherpafyStageItineraryFragment.java @@ -8,14 +8,14 @@ import android.widget.TextView; public class SherpafyStageItineraryFragment extends SherpafyStageInfoFragment { protected void updateView(WebView description, ImageView icon, TextView additional, TextView text, TextView header) { - if (stage.getItineraryBitmap() != null) { - icon.setImageBitmap(stage.getItineraryBitmap()); - } else { - icon.setVisibility(View.GONE); - } - additional.setVisibility(View.GONE); - header.setVisibility(View.GONE); - description.loadData("" + stage.getItinerary() - + "" + stage.getItinerary() + " stageInformation = new ArrayList(); - public TourInformation(File f) { this.folder = f; this.name = f.getName().replace('_', ' '); @@ -47,6 +48,18 @@ public class TourInformation { return instructions; } + private static WeakHashMap androidBitmaps = new WeakHashMap(); + private static Bitmap decodeImage(File f) { + if(!androidBitmaps.containsKey(f)) { + Bitmap img =null; + if(f != null && f.exists()) { + img = BitmapFactory.decodeFile(f.getAbsolutePath()); + } + androidBitmaps.put(f, img); + } + return androidBitmaps.get(f); + } + private static Reader getUTF8Reader(InputStream f) throws IOException { BufferedInputStream bis = new BufferedInputStream(f); @@ -71,6 +84,8 @@ public class TourInformation { int tok; String text = ""; StageInformation stage = null; + StageFavoriteGroup group = null; + StageFavorite favorite = null; stageInformation.clear(); while ((tok = parser.next()) != XmlPullParser.END_DOCUMENT) { if (tok == XmlPullParser.START_TAG) { @@ -84,16 +99,39 @@ public class TourInformation { stage.name = name; } else if (tag.equals("itinerary") && stage != null){ String img = getDefAttribute(parser, "image", ""); + stage.distance = Double.parseDouble(getDefAttribute(parser, "distance", "0")); + stage.duration = Integer.parseInt(getDefAttribute(parser, "duration", "0")); + double slat = Double.parseDouble(getDefAttribute(parser, "startLat", "0")); + double slon = Double.parseDouble(getDefAttribute(parser, "startLon", "0")); + if(slat != 0 || slon != 0) { + stage.startPoint = new LatLon(slat, slon); + } if(img.startsWith(FILE_PREFIX)) { stage.itineraryFile = getFile(img); } stage.itinerary = getInnerXml(parser); + } else if(stage != null && tag.equals("group")) { + group = new StageFavoriteGroup(); + group.color = Algorithms.parseColor(getDefAttribute(parser, "color", Algorithms.colorToString(StageImageDrawable.INFO_COLOR))); + group.name = getDefAttribute(parser, "name", ""); + group.id = getDefAttribute(parser, "id", ""); + group.order = stage.favorites.size(); + stage.favorites.add(group); + } else if(group != null && tag.equals("favorite")) { + favorite = new StageFavorite(); + favorite.location = new LatLon(Double.parseDouble(getDefAttribute(parser, "lat", "0")), + Double.parseDouble(getDefAttribute(parser, "lon", "0"))); + favorite.name = getDefAttribute(parser, "name", ""); + favorite.group = group; + favorite.order = stage.favorites.size(); + group.favorites.add(favorite); + stage.favorites.add(favorite); } else if (tag.equals("fullDescription")){ fulldescription = getInnerXml(parser); } else if (tag.equals("instructions")){ instructions = getInnerXml(parser); - } else if (stage != null && tag.equals("interval")){ - stage.distance = Double.parseDouble(getDefAttribute(parser, "distance", "0")); + } else if (favorite != null && tag.equals("description")){ + favorite.fullDescription = getInnerXml(parser); } else if (stage != null && tag.equals("description")){ stage.fullDescription = getInnerXml(parser); } @@ -104,12 +142,18 @@ public class TourInformation { if(tag.equals("stage")) { stageInformation.add(stage); stage = null; - } else if(stage != null && tag.equals("fullDescription")) { - stage.fullDescription = text; + } else if(favorite != null && tag.equals("defaultImage")) { + if(text.startsWith(FILE_PREFIX)) { + favorite.imgFile = getFile(text); + } } else if(stage != null && tag.equals("defaultImage")) { if(text.startsWith(FILE_PREFIX)) { stage.imgFile = getFile(text); } + } else if(stage != null && tag.equals("group")) { + group = null; + } else if(stage != null && tag.equals("favorite")) { + favorite = null; } else if(tag.equals("defaultImage")) { if(text.startsWith(FILE_PREFIX)) { imgFile = getFile(text); @@ -119,7 +163,9 @@ public class TourInformation { stage.gpxFile = getFile(text); } } else if(tag.equals("shortDescription")) { - if(stage != null) { + if(favorite != null) { + favorite.shortDescription = text; + } else if(stage != null) { stage.shortDescription = text; } else { shortDescription = text; @@ -168,10 +214,7 @@ public class TourInformation { public Bitmap getImageBitmap() { - if(defaultImg == null && imgFile != null && imgFile.exists()) { - defaultImg = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); - } - return defaultImg; + return decodeImage(imgFile); } //returns image bitmap from selected relative path @@ -189,21 +232,104 @@ public class TourInformation { } - public static class StageInformation { + public static class StageFavoriteGroup { + String id; + int order; + int color; + String name = ""; + List favorites = new ArrayList(); - String itinerary = ""; - File gpxFile; - public GPXFile gpx; + public int getColor() { + return color; + } + + public String getName() { + return name; + } + + public List getFavorites() { + return favorites; + } + + public int getOrder() { + return order; + } + } + + public static class StageFavorite { + int order; + LatLon location; + String name = ""; + String shortDescription = ""; + String fullDescription = ""; + File imgFile; + StageFavoriteGroup group; + + public StageFavoriteGroup getGroup() { + return group; + } + + public int getOrder() { + return order; + } + + public LatLon getLatLon() { + return location; + } + + public String getName() { + return name; + } + + public String getShortDescription() { + return shortDescription; + } + + public String getFullDescription() { + return fullDescription; + } + + public Bitmap getImage() { + return decodeImage(imgFile); + } + + } + + public static class StageInformation { + int duration; + String itinerary = ""; + File gpxFile; + GPXFile gpx; String name = ""; String shortDescription = ""; String fullDescription = ""; - Bitmap img; File imgFile; - private Bitmap itineraryImg; File itineraryFile; double distance; - private TourInformation tour; - private int order; + LatLon startPoint = null; + List favorites = new ArrayList(); + + TourInformation tour; + int order; + + public List getFavorites() { + return favorites; + } + + public StageFavoriteGroup getGroupById(String id) { + for(Object o : favorites) { + if(o instanceof StageFavoriteGroup) { + if(id.equals(((StageFavoriteGroup)o).id)) { + return (StageFavoriteGroup) o; + } + } + } + return null; + } + + public LatLon getStartPoint() { + return startPoint; + } public String getItinerary() { return itinerary; @@ -244,17 +370,12 @@ public class TourInformation { public Bitmap getImageBitmap() { - if(img == null && imgFile != null && imgFile.exists()) { - img = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); - } - return img; + return decodeImage(imgFile); } + public Bitmap getItineraryBitmap() { - if(itineraryImg == null && itineraryFile != null && itineraryFile.exists()) { - itineraryImg = BitmapFactory.decodeFile(itineraryFile.getAbsolutePath()); - } - return itineraryImg; + return decodeImage(itineraryFile); } @Override diff --git a/OsmAnd/src/net/osmand/plus/sherpafy/TourViewActivity.java b/OsmAnd/src/net/osmand/plus/sherpafy/TourViewActivity.java index d9e1daf904..41135b5eb6 100644 --- a/OsmAnd/src/net/osmand/plus/sherpafy/TourViewActivity.java +++ b/OsmAnd/src/net/osmand/plus/sherpafy/TourViewActivity.java @@ -4,6 +4,7 @@ import java.util.WeakHashMap; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; +import net.osmand.plus.sherpafy.TourInformation.StageFavorite; import net.osmand.plus.sherpafy.TourInformation.StageInformation; import android.content.Intent; import android.content.pm.ActivityInfo; @@ -304,6 +305,19 @@ public class TourViewActivity extends SherlockFragmentActivity { } } + + public void showFavoriteFragment(StageInformation stage, StageFavorite sf) { + FragmentManager fragmentManager = getSupportFragmentManager(); + setDrawerIndicatorVisible(false); + SherpafyFavoriteFragment fragment = new SherpafyFavoriteFragment(); + Bundle bl = new Bundle(); + bl.putInt(SherpafyFavoriteFragment.STAGE_PARAM, stage.getOrder()); + bl.putString(SherpafyFavoriteFragment.TOUR_PARAM, stage.getTour().getId()); + bl.putInt(SherpafyFavoriteFragment.FAV_PARAM, sf.getOrder()); + fragment.setArguments(bl); + fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); + } + public void showHtmlFragment(String title, String cont) { FragmentManager fragmentManager = getSupportFragmentManager(); setDrawerIndicatorVisible(false);