lint translations

This commit is contained in:
antelle 2017-02-14 20:29:37 +01:00
parent 0003562085
commit 86b068f3c6
8 changed files with 378 additions and 299 deletions

1
.gitignore vendored
View File

@ -14,3 +14,4 @@ bin/
obj/
*.xcworkspace/
xcuserdata/
translations.json

View File

@ -202,10 +202,7 @@
"openRemoveLastQuestionBody": "Die Datei, die Sie löschen möchten, ist nur innerhalb der App gespeichert. Möchten Sie sie unwiederbringlich löschen?",
"openRemoveLastQuestionModBody": "Die Datei, die Sie löschen möchten, beinhaltet lokale Änderungen. Möchten Sie diese Änderungen verwerfen und die Datei löschen?",
"openLocalFile": "Lokale Datei",
"openLocalFileBody": [
"Sie sind dabei, eine Datei zu öffnen, die innerhalb der App gespeichert wird.",
"Wenn Sie an dieser Datei Änderungen vornehmen, werden diese nicht im Dateisystem gespeichert. Um die Datei mit den Änderungen zu erhalten, können Sie sie aus den Einstellungen heraus exportieren."
],
"openLocalFileBody": "Sie sind dabei, eine Datei zu öffnen, die innerhalb der App gespeichert wird. Wenn Sie an dieser Datei Änderungen vornehmen, werden diese nicht im Dateisystem gespeichert. Um die Datei mit den Änderungen zu erhalten, können Sie sie aus den Einstellungen heraus exportieren.",
"openLocalFileDontShow": "Nicht wieder anzeigen",
"openWrongFile": "Inkompatibles Dateiformat",
"openWrongFileBody": "Dieses Dateiformat ist nicht kompatibel. Die App unterstützt KeePass-Datenbanken im kdbx-Format.",

View File

