From 19ff91d93de2154f785dfb83ac6e4a562b8ea326 Mon Sep 17 00:00:00 2001 From: Zorg Date: Mon, 20 Jan 2025 20:46:12 -0800 Subject: [PATCH] Process recovery suggestion from Sparkle update error messages in UI alert (#2689) Also update read-only mount localization string to remove extraneous comma --- Sparkle/Base.lproj/Sparkle.strings | 2 +- Sparkle/SPUBasicUpdateDriver.m | 2 +- Sparkle/SPUStandardUserDriver.m | 16 ++++++++++++++-- Sparkle/ca.lproj/Sparkle.strings | 2 +- Sparkle/cs.lproj/Sparkle.strings | 2 +- Sparkle/da.lproj/Sparkle.strings | 2 +- Sparkle/de.lproj/Sparkle.strings | 2 +- Sparkle/el.lproj/Sparkle.strings | 2 +- Sparkle/es.lproj/Sparkle.strings | 2 +- Sparkle/fa.lproj/Sparkle.strings | 2 +- Sparkle/fr.lproj/Sparkle.strings | 2 +- Sparkle/he.lproj/Sparkle.strings | 2 +- Sparkle/hr.lproj/Sparkle.strings | 2 +- Sparkle/it.lproj/Sparkle.strings | 2 +- Sparkle/ja.lproj/Sparkle.strings | 2 +- Sparkle/ko.lproj/Sparkle.strings | 2 +- Sparkle/nb.lproj/Sparkle.strings | 2 +- Sparkle/nl.lproj/Sparkle.strings | 2 +- Sparkle/nn.lproj/Sparkle.strings | 2 +- Sparkle/pl.lproj/Sparkle.strings | 2 +- Sparkle/pt-BR.lproj/Sparkle.strings | 2 +- Sparkle/pt-PT.lproj/Sparkle.strings | 2 +- Sparkle/ro.lproj/Sparkle.strings | 2 +- Sparkle/ru.lproj/Sparkle.strings | 2 +- Sparkle/sk.lproj/Sparkle.strings | 2 +- Sparkle/sl.lproj/Sparkle.strings | 2 +- Sparkle/th.lproj/Sparkle.strings | 2 +- Sparkle/tr.lproj/Sparkle.strings | 2 +- Sparkle/uk.lproj/Sparkle.strings | 2 +- Sparkle/zh_CN.lproj/Sparkle.strings | 2 +- Sparkle/zh_HK.lproj/Sparkle.strings | 2 +- Sparkle/zh_TW.lproj/Sparkle.strings | 2 +- 32 files changed, 45 insertions(+), 33 deletions(-) diff --git a/Sparkle/Base.lproj/Sparkle.strings b/Sparkle/Base.lproj/Sparkle.strings index 3db191da90..46dcc5de1f 100644 --- a/Sparkle/Base.lproj/Sparkle.strings +++ b/Sparkle/Base.lproj/Sparkle.strings @@ -14,7 +14,7 @@ "%1$@ can’t be updated if it’s running from the location it was downloaded to." = "%1$@ can’t be updated if it’s running from the location it was downloaded to."; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "%1$@ can’t be updated, because it was opened from a read-only or a temporary location."; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "%1$@ can’t be updated because it was opened from a read-only or a temporary location."; /* No comment provided by engineer. */ "%@ %@ is currently the newest version available." = "%1$@ %2$@ is currently the newest version available."; diff --git a/Sparkle/SPUBasicUpdateDriver.m b/Sparkle/SPUBasicUpdateDriver.m index dc6a66ef69..18cdc6a566 100644 --- a/Sparkle/SPUBasicUpdateDriver.m +++ b/Sparkle/SPUBasicUpdateDriver.m @@ -77,7 +77,7 @@ - (void)checkForUpdatesAtAppcastURL:(NSURL *)appcastURL withUserAgent:(NSString if ([_host isRunningTranslocated]) { [delegate basicDriverIsRequestingAbortUpdateWithError:[NSError errorWithDomain:SUSparkleErrorDomain code:SURunningTranslocated userInfo:@{ NSLocalizedRecoverySuggestionErrorKey: [NSString stringWithFormat:SULocalizedStringFromTableInBundle(@"Quit %1$@, move it into your Applications folder, relaunch it from there and try again.", SPARKLE_TABLE, sparkleBundle, nil), hostName], NSLocalizedDescriptionKey: [NSString stringWithFormat:SULocalizedStringFromTableInBundle(@"%1$@ can’t be updated if it’s running from the location it was downloaded to.", SPARKLE_TABLE, sparkleBundle, nil), hostName], }]]; } else { - [delegate basicDriverIsRequestingAbortUpdateWithError:[NSError errorWithDomain:SUSparkleErrorDomain code:SURunningFromDiskImageError userInfo:@{ NSLocalizedDescriptionKey: [NSString stringWithFormat:SULocalizedStringFromTableInBundle(@"%1$@ can’t be updated, because it was opened from a read-only or a temporary location.", SPARKLE_TABLE, sparkleBundle, nil), hostName], NSLocalizedRecoverySuggestionErrorKey: [NSString stringWithFormat:SULocalizedStringFromTableInBundle(@"Use Finder to copy %1$@ to the Applications folder, relaunch it from there, and try again.", SPARKLE_TABLE, sparkleBundle, nil), hostName] }]]; + [delegate basicDriverIsRequestingAbortUpdateWithError:[NSError errorWithDomain:SUSparkleErrorDomain code:SURunningFromDiskImageError userInfo:@{ NSLocalizedDescriptionKey: [NSString stringWithFormat:SULocalizedStringFromTableInBundle(@"%1$@ can’t be updated because it was opened from a read-only or a temporary location.", SPARKLE_TABLE, sparkleBundle, nil), hostName], NSLocalizedRecoverySuggestionErrorKey: [NSString stringWithFormat:SULocalizedStringFromTableInBundle(@"Use Finder to copy %1$@ to the Applications folder, relaunch it from there, and try again.", SPARKLE_TABLE, sparkleBundle, nil), hostName] }]]; } } else { [_appcastDriver loadAppcastFromURL:appcastURL userAgent:userAgent httpHeaders:httpHeaders inBackground:background]; diff --git a/Sparkle/SPUStandardUserDriver.m b/Sparkle/SPUStandardUserDriver.m index 2a51d1b929..47a257f957 100644 --- a/Sparkle/SPUStandardUserDriver.m +++ b/Sparkle/SPUStandardUserDriver.m @@ -586,9 +586,21 @@ - (void)showUpdaterError:(NSError *)error acknowledgement:(void (^)(void))acknow NSBundle *sparkleBundle = SUSparkleBundle(); #endif + // Ideally we should use -[NSAlert alertWithError:] however + // unfortunately Sparkle may return error messages with descriptions that contain + // recovery suggestions. So we will check if an explicit recovery suggestion exists, + // and set the mesage and informative text appropriately. + // In the future we should audit potential error messages and make them consistent. NSAlert *alert = [[NSAlert alloc] init]; - alert.messageText = SULocalizedStringFromTableInBundle(@"Update Error!", SPARKLE_TABLE, sparkleBundle, nil); - alert.informativeText = [NSString stringWithFormat:@"%@", [error localizedDescription]]; + NSString *recoverySuggestion = [error localizedRecoverySuggestion]; + if (recoverySuggestion != nil) { + alert.messageText = error.localizedDescription; + alert.informativeText = recoverySuggestion; + } else { + alert.messageText = SULocalizedStringFromTableInBundle(@"Update Error!", SPARKLE_TABLE, sparkleBundle, nil); + alert.informativeText = error.localizedDescription; + } + [alert addButtonWithTitle:SULocalizedStringFromTableInBundle(@"Cancel Update", SPARKLE_TABLE, sparkleBundle, nil)]; [self showAlert:alert secondaryAction:nil]; diff --git a/Sparkle/ca.lproj/Sparkle.strings b/Sparkle/ca.lproj/Sparkle.strings index fdc4b9e13f..142e10ca1f 100644 --- a/Sparkle/ca.lproj/Sparkle.strings +++ b/Sparkle/ca.lproj/Sparkle.strings @@ -11,7 +11,7 @@ "%@ of %@" = "%1$@ de %2$@"; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "%1$@ no es pot actualitzar quan funciona des d'un disc d'imatge."; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "%1$@ no es pot actualitzar quan funciona des d'un disc d'imatge."; /* No comment provided by engineer. */ "A new version of %@ is available!" = "Hi ha una nova versió de %@ disponible!"; diff --git a/Sparkle/cs.lproj/Sparkle.strings b/Sparkle/cs.lproj/Sparkle.strings index bfb4cfcf6e..a1aaf922fa 100644 --- a/Sparkle/cs.lproj/Sparkle.strings +++ b/Sparkle/cs.lproj/Sparkle.strings @@ -41,7 +41,7 @@ "%1$@ can’t be updated if it’s running from the location it was downloaded to." = "Aplikace %1$@ nemůže být aktualizována pokud je spuštěna z umístění, ve kterém je stažena."; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "Aplikace %1$@ nemůže být aktualizována, protože je spuštěna z dočasného umístění nebo z umístění, na které nelze zapisovat."; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "Aplikace %1$@ nemůže být aktualizována, protože je spuštěna z dočasného umístění nebo z umístění, na které nelze zapisovat."; /* No comment provided by engineer. */ "A new version of %@ is available!" = "Je dostupná nová verze aplikace %@!"; diff --git a/Sparkle/da.lproj/Sparkle.strings b/Sparkle/da.lproj/Sparkle.strings index 54fcfc1f6e..8ee4245185 100644 --- a/Sparkle/da.lproj/Sparkle.strings +++ b/Sparkle/da.lproj/Sparkle.strings @@ -20,7 +20,7 @@ "%1$@ %2$@ has been downloaded and is ready to use! Would you like to install it and relaunch %1$@ now?" = "%1$@ %2$@ er hentet og klar til brug! Vil du installere og genstarte %1$@ nu?"; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "%1$@ kan ikke opdateres når det køres fra en kun læsbar enhed."; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "%1$@ kan ikke opdateres når det køres fra en kun læsbar enhed."; /* No comment provided by engineer. */ "A new version of %@ is available!" = "En ny version af %@ er tilgængelig!"; diff --git a/Sparkle/de.lproj/Sparkle.strings b/Sparkle/de.lproj/Sparkle.strings index af481765ab..052e5659fe 100644 --- a/Sparkle/de.lproj/Sparkle.strings +++ b/Sparkle/de.lproj/Sparkle.strings @@ -41,7 +41,7 @@ "%1$@ can’t be updated if it’s running from the location it was downloaded to." = "„%1$@“ kann nicht aktualisiert werden, wenn das Programm von dem Ort ausgeführt wird, an den es heruntergeladen wurde."; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "%1$@ kann nicht aktualisiert werden, da es aus dem Downloads-Order, oder von einer DMG-Datei oder einem Laufwerk ohne Schreibzugriff gestartet wurde."; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "%1$@ kann nicht aktualisiert werden, da es aus dem Downloads-Order, oder von einer DMG-Datei oder einem Laufwerk ohne Schreibzugriff gestartet wurde."; /* No comment provided by engineer. */ "A new version of %@ is available!" = "Eine neue Version von %@ ist verfügbar!"; diff --git a/Sparkle/el.lproj/Sparkle.strings b/Sparkle/el.lproj/Sparkle.strings index 02bb8fe655..57955e247a 100644 --- a/Sparkle/el.lproj/Sparkle.strings +++ b/Sparkle/el.lproj/Sparkle.strings @@ -17,7 +17,7 @@ "%1$@ %2$@ has been downloaded and is ready to use! Would you like to install it and relaunch %1$@ now?" = "Το %1$@ %2$@ κατέβηκε. Είναι έτοιμο προς εγκατάσταση! Θέλετε να εγκαταστήσετε και να επανεκκινήσετε το %1$@ τώρα;"; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "Το %1$@ δεν μπορεί να ενημερωθεί όσο τρέχει από έναν δίσκο ανάγνωσης-μόνο ή έναν οπτικό δίσκο."; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "Το %1$@ δεν μπορεί να ενημερωθεί όσο τρέχει από έναν δίσκο ανάγνωσης-μόνο ή έναν οπτικό δίσκο."; /* No comment provided by engineer. */ "A new version of %@ is available!" = "Μία νέα έκδοση του %@ είναι διαθέσιμη!"; diff --git a/Sparkle/es.lproj/Sparkle.strings b/Sparkle/es.lproj/Sparkle.strings index b94dc17006..57780d1ce4 100644 --- a/Sparkle/es.lproj/Sparkle.strings +++ b/Sparkle/es.lproj/Sparkle.strings @@ -23,7 +23,7 @@ "%1$@ %2$@ has been downloaded and is ready to use! Would you like to install it and relaunch %1$@ now?" = "¡%1$@ %2$@ se ha descargado y está lista para usarse! ¿Te gustaría instalarla y volver a abrir %1$@ ahora?"; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "%1$@ no se puede actualizar porque fue abierta desde una ubicación temporal o de solo lectura."; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "%1$@ no se puede actualizar porque fue abierta desde una ubicación temporal o de solo lectura."; /* No comment provided by engineer. */ "A new version of %@ is available!" = "¡Una nueva versión de %@ está disponible!"; diff --git a/Sparkle/fa.lproj/Sparkle.strings b/Sparkle/fa.lproj/Sparkle.strings index 9c5653398d..1becfafd33 100644 --- a/Sparkle/fa.lproj/Sparkle.strings +++ b/Sparkle/fa.lproj/Sparkle.strings @@ -26,7 +26,7 @@ "%1$@ can’t be updated if it’s running from the location it was downloaded to." = "%1$@ نمی‌تواند به‌روزرسانی شود، اگر از محلی که در آن بارگیری شده باز شود"; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "%1$@ نمی‌تواند به‌روزرسانی شود، زیرا از محلی با سطح دسترسی فقط-خواندن یا موقت باز شده است"; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "%1$@ نمی‌تواند به‌روزرسانی شود، زیرا از محلی با سطح دسترسی فقط-خواندن یا موقت باز شده است"; /* No comment provided by engineer. */ "A new version of %@ is available!" = "نسخه‌ای جدید از %@ در دسترس است"; diff --git a/Sparkle/fr.lproj/Sparkle.strings b/Sparkle/fr.lproj/Sparkle.strings index e0c7ba37f3..baff8eced3 100644 --- a/Sparkle/fr.lproj/Sparkle.strings +++ b/Sparkle/fr.lproj/Sparkle.strings @@ -26,7 +26,7 @@ "%1$@ can’t be updated if it’s running from the location it was downloaded to." = "%1$@ ne peut pas être mis à jour s’il est exécuté depuis le dossier dans lequel il a été téléchargé."; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "%1$@ ne peut pas être mis à jour quand il fonctionne à partir d’un volume en lecture seule, comme une image disque ou un lecteur optique."; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "%1$@ ne peut pas être mis à jour quand il fonctionne à partir d’un volume en lecture seule, comme une image disque ou un lecteur optique."; /* No comment provided by engineer. */ "A new version of %@ is available!" = "Une nouvelle version de %@ est disponible !"; diff --git a/Sparkle/he.lproj/Sparkle.strings b/Sparkle/he.lproj/Sparkle.strings index 8cdc2a843f..9284729858 100644 --- a/Sparkle/he.lproj/Sparkle.strings +++ b/Sparkle/he.lproj/Sparkle.strings @@ -14,7 +14,7 @@ "%1$@ can’t be updated if it’s running from the location it was downloaded to." = "לא ניתן לעדכן את %1$@ כשהוא פועל מהמיקום אליו הוא הורד."; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "לא ניתן לעדכן את %1$@ מכיוון שהוא נפתח ממיקום זמני או לקריאה בלבד."; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "לא ניתן לעדכן את %1$@ מכיוון שהוא נפתח ממיקום זמני או לקריאה בלבד."; /* No comment provided by engineer. */ "%@ %@ is currently the newest version available." = "%@ %@ היא הגרסה החדשה ביותר שזמינה כרגע."; diff --git a/Sparkle/hr.lproj/Sparkle.strings b/Sparkle/hr.lproj/Sparkle.strings index d3b10c65a4..e49c3c5d1a 100644 --- a/Sparkle/hr.lproj/Sparkle.strings +++ b/Sparkle/hr.lproj/Sparkle.strings @@ -23,7 +23,7 @@ "%1$@ %2$@ has been downloaded and is ready to use! Would you like to install it and relaunch %1$@ now?" = "%1$@ %2$@ je preuzeta i spremna za upotrebu! Želiš li je sada instalirati, te ponovo pokrenuti %1$@?"; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "%1$@ nije moguće aktualizirati, jer je pokrenuta s lokacije bez korisničkih prava pisanja, npr. dmg."; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "%1$@ nije moguće aktualizirati, jer je pokrenuta s lokacije bez korisničkih prava pisanja, npr. dmg."; /* No comment provided by engineer. */ "A new version of %@ is available!" = "Dostupna je nova verzija za %@!"; diff --git a/Sparkle/it.lproj/Sparkle.strings b/Sparkle/it.lproj/Sparkle.strings index f2624c6932..ba94615c3c 100644 --- a/Sparkle/it.lproj/Sparkle.strings +++ b/Sparkle/it.lproj/Sparkle.strings @@ -14,7 +14,7 @@ "%1$@ can’t be updated if it’s running from the location it was downloaded to." = "%1$@ non può essere aggiornata se è in esecuzione dalla posizione in cui è stato scaricata."; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "%1$@ non può essere aggiornata perché è stata aperta da una posizione di sola lettura o temporanea."; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "%1$@ non può essere aggiornata perché è stata aperta da una posizione di sola lettura o temporanea."; /* No comment provided by engineer. */ "%@ %@ is currently the newest version available." = "%1$@ %2$@ è la versione più recente attualmente disponibile."; diff --git a/Sparkle/ja.lproj/Sparkle.strings b/Sparkle/ja.lproj/Sparkle.strings index 91b6f514ff..6ea384be82 100644 --- a/Sparkle/ja.lproj/Sparkle.strings +++ b/Sparkle/ja.lproj/Sparkle.strings @@ -41,7 +41,7 @@ "%1$@ can’t be updated if it’s running from the location it was downloaded to." = "この場所ではダウンロードされたアップデートを%1$@に適用できません。"; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "%1$@は読み出し専用または一時的な場所で開かれているためアップデートできません。"; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "%1$@は読み出し専用または一時的な場所で開かれているためアップデートできません。"; /* No comment provided by engineer. */ "A new version of %@ is available!" = "新しいバージョンの%@が入手できます!"; diff --git a/Sparkle/ko.lproj/Sparkle.strings b/Sparkle/ko.lproj/Sparkle.strings index ac9a0ae9ef..6b2a0f2b07 100644 --- a/Sparkle/ko.lproj/Sparkle.strings +++ b/Sparkle/ko.lproj/Sparkle.strings @@ -14,7 +14,7 @@ "%1$@ can’t be updated if it’s running from the location it was downloaded to." = "%1$@ 이(가) 다운로드된 위치에서 실행 중인 경우에는 업데이트할 수 없습니다."; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "%1$@ 이(가) 디스크 이미지나 CD 드라이브 같은 읽기 전용 볼륨에서 실행되고 있으므로 업데이트할 수 없습니다."; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "%1$@ 이(가) 디스크 이미지나 CD 드라이브 같은 읽기 전용 볼륨에서 실행되고 있으므로 업데이트할 수 없습니다."; /* No comment provided by engineer. */ "%@ %@ is currently the newest version available." = "%1$@ %2$@ 이(가) 현재 최신 버전입니다."; diff --git a/Sparkle/nb.lproj/Sparkle.strings b/Sparkle/nb.lproj/Sparkle.strings index 7955c76d06..da057513b5 100644 --- a/Sparkle/nb.lproj/Sparkle.strings +++ b/Sparkle/nb.lproj/Sparkle.strings @@ -20,7 +20,7 @@ "%1$@ %2$@ has been downloaded and is ready to use! Would you like to install it and relaunch %1$@ now?" = "%1$@ %2$@ er lastet ned og er klar til bruk! Ønsker du å installere og restarte %1$@ nå?"; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "%1$@ kan ikke oppdateres fra en 'bare lesbar' enhet som f.eks. en cd"; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "%1$@ kan ikke oppdateres fra en 'bare lesbar' enhet som f.eks. en cd"; /* No comment provided by engineer. */ "A new version of %@ is available!" = "En ny versjon av %@ er tilgjengelig!"; diff --git a/Sparkle/nl.lproj/Sparkle.strings b/Sparkle/nl.lproj/Sparkle.strings index 60d45c8ca7..f2e624b404 100644 --- a/Sparkle/nl.lproj/Sparkle.strings +++ b/Sparkle/nl.lproj/Sparkle.strings @@ -41,7 +41,7 @@ "%1$@ can’t be updated if it’s running from the location it was downloaded to." = "%1$@ kan niet worden bijgewerkt als het is geopend vanuit de downloadlocatie."; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "%1$@ kan niet worden bijgewerkt, omdat het vanuit een alleen-lezen- of tijdelijke locatie is geopend."; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "%1$@ kan niet worden bijgewerkt, omdat het vanuit een alleen-lezen- of tijdelijke locatie is geopend."; /* No comment provided by engineer. */ "A new version of %@ is available!" = "Een nieuwe versie van %@ is beschikbaar!"; diff --git a/Sparkle/nn.lproj/Sparkle.strings b/Sparkle/nn.lproj/Sparkle.strings index 5466edbbf1..0b88d93b5a 100644 --- a/Sparkle/nn.lproj/Sparkle.strings +++ b/Sparkle/nn.lproj/Sparkle.strings @@ -20,7 +20,7 @@ "%1$@ %2$@ has been downloaded and is ready to use! Would you like to install it and relaunch %1$@ now?" = "%1$@ %2$@ er lasta ned og er klar til bruk! Ynskjer du å installera og starta om att %1$@ no?"; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "%1$@ kan ikkje oppdaterast frå ei eining som berre kan lesast, t.d. frå ein cd"; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "%1$@ kan ikkje oppdaterast frå ei eining som berre kan lesast, t.d. frå ein cd"; /* No comment provided by engineer. */ "A new version of %@ is available!" = "Ein ny versjon av %@ er tilgjengeleg!"; diff --git a/Sparkle/pl.lproj/Sparkle.strings b/Sparkle/pl.lproj/Sparkle.strings index 309ab34ba5..15b2c9cb49 100644 --- a/Sparkle/pl.lproj/Sparkle.strings +++ b/Sparkle/pl.lproj/Sparkle.strings @@ -20,7 +20,7 @@ "%1$@ %2$@ has been downloaded and is ready to use! Would you like to install it and relaunch %1$@ now?" = "%1$@ %2$@ został pobrany i jest gotowy do użycia! Czy chcesz teraz zainstalować i ponownie uruchomić %1$@?"; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "%1$@ nie może zostać uaktualniony, ponieważ został uruchomiony z folderu tymczasowego lub tylko do odczytu."; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "%1$@ nie może zostać uaktualniony, ponieważ został uruchomiony z folderu tymczasowego lub tylko do odczytu."; /* No comment provided by engineer. */ "A new version of %@ is available!" = "Dostępna jest nowa wersja %@!"; diff --git a/Sparkle/pt-BR.lproj/Sparkle.strings b/Sparkle/pt-BR.lproj/Sparkle.strings index e0108e161a..9e2faef5ab 100644 --- a/Sparkle/pt-BR.lproj/Sparkle.strings +++ b/Sparkle/pt-BR.lproj/Sparkle.strings @@ -38,7 +38,7 @@ "%1$@ can’t be updated if it’s running from the location it was downloaded to." = "O app %1$@ não pode ser atualizado se ele estiver aberto do local onde foi baixado."; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "O app %1$@ não pode ser atualizado porque foi aberto de um volume somente leitura ou local temporário."; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "O app %1$@ não pode ser atualizado porque foi aberto de um volume somente leitura ou local temporário."; /* No comment provided by engineer. */ "A new version of %@ is available!" = "Uma nova versão do app %@ está disponível!"; diff --git a/Sparkle/pt-PT.lproj/Sparkle.strings b/Sparkle/pt-PT.lproj/Sparkle.strings index 9413418ac8..0efdf914f4 100644 --- a/Sparkle/pt-PT.lproj/Sparkle.strings +++ b/Sparkle/pt-PT.lproj/Sparkle.strings @@ -17,7 +17,7 @@ "%1$@ %2$@ has been downloaded and is ready to use! Would you like to install it and relaunch %1$@ now?" = "O %1$@ %2$@ foi transferido e está pronto a instalar! Gostaria de o fazer agora e reiniciar o %1$@ posteriormente?"; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "O %1$@ não pode ser actualizado quando estiver a ser executado a partir de um volume apenas de leitura como uma imagem de disco ou disco óptico."; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "O %1$@ não pode ser actualizado quando estiver a ser executado a partir de um volume apenas de leitura como uma imagem de disco ou disco óptico."; /* No comment provided by engineer. */ "A new version of %@ is available!" = "Uma nova versão do %@ está dísponível!"; diff --git a/Sparkle/ro.lproj/Sparkle.strings b/Sparkle/ro.lproj/Sparkle.strings index 5fd5eebed1..13bfad3bab 100644 --- a/Sparkle/ro.lproj/Sparkle.strings +++ b/Sparkle/ro.lproj/Sparkle.strings @@ -20,7 +20,7 @@ "%1$@ %2$@ has been downloaded and is ready to use! Would you like to install it and relaunch %1$@ now?" = "%1$@ %2$@ a fost descărcată și este gata de utilizare! Dorești să o instalezi și să relansați %1$@ acum?"; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "%1$@ nu poate fi actualizată atunci când a fost pornită de pe un volum read-only ca o imagine disc sau o unitate optică."; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "%1$@ nu poate fi actualizată atunci când a fost pornită de pe un volum read-only ca o imagine disc sau o unitate optică."; /* No comment provided by engineer. */ "A new version of %@ is available!" = "O nouă versiune pentru %@ este disponibilă!"; diff --git a/Sparkle/ru.lproj/Sparkle.strings b/Sparkle/ru.lproj/Sparkle.strings index 9b4ddaf333..5487e89f09 100644 --- a/Sparkle/ru.lproj/Sparkle.strings +++ b/Sparkle/ru.lproj/Sparkle.strings @@ -17,7 +17,7 @@ "%1$@ %2$@ has been downloaded and is ready to use! Would you like to install it and relaunch %1$@ now?" = "%1$@ %2$@ загружен и готов к использованию! Хотите установить и перезапустить %1$@?"; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "Не удаётся обновить %1$@ с тома, предназначенного только для чтения."; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "Не удаётся обновить %1$@ с тома, предназначенного только для чтения."; /* No comment provided by engineer. */ "A new version of %@ is available!" = "Имеется новая версия %@!"; diff --git a/Sparkle/sk.lproj/Sparkle.strings b/Sparkle/sk.lproj/Sparkle.strings index 133a2b6731..884555ff13 100644 --- a/Sparkle/sk.lproj/Sparkle.strings +++ b/Sparkle/sk.lproj/Sparkle.strings @@ -17,7 +17,7 @@ "%1$@ %2$@ has been downloaded and is ready to use! Would you like to install it and relaunch %1$@ now?" = "Aplikácia %1$@ %2$@ bola prevzatá a je pripravená na použitie! Chcete teraz nainštalovať a následne znovu spustiť %1$@?"; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "Aplikáciu %1$@ nemožno aktualizovať, ak je spustená zo zväzku s právami len na čítanie (napríklad z obrazu disku alebo optického disku)."; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "Aplikáciu %1$@ nemožno aktualizovať, ak je spustená zo zväzku s právami len na čítanie (napríklad z obrazu disku alebo optického disku)."; /* No comment provided by engineer. */ "A new version of %@ is available!" = "Je dostupná nová verzia aplikácie %@!"; diff --git a/Sparkle/sl.lproj/Sparkle.strings b/Sparkle/sl.lproj/Sparkle.strings index a6eab336ee..d8aab94648 100644 --- a/Sparkle/sl.lproj/Sparkle.strings +++ b/Sparkle/sl.lproj/Sparkle.strings @@ -17,7 +17,7 @@ "%1$@ %2$@ has been downloaded and is ready to use! Would you like to install it and relaunch %1$@ now?" = "%1$@ %2$@ je bil uspešno prenešen s spleta in je pripravljen na namestitev. Ga želite namestiti in ponovno zagnati takoj?"; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "Programa %1$@ ni mogoče posodobiti, ker ga poganjate iz lokacije, kamor pisanje ni dovoljeno (pogosto je to slika diska dmg ali optična enota)."; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "Programa %1$@ ni mogoče posodobiti, ker ga poganjate iz lokacije, kamor pisanje ni dovoljeno (pogosto je to slika diska dmg ali optična enota)."; /* No comment provided by engineer. */ "A new version of %@ is available!" = "Na voljo je nova verzija programa %@."; diff --git a/Sparkle/th.lproj/Sparkle.strings b/Sparkle/th.lproj/Sparkle.strings index 647337757b..273afadce7 100644 --- a/Sparkle/th.lproj/Sparkle.strings +++ b/Sparkle/th.lproj/Sparkle.strings @@ -17,7 +17,7 @@ "%1$@ %2$@ has been downloaded and is ready to use! Would you like to install it and relaunch %1$@ now?" = "%1$@ %2$@ ได้ถูกดาวน์โหลดและพร้อมใช้งานแล้ว คุณต้องการติดตั้งและเริ่ม %1$@ ใหม่เดี๋ยวนี้หรือไม่"; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "%1$@ ไม่สามารถรับการอัพเดทได้เมื่อถูกเรียกจากดิสก์แบบอ่านอย่างเดียวหรือซีดีรอม ย้าย"; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "%1$@ ไม่สามารถรับการอัพเดทได้เมื่อถูกเรียกจากดิสก์แบบอ่านอย่างเดียวหรือซีดีรอม ย้าย"; /* No comment provided by engineer. */ "A new version of %@ is available!" = "%@ มีเวอร์ชั่นใหม่!"; diff --git a/Sparkle/tr.lproj/Sparkle.strings b/Sparkle/tr.lproj/Sparkle.strings index cfe51c7597..22ad466116 100644 --- a/Sparkle/tr.lproj/Sparkle.strings +++ b/Sparkle/tr.lproj/Sparkle.strings @@ -20,7 +20,7 @@ "%1$@ %2$@ has been downloaded and is ready to use! Would you like to install it and relaunch %1$@ now?" = "%1$@ %2$@ indirildi ve kullanıma hazır! Şimdi yüklemek ister misiniz? Uygulama yeniden başlatılacaktır."; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "%1$@ uygulaması geçici veya salt okunur bir konumdan açıldığı için güncellenemiyor."; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "%1$@ uygulaması geçici veya salt okunur bir konumdan açıldığı için güncellenemiyor."; /* No comment provided by engineer. */ "A new version of %@ is available!" = "%@ uygulaması için yeni bir sürüm kullanılabilir!"; diff --git a/Sparkle/uk.lproj/Sparkle.strings b/Sparkle/uk.lproj/Sparkle.strings index 0f67796dba..70a7c4821f 100644 --- a/Sparkle/uk.lproj/Sparkle.strings +++ b/Sparkle/uk.lproj/Sparkle.strings @@ -17,7 +17,7 @@ "%1$@ %2$@ has been downloaded and is ready to use! Would you like to install it and relaunch %1$@ now?" = "%1$@ %2$@ завантажений і готовий до використання! Бажаєте встановити і перезавантажити %1$@?"; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "Під час роботи з %1$@ з тому, що призначений лише для читання, наприклад, образу диска чи оптичного диску, його неможливо оновити."; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "Під час роботи з %1$@ з тому, що призначений лише для читання, наприклад, образу диска чи оптичного диску, його неможливо оновити."; /* No comment provided by engineer. */ "A new version of %@ is available!" = "Доступна нова версія %@!"; diff --git a/Sparkle/zh_CN.lproj/Sparkle.strings b/Sparkle/zh_CN.lproj/Sparkle.strings index 8f4e5d5056..0ade40e088 100644 --- a/Sparkle/zh_CN.lproj/Sparkle.strings +++ b/Sparkle/zh_CN.lproj/Sparkle.strings @@ -23,7 +23,7 @@ "%1$@ can’t be updated if it’s running from the location it was downloaded to." = "如果在下载位置运行此程序,则无法对 %1$@ 进行更新。"; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "无法更新 %1$@,因为它运行于一个只读或临时位置。"; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "无法更新 %1$@,因为它运行于一个只读或临时位置。"; /* No comment provided by engineer. */ "A new version of %@ is available!" = "新版本的 %@ 已经发布"; diff --git a/Sparkle/zh_HK.lproj/Sparkle.strings b/Sparkle/zh_HK.lproj/Sparkle.strings index cf12d14a9d..4dfb5e37d0 100644 --- a/Sparkle/zh_HK.lproj/Sparkle.strings +++ b/Sparkle/zh_HK.lproj/Sparkle.strings @@ -14,7 +14,7 @@ "%1$@ can’t be updated if it’s running from the location it was downloaded to." = "如果從下載位置運行 %1$@,則無法進行更新。"; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "無法更新 %1$@,因爲佢運行於一個只讀或臨時位置。"; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "無法更新 %1$@,因爲佢運行於一個只讀或臨時位置。"; /* No comment provided by engineer. */ "%@ %@ is currently the newest version available." = "%1$@ %2$@ 已係目前最新版本。"; diff --git a/Sparkle/zh_TW.lproj/Sparkle.strings b/Sparkle/zh_TW.lproj/Sparkle.strings index c56f9a4ea1..a34a454f55 100644 --- a/Sparkle/zh_TW.lproj/Sparkle.strings +++ b/Sparkle/zh_TW.lproj/Sparkle.strings @@ -14,7 +14,7 @@ "%1$@ can’t be updated if it’s running from the location it was downloaded to." = "當從下載位置執行 %1$@ 時,無法進行更新。"; /* No comment provided by engineer. */ -"%1$@ can’t be updated, because it was opened from a read-only or a temporary location." = "當 %1$@ 正從唯讀卷宗(如磁碟映像檔或光碟機)執行時,無法進行更新。"; +"%1$@ can’t be updated because it was opened from a read-only or a temporary location." = "當 %1$@ 正從唯讀卷宗(如磁碟映像檔或光碟機)執行時,無法進行更新。"; /* No comment provided by engineer. */ "%@ %@ is currently the newest version available." = "%1$@ %2$@ 已是目前最新的版本。";