From cbdfff8ea289adc58e9225970a4138a0673a1b23 Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Thu, 21 Mar 2019 12:35:48 +0100 Subject: [PATCH 001/129] Fixed spelling error in PasswordCreatorView --- MacPass/de.lproj/PasswordCreatorView.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacPass/de.lproj/PasswordCreatorView.strings b/MacPass/de.lproj/PasswordCreatorView.strings index 3e39f8c3e..514ed8f96 100644 --- a/MacPass/de.lproj/PasswordCreatorView.strings +++ b/MacPass/de.lproj/PasswordCreatorView.strings @@ -44,5 +44,5 @@ "CMc-Uh-Fo5.title" = "Mindestens ein Zeichen aus jeder Gruppe"; /* Class = "NSButtonCell"; title = "Set Default"; ObjectID = "Wvs-Md-Ob8"; */ -"Wvs-Md-Ob8.title" = "Als Standard festelegen"; +"Wvs-Md-Ob8.title" = "Als Standard festlegen"; From 7ba9ec2685c802b4aa71af595fe0db204abefcc1 Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Mon, 25 Mar 2019 07:42:51 +0100 Subject: [PATCH 002/129] Added preferences to disable auto-save --- MacPass/MPSettingsHelper.h | 1 + MacPass/MPSettingsHelper.m | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/MacPass/MPSettingsHelper.h b/MacPass/MPSettingsHelper.h index e3c830aec..b3e5f6de3 100644 --- a/MacPass/MPSettingsHelper.h +++ b/MacPass/MPSettingsHelper.h @@ -33,6 +33,7 @@ APPKIT_EXTERN NSString *const kMPSettingsKeyOpenEmptyDatabaseOnLaunch; APPKIT_EXTERN NSString *const kMPSettingsKeyReopenLastDatabaseOnLaunch; APPKIT_EXTERN NSString *const kMPSettingsKeyQuitOnLastWindowClose; // Quit MacPass when the user closes the last window APPKIT_EXTERN NSString *const kMPSettingsKeyFileChangeStrategy; +APPKIT_EXTERN NSString *const kMPSettingsKeyEnableAutosave; // if set to YES MacPass support Autosaving for documents /* URL handling */ APPKIT_EXTERN NSString *const kMPSettingsKeyBrowserBundleId; diff --git a/MacPass/MPSettingsHelper.m b/MacPass/MPSettingsHelper.m index 100de3254..3535592cb 100644 --- a/MacPass/MPSettingsHelper.m +++ b/MacPass/MPSettingsHelper.m @@ -34,6 +34,7 @@ NSString *const kMPSettingsKeyReopenLastDatabaseOnLaunch = @"ReopenLastDatabaseOnLaunch"; NSString *const kMPSettingsKeyQuitOnLastWindowClose = @"QuitOnLastWindowClose"; NSString *const kMPSettingsKeyFileChangeStrategy = @"FileChangeStrategy"; +NSString *const kMPSettingsKeyEnableAutosave = @"EnableAutosave"; NSString *const kMPSettingsKeyLockOnSleep = @"LockOnSleep"; NSString *const kMPSettingskeyLockOnLogout = @"LockOnLogout"; NSString *const kMPSettingsKeyIdleLockTimeOut = @"IdleLockTimeOut"; @@ -157,7 +158,8 @@ + (NSDictionary *)_standardDefaults { kMPSettingsKeyUpdatePasswordOnTemplateEntries: @YES, kMPSettingsKeyDisabledPlugins: @[], kMPSettingsKeyLoadIncompatiblePlugins: @NO, - kMPSettingsKeyQuitOnLastWindowClose: @NO + kMPSettingsKeyQuitOnLastWindowClose: @NO, + kMPSettingsKeyEnableAutosave: @YES }; }); return standardDefaults; From 6d046bc9330b397b7c7025b94734e235711c6af1 Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Mon, 25 Mar 2019 08:52:37 +0100 Subject: [PATCH 003/129] Added checkbox to disable autosave --- MacPass/Base.lproj/GeneralSettings.xib | 42 ++++++++++++++++++++---- MacPass/Base.lproj/PasswordInputView.xib | 8 ++--- MacPass/MPDocument.m | 2 +- MacPass/MPGeneralSettingsController.h | 18 +++++----- MacPass/MPGeneralSettingsController.m | 2 +- 5 files changed, 51 insertions(+), 21 deletions(-) diff --git a/MacPass/Base.lproj/GeneralSettings.xib b/MacPass/Base.lproj/GeneralSettings.xib index fda1f476e..ea07c2cd8 100644 --- a/MacPass/Base.lproj/GeneralSettings.xib +++ b/MacPass/Base.lproj/GeneralSettings.xib @@ -10,6 +10,7 @@ + @@ -23,7 +24,7 @@ - + @@ -157,11 +158,18 @@ + + + + + + + @@ -193,18 +201,33 @@ - + - + + + + + + + + + + @@ -223,12 +246,19 @@ + + + + + - + + + @@ -247,7 +277,7 @@ - + diff --git a/MacPass/Base.lproj/PasswordInputView.xib b/MacPass/Base.lproj/PasswordInputView.xib index 52a50e460..db8d5c393 100644 --- a/MacPass/Base.lproj/PasswordInputView.xib +++ b/MacPass/Base.lproj/PasswordInputView.xib @@ -25,7 +25,7 @@ - + @@ -99,7 +98,7 @@ Gw - + @@ -120,7 +119,7 @@ Gw - + @@ -158,30 +157,30 @@ Gw - + - + + - + - - - + @@ -262,18 +261,18 @@ Gw - + - + @@ -299,7 +298,7 @@ Gw - + @@ -347,7 +346,7 @@ Gw - + @@ -359,7 +358,7 @@ Gw - + @@ -415,7 +414,7 @@ Gw - + @@ -426,7 +425,7 @@ Gw - + @@ -494,7 +493,7 @@ Gw - + @@ -522,18 +521,18 @@ Gw - + - + @@ -541,10 +540,10 @@ Gw - + - + @@ -552,15 +551,15 @@ Gw - + - + - + @@ -568,7 +567,7 @@ Gw - + @@ -584,21 +583,21 @@ Gw - + @@ -619,7 +618,7 @@ Gw - + @@ -630,7 +629,7 @@ Gw - + @@ -638,7 +637,7 @@ Gw - + @@ -646,7 +645,7 @@ Gw - + @@ -277,7 +277,7 @@ - + diff --git a/MacPass/PluginRepositoryBrowserView.xib b/MacPass/Base.lproj/PluginRepositoryBrowserView.xib similarity index 100% rename from MacPass/PluginRepositoryBrowserView.xib rename to MacPass/Base.lproj/PluginRepositoryBrowserView.xib diff --git a/MacPass/en.lproj/PluginRepositoryBrowserView.strings b/MacPass/en.lproj/PluginRepositoryBrowserView.strings new file mode 100644 index 000000000..c80539ab6 --- /dev/null +++ b/MacPass/en.lproj/PluginRepositoryBrowserView.strings @@ -0,0 +1,17 @@ +/* Class = "NSButtonCell"; title = "Refresh"; ObjectID = "NZw-nO-lZ3"; */ +"NZw-nO-lZ3.title" = "Refresh"; + +/* Class = "NSTableColumn"; headerCell.title = "Plugin"; ObjectID = "Nzo-rR-Hfx"; */ +"Nzo-rR-Hfx.headerCell.title" = "Plugin"; + +/* Class = "NSTableColumn"; headerCell.title = "Status"; ObjectID = "g1Q-BS-vCR"; */ +"g1Q-BS-vCR.headerCell.title" = "Status"; + +/* Class = "NSTableColumn"; headerCell.title = "Latest Version"; ObjectID = "hFg-AD-SqD"; */ +"hFg-AD-SqD.headerCell.title" = "Latest Version"; + +/* Class = "NSButtonCell"; title = "Done"; ObjectID = "j9a-fn-Pye"; */ +"j9a-fn-Pye.title" = "Done"; + +/* Class = "NSTextFieldCell"; title = "Last updated:"; ObjectID = "ntD-sJ-NRw"; */ +"ntD-sJ-NRw.title" = "Last updated:"; diff --git a/MacPass/ru.lproj/AutotypeBuilderView.strings b/MacPass/ru.lproj/AutotypeBuilderView.strings new file mode 100644 index 000000000..9af680901 --- /dev/null +++ b/MacPass/ru.lproj/AutotypeBuilderView.strings @@ -0,0 +1,9 @@ + +/* Class = "NSTextFieldCell"; title = "Autotype Sequence"; ObjectID = "8ny-Qk-Jvo"; */ +"8ny-Qk-Jvo.title" = "Последовательность автоввода"; + +/* Class = "NSButtonCell"; title = "Set Autotype Sequence"; ObjectID = "aOD-Ih-Sft"; */ +"aOD-Ih-Sft.title" = "Установить"; + +/* Class = "NSTextFieldCell"; title = "Available Commands and Placeholders"; ObjectID = "lug-97-H9D"; */ +"lug-97-H9D.title" = "Доступные команды и подстановки"; diff --git a/MacPass/ru.lproj/DatabaseSettingsWindow.strings b/MacPass/ru.lproj/DatabaseSettingsWindow.strings index d1d8dcb0c..8d9b0c1fd 100644 --- a/MacPass/ru.lproj/DatabaseSettingsWindow.strings +++ b/MacPass/ru.lproj/DatabaseSettingsWindow.strings @@ -1,4 +1,3 @@ - /* Class = "NSWindow"; title = "Window"; ObjectID = "1"; */ "1.title" = "Окно"; @@ -21,15 +20,12 @@ "370.label" = "Безопасность"; /* Class = "NSButtonCell"; title = "Enable Entry History"; ObjectID = "532"; */ -"532.title" = "Включить Историю Записи"; +"532.title" = "Включить историю записи"; /* Class = "NSButtonCell"; title = "Enable Recycle Bin"; ObjectID = "536"; */ "536.title" = "Включить Корзину"; -/* Class = "NSButtonCell"; title = "Empty Recycle Bin on Quit"; ObjectID = "540"; */ -"540.title" = "Очищать корзину при выходе"; - -/* Class = "NSTextFieldCell"; title = "Maximum Items:"; ObjectID = "558"; */ +/* Class = "NSTextFieldCell"; title = "Maximum items in history:"; ObjectID = "558"; */ "558.title" = "Максимум элементов:"; /* Class = "NSMenu"; title = "OtherViews"; ObjectID = "680"; */ @@ -38,7 +34,7 @@ /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "957"; */ "957.title" = "Отмена"; -/* Class = "NSTextFieldCell"; title = "Maximum Size:"; ObjectID = "1269"; */ +/* Class = "NSTextFieldCell"; title = "Maximum history size:"; ObjectID = "1269"; */ "1269.title" = "Максимальный размер:"; /* Class = "NSMenu"; title = "OtherViews"; ObjectID = "1396"; */ @@ -62,26 +58,17 @@ /* Class = "NSTextFieldCell"; title = "Default Username:"; ObjectID = "1591"; */ "1591.title" = "Имя пользователя по умолчанию:"; -/* Class = "NSTextFieldCell"; title = "Key encryption rounds:"; ObjectID = "1644"; */ -"1644.title" = "Проходов шифрования ключа:"; - /* Class = "NSMenu"; title = "OtherViews"; ObjectID = "1740"; */ "1740.title" = "OtherViews"; -/* Class = "NSButtonCell"; title = "Benchmark"; ObjectID = "1775"; */ -"1775.title" = "Тест"; - -/* Class = "NSButtonCell"; title = "Recommend key change every:"; ObjectID = "CtU-Eq-dgy"; */ +/* Class = "NSButtonCell"; title = "Recommend key change"; ObjectID = "CtU-Eq-dgy"; */ "CtU-Eq-dgy.title" = "Рекомендовать сменую ключа каждые:"; -/* Class = "NSTextFieldCell"; placeholderString = "days"; ObjectID = "M9G-Yy-1s4"; */ -"M9G-Yy-1s4.placeholderString" = "дней"; - -/* Class = "NSTextFieldCell"; placeholderString = "days"; ObjectID = "Nca-aw-6rR"; */ -"Nca-aw-6rR.placeholderString" = "дней"; +/* Class = "NSButtonCell"; title = "Force key change"; ObjectID = "z6u-YT-7LE"; */ +"z6u-YT-7LE.title" = "Требовать сменую ключа каждые:"; -/* Class = "NSTextFieldCell"; title = "Disabling password protection will remove unallowed characters in passwords. This will cause data loss after saving."; ObjectID = "iZR-sj-MHg"; */ -"iZR-sj-MHg.title" = "Отключение защиты пароля удалит все недопустимые символы в уже сохраненных паролях. Это может вызвать потерю данных после сохранения."; +/* Class = "NSTextFieldCell"; title = "File format:"; ObjectID = "bTk-YZ-x0G"; */ +"bTk-YZ-x0G.title" = "Формат файла"; -/* Class = "NSButtonCell"; title = "Force key change every:"; ObjectID = "z6u-YT-7LE"; */ -"z6u-YT-7LE.title" = "Требовать сменую ключа каждые:"; +/* Class = "NSButtonCell"; title = "Force key change once after unlocking"; ObjectID = "pA1-aL-KjT"; */ +"pA1-aL-KjT.title" = "Принудительная смена ключа после разблокировки"; diff --git a/MacPass/ru.lproj/EntryInspectorView.strings b/MacPass/ru.lproj/EntryInspectorView.strings index ad9517c67..6e29cf2fa 100644 --- a/MacPass/ru.lproj/EntryInspectorView.strings +++ b/MacPass/ru.lproj/EntryInspectorView.strings @@ -1,3 +1,8 @@ +/* Class = "NSMenuItem"; title = "Save"; ObjectID = "0ok-MC-QMP"; */ +"0ok-MC-QMP.title" = "Сохранить"; + +/* Class = "NSButtonCell"; title = "Enable Autotype"; ObjectID = "9Nx-mE-DK3"; */ +"9Nx-mE-DK3.title" = "Включить Автоввод"; /* Class = "NSButtonCell"; title = "Generate"; ObjectID = "64"; */ "64.title" = "Генерировать"; @@ -20,9 +25,6 @@ /* Class = "NSTextFieldCell"; title = "Tags"; ObjectID = "79"; */ "79.title" = "Тэги"; -/* Class = "NSTabViewItem"; label = "Fields"; ObjectID = "108"; */ -"108.label" = "Поля"; - /* Class = "NSTabViewItem"; label = "Attachments"; ObjectID = "109"; */ "109.label" = "Файлы"; @@ -41,9 +43,6 @@ /* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "171"; */ "171.title" = "Табличный вид"; -/* Class = "NSTextFieldCell"; title = "Custom Fields"; ObjectID = "190"; */ -"190.title" = "Пользовательские поля"; - /* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "197"; */ "197.title" = "Текст"; @@ -53,44 +52,23 @@ /* Class = "NSTextFieldCell"; placeholderString = "Value"; ObjectID = "214"; */ "214.placeholderString" = "Значение"; -/* Class = "NSTextFieldCell"; placeholderString = "Value"; ObjectID = "225"; */ -"225.placeholderString" = "Значение"; - -/* Class = "NSTextFieldCell"; placeholderString = "Title"; ObjectID = "228"; */ -"228.placeholderString" = "Заголовок"; - /* Class = "NSSegmentedCell"; 238.ibShadowedLabels[0] = "General"; ObjectID = "238"; */ "238.ibShadowedLabels[0]" = "Общие"; /* Class = "NSSegmentedCell"; 238.ibShadowedLabels[1] = "Files"; ObjectID = "238"; */ "238.ibShadowedLabels[1]" = "Файлы"; -/* Class = "NSSegmentedCell"; 238.ibShadowedLabels[3] = "Autotype"; ObjectID = "238"; */ +/* Class = "NSSegmentedCell"; 238.ibShadowedLabels[2] = "Autotype"; ObjectID = "238"; */ "238.ibShadowedLabels[2]" = "Автоввод"; -/* Class = "NSMenuItem"; title = "Save"; ObjectID = "0ok-MC-QMP"; */ -"0ok-MC-QMP.title" = "Сохранить"; - -/* Class = "NSButtonCell"; title = "Enable Autotype"; ObjectID = "9Nx-mE-DK3"; */ -"9Nx-mE-DK3.title" = "Включить Автоввод"; - -/* Class = "NSMenuItem"; title = "Quicklook"; ObjectID = "NtM-y3-l4D"; */ -"NtM-y3-l4D.title" = "Быстрый просмотр"; - -/* Class = "NSTextFieldCell"; placeholderString = "Custom Entry Sequence"; ObjectID = "R2X-Ex-c6q"; */ -"R2X-Ex-c6q.placeholderString" = "Пользовательская запись"; - -/* Class = "NSTextFieldCell"; title = "Window Sequence"; ObjectID = "RQB-bR-MC0"; */ -"RQB-bR-MC0.title" = "Окно"; - -/* Class = "NSTextFieldCell"; title = "Autotype Sequence"; ObjectID = "bQ5-0E-h3O"; */ -"bQ5-0E-h3O.title" = "Автоввод"; +/* Class = "NSMenuItem"; title = "Delete"; ObjectID = "bke-G2-oEf"; */ +"bke-G2-oEf.title" = "Удалить"; /* Class = "NSTextFieldCell"; title = "Window Title"; ObjectID = "bkO-Bk-AuX"; */ "bkO-Bk-AuX.title" = "Заголовок Окна"; -/* Class = "NSMenuItem"; title = "Delete"; ObjectID = "bke-G2-oEf"; */ -"bke-G2-oEf.title" = "Удалить"; +/* Class = "NSTextFieldCell"; title = "Autotype Sequence"; ObjectID = "bQ5-0E-h3O"; */ +"bQ5-0E-h3O.title" = "Автоввод"; /* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "dyA-lo-PGa"; */ "dyA-lo-PGa.title" = "Табличный просмотр"; @@ -107,11 +85,23 @@ /* Class = "NSTextFieldCell"; title = "Window Associations"; ObjectID = "ned-1Q-FXA"; */ "ned-1Q-FXA.title" = "Ассоциации для окон"; +/* Class = "NSMenuItem"; title = "Quicklook"; ObjectID = "NtM-y3-l4D"; */ +"NtM-y3-l4D.title" = "Быстрый просмотр"; + /* Class = "NSButtonCell"; title = "Obfuscate Autotype"; ObjectID = "oNq-kB-3eb"; */ "oNq-kB-3eb.title" = "Шифровать Автоввод"; +/* Class = "NSTextFieldCell"; placeholderString = "Custom Entry Sequence"; ObjectID = "R2X-Ex-c6q"; */ +"R2X-Ex-c6q.placeholderString" = "Пользовательская запись"; + +/* Class = "NSTextFieldCell"; title = "Window Sequence"; ObjectID = "RQB-bR-MC0"; */ +"RQB-bR-MC0.title" = "Окно"; + /* Class = "NSMenu"; title = "OtherViews"; ObjectID = "sNS-o1-pD7"; */ "sNS-o1-pD7.title" = "OtherViews"; /* Class = "NSTextFieldCell"; title = "UUID"; ObjectID = "vTq-N1-5oa"; */ "vTq-N1-5oa.title" = "UUID"; + +/* Class = "NSButtonCell"; title = "Show Plugin Data"; ObjectID = "X9y-K7-lix"; */ +"X9y-K7-lix.title" = "Показать данные плагинов"; diff --git a/MacPass/ru.lproj/GeneralSettings.strings b/MacPass/ru.lproj/GeneralSettings.strings index 82c723736..3c4c7b086 100644 --- a/MacPass/ru.lproj/GeneralSettings.strings +++ b/MacPass/ru.lproj/GeneralSettings.strings @@ -1,15 +1,20 @@ +/* Class = "NSMenuItem"; title = "after 5 Minutes"; ObjectID = "5gh-b6-cmG"; */ +"5gh-b6-cmG.title" = "через 5 минут"; + +/* Class = "NSButtonCell"; title = "Clear all stored locations"; ObjectID = "8Ri-2s-c39"; */ +"8Ri-2s-c39.title" = "Очистить все сохраненные пути"; /* Class = "NSMenu"; title = "ClipboardClearInterval"; ObjectID = "421"; */ "421.title" = "ClipboardClearInterval"; /* Class = "NSMenuItem"; title = "after 10 Seconds"; ObjectID = "422"; */ -"422.title" = "после 10 Секунд"; +"422.title" = "через 10 секунд"; /* Class = "NSMenuItem"; title = "after 30 Seconds"; ObjectID = "423"; */ -"423.title" = "после 30 Секунд"; +"423.title" = "через 30 секунд"; /* Class = "NSMenuItem"; title = "after 1 Minute"; ObjectID = "424"; */ -"424.title" = "после 1 Минуты"; +"424.title" = "через 1 минуту"; /* Class = "NSMenuItem"; title = "Never"; ObjectID = "429"; */ "429.title" = "Никогда"; @@ -30,13 +35,13 @@ "586.title" = "LockTimes"; /* Class = "NSMenuItem"; title = "for 1 Minute"; ObjectID = "588"; */ -"588.title" = "через 1 Минуту"; +"588.title" = "через 1 минуту"; /* Class = "NSMenuItem"; title = "for 5 Minutes"; ObjectID = "589"; */ -"589.title" = "через 5 Минут"; +"589.title" = "через 5 минут"; /* Class = "NSMenuItem"; title = "for 15 Minutes"; ObjectID = "603"; */ -"603.title" = "через 15 Минут"; +"603.title" = "через 15 минут"; /* Class = "NSButtonCell"; title = "Lock after sleep"; ObjectID = "631"; */ "631.title" = "Заблокировать после засыпания"; @@ -47,17 +52,30 @@ /* Class = "NSTextFieldCell"; title = "Lock while idle"; ObjectID = "806"; */ "806.title" = "Блокировать при простое"; -/* Class = "NSButtonCell"; title = "Create new Database if activated"; ObjectID = "880"; */ -"880.title" = "Создать новую базу данных при активации"; - -/* Class = "NSBox"; title = "Startup"; ObjectID = "888"; */ +/* Class = "NSBox"; title = "File Handling"; ObjectID = "888"; */ "888.title" = "Запуск"; -/* Class = "NSButtonCell"; title = "Clear all stored locations"; ObjectID = "8Ri-2s-c39"; */ -"8Ri-2s-c39.title" = "Очистить все сохраненные пути"; - /* Class = "NSTextFieldCell"; title = "Enabling this compromises security. If enabled, your preferences will contain mappings from database to keyfile. Key locations for databases without a password will not be saved."; ObjectID = "ACh-7H-42N"; */ "ACh-7H-42N.title" = "Включение этой опции уменьшает безопасность. Если включено, ваши настройки будут содержать привязку базы данных к файлу ключей. Пути к ключу для баз данных без пароля сохранены не будут."; +/* Class = "NSButtonCell"; title = "Lock after log out"; ObjectID = "Dzn-9R-JjE"; */ +"Dzn-9R-JjE.title" = "Заблокировать при выходе из сиситемы"; + +/* Class = "NSButtonCell"; title = "Prevent Universal Clipboard support"; ObjectID = "fNy-mS-phi"; */ +"fNy-mS-phi.title" = "Запретить Universal Clipboard"; + +/* Class = "NSTextFieldCell"; title = "Disabling this compromises security. If enabled, anything copied to the Clipboard in MacPass will be available on your connected iOS devices. You should clear the clipboard on those devices manually."; ObjectID = "JGX-Tp-KJk"; */ +"JGX-Tp-KJk.title" = "Отключение этой опции уменьшает безопасность. Если отключено, информация скопированная в буфер обмена в MacPass будет доступна на всех устройствах вашего Apple ID аккаунта. Вы должны очистить буфер обмена вручную."; + +/* Class = "NSTextFieldCell"; title = "If file changes:"; ObjectID = "QrK-hM-Xt1"; */ +"QrK-hM-Xt1.title" = "Если файл изменился:"; + /* Class = "NSButtonCell"; title = "Remember Keyfile for Databases"; ObjectID = "r6q-He-nYU"; */ "r6q-He-nYU.title" = "Запомнить файл ключей для базы данных"; + +/* Class = "NSButtonCell"; title = "Enable Autosave"; ObjectID = "wG7-bi-2fi"; */ +"wG7-bi-2fi.title" = "Включить автосохранение"; + +/* Class = "NSTextFieldCell"; title = "Close and open all documents for changes to take effect"; ObjectID = "ya5-ps-c4W"; */ +"ya5-ps-c4W.title" = "Закройте и откройте заново все документы, чтобы применить изменения"; + diff --git a/MacPass/ru.lproj/GroupInspectorView.strings b/MacPass/ru.lproj/GroupInspectorView.strings index 40c450e31..e1289fb3b 100644 --- a/MacPass/ru.lproj/GroupInspectorView.strings +++ b/MacPass/ru.lproj/GroupInspectorView.strings @@ -1,3 +1,5 @@ +/* Class = "NSTextFieldCell"; title = "Autotype Sequence"; ObjectID = "6FG-UZ-Adh"; */ +"6FG-UZ-Adh.title" = "Последовательность автоввода"; /* Class = "NSTextFieldCell"; title = "Name"; ObjectID = "25"; */ "25.title" = "Имя"; @@ -17,5 +19,6 @@ /* Class = "NSTextFieldCell"; title = "Autotype"; ObjectID = "277"; */ "277.title" = "Автоввод"; -/* Class = "NSTextFieldCell"; title = "Autotype Sequence"; ObjectID = "6FG-UZ-Adh"; */ -"6FG-UZ-Adh.title" = "Последовательность автоввода"; +/* Class = "NSButtonCell"; title = "Show Plugin Data"; ObjectID = "qGr-oT-WjP"; */ +"qGr-oT-WjP.title" = "Показать данные плагинов"; + diff --git a/MacPass/ru.lproj/IconSelection.strings b/MacPass/ru.lproj/IconSelection.strings index 0b4971004..e0d1009f8 100644 --- a/MacPass/ru.lproj/IconSelection.strings +++ b/MacPass/ru.lproj/IconSelection.strings @@ -1,6 +1,9 @@ +/* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "1kM-cI-P1o"; */ +"1kM-cI-P1o.title" = "Отмена"; /* Class = "NSButtonCell"; title = "Use Default Icon"; ObjectID = "102"; */ "102.title" = "Использовать иконку по умолчанию"; -/* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "1kM-cI-P1o"; */ -"1kM-cI-P1o.title" = "Отмена"; +/* Class = "NSButtonCell"; title = "Download Icon"; ObjectID = "iaf-XW-XUo"; */ +"iaf-XW-XUo.title" = "Скачать иконку"; + diff --git a/MacPass/ru.lproj/InspectorView.strings b/MacPass/ru.lproj/InspectorView.strings index bf6a7dca9..071d58a24 100644 --- a/MacPass/ru.lproj/InspectorView.strings +++ b/MacPass/ru.lproj/InspectorView.strings @@ -25,3 +25,6 @@ /* Class = "NSButtonCell"; title = "History"; ObjectID = "w1z-1n-b0m"; */ "w1z-1n-b0m.title" = "История"; + +/* Class = "CocoaBindingsConnection"; ibShadowedIsNilPlaceholder = "None"; ObjectID = "Xpb-G8-gXl"; */ +"Xpb-G8-gXl.ibShadowedIsNilPlaceholder" = "Нет"; diff --git a/MacPass/ru.lproj/IntegrationSettings.strings b/MacPass/ru.lproj/IntegrationSettings.strings index 93b6b10dd..4d535daf0 100644 --- a/MacPass/ru.lproj/IntegrationSettings.strings +++ b/MacPass/ru.lproj/IntegrationSettings.strings @@ -1,29 +1,40 @@ - /* Class = "NSButtonCell"; title = "Enable global Autotype"; ObjectID = "1qb-Rd-jYu"; */ "1qb-Rd-jYu.title" = "Включить глобальный Автоввод"; /* Class = "NSTextFieldCell"; title = "Shortcut"; ObjectID = "6oN-CH-T0O"; */ -"6oN-CH-T0O.title" = "Ярлык"; +"6oN-CH-T0O.title" = "Хоткей"; -/* Class = "NSButtonCell"; title = "Inlcude Host for matches"; ObjectID = "B1D-j9-L8x"; */ +/* Class = "NSButtonCell"; title = "Include Entry URL Host for matches"; ObjectID = "B1D-j9-L8x"; */ "B1D-j9-L8x.title" = "Использовать Хост для совпадений"; /* Class = "NSButtonCell"; title = "Enable Quicklook Preview"; ObjectID = "ERs-ct-Eyx"; */ "ERs-ct-Eyx.title" = "Использовать Быстрый Предпросмотр"; +/* Class = "NSTextFieldCell"; title = "Autotype is not available, because MacPass is not allowed to control your computer. To enable Autotype, go to the Security and Privacy Preferences and add MacPass to the Accessibilty group. Changes require a restart of MacPass."; ObjectID = "H37-ku-aTc"; */ +"H37-ku-aTc.title" = "Автоввод недоступен, потому что MacPass не имеет разрешения на управление вашим компьютером."; + /* Class = "NSTextFieldCell"; title = "Shortcut is missing Key"; ObjectID = "Lxp-wI-yQy"; */ "Lxp-wI-yQy.title" = "Задайте Клавишу для Ярлыка"; +/* Class = "NSButtonCell"; title = "Open Preferences…"; ObjectID = "NP0-R3-m6n"; */ +"NP0-R3-m6n.title" = "Открыть настройки"; + /* Class = "NSBox"; title = "Autotype"; ObjectID = "P9N-HM-wER"; */ "P9N-HM-wER.title" = "Автоввод"; +/* Class = "NSButtonCell"; title = "Interpret ⌃ as ⌘"; ObjectID = "QfO-yG-l3F"; */ +"QfO-yG-l3F.title" = "Обрабатывать ⌃ как ⌘"; + /* Class = "NSTextFieldCell"; title = "If enabled, every {CONTROL} command will be sent as ⌘. Only disable this if you are sure you need to."; ObjectID = "QRy-CY-ENC"; */ "QRy-CY-ENC.title" = "Если включено, каждая {CONTROL} комманда будет отправлена как ⌘. Отключайте это только если вы уверены в том, что делаете."; -/* Class = "NSButtonCell"; title = "Interpret ⌃ as ⌘"; ObjectID = "QfO-yG-l3F"; */ -"QfO-yG-l3F.title" = "Обрабатывать ⌃ как ⌘"; +/* Class = "NSButtonCell"; title = "Include Entry Tags for matches"; ObjectID = "rbu-G7-MT8"; */ +"rbu-G7-MT8.title" = "Использовать Тэги для совпадений"; + +/* Class = "NSButtonCell"; title = "Include Entry Title for matches"; ObjectID = "tmL-dT-D0G"; */ +"tmL-dT-D0G.title" = "Использовать Заголовок для совпадений"; -/* Class = "NSButtonCell"; title = "Include URL for matches"; ObjectID = "TzR-00-Vp3"; */ +/* Class = "NSButtonCell"; title = "Include Entry URL for matches"; ObjectID = "TzR-00-Vp3"; */ "TzR-00-Vp3.title" = "Использовать URL для совпадений"; /* Class = "NSBox"; title = "Preview"; ObjectID = "VVs-b5-cX9"; */ @@ -32,8 +43,3 @@ /* Class = "NSTextFieldCell"; title = "If enabled attached files will be copied to a temporary location for preview and deleted after the preview is closed."; ObjectID = "WmI-IB-Aso"; */ "WmI-IB-Aso.title" = "Если включено, прикрепленные файлы будет скопированы во временную папку для предпросмора и удалены, когда предпросмотр будет закрыт."; -/* Class = "NSButtonCell"; title = "Inlcude Tags for matches"; ObjectID = "rbu-G7-MT8"; */ -"rbu-G7-MT8.title" = "Использовать Тэги для совпадений"; - -/* Class = "NSButtonCell"; title = "Inlcude Title for matches"; ObjectID = "tmL-dT-D0G"; */ -"tmL-dT-D0G.title" = "Использовать Заголовок для совпадений"; diff --git a/MacPass/ru.lproj/Localizable.strings b/MacPass/ru.lproj/Localizable.strings index ae83067f5..8790ef85c 100644 --- a/MacPass/ru.lproj/Localizable.strings +++ b/MacPass/ru.lproj/Localizable.strings @@ -1,64 +1,276 @@ /* Count of characters remaining in pickchars dialog */ "%ld_CHARACTERS_TO_PICK_REMAINING" = "%ld символ(ов) для выбора осталось"; -/* Formatted Times */ +/* Display format for days. Should contain a long decimal placeholder! */ "%ld_DAYS" = "%ld дней"; + +/* % days ago */ "%ld_DAYS_AGO" = "%ld дней назад"; + +/* % Hours ago */ "%ld_HOURS_AGO" = "около %ld часов назад"; + +/* % Minutes ago */ "%ld_MINUTES_AGO" = "%ld минут назад"; + +/* % Weeks ago */ "%ld_WEEKS_AGO" = "%ld недель назад"; -"JUST_NOW" = "Прямо сейчас"; -"LAST_WEEK" = "Прошлая неделя"; -"ONE_WEEK_AGO" = "Одна неделя назад"; -"YESTERDAY" = "Вчера"; -"TOMORROW" = "Завтра"; -"ONE_WEEK" = "Через одну неделю"; -"ONE_MONTH" = "через один месяц"; + +/* preset to expire after 90 days from now */ "90_DAYS" = "через 90 дней"; -"ONE_YEAR" = "через один год"; /* Button label to abort a merge on a file with changed master key! */ "ABORT_MERGE_KEEP_MINE" = "Отменить слияние. Оставить мою."; -/* Date Picker */ -"SELECT_DATE_PRESET" = "Использовать установки…"; +/* Toolbar item with action menu */ +"ACTION" = "Действие"; -/* Menu item for automatic trash creation */ -"AUTOCREATE_TRASH_FOLDER" = "Создать Автоматически"; +/* Menu item title for adding an hmacotp config attribute */ +"ADD_CUSTOM_ATTRIBUTE_HMACOTP_CONFIG" = "Добавить конфигурацию OTP"; + +/* Menu item title for adding an hmacotp seed attribute */ +"ADD_CUSTOM_ATTRIBUTE_HMACOTP_SEED" = "Добавить сид OTP"; /* Menu displayed for adding special custom keys */ "ADD_CUSTOM_FIELD_CONTEXT_MENU" = "Меню добавления пользовательских полей"; +/* Action to add an entry via template */ +"ADD_TREMPLATE_ENTRY" = "Создать шаблонную запись"; + +/* Button in dialog to leave autotype disabled and continiue! */ +"ALERT_AUTOTYPE_MISSING_ACCESSIBILTY_PERMISSIONS_BUTTON_OK" = "Оставить отключенным"; + +/* Button in dialog to open accessibilty preferences pane! */ +"ALERT_AUTOTYPE_MISSING_ACCESSIBILTY_PERMISSIONS_BUTTON_OPEN_PREFERENCES" = "Открыть настройки универсального доступа"; + +/* Alert informative text displayed when Autotype performs self check and lacks accessibilty permissions */ +"ALERT_AUTOTYPE_MISSING_ACCESSIBILTY_PERMISSIONS_INFORMATIVE_TEXT" = "Система запрещает MacPass отправлять нажатия клавиш в другие приложения. Для включения автоввода, пожалуйста, предоставьте универсальный доступ для MacPass в настройках безопасности системы."; + +/* Alert message displayed when Autotype performs self check and lacks accessibilty permissions */ +"ALERT_AUTOTYPE_MISSING_ACCESSIBILTY_PERMISSIONS_MESSAGE_TEXT" = "MacPass не может выполнить автоввод"; + +/* Button in dialog to leave plugin ds disabled and continiue! */ +"ALERT_INCOMPATIBLE_PLUGINS_ENCOUNTERED_BUTTON_OK" = "ОК"; + +/* Button in dialog to open plugin preferences pane! */ +"ALERT_INCOMPATIBLE_PLUGINS_ENCOUNTERED_BUTTON_OPEN_PREFERENCES" = "Открыть настройки"; + +/* Informative text of the alert displayed when plugins where disabled due to incompatibilty */ +"ALERT_INCOMPATIBLE_PLUGINS_ENCOUNTERED_INFORMATIVE_TEXT" = "Некоторые плагины были отключены, так как они не совместимы с текущей версией MacPass. Перейдите в настройки для подробностей."; + +/* Message text of the alert displayed when plugins where disabled due to incompatibilty */ +"ALERT_INCOMPATIBLE_PLUGINS_ENCOUNTERED_MESSAGE" = "Обнаружены несовместимые плагины"; + /* Alert informative text when plugins or their settings change and require a restart */ "ALERT_INFORMATIVE_TEXT_PLUGINS_CHANGED_SUGGEST_RESTART" = "Изменения плагинов и глобальных настроек плагинов, будут применены только после перезапуска. Перезапустить MacPass сейчас?"; /* Alert informative text to ask the user if he really want to uninstall the plugin */ "ALERT_INFORMATIVE_TEXT_REALLY_UNINSTALL_PLUGIN" = "Плагин будет перемещен в Корзину"; +/* Button in dialog to cancel merge of KDB file changes! */ +"ALERT_MERGE_CANCEL" = "Отмена"; + +/* Button in dialog to merge KDB changes into file! */ +"ALERT_MERGE_CONTINUE" = "Объединить файлы"; + +/* Informative text displayed when merging KDB files */ +"ALERT_MERGE_KDB_FILE_INFO_TEXT" = "KDB базы не содержат достаточной информации для бесшовного объединения. Записи будут объединены и данные не будут потеряны, но из-за того что группы сравниваются только по имени, могут произойти неожиданные изменения. Перемещённые записи могут быть возвращены обратно в их старую группу, или переименованные группы не будут объединены. Также удалённые записи могут появиться снова из-за того что информация о удалённых объектах не зранится в базе. Вы уверены, что хотите продолжить?"; + +/* Alert message warning user about KDB file merge */ +"ALERT_MERGE_KDB_FILE_MESSAGE" = "Необходимо объединение KDB файлов"; + /* Alert message text when plugins or their settings change and require a restart */ "ALERT_MESSAGE_PLUGINS_CHANGED_SUGGEST_RESTART" = "Настройки плагина изменены. Пожалуйста, перезапустите программу."; /* Alert message text to ask the user if he really want to uninstall the plugin. Include %@ placeholder for plugin name */ "ALERT_MESSAGE_TEXT_REALLY_UNINSTALL_PLUGIN_%@" = "Должен ли плагин %@ быть удален?"; +/* Infromative text of the disabled updates alert! */ +"ALERT_UPDATES_DISABLED_INFORMATIVE_TEXT_%@!" = "Обновления для текущей сборки %@ отключены!"; + +/* Message text for disabled updates alert! */ +"ALERT_UPDATES_DISABLED_MESSAGE_TEXT" = "Обновления отключены"; + +/* Attachments column title (shows counts) + Menu item to toggle display of attachment count column in entry table */ +"ATTACHMENTS" = "Файлы"; + /* Sucessfully merged external changes */ "AUTO_MERGE_NOTIFICATION_TEXT" = "Автоматическое слияние успешно завершено!"; +/* Menu item for automatic trash creation */ +"AUTOCREATE_TRASH_FOLDER" = "Создать Автоматически"; + +/* Inherit autotype settings menu item */ +"AUTOTYPE_INHERIT" = "Наследовать Настройки Автоввода"; + +/* Message displayed to the user to unlock the database to perform global autotype */ +"AUTOTYPE_MESSAGE_UNLOCK_DATABASE" = "Пожалуйста разблокируйте базу для использования глобального автоввода"; + +/* Disable autotype menu item */ +"AUTOTYPE_NO" = "Отключить Автоввод"; + +/* Notification: Autotype failed, MacPass has no permission to send key strokes */ +"AUTOTYPE_NOTIFICATION_MACPASS_HAS_NO_ACCESSIBILTY_PERMISSIONS" = "Автоввод отключен, так как MacPass не имеет разрешений универсального доступа"; + +/* Notification: Autotype failed, no documents are open */ +"AUTOTYPE_OVERLAY_NO_DOCUMENTS" = "Откройте файл базы данных для использования глобального автоввода!"; + +/* Noticiation: Autotype failed to find a match for %@ (string placeholder) */ +"AUTOTYPE_OVERLAY_NO_MATCH_FOR_%@" = "Нет соответствий %@!"; + +/* Notification: Autotype found a single match for %@ (string placeholder). */ +"AUTOTYPE_OVERLAY_SINGLE_MATCH_FOR_%@" = "Найдено совпадение с %@"; + +/* Notficication: Autotype timed out */ +"AUTOTYPE_TIMED_OUT" = "Истекло время автоввода"; + +/* Enable autotype menu item */ +"AUTOTYPE_YES" = "Включить Автоввод"; + +/* Cancel */ +"CANCEL" = "Отмена"; + +/* Menu item in the database outline context menu to change the database name */ +"CHANGE_DATABASE_NAME" = "Изменить Имя базы данных"; + /* Button to postpone the password change */ "CHANGE_LATER" = "Изменить позже"; +/* Button to show the password change dialog + Single button to show the password change dialog */ +"CHANGE_PASSWORD_WITH_DOTS" = "Изменить пароль…"; + +/* Menu item in the database outline context menu to change the trash group */ +"CHANGE_TRASH_GROUP" = "Изменить группу для мусора"; + +/* Button title in the key file selection dialog for selecting a key */ +"CHOOSE_FILE_BUTTON_TITLE" = "Открыть"; + /* Clear Autotype Button */ -"CLEAR_AUTOTYPE" = "Очистить Авто-ввод"; +"CLEAR_AUTOTYPE" = "Очистить Автоввод"; + +/* Menu to clear recent searches */ +"CLEAR_RECENT_SEARCHES" = "Очистить последние запросы"; + +/* String displayed at dock badge when clipboard is about to be cleared */ +"CLEARING_PASTEBOARD" = "…"; + +/* Field name that was copied to the pasteboard */ +"COPIED_FIELD_%@" = "Скопировано %@"; + +/* Context menu that copies reference to note */ +"COPIED_NOTES_REFERENCE" = "Ссылка на заметку скопирована!"; + +/* Password was copied to the pasteboard */ +"COPIED_PASSWORD" = "Пароль скопирован!"; + +/* Context menu that copies reference to password */ +"COPIED_PASSWORD_REFERENCE" = "Ссылка на пароль скопирована!"; + +/* Context menu that copies reference to title */ +"COPIED_TITLE_REFERENCE" = "Ссылка на заголовок скопирована!"; + +/* URL was copied to the pasteboard */ +"COPIED_URL" = "URL скопирован!"; + +/* Context menu that copies reference to URL */ +"COPIED_URL_REFERENCE" = "Ссылка на URL скопирована!"; + +/* Username was copied to the pasteboard */ +"COPIED_USERNAME" = "Имя пользователя скопировано!"; + +/* Context menu that copies reference to username */ +"COPIED_USERNAME_REFERENCE" = "Ссылка на имя пользователя скопирована!"; + +/* Submenu to copy attributes as reference */ +"COPY_AS_REFERENCE" = "Скопировать ссылку на..."; + +/* Context menu sub-menu to copy attributes as reference */ +"COPY_AS_REFERENCE_MENU" = "Скопировать ссылку на..."; + +/* Submenu to Copy custom fields */ +"COPY_CUSTOM_FIELDS" = "Копировать поля"; /* Context menu sub-menu to copy custom fields to clipboard */ "COPY_CUSTOM_FIELDS_MENU" = "Копировать пользовательское поле…"; +/* Action name when an entry was moved + Action title for copying an entry via drag and drop */ +"COPY_ENTRY" = "Копировать Запись"; + +/* Mask for title to copy field value */ +"COPY_FIELD_%@" = "Копировать %@"; + +/* Action title for copying a group via drag and drop */ +"COPY_GROUP" = "Копировать Группу"; + +/* Context menu that copies reference to note */ +"COPY_NOTES_REFERENCE" = "Заметки"; + +/* Menu item to copy the password of an entry + Toolbar item copy password */ +"COPY_PASSWORD" = "Копировать Пароль"; + +/* Context menu that copies reference to password */ +"COPY_PASSWORD_REFERENCE" = "Пароль"; + +/* Context menu that copies reference to title */ +"COPY_TITLE_REFERENCE" = "Заголовок"; + +/* Menu item to copy the URL of an entry */ +"COPY_URL" = "Копировать URL"; + +/* Context menu that copies reference to URL */ +"COPY_URL_REFERENCE" = "URL"; + +/* Menu item to copy the username of an entry + Toolbar item copy username */ +"COPY_USERNAME" = "Копировать Имя пользователя"; + +/* Context menu that copies reference to username */ +"COPY_USERNAME_REFERENCE" = "Имя пользователя"; + /* Curstom attribute reference item */ "CUSTOM_ATTRIBUTE" = "Пользовательский атрибут"; /* Title for menu for custom search filters */ "CUSTOM_SEARCH_FILTER_MENU" = "Пользовательский Поисковый фильтр…"; +/* Default display name for KDB databases */ +"DATABASE" = "База данных"; + +/* Default Browser */ +"DEFAULT_BROWSER" = "Браузер по умолчанию"; + +/* Default Titel for new Custom-Fields */ +"DEFAULT_CUSTOM_FIELD_TITLE" = "Поле"; + +/* Default Value for new Custom-Fields */ +"DEFAULT_CUSTOM_FIELD_VALUE" = "Значение"; + +/* Title for a newly created entry */ +"DEFAULT_ENTRY_TITLE" = "Новая Запись"; + +/* Title for a newly created group */ +"DEFAULT_GROUP_NAME" = "Новая Группа"; + +/* Default window title for a new window association */ +"DEFAULT_WINDOW_TITLE" = "Заголовок Окна"; + +/* Menu item in the database outline context menu to delete the node from the trash + Menu item to delete an entry + Menu item to delete the selected attached file + Menu item to delete the selected custom icon + Toolbar item delete item */ +"DELETE" = "Удалить"; + +/* Delete Entry */ +"DELETE_ENTRY" = "Удалить Запись"; + +/* Delete Group */ +"DELETE_GROUP" = "Удалить Группу"; + /* Empty Trash */ "DELETE_TRASHED_ENTRY" = "Удалить запись из корзины"; @@ -68,18 +280,55 @@ /* Action name for duplicating entries */ "DUPLICATE_ENTRIES_%ld" = "Дублирующиеся записи %ld"; +/* Menu item to directly diplicate an entry */ +"DUPLICATE_ENTRY" = "Скопировать Запись"; + +/* Menu item to duplicate an entry with options how to duplicate. Will present a dialog. */ +"DUPLICATE_ENTRY_WITH_OPTIONS" = "Скопировать Запись…"; + +/* Menu item in the database outline context menu to change the template group + Menu item on the add entry context menu to edit template groups */ +"EDIT_TEMPLATE_GROUP" = "Изменить группу шаблона"; + +/* Empty Trash + Menu item in the database outline context menu to empyt the trash + Menu item in the database outline to empty the trash + Menu item to empty the trash */ +"EMPTY_TRASH" = "Очистить Корзину"; + +/* Informative text for the enforce password change alert */ +"ENFORCE_PASSWORD_CHANGE_ALERT_DESCRIPTION" = "Вы не можете ничего сохранять, пока не поменяете пароль базы и/или файл ключа."; + +/* Message text for the enforce password change alert */ +"ENFORCE_PASSWORD_CHANGE_ALERT_TITLE" = "Пароль базы данных истек!"; + /* Group row for entry attributes */ "ENTRY_CUSTOM_ATTRIBUTES" = "Пользовательские атрибуты"; /* Group row for entry attributes */ "ENTRY_DEFAULT_ATTRIBUTES" = "Атрибуты по умолчанию"; +/* Tooltip displayed on the index header cell */ +"ENTRY_INDEX_COLUMN_TOOLTIP" = "Колонка для сортировки по предпочтению пользователя"; + +/* Keyfile not valid */ +"ERROR_INVALID_KEYFILE" = "Неверный файл ключа!"; + /* Error description given when adding an invalid plugin */ "ERROR_INVALID_PLUGIN" = "Недействительный плагин"; +/* Passwords do not match */ +"ERROR_PASSWORD_MISSMATCH" = "Пароли не соответствуют!"; + +/* Passwords do not match, keyfile is invalid */ +"ERROR_PASSWORD_MISSMATCH_INVALID_KEYFILE" = "Пароли не соответствуют и файл ключа не верный!"; + /* Recommend/Enforce key change intervall format */ "EVERY_%ld_DAYS" = "Каждые %ld дней"; +/* Format to returen the date an item expires. Includes %@ placehoder for date */ +"EXPIRES_AT_DATE_%@" = "Истекает: %@"; + /* The master key was changed by an external program! */ "EXTERN_CHANGE_OF_MASTERKEY" = "Мастер-ключ был изменен другой программой"; @@ -89,18 +338,47 @@ /* External file change strategy option: Keep local file an ignore external changes */ "FILE_CHANGE_STRATEGY_KEEP_MINE" = "Оставить Мою Версию и Игнорировать Другие Изменения"; -/* External file change strategy option: Merge external changes into local file. */ +/* Button in dialog to merge changes into file! + External file change strategy option: Merge external changes into local file. */ "FILE_CHANGE_STRATEGY_MERGE" = "Слить изменения"; /* External file change strategy option: Use the changed file and discard local changes */ "FILE_CHANGE_STRATEGY_USE_OTHER" = "Загрузить Измененную Версию и Отменить Мои Изменения"; -/* Menu item to toggle display of history count column in entry table */ +/* Informative text displayed when the file was change from another application */ +"FILE_CHANGED_BY_OTHERS_INFO_TEXT" = "Загруженный файл отличается от файла на диске. Что вы хотите делать дальше?"; + +/* Message displayed when an open file was changed from another application */ +"FILE_CHANGED_BY_OTHERS_MESSAGE_TEXT" = "Файл базы данных изменен!"; + +/* Error while reopening last known documents */ +"FILE_OPEN_ERROR" = "Ошибка открытия файла."; + +/* General Settings Label */ +"GENERAL_SETTINGS" = "Общие"; + +/* Group column title */ +"GROUP" = "Группа"; + +/* History count column title + Menu item to toggle display of history count column in entry table */ "HISTORY" = "История"; /* Imports a dragged URL for a new entry */ "IMPORT_URL" = "Импорт по URL"; +/* Toolbar item toggle inspector */ +"INSPECTOR" = "Инспектор"; + +/* Label for the integration settings tab */ +"INTEGRATION_SETTINGS" = "Интеграция"; + +/* Just now */ +"JUST_NOW" = "Прямо сейчас"; + +/* Feature only available in kdbx databases */ +"KDBX_ONLY_FEATURE" = "Функция не поддерживается в KDB базе"; + /* Button in dialog to ignore the changes to an open file! */ "KEEP_MINE_DISCARD_OTHER" = "Оставить Мои, Отменить Другие"; @@ -113,6 +391,12 @@ /* Do not restart MacPass */ "KEEP_RUNNING" = "Оставить Запущеным"; +/* last week */ +"LAST_WEEK" = "Прошлая неделя"; + +/* Toolbar item to Lock the database */ +"LOCK" = "Блокировка"; + /* Message in the open panel to add attachments to an entry */ "MESSAGE_ADD_ATTACHMENT_OPEN_PANEL" = "Выберите файл для вложения"; @@ -122,9 +406,66 @@ /* Message in the open panel to import an XML file */ "MESSAGE_XML_OPEN_PANEL" = "Выберите XML файл для импорта"; -/* Ok button */ +/* Menu item to toggle display of modified date column in entry table + Modification date column title */ +"MODIFIED" = "Дата изменения"; + +/* Action name when an entry was moved */ +"MOVE_ENTRY" = "Переместить Запись"; + +/* Menu displayed as popup selection for search options when multiple items are selected */ +"MULTIPLE_FILTERS_ACTIVE_WITH_DOTS" = "Multiple…"; + +/* Name for a newly created Database */ +"NEW_DATABASE" = "База данных"; + +/* Action name for a newly created entry + Menu item to create a new entry + Toolbar item new entry */ +"NEW_ENTRY" = "Добавить Запись"; + +/* Submenu to add an entry via template */ +"NEW_ENTRY_WITH_TEMPLATE_%@" = "Создать запись из шаблона %@"; + +/* Action name for a newly created group + Menu item to create a new group + Toolbar item new group */ +"NEW_GROUP" = "Добавить Группу"; + +/* Expiration date format, when item does not expire */ +"NO_EXPIRE_DATE_SET" = "Никогда не истекает."; + +/* Menu item to reset the template groups */ +"NO_TEMPLATE_GROUP" = "Нет шаблонов"; + +/* Menu item added to show that no templates are defined */ +"NO_TEMPLATES" = "Шаблоны не найдены"; + +/* Null placeholder for item input field + Placeholder text for input fields if no entry or group is selected */ +"NONE" = "Нет"; + +/* Displayed name when notes or part of notes was copied + Menu item to toggle display of notes column in entry table + Notes column title + Notes reference item */ +"NOTES" = "Заметки"; + +/* Ok Button to dismiss disabled updates alert */ "OK" = "OK"; +/* preset to expire after one montch from now */ +"ONE_MONTH" = "через один месяц"; + +/* preset to expire after one week from now */ +"ONE_WEEK" = "Через одну неделю"; + +/* one week ago */ +"ONE_WEEK_AGO" = "Одна неделя назад"; + +/* preset to expire after one year from now */ +"ONE_YEAR" = "через один год"; + /* Open button in the open panel to add attachments to an entry */ "OPEN_BUTTON_ADD_ATTACHMENT_OPEN_PANEL" = "Приложить"; @@ -137,9 +478,47 @@ /* Action button in Notification to open a document */ "OPEN_DOCUMENT" = "Открыть Документ"; +/* Action button in Notification to show the Accessibilty preferences */ +"OPEN_PREFERENCES" = "Открыть настройки"; + +/* Menu item to open the URL with the default application */ +"OPEN_URL" = "Открыть URL"; + +/* Select Browser */ +"OTHER_BROWSER" = "Выберите браузер…"; + /* No comment provided by engineer. */ "OUTPUT_VALUE" = "Выходящее Значение"; +/* Menu item to toggle display of password column in entry table + Password column title + Password reference item */ +"PASSWORD" = "Пароль"; + +/* Window title for the stand-alone password creator window */ +"PASSWORD_CREATOR_WINDOW_TITLE" = "Генератор паролей"; + +/* Button to reset the password defaults for a single entry */ +"PASSWORD_GENERATOR_RESET_ENTRY_DEFAULTS" = "Сброс"; + +/* Button to set the defaults of the password generator */ +"PASSWORD_GENERATOR_SET_DEFAULTS" = "По умолчанию"; + +/* Placeholder for the password field to aks for password + Placeholder in the unlock-password input field if password is enabled */ +"PASSWORD_INPUT_ENTER_PASSWORD" = "Введите пароль"; + +/* Placeholder for the password input field if passwords are disabled + Placeholder for the repeat password input if passwords are disabled + Placeholder in the unlock-password input field if password is disabled */ +"PASSWORD_INPUT_NO_PASSWORD" = "Нет пароля"; + +/* Placeholder for the repeat password field to aks for the repeated password */ +"PASSWORD_INPUT_REPEAT_PASSWORD" = "Повторите пароль"; + +/* Menu item to perform autotype with the selected entry */ +"PERFORM_AUTOTYPE_FOR_ENTRY" = "Осуществить автоввод"; + /* Info about how many character has to pick in pickchar dialog */ "PICKCHAR_INFO_MESSAGE_PICK_CHARACTERS_%ld" = "Пожалуйста, выберите %ld символов"; @@ -152,6 +531,36 @@ /* Window displayed to the user to pick an amout of characters */ "PICKFIELD_WINDOW_TITLE" = "Выбор полей"; +/* Label for the button when a download is in progress! */ +"PLUGIN_BROWSER_ACTION_DOWNLOAD_IN_PROGRESS" = "Загрузка"; + +/* Label for the button when a download did not succeed */ +"PLUGIN_BROWSER_ACTION_RETRY_FAILED_DOWNLOAD" = "Повторить загрузку"; + +/* Label for the button to show a downloaded file */ +"PLUGIN_BROWSER_ACTION_SHOW_DOWNLOADED_FILE" = "Показать загруженный файл"; + +/* Button to download the Plugin */ +"PLUGIN_BROWSER_DOWNLOAD_PLUGIN_BUTTON" = "Скачать"; + +/* Status for an up-to-date plugin in the plugin browser */ +"PLUGIN_BROWSER_LATEST_VERSION_INSTALLED" = "Установлена последняя версия"; + +/* Status for an outdated plugin version in the plugin browser */ +"PLUGIN_BROWSER_NEWER_VERSION_%@_AVAILABLE" = "Доступна версия %@"; + +/* Status for an uninstalled plugin in the plugin browser */ +"PLUGIN_BROWSER_PLUGIN_NOT_INSTALLED" = "Не установлен"; + +/* Status for an unkonw plugin version in the plugin browser */ +"PLUGIN_BROWSER_UNKNOWN_PLUGIN_VERSION_INSTALLED_%@" = "Неизвестная версия"; + +/* Error for a plugin that is disabled. */ +"PLUGIN_ERROR_DISABLED_PLUGIN" = "Этот плагин отключен пользователем"; + +/* Plugin is not with this version of MacPass */ +"PLUGIN_ERROR_HOST_VERSION_NOT_SUPPORTED" = "Плагин не совместим с текущей версией MacPass"; + /* The plugin could not be initalized */ "PLUGIN_ERROR_INTILIZATION_FAILED" = "Плагин не может быть установлен"; @@ -161,21 +570,73 @@ /* Plugin specifies the wrong principla class! */ "PLUGIN_ERROR_WRONG_PRINCIPAL_CLASS" = "Неподходящий основной класс в плагине"; +/* name for disabled unloaded plugin */ +"PLUGIN_NAME_DISABLED_%@" = "🚫 %@"; + +/* Name for unloaded plugin with errors */ +"PLUGIN_NAME_ERROR_%@" = "⚠️ %@"; + +/* Label for plugin settings tab */ +"PLUGIN_SETTINGS" = "Плагины"; + /* Generic message displayed if no details are know why a plugin was not loaded. */ "PLUGIN_SETTINGS_GENERIC_ERROR_MESSAGE" = "Плагин не может быть загружен."; /* Plugin version. Include a %@ placeholder for version string */ "PLUGIN_VERSION_%@" = "Версия: %@"; +/* Menu item to preview the selected attached file. */ +"PREVIEW" = "Предпросмотр"; + +/* Recent searches menu item */ +"RECENT_SEARCHES" = "Последние запросы"; + +/* Informative text for the recommend password change alert */ +"RECOMMEND_PASSWORD_CHANGE_ALERT_DESCRIPTION" = "Рекомендуется сменить пароль базы данных и/или файл ключа."; + +/* Message text for the recommend password change alert */ +"RECOMMEND_PASSWORD_CHANGE_ALERT_TITLE" = "Пожалуйста, измените пароль базы данных!"; + /* Restart */ "RESTART" = "Перезапустить"; /* Action to restore and Entry to a previous state of it's history */ "RESTORE_HISTORY_ENTRY" = "Восстановить Историческую Запись"; +/* Menu item to save the selected attached file. + Save file menu item title when save will just save the file */ +"SAVE" = "Сохранить"; + +/* Button title to save the generated key file */ +"SAVE_KEYFILE" = "Сохранить файл ключа"; + +/* Save file menu item title when save will prompt for a location to save or ask for a password/key */ +"SAVE_WITH_DOTS" = "Сохранить…"; + +/* Search input in Toolbar */ +"SEARCH" = "Поиск"; + +/* Search option: Find duplicate passwords */ +"SEARCH_DUPLICATE_PASSWORDS" = "Дубли паролей"; + +/* Search option: Find expired entries */ +"SEARCH_EXPIRED_ENTRIES" = "Истекло"; + +/* Inherit search settings menu item */ +"SEARCH_INHERIT" = "Наследовать Настройки Поиска"; + +/* Disable search menu item */ +"SEARCH_NO" = "Исключить из Поиска"; + /* No comment provided by engineer. */ "SEARCH_VALUE" = "Поисковое значение"; +/* Enable search menu item */ +"SEARCH_YES" = "Включить в Поиск"; + +/* Menu item title for the expiry preset selection menu in the date picker */ +"SELECT_DATE_PRESET" = "Использовать установки…"; + /* Message on the open panel for selecting which browser to use for opening URLs */ "SELECT_DEFAULT_BROWSER_OPEN_PANEL_MESSAGE" = "Выберите браузер, которым нужно открывать URL."; @@ -185,14 +646,33 @@ /* Message for the dialog to open a file for merge */ "SELECT_FILE_TO_MERGE" = "Выбор файла для слияния"; +/* Menu displayed as popup selection for search options if no filter is selected */ +"SELECT_FILTER_WITH_DOTS" = "Выбрать…"; + /* Checkbox in dialog to set the selection as default file change strategy! */ "SET_AS_DEFAULT_FILE_CHANGE_STRATEGY" = "Использовать этот способ по умолчанию. Вы сможете поменять это в любое время в настройках."; -/* Menu item to show the reference builder in a text view's context menu */ -"SHOW_REFERENCE_BUILDER" = "Показать конструктор связей"; +/* Menu item to show the history of the selected entry + Toolbar item to toggle history display */ +"SHOW_HISTORY" = "Показать историю"; + +/* Displayed name when title field was copied + Menu item to toggle display of title column in entry table + Title column title + Title reference item */ +"TITLE" = "Заголовок"; + +/* preset to expire tomorrow */ +"TOMORROW" = "Завтра"; /* Toolbar item to perform autotype */ -"TOOLBAR_PERFORM_AUTOTYPE_FOR_ENTRY" = "Авто-ввод"; +"TOOLBAR_PERFORM_AUTOTYPE_FOR_ENTRY" = "Автоввод"; + +/* Move Entry to Trash */ +"TRASH_ENTRY" = "Удалить Запись"; + +/* Move Group to Trash */ +"TRASH_GROUP" = "Удалить Группу"; /* Uninstall plugin */ "UNINSTALL" = "Удалить"; @@ -209,11 +689,26 @@ /* No comment provided by engineer. */ "UNKNOWN_TOOLBAR_ITEM" = "Неизвестный элемент панели инструментов"; -/* UUID reference item */ +/* Update Settings Label */ +"UPDATE_SETTINGS" = "Обновления"; + +/* Menu item to toggle display of url column in entry table + Submenu with options what to do with the URL of an entry + Url column title + URL reference item */ +"URL" = "URL"; + +/* Menu item to toggle display of username column in entry table + Username column title + Username reference item */ +"USERNAME" = "Имя пользователя"; + +/* Displayed name when uuid field was copied + UUID reference item */ "UUID" = "UUID"; -/* Message text for disabled updates alert! */ -"Updates are disabled!" = "Обновления отключены!"; +/* No Key or Password */ +"WARNING_NO_PASSWORD_OR_KEYFILE" = "Не было применено ни пароля, ни файла ключа!"; /* Informative Text displayed when clearing the Trash */ "WARNING_ON_DELETE_TRASHED_NODE_DESCRIPTION" = "Все записи из корзины, будут удалены!"; @@ -221,176 +716,21 @@ /* Message text for the alert displayed when deleting a node */ "WARNING_ON_DELETE_TRASHED_NODE_TITLE" = "Удаление записей из корзины"; -/* - Actions - */ -"NEW_ENTRY" = "Добавить Запись"; -"NEW_GROUP" = "Добавить Группу"; -"DUPLICATE_ENTRY" = "Скопировать Запись"; -"DUPLICATE_ENTRY_WITH_OPTIONS" = "Скопировать Запись…"; -"COPY_ENTRY" = "Копировать Запись"; -"COPY_GROUP" = "Копировать Группу"; -"ADD_TREMPLATE_ENTRY" = "Создать шаблонную запись"; -"DELETE_GROUP" = "Удалить Группу"; -"DELETE_ENTRY" = "Удалить Запись"; -"EDIT_TEMPLATE_GROUP" = "Изменить группу шаблона"; -"EMPTY_TRASH" = "Очистить Корзину"; -"MOVE_ENTRY" = "Переместить Запись"; -"MOVE_GROUP" = "Переместить Группу"; -"NEW_ENTRY_WITH_TEMPLATE_%@" = "Создать запись из шаблона %@"; -"NEW_DATABASE" = "База данных"; -"OPEN_URL" = "Открыть URL"; -"PERFORM_AUTOTYPE_FOR_ENTRY" = "Осуществить автоввод"; -"PREVIEW" = "Предпросмотр"; -"PASSWORD_GENERATOR_SET_DEFAULTS" = "По умолчанию"; -"PASSWORD_GENERATOR_RESET_ENTRY_DEFAULTS" = "Сброс"; -"TRASH_ENTRY" = "Удалить Запись"; -"TRASH_GROUP" = "Удалить Группу"; -"SHOW_HISTORY" = "Показать историю"; - -/* - Search - */ -"CLEAR_RECENT_SEARCHES" = "Очистить последние запросы"; -"RECENT_SEARCHES" = "Последние запросы"; -"SEARCH_DUPLICATE_PASSWORDS" = "Дубли паролей"; -"SEARCH_EXPIRED_ENTRIES" = "Истекло"; -"SELECT_FILTER_WITH_DOTS" = "Выбрать…"; - -/* - Direct Translations - */ -"ACTION" = "Действие"; -"ATTACHMENTS" = "Файлы"; -"CANCEL" = "Отмена"; -"DATABASE" = "База данных"; -"DELETE" = "Удалить"; -"EDIT" = "Изменено"; -"GROUP" = "Группа"; -"INSPECTOR" = "Инспектор"; -"LOCK" = "Блокировка"; -"MODIFIED" = "Изменить"; -"NONE" = "Нет"; -"NOTES" = "Заметки"; -"PASSWORD" = "Пароль"; -"SAVE" = "Сохранить"; -"SAVE_WITH_DOTS" = "Сохранить…"; -"SEARCH" = "Поиск"; -"TITLE" = "Заголовок"; -"URL" = "URL"; -"USERNAME" = "Имя пользователя"; -"WINDOWS" = "Окна"; - - -"CHANGE_DATABASE_NAME" = "Изменить Имя базы данных"; -"CHANGE_TRASH_GROUP" = "Изменить группу для мусора"; - -/* Field nam that was copied to the pasteboard */ -"COPIED_FIELD_%@" = "Скопировано %@"; -"COPIED_PASSWORD" = "Пароль скопирован!"; -"COPIED_URL" = "URL скопирован!"; -"COPIED_USERNAME" = "Имя пользователя скопировано!"; -"COPY_CUSTOM_FIELDS" = "Копировать поля"; -"COPY_FIELD_%@" = "Копировать %@"; -"COPY_PASSWORD" = "Копировать Пароль"; -"COPY_URL" = "Копировать URL"; -"COPY_USERNAME" = "Копировать Имя пользователя"; - -/* Dock Badge */ -"CLEARING_PASTEBOARD" = "…"; - -/* Group Inspector */ -/* Autotype Combobox */ -"AUTOTYPE_NO" = "Отключить Автоввод"; -"AUTOTYPE_YES" = "Включить Автоввод"; -"AUTOTYPE_INHERIT" = "Наследовать Настройки Автоввода"; - -/* Search Combobox */ -"SEARCH_INHERIT" = "Наследовать Настройки Поиска"; -"SEARCH_YES" = "Включить в Поиск"; -"SEARCH_NO" = "Исключить из Поиска"; - -/* - Date/Time Displays - */ -/* Created at template string. %@ is replaced by localized date and time */ -"CREATED_AT_%@" = "Создано: %@"; -/* Modifed at template string. %@ is replaced by localized date and time */ -"MODIFED_AT_%@" = "Изменено: %@"; - -"EXPIRES_AT_DATE_%@" = "Истекает: %@"; -"NO_EXPIRE_DATE_SET" = "Никогда не истекает."; - -/* - Defaults for new objects - */ -"DEFAULT_CUSTOM_FIELD_TITLE" = "Поле"; -"DEFAULT_CUSTOM_FIELD_VALUE" = "Значение"; -"DEFAULT_ENTRY_TITLE" = "Новая Запись"; -"DEFAULT_GROUP_NAME" = "Новая Группа"; -"DEFAULT_WINDOW_TITLE" = "Заголовок Окна"; - -/* Settings */ -"GENERAL_SETTINGS" = "Общие"; -"INTEGRATION_SETTINGS" = "Интеграция"; -"UPDATE_SETTINGS" = "Обновления"; -"WORKFLOW_SETTINGS" = "Рабочие настройки"; -"DEFAULT_BROWSER" = "Браузер по умолчанию"; -"OTHER_BROWSER" = "Выберите браузер…"; -"PLUGIN_SETTINGS" = "Плагины"; - -/* Feature not supported in Version */ -"KDBX_ONLY_FEATURE" = "Функция не поддерживается в KDB базе"; - -/* Template */ -"NO_TEMPLATE_GROUP" = "Нет шаблонов"; -"NO_TEMPLATES" = "Шаблоны не найдены"; - -/* Kefile */ -"SAVE_KEYFILE" = "Сохранить файл ключа"; - -/* Autoype */ -/* Candiate dialog */ -"SELECT_AUTOTYPE_CANDIDATE" = "Выберите кандидата!"; -"AUTOTYPE_OVERLAY_NO_DOCUMENTS" = "Откройте файл базы данных для использования глобального авто-ввода!"; -"AUTOTYPE_OVERLAY_NO_MATCH_FOR_%@" = "Нет соответствий %@!"; -"AUTOTYPE_OVERLAY_SINGLE_MATCH" = "Соответствие!"; - -/* Alert Dialogs */ +/* Informative Text displayed when clearing the Trash */ "WARNING_ON_EMPTY_TRASH_DESCRIPTION" = "Очистку корзины отменить нельзя."; -"WARNING_ON_EMPTY_TRASH_TITLE" = "Очистить корзину?"; -"WARNING_ON_LOSSY_SAVE" = "Сохранение базы в KDB формате может вызвать потерю данных."; -"WARNING_ON_LOSSY_SAVE_DESCRIPTION" = "Формат KDB не умеет хранить всю информацию."; -"CHANGE_FORMAT" = "Изменить формат файла на KDBX"; - -"ENFORCE_PASSWORD_CHANGE_ALERT_TITLE" = "Пароль базы данных истек!"; -"ENFORCE_PASSWORD_CHANGE_ALERT_DESCRIPTION" = "Вы не можете ничего сохранять, пока не поменяете пароль базы и/или файл ключа."; -"RECOMMEND_PASSWORD_CHANGE_ALERT_TITLE" = "Пожалуйста, измените пароль базы данных!"; -"RECOMMEND_PASSWORD_CHANGE_ALERT_DESCRIPTION" = "Рекомендуется сменить пароль базы данных и/или файл ключа."; -"CHANGE_PASSWORD_WITH_DOTS" = "Изменить пароль…"; +/* Message text for the alert displayed when clearing the Trash */ +"WARNING_ON_EMPTY_TRASH_TITLE" = "Очистить корзину?"; +/* No comment provided by engineer. */ "WARNING_ON_SAVE_NO_PASSWORD_OR_KEY_SET" = "Не указан пароль или файл ключей."; + +/* No comment provided by engineer. */ "WARNING_ON_SAVE_NO_PASSWORD_OR_KEY_SET_SUGGESTION" = "Пожалуйста, укажите пароль и/или файл ключей для этой базы данных. Отмена этого приведет к отмене всех изменений и блокировке документа"; -/* Message displayed when an open file was changed from another application */ -"FILE_CHANGED_BY_OTHERS_MESSAGE_TEXT" = "Файл базы данных изменен!"; -/* Informative text displayed when the file was change form another application */ -"FILE_CHANGED_BY_OTHERS_INFO_TEXT" = "Загруженный файл отличается от файла на диске. Что вы хотите делать дальше?"; -/* Button to ignore the changes */ -"KEEP_MINE" = "Сохранить текущую версию и игнорировать изменения на диске!"; -/* Merge changes into file! */ -"MERGE_CHANGES" = "Слияние изменений!"; +/* Label for the workflow settings tab */ +"WORKFLOW_SETTINGS" = "Рабочие настройки"; -/* Password Input Messages, Errors and Warning */ -"PASSWORD_INPUT_NO_PASSWORD" = "Нет пароля"; -"PASSWORD_INPUT_ENTER_PASSWORD" = "Введите пароль"; -"PASSWORD_INPUT_REPEAT_PASSWORD" = "Повторите пароль"; -"WARNING_NO_PASSWORD_OR_KEYFILE" = "Не было применено ни пароля, ни файла ключа!"; -"ERROR_PASSWORD_MISSMATCH_INVALID_KEYFILE" = "Пароли не соответствуют и файл ключа не верный!"; -"ERROR_PASSWORD_MISSMATCH" = "Пароли не соответствуют!"; -"ERROR_INVALID_KEYFILE" = "Неверный файл ключа!"; +/* Yesterday */ +"YESTERDAY" = "Вчера"; -/* Misc */ -"DOCUMENT_AUTOTYPE_CORRUPTION_WARNING" = "Пожалуйста, запустите Исправление Автоввода..."; -"FILE_OPEN_ERROR" = "Ошибка открытия файла."; diff --git a/MacPass/ru.lproj/MainMenu.strings b/MacPass/ru.lproj/MainMenu.strings index 9fb96f04a..fd0d40b90 100644 --- a/MacPass/ru.lproj/MainMenu.strings +++ b/MacPass/ru.lproj/MainMenu.strings @@ -1,3 +1,11 @@ +/* Class = "NSMenuItem"; title = "Focus Entries"; ObjectID = "2VP-vB-IeX"; */ +"2VP-vB-IeX.title" = "Записи"; + +/* Class = "NSMenuItem"; title = "Item"; ObjectID = "3st-rv-EeQ"; */ +"3st-rv-EeQ.title" = "Элемент"; + +/* Class = "NSMenu"; title = "Import"; ObjectID = "4q9-u1-pcm"; */ +"4q9-u1-pcm.title" = "Импорт"; /* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "5"; */ "5.title" = "На передний план"; @@ -35,7 +43,7 @@ /* Class = "NSMenu"; title = "File"; ObjectID = "81"; */ "81.title" = "Файл"; -/* Class = "NSMenuItem"; title = "New"; ObjectID = "82"; */ +/* Class = "NSMenuItem"; title = "New Database"; ObjectID = "82"; */ "82.title" = "Новый"; /* Class = "NSMenuItem"; title = "File"; ObjectID = "83"; */ @@ -131,7 +139,7 @@ /* Class = "NSMenuItem"; title = "Toggle Inspector"; ObjectID = "1181"; */ "1181.title" = "Переключить Инспектор"; -/* Class = "NSMenuItem"; title = "Show Password Creator"; ObjectID = "1200"; */ +/* Class = "NSMenuItem"; title = "Show Password Generator"; ObjectID = "1200"; */ "1200.title" = "Показать Генератор Паролей"; /* Class = "NSMenuItem"; title = "Change Master Password…"; ObjectID = "1203"; */ @@ -143,32 +151,45 @@ /* Class = "NSMenuItem"; title = "Save As…"; ObjectID = "1243"; */ "1243.title" = "Сохранить Как…"; -/* Class = "NSMenuItem"; title = "Export As XML…"; ObjectID = "1259"; */ +/* Class = "NSMenuItem"; title = "XML…"; ObjectID = "1259"; */ "1259.title" = "Экспортировать в XML…"; /* Class = "NSMenuItem"; title = "Lock"; ObjectID = "1261"; */ "1261.title" = "Заблокировать"; -/* Class = "NSMenuItem"; title = "Focus Entries"; ObjectID = "2VP-vB-IeX"; */ -"2VP-vB-IeX.title" = "Записи"; - -/* Class = "NSMenuItem"; title = "Focus Groups"; ObjectID = "HxM-dV-LIH"; */ -"HxM-dV-LIH.title" = "Группы"; - -/* Class = "NSMenuItem"; title = "Focus Inspector"; ObjectID = "Zje-Me-5c8"; */ -"Zje-Me-5c8.title" = "Инспектор"; +/* Class = "NSMenuItem"; title = "Import"; ObjectID = "aTb-sW-nUd"; */ +"aTb-sW-nUd.title" = "Импорт"; /* Class = "NSMenuItem"; title = "Quicklook"; ObjectID = "aVO-9F-Lwc"; */ "aVO-9F-Lwc.title" = "Быстрый просмотр"; +/* Class = "NSMenuItem"; title = "Focus Groups"; ObjectID = "HxM-dV-LIH"; */ +"HxM-dV-LIH.title" = "Группы"; + /* Class = "NSMenuItem"; title = "Save a Copy…"; ObjectID = "i24-Gn-j9c"; */ "i24-Gn-j9c.title" = "Сохранить копию…"; /* Class = "NSMenuItem"; title = "Fix Autotype…"; ObjectID = "nx7-Vf-LiD"; */ "nx7-Vf-LiD.title" = "Исправить Автоввод…"; -/* Class = "NSMenuItem"; title = "Import XML…"; ObjectID = "rW0-r1-QYL"; */ +/* Class = "NSMenu"; title = "Export"; ObjectID = "p8h-Fg-h1O"; */ +"p8h-Fg-h1O.title" = "Экспорт"; + +/* Class = "NSMenuItem"; title = "XML…"; ObjectID = "rW0-r1-QYL"; */ "rW0-r1-QYL.title" = "Импортировать XML…"; +/* Class = "NSMenu"; title = "Item"; ObjectID = "Ttt-tR-emo"; */ +"Ttt-tR-emo.title" = "Элемент"; + +/* Class = "NSMenuItem"; title = "Export"; ObjectID = "tz9-yK-pOf"; */ +"tz9-yK-pOf.title" = "Экспорт"; + +/* Class = "NSMenuItem"; title = "Focus Inspector"; ObjectID = "Zje-Me-5c8"; */ +"Zje-Me-5c8.title" = "Инспектор"; + /* Class = "NSMenuItem"; title = "Check for Updates…"; ObjectID = "zMO-8r-g5v"; */ -"zMO-8r-g5v.title" = "Проверить Обновления…"; +"zMO-8r-g5v.title" = "Проверить обновления…"; + +/* Class = "NSMenuItem"; title = "Merge With…"; ObjectID = "zvE-0h-UxI"; */ +"zvE-0h-UxI.title" = "Слияние с…"; + diff --git a/MacPass/ru.lproj/PasswordCreatorView.strings b/MacPass/ru.lproj/PasswordCreatorView.strings index 83a6bc3d2..917875ecc 100644 --- a/MacPass/ru.lproj/PasswordCreatorView.strings +++ b/MacPass/ru.lproj/PasswordCreatorView.strings @@ -1,11 +1,10 @@ - /* Class = "NSTextFieldCell"; title = "Password:"; ObjectID = "149"; */ "149.title" = "Пароль:"; /* Class = "NSTextFieldCell"; title = "Length:"; ObjectID = "179"; */ "179.title" = "Длина:"; -/* Class = "NSBox"; title = "Allowed Characters"; ObjectID = "332"; */ +/* Class = "NSBox"; title = "Character options"; ObjectID = "332"; */ "332.title" = "Допустимые символы"; /* Class = "NSButtonCell"; title = "A-Z"; ObjectID = "453"; */ @@ -38,8 +37,12 @@ /* Class = "NSTextFieldCell"; title = "25000 bit"; ObjectID = "653"; */ "653.title" = "25000 бит"; +/* Class = "NSButtonCell"; title = "Use default only for selected entry"; ObjectID = "cfZ-5F-Nge"; */ +"cfZ-5F-Nge.title" = "Использовать умолчания только для выбранной записи"; + +/* Class = "NSButtonCell"; title = "Use characters from every group"; ObjectID = "CMc-Uh-Fo5"; */ +"CMc-Uh-Fo5.title" = "Использовать символы из всех групп"; + /* Class = "NSButtonCell"; title = "Set Default"; ObjectID = "Wvs-Md-Ob8"; */ "Wvs-Md-Ob8.title" = "По умолчанию"; -/* Class = "NSButtonCell"; title = "Use default only for selected entry"; ObjectID = "cfZ-5F-Nge"; */ -"cfZ-5F-Nge.title" = "Использовать умолчания только для выбранной записи"; diff --git a/MacPass/ru.lproj/PasswordInputView.strings b/MacPass/ru.lproj/PasswordInputView.strings index e9bc9ee0a..af74eec75 100644 --- a/MacPass/ru.lproj/PasswordInputView.strings +++ b/MacPass/ru.lproj/PasswordInputView.strings @@ -1,4 +1,3 @@ - /* Class = "NSButtonCell"; title = "Unlock"; ObjectID = "3"; */ "3.title" = "Разблокировать"; @@ -11,5 +10,9 @@ /* Class = "NSSecureTextFieldCell"; placeholderString = "Enter Password"; ObjectID = "339"; */ "339.placeholderString" = "Введите пароль"; +/* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "erj-mR-UyO"; */ +"erj-mR-UyO.title" = "Отмена"; + /* Class = "NSButtonCell"; title = "Password"; ObjectID = "IU9-5u-jn9"; */ "IU9-5u-jn9.title" = "Пароль"; + diff --git a/MacPass/ru.lproj/PluginPreferences.strings b/MacPass/ru.lproj/PluginPreferences.strings index b44d628d5..4a2983b9f 100644 --- a/MacPass/ru.lproj/PluginPreferences.strings +++ b/MacPass/ru.lproj/PluginPreferences.strings @@ -1,15 +1,21 @@ - -/* Class = "NSTextFieldCell"; title = "If enabled, only properly signed Plugins will be loaded. Keep in mind, that Plugins have full access to your data! Changes take affect on restart."; ObjectID = "2bX-8S-9XM"; */ +/* Class = "NSTextFieldCell"; title = "If enabled, Plugins without proper signatures will be allowed to load. Keep in mind, that Plugins have full access to your data! Changes take affect on restart."; ObjectID = "2bX-8S-9XM"; */ "2bX-8S-9XM.title" = "Если включено, будут загружены только правильно подписанные Плагины. Пожалуйста, помните, что Плагины имеют полный доступ к вашим данным! Изменения вступят в силу после перезагрузки."; /* Class = "NSButtonCell"; title = "Load unsecure Plugins"; ObjectID = "C4B-6z-ZqX"; */ "C4B-6z-ZqX.title" = "Загружать небезопасные Плагины"; -/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "STt-PQ-Szr"; */ -"STt-PQ-Szr.title" = "Текстовая Ячейка"; - /* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "fug-79-n9g"; */ "fug-79-n9g.title" = "Табличная ячейка"; +/* Class = "NSButtonCell"; title = "Browse Available Plugins…"; ObjectID = "sqO-8H-n1y"; */ +"sqO-8H-n1y.title" = "Обзор доступных плагинов"; + +/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "STt-PQ-Szr"; */ +"STt-PQ-Szr.title" = "Текстовая Ячейка"; + /* Class = "NSBox"; title = "Box"; ObjectID = "vBs-Ga-aq0"; */ "vBs-Ga-aq0.title" = "Блок"; + +/* Class = "NSButtonCell"; title = "Force loading of incompatible Plugins"; ObjectID = "yak-fS-jtA"; */ +"yak-fS-jtA.title" = "Принудительно загружать несовместимые плагины"; + diff --git a/MacPass/ru.lproj/PluginRepositoryBrowserView.strings b/MacPass/ru.lproj/PluginRepositoryBrowserView.strings new file mode 100644 index 000000000..b2ed3792e --- /dev/null +++ b/MacPass/ru.lproj/PluginRepositoryBrowserView.strings @@ -0,0 +1,17 @@ +/* Class = "NSButtonCell"; title = "Refresh"; ObjectID = "NZw-nO-lZ3"; */ +"NZw-nO-lZ3.title" = "Обновить"; + +/* Class = "NSTableColumn"; headerCell.title = "Plugin"; ObjectID = "Nzo-rR-Hfx"; */ +"Nzo-rR-Hfx.headerCell.title" = "Плагин"; + +/* Class = "NSTableColumn"; headerCell.title = "Status"; ObjectID = "g1Q-BS-vCR"; */ +"g1Q-BS-vCR.headerCell.title" = "Статус"; + +/* Class = "NSTableColumn"; headerCell.title = "Latest Version"; ObjectID = "hFg-AD-SqD"; */ +"hFg-AD-SqD.headerCell.title" = "Последняя версия"; + +/* Class = "NSButtonCell"; title = "Done"; ObjectID = "j9a-fn-Pye"; */ +"j9a-fn-Pye.title" = "Готово"; + +/* Class = "NSTextFieldCell"; title = "Last updated:"; ObjectID = "ntD-sJ-NRw"; */ +"ntD-sJ-NRw.title" = "Последнее обновление:"; diff --git a/MacPass/ru.lproj/SavePanelAccessoryView.strings b/MacPass/ru.lproj/SavePanelAccessoryView.strings new file mode 100644 index 000000000..4d0c086ec --- /dev/null +++ b/MacPass/ru.lproj/SavePanelAccessoryView.strings @@ -0,0 +1,15 @@ + +/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "4"; */ +"4.title" = "OtherViews"; + +/* Class = "NSMenuItem"; title = "KeePass 1 (KDB)"; ObjectID = "5"; */ +"5.title" = "KeePass 1 (KDB)"; + +/* Class = "NSMenuItem"; title = "KeePass 2 (KDBX)"; ObjectID = "6"; */ +"6.title" = "KeePass 2 (KDBX)"; + +/* Class = "NSTextFieldCell"; title = "Format:"; ObjectID = "12"; */ +"12.title" = "Формат:"; + +/* Class = "NSTextFieldCell"; title = "Not all Information inside your current database can be stored with this format."; ObjectID = "52"; */ +"52.title" = "Не вся информация из вашей базы может быть сохранена в выбранный формат."; diff --git a/MacPass/ru.lproj/UpdateSettings.strings b/MacPass/ru.lproj/UpdateSettings.strings index 9322702c7..035fcddee 100644 --- a/MacPass/ru.lproj/UpdateSettings.strings +++ b/MacPass/ru.lproj/UpdateSettings.strings @@ -1,12 +1,14 @@ - /* Class = "NSMenuItem"; title = "every Week"; ObjectID = "3FR-Va-iau"; */ -"3FR-Va-iau.title" = "каждую Неделю"; +"3FR-Va-iau.title" = "каждую неделю"; /* Class = "NSTextFieldCell"; title = "Check for Updates"; ObjectID = "9tL-CA-Vdg"; */ "9tL-CA-Vdg.title" = "Проверять обновления"; /* Class = "NSMenuItem"; title = "every Hour"; ObjectID = "DjF-1I-6Nq"; */ -"DjF-1I-6Nq.title" = "каждый Час"; +"DjF-1I-6Nq.title" = "каждый час"; + +/* Class = "NSMenuItem"; title = "every Day"; ObjectID = "o9E-hk-H1T"; */ +"o9E-hk-H1T.title" = "каждый день"; /* Class = "NSButtonCell"; title = "Automatically Check for Updates"; ObjectID = "RFg-q1-AwJ"; */ "RFg-q1-AwJ.title" = "Автоматически проверять обновления"; @@ -15,7 +17,5 @@ "RKd-H8-eCF.title" = "OtherViews"; /* Class = "NSMenuItem"; title = "every Month"; ObjectID = "Uo3-kv-1ro"; */ -"Uo3-kv-1ro.title" = "каждый Месяц"; +"Uo3-kv-1ro.title" = "каждый месяц"; -/* Class = "NSMenuItem"; title = "every Day"; ObjectID = "o9E-hk-H1T"; */ -"o9E-hk-H1T.title" = "каждый День"; diff --git a/MacPass/ru.lproj/WorkflowSettings.strings b/MacPass/ru.lproj/WorkflowSettings.strings index 3c00a4326..87461a57b 100644 --- a/MacPass/ru.lproj/WorkflowSettings.strings +++ b/MacPass/ru.lproj/WorkflowSettings.strings @@ -27,4 +27,10 @@ "7YX-EA-9KA.title" = "Браузер по умолчанию"; /* Class = "NSTextFieldCell"; title = "Open URLs in:"; ObjectID = "soD-wI-YOH"; */ -"soD-wI-YOH.title" = "Открывать URLы в:"; +"soD-wI-YOH.title" = "Открывать ссылки в:"; + +/* Class = "NSBox"; title = "Templates"; ObjectID = "Xvt-tP-TbR"; */ +"Xvt-tP-TbR.title" = "Шаблоны"; + +/* Class = "NSButtonCell"; title = "Update password for new entries"; ObjectID = "RaM-t2-DVR"; */ +"RaM-t2-DVR.title" = "Обновить пароль для новых записей"; From ae4656c79a5a7b185880a1abc3427a398a86d11e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Deniz=20T=C3=BCrkoglu?= Date: Fri, 5 Apr 2019 17:23:32 +1100 Subject: [PATCH 025/129] Keyfile selection window must be modal (#898) If we don't use the modal view, the user can put the file selection window to background, click 'Choose...' and open additional windows. --- MacPass/MPPathControl.m | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/MacPass/MPPathControl.m b/MacPass/MPPathControl.m index c0f8083a6..ff5fbdae9 100644 --- a/MacPass/MPPathControl.m +++ b/MacPass/MPPathControl.m @@ -44,11 +44,10 @@ - (void)showOpenPanel:(id)sender { if([self.delegate respondsToSelector:@selector(pathControl:willDisplayOpenPanel:)]) { [self.delegate pathControl:self willDisplayOpenPanel:panel]; } - [panel beginWithCompletionHandler:^(NSModalResponse result) { - if(result == NSModalResponseOK) { - self.URL = panel.URLs.firstObject; - } - }]; + NSModalResponse result = [panel runModal]; + if(result == NSModalResponseOK) { + self.URL = panel.URLs.firstObject; + } } - (void)pathControl:(NSPathControl *)pathControl willPopUpMenu:(NSMenu *)menu { From d909c377fb22317c298166373a402352c2c521f0 Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Mon, 1 Apr 2019 11:51:17 +0200 Subject: [PATCH 026/129] Dutch advanced database settings tab was broken because of a malformed localisation (fixes #913) --- MacPass/nl.lproj/Localizable.stringsdict | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MacPass/nl.lproj/Localizable.stringsdict b/MacPass/nl.lproj/Localizable.stringsdict index 60311d076..173f77b60 100644 --- a/MacPass/nl.lproj/Localizable.stringsdict +++ b/MacPass/nl.lproj/Localizable.stringsdict @@ -23,7 +23,7 @@ DUPLICATE_ENTRIES_%ld NSStringLocalizedFormatKey - + %#@entries@ entries NSStringFormatSpecTypeKey @@ -41,7 +41,7 @@ EVERY_%ld_DAYS NSStringLocalizedFormatKey - + %#@days@ days NSStringFormatSpecTypeKey From 43508ad3a5900e39fc035ff960e8885d137a774c Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Mon, 1 Apr 2019 12:14:08 +0200 Subject: [PATCH 027/129] Added trailing comma --- README.md | 130 +++++++++++++++++++++++++++--------------------------- 1 file changed, 65 insertions(+), 65 deletions(-) diff --git a/README.md b/README.md index 509594edb..84fc653ea 100644 --- a/README.md +++ b/README.md @@ -104,71 +104,71 @@ The following list might not be complete, please refer to [merged Pull Requests] ### Contributors -[ad](mailto:github.mnms@mamber.net) -[Alex Borisov](mailto:alex@alexborisov.org) -[Alex Seeholzer](mailto:seeholzer@gmail.com) -[amd](mailto:amd@gurge.com) -[Andrew Schleifer](mailto:me@andrewschleifer.name) -[AntoineCa](mailto:antoine@carrincazeaux.fr) -[Benjamin Steinwender](mailto:b@stbe.at) -[binarious](mailto:bieder.martin@googlemail.com) -[Can Rau](mailto:cansrau@gmail.com) -[Carlos Filipe Simões](mailto:ravemir@users.noreply.github.com) -[Chester Liu](mailto:skyline75489@outlook.com) -[Chhom Seng](mailto:chhom.seng@gmail.com) -[Christoph Leimbrock](mailto:christoph.leimbrock@gmx.de) -[Cory Hutchison](mailto:cjhutchi@users.noreply.github.com) -[Daniele Polencic](mailto:daniele.polencic@gmail.com) -[darnel](mailto:vojta.j@gmail.com) -[Deiwin Sarjas](mailto:deiwin.sarjas@gmail.com) -[Dennis Bolio](mailto:git@bolio.nl) -[Dylan Smith](mailto:dylansmith@gmail.com) -[eiermaaaan](mailto:37532252+eiermaaaan@users.noreply.github.com) -[Erwann Mest](mailto:m+github@kud.io) -[Filipe Farinha](mailto:filipe@ktorn.com) -[floriangouy](mailto:florian.gouy@gmail.com) -[Francesco Servida](mailto:info@francescoservida.ch) -[Frank Enderle](mailto:frank.enderle@anamica.de) -[Frank Kooij](https://github.com/FrankKooij) -[Gaétan Ryckeboer](mailto:gryckeboer@jouve.com) -[Geigi](mailto:git@geigi.de) -[Henri de Jong](mailto:henridejong@gmail.com) -[James Hurst](mailto:jamesrhurst@outlook.com) -[Jannick Hemelhof](mailto:mister.jannick@gmail.com) -[Jefftree](mailto:jeffrey.ying86@live.com) -[Jellyfrog](mailto:Jellyfrog@users.noreply.github.com) -[Joanna Olsen](mailto:jo4flash@gmail.com) -[Josh Halstead](mailto:jhalstead85@gmail.com) -[Kurt](mailto:kurt@soapbox-software.com) -[Laurent Cozic](mailto:laurent22@users.noreply.github.com) -[Lenucksi](mailto:lenucksi@users.noreply.github.com) -[Leonardo Faoro](mailto:lfaoro@users.noreply.github.com) -[Liam Anderson](mailto:liam.anderson.91@gmail.com) -[m0yP](mailto:moises@perez.lt) -[Maarten Terpstra](mailto:m.l.terpstra@student.rug.nl) -[Mario Sangiorgio](mailto:mariosangiorgio@gmail.com) -[MBibal](mailto:michel.bibal@gmail.com) -[Michael Belz](mailto:mbelz@outlook.de) -[MichaelKo](mailto:viacheslav.sychov@gmail.com) -[Michal Jaglewicz](mailto:michalj@webii.pl) -[Moises Perez](mailto:moises@perez.lt) -[mrdoggy](mailto:mrdoggy.all@gmail.com) -[Nathan Landis](mailto:nathanlandis@gmail.com) -[Nathaniel Madura](mailto:nmadura@umich.edu) -[neuroine](mailto:d.dzieduch@gmail.com) -[Patrik Thunström](mailto:magebarf@gmail.com) -[rdoering](mailto:rdoering.info@gmail.com) -[remi6397](mailto:remi6397@gmail.com) -[Roman Verchikov](mailto:roman-verchikov@users.noreply.github.com) -[Ryan Rogers](mailto:ryan@timewasted.me) -[Sitsofe Wheeler](mailto:sitsofe@yahoo.com) -[Stephen Taylor](mailto:schtee.taylor@gmail.com) -[thesoundofom](mailto:45923716+thesoundofom@users.noreply.github.com) -[Thom](mailto:thomscode@gmail.com) -[Thorsten Jacoby](mailto:tjacoby@gmail.com) -[Volcyy](mailto:Volcyy@users.noreply.github.com) -[Yonatan Mittlefehldt](mailto:yono@toojuice.com) -[Zero King](mailto:l2dy@icloud.com) +[ad](mailto:github.mnms@mamber.net), +[Alex Borisov](mailto:alex@alexborisov.org), +[Alex Seeholzer](mailto:seeholzer@gmail.com), +[amd](mailto:amd@gurge.com), +[Andrew Schleifer](mailto:me@andrewschleifer.name), +[AntoineCa](mailto:antoine@carrincazeaux.fr), +[Benjamin Steinwender](mailto:b@stbe.at), +[binarious](mailto:bieder.martin@googlemail.com), +[Can Rau](mailto:cansrau@gmail.com), +[Carlos Filipe Simões](mailto:ravemir@users.noreply.github.com), +[Chester Liu](mailto:skyline75489@outlook.com), +[Chhom Seng](mailto:chhom.seng@gmail.com), +[Christoph Leimbrock](mailto:christoph.leimbrock@gmx.de), +[Cory Hutchison](mailto:cjhutchi@users.noreply.github.com), +[Daniele Polencic](mailto:daniele.polencic@gmail.com), +[darnel](mailto:vojta.j@gmail.com), +[Deiwin Sarjas](mailto:deiwin.sarjas@gmail.com), +[Dennis Bolio](mailto:git@bolio.nl), +[Dylan Smith](mailto:dylansmith@gmail.com), +[eiermaaaan](mailto:37532252+eiermaaaan@users.noreply.github.com), +[Erwann Mest](mailto:m+github@kud.io), +[Filipe Farinha](mailto:filipe@ktorn.com), +[floriangouy](mailto:florian.gouy@gmail.com), +[Francesco Servida](mailto:info@francescoservida.ch), +[Frank Enderle](mailto:frank.enderle@anamica.de), +[Frank Kooij](https://github.com/FrankKooij), +[Gaétan Ryckeboer](mailto:gryckeboer@jouve.com), +[Geigi](mailto:git@geigi.de), +[Henri de Jong](mailto:henridejong@gmail.com), +[James Hurst](mailto:jamesrhurst@outlook.com), +[Jannick Hemelhof](mailto:mister.jannick@gmail.com), +[Jefftree](mailto:jeffrey.ying86@live.com), +[Jellyfrog](mailto:Jellyfrog@users.noreply.github.com), +[Joanna Olsen](mailto:jo4flash@gmail.com), +[Josh Halstead](mailto:jhalstead85@gmail.com), +[Kurt](mailto:kurt@soapbox-software.com), +[Laurent Cozic](mailto:laurent22@users.noreply.github.com), +[Lenucksi](mailto:lenucksi@users.noreply.github.com), +[Leonardo Faoro](mailto:lfaoro@users.noreply.github.com), +[Liam Anderson](mailto:liam.anderson.91@gmail.com), +[m0yP](mailto:moises@perez.lt), +[Maarten Terpstra](mailto:m.l.terpstra@student.rug.nl), +[Mario Sangiorgio](mailto:mariosangiorgio@gmail.com), +[MBibal](mailto:michel.bibal@gmail.com), +[Michael Belz](mailto:mbelz@outlook.de), +[MichaelKo](mailto:viacheslav.sychov@gmail.com), +[Michal Jaglewicz](mailto:michalj@webii.pl), +[Moises Perez](mailto:moises@perez.lt), +[mrdoggy](mailto:mrdoggy.all@gmail.com), +[Nathan Landis](mailto:nathanlandis@gmail.com), +[Nathaniel Madura](mailto:nmadura@umich.edu), +[neuroine](mailto:d.dzieduch@gmail.com), +[Patrik Thunström](mailto:magebarf@gmail.com), +[rdoering](mailto:rdoering.info@gmail.com), +[remi6397](mailto:remi6397@gmail.com), +[Roman Verchikov](mailto:roman-verchikov@users.noreply.github.com), +[Ryan Rogers](mailto:ryan@timewasted.me), +[Sitsofe Wheeler](mailto:sitsofe@yahoo.com), +[Stephen Taylor](mailto:schtee.taylor@gmail.com), +[thesoundofom](mailto:45923716+thesoundofom@users.noreply.github.com), +[Thom](mailto:thomscode@gmail.com), +[Thorsten Jacoby](mailto:tjacoby@gmail.com), +[Volcyy](mailto:Volcyy@users.noreply.github.com), +[Yonatan Mittlefehldt](mailto:yono@toojuice.com), +[Zero King](mailto:l2dy@icloud.com), [Zhao Peng](mailto:patchao2000@gmail.com) ## Copyright From 878cef88c53b7775bdb84f179e1a1bbe0a171def Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Mon, 1 Apr 2019 12:47:29 +0200 Subject: [PATCH 028/129] Reenabled tababale key selection also fixing first responder issue when closing password generator popover (fixes #896) --- MacPass/Base.lproj/PasswordInputView.xib | 8 ++++---- MacPass/MPPathControl.m | 9 ++++++--- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/MacPass/Base.lproj/PasswordInputView.xib b/MacPass/Base.lproj/PasswordInputView.xib index db8d5c393..52a50e460 100644 --- a/MacPass/Base.lproj/PasswordInputView.xib +++ b/MacPass/Base.lproj/PasswordInputView.xib @@ -25,7 +25,7 @@ + + + + + + + + + + + + - - - - - - - + @@ -100,21 +113,21 @@ - + - - + + - + - - - - + @@ -99,7 +89,7 @@ - + @@ -113,7 +103,7 @@ - + @@ -121,7 +111,7 @@ - + @@ -142,24 +132,49 @@ + + + + + + + + + + + + + + + + + + - + + - + From 7c2cf6eadbf6ceaf7e0a47798a9e7e35e3bf44d2 Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Fri, 5 Apr 2019 08:53:51 +0200 Subject: [PATCH 031/129] Re-worked hide after copy to pasteboard. It now works for all copy actions that securely copy to the clipboard (closed #906) --- MacPass/Base.lproj/GeneralSettings.xib | 46 +++++++++++-------------- MacPass/Base.lproj/WorkflowSettings.xib | 5 +-- MacPass/MPEntryViewController.m | 3 +- MacPass/MPPasteBoardController.h | 12 +++++++ MacPass/MPPasteBoardController.m | 9 ++++- MacPass/MPSettingsHelper.h | 1 + MacPass/MPSettingsHelper.m | 4 ++- MacPass/MPWorkflowSettingsController.h | 9 ++--- MacPass/MPWorkflowSettingsController.m | 1 + 9 files changed, 56 insertions(+), 34 deletions(-) diff --git a/MacPass/Base.lproj/GeneralSettings.xib b/MacPass/Base.lproj/GeneralSettings.xib index 438d5fb68..a53cc4b89 100644 --- a/MacPass/Base.lproj/GeneralSettings.xib +++ b/MacPass/Base.lproj/GeneralSettings.xib @@ -1,8 +1,8 @@ - + - + @@ -23,13 +23,13 @@ - + - + - + @@ -44,10 +44,7 @@ - - - - + @@ -75,7 +72,7 @@ - + @@ -114,7 +111,7 @@ - + Enabling this compromises security. If enabled, your preferences will contain mappings from database to keyfile. Key locations for databases without a password will not be saved. @@ -123,7 +120,7 @@ - + Disabling this compromises security. If enabled, anything copied to the Clipboard in MacPass will be available on your connected iOS devices. You should clear the clipboard on those devices manually. @@ -166,9 +163,9 @@ - + - + @@ -178,8 +175,8 @@ - - + + @@ -195,15 +192,14 @@ - - + - + - - + + @@ -237,7 +233,7 @@ - + @@ -247,7 +243,7 @@ - + @@ -273,7 +269,7 @@ - + diff --git a/MacPass/Base.lproj/WorkflowSettings.xib b/MacPass/Base.lproj/WorkflowSettings.xib index a8c7bf7bb..ffa0a7d70 100644 --- a/MacPass/Base.lproj/WorkflowSettings.xib +++ b/MacPass/Base.lproj/WorkflowSettings.xib @@ -11,6 +11,7 @@ + @@ -139,8 +140,8 @@ - + If enabled, Plugins without proper signatures will be allowed to load. Keep in mind, that Plugins have full access to your data! Changes take affect on restart. @@ -74,13 +74,13 @@ - + - + - + @@ -167,7 +167,7 @@ + + + + + + + + + - + + + + + + + @@ -208,7 +229,7 @@ - + From 28817b6c802719cd2e547e395c6719ef89802e87 Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Wed, 26 Jun 2019 13:05:40 +0200 Subject: [PATCH 056/129] wired plugin repository download settings and fixed crash when initializing plugin host --- MacPass/Base.lproj/PluginPreferences.xib | 3 ++- MacPass/MPPluginPreferencesController.m | 5 +++++ MacPass/MPPluginRepository.m | 20 +++++++++++++------- MacPass/de.lproj/Localizable.strings | 12 ++++++++++++ MacPass/en.lproj/Localizable.strings | 12 ++++++++++++ 5 files changed, 44 insertions(+), 8 deletions(-) diff --git a/MacPass/Base.lproj/PluginPreferences.xib b/MacPass/Base.lproj/PluginPreferences.xib index b79f7c314..1b2c6e0e2 100644 --- a/MacPass/Base.lproj/PluginPreferences.xib +++ b/MacPass/Base.lproj/PluginPreferences.xib @@ -9,6 +9,7 @@ + @@ -229,7 +230,7 @@ - + diff --git a/MacPass/MPPluginPreferencesController.m b/MacPass/MPPluginPreferencesController.m index 02c71f9ec..eb07bebce 100644 --- a/MacPass/MPPluginPreferencesController.m +++ b/MacPass/MPPluginPreferencesController.m @@ -42,6 +42,7 @@ typedef NS_ENUM(NSUInteger, MPPluginSegmentType) { @interface MPPluginPreferencesController () +@property (strong) IBOutlet NSButton *allowRemoteConnectionCheckButton; @property (strong) IBOutlet NSTableView *pluginTableView; @property (strong) IBOutlet NSView *settingsView; @property (strong) IBOutlet NSView *fallbackSettingsView; @@ -83,6 +84,10 @@ - (void)viewDidLoad { toObject:NSUserDefaultsController.sharedUserDefaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyLoadIncompatiblePlugins] options:nil]; + [self.allowRemoteConnectionCheckButton bind:NSValueBinding + toObject:NSUserDefaultsController.sharedUserDefaultsController + withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyAllowRemoteFetchOfPluginRepository] + options:nil]; [self.pluginTableView registerForDraggedTypes:@[(NSString *)kUTTypeFileURL]]; } diff --git a/MacPass/MPPluginRepository.m b/MacPass/MPPluginRepository.m index e272837f3..ff40ad206 100644 --- a/MacPass/MPPluginRepository.m +++ b/MacPass/MPPluginRepository.m @@ -57,7 +57,7 @@ - (instancetype)init { if(self) { _isInitialized = NO; _lastDataFetchTime = NSDate.distantPast.timeIntervalSinceReferenceDate; - [self _fetchRepositoryDataCompletionHandler:^(NSArray * _Nonnull availablePlugins) { + [self _fetchAppropriateRepositoryDataCompletionHandler:^(NSArray * _Nonnull availablePlugins) { self.availablePlugins = availablePlugins; self.isInitialized = YES; }]; @@ -69,7 +69,7 @@ - (instancetype)init { /* update cache on every read if it's older than 5 minutes */ if((NSDate.timeIntervalSinceReferenceDate - self.lastDataFetchTime) > 60*5 ) { NSLog(@"%@: updating available plugins cache.", self.className); - [self _fetchRepositoryDataCompletionHandler:^(NSArray * _Nonnull availablePlugins) { + [self _fetchAppropriateRepositoryDataCompletionHandler:^(NSArray * _Nonnull availablePlugins) { self.availablePlugins = availablePlugins; }]; } @@ -88,12 +88,18 @@ - (void)setAvailablePlugins:(NSArray *)availablePlugin } } +- (void)_fetchAppropriateRepositoryDataCompletionHandler:(void (^)(NSArray * _Nonnull))completionHandler { + /* dispatch the call to allow for direct return and handle resutl later on */ + dispatch_async(dispatch_get_main_queue(), ^{ + BOOL allowRemoteConnection = [self _askForPluginRepositoryPermission]; + if(!allowRemoteConnection) { + [self _fetchLocalFallbackRepositoryData:completionHandler]; + } + [self _fetchRepositoryDataCompletionHandler:completionHandler]; + }); +} + - (void)_fetchRepositoryDataCompletionHandler:(void (^)(NSArray * _Nonnull))completionHandler { - BOOL allowRemoteConnection = [self _askForPluginRepositoryPermission]; - if(!allowRemoteConnection) { - [self _fetchLocalFallbackRepositoryData:completionHandler]; - return; - } NSString *urlString = NSBundle.mainBundle.infoDictionary[MPBundlePluginRepositoryURLKey]; if(!urlString) { [self _fetchLocalFallbackRepositoryData:completionHandler]; diff --git a/MacPass/de.lproj/Localizable.strings b/MacPass/de.lproj/Localizable.strings index 9aaf7d11a..8894679c6 100644 --- a/MacPass/de.lproj/Localizable.strings +++ b/MacPass/de.lproj/Localizable.strings @@ -37,6 +37,18 @@ /* Action to add an entry via template */ "ADD_TREMPLATE_ENTRY" = "Vorgabeeintrag erstellen"; +/* Allow the download of the plugin repository file */ +"ALERT_ASK_FOR_PLUGIN_REPOSITORY_ALLOW_DOWNLOAD" = "Keine Daten herunterladen."; + +/* Informative text displayed on the alert that shows up when MacPass asks for permssion to download the plugin repository JSON file */ +"ALERT_ASK_FOR_PLUGIN_REPOSITORY_CONNECTION_PERMISSION_INFORMATIVE_TEXT" = "Das Verzeichnis ist auf https://macpassapp.org hinterlegt. MacPass verbindet lädt die Defintionen herunter um sicher zu stellen, dass alle Daten auf dem neusten Stand sind."; + +/* Message displayed on the alert that askf for permission to download the plugin repository JSON file */ +"ALERT_ASK_FOR_PLUGIN_REPOSITORY_CONNECTION_PERMISSION_MESSAGE" = "MacPass möchte das Pluginverzeichnis aktualisieren."; + +/* Disallow the download of the plugin repository file */ +"ALERT_ASK_FOR_PLUGIN_REPOSITORY_DISALLOW_DOWNLOAD" = "Aktualisiere Daten online."; + /* Button in dialog to leave autotype disabled and continiue! */ "ALERT_AUTOTYPE_MISSING_ACCESSIBILTY_PERMISSIONS_BUTTON_OK" = "Autotype deaktiviert lassen."; diff --git a/MacPass/en.lproj/Localizable.strings b/MacPass/en.lproj/Localizable.strings index 403fa1bfc..4e211e671 100644 --- a/MacPass/en.lproj/Localizable.strings +++ b/MacPass/en.lproj/Localizable.strings @@ -37,6 +37,18 @@ /* Action to add an entry via template */ "ADD_TREMPLATE_ENTRY" = "Create Template Entry"; +/* Allow the download of the plugin repository file */ +"ALERT_ASK_FOR_PLUGIN_REPOSITORY_ALLOW_DOWNLOAD" = "Do not update defintions"; + +/* Informative text displayed on the alert that shows up when MacPass asks for permssion to download the plugin repository JSON file */ +"ALERT_ASK_FOR_PLUGIN_REPOSITORY_CONNECTION_PERMISSION_INFORMATIVE_TEXT" = "The plugin defintions are hosted online at https://macpassapp.org. MacPass would like to download those files to ensure the data is up to date."; + +/* Message displayed on the alert that askf for permission to download the plugin repository JSON file */ +"ALERT_ASK_FOR_PLUGIN_REPOSITORY_CONNECTION_PERMISSION_MESSAGE" = "MacPass would like to check for updates of plugin defintions online"; + +/* Disallow the download of the plugin repository file */ +"ALERT_ASK_FOR_PLUGIN_REPOSITORY_DISALLOW_DOWNLOAD" = "Update definitions online"; + /* Button in dialog to leave autotype disabled and continiue! */ "ALERT_AUTOTYPE_MISSING_ACCESSIBILTY_PERMISSIONS_BUTTON_OK" = "Keep Autotype disabled."; From c7d85d6daa1c49c909843a78d698f4283efc391f Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Mon, 1 Jul 2019 13:27:18 +0200 Subject: [PATCH 057/129] Added log message when no window title can be determined --- MacPass/MPAutotypeDaemon.m | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/MacPass/MPAutotypeDaemon.m b/MacPass/MPAutotypeDaemon.m index 8f84b0178..1305c4771 100644 --- a/MacPass/MPAutotypeDaemon.m +++ b/MacPass/MPAutotypeDaemon.m @@ -393,6 +393,10 @@ - (NSDictionary *)_infoDictionaryForApplication:(NSRunningApplication *)applicat } } } + if(currentWindows.count > 0 && infoDict.count == 0) { + // show some information about not being able to determine any windows + NSLog(@"Unable to retrieve any window names. If you encounter this issue you might be running 10.15 and MacPass has no permission for screen recording."); + } return infoDict; } From 0c122364014039cd62574653831a1fd061c755b7 Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Mon, 1 Jul 2019 14:40:10 +0200 Subject: [PATCH 058/129] Use naive polling to check if requested application is already active --- MacPass/MPAutotypeDaemon.m | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/MacPass/MPAutotypeDaemon.m b/MacPass/MPAutotypeDaemon.m index 8f84b0178..4c2772287 100644 --- a/MacPass/MPAutotypeDaemon.m +++ b/MacPass/MPAutotypeDaemon.m @@ -319,11 +319,7 @@ - (void)_performAutotypeForContext:(MPAutotypeContext *)context { return; // No context to work with } - if([self _orderApplicationToFront:self.targetPID]) { - /* Sleep a bit after the app was activated */ - /* TODO - we might be able to get a notification to check if the app actually was activated instead of guessing a waiting time */ - usleep(1 * NSEC_PER_MSEC); - } + [self _orderApplicationToFront:self.targetPID]; useconds_t globalDelay = 0; for(MPAutotypeCommand *command in [MPAutotypeCommand commandsForContext:context]) { @@ -442,15 +438,21 @@ - (void)_didDeactivateApplication:(NSNotification *)notification { #pragma mark - #pragma mark Application information -- (BOOL)_orderApplicationToFront:(pid_t)processIdentifier { - NSRunningApplication *runingApplication = [NSRunningApplication runningApplicationWithProcessIdentifier:processIdentifier]; - NSRunningApplication *frontApplication = NSWorkspace.sharedWorkspace.frontmostApplication; - if(frontApplication.processIdentifier == processIdentifier) { - return NO; +- (void)_orderApplicationToFront:(pid_t)processIdentifier { + NSUInteger maxiumumWaitTime = 10; //ms + NSUInteger waitTime = 0; + while(waitTime < maxiumumWaitTime) { + NSRunningApplication *runingApplication = [NSRunningApplication runningApplicationWithProcessIdentifier:processIdentifier]; + NSRunningApplication *frontApplication = NSWorkspace.sharedWorkspace.frontmostApplication; + if(frontApplication.processIdentifier == processIdentifier) { + return; + } + [runingApplication activateWithOptions:NSApplicationActivateIgnoringOtherApps]; + usleep(1 * NSEC_PER_MSEC); + waitTime += 1; } - [runingApplication activateWithOptions:NSApplicationActivateIgnoringOtherApps]; - return YES; } + - (void)_updateTargetInformationForFrontMostApplication { [self _updateTargeInformationForApplication:NSWorkspace.sharedWorkspace.frontmostApplication]; } From ddb0f92dcee9eb1f56b1fc83f64457a80455891c Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Mon, 1 Jul 2019 16:53:05 +0200 Subject: [PATCH 059/129] Using a notification based aproach to ensure the desired target application is activated before performing any autotype commands --- MacPass/MPAutotypeDaemon.m | 44 +++++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/MacPass/MPAutotypeDaemon.m b/MacPass/MPAutotypeDaemon.m index 4c2772287..b7fafb47a 100644 --- a/MacPass/MPAutotypeDaemon.m +++ b/MacPass/MPAutotypeDaemon.m @@ -56,7 +56,7 @@ @interface MPAutotypeDaemon () @property (copy) NSString *targetWindowTitle; // The title of the window that we are targeting @property (strong) NSRunningApplication *previousApplication; // The application that was active before we got invoked @property (assign) NSTimeInterval userActionRequested; - +@property (strong) id applicationActivationObserver; @end @implementation MPAutotypeDaemon @@ -108,6 +108,9 @@ - (instancetype)_init { - (void)dealloc { [NSNotificationCenter.defaultCenter removeObserver:self]; [NSWorkspace.sharedWorkspace.notificationCenter removeObserver:self]; + if(self.applicationActivationObserver) { + [NSWorkspace.sharedWorkspace.notificationCenter removeObserver:self.applicationActivationObserver name:NSWorkspaceDidActivateApplicationNotification object:nil]; + } [self unbind:NSStringFromSelector(@selector(enabled))]; [self unbind:NSStringFromSelector(@selector(hotKeyData))]; } @@ -214,7 +217,7 @@ - (void)cancelAutotypeCandidateSelection { [self.matchSelectionWindow orderOut:self]; self.matchSelectionWindow = nil; if(self.targetPID) { - [self _orderApplicationToFront:self.targetPID]; + [self _orderApplicationToFront:self.targetPID forContext:nil]; } } @@ -319,7 +322,9 @@ - (void)_performAutotypeForContext:(MPAutotypeContext *)context { return; // No context to work with } - [self _orderApplicationToFront:self.targetPID]; + if(NO == [self _orderApplicationToFront:self.targetPID forContext:(MPAutotypeContext *)context]) { + return; // We will get called back when the application is in front - hopfully + } useconds_t globalDelay = 0; for(MPAutotypeCommand *command in [MPAutotypeCommand commandsForContext:context]) { @@ -438,19 +443,28 @@ - (void)_didDeactivateApplication:(NSNotification *)notification { #pragma mark - #pragma mark Application information -- (void)_orderApplicationToFront:(pid_t)processIdentifier { - NSUInteger maxiumumWaitTime = 10; //ms - NSUInteger waitTime = 0; - while(waitTime < maxiumumWaitTime) { - NSRunningApplication *runingApplication = [NSRunningApplication runningApplicationWithProcessIdentifier:processIdentifier]; - NSRunningApplication *frontApplication = NSWorkspace.sharedWorkspace.frontmostApplication; - if(frontApplication.processIdentifier == processIdentifier) { - return; - } - [runingApplication activateWithOptions:NSApplicationActivateIgnoringOtherApps]; - usleep(1 * NSEC_PER_MSEC); - waitTime += 1; +- (BOOL)_orderApplicationToFront:(pid_t)processIdentifier forContext:(MPAutotypeContext *)context { + NSRunningApplication *runingApplication = [NSRunningApplication runningApplicationWithProcessIdentifier:processIdentifier]; + NSRunningApplication *frontApplication = NSWorkspace.sharedWorkspace.frontmostApplication; + if(frontApplication.processIdentifier == processIdentifier) { + return YES; } + + /* cleanup before to make sure everything is top notch */ + if(self.applicationActivationObserver) { + [NSWorkspace.sharedWorkspace.notificationCenter removeObserver:self.applicationActivationObserver name:NSWorkspaceDidActivateApplicationNotification object:nil]; + self.applicationActivationObserver = nil; + } + + self.applicationActivationObserver = [NSWorkspace.sharedWorkspace.notificationCenter addObserverForName:NSWorkspaceDidActivateApplicationNotification object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) { + if(self.applicationActivationObserver) { + [NSWorkspace.sharedWorkspace.notificationCenter removeObserver:self.applicationActivationObserver name:NSWorkspaceDidActivateApplicationNotification object:nil]; + } + [self _performAutotypeForContext:context]; + }]; + + [runingApplication activateWithOptions:NSApplicationActivateIgnoringOtherApps]; + return NO; } - (void)_updateTargetInformationForFrontMostApplication { From 3cab0ea4dd52b14a48966eec0aada7fbe62df73a Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Wed, 3 Jul 2019 11:02:10 +0200 Subject: [PATCH 060/129] Fixed versioning script to correctly work with more complex branches --- MacPass.xcodeproj/project.pbxproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacPass.xcodeproj/project.pbxproj b/MacPass.xcodeproj/project.pbxproj index 8ff06f6e9..d34258e62 100644 --- a/MacPass.xcodeproj/project.pbxproj +++ b/MacPass.xcodeproj/project.pbxproj @@ -1963,7 +1963,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "git=`sh /etc/profile; which git`\nbranch_name=`$git symbolic-ref HEAD | sed -e 's,.*/\\\\(.*\\\\),\\\\1,'`\ngit_count=`$git rev-list $branch_name |wc -l | sed 's/^ *//;s/ *$//'`\nsimple_branch_name=`$git rev-parse --abbrev-ref HEAD`\n\nbuild_number=\"${git_count}0\"\nif [ $CONFIGURATION != \"Release\" ]; then\nbuild_number+=\"-$simple_branch_name\"\nfi\nif [ \"$CI\" = \"true\" ]; then\nbuild_date=`date +\"%Y%m%d%H%m%S\"`\nbuild_number=\"$build_date-continuous\"\nfi\n\nplist=\"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}\"\ndsym_plist=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $build_number\" \"$plist\"\nif [ -f \"$DSYM_INFO_PLIST\" ] ; then\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $build_number\" \"$dsym_plist\"\nfi\n"; + shellScript = "git=`sh /etc/profile; which git`\n#branch_name=`$git symbolic-ref HEAD | sed -e 's,refs/heads/\\\\(.*\\\\),\\\\1,'`\nbranch_name=`$git rev-parse --abbrev-ref HEAD`\n#simple_branch_name=`$git rev-parse --abbrev-ref HEAD`\ngit_count=`$git rev-list $branch_name |wc -l | sed 's/^ *//;s/ *$//'`\n\nbuild_number=\"${git_count}0\"\nif [ $CONFIGURATION != \"Release\" ]; then\nbuild_number+=\"-$branch_name\"\nfi\nif [ \"$CI\" = \"true\" ]; then\nbuild_date=`date +\"%Y%m%d%H%m%S\"`\nbuild_number=\"$build_date-continuous\"\nfi\n\nplist=\"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}\"\ndsym_plist=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $build_number\" \"$plist\"\nif [ -f \"$DSYM_INFO_PLIST\" ] ; then\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $build_number\" \"$dsym_plist\"\nfi\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ From 077a5851cfb05dc1585d7f87fc07ab935b4bf767 Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Wed, 3 Jul 2019 11:14:42 +0200 Subject: [PATCH 061/129] append branch name if we're not on master --- MacPass.xcodeproj/project.pbxproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacPass.xcodeproj/project.pbxproj b/MacPass.xcodeproj/project.pbxproj index d34258e62..37da5583e 100644 --- a/MacPass.xcodeproj/project.pbxproj +++ b/MacPass.xcodeproj/project.pbxproj @@ -1963,7 +1963,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "git=`sh /etc/profile; which git`\n#branch_name=`$git symbolic-ref HEAD | sed -e 's,refs/heads/\\\\(.*\\\\),\\\\1,'`\nbranch_name=`$git rev-parse --abbrev-ref HEAD`\n#simple_branch_name=`$git rev-parse --abbrev-ref HEAD`\ngit_count=`$git rev-list $branch_name |wc -l | sed 's/^ *//;s/ *$//'`\n\nbuild_number=\"${git_count}0\"\nif [ $CONFIGURATION != \"Release\" ]; then\nbuild_number+=\"-$branch_name\"\nfi\nif [ \"$CI\" = \"true\" ]; then\nbuild_date=`date +\"%Y%m%d%H%m%S\"`\nbuild_number=\"$build_date-continuous\"\nfi\n\nplist=\"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}\"\ndsym_plist=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $build_number\" \"$plist\"\nif [ -f \"$DSYM_INFO_PLIST\" ] ; then\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $build_number\" \"$dsym_plist\"\nfi\n"; + shellScript = "git=`sh /etc/profile; which git`\n#branch_name=`$git symbolic-ref HEAD | sed -e 's,refs/heads/\\\\(.*\\\\),\\\\1,'`\nbranch_name=`$git rev-parse --abbrev-ref HEAD`\n#simple_branch_name=`$git rev-parse --abbrev-ref HEAD`\ngit_count=`$git rev-list $branch_name |wc -l | sed 's/^ *//;s/ *$//'`\n\nbuild_number=\"${git_count}0\"\nif [ $CONFIGURATION != \"Release\" ] || [ $branch_name != \"master\" ]; then\nbuild_number+=\"-$branch_name\"\nfi\nif [ \"$CI\" = \"true\" ]; then\nbuild_date=`date +\"%Y%m%d%H%m%S\"`\nbuild_number=\"$build_date-continuous\"\nfi\n\nplist=\"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}\"\ndsym_plist=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $build_number\" \"$plist\"\nif [ -f \"$DSYM_INFO_PLIST\" ] ; then\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $build_number\" \"$dsym_plist\"\nfi\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ From 38e61b96a5225569721a49c93767ef164b40cb57 Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Wed, 3 Jul 2019 12:05:43 +0200 Subject: [PATCH 062/129] Added missing palettlabel to toolbar items to show up in customizing sheet --- MacPass/MPToolbarDelegate.m | 1 + 1 file changed, 1 insertion(+) diff --git a/MacPass/MPToolbarDelegate.m b/MacPass/MPToolbarDelegate.m index f03444c78..54858ec7b 100644 --- a/MacPass/MPToolbarDelegate.m +++ b/MacPass/MPToolbarDelegate.m @@ -111,6 +111,7 @@ - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString item = [[MPToolbarItem alloc] initWithItemIdentifier:itemIdentifier]; NSString *itemLabel = [self _localizedLabelForToolbarItemIdentifier:itemIdentifier]; item.label = itemLabel; + item.paletteLabel = itemLabel; if([itemIdentifier isEqualToString:MPToolbarItemAction]) { NSPopUpButton *popupButton = [[NSPopUpButton alloc] initWithFrame:NSMakeRect(0, 0, 50, 32) pullsDown:YES]; From 176a3b7db49c104894050e0ccc0fe4548f95fff4 Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Wed, 3 Jul 2019 12:47:28 +0200 Subject: [PATCH 063/129] use property instead of setter --- MacPass/MPToolbarButton.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacPass/MPToolbarButton.m b/MacPass/MPToolbarButton.m index 32b53a6b9..ae9d55140 100644 --- a/MacPass/MPToolbarButton.m +++ b/MacPass/MPToolbarButton.m @@ -30,7 +30,7 @@ - (id)initWithFrame:(NSRect)frameRect { if(self) { self.focusRingType = NSFocusRingTypeNone; self.bezelStyle = NSTexturedRoundedBezelStyle; - [self.cell setImageScaling:NSImageScaleProportionallyDown]; + ((NSButtonCell *)(self.cell)).imageScaling = NSImageScaleProportionallyDown; [self setButtonType:NSMomentaryPushInButton]; self.imagePosition = NSImageOnly; } From b1cb776e1490abe63499c0c1fc0a2f5e2a52b6e3 Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Wed, 3 Jul 2019 17:28:58 +0200 Subject: [PATCH 064/129] Moved accessibilty permission checks into MPAutotypeDoctor. Added screen capture permission test. --- MacPass.xcodeproj/project.pbxproj | 6 + MacPass/Base.lproj/IntegrationPreferences.xib | 17 ++- MacPass/MPAppDelegate.m | 4 - MacPass/MPAutotypeDaemon.h | 4 - MacPass/MPAutotypeDaemon.m | 63 ++-------- MacPass/MPAutotypeDoctor.h | 31 +++++ MacPass/MPAutotypeDoctor.m | 114 ++++++++++++++++++ MacPass/MPIntegrationPreferencesController.m | 7 +- MacPass/MPUserNotificationCenterDelegate.m | 4 +- 9 files changed, 173 insertions(+), 77 deletions(-) create mode 100644 MacPass/MPAutotypeDoctor.h create mode 100644 MacPass/MPAutotypeDoctor.m diff --git a/MacPass.xcodeproj/project.pbxproj b/MacPass.xcodeproj/project.pbxproj index 37da5583e..71a05d20d 100644 --- a/MacPass.xcodeproj/project.pbxproj +++ b/MacPass.xcodeproj/project.pbxproj @@ -35,6 +35,7 @@ 4C17F109184E6B6C00E85625 /* 30_TerminalTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4C17F107184E6B6C00E85625 /* 30_TerminalTemplate.pdf */; }; 4C1BDF2B1E4392640012A3F0 /* MPPluginDataViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1BDF291E4392640012A3F0 /* MPPluginDataViewController.m */; }; 4C1E9885185F71A800943563 /* MPContextBarViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1E9884185F71A800943563 /* MPContextBarViewController.m */; }; + 4C1ECAE322CCD30F00F46069 /* MPAutotypeDoctor.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1ECAE222CCD30F00F46069 /* MPAutotypeDoctor.m */; }; 4C1F7FA21E3A12E600D6A40E /* MPModifiedKey.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1F7FA11E3A12E600D6A40E /* MPModifiedKey.m */; }; 4C1FA07B18231900003A3F8C /* MPDocument+Autotype.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1FA07A18231900003A3F8C /* MPDocument+Autotype.m */; }; 4C224B4217DFCB2400FF6AEE /* MPNumericalInputFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C224B4117DFCB2400FF6AEE /* MPNumericalInputFormatter.m */; }; @@ -394,6 +395,8 @@ 4C1D56382271F4BC00C3E594 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/PluginRepositoryBrowserView.strings; sourceTree = ""; }; 4C1E9883185F71A800943563 /* MPContextBarViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPContextBarViewController.h; sourceTree = ""; }; 4C1E9884185F71A800943563 /* MPContextBarViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPContextBarViewController.m; sourceTree = ""; }; + 4C1ECAE122CCD30F00F46069 /* MPAutotypeDoctor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPAutotypeDoctor.h; sourceTree = ""; }; + 4C1ECAE222CCD30F00F46069 /* MPAutotypeDoctor.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPAutotypeDoctor.m; sourceTree = ""; }; 4C1F7FA01E3A12E600D6A40E /* MPModifiedKey.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPModifiedKey.h; sourceTree = ""; }; 4C1F7FA11E3A12E600D6A40E /* MPModifiedKey.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPModifiedKey.m; sourceTree = ""; }; 4C1FA07A18231900003A3F8C /* MPDocument+Autotype.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MPDocument+Autotype.m"; sourceTree = ""; }; @@ -1534,6 +1537,8 @@ 4C3499FF218852160055AF45 /* MPKeyTyper.m */, 4C1F7FA01E3A12E600D6A40E /* MPModifiedKey.h */, 4C1F7FA11E3A12E600D6A40E /* MPModifiedKey.m */, + 4C1ECAE122CCD30F00F46069 /* MPAutotypeDoctor.h */, + 4C1ECAE222CCD30F00F46069 /* MPAutotypeDoctor.m */, ); name = Autotype; sourceTree = ""; @@ -1990,6 +1995,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 4C1ECAE322CCD30F00F46069 /* MPAutotypeDoctor.m in Sources */, 4CD034AC1BFE113B003C002C /* MPPluginHost.m in Sources */, 4C77E37315B84A240093A587 /* main.m in Sources */, 4C0F04402147A6FA000B8568 /* MPCustomFieldTableView.m in Sources */, diff --git a/MacPass/Base.lproj/IntegrationPreferences.xib b/MacPass/Base.lproj/IntegrationPreferences.xib index da6c65aea..e3bfb5001 100644 --- a/MacPass/Base.lproj/IntegrationPreferences.xib +++ b/MacPass/Base.lproj/IntegrationPreferences.xib @@ -26,29 +26,28 @@ - + - + - + - + - - + + - Autotype is not available, because MacPass is not allowed to control your computer. To enable Autotype, go to the Security and Privacy Preferences and add MacPass to the Accessibilty group. Changes require a restart of MacPass. + + + + + + + + + MacPass will read every window title when Global Autotype is executed to find a match. Since macOS 10.15 Catalina it is not possible to read any window title, if the user has not granted permissions to record the screen. If you are running macOS 10.15 or higher, MacPass will try to capture the left top most pixel on your screen to initate a request to record the screen. This pixel will not be stored and processed in any way. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MacPass/Base.lproj/IntegrationPreferences.xib b/MacPass/Base.lproj/IntegrationPreferences.xib index e3bfb5001..07213981e 100644 --- a/MacPass/Base.lproj/IntegrationPreferences.xib +++ b/MacPass/Base.lproj/IntegrationPreferences.xib @@ -26,21 +26,22 @@ - + - + - + - + - - + + + Autotype might not work properly. Some issues where found that prevent Autotype or Global Autotype to work. Please run the Autotype Doctor to fix those issues. @@ -52,7 +53,7 @@ - + - + @@ -265,7 +265,7 @@ Gw - - + + @@ -45,8 +45,8 @@ - - + + @@ -62,10 +62,11 @@ + - + From 024131de350c9f98d9b8e233dd7c31caf387f9b1 Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Fri, 12 Jul 2019 17:01:22 +0200 Subject: [PATCH 082/129] Fixed typo in comment --- MacPass/MPPluginRepository.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacPass/MPPluginRepository.m b/MacPass/MPPluginRepository.m index ff40ad206..098e75296 100644 --- a/MacPass/MPPluginRepository.m +++ b/MacPass/MPPluginRepository.m @@ -89,7 +89,7 @@ - (void)setAvailablePlugins:(NSArray *)availablePlugin } - (void)_fetchAppropriateRepositoryDataCompletionHandler:(void (^)(NSArray * _Nonnull))completionHandler { - /* dispatch the call to allow for direct return and handle resutl later on */ + /* dispatch the call to allow for direct return and handle result later on */ dispatch_async(dispatch_get_main_queue(), ^{ BOOL allowRemoteConnection = [self _askForPluginRepositoryPermission]; if(!allowRemoteConnection) { From 53b807788a88da8187b27dad8bf243ea93800e8f Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Fri, 12 Jul 2019 17:07:30 +0200 Subject: [PATCH 083/129] Fixed issue where remove connection would be used despite the user not consenting to it. --- MacPass/MPPluginRepository.m | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/MacPass/MPPluginRepository.m b/MacPass/MPPluginRepository.m index 098e75296..923c3bc03 100644 --- a/MacPass/MPPluginRepository.m +++ b/MacPass/MPPluginRepository.m @@ -95,7 +95,9 @@ - (void)_fetchAppropriateRepositoryDataCompletionHandler:(void (^)(NSArray Date: Mon, 15 Jul 2019 12:22:07 +0200 Subject: [PATCH 084/129] Minor style fixes --- MacPass/MPPluginHost.m | 1 + MacPass/MPPluginRepository.m | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/MacPass/MPPluginHost.m b/MacPass/MPPluginHost.m index 761ff632e..e85366e73 100644 --- a/MacPass/MPPluginHost.m +++ b/MacPass/MPPluginHost.m @@ -464,6 +464,7 @@ @implementation MPPluginHost (MPImportPluginSupport) - (NSArray *)importPlugins { return [self _pluginsConformingToProtocoll:@protocol(MPImportPlugin)]; } + @end @implementation MPPluginHost (MPWindowTitleResolverSupport) diff --git a/MacPass/MPPluginRepository.m b/MacPass/MPPluginRepository.m index 923c3bc03..b737d2902 100644 --- a/MacPass/MPPluginRepository.m +++ b/MacPass/MPPluginRepository.m @@ -66,7 +66,9 @@ - (instancetype)init { } - (NSArray *)availablePlugins { - /* update cache on every read if it's older than 5 minutes */ + /* FIXME: Invalidate fetch when settings have changed! + update cache on every read if it's older than 5 minutes + */ if((NSDate.timeIntervalSinceReferenceDate - self.lastDataFetchTime) > 60*5 ) { NSLog(@"%@: updating available plugins cache.", self.className); [self _fetchAppropriateRepositoryDataCompletionHandler:^(NSArray * _Nonnull availablePlugins) { From 1baf2cd8e6c545136f1deda01a6e8ab4ec79a776 Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Mon, 15 Jul 2019 18:21:03 +0200 Subject: [PATCH 085/129] Display a generic description text if the appropriate key is present in the InfoDictionary of the plugin bundle --- MacPass/MPPlugin.h | 3 +++ MacPass/MPPlugin.m | 11 +++++++++++ MacPass/MPPluginPreferencesController.m | 21 ++++++++++++++------- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/MacPass/MPPlugin.h b/MacPass/MPPlugin.h index 47ef58f0d..6ed402d45 100644 --- a/MacPass/MPPlugin.h +++ b/MacPass/MPPlugin.h @@ -30,6 +30,7 @@ NS_ASSUME_NONNULL_BEGIN @class KPKTree; FOUNDATION_EXPORT NSString *const MPPluginUnkownVersion; +FOUNDATION_EXPORT NSString *const MPPluginDescriptionInfoDictionaryKey; @interface MPPlugin : NSObject @@ -37,8 +38,10 @@ FOUNDATION_EXPORT NSString *const MPPluginUnkownVersion; @property (copy, readonly) NSString *name; @property (nonatomic, copy, readonly, nullable) NSString *shortVersionString; @property (nonatomic, copy, readonly) NSString *versionString; +@property (nonatomic, copy, readonly) NSString *localizedDescription; @property (nonatomic, strong, readonly) NSBundle *bundle; + /** If your plugin needs initalization override this method but you have to call [super initWithPluginHost:] Otherwise your plugin might not get registered correctly diff --git a/MacPass/MPPlugin.m b/MacPass/MPPlugin.m index 1a84dbb33..5a69df185 100644 --- a/MacPass/MPPlugin.m +++ b/MacPass/MPPlugin.m @@ -28,6 +28,7 @@ #import "MPPluginVersionComparator.h" NSString *const MPPluginUnkownVersion = @"unkown.plugin.version"; +NSString *const MPPluginDescriptionInfoDictionaryKey = @"MPPluginDescription"; @implementation MPPlugin @@ -90,6 +91,16 @@ - (NSString *)versionString { return MPPluginUnkownVersion; } +- (NSString *)localizedDescription { + if([self.bundle.localizedInfoDictionary objectForKey:MPPluginDescriptionInfoDictionaryKey]) { + return self.bundle.localizedInfoDictionary[MPPluginDescriptionInfoDictionaryKey]; + } + if([self.bundle.infoDictionary objectForKey:MPPluginDescriptionInfoDictionaryKey]) { + return self.bundle.infoDictionary[MPPluginDescriptionInfoDictionaryKey]; + } + return @""; +} + - (void)didLoadPlugin { diff --git a/MacPass/MPPluginPreferencesController.m b/MacPass/MPPluginPreferencesController.m index eb07bebce..6aec8f57d 100644 --- a/MacPass/MPPluginPreferencesController.m +++ b/MacPass/MPPluginPreferencesController.m @@ -124,22 +124,29 @@ - (void)showSettingsForPlugin:(MPPlugin *)plugin { [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view]|" options:0 metrics:nil views:dict]]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|" options:0 metrics:nil views:dict]]; } + else { + [self _showInfoMessageForPlugin:plugin.localizedDescription]; + } } else if(nil != plugin) { - [self.settingsView addSubview:self.fallbackSettingsView]; - NSDictionary *dict = @{ @"view" : self.fallbackSettingsView, - @"table" : self.pluginTableView.enclosingScrollView }; - [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view]|" options:0 metrics:nil views:dict]]; - [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|" options:0 metrics:nil views:dict]]; if(plugin.errorMessage.length > 0) { - self.fallbackDescriptionTextField.stringValue = plugin.errorMessage; + [self _showInfoMessageForPlugin:plugin.errorMessage]; } else { - self.fallbackDescriptionTextField.stringValue = NSLocalizedString(@"PLUGIN_SETTINGS_GENERIC_ERROR_MESSAGE", "Generic message displayed if no details are know why a plugin was not loaded."); + [self _showInfoMessageForPlugin:NSLocalizedString(@"PLUGIN_SETTINGS_GENERIC_ERROR_MESSAGE", "Generic message displayed if no details are know why a plugin was not loaded.")]; } } } +- (void)_showInfoMessageForPlugin:(NSString *)message { + [self.settingsView addSubview:self.fallbackSettingsView]; + NSDictionary *dict = @{ @"view" : self.fallbackSettingsView, + @"table" : self.pluginTableView.enclosingScrollView }; + [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view]|" options:0 metrics:nil views:dict]]; + [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|" options:0 metrics:nil views:dict]]; + self.fallbackDescriptionTextField.stringValue = message.length > 0 ? message : @""; +} + - (MPPlugin *)pluginForRow:(NSInteger)row { NSArray *plugins = [MPPluginHost sharedHost].plugins; if(0 > row || row >= plugins.count) { From 0d3bf5ba7110e25bf7959705348bc6bdcdb68875 Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Thu, 18 Jul 2019 11:41:22 +0200 Subject: [PATCH 086/129] Fixed typo in localisation comment --- MacPass/MPAppDelegate.m | 2 +- MacPass/de.lproj/Localizable.strings | 2 +- MacPass/en.lproj/Localizable.strings | 2 +- MacPass/nl.lproj/Localizable.strings | 2 +- MacPass/ru.lproj/Localizable.strings | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/MacPass/MPAppDelegate.m b/MacPass/MPAppDelegate.m index f7a06b2a7..8d6c0c566 100644 --- a/MacPass/MPAppDelegate.m +++ b/MacPass/MPAppDelegate.m @@ -350,7 +350,7 @@ - (void)checkForUpdates:(id)sender { #if defined(DEBUG) || defined(NO_SPARKLE) NSAlert *alert = [[NSAlert alloc] init]; alert.messageText = NSLocalizedString(@"ALERT_UPDATES_DISABLED_MESSAGE_TEXT", @"Message text for disabled updates alert!"); - alert.informativeText = [NSString stringWithFormat:NSLocalizedString(@"ALERT_UPDATES_DISABLED_INFORMATIVE_TEXT_%@!", @"Infromative text of the disabled updates alert!"), NSApp.applicationName]; + alert.informativeText = [NSString stringWithFormat:NSLocalizedString(@"ALERT_UPDATES_DISABLED_INFORMATIVE_TEXT_%@!", @"Informative text of the disabled updates alert!"), NSApp.applicationName]; [alert addButtonWithTitle:NSLocalizedString(@"OK", @"Ok Button to dismiss disabled updates alert")]; [alert runModal]; #else diff --git a/MacPass/de.lproj/Localizable.strings b/MacPass/de.lproj/Localizable.strings index ba6a2cbc6..78a8bf464 100644 --- a/MacPass/de.lproj/Localizable.strings +++ b/MacPass/de.lproj/Localizable.strings @@ -97,7 +97,7 @@ /* Alert message text to ask the user if he really want to uninstall the plugin. Include %@ placeholder for plugin name */ "ALERT_MESSAGE_TEXT_REALLY_UNINSTALL_PLUGIN_%@" = "Möchten Sie das Plugin %@ wirklich deinstallieren?"; -/* Infromative text of the disabled updates alert! */ +/* Informative text of the disabled updates alert! */ "ALERT_UPDATES_DISABLED_INFORMATIVE_TEXT_%@!" = "Aktualisierungen von %@ sind für diese Version deaktivert!"; /* Message text for disabled updates alert! */ diff --git a/MacPass/en.lproj/Localizable.strings b/MacPass/en.lproj/Localizable.strings index 568a09248..65b38c1b6 100644 --- a/MacPass/en.lproj/Localizable.strings +++ b/MacPass/en.lproj/Localizable.strings @@ -97,7 +97,7 @@ /* Alert message text to ask the user if he really want to uninstall the plugin. Include %@ placeholder for plugin name */ "ALERT_MESSAGE_TEXT_REALLY_UNINSTALL_PLUGIN_%@" = "Should the Plugin %@ really be uninstalled?"; -/* Infromative text of the disabled updates alert! */ +/* Informative text of the disabled updates alert! */ "ALERT_UPDATES_DISABLED_INFORMATIVE_TEXT_%@!" = "Updates for this build of %@ are disabled!"; /* Message text for disabled updates alert! */ diff --git a/MacPass/nl.lproj/Localizable.strings b/MacPass/nl.lproj/Localizable.strings index d3bf10f73..0c49e7197 100644 --- a/MacPass/nl.lproj/Localizable.strings +++ b/MacPass/nl.lproj/Localizable.strings @@ -76,7 +76,7 @@ /* Alert message text to ask the user if he really want to uninstall the plugin. Include %@ placeholder for plugin name */ "ALERT_MESSAGE_TEXT_REALLY_UNINSTALL_PLUGIN_%@" = "Wil je de extensie %@ verwijderen?"; -/* Infromative text of the disabled updates alert! */ +/* Informative text of the disabled updates alert! */ "ALERT_UPDATES_DISABLED_INFORMATIVE_TEXT_%@!" = "Bijwerken is uitgeschakeld voor deze versie van %@"; /* Message text for disabled updates alert! */ diff --git a/MacPass/ru.lproj/Localizable.strings b/MacPass/ru.lproj/Localizable.strings index 39bc86d51..9e333f925 100644 --- a/MacPass/ru.lproj/Localizable.strings +++ b/MacPass/ru.lproj/Localizable.strings @@ -85,7 +85,7 @@ /* Alert message text to ask the user if he really want to uninstall the plugin. Include %@ placeholder for plugin name */ "ALERT_MESSAGE_TEXT_REALLY_UNINSTALL_PLUGIN_%@" = "Должен ли плагин %@ быть удален?"; -/* Infromative text of the disabled updates alert! */ +/* Informative text of the disabled updates alert! */ "ALERT_UPDATES_DISABLED_INFORMATIVE_TEXT_%@!" = "Обновления для текущей сборки %@ отключены!"; /* Message text for disabled updates alert! */ From 091a565bc8d0a1ba5dba971a69e7d78d19f2c29a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20Arratia?= Date: Fri, 19 Jul 2019 12:40:56 +0200 Subject: [PATCH 087/129] Translation to spanish improved (#953) * - Translation to Spanish of the new functionalities (adapt to new Localizable strings order) - Corrections of some typos in English translation * - Update all spanish translations, UI included --- MacPass.xcodeproj/project.pbxproj | 18 + MacPass/MPPluginRepository.m | 2 +- MacPass/en.lproj/Localizable.strings | 20 +- MacPass/es.lproj/AutotypeBuilderView.strings | 9 + .../AutotypeCandidateSelectionView.strings | 15 + MacPass/es.lproj/ContextBar.strings | 35 +- .../es.lproj/DatabaseSettingsWindow.strings | 67 +- MacPass/es.lproj/DatePickingView.strings | 2 +- .../DuplicateEntryOptionsWindow.strings | 14 +- MacPass/es.lproj/EntryInspectorView.strings | 64 +- MacPass/es.lproj/GeneralPreferences.strings | 34 +- MacPass/es.lproj/GroupInspectorView.strings | 8 +- MacPass/es.lproj/IconSelection.strings | 7 +- MacPass/es.lproj/InfoPlist.strings | 18 +- MacPass/es.lproj/InspectorView.strings | 77 +- .../es.lproj/IntegrationPreferences.strings | 41 +- MacPass/es.lproj/Localizable.strings | 906 +++++++++++++++--- MacPass/es.lproj/Localizable.stringsdict | 96 ++ MacPass/es.lproj/MainMenu.strings | 49 +- .../es.lproj/OpenPanelAccessoryView.strings | 6 + MacPass/es.lproj/PasswordCreatorView.strings | 13 +- MacPass/es.lproj/PasswordEditWindow.strings | 4 +- MacPass/es.lproj/PasswordInputView.strings | 14 +- MacPass/es.lproj/PickcharsView.strings | 18 + MacPass/es.lproj/PickfieldView.strings | 24 + MacPass/es.lproj/PluginDataView.strings | 15 + MacPass/es.lproj/PluginPreferences.strings | 26 +- .../PluginRepositoryBrowserView.strings | 42 + MacPass/es.lproj/ReferenceBuilderView.strings | 18 +- .../es.lproj/SavePanelAccessoryView.strings | 15 + MacPass/es.lproj/UpdatePreferences.strings | 8 +- MacPass/es.lproj/WelcomeView.strings | 20 +- MacPass/es.lproj/WorkflowPreferences.strings | 25 +- 33 files changed, 1371 insertions(+), 359 deletions(-) create mode 100644 MacPass/es.lproj/AutotypeBuilderView.strings create mode 100644 MacPass/es.lproj/AutotypeCandidateSelectionView.strings create mode 100644 MacPass/es.lproj/Localizable.stringsdict create mode 100644 MacPass/es.lproj/OpenPanelAccessoryView.strings create mode 100644 MacPass/es.lproj/PickcharsView.strings create mode 100644 MacPass/es.lproj/PickfieldView.strings create mode 100644 MacPass/es.lproj/PluginDataView.strings create mode 100644 MacPass/es.lproj/PluginRepositoryBrowserView.strings create mode 100644 MacPass/es.lproj/SavePanelAccessoryView.strings diff --git a/MacPass.xcodeproj/project.pbxproj b/MacPass.xcodeproj/project.pbxproj index e08b601c5..b937c9af2 100644 --- a/MacPass.xcodeproj/project.pbxproj +++ b/MacPass.xcodeproj/project.pbxproj @@ -974,6 +974,15 @@ 7837112D225540D1009BD28D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/PluginRepositoryBrowserView.xib; sourceTree = ""; }; 78371130225540D8009BD28D /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/PluginRepositoryBrowserView.strings; sourceTree = ""; }; 78371132225540DE009BD28D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/PluginRepositoryBrowserView.strings; sourceTree = ""; }; + A019D80F22DC6B3C0085FD54 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = es; path = es.lproj/Localizable.stringsdict; sourceTree = ""; }; + A083E27922DF467B0020E0D5 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/PickcharsView.strings; sourceTree = ""; }; + A083E27A22DF467B0020E0D5 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/PluginDataView.strings; sourceTree = ""; }; + A083E27B22DF467B0020E0D5 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/AutotypeCandidateSelectionView.strings; sourceTree = ""; }; + A083E27C22DF467B0020E0D5 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/OpenPanelAccessoryView.strings; sourceTree = ""; }; + A083E27D22DF467B0020E0D5 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/SavePanelAccessoryView.strings; sourceTree = ""; }; + A083E27E22DF467B0020E0D5 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/AutotypeBuilderView.strings; sourceTree = ""; }; + A083E27F22DF467B0020E0D5 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/PickfieldView.strings; sourceTree = ""; }; + A083E28022DF467B0020E0D5 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/PluginRepositoryBrowserView.strings; sourceTree = ""; }; A50AD5CF212884A0007C85EB /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/PluginDataView.strings; sourceTree = ""; }; A50AD5D0212884A0007C85EB /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/PickfieldView.strings; sourceTree = ""; }; BB3E050C1FE9D1CA00F0B46F /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/AutotypeCandidateSelectionView.strings; sourceTree = ""; }; @@ -2180,6 +2189,7 @@ 6A74B0752076F4B50049BC29 /* sv-SE */, 4C272A282224871900186EEC /* nl */, 4C1D56302271F4BC00C3E594 /* fr */, + A083E27922DF467B0020E0D5 /* es */, ); name = PickcharsView.xib; sourceTree = ""; @@ -2194,6 +2204,7 @@ A50AD5D0212884A0007C85EB /* pl */, 4C272A2B2224871900186EEC /* nl */, 4C1D56372271F4BC00C3E594 /* fr */, + A083E27F22DF467B0020E0D5 /* es */, ); name = PickfieldView.xib; sourceTree = ""; @@ -2224,6 +2235,7 @@ 4C0F04472147FB4E000B8568 /* de */, 4C272A2A2224871900186EEC /* nl */, 4C1D56332271F4BC00C3E594 /* fr */, + A083E27C22DF467B0020E0D5 /* es */, ); name = OpenPanelAccessoryView.xib; sourceTree = ""; @@ -2237,6 +2249,7 @@ 4C17D1262250EFC900C650C4 /* nl */, 7837112922553A74009BD28D /* ru */, 4C1D56342271F4BC00C3E594 /* fr */, + A083E27D22DF467B0020E0D5 /* es */, ); name = SavePanelAccessoryView.xib; sourceTree = ""; @@ -2469,6 +2482,7 @@ A50AD5CF212884A0007C85EB /* pl */, 4C272A292224871900186EEC /* nl */, 4C1D56312271F4BC00C3E594 /* fr */, + A083E27A22DF467B0020E0D5 /* es */, ); name = PluginDataView.xib; sourceTree = ""; @@ -2643,6 +2657,7 @@ 78371132225540DE009BD28D /* en */, 4C1D56382271F4BC00C3E594 /* fr */, 4C4B2ED122D8CA6100EB6BFD /* de */, + A083E28022DF467B0020E0D5 /* es */, ); name = PluginRepositoryBrowserView.xib; sourceTree = ""; @@ -2656,6 +2671,7 @@ BB3E050D1FE9D1CB00F0B46F /* nl */, 6A74B0792076F4B50049BC29 /* sv-SE */, 4C1D562F2271F4BC00C3E594 /* fr */, + A019D80F22DC6B3C0085FD54 /* es */, ); name = Localizable.stringsdict; sourceTree = ""; @@ -2670,6 +2686,7 @@ BB3E050C1FE9D1CA00F0B46F /* nl */, 6A74B0742076F4B50049BC29 /* sv-SE */, 4C1D56322271F4BC00C3E594 /* fr */, + A083E27B22DF467B0020E0D5 /* es */, ); name = AutotypeCandidateSelectionView.xib; sourceTree = ""; @@ -2685,6 +2702,7 @@ 6A74B0732076F4B50049BC29 /* sv-SE */, 7837112B22553B1D009BD28D /* ru */, 4C1D56352271F4BC00C3E594 /* fr */, + A083E27E22DF467B0020E0D5 /* es */, ); name = AutotypeBuilderView.xib; sourceTree = ""; diff --git a/MacPass/MPPluginRepository.m b/MacPass/MPPluginRepository.m index b737d2902..38e657a5a 100644 --- a/MacPass/MPPluginRepository.m +++ b/MacPass/MPPluginRepository.m @@ -173,7 +173,7 @@ - (BOOL)_askForPluginRepositoryPermission { NSAlert *alert = [[NSAlert alloc] init]; alert.alertStyle = NSAlertStyleWarning; alert.informativeText = NSLocalizedString(@"ALERT_ASK_FOR_PLUGIN_REPOSITORY_CONNECTION_PERMISSION_INFORMATIVE_TEXT", @"Informative text displayed on the alert that shows up when MacPass asks for permssion to download the plugin repository JSON file"); - alert.messageText = NSLocalizedString(@"ALERT_ASK_FOR_PLUGIN_REPOSITORY_CONNECTION_PERMISSION_MESSAGE", @"Message displayed on the alert that askf for permission to download the plugin repository JSON file"); + alert.messageText = NSLocalizedString(@"ALERT_ASK_FOR_PLUGIN_REPOSITORY_CONNECTION_PERMISSION_MESSAGE", @"Message displayed on the alert that asks for permission to download the plugin repository JSON file"); alert.showsSuppressionButton = YES; [alert addButtonWithTitle:NSLocalizedString(@"ALERT_ASK_FOR_PLUGIN_REPOSITORY_DISALLOW_DOWNLOAD", @"Disallow the download of the plugin repository file")]; [alert addButtonWithTitle:NSLocalizedString(@"ALERT_ASK_FOR_PLUGIN_REPOSITORY_ALLOW_DOWNLOAD", @"Allow the download of the plugin repository file")]; diff --git a/MacPass/en.lproj/Localizable.strings b/MacPass/en.lproj/Localizable.strings index 65b38c1b6..733281877 100644 --- a/MacPass/en.lproj/Localizable.strings +++ b/MacPass/en.lproj/Localizable.strings @@ -68,10 +68,10 @@ "ALERT_INCOMPATIBLE_PLUGINS_ENCOUNTERED_BUTTON_OPEN_PREFERENCES" = "Show Plugin Preferences…"; /* Informative text of the alert displayed when plugins where disabled due to incompatibilty */ -"ALERT_INCOMPATIBLE_PLUGINS_ENCOUNTERED_INFORMATIVE_TEXT" = "Some plugins where disabled, because they are not compatible with this version of MacPass. Open the plugin settings for details."; +"ALERT_INCOMPATIBLE_PLUGINS_ENCOUNTERED_INFORMATIVE_TEXT" = "Some plugins were disabled, because they are not compatible with this version of MacPass. Open the plugin settings for details."; /* Message text of the alert displayed when plugins where disabled due to incompatibilty */ -"ALERT_INCOMPATIBLE_PLUGINS_ENCOUNTERED_MESSAGE" = "Incompatible Plugins deteced."; +"ALERT_INCOMPATIBLE_PLUGINS_ENCOUNTERED_MESSAGE" = "Incompatible Plugins detected."; /* Alert informative text when plugins or their settings change and require a restart */ "ALERT_INFORMATIVE_TEXT_PLUGINS_CHANGED_SUGGEST_RESTART" = "Changes to plugins and global plugin settings take only effect after restart. Restart MacPass now?"; @@ -140,11 +140,11 @@ /* Notification: Autotype found a single match for %@ (string placeholder). */ "AUTOTYPE_OVERLAY_SINGLE_MATCH_FOR_%@" = "Found Match for %@!"; -/* Status lable when no issue were found in accessibilty */ -"AUTOTYPE_STATUS_ACCESSIBILTY_PERMISSIONS_OK" = "MacPass has permission to control your computer (Accessibilty)"; +/* Status label when no issue were found in accessibilty */ +"AUTOTYPE_STATUS_ACCESSIBILTY_PERMISSIONS_OK" = "MacPass has permission to control your computer (Accessibility)"; /* Status MacPass has no accessibilty permissions */ -"AUTOTYPE_STATUS_NO_ACCESSIBILTY_PERMISSIONS" = "MacPass has no permission to control your computer (Accessibilty)"; +"AUTOTYPE_STATUS_NO_ACCESSIBILTY_PERMISSIONS" = "MacPass has no permission to control your computer (Accessibility)"; /* Status MacPass has no screen recording permissions */ "AUTOTYPE_STATUS_NO_SCREEN_RECORDING_PERMISSIONS" = "MacPass has no permission to record your screen"; @@ -261,7 +261,7 @@ /* Context menu that copies reference to username */ "COPY_USERNAME_REFERENCE" = "Username"; -/* Curstom attribute reference item */ +/* Custom attribute reference item */ "CUSTOM_ATTRIBUTE" = "Custom Attribute"; /* Title for menu for custom search filters */ @@ -355,8 +355,8 @@ /* Error description given when adding an invalid plugin */ "ERROR_INVALID_PLUGIN" = "Invalid plugin"; -/* Error description for missing accessibilty permissions */ -"ERROR_NO_ACCESSIBILTY_PERMISSIONS" = "MacPass has no permission to control your computer (Accessibilty)"; +/* Error description for missing accessibility permissions */ +"ERROR_NO_ACCESSIBILTY_PERMISSIONS" = "MacPass has no permission to control your computer (Accessibility)"; /* Error description for missing screen recording permissions */ "ERROR_NO_PERMISSION_TO_RECORD_SCREEN" = "MacPass has no permission to record your screen"; @@ -608,7 +608,7 @@ /* Error for a plugin that was not signed properly */ "PLUGIN_ERROR_UNSECURE_PLUGIN" = "Plugin is not properly signed"; -/* Plugin specifies the wrong principla class! */ +/* Plugin specifies the wrong principal class! */ "PLUGIN_ERROR_WRONG_PRINCIPAL_CLASS" = "Unexpected principal class in plugin"; /* name for disabled unloaded plugin */ @@ -641,7 +641,7 @@ /* Restart */ "RESTART" = "Restart"; -/* Action to restore and Entry to a previous state of it's history */ +/* Action to restore an Entry to a previous state of its history */ "RESTORE_HISTORY_ENTRY" = "Restore History Entry"; /* Menu item to save the selected attached file. diff --git a/MacPass/es.lproj/AutotypeBuilderView.strings b/MacPass/es.lproj/AutotypeBuilderView.strings new file mode 100644 index 000000000..7cb5886b2 --- /dev/null +++ b/MacPass/es.lproj/AutotypeBuilderView.strings @@ -0,0 +1,9 @@ +/* Class = "NSTextFieldCell"; title = "Autotype Sequence"; ObjectID = "8ny-Qk-Jvo"; */ +"8ny-Qk-Jvo.title" = "Secuencia de Autotecleo"; + +/* Class = "NSButtonCell"; title = "Set Autotype Sequence"; ObjectID = "aOD-Ih-Sft"; */ +"aOD-Ih-Sft.title" = "Establecer secuencia de autotecleo"; + +/* Class = "NSTextFieldCell"; title = "Available Commands and Placeholders"; ObjectID = "lug-97-H9D"; */ +"lug-97-H9D.title" = "Comandos disponibles y referencias"; + diff --git a/MacPass/es.lproj/AutotypeCandidateSelectionView.strings b/MacPass/es.lproj/AutotypeCandidateSelectionView.strings new file mode 100644 index 000000000..0e073a76e --- /dev/null +++ b/MacPass/es.lproj/AutotypeCandidateSelectionView.strings @@ -0,0 +1,15 @@ +/* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "60p-7v-Nje"; */ +"60p-7v-Nje.title" = "Cancelar"; + +/* Class = "NSTextFieldCell"; title = "There are multiple matches for the current window. Please select which match should be used."; ObjectID = "gcf-gb-ZsF"; */ +"gcf-gb-ZsF.title" = "Hay múltiples coincidencias para la ventana actual. Por favor seleccione cual usar."; + +/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "PKW-gr-yqN"; */ +"PKW-gr-yqN.title" = "Celda de texto"; + +/* Class = "NSTextFieldCell"; title = "Content"; ObjectID = "TN3-3a-LaA"; */ +"TN3-3a-LaA.title" = "Contenido"; + +/* Class = "NSButtonCell"; title = "Perform Autotype"; ObjectID = "w7H-hx-CUF"; */ +"w7H-hx-CUF.title" = "Autoteclear"; + diff --git a/MacPass/es.lproj/ContextBar.strings b/MacPass/es.lproj/ContextBar.strings index eb8ae97b3..4040f8ff0 100644 --- a/MacPass/es.lproj/ContextBar.strings +++ b/MacPass/es.lproj/ContextBar.strings @@ -1,37 +1,27 @@ - /* Class = "NSTextFieldCell"; title = "Search:"; ObjectID = "7"; */ "7.title" = "Buscar:"; -/* Class = "NSButtonCell"; title = "Title"; ObjectID = "53D-ne-nv6"; */ -"53D-ne-nv6.title" = "Título"; - /* Class = "NSButtonCell"; title = "Empty Trash"; ObjectID = "8Ok-oe-6AB"; */ "8Ok-oe-6AB.title" = "Vaciar Papelera"; /* Class = "NSTextFieldCell"; title = "Trash"; ObjectID = "8P1-Rp-sF4"; */ "8P1-Rp-sF4.title" = "Papelera"; +/* Class = "NSButtonCell"; title = "Title"; ObjectID = "53D-ne-nv6"; */ +"53D-ne-nv6.title" = "Título"; + /* Class = "NSButtonCell"; title = "URL"; ObjectID = "92o-gN-Psj"; */ "92o-gN-Psj.title" = "URL"; /* Class = "NSMenuItem"; title = "Item 3"; ObjectID = "CFk-71-NYQ"; */ "CFk-71-NYQ.title" = "Item 3"; -/* Class = "NSTextFieldCell"; title = "History"; ObjectID = "ER3-Ic-v0N"; */ -"ER3-Ic-v0N.title" = "Historial"; - -/* Class = "NSMenuItem"; title = "Item 1"; ObjectID = "LRm-iZ-XrA"; */ -"LRm-iZ-XrA.title" = "Item 1"; - -/* Class = "NSButtonCell"; title = "Restore Entry"; ObjectID = "UTg-y9-4DN"; */ -"UTg-y9-4DN.title" = "Restaurar Entrada"; - -/* Class = "NSTabViewItem"; label = "Filter"; ObjectID = "Ud6-Nz-6PS"; */ -"Ud6-Nz-6PS.label" = "Filtro"; - /* Class = "NSMenuItem"; title = "Item 2"; ObjectID = "cpr-p6-YAY"; */ "cpr-p6-YAY.title" = "Item 2"; +/* Class = "NSTextFieldCell"; title = "History"; ObjectID = "ER3-Ic-v0N"; */ +"ER3-Ic-v0N.title" = "Historial"; + /* Class = "NSButtonCell"; title = "Exit History"; ObjectID = "ewQ-8F-e1E"; */ "ewQ-8F-e1E.title" = "Salir de Historial"; @@ -41,14 +31,27 @@ /* Class = "NSButtonCell"; title = "Username"; ObjectID = "jfQ-Jh-2gl"; */ "jfQ-Jh-2gl.title" = "Usuario"; +/* Class = "NSMenuItem"; title = "Item 1"; ObjectID = "LRm-iZ-XrA"; */ +"LRm-iZ-XrA.title" = "Item 1"; + /* Class = "NSTabViewItem"; label = "Trash"; ObjectID = "na6-h9-r9q"; */ "na6-h9-r9q.label" = "Papelera"; /* Class = "NSButtonCell"; title = "Password"; ObjectID = "rvQ-4V-SsS"; */ "rvQ-4V-SsS.title" = "Contraseña"; +/* Class = "NSTabViewItem"; label = "Filter"; ObjectID = "Ud6-Nz-6PS"; */ +"Ud6-Nz-6PS.label" = "Filtro"; + +/* Class = "NSButtonCell"; title = "Restore Entry"; ObjectID = "UTg-y9-4DN"; */ +"UTg-y9-4DN.title" = "Restaurar Entrada"; + /* Class = "NSMenu"; title = "OtherViews"; ObjectID = "wC4-fF-dLW"; */ "wC4-fF-dLW.title" = "Otras Vistas"; +/* Class = "NSButtonCell"; title = "Everywhere"; ObjectID = "WMK-bb-ESj"; */ +"WMK-bb-ESj.title" = "Todos los lugares"; + /* Class = "NSTabViewItem"; label = "History"; ObjectID = "z4I-cp-nhf"; */ "z4I-cp-nhf.label" = "Historial"; + diff --git a/MacPass/es.lproj/DatabaseSettingsWindow.strings b/MacPass/es.lproj/DatabaseSettingsWindow.strings index 1e6d87280..81d121c21 100644 --- a/MacPass/es.lproj/DatabaseSettingsWindow.strings +++ b/MacPass/es.lproj/DatabaseSettingsWindow.strings @@ -1,7 +1,18 @@ - /* Class = "NSWindow"; title = "Window"; ObjectID = "1"; */ "1.title" = "Ventana"; +/* Class = "NSTextFieldCell"; title = "Threads"; ObjectID = "2QI-ne-N5d"; */ +"2QI-ne-N5d.title" = "Hilos"; + +/* Class = "NSTextFieldCell"; title = "Iterations"; ObjectID = "2ZA-Gc-JdZ"; */ +"2ZA-Gc-JdZ.title" = "Iteraciones"; + +/* Class = "NSTextFieldCell"; title = "Enforce key change"; ObjectID = "5QH-N1-FHK"; */ +"5QH-N1-FHK.title" = "Obligar a cambiar de contraseña"; + +/* Class = "NSTabViewItem"; label = "Argon2"; ObjectID = "6qB-sH-9FI"; */ +"6qB-sH-9FI.label" = "Argon2"; + /* Class = "NSTextFieldCell"; title = "Database name:"; ObjectID = "190"; */ "190.title" = "Base:"; @@ -26,10 +37,7 @@ /* Class = "NSButtonCell"; title = "Enable Recycle Bin"; ObjectID = "536"; */ "536.title" = "Habilitar Papelera de Reciclaje"; -/* Class = "NSButtonCell"; title = "Empty Recycle Bin on Quit"; ObjectID = "540"; */ -"540.title" = "Vaciar Papelera de Reciclaje al Salir"; - -/* Class = "NSTextFieldCell"; title = "Maximum Items:"; ObjectID = "558"; */ +/* Class = "NSTextFieldCell"; title = "Maximum items in history:"; ObjectID = "558"; */ "558.title" = "Entradas Máximas:"; /* Class = "NSMenu"; title = "OtherViews"; ObjectID = "680"; */ @@ -38,7 +46,7 @@ /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "957"; */ "957.title" = "Cancelar"; -/* Class = "NSTextFieldCell"; title = "Maximum Size:"; ObjectID = "1269"; */ +/* Class = "NSTextFieldCell"; title = "Maximum history size:"; ObjectID = "1269"; */ "1269.title" = "Tamaño Máximo:"; /* Class = "NSMenu"; title = "OtherViews"; ObjectID = "1396"; */ @@ -62,11 +70,48 @@ /* Class = "NSTextFieldCell"; title = "Default Username:"; ObjectID = "1591"; */ "1591.title" = "Usuario por Defecto:"; -/* Class = "NSTextFieldCell"; title = "Key encryption rounds:"; ObjectID = "1644"; */ -"1644.title" = "Rondas de Clave de Cifrado:"; - /* Class = "NSMenu"; title = "OtherViews"; ObjectID = "1740"; */ "1740.title" = "Otras Vistas"; -/* Class = "NSButtonCell"; title = "Benchmark"; ObjectID = "1775"; */ -"1775.title" = "Referencia"; +/* Class = "NSTextFieldCell"; title = "File format:"; ObjectID = "bTk-YZ-x0G"; */ +"bTk-YZ-x0G.title" = "Formato de archivo:"; + +/* Class = "NSButtonCell"; title = "Recommend key change"; ObjectID = "CtU-Eq-dgy"; */ +"CtU-Eq-dgy.title" = "Recomendar cambio de contraseña"; + +/* Class = "NSTabViewItem"; label = "Aes"; ObjectID = "ft1-pl-lpO"; */ +"ft1-pl-lpO.label" = "AES"; + +/* Class = "NSTextFieldCell"; title = "Algorithm"; ObjectID = "GVd-KH-pHc"; */ +"GVd-KH-pHc.title" = "Algoritmo"; + +/* Class = "NSTextFieldCell"; title = "Encryption:"; ObjectID = "gxY-UL-bEG"; */ +"gxY-UL-bEG.title" = "Cifrado:"; + +/* Class = "NSTextFieldCell"; title = "Memory"; ObjectID = "iRY-If-Kwn"; */ +"iRY-If-Kwn.title" = "Memoria"; + +/* Class = "NSTextFieldCell"; title = "Recyclebin Group:"; ObjectID = "kI5-Kp-byE"; */ +"kI5-Kp-byE.title" = "Grupo de papelera:"; + +/* Class = "NSButtonCell"; title = "Force key change once after unlocking"; ObjectID = "pA1-aL-KjT"; */ +"pA1-aL-KjT.title" = "Obligar a cambiar de contraseña una vez desbloqueado"; + +/* Class = "NSBox"; title = "Key derivation"; ObjectID = "pbl-Mb-r8V"; */ +"pbl-Mb-r8V.title" = "Derivación de contraseña"; + +/* Class = "NSButtonCell"; title = "Generate Parameters"; ObjectID = "PoI-Er-Y8P"; */ +"PoI-Er-Y8P.title" = "Generar parámetros"; + +/* Class = "NSTextFieldCell"; title = "VersionInfo"; ObjectID = "Ush-4r-A1A"; */ +"Ush-4r-A1A.title" = "Información de versión"; + +/* Class = "NSTextFieldCell"; title = "Rounds"; ObjectID = "uUQ-9s-M5E"; */ +"uUQ-9s-M5E.title" = "Rondas"; + +/* Class = "NSTextFieldCell"; title = "Recommend key change"; ObjectID = "Xib-Fn-sqx"; */ +"Xib-Fn-sqx.title" = "Recomendar cambio de contraseña"; + +/* Class = "NSButtonCell"; title = "Force key change"; ObjectID = "z6u-YT-7LE"; */ +"z6u-YT-7LE.title" = "Obligar a cambiar de contraseña"; + diff --git a/MacPass/es.lproj/DatePickingView.strings b/MacPass/es.lproj/DatePickingView.strings index 00de0f2eb..c7ebd60e6 100644 --- a/MacPass/es.lproj/DatePickingView.strings +++ b/MacPass/es.lproj/DatePickingView.strings @@ -1,4 +1,3 @@ - /* Class = "NSMenu"; title = "OtherViews"; ObjectID = "17"; */ "17.title" = "Otras vistas"; @@ -7,3 +6,4 @@ /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "30"; */ "30.title" = "Cancelar"; + diff --git a/MacPass/es.lproj/DuplicateEntryOptionsWindow.strings b/MacPass/es.lproj/DuplicateEntryOptionsWindow.strings index afec26850..29822a0d8 100644 --- a/MacPass/es.lproj/DuplicateEntryOptionsWindow.strings +++ b/MacPass/es.lproj/DuplicateEntryOptionsWindow.strings @@ -1,18 +1,18 @@ +/* Class = "NSButtonCell"; title = "Reference password instead of copying it"; ObjectID = "daA-QV-CDq"; */ +"daA-QV-CDq.title" = "Referenciar contraseña en vez de copiarla"; + +/* Class = "NSButtonCell"; title = "Duplicate history"; ObjectID = "dXl-KS-4rE"; */ +"dXl-KS-4rE.title" = "Duplicar historial"; /* Class = "NSButtonCell"; title = "Reference username instead of copying it"; ObjectID = "O9X-XH-n8o"; */ "O9X-XH-n8o.title" = "Referenciar Usuario en vez de copiarlo"; -/* Class = "NSWindow"; title = "Window"; ObjectID = "QvC-M9-y7g"; */ +/* Class = "NSWindow"; title = "Duplicate Entry Options"; ObjectID = "QvC-M9-y7g"; */ "QvC-M9-y7g.title" = "Ventana"; /* Class = "NSButtonCell"; title = "Duplicate Entry"; ObjectID = "WqI-qH-ARf"; */ "WqI-qH-ARf.title" = "Duplicar Entrada"; -/* Class = "NSButtonCell"; title = "Duplicate history"; ObjectID = "dXl-KS-4rE"; */ -"dXl-KS-4rE.title" = "Duplicar historial"; - -/* Class = "NSButtonCell"; title = "Reference password instead of copying it"; ObjectID = "daA-QV-CDq"; */ -"daA-QV-CDq.title" = "Referenciar contraseña en vez de copiarla"; - /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "x6e-bE-Y6R"; */ "x6e-bE-Y6R.title" = "Cancelar"; + diff --git a/MacPass/es.lproj/EntryInspectorView.strings b/MacPass/es.lproj/EntryInspectorView.strings index aa68c7ca9..ad8d52f22 100644 --- a/MacPass/es.lproj/EntryInspectorView.strings +++ b/MacPass/es.lproj/EntryInspectorView.strings @@ -1,3 +1,8 @@ +/* Class = "NSMenuItem"; title = "Save"; ObjectID = "0ok-MC-QMP"; */ +"0ok-MC-QMP.title" = "Guardar"; + +/* Class = "NSButtonCell"; title = "Enable Autotype"; ObjectID = "9Nx-mE-DK3"; */ +"9Nx-mE-DK3.title" = "Habilitar Autollenado"; /* Class = "NSButtonCell"; title = "Generate"; ObjectID = "64"; */ "64.title" = "Generar"; @@ -20,9 +25,6 @@ /* Class = "NSTextFieldCell"; title = "Tags"; ObjectID = "79"; */ "79.title" = "Tags"; -/* Class = "NSTabViewItem"; label = "Fields"; ObjectID = "108"; */ -"108.label" = "Campos"; - /* Class = "NSTabViewItem"; label = "Attachments"; ObjectID = "109"; */ "109.label" = "Adjuntos"; @@ -41,9 +43,6 @@ /* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "171"; */ "171.title" = "Campo de Vista de Tabla"; -/* Class = "NSTextFieldCell"; title = "Custom Fields"; ObjectID = "190"; */ -"190.title" = "Campos Personalizados"; - /* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "197"; */ "197.title" = "Campo de Texto"; @@ -53,47 +52,23 @@ /* Class = "NSTextFieldCell"; placeholderString = "Value"; ObjectID = "214"; */ "214.placeholderString" = "Valor"; -/* Class = "NSTextFieldCell"; placeholderString = "Value"; ObjectID = "225"; */ -"225.placeholderString" = "Valor"; - -/* Class = "NSTextFieldCell"; placeholderString = "Title"; ObjectID = "228"; */ -"228.placeholderString" = "Título"; - /* Class = "NSSegmentedCell"; 238.ibShadowedLabels[0] = "General"; ObjectID = "238"; */ "238.ibShadowedLabels[0]" = "General"; /* Class = "NSSegmentedCell"; 238.ibShadowedLabels[1] = "Files"; ObjectID = "238"; */ "238.ibShadowedLabels[1]" = "Archivos"; -/* Class = "NSSegmentedCell"; 238.ibShadowedLabels[2] = "Custom"; ObjectID = "238"; */ +/* Class = "NSSegmentedCell"; 238.ibShadowedLabels[2] = "Autotype"; ObjectID = "238"; */ "238.ibShadowedLabels[2]" = "Personalizado"; -/* Class = "NSSegmentedCell"; 238.ibShadowedLabels[3] = "Autotype"; ObjectID = "238"; */ -"238.ibShadowedLabels[3]" = "Autollenado"; - -/* Class = "NSMenuItem"; title = "Save"; ObjectID = "0ok-MC-QMP"; */ -"0ok-MC-QMP.title" = "Guardar"; - -/* Class = "NSButtonCell"; title = "Enable Autotype"; ObjectID = "9Nx-mE-DK3"; */ -"9Nx-mE-DK3.title" = "Habilitar Autollenado"; - -/* Class = "NSMenuItem"; title = "Quicklook"; ObjectID = "NtM-y3-l4D"; */ -"NtM-y3-l4D.title" = "Vista Rápida"; - -/* Class = "NSTextFieldCell"; placeholderString = "Custom Entry Sequence"; ObjectID = "R2X-Ex-c6q"; */ -"R2X-Ex-c6q.placeholderString" = "Entrada de Secuecia Personalizada"; - -/* Class = "NSTextFieldCell"; title = "Window Sequence"; ObjectID = "RQB-bR-MC0"; */ -"RQB-bR-MC0.title" = "Secuencia de Ventana"; - -/* Class = "NSTextFieldCell"; title = "Autotype Sequence"; ObjectID = "bQ5-0E-h3O"; */ -"bQ5-0E-h3O.title" = "Secuencia Autollenado"; +/* Class = "NSMenuItem"; title = "Delete"; ObjectID = "bke-G2-oEf"; */ +"bke-G2-oEf.title" = "Eliminar"; /* Class = "NSTextFieldCell"; title = "Window Title"; ObjectID = "bkO-Bk-AuX"; */ "bkO-Bk-AuX.title" = "Título de Ventana"; -/* Class = "NSMenuItem"; title = "Delete"; ObjectID = "bke-G2-oEf"; */ -"bke-G2-oEf.title" = "Eliminar"; +/* Class = "NSTextFieldCell"; title = "Autotype Sequence"; ObjectID = "bQ5-0E-h3O"; */ +"bQ5-0E-h3O.title" = "Secuencia Autollenado"; /* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "dyA-lo-PGa"; */ "dyA-lo-PGa.title" = "Campo de Vista de Tabla"; @@ -110,5 +85,24 @@ /* Class = "NSTextFieldCell"; title = "Window Associations"; ObjectID = "ned-1Q-FXA"; */ "ned-1Q-FXA.title" = "Asociaciones de Ventana"; +/* Class = "NSMenuItem"; title = "Quicklook"; ObjectID = "NtM-y3-l4D"; */ +"NtM-y3-l4D.title" = "Vista Rápida"; + +/* Class = "NSButtonCell"; title = "Obfuscate Autotype"; ObjectID = "oNq-kB-3eb"; */ +"oNq-kB-3eb.title" = "Ofuscar Autotecleo"; + +/* Class = "NSTextFieldCell"; placeholderString = "Custom Entry Sequence"; ObjectID = "R2X-Ex-c6q"; */ +"R2X-Ex-c6q.placeholderString" = "Entrada de Secuecia Personalizada"; + +/* Class = "NSTextFieldCell"; title = "Window Sequence"; ObjectID = "RQB-bR-MC0"; */ +"RQB-bR-MC0.title" = "Secuencia de Ventana"; + /* Class = "NSMenu"; title = "OtherViews"; ObjectID = "sNS-o1-pD7"; */ "sNS-o1-pD7.title" = "Otras Vistas"; + +/* Class = "NSTextFieldCell"; title = "UUID"; ObjectID = "vTq-N1-5oa"; */ +"vTq-N1-5oa.title" = "UUID"; + +/* Class = "NSButtonCell"; title = "Show Plugin Data"; ObjectID = "X9y-K7-lix"; */ +"X9y-K7-lix.title" = "Mostrar los datos del plugin"; + diff --git a/MacPass/es.lproj/GeneralPreferences.strings b/MacPass/es.lproj/GeneralPreferences.strings index 19692917c..a8b8e51d1 100644 --- a/MacPass/es.lproj/GeneralPreferences.strings +++ b/MacPass/es.lproj/GeneralPreferences.strings @@ -1,3 +1,8 @@ +/* Class = "NSMenuItem"; title = "after 5 Minutes"; ObjectID = "5gh-b6-cmG"; */ +"5gh-b6-cmG.title" = "después de 5 minutos"; + +/* Class = "NSButtonCell"; title = "Clear all stored locations"; ObjectID = "8Ri-2s-c39"; */ +"8Ri-2s-c39.title" = "Eliminar las ubicaciones guardadas"; /* Class = "NSMenu"; title = "ClipboardClearInterval"; ObjectID = "421"; */ "421.title" = "Intervalo de vaciado de Portapapeles"; @@ -26,12 +31,6 @@ /* Class = "NSButtonCell"; title = "Reopen last Database after Launch"; ObjectID = "531"; */ "531.title" = "Reabrir Base más reciente al Iniciar"; -/* Class = "NSBox"; title = "General"; ObjectID = "928"; */ -"928.title" = "General"; - -/* Class = "NSButtonCell"; title = "Double-click entry URL to Launch"; ObjectID = "937"; */ -"937.title" = "Abrir URL al dar doble clic"; - /* Class = "NSMenu"; title = "LockTimes"; ObjectID = "586"; */ "586.title" = "Tiempos de Bloqueo"; @@ -53,11 +52,30 @@ /* Class = "NSTextFieldCell"; title = "Lock while idle"; ObjectID = "806"; */ "806.title" = "Bloquear al estar inactivo"; +/* Class = "NSBox"; title = "File Handling"; ObjectID = "888"; */ +"888.title" = "Gestión de ficheros"; + /* Class = "NSTextFieldCell"; title = "Enabling this compromises security. If enabled, your preferences will contain mappings from database to keyfile. Key locations for databases without a password will not be saved."; ObjectID = "ACh-7H-42N"; */ "ACh-7H-42N.title" = "Habilitando esta opción se compromete la seguridad. Si está habilitado, tus preferencias contendrán mapeos de bases al keyfile. Las ubicaciones para bases sin contraseña no serán guardadas.."; +/* Class = "NSButtonCell"; title = "Lock after log out"; ObjectID = "Dzn-9R-JjE"; */ +"Dzn-9R-JjE.title" = "Bloquear después de cerrar sesión"; + +/* Class = "NSButtonCell"; title = "Prevent Universal Clipboard support"; ObjectID = "fNy-mS-phi"; */ +"fNy-mS-phi.title" = "Evitar soporte de portapapeles universal"; + +/* Class = "NSTextFieldCell"; title = "Disabling this compromises security. If enabled, anything copied to the Clipboard in MacPass will be available on your connected iOS devices. You should clear the clipboard on those devices manually."; ObjectID = "JGX-Tp-KJk"; */ +"JGX-Tp-KJk.title" = "Deshabilitar esto compromete la seguridad . Si está habilitado, cualquier elemento copiado en el portapapeles en MacPass estará disponible en los dispositivos iOS conectados. Se debería limpiar el portapapeles de esos dispositivos manualmente."; + +/* Class = "NSTextFieldCell"; title = "If file changes:"; ObjectID = "QrK-hM-Xt1"; */ +"QrK-hM-Xt1.title" = "Si el archivo cambia:"; + /* Class = "NSButtonCell"; title = "Remember Keyfile for Databases"; ObjectID = "r6q-He-nYU"; */ "r6q-He-nYU.title" = "Recordar el Keyfile para las Bases de Datos"; -/* Class = "NSButtonCell"; title = "Clear all stored locations"; ObjectID = "8Ri-2s-c39"; */ -"8Ri-2s-c39.title" = "Eliminar las ubicaciones guardadas"; +/* Class = "NSButtonCell"; title = "Enable Autosave"; ObjectID = "wG7-bi-2fi"; */ +"wG7-bi-2fi.title" = "Habilitar auto guardado"; + +/* Class = "NSTextFieldCell"; title = "Close and open all documents for changes to take effect"; ObjectID = "ya5-ps-c4W"; */ +"ya5-ps-c4W.title" = "Cerrar y abrir todos los documentos para que los cambios surtan efecto"; + diff --git a/MacPass/es.lproj/GroupInspectorView.strings b/MacPass/es.lproj/GroupInspectorView.strings index 7395773fc..8c943f90a 100644 --- a/MacPass/es.lproj/GroupInspectorView.strings +++ b/MacPass/es.lproj/GroupInspectorView.strings @@ -1,3 +1,5 @@ +/* Class = "NSTextFieldCell"; title = "Autotype Sequence"; ObjectID = "6FG-UZ-Adh"; */ +"6FG-UZ-Adh.title" = "Secuencia de Auto tecleo"; /* Class = "NSTextFieldCell"; title = "Name"; ObjectID = "25"; */ "25.title" = "Nombre"; @@ -15,4 +17,8 @@ "265.title" = "Buscar"; /* Class = "NSTextFieldCell"; title = "Autotype"; ObjectID = "277"; */ -"277.title" = "Autollenado"; +"277.title" = "Autotecleo"; + +/* Class = "NSButtonCell"; title = "Show Plugin Data"; ObjectID = "qGr-oT-WjP"; */ +"qGr-oT-WjP.title" = "Mostrar datos del plugin"; + diff --git a/MacPass/es.lproj/IconSelection.strings b/MacPass/es.lproj/IconSelection.strings index 77aa07582..27cb82af4 100644 --- a/MacPass/es.lproj/IconSelection.strings +++ b/MacPass/es.lproj/IconSelection.strings @@ -1,6 +1,9 @@ +/* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "1kM-cI-P1o"; */ +"1kM-cI-P1o.title" = "Cancelar"; /* Class = "NSButtonCell"; title = "Use Default Icon"; ObjectID = "102"; */ "102.title" = "Usar Ícono por Defecto"; -/* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "1kM-cI-P1o"; */ -"1kM-cI-P1o.title" = "Cancelar"; +/* Class = "NSButtonCell"; title = "Download Icon"; ObjectID = "iaf-XW-XUo"; */ +"iaf-XW-XUo.title" = "Descargar icono"; + diff --git a/MacPass/es.lproj/InfoPlist.strings b/MacPass/es.lproj/InfoPlist.strings index 477b28ff8..1768710c1 100644 --- a/MacPass/es.lproj/InfoPlist.strings +++ b/MacPass/es.lproj/InfoPlist.strings @@ -1,2 +1,18 @@ -/* Localized versions of Info.plist keys */ +/* Bundle name */ +"CFBundleName" = "MacPass"; + +/* (No Comment) */ +"KDB Database" = "Base de datos KDB"; + +/* (No Comment) */ +"KDBX Database" = "Base de datos KDBX"; + +/* (No Comment) */ +"MacPass Plugin" = "Plugin MacPass"; + +/* (No Comment) */ +"NSHumanReadableCopyright" = "Copyright ©2012-2019 HicknHack Software GmbH. All rights reserved. "; + +/* (No Comment) */ +"XML" = "XML"; diff --git a/MacPass/es.lproj/InspectorView.strings b/MacPass/es.lproj/InspectorView.strings index 0ea820c93..4714a01c4 100644 --- a/MacPass/es.lproj/InspectorView.strings +++ b/MacPass/es.lproj/InspectorView.strings @@ -1,69 +1,24 @@ +/* Class = "NSTabViewItem"; label = "Group"; ObjectID = "2896"; */ +"2896.label" = "Grupo"; -/* Class = "NSTextFieldCell"; title = "Name"; ObjectID = "101"; */ -"101.title" = "Nombre"; +/* Class = "NSTabViewItem"; label = "Entry"; ObjectID = "2897"; */ +"2897.label" = "Entrada"; -/* Class = "NSTextFieldCell"; title = "Name"; ObjectID = "1266"; */ -"1266.title" = "Nombre"; +/* Class = "NSTabViewItem"; label = "NoSelection"; ObjectID = "2974"; */ +"2974.label" = "Sin selección"; -/* Class = "NSTextFieldCell"; title = "Username"; ObjectID = "1267"; */ -"1267.title" = "Nombre de Usuario"; +/* Class = "NSTextFieldCell"; title = "No Selection"; ObjectID = "2986"; */ +"2986.title" = "Sin selección"; -/* Class = "NSTextFieldCell"; title = "URL"; ObjectID = "1268"; */ -"1268.title" = "URL"; +/* Class = "NSTextFieldCell"; title = "Label"; ObjectID = "3014"; */ +"3014.title" = "Etiqueta"; -/* Class = "NSTextFieldCell"; title = "Password"; ObjectID = "1269"; */ -"1269.title" = "Contaseña"; +/* Class = "NSTextFieldCell"; title = "Notes"; ObjectID = "hwn-UY-9Cr"; */ +"hwn-UY-9Cr.title" = "Notas"; -/* Class = "NSButtonCell"; title = "Generate"; ObjectID = "1274"; */ -"1274.title" = "Generar"; +/* Class = "CocoaBindingsConnection"; ibShadowedIsNilPlaceholder = "None"; ObjectID = "Xpb-G8-gXl"; */ +"Xpb-G8-gXl.ibShadowedIsNilPlaceholder" = "Ninguno"; -/* Class = "NSTabViewItem"; label = "General"; ObjectID = "1394"; */ -"1394.label" = "General"; +/* Class = "CocoaBindingsConnection"; ibShadowedNoSelectionPlaceholder = "No Selection"; ObjectID = "Xpb-G8-gXl"; */ +"Xpb-G8-gXl.ibShadowedNoSelectionPlaceholder" = "Sin selección"; -/* Class = "NSTabViewItem"; label = "Notes"; ObjectID = "1395"; */ -"1395.label" = "Notas"; - -/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "1481"; */ -"1481.title" = "Campo de Texto"; - -/* Class = "NSTextFieldCell"; title = "Attachments"; ObjectID = "1513"; */ -"1513.title" = "Adjuntos"; - -/* Class = "NSTextFieldCell"; title = "Notes"; ObjectID = "1529"; */ -"1529.title" = "Notas"; - -/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "1568"; */ -"1568.title" = "Campo de Vista de Tabla"; - -/* Class = "NSButtonCell"; title = "Add File"; ObjectID = "1581"; */ -"1581.title" = "Agregar Archivo"; - -/* Class = "NSButtonCell"; title = "Save File"; ObjectID = "1586"; */ -"1586.title" = "Guardar Archivo"; - -/* Class = "NSTextFieldCell"; title = "Quality"; ObjectID = "1605"; */ -"1605.title" = "Calidad"; - -/* Class = "NSTextFieldCell"; title = "Created"; ObjectID = "1885"; */ -"1885.title" = "Creado"; - -/* Class = "NSTextFieldCell"; title = "Modified"; ObjectID = "1930"; */ -"1930.title" = "Modificado"; - -/* Class = "NSTabViewItem"; label = "Attachments"; ObjectID = "1945"; */ -"1945.label" = "Aduntos"; - -/* Class = "NSTabViewItem"; label = "Fields"; ObjectID = "1947"; */ -"1947.label" = "Campos"; - -/* Class = "NSTextFieldCell"; title = "Custom Fields"; ObjectID = "1991"; */ -"1991.title" = "Campos Personalizados"; - -/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "2017"; */ -"2017.title" = "Campo de Texto"; - -/* Class = "NSTextFieldCell"; placeholderString = "Value"; ObjectID = "2043"; */ -"2043.placeholderString" = "Valor"; - -/* Class = "NSTextFieldCell"; placeholderString = "Title"; ObjectID = "2049"; */ -"2049.placeholderString" = "Título"; diff --git a/MacPass/es.lproj/IntegrationPreferences.strings b/MacPass/es.lproj/IntegrationPreferences.strings index 437d02c3c..45aa140f8 100644 --- a/MacPass/es.lproj/IntegrationPreferences.strings +++ b/MacPass/es.lproj/IntegrationPreferences.strings @@ -1,30 +1,45 @@ - -/* Class = "NSButtonCell"; title = "Enable KeePassHttp server"; ObjectID = "3"; */ -"3.title" = "Habilitar Servidor KeePassHttp"; - /* Class = "NSButtonCell"; title = "Enable global Autotype"; ObjectID = "1qb-Rd-jYu"; */ "1qb-Rd-jYu.title" = "Habilitar Autollenado Global"; /* Class = "NSTextFieldCell"; title = "Shortcut"; ObjectID = "6oN-CH-T0O"; */ "6oN-CH-T0O.title" = "Atajo"; -/* Class = "NSButtonCell"; title = "Enabel Quicklook Preview"; ObjectID = "ERs-ct-Eyx"; */ +/* Class = "NSButtonCell"; title = "Include Entry URL Host for matches"; ObjectID = "B1D-j9-L8x"; */ +"B1D-j9-L8x.title" = "Incluir URL de Host en las búsquedas"; + +/* Class = "NSButtonCell"; title = "Enable Quicklook Preview"; ObjectID = "ERs-ct-Eyx"; */ "ERs-ct-Eyx.title" = "Habilitar Vista Previa"; -/* Class = "NSBox"; title = "Keepass HTTP"; ObjectID = "KbH-0Q-5Tw"; */ -"KbH-0Q-5Tw.title" = "Keepass HTTP"; +/* Class = "NSTextFieldCell"; title = "Autotype might not work properly. Some issues where found that prevent Autotype or Global Autotype to work. Please run the Autotype Doctor to fix those issues."; ObjectID = "H37-ku-aTc"; */ +"H37-ku-aTc.title" = "Autotecleo podría no funcionar correctamente. Se detecto algún problema que puede evitar que Autotecleo o Autotecleo global funcione. Por favor ejecute el Doctor de Autotecleo para solucionar el problema."; -/* Class = "NSBox"; title = "Autotype"; ObjectID = "P9N-HM-wER"; */ -"P9N-HM-wER.title" = "Autollenado"; +/* Class = "NSTextFieldCell"; title = "Shortcut is missing Key"; ObjectID = "Lxp-wI-yQy"; */ +"Lxp-wI-yQy.title" = "El atajo no está definido"; -/* Class = "NSBox"; title = "Preview"; ObjectID = "VVs-b5-cX9"; */ -"VVs-b5-cX9.title" = "Vista Previa"; +/* Class = "NSButtonCell"; title = "Run Autotype Doctor…"; ObjectID = "NP0-R3-m6n"; */ +"NP0-R3-m6n.title" = "Ejecutar el Doctor de Autotecleo"; -/* Class = "NSTextFieldCell"; title = "If enabled attached files will be copied to a temporary location for preview and deleted after the preview is closed."; ObjectID = "WmI-IB-Aso"; */ -"WmI-IB-Aso.title" = "Si se habilita, los archivos adjuntos serán copiados a una carpeta temporal para generar la vista previa y serán elimiandos al cerrarla. Esto es un riesgo de seguridad."; +/* Class = "NSBox"; title = "Autotype"; ObjectID = "P9N-HM-wER"; */ +"P9N-HM-wER.title" = "Autotecleo"; /* Class = "NSButtonCell"; title = "Interpret ⌃ as ⌘"; ObjectID = "QfO-yG-l3F"; */ "QfO-yG-l3F.title" = "Intérprete ⌃ as ⌘"; /* Class = "NSTextFieldCell"; title = "If enabled, every {CONTROL} command will be sent as ⌘. Only disable this if you are sure you need to."; ObjectID = "QRy-CY-ENC"; */ "QRy-CY-ENC.title" = "Si se habilita, cada comando {CONTROL} será enviado como ⌘. Only disable this if you are sure you need to."; + +/* Class = "NSButtonCell"; title = "Include Entry Tags for matches"; ObjectID = "rbu-G7-MT8"; */ +"rbu-G7-MT8.title" = "Incluir etiquetas de la entrada en las búsquedas"; + +/* Class = "NSButtonCell"; title = "Include Entry Title for matches"; ObjectID = "tmL-dT-D0G"; */ +"tmL-dT-D0G.title" = "Incluir el título de las entradas en las búsquedas"; + +/* Class = "NSButtonCell"; title = "Include Entry URL for matches"; ObjectID = "TzR-00-Vp3"; */ +"TzR-00-Vp3.title" = "Incluir la URL de la entrada en las búsquedas"; + +/* Class = "NSBox"; title = "Preview"; ObjectID = "VVs-b5-cX9"; */ +"VVs-b5-cX9.title" = "Vista Previa"; + +/* Class = "NSTextFieldCell"; title = "If enabled attached files will be copied to a temporary location for preview and deleted after the preview is closed."; ObjectID = "WmI-IB-Aso"; */ +"WmI-IB-Aso.title" = "Si se habilita, los archivos adjuntos serán copiados a una carpeta temporal para generar la vista previa y serán elimiandos al cerrarla. Esto es un riesgo de seguridad."; + diff --git a/MacPass/es.lproj/Localizable.strings b/MacPass/es.lproj/Localizable.strings index f644eec88..ea3950ac5 100644 --- a/MacPass/es.lproj/Localizable.strings +++ b/MacPass/es.lproj/Localizable.strings @@ -1,198 +1,816 @@ -/* Formatted Times */ +/* Count of characters remaining in pickchars dialog */ +"%ld_CHARACTERS_TO_PICK_REMAINING" = "%ld caracteres disponibles para seleccionar"; + +/* Display format for days. Should contain a long decimal placeholder! */ +"%ld_DAYS" = "%ld días"; + +/* % days ago */ "%ld_DAYS_AGO" = "hace %ld días"; + +/* % Hours ago */ "%ld_HOURS_AGO" = "hace aproximadamente %ld horas"; + +/* % Minutes ago */ "%ld_MINUTES_AGO" = "hace %ld minutos"; + +/* % Weeks ago */ "%ld_WEEKS_AGO" = "hace %ld semanas"; -"JUST_NOW" = "Justo ahora"; -"LAST_WEEK" = "La semana pasada"; -"ONE_WEEK_AGO" = "Hace una semana"; -"YESTERDAY" = "Ayer"; -"TOMORROW" = "Mañana"; -"ONE_WEEK" = "en una semana"; -"ONE_MONTH" = "en un mes"; + +/* preset to expire after 90 days from now */ "90_DAYS" = "en 90 días"; -"ONE_YEAR" = "en un año"; -/* Date Picker */ -"SELECT_DATE_PRESET" = "Usar predefinido…"; +/* Button label to abort a merge on a file with changed master key! */ +"ABORT_MERGE_KEEP_MINE" = "Cancelar fusión. Mantener el mío."; -/* Menu item for automatic trash creation */ -"AUTOCREATE_TRASH_FOLDER" = "Crear automáticamente"; +/* Toolbar item with action menu */ +"ACTION" = "Acción"; -/* - Actions - */ -"NEW_ENTRY" = "Agregar Entrada"; -"NEW_GROUP" = "Agregar Grupo"; -"DUPLICATE_ENTRY" = "Duplicar Entrada"; -"DUPLICATE_ENTRY_WITH_OPTIONS" = "Duplicar Entrada…"; -"COPY_ENTRY" = "Copiar Entrada"; -"COPY_GROUP" = "Copiar Grupo"; +/* Menu item title for adding an hmacotp config attribute */ +"ADD_CUSTOM_ATTRIBUTE_HMACOTP_CONFIG" = "Añadir configuración HMACOTP"; + +/* Menu item title for adding an hmacotp seed attribute */ +"ADD_CUSTOM_ATTRIBUTE_HMACOTP_SEED" = "Añadir semilla HMACOTP"; + +/* Menu displayed for adding special custom keys */ +"ADD_CUSTOM_FIELD_CONTEXT_MENU" = "Añadir campo personalizado al menú"; + +/* Action to add an entry via template */ "ADD_TREMPLATE_ENTRY" = "Crear Plantilla de Entrada"; -"DELETE_GROUP" = "Eliminar Grupo"; -"DELETE_ENTRY" = "Eliminar Entrada"; -"EDIT_TEMPLATE_GROUP" = "Editar Grupo de Plantilla"; -"EMPTY_TRASH" = "Vaciar Papelera"; -"MOVE_ENTRY" = "Mover Entrada"; -"MOVE_GROUP" = "Mover Grupo"; -"NEW_ENTRY_WITH_TEMPLATE_%@" = "Crear Entrada con Plantilla %@"; -"NEW_DATABASE" = "Base de Datos"; -"OPEN_URL" = "Abrir URL"; -"PERFORM_AUTOTYPE_FOR_ENTRY" = "Generar Autollenado"; -"PREVIEW" = "Vista Previa"; -"PASSWORD_GENERATOR_SET_DEFAULTS" = "Configurar Predeterminados"; -"PASSWORD_GENERATOR_RESET_ENTRY_DEFAULTS" = "Reiniciar"; -"TRASH_ENTRY" = "Entrada de Papelera"; -"TRASH_GROUP" = "Grupo de Papelera"; -"SHOW_HISTORY" = "Mostrar Historial"; -/* - Search - */ -"CLEAR_RECENT_SEARCHES" = "Limpiar búsquedas recientes"; -"RECENT_SEARCHES" = "Búsquedas recientes"; -"SEARCH_DUPLICATE_PASSWORDS" = "Contraseñas duplicadas"; -"SEARCH_EXPIRED_ENTRIES" = "Expirado"; -"SELECT_FILTER_WITH_DOTS" = "Seleccionar…"; +/* Allow the download of the plugin repository file */ +"ALERT_ASK_FOR_PLUGIN_REPOSITORY_ALLOW_DOWNLOAD" = "No actualizar definiciones"; -/* - Direct Translations - */ -"ACTION" = "Acción"; +/* Informative text displayed on the alert that shows up when MacPass asks for permssion to download the plugin repository JSON file */ +"ALERT_ASK_FOR_PLUGIN_REPOSITORY_CONNECTION_PERMISSION_INFORMATIVE_TEXT" = "Las definiciones de los plugin están almacenadas online en https://macpassapp.org. A MacPass le gustaría descargar los archivos para asegurar que los datos están actualizados"; + +/* Message displayed on the alert that asks for permission to download the plugin repository JSON file */ +"ALERT_ASK_FOR_PLUGIN_REPOSITORY_CONNECTION_PERMISSION_MESSAGE" = "A MacPass le gustaría comprobar las actualizaciones de las definiciones de los plugin online"; + +/* Disallow the download of the plugin repository file */ +"ALERT_ASK_FOR_PLUGIN_REPOSITORY_DISALLOW_DOWNLOAD" = "Actualizar las definiciones online"; + +/* Button in dialog to leave autotype disabled and continiue! */ +"ALERT_AUTOTYPE_MISSING_ACCESSIBILTY_PERMISSIONS_BUTTON_OK" = "Mantener Autotecleo deshabilitado."; + +/* Button in dialog to open accessibilty preferences pane! */ +"ALERT_AUTOTYPE_MISSING_ACCESSIBILTY_PERMISSIONS_BUTTON_OPEN_PREFERENCES" = "Abrir las preferencias de accesibilidad..."; + +/* Alert informative text displayed when Autotype performs self check and lacks accessibilty permissions */ +"ALERT_AUTOTYPE_MISSING_ACCESSIBILTY_PERMISSIONS_INFORMATIVE_TEXT" = "El sistema evita que MacPass envíe las pulsaciones de las teclas a otras aplicaciones. Para habilitar el Autotecleo por favor concede permisos de accesibilidad a MacPass en las preferencias de privacidad."; + +/* Alert message displayed when Autotype performs self check and lacks accessibilty permissions */ +"ALERT_AUTOTYPE_MISSING_ACCESSIBILTY_PERMISSIONS_MESSAGE_TEXT" = "MacPass no puede realizar el Autotecleo"; + +/* Button in dialog to leave plugin ds disabled and continiue! */ +"ALERT_INCOMPATIBLE_PLUGINS_ENCOUNTERED_BUTTON_OK" = "OK"; + +/* Button in dialog to open plugin preferences pane! */ +"ALERT_INCOMPATIBLE_PLUGINS_ENCOUNTERED_BUTTON_OPEN_PREFERENCES" = "Mostrar preferencias del plugin…"; + +/* Informative text of the alert displayed when plugins where disabled due to incompatibilty */ +"ALERT_INCOMPATIBLE_PLUGINS_ENCOUNTERED_INFORMATIVE_TEXT" = "Algunos plugins fueron deshabilitados porque no son compatibles con esta version de MacPass. Abra la configuración del plugin para obtener detalles."; + +/* Message text of the alert displayed when plugins where disabled due to incompatibilty */ +"ALERT_INCOMPATIBLE_PLUGINS_ENCOUNTERED_MESSAGE" = "Plugins incompatibles detectados."; + +/* Alert informative text when plugins or their settings change and require a restart */ +"ALERT_INFORMATIVE_TEXT_PLUGINS_CHANGED_SUGGEST_RESTART" = "Los cambios a los plugins y sus configuraciones globales sólo tienen efecto tras reiniciar ¿Reiniciar MacPass ahora?"; + +/* Alert informative text to ask the user if he really want to uninstall the plugin */ +"ALERT_INFORMATIVE_TEXT_REALLY_UNINSTALL_PLUGIN" = "Se moverá el plugin a la papelera."; + +/* Button in dialog to cancel merge of KDB file changes! */ +"ALERT_MERGE_CANCEL" = "Cancelar"; + +/* Button in dialog to merge KDB changes into file! */ +"ALERT_MERGE_CONTINUE" = "¡Fusionar archivos!"; + +/* Informative text displayed when merging KDB files */ +"ALERT_MERGE_KDB_FILE_INFO_TEXT" = "Las bases de datos KDB no contienen suficiente información para una fusión perfecta. Las entradas se fusionarán y no se perderá información, pero debido a que los grupos se fusionan únicamente por nombre pueden ocurrir cambios inesperados. Las entradas migradas podrían moverse a sus antiguos grupos o los grupos renombrados podrían no fusionarse. Además las entradas eliminadas podrían reaparecer debido a que no se almacena información sobre los objetos eliminados. ¿Proceder de todas formas?"; + +/* Alert message warning user about KDB file merge */ +"ALERT_MERGE_KDB_FILE_MESSAGE" = "Está fusionando una base de datos KDB"; + +/* Alert message text when plugins or their settings change and require a restart */ +"ALERT_MESSAGE_PLUGINS_CHANGED_SUGGEST_RESTART" = "Configuración de plugin modificada. Reinicie por favor."; + +/* Alert message text to ask the user if he really want to uninstall the plugin. Include %@ placeholder for plugin name */ +"ALERT_MESSAGE_TEXT_REALLY_UNINSTALL_PLUGIN_%@" = "¿Debe desinstalarse realmente el plugin %@?"; + +/* Infromative text of the disabled updates alert! */ +"ALERT_UPDATES_DISABLED_INFORMATIVE_TEXT_%@!" = "¡Las actualizaciones para este Build de %@ están deshabilitadas!"; + +/* Message text for disabled updates alert! */ +"ALERT_UPDATES_DISABLED_MESSAGE_TEXT" = "¡Las actualizaciones están deshabilitadas!"; + +/* Attachments column title (shows counts) + Menu item to toggle display of attachment count column in entry table */ "ATTACHMENTS" = "Adjuntos"; -"CANCEL" = "Cancelar"; -"DATABASE" = "Base de Datos"; -"DELETE" = "Eliminar"; -"EDIT" = "Editar"; -"GROUP" = "Grupo"; -"INSPECTOR" = "Inspector"; -"LOCK" = "Bloquear"; -"MODIFIED" = "Modificado"; -"NONE" = "Ninguno"; -"NOTES" = "Notas"; -"PASSWORD" = "Contraseña"; -"SAVE" = "Guardar"; -"SAVE_WITH_DOTS" = "Guardar…"; -"SEARCH" = "Buscar"; -"TITLE" = "Título"; -"URL" = "URL"; -"USERNAME" = "Nombre de usuario"; -"WINDOWS" = "Ventanas"; +/* Sucessfully merged external changes */ +"AUTO_MERGE_NOTIFICATION_TEXT" = "¡Éxito en la fusión automática!"; + +/* Menu item for automatic trash creation */ +"AUTOCREATE_TRASH_FOLDER" = "Crear automáticamente"; + +/* Message text in the autotype selection window. Placeholder is %1 - windowTitle */ +"AUTOTYPE_CANDIDATE_SELECTION_WINDOW_MESSAGE_%@" = "Hay coincidencias múltiples para la ventana actual: %@. Por favor selecciona cual usar."; + +/* Window title for the stand-alone password creator window */ +"AUTOTYPE_DOCTOR_RESULTS_WINDOW_TITLE" = "Doctor de Autotecleo"; + +/* Inherit autotype settings menu item */ +"AUTOTYPE_INHERIT" = "Heredar Configuración de Autotecleo"; + +/* Message displayed to the user to unlock the database to perform global autotype */ +"AUTOTYPE_MESSAGE_UNLOCK_DATABASE" = "Por favor desbloquee la base de datos para usar el Autotecleo global"; + +/* Disable autotype menu item */ +"AUTOTYPE_NO" = "Deshabilitar Autotecleo"; + +/* Notification: Autotype failed, MacPass has not enough permissions to perform autotype */ +"AUTOTYPE_NOTIFICATION_MACPASS_IS_MISSING_PERMISSIONS" = "Autotecleo no tiene los permisos necesarios"; + +/* Notification: Autotype failed, no documents are open */ +"AUTOTYPE_OVERLAY_NO_DOCUMENTS" = "Debes abrir un archivo para usar Autotecleo Global"; +/* Noticiation: Autotype failed to find a match for %@ (string placeholder) */ +"AUTOTYPE_OVERLAY_NO_MATCH_FOR_%@" = "¡No hay entradas para %@!"; + +/* Notification: Autotype found a single match for %@ (string placeholder). */ +"AUTOTYPE_OVERLAY_SINGLE_MATCH_FOR_%@" = "¡%@ Encontrado!"; + +/* Status lable when no issue were found in accessibilty */ +"AUTOTYPE_STATUS_ACCESSIBILTY_PERMISSIONS_OK" = "MacPass tiene permiso para controlar su ordenador (Accesibilidad)"; + +/* Status MacPass has no accessibilty permissions */ +"AUTOTYPE_STATUS_NO_ACCESSIBILTY_PERMISSIONS" = "MacPass no tiene permiso para controlar su ordenador (Accesibilidad)"; + +/* Status MacPass has no screen recording permissions */ +"AUTOTYPE_STATUS_NO_SCREEN_RECORDING_PERMISSIONS" = "MacPass no tiene permiso para grabar su pantalla"; + +/* Status lable when no issue were found in screen recording permissions */ +"AUTOTYPE_STATUS_SCREEN_RECORDING_PERMISSIONS_OK" = "MacPass tiene permiso para grabar su pantalla"; + +/* Notficication: Autotype timed out */ +"AUTOTYPE_TIMED_OUT" = "El tiempo de autotecleo expiró."; + +/* Enable autotype menu item */ +"AUTOTYPE_YES" = "Habilitar Autotecleo"; + +/* Cancel */ +"CANCEL" = "Cancelar"; + +/* Menu item in the database outline context menu to change the database name */ "CHANGE_DATABASE_NAME" = "Cambiar Nombre de Base"; + +/* Button to postpone the password change */ +"CHANGE_LATER" = "Cambiar más tarde"; + +/* Button to show the password change dialog + Single button to show the password change dialog */ +"CHANGE_PASSWORD_WITH_DOTS" = "Cambiar Contraseña…"; + +/* Menu item in the database outline context menu to change the trash group */ "CHANGE_TRASH_GROUP" = "Cambiar Grupo de Papelera"; -/* Field nam that was copied to the pasteboard */ +/* Button title in the key file selection dialog for selecting a key */ +"CHOOSE_FILE_BUTTON_TITLE" = "Abrir"; + +/* Clear Autotype Button */ +"CLEAR_AUTOTYPE" = "Limpiar Autotecleo"; + +/* Menu to clear recent searches */ +"CLEAR_RECENT_SEARCHES" = "Limpiar búsquedas recientes"; + +/* String displayed at dock badge when clipboard is about to be cleared */ +"CLEARING_PASTEBOARD" = "Vaciado"; + +/* Field name that was copied to the pasteboard */ "COPIED_FIELD_%@" = "%@ copiado"; + +/* Context menu that copies reference to note */ +"COPIED_NOTES_REFERENCE" = "¡Referencia a notas copiada!"; + +/* Password was copied to the pasteboard */ "COPIED_PASSWORD" = "Contraseña copiada"; + +/* Context menu that copies reference to password */ +"COPIED_PASSWORD_REFERENCE" = "¡Referencia a contraseña copiada!"; + +/* Context menu that copies reference to title */ +"COPIED_TITLE_REFERENCE" = "¡Referencia a título copiada!"; + +/* URL was copied to the pasteboard */ "COPIED_URL" = "URL copiada"; + +/* Context menu that copies reference to URL */ +"COPIED_URL_REFERENCE" = "¡Referencia a URL copiada!"; + +/* Username was copied to the pasteboard */ "COPIED_USERNAME" = "Nombre de usuario copiado"; + +/* Context menu that copies reference to username */ +"COPIED_USERNAME_REFERENCE" = "¡Referencia a nombre de usuario copiado!"; + +/* Submenu to copy attributes as reference */ +"COPY_AS_REFERENCE" = "Copiar referencia a…"; + +/* Context menu sub-menu to copy attributes as reference */ +"COPY_AS_REFERENCE_MENU" = "Menú copiar como referencia"; + +/* Submenu to Copy custom fields */ "COPY_CUSTOM_FIELDS" = "Copiar Campos Personalizados"; + +/* Context menu sub-menu to copy custom fields to clipboard */ +"COPY_CUSTOM_FIELDS_MENU" = "Copiar Campo Personalizado…"; + +/* Action name when an entry was moved + Action title for copying an entry via drag and drop */ +"COPY_ENTRY" = "Copiar Entrada"; + +/* Mask for title to copy field value */ "COPY_FIELD_%@" = "Copiar %@"; + +/* Action title for copying a group via drag and drop */ +"COPY_GROUP" = "Copiar Grupo"; + +/* Context menu that copies reference to note */ +"COPY_NOTES_REFERENCE" = "Notas"; + +/* Menu item to copy the password of an entry + Toolbar item copy password */ "COPY_PASSWORD" = "Copiar Contraseña"; -"COPY_URL" = "Copy URL"; + +/* Context menu that copies reference to password */ +"COPY_PASSWORD_REFERENCE" = "Contraseña"; + +/* Context menu that copies reference to title */ +"COPY_TITLE_REFERENCE" = "Título"; + +/* Menu item to copy the URL of an entry */ +"COPY_URL" = "Copiar URL"; + +/* Context menu that copies reference to URL */ +"COPY_URL_REFERENCE" = "URL"; + +/* Menu item to copy the username of an entry + Toolbar item copy username */ "COPY_USERNAME" = "Copiar Nombre de Usuario"; -/* Dock Badge */ -"CLEARING_PASTEBOARD" = "…"; +/* Context menu that copies reference to username */ +"COPY_USERNAME_REFERENCE" = "Nombre de usuario"; -/* Group Inspector */ -/* Autotype Combobox */ -"AUTOTYPE_NO" = "Deshabilitar Autollenado"; -"AUTOTYPE_YES" = "Habilitar Autollenado"; -"AUTOTYPE_INHERIT" = "Heredar Configuración de Autollenado"; +/* Curstom attribute reference item */ +"CUSTOM_ATTRIBUTE" = "Atributo personalizado"; -/* Search Combobox */ -"SEARCH_INHERIT" = "Heredar Configuración de Búsqueda"; -"SEARCH_YES" = "Incluir en Búsqueda"; -"SEARCH_NO" = "Exluir de Búsqueda"; +/* Title for menu for custom search filters */ +"CUSTOM_SEARCH_FILTER_MENU" = "Filtro de búsqueda personalizado…"; -/* - Date/Time Displays - */ -/* Created at template string. %@ is replaced by localized date and time */ -"CREATED_AT_%@" = "Creado: %@"; -/* Modifed at template string. %@ is replaced by localized date and time */ -"MODIFED_AT_%@" = "Modificado: %@"; +/* Default display name for KDB databases */ +"DATABASE" = "Base de Datos"; -"EXPIRES_AT_DATE_%@" = "Expira: %@"; -"NO_EXPIRE_DATE_SET" = "No expira."; +/* Default Browser */ +"DEFAULT_BROWSER" = "Navegador Predeterminado"; -/* - Defaults for new objects - */ +/* Default Titel for new Custom-Fields */ "DEFAULT_CUSTOM_FIELD_TITLE" = "Personalizado"; + +/* Default Value for new Custom-Fields */ "DEFAULT_CUSTOM_FIELD_VALUE" = "Valor"; + +/* Title for a newly created entry */ "DEFAULT_ENTRY_TITLE" = "Nueva Entrada"; + +/* Title for a newly created group */ "DEFAULT_GROUP_NAME" = "Nuevo Grupo"; + +/* Default window title for a new window association */ "DEFAULT_WINDOW_TITLE" = "Título de Ventana"; -/* Settings */ +/* Menu item in the database outline context menu to delete the node from the trash + Menu item to delete an entry + Menu item to delete the selected attached file + Menu item to delete the selected custom icon + Toolbar item delete item */ +"DELETE" = "Eliminar"; + +/* Delete Entry */ +"DELETE_ENTRY" = "Eliminar Entrada"; + +/* Delete Group */ +"DELETE_GROUP" = "Eliminar Grupo"; + +/* Empty Trash */ +"DELETE_TRASHED_ENTRY" = "Eliminar entrada definitivamente"; + +/* Empty Trash */ +"DELETE_TRASHED_GROUP" = "Eliminar grupo definitivamente"; + +/* Action title for copying an entry via drag and drop to another database + Action title for moving an entry via drag and drop */ +"DRAG_ENTRY" = "Arrastrar entrada"; + +/* Action title for moving a group via drag and drop + Actiontitle for copying groups via drag and drop to antother database */ +"DRAG_GROUP" = "Arrastrar grupo"; + +/* Action name for duplicating entries */ +"DUPLICATE_ENTRIES_%ld" = "%ld entradas duplicadas"; + +/* Menu item to directly diplicate an entry */ +"DUPLICATE_ENTRY" = "Duplicar Entrada"; + +/* Menu item to duplicate an entry with options how to duplicate. Will present a dialog. */ +"DUPLICATE_ENTRY_WITH_OPTIONS" = "Duplicar Entrada…"; + +/* Menu item in the database outline context menu to change the template group + Menu item on the add entry context menu to edit template groups */ +"EDIT_TEMPLATE_GROUP" = "Editar Grupo de Plantilla"; + +/* Empty Trash + Menu item in the database outline context menu to empyt the trash + Menu item in the database outline to empty the trash + Menu item to empty the trash */ +"EMPTY_TRASH" = "Vaciar Papelera"; + +/* Informative text for the enforce password change alert */ +"ENFORCE_PASSWORD_CHANGE_ALERT_DESCRIPTION" = "No será posible guardar cambios hsata que la contraseña o el keyfile sean modificados."; + +/* Message text for the enforce password change alert */ +"ENFORCE_PASSWORD_CHANGE_ALERT_TITLE" = "La contraseña de la base de datos ha caducado"; + +/* Group row for entry attributes */ +"ENTRY_CUSTOM_ATTRIBUTES" = "Atributos personalizados"; + +/* Group row for entry attributes */ +"ENTRY_DEFAULT_ATTRIBUTES" = "Atributos por defecto"; + +/* Tooltip displayed on the index header cell */ +"ENTRY_INDEX_COLUMN_TOOLTIP" = "Columna para ordenar definida por usuario"; + +/* Keyfile not valid */ +"ERROR_INVALID_KEYFILE" = "¡El Keyfile no es válido!"; + +/* Error description given when adding an invalid plugin */ +"ERROR_INVALID_PLUGIN" = "Plugin inválido"; + +/* Error description for missing accessibilty permissions */ +"ERROR_NO_ACCESSIBILTY_PERMISSIONS" = "MacPass no tiene permiso para controlar su ordenador (Accesibilidad)"; + +/* Error description for missing screen recording permissions */ +"ERROR_NO_PERMISSION_TO_RECORD_SCREEN" = "MacPass no tiene permiso para grabar su pantalla"; + +/* Passwords do not match */ +"ERROR_PASSWORD_MISSMATCH" = "¡Las contraseñas no coinciden!"; + +/* Passwords do not match, keyfile is invalid */ +"ERROR_PASSWORD_MISSMATCH_INVALID_KEYFILE" = "Las contraseñas no coinciden y el keyfile no es válido"; + +/* Recommend/Enforce key change intervall format */ +"EVERY_%ld_DAYS" = "Cada %ld días"; + +/* Format to returen the date an item expires. Includes %@ placehoder for date */ +"EXPIRES_AT_DATE_%@" = "Caduca: %@"; + +/* The master key was changed by an external program! */ +"EXTERN_CHANGE_OF_MASTERKEY" = "La contraseña maestra se modifico por otro programa"; + +/* External file change strategy option: ask what to do */ +"FILE_CHANGE_STRATEGY_ASK" = "Preguntar"; + +/* External file change strategy option: Keep local file an ignore external changes */ +"FILE_CHANGE_STRATEGY_KEEP_MINE" = "Mantener mi versión e ignorar otros cambios"; + +/* Button in dialog to merge changes into file! + External file change strategy option: Merge external changes into local file. */ +"FILE_CHANGE_STRATEGY_MERGE" = "Fusionar cambios"; + +/* External file change strategy option: Use the changed file and discard local changes */ +"FILE_CHANGE_STRATEGY_USE_OTHER" = "Cargar la versión modificada y descartar la mía"; + +/* Informative text displayed when the file was change from another application */ +"FILE_CHANGED_BY_OTHERS_INFO_TEXT" = "El archivo cargado no coincide con el guardado en el disco. ¿Cómo deseas continuar?"; + +/* Message displayed when an open file was changed from another application */ +"FILE_CHANGED_BY_OTHERS_MESSAGE_TEXT" = "¡El archivo de la base de datos ha sido modificado!"; + +/* Error while reopening last known documents */ +"FILE_OPEN_ERROR" = "¡Error al abrir el archivo!"; + +/* General Settings Label */ "GENERAL_PREFERENCES" = "General"; + +/* Group column title */ +"GROUP" = "Grupo"; + +/* History count column title + Menu item to toggle display of history count column in entry table */ +"HISTORY" = "Historial"; + +/* Imports a dragged URL for a new entry */ +"IMPORT_URL" = "Importar URL"; + +/* Toolbar item toggle inspector */ +"INSPECTOR" = "Inspector"; + +/* Label for the integration settings tab */ "INTEGRATION_SETTINGS" = "Integración"; -"UPDATE_PREFERENCES" = "Actualizaciones"; -"WORKFLOW_SETTINGS" = "Flujo de Trabajo"; -"DEFAULT_BROWSER" = "Navegador Predeterminado"; -"OTHER_BROWSER" = "Seleccionar Navegador…"; -"PLUGIN_SETTINGS" = "Plugins"; -/* Feature not supported in Version */ +/* Just now */ +"JUST_NOW" = "Justo ahora"; + +/* Feature only available in kdbx databases */ "KDBX_ONLY_FEATURE" = "Caraterística no soportada en archivos KDB"; -/* Template */ +/* Button in dialog to ignore the changes to an open file! */ +"KEEP_MINE_DISCARD_OTHER" = "Mantener mis cambios, descartar los cambios externos"; + +/* Button in dialog to reopen the file! */ +"KEEP_OTHER_DISCARD_MINE" = "Descartar mis cambios, recargar archivo"; + +/* Do not install the plugin */ +"KEEP_PLUGIN" = "Mantener el Plugin"; + +/* Do not restart MacPass */ +"KEEP_RUNNING" = "No reiniciar"; + +/* last week */ +"LAST_WEEK" = "La semana pasada"; + +/* Toolbar item to Lock the database */ +"LOCK" = "Bloquear"; + +/* Message in the open panel to add attachments to an entry */ +"MESSAGE_ADD_ATTACHMENT_OPEN_PANEL" = "Seleccionar el archivo a adjuntar"; + +/* Message in the add plugin open panel */ +"MESSAGE_ADD_PLUGIN_OPEN_PANEL" = "Seleccionar el plugin a instalar"; + +/* Message in the open panel to import an XML file */ +"MESSAGE_XML_OPEN_PANEL" = "Seleccionar el archivo XML a importar"; + +/* Menu item to toggle display of modified date column in entry table + Modification date column title */ +"MODIFIED" = "Modificado"; + +/* Action name when an entry was moved */ +"MOVE_ENTRY" = "Mover Entrada"; + +/* Menu displayed as popup selection for search options when multiple items are selected */ +"MULTIPLE_FILTERS_ACTIVE_WITH_DOTS" = "Multiple…"; + +/* Name for a newly created Database */ +"NEW_DATABASE" = "Base de Datos"; + +/* Action name for a newly created entry + Menu item to create a new entry + Toolbar item new entry */ +"NEW_ENTRY" = "Agregar Entrada"; + +/* Submenu to add an entry via template */ +"NEW_ENTRY_WITH_TEMPLATE_%@" = "Crear Entrada con Plantilla %@"; + +/* Action name for a newly created group + Menu item to create a new group + Toolbar item new group */ +"NEW_GROUP" = "Agregar Grupo"; + +/* Expiration date format, when item does not expire */ +"NO_EXPIRE_DATE_SET" = "No caduca."; + +/* Menu item to reset the template groups */ "NO_TEMPLATE_GROUP" = "Sin plantillas"; + +/* Menu item added to show that no templates are defined */ "NO_TEMPLATES" = "No se han encontrado Plantillas"; -/* Kefile */ -"SAVE_KEYFILE" = "Guardar Keyfile"; +/* Null placeholder for item input field + Placeholder text for input fields if no entry or group is selected */ +"NONE" = "Ninguno"; -/* Autoype */ -/* Candiate dialog */ -"SELECT_AUTOTYPE_CANDIDATE" = "Seleccionar candidato"; -"AUTOTYPE_OVERLAY_NO_DOCUMENTS" = "Debes abrir un archivo para usar Autollenado Global"; -"AUTOTYPE_OVERLAY_NO_MATCH_FOR_%@" = "No hay registros para %@!"; -"AUTOTYPE_OVERLAY_SINGLE_MATCH" = "Encontrado"; +/* Displayed name when notes or part of notes was copied + Menu item to toggle display of notes column in entry table + Notes column title + Notes reference item */ +"NOTES" = "Notas"; -/* Alert Dialogs */ -"WARNING_ON_EMPTY_TRASH_DESCRIPTION" = "Vaciar la Papelera es una acción no reversible."; -"WARNING_ON_EMPTY_TRASH_TITLE" = "¿Vaciar Papelera?"; -"WARNING_ON_LOSSY_SAVE" = "Al guardar en formato KDB, se perderán algunos datos."; -"WARNING_ON_LOSSY_SAVE_DESCRIPTION" = "El formato de archivo KDB no permite guardar toda la información."; -"CHANGE_FORMAT" = "Cambiar formato de archivo a KDBX"; +/* Ok Button to dismiss disabled updates alert */ +"OK" = "OK"; -"ENFORCE_PASSWORD_CHANGE_ALERT_TITLE" = "La contraseña de la base de datos ha expirado"; -"ENFORCE_PASSWORD_CHANGE_ALERT_DESCRIPTION" = "No será posible guardar cambios hsata que la contraseña o el keyfile sean modificados."; +/* preset to expire after one montch from now */ +"ONE_MONTH" = "en un mes"; -"RECOMMEND_PASSWORD_CHANGE_ALERT_TITLE" = "Por favor, cambia la contraseña para la base de datos."; -"RECOMMEND_PASSWORD_CHANGE_ALERT_DESCRIPTION" = "Es recomendado cambiar la contraseña y/o el keyfile."; -"CHANGE_PASSWORD_WITH_DOTS" = "Cambiar Contraseña…"; +/* preset to expire after one week from now */ +"ONE_WEEK" = "en una semana"; -"WARNING_ON_SAVE_NO_PASSWORD_OR_KEY_SET" = "No hay contraseña o keyfile establecido."; -"WARNING_ON_SAVE_NO_PASSWORD_OR_KEY_SET_SUGGESTION" = "Por favor genera una contraseña o un keyfile para esta base de datos. Al salir, se perderán todos los cambios y el documento quedará bloqueado."; +/* one week ago */ +"ONE_WEEK_AGO" = "Hace una semana"; -/* Message displayed when an open file was changed from another application */ -"FILE_CHANGED_BY_OTHERS_MESSAGE_TEXT" = "El archivo de la base de datos ha sido modificado"; -/* Informative text displayed when the file was change form another application */ -"FILE_CHANGED_BY_OTHERS_INFO_TEXT" = "El archivo cargado no coincide con el guardado en el disco. ¿Deseas continuar?"; -/* Set the selection as default file change strategy */ -"SET_AS_DEFAULT_FILE_CHANGE_STRATEGY" = "Utilizar la estrategia seleccionada y no volverme a preguntar."; -/* Always show a dialog after an external file change */ -"FILE_CHANGE_STRATEGY_ASK" = "Preguntarme qué hacer"; -/* Button to ignore the changes */ -"KEEP_MINE" = "Conservar versión actual y descartar cambios"; -/* Merge changes into file! */ -"MERGE_CHANGES" = "Unir cambios"; - -/* Password Input Messages, Errors and Warning */ +/* preset to expire after one year from now */ +"ONE_YEAR" = "en un año"; + +/* Open button in the open panel to add attachments to an entry */ +"OPEN_BUTTON_ADD_ATTACHMENT_OPEN_PANEL" = "Adjuntar"; + +/* Open button in the add plugin open panel */ +"OPEN_BUTTON_ADD_PLUGIN_OPEN_PANEL" = "Instalar"; + +/* Open button in the open panel to import an XML file */ +"OPEN_BUTTON_IMPORT_XML_OPEN_PANEL" = "Importar"; + +/* Action button in Notification to open a document */ +"OPEN_DOCUMENT" = "Abrir Documento"; + +/* Menu item to open the URL with the default application */ +"OPEN_URL" = "Abrir URL"; + +/* Select Browser */ +"OTHER_BROWSER" = "Seleccionar Navegador…"; + +/* No comment provided by engineer. */ +"OUTPUT_VALUE" = "Valor de salida"; + +/* Menu item to toggle display of password column in entry table + Password column title + Password reference item */ +"PASSWORD" = "Contraseña"; + +/* Window title for the stand-alone password creator window */ +"PASSWORD_CREATOR_WINDOW_TITLE" = "Generador de contraseña"; + +/* Button to reset the password defaults for a single entry */ +"PASSWORD_GENERATOR_RESET_ENTRY_DEFAULTS" = "Reiniciar"; + +/* Button to set the defaults of the password generator */ +"PASSWORD_GENERATOR_SET_DEFAULTS" = "Configurar Predeterminados"; + +/* Placeholder for the password field to aks for password + Placeholder in the unlock-password input field if password is enabled */ +"PASSWORD_INPUT_ENTER_PASSWORD" = "Introducir Contraseña"; + +/* Placeholder for the password input field if passwords are disabled + Placeholder for the repeat password input if passwords are disabled + Placeholder in the unlock-password input field if password is disabled */ "PASSWORD_INPUT_NO_PASSWORD" = "Sin Contraseña"; -"PASSWORD_INPUT_ENTER_PASSWORD" = "Ingresar Contraseña"; + +/* Placeholder for the repeat password field to aks for the repeated password */ "PASSWORD_INPUT_REPEAT_PASSWORD" = "Repetir Contraseña"; -"WARNING_NO_PASSWORD_OR_KEYFILE" = "Sin contraseña o keyfile"; -"ERROR_PASSWORD_MISSMATCH_INVALID_KEYFILE" = "Las contraseñas no coinciden y el keyfile no es válido"; -"ERROR_PASSWORD_MISSMATCH" = "Las contraseñas no coinciden"; -"ERROR_INVALID_KEYFILE" = "El Keyfile no es válido"; -/* Misc */ -"DOCUMENT_AUTOTYPE_CORRUPTION_WARNING" = "Por favor ejecuta Corregir Autollenado..."; -"FILE_OPEN_ERROR" = "Error al abrir el archivo."; +/* Menu item to perform autotype with the selected entry */ +"PERFORM_AUTOTYPE_FOR_ENTRY" = "Generar Autotecleo"; + +/* Info about how many character has to pick in pickchar dialog */ +"PICKCHAR_INFO_MESSAGE_PICK_CHARACTERS_%ld" = "Por favor seleccione %ld caracteres"; + +/* Window displayed to the user to pick an amout of characters */ +"PICKCHAR_WINDOW_TITLE" = "Selector de caracteres"; + +/* Count of picked characters in pickchars dialog if no limit is set */ +"PICKED_%ld_CHARACTERS" = "Seleccionados %ld caracteres"; + +/* Window displayed to the user to pick an amout of characters */ +"PICKFIELD_WINDOW_TITLE" = "Selector de campo"; + +/* Label for the button when a download is in progress! */ +"PLUGIN_BROWSER_ACTION_DOWNLOAD_IN_PROGRESS" = "Descargando…"; + +/* Label for the button when a download did not succeed */ +"PLUGIN_BROWSER_ACTION_RETRY_FAILED_DOWNLOAD" = "Error. Volver a descargar"; + +/* Label for the button to show a downloaded file */ +"PLUGIN_BROWSER_ACTION_SHOW_DOWNLOADED_FILE" = "Mostrar en el Finder…"; + +/* Button to download the Plugin */ +"PLUGIN_BROWSER_DOWNLOAD_PLUGIN_BUTTON" = "Descargar"; + +/* Status for an up-to-date plugin in the plugin browser */ +"PLUGIN_BROWSER_LATEST_VERSION_INSTALLED" = "Última versión instalada"; + +/* Status for an outdated plugin version in the plugin browser */ +"PLUGIN_BROWSER_NEWER_VERSION_%@_AVAILABLE" = "Disponible nueva versión(%@)."; + +/* Status for an uninstalled plugin in the plugin browser */ +"PLUGIN_BROWSER_PLUGIN_NOT_INSTALLED" = "No instalado"; + +/* Status for an unkonw plugin version in the plugin browser */ +"PLUGIN_BROWSER_UNKNOWN_PLUGIN_VERSION_INSTALLED_%@" = "Instalada versión(%@) desconocida"; + +/* Error for a plugin that is disabled. */ +"PLUGIN_ERROR_DISABLED_PLUGIN" = "El plugin está deshabilitado por el usuario"; + +/* Plugin is not with this version of MacPass */ +"PLUGIN_ERROR_HOST_VERSION_NOT_SUPPORTED" = "El plugin no es compatible con esta versión de MacPass"; + +/* The plugin could not be initalized */ +"PLUGIN_ERROR_INTILIZATION_FAILED" = "El plugin no puede ser inicializado"; + +/* Error for a plugin that was not signed properly */ +"PLUGIN_ERROR_UNSECURE_PLUGIN" = "El plugin no está firmado correctamente"; + +/* Plugin specifies the wrong principla class! */ +"PLUGIN_ERROR_WRONG_PRINCIPAL_CLASS" = "Clase principal en el plugin inesperada"; + +/* name for disabled unloaded plugin */ +"PLUGIN_NAME_DISABLED_%@" = "🚫 %@"; + +/* Name for unloaded plugin with errors */ +"PLUGIN_NAME_ERROR_%@" = "⚠️ %@"; + +/* Label for plugin settings tab */ +"PLUGIN_SETTINGS" = "Plugins"; + +/* Generic message displayed if no details are know why a plugin was not loaded. */ +"PLUGIN_SETTINGS_GENERIC_ERROR_MESSAGE" = "El plugin no puede ser cargado."; + +/* Plugin version. Include a %@ placeholder for version string */ +"PLUGIN_VERSION_%@" = "Versión: %@"; + +/* Menu item to preview the selected attached file. */ +"PREVIEW" = "Vista Previa"; + +/* Recent searches menu item */ +"RECENT_SEARCHES" = "Búsquedas recientes"; + +/* Informative text for the recommend password change alert */ +"RECOMMEND_PASSWORD_CHANGE_ALERT_DESCRIPTION" = "Se recomienda cambiar la contraseña y/o el keyfile."; + +/* Message text for the recommend password change alert */ +"RECOMMEND_PASSWORD_CHANGE_ALERT_TITLE" = "¡Por favor, cambia la contraseña de la base de datos!"; + +/* Restart */ +"RESTART" = "Reiniciar"; + +/* Action to restore and Entry to a previous state of it's history */ +"RESTORE_HISTORY_ENTRY" = "Restablecer entrada de historial"; + +/* Menu item to save the selected attached file. + Save file menu item title when save will just save the file */ +"SAVE" = "Guardar"; + +/* Button title to save the generated key file */ +"SAVE_KEYFILE" = "Guardar Keyfile"; + +/* Save file menu item title when save will prompt for a location to save or ask for a password/key */ +"SAVE_WITH_DOTS" = "Guardar…"; + +/* Search input in Toolbar */ +"SEARCH" = "Buscar"; + +/* Search option: Find duplicate passwords */ +"SEARCH_DUPLICATE_PASSWORDS" = "Contraseñas duplicadas"; + +/* Search option: Find expired entries */ +"SEARCH_EXPIRED_ENTRIES" = "Caducados"; + +/* Inherit search settings menu item */ +"SEARCH_INHERIT" = "Heredar Configuración de Búsqueda"; + +/* Disable search menu item */ +"SEARCH_NO" = "Exluir de Búsqueda"; + +/* No comment provided by engineer. */ +"SEARCH_VALUE" = "Search Value"; + +/* Enable search menu item */ +"SEARCH_YES" = "Incluir en Búsqueda"; + +/* Menu item title for the expiry preset selection menu in the date picker */ +"SELECT_DATE_PRESET" = "Usar predefinido…"; + +/* Message on the open panel for selecting which browser to use for opening URLs */ +"SELECT_DEFAULT_BROWSER_OPEN_PANEL_MESSAGE" = "Seleccionar el navegador por defecto para abrir URLs."; + +/* Label for the select browser button on the open panel for selecting which browser to use for opening URLs */ +"SELECT_DEFAULT_BROWSER_OPEN_PANEL_SELECT_BUTTON" = "Seleccionar"; + +/* Message for the dialog to open a file for merge */ +"SELECT_FILE_TO_MERGE" = "Seleccionar fichero a fusionar"; + +/* Menu displayed as popup selection for search options if no filter is selected */ +"SELECT_FILTER_WITH_DOTS" = "Seleccionar…"; + +/* Checkbox in dialog to set the selection as default file change strategy! */ +"SET_AS_DEFAULT_FILE_CHANGE_STRATEGY" = "Utilizar la estrategia seleccionada por defecto. Se puede modificar en cualquier momento en preferencias"; + +/* Action button in Notification to show the Autotype Doctor */ +"SHOW_AUTOTYPE_DOCTOR" = "Mostrar Doctor de Autotecleo"; + +/* Menu item to show the history of the selected entry + Toolbar item to toggle history display */ +"SHOW_HISTORY" = "Mostrar Historial"; + +/* Displayed name when title field was copied + Menu item to toggle display of title column in entry table + Title column title + Title reference item */ +"TITLE" = "Título"; + +/* preset to expire tomorrow */ +"TOMORROW" = "Mañana"; + +/* Toolbar item to perform autotype */ +"TOOLBAR_PERFORM_AUTOTYPE_FOR_ENTRY" = "Autotecleo"; + +/* Touchbar button label for choosing the keyfile */ +"TOUCHBAR_CHOOSE_KEYFILE" = "Seleccionar Keyfile"; + +/* Touchbar button label for copying the password */ +"TOUCHBAR_COPY_PASSWORD" = "Copiar Contraseña"; + +/* Touchbar button label for copying the username */ +"TOUCHBAR_COPY_USERNAME" = "Copiar Nombre de usuario"; + +/* Touchbar button label for deleting elements */ +"TOUCHBAR_DELETE" = "Eliminar"; + +/* Touchbar button label for opening the popover to edit */ +"TOUCHBAR_EDIT" = "Editar"; + +/* Touchbar button label for locking the database */ +"TOUCHBAR_LOCK_DATABASE" = "Bloquear Base de datos"; + +/* Touchbar button label for creating a new item */ +"TOUCHBAR_NEW_ENTRY" = "Nueva Entrada"; + +/* Touchbar button label for creating a new group */ +"TOUCHBAR_NEW_GROUP" = "Nuevo Grupo"; + +/* Touchbar button label for performing autotype */ +"TOUCHBAR_PERFORM_AUTOTYPE" = "Autoteclear"; + +/* Touchbar button label for searching the database */ +"TOUCHBAR_SEARCH" = "Buscar Base de datos"; + +/* Touchbar button label for showing the password */ +"TOUCHBAR_SHOW_PASSWORD" = "Mostrar Contraseña"; + +/* Touchbar button label for unlocking the database */ +"TOUCHBAR_UNLOCK_DATABASE" = "Desbloquear Base de datos"; + +/* Move Entry to Trash */ +"TRASH_ENTRY" = "Entrada a Papelera"; + +/* Move Group to Trash */ +"TRASH_GROUP" = "Grupo a Papelera"; + +/* Uninstall plugin */ +"UNINSTALL" = "Desinstalar"; + +/* No comment provided by engineer. */ +"UNKNOWN_FILE_VERSION" = "Versión de base de datos desconocida"; + +/* Unknown database format. */ +"UNKNOWN_FORMAT" = "Formato de archivo desconocido"; + +/* Database format is unknown since the file is not saved yet */ +"UNKNOWN_FORMAT_FILE_NOT_SAVED_YET" = "Desconocido, la base de datos no se ha guardado todavía"; + +/* No comment provided by engineer. */ +"UNKNOWN_TOOLBAR_ITEM" = "Item de barra de herramientas desconocido"; + +/* Update Settings Label */ +"UPDATE_PREFERENCES" = "Actualizaciones"; + +/* Menu item to toggle display of url column in entry table + Submenu with options what to do with the URL of an entry + Url column title + URL reference item */ +"URL" = "URL"; + +/* Menu item to toggle display of username column in entry table + Username column title + Username reference item */ +"USERNAME" = "Nombre de usuario"; + +/* Displayed name when uuid field was copied + UUID reference item */ +"UUID" = "UUID"; + +/* No Key or Password */ +"WARNING_NO_PASSWORD_OR_KEYFILE" = "¡Sin contraseña o keyfile!"; + +/* Informative Text displayed when clearing the Trash */ +"WARNING_ON_DELETE_TRASHED_NODE_DESCRIPTION" = "¡Los elementos de la papelera se eliminarán definitivamente!"; + +/* Message text for the alert displayed when deleting a node */ +"WARNING_ON_DELETE_TRASHED_NODE_TITLE" = "Eliminando elementos de la papelera"; + +/* Informative Text displayed when clearing the Trash */ +"WARNING_ON_EMPTY_TRASH_DESCRIPTION" = "Vaciar la Papelera es una acción irreversible."; + +/* Message text for the alert displayed when clearing the Trash */ +"WARNING_ON_EMPTY_TRASH_TITLE" = "¿Vaciar Papelera?"; + +/* No comment provided by engineer. */ +"WARNING_ON_SAVE_NO_PASSWORD_OR_KEY_SET" = "No hay contraseña o keyfile establecido."; + +/* No comment provided by engineer. */ +"WARNING_ON_SAVE_NO_PASSWORD_OR_KEY_SET_SUGGESTION" = "Por favor genera una contraseña o un keyfile para esta base de datos. Si cancela, se perderán todos los cambios y el documento quedará bloqueado."; + +/* Label for the workflow settings tab */ +"WORKFLOW_SETTINGS" = "Flujo de Trabajo"; + +/* Yesterday */ +"YESTERDAY" = "Ayer"; + diff --git a/MacPass/es.lproj/Localizable.stringsdict b/MacPass/es.lproj/Localizable.stringsdict new file mode 100644 index 000000000..e0d9317fa --- /dev/null +++ b/MacPass/es.lproj/Localizable.stringsdict @@ -0,0 +1,96 @@ + + + + + %ld_CHARACTERS_TO_PICK_REMAINING + + NSStringLocalizedFormatKey + %#@characters@ + characters + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + one + Queda un carácter + other + %ld caracteres restantes + zero + Todos los caracteres seleccionados + + + DUPLICATE_ENTRIES_%ld + + NSStringLocalizedFormatKey + %#@entries@ + entries + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + one + Entrada duplicada + other + Entradas duplicadas + zero + Entradas duplicadas + + + EVERY_%ld_DAYS + + NSStringLocalizedFormatKey + %#@days@ + days + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + one + todos los días + other + cada %ld días + zero + después de cada desbloqueo + + + PICKCHAR_INFO_MESSAGE_PICK_CHARACTERS_%ld + + NSStringLocalizedFormatKey + %#@characters@ + characters + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + one + Por favor seleccione un único carácter + other + Por favor seleccione %ld caracteres + zero + Por favor seleccione los caracteres a usar + + + PICKED_%ld_CHARACTERS + + NSStringLocalizedFormatKey + %#@characters@ + characters + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + one + %ld carácter seleccionados + other + %ld caracteres seleccionados + zero + No se han seleccionado caracteres + + + + diff --git a/MacPass/es.lproj/MainMenu.strings b/MacPass/es.lproj/MainMenu.strings index 34602c2d6..e6dfb27ef 100644 --- a/MacPass/es.lproj/MainMenu.strings +++ b/MacPass/es.lproj/MainMenu.strings @@ -1,3 +1,11 @@ +/* Class = "NSMenuItem"; title = "Focus Entries"; ObjectID = "2VP-vB-IeX"; */ +"2VP-vB-IeX.title" = "Resaltar Entradas"; + +/* Class = "NSMenuItem"; title = "Item"; ObjectID = "3st-rv-EeQ"; */ +"3st-rv-EeQ.title" = "Item"; + +/* Class = "NSMenu"; title = "Import"; ObjectID = "4q9-u1-pcm"; */ +"4q9-u1-pcm.title" = "Importar"; /* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "5"; */ "5.title" = "Mandar al Frente"; @@ -35,7 +43,7 @@ /* Class = "NSMenu"; title = "File"; ObjectID = "81"; */ "81.title" = "Archivo"; -/* Class = "NSMenuItem"; title = "New"; ObjectID = "82"; */ +/* Class = "NSMenuItem"; title = "New Database"; ObjectID = "82"; */ "82.title" = "Nuevo"; /* Class = "NSMenuItem"; title = "File"; ObjectID = "83"; */ @@ -131,7 +139,7 @@ /* Class = "NSMenuItem"; title = "Toggle Inspector"; ObjectID = "1181"; */ "1181.title" = "Mostrar Inspector"; -/* Class = "NSMenuItem"; title = "Show Password Creator"; ObjectID = "1200"; */ +/* Class = "NSMenuItem"; title = "Password Generator"; ObjectID = "1200"; */ "1200.title" = "Mostrar Generador de Contraseñas"; /* Class = "NSMenuItem"; title = "Change Master Password…"; ObjectID = "1203"; */ @@ -143,29 +151,48 @@ /* Class = "NSMenuItem"; title = "Save As…"; ObjectID = "1243"; */ "1243.title" = "Guardar Como…"; -/* Class = "NSMenuItem"; title = "Export As XML…"; ObjectID = "1259"; */ +/* Class = "NSMenuItem"; title = "XML…"; ObjectID = "1259"; */ "1259.title" = "Exportar como XML…"; /* Class = "NSMenuItem"; title = "Lock"; ObjectID = "1261"; */ "1261.title" = "Bloquear"; -/* Class = "NSMenuItem"; title = "Focus Entries"; ObjectID = "2VP-vB-IeX"; */ -"2VP-vB-IeX.title" = "Resaltar Entradas"; +/* Class = "NSMenuItem"; title = "Import"; ObjectID = "aTb-sW-nUd"; */ +"aTb-sW-nUd.title" = "Importar"; + +/* Class = "NSMenuItem"; title = "Quicklook"; ObjectID = "aVO-9F-Lwc"; */ +"aVO-9F-Lwc.title" = "Vista Rápida"; /* Class = "NSMenuItem"; title = "Focus Groups"; ObjectID = "HxM-dV-LIH"; */ "HxM-dV-LIH.title" = "Resaltar Grupos"; -/* Class = "NSMenuItem"; title = "Focus Inspector"; ObjectID = "Zje-Me-5c8"; */ -"Zje-Me-5c8.title" = "Restaltar Inspector"; - -/* Class = "NSMenuItem"; title = "Quicklook"; ObjectID = "aVO-9F-Lwc"; */ -"aVO-9F-Lwc.title" = "Vista Rápida"; +/* Class = "NSMenuItem"; title = "Save a Copy…"; ObjectID = "i24-Gn-j9c"; */ +"i24-Gn-j9c.title" = "Guardar una copia..."; /* Class = "NSMenuItem"; title = "Fix Autotype…"; ObjectID = "nx7-Vf-LiD"; */ "nx7-Vf-LiD.title" = "Corregir Autollenado…"; -/* Class = "NSMenuItem"; title = "Import XML…"; ObjectID = "rW0-r1-QYL"; */ +/* Class = "NSMenu"; title = "Export"; ObjectID = "p8h-Fg-h1O"; */ +"p8h-Fg-h1O.title" = "Exportar"; + +/* Class = "NSMenuItem"; title = "XML…"; ObjectID = "rW0-r1-QYL"; */ "rW0-r1-QYL.title" = "Importar XML…"; +/* Class = "NSMenu"; title = "Item"; ObjectID = "Ttt-tR-emo"; */ +"Ttt-tR-emo.title" = "Item"; + +/* Class = "NSMenuItem"; title = "Export"; ObjectID = "tz9-yK-pOf"; */ +"tz9-yK-pOf.title" = "Exportar"; + +/* Class = "NSMenuItem"; title = "Focus Inspector"; ObjectID = "Zje-Me-5c8"; */ +"Zje-Me-5c8.title" = "Restaltar Inspector"; + /* Class = "NSMenuItem"; title = "Check for Updates…"; ObjectID = "zMO-8r-g5v"; */ "zMO-8r-g5v.title" = "Buscar Actualizaciones…"; + +/* Class = "NSMenuItem"; title = "Merge With…"; ObjectID = "zvE-0h-UxI"; */ +"zvE-0h-UxI.title" = "Fusionar con..."; + +/* Class = "NSMenuItem"; title = "Autotype Doctor"; ObjectID = "zWx-Re-iuJ"; */ +"zWx-Re-iuJ.title" = "Doctor de Autotecleo"; + diff --git a/MacPass/es.lproj/OpenPanelAccessoryView.strings b/MacPass/es.lproj/OpenPanelAccessoryView.strings new file mode 100644 index 000000000..89bb579ba --- /dev/null +++ b/MacPass/es.lproj/OpenPanelAccessoryView.strings @@ -0,0 +1,6 @@ +/* Class = "NSButtonCell"; title = "Show hidden files"; ObjectID = "FfY-KA-8IC"; */ +"FfY-KA-8IC.title" = "Mostrar archivos ocultos"; + +/* Class = "NSButtonCell"; title = "Allow all files"; ObjectID = "tvV-1s-Be3"; */ +"tvV-1s-Be3.title" = "Permitir todos los archivos"; + diff --git a/MacPass/es.lproj/PasswordCreatorView.strings b/MacPass/es.lproj/PasswordCreatorView.strings index 86dcd3de7..a0e9bc7d2 100644 --- a/MacPass/es.lproj/PasswordCreatorView.strings +++ b/MacPass/es.lproj/PasswordCreatorView.strings @@ -1,11 +1,10 @@ - /* Class = "NSTextFieldCell"; title = "Password:"; ObjectID = "149"; */ "149.title" = "Contraseña:"; /* Class = "NSTextFieldCell"; title = "Length:"; ObjectID = "179"; */ "179.title" = "Longitud:"; -/* Class = "NSBox"; title = "Allowed Characters"; ObjectID = "332"; */ +/* Class = "NSBox"; title = "Character options"; ObjectID = "332"; */ "332.title" = "Caracteres Permitidos"; /* Class = "NSButtonCell"; title = "A-Z"; ObjectID = "453"; */ @@ -37,3 +36,13 @@ /* Class = "NSTextFieldCell"; title = "25000 bit"; ObjectID = "653"; */ "653.title" = "25000 bit"; + +/* Class = "NSButtonCell"; title = "Use default only for selected entry"; ObjectID = "cfZ-5F-Nge"; */ +"cfZ-5F-Nge.title" = "Establecer por defecto solo para la entrada seleccionada"; + +/* Class = "NSButtonCell"; title = "Use characters from every group"; ObjectID = "CMc-Uh-Fo5"; */ +"CMc-Uh-Fo5.title" = "Usar caracteres de todos los grupos"; + +/* Class = "NSButtonCell"; title = "Set Default"; ObjectID = "Wvs-Md-Ob8"; */ +"Wvs-Md-Ob8.title" = "Establecer por defecto"; + diff --git a/MacPass/es.lproj/PasswordEditWindow.strings b/MacPass/es.lproj/PasswordEditWindow.strings index 26465282c..b62b293d2 100644 --- a/MacPass/es.lproj/PasswordEditWindow.strings +++ b/MacPass/es.lproj/PasswordEditWindow.strings @@ -1,5 +1,4 @@ - -/* Class = "NSWindow"; title = "Window"; ObjectID = "1"; */ +/* Class = "NSWindow"; title = "Change Password"; ObjectID = "1"; */ "1.title" = "Ventana"; /* Class = "NSTextFieldCell"; title = "Missmatching Passwords"; ObjectID = "14"; */ @@ -28,3 +27,4 @@ /* Class = "NSButtonCell"; title = "Password:"; ObjectID = "OQz-DA-SoY"; */ "OQz-DA-SoY.title" = "Contraseña:"; + diff --git a/MacPass/es.lproj/PasswordInputView.strings b/MacPass/es.lproj/PasswordInputView.strings index fb39d812a..39ff27139 100644 --- a/MacPass/es.lproj/PasswordInputView.strings +++ b/MacPass/es.lproj/PasswordInputView.strings @@ -1,12 +1,18 @@ - /* Class = "NSButtonCell"; title = "Unlock"; ObjectID = "3"; */ "3.title" = "Desbloquear"; /* Class = "NSTextFieldCell"; title = "Keyfile"; ObjectID = "18"; */ "18.title" = "Keyfile"; -/* Class = "NSTextFieldCell"; title = "Password"; ObjectID = "IU9-5u-jn9"; */ -"IU9-5u-jn9.title" = "Contraseña"; - /* Class = "NSTextFieldCell"; title = "Wrong password!"; ObjectID = "269"; */ "269.title" = "Contraseña Incorrecta"; + +/* Class = "NSSecureTextFieldCell"; placeholderString = "Enter Password"; ObjectID = "339"; */ +"339.placeholderString" = "Introducir contraseña"; + +/* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "erj-mR-UyO"; */ +"erj-mR-UyO.title" = "Cancelar"; + +/* Class = "NSButtonCell"; title = "Password"; ObjectID = "IU9-5u-jn9"; */ +"IU9-5u-jn9.title" = "Contraseña"; + diff --git a/MacPass/es.lproj/PickcharsView.strings b/MacPass/es.lproj/PickcharsView.strings new file mode 100644 index 000000000..157f1ce7e --- /dev/null +++ b/MacPass/es.lproj/PickcharsView.strings @@ -0,0 +1,18 @@ +/* Class = "NSButtonCell"; title = "Submit"; ObjectID = "8vP-Ka-vsA"; */ +"8vP-Ka-vsA.title" = "Enviar"; + +/* Class = "NSButtonCell"; title = "Reset"; ObjectID = "Emo-pg-Mfe"; */ +"Emo-pg-Mfe.title" = "Resetear"; + +/* Class = "NSTextFieldCell"; title = "StatusLabel"; ObjectID = "M3h-q8-FLO"; */ +"M3h-q8-FLO.title" = "Etiqueta de estado"; + +/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "pUG-4c-rTt"; */ +"pUG-4c-rTt.title" = "Celda de texto"; + +/* Class = "NSTextFieldCell"; title = "MessageLabel"; ObjectID = "sHz-kg-YJQ"; */ +"sHz-kg-YJQ.title" = "Etiqueta de mensaje"; + +/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "v3T-2f-yWm"; */ +"v3T-2f-yWm.title" = "Celda de tabla"; + diff --git a/MacPass/es.lproj/PickfieldView.strings b/MacPass/es.lproj/PickfieldView.strings new file mode 100644 index 000000000..2cf72d168 --- /dev/null +++ b/MacPass/es.lproj/PickfieldView.strings @@ -0,0 +1,24 @@ +/* Class = "NSTableColumn"; headerCell.title = "Field"; ObjectID = "0H9-DW-Jyj"; */ +"0H9-DW-Jyj.headerCell.title" = "Campo"; + +/* Class = "NSButtonCell"; title = "Select"; ObjectID = "6Wi-9i-Tcb"; */ +"6Wi-9i-Tcb.title" = "Seleccionar"; + +/* Class = "NSTextFieldCell"; title = "Please pick a field value to be inserted"; ObjectID = "aJS-22-6Va"; */ +"aJS-22-6Va.title" = "Por favor selecciona un valor para insertar"; + +/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "e8U-mE-mZh"; */ +"e8U-mE-mZh.title" = "Celda de tabla"; + +/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "fil-tT-GXX"; */ +"fil-tT-GXX.title" = "Celda de texto"; + +/* Class = "NSTextFieldCell"; title = "Header View Cell"; ObjectID = "kTy-VO-Xlg"; */ +"kTy-VO-Xlg.title" = "Celda de cabecera"; + +/* Class = "NSTableColumn"; headerCell.title = "Value"; ObjectID = "rVo-ud-5fs"; */ +"rVo-ud-5fs.headerCell.title" = "Valor"; + +/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "z1F-Bi-PBg"; */ +"z1F-Bi-PBg.title" = "Celda de texto"; + diff --git a/MacPass/es.lproj/PluginDataView.strings b/MacPass/es.lproj/PluginDataView.strings new file mode 100644 index 000000000..340af2f96 --- /dev/null +++ b/MacPass/es.lproj/PluginDataView.strings @@ -0,0 +1,15 @@ +/* Class = "NSButtonCell"; title = "Remove All"; ObjectID = "6hH-Hc-gf4"; */ +"6hH-Hc-gf4.title" = "Eliminar todo"; + +/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "bG1-Sb-Xyp"; */ +"bG1-Sb-Xyp.title" = "Celda de texto"; + +/* Class = "NSTextFieldCell"; placeholderString = "Title"; ObjectID = "MaV-TP-92X"; */ +"MaV-TP-92X.placeholderString" = "Título"; + +/* Class = "NSTextFieldCell"; placeholderString = "Value"; ObjectID = "mLw-O5-6D3"; */ +"mLw-O5-6D3.placeholderString" = "Valor"; + +/* Class = "NSTextFieldCell"; title = "Plugin data"; ObjectID = "unO-bO-8v0"; */ +"unO-bO-8v0.title" = "Datos del plugin"; + diff --git a/MacPass/es.lproj/PluginPreferences.strings b/MacPass/es.lproj/PluginPreferences.strings index 2e5f8f562..5441f4020 100644 --- a/MacPass/es.lproj/PluginPreferences.strings +++ b/MacPass/es.lproj/PluginPreferences.strings @@ -1,15 +1,33 @@ - -/* Class = "NSTextFieldCell"; title = "If enabled, only properly signed Plugins will be loaded. Keep in mind, that Plugins have full access to your data! Changes take affect on restart."; ObjectID = "2bX-8S-9XM"; */ +/* Class = "NSTextFieldCell"; title = "If enabled, Plugins without proper signatures will be allowed to load. Keep in mind, that Plugins have full access to your data! Changes take affect on restart."; ObjectID = "2bX-8S-9XM"; */ "2bX-8S-9XM.title" = "Si se habilita, solo los Plugins propiamente firmados serán cargados. Ten en mente que los Plugins tenrán acceso a tu información. Es necesario reiniciar para aplicar los cambios."; /* Class = "NSButtonCell"; title = "Load unsecure Plugins"; ObjectID = "C4B-6z-ZqX"; */ "C4B-6z-ZqX.title" = "Cargar Plugins no seguros"; +/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "fug-79-n9g"; */ +"fug-79-n9g.title" = "Vista de tabla de campos"; + +/* Class = "NSTextFieldCell"; title = "If enabled, a remote connection is established to macpassapp.org"; ObjectID = "i3S-9b-Bpf"; */ +"i3S-9b-Bpf.title" = "Si se habilita, se establece una conexión a macpassapp.org"; + +/* Class = "NSTextFieldCell"; title = "Plugin Settings Info"; ObjectID = "OOr-SW-jZb"; */ +"OOr-SW-jZb.title" = "Información de configuración del plugin"; + +/* Class = "NSButtonCell"; title = "Browse Available Plugins…"; ObjectID = "sqO-8H-n1y"; */ +"sqO-8H-n1y.title" = "Navegar por los plugins disponibles..."; + /* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "STt-PQ-Szr"; */ "STt-PQ-Szr.title" = "Campo de Texto"; -/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "fug-79-n9g"; */ -"fug-79-n9g.title" = "Vista de tabla de campos"; +/* Class = "NSButtonCell"; title = "Download current plugin information"; ObjectID = "uHR-uL-Ddm"; */ +"uHR-uL-Ddm.title" = "Descargar la información del plugin actual"; /* Class = "NSBox"; title = "Box"; ObjectID = "vBs-Ga-aq0"; */ "vBs-Ga-aq0.title" = "Caja"; + +/* Class = "NSButtonCell"; title = "Force loading of incompatible Plugins"; ObjectID = "yak-fS-jtA"; */ +"yak-fS-jtA.title" = "Forzar la carga de los plugins incompatibles"; + +/* Class = "NSTextFieldCell"; title = "Label"; ObjectID = "yuK-qH-jxx"; */ +"yuK-qH-jxx.title" = "Etiqueta"; + diff --git a/MacPass/es.lproj/PluginRepositoryBrowserView.strings b/MacPass/es.lproj/PluginRepositoryBrowserView.strings new file mode 100644 index 000000000..254b18850 --- /dev/null +++ b/MacPass/es.lproj/PluginRepositoryBrowserView.strings @@ -0,0 +1,42 @@ +/* Class = "NSButtonCell"; title = "Action"; ObjectID = "6jQ-Uk-uqD"; */ +"6jQ-Uk-uqD.title" = "Acción"; + +/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "cFE-KE-Xjx"; */ +"cFE-KE-Xjx.title" = "Celda de texto"; + +/* Class = "NSTextFieldCell"; title = "Updated at"; ObjectID = "DhR-ED-6gV"; */ +"DhR-ED-6gV.title" = "Actualizado el"; + +/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "DRt-Gz-DUm"; */ +"DRt-Gz-DUm.title" = "Celda de tabla"; + +/* Class = "NSTableColumn"; headerCell.title = "Status"; ObjectID = "g1Q-BS-vCR"; */ +"g1Q-BS-vCR.headerCell.title" = "Estado"; + +/* Class = "NSTableColumn"; headerCell.title = "Latest Version"; ObjectID = "hFg-AD-SqD"; */ +"hFg-AD-SqD.headerCell.title" = "Última versión"; + +/* Class = "NSButtonCell"; title = "Done"; ObjectID = "j9a-fn-Pye"; */ +"j9a-fn-Pye.title" = "Hecho"; + +/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "nc9-mo-2e5"; */ +"nc9-mo-2e5.title" = "Celda de tabla"; + +/* Class = "NSTextFieldCell"; title = "Last updated:"; ObjectID = "ntD-sJ-NRw"; */ +"ntD-sJ-NRw.title" = "Última actualización:"; + +/* Class = "NSTableColumn"; headerCell.title = "Plugin"; ObjectID = "Nzo-rR-Hfx"; */ +"Nzo-rR-Hfx.headerCell.title" = "Plugin"; + +/* Class = "NSButtonCell"; title = "Refresh"; ObjectID = "NZw-nO-lZ3"; */ +"NZw-nO-lZ3.title" = "Refrescar"; + +/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "Pl1-4o-5uY"; */ +"Pl1-4o-5uY.title" = "Celda de texto"; + +/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "QPj-W1-su1"; */ +"QPj-W1-su1.title" = "Celda de texto"; + +/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "ZIf-CU-gh7"; */ +"ZIf-CU-gh7.title" = "Celda de tabla"; + diff --git a/MacPass/es.lproj/ReferenceBuilderView.strings b/MacPass/es.lproj/ReferenceBuilderView.strings index 673b20262..bd66a22c7 100644 --- a/MacPass/es.lproj/ReferenceBuilderView.strings +++ b/MacPass/es.lproj/ReferenceBuilderView.strings @@ -1,15 +1,8 @@ - -/* Class = "NSMenuItem"; title = "Get"; ObjectID = "142-bE-IMZ"; */ -"142-bE-IMZ.title" = "Obtener"; - /* Class = "NSTextFieldCell"; title = "Match"; ObjectID = "9ce-da-syF"; */ "9ce-da-syF.title" = "Coincidir"; -/* Class = "NSTextFieldCell"; title = "Key"; ObjectID = "K1t-OZ-ACe"; */ -"K1t-OZ-ACe.title" = "Llave"; - -/* Class = "NSButtonCell"; title = "Use"; ObjectID = "Kqx-qm-nMG"; */ -"Kqx-qm-nMG.title" = "Usar"; +/* Class = "NSMenuItem"; title = "Get"; ObjectID = "142-bE-IMZ"; */ +"142-bE-IMZ.title" = "Obtener"; /* Class = "NSTextFieldCell"; placeholderString = "Reference"; ObjectID = "dr9-x8-kKk"; */ "dr9-x8-kKk.placeholderString" = "Referencia"; @@ -20,8 +13,15 @@ /* Class = "NSTextFieldCell"; title = "Reference String"; ObjectID = "gik-Ha-hRd"; */ "gik-Ha-hRd.title" = "Valor Referencial"; +/* Class = "NSTextFieldCell"; title = "Key"; ObjectID = "K1t-OZ-ACe"; */ +"K1t-OZ-ACe.title" = "Llave"; + +/* Class = "NSButtonCell"; title = "Use"; ObjectID = "Kqx-qm-nMG"; */ +"Kqx-qm-nMG.title" = "Usar"; + /* Class = "NSTextFieldCell"; title = "Reference"; ObjectID = "r1V-VE-ngy"; */ "r1V-VE-ngy.title" = "Referencia"; /* Class = "NSMenuItem"; title = "Matching"; ObjectID = "yT1-XL-k6a"; */ "yT1-XL-k6a.title" = "Coincidente"; + diff --git a/MacPass/es.lproj/SavePanelAccessoryView.strings b/MacPass/es.lproj/SavePanelAccessoryView.strings new file mode 100644 index 000000000..6fd7d18a2 --- /dev/null +++ b/MacPass/es.lproj/SavePanelAccessoryView.strings @@ -0,0 +1,15 @@ +/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "4"; */ +"4.title" = "Otras vistas"; + +/* Class = "NSMenuItem"; title = "KeePass 1 (KDB)"; ObjectID = "5"; */ +"5.title" = "KeePass 1 (KDB)"; + +/* Class = "NSMenuItem"; title = "KeePass 2 (KDBX)"; ObjectID = "6"; */ +"6.title" = "KeePass 2 (KDBX)"; + +/* Class = "NSTextFieldCell"; title = "Format:"; ObjectID = "12"; */ +"12.title" = "Formato:"; + +/* Class = "NSTextFieldCell"; title = "Not all Information inside your current database can be stored with this format."; ObjectID = "52"; */ +"52.title" = "No toda la información de tu base de datos puede ser guardada en este formato."; + diff --git a/MacPass/es.lproj/UpdatePreferences.strings b/MacPass/es.lproj/UpdatePreferences.strings index f46571adc..dbdf846df 100644 --- a/MacPass/es.lproj/UpdatePreferences.strings +++ b/MacPass/es.lproj/UpdatePreferences.strings @@ -1,4 +1,3 @@ - /* Class = "NSMenuItem"; title = "every Week"; ObjectID = "3FR-Va-iau"; */ "3FR-Va-iau.title" = "cada semana"; @@ -8,14 +7,15 @@ /* Class = "NSMenuItem"; title = "every Hour"; ObjectID = "DjF-1I-6Nq"; */ "DjF-1I-6Nq.title" = "cada hora"; +/* Class = "NSMenuItem"; title = "every Day"; ObjectID = "o9E-hk-H1T"; */ +"o9E-hk-H1T.title" = "cada día"; + /* Class = "NSButtonCell"; title = "Automatically Check for Updates"; ObjectID = "RFg-q1-AwJ"; */ "RFg-q1-AwJ.title" = "Buscar Actualizaciones Automáticamente"; /* Class = "NSMenu"; title = "OtherViews"; ObjectID = "RKd-H8-eCF"; */ -"RKd-H8-eCF.title" = "Otras Vistas"; +"RKd-H8-eCF.title" = "Otras vistas"; /* Class = "NSMenuItem"; title = "every Month"; ObjectID = "Uo3-kv-1ro"; */ "Uo3-kv-1ro.title" = "cada mes"; -/* Class = "NSMenuItem"; title = "every Day"; ObjectID = "o9E-hk-H1T"; */ -"o9E-hk-H1T.title" = "cada día"; diff --git a/MacPass/es.lproj/WelcomeView.strings b/MacPass/es.lproj/WelcomeView.strings index 1138d836a..c8bf54681 100644 --- a/MacPass/es.lproj/WelcomeView.strings +++ b/MacPass/es.lproj/WelcomeView.strings @@ -1,11 +1,15 @@ -/* Class = "NSTextFieldCell"; title = "Welcome to MacPass"; ObjectID = "24"; */ -"24.title" = "Bienvenido a MacPass"; +/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "Fbl-HT-XIu"; */ +"Fbl-HT-XIu.title" = "Celda de texto"; -/* Class = "NSButtonCell"; title = "Open Database…"; ObjectID = "44"; */ -"44.title" = "Abrir Base de Datos…"; +/* Class = "NSButtonCell"; title = "Open Database…"; ObjectID = "Jj3-zy-gaz"; */ +"Jj3-zy-gaz.title" = "Abrir base de datos..."; -/* Class = "NSButtonCell"; title = "Create new Database"; ObjectID = "48"; */ -"48.title" = "Crear Nueva Base de Datos"; +/* Class = "NSButtonCell"; title = "Create new Database"; ObjectID = "Vxx-Ql-eI5"; */ +"Vxx-Ql-eI5.title" = "Crear nueva base de datos"; + +/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "vzM-ly-CYn"; */ +"vzM-ly-CYn.title" = "Celda de tabla"; + +/* Class = "NSTextFieldCell"; title = "Welcome to MacPass"; ObjectID = "zdv-z8-khG"; */ +"zdv-z8-khG.title" = "Bienvenido a MacPass"; -/* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "70"; */ -"70.title" = "Cancelar"; diff --git a/MacPass/es.lproj/WorkflowPreferences.strings b/MacPass/es.lproj/WorkflowPreferences.strings index 058f598a8..b92e3f271 100644 --- a/MacPass/es.lproj/WorkflowPreferences.strings +++ b/MacPass/es.lproj/WorkflowPreferences.strings @@ -1,7 +1,12 @@ +/* Class = "NSButtonCell"; title = "Hide application after copying to clipboard "; ObjectID = "1Vr-nY-Ogv"; */ +"1Vr-nY-Ogv.title" = "Oculta la aplicación tras copiar al portapapeles"; /* Class = "NSBox"; title = "Entry Table"; ObjectID = "2"; */ "2.title" = "Tabla de Entradas"; +/* Class = "NSMenuItem"; title = "Default Browser"; ObjectID = "7YX-EA-9KA"; */ +"7YX-EA-9KA.title" = "Navegador Predeterminado"; + /* Class = "NSTextFieldCell"; title = "Double-click on URL:"; ObjectID = "10"; */ "10.title" = "Doble clic en URL:"; @@ -26,12 +31,24 @@ /* Class = "NSMenuItem"; title = "Opens Inspector"; ObjectID = "44"; */ "44.title" = "Abre Inspector"; -/* Class = "NSMenuItem"; title = "Default Browser"; ObjectID = "7YX-EA-9KA"; */ -"7YX-EA-9KA.title" = "Navegador Predeterminado"; +/* Class = "NSMenuItem"; title = "Item 2"; ObjectID = "gej-kA-GzQ"; */ +"gej-kA-GzQ.title" = "Item 2"; -/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "XgO-Tj-QjO"; */ -"XgO-Tj-QjO.title" = "Otras Vistas"; +/* Class = "NSBox"; title = "Clipboard"; ObjectID = "Kff-Xp-hAT"; */ +"Kff-Xp-hAT.title" = "Portapapeles"; + +/* Class = "NSButtonCell"; title = "Update password for new entries"; ObjectID = "RaM-t2-DVR"; */ +"RaM-t2-DVR.title" = "Actualiza la contraseña para las entradas nuevas"; /* Class = "NSTextFieldCell"; title = "Open URLs in:"; ObjectID = "soD-wI-YOH"; */ "soD-wI-YOH.title" = "Abre URLs en:"; +/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "XgO-Tj-QjO"; */ +"XgO-Tj-QjO.title" = "Otras Vistas"; + +/* Class = "NSBox"; title = "Templates"; ObjectID = "Xvt-tP-TbR"; */ +"Xvt-tP-TbR.title" = "Plantillas"; + +/* Class = "NSMenuItem"; title = "Item 3"; ObjectID = "zC2-cM-KDv"; */ +"zC2-cM-KDv.title" = "Item 3"; + From 5fbd6d1cde08372d5f38221ab196193aecb4c6a0 Mon Sep 17 00:00:00 2001 From: Anton Glezman Date: Mon, 5 Aug 2019 11:37:01 +0300 Subject: [PATCH 088/129] Fix localized string ambiguous with word allow/disallow (#959) * Fix localized string ambiguous with word allow/disallow * Fix typo --- MacPass/MPPluginRepository.m | 2 +- MacPass/de.lproj/Localizable.strings | 4 ++-- MacPass/en.lproj/Localizable.strings | 6 +++--- MacPass/es.lproj/Localizable.strings | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/MacPass/MPPluginRepository.m b/MacPass/MPPluginRepository.m index 38e657a5a..deaaa64c8 100644 --- a/MacPass/MPPluginRepository.m +++ b/MacPass/MPPluginRepository.m @@ -175,8 +175,8 @@ - (BOOL)_askForPluginRepositoryPermission { alert.informativeText = NSLocalizedString(@"ALERT_ASK_FOR_PLUGIN_REPOSITORY_CONNECTION_PERMISSION_INFORMATIVE_TEXT", @"Informative text displayed on the alert that shows up when MacPass asks for permssion to download the plugin repository JSON file"); alert.messageText = NSLocalizedString(@"ALERT_ASK_FOR_PLUGIN_REPOSITORY_CONNECTION_PERMISSION_MESSAGE", @"Message displayed on the alert that asks for permission to download the plugin repository JSON file"); alert.showsSuppressionButton = YES; - [alert addButtonWithTitle:NSLocalizedString(@"ALERT_ASK_FOR_PLUGIN_REPOSITORY_DISALLOW_DOWNLOAD", @"Disallow the download of the plugin repository file")]; [alert addButtonWithTitle:NSLocalizedString(@"ALERT_ASK_FOR_PLUGIN_REPOSITORY_ALLOW_DOWNLOAD", @"Allow the download of the plugin repository file")]; + [alert addButtonWithTitle:NSLocalizedString(@"ALERT_ASK_FOR_PLUGIN_REPOSITORY_DISALLOW_DOWNLOAD", @"Disallow the download of the plugin repository file")]; NSModalResponse repsonse = [alert runModal]; BOOL allow = (repsonse == NSAlertFirstButtonReturn); [NSUserDefaults.standardUserDefaults setBool:allow forKey:kMPSettingsKeyAllowRemoteFetchOfPluginRepository]; diff --git a/MacPass/de.lproj/Localizable.strings b/MacPass/de.lproj/Localizable.strings index 78a8bf464..71164b2b8 100644 --- a/MacPass/de.lproj/Localizable.strings +++ b/MacPass/de.lproj/Localizable.strings @@ -38,7 +38,7 @@ "ADD_TREMPLATE_ENTRY" = "Vorgabeeintrag erstellen"; /* Allow the download of the plugin repository file */ -"ALERT_ASK_FOR_PLUGIN_REPOSITORY_ALLOW_DOWNLOAD" = "Keine Daten herunterladen."; +"ALERT_ASK_FOR_PLUGIN_REPOSITORY_ALLOW_DOWNLOAD" = "Aktualisiere Daten online."; /* Informative text displayed on the alert that shows up when MacPass asks for permssion to download the plugin repository JSON file */ "ALERT_ASK_FOR_PLUGIN_REPOSITORY_CONNECTION_PERMISSION_INFORMATIVE_TEXT" = "Das Verzeichnis ist auf https://macpassapp.org hinterlegt. MacPass verbindet lädt die Defintionen herunter um sicher zu stellen, dass alle Daten auf dem neusten Stand sind."; @@ -47,7 +47,7 @@ "ALERT_ASK_FOR_PLUGIN_REPOSITORY_CONNECTION_PERMISSION_MESSAGE" = "MacPass möchte das Pluginverzeichnis aktualisieren."; /* Disallow the download of the plugin repository file */ -"ALERT_ASK_FOR_PLUGIN_REPOSITORY_DISALLOW_DOWNLOAD" = "Aktualisiere Daten online."; +"ALERT_ASK_FOR_PLUGIN_REPOSITORY_DISALLOW_DOWNLOAD" = "Keine Daten herunterladen."; /* Button in dialog to leave autotype disabled and continiue! */ "ALERT_AUTOTYPE_MISSING_ACCESSIBILTY_PERMISSIONS_BUTTON_OK" = "Autotype deaktiviert lassen."; diff --git a/MacPass/en.lproj/Localizable.strings b/MacPass/en.lproj/Localizable.strings index 733281877..d4a0f6db4 100644 --- a/MacPass/en.lproj/Localizable.strings +++ b/MacPass/en.lproj/Localizable.strings @@ -38,16 +38,16 @@ "ADD_TREMPLATE_ENTRY" = "Create Template Entry"; /* Allow the download of the plugin repository file */ -"ALERT_ASK_FOR_PLUGIN_REPOSITORY_ALLOW_DOWNLOAD" = "Do not update defintions"; +"ALERT_ASK_FOR_PLUGIN_REPOSITORY_ALLOW_DOWNLOAD" = "Update definitions online"; /* Informative text displayed on the alert that shows up when MacPass asks for permssion to download the plugin repository JSON file */ "ALERT_ASK_FOR_PLUGIN_REPOSITORY_CONNECTION_PERMISSION_INFORMATIVE_TEXT" = "The plugin defintions are hosted online at https://macpassapp.org. MacPass would like to download those files to ensure the data is up to date."; /* Message displayed on the alert that askf for permission to download the plugin repository JSON file */ -"ALERT_ASK_FOR_PLUGIN_REPOSITORY_CONNECTION_PERMISSION_MESSAGE" = "MacPass would like to check for updates of plugin defintions online"; +"ALERT_ASK_FOR_PLUGIN_REPOSITORY_CONNECTION_PERMISSION_MESSAGE" = "MacPass would like to check for updates of plugin definitions online"; /* Disallow the download of the plugin repository file */ -"ALERT_ASK_FOR_PLUGIN_REPOSITORY_DISALLOW_DOWNLOAD" = "Update definitions online"; +"ALERT_ASK_FOR_PLUGIN_REPOSITORY_DISALLOW_DOWNLOAD" = "Do not update defintions"; /* Button in dialog to leave autotype disabled and continiue! */ "ALERT_AUTOTYPE_MISSING_ACCESSIBILTY_PERMISSIONS_BUTTON_OK" = "Keep Autotype disabled."; diff --git a/MacPass/es.lproj/Localizable.strings b/MacPass/es.lproj/Localizable.strings index ea3950ac5..9b8d51925 100644 --- a/MacPass/es.lproj/Localizable.strings +++ b/MacPass/es.lproj/Localizable.strings @@ -38,7 +38,7 @@ "ADD_TREMPLATE_ENTRY" = "Crear Plantilla de Entrada"; /* Allow the download of the plugin repository file */ -"ALERT_ASK_FOR_PLUGIN_REPOSITORY_ALLOW_DOWNLOAD" = "No actualizar definiciones"; +"ALERT_ASK_FOR_PLUGIN_REPOSITORY_ALLOW_DOWNLOAD" = "Actualizar las definiciones online"; /* Informative text displayed on the alert that shows up when MacPass asks for permssion to download the plugin repository JSON file */ "ALERT_ASK_FOR_PLUGIN_REPOSITORY_CONNECTION_PERMISSION_INFORMATIVE_TEXT" = "Las definiciones de los plugin están almacenadas online en https://macpassapp.org. A MacPass le gustaría descargar los archivos para asegurar que los datos están actualizados"; @@ -47,7 +47,7 @@ "ALERT_ASK_FOR_PLUGIN_REPOSITORY_CONNECTION_PERMISSION_MESSAGE" = "A MacPass le gustaría comprobar las actualizaciones de las definiciones de los plugin online"; /* Disallow the download of the plugin repository file */ -"ALERT_ASK_FOR_PLUGIN_REPOSITORY_DISALLOW_DOWNLOAD" = "Actualizar las definiciones online"; +"ALERT_ASK_FOR_PLUGIN_REPOSITORY_DISALLOW_DOWNLOAD" = "No actualizar definiciones"; /* Button in dialog to leave autotype disabled and continiue! */ "ALERT_AUTOTYPE_MISSING_ACCESSIBILTY_PERMISSIONS_BUTTON_OK" = "Mantener Autotecleo deshabilitado."; From 2aba4cbd93879a14ed1ef21a2f54b9fc4c1a2224 Mon Sep 17 00:00:00 2001 From: Anton Glezman Date: Mon, 5 Aug 2019 11:37:36 +0300 Subject: [PATCH 089/129] Improved russian localization (#961) --- MacPass.xcodeproj/project.pbxproj | 36 +++++- .../AutotypeDoctorReportViewController.xib | 0 ...AutotypeDoctorReportViewController.strings | 18 +++ .../AutotypeCandidateSelectionView.strings | 15 +++ ...AutotypeDoctorReportViewController.strings | 18 +++ MacPass/ru.lproj/ContextBar.strings | 53 ++++---- .../ru.lproj/DatabaseSettingsWindow.strings | 41 ++++++- .../DuplicateEntryOptionsWindow.strings | 22 ++-- MacPass/ru.lproj/InspectorView.strings | 11 +- .../ru.lproj/IntegrationPreferences.strings | 12 +- MacPass/ru.lproj/Localizable.strings | 94 ++++++++++++-- MacPass/ru.lproj/Localizable.stringsdict | 116 ++++++++++++++++++ MacPass/ru.lproj/MainMenu.strings | 7 +- .../ru.lproj/OpenPanelAccessoryView.strings | 6 + MacPass/ru.lproj/PasswordEditWindow.strings | 4 +- MacPass/ru.lproj/PickcharsView.strings | 18 +++ MacPass/ru.lproj/PickfieldView.strings | 24 ++++ MacPass/ru.lproj/PluginDataView.strings | 15 +++ MacPass/ru.lproj/PluginPreferences.strings | 6 + .../PluginRepositoryBrowserView.strings | 13 +- MacPass/ru.lproj/ReferenceBuilderView.strings | 18 +-- MacPass/ru.lproj/WelcomeView.strings | 14 +-- MacPass/ru.lproj/WorkflowPreferences.strings | 15 ++- 23 files changed, 474 insertions(+), 102 deletions(-) rename MacPass/{ => Base.lproj}/AutotypeDoctorReportViewController.xib (100%) create mode 100644 MacPass/en.lproj/AutotypeDoctorReportViewController.strings create mode 100644 MacPass/ru.lproj/AutotypeCandidateSelectionView.strings create mode 100644 MacPass/ru.lproj/AutotypeDoctorReportViewController.strings create mode 100644 MacPass/ru.lproj/Localizable.stringsdict create mode 100644 MacPass/ru.lproj/OpenPanelAccessoryView.strings create mode 100644 MacPass/ru.lproj/PickcharsView.strings create mode 100644 MacPass/ru.lproj/PickfieldView.strings create mode 100644 MacPass/ru.lproj/PluginDataView.strings diff --git a/MacPass.xcodeproj/project.pbxproj b/MacPass.xcodeproj/project.pbxproj index b937c9af2..50aec9a97 100644 --- a/MacPass.xcodeproj/project.pbxproj +++ b/MacPass.xcodeproj/project.pbxproj @@ -230,7 +230,6 @@ 4CAD748C15B889B700104512 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4CAD748B15B889B700104512 /* Security.framework */; }; 4CAD748E15B88AC100104512 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 4CAD748D15B88AC100104512 /* libz.dylib */; }; 4CAD8AA622CF397B0090B2DD /* MPAutotypeDoctorReportViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CAD8AA422CF397B0090B2DD /* MPAutotypeDoctorReportViewController.m */; }; - 4CAD8AA722CF397B0090B2DD /* AutotypeDoctorReportViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4CAD8AA522CF397B0090B2DD /* AutotypeDoctorReportViewController.xib */; }; 4CB33F861EAF54A000C9341E /* KPKNode+MPIsHistory.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CB33F851EAF54A000C9341E /* KPKNode+MPIsHistory.m */; }; 4CB9339916D3A0DD00A13B5D /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 4CB9339716D3A0DD00A13B5D /* Credits.rtf */; }; 4CBA2ABA17074C07006D8139 /* MPSettingsHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CBA2AB917074C07006D8139 /* MPSettingsHelper.m */; }; @@ -295,6 +294,7 @@ 6021FE8D18E1617300C3BC51 /* PasswordCreatorView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6021FE8F18E1617300C3BC51 /* PasswordCreatorView.xib */; }; 6021FE9818E1650F00C3BC51 /* DatabaseSettingsWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6021FE9A18E1650F00C3BC51 /* DatabaseSettingsWindow.xib */; }; 7837112C225540D1009BD28D /* PluginRepositoryBrowserView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7837112E225540D1009BD28D /* PluginRepositoryBrowserView.xib */; }; + 78E1F8B022E3A5D600E738AE /* AutotypeDoctorReportViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 78E1F8B222E3A5D600E738AE /* AutotypeDoctorReportViewController.xib */; }; FA13910C1F9CD9EB0033D256 /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = FA13910A1F9CD9EB0033D256 /* Localizable.stringsdict */; }; FA9FD3271FB5E8F4003CEDD6 /* AutotypeCandidateSelectionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = FA9FD3291FB5E8F4003CEDD6 /* AutotypeCandidateSelectionView.xib */; }; FA9FD32C1FB5EDD3003CEDD6 /* AutotypeBuilderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = FA9FD32E1FB5EDD3003CEDD6 /* AutotypeBuilderView.xib */; }; @@ -791,7 +791,6 @@ 4CAD748D15B88AC100104512 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; 4CAD8AA322CF397B0090B2DD /* MPAutotypeDoctorReportViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPAutotypeDoctorReportViewController.h; sourceTree = ""; }; 4CAD8AA422CF397B0090B2DD /* MPAutotypeDoctorReportViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPAutotypeDoctorReportViewController.m; sourceTree = ""; }; - 4CAD8AA522CF397B0090B2DD /* AutotypeDoctorReportViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AutotypeDoctorReportViewController.xib; sourceTree = ""; }; 4CB33F841EAF54A000C9341E /* KPKNode+MPIsHistory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KPKNode+MPIsHistory.h"; sourceTree = ""; }; 4CB33F851EAF54A000C9341E /* KPKNode+MPIsHistory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "KPKNode+MPIsHistory.m"; sourceTree = ""; }; 4CB63A6018986530002DEC4C /* MPFlagsHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPFlagsHelper.h; sourceTree = ""; }; @@ -974,6 +973,16 @@ 7837112D225540D1009BD28D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/PluginRepositoryBrowserView.xib; sourceTree = ""; }; 78371130225540D8009BD28D /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/PluginRepositoryBrowserView.strings; sourceTree = ""; }; 78371132225540DE009BD28D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/PluginRepositoryBrowserView.strings; sourceTree = ""; }; + 78E1F8AF22E3A3DF00E738AE /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/IntegrationPreferences.strings; sourceTree = ""; }; + 78E1F8B122E3A5D600E738AE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/AutotypeDoctorReportViewController.xib; sourceTree = ""; }; + 78E1F8B422E3A5DB00E738AE /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/AutotypeDoctorReportViewController.strings; sourceTree = ""; }; + 78E1F8B622E3A5E900E738AE /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/AutotypeDoctorReportViewController.strings; sourceTree = ""; }; + 78E1F8B822E3B06700E738AE /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/PickcharsView.strings; sourceTree = ""; }; + 78E1F8BA22E3B0B700E738AE /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/PickfieldView.strings; sourceTree = ""; }; + 78E1F8BC22E3B12300E738AE /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/OpenPanelAccessoryView.strings; sourceTree = ""; }; + 78E1F8BE22E3B1BF00E738AE /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/AutotypeCandidateSelectionView.strings; sourceTree = ""; }; + 78E1F8C022E3B22500E738AE /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/PluginDataView.strings; sourceTree = ""; }; + 78E1F8C122E3B32D00E738AE /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ru; path = ru.lproj/Localizable.stringsdict; sourceTree = ""; }; A019D80F22DC6B3C0085FD54 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = es; path = es.lproj/Localizable.stringsdict; sourceTree = ""; }; A083E27922DF467B0020E0D5 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/PickcharsView.strings; sourceTree = ""; }; A083E27A22DF467B0020E0D5 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/PluginDataView.strings; sourceTree = ""; }; @@ -1011,7 +1020,6 @@ FA638D0F1C39BFCB00B10CC6 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/PasswordEditWindow.strings; sourceTree = ""; }; FA638D101C39BFCB00B10CC6 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/WelcomeView.strings; sourceTree = ""; }; FA638D111C39BFCB00B10CC6 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/GeneralPreferences.strings; sourceTree = ""; }; - FA638D121C39BFCB00B10CC6 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/IntegrationPreferences.strings; sourceTree = ""; }; FA638D131C39BFCC00B10CC6 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/WorkflowPreferences.strings; sourceTree = ""; }; FA638D141C39BFCC00B10CC6 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/UpdatePreferences.strings; sourceTree = ""; }; FA638D151C39BFCC00B10CC6 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/PluginPreferences.strings; sourceTree = ""; }; @@ -1645,7 +1653,7 @@ 4C7F8B6A1A10B68400CCB83D /* WelcomeView.xib */, 4CAD8AA322CF397B0090B2DD /* MPAutotypeDoctorReportViewController.h */, 4CAD8AA422CF397B0090B2DD /* MPAutotypeDoctorReportViewController.m */, - 4CAD8AA522CF397B0090B2DD /* AutotypeDoctorReportViewController.xib */, + 78E1F8B222E3A5D600E738AE /* AutotypeDoctorReportViewController.xib */, ); name = "View Controller"; sourceTree = ""; @@ -1878,7 +1886,7 @@ 4C3826B41AD04D8E007D7D67 /* 39_HistoryTemplate.pdf in Resources */, 4C77E37D15B84A240093A587 /* MainMenu.xib in Resources */, 4C3826CD1AD04D8E007D7D67 /* 66_MoneyTemplate.pdf in Resources */, - 4CAD8AA722CF397B0090B2DD /* AutotypeDoctorReportViewController.xib in Resources */, + 78E1F8B022E3A5D600E738AE /* AutotypeDoctorReportViewController.xib in Resources */, 4CA0B2ED15BCADAC00654E32 /* PreferencesWindow.xib in Resources */, 4C76155C1764C04C0015A1A6 /* GeneralPreferences.xib in Resources */, 4CD884B715BD47080042BBF8 /* DocumentWindow.xib in Resources */, @@ -2190,6 +2198,7 @@ 4C272A282224871900186EEC /* nl */, 4C1D56302271F4BC00C3E594 /* fr */, A083E27922DF467B0020E0D5 /* es */, + 78E1F8B822E3B06700E738AE /* ru */, ); name = PickcharsView.xib; sourceTree = ""; @@ -2205,6 +2214,7 @@ 4C272A2B2224871900186EEC /* nl */, 4C1D56372271F4BC00C3E594 /* fr */, A083E27F22DF467B0020E0D5 /* es */, + 78E1F8BA22E3B0B700E738AE /* ru */, ); name = PickfieldView.xib; sourceTree = ""; @@ -2236,6 +2246,7 @@ 4C272A2A2224871900186EEC /* nl */, 4C1D56332271F4BC00C3E594 /* fr */, A083E27C22DF467B0020E0D5 /* es */, + 78E1F8BC22E3B12300E738AE /* ru */, ); name = OpenPanelAccessoryView.xib; sourceTree = ""; @@ -2483,6 +2494,7 @@ 4C272A292224871900186EEC /* nl */, 4C1D56312271F4BC00C3E594 /* fr */, A083E27A22DF467B0020E0D5 /* es */, + 78E1F8C022E3B22500E738AE /* ru */, ); name = PluginDataView.xib; sourceTree = ""; @@ -2530,13 +2542,13 @@ 6021FE5C18E142A200C3BC51 /* de */, 6021FE5E18E142A300C3BC51 /* fr */, BD6C365919484CF40089EB37 /* nl */, - FA638D121C39BFCB00B10CC6 /* ru */, 4825CC851C414D57003E37E9 /* it */, 4C840C481D773E5D0081F605 /* pl */, 60ECAD271F12262400EA9DB3 /* zh-Hans */, 4C4161051F50333B003BC0AF /* es */, 6A74B0662076F4B40049BC29 /* sv-SE */, 4C4B2ED522D8D3B100EB6BFD /* en */, + 78E1F8AF22E3A3DF00E738AE /* ru */, ); name = IntegrationPreferences.xib; sourceTree = ""; @@ -2662,6 +2674,16 @@ name = PluginRepositoryBrowserView.xib; sourceTree = ""; }; + 78E1F8B222E3A5D600E738AE /* AutotypeDoctorReportViewController.xib */ = { + isa = PBXVariantGroup; + children = ( + 78E1F8B122E3A5D600E738AE /* Base */, + 78E1F8B422E3A5DB00E738AE /* ru */, + 78E1F8B622E3A5E900E738AE /* en */, + ); + name = AutotypeDoctorReportViewController.xib; + sourceTree = ""; + }; FA13910A1F9CD9EB0033D256 /* Localizable.stringsdict */ = { isa = PBXVariantGroup; children = ( @@ -2672,6 +2694,7 @@ 6A74B0792076F4B50049BC29 /* sv-SE */, 4C1D562F2271F4BC00C3E594 /* fr */, A019D80F22DC6B3C0085FD54 /* es */, + 78E1F8C122E3B32D00E738AE /* ru */, ); name = Localizable.stringsdict; sourceTree = ""; @@ -2687,6 +2710,7 @@ 6A74B0742076F4B50049BC29 /* sv-SE */, 4C1D56322271F4BC00C3E594 /* fr */, A083E27B22DF467B0020E0D5 /* es */, + 78E1F8BE22E3B1BF00E738AE /* ru */, ); name = AutotypeCandidateSelectionView.xib; sourceTree = ""; diff --git a/MacPass/AutotypeDoctorReportViewController.xib b/MacPass/Base.lproj/AutotypeDoctorReportViewController.xib similarity index 100% rename from MacPass/AutotypeDoctorReportViewController.xib rename to MacPass/Base.lproj/AutotypeDoctorReportViewController.xib diff --git a/MacPass/en.lproj/AutotypeDoctorReportViewController.strings b/MacPass/en.lproj/AutotypeDoctorReportViewController.strings new file mode 100644 index 000000000..e8f267e06 --- /dev/null +++ b/MacPass/en.lproj/AutotypeDoctorReportViewController.strings @@ -0,0 +1,18 @@ + +/* Class = "NSTextFieldCell"; title = "MacPass will send key press events to the system when Autotype or Global Autotype is executed. Since macOS 10.14 Mojave this is only possible, if Accessibility permissions are granted to the application."; ObjectID = "6GI-KJ-Xue"; */ +"6GI-KJ-Xue.title" = "MacPass will send key press events to the system when Autotype or Global Autotype is executed. Since macOS 10.14 Mojave this is only possible, if Accessibility permissions are granted to the application."; + +/* Class = "NSTextFieldCell"; title = "MacPass will read every window title when Global Autotype is executed to find a match. Since macOS 10.15 Catalina it is not possible to read any window title, if the user has not granted permissions to record the screen. If you are running macOS 10.15 or higher, MacPass will try to capture the left top most pixel on your screen to initate a request to record the screen. This pixel will not be stored and processed in any way."; ObjectID = "7of-1z-Nfk"; */ +"7of-1z-Nfk.title" = "MacPass will read every window title when Global Autotype is executed to find a match. Since macOS 10.15 Catalina it is not possible to read any window title, if the user has not granted permissions to record the screen. If you are running macOS 10.15 or higher, MacPass will try to capture the left top most pixel on your screen to initate a request to record the screen. This pixel will not be stored and processed in any way."; + +/* Class = "NSButtonCell"; title = "Open Accessibilty Preferences…"; ObjectID = "8m1-vs-pd5"; */ +"8m1-vs-pd5.title" = "Open Accessibilty Preferences…"; + +/* Class = "NSTextFieldCell"; title = "Screen Recording"; ObjectID = "9gr-mz-2I4"; */ +"9gr-mz-2I4.title" = "Screen Recording"; + +/* Class = "NSTextFieldCell"; title = "Accessibility"; ObjectID = "aIL-8W-63g"; */ +"aIL-8W-63g.title" = "Accessibility"; + +/* Class = "NSButtonCell"; title = "Open Screen Sharing Preferences…"; ObjectID = "lgB-Ys-L9R"; */ +"lgB-Ys-L9R.title" = "Open Screen Sharing Preferences…"; diff --git a/MacPass/ru.lproj/AutotypeCandidateSelectionView.strings b/MacPass/ru.lproj/AutotypeCandidateSelectionView.strings new file mode 100644 index 000000000..ef27e744a --- /dev/null +++ b/MacPass/ru.lproj/AutotypeCandidateSelectionView.strings @@ -0,0 +1,15 @@ +/* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "60p-7v-Nje"; */ +"60p-7v-Nje.title" = "Отмена"; + +/* Class = "NSTextFieldCell"; title = "There are multiple matches for the current window. Please select which match should be used."; ObjectID = "gcf-gb-ZsF"; */ +"gcf-gb-ZsF.title" = "Есть несколько совпадений для текущего окна. Пожалуйста, выберите, какое совпадение следует использовать."; + +/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "PKW-gr-yqN"; */ +"PKW-gr-yqN.title" = "Text Cell"; + +/* Class = "NSTextFieldCell"; title = "Content"; ObjectID = "TN3-3a-LaA"; */ +"TN3-3a-LaA.title" = "Content"; + +/* Class = "NSButtonCell"; title = "Perform Autotype"; ObjectID = "w7H-hx-CUF"; */ +"w7H-hx-CUF.title" = "Выполнить автоввод"; + diff --git a/MacPass/ru.lproj/AutotypeDoctorReportViewController.strings b/MacPass/ru.lproj/AutotypeDoctorReportViewController.strings new file mode 100644 index 000000000..83dbcfc22 --- /dev/null +++ b/MacPass/ru.lproj/AutotypeDoctorReportViewController.strings @@ -0,0 +1,18 @@ +/* Class = "NSTextFieldCell"; title = "MacPass will send key press events to the system when Autotype or Global Autotype is executed. Since macOS 10.14 Mojave this is only possible, if Accessibility permissions are granted to the application."; ObjectID = "6GI-KJ-Xue"; */ +"6GI-KJ-Xue.title" = "MacPass будет отправлять события нажатия клавиш в систему при выполнении Автоввода или Глобального Автоввода. Начиная с macOS 10.14 Mojave это возможно только в том случае, если приложению разрешено управление копьютером через универсальный доступ."; + +/* Class = "NSTextFieldCell"; title = "MacPass will read every window title when Global Autotype is executed to find a match. Since macOS 10.15 Catalina it is not possible to read any window title, if the user has not granted permissions to record the screen. If you are running macOS 10.15 or higher, MacPass will try to capture the left top most pixel on your screen to initate a request to record the screen. This pixel will not be stored and processed in any way."; ObjectID = "7of-1z-Nfk"; */ +"7of-1z-Nfk.title" = "MacPass будет читать заголовки окон чтобы найти совпадения при выполнении Глобального Автоввода. Начиная с macOS 10.15 Catalina невозможно прочитать заголовок окна, если пользователь не предоставил разрешения на запись экрана. Если вы используете MacOS 10.15 или выше, MacPass попытается захватить левый верхний пиксель на вашем экране, чтобы инициировать запрос на запись экрана. Этот пиксель не будет сохранен и обработан каким-либо образом."; + +/* Class = "NSButtonCell"; title = "Open Accessibilty Preferences…"; ObjectID = "8m1-vs-pd5"; */ +"8m1-vs-pd5.title" = "Открыть настройки универсального доступа…"; + +/* Class = "NSTextFieldCell"; title = "Screen Recording"; ObjectID = "9gr-mz-2I4"; */ +"9gr-mz-2I4.title" = "Запись экрана"; + +/* Class = "NSTextFieldCell"; title = "Accessibility"; ObjectID = "aIL-8W-63g"; */ +"aIL-8W-63g.title" = "Универсальный доступ"; + +/* Class = "NSButtonCell"; title = "Open Screen Sharing Preferences…"; ObjectID = "lgB-Ys-L9R"; */ +"lgB-Ys-L9R.title" = "Открыть настройки безопасности…"; + diff --git a/MacPass/ru.lproj/ContextBar.strings b/MacPass/ru.lproj/ContextBar.strings index 035c43095..12c945088 100644 --- a/MacPass/ru.lproj/ContextBar.strings +++ b/MacPass/ru.lproj/ContextBar.strings @@ -1,15 +1,14 @@ - /* Class = "NSTextFieldCell"; title = "Search:"; ObjectID = "7"; */ -"7.title" = "Search:"; - -/* Class = "NSButtonCell"; title = "Title"; ObjectID = "53D-ne-nv6"; */ -"53D-ne-nv6.title" = "Title"; +"7.title" = "Поиск:"; /* Class = "NSButtonCell"; title = "Empty Trash"; ObjectID = "8Ok-oe-6AB"; */ -"8Ok-oe-6AB.title" = "Empty Trash"; +"8Ok-oe-6AB.title" = "Очистить корзину"; /* Class = "NSTextFieldCell"; title = "Trash"; ObjectID = "8P1-Rp-sF4"; */ -"8P1-Rp-sF4.title" = "Trash"; +"8P1-Rp-sF4.title" = "Корзина"; + +/* Class = "NSButtonCell"; title = "Title"; ObjectID = "53D-ne-nv6"; */ +"53D-ne-nv6.title" = "Заголовок"; /* Class = "NSButtonCell"; title = "URL"; ObjectID = "92o-gN-Psj"; */ "92o-gN-Psj.title" = "URL"; @@ -17,38 +16,42 @@ /* Class = "NSMenuItem"; title = "Item 3"; ObjectID = "CFk-71-NYQ"; */ "CFk-71-NYQ.title" = "Item 3"; -/* Class = "NSTextFieldCell"; title = "History"; ObjectID = "ER3-Ic-v0N"; */ -"ER3-Ic-v0N.title" = "History"; - -/* Class = "NSMenuItem"; title = "Item 1"; ObjectID = "LRm-iZ-XrA"; */ -"LRm-iZ-XrA.title" = "Item 1"; - -/* Class = "NSButtonCell"; title = "Restore Entry"; ObjectID = "UTg-y9-4DN"; */ -"UTg-y9-4DN.title" = "Restore Entry"; - -/* Class = "NSTabViewItem"; label = "Filter"; ObjectID = "Ud6-Nz-6PS"; */ -"Ud6-Nz-6PS.label" = "Filter"; - /* Class = "NSMenuItem"; title = "Item 2"; ObjectID = "cpr-p6-YAY"; */ "cpr-p6-YAY.title" = "Item 2"; +/* Class = "NSTextFieldCell"; title = "History"; ObjectID = "ER3-Ic-v0N"; */ +"ER3-Ic-v0N.title" = "История изменений"; + /* Class = "NSButtonCell"; title = "Exit History"; ObjectID = "ewQ-8F-e1E"; */ -"ewQ-8F-e1E.title" = "Exit History"; +"ewQ-8F-e1E.title" = "Закрыть историю"; /* Class = "NSButtonCell"; title = "Notes"; ObjectID = "iDN-2E-hwt"; */ -"iDN-2E-hwt.title" = "Notes"; +"iDN-2E-hwt.title" = "Заметки"; /* Class = "NSButtonCell"; title = "Username"; ObjectID = "jfQ-Jh-2gl"; */ -"jfQ-Jh-2gl.title" = "Username"; +"jfQ-Jh-2gl.title" = "Имя пользователя"; + +/* Class = "NSMenuItem"; title = "Item 1"; ObjectID = "LRm-iZ-XrA"; */ +"LRm-iZ-XrA.title" = "Item 1"; /* Class = "NSTabViewItem"; label = "Trash"; ObjectID = "na6-h9-r9q"; */ -"na6-h9-r9q.label" = "Trash"; +"na6-h9-r9q.label" = "Корзина"; /* Class = "NSButtonCell"; title = "Password"; ObjectID = "rvQ-4V-SsS"; */ -"rvQ-4V-SsS.title" = "Password"; +"rvQ-4V-SsS.title" = "Пароль"; + +/* Class = "NSTabViewItem"; label = "Filter"; ObjectID = "Ud6-Nz-6PS"; */ +"Ud6-Nz-6PS.label" = "Фильтр"; + +/* Class = "NSButtonCell"; title = "Restore Entry"; ObjectID = "UTg-y9-4DN"; */ +"UTg-y9-4DN.title" = "Восстановить запись"; /* Class = "NSMenu"; title = "OtherViews"; ObjectID = "wC4-fF-dLW"; */ "wC4-fF-dLW.title" = "OtherViews"; +/* Class = "NSButtonCell"; title = "Everywhere"; ObjectID = "WMK-bb-ESj"; */ +"WMK-bb-ESj.title" = "Искать везде"; + /* Class = "NSTabViewItem"; label = "History"; ObjectID = "z4I-cp-nhf"; */ -"z4I-cp-nhf.label" = "History"; +"z4I-cp-nhf.label" = "История изменений"; + diff --git a/MacPass/ru.lproj/DatabaseSettingsWindow.strings b/MacPass/ru.lproj/DatabaseSettingsWindow.strings index 8d9b0c1fd..00d1f5200 100644 --- a/MacPass/ru.lproj/DatabaseSettingsWindow.strings +++ b/MacPass/ru.lproj/DatabaseSettingsWindow.strings @@ -1,6 +1,15 @@ /* Class = "NSWindow"; title = "Window"; ObjectID = "1"; */ "1.title" = "Окно"; +/* Class = "NSTextFieldCell"; title = "Threads"; ObjectID = "2QI-ne-N5d"; */ +"2QI-ne-N5d.title" = "Потоков"; + +/* Class = "NSTextFieldCell"; title = "Iterations"; ObjectID = "2ZA-Gc-JdZ"; */ +"2ZA-Gc-JdZ.title" = "Повторений"; + +/* Class = "NSTextFieldCell"; title = "Enforce key change"; ObjectID = "5QH-N1-FHK"; */ +"5QH-N1-FHK.title" = "Смена ключа:"; + /* Class = "NSTextFieldCell"; title = "Database name:"; ObjectID = "190"; */ "190.title" = "Имя базы данных:"; @@ -61,14 +70,36 @@ /* Class = "NSMenu"; title = "OtherViews"; ObjectID = "1740"; */ "1740.title" = "OtherViews"; +/* Class = "NSTextFieldCell"; title = "File format:"; ObjectID = "bTk-YZ-x0G"; */ +"bTk-YZ-x0G.title" = "Формат файла"; + /* Class = "NSButtonCell"; title = "Recommend key change"; ObjectID = "CtU-Eq-dgy"; */ -"CtU-Eq-dgy.title" = "Рекомендовать сменую ключа каждые:"; +"CtU-Eq-dgy.title" = "Рекомендовать смену ключа"; -/* Class = "NSButtonCell"; title = "Force key change"; ObjectID = "z6u-YT-7LE"; */ -"z6u-YT-7LE.title" = "Требовать сменую ключа каждые:"; +/* Class = "NSTextFieldCell"; title = "Algorithm"; ObjectID = "GVd-KH-pHc"; */ +"GVd-KH-pHc.title" = "Алгоритм"; -/* Class = "NSTextFieldCell"; title = "File format:"; ObjectID = "bTk-YZ-x0G"; */ -"bTk-YZ-x0G.title" = "Формат файла"; +/* Class = "NSTextFieldCell"; title = "Encryption:"; ObjectID = "gxY-UL-bEG"; */ +"gxY-UL-bEG.title" = "Шифрование:"; + +/* Class = "NSTextFieldCell"; title = "Memory"; ObjectID = "iRY-If-Kwn"; */ +"iRY-If-Kwn.title" = "Память"; + +/* Class = "NSTextFieldCell"; title = "Recyclebin Group:"; ObjectID = "kI5-Kp-byE"; */ +"kI5-Kp-byE.title" = "Группа для корзины:"; /* Class = "NSButtonCell"; title = "Force key change once after unlocking"; ObjectID = "pA1-aL-KjT"; */ "pA1-aL-KjT.title" = "Принудительная смена ключа после разблокировки"; + +/* Class = "NSBox"; title = "Key derivation"; ObjectID = "pbl-Mb-r8V"; */ +"pbl-Mb-r8V.title" = "Функция формирования ключа"; + +/* Class = "NSTextFieldCell"; title = "Rounds"; ObjectID = "uUQ-9s-M5E"; */ +"uUQ-9s-M5E.title" = "Раунды"; + +/* Class = "NSTextFieldCell"; title = "Recommend key change"; ObjectID = "Xib-Fn-sqx"; */ +"Xib-Fn-sqx.title" = "Рекомендация смены ключа:"; + +/* Class = "NSButtonCell"; title = "Force key change"; ObjectID = "z6u-YT-7LE"; */ +"z6u-YT-7LE.title" = "Требовать смену ключа"; + diff --git a/MacPass/ru.lproj/DuplicateEntryOptionsWindow.strings b/MacPass/ru.lproj/DuplicateEntryOptionsWindow.strings index 59e0aa059..b760312c7 100644 --- a/MacPass/ru.lproj/DuplicateEntryOptionsWindow.strings +++ b/MacPass/ru.lproj/DuplicateEntryOptionsWindow.strings @@ -1,18 +1,18 @@ +/* Class = "NSButtonCell"; title = "Reference password instead of copying it"; ObjectID = "daA-QV-CDq"; */ +"daA-QV-CDq.title" = "Создать ссылку на пароль вместо копирования"; + +/* Class = "NSButtonCell"; title = "Duplicate history"; ObjectID = "dXl-KS-4rE"; */ +"dXl-KS-4rE.title" = "Скопировать историю"; /* Class = "NSButtonCell"; title = "Reference username instead of copying it"; ObjectID = "O9X-XH-n8o"; */ -"O9X-XH-n8o.title" = "Reference username instead of copying it"; +"O9X-XH-n8o.title" = "Создать ссылку на имя пользователя вместо копирования"; -/* Class = "NSWindow"; title = "Window"; ObjectID = "QvC-M9-y7g"; */ -"QvC-M9-y7g.title" = "Window"; +/* Class = "NSWindow"; title = "Duplicate Entry Options"; ObjectID = "QvC-M9-y7g"; */ +"QvC-M9-y7g.title" = "Опции копирования"; /* Class = "NSButtonCell"; title = "Duplicate Entry"; ObjectID = "WqI-qH-ARf"; */ -"WqI-qH-ARf.title" = "Duplicate Entry"; - -/* Class = "NSButtonCell"; title = "Duplicate history"; ObjectID = "dXl-KS-4rE"; */ -"dXl-KS-4rE.title" = "Duplicate history"; - -/* Class = "NSButtonCell"; title = "Reference password instead of copying it"; ObjectID = "daA-QV-CDq"; */ -"daA-QV-CDq.title" = "Reference password instead of copying it"; +"WqI-qH-ARf.title" = "Скопировать запись"; /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "x6e-bE-Y6R"; */ -"x6e-bE-Y6R.title" = "Cancel"; +"x6e-bE-Y6R.title" = "Отмена"; + diff --git a/MacPass/ru.lproj/InspectorView.strings b/MacPass/ru.lproj/InspectorView.strings index 071d58a24..570962c0e 100644 --- a/MacPass/ru.lproj/InspectorView.strings +++ b/MacPass/ru.lproj/InspectorView.strings @@ -1,4 +1,3 @@ - /* Class = "NSTabViewItem"; label = "Group"; ObjectID = "2896"; */ "2896.label" = "Группа"; @@ -14,17 +13,9 @@ /* Class = "NSTextFieldCell"; title = "Label"; ObjectID = "3014"; */ "3014.title" = "Ярлык"; -/* Class = "NSButtonCell"; title = "Edit"; ObjectID = "3110"; */ -"3110.title" = "Изменить"; - -/* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "3127"; */ -"3127.title" = "Отметка"; - /* Class = "NSTextFieldCell"; title = "Notes"; ObjectID = "hwn-UY-9Cr"; */ "hwn-UY-9Cr.title" = "Заметки"; -/* Class = "NSButtonCell"; title = "History"; ObjectID = "w1z-1n-b0m"; */ -"w1z-1n-b0m.title" = "История"; - /* Class = "CocoaBindingsConnection"; ibShadowedIsNilPlaceholder = "None"; ObjectID = "Xpb-G8-gXl"; */ "Xpb-G8-gXl.ibShadowedIsNilPlaceholder" = "Нет"; + diff --git a/MacPass/ru.lproj/IntegrationPreferences.strings b/MacPass/ru.lproj/IntegrationPreferences.strings index 4d535daf0..aa3625117 100644 --- a/MacPass/ru.lproj/IntegrationPreferences.strings +++ b/MacPass/ru.lproj/IntegrationPreferences.strings @@ -1,5 +1,5 @@ /* Class = "NSButtonCell"; title = "Enable global Autotype"; ObjectID = "1qb-Rd-jYu"; */ -"1qb-Rd-jYu.title" = "Включить глобальный Автоввод"; +"1qb-Rd-jYu.title" = "Включить глобальный автоввод"; /* Class = "NSTextFieldCell"; title = "Shortcut"; ObjectID = "6oN-CH-T0O"; */ "6oN-CH-T0O.title" = "Хоткей"; @@ -10,14 +10,14 @@ /* Class = "NSButtonCell"; title = "Enable Quicklook Preview"; ObjectID = "ERs-ct-Eyx"; */ "ERs-ct-Eyx.title" = "Использовать Быстрый Предпросмотр"; -/* Class = "NSTextFieldCell"; title = "Autotype is not available, because MacPass is not allowed to control your computer. To enable Autotype, go to the Security and Privacy Preferences and add MacPass to the Accessibilty group. Changes require a restart of MacPass."; ObjectID = "H37-ku-aTc"; */ -"H37-ku-aTc.title" = "Автоввод недоступен, потому что MacPass не имеет разрешения на управление вашим компьютером."; +/* Class = "NSTextFieldCell"; title = "Autotype might not work properly. Some issues where found that prevent Autotype or Global Autotype to work. Please run the Autotype Doctor to fix those issues."; ObjectID = "H37-ku-aTc"; */ +"H37-ku-aTc.title" = "Автоввод может не работать. Обнаружены некоторые проблемы, которые мешают работе автоввода. Пожалуйста, запустите Помощник Автоввода, чтобы исправить эти проблемы."; /* Class = "NSTextFieldCell"; title = "Shortcut is missing Key"; ObjectID = "Lxp-wI-yQy"; */ -"Lxp-wI-yQy.title" = "Задайте Клавишу для Ярлыка"; +"Lxp-wI-yQy.title" = "Задайте клавишу для хоткея"; -/* Class = "NSButtonCell"; title = "Open Preferences…"; ObjectID = "NP0-R3-m6n"; */ -"NP0-R3-m6n.title" = "Открыть настройки"; +/* Class = "NSButtonCell"; title = "Run Autotype Doctor…"; ObjectID = "NP0-R3-m6n"; */ +"NP0-R3-m6n.title" = "Запустить Помощник Автоввода…"; /* Class = "NSBox"; title = "Autotype"; ObjectID = "P9N-HM-wER"; */ "P9N-HM-wER.title" = "Автоввод"; diff --git a/MacPass/ru.lproj/Localizable.strings b/MacPass/ru.lproj/Localizable.strings index 9e333f925..610053d42 100644 --- a/MacPass/ru.lproj/Localizable.strings +++ b/MacPass/ru.lproj/Localizable.strings @@ -37,6 +37,18 @@ /* Action to add an entry via template */ "ADD_TREMPLATE_ENTRY" = "Создать шаблонную запись"; +/* Allow the download of the plugin repository file */ +"ALERT_ASK_FOR_PLUGIN_REPOSITORY_ALLOW_DOWNLOAD" = "Разрешить обновление"; + +/* Informative text displayed on the alert that shows up when MacPass asks for permssion to download the plugin repository JSON file */ +"ALERT_ASK_FOR_PLUGIN_REPOSITORY_CONNECTION_PERMISSION_INFORMATIVE_TEXT" = "Информация о плагинах находится на сайте https://macpassapp.org. MacPass скачает файлы чтобы проверить наличие обновлений."; + +/* Message displayed on the alert that asks for permission to download the plugin repository JSON file */ +"ALERT_ASK_FOR_PLUGIN_REPOSITORY_CONNECTION_PERMISSION_MESSAGE" = "Проверять обновления плагинов?"; + +/* Disallow the download of the plugin repository file */ +"ALERT_ASK_FOR_PLUGIN_REPOSITORY_DISALLOW_DOWNLOAD" = "Запретить обновление"; + /* Button in dialog to leave autotype disabled and continiue! */ "ALERT_AUTOTYPE_MISSING_ACCESSIBILTY_PERMISSIONS_BUTTON_OK" = "Оставить отключенным"; @@ -101,6 +113,12 @@ /* Menu item for automatic trash creation */ "AUTOCREATE_TRASH_FOLDER" = "Создать Автоматически"; +/* Message text in the autotype selection window. Placeholder is %1 - windowTitle */ +"AUTOTYPE_CANDIDATE_SELECTION_WINDOW_MESSAGE_%@" = "Найдено несколько совпадений для текущего окна: %@. Выберите какое совпадение следует использовать."; + +/* Window title for the stand-alone password creator window */ +"AUTOTYPE_DOCTOR_RESULTS_WINDOW_TITLE" = "Помощник автоввода"; + /* Inherit autotype settings menu item */ "AUTOTYPE_INHERIT" = "Наследовать Настройки Автоввода"; @@ -110,8 +128,8 @@ /* Disable autotype menu item */ "AUTOTYPE_NO" = "Отключить Автоввод"; -/* Notification: Autotype failed, MacPass has no permission to send key strokes */ -"AUTOTYPE_NOTIFICATION_MACPASS_HAS_NO_ACCESSIBILTY_PERMISSIONS" = "Автоввод отключен, так как MacPass не имеет разрешений универсального доступа"; +/* Notification: Autotype failed, MacPass has not enough permissions to perform autotype */ +"AUTOTYPE_NOTIFICATION_MACPASS_IS_MISSING_PERMISSIONS" = "MacPass не имеет необходимых разрешений для выполнения автоввода"; /* Notification: Autotype failed, no documents are open */ "AUTOTYPE_OVERLAY_NO_DOCUMENTS" = "Откройте файл базы данных для использования глобального автоввода!"; @@ -122,6 +140,18 @@ /* Notification: Autotype found a single match for %@ (string placeholder). */ "AUTOTYPE_OVERLAY_SINGLE_MATCH_FOR_%@" = "Найдено совпадение с %@"; +/* Status lable when no issue were found in accessibilty */ +"AUTOTYPE_STATUS_ACCESSIBILTY_PERMISSIONS_OK" = "MacPass имеет разрешение на управление компьютером"; + +/* Status MacPass has no accessibilty permissions */ +"AUTOTYPE_STATUS_NO_ACCESSIBILTY_PERMISSIONS" = "MacPass не имеет разрешения на управление компьютером"; + +/* Status MacPass has no screen recording permissions */ +"AUTOTYPE_STATUS_NO_SCREEN_RECORDING_PERMISSIONS" = "MacPass не имеет разрешения на запись экрана"; + +/* Status lable when no issue were found in screen recording permissions */ +"AUTOTYPE_STATUS_SCREEN_RECORDING_PERMISSIONS_OK" = "MacPass имеет разрешение на запись экрана"; + /* Notficication: Autotype timed out */ "AUTOTYPE_TIMED_OUT" = "Истекло время автоввода"; @@ -277,6 +307,14 @@ /* Empty Trash */ "DELETE_TRASHED_GROUP" = "Удалить группу из корзины"; +/* Action title for copying an entry via drag and drop to another database + Action title for moving an entry via drag and drop */ +"DRAG_ENTRY" = "Перетащить запись"; + +/* Action title for moving a group via drag and drop + Actiontitle for copying groups via drag and drop to antother database */ +"DRAG_GROUP" = "Перетащить группу"; + /* Action name for duplicating entries */ "DUPLICATE_ENTRIES_%ld" = "Дублирующиеся записи %ld"; @@ -317,6 +355,12 @@ /* Error description given when adding an invalid plugin */ "ERROR_INVALID_PLUGIN" = "Недействительный плагин"; +/* Error description for missing accessibilty permissions */ +"ERROR_NO_ACCESSIBILTY_PERMISSIONS" = "MacPass не имеет разрешения на управление компьютером (Универсальный доступ)"; + +/* Error description for missing screen recording permissions */ +"ERROR_NO_PERMISSION_TO_RECORD_SCREEN" = "MacPass не имеет разрешения на запись экрана"; + /* Passwords do not match */ "ERROR_PASSWORD_MISSMATCH" = "Пароли не соответствуют!"; @@ -478,9 +522,6 @@ /* Action button in Notification to open a document */ "OPEN_DOCUMENT" = "Открыть Документ"; -/* Action button in Notification to show the Accessibilty preferences */ -"OPEN_PREFERENCES" = "Открыть настройки"; - /* Menu item to open the URL with the default application */ "OPEN_URL" = "Открыть URL"; @@ -652,6 +693,9 @@ /* Checkbox in dialog to set the selection as default file change strategy! */ "SET_AS_DEFAULT_FILE_CHANGE_STRATEGY" = "Использовать этот способ по умолчанию. Вы сможете поменять это в любое время в настройках."; +/* Action button in Notification to show the Autotype Doctor */ +"SHOW_AUTOTYPE_DOCTOR" = "Показать помощник автоввода"; + /* Menu item to show the history of the selected entry Toolbar item to toggle history display */ "SHOW_HISTORY" = "Показать историю"; @@ -668,11 +712,47 @@ /* Toolbar item to perform autotype */ "TOOLBAR_PERFORM_AUTOTYPE_FOR_ENTRY" = "Автоввод"; +/* Touchbar button label for choosing the keyfile */ +"TOUCHBAR_CHOOSE_KEYFILE" = "Выбрать файл ключа"; + +/* Touchbar button label for copying the password */ +"TOUCHBAR_COPY_PASSWORD" = "Копировать пароль"; + +/* Touchbar button label for copying the username */ +"TOUCHBAR_COPY_USERNAME" = "Копировать имя пользователя"; + +/* Touchbar button label for deleting elements */ +"TOUCHBAR_DELETE" = "Удалить"; + +/* Touchbar button label for opening the popover to edit */ +"TOUCHBAR_EDIT" = "Редактировать"; + +/* Touchbar button label for locking the database */ +"TOUCHBAR_LOCK_DATABASE" = "Заблокировать базу данных"; + +/* Touchbar button label for creating a new item */ +"TOUCHBAR_NEW_ENTRY" = "Новая запись"; + +/* Touchbar button label for creating a new group */ +"TOUCHBAR_NEW_GROUP" = "Новая группа"; + +/* Touchbar button label for performing autotype */ +"TOUCHBAR_PERFORM_AUTOTYPE" = "Автоввод"; + +/* Touchbar button label for searching the database */ +"TOUCHBAR_SEARCH" = "Поиск базы данных"; + +/* Touchbar button label for showing the password */ +"TOUCHBAR_SHOW_PASSWORD" = "Показать пароль"; + +/* Touchbar button label for unlocking the database */ +"TOUCHBAR_UNLOCK_DATABASE" = "Разблокировать базу данных"; + /* Move Entry to Trash */ -"TRASH_ENTRY" = "Удалить Запись"; +"TRASH_ENTRY" = "Удалить запись"; /* Move Group to Trash */ -"TRASH_GROUP" = "Удалить Группу"; +"TRASH_GROUP" = "Удалить группу"; /* Uninstall plugin */ "UNINSTALL" = "Удалить"; diff --git a/MacPass/ru.lproj/Localizable.stringsdict b/MacPass/ru.lproj/Localizable.stringsdict new file mode 100644 index 000000000..ada74a9c3 --- /dev/null +++ b/MacPass/ru.lproj/Localizable.stringsdict @@ -0,0 +1,116 @@ + + + + + %ld_CHARACTERS_TO_PICK_REMAINING + + NSStringLocalizedFormatKey + %#@characters@ + characters + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + few + %ld символа осталось + many + %ld символов осталось + one + Остался один символ + other + %ld символов осталось + zero + Выбраны все символы + + + DUPLICATE_ENTRIES_%ld + + NSStringLocalizedFormatKey + %#@entries@ + entries + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + few + копирование записей + many + копирование записей + one + копирование записи + other + копирование записей + zero + копирование записей + + + EVERY_%ld_DAYS + + NSStringLocalizedFormatKey + %#@days@ + days + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + few + каждые %ld дня + many + каждые %ld дней + one + каждый день + other + каждые %ld дней + zero + после каждого открытия + + + PICKCHAR_INFO_MESSAGE_PICK_CHARACTERS_%ld + + NSStringLocalizedFormatKey + %#@characters@ + characters + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + few + Выберите %ld символа + many + Выберите %ld символов + one + Выберите %ld символ + other + Выберите %ld символов + zero + Выберите символы + + + PICKED_%ld_CHARACTERS + + NSStringLocalizedFormatKey + %#@characters@ + characters + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + few + %ld символов выбрано + many + %ld символов выбрано + one + %ld символ выбран + other + %ld символов выбрано + zero + Не выбрано ни одного символа + + + + diff --git a/MacPass/ru.lproj/MainMenu.strings b/MacPass/ru.lproj/MainMenu.strings index fd0d40b90..0811e9b3b 100644 --- a/MacPass/ru.lproj/MainMenu.strings +++ b/MacPass/ru.lproj/MainMenu.strings @@ -139,8 +139,8 @@ /* Class = "NSMenuItem"; title = "Toggle Inspector"; ObjectID = "1181"; */ "1181.title" = "Переключить Инспектор"; -/* Class = "NSMenuItem"; title = "Show Password Generator"; ObjectID = "1200"; */ -"1200.title" = "Показать Генератор Паролей"; +/* Class = "NSMenuItem"; title = "Password Generator"; ObjectID = "1200"; */ +"1200.title" = "Генератор паролей"; /* Class = "NSMenuItem"; title = "Change Master Password…"; ObjectID = "1203"; */ "1203.title" = "Изменить Мастер Пароль…"; @@ -193,3 +193,6 @@ /* Class = "NSMenuItem"; title = "Merge With…"; ObjectID = "zvE-0h-UxI"; */ "zvE-0h-UxI.title" = "Слияние с…"; +/* Class = "NSMenuItem"; title = "Autotype Doctor"; ObjectID = "zWx-Re-iuJ"; */ +"zWx-Re-iuJ.title" = "Помощник автоввода"; + diff --git a/MacPass/ru.lproj/OpenPanelAccessoryView.strings b/MacPass/ru.lproj/OpenPanelAccessoryView.strings new file mode 100644 index 000000000..10488be19 --- /dev/null +++ b/MacPass/ru.lproj/OpenPanelAccessoryView.strings @@ -0,0 +1,6 @@ +/* Class = "NSButtonCell"; title = "Show hidden files"; ObjectID = "FfY-KA-8IC"; */ +"FfY-KA-8IC.title" = "Показать скрытые файлы"; + +/* Class = "NSButtonCell"; title = "Allow all files"; ObjectID = "tvV-1s-Be3"; */ +"tvV-1s-Be3.title" = "Разрешить выбор всех файлов"; + diff --git a/MacPass/ru.lproj/PasswordEditWindow.strings b/MacPass/ru.lproj/PasswordEditWindow.strings index 7b9f94413..d97f6ae01 100644 --- a/MacPass/ru.lproj/PasswordEditWindow.strings +++ b/MacPass/ru.lproj/PasswordEditWindow.strings @@ -1,5 +1,4 @@ - -/* Class = "NSWindow"; title = "Window"; ObjectID = "1"; */ +/* Class = "NSWindow"; title = "Change Password"; ObjectID = "1"; */ "1.title" = "Окно"; /* Class = "NSTextFieldCell"; title = "Missmatching Passwords"; ObjectID = "14"; */ @@ -28,3 +27,4 @@ /* Class = "NSButtonCell"; title = "Password:"; ObjectID = "OQz-DA-SoY"; */ "OQz-DA-SoY.title" = "Пароль:"; + diff --git a/MacPass/ru.lproj/PickcharsView.strings b/MacPass/ru.lproj/PickcharsView.strings new file mode 100644 index 000000000..c2377b263 --- /dev/null +++ b/MacPass/ru.lproj/PickcharsView.strings @@ -0,0 +1,18 @@ +/* Class = "NSButtonCell"; title = "Submit"; ObjectID = "8vP-Ka-vsA"; */ +"8vP-Ka-vsA.title" = "Отправить"; + +/* Class = "NSButtonCell"; title = "Reset"; ObjectID = "Emo-pg-Mfe"; */ +"Emo-pg-Mfe.title" = "Сбросить"; + +/* Class = "NSTextFieldCell"; title = "StatusLabel"; ObjectID = "M3h-q8-FLO"; */ +"M3h-q8-FLO.title" = "StatusLabel"; + +/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "pUG-4c-rTt"; */ +"pUG-4c-rTt.title" = "Text Cell"; + +/* Class = "NSTextFieldCell"; title = "MessageLabel"; ObjectID = "sHz-kg-YJQ"; */ +"sHz-kg-YJQ.title" = "MessageLabel"; + +/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "v3T-2f-yWm"; */ +"v3T-2f-yWm.title" = "Table View Cell"; + diff --git a/MacPass/ru.lproj/PickfieldView.strings b/MacPass/ru.lproj/PickfieldView.strings new file mode 100644 index 000000000..898cfce7a --- /dev/null +++ b/MacPass/ru.lproj/PickfieldView.strings @@ -0,0 +1,24 @@ +/* Class = "NSTableColumn"; headerCell.title = "Field"; ObjectID = "0H9-DW-Jyj"; */ +"0H9-DW-Jyj.headerCell.title" = "Field"; + +/* Class = "NSButtonCell"; title = "Select"; ObjectID = "6Wi-9i-Tcb"; */ +"6Wi-9i-Tcb.title" = "Выбрать"; + +/* Class = "NSTextFieldCell"; title = "Please pick a field value to be inserted"; ObjectID = "aJS-22-6Va"; */ +"aJS-22-6Va.title" = "Выберите занчение для вставки"; + +/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "e8U-mE-mZh"; */ +"e8U-mE-mZh.title" = "Table View Cell"; + +/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "fil-tT-GXX"; */ +"fil-tT-GXX.title" = "Text Cell"; + +/* Class = "NSTextFieldCell"; title = "Header View Cell"; ObjectID = "kTy-VO-Xlg"; */ +"kTy-VO-Xlg.title" = "Header View Cell"; + +/* Class = "NSTableColumn"; headerCell.title = "Value"; ObjectID = "rVo-ud-5fs"; */ +"rVo-ud-5fs.headerCell.title" = "Value"; + +/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "z1F-Bi-PBg"; */ +"z1F-Bi-PBg.title" = "Text Cell"; + diff --git a/MacPass/ru.lproj/PluginDataView.strings b/MacPass/ru.lproj/PluginDataView.strings new file mode 100644 index 000000000..a68bb4bb1 --- /dev/null +++ b/MacPass/ru.lproj/PluginDataView.strings @@ -0,0 +1,15 @@ +/* Class = "NSButtonCell"; title = "Remove All"; ObjectID = "6hH-Hc-gf4"; */ +"6hH-Hc-gf4.title" = "Удалить все"; + +/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "bG1-Sb-Xyp"; */ +"bG1-Sb-Xyp.title" = "Text Cell"; + +/* Class = "NSTextFieldCell"; placeholderString = "Title"; ObjectID = "MaV-TP-92X"; */ +"MaV-TP-92X.placeholderString" = "Заголовок"; + +/* Class = "NSTextFieldCell"; placeholderString = "Value"; ObjectID = "mLw-O5-6D3"; */ +"mLw-O5-6D3.placeholderString" = "Значение"; + +/* Class = "NSTextFieldCell"; title = "Plugin data"; ObjectID = "unO-bO-8v0"; */ +"unO-bO-8v0.title" = "Данные плагина"; + diff --git a/MacPass/ru.lproj/PluginPreferences.strings b/MacPass/ru.lproj/PluginPreferences.strings index 4a2983b9f..c6260ea25 100644 --- a/MacPass/ru.lproj/PluginPreferences.strings +++ b/MacPass/ru.lproj/PluginPreferences.strings @@ -7,12 +7,18 @@ /* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "fug-79-n9g"; */ "fug-79-n9g.title" = "Табличная ячейка"; +/* Class = "NSTextFieldCell"; title = "If enabled, a remote connection is established to macpassapp.org"; ObjectID = "i3S-9b-Bpf"; */ +"i3S-9b-Bpf.title" = "Если включено, будет установлено подключение к macpassapp.org"; + /* Class = "NSButtonCell"; title = "Browse Available Plugins…"; ObjectID = "sqO-8H-n1y"; */ "sqO-8H-n1y.title" = "Обзор доступных плагинов"; /* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "STt-PQ-Szr"; */ "STt-PQ-Szr.title" = "Текстовая Ячейка"; +/* Class = "NSButtonCell"; title = "Download current plugin information"; ObjectID = "uHR-uL-Ddm"; */ +"uHR-uL-Ddm.title" = "Скачивать информацию об обновлениях плагинов"; + /* Class = "NSBox"; title = "Box"; ObjectID = "vBs-Ga-aq0"; */ "vBs-Ga-aq0.title" = "Блок"; diff --git a/MacPass/ru.lproj/PluginRepositoryBrowserView.strings b/MacPass/ru.lproj/PluginRepositoryBrowserView.strings index b2ed3792e..1bdfb8b48 100644 --- a/MacPass/ru.lproj/PluginRepositoryBrowserView.strings +++ b/MacPass/ru.lproj/PluginRepositoryBrowserView.strings @@ -1,9 +1,3 @@ -/* Class = "NSButtonCell"; title = "Refresh"; ObjectID = "NZw-nO-lZ3"; */ -"NZw-nO-lZ3.title" = "Обновить"; - -/* Class = "NSTableColumn"; headerCell.title = "Plugin"; ObjectID = "Nzo-rR-Hfx"; */ -"Nzo-rR-Hfx.headerCell.title" = "Плагин"; - /* Class = "NSTableColumn"; headerCell.title = "Status"; ObjectID = "g1Q-BS-vCR"; */ "g1Q-BS-vCR.headerCell.title" = "Статус"; @@ -15,3 +9,10 @@ /* Class = "NSTextFieldCell"; title = "Last updated:"; ObjectID = "ntD-sJ-NRw"; */ "ntD-sJ-NRw.title" = "Последнее обновление:"; + +/* Class = "NSTableColumn"; headerCell.title = "Plugin"; ObjectID = "Nzo-rR-Hfx"; */ +"Nzo-rR-Hfx.headerCell.title" = "Плагин"; + +/* Class = "NSButtonCell"; title = "Refresh"; ObjectID = "NZw-nO-lZ3"; */ +"NZw-nO-lZ3.title" = "Обновить"; + diff --git a/MacPass/ru.lproj/ReferenceBuilderView.strings b/MacPass/ru.lproj/ReferenceBuilderView.strings index 8ee931fba..4ecae7690 100644 --- a/MacPass/ru.lproj/ReferenceBuilderView.strings +++ b/MacPass/ru.lproj/ReferenceBuilderView.strings @@ -1,15 +1,8 @@ - -/* Class = "NSMenuItem"; title = "Get"; ObjectID = "142-bE-IMZ"; */ -"142-bE-IMZ.title" = "Получить"; - /* Class = "NSTextFieldCell"; title = "Match"; ObjectID = "9ce-da-syF"; */ "9ce-da-syF.title" = "Соответствие"; -/* Class = "NSTextFieldCell"; title = "Key"; ObjectID = "K1t-OZ-ACe"; */ -"K1t-OZ-ACe.title" = "Ключ"; - -/* Class = "NSButtonCell"; title = "Use"; ObjectID = "Kqx-qm-nMG"; */ -"Kqx-qm-nMG.title" = "Использовать"; +/* Class = "NSMenuItem"; title = "Get"; ObjectID = "142-bE-IMZ"; */ +"142-bE-IMZ.title" = "Получить"; /* Class = "NSTextFieldCell"; placeholderString = "Reference"; ObjectID = "dr9-x8-kKk"; */ "dr9-x8-kKk.placeholderString" = "Ссылка"; @@ -20,8 +13,15 @@ /* Class = "NSTextFieldCell"; title = "Reference String"; ObjectID = "gik-Ha-hRd"; */ "gik-Ha-hRd.title" = "Ссылающаяся строка"; +/* Class = "NSTextFieldCell"; title = "Key"; ObjectID = "K1t-OZ-ACe"; */ +"K1t-OZ-ACe.title" = "Ключ"; + +/* Class = "NSButtonCell"; title = "Use"; ObjectID = "Kqx-qm-nMG"; */ +"Kqx-qm-nMG.title" = "Использовать"; + /* Class = "NSTextFieldCell"; title = "Reference"; ObjectID = "r1V-VE-ngy"; */ "r1V-VE-ngy.title" = "Ссылка"; /* Class = "NSMenuItem"; title = "Matching"; ObjectID = "yT1-XL-k6a"; */ "yT1-XL-k6a.title" = "Совпадение"; + diff --git a/MacPass/ru.lproj/WelcomeView.strings b/MacPass/ru.lproj/WelcomeView.strings index 6e46e81bd..2c55b1396 100644 --- a/MacPass/ru.lproj/WelcomeView.strings +++ b/MacPass/ru.lproj/WelcomeView.strings @@ -1,11 +1,9 @@ -/* Class = "NSTextFieldCell"; title = "Welcome to MacPass"; ObjectID = "24"; */ -"24.title" = "Добро пожаловать в MacPass"; +/* Class = "NSButtonCell"; title = "Open Database…"; ObjectID = "Jj3-zy-gaz"; */ +"Jj3-zy-gaz.title" = "Открыть базу..."; -/* Class = "NSButtonCell"; title = "Open Database…"; ObjectID = "44"; */ -"44.title" = "Открыть Базу данных…"; +/* Class = "NSButtonCell"; title = "Create new Database"; ObjectID = "Vxx-Ql-eI5"; */ +"Vxx-Ql-eI5.title" = "Создать новую базу"; -/* Class = "NSButtonCell"; title = "Create new Database"; ObjectID = "48"; */ -"48.title" = "Создать новую Базу данных"; +/* Class = "NSTextFieldCell"; title = "Welcome to MacPass"; ObjectID = "zdv-z8-khG"; */ +"zdv-z8-khG.title" = "Добро пожаловать в MacPass"; -/* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "70"; */ -"70.title" = "Отмена"; diff --git a/MacPass/ru.lproj/WorkflowPreferences.strings b/MacPass/ru.lproj/WorkflowPreferences.strings index 87461a57b..db3a4449a 100644 --- a/MacPass/ru.lproj/WorkflowPreferences.strings +++ b/MacPass/ru.lproj/WorkflowPreferences.strings @@ -1,7 +1,9 @@ - /* Class = "NSBox"; title = "Entry Table"; ObjectID = "2"; */ "2.title" = "Таблица Записей"; +/* Class = "NSMenuItem"; title = "Default Browser"; ObjectID = "7YX-EA-9KA"; */ +"7YX-EA-9KA.title" = "Браузер по умолчанию"; + /* Class = "NSTextFieldCell"; title = "Double-click on URL:"; ObjectID = "10"; */ "10.title" = "Дабл-клик по URL:"; @@ -23,8 +25,11 @@ /* Class = "NSMenuItem"; title = "Opens Inspector"; ObjectID = "44"; */ "44.title" = "Открывает Инспектор"; -/* Class = "NSMenuItem"; title = "Default Browser"; ObjectID = "7YX-EA-9KA"; */ -"7YX-EA-9KA.title" = "Браузер по умолчанию"; +/* Class = "NSBox"; title = "Clipboard"; ObjectID = "Kff-Xp-hAT"; */ +"Kff-Xp-hAT.title" = "Буфер обмена"; + +/* Class = "NSButtonCell"; title = "Update password for new entries"; ObjectID = "RaM-t2-DVR"; */ +"RaM-t2-DVR.title" = "Обновить пароль для новых записей"; /* Class = "NSTextFieldCell"; title = "Open URLs in:"; ObjectID = "soD-wI-YOH"; */ "soD-wI-YOH.title" = "Открывать ссылки в:"; @@ -32,5 +37,5 @@ /* Class = "NSBox"; title = "Templates"; ObjectID = "Xvt-tP-TbR"; */ "Xvt-tP-TbR.title" = "Шаблоны"; -/* Class = "NSButtonCell"; title = "Update password for new entries"; ObjectID = "RaM-t2-DVR"; */ -"RaM-t2-DVR.title" = "Обновить пароль для новых записей"; +/* Class = "NSButtonCell"; title = "Hide application after copying to clipboard "; ObjectID = "1Vr-nY-Ogv"; */ +"1Vr-nY-Ogv.title" = "Скрывать MacPass после копирования в буфер обмена"; From 32c6bae7e4c2bf52ac7cd15d79da7ee185c0f79f Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Wed, 7 Aug 2019 15:09:17 +0200 Subject: [PATCH 090/129] Updated to Xcode 10.3 --- MacPass.xcodeproj/xcshareddata/xcschemes/MacPass.xcscheme | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacPass.xcodeproj/xcshareddata/xcschemes/MacPass.xcscheme b/MacPass.xcodeproj/xcshareddata/xcschemes/MacPass.xcscheme index e3598ee77..2fe0b1763 100644 --- a/MacPass.xcodeproj/xcshareddata/xcschemes/MacPass.xcscheme +++ b/MacPass.xcodeproj/xcshareddata/xcschemes/MacPass.xcscheme @@ -1,6 +1,6 @@ Date: Fri, 9 Aug 2019 21:31:11 +0200 Subject: [PATCH 091/129] code style --- MacPass/MPAutotypeDaemon.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/MacPass/MPAutotypeDaemon.m b/MacPass/MPAutotypeDaemon.m index ace24103d..3f73ca1a8 100644 --- a/MacPass/MPAutotypeDaemon.m +++ b/MacPass/MPAutotypeDaemon.m @@ -209,7 +209,8 @@ - (void)_performAutotypeForEntry:(KPKEntry *)entryOrNil { NSPredicate *filterPredicate = [NSPredicate predicateWithBlock:^BOOL(id _Nonnull evaluatedObject, NSDictionary * _Nullable bindings) { MPDocument *document = evaluatedObject; - return !document.encrypted;}]; + return !document.encrypted; + }]; NSArray *unlockedDocuments = [documents filteredArrayUsingPredicate:filterPredicate]; /* We look for all unlocked documents, if all open documents are locked, we pop the front most and try to search again */ if(unlockedDocuments.count == 0) { From 2d3e81a5c12c6eee914fb30e5a1939cc753994ae Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Wed, 14 Aug 2019 12:08:18 +0200 Subject: [PATCH 092/129] Added double click action to select the group of the currently selected entry. This feature is mainly aimed to ease navigation when browsing search results --- MacPass/MPEntryViewController.m | 16 ++++++++++++++-- MacPass/MPOutlineViewController.h | 2 ++ MacPass/MPOutlineViewController.m | 16 ++++++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/MacPass/MPEntryViewController.m b/MacPass/MPEntryViewController.m index 6f0efab63..f074d6d6a 100644 --- a/MacPass/MPEntryViewController.m +++ b/MacPass/MPEntryViewController.m @@ -752,11 +752,11 @@ - (void)_columnDoubleClick:(id)sender { if(0 == [self.entryArrayController.arrangedObjects count]) { return; // No data available } - NSInteger columnIndex = [self.entryTable clickedColumn]; + NSInteger columnIndex = self.entryTable.clickedColumn; if(columnIndex < 0 || columnIndex >= self.entryTable.tableColumns.count) { return; // No Column to use } - NSTableColumn *column = self.entryTable.tableColumns[self.entryTable.clickedColumn]; + NSTableColumn *column = self.entryTable.tableColumns[columnIndex]; NSString *identifier = column.identifier; if([identifier isEqualToString:MPEntryTableTitleColumnIdentifier]) { [self _executeTitleColumnDoubleClick]; @@ -770,9 +770,21 @@ - (void)_columnDoubleClick:(id)sender { else if([identifier isEqualToString:MPEntryTableURLColumnIdentifier]) { [self _executeURLColumnDoubleClick]; } + else if([identifier isEqualToString:MPEntryTableParentColumnIdentifier]) { + [self _executeGroupColumnDoubleClick]; + } // TODO: Add more actions for new columns } +- (void)_executeGroupColumnDoubleClick { + NSUInteger clickedRow = self.entryTable.clickedRow; + if(clickedRow < 0 || clickedRow > [self.entryArrayController.arrangedObjects count]) { + return; + } + KPKEntry *entry = self.entryArrayController.arrangedObjects[clickedRow]; + [((MPDocumentWindowController *)self.windowController).outlineViewController selectGroup:entry.parent]; +} + - (void)_executeTitleColumnDoubleClick { MPDoubleClickTitleAction action = [NSUserDefaults.standardUserDefaults integerForKey:kMPSettingsKeyDoubleClickTitleAction]; switch(action) { diff --git a/MacPass/MPOutlineViewController.h b/MacPass/MPOutlineViewController.h index bd64098b6..7fd8492c3 100644 --- a/MacPass/MPOutlineViewController.h +++ b/MacPass/MPOutlineViewController.h @@ -26,12 +26,14 @@ APPKIT_EXTERN NSString *const MPOutlineViewDidChangeGroupSelection; @class MPDocument; +@class KPKGroup; @interface MPOutlineViewController : MPViewController - (void)clearSelection; - (void)showOutline; - (void)registerNotificationsForDocument:(MPDocument *)document; +- (void)selectGroup:(KPKGroup *)group; /** * Retrieves the current item for the current mouse location diff --git a/MacPass/MPOutlineViewController.m b/MacPass/MPOutlineViewController.m index 0c6512758..3d492ca10 100644 --- a/MacPass/MPOutlineViewController.m +++ b/MacPass/MPOutlineViewController.m @@ -143,6 +143,22 @@ - (void)showOutline { } } +- (void)selectGroup:(KPKGroup *)group { + NSMutableArray *parents = [[NSMutableArray alloc] init]; + NSUUID *groupUUID = group.uuid; + while(group.parent) { + [parents insertObject:group.parent atIndex:0]; + group = group.parent; + } + NSTreeNode *node = [self.outlineView itemAtRow:0]; + for(KPKGroup *group in parents) { + NSUInteger row = [self _rowForUUID:group.uuid node:node]; + [self.outlineView expandItem:[self.outlineView itemAtRow:row]]; + } + NSUInteger rowToSelect = [self _rowForUUID:groupUUID node:node]; + [self.outlineView selectRowIndexes:[NSIndexSet indexSetWithIndex:rowToSelect] byExtendingSelection:NO]; +} + - (void)_expandItems:(NSTreeNode *)node { id nodeItem = node.representedObject; if([nodeItem isKindOfClass:KPKTree.class]) { From d4efba00ae0b13746ae7f56736e9cf7d9d1b650f Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Wed, 14 Aug 2019 13:25:47 +0200 Subject: [PATCH 093/129] Removed unused file --- MacPass/en.lproj/Localizable.strings.updated | Bin 54594 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 MacPass/en.lproj/Localizable.strings.updated diff --git a/MacPass/en.lproj/Localizable.strings.updated b/MacPass/en.lproj/Localizable.strings.updated deleted file mode 100644 index ed8a8aa9f5420962a8aff2c589d942efec0b5a65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54594 zcmd^|U2h#na)!_K{tDWFk?dma&217a5L%>Ut|dw!Da+1{pf7tBTaqKn(KJe z=69Pc!^1{rg~ZVpqSmpU&*gJsWefIW2$h z*bE1oKil7Z%=FI&(eDf{XmDiEUK$=h8O*=h@828TZwt0iMZbX)cP}?z*tK(`5p)9| zDE6jMP}DiFaR&u=QR%r+?wP#->iuMQ^qyySl{uIJ8h>JUS~?vW_TSmNrg+DljK^m- zheHVzKiK@^Ss&Z%cZ}xa*<(cemahu-;*8OIzOuO=UajruO}#PgyY3n7UK_39MR;rU zzI%mB9u|&*pGNN-jcecg$lmwD_dM}OM4gG_O7hii_PDP zTp@K}{QZ?A9&G+`^AC0d7CKbTIY#T3vDW0@}#WGUyCk5 z>%22Aas30;(Y8N~^ZrQsu~$xt2{N1%Zp8qcC}@7ZsM_S1z?_{3-~`FU&_8r^%# zMqCtX^V8|(wvEYp_|RtC$9y+M8Kg@5b~98tFWh)kt@y4KiMjgJfD6J(39CMrFiJK@ z7U!Aq0kS4NAz4GKxu)o^B5QrTxqG#~tUk8-Tl-fMd1}1!sm&sbe4RNmzK3QjkppQH z*E+}moQ+mO^5AbQ^?%q%G>+s|mX)8UxWV7}6Aug{_#ItxTyQ!w8#~2gX?%vc)|&E) zY7ag%DaY(bR{|wSp`$@M5eim zXLZ+B?2cVIE%plR8TqhKf#;9QT1y9@8&2)1`=)U-b#D4iyU_Jb;dl9>nX0m^-y5~C zqpyv#3!(&bOfGGZr?qJKAu;VDU_u3`Q0 zZIRoNl+5w?)Osj}KP|Mz13WLb1-Fqi2P3SZQcf$Cgn0Yx7UOwErW%%u;YU^oer(c+03FyL)%Q zmE+O7;FPg&_-m+@M-#6&W}g_AJ#MIBlTXfSKOAbj`6n_)C&r`m8f)IJJEqc6)77dY zj^Movp(ymY#F>nET)b5{bIIOrKTF0vYi{t!mK1q@dnLof*P#QH4I##!Vq5d?(ppaO z2A?HsHji^V!&-d9bNDS;s2ZDEr;&ZzhdtW&JGQ6z$G19P81Ewa&rIk3Vo^3;!)Kd+ zv48t{>d1%Jw(GS?36e9`TfxmC%kmS}Td&6jw!RH(SI_d8P;zL$c zJMm~}8pr%%^dxJ`6KF#G1;tAvUH{OcMY6Zx0f!&iI^o?ap2z1}iV#GtPX=~wpYvy0 z-76UOA`#D4eH`kH_@U1|%hVXpm$5&z6~@=b#v>1Sg7VkNF#lrLh=Fsa_wVgKm7w<@ z#;G26x%s_Ss1C{>XsUd3&K6VML1X-2f0Q+@Ewsnza9se;=V&&3utx8$t>HSQtbEAl|GMDCiP*0N&4dqlA}SBTrmXyX5QMn3dV=80Wr$awYE%enuF;mN8|0f7&ml~ttP3Lk)*;tB34 z3)*6Lt7MO)8Nh)`>bb1~e$##P_>T(iQ=Ha5moa%%VwdLz3ALrnw~mkNJjFM!P0M{= zRtea#2V`pSr{3EfZ%ZCGFjS;Vm4)Z(`qiO%wXEfZ#WiHE(17=C{kV2!zY&oTb>6ir z=*LGzA2Q~V{l*$!*u6Rvu&)_2g|H38fmB>n7t{KZlOhj)V7OD;gLWRhOEXYE3VCi< zIq*i$e^u5LoTlqK9+}~UC$nE$>k8Eq82r7;7Z#6F&>$`;)=o65Q#4aKQ^Xt9sOqqU1wpNjy?_sdrs-l(V z)>8K~1gA!OxQHl`SlKniKN&p_ue3_g^LrbiI_&e!A8o`v`~8_olBAK`1wW~74Buj5 z=xO+&Xd$iMtAg{T{fjg+y1%yDtmar7tKvxA0$&mThJUHo^E*;-$9_i_kc;)JM8UP) zX{G$8-nhTDf$~)Kku7|L@EeFdk*TP0jOFBh$xNS_Y*6!mY;?gAN^3qW7Lgj>JgwHx z(ZilTmu>jc`3a830w7gH&dh<0k7z?N3BHnQ+p356W0c?9bK6o0-n%HijI1aYhIf8y zb9uh3<*Poe#xwOOwpNzarR5YtBB6l1zU$MAC~!T+To#p~8RNU2a%*SI6g)RhfKRYe z-m4;dMBYMjh2Fljamdko`&SZ$|AIw>rce{!duD%RB}bK|mIsvMzA!%oU4^%+njRQ^ zX@Bufkj1{%n$}luX8tkV=B&aTMMm~v%tbY&q?@*-*PJx&XZ~F&b!nUfU!l2Gb0Ma} z-<71|2g7+&i@F`f&W*qDe2KT@15?94GcCWnee6+g_xFq`sD85R$>`0~c~{K0mF4Tc zC(~J;p=`+--w@9cF9Y3&7Od-ntqvlV!gD6)M8C*<4AL8&VLdhpiEP5ubKK60{?6c< z_h@`XhT)b$pnecy5tqPzZK%GQXSr9Ty^i8!Nj!p@#zvy{Pem(WkI)k2h`g&Ju$QNu zGaYj=*EIi{Gvd=I3GeW*tZL}g^-p9f)YUzY58f0{?dO7>VnWqQd)WXY5wB#&TF@h| z`tsxA(UJ!}Oa535t#@@XVhK9Ww*@_yphAn2c_P>5Il1#I%`SbWUQ4h?|BDLOdr#)e zObd^X9$o2uWj-!S{s&*b_V8;et$Q}p?|+ZS@$-pLi2{DGpOGB8UHcr8vtW0OPta2j zhTJk5oiT6unoNz>x|VVEQ|78PSrA6%PR7hZ5!KWq71Iy_`J5To`-T(wja(hAd-Zxb zFV=s%Co>Ih6+F}xJTrDrm{#3kecwVJGZ+qFy7;?X{tG%{z;jmH(A z06RK_irh=%cslOEN^uIYPOdwPCUoiR2~j|neTsefh~!w%sC3!0R=I~cFrOcvvA%7v z!u3EIwg@{YY^kCHJNAwpL%n>Xv@o_X;~ZGrH;JYv89yXMUS!($P4(7(jG&&5%W&?K z>Ql?z=a&{D#ZK$iVBNDfg(1GWTb@2{q4&4JYU!zr5Bs?88fWjDpEU1?i~MeeWS_j_ zSoNu@yW3E7?um@UL(_!h0zyyjpRU-ov#yVywF_CRdR&HcpS1Q`Qs6wIdJWNb^k4IA z#*q5+)2nf)XIFa|m&aS~>er$$$yei~4pIY^G8bjVZ zKD|9bvcz+k<)<=^{dECztxLV5iM)q=57uS62K8>Y@Emg9AYh#vongGrI?TcEJUI3K zw!th@*7NXdaLmtTZ0mhlA;pnvpYG0bt@g^+jee=;A7bZvwrt_NtKiwyTDu=To!$3- zJvU9tt_P%5*?g|RDLr10-(TI8TAGR(eW&Yi)J>`)_bpxVQ9{elv~ z_eRSDo&lWtr|J}J`Ps8d7sk2$y~r*Ry^fkGXSF_S>tliQbWFx_pKCRx!ZO5bt!9fw z|GAsOEbDWLoT_?-;PKDotVozhcx`YSx8<=p5D z`!;l(`mueAZX?grIeVDbzHNV9+A$f+eXh_h5U*dg8jJpOHDcA*O~Kxj-l^>YU^UzZy)#bP4CP>^JVb@>8gfiq2cI`y=_!d z=jdb0fKn}ZbQKB53NMYDd$-nG``8?Jx?$;|y=C-rUj5u4>BTPXyGJoezt45Ir|0nb zCV8@@28h>3_ zd-bsv*6_)DwcmB4Gn}pT*InG%FLI6vitA*Z==mnPx-{)w_YaO`cDdKP#b^9P#;NBC z)YZOLb9w*7`iee#tf*kAR^V|0(TsLq#feUSFDjw#RrKIg1X9mFiZa$d?+~Cvy`m}U zkd38dj(QbUAEI8yYzyP~9ko5AuZ8Nm&p(coY8p(fJiI||56f8V`?#99;^+!{tr-0) ztO)tRtQY**{<$*wo%M+Eo9+|~R#(02c|xZ9c#I?QW6Ki$YezIgo z<_U3nM$Mn@E%xtjN5dA{Z8K3ly7Vj!nu1KR(moWGsdz4*`=G~so*nMpf{rVwV zkNv-@RKGOHvpzX1*-?6VfmQjnlhT37NzC8bny|+$$I<8$GOBBy$#5N8Bm|c$9zqw8 zkz)ni!y;Oc9wqY1od?r1l39_A5q?9Qw;F3PhBcp;n&o`$6WikEk{vt5ydQkDD{*N@ zSzd|j?zh{=T>GNP_4j~HvFYv4loYD|L_Y>y(sYc+4!k~Jh}OH#n5oou^rF|{dRiU#o%6A8w~xiTCwGOG6A84-!Sjaf!Uexpa(BgQH;uIh>*bjdSj>U!6E^d_CXqQG0k$0x#(8l_q1anzV#gJ?m-Cq?L_VOs^eZ_17bgug(X+qEAO< zm~R(7>~E3xOy@hht@$7Q>wc?pR}m>kz7=~&uRl-dyBR0;WSlg{YWL0>bKB_}G2Rfo z@U2r~;$FO6JC{uYUQ4K23pNg;~{HSQFT6}n&cx9w2j#>Ee3OA(FEX&rNmlFeockii^=8SGtM_`Lnd)4XuQRz5{~}1{ z9oOvAB~GPJK2&q|$%90a4g)%-kvxb@VG)5pTL?)G$EgMHHIp~*5F=~_Hf zC0FxuS1tCLbBDASEmJE$%}TpwTaUALBCx-lEGF7)7s~Z!$rQx?WD7dY%JgErh%}s9 z&cAs_Oy0#DHQct+^Taep&VILNy!9!D-}zI*-otdYTbRV`s zzQR1c#BW$fzPWR=6l+fa!_x3glO=8&t-yG`Oub{18INt@CRNJSmF84Jr_#kvej7WB ze~jgLf2C`uXG2Y;jNCsN0xCTor}i-GkIN9>DJzE_m0dfx-|I8%?%EyyI+R1g`R{y_ z2^+4H$EQ0TbDn1H_!=@Osj4`Bb(~w7D}e#gbT4?$z~`C2DiH`4O4WU4@1KwvZ<@=u z%hvJl(g~e#gnGi3-Ymu9&_(}jeT-7M;t?;jQ zd1tPB=8W;awhWU~pL0VV6e#e|^>pxK|89oq!r<^COmxrTGy6B+uy z823t(NRI>rf3dZIKeSWgQF_z#PM-0$;RddX0_lC?L`dzFBin{vi?dzCt3O)C;%Ui@ zwp|X{Q&49pc~I(>`j!E^bBP7uo19@>Gd4rL)_1LabzkS!w}HQ8rShqKZsBrVH}%Yk zQISk4^2#QKJ&)Di_PJefB_46h6JFpv76I!N4}Dd!UM2rh-@4~A7Dt7~>XA`K2tLLV z5lQ>X^mDpFy?zFFbbtJQAb}1`JJubD4pOd7#zqBAuNg3 zR}$u5eM6h7(~#&At&8T!a@eyyt!L(6s8i*rK9?G;8qfqmA zpH{veBM7q$?26@@Io4y>$3v^hsbubhxQ_kSe2BZY-maTM7FwJ&a$79tpK9^i{S0wybig(kMIXAPe1ekH~tZD29uHn#E)uO&x!!o^_;X%u2WqNTb@f7)2I8Sjy?q~K0 z-2FT5`6)uO@b23&OJMlQ=JFabD}$Ya?yt(*n1O5gOH5=VvW@cp1RPdc9HQch%_?%wh4r}2mk z(}?GM-69rQ+Rw2Zv*o=Y8TZ`p>$8ll>Re>xIQRIycP~?-e>#F&jj7~$zpJ zU88^|_X84n)L%}m>nl@u*F2puy6)Pp>jadI8L#bhmgTjLXQmvV^9(Jo=X;qFbaA^XbAL1`3w`9;M-^i2o_7zLEVx(VGMtg#%-5(0v zZV9MrV*AkwxyPoDPmcb_BQor##U9~5OTy_qq92(KZ}NDd%VRZw2Ac>5@=F-)n(aZ+ z6w`UYQk}A{d;9Z%J^qeUCwl|R(ZmWflJR4E2^G*Z;TOb}OoyW~lW6ek6|H+7iey7_ zB4~&~6ya%4cOK#13qF;fU*~ih^Ev#ol>5tXsXewee&DISf%SlP_0!?+Ih=Vc64;(& z7km+Rf!LiIdrft}mg#=K#Hn?zMe-t_%=?;DH;gZ7APab9uHz&#cvSWGO6xCC>$m*= z=%$xeA%?8=-V?(ZS|JN$uJBUuMu{lN@*o3Vg4!vl#-&e%HCYF@ z^Gn#TnQMEj`}j%cZI{Uy!CzNM<}(#bwAf~@OpDq#@5zkp%JjQLo}&vosiss{GP90# zj%dGGlVy86CPO{8$pMYax>vPgUzgvJ&lV?KELHDg9ot&h^iGEM+%ysvk6m&HR_VtI zO;4`KdGyh#6?0?q8(A}X4BnT>o7JO6ya?u4X7#k8FX_F;W@0~cSB$<0@W3(<)RXcF z48f7y>y5||jaO`q7d1U$s`iG~_)=}R?XpKTePW$o)pnT%e^2jZ8nJgUPE808FMNCF zT-8e$`?*xN zT@(R1H%%!?M*tk9+IL-XUx$tI3)iR0c%Dp!Q7r50KgKlTVz*~cEYium(^ALdt}O53qlqF)G{iLaTw1G^KbVF1L0O+3^<%Y^`)J2p2bzz;If~Y|=N)CKTK-zgHKV6@ z;g_W~T9#;+%{-I*p>{RHdu=hVr2?CP=Zd}DUAC5H$6VrO&Mb?#XNGP-Er!tT=e_gtj)YF6Q z!sAv(i2hwVHP{1nJ3%~XS;hUjY`f5NF3bcf<&+O6>^TY8V5 z$++GskdgT#7f6oUS6Fi1hqTWN-~hFP8*!_f*Dru7k7AWke;-vlMh*6FHIH^0jjgAVQ~l zLFWB(^GUUu?Bc#-vP~a$9jBuak#O($6wdmZHQ7Je4D174%T%ezz1NY#P0W5X6hkJU z9JzG(o$nK9FLPZ1tFv?S6oVpungQnlX!kjkYiXHfWj)QdnSVE`Nry%avBzzq4}OX| zOF~nu$K>2BkR+<5jC2OFRPWs1W*yego~hJ}+}Y1uOPbpk;-|s>v7g#o|7?Fht*+)BaAgVwH5zCX$?mvP*)>ueeS=n3;2Z>yc~(INu$ zb4$xf7+wH1Z`+9JSJ)HI{%VA<$xwrdma4KCo<%{n7r04 zs!vhhgzJD&J0M0{L^UAvMZ0sdrtoxJhAZ|wll!ALOwm2PQBgY(*L!DS&h$`415Tng zVD`>W-^Zk)~lN1z}4JXv+M=I^r_AV-9R~q)X>DXr$sFMj`!p$HPr zJDxs%V0~^w?kbt$wdR?O^H`J7qm8D;`YHn0PKSAI{rtl`uHX6^DEBi(Ha?)hf6)%` ze=D?APPv6K-r>|F@Q|iM4O#tos@so`UWIUkGcy+I^0i*8^iI~V*mcxsSek4 zM22(!^i>`_x^JOBQN<{U;m2*|TAx1K+vbjq{^w z%7mp;N4Iy*;2ZFzllnZ742inPu>_e<^40O1i1b`VruOGD5D@RHAZt?xMwNLMYSKe8HHuP?Q_A3-MM0xiZcGtTA^gW6`-5C|ajX!L&F z%WvIZr*BPv@9aOi9+ypzet7f}`78DiIxT8E zl>@>yg9kgN+A5SRr8+}m7Jmm?k!~4v$G3VfV^yE_-e$C;n;vaQyvu20qxiO^*godY z^zG#{eC;#+rqrrC5dN>OOHKd0+o#rI*Ioa)_vH0L4`g|8UiUR44;Z~X;%Mh!Whuh9 z^JkHLKXWu|?ZCH6tp_J<;OxaZbO;*)Gw*yXRC3$=oh)c#an8bjxQ2 zP`$sHX!VwcbI)bE+$x>`U3~Nc@@)orfxYzwa{LA7fsBdkcf2+_z3Q*t1~1gv2<4>k zoOM=m&W*#V=z8)HX#83u#k$vd2_nLLI&#f7`W|TfqsnOotIA4 zLyOyxC%!vKZREgkC%)iXZ4te9W!gask4#VUi++@)Co+zGkAVKs=+AN3+gQEcA(8n- zobMj-uOIf)Ul^9-(+uIgyj#3|pQ;m{ea_y4)2hxAWbPP^$h44m>hlYSsF6fGo}+YD z9)E!dz%$rn?eKG$!7~73I@dV2I695PM`Ly}#;?qiaCr_&Lqqp0{oNM^i^uWx(}78E zEP0&e9r8IV<#p(MEmOGmAi=!dq0TjWW>uZZ`_IV*vG-h6@tg;q-pTL0u-WE#Zn+oS zH8}6#i!@)F*3$kE?ANZn-usy?V|vf z@t|0Vyzkbf`H|5Bs;IX_db3wU#u`lPHg4IkH%q4XiOE>DWL`_ZFnn|>SM5d1lMnx$ zZY|}+rNzS9^gNapZuN;1u@aRlPZ^$)b{1e+7@^2^?wg`FGkc~Mx-#c_h{o%)%Ul%ZPKfqg{?7MqIS}jG0Ei1&-=}Q+HPm+IF@~jho<@ zeaPGhr}ccYW`<0O{dsGBIgh$78e>VPPEVxV@2tOl%%K1~3+eGArqiySuy*^T$LL*| zO4;}IJh*Gq_rmzRopcGpyg)+liRb X@c8q&3qiF)WtH*7a~7a?PxJl{kq-U? From 6b13ab37b8004ff39f7b87b7246381d7644e23b0 Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Wed, 14 Aug 2019 13:25:55 +0200 Subject: [PATCH 094/129] Updated localizations --- MacPass/en.lproj/Localizable.strings | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/MacPass/en.lproj/Localizable.strings b/MacPass/en.lproj/Localizable.strings index d4a0f6db4..4a6db4cb3 100644 --- a/MacPass/en.lproj/Localizable.strings +++ b/MacPass/en.lproj/Localizable.strings @@ -49,18 +49,6 @@ /* Disallow the download of the plugin repository file */ "ALERT_ASK_FOR_PLUGIN_REPOSITORY_DISALLOW_DOWNLOAD" = "Do not update defintions"; -/* Button in dialog to leave autotype disabled and continiue! */ -"ALERT_AUTOTYPE_MISSING_ACCESSIBILTY_PERMISSIONS_BUTTON_OK" = "Keep Autotype disabled."; - -/* Button in dialog to open accessibilty preferences pane! */ -"ALERT_AUTOTYPE_MISSING_ACCESSIBILTY_PERMISSIONS_BUTTON_OPEN_PREFERENCES" = "Open Accessibilty Preferences…"; - -/* Alert informative text displayed when Autotype performs self check and lacks accessibilty permissions */ -"ALERT_AUTOTYPE_MISSING_ACCESSIBILTY_PERMISSIONS_INFORMATIVE_TEXT" = "The system prevents MacPass from sending key strokes to other Applications. To enable Autotype please grant MacPass Accessibilty rights in the privacy preferences."; - -/* Alert message displayed when Autotype performs self check and lacks accessibilty permissions */ -"ALERT_AUTOTYPE_MISSING_ACCESSIBILTY_PERMISSIONS_MESSAGE_TEXT" = "MacPass cannot perform Autotype"; - /* Button in dialog to leave plugin ds disabled and continiue! */ "ALERT_INCOMPATIBLE_PLUGINS_ENCOUNTERED_BUTTON_OK" = "OK"; @@ -696,6 +684,9 @@ /* Action button in Notification to show the Autotype Doctor */ "SHOW_AUTOTYPE_DOCTOR" = "Show Autotype Doctor"; +/* Menu item to show the entries group in the outline view */ +"SHOW_GROUP_IN_OUTLINE" = "Show Group in Outline"; + /* Menu item to show the history of the selected entry Toolbar item to toggle history display */ "SHOW_HISTORY" = "Show History"; From 9c177afdb0aec6b753086f341fcf4475d536e8fe Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Wed, 14 Aug 2019 13:26:33 +0200 Subject: [PATCH 095/129] Added show group in outline to context menus --- MacPass/MPActionHelper.h | 1 + MacPass/MPActionHelper.m | 1 + MacPass/MPAppDelegate.m | 2 +- MacPass/MPContextMenuHelper.h | 21 +++++++++++---------- MacPass/MPContextMenuHelper.m | 9 ++++++++- MacPass/MPDocument.m | 3 +++ MacPass/MPDocumentWindowController.h | 4 ++-- MacPass/MPDocumentWindowController.m | 8 ++++++++ MacPass/MPEntryContextMenuDelegate.h | 2 +- MacPass/MPEntryViewController.m | 10 +++------- MacPass/MPOutlineViewController.m | 1 + MacPass/MPToolbarDelegate.m | 2 +- 12 files changed, 41 insertions(+), 23 deletions(-) diff --git a/MacPass/MPActionHelper.h b/MacPass/MPActionHelper.h index 7c2c984e3..2d35e7dfa 100644 --- a/MacPass/MPActionHelper.h +++ b/MacPass/MPActionHelper.h @@ -47,6 +47,7 @@ typedef NS_ENUM(NSUInteger, MPActionType) { MPActionToggleQuicklook, MPActionShowEntryHistory, // show history MPActionHideEntryHistory, // exit history + MPActionShowGroupInOutline, // show the group (of the entry) in the outline view MPActionPerformAutotypeForSelectedEntry, // Perform Autotype for selected Entry MPActionRemoveAttachment // Remove an attachment }; diff --git a/MacPass/MPActionHelper.m b/MacPass/MPActionHelper.m index f539b2431..dca564ecf 100644 --- a/MacPass/MPActionHelper.m +++ b/MacPass/MPActionHelper.m @@ -57,6 +57,7 @@ + (NSDictionary *)_actionDictionary { @(MPActionToggleQuicklook): NSStringFromSelector(@selector(toggleQuicklookPreview:)), @(MPActionShowEntryHistory): NSStringFromSelector(@selector(showEntryHistory:)), @(MPActionHideEntryHistory): NSStringFromSelector(@selector(hideEntryHistory:)), + @(MPActionShowGroupInOutline): NSStringFromSelector(@selector(showGroupInOutline:)), @(MPActionPerformAutotypeForSelectedEntry): NSStringFromSelector(@selector(performAutotypeForEntry:)), @(MPActionRemoveAttachment): NSStringFromSelector(@selector(removeAttachment:)) }; diff --git a/MacPass/MPAppDelegate.m b/MacPass/MPAppDelegate.m index 8d6c0c566..ae683871c 100644 --- a/MacPass/MPAppDelegate.m +++ b/MacPass/MPAppDelegate.m @@ -158,7 +158,7 @@ - (void)awakeFromNib { [fileMenu insertItem:item atIndex:insertIndex]; } [self.itemMenu removeAllItems]; - for(NSMenuItem *item in [MPContextMenuHelper contextMenuItemsWithItems:MPContextMenuFull]) { + for(NSMenuItem *item in [MPContextMenuHelper contextMenuItemsWithItems:MPContextMenuFull|MPContextMenuShowGroupInOutline]) { [self.itemMenu addItem:item]; } self.itemMenu.delegate = self.itemActionMenuDelegate; diff --git a/MacPass/MPContextMenuHelper.h b/MacPass/MPContextMenuHelper.h index ae0835790..a60722213 100644 --- a/MacPass/MPContextMenuHelper.h +++ b/MacPass/MPContextMenuHelper.h @@ -23,16 +23,17 @@ #import typedef NS_OPTIONS(NSUInteger, MPContextMenuItemsFlags) { - MPContextMenuCreate = 1 << 0, - MPContextMenuDelete = 1 << 1, - MPContextMenuCopy = 1 << 2, - MPContextMenuTrash = 1 << 3, - MPContextMenuDuplicate = 1 << 4, - MPContextMenuAutotype = 1 << 5, - MPContextMenuHistory = 1 << 6, - MPContextMenuMinimal = MPContextMenuCreate | MPContextMenuDelete, - MPContextMenuFull = MPContextMenuMinimal | MPContextMenuCopy | MPContextMenuDuplicate | MPContextMenuAutotype | MPContextMenuHistory, - MPContextMenuExtended = MPContextMenuFull | MPContextMenuTrash + MPContextMenuCreate = 1 << 0, + MPContextMenuDelete = 1 << 1, + MPContextMenuCopy = 1 << 2, + MPContextMenuTrash = 1 << 3, + MPContextMenuDuplicate = 1 << 4, + MPContextMenuAutotype = 1 << 5, + MPContextMenuHistory = 1 << 6, + MPContextMenuShowGroupInOutline = 1 << 7, + MPContextMenuMinimal = MPContextMenuCreate | MPContextMenuDelete, + MPContextMenuFull = MPContextMenuMinimal | MPContextMenuCopy | MPContextMenuDuplicate | MPContextMenuAutotype | MPContextMenuHistory, + MPContextMenuExtended = MPContextMenuFull | MPContextMenuTrash }; @interface MPContextMenuHelper : NSTableCellView diff --git a/MacPass/MPContextMenuHelper.m b/MacPass/MPContextMenuHelper.m index 3691ffa4a..058cbb60f 100644 --- a/MacPass/MPContextMenuHelper.m +++ b/MacPass/MPContextMenuHelper.m @@ -42,6 +42,7 @@ @implementation MPContextMenuHelper BOOL const insertDuplicate = MPIsFlagSetInOptions(MPContextMenuDuplicate, flags); BOOL const insertAutotype = MPIsFlagSetInOptions(MPContextMenuAutotype, flags); BOOL const insertHistory = MPIsFlagSetInOptions(MPContextMenuHistory, flags); + BOOL const insertShowGroupInOutline = MPIsFlagSetInOptions(MPContextMenuShowGroupInOutline, flags); NSMutableArray *items = [NSMutableArray arrayWithCapacity:10]; if(insertCreate) { @@ -113,7 +114,7 @@ @implementation MPContextMenuHelper [items addObjectsFromArray:@[ copyUsername, copyPassword, urlItem]]; } - if(insertAutotype || insertHistory) { + if(insertAutotype || insertHistory || insertShowGroupInOutline) { MPContextmenuHelperBeginSection(items); if(insertAutotype) { NSMenuItem *performAutotype = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"PERFORM_AUTOTYPE_FOR_ENTRY", @"Menu item to perform autotype with the selected entry") @@ -128,6 +129,12 @@ @implementation MPContextMenuHelper showHistory.keyEquivalentModifierMask = (showHistory.keyEquivalentModifierMask | NSCommandKeyMask | NSControlKeyMask); [items addObject:showHistory]; } + if(insertShowGroupInOutline) { + NSMenuItem *showGroupInOutline = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"SHOW_GROUP_IN_OUTLINE", @"Menu item to show the entries group in the outline view") + action:[MPActionHelper actionOfType:MPActionShowGroupInOutline] + keyEquivalent:@""]; + [items addObject:showGroupInOutline]; + } } return items; diff --git a/MacPass/MPDocument.m b/MacPass/MPDocument.m index 1feab8013..42f490db7 100644 --- a/MacPass/MPDocument.m +++ b/MacPass/MPDocument.m @@ -914,6 +914,9 @@ - (BOOL)validateUserInterfaceItem:(id)anItem { case MPActionCopyCustomAttribute: case MPActionCopyAsReference: valid &= (nil != targetEntry); + case MPActionShowGroupInOutline: + valid &= (nil != targetEntry); + valid &= self.hasSearch; break; default: break; diff --git a/MacPass/MPDocumentWindowController.h b/MacPass/MPDocumentWindowController.h index e02521b45..2b51042ca 100644 --- a/MacPass/MPDocumentWindowController.h +++ b/MacPass/MPDocumentWindowController.h @@ -66,11 +66,11 @@ - (IBAction)delete:(id)sender; - (IBAction)duplicateEntryWithOptions:(id)sender; - - (IBAction)pickExpiryDate:(id)sender; - - (IBAction)performAutotypeForEntry:(id)sender; +- (IBAction)showGroupInOutline:(id)sender; + /* actions relayed to MPEntryViewController */ - (IBAction)copyUsername:(id)sender; - (IBAction)copyPassword:(id)sender; diff --git a/MacPass/MPDocumentWindowController.m b/MacPass/MPDocumentWindowController.m index ece7e22f7..87f9fd678 100644 --- a/MacPass/MPDocumentWindowController.m +++ b/MacPass/MPDocumentWindowController.m @@ -545,6 +545,14 @@ - (void)showEntries { [contentView layoutSubtreeIfNeeded]; } +- (void)showGroupInOutline:(id)sender { + NSArray *targetEntries = self.entryViewController.currentTargetEntries; + if(targetEntries.count != 1) { + return; + } + [self.outlineViewController selectGroup:targetEntries.lastObject.parent]; +} + #pragma mark - #pragma mark Actions forwarded to MPEntryViewController - (void)copyUsername:(id)sender { diff --git a/MacPass/MPEntryContextMenuDelegate.h b/MacPass/MPEntryContextMenuDelegate.h index bd7add5f7..726009155 100644 --- a/MacPass/MPEntryContextMenuDelegate.h +++ b/MacPass/MPEntryContextMenuDelegate.h @@ -23,7 +23,7 @@ #import /** - Delegate is used for context menus that are show in the entries table + Delegate is used for context menus that are show in the entries table as well as the items menu in the main menu */ @interface MPEntryContextMenuDelegate : NSObject diff --git a/MacPass/MPEntryViewController.m b/MacPass/MPEntryViewController.m index f074d6d6a..d072d8c5f 100644 --- a/MacPass/MPEntryViewController.m +++ b/MacPass/MPEntryViewController.m @@ -602,7 +602,7 @@ - (BOOL)validateMenuItem:(NSMenuItem *)menuItem { - (void)_setupEntryMenu { NSMenu *menu = [[NSMenu alloc] init]; - NSArray *items = [MPContextMenuHelper contextMenuItemsWithItems:MPContextMenuFull]; + NSArray *items = [MPContextMenuHelper contextMenuItemsWithItems:MPContextMenuFull|MPContextMenuShowGroupInOutline]; for(NSMenuItem *item in items) { [menu addItem:item]; } @@ -777,12 +777,8 @@ - (void)_columnDoubleClick:(id)sender { } - (void)_executeGroupColumnDoubleClick { - NSUInteger clickedRow = self.entryTable.clickedRow; - if(clickedRow < 0 || clickedRow > [self.entryArrayController.arrangedObjects count]) { - return; - } - KPKEntry *entry = self.entryArrayController.arrangedObjects[clickedRow]; - [((MPDocumentWindowController *)self.windowController).outlineViewController selectGroup:entry.parent]; + id target = [NSApp targetForAction:@selector(showGroupInOutline:)]; + [target showGroupInOutline:self]; } - (void)_executeTitleColumnDoubleClick { diff --git a/MacPass/MPOutlineViewController.m b/MacPass/MPOutlineViewController.m index 3d492ca10..6ca321357 100644 --- a/MacPass/MPOutlineViewController.m +++ b/MacPass/MPOutlineViewController.m @@ -157,6 +157,7 @@ - (void)selectGroup:(KPKGroup *)group { } NSUInteger rowToSelect = [self _rowForUUID:groupUUID node:node]; [self.outlineView selectRowIndexes:[NSIndexSet indexSetWithIndex:rowToSelect] byExtendingSelection:NO]; + [self.outlineView scrollRowToVisible:rowToSelect]; } - (void)_expandItems:(NSTreeNode *)node { diff --git a/MacPass/MPToolbarDelegate.m b/MacPass/MPToolbarDelegate.m index 228525250..098ef5b08 100644 --- a/MacPass/MPToolbarDelegate.m +++ b/MacPass/MPToolbarDelegate.m @@ -128,7 +128,7 @@ - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString NSMenuItem *actionImageItem = [[NSMenuItem alloc] initWithTitle:@"" action:NULL keyEquivalent:@""]; actionImageItem.image = self.toolbarImages[MPToolbarItemAction]; [menu addItem:actionImageItem]; - NSArray *menuItems = [MPContextMenuHelper contextMenuItemsWithItems:MPContextMenuExtended]; + NSArray *menuItems = [MPContextMenuHelper contextMenuItemsWithItems:MPContextMenuExtended|MPContextMenuShowGroupInOutline]; for(NSMenuItem *item in menuItems) { [menu addItem:item]; } From 9b2f8e5f6f4992b7767d2aecc2716d23d297001b Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Fri, 16 Aug 2019 14:57:32 +0200 Subject: [PATCH 096/129] Using property --- MacPass/KPKEntry+MPCustomAttributeProperties.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacPass/KPKEntry+MPCustomAttributeProperties.m b/MacPass/KPKEntry+MPCustomAttributeProperties.m index 8e2eb37e9..fabc6d6b0 100644 --- a/MacPass/KPKEntry+MPCustomAttributeProperties.m +++ b/MacPass/KPKEntry+MPCustomAttributeProperties.m @@ -36,7 +36,7 @@ static id propertyIMP(id self, SEL _cmd) { + (BOOL)resolveInstanceMethod:(SEL)aSEL { if ([NSStringFromSelector(aSEL) hasPrefix:MPCustomAttributePropertyPrefix]) { - class_addMethod([self class], aSEL,(IMP)propertyIMP, "@@:"); + class_addMethod(self.class, aSEL,(IMP)propertyIMP, "@@:"); return YES; } return [super resolveInstanceMethod:aSEL]; From cbc74ccca647f66b46c9b7a81fa9ec7126930222 Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Fri, 16 Aug 2019 14:57:41 +0200 Subject: [PATCH 097/129] Split test into valid and invalid attributes --- MacPassTests/MPTestCustomAttributeGetter.m | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/MacPassTests/MPTestCustomAttributeGetter.m b/MacPassTests/MPTestCustomAttributeGetter.m index 4ccf20b42..1d938d47a 100644 --- a/MacPassTests/MPTestCustomAttributeGetter.m +++ b/MacPassTests/MPTestCustomAttributeGetter.m @@ -37,15 +37,21 @@ - (void)testValidCustomAttribute { NSString *(*func2)(id, SEL, NSString*) = (void *)imp2; NSString *value2 = func2(entry, selector2, attribute2.key); XCTAssertEqualObjects(value2, attribute2.value); - - SEL selector3 = NSSelectorFromString([MPCustomAttributePropertyPrefix stringByAppendingString:@"novalidkey"]); - IMP imp3 = [entry methodForSelector:selector3]; - NSString *(*func3)(id, SEL, NSString*) = (void *)imp3; - NSString *value3 = func3(entry, selector3, @"novalidkey"); - XCTAssertNil(value3); } - (void)testInvalidCustomAttribute { + KPKEntry *entry = [[KPKEntry alloc] init]; + KPKAttribute *attribute1 = [[KPKAttribute alloc] initWithKey:@"custom1" value:@"value1"]; + KPKAttribute *attribute2 = [[KPKAttribute alloc] initWithKey:@"custom2" value:@"value2"]; + [entry addCustomAttribute:attribute1]; + [entry addCustomAttribute:attribute2]; + + SEL selector = NSSelectorFromString([MPCustomAttributePropertyPrefix stringByAppendingString:@"novalidkey"]); + IMP imp = [entry methodForSelector:selector]; + NSString *(*func)(id, SEL, NSString*) = (void *)imp; + NSString *value = func(entry, selector, @"novalidkey"); + XCTAssertNil(value); + } From 6b94cbd81bc87c4a4e0520f558ed99fcd781ebd0 Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Fri, 16 Aug 2019 15:38:01 +0200 Subject: [PATCH 098/129] added prefix to prevent name clash --- MacPass/KPKEntry+MPCustomAttributeProperties.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacPass/KPKEntry+MPCustomAttributeProperties.m b/MacPass/KPKEntry+MPCustomAttributeProperties.m index fabc6d6b0..5ec7f4fe3 100644 --- a/MacPass/KPKEntry+MPCustomAttributeProperties.m +++ b/MacPass/KPKEntry+MPCustomAttributeProperties.m @@ -23,7 +23,7 @@ #import "KPKEntry+MPCustomAttributeProperties.h" #import -NSString *const MPCustomAttributePropertyPrefix = @"valueForCustomAttribute"; +NSString *const MPCustomAttributePropertyPrefix = @"mp_valueForCustomAttribute"; @implementation KPKEntry (MPCustomAttributeProperties) From 245a58d81b0aa64dab4b00d8726d3cd09966d738 Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Fri, 16 Aug 2019 16:52:13 +0200 Subject: [PATCH 099/129] Fixed missing break in action validation resulting in copy as reference and copy custom attributes note working in search mode --- MacPass/MPDocument.m | 1 + 1 file changed, 1 insertion(+) diff --git a/MacPass/MPDocument.m b/MacPass/MPDocument.m index 42f490db7..d6a54948d 100644 --- a/MacPass/MPDocument.m +++ b/MacPass/MPDocument.m @@ -914,6 +914,7 @@ - (BOOL)validateUserInterfaceItem:(id)anItem { case MPActionCopyCustomAttribute: case MPActionCopyAsReference: valid &= (nil != targetEntry); + break; case MPActionShowGroupInOutline: valid &= (nil != targetEntry); valid &= self.hasSearch; From 7d8bb85d9b8d65103a9e6c2c42a6a4e9e50b5ad9 Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Fri, 16 Aug 2019 17:24:54 +0200 Subject: [PATCH 100/129] Added duplicate group as context menu action --- MacPass/MPActionHelper.h | 1 + MacPass/MPActionHelper.m | 1 + MacPass/MPContextMenuHelper.h | 2 +- MacPass/MPContextMenuHelper.m | 7 +++++-- MacPass/MPDocument.h | 2 +- MacPass/MPDocument.m | 14 +++++++++++++- MacPass/MPOutlineContextMenuDelegate.m | 2 +- MacPass/de.lproj/Localizable.stringsdict | 2 +- MacPass/en.lproj/Localizable.strings | 8 +++++++- MacPass/en.lproj/Localizable.stringsdict | 18 +++++++++++++++++- MacPass/es.lproj/Localizable.stringsdict | 2 +- MacPass/fr.lproj/Localizable.stringsdict | 4 ++-- MacPass/nl.lproj/Localizable.stringsdict | 2 +- MacPass/pl.lproj/Localizable.stringsdict | 2 +- MacPass/ru.lproj/Localizable.stringsdict | 2 +- MacPass/sv-SE.lproj/Localizable.stringsdict | 2 +- 16 files changed, 55 insertions(+), 16 deletions(-) diff --git a/MacPass/MPActionHelper.h b/MacPass/MPActionHelper.h index 2d35e7dfa..98c22f763 100644 --- a/MacPass/MPActionHelper.h +++ b/MacPass/MPActionHelper.h @@ -28,6 +28,7 @@ typedef NS_ENUM(NSUInteger, MPActionType) { MPActionAddGroup, // Add a new group MPActionDuplicateEntry, // Simply duplicate an entry (including history) MPActionDuplicateEntryWithOptions, // Request user input on what to duplicate + MPActionDuplicateGroup, // Duplicate the group and all it's children MPActionReverToHistoryEntry, // Restore an entry to an older state in history MPActionDelete, // Delete entry or group MPActionCopyUsername, // copy username to pasteboard diff --git a/MacPass/MPActionHelper.m b/MacPass/MPActionHelper.m index dca564ecf..69b405a98 100644 --- a/MacPass/MPActionHelper.m +++ b/MacPass/MPActionHelper.m @@ -38,6 +38,7 @@ + (NSDictionary *)_actionDictionary { @(MPActionAddGroup): NSStringFromSelector(@selector(createGroup:)), @(MPActionDuplicateEntry): NSStringFromSelector(@selector(duplicateEntry:)), @(MPActionDuplicateEntryWithOptions): NSStringFromSelector(@selector(duplicateEntryWithOptions:)), + @(MPActionDuplicateGroup): NSStringFromSelector(@selector(duplicateGroup:)), @(MPActionReverToHistoryEntry): NSStringFromSelector(@selector(revertToHistoryEntry:)), @(MPActionCopyPassword): NSStringFromSelector(@selector(copyPassword:)), @(MPActionCopyURL): NSStringFromSelector(@selector(copyURL:)), diff --git a/MacPass/MPContextMenuHelper.h b/MacPass/MPContextMenuHelper.h index a60722213..9d46358b7 100644 --- a/MacPass/MPContextMenuHelper.h +++ b/MacPass/MPContextMenuHelper.h @@ -31,7 +31,7 @@ typedef NS_OPTIONS(NSUInteger, MPContextMenuItemsFlags) { MPContextMenuAutotype = 1 << 5, MPContextMenuHistory = 1 << 6, MPContextMenuShowGroupInOutline = 1 << 7, - MPContextMenuMinimal = MPContextMenuCreate | MPContextMenuDelete, + MPContextMenuMinimal = MPContextMenuCreate | MPContextMenuDelete | MPContextMenuDuplicate, MPContextMenuFull = MPContextMenuMinimal | MPContextMenuCopy | MPContextMenuDuplicate | MPContextMenuAutotype | MPContextMenuHistory, MPContextMenuExtended = MPContextMenuFull | MPContextMenuTrash }; diff --git a/MacPass/MPContextMenuHelper.m b/MacPass/MPContextMenuHelper.m index 058cbb60f..7304dc915 100644 --- a/MacPass/MPContextMenuHelper.m +++ b/MacPass/MPContextMenuHelper.m @@ -64,8 +64,11 @@ @implementation MPContextMenuHelper NSMenuItem *duplicateEntyWithOptions = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"DUPLICATE_ENTRY_WITH_OPTIONS", @"Menu item to duplicate an entry with options how to duplicate. Will present a dialog.") action:[MPActionHelper actionOfType:MPActionDuplicateEntryWithOptions] keyEquivalent:@""]; - - [items addObjectsFromArray:@[ duplicateEntry, duplicateEntyWithOptions ]]; + NSMenuItem *duplicateGroup = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"DUPLICATE_GROUP", @"Menu item to directly diplicate a group") + action:[MPActionHelper actionOfType:MPActionDuplicateGroup] + keyEquivalent:@""]; + + [items addObjectsFromArray:@[ duplicateEntry, duplicateEntyWithOptions, duplicateGroup ]]; } if(insertDelete || insertTrash) { diff --git a/MacPass/MPDocument.h b/MacPass/MPDocument.h index ce09967de..469e2a59e 100644 --- a/MacPass/MPDocument.h +++ b/MacPass/MPDocument.h @@ -165,7 +165,6 @@ FOUNDATION_EXPORT NSString *const MPDocumentGroupKey; - (void)deleteNode:(KPKNode *)node; - (void)duplicateEntryWithOptions:(KPKCopyOptions)options; - #pragma mark Actions /** * Empties the Trash group. Removing all Groups and Entries inside. This action is not undo-able @@ -179,6 +178,7 @@ FOUNDATION_EXPORT NSString *const MPDocumentGroupKey; */ - (IBAction)createEntryFromTemplate:(id)sender; - (IBAction)duplicateEntry:(id)sender; +- (IBAction)duplicateGroup:(id)sender; @end diff --git a/MacPass/MPDocument.m b/MacPass/MPDocument.m index d6a54948d..574bff146 100644 --- a/MacPass/MPDocument.m +++ b/MacPass/MPDocument.m @@ -828,7 +828,16 @@ - (void)duplicateEntryWithOptions:(KPKCopyOptions)options { KPKEntry *duplicate = [entry copyWithTitle:nil options:options]; [duplicate addToGroup:entry.parent]; } - [self.undoManager setActionName:[NSString stringWithFormat:NSLocalizedString(@"DUPLICATE_ENTRIES_%ld", @"Action name for duplicating entries"), self.selectedEntries.count]]; + [self.undoManager setActionName:[NSString stringWithFormat:NSLocalizedString(@"DUPLICATE_ENTRIES_ACTION_NAME", @"Action name for duplicating entries"), self.selectedEntries.count]]; +} + +- (void)duplicateGroup:(id)sender { + for(KPKGroup *group in self.selectedGroups) { + KPKGroup *duplicate = [group copyWithTitle:nil options:kKPKCopyOptionNone]; + /* if group is root group, add the duplicate below */ + [duplicate addToGroup:(group.parent ? group.parent : group)]; + } + [self.undoManager setActionName:[NSString stringWithFormat:NSLocalizedString(@"DUPLICATE_GROUPS_ACTION_NAME", @"Action name for duplicating groups"), self.selectedGroups.count]]; } #pragma mark Validation @@ -886,6 +895,9 @@ - (BOOL)validateUserInterfaceItem:(id)anItem { valid &= targetEntries.count > 0; valid &= !self.historyEntry; break; + case MPActionDuplicateGroup: + valid &= targetGroups.count > 0; + break; case MPActionEmptyTrash: valid &= (self.trash.groups.count + self.trash.entries.count) > 0; break; diff --git a/MacPass/MPOutlineContextMenuDelegate.m b/MacPass/MPOutlineContextMenuDelegate.m index 5f1ce530a..0165b19b5 100644 --- a/MacPass/MPOutlineContextMenuDelegate.m +++ b/MacPass/MPOutlineContextMenuDelegate.m @@ -57,7 +57,7 @@ - (void)menuNeedsUpdate:(NSMenu *)menu { if( [item isKindOfClass:KPKGroup.class]) { KPKGroup *group = (KPKGroup *)item; - MPDocument *document = [NSDocumentController sharedDocumentController].currentDocument; + MPDocument *document = NSDocumentController.sharedDocumentController.currentDocument; if(group && document.root == group ) { } diff --git a/MacPass/de.lproj/Localizable.stringsdict b/MacPass/de.lproj/Localizable.stringsdict index 37d23e104..09e5ae237 100644 --- a/MacPass/de.lproj/Localizable.stringsdict +++ b/MacPass/de.lproj/Localizable.stringsdict @@ -20,7 +20,7 @@ alle Zeichen ausgewählt - DUPLICATE_ENTRIES_%ld + DUPLICATE_ENTRIES_ACTION_NAME NSStringLocalizedFormatKey %#@entries@ diff --git a/MacPass/en.lproj/Localizable.strings b/MacPass/en.lproj/Localizable.strings index 4a6db4cb3..f34cb98bc 100644 --- a/MacPass/en.lproj/Localizable.strings +++ b/MacPass/en.lproj/Localizable.strings @@ -304,7 +304,7 @@ "DRAG_GROUP" = "Drag Group"; /* Action name for duplicating entries */ -"DUPLICATE_ENTRIES_%ld" = "Duplicate Entries %ld"; +"DUPLICATE_ENTRIES_ACTION_NAME" = "Duplicate Entries"; /* Menu item to directly diplicate an entry */ "DUPLICATE_ENTRY" = "Duplicate Entry"; @@ -312,6 +312,12 @@ /* Menu item to duplicate an entry with options how to duplicate. Will present a dialog. */ "DUPLICATE_ENTRY_WITH_OPTIONS" = "Duplicate Entry…"; +/* Menu item to directly diplicate a group */ +"DUPLICATE_GROUP" = "Duplicate Group"; + +/* Action name for duplicating groups */ +"DUPLICATE_GROUPS_ACTION_NAME" = "Duplicate Group"; + /* Menu item in the database outline context menu to change the template group Menu item on the add entry context menu to edit template groups */ "EDIT_TEMPLATE_GROUP" = "Edit Entry Template Group"; diff --git a/MacPass/en.lproj/Localizable.stringsdict b/MacPass/en.lproj/Localizable.stringsdict index e3db31f3f..2d22e8554 100644 --- a/MacPass/en.lproj/Localizable.stringsdict +++ b/MacPass/en.lproj/Localizable.stringsdict @@ -2,6 +2,22 @@ + DUPLICATE_GROUPS_ACTION_NAME + + NSStringLocalizedFormatKey + %#@groups@ + groups + + NSStringFormatValueTypeKey + ld + NSStringFormatSpecTypeKey + NSStringPluralRuleType + one + Duplicate Group + other + Duplicate Groups + + %ld_CHARACTERS_TO_PICK_REMAINING NSStringLocalizedFormatKey @@ -20,7 +36,7 @@ All characters picked - DUPLICATE_ENTRIES_%ld + DUPLICATE_ENTRIES_ACTION_NAME NSStringLocalizedFormatKey %#@entries@ diff --git a/MacPass/es.lproj/Localizable.stringsdict b/MacPass/es.lproj/Localizable.stringsdict index e0d9317fa..e15d340a5 100644 --- a/MacPass/es.lproj/Localizable.stringsdict +++ b/MacPass/es.lproj/Localizable.stringsdict @@ -20,7 +20,7 @@ Todos los caracteres seleccionados - DUPLICATE_ENTRIES_%ld + DUPLICATE_ENTRIES_ACTION_NAME NSStringLocalizedFormatKey %#@entries@ diff --git a/MacPass/fr.lproj/Localizable.stringsdict b/MacPass/fr.lproj/Localizable.stringsdict index 82879e2fb..ba5b773ce 100644 --- a/MacPass/fr.lproj/Localizable.stringsdict +++ b/MacPass/fr.lproj/Localizable.stringsdict @@ -20,7 +20,7 @@ Tous les caractères ont été choisis - DUPLICATE_ENTRIES_%ld + DUPLICATE_ENTRIES_ACTION_NAME NSStringLocalizedFormatKey %#@entries@ @@ -31,7 +31,7 @@ NSStringFormatValueTypeKey ld one - Dupliquer l'entrée + Dupliquer l'entrée other Dupliquer les entrées zero diff --git a/MacPass/nl.lproj/Localizable.stringsdict b/MacPass/nl.lproj/Localizable.stringsdict index 173f77b60..440b6eee2 100644 --- a/MacPass/nl.lproj/Localizable.stringsdict +++ b/MacPass/nl.lproj/Localizable.stringsdict @@ -20,7 +20,7 @@ Alle tekens gekozen - DUPLICATE_ENTRIES_%ld + DUPLICATE_ENTRIES_ACTION_NAME NSStringLocalizedFormatKey %#@entries@ diff --git a/MacPass/pl.lproj/Localizable.stringsdict b/MacPass/pl.lproj/Localizable.stringsdict index 041de5fb4..f79ae1b8f 100644 --- a/MacPass/pl.lproj/Localizable.stringsdict +++ b/MacPass/pl.lproj/Localizable.stringsdict @@ -24,7 +24,7 @@ Wybrano wszystkie znaki - DUPLICATE_ENTRIES_%ld + DUPLICATE_ENTRIES_ACTION_NAME NSStringLocalizedFormatKey %#@wpisów@ diff --git a/MacPass/ru.lproj/Localizable.stringsdict b/MacPass/ru.lproj/Localizable.stringsdict index ada74a9c3..70f081656 100644 --- a/MacPass/ru.lproj/Localizable.stringsdict +++ b/MacPass/ru.lproj/Localizable.stringsdict @@ -24,7 +24,7 @@ Выбраны все символы - DUPLICATE_ENTRIES_%ld + DUPLICATE_ENTRIES_ACTION_NAME NSStringLocalizedFormatKey %#@entries@ diff --git a/MacPass/sv-SE.lproj/Localizable.stringsdict b/MacPass/sv-SE.lproj/Localizable.stringsdict index 184de9422..9fd3b2442 100644 --- a/MacPass/sv-SE.lproj/Localizable.stringsdict +++ b/MacPass/sv-SE.lproj/Localizable.stringsdict @@ -20,7 +20,7 @@ Alla tecken valda - DUPLICATE_ENTRIES_%ld + DUPLICATE_ENTRIES_ACTION_NAME NSStringLocalizedFormatKey %#@entries@ From e31c7c6cd71a20482b43e1e8d63dadcca6191971 Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Mon, 19 Aug 2019 14:20:27 +0200 Subject: [PATCH 101/129] Updated translations --- .../en.lproj/AutotypeDoctorReportViewController.strings | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/MacPass/en.lproj/AutotypeDoctorReportViewController.strings b/MacPass/en.lproj/AutotypeDoctorReportViewController.strings index e8f267e06..b5a81f3d4 100644 --- a/MacPass/en.lproj/AutotypeDoctorReportViewController.strings +++ b/MacPass/en.lproj/AutotypeDoctorReportViewController.strings @@ -2,8 +2,8 @@ /* Class = "NSTextFieldCell"; title = "MacPass will send key press events to the system when Autotype or Global Autotype is executed. Since macOS 10.14 Mojave this is only possible, if Accessibility permissions are granted to the application."; ObjectID = "6GI-KJ-Xue"; */ "6GI-KJ-Xue.title" = "MacPass will send key press events to the system when Autotype or Global Autotype is executed. Since macOS 10.14 Mojave this is only possible, if Accessibility permissions are granted to the application."; -/* Class = "NSTextFieldCell"; title = "MacPass will read every window title when Global Autotype is executed to find a match. Since macOS 10.15 Catalina it is not possible to read any window title, if the user has not granted permissions to record the screen. If you are running macOS 10.15 or higher, MacPass will try to capture the left top most pixel on your screen to initate a request to record the screen. This pixel will not be stored and processed in any way."; ObjectID = "7of-1z-Nfk"; */ -"7of-1z-Nfk.title" = "MacPass will read every window title when Global Autotype is executed to find a match. Since macOS 10.15 Catalina it is not possible to read any window title, if the user has not granted permissions to record the screen. If you are running macOS 10.15 or higher, MacPass will try to capture the left top most pixel on your screen to initate a request to record the screen. This pixel will not be stored and processed in any way."; +/* Class = "NSTextFieldCell"; title = "MacPass will read every window title when Global Autotype is executed to find a match. Since macOS 10.15 Catalina it is not possible to read any window title, if the user has not granted permissions to record the screen. If you are running macOS 10.15 or higher, MacPass will check if it can read every window title of currently visible windows. This test will not read the actual title. The titles aren't stored or processed in any way."; ObjectID = "7of-1z-Nfk"; */ +"7of-1z-Nfk.title" = "MacPass will read every window title when Global Autotype is executed to find a match. Since macOS 10.15 Catalina it is not possible to read any window title, if the user has not granted permissions to record the screen. If you are running macOS 10.15 or higher, MacPass will check if it can read every window title of currently visible windows. This test will not read the actual title. The titles aren't stored or processed in any way."; /* Class = "NSButtonCell"; title = "Open Accessibilty Preferences…"; ObjectID = "8m1-vs-pd5"; */ "8m1-vs-pd5.title" = "Open Accessibilty Preferences…"; @@ -14,5 +14,5 @@ /* Class = "NSTextFieldCell"; title = "Accessibility"; ObjectID = "aIL-8W-63g"; */ "aIL-8W-63g.title" = "Accessibility"; -/* Class = "NSButtonCell"; title = "Open Screen Sharing Preferences…"; ObjectID = "lgB-Ys-L9R"; */ -"lgB-Ys-L9R.title" = "Open Screen Sharing Preferences…"; +/* Class = "NSButtonCell"; title = "Open Screen Recording Preferences…"; ObjectID = "lgB-Ys-L9R"; */ +"lgB-Ys-L9R.title" = "Open Screen Recording Preferences…"; From 7fc1dd8a1b3716b1af03a90507080b9b7eb23500 Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Mon, 19 Aug 2019 14:21:12 +0200 Subject: [PATCH 102/129] Do not relay on taking a screenshot to determine screen recording permissions. Instead read window titles of all visible windows. --- MacPass.xcodeproj/project.pbxproj | 4 +-- .../AutotypeDoctorReportViewController.xib | 6 ++-- MacPass/MPAutotypeDoctor.m | 34 ++++++++++--------- 3 files changed, 23 insertions(+), 21 deletions(-) diff --git a/MacPass.xcodeproj/project.pbxproj b/MacPass.xcodeproj/project.pbxproj index 50aec9a97..894f8e303 100644 --- a/MacPass.xcodeproj/project.pbxproj +++ b/MacPass.xcodeproj/project.pbxproj @@ -809,6 +809,7 @@ 4CC6DB7917D23719002C6091 /* KPKNode+IconImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "KPKNode+IconImage.m"; sourceTree = ""; }; 4CCA7EEC1797866F00B0B55E /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/GeneralPreferences.strings; sourceTree = ""; }; 4CCA8E9A18D91ED9001A6754 /* Quartz.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quartz.framework; path = System/Library/Frameworks/Quartz.framework; sourceTree = SDKROOT; }; + 4CCCE532230ACB73009B3D4D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/AutotypeDoctorReportViewController.strings; sourceTree = ""; }; 4CCCE7FF1D75CA48006AA951 /* MPArrayController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPArrayController.h; sourceTree = ""; }; 4CCCE8001D75CA48006AA951 /* MPArrayController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPArrayController.m; sourceTree = ""; }; 4CCEDE28179F203B008402BE /* MPOutlineView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPOutlineView.h; sourceTree = ""; }; @@ -976,7 +977,6 @@ 78E1F8AF22E3A3DF00E738AE /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/IntegrationPreferences.strings; sourceTree = ""; }; 78E1F8B122E3A5D600E738AE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/AutotypeDoctorReportViewController.xib; sourceTree = ""; }; 78E1F8B422E3A5DB00E738AE /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/AutotypeDoctorReportViewController.strings; sourceTree = ""; }; - 78E1F8B622E3A5E900E738AE /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/AutotypeDoctorReportViewController.strings; sourceTree = ""; }; 78E1F8B822E3B06700E738AE /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/PickcharsView.strings; sourceTree = ""; }; 78E1F8BA22E3B0B700E738AE /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/PickfieldView.strings; sourceTree = ""; }; 78E1F8BC22E3B12300E738AE /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/OpenPanelAccessoryView.strings; sourceTree = ""; }; @@ -2679,7 +2679,7 @@ children = ( 78E1F8B122E3A5D600E738AE /* Base */, 78E1F8B422E3A5DB00E738AE /* ru */, - 78E1F8B622E3A5E900E738AE /* en */, + 4CCCE532230ACB73009B3D4D /* en */, ); name = AutotypeDoctorReportViewController.xib; sourceTree = ""; diff --git a/MacPass/Base.lproj/AutotypeDoctorReportViewController.xib b/MacPass/Base.lproj/AutotypeDoctorReportViewController.xib index e9275fa61..c3c3ddf78 100644 --- a/MacPass/Base.lproj/AutotypeDoctorReportViewController.xib +++ b/MacPass/Base.lproj/AutotypeDoctorReportViewController.xib @@ -72,14 +72,14 @@ - MacPass will read every window title when Global Autotype is executed to find a match. Since macOS 10.15 Catalina it is not possible to read any window title, if the user has not granted permissions to record the screen. If you are running macOS 10.15 or higher, MacPass will try to capture the left top most pixel on your screen to initate a request to record the screen. This pixel will not be stored and processed in any way. + MacPass will read every window title when Global Autotype is executed to find a match. Since macOS 10.15 Catalina it is not possible to read any window title, if the user has not granted permissions to record the screen. If you are running macOS 10.15 or higher, MacPass will check if it can read every window title of currently visible windows. This test will not read the actual title. The titles aren't stored or processed in any way. - + @@ -88,7 +88,7 @@ - + @@ -96,7 +96,7 @@ - + @@ -107,8 +107,8 @@ - - + + @@ -138,7 +138,7 @@ Gw - + - + MacPass will read every window title when Global Autotype is executed to find a match. Since macOS 10.15 Catalina it is not possible to read any window title, if the user has not granted permissions to record the screen. If you are running macOS 10.15 or higher, MacPass will check if it can read every window title of currently visible windows. This test will not read the actual title. The titles aren't stored or processed in any way. @@ -77,18 +66,8 @@ - - + @@ -96,40 +75,69 @@ - + + + + + + + To request Screen Recording permissions, MacPass will try to capture a 1 by 1 Pixel sized screenshot of the top left part of your screen. The data is not stored nor processed in any way. + + + + + + + + - - + - - + - + + + + - + - - + diff --git a/MacPass/MPAutotypeDoctor.h b/MacPass/MPAutotypeDoctor.h index ea8f537a4..55d02a3ba 100644 --- a/MacPass/MPAutotypeDoctor.h +++ b/MacPass/MPAutotypeDoctor.h @@ -21,6 +21,7 @@ NS_ASSUME_NONNULL_BEGIN - (void)runChecksAndPresentResults; - (void)openScreenRecordingPreferences; +- (void)requestScreenRecordingPermission; - (void)openAccessibiltyPreferences; - (void)openAutomationPreferences; diff --git a/MacPass/MPAutotypeDoctor.m b/MacPass/MPAutotypeDoctor.m index ba83799fc..5ac00a69c 100644 --- a/MacPass/MPAutotypeDoctor.m +++ b/MacPass/MPAutotypeDoctor.m @@ -107,6 +107,22 @@ - (void)openScreenRecordingPreferences { [NSWorkspace.sharedWorkspace openURL:[NSURL URLWithString:@"x-apple.systempreferences:com.apple.preference.security?Privacy_ScreenCapture"]]; } +- (void)requestScreenRecordingPermission { + /* macos 10.14 and lower do not require screen recording permission to get window titles */ + if(@available(macos 10.15, *)) { + /* + To minimize the intrusion just make a 1px image of the upper left corner + This way there is no real possibilty to access any private data + */ + CGImageRef screenshot = CGWindowListCreateImage( + CGRectMake(0, 0, 1, 1), + kCGWindowListOptionOnScreenOnly, + kCGNullWindowID, + kCGWindowImageDefault); + CFRelease(screenshot); + } +} + - (void)openAutomationPreferences { [NSWorkspace.sharedWorkspace openURL:[NSURL URLWithString:@"x-apple.systempreferences:com.apple.preference.security?Privacy_Automation"]]; } diff --git a/MacPass/MPAutotypeDoctorReportViewController.h b/MacPass/MPAutotypeDoctorReportViewController.h index 83d3b9ea6..f25e4036c 100644 --- a/MacPass/MPAutotypeDoctorReportViewController.h +++ b/MacPass/MPAutotypeDoctorReportViewController.h @@ -17,12 +17,13 @@ NS_ASSUME_NONNULL_BEGIN @property (strong) IBOutlet NSImageView *screenRecordingStatusImageView; @property (strong) IBOutlet NSTextField *screenRecordingStatusTextField; +@property (strong) IBOutlet NSButton *requestScreenRecordingButton; - (IBAction)openAccessibiltyPreferences:(id)sender; - (IBAction)openScreenRecordingPreferences:(id)sender; +- (IBAction)requestScreenRecordingPermissions:(id)sender; - (IBAction)openAutomationPreferences:(id)sender; - @end NS_ASSUME_NONNULL_END diff --git a/MacPass/MPAutotypeDoctorReportViewController.m b/MacPass/MPAutotypeDoctorReportViewController.m index 52440ec11..fd16c3a03 100644 --- a/MacPass/MPAutotypeDoctorReportViewController.m +++ b/MacPass/MPAutotypeDoctorReportViewController.m @@ -29,6 +29,10 @@ - (void)openScreenRecordingPreferences:(id)sender { [MPAutotypeDoctor.defaultDoctor openScreenRecordingPreferences]; } +- (IBAction)requestScreenRecordingPermissions:(id)sender { + [MPAutotypeDoctor.defaultDoctor requestScreenRecordingPermission]; +} + - (void)openAutomationPreferences:(id)sender { [MPAutotypeDoctor.defaultDoctor openAutomationPreferences]; } @@ -38,7 +42,7 @@ - (void)_updateView { NSError *error; if([MPAutotypeDoctor.defaultDoctor hasAccessibiltyPermissions:&error]) { self.accessibiltyStatusImageView.image = [NSImage imageNamed:NSImageNameStatusAvailable]; - self.accessibiltyStatusTextField.stringValue = NSLocalizedString(@"AUTOTYPE_STATUS_ACCESSIBILTY_PERMISSIONS_OK", "Status lable when no issue were found in accessibilty"); + self.accessibiltyStatusTextField.stringValue = NSLocalizedString(@"AUTOTYPE_STATUS_ACCESSIBILTY_PERMISSIONS_OK", "Status label when no issue were found in accessibilty"); } else { self.accessibiltyStatusImageView.image = [NSImage imageNamed:NSImageNameStatusUnavailable]; @@ -50,10 +54,12 @@ - (void)_updateView { } } if([MPAutotypeDoctor.defaultDoctor hasScreenRecordingPermissions:&error]) { + self.requestScreenRecordingButton.enabled = NO; self.screenRecordingStatusImageView.image = [NSImage imageNamed:NSImageNameStatusAvailable]; - self.screenRecordingStatusTextField.stringValue = NSLocalizedString(@"AUTOTYPE_STATUS_SCREEN_RECORDING_PERMISSIONS_OK", "Status lable when no issue were found in screen recording permissions"); + self.screenRecordingStatusTextField.stringValue = NSLocalizedString(@"AUTOTYPE_STATUS_SCREEN_RECORDING_PERMISSIONS_OK", "Status label when no issue were found in screen recording permissions"); } else { + self.requestScreenRecordingButton.enabled = YES; self.screenRecordingStatusImageView.image = [NSImage imageNamed:NSImageNameStatusUnavailable]; if(error && error.localizedDescription) { self.screenRecordingStatusTextField.stringValue = error.localizedDescription; From f134290c27fef656e16f18488b2694433ff3dddd Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Tue, 17 Sep 2019 13:08:29 +0200 Subject: [PATCH 127/129] wired up button to actually do something --- MacPass/Base.lproj/AutotypeDoctorReportViewController.xib | 3 +++ 1 file changed, 3 insertions(+) diff --git a/MacPass/Base.lproj/AutotypeDoctorReportViewController.xib b/MacPass/Base.lproj/AutotypeDoctorReportViewController.xib index ac3b8b3f9..2d7e4ccce 100644 --- a/MacPass/Base.lproj/AutotypeDoctorReportViewController.xib +++ b/MacPass/Base.lproj/AutotypeDoctorReportViewController.xib @@ -83,6 +83,9 @@ + + + From fa58c7e4238eec11260de8ae821e1d87dce180fa Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Tue, 17 Sep 2019 13:55:23 +0200 Subject: [PATCH 128/129] Create FUNDING.yml --- .github/FUNDING.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000..95d9fe10b --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: https://flattr.com/thing/1550529/mstarkeMacPass-on-GitHub From 00d69d5bad87bac1a983c6fc539b41447ce47970 Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Tue, 17 Sep 2019 13:57:32 +0200 Subject: [PATCH 129/129] Update FUNDING.yml --- .github/FUNDING.yml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 95d9fe10b..2d6c9eb5d 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,12 +1 @@ -# These are supported funding model platforms - -github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username custom: https://flattr.com/thing/1550529/mstarkeMacPass-on-GitHub