@ -1,4 +1,16 @@
{
"appTabWarn": "Trop d'onglets",
"appTabWarnBody": "KeeWeb ne peut être utilisé dans 2 onglets de navigateurs simultanément. Fermer cet onglet, s'il vous plait.",
"setGenThemeTe": "Terminal",
"setGenNoRememberKeyFiles": "Ne pas se souvenir",
"setGenRememberKeyFilesData": "Sauvegarder dans le stockage interne de l'appli",
"setGenRememberKeyFilesPath": "Se souvenir seulement des chemins des fichiers",
"setGenLockHours": "Dans {} heures",
"setGenLockDay": "Dans 1 jour",
"setFileKdfParamsIter": "Itérations",
"setFileKdfParamsMem": "Mémoire, Ko",
"setFileKdfParams": "Fonction de dérivation de clé",
"setFileKdfParamsPar": "Parallèlisme",
"months": [
"Janvier",
"Février",

View File

@ -195,7 +195,7 @@
"openWrongFile": "File errato",
"openWrongFileBody": "Questo file non è suportato. Questa applicazione supporta file con formato del database di KeePass (kdbx).",
"openKdbFileBody": "Hai selezionato un file con il vecchio formato (KDB). Questa applicazione supporta esclusivamente il nuovo formato (kdbx). Puoi utilizzare KeePass v2 per convertire i file con nel nuovo formato.",
"openConfigHeader": "impostazioni",
"openConfigHeader": "{} impostazioni",
"openUrl": "url",
"openUrlDesc": "https://server/path/file.kdbx, o solamente file.kdbx",
"openUser": "Utente",
@ -204,7 +204,7 @@
"openPass": "password",
"openPassDesc": "password server WebDAV (questa non è la password del file)",
"openPassPlaceholder": "nessuna password",
"openConfigError": "errore",
"openConfigError": "errore {}",
"openConfigErrorNotFound": "file non trovato",
"openError": "errore",
"openErrorDescription": "C'è stato un errore nell'apertura del file",

View File

@ -422,7 +422,7 @@
"setFileSaveError": "Fout met opslaan",
"setFileSaveErrorBody": "bestand",
"setFileAlreadyExists": "Bestaat al",
"setFileAlreadyExistsBody": "Bestand",
"setFileAlreadyExistsBody": "File {} bestaat al. Wilt u het overschrijven?",
"setFileUnsaved": "Niet opgeslagen wijzigingen",
"setFileUnsavedBody": "bestand",
"setFileCloseNoSave": "Sluiten en wijzigingen ongedaan maken",

View File

@ -1,12 +1,16 @@
{
"appTabWarn": "Слишком много вкладок",
"appTabWarnBody": "Нельзя использовать KeeWeb в двух вкладках одновременно. Пожалуйста, закройте эту вкладку.",
"appTabWarnBody": "Нельзя использовать KeeWeb в двух вкладках браузера одновременно. Пожалуйста, закройте эту вкладку.",
"setGenThemeTe": "Терминал",
"setGenNoRememberKeyFiles": "Не запоминать",
"setGenRememberKeyFilesData": "Во внутреннем хранилище приложения",
"setGenRememberKeyFilesPath": "Запомнить только путь к ключевому файлу",
"setGenLockHours": "Раз в {} часов",
"setGenLockDay": "Раз в день",
"setGenRememberKeyFilesData": "Хранить во внутреннем хранилище приложения",
"setGenRememberKeyFilesPath": "Запомнить только путь к файлам-ключам",
"setGenLockHours": "Через {} часов",
"setGenLockDay": "Через день",
"setFileKdfParamsIter": "Итераций",
"setFileKdfParamsMem": "Память, КБ",
"setFileKdfParams": "Функция формирования ключа",
"setFileKdfParamsPar": "Параллелизм",
"months": [
"Января",
"Февраля",
@ -45,24 +49,24 @@
"Суббота"
],
"weekdaysShort": [
"Вос",
он",
"Вт",
"Ср",
"Чт",
ят",
"Суб"
"Вск",
нд",
"Втр",
"Срд",
"Чтв",
тн",
"Сбт"
],
"retToApp": "назад к приложению",
"name": "имя",
"icon": "иконка",
"icon": "значок",
"title": "название",
"password": "пароль",
"user": "логин",
"website": "адрес сайта",
"user": "пользователь",
"website": "сайт",
"tags": "теги",
"notes": "заметки",
"entry": "Запись",
"entry": "запись",
"group": "группа",
"noTitle": "нет названия",
"or": "или",
@ -94,11 +98,11 @@
"alertYes": "Да",
"alertNo": "Нет",
"alertOk": "ОК",
"alertCancel": "Отменить",
"alertCancel": "Отмена",
"alertSignIn": "Войти",
"alertCopy": "Скопировать",
"alertClose": "Закрыть",
"appBeta": "ПРЕДУПРЕЖДЕНИЕ: бета-версия, только для предпросмотра",
"appBeta": "ПРЕДУПРЕЖДЕНИЕ: бета-версия, только для ознакомления",
"footerOpen": "Открыть / Создать",
"footerSyncError": "Ошибка синхронизации",
"footerTitleGen": "Сгенерировать",
@ -110,14 +114,14 @@
"genPresetPronounceable": "произносимый",
"genPresetMed": "средней длины",
"genPresetLong": "длинный",
"genPresetPin4": "4-х значный PIN",
"genPresetPin4": "4-значный PIN",
"genPresetMac": "MAC-адрес",
"genPresetHash128": "128-битный хэш",
"genPresetHash256": "256-битный хэш",
"grpTitle": "Группа",
"grpSearch": "Включить поиск элементов в этой группе",
"grpSearch": "Включить поиск по элементам в этой группе",
"grpAutoType": "Включить автозаполнение",
"grpAutoTypeSeq": "Auto-type sequence",
"grpAutoTypeSeq": "Последовательность авто-ввода",
"grpAutoTypeSeqDefault": "Использовать по умолчанию последовательную автосортировку",
"grpTrash": "Удалить группу со всеми элементами",
"tagTitle": "Тег",
@ -191,7 +195,7 @@
"openNothingFoundBodyFolder": "Файлы искались в папке {}",
"openAppFolder": "приложение",
"openRootFolder": "кореневая",
"openSelectFile": "файл",
"openSelectFile": "Выберите файл",
"openSelectFileBody": "Выберите файл, который вы хотели бы открыть",
"openPassFor": "Пароль для",
"openRemoveLastQuestion": "Удалить локальный файл?",
@ -201,9 +205,9 @@
"openLocalFileBody": "Вы собираетесь открыть файл, который будет храниться внутри приложения. Изменения, внесенные не будут сохранены обратно в файловую систему. Чтобы получить файл с вашими данными, экспортируйте его из настроек.",
"openLocalFileDontShow": "Не показывать снова",
"openWrongFile": "Плохой файл",
"openWrongFileBody": "This file format is not supported. This app works with KeePass database format files (kdbx).",
"openKdbFileBody": "You are opening an old version format file (KDB). This app supports only new format (kdbx), please use KeePass v2 to convert between them.",
"openConfigHeader": "Настройки",
"openWrongFileBody": "Данный формат файла не поддерживается. Приложение работает с файлами базы данных KeePass (kdbx).",
"openKdbFileBody": "Вы пытаетесь открыть старый формат файла (KDB). Это приложение поддерживает только новый формат (kdbx). Воспользуйтесь KeePass v2 для конвертации в новый формат.",
"openConfigHeader": "Настройки {}",
"openUrl": "URL",
"openUrlDesc": "https://server/path/file.kdbx, или просто file.kdbx",
"openUser": "Логин",
@ -221,10 +225,10 @@
"detAttDelToRemove": "\"Delete\" для удаления",
"detEmpty": "Ваши пароли будут отображаться здесь",
"detGroupRestore": "Для того, чтобы восстановить эту группу, пожалуйста, перетащить ее в любую группу вне корзины.",
"detHistoryClickPoint": "Click entry history timeline point to view state",
"detHistoryClickPoint": "Нажмите на точку на временной шкале, чтобы увидеть состояние",
"detHistoryReturn": "вернуться к записи",
"detHistoryRevert": "Revert to state",
"detHistoryDel": "Delete state",
"detHistoryRevert": "Вернуть до состояния",
"detHistoryDel": "Удалить состояние",
"detHistoryEmpty": "пусто",
"detHistoryModified": "модифицированно",
"detHistoryRec": "запись",
@ -249,7 +253,7 @@
"detAttachments": "Вложения",
"detDelFromTrash": "Удалить из корзины?",
"detDelFromTrashBody": "Вы не сможете отменить эту операцию.",
"detDelFromTrashBodyHint": "To quickly remove all items from trash, click empty icon in Trash menu.",
"detDelFromTrashBodyHint": "Чтобы быстро удалить всё содержимое корзины, нажмите пиктограмму очистки в меню корзины.",
"detFieldCopied": "скопирован",
"detFieldCopiedTime": "Копируется {} секунд",
"detCopyHint": "Можно скопировать значение поля щелкнув мышью по его названию",
@ -258,7 +262,7 @@
"detMenuAddNewField": "Добавить новое поле",
"detMenuShowEmpty": "Показать пустые поля",
"detMenuHideEmpty": "Скрыть пустые поля",
"detMenuAddField": "Добавить",
"detMenuAddField": "Добавить {}",
"detMenuCopyPassword": "Копировать пароль",
"detMenuCopyUser": "Копировать логин",
"detSetupOtp": "Одноразовый пароль",
@ -295,18 +299,15 @@
"autoTypeLink": "ещё",
"autoTypeError": "ошибка авто-типа",
"autoTypeErrorGeneric": "Была ошибка выполнения автоматического типа: {}",
"autoTypeErrorGlobal": "To use system-wide shortcut, please focus the app where you want to type your password",
"autoTypeErrorGlobal": "Для использования глобальных горячих клавиш, сделайте активным окно приложения, в котором хотите ввести пароль",
"autoTypeErrorNotInstalled": "{} не установлен",
"autoTypeHeader": "Авто-тип: Выберете",
"autoTypeMsgNoWindow": "Нам не удалось получить активный заголовок окна, начните вводить для поиска",
"autoTypeMsgMatchedByWindow": "Выбрать пароля для",
"autoTypeMsgMatchedByWindow": "Выбрать пароля для {}",
"autoTypeClearFilter": "показать все записи",
"autoTypeNoMatches": "нет совпадений",
"appSecWarn": "Не безопасно!",
"appSecWarnBody1": [
"Вы загрузили это приложение через незащищенное соединение. Кто-то может наблюдать за вами и украсть ваши пароли. Мы настоятельно рекомендуем вам остановиться. ",
"Вы можете продолжить только, если вы четко понимаете, что вы делаете."
],
"appSecWarnBody1": "Вы загрузили это приложение через незащищенное соединение. Кто-то может наблюдать за вами и украсть ваши пароли. Мы настоятельно рекомендуем вам остановиться. Вы можете продолжить только, если вы четко понимаете, что вы делаете.",
"appSecWarnBody2": "Да, ваша база данных в зашифрованном виде, но никто не может гарантировать, что приложение не было изменено на пути к вам.",
"appSecWarnBtn": "Я понимаю, что риск, по-прежнему",
"appUnsavedWarn": "Несохраненные изменения!",
@ -325,7 +326,7 @@
"setGenNewVersion": "Новая версия приложения была выпущена и загружена",
"setGenReleaseNotes": "Примечания к выпуску",
"setGenReloadToUpdate": "Перезагрузить для обновления",
"setGenUpdateManual": "New version has been released. It will check for updates and install them automatically, but auto-upgrading from your version is impossible.",
"setGenUpdateManual": "Доступна новая версия. Она сможет проверять наличие и устанавливать обновления автоматически, но авто-обновление с текущей версии невозможно.",
"setGenDownloadUpdate": "Скачать обновление",
"setGenUpdateAuto": "Скачивать и устанавливать автоматически",
"setGenUpdateCheck": "Проверять но не устанавливать",
@ -346,12 +347,12 @@
"setGenDownloadAndRestart": "Скачать обновление и перезагрузить",
"setGenAppearance": "Вид",
"setGenTheme": "Тема",
"setGenThemeFb": "Плоский синий",
"setGenThemeDb": "Темно коричневый",
"setGenThemeWh": "Белый",
"setGenThemeFb": "Плоская синяя",
"setGenThemeDb": "Тёмная коричневая",
"setGenThemeWh": "Белая",
"setGenThemeHc": "Высокий контраст",
"setGenThemeSd": "Solarized dark",
"setGenThemeSl": "Соляризация легкая",
"setGenThemeSd": "Выцветшая тёмная",
"setGenThemeSl": "Выцветшая светлая",
"setGenLocale": "Язык",
"setGenLocImprove": "перевести приложение на свой язык",
"setGenLocMsg": "Помочь перевести KeeWeb",
@ -366,7 +367,7 @@
"setGenColorfulIcons": "Цветной список пользовательских иконок",
"setGenFunction": "Функции",
"setGenAutoSync": "Автоматическое сохранение и синхронизация",
"setGenRememberKeyFiles": "Запоминать ключевые файлы",
"setGenRememberKeyFiles": "Запоминать файлы-ключи",
"setGenLockInactive": "Авто блокировка, если приложение неактивно",
"setGenNoAutoLock": "Не блокировать автом-ки",
"setGenLockMinutes": "через {} минут",
@ -377,7 +378,7 @@
"setGenClearMinute": "в минуту",
"setGenMinInstead": "Минимизировать приложение вместо закрытия",
"setGenLockMinimize": "Авто блокировка по минимизации",
"setGenLockCopy": "Блокировать БД после копии пароля",
"setGenLockCopy": "Блокировать приложение после копирования пароля",
"setGenStorage": "Хранилище",
"setGenShowAdvanced": "Показать дополнительные настройки (эти настройки могут быть опасны)",
"setGenDevTools": "Средства разработки",
@ -386,7 +387,7 @@
"setGenTryBetaWarningBody": "Пожалуйста, сохраните все файлы и нажмите эту кнопку еще раз",
"setGenShowAppLogs": "Журнал приложения",
"setFilePath": "Путь к файлу",
"setFileStorage": "This file is loaded from {}.",
"setFileStorage": "Это файл загружен из {}.",
"setFileIntl": "Этот файл хранится во внутренней памяти приложения",
"setFileLocalHint": "Хотите работать легко с локальными файлами?",
"setFileDownloadApp": "Скачать приложение себе",
@ -445,7 +446,7 @@
"setShColors": "показать элементы этого цвета",
"setShTrash": "перейти в корзину",
"setShFind": "поиск, просто начните вводить",
"setShClearSearch": "Очистить поиск",
"setShClearSearch": "очистить поиск",
"setShCopyPass": "скопировать пароль или выбранное поле",
"setShCopyUser": "копировать имя пользователя",
"setShCopyUrl": "скопировать веб-сайт",
@ -454,56 +455,56 @@
"setShNext": "перейти к следующей записи",
"setShCreateEntry": "создать запись",
"setShOpen": "открыть/создать",
"setShSave": "Сохранить все файлы",
"setShSave": "сохранить все файлы",
"setShGen": "сгенерировать пароль",
"setShSet": "настройки приложения",
"setShCopyPassGlobal": "копия пароля (если приложение работает в фоновом режиме)",
"setShCopyUserGlobal": "copy user (when app is in background)",
"setShCopyUserGlobal": "скопировать пользователя (при свёрнутой программе)",
"setShCopyUrlGlobal": "копия веб-сайта (если приложение работает в фоновом режиме)",
"setShAutoTypeGlobal": "auto-type (when app is in background)",
"setShAutoTypeGlobal": "авто-ввод (при свёрнутой программе)",
"setShLock": "блокировать базу данных",
"setAboutTitle": "О KeeWeb",
"setAboutBuilt": "Это приложение построено с этими удивительными инструментами",
"setAboutLic": "Лицензия",
"setAboutLicComment": "Само приложение и все включенные компоненты, которые не находятся в свободном доступе под MIT лицензией",
"setAboutFirst": "Это приложение с открытым исходным кодом созданное {}",
"setAboutSecond": "and licensed under {}.",
"setAboutSecond": "под лицензией {}.",
"setAboutSource": "Исходный код и вопросы на {}.",
"setHelpFormat": "Формат файла",
"setHelpFormatBody": "Это порт {} приложение, созданное с помощью веб-технологий. Он понимает файлы в формате KeePass (KDBX). Вы можете создавать файлы (базы данных паролей) либо в KeePass, или в этом приложении. Формат файла 100% совместим и должен открываться приложением.",
"setHelpFormatBody": "Это приложение - перенос программы {} на веб-технологии. Оно совместимо с файлами формата KeePass (kdbx). Вы можете создавать такие файлы (базы данных паролей) в KeePass или в этом приложении. Формат файла на 100% совместим и должен быть читаем обоими программами.",
"setHelpProblems": "Нужна помощь?",
"setHelpProblems1": "Если что-то пойдет не так, пожалуйста",
"setHelpProblems2": "или",
"setHelpProblems1": "Если что-то пойдет не так, пожалуйста {}",
"setHelpProblems2": "или {}",
"setHelpOpenIssue": "откройте вопрос на GitHub",
"setHelpContactLink": "связаться с разработчиком напрямую",
"setHelpAppInfo": "Информация о приложении",
"setHelpOtherPlatforms": "Другие платформы",
"setHelpDesktopApps": "Сборки приложения",
"setHelpWebApp": "Web app",
"setHelpWebApp": "Web-приложение",
"setHelpUpdates": "Обновления",
"setHelpTwitter": "Приложение в twitter",
"setHelpTwitter": "Twitter приложения",
"dropboxLogin": "Dropbox пользователь",
"dropboxLoginBody": "Чтобы продолжить, вы должны войти в Dropbox.",
"dropboxSyncError": " Dropbox ошибка синхронизации",
"dropboxNotFoundBody": "The file was not found. Has it been removed from another computer?",
"dropboxNotFoundBody": "Файл не найден. Возможно он был удалён с другого компьютера?",
"dropboxFull": "Dropbox заполнен",
"dropboxFullBody": "Your Dropbox is full, there's no space left anymore.",
"dropboxFullBody": "Ваш Dropbox заполнен, свободного места недостаточно.",
"dropboxRateLimitedBody": "Слишком много запросов к Dropbox были сделаны этим приложением. Пожалуйста, повторите попытку позже.",
"dropboxNetError": "Dropbox ошибка сети при синхронизации",
"dropboxNetErrorBody": "Произошла ошибка сети во время синхронизации Dropbox. Пожалуйста, проверьте подключение и повторите попытку.",
"dropboxErrorBody": "Что-то пошло не так во время Dropbox синхронизации. Пожалуйста, повторите попытку позже. Код ошибки:",
"dropboxErrorRepeatBody": "Что-то пошло не так во время Dropbox синхронизации. Пожалуйста, повторите попытку позже. Ошибка:",
"dropboxSetupDesc": "Some configuration is required to use Dropbox in self-hosted app. Please create your own Dropbox app and fill in its key below.",
"dropboxSetupDesc": "Для использования Dropbox в отдельном приложении требуется дополнительная настройка. Пожалуйста, создайте своё Dropbox-приложение и введите его ключ ниже.",
"dropboxAppKey": "Dropbox ключ приложения",
"dropboxAppKeyDesc": "Скопируйте ключ из вашего приложения Dropbox (настройки для разработчиков)",
"dropboxFolder": "Папка приложения",
"dropboxFolderDesc": "If your app is linked to entire Dropbox (not app folder), set the folder with your kdbx files here",
"dropboxFolderDesc": "Если ваше приложения связано со всем хранилищем Dropbox (а не отдельной папкой), введите здесь название папки с файлами kdbx",
"dropboxFolderSettingsDesc": "Выберите любую папку в Dropbox, где будут храниться файлы (корневую папку по умолчанию)",
"dropboxFolderPlaceholder": "папка по умолчанию",
"dropboxLink": "Ссылка на приложение",
"dropboxLinkApp": "Папка приложения (приложения KeeWeb)",
"dropboxLinkFull": "Full Dropbox or any folder",
"dropboxLinkCustom": "Own Dropbox app",
"dropboxLinkFull": "Полный Dropbox или любая папка",
"dropboxLinkCustom": "Своё Dropbox-приложение",
"launcherSave": "Сохранение пароля базы данных",
"launcherFileFilter": "KeePass файлы",
"authPopupRequired": "Всплывающие окна заблокированы",

View File

@ -1,4 +1,16 @@
{
"appTabWarn": "标签页过多",
"appTabWarnBody": "KeeWeb 不能同时在两个浏览器标签页中使用。请关闭这个标签页。",
"setGenThemeTe": "终端",
"setGenNoRememberKeyFiles": "不记忆",
"setGenRememberKeyFilesData": "保存在应用内",
"setGenRememberKeyFilesPath": "只记住密钥文件路径",
"setGenLockHours": "{} 个小时内",
"setGenLockDay": "一天内",
"setFileKdfParamsIter": "迭代次数",
"setFileKdfParamsMem": "内存占用KB",
"setFileKdfParams": "密钥生成算法",
"setFileKdfParamsPar": "并行计算",
"months": [
"一月",
"二月",
@ -16,16 +28,16 @@
"monthsShort": [
"一月",
"二月",
"三月",
"四月",
"五月",
"六月",
"七月",
"八月",
"九月",
"十月",
"十一月",
"十二月"
"",
"",
"",
"",
"",
"",
"",
"",
"",
""
],
"weekdays": [
"星期日",
@ -54,7 +66,7 @@
"website": "网站",
"tags": "标签",
"notes": "备注",
"entry": "内容",
"entry": "条目",
"group": "分组",
"noTitle": "无标题",
"or": "或",
@ -65,7 +77,7 @@
"shortcuts": "快捷键",
"help": "帮助",
"settings": "设置",
"history": "历史纪录",
"history": "历史",
"cache": "缓存",
"file": "密码数据库",
"webdav": "WebDAV",
@ -78,10 +90,10 @@
"menuSetGeneral": "通用",
"menuSetAbout": "关于",
"menuAlertNoTags": "无标签",
"menuAlertNoTagsBody": "您可以在编辑区域的标签部分新建标签。",
"menuAlertNoTagsBody": "您可以在 标签 部分的编辑区域中新建标签。",
"menuEmptyTrash": "清空回收站",
"menuEmptyTrashAlert": "确认清空回收站?",
"menuEmptyTrashAlertBody": "您将无法恢复被删除内容",
"menuEmptyTrashAlertBody": "您将无法恢复这些项目",
"menuItemCollapsed": "双击以展开",
"alertYes": "确定",
"alertNo": "取消",
@ -90,133 +102,133 @@
"alertSignIn": "登录",
"alertCopy": "复制",
"alertClose": "关闭",
"appBeta": "警告:测试版本,仅供预览",
"appBeta": "警告:测试版本,仅供预览",
"footerOpen": "打开 / 新建",
"footerSyncError": "同步失败",
"footerSyncError": "同步出错",
"footerTitleGen": "生成",
"footerTitleLock": "锁定",
"genLen": "长度",
"genNewPass": "新建密码",
"genPresetDefault": "默认",
"genPresetDerived": "旧密码",
"genPresetPronounceable": "易读性",
"genPresetMed": "中长密码",
"genPresetLong": "长密码",
"genPresetPin4": "4位数Pin码",
"genPresetMac": "MAC地址",
"genPresetDefault": "默认预设",
"genPresetDerived": "旧密码",
"genPresetPronounceable": "可拼读",
"genPresetMed": "中等长度",
"genPresetLong": "长",
"genPresetPin4": "4位 PIN",
"genPresetMac": "MAC 地址",
"genPresetHash128": "128位散列",
"genPresetHash256": "256位散列",
"grpTitle": "分组",
"grpSearch": "允许搜索当前分组下所有条目",
"grpAutoType": "启用自动选择类型",
"grpAutoTypeSeq": "自动排序",
"grpAutoTypeSeqDefault": "使用默认自动排序",
"grpTrash": "删除分组以及分组下所有条目",
"grpSearch": "允许搜索当前分组下的记录",
"grpAutoType": "启用自动键入",
"grpAutoTypeSeq": "自动键入序列",
"grpAutoTypeSeqDefault": "使用默认的自动键入序列",
"grpTrash": "删除分组及所有记录",
"tagTitle": "标签",
"tagTrash": "从所有条目中移除标签",
"tagTrash": "从所有记录中移除标签",
"tagRename": "重命名",
"tagTrashQuestion": "确认从所有条目中移除标签?",
"tagTrashQuestionBody": "该标签将从所有密码中删除,且无法恢复",
"tagExists": "标签已存在",
"tagExistsBody": "该标签名已存在, 请使用其他名称",
"tagTrashQuestion": "确认从所有记录中移除标签?",
"tagTrashQuestionBody": "该标签将从所有密码记录中删除。它将难以恢复。",
"tagExists": "标签已存在",
"tagExistsBody": "该标签名已存在, 请使用其他名称",
"tagBadName": "非法名称",
"tagBadNameBody": "标签名称中不能包含字符{}\"",
"genPsTitle": "密码生成器预设",
"tagBadNameBody": "标签名称中不能包含字符\"{}\"",
"genPsTitle": "生成器预设",
"genPsCreate": "新预设",
"genPsDelete": "删除预设",
"genPsNew": "预设",
"genPsEnabled": "在预设列表中显示",
"genPsDefault": "默认选中当前预设",
"genPsDefault": "默认选中",
"genPsDefaultLength": "默认长度",
"genPsUpper": "大写字母",
"genPsLower": "小写字母",
"genPsUpper": "大写拉丁字母",
"genPsLower": "小写拉丁字母",
"genPsDigits": "数字",
"genPsSpecial": "特殊符号",
"genPsBrackets": "括号",
"genPsHigh": "ASCII符",
"genPsHigh": "扩展 ASCII符",
"genPsAmbiguous": "相似字符",
"genPsInclude": "添加其他符号",
"genPsInclude": "要包含的其它符号",
"genPsExample": "生成密码示例",
"keyChangeTitleRemote": "更改主密钥",
"keyChangeMessageRemote": "为此密码数据库更改密钥。请输入新密钥",
"keyChangeTitleRemote": "主密钥已更改",
"keyChangeMessageRemote": "此数据库的主密钥已更改。请输入新密钥",
"keyChangeTitleExpired": "主密钥已过期",
"keyChangeMessageExpired": "该密码数据库密钥已过期,请输入新密钥",
"keyChangeRepeatPassword": "密码,重试一次",
"keyChangeRepeatPassword": "密码,再输入一遍",
"iconFavTitle": "下载并使用站点图标",
"iconSelCustom": "选择自定义图标",
"listEmptyTitle": "无密码",
"listEmptyAdd": "点击{}添加密码",
"listEmptyTitle": "",
"listEmptyAdd": "点击 {} 按钮添加",
"listGroup": "分组",
"listNoWebsite": "没有网站",
"listNoUser": "没有用户名",
"listNoAttachments": "没有附件",
"searchAddNew": "新建",
"searchSort": "排序",
"searchCreated": "创建时间",
"searchUpdated": "更新日期",
"searchCreated": "创建时间",
"searchUpdated": "更新日期",
"searchAttachments": "附件",
"searchAZ": "升序",
"searchZA": "降序",
"searchON": "升序",
"searchNO": "降序",
"searchShiftClickOr": "按住Shift键或",
"searchAdvTitle": "高级搜索",
"searchAZ": "从 A {} Z",
"searchZA": "从 Z {} A",
"searchON": "从旧 {} 新",
"searchNO": "从新 {} 旧",
"searchShiftClickOr": "Shift+单击 或",
"searchAdvTitle": "开/关 高级搜索",
"searchSearchIn": "搜索范围",
"searchOther": "其他字段",
"searchProtect": "安全等级",
"searchProtect": "安全字段",
"searchOptions": "选项",
"searchCase": "全字匹配",
"searchRegex": "使用正则表达式",
"searchCase": "区分大小写",
"searchRegex": "正则表达式",
"openOpen": "打开",
"openNew": "新建",
"openMore": "更多",
"openDemo": "演示",
"openXml": "导入XML",
"openCaps": "大写锁定",
"openClickToOpen": "点击打开密码数据库",
"openXml": "导入 XML",
"openCaps": "大写锁定",
"openClickToOpen": "点击打开文件",
"openKeyFile": "密钥文件",
"openKeyFileDropbox": "(从 Dropbox)",
"openDropHere": "拖放文件到此处",
"openFailedRead": "读取密码数据库失败",
"openNothingFound": "找不到密码数据库文件",
"openNothingFoundBody": "没有可以打开的文件",
"openNothingFoundBodyFolder": "在{}文件夹中搜索到密码数据库",
"openAppFolder": "KeeWeb",
"openFailedRead": "读取文件失败",
"openNothingFound": "找不到内容",
"openNothingFoundBody": "没有可以打开的文件",
"openNothingFoundBodyFolder": "在{}文件夹中搜索了文件",
"openAppFolder": "应用",
"openRootFolder": "根",
"openSelectFile": "选择一个密码数据库",
"openSelectFileBody": "选择一个您想打开的密码数据库",
"openSelectFile": "选择一个文件",
"openSelectFileBody": "选择您想打开的文件",
"openPassFor": "输入密码",
"openRemoveLastQuestion": "删除本地密码数据库",
"openRemoveLastQuestionBody": "您要删除的密码数据库仅保存在KeeWeb中, 确认永久删除吗?",
"openRemoveLastQuestionModBody": "您要删除的密码数据库已在本地修改, 确认放弃修改并删除吗?",
"openLocalFile": "本地密码数据库",
"openRemoveLastQuestion": "删除本地文件",
"openRemoveLastQuestionBody": "您要删除的文件仅保存在KeeWeb内部, 确认永久删除吗?",
"openRemoveLastQuestionModBody": "您要删除的文件已在本地修改, 确认放弃修改并删除吗?",
"openLocalFile": "本地文件",
"openLocalFileBody": "您要打开的密码数据库将仅保存在KeeWeb中, 您所做的变更将不会被保存到密码数据库中. 如果想要保存您的数据, 请从设置面板中导出.",
"openLocalFileDontShow": "不再显示",
"openWrongFile": "损坏的密码数据库",
"openWrongFileBody": "不支持此密码数据库格式. KeeWeb仅支持KeePass的kdbx格式密码数据库.",
"openKdbFileBody": "您打开的是旧版本KDB格式密码数据库, KeeWeb仅支持新版本的kdbx格式密码数据库. 你可以使用KeePass v2进行转换.",
"openWrongFile": "文件损坏",
"openWrongFileBody": "不支持此文件格式。KeeWeb 仅支持 KeePass kdbx 格式的数据库文件。",
"openKdbFileBody": "您打开的是旧版本 KDB 格式的文件。此版本的 KeeWeb 仅支持新的 kdbx 格式。请使用 KeePass v2 转换格式。",
"openConfigHeader": "{} 设置",
"openUrl": "URL",
"openUrlDesc": "https://server/path/file.kdbx, 或 file.kdbx",
"openUser": "用户",
"openUserDesc": "WebDAV服务器用户名(如果需要)",
"openUser": "用户",
"openUserDesc": "WebDAV 服务器用户名(如果需要)",
"openUserPlaceholder": "没有用户名",
"openPass": "密码",
"openPassDesc": "WebDAV服务器的密码(注意! 这不是密码数据库的密码)",
"openPassDesc": "WebDAV 服务器的密码(不是您文件的密码)",
"openPassPlaceholder": "没有密码",
"openConfigError": "错误: {}",
"openConfigErrorNotFound": "密码数据库未找到",
"openConfigErrorNotFound": "文件未找到",
"openError": "错误",
"openErrorDescription": "打开密码数据库时发生错误",
"openErrorFileNotFound": "密码数据库未找到",
"detAttDownload": "按住Shift按键点击附件按钮下载文件或者按住",
"detAttDelToRemove": "Delete按钮删除文件",
"openErrorDescription": "打开文件时出错",
"openErrorFileNotFound": "未找到文件",
"detAttDownload": "Shift+点击 附件 按钮下载或按",
"detAttDelToRemove": "Delete删除文件",
"detEmpty": "您的密码会显示在这里",
"detGroupRestore": "要恢复分组,请将其从回收站中拖放到任意其它分组",
"detHistoryClickPoint": "点击任意条目的时间轴点,可以查看当时快照",
"detHistoryReturn": "返回",
"detHistoryRevert": "回滚到此快照",
"detHistoryDel": "删除此快照",
"detGroupRestore": "要恢复分组,请将其从回收站中拖放到任意其它分组",
"detHistoryClickPoint": "点击记录历史时间轴上的点来查看状态",
"detHistoryReturn": "返回记录",
"detHistoryRevert": "回滚到状态",
"detHistoryDel": "删除此状态",
"detHistoryEmpty": "空",
"detHistoryModified": "已修改",
"detHistoryRec": "记录",
@ -241,10 +253,10 @@
"detAttachments": "附件",
"detDelFromTrash": "从回收站中删除吗?",
"detDelFromTrashBody": "删除后将无法恢复。",
"detDelFromTrashBodyHint": "想要快速删除回收站内所有内容, 请点击回收站菜单的清空图标.",
"detDelFromTrashBodyHint": "想要快速删除回收站内所有内容, 请点击回收站菜单的 清空 图标.",
"detFieldCopied": "已复制",
"detFieldCopiedTime": "完成复制使用了{}秒",
"detCopyHint": "您可以通过点击字段标题来复制字段内容",
"detFieldCopiedTime": "复制 {} 秒",
"detCopyHint": "您可以通过点击字段标题来复制字段",
"detMore": "更多",
"detClickToAddField": "点击添加一个新的字段",
"detMenuAddNewField": "添加新字段",
@ -254,67 +266,67 @@
"detMenuCopyPassword": "复制密码",
"detMenuCopyUser": "复制用户名",
"detSetupOtp": "一次性密码",
"detClone": "复制为副本",
"detClone": "制作副本",
"detClonedName": "复制",
"detAutoType": "自动输入",
"detAutoTypeEnabled": "以下条目启用自动输入",
"detAutoTypeEnabled": "此记录启用自动输入",
"detAutoTypeSequence": "按键",
"detAutoTypeInput": "输入",
"detAutoTypeShortcutsDesc": "{} 或者{}情况下KeeWeb未激活",
"detAutoTypeObfuscation": "随机混合真实按键",
"detAutoTypeShortcutsDesc": "{} 或者 {} ,当 KeeWeb未激活时",
"detAutoTypeObfuscation": "混合真实和随机按键",
"detAutoTypeWindow": "窗口",
"detAutoTypeInputWindow": "窗口标题",
"detSetupOtpAlert": "扫描二维码",
"detSetupOtpAlertBody": "请复制授权页上显示的二维码",
"detSetupOtpAlertBody1": "前往授权页面",
"detSetupOtpAlertBody2": "2. 按下 {} 截取二维码截图",
"detSetupOtpAlertBody1": "1. 前往授权页面",
"detSetupOtpAlertBody2": "2. 按下 {} 二维码截图",
"detSetupOtpAlertBody3": "3. 按下 {} 粘贴截图",
"detSetupOtpAlertBody3Mobile": "3. 选中或者使用下方的“选择 / 扫描”按钮使用你的摄像头进行扫描",
"detSetupOtpAlertBody4": "如果你无法扫描二维码,点击手动输入按钮",
"detSetupOtpAlertBody4": "如果你无法扫描二维码,点击 手动输入",
"detSetupOtpManualButton": "手动输入",
"detSetupOtpScanButton": "选择 / 扫描",
"detSetupOtpAlertBodyWith": "按下 {}",
"detOtpImageError": "读取图片",
"detOtpImageErrorBody": "抱歉,我们无法读取此图形文件格式,请联系程序开发者并提供错误描述。",
"detOtpImageError": "读取图片错",
"detOtpImageErrorBody": "抱歉,我们无法读取此图像格式,请联系程序开发者并提供错误详情。",
"detOtpImageReading": "读取二维码中...",
"detOtpQrError": "二维码扫描",
"detOtpQrErrorBody": "抱歉,我们无法读取此二维码,请再尝试一次,或者联系程序的开发者并提供错误描述。",
"detOtpQrError": "二维码扫描错",
"detOtpQrErrorBody": "抱歉,我们无法读取此二维码,请再尝试一次,或者联系程序的开发者并提供错误详情。",
"detOtpQrWrong": "错误的二维码",
"detOtpQrWrongBody": "您的二维码扫描成功,但未包含一次性密码数据",
"autoTypeEntryFields": "输入字段",
"autoTypeModifiers": "功能按键",
"detOtpQrWrongBody": "您的二维码扫描成功,但未包含一次性密码数据",
"autoTypeEntryFields": "记录字段",
"autoTypeModifiers": "修饰键",
"autoTypeKeys": "按键",
"autoTypeLink": "更多...",
"autoTypeError": "自动输入",
"autoTypeError": "自动输入错",
"autoTypeErrorGeneric": "自动输入时发生一个错误:{}",
"autoTypeErrorGlobal": "使用全系统的快捷方式,您在需要输入密码时请关注KeeWeb",
"autoTypeErrorGlobal": "要使用系统范围的快捷方式,请您在需要输入密码时切换到 KeeWeb",
"autoTypeErrorNotInstalled": "未安装 {}",
"autoTypeHeader": "自动输入:选择",
"autoTypeMsgNoWindow": "我们无法获取当前窗口的标题,请手动输入搜索",
"autoTypeMsgMatchedByWindow": "请选择一个密码",
"autoTypeClearFilter": "显示所有条目",
"autoTypeNoMatches": "未发现匹配内容",
"autoTypeMsgNoWindow": "我们无法获取当前窗口的标题,请手动输入搜索",
"autoTypeMsgMatchedByWindow": "请选择一个密码以用于{}",
"autoTypeClearFilter": "显示所有记录",
"autoTypeNoMatches": "无匹配",
"appSecWarn": "不安全!",
"appSecWarnBody1": "您已经通过不安全的方式加载当前程序,您有被监控并窃取您的密码的风险。我们强烈建议您停止使用,除非您清楚地了解自己在做什么。",
"appSecWarnBody2": "是的,你的数据库是加密的,但无法保证保证当前程序未被修改。",
"appSecWarnBtn": "我已经了解风险,请继续",
"appSecWarnBody1": "您已经通过不安全的方式加载当前程序,您有被监控和密码失窃的风险。我们强烈建议您停止使用,除非您清楚地了解自己在做什么。",
"appSecWarnBody2": "是的,你的数据库是加密的,但无法保证保证您所获取的程序未被修改。",
"appSecWarnBtn": "我知道风险,请继续",
"appUnsavedWarn": "更改未保存!",
"appUnsavedWarnBody": "您有未保存密码数据库,如果退出 KeeWeb ,这些更改将丢失。",
"appUnsavedWarnBody": "您有未保存的文件,如果关闭 KeeWeb ,这些更改将丢失。",
"appDontExitBtn": "不要退出",
"appCannotLockAutoInit": "KeeWeb无法被锁定,因为自动保存被关闭。",
"appCannotLockAutoInit": "KeeWeb 无法被锁定,因为自动保存被关闭。",
"appCannotLock": "所以未保存更改将丢失,是否继续?",
"appAutoSave": "自动保存更改",
"appSaveError": "保存发生错误",
"appSaveErrorBody": "自动保存密码数据库失败",
"appSaveError": "保存出错",
"appSaveErrorBody": "自动保存文件失败",
"appSaveErrorBodyMul": "自动保存失败:",
"appSettingsError": "载入KeeWeb时发生错误",
"appSettingsErrorBody": "载入KeeWeb设置时发生错误。请检查程序网址或联系您的管理员。",
"appSettingsError": "载入 KeeWeb 出错",
"appSettingsErrorBody": "载入 KeeWeb 设置时发生错误。请再次检查程序网址或联系您的管理员。",
"setGenTitle": "全局设置",
"setGenUpdate": "更新",
"setGenNewVersion": "新的KeeWeb版本已经发布并下载完毕",
"setGenReleaseNotes": "查看新特性",
"setGenReloadToUpdate": "重新检查升级",
"setGenUpdateManual": "新版本已经发布。见自动检查更新并安装,但无法从您档期那的版本自动升级。",
"setGenNewVersion": "新的 KeeWeb 版本已经发布并下载完毕",
"setGenReleaseNotes": "查看版本说明",
"setGenReloadToUpdate": "重新加载以升级",
"setGenUpdateManual": "新版本已经发布。程序将检查更新并自动安装更新,但无法从当前版本自动升级。",
"setGenDownloadUpdate": "下载更新",
"setGenUpdateAuto": "下载并自动安装",
"setGenUpdateCheck": "检查更新但不安装",
@ -323,17 +335,17 @@
"setGenCheckUpdate": "检查更新",
"setGenErrorChecking": "检查更新发生错误",
"setGenLastCheckSuccess": "最后检查更新时间:{}",
"setGenLastCheckVer": "最新版本{}",
"setGenCheckedAt": "最后检查更新时间",
"setGenLastCheckVer": "最新版本{}",
"setGenCheckedAt": "检查时间",
"setGenLatestVer": "你正在使用最新的版本",
"setGenNewVer": "新版本 {} 已发布",
"setGenNewVer": "新版本 {} 已发布",
"setGenDownloadingUpdate": "下载更新中...",
"setGenExtractingUpdate": "提取更新中...",
"setGenCheckErr": "下载新版本时发生一个错误",
"setGenCheckErr": "下载新版本时发生一个错误",
"setGenNeverChecked": "从不检查更新",
"setGenRestartToUpdate": "重启KeeWeb完成更新",
"setGenDownloadAndRestart": "下载更新并重启KeeWeb",
"setGenAppearance": "显示",
"setGenRestartToUpdate": "重启 KeeWeb 完成更新",
"setGenDownloadAndRestart": "下载更新并重启 KeeWeb",
"setGenAppearance": "外观",
"setGenTheme": "主题",
"setGenThemeFb": "深灰",
"setGenThemeDb": "深棕",
@ -342,159 +354,159 @@
"setGenThemeSd": "Solarized Dark",
"setGenThemeSl": "Solarized Light",
"setGenLocale": "语言",
"setGenLocImprove": "将KeeWeb翻译成您的语言",
"setGenLocImprove": "将 KeeWeb 翻译成您的语言",
"setGenLocMsg": "协助翻译 KeeWeb",
"setGenLocMsgBody": "如果你喜欢看到KeeWeb使用您的语言,请协助我们翻译。",
"setGenLocMsgBody": "如果你想要 KeeWeb 使用您的语言,请协助我们翻译。",
"setGenLocMsgLink": "翻译 KeeWeb",
"setGenFontSize": "字体大小",
"setGenFontSizeNormal": "正常",
"setGenFontSizeLarge": "大",
"setGenFontSizeLargest": "最大",
"setGenShowSubgroups": "显示所有条目(包含子分组)",
"setGenTableView": "以表视图显示条目",
"setGenColorfulIcons": "以不同颜色在列表中显示",
"setGenShowSubgroups": "显示所有子分组的记录",
"setGenTableView": "以视图显示条目",
"setGenColorfulIcons": "在列表中显示彩色图标",
"setGenFunction": "功能",
"setGenAutoSync": "自动保存和同步",
"setGenRememberKeyFiles": "记住密钥文件",
"setGenLockInactive": "KeeWeb未激活时自动锁定",
"setGenNoAutoLock": "禁止自动锁定",
"setGenLockInactive": "KeeWeb 未聚焦时自动锁定",
"setGenNoAutoLock": "自动锁定",
"setGenLockMinutes": "在 {} 分钟后",
"setGenLockHour": "在 1 个小时后",
"setGenClearClip": "复制后清除剪贴板",
"setGenNoClear": "不清除",
"setGenClearSeconds": "在 {} 后",
"setGenClearMinute": "在 1 分中后",
"setGenMinInstead": "最小化KeeWeb但不关闭",
"setGenNoClear": "不清除",
"setGenClearSeconds": "在 {} 后",
"setGenClearMinute": "在一分钟后",
"setGenMinInstead": "最小化 KeeWeb 但不关闭",
"setGenLockMinimize": "最小化时自动锁定",
"setGenLockCopy": "复制密码时自动锁定",
"setGenStorage": "存储",
"setGenShowAdvanced": "显示高级设置",
"setGenDevTools": "显示开发工具",
"setGenTryBeta": "希望试用测试版本请重新启动KeeWeb",
"setGenTryBetaWarning": "未保存的密码数据库",
"setGenTryBetaWarningBody": "请保存所有密码数据库,并再次点击按钮。",
"setGenShowAppLogs": "显示KeeWeb日志",
"setFilePath": "密码数据库路径",
"setFileStorage": "从 {} 加载密码数据库",
"setFileIntl": "密码数据库被保存在云存储上",
"setFileLocalHint": "希望与本地密码数据库协同工作?",
"setGenTryBeta": "试用测试版本直到重启",
"setGenTryBetaWarning": "未保存的文件",
"setGenTryBetaWarningBody": "请保存所有文件,并再次点击按钮。",
"setGenShowAppLogs": "显示 KeeWeb 日志",
"setFilePath": "文件路径",
"setFileStorage": "文件加载自 {}。",
"setFileIntl": "文件保存在程序内部",
"setFileLocalHint": "希望与本地文件协同工作?",
"setFileDownloadApp": "下载桌面应用程序",
"setFileSave": "保存",
"setFileSaveTo": "另存为",
"setFileSaveTo": "保存到...",
"setFileClose": "关闭",
"setFileSync": "同步",
"setFileSaveToXml": "XML",
"setFileLastSync": "最后一次同步",
"setFileLastSync": "次同步",
"setFileLastSyncUnknown": "未知",
"setFileSyncInProgress": "同步中",
"setFileSyncError": "同步失败",
"setFilePass": "主密码",
"setFilePassChanged": "密码已经变更;留空则继续试用旧密码",
"setFilePassChanged": "密码已经更改;字段留空则继续使用旧密码",
"setFileKeyFile": "秘钥文件",
"setFileSelKeyFile": "选择一个秘钥文件",
"setFileNames": "密码数据库名称",
"setFileDefUser": "默认用户名",
"setFileEnableTrash": "启用回收站",
"setFileHistLen": "每个条目保留历史纪录的长度限制",
"setFileHistLen": "每项记录保留历史记录的长度限制",
"setFileHistSize": "每个密码数据库历史记录的大小限制",
"setFileBackups": "备份",
"setFileBackupEnable": "备份密码数据库",
"setFileBackupEnable": "备份此文件",
"setFileBackupPath": "备份路径",
"setFileBackupTime": "备份频率",
"setFileBackupNow": "立刻备份",
"setFileBackupNowWorking": "备份中...",
"setFileBackupError": "备份失败",
"setFileBackupErrorDescription": "写入备份密码数据库发生错误",
"setFileBackupError": "备份出错",
"setFileBackupErrorDescription": "写入备份文件出错",
"setFileBackupOnSave": "每次保存文件时",
"setFileBackupDaily": "每日",
"setFileBackupWeekly": "每周",
"setFileBackupMonthly": "每月",
"setFileBackupManually": "手动备份,不自动备份",
"setFileRounds": "秘钥加密次数",
"setFileBackupManually": "手动,不自动备份",
"setFileRounds": "密钥加密遍数",
"setFileKeyChangeForce": "多久后提示更改秘钥文件(天)",
"setFileUseKeyFile": "使用钥文件",
"setFileUseGenKeyFile": "使用生成的钥文件",
"setFileUseOldKeyFile": "使用旧的秘钥文件",
"setFileGenKeyFile": "生成新的钥文件",
"setFileDontUseKeyFile": "不使用钥文件",
"setFileUseKeyFile": "使用钥文件",
"setFileUseGenKeyFile": "使用生成的钥文件",
"setFileUseOldKeyFile": "使用原密钥文件",
"setFileGenKeyFile": "生成新的钥文件",
"setFileDontUseKeyFile": "不使用钥文件",
"setFileEmptyPass": "空密码",
"setFileEmptyPassBody": "使用空密码保存的数据库完全不受保护。你确定要这么做?",
"setFileSaveError": "保存失败",
"setFileSaveErrorBody": "保存密码数据库时发生出错",
"setFileSaveError": "保存出错",
"setFileSaveErrorBody": "保存文件时出错",
"setFileAlreadyExists": "已经存在",
"setFileAlreadyExistsBody": "密码数据库 {} 已经存在。要覆盖吗?",
"setFileAlreadyExistsBody": "文件 {} 已经存在。要覆盖吗?",
"setFileUnsaved": "未保存的更改",
"setFileUnsavedBody": "当前密码数据库有未保存的更改",
"setFileUnsavedBody": "此文件有未保存的更改",
"setFileCloseNoSave": "关闭并放弃更改",
"setFileDontClose": "不要关闭",
"setFileNoWebDavUpload": "无法保存到WebDAV",
"setFileNoWebDavUploadBody": "不支持在WebDAV上新建密码数据库。请手动上传您的密码数据库并在KeeWeb中打开。",
"setFileNoWebDavUpload": "无法保存到 WebDAV",
"setFileNoWebDavUploadBody": "暂不支持向 WebDAV 添加文件。请手动上传您的文件并在 KeeWeb 中打开。",
"setShTitle": "快捷键",
"setShShowAll": "显示所有项",
"setShColors": "使用不同颜色显示所有项",
"setShColors": "显示带颜色的项",
"setShTrash": "前往回收站",
"setShFind": "搜索,或开始输入",
"setShClearSearch": "清空搜索结果",
"setShFind": "搜索,或直接开始输入",
"setShClearSearch": "清空搜索",
"setShCopyPass": "复制密码或选中的字段",
"setShCopyUser": "复制用户名",
"setShCopyUrl": "复制",
"setShAutoType": "自动输入选中的条目",
"setShCopyUrl": "复制站",
"setShAutoType": "自动输入选中的记录",
"setShPrev": "转到上一项",
"setShNext": "转到下一项",
"setShCreateEntry": "新建条目",
"setShCreateEntry": "新建记录",
"setShOpen": "打开 / 新建",
"setShSave": "保存所有密码数据库",
"setShSave": "保存所有文件",
"setShGen": "生成密码",
"setShSet": "KeeWeb设置",
"setShCopyPassGlobal": "复制密码当KeeWeb在后台运行时",
"setShCopyUserGlobal": "复制用户名当KeeWeb在后台运行时",
"setShCopyUrlGlobal": "复制站点(当 KeeWeb 在后台运行时)",
"setShAutoTypeGlobal": "自动输入当KeeWeb在后台运行时",
"setShSet": "KeeWeb 设置",
"setShCopyPassGlobal": "复制密码(当程序在后台运行时)",
"setShCopyUserGlobal": "复制用户名(当程序在后台运行时)",
"setShCopyUrlGlobal": "复制站点(当程序在后台运行时)",
"setShAutoTypeGlobal": "自动输入(当程序在后台运行时)",
"setShLock": "锁定数据库",
"setAboutTitle": "关于",
"setAboutBuilt": "特别致谢KeeWeb基于以下工具构建",
"setAboutBuilt": "KeeWeb 使用以下优秀工具构建",
"setAboutLic": "许可",
"setAboutLicComment": "本应用程序及所包含组件不含公共领域基于MIT许可协议",
"setAboutFirst": "此开源应用程序由 {} 创建开发",
"setAboutSecond": "并基于 {} 许可协议。",
"setAboutLicComment": "本应用程序及所包含的非公开组件遵守 MIT 许可协议",
"setAboutFirst": "KeeWeb 是由 {} 开发的开源程序",
"setAboutSecond": "遵守 {} 许可协议。",
"setAboutSource": "源码及缺陷报告托管于 {} 。",
"setHelpFormat": "密码数据库格式",
"setHelpFormatBody": "这是一个基于web技术构建的 {} 应用使用Keepass的KDBX密码数据库格式。你可以创建和使用这些密码数据库无论是否使用KeePass或者KeeWeb。密码数据库格式在两者间是100%兼容的。",
"setHelpFormat": "文件格式",
"setHelpFormatBody": "这是一个基于网络技术构建的 {} 程序的移植版本,使用 KeePass 的 KDBX 格式。您可以使用 KeePass 或者 KeeWeb 创建和使用这些密码数据库。文件格式对两者100%兼容。",
"setHelpProblems": "需要一些帮助?",
"setHelpProblems1": "如果出现问题,请 {}",
"setHelpProblems2": "或者 {}",
"setHelpOpenIssue": "在GitHub上新建一个缺陷报告",
"setHelpContactLink": "直接联系开发人员",
"setHelpAppInfo": "KeeWeb应用信息",
"setHelpAppInfo": "KeeWeb 应用信息",
"setHelpOtherPlatforms": "其他平台",
"setHelpDesktopApps": "桌面应用程序",
"setHelpWebApp": "Web 应用",
"setHelpWebApp": "网页应用",
"setHelpUpdates": "更新",
"setHelpTwitter": "官方 Twitter",
"dropboxLogin": "Dropbox登录",
"dropboxLoginBody": "想要继续,你必须登录到Dropbox。",
"dropboxSyncError": "Dropbox同步错误",
"dropboxNotFoundBody": "密码数据库没有找到。它从另一台电脑删除?",
"dropboxFull": "Dropbox空间不足",
"dropboxFullBody": "您的Dropbox空间已经满了没有足够剩余空间。",
"dropboxRateLimitedBody": "Dropbox收到了太多的KeeWeb请求请稍后再试。",
"dropboxNetError": "Dropbox同步网络错误",
"dropboxNetErrorBody": "Dropbox同步过程中出现网络错误。请检查您的连接,然后再试。",
"dropboxLogin": "Dropbox 登录",
"dropboxLoginBody": "想要继续,您必须登录 Dropbox。",
"dropboxSyncError": "Dropbox 同步错误",
"dropboxNotFoundBody": "没有找到文件。它从另一台电脑删除了吗",
"dropboxFull": "Dropbox 已满",
"dropboxFullBody": "您的 Dropbox 空间已经满了,没有剩余空间。",
"dropboxRateLimitedBody": "Dropbox 收到了太多的 KeeWeb 请求,请稍后再试。",
"dropboxNetError": "Dropbox 同步网络错误",
"dropboxNetErrorBody": "Dropbox 同步过程中出现网络错误。请检查您的连接后再试。",
"dropboxErrorBody": "Dropbox在同步过程中出了问题。请稍后再试。错误代码",
"dropboxErrorRepeatBody": "Dropbox在同步过程中出了问题。请稍后再试。错误:",
"dropboxSetupDesc": "通过托管应用使用Dropbox需要一些额外注册信息。请创建您的自有Dropbox应用并在下方填写app key。",
"dropboxErrorRepeatBody": "Dropbox 在同步过程中出了问题。请稍后再试。错误:",
"dropboxSetupDesc": "通过托管应用使用 Dropbox 需要一些额外注册信息。请创建您自己的 Dropbox 应用并在下方填写app key。",
"dropboxAppKey": "Dropbox app key",
"dropboxAppKeyDesc": "从您的Dropbox应用中复制key开发者设置",
"dropboxAppKeyDesc": "从您的 Dropbox 应用中复制 key (开发者设置)",
"dropboxFolder": "应用文件夹",
"dropboxFolderDesc": "如果您的应用已经链接到整个Dropbox而不是应用文件夹请在这里设置您的KDBX文件所在文件夹。",
"dropboxFolderSettingsDesc": "请选择密码数据库将要保存到Dropbox的目标文件夹默认为根文件夹",
"dropboxFolderDesc": "如果您的应用已经链接到整个 Dropbox (而不是应用文件夹),请在这里设置您的 KDBX 文件所在文件夹。",
"dropboxFolderSettingsDesc": "请选 Dropbox 中保存文件的文件夹(默认为根文件夹)",
"dropboxFolderPlaceholder": "默认文件夹",
"dropboxLink": "将KeeWeb链接到",
"dropboxLinkApp": "KeeWeb数据文件夹 (Apps/KeeWeb)",
"dropboxLinkFull": "整个Dropbox或者任意文件夹",
"dropboxLinkCustom": "自有Dropbox应用",
"dropboxLink": "将 KeeWeb 链接到",
"dropboxLinkApp": "KeeWeb 文件夹(Apps/KeeWeb)",
"dropboxLinkFull": "整个 Dropbox 或者任意文件夹",
"dropboxLinkCustom": "自有 Dropbox 应用",
"launcherSave": "保存密码数据库",
"launcherFileFilter": "KeePass文件",
"launcherFileFilter": "KeePass 文件",
"authPopupRequired": "弹出窗口已被阻止",
"authPopupRequiredBody": "请在您的浏览器中允许弹出窗口。"
"authPopupRequiredBody": "请在您的浏览器中允许弹出窗口。"
}

View File

@ -21,6 +21,9 @@ const urlParams = {
'source_file_name': 'base.json',
'file_format': 'I18NEXT_MULTILINGUAL_JSON'
};
// process.exit(processData(fs.readFileSync('translations.json', 'utf8')));
const url = API_URL.replace(':project_id', PROJECT_ID) + '?' +
Object.keys(urlParams).map(param => param + '=' + urlParams[param]).join('&');
console.log('Sending request...');
@ -35,28 +38,81 @@ https.get(url, res => {
res.on('end', () => {
console.log('Data received, parsing...');
const json = Buffer.concat(data).toString('utf8');
const languages = JSON.parse(json);
let langCount = 0;
let skipCount = 0;
const totalPhraseCount = Object.keys(languages['en-US'].translation).length;
Object.keys(languages).forEach(lang => {
const languageTranslations = languages[lang].translation;
if (lang === 'en-US' || !languageTranslations) {
return;
}
const langPhraseCount = Object.keys(languageTranslations).length;
const percentage = Math.round(langPhraseCount / totalPhraseCount * 100);
const included = percentage >= PHRASE_COUNT_THRESHOLD_PERCENT;
const action = included ? 'OK' : 'SKIP';
console.log(`${lang}: ${langPhraseCount} / ${totalPhraseCount} (${percentage}%) -> ${action}`);
if (included) {
langCount++;
const languageJson = JSON.stringify(languageTranslations, null, 4);
fs.writeFileSync(`app/scripts/locales/${lang}.json`, languageJson);
} else {
skipCount++;
}
});
console.log(`Done: ${langCount} written, ${skipCount} skipped`);
processData(json);
fs.writeFileSync('translations.json', json);
});
});
function processData(json) {
const languages = JSON.parse(json);
let langCount = 0;
let skipCount = 0;
const enUs = languages['en-US'].translation;
const totalPhraseCount = Object.keys(enUs).length;
let errors = 0;
Object.keys(languages).forEach(lang => {
const languageTranslations = languages[lang].translation;
if (lang === 'en-US' || !languageTranslations) {
return;
}
const langPhraseCount = Object.keys(languageTranslations).length;
const percentage = Math.round(langPhraseCount / totalPhraseCount * 100);
const included = percentage >= PHRASE_COUNT_THRESHOLD_PERCENT;
const action = included ? '\x1b[36mOK\x1b[0m' : '\x1b[35mSKIP\x1b[0m';
console.log(`[${lang}] ${langPhraseCount} / ${totalPhraseCount} (${percentage}%) -> ${action}`);
if (included) {
langCount++;
for (const name of Object.keys(languageTranslations)) {
let text = languageTranslations[name];
let enText = enUs[name];
if (text instanceof Array) {
if (!(enText instanceof Array)) {
languageTranslations[name] = text.join('\n');
console.error(`[${lang}] \x1b[31mERROR:ARRAY\x1b[0m ${name}`);
enText = [enText];
errors++;
}
text = text.join('\n');
enText = enText.join('\n');
}
if (!enText) {
console.warn(`[${lang}] SKIP ${name}`);
delete languageTranslations[name];
continue;
}
const textMatches = text.match(/"/g);
const textMatchesCount = textMatches && textMatches.length || 0;
const enTextMatches = enText.match(/"/g);
const enTextMatchesCount = enTextMatches && enTextMatches.length || 0;
if (enTextMatchesCount !== textMatchesCount) {
const textHl = text.replace(/"/g, '\x1b[33m"\x1b[0m');
console.warn(`[${lang}] \x1b[33mWARN:"\x1b[0m ${name}: ${textHl}`);
}
if (/[<>&]/.test(text)) {
const textHl = text.replace(/([<>&])/g, '\x1b[31m$1\x1b[0m');
console.error(`[${lang}] \x1b[31mERROR:<>\x1b[0m ${name}: ${textHl}`);
errors++;
}
if (text.indexOf('{}') >= 0 && enText.indexOf('{}') < 0) {
const textHl = text.replace(/\{}/g, '\x1b[31m{}\x1b[0m');
console.error(`[${lang}] \x1b[31mERROR:{}\x1b[0m ${name}: ${textHl}`);
errors++;
}
if (enText.indexOf('{}') >= 0 && text.indexOf('{}') < 0) {
const enTextHl = enText.replace(/\{}/g, '\x1b[31m{}\x1b[0m');
console.error(`[${lang}] \x1b[31mERROR:NO{}\x1b[0m ${name}: ${text} <--> ${enTextHl}`);
errors++;
}
}
const languageJson = JSON.stringify(languageTranslations, null, 4);
fs.writeFileSync(`app/scripts/locales/${lang}.json`, languageJson);
} else {
skipCount++;
}
});
console.log(`Done: ${langCount} written, ${skipCount} skipped, ${errors} errors`);
if (errors) {
console.error('There were errors, please check the output.');
process.exit(1);
}
}