mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 02:16:05 +01:00 
			
		
		
		
	add translation for all 9 search option files
This commit is contained in:
		| @@ -2,6 +2,7 @@ import server from "../../services/server.js"; | |||||||
| import ws from "../../services/ws.js"; | import ws from "../../services/ws.js"; | ||||||
| import Component from "../../components/component.js"; | import Component from "../../components/component.js"; | ||||||
| import utils from "../../services/utils.js"; | import utils from "../../services/utils.js"; | ||||||
|  | import { t } from "../../services/i18n.js"; // 新增的导入 | ||||||
|  |  | ||||||
| export default class AbstractSearchOption extends Component { | export default class AbstractSearchOption extends Component { | ||||||
|     constructor(attribute, note) { |     constructor(attribute, note) { | ||||||
| @@ -27,14 +28,14 @@ export default class AbstractSearchOption extends Component { | |||||||
|  |  | ||||||
|             $rendered.find('.search-option-del') |             $rendered.find('.search-option-del') | ||||||
|                 .on('click', () => this.deleteOption()) |                 .on('click', () => this.deleteOption()) | ||||||
|                 .attr('title', 'Remove this search option'); |                 .attr('title', t('abstract_search_option.remove_this_search_option')); // 使用 t 函数处理 i18n 字符串 | ||||||
|  |  | ||||||
|             utils.initHelpDropdown($rendered); |             utils.initHelpDropdown($rendered); | ||||||
|  |  | ||||||
|             return $rendered; |             return $rendered; | ||||||
|         } |         } | ||||||
|         catch (e) { |         catch (e) { | ||||||
|             logError(`Failed rendering search option: ${JSON.stringify(this.attribute.dto)} with error: ${e.message} ${e.stack}`); |             logError(t('abstract_search_option.failed_rendering', { dto: JSON.stringify(this.attribute.dto), error: e.message, stack: e.stack })); // 使用 t 函数处理 i18n 字符串 | ||||||
|             return null; |             return null; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -1,46 +1,47 @@ | |||||||
| import AbstractSearchOption from "./abstract_search_option.js"; | import AbstractSearchOption from "./abstract_search_option.js"; | ||||||
| import noteAutocompleteService from "../../services/note_autocomplete.js"; | import noteAutocompleteService from "../../services/note_autocomplete.js"; | ||||||
|  | import { t } from "../../services/i18n.js"; | ||||||
|  |  | ||||||
| const TPL = ` | const TPL = ` | ||||||
| <tr> | <tr> | ||||||
|     <td colspan="2"> |     <td colspan="2"> | ||||||
|         <div style="display: flex; align-items: center;"> |         <div style="display: flex; align-items: center;"> | ||||||
|             <div style="margin-right: 10px">Ancestor:</div>  |             <div style="margin-right: 10px">${t('ancestor.label')}:</div>  | ||||||
|             <div class="input-group" style="flex-shrink: 2"> |             <div class="input-group" style="flex-shrink: 2"> | ||||||
|                 <input class="ancestor form-control" placeholder="search for note by its name"> |                 <input class="ancestor form-control" placeholder="${t('ancestor.placeholder')}"> | ||||||
|             </div> |             </div> | ||||||
|              |              | ||||||
|             <div style="margin-left: 10px; margin-right: 10px">depth:</div> |             <div style="margin-left: 10px; margin-right: 10px">${t('ancestor.depth_label')}:</div> | ||||||
|              |              | ||||||
|             <select name="depth" class="form-control d-inline ancestor-depth" style="flex-shrink: 3"> |             <select name="depth" class="form-control d-inline ancestor-depth" style="flex-shrink: 3"> | ||||||
|                 <option value="">doesn't matter</option> |                 <option value="">${t('ancestor.depth_doesnt_matter')}</option> | ||||||
|                 <option value="eq1">is exactly 1 (direct children)</option> |                 <option value="eq1">${t('ancestor.depth_eq', {count: 1})} (${t('ancestor.direct_children')})</option> | ||||||
|                 <option value="eq2">is exactly 2</option> |                 <option value="eq2">${t('ancestor.depth_eq', {count: 2})}</option> | ||||||
|                 <option value="eq3">is exactly 3</option> |                 <option value="eq3">${t('ancestor.depth_eq', {count: 3})}</option> | ||||||
|                 <option value="eq4">is exactly 4</option> |                 <option value="eq4">${t('ancestor.depth_eq', {count: 4})}</option> | ||||||
|                 <option value="eq5">is exactly 5</option> |                 <option value="eq5">${t('ancestor.depth_eq', {count: 5})}</option> | ||||||
|                 <option value="eq6">is exactly 6</option> |                 <option value="eq6">${t('ancestor.depth_eq', {count: 6})}</option> | ||||||
|                 <option value="eq7">is exactly 7</option> |                 <option value="eq7">${t('ancestor.depth_eq', {count: 7})}</option> | ||||||
|                 <option value="eq8">is exactly 8</option> |                 <option value="eq8">${t('ancestor.depth_eq', {count: 8})}</option> | ||||||
|                 <option value="eq9">is exactly 9</option> |                 <option value="eq9">${t('ancestor.depth_eq', {count: 9})}</option> | ||||||
|                 <option value="gt0">is greater than 0</option> |                 <option value="gt0">${t('ancestor.depth_gt', {count: 0})}</option> | ||||||
|                 <option value="gt1">is greater than 1</option> |                 <option value="gt1">${t('ancestor.depth_gt', {count: 1})}</option> | ||||||
|                 <option value="gt2">is greater than 2</option> |                 <option value="gt2">${t('ancestor.depth_gt', {count: 2})}</option> | ||||||
|                 <option value="gt3">is greater than 3</option> |                 <option value="gt3">${t('ancestor.depth_gt', {count: 3})}</option> | ||||||
|                 <option value="gt4">is greater than 4</option> |                 <option value="gt4">${t('ancestor.depth_gt', {count: 4})}</option> | ||||||
|                 <option value="gt5">is greater than 5</option> |                 <option value="gt5">${t('ancestor.depth_gt', {count: 5})}</option> | ||||||
|                 <option value="gt6">is greater than 6</option> |                 <option value="gt6">${t('ancestor.depth_gt', {count: 6})}</option> | ||||||
|                 <option value="gt7">is greater than 7</option> |                 <option value="gt7">${t('ancestor.depth_gt', {count: 7})}</option> | ||||||
|                 <option value="gt8">is greater than 8</option> |                 <option value="gt8">${t('ancestor.depth_gt', {count: 8})}</option> | ||||||
|                 <option value="gt9">is greater than 9</option> |                 <option value="gt9">${t('ancestor.depth_gt', {count: 9})}</option> | ||||||
|                 <option value="lt2">is less than 2</option> |                 <option value="lt2">${t('ancestor.depth_lt', {count: 2})}</option> | ||||||
|                 <option value="lt3">is less than 3</option> |                 <option value="lt3">${t('ancestor.depth_lt', {count: 3})}</option> | ||||||
|                 <option value="lt4">is less than 4</option> |                 <option value="lt4">${t('ancestor.depth_lt', {count: 4})}</option> | ||||||
|                 <option value="lt5">is less than 5</option> |                 <option value="lt5">${t('ancestor.depth_lt', {count: 5})}</option> | ||||||
|                 <option value="lt6">is less than 6</option> |                 <option value="lt6">${t('ancestor.depth_lt', {count: 6})}</option> | ||||||
|                 <option value="lt7">is less than 7</option> |                 <option value="lt7">${t('ancestor.depth_lt', {count: 7})}</option> | ||||||
|                 <option value="lt8">is less than 8</option> |                 <option value="lt8">${t('ancestor.depth_lt', {count: 8})}</option> | ||||||
|                 <option value="lt9">is less than 9</option> |                 <option value="lt9">${t('ancestor.depth_lt', {count: 9})}</option> | ||||||
|             </select> |             </select> | ||||||
|         </div> |         </div> | ||||||
|     </td> |     </td> | ||||||
|   | |||||||
| @@ -1,22 +1,20 @@ | |||||||
| import AbstractSearchOption from "./abstract_search_option.js"; | import AbstractSearchOption from "./abstract_search_option.js"; | ||||||
|  | import { t } from "../../services/i18n.js"; | ||||||
|  |  | ||||||
| const TPL = ` | const TPL = ` | ||||||
| <tr data-search-option-conf="debug"> | <tr data-search-option-conf="debug"> | ||||||
|     <td colSpan="2"> |     <td colSpan="2"> | ||||||
|         <span class="bx bx-bug"></span> |         <span class="bx bx-bug"></span> | ||||||
|  |         ${t("debug.debug")} | ||||||
|         Debug |  | ||||||
|     </td> |     </td> | ||||||
|     <td class="button-column"> |     <td class="button-column"> | ||||||
|         <div class="dropdown help-dropdown"> |         <div class="dropdown help-dropdown"> | ||||||
|             <span class="bx bx-help-circle icon-action" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></span> |             <span class="bx bx-help-circle icon-action" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></span> | ||||||
|             <div class="dropdown-menu dropdown-menu-right p-4"> |             <div class="dropdown-menu dropdown-menu-right p-4"> | ||||||
|                 <p>Debug will print extra debugging information into the console to aid in debugging complex queries.</p> |                 <p>${t("debug.debug_info")}</p> | ||||||
|                  |                 <p>${t("debug.access_info")}</p> | ||||||
|                 <p>To access the debug information, execute query and click on "Show backend log" in top left corner.</p>  |  | ||||||
|             </div> |             </div> | ||||||
|         </div> |         </div> | ||||||
|      |  | ||||||
|         <span class="bx bx-x icon-action search-option-del"></span> |         <span class="bx bx-x icon-action search-option-del"></span> | ||||||
|     </td> |     </td> | ||||||
| </tr>`; | </tr>`; | ||||||
|   | |||||||
| @@ -1,20 +1,19 @@ | |||||||
| import AbstractSearchOption from "./abstract_search_option.js"; | import AbstractSearchOption from "./abstract_search_option.js"; | ||||||
|  | import { t } from "../../services/i18n.js"; | ||||||
|  |  | ||||||
| const TPL = ` | const TPL = ` | ||||||
| <tr data-search-option-conf="fastSearch"> | <tr data-search-option-conf="fastSearch"> | ||||||
|     <td colSpan="2"> |     <td colSpan="2"> | ||||||
|         <span class="bx bx-run"></span> |         <span class="bx bx-run"></span> | ||||||
|  |         ${t('fast_search.fast_search')} | ||||||
|         Fast search |  | ||||||
|     </td> |     </td> | ||||||
|     <td class="button-column"> |     <td class="button-column"> | ||||||
|         <div class="dropdown help-dropdown"> |         <div class="dropdown help-dropdown"> | ||||||
|             <span class="bx bx-help-circle icon-action" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></span> |             <span class="bx bx-help-circle icon-action" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></span> | ||||||
|             <div class="dropdown-menu dropdown-menu-right p-4"> |             <div class="dropdown-menu dropdown-menu-right p-4"> | ||||||
|                 Fast search option disables full text search of note contents which might speed up searching in large databases. |                 ${t('fast_search.description')} | ||||||
|             </div>  |             </div>  | ||||||
|         </div> |         </div> | ||||||
|      |  | ||||||
|         <span class="bx bx-x icon-action search-option-del"></span> |         <span class="bx bx-x icon-action search-option-del"></span> | ||||||
|     </td> |     </td> | ||||||
| </tr>`; | </tr>`; | ||||||
|   | |||||||
| @@ -1,11 +1,11 @@ | |||||||
| import AbstractSearchOption from "./abstract_search_option.js"; | import AbstractSearchOption from "./abstract_search_option.js"; | ||||||
|  | import { t } from "../../services/i18n.js"; | ||||||
|  |  | ||||||
| const TPL = ` | const TPL = ` | ||||||
| <tr data-search-option-conf="includeArchivedNotes"> | <tr data-search-option-conf="includeArchivedNotes"> | ||||||
|     <td colspan="2"> |     <td colspan="2"> | ||||||
|         <span class="bx bx-archive"></span> |         <span class="bx bx-archive"></span> | ||||||
|      |         ${t('include_archived_notes.include_archived_notes')} | ||||||
|         Include archived notes |  | ||||||
|     </td> |     </td> | ||||||
|     <td class="button-column"> |     <td class="button-column"> | ||||||
|         <span class="bx bx-x icon-action search-option-del"></span> |         <span class="bx bx-x icon-action search-option-del"></span> | ||||||
|   | |||||||
| @@ -1,11 +1,11 @@ | |||||||
| import AbstractSearchOption from "./abstract_search_option.js"; | import AbstractSearchOption from "./abstract_search_option.js"; | ||||||
|  | import { t } from "../../services/i18n.js"; | ||||||
|  |  | ||||||
| const TPL = ` | const TPL = ` | ||||||
| <tr data-search-option-conf="limit"> | <tr data-search-option-conf="limit"> | ||||||
|     <td class="title-column"> |     <td class="title-column"> | ||||||
|         <span class="bx bx-stop"></span> |         <span class="bx bx-stop"></span> | ||||||
|      |         ${t('limit.limit')} | ||||||
|         Limit |  | ||||||
|     </td> |     </td> | ||||||
|     <td> |     <td> | ||||||
|         <input name="limit" class="form-control" type="number" min="1" step="1" /> |         <input name="limit" class="form-control" type="number" min="1" step="1" /> | ||||||
| @@ -14,7 +14,7 @@ const TPL = ` | |||||||
|         <div class="dropdown help-dropdown"> |         <div class="dropdown help-dropdown"> | ||||||
|             <span class="bx bx-help-circle icon-action" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></span> |             <span class="bx bx-help-circle icon-action" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></span> | ||||||
|             <div class="dropdown-menu dropdown-menu-right p-4"> |             <div class="dropdown-menu dropdown-menu-right p-4"> | ||||||
|                 Take only first X specified results. |                 ${t('limit.take_first_x_results')} | ||||||
|             </div>  |             </div>  | ||||||
|         </div> |         </div> | ||||||
|      |      | ||||||
|   | |||||||
| @@ -1,33 +1,33 @@ | |||||||
| import AbstractSearchOption from "./abstract_search_option.js"; | import AbstractSearchOption from "./abstract_search_option.js"; | ||||||
|  | import { t } from "../../services/i18n.js"; | ||||||
|  |  | ||||||
| const TPL = ` | const TPL = ` | ||||||
| <tr data-search-option-conf="orderBy"> | <tr data-search-option-conf="orderBy"> | ||||||
|     <td class="title-column"> |     <td class="title-column"> | ||||||
|         <span class="bx bx-arrow-from-top"></span> |         <span class="bx bx-arrow-from-top"></span> | ||||||
|      |         ${t('order_by.order_by')} | ||||||
|         Order by |  | ||||||
|     </td> |     </td> | ||||||
|     <td> |     <td> | ||||||
|         <select name="orderBy" class="form-control w-auto d-inline"> |         <select name="orderBy" class="form-control w-auto d-inline"> | ||||||
|             <option value="relevancy">Relevancy (default)</option> |             <option value="relevancy">${t('order_by.relevancy')}</option> | ||||||
|             <option value="title">Title</option> |             <option value="title">${t('order_by.title')}</option> | ||||||
|             <option value="dateCreated">Date created</option> |             <option value="dateCreated">${t('order_by.date_created')}</option> | ||||||
|             <option value="dateModified">Date of last modification</option> |             <option value="dateModified">${t('order_by.date_modified')}</option> | ||||||
|             <option value="contentSize">Note content size</option> |             <option value="contentSize">${t('order_by.content_size')}</option> | ||||||
|             <option value="contentAndAttachmentsSize">Note content size including attachments</option> |             <option value="contentAndAttachmentsSize">${t('order_by.content_and_attachments_size')}</option> | ||||||
|             <option value="contentAndAttachmentsAndRevisionsSize">Note content size including attachments and revisions</option> |             <option value="contentAndAttachmentsAndRevisionsSize">${t('order_by.content_and_attachments_and_revisions_size')}</option> | ||||||
|             <option value="revisionCount">Number of revisions</option> |             <option value="revisionCount">${t('order_by.revision_count')}</option> | ||||||
|             <option value="childrenCount">Number of children notes</option> |             <option value="childrenCount">${t('order_by.children_count')}</option> | ||||||
|             <option value="parentCount">Number of clones</option> |             <option value="parentCount">${t('order_by.parent_count')}</option> | ||||||
|             <option value="ownedLabelCount">Number of labels</option> |             <option value="ownedLabelCount">${t('order_by.owned_label_count')}</option> | ||||||
|             <option value="ownedRelationCount">Number of relations</option> |             <option value="ownedRelationCount">${t('order_by.owned_relation_count')}</option> | ||||||
|             <option value="targetRelationCount">Number of relations targeting the note</option> |             <option value="targetRelationCount">${t('order_by.target_relation_count')}</option> | ||||||
|             <option value="random">Random order</option> |             <option value="random">${t('order_by.random')}</option> | ||||||
|         </select> |         </select> | ||||||
|          |          | ||||||
|         <select name="orderDirection" class="form-control w-auto d-inline"> |         <select name="orderDirection" class="form-control w-auto d-inline"> | ||||||
|             <option value="asc">Ascending (default)</option> |             <option value="asc">${t('order_by.asc')}</option> | ||||||
|             <option value="desc">Descending</option> |             <option value="desc">${t('order_by.desc')}</option> | ||||||
|         </select> |         </select> | ||||||
|     </td> |     </td> | ||||||
|     <td class="button-column"> |     <td class="button-column"> | ||||||
|   | |||||||
| @@ -1,37 +1,30 @@ | |||||||
| import AbstractSearchOption from "./abstract_search_option.js"; | import AbstractSearchOption from "./abstract_search_option.js"; | ||||||
| import noteAutocompleteService from "../../services/note_autocomplete.js"; | import noteAutocompleteService from "../../services/note_autocomplete.js"; | ||||||
|  | import { t } from "../../services/i18n.js"; | ||||||
|  |  | ||||||
| const TPL = ` | const TPL = ` | ||||||
| <tr> | <tr> | ||||||
|     <td class="title-column"> |     <td class="title-column"> | ||||||
|         Search script:  |         ${t('search_script.title')} | ||||||
|     </td> |     </td> | ||||||
|     <td> |     <td> | ||||||
|         <div class="input-group"> |         <div class="input-group"> | ||||||
|             <input class="search-script form-control" placeholder="search for note by its name"> |             <input class="search-script form-control" placeholder="${t('search_script.placeholder')}"> | ||||||
|         </div> |         </div> | ||||||
|     </td> |     </td> | ||||||
|     <td class="button-column"> |     <td class="button-column"> | ||||||
|         <div class="dropdown help-dropdown"> |         <div class="dropdown help-dropdown"> | ||||||
|           <span class="bx bx-help-circle icon-action" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></span> |           <span class="bx bx-help-circle icon-action" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></span> | ||||||
|           <div class="dropdown-menu dropdown-menu-right p-4"> |           <div class="dropdown-menu dropdown-menu-right p-4"> | ||||||
|             <p>Search script allows to define search results by running a script. This provides maximal flexibility when standard search doesn't suffice.</p> |             <p>${t('search_script.description1')}</p> | ||||||
|              |              | ||||||
|             <p>Search script must be of type "code" and subtype "JavaScript backend". The script receives  needs to return an array of noteIds or notes.</p> |             <p>${t('search_script.description2')}</p> | ||||||
|              |              | ||||||
|             <p>See this example:</p> |             <p>${t('search_script.example_title')}</p> | ||||||
|              |              | ||||||
|             <pre> |             <pre>${t('search_script.example_code')}</pre> | ||||||
| // 1. prefiltering using standard search |  | ||||||
| const candidateNotes = api.searchForNotes("#journal");  |  | ||||||
|  |  | ||||||
| // 2. applying custom search criteria |             <p>${t('search_script.note')}</p> | ||||||
| const matchedNotes = candidateNotes |  | ||||||
|     .filter(note => note.title.match(/[0-9]{1,2}\. ?[0-9]{1,2}\. ?[0-9]{4}\/)); |  | ||||||
|  |  | ||||||
| return matchedNotes;</pre> |  | ||||||
|  |  | ||||||
|             <p>Note that search script and search string can't be combined with each other.</p> |  | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|          |          | ||||||
|   | |||||||
| @@ -3,27 +3,28 @@ import SpacedUpdate from "../../services/spaced_update.js"; | |||||||
| import server from "../../services/server.js"; | import server from "../../services/server.js"; | ||||||
| import shortcutService from "../../services/shortcuts.js"; | import shortcutService from "../../services/shortcuts.js"; | ||||||
| import appContext from "../../components/app_context.js"; | import appContext from "../../components/app_context.js"; | ||||||
|  | import { t } from "../../services/i18n.js"; | ||||||
|  |  | ||||||
| const TPL = ` | const TPL = ` | ||||||
| <tr> | <tr> | ||||||
|     <td class="title-column">Search string:</td> |     <td class="title-column">${t('search_string.title_column')}</td> | ||||||
|     <td> |     <td> | ||||||
|         <textarea class="form-control search-string" placeholder="fulltext keywords, #tag = value ..."></textarea> |         <textarea class="form-control search-string" placeholder="${t('search_string.placeholder')}"></textarea> | ||||||
|     </td> |     </td> | ||||||
|     <td class="button-column"> |     <td class="button-column"> | ||||||
|         <div class="dropdown help-dropdown"> |         <div class="dropdown help-dropdown"> | ||||||
|           <span class="bx bx-help-circle icon-action" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></span> |           <span class="bx bx-help-circle icon-action" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></span> | ||||||
|           <div class="dropdown-menu dropdown-menu-right p-4"> |           <div class="dropdown-menu dropdown-menu-right p-4"> | ||||||
|             <strong>Search syntax</strong> - also see <button class="btn btn-sm" type="button" data-help-page="Search">complete help on search syntax</button> |             <strong>${t('search_string.search_syntax')}</strong> - ${t('search_string.also_see')} <button class="btn btn-sm" type="button" data-help-page="Search">${t('search_string.complete_help')}</button> | ||||||
|             <p> |             <p> | ||||||
|             <ul> |             <ul> | ||||||
|                 <li>Just enter any text for full text search</li> |                 <li>${t('search_string.full_text_search')}</li> | ||||||
|                 <li><code>#abc</code> - returns notes with label abc</li> |                 <li><code>#abc</code> - ${t('search_string.label_abc')}</li> | ||||||
|                 <li><code>#year = 2019</code> - matches notes with label <code>year</code> having value <code>2019</code></li> |                 <li><code>#year = 2019</code> - ${t('search_string.label_year')}</li> | ||||||
|                 <li><code>#rock #pop</code> - matches notes which have both <code>rock</code> and <code>pop</code> labels</li> |                 <li><code>#rock #pop</code> - ${t('search_string.label_rock_pop')}</li> | ||||||
|                 <li><code>#rock or #pop</code> - only one of the labels must be present</li> |                 <li><code>#rock or #pop</code> - ${t('search_string.label_rock_or_pop')}</li> | ||||||
|                 <li><code>#year <= 2000</code> - numerical comparison (also >, >=, <).</li> |                 <li><code>#year <= 2000</code> - ${t('search_string.label_year_comparison')}</li> | ||||||
|                 <li><code>note.dateCreated >= MONTH-1</code> - notes created in the last month</li> |                 <li><code>note.dateCreated >= MONTH-1</code> - ${t('search_string.label_date_created')}</li> | ||||||
|             </ul> |             </ul> | ||||||
|             </p> |             </p> | ||||||
|           </div> |           </div> | ||||||
| @@ -76,7 +77,7 @@ export default class SearchString extends AbstractSearchOption { | |||||||
|     showSearchErrorEvent({error}) { |     showSearchErrorEvent({error}) { | ||||||
|         this.$searchString.tooltip({ |         this.$searchString.tooltip({ | ||||||
|             trigger: 'manual', |             trigger: 'manual', | ||||||
|             title: `Search error: ${error}`, |             title: `${t('search_string.error', {error})}`, | ||||||
|             placement: 'bottom' |             placement: 'bottom' | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -712,7 +712,7 @@ | |||||||
|         "modified": "修改时间", |         "modified": "修改时间", | ||||||
|         "type": "类型", |         "type": "类型", | ||||||
|         "note_size": "笔记大小", |         "note_size": "笔记大小", | ||||||
|         "note_size_info": "笔记大小提供了该笔记存储需求的粗略估计。它考虑了笔记的内容及其笔记修订的内容。", |         "note_size_info": "笔记大小提供了该笔记存储需求的粗略估计。它考虑了笔记的内容及其笔记历史的内容。", | ||||||
|         "calculate": "计算", |         "calculate": "计算", | ||||||
|         "subtree_size": "(子树大小: {{size}}, 共计 {{count}} 个笔记)", |         "subtree_size": "(子树大小: {{size}}, 共计 {{count}} 个笔记)", | ||||||
|         "title": "笔记信息" |         "title": "笔记信息" | ||||||
| @@ -780,5 +780,78 @@ | |||||||
|     "similar_notes": { |     "similar_notes": { | ||||||
|         "title": "相似笔记", |         "title": "相似笔记", | ||||||
|         "no_similar_notes_found": "未找到相似的笔记。" |         "no_similar_notes_found": "未找到相似的笔记。" | ||||||
|  |     }, | ||||||
|  |     "abstract_search_option": { | ||||||
|  |         "remove_this_search_option": "删除此搜索选项", | ||||||
|  |         "failed_rendering": "渲染搜索选项失败:{{dto}},错误信息:{{error}},堆栈:{{stack}}" | ||||||
|  |     }, | ||||||
|  |     "ancestor": { | ||||||
|  |         "label": "祖先", | ||||||
|  |         "placeholder": "按名称搜索笔记", | ||||||
|  |         "depth_label": "深度", | ||||||
|  |         "depth_doesnt_matter": "任意", | ||||||
|  |         "depth_eq": "正好是 {{count}}", | ||||||
|  |         "direct_children": "直接子代", | ||||||
|  |         "depth_gt": "大于 {{count}}", | ||||||
|  |         "depth_lt": "小于 {{count}}" | ||||||
|  |     }, | ||||||
|  |     "debug": { | ||||||
|  |         "debug": "调试", | ||||||
|  |         "debug_info": "调试将打印额外的调试信息到控制台,以帮助调试复杂的查询。", | ||||||
|  |         "access_info": "要访问调试信息,请执行查询并点击左上角的“显示后端日志”。" | ||||||
|  |     }, | ||||||
|  |     "fast_search": { | ||||||
|  |         "fast_search": "快速搜索", | ||||||
|  |         "description": "快速搜索选项禁用笔记内容的全文搜索,这可能会加快在大型数据库中的搜索速度。" | ||||||
|  |     }, | ||||||
|  |     "include_archived_notes": { | ||||||
|  |         "include_archived_notes": "包括已归档的笔记" | ||||||
|  |     }, | ||||||
|  |     "limit": { | ||||||
|  |         "limit": "限制", | ||||||
|  |         "take_first_x_results": "仅取前X个指定结果。" | ||||||
|  |     }, | ||||||
|  |     "order_by": { | ||||||
|  |         "order_by": "排序依据", | ||||||
|  |         "relevancy": "相关性(默认)", | ||||||
|  |         "title": "标题", | ||||||
|  |         "date_created": "创建日期", | ||||||
|  |         "date_modified": "最后修改日期", | ||||||
|  |         "content_size": "笔记内容大小", | ||||||
|  |         "content_and_attachments_size": "笔记内容大小(包括附件)", | ||||||
|  |         "content_and_attachments_and_revisions_size": "笔记内容大小(包括附件和笔记历史)", | ||||||
|  |         "revision_count": "历史数量", | ||||||
|  |         "children_count": "子笔记数量", | ||||||
|  |         "parent_count": "克隆数量", | ||||||
|  |         "owned_label_count": "标签数量", | ||||||
|  |         "owned_relation_count": "关系数量", | ||||||
|  |         "target_relation_count": "指向笔记的关系数量", | ||||||
|  |         "random": "随机顺序", | ||||||
|  |         "asc": "升序(默认)", | ||||||
|  |         "desc": "降序" | ||||||
|  |     }, | ||||||
|  |     "search_script": { | ||||||
|  |         "title": "搜索脚本:", | ||||||
|  |         "placeholder": "按名称搜索笔记", | ||||||
|  |         "description1": "搜索脚本允许通过运行脚本来定义搜索结果。这在标准搜索不足时提供了最大的灵活性。", | ||||||
|  |         "description2": "搜索脚本必须是类型为\"代码\"和子类型为\"JavaScript后端\"。脚本需要返回一个noteIds或notes数组。", | ||||||
|  |         "example_title": "请看这个例子:", | ||||||
|  |         "example_code": "// 1. 使用标准搜索进行预过滤\nconst candidateNotes = api.searchForNotes(\"#journal\"); \n\n// 2. 应用自定义搜索条件\nconst matchedNotes = candidateNotes\n    .filter(note => note.title.match(/[0-9]{1,2}\\. ?[0-9]{1,2}\\. ?[0-9]{4}/));\n\nreturn matchedNotes;", | ||||||
|  |         "note": "注意,搜索脚本和搜索字符串不能相互结合使用。" | ||||||
|  |     }, | ||||||
|  |     "search_string": { | ||||||
|  |         "title_column": "搜索字符串:", | ||||||
|  |         "placeholder": "全文关键词,#标签 = 值 ...", | ||||||
|  |         "search_syntax": "搜索语法", | ||||||
|  |         "also_see": "另见", | ||||||
|  |         "complete_help": "完整的搜索语法帮助", | ||||||
|  |         "full_text_search": "只需输入任何文本进行全文搜索", | ||||||
|  |         "label_abc": "返回带有标签abc的笔记", | ||||||
|  |         "label_year": "匹配带有标签年份且值为2019的笔记", | ||||||
|  |         "label_rock_pop": "匹配同时具有rock和pop标签的笔记", | ||||||
|  |         "label_rock_or_pop": "只需一个标签存在即可", | ||||||
|  |         "label_year_comparison": "数字比较(也包括>,>=,<)。", | ||||||
|  |         "label_date_created": "上个月创建的笔记", | ||||||
|  |         "error": "搜索错误:{{error}}" | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -781,5 +781,78 @@ | |||||||
|     "similar_notes": { |     "similar_notes": { | ||||||
|         "title": "Similar Notes", |         "title": "Similar Notes", | ||||||
|         "no_similar_notes_found": "No similar notes found." |         "no_similar_notes_found": "No similar notes found." | ||||||
|  |     }, | ||||||
|  |     "abstract_search_option": { | ||||||
|  |         "remove_this_search_option": "Remove this search option", | ||||||
|  |         "failed_rendering": "Failed rendering search option: {{dto}} with error: {{error}} {{stack}}" | ||||||
|  |     }, | ||||||
|  |     "ancestor": { | ||||||
|  |         "label": "Ancestor", | ||||||
|  |         "placeholder": "search for note by its name", | ||||||
|  |         "depth_label": "depth", | ||||||
|  |         "depth_doesnt_matter": "doesn't matter", | ||||||
|  |         "depth_eq": "is exactly {{count}}", | ||||||
|  |         "direct_children": "direct children", | ||||||
|  |         "depth_gt": "is greater than {{count}}", | ||||||
|  |         "depth_lt": "is less than {{count}}" | ||||||
|  |     }, | ||||||
|  |     "debug": { | ||||||
|  |         "debug": "Debug", | ||||||
|  |         "debug_info": "Debug will print extra debugging information into the console to aid in debugging complex queries.", | ||||||
|  |         "access_info": "To access the debug information, execute query and click on \"Show backend log\" in top left corner." | ||||||
|  |     }, | ||||||
|  |     "fast_search": { | ||||||
|  |         "fast_search": "Fast search", | ||||||
|  |         "description": "Fast search option disables full text search of note contents which might speed up searching in large databases." | ||||||
|  |     }, | ||||||
|  |     "include_archived_notes": { | ||||||
|  |         "include_archived_notes": "Include archived notes" | ||||||
|  |     }, | ||||||
|  |     "limit": { | ||||||
|  |         "limit": "Limit", | ||||||
|  |         "take_first_x_results": "Take only first X specified results." | ||||||
|  |     }, | ||||||
|  |     "order_by": { | ||||||
|  |         "order_by": "Order by", | ||||||
|  |         "relevancy": "Relevancy (default)", | ||||||
|  |         "title": "Title", | ||||||
|  |         "date_created": "Date created", | ||||||
|  |         "date_modified": "Date of last modification", | ||||||
|  |         "content_size": "Note content size", | ||||||
|  |         "content_and_attachments_size": "Note content size including attachments", | ||||||
|  |         "content_and_attachments_and_revisions_size": "Note content size including attachments and revisions", | ||||||
|  |         "revision_count": "Number of revisions", | ||||||
|  |         "children_count": "Number of children notes", | ||||||
|  |         "parent_count": "Number of clones", | ||||||
|  |         "owned_label_count": "Number of labels", | ||||||
|  |         "owned_relation_count": "Number of relations", | ||||||
|  |         "target_relation_count": "Number of relations targeting the note", | ||||||
|  |         "random": "Random order", | ||||||
|  |         "asc": "Ascending (default)", | ||||||
|  |         "desc": "Descending" | ||||||
|  |     }, | ||||||
|  |     "search_script": { | ||||||
|  |         "title": "Search script:", | ||||||
|  |         "placeholder": "search for note by its name", | ||||||
|  |         "description1": "Search script allows to define search results by running a script. This provides maximal flexibility when standard search doesn't suffice.", | ||||||
|  |         "description2": "Search script must be of type \"code\" and subtype \"JavaScript backend\". The script needs to return an array of noteIds or notes.", | ||||||
|  |         "example_title": "See this example:", | ||||||
|  |         "example_code": "// 1. prefiltering using standard search\nconst candidateNotes = api.searchForNotes(\"#journal\"); \n\n// 2. applying custom search criteria\nconst matchedNotes = candidateNotes\n    .filter(note => note.title.match(/[0-9]{1,2}\\. ?[0-9]{1,2}\\. ?[0-9]{4}/));\n\nreturn matchedNotes;", | ||||||
|  |         "note": "Note that search script and search string can't be combined with each other." | ||||||
|  |     }, | ||||||
|  |     "search_string": { | ||||||
|  |         "title_column": "Search string:", | ||||||
|  |         "placeholder": "fulltext keywords, #tag = value ...", | ||||||
|  |         "search_syntax": "Search syntax", | ||||||
|  |         "also_see": "also see", | ||||||
|  |         "complete_help": "complete help on search syntax", | ||||||
|  |         "full_text_search": "Just enter any text for full text search", | ||||||
|  |         "label_abc": "returns notes with label abc", | ||||||
|  |         "label_year": "matches notes with label year having value 2019", | ||||||
|  |         "label_rock_pop": "matches notes which have both rock and pop labels", | ||||||
|  |         "label_rock_or_pop": "only one of the labels must be present", | ||||||
|  |         "label_year_comparison": "numerical comparison (also >, >=, <).", | ||||||
|  |         "label_date_created": "notes created in the last month", | ||||||
|  |         "error": "Search error: {{error}}" | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user