Merge pull request #2286 from splitbrain/betterCoreSearch
Better core search
This commit is contained in:
commit
5c0b2e60a2
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
|
||||
// must be run within Dokuwiki
|
||||
if (!defined('DOKU_INC')) {
|
||||
die();
|
||||
}
|
||||
|
||||
/**
|
||||
* Test cases for the link index
|
||||
*
|
||||
* @author Michael Große <grosse@cosmocode.de>
|
||||
*
|
||||
* @group fulltext
|
||||
*/
|
||||
class fulltext_query_test extends DokuWikiTest
|
||||
{
|
||||
public function test_parse_query()
|
||||
{
|
||||
$Indexer = idx_get_indexer();
|
||||
$inputQuery = 'test -baz "foo bar" @abc ^def';
|
||||
|
||||
$actualParsedQuery = ft_queryParser($Indexer, $inputQuery);
|
||||
|
||||
$expectedParsedQuery = [
|
||||
'query' => 'test -baz "foo bar" @abc ^def',
|
||||
'parsed_str' => '(W+:test)ANDNOT((W-:baz))AND((W_:foo)AND(W_:bar)AND(P+:foo bar))AND(N+:abc)ANDNOT(N-:def)',
|
||||
'parsed_ary' => [
|
||||
'W+:test',
|
||||
'W-:baz',
|
||||
'NOT',
|
||||
'AND',
|
||||
'W_:foo',
|
||||
'W_:bar',
|
||||
'AND',
|
||||
'P+:foo bar',
|
||||
'AND',
|
||||
'AND',
|
||||
'N+:abc',
|
||||
'AND',
|
||||
'N-:def',
|
||||
'NOT',
|
||||
'AND',
|
||||
],
|
||||
'words' => [
|
||||
'test',
|
||||
'baz',
|
||||
'foo',
|
||||
'bar',
|
||||
],
|
||||
'highlight' => [
|
||||
'test',
|
||||
'foo bar',
|
||||
],
|
||||
'and' => [
|
||||
'test',
|
||||
],
|
||||
'phrases' => [
|
||||
'foo bar',
|
||||
],
|
||||
'ns' => [
|
||||
'abc',
|
||||
],
|
||||
'notns' => [
|
||||
'def',
|
||||
],
|
||||
'not' => [
|
||||
'baz',
|
||||
],
|
||||
];
|
||||
$this->assertEquals($expectedParsedQuery, $actualParsedQuery);
|
||||
}
|
||||
|
||||
public function test_unparse_query()
|
||||
{
|
||||
$input = [
|
||||
'and' => [
|
||||
'test',
|
||||
],
|
||||
'not' => [
|
||||
'baz'
|
||||
],
|
||||
'phrases' => [
|
||||
'foo bar',
|
||||
],
|
||||
'ns' => [
|
||||
'abc',
|
||||
],
|
||||
'notns' => [
|
||||
'def'
|
||||
],
|
||||
];
|
||||
|
||||
$actualQuery = ft_queryUnparser_simple(
|
||||
$input['and'],
|
||||
$input['not'],
|
||||
$input['phrases'],
|
||||
$input['ns'],
|
||||
$input['notns']
|
||||
);
|
||||
|
||||
$expectedQuery = 'test -baz "foo bar" @abc ^def';
|
||||
$this->assertEquals($expectedQuery, $actualQuery);
|
||||
}
|
||||
}
|
|
@ -156,6 +156,8 @@ $conf['broken_iua'] = 0; //Platform with broken ignore_user_abor
|
|||
$conf['xsendfile'] = 0; //Use X-Sendfile (1 = lighttpd, 2 = standard)
|
||||
$conf['renderer_xhtml'] = 'xhtml'; //renderer to use for main page generation
|
||||
$conf['readdircache'] = 0; //time cache in second for the readdir operation, 0 to deactivate.
|
||||
$conf['search_limit_to_first_ns'] = 0; //Option to limit the search to the current X namespaces
|
||||
$conf['search_default_fragment_behaviour'] = 'exact'; // Option to specify the default fragment search behavior
|
||||
|
||||
/* Network Settings */
|
||||
$conf['dnslookups'] = 1; //disable to disallow IP to hostname lookups
|
||||
|
|
2
doku.php
2
doku.php
|
@ -35,7 +35,7 @@ require_once(DOKU_INC.'inc/init.php');
|
|||
|
||||
//import variables
|
||||
$INPUT->set('id', str_replace("\xC2\xAD", '', $INPUT->str('id'))); //soft-hyphen
|
||||
$QUERY = trim($INPUT->str('id'));
|
||||
$QUERY = trim($INPUT->str('q'));
|
||||
$ID = getID();
|
||||
|
||||
$REV = $INPUT->int('rev');
|
||||
|
|
|
@ -13,6 +13,10 @@ use dokuwiki\Action\Exception\ActionAbort;
|
|||
*/
|
||||
class Search extends AbstractAction {
|
||||
|
||||
protected $pageLookupResults = array();
|
||||
protected $fullTextResults = array();
|
||||
protected $highlight = array();
|
||||
|
||||
/** @inheritdoc */
|
||||
public function minimumPermission() {
|
||||
return AUTH_NONE;
|
||||
|
@ -25,13 +29,107 @@ class Search extends AbstractAction {
|
|||
*/
|
||||
public function checkPermissions() {
|
||||
parent::checkPermissions();
|
||||
global $QUERY;
|
||||
}
|
||||
|
||||
public function preProcess()
|
||||
{
|
||||
global $QUERY, $ID, $conf, $INPUT;
|
||||
$s = cleanID($QUERY);
|
||||
if($s === '') throw new ActionAbort();
|
||||
|
||||
if ($ID !== $conf['start'] && !$INPUT->has('q')) {
|
||||
parse_str($INPUT->server->str('QUERY_STRING'), $urlParts);
|
||||
$urlParts['q'] = $urlParts['id'];
|
||||
$urlParts['id'] = $conf['start'];
|
||||
$url = DOKU_URL . DOKU_SCRIPT . '?' . http_build_query($urlParts, null, '&');
|
||||
send_redirect($url);
|
||||
}
|
||||
|
||||
if ($s === '') throw new ActionAbort();
|
||||
$this->adjustGlobalQuery();
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function tplContent() {
|
||||
html_search();
|
||||
public function tplContent()
|
||||
{
|
||||
$this->execute();
|
||||
|
||||
$search = new \dokuwiki\Ui\Search($this->pageLookupResults, $this->fullTextResults, $this->highlight);
|
||||
$search->show();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* run the search
|
||||
*/
|
||||
protected function execute()
|
||||
{
|
||||
global $INPUT, $QUERY;
|
||||
$after = $INPUT->str('min');
|
||||
$before = $INPUT->str('max');
|
||||
$this->pageLookupResults = ft_pageLookup($QUERY, true, useHeading('navigation'), $after, $before);
|
||||
$this->fullTextResults = ft_pageSearch($QUERY, $highlight, $INPUT->str('srt'), $after, $before);
|
||||
$this->highlight = $highlight;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adjust the global query accordingly to the config search_limit_to_first_ns and search_default_fragment_behaviour
|
||||
*
|
||||
* This will only do something if the search didn't originate from the form on the searchpage itself
|
||||
*/
|
||||
protected function adjustGlobalQuery()
|
||||
{
|
||||
global $conf, $INPUT, $QUERY, $ID;
|
||||
|
||||
if ($INPUT->bool('sf')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$Indexer = idx_get_indexer();
|
||||
$parsedQuery = ft_queryParser($Indexer, $QUERY);
|
||||
|
||||
if (empty($parsedQuery['ns']) && empty($parsedQuery['notns'])) {
|
||||
if ($conf['search_limit_to_first_ns'] > 0) {
|
||||
if (getNS($ID) !== false) {
|
||||
$nsParts = explode(':', getNS($ID));
|
||||
$ns = implode(':', array_slice($nsParts, 0, $conf['search_limit_to_first_ns']));
|
||||
$QUERY .= " @$ns";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($conf['search_default_fragment_behaviour'] !== 'exact') {
|
||||
if (empty(array_diff($parsedQuery['words'], $parsedQuery['and']))) {
|
||||
if (strpos($QUERY, '*') === false) {
|
||||
$queryParts = explode(' ', $QUERY);
|
||||
$queryParts = array_map(function ($part) {
|
||||
if (strpos($part, '@') === 0) {
|
||||
return $part;
|
||||
}
|
||||
if (strpos($part, 'ns:') === 0) {
|
||||
return $part;
|
||||
}
|
||||
if (strpos($part, '^') === 0) {
|
||||
return $part;
|
||||
}
|
||||
if (strpos($part, '-ns:') === 0) {
|
||||
return $part;
|
||||
}
|
||||
|
||||
global $conf;
|
||||
|
||||
if ($conf['search_default_fragment_behaviour'] === 'starts_with') {
|
||||
return $part . '*';
|
||||
}
|
||||
if ($conf['search_default_fragment_behaviour'] === 'ends_with') {
|
||||
return '*' . $part;
|
||||
}
|
||||
|
||||
return '*' . $part . '*';
|
||||
|
||||
}, $queryParts);
|
||||
$QUERY = implode(' ', $queryParts);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,8 +24,9 @@ class Form extends Element {
|
|||
* Creates a new, empty form with some default attributes
|
||||
*
|
||||
* @param array $attributes
|
||||
* @param bool $unsafe if true, then the security token is ommited
|
||||
*/
|
||||
public function __construct($attributes = array()) {
|
||||
public function __construct($attributes = array(), $unsafe = false) {
|
||||
global $ID;
|
||||
|
||||
parent::__construct('form', $attributes);
|
||||
|
@ -49,7 +50,9 @@ class Form extends Element {
|
|||
}
|
||||
|
||||
// add the security token by default
|
||||
$this->setHiddenField('sectok', getSecurityToken());
|
||||
if (!$unsafe) {
|
||||
$this->setHiddenField('sectok', getSecurityToken());
|
||||
}
|
||||
|
||||
// identify this as a new form based form in HTML
|
||||
$this->addClass('doku_form');
|
||||
|
@ -78,6 +81,20 @@ class Form extends Element {
|
|||
return count($this->elements);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the position of the element in the form or false if it is not in the form
|
||||
*
|
||||
* Warning: This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE. Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.
|
||||
*
|
||||
* @param Element $element
|
||||
*
|
||||
* @return false|int
|
||||
*/
|
||||
public function getElementPosition(Element $element)
|
||||
{
|
||||
return array_search($element, $this->elements, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a reference to the element at a position.
|
||||
* A position out-of-bounds will return either the
|
||||
|
|
|
@ -18,7 +18,7 @@ class Edit extends AbstractItem {
|
|||
|
||||
parent::__construct();
|
||||
|
||||
if($ACT == 'show' || $ACT == 'search') {
|
||||
if($ACT === 'show') {
|
||||
$this->method = 'post';
|
||||
if($INFO['writable']) {
|
||||
$this->accesskey = 'e';
|
||||
|
|
|
@ -0,0 +1,636 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Ui;
|
||||
|
||||
use \dokuwiki\Form\Form;
|
||||
|
||||
class Search extends Ui
|
||||
{
|
||||
protected $query;
|
||||
protected $parsedQuery;
|
||||
protected $searchState;
|
||||
protected $pageLookupResults = array();
|
||||
protected $fullTextResults = array();
|
||||
protected $highlight = array();
|
||||
|
||||
/**
|
||||
* Search constructor.
|
||||
*
|
||||
* @param array $pageLookupResults pagename lookup results in the form [pagename => pagetitle]
|
||||
* @param array $fullTextResults fulltext search results in the form [pagename => #hits]
|
||||
* @param array $highlight array of strings to be highlighted
|
||||
*/
|
||||
public function __construct(array $pageLookupResults, array $fullTextResults, $highlight)
|
||||
{
|
||||
global $QUERY;
|
||||
$Indexer = idx_get_indexer();
|
||||
|
||||
$this->query = $QUERY;
|
||||
$this->parsedQuery = ft_queryParser($Indexer, $QUERY);
|
||||
$this->searchState = new SearchState($this->parsedQuery);
|
||||
|
||||
$this->pageLookupResults = $pageLookupResults;
|
||||
$this->fullTextResults = $fullTextResults;
|
||||
$this->highlight = $highlight;
|
||||
}
|
||||
|
||||
/**
|
||||
* display the search result
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function show()
|
||||
{
|
||||
$searchHTML = '';
|
||||
|
||||
$searchHTML .= $this->getSearchIntroHTML($this->query);
|
||||
|
||||
$searchHTML .= $this->getSearchFormHTML($this->query);
|
||||
|
||||
$searchHTML .= $this->getPageLookupHTML($this->pageLookupResults);
|
||||
|
||||
$searchHTML .= $this->getFulltextResultsHTML($this->fullTextResults, $this->highlight);
|
||||
|
||||
echo $searchHTML;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a form which can be used to adjust/refine the search
|
||||
*
|
||||
* @param string $query
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function getSearchFormHTML($query)
|
||||
{
|
||||
global $lang, $ID, $INPUT;
|
||||
|
||||
$searchForm = (new Form(['method' => 'get'], true))->addClass('search-results-form');
|
||||
$searchForm->setHiddenField('do', 'search');
|
||||
$searchForm->setHiddenField('id', $ID);
|
||||
$searchForm->setHiddenField('sf', '1');
|
||||
if ($INPUT->has('min')) {
|
||||
$searchForm->setHiddenField('min', $INPUT->str('min'));
|
||||
}
|
||||
if ($INPUT->has('max')) {
|
||||
$searchForm->setHiddenField('max', $INPUT->str('max'));
|
||||
}
|
||||
if ($INPUT->has('srt')) {
|
||||
$searchForm->setHiddenField('srt', $INPUT->str('srt'));
|
||||
}
|
||||
$searchForm->addFieldsetOpen()->addClass('search-form');
|
||||
$searchForm->addTextInput('q')->val($query)->useInput(false);
|
||||
$searchForm->addButton('', $lang['btn_search'])->attr('type', 'submit');
|
||||
|
||||
$this->addSearchAssistanceElements($searchForm);
|
||||
|
||||
$searchForm->addFieldsetClose();
|
||||
|
||||
trigger_event('FORM_SEARCH_OUTPUT', $searchForm);
|
||||
|
||||
return $searchForm->toHTML();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add elements to adjust how the results are sorted
|
||||
*
|
||||
* @param Form $searchForm
|
||||
*/
|
||||
protected function addSortTool(Form $searchForm)
|
||||
{
|
||||
global $INPUT, $lang;
|
||||
|
||||
$options = [
|
||||
'hits' => [
|
||||
'label' => $lang['search_sort_by_hits'],
|
||||
'sort' => '',
|
||||
],
|
||||
'mtime' => [
|
||||
'label' => $lang['search_sort_by_mtime'],
|
||||
'sort' => 'mtime',
|
||||
],
|
||||
];
|
||||
$activeOption = 'hits';
|
||||
|
||||
if ($INPUT->str('srt') === 'mtime') {
|
||||
$activeOption = 'mtime';
|
||||
}
|
||||
|
||||
$searchForm->addTagOpen('div')->addClass('toggle')->attr('aria-haspopup', 'true');
|
||||
// render current
|
||||
$currentWrapper = $searchForm->addTagOpen('div')->addClass('current');
|
||||
if ($activeOption !== 'hits') {
|
||||
$currentWrapper->addClass('changed');
|
||||
}
|
||||
$searchForm->addHTML($options[$activeOption]['label']);
|
||||
$searchForm->addTagClose('div');
|
||||
|
||||
// render options list
|
||||
$searchForm->addTagOpen('ul')->attr('aria-expanded', 'false');
|
||||
|
||||
foreach ($options as $key => $option) {
|
||||
$listItem = $searchForm->addTagOpen('li');
|
||||
|
||||
if ($key === $activeOption) {
|
||||
$listItem->addClass('active');
|
||||
$searchForm->addHTML($option['label']);
|
||||
} else {
|
||||
$link = $this->searchState->withSorting($option['sort'])->getSearchLink($option['label']);
|
||||
$searchForm->addHTML($link);
|
||||
}
|
||||
$searchForm->addTagClose('li');
|
||||
}
|
||||
$searchForm->addTagClose('ul');
|
||||
|
||||
$searchForm->addTagClose('div');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the query is simple enough to modify its namespace limitations without breaking the rest of the query
|
||||
*
|
||||
* @param array $parsedQuery
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function isNamespaceAssistanceAvailable(array $parsedQuery) {
|
||||
if (preg_match('/[\(\)\|]/', $parsedQuery['query']) === 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the query is simple enough to modify the fragment search behavior without breaking the rest of the query
|
||||
*
|
||||
* @param array $parsedQuery
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function isFragmentAssistanceAvailable(array $parsedQuery) {
|
||||
if (preg_match('/[\(\)\|]/', $parsedQuery['query']) === 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!empty($parsedQuery['phrases'])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the elements to be used for search assistance
|
||||
*
|
||||
* @param Form $searchForm
|
||||
*/
|
||||
protected function addSearchAssistanceElements(Form $searchForm)
|
||||
{
|
||||
$searchForm->addTagOpen('div')
|
||||
->addClass('advancedOptions')
|
||||
->attr('style', 'display: none;')
|
||||
->attr('aria-hidden', 'true');
|
||||
|
||||
$this->addFragmentBehaviorLinks($searchForm);
|
||||
$this->addNamespaceSelector($searchForm);
|
||||
$this->addDateSelector($searchForm);
|
||||
$this->addSortTool($searchForm);
|
||||
|
||||
$searchForm->addTagClose('div');
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the elements to adjust the fragment search behavior
|
||||
*
|
||||
* @param Form $searchForm
|
||||
*/
|
||||
protected function addFragmentBehaviorLinks(Form $searchForm)
|
||||
{
|
||||
if (!$this->isFragmentAssistanceAvailable($this->parsedQuery)) {
|
||||
return;
|
||||
}
|
||||
global $lang;
|
||||
|
||||
$options = [
|
||||
'exact' => [
|
||||
'label' => $lang['search_exact_match'],
|
||||
'and' => array_map(function ($term) {
|
||||
return trim($term, '*');
|
||||
}, $this->parsedQuery['and']),
|
||||
'not' => array_map(function ($term) {
|
||||
return trim($term, '*');
|
||||
}, $this->parsedQuery['not']),
|
||||
],
|
||||
'starts' => [
|
||||
'label' => $lang['search_starts_with'],
|
||||
'and' => array_map(function ($term) {
|
||||
return trim($term, '*') . '*';
|
||||
}, $this->parsedQuery['and']),
|
||||
'not' => array_map(function ($term) {
|
||||
return trim($term, '*') . '*';
|
||||
}, $this->parsedQuery['not']),
|
||||
],
|
||||
'ends' => [
|
||||
'label' => $lang['search_ends_with'],
|
||||
'and' => array_map(function ($term) {
|
||||
return '*' . trim($term, '*');
|
||||
}, $this->parsedQuery['and']),
|
||||
'not' => array_map(function ($term) {
|
||||
return '*' . trim($term, '*');
|
||||
}, $this->parsedQuery['not']),
|
||||
],
|
||||
'contains' => [
|
||||
'label' => $lang['search_contains'],
|
||||
'and' => array_map(function ($term) {
|
||||
return '*' . trim($term, '*') . '*';
|
||||
}, $this->parsedQuery['and']),
|
||||
'not' => array_map(function ($term) {
|
||||
return '*' . trim($term, '*') . '*';
|
||||
}, $this->parsedQuery['not']),
|
||||
]
|
||||
];
|
||||
|
||||
// detect current
|
||||
$activeOption = 'custom';
|
||||
foreach ($options as $key => $option) {
|
||||
if ($this->parsedQuery['and'] === $option['and']) {
|
||||
$activeOption = $key;
|
||||
}
|
||||
}
|
||||
if ($activeOption === 'custom') {
|
||||
$options = array_merge(['custom' => [
|
||||
'label' => $lang['search_custom_match'],
|
||||
]], $options);
|
||||
}
|
||||
|
||||
$searchForm->addTagOpen('div')->addClass('toggle')->attr('aria-haspopup', 'true');
|
||||
// render current
|
||||
$currentWrapper = $searchForm->addTagOpen('div')->addClass('current');
|
||||
if ($activeOption !== 'exact') {
|
||||
$currentWrapper->addClass('changed');
|
||||
}
|
||||
$searchForm->addHTML($options[$activeOption]['label']);
|
||||
$searchForm->addTagClose('div');
|
||||
|
||||
// render options list
|
||||
$searchForm->addTagOpen('ul')->attr('aria-expanded', 'false');
|
||||
|
||||
foreach ($options as $key => $option) {
|
||||
$listItem = $searchForm->addTagOpen('li');
|
||||
|
||||
if ($key === $activeOption) {
|
||||
$listItem->addClass('active');
|
||||
$searchForm->addHTML($option['label']);
|
||||
} else {
|
||||
$link = $this->searchState
|
||||
->withFragments($option['and'], $option['not'])
|
||||
->getSearchLink($option['label'])
|
||||
;
|
||||
$searchForm->addHTML($link);
|
||||
}
|
||||
$searchForm->addTagClose('li');
|
||||
}
|
||||
$searchForm->addTagClose('ul');
|
||||
|
||||
$searchForm->addTagClose('div');
|
||||
|
||||
// render options list
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the elements for the namespace selector
|
||||
*
|
||||
* @param Form $searchForm
|
||||
*/
|
||||
protected function addNamespaceSelector(Form $searchForm)
|
||||
{
|
||||
if (!$this->isNamespaceAssistanceAvailable($this->parsedQuery)) {
|
||||
return;
|
||||
}
|
||||
|
||||
global $lang;
|
||||
|
||||
$baseNS = empty($this->parsedQuery['ns']) ? '' : $this->parsedQuery['ns'][0];
|
||||
$extraNS = $this->getAdditionalNamespacesFromResults($baseNS);
|
||||
|
||||
$searchForm->addTagOpen('div')->addClass('toggle')->attr('aria-haspopup', 'true');
|
||||
// render current
|
||||
$currentWrapper = $searchForm->addTagOpen('div')->addClass('current');
|
||||
if ($baseNS) {
|
||||
$currentWrapper->addClass('changed');
|
||||
$searchForm->addHTML('@' . $baseNS);
|
||||
} else {
|
||||
$searchForm->addHTML($lang['search_any_ns']);
|
||||
}
|
||||
$searchForm->addTagClose('div');
|
||||
|
||||
// render options list
|
||||
$searchForm->addTagOpen('ul')->attr('aria-expanded', 'false');
|
||||
|
||||
$listItem = $searchForm->addTagOpen('li');
|
||||
if ($baseNS) {
|
||||
$listItem->addClass('active');
|
||||
$link = $this->searchState->withNamespace('')->getSearchLink($lang['search_any_ns']);
|
||||
$searchForm->addHTML($link);
|
||||
} else {
|
||||
$searchForm->addHTML($lang['search_any_ns']);
|
||||
}
|
||||
$searchForm->addTagClose('li');
|
||||
|
||||
foreach ($extraNS as $ns => $count) {
|
||||
$listItem = $searchForm->addTagOpen('li');
|
||||
$label = $ns . ($count ? " <bdi>($count)</bdi>" : '');
|
||||
|
||||
if ($ns === $baseNS) {
|
||||
$listItem->addClass('active');
|
||||
$searchForm->addHTML($label);
|
||||
} else {
|
||||
$link = $this->searchState->withNamespace($ns)->getSearchLink($label);
|
||||
$searchForm->addHTML($link);
|
||||
}
|
||||
$searchForm->addTagClose('li');
|
||||
}
|
||||
$searchForm->addTagClose('ul');
|
||||
|
||||
$searchForm->addTagClose('div');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse the full text results for their top namespaces below the given base namespace
|
||||
*
|
||||
* @param string $baseNS the namespace within which was searched, empty string for root namespace
|
||||
*
|
||||
* @return array an associative array with namespace => #number of found pages, sorted descending
|
||||
*/
|
||||
protected function getAdditionalNamespacesFromResults($baseNS)
|
||||
{
|
||||
$namespaces = [];
|
||||
$baseNSLength = strlen($baseNS);
|
||||
foreach ($this->fullTextResults as $page => $numberOfHits) {
|
||||
$namespace = getNS($page);
|
||||
if (!$namespace) {
|
||||
continue;
|
||||
}
|
||||
if ($namespace === $baseNS) {
|
||||
continue;
|
||||
}
|
||||
$firstColon = strpos((string)$namespace, ':', $baseNSLength + 1) ?: strlen($namespace);
|
||||
$subtopNS = substr($namespace, 0, $firstColon);
|
||||
if (empty($namespaces[$subtopNS])) {
|
||||
$namespaces[$subtopNS] = 0;
|
||||
}
|
||||
$namespaces[$subtopNS] += 1;
|
||||
}
|
||||
ksort($namespaces);
|
||||
arsort($namespaces);
|
||||
return $namespaces;
|
||||
}
|
||||
|
||||
/**
|
||||
* @ToDo: custom date input
|
||||
*
|
||||
* @param Form $searchForm
|
||||
*/
|
||||
protected function addDateSelector(Form $searchForm)
|
||||
{
|
||||
global $INPUT, $lang;
|
||||
|
||||
$options = [
|
||||
'any' => [
|
||||
'before' => false,
|
||||
'after' => false,
|
||||
'label' => $lang['search_any_time'],
|
||||
],
|
||||
'week' => [
|
||||
'before' => false,
|
||||
'after' => '1 week ago',
|
||||
'label' => $lang['search_past_7_days'],
|
||||
],
|
||||
'month' => [
|
||||
'before' => false,
|
||||
'after' => '1 month ago',
|
||||
'label' => $lang['search_past_month'],
|
||||
],
|
||||
'year' => [
|
||||
'before' => false,
|
||||
'after' => '1 year ago',
|
||||
'label' => $lang['search_past_year'],
|
||||
],
|
||||
];
|
||||
$activeOption = 'any';
|
||||
foreach ($options as $key => $option) {
|
||||
if ($INPUT->str('min') === $option['after']) {
|
||||
$activeOption = $key;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$searchForm->addTagOpen('div')->addClass('toggle')->attr('aria-haspopup', 'true');
|
||||
// render current
|
||||
$currentWrapper = $searchForm->addTagOpen('div')->addClass('current');
|
||||
if ($INPUT->has('max') || $INPUT->has('min')) {
|
||||
$currentWrapper->addClass('changed');
|
||||
}
|
||||
$searchForm->addHTML($options[$activeOption]['label']);
|
||||
$searchForm->addTagClose('div');
|
||||
|
||||
// render options list
|
||||
$searchForm->addTagOpen('ul')->attr('aria-expanded', 'false');
|
||||
|
||||
foreach ($options as $key => $option) {
|
||||
$listItem = $searchForm->addTagOpen('li');
|
||||
|
||||
if ($key === $activeOption) {
|
||||
$listItem->addClass('active');
|
||||
$searchForm->addHTML($option['label']);
|
||||
} else {
|
||||
$link = $this->searchState
|
||||
->withTimeLimitations($option['after'], $option['before'])
|
||||
->getSearchLink($option['label'])
|
||||
;
|
||||
$searchForm->addHTML($link);
|
||||
}
|
||||
$searchForm->addTagClose('li');
|
||||
}
|
||||
$searchForm->addTagClose('ul');
|
||||
|
||||
$searchForm->addTagClose('div');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Build the intro text for the search page
|
||||
*
|
||||
* @param string $query the search query
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function getSearchIntroHTML($query)
|
||||
{
|
||||
global $lang;
|
||||
|
||||
$intro = p_locale_xhtml('searchpage');
|
||||
|
||||
$queryPagename = $this->createPagenameFromQuery($this->parsedQuery);
|
||||
$createQueryPageLink = html_wikilink($queryPagename . '?do=edit', $queryPagename);
|
||||
|
||||
$pagecreateinfo = '';
|
||||
if (auth_quickaclcheck($queryPagename) >= AUTH_CREATE) {
|
||||
$pagecreateinfo = sprintf($lang['searchcreatepage'], $createQueryPageLink);
|
||||
}
|
||||
$intro = str_replace(
|
||||
array('@QUERY@', '@SEARCH@', '@CREATEPAGEINFO@'),
|
||||
array(hsc(rawurlencode($query)), hsc($query), $pagecreateinfo),
|
||||
$intro
|
||||
);
|
||||
|
||||
return $intro;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a pagename based the parsed search query
|
||||
*
|
||||
* @param array $parsedQuery
|
||||
*
|
||||
* @return string pagename constructed from the parsed query
|
||||
*/
|
||||
protected function createPagenameFromQuery($parsedQuery)
|
||||
{
|
||||
$pagename = '';
|
||||
if (!empty($parsedQuery['ns'])) {
|
||||
$pagename .= cleanID($parsedQuery['ns'][0]);
|
||||
}
|
||||
$pagename .= ':' . cleanID(implode(' ' , $parsedQuery['highlight']));
|
||||
return $pagename;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build HTML for a list of pages with matching pagenames
|
||||
*
|
||||
* @param array $data search results
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function getPageLookupHTML($data)
|
||||
{
|
||||
if (empty($data)) {
|
||||
return '';
|
||||
}
|
||||
|
||||
global $lang;
|
||||
|
||||
$html = '<div class="search_quickresult">';
|
||||
$html .= '<h3>' . $lang['quickhits'] . ':</h3>';
|
||||
$html .= '<ul class="search_quickhits">';
|
||||
foreach ($data as $id => $title) {
|
||||
$link = html_wikilink(':' . $id);
|
||||
$eventData = [
|
||||
'listItemContent' => [$link],
|
||||
'page' => $id,
|
||||
];
|
||||
trigger_event('SEARCH_RESULT_PAGELOOKUP', $eventData);
|
||||
$html .= '<li>' . implode('', $eventData['listItemContent']) . '</li>';
|
||||
}
|
||||
$html .= '</ul> ';
|
||||
//clear float (see http://www.complexspiral.com/publications/containing-floats/)
|
||||
$html .= '<div class="clearer"></div>';
|
||||
$html .= '</div>';
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build HTML for fulltext search results or "no results" message
|
||||
*
|
||||
* @param array $data the results of the fulltext search
|
||||
* @param array $highlight the terms to be highlighted in the results
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function getFulltextResultsHTML($data, $highlight)
|
||||
{
|
||||
global $lang;
|
||||
|
||||
if (empty($data)) {
|
||||
return '<div class="nothing">' . $lang['nothingfound'] . '</div>';
|
||||
}
|
||||
|
||||
$html = '<div class="search_fulltextresult">';
|
||||
$html .= '<h3>' . $lang['search_fullresults'] . ':</h3>';
|
||||
|
||||
$html .= '<dl class="search_results">';
|
||||
$num = 1;
|
||||
|
||||
foreach ($data as $id => $cnt) {
|
||||
$resultLink = html_wikilink(':' . $id, null, $highlight);
|
||||
|
||||
$resultHeader = [$resultLink];
|
||||
|
||||
|
||||
$restrictQueryToNSLink = $this->restrictQueryToNSLink(getNS($id));
|
||||
if ($restrictQueryToNSLink) {
|
||||
$resultHeader[] = $restrictQueryToNSLink;
|
||||
}
|
||||
|
||||
$snippet = '';
|
||||
$lastMod = '';
|
||||
$mtime = filemtime(wikiFN($id));
|
||||
if ($cnt !== 0) {
|
||||
$resultHeader[] = $cnt . ' ' . $lang['hits'];
|
||||
if ($num < FT_SNIPPET_NUMBER) { // create snippets for the first number of matches only
|
||||
$snippet = '<dd>' . ft_snippet($id, $highlight) . '</dd>';
|
||||
$lastMod = '<span class="search_results__lastmod">' . $lang['lastmod'] . ' ';
|
||||
$lastMod .= '<time datetime="' . date_iso8601($mtime) . '" title="'.dformat($mtime).'">' . dformat($mtime, '%f') . '</time>';
|
||||
$lastMod .= '</span>';
|
||||
}
|
||||
$num++;
|
||||
}
|
||||
|
||||
$metaLine = '<div class="search_results__metaLine">';
|
||||
$metaLine .= $lastMod;
|
||||
$metaLine .= '</div>';
|
||||
|
||||
|
||||
$eventData = [
|
||||
'resultHeader' => $resultHeader,
|
||||
'resultBody' => [$metaLine, $snippet],
|
||||
'page' => $id,
|
||||
];
|
||||
trigger_event('SEARCH_RESULT_FULLPAGE', $eventData);
|
||||
$html .= '<div class="search_fullpage_result">';
|
||||
$html .= '<dt>' . implode(' ', $eventData['resultHeader']) . '</dt>';
|
||||
$html .= implode('', $eventData['resultBody']);
|
||||
$html .= '</div>';
|
||||
}
|
||||
$html .= '</dl>';
|
||||
|
||||
$html .= '</div>';
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* create a link to restrict the current query to a namespace
|
||||
*
|
||||
* @param false|string $ns the namespace to which to restrict the query
|
||||
*
|
||||
* @return false|string
|
||||
*/
|
||||
protected function restrictQueryToNSLink($ns)
|
||||
{
|
||||
if (!$ns) {
|
||||
return false;
|
||||
}
|
||||
if (!$this->isNamespaceAssistanceAvailable($this->parsedQuery)) {
|
||||
return false;
|
||||
}
|
||||
if (!empty($this->parsedQuery['ns']) && $this->parsedQuery['ns'][0] === $ns) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$name = '@' . $ns;
|
||||
return $this->searchState->withNamespace($ns)->getSearchLink($name);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,141 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Ui;
|
||||
|
||||
class SearchState
|
||||
{
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $parsedQuery = [];
|
||||
|
||||
/**
|
||||
* SearchState constructor.
|
||||
*
|
||||
* @param array $parsedQuery
|
||||
*/
|
||||
public function __construct(array $parsedQuery)
|
||||
{
|
||||
global $INPUT;
|
||||
|
||||
$this->parsedQuery = $parsedQuery;
|
||||
if (!isset($parsedQuery['after'])) {
|
||||
$this->parsedQuery['after'] = $INPUT->str('min');
|
||||
}
|
||||
if (!isset($parsedQuery['before'])) {
|
||||
$this->parsedQuery['before'] = $INPUT->str('max');
|
||||
}
|
||||
if (!isset($parsedQuery['sort'])) {
|
||||
$this->parsedQuery['sort'] = $INPUT->str('srt');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a search state for the current search limited to a new namespace
|
||||
*
|
||||
* @param string $ns the namespace to which to limit the search, falsy to remove the limitation
|
||||
* @param array $notns
|
||||
*
|
||||
* @return SearchState
|
||||
*/
|
||||
public function withNamespace($ns, array $notns = [])
|
||||
{
|
||||
$parsedQuery = $this->parsedQuery;
|
||||
$parsedQuery['ns'] = $ns ? [$ns] : [];
|
||||
$parsedQuery['notns'] = $notns;
|
||||
|
||||
return new SearchState($parsedQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a search state for the current search with new search fragments and optionally phrases
|
||||
*
|
||||
* @param array $and
|
||||
* @param array $not
|
||||
* @param array $phrases
|
||||
*
|
||||
* @return SearchState
|
||||
*/
|
||||
public function withFragments(array $and, array $not, array $phrases = [])
|
||||
{
|
||||
$parsedQuery = $this->parsedQuery;
|
||||
$parsedQuery['and'] = $and;
|
||||
$parsedQuery['not'] = $not;
|
||||
$parsedQuery['phrases'] = $phrases;
|
||||
|
||||
return new SearchState($parsedQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a search state for the current search with with adjusted time limitations
|
||||
*
|
||||
* @param $after
|
||||
* @param $before
|
||||
*
|
||||
* @return SearchState
|
||||
*/
|
||||
public function withTimeLimitations($after, $before)
|
||||
{
|
||||
$parsedQuery = $this->parsedQuery;
|
||||
$parsedQuery['after'] = $after;
|
||||
$parsedQuery['before'] = $before;
|
||||
|
||||
return new SearchState($parsedQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a search state for the current search with adjusted sort preference
|
||||
*
|
||||
* @param $sort
|
||||
*
|
||||
* @return SearchState
|
||||
*/
|
||||
public function withSorting($sort)
|
||||
{
|
||||
$parsedQuery = $this->parsedQuery;
|
||||
$parsedQuery['sort'] = $sort;
|
||||
|
||||
return new SearchState($parsedQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a link that represents the current search state
|
||||
*
|
||||
* Note that this represents only a simplified version of the search state.
|
||||
* Grouping with braces and "OR" conditions are not supported.
|
||||
*
|
||||
* @param $label
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getSearchLink($label)
|
||||
{
|
||||
global $ID, $conf;
|
||||
$parsedQuery = $this->parsedQuery;
|
||||
|
||||
$tagAttributes = [
|
||||
'target' => $conf['target']['wiki'],
|
||||
];
|
||||
|
||||
$newQuery = ft_queryUnparser_simple(
|
||||
$parsedQuery['and'],
|
||||
$parsedQuery['not'],
|
||||
$parsedQuery['phrases'],
|
||||
$parsedQuery['ns'],
|
||||
$parsedQuery['notns']
|
||||
);
|
||||
$hrefAttributes = ['do' => 'search', 'sf' => '1', 'q' => $newQuery];
|
||||
if ($parsedQuery['after']) {
|
||||
$hrefAttributes['min'] = $parsedQuery['after'];
|
||||
}
|
||||
if ($parsedQuery['before']) {
|
||||
$hrefAttributes['max'] = $parsedQuery['before'];
|
||||
}
|
||||
if ($parsedQuery['sort']) {
|
||||
$hrefAttributes['srt'] = $parsedQuery['sort'];
|
||||
}
|
||||
|
||||
$href = wl($ID, $hrefAttributes, false, '&');
|
||||
return "<a href='$href' " . buildAttributes($tagAttributes) . ">$label</a>";
|
||||
}
|
||||
}
|
141
inc/fulltext.php
141
inc/fulltext.php
|
@ -20,14 +20,25 @@ if(!defined('FT_SNIPPET_NUMBER')) define('FT_SNIPPET_NUMBER',15);
|
|||
*
|
||||
* refactored into ft_pageSearch(), _ft_pageSearch() and trigger_event()
|
||||
*
|
||||
* @param string $query
|
||||
* @param array $highlight
|
||||
* @param string $query
|
||||
* @param array $highlight
|
||||
* @param string $sort
|
||||
* @param int|string $after only show results with an modified time after this date, accepts timestap or strtotime arguments
|
||||
* @param int|string $before only show results with an modified time before this date, accepts timestap or strtotime arguments
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
function ft_pageSearch($query,&$highlight){
|
||||
function ft_pageSearch($query,&$highlight, $sort = null, $after = null, $before = null){
|
||||
|
||||
$data = array();
|
||||
$data['query'] = $query;
|
||||
if ($sort === null) {
|
||||
$sort = 'hits';
|
||||
}
|
||||
$data = [
|
||||
'query' => $query,
|
||||
'sort' => $sort,
|
||||
'after' => $after,
|
||||
'before' => $before
|
||||
];
|
||||
$data['highlight'] =& $highlight;
|
||||
|
||||
return trigger_event('SEARCH_QUERY_FULLPAGE', $data, '_ft_pageSearch');
|
||||
|
@ -100,7 +111,7 @@ function _ft_pageSearch(&$data) {
|
|||
break;
|
||||
case 'N+:':
|
||||
case 'N-:': // namespace
|
||||
$ns = substr($token, 3);
|
||||
$ns = cleanID(substr($token, 3)) . ':';
|
||||
$pages_matched = array();
|
||||
foreach (array_keys($pages_all) as $id) {
|
||||
if (strpos($id, $ns) === 0) {
|
||||
|
@ -134,8 +145,14 @@ function _ft_pageSearch(&$data) {
|
|||
}
|
||||
}
|
||||
|
||||
// sort docs by count
|
||||
arsort($docs);
|
||||
$docs = _ft_filterResultsByTime($docs, $data['after'], $data['before']);
|
||||
|
||||
if ($data['sort'] === 'mtime') {
|
||||
uksort($docs, 'ft_pagemtimesorter');
|
||||
} else {
|
||||
// sort docs by count
|
||||
arsort($docs);
|
||||
}
|
||||
|
||||
return $docs;
|
||||
}
|
||||
|
@ -199,7 +216,6 @@ function ft_mediause($id, $ignore_perms = false){
|
|||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Quicksearch for pagenames
|
||||
*
|
||||
|
@ -210,16 +226,25 @@ function ft_mediause($id, $ignore_perms = false){
|
|||
* The function always returns titles as well
|
||||
*
|
||||
* @triggers SEARCH_QUERY_PAGELOOKUP
|
||||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
* @author Adrian Lang <lang@cosmocode.de>
|
||||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
* @author Adrian Lang <lang@cosmocode.de>
|
||||
*
|
||||
* @param string $id page id
|
||||
* @param bool $in_ns match against namespace as well?
|
||||
* @param bool $in_title search in title?
|
||||
* @param int|string $after only show results with an modified time after this date, accepts timestap or strtotime arguments
|
||||
* @param int|string $before only show results with an modified time before this date, accepts timestap or strtotime arguments
|
||||
*
|
||||
* @param string $id page id
|
||||
* @param bool $in_ns match against namespace as well?
|
||||
* @param bool $in_title search in title?
|
||||
* @return string[]
|
||||
*/
|
||||
function ft_pageLookup($id, $in_ns=false, $in_title=false){
|
||||
$data = compact('id', 'in_ns', 'in_title');
|
||||
function ft_pageLookup($id, $in_ns=false, $in_title=false, $after = null, $before = null){
|
||||
$data = [
|
||||
'id' => $id,
|
||||
'in_ns' => $in_ns,
|
||||
'in_title' => $in_title,
|
||||
'after' => $after,
|
||||
'before' => $before
|
||||
];
|
||||
$data['has_titles'] = true; // for plugin backward compatibility check
|
||||
return trigger_event('SEARCH_QUERY_PAGELOOKUP', $data, '_ft_pageLookup');
|
||||
}
|
||||
|
@ -233,9 +258,11 @@ function ft_pageLookup($id, $in_ns=false, $in_title=false){
|
|||
function _ft_pageLookup(&$data){
|
||||
// split out original parameters
|
||||
$id = $data['id'];
|
||||
if (preg_match('/(?:^| )(?:@|ns:)([\w:]+)/', $id, $matches)) {
|
||||
$ns = cleanID($matches[1]) . ':';
|
||||
$id = str_replace($matches[0], '', $id);
|
||||
$Indexer = idx_get_indexer();
|
||||
$parsedQuery = ft_queryParser($Indexer, $id);
|
||||
if (count($parsedQuery['ns']) > 0) {
|
||||
$ns = cleanID($parsedQuery['ns'][0]) . ':';
|
||||
$id = implode(' ', $parsedQuery['highlight']);
|
||||
}
|
||||
|
||||
$in_ns = $data['in_ns'];
|
||||
|
@ -279,10 +306,40 @@ function _ft_pageLookup(&$data){
|
|||
}
|
||||
}
|
||||
|
||||
$pages = _ft_filterResultsByTime($pages, $data['after'], $data['before']);
|
||||
|
||||
uksort($pages,'ft_pagesorter');
|
||||
return $pages;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param array $results search results in the form pageid => value
|
||||
* @param int|string $after only returns results with an modified time after this date, accepts timestap or strtotime arguments
|
||||
* @param int|string $before only returns results with an modified time after this date, accepts timestap or strtotime arguments
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
function _ft_filterResultsByTime(array $results, $after, $before) {
|
||||
if ($after || $before) {
|
||||
$after = is_int($after) ? $after : strtotime($after);
|
||||
$before = is_int($before) ? $before : strtotime($before);
|
||||
|
||||
foreach ($results as $id => $value) {
|
||||
$mTime = filemtime(wikiFN($id));
|
||||
if ($after && $after > $mTime) {
|
||||
unset($results[$id]);
|
||||
continue;
|
||||
}
|
||||
if ($before && $before < $mTime) {
|
||||
unset($results[$id]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tiny helper function for comparing the searched title with the title
|
||||
* from the search index. This function is a wrapper around stripos with
|
||||
|
@ -316,6 +373,20 @@ function ft_pagesorter($a, $b){
|
|||
return strcmp ($a,$b);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sort pages by their mtime, from newest to oldest
|
||||
*
|
||||
* @param string $a
|
||||
* @param string $b
|
||||
*
|
||||
* @return int Returns < 0 if $a is newer than $b, > 0 if $b is newer than $a and 0 if they are of the same age
|
||||
*/
|
||||
function ft_pagemtimesorter($a, $b) {
|
||||
$mtimeA = filemtime(wikiFN($a));
|
||||
$mtimeB = filemtime(wikiFN($b));
|
||||
return $mtimeB - $mtimeA;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a snippet extract
|
||||
*
|
||||
|
@ -813,4 +884,36 @@ function ft_termParser($Indexer, $term, $consider_asian = true, $phrase_mode = f
|
|||
return $parsed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Recreate a search query string based on parsed parts, doesn't support negated phrases and `OR` searches
|
||||
*
|
||||
* @param array $and
|
||||
* @param array $not
|
||||
* @param array $phrases
|
||||
* @param array $ns
|
||||
* @param array $notns
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function ft_queryUnparser_simple(array $and, array $not, array $phrases, array $ns, array $notns) {
|
||||
$query = implode(' ', $and);
|
||||
if (!empty($not)) {
|
||||
$query .= ' -' . implode(' -', $not);
|
||||
}
|
||||
|
||||
if (!empty($phrases)) {
|
||||
$query .= ' "' . implode('" "', $phrases) . '"';
|
||||
}
|
||||
|
||||
if (!empty($ns)) {
|
||||
$query .= ' @' . implode(' @', $ns);
|
||||
}
|
||||
|
||||
if (!empty($notns)) {
|
||||
$query .= ' ^' . implode(' ^', $notns);
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
//Setup VIM: ex: et ts=4 :
|
||||
|
|
72
inc/html.php
72
inc/html.php
|
@ -362,78 +362,6 @@ function html_hilight_callback($m) {
|
|||
return $hlight;
|
||||
}
|
||||
|
||||
/**
|
||||
* Run a search and display the result
|
||||
*
|
||||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
*/
|
||||
function html_search(){
|
||||
global $QUERY, $ID;
|
||||
global $lang;
|
||||
|
||||
$intro = p_locale_xhtml('searchpage');
|
||||
// allow use of placeholder in search intro
|
||||
$pagecreateinfo = (auth_quickaclcheck($ID) >= AUTH_CREATE) ? $lang['searchcreatepage'] : '';
|
||||
$intro = str_replace(
|
||||
array('@QUERY@', '@SEARCH@', '@CREATEPAGEINFO@'),
|
||||
array(hsc(rawurlencode($QUERY)), hsc($QUERY), $pagecreateinfo),
|
||||
$intro
|
||||
);
|
||||
echo $intro;
|
||||
|
||||
//do quick pagesearch
|
||||
$data = ft_pageLookup($QUERY,true,useHeading('navigation'));
|
||||
if(count($data)){
|
||||
print '<div class="search_quickresult">';
|
||||
print '<h3>'.$lang['quickhits'].':</h3>';
|
||||
print '<ul class="search_quickhits">';
|
||||
foreach($data as $id => $title){
|
||||
print '<li> ';
|
||||
if (useHeading('navigation')) {
|
||||
$name = $title;
|
||||
}else{
|
||||
$ns = getNS($id);
|
||||
if($ns){
|
||||
$name = shorten(noNS($id), ' ('.$ns.')',30);
|
||||
}else{
|
||||
$name = $id;
|
||||
}
|
||||
}
|
||||
print html_wikilink(':'.$id,$name);
|
||||
print '</li> ';
|
||||
}
|
||||
print '</ul> ';
|
||||
//clear float (see http://www.complexspiral.com/publications/containing-floats/)
|
||||
print '<div class="clearer"></div>';
|
||||
print '</div>';
|
||||
}
|
||||
|
||||
//do fulltext search
|
||||
$regex = array();
|
||||
$data = ft_pageSearch($QUERY,$regex);
|
||||
if(count($data)){
|
||||
print '<dl class="search_results">';
|
||||
$num = 1;
|
||||
foreach($data as $id => $cnt){
|
||||
print '<dt>';
|
||||
print html_wikilink(':'.$id,useHeading('navigation')?null:$id,$regex);
|
||||
if($cnt !== 0){
|
||||
print ': '.$cnt.' '.$lang['hits'].'';
|
||||
}
|
||||
print '</dt>';
|
||||
if($cnt !== 0){
|
||||
if($num < FT_SNIPPET_NUMBER){ // create snippets for the first number of matches only
|
||||
print '<dd>'.ft_snippet($id,$regex).'</dd>';
|
||||
}
|
||||
$num++;
|
||||
}
|
||||
}
|
||||
print '</dl>';
|
||||
}else{
|
||||
print '<div class="nothing">'.$lang['nothingfound'].'</div>';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display error on locked pages
|
||||
*
|
||||
|
|
|
@ -70,7 +70,6 @@ $lang['badpassconfirm'] = 'عذراً,كلمة السر غير صحيحة
|
|||
$lang['minoredit'] = 'تعديلات طفيفة';
|
||||
$lang['draftdate'] = 'حفظ المسودات آليا مفعّل';
|
||||
$lang['nosecedit'] = 'غُيرت الصفحة في هذه الأثناء، معلومات الجزء اصبحت قديمة. حُمُلت كل الصفحة بدلا.';
|
||||
$lang['searchcreatepage'] = 'إن لم تجد ما تبحث عنه، يمكنك إنشاء صفحة جديدة بعنوان ما تبحث عنة بالضغط على زر "حرر هذه الصفحة".';
|
||||
$lang['regmissing'] = 'عذرا، عليك ملء جميع الحقول.';
|
||||
$lang['reguexists'] = 'عذرا، يوجد مشترك بنفس الاسم.';
|
||||
$lang['regsuccess'] = 'أنشئ المستخدم و ارسلت كلمة السر بالبريد.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
نتائج البحث . @CREATEPAGEINFO@
|
||||
|
||||
===== نتائج البحث =====
|
|
@ -59,7 +59,6 @@ $lang['badlogin'] = 'Təssüf ki istifadəçi adı və ya şifrə s
|
|||
$lang['minoredit'] = 'Az dəyişiklər';
|
||||
$lang['draftdate'] = 'Qaralama yadda saxlandı';
|
||||
$lang['nosecedit'] = 'Bu vaxt ərzində səhifə dəyişilmişdir, və bölmə haqqında məlumat köhnəlmişdir. Səhifənin tam versiyası yüklənmişdir.';
|
||||
$lang['searchcreatepage'] = 'Əgər Siz axtardığınızı tapa bilmədinizsə, onda Siz adı axtarışınız ilə uyğun düşən yeni səhifə yarada bilərsiniz. Bunu eləmək üçün, sadəcə \'\'Səhifəni yarat\'\' düyməsini sıxın.';
|
||||
$lang['regmissing'] = 'Təssüf ki Siz bütün xanələri doldurmalısınız.';
|
||||
$lang['reguexists'] = 'Təssüf ki bu ad ilə istifadəçi artıq mövcuddur.';
|
||||
$lang['regsuccess'] = 'İstivadəci yaradıldı və şifrə sizin e-maila göndərildi.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Qarşınızda - axtarışın nəticələridir. @CREATEPAGEINFO@
|
||||
|
||||
===== Nəticələr =====
|
||||
|
|
|
@ -67,7 +67,6 @@ $lang['badpassconfirm'] = 'За съжаление паролата е г
|
|||
$lang['minoredit'] = 'Промените са незначителни';
|
||||
$lang['draftdate'] = 'Черновата е автоматично записана на';
|
||||
$lang['nosecedit'] = 'Страницата бе междувременно променена, презареждане на страницата поради неактуална информация.';
|
||||
$lang['searchcreatepage'] = 'Ако не намирате каквото сте търсили, може да създадете или редактирате страница, кръстена на вашата заявка, чрез съответния бутон.';
|
||||
$lang['regmissing'] = 'Моля, попълнете всички полета.';
|
||||
$lang['reguexists'] = 'Вече съществува потребител с избраното име.';
|
||||
$lang['regsuccess'] = 'Потребителят е създаден, а паролата е пратена по електронната поща.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Резултата от търсенето ще намерите по-долу. @CREATEPAGEINFO@
|
||||
|
||||
===== Резултати =====
|
||||
|
|
|
@ -59,7 +59,6 @@ $lang['badlogin'] = 'Disculpe, pero el nom d\'usuari o la contrasen
|
|||
$lang['minoredit'] = 'Canvis menors';
|
||||
$lang['draftdate'] = 'Borrador gravat el';
|
||||
$lang['nosecedit'] = 'La pàgina ha canviat mentres tant, l\'informació de la secció no estava al dia, s\'ha carregat la pàgina sancera.';
|
||||
$lang['searchcreatepage'] = 'Si no ha trobat lo que buscava pot crear o editar una pàgina en el mateix nom que el text que ha buscat utilisant el botó corresponent.';
|
||||
$lang['regmissing'] = 'Disculpe, pero deu omplir tots els camps.';
|
||||
$lang['reguexists'] = 'Disculpe, pero ya existix un usuari en este nom.';
|
||||
$lang['regsuccess'] = 'S\'ha creat l\'usuari i se li ha enviat la contrasenya per correu electrònic.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Pot vore els resultats de la busca ací baix. @CREATEPAGEINFO@
|
||||
|
||||
===== Resultats =====
|
||||
|
|
|
@ -71,7 +71,6 @@ $lang['badpassconfirm'] = 'Contrasenya incorrecta';
|
|||
$lang['minoredit'] = 'Canvis menors';
|
||||
$lang['draftdate'] = 'L\'esborrany s\'ha desat automàticament';
|
||||
$lang['nosecedit'] = 'Mentrestant la pàgina ha estat modificada. La informació de seccions estava obsoleta i ha calgut carregar la pàgina sencera.';
|
||||
$lang['searchcreatepage'] = 'Si no trobeu allò que buscàveu, podeu crear una pàgina nova per mitjà del botó \'\'Edita aquesta pàgina\'\'.';
|
||||
$lang['regmissing'] = 'Heu d\'omplir tots els camps.';
|
||||
$lang['reguexists'] = 'Ja existeix un altre usuari amb aquest nom.';
|
||||
$lang['regsuccess'] = 'S\'ha creat l\'usuari. La contrasenya s\'ha enviat per correu.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Heus ací els resultats de la cerca. @CREATEPAGEINFO@
|
||||
|
||||
===== Resultats =====
|
|
@ -83,7 +83,6 @@ $lang['badpassconfirm'] = 'Bohužel špatné heslo';
|
|||
$lang['minoredit'] = 'Drobné změny';
|
||||
$lang['draftdate'] = 'Koncept automaticky uložen v';
|
||||
$lang['nosecedit'] = 'Stránka byla v mezičase změněna. Informace o sekci již nebylo platné, byla načtena celá stránka.';
|
||||
$lang['searchcreatepage'] = 'Pokud jste nenašli, co hledáte, zkuste požadovanou stránku sami vytvořit stisknutím tlačítka \'\'Vytvořit stránku\'\'.';
|
||||
$lang['regmissing'] = 'Musíte vyplnit všechny údaje.';
|
||||
$lang['reguexists'] = 'Uživatel se stejným jménem už je zaregistrován.';
|
||||
$lang['regsuccess'] = 'Uživatelský účet byl vytvořen a heslo zasláno e-mailem.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Výsledky hledání můžete vidět níže. @CREATEPAGEINFO@
|
||||
|
||||
===== Výsledky =====
|
||||
|
|
|
@ -70,7 +70,6 @@ $lang['badpassconfirm'] = 'Sori, roedd y cyfrinair yn anghywir';
|
|||
$lang['minoredit'] = 'Newidiadau Bach';
|
||||
$lang['draftdate'] = 'Awtogadwyd drafft ar'; // full dformat date will be added
|
||||
$lang['nosecedit'] = 'Newidiwyd y dudaen yn y cyfamser, roedd gwybodaeth yr adran wedi dyddio, felly llwythwyd y dudalen gyfan.';
|
||||
$lang['searchcreatepage'] = 'Os na wnaethoch chi ddod o hyd i\'r hyn roeddech chi am ddarganfod, gallwch chi greu neu golygu\'r dudalen wedi\'i henwi ar ôl eich ymholiad gyda\'r teclyn priodol.';
|
||||
|
||||
$lang['regmissing'] = 'Sori, llenwch bob maes.';
|
||||
$lang['reguexists'] = 'Sori, mae defnyddiwr â\'r enw hwn yn bodoli eisoes.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Gallwch chi ddarganfod canlyniadau eich chwiliad isod. @CREATEPAGEINFO@
|
||||
|
||||
===== Canlyniadau =====
|
||||
|
|
|
@ -80,7 +80,6 @@ $lang['badpassconfirm'] = 'Adgangkode var desværre forkert';
|
|||
$lang['minoredit'] = 'Mindre ændringer';
|
||||
$lang['draftdate'] = 'Kladde automatisk gemt d.';
|
||||
$lang['nosecedit'] = 'Siden blev ændret i mellemtiden, sektions information var for gammel, hentede hele siden i stedet.';
|
||||
$lang['searchcreatepage'] = 'Hvis resultaterne ikke indeholder det du søgte efter kan du oprette et nyt dokument med samme navn som søgningen ved at trykke på knappen **\'\'[Opret dette dokument]\'\'**.';
|
||||
$lang['regmissing'] = 'Du skal udfylde alle felter.';
|
||||
$lang['reguexists'] = 'Dette brugernavn er allerede i brug.';
|
||||
$lang['regsuccess'] = 'Du er nu oprettet som bruger. Dit adgangskode bliver sendt til dig i en e-mail.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Du kan se resultaterne af din søgning nedenunder. @CREATEPAGEINFO@
|
||||
|
||||
===== Søgeresultater =====
|
||||
|
|
|
@ -84,7 +84,6 @@ $lang['badpassconfirm'] = 'Das Passwort war falsch.';
|
|||
$lang['minoredit'] = 'Kleine Änderung';
|
||||
$lang['draftdate'] = 'Entwurf gespeichert am';
|
||||
$lang['nosecedit'] = 'Diese Seite wurde in der Zwischenzeit geändert, da das Sektionsinfo veraltet ist. Die ganze Seite wird stattdessen geladen.';
|
||||
$lang['searchcreatepage'] = 'Falls der gesuchte Begriff nicht gefunden wurde, kannst du direkt eine neue Seite für den Suchbegriff anlegen, indem du auf den Knopf **\'\'[Seite anlegen]\'\'** drückst.';
|
||||
$lang['regmissing'] = 'Alle Felder müssen ausgefüllt werden';
|
||||
$lang['reguexists'] = 'Der Benutzername existiert leider schon.';
|
||||
$lang['regsuccess'] = 'Der neue Benutzer wurde angelegt und das Passwort per E-Mail versandt.';
|
||||
|
|
|
@ -2,6 +2,3 @@
|
|||
|
||||
Unten sind die Ergebnisse deiner Suche gelistet. @CREATEPAGEINFO@
|
||||
|
||||
===== Ergebnisse =====
|
||||
|
||||
|
||||
|
|
|
@ -93,7 +93,7 @@ $lang['badpassconfirm'] = 'Das Passwort war falsch.';
|
|||
$lang['minoredit'] = 'kleine Änderung';
|
||||
$lang['draftdate'] = 'Entwurf gespeichert am';
|
||||
$lang['nosecedit'] = 'Diese Seite wurde in der Zwischenzeit geändert, der Seitenabschnitt ist veraltet, lade stattdessen volle Seite.';
|
||||
$lang['searchcreatepage'] = 'Falls der gesuchte Begriff nicht gefunden wurde, können Sie direkt eine neue Seite für den Suchbegriff anlegen, indem Sie auf den **\'\'[Seite anlegen]\'\'** Knopf drücken.';
|
||||
$lang['searchcreatepage'] = 'Falls der gesuchte Begriff nicht gefunden wurde, können Sie direkt eine neue, nach Ihrer Anfrage benannte Seite %s anlegen.';
|
||||
$lang['regmissing'] = 'Bitte alle Felder ausfüllen!';
|
||||
$lang['reguexists'] = 'Der Benutzername existiert leider schon.';
|
||||
$lang['regsuccess'] = 'Der neue Benutzer wurde angelegt und das Passwort per E-Mail versandt.';
|
||||
|
|
|
@ -1,7 +1,3 @@
|
|||
====== Suche ======
|
||||
|
||||
Unten sind die Ergebnisse Ihrer Suche gelistet. @CREATEPAGEINFO@
|
||||
|
||||
===== Ergebnisse =====
|
||||
|
||||
|
||||
|
|
|
@ -73,7 +73,6 @@ $lang['badpassconfirm'] = 'Ο κωδικός που εισάγατε εί
|
|||
$lang['minoredit'] = 'Ασήμαντες αλλαγές';
|
||||
$lang['draftdate'] = 'Αυτόματη αποθήκευση πρόχειρης σελίδας στις';
|
||||
$lang['nosecedit'] = 'Η σελίδα τροποποιήθηκε στο μεταξύ και τα στοιχεία της ενότητας δεν ήταν συγχρονισμένα, οπότε φορτώθηκε η πλήρης σελίδα. ';
|
||||
$lang['searchcreatepage'] = 'Αν δεν βρίσκεις αυτό που ψάχνεις, μπορείς να δημιουργήσεις ή να επεξεργαστείς τη σελίδα που ψάχνεις, χρησιμοποιώντας το κατάλληλο εργαλείο.';
|
||||
$lang['regmissing'] = 'Πρέπει να συμπληρώσετε όλα τα πεδία.';
|
||||
$lang['reguexists'] = 'Αυτός ο λογαριασμός υπάρχει ήδη.';
|
||||
$lang['regsuccess'] = 'Ο λογαριασμός δημιουργήθηκε και ο κωδικός εστάλει με e-mail.';
|
||||
|
|
|
@ -69,7 +69,22 @@ $lang['badpassconfirm'] = 'Sorry, the password was wrong';
|
|||
$lang['minoredit'] = 'Minor Changes';
|
||||
$lang['draftdate'] = 'Draft autosaved on'; // full dformat date will be added
|
||||
$lang['nosecedit'] = 'The page was changed in the meantime, section info was out of date loaded full page instead.';
|
||||
$lang['searchcreatepage'] = 'If you didn\'t find what you were looking for, you can create or edit the page named after your query with the appropriate tool.';
|
||||
$lang['searchcreatepage'] = 'If you didn\'t find what you were looking for, you can create or edit the page %s, named after your query.';
|
||||
|
||||
$lang['search_fullresults'] = 'Fulltext results';
|
||||
$lang['js']['search_toggle_tools'] = 'Toggle Search Tools';
|
||||
$lang['search_exact_match'] = 'Exact match';
|
||||
$lang['search_starts_with'] = 'Starts with';
|
||||
$lang['search_ends_with'] = 'Ends with';
|
||||
$lang['search_contains'] = 'Contains';
|
||||
$lang['search_custom_match'] = 'Custom';
|
||||
$lang['search_any_ns'] = 'Any namespace';
|
||||
$lang['search_any_time'] = 'Any time';
|
||||
$lang['search_past_7_days'] = 'Past week';
|
||||
$lang['search_past_month'] = 'Past month';
|
||||
$lang['search_past_year'] = 'Past year';
|
||||
$lang['search_sort_by_hits'] = 'Sort by hits';
|
||||
$lang['search_sort_by_mtime'] = 'Sort by last modified';
|
||||
|
||||
$lang['regmissing'] = 'Sorry, you must fill in all fields.';
|
||||
$lang['reguexists'] = 'Sorry, a user with this login already exists.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
You can find the results of your search below. @CREATEPAGEINFO@
|
||||
|
||||
===== Results =====
|
||||
|
|
|
@ -68,7 +68,6 @@ $lang['badpassconfirm'] = 'Pardonu, la pasvorto malĝustis';
|
|||
$lang['minoredit'] = 'Etaj modifoj';
|
||||
$lang['draftdate'] = 'Lasta konservo de la skizo:';
|
||||
$lang['nosecedit'] = 'La paĝo ŝanĝiĝis intertempe, sekcio-informo estis malĝisdata, tial la tuta paĝo estas reŝargita.';
|
||||
$lang['searchcreatepage'] = 'Se vi ne trovis tion, kion vi serĉis, vi povas krei novan paĝon kun necesa nomo per la koresponda butono.';
|
||||
$lang['regmissing'] = 'Pardonu, vi devas plenigi ĉiujn kampojn.';
|
||||
$lang['reguexists'] = 'Pardonu, ĉi tiu uzanto-nomo jam ekzistas.';
|
||||
$lang['regsuccess'] = 'La uzanto kreiĝis kaj la pasvorto sendiĝis per retpoŝto.';
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
====== Serĉo ======
|
||||
|
||||
Sube estas rezultoj de serĉo en la retejo.\\ @CREATEPAGEINFO@
|
||||
Sube estas rezultoj de serĉo en la retejo. @CREATEPAGEINFO@
|
||||
|
||||
===== Rezultoj =====
|
||||
|
|
|
@ -105,7 +105,6 @@ $lang['badpassconfirm'] = 'Lo siento, la contraseña es errónea';
|
|||
$lang['minoredit'] = 'Cambios menores';
|
||||
$lang['draftdate'] = 'Borrador guardado automáticamente:';
|
||||
$lang['nosecedit'] = 'La página ha cambiado en el lapso, la información de sección estaba anticuada, en su lugar se cargó la página completa.';
|
||||
$lang['searchcreatepage'] = 'Si no has encontrado lo que buscabas, puedes crear una nueva página con tu consulta utilizando el botón \'\'Crea esta página\'\'.';
|
||||
$lang['regmissing'] = 'Lo siento, tienes que completar todos los campos.';
|
||||
$lang['reguexists'] = 'Lo siento, ya existe un usuario con este nombre.';
|
||||
$lang['regsuccess'] = 'El usuario ha sido creado y la contraseña se ha enviado por correo.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Puedes encontrar los resultados de tu búsqueda abajo. @CREATEPAGEINFO@
|
||||
|
||||
===== Resultados =====
|
|
@ -68,7 +68,6 @@ $lang['badpassconfirm'] = 'Väär salasõna';
|
|||
$lang['minoredit'] = 'Ebaolulised muudatused';
|
||||
$lang['draftdate'] = 'Mustand automaatselt salvestatud';
|
||||
$lang['nosecedit'] = 'Leht on vahepeal muutunud, jaotiste teave osutus aegunuks sestap laeti tervelehekülg.';
|
||||
$lang['searchcreatepage'] = "Kui Sa otsitavat ei leidnud võid tekitada oma otsingu nimelise uue lehe kasutades ''Toimeta seda lehte'' nuppu.";
|
||||
$lang['regmissing'] = 'Kõik väljad tuleb ära täita.';
|
||||
$lang['reguexists'] = 'Tegelikult on sellise nimega kasutaja juba olemas.';
|
||||
$lang['regsuccess'] = 'Kasutaja sai tehtud. Parool saadeti Sulle e-posti aadressil.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Leiad vasted oma otsingule. @CREATEPAGEINFO@
|
||||
|
||||
===== Vasted =====
|
||||
|
|
|
@ -68,7 +68,6 @@ $lang['badpassconfirm'] = 'Pasahitz okerra';
|
|||
$lang['minoredit'] = 'Aldaketa Txikiak';
|
||||
$lang['draftdate'] = 'Zirriborroa automatikoki gorde da hemen:';
|
||||
$lang['nosecedit'] = 'Orria aldatua izan da bitartean, info atala zaharkituta geratu da, orri osoa kargatu da horren ordez.';
|
||||
$lang['searchcreatepage'] = 'Bilatzen zabiltzana aurkitu ez baduzu, zuk zeuk sortu dezakezu orri berri bat bilaketa ostean \'\'Sortu orri hau\'\' erabiliz.';
|
||||
$lang['regmissing'] = 'Barkatu, hutsune guztiak bete behar dituzu.';
|
||||
$lang['reguexists'] = 'Barkatu, izen bereko erabiltzailea existitzen da.';
|
||||
$lang['regsuccess'] = 'Erabiltzailea sortu da. Pasahitza mailez bidaliko zaizu.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Emaitzak ondorengo aurkiketan bilatu ditzakezu. @CREATEPAGEINFO@
|
||||
|
||||
===== Bilaketa emaitzak: =====
|
||||
|
|
|
@ -78,7 +78,6 @@ $lang['badpassconfirm'] = 'متاسفم، رمز عبور اشتباه ا
|
|||
$lang['minoredit'] = 'ویرایشهای خُرد';
|
||||
$lang['draftdate'] = 'ذخیره خودکار پیشنویس در';
|
||||
$lang['nosecedit'] = 'این صفحه در این میان تغییر کرده است، اطلاعات بخش قدیمی شده است، در عوض محتوای کل نمایش داده میشود.';
|
||||
$lang['searchcreatepage'] = 'اگر به نتیجهی مطلوبی نرسیدهاید، میتوانید صفحهی مورد نظر را ایجاد کنید.';
|
||||
$lang['regmissing'] = 'متاسفم، شما باید همه قسمتها را پر کنید.';
|
||||
$lang['reguexists'] = 'نام کاربریای که وارد کردید قبلن استفاده شده است.';
|
||||
$lang['regsuccess'] = 'کاربر ساخته شد و گذرواژه به صورت ایمیل ارسال گردید.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
نتایج جستجو در زیر آمده است. @CREATEPAGEINFO@
|
||||
|
||||
===== نتایج =====
|
|
@ -71,7 +71,6 @@ $lang['badpassconfirm'] = 'Valitan. Salasana oli väärin';
|
|||
$lang['minoredit'] = 'Pieni muutos';
|
||||
$lang['draftdate'] = 'Luonnos tallennettu automaattisesti';
|
||||
$lang['nosecedit'] = 'Sivu on muuttunut välillä ja kappaleen tiedot olivat vanhentuneet. Koko sivu ladattu.';
|
||||
$lang['searchcreatepage'] = 'Jos et löytänyt etsimääsi voit luoda uuden sivun tiedustelusi pohjalta käyttämällä \'\'Muokkaa tätä sivua\'\' -napilla.';
|
||||
$lang['regmissing'] = 'Kaikki kentät tulee täyttää.';
|
||||
$lang['reguexists'] = 'Käyttäjä tällä käyttäjänimellä on jo olemassa.';
|
||||
$lang['regsuccess'] = 'Käyttäjä luotiin ja salasana lähetettiin sähköpostilla.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Löydät etsinnän tulokset alta. @CREATEPAGEINFO@
|
||||
|
||||
===== Tulokset =====
|
||||
|
|
|
@ -58,7 +58,6 @@ $lang['badlogin'] = 'Skeivt brúkaranavn ella loyniorð.';
|
|||
$lang['minoredit'] = 'Smærri broytingar';
|
||||
$lang['draftdate'] = 'Goym kladdu sett frá';
|
||||
$lang['nosecedit'] = 'Hendan síðan var broytt undir tilevnan, brotið var ikki rætt dagfest, heintaði fulla síðu í staðin';
|
||||
$lang['searchcreatepage'] = "Um úrslitini ikki innihalda tað sum tú leitaði eftir kanst tú upprætta eitt nýtt skjal við sama navni sum leitingin við at trýsta á **''[Upprætta hetta skjal]''** knappin.";
|
||||
$lang['regmissing'] = 'Tú skalt fylla út øll øki.';
|
||||
$lang['reguexists'] = 'Hetta brúkaranavn er upptiki.';
|
||||
$lang['regsuccess'] = 'Tú ert nú stovnavur sum brúkari. Títt loyniorð verður sent til tín í einum T-posti.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Tú kanst síggja úrslitini av tíni leiting niðanfyri. @CREATEPAGEINFO@
|
||||
|
||||
===== Leitiúrslit =====
|
||||
|
|
|
@ -99,7 +99,6 @@ $lang['badpassconfirm'] = 'Désolé, le mot de passe est erroné';
|
|||
$lang['minoredit'] = 'Modification mineure';
|
||||
$lang['draftdate'] = 'Brouillon enregistré automatiquement le';
|
||||
$lang['nosecedit'] = 'La page a changé entre temps, les informations de la section sont obsolètes ; la page complète a été chargée à la place.';
|
||||
$lang['searchcreatepage'] = 'Si vous n\'avez pas trouvé ce que vous cherchiez, vous pouvez créer ou modifier la page correspondant à votre requête en cliquant sur le bouton approprié.';
|
||||
$lang['regmissing'] = 'Désolé, vous devez remplir tous les champs.';
|
||||
$lang['reguexists'] = 'Désolé, ce nom d\'utilisateur est déjà pris.';
|
||||
$lang['regsuccess'] = 'L\'utilisateur a été créé. Le mot de passe a été expédié par courriel.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Voici les résultats de votre recherche. @CREATEPAGEINFO@
|
||||
|
||||
===== Résultats =====
|
||||
|
|
|
@ -62,7 +62,6 @@ $lang['badlogin'] = 'Sentímolo, mais o nome de usuario ou o contra
|
|||
$lang['minoredit'] = 'Trocos Menores';
|
||||
$lang['draftdate'] = 'Borrador gardado automaticamente en';
|
||||
$lang['nosecedit'] = 'A páxina mudou entrementres, a información da sección estaba desfasada polo que se cargou a páxina completa no seu lugar.';
|
||||
$lang['searchcreatepage'] = "Se non atopaches o que estabas a procurar, podes crear ou editar a páxina co nome relacionado coa túa procura empregando o botón axeitado.";
|
||||
$lang['regmissing'] = 'Sentímolo, mais tes que cubrir todos os campos.';
|
||||
$lang['reguexists'] = 'Sentímolo, mais xa existe un usuario con ese nome.';
|
||||
$lang['regsuccess'] = 'O usuario foi creado e o contrasinal enviado por correo-e.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Podes atopar os resultados da túa procura a continuación. @CREATEPAGEINFO@
|
||||
|
||||
===== Resultados =====
|
||||
|
|
|
@ -77,7 +77,6 @@ $lang['badpassconfirm'] = 'מצטערים, הסיסמה שגויה';
|
|||
$lang['minoredit'] = 'שינוים מזעריים';
|
||||
$lang['draftdate'] = 'הטיוטה נשמרה אוטומטית ב־';
|
||||
$lang['nosecedit'] = 'הדף השתנה בינתיים, הקטע שערכת אינו מעודכן - העמוד כולו נטען במקום זאת.';
|
||||
$lang['searchcreatepage'] = 'אם לא נמצאו דפים בחיפוש, לחיצה על הכפתור "עריכה" תיצור דף חדש על שם מילת החיפוש שהוזנה.';
|
||||
$lang['regmissing'] = 'עליך למלא את כל השדות, עמך הסליחה.';
|
||||
$lang['reguexists'] = 'משתמש בשם זה כבר נרשם, עמך הסליחה.';
|
||||
$lang['regsuccess'] = 'ההרשמה הצליחה, המשתמש נרשם והודעה נשלחה בדוא״ל.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
ניתן לראות את תוצאות החיפוש למטה. @CREATEPAGEINFO@
|
||||
|
||||
===== תוצאות =====
|
|
@ -68,7 +68,6 @@ $lang['badpassconfirm'] = 'Nažalost, lozinka nije ispravna';
|
|||
$lang['minoredit'] = 'Manje izmjene';
|
||||
$lang['draftdate'] = 'Nacrt promjena automatski spremljen u';
|
||||
$lang['nosecedit'] = 'Stranica se u međuvremenu promijenila. Informacija o odjeljku je ostarila pa je učitana kompletna stranica.';
|
||||
$lang['searchcreatepage'] = 'Ako ne možete naći što tražite, možete urediti ili stvoriti novu stranicu s odgovarajućim alatom.';
|
||||
$lang['regmissing'] = 'Morate popuniti sva polja.';
|
||||
$lang['reguexists'] = 'Korisnik s tim korisničkim imenom već postoji.';
|
||||
$lang['regsuccess'] = 'Korisnik je uspješno stvoren i poslana je lozinka emailom.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Možete naći rezultat vaše pretrage u nastavku. @CREATEPAGEINFO@
|
||||
|
||||
====== Rezultati ======
|
||||
|
|
|
@ -74,7 +74,6 @@ $lang['badpassconfirm'] = 'Hibás jelszó';
|
|||
$lang['minoredit'] = 'Apróbb változások';
|
||||
$lang['draftdate'] = 'Piszkozat elmentve:';
|
||||
$lang['nosecedit'] = 'Időközben megváltozott az oldal, emiatt a szakasz nem friss. Töltsd újra az egész oldalt!';
|
||||
$lang['searchcreatepage'] = 'Ha nem találtad meg amit kerestél, akkor létrehozhatsz egy új oldalt a keresésed alapján \'\'Az oldal szerkesztése\'\' gombbal.';
|
||||
$lang['regmissing'] = 'Sajnáljuk, az összes mezőt ki kell töltened.';
|
||||
$lang['reguexists'] = 'Sajnáljuk, ilyen azonosítójú felhasználónk már van.';
|
||||
$lang['regsuccess'] = 'A felhasználói azonosítót létrehoztuk. A jelszót postáztuk.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
A keresés eredményét lentebb láthatod. @CREATEPAGEINFO@
|
||||
|
||||
===== Eredmény(ek) =====
|
|
@ -63,7 +63,6 @@ $lang['badlogin'] = 'Le nomine de usator o le contrasigno es incorr
|
|||
$lang['minoredit'] = 'Modificationes minor';
|
||||
$lang['draftdate'] = 'Version provisori automaticamente salveguardate le';
|
||||
$lang['nosecedit'] = 'Le pagina ha essite modificate intertanto. Le informationes del section es ora obsolete, dunque le pagina complete ha essite cargate in su loco.';
|
||||
$lang['searchcreatepage'] = 'Si tu non ha trovate lo que tu cerca, tu pote crear o modificar le pagina nominate secundo tu consulta con le button appropriate.';
|
||||
$lang['regmissing'] = 'Es necessari completar tote le campos.';
|
||||
$lang['reguexists'] = 'Regrettabilemente, un usator con iste nomine ja existe.';
|
||||
$lang['regsuccess'] = 'Le conto ha essite create e le contrasigno ha essite inviate per e-mail.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Le resultatos de tu recerca se trova hic infra. @CREATEPAGEINFO@
|
||||
|
||||
===== Resultatos =====
|
|
@ -64,7 +64,6 @@ $lang['badlogin'] = 'Maaf, username atau password salah.';
|
|||
$lang['badpassconfirm'] = 'Maaf, password salah';
|
||||
$lang['minoredit'] = 'Perubahan Minor';
|
||||
$lang['draftdate'] = 'Simpan draft secara otomatis';
|
||||
$lang['searchcreatepage'] = 'Jika Anda tidak menemukan apa yang diinginkan, Anda dapat membuat halaman baru, dengan nama sesuai "text pencarian" Anda. Gunakan tombol "Edit halaman ini".';
|
||||
$lang['regmissing'] = 'Maaf, Anda harus mengisi semua field.';
|
||||
$lang['reguexists'] = 'Maaf, user dengan user login ini telah ada.';
|
||||
$lang['regsuccess'] = 'User telah didaftarkan dan password telah dikirim ke email Anda.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Anda dapat menemukan hasil pencarian dibawah ini. @CREATEPAGEINFO@
|
||||
|
||||
===== Hasil Pencarian =====
|
|
@ -82,7 +82,6 @@ $lang['badpassconfirm'] = 'La password è errata';
|
|||
$lang['minoredit'] = 'Modifiche minori';
|
||||
$lang['draftdate'] = 'Bozza salvata in automatico il';
|
||||
$lang['nosecedit'] = 'La pagina è stata modificata nel frattempo; è impossibile modificare solo la sezione scelta, quindi è stata caricata la pagina intera.';
|
||||
$lang['searchcreatepage'] = 'Se non hai trovato quello che cercavi, puoi creare una nuova pagina con questo titolo usando il pulsante \'\'Crea questa pagina\'\'.';
|
||||
$lang['regmissing'] = 'Devi riempire tutti i campi.';
|
||||
$lang['reguexists'] = 'Il nome utente inserito esiste già.';
|
||||
$lang['regsuccess'] = 'L\'utente è stato creato. La password è stata spedita via email.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Questi sono i risultati della ricerca. @CREATEPAGEINFO@
|
||||
|
||||
===== Risultati =====
|
||||
|
|
|
@ -72,7 +72,6 @@ $lang['badpassconfirm'] = 'パスワードが間違っています。';
|
|||
$lang['minoredit'] = '小変更';
|
||||
$lang['draftdate'] = 'ドラフト保存日時:';
|
||||
$lang['nosecedit'] = 'ページ内容が変更されていますがセクション情報が古いため、代わりにページ全体をロードしました。';
|
||||
$lang['searchcreatepage'] = 'もし、探しているものが見つからない場合、 検索キーワードにちなんだ名前の文書を作成もしくは編集を行ってください。';
|
||||
$lang['regmissing'] = '全ての項目を入力してください。';
|
||||
$lang['reguexists'] = 'このユーザー名は既に存在しています。';
|
||||
$lang['regsuccess'] = '新しいユーザーが作成されました。パスワードは登録したメールアドレス宛てに送付されます。';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
以下に検索結果を表示します。@CREATEPAGEINFO@
|
||||
|
||||
===== 結果 =====
|
||||
|
|
|
@ -76,7 +76,6 @@ $lang['badpassconfirm'] = '죄송하지만 비밀번호가 잘못되었
|
|||
$lang['minoredit'] = '사소한 바뀜';
|
||||
$lang['draftdate'] = '초안 자동 저장 시간';
|
||||
$lang['nosecedit'] = '한 동안 문서가 바뀌었으며, 문단 정보가 오래되어 문서 전체를 대신 열었습니다.';
|
||||
$lang['searchcreatepage'] = '만약 원하는 문서를 찾지 못했다면, \'\'문서 만들기\'\'나 \'\'문서 편집\'\'을 사용해 검색어와 같은 이름의 문서를 만들거나 편집할 수 있습니다.';
|
||||
$lang['regmissing'] = '죄송하지만 모든 필드를 채워야 합니다.';
|
||||
$lang['reguexists'] = '죄송하지만 같은 이름을 사용하는 사용자가 있습니다.';
|
||||
$lang['regsuccess'] = '사용자 계정을 만들었으며 비밀번호는 이메일로 보냈습니다.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
아래에서 검색 결과를 찾을 수 있습니다. @CREATEPAGEINFO@
|
||||
|
||||
===== 결과 =====
|
|
@ -41,6 +41,5 @@ $lang['lastmod'] = 'Guherandina dawî:';
|
|||
$lang['deleted'] = 'hat jê birin';
|
||||
$lang['created'] = 'hat afirandin';
|
||||
$lang['summary'] = 'Kurteya guhartinê';
|
||||
$lang['searchcreatepage'] = "Heke tiştek nehatibe dîtin, tu dikarî dest bi nivîsandina rûpelekê nû bikî. Ji bo vê, ''Vê rûpelê biguherîne'' bitikîne.";
|
||||
|
||||
//Setup VIM: ex: et ts=2 :
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Jêr encamên lêgerandina te tên nîşan dan. @CREATEPAGEINFO@
|
||||
|
||||
===== Encam =====
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Responsiones in hac pagina uidere potes. @CREATEPAGEINFO@
|
||||
|
||||
===== Responsiones =====
|
|
@ -54,7 +54,6 @@ $lang['badlogin'] = 'Entschëllegt, de Benotzernumm oder d\'Passwue
|
|||
$lang['minoredit'] = 'Kleng Ännerungen';
|
||||
$lang['draftdate'] = 'Entworf automatesch gespäichert den';
|
||||
$lang['nosecedit'] = 'D\'Säit gouf an Zwëschenzäit g\'ännert, Sektiounsinfo veralt. Ganz Säit gouf aplaz gelueden.';
|
||||
$lang['searchcreatepage'] = 'Wanns de net fënns wats de gesicht hues kanns de eng nei Säit mam Numm vun denger Sich uleeën.';
|
||||
$lang['regmissing'] = 'Du muss all d\'Felder ausfëllen.';
|
||||
$lang['reguexists'] = 'Et get schonn e Benotzer mat deem Numm.';
|
||||
$lang['regsuccess'] = 'De Benotzer gouf erstallt an d\'Passwuert via Email geschéckt.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Hei ënnendrënner sinn d'Resultater vun der Sich. @CREATEPAGEINFO@
|
||||
|
||||
=====Resultater=====
|
|
@ -61,7 +61,6 @@ $lang['badlogin'] = 'Nurodėte blogą vartotojo vardą arba slapta
|
|||
$lang['minoredit'] = 'Nedidelis pataisymas';
|
||||
$lang['draftdate'] = 'Juodraštis automatiškai išsaugotas';
|
||||
$lang['nosecedit'] = 'Puslapis buvo kažkieno pataisytas, teksto dalies informacija tapo pasenusi, todėl pakrautas visas puslapis.';
|
||||
$lang['searchcreatepage'] = 'Jeigu neradote to, ko ieškojote, galite sukurti naują puslapį šiuo pavadinimu paspausdami "Redaguoti šį puslapį".';
|
||||
$lang['regmissing'] = 'Turite užpildyti visus laukus.';
|
||||
$lang['reguexists'] = 'Vartotojas su pasirinktu prisijungimo vardu jau egzistuoja.';
|
||||
$lang['regsuccess'] = 'Vartotojas sukurtas, slaptažodis išsiųstas el. paštu.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Žemiau matote Jūsų atliktos paieškos rezultatus. @CREATEPAGEINFO@
|
||||
|
||||
===== Rezultatai =====
|
|
@ -65,7 +65,6 @@ $lang['badpassconfirm'] = 'Atvaino, aplama parole';
|
|||
$lang['minoredit'] = 'Sīki labojumi';
|
||||
$lang['draftdate'] = 'Melnraksts automātiski saglabāts';
|
||||
$lang['nosecedit'] = 'Lapa pa šo laiku ir mainījusies, sekcijas informācija novecojusi. Ielādēta lapas pilnās versija.';
|
||||
$lang['searchcreatepage'] = 'Ja neatradi meklēto, nospiežot pogu "Labot lapu", vari izveidot jaunu lapu ar tevis meklētajiem atslēgvārdiem nosaukumā.';
|
||||
$lang['regmissing'] = 'Atvaino, jāaizpilda visas ailes.';
|
||||
$lang['reguexists'] = 'Atvaino, tāds lietotājs jau ir.';
|
||||
$lang['regsuccess'] = 'Lietotājs izveidots. Parole nosūtīta pa pastu.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Te vari redzēt meklēšanas rezultātus. @CREATEPAGEINFO@
|
||||
|
||||
===== Atrasts =====
|
||||
|
|
|
@ -114,7 +114,6 @@ $lang['qb_sig'] = 'Manisy sonia';
|
|||
|
||||
$lang['js']['del_confirm']= 'Hofafana ilay andalana?';
|
||||
|
||||
$lang['searchcreatepage'] = "Raha tsy nahita izay notadiavinao ianao, dia afaka mamorona pejy vaovao avy amin'ny teny nanaovanao fikarohana; Ampiasao ny bokotra ''Hanova ny pejy''.";
|
||||
//Setup VIM: ex: et ts=2 :
|
||||
$lang['email_signature_text'] = 'Ity imailaka ity dia navoakan\'ny wiki tao amin\'ny
|
||||
@DOKUWIKIURL@';
|
||||
|
|
|
@ -1,7 +1,4 @@
|
|||
====== Karoka ======
|
||||
|
||||
Ireto ambany ireto ny valin'ny fikarohanao.
|
||||
Ireto ambany ireto ny valin'ny fikarohanao. @CREATEPAGEINFO@
|
||||
|
||||
@CREATEPAGEINFO@
|
||||
|
||||
===== Vokatry ny fikarohana =====
|
|
@ -67,7 +67,6 @@ $lang['badlogin'] = 'माफ़ करा, वापरकर्
|
|||
$lang['minoredit'] = 'छोटे बदल';
|
||||
$lang['draftdate'] = 'प्रत आपोआप सुरक्षित केल्याची तारीख';
|
||||
$lang['nosecedit'] = 'मध्यंतरीच्या काळात हे पृष्ठ बदलले आहे.विभागाची माहिती जुनी झाली होती. त्याऐवजी सबंध पृष्ठ परत लोड केले आहे.';
|
||||
$lang['searchcreatepage'] = 'जर तुमची शोधत असलेली गोष्ट तुम्हाला सापडली नाही, तर योग्य बटण वापरून तुम्ही शोधत असलेल्या गोष्टीविषयी तुम्ही एखादे पान निर्माण किंवा संपादित करू शकता.';
|
||||
$lang['regmissing'] = 'कृपया सर्व रकाने भरा.';
|
||||
$lang['reguexists'] = 'या नावाने सदस्याची नोंदणी झालेली आहे, कृपया दुसरे सदस्य नाव निवडा.';
|
||||
$lang['regsuccess'] = 'सदस्याची नोंदणी झाली आहे आणि परवलीचा शब्द इमेल केला आहे.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
तुम्हाला खाली तुमच्या शोधाचे फलित दिसतील. @CREATEPAGEINFO@
|
||||
|
||||
====== फलित ======
|
|
@ -66,7 +66,6 @@ $lang['badpassconfirm'] = 'माफ गर्नुहोस् , पा
|
|||
$lang['minoredit'] = 'सामान्य परिवर्तन';
|
||||
$lang['draftdate'] = 'ड्राफ्ट स्वचालित रुपमा वचत भएको';
|
||||
$lang['nosecedit'] = 'यो पृष्ठ यसै बखतमा परिवर्तन भयो, खण्ड जानकारी अध्यावधिक हुन सकेन र पूरै पृष्ठ लोड भयो । ';
|
||||
$lang['searchcreatepage'] = 'यदि तपाईले आफुले खोजेको पाउनुभएन भने, तपाईलेको उपयुक्त बटन प्रयोग गरी खोज सँग सम्बन्धित शिर्षकहरु भएका पृष्ठ सृजना या सम्पादन गर्न सक्नुहुन्छ ।';
|
||||
$lang['regmissing'] = 'माफ गर्नुहोला , सबै ठाउमा भर्नुपर्नेछ ।';
|
||||
$lang['reguexists'] = 'यो नामको प्रयोगकर्ता पहिले देखि रहेको छ।';
|
||||
$lang['regsuccess'] = 'यो प्रयोगकर्ता बनाइएको छ र प्रवेशशव्द इमेलमा पठइएको छ।';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
तपाईले आफ्नो खोजको निम्न नतिजा पाउन सक्नुहुन्छ। @CREATEPAGEINFO@
|
||||
|
||||
===== नतिजा =====
|
|
@ -89,7 +89,6 @@ $lang['badpassconfirm'] = 'Sorry, het wachtwoord was onjuist';
|
|||
$lang['minoredit'] = 'Kleine wijziging';
|
||||
$lang['draftdate'] = 'Concept automatisch opgeslagen op';
|
||||
$lang['nosecedit'] = 'De pagina is tussentijds veranderd, sectie-informatie was verouderd, volledige pagina geladen.';
|
||||
$lang['searchcreatepage'] = 'Niks gevonden? Maak een nieuwe pagina met als naam je zoekopdracht. Klik hiervoor op \'\'Maak deze pagina aan\'\'.';
|
||||
$lang['regmissing'] = 'Vul alle velden in';
|
||||
$lang['reguexists'] = 'Er bestaat al een gebruiker met deze loginnaam.';
|
||||
$lang['regsuccess'] = 'De gebruiker is aangemaakt. Het wachtwoord is per e-mail verzonden.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Hieronder zijn de resultaten van de zoekopdracht. @CREATEPAGEINFO@
|
||||
|
||||
===== Resultaten =====
|
||||
|
|
|
@ -86,7 +86,6 @@ $lang['badpassconfirm'] = 'Beklager, passordet var feil';
|
|||
$lang['minoredit'] = 'Mindre endringer';
|
||||
$lang['draftdate'] = 'Kladd autolagret';
|
||||
$lang['nosecedit'] = 'Siden er i mellomtiden endret, seksjonsinfo har blitt foreldet - lastet full side istedet.';
|
||||
$lang['searchcreatepage'] = 'Hvis du ikke finner det du leter etter, så kan du skape en ny side med samme navn som ditt søk ved å klikke på \'\'**Lag denne siden**\'\'-knappen.';
|
||||
$lang['regmissing'] = 'Vennligst fyll ut alle felt.';
|
||||
$lang['reguexists'] = 'Det finnes allerede en konto med dette brukernavnet.';
|
||||
$lang['regsuccess'] = 'Brukerkonto har blitt laget og passord har blitt sendt via e-post.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Du ser resultatet av dette søket nedenfor. @CREATEPAGEINFO@
|
||||
|
||||
===== Resultat =====
|
||||
|
|
|
@ -81,7 +81,6 @@ $lang['badpassconfirm'] = 'Niestety, hasło jest niepoprawne.';
|
|||
$lang['minoredit'] = 'Mniejsze zmiany';
|
||||
$lang['draftdate'] = 'Czas zachowania szkicu';
|
||||
$lang['nosecedit'] = 'Strona została zmodyfikowana, sekcje zostały zmienione. Załadowano całą stronę.';
|
||||
$lang['searchcreatepage'] = 'Jeśli nie znaleziono szukanego hasła, możesz utworzyć nową stronę, której tytułem będzie poszukiwane hasło.';
|
||||
$lang['regmissing'] = 'Wypełnij wszystkie pola.';
|
||||
$lang['reguexists'] = 'Użytkownik o tej nazwie już istnieje.';
|
||||
$lang['regsuccess'] = 'Utworzono użytkownika. Hasło zostało przesłane pocztą.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Wyniki wyszukiwania. @CREATEPAGEINFO@
|
||||
|
||||
===== Wyniki =====
|
||||
|
|
|
@ -84,7 +84,6 @@ $lang['badpassconfirm'] = 'Desculpe, mas a senha está errada ';
|
|||
$lang['minoredit'] = 'Alterações mínimas';
|
||||
$lang['draftdate'] = 'O rascunho foi salvo automaticamente em';
|
||||
$lang['nosecedit'] = 'A página foi modificada nesse intervalo de tempo. Como a informação da seção estava desatualizada, foi carregada a página inteira.';
|
||||
$lang['searchcreatepage'] = 'Se você não encontrou o que está procurando, pode criar ou editar a página com o nome que você especificou, usando o botão apropriado.';
|
||||
$lang['regmissing'] = 'Desculpe, mas você precisa preencher todos os campos.';
|
||||
$lang['reguexists'] = 'Desculpe, mas já existe um usuário com esse nome.';
|
||||
$lang['regsuccess'] = 'O usuário foi criado e a senha enviada para seu e-mail.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Você pode encontrar os resultados da sua pesquisa abaixo. @CREATEPAGEINFO@
|
||||
|
||||
===== Resultados =====
|
||||
|
|
|
@ -76,7 +76,6 @@ $lang['badpassconfirm'] = 'Infelizmente a palavra-passe não é a correct
|
|||
$lang['minoredit'] = 'Alterações Menores';
|
||||
$lang['draftdate'] = 'Rascunho automaticamente gravado em';
|
||||
$lang['nosecedit'] = 'A página foi modificada entretanto. Como a informação da secção estava desactualizada, foi carregada a página inteira.';
|
||||
$lang['searchcreatepage'] = 'Se não encontrou o que procurava pode criar uma nova página com o nome da sua pesquisa, usando o botão apropriado.';
|
||||
$lang['regmissing'] = 'Por favor, preencha todos os campos.';
|
||||
$lang['reguexists'] = 'Este utilizador já está inscrito. Por favor escolha outro nome de utilizador.';
|
||||
$lang['regsuccess'] = 'O utilizador foi criado e a senha foi enviada para o endereço de correio electrónico usado na inscrição.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Pode encontrar os resultados da sua pesquisa abaixo. @CREATEPAGEINFO@
|
||||
|
||||
===== Resultados =====
|
||||
|
|
|
@ -72,7 +72,6 @@ $lang['badpassconfirm'] = 'Ne pare rau, parola este gresita';
|
|||
$lang['minoredit'] = 'Modificare minoră';
|
||||
$lang['draftdate'] = 'Schiță salvată automat la';
|
||||
$lang['nosecedit'] = 'Pagina s-a modificat între timp, secțiunea info a expirat, s-a încărcat pagina întreagă în loc.';
|
||||
$lang['searchcreatepage'] = 'Dacă nu ai găsit ce ai căutat, poți crea o pagină nouă prin folosirea butonului \'\'Editează această pagină\'\'.';
|
||||
$lang['regmissing'] = 'Ne pare rău, trebuie să completezi toate cîmpurile.';
|
||||
$lang['reguexists'] = 'Ne pare rău, un utilizator cu acest nume este deja autentificat.';
|
||||
$lang['regsuccess'] = 'Utilizatorul a fost creat. Parola a fost trimisă prin e-mail.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Rezultatele căutării sunt afișate mai jos. @CREATEPAGEINFO@
|
||||
|
||||
===== Rezultate =====
|
||||
|
|
|
@ -97,7 +97,6 @@ $lang['badpassconfirm'] = 'Простите, пароль неверны
|
|||
$lang['minoredit'] = 'Незначительные изменения';
|
||||
$lang['draftdate'] = 'Черновик сохранён';
|
||||
$lang['nosecedit'] = 'За это время страница была изменена и информация о секции устарела. Загружена полная версия страницы.';
|
||||
$lang['searchcreatepage'] = 'Если вы не нашли то, что искали, вы можете создать новую страницу с именем, совпадающим с запросом. Чтобы сделать это, просто нажмите на кнопку «Создать страницу».';
|
||||
$lang['regmissing'] = 'Извините, вам следует заполнить все поля.';
|
||||
$lang['reguexists'] = 'Извините, пользователь с таким логином уже существует.';
|
||||
$lang['regsuccess'] = 'Пользователь создан; пароль выслан на адрес электронной почты.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Перед вами результаты поиска. @CREATEPAGEINFO@
|
||||
|
||||
===== Результаты =====
|
|
@ -67,7 +67,6 @@ $lang['badpassconfirm'] = 'Ľutujem, heslo bolo nesprávne.';
|
|||
$lang['minoredit'] = 'Menšie zmeny';
|
||||
$lang['draftdate'] = 'Koncept automaticky uložený';
|
||||
$lang['nosecedit'] = 'Stránka bola medzičasom zmenená, informácie o sekcii sú zastaralé a z tohto dôvodu bola nahraná celá stránka.';
|
||||
$lang['searchcreatepage'] = 'Pokiaľ ste nenašli, čo hľadáte, skúste požadovanú stránku sami vytvoriť stlačením tlačidla \'\'Vytvoriť stránku\'\'.';
|
||||
$lang['regmissing'] = 'Musíte vyplniť všetky údaje.';
|
||||
$lang['reguexists'] = 'Používateľ s rovnakým menom je už zaregistrovaný.';
|
||||
$lang['regsuccess'] = 'Používateľský účet bol vytvorený a heslo zaslané emailom.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Výsledky hľadania môžete vidieť nižšie. @CREATEPAGEINFO@
|
||||
|
||||
===== Výsledky =====
|
||||
|
|
|
@ -71,7 +71,6 @@ $lang['badpassconfirm'] = 'Napaka! Geslo ni pravo.';
|
|||
$lang['minoredit'] = 'Manjše spremembe';
|
||||
$lang['draftdate'] = 'Samodejno shranjevanje osnutka je omogočeno';
|
||||
$lang['nosecedit'] = 'Stran je bila v vmesnem času spremenjena. Podatki strani so bili zastareli, zato se je celotna vsebina naložila znova.';
|
||||
$lang['searchcreatepage'] = 'V kolikor rezultati niso skladni z zahtevami iskanja, je mogoče ustvariti novo stran z nazivom vaše poizvedbe preko povezave \'\'Uredi stran\'\'.';
|
||||
$lang['regmissing'] = 'Izpolniti je treba vsa polja.';
|
||||
$lang['reguexists'] = 'Uporabnik s tem imenom že obstaja.';
|
||||
$lang['regsuccess'] = 'Uporabniški račun je uspešno ustvarjen. Geslo je bilo poslano na naveden elektronski naslov.';
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
|
||||
Spodaj so izpisani rezultati iskanja. @CREATEPAGEINFO@
|
||||
|
||||
===== Rezultati =====
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue